| abdobiskra |
06-28-2017 05:39 |
Re: ignored owner
this full code :
PHP Code:
/* * * Date creation: / v0.1 - 07.05.11, v0.2 - 15.05.11, v0.3 - 09.07.11, v0.4 - 13.07.11, v0.4a - 18.07.11 * * v0.1 - [first release] * v0.2 - [removed sound on activate & few little errors] * v0.3 - [code little rewriting] * v0.4 - [1)added chek cvar "mp_weaponstay", 2)added cvar "amx_HL_hurt_player"] * v0.4a - [1)added chek on hit - victim alive ?, 2)fix HANDGRENADE touch, 3)fix "4" cvar 1-st value, 4)Now support damager plugin, 5)Fixed plugin run time error with HLW_MP5(then grenade throw & weapon swiched)]. * * http://aghl.ru/forum/ - Russian Half-Life and Adrenaline Gamer Community * */
#include <amxmodx> #include <hamsandwich> #include <fakemeta>
#define PLUGIN "activate on shoot" #define VERSION "0.4a" #define AUTHOR "Turanga_Leela"
new drop, push, use, pain
new const func_classes[][] = { "func_door", "func_door_rotating", "func_button" }
new const monsters[][] = { "monster_satchel", "grenade", "monster_snark" }
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) set_task(0.0, "map_restart") for(new u; u < sizeof func_classes; u++) RegisterHam(Ham_TraceAttack, func_classes[u], "classes_TraceAttack", 1) RegisterHam(Ham_TraceAttack, "func_pushable", "pushable", 1) for(new i; i < sizeof monsters; i++) RegisterHam(Ham_Touch, monsters[i], "monsters_touch", 1)
drop = register_cvar("amx_HL_drop_on_touch", "1") push = register_cvar("amx_HL_push_objects", "1") use = register_cvar("amx_HL_use_objects", "1") pain = register_cvar("amx_HL_hurt_player", "1") }
public map_restart() { if(get_cvar_num("mp_weaponstay")) { set_cvar_num("mp_weaponstay", 0) server_cmd("restart") } }
public pushable(this) velocity_func(this, 0, 1)
velocity_func(ent, victim, mode) { if(!get_pcvar_num(push)) return; new Float:vel[3] switch(mode) { case 1: // func_pushable { vel[0] = random_float(-125.0, 125.0), vel[1] = random_float(-125.0, 125.0), vel[2] = random_float(25.0, 125.0) set_pev(ent, pev_velocity, vel) } case 2: // player { pev(ent, pev_velocity, vel) vel[0] *= 2, vel[1] *= 2, vel[2] *= 2 set_pev(victim, pev_velocity, vel) } } } public classes_TraceAttack(this, idattacker) use_func(this, idattacker)
use_func(this, agressor) { if(get_pcvar_num(use)) ExecuteHamB(Ham_Use, this, agressor, agressor, 2, 1.0) } public monsters_touch(monster, target) { new array[32] new owner = pev(monster, pev_owner) pev(target, pev_classname, array, charsmax(array)) if(equal(array, "func_door") || equal(array, "func_door_rotating") || equal(array, "func_button")) use_func(target, owner)
else if(equal(array, "func_pushable")) velocity_func(monster, target, 1) else if(equal(array, "player")) { if(!is_user_alive(target) || target == owner ) return new skip pev(monster, pev_model, array, charsmax(array)) if(equal(array, "models/w_grenade.mdl")) set_pev(monster, pev_solid, SOLID_NOT) else if(equal(array, "models/w_squeak.mdl")) skip = 1 else if(equal(array, "models/w_satchel.mdl")) skip = 0 else return // HLW_MP5(grenade) has NO model "o_O" if(get_pcvar_num(drop)) console_cmd(target, "drop") velocity_func(monster, target, 2) if(!skip) hurt_func(owner, target, get_pcvar_num(pain), monster) } } hurt_func(killer, victim, mode, inflictor) { new damage
switch(mode) { case 0: return case 1: { new Float: kil_orig[3], Float: vic_orig[3] pev(victim, pev_origin, vic_orig), pev(killer, pev_origin, kil_orig) damage = floatround(get_distance_f(kil_orig, vic_orig)) / 32 } case 2,3,4,5,6,7,8,9,10,11: damage = random(get_pcvar_num(pain)) default: damage = get_pcvar_num(pain) } (pev(victim, pev_health) - float(damage) >= 1.0) ? (ExecuteHamB(Ham_TakeDamage, victim, inflictor, killer, float(damage), 0)):ExecuteHamB(Ham_Killed, victim, killer, 2) }
|