Problem z ułożeniem kolejnosci czapek ..
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?
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




