Code: Select all
#include <zombie_escape>
#include <fakemeta_util>
new bool:g_WallClimb[33]
new Float:g_wallorigin[32][3]
new g_maxplayers, g_iItemID
public plugin_init()
{
register_plugin("[ZE] Extra Item: Wall climb ", "1.0", "Python1320 & Accelerator")
g_iItemID = ze_register_item("Wall Climb", 10, 0)
register_forward(FM_Touch, "fwd_touch")
register_forward(FM_PlayerPreThink, "fwd_playerprethink")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
g_maxplayers = get_maxplayers()
}
public ze_select_item_pre(id, itemid)
{
// Return Available and we will block it in Post, So it dosen't affect other plugins
if (itemid != g_iItemID)
return ZE_ITEM_AVAILABLE
// Available for Zombies only, So don't show it for Humans
if (!ze_is_user_zombie(id))
return ZE_ITEM_DONT_SHOW
// If he bought it more than 3 so return that it's not Available
if (g_WallClimb[id])
return ZE_ITEM_UNAVAILABLE
return ZE_ITEM_AVAILABLE
}
public ze_select_item_post(player, itemid, id)
{
if (itemid != g_iItemID)
return
{
g_WallClimb[player] = true
client_print(player, print_chat, "[ZE] You bought Wall climb");
}
}
public ze_user_infected(id, infector)
{
g_WallClimb[id] = false
}
public ze_user_humanized(id)
{
g_WallClimb[id] = false
}
public fw_PlayerKilled(victim, attacker, shouldgib)
g_WallClimb[victim] = false
public ze_roundend(winteam)
{
for (new id=1; id<=g_maxplayers; id++)
g_WallClimb[id] = false
}
public client_connect(id)
g_WallClimb[id] = false
public fwd_touch(id, world)
{
if(!is_user_alive(id) || !g_WallClimb[id])
return FMRES_IGNORED
pev(id, pev_origin, g_wallorigin[id])
return FMRES_IGNORED
}
public wallclimb(id, button)
{
static Float:origin[3]
pev(id, pev_origin, origin)
if(get_distance_f(origin, g_wallorigin[id]) > 25.0)
return FMRES_IGNORED // if not near wall
if(fm_get_entity_flags(id) & FL_ONGROUND)
return FMRES_IGNORED
if(button & IN_FORWARD)
{
static Float:velocity[3]
velocity_by_aim(id, 120, velocity)
fm_set_user_velocity(id, velocity)
}
else if(button & IN_BACK)
{
static Float:velocity[3]
velocity_by_aim(id, -120, velocity)
fm_set_user_velocity(id, velocity)
}
return FMRES_IGNORED
}
public fwd_playerprethink(id)
{
if(!g_WallClimb[id])
return FMRES_IGNORED
new button = fm_get_user_button(id)
if(button & IN_USE) //Use button = climb
wallclimb(id, button)
return FMRES_IGNORED
}