float buffs_BuffModel_Customize()
{
- float same_team = (SAME_TEAM(other, self.owner) || (IS_SPEC(other) && SAME_TEAM(other.enemy, self.owner)));
- if(self.owner.alpha <= 0.5 && !same_team && self.owner.alpha != 0)
+ entity player, myowner;
+ float same_team;
+
+ player = WaypointSprite_getviewentity(other);
+ myowner = self.owner;
+ same_team = (SAME_TEAM(player, myowner) || SAME_TEAM(player, myowner));
+
+ if(myowner.alpha <= 0.5 && !same_team && myowner.alpha != 0)
return FALSE;
-
- if(other == self.owner || (IS_SPEC(other) && other.enemy == self.owner))
+
+ if(player == myowner || (IS_SPEC(other) && other.enemy == myowner))
{
// somewhat hide the model, but keep the glow
self.effects = 0;
void buff_Waypoint_Spawn(entity e)
{
- WaypointSprite_Spawn(Buff_PrettyName(e.buffs), 0, autocvar_g_buffs_waypoint_distance, e, '0 0 1' * e.maxs_z, world, e.team, e, buff_waypoint, TRUE, RADARICON_POWERUP, e.glowmod);
+ WaypointSprite_Spawn(Buff_Sprite(e.buffs), 0, autocvar_g_buffs_waypoint_distance, e, '0 0 1' * e.maxs_z, world, e.team, e, buff_waypoint, TRUE, RADARICON_POWERUP, e.glowmod);
WaypointSprite_UpdateTeamRadar(e.buff_waypoint, RADARICON_POWERUP, e.glowmod);
e.buff_waypoint.waypointsprite_visible_for_player = buff_Waypoint_visible_for_player;
}
if(!MoveToRandomMapLocation(ent, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, ((autocvar_g_buffs_random_location_attempts > 0) ? autocvar_g_buffs_random_location_attempts : 10), 1024, 256))
{
entity spot = SelectSpawnPoint(TRUE);
- setorigin(self, (spot.origin + '0 0 200') + (randomvec() * 300));
- self.angles = spot.angles;
+ setorigin(ent, ((spot.origin + '0 0 200') + (randomvec() * 300)));
+ ent.angles = spot.angles;
}
+ tracebox(ent.origin, ent.mins * 1.5, self.maxs * 1.5, ent.origin, MOVE_NOMONSTERS, ent);
+
+ setorigin(ent, trace_endpos); // attempt to unstick
+
ent.movetype = MOVETYPE_TOSS;
makevectors(ent.angles);
}
if((self.team && DIFF_TEAM(other, self))
- || (other.freezetag_frozen)
+ || (other.frozen)
|| (other.vehicle)
|| (!IS_PLAYER(other))
|| (!self.buff_active)
}
if(!self.buff_active && !self.buff_activetime)
- if(!self.owner || self.owner.freezetag_frozen || self.owner.deadflag != DEAD_NO || !self.owner.iscreature || !(self.owner.buffs & self.buffs))
+ if(!self.owner || self.owner.frozen || self.owner.deadflag != DEAD_NO || !self.owner.iscreature || !(self.owner.buffs & self.buffs))
{
buff_SetCooldown(autocvar_g_buffs_cooldown_respawn + frametime);
self.owner = world;
if(frag_target.deadflag == DEAD_NO)
if(IS_PLAYER(frag_target) || (frag_target.flags & FL_MONSTER))
if(frag_attacker != frag_target)
- if(!frag_target.freezetag_frozen)
+ if(!frag_target.frozen)
if(frag_target.takedamage)
if(DIFF_TEAM(frag_attacker, frag_target))
frag_attacker.health = bound(0, frag_attacker.health + bound(0, frag_damage * autocvar_g_buffs_vampire_damage_steal, frag_target.health), g_pickup_healthsmall_max);
return FALSE;
}
+MUTATOR_HOOKFUNCTION(buffs_CustomizeWaypoint)
+{
+ entity e = WaypointSprite_getviewentity(other);
+
+ // 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) && (e == other))
+ if(DIFF_TEAM(self.owner, e))
+ return TRUE;
+
+ return FALSE;
+}
+
MUTATOR_HOOKFUNCTION(buffs_OnEntityPreSpawn)
{
if(autocvar_g_buffs_replace_powerups)
self.buff_disability_effect_time = time + 0.5;
}
- if(self.freezetag_frozen)
+ if(self.frozen)
{
if(self.buffs)
{
self.buffs = 0;
}
}
-
- if(!(self.oldbuffs & BUFF_JUMP) && !(self.buffs & BUFF_JUMP))
- self.stat_jumpheight = autocvar_sv_jumpvelocity; // reset so we don't break anything
- else if((self.buffs & BUFF_JUMP) && self.stat_jumpheight != autocvar_g_buffs_jump_height)
- self.stat_jumpheight = autocvar_g_buffs_jump_height;
if((self.buffs & BUFF_INVISIBLE) && (self.oldbuffs & BUFF_INVISIBLE))
if(self.alpha != autocvar_g_buffs_invisible_alpha)
if(!self.ammo_fuel) { self.ammo_fuel = 20; }
}
- if(self.oldbuffs & BUFF_JUMP)
- self.stat_jumpheight = autocvar_sv_jumpvelocity;
- else if(self.buffs & BUFF_JUMP)
- self.stat_jumpheight = autocvar_g_buffs_jump_height;
-
if(self.oldbuffs & BUFF_INVISIBLE)
{
- if(time < self.strength_finished && g_minstagib)
- self.alpha = autocvar_g_minstagib_invis_alpha;
+ if(time < self.strength_finished && g_instagib)
+ self.alpha = autocvar_g_instagib_invis_alpha;
else
self.alpha = self.buff_invisible_prev_alpha;
}
else if(self.buffs & BUFF_INVISIBLE)
{
- if(time < self.strength_finished && g_minstagib)
+ if(time < self.strength_finished && g_instagib)
self.buff_invisible_prev_alpha = default_player_alpha;
else
self.buff_invisible_prev_alpha = self.alpha;
precache_sound("keepaway/respawn.wav");
addstat(STAT_BUFFS, AS_INT, buffs);
- addstat(STAT_MOVEVARS_JUMPVELOCITY, AS_FLOAT, stat_jumpheight);
InitializeEntity(world, buffs_DelayedInit, INITPRIO_FINDTARGET);
}
MUTATOR_DEFINITION(mutator_buffs)
{
MUTATOR_HOOK(PlayerDamage_SplitHealthArmor, buffs_PlayerDamage_SplitHealthArmor, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerDamage_Calculate, buffs_PlayerDamage_Calculate, CBC_ORDER_LAST);
+ MUTATOR_HOOK(PlayerDamage_Calculate, buffs_PlayerDamage_Calculate, CBC_ORDER_ANY);
MUTATOR_HOOK(PlayerSpawn, buffs_PlayerSpawn, CBC_ORDER_ANY);
MUTATOR_HOOK(PlayerPhysics, buffs_PlayerPhysics, CBC_ORDER_ANY);
MUTATOR_HOOK(PlayerJump, buffs_PlayerJump, CBC_ORDER_ANY);
MUTATOR_HOOK(MakePlayerObserver, buffs_RemovePlayer, CBC_ORDER_ANY);
MUTATOR_HOOK(ClientDisconnect, buffs_RemovePlayer, CBC_ORDER_ANY);
MUTATOR_HOOK(OnEntityPreSpawn, buffs_OnEntityPreSpawn, CBC_ORDER_ANY);
+ MUTATOR_HOOK(CustomizeWaypoint, buffs_CustomizeWaypoint, CBC_ORDER_ANY);
MUTATOR_HOOK(WeaponRateFactor, buffs_WeaponRate, CBC_ORDER_ANY);
MUTATOR_HOOK(PlayerPreThink, buffs_PlayerThink, CBC_ORDER_ANY);
MUTATOR_HOOK(GetCvars, buffs_GetCvars, CBC_ORDER_ANY);