←  Problemy z pluginami

AMXX.pl: Support AMX Mod X i SourceMod

»

Problem z ułożeniem kolejnosci czapek ..

  • +
  • -
Napad - zdjęcie Napad 29.12.2015

Witam , zmieniłem kolejność w sma . Tylko nazwy sie zmieniły ale numery czapek już nie .

To plugin wykorzystujacy submodele

#include <amxmodx>
#include <fakemeta>
#include <ColorChat>

#define PLUG_TAG "Czapki"

new g_HatEnt[33], g_NazwaAktualnej[33][128];
new const sciezka[] = "models/czapki_ultr2/xultra.mdl"

public plugin_init()
{
    register_plugin("Czapki", "0.1", "SgtBane, K!113r");
    register_clcmd("say /czapki", "cmd_czapki");
    register_clcmd("say /hats", "cmd_czapki");
}
public plugin_precache()
{
    precache_model(sciezka);
}
public client_disconnect(id)
{
    Set_Hat(id, 0, id, "Brak");
}
public cmd_czapki(id)
{
    new tytul[128], menu;
    if(!strlen(g_NazwaAktualnej[id]))
    formatex(tytul, 127, "Twoja aktualna czapka to: Brak^n^nWybierz czapke:");
    else
    formatex(tytul, 127, "Twoja aktualna czapka to: \r%s^n^n\yWybierz czapke:", g_NazwaAktualnej[id]);
    menu = menu_create(tytul, "menu_handler");
    menu_additem(menu, "\yBrak");
    menu_additem(menu, "Anonymous");
    menu_additem(menu, "Afro");
    menu_additem(menu, "Bomba");
    menu_additem(menu, "Basebolista");
    menu_additem(menu, "Czarwony Sonic");
    menu_additem(menu, "Czarodziej");
    menu_additem(menu, "Deadmous");
    menu_additem(menu, "Dobra Krowa");
    menu_additem(menu, "Elf");
    menu_additem(menu, "Fasolka");
    menu_additem(menu, "Hello-Kitty");
    menu_additem(menu, "Iron Man");
    menu_additem(menu, "Kot");
    menu_additem(menu, "Krokodyl");
    menu_additem(menu, "Kaptur");
    menu_additem(menu, "Kot na chilloucie");
    menu_additem(menu, "Lord Vader");
    menu_additem(menu, "Lolface");
    menu_additem(menu, "Minecraft");
    menu_additem(menu, "Myszka");
    menu_additem(menu, "Marsjanin");
    menu_additem(menu, "Niebieski Sonic");
    menu_additem(menu, "Pinky");
    menu_additem(menu, "Penis");
    menu_additem(menu, "Rycerz");
    menu_additem(menu, "Rastaman");
    menu_additem(menu, "Smok");
    menu_additem(menu, "Stalker");
    menu_additem(menu, "Simson");
    menu_additem(menu, "Spartan");
    menu_additem(menu, "Sluchawki");
    menu_additem(menu, "Sukienka Cygana");
    menu_additem(menu, "Troll Face");
    menu_additem(menu, "Tajemniczy Snajper");
    menu_additem(menu, "Urodzinowa");
    menu_additem(menu, "Zla Krowa");
    menu_additem(menu, "Zdziwiony Bob");
    menu_additem(menu, "Zimowa Niebieska");
    menu_additem(menu, "Zimowa Czerwona");
    menu_additem(menu, "Ziemniak");
    menu_additem(menu, "Zaawansowany Bejsbolista");
    menu_display(id, menu);
}
public menu_handler(id, menu, item)
{
    new data[6], iName[64];
    new access, callback;
    menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
    if(item == MENU_EXIT)
    return PLUGIN_CONTINUE;
    Set_Hat(id, item, id, iName);
    formatex(g_NazwaAktualnej[id], 127, "%s", iName);
    return PLUGIN_CONTINUE;
}
public Set_Hat(player, imodelnum, targeter, const nazwa[])
{
    new name[32];
    get_user_name(player, name, 31);
    if(imodelnum == 0)
    {
        if(g_HatEnt[player] > 0)
        {
            if(pev_valid(g_HatEnt[player]))
            {
                engfunc(EngFunc_RemoveEntity,g_HatEnt[player]);
                g_HatEnt[player] = -1;
            }
        }
        if(targeter != 0)
        ColorChat(targeter, NORMAL, "[^x04%s^x01] Czapka zostala ci usunieta",PLUG_TAG);
    }
    else
    {
        if(g_HatEnt[player] < 1)
        {
            g_HatEnt[player] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
            if(g_HatEnt[player] > 0)
            {
                set_pev(g_HatEnt[player], pev_movetype, MOVETYPE_FOLLOW);
                set_pev(g_HatEnt[player], pev_aiment, player);
                set_pev(g_HatEnt[player], pev_rendermode,     kRenderNormal);
                engfunc(EngFunc_SetModel, g_HatEnt[player], sciezka);
                set_pev(g_HatEnt[player], pev_body, imodelnum);
            }
        }
        else
        set_pev(g_HatEnt[player], pev_body, imodelnum);
        if (targeter != 0)
        ColorChat(targeter, NORMAL, "[^x04%s^x01] Ustawiles sobie czapke: ^x04%s",PLUG_TAG,nazwa);
    }
}

O co chodzi?

 

Odpowiedz

  • +
  • -
NoLiFeR - zdjęcie NoLiFeR 30.12.2015

Mam podobne czapki. 

 

To tak. Model hat'u ma stworzoną przez twórce określoną kolejność (submodeli), którą musisz utrzymać przy zmianie kolejności.

Proponowałbym użycie informacji, czyli trzeciego parametru funkcji menu_additem. (stringu)

 

Najpierw musisz odtworzyć kolejność, która była w czapkach przed modyfikacją.

Załóżmy że miałeś 4 czapki w jednym modelu, tj Afro, Zaciesz, Idiota i np.. Krowa.

Submodel o id 0 jest tzw brakiem czapki, więc numerowanie czapek zaczynamy od 1.

1 - Afro
2 - Zaciesz
3 - Idiota

4 - Krowa

 

(Oczywiście na potrzeby wytlumaczenia :) )

menu_additem(menu, "Afro");
menu_additem(menu, "Zaciesz");
menu_additem(menu, "Idiota");
menu_additem(menu, "Krowa");

To jest prawidłowa kolejność. Jeśli natomiast zmienimy czapke Afro z czapką Idiota, kolejność w menu nie będzie się zgadzała z kolejnością w modelu, a więc czapka Afro będzie czapką Idiota i vice versa.

Aby można było naginać kolejność, wystarczy dodać w/w parametr, tzn.

menu_additem(menu, "Afro", "1");
menu_additem(menu, "Zaciesz", "2");
menu_additem(menu, "Idiota", "3");
menu_additem(menu, "Krowa", "4"); 

uzyskując tym samym możliwość manipulacji kolejnością, jednak to nie wszystko.

 

Wykorzystując ten myczek, musimy pamiętać że parametr "item" w funkcji handler jest kolejnością dodawania itemów do menu. Tzn po zmianie Afro z Idiotą, item przyjmuje poniższe wartości

Idiota - 1
Zaciesz - 2
Afro - 3
Krowa - 4

 

A nie o to nam chodzi. Musimy więc dodać czytanie parametru informacji z wybranego elementu menu.

Do menu_handler po 

 menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);

dodajemy

new inf = str_to_num(data)

 uzyskując w zmiennej inf właściwy numer submodelu czapki.

Krótko, po dodaniu numerów czapek jako stringu w trzecim parametrze podmieniamy menu_handler na ten

public menu_handler(id, menu, item)
{
    if(item == MENU_EXIT)
        return PLUGIN_CONTINUE;
    new data[4], iName[64];
    new access, callback;
    menu_item_getinfo(menu, item, access, data, 3, iName, 63, callback);
    new inf = str_to_num(data)
    Set_Hat(id, inf, id, iName);
    formatex(g_NazwaAktualnej[id], 127, "%s", iName);
    return PLUGIN_CONTINUE;
}

Teraz zmieniając kolejność, nie zmieniamy nigdy trzeciego parametru, lecz tylko zamieniamy miejscami funkcje, np.

menu_additem(menu, "Afro", "1");
menu_additem(menu, "Zaciesz", "2");
menu_additem(menu, "Krowa", "4");
menu_additem(menu, "Idiota", "3");

Tak, te quoty (Tzn ") muszą być, inaczej nie skompilujesz :)


Użytkownik NoLiFeR edytował ten post 30.12.2015 01:51
Odpowiedz

  • +
  • -
Napad - zdjęcie Napad 01.01.2016

dzięki

do zamkniecia

Odpowiedz