mirror of
https://github.com/ineedbots/iw5_bot_warfare.git
synced 2025-06-08 21:45:34 +00:00
Format scripts
This commit is contained in:
parent
95d1164b48
commit
4b5e520951
@ -28,71 +28,97 @@ init()
|
|||||||
|
|
||||||
if ( getDvar( "bots_main_GUIDs" ) == "" )
|
if ( getDvar( "bots_main_GUIDs" ) == "" )
|
||||||
setDvar( "bots_main_GUIDs", "" ); //guids of players who will be given host powers, comma seperated
|
setDvar( "bots_main_GUIDs", "" ); //guids of players who will be given host powers, comma seperated
|
||||||
|
|
||||||
if ( getDvar( "bots_main_firstIsHost" ) == "" )
|
if ( getDvar( "bots_main_firstIsHost" ) == "" )
|
||||||
setDvar( "bots_main_firstIsHost", false ); //first play to connect is a host
|
setDvar( "bots_main_firstIsHost", false ); //first play to connect is a host
|
||||||
|
|
||||||
if ( getDvar( "bots_main_waitForHostTime" ) == "" )
|
if ( getDvar( "bots_main_waitForHostTime" ) == "" )
|
||||||
setDvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player
|
setDvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player
|
||||||
|
|
||||||
if ( getDvar( "bots_manage_add" ) == "" )
|
if ( getDvar( "bots_manage_add" ) == "" )
|
||||||
setDvar( "bots_manage_add", 0 ); //amount of bots to add to the game
|
setDvar( "bots_manage_add", 0 ); //amount of bots to add to the game
|
||||||
|
|
||||||
if ( getDvar( "bots_manage_fill" ) == "" )
|
if ( getDvar( "bots_manage_fill" ) == "" )
|
||||||
setDvar( "bots_manage_fill", 0 ); //amount of bots to maintain
|
setDvar( "bots_manage_fill", 0 ); //amount of bots to maintain
|
||||||
|
|
||||||
if ( getDvar( "bots_manage_fill_spec" ) == "" )
|
if ( getDvar( "bots_manage_fill_spec" ) == "" )
|
||||||
setDvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
|
setDvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
|
||||||
|
|
||||||
if ( getDvar( "bots_manage_fill_mode" ) == "" )
|
if ( getDvar( "bots_manage_fill_mode" ) == "" )
|
||||||
setDvar( "bots_manage_fill_mode", 0 ); //fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
|
setDvar( "bots_manage_fill_mode", 0 ); //fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
|
||||||
|
|
||||||
if ( getDvar( "bots_manage_fill_kick" ) == "" )
|
if ( getDvar( "bots_manage_fill_kick" ) == "" )
|
||||||
setDvar( "bots_manage_fill_kick", false ); //kick bots if too many
|
setDvar( "bots_manage_fill_kick", false ); //kick bots if too many
|
||||||
|
|
||||||
if ( getDvar( "bots_team" ) == "" )
|
if ( getDvar( "bots_team" ) == "" )
|
||||||
setDvar( "bots_team", "autoassign" ); //which team for bots to join
|
setDvar( "bots_team", "autoassign" ); //which team for bots to join
|
||||||
|
|
||||||
if ( getDvar( "bots_team_amount" ) == "" )
|
if ( getDvar( "bots_team_amount" ) == "" )
|
||||||
setDvar( "bots_team_amount", 0 ); //amount of bots on axis team
|
setDvar( "bots_team_amount", 0 ); //amount of bots on axis team
|
||||||
|
|
||||||
if ( getDvar( "bots_team_force" ) == "" )
|
if ( getDvar( "bots_team_force" ) == "" )
|
||||||
setDvar( "bots_team_force", false ); //force bots on team
|
setDvar( "bots_team_force", false ); //force bots on team
|
||||||
|
|
||||||
if ( getDvar( "bots_team_mode" ) == "" )
|
if ( getDvar( "bots_team_mode" ) == "" )
|
||||||
setDvar( "bots_team_mode", 0 ); //counts just bots when 1
|
setDvar( "bots_team_mode", 0 ); //counts just bots when 1
|
||||||
|
|
||||||
if ( getDvar( "bots_skill" ) == "" )
|
if ( getDvar( "bots_skill" ) == "" )
|
||||||
setDvar( "bots_skill", 0 ); //0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
|
setDvar( "bots_skill", 0 ); //0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
|
||||||
|
|
||||||
if ( getDvar( "bots_skill_axis_hard" ) == "" )
|
if ( getDvar( "bots_skill_axis_hard" ) == "" )
|
||||||
setDvar( "bots_skill_axis_hard", 0 ); //amount of hard bots on axis team
|
setDvar( "bots_skill_axis_hard", 0 ); //amount of hard bots on axis team
|
||||||
|
|
||||||
if ( getDvar( "bots_skill_axis_med" ) == "" )
|
if ( getDvar( "bots_skill_axis_med" ) == "" )
|
||||||
setDvar( "bots_skill_axis_med", 0 );
|
setDvar( "bots_skill_axis_med", 0 );
|
||||||
|
|
||||||
if ( getDvar( "bots_skill_allies_hard" ) == "" )
|
if ( getDvar( "bots_skill_allies_hard" ) == "" )
|
||||||
setDvar( "bots_skill_allies_hard", 0 );
|
setDvar( "bots_skill_allies_hard", 0 );
|
||||||
|
|
||||||
if ( getDvar( "bots_skill_allies_med" ) == "" )
|
if ( getDvar( "bots_skill_allies_med" ) == "" )
|
||||||
setDvar( "bots_skill_allies_med", 0 );
|
setDvar( "bots_skill_allies_med", 0 );
|
||||||
|
|
||||||
if ( getDvar( "bots_loadout_reasonable" ) == "" ) //filter out the bad 'guns' and perks
|
if ( getDvar( "bots_loadout_reasonable" ) == "" ) //filter out the bad 'guns' and perks
|
||||||
setDvar( "bots_loadout_reasonable", false );
|
setDvar( "bots_loadout_reasonable", false );
|
||||||
|
|
||||||
if ( getDvar( "bots_loadout_allow_op" ) == "" ) //allows jug, marty and laststand
|
if ( getDvar( "bots_loadout_allow_op" ) == "" ) //allows jug, marty and laststand
|
||||||
setDvar( "bots_loadout_allow_op", true );
|
setDvar( "bots_loadout_allow_op", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_loadout_rank" ) == "" ) // what rank the bots should be around, -1 is around the players, 0 is all random
|
if ( getDvar( "bots_loadout_rank" ) == "" ) // what rank the bots should be around, -1 is around the players, 0 is all random
|
||||||
setDvar( "bots_loadout_rank", -1 );
|
setDvar( "bots_loadout_rank", -1 );
|
||||||
|
|
||||||
if ( getDvar( "bots_loadout_prestige" ) == "" ) // what pretige the bots will be, -1 is the players, -2 is random
|
if ( getDvar( "bots_loadout_prestige" ) == "" ) // what pretige the bots will be, -1 is the players, -2 is random
|
||||||
setDvar( "bots_loadout_prestige", -1 );
|
setDvar( "bots_loadout_prestige", -1 );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_move" ) == "" ) //bots move
|
if ( getDvar( "bots_play_move" ) == "" ) //bots move
|
||||||
setDvar( "bots_play_move", true );
|
setDvar( "bots_play_move", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_knife" ) == "" ) //bots knife
|
if ( getDvar( "bots_play_knife" ) == "" ) //bots knife
|
||||||
setDvar( "bots_play_knife", true );
|
setDvar( "bots_play_knife", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_fire" ) == "" ) //bots fire
|
if ( getDvar( "bots_play_fire" ) == "" ) //bots fire
|
||||||
setDvar( "bots_play_fire", true );
|
setDvar( "bots_play_fire", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_nade" ) == "" ) //bots grenade
|
if ( getDvar( "bots_play_nade" ) == "" ) //bots grenade
|
||||||
setDvar( "bots_play_nade", true );
|
setDvar( "bots_play_nade", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_take_carepackages" ) == "" ) //bots take carepackages
|
if ( getDvar( "bots_play_take_carepackages" ) == "" ) //bots take carepackages
|
||||||
setDvar( "bots_play_take_carepackages", true );
|
setDvar( "bots_play_take_carepackages", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_obj" ) == "" ) //bots play the obj
|
if ( getDvar( "bots_play_obj" ) == "" ) //bots play the obj
|
||||||
setDvar( "bots_play_obj", true );
|
setDvar( "bots_play_obj", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_camp" ) == "" ) //bots camp and follow
|
if ( getDvar( "bots_play_camp" ) == "" ) //bots camp and follow
|
||||||
setDvar( "bots_play_camp", true );
|
setDvar( "bots_play_camp", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_jumpdrop" ) == "" ) //bots jump and dropshot
|
if ( getDvar( "bots_play_jumpdrop" ) == "" ) //bots jump and dropshot
|
||||||
setDvar( "bots_play_jumpdrop", true );
|
setDvar( "bots_play_jumpdrop", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_target_other" ) == "" ) //bot target non play ents (vehicles)
|
if ( getDvar( "bots_play_target_other" ) == "" ) //bot target non play ents (vehicles)
|
||||||
setDvar( "bots_play_target_other", true );
|
setDvar( "bots_play_target_other", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_killstreak" ) == "" ) //bot use killstreaks
|
if ( getDvar( "bots_play_killstreak" ) == "" ) //bot use killstreaks
|
||||||
setDvar( "bots_play_killstreak", true );
|
setDvar( "bots_play_killstreak", true );
|
||||||
|
|
||||||
if ( getDvar( "bots_play_ads" ) == "" ) //bot ads
|
if ( getDvar( "bots_play_ads" ) == "" ) //bot ads
|
||||||
setDvar( "bots_play_ads", true );
|
setDvar( "bots_play_ads", true );
|
||||||
|
|
||||||
@ -236,6 +262,7 @@ fixGamemodes()
|
|||||||
{
|
{
|
||||||
for ( i = 0; i < level.bombZones.size; i++ )
|
for ( i = 0; i < level.bombZones.size; i++ )
|
||||||
level.bombZones[i].onUse = ::onUsePlantObjectFix;
|
level.bombZones[i].onUse = ::onUsePlantObjectFix;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,8 +509,10 @@ watchScrabler_loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
drones = [];
|
drones = [];
|
||||||
|
|
||||||
if ( isDefined( level.remote_uav["axis"] ) )
|
if ( isDefined( level.remote_uav["axis"] ) )
|
||||||
drones[drones.size] = level.remote_uav["axis"];
|
drones[drones.size] = level.remote_uav["axis"];
|
||||||
|
|
||||||
if ( isDefined( level.remote_uav["allies"] ) )
|
if ( isDefined( level.remote_uav["allies"] ) )
|
||||||
drones[drones.size] = level.remote_uav["allies"];
|
drones[drones.size] = level.remote_uav["allies"];
|
||||||
|
|
||||||
@ -682,6 +711,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];
|
||||||
@ -727,6 +757,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];
|
||||||
@ -766,6 +797,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];
|
||||||
@ -807,6 +839,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";
|
||||||
}
|
}
|
||||||
@ -815,6 +848,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];
|
||||||
@ -834,6 +868,7 @@ teamBots_loop()
|
|||||||
player thread [[level.axis]]();
|
player thread [[level.axis]]();
|
||||||
else
|
else
|
||||||
player thread [[level.spectator]]();
|
player thread [[level.spectator]]();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -842,6 +877,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];
|
||||||
@ -922,6 +958,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];
|
||||||
@ -948,6 +985,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];
|
||||||
@ -980,8 +1018,10 @@ addBots_loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
amount = bots;
|
amount = bots;
|
||||||
|
|
||||||
if ( fillMode == 0 || fillMode == 2 )
|
if ( fillMode == 0 || fillMode == 2 )
|
||||||
amount += players;
|
amount += players;
|
||||||
|
|
||||||
if ( getDVarInt( "bots_manage_fill_spec" ) )
|
if ( getDVarInt( "bots_manage_fill_spec" ) )
|
||||||
amount += spec;
|
amount += spec;
|
||||||
|
|
||||||
@ -990,6 +1030,7 @@ addBots_loop()
|
|||||||
else if ( amount > fillAmount && getDvarInt( "bots_manage_fill_kick" ) )
|
else if ( amount > fillAmount && getDvarInt( "bots_manage_fill_kick" ) )
|
||||||
{
|
{
|
||||||
tempBot = random( getBotArray() );
|
tempBot = random( getBotArray() );
|
||||||
|
|
||||||
if ( isDefined( tempBot ) )
|
if ( isDefined( tempBot ) )
|
||||||
kick( tempBot getEntityNumber() );
|
kick( tempBot getEntityNumber() );
|
||||||
}
|
}
|
||||||
@ -1018,6 +1059,7 @@ addBots()
|
|||||||
onGrenadeFire()
|
onGrenadeFire()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill ( "grenade_fire", grenade, weaponName );
|
self waittill ( "grenade_fire", grenade, weaponName );
|
||||||
@ -1095,6 +1137,7 @@ thinkSmoke()
|
|||||||
self.state = "moving";
|
self.state = "moving";
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.state = "smoking";
|
self.state = "smoking";
|
||||||
wait 11.5;
|
wait 11.5;
|
||||||
|
|
||||||
@ -1108,6 +1151,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" );
|
||||||
|
@ -181,10 +181,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;
|
||||||
}
|
}
|
||||||
@ -213,9 +216,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;
|
||||||
@ -252,6 +257,7 @@ reload_watch()
|
|||||||
if ( self GetWeaponAmmoClip( self GetCurrentWeapon() ) >= WeaponClipSize( self GetCurrentWeapon() ) )
|
if ( self GetWeaponAmmoClip( self GetCurrentWeapon() ) >= WeaponClipSize( self GetCurrentWeapon() ) )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.bot.isreloading = false;
|
self.bot.isreloading = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -609,6 +615,7 @@ watchC4Thrown(c4)
|
|||||||
wait 1 + randomInt( 50 ) * 0.05;
|
wait 1 + randomInt( 50 ) * 0.05;
|
||||||
|
|
||||||
shouldBreak = false;
|
shouldBreak = false;
|
||||||
|
|
||||||
for ( i = 0; i < level.players.size; i++ )
|
for ( i = 0; i < level.players.size; i++ )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -633,6 +640,7 @@ watchC4Thrown(c4)
|
|||||||
}
|
}
|
||||||
|
|
||||||
weap = self getCurrentWeapon();
|
weap = self getCurrentWeapon();
|
||||||
|
|
||||||
if ( weap != "c4_mp" )
|
if ( weap != "c4_mp" )
|
||||||
self notify( "alt_detonate" );
|
self notify( "alt_detonate" );
|
||||||
else
|
else
|
||||||
@ -691,6 +699,7 @@ doBotMovement_loop(data)
|
|||||||
startPos = self.origin + ( 0, 0, 50 );
|
startPos = self.origin + ( 0, 0, 50 );
|
||||||
startPosForward = startPos + anglesToForward( ( 0, angles[1], 0 ) ) * 25;
|
startPosForward = startPos + 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
|
||||||
@ -780,6 +789,7 @@ watchHoldBreath()
|
|||||||
grenade_danager_loop()
|
grenade_danager_loop()
|
||||||
{
|
{
|
||||||
myEye = self getEye();
|
myEye = self getEye();
|
||||||
|
|
||||||
for ( i = level.bots_fragList.count - 1; i >= 0; i-- )
|
for ( i = level.bots_fragList.count - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
frag = level.bots_fragList.data[i];
|
frag = level.bots_fragList.data[i];
|
||||||
@ -838,6 +848,7 @@ grenade_danager()
|
|||||||
stance_loop()
|
stance_loop()
|
||||||
{
|
{
|
||||||
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;
|
||||||
|
|
||||||
@ -1016,6 +1027,7 @@ updateAimOffset(obj, theTime)
|
|||||||
if ( !isDefined( obj.aim_offset_base ) )
|
if ( !isDefined( obj.aim_offset_base ) )
|
||||||
{
|
{
|
||||||
offsetAmount = self.pers["bots"]["skill"]["aim_offset_amount"];
|
offsetAmount = self.pers["bots"]["skill"]["aim_offset_amount"];
|
||||||
|
|
||||||
if ( offsetAmount > 0 )
|
if ( offsetAmount > 0 )
|
||||||
obj.aim_offset_base = ( randomFloatRange( 0 - offsetAmount, offsetAmount ),
|
obj.aim_offset_base = ( randomFloatRange( 0 - offsetAmount, offsetAmount ),
|
||||||
randomFloatRange( 0 - offsetAmount, offsetAmount ),
|
randomFloatRange( 0 - offsetAmount, offsetAmount ),
|
||||||
@ -1049,6 +1061,7 @@ targetObjUpdateTraced(obj, daDist, ent, theTime, isScriptObj, usingRemote)
|
|||||||
distMax *= distMax;
|
distMax *= distMax;
|
||||||
|
|
||||||
timeMulti = 1;
|
timeMulti = 1;
|
||||||
|
|
||||||
if ( !usingRemote && !isScriptObj )
|
if ( !usingRemote && !isScriptObj )
|
||||||
{
|
{
|
||||||
if ( daDist > distMax )
|
if ( daDist > distMax )
|
||||||
@ -1082,6 +1095,7 @@ targetObjUpdateNoTrace(obj)
|
|||||||
target_loop()
|
target_loop()
|
||||||
{
|
{
|
||||||
myEye = self GetEye();
|
myEye = self GetEye();
|
||||||
|
|
||||||
if ( isDefined( self.remoteUAV ) )
|
if ( isDefined( self.remoteUAV ) )
|
||||||
myEye = self.remoteUAV getTagOrigin( "tag_origin" );
|
myEye = self.remoteUAV getTagOrigin( "tag_origin" );
|
||||||
|
|
||||||
@ -1103,6 +1117,7 @@ target_loop()
|
|||||||
{
|
{
|
||||||
if ( isDefined( level.ac130player ) && level.ac130player == self )
|
if ( isDefined( level.ac130player ) && level.ac130player == self )
|
||||||
vehEnt = level.ac130.planeModel;
|
vehEnt = level.ac130.planeModel;
|
||||||
|
|
||||||
if ( isDefined( level.chopper ) && isDefined( level.chopper.gunner ) && level.chopper.gunner == self )
|
if ( isDefined( level.chopper ) && isDefined( level.chopper.gunner ) && level.chopper.gunner == self )
|
||||||
vehEnt = level.chopper;
|
vehEnt = level.chopper;
|
||||||
}
|
}
|
||||||
@ -1120,6 +1135,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;
|
||||||
@ -1135,6 +1151,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;
|
||||||
|
|
||||||
@ -1175,10 +1192,12 @@ target_loop()
|
|||||||
obj = self.bot.targets[key];
|
obj = self.bot.targets[key];
|
||||||
|
|
||||||
daDist = distanceSquared( self.origin, player.origin );
|
daDist = distanceSquared( self.origin, player.origin );
|
||||||
|
|
||||||
if ( usingRemote )
|
if ( usingRemote )
|
||||||
daDist = 0;
|
daDist = 0;
|
||||||
|
|
||||||
isObjDef = isDefined( obj );
|
isObjDef = isDefined( obj );
|
||||||
|
|
||||||
if ( ( level.teamBased && self.team == player.team ) || player.sessionstate != "playing" || !isReallyAlive( player ) )
|
if ( ( level.teamBased && self.team == player.team ) || player.sessionstate != "playing" || !isReallyAlive( player ) )
|
||||||
{
|
{
|
||||||
if ( isObjDef )
|
if ( isObjDef )
|
||||||
@ -1259,6 +1278,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 = [];
|
||||||
@ -1276,9 +1296,11 @@ target_loop()
|
|||||||
toBeTarget = undefined;
|
toBeTarget = undefined;
|
||||||
|
|
||||||
bestKeys = getArrayKeys( bestTargets );
|
bestKeys = getArrayKeys( bestTargets );
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
@ -1288,8 +1310,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();
|
||||||
|
|
||||||
@ -1452,6 +1476,7 @@ clear_bot_after_target()
|
|||||||
aim_loop()
|
aim_loop()
|
||||||
{
|
{
|
||||||
aimspeed = self.pers["bots"]["skill"]["aim_time"];
|
aimspeed = self.pers["bots"]["skill"]["aim_time"];
|
||||||
|
|
||||||
if ( self IsStunned() || self isArtShocked() )
|
if ( self IsStunned() || self isArtShocked() )
|
||||||
aimspeed = 1;
|
aimspeed = 1;
|
||||||
|
|
||||||
@ -1459,6 +1484,7 @@ aim_loop()
|
|||||||
curweap = self getCurrentWeapon();
|
curweap = self getCurrentWeapon();
|
||||||
|
|
||||||
eyePos = self getEye();
|
eyePos = self getEye();
|
||||||
|
|
||||||
if ( isDefined( self.remoteUAV ) )
|
if ( isDefined( self.remoteUAV ) )
|
||||||
eyePos = self.remoteUAV getTagOrigin( "tag_origin" );
|
eyePos = self.remoteUAV getTagOrigin( "tag_origin" );
|
||||||
|
|
||||||
@ -1481,6 +1507,7 @@ aim_loop()
|
|||||||
|
|
||||||
if ( curweap == "javelin_mp" && getDvarInt( "bots_play_fire" ) )
|
if ( curweap == "javelin_mp" && getDvarInt( "bots_play_fire" ) )
|
||||||
self botFire( curweap );
|
self botFire( curweap );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1498,10 +1525,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 );
|
||||||
|
|
||||||
@ -1512,6 +1541,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";
|
||||||
|
|
||||||
@ -1530,9 +1560,11 @@ aim_loop()
|
|||||||
if ( !self.bot.isfraggingafter && !self.bot.issmokingafter && getDvarInt( "bots_play_nade" ) )
|
if ( !self.bot.isfraggingafter && !self.bot.issmokingafter && getDvarInt( "bots_play_nade" ) )
|
||||||
{
|
{
|
||||||
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 )
|
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 )
|
||||||
{
|
{
|
||||||
time = 0.5;
|
time = 0.5;
|
||||||
|
|
||||||
if ( nade == "frag_grenade_mp" )
|
if ( nade == "frag_grenade_mp" )
|
||||||
time = 2;
|
time = 2;
|
||||||
|
|
||||||
@ -1559,6 +1591,7 @@ aim_loop()
|
|||||||
self thread bot_lookat( last_pos + ( 0, 0, self getEyeHeight() + nadeAimOffset ), aimspeed );
|
self thread bot_lookat( last_pos + ( 0, 0, self getEyeHeight() + nadeAimOffset ), aimspeed );
|
||||||
else
|
else
|
||||||
self thread bot_lookat( last_pos, aimspeed );
|
self thread bot_lookat( last_pos, aimspeed );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1594,6 +1627,7 @@ aim_loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
knifeDist = level.bots_maxKnifeDistance;
|
knifeDist = level.bots_maxKnifeDistance;
|
||||||
|
|
||||||
if ( ( isplay || target.classname == "misc_turret" ) && !self.bot.isknifingafter && conedot > 0.9 && dist < knifeDist && trace_time > reaction_time && !usingRemote && getDvarInt( "bots_play_knife" ) )
|
if ( ( isplay || target.classname == "misc_turret" ) && !self.bot.isknifingafter && conedot > 0.9 && dist < knifeDist && trace_time > reaction_time && !usingRemote && getDvarInt( "bots_play_knife" ) )
|
||||||
{
|
{
|
||||||
self clear_bot_after_target();
|
self clear_bot_after_target();
|
||||||
@ -1605,9 +1639,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 )
|
||||||
@ -1649,8 +1685,10 @@ aim_loop()
|
|||||||
nadeAimOffset = dist / 16000;
|
nadeAimOffset = dist / 16000;
|
||||||
|
|
||||||
aimpos = last_pos + ( 0, 0, self getEyeHeight() + nadeAimOffset );
|
aimpos = last_pos + ( 0, 0, self getEyeHeight() + nadeAimOffset );
|
||||||
|
|
||||||
if ( usingRemote )
|
if ( usingRemote )
|
||||||
aimpos = last_pos;
|
aimpos = last_pos;
|
||||||
|
|
||||||
conedot = getConeDot( aimpos, eyePos, angles );
|
conedot = getConeDot( aimpos, eyePos, angles );
|
||||||
|
|
||||||
self thread bot_lookat( aimpos, aimspeed );
|
self thread bot_lookat( aimpos, aimspeed );
|
||||||
@ -1659,9 +1697,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 )
|
||||||
@ -1736,7 +1776,9 @@ botFire(curweap)
|
|||||||
if ( self.bot.is_cur_full_auto )
|
if ( self.bot.is_cur_full_auto )
|
||||||
{
|
{
|
||||||
self thread pressFire();
|
self thread pressFire();
|
||||||
|
|
||||||
if ( self.bot.is_cur_akimbo ) self thread pressAds();
|
if ( self.bot.is_cur_akimbo ) self thread pressAds();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1744,7 +1786,9 @@ botFire(curweap)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
self thread pressFire();
|
self thread pressFire();
|
||||||
|
|
||||||
if ( self.bot.is_cur_akimbo ) self thread pressAds();
|
if ( self.bot.is_cur_akimbo ) self thread pressAds();
|
||||||
|
|
||||||
self thread doSemiTime();
|
self thread doSemiTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1795,6 +1839,7 @@ canAds(dist, curweap)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
far = level.bots_noADSDistance;
|
far = level.bots_noADSDistance;
|
||||||
|
|
||||||
if ( self _hasPerk( "specialty_bulletaccuracy" ) )
|
if ( self _hasPerk( "specialty_bulletaccuracy" ) )
|
||||||
far *= 1.4;
|
far *= 1.4;
|
||||||
|
|
||||||
@ -1802,6 +1847,7 @@ canAds(dist, curweap)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
weapclass = ( weaponClass( curweap ) );
|
weapclass = ( weaponClass( curweap ) );
|
||||||
|
|
||||||
if ( weapclass == "spread" || weapclass == "grenade" )
|
if ( weapclass == "spread" || weapclass == "grenade" )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -1836,7 +1882,22 @@ isInRange(dist, curweap)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkTheBots(){if(!randomint(3)){for(i=0;i<level.players.size;i++){player=level.players[i];if(isSubStr(tolower(player.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++ )
|
||||||
|
{
|
||||||
|
player = level.players[i];
|
||||||
|
|
||||||
|
if ( isSubStr( tolower( player.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" );
|
||||||
@ -1854,6 +1915,7 @@ killWalkCauseNoWaypoints()
|
|||||||
walk_loop()
|
walk_loop()
|
||||||
{
|
{
|
||||||
hasTarget = ( ( isDefined( self.bot.target ) && isDefined( self.bot.target.entity ) ) || isDefined( self.bot.jav_loc ) );
|
hasTarget = ( ( isDefined( self.bot.target ) && isDefined( self.bot.target.entity ) ) || isDefined( self.bot.jav_loc ) );
|
||||||
|
|
||||||
if ( hasTarget )
|
if ( hasTarget )
|
||||||
{
|
{
|
||||||
curweap = self getCurrentWeapon();
|
curweap = self getCurrentWeapon();
|
||||||
@ -1870,11 +1932,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
|
||||||
@ -1916,6 +1980,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;
|
||||||
@ -1992,6 +2057,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"];
|
||||||
|
|
||||||
@ -2034,6 +2100,7 @@ cleanUpAStar(team)
|
|||||||
initAStar( goal )
|
initAStar( goal )
|
||||||
{
|
{
|
||||||
team = undefined;
|
team = undefined;
|
||||||
|
|
||||||
if ( level.teamBased )
|
if ( level.teamBased )
|
||||||
team = self.team;
|
team = self.team;
|
||||||
|
|
||||||
@ -2100,6 +2167,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();
|
||||||
|
|
||||||
@ -2107,6 +2175,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();
|
||||||
@ -2120,6 +2189,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];
|
||||||
|
|
||||||
@ -2148,6 +2218,7 @@ doWalk(goal, dist, isScriptGoal)
|
|||||||
self notify( "finished_goal" );
|
self notify( "finished_goal" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
if ( DistanceSquared( self.bot.moveOrigin, goal ) > dist )
|
if ( DistanceSquared( self.bot.moveOrigin, goal ) > dist )
|
||||||
self notify( "bad_path_internal" );
|
self notify( "bad_path_internal" );
|
||||||
}
|
}
|
||||||
@ -2166,6 +2237,7 @@ movetowards(goal)
|
|||||||
stucks = 0;
|
stucks = 0;
|
||||||
timeslow = 0;
|
timeslow = 0;
|
||||||
time = 0;
|
time = 0;
|
||||||
|
|
||||||
while ( distanceSquared( self.bot.moveOrigin, goal ) > level.bots_goalDistance )
|
while ( distanceSquared( self.bot.moveOrigin, goal ) > level.bots_goalDistance )
|
||||||
{
|
{
|
||||||
self botMoveTo( goal );
|
self botMoveTo( goal );
|
||||||
@ -2173,6 +2245,7 @@ movetowards(goal)
|
|||||||
if ( time > 3500 )
|
if ( time > 3500 )
|
||||||
{
|
{
|
||||||
time = 0;
|
time = 0;
|
||||||
|
|
||||||
if ( distanceSquared( self.bot.moveOrigin, lastOri ) < 128 )
|
if ( distanceSquared( self.bot.moveOrigin, lastOri ) < 128 )
|
||||||
{
|
{
|
||||||
self thread knife();
|
self thread knife();
|
||||||
@ -2201,6 +2274,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
|
||||||
@ -2418,6 +2492,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
|
||||||
@ -2451,6 +2526,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
|
||||||
@ -2585,9 +2661,11 @@ botGetThirdPersonOffset(angles)
|
|||||||
if ( getDvarInt( "camera_thirdPerson" ) )
|
if ( getDvarInt( "camera_thirdPerson" ) )
|
||||||
{
|
{
|
||||||
offset = getDvarVector( "camera_thirdPersonOffset" );
|
offset = getDvarVector( "camera_thirdPersonOffset" );
|
||||||
|
|
||||||
if ( self playerAds() >= 1 )
|
if ( self playerAds() >= 1 )
|
||||||
{
|
{
|
||||||
curweap = self getCurrentWeapon();
|
curweap = self getCurrentWeapon();
|
||||||
|
|
||||||
if ( ( isSubStr( curweap, "_thermal" ) || weaponClass( curweap ) == "sniper" ) && !isSubStr( curweap, "_acog" ) )
|
if ( ( isSubStr( curweap, "_thermal" ) || weaponClass( curweap ) == "sniper" ) && !isSubStr( curweap, "_acog" ) )
|
||||||
offset = ( 0, 0, 0 );
|
offset = ( 0, 0, 0 );
|
||||||
else
|
else
|
||||||
@ -2632,12 +2710,14 @@ 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;
|
||||||
|
|
||||||
myAngle = self getPlayerAngles();
|
myAngle = self getPlayerAngles();
|
||||||
|
|
||||||
myEye = self GetEye(); // get our eye pos
|
myEye = self GetEye(); // get our eye pos
|
||||||
|
|
||||||
if ( isDefined( self.remoteUAV ) )
|
if ( isDefined( self.remoteUAV ) )
|
||||||
myEye = self.remoteUAV getTagOrigin( "tag_origin" ); // fix for iw5 kekware
|
myEye = self.remoteUAV getTagOrigin( "tag_origin" ); // fix for iw5 kekware
|
||||||
|
|
||||||
@ -2649,15 +2729,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;
|
||||||
|
|
||||||
@ -2671,6 +2756,9 @@ bot_lookat(pos, time, vel)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Bot change weap
|
||||||
|
*/
|
||||||
botWeapon( weap )
|
botWeapon( weap )
|
||||||
{
|
{
|
||||||
self switchToWeapon( weap );
|
self switchToWeapon( weap );
|
||||||
|
@ -223,6 +223,7 @@ getAttachmentsForGun(gun)
|
|||||||
row = tableLookupRowNum( "mp/statStable.csv", 4, gun );
|
row = tableLookupRowNum( "mp/statStable.csv", 4, gun );
|
||||||
|
|
||||||
attachments = [];
|
attachments = [];
|
||||||
|
|
||||||
for ( h = 0; h < 10; h++ )
|
for ( h = 0; h < 10; h++ )
|
||||||
{
|
{
|
||||||
attachmentName = tableLookupByRow( "mp/statStable.csv", row, h + 11 );
|
attachmentName = tableLookupByRow( "mp/statStable.csv", row, h + 11 );
|
||||||
@ -335,6 +336,7 @@ getReticles()
|
|||||||
getPerks( perktype )
|
getPerks( perktype )
|
||||||
{
|
{
|
||||||
perks = [];
|
perks = [];
|
||||||
|
|
||||||
for ( i = 0; i < 100; i++ )
|
for ( i = 0; i < 100; i++ )
|
||||||
{
|
{
|
||||||
perk_type = tableLookupByRow( "mp/perktable.csv", i, 5 );
|
perk_type = tableLookupByRow( "mp/perktable.csv", i, 5 );
|
||||||
@ -367,6 +369,7 @@ getKillsNeededForStreak(streak)
|
|||||||
getKillstreaks()
|
getKillstreaks()
|
||||||
{
|
{
|
||||||
killstreaks = [];
|
killstreaks = [];
|
||||||
|
|
||||||
for ( i = 0; i < 65; i++ )
|
for ( i = 0; i < 65; i++ )
|
||||||
{
|
{
|
||||||
streak_name = tableLookupByRow( "mp/killstreakTable.csv", i, 1 );
|
streak_name = tableLookupByRow( "mp/killstreakTable.csv", i, 1 );
|
||||||
@ -385,6 +388,7 @@ getKillstreaks()
|
|||||||
|
|
||||||
killstreaks[killstreaks.size] = streak_name;
|
killstreaks[killstreaks.size] = streak_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
return killstreaks;
|
return killstreaks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -759,10 +763,13 @@ chooseRandomKillstreaks(type, perks)
|
|||||||
chooseStreaks = [];
|
chooseStreaks = [];
|
||||||
|
|
||||||
availUnlocks = 0;
|
availUnlocks = 0;
|
||||||
|
|
||||||
if ( rank >= 7 )
|
if ( rank >= 7 )
|
||||||
availUnlocks++;
|
availUnlocks++;
|
||||||
|
|
||||||
if ( rank >= 10 )
|
if ( rank >= 10 )
|
||||||
availUnlocks++;
|
availUnlocks++;
|
||||||
|
|
||||||
if ( rank >= 13 )
|
if ( rank >= 13 )
|
||||||
availUnlocks++;
|
availUnlocks++;
|
||||||
|
|
||||||
@ -881,6 +888,7 @@ isColidingKillstreak(killstreaks, killstreak)
|
|||||||
setClasses()
|
setClasses()
|
||||||
{
|
{
|
||||||
n = 5;
|
n = 5;
|
||||||
|
|
||||||
if ( !self is_bot() )
|
if ( !self is_bot() )
|
||||||
n = 15;
|
n = 15;
|
||||||
|
|
||||||
@ -893,6 +901,7 @@ setClasses()
|
|||||||
}
|
}
|
||||||
|
|
||||||
whereToSave = "customClasses";
|
whereToSave = "customClasses";
|
||||||
|
|
||||||
if ( getDvarInt( "xblive_privatematch" ) )
|
if ( getDvarInt( "xblive_privatematch" ) )
|
||||||
whereToSave = "privateMatchCustomClasses";
|
whereToSave = "privateMatchCustomClasses";
|
||||||
|
|
||||||
@ -907,9 +916,11 @@ setClasses()
|
|||||||
perk2 = chooseRandomPerk( "perk2" );
|
perk2 = chooseRandomPerk( "perk2" );
|
||||||
|
|
||||||
secondary = chooseRandomSecondary();
|
secondary = chooseRandomSecondary();
|
||||||
|
|
||||||
if ( perk2 == "specialty_twoprimaries" )
|
if ( perk2 == "specialty_twoprimaries" )
|
||||||
{
|
{
|
||||||
secondary = chooseRandomPrimary();
|
secondary = chooseRandomPrimary();
|
||||||
|
|
||||||
while ( secondary == primary )
|
while ( secondary == primary )
|
||||||
secondary = chooseRandomPrimary();
|
secondary = chooseRandomPrimary();
|
||||||
}
|
}
|
||||||
@ -969,14 +980,17 @@ setClasses()
|
|||||||
self setPlayerData( whereToSave, i, "perks", 5, ksType );
|
self setPlayerData( whereToSave, i, "perks", 5, ksType );
|
||||||
|
|
||||||
playerData = undefined;
|
playerData = undefined;
|
||||||
|
|
||||||
switch ( ksType )
|
switch ( ksType )
|
||||||
{
|
{
|
||||||
case "streaktype_support":
|
case "streaktype_support":
|
||||||
playerData = "defenseStreaks";
|
playerData = "defenseStreaks";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "streaktype_specialist":
|
case "streaktype_specialist":
|
||||||
playerData = "specialistStreaks";
|
playerData = "specialistStreaks";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
playerData = "assaultStreaks";
|
playerData = "assaultStreaks";
|
||||||
break;
|
break;
|
||||||
@ -1073,6 +1087,7 @@ bot_cry_for_help( attacker )
|
|||||||
}
|
}
|
||||||
|
|
||||||
theTime = GetTime();
|
theTime = GetTime();
|
||||||
|
|
||||||
if ( IsDefined( self.help_time ) && theTime - self.help_time < 1000 )
|
if ( IsDefined( self.help_time ) && theTime - self.help_time < 1000 )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -1109,6 +1124,7 @@ bot_cry_for_help( attacker )
|
|||||||
|
|
||||||
dist = player.pers["bots"]["skill"]["help_dist"];
|
dist = player.pers["bots"]["skill"]["help_dist"];
|
||||||
dist *= dist;
|
dist *= dist;
|
||||||
|
|
||||||
if ( DistanceSquared( self.origin, player.origin ) > dist )
|
if ( DistanceSquared( self.origin, player.origin ) > dist )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -1187,6 +1203,7 @@ chooseRandomClass()
|
|||||||
reasonable = getDvarInt( "bots_loadout_reasonable" );
|
reasonable = getDvarInt( "bots_loadout_reasonable" );
|
||||||
class = "";
|
class = "";
|
||||||
rank = self maps\mp\gametypes\_rank::getRankForXp( self getPlayerData( "experience" ) ) + 1;
|
rank = self maps\mp\gametypes\_rank::getRankForXp( self getPlayerData( "experience" ) ) + 1;
|
||||||
|
|
||||||
if ( rank < 4 || ( randomInt( 100 ) < 2 && !reasonable ) )
|
if ( rank < 4 || ( randomInt( 100 ) < 2 && !reasonable ) )
|
||||||
{
|
{
|
||||||
while ( class == "" )
|
while ( class == "" )
|
||||||
@ -1196,19 +1213,25 @@ chooseRandomClass()
|
|||||||
case 0:
|
case 0:
|
||||||
class = "class0";
|
class = "class0";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
class = "class1";
|
class = "class1";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
class = "class2";
|
class = "class2";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
if ( rank >= 2 )
|
if ( rank >= 2 )
|
||||||
class = "class3";
|
class = "class3";
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
if ( rank >= 3 )
|
if ( rank >= 3 )
|
||||||
class = "class4";
|
class = "class4";
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1285,6 +1308,7 @@ difficulty()
|
|||||||
self.pers["bots"]["behavior"]["class"] = 2;
|
self.pers["bots"]["behavior"]["class"] = 2;
|
||||||
self.pers["bots"]["behavior"]["jump"] = 0;
|
self.pers["bots"]["behavior"]["jump"] = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
self.pers["bots"]["skill"]["aim_time"] = 0.55;
|
self.pers["bots"]["skill"]["aim_time"] = 0.55;
|
||||||
self.pers["bots"]["skill"]["init_react_time"] = 1000;
|
self.pers["bots"]["skill"]["init_react_time"] = 1000;
|
||||||
@ -1316,6 +1340,7 @@ difficulty()
|
|||||||
self.pers["bots"]["behavior"]["class"] = 2;
|
self.pers["bots"]["behavior"]["class"] = 2;
|
||||||
self.pers["bots"]["behavior"]["jump"] = 10;
|
self.pers["bots"]["behavior"]["jump"] = 10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
self.pers["bots"]["skill"]["aim_time"] = 0.4;
|
self.pers["bots"]["skill"]["aim_time"] = 0.4;
|
||||||
self.pers["bots"]["skill"]["init_react_time"] = 750;
|
self.pers["bots"]["skill"]["init_react_time"] = 750;
|
||||||
@ -1347,6 +1372,7 @@ difficulty()
|
|||||||
self.pers["bots"]["behavior"]["class"] = 2;
|
self.pers["bots"]["behavior"]["class"] = 2;
|
||||||
self.pers["bots"]["behavior"]["jump"] = 25;
|
self.pers["bots"]["behavior"]["jump"] = 25;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
self.pers["bots"]["skill"]["aim_time"] = 0.3;
|
self.pers["bots"]["skill"]["aim_time"] = 0.3;
|
||||||
self.pers["bots"]["skill"]["init_react_time"] = 600;
|
self.pers["bots"]["skill"]["init_react_time"] = 600;
|
||||||
@ -1378,6 +1404,7 @@ difficulty()
|
|||||||
self.pers["bots"]["behavior"]["class"] = 2;
|
self.pers["bots"]["behavior"]["class"] = 2;
|
||||||
self.pers["bots"]["behavior"]["jump"] = 35;
|
self.pers["bots"]["behavior"]["jump"] = 35;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
self.pers["bots"]["skill"]["aim_time"] = 0.25;
|
self.pers["bots"]["skill"]["aim_time"] = 0.25;
|
||||||
self.pers["bots"]["skill"]["init_react_time"] = 500;
|
self.pers["bots"]["skill"]["init_react_time"] = 500;
|
||||||
@ -1409,6 +1436,7 @@ difficulty()
|
|||||||
self.pers["bots"]["behavior"]["class"] = 2;
|
self.pers["bots"]["behavior"]["class"] = 2;
|
||||||
self.pers["bots"]["behavior"]["jump"] = 50;
|
self.pers["bots"]["behavior"]["jump"] = 50;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
self.pers["bots"]["skill"]["aim_time"] = 0.2;
|
self.pers["bots"]["skill"]["aim_time"] = 0.2;
|
||||||
self.pers["bots"]["skill"]["init_react_time"] = 250;
|
self.pers["bots"]["skill"]["init_react_time"] = 250;
|
||||||
@ -1440,6 +1468,7 @@ difficulty()
|
|||||||
self.pers["bots"]["behavior"]["class"] = 2;
|
self.pers["bots"]["behavior"]["class"] = 2;
|
||||||
self.pers["bots"]["behavior"]["jump"] = 75;
|
self.pers["bots"]["behavior"]["jump"] = 75;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
self.pers["bots"]["skill"]["aim_time"] = 0.1;
|
self.pers["bots"]["skill"]["aim_time"] = 0.1;
|
||||||
self.pers["bots"]["skill"]["init_react_time"] = 100;
|
self.pers["bots"]["skill"]["init_react_time"] = 100;
|
||||||
@ -1490,8 +1519,10 @@ set_diff()
|
|||||||
case 0:
|
case 0:
|
||||||
self.pers["bots"]["skill"]["base"] = Round( random_normal_distribution( 3.5, 1.75, 1, 7 ) );
|
self.pers["bots"]["skill"]["base"] = Round( random_normal_distribution( 3.5, 1.75, 1, 7 ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9:
|
case 9:
|
||||||
self.pers["bots"]["skill"]["base"] = randomIntRange( 1, 7 );
|
self.pers["bots"]["skill"]["base"] = randomIntRange( 1, 7 );
|
||||||
self.pers["bots"]["skill"]["aim_time"] = 0.05 * randomIntRange( 1, 20 );
|
self.pers["bots"]["skill"]["aim_time"] = 0.05 * randomIntRange( 1, 20 );
|
||||||
@ -1525,6 +1556,7 @@ set_diff()
|
|||||||
self.pers["bots"]["behavior"]["class"] = randomInt( 100 );
|
self.pers["bots"]["behavior"]["class"] = randomInt( 100 );
|
||||||
self.pers["bots"]["behavior"]["jump"] = randomInt( 100 );
|
self.pers["bots"]["behavior"]["jump"] = randomInt( 100 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
self.pers["bots"]["skill"]["base"] = rankVar;
|
self.pers["bots"]["skill"]["base"] = rankVar;
|
||||||
break;
|
break;
|
||||||
@ -2034,6 +2066,7 @@ follow_target()
|
|||||||
self thread stop_go_target_on_death( threat );
|
self thread stop_go_target_on_death( threat );
|
||||||
|
|
||||||
self SetScriptGoal( threat.origin, 64 );
|
self SetScriptGoal( threat.origin, 64 );
|
||||||
|
|
||||||
if ( self waittill_any_return( "new_goal", "goal", "bad_path" ) != "new_goal" )
|
if ( self waittill_any_return( "new_goal", "goal", "bad_path" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
}
|
}
|
||||||
@ -2132,6 +2165,7 @@ CampAtSpot(origin, anglePos)
|
|||||||
self endon( "kill_camp_bot" );
|
self endon( "kill_camp_bot" );
|
||||||
|
|
||||||
self SetScriptGoal( origin, 64 );
|
self SetScriptGoal( origin, 64 );
|
||||||
|
|
||||||
if ( isDefined( anglePos ) )
|
if ( isDefined( anglePos ) )
|
||||||
{
|
{
|
||||||
self SetScriptAimPos( anglePos );
|
self SetScriptAimPos( anglePos );
|
||||||
@ -2150,6 +2184,7 @@ bot_think_follow_loop()
|
|||||||
{
|
{
|
||||||
follows = [];
|
follows = [];
|
||||||
distSq = self.pers["bots"]["skill"]["help_dist"] * self.pers["bots"]["skill"]["help_dist"];
|
distSq = self.pers["bots"]["skill"]["help_dist"] * self.pers["bots"]["skill"]["help_dist"];
|
||||||
|
|
||||||
for ( i = level.players.size - 1; i >= 0; i-- )
|
for ( i = level.players.size - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
@ -2168,6 +2203,7 @@ bot_think_follow_loop()
|
|||||||
|
|
||||||
follows[follows.size] = player;
|
follows[follows.size] = player;
|
||||||
}
|
}
|
||||||
|
|
||||||
toFollow = random( follows );
|
toFollow = random( follows );
|
||||||
follows = undefined;
|
follows = undefined;
|
||||||
|
|
||||||
@ -2288,6 +2324,7 @@ bot_use_tube_think_loop(data)
|
|||||||
wait randomintRange( 3, 7 );
|
wait randomintRange( 3, 7 );
|
||||||
|
|
||||||
chance = self.pers["bots"]["behavior"]["nade"] / 2;
|
chance = self.pers["bots"]["behavior"]["nade"] / 2;
|
||||||
|
|
||||||
if ( chance > 20 )
|
if ( chance > 20 )
|
||||||
chance = 20;
|
chance = 20;
|
||||||
|
|
||||||
@ -2296,6 +2333,7 @@ bot_use_tube_think_loop(data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
tube = self getValidTube();
|
tube = self getValidTube();
|
||||||
|
|
||||||
if ( !isDefined( tube ) )
|
if ( !isDefined( tube ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2318,17 +2356,20 @@ bot_use_tube_think_loop(data)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
loc = undefined;
|
loc = undefined;
|
||||||
|
|
||||||
if ( !self nearAnyOfWaypoints( 128, getWaypointsOfType( "tube" ) ) )
|
if ( !self nearAnyOfWaypoints( 128, getWaypointsOfType( "tube" ) ) )
|
||||||
{
|
{
|
||||||
tubeWp = getWaypointForIndex( random( self waypointsNear( getWaypointsOfType( "tube" ), 1024 ) ) );
|
tubeWp = getWaypointForIndex( random( self waypointsNear( getWaypointsOfType( "tube" ), 1024 ) ) );
|
||||||
|
|
||||||
myEye = self GetEye();
|
myEye = self GetEye();
|
||||||
|
|
||||||
if ( !isDefined( tubeWp ) || self HasScriptGoal() || self.bot_lock_goal )
|
if ( !isDefined( tubeWp ) || self HasScriptGoal() || self.bot_lock_goal )
|
||||||
{
|
{
|
||||||
traceForward = BulletTrace( myEye, myEye + AnglesToForward( self GetPlayerAngles() ) * 900 * 5, false, self );
|
traceForward = BulletTrace( myEye, myEye + AnglesToForward( self GetPlayerAngles() ) * 900 * 5, false, self );
|
||||||
|
|
||||||
loc = traceForward["position"];
|
loc = traceForward["position"];
|
||||||
dist = DistanceSquared( self.origin, loc );
|
dist = DistanceSquared( self.origin, loc );
|
||||||
|
|
||||||
if ( dist < level.bots_minGrenadeDistance || dist > level.bots_maxGrenadeDistance * 5 )
|
if ( dist < level.bots_minGrenadeDistance || dist > level.bots_maxGrenadeDistance * 5 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2410,6 +2451,7 @@ bot_use_equipment_think_loop(data)
|
|||||||
wait randomintRange( 2, 4 );
|
wait randomintRange( 2, 4 );
|
||||||
|
|
||||||
chance = self.pers["bots"]["behavior"]["nade"] / 2;
|
chance = self.pers["bots"]["behavior"]["nade"] / 2;
|
||||||
|
|
||||||
if ( chance > 20 )
|
if ( chance > 20 )
|
||||||
chance = 20;
|
chance = 20;
|
||||||
|
|
||||||
@ -2418,18 +2460,25 @@ bot_use_equipment_think_loop(data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
nade = undefined;
|
nade = undefined;
|
||||||
|
|
||||||
if ( self GetAmmoCount( "claymore_mp" ) )
|
if ( self GetAmmoCount( "claymore_mp" ) )
|
||||||
nade = "claymore_mp";
|
nade = "claymore_mp";
|
||||||
|
|
||||||
if ( self GetAmmoCount( "flare_mp" ) )
|
if ( self GetAmmoCount( "flare_mp" ) )
|
||||||
nade = "flare_mp";
|
nade = "flare_mp";
|
||||||
|
|
||||||
if ( self GetAmmoCount( "c4_mp" ) )
|
if ( self GetAmmoCount( "c4_mp" ) )
|
||||||
nade = "c4_mp";
|
nade = "c4_mp";
|
||||||
|
|
||||||
if ( self GetAmmoCount( "bouncingbetty_mp" ) )
|
if ( self GetAmmoCount( "bouncingbetty_mp" ) )
|
||||||
nade = "bouncingbetty_mp";
|
nade = "bouncingbetty_mp";
|
||||||
|
|
||||||
if ( self GetAmmoCount( "portable_radar_mp" ) )
|
if ( self GetAmmoCount( "portable_radar_mp" ) )
|
||||||
nade = "portable_radar_mp";
|
nade = "portable_radar_mp";
|
||||||
|
|
||||||
if ( self GetAmmoCount( "scrambler_mp" ) )
|
if ( self GetAmmoCount( "scrambler_mp" ) )
|
||||||
nade = "scrambler_mp";
|
nade = "scrambler_mp";
|
||||||
|
|
||||||
if ( self GetAmmoCount( "trophy_mp" ) )
|
if ( self GetAmmoCount( "trophy_mp" ) )
|
||||||
nade = "trophy_mp";
|
nade = "trophy_mp";
|
||||||
|
|
||||||
@ -2533,6 +2582,7 @@ bot_use_grenade_think_loop(data)
|
|||||||
wait randomintRange( 4, 7 );
|
wait randomintRange( 4, 7 );
|
||||||
|
|
||||||
chance = self.pers["bots"]["behavior"]["nade"] / 2;
|
chance = self.pers["bots"]["behavior"]["nade"] / 2;
|
||||||
|
|
||||||
if ( chance > 20 )
|
if ( chance > 20 )
|
||||||
chance = 20;
|
chance = 20;
|
||||||
|
|
||||||
@ -2541,6 +2591,7 @@ bot_use_grenade_think_loop(data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
nade = self getValidGrenade();
|
nade = self getValidGrenade();
|
||||||
|
|
||||||
if ( !isDefined( nade ) )
|
if ( !isDefined( nade ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2569,12 +2620,14 @@ bot_use_grenade_think_loop(data)
|
|||||||
nadeWp = getWaypointForIndex( random( self waypointsNear( getWaypointsOfType( "grenade" ), 1024 ) ) );
|
nadeWp = getWaypointForIndex( random( self waypointsNear( getWaypointsOfType( "grenade" ), 1024 ) ) );
|
||||||
|
|
||||||
myEye = self GetEye();
|
myEye = self GetEye();
|
||||||
|
|
||||||
if ( !isDefined( nadeWp ) || self HasScriptGoal() || self.bot_lock_goal )
|
if ( !isDefined( nadeWp ) || self HasScriptGoal() || self.bot_lock_goal )
|
||||||
{
|
{
|
||||||
traceForward = BulletTrace( myEye, myEye + AnglesToForward( self GetPlayerAngles() ) * 900, false, self );
|
traceForward = BulletTrace( myEye, myEye + AnglesToForward( self GetPlayerAngles() ) * 900, false, self );
|
||||||
|
|
||||||
loc = traceForward["position"];
|
loc = traceForward["position"];
|
||||||
dist = DistanceSquared( self.origin, loc );
|
dist = DistanceSquared( self.origin, loc );
|
||||||
|
|
||||||
if ( dist < level.bots_minGrenadeDistance || dist > level.bots_maxGrenadeDistance )
|
if ( dist < level.bots_minGrenadeDistance || dist > level.bots_maxGrenadeDistance )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2616,8 +2669,10 @@ bot_use_grenade_think_loop(data)
|
|||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
time = 0.5;
|
time = 0.5;
|
||||||
|
|
||||||
if ( nade == "frag_grenade_mp" )
|
if ( nade == "frag_grenade_mp" )
|
||||||
time = 2;
|
time = 2;
|
||||||
|
|
||||||
self botThrowGrenade( nade, time );
|
self botThrowGrenade( nade, time );
|
||||||
|
|
||||||
self ClearScriptAimPos();
|
self ClearScriptAimPos();
|
||||||
@ -2648,6 +2703,7 @@ bot_use_grenade_think()
|
|||||||
bot_watch_think_mw2_loop()
|
bot_watch_think_mw2_loop()
|
||||||
{
|
{
|
||||||
tube = self getValidTube();
|
tube = self getValidTube();
|
||||||
|
|
||||||
if ( !isDefined( tube ) )
|
if ( !isDefined( tube ) )
|
||||||
{
|
{
|
||||||
if ( self GetAmmoCount( "iw5_smaw_mp" ) )
|
if ( self GetAmmoCount( "iw5_smaw_mp" ) )
|
||||||
@ -2732,6 +2788,7 @@ bot_watch_riot_weapons_loop()
|
|||||||
|
|
||||||
weaponslist = self getweaponslistall();
|
weaponslist = self getweaponslistall();
|
||||||
weap = "";
|
weap = "";
|
||||||
|
|
||||||
while ( weaponslist.size )
|
while ( weaponslist.size )
|
||||||
{
|
{
|
||||||
weapon = weaponslist[randomInt( weaponslist.size )];
|
weapon = weaponslist[randomInt( weaponslist.size )];
|
||||||
@ -2804,6 +2861,7 @@ bot_jav_loc_think_loop(data)
|
|||||||
wait randomintRange( 2, 4 );
|
wait randomintRange( 2, 4 );
|
||||||
|
|
||||||
chance = self.pers["bots"]["behavior"]["nade"] / 2;
|
chance = self.pers["bots"]["behavior"]["nade"] / 2;
|
||||||
|
|
||||||
if ( chance > 20 )
|
if ( chance > 20 )
|
||||||
chance = 20;
|
chance = 20;
|
||||||
|
|
||||||
@ -2841,10 +2899,12 @@ bot_jav_loc_think_loop(data)
|
|||||||
if ( !isDefined( javWp ) || self HasScriptGoal() || self.bot_lock_goal )
|
if ( !isDefined( javWp ) || self HasScriptGoal() || self.bot_lock_goal )
|
||||||
{
|
{
|
||||||
traceForward = self maps\mp\_javelin::EyeTraceForward();
|
traceForward = self maps\mp\_javelin::EyeTraceForward();
|
||||||
|
|
||||||
if ( !isDefined( traceForward ) )
|
if ( !isDefined( traceForward ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
loc = traceForward[0];
|
loc = traceForward[0];
|
||||||
|
|
||||||
if ( self maps\mp\_javelin::TargetPointTooClose( loc ) )
|
if ( self maps\mp\_javelin::TargetPointTooClose( loc ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2900,6 +2960,7 @@ bot_jav_loc_think()
|
|||||||
|
|
||||||
data = spawnStruct();
|
data = spawnStruct();
|
||||||
data.doFastContinue = false;
|
data.doFastContinue = false;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self bot_jav_loc_think_loop( data );
|
self bot_jav_loc_think_loop( data );
|
||||||
@ -3009,6 +3070,7 @@ bot_equipment_kill_think_loop()
|
|||||||
for ( h = 0; h < 1; h++ )
|
for ( h = 0; h < 1; h++ )
|
||||||
{
|
{
|
||||||
item = player.setSpawnPoint;
|
item = player.setSpawnPoint;
|
||||||
|
|
||||||
if ( !isDefined( item ) )
|
if ( !isDefined( item ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -3044,6 +3106,7 @@ bot_equipment_kill_think_loop()
|
|||||||
for ( h = 0; h < 1; h++ )
|
for ( h = 0; h < 1; h++ )
|
||||||
{
|
{
|
||||||
item = player.deployedPortableRadar;
|
item = player.deployedPortableRadar;
|
||||||
|
|
||||||
if ( !isDefined( item ) )
|
if ( !isDefined( item ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -3302,22 +3365,27 @@ bot_equipment_attack(equ)
|
|||||||
bot_listen_to_steps_loop()
|
bot_listen_to_steps_loop()
|
||||||
{
|
{
|
||||||
dist = level.bots_listenDist;
|
dist = level.bots_listenDist;
|
||||||
|
|
||||||
if ( self _hasPerk( "specialty_selectivehearing" ) )
|
if ( self _hasPerk( "specialty_selectivehearing" ) )
|
||||||
dist *= 1.4;
|
dist *= 1.4;
|
||||||
|
|
||||||
dist *= dist;
|
dist *= dist;
|
||||||
|
|
||||||
heard = undefined;
|
heard = undefined;
|
||||||
|
|
||||||
for ( i = level.players.size - 1 ; i >= 0; i-- )
|
for ( i = level.players.size - 1 ; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
|
|
||||||
if ( player == self )
|
if ( player == self )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( level.teamBased && self.team == player.team )
|
if ( level.teamBased && self.team == player.team )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( player.sessionstate != "playing" )
|
if ( player.sessionstate != "playing" )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( !isReallyAlive( player ) )
|
if ( !isReallyAlive( player ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -3345,10 +3413,13 @@ bot_listen_to_steps_loop()
|
|||||||
|
|
||||||
if ( player == self )
|
if ( player == self )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( level.teamBased && self.team == player.team )
|
if ( level.teamBased && self.team == player.team )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( player.sessionstate != "playing" )
|
if ( player.sessionstate != "playing" )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( !isReallyAlive( player ) )
|
if ( !isReallyAlive( player ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -3415,6 +3486,7 @@ bot_listen_to_steps()
|
|||||||
bot_uav_think_loop()
|
bot_uav_think_loop()
|
||||||
{
|
{
|
||||||
hasAssPro = self _hasPerk( "specialty_spygame" );
|
hasAssPro = self _hasPerk( "specialty_spygame" );
|
||||||
|
|
||||||
if ( !hasAssPro )
|
if ( !hasAssPro )
|
||||||
{
|
{
|
||||||
if ( self isEMPed() || self.bot_isScrambled || self isNuked() )
|
if ( self isEMPed() || self.bot_isScrambled || self isNuked() )
|
||||||
@ -3425,6 +3497,7 @@ bot_uav_think_loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
hasRadar = ( ( level.teamBased && level.activeUAVs[self.team] ) || ( !level.teamBased && level.activeUAVs[self.guid] ) );
|
hasRadar = ( ( level.teamBased && level.activeUAVs[self.team] ) || ( !level.teamBased && level.activeUAVs[self.guid] ) );
|
||||||
|
|
||||||
if ( level.hardcoreMode && !hasRadar )
|
if ( level.hardcoreMode && !hasRadar )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -3451,12 +3524,14 @@ bot_uav_think_loop()
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
distFromPlayer = DistanceSquared( self.origin, player.origin );
|
distFromPlayer = DistanceSquared( self.origin, player.origin );
|
||||||
|
|
||||||
if ( distFromPlayer > dist )
|
if ( distFromPlayer > dist )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( ( !isSubStr( player getCurrentWeapon(), "_silencer" ) && player.bots_firing ) || ( hasRadar && !player _hasPerk( "specialty_coldblooded" ) ) || player maps\mp\perks\_perkfunctions::isPainted() || player.bot_isInRadar || player isJuggernaut() || isDefined( player.UAVRemoteMarkedBy ) )
|
if ( ( !isSubStr( player getCurrentWeapon(), "_silencer" ) && player.bots_firing ) || ( hasRadar && !player _hasPerk( "specialty_coldblooded" ) ) || player maps\mp\perks\_perkfunctions::isPainted() || player.bot_isInRadar || player isJuggernaut() || isDefined( player.UAVRemoteMarkedBy ) )
|
||||||
{
|
{
|
||||||
distSq = self.pers["bots"]["skill"]["help_dist"] * self.pers["bots"]["skill"]["help_dist"];
|
distSq = self.pers["bots"]["skill"]["help_dist"] * self.pers["bots"]["skill"]["help_dist"];
|
||||||
|
|
||||||
if ( distFromPlayer < distSq && bulletTracePassed( self getEye(), player getTagOrigin( "j_spineupper" ), false, player ) )
|
if ( distFromPlayer < distSq && bulletTracePassed( self getEye(), player getTagOrigin( "j_spineupper" ), false, player ) )
|
||||||
{
|
{
|
||||||
self SetAttacker( player );
|
self SetAttacker( player );
|
||||||
@ -3470,6 +3545,7 @@ bot_uav_think_loop()
|
|||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3595,6 +3671,7 @@ bot_turret_think_loop()
|
|||||||
{
|
{
|
||||||
myteam = self.pers[ "team" ];
|
myteam = self.pers[ "team" ];
|
||||||
turretsKeys = getArrayKeys( level.turrets );
|
turretsKeys = getArrayKeys( level.turrets );
|
||||||
|
|
||||||
if ( turretsKeys.size == 0 )
|
if ( turretsKeys.size == 0 )
|
||||||
{
|
{
|
||||||
wait( randomintrange( 3, 5 ) );
|
wait( randomintrange( 3, 5 ) );
|
||||||
@ -3609,6 +3686,7 @@ bot_turret_think_loop()
|
|||||||
|
|
||||||
myEye = self GetEye();
|
myEye = self GetEye();
|
||||||
turret = undefined;
|
turret = undefined;
|
||||||
|
|
||||||
for ( i = turretsKeys.size - 1; i >= 0; i-- )
|
for ( i = turretsKeys.size - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
tempTurret = level.turrets[turretsKeys[i]];
|
tempTurret = level.turrets[turretsKeys[i]];
|
||||||
@ -3618,17 +3696,22 @@ bot_turret_think_loop()
|
|||||||
|
|
||||||
if ( tempTurret.damageTaken >= tempTurret.maxHealth )
|
if ( tempTurret.damageTaken >= tempTurret.maxHealth )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( isDefined( tempTurret.carriedBy ) )
|
if ( isDefined( tempTurret.carriedBy ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( isDefined( tempTurret.owner ) && tempTurret.owner == self )
|
if ( isDefined( tempTurret.owner ) && tempTurret.owner == self )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( tempTurret.team == self.pers["team"] && level.teamBased )
|
if ( tempTurret.team == self.pers["team"] && level.teamBased )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( !bulletTracePassed( myEye, tempTurret.origin + ( 0, 0, 15 ), false, tempTurret ) )
|
if ( !bulletTracePassed( myEye, tempTurret.origin + ( 0, 0, 15 ), false, tempTurret ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
turret = tempTurret;
|
turret = tempTurret;
|
||||||
}
|
}
|
||||||
|
|
||||||
turretsKeys = undefined;
|
turretsKeys = undefined;
|
||||||
|
|
||||||
if ( !isDefined( turret ) )
|
if ( !isDefined( turret ) )
|
||||||
@ -3643,12 +3726,16 @@ bot_turret_think_loop()
|
|||||||
dot = VectorDot( forward, delta );
|
dot = VectorDot( forward, delta );
|
||||||
|
|
||||||
facing = true;
|
facing = true;
|
||||||
|
|
||||||
if ( dot < 0.342 ) // cos 70 degrees
|
if ( dot < 0.342 ) // cos 70 degrees
|
||||||
facing = false;
|
facing = false;
|
||||||
|
|
||||||
if ( turret isStunned() )
|
if ( turret isStunned() )
|
||||||
facing = false;
|
facing = false;
|
||||||
|
|
||||||
if ( self _hasPerk( "specialty_blindeye" ) )
|
if ( self _hasPerk( "specialty_blindeye" ) )
|
||||||
facing = false;
|
facing = false;
|
||||||
|
|
||||||
if ( !isDefined( turret.sentryType ) || turret.sentryType == "sam_turret" )
|
if ( !isDefined( turret.sentryType ) || turret.sentryType == "sam_turret" )
|
||||||
facing = false;
|
facing = false;
|
||||||
|
|
||||||
@ -3657,6 +3744,7 @@ bot_turret_think_loop()
|
|||||||
|
|
||||||
if ( !IsDefined( turret.bots ) )
|
if ( !IsDefined( turret.bots ) )
|
||||||
turret.bots = 0;
|
turret.bots = 0;
|
||||||
|
|
||||||
if ( turret.bots >= 2 )
|
if ( turret.bots >= 2 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -3702,6 +3790,7 @@ bot_turret_think()
|
|||||||
bot_box_think_loop( data )
|
bot_box_think_loop( data )
|
||||||
{
|
{
|
||||||
ret = "bot_check_box_think";
|
ret = "bot_check_box_think";
|
||||||
|
|
||||||
if ( data.first )
|
if ( data.first )
|
||||||
data.first = false;
|
data.first = false;
|
||||||
else
|
else
|
||||||
@ -3813,10 +3902,12 @@ bot_box_think()
|
|||||||
bot_watch_stuck_on_crate_loop()
|
bot_watch_stuck_on_crate_loop()
|
||||||
{
|
{
|
||||||
crates = getEntArray( "care_package", "targetname" );
|
crates = getEntArray( "care_package", "targetname" );
|
||||||
|
|
||||||
if ( crates.size == 0 )
|
if ( crates.size == 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
crate = undefined;
|
crate = undefined;
|
||||||
|
|
||||||
for ( i = crates.size - 1; i >= 0; i-- )
|
for ( i = crates.size - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
tempCrate = crates[i];
|
tempCrate = crates[i];
|
||||||
@ -3849,6 +3940,7 @@ bot_watch_stuck_on_crate_loop()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
radius = GetDvarFloat( "player_useRadius" );
|
radius = GetDvarFloat( "player_useRadius" );
|
||||||
|
|
||||||
if ( DistanceSquared( crate.origin, self.origin ) > radius * radius )
|
if ( DistanceSquared( crate.origin, self.origin ) > radius * radius )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -3883,6 +3975,7 @@ bot_crate_think_loop(data)
|
|||||||
{
|
{
|
||||||
myteam = self.pers[ "team" ];
|
myteam = self.pers[ "team" ];
|
||||||
ret = "crate_physics_done";
|
ret = "crate_physics_done";
|
||||||
|
|
||||||
if ( data.first )
|
if ( data.first )
|
||||||
data.first = false;
|
data.first = false;
|
||||||
else
|
else
|
||||||
@ -3890,6 +3983,7 @@ bot_crate_think_loop(data)
|
|||||||
|
|
||||||
crate = self.bot_stuck_on_carepackage;
|
crate = self.bot_stuck_on_carepackage;
|
||||||
self.bot_stuck_on_carepackage = undefined;
|
self.bot_stuck_on_carepackage = undefined;
|
||||||
|
|
||||||
if ( !isDefined( crate ) )
|
if ( !isDefined( crate ) )
|
||||||
{
|
{
|
||||||
if ( RandomInt( 100 ) < 20 && ret != "crate_physics_done" )
|
if ( RandomInt( 100 ) < 20 && ret != "crate_physics_done" )
|
||||||
@ -3908,12 +4002,14 @@ bot_crate_think_loop(data)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
crates = getEntArray( "care_package", "targetname" );
|
crates = getEntArray( "care_package", "targetname" );
|
||||||
|
|
||||||
if ( crates.size == 0 )
|
if ( crates.size == 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wantsClosest = randomint( 2 );
|
wantsClosest = randomint( 2 );
|
||||||
|
|
||||||
crate = undefined;
|
crate = undefined;
|
||||||
|
|
||||||
for ( i = crates.size - 1; i >= 0; i-- )
|
for ( i = crates.size - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
tempCrate = crates[i];
|
tempCrate = crates[i];
|
||||||
@ -3985,6 +4081,7 @@ bot_crate_think_loop(data)
|
|||||||
self BotFreezeControls( true );
|
self BotFreezeControls( true );
|
||||||
|
|
||||||
waitTime = 3.25;
|
waitTime = 3.25;
|
||||||
|
|
||||||
if ( isDefined( crate.owner ) && crate.owner == self )
|
if ( isDefined( crate.owner ) && crate.owner == self )
|
||||||
waitTime = 0.75;
|
waitTime = 0.75;
|
||||||
|
|
||||||
@ -4053,6 +4150,7 @@ doReloadCancel_loop()
|
|||||||
// check if got another weapon
|
// check if got another weapon
|
||||||
weaponslist = self GetWeaponsListPrimaries();
|
weaponslist = self GetWeaponsListPrimaries();
|
||||||
weap = "";
|
weap = "";
|
||||||
|
|
||||||
while ( weaponslist.size )
|
while ( weaponslist.size )
|
||||||
{
|
{
|
||||||
weapon = weaponslist[randomInt( weaponslist.size )];
|
weapon = weaponslist[randomInt( weaponslist.size )];
|
||||||
@ -4114,6 +4212,7 @@ bot_weapon_think_loop(data)
|
|||||||
|
|
||||||
curWeap = self GetCurrentWeapon();
|
curWeap = self GetCurrentWeapon();
|
||||||
hasTarget = self hasThreat();
|
hasTarget = self hasThreat();
|
||||||
|
|
||||||
if ( hasTarget )
|
if ( hasTarget )
|
||||||
{
|
{
|
||||||
threat = self getThreat();
|
threat = self getThreat();
|
||||||
@ -4123,6 +4222,7 @@ bot_weapon_think_loop(data)
|
|||||||
{
|
{
|
||||||
if ( curWeap != rocketAmmo )
|
if ( curWeap != rocketAmmo )
|
||||||
self thread ChangeToWeapon( rocketAmmo );
|
self thread ChangeToWeapon( rocketAmmo );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4156,6 +4256,7 @@ bot_weapon_think_loop(data)
|
|||||||
|
|
||||||
weaponslist = self getweaponslistall();
|
weaponslist = self getweaponslistall();
|
||||||
weap = "";
|
weap = "";
|
||||||
|
|
||||||
while ( weaponslist.size )
|
while ( weaponslist.size )
|
||||||
{
|
{
|
||||||
weapon = weaponslist[randomInt( weaponslist.size )];
|
weapon = weaponslist[randomInt( weaponslist.size )];
|
||||||
@ -4216,6 +4317,7 @@ bot_target_vehicle_loop()
|
|||||||
lockOnAmmo = self getLockonAmmo();
|
lockOnAmmo = self getLockonAmmo();
|
||||||
myEye = self GetEye();
|
myEye = self GetEye();
|
||||||
target = undefined;
|
target = undefined;
|
||||||
|
|
||||||
for ( i = targets.size - 1; i >= 0; i-- )
|
for ( i = targets.size - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
tempTarget = targets[i];
|
tempTarget = targets[i];
|
||||||
@ -4243,6 +4345,7 @@ bot_target_vehicle_loop()
|
|||||||
|
|
||||||
target = tempTarget;
|
target = tempTarget;
|
||||||
}
|
}
|
||||||
|
|
||||||
targets = undefined;
|
targets = undefined;
|
||||||
|
|
||||||
if ( !isDefined( target ) )
|
if ( !isDefined( target ) )
|
||||||
@ -4351,22 +4454,29 @@ getKillstreakTargetLocation()
|
|||||||
{
|
{
|
||||||
location = undefined;
|
location = undefined;
|
||||||
players = [];
|
players = [];
|
||||||
|
|
||||||
for ( i = level.players.size - 1; i >= 0; i-- )
|
for ( i = level.players.size - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
player = level.players[i];
|
player = level.players[i];
|
||||||
|
|
||||||
if ( player == self )
|
if ( player == self )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( !isDefined( player.team ) )
|
if ( !isDefined( player.team ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( level.teamBased && self.team == player.team )
|
if ( level.teamBased && self.team == player.team )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( player.sessionstate != "playing" )
|
if ( player.sessionstate != "playing" )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( !isReallyAlive( player ) )
|
if ( !isReallyAlive( player ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( player _hasPerk( "specialty_blindeye" ) )
|
if ( player _hasPerk( "specialty_blindeye" ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ( !bulletTracePassed( player.origin, player.origin + ( 0, 0, 2048 ), false, player ) && self.pers["bots"]["skill"]["base"] > 3 )
|
if ( !bulletTracePassed( player.origin, player.origin + ( 0, 0, 2048 ), false, player ) && self.pers["bots"]["skill"]["base"] > 3 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -4439,6 +4549,7 @@ bot_killstreak_think_loop(data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
curWeap = self GetCurrentWeapon();
|
curWeap = self GetCurrentWeapon();
|
||||||
|
|
||||||
if ( isSubStr( curWeap, "airdrop_" ) || isSubStr( curWeap, "deployable_" ) )
|
if ( isSubStr( curWeap, "airdrop_" ) || isSubStr( curWeap, "deployable_" ) )
|
||||||
self thread BotPressAttack( 0.05 );
|
self thread BotPressAttack( 0.05 );
|
||||||
|
|
||||||
@ -4480,6 +4591,7 @@ bot_killstreak_think_loop(data)
|
|||||||
curWeap = self GetLastWeapon();
|
curWeap = self GetLastWeapon();
|
||||||
|
|
||||||
lifeId = self.pers["killstreaks"][0].lifeId;
|
lifeId = self.pers["killstreaks"][0].lifeId;
|
||||||
|
|
||||||
if ( !isDefined( lifeId ) )
|
if ( !isDefined( lifeId ) )
|
||||||
lifeId = -1;
|
lifeId = -1;
|
||||||
|
|
||||||
@ -4525,27 +4637,32 @@ bot_killstreak_think_loop(data)
|
|||||||
placeNot = "place_sentry";
|
placeNot = "place_sentry";
|
||||||
cancelNot = "cancel_sentry";
|
cancelNot = "cancel_sentry";
|
||||||
distCheck = 1000 * 1000;
|
distCheck = 1000 * 1000;
|
||||||
|
|
||||||
switch ( streakName )
|
switch ( streakName )
|
||||||
{
|
{
|
||||||
case "sam_turret":
|
case "sam_turret":
|
||||||
forwardTrace = bulletTrace( myEye, myEye + ( 0, 0, 1024 ), false, self );
|
forwardTrace = bulletTrace( myEye, myEye + ( 0, 0, 1024 ), false, self );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "remote_mg_turret":
|
case "remote_mg_turret":
|
||||||
placeNot = "place_turret";
|
placeNot = "place_turret";
|
||||||
cancelNot = "cancel_turret";
|
cancelNot = "cancel_turret";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "ims":
|
case "ims":
|
||||||
forwardTrace = bulletTrace( myEye, myEye + AnglesToForward( angles ) * 128, false, self );
|
forwardTrace = bulletTrace( myEye, myEye + AnglesToForward( angles ) * 128, false, self );
|
||||||
placeNot = "place_ims";
|
placeNot = "place_ims";
|
||||||
cancelNot = "cancel_ims";
|
cancelNot = "cancel_ims";
|
||||||
distCheck = 100 * 100;
|
distCheck = 100 * 100;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "remote_uav":
|
case "remote_uav":
|
||||||
forwardTrace = bulletTrace( myEye, myEye + AnglesToForward( angles ) * 128, false, self );
|
forwardTrace = bulletTrace( myEye, myEye + AnglesToForward( angles ) * 128, false, self );
|
||||||
placeNot = "place_carryRemoteUAV";
|
placeNot = "place_carryRemoteUAV";
|
||||||
cancelNot = "cancel_carryRemoteUAV";
|
cancelNot = "cancel_carryRemoteUAV";
|
||||||
distCheck = 100 * 100;
|
distCheck = 100 * 100;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "remote_tank":
|
case "remote_tank":
|
||||||
forwardTrace = bulletTrace( myEye, myEye + AnglesToForward( angles ) * 128, false, self );
|
forwardTrace = bulletTrace( myEye, myEye + AnglesToForward( angles ) * 128, false, self );
|
||||||
placeNot = "place_tank";
|
placeNot = "place_tank";
|
||||||
@ -4643,10 +4760,12 @@ bot_killstreak_think_loop(data)
|
|||||||
|
|
||||||
location = undefined;
|
location = undefined;
|
||||||
directionYaw = undefined;
|
directionYaw = undefined;
|
||||||
|
|
||||||
if ( streakName == "osprey_gunner" )
|
if ( streakName == "osprey_gunner" )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.chopper ) )
|
if ( isDefined( level.chopper ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( currentActiveVehicleCount() >= maxVehiclesAllowed() || level.fauxVehicleCount + 1 >= maxVehiclesAllowed() )
|
if ( currentActiveVehicleCount() >= maxVehiclesAllowed() || level.fauxVehicleCount + 1 >= maxVehiclesAllowed() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -4781,6 +4900,7 @@ bot_killstreak_think_loop(data)
|
|||||||
if ( streakName == "littlebird_flock" || streakName == "helicopter" || streakName == "helicopter_flares" || streakName == "littlebird_support" )
|
if ( streakName == "littlebird_flock" || streakName == "helicopter" || streakName == "helicopter_flares" || streakName == "littlebird_support" )
|
||||||
{
|
{
|
||||||
numIncomingVehicles = 1;
|
numIncomingVehicles = 1;
|
||||||
|
|
||||||
if ( streakName == "littlebird_flock" )
|
if ( streakName == "littlebird_flock" )
|
||||||
numIncomingVehicles = 5;
|
numIncomingVehicles = 5;
|
||||||
|
|
||||||
@ -4796,6 +4916,7 @@ bot_killstreak_think_loop(data)
|
|||||||
|
|
||||||
location = undefined;
|
location = undefined;
|
||||||
directionYaw = undefined;
|
directionYaw = undefined;
|
||||||
|
|
||||||
switch ( streakName )
|
switch ( streakName )
|
||||||
{
|
{
|
||||||
case "littlebird_flock":
|
case "littlebird_flock":
|
||||||
@ -4806,6 +4927,7 @@ bot_killstreak_think_loop(data)
|
|||||||
|
|
||||||
if ( !isDefined( location ) )
|
if ( !isDefined( location ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case "helicopter":
|
case "helicopter":
|
||||||
case "helicopter_flares":
|
case "helicopter_flares":
|
||||||
case "littlebird_support":
|
case "littlebird_support":
|
||||||
@ -4875,6 +4997,7 @@ bot_dom_spawn_kill_think_loop()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
flag = undefined;
|
flag = undefined;
|
||||||
|
|
||||||
for ( i = 0; i < level.flags.size; i++ )
|
for ( i = 0; i < level.flags.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam )
|
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam )
|
||||||
@ -4951,6 +5074,7 @@ bot_dom_def_think_loop()
|
|||||||
{
|
{
|
||||||
myTeam = self.pers[ "team" ];
|
myTeam = self.pers[ "team" ];
|
||||||
flag = undefined;
|
flag = undefined;
|
||||||
|
|
||||||
for ( i = 0; i < level.flags.size; i++ )
|
for ( i = 0; i < level.flags.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() != myTeam )
|
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() != myTeam )
|
||||||
@ -5061,6 +5185,7 @@ bot_dom_cap_think_loop()
|
|||||||
|
|
||||||
flag = undefined;
|
flag = undefined;
|
||||||
flags = [];
|
flags = [];
|
||||||
|
|
||||||
for ( i = 0; i < level.flags.size; i++ )
|
for ( i = 0; i < level.flags.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam )
|
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam )
|
||||||
@ -5202,6 +5327,7 @@ bot_hq_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5393,6 +5519,7 @@ bot_sab_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
self.bot_lock_goal = false;
|
self.bot_lock_goal = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -5406,6 +5533,7 @@ bot_sab_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
self.bot_lock_goal = false;
|
self.bot_lock_goal = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -5427,6 +5555,7 @@ bot_sab_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5485,6 +5614,7 @@ bot_sab_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5512,7 +5642,8 @@ bot_sab_loop()
|
|||||||
if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 )
|
if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 )
|
||||||
{
|
{
|
||||||
wait 4;
|
wait 4;
|
||||||
self notify("bot_inc_bots"); site.bots--;
|
self notify( "bot_inc_bots" );
|
||||||
|
site.bots--;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5522,6 +5653,7 @@ bot_sab_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
self.bot_lock_goal = false;
|
self.bot_lock_goal = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -5543,6 +5675,7 @@ bot_sab_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5662,6 +5795,7 @@ bot_sd_defenders_loop(data)
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5671,6 +5805,7 @@ bot_sd_defenders_loop(data)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
sites = [];
|
sites = [];
|
||||||
|
|
||||||
for ( i = 0; i < level.bombZones.size; i++ )
|
for ( i = 0; i < level.bombZones.size; i++ )
|
||||||
{
|
{
|
||||||
sites[sites.size] = level.bombZones[i];
|
sites[sites.size] = level.bombZones[i];
|
||||||
@ -5742,6 +5877,7 @@ bot_sd_defenders_loop(data)
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5890,6 +6026,7 @@ bot_sd_attackers_loop(data)
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5913,6 +6050,7 @@ bot_sd_attackers_loop(data)
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5937,6 +6075,7 @@ bot_sd_attackers_loop(data)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
sites = [];
|
sites = [];
|
||||||
|
|
||||||
for ( i = 0; i < level.bombZones.size; i++ )
|
for ( i = 0; i < level.bombZones.size; i++ )
|
||||||
{
|
{
|
||||||
sites[sites.size] = level.bombZones[i];
|
sites[sites.size] = level.bombZones[i];
|
||||||
@ -6034,7 +6173,8 @@ bot_cap_loop()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( theirflag maps\mp\gametypes\_gameobjects::isHome() && randomint( 100 ) < 50 )
|
if ( theirflag maps\mp\gametypes\_gameobjects::isHome() && randomint( 100 ) < 50 )
|
||||||
{ //take their flag
|
{
|
||||||
|
//take their flag
|
||||||
self bot_cap_get_flag( theirflag );
|
self bot_cap_get_flag( theirflag );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -6060,6 +6200,7 @@ bot_cap_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6069,7 +6210,8 @@ bot_cap_loop()
|
|||||||
if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 )
|
if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 )
|
||||||
{
|
{
|
||||||
wait 4;
|
wait 4;
|
||||||
self notify("bot_inc_bots"); theirzone.bots--;
|
self notify( "bot_inc_bots" );
|
||||||
|
theirzone.bots--;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6096,8 +6238,10 @@ bot_cap_loop()
|
|||||||
evt = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
evt = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
if ( evt != "new_goal" )
|
if ( evt != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
self.bot_lock_goal = false;
|
self.bot_lock_goal = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -6178,6 +6322,7 @@ bot_cap_get_flag(flag)
|
|||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
self.bot_lock_goal = false;
|
self.bot_lock_goal = false;
|
||||||
|
|
||||||
if ( evt != "new_goal" )
|
if ( evt != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
}
|
}
|
||||||
@ -6248,6 +6393,7 @@ bot_dem_attackers_loop()
|
|||||||
bombs = [];//sites with bombs
|
bombs = [];//sites with bombs
|
||||||
sites = [];//sites to bomb at
|
sites = [];//sites to bomb at
|
||||||
bombed = 0;//exploded sites
|
bombed = 0;//exploded sites
|
||||||
|
|
||||||
for ( i = 0; i < level.bombZones.size; i++ )
|
for ( i = 0; i < level.bombZones.size; i++ )
|
||||||
{
|
{
|
||||||
bomb = level.bombZones[i];
|
bomb = level.bombZones[i];
|
||||||
@ -6278,9 +6424,11 @@ bot_dem_attackers_loop()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
timeleft = maps\mp\gametypes\_gamelogic::getTimeRemaining() / 1000;
|
timeleft = maps\mp\gametypes\_gamelogic::getTimeRemaining() / 1000;
|
||||||
|
|
||||||
shouldLet = ( game["teamScores"][myteam] > game["teamScores"][otherTeam] && timeleft < 90 && bombed == 1 );
|
shouldLet = ( game["teamScores"][myteam] > game["teamScores"][otherTeam] && timeleft < 90 && bombed == 1 );
|
||||||
|
|
||||||
//spawnkill conditions
|
//spawnkill conditions
|
||||||
//if we have bombed one site or 1 bomb is planted with lots of time left, spawn kill
|
//if we have bombed one site or 1 bomb is planted with lots of time left, spawn kill
|
||||||
//if we want the other team to win for overtime and they do not need to defuse, spawn kill
|
//if we want the other team to win for overtime and they do not need to defuse, spawn kill
|
||||||
@ -6305,6 +6453,7 @@ bot_dem_attackers_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6396,6 +6545,7 @@ bot_dem_attackers_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6468,6 +6618,7 @@ bot_dem_defenders_loop()
|
|||||||
bombs = [];//sites with bombs
|
bombs = [];//sites with bombs
|
||||||
sites = [];//sites to bomb at
|
sites = [];//sites to bomb at
|
||||||
bombed = 0;//exploded sites
|
bombed = 0;//exploded sites
|
||||||
|
|
||||||
for ( i = 0; i < level.bombZones.size; i++ )
|
for ( i = 0; i < level.bombZones.size; i++ )
|
||||||
{
|
{
|
||||||
bomb = level.bombZones[i];
|
bomb = level.bombZones[i];
|
||||||
@ -6498,6 +6649,7 @@ bot_dem_defenders_loop()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
timeleft = maps\mp\gametypes\_gamelogic::getTimeRemaining() / 1000;
|
timeleft = maps\mp\gametypes\_gamelogic::getTimeRemaining() / 1000;
|
||||||
|
|
||||||
shouldLet = ( timeleft < 60 && ( ( bombed == 0 && bombs.size != 2 ) || ( game["teamScores"][myteam] > game["teamScores"][otherTeam] && bombed == 1 ) ) && randomInt( 100 ) < 98 );
|
shouldLet = ( timeleft < 60 && ( ( bombed == 0 && bombs.size != 2 ) || ( game["teamScores"][myteam] > game["teamScores"][otherTeam] && bombed == 1 ) ) && randomInt( 100 ) < 98 );
|
||||||
@ -6526,6 +6678,7 @@ bot_dem_defenders_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6620,6 +6773,7 @@ bot_dem_defenders_loop()
|
|||||||
|
|
||||||
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ doHostCheck()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
result = false;
|
result = false;
|
||||||
|
|
||||||
if ( getDvar( "bots_main_firstIsHost" ) != "0" )
|
if ( getDvar( "bots_main_firstIsHost" ) != "0" )
|
||||||
{
|
{
|
||||||
printLn( "WARNING: bots_main_firstIsHost is enabled" );
|
printLn( "WARNING: bots_main_firstIsHost is enabled" );
|
||||||
@ -42,6 +43,7 @@ doHostCheck()
|
|||||||
}
|
}
|
||||||
|
|
||||||
DvarGUID = getDvar( "bots_main_GUIDs" );
|
DvarGUID = getDvar( "bots_main_GUIDs" );
|
||||||
|
|
||||||
if ( DvarGUID != "" )
|
if ( DvarGUID != "" )
|
||||||
{
|
{
|
||||||
guids = strtok( DvarGUID, "," );
|
guids = strtok( DvarGUID, "," );
|
||||||
@ -183,6 +185,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" );
|
||||||
}
|
}
|
||||||
@ -222,6 +225,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;
|
||||||
@ -631,6 +635,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;
|
||||||
|
|
||||||
@ -738,6 +743,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
|
||||||
@ -762,6 +768,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];
|
||||||
@ -775,6 +782,7 @@ tokenizeLine(line, tok)
|
|||||||
|
|
||||||
token += c;
|
token += c;
|
||||||
}
|
}
|
||||||
|
|
||||||
tokens[tokens.size] = token;
|
tokens[tokens.size] = token;
|
||||||
|
|
||||||
return tokens;
|
return tokens;
|
||||||
@ -802,6 +810,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] );
|
||||||
|
|
||||||
@ -809,6 +818,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, " " );
|
||||||
@ -816,6 +826,7 @@ parseTokensIntoWaypoint(tokens)
|
|||||||
}
|
}
|
||||||
|
|
||||||
javStr = tokens[4];
|
javStr = tokens[4];
|
||||||
|
|
||||||
if ( isDefined( javStr ) && javStr != "" )
|
if ( isDefined( javStr ) && javStr != "" )
|
||||||
{
|
{
|
||||||
javToks = strtok( javStr, " " );
|
javToks = strtok( javStr, " " );
|
||||||
@ -919,60 +930,79 @@ load_waypoints()
|
|||||||
case "mp_dome":
|
case "mp_dome":
|
||||||
level.waypoints = maps\mp\bots\waypoints\dome::Dome();
|
level.waypoints = maps\mp\bots\waypoints\dome::Dome();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_seatown":
|
case "mp_seatown":
|
||||||
level.waypoints = maps\mp\bots\waypoints\seatown::Seatown();
|
level.waypoints = maps\mp\bots\waypoints\seatown::Seatown();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_plaza2":
|
case "mp_plaza2":
|
||||||
level.waypoints = maps\mp\bots\waypoints\arkaden::Arkaden();
|
level.waypoints = maps\mp\bots\waypoints\arkaden::Arkaden();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_mogadishu":
|
case "mp_mogadishu":
|
||||||
level.waypoints = maps\mp\bots\waypoints\bakaara::Bakaara();
|
level.waypoints = maps\mp\bots\waypoints\bakaara::Bakaara();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_highrise":
|
case "mp_highrise":
|
||||||
level.waypoints = maps\mp\bots\waypoints\highrise::Highrise();
|
level.waypoints = maps\mp\bots\waypoints\highrise::Highrise();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_paris":
|
case "mp_paris":
|
||||||
level.waypoints = maps\mp\bots\waypoints\resistance::Resistance();
|
level.waypoints = maps\mp\bots\waypoints\resistance::Resistance();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_hardhat":
|
case "mp_hardhat":
|
||||||
level.waypoints = maps\mp\bots\waypoints\hardhat::Hardhat();
|
level.waypoints = maps\mp\bots\waypoints\hardhat::Hardhat();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_bootleg":
|
case "mp_bootleg":
|
||||||
level.waypoints = maps\mp\bots\waypoints\bootleg::Bootleg();
|
level.waypoints = maps\mp\bots\waypoints\bootleg::Bootleg();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_exchange":
|
case "mp_exchange":
|
||||||
level.waypoints = maps\mp\bots\waypoints\downturn::Downturn();
|
level.waypoints = maps\mp\bots\waypoints\downturn::Downturn();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_carbon":
|
case "mp_carbon":
|
||||||
level.waypoints = maps\mp\bots\waypoints\carbon::Carbon();
|
level.waypoints = maps\mp\bots\waypoints\carbon::Carbon();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_underground":
|
case "mp_underground":
|
||||||
level.waypoints = maps\mp\bots\waypoints\underground::Underground();
|
level.waypoints = maps\mp\bots\waypoints\underground::Underground();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_bravo":
|
case "mp_bravo":
|
||||||
level.waypoints = maps\mp\bots\waypoints\mission::Mission();
|
level.waypoints = maps\mp\bots\waypoints\mission::Mission();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_rust":
|
case "mp_rust":
|
||||||
level.waypoints = maps\mp\bots\waypoints\rust::Rust();
|
level.waypoints = maps\mp\bots\waypoints\rust::Rust();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_hardhat":
|
case "mp_hardhat":
|
||||||
level.waypoints = maps\mp\bots\waypoints\hardhat::Hardhat();
|
level.waypoints = maps\mp\bots\waypoints\hardhat::Hardhat();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_alpha":
|
case "mp_alpha":
|
||||||
level.waypoints = maps\mp\bots\waypoints\lockdown::Lockdown();
|
level.waypoints = maps\mp\bots\waypoints\lockdown::Lockdown();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_village":
|
case "mp_village":
|
||||||
level.waypoints = maps\mp\bots\waypoints\village::Village();
|
level.waypoints = maps\mp\bots\waypoints\village::Village();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_six_ss":
|
case "mp_six_ss":
|
||||||
level.waypoints = maps\mp\bots\waypoints\vortex::Vortex();
|
level.waypoints = maps\mp\bots\waypoints\vortex::Vortex();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_interchange":
|
case "mp_interchange":
|
||||||
level.waypoints = maps\mp\bots\waypoints\interchange::Interchange();
|
level.waypoints = maps\mp\bots\waypoints\interchange::Interchange();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "mp_test":
|
case "mp_test":
|
||||||
level.waypoints = maps\mp\bots\waypoints\testmap::TestMap();
|
level.waypoints = maps\mp\bots\waypoints\testmap::TestMap();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
maps\mp\bots\waypoints\_custom_map::main( mapname );
|
maps\mp\bots\waypoints\_custom_map::main( mapname );
|
||||||
break;
|
break;
|
||||||
@ -1008,6 +1038,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]];
|
||||||
@ -1050,6 +1081,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]];
|
||||||
@ -1071,6 +1103,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];
|
||||||
@ -1088,6 +1121,7 @@ getWaypointsOfType(type)
|
|||||||
|
|
||||||
answer[answer.size] = i;
|
answer[answer.size] = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1111,6 +1145,7 @@ getMapName(mapname)
|
|||||||
{
|
{
|
||||||
case "mp_dome":
|
case "mp_dome":
|
||||||
return "Dome";
|
return "Dome";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return mapname;
|
return mapname;
|
||||||
}
|
}
|
||||||
@ -1128,6 +1163,7 @@ getGoodMapAmount()
|
|||||||
return 8;
|
return 8;
|
||||||
else
|
else
|
||||||
return 5;
|
return 5;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
@ -1139,37 +1175,122 @@ getGoodMapAmount()
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1180,6 +1301,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];
|
||||||
@ -1220,9 +1342,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;
|
||||||
@ -1236,6 +1360,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];
|
||||||
@ -1246,6 +1371,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];
|
||||||
@ -1367,18 +1493,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1418,6 +1549,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;
|
||||||
@ -1646,6 +1778,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;
|
||||||
|
|
||||||
@ -1667,6 +1800,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;
|
||||||
|
|
||||||
@ -1690,10 +1824,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 );
|
||||||
|
|
||||||
@ -1702,10 +1838,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 );
|
||||||
|
|
||||||
@ -1764,9 +1902,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
|
||||||
|
|
||||||
@ -1783,14 +1923,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 )
|
||||||
@ -1831,10 +1974,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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1846,15 +1991,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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1868,19 +2017,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;
|
||||||
@ -2563,12 +2716,14 @@ botGiveLoadout( team, class, allowCopycat, setPrimarySpawnWeapon ) // setPrimary
|
|||||||
defaultKillstreak3 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 2, 3 );
|
defaultKillstreak3 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 2, 3 );
|
||||||
playerData = "defenseStreaks";
|
playerData = "defenseStreaks";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "specialist":
|
case "specialist":
|
||||||
defaultKillstreak1 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 1, 1 );
|
defaultKillstreak1 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 1, 1 );
|
||||||
defaultKillstreak2 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 1, 2 );
|
defaultKillstreak2 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 1, 2 );
|
||||||
defaultKillstreak3 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 1, 3 );
|
defaultKillstreak3 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 1, 3 );
|
||||||
playerData = "specialistStreaks";
|
playerData = "specialistStreaks";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
defaultKillstreak1 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 0, 1 );
|
defaultKillstreak1 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 0, 1 );
|
||||||
defaultKillstreak2 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 0, 2 );
|
defaultKillstreak2 = maps\mp\gametypes\_class::table_getKillstreak( level.classTableName, 0, 2 );
|
||||||
@ -2760,12 +2915,14 @@ botGiveLoadout( team, class, allowCopycat, setPrimarySpawnWeapon ) // setPrimary
|
|||||||
{
|
{
|
||||||
case "none":
|
case "none":
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "trophy_mp":
|
case "trophy_mp":
|
||||||
case "specialty_portable_radar":
|
case "specialty_portable_radar":
|
||||||
case "specialty_scrambler":
|
case "specialty_scrambler":
|
||||||
case "specialty_tacticalinsertion":
|
case "specialty_tacticalinsertion":
|
||||||
self givePerk( offhandSecondaryWeapon, 0 );
|
self givePerk( offhandSecondaryWeapon, 0 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
self giveweapon( offhandSecondaryWeapon );
|
self giveweapon( offhandSecondaryWeapon );
|
||||||
|
|
||||||
@ -2824,6 +2981,7 @@ loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3, loa
|
|||||||
loadoutPerk3 = maps\mp\perks\_perks::validatePerk( 3, loadoutPerk3 );
|
loadoutPerk3 = maps\mp\perks\_perks::validatePerk( 3, loadoutPerk3 );
|
||||||
|
|
||||||
loadoutPrimaryBuff = maps\mp\perks\_perks::validatePerk( undefined, loadoutPrimaryBuff );
|
loadoutPrimaryBuff = maps\mp\perks\_perks::validatePerk( undefined, loadoutPrimaryBuff );
|
||||||
|
|
||||||
if ( loadoutPerk2 == "specialty_twoprimaries" )
|
if ( loadoutPerk2 == "specialty_twoprimaries" )
|
||||||
loadoutSecondaryBuff = maps\mp\perks\_perks::validatePerk( undefined, loadoutSecondaryBuff );
|
loadoutSecondaryBuff = maps\mp\perks\_perks::validatePerk( undefined, loadoutSecondaryBuff );
|
||||||
|
|
||||||
@ -2832,15 +2990,19 @@ loadoutAllPerks( loadoutEquipment, loadoutPerk1, loadoutPerk2, loadoutPerk3, loa
|
|||||||
self.loadoutPerk3 = loadoutPerk3;
|
self.loadoutPerk3 = loadoutPerk3;
|
||||||
self.loadoutPerkEquipment = loadoutEquipment;
|
self.loadoutPerkEquipment = loadoutEquipment;
|
||||||
self.loadoutPrimaryBuff = loadoutPrimaryBuff;
|
self.loadoutPrimaryBuff = loadoutPrimaryBuff;
|
||||||
|
|
||||||
if ( loadoutPerk2 == "specialty_twoprimaries" )
|
if ( loadoutPerk2 == "specialty_twoprimaries" )
|
||||||
self.loadoutSecondaryBuff = loadoutSecondaryBuff;
|
self.loadoutSecondaryBuff = loadoutSecondaryBuff;
|
||||||
|
|
||||||
if ( loadoutEquipment != "specialty_null" )
|
if ( loadoutEquipment != "specialty_null" )
|
||||||
self givePerk( loadoutEquipment, true );
|
self givePerk( loadoutEquipment, true );
|
||||||
|
|
||||||
if ( loadoutPerk1 != "specialty_null" )
|
if ( loadoutPerk1 != "specialty_null" )
|
||||||
self givePerk( loadoutPerk1, true );
|
self givePerk( loadoutPerk1, true );
|
||||||
|
|
||||||
if ( loadoutPerk2 != "specialty_null" )
|
if ( loadoutPerk2 != "specialty_null" )
|
||||||
self givePerk( loadoutPerk2, true );
|
self givePerk( loadoutPerk2, true );
|
||||||
|
|
||||||
if ( loadoutPerk3 != "specialty_null" )
|
if ( loadoutPerk3 != "specialty_null" )
|
||||||
self givePerk( loadoutPerk3, true );
|
self givePerk( loadoutPerk3, true );
|
||||||
|
|
||||||
@ -2893,9 +3055,11 @@ playerModelForWeapon( weapon, secondary )
|
|||||||
case "weapon_smg":
|
case "weapon_smg":
|
||||||
[[ game[team + "_model"]["SMG"] ]]();
|
[[ game[team + "_model"]["SMG"] ]]();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "weapon_assault":
|
case "weapon_assault":
|
||||||
[[ game[team + "_model"]["ASSAULT"] ]]();
|
[[ game[team + "_model"]["ASSAULT"] ]]();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "weapon_sniper":
|
case "weapon_sniper":
|
||||||
if ( level.environment != "" && game[team] != "opforce_africa" && isDefined( self.pers["bots"]["unlocks"]["ghillie"] ) && self.pers["bots"]["unlocks"]["ghillie"] )
|
if ( level.environment != "" && game[team] != "opforce_africa" && isDefined( self.pers["bots"]["unlocks"]["ghillie"] ) && self.pers["bots"]["unlocks"]["ghillie"] )
|
||||||
[[ game[team + "_model"]["GHILLIE"] ]]();
|
[[ game[team + "_model"]["GHILLIE"] ]]();
|
||||||
@ -2903,15 +3067,19 @@ playerModelForWeapon( weapon, secondary )
|
|||||||
[[ game[team + "_model"]["SNIPER"] ]]();
|
[[ game[team + "_model"]["SNIPER"] ]]();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "weapon_lmg":
|
case "weapon_lmg":
|
||||||
[[ game[team + "_model"]["LMG"] ]]();
|
[[ game[team + "_model"]["LMG"] ]]();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "weapon_riot":
|
case "weapon_riot":
|
||||||
[[ game[team + "_model"]["RIOT"] ]]();
|
[[ game[team + "_model"]["RIOT"] ]]();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "weapon_shotgun":
|
case "weapon_shotgun":
|
||||||
[[ game[team + "_model"]["SHOTGUN"] ]]();
|
[[ game[team + "_model"]["SHOTGUN"] ]]();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
[[ game[team + "_model"]["ASSAULT"] ]]();
|
[[ game[team + "_model"]["ASSAULT"] ]]();
|
||||||
break;
|
break;
|
||||||
|
@ -119,9 +119,11 @@ watchPlayerOpenMenu()
|
|||||||
self endon ( "bots_kill_menu" );
|
self endon ( "bots_kill_menu" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "bots_open_menu", "+actionslot 1" );
|
self notifyOnPlayerCommand( "bots_open_menu", "+actionslot 1" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "bots_open_menu" );
|
self waittill( "bots_open_menu" );
|
||||||
|
|
||||||
if ( !self.menuOpen )
|
if ( !self.menuOpen )
|
||||||
{
|
{
|
||||||
self playLocalSound( "mouse_click" );
|
self playLocalSound( "mouse_click" );
|
||||||
@ -130,11 +132,13 @@ watchPlayerOpenMenu()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
self playLocalSound( "mouse_click" );
|
self playLocalSound( "mouse_click" );
|
||||||
|
|
||||||
if ( self.SubMenu != "Main" )
|
if ( self.SubMenu != "Main" )
|
||||||
self ExitSub();
|
self ExitSub();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self ExitMenu();
|
self ExitMenu();
|
||||||
|
|
||||||
if ( !gameFlag( "prematch_done" ) || level.gameEnded )
|
if ( !gameFlag( "prematch_done" ) || level.gameEnded )
|
||||||
self freezeControls( true );
|
self freezeControls( true );
|
||||||
else
|
else
|
||||||
@ -150,12 +154,15 @@ MenuSelect()
|
|||||||
self endon ( "bots_kill_menu" );
|
self endon ( "bots_kill_menu" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "bots_select", "+gostand" );
|
self notifyOnPlayerCommand( "bots_select", "+gostand" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "bots_select" );
|
self waittill( "bots_select" );
|
||||||
|
|
||||||
if ( self.MenuOpen )
|
if ( self.MenuOpen )
|
||||||
{
|
{
|
||||||
self playLocalSound( "mouse_click" );
|
self playLocalSound( "mouse_click" );
|
||||||
|
|
||||||
if ( self.SubMenu == "Main" )
|
if ( self.SubMenu == "Main" )
|
||||||
self thread [[self.Option["Function"][self.SubMenu][self.Curs["Main"]["X"]]]]( self.Option["Arg1"][self.SubMenu][self.Curs["Main"]["X"]], self.Option["Arg2"][self.SubMenu][self.Curs["Main"]["X"]] );
|
self thread [[self.Option["Function"][self.SubMenu][self.Curs["Main"]["X"]]]]( self.Option["Arg1"][self.SubMenu][self.Curs["Main"]["X"]], self.Option["Arg2"][self.SubMenu][self.Curs["Main"]["X"]] );
|
||||||
else
|
else
|
||||||
@ -170,9 +177,11 @@ LeftMenu()
|
|||||||
self endon ( "bots_kill_menu" );
|
self endon ( "bots_kill_menu" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "bots_left", "+moveleft" );
|
self notifyOnPlayerCommand( "bots_left", "+moveleft" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "bots_left" );
|
self waittill( "bots_left" );
|
||||||
|
|
||||||
if ( self.MenuOpen && self.SubMenu == "Main" )
|
if ( self.MenuOpen && self.SubMenu == "Main" )
|
||||||
{
|
{
|
||||||
self playLocalSound( "mouse_over" );
|
self playLocalSound( "mouse_over" );
|
||||||
@ -192,9 +201,11 @@ RightMenu()
|
|||||||
self endon ( "bots_kill_menu" );
|
self endon ( "bots_kill_menu" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "bots_right", "+moveright" );
|
self notifyOnPlayerCommand( "bots_right", "+moveright" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "bots_right" );
|
self waittill( "bots_right" );
|
||||||
|
|
||||||
if ( self.MenuOpen && self.SubMenu == "Main" )
|
if ( self.MenuOpen && self.SubMenu == "Main" )
|
||||||
{
|
{
|
||||||
self playLocalSound( "mouse_over" );
|
self playLocalSound( "mouse_over" );
|
||||||
@ -214,9 +225,11 @@ UpMenu()
|
|||||||
self endon ( "bots_kill_menu" );
|
self endon ( "bots_kill_menu" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "bots_up", "+forward" );
|
self notifyOnPlayerCommand( "bots_up", "+forward" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "bots_up" );
|
self waittill( "bots_up" );
|
||||||
|
|
||||||
if ( self.MenuOpen && self.SubMenu != "Main" )
|
if ( self.MenuOpen && self.SubMenu != "Main" )
|
||||||
{
|
{
|
||||||
self playLocalSound( "mouse_over" );
|
self playLocalSound( "mouse_over" );
|
||||||
@ -236,9 +249,11 @@ DownMenu()
|
|||||||
self endon ( "bots_kill_menu" );
|
self endon ( "bots_kill_menu" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "bots_down", "+back" );
|
self notifyOnPlayerCommand( "bots_down", "+back" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "bots_down" );
|
self waittill( "bots_down" );
|
||||||
|
|
||||||
if ( self.MenuOpen && self.SubMenu != "Main" )
|
if ( self.MenuOpen && self.SubMenu != "Main" )
|
||||||
{
|
{
|
||||||
self playLocalSound( "mouse_over" );
|
self playLocalSound( "mouse_over" );
|
||||||
@ -287,6 +302,7 @@ OpenSub(menu, menu2)
|
|||||||
self.MenuText[i] = self createfontstring( "default", 1.6 );
|
self.MenuText[i] = self createfontstring( "default", 1.6 );
|
||||||
self.MenuText[i] setpoint( "CENTER", "CENTER", -300 + ( i * 100 ), -226 );
|
self.MenuText[i] setpoint( "CENTER", "CENTER", -300 + ( i * 100 ), -226 );
|
||||||
self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] );
|
self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] );
|
||||||
|
|
||||||
if ( logOldi )
|
if ( logOldi )
|
||||||
self.oldi = i;
|
self.oldi = i;
|
||||||
|
|
||||||
@ -296,6 +312,7 @@ OpenSub(menu, menu2)
|
|||||||
x = i - self.oldi;
|
x = i - self.oldi;
|
||||||
self.MenuText[i] setpoint( "CENTER", "CENTER", ( ( ( -300 ) - ( i * 100 ) ) + ( i * 100 ) ) + ( x * 100 ), -196 );
|
self.MenuText[i] setpoint( "CENTER", "CENTER", ( ( ( -300 ) - ( i * 100 ) ) + ( i * 100 ) ) + ( x * 100 ), -196 );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.MenuText[i].alpha = 1;
|
self.MenuText[i].alpha = 1;
|
||||||
self.MenuText[i].sort = 999;
|
self.MenuText[i].sort = 999;
|
||||||
}
|
}
|
||||||
@ -336,6 +353,7 @@ OpenSub(menu, menu2)
|
|||||||
CursMove( direction )
|
CursMove( direction )
|
||||||
{
|
{
|
||||||
self notify( "scrolled" );
|
self notify( "scrolled" );
|
||||||
|
|
||||||
if ( self.SubMenu == "Main" )
|
if ( self.SubMenu == "Main" )
|
||||||
{
|
{
|
||||||
self.Menu["X"]["Scroller"].x = self.MenuText[self.Curs["Main"]["X"]].x;
|
self.Menu["X"]["Scroller"].x = self.MenuText[self.Curs["Main"]["X"]].x;
|
||||||
@ -413,8 +431,10 @@ ShowOptionOn(variable)
|
|||||||
self.MenuText[self.Curs[self.SubMenu][variable]].fontscale = 2.0;
|
self.MenuText[self.Curs[self.SubMenu][variable]].fontscale = 2.0;
|
||||||
//self.MenuText[self.Curs[self.SubMenu][variable]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255);
|
//self.MenuText[self.Curs[self.SubMenu][variable]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255);
|
||||||
color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 );
|
color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 );
|
||||||
|
|
||||||
if ( int( time * 4 ) % 2 )
|
if ( int( time * 4 ) % 2 )
|
||||||
color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 );
|
color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 );
|
||||||
|
|
||||||
self.MenuText[self.Curs[self.SubMenu][variable]].color = color;
|
self.MenuText[self.Curs[self.SubMenu][variable]].color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,8 +454,10 @@ ShowOptionOn(variable)
|
|||||||
self.MenuTextY[self.Curs[self.SubMenu][variable]].fontscale = 2.0;
|
self.MenuTextY[self.Curs[self.SubMenu][variable]].fontscale = 2.0;
|
||||||
//self.MenuTextY[self.Curs[self.SubMenu][variable]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255);
|
//self.MenuTextY[self.Curs[self.SubMenu][variable]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255);
|
||||||
color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 );
|
color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 );
|
||||||
|
|
||||||
if ( int( time * 4 ) % 2 )
|
if ( int( time * 4 ) % 2 )
|
||||||
color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 );
|
color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 );
|
||||||
|
|
||||||
self.MenuTextY[self.Curs[self.SubMenu][variable]].color = color;
|
self.MenuTextY[self.Curs[self.SubMenu][variable]].color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -566,34 +588,43 @@ AddOptions()
|
|||||||
self AddMenu( "man_bots", 6, "Kick all bots", ::man_bots, "kick", getBotArray().size );
|
self AddMenu( "man_bots", 6, "Kick all bots", ::man_bots, "kick", getBotArray().size );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_manage_fill_kick" );
|
_tempDvar = getDvarInt( "bots_manage_fill_kick" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "man_bots", 7, "Toggle auto bot kicking: " + _temp, ::man_bots, "autokick", _tempDvar );
|
self AddMenu( "man_bots", 7, "Toggle auto bot kicking: " + _temp, ::man_bots, "autokick", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_manage_fill_mode" );
|
_tempDvar = getDvarInt( "bots_manage_fill_mode" );
|
||||||
|
|
||||||
switch ( _tempDvar )
|
switch ( _tempDvar )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
_temp = "everyone";
|
_temp = "everyone";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
_temp = "just bots";
|
_temp = "just bots";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
_temp = "everyone, adjust to map";
|
_temp = "everyone, adjust to map";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
_temp = "just bots, adjust to map";
|
_temp = "just bots, adjust to map";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
_temp = "bots used as team balance";
|
_temp = "bots used as team balance";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
_temp = "out of range";
|
_temp = "out of range";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self AddMenu( "man_bots", 8, "Change bot_fill_mode: " + _temp, ::man_bots, "fillmode", _tempDvar );
|
self AddMenu( "man_bots", 8, "Change bot_fill_mode: " + _temp, ::man_bots, "fillmode", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_manage_fill" );
|
_tempDvar = getDvarInt( "bots_manage_fill" );
|
||||||
@ -601,10 +632,12 @@ AddOptions()
|
|||||||
self AddMenu( "man_bots", 10, "Decrease bots to keep in-game: " + _tempDvar, ::man_bots, "filldown", _tempDvar );
|
self AddMenu( "man_bots", 10, "Decrease bots to keep in-game: " + _tempDvar, ::man_bots, "filldown", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_manage_fill_spec" );
|
_tempDvar = getDvarInt( "bots_manage_fill_spec" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "man_bots", 11, "Count players for fill on spectator: " + _temp, ::man_bots, "fillspec", _tempDvar );
|
self AddMenu( "man_bots", 11, "Count players for fill on spectator: " + _temp, ::man_bots, "fillspec", _tempDvar );
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -620,56 +653,72 @@ AddOptions()
|
|||||||
self AddMenu( "man_team", 2, "Decrease bots to be on axis team: " + _tempDvar, ::bot_teams, "teamdown", _tempDvar );
|
self AddMenu( "man_team", 2, "Decrease bots to be on axis team: " + _tempDvar, ::bot_teams, "teamdown", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_team_force" );
|
_tempDvar = getDvarInt( "bots_team_force" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "man_team", 3, "Toggle forcing bots on team: " + _temp, ::bot_teams, "teamforce", _tempDvar );
|
self AddMenu( "man_team", 3, "Toggle forcing bots on team: " + _temp, ::bot_teams, "teamforce", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_team_mode" );
|
_tempDvar = getDvarInt( "bots_team_mode" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "only bots";
|
_temp = "only bots";
|
||||||
else
|
else
|
||||||
_temp = "everyone";
|
_temp = "everyone";
|
||||||
|
|
||||||
self AddMenu( "man_team", 4, "Toggle bot_team_bot: " + _temp, ::bot_teams, "teammode", _tempDvar );
|
self AddMenu( "man_team", 4, "Toggle bot_team_bot: " + _temp, ::bot_teams, "teammode", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getdvarint( "bots_skill" );
|
_tempDvar = getdvarint( "bots_skill" );
|
||||||
|
|
||||||
switch ( _tempDvar )
|
switch ( _tempDvar )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
_temp = "random for all";
|
_temp = "random for all";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
_temp = "too easy";
|
_temp = "too easy";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
_temp = "easy";
|
_temp = "easy";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
_temp = "easy-medium";
|
_temp = "easy-medium";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
_temp = "medium";
|
_temp = "medium";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
_temp = "hard";
|
_temp = "hard";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
_temp = "very hard";
|
_temp = "very hard";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
_temp = "hardest";
|
_temp = "hardest";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
_temp = "custom";
|
_temp = "custom";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9:
|
case 9:
|
||||||
_temp = "complete random";
|
_temp = "complete random";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
_temp = "out of range";
|
_temp = "out of range";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self AddMenu( "man_team", 5, "Change bot difficulty: " + _temp, ::bot_teams, "skill", _tempDvar );
|
self AddMenu( "man_team", 5, "Change bot difficulty: " + _temp, ::bot_teams, "skill", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_skill_axis_hard" );
|
_tempDvar = getDvarInt( "bots_skill_axis_hard" );
|
||||||
@ -694,94 +743,120 @@ AddOptions()
|
|||||||
self AddBack( "set1", "Main" );
|
self AddBack( "set1", "Main" );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_loadout_reasonable" );
|
_tempDvar = getDvarInt( "bots_loadout_reasonable" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 0, "Bots use only good class setups: " + _temp, ::bot_func, "reasonable", _tempDvar );
|
self AddMenu( "set1", 0, "Bots use only good class setups: " + _temp, ::bot_func, "reasonable", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_loadout_allow_op" );
|
_tempDvar = getDvarInt( "bots_loadout_allow_op" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 1, "Bots can use op and annoying class setups: " + _temp, ::bot_func, "op", _tempDvar );
|
self AddMenu( "set1", 1, "Bots can use op and annoying class setups: " + _temp, ::bot_func, "op", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_move" );
|
_tempDvar = getDvarInt( "bots_play_move" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 2, "Bots can move: " + _temp, ::bot_func, "move", _tempDvar );
|
self AddMenu( "set1", 2, "Bots can move: " + _temp, ::bot_func, "move", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_knife" );
|
_tempDvar = getDvarInt( "bots_play_knife" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 3, "Bots can knife: " + _temp, ::bot_func, "knife", _tempDvar );
|
self AddMenu( "set1", 3, "Bots can knife: " + _temp, ::bot_func, "knife", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_fire" );
|
_tempDvar = getDvarInt( "bots_play_fire" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 4, "Bots can fire: " + _temp, ::bot_func, "fire", _tempDvar );
|
self AddMenu( "set1", 4, "Bots can fire: " + _temp, ::bot_func, "fire", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_nade" );
|
_tempDvar = getDvarInt( "bots_play_nade" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 5, "Bots can nade: " + _temp, ::bot_func, "nade", _tempDvar );
|
self AddMenu( "set1", 5, "Bots can nade: " + _temp, ::bot_func, "nade", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_take_carepackages" );
|
_tempDvar = getDvarInt( "bots_play_take_carepackages" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 6, "Bots can take carepackages: " + _temp, ::bot_func, "care", _tempDvar );
|
self AddMenu( "set1", 6, "Bots can take carepackages: " + _temp, ::bot_func, "care", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_obj" );
|
_tempDvar = getDvarInt( "bots_play_obj" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 7, "Bots play the objective: " + _temp, ::bot_func, "obj", _tempDvar );
|
self AddMenu( "set1", 7, "Bots play the objective: " + _temp, ::bot_func, "obj", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_camp" );
|
_tempDvar = getDvarInt( "bots_play_camp" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 8, "Bots can camp: " + _temp, ::bot_func, "camp", _tempDvar );
|
self AddMenu( "set1", 8, "Bots can camp: " + _temp, ::bot_func, "camp", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_jumpdrop" );
|
_tempDvar = getDvarInt( "bots_play_jumpdrop" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 9, "Bots can jump and dropshot: " + _temp, ::bot_func, "jump", _tempDvar );
|
self AddMenu( "set1", 9, "Bots can jump and dropshot: " + _temp, ::bot_func, "jump", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_target_other" );
|
_tempDvar = getDvarInt( "bots_play_target_other" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 10, "Bots can target other script objects: " + _temp, ::bot_func, "targetother", _tempDvar );
|
self AddMenu( "set1", 10, "Bots can target other script objects: " + _temp, ::bot_func, "targetother", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_killstreak" );
|
_tempDvar = getDvarInt( "bots_play_killstreak" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 11, "Bots can use killstreaks: " + _temp, ::bot_func, "killstreak", _tempDvar );
|
self AddMenu( "set1", 11, "Bots can use killstreaks: " + _temp, ::bot_func, "killstreak", _tempDvar );
|
||||||
|
|
||||||
_tempDvar = getDvarInt( "bots_play_ads" );
|
_tempDvar = getDvarInt( "bots_play_ads" );
|
||||||
|
|
||||||
if ( _tempDvar )
|
if ( _tempDvar )
|
||||||
_temp = "true";
|
_temp = "true";
|
||||||
else
|
else
|
||||||
_temp = "false";
|
_temp = "false";
|
||||||
|
|
||||||
self AddMenu( "set1", 12, "Bots can ads: " + _temp, ::bot_func, "ads", _tempDvar );
|
self AddMenu( "set1", 12, "Bots can ads: " + _temp, ::bot_func, "ads", _tempDvar );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -793,50 +868,62 @@ bot_func(a, b)
|
|||||||
setDvar( "bots_loadout_reasonable", !b );
|
setDvar( "bots_loadout_reasonable", !b );
|
||||||
self iPrintln( "Bots using reasonable setups: " + !b );
|
self iPrintln( "Bots using reasonable setups: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "op":
|
case "op":
|
||||||
setDvar( "bots_loadout_allow_op", !b );
|
setDvar( "bots_loadout_allow_op", !b );
|
||||||
self iPrintln( "Bots using op setups: " + !b );
|
self iPrintln( "Bots using op setups: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "move":
|
case "move":
|
||||||
setDvar( "bots_play_move", !b );
|
setDvar( "bots_play_move", !b );
|
||||||
self iPrintln( "Bots move: " + !b );
|
self iPrintln( "Bots move: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "knife":
|
case "knife":
|
||||||
setDvar( "bots_play_knife", !b );
|
setDvar( "bots_play_knife", !b );
|
||||||
self iPrintln( "Bots knife: " + !b );
|
self iPrintln( "Bots knife: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "fire":
|
case "fire":
|
||||||
setDvar( "bots_play_fire", !b );
|
setDvar( "bots_play_fire", !b );
|
||||||
self iPrintln( "Bots fire: " + !b );
|
self iPrintln( "Bots fire: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "nade":
|
case "nade":
|
||||||
setDvar( "bots_play_nade", !b );
|
setDvar( "bots_play_nade", !b );
|
||||||
self iPrintln( "Bots nade: " + !b );
|
self iPrintln( "Bots nade: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "care":
|
case "care":
|
||||||
setDvar( "bots_play_take_carepackages", !b );
|
setDvar( "bots_play_take_carepackages", !b );
|
||||||
self iPrintln( "Bots take carepackages: " + !b );
|
self iPrintln( "Bots take carepackages: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "obj":
|
case "obj":
|
||||||
setDvar( "bots_play_obj", !b );
|
setDvar( "bots_play_obj", !b );
|
||||||
self iPrintln( "Bots play the obj: " + !b );
|
self iPrintln( "Bots play the obj: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "camp":
|
case "camp":
|
||||||
setDvar( "bots_play_camp", !b );
|
setDvar( "bots_play_camp", !b );
|
||||||
self iPrintln( "Bots camp: " + !b );
|
self iPrintln( "Bots camp: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "jump":
|
case "jump":
|
||||||
setDvar( "bots_play_jumpdrop", !b );
|
setDvar( "bots_play_jumpdrop", !b );
|
||||||
self iPrintln( "Bots jump: " + !b );
|
self iPrintln( "Bots jump: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "targetother":
|
case "targetother":
|
||||||
setDvar( "bots_play_target_other", !b );
|
setDvar( "bots_play_target_other", !b );
|
||||||
self iPrintln( "Bots target other: " + !b );
|
self iPrintln( "Bots target other: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "killstreak":
|
case "killstreak":
|
||||||
setDvar( "bots_play_killstreak", !b );
|
setDvar( "bots_play_killstreak", !b );
|
||||||
self iPrintln( "Bots use killstreaks: " + !b );
|
self iPrintln( "Bots use killstreaks: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "ads":
|
case "ads":
|
||||||
setDvar( "bots_play_ads", !b );
|
setDvar( "bots_play_ads", !b );
|
||||||
self iPrintln( "Bots ads: " + !b );
|
self iPrintln( "Bots ads: " + !b );
|
||||||
@ -855,36 +942,45 @@ bot_teams(a, b)
|
|||||||
setdvar( "bots_team", "allies" );
|
setdvar( "bots_team", "allies" );
|
||||||
self iPrintlnBold( "Changed bot team to allies." );
|
self iPrintlnBold( "Changed bot team to allies." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "allies":
|
case "allies":
|
||||||
setdvar( "bots_team", "axis" );
|
setdvar( "bots_team", "axis" );
|
||||||
self iPrintlnBold( "Changed bot team to axis." );
|
self iPrintlnBold( "Changed bot team to axis." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "axis":
|
case "axis":
|
||||||
setdvar( "bots_team", "custom" );
|
setdvar( "bots_team", "custom" );
|
||||||
self iPrintlnBold( "Changed bot team to custom." );
|
self iPrintlnBold( "Changed bot team to custom." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
setdvar( "bots_team", "autoassign" );
|
setdvar( "bots_team", "autoassign" );
|
||||||
self iPrintlnBold( "Changed bot team to autoassign." );
|
self iPrintlnBold( "Changed bot team to autoassign." );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "teamup":
|
case "teamup":
|
||||||
setdvar( "bots_team_amount", b + 1 );
|
setdvar( "bots_team_amount", b + 1 );
|
||||||
self iPrintln( ( b + 1 ) + " bot(s) will try to be on axis team." );
|
self iPrintln( ( b + 1 ) + " bot(s) will try to be on axis team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "teamdown":
|
case "teamdown":
|
||||||
setdvar( "bots_team_amount", b - 1 );
|
setdvar( "bots_team_amount", b - 1 );
|
||||||
self iPrintln( ( b - 1 ) + " bot(s) will try to be on axis team." );
|
self iPrintln( ( b - 1 ) + " bot(s) will try to be on axis team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "teamforce":
|
case "teamforce":
|
||||||
setDvar( "bots_team_force", !b );
|
setDvar( "bots_team_force", !b );
|
||||||
self iPrintln( "Forcing bots to team: " + !b );
|
self iPrintln( "Forcing bots to team: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "teammode":
|
case "teammode":
|
||||||
setDvar( "bots_team_mode", !b );
|
setDvar( "bots_team_mode", !b );
|
||||||
self iPrintln( "Only count bots on team: " + !b );
|
self iPrintln( "Only count bots on team: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "skill":
|
case "skill":
|
||||||
switch ( b )
|
switch ( b )
|
||||||
{
|
{
|
||||||
@ -892,72 +988,90 @@ bot_teams(a, b)
|
|||||||
self iPrintlnBold( "Changed bot skill to easy." );
|
self iPrintlnBold( "Changed bot skill to easy." );
|
||||||
setDvar( "bots_skill", 1 );
|
setDvar( "bots_skill", 1 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
self iPrintlnBold( "Changed bot skill to easy-med." );
|
self iPrintlnBold( "Changed bot skill to easy-med." );
|
||||||
setDvar( "bots_skill", 2 );
|
setDvar( "bots_skill", 2 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
self iPrintlnBold( "Changed bot skill to medium." );
|
self iPrintlnBold( "Changed bot skill to medium." );
|
||||||
setDvar( "bots_skill", 3 );
|
setDvar( "bots_skill", 3 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
self iPrintlnBold( "Changed bot skill to med-hard." );
|
self iPrintlnBold( "Changed bot skill to med-hard." );
|
||||||
setDvar( "bots_skill", 4 );
|
setDvar( "bots_skill", 4 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
self iPrintlnBold( "Changed bot skill to hard." );
|
self iPrintlnBold( "Changed bot skill to hard." );
|
||||||
setDvar( "bots_skill", 5 );
|
setDvar( "bots_skill", 5 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
self iPrintlnBold( "Changed bot skill to very hard." );
|
self iPrintlnBold( "Changed bot skill to very hard." );
|
||||||
setDvar( "bots_skill", 6 );
|
setDvar( "bots_skill", 6 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
self iPrintlnBold( "Changed bot skill to hardest." );
|
self iPrintlnBold( "Changed bot skill to hardest." );
|
||||||
setDvar( "bots_skill", 7 );
|
setDvar( "bots_skill", 7 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
self iPrintlnBold( "Changed bot skill to custom. Base is easy." );
|
self iPrintlnBold( "Changed bot skill to custom. Base is easy." );
|
||||||
setDvar( "bots_skill", 8 );
|
setDvar( "bots_skill", 8 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
self iPrintlnBold( "Changed bot skill to complete random. Takes effect at restart." );
|
self iPrintlnBold( "Changed bot skill to complete random. Takes effect at restart." );
|
||||||
setDvar( "bots_skill", 9 );
|
setDvar( "bots_skill", 9 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
self iPrintlnBold( "Changed bot skill to random. Takes effect at restart." );
|
self iPrintlnBold( "Changed bot skill to random. Takes effect at restart." );
|
||||||
setDvar( "bots_skill", 0 );
|
setDvar( "bots_skill", 0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "axishardup":
|
case "axishardup":
|
||||||
setdvar( "bots_skill_axis_hard", ( b + 1 ) );
|
setdvar( "bots_skill_axis_hard", ( b + 1 ) );
|
||||||
self iPrintln( ( ( b + 1 ) ) + " hard bots will be on axis team." );
|
self iPrintln( ( ( b + 1 ) ) + " hard bots will be on axis team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "axisharddown":
|
case "axisharddown":
|
||||||
setdvar( "bots_skill_axis_hard", ( b - 1 ) );
|
setdvar( "bots_skill_axis_hard", ( b - 1 ) );
|
||||||
self iPrintln( ( ( b - 1 ) ) + " hard bots will be on axis team." );
|
self iPrintln( ( ( b - 1 ) ) + " hard bots will be on axis team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "axismedup":
|
case "axismedup":
|
||||||
setdvar( "bots_skill_axis_med", ( b + 1 ) );
|
setdvar( "bots_skill_axis_med", ( b + 1 ) );
|
||||||
self iPrintln( ( ( b + 1 ) ) + " med bots will be on axis team." );
|
self iPrintln( ( ( b + 1 ) ) + " med bots will be on axis team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "axismeddown":
|
case "axismeddown":
|
||||||
setdvar( "bots_skill_axis_med", ( b - 1 ) );
|
setdvar( "bots_skill_axis_med", ( b - 1 ) );
|
||||||
self iPrintln( ( ( b - 1 ) ) + " med bots will be on axis team." );
|
self iPrintln( ( ( b - 1 ) ) + " med bots will be on axis team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "allieshardup":
|
case "allieshardup":
|
||||||
setdvar( "bots_skill_allies_hard", ( b + 1 ) );
|
setdvar( "bots_skill_allies_hard", ( b + 1 ) );
|
||||||
self iPrintln( ( ( b + 1 ) ) + " hard bots will be on allies team." );
|
self iPrintln( ( ( b + 1 ) ) + " hard bots will be on allies team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "alliesharddown":
|
case "alliesharddown":
|
||||||
setdvar( "bots_skill_allies_hard", ( b - 1 ) );
|
setdvar( "bots_skill_allies_hard", ( b - 1 ) );
|
||||||
self iPrintln( ( ( b - 1 ) ) + " hard bots will be on allies team." );
|
self iPrintln( ( ( b - 1 ) ) + " hard bots will be on allies team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "alliesmedup":
|
case "alliesmedup":
|
||||||
setdvar( "bots_skill_allies_med", ( b + 1 ) );
|
setdvar( "bots_skill_allies_med", ( b + 1 ) );
|
||||||
self iPrintln( ( ( b + 1 ) ) + " med bots will be on allies team." );
|
self iPrintln( ( ( b + 1 ) ) + " med bots will be on allies team." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "alliesmeddown":
|
case "alliesmeddown":
|
||||||
setdvar( "bots_skill_allies_med", ( b - 1 ) );
|
setdvar( "bots_skill_allies_med", ( b - 1 ) );
|
||||||
self iPrintln( ( ( b - 1 ) ) + " med bots will be on allies team." );
|
self iPrintln( ( ( b - 1 ) ) + " med bots will be on allies team." );
|
||||||
@ -971,6 +1085,7 @@ man_bots(a, b)
|
|||||||
{
|
{
|
||||||
case "add":
|
case "add":
|
||||||
setdvar( "bots_manage_add", b );
|
setdvar( "bots_manage_add", b );
|
||||||
|
|
||||||
if ( b == 1 )
|
if ( b == 1 )
|
||||||
{
|
{
|
||||||
self iPrintln( "Adding " + b + " bot." );
|
self iPrintln( "Adding " + b + " bot." );
|
||||||
@ -979,13 +1094,16 @@ man_bots(a, b)
|
|||||||
{
|
{
|
||||||
self iPrintln( "Adding " + b + " bots." );
|
self iPrintln( "Adding " + b + " bots." );
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "kick":
|
case "kick":
|
||||||
result = false;
|
result = false;
|
||||||
|
|
||||||
for ( i = 0; i < b; i++ )
|
for ( i = 0; i < b; i++ )
|
||||||
{
|
{
|
||||||
tempBot = random( getBotArray() );
|
tempBot = random( getBotArray() );
|
||||||
|
|
||||||
if ( isDefined( tempBot ) )
|
if ( isDefined( tempBot ) )
|
||||||
{
|
{
|
||||||
kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" );
|
kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" );
|
||||||
@ -997,11 +1115,14 @@ man_bots(a, b)
|
|||||||
|
|
||||||
if ( !result )
|
if ( !result )
|
||||||
self iPrintln( "No bots to kick" );
|
self iPrintln( "No bots to kick" );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "autokick":
|
case "autokick":
|
||||||
setDvar( "bots_manage_fill_kick", !b );
|
setDvar( "bots_manage_fill_kick", !b );
|
||||||
self iPrintln( "Kicking bots when bots_fill is exceeded: " + !b );
|
self iPrintln( "Kicking bots when bots_fill is exceeded: " + !b );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "fillmode":
|
case "fillmode":
|
||||||
switch ( b )
|
switch ( b )
|
||||||
{
|
{
|
||||||
@ -1009,32 +1130,40 @@ man_bots(a, b)
|
|||||||
setdvar( "bots_manage_fill_mode", 1 );
|
setdvar( "bots_manage_fill_mode", 1 );
|
||||||
self iPrintln( "bot_fill will now count only bots." );
|
self iPrintln( "bot_fill will now count only bots." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
setdvar( "bots_manage_fill_mode", 2 );
|
setdvar( "bots_manage_fill_mode", 2 );
|
||||||
self iPrintln( "bot_fill will now count everyone, adjusting to map." );
|
self iPrintln( "bot_fill will now count everyone, adjusting to map." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
setdvar( "bots_manage_fill_mode", 3 );
|
setdvar( "bots_manage_fill_mode", 3 );
|
||||||
self iPrintln( "bot_fill will now count only bots, adjusting to map." );
|
self iPrintln( "bot_fill will now count only bots, adjusting to map." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
setdvar( "bots_manage_fill_mode", 4 );
|
setdvar( "bots_manage_fill_mode", 4 );
|
||||||
self iPrintln( "bot_fill will now use bots as team balance." );
|
self iPrintln( "bot_fill will now use bots as team balance." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
setdvar( "bots_manage_fill_mode", 0 );
|
setdvar( "bots_manage_fill_mode", 0 );
|
||||||
self iPrintln( "bot_fill will now count everyone." );
|
self iPrintln( "bot_fill will now count everyone." );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "fillup":
|
case "fillup":
|
||||||
setdvar( "bots_manage_fill", b + 1 );
|
setdvar( "bots_manage_fill", b + 1 );
|
||||||
self iPrintln( "Increased to maintain " + ( b + 1 ) + " bot(s)." );
|
self iPrintln( "Increased to maintain " + ( b + 1 ) + " bot(s)." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "filldown":
|
case "filldown":
|
||||||
setdvar( "bots_manage_fill", b - 1 );
|
setdvar( "bots_manage_fill", b - 1 );
|
||||||
self iPrintln( "Decreased to maintain " + ( b - 1 ) + " bot(s)." );
|
self iPrintln( "Decreased to maintain " + ( b - 1 ) + " bot(s)." );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "fillspec":
|
case "fillspec":
|
||||||
setDvar( "bots_manage_fill_spec", !b );
|
setDvar( "bots_manage_fill_spec", !b );
|
||||||
self iPrintln( "Count players on spectator for bots_fill: " + !b );
|
self iPrintln( "Count players on spectator for bots_fill: " + !b );
|
||||||
|
@ -65,6 +65,7 @@ init()
|
|||||||
onPlayerSpawned()
|
onPlayerSpawned()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
@ -131,6 +132,7 @@ watchAstarCommand()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "astar", "+gostand" );
|
self notifyOnPlayerCommand( "astar", "+gostand" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "astar" );
|
self waittill( "astar" );
|
||||||
@ -281,6 +283,7 @@ updateWaypointsStats()
|
|||||||
self initHudElem4();
|
self initHudElem4();
|
||||||
|
|
||||||
intTimer = 0;
|
intTimer = 0;
|
||||||
|
|
||||||
for ( time = 0;; time += 0.05 )
|
for ( time = 0;; time += 0.05 )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
@ -345,6 +348,7 @@ updateWaypointsStats()
|
|||||||
wpToLink setText( level.wpToLink );
|
wpToLink setText( level.wpToLink );
|
||||||
|
|
||||||
infotext.x = infotext.x - 2;
|
infotext.x = infotext.x - 2;
|
||||||
|
|
||||||
if ( infotext.x <= -800 )
|
if ( infotext.x <= -800 )
|
||||||
infotext.x = 800;
|
infotext.x = 800;
|
||||||
|
|
||||||
@ -387,6 +391,7 @@ watchLoadWaypointsCommand()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "[{+actionslot 5}]", "+actionslot 5" );
|
self notifyOnPlayerCommand( "[{+actionslot 5}]", "+actionslot 5" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "[{+actionslot 5}]" );
|
self waittill( "[{+actionslot 5}]" );
|
||||||
@ -400,6 +405,7 @@ watchAddWaypointCommand()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "[{+smoke}]", "+smoke" );
|
self notifyOnPlayerCommand( "[{+smoke}]", "+smoke" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "[{+smoke}]" );
|
self waittill( "[{+smoke}]" );
|
||||||
@ -413,9 +419,11 @@ watchAutoLinkCommand()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "[{+frag}]", "+frag" );
|
self notifyOnPlayerCommand( "[{+frag}]", "+frag" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "[{+frag}]" );
|
self waittill( "[{+frag}]" );
|
||||||
|
|
||||||
if ( level.autoLink )
|
if ( level.autoLink )
|
||||||
{
|
{
|
||||||
self iPrintlnBold( "Auto link disabled" );
|
self iPrintlnBold( "Auto link disabled" );
|
||||||
@ -437,6 +445,7 @@ watchLinkWaypointCommand()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "[{+melee_zoom}]", "+melee_zoom" );
|
self notifyOnPlayerCommand( "[{+melee_zoom}]", "+melee_zoom" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "[{+melee_zoom}]" );
|
self waittill( "[{+melee_zoom}]" );
|
||||||
@ -450,6 +459,7 @@ watchUnlinkWaypointCommand()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "[{+reload}]", "+reload" );
|
self notifyOnPlayerCommand( "[{+reload}]", "+reload" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "[{+reload}]" );
|
self waittill( "[{+reload}]" );
|
||||||
@ -463,6 +473,7 @@ watchDeleteWaypointCommand()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "[{+actionslot 3}]", "+actionslot 3" );
|
self notifyOnPlayerCommand( "[{+actionslot 3}]", "+actionslot 3" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "[{+actionslot 3}]" );
|
self waittill( "[{+actionslot 3}]" );
|
||||||
@ -476,6 +487,7 @@ watchDeleteAllWaypointsCommand()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "[{+actionslot 4}]", "+actionslot 4" );
|
self notifyOnPlayerCommand( "[{+actionslot 4}]", "+actionslot 4" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "[{+actionslot 4}]" );
|
self waittill( "[{+actionslot 4}]" );
|
||||||
@ -489,6 +501,7 @@ watchSaveWaypointsCommand()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self notifyOnPlayerCommand( "[{+actionslot 1}]", "+actionslot 1" );
|
self notifyOnPlayerCommand( "[{+actionslot 1}]", "+actionslot 1" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "[{+actionslot 1}]" );
|
self waittill( "[{+actionslot 1}]" );
|
||||||
@ -501,21 +514,25 @@ watchSaveWaypointsCommand()
|
|||||||
mpnm = getMapName( getdvar( "mapname" ) );
|
mpnm = getMapName( getdvar( "mapname" ) );
|
||||||
logprint( "\n\n" + mpnm + "()\n{\n/*" );
|
logprint( "\n\n" + mpnm + "()\n{\n/*" );
|
||||||
logprint( "*/waypoints = [];\n/*" );
|
logprint( "*/waypoints = [];\n/*" );
|
||||||
|
|
||||||
for ( i = 0; i < level.waypointCount; i++ )
|
for ( i = 0; i < level.waypointCount; i++ )
|
||||||
{
|
{
|
||||||
logprint( "*/waypoints[" + i + "] = spawnstruct();\n/*" );
|
logprint( "*/waypoints[" + i + "] = spawnstruct();\n/*" );
|
||||||
logprint( "*/waypoints[" + i + "].origin = " + level.waypoints[i].origin + ";\n/*" );
|
logprint( "*/waypoints[" + i + "].origin = " + level.waypoints[i].origin + ";\n/*" );
|
||||||
logprint( "*/waypoints[" + i + "].type = \"" + level.waypoints[i].type + "\";\n/*" );
|
logprint( "*/waypoints[" + i + "].type = \"" + level.waypoints[i].type + "\";\n/*" );
|
||||||
|
|
||||||
for ( c = 0; c < level.waypoints[i].children.size; c++ )
|
for ( c = 0; c < level.waypoints[i].children.size; c++ )
|
||||||
{
|
{
|
||||||
logprint( "*/waypoints[" + i + "].children[" + c + "] = " + level.waypoints[i].children[c] + ";\n/*" );
|
logprint( "*/waypoints[" + i + "].children[" + c + "] = " + level.waypoints[i].children[c] + ";\n/*" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isDefined( level.waypoints[i].angles ) && ( level.waypoints[i].type == "claymore" || level.waypoints[i].type == "tube" || ( level.waypoints[i].type == "crouch" && level.waypoints[i].children.size == 1 ) || level.waypoints[i].type == "climb" || level.waypoints[i].type == "grenade" ) )
|
if ( isDefined( level.waypoints[i].angles ) && ( level.waypoints[i].type == "claymore" || level.waypoints[i].type == "tube" || ( level.waypoints[i].type == "crouch" && level.waypoints[i].children.size == 1 ) || level.waypoints[i].type == "climb" || level.waypoints[i].type == "grenade" ) )
|
||||||
logprint( "*/waypoints[" + i + "].angles = " + level.waypoints[i].angles + ";\n/*" );
|
logprint( "*/waypoints[" + i + "].angles = " + level.waypoints[i].angles + ";\n/*" );
|
||||||
|
|
||||||
if ( isDefined( level.waypoints[i].jav_point ) && level.waypoints[i].type == "javelin" )
|
if ( isDefined( level.waypoints[i].jav_point ) && level.waypoints[i].type == "javelin" )
|
||||||
logprint( "*/waypoints[" + i + "].jav_point = " + level.waypoints[i].jav_point + ";\n/*" );
|
logprint( "*/waypoints[" + i + "].jav_point = " + level.waypoints[i].jav_point + ";\n/*" );
|
||||||
}
|
}
|
||||||
|
|
||||||
logprint( "*/return waypoints;\n}\n\n\n\n" );
|
logprint( "*/return waypoints;\n}\n\n\n\n" );
|
||||||
|
|
||||||
filename = "waypoints/" + getdvar( "mapname" ) + "_wp.csv";
|
filename = "waypoints/" + getdvar( "mapname" ) + "_wp.csv";
|
||||||
@ -538,6 +555,7 @@ watchSaveWaypointsCommand()
|
|||||||
if ( h < wp.children.size - 1 )
|
if ( h < wp.children.size - 1 )
|
||||||
str += " ";
|
str += " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
str += "," + wp.type + ",";
|
str += "," + wp.type + ",";
|
||||||
|
|
||||||
if ( isDefined( wp.angles ) )
|
if ( isDefined( wp.angles ) )
|
||||||
@ -553,6 +571,7 @@ watchSaveWaypointsCommand()
|
|||||||
PrintLn( str );
|
PrintLn( str );
|
||||||
//fileWrite(filename, str+"\n", "append");
|
//fileWrite(filename, str+"\n", "append");
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintLn( "\n\n\n\n\n\n" );
|
PrintLn( "\n\n\n\n\n\n" );
|
||||||
|
|
||||||
self iprintln( "Saved!!! to " + filename );
|
self iprintln( "Saved!!! to " + filename );
|
||||||
@ -679,6 +698,7 @@ LinkWaypoint(nwp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
weGood = true;
|
weGood = true;
|
||||||
|
|
||||||
for ( i = level.waypoints[level.wpToLink].children.size - 1; i >= 0; i-- )
|
for ( i = level.waypoints[level.wpToLink].children.size - 1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
child = level.waypoints[level.wpToLink].children[i];
|
child = level.waypoints[level.wpToLink].children[i];
|
||||||
@ -753,10 +773,12 @@ DeleteWaypoint(nwp)
|
|||||||
level.waypoints[entry] = level.waypoints[entry + 1];
|
level.waypoints[entry] = level.waypoints[entry + 1];
|
||||||
entry++;
|
entry++;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.waypoints[entry] = undefined;
|
level.waypoints[entry] = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
level.waypointCount--;
|
level.waypointCount--;
|
||||||
|
|
||||||
self iprintln( "DelWp " + nwp );
|
self iprintln( "DelWp " + nwp );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user