#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#define PLUGIN "BANANAMAN"
#define VERSION "1.0"
#define AUTHOR "Phantomas"
#define MAX_PLAYERS 32
#define MESSAGE_PREFIX "[BNNMN] "
#define MODEL "models/banana.mdl"
#define PLAYER_MODEL_T "models/player/banana_t/banana_t.mdl"
#define PLAYER_MODEL_CT "models/player/banana_ct/banana_ct.mdl"
#define TE_BREAKMODEL 108
#define VELOCITY 75
#define VELOCITY_RANDOM 10
#define SIZE 10
#define LIFE 50
#define THROWING_POWER 100
#define AUTO_THROWING
#if defined AUTO_THROWING
#define AUTO_THROWING_INTERVAL 0.5
#define AUTO_THROWING_BANANAS_NUM_DEFAULT 8
#define AUTO_THROWING_BANANAS_NUM_RANDOM_DEFAULT 5
#endif
#define BNNMN_ACCESS ADMIN_RCON
new bananaman_id
new bananaman_next_id
new bool:bananaman_spawned
new bananamodel
public plugin_precache()
{
bananamodel = precache_model(MODEL)
precache_model(PLAYER_MODEL_T)
precache_model(PLAYER_MODEL_CT)
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("bananaman.txt")
register_concmd("amx_bman", "bman", BNNMN_ACCESS, "<name or #userid>")
register_concmd("amx_bcancelman", "bman_cancel", BNNMN_ACCESS)
register_clcmd("amx_bthrow", "throw_banana_cmd", BNNMN_ACCESS, "<bananas num> [bananas minus random]")
register_event("HLTV", "startround", "a", "1=0", "2=0")
RegisterHam(Ham_Killed, "player", "fwd_PlayerKilled")
}
public bman_cancel(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
{
return PLUGIN_HANDLED
}
if(bananaman_next_id != 0)
{
client_print(bananaman_next_id, print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_CANCEL")
bananaman_next_id = 0
console_print(id, "%L", LANG_SERVER, "BNNMN_CANCEL_BY_CMD")
}
return PLUGIN_HANDLED
}
public throw_banana_cmd(id, level, cid)
{
new bananas_one[32]
if(read_argv(1, bananas_one, 31))
{
new bananas_num_one = str_to_num(bananas_one)
if(bananas_num_one < 1)
{
return PLUGIN_HANDLED
}
if(id != bananaman_id)
{
if(!cmd_access(id, level, cid, 2))
{
return PLUGIN_HANDLED
}
} else {
if(!is_user_alive(id))
{
return PLUGIN_HANDLED
}
}
new bananas_count = bananas_num_one
new bananas_two[32]
if(read_argv(2, bananas_two, 31)) {
new bananas_num_two = str_to_num(bananas_two)
if(bananas_num_two > 0)
{
do
{
bananas_count = bananas_num_one - random_num(0, bananas_num_two)
}
while(bananas_count <= 0)
}
}
throw_bananas(id, bananas_count)
}
return PLUGIN_HANDLED
}
public client_disconnect(id)
{
if(bananaman_id == id)
{
bananaman_id = 0
bananaman_spawned = false
remove_task(id)
}
if(bananaman_next_id == id)
{
bananaman_next_id = 0
}
}
public fwd_PlayerKilled(id)
{
if(id == bananaman_id)
{
remove_task(id)
}
}
public get_banana_count(bananas, bananas_random)
{
do
{
bananas = bananas - random_num(0, bananas_random)
}
while(bananas <= 0)
return bananas
}
public throw_bananas(const player_id, const bananas_count)
{
new origin[3]
get_user_origin(player_id, origin)
origin[2] += 8
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BREAKMODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(SIZE)
write_coord(SIZE)
write_coord(SIZE)
write_coord(random_num(-VELOCITY, VELOCITY))
write_coord(random_num(-VELOCITY, VELOCITY))
write_coord(THROWING_POWER)
write_byte(VELOCITY_RANDOM)
write_short(bananamodel)
write_byte(bananas_count)
write_byte(LIFE)
write_byte(0)
message_end()
}
#if defined AUTO_THROWING
public auto_throw_bananas(id)
{
throw_bananas(id, get_banana_count(AUTO_THROWING_BANANAS_NUM_DEFAULT, AUTO_THROWING_BANANAS_NUM_RANDOM_DEFAULT))
}
#endif
public startround()
{
new players[32], inum
get_players(players, inum, "h")
for(new i = 0; i < inum; ++i)
{
if(players[i] == bananaman_id && bananaman_spawned == true) {
bananaman_id = 0
cs_reset_user_model(players[i])
remove_task(players[i])
}
}
for(new i = 0; i < inum; ++i)
{
if(players[i] == bananaman_next_id)
{
bananaman_next_id = 0
bananaman_spawned = true
bananaman_id = players[i]
new CsTeams:player_team
player_team = cs_get_user_team(players[i])
switch (player_team)
{
case CS_TEAM_T:
cs_set_user_model(players[i], "banana_t")
case CS_TEAM_CT:
cs_set_user_model(players[i], "banana_ct")
}
client_print(players[i], print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_YOU")
client_print(players[i], print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_THROW")
#if defined AUTO_THROWING
set_task(AUTO_THROWING_INTERVAL, "auto_throw_bananas", players[i], "", 0, "b")
#endif
}
}
}
public bman(id, level, cid)
{
if(!cmd_access(id, level, cid, 2))
{
return PLUGIN_HANDLED
}
new arg1[32]
read_argv(1, arg1, 31)
new player = cmd_target(id, arg1, CMDTARGET_ALLOW_SELF)
if(!player && !is_user_hltv(player))
{
return PLUGIN_HANDLED
}
if(is_user_connected(bananaman_next_id))
{
client_print(bananaman_next_id, print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_CANCEL")
}
new player_name[32]
get_user_name(player, player_name, 31)
bananaman_next_id = player
console_print(id, "%L", LANG_SERVER, "BNNMN_SET", player_name)
client_print(player, print_chat, "%s%L", MESSAGE_PREFIX, LANG_SERVER, "BNNMN_PREPARE")
return PLUGIN_HANDLED
}