Szerző Téma: Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)  (Megtekintve 4366 alkalommal)

+7 Show voters
Üdv mindenkinek!
Teljesen véletlen bukkantam rá a pawnnak erre a nagyon egyszerû funkciójára.Ugye a baj az, hogy a pawnban egy sor maximum 510 karakter hosszúságú lehet.De vannak esetek amikor nekünk ettõl hosszabb karakterláncokra van szükségünk és ennek a szövegnek a nagyrésze állandó karakterekbõl áll.
Eddig milyen megoldások voltak?
Foghattunk egy jó hosszú stringet és vagy strcattal belepakoltuk amit akartunk, vagy format függvény segítségével de lényegében ugyanazt megcsináltuk mint strcattal.
Ettõl ezerszer egyszerûbb megoldás a következõ:
SendClientMessage-ben:
 
SendClientMessage(playerid,0xFFFFFFFF,\"Ez egy nagyonhosszú szöveg.....elérkezünk a pawn határaihoz\\
De semmi baj mert egy a sor végére tett fordított zárójellel a stringet folytathatjuk a következõ sorban.\");

 
format-ban:
 
format(string,sizeof(string),\"Ez szintén egy elég hosszú szöveg %s és el is értünk a pawn határaihoz ismét\\
Ismét folytathatjuk tovább %d sõt még ez is mûködik: %\\
s ennyire egyszerû az egész.\",\"asd\",5,\"asd\");

 
Tehát a dolog lényege: a sor végére illesztett \\ jellel a következõ sorban folytathatjuk a stringet.
Amit nem lehet:
 
SendClientMessage(playerid,0xFFFFFFFF,\"teszt\\
teszt\\
\\
teszt\\
teszt\");

 
Valamiért nállam ugyanazt a hibasort írta ki ennél, mint amikor egy sorban több mint 510 karakter volt.
Ennyi lenne.

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #1 Dátum: 2013. február 28. - 09:54:00 »
0 Show voters
Na ezt nem tudtam! Hogyan jöttél rá? :D Szép munka  :D

Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #2 Dátum: 2013. február 28. - 09:56:25 »
0 Show voters
Tök véletlen. Szépen rendezgettem egy dialognak a  stringjét és véletlen a \"\\n\"-bõl csak az \"n\"-t töröltem ki és utána meg nézem az alatta levõ string meg kék lett. Mondom asd xD egybõl le is teszteltem :D és mûködött :D

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #3 Dátum: 2013. február 28. - 14:03:48 »
+2 Show voters
Én inkább maradok az strcat-nál, mert ha mongyuk egy majdnem egész képernyõs dialógot akarsz felmutatni itt is **szakodni fog a fordító, hogy túl hosszú.
Soxor próbáltam (régen csak errõl tudtam), lehet, hogy rövidebb szövegeknél mûködik rendesen, de az strcat-os megoldás átláthatóbb, és nem is hibázik rá.
Amúgy ezt sortörésnek nevezik :D
« Utoljára szerkesztve: 2013. február 28. - 14:05:45 írta kurta999 »

Nem elérhető Raidon

  • 231
    • Profil megtekintése
Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #4 Dátum: 2013. február 28. - 22:20:55 »
+1 Show voters
Köszi nagyon sokat segített dobtam a +-t!

Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #5 Dátum: 2013. március 01. - 13:59:32 »
0 Show voters
Igazából erre én is rájöttem szóval gyakorlatilag használhatatlan az egész.
Azért kint hagyom a dolgot hátha valakinek valamikor hasznos lesz.

Nem elérhető totar

  • 425
    • Profil megtekintése
Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #6 Dátum: 2013. március 01. - 14:48:53 »
0 Show voters
Lenne egy kérdésem!
Ha ezt a módszert használjuk format esetén, akkor annak a string értékének nagynag kell lenni-e vagy sem?
 

format(Str, sizeof(Str), \"RegID: %d,  ID: %d,  Név: %s,  Státusz: %s,  Ölések: %d,  Halálok: %d,  Pénz: %d,  Pontok: %d\\
Regisztráció dátuma: %02d.%02d.%02d/%02d.%02d.%02d,  Utoljára a szerveren: %02d.%02d.%02d/%02d.%02d.%02d\\
Regisztrált IP: %s,  Utoljára használt IP: %s,  Szerveren eltöltött: %02d.%02d.%02d\\
FightStyle: %s,  WalkingStyle: %s, DriftLevel: %d,  StuntLevel: %d,  DMLevel: %d,  MiniGameLevel: %d\\
(3120. sor)HaveFlagTime: %02d.%02d.%02d,  HaveBonusCarTime: %02d.%02d.%02d\\
(3121. sor)ReactionTests: %d,  TeleportTests: %d,  MathsTests: %d,  GoldEggs: %d\\
HorseShoes: %d/%d,  Oysters: %d/%d\", PlayerInfo[playerid][RegID], playerid, PName(playerid), Rank, PlayerInfo[playerid][Kills], PlayerInfo[playerid][Deaths], GetPlayerMoneyEx(playerid), GetPlayerScoreEx(playerid),
PTime[0][0], PTime[0][1], PTime[0][2], PTime[0][3], PTime[0][4], PTime[0][5], PTime[1][0], PTime[1][1], PTime[1][2], PTime[1][3], PTime[1][4], PTime[1][5],
RegIP, LastIP, Hour[0][0], Minute[0][1], Second[0][2], FStyle, WStyle, PlayerInfo[playerid][DriftLevel], PlayerInfo[playerid][stuntLevel], PlayerInfo[playerid][DMLevel], PlayerInfo[playerid][MiniGameLevel],
Hour[1][0], Minute[1][1], Second[1][2], Hour[2][0], Minute[2][1], Second[2][2], PlayerInfo[playerid][ReactionTests], PlayerInfo[playerid][TeleportTests], PlayerInfo[playerid][MathsTests], PlayerInfo[playerid][GoldEggs],
PlayerInfo[playerid][HorseShoes], MaxHorseShoes, PlayerInfo[playerid][Oysters], MaxOysters);
SendClientMessage(playerid, -1, Str);

 
Nekem a Str[128 +1] és ez erre errort ír ki.
Próbáltam nagyobb string mérettel, de úgy is ezeket az errorokat kaptam.
 

(3120) : error 075: input line too long (after substitutions)
(3121) : error 037: invalid string (possibly non-terminated string)
(3121) : error 029: invalid expression, assumed zero
(3121) : error 017: undefined symbol \"d\"
(3121) : fatal error 107: too many error messages on one line
 
[/quote]
még ez se mûködik:
 

format(Str, sizeof(Str), \"{00bfff}[{ffffff}Matekteszt{00bfff}] {%06x}%s {0084d1}megoldotta a matek tesztet, %d másodperc alatt!\\
{9dd100}Nyereménye: $%d & %d score!\", GetPlayerColor(playerid) >>> 8, PName(playerid), (GetTickCount() - MathsTestCount) / 1000, RandomMoney, RandomScore);
        SendClientMessageToAll(-1, Str);
« Utoljára szerkesztve: 2013. március 01. - 15:01:01 írta totar »

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #7 Dátum: 2013. március 01. - 15:04:39 »
0 Show voters
Mert rosszul zárod le a sorokat..  :)

Nem elérhető totar

  • 425
    • Profil megtekintése
Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #8 Dátum: 2013. március 01. - 15:41:55 »
0 Show voters
Én nem látok benne rosszat.

Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #9 Dátum: 2013. március 02. - 18:48:15 »
0 Show voters
Ez a hiba csak nekem szúrja a szememet? :D
 
Idézetet írta: hegdavid95 date=1362041495\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"34268\" data-ipsquote-contentclass=\"forums_Topic
Ettõl ezerszer egyszerûbb megoldás a következõ:
SendClientMessage-ben:
SendClientMessage(playerid,0xFFFFFFFF,\"Ez egy nagyonhosszú szöveg.....elérkezünk a pawn határaihoz\\
De semmi baj mert egy a sor végére tett fordított zárójellel a stringet folytathatjuk a következõ sorban.\");
 

Nem elérhető Sramm

  • 596
    • Profil megtekintése
Hosszú dialog/string formázása (nem strcat, nem format, se semmilyen függvény)
« Válasz #10 Dátum: 2013. március 03. - 15:26:36 »
0 Show voters
Idézetet írta: kurta999 date=1362056628\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"34268\" data-ipsquote-contentclass=\"forums_Topic
Én inkább maradok az strcat-nál, mert ha mongyuk egy majdnem egész képernyõs dialógot akarsz felmutatni itt is **szakodni fog a fordító, hogy túl hosszú.
Soxor próbáltam (régen csak errõl tudtam), lehet, hogy rövidebb szövegeknél mûködik rendesen, de az strcat-os megoldás átláthatóbb, és nem is hibázik rá.
Amúgy ezt sortörésnek nevezik :D
 
Valóban egy idõ után errorozik, bár az strcat-nál általában létre kell hoznunk egy nagyobb méretû tömböt, ami nem tesz kifejezetten jót a szervernek. (Már ha sok van belõle)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal