Sziasztok! Fegyver skin menu-höz kérném hiozzáértő segítségét, mentés résznél. Mapvaltasnal nem menti el az oléeket. Itt a kod:
Kód: #include <amxmodx> #include <amxmisc> #include <fakemeta> #include <colorchat> #include <fvault> #define PLUGIN "Fegyver Skin Menu" #define VERSION "1.0" #define AUTHOR "RaZzoR" #define HOOK_V_MODELS new weapon_select[33] new g_vault new fragek[33] new name[32][33] new oles[33]
new const menu_item_names[][][] = { { "Alap Csomag", "0", "" }, { "Kozlegeny Csomag", "10", "k" }, { "Tizedes Csomag", "20", "t" }, { "Hadnagy Csomag", "50", "h" } } new const models_name[][] = { "ak47.mdl", "awp.mdl", "m4a1.mdl", "usp.mdl", "deagle.mdl" } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /menu", "clcmd_menu") register_event("CurWeapon","Hook_P_V_Model","be","1=1") register_event("DeathMsg", "event_death", "ade") #if defined HOOK_W_MODELS register_forward(FM_SetModel, "Hook_W_Model", 1) #endif }
public event_death() { if(read_data(1) != read_data(2)) { fragek[read_data(1)] ++ } } public plugin_precache() { for(new i = 0; i < sizeof(models_name); i++) { for(new j = 1; j < sizeof(menu_item_names); j++) { #if defined HOOK_P_MODELS new precache_p[256] format(precache_p, sizeof(precache_p), "models/%s/p_%s", menu_item_names[j][2], models_name[i]) precache_model(precache_p) #endif #if defined HOOK_V_MODELS new precache_v[256] format(precache_v, sizeof(precache_v), "models/%s/v_%s", menu_item_names[j][2], models_name[i]) precache_model(precache_v) #endif } } } public W_Model_Hook(ent, model[]) { if(!pev_valid(ent)) return FMRES_IGNORED new owner = pev(ent, pev_owner) for(new i = 0; i < sizeof(models_name); i++) { new old_w[256] format(old_w, sizeof(old_w), "models/w_%s", models_name[i]) new new_w[256] format(new_w, sizeof(new_w), "models/%s/w_%s", menu_item_names[weapon_select[owner]][2], models_name[i]) if(equali(model, old_w) || equali(model, new_w)) { if(weapon_select[owner] >= 1) engfunc(EngFunc_SetModel, ent, new_w) else engfunc(EngFunc_SetModel, ent, old_w) return FMRES_SUPERCEDE } } return FMRES_IGNORED } public Hook_P_V_Model(id) { if(!is_user_alive(id)) return PLUGIN_CONTINUE static v_model[32], p_model[32] pev(id, pev_viewmodel2, v_model, 31) pev(id, pev_weaponmodel2, p_model,31) for(new i = 0; i < sizeof(models_name); i++) { #if defined HOOK_V_MODELS new old_v[256] format(old_v, sizeof(old_v), "models/v_%s", models_name[i]) new new_v[256] format(new_v, sizeof(new_v), "models/%s/v_%s", menu_item_names[weapon_select[id]][2], models_name[i]) if(equali(v_model, old_v) || equali(v_model, new_v)) { if(weapon_select[id] >= 1) set_pev(id, pev_viewmodel2, new_v) else set_pev(id, pev_viewmodel2, old_v) break } #endif #if defined HOOK_P_MODELS new old_p[256] format(old_p, sizeof(old_p), "models/p_%s", models_name[i]) new new_p[256] format(new_p, sizeof(new_p), "models/%s/p_%s", menu_item_names[weapon_select[id]][2], models_name[i]) if(equali(p_model, old_p) || equali(p_model, new_p)) { if(weapon_select[id] >= 1) set_pev(id, pev_weaponmodel2, new_p) else set_pev(id, pev_weaponmodel2, old_p) break } #endif } return PLUGIN_CONTINUE } public clcmd_menu(id) { new menu_line[64], menu_newline[64], i_data[64] format(menu_line, charsmax(menu_line), "\wFegyver Skin Menu^nOleseid: \r%i", fragek[id]) new menu = menu_create(menu_line, "clcmd_menu_handler") for(new i = 0; i < sizeof(menu_item_names); i++) { new convert_num = str_to_num(menu_item_names[i][1]) num_to_str(i, i_data, sizeof(i_data)) if(fragek[id] < convert_num) format(menu_newline, charsmax(menu_newline), "%s (\d%i Oles Kell)", menu_item_names[i][0], convert_num) else format(menu_newline, charsmax(menu_newline), "%s (\dElerve)", menu_item_names[i][0]) menu_additem(menu, menu_newline, i_data, 0) } menu_display(id, menu, 0) return PLUGIN_HANDLED } public clcmd_menu_handler(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } new data[64], szName[64] new access, callback menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback) new key = str_to_num(data) new convert_num = str_to_num(menu_item_names[key][1]) if(fragek[id] < convert_num) { ColorChat(id, GREEN, "[Informacio] ^1Sajnalom tul kevws olesed van!", menu_item_names[key][0]) return PLUGIN_HANDLED } else { weapon_select[id] = key ColorChat(id, GREEN, "[Informacio] ^1Sikeresen kivlasztottad az ^3%s ^1-ot", menu_item_names[key][0]) } return PLUGIN_CONTINUE } new const szVaultName[ ] = "skinmenu"; // .txt fájl neve (addons/amxmodx/data/file_vault/some_mod.txt) public client_putinserver(id) { // belép pistike a szerverre if (is_user_bot(id)) return; // botokat leszarjuk oles[id] = 0; // sloton lévő változót nullázzuk load(id); // betöltjük a változókat a mentésből steamid-re, ha már a steamid mentett egyszer, ha nem,akkor a 0 érvényesül } public client_disconnect(id) { // kilép pistike a szerverről if (is_user_bot(id)) return; // továbbra is leszarjuk, ha bot (még ha úgyis játszik) save(id); // mentjük a változókat, hogy később pistike SteamID-jére csatlakozáskor betöltse (lásd fentebb) } load(id) { // betöltés rész new szAuthid[32], szData[32]; // létrehozzuk a tömböket tárolásra, steamid és adat get_user_authid( id, szAuthid, charsmax(szAuthid)); // lekérjük a steamid-jét if (containi(szAuthid, "_ID_LAN") != -1 || containi(szAuthid, "HLTV") != -1) get_user_ip(id, szAuthid, charsmax(szAuthid), 1); // ebben az if sorban azt ellenőrizzük, hogy nem-e HLTV a SteamID vagy XY_ID_LAN, mert ha igen, akkor IP-re mentünk. new olesek[16]; // letrehozunk változónként új tömböt, hogy kitudjuk olvasni a fájlból fvault_get_data( szVaultName, szAuthid, szData, 31 ); // kiolvassuk az id alapján az adatokat a fájlból. parse( szData, olesek, 15 ); // szét szedjük, mint foxi a lábtörlőt oles[id] = str_to_num( olesek ); // betöltjük a tömb alapján a változóba } save(id) { // mentés rész new szAuthid[32], szData[32]; get_user_authid( id, szAuthid, charsmax(szAuthid)); if (containi(szAuthid, "_ID_LAN") != -1 || containi(szAuthid, "HLTV") != -1) get_user_ip(id, szAuthid, charsmax(szAuthid), 1); // steamid lekérés ugyanúgy formatex( szData, 31, "%i", oles[id] ); // formázzuk a data tömböt, hogy a változókat tartalmazza. fvault_set_data( szVaultName, szAuthid, szData ); // mentjük a SteamID-re az adatokat. }
ui.:nem értek nagyon hozzá, gondolom ez láthato is, ezeket is netrol szedtem, es probaltam osszerakni, ha vki kijavitja örök hálám üldözi!
|