PHP Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <engine>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#include <fakemeta_util>
#define ValidTouch(%1) ( is_user_alive(%1) && is_user_connected(%1) )
/*=============================[Plugin Customization]=============================*/
#define CAMPO_TASK
#define RANDOM_COLOR
new const NADE_TYPE_CAMPO = 3679
new const p_bubble[] = "models/zr_leohas/bubble/p_bubble.mdl"
new const v_bubble[] = "models/zr_leohas/bubble/v_bubble.mdl"
new const w_bubble[] = "models/zr_leohas/bubble/w_bubble.mdl"
new const bubble_shield[] = "models/zr_leohas/bubble/bubble_shield.mdl"
new const sprite_grenade_trail[] = "sprites/zr_leohas/bubble/laserbeam.spr"
new const bubble[] = "campo_grenade_forze"
new g_iMsgSayText;
new cvar_flaregrenades, g_trailSpr, cvar_push;
new bool:g_bomb[33]
const item_cost = 15
/*=============================[End Customization]=============================*/
public plugin_init()
{
register_plugin("Force Field Grenade", "v2.1", "lucas_7_94"); // Thanks To Users in credits too!
RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Item_Deploy, "weapon_smokegrenade", "BubbleDeploy", 1)
cvar_flaregrenades = get_cvar_pointer("zp_flare_grenades")
register_event("HLTV", "RoundStart", "a", "1=0", "2=0")
register_clcmd( "say /force", "zp_extra_item_selected");
register_forward(FM_Touch, "fw_Touch")
register_forward(FM_SetModel, "fw_SetModel")
// Push cvar, (Only float's numbers)
cvar_push = register_cvar("zp_forze_push", "7.5")
g_iMsgSayText = get_user_msgid("SayText");
}
public RoundStart()
arrayset( g_bomb, false, 33 );
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, p_bubble)
engfunc(EngFunc_PrecacheModel, v_bubble)
engfunc(EngFunc_PrecacheModel, w_bubble)
engfunc(EngFunc_PrecacheModel, bubble_shield)
g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail)
}
public BubbleDeploy( shield )
{
if( pev_valid( shield ) != 2 )
return HAM_IGNORED;
new id = get_pdata_cbase( shield, 41, 4 );
if( g_bomb[ id ] ) {
set_pev( id, pev_weaponmodel2, p_bubble );
}
set_pev( id, pev_viewmodel2, v_bubble );
return HAM_IGNORED;
}
public client_disconnect(id)
arrayset( g_bomb, false, 33 );
public zp_extra_item_selected(player)
{
if(g_bomb[player]) {
ChatColor(player, "!g[ Bubble ] !yYou already have a force field.")
}
else if ( cs_get_user_money(player) >= 2000 )
{
arrayset( g_bomb, true, player );
give_item(player,"weapon_smokegrenade")
cs_set_user_money(player, cs_get_user_money(player) - 2000);
ChatColor(player, "!g[ Bubble ] !yYou Bought a force field!. This, lasts very little!")
}
}
public fw_PlayerKilled(victim, attacker, shouldgib) arrayset( g_bomb, false, 33 );
public fw_ThinkGrenade(entity)
{
if(!pev_valid(entity))
return HAM_IGNORED
static Float:dmgtime
pev(entity, pev_dmgtime, dmgtime)
if (dmgtime > get_gametime())
return HAM_IGNORED
if(pev(entity, pev_flTimeStepSound) == NADE_TYPE_CAMPO)
CreateEntity(entity)
return HAM_SUPERCEDE
}
public fw_SetModel(entity, const model[])
{
static Float:dmgtime
pev(entity, pev_dmgtime, dmgtime)
if (dmgtime == 0.0)
return FMRES_IGNORED;
if (equal(model[7], "w_sm", 4))
{
new owner = pev(entity, pev_owner)
if( is_user_alive(owner) && g_bomb[owner])
{
set_pcvar_num(cvar_flaregrenades,0)
fm_set_rendering(entity, kRenderFxGlowShell, 000, 255, 255, kRenderNormal, 16)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(entity) // entity
write_short(g_trailSpr) // sprite
write_byte(10) // life
write_byte(10) // width
write_byte(000) // r
write_byte(255) // g
write_byte(255) // b
write_byte(500) // brightness
message_end()
set_pev(entity, pev_flTimeStepSound, NADE_TYPE_CAMPO)
set_task(6.0, "DeleteEntityGrenade" ,entity)
entity_set_model(entity, w_bubble)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public DeleteEntityGrenade(entity) remove_entity(entity)
public CreateEntity(id)
{
arrayset( g_bomb, false, id );
set_pcvar_num(cvar_flaregrenades,1)
// Create entity
new iEntity = create_entity("info_target")
if(!is_valid_ent(iEntity))
return PLUGIN_HANDLED
new Float: Origin[3]
entity_get_vector(id, EV_VEC_origin, Origin)
entity_set_string(iEntity, EV_SZ_classname, bubble)
entity_set_vector(iEntity, EV_VEC_origin, Origin)
entity_set_model(iEntity, bubble_shield)
entity_set_int(iEntity, EV_INT_solid, SOLID_TRIGGER)
entity_set_size(iEntity, Float: {-100.0, -100.0, -100.0}, Float: {100.0, 100.0, 100.0})
entity_set_int(iEntity, EV_INT_renderfx, kRenderFxGlowShell)
entity_set_int(iEntity, EV_INT_rendermode, kRenderTransAlpha)
entity_set_float(iEntity, EV_FL_renderamt, 50.0)
#if defined RANDOM_COLOR
if(is_valid_ent(iEntity))
{
new Float:vColor[3]
for(new i; i < 3; i++)
vColor[i] = random_float(0.0, 255.0)
entity_set_vector(iEntity, EV_VEC_rendercolor, vColor)
}
#endif
#if defined CAMPO_TASK
set_task(15.0, "DeleteEntity", iEntity)
#endif
return PLUGIN_CONTINUE;
}
public zp_user_infected_post(infected, infector)
if (g_bomb[infected])
arrayset( g_bomb, false, infected );
public fw_Touch(ent, touched)
{
if ( !pev_valid(ent) )
return FMRES_IGNORED;
static bubbles[32];
pev(ent, pev_classname, bubbles, 31);
if ( equali(bubbles, bubble) )
{
if( ValidTouch(touched) )
{
new Float:pos_ptr[3], Float:pos_ptd[3], Float:push_power = get_pcvar_float(cvar_push)
pev(ent, pev_origin, pos_ptr)
pev(touched, pev_origin, pos_ptd)
for(new i = 0; i < 3; i++)
{
pos_ptd[i] -= pos_ptr[i]
pos_ptd[i] *= push_power
}
set_pev(touched, pev_velocity, pos_ptd)
set_pev(touched, pev_impulse, pos_ptd)
}
}
return PLUGIN_HANDLED
}
public remove_ent()
remove_entity_name(bubble)
public DeleteEntity( entity ) // Thanks xPaw For The Code =D
if( is_valid_ent( entity ) )
remove_entity( entity );
stock ChatColor(id, input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!y", "^1"); // Default Color
replace_all(msg, 190, "!g", "^4"); // Green Color
replace_all(msg, 190, "!team", "^3"); // Team Color
if (id) players[0] = id; else get_players(players, count, "ch");
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, g_iMsgSayText, _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}