hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.16. 20:37



Jelenlévő felhasználók

Jelenleg 376 felhasználó van jelen :: 2 regisztrált, 0 rejtett és 374 vendég

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot], Google [Bot]az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása Hozzászólás a témához  [12 hozzászólás ]  Oldal12Következő
Szerző Üzenet
 Hozzászólás témája: scripting írás
HozzászólásElküldve:2013.09.30. 20:46 
Offline
Újonc

Csatlakozott:2013.09.03. 13:31
Hozzászólások:5
Sziasztok!

Eddig mindig csak átírtam pluginokat, de szeretnék megtanulni sajátot is írni. Annyi lenne a kérésem, hogy ha valaki leírná az alapokat amit egy plugin írásnál bele kell írni, nagyon hálás lennék :-)

Esetleg hogy #include-nál miket kell beirni, mi az amit mindig be kell és mi az amit még kellhet ha olyan a plugin
meg az ilyen alap parancsokat ha leírnátok megköszönném, meg esetleg azt is hogy mit csinál az a parancs akár önmagában akár más parancsal összevetve.

Köszönöm!


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.09.30. 20:56 
Offline
Őskövület
Avatar

Csatlakozott:2012.03.22. 18:22
Hozzászólások:2978
Megköszönt másnak: 117 alkalommal
Megköszönték neki: 368 alkalommal
nézegesd,tanulgasd.:

AMX Mod X Scripting Tutorialok
:)

_________________
Blasenkampfwagen

https://discord.gg/uBYnNnZP
GTA:PURSUIT MTA


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.09.30. 21:11 
Offline
Felfüggesztve
Avatar

Csatlakozott:2013.06.09. 18:47
Hozzászólások:2004
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 220 alkalommal
item írta:
Sziasztok!

Eddig mindig csak átírtam pluginokat, de szeretnék megtanulni sajátot is írni. Annyi lenne a kérésem, hogy ha valaki leírná az alapokat amit egy plugin írásnál bele kell írni, nagyon hálás lennék :-)

Esetleg hogy #include-nál miket kell beirni, mi az amit mindig be kell és mi az amit még kellhet ha olyan a plugin
meg az ilyen alap parancsokat ha leírnátok megköszönném, meg esetleg azt is hogy mit csinál az a parancs akár önmagában akár más parancsal összevetve.

Köszönöm!



En itt tanultam meg plugint irni!

De az se rosz, amit ultra kuldott

**********************************************************************************************************
Alap Menü - Egy alap menü készítése. (Pl.: Fegyver Menü)
Játékos Menü - Egy menü amibe az itemek a játékosok. (Pl.: Kirúgás Menü)
Szimpla Szavazó Menü - Szavazó menü készítése. (Mint egy alap pályaszavazó)
Almenü - Almenü készítése, azaz egy menünek vannak almenüje is!
Szavazó Menü - Szavazó menü készítése. (Extra dolgokkal, Pl.: Galileo Pályaszavazó)
Egy menü több handlerrel - Több menü készítése egy handlerre!
Menü visszahívás - Menüpontok visszahívása, részletek lent!
newmenus.inc - Minden amit erről a függénykönyvtárról tudni kell!
Jegyzetek - Fontos tudni még!


Alap Menü top
- Ez egy alap menü, nem mondok róla semmit, mert minden levan írva benne!
Kód:
#include <amxmodx>

#include <cstrike>

 

 public plugin_init()

 {

    //..egyéb dolgok a pluginban, érdemes regisztrálni a plugint ha csak magában fogod használni!

 

    register_clcmd( "say /alapmenu","AwesomeMenu");

    //Regisztráljuk a parancsot, a kliens parancsot, ez esetben a játékosnak ezt kell beírnia a konzolba: "say /alapmenu"

    //Erre a parancsra fog teljesülni az "AwesomeMenu" függvény, persze ennek lehet más is a neve, ezt te nevezed el, lehetőleg

     //ne olyan nevet adj ami már van, mert akkor hibát fog dobni!

 }

 //Ez a függvény fog teljesülni a parancsunk beírására, ez esetben ez fogja megnyitni a menünket!

 public AwesomeMenu(id)

 {

    //Első lépés a menü készítéséhez, azaz ez csinálja meg a menünket persze ennek még nincsennek menüpontjai!

    new menu = menu_create("\rValasz a menumbol:", "menu_handler");

    //Jegyzet - menu_create

    //Az első paraméter a menü neve, ez lesz a menüpontok felett pár centivel (Jelen esetben: "\rValasz a menumbol:") \r-ről a lap alján írokű!

    //A második paraméter a menü végrehajtására szolgáló függvény elérése. (Jelen esetben "menu_handler") és ( public menu_handler(id, menu, item) )

 

    //A menüpontok készítése:

    menu_additem(menu, "\wElso Menupont", "1", 0);

    menu_additem(menu, "\wIngyen penz", "2", 0);

    menu_additem(menu, "\wUzenet Kozepen", "3", ADMIN_MENU);

    //Jegyzet - menu_additem

    //Jelen esetben az első menüpont az "Elso Menupont", ez fog látszódni a menüdben! (Erre egy üzenetet fogunk kapni. Bővebben: Lejebb, és a menüt is megsemisítjük!)

    //A második menüpontunk az "Ingyen Pénz" lett, erre pénzt fogunk kapni!

    //A harmadik menüpont egy üzenetet fog kapni a játékos a képernyője közepén!

    //A harmadik menüpont csak adminoknak elérhető, azaz akinek van menü joga("u" betű) (Az admin jogokat az amxconst.inc-ben találod!)

    //Az ötödik egyben utolsó paraméter a visszatérés, alapértéke -1 (Magam sem tudom mire jó ez)

 

    //Set a property on the menu

    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);

    //Jegyzet - menu_setprop

    //Az első paraméter a menü, tehát a menüd változója!

    //A második paraméter:

    //A harmadik paraméter:

 

    //Menü megnyitása, az elkészített menüt meg is kell jeleníteni, ne gondoljuk hogy magától megnyitódik!

    menu_display(id, menu, 0);

    //Jegyzet - menu_display

    //Az első paraméter az index, azaz az azonosítója a játékosnak!

    //Második paraméter az hogy melyik menüt mutassa (Jelen esetben amit én csináltam azaz: "menu")

    //Harmadik paraméter az oldalszámot jelöli, az oldalszámolás 0áról indul!

 }

 //Jöhetnek a menüpontokra történő dolgok (azé menu_handler mert azt adtuk meg a menü készítésénél)

 public menu_handler(id, menu, item)

 {

    //Ez az elágazás akkor fut le ha az illető a bezárásra kattint!

    if( item == MENU_EXIT )

    {

        menu_destroy(menu);

        //Ez megsemmisíti a menünket, majd vissza tér PLUGIN_HANDLEDDEl, azaz hogy ne folytassa!

        return PLUGIN_HANDLED;

    }

 

    //Hozzuk létre ezt a néhány változót:

    new data[6], szName[64];

    new access, callback;

    //Ez a funkció lekéri nekünk az információkat

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

 

     //visszatekintunk a menu_additem parancsra, minden egyes menuponthoz kuldtunk adatot is, itt lesz "gyanus" a dolog (ezzel adhatod meg a funkciodat)

    new key = str_to_num(data);

    //en minden adathoz szamot hasznaltam (te barmilyen stringet hasznalhatsz)

 

    //Nos itt vannak a menüpontok, azaz hogy mi történik egy-egy menüponton!

    switch(key)

    {

        case 1:

        {

            client_print(id, print_chat, "Gratulalunk, sikeresen keszitettel egy menupontot!");

            //Ezt a fenti üzenetet fogja megkapni a játékos, majd a menü megintcsak megsemmisül, és vissza térünk PLUGIN_HANDLEDel!

            menu_destroy(menu);

            return PLUGIN_HANDLED;

        }

        case 2:

        {

            cs_set_user_money(id, cs_get_user_money(id) + 3000);

            //Ez a második menüpont, a játékosunk kap 3000ezer dollárt a jelenlegi pénzéhez!

        }

        case 3:

        {

            //Ez a harmadik menüpont, ez csak adminoknak működik mint fentebb írtam!

            client_print(id, print_center, "Hello, en egy uzenet vagyok!");

        }

    }

 

    //Majd zárjuk be a menüt, és térjünk vissza PLUGIN_HANDLEDel!

    menu_destroy(menu);

    return PLUGIN_HANDLED;

 }


Játékos Menü top
*Jegyzet: Ebben már nem kommentelem le azokat a dolgokat amelyeket már az előzőben leírtam!
-Ebben a menüben az online játékosok fognak szerepelni!
Kód:
#include <amxmodx>

 #include <fun>

 

 public plugin_init()

 {

    register_clcmd( "my_player_menu","AwesomeMenu");

 }

 public AwesomeMenu(id)

 {

    //A menü készítése...

    new menu = menu_create("\rValaszd ki a jatekost:", "menu_handler");

 

    //A ciklushoz szükséges változók létrehozása

    new players[32], pnum, tempid;

 

    //Változók létrehozása

    new szName[32], szTempid[10];

 

    //Lekérjük az online játékosok számát

    get_players(players, pnum);

 

    //Ciklus lefutása annyiszor ahány játékos fentvan a szerveren!

    for( new i; i<pnum; i++ )

    {

        //Elmentjük a players[i]-t tempid néven!

        tempid = players[i];

 

        //Lekérjük a játékos nevét

        get_user_name(tempid, szName, charsmax(szName));

        num_to_str(tempid, szTempid, charsmax(szTempid));

 

        //Játékos hozzá adása a menübe, menüpontként!

        menu_additem(menu, szName, szTempid, 0);

 

    }

 

    //Megjelenítjük a menüt, amiben a játékosok nevei vannak!

    menu_display(id, menu, 0);

 }

 public menu_handler(id, menu, item)

 {

    if( item == MENU_EXIT )

    {

        menu_destroy(menu);

        return PLUGIN_HANDLED;

    }

 

    new data[6], szName[64];

    new access, callback;

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

 

    //Lekérjük a játékos szavazatát (jelen esetben a data)

    new tempid = str_to_num(data);

 

    //Ebben az elágazásban lecsekkoljuk hogy a kiválasztott játékos él-e!

    if( is_user_alive(tempid) )

    {

        //Beállítja a kiválasztott játékos életét 100ra!

        set_user_health(tempid, 100);

    }

 

    menu_destroy(menu);

    return PLUGIN_HANDLED;

 }


Szimpla Szavazó Menü top
*Jegyzet: Ebben már nem kommentelem le azokat a dolgokat amelyeket már az előzőben leírtam!
Ez egy sima szavazó menü, nincs benne semmi extra!
Kód:
 #include <amxmodx>

 //A szavazó menü változójának létrehozása:

 new gVoteMenu;

 //A szavazási lehetőségek létrehozása, ez esetben 2 az értéke!

 new gVotes[2];

 //Ez a változó arra szolgál hogy leellenőrizze hogy a szavazás folyamatban van e már!

 new gVoting;

 

 public plugin_init()

 {

    //Regisztráljük a kliens parancsot, ez esetben ezt kell beírni a konzolba: start_vote

    register_clcmd( "start_vote","StartVote");

 }

 public StartVote(id)

 {

    //Ebben az elágazásban leellenőrizzük hogy a szavazás folyamatban van e már! Ha igen akkor bele megy az elágazásba!

    if( gVoting )

    {

        client_print(id, print_chat, "Sajnalom, a szavazas mar folyamatban van!");

        //Visszatérünk PLUGIN_HANDLED-el hogy ne írja ki a konzolba hogy: "Unkown Command"

        return PLUGIN_HANDLED;

    }

 

    //Létrehozzuk a menüt

    gVoteMenu = menu_create("\rKerlek szavazz!:", "menu_handler");

 

    //A menüpontok

    menu_additem(gVoteMenu, "A szerver jo", "0", 0);

    menu_additem(gVoteMenu, "A szerver rossz", "1", 0);

 

    //Változók létrehozása, amelyekre szükségünk lesz

    new players[32], pnum, tempid;

 

    //Lekérjük az online játékosok számát

    get_players(players, pnum);

 

    //Elindítjuk a ciklust, amely annyiszor fut le ahány játékos fentvan a szerveren!!

    for( new i; i<pnum; i++ )

    {

        tempid = players[i];

 

        //Megjelenítjük a menüt a kliensnek!

        menu_display(tempid, gVoteMenu, 0);

 

        //Hozzá adunk a gVoting változóhoz egyet, ez akadályozza meg hogy ne lehessen 2szavazás egyszerre!

        gVoting++;

    }

 

    //Időzítjük a szavazás végét, jelen esetbe 10másodpercre

    set_task(10.0, "EndVote");

 

    return PLUGIN_HANDLED;

 }

 public menu_handler(id, menu, item)

 {

    //Belép ebbe az elágazásba hogyha nem szavazott, vagy kilépett belőle a játékos!

    //Fontos hogy a || azt jelenti hogy: vagy

    if( item == MENU_EXIT || !gVoting )

    {

        return PLUGIN_HANDLED;

    }

 

    new data[6], szName[64];

    new access, callback;

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

 

    //Lekérjük azt hogy mire szavazott, jelen esetben az adat tárolja!

    new voteid = str_to_num(data);

 

    //Hozzáadunk egy értékek ahoz amire a játékos szavazott

    gVotes[voteid]++;

 

    return PLUGIN_HANDLED;

 }

 public EndVote()

 {

    //Ez az elágazás leellenőrzi hogy a egyes menüpontra szavaztak e többen! Ha igen akkor bele megy az elágazásba

    if( gVotes[0] > gVotes[1] )

        client_print(0, print_chat, "A szerver jo (%d) ember szerint!", gVotes[0] );

 

    //Ez meg az ellenkezője, azaz hogyha a második menüpontra szavaztak többen akkor megy bele!

    else if( gVotes[0] < gVotes[1] )

        client_print(0, print_chat, "A szerver rossz (%d) szerint", gVotes[1] );

 

    //Ez akkor érvényesül ha mindkettőre ugyan annyian szavaztak!

    else

        client_print(0, print_chat, "A szavazas sikertelen mindenki ugyan arra szavazott! (%d)", gVotes[0] );

 

    //Majd a menü megsemmisítése

    menu_destroy(gVoteMenu);

 

    //A gVoting változó értékét 0ára állítjuk, kezdőthet újra a szavazás!

    gVoting = 0;

 }


Almenü top
*Ennek a menünek lesz egy almenüje!
Kód:
 #include <amxmodx>

 

 public plugin_init()

 {

    register_clcmd( "my_awesome_menu","AwesomeMenu");

 }

 public AwesomeMenu(id)

 {

    new menu = menu_create("\rKerlek valasz a menubol!:", "menu_handler")

 

    menu_additem(menu, "\wEzzel nem torenik semmi", "1", 0);

    menu_additem(menu, "\wEz megnyitja az almenut", "2", 0);

 

    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);

    menu_display(id, menu, 0);

 }

 public menu_handler(id, menu, item)

 {

    if( item == MENU_EXIT )

    {

        menu_destroy(menu);

        return PLUGIN_HANDLED;

    }

 

    new data[6], szName[64];

    new access, callback;

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

 

    new key = str_to_num(data);

 

    switch(key)

    {

        case 1:

        {

            client_print(id, print_chat, "Gratulalok, nem tortent semmi:)");

        }

        case 2:

        {

            //Submenu függvény küldése a játékosnak! Tehát ez lesz az almenü!

            SubMenu(id);

        }

    }

 

    menu_destroy(menu);

    return PLUGIN_HANDLED;

 }

 SubMenu(id)

 {

    //Itt egy új menüt készítünk, fontos hogy a handlernek más nevet adjunk!!!!

    new menu = menu_create("\rValasz az almenubol:", "submenu_handler")

 

    menu_additem(menu, "\wMenupont #1", "1", 0);

    menu_additem(menu, "\wMenupont #2", "2", 0);

 

    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);

    menu_display(id, menu, 0);

 }

 public submenu_handler(id, menu, item)

 {

    if( item == MENU_EXIT )

    {

        menu_destroy(menu);

 

        //Leellenőrizzük hogy a játékos csatlakozva van e!

        if( is_user_connected(id) )

            //Elküldjük nekik az AwesomeMenu függvényt! Tehát megnyitódik neki az első menü!

            AwesomeMenu(id);

 

        return PLUGIN_HANDLED;

    }

 

    new data[6], szName[64];

    new access, callback;

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

 

    new key = str_to_num(data);

 

    switch(key)

    {

        case 1:

        {

            client_print(id, print_chat, "Ez az egyes menupont!");

        }

        case 2:

        {

            client_print(id, print_chat, "Ez a kettes menupont!");

        }

    }

 

    menu_destroy(menu);

 

    //Ez után megint megnyitjuk neki az első menüt!

    AwesomeMenu(id);

 

    return PLUGIN_HANDLED;

 }


Szavazó Menü top
- Ebben már nemírom le azokat amelyeket már feljebb leírtam!

Kód:
#include <amxmisc>

#include <fun>

 

 //Hány darab menüpont legyen, ez esetben hány darab játékost lehessen kiválasztani!

 #define MAX_VOTEIDS 7

 

 //Mennyit érjen egy sima játékos szavazata!

 #define WEIGHT_PLAYER 1

 //Mennyit érjen egy admin szavazata!

 #define WEIGHT_ADMIN 2

 

 new gVoteMenu;

 new gVotes[MAX_VOTEIDS];

 new gVoting;

 

 //Ez a változó tárolja a szavazatokat!

 new gVoteID[MAX_VOTEIDS];

 

 public plugin_init()

 {

    register_clcmd( "start_vote","StartVote");

 }

 public StartVote(id)

 {

    if( gVoting )

    {

        client_print(id, print_chat, "Sajnálom, a szavazás már folyamatban van!");

        return PLUGIN_HANDLED;

    }

 

    gVoteMenu = menu_create("\rKi kapjon 255 életet?", "menu_handler");

 

    //A játékosok lekérése, a halott játékosokat kihadjuk!

    new players[32], pnum, tempid;

    get_players(players, pnum, "a");

 

    //Boole változó, ami azt az adatot tárolja hogy a játékosunk benne van e a szavazásban!

    new bool:player_added[33], voteid_count;

 

    new szName[32], szTempid[10];

 

    //While ciklus annyiszor fut le amég az állítás igaz!

    while( voteid_count < MAX_VOTEIDS && voteid_count < pnum )

    {

        //Random játékos kiválasztása!

        tempid = players[ random(pnum) ];

 

        //Ha a random játékost nem adták még bele a menübe akkor bele tér az elágazásba!

        if( !player_added[tempid] )

        {

            get_user_name(tempid, szName, charsmax(szName));

 

                        //Menüpont generálás!

            num_to_str(voteid_count, szTempid, charsmax(szTempid));

 

            menu_additem(gVoteMenu, szName, szTempid, 0);

 

            //A fentebb készített bool változonk igazra állítása, tehát a játékos benne van a menüben!

            player_added[tempid] = true;

 

            gVoteID[voteid_count] = tempid;

 

            //voteid_count változóhoz hozzá adunk egy értéket! Tehát mindig amikor ide érkezünk akkor hozzá ad egy értéket!

            voteid_count++;

        }

    }

 

    //Most már megvannak a random játékosok a menüben!

 

    for( new i; i<pnum; i++ )

    {

        //Elmentjük a tempidt így nem kell újra indexelni!

        tempid = players[i];

 

        //Megjelenírjük a menüt a célpontunknak!

        menu_display(tempid, gVoteMenu, 0);

 

        //Mennyit ér a szavazat, fent a definicióban adtuk meg!

        if( is_user_admin(tempid) )

            gVoting += WEIGHT_ADMIN;

        else

            gVoting += WEIGHT_PLAYER;

    }

 

    set_task(10.0, "EndVote");

 

    return PLUGIN_HANDLED;

 }

 public menu_handler(id, menu, item)

 {

    //Ha nem szavazott, vagy a kilépésre ment akkor be térünk az elágazásba!

    if( item == MENU_EXIT || !gVoting )

    {

        return PLUGIN_HANDLED;

    }

 

    new data[6], szName[64];

    new access, callback;

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

 

    //Lekérjük a szavazatokat!

    new voteid_num = str_to_num(data);

 

    //Hozzá adjuk a szavazatokat, admin esetén 2, játlkos esetén 1! Definicióban változtatható!

    if( is_user_admin(id) )

        gVotes[voteid_num] += WEIGHT_ADMIN;

    else

        gVotes[voteid_num] += WEIGHT_PLAYER;

 

    return PLUGIN_HANDLED;

 }

 public EndVote()

 {

    //Ez a változó tárolja hogy ki hány szavazatot kapott!

    new votes_select;

 

    //Ez tartalmazza a legtöbb szavazatot kapó első három játékost!

    new votes[3];

 

    //Ez tartalmazza az első hátom szavazatot kapó játékost!

    new voteid[3];

 

    new i, j;

 

    //For ciklus lefutása "MAX_VOTEIDS" értékével, tehát ennyiszer fut le!

    for( i=0; i<MAX_VOTEIDS; i++ )

    {

        //Szavazatok lekérése!

        if( gVotes[i] )

        {

            if( votes_select < 3 )

            {

                votes[votes_select] = gVotes[i];

                voteid[votes_select] = i;

 

                votes_select++;

            }

            else

            {

                for( j=0; j<3; j++ )

                {

                    //Ha kevesebb szavazat érkezett!

                    if( votes[j] < gVotes[i] )

                    {

                        //Modosítjuk az adatot!

                        votes[j] = gVotes[i];

                        voteid[j] = i;

 

                        //És itt a vége!

                        break;

                    }

                }

            }

        }

    }

 

    //Ha senki nem szavazott!

    if( !votes_select )

    {

        client_print(0, print_chat, "Senki nem szavazott xD");

    }

    //Amennyiben csak egy játékos kapott szavazatot!

    else if( votes_select == 1 )

    {

        //Lefuttatjuk a VoteGiveHealth függvént a voteid[0]-án!

        VoteGiveHealth( voteid[0] );

    }

    //Amennyiben kettő játékos kapott szavazatot!

    else if( votes_select == 2 )

    {

        //Amennyiben a szavazatok eggyenlőek a kettő fél között!

        if( votes[0] == votes[1] )

        {

            //Valamelyiken lefuttatjuk a VoteGiveHealth függvényt!

            client_print(0, print_chat, "Kivalasztas veletlenszeruen, mert ketto jatekos egyenlo szavazatot kapott!" );

            VoteGiveHealth( voteid[ random(2) ] );

        }

 

        //Amennyiben az első több szavazatot kapott mint a második!

        else if( votes[0] > votes[1] )

            //Az első kapja meg az életet!

            VoteGiveHealth( voteid[0] );

 

        //Amennyiben a második többet kapot mint az első!

        else

            //A második kapja meg az életet!

            VoteGiveHealth( voteid[1] );

    }

    //Ha 3 külömböző emberre szavaztak!

    else

    {

        //A 3ember közül egyet kiválasztunk véletenszerűen!

        client_print(0, print_chat, "Harom ember kozul cska egy kaphat eletet:D" );

        VoteGiveHealth( voteid[ random(3) ] );

    }

 

    menu_destroy(gVoteMenu);

    gVoting = 0;

 }

 VoteGiveHealth(id)

 {

    if( is_user_alive(id) )

    {

        set_user_health(id, 255);

        new szName[32];

        get_user_name(id, szName, charsmax(szName));

        client_print(0, print_chat, "%s kapott 255 eletet!", szName);

    }

 }


Egy menü több handlerrel top
- Ebben szerepel egy almenü is, erről már feljebb beszéltem! Itt a kettő menünek egy handlere lesz!

Kód:
#include <amxmodx>

 

 public plugin_init()

 {

    register_clcmd( "my_awesome_menu","AwesomeMenu");

 }

 public AwesomeMenu(id)

 {

    new menu = menu_create("\rValassz a menubol:", "menu_handler")

 

    //Jegyezzuk meg hogy itt a 3parameter elott ott al egy m betu, ez jelzi nekunk hogy ez a MAIN menu!

    menu_additem(menu, "\wSemmi", "m1", 0);

    menu_additem(menu, "\wUgras az almenube", "m2", 0);

 

    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);

    menu_display(id, menu, 0);

 }

 SubMenu(id)

 {

    new menu = menu_create("\rValassz az elmenubol:", "menu_handler")

 

    //Jegyezzuk meg hogy itt a 3parameter elott ott al egy s betu, ez jelzi nekunk hogy ez a SUB menu!

    menu_additem(menu, "\wAlmenu #1", "s1", 0);

    menu_additem(menu, "\wAlmenu #2", "s2", 0);

 

    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);

    menu_display(id, menu, 0);

 }

 public menu_handler(id, menu, item)

 {

    if( item == MENU_EXIT )

    {

        menu_destroy(menu);

        return PLUGIN_HANDLED;

    }

 

    new data[6], szName[64];

    new access, callback;

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

 

    //Lekérjük az első karakterét, tehát s vagy m!

    new key = str_to_num(data[1]);

 

    //Bele megyünk s vagy m előjel alapján!

    switch( data[0] )

    {

        //Ez a sima menünk!

        case 'm':

        {

            switch( key )

            {

                case 1:

                {

                    client_print(id, print_chat, "Ez egy semmi");

                }

                case 2:

                {

                    SubMenu(id);

                }

            }

        }

        //Ez az almenünk!

        case 's':

        {

            switch( key )

            {

                case 1:

                {

                    client_print(id, print_chat, "Almenü: Semmi 1");

                }

                case 2:

                {

                    client_print(id, print_chat, "Almenü: Semmi 2");

                }

            }

 

            //Megnyitjuk a főmenüt!

            AwesomeMenu(id);

        }

    }

 

    menu_destroy(menu);

    return PLUGIN_HANDLED;

 }


Menü visszahívása top

Kód:
 #include <amxmodx>

 #include <hamsandwich>

 

 //Változó létrehozása amelly tárolja a visszahívást!

 new g_MenuCallback;

 

 public plugin_init()

 {

    register_clcmd( "my_player_menu","RespawnMenu");

 

    //Visszahívási függvény csinálása!

    g_MenuCallback = menu_makecallback( "menuitem_callback" );

 }

 public RespawnMenu(id)

 {

    new menu = menu_create("\rValaszd ki a jatekost, akit ujra akarsz eleszteni!:", "menu_handler");

 

    new players[32], pnum, tempid;

    new szName[32], szTempid[10];

    get_players(players, pnum);

 

    for( new i; i<pnum; i++ )

    {

        tempid = players[i];

        get_user_name(tempid, szName, charsmax(szName));

        num_to_str(tempid, szTempid, charsmax(szTempid));

 

        //Visszhíváshoz beállítjuk a változónk értékét!

        menu_additem(menu, szName, szTempid, 0, g_MenuCallback);

        //Az utolsó paraméter a visszahívás!

 

    }

 

    menu_display(id, menu, 0);

 }

 //Ez a visszahivási függvény. Visszatérések: ITEM_ENABLED és ITEM_DISABLED

 public menuitem_callback(id, menu, item)

 {

    //A menüpont tárolásához szükséges változók készítése!

    new data[6], szName[64];

    new access, callback;

 

    //Lekérjük az információkat!

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

    //Jegyzet - a visszahívásnak meg kell eggyeznie a g_MenuCallback-al!

 

    //A játékosunk lesz a tempid!

    new tempid = str_to_num(data);

 

    //Amennyiben él a játékos vissza térünk ITEM_DISABLED-el, tehát "kikapcsolva"!

    if( is_user_alive( tempid ) )

    {

        return ITEM_DISABLED;

    }

 

    //Ha nem él akkor vissza térünk ITEM_ENABLED, tehát "bekapcsolva"

    return ITEM_ENABLED;

 }

 public menu_handler(id, menu, item)

 {

    if( item == MENU_EXIT )

    {

        menu_destroy(menu);

        return PLUGIN_HANDLED;

    }

 

    new data[6], szName[64];

    new access, callback;

    menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);

 

    new tempid = str_to_num(data);

 

    //Ha a játékos nem él akkor bele megy az elágazásba!

    //Jegyzet - Azért van itt ellenőrzés mert lehet közben újra éledt a játékos, jobb biztosra menni:)

    if( !is_user_alive(tempid) )

    {

        //Respawn them

        ExecuteHamB(Ham_CS_RoundRespawn, tempid);

    }

 

    menu_destroy(menu);

    return PLUGIN_HANDLED;

 }


newmenus.inc top
- A newmenus függvénytárról minden információ

Kód:
//The following defines are to be used with the native menu_setprop

#define MPROP_PERPAGE   1    /* Number of items per page (param1 = number, 0=no paginating, 7=default) */

#define MPROP_BACKNAME  2  /* Name of the back button (param1 = string) */

#define MPROP_NEXTNAME  3  /* Name of the next button (param1 = string) */

#define MPROP_EXITNAME  4  /* Name of the exit button (param1 = string) */

#define MPROP_TITLE  5        /* Menu title text (param1 = string) */

#define MPROP_EXIT    6  /* Exit functionality (param1 = number, see MEXIT constants) */

#define MPROP_NOCOLORS  8  /* Sets whether colors are not auto (param1 = number, 0=default) */

#define MPROP_NUMBER_COLOR  10    /* Color indicator to use for numbers (param1 = string, "\r"=default) */

 

//These two defines are to be used when changing a menu's MPROP_EXIT value

#define MEXIT_ALL      1    /* Menu will have an exit option (default)*/

#define MEXIT_NEVER  -1      /* Menu will not have an exit option */

 

//For more details about the following natives, check your actual newmenus.inc

native menu_create(const title[], const handler[], ml=0);

native menu_makecallback(const function[]);

native menu_additem(menu, const name[], const info[]="", paccess=0, callback=-1);

native menu_pages(menu);

native menu_items(menu);

native menu_display(id, menu, page=0);

native menu_find_id(menu, page, key);

native menu_item_getinfo(menu, item, &access, info[], infolen, name[]="", namelen=0, &callback);

native menu_item_setname(menu, item, const name[]);

native menu_item_setcmd(menu, item, const info[]);

native menu_item_setcall(menu, item, callback=-1);

native menu_destroy(menu);

native player_menu_info(id, &menu, &newmenu, &menupage=0);

native menu_addblank(menu, slot=1);

native menu_setprop(menu, prop, ...);

native menu_cancel(player);


Jegyzetek top

Ha a menü hibás akkor a visszatérés: -1
Ha csak egy menüt használsz akkor célszerű ha csinálsz egy konstans menüt, tehát nem kell létrehozni, és megszüntetni függvényenként!
Ezek csak példák, egy menühöz több minden is kell! A fórum megfelelő részén szívesen segítünk!
Elérhető színek!: (ez az összes elérhető szín, új színeket nem tudsz csinálni!)
Fehér - \w
Citrom - \y
Piros - \r
Szürke - \d
A szöveg igazítása középre- \R
A menü nem jelenik meg ha nincs menüpont!
A menü eltüntetése:
Kód:
show_menu(id, 0, "^n", 1);

A következő oldalon, előző oldal, és a kilépés menüpont eltüntetése:
Kód:
menu_setprop(menu, MPROP_PERPAGE, 0);
1
**********************************************************************************************************

_________________
Ha elnyerte valamelyik témában a hozzászólásom a tetszésedet melyet olvastál, akkor egy egyszerű gombnyomással kifejezheted, hogy tetszett.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.09.30. 21:29 
Szia!
Egy kissebb segítség konyhanyelven.

minden plugin include-okkal nyílik meg.
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx> <-- Ez mindig kell!!!!!
  2. #include <amxmisc>

így nyílik meg egy plugin:
SMA Forráskód: [ Mindet kijelol ]
  1. public plugin_init()

Minden egyes plugin funkciókat, parancsokat { } közé írunk!
SMA Forráskód: [ Mindet kijelol ]
  1. {
  2. teszt
  3. }

Van pár hozzáfűződés.
SMA Forráskód: [ Mindet kijelol ]
  1. new //új általában változókat hívunk meg vele!
  2. if //ha xy PL: if(pénz == 1000)
  3. while //amíg xy.
  4. Még van sok!!! (ezek az alapok.)

Vannak az operátorok!
SMA Forráskód: [ Mindet kijelol ]
  1. Általában használt:
  2. +, -, *, &, :, =, ||, <, >, !

Pár parancs:
SMA Forráskód: [ Mindet kijelol ]
  1. cs_get_user_money --> lekéri az emberke pénzét! Használata: if(cs_get_user_money(id) <= 16000)
  2. set_user_money --- > ez beállítja a pénzét! használata: set_user_money(id, 16000)
  3. set_task --> időzítést tehetsz egy pluginra! set_task(2.0, "asd"/*ez hívódik meg!*/, id)
  4. register_plugin("plugin neve","verziója","készítője.")
  5. Bővebben az oldalon találsz még ilyeneket!

Vannak olyanok amikkel letudsz futtatni valamit a pluginokon:
SMA Forráskód: [ Mindet kijelol ]
  1. return PLUGIN_HANDLED;
  2. return PLUGIN_CONTINUE;
  3. stb..

Ha kell még segítség, vagy valamit nem értessz írj :)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.10.01. 12:42 
Offline
Signore Senior
Avatar

Csatlakozott:2011.09.09. 17:39
Hozzászólások:4020
Megköszönt másnak: 12 alkalommal
Megköszönték neki: 139 alkalommal
~TeQuiLa` írta:
Szia!
Egy kissebb segítség konyhanyelven.

minden plugin include-okkal nyílik meg.
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx> <-- Ez mindig kell!!!!!
  2. #include <amxmisc>

így nyílik meg egy plugin:
SMA Forráskód: [ Mindet kijelol ]
  1. public plugin_init()

Minden egyes plugin funkciókat, parancsokat { } közé írunk!
SMA Forráskód: [ Mindet kijelol ]
  1. {
  2. teszt
  3. }

Van pár hozzáfűződés.
SMA Forráskód: [ Mindet kijelol ]
  1. new //új általában változókat hívunk meg vele!
  2. if //ha xy PL: if(pénz == 1000)
  3. while //amíg xy.
  4. Még van sok!!! (ezek az alapok.)

Vannak az operátorok!
SMA Forráskód: [ Mindet kijelol ]
  1. Általában használt:
  2. +, -, *, &, :, =, ||, <, >, !

Pár parancs:
SMA Forráskód: [ Mindet kijelol ]
  1. cs_get_user_money --> lekéri az emberke pénzét! Használata: if(cs_get_user_money(id) <= 16000)
  2. set_user_money --- > ez beállítja a pénzét! használata: set_user_money(id, 16000)
  3. set_task --> időzítést tehetsz egy pluginra! set_task(2.0, "asd"/*ez hívódik meg!*/, id)
  4. register_plugin("plugin neve","verziója","készítője.")
  5. Bővebben az oldalon találsz még ilyeneket!

Vannak olyanok amikkel letudsz futtatni valamit a pluginokon:
SMA Forráskód: [ Mindet kijelol ]
  1. return PLUGIN_HANDLED;
  2. return PLUGIN_CONTINUE;
  3. stb..

Ha kell még segítség, vagy valamit nem értessz írj :)


Ennek a nagyrésze baromság, vak vezet világtalant..

Olvasgasd inkább az Amxmodx scripting tutorialokat, amiket Metal írogatott + 1-2-t én.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.10.01. 16:52 
Offline
Felfüggesztve
Avatar

Csatlakozott:2013.06.09. 18:47
Hozzászólások:2004
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 220 alkalommal
Silent írta:
~TeQuiLa` írta:
Szia!
Egy kissebb segítség konyhanyelven.

minden plugin include-okkal nyílik meg.
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx> <-- Ez mindig kell!!!!!
  2. #include <amxmisc>

így nyílik meg egy plugin:
SMA Forráskód: [ Mindet kijelol ]
  1. public plugin_init()

Minden egyes plugin funkciókat, parancsokat { } közé írunk!
SMA Forráskód: [ Mindet kijelol ]
  1. {
  2. teszt
  3. }

Van pár hozzáfűződés.
SMA Forráskód: [ Mindet kijelol ]
  1. new //új általában változókat hívunk meg vele!
  2. if //ha xy PL: if(pénz == 1000)
  3. while //amíg xy.
  4. Még van sok!!! (ezek az alapok.)

Vannak az operátorok!
SMA Forráskód: [ Mindet kijelol ]
  1. Általában használt:
  2. +, -, *, &, :, =, ||, <, >, !

Pár parancs:
SMA Forráskód: [ Mindet kijelol ]
  1. cs_get_user_money --> lekéri az emberke pénzét! Használata: if(cs_get_user_money(id) <= 16000)
  2. set_user_money --- > ez beállítja a pénzét! használata: set_user_money(id, 16000)
  3. set_task --> időzítést tehetsz egy pluginra! set_task(2.0, "asd"/*ez hívódik meg!*/, id)
  4. register_plugin("plugin neve","verziója","készítője.")
  5. Bővebben az oldalon találsz még ilyeneket!

Vannak olyanok amikkel letudsz futtatni valamit a pluginokon:
SMA Forráskód: [ Mindet kijelol ]
  1. return PLUGIN_HANDLED;
  2. return PLUGIN_CONTINUE;
  3. stb..

Ha kell még segítség, vagy valamit nem értessz írj :)


Ennek a nagyrésze baromság, vak vezet világtalant..

Olvasgasd inkább az Amxmodx scripting tutorialokat, amiket Metal írogatott + 1-2-t én.

Igaz, ne vezesd felre a masıkat, Mert az elejen, a legfontosabb hogy a jot tanulja meg, s ne a rosszat amıt ırtal.. Majd csodalkoznı fog , mıert dob hıbat nekı.. En ıs meg tanulgatom.. 10-es skalan 4-5 osre allok ;)

_________________
Ha elnyerte valamelyik témában a hozzászólásom a tetszésedet melyet olvastál, akkor egy egyszerű gombnyomással kifejezheted, hogy tetszett.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.10.01. 17:42 
Offline
Őskövület
Avatar

Csatlakozott:2012.03.22. 18:22
Hozzászólások:2978
Megköszönt másnak: 117 alkalommal
Megköszönték neki: 368 alkalommal
remek ano,tőled megtanult menüt írni,ami bent van tutok között,de amit én linkeltem az a jó!Ott tanulja meg mi,mi.(Persze nem profi szinten írja le metál,hanem az alapokat.)

_________________
Blasenkampfwagen

https://discord.gg/uBYnNnZP
GTA:PURSUIT MTA


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.10.01. 18:04 
Offline
Felfüggesztve
Avatar

Csatlakozott:2013.06.09. 18:47
Hozzászólások:2004
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 220 alkalommal
ultraibolya írta:
remek ano,tőled megtanult menüt írni,ami bent van tutok között,de amit én linkeltem az a jó!Ott tanulja meg mi,mi.(Persze nem profi szinten írja le metál,hanem az alapokat.)



Remek.. tevagy a jo, mint mindig! szerinted amit te linkeltel, az nem a tut kozott van?

Kulonben, jobban atlatja szerintem egy menu felipeteset, mimt azt a nyers szoveget, amit metal irt..nekem legalabbis amikor elkezdtem, nyers, s szaraz volt.. nekem ez segitett, es itt is leirja kiki, mitmiert irt, es mi mire valo..

De ti tudjatok, nekem mind egy.. Kulonben ereztem, hogy valaki belemkot...

Udv.

_________________
Ha elnyerte valamelyik témában a hozzászólásom a tetszésedet melyet olvastál, akkor egy egyszerű gombnyomással kifejezheted, hogy tetszett.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.10.01. 18:12 
Offline
Őskövület
Avatar

Csatlakozott:2012.03.22. 18:22
Hozzászólások:2978
Megköszönt másnak: 117 alkalommal
Megköszönték neki: 368 alkalommal
Ember belegondolsz te mit írsz? Ha most akarja kezdeni akkor ne a menüt tanítsd meg vele hanem hogy mivel KEZDJE pl mi a tömb,VÁLTOZÓ stb....

Am meg ja,megérti ha ilyet adsz neki:

SMA Forráskód: [ Mindet kijelol ]
  1.  
  2. #define MPROP_PERPAGE 1 /* Number of items per page (param1 = number, 0=no paginating, 7=default) */
  3. #define MPROP_BACKNAME 2 /* Name of the back button (param1 = string) */
  4. #define MPROP_NEXTNAME 3 /* Name of the next button (param1 = string) */
  5. #define MPROP_EXITNAME 4 /* Name of the exit button (param1 = string) */
  6. #define MPROP_TITLE 5 /* Menu title text (param1 = string) */
  7. #define MPROP_EXIT 6 /* Exit functionality (param1 = number, see MEXIT constants) */
  8. #define MPROP_NOCOLORS 8 /* Sets whether colors are not auto (param1 = number, 0=default) */
  9. #define MPROP_NUMBER_COLOR 10 /* Color indicator to use for numbers (param1 = string, "\r"=default) */


jaa,megérti :)) te már az elején a mély vízbe dobod!
Am meg egyszerűbb lett volna linkelned nem bemásolnod,mert mire legörgettem lerohadt az ujjam!

_________________
Blasenkampfwagen

https://discord.gg/uBYnNnZP
GTA:PURSUIT MTA


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: scripting írás
HozzászólásElküldve:2013.10.01. 20:10 
Offline
Signore Senior
Avatar

Csatlakozott:2011.09.09. 17:39
Hozzászólások:4020
Megköszönt másnak: 12 alkalommal
Megköszönték neki: 139 alkalommal
Ultraibolyának adok igazat.
Lehet, hogy elsőre Metal írásai tömörnek és száraznak tűnnek, de matematikából se az exponenciális függvény megoldásmenetét tanultad elsőbe, hanem az alapokat. Itt pedig az alapok azok a nyelv sajátosságai (már amennyire beszélhetünk ilyenről), nem pedig a függvények és menü készítés... A téma szerzőjének pedig üzenem, hogy tanulás-tanulás-tanulás és egy kis logika társulásával hamar elsajátítható a pawn. Persze ha jó a logikád, nem kell (sokat) tanulni :)


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [12 hozzászólás ]  Oldal12Következő


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 4 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole