#include <amxmodx>
#include <adv_vault>
#include <fakemeta>
#define PLUGIN "Knife Level"
#define VERSION "1.0.0"
#define AUTHOR "HK-416"
#define PREFIX "[UwU]"
#if AMXX_VERSION_NUM < 190
#define MAX_PLAYERS 32
#define client_disconnected(%i) client_disconnect(%i)
#endif
#pragma semicolon 1
enum _:knife_data
{
KNIFE_NAME[40],
KNIFE_MDL_V[80],
KNIFE_MDL_P[80],
KNIFE_KILLS
};
new const KNIFES_LIST[][knife_data] =
{
{ "Default", "", "", 0 },
{ "Hammer", "models/v_hammer.mdl", "", 25 }
};
enum _:vault_data
{
DATA_KILLS,
DATA_KNIFE
};
new g_kills[MAX_PLAYERS + 1];
new g_knife[MAX_PLAYERS + 1];
new g_playername[MAX_PLAYERS + 1][32];
new g_vault;
new g_data[vault_data];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /knife", "clcmd_show_menu_knife");
register_clcmd("say /kills", "clcmd_say_kills");
register_event("DeathMsg", "event_death", "a");
register_event("CurWeapon", "event_cur_weapon", "be","1=1");
register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged");
g_vault = adv_vault_open("player_data", false);
g_data[DATA_KILLS] = adv_vault_register_field(g_vault, "kills", DATATYPE_INT, 0);
g_data[DATA_KNIFE] = adv_vault_register_field(g_vault, "knife", DATATYPE_INT, 0);
adv_vault_init(g_vault);
}
public plugin_precache()
{
for (new i = 0; i < sizeof KNIFES_LIST; i++)
{
if (!equal(KNIFES_LIST[i][KNIFE_MDL_V], ""))
{
precache_model(KNIFES_LIST[i][KNIFE_MDL_V]);
}
if (!equal(KNIFES_LIST[i][KNIFE_MDL_P], ""))
{
precache_model(KNIFES_LIST[i][KNIFE_MDL_P]);
}
}
}
public client_putinserver(id)
{
g_kills[id] = 0;
g_knife[id] = 0;
get_user_name(id, g_playername[id], charsmax(g_playername[]));
load_player_data(id);
}
public client_disconnected(id)
{
save_player_data(id);
}
public fw_ClientUserInfoChanged(id, buffer)
{
new newname[32];
engfunc(EngFunc_InfoKeyValue, buffer, "name", newname, charsmax(newname));
if(!equal(newname, g_playername[id]))
{
save_player_data(id);
copy(g_playername[id], charsmax(g_playername[]), newname);
if (load_player_data(id))
{
client_print(id, print_chat, "%s Se cargaron los datos de tu nuevo nick", PREFIX);
}
else
{
client_print(id, print_chat, "%s Este nick no contiene datos anteriores", PREFIX);
}
}
}
public clcmd_show_menu_knife(id)
{
new menu = menu_create("Menu de cuchis :3", "hand_knife");
new knifes[200];
for (new i = 0; i < sizeof KNIFES_LIST; i++)
{
if (g_kills[id] >= KNIFES_LIST[i][KNIFE_KILLS])
{
formatex(knifes, charsmax(knifes), "\w%s %s", KNIFES_LIST[i][KNIFE_NAME], g_knife[id] == i ? "\y[Actual]":"");
}
else
{
formatex(knifes, charsmax(knifes), "\d%s \r[BLOQUEADO]", KNIFES_LIST[i][KNIFE_NAME]);
}
menu_additem(menu, knifes);
}
menu_display(id, menu, 0);
}
public hand_knife(id, menu, item)
{
if (item == MENU_EXIT)
{
return PLUGIN_HANDLED;
}
if (item <= sizeof KNIFES_LIST)
{
if (item == g_knife[id])
{
clcmd_show_menu_knife(id);
return PLUGIN_HANDLED;
}
if (g_kills[id] >= KNIFES_LIST[item][KNIFE_KILLS])
{
client_print(id, print_chat, "%s Cambiaste tu cuchi de %s a %s", PREFIX, KNIFES_LIST[g_knife[id]][KNIFE_NAME], KNIFES_LIST[item][KNIFE_NAME]);
g_knife[id] = item;
if (is_user_alive(id))
{
engclient_cmd(id, "weapon_knife");
}
}
else
{
client_print(id, print_chat, "%s Te faltan %d kills para desbloquear el %s", PREFIX, (KNIFES_LIST[item][KNIFE_KILLS] - g_kills[id]), KNIFES_LIST[item][KNIFE_NAME]);
}
}
clcmd_show_menu_knife(id);
return PLUGIN_HANDLED;
}
public event_cur_weapon(id)
{
if(read_data(2) != CSW_KNIFE)
return PLUGIN_CONTINUE;
if (!equal(KNIFES_LIST[g_knife[id]][KNIFE_MDL_V], ""))
{
set_pev(id, pev_viewmodel2, KNIFES_LIST[g_knife[id]][KNIFE_MDL_V]);
}
if (!equal(KNIFES_LIST[g_knife[id]][KNIFE_MDL_P], ""))
{
set_pev(id, pev_weaponmodel2, KNIFES_LIST[g_knife[id]][KNIFE_MDL_P]);
}
return PLUGIN_CONTINUE;
}
public event_death()
{
new attacker, victim;
attacker = read_data(1);
victim = read_data(2);
if (!is_user_connected(attacker) || attacker == victim) return;
g_kills[attacker] ++;
}
public clcmd_say_kills(id)
{
client_print(id, print_chat, "%s tienes un total de %d kills", PREFIX, g_kills[id]);
}
save_player_data(id)
{
adv_vault_set_start(g_vault);
adv_vault_set_field(g_vault, g_data[DATA_KILLS], g_kills[id]);
adv_vault_set_field(g_vault, g_data[DATA_KNIFE], g_knife[id]);
adv_vault_set_end(g_vault, 0, g_playername[id]);
}
load_player_data(id)
{
if(!adv_vault_get_prepare(g_vault, _, g_playername[id]))
{
g_kills[id] = 0;
g_knife[id] = 0;
return false;
}
g_kills[id] = adv_vault_get_field(g_vault, g_data[DATA_KILLS]);
g_knife[id] = adv_vault_get_field(g_vault, g_data[DATA_KNIFE]);
return true;
}