X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fwarpzonelib%2Fcommon.qc;h=706acde4448aef1d6bad8eb039570cbecabc6129;hb=98e1375c9938f3d86d6f8e28f44cd6af74d2fc0e;hp=521cf343b3efa6b32dae20181218cce6a3224104;hpb=f5517806dce5953f2a2dc2e9312032e99abcf6d0;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/warpzonelib/common.qc b/qcsrc/warpzonelib/common.qc index 521cf343b..706acde44 100644 --- a/qcsrc/warpzonelib/common.qc +++ b/qcsrc/warpzonelib/common.qc @@ -1,5 +1,14 @@ -float trace_dphitcontents; -.float dphitcontentsmask; +#include "common.qh" + +#if defined(CSQC) + #include "../dpdefs/csprogsdefs.qh" + #include "../server/t_items.qh" +#elif defined(MENUQC) +#elif defined(SVQC) + #include "../common/weapons/all.qh" + #include "../dpdefs/dpextensions.qh" + #include "../dpdefs/progsdefs.qh" +#endif void WarpZone_Accumulator_Clear(entity acc) { @@ -32,7 +41,7 @@ void WarpZone_Accumulator_AddInverse(entity acc, entity wz) } .vector(vector, vector) camera_transform; -var float autocvar_cl_warpzone_usetrace = 1; +float autocvar_cl_warpzone_usetrace = 1; vector WarpZone_camera_transform(vector org, vector ang) { vector vf, vr, vu; @@ -263,7 +272,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end, sol = -1; frac = 0; i = 16; - for(;;) + for (;;) { if(--i < 1) { @@ -386,7 +395,7 @@ void WarpZone_TraceToss_ThroughZone(entity e, entity forent, entity zone, WarpZo } WarpZone_MakeAllSolid(); i = 16; - for(;;) + for (;;) { if(--i < 1) { @@ -469,7 +478,7 @@ void WarpZone_TrailParticles_WithMultiplier_trace_callback(vector from, vector e boxparticles(WarpZone_TrailParticles_trace_callback_eff, WarpZone_TrailParticles_trace_callback_own, from, endpos, WarpZone_TrailParticles_trace_callback_own.velocity, WarpZone_TrailParticles_trace_callback_own.velocity, WarpZone_TrailParticles_trace_callback_f, WarpZone_TrailParticles_trace_callback_flags); } -void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, float boxflags) +void WarpZone_TrailParticles_WithMultiplier(entity own, float eff, vector org, vector end, float f, int boxflags) { WarpZone_TrailParticles_trace_callback_own = own; WarpZone_TrailParticles_trace_callback_eff = eff; @@ -508,18 +517,18 @@ vector WarpZone_TransformVAngles(entity wz, vector ang) { #ifdef KEEP_ROLL float roll; - roll = ang_z; - ang_z = 0; + roll = ang.z; + ang.z = 0; #endif ang = AnglesTransform_ApplyToVAngles(wz.warpzone_transform, ang); #ifdef KEEP_ROLL - ang = AnglesTransform_Normalize(ang, TRUE); + ang = AnglesTransform_Normalize(ang, true); ang = AnglesTransform_CancelRoll(ang); - ang_z = roll; + ang.z = roll; #else - ang = AnglesTransform_Normalize(ang, FALSE); + ang = AnglesTransform_Normalize(ang, false); #endif return ang; @@ -544,26 +553,65 @@ vector WarpZone_UnTransformVAngles(entity wz, vector ang) { float roll; - roll = ang_z; - ang_z = 0; + roll = ang.z; + ang.z = 0; ang = AnglesTransform_ApplyToVAngles(AnglesTransform_Invert(wz.warpzone_transform), ang); - ang = AnglesTransform_Normalize(ang, TRUE); + ang = AnglesTransform_Normalize(ang, true); ang = AnglesTransform_CancelRoll(ang); - ang_z = roll; + ang.z = roll; return ang; } vector WarpZoneLib_NearestPointOnBox(vector mi, vector ma, vector org) { vector nearest; - nearest_x = bound(mi_x, org_x, ma_x); - nearest_y = bound(mi_y, org_y, ma_y); - nearest_z = bound(mi_z, org_z, ma_z); + nearest.x = bound(mi.x, org.x, ma.x); + nearest.y = bound(mi.y, org.y, ma.y); + nearest.z = bound(mi.z, org.z, ma.z); return nearest; } +float WarpZoneLib_BadClassname(string myclassname) +{ + switch(myclassname) + { + case "weapon_info": + case "monster_info": + case "deathtype": + case "callback": + case "callbackchain": + case "weaponentity": + case "exteriorweaponentity": + case "csqc_score_team": + case "pingplreport": + case "ent_client_scoreinfo": + case "saved_cvar_value": + case "accuracy": + case "entcs_sender_v2": + case "entcs_receiver_v2": + case "clientinit": + case "sprite_waypoint": + case "waypoint": + case "gibsplash": + //case "net_linked": // actually some real entities are linked without classname, fail + case "": + return true; + } + + if(startsWith(myclassname, "msg_")) + return true; + + if(startsWith(myclassname, "target_")) + return true; + + if(startsWith(myclassname, "info_")) + return true; + + return false; +} + .float WarpZone_findradius_hit; .entity WarpZone_findradius_next; void WarpZone_FindRadius_Recurse(vector org, float rad, vector org0, vector transform, vector shift, float needlineofsight) @@ -582,6 +630,8 @@ void WarpZone_FindRadius_Recurse(vector org, float rad, vector org0, for(e = e0; e; e = e.chain) { + if(WarpZoneLib_BadClassname(e.classname)) + continue; p = WarpZoneLib_NearestPointOnBox(e.origin + e.mins, e.origin + e.maxs, org0); if(needlineofsight) { @@ -617,6 +667,9 @@ void WarpZone_FindRadius_Recurse(vector org, float rad, vector org0, } for(e = wz; e; e = e.WarpZone_findradius_next) { + if(WarpZoneLib_BadClassname(e.classname)) + continue; + org0_new = WarpZone_TransformOrigin(e, org); traceline(e.warpzone_targetorigin, org0_new, MOVE_NOMONSTERS, e); org_new = trace_endpos; @@ -791,11 +844,11 @@ float WarpZoneLib_MoveOutOfSolid(entity e) o = e.origin; traceline(o, o, MOVE_WORLDONLY, e); if (trace_startsolid) - return FALSE; + return false; tracebox(o, e.mins, e.maxs, o, MOVE_WORLDONLY, e); if (!trace_startsolid) - return TRUE; + return true; m0 = e.mins; m1 = e.maxs; @@ -819,8 +872,8 @@ float WarpZoneLib_MoveOutOfSolid(entity e) if (trace_startsolid) { setorigin(e, o); - return FALSE; + return false; } - return TRUE; + return true; }