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 chuckyID, darthmaulID, riddickID, wolvID, grimreaperID
enum Knifes
{
NoKnifeSet = -1,
Chucky,
DarthMaul,
Riddick,
Wolv,
Grim
}
enum ModelInfo
{
ModelName[ 64 ],
ModelData[ 64 ],
ModelPData[ 64 ]
}
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_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", "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_model( g_ModelData[ kModelIndex ][ ModelData ] );
precache_model( g_ModelData[ kModelIndex ][ ModelPData ] );
}
}
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( "\r[SH] Menu de Facas VIP:", "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 );
menu_setprop(menu, MPROP_BACKNAME, "Página anterior");
menu_setprop(menu, MPROP_NEXTNAME, "Próxima página");
menu_setprop(menu, MPROP_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(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][ ModelData ]);
entity_set_string(id, EV_SZ_weaponmodel, g_ModelData[iModelIndex][ ModelPData ]);
}
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 }
*/