self.anim_forwardleft = '20 1 1';
self.anim_backright = '21 1 1';
self.anim_backleft = '22 1 1';
+ self.anim_melee = '23 1 1';
animparseerror = FALSE;
animfilename = strcat(self.model, ".animinfo");
animfile = fopen(animfilename, FILE_READ);
self.anim_forwardleft = animparseline(animfile);
self.anim_backright = animparseline(animfile);
self.anim_backleft = animparseline(animfile);
+ self.anim_melee = animparseline(animfile);
fclose(animfile);
// derived anims
frag_inflictor = inflictor;
frag_target = self;
MUTATOR_CALLHOOK(PlayerDies);
+ weapon_action(self.weapon, WR_PLAYERDEATH);
if(self.flagcarried)
{
}
}
-// sendflags use: 1 = origin, 2 = health/armor, 0x80 = same team (includes health), 4 = entity out of range/culled
+// sendflags use: 1 = health (value is 0 or 1 for dead/alive on enemies), 2 = armor, 0x80 = same team (includes health)
float SendEntity_ShowNames(entity to, float sendflags)
{
+ float the_health;
+ the_health = self.health;
+
WriteByte(MSG_ENTITY, ENT_CLIENT_SHOWNAMES);
WriteByte(MSG_ENTITY, num_for_edict(self.owner));
sendflags = sendflags & 127;
if(teams_matter && self.owner.team == to.team)
sendflags |= 128;
- else
- sendflags &~= 2;
+ else if(self.owner.health >= 1)
+ the_health = 1;
+
WriteByte(MSG_ENTITY, sendflags);
if(sendflags & 1)
{
- WriteShort(MSG_ENTITY, rint(self.origin_x));
- WriteShort(MSG_ENTITY, rint(self.origin_y));
- WriteShort(MSG_ENTITY, rint(self.origin_z));
+ WriteByte(MSG_ENTITY, the_health);
}
if(sendflags & 2)
{
- WriteByte(MSG_ENTITY, self.health);
WriteByte(MSG_ENTITY, self.armorvalue);
}
return TRUE;
}
-const vector SHOWNAMES_ORIGIN_OFFSET = '0 0 48';
void shownames_think()
{
- if(self.origin - SHOWNAMES_ORIGIN_OFFSET != self.owner.origin)
+ self.origin = self.owner.origin + '0 0 1' * 48;
+ if(self.health != max(0, ceil(self.owner.health/10)))
{
- setorigin(self, self.owner.origin + SHOWNAMES_ORIGIN_OFFSET);
+ self.health = max(0, ceil(self.owner.health/10));
self.SendFlags |= 1;
}
- if(self.health != floor(self.owner.health) || self.armorvalue != floor(self.owner.armorvalue))
+ if(self.armorvalue != max(0, ceil(self.owner.armorvalue/10)))
{
- self.health = floor(self.owner.health);
- self.armorvalue = floor(self.owner.armorvalue);
+ self.armorvalue = max(0, ceil(self.owner.armorvalue/10));
self.SendFlags |= 2;
}
self.nextthink = time;
}
-float shownames_customize()
-{
- // return TRUE;
- //if(vlen(other.origin - self.origin) < autocvar_sv_shownames_cull_distance)
- if(self.owner != other) // no need to spam own coordinates
- if(self.owner.team == other.team || (self.owner.team != other.team && checkpvs(self.origin, other)))
- return TRUE;
-
- return FALSE;
-}
-
.float muted; // to be used by prvm_edictset server playernumber muted 1
float Say(entity source, float teamsay, entity privatesay, string msgin, float floodcontrol)
// message "": do not say, just test flood control