|
Senior Member
|

01-04-2013
, 18:51
Cluster Grenades
|
#1
|
Hello, I'm doing a cluster grenade. Help me. My code, I created entity cluster:
PHP Code:
#include <amxmodx> #include <hamsandwich> #include <fakemeta> #include <engine>
new g_msgDeathMsg;
public plugin_init() { register_plugin("Cluster Grenade", "1.0", "fl0wer")
register_touch("grenade_cluster", "*", "Forward__Touch_Pre") register_forward(FM_SetModel, "Forward__SetModel_Pre")
RegisterHam(Ham_Think, "grenade", "CBaseGrenade__Think_Pre")
g_msgDeathMsg = get_user_msgid("DeathMsg"); }
public Forward__Touch_Pre(pEntity) { if(!pev_valid(pEntity)) return;
new Float:vecOrigin[3], pExpEntity; pev(pEntity, pev_origin, vecOrigin)
static iszAllocStringCached; if(iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "env_explosion"))) { if(pev_valid((pExpEntity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached)))) { set_pev(pExpEntity, pev_origin, vecOrigin) set_pev(pExpEntity, pev_spawnflags, SF_ENVEXPLOSION_NODAMAGE)
DispatchKeyValue(pExpEntity, "iMagnitude", "080") DispatchSpawn(pExpEntity)
force_use(pExpEntity, pExpEntity) } }
static pevVictim; pevVictim = FM_NULLENT;
new Float:flDamage, Float:vecVictimOrigin[3]; new pevOwner = pev(pEntity, pev_owner);
while((pevVictim = engfunc(EngFunc_FindEntityInSphere, pevVictim, vecOrigin, 240.0))) { if(!(1 <= pevVictim <= 32 && is_user_alive(pevVictim))) continue;
if(get_pdata_int(pevVictim, 114) == get_pdata_int(pevOwner, 114)) continue;
pev(pevVictim, pev_origin, vecVictimOrigin)
if((flDamage = 80.0 * (1.0 - (get_distance_f(vecVictimOrigin, vecOrigin) / 240.0))) <= pev(pevVictim, pev_health)) ExecuteHamB(Ham_TakeDamage, pevVictim, pEntity, pevOwner, flDamage, DMG_BLAST) else { set_msg_block(g_msgDeathMsg, BLOCK_SET) ExecuteHamB(Ham_Killed, pevVictim, pevOwner, 0) set_msg_block(g_msgDeathMsg, BLOCK_NOT)
message_begin(MSG_ALL, g_msgDeathMsg) write_byte(pevOwner) write_byte(pevVictim) write_byte(0) write_string("grenade") message_end() } }
engfunc(EngFunc_RemoveEntity, pEntity) }
public Forward__SetModel_Pre(pEntity, szModel[]) { if(strlen(szModel) < 8) return;
if(szModel[7] != 'w' || szModel[8] != '_' || szModel[9] != 'h' || szModel[10] != 'e') return;
static Float:flDmgTime; pev(pEntity, pev_dmgtime, flDmgTime)
if(flDmgTime == 0.0) return;
set_pev(pEntity, pev_flTimeStepSound, 1111) }
public CBaseGrenade__Think_Pre(pEntity) { if(!pev_valid(pEntity)) return;
static Float:flDmgTime; pev(pEntity, pev_dmgtime, flDmgTime)
if(flDmgTime > get_gametime()) return;
if(pev(pEntity, pev_flTimeStepSound) != 1111) return;
new Float:vecOrigin[3], pGrenade; pev(pEntity, pev_origin, vecOrigin)
static iszAllocStringCached;
for(new i = 0; i < 4; i++) { if(iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "info_target"))) pGrenade = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
if(!pev_valid(pGrenade)) continue;
set_pev(pGrenade, pev_classname, "grenade_cluster") set_pev(pGrenade, pev_movetype, MOVETYPE_TOSS) set_pev(pGrenade, pev_solid, SOLID_TRIGGER) set_pev(pGrenade, pev_owner, pev(pEntity, pev_owner)) set_pev(pGrenade, pev_origin, vecOrigin)
engfunc(EngFunc_SetSize, pGrenade, Float:{ 0.0, 0.0, 0.0 }, Float:{ 0.0, 0.0, 0.0 }) engfunc(EngFunc_SetModel, pGrenade, "models/grenade.mdl") } }
I'm having difficulty with this scheme:
Last edited by fl0werD; 01-04-2013 at 18:51.
|
|