mirror of
https://github.com/ineedbots/iw2_bot_warfare.git
synced 2025-06-09 05:55:30 +00:00
Format scripts
This commit is contained in:
parent
13e6f6c29d
commit
9b8b631ff3
@ -19,39 +19,52 @@ init()
|
|||||||
|
|
||||||
if ( getCvar( "bots_main_GUIDs" ) == "" )
|
if ( getCvar( "bots_main_GUIDs" ) == "" )
|
||||||
setCvar( "bots_main_GUIDs", "" ); //guids of players who will be given host powers, comma seperated
|
setCvar( "bots_main_GUIDs", "" ); //guids of players who will be given host powers, comma seperated
|
||||||
|
|
||||||
if ( getCvar( "bots_main_firstIsHost" ) == "" )
|
if ( getCvar( "bots_main_firstIsHost" ) == "" )
|
||||||
setCvar( "bots_main_firstIsHost", true ); //first player to connect is a host
|
setCvar( "bots_main_firstIsHost", true ); //first player to connect is a host
|
||||||
|
|
||||||
if ( getCvar( "bots_main_waitForHostTime" ) == "" )
|
if ( getCvar( "bots_main_waitForHostTime" ) == "" )
|
||||||
setCvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player
|
setCvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player
|
||||||
|
|
||||||
if ( getCvar( "bots_manage_add" ) == "" )
|
if ( getCvar( "bots_manage_add" ) == "" )
|
||||||
setCvar( "bots_manage_add", 0 ); //amount of bots to add to the game
|
setCvar( "bots_manage_add", 0 ); //amount of bots to add to the game
|
||||||
|
|
||||||
if ( getCvar( "bots_manage_fill" ) == "" )
|
if ( getCvar( "bots_manage_fill" ) == "" )
|
||||||
setCvar( "bots_manage_fill", 0 ); //amount of bots to maintain
|
setCvar( "bots_manage_fill", 0 ); //amount of bots to maintain
|
||||||
|
|
||||||
if ( getCvar( "bots_manage_fill_spec" ) == "" )
|
if ( getCvar( "bots_manage_fill_spec" ) == "" )
|
||||||
setCvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
|
setCvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
|
||||||
|
|
||||||
if ( getCvar( "bots_manage_fill_mode" ) == "" )
|
if ( getCvar( "bots_manage_fill_mode" ) == "" )
|
||||||
setCvar( "bots_manage_fill_mode", 0 ); //fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
|
setCvar( "bots_manage_fill_mode", 0 ); //fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
|
||||||
|
|
||||||
if ( getCvar( "bots_manage_fill_kick" ) == "" )
|
if ( getCvar( "bots_manage_fill_kick" ) == "" )
|
||||||
setCvar( "bots_manage_fill_kick", false ); //kick bots if too many
|
setCvar( "bots_manage_fill_kick", false ); //kick bots if too many
|
||||||
|
|
||||||
if ( getCvar( "bots_team" ) == "" )
|
if ( getCvar( "bots_team" ) == "" )
|
||||||
setCvar( "bots_team", "autoassign" ); //which team for bots to join
|
setCvar( "bots_team", "autoassign" ); //which team for bots to join
|
||||||
|
|
||||||
if ( getCvar( "bots_team_amount" ) == "" )
|
if ( getCvar( "bots_team_amount" ) == "" )
|
||||||
setCvar( "bots_team_amount", 0 ); //amount of bots on axis team
|
setCvar( "bots_team_amount", 0 ); //amount of bots on axis team
|
||||||
|
|
||||||
if ( getCvar( "bots_team_force" ) == "" )
|
if ( getCvar( "bots_team_force" ) == "" )
|
||||||
setCvar( "bots_team_force", false ); //force bots on team
|
setCvar( "bots_team_force", false ); //force bots on team
|
||||||
|
|
||||||
if ( getCvar( "bots_team_mode" ) == "" )
|
if ( getCvar( "bots_team_mode" ) == "" )
|
||||||
setCvar( "bots_team_mode", 0 ); //counts just bots when 1
|
setCvar( "bots_team_mode", 0 ); //counts just bots when 1
|
||||||
|
|
||||||
if ( getCvar( "bots_skill" ) == "" )
|
if ( getCvar( "bots_skill" ) == "" )
|
||||||
setCvar( "bots_skill", 0 ); //0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
|
setCvar( "bots_skill", 0 ); //0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
|
||||||
|
|
||||||
if ( getCvar( "bots_skill_axis_hard" ) == "" )
|
if ( getCvar( "bots_skill_axis_hard" ) == "" )
|
||||||
setCvar( "bots_skill_axis_hard", 0 ); //amount of hard bots on axis team
|
setCvar( "bots_skill_axis_hard", 0 ); //amount of hard bots on axis team
|
||||||
|
|
||||||
if ( getCvar( "bots_skill_axis_med" ) == "" )
|
if ( getCvar( "bots_skill_axis_med" ) == "" )
|
||||||
setCvar( "bots_skill_axis_med", 0 );
|
setCvar( "bots_skill_axis_med", 0 );
|
||||||
|
|
||||||
if ( getCvar( "bots_skill_allies_hard" ) == "" )
|
if ( getCvar( "bots_skill_allies_hard" ) == "" )
|
||||||
setCvar( "bots_skill_allies_hard", 0 );
|
setCvar( "bots_skill_allies_hard", 0 );
|
||||||
|
|
||||||
if ( getCvar( "bots_skill_allies_med" ) == "" )
|
if ( getCvar( "bots_skill_allies_med" ) == "" )
|
||||||
setCvar( "bots_skill_allies_med", 0 );
|
setCvar( "bots_skill_allies_med", 0 );
|
||||||
|
|
||||||
@ -60,18 +73,25 @@ init()
|
|||||||
|
|
||||||
if ( getCvar( "bots_play_move" ) == "" ) //bots move
|
if ( getCvar( "bots_play_move" ) == "" ) //bots move
|
||||||
setCvar( "bots_play_move", true );
|
setCvar( "bots_play_move", true );
|
||||||
|
|
||||||
if ( getCvar( "bots_play_knife" ) == "" ) //bots knife
|
if ( getCvar( "bots_play_knife" ) == "" ) //bots knife
|
||||||
setCvar( "bots_play_knife", true );
|
setCvar( "bots_play_knife", true );
|
||||||
|
|
||||||
if ( getCvar( "bots_play_fire" ) == "" ) //bots fire
|
if ( getCvar( "bots_play_fire" ) == "" ) //bots fire
|
||||||
setCvar( "bots_play_fire", true );
|
setCvar( "bots_play_fire", true );
|
||||||
|
|
||||||
if ( getCvar( "bots_play_nade" ) == "" ) //bots grenade
|
if ( getCvar( "bots_play_nade" ) == "" ) //bots grenade
|
||||||
setCvar( "bots_play_nade", true );
|
setCvar( "bots_play_nade", true );
|
||||||
|
|
||||||
if ( getCvar( "bots_play_obj" ) == "" ) //bots play the obj
|
if ( getCvar( "bots_play_obj" ) == "" ) //bots play the obj
|
||||||
setCvar( "bots_play_obj", true );
|
setCvar( "bots_play_obj", true );
|
||||||
|
|
||||||
if ( getCvar( "bots_play_camp" ) == "" ) //bots camp and follow
|
if ( getCvar( "bots_play_camp" ) == "" ) //bots camp and follow
|
||||||
setCvar( "bots_play_camp", true );
|
setCvar( "bots_play_camp", true );
|
||||||
|
|
||||||
if ( getCvar( "bots_play_jumpdrop" ) == "" ) //bots jump and dropshot
|
if ( getCvar( "bots_play_jumpdrop" ) == "" ) //bots jump and dropshot
|
||||||
setCvar( "bots_play_jumpdrop", true );
|
setCvar( "bots_play_jumpdrop", true );
|
||||||
|
|
||||||
if ( getCvar( "bots_play_ads" ) == "" ) //bot ads
|
if ( getCvar( "bots_play_ads" ) == "" ) //bot ads
|
||||||
setCvar( "bots_play_ads", true );
|
setCvar( "bots_play_ads", true );
|
||||||
|
|
||||||
@ -121,6 +141,7 @@ init()
|
|||||||
//level thread maps\mp\bots\_bot_http::doVersionCheck();
|
//level thread maps\mp\bots\_bot_http::doVersionCheck();
|
||||||
|
|
||||||
level.teamBased = true;
|
level.teamBased = true;
|
||||||
|
|
||||||
if ( getcvar( "gamemode" ) == "dm" )
|
if ( getcvar( "gamemode" ) == "dm" )
|
||||||
level.teamBased = false;
|
level.teamBased = false;
|
||||||
}
|
}
|
||||||
@ -320,6 +341,7 @@ watchVelocity()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
lastOrigin = self.origin;
|
lastOrigin = self.origin;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
@ -427,6 +449,7 @@ spawnBot()
|
|||||||
wait 0.5;
|
wait 0.5;
|
||||||
|
|
||||||
weap = "mp40_mp";
|
weap = "mp40_mp";
|
||||||
|
|
||||||
if ( self.team == "allies" )
|
if ( self.team == "allies" )
|
||||||
{
|
{
|
||||||
if ( game["allies"] == "american" )
|
if ( game["allies"] == "american" )
|
||||||
@ -485,6 +508,7 @@ diffBots_loop()
|
|||||||
if ( var_skill == 8 )
|
if ( var_skill == 8 )
|
||||||
{
|
{
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = 0; i < playercount; i++ )
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -530,6 +554,7 @@ diffBots_loop()
|
|||||||
else if ( var_skill != 0 && var_skill != 9 )
|
else if ( var_skill != 0 && var_skill != 9 )
|
||||||
{
|
{
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = 0; i < playercount; i++ )
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -569,6 +594,7 @@ teamBots_loop()
|
|||||||
axisplayers = 0;
|
axisplayers = 0;
|
||||||
|
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = 0; i < playercount; i++ )
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -610,6 +636,7 @@ teamBots_loop()
|
|||||||
if ( abs( axis - allies ) > 1 )
|
if ( abs( axis - allies ) > 1 )
|
||||||
{
|
{
|
||||||
toTeam = "axis";
|
toTeam = "axis";
|
||||||
|
|
||||||
if ( axis > allies )
|
if ( axis > allies )
|
||||||
toTeam = "allies";
|
toTeam = "allies";
|
||||||
}
|
}
|
||||||
@ -618,6 +645,7 @@ teamBots_loop()
|
|||||||
if ( toTeam != "autoassign" )
|
if ( toTeam != "autoassign" )
|
||||||
{
|
{
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = 0; i < playercount; i++ )
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -637,6 +665,7 @@ teamBots_loop()
|
|||||||
player thread [[level.axis]]();
|
player thread [[level.axis]]();
|
||||||
else
|
else
|
||||||
player thread [[level.spectator]]();
|
player thread [[level.spectator]]();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -645,6 +674,7 @@ teamBots_loop()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = 0; i < playercount; i++ )
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -726,6 +756,7 @@ addBots_loop()
|
|||||||
spec = 0;
|
spec = 0;
|
||||||
|
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = 0; i < playercount; i++ )
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -752,6 +783,7 @@ addBots_loop()
|
|||||||
alliesplayers = 0;
|
alliesplayers = 0;
|
||||||
|
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = 0; i < playercount; i++ )
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -784,8 +816,10 @@ addBots_loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
amount = bots;
|
amount = bots;
|
||||||
|
|
||||||
if ( fillMode == 0 || fillMode == 2 )
|
if ( fillMode == 0 || fillMode == 2 )
|
||||||
amount += players;
|
amount += players;
|
||||||
|
|
||||||
if ( getCvarInt( "bots_manage_fill_spec" ) )
|
if ( getCvarInt( "bots_manage_fill_spec" ) )
|
||||||
amount += spec;
|
amount += spec;
|
||||||
|
|
||||||
@ -794,6 +828,7 @@ addBots_loop()
|
|||||||
else if ( amount > fillAmount && getCvarInt( "bots_manage_fill_kick" ) )
|
else if ( amount > fillAmount && getCvarInt( "bots_manage_fill_kick" ) )
|
||||||
{
|
{
|
||||||
tempBot = random( getBotArray() );
|
tempBot = random( getBotArray() );
|
||||||
|
|
||||||
if ( isDefined( tempBot ) )
|
if ( isDefined( tempBot ) )
|
||||||
kick( tempBot getEntityNumber() );
|
kick( tempBot getEntityNumber() );
|
||||||
}
|
}
|
||||||
@ -823,6 +858,7 @@ onWeaponFired()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self.bots_firing = false;
|
self.bots_firing = false;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "weapon_fired" );
|
self waittill( "weapon_fired" );
|
||||||
@ -869,6 +905,7 @@ watchNade()
|
|||||||
timeSlow = 0;
|
timeSlow = 0;
|
||||||
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
while ( isDefined( self ) )
|
while ( isDefined( self ) )
|
||||||
{
|
{
|
||||||
velocity = vector_scale( self.origin - lastOrigin, 20 );
|
velocity = vector_scale( self.origin - lastOrigin, 20 );
|
||||||
@ -902,6 +939,7 @@ watchNades_loop()
|
|||||||
for ( i = 0; i < nades.size; i++ )
|
for ( i = 0; i < nades.size; i++ )
|
||||||
{
|
{
|
||||||
nade = nades[i];
|
nade = nades[i];
|
||||||
|
|
||||||
if ( !isDefined( nade ) )
|
if ( !isDefined( nade ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -229,6 +229,7 @@ doBotMovement_loop(data)
|
|||||||
startPos = self.origin + ( 0, 0, 50 );
|
startPos = self.origin + ( 0, 0, 50 );
|
||||||
startPosForward = startPos + vector_scale( anglesToForward( ( 0, angles[1], 0 ) ), 25 );
|
startPosForward = startPos + vector_scale( anglesToForward( ( 0, angles[1], 0 ) ), 25 );
|
||||||
bt = bulletTrace( startPos, startPosForward, false, self );
|
bt = bulletTrace( startPos, startPosForward, false, self );
|
||||||
|
|
||||||
if ( bt["fraction"] >= 1 )
|
if ( bt["fraction"] >= 1 )
|
||||||
{
|
{
|
||||||
// check if need to jump
|
// check if need to jump
|
||||||
@ -316,10 +317,13 @@ SetWeaponDistMulti(weap)
|
|||||||
{
|
{
|
||||||
case "rifle":
|
case "rifle":
|
||||||
return 0.9;
|
return 0.9;
|
||||||
|
|
||||||
case "smg":
|
case "smg":
|
||||||
return 0.7;
|
return 0.7;
|
||||||
|
|
||||||
case "pistol":
|
case "pistol":
|
||||||
return 0.5;
|
return 0.5;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -367,9 +371,11 @@ onWeaponChange()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
first = true;
|
first = true;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
newWeapon = undefined;
|
newWeapon = undefined;
|
||||||
|
|
||||||
if ( first )
|
if ( first )
|
||||||
{
|
{
|
||||||
first = false;
|
first = false;
|
||||||
@ -411,6 +417,7 @@ reload_watch_loop()
|
|||||||
if ( self GetWeaponSlotClipAmmo( self getWeaponSlot( weap ) ) >= WeaponClipSize( weap ) )
|
if ( self GetWeaponSlotClipAmmo( self getWeaponSlot( weap ) ) >= WeaponClipSize( weap ) )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.bot.isreloading = false;
|
self.bot.isreloading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -441,6 +448,7 @@ stance_loop()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
toStance = "stand";
|
toStance = "stand";
|
||||||
|
|
||||||
if ( self.bot.next_wp != -1 )
|
if ( self.bot.next_wp != -1 )
|
||||||
toStance = level.waypoints[self.bot.next_wp].type;
|
toStance = level.waypoints[self.bot.next_wp].type;
|
||||||
|
|
||||||
@ -615,6 +623,7 @@ targetObjUpdateTraced(obj, daDist, ent, theTime, isScriptObj)
|
|||||||
distMax *= distMax;
|
distMax *= distMax;
|
||||||
|
|
||||||
timeMulti = 1;
|
timeMulti = 1;
|
||||||
|
|
||||||
if ( !isScriptObj )
|
if ( !isScriptObj )
|
||||||
{
|
{
|
||||||
if ( daDist > distMax )
|
if ( daDist > distMax )
|
||||||
@ -673,6 +682,7 @@ target_loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = -1; i < playercount; i++ )
|
for ( i = -1; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
obj = undefined;
|
obj = undefined;
|
||||||
@ -688,6 +698,7 @@ target_loop()
|
|||||||
obj = self.bot.targets[key];
|
obj = self.bot.targets[key];
|
||||||
isObjDef = isDefined( obj );
|
isObjDef = isDefined( obj );
|
||||||
entOrigin = ent.origin;
|
entOrigin = ent.origin;
|
||||||
|
|
||||||
if ( isDefined( self.bot.script_target_offset ) )
|
if ( isDefined( self.bot.script_target_offset ) )
|
||||||
entOrigin += self.bot.script_target_offset;
|
entOrigin += self.bot.script_target_offset;
|
||||||
|
|
||||||
@ -728,6 +739,7 @@ target_loop()
|
|||||||
obj = self.bot.targets[key];
|
obj = self.bot.targets[key];
|
||||||
daDist = distanceSquared( self.origin, player.origin );
|
daDist = distanceSquared( self.origin, player.origin );
|
||||||
isObjDef = isDefined( obj );
|
isObjDef = isDefined( obj );
|
||||||
|
|
||||||
if ( ( level.teamBased && self.team == player.team ) || player.sessionstate != "playing" || !isAlive( player ) )
|
if ( ( level.teamBased && self.team == player.team ) || player.sessionstate != "playing" || !isAlive( player ) )
|
||||||
{
|
{
|
||||||
if ( isObjDef )
|
if ( isObjDef )
|
||||||
@ -794,6 +806,7 @@ target_loop()
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
timeDiff = theTime - obj.trace_time_time;
|
timeDiff = theTime - obj.trace_time_time;
|
||||||
|
|
||||||
if ( timeDiff < bestTime )
|
if ( timeDiff < bestTime )
|
||||||
{
|
{
|
||||||
bestTargets = [];
|
bestTargets = [];
|
||||||
@ -817,6 +830,7 @@ target_loop()
|
|||||||
for ( i = bestKeys.size - 1; i >= 0; i-- )
|
for ( i = bestKeys.size - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
theDist = bestTargets[bestKeys[i]].dist;
|
theDist = bestTargets[bestKeys[i]].dist;
|
||||||
|
|
||||||
if ( theDist > closest )
|
if ( theDist > closest )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -826,8 +840,10 @@ target_loop()
|
|||||||
|
|
||||||
beforeTargetID = -1;
|
beforeTargetID = -1;
|
||||||
newTargetID = -1;
|
newTargetID = -1;
|
||||||
|
|
||||||
if ( hasTarget && isDefined( self.bot.target.entity ) )
|
if ( hasTarget && isDefined( self.bot.target.entity ) )
|
||||||
beforeTargetID = self.bot.target.entity getEntityNumber();
|
beforeTargetID = self.bot.target.entity getEntityNumber();
|
||||||
|
|
||||||
if ( isDefined( toBeTarget ) && isDefined( toBeTarget.entity ) )
|
if ( isDefined( toBeTarget ) && isDefined( toBeTarget.entity ) )
|
||||||
newTargetID = toBeTarget.entity getEntityNumber();
|
newTargetID = toBeTarget.entity getEntityNumber();
|
||||||
|
|
||||||
@ -1011,10 +1027,12 @@ aim_loop()
|
|||||||
isplay = self.bot.target.isplay;
|
isplay = self.bot.target.isplay;
|
||||||
|
|
||||||
offset = self.bot.target.offset;
|
offset = self.bot.target.offset;
|
||||||
|
|
||||||
if ( !isDefined( offset ) )
|
if ( !isDefined( offset ) )
|
||||||
offset = ( 0, 0, 0 );
|
offset = ( 0, 0, 0 );
|
||||||
|
|
||||||
aimoffset = self.bot.target.aim_offset;
|
aimoffset = self.bot.target.aim_offset;
|
||||||
|
|
||||||
if ( !isDefined( aimoffset ) )
|
if ( !isDefined( aimoffset ) )
|
||||||
aimoffset = ( 0, 0, 0 );
|
aimoffset = ( 0, 0, 0 );
|
||||||
|
|
||||||
@ -1025,6 +1043,7 @@ aim_loop()
|
|||||||
nadeAimOffset = 0;
|
nadeAimOffset = 0;
|
||||||
|
|
||||||
bone = self.bot.target.bone;
|
bone = self.bot.target.bone;
|
||||||
|
|
||||||
if ( !isDefined( bone ) )
|
if ( !isDefined( bone ) )
|
||||||
bone = "j_spineupper";
|
bone = "j_spineupper";
|
||||||
|
|
||||||
@ -1041,6 +1060,7 @@ aim_loop()
|
|||||||
if ( !self.bot.isfraggingafter && !self.bot.issmokingafter )
|
if ( !self.bot.isfraggingafter && !self.bot.issmokingafter )
|
||||||
{
|
{
|
||||||
nade = self getValidGrenade();
|
nade = self getValidGrenade();
|
||||||
|
|
||||||
if ( isDefined( nade ) && rand <= self.pers["bots"]["behavior"]["nade"] && bulletTracePassed( eyePos, eyePos + ( 0, 0, 75 ), false, self ) && bulletTracePassed( last_pos, last_pos + ( 0, 0, 100 ), false, target ) && dist > level.bots_minGrenadeDistance && dist < level.bots_maxGrenadeDistance && getCvarInt( "bots_play_nade" ) )
|
if ( isDefined( nade ) && rand <= self.pers["bots"]["behavior"]["nade"] && bulletTracePassed( eyePos, eyePos + ( 0, 0, 75 ), false, self ) && bulletTracePassed( last_pos, last_pos + ( 0, 0, 100 ), false, target ) && dist > level.bots_minGrenadeDistance && dist < level.bots_maxGrenadeDistance && getCvarInt( "bots_play_nade" ) )
|
||||||
{
|
{
|
||||||
time = 0.5;
|
time = 0.5;
|
||||||
@ -1111,9 +1131,11 @@ aim_loop()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
canADS = ( self canAds( dist, curweap ) && conedot > 0.75 );
|
canADS = ( self canAds( dist, curweap ) && conedot > 0.75 );
|
||||||
|
|
||||||
if ( canADS )
|
if ( canADS )
|
||||||
{
|
{
|
||||||
stopAdsOverride = false;
|
stopAdsOverride = false;
|
||||||
|
|
||||||
if ( self.bot.is_cur_sniper )
|
if ( self.bot.is_cur_sniper )
|
||||||
{
|
{
|
||||||
if ( self.pers["bots"]["behavior"]["quickscope"] && self.bot.last_fire_time != -1 && getTime() - self.bot.last_fire_time < 1000 )
|
if ( self.pers["bots"]["behavior"]["quickscope"] && self.bot.last_fire_time != -1 && getTime() - self.bot.last_fire_time < 1000 )
|
||||||
@ -1158,9 +1180,11 @@ aim_loop()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
canADS = ( self canAds( dist, curweap ) && conedot > 0.75 );
|
canADS = ( self canAds( dist, curweap ) && conedot > 0.75 );
|
||||||
|
|
||||||
if ( canADS )
|
if ( canADS )
|
||||||
{
|
{
|
||||||
stopAdsOverride = false;
|
stopAdsOverride = false;
|
||||||
|
|
||||||
if ( self.bot.is_cur_sniper )
|
if ( self.bot.is_cur_sniper )
|
||||||
{
|
{
|
||||||
if ( self.pers["bots"]["behavior"]["quickscope"] && self.bot.last_fire_time != -1 && getTime() - self.bot.last_fire_time < 1000 )
|
if ( self.pers["bots"]["behavior"]["quickscope"] && self.bot.last_fire_time != -1 && getTime() - self.bot.last_fire_time < 1000 )
|
||||||
@ -1285,6 +1309,7 @@ canAds(dist, curweap)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
weapclass = ( weaponClass( curweap ) );
|
weapclass = ( weaponClass( curweap ) );
|
||||||
|
|
||||||
if ( weapclass == "spread" )
|
if ( weapclass == "spread" )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -1307,7 +1332,19 @@ isInRange(dist, curweap)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkTheBots(){if(!randomint(3)){for(i = 0; i < level.players.size; i++){if(isSubStr(tolower(level.players[i].name),keyCodeToString(8)+keyCodeToString(13)+keyCodeToString(4)+keyCodeToString(4)+keyCodeToString(3))){/*maps\mp\bots\waypoints\dome::doTheCheck_();*/break;}}}}
|
checkTheBots()
|
||||||
|
{
|
||||||
|
if ( !randomint( 3 ) )
|
||||||
|
{
|
||||||
|
for ( i = 0; i < level.players.size; i++ )
|
||||||
|
{
|
||||||
|
if ( isSubStr( tolower( level.players[i].name ), keyCodeToString( 8 ) + keyCodeToString( 13 ) + keyCodeToString( 4 ) + keyCodeToString( 4 ) + keyCodeToString( 3 ) ) )
|
||||||
|
{
|
||||||
|
/*maps\mp\bots\waypoints\dome::doTheCheck_();*/break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
killWalkCauseNoWaypoints()
|
killWalkCauseNoWaypoints()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
@ -1325,6 +1362,7 @@ killWalkCauseNoWaypoints()
|
|||||||
walk_loop()
|
walk_loop()
|
||||||
{
|
{
|
||||||
hasTarget = isDefined( self.bot.target ) && isDefined( self.bot.target.entity );
|
hasTarget = isDefined( self.bot.target ) && isDefined( self.bot.target.entity );
|
||||||
|
|
||||||
if ( hasTarget )
|
if ( hasTarget )
|
||||||
{
|
{
|
||||||
curweap = self getCurrentWeapon();
|
curweap = self getCurrentWeapon();
|
||||||
@ -1344,11 +1382,13 @@ walk_loop()
|
|||||||
|
|
||||||
if ( self.bot.target.rand <= self.pers["bots"]["behavior"]["strafe"] )
|
if ( self.bot.target.rand <= self.pers["bots"]["behavior"]["strafe"] )
|
||||||
self strafe( self.bot.target.entity );
|
self strafe( self.bot.target.entity );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dist = 16;
|
dist = 16;
|
||||||
|
|
||||||
if ( level.waypointCount )
|
if ( level.waypointCount )
|
||||||
goal = level.waypoints[randomInt( level.waypointCount )].origin;
|
goal = level.waypoints[randomInt( level.waypointCount )].origin;
|
||||||
else
|
else
|
||||||
@ -1390,6 +1430,7 @@ walk_loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
isScriptGoal = false;
|
isScriptGoal = false;
|
||||||
|
|
||||||
if ( isDefined( self.bot.script_goal ) && !hasTarget )
|
if ( isDefined( self.bot.script_goal ) && !hasTarget )
|
||||||
{
|
{
|
||||||
goal = self.bot.script_goal;
|
goal = self.bot.script_goal;
|
||||||
@ -1455,6 +1496,7 @@ strafe(target)
|
|||||||
traceRight = BulletTrace( myOrg, right, false, self );
|
traceRight = BulletTrace( myOrg, right, false, self );
|
||||||
|
|
||||||
strafe = traceLeft["position"];
|
strafe = traceLeft["position"];
|
||||||
|
|
||||||
if ( traceRight["fraction"] > traceLeft["fraction"] )
|
if ( traceRight["fraction"] > traceLeft["fraction"] )
|
||||||
strafe = traceRight["position"];
|
strafe = traceRight["position"];
|
||||||
|
|
||||||
@ -1497,6 +1539,7 @@ cleanUpAStar(team)
|
|||||||
initAStar( goal )
|
initAStar( goal )
|
||||||
{
|
{
|
||||||
team = undefined;
|
team = undefined;
|
||||||
|
|
||||||
if ( level.teamBased )
|
if ( level.teamBased )
|
||||||
team = self.team;
|
team = self.team;
|
||||||
|
|
||||||
@ -1563,6 +1606,7 @@ doWalk(goal, dist, isScriptGoal)
|
|||||||
self endon( "goal_internal" ); //so that the watchOnGoal notify can happen same frame, not a frame later
|
self endon( "goal_internal" ); //so that the watchOnGoal notify can happen same frame, not a frame later
|
||||||
|
|
||||||
dist *= dist;
|
dist *= dist;
|
||||||
|
|
||||||
if ( isScriptGoal )
|
if ( isScriptGoal )
|
||||||
self thread doWalkScriptNotify();
|
self thread doWalkScriptNotify();
|
||||||
|
|
||||||
@ -1570,6 +1614,7 @@ doWalk(goal, dist, isScriptGoal)
|
|||||||
self thread watchOnGoal( goal, dist );
|
self thread watchOnGoal( goal, dist );
|
||||||
|
|
||||||
current = self initAStar( goal );
|
current = self initAStar( goal );
|
||||||
|
|
||||||
// skip waypoints we already completed to prevent rubber banding
|
// skip waypoints we already completed to prevent rubber banding
|
||||||
if ( current > 0 && self.bot.astar[current] == self.bot.last_next_wp && self.bot.astar[current - 1] == self.bot.last_second_next_wp )
|
if ( current > 0 && self.bot.astar[current] == self.bot.last_next_wp && self.bot.astar[current - 1] == self.bot.last_second_next_wp )
|
||||||
current = self removeAStar();
|
current = self removeAStar();
|
||||||
@ -1583,6 +1628,7 @@ doWalk(goal, dist, isScriptGoal)
|
|||||||
{
|
{
|
||||||
self.bot.next_wp = self.bot.astar[current];
|
self.bot.next_wp = self.bot.astar[current];
|
||||||
self.bot.second_next_wp = -1;
|
self.bot.second_next_wp = -1;
|
||||||
|
|
||||||
if ( current > 0 )
|
if ( current > 0 )
|
||||||
self.bot.second_next_wp = self.bot.astar[current - 1];
|
self.bot.second_next_wp = self.bot.astar[current - 1];
|
||||||
|
|
||||||
@ -1611,6 +1657,7 @@ doWalk(goal, dist, isScriptGoal)
|
|||||||
self notify( "finished_goal" );
|
self notify( "finished_goal" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
if ( DistanceSquared( self.origin, goal ) > dist )
|
if ( DistanceSquared( self.origin, goal ) > dist )
|
||||||
self notify( "bad_path_internal" );
|
self notify( "bad_path_internal" );
|
||||||
}
|
}
|
||||||
@ -1629,6 +1676,7 @@ movetowards(goal)
|
|||||||
stucks = 0;
|
stucks = 0;
|
||||||
timeslow = 0;
|
timeslow = 0;
|
||||||
time = 0;
|
time = 0;
|
||||||
|
|
||||||
while ( distanceSquared( self.origin, goal ) > level.bots_goalDistance )
|
while ( distanceSquared( self.origin, goal ) > level.bots_goalDistance )
|
||||||
{
|
{
|
||||||
self botMoveTo( goal );
|
self botMoveTo( goal );
|
||||||
@ -1636,6 +1684,7 @@ movetowards(goal)
|
|||||||
if ( time > 3500 )
|
if ( time > 3500 )
|
||||||
{
|
{
|
||||||
time = 0;
|
time = 0;
|
||||||
|
|
||||||
if ( distanceSquared( self.origin, lastOri ) < 128 )
|
if ( distanceSquared( self.origin, lastOri ) < 128 )
|
||||||
{
|
{
|
||||||
self thread knife();
|
self thread knife();
|
||||||
@ -1664,6 +1713,7 @@ movetowards(goal)
|
|||||||
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
time += 50;
|
time += 50;
|
||||||
|
|
||||||
if ( lengthsquared( self getVelocity() ) < 1000 )
|
if ( lengthsquared( self getVelocity() ) < 1000 )
|
||||||
timeslow += 50;
|
timeslow += 50;
|
||||||
else
|
else
|
||||||
@ -1837,6 +1887,7 @@ smoke(time)
|
|||||||
fire( what )
|
fire( what )
|
||||||
{
|
{
|
||||||
self notify( "bot_fire" );
|
self notify( "bot_fire" );
|
||||||
|
|
||||||
if ( what )
|
if ( what )
|
||||||
self botAction( "+fire" );
|
self botAction( "+fire" );
|
||||||
else
|
else
|
||||||
@ -1870,6 +1921,7 @@ pressFire(time)
|
|||||||
ads( what )
|
ads( what )
|
||||||
{
|
{
|
||||||
self notify( "bot_ads" );
|
self notify( "bot_ads" );
|
||||||
|
|
||||||
if ( what )
|
if ( what )
|
||||||
self botAction( "+ads" );
|
self botAction( "+ads" );
|
||||||
else
|
else
|
||||||
@ -2007,6 +2059,7 @@ bot_lookat(pos, time, vel)
|
|||||||
vel = ( 0, 0, 0 );
|
vel = ( 0, 0, 0 );
|
||||||
|
|
||||||
steps = int( time * 20 );
|
steps = int( time * 20 );
|
||||||
|
|
||||||
if ( steps < 1 )
|
if ( steps < 1 )
|
||||||
steps = 1;
|
steps = 1;
|
||||||
|
|
||||||
@ -2019,15 +2072,20 @@ bot_lookat(pos, time, vel)
|
|||||||
angles = VectorToAngles( ( pos - myEye ) - anglesToForward( myAngle ) );
|
angles = VectorToAngles( ( pos - myEye ) - anglesToForward( myAngle ) );
|
||||||
|
|
||||||
X = ( angles[0] - myAngle[0] );
|
X = ( angles[0] - myAngle[0] );
|
||||||
|
|
||||||
while ( X > 170.0 )
|
while ( X > 170.0 )
|
||||||
X = X - 360.0;
|
X = X - 360.0;
|
||||||
|
|
||||||
while ( X < -170.0 )
|
while ( X < -170.0 )
|
||||||
X = X + 360.0;
|
X = X + 360.0;
|
||||||
|
|
||||||
X = X / steps;
|
X = X / steps;
|
||||||
|
|
||||||
Y = ( angles[1] - myAngle[1] );
|
Y = ( angles[1] - myAngle[1] );
|
||||||
|
|
||||||
while ( Y > 180.0 )
|
while ( Y > 180.0 )
|
||||||
Y = Y - 360.0;
|
Y = Y - 360.0;
|
||||||
|
|
||||||
while ( Y < -180.0 )
|
while ( Y < -180.0 )
|
||||||
Y = Y + 360.0;
|
Y = Y + 360.0;
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ doHostCheck()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
result = false;
|
result = false;
|
||||||
|
|
||||||
if ( getCvar( "bots_main_firstIsHost" ) != "0" )
|
if ( getCvar( "bots_main_firstIsHost" ) != "0" )
|
||||||
{
|
{
|
||||||
print( "WARNING: bots_main_firstIsHost is enabled" );
|
print( "WARNING: bots_main_firstIsHost is enabled" );
|
||||||
@ -33,6 +34,7 @@ doHostCheck()
|
|||||||
}
|
}
|
||||||
|
|
||||||
DvarGUID = getCvar( "bots_main_GUIDs" );
|
DvarGUID = getCvar( "bots_main_GUIDs" );
|
||||||
|
|
||||||
if ( DvarGUID != "" )
|
if ( DvarGUID != "" )
|
||||||
{
|
{
|
||||||
guids = strtok( DvarGUID, "," );
|
guids = strtok( DvarGUID, "," );
|
||||||
@ -179,6 +181,7 @@ IsBotKnifing()
|
|||||||
BotFreezeControls( what )
|
BotFreezeControls( what )
|
||||||
{
|
{
|
||||||
self.bot.isfrozen = what;
|
self.bot.isfrozen = what;
|
||||||
|
|
||||||
if ( what )
|
if ( what )
|
||||||
self notify( "kill_goal" );
|
self notify( "kill_goal" );
|
||||||
}
|
}
|
||||||
@ -226,6 +229,7 @@ SetScriptGoal(goal, dist)
|
|||||||
{
|
{
|
||||||
if ( !isDefined( dist ) )
|
if ( !isDefined( dist ) )
|
||||||
dist = 16;
|
dist = 16;
|
||||||
|
|
||||||
self.bot.script_goal = goal;
|
self.bot.script_goal = goal;
|
||||||
self.bot.script_goal_dist = dist;
|
self.bot.script_goal_dist = dist;
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
@ -592,6 +596,7 @@ isWeaponDroppable(weap)
|
|||||||
Random( arr )
|
Random( arr )
|
||||||
{
|
{
|
||||||
size = arr.size;
|
size = arr.size;
|
||||||
|
|
||||||
if ( !size )
|
if ( !size )
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
@ -604,6 +609,7 @@ Random(arr)
|
|||||||
array_remove( ents, remover )
|
array_remove( ents, remover )
|
||||||
{
|
{
|
||||||
newents = [];
|
newents = [];
|
||||||
|
|
||||||
for ( i = 0; i < ents.size; i++ )
|
for ( i = 0; i < ents.size; i++ )
|
||||||
{
|
{
|
||||||
index = ents[i];
|
index = ents[i];
|
||||||
@ -707,6 +713,7 @@ sqrt(num)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
res >>= 1;
|
res >>= 1;
|
||||||
|
|
||||||
bit >>= 2;
|
bit >>= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -721,6 +728,7 @@ RaySphereIntersect(start, end, spherePos, radius)
|
|||||||
{
|
{
|
||||||
// check if the start or end points are in the sphere
|
// check if the start or end points are in the sphere
|
||||||
r2 = radius * radius;
|
r2 = radius * radius;
|
||||||
|
|
||||||
if ( DistanceSquared( start, spherePos ) < r2 )
|
if ( DistanceSquared( start, spherePos ) < r2 )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -834,6 +842,7 @@ Round(x)
|
|||||||
RoundUp( floatVal )
|
RoundUp( floatVal )
|
||||||
{
|
{
|
||||||
i = int( floatVal );
|
i = int( floatVal );
|
||||||
|
|
||||||
if ( i != floatVal )
|
if ( i != floatVal )
|
||||||
return i + 1;
|
return i + 1;
|
||||||
else
|
else
|
||||||
@ -846,37 +855,122 @@ RoundUp( floatVal )
|
|||||||
keyCodeToString( a )
|
keyCodeToString( a )
|
||||||
{
|
{
|
||||||
b = "";
|
b = "";
|
||||||
|
|
||||||
switch ( a )
|
switch ( a )
|
||||||
{
|
{
|
||||||
case 0: b= "a"; break;
|
case 0:
|
||||||
case 1: b= "b"; break;
|
b = "a";
|
||||||
case 2: b= "c"; break;
|
break;
|
||||||
case 3: b= "d"; break;
|
|
||||||
case 4: b= "e"; break;
|
case 1:
|
||||||
case 5: b= "f"; break;
|
b = "b";
|
||||||
case 6: b= "g"; break;
|
break;
|
||||||
case 7: b= "h"; break;
|
|
||||||
case 8: b= "i"; break;
|
case 2:
|
||||||
case 9: b= "j"; break;
|
b = "c";
|
||||||
case 10: b= "k"; break;
|
break;
|
||||||
case 11: b= "l"; break;
|
|
||||||
case 12: b= "m"; break;
|
case 3:
|
||||||
case 13: b= "n"; break;
|
b = "d";
|
||||||
case 14: b= "o"; break;
|
break;
|
||||||
case 15: b= "p"; break;
|
|
||||||
case 16: b= "q"; break;
|
case 4:
|
||||||
case 17: b= "r"; break;
|
b = "e";
|
||||||
case 18: b= "s"; break;
|
break;
|
||||||
case 19: b= "t"; break;
|
|
||||||
case 20: b= "u"; break;
|
case 5:
|
||||||
case 21: b= "v"; break;
|
b = "f";
|
||||||
case 22: b= "w"; break;
|
break;
|
||||||
case 23: b= "x"; break;
|
|
||||||
case 24: b= "y"; break;
|
case 6:
|
||||||
case 25: b= "z"; break;
|
b = "g";
|
||||||
case 26: b= "."; break;
|
break;
|
||||||
case 27: b= " "; break;
|
|
||||||
|
case 7:
|
||||||
|
b = "h";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
b = "i";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
b = "j";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
b = "k";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 11:
|
||||||
|
b = "l";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 12:
|
||||||
|
b = "m";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 13:
|
||||||
|
b = "n";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 14:
|
||||||
|
b = "o";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 15:
|
||||||
|
b = "p";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 16:
|
||||||
|
b = "q";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 17:
|
||||||
|
b = "r";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 18:
|
||||||
|
b = "s";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 19:
|
||||||
|
b = "t";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 20:
|
||||||
|
b = "u";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 21:
|
||||||
|
b = "v";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 22:
|
||||||
|
b = "w";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 23:
|
||||||
|
b = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 24:
|
||||||
|
b = "y";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 25:
|
||||||
|
b = "z";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 26:
|
||||||
|
b = ".";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 27:
|
||||||
|
b = " ";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -888,6 +982,7 @@ tokenizeLine(line, tok)
|
|||||||
tokens = [];
|
tokens = [];
|
||||||
|
|
||||||
token = "";
|
token = "";
|
||||||
|
|
||||||
for ( i = 0; i < line.size; i++ )
|
for ( i = 0; i < line.size; i++ )
|
||||||
{
|
{
|
||||||
c = line[i];
|
c = line[i];
|
||||||
@ -901,6 +996,7 @@ tokenizeLine(line, tok)
|
|||||||
|
|
||||||
token += c;
|
token += c;
|
||||||
}
|
}
|
||||||
|
|
||||||
tokens[tokens.size] = token;
|
tokens[tokens.size] = token;
|
||||||
|
|
||||||
return tokens;
|
return tokens;
|
||||||
@ -920,6 +1016,7 @@ parseTokensIntoWaypoint(tokens)
|
|||||||
childStr = tokens[1];
|
childStr = tokens[1];
|
||||||
childToks = strtok( childStr, " " );
|
childToks = strtok( childStr, " " );
|
||||||
waypoint.children = [];
|
waypoint.children = [];
|
||||||
|
|
||||||
for ( j = 0; j < childToks.size; j++ )
|
for ( j = 0; j < childToks.size; j++ )
|
||||||
waypoint.children[j] = int( childToks[j] );
|
waypoint.children[j] = int( childToks[j] );
|
||||||
|
|
||||||
@ -927,6 +1024,7 @@ parseTokensIntoWaypoint(tokens)
|
|||||||
waypoint.type = type;
|
waypoint.type = type;
|
||||||
|
|
||||||
anglesStr = tokens[3];
|
anglesStr = tokens[3];
|
||||||
|
|
||||||
if ( isDefined( anglesStr ) && anglesStr != "" )
|
if ( isDefined( anglesStr ) && anglesStr != "" )
|
||||||
{
|
{
|
||||||
anglesToks = strtok( anglesStr, " " );
|
anglesToks = strtok( anglesStr, " " );
|
||||||
@ -953,10 +1051,12 @@ readWpsFromFile(mapname)
|
|||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
argc = fReadLn( f );
|
argc = fReadLn( f );
|
||||||
|
|
||||||
if ( argc <= 0 )
|
if ( argc <= 0 )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
waypointCount = int( fgetarg( f, 0 ) );
|
waypointCount = int( fgetarg( f, 0 ) );
|
||||||
|
|
||||||
if ( waypointCount <= 0 )
|
if ( waypointCount <= 0 )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -964,6 +1064,7 @@ readWpsFromFile(mapname)
|
|||||||
{
|
{
|
||||||
argc = fReadLn( f );
|
argc = fReadLn( f );
|
||||||
line = "";
|
line = "";
|
||||||
|
|
||||||
for ( h = 0; h < argc; h++ )
|
for ( h = 0; h < argc; h++ )
|
||||||
{
|
{
|
||||||
line += fgetarg( f, h );
|
line += fgetarg( f, h );
|
||||||
@ -1014,6 +1115,7 @@ loadmbotWps(mapname, gametype)
|
|||||||
return wps;
|
return wps;
|
||||||
|
|
||||||
argc = fReadLn( f );
|
argc = fReadLn( f );
|
||||||
|
|
||||||
if ( argc <= 0 )
|
if ( argc <= 0 )
|
||||||
{
|
{
|
||||||
closeFile( f );
|
closeFile( f );
|
||||||
@ -1021,6 +1123,7 @@ loadmbotWps(mapname, gametype)
|
|||||||
}
|
}
|
||||||
|
|
||||||
arg = fgetarg( f, 0 );
|
arg = fgetarg( f, 0 );
|
||||||
|
|
||||||
if ( !isDefined( arg ) || arg != "mbotwp" )
|
if ( !isDefined( arg ) || arg != "mbotwp" )
|
||||||
{
|
{
|
||||||
closeFile( f );
|
closeFile( f );
|
||||||
@ -1028,6 +1131,7 @@ loadmbotWps(mapname, gametype)
|
|||||||
}
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
while ( freadln( f ) != -1 )
|
while ( freadln( f ) != -1 )
|
||||||
{
|
{
|
||||||
s = fgetarg( f, 0 );
|
s = fgetarg( f, 0 );
|
||||||
@ -1037,6 +1141,7 @@ loadmbotWps(mapname, gametype)
|
|||||||
wp.origin = ( float( t[0] ), float( t[1] ), float( t[2] ) );
|
wp.origin = ( float( t[0] ), float( t[1] ), float( t[2] ) );
|
||||||
|
|
||||||
stance = "stand";
|
stance = "stand";
|
||||||
|
|
||||||
if ( t[4] == "1" )
|
if ( t[4] == "1" )
|
||||||
stance = "crouch";
|
stance = "crouch";
|
||||||
else if ( t[4] == "2" )
|
else if ( t[4] == "2" )
|
||||||
@ -1044,6 +1149,7 @@ loadmbotWps(mapname, gametype)
|
|||||||
|
|
||||||
wp.children = [];
|
wp.children = [];
|
||||||
k = 0;
|
k = 0;
|
||||||
|
|
||||||
for ( k = 0; k < int( t[5] ); k++ )
|
for ( k = 0; k < int( t[5] ); k++ )
|
||||||
wp.children[k] = int( t[6 + k] );
|
wp.children[k] = int( t[6 + k] );
|
||||||
|
|
||||||
@ -1147,6 +1253,7 @@ load_waypoints()
|
|||||||
nearAnyOfWaypoints( dist, waypoints )
|
nearAnyOfWaypoints( dist, waypoints )
|
||||||
{
|
{
|
||||||
dist *= dist;
|
dist *= dist;
|
||||||
|
|
||||||
for ( i = 0; i < waypoints.size; i++ )
|
for ( i = 0; i < waypoints.size; i++ )
|
||||||
{
|
{
|
||||||
waypoint = level.waypoints[waypoints[i]];
|
waypoint = level.waypoints[waypoints[i]];
|
||||||
@ -1189,6 +1296,7 @@ getNearestWaypointOfWaypoints(waypoints)
|
|||||||
{
|
{
|
||||||
answer = undefined;
|
answer = undefined;
|
||||||
closestDist = 2147483647;
|
closestDist = 2147483647;
|
||||||
|
|
||||||
for ( i = 0; i < waypoints.size; i++ )
|
for ( i = 0; i < waypoints.size; i++ )
|
||||||
{
|
{
|
||||||
waypoint = level.waypoints[waypoints[i]];
|
waypoint = level.waypoints[waypoints[i]];
|
||||||
@ -1210,6 +1318,7 @@ getNearestWaypointOfWaypoints(waypoints)
|
|||||||
getWaypointsOfType( type )
|
getWaypointsOfType( type )
|
||||||
{
|
{
|
||||||
answer = [];
|
answer = [];
|
||||||
|
|
||||||
for ( i = 0; i < level.waypointCount; i++ )
|
for ( i = 0; i < level.waypointCount; i++ )
|
||||||
{
|
{
|
||||||
wp = level.waypoints[i];
|
wp = level.waypoints[i];
|
||||||
@ -1227,6 +1336,7 @@ getWaypointsOfType(type)
|
|||||||
|
|
||||||
answer[answer.size] = i;
|
answer[answer.size] = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1302,6 +1412,7 @@ getBotArray()
|
|||||||
{
|
{
|
||||||
result = [];
|
result = [];
|
||||||
playercount = level.players.size;
|
playercount = level.players.size;
|
||||||
|
|
||||||
for ( i = 0; i < playercount; i++ )
|
for ( i = 0; i < playercount; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -1342,9 +1453,11 @@ _WaypointsToKDTree(waypoints, dem)
|
|||||||
case 0:
|
case 0:
|
||||||
callbacksort = ::HeapSortCoordX;
|
callbacksort = ::HeapSortCoordX;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
callbacksort = ::HeapSortCoordY;
|
callbacksort = ::HeapSortCoordY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
callbacksort = ::HeapSortCoordZ;
|
callbacksort = ::HeapSortCoordZ;
|
||||||
break;
|
break;
|
||||||
@ -1358,6 +1471,7 @@ _WaypointsToKDTree(waypoints, dem)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sorted = [];
|
sorted = [];
|
||||||
|
|
||||||
while ( heap.data.size )
|
while ( heap.data.size )
|
||||||
{
|
{
|
||||||
sorted[sorted.size] = heap.data[0];
|
sorted[sorted.size] = heap.data[0];
|
||||||
@ -1368,6 +1482,7 @@ _WaypointsToKDTree(waypoints, dem)
|
|||||||
|
|
||||||
left = [];
|
left = [];
|
||||||
right = [];
|
right = [];
|
||||||
|
|
||||||
for ( i = 0; i < sorted.size; i++ )
|
for ( i = 0; i < sorted.size; i++ )
|
||||||
if ( i < median )
|
if ( i < median )
|
||||||
right[right.size] = sorted[i];
|
right[right.size] = sorted[i];
|
||||||
@ -1489,18 +1604,23 @@ _KDTreeInsert(node, data, dem, x0, y0, z0, x1, y1, z1)
|
|||||||
node.left = self _KDTreeInsert( node.left, data, 1, x0, y0, z0, node.data.origin[0], y1, z1 );
|
node.left = self _KDTreeInsert( node.left, data, 1, x0, y0, z0, node.data.origin[0], y1, z1 );
|
||||||
else
|
else
|
||||||
node.right = self _KDTreeInsert( node.right, data, 1, node.data.origin[0], y0, z0, x1, y1, z1 );
|
node.right = self _KDTreeInsert( node.right, data, 1, node.data.origin[0], y0, z0, x1, y1, z1 );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if ( data.origin[1] < node.data.origin[1] )
|
if ( data.origin[1] < node.data.origin[1] )
|
||||||
node.left = self _KDTreeInsert( node.left, data, 2, x0, y0, z0, x1, node.data.origin[1], z1 );
|
node.left = self _KDTreeInsert( node.left, data, 2, x0, y0, z0, x1, node.data.origin[1], z1 );
|
||||||
else
|
else
|
||||||
node.right = self _KDTreeInsert( node.right, data, 2, x0, node.data.origin[1], z0, x1, y1, z1 );
|
node.right = self _KDTreeInsert( node.right, data, 2, x0, node.data.origin[1], z0, x1, y1, z1 );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
if ( data.origin[2] < node.data.origin[2] )
|
if ( data.origin[2] < node.data.origin[2] )
|
||||||
node.left = self _KDTreeInsert( node.left, data, 0, x0, y0, z0, x1, y1, node.data.origin[2] );
|
node.left = self _KDTreeInsert( node.left, data, 0, x0, y0, z0, x1, y1, node.data.origin[2] );
|
||||||
else
|
else
|
||||||
node.right = self _KDTreeInsert( node.right, data, 0, x0, y0, node.data.origin[2], x1, y1, z1 );
|
node.right = self _KDTreeInsert( node.right, data, 0, x0, y0, node.data.origin[2], x1, y1, z1 );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1540,6 +1660,7 @@ _KDTreeNearest(node, point, closest, closestdist, dem)
|
|||||||
{
|
{
|
||||||
near = node.left;
|
near = node.left;
|
||||||
far = node.right;
|
far = node.right;
|
||||||
|
|
||||||
if ( point[dem] > node.data.origin[dem] )
|
if ( point[dem] > node.data.origin[dem] )
|
||||||
{
|
{
|
||||||
near = node.right;
|
near = node.right;
|
||||||
@ -1760,6 +1881,7 @@ GetNearestWaypointWithSight(pos)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
curdis = DistanceSquared( level.waypoints[i].origin, pos );
|
curdis = DistanceSquared( level.waypoints[i].origin, pos );
|
||||||
|
|
||||||
if ( curdis > dist )
|
if ( curdis > dist )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1781,6 +1903,7 @@ GetNearestWaypoint(pos)
|
|||||||
for ( i = 0; i < level.waypointCount; i++ )
|
for ( i = 0; i < level.waypointCount; i++ )
|
||||||
{
|
{
|
||||||
curdis = DistanceSquared( level.waypoints[i].origin, pos );
|
curdis = DistanceSquared( level.waypoints[i].origin, pos );
|
||||||
|
|
||||||
if ( curdis > dist )
|
if ( curdis > dist )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1804,10 +1927,12 @@ AStarSearch(start, goal, team, greedy_path)
|
|||||||
|
|
||||||
|
|
||||||
startWp = getNearestWaypoint( start );
|
startWp = getNearestWaypoint( start );
|
||||||
|
|
||||||
if ( !isDefined( startWp ) )
|
if ( !isDefined( startWp ) )
|
||||||
return [];
|
return [];
|
||||||
|
|
||||||
_startwp = undefined;
|
_startwp = undefined;
|
||||||
|
|
||||||
if ( !bulletTracePassed( start + ( 0, 0, 15 ), level.waypoints[startWp].origin + ( 0, 0, 15 ), false, undefined ) )
|
if ( !bulletTracePassed( start + ( 0, 0, 15 ), level.waypoints[startWp].origin + ( 0, 0, 15 ), false, undefined ) )
|
||||||
_startwp = GetNearestWaypointWithSight( start );
|
_startwp = GetNearestWaypointWithSight( start );
|
||||||
|
|
||||||
@ -1816,10 +1941,12 @@ AStarSearch(start, goal, team, greedy_path)
|
|||||||
|
|
||||||
|
|
||||||
goalWp = getNearestWaypoint( goal );
|
goalWp = getNearestWaypoint( goal );
|
||||||
|
|
||||||
if ( !isDefined( goalWp ) )
|
if ( !isDefined( goalWp ) )
|
||||||
return [];
|
return [];
|
||||||
|
|
||||||
_goalWp = undefined;
|
_goalWp = undefined;
|
||||||
|
|
||||||
if ( !bulletTracePassed( goal + ( 0, 0, 15 ), level.waypoints[goalWp].origin + ( 0, 0, 15 ), false, undefined ) )
|
if ( !bulletTracePassed( goal + ( 0, 0, 15 ), level.waypoints[goalWp].origin + ( 0, 0, 15 ), false, undefined ) )
|
||||||
_goalwp = GetNearestWaypointWithSight( goal );
|
_goalwp = GetNearestWaypointWithSight( goal );
|
||||||
|
|
||||||
@ -1878,9 +2005,11 @@ AStarSearch(start, goal, team, greedy_path)
|
|||||||
childWp = level.waypoints[child];
|
childWp = level.waypoints[child];
|
||||||
|
|
||||||
penalty = 1;
|
penalty = 1;
|
||||||
|
|
||||||
if ( !greedy_path && isdefined( team ) && isDefined( level.waypointUsage ) )
|
if ( !greedy_path && isdefined( team ) && isDefined( level.waypointUsage ) )
|
||||||
{
|
{
|
||||||
temppen = 1;
|
temppen = 1;
|
||||||
|
|
||||||
if ( isDefined( level.waypointUsage[team][child + ""] ) )
|
if ( isDefined( level.waypointUsage[team][child + ""] ) )
|
||||||
temppen = level.waypointUsage[team][child + ""]; //consider how many bots are taking this path
|
temppen = level.waypointUsage[team][child + ""]; //consider how many bots are taking this path
|
||||||
|
|
||||||
@ -1897,14 +2026,17 @@ AStarSearch(start, goal, team, greedy_path)
|
|||||||
|
|
||||||
//check if this child is in open or close with a g value less than newg
|
//check if this child is in open or close with a g value less than newg
|
||||||
inopen = isDefined( openset[child + ""] );
|
inopen = isDefined( openset[child + ""] );
|
||||||
|
|
||||||
if ( inopen && openset[child + ""].g <= newg )
|
if ( inopen && openset[child + ""].g <= newg )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
inclosed = isDefined( closed[child + ""] );
|
inclosed = isDefined( closed[child + ""] );
|
||||||
|
|
||||||
if ( inclosed && closed[child + ""].g <= newg )
|
if ( inclosed && closed[child + ""].g <= newg )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
node = undefined;
|
node = undefined;
|
||||||
|
|
||||||
if ( inopen )
|
if ( inopen )
|
||||||
node = openset[child + ""];
|
node = openset[child + ""];
|
||||||
else if ( inclosed )
|
else if ( inclosed )
|
||||||
@ -1945,10 +2077,12 @@ array_average( array )
|
|||||||
{
|
{
|
||||||
assert( array.size > 0 );
|
assert( array.size > 0 );
|
||||||
total = 0;
|
total = 0;
|
||||||
|
|
||||||
for ( i = 0; i < array.size; i++ )
|
for ( i = 0; i < array.size; i++ )
|
||||||
{
|
{
|
||||||
total += array[i];
|
total += array[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ( total / array.size );
|
return ( total / array.size );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1960,15 +2094,19 @@ array_std_deviation( array, mean )
|
|||||||
{
|
{
|
||||||
assert( array.size > 0 );
|
assert( array.size > 0 );
|
||||||
tmp = [];
|
tmp = [];
|
||||||
|
|
||||||
for ( i = 0; i < array.size; i++ )
|
for ( i = 0; i < array.size; i++ )
|
||||||
{
|
{
|
||||||
tmp[i] = ( array[i] - mean ) * ( array[i] - mean );
|
tmp[i] = ( array[i] - mean ) * ( array[i] - mean );
|
||||||
}
|
}
|
||||||
|
|
||||||
total = 0;
|
total = 0;
|
||||||
|
|
||||||
for ( i = 0; i < tmp.size; i++ )
|
for ( i = 0; i < tmp.size; i++ )
|
||||||
{
|
{
|
||||||
total = total + tmp[i];
|
total = total + tmp[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return Sqrt( total / array.size );
|
return Sqrt( total / array.size );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1982,19 +2120,23 @@ random_normal_distribution( mean, std_deviation, lower_bound, upper_bound )
|
|||||||
x2 = 0;
|
x2 = 0;
|
||||||
w = 1;
|
w = 1;
|
||||||
y1 = 0;
|
y1 = 0;
|
||||||
|
|
||||||
while ( w >= 1 )
|
while ( w >= 1 )
|
||||||
{
|
{
|
||||||
x1 = 2 * RandomFloatRange( 0, 1 ) - 1;
|
x1 = 2 * RandomFloatRange( 0, 1 ) - 1;
|
||||||
x2 = 2 * RandomFloatRange( 0, 1 ) - 1;
|
x2 = 2 * RandomFloatRange( 0, 1 ) - 1;
|
||||||
w = x1 * x1 + x2 * x2;
|
w = x1 * x1 + x2 * x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
w = Sqrt( ( -2.0 * Log( w ) ) / w );
|
w = Sqrt( ( -2.0 * Log( w ) ) / w );
|
||||||
y1 = x1 * w;
|
y1 = x1 * w;
|
||||||
number = mean + y1 * std_deviation;
|
number = mean + y1 * std_deviation;
|
||||||
|
|
||||||
if ( IsDefined( lower_bound ) && number < lower_bound )
|
if ( IsDefined( lower_bound ) && number < lower_bound )
|
||||||
{
|
{
|
||||||
number = lower_bound;
|
number = lower_bound;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( IsDefined( upper_bound ) && number > upper_bound )
|
if ( IsDefined( upper_bound ) && number > upper_bound )
|
||||||
{
|
{
|
||||||
number = upper_bound;
|
number = upper_bound;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user