Láttam többeknek is problémája akadt az addolás, ajándékozás menü elkészítésével, szóval gondoltam bemutatom nektek egy kicsit kiegészített változatát.
Először is deklaráljuk a szükséges változókat és készítünk 2 definiálást:
#include <amxmodx> #include <amxmisc> #include <ColorChat> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "Akosch:." #define SLOT 32 //Itt adjuk meg, hogy hány slotos a szerverünk. #define ADDFLAG ADMIN_IMMUNITY //Itt adjuk meg, hogy milyen joggal tudjon addolni az admin. new g_iCelpont[SLOT + 1] //Ez fogja tárolni a kiválasztott személy azonosítóját. new g_iValtozo[SLOT + 1] //Ezt fogom használni, a szervereken található pont, ezüst vagy arany helyett.
Ha ezzel meglennénk akkor már minden rendelkezésünkre áll, hogy elkészítsük a menüt:
Ne feledjük, hogy a pluginban a játékosok a szerverre csatlakozásukkor kapott azonosítószám(id) szerint vannak azonosítva(ez a szám 1-től a szerver slotiszámáig terjed).
public plugin_init() { register_plugin(PLUGIN,VERSION,AUTHOR); register_clcmd("say /add", "AdasMenu"); register_clcmd("ADAS", "Adas"); } public AdasMenu(id) { if(access(id, ADDFLAG)) //Ellenőrizzük, hogy a menüt megnyitó rendelkezik-e megfelelő joggal. { new sMenu[64], sInfo[8], pMenu; formatex(sMenu, charsmax(sMenu), "Válaszd ki kinek szeretnél adni értéket!^nSaját értékeid: %i", g_iValtozo[id]); //Megjelenítjük menüben, h neki mennyije van, megelőzve azt, hogy többet írjon be mint amije van. pMenu = menu_create(sMenu, "AdasKezelo"); for(new i = 1; i < SLOT; i ++) { if(!is_user_connected(i)) //Ha nincs csatlakozva ilyen azonosítóval rendelkező játékos egyszerűen léptetünk egyet a ciklusban. continue; get_user_name(i, sMenu, charsmax(sMenu)); //Ha csatlakozva van akkor lekérjük a nevét. num_to_str(i, sInfo, charsmax(sInfo)); //Lementjük az azonosítóját is. menu_additem(pMenu, sMenu, sInfo); //Létrehozunk egy menüpontot a játékos nevével és infóként átadjuk az azonosítót. } //Legyen szép magyar minden <!-- s:D --><img src=\"{SMILIES_PATH}/icon_e_biggrin.gif\" alt=\":D\" title=\"nagyon boldog\" /><!-- s:D --> menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL); menu_setprop(pMenu, MPROP_BACKNAME, "Vissza"); menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább"); menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés"); menu_display(id , pMenu, 0); } else { ColorChat(id, GREEN, "[Információ]^1 Ehhez nincs hozzáférésed!"); //Ha nincs joga megnyitni ezt a menüt dobunk neki egy üzenetet. } return PLUGIN_HANDLED; } public AdasKezelo(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new access, info[8], name[64], callback; menu_item_getinfo(menu, item, access, info, 5, name, 63, callback); g_iCelpont[id] = str_to_num(info); //A választott menüpontnál mentett azonosítót lementjük a változónkba. if(!is_user_connected(g_iCelpont[id])) //Ha idő közben lecsatlakozott volna a választott játékos. { ColorChat(id, GREEN, "[Információ]^1 Sajnos lecsatlakozott a kiválasztott játékos!") //Dobunk egy üzenetet neki. menu_display(id, menu, 0); //Megnyitjuk neki a menüt újra, hátha talál valaki mást <!-- s:D --><img src=\"{SMILIES_PATH}/icon_e_biggrin.gif\" alt=\":D\" title=\"nagyon boldog\" /><!-- s:D --> return PLUGIN_HANDLED; } client_cmd(id, "messagemode ADAS"); //Létrehozunk egy beviteli módot("ADAS" néven). menu_destroy(menu); //Eltüntetjük a menüt a játékosnál. return PLUGIN_HANDLED; }
Már csak egy lépés maradt hátra... Ellenőrizni, hogy a beírt szöveg csak számokat tartalmaz és eldönteni, hogy mit is csinálunk vele.
Ha addolás menüt akarunk:
public Adas(id) { new adat[192], szam; read_args(adat, charsmax(adat)); remove_quotes(adat); if(is_str_num(adat)) //Ellenőrizzük, hogy csak számokat tartalmaz a beírt szöveg. { szam = str_to_num(adat) //Átkonvertáljuk a szöveget számokká. if(szam) //Ellenőrizzük, h a beírt szám nagyobb mint 0, van értelme hozzáadni. { g_iValtozo[g_iCelpont[id]] += szam; //Hozzáadjuk a választott játékos változójához a beírt számot. ColorChat(g_iCelpont[id], GREEN, "[Információ] ^1 Kaptál %i értéket", szam); //Dobunk a választott játékosnak egy üzenetet. } else ColorChat(id, GREEN, "[Információ] ^1 0-t fölösleges hozzáadni az ölésekhez."); } else ColorChat(id, GREEN, "[Információ] ^1 A megadott szöveg nem csak számokat tartalmazott.(érvénytelen)"); return PLUGIN_CONTINUE; }
Ha ajándékozás menüt:
public Adas(id) { new adat[192], szam; read_args(adat, charsmax(adat)); remove_quotes(adat); if(is_str_num(adat)) //Ellenőrizzük, hogy csak számokat tartalmaz a beírt szöveg. { szam = str_to_num(adat) //Átkonvertáljuk a szöveget számokká. if(g_iValtozo[id] >= szam) //Ellenőrizzük, hogy van-e ennyije. { g_iValtozo[g_iCelpont[id]] += szam; //Hozzáadjuk a választott játékos változójához a beírt számot. g_iValtozo[id] -= szam; //Levonjuk az ajándékozott mennyiséget. ColorChat(id, GREEN, "[Információ] ^1Sikeresen elküldtél %i értéket.", szam); ColorChat(g_iCelpont[id], GREEN, "[Információ] ^1 Kaptál %i értéket.", szam); //Dobunk a választott játékosnak egy üzenetet. } else ColorChat(id, GREEN, "[Információ] ^1 0-t fölösleges hozzáadni az ölésekhez."); } else ColorChat(id, GREEN, "[Információ] ^1 A megadott szöveg nem csak számokat tartalmazott.(érvénytelen)"); return PLUGIN_CONTINUE; }
Végül pedig a teljes addolás menü:
#include <amxmodx> #include <amxmisc> #include <ColorChat> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "Akosch:." #define SLOT 32 #define ADDFLAG ADMIN_CVAR new g_iCelpont[SLOT + 1]; //Ez fogja tárolni a kiválasztott személy azonosítóját. new g_iValtozo[SLOT + 1]; //Ezt fogom használni, a szervereken található pont, ezüst vagy arany helyett. public plugin_init() { register_plugin(PLUGIN,VERSION,AUTHOR); register_clcmd("say /add", "AdasMenu"); register_clcmd("ADAS", "Adas"); } public AdasMenu(id) { if(access(id, ADDFLAG)) //Ellenőrizzük, hogy a menüt megnyitó rendelkezik-e megfelelő joggal. { new sMenu[64], sInfo[8], pMenu; formatex(sMenu, charsmax(sMenu), "Válaszd ki kinek szeretnél adni értéket!^nSaját értékeid: %i", g_iValtozo[id]); pMenu = menu_create(sMenu, "AdasKezelo"); for(new i = 1; i < SLOT; i ++) { if(!is_user_connected(i)) //Ha nincs csatlakozva ilyen azonosítóval rendelkező játékos egyszerűen léptetünk egyet a ciklusban. continue; get_user_name(i, sMenu, charsmax(sMenu)); //Ha csatlakozva van akkor lekérjük a nevét. num_to_str(i, sInfo, charsmax(sInfo)); //Lementjük az azonosítóját is. menu_additem(pMenu, sMenu, sInfo); //Létrehozunk egy menüpontot a játékos nevével és infóként átadjuk az azonosítót. } //Legyen szép magyar minden <!-- s:D --><img src=\"{SMILIES_PATH}/icon_e_biggrin.gif\" alt=\":D\" title=\"nagyon boldog\" /><!-- s:D --> menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL); menu_setprop(pMenu, MPROP_BACKNAME, "Vissza"); menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább"); menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés"); menu_display(id , pMenu , 0); } else { ColorChat(id, GREEN, "[Információ]^1 Ehhez nincs hozzáférésed!"); //Ha nincs joga megnyitni ezt a menüt dobunk neki egy üzenetet. } return PLUGIN_HANDLED; } public AdasKezelo(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new access, info[8], name[64], callback; menu_item_getinfo(menu, item, access, info, 5, name, 63, callback); g_iCelpont[id] = str_to_num(info); //A választott menüpontnál mentett azonosítót lementjük a változónkba. if(!is_user_connected(g_iCelpont[id])) //Ha idő közben lecsatlakozott volna a választott játékos. { ColorChat(id, GREEN, "[Információ]^1 Sajnos lecsatlakozott a kiválasztott játékos!") //Dobunk egy üzenetet neki. menu_display(id, menu, 0); //Megnyitjuk neki a menüt újra, hátha talál valaki mást <!-- s:D --><img src=\"{SMILIES_PATH}/icon_e_biggrin.gif\" alt=\":D\" title=\"nagyon boldog\" /><!-- s:D --> return PLUGIN_HANDLED; } client_cmd(id, "messagemode ADAS"); //Létrehozunk egy beviteli módot("ADAS" néven). menu_destroy(menu); //Eltüntetjük a menüt a játékosnál. return PLUGIN_HANDLED; } public Adas(id) { new adat[192], szam; read_args(adat, charsmax(adat)); remove_quotes(adat); if(is_str_num(adat)) //Ellenőrizzük, hogy csak számokat tartalmaz a beírt szöveg. { szam = str_to_num(adat) //Átkonvertáljuk a szöveget számokká. if(szam) //Ellenőrizzük, h a beírt szám nagyobb mint 0, van értelme hozzáadni. { g_iValtozo[g_iCelpont[id]] += szam; //Hozzáadjuk a választott játékos változójához a beírt számot. ColorChat(g_iCelpont[id], GREEN, "[Információ] ^1 Kaptál %i értéket", szam); //Dobunk a választott játékosnak egy üzenetet. } else ColorChat(id, GREEN, "[Információ] ^1 0-t fölösleges hozzáadni az ölésekhez."); } else ColorChat(id, GREEN, "[Információ] ^1 A megadott szöveg nem csak számokat tartalmazott.(érvénytelen)"); return PLUGIN_CONTINUE; }
...és a teljes ajándékozás menü:
#include <amxmodx> #include <amxmisc> #include <ColorChat> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "Akosch:." #define SLOT 32 #define ADDFLAG ADMIN_ALL new g_iCelpont[SLOT + 1]; //Ez fogja tárolni a kiválasztott személy azonosítóját. new g_iValtozo[SLOT + 1]; //Ezt fogom használni, a szervereken található pont, ezüst vagy arany helyett. public plugin_init() { register_plugin(PLUGIN,VERSION,AUTHOR); register_clcmd("say /add", "AdasMenu"); register_clcmd("ADAS", "Adas"); } public AdasMenu(id) { if(access(id, ADDFLAG)) //Ellenőrizzük, hogy a menüt megnyitó rendelkezik-e megfelelő joggal. { new sMenu[64], sInfo[8], pMenu; formatex(sMenu, charsmax(sMenu), "Válaszd ki kinek szeretnél adni értéket!^nSaját értékeid: %i", g_iValtozo[id]); pMenu = menu_create(sMenu, "AdasKezelo"); for(new i = 1; i < SLOT; i ++) { if(!is_user_connected(i)) //Ha nincs csatlakozva ilyen azonosítóval rendelkező játékos egyszerűen léptetünk egyet a ciklusban. continue; get_user_name(i, sMenu, charsmax(sMenu)); //Ha csatlakozva van akkor lekérjük a nevét. num_to_str(i, sInfo, charsmax(sInfo)); //Lementjük az azonosítóját is. menu_additem(pMenu, sMenu, sInfo); //Létrehozunk egy menüpontot a játékos nevével és infóként átadjuk az azonosítót. } //Legyen szép magyar minden <!-- s:D --><img src=\"{SMILIES_PATH}/icon_e_biggrin.gif\" alt=\":D\" title=\"nagyon boldog\" /><!-- s:D --> menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL); menu_setprop(pMenu, MPROP_BACKNAME, "Vissza"); menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább"); menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés"); menu_display(id , pMenu , 0); } else { ColorChat(id, GREEN, "[Információ]^1 Ehhez nincs hozzáférésed!"); //Ha nincs joga megnyitni ezt a menüt dobunk neki egy üzenetet. } return PLUGIN_HANDLED; } public AdasKezelo(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new access, info[8], name[64], callback; menu_item_getinfo(menu, item, access, info, 5, name, 63, callback); g_iCelpont[id] = str_to_num(info); //A választott menüpontnál mentett azonosítót lementjük a változónkba. if(!is_user_connected(g_iCelpont[id])) //Ha idő közben lecsatlakozott volna a választott játékos. { ColorChat(id, GREEN, "[Információ]^1 Sajnos lecsatlakozott a kiválasztott játékos!") //Dobunk egy üzenetet neki. menu_display(id, menu, 0); //Megnyitjuk neki a menüt újra, hátha talál valaki mást <!-- s:D --><img src=\"{SMILIES_PATH}/icon_e_biggrin.gif\" alt=\":D\" title=\"nagyon boldog\" /><!-- s:D --> return PLUGIN_HANDLED; } client_cmd(id, "messagemode ADAS"); //Létrehozunk egy beviteli módot("ADAS" néven). menu_destroy(menu); //Eltüntetjük a menüt a játékosnál. return PLUGIN_HANDLED; } public Adas(id) { new adat[192], szam; read_args(adat, charsmax(adat)); remove_quotes(adat); if(is_str_num(adat)) //Ellenőrizzük, hogy csak számokat tartalmaz a beírt szöveg. { szam = str_to_num(adat) //Átkonvertáljuk a szöveget számokká. if(g_iValtozo[id] >= szam) //Ellenőrizzük, hogy van-e ennyije. { g_iValtozo[g_iCelpont[id]] += szam; //Hozzáadjuk a választott játékos változójához a beírt számot. g_iValtozo[id] -= szam; //Levonjuk az ajándékozott mennyiséget. ColorChat(id, GREEN, "[Információ] ^1Sikeresen elküldtél %i értéket.", szam); ColorChat(g_iCelpont[id], GREEN, "[Információ] ^1 Kaptál %i értéket.", szam); //Dobunk a választott játékosnak egy üzenetet. } else ColorChat(id, GREEN, "[Információ] ^1 0-t fölösleges hozzáadni az ölésekhez."); } else ColorChat(id, GREEN, "[Információ] ^1 A megadott szöveg nem csak számokat tartalmazott.(érvénytelen)"); return PLUGIN_CONTINUE; }
Ha szeretnénk, hogy mindenki hozzáférjen a menühöz(pl, ha ajándékozáshoz használnánk), akkor írjunk az ADDFLAG-hez ADMIN_ALL-t.
Ha elírtam, vagy rosszul fejeztem ki valamit nyugodtan szóljatok Remélem hasznos lesz pár embernek
Kiegészítés: Én ColorChat.inc-t használtam az üzenet küldéshez(személyes kedvenc), ha ez nincs meg neked, vagy kihagyod a "#include <ColorChat>" sort, akkor errorokat fog dobni.
Megoldás: Átírod az üzeneteket más üzenet küldési lehetőséghez, vagy beszerzel egy ColorChat.inc file-t.
|