Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Исправления в плагине базуки

, Часть проблем решена, часть осталась
yukish
сообщение 22.2.2014, 13:45
Сообщение #1
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Есть амхх-плагин "Базука". Вот его исходник.

Скрытый текст
/* Plugin generated by AMXX-Studio *

Bazooka_2_Slot3 (Knife)

ToDo:
For ver: 2.2.1
Changed to pcvar cvars
More Anitmation cleanup.
Added Ammo by mode
Changed name to Bazooka_2_Slot3

Usage:
Select knife and press (E userkey) to toggle weapon bazooka/knife.

fire button 1 to fire missile
fire button 2 missile selection {Normal / Heat-Seeking / User-Guided}

Commands:

bazooka | spawn a bazooka in front of you (admin only)
bazooka_give <@all/ct/t>/userid> <amount> | give bazooka (admin only)

Say buybazooka in chat to buy bazooka. (everyone)

Cvars:

bazooka_buyable // Allow clients to buy a bazooka (default: 1)
bazooka_anitmation // Set to 1 for bazooka anitmation (default: 1)
bazooka_cost // Sets bazooka cost (default: 2500)
bazooka_dropping // Allow clients to drop the bazooka?? (default: 1)
bazooka_ammo1 // Sets max ammo Normal missiles (default: 3)
bazooka_ammo2 // Sets max ammo Heat-Seeking missiles (default: 1)
bazooka_ammo3 // Sets max ammo User-Guided missiles (default: 1)
bazooka_Damage_Radius // Sets bazooka damage radius (default: 250)
bazooka_Max_Damage // Sets bazooka damage. (default: 150)
bazooka_restrict // Resrict Certain Modes: a = Normal | b = Heat-Seeking | c = User-Guided | d = None
bazooka_trailtime // Bazooka trails time (default:10 roughly 1 seconds)
bazooka_velocity // Sets Missile speed only affects normal and heat-seeking rockets (default: 1200)
bazooka_trailcolors // Set to 0 = white 1 = team color 2 = random color trails
bazooka_gib // Set to 1 for gib` deaths
bazooka_obeyffcvar // Obeys friendly fire
bazooka_tkpunish1 // Sets team kill on/off
bazooka_tkpunish2 // Sets team kill amount
bazooka_buyzone // Obeys buy zone restriction.

Special thanks to:

-=STN=- MaGe / KaOs / RadidEskimo / Freecode / EJL / JTP10181 / PaintLancer / Kaddar
Vexd / twistedeuphoria / XxAvalanchexX / pimp daddy / Ronkkrop / Major_victory

More for making the original bazooka plugin

mike_cao for his awesome gore plugin

and anyone else that over looked.
*/

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <fun>
#include <fakemeta>

#define BA_NORMAL (1<<0) // "a"
#define BA_HEAT (1<<1) // "b"
#define BA_USER (1<<2) // "c"
#define BA_NONE (1<<3) // "d"

#define SEQ_IDLE 0
#define SEQ_FIDGET 1
#define SEQ_RELOAD 2
#define SEQ_FIRE 3
#define SEQ_HOLSTER1 4
#define SEQ_DRAW1 5
#define SEQ_HOLSTER2 6
#define SEQ_DRAW2 7
#define SEQ_IDLE2 8
#define SEQ_FIDGET2 9

new mod_name[33]
new g_buyzone[33]
new Rocket_Mode[33]
new User_Control[33]
new Bazooka_Ammo1[33]
new Bazooka_Ammo2[33]
new Bazooka_Ammo3[33]
new Team_Kill_Count[33]
new Old_Rocket_Mode[33]

new bool:RoundEnd
new bool:is_cstrike

new bool:Has_Bazooka[33]
new bool:Allow_Shooting[33]
new bool:Bazooka_Active[33]
new bool:g_restart_attempt[33]

new cvar_bazooka_cost
new cvar_bazooka_ammo1
new cvar_bazooka_ammo2
new cvar_bazooka_ammo3
new cvar_bazooka_buyable
new cvar_bazooka_dropping
new cvar_bazooka_restrict
new cvar_bazooka_velocity
new cvar_bazooka_trailtime
new cvar_bazooka_gib_death
new cvar_bazooka_tkpunish1
new cvar_bazooka_tkpunish2
new cvar_bazooka_max_damage
new cvar_bazooka_trailcolor
new cvar_bazooka_obeyffcvar
new cvar_bazooka_obeybuyzone
new cvar_bazooka_damage_radius
new cvar_bazooka_animation

new iFlags
new RocketSmoke
new mdl_gib_head
new mdl_gib_lung
new mdl_gib_meat
new mdl_gib_flesh
new mdl_gib_spine
new spr_blood_drop
new spr_blood_spray
new mdl_gib_legbone
new g_sModelIndexSmoke
new g_sModelIndexFireball
new gmsgDeathMsg, gmsgScoreInfo

new bool:E_KeyPress_Delay[33]

static PLUGIN_NAME[] = "Bazooka_2_Slot3"
static PLUGIN_AUTHOR[] = "Can't Shoot"
static PLUGIN_VERSION[] = "2.2.1"

public plugin_init () {

register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

/* Register pcvar cvars */
cvar_bazooka_cost = register_cvar("bazooka_cost","2500",FCVAR_SERVER)
cvar_bazooka_ammo1 = register_cvar("bazooka_ammo1","3",FCVAR_UNLOGGED)
cvar_bazooka_ammo2 = register_cvar("bazooka_ammo2","1",FCVAR_UNLOGGED)
cvar_bazooka_ammo3 = register_cvar("bazooka_ammo3","1",FCVAR_UNLOGGED)
cvar_bazooka_buyable = register_cvar("bazooka_buyable","1",FCVAR_SERVER)
cvar_bazooka_dropping = register_cvar("bazooka_dropping","1",FCVAR_SERVER)
cvar_bazooka_restrict = register_cvar("bazooka_restrict","d",FCVAR_SERVER)
cvar_bazooka_velocity = register_cvar("bazooka_velocity","1200",FCVAR_UNLOGGED)
cvar_bazooka_animation = register_cvar("bazooka_animation","1",FCVAR_UNLOGGED)
cvar_bazooka_trailtime = register_cvar("bazooka_trailtime","10",FCVAR_UNLOGGED)
cvar_bazooka_gib_death = register_cvar("bazooka_gib_death","1",FCVAR_SERVER)
cvar_bazooka_tkpunish1 = register_cvar("bazooka_tkpunish1","1",FCVAR_SERVER)
cvar_bazooka_tkpunish2 = register_cvar("bazooka_tkpunish2","3",FCVAR_SERVER)
cvar_bazooka_max_damage = register_cvar("bazooka_max_damage","150",FCVAR_UNLOGGED)
cvar_bazooka_trailcolor = register_cvar("bazooka_trailcolor","1",FCVAR_UNLOGGED)
cvar_bazooka_obeyffcvar = register_cvar("bazooka_obeyffcvar","1",FCVAR_SERVER)
cvar_bazooka_obeybuyzone = register_cvar("bazooka_obeybuyzone","1",FCVAR_SERVER)
cvar_bazooka_damage_radius = register_cvar("bazooka_damage_radius","250",FCVAR_UNLOGGED)

register_concmd("bazooka","cmd_Drop_Bazooka",ADMIN_BAN)
register_concmd("buybazooka","cmd_BuyBazooka",ADMIN_USER,"- Buys a bazooka")

register_clcmd("say /buybazooka","cmd_BuyBazooka",ADMIN_USER,"- Buys a bazooka")
register_clcmd("say_team /buybazooka","cmd_BuyBazooka",ADMIN_USER,"- Buys a bazooka")
register_clcmd("bazooka_give","cmd_GiveBazooka",ADMIN_BAN,"<@all/ct/t>/userid - Gives free bazooka")
register_clcmd("fullupdate","cmd_FullUpDate")

register_event("CurWeapon","Event_CurWeapon","be","1=1")
register_event("DeathMsg","Event_DeathMsg","a")
register_event("HLTV","Event_NewRound", "a","1=0","2=0")
register_event("ResetHUD","Event_HudReset","be")
register_event("TextMsg","Event_WeaponDrop","be","2=#Weapon_Cannot_Be_Dropped")
register_event("TextMsg","Event_RestartAttempt","a","2=#Game_will_restart_in")
register_event("StatusIcon","Event_BuyZone","b","2=buyzone")

register_logevent("LogEvent_RoundStart",2,"1=Round_Start")
register_logevent("LogEvent_RoundEnd",2,"1=Round_End")

register_forward(FM_CmdStart,"fw_CmdStart")
register_forward(FM_EmitSound,"fw_EmitSound")

gmsgDeathMsg = get_user_msgid("DeathMsg")
gmsgScoreInfo = get_user_msgid("ScoreInfo")

get_modname(mod_name,31)
is_cstrike = equal(mod_name,"cstrike") ? true : false

}

public plugin_precache () {

precache_model("models/w_rpg.mdl")
precache_model("models/v_rpg.mdl")
precache_model("models/p_rpg.mdl")
precache_model("models/rpgrocket.mdl")

precache_model("models/v_knife.mdl")
precache_model("models/p_knife.mdl")
precache_model("models/shield/v_shield_knife.mdl")
precache_model("models/shield/p_shield_knife.mdl")

precache_sound("items/gunpickup4.wav")

precache_sound("weapons/nuke_fly.wav")
precache_sound("weapons/dryfire1.wav")
precache_sound("weapons/mortarhit.wav")
precache_sound("weapons/rocketfire1.wav")

precache_sound("ambience/particle_suck2.wav")

spr_blood_drop = precache_model("sprites/blood.spr")
spr_blood_spray = precache_model("sprites/bloodspray.spr")

mdl_gib_lung = precache_model("models/GIB_Lung.mdl")
mdl_gib_meat = precache_model("models/GIB_B_Gib.mdl")
mdl_gib_head = precache_model("models/GIB_Skull.mdl")
mdl_gib_flesh = precache_model("models/Fleshgibs.mdl")
mdl_gib_spine = precache_model("models/GIB_B_Bone.mdl")
mdl_gib_legbone = precache_model("models/GIB_Legbone.mdl")

g_sModelIndexSmoke = precache_model("sprites/steam1.spr")
g_sModelIndexFireball = precache_model("sprites/zerogxplode.spr")

RocketSmoke = precache_model("sprites/smoke.spr")

}

stock bool:has_shield(id) {

new modelName[32]
entity_get_string(id, EV_SZ_viewmodel, modelName, 31)

if(containi(modelName, "v_shield_") != -1) return true

return false

}

public Event_BuyZone(id) {

g_buyzone[id] = read_data(1)

}

public get_restrict_flags () {

new sFlags[24]
get_pcvar_string(cvar_bazooka_restrict,sFlags,24)
iFlags = read_flags(sFlags)

}

public client_connect (id) {

Rocket_Mode[id] = 1
Has_Bazooka[id] = false
Allow_Shooting[id] = false
Bazooka_Active[id] = false
E_KeyPress_Delay[id] = false

}

public client_disconnect (id) {

Rocket_Mode[id] = 1
Has_Bazooka[id] = false
Allow_Shooting[id] = false
Bazooka_Active[id] = false
E_KeyPress_Delay[id] = false

}

// Freeze Time.
public Event_NewRound () {

new iCurrent = find_ent_by_class(-1, "rpgrocket")
while ((iCurrent = find_ent_by_class(-1, "rpgrocket")) != 0) {

new id = entity_get_edict(iCurrent, EV_ENT_owner)
remove_missile(id,iCurrent)

}

}

// Player Spawn
public Event_PlayerSpawn (id) {

// Reset Bazooka's Ammo
Bazooka_Ammo1[id] = get_pcvar_num(cvar_bazooka_ammo1)
Bazooka_Ammo2[id] = get_pcvar_num(cvar_bazooka_ammo2)
Bazooka_Ammo3[id] = get_pcvar_num(cvar_bazooka_ammo3)

// Gibs - Unhide Players
set_user_rendering(id,kRenderFxNone,0,0,0,kRenderTransAlpha,255)

// Removed any rockets in world.
new Rocket = find_ent_by_class(-1, "rpgrocket")
while (Rocket > 0) {

remove_entity(Rocket)
Rocket = find_ent_by_class(Rocket, "rpgrocket")

}

// Removed any rpglancher in world.
new RPG = find_ent_by_class(-1, "rpglancher")
while (RPG > 0) {

remove_entity(RPG)

RPG = find_ent_by_class(RPG, "rpglancher")

}

new v_oldmodel[64], p_oldmodel[64]

entity_get_string(id, EV_SZ_viewmodel, v_oldmodel, 63)
entity_get_string(id, EV_SZ_weaponmodel, p_oldmodel, 63)

if (equal(v_oldmodel, "models/v_rpg.mdl") || equal(p_oldmodel, "models/p_rpg.mdl")) {

if (!Has_Bazooka[id]) {

new weaponid, clip, ammo
weaponid = get_user_weapon(id, clip, ammo)

new weaponname[64]
get_weaponname(weaponid, weaponname, 63)

new v_model[64], p_model[64]
format(v_model, 63, "%s", weaponname)
format(p_model, 63, "%s", weaponname)

replace(v_model, 63, "weapon_", "v_")
format(v_model, 63, "models/%s.mdl", v_model)
entity_set_string(id, EV_SZ_viewmodel, v_model)

replace(p_model, 63, "weapon_", "p_")
format(p_model, 63, "models/%s.mdl", p_model)
entity_set_string(id, EV_SZ_weaponmodel, p_model)

}
}

return PLUGIN_CONTINUE

}

// New Round - Freeze Time End.
public LogEvent_RoundStart () {

RoundEnd = false

new players[32], num
get_players(players, num, "a")

for (new i; i < num; ++i)
if (Has_Bazooka[players[i]])
Allow_Shooting[players[i]] = true

return PLUGIN_CONTINUE

}

// Round End
public LogEvent_RoundEnd () {

RoundEnd = true

new players[32], num
get_players(players, num, "a")

for (new i; i < num; ++i)
if (Has_Bazooka[players[i]])
Allow_Shooting[players[i]] = false

return PLUGIN_CONTINUE

}

public cmd_FullUpDate () {

return PLUGIN_HANDLED

}

public Event_RestartAttempt () {

new players[32], num
get_players(players, num, "a")

for (new i; i < num; ++i)
g_restart_attempt[players[i]] = true

}

public Event_HudReset (id) {

if (g_restart_attempt[id]) {

g_restart_attempt[id] = false

return

}

Event_PlayerSpawn (id)

}

public rpg_idle (data[]) {

if (get_pcvar_num(cvar_bazooka_animation) == 1) {

if ((Bazooka_Ammo1[data[0]] > 0) && (Rocket_Mode[data[0]] == 1))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE)

if ((Bazooka_Ammo2[data[0]] > 0) && (Rocket_Mode[data[0]] == 2))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE)

if ((Bazooka_Ammo3[data[0]] > 0) && (Rocket_Mode[data[0]] == 3))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE)

if ((Bazooka_Ammo1[data[0]] <= 0) && (Rocket_Mode[data[0]] == 1))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE2)

if ((Bazooka_Ammo2[data[0]] <= 0) && (Rocket_Mode[data[0]] == 2))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE2)

if ((Bazooka_Ammo3[data[0]] <= 0) && (Rocket_Mode[data[0]] == 3))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE2)

}

}

public rpg_reload_start (data[]) {

if (get_pcvar_num(cvar_bazooka_animation) == 1) {

if ((Bazooka_Ammo1[data[0]] > 0) && (Rocket_Mode[data[0]] == 1))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_RELOAD)

if ((Bazooka_Ammo2[data[0]] > 0) && (Rocket_Mode[data[0]] == 2))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_RELOAD)

if ((Bazooka_Ammo3[data[0]] > 0) && (Rocket_Mode[data[0]] == 3))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_RELOAD)

if ((Bazooka_Ammo1[data[0]] <= 0) && (Rocket_Mode[data[0]] == 1))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE2)

if ((Bazooka_Ammo2[data[0]] <= 0) && (Rocket_Mode[data[0]] == 2))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE2)

if ((Bazooka_Ammo3[data[0]] <= 0) && (Rocket_Mode[data[0]] == 3))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_IDLE2)

}

}

public rpg_fidget (data[]) {

if (!RoundEnd) Allow_Shooting[data[0]] = true

if (get_pcvar_num(cvar_bazooka_animation) == 1) {

if ((Bazooka_Ammo1[data[0]] > 0) && (Rocket_Mode[data[0]] == 1))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_FIDGET)

if ((Bazooka_Ammo2[data[0]] > 0) && (Rocket_Mode[data[0]] == 2))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_FIDGET)

if ((Bazooka_Ammo3[data[0]] > 0) && (Rocket_Mode[data[0]] == 3))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_FIDGET)

if ((Bazooka_Ammo1[data[0]] <= 0) && (Rocket_Mode[data[0]] == 1))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_FIDGET2)

if ((Bazooka_Ammo2[data[0]] <= 0) && (Rocket_Mode[data[0]] == 2))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_FIDGET2)

if ((Bazooka_Ammo3[data[0]] <= 0) && (Rocket_Mode[data[0]] == 3))
entity_set_int(data[0], EV_INT_weaponanim, SEQ_FIDGET2)

set_task(6.0, "rpg_idle", data[0]+2023, data[0], 1)

}

}

public fw_EmitSound (id, channel, sample[]) {

if(!is_user_alive(id) || !is_user_connected(id))
return FMRES_IGNORED

if(Bazooka_Active[id]) {

if(containi(sample, "weapons/knife") != -1)
return FMRES_SUPERCEDE

}

return FMRES_IGNORED

}

public fire_rocket (id) {

new data[1]

data[0] = id

//Start reload animation.
set_task(1.0, "rpg_reload_start", id+2021, data, 1)

//Ends reload animation and enables fireing.
set_task(3.1, "rpg_fidget", id+2022, data, 1)

new Float:StartOrigin[3], Float:Angle[3]

new PlayerOrigin[3]

get_user_origin(id, PlayerOrigin, 1)

StartOrigin[0] = float(PlayerOrigin[0])
StartOrigin[1] = float(PlayerOrigin[1])
StartOrigin[2] = float(PlayerOrigin[2])

entity_get_vector(id, EV_VEC_v_angle, Angle)

Angle[0] = Angle[0] * -1.0

new RocketEnt = create_entity("info_target")

entity_set_string(RocketEnt, EV_SZ_classname, "rpgrocket")
entity_set_model(RocketEnt, "models/rpgrocket.mdl")
entity_set_origin(RocketEnt, StartOrigin)
entity_set_vector(RocketEnt, EV_VEC_angles, Angle)

new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}

entity_set_vector(RocketEnt, EV_VEC_mins, MinBox)
entity_set_vector(RocketEnt, EV_VEC_maxs, MaxBox)

entity_set_int(RocketEnt, EV_INT_solid, 2)
entity_set_int(RocketEnt, EV_INT_movetype, 5)
entity_set_edict(RocketEnt, EV_ENT_owner, id)

new Float:Velocity[3]
new myvelocity = get_pcvar_num(cvar_bazooka_velocity)

VelocityByAim(id, myvelocity, Velocity)
entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)

new CsTeams:iTeam = cs_get_user_team(id)
new TrailTime = get_pcvar_num(cvar_bazooka_trailtime )

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(RocketEnt)
write_short(RocketSmoke)
write_byte(TrailTime)
write_byte(5)

if (get_pcvar_num(cvar_bazooka_trailcolor) == 0) {

// Color = White
write_byte(254)
write_byte(254)
write_byte(254)
write_byte(255)

}

else if (get_pcvar_num(cvar_bazooka_trailcolor) == 1) {

switch(iTeam) {

// if team T Color = Red
case CS_TEAM_T: {

write_byte(255)
write_byte(0)
write_byte(0)
write_byte(255)

}

// if team CT Color = Blue
case CS_TEAM_CT: {

write_byte(0)
write_byte(0)
write_byte(255)
write_byte(255)

}
}
}

else {

// random colors
write_byte(random_num(0,255))
write_byte(random_num(0,255))
write_byte(random_num(0,255))
write_byte(255)

}

message_end()

emit_sound(RocketEnt, CHAN_WEAPON, "weapons/rocketfire1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
emit_sound(RocketEnt, CHAN_VOICE, "weapons/nuke_fly.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

if (Rocket_Mode[id] == 1) Bazooka_Ammo1[id]--

if (Rocket_Mode[id] == 2) {

new info[1]
info[0] = RocketEnt
set_task(0.5, "find_and_follow", 0, info, 1)

Bazooka_Ammo2[id]--

}

else if (Rocket_Mode[id] == 3) {

entity_set_int(RocketEnt, EV_INT_rendermode, 1)
attach_view(id, RocketEnt)

User_Control[id] = RocketEnt

Bazooka_Ammo3[id]--

}

return PLUGIN_HANDLED

}

public find_and_follow (info[]) {

new RocketEnt = info[0]
new Float:shortestDist = 10000.0
new nearestPlayer = 0

if (is_valid_ent(RocketEnt)) {

new players[32], count

get_players(players, count)

for (new i = 0; i < count; i++) {

if (is_user_alive(players[i])
&& (entity_get_edict(RocketEnt, EV_ENT_owner) != players[i])
&& (get_user_team(players[i]) != get_user_team(entity_get_edict(RocketEnt, EV_ENT_owner)))) {

new Float:PlayerOrigin[3], Float:RocketOrigin[3]

entity_get_vector(players[i], EV_VEC_origin, PlayerOrigin)
entity_get_vector(RocketEnt, EV_VEC_origin, RocketOrigin)

new Float:Distance = vector_distance(PlayerOrigin, RocketOrigin)

if (Distance <= shortestDist) {

shortestDist = Distance
nearestPlayer = players[i]

}

}

}

}

if (nearestPlayer > 0) {

new data[2]

data[0] = RocketEnt
data[1] = nearestPlayer

set_task(0.1, "follow_and_catch", RocketEnt, data, 2, "b")

}

else {

pfn_touch(RocketEnt, 0)

}
}

public follow_and_catch (data[]) {

new RocketEnt = data[0]
new target = data[1]
new myvelocity = get_pcvar_num(cvar_bazooka_velocity)

if (is_user_alive(target) && is_valid_ent(RocketEnt)) {

entity_set_follow(RocketEnt, target, (myvelocity + 0.0))

new Float:Velocity[3]
new Float:NewAngle[3]

entity_get_vector(RocketEnt, EV_VEC_velocity, Velocity)
vector_to_angle(Velocity, NewAngle)
entity_set_vector(RocketEnt, EV_VEC_angles, NewAngle)

}

else {

if (task_exists(RocketEnt))
remove_task(RocketEnt)

new info[1]

info[0] = RocketEnt

set_task(0.1, "find_and_follow", 0, data, 1)

}

}

public entity_set_follow (entity, target, Float:speed) {

if (!is_valid_ent(entity) || !is_valid_ent(target)) return

new Float:entity_origin[3], Float:target_origin[3]
entity_get_vector(entity, EV_VEC_origin, entity_origin)
entity_get_vector(target, EV_VEC_origin, target_origin)

new Float:diff[3]
diff[0] = target_origin[0] - entity_origin[0]
diff[1] = target_origin[1] - entity_origin[1]
diff[2] = target_origin[2] - entity_origin[2]

new Float:length = floatsqroot(floatpower(diff[0], 2.0) + floatpower(diff[1], 2.0) + floatpower(diff[2], 2.0))

new Float:Velocity[3]
Velocity[0] = diff[0] * (speed / length)
Velocity[1] = diff[1] * (speed / length)
Velocity[2] = diff[2] * (speed / length)

entity_set_vector(entity, EV_VEC_velocity, Velocity)

return

}

public remove_missile (id,missile) {

new Float:fl_origin[3]

entity_get_vector(missile, EV_VEC_origin, fl_origin)

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_IMPLOSION)
write_coord(floatround(fl_origin[0]))
write_coord(floatround(fl_origin[1]))
write_coord(floatround(fl_origin[2]))
write_byte (200)
write_byte (40)
write_byte (45)
message_end()

emit_sound(missile, CHAN_WEAPON, "ambience/particle_suck2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
emit_sound(missile, CHAN_VOICE, "ambience/particle_suck2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

User_Control[id] = 0

attach_view(id,id)
remove_entity(missile)

return PLUGIN_CONTINUE

}

public pfn_touch (toucher, touched) {

new ClassName1[32]
new ClassName2[32]

if(!is_valid_ent(toucher))
return PLUGIN_CONTINUE

if (is_valid_ent(toucher))
entity_get_string(toucher, EV_SZ_classname, ClassName1, 31)

if (is_valid_ent(touched))
entity_get_string(touched, EV_SZ_classname, ClassName2, 31)

if (equal(ClassName1, "rpgrocket")) {

new vExplodeAt[3]
new Float:fl_vExplodeAt[3]
entity_get_vector(toucher, EV_VEC_origin, fl_vExplodeAt)

vExplodeAt[0] = floatround(fl_vExplodeAt[0])
vExplodeAt[1] = floatround(fl_vExplodeAt[1])
vExplodeAt[2] = floatround(fl_vExplodeAt[2])

emit_sound(toucher, CHAN_WEAPON, "weapons/mortarhit.wav", 1.0, 0.5, 0, PITCH_NORM)
emit_sound(toucher, CHAN_VOICE, "weapons/mortarhit.wav", 1.0, 0.5, 0, PITCH_NORM)

for (new Explosion = 1; Explosion < 8; Explosion++) {

// Random Explosion 8 Times
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SPRITE)
write_coord(vExplodeAt[0] + random_num(-60,60))
write_coord(vExplodeAt[1] + random_num(-60,60))
write_coord(vExplodeAt[2] +128)
write_short(g_sModelIndexFireball)
write_byte(random_num(30,65))
write_byte(255)
message_end()

}

for (new Smoke = 1; Smoke < 3; Smoke++) {

// Random Smoke 3 Times
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SMOKE)
write_coord(vExplodeAt[0])
write_coord(vExplodeAt[1])
write_coord(vExplodeAt[2] + 256)
write_short(g_sModelIndexSmoke)
write_byte(random_num(80,150))
write_byte(random_num(5,10))
message_end()
}

// Create the burn decal
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord(vExplodeAt[0])
write_coord(vExplodeAt[1])
write_coord(vExplodeAt[2])
write_short(0)

if (is_cstrike) write_byte(random_num(46,48)) // decal
if (!is_cstrike) write_byte(random_num(58,60)) // decal

message_end()

new Max_Damage = get_pcvar_num(cvar_bazooka_max_damage)
new Damage_Radius = get_pcvar_num(cvar_bazooka_damage_radius )

new PlayerPos[3], Distance, Damage

for (new i = 1; i < 32; i++) {

if (is_user_alive(i) == 1) {

new team_kill = 0
get_user_origin(i, PlayerPos)

Distance = get_distance(PlayerPos, vExplodeAt)

if (Distance <= Damage_Radius) { // Screenshake Radius

message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, i) // Shake Screen
write_short(1<<14)
write_short(1<<14)
write_short(1<<14)
message_end()

new attacker = entity_get_edict(toucher, EV_ENT_owner)

Damage = Max_Damage - floatround(floatmul(float(Max_Damage), floatdiv(float(Distance), float(Damage_Radius))))

if (!get_user_godmode(i)) {

if(cvar_exists("mp_friendlyfire")) {

if( get_cvar_num("mp_friendlyfire") && get_pcvar_num(cvar_bazooka_obeyffcvar)) {

if(get_user_team(i) == get_user_team(attacker))
team_kill = 1

do_victim(i,attacker,Damage,team_kill)

}

else {

if(get_user_team(i) != get_user_team(attacker))
do_victim(i,attacker,Damage,team_kill)

}

}

else {

do_victim(i,attacker,Damage,team_kill)

}


}

else {

do_victim(i,attacker,Damage,team_kill)

}

}

}

}

new owner = entity_get_edict(toucher, EV_ENT_owner)
attach_view(owner, owner)
User_Control[owner] = 0
remove_entity(toucher)

//*******************************************************************
// force_use all func_breakable entites within 1/4 of Damage radius *
//*******************************************************************
static Entity_List[21]

new entites_in_radius
entites_in_radius = find_sphere_class(0, "func_breakable",Damage_Radius * 0.20,Entity_List,20,fl_vExplodeAt)

for(new i=0;i < entites_in_radius; i++) {

force_use(Entity_List[i],Entity_List[i])
remove_task(Entity_List[i])

}

}

if (equal(ClassName1, "rpglancher")) {

if(Has_Bazooka[touched])
return PLUGIN_CONTINUE

if(has_shield(touched))
return PLUGIN_CONTINUE

new Picker[32]

if (is_valid_ent(touched))
entity_get_string(touched, EV_SZ_classname, Picker, 31)

if (equal(Picker, "player")) {

give_item(touched, "weapon_knife")

Allow_Shooting[touched] = true
Has_Bazooka[touched] = true

Bazooka_Ammo1[touched] = entity_get_int(toucher, EV_INT_iuser1)
Bazooka_Ammo2[touched] = entity_get_int(toucher, EV_INT_iuser2)
Bazooka_Ammo3[touched] = entity_get_int(toucher, EV_INT_iuser3)

client_print(touched, print_chat, "[Bazooka] You have picked up a bazooka!")
emit_sound(touched, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

remove_entity(toucher)

new temp[2], weaponID = get_user_weapon(touched, temp[0], temp[1])

if(weaponID == CSW_KNIFE) {

Bazooka_Active[touched] = true
Event_CurWeapon(touched)

if (Bazooka_Ammo1[touched] > 0) entity_set_int(touched, EV_INT_weaponanim, SEQ_RELOAD)
if (Bazooka_Ammo1[touched] <= 0) entity_set_int(touched, EV_INT_weaponanim, SEQ_IDLE2)

}

}


}

return PLUGIN_CONTINUE

}

public do_victim (victim,attacker,Damage,team_kill) {

new namek[32],namev[32],authida[35],authidv[35],teama[32],teamv[32]

get_user_name(victim,namev,31)
get_user_name(attacker,namek,31)
get_user_authid(victim,authidv,34)
get_user_authid(attacker,authida,34)
get_user_team(victim,teamv,31)
get_user_team(attacker,teama,31)

if(Damage >= get_user_health(victim)) {

if(get_cvar_num("mp_logdetail") == 3) {

log_message("^"%s<%d><%s><%s>^" attacked ^"%s<%d><%s><%s>^" with ^"missile^" (hit ^"chest^") (Damage ^"%d^") (health ^"0^")",
namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),auth
idv,teamv,Damage)

}

client_print(attacker,print_chat,"[AMXX] You killed %s with that missile",namev)
client_print(victim,print_chat,"[AMXX] You were killed by %s's missile",namek)

if(team_kill == 0) {

set_user_frags(attacker,get_user_frags(attacker) + 1 )

}

else {

Team_Kill_Count[attacker] += 1
client_print(attacker,print_center,"You killed a teammate")
set_user_frags(attacker,get_user_frags(attacker) - 1 )

}

set_msg_block(gmsgDeathMsg,BLOCK_ONCE)
set_msg_block(gmsgScoreInfo,BLOCK_ONCE)

user_kill(victim,1)

replace_dm(attacker,victim,0)

log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"missile^"",
namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),auth
idv,teamv)

if (Damage > 100 && get_pcvar_num(cvar_bazooka_gib_death) == 1) {

new iOrigin[3]
get_user_origin(victim,iOrigin)
set_user_rendering(victim,kRenderFxNone,0,0,0,kRenderTransAlpha,0)
fx_gib_explode(iOrigin,3)
fx_blood_large(iOrigin,5)
fx_blood_small(iOrigin,15)
iOrigin[2] = iOrigin[2] - 20
set_user_origin(victim,iOrigin)

}

}

else {

set_user_health(victim,get_user_health(victim) - Damage )

if(get_cvar_num("mp_logdetail") == 3) {

log_message("^"%s<%d><%s><%s>^" attacked ^"%s<%d><%s><%s>^" with ^"missile^" (hit ^"chest^") (Damage ^"%d^") (health ^"%d^")",
namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),auth
idv,teamv,Damage,get_user_health(victim))

}

client_print(attacker,print_chat,"[AMXX] You hurt %s with that missile",namev)
client_print(victim,print_chat,"[AMXX] You were hurt by %s's missile",namek)

}

if (team_kill) {

new players[32],pNum

get_players(players,pNum,"e",teama)

for(new i=0;i<pNum;i++) {

client_print(players[i],print_chat,"%s attacked a teammate",namek)

new punish1 = get_pcvar_num(cvar_bazooka_tkpunish1)
new punish2 = get_pcvar_num(cvar_bazooka_tkpunish2)

if (!(get_user_flags(attacker)&ADMIN_IMMUNITY)) {

if (punish1 > 2) {

user_kill(attacker,0)
set_hudmessage(255,50,50, -1.0, 0.45, 0, 0.02, 10.0, 1.01, 1.1, 4)
show_hudmessage(attacker,"YOU WERE KILLED FOR ATTACKING TEAMMATES.^nSEE THAT IT HAPPENS NO MORE!")

}

if((punish1) && (Team_Kill_Count[attacker] >= punish2 )) {

if(punish1 == 1 || punish1 == 3) {

client_cmd(attacker,"echo You were kicked for team killing;disconnect")
}

else if(punish1 == 2 || punish1 == 4) {

client_cmd(attacker,"echo You were banned for team killing")

if (equal("4294967295",authida)) {

new ipa[32]
get_user_ip(attacker,ipa,31,1)
server_cmd("addip 180.0 %s;writeip",ipa)

}

else {

server_cmd("banid 180.0 %s kick;writeid",authida)

}

}

}

}

}

}

}

public replace_dm (id,tid,tbody) {

//Update killers scorboard with new info
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(id)
write_short(get_user_frags(id))
write_short(get_user_deaths(id))
write_short(0)
write_short(get_user_team(id))
message_end()

//Update victims scoreboard with correct info
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(tid)
write_short(get_user_frags(tid))
write_short(get_user_deaths(tid))
write_short(0)
write_short(get_user_team(tid))
message_end()

//Headshot Kill
if (tbody == 1) {

message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
write_byte(id)
write_byte(tid)
write_string(" missile")
message_end()

}

//Normal Kill
else {

message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
write_byte(id)
write_byte(tid)
write_byte(0)
write_string("missile")
message_end()

}

return PLUGIN_CONTINUE

}

public cmd_Drop_Bazooka (id, level, cid) {

if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED

drop_lancher(id,0)

return PLUGIN_HANDLED

}

public drop_rpglancher (id) {

drop_lancher(id,1)

Bazooka_Ammo1[id] = 0
Bazooka_Ammo2[id] = 0
Bazooka_Ammo3[id] = 0
Has_Bazooka[id] = false
Bazooka_Active[id] = false

Event_CurWeapon(id)

return PLUGIN_HANDLED

}

public drop_lancher (id, sel) {

new Float:PlayerOrigin[3], Float:End[3], Float:Return[3], Float:TraceDirection[3], Float:Angles[3]

if (sel == 0) VelocityByAim(id, 64, TraceDirection)
if (sel == 1) VelocityByAim(id, 200, TraceDirection)

entity_get_vector(id, EV_VEC_origin, PlayerOrigin)

if (sel == 1) entity_get_vector(id, EV_VEC_angles, Angles)

End[0] = TraceDirection[0] + PlayerOrigin[0]
End[1] = TraceDirection[1] + PlayerOrigin[1]
End[2] = TraceDirection[2] + PlayerOrigin[2]

trace_line(id, PlayerOrigin, End, Return)

Return[2] = PlayerOrigin[2]

new RPG = create_entity("info_target")

entity_set_string(RPG, EV_SZ_classname, "rpglancher")
entity_set_model(RPG, "models/w_rpg.mdl")
entity_set_origin(RPG, Return)

if (sel == 1) {

Angles[0] = 0.0
Angles[2] = 0.0

}

if ( sel == 0) entity_set_vector(RPG, EV_VEC_angles, Angles)

new Float:MinBox[3] = {-16.0, -16.0, 0.0}
new Float:MaxBox[3] = {16.0, 16.0, 16.0}

entity_set_vector(RPG, EV_VEC_mins, MinBox)
entity_set_vector(RPG, EV_VEC_maxs, MaxBox)

entity_set_int(RPG, EV_INT_solid, 1)
entity_set_int(RPG, EV_INT_movetype, 6)

if (sel == 0) entity_set_int(RPG, EV_INT_iuser1, get_pcvar_num(cvar_bazooka_ammo1))
if (sel == 0) entity_set_int(RPG, EV_INT_iuser2, get_pcvar_num(cvar_bazooka_ammo2))
if (sel == 0) entity_set_int(RPG, EV_INT_iuser3, get_pcvar_num(cvar_bazooka_ammo3))

if (sel == 1) entity_set_int(RPG, EV_INT_iuser1, Bazooka_Ammo1[id])
if (sel == 1) entity_set_int(RPG, EV_INT_iuser2, Bazooka_Ammo2[id])
if (sel == 1) entity_set_int(RPG, EV_INT_iuser3, Bazooka_Ammo3[id])

return PLUGIN_HANDLED

}

public delay (data2[]) {

E_KeyPress_Delay[data2[0]] = false

}

public fw_CmdStart (id, uc_handle, seed) {

if(!is_user_connected(id)) return FMRES_IGNORED
if(!is_user_alive(id)) return FMRES_IGNORED
if(!Has_Bazooka[id]) return FMRES_IGNORED

if(has_shield(id)) {

drop_rpglancher(id)
return FMRES_IGNORED

}

if (Bazooka_Active[id]) ammo_hud(id, 1)
if (!Bazooka_Active[id]) ammo_hud(id, 0)

new weaponid, clip, ammo
weaponid = get_user_weapon(id, clip, ammo)

if (weaponid == CSW_KNIFE) {

new buttons = get_uc(uc_handle, UC_Buttons)
new inuse = get_user_button(id) & IN_USE
new attack = get_user_button(id) & IN_ATTACK
new attack2 = get_user_button(id) & IN_ATTACK2
new oldinuse = get_user_oldbutton(id) & IN_USE
new oldattack = get_user_oldbutton(id) & IN_ATTACK
new oldattack2 = get_user_oldbutton(id) & IN_ATTACK2

if((inuse) && (oldinuse) && (!E_KeyPress_Delay[id]))
return FMRES_IGNORED

if(buttons & IN_USE)
buttons &= ~IN_USE

if((buttons & IN_ATTACK) && Bazooka_Active[id])
buttons &= ~IN_ATTACK

if((buttons & IN_ATTACK2) && Bazooka_Active[id])
buttons &= ~IN_ATTACK2

set_uc(uc_handle, UC_Buttons, buttons)

if((inuse) && !(oldinuse)) {

new data2[1]

data2[0] = id

E_KeyPress_Delay[id] = true

set_task(0.2,"delay", id+2023, data2, 1)

if (Bazooka_Active[id])
Bazooka_Active[id] = false

else
Bazooka_Active[id] = true

Event_CurWeapon(id)

}

else if (attack && !oldattack && Bazooka_Active[id]) {

if (Rocket_Mode[id] == 1 && Bazooka_Ammo1[id] <= 0) {

emit_sound(id, CHAN_WEAPON, "weapons/dryfire1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

return FMRES_SUPERCEDE

}

if (Rocket_Mode[id] == 2 && Bazooka_Ammo2[id] <= 0) {

emit_sound(id, CHAN_WEAPON, "weapons/dryfire1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

return FMRES_SUPERCEDE

}

if (Rocket_Mode[id] == 3 && Bazooka_Ammo3[id] <= 0) {

emit_sound(id, CHAN_WEAPON, "weapons/dryfire1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

return FMRES_SUPERCEDE

}

if (Allow_Shooting[id] && (User_Control[id] == 0)) {

remove_task (id+2023)

Allow_Shooting[id] = false

entity_set_int(id, EV_INT_weaponanim, SEQ_FIRE)

fire_rocket(id)

}

}

else if (attack2 && !oldattack2 && Bazooka_Active[id]) {

get_restrict_flags()

Old_Rocket_Mode[id] = Rocket_Mode[id]

if ((Rocket_Mode[id] == 1) && (iFlags&BA_HEAT) != BA_HEAT) Rocket_Mode[id] = 2

else if ((Rocket_Mode[id] == 1) && (iFlags&BA_USER) != BA_USER) Rocket_Mode[id] = 3
else if ((Rocket_Mode[id] == 2) && (iFlags&BA_USER) != BA_USER) Rocket_Mode[id] = 3
else if ((Rocket_Mode[id] == 2) && (iFlags&BA_NORMAL) != BA_NORMAL) Rocket_Mode[id] = 1
else if ((Rocket_Mode[id] == 3) && (iFlags&BA_NORMAL) != BA_NORMAL) Rocket_Mode[id] = 1
else if ((Rocket_Mode[id] == 3) && (iFlags&BA_HEAT) != BA_HEAT) Rocket_Mode[id] = 2

if(Old_Rocket_Mode[id] == Rocket_Mode[id]) {

client_print(id, print_center, "The other modes are restricted")
return FMRES_SUPERCEDE

}

if (Rocket_Mode[id] == 1) client_print(id, print_center, "Switched to Normal Mode.")
if (Rocket_Mode[id] == 2) client_print(id, print_center, "Switched to Heat-Seeking Mode.")
if (Rocket_Mode[id] == 3) client_print(id, print_center, "Switched to User-Guided Mode.")

//emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

Event_CurWeapon(id)

}

}

if (User_Control[id] > 0) {

new RocketEnt = User_Control[id]

if (is_valid_ent(RocketEnt)) {

new Float:Velocity[3]
new Float:NewAngle[3]

VelocityByAim(id, 500, Velocity)

entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)

entity_get_vector(id, EV_VEC_v_angle, NewAngle)
entity_set_vector(RocketEnt, EV_VEC_angles, NewAngle)

}

else {

attach_view(id, id)

}

}

return FMRES_HANDLED

}

public cmd_BuyBazooka (id) {

if (get_pcvar_num(cvar_bazooka_buyable) == 0)
return PLUGIN_CONTINUE

new iMoney = cs_get_user_money(id)
new iCost = get_pcvar_num(cvar_bazooka_cost)

if(!is_user_alive(id))
client_print(id, print_center, "You cant buy when your dead!")

else if(Has_Bazooka[id])
client_print(id, print_center, "You already own that weapon.")

else if(has_shield(id))
client_print(id, print_center, "You cant buy bazooka when you have shield.")

else if(iMoney < iCost)
client_print(id, print_center, "Insufficient funds! ($%d)", iCost)

else if(get_pcvar_num(cvar_bazooka_obeybuyzone) == 1 && !g_buyzone[id])
client_print(id, print_center, "You need to be in the buyzone")

else {

give_item(id, "weapon_knife")

Has_Bazooka[id] = true
Allow_Shooting[id] = true

Bazooka_Ammo1[id] = get_pcvar_num(cvar_bazooka_ammo1)
Bazooka_Ammo2[id] = get_pcvar_num(cvar_bazooka_ammo2)
Bazooka_Ammo3[id] = get_pcvar_num(cvar_bazooka_ammo3)

cs_set_user_money(id, cs_get_user_money(id) - get_pcvar_num(cvar_bazooka_cost))
client_print(id, print_chat, "[Bazooka] You have successfully bought a bazooka!")
client_print(id, print_chat, "[Bazooka] What are you going to do now!?")

new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])

if(weaponID == CSW_KNIFE) {

Bazooka_Active[id] = true
Event_CurWeapon(id)
entity_set_int(id, EV_INT_weaponanim, SEQ_FIDGET)

}

else {

Bazooka_Active[id] = true
client_cmd(id, "weapon_knife")

}

emit_sound(id, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

}

return PLUGIN_HANDLED

}

public cmd_GiveBazooka (id, level, cid) {

if(!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED

new Arg1[64], target
read_argv(1, Arg1, 63)

new adminName[32]
get_user_name(id, adminName, 31)

new targetTeam
new Players[32], iNum

if(Arg1[0] == '@') {

if(equali(Arg1[1], "all")) {

targetTeam = 0
get_players(Players, iNum, "a")

}

else if(equali(Arg1[1], "t")) {

targetTeam = 1
get_players(Players, iNum, "ae" , "terrorist")

}

else if(equali(Arg1[1], "ct")) {

targetTeam = 2
get_players(Players, iNum, "ae" , "ct")

}

for(new i = 0; i < iNum; ++i) {

target = Players[i]

give_item(target, "weapon_knife")

Has_Bazooka[target] = true
Allow_Shooting[target] = true

Bazooka_Ammo1[target] = get_pcvar_num(cvar_bazooka_ammo1)
Bazooka_Ammo2[target] = get_pcvar_num(cvar_bazooka_ammo2)
Bazooka_Ammo3[target] = get_pcvar_num(cvar_bazooka_ammo3)

new temp[2], weaponID = get_user_weapon(target, temp[0], temp[1])

if(weaponID == CSW_KNIFE) {

Bazooka_Active[target] = true
Event_CurWeapon(target)
entity_set_int(target, EV_INT_weaponanim, SEQ_FIDGET)

}

else {

Bazooka_Active[target] = true
client_cmd(target, "weapon_knife")

}

emit_sound(target, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

client_print(target, print_chat, "You have been given a bazooka")

}

switch(targetTeam) {

case 0: client_print(0, print_chat, "Admin: %s has given everyone a bazooka", adminName)
case 1: client_print(0, print_chat, "Admin: %s has given all terrorist a bazooka", adminName)
case 2: client_print(0, print_chat, "Admin: %s has given all ct's a bazooka", adminName)

}

}

else {

target = cmd_target(id, Arg1, 0)

if(!is_user_connected(target) || !is_user_alive(target))
return PLUGIN_HANDLED

new targetName[32]
get_user_name(target, targetName, 31)

give_item(target, "weapon_knife")

Has_Bazooka[target] = true
Allow_Shooting[target] = true

Bazooka_Ammo1[target] = get_pcvar_num(cvar_bazooka_ammo1)
Bazooka_Ammo2[target] = get_pcvar_num(cvar_bazooka_ammo2)
Bazooka_Ammo3[target] = get_pcvar_num(cvar_bazooka_ammo3)

new temp[2], weaponID = get_user_weapon(target, temp[0], temp[1])

if(weaponID == CSW_KNIFE) {

Bazooka_Active[target] = true
Event_CurWeapon(target)
entity_set_int(target, EV_INT_weaponanim, SEQ_FIDGET)

}

else {

Bazooka_Active[target] = true
client_cmd(target, "weapon_knife")

}

emit_sound(target, CHAN_WEAPON, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

client_print(target, print_chat, "You have been given a bazooka.")
client_print(target, print_chat, "Admin: %s has given you a bazooka", adminName)

}

return PLUGIN_HANDLED

}

public Event_CurWeapon (id) {

if(!is_user_alive(id))
return PLUGIN_CONTINUE

new weaponid, clip, ammo

weaponid = get_user_weapon(id, clip, ammo)

if ((weaponid == CSW_KNIFE) && (Bazooka_Active[id])) {

entity_set_string(id, EV_SZ_viewmodel, "models/v_rpg.mdl")
entity_set_string(id, EV_SZ_weaponmodel, "models/p_rpg.mdl")
entity_set_int(id, EV_INT_weaponanim, SEQ_FIDGET)
emit_sound(id, CHAN_ITEM, "common/wpn_select.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

return PLUGIN_HANDLED

}

if ((weaponid == CSW_KNIFE) && (!Bazooka_Active[id])) {

if(has_shield(id)) {

entity_set_string(id, EV_SZ_viewmodel, "models/shield/v_shield_knife.mdl")
entity_set_string(id, EV_SZ_weaponmodel, "models/shield/p_shield_knife.mdl")

}

else {

entity_set_string(id, EV_SZ_viewmodel, "models/v_knife.mdl")
entity_set_string(id, EV_SZ_weaponmodel, "models/p_knife.mdl")

}

emit_sound(id, CHAN_ITEM, "weapons/knife_deploy1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
entity_set_int(id, EV_INT_weaponanim, SEQ_FIRE)

ammo_hud(id, 0)

return PLUGIN_HANDLED

}

if(Has_Bazooka[id] && Bazooka_Active[id])
Bazooka_Active[id] = false

return PLUGIN_CONTINUE

}

public ammo_hud (id, show) {

new AmmoHud[65], Mode_Text[20], Ammo

if (Rocket_Mode[id] == 1) {

Ammo = Bazooka_Ammo1[id]
Mode_Text = "Normal"

}

if (Rocket_Mode[id] == 2) {

Ammo = Bazooka_Ammo2[id]
Mode_Text = "Heat-Seeking"

}

if (Rocket_Mode[id] == 3) {

Ammo = Bazooka_Ammo3[id]
Mode_Text = "User-Guided"

}

format(AmmoHud, 64, "Rockets: %i | Mode: %s", Ammo, Mode_Text)

if (show) {

message_begin(MSG_ONE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string(AmmoHud)
message_end()

}

else {

message_begin(MSG_ONE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string("")
message_end()

}

}

public Event_DeathMsg () {

new id = read_data(2)

if(!is_user_connected(id) || !Has_Bazooka[id])
return PLUGIN_CONTINUE

drop_rpglancher(id)

return PLUGIN_CONTINUE

}

public Event_WeaponDrop (id) {

if(!is_user_alive(id) || !Has_Bazooka[id] || !Bazooka_Active[id])
return PLUGIN_CONTINUE

new weaponid, clip, ammo
weaponid = get_user_weapon(id, clip, ammo)

if (weaponid == CSW_KNIFE) {

if (get_pcvar_num(cvar_bazooka_dropping) == 1) {

client_print(id, print_center, "")
drop_rpglancher(id)

}

else {

client_print(id, print_center, "This weapon cannot be dropped")

}

}

return PLUGIN_HANDLED

}

/************************************************************
* GIB FUNCTIONS (made by mike_cao)
************************************************************/

static fx_blood_small (origin[3],num) {

// Small splash
for (new blood_small = 0; blood_small< num; blood_small++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(origin[0]+random_num(-100,100))
write_coord(origin[1]+random_num(-100,100))
write_coord(origin[2]-36)

if (is_cstrike) write_byte(random_num(190,197)) // Blood decals
if (!is_cstrike) write_byte(random_num(202,209)) // Blood decals

message_end()

}

}

static fx_blood_large (origin[3],num) {

// Large splash
for (new blood_large = 0; blood_large < num; blood_large++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(origin[0] + random_num(-50,50))
write_coord(origin[1] + random_num(-50,50))
write_coord(origin[2]-36)

if (is_cstrike) write_byte(random_num(204,205)) // Blood decals
if (!is_cstrike) write_byte(random_num(216,217)) // Blood decals

message_end()

}

}

static fx_gib_explode (origin[3],num) {

new flesh[3], x, y, z
flesh[0] = mdl_gib_flesh
flesh[1] = mdl_gib_meat
flesh[2] = mdl_gib_legbone

// Gib explosion
// Head
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_head)
write_byte(0)
write_byte(500)
message_end()

// Spine
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_spine)
write_byte(0)
write_byte(500)
message_end()

// Lung
for(new Lung = 0; Lung < random_num(1,2); Lung++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_lung)
write_byte(0)
write_byte(500)
message_end()

}

// Parts, 5 times
for(new Parts = 0; Parts < 5; Parts++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(flesh[random_num(0,2)])
write_byte(0)
write_byte(500)
message_end()

}

// Blood
for(new Blood = 0; Blood < num; Blood++) {

x = random_num(-100,100)
y = random_num(-100,100)
z = random_num(0,100)

for(new j = 0; j < 5; j++) {

message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(origin[0]+(x*j))
write_coord(origin[1]+(y*j))
write_coord(origin[2]+(z*j))
write_short(spr_blood_spray)
write_short(spr_blood_drop)
write_byte(248)
write_byte(15)
message_end()

}

}

}


Здесь можно скачать файлом - http://zalil.ru/34978855

Это самая последняя версия плагина, в ней базука работает на всех картах (включая de_карты),
а также переключение на базуку переведено на клавишу "3" + "е".
В принципе всё работает, но есть несколько проблем:
1) Базука постоянно писала МАССОВО ошибки в лог.
Скрытый текст
L 01/05/2014 - 16:02:56: Start of error session.
L 01/05/2014 - 16:02:56: Info (map "fy_pool_day") (file "addons/amxmodx/logs/error_20140105.log")
L 01/05/2014 - 16:02:56: [AMXX] Run time error 4 (plugin "bazooka_2_Slot3.amxx") - debug not enabled!
L 01/05/2014 - 16:02:56: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 01/05/2014 - 16:02:56: [AMXX] Run time error 4 (plugin "bazooka_2_Slot3.amxx") - debug not enabled!
L 01/05/2014 - 16:02:56: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).

Эта проблема разрешена форумчанином Alter. За что ему преогромное СПАСИБО.
Достаточно заменить 953-ю строку в исходнике:
if (equal(ClassName1, "rpglancher")) {
на
if (equal(ClassName1, "rpglancher") && is_valid_ent(touched) && 1 <= touched <= 32) {
и перекомпилить исходник. Всё, этой ошибки в логе больше не будет.

2) Базука часто залипает - перестаёт стрелять, но после смены карты, если несколько раз
покликать правой кнопкой мыши (меняя режим стрельбы) - то стрельба возобновляется.


3) Всё же, иногда, в логе проскакивает такая ошибка, смотри ниже, может если её исправить заодно исправится стрельба.
Прошу знающих форумчан посмотреть и мсправить эти ошибки:

L 02/20/2014 - 19:27:43: [AMXX] Displaying debug trace (plugin "bazooka_2_Slot3.amxx")
L 02/20/2014 - 19:27:43: [AMXX] Run time error 10: native error (native "set_user_rendering")
L 02/20/2014 - 19:27:43: [AMXX] [0] bazooka_2_Slot3.sma::Event_PlayerSpawn (line 307)
L 02/20/2014 - 19:27:43: [AMXX] [1] bazooka_2_Slot3.sma::Event_HudReset (line 420)

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя miRror
сообщение 22.2.2014, 13:48
Сообщение #2


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Код:
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <fun>
#include <cstrike>
#include <amxmisc>
#include <cssb/war3ft_natives.inc>

#define TE_EXPLOSION 3
#define TE_EXPLFLAG_NONE 0
#define TE_SMOKE 5
#define TE_BLOODSPRITE 115
#define TE_MODEL 106
#define TE_WORLDDECAL 116

new const g_item_name[] = {"Базука"}
new g_itemid_bazooka
new iCvarItemCost,iCvarOnOffItem

new g_sModelIndexFireball, g_sModelIndexSmoke, rocketsmoke
new bool:CanShoot[33], bool:hasBazooka[33]
new mdl_gib_flesh, mdl_gib_head, mdl_gib_legbone, mdl_gib_lung, mdl_gib_meat, mdl_gib_spine, spr_blood_drop, spr_blood_spray

public plugin_init()
{
register_plugin("BazookaAdvanced", "1.3", "Major Victory")

iCvarItemCost = register_cvar("wc3_bazooka_cost", "3000");
iCvarOnOffItem = register_cvar("wc3_bazooka_on_off", "1");

g_itemid_bazooka = wc3_register_extra_item(g_item_name, get_pcvar_num(iCvarItemCost),iCvarOnOffItem,1)

register_cvar("amx_bazooka_damageradius", "250")
register_cvar("amx_bazooka_maxdamage", "150")
register_cvar("amx_bazooka_reloadtime", "2.5")
register_cvar("amx_bazooka_trailtime", "30")
register_cvar("amx_bazooka_velocity", "700")

register_event("DeathMsg", "player_die", "a")
register_event("CurWeapon", "check_model", "be")
register_event("TextMsg", "bomb_msg", "b", "2=#C4_Plant_At_Bomb_Spot")
register_event("TextMsg", "ev_RoundRestart", "a", "2=#Game_will_restart_in")

register_clcmd("drop", "handle_drop")

register_forward(FM_SetModel, "forward_setmodel")
}

public plugin_precache()
{
precache_model("models/fire_bazooka.mdl")
precache_model("models/w_rpg_vechta_new.mdl")
precache_model("models/v_rpg_vechta_new.mdl")
precache_model("models/p_rpg_vechta_new.mdl")
precache_sound("weapons/rocketfire1.wav")
precache_sound("weapons/nuke_fly.wav")// <-- this is the only non-game sound file, make sure you have it
precache_sound("weapons/dryfire1.wav")
spr_blood_drop = precache_model("sprites/blood.spr")
spr_blood_spray = precache_model("sprites/bloodspray.spr")
mdl_gib_flesh = precache_model("models/Fleshgibs.mdl")
mdl_gib_head = precache_model("models/GIB_Skull.mdl")
mdl_gib_legbone = precache_model("models/GIB_Legbone.mdl")
mdl_gib_lung = precache_model("models/GIB_Lung.mdl")
mdl_gib_meat = precache_model("models/GIB_B_Gib.mdl")
mdl_gib_spine = precache_model("models/GIB_B_Bone.mdl")
g_sModelIndexFireball = precache_model("sprites/zerogxplode.spr")
g_sModelIndexSmoke = precache_model("sprites/steam1.spr")
rocketsmoke = precache_model("sprites/smoke.spr")
}

public wc3_extra_item_selected(id, itemid)
{
if (itemid == g_itemid_bazooka)
{
givebazooka(id)
}
}

public givebazooka(id)
{
give_item(id, "weapon_c4")
hasBazooka[id] = true
}

public bomb_msg(id)
if (cs_get_user_plant(id) != 1)
client_print(id,print_center,"")

public ev_RoundRestart ()
{
static iMaxPlayers

if ( iMaxPlayers || ( iMaxPlayers = get_maxplayers () ) )
{
for ( new i = 1; i <= iMaxPlayers; i++ )
{
if ( !is_user_connected ( i ) )
continue

hasBazooka[i] = false
if (cs_get_user_plant(i) == 1)
cs_set_user_plant(i,0,0)
}
}
}

public fire_rocket(id) {
CanShoot[id] = false

new data[1]
data[0] = id
new rtime = get_cvar_num("amx_bazooka_reloadtime")
if (cs_get_user_plant(id) != 1)
{
set_task((rtime + 0.0), "rpg_reload", id+9477, data, 1)
new Float:StartOrigin[3], Float:Angle[3]

new PlayerOrigin[3]
get_user_origin(id, PlayerOrigin, 1)

StartOrigin[0] = float(PlayerOrigin[0])
StartOrigin[1] = float(PlayerOrigin[1])
StartOrigin[2] = float(PlayerOrigin[2])

entity_get_vector(id, EV_VEC_v_angle, Angle)
Angle[0] = Angle[0] * -1.0
new RocketEnt = create_entity("info_target")
entity_set_string(RocketEnt, EV_SZ_classname, "rpgrocket")
entity_set_model(RocketEnt, "models/fire_bazooka.mdl")
entity_set_origin(RocketEnt, StartOrigin)
entity_set_vector(RocketEnt, EV_VEC_angles, Angle)

new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(RocketEnt, EV_VEC_mins, MinBox)
entity_set_vector(RocketEnt, EV_VEC_maxs, MaxBox)

entity_set_int(RocketEnt, EV_INT_solid, 2)
entity_set_int(RocketEnt, EV_INT_movetype, 5)
entity_set_edict(RocketEnt, EV_ENT_owner, id)

new Float:Velocity[3]
new myvelocity = get_cvar_num("amx_bazooka_velocity")
VelocityByAim(id, myvelocity, Velocity)
entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)

emit_sound(RocketEnt, CHAN_WEAPON, "weapons/rocketfire1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
emit_sound(RocketEnt, CHAN_VOICE, "weapons/nuke_fly.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

new CsTeams:iTeam =cs_get_user_team(id)
new trailtime = get_cvar_num("amx_bazooka_trailtime")
switch(iTeam) {
case CS_TEAM_T: { //if team T color=red
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(22)
write_short(RocketEnt)
write_short(rocketsmoke)
write_byte(trailtime)
write_byte(3)
write_byte(255)
write_byte(0)
write_byte(0)
write_byte(255)
message_end()
}
case CS_TEAM_CT: { // if team CT color=blue
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(22)
write_short(RocketEnt)
write_short(rocketsmoke)
write_byte(trailtime)
write_byte(3)
write_byte(0)
write_byte(0)
write_byte(255)
write_byte(255)
message_end()
}
}
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}

public rpg_reload(data[])
CanShoot[data[0]] = true

public pfn_touch(ptr, ptd) {
new ClassName[32], ClassNameptd[32]

if ((ptr > 0) && is_valid_ent(ptr)) {
entity_get_string(ptr, EV_SZ_classname, ClassName, 31)
}

if ((ptd > 0) && is_valid_ent(ptd)) {
entity_get_string(ptd, EV_SZ_classname, ClassNameptd, 31)
}

if (equal(ClassName, "rpgrocket"))
{
if (equal(ClassNameptd, "func_breakable"))
{
force_use(ptr,ptd)
remove_task(ptr)
}

remove_task(ptr)
new Float:EndOrigin[3]
entity_get_vector(ptr, EV_VEC_origin, EndOrigin)

message_begin( MSG_BROADCAST, SVC_TEMPENTITY) // Explosion
write_byte(TE_EXPLOSION)
write_coord(floatround(EndOrigin[0]))
write_coord(floatround(EndOrigin[1]))
write_coord(floatround(EndOrigin[2])+5)
write_short(g_sModelIndexFireball)
write_byte(random_num(0,20) + 20)
write_byte(12) // framerate
write_byte(TE_EXPLFLAG_NONE)
message_end()

message_begin(MSG_BROADCAST, SVC_TEMPENTITY) // Smoke
write_byte(TE_SMOKE)
write_coord(floatround(EndOrigin[0]))
write_coord(floatround(EndOrigin[1]))
write_coord(floatround(EndOrigin[2])+15)
write_short(g_sModelIndexSmoke)
write_byte(60)
write_byte(10)
message_end()

new maxdamage = get_cvar_num("amx_bazooka_maxdamage")
new damageradius = get_cvar_num("amx_bazooka_damageradius")
new NonFloatEndOrigin[3]
new Float:EntPos[3]
new PlayerPos[3], distance, damage, attacker = entity_get_edict(ptr, EV_ENT_owner)

NonFloatEndOrigin[0] = floatround(EndOrigin[0])
NonFloatEndOrigin[1] = floatround(EndOrigin[1])
NonFloatEndOrigin[2] = floatround(EndOrigin[2])

new iEnt = FM_NULLENT;

while( (iEnt = find_ent_by_class( iEnt, "NiceDispenser" )) )
{
pev(iEnt, pev_origin, EntPos)
static NonFloatEntPos[3]

NonFloatEntPos[0] = floatround(EntPos[0])
NonFloatEntPos[1] = floatround(EntPos[1])
NonFloatEntPos[2] = floatround(EntPos[2])

distance = get_distance(NonFloatEntPos, NonFloatEndOrigin)
if (distance <= damageradius) {

damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))))
entity_set_float(iEnt, EV_FL_health, entity_get_float(iEnt, EV_FL_health) - damage)
}
}

iEnt = FM_NULLENT;

while( (iEnt = find_ent_by_class( iEnt, "sentrybase" )) )
{
static iSentryEnt

if ( entity_get_int ( iEnt, EV_INT_iuser1 ) == _:cs_get_user_team ( attacker ) && ( iSentryEnt = entity_get_edict ( iEnt, EV_ENT_euser1 ) ) == 0 )
continue

if ( is_valid_ent ( iSentryEnt ) )
{
static Float:fPeople[3]
entity_get_vector ( iSentryEnt, EV_VEC_vuser1, fPeople )

if ( entity_get_int ( iSentryEnt, EV_INT_iuser2 ) == _:cs_get_user_team ( attacker ) && floatround ( fPeople[0] ) != attacker )
continue
}

pev(iEnt, pev_origin, EntPos)
static NonFloatEntPos[3]

NonFloatEntPos[0] = floatround(EntPos[0])
NonFloatEntPos[1] = floatround(EntPos[1])
NonFloatEntPos[2] = floatround(EntPos[2])

distance = get_distance(NonFloatEntPos, NonFloatEndOrigin)
if (distance <= damageradius) {

damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))))
entity_set_float(iEnt, EV_FL_health, entity_get_float(iEnt, EV_FL_health) - damage)
}
}

iEnt = FM_NULLENT;

while( (iEnt = find_ent_by_class( iEnt, "sentry" )) )
{
static Float:fPeople[3]
entity_get_vector ( iEnt, EV_VEC_vuser1, fPeople )

if ( entity_get_int ( iEnt, EV_INT_iuser2 ) == _:cs_get_user_team ( attacker ) && floatround ( fPeople[0] ) != attacker )
continue

pev(iEnt, pev_origin, EntPos)
static NonFloatEntPos[3]

NonFloatEntPos[0] = floatround(EntPos[0])
NonFloatEntPos[1] = floatround(EntPos[1])
NonFloatEntPos[2] = floatround(EntPos[2])

distance = get_distance(NonFloatEntPos, NonFloatEndOrigin)
if (distance <= damageradius) {

damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))))
entity_set_float(iEnt, EV_FL_health, entity_get_float(iEnt, EV_FL_health) - damage)
}
}

for (new i = 1; i < 32; i++)
{
if (!is_user_alive(i))
continue

get_user_origin(i, PlayerPos)

distance = get_distance(PlayerPos, NonFloatEndOrigin)
if (distance <= damageradius) {
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, i) // Shake Screen
write_short(1<<14)
write_short(1<<14)
write_short(1<<14)
message_end()

damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))))

if (get_user_team(attacker) == get_user_team(i))
continue
if (damage < get_user_health(i))
set_user_health(i, get_user_health(i) - damage)
else {
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
user_kill(i, 1)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)

message_begin(MSG_BROADCAST, get_user_msgid("DeathMsg")) // Kill-Log oben rechts
write_byte(attacker) // Attacker
write_byte(i) // Victim
write_byte(0) // Headshot
write_string("bazooka")
message_end()
if (damage > 100) { //begin gibs and effects (made by mike_cao)
new iOrigin[3]
get_user_origin(i,iOrigin) // Effects
set_pev(i, pev_effects, EF_NODRAW)
fx_gib_explode(iOrigin,3)
fx_blood_large(iOrigin,5)
fx_blood_small(iOrigin,15)
iOrigin[2] = iOrigin[2]-20 // Hide body
set_user_origin(i,iOrigin)
} //end gibs and effects

new f = get_user_frags(attacker)
new m = cs_get_user_money(attacker)

set_user_frags(attacker, f + 1)
cs_set_user_money(attacker, m + 300)
}
}
}
remove_entity(ptr)
}
}

public client_PreThink(id)
{
if (is_user_alive(id))
{
new weaponid, clip, ammo
weaponid = get_user_weapon(id, clip, ammo)
if ((weaponid == CSW_C4) && hasBazooka[id]) {
new attack = get_user_button(id) & IN_ATTACK
new oldattack = get_user_oldbutton(id) & IN_ATTACK
if (attack && !oldattack && (cs_get_user_plant(id) != 1))
{
if (CanShoot[id])
fire_rocket(id)
}
}
}

return FMRES_IGNORED
}

public forward_setmodel(entity, model[]) {
if (!is_valid_ent(entity))
return FMRES_IGNORED

if (equal(model, "models/w_backpack.mdl"))
{
client_print(0, print_center, "")
new ClassName[32]
entity_get_string(entity, EV_SZ_classname, ClassName, 31)

if (equal(ClassName, "weaponbox"))
{
remove_entity(entity)

return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}

public check_model(id)
{
new weaponid, clip, ammo

weaponid = get_user_weapon(id, clip, ammo)
if ((weaponid == CSW_C4) && (cs_get_user_plant(id) != 1)) {
entity_set_string(id, EV_SZ_viewmodel, "models/v_rpg_vechta_new.mdl")
entity_set_string(id, EV_SZ_weaponmodel, "models/p_rpg_vechta_new.mdl")
}
return PLUGIN_HANDLED
}

public client_connect(id)
{
CanShoot[id] = true
hasBazooka[id] = false
}

public player_die(id)
{
new victim

victim = read_data(2)
hasBazooka[victim] = false
if ((cs_get_user_plant(victim) == 1)) {
cs_set_user_plant(victim,0,0)
}
}

public handle_drop(id)
{
new weaponid, clip, ammo
weaponid = get_user_weapon(id, clip, ammo)
if (weaponid == CSW_C4 && cs_set_user_plant(id,0,0)) {
client_print(id, print_center, "Нельзя выбросить базуку")
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}

/************************************************************
* GIB FUNCTIONS (made by mike_cao)
************************************************************/

static fx_blood_small(origin[3],num)
{
// Blood decals
static const blood_small[7] = {190,191,192,193,194,195,197}

// Small splash
for (new j = 0; j < num; j++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(origin[0]+random_num(-100,100))
write_coord(origin[1]+random_num(-100,100))
write_coord(origin[2]-36)
write_byte(blood_small[random_num(0,6)]) // index
message_end()
}
}

static fx_blood_large(origin[3],num)
{
// Blood decals
static const blood_large[2] = {204,205}

// Large splash
for (new i = 0; i < num; i++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(origin[0]+random_num(-50,50))
write_coord(origin[1]+random_num(-50,50))
write_coord(origin[2]-36)
write_byte(blood_large[random_num(0,1)]) // index
message_end()
}
}

static fx_gib_explode(origin[3],num)
{
new flesh[3], x, y, z
flesh[0] = mdl_gib_flesh
flesh[1] = mdl_gib_meat
flesh[2] = mdl_gib_legbone

// Gib explosion
// Head
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_head)
write_byte(0) // bounce
write_byte(500) // life
message_end()

// Spine
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_spine)
write_byte(0) // bounce
write_byte(500) // life
message_end()

// Lung
for(new i = 0; i < random_num(1,2); i++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(mdl_gib_lung)
write_byte(0) // bounce
write_byte(500) // life
message_end()
}

// Parts, 10 times
for(new i = 0; i < 10; i++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(random_num(-100,100))
write_coord(random_num(-100,100))
write_coord(random_num(100,200))
write_angle(random_num(0,360))
write_short(flesh[random_num(0,2)])
write_byte(0) // bounce
write_byte(500) // life
message_end()
}

// Blood
for(new i = 0; i < num; i++) {
x = random_num(-100,100)
y = random_num(-100,100)
z = random_num(0,100)
for(new j = 0; j < 3; j++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(origin[0]+(x*j))
write_coord(origin[1]+(y*j))
write_coord(origin[2]+(z*j))
write_short(spr_blood_spray)
write_short(spr_blood_drop)
write_byte(229) // color index
write_byte(15) // size
message_end()
}
}
}



Вот моя базука под шопменю 3 с 1 режимом стрельбы на 5 слот. Вроде бы ошибок нет да и код не слишком тяжелый.
P.S. Стоит на CSDM, может не подойти под другой мод.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Esecman
сообщение 22.2.2014, 15:21
Сообщение #3
Стаж: 12 лет

Сообщений: 945
Благодарностей: 208
Полезность: 0

Попробуйте :-)

Прикрепленные файлы:
Прикрепленный файл  bazooka.rar ( 55,7 килобайт ) Кол-во скачиваний: 83
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
yukish
сообщение 22.2.2014, 15:43
Сообщение #4
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Цитата(miRror @ 22.2.2014, 14:48) *
Вот моя базука под шопменю 3 с 1 режимом стрельбы на 5 слот. Вроде бы ошибок нет да и код не слишком тяжелый.
P.S. Стоит на CSDM, может не подойти под другой мод.

Такая базука не годится, она не работает в классическом КС на обычных de_картах,
так как конфликтует с бомбой С4, которая тоже висит на клавише "5".


Esecman,
Спасибо за исправления, прямо сейчас поставил вашу версию.
О результатах отпишусь.
Если не секрет что значит добавленная вами проверка if (is_user_alive(id)) ??

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Esecman
сообщение 22.2.2014, 15:44
Сообщение #5
Стаж: 12 лет

Сообщений: 945
Благодарностей: 208
Полезность: 0

Цитата(yukish @ 22.2.2014, 16:43) *
Такая базука не годится, она не работает в классическом КС на обычных de_картах,
так как конфликтует с бомбой С4, которая тоже висит на клавише "5".


Esecman,
Спасибо за исправления, прямо сейчас поставил вашу версию.
О результатах отпишусь.
Если не секрет что значит добавленная вами проверка if (is_user_alive(id)) ??

проверка на alive :D
там много где таких плюшек :D
и еще is_valid_ent

P.S. На виндошном сервере тестирую в режиме debug :D

Отредактировал: Esecman, - 22.2.2014, 15:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя filip
сообщение 22.2.2014, 15:46
Сообщение #6


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Цитата(miRror @ 22.2.2014, 14:48) *
Вот моя базука под шопменю 3 с 1 режимом стрельбы на 5 слот. Вроде бы ошибок нет да и код не слишком тяжелый.
P.S. Стоит на CSDM, может не подойти под другой мод.

Вот за это спасибо, странно как-то ты себя ведешь, miRror, продать мне ее не продал и в вк игноришь, а тут выкладываешь
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
yukish
сообщение 22.2.2014, 19:16
Сообщение #7
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Зачем тебе ограниченная базука с одним режимом, стрельбой на клавише "5" - то есть не рабочая на обычных де_картах,
если в 1-м посте абсолютно рабочая базука - с 3 режимами стрельбы, работает на любых картах и на клавишах "3" + "е".
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Esecman
сообщение 22.2.2014, 19:21
Сообщение #8
Стаж: 12 лет

Сообщений: 945
Благодарностей: 208
Полезность: 0

Цитата(yukish @ 22.2.2014, 20:16) *
Зачем тебе ограниченная базука с одним режимом, стрельбой на клавише "5" - то есть не рабочая на обычных де_картах,
если в 1-м посте абсолютно рабочая базука - с 3 режимами стрельбы, работает на любых картах и на клавишах "3" + "е".

Что на счет тестов?
У меня полет нормальный вроде ))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя filip
сообщение 22.2.2014, 19:25
Сообщение #9


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Цитата(yukish @ 22.2.2014, 20:16) *
Зачем тебе ограниченная базука с одним режимом, стрельбой на клавише "5" - то есть не рабочая на обычных де_картах,
если в 1-м посте абсолютно рабочая базука - с 3 режимами стрельбы, работает на любых картах и на клавишах "3" + "е".

Остальные режимы не нужны в силу особенностей сервера, 3 слот как раз занят, на де_ картах она прекрасно работает. Так что мне подходит идеально.

Отредактировал: filip, - 22.2.2014, 19:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
yukish
сообщение 22.2.2014, 22:34
Сообщение #10
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Цитата(Esecman @ 22.2.2014, 20:21) *
Что на счет тестов?
У меня полет нормальный вроде ))


Всё ещё тестирую.
Один раз заметил, как выстрел "залип", переключил на другой тип огня, и стрельбу отпустило.
Пробовал повторить - не получилось. Если будут подробности - я напишу.
Мегаспасибо, плагин работает!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
yukish
сообщение 23.2.2014, 16:13
Сообщение #11
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Esecman

Отписываю результат.
Базука иногда "залипает", вчера было 1 раз - думал показалось.
Но сегодня ещё 2 раза, оставалась 1 ракета в режиме обычной стрельбы, базука щёлкала, но выстрела не было!
Кстати, ещё есть хитрый глюк - обрати внимание, когда просто держишь базуку в руке базука покачивается,
но через какое-то время она срывается, моделька резко перерисовывается в другое место.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Esecman
сообщение 23.2.2014, 16:22
Сообщение #12
Стаж: 12 лет

Сообщений: 945
Благодарностей: 208
Полезность: 0

Цитата(yukish @ 23.2.2014, 17:13) *
Esecman

Отписываю результат.
Базука иногда "залипает", вчера было 1 раз - думал показалось.
Но сегодня ещё 2 раза, оставалась 1 ракета в режиме обычной стрельбы, базука щёлкала, но выстрела не было!
Кстати, ещё есть хитрый глюк - обрати внимание, когда просто держишь базуку в руке базука покачивается,
но через какое-то время она срывается, моделька резко перерисовывается в другое место.

а насчет ерроров как?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
yukish
сообщение 23.2.2014, 16:54
Сообщение #13
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Цитата(Esecman @ 23.2.2014, 17:22) *
а насчет ерроров как?


За день работы - ерроров нет.
Но "залипание" осталось, может с эти связано глючное перерисовывание модельки.
Может поможет определить место глюка, модель при покачивании действительно срывается.
Достаточно просто взять базуку в руки, подержать 15-20 секунд и увидишь сам.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Esecman
сообщение 24.2.2014, 18:13
Сообщение #14
Стаж: 12 лет

Сообщений: 945
Благодарностей: 208
Полезность: 0

Цитата(yukish @ 23.2.2014, 17:54) *
За день работы - ерроров нет.
Но "залипание" осталось, может с эти связано глючное перерисовывание модельки.
Может поможет определить место глюка, модель при покачивании действительно срывается.
Достаточно просто взять базуку в руки, подержать 15-20 секунд и увидишь сам.

а может залипание из-за set_task'а;
то есть вы выстрелили из базуке и ровно через несколько секунд(как там задано), вызывается функция снова :-)
Вообщем, нужно копать :|
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 24.2.2014, 18:40
Сообщение #15
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

автор плагина или муд к или шутник конкретный

register_event("CurWeapon","Event_CurWeapon","be","1=1") анимации УГ
плагин написан без hamsandwicha что по моему просто преступление

может завтра напишу нормальную версию

Отредактировал: csnet, - 24.2.2014, 18:41


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 24.2.2014, 18:56
Сообщение #16


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

csnet,
Напиши под зп


You become responsible, forever, for what you have tamed
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 24.2.2014, 19:08
Сообщение #17
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

под зм не пишу. я против Зм серверов.


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
yukish
сообщение 24.2.2014, 19:46
Сообщение #18
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Цитата(Esecman @ 24.2.2014, 19:13) *
а может залипание из-за set_task'а;
то есть вы выстрелили из базуке и ровно через несколько секунд(как там задано), вызывается функция снова :-)
Вообщем, нужно копать :|


Ещё дополнительная мнформация, может вам поможет.
Поймал момент когда базука "залипла", т.е. перестала стрелять.
Беру выбрасываю её с рук и покупаю новую базуку... И она тоже не стреляет!!!
Потом закончился раунд, начался новый и чудесным образом базука начала опять стрелять.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 25.2.2014, 3:22
Сообщение #19
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

как обещал, написал базуку. анимашечки няшненькие в модельках.
никаких зависаний нет. просто сидел с калькулятором высчитывал проклятый radius damage



Добавлена Система голосового оповещения:
количества патронов в обойме, повреждений от взрывной волны, отсутствия патронов, поднятия, дропа пушки.

Эффектами особо не занимался. меньше взрывов, меньше лагов

#define вкл/выкл



Отредактировал: csnet, - 25.2.2014, 4:21


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
yukish
сообщение 25.2.2014, 13:03
Сообщение #20
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Цитата(csnet @ 25.2.2014, 4:22) *
как обещал, написал базуку. анимашечки няшненькие в модельках.
никаких зависаний нет. просто сидел с калькулятором высчитывал проклятый radius damage


А где сам плагин и его исходник.
Или в теме про исправления ошибок, ты решил устроишь торг своей работы??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: