View Single Post
brN17
Junior Member
Join Date: Mar 2022
Old 05-27-2022 , 15:40   Re: precaching arrays
Reply With Quote #5

yay that worked perfectly, thanks so much you both

code ended up like this if someone needs this some day and wants to use:
PHP 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 
chuckyIDdarthmaulIDriddickIDwolvIDgrimreaperID

enum Knifes

    
NoKnifeSet = -1,
    
Chucky,
    
DarthMaul,
    
Riddick,
    
Wolv,
    
Grim


enum ModelInfo
{
    
ModelName64 ],
    
ModelData64 ],
    
ModelPData64 ]
}

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

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

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

    
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_precache()
{
    for ( new 
Knifes:kModelIndex Chucky kModelIndex Knifes kModelIndex++ )
    {
        
precache_modelg_ModelDatakModelIndex ][ ModelData ] );
        
precache_modelg_ModelDatakModelIndex ][ ModelPData ] );
    }


public 
plugin_end( )
{
    
nvault_closeg_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_authidPlayerg_szSteamID[Player], charsmax(g_szSteamID[ ]) )
    
Load_StuffPlayer )
}
//----------------------------------------------------------------------------------------------
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(idheroIDmode)
{
    
// 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"\r[SH] Menu de Facas VIP:""menu_handler" );

    
// Esto son de la Primera pagina del menu                                //    Item    Key
    
menu_additemmenu"\wChucky."""0g_MenuCallback );                //    0        1
    
menu_additemmenu"\wDarth Maul."""0g_MenuCallback );            //    1        2
    
menu_additemmenu"\wRiddick."""0g_MenuCallback );                //    2        3
    
menu_additemmenu"\wWolverine."""0g_MenuCallback );            //    3        4
    
menu_additemmenu"\wGrim Reaper."""0g_MenuCallback );
    
menu_setprop(menuMPROP_BACKNAME"Página anterior");
    
menu_setprop(menuMPROP_NEXTNAME"Próxima página");
    
menu_setprop(menuMPROP_EXITNAME"Sair");
    
    
// El Key 8 reservado para Back Menu -- Y el Key 9 Para el More Menu -- esto es automatico no lo controlo
    
menu_display(idmenu0);
}

public 
menu_handler(idmenuitem)
{
    if ( 
item == MENU_EXIT ) {
        
menu_destroymenu );
        return 
PLUGIN_HANDLED;
    }
    
    new 
szData[6], szName[64];
    new 
item_accessitem_callback;
    
menu_item_getinfomenuitemitem_accessszDatacharsmax(szData), szName,charsmax(szName), item_callback );
    
    switch(
item) {
        
// Estas Fakas van a partir de la Primera Pagina del Menu
        //-----------    Chucky
        
case 0: {
            
SetKnifeidKnifes:Chucky);
            
ChatColor(id"!g[SERVER] !nVocê selecionou o model !gVIP!n de !gChucky!")
        }
        
//-----------    Darth Maul
        
case 1: {
            
SetKnifeidKnifes:DarthMaul);
            
ChatColor(id"!g[SERVER] !nVocê selecionou o model !gVIP!n de !gDarth Maul!")
        }
        
//-----------    Riddick
        
case 2: {
            
SetKnifeidKnifes:Riddick);
            
ChatColor(id"!g[SERVER] !nVocê selecionou o model !gVIP!n de !gRiddick!")
        }
        
//-----------    Wolverine
        
case 3: {
            
SetKnifeidKnifes:Wolv);
            
ChatColor(id"!g[SERVER] !nVocê selecionou o model !gVIP!n de !gWolverine!")
        }
        
//-----------    Grim Reaper
        
case 4: {
            
SetKnifeidKnifes: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(idEV_SZ_viewmodelg_ModelData[iModelIndex][ ModelData ]);
    
entity_set_string(idEV_SZ_weaponmodelg_ModelData[iModelIndex][ ModelPData ]);
    }
    
    return 
PLUGIN_HANDLED;    
}

public 
CurWeapon(id

    if ( (
is_user_alive(id)) && (get_user_flags(id) & ADMIN_LEVEL_E)) 
        
SetKnife(idknife_model[id])
        
    return 
PLUGIN_HANDLED    


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

    
num_to_str_:knife_modelid ] , szData charsmaxszData ) ); 
     
    
nvault_setg_iVaultID szKey szData ); 


public 
Load_Stuff(id)  
{  
    new 
szKey[40] , szData[4] , iTS;  
    
    
// formatex( szKey , charsmax( szKey ) , "%s_knife" , gMemoryTableNames[id] ); 
    
formatexszKey charsmaxszKey ) , "%s_knife" g_szSteamID[id] ); 
     
    if ( 
nvault_lookupg_iVaultID szKey szData charsmaxszData ) , iTS ) ) { 
        
knife_modelid ] = Knifes:str_to_numszData ); 
    }
}
// This is our callback function. Return ITEM_ENABLED, ITEM_DISABLED, or ITEM_IGNORE.
public menuitem_callback(idmenuitem)
{
    
// Chucky
    
if ( item == && !gHasChucky[id] ) {
        
menu_item_setname(menuitem"\dChucky.");
        return 
ITEM_DISABLED;
    }
    
// Darth Maul
    
if ( item == && !gHasDarthMaulPowers[id] ) {
        
menu_item_setname(menuitem"\dDarth Maul.");
        return 
ITEM_DISABLED;
    }
    
// Riddick
    
if ( item == && !ghasRiddickPowers[id] )
    {
        
menu_item_setname(menuitem"\dRiddick.");
        return 
ITEM_DISABLED;
    }
    
// Wolverine
    
if ( item == && !ghasWolvPowers[id] ) {
        
menu_item_setname(menuitem"\dWolverine.");
        return 
ITEM_DISABLED;
    }
    
// Grim Reaper
    
if ( item == && !ghasGrimPower[id] ) {
        
menu_item_setname(menuitem"\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 1players[32];
    static 
msg[191];
    
vformat(msg190input3);
    
    
replace_all(msg190"!g""^4"); // verde
    
replace_all(msg190"!n""^1"); // galben/alb/negru
    
replace_all(msg190"!t""^3"); // rosu/albastru/gri
    
replace_all(msg190"!t2""^0"); // rosu2/albastru2/gri2
    
    
if (idplayers[0] = id; else get_players(playerscount"ch");
    {
        for (new 
0counti++)
            {
            if (
is_user_connected(players[i]))
                {
                
message_begin(MSG_ONE_UNRELIABLEget_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 }
*/ 

Last edited by brN17; 05-27-2022 at 15:42.
brN17 is offline