]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/bot/default/navigation.qc
Merge branch 'master' into Mario/target_teleporter_v2
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / bot / default / navigation.qc
index 75ddd15f5dabcb10bcdde3d132a28e9c1f4e7edb..d0061b90068efbcade910b2332e20c5aff9198b5 100644 (file)
@@ -1,5 +1,7 @@
 #include "navigation.qh"
 
+#include <server/defs.qh>
+#include <server/miscfunctions.qh>
 #include "cvars.qh"
 
 #include "bot.qh"
@@ -136,7 +138,7 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float m
                        if (trace_fraction < 1)
                        {
                                swimming = true;
-                               org = trace_endpos - normalize(org - trace_endpos) * stepdist;
+                               org = trace_endpos + normalize(org - trace_endpos) * stepdist;
                                for (; org.z < end.z + e.maxs.z; org.z += stepdist)
                                {
                                        if(autocvar_bot_debug_tracewalk)
@@ -181,12 +183,12 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float m
                                                if(autocvar_bot_debug_tracewalk)
                                                        debugnodestatus(trace_endpos, DEBUG_NODE_WARNING);
 
-                                               FOREACH_ENTITY_CLASS("func_ladder", true,
+                                               IL_EACH(g_ladders, it.classname == "func_ladder",
                                                        { it.solid = SOLID_BSP; });
 
                                                traceline( org, move, movemode, e);
 
-                                               FOREACH_ENTITY_CLASS("func_ladder", true,
+                                               IL_EACH(g_ladders, it.classname == "func_ladder",
                                                        { it.solid = SOLID_TRIGGER; });
 
                                                if ( trace_ent.classname == "door_rotating" || trace_ent.classname == "door")
@@ -853,6 +855,9 @@ void navigation_routerating(entity this, entity e, float f, float rangebias)
        }
        else
        {
+               if(autocvar_g_waypointeditor && e.nearestwaypointtimeout >= 0 && time > e.nearestwaypointtimeout)
+                       e.nearestwaypoint = NULL;
+
                if ((!e.nearestwaypoint || e.navigation_dynamicgoal)
                        && e.nearestwaypointtimeout >= 0 && time > e.nearestwaypointtimeout)
                {
@@ -875,6 +880,8 @@ void navigation_routerating(entity this, entity e, float f, float rangebias)
 
                        if(e.navigation_dynamicgoal)
                                e.nearestwaypointtimeout = time + 2;
+                       else if(autocvar_g_waypointeditor)
+                               e.nearestwaypointtimeout = time + 3 + random() * 2;
                }
                nwp = e.nearestwaypoint;
        }