-
Nos másfél év után újra nekiestem a SA-MP nak és felhúztam magam egy problémán amivel nem nagyon tudok mit kezdeni :D
#define COLOR 0xAFAFAFAA
forward SendMultiMess(playerid, color, text_hun[], text_eng[], korlatlanszamuvaltozo);
stock SendMultiMess(playerid, color, text_hun[], text_eng[], korlatlanszamuvaltozok)
{
if(GetPVarInt(playerid, \"Nyelv\") == 0)
{
new string[128];
format(string, sizeof(string), text_hun, ésidemegavalozok);
SendClientMessage(playerid, COLOR, string);
}
else
{
new string[128];
format(string, sizeof(string), text_eng, ésidemegavalozok);
SendClientMessage(playerid, COLOR, string);
}
}
ezzel csak annyi a gondom hogy amikor a SendMultiMess-t így akarom használni
SendMultiMess(playerid, COLOR, \"Hello %s, szinted %d\", \"Hi here %s, level %d\", GetPlayerName..., GetLevel...)
akkor kapok egy szép warningot arra hogy nem megfelelõ számú a paraméter... ezt akarom úgy megcsinálni hogy ne rinyálgasson a paraméterek számán (tehát tök 8 hogy 0(!), 1, 2, 3 vagy esetleg több paramétert adok meg a formázáshoz....
Valakinek valami javaslat? :D
-
Én az ilyet string-gel szoktam megoldani :).
E.:
new hunstring[256];
new enstring[256];
format(hunstring, sizeof(hunstring), \"Hello %s, szinted %d\", GetPlayerName..., GetLevel...);
format(enstring, sizeof(enstring), \"Hi here %s, level %d\", GetPlayerName..., GetLevel...);
SendMultiMess(playerid, COLOR, hunstring, enstring)
-
Na igen :D Csak én szeretném \"egyszerûsíteni\" a folyamatot :D 1 sorban akarom megoldani a szövegkirást :D
-
SendMultiMess(playerid, COLOR, \"Hello %s, szinted %d\", \"Hi here %s, level %d\", GetPlayerName..., GetLevel..., GetPlayerName..., GetLevel...)
Így?
-
Hármas operátor.Én így oldottam meg a régi szerveremen.(Battlefield)
new String[75];
format(String,sizeof(String),GetPVarInt(playerid, \"Nyelv\")?(\"Hi here %s, level %d\"):(\"Hello %s, szinted %d\"),GetPlayerName..., GetLevel...);
SendClientMessage(playerid,-1,String);
-
new bool:FALSE = false;
#define SendFormatMultiMess(%1,%2,%3,%4,%5) \\
do{new sendfstring[256];format(sendfstring,256,(GetPVarInt(playerid, \"Nyelv\") == 0)?(%3):(%4),%5);SendClientMessage(%1,(%2),sendfstring);}while(FALSE)
#define SendMultiMess(%1,%2,%3,%4) \\
do{SendClientMessage(%1,(%2),(GetPVarInt(playerid, \"Nyelv\") == 0)?(%3):(%4));}while(FALSE)
Elsõ formatos, második sima.
SendFormatMultiMess(playerid, 0xFFFFFFFF, \"Asdasd: %s\", \"asdasdasd: %s\", valami);
SendMultiMess(playerid, 0xFFFFFFFF, \"Asdasd: Jóska gyerek\", \"asdasdasd: Pista child\");
-
Ezaz amire szükségem volt :P Köszike :P
-
Kipróbálhatod a Y_Less és Zeex és a többiek által készített eljárást is.
Az inc fájl: http://pastebin.com/R3ZeiK7L
Elmented a pawno/include mappába y_va.inc néven.
#include <y_va>
stock
SendMultiMess(playerid, color, text_hun[], text_eng[], va_args<>)
{
new
out[128];
va_format(out, sizeof (out), (GetPVarInt(playerid, \"Nyelv\") == 0)?(text_hun):(text_eng), va_start<4>); //(azért 4 mert 4 argument van alapból (playerid, color, text_hun, text_eng)
SendClientMessage(playerid, color, out);
}
-
és mire köl átírnom a va_start<4> -ot hogyha nem szeretném fixen meghatározni az argumentumok számát? tehát lehet hogy egyik üzinél eggyáltalán nincs a másiknál meg pl 4
-
Ez csak azt határozza meg honnan induljon, nem azt hogy mennyi lehet maximálisan.
Azért a neve \"va_start\".
Tehát van az a példában szereplõ stock funkció:
stock SendMultiMess(playerid, color, text_hun[], text_eng[], va_args<>)
{
Ahol a playerid, color, text_hun[], text_eng[], 4 darab fix argumentum ezért a kód az indulást onnan kezdi va_start<4>. (igazából 0 1 2 3 argument és a soron következõ a 4 dik jön)
Ha másik stock funkciót gyártasz akkor annyit kell oda írni amennyi a va_args<> elõtt szerepel argument:
stock bla(arg1, arg2, arg3, arg4, Float:arg5, arg6[], va_args<>)
{
va_format(out, sizeof (out), arg6[], va_start<6>);
Ha nem írsz utána semmit akkor a kód azt ellenõrzi és nem fut tovább. Tehát argumentek nélkül is alkalmazhatod.
SendMultiMess(playerid, -1, \"Magyar\", \"English\");
-
Ezer köszönet :D amikor angol fórumon olvastam ezt az függvénykönyvtárat nem nagyon gyüttem rá hogy akar mûködni :P Pont jó lessz ahoz amihez használni akarom :P