Code: Select all
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <xs>
#include <zombie_escape>
#define PLUGIN "[CSO] Primary Weapon : Thanatos-3"
#define VERSION "1.2 beta" // Full version; Buy its
#define AUTHOR "Asep || Facebook.com/asepdwa10 & Dev!l"
#define ENG_NULLENT -1
#define EV_INT_WEAPONKEY EV_INT_impulse
#define THANATOS3_WEAPONKEY 29221
#define MAX_PLAYERS 32
#define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
#define WEAP_LINUX_XTRA_OFF 4
#define m_fKnown 44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle 48
#define m_iClip 51
#define m_fInReload 54
#define PLAYER_LINUX_XTRA_OFF 5
#define m_flNextAttack 83
// ======================================================= //
// ALL CONFIGURATION AND TIME DELAY ANIM ViewModels RELOAD //
// ======================================================= //
#define THANATOS3_RELOAD_TIME 3.5
#define THANATOS3_IDLE_NORMAL 0
#define THANATOS3_IDLE_WINGS_1 1
#define THANATOS3_IDLE_WINGS_2 2
#define THANATOS3_IDLE_WINGS_3 3
#define THANATOS3_SHOOT_NORMAL 4
#define THANATOS3_SHOOT_WINGS_1 5
#define THANATOS3_SHOOT_WINGS_2 6
#define THANATOS3_SHOOT_WINGS_3 7
#define THANATOS3_FLYING_WINGS_1 8
#define THANATOS3_FLYING_WINGS_2 9
#define THANATOS3_FLYING_WINGS_3 10
#define THANATOS3_RELOAD_NORMAL 11
#define THANATOS3_RELOAD_WINGS_1 12
#define THANATOS3_RELOAD_WINGS_2 13
#define THANATOS3_RELOAD_WINGS_3 14
#define THANATOS3_SPREAD_WINGS_1 15
#define THANATOS3_SPREAD_WINGS_2 16
#define THANATOS3_SPREAD_WINGS_3 17
#define THANATOS3_DRAW_NORMAL 18
#define THANATOS3_DRAW_WINGS_1 19
#define THANATOS3_DRAW_WINGS_2 20
#define THANATOS3_DRAW_WINGS_3 21
// ========================================================== //
// CONFIGURATION LIMITS AND TIME DELAY ANIM ViewModels RELOAD //
// ========================================================== //
#define weapon_thanatos3 "weapon_mp5navy"
#define CSW_THANATOS3 CSW_MP5NAVY
#define TASK_FLYING 919924
#define write_coord_f(%1) engfunc(EngFunc_WriteCoord,%1)
#define THANATOS3_SCYTHE_CLASSNAME "scythe_thanatos3"
#define THANATOS3_SCYTHE_WIND_CLASSNAME "scythe_thanatos3_wind_attack"
enum
{
MODE_NORMAL = 0,
MODE_WINGS_1,
MODE_WINGS_2,
MODE_WINGS_3
}
const USE_STOPPED = 0
const OFFSET_ACTIVE_ITEM = 373
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4
new const Fire_Sounds[][] =
{
"weapons/cso/thanatos3-1.wav",
"weapons/cso/thanatos3_boltpull.wav",
"weapons/cso/thanatos3_clipout.wav",
"weapons/cso/thanatos3_clipin.wav",
"weapons/cso/thanatos3_draw.wav",
"weapons/cso/thanatos3_draw_w1.wav",
"weapons/cso/thanatos3_fly_shoot.wav",
"weapons/cso/thanatos3_fly_w2.wav",
"weapons/cso/thanatos3_fly_w3.wav",
"weapons/cso/thanatos3_ilde_w1.wav",
"weapons/cso/thanatos3_ilde_w2.wav",
"weapons/cso/thanatos3_ilde_w3.wav",
"weapons/cso/thanatos3_knife_hit.wav",
"weapons/cso/thanatos3_knife_swish.wav",
"weapons/cso/thanatos3_reload_w1.wav",
"weapons/cso/thanatos3_reload_w2.wav",
"weapons/cso/thanatos3_reload_w3.wav",
"weapons/cso/thanatos3_spread_w1.wav"
}
new THANATOS3_V_MODEL[64] = "models/cso/v_thanatos3.mdl"
new THANATOS3_P_MODEL_A[64] = "models/cso/p_thanatos3a.mdl"
new THANATOS3_P_MODEL_B[64] = "models/cso/p_thanatos3b.mdl"
new THANATOS3_P_MODEL_C[64] = "models/cso/p_thanatos3c.mdl"
new THANATOS3_P_MODEL_D[64] = "models/cso/p_thanatos3d.mdl"
new THANATOS3_W_MODEL[64] = "models/cso/w_thanatos3.mdl"
new THANATOS3_W_MODEL_B[64] = "models/cso/w_thanatos3b.mdl"
new THANATOS3_S_MODEL[64] = "models/cso/thanatos3_knife.mdl"
new THANATOS3_S_WIND_MODEL[64] = "models/cso/thanatos3_wind.mdl"
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2], gmsgWeaponList, tn3_attacked[33]
new g_has_thanatos3[33], g_clip_ammo[33], g_thanatos3_TmpClip[33], oldweap[33], sTrail, g_smokepuff_id
new cvar_dmg_thanatos3, cvar_recoil_thanatos3, cvar_clip_thanatos3, cvar_spd_thanatos3, cvar_thanatos3_ammo, g_Ammo_Special[33]
new g_MaxPlayers, g_orig_event_thanatos3, g_IsInPrimaryAttack, g_Mode[33], g_Reload[33], g_register
const PRIMARY_WEAPONS_BIT_SUM =
(1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_THANATOS3)|(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)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
register_event("CurWeapon","CurrentWeapon","be","1=1")
RegisterHam(Ham_Item_AddToPlayer, weapon_thanatos3, "fw_thanatos3_AddToPlayer")
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_thanatos3, "fw_thanatos3_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_thanatos3, "fw_thanatos3_PrimaryAttack_Post", 1)
RegisterHam(Ham_Weapon_WeaponIdle, weapon_thanatos3, "fw_thanatos3_idle_anim", 1)
RegisterHam(Ham_Item_PostFrame, weapon_thanatos3, "thanatos3_ItemPostFrame")
RegisterHam(Ham_Weapon_Reload, weapon_thanatos3, "thanatos3_Reload")
RegisterHam(Ham_Weapon_Reload, weapon_thanatos3, "thanatos3_Reload_Post", 1)
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
register_forward(FM_SetModel, "fw_SetModel")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
register_forward(FM_CmdStart, "fw_CmdStart")
register_think(THANATOS3_SCYTHE_WIND_CLASSNAME, "fw_Scythe_Wind_Think")
register_think(THANATOS3_SCYTHE_CLASSNAME, "fw_Think_Scythe")
register_touch(THANATOS3_SCYTHE_CLASSNAME, "*", "fw_Touch_Scythe")
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
cvar_clip_thanatos3 = register_cvar("thanatos3_clip", "60")
cvar_spd_thanatos3 = register_cvar("thanatos3_speed", "1.04")
cvar_thanatos3_ammo = register_cvar("thanatos3_ammo", "240")
cvar_dmg_thanatos3 = register_cvar("thanatos3_damage", "1.6")
cvar_recoil_thanatos3 = register_cvar("thanatos3_recoil", "0.50")
g_MaxPlayers = get_maxplayers()
gmsgWeaponList = get_user_msgid("WeaponList")
}
public plugin_precache()
{
precache_model(THANATOS3_V_MODEL)
precache_model(THANATOS3_P_MODEL_A)
precache_model(THANATOS3_P_MODEL_B)
precache_model(THANATOS3_P_MODEL_C)
precache_model(THANATOS3_P_MODEL_D)
precache_model(THANATOS3_W_MODEL)
precache_model(THANATOS3_W_MODEL_B)
precache_model(THANATOS3_S_MODEL)
precache_model(THANATOS3_S_WIND_MODEL)
g_smokepuff_id = precache_model("sprites/wall_puff1.spr")
sTrail = precache_model("sprites/laserbeam.spr")
for(new i = 0; i < sizeof Fire_Sounds; i++)
precache_sound(Fire_Sounds[i])
m_iBlood[0] = precache_model("sprites/blood.spr")
m_iBlood[1] = precache_model("sprites/bloodspray.spr")
register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
}
public weapon_hook(id)
{
engclient_cmd(id, "weapon_mp5navy")
return PLUGIN_HANDLED
}
public plugin_natives(){
register_native("give_t3", "thanatos3_give");
}
public client_putinserver(id)
{
if(is_user_bot(id) && !g_register)
{
g_register = 1
set_task(0.1, "ham_register", id)
}
}
public ham_register(id)
{
RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage")
RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
}
public thanatos3_give(id)
{
give_thanatos3(id)
return PLUGIN_CONTINUE
}
public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_alive(iAttacker))
return
new g_currentweapon = get_user_weapon(iAttacker)
if(g_currentweapon != CSW_THANATOS3) return
if(!g_has_thanatos3[iAttacker]) return
static Float:flEnd[3]
get_tr2(ptr, TR_vecEndPos, flEnd)
if(!is_user_alive(iEnt))
{
create_fake_smokes(flEnd)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_short(iAttacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id))
return FMRES_IGNORED;
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return FMRES_IGNORED;
if(!g_clip_ammo[id] || g_Reload[id])
return FMRES_IGNORED;
static PressedButton
PressedButton = get_uc(uc_handle, UC_Buttons)
if(PressedButton & IN_ATTACK2)
{
if(get_pdata_float(id, 83, 5) > 0.0)
return FMRES_IGNORED
PressedButton &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, PressedButton)
if(g_Mode[id] == MODE_WINGS_1) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_A)
else if(g_Mode[id] == MODE_WINGS_2) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_A)
else if(g_Mode[id] == MODE_WINGS_3) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_A)
static Float:Origin[3]
if(g_Mode[id] == MODE_WINGS_1)
{
UTIL_PlayWeaponAnimation(id, THANATOS3_FLYING_WINGS_1)
emit_sound(id, CHAN_WEAPON, Fire_Sounds[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
get_position(id, 2.0, 0.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 0.0)
set_task(0.1, "Special_Shoot_Wings_2", id+TASK_FLYING)
set_task(0.6, "Reset_Mode", id)
set_player_nextattackx(id, 2.0)
set_weapons_timeidle(id, CSW_MP5NAVY, 2.0)
}
else if(g_Mode[id] == MODE_WINGS_2)
{
UTIL_PlayWeaponAnimation(id, THANATOS3_FLYING_WINGS_2)
emit_sound(id, CHAN_WEAPON, Fire_Sounds[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
get_position(id, 2.0, 0.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 0.0)
set_task(0.2, "Special_Shoot_Wings_2", id+TASK_FLYING)
set_task(0.3, "Special_Shoot_Wings_3", id+TASK_FLYING)
set_task(0.4, "Special_Shoot_Wings_4", id+TASK_FLYING)
set_task(0.6, "Reset_Mode", id)
set_player_nextattackx(id, 2.0)
set_weapons_timeidle(id, CSW_MP5NAVY, 2.0)
}
else if(g_Mode[id] == MODE_WINGS_3)
{
UTIL_PlayWeaponAnimation(id, THANATOS3_FLYING_WINGS_3)
emit_sound(id, CHAN_WEAPON, Fire_Sounds[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
get_position(id, 2.0, 0.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 0.0)
set_task(0.1, "Special_Shoot_Wings_2", id+TASK_FLYING)
set_task(0.2, "Special_Shoot_Wings_3", id+TASK_FLYING)
set_task(0.3, "Special_Shoot_Wings_4", id+TASK_FLYING)
set_task(0.4, "Special_Shoot_Wings_5", id+TASK_FLYING)
set_task(0.5, "Special_Shoot_Wings_6", id+TASK_FLYING)
set_task(0.6, "Reset_Mode", id)
set_player_nextattackx(id, 2.0)
set_weapons_timeidle(id, CSW_MP5NAVY, 2.0)
}
}
return FMRES_HANDLED
}
public Special_Shoot_Wings_2(id)
{
id -= TASK_FLYING
if(!is_user_alive(id) || !is_user_connected(id))
return
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return
new Float:Origin[3]
if(g_Mode[id] == MODE_WINGS_1)
{
get_position(id, 0.0, 12.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 12.0)
}
else if(g_Mode[id] == MODE_WINGS_2)
{
get_position(id, 0.0, -12.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, -12.0)
}
else if(g_Mode[id] == MODE_WINGS_3)
{
get_position(id, 0.0, -24.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, -24.0)
}
}
public Special_Shoot_Wings_3(id)
{
id -= TASK_FLYING
if(!is_user_alive(id) || !is_user_connected(id))
return
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return
new Float:Origin[3]
if(g_Mode[id] == MODE_WINGS_2)
{
get_position(id, 0.0, 12.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 12.0)
}
else if(g_Mode[id] == MODE_WINGS_3)
{
get_position(id, 0.0, -12.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, -12.0)
}
}
public Special_Shoot_Wings_4(id)
{
id -= TASK_FLYING
if(!is_user_alive(id) || !is_user_connected(id))
return
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return
new Float:Origin[3]
if(g_Mode[id] == MODE_WINGS_2)
{
get_position(id, 0.0, 24.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 24.0)
}
else if(g_Mode[id] == MODE_WINGS_3)
{
get_position(id, 0.0, 12.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 12.0)
}
}
public Special_Shoot_Wings_5(id)
{
id -= TASK_FLYING
if(!is_user_alive(id) || !is_user_connected(id))
return
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return
new Float:Origin[3]
get_position(id, 0.0, 12.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 12.0)
}
public Special_Shoot_Wings_6(id)
{
id -= TASK_FLYING
if(!is_user_alive(id) || !is_user_connected(id))
return
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return
new Float:Origin[3]
get_position(id, 0.0, 36.0, 0.0, Origin)
Special_Shoot_Wings(id, Origin, 36.0)
}
public Reset_Mode(id)
{
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return
g_Mode[id] = MODE_NORMAL
tn3_attacked[id] = 0
g_Ammo_Special[id] = 0
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
}
public Special_Shoot_Wings(id, Float:StartOrigin[3], Float:New_Target)
{
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return
static Float:TargetOrigin[3], Float:angles[3], Float:angles_fix[3]
pev(id,pev_v_angle,angles)
new Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
angles_fix[0] = 450.0 - angles[0]
angles_fix[1] = angles[1]
angles_fix[2] = angles[2]
set_pev(Ent, pev_movetype, MOVETYPE_FLY)
set_pev(Ent, pev_owner, id)
entity_set_string(Ent, EV_SZ_classname, THANATOS3_SCYTHE_CLASSNAME)
engfunc(EngFunc_SetModel, Ent, THANATOS3_S_MODEL)
set_pev(Ent, pev_mins,{ -0.1, -0.1, -0.1 })
set_pev(Ent, pev_maxs,{ 0.1, 0.1, 0.1 })
set_pev(Ent, pev_origin, StartOrigin)
set_pev(Ent, pev_angles, angles_fix)
set_pev(Ent, pev_gravity, 0.01)
set_pev(Ent, pev_solid, SOLID_BBOX)
set_pev(Ent, pev_frame, 0.0)
set_pev(Ent, pev_animtime, get_gametime())
set_pev(Ent, pev_framerate, 1.0)
set_pev(Ent, pev_sequence, 0)
entity_set_float(Ent, EV_FL_nextthink, halflife_time() + 0.01)
static Float:Velocity[3]
fm_get_aim_origin(id, TargetOrigin)
TargetOrigin[1] += New_Target
get_speed_vector(StartOrigin, TargetOrigin, 2000.0, Velocity)
set_pev(Ent, pev_velocity, Velocity)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // Temporary entity ID
write_short(Ent) // Entity
write_short(sTrail) // Sprite index
write_byte(4) // Life
write_byte(2) // Line width
write_byte(65)
write_byte(69)
write_byte(121)
write_byte(255) // Alpha
message_end()
}
public fw_Think_Scythe(Ent)
{
if(!pev_valid(Ent))
return
static Classname[32]
pev(Ent, pev_classname, Classname, sizeof(Classname))
if(!equal(Classname, THANATOS3_SCYTHE_CLASSNAME))
return
}
public fw_Touch_Scythe(Ent, Id)
{
if(!pev_valid(Ent))
return
new Float:originF[3]
pev(Ent, pev_origin, originF)
static Owner; Owner = pev(Ent, pev_owner)
if(is_user_alive(Id) && ze_is_user_zombie(Id))
{
static Float:MyOrigin[3]
pev(Owner, pev_origin, MyOrigin)
create_blood(originF)
create_blood(originF)
create_blood(originF)
create_blood(originF)
hook_ent(Id, MyOrigin, 50.0, 2)
ExecuteHamB(Ham_TakeDamage, Id, 0, Owner, random_float(25.0,60.0), DMG_BULLET)
Scythe_Wind_Attack(Id, Owner)
emit_sound(Id, CHAN_WEAPON, Fire_Sounds[12], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
else
{
new Float:originn[3]
pev(Ent, pev_origin, originn)
create_fake_smokes(originn)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
write_coord_f(originn[0])
write_coord_f(originn[1])
write_coord_f(originn[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(Ent)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord_f(originn[0])
write_coord_f(originn[1])
write_coord_f(originn[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
remove_entity(Ent)
}
public Scythe_Wind_Attack(id, attacker)
{
static Ent; Ent = fm_find_ent_by_owner(-1, THANATOS3_SCYTHE_WIND_CLASSNAME, id)
if(is_user_alive(id) && ze_is_user_zombie(id))
{
new iEnt = create_entity("info_target")
static Float:MyOrigin[3], Float:New_Origin[3]
pev(id, pev_origin, MyOrigin)
set_pev(iEnt, pev_movetype, MOVETYPE_FOLLOW)
set_pev(iEnt, pev_scale, 2.0)
set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
entity_set_string(iEnt, EV_SZ_classname, THANATOS3_SCYTHE_WIND_CLASSNAME)
engfunc(EngFunc_SetModel, iEnt, THANATOS3_S_WIND_MODEL)
if(pev_valid(Ent) == 1)
{
New_Origin[0] = -1.5
New_Origin[1] = 1.5
New_Origin[2] = 50.0
}
else if(pev_valid(Ent) == 2)
{
New_Origin[0] = -1.0
New_Origin[1] = 1.0
New_Origin[2] = 40.0
}
else if(pev_valid(Ent) == 3)
{
New_Origin[0] = -0.5
New_Origin[1] = 0.5
New_Origin[2] = 30.0
}
else if(pev_valid(Ent) == 4)
{
New_Origin[0] = 0.0
New_Origin[1] = 0.0
New_Origin[2] = 20.0
}
else if(pev_valid(Ent) == 5)
{
New_Origin[0] = 0.5
New_Origin[1] = -0.5
New_Origin[2] = 10.0
}
else if(pev_valid(Ent) == 6)
{
New_Origin[0] = 1.0
New_Origin[1] = -1.0
New_Origin[2] = 0.0
}
MyOrigin[0] += New_Origin[0]
MyOrigin[1] += New_Origin[1]
MyOrigin[2] += New_Origin[2]
set_pev(iEnt, pev_origin, MyOrigin)
set_pev(iEnt, pev_owner, attacker)
set_pev(iEnt, pev_aiment, id)
set_pev(iEnt, pev_fuser1, get_gametime() + 6.0)
set_pev(iEnt, pev_animtime, get_gametime())
set_pev(iEnt, pev_framerate, 4.0)
set_pev(iEnt, pev_sequence, 0)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // Temporary entity ID
write_short(iEnt) // Entity
write_short(sTrail) // Sprite index
write_byte(5) // Life
write_byte(2) // Line width
write_byte(65)
write_byte(69)
write_byte(121)
write_byte(100) // Alpha
message_end()
}
else if(!is_user_alive(id) || !ze_is_user_zombie(id))
{
engfunc(EngFunc_RemoveEntity, Ent)
}
}
public fw_Scythe_Wind_Think(iEnt)
{
if(!pev_valid(iEnt))
{
remove_entity(iEnt)
}
static attacker
attacker = pev(iEnt, pev_owner)
static victim, Float:g_SoundTime[33], Float:g_DamageTime[33], Float:Damage[33]
victim = pev(iEnt, pev_aiment)
static Float:OriginF[3]
pev(iEnt, pev_origin, OriginF)
static Float:fTimeRemove
pev(iEnt, pev_fuser1, fTimeRemove)
set_pev(iEnt, pev_nextthink, get_gametime() + 0.05)
if(ze_is_user_zombie(attacker) || !is_user_alive(attacker)) engfunc(EngFunc_RemoveEntity, iEnt)
if(!ze_is_user_zombie(victim) || !is_user_alive(victim)) engfunc(EngFunc_RemoveEntity, iEnt)
if(get_gametime() - 1.0 > g_DamageTime[victim])
{
g_DamageTime[victim] = get_gametime()
create_blood(OriginF)
create_blood(OriginF)
create_blood(OriginF)
create_blood(OriginF)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord_f(OriginF[0])
write_coord_f(OriginF[1])
write_coord_f(OriginF[2])
write_short(attacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
if(pev_valid(iEnt) == 2) Damage[attacker] = random_float(60.0,120.0);
else if(pev_valid(iEnt) == 4) Damage[attacker] = random_float(50.0,60.0);
else if(pev_valid(iEnt) == 6) Damage[attacker] = random_float(25.0,50.0);
ExecuteHamB(Ham_TakeDamage, victim, attacker, attacker, Damage[attacker], DMG_BULLET)
set_pev(iEnt, pev_fuser2, get_gametime())
}
else if(get_gametime() - 0.1 > g_SoundTime[victim])
{
g_SoundTime[victim] = get_gametime()
//set_pev(iEnt, pev_animtime, get_gametime())
//set_pev(iEnt, pev_framerate, 2.0)
//set_pev(iEnt, pev_sequence, 1)
emit_sound(iEnt, CHAN_WEAPON, Fire_Sounds[13], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
else if (get_gametime() >= fTimeRemove)
{
engfunc(EngFunc_RemoveEntity, iEnt)
return;
}
}
public fwPrecacheEvent_Post(type, const name[])
{
if(equal("events/mp5n.sc", name))
{
g_orig_event_thanatos3 = get_orig_retval()
return FMRES_HANDLED
}
return FMRES_IGNORED
}
public fw_PlayerKilled(id)
{
g_has_thanatos3[id] = false
g_Mode[id] = MODE_NORMAL
g_Reload[id] = false
g_Ammo_Special[id] = 0
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
}
public zp_user_infected_post(id)
{
g_has_thanatos3[id] = false
g_Mode[id] = MODE_NORMAL
g_Reload[id] = false
g_Ammo_Special[id] = 0
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
}
public client_connect(id)
{
g_has_thanatos3[id] = false
g_Mode[id] = MODE_NORMAL
g_Reload[id] = false
g_Ammo_Special[id] = 0
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
}
public client_disconnected(id)
{
g_has_thanatos3[id] = false
g_Mode[id] = MODE_NORMAL
g_Reload[id] = false
g_Ammo_Special[id] = 0
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
}
public Update_SpecialAmmo(id, Ammo, On)
{
static AmmoSprites[33], On, Ammo_Asli
if(Ammo == 1) Ammo_Asli = 2
else if(Ammo == 2) Ammo_Asli = 4
else if(Ammo == 3) Ammo_Asli = 6
format(AmmoSprites, sizeof(AmmoSprites), "number_%d", Ammo_Asli)
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusIcon"), {0,0,0}, id)
write_byte(On)
write_string(AmmoSprites)
write_byte(42) // red
write_byte(42) // green
write_byte(252) // blue
message_end()
}
public fw_thanatos3_idle_anim(Weapon)
{
new id = get_pdata_cbase(Weapon, 41, 4)
if(!is_user_alive(id) || !g_has_thanatos3[id] || get_user_weapon(id) != CSW_THANATOS3)
return HAM_IGNORED;
new Float:g_idle_sound_delay[33]
if(get_gametime() - 1.0 > g_idle_sound_delay[id])
{
if(g_Mode[id] == MODE_WINGS_1) emit_sound(id, CHAN_BODY, Fire_Sounds[9], 1.0, ATTN_IDLE, 0, PITCH_HIGH)
else if(g_Mode[id] == MODE_WINGS_2) emit_sound(id, CHAN_BODY, Fire_Sounds[10], 1.0, ATTN_IDLE, 0, PITCH_HIGH)
else if(g_Mode[id] == MODE_WINGS_3) emit_sound(id, CHAN_BODY, Fire_Sounds[11], 1.0, ATTN_IDLE, 0, PITCH_HIGH)
g_idle_sound_delay[id] = get_gametime()
}
if(get_pdata_float(Weapon, 48, 4) <= 0.43)
{
if(!g_Mode[id]) UTIL_PlayWeaponAnimation(id, THANATOS3_IDLE_NORMAL)
else if(g_Mode[id] == MODE_WINGS_1) UTIL_PlayWeaponAnimation(id, THANATOS3_IDLE_WINGS_1)
else if(g_Mode[id] == MODE_WINGS_2) UTIL_PlayWeaponAnimation(id, THANATOS3_IDLE_WINGS_2)
else if(g_Mode[id] == MODE_WINGS_3) UTIL_PlayWeaponAnimation(id, THANATOS3_IDLE_WINGS_3)
set_pdata_float(Weapon, 48, 20.0, 4)
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public fw_SetModel(entity, model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED
static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED
static iOwner
iOwner = entity_get_edict(entity, EV_ENT_owner)
if(equal(model, "models/w_mp5navy.mdl"))
{
static iStoredAugID
iStoredAugID = find_ent_by_owner(ENG_NULLENT, weapon_thanatos3, entity)
if(!is_valid_ent(iStoredAugID))
return FMRES_IGNORED
if(g_has_thanatos3[iOwner])
{
entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, THANATOS3_WEAPONKEY)
g_has_thanatos3[iOwner] = false
//g_Mode[iOwner] = MODE_NORMAL
if(g_Mode[iOwner] == MODE_NORMAL)
{
entity_set_model(entity, THANATOS3_W_MODEL)
}
else
{
entity_set_model(entity, THANATOS3_W_MODEL_B)
}
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public give_thanatos3(id)
{
drop_weapons(id, 1)
new iWep2 = give_item(id,weapon_thanatos3)
if( iWep2 > 0 )
{
cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_thanatos3))
cs_set_user_bpammo (id, CSW_THANATOS3, get_pcvar_num(cvar_thanatos3_ammo))
UTIL_PlayWeaponAnimation(id, THANATOS3_DRAW_NORMAL)
set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
write_string("weapon_thanatos3")
write_byte(10)
write_byte(120)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(7)
write_byte(CSW_MP5NAVY)
message_end()
}
g_has_thanatos3[id] = true
g_Ammo_Special[id] = 0
g_Mode[id] = MODE_NORMAL
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
}
public fw_thanatos3_AddToPlayer(thanatos3, id)
{
if(!is_valid_ent(thanatos3) || !is_user_connected(id))
return HAM_IGNORED
if(entity_get_int(thanatos3, EV_INT_WEAPONKEY) == THANATOS3_WEAPONKEY)
{
g_has_thanatos3[id] = true
entity_set_int(thanatos3, EV_INT_WEAPONKEY, 0)
message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
write_string("weapon_thanatos3")
write_byte(10)
write_byte(120)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(7)
write_byte(CSW_MP5NAVY)
message_end()
return HAM_HANDLED
}
else
{
message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
write_string("weapon_mp3navy")
write_byte(10)
write_byte(120)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(7)
write_byte(CSW_MP5NAVY)
message_end()
}
return HAM_IGNORED
}
public fw_UseStationary_Post(entity, caller, activator, use_type)
{
if (use_type == USE_STOPPED && is_user_connected(caller))
replace_weapon_models(caller, get_user_weapon(caller))
}
public fw_Item_Deploy_Post(weapon_ent)
{
static owner
owner = fm_cs_get_weapon_ent_owner(weapon_ent)
static weaponid
weaponid = cs_get_weapon_id(weapon_ent)
replace_weapon_models(owner, weaponid)
}
public CurrentWeapon(id)
{
replace_weapon_models(id, read_data(2))
if(!is_user_alive(id))
return
if(read_data(2) == CSW_THANATOS3 || g_has_thanatos3[id])
{
static Float:iSpeed
if(g_has_thanatos3[id] && !g_Mode[id])
iSpeed = get_pcvar_float(cvar_spd_thanatos3)
else if(g_has_thanatos3[id] && g_Mode[id])
iSpeed = get_pcvar_float(cvar_spd_thanatos3) + 0.20
static weapon[32],Ent
get_weaponname(read_data(2),weapon,31)
Ent = find_ent_by_owner(-1,weapon,id)
if(Ent)
{
static Float:Delay
Delay = get_pdata_float( Ent, 46, 4) * iSpeed
if (Delay > 0.0)
{
set_pdata_float(Ent, 46, Delay, 4)
}
}
Update_SpecialAmmo(id, g_Ammo_Special[id], 1)
}
else if(read_data(2) != CSW_THANATOS3 || !g_has_thanatos3[id])
{
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
}
}
replace_weapon_models(id, weaponid)
{
switch (weaponid)
{
case CSW_THANATOS3:
{
if(g_has_thanatos3[id])
{
set_pev(id, pev_viewmodel2, THANATOS3_V_MODEL)
if(!g_Mode[id]) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_A)
else if(g_Mode[id] == MODE_WINGS_1) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_B)
else if(g_Mode[id] == MODE_WINGS_2) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_C)
else if(g_Mode[id] == MODE_WINGS_3) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_D)
if(oldweap[id] != CSW_THANATOS3)
{
if(!g_Mode[id]) UTIL_PlayWeaponAnimation(id, THANATOS3_DRAW_NORMAL)
else if(g_Mode[id] == MODE_WINGS_1) UTIL_PlayWeaponAnimation(id, THANATOS3_DRAW_WINGS_1)
else if(g_Mode[id] == MODE_WINGS_2) UTIL_PlayWeaponAnimation(id, THANATOS3_DRAW_WINGS_2)
else if(g_Mode[id] == MODE_WINGS_3) UTIL_PlayWeaponAnimation(id, THANATOS3_DRAW_WINGS_3)
set_player_nextattackx(id, 1.0)
set_weapons_timeidle(id, CSW_THANATOS3, 1.0)
message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
write_string("weapon_thanatos3")
write_byte(10)
write_byte(120)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(7)
write_byte(CSW_MP5NAVY)
message_end()
}
}
}
}
oldweap[id] = weaponid
}
public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
{
if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_THANATOS3 || !g_has_thanatos3[Player]))
return FMRES_IGNORED
set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
return FMRES_HANDLED
}
public fw_thanatos3_PrimaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if (!g_has_thanatos3[Player])
return
g_IsInPrimaryAttack = 1
pev(Player,pev_punchangle,cl_pushangle[Player])
g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
}
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if ((eventid != g_orig_event_thanatos3) || !g_IsInPrimaryAttack)
return FMRES_IGNORED
if (!(1 <= invoker <= g_MaxPlayers))
return FMRES_IGNORED
playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
return FMRES_SUPERCEDE
}
public fw_thanatos3_PrimaryAttack_Post(Weapon)
{
if(!pev_valid(Weapon))
return
g_IsInPrimaryAttack = 0
new Player = get_pdata_cbase(Weapon, 41, 4)
new szClip, szAmmo
get_user_weapon(Player, szClip, szAmmo)
if(!is_user_alive(Player))
return
if(!g_has_thanatos3[Player])
return
if (!g_clip_ammo[Player])
return
new Float:push[3]
pev(Player,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[Player],push)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_thanatos3),push)
xs_vec_add(push,cl_pushangle[Player],push)
set_pev(Player,pev_punchangle,push)
emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(!g_Mode[Player]) UTIL_PlayWeaponAnimation(Player, THANATOS3_SHOOT_NORMAL)
else if(g_Mode[Player] == MODE_WINGS_1) UTIL_PlayWeaponAnimation(Player, THANATOS3_SHOOT_WINGS_1)
else if(g_Mode[Player] == MODE_WINGS_2) UTIL_PlayWeaponAnimation(Player, THANATOS3_SHOOT_WINGS_2)
else if(g_Mode[Player] == MODE_WINGS_3) UTIL_PlayWeaponAnimation(Player, THANATOS3_SHOOT_WINGS_3)
tn3_attacked[Player] ++
if(tn3_attacked[Player] == 12)
{
Thanatos3_Change_Mode(Player)
}
}
public Thanatos3_Change_Mode(id)
{
if(!is_user_alive(id))
return
if(get_user_weapon(id) != CSW_THANATOS3 || !g_has_thanatos3[id])
return
if(g_Mode[id] == MODE_NORMAL)
{
tn3_attacked[id] = 0
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
g_Ammo_Special[id] = 1
Update_SpecialAmmo(id, g_Ammo_Special[id], 1)
set_player_nextattackx(id, 0.1)
set_weapons_timeidle(id, CSW_THANATOS3, 0.1)
UTIL_PlayWeaponAnimation(id, THANATOS3_SPREAD_WINGS_1)
}
else if(g_Mode[id] == MODE_WINGS_1)
{
tn3_attacked[id] = 0
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
g_Ammo_Special[id] = 2
Update_SpecialAmmo(id, g_Ammo_Special[id], 1)
set_player_nextattackx(id, 0.1)
set_weapons_timeidle(id, CSW_THANATOS3, 0.1)
UTIL_PlayWeaponAnimation(id, THANATOS3_SPREAD_WINGS_2)
}
else if(g_Mode[id] == MODE_WINGS_2)
{
tn3_attacked[id] = 0
Update_SpecialAmmo(id, g_Ammo_Special[id], 0)
g_Ammo_Special[id] = 3
Update_SpecialAmmo(id, g_Ammo_Special[id], 1)
set_player_nextattackx(id, 0.1)
set_weapons_timeidle(id, CSW_THANATOS3, 0.1)
UTIL_PlayWeaponAnimation(id, THANATOS3_SPREAD_WINGS_3)
}
Do_Thanatos3_Change_Mode(id)
}
public Do_Thanatos3_Change_Mode(id)
{
if(!is_user_alive(id))
return
if(!g_has_thanatos3[id])
return
if(g_Mode[id] == MODE_NORMAL) g_Mode[id] = MODE_WINGS_1
else if(g_Mode[id] == MODE_WINGS_1) g_Mode[id] = MODE_WINGS_2
else if(g_Mode[id] == MODE_WINGS_2) g_Mode[id] = MODE_WINGS_3
if(!g_Mode[id]) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_A)
else if(g_Mode[id] == MODE_WINGS_1) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_B)
else if(g_Mode[id] == MODE_WINGS_2) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_C)
else if(g_Mode[id] == MODE_WINGS_3) set_pev(id, pev_weaponmodel2, THANATOS3_P_MODEL_D)
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if (victim != attacker && is_user_connected(attacker))
{
if(get_user_weapon(attacker) == CSW_THANATOS3)
{
if(g_has_thanatos3[attacker])
SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_thanatos3))
}
}
}
public message_DeathMsg(msg_id, msg_dest, id)
{
static szTruncatedWeapon[33], iAttacker, iVictim
get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
iAttacker = get_msg_arg_int(1)
iVictim = get_msg_arg_int(2)
if(!is_user_connected(iAttacker) || iAttacker == iVictim)
return PLUGIN_CONTINUE
if(equal(szTruncatedWeapon, "mp5navy") && get_user_weapon(iAttacker) == CSW_THANATOS3)
{
if(g_has_thanatos3[iAttacker])
{
set_msg_arg_string(4, "mp5navy")
}
}
return PLUGIN_CONTINUE
}
public thanatos3_ItemPostFrame(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_thanatos3[id])
return HAM_IGNORED
static iClipExtra
iClipExtra = get_pcvar_num(cvar_clip_thanatos3)
new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
new iBpAmmo = cs_get_user_bpammo(id, CSW_THANATOS3)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
if(fInReload && flNextAttack <= 0.0)
{
new j = min(iClipExtra - iClip, iBpAmmo)
set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
cs_set_user_bpammo(id, CSW_THANATOS3, iBpAmmo-j)
set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
fInReload = 0
}
return HAM_IGNORED
}
public thanatos3_Reload(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_thanatos3[id])
return HAM_IGNORED
static iClipExtra
if(g_has_thanatos3[id])
iClipExtra = get_pcvar_num(cvar_clip_thanatos3)
g_thanatos3_TmpClip[id] = -1
new iBpAmmo = cs_get_user_bpammo(id, CSW_THANATOS3)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
if (iBpAmmo <= 0)
return HAM_SUPERCEDE
if (iClip >= iClipExtra)
return HAM_SUPERCEDE
g_thanatos3_TmpClip[id] = iClip
return HAM_IGNORED
}
public thanatos3_Reload_Post(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_thanatos3[id])
return HAM_IGNORED
if (g_thanatos3_TmpClip[id] == -1)
return HAM_IGNORED
g_Reload[id] = true
set_pdata_int(weapon_entity, m_iClip, g_thanatos3_TmpClip[id], WEAP_LINUX_XTRA_OFF)
set_pdata_float(weapon_entity, m_flTimeWeaponIdle, THANATOS3_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
set_pdata_float(id, m_flNextAttack, THANATOS3_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
if(g_Mode[id] == MODE_NORMAL)
{
UTIL_PlayWeaponAnimation(id, THANATOS3_RELOAD_NORMAL)
set_task(THANATOS3_RELOAD_TIME, "Complete_Reload_Mode_Normal", weapon_entity)
}
else if(g_Mode[id] == MODE_WINGS_1)
{
UTIL_PlayWeaponAnimation(id, THANATOS3_RELOAD_WINGS_1)
emit_sound(id, CHAN_WEAPON, Fire_Sounds[14], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_task(THANATOS3_RELOAD_TIME, "Complete_Reload_Mode_Wings", weapon_entity)
}
else if(g_Mode[id] == MODE_WINGS_2)
{
UTIL_PlayWeaponAnimation(id, THANATOS3_RELOAD_WINGS_2)
emit_sound(id, CHAN_WEAPON, Fire_Sounds[15], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_task(THANATOS3_RELOAD_TIME, "Complete_Reload_Mode_Wings", weapon_entity)
}
else if(g_Mode[id] == MODE_WINGS_3)
{
UTIL_PlayWeaponAnimation(id, THANATOS3_RELOAD_WINGS_3)
emit_sound(id, CHAN_WEAPON, Fire_Sounds[16], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_task(THANATOS3_RELOAD_TIME, "Complete_Reload_Mode_Wings", weapon_entity)
}
return HAM_IGNORED
}
public Complete_Reload_Mode_Normal(weapon_entity)
{
if(!pev_valid(weapon_entity))
return
new id = get_pdata_cbase(weapon_entity, 41, 4)
g_Reload[id] = false
UTIL_PlayWeaponAnimation(id, THANATOS3_IDLE_NORMAL)
set_pdata_float(weapon_entity, 48, 20.0, 4)
}
public Complete_Reload_Mode_Wings(weapon_entity)
{
if(!pev_valid(weapon_entity))
return
new id = get_pdata_cbase(weapon_entity, 41, 4)
g_Reload[id] = false
if(g_Mode[id] == MODE_WINGS_1) UTIL_PlayWeaponAnimation(id, THANATOS3_IDLE_WINGS_1)
else if(g_Mode[id] == MODE_WINGS_2) UTIL_PlayWeaponAnimation(id, THANATOS3_IDLE_WINGS_2)
else if(g_Mode[id] == MODE_WINGS_3) UTIL_PlayWeaponAnimation(id, THANATOS3_IDLE_WINGS_3)
set_pdata_float(weapon_entity, 48, 20.0, 4)
}
stock drop_weapons(id, dropwhat)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)
for (i = 0; i < num; i++)
{
weaponid = weapons[i]
if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
{
static wname[32]
get_weaponname(weaponid, wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}
stock set_player_nextattackx(id, Float:nexttime)
{
if(!is_user_alive(id))
return
set_pdata_float(id, m_flNextAttack, nexttime, 5)
}
stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
{
if(!is_user_alive(id))
return
static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
if(!pev_valid(entwpn))
return
set_pdata_float(entwpn, 46, TimeIdle, WEAP_LINUX_XTRA_OFF)
set_pdata_float(entwpn, 47, TimeIdle, WEAP_LINUX_XTRA_OFF)
set_pdata_float(entwpn, 48, TimeIdle + 1.0, WEAP_LINUX_XTRA_OFF)
}
stock fm_set_weapon_ammo(entity, amount)
{
set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}
stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
static Float:num; num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num
return 1;
}
stock fm_cs_get_current_weapon_ent(id)
{
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
}
stock fm_cs_get_weapon_ent_owner(ent)
{
return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
}
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()
}
stock create_blood(const Float:origin[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_short(m_iBlood[1])
write_short(m_iBlood[0])
write_byte(75)
write_byte(8)
message_end()
}
stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
{
static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
pev(id, pev_origin, vOrigin)
pev(id, pev_view_ofs, vUp) //for player
xs_vec_add(vOrigin, vUp, vOrigin)
pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
angle_vector(vAngle,ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors
angle_vector(vAngle,ANGLEVECTOR_RIGHT, vRight)
angle_vector(vAngle,ANGLEVECTOR_UP, vUp)
vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}
stock create_fake_smokes(Float:Origin[3])
{
static TE_FLAG
TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
TE_FLAG |= TE_EXPLFLAG_NOSOUND
TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2] - 10.0)
write_short(g_smokepuff_id)
write_byte(2)
write_byte(80)
write_byte(TE_FLAG)
message_end()
}
stock hook_ent(ent, Float:VicOrigin[3], Float:speed, type)
{
static Float:fl_Velocity[3]
static Float:EntOrigin[3]
pev(ent, pev_origin, EntOrigin)
static Float:distance_f
distance_f = 100.0
new Float:fl_Time = distance_f / speed
if(type == 1)
{
fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5
fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5
fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time
} else if(type == 2) {
fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5
fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5
fl_Velocity[2] = (EntOrigin[2] - VicOrigin[2]) / fl_Time
}
entity_set_vector(ent, EV_VEC_velocity, fl_Velocity)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/