X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fbot%2Fdefault%2Fnavigation.qc;h=ac027bd22915496fe921d884d79b2358d6e6a0ea;hp=9c3bae8e7992f37c5ce9157bfdd7d688808346a8;hb=5aab6120acfc624751d20a695d1b911b3e919831;hpb=a1970558fd84aab0e71ef390a5a705ed2b198200 diff --git a/qcsrc/server/bot/default/navigation.qc b/qcsrc/server/bot/default/navigation.qc index 9c3bae8e79..ac027bd229 100644 --- a/qcsrc/server/bot/default/navigation.qc +++ b/qcsrc/server/bot/default/navigation.qc @@ -265,8 +265,7 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float e int nav_action; // Analyze starting point - traceline(start, start, MOVE_NORMAL, e); - if (trace_dpstartcontents & (DPCONTENTS_SLIME | DPCONTENTS_LAVA)) + if (IN_LAVA(start)) ignorehazards = true; tracebox(start, m1, m2, start, MOVE_NOMONSTERS, e); @@ -732,6 +731,7 @@ void navigation_clearroute(entity this) this.goalcurrent_distance_z = FLOAT_MAX; this.goalcurrent_distance_time = 0; this.goalentity_lock_timeout = 0; + this.goalentity_shouldbefrozen = false; this.goalentity = NULL; this.goalcurrent = NULL; this.goalstack01 = NULL; @@ -1387,7 +1387,6 @@ void navigation_routerating(entity this, entity e, float f, float rangebias) nwp = e.nearestwaypoint; } - LOG_DEBUG("-- checking ", e.classname, " (with cost ", ftos(nwp.wpcost), ")"); if (nwp && nwp.wpcost < 10000000) { //te_wizspike(nwp.wpnearestpoint); @@ -1397,12 +1396,12 @@ void navigation_routerating(entity this, entity e, float f, float rangebias) else nwptoitem_cost = waypoint_gettravelcost(nwp.wpnearestpoint, goal_org, nwp, e); float cost = nwp.wpcost + nwptoitem_cost; - LOG_DEBUG(e.classname, " ", ftos(f), "/(1+", ftos(cost), "/", ftos(rangebias), ") = "); + LOG_DEBUG("checking ^5", e.classname, "^7 with base rating ^xf04", ftos(f), "^7 and rangebias ^xf40", ftos(rangebias)); f = f * rangebias / (rangebias + cost); - LOG_DEBUG("considering ", e.classname, " (with rating ", ftos(f), ")"); + LOG_DEBUG(" ^5", e.classname, "^7 with cost ^6", ftos(cost), "^7 and final rating ^2", ftos(f)); if (navigation_bestrating < f) { - LOG_DEBUG("ground path: added goal ", e.classname, " (with rating ", ftos(f), ")"); + LOG_DEBUG(" ground path: ^3added goal ^5", e.classname); navigation_bestrating = f; navigation_bestgoal = e; } @@ -1509,12 +1508,12 @@ bool navigation_routetogoal(entity this, entity e, vector startposition) } // shorten path by removing intermediate goals -void navigation_shortenpath(entity this) +bool navigation_shortenpath(entity this) { if (!this.goalstack01 || wasfreed(this.goalstack01)) - return; + return false; if (this.bot_tracewalk_time > time) - return; + return false; this.bot_tracewalk_time = max(time, this.bot_tracewalk_time) + 0.25; bool cut_allowed = false; @@ -1553,8 +1552,9 @@ void navigation_shortenpath(entity this) navigation_poproute(this); } while (this.goalcurrent != next); + return true; } - return; + return false; } } @@ -1575,8 +1575,10 @@ void navigation_shortenpath(entity this) { LOG_DEBUG("path optimized for ", this.netname, ", removed a goal from the queue"); navigation_poproute(this); + return true; } } + return false; } // removes any currently touching waypoints from the goal stack @@ -1600,6 +1602,16 @@ int navigation_poptouchedgoals(entity this) this.aistatus &= ~AI_STATUS_WAYPOINT_PERSONAL_GOING; this.aistatus |= AI_STATUS_WAYPOINT_PERSONAL_REACHED; } + if(this.jumppadcount) + { + // remove jumppad waypoint after a random delay to prevent bots getting + // stuck on certain jumppads that require an extra initial horizontal speed + float max_delay = 0.1; + if (vdist(vec2(this.velocity), >, 2 * autocvar_sv_maxspeed)) + max_delay = 0.05; + if (time - this.lastteleporttime < random() * max_delay) + return removed_goals; + } navigation_poproute(this); this.lastteleporttime = 0; ++removed_goals; @@ -1770,6 +1782,7 @@ void navigation_goalrating_end(entity this) this.aistatus |= AI_STATUS_STUCK; } } + this.goalentity_shouldbefrozen = boolean(STAT(FROZEN, this.goalentity)); } void botframe_updatedangerousobjects(float maxupdate)