GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Leírások/Útmutatók => A témát indította: Y2K - 2011. március 15. - 19:29:37

Cím: [TUT] Színezett szöveg (0.3c)
Írta: Y2K - 2011. március 15. - 19:29:37
Íme, újra írásra szántam magam, s ezúttal a színek szövegésével (OMFG; reggel van) szövegek színezésével fogok foglalkozni. Alapvetõen a dolog nem nehéz, de hátha akad valaki, aki még nem ismeri. Szeretném megjegyezni, hogy ez csakis a 0.3c verzióban mûködik!
Magát a színt a kiírandó szövegbe kell beilleszteni {RRGGBB} formában. Az eddig használt integer típusban mentett színek 0xRRGGBBAA formátumban vannak mentve, így, ha megszeretnénk kapni egy szín beillesztendõ kódját, elég levenni a 0x-et (hex elõtag), illetve az utolsó két számot (alpha komponens), illetve hozzáadni a { és } jeleket.
Konkrét példa:
Kiírandó szöveg: Y2K
 
SendClientMessageToAll(0xF81414AA, \"Y{FFAF00}2{6EF83C}K\");

 
Hát ez így great! Kicsit még magyaráznék, utána jön egy kis trükk... Az Y-nak nem adtam meg még egyszer a színét, hiszen a függvény elsõ paramétere a kezdõszínt adja, azaz, amivel a szöveg legeleje kiíródik. Ha esetleg nekünk így nem tetszene, a következõ a megoldás:
 
SendClientMessageToAll(-1, \"{F81414}Y{FFAF00}2{6EF83C}K\");

 
Remélem érthetõ! Most vetõdik fel a kényelmetlenség: mi történik, ha neadj\'isten 1000 karakteres szöveget szeretnénk kiszínezni. Oda-vissza ugráljuk a kódban, ki-be másolgatva a színkódokat? Íme a trükkje: definiálni kell a színkódokat, nem megfeledkezve a { és } jelekrõl, pl.:
 
#define TC_RED {F81414}
#define TC_ORANGE {FFAF00}
#define TC_GREEN {6EF83C}

 
Most a definiált színkódokat be tudjuk illeszteni, ha lezárjuk a szöveget (\" karakterrel), odaírjuk a definiált nevet, majd újra megnyitjuk a szöveget és írjuk tovább, pl.:
 
SendClientMessageToAll(-1, \"\"#TC_RED\"Y\"#TC_ORANGE\"2\"#TC_GREEN\"K\");

 
Máris sokkal átláthatóbbak a színek, és egyszerûbb is õket létrehozni!
 
SendClientMessageToAll(-1, \"\"#TC_RED\"KÖSZÖNÖM A FIGYELMET! #\"TC_GREEN\"KÉRDÉSEK?\");
Cím: [TUT] Színezett szöveg (0.3c)
Írta: jana4 - 2011. március 15. - 19:55:21
Hibás a leírás.
Cím: [TUT] Színezett szöveg (0.3c)
Írta: Zsolesszka - 2011. március 16. - 23:38:59
Szép leírás de én próbáltam alkalmazni az itt leírt definiciós megoldást de csak hibákat kaptam.
 

#include <a_samp>
#define TC_RED {F81414}
#define TC_ORANGE {FFAF00}
#define TC_GREEN {6EF83C}
public OnFilterScriptInit()
{
SendClientMessageToAll(-1, \"\"TC_RED\"Y\"TC_ORANGE\"2\"TC_GREEN\"K\");
return 1;
}

 


teszt.pwn(9) : error 001: expected token: \"-string end-\", but found \"-identifier-\"
teszt.pwn(9) : error 017: undefined symbol \"F81414\"
teszt.pwn(9) : warning 217: loose indentation
teszt.pwn(9) : error 029: invalid expression, assumed zero
teszt.pwn(9) : fatal error 107: too many error messages on one line

 
Az általam ismert megoldás az, hogy karakterláncként kell definiálni a szöveg színezéséhez való kódokat.
 

#include <a_samp>
#define TC_RED \"{F81414}\"
#define TC_ORANGE \"{FFAF00}\"
#define TC_GREEN \"{6EF83C}\"
public OnFilterScriptInit()
{
SendClientMessageToAll(-1, \"\"#TC_RED\"Y\"#TC_ORANGE\"2\"#TC_GREEN\"K\");
return 1;
}
Cím: [TUT] Színezett szöveg (0.3c)
Írta: TengeriMalac - 2011. március 17. - 07:00:04
Ez egy full sz4r leírás, ami televan hibákkal.
Cím: [TUT] Színezett szöveg (0.3c)
Írta: SubZero - 2011. március 17. - 15:39:00
Valóban rossz, a definíciós színezés így mûködik:
 
#define TC_RED F81414
#define TC_ORANGE FFAF00
#define TC_GREEN 6EF83C
public OnFilterScriptInit()
{
   SendClientMessageToAll(-1, \"{\"#TC_RED\"}Y{\"#TC_ORANGE\"}2{\"#TC_GREEN\"}K\");
   return 1;
}
Cím: [TUT] Színezett szöveg (0.3c)
Írta: Y2K - 2011. március 17. - 19:32:01
Kimaradt pár # jel! ;D