X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmiscfunctions.qc;h=6e2fdfc0f6d0e48fac4c99f03b39eecbfd727092;hb=b9b7114ea4f553130e727a77029eece79a041cee;hp=fb782ed5c6a242efbba13f0bc72dcb7f9676d9ea;hpb=a73f79e356dd25b6ea678379e7884ee45cc1977b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index fb782ed5c..6e2fdfc0f 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -4,13 +4,14 @@ #include "constants.qh" #include "g_hook.qh" #include "ipban.qh" -#include "mutators/all.qh" +#include "mutators/_mod.qh" #include "../common/t_items.qh" #include "weapons/accuracy.qh" #include "weapons/csqcprojectile.qh" #include "weapons/selection.qh" -#include "../common/command/generic.qh" +#include "../common/command/_mod.qh" #include "../common/constants.qh" +#include #include "../common/deathtypes/all.qh" #include "../common/mapinfo.qh" #include "../common/notifications/all.qh" @@ -19,19 +20,20 @@ #include "../common/triggers/subs.qh" #include "../common/util.qh" #include "../common/turrets/sv_turrets.qh" -#include "../common/weapons/all.qh" +#include #include "../common/vehicles/sv_vehicles.qh" #include "../common/vehicles/vehicle.qh" -#include "../common/items/all.qc" +#include "../common/items/_mod.qh" #include "../common/state.qh" #include "../common/effects/qc/globalsound.qh" +#include "../common/wepent.qh" #include "../lib/csqcmodel/sv_model.qh" #include "../lib/warpzone/anglestransform.qh" #include "../lib/warpzone/server.qh" void crosshair_trace(entity pl) { - traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * MAX_SHOT_DISTANCE, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl)); + traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * max_shot_distance, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl)); } .bool ctrace_solidchanged; void crosshair_trace_plusvisibletriggers(entity pl) @@ -55,7 +57,7 @@ void crosshair_trace_plusvisibletriggers(entity pl) } void WarpZone_crosshair_trace(entity pl) { - WarpZone_traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * MAX_SHOT_DISTANCE, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl)); + WarpZone_traceline_antilag(pl, pl.cursor_trace_start, pl.cursor_trace_start + normalize(pl.cursor_trace_endpos - pl.cursor_trace_start) * max_shot_distance, MOVE_NORMAL, pl, ANTILAG_LATENCY(pl)); } @@ -97,7 +99,7 @@ void GameLogEcho(string s) } if (autocvar_sv_eventlog_console) { - LOG_INFO(s, "\n"); + dedicated_print(strcat(s, "\n")); } } @@ -215,6 +217,21 @@ string NearestLocation(vector p) return ret; } +string AmmoNameFromWeaponentity(entity wpn) +{ + string ammoitems = "batteries"; + switch((wpn.m_weapon).ammo_field) + { + case ammo_shells: ammoitems = ITEM_Shells.m_name; break; + case ammo_nails: ammoitems = ITEM_Bullets.m_name; break; + case ammo_rockets: ammoitems = ITEM_Rockets.m_name; break; + case ammo_cells: ammoitems = ITEM_Cells.m_name; break; + case ammo_plasma: ammoitems = ITEM_Plasma.m_name; break; + case ammo_fuel: ammoitems = ITEM_JetpackFuel.m_name; break; + } + return ammoitems; +} + string formatmessage(entity this, string msg) { float p, p1, p2; @@ -223,20 +240,16 @@ string formatmessage(entity this, string msg) entity cursor_ent; string escape; string replacement; - string ammoitems; p = 0; n = 7; - ammoitems = "batteries"; - if(this.items & ITEM_Plasma.m_itemid) ammoitems = ITEM_Plasma.m_name; - if(this.items & ITEM_Cells.m_itemid) ammoitems = ITEM_Cells.m_name; - if(this.items & ITEM_Rockets.m_itemid) ammoitems = ITEM_Rockets.m_name; - if(this.items & ITEM_Shells.m_itemid) ammoitems = ITEM_Shells.m_name; - WarpZone_crosshair_trace(this); cursor = trace_endpos; cursor_ent = trace_ent; + MUTATOR_CALLHOOK(PreFormatMessage, this, msg); + msg = M_ARGV(1, string); + while (1) { if (n < 1) break; // too many replacements @@ -259,6 +272,8 @@ string formatmessage(entity this, string msg) replacement = substring(msg, p, 2); escape = substring(msg, p + 1, 1); + .entity weaponentity = weaponentities[0]; // TODO: unhardcode + switch(escape) { case "%": replacement = "%"; break; @@ -269,8 +284,8 @@ string formatmessage(entity this, string msg) case "l": replacement = NearestLocation(this.origin); break; case "y": replacement = NearestLocation(cursor); break; case "d": replacement = NearestLocation(this.death_origin); break; - case "w": replacement = ((PS(this).m_weapon == WEP_Null) ? ((PS(this).m_switchweapon == WEP_Null) ? Weapons_from(this.cnt) : PS(this).m_switchweapon) : PS(this).m_weapon).m_name; break; - case "W": replacement = ammoitems; break; + case "w": replacement = ((this.(weaponentity).m_weapon == WEP_Null) ? ((this.(weaponentity).m_switchweapon == WEP_Null) ? Weapons_from(this.(weaponentity).cnt) : this.(weaponentity).m_switchweapon) : this.(weaponentity).m_weapon).m_name; break; + case "W": replacement = AmmoNameFromWeaponentity(this.(weaponentity)); break; case "x": replacement = ((cursor_ent.netname == "" || !cursor_ent) ? "nothing" : cursor_ent.netname); break; case "s": replacement = ftos(vlen(this.velocity - this.velocity_z * '0 0 1')); break; case "S": replacement = ftos(vlen(this.velocity)); break; @@ -447,7 +462,14 @@ void GetCvars(entity this, int f) if (f > 0) { if (s == "cl_weaponpriority") - if (PS(this)) PS(this).m_switchweapon = w_getbestweapon(this); + { + for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) + { + .entity weaponentity = weaponentities[slot]; + if (this.(weaponentity) && (this.(weaponentity).m_weapon != WEP_Null || slot == 0)) + this.(weaponentity).m_switchweapon = w_getbestweapon(this, weaponentity); + } + } if (s == "cl_allow_uidtracking") PlayerStats_GameReport_AddPlayer(this); } @@ -457,7 +479,7 @@ void GetCvars(entity this, int f) string playername(entity p) { string t; - if (teamplay && !intermission_running && IS_PLAYER(p)) + if (teamplay && !game_stopped && IS_PLAYER(p)) { t = Team_ColorCode(p.team); return strcat(t, strdecolorize(p.netname)); @@ -552,6 +574,15 @@ void readplayerstartcvars() g_weaponarena_weapons |= (it.m_wepset); )); } + else if (s == "devall") + { + g_weaponarena = 1; + g_weaponarena_list = "All Weapons"; // TODO: report as more than just all weapons? + FOREACH(Weapons, it != WEP_Null, + { + g_weaponarena_weapons |= (it.m_wepset); + }); + } else if (s == "most") { g_weaponarena = 1; @@ -1073,7 +1104,7 @@ bool WarpZone_Projectile_Touch_ImpactFilter_Callback(entity this, entity toucher if(this.classname == "nade") return false; // no checks here else if(this.classname == "grapplinghook") - RemoveGrapplingHook(this.realowner); + RemoveHook(this); else if(this.classname == "spike") { W_Crylink_Dequeue(this); @@ -1144,7 +1175,6 @@ float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundma { float m, i; vector start, org, delta, end, enddown, mstart; - entity sp; m = e.dphitcontentsmask; e.dphitcontentsmask = goodcontents | badcontents; @@ -1200,16 +1230,26 @@ float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundma continue; // rule 4: we must "see" some spawnpoint or item - for(sp = NULL; (sp = find(sp, classname, "info_player_deathmatch")); ) - if(checkpvs(mstart, sp)) - if((traceline(mstart, sp.origin, MOVE_NORMAL, e), trace_fraction) >= 1) - break; + entity sp = NULL; + IL_EACH(g_spawnpoints, checkpvs(mstart, it), + { + if((traceline(mstart, it.origin, MOVE_NORMAL, e), trace_fraction) >= 1) + { + sp = it; + break; + } + }); if(!sp) { - for(sp = NULL; (sp = findflags(sp, flags, FL_ITEM)); ) - if(checkpvs(mstart, sp)) - if((traceline(mstart, sp.origin + (sp.mins + sp.maxs) * 0.5, MOVE_NORMAL, e), trace_fraction) >= 1) - break; + IL_EACH(g_items, checkpvs(mstart, it), + { + if((traceline(mstart, it.origin + (it.mins + it.maxs) * 0.5, MOVE_NORMAL, e), trace_fraction) >= 1) + { + sp = it; + break; + } + }); + if(!sp) continue; }