Why my data is not saved on map change but it always returns me the basic knife.
Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <crxranks>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <fun>
#include <nvault>
#include <zp50_core>
#include <zp50_colorchat>
#define DAGGER_SPEED 420.0 // Set Katana speed (can be adjusted as per your needs)
#define DEFAULT_SPEED 250.0 // Default speed for players without speed boosts
#define GET_KNIFE_TASK 3001
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "mb-com"
// Knife model paths
new const KNIFE_MODELS[][200] = {
"models/v_knife.mdl", // 0 - Classic
"models/knives/v_daggers.mdl", // 1 - Daggers
"models/knives/v_butterfly.mdl", // 2 - Butterfly
"models/knives/v_katana.mdl", // 3 - Katana
}
#define CLASSIC_KNIFE 1
#define DAGGERS 2
#define BUTTERFLY 3
#define KATANA 4
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
new g_useClassic, g_useDaggers, g_useButterfly, g_useKatana, Float:g_velocity[33][3], bool:g_restorevel[33], g_VaultHandle;
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
g_VaultHandle = nvault_open("Knives");
if(g_VaultHandle == INVALID_HANDLE) {
set_fail_state("Failed to open knives vault");
}
register_clcmd("say /knife", "show_knife_menu");
RegisterHam(Ham_Item_Deploy, "weapon_knife", "fw_Item_Deploy_Post", 1)
RegisterHam( Ham_TakeDamage, "player", "Fw_TakeDamage_Post" )
RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_ResetMaxSpeed_Post", 1)
register_forward( FM_PlayerPreThink, "forward_prethink" )
register_menu("Knives Shop Menu", KEYSMENU, "knife_menu_buy");
}
public plugin_end() {
for(new id = 1; id <= get_maxplayers(); id++) {
if(is_user_connected(id)) {
StoreKnife(id);
}
}
if (g_VaultHandle != INVALID_HANDLE)
{
nvault_close(g_VaultHandle)
}
}
public plugin_natives() {
register_library("zp50_knife_menu");
register_native("show_knife", "native_show_knife_menu");
}
public client_putinserver(id) {
set_task(5.0, "get_knife", GET_KNIFE_TASK + id);
}
public get_knife(id) {
id -= GET_KNIFE_TASK;
if(!g_VaultHandle || g_VaultHandle == INVALID_HANDLE) return;
new auth_id[150];
get_user_authid(id, auth_id, charsmax(auth_id));
new knife_type = nvault_get(g_VaultHandle, auth_id);
switch(knife_type) {
case DAGGERS: {
UnSet_BitVar(g_useClassic, id);
UnSet_BitVar(g_useKatana, id);
UnSet_BitVar(g_useButterfly, id);
Set_BitVar(g_useDaggers, id);
if (get_user_weapon(id) == CSW_KNIFE && is_user_alive(id) && !zp_core_is_zombie(id))
set_pev(id, pev_viewmodel2, KNIFE_MODELS[1]);
ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}
case BUTTERFLY: {
UnSet_BitVar(g_useClassic, id);
UnSet_BitVar(g_useKatana, id);
UnSet_BitVar(g_useDaggers, id);
Set_BitVar(g_useButterfly, id);
if (get_user_weapon(id) == CSW_KNIFE && is_user_alive(id) && !zp_core_is_zombie(id))
set_pev(id, pev_viewmodel2, KNIFE_MODELS[2]);
ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}
case KATANA: {
UnSet_BitVar(g_useClassic, id);
UnSet_BitVar(g_useButterfly, id);
UnSet_BitVar(g_useDaggers, id);
Set_BitVar(g_useKatana, id);
if (get_user_weapon(id) == CSW_KNIFE && is_user_alive(id) && !zp_core_is_zombie(id))
set_pev(id, pev_viewmodel2, KNIFE_MODELS[3]);
ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}
default: {
UnSet_BitVar(g_useDaggers, id);
UnSet_BitVar(g_useKatana, id);
UnSet_BitVar(g_useButterfly, id);
Set_BitVar(g_useClassic, id);
ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}
}
switch(knife_type) {
case 1: zp_colored_print(id, "^x04[KNIFE] ^x01Your^x04 CLASSIC KNIFE^x01 is set. Say ^x04/knife^x01 to change.")
case 2: zp_colored_print(id, "^x04[KNIFE] ^x01Your^x04 DAGGERS KNIFE^x01 is set. Say ^x04/knife^x01 to change.")
case 3: zp_colored_print(id, "^x04[KNIFE] ^x01Your^x04 BUTTERFLY KNIFE^x01 is set. Say ^x04/knife^x01 to change.")
case 4: zp_colored_print(id, "^x04[KNIFE] ^x01Your^x04 KATANA KNIFE^x01 is set. Say ^x04/knife^x01 to change.")
}
}
public native_show_knife_menu(plugin) {
new id = get_param(1);
show_knife_menu(id);
}
public client_disconnected(id) {
StoreKnife(id);
UnSet_BitVar(g_useDaggers, id);
UnSet_BitVar(g_useKatana, id);
UnSet_BitVar(g_useButterfly,id);
UnSet_BitVar(g_useClassic,id);
}
public StoreKnife(id) {
new steam_auth[150];
get_user_authid(id, steam_auth, charsmax(steam_auth));
new knife_string[3];
if(Get_BitVar(g_useKatana, id)) {
num_to_str(KATANA, knife_string, charsmax(knife_string))
nvault_set(g_VaultHandle, steam_auth, knife_string);
} else if(Get_BitVar(g_useDaggers, id)) {
num_to_str(DAGGERS, knife_string, charsmax(knife_string))
nvault_set(g_VaultHandle, steam_auth, knife_string);
}else if(Get_BitVar(g_useButterfly, id)) {
num_to_str(BUTTERFLY, knife_string, charsmax(knife_string))
nvault_set(g_VaultHandle, steam_auth, knife_string);
} else {
num_to_str(CLASSIC_KNIFE, knife_string, charsmax(knife_string))
nvault_set(g_VaultHandle, steam_auth, knife_string);
}
}
public plugin_precache() {
for(new i = 0; i < sizeof KNIFE_MODELS; i++) {
engfunc(EngFunc_PrecacheModel, KNIFE_MODELS[i]);
}
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink_Post", 1)
}
public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage) // , bitsDamageType
{
if (!is_user_alive(iVictim) || !is_user_alive(iAttacker))
return HAM_IGNORED
if ((get_user_weapon(iAttacker) == CSW_KNIFE) && (iAttacker == iInflictor) && Get_BitVar(g_useKatana, iAttacker) && !zp_core_is_zombie(iAttacker))
{
SetHamParamFloat(4, fDamage * 10.0)
return HAM_HANDLED
}
return HAM_IGNORED
}
public fw_Item_Deploy_Post(Ent)
{
new id = get_pdata_cbase(Ent, 41, 4) // get owner of weapon (CSW_KNIFE)
if (!is_user_alive(id) || zp_get_user_zombie(id))
return
if(Get_BitVar(g_useKatana, id)) {
set_pev(id, pev_viewmodel2, KNIFE_MODELS[3]);
} else if(Get_BitVar(g_useButterfly, id)) {
set_pev(id, pev_viewmodel2, KNIFE_MODELS[2]);
} else if(Get_BitVar(g_useDaggers, id)) {
set_pev(id, pev_viewmodel2, KNIFE_MODELS[1]);
} else {
return;
}
}
public show_knife_menu(id) {
static menu[250]
new len;
// Title
len += formatex(menu[len], charsmax(menu) - len, "\r ZABJELO KNIFE SHOP ^n")
len += formatex(menu[len], charsmax(menu) - len, "^n\r1.\w Classic Knife \r[No Abilities]")
if(crxranks_get_user_level(id) >= 3) {
len += formatex(menu[len], charsmax(menu) - len, "^n\r2.\w Daggers \r[Speed]")
}else {
len += formatex(menu[len], charsmax(menu) - len, "^n\d2. Daggers \r[LVL: 3]")
}
if(crxranks_get_user_level(id) >= 5) {
len += formatex(menu[len], charsmax(menu) - len, "^n\r3.\w Butterfly \r[Bhop]")
}else {
len += formatex(menu[len], charsmax(menu) - len, "^n\d3. Butterfly \r[LVL: 5]")
}
if(crxranks_get_user_level(id) >= 10) {
len += formatex(menu[len], charsmax(menu) - len, "^n\r4.\w Katana \r[3x Damage]")
}else {
len += formatex(menu[len], charsmax(menu) - len, "^n\d4. Katana \r[LVL: 10]")
}
// 0. Exit
len += formatex(menu[len], charsmax(menu) - len, "^n^n\r0.\w Exit")
show_menu(id, KEYSMENU, menu, -1, "Knives Shop Menu")
}
public knife_menu_buy(id, key) {
if(zp_core_is_zombie(id)) {
client_print(id, print_chat, "Cannot select knife while zombie");
return PLUGIN_HANDLED;
}
switch(key) {
case -1: {
return PLUGIN_HANDLED;
}
case 0: {
//remove_hammer(id);
UnSet_BitVar(g_useDaggers, id);
UnSet_BitVar(g_useKatana, id);
UnSet_BitVar(g_useButterfly,id);
Set_BitVar(g_useClassic,id)
ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
}
case 1: {
//remove_hammer(id);
UnSet_BitVar(g_useClassic,id);
UnSet_BitVar(g_useKatana,id);
UnSet_BitVar(g_useButterfly,id);
Set_BitVar(g_useDaggers,id)
if (get_user_weapon(id) == CSW_KNIFE) set_pev(id, pev_viewmodel2, KNIFE_MODELS[1]);
ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
}
case 2: {
//remove_hammer(id);
UnSet_BitVar(g_useClassic,id);
UnSet_BitVar(g_useKatana,id);
UnSet_BitVar(g_useDaggers,id);
Set_BitVar(g_useButterfly,id)
if (get_user_weapon(id) == CSW_KNIFE) set_pev(id, pev_viewmodel2, KNIFE_MODELS[2]);
ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
}
case 3: {
//remove_hammer(id);
UnSet_BitVar(g_useClassic,id);
UnSet_BitVar(g_useButterfly,id);
UnSet_BitVar(g_useDaggers,id);
Set_BitVar(g_useKatana,id)
if (get_user_weapon(id) == CSW_KNIFE) set_pev(id, pev_viewmodel2, KNIFE_MODELS[3]);
ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
}
case 4: {
ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
UnSet_BitVar(g_useClassic,id);
UnSet_BitVar(g_useButterfly,id);
UnSet_BitVar(g_useDaggers,id);
//give_hammer(id);
}
}
return PLUGIN_HANDLED;
}
public forward_prethink( id )
{
if(!is_user_alive(id) || zp_get_user_zombie(id))
return PLUGIN_CONTINUE
if (!Get_BitVar(g_useButterfly, id))
return PLUGIN_CONTINUE
set_pev( id, pev_fuser2, 0.0 )
if( pev( id, pev_button ) & IN_JUMP )
{
new szFlags = pev( id, pev_flags )
if( !( szFlags & FL_WATERJUMP ) && pev( id, pev_waterlevel ) < 2 && szFlags & FL_ONGROUND )
{
new Float: szVelocity[ 3 ]
pev( id, pev_velocity, szVelocity)
szVelocity[ 2 ] += 250.0
set_pev( id, pev_velocity, szVelocity )
set_pev( id, pev_gaitsequence, 6 )
}
}
return FMRES_IGNORED
}
public zp_user_infected_post(id) {
ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
}
public fw_PlayerPreThink(id)
{
if ( !is_user_alive(id) || !is_user_bot(id) || zp_get_user_zombie(id) )
return FMRES_IGNORED
if (!Get_BitVar(g_useButterfly, id))
return FMRES_IGNORED
if (pev(id, pev_flags) & FL_ONGROUND)
{
pev(id, pev_velocity, g_velocity[id])
g_restorevel[id] = true
}
return FMRES_IGNORED
}
public fw_ResetMaxSpeed_Post(id)
{
if (!is_user_alive(id) || !Get_BitVar(g_useDaggers, id) || zp_core_is_zombie(id))
return;
// Apply speed boost
new Float:current_maxspeed
pev(id, pev_maxspeed, current_maxspeed)
set_pev(id, pev_maxspeed, current_maxspeed + 100.0)
}
public fw_PlayerPreThink_Post(id)
{
if (!Get_BitVar(g_useButterfly, id))
return FMRES_IGNORED
if (g_restorevel[id])
{
g_restorevel[id] = false
if (!(pev(id, pev_flags) & FL_ONTRAIN))
{
new groundent = pev(id, pev_groundentity)
if (pev_valid(groundent) && (pev(groundent, pev_flags) & FL_CONVEYOR))
{
static Float:vecTemp[3]
pev(id, pev_basevelocity, vecTemp)
g_velocity[id][0] += vecTemp[0]
g_velocity[id][1] += vecTemp[1]
g_velocity[id][2] += vecTemp[2]
}
set_pev(id, pev_velocity, g_velocity[id])
return FMRES_HANDLED
}
}
return FMRES_IGNORED
}