Jump to content
  • 0

pomoc Send Formmated Message Lang


Invouk

Dotaz

Popis problému:


Mám problém, že máme mód a spravili sme si multilanguage systém no problém je, že nám to nejako nejde viz.


Chyby/varování kompilátoru a při běhu:


V hre to zobrazí ale bez %s alebo iných charakterov, takže iba čístý text,
Problém je len pri prenášani argumentov u prenášaní


Kód:

 

stock SCMF(playerid, colour, stringCZ[], stringSK[], stringEN[], va_args<>)
{
switch(GetPlayerLang(playerid))
{
  case CZ:
  {
	  new out[256 + 1];
	  va_format(out, sizeof(out), stringCZ, va_start);
	  SendClientMessage(playerid, colour, out);
	 }
	 case SK:
  {
	  new out[256 + 1];
	  va_format(out, sizeof(out), stringSK, va_start);
	  SendClientMessage(playerid, colour, out);
	 }
	 case EN:
  {
	  new out[256 + 1];
	  va_format(out, sizeof(out), stringEN, va_start);
	  SendClientMessage(playerid, colour, out);
	 }
    }
return 1;
}

 




Dodatečné poznámky:

GetPlayerLang(playerid);

Vracia hodnoty CZ / SK / EN

Edited by eXpresS
Link to comment
Share on other sites

8 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Hlavní moderátor

Můžeš nám ukázat, jak tu funkci voláš, a co myslíš tím "Vracia hodiny CZ / SK / EN"? Z toho, co jsi napsal, mi není nějak jasné, s čím máš vlastně problém.

Link to comment
Share on other sites

  • 0
  • Administrátor

Můžeš nám ukázat, jak tu funkci voláš, a co myslíš tím "Vracia hodiny CZ / SK / EN"? Z toho, co jsi napsal, mi není nějak jasné, s čím máš vlastně problém.

 

funkc GetPlayerLang vrací CZ enebo SK nebo NE

Link to comment
Share on other sites

  • 0

va_start musí mít startovní hodnotu par.

Môžeš mi to prosím ťa nejako lepšie definovať,

tento spôsob cez YSI som len niekde našiel, a tak som ti nejako prerobil ale funguje to kto vie jako,

alebo ak máte lepší nápad než bez YSI kludne.

Link to comment
Share on other sites

  • 0

sprav si pole stringy[pocet_jazykov][max_velkost_stringu]
Pošli mu vždy ten slovnesky, ale pri poslani ho nahraď za ten prislušny jazyk čo ma (vyhladaš ten string čo pošleš v slovenskom jazyku a len vratiš string z vedlajšieho stlpca (ineho jazyka).

SendClientMessage(playerid, color, Translate(language(playerid), "Toto sa pošle");

..

stock Translate(Lang:lang, string[]) {
  for (...) {
     miesto = 0; // miesto je poloha slovenskeho stringu
  }
  return poleStringov[_:lang][miesto];
}

..

new poleStringov[][] = {{"Toto sa pošle"}, {"This will be sent"}, {"Esto se mandará"}};
enum jazyky {
  SK,
  EN, 
  ES
};

Zaberie to viac RAM, ale bude to prehladnejšie a lahšie na upravu. Nebudeš tam mať žiadne define (MSG_EN_2), ale pri posielani textu presne uvidiš po slovensky aky to je text. icon_e_wink.gif

Edited by Tanga
Link to comment
Share on other sites

  • 0

Zaujímavý spôsob, ale chcel by som použiť to čo mám, bytočne načítavať stringy, všetký keď bude X tisíc slóv / písmen
Takže by som bol rád ak by sa oparvilo poprípade inak spravilo to moje.
 

stock SCML(playerid, color, lcz[], lsk[], len[])
{
    switch(GetPlayerLang(playerid))
    {
         case CZ:SendClientMessage(playerid, color, lcz);
         case SK:SendClientMessage(playerid, color, lsk);
         case EN:SendClientMessage(playerid, color, len);
    }
    return 1;
}

Toto nám pohode ide, ale ako neviem si len poradiť s formátovaním ako prenášať poprípade tie premmenné cez stock do odosielanie správ.

Edited by eXpresS
Link to comment
Share on other sites

  • 0

Zaujímavý spôsob, ale chcel by som použiť to čo mám, bytočne načítavať stringy, všetký keď bude X tisíc slóv / písmen

Tangovo řešení je 100x lepší. Takhle, podle tvého, budeš mít ve formátování trojnásobek proměnných na dané specifikátory a v tom se pak už později nerozeznáš. O rychlosti, a prosté pitomosti ani nemluvě.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...