msg_entity = e;
WRITESPECTATABLE_MSG_ONE({
WriteByte(MSG_ONE, SVC_TEMPENTITY);
- WriteByte(MSG_ONE, TE_CSQC_NOTIFY);
- WriteByte(MSG_ONE, CSQC_CENTERPRINT_GENERIC);
+ WriteByte(MSG_ONE, TE_CSQC_CENTERPRINT_GENERIC);
WriteByte(MSG_ONE, id);
WriteString(MSG_ONE, s);
if (id != 0 && s != "")
void remove_unsafely(entity e)
{
+ if(e.classname == "spike")
+ error("Removing spikes is forbidden (crylink bug), please report");
remove_builtin(e);
}
#define SUB_OwnerCheck() (other && (other == self.owner))
void RemoveGrapplingHook(entity pl);
+void W_Crylink_Dequeue(entity e);
float WarpZone_Projectile_Touch_ImpactFilter_Callback()
{
if(SUB_OwnerCheck())
{
if(self.classname == "grapplinghook")
RemoveGrapplingHook(self.realowner);
+ else if(self.classname == "spike")
+ {
+ W_Crylink_Dequeue(self);
+ remove(self);
+ }
else
remove(self);
return TRUE;
{
float m, i;
vector start, org, delta, end, enddown, mstart;
+ entity sp;
m = e.dphitcontentsmask;
e.dphitcontentsmask = goodcontents | badcontents;
if (trace_fraction >= 1)
continue;
+ // rule 4: we must "see" some spawnpoint
+ for(sp = world; (sp = find(sp, classname, "info_player_deathmatch")); )
+ if(checkpvs(mstart, sp))
+ break;
+ if(!sp)
+ {
+ for(sp = world; (sp = findflags(sp, flags, FL_ITEM)); )
+ if(checkpvs(mstart, sp))
+ break;
+ if(!sp)
+ continue;
+ }
+
// find a random vector to "look at"
end_x = org_x + random() * delta_x;
end_y = org_y + random() * delta_y;