#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#define BUY_BPAMMO "items/9mmclip1.wav"
new cvar_bpcost, cvar_admin
new g_msgAmmoPickup
new const PLUGIN_NAME[] = "BP Ammo"
new const PLUGIN_VERSION[] = "v0.4"
new const AUTHOR[] = "YKH =]"
// Admin
const ACCESS_FLAG = ADMIN_LEVEL_A
// Admin Amount of ammo to give when buying additional clips for weapons
new const MAXBPAMMO[] = { -1, 104, -1, 180, -1, 64, 1, 200, 180, -1, 240, 200, 200, 180, 180, 180, 200, 240,
60, 240, 600, 64, 180, 240, 180, -1, 70, 180, 180, -1, 200 }
// Max BP ammo for weapons(player)
new const MAXBPAMMO2[] = { -1, 52, -1, 90, -1, 32, 1, 100, 90, -1, 120, 100, 100, 90, 90, 90, 100, 120,
30, 120, 200, 32, 90, 120, 90, -1, 35, 90, 90, -1, 100 }
// Admin Amount of ammo to give when buying additional clips for weapons
new const BUYAMMO[] = { -1, 52, -1, 90, -1, 32, 1, 100, 90, -1, 120, 100, 100, 90, 90, 90, 100, 120,
30, 120, 200, 32, 90, 120, 90, -1, 36, 90, 90, -1, 100 }
// Amount of ammo to give when buying additional clips for weapons
new const BUYAMMO2[] = { -1, 13, -1, 30, -1, 8, -1, 12, 30, -1, 30, 50, 12, 30, 30, 30, 12, 30,
10, 30, 30, 8, 30, 30, 30, -1, 7, 30, 30, -1, 50 }
// Ammo IDs for weapons
new const AMMOID[] = { -1, 9, -1, 2, 12, 5, 14, 6, 4, 13, 10, 7, 6, 4, 4, 4, 6, 10,
1, 10, 3, 5, 4, 10, 2, 11, 8, 4, 2, -1, 7 }
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, AUTHOR)
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
cvar_bpcost = register_cvar("bpammo_cost", "30")
cvar_admin = register_cvar("bp_admin", "0")
register_clcmd("buyammo1", "clcmd_buyammo1")
register_clcmd("buyammo2", "clcmd_buyammo2")
g_msgAmmoPickup = get_user_msgid("AmmoPickup")
// Round Start display message
set_task(1.0, "event_round_start")
}
public plugin_precache()
{
precache_sound(BUY_BPAMMO);
}
public clcmd_buyammo1(id)
{
// Not alive or infinite ammo setting enabled
if (!is_user_alive(id) || !cs_get_user_buyzone(id))
return PLUGIN_HANDLED;
new money = cs_get_user_money(id)
new cost = get_pcvar_num(cvar_bpcost)
// Get user weapons
static weapons[32], num, i, currentammo, weaponid
num = 0 // reset passed weapons count (bugfix)
get_user_weapons(id, weapons, num)
// Not enoungh Money ?
if (money < cost)
return PLUGIN_HANDLED;
// Loop through them and give the right ammo type
for (i = 0; i < num; i++)
{
// Prevents re-indexing the array
weaponid = weapons[i]
if ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM) // primary
{
// Get current ammo of the weapon
currentammo = cs_get_user_bpammo(id, weaponid)
if (get_pcvar_num(cvar_admin) == 1)
{
if (get_user_flags(id) & ACCESS_FLAG)
{
// Check if we are close to the BP ammo limit
if (currentammo <= MAXBPAMMO[weaponid]-BUYAMMO[weaponid])
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(BUYAMMO[weaponid]) // ammo amount
message_end()
// Increase BP ammo
emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds
cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid])
cs_set_user_money(id, money - cost)
}
else
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(MAXBPAMMO[weaponid]-currentammo) // ammo amount
message_end()
// Reached the limit
cs_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid])
}
}
else
{
// Check if we are close to the BP ammo limit
if (currentammo <= MAXBPAMMO2[weaponid]-BUYAMMO2[weaponid])
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(BUYAMMO2[weaponid]) // ammo amount
message_end()
// Increase BP ammo
emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds
cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid])
cs_set_user_money(id, money - cost)
}
else
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(MAXBPAMMO2[weaponid]-currentammo) // ammo amount
message_end()
// Reached the limit
cs_set_user_bpammo(id, weaponid, MAXBPAMMO2[weaponid])
}
}
}
else
{
// Check if we are close to the BP ammo limit
if (currentammo <= MAXBPAMMO[weaponid]-BUYAMMO[weaponid])
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(BUYAMMO[weaponid]) // ammo amount
message_end()
// Increase BP ammo
emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds
cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid])
cs_set_user_money(id, money - cost)
}
else
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(MAXBPAMMO[weaponid]-currentammo) // ammo amount
message_end()
// Reached the limit
cs_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid])
}
}
}
}
return PLUGIN_HANDLED;
}
public clcmd_buyammo2(id)
{
// Not alive or infinite ammo setting enabled
if (!is_user_alive(id) || !cs_get_user_buyzone(id))
return PLUGIN_HANDLED;
new money = cs_get_user_money(id)
new cost = get_pcvar_num(cvar_bpcost)
// Get user weapons
static weapons[32], num, i, currentammo, weaponid
num = 0 // reset passed weapons count (bugfix)
get_user_weapons(id, weapons, num)
// Not enoungh Money ?
if (money < cost)
return PLUGIN_HANDLED;
// Loop through them and give the right ammo type
for (i = 0; i < num; i++)
{
// Prevents re-indexing the array
weaponid = weapons[i]
if ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM) // secondary
{
// Get current ammo of the weapon
currentammo = cs_get_user_bpammo(id, weaponid)
if (get_pcvar_num(cvar_admin) == 1)
{
if (get_user_flags(id) & ACCESS_FLAG)
{
// Check if we are close to the BP ammo limit
if (currentammo <= MAXBPAMMO[weaponid]-BUYAMMO[weaponid])
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(BUYAMMO[weaponid]) // ammo amount
message_end()
// Increase BP ammo
emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds
cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid])
cs_set_user_money(id, money - cost)
}
else
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(MAXBPAMMO[weaponid]-currentammo) // ammo amount
message_end()
// Reached the limit
cs_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid])
}
}
else
{
// Check if we are close to the BP ammo limit
if (currentammo <= MAXBPAMMO2[weaponid]-BUYAMMO2[weaponid])
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(BUYAMMO2[weaponid]) // ammo amount
message_end()
// Increase BP ammo
emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds
cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid])
cs_set_user_money(id, money - cost)
}
else
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(MAXBPAMMO2[weaponid]-currentammo) // ammo amount
message_end()
// Reached the limit
cs_set_user_bpammo(id, weaponid, MAXBPAMMO2[weaponid])
}
}
}
else
{
// Check if we are close to the BP ammo limit
if (currentammo <= MAXBPAMMO[weaponid]-BUYAMMO[weaponid])
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(BUYAMMO[weaponid]) // ammo amount
message_end()
// Increase BP ammo
emit_sound(id, CHAN_VOICE, BUY_BPAMMO, 0.9, ATTN_STATIC, 0, PITCH_NORM)// Play sounds
cs_set_user_bpammo(id, weaponid, currentammo + BUYAMMO[weaponid])
cs_set_user_money(id, money - cost)
}
else
{
// Flash ammo in hud
message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
write_byte(AMMOID[weaponid]) // ammo id
write_byte(MAXBPAMMO[weaponid]-currentammo) // ammo amount
message_end()
// Reached the limit
cs_set_user_bpammo(id, weaponid, MAXBPAMMO[weaponid])
}
}
}
}
return PLUGIN_HANDLED;
}
public event_round_start()
{
set_task(5.0, "welcome_msg")
}
public welcome_msg()
{
// Show mod info
client_print(0, print_chat, "[BP] **** %s %s by %s ****", PLUGIN_NAME, PLUGIN_VERSION, AUTHOR)
}