Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <hamsandwich>
#include <zombieplague>
#define CC_COLORS_TYPE CC_COLORS_SHORT
#include <cromchat>
/*-------------------------------------------------------
Here you can change Models, Sounds and Sprites
-------------------------------------------------------*/
#define JP_MODEL_V = "models/v_egon.mdl" // Client view JP model
#define JP_MODEL_P = "models/p_egon.mdl" // Player JP model
#define JP_MODEL_W = "models/w_egon.mdl" // On ground JP model
#define ROCKET_MODEL = "models/rpgrocket.mdl" // Rocket model
#define JP_EQUIP_SOUND = "items/gunpickup2.wav" // Pickup and buy sound
#define JP_DROP_SOUND = "common/bodydrop2.wav" // Drop sound
#define JP_SHOOT_SOUND = "weapons/rocketfire1.wav" // Bazooka shoot sound
#define JP_FLY_SOUND = "jetpack.wav" // Jetpack flying sound
#define JP_EXPLOSIONS_SPR = "sprites/zerogxplode.spr" // Explosion effect sprite
#define JP_TRAIL_SPR = "sprites/white.spr" // Jetpack fly and rocket trail
/*-------------------------------------------------------
End. Edit after this at your own risk!
-------------------------------------------------------*/
new sprite_explosion, sprite_beamcylinder, jp_itemid,
cvar_cost, cvar_damage, cvar_speed, cvar_reload_time, cvar_radius,
cvar_start_energy, cvar_remove_energy, cvar_heal_energy, cvar_heal_time, cvar_zvelocity, cvar_aimvelocity,
cvar_can_drop, cvar_one_round,
maxplayers, hudsync, has_jetpack[33], can_shoot[33], energy[33], Float:last_sndplay[33]
public plugin_precache()
{
precache_model(JP_MODEL_V)
precache_model(JP_MODEL_P)
precache_model(JP_MODEL_W)
precache_model(ROCKET_MODEL)
sprite_explosion = precache_model(JP_EXPLOSIONS_SPR)
sprite_beamcylinder = precache_model(JP_TRAIL_SPR)
precache_sound(JP_SHOOT_SOUND)
precache_sound(JP_DROP_SOUND)
precache_sound(JP_EQUIP_SOUND)
precache_sound(JP_FLY_SOUND)
}
public plugin_init() {
register_plugin("Jetpack + Bazooka", "1.2", "<VeCo>")
cvar_cost = register_cvar("vecjp_cost","30")
cvar_speed = register_cvar("vecjp_rocket_speed","800")
cvar_damage = register_cvar("vecjp_damage","800")
cvar_reload_time = register_cvar("vecjp_reload_time","10.0")
cvar_radius = register_cvar("vecjp_radius","150")
cvar_start_energy = register_cvar("vecjp_start_energy","200")
cvar_remove_energy = register_cvar("vecjp_remove_energy","1")
cvar_heal_energy = register_cvar("vecjp_heal_energy","10")
cvar_heal_time = register_cvar("vecjp_heal_time","1.0")
cvar_zvelocity = register_cvar("vecjp_zvelocity","300")
cvar_aimvelocity = register_cvar("vecjp_aimvelocity","300")
cvar_can_drop = register_cvar("vecjp_can_drop","0")
cvar_one_round = register_cvar("vecjp_one_round","0")
jp_itemid = zp_register_extra_item("Jetpack + bazooka", get_pcvar_num(cvar_cost), ZP_TEAM_HUMAN)
register_clcmd("drop","drop_jetpack")
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "shoot_jetpack")
RegisterHam(Ham_Player_Jump, "player", "fly_jetpack")
register_touch("weapon_jetpack","player", "get_jetpack")
register_touch("","info_jetpack_rocket", "touch_jetpack")
register_event("DeathMsg", "hook_death", "a")
register_event("CurWeapon", "event_curweapon", "be", "1=1", "2=29")
register_logevent("round_end", 2, "1=Round_End")
maxplayers = get_maxplayers()
hudsync = CreateHudSyncObj()
}
public zp_extra_item_selected(id,itemid)
{
if(itemid != jp_itemid) return
if(has_jetpack[id])
{
CC_SendMessage(id,"!g[JetPack] !nYou already own a !tJetPack!n.")
return
}
has_jetpack[id] = true
can_shoot[id] = true
energy[id] = get_pcvar_num(cvar_start_energy)
emit_sound(id, CHAN_AUTO, JP_EQUIP_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
client_cmd(id,"weapon_knife")
entity_set_string(id,EV_SZ_viewmodel, JP_MODEL_V)
entity_set_string(id,EV_SZ_weaponmodel, JP_MODEL_P)
set_task(get_pcvar_float(cvar_heal_time), "action_heal_user_jetpack",id)
}
public drop_jetpack(id) if(get_pcvar_num(cvar_can_drop) && get_user_weapon(id) == CSW_KNIFE && has_jetpack[id]) action_drop_user_jetpack(id)
public shoot_jetpack(ent)
{
new id = entity_get_edict(ent,EV_ENT_owner)
if(!has_jetpack[id]) return HAM_IGNORED
if(!can_shoot[id])
{
client_print(id, print_center, "[JetPack] You can't shoot right now. Please wait...")
return HAM_IGNORED
}
action_shoot_user_jetpack(id)
return HAM_IGNORED
}
public fly_jetpack(id)
{
if(!has_jetpack[id]) return HAM_IGNORED
if(!energy[id])
{
client_print(id, print_center, "[JetPack] You don't have enough energy to fly.")
return HAM_IGNORED
}
if(get_user_button(id) & IN_DUCK) action_fly_user_jetpack(id)
return HAM_IGNORED
}
public action_heal_user_jetpack(id)
{
if(!is_user_connected(id) || !has_jetpack[id]) return
if(zp_get_user_zombie(id) || zp_get_user_nemesis(id))
{
action_remove_user_jetpack(id)
return
}
if(entity_get_int(id,EV_INT_flags) & FL_INWATER)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_KILLBEAM)
write_short(id)
message_end()
}
if(entity_get_int(id,EV_INT_flags) & FL_ONGROUND)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_KILLBEAM)
write_short(id)
message_end()
if(energy[id] < get_pcvar_num(cvar_start_energy))
{
energy[id] += get_pcvar_num(cvar_heal_energy)
if(energy[id] > get_pcvar_num(cvar_start_energy)) energy[id] = get_pcvar_num(cvar_start_energy)
set_hudmessage(255, 0, 0, -1.0, 0.29, 0, 6.0, 1.0, 0.1, 0.2, -1)
ShowSyncHudMsg(id, hudsync, "Jetpack Energy: [%i / %i]", energy[id], get_pcvar_num(cvar_start_energy))
}
}
set_task(get_pcvar_float(cvar_heal_time), "action_heal_user_jetpack",id)
}
public action_drop_user_jetpack(id)
{
remove_task(id)
has_jetpack[id] = false
can_shoot[id] = false
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_KILLBEAM)
write_short(id)
message_end()
emit_sound(id, CHAN_AUTO, JP_DROP_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
new ent = create_entity("info_target")
if(ent)
{
new Float:origin[3], Float:velocity[3]
entity_get_vector(id, EV_VEC_origin, origin)
velocity_by_aim(id, 60, velocity)
origin[0] += velocity[0]
origin[1] += velocity[1]
entity_set_string(ent, EV_SZ_classname, "weapon_jetpack")
entity_set_model(ent, JP_MODEL_W)
entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER)
entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS)
entity_set_int(ent, EV_INT_iuser1, energy[id])
entity_set_float(ent, EV_FL_gravity, 1.0)
entity_set_origin(ent, origin)
}
energy[id] = 0
}
public action_shoot_user_jetpack(id)
{
can_shoot[id] = false
emit_sound(id, CHAN_AUTO, JP_SHOOT_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
new ent = create_entity("info_target")
if(ent)
{
new Float:origin[3], Float:velocity[3], Float:angles[3]
entity_get_vector(id, EV_VEC_origin, origin)
velocity_by_aim(id, 60, velocity)
origin[0] += velocity[0]
origin[1] += velocity[1]
velocity[0] = 0.0
velocity[1] = 0.0
velocity_by_aim(id, get_pcvar_num(cvar_speed), velocity)
entity_set_string(ent, EV_SZ_classname, "info_jetpack_rocket")
entity_set_model(ent, ROCKET_MODEL)
entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
entity_set_int(ent, EV_INT_movetype, MOVETYPE_FLY)
entity_set_size(ent, Float: {-0.5, -0.5, -0.5}, Float:{0.5, 0.5, 0.5})
entity_set_vector(ent, EV_VEC_velocity, velocity)
vector_to_angle(velocity, angles)
entity_set_vector(ent, EV_VEC_angles, angles)
entity_set_edict(ent, EV_ENT_owner,id)
entity_set_int(ent, EV_INT_effects, entity_get_int(ent, EV_INT_effects) | EF_LIGHT)
entity_set_origin(ent, origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(ent)
write_short(sprite_beamcylinder)
write_byte(30)
write_byte(5)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(140)
message_end()
}
set_task(get_pcvar_float(cvar_reload_time), "action_reload_user_jetpack", id)
}
public action_fly_user_jetpack(id)
{
new Float:velocity[3]
velocity_by_aim(id,get_pcvar_num(cvar_aimvelocity),velocity)
velocity[2] += float(get_pcvar_num(cvar_zvelocity))
entity_set_vector(id,EV_VEC_velocity,velocity)
energy[id] -= get_pcvar_num(cvar_remove_energy)
if(energy[id] < 1) energy[id] = 0
set_hudmessage(255, 0, 0, -1.0, 0.29, 0, 6.0, 1.0, 0.1, 0.2, -1)
ShowSyncHudMsg(id, hudsync, "Jetpack Energy: [%i / %i]", energy[id], get_pcvar_num(cvar_start_energy))
if((get_gametime() - last_sndplay[id]) > 1.0)
{
emit_sound(id, CHAN_AUTO, JP_FLY_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
last_sndplay[id] = get_gametime()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_KILLBEAM)
write_short(id)
message_end()
if(entity_get_int(id,EV_INT_flags) & FL_INWATER) return
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(id)
write_short(sprite_beamcylinder)
write_byte(25)
write_byte(10)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(175)
message_end()
}
public action_reload_user_jetpack(id)
{
if(!is_user_connected(id) || !has_jetpack[id]) return
can_shoot[id] = true
client_print(id,print_center, "[JetPack] Your jetpack has been reloaded. Now you can shoot again!")
}
public get_jetpack(ent,id)
{
if(has_jetpack[id] || zp_get_user_zombie(id) || zp_get_user_nemesis(id)) return
remove_task(id)
has_jetpack[id] = true
can_shoot[id] = false
energy[id] = entity_get_int(ent, EV_INT_iuser1)
emit_sound(id, CHAN_AUTO, JP_EQUIP_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
client_cmd(id, "weapon_knife")
entity_set_string(id, EV_SZ_viewmodel, JP_MODEL_V)
entity_set_string(id, EV_SZ_weaponmodel, JP_MODEL_P))
set_task(get_pcvar_float(cvar_reload_time), "action_reload_user_jetpack",id)
set_task(get_pcvar_float(cvar_heal_time), "action_heal_user_jetpack",id)
remove_entity(ent)
}
public touch_jetpack(world, ent)
{
if(!is_valid_ent(ent) || (is_valid_ent(world) && entity_get_int(world, EV_INT_solid) == SOLID_TRIGGER)) return
new Float:origin[3], origin_int[3], owner = entity_get_edict(ent, EV_ENT_owner)
entity_get_vector(ent, EV_VEC_origin, origin)
FVecIVec(origin,origin_int)
new id = -1
while((id = find_ent_in_sphere(id, origin, float(get_pcvar_num(cvar_radius)))) != 0)
{
if(!is_user_connected(owner)) break
if(1 <= id <= maxplayers)
{
if(!zp_get_user_zombie(id) && !zp_get_user_nemesis(id)) continue
ExecuteHamB(Ham_TakeDamage, id, owner, owner, float(get_pcvar_num(cvar_damage)), DMG_ALWAYSGIB)
} else {
if(!is_valid_ent(id)) continue
new classname[15]
entity_get_string(id, EV_SZ_classname, classname,14)
if(!equal(classname, "func_breakable")) continue
ExecuteHamB(Ham_TakeDamage, id, owner, owner, float(get_pcvar_num(cvar_damage)), DMG_ALWAYSGIB)
}
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, origin_int)
write_byte(TE_EXPLOSION)
write_coord(origin_int[0])
write_coord(origin_int[1])
write_coord(origin_int[2])
write_short(sprite_explosion)
write_byte(floatround(get_pcvar_num(cvar_radius) * 0.5))
write_byte(10)
write_byte(0)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, origin_int)
write_byte(TE_DLIGHT)
write_coord(origin_int[0])
write_coord(origin_int[1])
write_coord(origin_int[2])
write_byte(floatround(get_pcvar_num(cvar_radius) * 0.25))
write_byte(200)
write_byte(145)
write_byte(0)
write_byte(16)
write_byte(32)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, origin_int)
write_byte(TE_BEAMCYLINDER)
write_coord(origin_int[0])
write_coord(origin_int[1])
write_coord(origin_int[2])
write_coord(origin_int[0])
write_coord(origin_int[1])
write_coord(origin_int[2] + get_pcvar_num(cvar_radius))
write_short(sprite_beamcylinder)
write_byte(0)
write_byte(0)
write_byte(10)
write_byte(50)
write_byte(0)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(160)
write_byte(0)
message_end()
remove_entity(ent)
}
public hook_death()
{
new id = read_data(2)
action_remove_user_jetpack(id)
}
public action_remove_user_jetpack(id)
{
if(get_pcvar_num(cvar_can_drop))
{
if(has_jetpack[id] && get_user_weapon(id) == CSW_KNIFE) action_drop_user_jetpack(id)
has_jetpack[id] = false
can_shoot[id] = false
energy[id] = 0
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_KILLBEAM)
write_short(id)
message_end()
} else {
has_jetpack[id] = false
can_shoot[id] = false
energy[id] = 0
}
}
public event_curweapon(id)
{
if(has_jetpack[id] && !zp_get_user_zombie(id))
{
entity_set_string(id,EV_SZ_viewmodel, JP_MODEL_V)
entity_set_string(id,EV_SZ_weaponmodel, JP_MODEL_P)
}
}
public round_end()
{
remove_entity_name("weapon_jetpack")
if(get_pcvar_num(cvar_one_round))
{
for(new i=1;i<maxplayers;i++)
{
if(is_user_connected(i))
{
has_jetpack[i] = false
can_shoot[i] = false
energy[i] = 0
}
}
}
}
public client_connect(id) has_jetpack[id] = false
public client_disconnect(id) has_jetpack[id] = false
Благодаря за помощта предварително.