|
Veteran Member
Join Date: Mar 2008
Location: Lithuania
|

04-15-2009
, 07:25
Re: ExecuteHam(HamTakeDamage),instant kill.
|
#4
|
Something like this:
PHP Code:
// fm_radius damage stock
stock fm_radius_damage(Float:orig[3], Float:dmg , Float:rad, bit = DMG_BULLET, wpnName[]="",inflictor = 0)
{
new Ent,Classname[33],Float:Health;
while((Ent = engfunc(EngFunc_FindEntityInSphere,Ent,orig,rad)) != 0)
{
pev(Ent,pev_classname,Classname,32);
if(!equal(Classname,"player"))
continue;
pev(Ent,pev_health,Health);
Health -= dmg;
if(Health < 1.0)
{
createKill(Ent,inflictor < 33 && inflictor > 0 ? inflictor : 1,wpnName);
continue;
}
fm_fakedamage(Ent,wpnName,dmg,bit);
}
}
// stock for create kill
stock createKill(id, attacker, weaponDescription[])
{
new FFon = get_cvar_num("mp_friendlyfire");
if (FFon == 1 && get_user_team(id) == get_user_team(attacker))
{
set_pev(attacker,pev_frags,pev(attacker,pev_frags) - 1);
client_print(attacker,print_center,"You killed a teammate");
new money = cs_get_user_money(attacker);
if (money != 0)
cs_set_user_money(attacker,money - 150,1);
}
else if (get_user_team(id) != get_user_team(attacker))
{
set_pev(attacker,pev_frags,pev(attacker,pev_frags) + 1);
new money = cs_get_user_money(attacker);
if (money < 16000)
cs_set_user_money(attacker,money + 300,1);
}
logKill(attacker, id, weaponDescription);
//Kill the victim and block the messages
set_msg_block(get_user_msgid("DeathMsg"),BLOCK_ONCE);
set_msg_block(get_user_msgid("ScoreInfo"),BLOCK_ONCE);
user_kill(id);
//user_kill removes a frag, this gives it back
set_pev(id,pev_frags,pev(id,pev_frags) + 1);
//Replaced HUD death message
message_begin(MSG_ALL,get_user_msgid("DeathMsg"),{0,0,0},0);
write_byte(attacker);
write_byte(id);
write_byte(0);
write_string(weaponDescription);
message_end();
//Update killers scorboard with new info
message_begin(MSG_ALL,get_user_msgid("ScoreInfo"));
write_byte(attacker);
write_short(get_user_frags(attacker));
write_short(get_user_deaths(attacker));
write_short(0);
write_short(get_user_team(attacker));
message_end();
//Update victims scoreboard with correct info
message_begin(MSG_ALL,get_user_msgid("ScoreInfo"));
write_byte(id);
write_short(get_user_frags(id));
write_short(get_user_deaths(id));
write_short(0);
write_short(get_user_team(id));
message_end();
}
// stock for log kill
stock logKill(id, victim, weaponDescription[] )
{
new namea[32],namev[32],authida[35],authidv[35],teama[16],teamv[16];
//Info On Attacker
get_user_name(id,namea,31);
get_user_team(id,teama,15);
get_user_authid(id,authida,34);
//Info On Victim
get_user_name(victim,namev,31);
get_user_team(victim,teamv,15);
get_user_authid(victim,authidv,34);
//Log This Kill
if(id != victim)
{
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
namea,get_user_userid(id),authida,teama,namev,get_user_userid(victim),authidv,teamv, weaponDescription );
}
else
{
log_message("^"%s<%d><%s><%s>^" committed suicide with ^"%s^"",
namea,get_user_userid(id),authida,teama, weaponDescription );
}
}
// from fakemeta_util, fm_fakedamage
stock fm_fakedamage(victim, const classname[], Float:takedmgdamage, damagetype)
{
new class[] = "trigger_hurt"
new entity = engfunc(EngFunc_CreateEntity,engfunc(EngFunc_AllocString,class))
if (!entity)
return 0
new value[16],kvbuffer = engfunc(EngFunc_GetInfoKeyBuffer,entity)
format(value, 15, "%f", takedmgdamage * 2)
engfunc(EngFunc_SetKeyValue, kvbuffer, "dmg", value)
format(value, 15, "%i", damagetype)
engfunc(EngFunc_SetKeyValue, kvbuffer, "damagetype", value)
engfunc(EngFunc_SetKeyValue, kvbuffer, "origin", "8192 8192 8192")
dllfunc(DLLFunc_Spawn,entity)
set_pev(entity, pev_classname, classname)
dllfunc(DLLFunc_Touch,entity,victim)
engfunc(EngFunc_RemoveEntity,entity)
return 1
}
P.S. I know something 100% wrong in my code,because it won't do 50 damage.
|
|