}
}
-bool buffs_BuffModel_Customize()
-{SELFPARAM();
+bool buffs_BuffModel_Customize(entity this)
+{
entity player, myowner;
bool same_team;
player.buff_model.scale = 0.7;
player.buff_model.pflags = PFLAGS_FULLDYNAMIC;
player.buff_model.light_lev = 200;
- player.buff_model.customizeentityforclient = buffs_BuffModel_Customize;
+ setcefc(player.buff_model, buffs_BuffModel_Customize);
}
vector buff_GlowColor(entity buff)
buff_Respawn(this);
}
-float buff_Customize()
-{SELFPARAM();
+float buff_Customize(entity this)
+{
entity player = WaypointSprite_getviewentity(other);
if(!this.buff_active || (this.team && DIFF_TEAM(player, this)))
{
this.skin = buff.m_skin;
this.effects = EF_FULLBRIGHT | EF_STARDUST | EF_NOSHADOW;
this.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY;
- this.customizeentityforclient = buff_Customize;
+ setcefc(this, buff_Customize);
//this.gravity = 100;
this.color = buff.m_color;
this.glowmod = buff_GlowColor(this);
// mutator hooks
MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_SplitHealthArmor)
{
+ entity frag_target = M_ARGV(2, entity);
+ float frag_deathtype = M_ARGV(6, float);
+ float frag_damage = M_ARGV(7, float);
+
if(frag_deathtype == DEATH_BUFF.m_id) { return false; }
if(frag_target.buffs & BUFF_RESISTANCE.m_itemid)
{
vector v = healtharmor_applydamage(50, autocvar_g_buffs_resistance_blockpercent, frag_deathtype, frag_damage);
- damage_take = v.x;
- damage_save = v.y;
+ M_ARGV(4, float) = v.x; // take
+ M_ARGV(5, float) = v.y; // save
}
return false;
MUTATOR_HOOKFUNCTION(buffs, PlayerDamage_Calculate)
{
+ entity frag_attacker = M_ARGV(1, entity);
+ entity frag_target = M_ARGV(2, entity);
+ float frag_deathtype = M_ARGV(3, float);
+ float frag_damage = M_ARGV(4, float);
+ vector frag_force = M_ARGV(6, vector);
+
if(frag_deathtype == DEATH_BUFF.m_id) { return false; }
if(frag_target.buffs & BUFF_SPEED.m_itemid)
frag_attacker.armorvalue = bound(0, frag_attacker.armorvalue + bound(0, frag_damage * autocvar_g_buffs_vampire_damage_steal, frag_target.armorvalue), g_pickup_armorsmall_max);
}
+ M_ARGV(4, float) = frag_damage;
+ M_ARGV(6, vector) = frag_force;
+
return false;
}
-MUTATOR_HOOKFUNCTION(buffs,PlayerSpawn)
-{SELFPARAM();
- self.buffs = 0;
+MUTATOR_HOOKFUNCTION(buffs, PlayerSpawn)
+{
+ entity player = M_ARGV(0, entity);
+
+ player.buffs = 0;
// reset timers here to prevent them continuing after re-spawn
- self.buff_disability_time = 0;
- self.buff_disability_effect_time = 0;
+ player.buff_disability_time = 0;
+ player.buff_disability_effect_time = 0;
return false;
}
MUTATOR_HOOKFUNCTION(buffs, PlayerDies)
{
+ entity frag_target = M_ARGV(2, entity);
+
if(frag_target.buffs)
{
int buffid = buff_FirstFromFlags(frag_target.buffs).m_id;
}
MUTATOR_HOOKFUNCTION(buffs, ForbidThrowCurrentWeapon)
-{SELFPARAM();
+{
if(MUTATOR_RETURNVALUE || gameover) { return false; }
+ entity player = M_ARGV(0, entity);
- if(self.buffs & BUFF_SWAPPER.m_itemid)
+ if(player.buffs & BUFF_SWAPPER.m_itemid)
{
float best_distance = autocvar_g_buffs_swapper_range;
entity closest = world;
FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(
if(!IS_DEAD(it) && !STAT(FROZEN, it) && !it.vehicle)
- if(DIFF_TEAM(it, self))
+ if(DIFF_TEAM(it, player))
{
- float test = vlen2(self.origin - it.origin);
+ float test = vlen2(player.origin - it.origin);
if(test <= best_distance * best_distance)
{
best_distance = sqrt(test);
{
vector my_org, my_vel, my_ang, their_org, their_vel, their_ang;
- my_org = self.origin;
- my_vel = self.velocity;
- my_ang = self.angles;
+ my_org = player.origin;
+ my_vel = player.velocity;
+ my_ang = player.angles;
their_org = closest.origin;
their_vel = closest.velocity;
their_ang = closest.angles;
Drop_Special_Items(closest);
- MUTATOR_CALLHOOK(PortalTeleport, self); // initiate flag dropper
+ MUTATOR_CALLHOOK(PortalTeleport, player); // initiate flag dropper
- setorigin(self, their_org);
+ setorigin(player, their_org);
setorigin(closest, my_org);
closest.velocity = my_vel;
closest.fixangle = true;
closest.oldorigin = my_org;
closest.oldvelocity = my_vel;
- self.velocity = their_vel;
- self.angles = their_ang;
- self.fixangle = true;
- self.oldorigin = their_org;
- self.oldvelocity = their_vel;
-
- // set pusher so self gets the kill if they fall into void
- closest.pusher = self;
+ player.velocity = their_vel;
+ player.angles = their_ang;
+ player.fixangle = true;
+ player.oldorigin = their_org;
+ player.oldvelocity = their_vel;
+
+ // set pusher so player gets the kill if they fall into void
+ closest.pusher = player;
closest.pushltime = time + autocvar_g_maxpushtime;
closest.istypefrag = PHYS_INPUT_BUTTON_CHAT(closest);
Send_Effect(EFFECT_ELECTRO_COMBO, their_org, '0 0 0', 1);
Send_Effect(EFFECT_ELECTRO_COMBO, my_org, '0 0 0', 1);
- sound(self, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NORM);
+ sound(player, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NORM);
sound(closest, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NORM);
// TODO: add a counter to handle how many times one can teleport, and a delay to prevent spam
- self.buffs = 0;
+ player.buffs = 0;
return true;
}
}
return false;
}
-MUTATOR_HOOKFUNCTION(buffs, MakePlayerObserver) { SELFPARAM(); return buffs_RemovePlayer(self); }
-MUTATOR_HOOKFUNCTION(buffs, ClientDisconnect) { SELFPARAM(); return buffs_RemovePlayer(self); }
+MUTATOR_HOOKFUNCTION(buffs, MakePlayerObserver) { entity player = M_ARGV(0, entity); return buffs_RemovePlayer(player); }
+MUTATOR_HOOKFUNCTION(buffs, ClientDisconnect) { entity player = M_ARGV(0, entity); return buffs_RemovePlayer(player); }
MUTATOR_HOOKFUNCTION(buffs, CustomizeWaypoint)
-{SELFPARAM();
- entity e = WaypointSprite_getviewentity(other);
+{
+ entity wp = M_ARGV(0, entity);
+ entity player = M_ARGV(1, entity);
+
+ entity e = WaypointSprite_getviewentity(player);
// if you have the invisibility powerup, sprites ALWAYS are restricted to your team
// but only apply this to real players, not to spectators
- if((self.owner.flags & FL_CLIENT) && (self.owner.buffs & BUFF_INVISIBLE.m_itemid) && (e == other))
- if(DIFF_TEAM(self.owner, e))
+ if((wp.owner.flags & FL_CLIENT) && (wp.owner.buffs & BUFF_INVISIBLE.m_itemid) && (e == player))
+ if(DIFF_TEAM(wp.owner, e))
return true;
return false;
}
MUTATOR_HOOKFUNCTION(buffs, OnEntityPreSpawn, CBC_ORDER_LAST)
-{SELFPARAM();
+{
+ entity ent = M_ARGV(0, entity);
+
if(autocvar_g_buffs_replace_powerups)
- switch(self.classname)
+ switch(ent.classname)
{
case "item_strength":
case "item_invincible":
{
entity e = spawn();
- buff_SpawnReplacement(e, self);
+ buff_SpawnReplacement(e, ent);
return true;
}
}
}
MUTATOR_HOOKFUNCTION(buffs, WeaponRateFactor)
-{SELFPARAM();
- if(self.buffs & BUFF_SPEED.m_itemid)
- weapon_rate *= autocvar_g_buffs_speed_rate;
+{
+ entity player = M_ARGV(1, entity);
- if(time < self.buff_disability_time)
- weapon_rate *= autocvar_g_buffs_disability_rate;
+ if(player.buffs & BUFF_SPEED.m_itemid)
+ M_ARGV(0, float) *= autocvar_g_buffs_speed_rate;
- return false;
+ if(time < player.buff_disability_time)
+ M_ARGV(0, float) *= autocvar_g_buffs_disability_rate;
}
MUTATOR_HOOKFUNCTION(buffs, WeaponSpeedFactor)
-{SELFPARAM();
- if(self.buffs & BUFF_SPEED.m_itemid)
- ret_float *= autocvar_g_buffs_speed_weaponspeed;
+{
+ entity player = M_ARGV(1, entity);
- if(time < self.buff_disability_time)
- ret_float *= autocvar_g_buffs_disability_weaponspeed;
+ if(player.buffs & BUFF_SPEED.m_itemid)
+ M_ARGV(0, float) *= autocvar_g_buffs_speed_weaponspeed;
- return false;
+ if(time < player.buff_disability_time)
+ M_ARGV(0, float) *= autocvar_g_buffs_disability_weaponspeed;
}
MUTATOR_HOOKFUNCTION(buffs, PlayerPreThink)
}
MUTATOR_HOOKFUNCTION(buffs, SpectateCopy)
-{SELFPARAM();
- self.buffs = other.buffs;
- return false;
+{
+ entity spectatee = M_ARGV(0, entity);
+ entity client = M_ARGV(1, entity);
+
+ client.buffs = spectatee.buffs;
}
MUTATOR_HOOKFUNCTION(buffs, VehicleEnter)