Offline |
|
|
Csatlakozott:2014.08.24. 18:28 Hozzászólások:584 Megköszönt másnak: 122 alkalommal Megköszönték neki: 120 alkalommal
|
Halihó! VÉÉÉGRE elkészült a Fegyver Skin Menü v3.0-m, ami az abszolút lustáknak tökéletes. A fegyver típusokon kívül MINDENT fájlból olvas be. Annyi lenne az én kérésem felétek, hogy az alábbiakban én szépen bemutatom a plugint, hogyan működik, stb, ti pedig, legyetek olyan kedvesek, írjatok róla véleményt, és elsősorban teszteljétek, mert ehhez végképp nem volt se kedvem, se energiám. Ha van ötletetek, írjátok meg ide hsz-be, meglátjuk, mit lehet vele kezdeni. Akkor a tárgyra is térnék. A parancsok: Kód: /menü /skin Mindkettő a skinek menüjét nyitja meg. Modelleket NEM adok, nektek kell keresnetek. A modellek maximális száma nincs meghatározva. v_ modellekre van szükség a pluginhoz. Itt a forráskódja a pluginnak: ► Spoiler mutatása #include <amxmodx> #include <amxmisc> #include <nvault> #include <fakemeta> #include <hamsandwich> #include <csstats> #include <cstrike> new const szPrefix[][] = { "[WSM]" } new skins_types[][] = { "AK47", "AWP", "M4A1" } new g_vault new Array:Skin_Type, Array:Skin_Name, Array:Skin_Cost, Array:Skin_Model new skin_chosen[sizeof skins_types][33], fgy[33] public plugin_init() { register_plugin("Weapon Skin Menu", "3.0", "LyleChriss") register_dictionary("wsm.txt") register_clcmd("say /menu", "cmd_menu") register_clcmd("say /skin", "cmd_menu") register_clcmd("say /alap", "cmd_alap") register_event("CurWeapon", "EvCurWeapon", "be", "1=1") g_vault = nvault_open("fegyverskin") } public plugin_precache() { Skin_Type=ArrayCreate(1,1) Skin_Name=ArrayCreate(64) Skin_Cost=ArrayCreate(1,1) Skin_Model=ArrayCreate(64) new skins_file[64], pFile, readdata[1024], data[4][64] get_configsdir(skins_file,charsmax(skins_file)) format(skins_file,charsmax(skins_file),"%s/skins.ini",skins_file) pFile = fopen(skins_file, "rt") if(pFile) { while(!feof(pFile)) { fgets(pFile, readdata, charsmax(readdata)) parse(readdata, data[0], 63, data[1], 63, data[2], 63, data[3], 63) if(readdata[0]==';'||equal(readdata,"")||equal(data[1],"")) continue ArrayPushCell(Skin_Type,str_to_num(data[0])) ArrayPushString(Skin_Name,data[1]) ArrayPushCell(Skin_Cost,str_to_num(data[2])) ArrayPushString(Skin_Model, data[3]) precache_model(data[3]) } fclose(pFile) } else set_fail_state("skins.ini nem talalhato") } public cmd_menu(id) { new title[256],item[128] new szStats[8],szBHits[8]; get_user_stats(id,szStats,szBHits); format(title,charsmax(title),"%L", LANG_SERVER, "WSM_CHOOSE", szStats[0]) new menu=menu_create(title,"skin_type_handler") for(new i=0;i<sizeof skins_types;i++) { new count for(new j;j<ArraySize(Skin_Name);j++) if(ArrayGetCell(Skin_Type,j)==i) count++ format(item,charsmax(item),"\w%s \y(%d db)",skins_types[i],count) menu_additem(menu,item) } menu_display(id,menu) } public skin_type_handler(id,menu,key) { if(key==MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } new title[256],item[128] format(title, charsmax(title), "%L", LANG_SERVER, "WSM_CHOOSE2") new menu2=menu_create(title,"skin_handler") new name[64] new szStats[8],szBHits[8]; new szKell[32] get_user_stats(id,szStats,szBHits); get_user_name(id,name,charsmax(name)) for(new i=0;i<ArraySize(Skin_Name);i++) { if(ArrayGetCell(Skin_Type,i)!=key) continue new name[64] ArrayGetString(Skin_Name,i,name,charsmax(name)) new cost = ArrayGetCell(Skin_Cost,i) formatex(szKell, charsmax(szKell), "[MĂ©g %d ölĂ©s]", cost-szStats[0]) formatex(item, charsmax(item), "%s %s", name, szStats[0] < cost ? szKell : "[ElĂ©rve]") new num[64] num_to_str(i,num,charsmax(num)) menu_additem(menu2,item,num) } menu_setprop(menu2,MPROP_PERPAGE,5) menu_display(id,menu2) return PLUGIN_CONTINUE } public skin_handler(id,menu,key) { if(key==MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } new access,data[32],callback,name[64] menu_item_getinfo(menu,key,access,data,charsmax(data),_,_,callback) new skinid=str_to_num(data) new cost=ArrayGetCell(Skin_Cost,skinid) ArrayGetString(Skin_Name,skinid,name,charsmax(name)) new szStats[8],szBHits[8]; get_user_stats(id,szStats,szBHits); if(szStats[0] >= cost) { for(new i=0;i<sizeof skins_types;i++) { if(ArrayGetCell(Skin_Type,skinid) == i) if(skin_chosen[i][id] == skinid) client_print(id, print_chat, "%s %L", szPrefix, LANG_SERVER, "WSM_NOW", name); else skin_chosen[i][id] = skinid; } client_print(id, print_chat, "%s %L",szPrefix, LANG_SERVER, "WSM_CHOSEN", name) } else { client_print(id, print_chat, "%s %L",szPrefix, LANG_SERVER, "WSM_CHOSEN", name, szStats[0]-cost) } return PLUGIN_CONTINUE } public EvCurWeapon(id) { fgy = get_user_weapon2(id) new num, model[64] for(new i=0;i<sizeof skins_types;i++) { if(equali(skins_types[i], fgy)) { num = skin_chosen[i][id] ArrayGetString(Skin_Model, num, model, charsmax(model)) set_pev(id, pev_viewmodel2, model) } } } public cmd_alap(id) { for(new i=0; i< sizeof skins_types; i++) { skin_chosen[i][id] = 9999 } } public client_disconnect(id) { if(!is_user_bot(id) && !is_user_hltv(id)) { save(id) } for(new i=0; i< sizeof skins_types; i++) { skin_chosen[i][id] = 9999 } } public client_putinserver(id) { if(!is_user_bot(id) && !is_user_hltv(id)) { load(id) } } public save(id) { new vaultkey[64], vaultdata[2048], Len get_user_authid(id, vaultkey, charsmax(vaultkey)) for(new i=0; i< sizeof skins_types; i++) { if(i == sizeof(skins_types)) { Len += format(vaultdata[Len], 2048-Len, "%i", skin_chosen[i][id]) } else { Len += format(vaultdata[Len], 2048-Len, "%i ", skin_chosen[i][id]) } } nvault_set(g_vault, vaultkey, vaultdata) } public load(id) { new vaultkey[64], vaultdata[2048], Len get_user_authid(id, vaultkey, charsmax(vaultkey)) for(new i=0; i< sizeof skins_types; i++) { Len += format(vaultdata[Len], 2048-Len, "%i ", skin_chosen[i][id]) } if(nvault_get(g_vault, vaultkey, vaultdata, charsmax(vaultdata))) { new iSpacePos = contain(vaultdata, " ") if(iSpacePos > -1) { new skin[sizeof skins_types][32] for(new j=0; j < sizeof skins_types; j++) { if(j==0) { formatex(skin[j], charsmax(skin), "%s", vaultdata) skin_chosen[j][id] = str_to_num(skin[j]) } else { formatex(skin[j], charsmax(skin), "%s", vaultdata[iSpacePos+j]) skin_chosen[j][id] = str_to_num(skin[j]) } } } } } public plugin_end() { nvault_close(g_vault) ArrayDestroy(Skin_Type) ArrayDestroy(Skin_Name) ArrayDestroy(Skin_Cost) ArrayDestroy(Skin_Model) } stock get_user_weapon2( id ) { new szWeapon[20]; get_weaponname(get_user_weapon(id), szWeapon, charsmax(szWeapon)); replace(szWeapon, charsmax(szWeapon), "weapon_", ""); return szWeapon; }
A dolog a következőképp működik: Szépen lefordítjátok, és berakjátok a plugins mappába. Ezután a configs mappán belül csináltok egy skins.ini fájlt. Ebbe a fájlba kerülnek a skinek. A skinek megadásának módja a következő: Kód: "0" "Arany AK" "300" "models/skins/aranyak.mdl" Ebből a(z): "0": A fegyver típusát jelöli "Arany AK": A skin nevét jelöli "300": A szükséges ölések számát jelöli "models/skins/aranyak.mdl": A modell helyét jelöli Alapból 3, azaz három fegyvertípus van a pluginban. 0- AK47 1- AWP 2- M4A1 Úgy tudtok plusz típusokat hozzáadni, hogy a forráskód elején található ► Spoiler mutatása new skins_types[][] = { "AK47", "AWP", "M4A1" }
tömb végére újabb fegyverneveket írunk, valahogy így: ► Spoiler mutatása new skins_types[][] = { "AK47", "AWP", "M4A1", "Deagle" }
FONTOS!!!: A fegyverek neve az alábbi listában szereplőkével MEG KELL EGYEZZEN! Kis és nagybetű nem számít. ► Spoiler mutatása Kód: p228 scout hegrenade xm1014 c4 mac10 aug smokegrenade elite fiveseven ump45 sg550 galil famas usp glock18 awp mp5navy m249 m3 m4a1 tmp g3sg1 flashbang deagle sg552 ak47 knife p90 Lényegében ennyi a dolog. A menü automatikusan generálja magát, az éppen kiválasztott skineket minden fegyvertípusra menti. Mivel nem tudtam csatolni, itt a lang fájl tartalma: ► Spoiler mutatása Kód: [hu] WSM_CHOOSE = \yVálaszd ki a fegyvered típusát!^n\wÖléseid: \r%s WSM_CHOOSE2 = \yVálassz fegyver kinézetet! WSM_NOTENOUGH = Sajnálom, nincs elég ölésed a(z) %s használatához! Még hiányzik %d. WSM_CHOSEN = Sikeresen kiválasztottad a(z) %s skint! WSM_NOW = Te jelenleg is a(z) %s-t használod!
[en] WSM_CHOOSE = \yChoose your weapon's type!^n\wKills: \r%s WSM_CHOOSE2 = \yChoose weapon skin! WSM_NOTENOUGH = Sorry, you don't have enough kills to use the %s! Needed %d more. WSM_CHOSEN = You have succesfully chosen the %s skin! WSM_NOW = You are already using the %s!
A fájl neve wsm.txt legyen. Bármilyen hibát találtok, kérlek jelezzétek, hogy javíthassam, és hivatalosan is publikálhassam a plugint. Köszönöm! Változtatások: v3.3.0 - [i] [2015 december 16] Nyelvi fájl (lang) elkészítése. Kisebb hibák javítása. Apróbb finomítások, esztétikai módosítások. Előző verziók► Spoiler mutatása v3.2.1 - [2015 december 16] Visszakerült a Ham_Item_Deploy helyett a CurWeapon event. v3.1.6 - [2015 december 16] Ham_Item_Deploy finomítása. Új parancs hozzáadása. (/alap) v3.1.1 - [2015 december 15] Fájlműveletek javítása. CurWeapon event Ham_Item_Deploy-ra cserélése. Precache finomítása. v3.0.1 - [2015 december 15] Dinamikus tömbök finomítása. plugin_end hozzáadása. v3.0.0 - [2015 december 15]
A hozzászólást 19 alkalommal szerkesztették, utoljára LyleChriss 2016.04.06. 08:00-kor.
|
|