السلام عليكم ورحمة الله وبركاته.
Today offer you (plugin) of my invention, and I hope that you like it receives.
Please accept my translation (Googel).
/// Cvar...
m24_remove_dropped 0 / On / Off
m24_smoke_grenades 1 / On / Off
.
http://perfect-soft.su/_ld/30/77668065.png" border="0" alt="" />
/// Thanks (ArabicMan)
Today offer you (plugin) of my invention, and I hope that you like it receives.
Please accept my translation (Googel).
/// Cvar...
m24_remove_dropped 0 / On / Off
m24_smoke_grenades 1 / On / Off
.
PHP Code:
/* Plugin generated by AMXX-Studio */
#include
#include
#include
#include
#define VERSION "0.1"
const PEV_NADE_TYPE = pev_flTimeStepSound
const NADE_TYPE_SMOKE = 4444
/// Sound Greande M24.
new const g_soundexpl[] = "weapons/m24_exp1.wav"
////
new cvar_removedropped, cvar_smokegrenades, g_msgScreenShake, g_msgScreenFade
new g_trailSpr
new const Float:RADIUS = 240.0
#define JUMP_EXP 500.0
#define JUMP_DAMAGE 20
#define PA_LOW 25.0
#define PA_HIGH 50.0
new g_index_gibs, spriteexpl
public plugin_precache()
{
g_index_gibs = precache_model("models/rockgibs.mdl")
g_trailSpr = precache_model("sprites/laserbeam.spr")
spriteexpl = precache_model("sprites/fexplo1.spr")
engfunc(EngFunc_PrecacheSound, g_soundexpl)
}
public plugin_init()
{
register_plugin("[M24] Grenade", VERSION, "Driss")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
/// Cvar
cvar_removedropped = register_cvar("m24_remove_dropped", "0")
cvar_smokegrenades = register_cvar("m24_smoke_grenades", "1") // Cvar On/off :)
g_msgScreenFade = get_user_msgid("ScreenFade")
g_msgScreenShake = get_user_msgid("ScreenShake")
}
public fw_SetModel(entity, const model[])
{
// We don't care
if (strlen(model) < 8)
return;
// Remove weapons?
if (get_pcvar_float(cvar_removedropped) > 0.0)
{
// Get entity's classname
static classname[10]
pev(entity, pev_classname, classname, charsmax(classname))
// Check if it's a weapon box
if (equal(classname, "weaponbox"))
{
// They get automatically removed when thinking
set_pev(entity, pev_nextthink, get_gametime() + get_pcvar_float(cvar_removedropped))
return;
}
}
// Narrow down our matches a bit
if (model[7] != 'w' || model[8] != '_')
return;
// Get damage time of grenade
static Float:dmgtime
pev(entity, pev_dmgtime, dmgtime)
// Grenade not yet thrown
if (dmgtime == 0.0)
return;
else if (model[9] == 's' && model[10] == 'm' && get_pcvar_num(cvar_smokegrenades)) // Flare
{
fm_set_rendering(entity, kRenderFxGlowShell, 0, 70, 10, kRenderNormal, 16);
// And a colored trail
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(0) // r
write_byte(70) // g
write_byte(10) // b
write_byte(200) // brightness
message_end()
// Set grenade type on the thrown grenade entity
set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_SMOKE)
}
}
// Ham Grenade Think Forward
public fw_ThinkGrenade(entity, ptd)
{
// Invalid entity
if (!pev_valid(entity)) return HAM_IGNORED;
// Get damage time of grenade
static Float:dmgtime, Float:current_time
pev(entity, pev_dmgtime, dmgtime)
current_time = get_gametime()
// Check if it's time to go off
if (dmgtime > current_time)
return HAM_IGNORED;
// Check if it's one of our custom nades
switch (pev(entity, PEV_NADE_TYPE))
{
case NADE_TYPE_SMOKE: // M24
{
bomb_Explode(entity)
return HAM_SUPERCEDE;
}
}
return HAM_IGNORED;
}
public bomb_Explode(Entity)
{
if(Entity < 0)
return
static Float:Origin[3]
pev(Entity, pev_origin, Origin)
heart_explode(Entity)
make_metal_gibs(Entity)
for(new victim = 1; victim <= get_maxplayers(); victim++)
{
if (!is_user_alive(victim))
continue
new Float:VictimOrigin[3]
pev(victim, pev_origin, VictimOrigin)
new Float:Distance = get_distance_f(Origin, VictimOrigin)
if(Distance <= RADIUS)
{
static Float:NewSpeed
NewSpeed = JUMP_EXP * (1.0 - (Distance / RADIUS))
static Float:Velocity[3]
get_speed_vector(Origin, VictimOrigin, NewSpeed, Velocity)
set_pev(victim, pev_velocity, Velocity)
new Float:fVec[3];
fVec[0] = random_float(PA_LOW , PA_HIGH);
fVec[1] = random_float(PA_LOW , PA_HIGH);
fVec[2] = random_float(PA_LOW , PA_HIGH);
entity_set_vector(victim, EV_VEC_punchangle , fVec);
message_begin(MSG_ONE , g_msgScreenShake , {0,0,0} ,victim)
write_short( 1<<14 );
write_short( 1<<14 );
write_short( 1<<14 );
message_end();
message_begin(MSG_ONE_UNRELIABLE , g_msgScreenFade , {0,0,0} , victim);
write_short( 1<<10 );
write_short( 1<<10 );
write_short( 1<<12 );
write_byte( 225 );
write_byte( 0 );
write_byte( 0 );
write_byte( 125 );
message_end();
set_user_takedamage(victim, JUMP_DAMAGE)
}
}
engfunc(EngFunc_RemoveEntity, Entity)
}
public heart_explode(ent)
{
static Float:flOrigin [ 3 ]
pev ( ent, pev_origin, flOrigin )
engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON,g_soundexpl, 1.0, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, flOrigin[0]+random_float(-5.0, 5.0))
engfunc(EngFunc_WriteCoord, flOrigin[1]+random_float(-5.0, 5.0))
engfunc(EngFunc_WriteCoord, flOrigin[2]+50.0)
write_short(spriteexpl)
write_byte(30)
write_byte(200)
message_end()
}
public make_metal_gibs(ent)
{
static Float:flOrigin[3]
pev(ent, pev_origin, flOrigin)
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BREAKMODEL)
engfunc(EngFunc_WriteCoord, flOrigin[0])
engfunc(EngFunc_WriteCoord, flOrigin[1])
engfunc(EngFunc_WriteCoord, flOrigin[2])
engfunc(EngFunc_WriteCoord, 150)
engfunc(EngFunc_WriteCoord, 150)
engfunc(EngFunc_WriteCoord, 150)
engfunc(EngFunc_WriteCoord, random_num(-50,50))
engfunc(EngFunc_WriteCoord, random_num(-50,50))
engfunc(EngFunc_WriteCoord, random_num(-50,50))
write_byte(30)
write_short(g_index_gibs)
write_byte(random_num(20, 30))
write_byte(20)
write_byte(0x04) //0x02 - metal
message_end()
}
stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num
return 1
}
stock set_user_takedamage(index, damage)
{
if(!is_user_alive(index))
return
new vec[3]
FVecIVec(get_target_origin_f(index), vec)
message_begin(MSG_ONE, get_user_msgid("Damage"), _, index)
write_byte(0)
write_byte(damage)
write_long(DMG_CRUSH)
write_coord(vec[0])
write_coord(vec[1])
write_coord(vec[2])
message_end()
if(pev(index, pev_health) - 20.0 <= 0)
ExecuteHamB(Ham_Killed, index, index, 1)
else ExecuteHamB(Ham_TakeDamage, index, 0, index, float(damage), DMG_BLAST)
}
stock Float:get_target_origin_f(index)
{
new Float:orig[3]
pev(index, pev_origin, orig)
if(index > get_maxplayers())
{
new Float:mins[3], Float:maxs[3]
pev(index, pev_mins, mins)
pev(index, pev_maxs, maxs)
if(!mins[2]) orig[2] += maxs[2] / 2
}
return orig
}
// Set entity's rendering type (from fakemeta_util)
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float(r)
color[1] = float(g)
color[2] = float(b)
set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}
/// Thanks (ArabicMan)
Wyświetl pełny artykuł