X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmiscfunctions.qc;h=c66a6328f65903d6d5d5e077a9ec06ae0a480209;hb=8a336668045070d910c34b62f80a16c2042a1a7b;hp=9d0b85385ccbfa1a18383a05908ab9929f725a1d;hpb=fe4926b11ce3b5de1901508af3f4363de0c9ff64;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 9d0b85385..c66a6328f 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -44,16 +44,19 @@ void crosshair_trace_plusvisibletriggers(entity pl) { it.solid = SOLID_BSP; it.ctrace_solidchanged = true; + IL_PUSH(g_ctrace_changed, it); } }); crosshair_trace(pl); - FOREACH_ENTITY_FLOAT(ctrace_solidchanged, true, + IL_EACH(g_ctrace_changed, it.ctrace_solidchanged, { it.solid = SOLID_TRIGGER; it.ctrace_solidchanged = false; }); + + IL_CLEAR(g_ctrace_changed); } void WarpZone_crosshair_trace(entity pl) { @@ -61,15 +64,6 @@ void WarpZone_crosshair_trace(entity pl) } -string admin_name() -{ - if(autocvar_sv_adminnick != "") - return autocvar_sv_adminnick; - else - return "SERVER ADMIN"; -} - - void GameLogEcho(string s) { string fn; @@ -118,65 +112,53 @@ void GameLogClose() } } -entity findnearest(vector point, .string field, string value, vector axismod) +entity findnearest(vector point, bool checkitems, vector axismod) { - entity localhead; - float i; - float j; - float len; vector dist; + int num_nearest = 0; - float num_nearest; - num_nearest = 0; - - localhead = find(NULL, field, value); - while (localhead) + IL_EACH(((checkitems) ? g_items : g_locations), ((checkitems) ? (it.target == "###item###") : (it.classname == "target_location")), { - if ((localhead.items == IT_KEY1 || localhead.items == IT_KEY2) && localhead.target == "###item###") - dist = localhead.oldorigin; + if ((it.items == IT_KEY1 || it.items == IT_KEY2) && it.target == "###item###") + dist = it.oldorigin; else - dist = localhead.origin; + dist = it.origin; dist = dist - point; dist = dist.x * axismod.x * '1 0 0' + dist.y * axismod.y * '0 1 0' + dist.z * axismod.z * '0 0 1'; - len = vlen(dist); + float len = vlen2(dist); - for (i = 0; i < num_nearest; ++i) + int l; + for (l = 0; l < num_nearest; ++l) { - if (len < nearest_length[i]) + if (len < nearest_length[l]) break; } // now i tells us where to insert at // INSERTION SORT! YOU'VE SEEN IT! RUN! - if (i < NUM_NEAREST_ENTITIES) + if (l < NUM_NEAREST_ENTITIES) { - for (j = NUM_NEAREST_ENTITIES - 1; j >= i; --j) + for (int j = NUM_NEAREST_ENTITIES - 1; j >= l; --j) { nearest_length[j + 1] = nearest_length[j]; nearest_entity[j + 1] = nearest_entity[j]; } - nearest_length[i] = len; - nearest_entity[i] = localhead; + nearest_length[l] = len; + nearest_entity[l] = it; if (num_nearest < NUM_NEAREST_ENTITIES) num_nearest = num_nearest + 1; } - - localhead = find(localhead, field, value); - } + }); // now use the first one from our list that we can see - for (i = 0; i < num_nearest; ++i) + for (int j = 0; j < num_nearest; ++j) { - traceline(point, nearest_entity[i].origin, true, NULL); + traceline(point, nearest_entity[j].origin, true, NULL); if (trace_fraction == 1) { - if (i != 0) - { - LOG_TRACE("Nearest point ("); - LOG_TRACE(nearest_entity[0].netname); - LOG_TRACE(") is not visible, using a visible one."); - } - return nearest_entity[i]; + if (j != 0) + LOG_TRACEF("Nearest point (%s) is not visible, using a visible one.", nearest_entity[0].netname); + return nearest_entity[j]; } } @@ -200,17 +182,13 @@ entity findnearest(vector point, .string field, string value, vector axismod) string NearestLocation(vector p) { - entity loc; - string ret; - ret = "somewhere"; - loc = findnearest(p, classname, "target_location", '1 1 1'); + string ret = "somewhere"; + entity loc = findnearest(p, false, '1 1 1'); if (loc) - { ret = loc.message; - } else { - loc = findnearest(p, target, "###item###", '1 1 4'); + loc = findnearest(p, true, '1 1 4'); if (loc) ret = loc.netname; } @@ -476,16 +454,16 @@ void GetCvars(entity this, int f) } // decolorizes and team colors the player name when needed -string playername(entity p) +string playername(entity p, bool team_colorize) { string t; - if (teamplay && !intermission_running && IS_PLAYER(p)) + if (team_colorize && teamplay && !intermission_running && IS_PLAYER(p)) { t = Team_ColorCode(p.team); return strcat(t, strdecolorize(p.netname)); } else - return p.netname; + return ColorTranslateRGB(p.netname); } float want_weapon(entity weaponinfo, float allguns) // WEAPONTODO: what still needs done? @@ -1313,7 +1291,7 @@ void attach_sameorigin(entity e, entity to, string tag) float tagscale; org = e.origin - gettaginfo(to, gettagindex(to, tag)); - tagscale = pow(vlen(v_forward), -2); // undo a scale on the tag + tagscale = (vlen(v_forward) ** -2); // undo a scale on the tag t_forward = v_forward * tagscale; t_left = v_right * -tagscale; t_up = v_up * tagscale;