PHP Code:
/*================================================================================
-----------------------
-*- [UP] Ammo Packs -*-
-----------------------
This plugin is part of Zombie Plague Mod and is distributed under the
terms of the GNU General Public License. Check ZP_ReadMe.txt for details.
================================================================================*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <zp50_core>
#include <colorchat>
#define is_user_valid(%1) (1 <= %1 <= g_MaxPlayers)
#define TASK_HIDEMONEY 100
#define ID_HIDEMONEY (taskid - TASK_HIDEMONEY)
// CS Player PData Offsets (win32)
const PDATA_SAFE = 2
const OFFSET_CSMONEY = 115
const HIDE_MONEY_BIT = (1<<5)
#define MAXPLAYERS 32
new g_MaxPlayers
new g_MsgHideWeapon, g_MsgCrosshair
new g_AmmoPacks[MAXPLAYERS+1]
new g_iTarget[33]
new cvar_starting_ammo_packs, cvar_disable_money
public plugin_init()
{
register_plugin("[UP] Ammo Packs", ZP_VERSION_STRING, "ZP Dev Team")
register_clcmd("say /showammo", "cmd_showammo")
register_clcmd("cmd_reset", "Reset_Menu",ADMIN_IMMUNITY)
register_clcmd("cmd_give", "Donate_Menu",ADMIN_IMMUNITY)
register_clcmd( "gives", "CmdDonate",ADMIN_IMMUNITY)
g_MaxPlayers = get_maxplayers()
g_MsgHideWeapon = get_user_msgid("HideWeapon")
g_MsgCrosshair = get_user_msgid("Crosshair")
cvar_starting_ammo_packs = register_cvar("zp_starting_ammo_packs", "5")
cvar_disable_money = register_cvar("zp_disable_money", "0")
register_event("ResetHUD", "event_reset_hud", "be")
register_message(get_user_msgid("Money"), "message_money")
}
public plugin_natives()
{
register_library("zp50_ammopacks")
register_native("zp_ammopacks_get", "native_ammopacks_get")
register_native("zp_ammopacks_set", "native_ammopacks_set")
}
public native_ammopacks_get(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return -1;
}
return g_AmmoPacks[id];
}
public native_ammopacks_set(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_valid(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
new amount = get_param(2)
g_AmmoPacks[id] = amount
return true;
}
public client_putinserver(id)
{
g_AmmoPacks[id] = get_pcvar_num(cvar_starting_ammo_packs)
}
public client_disconnect(id)
{
remove_task(id+TASK_HIDEMONEY)
}
public event_reset_hud(id)
{
// Hide money?
if (get_pcvar_num(cvar_disable_money))
set_task(0.1, "task_hide_money", id+TASK_HIDEMONEY)
}
// Hide Player's Money Task
public task_hide_money(taskid)
{
// Hide money
message_begin(MSG_ONE, g_MsgHideWeapon, _, ID_HIDEMONEY)
write_byte(HIDE_MONEY_BIT) // what to hide bitsum
message_end()
// Hide the HL crosshair that's drawn
message_begin(MSG_ONE, g_MsgCrosshair, _, ID_HIDEMONEY)
write_byte(0) // toggle
message_end()
}
public message_money(msg_id, msg_dest, msg_entity)
{
// Disable money setting enabled?
if (!get_pcvar_num(cvar_disable_money))
return PLUGIN_CONTINUE;
fm_cs_set_user_money(msg_entity, 0)
return PLUGIN_HANDLED;
}
// Set User Money
stock fm_cs_set_user_money(id, value)
{
// Prevent server crash if entity's private data not initalized
if (pev_valid(id) != PDATA_SAFE)
return;
set_pdata_int(id, OFFSET_CSMONEY, value)
}
public cmd_showammo(id){
static opcion[64]
formatex(opcion, charsmax(opcion),"Show Players AmmoPacks :")
new iMenu = menu_create(opcion, "Handleammo")
new players[32], pnum, tempid
new szName[32], szTempid[10]
get_players(players, pnum, "ch")
for( new i; i<pnum; i++ )
{
tempid = players[i]
get_user_name(tempid, szName, 31)
num_to_str(tempid, szTempid, 9)
formatex(opcion,127,"%s - \y[\r%i AmmoPacks\y]",szName, g_AmmoPacks[tempid]);
menu_additem(iMenu, opcion, szTempid, 0)
}
menu_display(id, iMenu)
return PLUGIN_HANDLED
}
public Handleammo(id, menu, item)
{
if(item == MENU_EXIT)
{
return PLUGIN_HANDLED
}
new data[6], name[64]
new access, callback
menu_item_getinfo (menu, item, access, data, 5, name, 63, callback)
new tempid = str_to_num (data)
new szName[33], szPlayerName[33]
get_user_name(id, szName, 32)
get_user_name(tempid, szPlayerName, 32)
ColorChat(id, GREEN, "^4[ZP] ^1Player ^4%s ^1Have ^4%i ^1AmmoPacks!", szPlayerName, g_AmmoPacks[tempid])
cmd_showammo(id);
return PLUGIN_CONTINUE
}
public Donate_Menu(id, level, cid)
{
if( !cmd_access( id, level, cid, 0 ) )
return PLUGIN_HANDLED;
new iMenu = menu_create("[ZP] Give AmmoPack to Players Menu", "handleDonate");
new iPlayers[32], szName[32], szKey[3], iNum, iPlayer;
get_players(iPlayers, iNum,"ch");
for( new i; i < iNum; i++ )
{
iPlayer = iPlayers[i];
num_to_str(iPlayer, szKey, charsmax(szKey));
get_user_name(iPlayer, szName, charsmax(szName));
menu_additem(iMenu, szName, szKey);
}
menu_setprop(iMenu, MPROP_EXITNAME, "Back");
menu_display(id, iMenu, 0);
return PLUGIN_CONTINUE;
}
public handleDonate(id, menu, item)
{
if( item == MENU_EXIT )
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new szData[6], iAccess, iCallback;
menu_item_getinfo(menu, item, iAccess, szData, charsmax(szData), _, _, iCallback);
g_iTarget[id] = str_to_num(szData);
new szName[32];
get_user_name(g_iTarget[id], szName, charsmax(szName));
client_cmd(id, "messagemode gives");
return PLUGIN_HANDLED;
}
public CmdDonate(id, level, cid)
{
if( !cmd_access( id, level, cid, 0 ) )
return PLUGIN_HANDLED;
new szArg[5];
read_argv(1, szArg, charsmax(szArg));
new iValue = str_to_num(szArg);
new iTarget = g_iTarget[id];
g_AmmoPacks[iTarget] += iValue
new szName[2][32];
get_user_name(iTarget, szName[0], charsmax(szName[]));
get_user_name(id, szName[1], charsmax(szName[]));
ColorChat(id, GREEN, "[ZP] ^1you gives ^4%i ^1AmmoPacks to player ^4%s", iValue, szName[0]);
ColorChat(iTarget, GREEN, "[ZP] ^1owner ^4%s ^1gives you ^4%i ^1AmmoPack.", szName[1], iValue);
return PLUGIN_HANDLED;
}
public Reset_Menu(id, level, cid)
{
if( !cmd_access( id, level, cid, 0 ) )
return PLUGIN_HANDLED;
new iMenu = menu_create("[ZP] Reset AmmoPacks to Players Menu", "handleReset");
new iPlayers[32], szName[32], szKey[3], iNum, iPlayer;
get_players(iPlayers, iNum,"ch");
for( new i; i < iNum; i++ )
{
iPlayer = iPlayers[i];
num_to_str(iPlayer, szKey, charsmax(szKey));
get_user_name(iPlayer, szName, charsmax(szName));
menu_additem(iMenu, szName, szKey);
}
menu_setprop(iMenu, MPROP_EXITNAME, "Back");
menu_display(id, iMenu, 0);
return PLUGIN_CONTINUE;
}
public handleReset(id, menu, item)
{
if( item == MENU_EXIT )
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new szData[6], iAccess, iCallback;
menu_item_getinfo(menu, item, iAccess, szData, charsmax(szData), _, _, iCallback);
g_iTarget[id] = str_to_num(szData);
new iTarget = g_iTarget[id];
g_AmmoPacks[iTarget] = 0
new szName[2][32];
get_user_name(iTarget, szName[0], charsmax(szName[]));
get_user_name(id, szName[1], charsmax(szName[]));
ColorChat(id, GREEN, "^3[ZP] ^1you reset AmmoPacks to player ^4%s", szName[0]);
ColorChat(iTarget, GREEN, "^3[ZP] ^1owner ^4%s ^1reset your AmmoPacks.", szName[1]);
return PLUGIN_HANDLED;
}