Szerző Téma: Harmadik lecke - TextDrawok készítése és egy új chatbox létrehozása  (Megtekintve 2613 alkalommal)

Lecke/fejlesztés tartalma: TextDrawok készítése és egy új chatbox létrehozása,


Szükséges pluginok és includék: Zamaroht\'s TextDraw Editor for 0.3d RC5-3.
Felhívás: A TextDraw editor használatáról bemutatást és letöltést találhattok a mellékletben. Továbbá mûködik 0.3e verzió fölött is.
Melléklet: [hs width=30 height=30]http://i.imgur.com/YMgkL.jpg[/hs]
Elsõ lépés:


Nézzük hol fejeztük be legutóbb:
 
#include <a_samp>
#include <zcmd>
#define SZIN_PIROS 0xff0000AA
#define SZIN_SARGA 0xffa600AA
#define SZIN_ZOLD 0x227305AA
#define SZIN_KEK 0x08027aAA
main()
{
        print(\"\\n----------------------------------\");
        print(\" SAMPFORUM.HU PAWN GYAKORLATI tanfolyam\");
        print(\"----------------------------------\\n\");
}
public OnGameModeInit()
{
   AddPlayerClass(0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
   SetGameModeText(\"Sampforum Carmageddon v0.1b\");
   return 1;
}

 
Az elsõ lépcsõben ezt hanyagoljuk, most a játékban fogunk szerkesztgetni. Rconnal töltsük be a mellékelt filterscriptet majd a /text paranccsal hozzunk létre textdrawokat a kívánt pozícióban.
Én a kész verzióról mellékeltem egy képet. Egy hasonló összedobását javaslom elsõnek. Ennek a másodlagos chatboxnak az értelme az, hogy a normál chatboxban csak a \'szerver hirdetményei\' fognak menni. Míg itt csak a tényleges beszélgetés. Engem nagyon szokott zavarni a kevert chatbox ezért is mellékelem a carmageddon játékmódba ezt a funkciót továbbá logikai elvben tartogat pár formázási érdekességet.
Tehát a text draw editorral hozzatok létre kész textdrawot és szöveggel töltsétek ki majd mozgassátok a kívánt helyre. Ahány sort szeretnétek annyi textdrawra lesz szükségünk.
Ha elkészültetek vele akkor exportáljátok a textdrawot, így megjelenítõdik egy textdrawneve.pwn fájl a scriptfiles mappában.
Második lépés:


Valami ehhez hasonlót kell látnotok:
 
/*
Filterscript generated using Zamaroht\'s TextDraw Editor Version 1.0.
Designed for SA-MP 0.3a.
Time and Date: 2012-9-9 @ 16:59:38
Instructions:
1- Compile this file using the compiler provided with the sa-mp server package.
2- Copy the .amx file to the filterscripts directory.
3- Add the filterscripts in the server.cfg file (more info here:
http://wiki.sa-mp.com/wiki/Server.cfg)
4- Run the server!
Disclaimer:
You have full rights over this file. You can distribute it, modify it, and
change it as much as you want, without having to give any special credits.
*/
#include <a_samp>
new Text:Textdraw0;
new Text:Textdraw1;
new Text:Textdraw2;
new Text:Textdraw3;
new Text:Textdraw4;
new Text:Textdraw5;
new Text:Textdraw6;
new Text:Textdraw7;
new Text:Textdraw8;
new Text:Textdraw9;
public OnFilterScriptInit()
{
print(\"Textdraw file generated by\");
print(\"    Zamaroht\'s textdraw editor was loaded.\");
// Create the textdraws:
Textdraw0 = TextDrawCreate(409.000000, 352.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw0, 255);
TextDrawFont(Textdraw0, 1);
TextDrawLetterSize(Textdraw0, 0.139999, 1.000000);
TextDrawColor(Textdraw0, -1);
TextDrawSetOutline(Textdraw0, 0);
TextDrawSetProportional(Textdraw0, 1);
TextDrawSetShadow(Textdraw0, 1);
Textdraw1 = TextDrawCreate(409.000000, 362.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw1, 255);
TextDrawFont(Textdraw1, 1);
TextDrawLetterSize(Textdraw1, 0.139999, 1.000000);
TextDrawColor(Textdraw1, -1);
TextDrawSetOutline(Textdraw1, 0);
TextDrawSetProportional(Textdraw1, 1);
TextDrawSetShadow(Textdraw1, 1);
Textdraw2 = TextDrawCreate(409.000000, 372.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw2, 255);
TextDrawFont(Textdraw2, 1);
TextDrawLetterSize(Textdraw2, 0.139999, 1.000000);
TextDrawColor(Textdraw2, -1);
TextDrawSetOutline(Textdraw2, 0);
TextDrawSetProportional(Textdraw2, 1);
TextDrawSetShadow(Textdraw2, 1);
Textdraw3 = TextDrawCreate(409.000000, 382.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw3, 255);
TextDrawFont(Textdraw3, 1);
TextDrawLetterSize(Textdraw3, 0.139999, 1.000000);
TextDrawColor(Textdraw3, -1);
TextDrawSetOutline(Textdraw3, 0);
TextDrawSetProportional(Textdraw3, 1);
TextDrawSetShadow(Textdraw3, 1);
Textdraw4 = TextDrawCreate(409.000000, 392.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw4, 255);
TextDrawFont(Textdraw4, 1);
TextDrawLetterSize(Textdraw4, 0.139999, 1.000000);
TextDrawColor(Textdraw4, -1);
TextDrawSetOutline(Textdraw4, 0);
TextDrawSetProportional(Textdraw4, 1);
TextDrawSetShadow(Textdraw4, 1);
Textdraw5 = TextDrawCreate(409.000000, 401.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw5, 255);
TextDrawFont(Textdraw5, 1);
TextDrawLetterSize(Textdraw5, 0.139999, 1.000000);
TextDrawColor(Textdraw5, -1);
TextDrawSetOutline(Textdraw5, 0);
TextDrawSetProportional(Textdraw5, 1);
TextDrawSetShadow(Textdraw5, 1);
Textdraw6 = TextDrawCreate(409.000000, 410.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw6, 255);
TextDrawFont(Textdraw6, 1);
TextDrawLetterSize(Textdraw6, 0.139999, 1.000000);
TextDrawColor(Textdraw6, -1);
TextDrawSetOutline(Textdraw6, 0);
TextDrawSetProportional(Textdraw6, 1);
TextDrawSetShadow(Textdraw6, 1);
Textdraw7 = TextDrawCreate(409.000000, 419.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw7, 255);
TextDrawFont(Textdraw7, 1);
TextDrawLetterSize(Textdraw7, 0.139999, 1.000000);
TextDrawColor(Textdraw7, -1);
TextDrawSetOutline(Textdraw7, 0);
TextDrawSetProportional(Textdraw7, 1);
TextDrawSetShadow(Textdraw7, 1);
Textdraw8 = TextDrawCreate(409.000000, 429.000000, \"Szandokan: Elmentem gyere utanam gyorsan nem birom utolerni ezt a csakot\");
TextDrawBackgroundColor(Textdraw8, 255);
TextDrawFont(Textdraw8, 1);
TextDrawLetterSize(Textdraw8, 0.139999, 1.000000);
TextDrawColor(Textdraw8, -1);
TextDrawSetOutline(Textdraw8, 0);
TextDrawSetProportional(Textdraw8, 1);
TextDrawSetShadow(Textdraw8, 1);
Textdraw9 = TextDrawCreate(408.000000, 354.000000, \"~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~\");
TextDrawBackgroundColor(Textdraw9, 255);
TextDrawFont(Textdraw9, 1);
TextDrawLetterSize(Textdraw9, 0.500000, 1.000000);
TextDrawColor(Textdraw9, -1);
TextDrawSetOutline(Textdraw9, 0);
TextDrawSetProportional(Textdraw9, 1);
TextDrawSetShadow(Textdraw9, 1);
TextDrawUseBox(Textdraw9, 1);
TextDrawBoxColor(Textdraw9, 130);
TextDrawTextSize(Textdraw9, 646.000000, 5.000000);
for(new i; i < MAX_PLAYERS; i ++)
{
if(IsPlayerConnected(i))
{
   TextDrawShowForPlayer(i, Textdraw0);
   TextDrawShowForPlayer(i, Textdraw1);
   TextDrawShowForPlayer(i, Textdraw2);
   TextDrawShowForPlayer(i, Textdraw3);
   TextDrawShowForPlayer(i, Textdraw4);
   TextDrawShowForPlayer(i, Textdraw5);
   TextDrawShowForPlayer(i, Textdraw6);
   TextDrawShowForPlayer(i, Textdraw7);
   TextDrawShowForPlayer(i, Textdraw8);
   TextDrawShowForPlayer(i, Textdraw9);
}
}
return 1;
}
public OnFilterScriptExit()
{
TextDrawHideForAll(Textdraw0);
TextDrawDestroy(Textdraw0);
TextDrawHideForAll(Textdraw1);
TextDrawDestroy(Textdraw1);
TextDrawHideForAll(Textdraw2);
TextDrawDestroy(Textdraw2);
TextDrawHideForAll(Textdraw3);
TextDrawDestroy(Textdraw3);
TextDrawHideForAll(Textdraw4);
TextDrawDestroy(Textdraw4);
TextDrawHideForAll(Textdraw5);
TextDrawDestroy(Textdraw5);
TextDrawHideForAll(Textdraw6);
TextDrawDestroy(Textdraw6);
TextDrawHideForAll(Textdraw7);
TextDrawDestroy(Textdraw7);
TextDrawHideForAll(Textdraw8);
TextDrawDestroy(Textdraw8);
TextDrawHideForAll(Textdraw9);
TextDrawDestroy(Textdraw9);
return 1;
}
public OnPlayerConnect(playerid)
{
TextDrawShowForPlayer(playerid, Textdraw0);
TextDrawShowForPlayer(playerid, Textdraw1);
TextDrawShowForPlayer(playerid, Textdraw2);
TextDrawShowForPlayer(playerid, Textdraw3);
TextDrawShowForPlayer(playerid, Textdraw4);
TextDrawShowForPlayer(playerid, Textdraw5);
TextDrawShowForPlayer(playerid, Textdraw6);
TextDrawShowForPlayer(playerid, Textdraw7);
TextDrawShowForPlayer(playerid, Textdraw8);
TextDrawShowForPlayer(playerid, Textdraw9);
return 1;
}

 
Itt már látszik egy probléma az, hogy a változók neve TextdrawX. Ez a késõbbiekben igen zavaró lehet ezért javaslom, hogy módosítsátok erre:
Megjegyzés: Lehetne itt akár cellázni is. Viszont, hogy megértsék a gyengébbek is elsõre a logikai menetet ezért nem rendelem cellákba a változók értékeit.
 

new     Text:Chat0;
new     Text:Chat1;
new     Text:Chat2;
new     Text:Chat3;
new     Text:Chat4;
new     Text:Chat5;
new     Text:Chat6;
new     Text:Chat7;
new     Text:Chat8;
new     Text:Chat9;
public OnGameModeInit()
{
     // Create the textdraws:
        Chat9 = TextDrawCreate(408.000000, 354.000000, \"~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~\");
        TextDrawBackgroundColor(Chat9, 255);
        TextDrawFont(Chat9, 1);
        TextDrawLetterSize(Chat9, 0.500000, 1.000000);
        TextDrawColor(Chat9, -1);
        TextDrawSetOutline(Chat9, 0);
        TextDrawSetProportional(Chat9, 1);
        TextDrawSetShadow(Chat9, 1);
        TextDrawUseBox(Chat9, 1);
        TextDrawBoxColor(Chat9, 130);
        TextDrawTextSize(Chat9, 646.000000, 5.000000);
       
       
        Chat0 = TextDrawCreate(409.000000, 352.000000, \" \");
        TextDrawBackgroundColor(Chat0, 255);
        TextDrawFont(Chat0, 1);
        TextDrawLetterSize(Chat0, 0.139999, 1.000000);
        TextDrawColor(Chat0, -1);
        TextDrawSetOutline(Chat0, 0);
        TextDrawSetProportional(Chat0, 1);
        TextDrawSetShadow(Chat0, 1);
        Chat1 = TextDrawCreate(409.000000, 362.000000, \" \");
        TextDrawBackgroundColor(Chat1, 255);
        TextDrawFont(Chat1, 1);
        TextDrawLetterSize(Chat1, 0.139999, 1.000000);
        TextDrawColor(Chat1, -1);
        TextDrawSetOutline(Chat1, 0);
        TextDrawSetProportional(Chat1, 1);
        TextDrawSetShadow(Chat1, 1);
        Chat2 = TextDrawCreate(409.000000, 372.000000, \" \");
        TextDrawBackgroundColor(Chat2, 255);
        TextDrawFont(Chat2, 1);
        TextDrawLetterSize(Chat2, 0.139999, 1.000000);
        TextDrawColor(Chat2, -1);
        TextDrawSetOutline(Chat2, 0);
        TextDrawSetProportional(Chat2, 1);
        TextDrawSetShadow(Chat2, 1);
        Chat3 = TextDrawCreate(409.000000, 382.000000, \" \");
        TextDrawBackgroundColor(Chat3, 255);
        TextDrawFont(Chat3, 1);
        TextDrawLetterSize(Chat3, 0.139999, 1.000000);
        TextDrawColor(Chat3, -1);
        TextDrawSetOutline(Chat3, 0);
        TextDrawSetProportional(Chat3, 1);
        TextDrawSetShadow(Chat3, 1);
        Chat4 = TextDrawCreate(409.000000, 392.000000, \" \");
        TextDrawBackgroundColor(Chat4, 255);
        TextDrawFont(Chat4, 1);
        TextDrawLetterSize(Chat4, 0.139999, 1.000000);
        TextDrawColor(Chat4, -1);
        TextDrawSetOutline(Chat4, 0);
        TextDrawSetProportional(Chat4, 1);
        TextDrawSetShadow(Chat4, 1);
        Chat5 = TextDrawCreate(409.000000, 401.000000, \" \");
        TextDrawBackgroundColor(Chat5, 255);
        TextDrawFont(Chat5, 1);
        TextDrawLetterSize(Chat5, 0.139999, 1.000000);
        TextDrawColor(Chat5, -1);
        TextDrawSetOutline(Chat5, 0);
        TextDrawSetProportional(Chat5, 1);
        TextDrawSetShadow(Chat5, 1);
        Chat6 = TextDrawCreate(409.000000, 410.000000, \" \");
        TextDrawBackgroundColor(Chat6, 255);
        TextDrawFont(Chat6, 1);
        TextDrawLetterSize(Chat6, 0.139999, 1.000000);
        TextDrawColor(Chat6, -1);
        TextDrawSetOutline(Chat6, 0);
        TextDrawSetProportional(Chat6, 1);
        TextDrawSetShadow(Chat6, 1);
        Chat7 = TextDrawCreate(409.000000, 419.000000, \" \");
        TextDrawBackgroundColor(Chat7, 255);
        TextDrawFont(Chat7, 1);
        TextDrawLetterSize(Chat7, 0.139999, 1.000000);
        TextDrawColor(Chat7, -1);
        TextDrawSetOutline(Chat7, 0);
        TextDrawSetProportional(Chat7, 1);
        TextDrawSetShadow(Chat7, 1);
        Chat8 = TextDrawCreate(409.000000, 429.000000, \" \");
        TextDrawBackgroundColor(Chat8, 255);
        TextDrawFont(Chat8, 1);
        TextDrawLetterSize(Chat8, 0.139999, 1.000000);
        TextDrawColor(Chat8, -1);
        TextDrawSetOutline(Chat8, 0);
        TextDrawSetProportional(Chat8, 1);
        TextDrawSetShadow(Chat8, 1);
  return 1;
}
public OnPlayerConnect(playerid)
{
    TextDrawShowForPlayer(playerid, Chat9);
        TextDrawShowForPlayer(playerid, Chat0);
        TextDrawShowForPlayer(playerid, Chat1);
        TextDrawShowForPlayer(playerid, Chat2);
        TextDrawShowForPlayer(playerid, Chat3);
        TextDrawShowForPlayer(playerid, Chat4);
        TextDrawShowForPlayer(playerid, Chat5);
        TextDrawShowForPlayer(playerid, Chat6);
        TextDrawShowForPlayer(playerid, Chat7);
        TextDrawShowForPlayer(playerid, Chat8);
  return 1;
}

 
Egyelõre csak ennyire van szükségünk. Ollózzuk be a játékmódba a részeket. A forrásod valahogy így kell kinézzen mint most nekem:
 
#include <a_samp>
#include <zcmd>
#define SZIN_PIROS 0xff0000AA
#define SZIN_SARGA 0xffa600AA
#define SZIN_ZOLD 0x227305AA
#define SZIN_KEK 0x08027aAA
//Chatbox textdrawjai
new     Text:Chat0;
new     Text:Chat1;
new     Text:Chat2;
new     Text:Chat3;
new     Text:Chat4;
new     Text:Chat5;
new     Text:Chat6;
new     Text:Chat7;
new     Text:Chat8;
new     Text:Chat9;
 
main()
{
        print(\"\\n----------------------------------\");
        print(\" SAMPFORUM.HU PAWN GYAKORLATI tanfolyam\");
        print(\"----------------------------------\\n\");
}
public OnGameModeInit()
{
   AddPlayerClass(0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
   SetGameModeText(\"Sampforum Carmageddon v0.1b\");
  // A chatbox textdrawjai
        Chat9 = TextDrawCreate(408.000000, 354.000000, \"~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~\");
        TextDrawBackgroundColor(Chat9, 255);
        TextDrawFont(Chat9, 1);
        TextDrawLetterSize(Chat9, 0.500000, 1.000000);
        TextDrawColor(Chat9, -1);
        TextDrawSetOutline(Chat9, 0);
        TextDrawSetProportional(Chat9, 1);
        TextDrawSetShadow(Chat9, 1);
        TextDrawUseBox(Chat9, 1);
        TextDrawBoxColor(Chat9, 130);
        TextDrawTextSize(Chat9, 646.000000, 5.000000);
       
       
        Chat0 = TextDrawCreate(409.000000, 352.000000, \" \");
        TextDrawBackgroundColor(Chat0, 255);
        TextDrawFont(Chat0, 1);
        TextDrawLetterSize(Chat0, 0.139999, 1.000000);
        TextDrawColor(Chat0, -1);
        TextDrawSetOutline(Chat0, 0);
        TextDrawSetProportional(Chat0, 1);
        TextDrawSetShadow(Chat0, 1);
        Chat1 = TextDrawCreate(409.000000, 362.000000, \" \");
        TextDrawBackgroundColor(Chat1, 255);
        TextDrawFont(Chat1, 1);
        TextDrawLetterSize(Chat1, 0.139999, 1.000000);
        TextDrawColor(Chat1, -1);
        TextDrawSetOutline(Chat1, 0);
        TextDrawSetProportional(Chat1, 1);
        TextDrawSetShadow(Chat1, 1);
        Chat2 = TextDrawCreate(409.000000, 372.000000, \" \");
        TextDrawBackgroundColor(Chat2, 255);
        TextDrawFont(Chat2, 1);
        TextDrawLetterSize(Chat2, 0.139999, 1.000000);
        TextDrawColor(Chat2, -1);
        TextDrawSetOutline(Chat2, 0);
        TextDrawSetProportional(Chat2, 1);
        TextDrawSetShadow(Chat2, 1);
        Chat3 = TextDrawCreate(409.000000, 382.000000, \" \");
        TextDrawBackgroundColor(Chat3, 255);
        TextDrawFont(Chat3, 1);
        TextDrawLetterSize(Chat3, 0.139999, 1.000000);
        TextDrawColor(Chat3, -1);
        TextDrawSetOutline(Chat3, 0);
        TextDrawSetProportional(Chat3, 1);
        TextDrawSetShadow(Chat3, 1);
        Chat4 = TextDrawCreate(409.000000, 392.000000, \" \");
        TextDrawBackgroundColor(Chat4, 255);
        TextDrawFont(Chat4, 1);
        TextDrawLetterSize(Chat4, 0.139999, 1.000000);
        TextDrawColor(Chat4, -1);
        TextDrawSetOutline(Chat4, 0);
        TextDrawSetProportional(Chat4, 1);
        TextDrawSetShadow(Chat4, 1);
        Chat5 = TextDrawCreate(409.000000, 401.000000, \" \");
        TextDrawBackgroundColor(Chat5, 255);
        TextDrawFont(Chat5, 1);
        TextDrawLetterSize(Chat5, 0.139999, 1.000000);
        TextDrawColor(Chat5, -1);
        TextDrawSetOutline(Chat5, 0);
        TextDrawSetProportional(Chat5, 1);
        TextDrawSetShadow(Chat5, 1);
        Chat6 = TextDrawCreate(409.000000, 410.000000, \" \");
        TextDrawBackgroundColor(Chat6, 255);
        TextDrawFont(Chat6, 1);
        TextDrawLetterSize(Chat6, 0.139999, 1.000000);
        TextDrawColor(Chat6, -1);
        TextDrawSetOutline(Chat6, 0);
        TextDrawSetProportional(Chat6, 1);
        TextDrawSetShadow(Chat6, 1);
        Chat7 = TextDrawCreate(409.000000, 419.000000, \" \");
        TextDrawBackgroundColor(Chat7, 255);
        TextDrawFont(Chat7, 1);
        TextDrawLetterSize(Chat7, 0.139999, 1.000000);
        TextDrawColor(Chat7, -1);
        TextDrawSetOutline(Chat7, 0);
        TextDrawSetProportional(Chat7, 1);
        TextDrawSetShadow(Chat7, 1);
        Chat8 = TextDrawCreate(409.000000, 429.000000, \" \");
        TextDrawBackgroundColor(Chat8, 255);
        TextDrawFont(Chat8, 1);
        TextDrawLetterSize(Chat8, 0.139999, 1.000000);
        TextDrawColor(Chat8, -1);
        TextDrawSetOutline(Chat8, 0);
        TextDrawSetProportional(Chat8, 1);
        TextDrawSetShadow(Chat8, 1);
   return 1;
}
public OnPlayerConnect(playerid)
{
        TextDrawShowForPlayer(playerid, Chat9);
        TextDrawShowForPlayer(playerid, Chat0);
        TextDrawShowForPlayer(playerid, Chat1);
        TextDrawShowForPlayer(playerid, Chat2);
        TextDrawShowForPlayer(playerid, Chat3);
        TextDrawShowForPlayer(playerid, Chat4);
        TextDrawShowForPlayer(playerid, Chat5);
        TextDrawShowForPlayer(playerid, Chat6);
        TextDrawShowForPlayer(playerid, Chat7);
        TextDrawShowForPlayer(playerid, Chat8);
  return 1;
}

 
Harmadik lépés:


A textdrawunk elkészült, de még nem funkcionál. Arra lesz szükségünk, hogy ha a játékos üzenetet ír a chatboxba akkor a legalsó helyre írja az üzenetét majd a régieket lentrõl felfelé mozgassa egy szinttel.
Szükségünk lesz egy változóra. Lehetne akár 10 darabot is létrehozni 128 cellaértékkel, de én most egy változónak adok 10 cellát és minden cella alá rendelek 128 karakter befogadásra alkalmas helyet. Ez bonyolultnak hangzik, de nem az:
 
//CHATBOX
new     ChatBox[10][128];

 
Ezt a játékmódunk elején hozzuk létre.
Ha ez megvan térjünk rá az OnPlayerText callbackre ami akkor kerül meghívásra amikor a játékos üzenetet ír a chatboxba. Elõször a teljes kódot mutatom majd jön hozzá a magyarázat.
 
public OnPlayerText(playerid, text[])
{
        format(ChatBox[0], 128, ChatBox[1]);
        format(ChatBox[1], 128, ChatBox[2]);
        format(ChatBox[2], 128, ChatBox[3]);
        format(ChatBox[3], 128, ChatBox[4]);
        format(ChatBox[4], 128, ChatBox[5]);
        format(ChatBox[5], 128, ChatBox[6]);
        format(ChatBox[6], 128, ChatBox[7]);
        format(ChatBox[7], 128, ChatBox[8]);
       
        TextDrawSetString(Chat7, ChatBox[8]);
        new jatekosnev[24];
        GetPlayerName(playerid, jatekosnev, 24);
        format(ChatBox[8], 128, \"~r~%s: ~w~%s\",jatekosnev,text);
        TextDrawSetString(Chat8, ChatBox[8]);
        TextDrawSetString(Chat7, ChatBox[7]);
        TextDrawSetString(Chat6, ChatBox[6]);
        TextDrawSetString(Chat5, ChatBox[5]);
        TextDrawSetString(Chat4, ChatBox[4]);
        TextDrawSetString(Chat3, ChatBox[3]);
        TextDrawSetString(Chat2, ChatBox[2]);
        TextDrawSetString(Chat1, ChatBox[1]);
        TextDrawSetString(Chat0, ChatBox[0]);
       
        return 0;
}

 
Na nézzük is a dolgokat. Elõször is lehetne ciklussal is dolgozni viszont itt most a megértés a lényeg. Logikailag átgondolva a dolgokat csupán annyi a feladatunk, hogy lentrõl felfelé mozgassuk a szövegeket. Tehát formázásban logikai síkon így kell kinézzen a gondolatvezetésünk:
format(X, 128, X+1);

 
Tehát ha a tört kódot nézzük:
 
format(ChatBox[0], 128, ChatBox[1]);
        format(ChatBox[1], 128, ChatBox[2]);
        format(ChatBox[2], 128, ChatBox[3]);
format(ChatBox[3], 128, ChatBox[4]);
format(ChatBox[4], 128, ChatBox[5]);
format(ChatBox[5], 128, ChatBox[6]);
format(ChatBox[6], 128, ChatBox[7]);
format(ChatBox[7], 128, ChatBox[8]);

 
A hetes cellába megy a 8-as cellában található szöveg, a hatosba a hetesbe található és így tovább. Remélem értitek a gondolatvezetését. Csak eggyel fentebb kell tolni a dolgokat. A format mûködését nem taglalnám túl bonyolultan. Egy \'parasztias\' fogalmazásban élve:
 
format(változó amit formázol, méret amennyit használni szeretnél, mire formázod);

 
A kicsit érdekesebb része alatta található ahol az elsõ sort adjuk meg. Ugyanis ott már le kell kérdeznünk nevet is, de ez sem nehéz.
Elõször nézzük megint egyben a kódrészletet:
 
   new jatekosnev[24];
GetPlayerName(playerid, jatekosnev, 24);
format(ChatBox[8], 128, \"~r~%s: ~w~%s\",jatekosnev,text);

 
Létrehozunk egy változót aminek a neve \'jatekosnev\' és 24 (akarommondani 23) karakter befogadására alkalmas. Ez a maximális névhossz a SAMP keretei között. Ha nem számmal szeretnéd megadni mert klienseknél változhat a nevek mérete célszerû MAX_PLAYER_NAME definícióra hivatkozni. Én most számmal adtam meg az értéket.
Második lépcsõben lekérdezzük a változóba a játékos nevét. Utána formázzük a szöveget. Amik ismeretlenek lehetnek azok a ~r~ - azaz piros textdrawszín, %s - azaz szövegre hivatkozás, - ~w~ -azaz fehér szövegszín. A vesszõ után megadjuk a hivatkozásoknak címkéit. Az olvasás balról jobbra történik így a hivatkozásunk sorrendje is ilyen kell legyen.
Legvégül a textdrawok szövegeit módosítjuk a következõképpen ugyan itt:
 
   
TextDrawSetString(Chat7, ChatBox[8]);
        TextDrawSetString(Chat8, ChatBox[8]);
TextDrawSetString(Chat7, ChatBox[7]);
TextDrawSetString(Chat6, ChatBox[6]);
TextDrawSetString(Chat5, ChatBox[5]);
TextDrawSetString(Chat4, ChatBox[4]);
TextDrawSetString(Chat3, ChatBox[3]);
TextDrawSetString(Chat2, ChatBox[2]);
TextDrawSetString(Chat1, ChatBox[1]);
TextDrawSetString(Chat0, ChatBox[0]);

 
Azt ne felejtsük el, hogy a visszatérés (return) a callbacknál 0 legyen így nem fogja elküldeni a régi chatboxba az üzenetet.
Ha bármelyik függvény nem érthetõ számodra témában kérdezhetsz róla, de elõtte nézz szét a fórumon (itt) mert lehet, hogy a kérdésedre a válasz ott már adott.
Összegzés:
 
#include <a_samp>
#include <zcmd>
#define SZIN_PIROS 0xff0000AA
#define SZIN_SARGA 0xffa600AA
#define SZIN_ZOLD 0x227305AA
#define SZIN_KEK 0x08027aAA
//Chatbox textdrawjai
new     Text:Chat0;
new     Text:Chat1;
new     Text:Chat2;
new     Text:Chat3;
new     Text:Chat4;
new     Text:Chat5;
new     Text:Chat6;
new     Text:Chat7;
new     Text:Chat8;
new     Text:Chat9;
new     ChatBox[10][128];
main()
{
        print(\"\\n----------------------------------\");
        print(\" SAMPFORUM.HU PAWN GYAKORLATI tanfolyam\");
        print(\"----------------------------------\\n\");
}
public OnGameModeInit()
{
   AddPlayerClass(0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
   SetGameModeText(\"Sampforum Carmageddon v0.1b\");
  // A chatbox textdrawjai
        Chat9 = TextDrawCreate(408.000000, 354.000000, \"~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~\");
        TextDrawBackgroundColor(Chat9, 255);
        TextDrawFont(Chat9, 1);
        TextDrawLetterSize(Chat9, 0.500000, 1.000000);
        TextDrawColor(Chat9, -1);
        TextDrawSetOutline(Chat9, 0);
        TextDrawSetProportional(Chat9, 1);
        TextDrawSetShadow(Chat9, 1);
        TextDrawUseBox(Chat9, 1);
        TextDrawBoxColor(Chat9, 130);
        TextDrawTextSize(Chat9, 646.000000, 5.000000);
       
       
        Chat0 = TextDrawCreate(409.000000, 352.000000, \" \");
        TextDrawBackgroundColor(Chat0, 255);
        TextDrawFont(Chat0, 1);
        TextDrawLetterSize(Chat0, 0.139999, 1.000000);
        TextDrawColor(Chat0, -1);
        TextDrawSetOutline(Chat0, 0);
        TextDrawSetProportional(Chat0, 1);
        TextDrawSetShadow(Chat0, 1);
        Chat1 = TextDrawCreate(409.000000, 362.000000, \" \");
        TextDrawBackgroundColor(Chat1, 255);
        TextDrawFont(Chat1, 1);
        TextDrawLetterSize(Chat1, 0.139999, 1.000000);
        TextDrawColor(Chat1, -1);
        TextDrawSetOutline(Chat1, 0);
        TextDrawSetProportional(Chat1, 1);
        TextDrawSetShadow(Chat1, 1);
        Chat2 = TextDrawCreate(409.000000, 372.000000, \" \");
        TextDrawBackgroundColor(Chat2, 255);
        TextDrawFont(Chat2, 1);
        TextDrawLetterSize(Chat2, 0.139999, 1.000000);
        TextDrawColor(Chat2, -1);
        TextDrawSetOutline(Chat2, 0);
        TextDrawSetProportional(Chat2, 1);
        TextDrawSetShadow(Chat2, 1);
        Chat3 = TextDrawCreate(409.000000, 382.000000, \" \");
        TextDrawBackgroundColor(Chat3, 255);
        TextDrawFont(Chat3, 1);
        TextDrawLetterSize(Chat3, 0.139999, 1.000000);
        TextDrawColor(Chat3, -1);
        TextDrawSetOutline(Chat3, 0);
        TextDrawSetProportional(Chat3, 1);
        TextDrawSetShadow(Chat3, 1);
        Chat4 = TextDrawCreate(409.000000, 392.000000, \" \");
        TextDrawBackgroundColor(Chat4, 255);
        TextDrawFont(Chat4, 1);
        TextDrawLetterSize(Chat4, 0.139999, 1.000000);
        TextDrawColor(Chat4, -1);
        TextDrawSetOutline(Chat4, 0);
        TextDrawSetProportional(Chat4, 1);
        TextDrawSetShadow(Chat4, 1);
        Chat5 = TextDrawCreate(409.000000, 401.000000, \" \");
        TextDrawBackgroundColor(Chat5, 255);
        TextDrawFont(Chat5, 1);
        TextDrawLetterSize(Chat5, 0.139999, 1.000000);
        TextDrawColor(Chat5, -1);
        TextDrawSetOutline(Chat5, 0);
        TextDrawSetProportional(Chat5, 1);
        TextDrawSetShadow(Chat5, 1);
        Chat6 = TextDrawCreate(409.000000, 410.000000, \" \");
        TextDrawBackgroundColor(Chat6, 255);
        TextDrawFont(Chat6, 1);
        TextDrawLetterSize(Chat6, 0.139999, 1.000000);
        TextDrawColor(Chat6, -1);
        TextDrawSetOutline(Chat6, 0);
        TextDrawSetProportional(Chat6, 1);
        TextDrawSetShadow(Chat6, 1);
        Chat7 = TextDrawCreate(409.000000, 419.000000, \" \");
        TextDrawBackgroundColor(Chat7, 255);
        TextDrawFont(Chat7, 1);
        TextDrawLetterSize(Chat7, 0.139999, 1.000000);
        TextDrawColor(Chat7, -1);
        TextDrawSetOutline(Chat7, 0);
        TextDrawSetProportional(Chat7, 1);
        TextDrawSetShadow(Chat7, 1);
        Chat8 = TextDrawCreate(409.000000, 429.000000, \" \");
        TextDrawBackgroundColor(Chat8, 255);
        TextDrawFont(Chat8, 1);
        TextDrawLetterSize(Chat8, 0.139999, 1.000000);
        TextDrawColor(Chat8, -1);
        TextDrawSetOutline(Chat8, 0);
        TextDrawSetProportional(Chat8, 1);
        TextDrawSetShadow(Chat8, 1);
   return 1;
}
public OnPlayerConnect(playerid)
{
        TextDrawShowForPlayer(playerid, Chat9);
        TextDrawShowForPlayer(playerid, Chat0);
        TextDrawShowForPlayer(playerid, Chat1);
        TextDrawShowForPlayer(playerid, Chat2);
        TextDrawShowForPlayer(playerid, Chat3);
        TextDrawShowForPlayer(playerid, Chat4);
        TextDrawShowForPlayer(playerid, Chat5);
        TextDrawShowForPlayer(playerid, Chat6);
        TextDrawShowForPlayer(playerid, Chat7);
        TextDrawShowForPlayer(playerid, Chat8);
  return 1;
}
public OnPlayerText(playerid, text[])
{
        format(ChatBox[0], 128, ChatBox[1]);
        format(ChatBox[1], 128, ChatBox[2]);
        format(ChatBox[2], 128, ChatBox[3]);
        format(ChatBox[3], 128, ChatBox[4]);
        format(ChatBox[4], 128, ChatBox[5]);
        format(ChatBox[5], 128, ChatBox[6]);
        format(ChatBox[6], 128, ChatBox[7]);
        format(ChatBox[7], 128, ChatBox[8]);
       
        TextDrawSetString(Chat7, ChatBox[8]);
        new jatekosnev[24];
        GetPlayerName(playerid, jatekosnev, 24);
        format(ChatBox[8], 128, \"~r~%s: ~w~%s\",jatekosnev,text);
        TextDrawSetString(Chat8, ChatBox[8]);
        TextDrawSetString(Chat7, ChatBox[7]);
        TextDrawSetString(Chat6, ChatBox[6]);
        TextDrawSetString(Chat5, ChatBox[5]);
        TextDrawSetString(Chat4, ChatBox[4]);
        TextDrawSetString(Chat3, ChatBox[3]);
        TextDrawSetString(Chat2, ChatBox[2]);
        TextDrawSetString(Chat1, ChatBox[1]);
        TextDrawSetString(Chat0, ChatBox[0]);
       
        return 0;
}
« Utoljára szerkesztve: 2012. Október 04. - 15:46:44 írta Gentleman »

Harmadik lecke - TextDrawok készítése és egy új chatbox létrehozása
« Válasz #1 Dátum: 2012. Október 03. - 19:10:37 »
+1
Õ, azthiszem észrevettem egy \"sebezhetõséget\" :D
Ha jól tudom, textdrawben  is használhatóak az a gametext féle kódok, színek stb., és ezt a rosszakarók kihasználhatják :S :D

Harmadik lecke - TextDrawok készítése és egy új chatbox létrehozása
« Válasz #2 Dátum: 2012. Október 03. - 19:20:25 »
0
Idézetet írta: 1ST_Chr date=1349284237\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28225\" data-ipsquote-contentclass=\"forums_Topic
Õ, azthiszem észrevettem egy \"sebezhetõséget\" :D
Ha jól tudom, textdrawben  is használhatóak az a gametext féle kódok, színek stb., és ezt a rosszakarók kihasználhatják :S :D
 
Igen tényleg! Köszönöm, hogy ezt jelezted a következõben kiegészítem egy \'szólúsönnel\'.

Nem elérhető divkn

  • 3259
    • Profil megtekintése
Harmadik lecke - TextDrawok készítése és egy új chatbox létrehozása
« Válasz #3 Dátum: 2012. Október 04. - 14:10:32 »
+1
Összegzésben hiányzik ChatBox változó és a ZCMD könyvtárat is benne van, mikor nem használod.

Harmadik lecke - TextDrawok készítése és egy új chatbox létrehozása
« Válasz #4 Dátum: 2012. Október 04. - 15:47:28 »
0
Idézetet írta: divkn date=1349352632\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28225\" data-ipsquote-contentclass=\"forums_Topic
Összegzésben hiányzik ChatBox változó és a ZCMD könyvtárat is benne van, mikor nem használod.
 
Köszönöm, hogy jelezted a hiányosságot.
A zcmd az elõzõ bevezetõ leckébõl van benne mivel a következõben már szükség(ünk) lesz rá.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal