[nexuiz-commits] r6445 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Apr 6 09:24:06 EDT 2009
Author: div0
Date: 2009-04-06 09:24:05 -0400 (Mon, 06 Apr 2009)
New Revision: 6445
Modified:
trunk/data/qcsrc/server/havocbot.qc
Log:
better void evasion with the jetpack
Modified: trunk/data/qcsrc/server/havocbot.qc
===================================================================
--- trunk/data/qcsrc/server/havocbot.qc 2009-04-06 12:45:20 UTC (rev 6444)
+++ trunk/data/qcsrc/server/havocbot.qc 2009-04-06 13:24:05 UTC (rev 6445)
@@ -5,6 +5,7 @@
.entity ignoregoal;
.float lastfiredweapon;
.float lastcombotime;
+.float havocbot_blockhead;
#ifdef DEBUG_BOT_GOALSTACK
void debuggoalstack();
@@ -365,12 +366,10 @@
if not(self.flags & FL_ONGROUND)
{
tracebox(self.origin, self.mins, self.maxs, self.origin + '0 0 -65536', MOVE_NOMONSTERS, self);
-
if(tracebox_hits_trigger_hurt(self.origin, self.mins, self.maxs, trace_endpos ))
if(self.items & IT_JETPACK)
{
tracebox(self.origin, self.mins, self.maxs, self.origin + '0 0 65536', MOVE_NOMONSTERS, self);
-
if(tracebox_hits_trigger_hurt(self.origin, self.mins, self.maxs, trace_endpos + '0 0 1' ))
{
if(self.velocity_z<0)
@@ -382,27 +381,31 @@
self.BUTTON_HOOK = TRUE;
// If there is no goal try to move forward
+
if(self.goalcurrent==world)
+ dir = v_forward;
+ else
+ dir = normalize(self.goalcurrent.origin - self.origin);
+
+ local vector xyvelocity = self.velocity; xyvelocity_z = 0;
+ local float xyspeed = xyvelocity * dir;
+
+ if(xyspeed < (maxspeed / 2))
{
- local vector xyvelocity = self.velocity; xyvelocity_z = 0;
- local float xyspeed = vlen(xyvelocity);
-
- if(xyspeed > (maxspeed / 1.5) && xyspeed > (maxspeed / 4))
+ makevectors(self.v_angle_y * '0 1 0');
+ tracebox(self.origin, self.mins, self.maxs, self.origin + (dir * maxspeed * 3), MOVE_NOMONSTERS, self);
+ if(trace_fraction==1)
{
- self.movement_x = 0;
+ self.movement_x = dir * v_forward * maxspeed;
+ self.movement_y = dir * v_right * maxspeed;
+ if (skill < 10)
+ havocbot_keyboard_movement(self.origin + dir * 100);
}
- else
- {
- makevectors(self.v_angle_y * '0 1 0');
- tracebox(self.origin, self.mins, self.maxs, self.origin + (v_forward * maxspeed * 3), MOVE_NOMONSTERS, self);
+ }
- if(trace_fraction==1)
- {
- if(xyspeed < (maxspeed / 2))
- self.movement_x = maxspeed;
- }
- }
- }
+ self.havocbot_blockhead = TRUE;
+
+ return;
}
else if(self.health>cvar("g_balance_rocketlauncher_damage")*0.5)
{
@@ -1000,7 +1003,14 @@
if (bot_strategytoken == self)
if (!bot_strategytoken_taken)
{
- self.havocbot_role();
+ if(self.havocbot_blockhead)
+ {
+ self.havocbot_blockhead = FALSE;
+ }
+ else
+ {
+ self.havocbot_role();
+ }
// TODO: tracewalk() should take care of this job (better path finding under water)
// if we don't have a goal and we're under water look for a waypoint near the "shore" and push it
More information about the nexuiz-commits
mailing list