Szerző Téma: FormatMessage  (Megtekintve 1519 alkalommal)

Nem elérhető hpeter94

  • 1450
  • Fórum fenntartó
    • Profil megtekintése
FormatMessage
« Dátum: 2012. augusztus 06. - 12:55:51 »
0 Show voters
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
« Utoljára szerkesztve: 2012. augusztus 06. - 13:08:50 írta hpeter94 »

Nem elérhető Szilard

  • Adminisztrátor
  • 1832
    • Profil megtekintése
FormatMessage
« Válasz #1 Dátum: 2012. augusztus 06. - 13:20:24 »
0 Show voters
É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)
« Utoljára szerkesztve: 2012. augusztus 06. - 13:24:05 írta Szilard00 »

Nem elérhető hpeter94

  • 1450
  • Fórum fenntartó
    • Profil megtekintése
FormatMessage
« Válasz #2 Dátum: 2012. augusztus 06. - 13:31:15 »
0 Show voters
Na igen :D Csak én szeretném \"egyszerûsíteni\" a folyamatot :D 1 sorban akarom megoldani a szövegkirást :D

Nem elérhető Szilard

  • Adminisztrátor
  • 1832
    • Profil megtekintése
FormatMessage
« Válasz #3 Dátum: 2012. augusztus 06. - 13:38:58 »
0 Show voters
SendMultiMess(playerid, COLOR, \"Hello %s, szinted %d\", \"Hi here %s, level %d\", GetPlayerName..., GetLevel..., GetPlayerName..., GetLevel...)

 
Így?

FormatMessage
« Válasz #4 Dátum: 2012. augusztus 06. - 14:06:52 »
+1 Show voters
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);

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
FormatMessage
« Válasz #5 Dátum: 2012. augusztus 06. - 14:25:56 »
+1 Show voters

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\");

Nem elérhető hpeter94

  • 1450
  • Fórum fenntartó
    • Profil megtekintése
FormatMessage
« Válasz #6 Dátum: 2012. augusztus 06. - 15:00:47 »
0 Show voters
Ezaz amire szükségem volt :P Köszike :P

FormatMessage
« Válasz #7 Dátum: 2012. augusztus 06. - 15:43:39 »
0 Show voters
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);
}

Nem elérhető hpeter94

  • 1450
  • Fórum fenntartó
    • Profil megtekintése
FormatMessage
« Válasz #8 Dátum: 2012. augusztus 06. - 18:50:35 »
0 Show voters
é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

FormatMessage
« Válasz #9 Dátum: 2012. augusztus 06. - 20:57:25 »
0 Show voters
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\");
« Utoljára szerkesztve: 2012. augusztus 06. - 21:06:41 írta ɐʞzssǝlosz »

Nem elérhető hpeter94

  • 1450
  • Fórum fenntartó
    • Profil megtekintése
FormatMessage
« Válasz #10 Dátum: 2012. augusztus 06. - 21:24:15 »
0 Show voters
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

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal