Ez a szekció lehetővé teszi a felhasználó által írt összes hozzászólás megtekintését. Vedd figyelembe, hogy csak azokba a fórumokba írt hozzászólásokat látod, amelyekhez hozzáférésed van.
Felhasználási feltételek és információk: Szabadon használhatod a szervereden viszont nem írhatod azt oda, hogy te készítetted. Más fórumon/weboldalon csakis az engedélyemmel oszthatod meg. A banda rendszer nem menti fáljba a bandákat. Az utolsó tag kilépésekor feloszlik a banda. Maximálisan a rendszer 50darab banda és 5+1 szabadon megadható rendfokozat kezelésére készült. Ezt átírhatod nagyobbra a definícióban, de én nem javaslom. Funkciók:
ZCMD és SSCANF2 támogatás
Egyedi banda létrehozása
Banda elnevezése
Banda rendfokozatainak módosítása
5+1 darab rendfokozat
Bandába felvétel/kirúgás/csatlakozás
Névre kattintás támogatás
Bugok: Nem találtam de ha találtál akkor kérlek jelezd nekem! Megteheted privát üzenetben vagy akár itt a fórumtémában is. Kép: [hs width=300 height=300]http://i.imgur.com/qO1rv.jpg[/hs] Kód: [dload]
*/ //Szükséges függvénykönyvtárak a script futtatásához #include <a_samp> #include <zcmd> #include <sscanf2> /* ============================================================== Alapvetõ definíciók a banda szerkezetével kapcsolatban ============================================================== */ #define MAX_BANDA 50 //Nem javaslom a növelését! #define RENDFOKOZATOK 5 //Viccesebb ha lehet rendfokozatokat is hozzáadni /* ============================================================== Alapvetõ változók [globális szinte] a bandával kapcsolatban. ============================================================== */ new BandaNeve[MAX_BANDA][50]; //Igényesebb ha a bandát elnevezhetik nem pedig számazonosítóval kerülnek kiírásra new BandaTag[MAX_PLAYERS]; //Ez a változó azért funkcionál, hogy a késõbbiekben le tudjuk kérdezni melyik bandában van az ipse new BandaTagokSzama[MAX_BANDA]; //Egy bandában hányan vannak épp online new UresBanda[MAX_BANDA]; //Amennyiben nincsenek fent bandatagok ez a változó segít nekünk feloszlatni a bandát. new BandaRang[MAX_PLAYERS]; //Rendfokozat a bandatagoknak new BandaRendfokozat[MAX_BANDA][RENDFOKOZATOK+1][30];// NA ezt jól összecelláztam. Ebben kerül a rendfokozat eltárolásra new Meghivtak[MAX_PLAYERS]; //Meghívás a bandába, viszont kérdéses, hogy meghívták é a személyt new bool:Bandaban[MAX_PLAYERS]; //Bandában van a játékos? new BandatGeneral[MAX_PLAYERS]; //Éppen generál bandát? /* ============================================================== Alapvetõ színdefiníciók ============================================================== */ #define SZIN_PIROS 0xff0000AA #define SZIN_CITROM 0xf2ff00AA #define SZIN_ZOLD 0x032b0dAA /* ============================================================== Textdrawok ============================================================== */
public OnFilterScriptInit() { print(\"\\n--------------------------------------\"); print(\" Gentleman\'s Gang System for samforum.hu\"); print(\"--------------------------------------\\n\"); for(new k = 0; k < MAX_BANDA; k++) //A filterscript betöltésekor minden bandát üressé kell tenni! { UresBanda[k] = 1; } return 1; } public OnFilterScriptExit() { return 1; } public OnPlayerDisconnect(playerid, reason) { if(Bandaban[playerid] == true) { BandaTagokSzama[bandaTag[playerid]]--; if(BandaTagokSzama[bandaTag[playerid]] == 0) { UresBanda[bandaTag[playerid]] = 1;
}
} return 1; } public OnPlayerDeath(playerid, killerid, reason) { if(Bandaban[killerid] == true && Bandaban[playerid] == true) { new szoveg[128]; if(BandaTag[killerid] == BandaTag[playerid]) { format(szoveg, 128, \"A(z) {00ff2b}\'%s\' {ffffff}banda tagjai egymást gyilkolják!\", BandaNeve[bandaTag[killerid]]); SendClientMessageToAll(-1, szoveg); } else { format(szoveg, 128, \"A(z) {00ff2b}\'%s\' {ffffff}banda egyik tagja megölte a(z)! {00ff2b}\'%s\' {ffffff}banda tagját!\", BandaNeve[bandaTag[killerid]],BandaNeve[bandaTag[playerid]]);
Nos hát egy nagy feketefoltom a világból a telefonok kérdése. Lassan már 4 éve nincs telefonom mivel nem volt rá szükségem de most eljött az idõ, hogy beruházzak egyre. Az érdekelne, hogy ki milyen telefont ajánlana -25-30 000FT körül. Annyit kérek, hogy ne mondjatok olyanokat, hogy androidos meg kutya tököm mert fogalmam sincs róla mi az. Nekem telefon telefonálásra van használva semmi másra. Viszont azért nem ártana egy olyan telefon amit közösségben is elõlehetne venni úgy, hogy a közönség ezen ne szórakozzon egy sort ezért kérdezlek meg titeket.
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:
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);
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;
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.
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:
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:
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);