]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/bot/default/navigation.qc
Merged master.
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / bot / default / navigation.qc
index 75ddd15f5dabcb10bcdde3d132a28e9c1f4e7edb..fc97931541bc3bcdf5d8401ae7612b9e1b6da866 100644 (file)
@@ -136,7 +136,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 +181,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 +853,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 +878,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;
        }