#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <nvault>
#include <fun>
#define PLUGIN "FegyverSkinMenu"
#define VERSION "1.0"
#define AUTHOR "RaZzoR"
#define DICTIONARY "fegyver_skin_menu.txt"
#define HOOK_V_MODELS
#define PKILLS get_user_frags
new vault
new kill[33], skin[33], skin_kill, skin_hskill, skin_knifekill
new SAVE_PKILLS
new weapon_select[33]
new const menu_item_names[][][] = {
{ "Alap Csomag", "0", "alap" },
{ "BASIC Csomag", "10", "hhskins/basic" },
{ "Rozsdas Csomag", "100", "hhskins/rozsdas" },
{ "Bronz Csomag", "200", "hhskins/bronz" },
{ "Flamed Csomag", "400", "hhskins/flamed" },
{ "Arany Csomag", "800", "hhskins/arany" },
{ "CS:GO Csomag", "1600", "hhskins/go" },
{ "Crysis Csomag", "3200", "hhskins/crysis" },
{ "Sectio8 Csomag", "6400", "hhskins/sec8" },
{ "SF2 Csomag", "12800", "hhskins/sf2" },
{ "STALKER Csomag", "25600", "hhskins/stalker" }
}
new const models_name[][] = {
"m4a1.mdl",
"ak47.mdl",
"awp.mdl",
"m249.mdl",
"aug.mdl",
"famas.mdl",
"galil.mdl",
"mp5navy.mdl",
"xm1014.mdl",
"m3.mdl",
"scout.mdl",
"deagle.mdl",
"knife.mdl"
}
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary(DICTIONARY)
register_clcmd("say /menu", "clcmd_menu")
register_event("CurWeapon","Hook_P_V_Model","be","1=1")
register_clcmd("say /oles", "oles")
register_cvar("sima_oles", "2");
register_cvar("hs_oles", "2");
register_cvar("kes_oles", "1");
skin_kill = get_cvar_num("sima_oles");
skin_hskill = get_cvar_num("hs_oles");
skin_knifekill = get_cvar_num("kes_oles");
register_event("DeathMsg", "death", "a")
vault = nvault_open("hhskin")
SAVE_PKILLS = register_cvar("save_pkills", "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
#if defined HOOK_W_MODELS
new precache_w[256]
format(precache_w, sizeof(precache_w), "models/%s/w_%s", menu_item_names[j][2], models_name[i])
precache_model(precache_w)
#endif
}
}
}
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), "\w%L", id, "SKIN_MENU", get_user_frags(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(get_user_frags(id) < convert_num)
format(menu_newline, charsmax(menu_newline), "%L", id, "SKIN_ITEM1", menu_item_names[i][0], convert_num)
else
format(menu_newline, charsmax(menu_newline), "%L", id, "SKIN_ITEM2", 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(get_user_frags(id) < convert_num) {
client_print(id, print_chat, "%L", id, "SKIN_NOT_USE", menu_item_names[key][0], convert_num)
return PLUGIN_HANDLED
}
else {
weapon_select[id] = key
client_print(id, print_chat, "%L", id, "SKIN_CHOOSED", menu_item_names[key][0])
Hook_P_V_Model(id)
}
return PLUGIN_CONTINUE
}
public death(id)
{
new attacker = read_data( 1 );
new victim = read_data( 2 );
if(attacker == victim || ! is_user_connected(gyilkos) || ! is_user_connected(aldozat))
{
return PLUGIN_HANDLED;
}
new olesekert = skin_kill;
if(read_data(3))
{
olesekert += skin_hskill;
}
static Fegyver[26];
read_data(4, Fegyver, sizeof(Fegyver) -1);
if(equal(Fegyver,"knife"))
{
olesekert += skin_knifekill;
}
kill[attacker] += olesekert;
return PLUGIN_HANDLED;
}
stock log_kill(attacker, victim, fegyver[],fejloves) {
user_silentkill( victim );
message_begin( MSG_ALL, get_user_msgid( "DeathMsg" ), {0,0,0}, 0 );
write_byte( attacker );
write_byte( victim );
write_byte( fejloves );
write_string( fegyver );
message_end();
new kill = get_user_frags( attacker );
set_user_frags( attacker, kill++ );
new elvetel = get_user_frags( victim );
set_user_frags( victim, elvetel++ );
return PLUGIN_CONTINUE
}
public client_connect(id)
{
if(get_pcvar_num(SAVE_PKILLS) == 1)
{
LoadData(id)
}
}
public client_disconnect(id)
{
weapon_select[id] = 0
if(get_pcvar_num(SAVE_PKILLS) == 1)
{
SaveData(id)
}
}
public SaveData(id)
{
new vaultkey[64],vaultdata[256], authid[32]
get_user_authid(id, authid, 31)
format(vaultkey,63,"%s-SKIN", authid)
format(vaultdata,255,"%i#%i#", kill[id],skin[id])
nvault_set(vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new vaultkey[64],vaultdata[256], authid[32]
get_user_authid(id, authid, 31)
format(vaultkey,63,"%s-SKIN", authid)
format(vaultdata,255,"%i#%i#",kill[id],skin[id])
nvault_get(vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new str_num[32], skin_num[32]
parse(vaultdata, str_num, 31, skin_num, 31)
kill[id] = str_to_num(str_num)
skin[id] = str_to_num(skin_num)
return PLUGIN_CONTINUE
}