game-source/klik/entnum.qc

104 lines
1.6 KiB
C++
Raw Normal View History

#include "common.qh"
#include "server.qh"
#include "entnum.qh"
/* This is a horrible hack. */
float(entity e) entnum = {
local entity walk, walk2;
local float en, tot;
if (!e)
return 0;
en = 1;
walk = nextent(world);
for (tot = 1; tot <= max_clients; tot++) {
if (e == walk)
return tot;
walk = walk.chain = nextent(walk);
}
while (walk) {
tot++;
walk = walk.chain = nextent(walk);
}
walk = nextent(world);
spawn("__ENTNUM_TEMP__");
for (en = 1; en < tot; en++) {
if (e == walk) {
foreach(classname, "__ENTNUM_TEMP__", remove);
return en;
}
walk2 = nextent(walk);
if (walk.chain != walk2) {
spawn("__ENTNUM_TEMP__");
walk2.chain = walk.chain;
walk.chain = walk2;
tot++;
}
walk = walk2;
if (!walk)
break;
}
error("entnum: Invalid entity\n");
};
entity(float num) entfornum = {
local entity walk, walk2;
local float tot;
local float debugnum;
debugnum = num;
tot = 0;
for (walk = world; tot < max_clients; walk = nextent(walk)) {
if (!num)
return walk;
num--;
tot++;
}
if (!num)
return walk;
tot = 0;
for (walk2 = walk; walk2; walk2 = walk2.chain = nextent(walk2))
tot++;
spawn("__ENTNUM_TEMP__");
for (0; tot; tot--) {
walk2 = nextent(walk);
if (walk.chain != walk2) {
spawn("__ENTNUM_TEMP__");
walk2.chain = walk.chain;
walk.chain = walk2;
tot++;
}
walk = walk2;
num--;
if (!num) {
foreach(classname, "__ENTNUM_TEMP__", remove);
return walk;
}
}
error("entfornum: Invalid entity number: ", ftos(debugnum), "\n");
};
string(entity e) etos = {
return ftos(entnum(e));
};