#include "constants.qh"
#include "../client/mutators/events.qh"
#include "mapinfo.qh"
- #include "notifications.qh"
- #include "deathtypes/all.qh"
+ #include "notifications/all.qh"
+ #include <common/deathtypes/all.qh>
#elif defined(MENUQC)
#elif defined(SVQC)
#include "constants.qh"
#include "../server/autocvars.qh"
#include "../server/defs.qh"
#include "../server/mutators/events.qh"
- #include "notifications.qh"
- #include "deathtypes/all.qh"
+ #include "notifications/all.qh"
+ #include <common/deathtypes/all.qh>
#include "mapinfo.qh"
#endif
+#ifndef MENUQC
+/*
+* Get "real" origin, in worldspace, even if ent is attached to something else.
+*/
+vector real_origin(entity ent)
+{
+ entity e;
+ vector v = ((ent.absmin + ent.absmax) * 0.5);
+
+ e = ent.tag_entity;
+ while(e)
+ {
+ v = v + ((e.absmin + e.absmax) * 0.5);
+ e = e.tag_entity;
+ }
+
+ return v;
+}
+#endif
+
string wordwrap_buffer;
void wordwrap_buffer_put(string s)
#ifndef MENUQC
#ifndef CSQC
+entity _wordwrap_buffer_sprint_ent;
void wordwrap_buffer_sprint(string s)
-{SELFPARAM();
+{
wordwrap_buffer = strcat(wordwrap_buffer, s);
if(s == "\n")
{
- sprint(self, wordwrap_buffer);
+ sprint(_wordwrap_buffer_sprint_ent, wordwrap_buffer);
wordwrap_buffer = "";
}
}
-void wordwrap_sprint(string s, float l)
-{SELFPARAM();
+void wordwrap_sprint(entity to, string s, float l)
+{
wordwrap_buffer = "";
+ _wordwrap_buffer_sprint_ent = to;
wordwrap_cb(s, l, wordwrap_buffer_sprint);
+ _wordwrap_buffer_sprint_ent = NULL;
if(wordwrap_buffer != "")
- sprint(self, strcat(wordwrap_buffer, "\n"));
+ sprint(to, strcat(wordwrap_buffer, "\n"));
wordwrap_buffer = "";
return;
}
{
vector ang;
float p, y, len;
- if(vlen(vec) == 0)
+ if(vec == '0 0 0')
return 0;
//print("compress: ", vtos(vec), "\n");
ang = vectoangles(vec);
'0 1 0' * ma.y + '0 0 1' * ma.z,
'1 0 0' * ma.x,
MOVE_WORLDONLY,
- world);
+ NULL);
if(!trace_startsolid)
mi_min.x = trace_endpos.x;
'1 0 0' * ma.x + '0 0 1' * ma.z,
'0 1 0' * ma.y,
MOVE_WORLDONLY,
- world);
+ NULL);
if(!trace_startsolid)
mi_min.y = trace_endpos.y;
'1 0 0' * ma.x + '0 1 0' * ma.y,
'0 0 1' * ma.z,
MOVE_WORLDONLY,
- world);
+ NULL);
if(!trace_startsolid)
mi_min.z = trace_endpos.z;
'0 1 0' * ma.y + '0 0 1' * ma.z,
'1 0 0' * mi.x,
MOVE_WORLDONLY,
- world);
+ NULL);
if(!trace_startsolid)
mi_max.x = trace_endpos.x;
'1 0 0' * ma.x + '0 0 1' * ma.z,
'0 1 0' * mi.y,
MOVE_WORLDONLY,
- world);
+ NULL);
if(!trace_startsolid)
mi_max.y = trace_endpos.y;
'1 0 0' * ma.x + '0 1 0' * ma.y,
'0 0 1' * mi.z,
MOVE_WORLDONLY,
- world);
+ NULL);
if(!trace_startsolid)
mi_max.z = trace_endpos.z;
}
float cvar_settemp(string tmp_cvar, string tmp_value)
{
float created_saved_value;
- entity e;
created_saved_value = 0;
return 0;
}
- for(e = world; (e = find(e, classname, "saved_cvar_value")); )
- if(e.netname == tmp_cvar)
- created_saved_value = -1; // skip creation
+ FOREACH_ENTITY_CLASS("saved_cvar_value", it.netname == tmp_cvar,
+ {
+ created_saved_value = -1; // skip creation
+ break; // no need to continue
+ });
if(created_saved_value != -1)
{
// creating a new entity to keep track of this cvar
- e = new(saved_cvar_value);
- make_pure(e);
+ entity e = new_pure(saved_cvar_value);
e.netname = strzone(tmp_cvar);
e.message = strzone(cvar_string(tmp_cvar));
created_saved_value = 1;
return created_saved_value;
}
-float cvar_settemp_restore()
+int cvar_settemp_restore()
{
- float i = 0;
- entity e = world;
+ int j = 0;
+ // FIXME this new-style loop fails!
+#if 0
+ FOREACH_ENTITY_CLASS("saved_cvar_value", true,
+ {
+ if(cvar_type(it.netname))
+ {
+ cvar_set(it.netname, it.message);
+ strunzone(it.netname);
+ strunzone(it.message);
+ delete(it);
+ ++j;
+ }
+ else
+ LOG_INFOF("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", it.netname);
+ });
+
+#else
+ entity e = NULL;
while((e = find(e, classname, "saved_cvar_value")))
{
if(cvar_type(e.netname))
{
cvar_set(e.netname, e.message);
- strunzone(e.netname);
- strunzone(e.message);
- remove(e);
- ++i;
+ delete(e);
+ ++j;
}
else
- LOG_INFOF("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", e.netname);
+ print(sprintf("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", e.netname));
}
+#endif
- return i;
+ return j;
}
float textLengthUpToWidth(string theText, float maxWidth, vector theSize, textLengthUpToWidth_widthFunction_t w)
// start with a 1-element queue
queue_start = queue_end = e;
- queue_end.(fld) = world;
+ queue_end.(fld) = NULL;
queue_end.FindConnectedComponent_processing = 1;
// for each queued item:
{
// find all neighbors of queue_start
entity t;
- for(t = world; (t = nxt(t, queue_start, pass)); )
+ for(t = NULL; (t = nxt(t, queue_start, pass)); )
{
if(t.FindConnectedComponent_processing)
continue;
// it is connected? ADD IT. It will look for neighbors soon too.
queue_end.(fld) = t;
queue_end = t;
- queue_end.(fld) = world;
+ queue_end.(fld) = NULL;
queue_end.FindConnectedComponent_processing = 1;
}
}
// multi-frame anim: keep as-is
if(a.y == 1)
{
- float dur;
- dur = frameduration(e.modelindex, a.x);
- if(dur <= 0 && b.y)
+ float dur = frameduration(e.modelindex, a.x);
+ if (dur <= 0 && b.y)
{
a = b;
dur = frameduration(e.modelindex, a.x);
}
- if(dur > 0)
+ if (dur > 0)
a.z = 1.0 / dur;
}
return a;
}
#endif
-#ifdef SVQC
-void dedicated_print(string input) // print(), but only print if the server is not local
-{
- if(server_is_dedicated) { LOG_INFO(input); }
-}
-#endif
-
#ifndef MENUQC
-float Announcer_PickNumber(float type, float num)
+Notification Announcer_PickNumber(int type, int num)
{
- switch(type)
+ return = NULL;
+ switch (type)
{
case CNT_GAMESTART:
{
break;
}
}
- return NOTIF_ABORT; // abort sending if none of these numbers were right
}
#endif