View Single Post
brN17
Junior Member
Join Date: Mar 2022
Old 05-26-2022 , 20:06   Re: precaching arrays
Reply With Quote #3

not exactly, It's different since It's exclusive for SH Mod and not as complete as yours are
please tell me If "entity_set_string(id, EV_SZ_weaponmodel, g_ModelPData[iModelIndex][PModels]);" is correct too, I want it to save on nvault as well

complete code not fully tested since it's crashing:
Code:
#include <superheromod> 
#include <nvault>

#define MAX_PLAYERS 32

new bool:gHasChucky[SH_MAXSLOTS+1]
new bool:gHasDarthMaulPowers[SH_MAXSLOTS+1]
new bool:ghasRiddickPowers[SH_MAXSLOTS+1]
new bool:ghasWolvPowers[SH_MAXSLOTS+1]
new bool:ghasGrimPower[SH_MAXSLOTS+1]


new chuckyID, darthmaulID, riddickID, wolvID, grimreaperID

enum Knifes
{ 
	NoKnifeSet = -1,
	Chucky,
	DarthMaul,
	Riddick,
	Wolv,
	Grim
} 

enum KnifeModels
{ 
	ModelName[ 64 ],
	ViewModel[ 64 ],

}

enum PreviewModels
{
	PModels[ 64 ]
}

new const g_ModelData[Knifes][KnifeModels] =  
{ 
	{ "Chucky",		"models/shmod/chuckyy_VIP_knife.mdl"},
	{ "DarthMaul",		"models/shmod/darthmaul_VIP_knife.mdl"},
	{ "Riddick",		"models/shmod/riddick_VIP_knife.mdl"},
	{ "Wolv",		"models/shmod/wolv_VIP_knife.mdl"},
	{ "Grim",		"models/shmod/grimreaper_VIP_knife.mdl"}
}

new const g_ModelPData[Knifes][PModels] =  
{ 
	{ "Chucky",		"models/p_knife.mdl"},
	{ "DarthMaul",		"models/shmod/darthmaul_p_knife.mdl"},
	{ "Riddick",		"models/p_knife.mdl"},
	{ "Wolv",		"models/p_knife.mdl"},
	{ "Grim",		"models/shmod/grimreaperV_p_knife.mdl"}
}

new Knifes:knife_model[SH_MAXSLOTS+ 1];
new g_MenuCallback;			//Create a global variable to hold our callback

new g_iVaultID
new g_szSteamID[ MAX_PLAYERS + 1 ][ 34 ];	 // steam ID
// new gMemoryTableNames[64][32]				// Stores players name for a key
//----------------------------------------------------------------------------------------------
public plugin_init()
{
	register_plugin("plugin KnifeMenuSH", "1.0", "Lucas Cab Arje + brn17")

	register_clcmd("say /facas_vip", "vip")		// Para llamar al menu de fakas


	//Create our callback and save it to our variable
	g_MenuCallback = menu_makecallback("menuitem_callback");	//The first parameter is the public function to be called when a menu item is being shown.
	
	// Eventos
	register_event("CurWeapon","CurWeapon","be","1=1")	 // Para cambiar las fakas models
	set_task(0.2, "cache_id");				   //we need to let superhero cache all the heros to avoid issues
}


public plugin_end( )
{
	nvault_close( g_iVaultID )
}

public plugin_cfg( )
{
	g_iVaultID = nvault_open( "knife_vault" )
	
	if( g_iVaultID == INVALID_HANDLE ) {
		set_fail_state( "Error opening Knife Nvault" )
	}
}

// public client_putinserver(Player)
public client_authorized(Player)  
{
	//get_user_name(Player, gMemoryTableNames[Player], charsmax(gMemoryTableNames[]) )
	get_user_authid( Player, g_szSteamID[Player], charsmax(g_szSteamID[ ]) )
	Load_Stuff( Player )
}
//----------------------------------------------------------------------------------------------
public cache_id() 
{
	// Primera Pagin Menu
	chuckyID				= sh_get_hero_id("Chucky");
	darthmaulID				= sh_get_hero_id("Darth Maul");
	riddickID				= sh_get_hero_id("Riddick");
	wolvID					= sh_get_hero_id("Wolverine");
	grimreaperID				= sh_get_hero_id("Grim Reaper");
}
//----------------------------------------------------------------------------------------------
public sh_hero_init(id, heroID, mode)
{
	// Chucky
	if ( chuckyID == heroID )
		gHasChucky[id] = mode ? true : false
	// Darth Maul	
	else if ( darthmaulID == heroID )
		gHasDarthMaulPowers[id] = mode ? true : false
	// Riddick	
	else if ( riddickID == heroID )
		ghasRiddickPowers[id] = mode ? true : false
	// Wolverine	
	else if ( wolvID == heroID )
		ghasWolvPowers[id] = mode ? true : false
	// Grim Reaper
	else if ( grimreaperID == heroID )
		ghasGrimPower[id] = mode ? true : false
}
//----------------------------------------------------------------------------------------------
public vip(id)
{
	if (get_user_flags(id) & ADMIN_LEVEL_E)
		{
			KnifeMenu(id)
		}
	else
		{
			ChatColor(id, "!g[SERVER] !nEste recurso é exclusivo para !gVIPs!n adquira j o seu!")
		}
}
//----------------------------------------------------------------------------------------------
public KnifeMenu(id)
{
	new menu = menu_create( "\rRevive Player Menu!:", "menu_handler" );

	// Esto son de la Primera pagina del menu								//	Item	Key
	menu_additem( menu, "\wChucky.", "", 0, g_MenuCallback );				//	0		1
	menu_additem( menu, "\wDarth Maul.", "", 0, g_MenuCallback );			//	1		2
	menu_additem( menu, "\wRiddick.", "", 0, g_MenuCallback );				//	2		3
	menu_additem( menu, "\wWolverine.", "", 0, g_MenuCallback );			//	3		4
	menu_additem( menu, "\wGrim Reaper.", "", 0, g_MenuCallback );
	
	// El Key 8 reservado para Back Menu -- Y el Key 9 Para el More Menu -- esto es automatico no lo controlo
	menu_display(id, menu, 0);
}

public menu_handler(id, menu, item)
{
	if ( item == MENU_EXIT ) {
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	new szData[6], szName[64];
	new item_access, item_callback;
	menu_item_getinfo( menu, item, item_access, szData, charsmax(szData), szName,charsmax(szName), item_callback );
	
	switch(item) {
		// Estas Fakas van a partir de la Primera Pagina del Menu
		//-----------	Chucky
		case 0: {
			SetKnife( id, Knifes:Chucky);
			ChatColor(id, "!g[SERVER] !nVocê selecionou o model !gVIP!n de !gChucky!")
		}
		//-----------	Darth Maul
		case 1: {
			SetKnife( id, Knifes:DarthMaul);
			ChatColor(id, "!g[SERVER] !nVocê selecionou o model !gVIP!n de !gDarth Maul!")
		}
		//-----------	Riddick
		case 2: {
			SetKnife( id, Knifes:Riddick);
			ChatColor(id, "!g[SERVER] !nVocê selecionou o model !gVIP!n de !gRiddick!")
		}
		//-----------	Wolverine
		case 3: {
			SetKnife( id, Knifes:Wolv);
			ChatColor(id, "!g[SERVER] !nVocê selecionou o model !gVIP!n de !gWolverine!")
		}
		//-----------	Grim Reaper
		case 4: {
			SetKnife( id, Knifes:Grim);
			ChatColor(id, "!g[SERVER] !nVocê selecionou o model !gVIP!n de !gGrim Reaper!")
		}
		case MENU_EXIT: {
			ChatColor(id, "!g[SERVER] !nVocê !gnão !nselecionou nenhum !gmodel.")
		}
	}
	
	SaveData(id);
	//lets finish up this function by destroying the menu with menu_destroy, and a return
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public SetKnife(id , Knifes:Knife)  
{ 
	if (!sh_is_active() || !is_user_alive(id) ) return PLUGIN_HANDLED;
	
	new Knifes:iModelIndex = NoKnifeSet;

	iModelIndex = Knife;
	knife_model[id] = iModelIndex;
	
	if ( get_user_weapon(id) == CSW_KNIFE ) { 
	entity_set_string(id, EV_SZ_viewmodel, g_ModelData[iModelIndex][ViewModel]);
	entity_set_string(id, EV_SZ_weaponmodel, g_ModelPData[iModelIndex][PModels]);
	}
	
	return PLUGIN_HANDLED;	
}

public CurWeapon(id) 
{ 
	if ( (is_user_alive(id)) && (get_user_flags(id) & ADMIN_LEVEL_E)) 
		SetKnife(id, knife_model[id])
		
	return PLUGIN_HANDLED	
} 

public SaveData(id) 
{  
	new szKey[ 40 ] , szData[ 4 ]; 
	 
	//formatex( szKey , charsmax( szKey ) , "%s_knife" ,  gMemoryTableNames[id] );
	formatex( szKey , charsmax( szKey ) , "%s_knife" ,  g_szSteamID[id] );

	num_to_str( _:knife_model[ id ] , szData , charsmax( szData ) ); 
	 
	nvault_set( g_iVaultID , szKey , szData ); 
} 

public Load_Stuff(id)  
{  
	new szKey[40] , szData[4] , iTS;  
	
	// formatex( szKey , charsmax( szKey ) , "%s_knife" , gMemoryTableNames[id] ); 
	formatex( szKey , charsmax( szKey ) , "%s_knife" , g_szSteamID[id] ); 
	 
	if ( nvault_lookup( g_iVaultID , szKey , szData , charsmax( szData ) , iTS ) ) { 
		knife_model[ id ] = Knifes:str_to_num( szData ); 
	}
}
// This is our callback function. Return ITEM_ENABLED, ITEM_DISABLED, or ITEM_IGNORE.
public menuitem_callback(id, menu, item)
{
	// Chucky
	if ( item == 0 && !gHasChucky[id] ) {
		menu_item_setname(menu, item, "\dChucky.");
		return ITEM_DISABLED;
	}
	// Darth Maul
	if ( item == 1 && !gHasDarthMaulPowers[id] ) {
		menu_item_setname(menu, item, "\dDarth Maul.");
		return ITEM_DISABLED;
	}
	// Riddick
	if ( item == 2 && !ghasRiddickPowers[id] )
	{
		menu_item_setname(menu, item, "\dRiddick.");
		return ITEM_DISABLED;
	}
	// Wolverine
	if ( item == 3 && !ghasWolvPowers[id] ) {
		menu_item_setname(menu, item, "\dWolverine.");
		return ITEM_DISABLED;
	}
	// Grim Reaper
	if ( item == 4 && !ghasGrimPower[id] ) {
		menu_item_setname(menu, item, "\dGrim Reaper.");
		return ITEM_DISABLED;
	}
	
	//Otherwise we can just ignore the return value
	return ITEM_IGNORE;	 //Note that returning ITEM_ENABLED will override the admin flag check from menu_additem	
} 

stock ChatColor(const id, const input[], any:...) {
	new count = 1, players[32];
	static msg[191];
	vformat(msg, 190, input, 3);
	
	replace_all(msg, 190, "!g", "^4"); // verde
	replace_all(msg, 190, "!n", "^1"); // galben/alb/negru
	replace_all(msg, 190, "!t", "^3"); // rosu/albastru/gri
	replace_all(msg, 190, "!t2", "^0"); // rosu2/albastru2/gri2
	
	if (id) players[0] = id; else get_players(players, count, "ch");
	{
		for (new i = 0; i < count; i++)
			{
			if (is_user_connected(players[i]))
				{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
				write_byte(players[i]);
				write_string(msg);
				message_end();
			}
		}
	}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1030\\ f0\\ fs16 \n\\ par }
*/
amateur work, appreciate your help OciXCrom-sama
brN17 is offline