Witam posiadam serwer zombi mod 4,3
prosił bym ,by ktoś przerobił mi tak bazoke
aby nie dało jej się przekazać innej osobie albo aby po przekazaniu była bezużyteczna (nie miała naboi albo po prostu zablokować możliwość wyrzucania jej )
dokładniej chodzi mi o wyeliminowanie przekazywania sobie bazooki miedzy graczami
wiadomo ze bazuka optrzebuje czasu na przeładowanie
a gdy ja przekazujemy sobie miedzy graczami to niema tego czasu na przeładowywanie
i mona strzelać cały czas
#include <amxmodx>
#include <fun>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#define PLUGINNAME "Extra Item Bazooka"
#define VERSION "1.0"
#define AUTHOR "B!gBud"
#define ACCESS_LEVEL ADMIN_LEVEL_A
#define TE_EXPLOSION 3
#define TE_BEAMFOLLOW 22
#define TE_BEAMCYLINDER 21
#define BAZOOKA_COST 30 // set how may ammopacks the Bazooka costs
new ROCKET_MDL[64] = "models/rpgrocket.mdl"
new ROCKET_SOUND[64] = "weapons/rocketfire1.wav"
new getrocket[64] = "items/9mmclip2.wav"
new bool:rocket[33] = false
new bool:rksound[33] = false
new bool:shot[33] = false
new hasbazooka[33]
new Float:gltime = 0.0
new Float:last_Rocket[33] = 0.0
new explosion, trail, white
new cvar_RocketDelay, cvar_RocketSpeed, cvar_RocketDmg, cvar_Dmg_range, g_item_bazooka
public plugin_init()
{
register_plugin(PLUGINNAME, VERSION, AUTHOR)
g_item_bazooka = zp_register_extra_item("Bazooka", BAZOOKA_COST, ZP_TEAM_HUMAN, 1)
register_clcmd("drop","cmdDrop")
new ver[64]
format(ver,63,"%s v%s",PLUGINNAME,VERSION)
register_cvar("zp_bz_version",ver,FCVAR_SERVER)
cvar_RocketDelay=register_cvar("zp_bz_rocket_delay","15.0")
cvar_RocketSpeed=register_cvar("zp_bz_rocket_speed","1500")
cvar_RocketDmg=register_cvar("zp_bz_rocket_damage","800")
cvar_Dmg_range=register_cvar("zp_bz_damage_radius","350")
register_event("CurWeapon", "check_models", "be", "1=1")
register_event("DeathMsg", "player_die", "a")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_forward(FM_StartFrame, "fm_startFrame")
register_forward(FM_EmitSound, "emitsound")
}
public plugin_precache()
{
precache_model("models/p_rpg.mdl")
precache_model("models/v_rpg.mdl")
precache_model("models/w_rpg.mdl")
precache_model(ROCKET_MDL)
precache_sound(ROCKET_SOUND)
precache_sound(getrocket)
explosion = precache_model("sprites/zerogxplode.spr")
trail = precache_model("sprites/smoke.spr")
white = precache_model("sprites/white.spr")
}
public client_putinserver(id)
{
rocket[id] = false
}
public client_disconnect(id)
{
rocket[id] = false
}
public event_round_start()
{
remove_bazookas();
}
public fm_startFrame()
{
gltime = get_gametime()
static id
for (id = 1; id <= 32; id++)
{
bz_forward(id)
}
}
public bz_forward(player)
{
if (!hasbazooka[player])
return FMRES_IGNORED
check_rocket(player)
new clip,ammo
new wpnid = get_user_weapon(player,clip,ammo)
if (wpnid == CSW_KNIFE)
{
if((pev(player,pev_button)&IN_ATTACK2))
{
attack2(player)
}
}
return FMRES_IGNORED
}
public attack2(player)
{
if (rocket[player])
{
new rocket = create_entity("info_target")
if(rocket == 0) return PLUGIN_CONTINUE
entity_set_string(rocket, EV_SZ_classname, "zp_bz_rocket")
entity_set_model(rocket, ROCKET_MDL)
entity_set_size(rocket, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
entity_set_int(rocket, EV_INT_movetype, MOVETYPE_FLY)
entity_set_int(rocket, EV_INT_solid, SOLID_BBOX)
new Float:vSrc[3]
entity_get_vector(player, EV_VEC_origin, vSrc)
new Float:Aim[3],Float:origin[3]
VelocityByAim(player, 64, Aim)
entity_get_vector(player,EV_VEC_origin,origin)
vSrc[0] += Aim[0]
vSrc[1] += Aim[1]
entity_set_origin(rocket, vSrc)
new Float:velocity[3], Float:angles[3]
VelocityByAim(player, get_pcvar_num(cvar_RocketSpeed), velocity)
entity_set_vector(rocket, EV_VEC_velocity, velocity)
vector_to_angle(velocity, angles)
entity_set_vector(rocket, EV_VEC_angles, angles)
entity_set_edict(rocket,EV_ENT_owner,player)
entity_set_float(rocket, EV_FL_takedamage, 1.0)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(rocket)
write_short(trail)
write_byte(25)
write_byte(5)
write_byte(224)
write_byte(224)
write_byte(255)
write_byte(255)
message_end()
emit_sound(rocket, CHAN_WEAPON, ROCKET_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM)
shot[player] = true
last_Rocket[player] = gltime + get_pcvar_num(cvar_RocketDelay)
}
return PLUGIN_CONTINUE
}
public check_models(id)
{
if (zp_get_user_zombie(id) || zp_get_user_survivor(id))
return;
if(hasbazooka[id])
{
new wpnid = read_data(2);
if ( wpnid == CSW_KNIFE)
{
switchmodel(id)
}
}
}
public switchmodel(id)
{
set_pev(id,pev_viewmodel2,"models/v_rpg.mdl")
set_pev(id,pev_weaponmodel2,"models/p_rpg.mdl")
}
public remove_bazookas()
{
new nextitem = find_ent_by_class(-1,"zp_bazooka")
while(nextitem)
{
remove_entity(nextitem)
nextitem = find_ent_by_class(-1,"zp_bazooka")
}
return PLUGIN_CONTINUE
}
public emitsound(entity, channel, const sample[])
{
if(is_user_alive(entity))
{
new clip,ammo
new weapon = get_user_weapon(entity,clip,ammo)
if(hasbazooka[entity] && weapon == CSW_KNIFE)
{
if(equal(sample,"weapons/knife_slash1.wav")) return FMRES_SUPERCEDE
if(equal(sample,"weapons/knife_slash2.wav")) return FMRES_SUPERCEDE
if(equal(sample,"weapons/knife_deploy1.wav")) return FMRES_SUPERCEDE
if(equal(sample,"weapons/knife_hitwall1.wav")) return FMRES_SUPERCEDE
if(equal(sample,"weapons/knife_hit1.wav")) return FMRES_SUPERCEDE
if(equal(sample,"weapons/knife_hit2.wav")) return FMRES_SUPERCEDE
if(equal(sample,"weapons/knife_hit3.wav")) return FMRES_SUPERCEDE
if(equal(sample,"weapons/knife_hit4.wav")) return FMRES_SUPERCEDE
if(equal(sample,"weapons/knife_stab.wav")) return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public check_rocket(player)
{
if (last_Rocket[player] > gltime)
{
rk_forbidden(player)
rksound[player] = true
}
else
{
if (shot[player])
{
rksound[player] = false
shot[player] = false
}
rk_sound(player)
rk_allow(player)
}
}
public rk_allow(player)
{
rocket[player] = true
}
public rk_forbidden(player)
{
rocket[player] = false
}
public rk_sound(player)
{
if (!rksound[player])
{
engfunc(EngFunc_EmitSound, player, CHAN_WEAPON, getrocket, 1.0, ATTN_NORM, 0, PITCH_NORM)
client_print(player, print_center, "[Bazooka] Bron przeladowana !!!")
rksound[player] = true
}
}
public player_die()
{
new id = read_data(2)
if(hasbazooka[id])
{
drop_bazooka(id)
rocket[id] = false
}
return PLUGIN_CONTINUE
}
public cmdDrop(id)
{
if(hasbazooka[id])
{
new clip,ammo
new weapon = get_user_weapon(id,clip,ammo)
if(weapon == CSW_KNIFE)
{
drop_bazooka(id)
if(!zp_get_user_zombie(id))
{
entity_set_string(id,EV_SZ_viewmodel,"models/v_knife.mdl")
entity_set_string(id,EV_SZ_weaponmodel,"models/p_knife.mdl")
}
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}
public drop_bazooka(player)
{
if(hasbazooka[player])
{
new Float:Aim[3],Float:origin[3]
VelocityByAim(player, 64, Aim)
entity_get_vector(player,EV_VEC_origin,origin)
origin[0] += Aim[0]
origin[1] += Aim[1]
new bazooka = create_entity("info_target")
entity_set_string(bazooka,EV_SZ_classname,"zp_bazooka")
entity_set_model(bazooka,"models/w_rpg.mdl")
entity_set_size(bazooka,Float:{-16.0,-16.0,-16.0},Float:{16.0,16.0,16.0})
entity_set_int(bazooka,EV_INT_solid,1)
entity_set_int(bazooka,EV_INT_movetype,6)
entity_set_vector(bazooka,EV_VEC_origin,origin)
hasbazooka[player] = 0
rocket[player] = false
}
}
public pfn_touch(ptr, ptd)
{
if(is_valid_ent(ptr))
{
new classname[32]
entity_get_string(ptr,EV_SZ_classname,classname,31)
if(equal(classname, "zp_bazooka"))
{
if(is_valid_ent(ptd))
{
new id = ptd
if(id > 0 && id < 34) {
if(!hasbazooka[id] && !zp_get_user_zombie(id) && is_user_alive(id))
{
engclient_cmd(id,"weapon_knife")
hasbazooka[id] = 1
rocket[id] = true
client_cmd(id,"spk items/gunpickup2.wav")
switchmodel(id)
remove_entity(ptr)
}
}
}
}
else if(equal(classname, "zp_bz_rocket"))
{
new Float:fOrigin[3]
new iOrigin[3]
entity_get_vector(ptr, EV_VEC_origin, fOrigin)
FVecIVec(fOrigin,iOrigin)
bz_radius_damage(ptr)
message_begin(MSG_BROADCAST,SVC_TEMPENTITY,iOrigin)
write_byte(TE_EXPLOSION)
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2])
write_short(explosion)
write_byte(30)
write_byte(15)
write_byte(0)
message_end()
message_begin(MSG_ALL,SVC_TEMPENTITY,iOrigin)
write_byte(TE_BEAMCYLINDER)
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2])
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2]+200)
write_short(white)
write_byte(0)
write_byte(1)
write_byte(6)
write_byte(8)
write_byte(1)
write_byte(255)
write_byte(255)
write_byte(192)
write_byte(128)
write_byte(5)
message_end()
if(is_valid_ent(ptd))
{
new classname2[32]
entity_get_string(ptd,EV_SZ_classname,classname2,31)
if(equal(classname2,"func_breakable"))
force_use(ptr,ptd)
}
remove_entity(ptr)
}
}
return PLUGIN_CONTINUE
}
public zp_user_infected_pre(player, infector)
{
drop_bazooka(player)
hasbazooka[player] = 0;
rocket[player] = false;
}
public zp_extra_item_selected(player, itemid)
{
new clip,ammo
new weapon = get_user_weapon(player,clip,ammo)
if (itemid == g_item_bazooka)
{
hasbazooka[player] = 1
rocket[player] = true
client_cmd(player,"spk items/gunpickup2.wav")
if(weapon == CSW_KNIFE)
{
switchmodel(player)
}
else
{
engclient_cmd(player,"weapon_knife")
switchmodel(player)
}
}
}
stock bz_radius_damage(entity)
{
new attacker = entity_get_edict(entity, EV_ENT_owner);
new name[35];
get_user_name(attacker, name, 34);
for(new i = 1; i < 33; i++)
{
if(is_user_alive(i))
{
new dist = floatround(entity_range(entity,i))
if(dist <= get_pcvar_num(cvar_Dmg_range))
{
new hp = get_user_health(i)
new Float:damage = get_pcvar_float(cvar_RocketDmg)-(get_pcvar_float(cvar_RocketDmg)/get_pcvar_float(cvar_Dmg_range))*float(dist)
if(zp_get_user_zombie(attacker) != zp_get_user_zombie(i))
{
if(hp > damage)
{
ExecuteHamB(Ham_TakeDamage, i, entity, attacker, damage, DMG_BLAST);
}
else
{
ExecuteHamB(Ham_TakeDamage, i, entity, attacker, float(hp), DMG_BLAST);
log_kill(attacker ,i,"Bazooka",0)
}
}
}
}
}
}
stock log_kill(killer, victim, weapon[], headshot)
{
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, killer, 2) // set last param to 2 if you want victim to gib
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
message_begin(MSG_BROADCAST, get_user_msgid("DeathMsg"))
write_byte(killer)
write_byte(victim)
write_byte(headshot)
write_string(weapon)
message_end()
if(get_user_team(killer)!=get_user_team(victim))
set_user_frags(killer,get_user_frags(killer) +1)
if(get_user_team(killer)==get_user_team(victim))
set_user_frags(killer,get_user_frags(killer) -1)
new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10]
get_user_name(killer, kname, 31)
get_user_team(killer, kteam, 9)
get_user_authid(killer, kauthid, 31)
get_user_name(victim, vname, 31)
get_user_team(victim, vteam, 9)
get_user_authid(victim, vauthid, 31)
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
kname, get_user_userid(killer), kauthid, kteam,
vname, get_user_userid(victim), vauthid, vteam, weapon)
return PLUGIN_CONTINUE;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
Użytkownik ZIGI89 edytował ten post 01.12.2015 23:46


Dodatki SourceMod



Temat jest zamknięty










