When the rocket explodes,around the blast area make a radius and if a players is in that radius make screen shake for that players?
PHP Code:
#include <amxmodx>
#include <engine>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <bhextra5>
const OFFSET_LINUX_WEAPONS = 4
const OFFSET_WEAPONOWNER = 41
#define OFFSET_PRIMARYWEAPON 116
#define PLUGIN "Bazooka"
#define VERSION "1.0"
#define AUTHOR "Dias"
#define weapon_at4cs "weapon_m249"
#define CSW_AT4CS CSW_M249
#define TASK_CHECKRELOAD 111112
#define TASK_RELOAD 111113
new g_at4cs
new g_had_at4cs[33], Float:g_lastfire[33], Float:g_lastaim[33], g_aiming[33],
g_smoke_id, g_spr_exp, g_spr_trail, is_reloading[33],
cvar_radius, cvar_maxdamage
new g_msgSayText
new const v_model[] = "models/v_bazooka_for_boost.mdl"
new const p_model[] = "models/p_bazooka_for_boost.mdl"
new const w_model[] = "models/w_bazooka_for_boost.mdl"
new const s_model[] = "models/bazooka_projektil_for_boost.mdl"
new const at4cs_sound[5][] = {
"weapons/for_boostrocketfire1.wav",
"weapons/at4_clipin1.wav",
"weapons/at4_clipin2.wav",
"weapons/at4_clipin3.wav",
"weapons/at4_draw.wav"
}
const 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)
#define VipFlag ADMIN_LEVEL_G
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, v_model)
engfunc(EngFunc_PrecacheModel, p_model)
engfunc(EngFunc_PrecacheModel, s_model)
engfunc(EngFunc_PrecacheModel, w_model)
engfunc(EngFunc_PrecacheGeneric, "sprites/weapon_at4cs.txt")
engfunc(EngFunc_PrecacheGeneric, "sprites/at4cs.spr")
g_smoke_id = engfunc(EngFunc_PrecacheModel, "sprites/for_boost_rainsplash.spr")
g_spr_trail = engfunc(EngFunc_PrecacheModel,"sprites/for_boost_xbeam3.spr")
g_spr_exp = engfunc(EngFunc_PrecacheModel,"sprites/for_boost_zerogxplode.spr")
for(new i = 0; i < sizeof(at4cs_sound); i++)
engfunc(EngFunc_PrecacheSound, at4cs_sound[i])
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Item_Deploy, "weapon_m249", "Ham_OnKnifeDeploy", 1)
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
register_logevent("round_end", 2, "1=Round_End")
RegisterHam(Ham_Spawn, "player", "OnPlayerSpawnPost", 1)
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_SetModel, "fw_SetModel")
register_touch("at4ex_rocketbio", "*", "fw_rocket_touch")
RegisterHam(Ham_Weapon_Reload, weapon_at4cs, "fw_WeaponReload")
RegisterHam(Ham_Item_AddToPlayer, weapon_at4cs, "fw_AddToPlayer", 1)
cvar_radius = register_cvar("bazooka_radius_vip", "125.0")
cvar_maxdamage = register_cvar("bazooka_maxdamage_vip", "300.0")
register_think("at4ex_rocketbio", "fw_rocket_think")
g_at4cs = bh_register_extra_item("Bazooka", "", 15000, ITEM)
register_clcmd("weapon_at4cs", "hook_weapon")
g_msgSayText = get_user_msgid("SayText")
}
public OnPlayerSpawnPost(id)
{
if(g_had_at4cs[id])
{
is_reloading[id] = 0
g_aiming[id] = 0
remove_task(id+TASK_CHECKRELOAD)
remove_task(id+TASK_RELOAD)
}
}
public hook_weapon(id)
{
engclient_cmd(id, weapon_at4cs)
return PLUGIN_HANDLED
}
public bh_extra_item_selected(id, itemid)
{
if(itemid == g_at4cs)
{
if(!(get_user_flags(id) & VipFlag))
{
return PLUGIN_HANDLED
}
drop_weapons(id, 1)
set_pev(id, pev_viewmodel2, v_model)
set_pev(id, pev_weaponmodel2, p_model)
g_had_at4cs[id] = true
is_reloading[id] = 0
g_aiming[id] = 0
fm_give_item(id, weapon_at4cs)
static at4cs
at4cs = fm_get_user_weapon_entity(id, CSW_AT4CS)
cs_set_weapon_ammo(at4cs, 1)
cs_set_user_bpammo(id, CSW_AT4CS, 99)
}
return PLUGIN_CONTINUE
}
public fw_PlayerKilled(victim, killer, shouldgib)
{
if(g_had_at4cs[victim])
{
g_had_at4cs[victim] = false
remove_task(victim+TASK_CHECKRELOAD)
remove_task(victim+TASK_RELOAD)
is_reloading[victim] = 0
g_aiming[victim] = 0
}
}
public client_disconnect(id)
{
if(g_had_at4cs[id])
{
g_had_at4cs[id] = false
remove_task(id+TASK_CHECKRELOAD)
remove_task(id+TASK_RELOAD)
is_reloading[id] = 0
g_aiming[id] = 0
}
}
public event_newround(id)
{
remove_entity_name("at4ex_rocketbio")
}
stock fm_cs_get_weapon_ent_owner(ent)
{
return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
}
public Ham_OnKnifeDeploy(ent)
{
static id; id = fm_cs_get_weapon_ent_owner(ent)
if (!pev_valid(id))
return
if(!g_had_at4cs[id])
return
set_pev(id, pev_viewmodel2, v_model)
set_pev(id, pev_weaponmodel2, p_model)
}
public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
if(!is_user_alive(id) || !is_user_connected(id))
return FMRES_IGNORED
if(get_user_weapon(id) != CSW_AT4CS || !g_had_at4cs[id])
return FMRES_IGNORED
set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001)
return FMRES_HANDLED
}
public fw_AddToPlayer(ent, id)
{
if(!is_valid_ent(ent) || !is_user_alive(id))
return HAM_IGNORED
if(entity_get_int(ent, EV_INT_impulse) == 61296)
{
g_had_at4cs[id] = true
entity_set_int(id, EV_INT_impulse, 0)
return HAM_HANDLED
}
if(g_had_at4cs[id])
{
message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id)
write_string("weapon_at4cs"); // WeaponName
write_byte(3) // PrimaryAmmoID
write_byte(1) // PrimaryAmmoMaxAmount
write_byte(-1) // SecondaryAmmoID
write_byte(-1) // SecondaryAmmoMaxAmount
write_byte(0) // SlotID (0...N)
write_byte(4) // NumberInSlot (1...N)
write_byte(CSW_AT4CS) // WeaponID
write_byte(0) // Flags
message_end()
}
return HAM_HANDLED
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id) || !is_user_connected(id))
return FMRES_IGNORED
if(get_user_weapon(id) != CSW_AT4CS || !g_had_at4cs[id])
return FMRES_IGNORED
static CurButton
CurButton = get_uc(uc_handle, UC_Buttons)
if(CurButton & IN_ATTACK)
{
static Float:CurTime
CurTime = get_gametime()
static at4cs
at4cs = fm_find_ent_by_owner(-1, weapon_at4cs, id)
if(cs_get_weapon_ammo(at4cs) > 0 && !is_reloading[id])
{
if(CurTime - 4.5 > g_lastfire[id])
{
set_weapon_anim(id, 1)
create_rocket(id)
static Float:Punch_Angles[3]
Punch_Angles[0] =-5.0
Punch_Angles[1] = 0.0
Punch_Angles[2] = 0.0
set_pev(id, pev_punchangle, Punch_Angles)
cs_set_weapon_ammo(at4cs, cs_get_weapon_ammo(at4cs) - 1)
if(cs_get_weapon_ammo(at4cs) <= 0 && !is_reloading[id])
{
if(cs_get_user_bpammo(id, CSW_AT4CS) > 0)
{
set_task(0.5, "at4cs_reload", id)
}
}
g_lastfire[id] = CurTime
}
} else {
if(!is_reloading[id])
{
if(cs_get_user_bpammo(id, CSW_AT4CS) > 0)
{
if(CurTime - 1.0 > g_lastfire[id])
{
at4cs_reload(id)
g_lastfire[id] = CurTime
}
}
}
}
}
if(CurButton & IN_ATTACK2)
{
static Float:CurTime
CurTime = get_gametime()
if((CurTime - 0.5 > g_lastaim[id]) && !is_reloading[id])
{
if(!g_aiming[id])
{
g_aiming[id] = 1
} else {
g_aiming[id] = 0
}
g_lastaim[id] = CurTime
}
}
CurButton &= ~IN_ATTACK
set_uc(uc_handle, UC_Buttons, CurButton)
CurButton &= ~IN_RELOAD
set_uc(uc_handle, UC_Buttons, CurButton)
return FMRES_HANDLED
}
public fw_SetModel(ent, const model[])
{
if(!is_valid_ent(ent))
return FMRES_IGNORED
static szClassName[33]
entity_get_string(ent, EV_SZ_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED
static iOwner
iOwner = entity_get_edict(ent, EV_ENT_owner)
if(equal(model, "models/w_m249.mdl"))
{
static at4cs
at4cs = find_ent_by_owner(-1, "weapon_m249", ent)
if(!is_valid_ent(at4cs))
return FMRES_IGNORED;
if(g_had_at4cs[iOwner])
{
entity_set_int(at4cs, EV_INT_impulse, 61296)
g_had_at4cs[iOwner] = false
entity_set_model(ent, w_model)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public at4cs_reload(id)
{
if(is_reloading[id])
return
is_reloading[id] = 1
set_weapon_anim(id, 3)
set_task(0.1, "checking_reload", id+TASK_CHECKRELOAD, _, _, "b")
set_task(3.0, "reload_complete", id+TASK_RELOAD)
}
public checking_reload(id)
{
id -= TASK_CHECKRELOAD
if(!is_user_connected(id))
remove_task(id + TASK_CHECKRELOAD);
if(get_user_weapon(id) != CSW_AT4CS || !g_had_at4cs[id])
{
remove_task(id+TASK_CHECKRELOAD)
remove_task(id+TASK_RELOAD)
is_reloading[id] = 0
}
}
public reload_complete(id)
{
id -= TASK_RELOAD
if(!is_reloading[id])
return
remove_task(id+TASK_CHECKRELOAD)
static at4cs
at4cs = fm_find_ent_by_owner(-1, weapon_at4cs, id)
if(pev_valid(at4cs))
cs_set_weapon_ammo(at4cs, 1)
cs_set_user_bpammo(id, CSW_AT4CS, cs_get_user_bpammo(id, CSW_AT4CS) - 1)
is_reloading[id] = 0
}
public fw_WeaponReload(ent)
{
static id
id = pev(ent, pev_owner)
if(!is_user_alive(id) || !is_user_connected(id))
return HAM_IGNORED
if(get_user_weapon(id) != CSW_AT4CS || !g_had_at4cs[id])
return HAM_IGNORED
static Float:CurTime
CurTime = get_gametime()
if(!is_reloading[id])
{
if(cs_get_user_bpammo(id, CSW_AT4CS) > 0)
{
if(CurTime - 1.0 > g_lastfire[id])
{
at4cs_reload(id)
g_lastfire[id] = CurTime
}
}
}
return HAM_SUPERCEDE
}
public create_rocket(id)
{
new ent, Float:Origin[3], Float:Angles[3], Float:Velocity[3]
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles)
pev(id, pev_angles, Angles)
set_pev(ent, pev_origin, Origin)
set_pev(ent, pev_angles, Angles)
set_pev(ent, pev_solid, 2)
set_pev(ent, pev_movetype, 5)
set_pev(ent, pev_classname, "at4ex_rocketbio")
set_pev(ent, pev_owner, id)
engfunc(EngFunc_SetModel, ent, s_model)
set_pev(ent, pev_mins, {-1.0, -1.0, -1.0})
set_pev(ent, pev_maxs, {1.0, 1.0, 1.0})
velocity_by_aim(id, 1600, Velocity)
set_pev(ent, pev_velocity, Velocity)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(ent) // entity:attachment to follow
write_short(g_spr_trail) // sprite index
write_byte(10) // life in 0.1's
write_byte(2) // line width in 0.1's
write_byte(255) // r
write_byte(255) // g
write_byte(255) // b
write_byte(200) // brightness
message_end()
emit_sound(id, CHAN_WEAPON, at4cs_sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pev(ent, pev_iuser4, 0)
set_pev(ent, pev_nextthink, halflife_time() + 0.1)
}
public fw_rocket_think(ent)
{
if(!pev_valid(ent))
return
static Float:Origin[3]
pev(ent, pev_origin, Origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(g_smoke_id)
write_byte(8)
write_byte(100)
message_end()
}
public fw_rocket_touch(rocket, touch)
{
if(!pev_valid(rocket))
return
if(is_user_alive(touch) && pev(rocket, pev_owner) == touch)
return
static Float:Origin[3]
pev(rocket, pev_origin, Origin)
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(g_spr_exp) // sprite index
write_byte(40) // scale in 0.1's
write_byte(15) // framerate
write_byte(0) // flags
message_end()
static owner, iVictim
iVictim = -1
owner = pev(rocket, pev_owner)
new iOwnerTeam = get_user_team(owner)
while((iVictim = find_ent_in_sphere(iVictim, Origin, get_pcvar_float(cvar_radius))) != 0)
{
if((0 < iVictim < 32) && is_user_alive(iVictim)
&& iVictim != owner && iOwnerTeam != get_user_team(iVictim))
{
new Float:MaxDamage, Float:Damage
MaxDamage = get_pcvar_float(cvar_maxdamage)
Damage = random_float(MaxDamage - random_float(0.0, 25.0), MaxDamage + random_float(0.0, 25.0))
ExecuteHam(Ham_TakeDamage, iVictim, 0, owner, 0, DMG_BULLET)
static health
health = get_user_health(iVictim)
if(health - Damage >= 1)
{
set_user_health(iVictim, health - floatround(Damage))
}
else
{
death_message(owner, iVictim, 1)
}
}
}
engfunc(EngFunc_RemoveEntity, rocket)
}
stock set_weapon_anim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(anim)
write_byte(pev(id,pev_body))
message_end()
}
stock death_message(Killer, Victim, ScoreBoard)
{
// Block death msg
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
ExecuteHamB(Ham_Killed, Victim, Killer, 2)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
// Death
make_deathmsg(Killer, Victim, 0, "")
// Update score board
if (ScoreBoard)
{
message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Killer) // id
write_short(pev(Killer, pev_frags)) // frags
write_short(cs_get_user_deaths(Killer)) // deaths
write_short(0) // class?
write_short(get_user_team(Killer)) // team
message_end()
message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Victim) // id
write_short(pev(Victim, pev_frags)) // frags
write_short(cs_get_user_deaths(Victim)) // deaths
write_short(0) // class?
write_short(get_user_team(Victim)) // team
message_end()
}
}
public round_end()
{
static id;
for(id = 1 ; id <= get_maxplayers() ; id++)
{
if(!is_user_connected(id))
continue
if(g_had_at4cs[id])
{
is_reloading[id] = 0
g_aiming[id] = 0
remove_task(id+TASK_CHECKRELOAD)
remove_task(id+TASK_RELOAD)
}
}
}
colored_print(target, const message[], any:...)
{
static buffer[512]
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
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)
}
}
}