PHP Code:
#include <amxmodx>
//#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <nvault>
#pragma semicolon 1
const MAX_WEAPON_LENGTH = 19;
const MAX_VAULT_DATA_LENGTH = 16;
const IGNORED_WEAPONS = (1 << CSW_KNIFE);
new const gBuyEnt[] = "info_map_parameters";
new const gPluginVersion[] = "1.0.0";
new const gSayCommands[] =
{
"say",
"say_team"
};
enum _: pluginSettings
{
KNIVES_ONLY,
RESPAWN,
BLOCK_BUY_ZONE,
};
new bool:gPluginSetting[pluginSettings];
enum (+= 69)
{
TASK_RESPAWN_PLAYER = 420,
TASK_CHECK_WEAPONS
};
enum _:cvarList
{
PREFIX
};
new gCvar[cvarList];
new gPrefix[MAX_NAME_LENGTH];
new gVault;
public plugin_init()
{
register_plugin("[AKM] Advanced Knife Manager", gPluginVersion, "LadderGoat");
for(new i; i < sizeof(gSayCommands); i++)
{
register_clcmd(fmt("%s /akm", gSayCommands[i]), "ShowMainMenu");
}
RegisterHam(Ham_Spawn, "player", "PlayerSpawnPost", 1);
RegisterHam(Ham_Killed, "player", "PlayerKilledPost", 1);
gCvar[PREFIX] = register_cvar("akm_prefix", "GOAT", FCVAR_SERVER);
new cvarVersion = register_cvar("akm_version", gPluginVersion, FCVAR_SERVER|FCVAR_SPONLY);
set_pcvar_string(cvarVersion, gPluginVersion);
gVault = nvault_open("AdvancedKnifeManager");
LoadVaultSettings();
}
public plugin_precache()
{
new ent = find_ent_by_class(-1, gBuyEnt);
if(!ent)
ent = create_entity(gBuyEnt);
DispatchKeyValue(ent, "buying", "3");
DispatchSpawn(ent);
}
public plugin_end()
{
nvault_close(gVault);
}
public ShowMainMenu(playerIndex)
{
if(!(get_user_flags(playerIndex) & ADMIN_BAN))
return;
get_pcvar_string(gCvar[PREFIX], gPrefix, charsmax(gPrefix));
new mainMenu = menu_create(fmt("\r[%s]\w Advanced Knife Manager", gPrefix), "MainMenuHandler");
menu_additem(mainMenu, fmt("%sKnives Only %s", gPluginSetting[KNIVES_ONLY] ? "\w" : "\d", gPluginSetting[KNIVES_ONLY] ? "\r[ON]" : "\d[OFF]"));
menu_additem(mainMenu, fmt("%sRespawn %s", gPluginSetting[RESPAWN] ? "\w" : "\d", gPluginSetting[RESPAWN] ? "\r[ON]" : "\d[OFF]"));
menu_display(playerIndex, mainMenu);
}
public MainMenuHandler(playerIndex, mainMenu, menuItem)
{
if(menuItem == MENU_EXIT || !is_user_connected(playerIndex))
{
menu_destroy(mainMenu);
return;
}
gPluginSetting[menuItem] = !gPluginSetting[menuItem];
static adminName[MAX_NAME_LENGTH];
get_user_name(playerIndex, adminName, charsmax(adminName));
switch(menuItem)
{
case KNIVES_ONLY:
{
set_task(0.2, "CheckWeapons", playerIndex + TASK_CHECK_WEAPONS);
client_print_color(0, print_team_default, "^4[%s]^3 %s^1 has^1 %s^4 Knives Only!", gPrefix, adminName, gPluginSetting[KNIVES_ONLY] ? "ENABLED" : "DISABLED");
}
case RESPAWN:
{
RespawnPlayer(playerIndex);
client_print_color(0, print_team_default, "^4[%s]^3 %s^1 has^1 %s^4 Respawn!", gPrefix, adminName, gPluginSetting[RESPAWN] ? "ENABLED" : "DISABLED");
}
}
ShowMainMenu(playerIndex);
SaveVaultSettings();
}
public PlayerSpawnPost(playerIndex)
{
if(!is_user_alive(playerIndex))
return;
if(gPluginSetting[KNIVES_ONLY])
set_task(0.2, "CheckWeapons", playerIndex + TASK_CHECK_WEAPONS);
}
public CheckWeapons(playerIndex)
{
playerIndex -= TASK_CHECK_WEAPONS;
if(!is_user_alive(playerIndex) || !gPluginSetting[KNIVES_ONLY])
return;
for(new i = CSW_P228; i < CSW_P90; i++)
{
if((pev(playerIndex, pev_weapons) & ~IGNORED_WEAPONS) & (1 << i))
{
ResetWeapons(playerIndex);
break;
}
}
}
public ResetWeapons(playerIndex)
{
strip_user_weapons(playerIndex);
give_item(playerIndex, "weapon_knife");
}
public PlayerKilledPost(victimIndex, attackerIndex, shouldGib)
{
if(!is_user_connected(victimIndex))
return;
if(gPluginSetting[RESPAWN])
set_task(2.0, "CheckRespawn", victimIndex + TASK_RESPAWN_PLAYER);
}
public CheckRespawn(playerIndex)
{
playerIndex -= TASK_RESPAWN_PLAYER;
if(!is_user_connected(playerIndex) || !gPluginSetting[RESPAWN])
return;
RespawnPlayer(playerIndex);
}
public RespawnPlayer(playerIndex)
{
if(is_user_alive(playerIndex))
return;
ExecuteHamB(Ham_CS_RoundRespawn, playerIndex);
}
LoadVaultSettings()
{
static vaultData[MAX_VAULT_DATA_LENGTH], vaultKey[MAX_VAULT_DATA_LENGTH];
nvault_get(gVault, vaultKey, vaultData, charsmax(vaultData));
static knivesOnly[MAX_VAULT_DATA_LENGTH / 4], respawn[MAX_VAULT_DATA_LENGTH / 4];
parse(vaultData, knivesOnly, charsmax(knivesOnly), respawn, charsmax(respawn));
gPluginSetting[KNIVES_ONLY] = bool:str_to_num(knivesOnly);
gPluginSetting[RESPAWN] = bool:str_to_num(respawn);
}
SaveVaultSettings()
{
static vaultData[MAX_VAULT_DATA_LENGTH], vaultKey[MAX_VAULT_DATA_LENGTH];
formatex(vaultData, charsmax(vaultData), "%i %i", gPluginSetting[KNIVES_ONLY], gPluginSetting[RESPAWN]);
nvault_set(gVault, vaultKey, vaultData);
}