Ü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.
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);