Raised This Month: $27 Target: $400
 6% 

Nvault doesnt save on map change


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
kujaca
Junior Member
Join Date: Jan 2025
Old 04-12-2025 , 17:33   Nvault doesnt save on map change
Reply With Quote #1

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
}

Last edited by kujaca; 04-13-2025 at 05:02.
kujaca is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 04-13-2025 , 01:47   Re: Nvault doesnt save on map change
Reply With Quote #2

If you're going to post code, paste it into [code][/code] tags because it loses indentation. Alternatively, attach the .sma file.
__________________
fysiks is offline
kujaca
Junior Member
Join Date: Jan 2025
Old 04-13-2025 , 05:02   Re: Nvault doesnt save on map change
Reply With Quote #3

Quote:
Originally Posted by fysiks View Post
If you're going to post code, paste it into [code][/code] tags because it loses indentation. Alternatively, attach the .sma file.
There you go

Last edited by kujaca; 04-17-2025 at 05:43.
kujaca is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 04-13-2025 , 14:18   Re: Nvault doesnt save on map change
Reply With Quote #4

I did not analyze your entire plugin, but you can start with removing this from plugin_end(). client_disconnected will trigger on all players when they disconnect, the map changes, or when the server is shutting down, so there's no need to also call it at plugin_end.

Code:
public plugin_end() {      //Delete the highlighted code      for(new id = 1; id <= get_maxplayers(); id++) {         if(is_user_connected(id)) {             StoreKnife(id);         }     }     if (g_VaultHandle != INVALID_HANDLE)     {         nvault_close(g_VaultHandle)     } }
__________________
Bugsy is offline
kujaca
Junior Member
Join Date: Jan 2025
Old 04-14-2025 , 13:41   Re: Nvault doesnt save on map change
Reply With Quote #5

Quote:
Originally Posted by Bugsy View Post
I did not analyze your entire plugin, but you can start with removing this from plugin_end(). client_disconnected will trigger on all players when they disconnect, the map changes, or when the server is shutting down, so there's no need to also call it at plugin_end.

Code:
public plugin_end() {      //Delete the highlighted code      for(new id = 1; id <= get_maxplayers(); id++) {         if(is_user_connected(id)) {             StoreKnife(id);         }     }     if (g_VaultHandle != INVALID_HANDLE)     {         nvault_close(g_VaultHandle)     } }
Doesnt work

Last edited by kujaca; 04-17-2025 at 05:43.
kujaca is offline
baneado
Veteran Member
Join Date: Dec 2012
Location: amxmodx-es.com
Old 04-16-2025 , 03:29   Re: Nvault doesnt save on map change
Reply With Quote #6

The problem only happen when map change?

Does data save correctly when player disconnects?
baneado is offline
kujaca
Junior Member
Join Date: Jan 2025
Old 04-16-2025 , 12:30   Re: Nvault doesnt save on map change
Reply With Quote #7

Quote:
Originally Posted by baneado View Post
The problem only happen when map change?

Does data save correctly when player disconnects?
When player reconnects and if its the same map still problem doesnt occur. But the issue is when map change (i guess its the issue when i close nvault data arent stored properly or arent stored at all)
kujaca is offline
Tote
Senior Member
Join Date: Jul 2023
Old 04-17-2025 , 02:28   Re: Nvault doesnt save on map change
Reply With Quote #8

Wtf is even this code
Tote is offline
kujaca
Junior Member
Join Date: Jan 2025
Old 04-17-2025 , 03:14   Re: Nvault doesnt save on map change
Reply With Quote #9

Quote:
Originally Posted by Tote View Post
Wtf is even this code
Agree that code is not that great. I used it for my server and knife selection and abilities work except for saving part. Please no code shaming in future 😞
kujaca is offline
kujaca
Junior Member
Join Date: Jan 2025
Old 04-17-2025 , 03:39   Re: Nvault doesnt save on map change
Reply With Quote #10

I can narrow down the stuff that matters
so function
Code:
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);
	}
}
stores the knife identified by its number. The bitvar is properly set to player since the player always has a knife when select it on server. I haven't checked the nvault values yet. When I disconnect and reconnect while the same map is ongoing it get my knife loaded from nvault properly. On map change (plugin_end) I close nvault and I suspect that might cause issue and idk what the journal is.
kujaca is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 01:09.


Powered by vBulletin®
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Theme made by Freecode