Test this, and tell me how work now. To see what I add search
PHP Code:
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <zombieplague>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define Red print_team_red
#define Blue print_team_blue
#define Grey print_team_grey
#define DontChange print_team_default
#endif
// Weapon/Arrow models
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"
#define BURN_CLASSNAME "flame"
#define BURN_MODEL "sprites/bow/flame_burn01.spr"
#define POISON_MODEL "sprites/bow/poison.spr"
#define m_rpgPlayerItems_Slot0 367
#define m_iId 43
// Settings
#define SWITCH_TIME 0.5
#define BASE_SPEED 400
#define BONUS_SPEED 500
#define BURN_LIFE 10.0
#define BURN_PERIOD 2.0
#define BURN_DAMAGE 100.0
#define NORMAL_DMG 250.0
#define SPEED_LOW_ICE 0.5
#define SLOW_ICE_TIME 5.0
#define EXPLODE_DAMAGE 1500
#define EXPLODE_HITRADIUS 600
// Base number of arrows
#define NORMAL_AMMO 20
#define FIRE_AMMO 15
#define ICE_AMMO 10
#define EXPLODE_AMMO 3
//Number of extra arrows
#define NORMAL_AMMO_BUY 5
#define FIRE_AMMO_BUY 4
#define ICE_AMMO_BUY 3
#define EXPLODE_AMMO_BUY 1
// Cost of extra arrows
#define AMMO_COST 10
#define NEXT_SHOT_TIME 0.97
// Fire sound
new const ARROW_SHOOT[] =
{
"crossbow_shoot1.wav"
}
new g_exp_sprid
new Float:g_start_time[33], Float:g_finish_time[33]
new Float:g_Burn[33], Float:g_Poisoned[33]
new g_slowed[33], g_pressed[33], Float:g_old_speed[33]
// 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 bool:draw_wpn[33]
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
enum {
anim_idle,
anim_shot1,
anim_shot2,
anim_reload,
anim_draw
}
enum
{
NORMAL_MODE = 1,
FIRE_MODE = 4,
ICE_MODE = 3,
EXPLODE_MODE = 2
}
enum
{
dmg_fire = 1,
dmg_poison = 2
}
// Plugin precache
public plugin_precache()
{
// Models
precache_model(P_MODEL)
precache_model(V_MODEL)
precache_model(W_MODEL)
precache_model(ARROW_MODEL)
precache_model(BURN_MODEL)
precache_model(POISON_MODEL)
// Sounds
precache_sound(ARROW_SHOOT)
//precache_sound(GRENADE_DRAW)
precache_sound("weapons/357_cock1.wav")
g_exp_sprid = engfunc(EngFunc_PrecacheModel, "sprites/zerogxplode.spr")
}
// ITEM
new g_itemid
//Krtola Stuff
const Float: g_fCooldown = 3.0
new Float: g_fLastDamage[33]
#define CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)
#define WEAPON_KEY 5444552332
#define WEAPON_OLD "weapon_scout"
#define m_rgpPlayerItems_CWeaponBox 34
#define WEAPON_BODY 0
new g_AllocString_E
public plugin_init()
{
// Register plugin
register_plugin("PLUGIN", "VERSION", "AUTHOR")
// Events
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
// 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_forward(FM_Touch, "fw_touch")
register_clcmd("drop","dropcmd")
// Messages
g_MsgDamage = get_user_msgid("Damage")
g_msgBarTime = get_user_msgid("BarTime")
g_itemid = zp_register_extra_item("Magical Bow",6, ZP_TEAM_HUMAN)
g_MaxPlayers = get_maxplayers()
//Krtola Stuff
RegisterHam(Ham_Item_AddToPlayer, WEAPON_OLD, "fw_Item_AddToPlayer_Post", 1)
register_forward(FM_SetModel, "fw_SetModel")
g_AllocString_E = engfunc(EngFunc_AllocString, WEAPON_OLD)
}
//Krtola Stuff
public fw_Item_AddToPlayer_Post(iItem, iPlayer)
{
switch(pev(iItem, pev_impulse))
{
case WEAPON_KEY: g_HasBow[iPlayer] = 1
case 0: g_HasBow[iPlayer] = 0
}
}
public fw_SetModel(iEnt)
{
static i, szClassname[32], iItem;
pev(iEnt, pev_classname, szClassname, 31);
if(!equal(szClassname, "weaponbox")) return FMRES_IGNORED;
for(i = 0; i < 6; i++) {
iItem = get_pdata_cbase(iEnt, m_rgpPlayerItems_CWeaponBox + i, 4);
if(iItem > 0 && CustomItem(iItem)) {
set_pev(iEnt, pev_body, WEAPON_BODY)
g_HasBow[i] = 0
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
public zp_user_infected_post(id)
{
if(g_HasBow[id])
{
g_HasBow[id] = 0
}
}
//End of Krtola Stuff
public zp_extra_item_selected(player, itemid)
{
if (itemid == g_itemid || is_user_alive(player))
{
give_bow(player)
}
return PLUGIN_CONTINUE
}
public Event_NewRound()
{
for (new i = 0; i < get_maxplayers(); i++)
{
set_user_rendering(i, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25)
g_Poisoned[i]=0.0
g_Burn[i]=0.0
g_slowed[i] = 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)
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])
}
}
}
//play anim
public playanim(player,anim)
{
set_pev(player, pev_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
write_byte(anim)
write_byte(pev(player, pev_body))
message_end()
}
// Client connected
public client_connect(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)
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])
{
// Reset all
g_HasBow[victim] = false
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] = NORMAL_AMMO
g_fire_ammo[id] = FIRE_AMMO
g_ice_ammo[id] = ICE_AMMO
g_explode_ammo[id] = EXPLODE_AMMO
}
//give weapon
public give_weapon(id){
g_HasBow[id] = true
//DropWeaponSlot(id, 1)
give_item(id, "weapon_scout")
update_ammo(id)
//Krtola Stuff
static iEnt; iEnt = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E);
if(iEnt <= 0) return 0;
set_pev(iEnt, pev_spawnflags, SF_NORESPAWN);
set_pev(iEnt, pev_impulse, WEAPON_KEY);
ExecuteHam(Ham_Spawn, iEnt)
DropWeaponSlot(id, 1)
if(!ExecuteHamB(Ham_AddPlayerItem, id, iEnt))
{
engfunc(EngFunc_RemoveEntity, iEnt);
return 0
}
ExecuteHamB(Ham_Item_AttachToPlayer, iEnt, id)
return 1
}
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] > 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))
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(3) // 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))
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))
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(g_fLastDamage[id] < get_gametime() - g_fCooldown)
{
if(!g_pressed[id])
{
if(is_user_alive(id))
switch(g_bow_mode[id])
{
case 1:
{
g_bow_mode[id]= 4
client_print(id,print_center,"Fire Mode")
update_ammo(id)
}
case 2:
{
g_bow_mode[id]= 1
client_print(id,print_center,"Normal Mode")
update_ammo(id)
}
case 3:
{
g_bow_mode[id]= 2
client_print(id,print_center,"Explode Mode")
update_ammo(id)
}
case 4:
{
g_bow_mode[id]= 3
client_print(id,print_center,"Ice Mode")
update_ammo(id)
}
}
g_fLastDamage[id] = get_gametime()
}
}
}
return FMRES_IGNORED
}
//block anim standart 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
playanim(id, anim_shot1)
// 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, 50)
g_normal_ammo[id]--
}
else if(g_bow_mode[id] == FIRE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 50)
g_fire_ammo[id]--
}
else if(g_bow_mode[id] == ICE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 50)
g_ice_ammo[id]--
}
else if(g_bow_mode[id] == EXPLODE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 150, 105, 0, kRenderNormal, 50)
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] = BASE_SPEED + holdtime[id] * BONUS_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(arrow, 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)
if(g_bow_mode[owner] == EXPLODE_MODE)
{
// 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)
{
ExecuteHamB(Ham_TakeDamage, ptd, ptr, owner, NORMAL_DMG, DMG_BULLET)
}
else if(g_bow_mode[owner] == FIRE_MODE)
{
if (!g_slowed[ptd] || !g_Burn[ptd] || g_slowed[ptd] || g_Burn[ptd])
{
g_dmg_mode[ptd] = dmg_fire
CreateBurn(ptd, owner)
}
}
else if(g_bow_mode[owner] == ICE_MODE)
{
if (!g_slowed[ptd] || !g_Burn[ptd] || g_slowed[ptd] || g_Burn[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) * SPEED_LOW_ICE)
g_slowed[ptd] = true
set_task(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)
}
}
if(is_valid_ent(ptr))
{
new classname[32]
entity_get_string(ptr,EV_SZ_classname,classname,31)
if(equal(classname, "bow"))
{
if(is_valid_ent(ptd))
{
new id = ptd
if(id > 0 && id < 34)
{
if(allowed_toucher(id))
{
// Pick up weapon
//give_weapon(id)
remove_entity(ptr)
}
}
}
}
}
}
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()+BURN_LIFE)
g_Burn[id]=get_gametime()+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), BURN_DAMAGE, DMG_BURN)
g_Burn[aim_ent]=get_gametime()+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) > 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 = EXPLODE_DAMAGE - ((CurrentDis / EXPLODE_HITRADIUS) * 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_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()
}
// Allowed toucher
stock allowed_toucher(player)
{
if (g_HasBow[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
}
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
}
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 DropWeaponSlot( iPlayer, iSlot )
{
new iWeaponEntity = GetWeaponFromSlot( iPlayer, iSlot );
if( iWeaponEntity > 0 )
{
new iWeaponID = get_pdata_cbase( iWeaponEntity, m_iId, 4 );
new szWeaponName[ 32 ];
get_weaponname( iWeaponID, szWeaponName, charsmax( szWeaponName ) );
engclient_cmd( iPlayer, "drop", szWeaponName );
}
}
stock GetWeaponFromSlot( iPlayer, iSlot )
{
return ( 1 <= iSlot <= 5 ) ? get_pdata_cbase( iPlayer, m_rpgPlayerItems_Slot0 + iSlot, 5 ) : -1;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ fbidis\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ ltrpar\\ lang1065\\ f0\\ fs16 \n\\ par }
*/