Plugin Cerut: gg_item_bazooka only for COUNTER team
Descriere (adica ce face el mai exact): Vreau sa mi-l modifice cineva ca atunci cand scrii /jetpack sa poata lua doar cei de la Counter Team si cei de la T nu.
Serverul impune conditii strict HLDS/REHLDS?: HLDS
Ai cautat pluginul?(daca da, precizeaza cum): https://forums.alliedmods.net/showthread.php?t=250760
Necesita mod special?: NU
Cerere plugin bazooka only for Counter Team
Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com
Forum rules
Accesează link-ul pentru a putea vedea regulile forumului
Daca doriti sa vi se modifice un plugin, va rugam postati aici .
Accesează link-ul pentru a putea vedea regulile forumului
Daca doriti sa vi se modifice un plugin, va rugam postati aici .
- Hathlze2002
- Membru, skill 0
- Posts: 22
- Joined: 09 Dec 2020, 17:54
- Detinator Steam: Da
- CS Status: Citesc forumul eXtreamCS.com...!
- Detinator server CS: CS.CSUNDERWORLD.RO
- Fond eXtream: 0
- Has thanked: 8 times
-
- Scripter eXtreamCS
- Posts: 917
- Joined: 02 Nov 2020, 01:57
- Detinator Steam: Da
- Fond eXtream: 0
- Discord: lexzor#0630
- Has thanked: 71 times
- Been thanked: 136 times
Code: Select all
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <xs>
#define SoundFire "weapons/rocketfire1.wav"
#define SoundTravel "weapons/rocket1.wav"
#define SoundFly "zs/fly2.wav"
#define SoundBlow "zs/blow.wav"
#define SoundPickup "events/task_complete.wav"
#define ModelRocket "models/rpgrocket.mdl"
#define ModelJetpack_P "models/p_egon.mdl"
#define ModelJetpack_W "models/w_egon.mdl"
#define ModelJetpack_V "models/v_egon.mdl"
#define ClassJetpack "gg_jetpack"
#define ClassJetpack_P "gg_jetpack_p"
#define ClassRocket "gg_bazooka"
#define ItemName "Jetpack+Bazooka"
#define ItemCost 10000
#define RocketSpeed 1500
#define RocketRadius 250.0
#define RocketDamage 100.0
#define JpFwdSpeed 400
#define JpUpVelocity 200.0
#define MaxGas 300
#define IconGreenGas 299
#define IconYellowGas 200
#define IconRedGas 100
#define FlameAndSoundRate 6
//Uncomment this to fully disable knockback
//#define DISABLE_ALL_KNOCKBACK
//Uncomment this to make dropped jetpack bouncing
//#define MAKE_JETPACK_BOUNCING
//Uncomment this to allow player to drop their jetpack
//#define ALLOW_DROP_JETPACK
//Uncomment this to enable death effect (gibs and blood) killed by rocket
//#define MAKE_DEATH_EFFECT
//Uncomment this to enable status icon
//#define MAKE_STATUS_ICON
new iGas[33], Float:fLastShot[33], bool:bHasJetpack[33], SprTrail, SprExplode, SprRing, SprFlame, iMsgScreenShake
#if defined MAKE_DEATH_EFFECT
new bool:bKilledByRocket[33]
#endif
#if defined MAKE_STATUS_ICON
new iMsgStatusIcon
#endif
const PDATA_SAFE = 2
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX_WEAPONS = 4
public plugin_precache()
{
SprTrail = precache_model("sprites/smoke.spr")
SprExplode = precache_model("sprites/zerogxplode.spr")
SprRing = precache_model("sprites/shockwave.spr")
SprFlame = precache_model("sprites/xfireball3.spr")
precache_model(ModelRocket)
precache_model(ModelJetpack_P)
precache_model(ModelJetpack_W)
precache_model(ModelJetpack_V)
precache_sound(SoundFire)
precache_sound(SoundTravel)
precache_sound(SoundFly)
precache_sound(SoundBlow)
precache_sound(SoundPickup)
}
public plugin_init()
{
register_plugin(ItemName, "0.0.1", "wbyokomo") //30.October.2014 04:21PM
register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
RegisterHam(Ham_Killed, "player", "OnKilled")
//RegisterHam(Ham_Killed, "player", "OnKilled", 0, true) //this is for new amx183devbuild only
RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnDeployKnifePost", 1)
register_touch(ClassJetpack, "player", "OnTouchJetPack")
register_touch(ClassRocket, "*", "OnTouchRocket")
register_forward(FM_ClientDisconnect, "OnClientDisconnect")
register_forward(FM_CmdStart, "OnCmdStart")
iMsgScreenShake = get_user_msgid("ScreenShake")
#if defined MAKE_STATUS_ICON
iMsgStatusIcon = get_user_msgid("StatusIcon")
#endif
#if defined ALLOW_DROP_JETPACK
register_clcmd("drop_jp", "CmdDropJetPack")
#endif
register_clcmd("say /jp", "CmdBuyJetPack")
register_clcmd("say_team /jp", "CmdBuyJetPack")
}
#if defined ALLOW_DROP_JETPACK
public CmdDropJetPack(id)
{
if(!is_user_alive(id) || !bHasJetpack[id]) return PLUGIN_HANDLED;
CreateWorldJetPack(id)
RemovePlayerJetPack(id)
bHasJetpack[id] = false
#if defined MAKE_STATUS_ICON
DrawColoredIcon(id)
#endif
return PLUGIN_HANDLED;
}
#endif
public CmdBuyJetPack(id)
{
if(!is_user_alive(id)) return PLUGIN_HANDLED;
if(cs_get_user_team(id) == CS_TEAM_T) return 0
if(bHasJetpack[id])
{
client_print(id, print_chat, "[JETPACK] You already have this item.")
return PLUGIN_HANDLED;
}
new money = cs_get_user_money(id)
if(money < ItemCost)
{
client_print(id, print_chat, "[JETPACK] Not enough CASH to purchase this item.")
return PLUGIN_HANDLED;
}
CreateJetPack(id, 1)
client_print(id, print_chat, "[JETPACK] You got a Jetpack, fly like a BOSS. Hold 'JUMP+DUCK' to fly.")
client_print(id, print_chat, "[JETPACK] Press mouse 'RIGHT-CLICK' to shoot rocket.")
emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
cs_set_user_money(id, money-ItemCost)
return PLUGIN_CONTINUE; //let others see /jp in chat, so they know you purchase a Jetpack
}
public OnNewRound()
{
remove_entity_name(ClassJetpack)
}
public client_putinserver(id)
{
ResetPlayerData(id)
}
public OnClientDisconnect(id)
{
if(bHasJetpack[id])
{
ResetPlayerData(id)
RemovePlayerJetPack(id)
}
}
public OnKilled(id, atk, gibs)
{
if(bHasJetpack[id])
{
ResetPlayerData(id)
CreateWorldJetPack(id)
RemovePlayerJetPack(id)
#if defined MAKE_STATUS_ICON
DrawColoredIcon(id)
#endif
}
#if defined MAKE_DEATH_EFFECT
if(bKilledByRocket[id])
{
SetHamParamInteger(3, 2)
new Float:fOrigin[3]; pev(id, pev_origin, fOrigin);
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
write_byte(TE_LAVASPLASH)
engfunc(EngFunc_WriteCoord, fOrigin[0])
engfunc(EngFunc_WriteCoord, fOrigin[1])
engfunc(EngFunc_WriteCoord, fOrigin[2])
message_end()
bKilledByRocket[id] = false
}
#endif
}
public OnCmdStart(id, uc_handle, random_seed)
{
if(!bHasJetpack[id]) return;
static button; button = get_uc(uc_handle, UC_Buttons);
if((iGas[id] > 0) && (button & IN_DUCK) && (button & IN_JUMP))
{
static Float:Velocity[3]
velocity_by_aim(id, JpFwdSpeed, Velocity)
Velocity[2] = JpUpVelocity
entity_set_vector(id, EV_VEC_velocity, Velocity)
iGas[id] --
if(random(FlameAndSoundRate) == 2) //make random chance to draw flame & play sound to reduce lag, send MSG_PVS instead of MSG_BROADCAST
{
if(iGas[id] > 160) emit_sound(id, CHAN_WEAPON, SoundFly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
else emit_sound(id, CHAN_WEAPON, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
static Float:Origin[3]
entity_get_vector(id, EV_VEC_origin, Origin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(SprFlame)
write_byte(8)
write_byte(200)
message_end()
}
}
else if(button & IN_ATTACK2)
{
static Float:ctime; ctime = get_gametime();
if(fLastShot[id] < ctime)
{
fLastShot[id] = ctime+10.0
CmdRocket(id)
}
}
else if(button & IN_USE)
{
static Float:fVelocity[3]; entity_get_vector(id, EV_VEC_velocity, fVelocity);
if(fVelocity[2] < 0.0)
{
fVelocity[2] = -60.0
entity_set_vector(id, EV_VEC_velocity, fVelocity)
}
}
else if((iGas[id] < MaxGas) && !(button & IN_DUCK) && !(button & IN_JUMP))
{
iGas[id] ++
}
//draw colored icon based on gas amount
#if defined MAKE_STATUS_ICON
if(iGas[id] == IconGreenGas) DrawColoredIcon(id, 1, 0, 255, 0);
else if(iGas[id] == IconYellowGas) DrawColoredIcon(id, 1, 255, 255, 0);
else if(iGas[id] == IconRedGas) DrawColoredIcon(id, 1, 255, 0, 0);
#endif
}
#if defined MAKE_STATUS_ICON
DrawColoredIcon(id, mode=0, r=0, g=0, b=0)
{
if(!mode)
{
message_begin(MSG_ONE, iMsgStatusIcon, _, id)
write_byte(0)
write_string("item_longjump")
message_end()
}
else
{
message_begin(MSG_ONE, iMsgStatusIcon, _, id)
write_byte(1) //mode
write_string("item_longjump")
write_byte(r) //r
write_byte(g) //g
write_byte(b) //b
message_end()
}
}
#endif
public OnDeployKnifePost(ent)
{
if(pev_valid(ent) == PDATA_SAFE)
{
new id = get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
if(pev_valid(id) && bHasJetpack[id]) set_pev(id, pev_viewmodel2, ModelJetpack_V);
}
}
public OnTouchJetPack(ent, id)
{
if(is_valid_ent(ent) && is_user_connected(id))
{
if(!is_user_alive(id) || bHasJetpack[id]) return PLUGIN_HANDLED;
entity_set_int(ent, EV_INT_solid, SOLID_NOT)
remove_entity(ent)
CreateJetPack(id, 0)
client_print(id, print_chat, "[JETPACK] You got a Jetpack, fly like a BOSS. Hold 'JUMP+DUCK' to fly.")
client_print(id, print_chat, "[JETPACK] Press mouse 'RIGHT-CLICK' to shoot rocket.")
emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
return PLUGIN_CONTINUE;
}
public OnTouchRocket(ent, id)
{
if(!is_valid_ent(ent)) return;
entity_set_int(ent, EV_INT_solid, SOLID_NOT)
emit_sound(ent, CHAN_VOICE, SoundTravel, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM) //stop rocket loop sound
new Float:atkOrigin[3]
entity_get_vector(ent, EV_VEC_origin, atkOrigin)
//explosion
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, atkOrigin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, atkOrigin[0])
engfunc(EngFunc_WriteCoord, atkOrigin[1])
engfunc(EngFunc_WriteCoord, atkOrigin[2])
write_short(SprExplode)
write_byte(30)
write_byte(30)
write_byte(10)
message_end()
//ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, atkOrigin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, atkOrigin[0])
engfunc(EngFunc_WriteCoord, atkOrigin[1])
engfunc(EngFunc_WriteCoord, atkOrigin[2])
engfunc(EngFunc_WriteCoord, atkOrigin[0])
engfunc(EngFunc_WriteCoord, atkOrigin[1])
engfunc(EngFunc_WriteCoord, atkOrigin[2]+500.0)
write_short(SprRing)
write_byte(0)
write_byte(0)
write_byte(5)
write_byte(30)
write_byte(0)
write_byte(224)
write_byte(224)
write_byte(224)
write_byte(255)
write_byte(0)
message_end()
//get attacker
new attacker = entity_get_edict(ent, EV_ENT_owner)
if(!is_user_connected(attacker))
{
remove_entity(ent)
return;
}
//get victim
new victim = -1
while((victim = engfunc(EngFunc_FindEntityInSphere, victim, atkOrigin, RocketRadius)) != 0)
{
if(!is_user_alive(victim)) continue; //not alive
if(cs_get_user_team(attacker) == cs_get_user_team(victim)) continue; //friendly fire
//damage calculation
new Float:fOrigin[3], Float:fDistance, Float:fDamage
pev(victim, pev_origin, fOrigin)
fDistance = get_distance_f(fOrigin, atkOrigin)
fDamage = RocketDamage - floatmul(RocketDamage, floatdiv(fDistance, RocketRadius))
fDamage *= 1.0
if(fDamage < 1.0) continue;
//screen shake
message_begin(MSG_ONE_UNRELIABLE, iMsgScreenShake, _, victim)
write_short((1<<12)*8)
write_short((1<<12)*3)
write_short((1<<12)*18)
message_end()
//do damage & knockback
#if !defined DISABLE_ALL_KNOCKBACK
xs_vec_sub(fOrigin, atkOrigin, fOrigin)
xs_vec_mul_scalar(fOrigin, fDamage * 0.7, fOrigin)
xs_vec_mul_scalar(fOrigin, RocketDamage / xs_vec_len(fOrigin), fOrigin)
set_pev(victim, pev_velocity, fOrigin)
#endif
#if defined MAKE_DEATH_EFFECT
new Float:fHealth; pev(victim, pev_health, fHealth);
fHealth = fHealth - fDamage
if(fHealth <= 0.0)
{
//this is much simple but gibs velocity is not awesome, so we move to Ham_Killed to set gibs death
/*ExecuteHamB(Ham_Killed, victim, attacker, 2)
pev(victim, pev_origin, fOrigin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
write_byte(TE_LAVASPLASH)
engfunc(EngFunc_WriteCoord, fOrigin[0])
engfunc(EngFunc_WriteCoord, fOrigin[1])
engfunc(EngFunc_WriteCoord, fOrigin[2])
message_end()*/
bKilledByRocket[victim] = true
}
#endif
ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, fDamage, DMG_BULLET)
//debug chat to see damage done
//client_print(attacker, print_chat, "Rocket damage: %f -- Victim: %d", fDamage, victim)
}
remove_entity(ent)
}
CreateJetPack(id, fullgas)
{
new ent = create_entity("info_target")
if(!is_valid_ent(ent)) return;
bHasJetpack[id] = true
if(fullgas) iGas[id] = MaxGas;
new Float:Origin[3]
entity_get_vector(id, EV_VEC_origin, Origin)
entity_set_string(ent, EV_SZ_classname, ClassJetpack_P)
entity_set_model(ent, ModelJetpack_P)
entity_set_origin(ent, Origin)
entity_set_int(ent, EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(ent, EV_ENT_aiment, id)
entity_set_int(ent, EV_INT_solid, SOLID_NOT)
entity_set_size(ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
entity_set_edict(ent, EV_ENT_owner, id)
}
CreateWorldJetPack(id)
{
new ent = create_entity("info_target")
if(!is_valid_ent(ent)) return;
new Float:Aim[3], Float:Origin[3], iColor[3]
velocity_by_aim(id, 32, Aim)
entity_get_vector(id, EV_VEC_origin, Origin)
Origin[0] += 2*Aim[0]
Origin[1] += 2*Aim[1]
entity_set_string(ent, EV_SZ_classname, ClassJetpack)
entity_set_model(ent, ModelJetpack_W)
#if defined MAKE_JETPACK_BOUNCING
entity_set_int(ent, EV_INT_movetype, MOVETYPE_BOUNCE)
#else
entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS)
#endif
entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER)
entity_set_size(ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
entity_set_float(ent, EV_FL_gravity, 1.25)
entity_set_vector(ent, EV_VEC_origin, Origin)
velocity_by_aim(id, 400, Aim)
entity_set_vector(ent, EV_VEC_velocity, Aim)
iColor[0] = random_num(16,255)
iColor[1] = random(255)
iColor[2] = random(255)
set_rendering(ent, kRenderFxGlowShell, iColor[0], iColor[1], iColor[2], kRenderNormal, 0)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(ent)
write_short(SprTrail)
write_byte(10)
write_byte(5)
write_byte(iColor[0])
write_byte(iColor[1])
write_byte(iColor[2])
write_byte(192)
message_end()
}
CmdRocket(id)
{
new ent = create_entity("info_target")
if(!is_valid_ent(ent)) return;
new Float:origin[3], Float:velocity[3]
entity_get_vector(id, EV_VEC_origin, origin)
origin[2] += 16.0
entity_set_string(ent, EV_SZ_classname, ClassRocket)
entity_set_model(ent, ModelRocket)
entity_set_origin(ent, origin)
entity_set_int(ent, EV_INT_movetype, MOVETYPE_FLY)
entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
entity_set_size(ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
entity_set_edict(ent, EV_ENT_owner, id)
velocity_by_aim(id, 1500, velocity)
entity_set_vector(ent, EV_VEC_velocity, velocity)
vector_to_angle(velocity, origin)
entity_set_vector(ent, EV_VEC_angles, origin)
entity_set_int(ent, EV_INT_effects, EF_LIGHT)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(ent)
write_short(SprTrail)
write_byte(30)
write_byte(5)
write_byte(224)
write_byte(224)
write_byte(224)
write_byte(192)
message_end()
emit_sound(id, CHAN_STATIC, SoundFire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
emit_sound(ent, CHAN_VOICE, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
RemovePlayerJetPack(id)
{
new ent = -1
while((ent = find_ent_by_class(ent, ClassJetpack_P)))
{
if(!is_valid_ent(ent)) continue;
if(entity_get_edict(ent, EV_ENT_owner) != id) continue;
remove_entity(ent)
}
}
ResetPlayerData(id)
{
bHasJetpack[id] = false
fLastShot[id] = 0.0
iGas[id] = MaxGas
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
- Hathlze2002
- Membru, skill 0
- Posts: 22
- Joined: 09 Dec 2020, 17:54
- Detinator Steam: Da
- CS Status: Citesc forumul eXtreamCS.com...!
- Detinator server CS: CS.CSUNDERWORLD.RO
- Fond eXtream: 0
- Has thanked: 8 times
Mersi mult! Merge pluginul.
- Hathlze2002
- Membru, skill 0
- Posts: 22
- Joined: 09 Dec 2020, 17:54
- Detinator Steam: Da
- CS Status: Citesc forumul eXtreamCS.com...!
- Detinator server CS: CS.CSUNDERWORLD.RO
- Fond eXtream: 0
- Has thanked: 8 times
Oare poti face sa dispara bazooka in urmatoarea runda? Ca e o mica problema la mutarea echipelor