PHP Code:
/*********************************** Includes ************************************/
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <zombieplague>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define Red print_team_red
#endif
/*********************************** Defines ************************************/
//pickup weapon
#define NormalAmmo pev_iuser1
#define IceAmmo pev_iuser2
#define ExplodeAmmo pev_iuser3
#define FireAmmo pev_iuser4
// drop weapons
#define 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))
/*********************************** Weapon/Arrow/Models/Sounds/Sprites ************************************/
new const P_MODEL[]= "models/bow/p_Shina_by_Oxigen.mdl"
new const V_MODEL[]= "models/bow/v_Shina_by_Oxigen.mdl"
new const W_MODEL[]= "models/bow/w_Shina_by_Oxigen.mdl"
new const ARROW_MODEL[]= "models/bow/arrow.mdl"
new const ARROW_SHOOT[]= "bow_shoot.wav"
new const ARROW_SWITCH[]= "bow_switch.wav"
new const BURN_CLASSNAME[]= "flame"
new const BURN_MODEL[]= "sprites/bow/flame_burn01.spr"
/*********************************** Cvars ************************************/
new BOW_ONE_ROUND , BASE_SPEED , BOUNS_SPEED , BURN_LIFE , BURN_PERIOD , BURN_DAMAGE , NORMAL_DAMAGE , SPEED_LOW_ICE , SLOW_ICE_TIME , EXPLODE_DAMAGE , EXPLODE_HITRADIUS , NORMAL_AMMO , FIRE_AMMO , ICE_AMMO , EXPLODE_AMMO , NEXT_SHOT_TIME
/*********************************** Global Variables ************************************/
new g_exp_sprid
new Float:g_start_time[33], Float:g_finish_time[33]
new Float:g_Burn[33]
new g_slowed[33], g_pressed[33], Float:g_old_speed[33]
//Global Variables related to weapon ammo
new g_ammo[33], g_normal_ammo[33], g_fire_ammo[33], g_ice_ammo[33], g_explode_ammo[33]
// Player variables
new g_HasBow[33] // whether player has bow
new g_bow_mode[33], g_dmg_mode[33]
new g_MaxPlayers
// Render effects debug
new g_FrozenRenderingFx[33]
new Float:g_FrozenRenderingColor[33][3]
new g_FrozenRenderingRender[33]
new Float:g_FrozenRenderingAmount[33]
// Message ID's
new g_MsgDamage, g_msgBarTime
// ITEM
new g_itemid
/*********************************** Bools ************************************/
new bool:bow_hit[33] // check if bow hit then allow switching
new bool:draw_wpn[33]
/*********************************** Enums ************************************/
// Weapon animation sequences
enum {
anim_bang,
anim_idle,
anim_shot1,
anim_shot2,
anim_reload,
anim_draw
}
// bow modes
enum
{
NORMAL_MODE = 1,
FIRE_MODE = 4,
ICE_MODE = 3,
EXPLODE_MODE = 2
}
enum
{
dmg_fire = 1
}
/*********************************** Precaching Models/Sounds/Sprites ************************************/
public plugin_precache()
{
// Models
precache_model(P_MODEL)
precache_model(V_MODEL)
precache_model(W_MODEL)
precache_model(ARROW_MODEL)
precache_model(BURN_MODEL)
// Sounds
precache_sound(ARROW_SHOOT)
precache_sound(ARROW_SWITCH)
//precache_sound(GRENADE_DRAW)
precache_sound("weapons/357_cock1.wav")
g_exp_sprid = engfunc(EngFunc_PrecacheModel, "sprites/zerogxplode.spr")
}
/*********************************** Registering Plugin ************************************/
public plugin_init()
{
register_plugin("[ZP][Extra Item] Bow", "1.4", "LearninG")
//Events
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
//Cvars
BOW_ONE_ROUND = register_cvar("zp_bow_one_round" , "1")
BASE_SPEED = register_cvar("zp_arrow_base_speed" , "650")
BOUNS_SPEED = register_cvar("zp_arrow_bouns_speed" , "950")
BURN_LIFE = register_cvar("zp_burn_life" , "5.0")
BURN_PERIOD = register_cvar("zp_burn_period" , "1.0")
BURN_DAMAGE = register_cvar("zp_burn_damage" , "100")
NORMAL_DAMAGE = register_cvar("zp_normal_damage" , "100")
SPEED_LOW_ICE = register_cvar("zp_speed_low_ice" , "0.3")
SLOW_ICE_TIME = register_cvar("zp_slow_ice_time" , "3.0")
EXPLODE_DAMAGE = register_cvar("zp_explode_damage" , "1700")
EXPLODE_HITRADIUS = register_cvar("zp_explode_hitradius" , "400")
NORMAL_AMMO = register_cvar("zp_normal_ammo" , "500")
FIRE_AMMO = register_cvar("zp_fire_ammo" , "10")
ICE_AMMO = register_cvar("zp_ice_ammo" , "10")
EXPLODE_AMMO = register_cvar("zp_explode_ammo" , "3")
NEXT_SHOT_TIME = register_cvar("zp_arrow_next_shot_time" , "0.97")
// Forwards
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_scout", "fw_bow_PrimaryAttack")
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_scout", "fw_bow_SecondaryAttack")
RegisterHam(Ham_Weapon_Reload, "weapon_scout", "fw_bow_Reload")
RegisterHam(Ham_Item_Deploy, "weapon_scout", "fw_bow_Deploy_Post", 1)
register_think(BURN_CLASSNAME, "BurnThink")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_clcmd("drop","dropcmd")
register_touch("bow", "player", "bow_Touched")
// Messages
g_MsgDamage = get_user_msgid("Damage")
g_msgBarTime = get_user_msgid("BarTime")
g_itemid = zp_register_extra_item("Magical Bow",50, ZP_TEAM_HUMAN)
g_MaxPlayers = get_maxplayers()
}
/*********************************** Public Functions ************************************/
public plugin_cfg()
{
static cfgdir[64]
get_localinfo("amxx_configsdir", cfgdir, 63)
// Execute custom config file
server_cmd("exec %s/bowsettings.cfg", cfgdir)
server_exec()
}
public zp_user_infected_pre(id, infector, nemesis)
{
if (g_HasBow[id])
{
dropcmd(id)
}
return PLUGIN_CONTINUE
}
public bow_Touched( ent, id ){
if(1<=id<=32)
{
if(allowed_toucher(id))
{
// Pick up weapon
give_bow(id)
g_normal_ammo[id] = pev(ent, NormalAmmo)
g_ice_ammo[id] = pev(ent, IceAmmo)
g_explode_ammo[id] = pev(ent, ExplodeAmmo)
g_fire_ammo[id] = pev(ent, FireAmmo)
remove_entity(ent) // remove entity after giving player the bow and setting up ammos
update_ammo(id)
}
}
}
public zp_extra_item_selected(player, itemid)
{
if (g_HasBow[player])
{
client_print_color(player,print_chat, "^4[ZP]^1 You already have a Bow!")
return ZP_PLUGIN_HANDLED
}
else if (itemid == g_itemid && is_user_alive(player))
{
client_print_color(player, print_chat, "^4[ZP]^1 You bought Bow! [Attack 2 for change mods]")
give_bow(player)
}
return PLUGIN_CONTINUE
}
public Event_NewRound()
{
//check if any changes happened on cfg file.
plugin_cfg()
static players[32], num, id
get_players(players, num)
for (new i = 0; i < num; i++)
{
id = players[i]
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25)
g_Burn[id]=0.0
g_slowed[id] = false
remove_bow()
if (get_pcvar_num(BOW_ONE_ROUND)==1)
{
if (g_HasBow[id] && user_has_weapon(id, CSW_SCOUT))
{
fm_strip_user_gun(id, CSW_SCOUT)
g_HasBow[id] = false
}
}
}
}
public dropcmd(id)
{
if(g_HasBow[id] && get_user_weapon(id) == CSW_SCOUT)
{
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)
origin[0] += Aim[0]
origin[1] += Aim[1]
new bow = create_entity("info_target")
entity_set_string(bow,EV_SZ_classname,"bow")
entity_set_model(bow,W_MODEL)
entity_set_size(bow,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(bow,EV_INT_solid,1)
set_pev( bow, NormalAmmo, g_normal_ammo[id])
set_pev( bow, IceAmmo, g_ice_ammo[id])
set_pev( bow, ExplodeAmmo, g_explode_ammo[id])
set_pev( bow, FireAmmo, g_fire_ammo[id])
entity_set_int(bow,EV_INT_movetype,6)
entity_set_vector(bow,EV_VEC_origin,origin)
g_HasBow[id] = false
remowegun(id)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
// remove gun and save all guns
public remowegun(id) {
new wpnList[32]
new number
get_user_weapons(id,wpnList,number)
for (new i = 0;i < number ;i++) {
if (wpnList[i] == CSW_SCOUT) {
fm_strip_user_gun(id, wpnList[i])
}
}
}
// Client connected
public client_putinserver(id)
{
// Reset all
g_HasBow[id] = false
g_finish_time[id] = 0.0
}
// Current weapon player is holding
public Event_CurrentWeapon(id)
{
if (is_user_bot(id))
return
if (!g_HasBow[id])
return
if(!is_user_connected(id))
return
// Read weapon ID
new weaponID = read_data(2)
if (weaponID == CSW_SCOUT)
{
if (g_HasBow[id])
{
if(!draw_wpn[id])
{
//playanim(id, anim_draw)
UTIL_PlayWeaponAnimation(id, anim_draw)
update_ammo(id)
//emit_sound(id, CHAN_WEAPON, GRENADE_DRAW, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
// View model
entity_set_string(id, EV_SZ_viewmodel, V_MODEL)
// Player model
entity_set_string(id, EV_SZ_weaponmodel, P_MODEL)
draw_wpn[id] = true
}
}
else
{
// View model
entity_set_string(id, EV_SZ_viewmodel, "models/v_scout.mdl")
// Player model
entity_set_string(id, EV_SZ_weaponmodel, "models/p_scout.mdl")
}
}
else
{
draw_wpn[id] = false
}
}
public remove_bow() {
new nextitem = find_ent_by_class(-1, "bow")
while ((nextitem = find_ent_by_class(-1, "bow")) != 0) {
remove_entity(nextitem)
}
return PLUGIN_CONTINUE
}
// Player killed
public fw_PlayerKilled(victim, attacker, shouldgib)
{
if (g_HasBow[victim])
{
dropcmd(victim)
// Reset all
set_user_rendering(victim, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25)
// Remove screen's bar
message_begin(MSG_ONE, g_msgBarTime, _, victim)
write_byte(0) // time
write_byte(0) // unknown
message_end()
remowegun(victim)
}
}
public give_bow(id)
{
give_weapon(id)
g_bow_mode[id] = NORMAL_MODE
g_normal_ammo[id] = get_pcvar_num(NORMAL_AMMO)
g_fire_ammo[id] = get_pcvar_num(FIRE_AMMO)
g_ice_ammo[id] = get_pcvar_num(ICE_AMMO)
g_explode_ammo[id] = get_pcvar_num(EXPLODE_AMMO)
}
//give weapon
public give_weapon(id){
g_HasBow[id] = true
give_item(id, "weapon_scout")
engclient_cmd(id, "weapon_scout")
engclient_cmd(id, "weapon_scout")
entity_set_string(id, EV_SZ_viewmodel, V_MODEL)
entity_set_string(id, EV_SZ_weaponmodel, P_MODEL)
update_ammo(id)
}
public fw_bow_PrimaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if (g_HasBow[Player])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fw_bow_SecondaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if (g_HasBow[Player])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fw_bow_Reload(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if (g_HasBow[Player])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fw_bow_Deploy_Post(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
update_ammo(Player)
}
// Command start
public fw_CmdStart(id, UC_Handle, Seed)
{
if(!g_HasBow[id] || !is_user_alive(id))
return FMRES_IGNORED
static CurButton, OldButton
CurButton = get_uc(UC_Handle, UC_Buttons)
OldButton = (pev(id, pev_oldbuttons) & IN_ATTACK)
if(get_gametime() - g_finish_time[id] > get_pcvar_float(NEXT_SHOT_TIME))
{
// Attack1 button pressed
if(CurButton & IN_ATTACK && !OldButton)
{
if(get_user_weapon(id) != CSW_SCOUT)
return FMRES_IGNORED
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id]))
return FMRES_IGNORED
g_start_time[id] = get_gametime()
//A bar appears in his screen
message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id)
write_byte(2) // time
write_byte(0) // unknown
message_end()
g_pressed[id] = true
}
if(CurButton & IN_ATTACK && OldButton)
{
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id]))
return FMRES_IGNORED
if(!g_pressed[id])
return FMRES_IGNORED
if(get_user_weapon(id) != CSW_SCOUT)
{
g_finish_time[id] = get_gametime()
FireArrow(id)
// Remove screen's bar
message_begin(MSG_ONE, g_msgBarTime, _, id)
write_byte(0) // time
write_byte(0) // unknown
message_end()
g_pressed[id] = false
}
}
if(!(CurButton & IN_ATTACK) && OldButton)
{
if(get_user_weapon(id) != CSW_SCOUT)
return FMRES_IGNORED
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0) || (bow_hit[id]))
return FMRES_IGNORED
if(!g_pressed[id])
return FMRES_IGNORED
g_finish_time[id] = get_gametime()
FireArrow(id)
// Remove screen's bar
message_begin(MSG_ONE, g_msgBarTime, _, id)
write_byte(0) // time
write_byte(0) // unknown
message_end()
g_pressed[id] = false
}
}
if((CurButton & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2))
{
if(get_user_weapon(id) != CSW_SCOUT)
return FMRES_IGNORED
if(bow_hit[id])
return FMRES_IGNORED
if(!g_pressed[id])
{
if(!is_user_alive(id))
return FMRES_IGNORED
switch(g_bow_mode[id])
{
case 1:
{
g_bow_mode[id]= 4
emit_sound(id, CHAN_WEAPON,ARROW_SWITCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
client_print(id,print_center,"Fire Mode")
update_ammo(id)
}
case 2:
{
g_bow_mode[id]= 1
emit_sound(id, CHAN_WEAPON,ARROW_SWITCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
client_print(id,print_center,"Normal Mode")
update_ammo(id)
}
case 3:
{
g_bow_mode[id]= 2
emit_sound(id, CHAN_WEAPON,ARROW_SWITCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
client_print(id,print_center,"Explode Mode")
update_ammo(id)
}
case 4:
{
g_bow_mode[id]= 3
emit_sound(id, CHAN_WEAPON,ARROW_SWITCH, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
client_print(id,print_center,"Ice Mode")
update_ammo(id)
}
}
}
} return FMRES_IGNORED
}
//block anim standard wpn
public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
if (!is_user_alive(id))
return FMRES_IGNORED
// Block default sounds
if (get_user_weapon(id) == CSW_SCOUT && g_HasBow[id])
{
set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001 );
}
return FMRES_HANDLED
}
// Fire gremade
public FireArrow(id)
{
// Set animation
UTIL_PlayWeaponAnimation(id, anim_shot1)
bow_hit[id] = true
// Get origin. angle and velocity
new velocity[33]
new Float:fAngle[3], Float:fVelocity[3]
pev(id, pev_v_angle, fAngle)
// Create ent
new arrow = create_entity("info_target")
// Not grenade
if (!arrow) return PLUGIN_HANDLED
// Classname
entity_set_string(arrow, EV_SZ_classname, "bow_arrow")
// Model
entity_set_model(arrow, ARROW_MODEL)
if(g_bow_mode[id] == NORMAL_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 70)
g_normal_ammo[id]--
}
else if(g_bow_mode[id] == FIRE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 70)
g_fire_ammo[id]--
}
else if(g_bow_mode[id] == ICE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 70)
g_ice_ammo[id]--
}
else if(g_bow_mode[id] == EXPLODE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 150, 105, 0, kRenderNormal, 70)
g_explode_ammo[id]--
}
update_ammo(id)
new Float:vOrigin[3],Float:vUp[3]
pev(id, pev_origin, vOrigin)
global_get(glb_v_up, vUp)
new up = 17
vOrigin[0] = vOrigin[0] + vUp[0] * up
vOrigin[1] = vOrigin[1] + vUp[1] * up
vOrigin[2] = vOrigin[2] + vUp[2] * up
// Origin
entity_set_origin(arrow, vOrigin)
// Angles
entity_set_vector(arrow, EV_VEC_angles, fAngle)
// Size
new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(arrow, EV_VEC_mins, MinBox)
entity_set_vector(arrow, EV_VEC_maxs, MaxBox)
// Interaction
entity_set_int(arrow, EV_INT_solid, SOLID_SLIDEBOX)
// Movetype
entity_set_int(arrow, EV_INT_movetype, MOVETYPE_TOSS)
// Owner
entity_set_edict(arrow, EV_ENT_owner, id)
// Velocity
new Float: holdtime[33]
new Float: mnoji[33]
holdtime[id] = g_finish_time[id] - g_start_time[id]
if(holdtime[id] < 1.0) holdtime[id] = 1.0
if(holdtime[id] > 3.0) holdtime[id] = 3.0
mnoji[id] = get_pcvar_num(BASE_SPEED) + holdtime[id] * get_pcvar_num(BOUNS_SPEED)
velocity[id] = floatround(mnoji[id],floatround_round)
VelocityByAim(id, velocity[id], fVelocity)
entity_set_vector(arrow, EV_VEC_velocity, fVelocity)
// Launch sound
emit_sound(id, CHAN_WEAPON, ARROW_SHOOT, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_CONTINUE
}
// We hit something!!!
public pfn_touch(ptr, ptd)
{
// If ent is valid
if (pev_valid(ptr))
{
// Get classnames
static classname[32], classnameptd[32]
pev(ptr, pev_classname, classname, 31)
// Our ent
if(equal(classname, "bow_arrow"))
{
// Get it's origin
new Float:Origin[3]
pev(ptr, pev_origin, Origin)
new owner = pev(ptr, pev_owner)
bow_hit[owner] = false
if(g_bow_mode[owner] == EXPLODE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner))
{
// Explosion
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(g_exp_sprid)
write_byte(40)
write_byte(30)
write_byte(0)
message_end()
check_radius_damage(ptr, owner)
}
if(is_user_alive(ptd))
{
if(cs_get_user_team(ptd) != cs_get_user_team(owner))
{
g_old_speed[ptd] = get_user_maxspeed(ptd)
if(g_bow_mode[owner] == NORMAL_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner))
{
ExecuteHamB(Ham_TakeDamage, ptd, ptr, owner, get_pcvar_float(NORMAL_DAMAGE), DMG_BULLET)
}
else if(g_bow_mode[owner] == FIRE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner))
{
if (!g_Burn[ptd])
{
g_dmg_mode[ptd] = dmg_fire
CreateBurn(ptd, owner)
}
}
else if(g_bow_mode[owner] == ICE_MODE && !zp_get_user_zombie(owner) && !zp_get_user_nemesis(owner))
{
if (!g_slowed[ptd])
{
g_FrozenRenderingFx[ptd] = pev(ptd, pev_renderfx)
pev(ptd, pev_rendercolor, g_FrozenRenderingColor[ptd])
g_FrozenRenderingRender[ptd] = pev(ptd, pev_rendermode)
pev(ptd, pev_renderamt, g_FrozenRenderingAmount[ptd])
set_user_rendering(ptd, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
set_user_maxspeed(ptd, get_user_maxspeed(ptd) * get_pcvar_float(SPEED_LOW_ICE))
g_slowed[ptd] = true
set_task(get_pcvar_float(SLOW_ICE_TIME), "make_speed", ptd, _, _, "a", 1)
message_begin(MSG_ONE_UNRELIABLE, g_MsgDamage, _, ptd)
write_byte(0) // damage save
write_byte(0) // damage take
write_long(DMG_DROWN) // damage type - DMG_FREEZE
write_coord(0) // x
write_coord(0) // y
write_coord(0) // z
message_end()
}
}
}
}
// We hit breakable
if(pev_valid(ptd))
{
pev(ptd, pev_classname, classnameptd, 31)
if (equali(classnameptd, "func_breakable"))
{
// Destroy it
//force_use(ptr,ptd)
}
}
set_pev(ptr, pev_flags, FL_KILLME)
}
}
}
public CreateBurn(id, attacker)
{
if(g_Burn[id])
return
if(g_dmg_mode[id] == dmg_fire)
{
new ent=CreateAnimationSprite(attacker, BURN_CLASSNAME, BURN_MODEL, 1.0, 10.0)
set_pev(ent, pev_solid, SOLID_NOT)
set_pev(ent, pev_movetype, MOVETYPE_FOLLOW)
set_pev(ent, pev_aiment, id)
set_pev(ent, pev_fuser2, get_gametime()+get_pcvar_float(BURN_LIFE))
g_Burn[id]=get_gametime()+get_pcvar_float(BURN_PERIOD)
}
}
public BurnThink(ent)
{
if(!pev_valid(ent))
return
static Float:life, aim_ent
pev(ent,pev_fuser2, life)
aim_ent=pev(ent, pev_aiment)
if(g_dmg_mode[aim_ent] == dmg_fire)
{
if(get_gametime()>life||!is_user_alive(aim_ent) ||!zp_get_user_zombie(aim_ent))
{
g_Burn[aim_ent]=0.0
fm_remove_entity(ent)
return
}
if(get_gametime()>g_Burn[aim_ent])
{
ExecuteHamB(Ham_TakeDamage, aim_ent , ent ,pev(ent, pev_owner), get_pcvar_float(BURN_DAMAGE), DMG_BURN)
g_Burn[aim_ent]=get_gametime()+get_pcvar_float(BURN_PERIOD)
}
}
}
public make_speed(id)
{
if(is_user_alive(id) && g_slowed[id])
{
g_slowed[id] = false
set_user_maxspeed(id, g_old_speed[id])
fm_set_rendering_float(id, g_FrozenRenderingFx[id], g_FrozenRenderingColor[id], g_FrozenRenderingRender[id], g_FrozenRenderingAmount[id])
}
}
public check_radius_damage(ent, attacker)
{
for(new i = 0; i < g_MaxPlayers; i++)
{
if(!is_user_alive(i))
continue
if(cs_get_user_team(attacker) == cs_get_user_team(i))
continue
if(entity_range(ent, i) > get_pcvar_num(EXPLODE_HITRADIUS))
continue
Do_TakeDamage(ent, i, attacker, can_see_fm(ent, i))
}
}
public Do_TakeDamage(Ent, Victim, Attacker, can_see)
{
static Float:Damage, Float:CurrentDis
CurrentDis = entity_range(Ent, Victim)
Damage = get_pcvar_num(EXPLODE_DAMAGE) - ((CurrentDis / get_pcvar_num(EXPLODE_HITRADIUS)) * get_pcvar_num(EXPLODE_DAMAGE))
if(Damage > 0)
{
static WeaponEnt
WeaponEnt = fm_get_user_weapon_entity(Attacker, CSW_HEGRENADE)
if(!pev_valid(WeaponEnt))
WeaponEnt = 0
if(!can_see)
Damage /= 2
ExecuteHamB(Ham_TakeDamage, Victim, WeaponEnt, Attacker, Damage, DMG_BULLET)
}
}
public update_ammo(id)
{
if(!is_user_alive(id))
return
if(!g_HasBow[id])
return
if(g_bow_mode[id] == NORMAL_MODE)
{
g_ammo[id] = g_normal_ammo[id]
}
else if(g_bow_mode[id] == FIRE_MODE)
{
g_ammo[id] = g_fire_ammo[id]
}
else if(g_bow_mode[id] == ICE_MODE)
{
g_ammo[id] = g_ice_ammo[id]
}
else if(g_bow_mode[id] == EXPLODE_MODE)
{
g_ammo[id] = g_explode_ammo[id]
}
static weapon_ent; weapon_ent = fm_find_ent_by_owner(-1, "weapon_scout", id)
if(pev_valid(weapon_ent)) cs_set_weapon_ammo(weapon_ent, 1)
cs_set_user_bpammo(id, CSW_SCOUT, g_ammo[id])
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
write_byte(1)
write_byte(CSW_SCOUT)
write_byte(-1)
message_end()
set_task(0.1, "hud_debug", id)
}
public hud_debug(id)
{
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
write_byte(1)
write_byte(CSW_SCOUT)
write_byte(-1)
message_end()
}
public can_see_fm(entindex1, entindex2)
{
if (!entindex1 || !entindex2)
return false
if (pev_valid(entindex1) && pev_valid(entindex1))
{
new flags = pev(entindex1, pev_flags)
if (flags & EF_NODRAW || flags & FL_NOTARGET)
{
return 0
}
new Float:lookerOrig[3]
new Float:targetBaseOrig[3]
new Float:targetOrig[3]
new Float:temp[3]
pev(entindex1, pev_origin, lookerOrig)
pev(entindex1, pev_view_ofs, temp)
lookerOrig[0] += temp[0]
lookerOrig[1] += temp[1]
lookerOrig[2] += temp[2]
pev(entindex2, pev_origin, targetBaseOrig)
pev(entindex2, pev_view_ofs, temp)
targetOrig[0] = targetBaseOrig [0] + temp[0]
targetOrig[1] = targetBaseOrig [1] + temp[1]
targetOrig[2] = targetBaseOrig [2] + temp[2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the had of seen player
if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
{
return 0
}
else
{
new Float:flFraction
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return 1
}
else
{
targetOrig[0] = targetBaseOrig [0]
targetOrig[1] = targetBaseOrig [1]
targetOrig[2] = targetBaseOrig [2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the body of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return 1
}
else
{
targetOrig[0] = targetBaseOrig [0]
targetOrig[1] = targetBaseOrig [1]
targetOrig[2] = targetBaseOrig [2] - 17.0
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the legs of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return 1
}
}
}
}
}
return 0
}
/*********************************** Stocks ************************************/
// Allowed toucher
stock allowed_toucher(player)
{
if (g_HasBow[player] || zp_get_user_zombie(player) || zp_get_user_nemesis(player) || zp_get_user_survivor(player))
return false
return true
}
stock CreateAnimationSprite(owner, const classname[], const model[], Float:scale, Float:framerate)
{
new ent=fm_create_entity("env_sprite")
set_pev(ent, pev_framerate, framerate)
set_pev(ent, pev_model, model)
dllfunc(DLLFunc_Spawn, ent)
set_pev(ent, pev_classname, classname)
set_pev(ent, pev_owner, owner)
fm_entity_set_model(ent, model)
fm_set_rendering(ent, kRenderFxNoDissipation, 255, 255, 255, kRenderGlow, 255)
set_pev(ent, pev_framerate, framerate)
set_pev(ent, pev_scale, scale)
return ent
}
stock fm_set_rendering_float(entity, fx = kRenderFxNone, Float:color[3], render = kRenderNormal, Float:amount = 16.0)
{
set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, amount)
}
stock drop(id)
{
new weapons[32], num
get_user_weapons(id, weapons, num)
for (new i = 0; i < num; i++) {
if (PRIMARY_WEAPONS_BIT_SUM & (1<<weapons[i]))
{
static wname[32]
get_weaponname(weapons[i], wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}
//play anim
stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence);
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player);
write_byte(Sequence);
write_byte(pev(Player, pev_body));
message_end();
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
BTW there was the indentation loosing problem but it doesn't harm ur plugin anyways i have fixed this and there was a problem