hlmod.hu
https://hlmod.hu/

[New Syntax] Menük
https://hlmod.hu/viewtopic.php?f=53&t=31322
Oldal: 1 / 1

Szerző:  Maxi [ 2022.06.08. 09:56 ]
Hozzászólás témája:  [New Syntax] Menük

Sziasztok!
Az erről szóló előző tutorial-om ne használjátok! Akkor még élhető megoldásnak bizonyult, mára már nagyon outdated. Működik még(tesztelve), de már senki nem úgy csinálja. Sokkal bonyolultabb mint ez, továbbá jobban terheli valamivel a szervert.
Kezdjünk bele: menük.
Kód:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls required
//..

public void OnPluginStart() {
    //parancs létrehozása. (!menu-ként is működik)
    RegConsoleCmd("sm_menu", myMenu, "A mi teszt menü-nk");
}
public Action myMenu(int client, int args) {
    /*
    * Létrehozzuk a menüt, itt 'menu' a változó.
    * Nagyon fontos: ha new változót hozunk létre, azért "felelősek vagyunk"
    * a plugin élettartalmán keresztül,
    * Tehát illik törölni ha már nem használjuk.
    */
    Menu menu = new Menu(Menu_Callback);
    //Menü címe
    menu.SetTitle("Menü címe");
    //Egy szimpla menüpont
    menu.AddItem("option1", "Első menüpont");
    menu.AddItem("option2", "Második menüpont");
    //Egy kikapcsolt menüpont, szürkén jeleníti meg, nem lehet kiválasztani.
    menu.AddItem("option3", "Kikapcsolt menüpont", ITEMDRAW_DISABLED);
    //Megjelenítjük 40mp-re a játékosnak aki beírta a parancsot.
    menu.Display(client, 40);
    //Vissza kell térni!!
    return Plugin_Handled;
}
public int Menu_Callback(Menu menu, MenuAction action, int param1, int param2) {
    //Ha az akció megegyezik azzal, hogy kiválaszt egy menüpontot
    if (action == MenuAction_Select) {
        //Belekérjük egy változóba az opciót amit kiválasztott
        char option[32];
        menu.GetItem(param2, option, sizeof(option));
        //Ha az opció 'option1' mint a 22. sorban
        if (StrEqual(option, "option1")) {
            //TODO
            PrintToServer("Első menüpont kiválasztva!");
        //...
        } else if (StrEqual(option, "option2")) {
            PrintToServer("Második menüpont kiválasztva!");
        }
    //Ha az akció, a menü ciklustartalmának a vége
    } else if (action == MenuAction_End) {
        /*
        * Töröljük a menü változót!!
        * Ha nem töröljük, itt fog lebegni, ami nem éppen a legjobb dolog a világon.
        * Igaz, új értéket kaphat, magyarul létrejöhet újra a menü, gondot nem okoz,
        * egészen addig amíg sokszor ilyen hibát nem vétünk, és kifagy a szerver.
        */
        delete menu;
        // Tehát ha valahol használtok new-t, mindig delete a végén!
    }
}
 

► Spoiler mutatása

Ez lényegében, szerintem sokkal egyszerűbb mint a régi, mára már outdated változat.

Köszönöm a figyelmet!
Bármi hibát találtok, kérlek jelezzétek, benne van, hogy hibázom 3 műszak mellett.

Üdv,
Maxi

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/