[ZP] Extra Item: Jetpack + Bazooka 1.1:
Код за потвърждение: Избери целия код
/*
---------------------------------------------------------
# # # #=== ### ## #
# ## #=== # # # #
# # #=== ### ## #
---------------------------------------------------------
[ZP] Extra Item: Jetpack + Bazooka 1.1
Plugin made by <VeCo>
---------------------------------------------------------
If you modify the code, please DO NOT change the author!
---------------------------------------------------------
Contacts:
e-mail: [email protected]
skype: veco_kn
---------------------------------------------------------
Changes log:
-> v 1.0 = First release!
-> v 1.1 = Now, the bazooka can break func_breakable
entities.
Fixed bug with the knife model.
---------------------------------------------------------
Don't forget to visit http://www.amxmodxbg.org :)
---------------------------------------------------------
*/
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>
#include <cstrike>
#include <zombieplague>
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]
public plugin_precache()
{
precache_model("models/v_egon.mdl")
precache_model("models/p_egon.mdl")
precache_model("models/w_egon.mdl")
precache_model("models/rpgrocket.mdl")
sprite_explosion = precache_model("sprites/zerogxplode.spr")
sprite_beamcylinder = precache_model("sprites/white.spr")
precache_sound("weapons/rocketfire1.wav")
precache_sound("common/bodydrop2.wav")
precache_sound("items/gunpickup2.wav")
precache_sound("jetpack.wav")
}
public plugin_init() {
register_plugin("[ZP] Extra Item: Jetpack + Bazooka", "1.1", "<VeCo>")
cvar_cost = register_cvar("vecjp_cost","35")
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","1")
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])
{
client_print(id,print_chat,"[VECJP] You have already own a jetpack.")
return
}
has_jetpack[id] = true
can_shoot[id] = true
energy[id] = get_pcvar_num(cvar_start_energy)
emit_sound(id,CHAN_AUTO,"items/gunpickup2.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM)
client_cmd(id,"weapon_knife")
entity_set_string(id,EV_SZ_viewmodel,"models/v_egon.mdl")
entity_set_string(id,EV_SZ_weaponmodel,"models/p_egon.mdl")
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,"[VECJP] You can't shoot with the jetpack 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,"[VECJP] 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,"common/bodydrop2.wav",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,"models/w_egon.mdl")
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,"weapons/rocketfire1.wav",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,"models/rpgrocket.mdl")
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))
emit_sound(id,CHAN_AUTO,"jetpack.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM)
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,"[VECJP] 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,"items/gunpickup2.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM)
client_cmd(id,"weapon_knife")
entity_set_string(id,EV_SZ_viewmodel,"models/v_egon.mdl")
entity_set_string(id,EV_SZ_weaponmodel,"models/p_egon.mdl")
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)) 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,"models/v_egon.mdl")
entity_set_string(id,EV_SZ_weaponmodel,"models/p_egon.mdl")
}
}
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
Код за потвърждение: Избери целия код
/*================================================================================
-------------------------------------------------
-*- [ZP] Extra Item: Anti-Infection Armor 1.0 -*-
-------------------------------------------------
~~~~~~~~~~~~~~~
- Description -
~~~~~~~~~~~~~~~
This item gives humans some armor that offers protection
against zombie injuries.
================================================================================*/
#include <amxmodx>
#include <fakemeta>
#include <zombieplague>
/*================================================================================
[Plugin Customization]
=================================================================================*/
new const g_item_name[] = { "Anti-Infection Armor" }
const g_item_cost = 5
new const g_sound_buyarmor[] = { "items/tr_kevlar.wav" }
const g_armor_amount = 100
const g_armor_limit = 999
/*============================================================================*/
// Item IDs
new g_itemid_humanarmor
public plugin_precache()
{
precache_sound(g_sound_buyarmor)
}
public plugin_init()
{
register_plugin("[ZP] Extra: Anti-Infection Armor", "1.0", "MeRcyLeZZ")
g_itemid_humanarmor = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)
}
// Human buys our upgrade, give him some armor
public zp_extra_item_selected(player, itemid)
{
if (itemid == g_itemid_humanarmor)
{
set_pev(player, pev_armorvalue, float(min(pev(player, pev_armorvalue)+g_armor_amount, g_armor_limit)))
engfunc(EngFunc_EmitSound, player, CHAN_BODY, g_sound_buyarmor, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
Код за потвърждение: Избери целия код
/*================================================================================
-------------------------------------------
-*- [ZP] Extra Item: Unlimited Clip 1.0 -*-
-------------------------------------------
~~~~~~~~~~~~~~~
- Description -
~~~~~~~~~~~~~~~
This item/upgrade gives players unlimited clip ammo for a single round.
================================================================================*/
#include <amxmodx>
#include <fakemeta>
#include <zombieplague>
/*================================================================================
[Plugin Customization]
=================================================================================*/
new const g_item_name[] = { "Unlimited Clip (single round)" }
const g_item_cost = 10
/*============================================================================*/
// CS Offsets
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX_WEAPONS = 4
// Max Clip for weapons
new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }
new g_itemid_infammo, g_has_unlimited_clip[33]
public plugin_init()
{
register_plugin("[ZP] Extra: Unlimited Clip", "1.0", "MeRcyLeZZ")
g_itemid_infammo = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
}
// Player buys our upgrade, set the unlimited ammo flag
public zp_extra_item_selected(player, itemid)
{
if (itemid == g_itemid_infammo)
g_has_unlimited_clip[player] = true
}
// Reset flags for all players on newround
public event_round_start()
{
for (new id; id <= 32; id++) g_has_unlimited_clip[id] = false;
}
// Unlimited clip code
public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
// Player doesn't have the unlimited clip upgrade
if (!g_has_unlimited_clip[msg_entity])
return;
// Player not alive or not an active weapon
if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
return;
static weapon, clip
weapon = get_msg_arg_int(2) // get weapon ID
clip = get_msg_arg_int(3) // get weapon clip
// Unlimited Clip Ammo
if (MAXCLIP[weapon] > 2) // skip grenades
{
set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]) // HUD should show full clip all the time
if (clip < 2) // refill when clip is nearly empty
{
// Get the weapon entity
static wname[32], weapon_ent
get_weaponname(weapon, wname, sizeof wname - 1)
weapon_ent = fm_find_ent_by_owner(-1, wname, msg_entity)
// Set max clip on weapon
fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon])
}
}
}
// Find entity by its owner (from fakemeta_util)
stock fm_find_ent_by_owner(entity, const classname[], owner)
{
while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && pev(entity, pev_owner) != owner) {}
return entity;
}
// Set Weapon Clip Ammo
stock fm_set_weapon_ammo(entity, amount)
{
set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang3082\\ f0\\ fs16 \n\\ par }
*/
Благодаря ви.