array indexing spacing format

This commit is contained in:
ineed bots 2023-12-22 01:38:44 -06:00
parent 8ec1385d18
commit 26c982e3db
8 changed files with 1052 additions and 1052 deletions

View File

@ -215,9 +215,9 @@ init()
setDvar( "bots_play_aim", true ); setDvar( "bots_play_aim", true );
} }
if ( !isDefined( game["botWarfare"] ) ) if ( !isDefined( game[ "botWarfare" ] ) )
{ {
game["botWarfare"] = true; game[ "botWarfare" ] = true;
} }
level.defuseObject = undefined; level.defuseObject = undefined;
@ -245,33 +245,33 @@ init()
level.bots = []; level.bots = [];
level.bots_fullautoguns = []; level.bots_fullautoguns = [];
level.bots_fullautoguns["aa12"] = true; level.bots_fullautoguns[ "aa12" ] = true;
level.bots_fullautoguns["ak47"] = true; level.bots_fullautoguns[ "ak47" ] = true;
level.bots_fullautoguns["aug"] = true; level.bots_fullautoguns[ "aug" ] = true;
level.bots_fullautoguns["fn2000"] = true; level.bots_fullautoguns[ "fn2000" ] = true;
level.bots_fullautoguns["glock"] = true; level.bots_fullautoguns[ "glock" ] = true;
level.bots_fullautoguns["kriss"] = true; level.bots_fullautoguns[ "kriss" ] = true;
level.bots_fullautoguns["m4"] = true; level.bots_fullautoguns[ "m4" ] = true;
level.bots_fullautoguns["m240"] = true; level.bots_fullautoguns[ "m240" ] = true;
level.bots_fullautoguns["masada"] = true; level.bots_fullautoguns[ "masada" ] = true;
level.bots_fullautoguns["mg4"] = true; level.bots_fullautoguns[ "mg4" ] = true;
level.bots_fullautoguns["mp5k"] = true; level.bots_fullautoguns[ "mp5k" ] = true;
level.bots_fullautoguns["p90"] = true; level.bots_fullautoguns[ "p90" ] = true;
level.bots_fullautoguns["pp2000"] = true; level.bots_fullautoguns[ "pp2000" ] = true;
level.bots_fullautoguns["rpd"] = true; level.bots_fullautoguns[ "rpd" ] = true;
level.bots_fullautoguns["sa80"] = true; level.bots_fullautoguns[ "sa80" ] = true;
level.bots_fullautoguns["scar"] = true; level.bots_fullautoguns[ "scar" ] = true;
level.bots_fullautoguns["tavor"] = true; level.bots_fullautoguns[ "tavor" ] = true;
level.bots_fullautoguns["tmp"] = true; level.bots_fullautoguns[ "tmp" ] = true;
level.bots_fullautoguns["ump45"] = true; level.bots_fullautoguns[ "ump45" ] = true;
level.bots_fullautoguns["uzi"] = true; level.bots_fullautoguns[ "uzi" ] = true;
level.bots_fullautoguns["ac130"] = true; level.bots_fullautoguns[ "ac130" ] = true;
level.bots_fullautoguns["heli"] = true; level.bots_fullautoguns[ "heli" ] = true;
level.bots_fullautoguns["ak47classic"] = true; level.bots_fullautoguns[ "ak47classic" ] = true;
level.bots_fullautoguns["ak74u"] = true; level.bots_fullautoguns[ "ak74u" ] = true;
level.bots_fullautoguns["peacekeeper"] = true; level.bots_fullautoguns[ "peacekeeper" ] = true;
level thread fixGamemodes(); level thread fixGamemodes();
@ -307,7 +307,7 @@ handleBots()
for ( i = 0; i < bots.size; i++ ) for ( i = 0; i < bots.size; i++ )
{ {
kick( bots[i] getEntityNumber(), "EXE_PLAYERKICKED" ); kick( bots[ i ] getEntityNumber(), "EXE_PLAYERKICKED" );
} }
} }
@ -322,7 +322,7 @@ onPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon,
self maps\mp\bots\_bot_script::onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset ); self maps\mp\bots\_bot_script::onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset );
} }
self [[level.prevCallbackPlayerDamage]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset ); self [[ level.prevCallbackPlayerDamage ]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset );
} }
/* /*
@ -336,7 +336,7 @@ onPlayerKilled( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sH
self maps\mp\bots\_bot_script::onKilled( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration ); self maps\mp\bots\_bot_script::onKilled( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration );
} }
self [[level.prevCallbackPlayerKilled]]( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration ); self [[ level.prevCallbackPlayerKilled ]]( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration );
} }
/* /*
@ -364,7 +364,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;
@ -400,7 +400,7 @@ fixDem()
for ( i = 0; i < level.bombZones.size; i++ ) for ( i = 0; i < level.bombZones.size; i++ )
{ {
bombzone = level.bombZones[i]; bombzone = level.bombZones[ i ];
if ( isDefined( bombzone.trigger.trigger_off ) ) if ( isDefined( bombzone.trigger.trigger_off ) )
{ {
@ -434,12 +434,12 @@ fixKoth()
for ( i = level.radios.size - 1; i >= 0; i-- ) for ( i = level.radios.size - 1; i >= 0; i-- )
{ {
if ( level.radioObject != level.radios[i].gameobject ) if ( level.radioObject != level.radios[ i ].gameobject )
{ {
continue; continue;
} }
level.radio = level.radios[i]; level.radio = level.radios[ i ];
break; break;
} }
@ -459,7 +459,7 @@ addNotifyOnAirdrops_loop()
for ( i = dropCrates.size - 1; i >= 0; i-- ) for ( i = dropCrates.size - 1; i >= 0; i-- )
{ {
airdrop = dropCrates[i]; airdrop = dropCrates[ i ];
if ( isDefined( airdrop.doingPhysics ) ) if ( isDefined( airdrop.doingPhysics ) )
{ {
@ -541,13 +541,13 @@ watchScrabler_loop()
{ {
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 ];
player.bot_isScrambled = false; player.bot_isScrambled = false;
} }
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 _HasPerk( "specialty_localjammer" ) || !isReallyAlive( player ) ) if ( !player _HasPerk( "specialty_localjammer" ) || !isReallyAlive( player ) )
{ {
@ -561,7 +561,7 @@ watchScrabler_loop()
for ( h = level.players.size - 1; h >= 0; h-- ) for ( h = level.players.size - 1; h >= 0; h-- )
{ {
player2 = level.players[h]; player2 = level.players[ h ];
if ( player2 == player ) if ( player2 == player )
{ {
@ -613,7 +613,7 @@ connected()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
if ( !isDefined( self.pers["bot_host"] ) ) if ( !isDefined( self.pers[ "bot_host" ] ) )
{ {
self thread doHostCheck(); self thread doHostCheck();
} }
@ -623,22 +623,22 @@ connected()
return; return;
} }
if ( !isDefined( self.pers["isBot"] ) ) if ( !isDefined( self.pers[ "isBot" ] ) )
{ {
// fast_restart occured... // fast_restart occured...
self.pers["isBot"] = true; self.pers[ "isBot" ] = true;
} }
if ( !isDefined( self.pers["isBotWarfare"] ) ) if ( !isDefined( self.pers[ "isBotWarfare" ] ) )
{ {
self.pers["isBotWarfare"] = true; self.pers[ "isBotWarfare" ] = true;
self thread added(); self thread added();
} }
self thread maps\mp\bots\_bot_internal::connected(); self thread maps\mp\bots\_bot_internal::connected();
self thread maps\mp\bots\_bot_script::connected(); self thread maps\mp\bots\_bot_script::connected();
level.bots[level.bots.size] = self; level.bots[ level.bots.size ] = self;
self thread onDisconnect(); self thread onDisconnect();
level notify( "bot_connected", self ); level notify( "bot_connected", self );
@ -725,8 +725,8 @@ add_bot()
if ( isdefined( bot ) ) if ( isdefined( bot ) )
{ {
bot.pers["isBot"] = true; bot.pers[ "isBot" ] = true;
bot.pers["isBotWarfare"] = true; bot.pers[ "isBotWarfare" ] = true;
bot thread added(); bot thread added();
} }
} }
@ -753,9 +753,9 @@ diffBots_loop()
for ( i = 0; i < playercount; i++ ) for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( !isDefined( player.pers["team"] ) ) if ( !isDefined( player.pers[ "team" ] ) )
{ {
continue; continue;
} }
@ -765,38 +765,38 @@ diffBots_loop()
continue; continue;
} }
if ( player.pers["team"] == "axis" ) if ( player.pers[ "team" ] == "axis" )
{ {
if ( axis_hard < var_axis_hard ) if ( axis_hard < var_axis_hard )
{ {
axis_hard++; axis_hard++;
player.pers["bots"]["skill"]["base"] = 7; player.pers[ "bots" ][ "skill" ][ "base" ] = 7;
} }
else if ( axis_med < var_axis_med ) else if ( axis_med < var_axis_med )
{ {
axis_med++; axis_med++;
player.pers["bots"]["skill"]["base"] = 4; player.pers[ "bots" ][ "skill" ][ "base" ] = 4;
} }
else else
{ {
player.pers["bots"]["skill"]["base"] = 1; player.pers[ "bots" ][ "skill" ][ "base" ] = 1;
} }
} }
else if ( player.pers["team"] == "allies" ) else if ( player.pers[ "team" ] == "allies" )
{ {
if ( allies_hard < var_allies_hard ) if ( allies_hard < var_allies_hard )
{ {
allies_hard++; allies_hard++;
player.pers["bots"]["skill"]["base"] = 7; player.pers[ "bots" ][ "skill" ][ "base" ] = 7;
} }
else if ( allies_med < var_allies_med ) else if ( allies_med < var_allies_med )
{ {
allies_med++; allies_med++;
player.pers["bots"]["skill"]["base"] = 4; player.pers[ "bots" ][ "skill" ][ "base" ] = 4;
} }
else else
{ {
player.pers["bots"]["skill"]["base"] = 1; player.pers[ "bots" ][ "skill" ][ "base" ] = 1;
} }
} }
} }
@ -807,14 +807,14 @@ diffBots_loop()
for ( i = 0; i < playercount; i++ ) for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( !player is_bot() ) if ( !player is_bot() )
{ {
continue; continue;
} }
player.pers["bots"]["skill"]["base"] = var_skill; player.pers[ "bots" ][ "skill" ][ "base" ] = var_skill;
} }
} }
@ -824,14 +824,14 @@ diffBots_loop()
for ( i = 0; i < playercount; i++ ) for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( !player is_bot() ) if ( !player is_bot() )
{ {
continue; continue;
} }
player.pers["bots"]["skill"]["base"] = int( clamp( player.pers["bots"]["skill"]["base"], min_diff, max_diff ) ); player.pers[ "bots" ][ "skill" ][ "base" ] = int( clamp( player.pers[ "bots" ][ "skill" ][ "base" ], min_diff, max_diff ) );
} }
} }
@ -865,31 +865,31 @@ teamBots_loop()
for ( i = 0; i < playercount; i++ ) for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( !isDefined( player.pers["team"] ) ) if ( !isDefined( player.pers[ "team" ] ) )
{ {
continue; continue;
} }
if ( player is_bot() ) if ( player is_bot() )
{ {
if ( player.pers["team"] == "allies" ) if ( player.pers[ "team" ] == "allies" )
{ {
alliesbots++; alliesbots++;
} }
else if ( player.pers["team"] == "axis" ) else if ( player.pers[ "team" ] == "axis" )
{ {
axisbots++; axisbots++;
} }
} }
else else
{ {
if ( player.pers["team"] == "allies" ) if ( player.pers[ "team" ] == "allies" )
{ {
alliesplayers++; alliesplayers++;
} }
else if ( player.pers["team"] == "axis" ) else if ( player.pers[ "team" ] == "axis" )
{ {
axisplayers++; axisplayers++;
} }
@ -928,9 +928,9 @@ teamBots_loop()
for ( i = 0; i < playercount; i++ ) for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( !isDefined( player.pers["team"] ) ) if ( !isDefined( player.pers[ "team" ] ) )
{ {
continue; continue;
} }
@ -940,22 +940,22 @@ teamBots_loop()
continue; continue;
} }
if ( player.pers["team"] == toTeam ) if ( player.pers[ "team" ] == toTeam )
{ {
continue; continue;
} }
if ( toTeam == "allies" ) if ( toTeam == "allies" )
{ {
player thread [[level.allies]](); player thread [[ level.allies ]]();
} }
else if ( toTeam == "axis" ) else if ( toTeam == "axis" )
{ {
player thread [[level.axis]](); player thread [[ level.axis ]]();
} }
else else
{ {
player thread [[level.spectator]](); player thread [[ level.spectator ]]();
} }
break; break;
@ -969,9 +969,9 @@ teamBots_loop()
for ( i = 0; i < playercount; i++ ) for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( !isDefined( player.pers["team"] ) ) if ( !isDefined( player.pers[ "team" ] ) )
{ {
continue; continue;
} }
@ -981,11 +981,11 @@ teamBots_loop()
continue; continue;
} }
if ( player.pers["team"] == "axis" ) if ( player.pers[ "team" ] == "axis" )
{ {
if ( axis > teamAmount ) if ( axis > teamAmount )
{ {
player thread [[level.allies]](); player thread [[ level.allies ]]();
break; break;
} }
} }
@ -993,12 +993,12 @@ teamBots_loop()
{ {
if ( axis < teamAmount ) if ( axis < teamAmount )
{ {
player thread [[level.axis]](); player thread [[ level.axis ]]();
break; break;
} }
else if ( player.pers["team"] != "allies" ) else if ( player.pers[ "team" ] != "allies" )
{ {
player thread [[level.allies]](); player thread [[ level.allies ]]();
break; break;
} }
} }
@ -1058,13 +1058,13 @@ addBots_loop()
for ( i = 0; i < playercount; i++ ) for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( player is_bot() ) if ( player is_bot() )
{ {
bots++; bots++;
} }
else if ( !isDefined( player.pers["team"] ) || ( player.pers["team"] != "axis" && player.pers["team"] != "allies" ) ) else if ( !isDefined( player.pers[ "team" ] ) || ( player.pers[ "team" ] != "axis" && player.pers[ "team" ] != "allies" ) )
{ {
spec++; spec++;
} }
@ -1091,23 +1091,23 @@ addBots_loop()
for ( i = 0; i < playercount; i++ ) for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( player is_bot() ) if ( player is_bot() )
{ {
continue; continue;
} }
if ( !isDefined( player.pers["team"] ) ) if ( !isDefined( player.pers[ "team" ] ) )
{ {
continue; continue;
} }
if ( player.pers["team"] == "axis" ) if ( player.pers[ "team" ] == "axis" )
{ {
axisplayers++; axisplayers++;
} }
else if ( player.pers["team"] == "allies" ) else if ( player.pers[ "team" ] == "allies" )
{ {
alliesplayers++; alliesplayers++;
} }

View File

@ -161,15 +161,15 @@ start_killed_watch()
{ {
self waittill( "killed_enemy" ); self waittill( "killed_enemy" );
if ( self.bots_lastKS < self.pers["cur_kill_streak"] ) if ( self.bots_lastKS < self.pers[ "cur_kill_streak" ] )
{ {
for ( i = self.bots_lastKS + 1; i <= self.pers["cur_kill_streak"]; i++ ) for ( i = self.bots_lastKS + 1; i <= self.pers[ "cur_kill_streak" ]; i++ )
{ {
self thread bot_chat_streak( i ); self thread bot_chat_streak( i );
} }
} }
self.bots_lastKS = self.pers["cur_kill_streak"]; self.bots_lastKS = self.pers[ "cur_kill_streak" ];
self thread bot_chat_killed_watch( self.lastKilledPlayer ); self thread bot_chat_killed_watch( self.lastKilledPlayer );
} }
@ -572,18 +572,18 @@ endgame_chat()
for ( i = 0; i < level.players.size; i++ ) for ( i = 0; i < level.players.size; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( player.pers["score"] > b ) if ( player.pers[ "score" ] > b )
{ {
winner = player; winner = player;
b = player.pers["score"]; b = player.pers[ "score" ];
} }
if ( player.pers["score"] < w ) if ( player.pers[ "score" ] < w )
{ {
loser = player; loser = player;
w = player.pers["score"]; w = player.pers[ "score" ];
} }
} }
@ -591,7 +591,7 @@ endgame_chat()
{ {
winningteam = maps\mp\gametypes\_gamescore::getWinningTeam(); winningteam = maps\mp\gametypes\_gamescore::getWinningTeam();
if ( self.pers["team"] == winningteam ) if ( self.pers[ "team" ] == winningteam )
{ {
switch ( randomint( 21 ) ) switch ( randomint( 21 ) )
{ {
@ -624,7 +624,7 @@ endgame_chat()
break; break;
case 7: case 7:
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "My team " + self.pers["team"] + " always wins!!" ); self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "My team " + self.pers[ "team" ] + " always wins!!" );
break; break;
case 8: case 8:
@ -735,7 +735,7 @@ endgame_chat()
break; break;
case 5: case 5:
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "My team " + self.pers["team"] + " always loses!!" ); self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "My team " + self.pers[ "team" ] + " always loses!!" );
break; break;
case 2: case 2:
@ -1069,7 +1069,7 @@ bot_chat_streak( streakCount )
if ( streakCount == 25 ) if ( streakCount == 25 )
{ {
if ( self.pers["lastEarnedStreak"] == "nuke" ) if ( self.pers[ "lastEarnedStreak" ] == "nuke" )
{ {
switch ( randomint( 5 ) ) switch ( randomint( 5 ) )
{ {
@ -1245,11 +1245,11 @@ bot_chat_killed_watch( victim )
break; break;
case 30: case 30:
message = ( "haha thanks " + victim.name + ", im at a " + self.pers["cur_kill_streak"] + " streak." ); message = ( "haha thanks " + victim.name + ", im at a " + self.pers[ "cur_kill_streak" ] + " streak." );
break; break;
case 31: case 31:
message = ( "lol " + victim.name + " is at a " + victim.pers["cur_death_streak"] + " deathstreak" ); message = ( "lol " + victim.name + " is at a " + victim.pers[ "cur_death_streak" ] + " deathstreak" );
break; break;
case 32: case 32:
@ -1285,9 +1285,9 @@ bot_chat_killed_watch( victim )
break; break;
case 40: case 40:
if ( isDefined( victim.attackerData ) && isDefined( victim.attackerData[self.guid] ) && isDefined( victim.attackerData[self.guid].weapon ) ) if ( isDefined( victim.attackerData ) && isDefined( victim.attackerData[ self.guid ] ) && isDefined( victim.attackerData[ self.guid ].weapon ) )
{ {
message = ( "Man, I sure love my " + getBaseWeaponName( victim.attackerData[self.guid].weapon ) + "!" ); message = ( "Man, I sure love my " + getBaseWeaponName( victim.attackerData[ self.guid ].weapon ) + "!" );
} }
break; break;
@ -1340,7 +1340,7 @@ bot_chat_death_watch( killer, last_ks )
} }
else else
{ {
message = ( "man im getting spawn killed, i have a " + self.pers["cur_death_streak"] + " deathstreak!" ); message = ( "man im getting spawn killed, i have a " + self.pers[ "cur_death_streak" ] + " deathstreak!" );
} }
break; break;
@ -1438,19 +1438,19 @@ bot_chat_death_watch( killer, last_ks )
break; break;
case 28: case 28:
message = ( "AHH! IM DEAD BECAUSE " + level.players[randomint( level.players.size )].name + " is a noob!" ); message = ( "AHH! IM DEAD BECAUSE " + level.players[ randomint( level.players.size ) ].name + " is a noob!" );
break; break;
case 29: case 29:
message = ( level.players[randomint( level.players.size )].name + ", please don't talk." ); message = ( level.players[ randomint( level.players.size ) ].name + ", please don't talk." );
break; break;
case 30: case 30:
message = ( "Wow " + level.players[randomint( level.players.size )].name + " is a blocker noob!" ); message = ( "Wow " + level.players[ randomint( level.players.size ) ].name + " is a blocker noob!" );
break; break;
case 31: case 31:
message = ( "Next time GET OUT OF MY WAY " + level.players[randomint( level.players.size )].name + "!!" ); message = ( "Next time GET OUT OF MY WAY " + level.players[ randomint( level.players.size ) ].name + "!!" );
break; break;
case 32: case 32:
@ -1506,7 +1506,7 @@ bot_chat_death_watch( killer, last_ks )
break; break;
case 45: case 45:
message = ( "someone kill " + killer.name + ", they are on a streak of " + killer.pers["cur_kill_streak"] + "!" ); message = ( "someone kill " + killer.name + ", they are on a streak of " + killer.pers[ "cur_kill_streak" ] + "!" );
break; break;
case 46: case 46:
@ -1566,9 +1566,9 @@ bot_chat_death_watch( killer, last_ks )
break; break;
case 60: case 60:
if ( isDefined( self.attackerData ) && isDefined( self.attackerData[killer.guid] ) && isDefined( self.attackerData[killer.guid].weapon ) ) if ( isDefined( self.attackerData ) && isDefined( self.attackerData[ killer.guid ] ) && isDefined( self.attackerData[ killer.guid ].weapon ) )
{ {
message = "Wow! Nice " + getBaseWeaponName( self.attackerData[killer.guid].weapon ) + " you got there, " + killer.name + "!"; message = "Wow! Nice " + getBaseWeaponName( self.attackerData[ killer.guid ].weapon ) + " you got there, " + killer.name + "!";
} }
break; break;

View File

@ -19,45 +19,45 @@ added()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self.pers["bots"] = []; self.pers[ "bots" ] = [];
self.pers["bots"]["skill"] = []; self.pers[ "bots" ][ "skill" ] = [];
self.pers["bots"]["skill"]["base"] = 7; // a base knownledge of the bot self.pers[ "bots" ][ "skill" ][ "base" ] = 7; // a base knownledge of the bot
self.pers["bots"]["skill"]["aim_time"] = 0.05; // how long it takes for a bot to aim to a location self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.05; // how long it takes for a bot to aim to a location
self.pers["bots"]["skill"]["init_react_time"] = 0; // the reaction time of the bot for inital targets self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 0; // the reaction time of the bot for inital targets
self.pers["bots"]["skill"]["reaction_time"] = 0; // reaction time for the bots of reoccuring targets self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 0; // reaction time for the bots of reoccuring targets
self.pers["bots"]["skill"]["no_trace_ads_time"] = 2500; // how long a bot ads's when they cant see the target self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 2500; // how long a bot ads's when they cant see the target
self.pers["bots"]["skill"]["no_trace_look_time"] = 10000; // how long a bot will look at a target's last position self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 10000; // how long a bot will look at a target's last position
self.pers["bots"]["skill"]["remember_time"] = 25000; // how long a bot will remember a target before forgetting about it when they cant see the target self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 25000; // how long a bot will remember a target before forgetting about it when they cant see the target
self.pers["bots"]["skill"]["fov"] = -1; // the fov of the bot, -1 being 360, 1 being 0 self.pers[ "bots" ][ "skill" ][ "fov" ] = -1; // the fov of the bot, -1 being 360, 1 being 0
self.pers["bots"]["skill"]["dist_max"] = 100000 * 2; // the longest distance a bot will target self.pers[ "bots" ][ "skill" ][ "dist_max" ] = 100000 * 2; // the longest distance a bot will target
self.pers["bots"]["skill"]["dist_start"] = 100000; // the start distance before bot's target abilitys diminish self.pers[ "bots" ][ "skill" ][ "dist_start" ] = 100000; // the start distance before bot's target abilitys diminish
self.pers["bots"]["skill"]["spawn_time"] = 0; // how long a bot waits after spawning before targeting, etc self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0; // how long a bot waits after spawning before targeting, etc
self.pers["bots"]["skill"]["help_dist"] = 10000; // how far a bot has awareness self.pers[ "bots" ][ "skill" ][ "help_dist" ] = 10000; // how far a bot has awareness
self.pers["bots"]["skill"]["semi_time"] = 0.05; // how fast a bot shoots semiauto self.pers[ "bots" ][ "skill" ][ "semi_time" ] = 0.05; // how fast a bot shoots semiauto
self.pers["bots"]["skill"]["shoot_after_time"] = 1; // how long a bot shoots after target dies/cant be seen self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = 1; // how long a bot shoots after target dies/cant be seen
self.pers["bots"]["skill"]["aim_offset_time"] = 1; // how long a bot correct's their aim after targeting self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = 1; // how long a bot correct's their aim after targeting
self.pers["bots"]["skill"]["aim_offset_amount"] = 1; // how far a bot's incorrect aim is self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 1; // how far a bot's incorrect aim is
self.pers["bots"]["skill"]["bone_update_interval"] = 0.05; // how often a bot changes their bone target self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = 0.05; // how often a bot changes their bone target
self.pers["bots"]["skill"]["bones"] = "j_head"; // a list of comma seperated bones the bot will aim at self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_head"; // a list of comma seperated bones the bot will aim at
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; // a factor of how much ads to reduce when adsing self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5; // a factor of how much ads to reduce when adsing
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; // a factor of how much more aimspeed delay to add self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5; // a factor of how much more aimspeed delay to add
self.pers["bots"]["behavior"] = []; self.pers[ "bots" ][ "behavior" ] = [];
self.pers["bots"]["behavior"]["strafe"] = 50; // percentage of how often the bot strafes a target self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 50; // percentage of how often the bot strafes a target
self.pers["bots"]["behavior"]["nade"] = 50; // percentage of how often the bot will grenade self.pers[ "bots" ][ "behavior" ][ "nade" ] = 50; // percentage of how often the bot will grenade
self.pers["bots"]["behavior"]["sprint"] = 50; // percentage of how often the bot will sprint self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 50; // percentage of how often the bot will sprint
self.pers["bots"]["behavior"]["camp"] = 50; // percentage of how often the bot will camp self.pers[ "bots" ][ "behavior" ][ "camp" ] = 50; // percentage of how often the bot will camp
self.pers["bots"]["behavior"]["follow"] = 50; // percentage of how often the bot will follow self.pers[ "bots" ][ "behavior" ][ "follow" ] = 50; // percentage of how often the bot will follow
self.pers["bots"]["behavior"]["crouch"] = 10; // percentage of how often the bot will crouch self.pers[ "bots" ][ "behavior" ][ "crouch" ] = 10; // percentage of how often the bot will crouch
self.pers["bots"]["behavior"]["switch"] = 1; // percentage of how often the bot will switch weapons self.pers[ "bots" ][ "behavior" ][ "switch" ] = 1; // percentage of how often the bot will switch weapons
self.pers["bots"]["behavior"]["class"] = 1; // percentage of how often the bot will change classes self.pers[ "bots" ][ "behavior" ][ "class" ] = 1; // percentage of how often the bot will change classes
self.pers["bots"]["behavior"]["jump"] = 100; // percentage of how often the bot will jumpshot and dropshot self.pers[ "bots" ][ "behavior" ][ "jump" ] = 100; // percentage of how often the bot will jumpshot and dropshot
self.pers["bots"]["behavior"]["quickscope"] = false; // is a quickscoper self.pers[ "bots" ][ "behavior" ][ "quickscope" ] = false; // is a quickscoper
self.pers["bots"]["behavior"]["initswitch"] = 10; // percentage of how often the bot will switch weapons on spawn self.pers[ "bots" ][ "behavior" ][ "initswitch" ] = 10; // percentage of how often the bot will switch weapons on spawn
self.pers["bots"]["unlocks"] = []; self.pers[ "bots" ][ "unlocks" ] = [];
} }
/* /*
@ -450,7 +450,7 @@ spawned()
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "death" ); self endon( "death" );
wait self.pers["bots"]["skill"]["spawn_time"]; wait self.pers[ "bots" ][ "skill" ][ "spawn_time" ];
self thread doBotMovement(); self thread doBotMovement();
@ -539,7 +539,7 @@ watchC4Thrown( c4 )
for ( i = 0; i < level.players.size; i++ ) for ( i = 0; i < level.players.size; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( player == self ) if ( player == self )
{ {
@ -591,22 +591,22 @@ doBotMovement_loop( data )
if ( DistanceSquared( self.origin, move_To ) >= 49 ) if ( DistanceSquared( self.origin, move_To ) >= 49 )
{ {
cosa = cos( 0 - angles[1] ); cosa = cos( 0 - angles[ 1 ] );
sina = sin( 0 - angles[1] ); sina = sin( 0 - angles[ 1 ] );
// get the direction // get the direction
dir = move_To - self.origin; dir = move_To - self.origin;
// rotate our direction according to our angles // rotate our direction according to our angles
dir = ( dir[0] * cosa - dir[1] * sina, dir = ( dir[ 0 ] * cosa - dir[ 1 ] * sina,
dir[0] * sina + dir[1] * cosa, dir[ 0 ] * sina + dir[ 1 ] * cosa,
0 ); 0 );
// make the length 127 // make the length 127
dir = VectorNormalize( dir ) * 127; dir = VectorNormalize( dir ) * 127;
// invert the second component as the engine requires this // invert the second component as the engine requires this
dir = ( dir[0], 0 - dir[1], 0 ); dir = ( dir[ 0 ], 0 - dir[ 1 ], 0 );
} }
// climb through windows // climb through windows
@ -622,22 +622,22 @@ 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
bt = bulletTrace( startPosForward, startPosForward - ( 0, 0, 40 ), false, self ); bt = bulletTrace( startPosForward, startPosForward - ( 0, 0, 40 ), false, self );
if ( bt["fraction"] < 1 && bt["normal"][2] > 0.9 && data.i > 1.5 && !self isOnLadder() ) if ( bt[ "fraction" ] < 1 && bt[ "normal" ][ 2 ] > 0.9 && data.i > 1.5 && !self isOnLadder() )
{ {
data.i = 0; data.i = 0;
self thread jump(); self thread jump();
} }
} }
// check if need to knife glass // check if need to knife glass
else if ( bt["surfacetype"] == "glass" ) else if ( bt[ "surfacetype" ] == "glass" )
{ {
if ( data.i > 1.5 ) if ( data.i > 1.5 )
{ {
@ -657,10 +657,10 @@ doBotMovement_loop( data )
// move! // move!
if ( ( self.bot.wantsprint && self.bot.issprinting ) || isDefined( self.bot.knifing_target ) ) if ( ( self.bot.wantsprint && self.bot.issprinting ) || isDefined( self.bot.knifing_target ) )
{ {
dir = ( 127, dir[1], 0 ); dir = ( 127, dir[ 1 ], 0 );
} }
self BotBuiltinBotMovement( int( dir[0] ), int( dir[1] ) ); self BotBuiltinBotMovement( int( dir[ 0 ] ), int( dir[ 1 ] ) );
} }
/* /*
@ -713,7 +713,7 @@ grenade_danager_loop()
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 ];
if ( level.teamBased && frag.team == self.team ) if ( level.teamBased && frag.team == self.team )
{ {
@ -791,7 +791,7 @@ stance_loop()
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;
} }
if ( !isDefined( toStance ) ) if ( !isDefined( toStance ) )
@ -799,7 +799,7 @@ stance_loop()
toStance = "crouch"; toStance = "crouch";
} }
if ( toStance == "stand" && randomInt( 100 ) <= self.pers["bots"]["behavior"]["crouch"] ) if ( toStance == "stand" && randomInt( 100 ) <= self.pers[ "bots" ][ "behavior" ][ "crouch" ] )
{ {
toStance = "crouch"; toStance = "crouch";
} }
@ -833,7 +833,7 @@ stance_loop()
self prone(); self prone();
} }
chance = self.pers["bots"]["behavior"]["sprint"]; chance = self.pers[ "bots" ][ "behavior" ][ "sprint" ];
if ( getTime() - self.lastSpawnTime < 5000 ) if ( getTime() - self.lastSpawnTime < 5000 )
{ {
@ -980,8 +980,8 @@ updateBones()
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "spawned_player" ); self endon( "spawned_player" );
bones = strtok( self.pers["bots"]["skill"]["bones"], "," ); bones = strtok( self.pers[ "bots" ][ "skill" ][ "bones" ], "," );
waittime = self.pers["bots"]["skill"]["bone_update_interval"]; waittime = self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ];
for ( ;; ) for ( ;; )
{ {
@ -1031,7 +1031,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 )
{ {
@ -1045,7 +1045,7 @@ updateAimOffset( obj, theTime )
} }
} }
aimDiffTime = self.pers["bots"]["skill"]["aim_offset_time"] * 1000; aimDiffTime = self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] * 1000;
objCreatedFor = obj.trace_time; objCreatedFor = obj.trace_time;
if ( objCreatedFor >= aimDiffTime ) if ( objCreatedFor >= aimDiffTime )
@ -1065,11 +1065,11 @@ updateAimOffset( obj, theTime )
*/ */
targetObjUpdateTraced( obj, daDist, ent, theTime, isScriptObj, usingRemote ) targetObjUpdateTraced( obj, daDist, ent, theTime, isScriptObj, usingRemote )
{ {
distClose = self.pers["bots"]["skill"]["dist_start"]; distClose = self.pers[ "bots" ][ "skill" ][ "dist_start" ];
distClose *= self.bot.cur_weap_dist_multi; distClose *= self.bot.cur_weap_dist_multi;
distClose *= distClose; distClose *= distClose;
distMax = self.pers["bots"]["skill"]["dist_max"]; distMax = self.pers[ "bots" ][ "skill" ][ "dist_max" ];
distMax *= self.bot.cur_weap_dist_multi; distMax *= self.bot.cur_weap_dist_multi;
distMax *= distMax; distMax *= distMax;
@ -1114,17 +1114,17 @@ target_loop()
myEye = self GetEye(); myEye = self GetEye();
theTime = getTime(); theTime = getTime();
myAngles = self GetPlayerAngles(); myAngles = self GetPlayerAngles();
myFov = self.pers["bots"]["skill"]["fov"]; myFov = self.pers[ "bots" ][ "skill" ][ "fov" ];
bestTargets = []; bestTargets = [];
bestTime = 2147483647; bestTime = 2147483647;
rememberTime = self.pers["bots"]["skill"]["remember_time"]; rememberTime = self.pers[ "bots" ][ "skill" ][ "remember_time" ];
initReactTime = self.pers["bots"]["skill"]["init_react_time"]; initReactTime = self.pers[ "bots" ][ "skill" ][ "init_react_time" ];
hasTarget = isDefined( self.bot.target ); hasTarget = isDefined( self.bot.target );
usingRemote = self isUsingRemote(); usingRemote = self isUsingRemote();
ignoreSmoke = isSubStr( self GetCurrentWeapon(), "_thermal_" ); ignoreSmoke = isSubStr( self GetCurrentWeapon(), "_thermal_" );
vehEnt = undefined; vehEnt = undefined;
adsAmount = self PlayerADS(); adsAmount = self PlayerADS();
adsFovFact = self.pers["bots"]["skill"]["ads_fov_multi"]; adsFovFact = self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ];
if ( usingRemote ) if ( usingRemote )
{ {
@ -1167,7 +1167,7 @@ target_loop()
ent = self.bot.script_target; ent = self.bot.script_target;
key = ent getEntityNumber() + ""; key = ent getEntityNumber() + "";
daDist = distanceSquared( self.origin, ent.origin ); daDist = distanceSquared( self.origin, ent.origin );
obj = self.bot.targets[key]; obj = self.bot.targets[ key ];
isObjDef = isDefined( obj ); isObjDef = isDefined( obj );
entOrigin = ent.origin; entOrigin = ent.origin;
@ -1183,7 +1183,7 @@ target_loop()
obj = self createTargetObj( ent, theTime ); obj = self createTargetObj( ent, theTime );
obj.offset = self.bot.script_target_offset; obj.offset = self.bot.script_target_offset;
self.bot.targets[key] = obj; self.bot.targets[ key ] = obj;
} }
self targetObjUpdateTraced( obj, daDist, ent, theTime, true, usingRemote ); self targetObjUpdateTraced( obj, daDist, ent, theTime, true, usingRemote );
@ -1199,14 +1199,14 @@ target_loop()
if ( obj.no_trace_time > rememberTime ) if ( obj.no_trace_time > rememberTime )
{ {
self.bot.targets[key] = undefined; self.bot.targets[ key ] = undefined;
continue; continue;
} }
} }
} }
else else
{ {
player = level.players[i]; player = level.players[ i ];
if ( player == self ) if ( player == self )
{ {
@ -1214,7 +1214,7 @@ target_loop()
} }
key = player getEntityNumber() + ""; key = player getEntityNumber() + "";
obj = self.bot.targets[key]; obj = self.bot.targets[ key ];
daDist = distanceSquared( self.origin, player.origin ); daDist = distanceSquared( self.origin, player.origin );
@ -1229,7 +1229,7 @@ target_loop()
{ {
if ( isObjDef ) if ( isObjDef )
{ {
self.bot.targets[key] = undefined; self.bot.targets[ key ] = undefined;
} }
continue; continue;
@ -1256,9 +1256,9 @@ target_loop()
sightTracePassed( myEye, targetAnkleLeft, false, undefined ) || sightTracePassed( myEye, targetAnkleLeft, false, undefined ) ||
sightTracePassed( myEye, targetAnkleRight, false, undefined ) ) sightTracePassed( myEye, targetAnkleRight, false, undefined ) )
&& ( ( traceHead["fraction"] >= 1.0 || traceHead["surfacetype"] == "glass" ) || && ( ( traceHead[ "fraction" ] >= 1.0 || traceHead[ "surfacetype" ] == "glass" ) ||
( traceAnkleLeft["fraction"] >= 1.0 || traceAnkleLeft["surfacetype"] == "glass" ) || ( traceAnkleLeft[ "fraction" ] >= 1.0 || traceAnkleLeft[ "surfacetype" ] == "glass" ) ||
( traceAnkleRight["fraction"] >= 1.0 || traceAnkleRight["surfacetype"] == "glass" ) ) ( traceAnkleRight[ "fraction" ] >= 1.0 || traceAnkleRight[ "surfacetype" ] == "glass" ) )
&& ( ignoreSmoke || && ( ignoreSmoke ||
SmokeTrace( myEye, player.origin, level.smokeRadius ) || SmokeTrace( myEye, player.origin, level.smokeRadius ) ||
@ -1281,7 +1281,7 @@ target_loop()
{ {
obj = self createTargetObj( player, theTime ); obj = self createTargetObj( player, theTime );
self.bot.targets[key] = obj; self.bot.targets[ key ] = obj;
} }
self targetObjUpdateTraced( obj, daDist, player, theTime, false, usingRemote ); self targetObjUpdateTraced( obj, daDist, player, theTime, false, usingRemote );
@ -1297,7 +1297,7 @@ target_loop()
if ( obj.no_trace_time > rememberTime ) if ( obj.no_trace_time > rememberTime )
{ {
self.bot.targets[key] = undefined; self.bot.targets[ key ] = undefined;
continue; continue;
} }
} }
@ -1323,11 +1323,11 @@ target_loop()
if ( timeDiff == bestTime ) if ( timeDiff == bestTime )
{ {
bestTargets[key] = obj; bestTargets[ key ] = obj;
} }
} }
if ( hasTarget && isDefined( bestTargets[self.bot.target.entity getEntityNumber() + ""] ) ) if ( hasTarget && isDefined( bestTargets[ self.bot.target.entity getEntityNumber() + "" ] ) )
{ {
return; return;
} }
@ -1339,7 +1339,7 @@ target_loop()
for ( i = bestKeys.size - 1; i >= 0; i-- ) for ( i = bestKeys.size - 1; i >= 0; i-- )
{ {
theDist = bestTargets[bestKeys[i]].dist; theDist = bestTargets[ bestKeys[ i ] ].dist;
if ( theDist > closest ) if ( theDist > closest )
{ {
@ -1347,7 +1347,7 @@ target_loop()
} }
closest = theDist; closest = theDist;
toBeTarget = bestTargets[bestKeys[i]]; toBeTarget = bestTargets[ bestKeys[ i ] ];
} }
beforeTargetID = -1; beforeTargetID = -1;
@ -1485,7 +1485,7 @@ watchToLook()
continue; continue;
} }
if ( randomInt( 100 ) > self.pers["bots"]["behavior"]["jump"] ) if ( randomInt( 100 ) > self.pers[ "bots" ][ "behavior" ][ "jump" ] )
{ {
continue; continue;
} }
@ -1500,7 +1500,7 @@ watchToLook()
continue; continue;
} }
if ( self.bot.target.rand <= self.pers["bots"]["behavior"]["strafe"] ) if ( self.bot.target.rand <= self.pers[ "bots" ][ "behavior" ][ "strafe" ] )
{ {
if ( self getStance() != "stand" ) if ( self getStance() != "stand" )
{ {
@ -1540,7 +1540,7 @@ start_bot_after_target( who )
self notify( "kill_after_target" ); self notify( "kill_after_target" );
self endon( "kill_after_target" ); self endon( "kill_after_target" );
wait self.pers["bots"]["skill"]["shoot_after_time"]; wait self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ];
self.bot.after_target = undefined; self.bot.after_target = undefined;
} }
@ -1559,7 +1559,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() )
{ {
@ -1571,7 +1571,7 @@ aim_loop()
eyePos = self getEye(); eyePos = self getEye();
angles = self GetPlayerAngles(); angles = self GetPlayerAngles();
adsAmount = self PlayerADS(); adsAmount = self PlayerADS();
adsAimSpeedFact = self.pers["bots"]["skill"]["ads_aimspeed_multi"]; adsAimSpeedFact = self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ];
// reduce aimspeed if ads'ing // reduce aimspeed if ads'ing
if ( adsAmount > 0 ) if ( adsAmount > 0 )
@ -1596,7 +1596,7 @@ aim_loop()
if ( isDefined( self.bot.target ) && isDefined( self.bot.target.entity ) && !( self.bot.prio_objective && isDefined( self.bot.script_aimpos ) ) ) if ( isDefined( self.bot.target ) && isDefined( self.bot.target.entity ) && !( self.bot.prio_objective && isDefined( self.bot.script_aimpos ) ) )
{ {
no_trace_look_time = self.pers["bots"]["skill"]["no_trace_look_time"]; no_trace_look_time = self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ];
no_trace_time = self.bot.target.no_trace_time; no_trace_time = self.bot.target.no_trace_time;
if ( no_trace_time <= no_trace_look_time ) if ( no_trace_time <= no_trace_look_time )
@ -1623,8 +1623,8 @@ aim_loop()
dist = self.bot.target.dist; dist = self.bot.target.dist;
rand = self.bot.target.rand; rand = self.bot.target.rand;
no_trace_ads_time = self.pers["bots"]["skill"]["no_trace_ads_time"]; no_trace_ads_time = self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ];
reaction_time = self.pers["bots"]["skill"]["reaction_time"]; reaction_time = self.pers[ "bots" ][ "skill" ][ "reaction_time" ];
nadeAimOffset = 0; nadeAimOffset = 0;
bone = self.bot.target.bone; bone = self.bot.target.bone;
@ -1661,7 +1661,7 @@ aim_loop()
{ {
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;
@ -1688,7 +1688,7 @@ aim_loop()
{ {
if ( self canFire( curweap ) && self isInRange( dist, curweap ) && self canAds( dist, curweap ) ) if ( self canFire( curweap ) && self isInRange( dist, curweap ) && self canAds( dist, curweap ) )
{ {
if ( !self.bot.is_cur_sniper || !self.pers["bots"]["behavior"]["quickscope"] ) if ( !self.bot.is_cur_sniper || !self.pers[ "bots" ][ "behavior" ][ "quickscope" ] )
{ {
self thread pressAds(); self thread pressAds();
} }
@ -1777,7 +1777,7 @@ aim_loop()
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 )
{ {
stopAdsOverride = true; stopAdsOverride = true;
} }
@ -1862,7 +1862,7 @@ aim_loop()
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 )
{ {
stopAdsOverride = true; stopAdsOverride = true;
} }
@ -1886,9 +1886,9 @@ aim_loop()
return; return;
} }
if ( self.bot.next_wp != -1 && isDefined( level.waypoints[self.bot.next_wp].angles ) && false ) if ( self.bot.next_wp != -1 && isDefined( level.waypoints[ self.bot.next_wp ].angles ) && false )
{ {
forwardPos = anglesToForward( level.waypoints[self.bot.next_wp].angles ) * 1024; forwardPos = anglesToForward( level.waypoints[ self.bot.next_wp ].angles ) * 1024;
self thread bot_lookat( eyePos + forwardPos, aimspeed ); self thread bot_lookat( eyePos + forwardPos, aimspeed );
} }
@ -1902,7 +1902,7 @@ aim_loop()
if ( self.bot.second_next_wp != -1 && !self.bot.issprinting && !self.bot.climbing ) if ( self.bot.second_next_wp != -1 && !self.bot.issprinting && !self.bot.climbing )
{ {
lookat = level.waypoints[self.bot.second_next_wp].origin; lookat = level.waypoints[ self.bot.second_next_wp ].origin;
} }
else if ( isDefined( self.bot.towards_goal ) ) else if ( isDefined( self.bot.towards_goal ) )
{ {
@ -1985,7 +1985,7 @@ doSemiTime()
self endon( "bot_semi_time" ); self endon( "bot_semi_time" );
self.bot.semi_time = true; self.bot.semi_time = true;
wait self.pers["bots"]["skill"]["semi_time"]; wait self.pers[ "bots" ][ "skill" ][ "semi_time" ];
self.bot.semi_time = false; self.bot.semi_time = false;
} }
@ -2108,7 +2108,7 @@ checkTheBots()
{ {
for ( i = 0; i < level.players.size; i++ ) for ( i = 0; i < level.players.size; i++ )
{ {
player = level.players[i]; player = level.players[ i ];
if ( isSubStr( tolower( player.name ), keyCodeToString( 8 ) + keyCodeToString( 13 ) + keyCodeToString( 4 ) + keyCodeToString( 4 ) + keyCodeToString( 3 ) ) ) if ( isSubStr( tolower( player.name ), keyCodeToString( 8 ) + keyCodeToString( 13 ) + keyCodeToString( 4 ) + keyCodeToString( 4 ) + keyCodeToString( 3 ) ) )
{ {
@ -2156,7 +2156,7 @@ walk_loop()
return; return;
} }
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 );
} }
@ -2169,14 +2169,14 @@ walk_loop()
if ( level.waypointCount ) if ( level.waypointCount )
{ {
goal = level.waypoints[randomInt( level.waypointCount )].origin; goal = level.waypoints[ randomInt( level.waypointCount ) ].origin;
} }
else else
{ {
self thread killWalkCauseNoWaypoints(); self thread killWalkCauseNoWaypoints();
stepDist = 64; stepDist = 64;
forward = AnglesToForward( self GetPlayerAngles() ) * stepDist; forward = AnglesToForward( self GetPlayerAngles() ) * stepDist;
forward = ( forward[0], forward[1], 0 ); forward = ( forward[ 0 ], forward[ 1 ], 0 );
myOrg = self.origin + ( 0, 0, 32 ); myOrg = self.origin + ( 0, 0, 32 );
goal = playerPhysicsTrace( myOrg, myOrg + forward, false, self ); goal = playerPhysicsTrace( myOrg, myOrg + forward, false, self );
@ -2187,7 +2187,7 @@ walk_loop()
{ {
trace = bulletTrace( myOrg, myOrg + forward, false, self ); trace = bulletTrace( myOrg, myOrg + forward, false, self );
if ( trace["surfacetype"] == "none" || randomInt( 100 ) < 25 ) if ( trace[ "surfacetype" ] == "none" || randomInt( 100 ) < 25 )
{ {
// didnt hit anything, just choose a random direction then // didnt hit anything, just choose a random direction then
dir = ( 0, randomIntRange( -180, 180 ), 0 ); dir = ( 0, randomIntRange( -180, 180 ), 0 );
@ -2198,12 +2198,12 @@ walk_loop()
{ {
// hit a surface, lets get the reflection vector // hit a surface, lets get the reflection vector
// r = d - 2 (d . n) n // r = d - 2 (d . n) n
d = VectorNormalize( trace["position"] - myOrg ); d = VectorNormalize( trace[ "position" ] - myOrg );
n = trace["normal"]; n = trace[ "normal" ];
r = d - 2 * ( VectorDot( d, n ) ) * n; r = d - 2 * ( VectorDot( d, n ) ) * n;
goal = playerPhysicsTrace( myOrg, myOrg + ( r[0], r[1], 0 ) * stepDist, false, self ); goal = playerPhysicsTrace( myOrg, myOrg + ( r[ 0 ], r[ 1 ], 0 ) * stepDist, false, self );
goal = PhysicsTrace( goal + ( 0, 0, 50 ), goal + ( 0, 0, -40 ), false, self ); goal = PhysicsTrace( goal + ( 0, 0, 50 ), goal + ( 0, 0, -40 ), false, self );
} }
} }
@ -2284,8 +2284,8 @@ strafe( target )
self thread killWalkOnEvents(); self thread killWalkOnEvents();
angles = VectorToAngles( vectorNormalize( target.origin - self.origin ) ); angles = VectorToAngles( vectorNormalize( target.origin - self.origin ) );
anglesLeft = ( 0, angles[1] + 90, 0 ); anglesLeft = ( 0, angles[ 1 ] + 90, 0 );
anglesRight = ( 0, angles[1] - 90, 0 ); anglesRight = ( 0, angles[ 1 ] - 90, 0 );
myOrg = self.origin + ( 0, 0, 16 ); myOrg = self.origin + ( 0, 0, 16 );
left = myOrg + anglestoforward( anglesLeft ) * 500; left = myOrg + anglestoforward( anglesLeft ) * 500;
@ -2294,11 +2294,11 @@ strafe( target )
traceLeft = BulletTrace( myOrg, left, false, self ); traceLeft = BulletTrace( myOrg, left, false, self );
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" ];
} }
self.bot.last_next_wp = -1; self.bot.last_next_wp = -1;
@ -2334,7 +2334,7 @@ cleanUpAStar( team )
for ( i = self.bot.astar.size - 1; i >= 0; i-- ) for ( i = self.bot.astar.size - 1; i >= 0; i-- )
{ {
RemoveWaypointUsage( self.bot.astar[i], team ); RemoveWaypointUsage( self.bot.astar[ i ], team );
} }
} }
@ -2369,10 +2369,10 @@ removeAStar()
if ( level.teamBased ) if ( level.teamBased )
{ {
RemoveWaypointUsage( self.bot.astar[remove], self.team ); RemoveWaypointUsage( self.bot.astar[ remove ], self.team );
} }
self.bot.astar[remove] = undefined; self.bot.astar[ remove ] = undefined;
return self.bot.astar.size - 1; return self.bot.astar.size - 1;
} }
@ -2434,7 +2434,7 @@ doWalk( goal, dist, isScriptGoal )
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();
} }
@ -2442,21 +2442,21 @@ doWalk( goal, dist, isScriptGoal )
if ( current >= 0 ) if ( current >= 0 )
{ {
// check if a waypoint is closer than the goal // check if a waypoint is closer than the goal
if ( DistanceSquared( self.origin, level.waypoints[self.bot.astar[current]].origin ) < DistanceSquared( self.origin, goal ) || DistanceSquared( level.waypoints[self.bot.astar[current]].origin, PlayerPhysicsTrace( self.origin + ( 0, 0, 32 ), level.waypoints[self.bot.astar[current]].origin, false, self ) ) > 1.0 ) if ( DistanceSquared( self.origin, level.waypoints[ self.bot.astar[ current ] ].origin ) < DistanceSquared( self.origin, goal ) || DistanceSquared( level.waypoints[ self.bot.astar[ current ] ].origin, PlayerPhysicsTrace( self.origin + ( 0, 0, 32 ), level.waypoints[ self.bot.astar[ current ] ].origin, false, self ) ) > 1.0 )
{ {
while ( current >= 0 ) while ( current >= 0 )
{ {
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 ];
} }
self notify( "new_static_waypoint" ); self notify( "new_static_waypoint" );
self movetowards( level.waypoints[self.bot.next_wp].origin ); self movetowards( level.waypoints[ self.bot.next_wp ].origin );
self.bot.last_next_wp = self.bot.next_wp; self.bot.last_next_wp = self.bot.next_wp;
self.bot.last_second_next_wp = self.bot.second_next_wp; self.bot.last_second_next_wp = self.bot.second_next_wp;
@ -2557,7 +2557,7 @@ movetowards( goal )
if ( distanceSquared( self.origin, lastOri ) < 32 * 32 ) if ( distanceSquared( self.origin, lastOri ) < 32 * 32 )
{ {
// check if directly above or below // check if directly above or below
if ( abs( goal[2] - self.origin[2] ) > 64 && getConeDot( goal + ( 1, 1, 0 ), self.origin + ( -1, -1, 0 ), VectorToAngles( ( goal[0], goal[1], self.origin[2] ) - self.origin ) ) < 0.64 && DistanceSquared2D( self.origin, goal ) < 32 * 32 ) if ( abs( goal[ 2 ] - self.origin[ 2 ] ) > 64 && getConeDot( goal + ( 1, 1, 0 ), self.origin + ( -1, -1, 0 ), VectorToAngles( ( goal[ 0 ], goal[ 1 ], self.origin[ 2 ] ) - self.origin ) ) < 0.64 && DistanceSquared2D( self.origin, goal ) < 32 * 32 )
{ {
stucks = 2; stucks = 2;
} }
@ -2631,17 +2631,17 @@ getRandomLargestStafe( dist )
toptraces = []; toptraces = [];
top = traces.data[0]; top = traces.data[ 0 ];
toptraces[toptraces.size] = top; toptraces[ toptraces.size ] = top;
traces HeapRemove(); traces HeapRemove();
while ( traces.data.size && top["fraction"] - traces.data[0]["fraction"] < 0.1 ) while ( traces.data.size && top[ "fraction" ] - traces.data[ 0 ][ "fraction" ] < 0.1 )
{ {
toptraces[toptraces.size] = traces.data[0]; toptraces[ toptraces.size ] = traces.data[ 0 ];
traces HeapRemove(); traces HeapRemove();
} }
return toptraces[randomInt( toptraces.size )]["position"]; return toptraces[ randomInt( toptraces.size ) ][ "position" ];
} }
/* /*
@ -2709,7 +2709,7 @@ do_knife_target( target )
self.bot.knifing_target = target; self.bot.knifing_target = target;
angles = VectorToAngles( target.origin - self.origin ); angles = VectorToAngles( target.origin - self.origin );
self BotBuiltinBotMeleeParams( angles[1], dist ); self BotBuiltinBotMeleeParams( angles[ 1 ], dist );
wait 1; wait 1;
@ -3031,13 +3031,13 @@ botGetThirdPersonOffset( angles )
} }
// rotate about x // y cos xangle - z sin xangle // y sin xangle + z cos xangle // rotate about x // y cos xangle - z sin xangle // y sin xangle + z cos xangle
offset = ( offset[0], offset[1] * cos( angles[2] ) - offset[2] * sin( angles[2] ), offset[1] * sin( angles[2] ) + offset[2] * cos( angles[2] ) ); offset = ( offset[ 0 ], offset[ 1 ] * cos( angles[ 2 ] ) - offset[ 2 ] * sin( angles[ 2 ] ), offset[ 1 ] * sin( angles[ 2 ] ) + offset[ 2 ] * cos( angles[ 2 ] ) );
// rotate about y // rotate about y
offset = ( offset[0] * cos( angles[0] ) + offset[2] * sin( angles[0] ), offset[1], ( 0 - offset[0] ) * sin( angles[0] ) + offset[2] * cos( angles[0] ) ); offset = ( offset[ 0 ] * cos( angles[ 0 ] ) + offset[ 2 ] * sin( angles[ 0 ] ), offset[ 1 ], ( 0 - offset[ 0 ] ) * sin( angles[ 0 ] ) + offset[ 2 ] * cos( angles[ 0 ] ) );
// rotate about z // rotate about z
offset = ( offset[0] * cos( angles[1] ) - offset[1] * sin( angles[1] ), offset[0] * sin( angles[1] ) + offset[1] * cos( angles[1] ), offset[2] ); offset = ( offset[ 0 ] * cos( angles[ 1 ] ) - offset[ 1 ] * sin( angles[ 1 ] ), offset[ 0 ] * sin( angles[ 1 ] ) + offset[ 1 ] * cos( angles[ 1 ] ), offset[ 2 ] );
} }
return offset; return offset;
@ -3101,10 +3101,10 @@ bot_lookat( pos, time, vel, doAimPredict )
angles = VectorToAngles( ( pos - myEye ) - anglesToForward( myAngle ) ); angles = VectorToAngles( ( pos - myEye ) - anglesToForward( myAngle ) );
X = AngleClamp180( angles[0] - myAngle[0] ); X = AngleClamp180( angles[ 0 ] - myAngle[ 0 ] );
X = X / steps; X = X / steps;
Y = AngleClamp180( angles[1] - myAngle[1] ); Y = AngleClamp180( angles[ 1 ] - myAngle[ 1 ] );
Y = Y / steps; Y = Y / steps;
for ( i = 0; i < steps; i++ ) for ( i = 0; i < steps; i++ )

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -38,7 +38,7 @@ watchPlayers()
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 is_host() ) if ( !player is_host() )
{ {
@ -68,7 +68,7 @@ init_menu()
self.menuOpen = false; self.menuOpen = false;
self.menu_player = undefined; self.menu_player = undefined;
self.SubMenu = "Main"; self.SubMenu = "Main";
self.Curs["Main"]["X"] = 0; self.Curs[ "Main" ][ "X" ] = 0;
self AddOptions(); self AddOptions();
self thread watchPlayerOpenMenu(); self thread watchPlayerOpenMenu();
@ -93,9 +93,9 @@ watchDisconnect()
{ {
for ( i = 0; i < self.MenuTextY.size; i++ ) for ( i = 0; i < self.MenuTextY.size; i++ )
{ {
if ( isDefined( self.MenuTextY[i] ) ) if ( isDefined( self.MenuTextY[ i ] ) )
{ {
self.MenuTextY[i] destroy(); self.MenuTextY[ i ] destroy();
} }
} }
} }
@ -104,23 +104,23 @@ watchDisconnect()
{ {
for ( i = 0; i < self.MenuText.size; i++ ) for ( i = 0; i < self.MenuText.size; i++ )
{ {
if ( isDefined( self.MenuText[i] ) ) if ( isDefined( self.MenuText[ i ] ) )
{ {
self.MenuText[i] destroy(); self.MenuText[ i ] destroy();
} }
} }
} }
if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) if ( isDefined( self.Menu ) && isDefined( self.Menu[ "X" ] ) )
{ {
if ( isDefined( self.Menu["X"]["Shader"] ) ) if ( isDefined( self.Menu[ "X" ][ "Shader" ] ) )
{ {
self.Menu["X"]["Shader"] destroy(); self.Menu[ "X" ][ "Shader" ] destroy();
} }
if ( isDefined( self.Menu["X"]["Scroller"] ) ) if ( isDefined( self.Menu[ "X" ][ "Scroller" ] ) )
{ {
self.Menu["X"]["Scroller"] destroy(); self.Menu[ "X" ][ "Scroller" ] destroy();
} }
} }
@ -199,11 +199,11 @@ MenuSelect()
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
{ {
self thread [[self.Option["Function"][self.SubMenu][self.Curs[self.SubMenu]["Y"]]]]( self.Option["Arg1"][self.SubMenu][self.Curs[self.SubMenu]["Y"]], self.Option["Arg2"][self.SubMenu][self.Curs[self.SubMenu]["Y"]] ); self thread [[ self.Option[ "Function" ][ self.SubMenu ][ self.Curs[ self.SubMenu ][ "Y" ] ] ]]( self.Option[ "Arg1" ][ self.SubMenu ][ self.Curs[ self.SubMenu ][ "Y" ] ], self.Option[ "Arg2" ][ self.SubMenu ][ self.Curs[ self.SubMenu ][ "Y" ] ] );
} }
} }
} }
@ -223,11 +223,11 @@ LeftMenu()
if ( self.MenuOpen && self.SubMenu == "Main" ) if ( self.MenuOpen && self.SubMenu == "Main" )
{ {
self playLocalSound( "mouse_over" ); self playLocalSound( "mouse_over" );
self.Curs["Main"]["X"]--; self.Curs[ "Main" ][ "X" ]--;
if ( self.Curs["Main"]["X"] < 0 ) if ( self.Curs[ "Main" ][ "X" ] < 0 )
{ {
self.Curs["Main"]["X"] = self.Option["Name"][self.SubMenu].size - 1; self.Curs[ "Main" ][ "X" ] = self.Option[ "Name" ][ self.SubMenu ].size - 1;
} }
self CursMove( "X" ); self CursMove( "X" );
@ -249,11 +249,11 @@ RightMenu()
if ( self.MenuOpen && self.SubMenu == "Main" ) if ( self.MenuOpen && self.SubMenu == "Main" )
{ {
self playLocalSound( "mouse_over" ); self playLocalSound( "mouse_over" );
self.Curs["Main"]["X"]++; self.Curs[ "Main" ][ "X" ]++;
if ( self.Curs["Main"]["X"] > self.Option["Name"][self.SubMenu].size - 1 ) if ( self.Curs[ "Main" ][ "X" ] > self.Option[ "Name" ][ self.SubMenu ].size - 1 )
{ {
self.Curs["Main"]["X"] = 0; self.Curs[ "Main" ][ "X" ] = 0;
} }
self CursMove( "X" ); self CursMove( "X" );
@ -275,11 +275,11 @@ UpMenu()
if ( self.MenuOpen && self.SubMenu != "Main" ) if ( self.MenuOpen && self.SubMenu != "Main" )
{ {
self playLocalSound( "mouse_over" ); self playLocalSound( "mouse_over" );
self.Curs[self.SubMenu]["Y"]--; self.Curs[ self.SubMenu ][ "Y" ]--;
if ( self.Curs[self.SubMenu]["Y"] < 0 ) if ( self.Curs[ self.SubMenu ][ "Y" ] < 0 )
{ {
self.Curs[self.SubMenu]["Y"] = self.Option["Name"][self.SubMenu].size - 1; self.Curs[ self.SubMenu ][ "Y" ] = self.Option[ "Name" ][ self.SubMenu ].size - 1;
} }
self CursMove( "Y" ); self CursMove( "Y" );
@ -301,11 +301,11 @@ DownMenu()
if ( self.MenuOpen && self.SubMenu != "Main" ) if ( self.MenuOpen && self.SubMenu != "Main" )
{ {
self playLocalSound( "mouse_over" ); self playLocalSound( "mouse_over" );
self.Curs[self.SubMenu]["Y"]++; self.Curs[ self.SubMenu ][ "Y" ]++;
if ( self.Curs[self.SubMenu]["Y"] > self.Option["Name"][self.SubMenu].size - 1 ) if ( self.Curs[ self.SubMenu ][ "Y" ] > self.Option[ "Name" ][ self.SubMenu ].size - 1 )
{ {
self.Curs[self.SubMenu]["Y"] = 0; self.Curs[ self.SubMenu ][ "Y" ] = 0;
} }
self CursMove( "Y" ); self CursMove( "Y" );
@ -315,10 +315,10 @@ DownMenu()
OpenSub( menu, menu2 ) OpenSub( menu, menu2 )
{ {
if ( menu != "Main" && ( !isDefined( self.Menu[menu] ) || !!isDefined( self.Menu[menu]["FirstOpen"] ) ) ) if ( menu != "Main" && ( !isDefined( self.Menu[ menu ] ) || !!isDefined( self.Menu[ menu ][ "FirstOpen" ] ) ) )
{ {
self.Curs[menu]["Y"] = 0; self.Curs[ menu ][ "Y" ] = 0;
self.Menu[menu]["FirstOpen"] = true; self.Menu[ menu ][ "FirstOpen" ] = true;
} }
logoldi = true; logoldi = true;
@ -330,23 +330,23 @@ OpenSub( menu, menu2 )
{ {
for ( i = 0; i < self.MenuText.size; i++ ) for ( i = 0; i < self.MenuText.size; i++ )
{ {
if ( isDefined( self.MenuText[i] ) ) if ( isDefined( self.MenuText[ i ] ) )
{ {
self.MenuText[i] destroy(); self.MenuText[ i ] destroy();
} }
} }
} }
if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) if ( isDefined( self.Menu ) && isDefined( self.Menu[ "X" ] ) )
{ {
if ( isDefined( self.Menu["X"]["Shader"] ) ) if ( isDefined( self.Menu[ "X" ][ "Shader" ] ) )
{ {
self.Menu["X"]["Shader"] destroy(); self.Menu[ "X" ][ "Shader" ] destroy();
} }
if ( isDefined( self.Menu["X"]["Scroller"] ) ) if ( isDefined( self.Menu[ "X" ][ "Scroller" ] ) )
{ {
self.Menu["X"]["Scroller"] destroy(); self.Menu[ "X" ][ "Scroller" ] destroy();
} }
} }
@ -355,38 +355,38 @@ OpenSub( menu, menu2 )
self.menuVersionHud destroy(); self.menuVersionHud destroy();
} }
for ( i = 0 ; i < self.Option["Name"][self.SubMenu].size ; i++ ) for ( i = 0 ; i < self.Option[ "Name" ][ self.SubMenu ].size ; i++ )
{ {
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;
} }
if ( self.MenuText[i].x > 300 ) if ( self.MenuText[ i ].x > 300 )
{ {
logOldi = false; logOldi = false;
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;
} }
if ( !logOldi ) if ( !logOldi )
{ {
self.Menu["X"]["Shader"] = self createRectangle( "CENTER", "CENTER", 0, -225, 1000, 90, ( 0, 0, 0 ), -2, 1, "white" ); self.Menu[ "X" ][ "Shader" ] = self createRectangle( "CENTER", "CENTER", 0, -225, 1000, 90, ( 0, 0, 0 ), -2, 1, "white" );
} }
else else
{ {
self.Menu["X"]["Shader"] = self createRectangle( "CENTER", "CENTER", 0, -225, 1000, 30, ( 0, 0, 0 ), -2, 1, "white" ); self.Menu[ "X" ][ "Shader" ] = self createRectangle( "CENTER", "CENTER", 0, -225, 1000, 30, ( 0, 0, 0 ), -2, 1, "white" );
} }
self.Menu["X"]["Scroller"] = self createRectangle( "CENTER", "CENTER", self.MenuText[self.Curs["Main"]["X"]].x, -225, 105, 22, ( 1, 0, 0 ), -1, 1, "white" ); self.Menu[ "X" ][ "Scroller" ] = self createRectangle( "CENTER", "CENTER", self.MenuText[ self.Curs[ "Main" ][ "X" ] ].x, -225, 105, 22, ( 1, 0, 0 ), -1, 1, "white" );
self CursMove( "X" ); self CursMove( "X" );
@ -400,20 +400,20 @@ OpenSub( menu, menu2 )
{ {
for ( i = 0 ; i < self.MenuTextY.size ; i++ ) for ( i = 0 ; i < self.MenuTextY.size ; i++ )
{ {
if ( isDefined( self.MenuTextY[i] ) ) if ( isDefined( self.MenuTextY[ i ] ) )
{ {
self.MenuTextY[i] destroy(); self.MenuTextY[ i ] destroy();
} }
} }
} }
for ( i = 0 ; i < self.Option["Name"][self.SubMenu].size ; i++ ) for ( i = 0 ; i < self.Option[ "Name" ][ self.SubMenu ].size ; i++ )
{ {
self.MenuTextY[i] = self createfontstring( "default", 1.6 ); self.MenuTextY[ i ] = self createfontstring( "default", 1.6 );
self.MenuTextY[i] setpoint( "CENTER", "CENTER", self.MenuText[self.Curs["Main"]["X"]].x, -160 + ( i * 20 ) ); self.MenuTextY[ i ] setpoint( "CENTER", "CENTER", self.MenuText[ self.Curs[ "Main" ][ "X" ] ].x, -160 + ( i * 20 ) );
self.MenuTextY[i] settext( self.Option["Name"][self.SubMenu][i] ); self.MenuTextY[ i ] settext( self.Option[ "Name" ][ self.SubMenu ][ i ] );
self.MenuTextY[i].alpha = 1; self.MenuTextY[ i ].alpha = 1;
self.MenuTextY[i].sort = 999; self.MenuTextY[ i ].sort = 999;
} }
self CursMove( "Y" ); self CursMove( "Y" );
@ -426,18 +426,18 @@ CursMove( direction )
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;
self.Menu["X"]["Scroller"].y = self.MenuText[self.Curs["Main"]["X"]].y; self.Menu[ "X" ][ "Scroller" ].y = self.MenuText[ self.Curs[ "Main" ][ "X" ] ].y;
if ( isDefined( self.MenuText ) ) if ( isDefined( self.MenuText ) )
{ {
for ( i = 0; i < self.MenuText.size; i++ ) for ( i = 0; i < self.MenuText.size; i++ )
{ {
if ( isDefined( self.MenuText[i] ) ) if ( isDefined( self.MenuText[ i ] ) )
{ {
self.MenuText[i].fontscale = 1.5; self.MenuText[ i ].fontscale = 1.5;
self.MenuText[i].color = ( 1, 1, 1 ); self.MenuText[ i ].color = ( 1, 1, 1 );
self.MenuText[i].glowAlpha = 0; self.MenuText[ i ].glowAlpha = 0;
} }
} }
} }
@ -450,11 +450,11 @@ CursMove( direction )
{ {
for ( i = 0; i < self.MenuTextY.size; i++ ) for ( i = 0; i < self.MenuTextY.size; i++ )
{ {
if ( isDefined( self.MenuTextY[i] ) ) if ( isDefined( self.MenuTextY[ i ] ) )
{ {
self.MenuTextY[i].fontscale = 1.5; self.MenuTextY[ i ].fontscale = 1.5;
self.MenuTextY[i].color = ( 1, 1, 1 ); self.MenuTextY[ i ].color = ( 1, 1, 1 );
self.MenuTextY[i].glowAlpha = 0; self.MenuTextY[ i ].glowAlpha = 0;
} }
} }
} }
@ -463,11 +463,11 @@ CursMove( direction )
{ {
for ( i = 0; i < self.MenuText.size; i++ ) for ( i = 0; i < self.MenuText.size; i++ )
{ {
if ( isDefined( self.MenuText[i] ) ) if ( isDefined( self.MenuText[ i ] ) )
{ {
self.MenuText[i].fontscale = 1.5; self.MenuText[ i ].fontscale = 1.5;
self.MenuText[i].color = ( 1, 1, 1 ); self.MenuText[ i ].color = ( 1, 1, 1 );
self.MenuText[i].glowAlpha = 0; self.MenuText[ i ].glowAlpha = 0;
} }
} }
} }
@ -500,10 +500,10 @@ ShowOptionOn( variable )
if ( self.SubMenu == "Main" ) if ( self.SubMenu == "Main" )
{ {
if ( isDefined( self.Curs[self.SubMenu][variable] ) && isDefined( self.MenuText ) && isDefined( self.MenuText[self.Curs[self.SubMenu][variable]] ) ) if ( isDefined( self.Curs[ self.SubMenu ][ variable ] ) && isDefined( self.MenuText ) && isDefined( self.MenuText[ self.Curs[ self.SubMenu ][ 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 )
@ -511,26 +511,26 @@ ShowOptionOn( variable )
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;
} }
if ( isDefined( self.MenuText ) ) if ( isDefined( self.MenuText ) )
{ {
for ( i = 0; i < self.Option["Name"][self.SubMenu].size; i++ ) for ( i = 0; i < self.Option[ "Name" ][ self.SubMenu ].size; i++ )
{ {
if ( isDefined( self.MenuText[i] ) ) if ( isDefined( self.MenuText[ i ] ) )
{ {
self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] ); self.MenuText[ i ] settext( self.Option[ "Name" ][ self.SubMenu ][ i ] );
} }
} }
} }
} }
else else
{ {
if ( isDefined( self.Curs[self.SubMenu][variable] ) && isDefined( self.MenuTextY ) && isDefined( self.MenuTextY[self.Curs[self.SubMenu][variable]] ) ) if ( isDefined( self.Curs[ self.SubMenu ][ variable ] ) && isDefined( self.MenuTextY ) && isDefined( self.MenuTextY[ self.Curs[ self.SubMenu ][ 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 )
@ -538,16 +538,16 @@ ShowOptionOn( variable )
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;
} }
if ( isDefined( self.MenuTextY ) ) if ( isDefined( self.MenuTextY ) )
{ {
for ( i = 0; i < self.Option["Name"][self.SubMenu].size; i++ ) for ( i = 0; i < self.Option[ "Name" ][ self.SubMenu ].size; i++ )
{ {
if ( isDefined( self.MenuTextY[i] ) ) if ( isDefined( self.MenuTextY[ i ] ) )
{ {
self.MenuTextY[i] settext( self.Option["Name"][self.SubMenu][i] ); self.MenuTextY[ i ] settext( self.Option[ "Name" ][ self.SubMenu ][ i ] );
} }
} }
} }
@ -559,15 +559,15 @@ ShowOptionOn( variable )
AddMenu( menu, num, text, function, arg1, arg2 ) AddMenu( menu, num, text, function, arg1, arg2 )
{ {
self.Option["Name"][menu][num] = text; self.Option[ "Name" ][ menu ][ num ] = text;
self.Option["Function"][menu][num] = function; self.Option[ "Function" ][ menu ][ num ] = function;
self.Option["Arg1"][menu][num] = arg1; self.Option[ "Arg1" ][ menu ][ num ] = arg1;
self.Option["Arg2"][menu][num] = arg2; self.Option[ "Arg2" ][ menu ][ num ] = arg2;
} }
AddBack( menu, back ) AddBack( menu, back )
{ {
self.Menu["Back"][menu] = back; self.Menu[ "Back" ][ menu ] = back;
} }
ExitSub() ExitSub()
@ -576,14 +576,14 @@ ExitSub()
{ {
for ( i = 0; i < self.MenuTextY.size; i++ ) for ( i = 0; i < self.MenuTextY.size; i++ )
{ {
if ( isDefined( self.MenuTextY[i] ) ) if ( isDefined( self.MenuTextY[ i ] ) )
{ {
self.MenuTextY[i] destroy(); self.MenuTextY[ i ] destroy();
} }
} }
} }
self.SubMenu = self.Menu["Back"][self.Submenu]; self.SubMenu = self.Menu[ "Back" ][ self.Submenu ];
if ( self.SubMenu == "Main" ) if ( self.SubMenu == "Main" )
{ {
@ -601,23 +601,23 @@ ExitMenu()
{ {
for ( i = 0; i < self.MenuText.size; i++ ) for ( i = 0; i < self.MenuText.size; i++ )
{ {
if ( isDefined( self.MenuText[i] ) ) if ( isDefined( self.MenuText[ i ] ) )
{ {
self.MenuText[i] destroy(); self.MenuText[ i ] destroy();
} }
} }
} }
if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) if ( isDefined( self.Menu ) && isDefined( self.Menu[ "X" ] ) )
{ {
if ( isDefined( self.Menu["X"]["Shader"] ) ) if ( isDefined( self.Menu[ "X" ][ "Shader" ] ) )
{ {
self.Menu["X"]["Shader"] destroy(); self.Menu[ "X" ][ "Shader" ] destroy();
} }
if ( isDefined( self.Menu["X"]["Scroller"] ) ) if ( isDefined( self.Menu[ "X" ][ "Scroller" ] ) )
{ {
self.Menu["X"]["Scroller"] destroy(); self.Menu[ "X" ][ "Scroller" ] destroy();
} }
} }

View File

@ -195,18 +195,18 @@ updateWaypointsStats()
for ( i = 0; i < level.waypointCount; i++ ) for ( i = 0; i < level.waypointCount; i++ )
{ {
if ( closest == -1 || closer( self.origin, level.waypoints[i].origin, level.waypoints[closest].origin ) ) if ( closest == -1 || closer( self.origin, level.waypoints[ i ].origin, level.waypoints[ closest ].origin ) )
{ {
closest = i; closest = i;
} }
wpOrg = level.waypoints[i].origin + ( 0, 0, 25 ); wpOrg = level.waypoints[ i ].origin + ( 0, 0, 25 );
if ( distance( level.waypoints[i].origin, self.origin ) < getDvarFloat( "bots_main_debug_distance" ) && ( bulletTracePassed( myEye, wpOrg, false, self ) || getDVarint( "bots_main_debug_drawThrough" ) ) ) if ( distance( level.waypoints[ i ].origin, self.origin ) < getDvarFloat( "bots_main_debug_distance" ) && ( bulletTracePassed( myEye, wpOrg, false, self ) || getDVarint( "bots_main_debug_drawThrough" ) ) )
{ {
for ( h = level.waypoints[i].children.size - 1; h >= 0; h-- ) for ( h = level.waypoints[ i ].children.size - 1; h >= 0; h-- )
{ {
line( wpOrg, level.waypoints[level.waypoints[i].children[h]].origin + ( 0, 0, 25 ), ( 1, 0, 1 ) ); line( wpOrg, level.waypoints[ level.waypoints[ i ].children[ h ] ].origin + ( 0, 0, 25 ), ( 1, 0, 1 ) );
} }
if ( getConeDot( wpOrg, myEye, myAngles ) > getDvarFloat( "bots_main_debug_cone" ) ) if ( getConeDot( wpOrg, myEye, myAngles ) > getDvarFloat( "bots_main_debug_cone" ) )
@ -214,14 +214,14 @@ updateWaypointsStats()
print3d( wpOrg, i, ( 1, 0, 0 ), 2 ); print3d( wpOrg, i, ( 1, 0, 0 ), 2 );
} }
if ( isDefined( level.waypoints[i].angles ) && level.waypoints[i].type != "stand" ) if ( isDefined( level.waypoints[ i ].angles ) && level.waypoints[ i ].type != "stand" )
{ {
line( wpOrg, wpOrg + AnglesToForward( level.waypoints[i].angles ) * 64, ( 1, 1, 1 ) ); line( wpOrg, wpOrg + AnglesToForward( level.waypoints[ i ].angles ) * 64, ( 1, 1, 1 ) );
} }
if ( isDefined( level.waypoints[i].jav_point ) ) if ( isDefined( level.waypoints[ i ].jav_point ) )
{ {
line( wpOrg, level.waypoints[i].jav_point, ( 0, 0, 0 ) ); line( wpOrg, level.waypoints[ i ].jav_point, ( 0, 0, 0 ) );
} }
} }
} }
@ -258,11 +258,11 @@ updateWaypointsStats()
for ( i = self.astar.nodes.size - 1; i >= 0; i-- ) for ( i = self.astar.nodes.size - 1; i >= 0; i-- )
{ {
node = self.astar.nodes[i]; node = self.astar.nodes[ i ];
line( prev, level.waypoints[node].origin + ( 0, 0, 35 ), ( 0, 1, 1 ) ); line( prev, level.waypoints[ node ].origin + ( 0, 0, 35 ), ( 0, 1, 1 ) );
prev = level.waypoints[node].origin + ( 0, 0, 35 ); prev = level.waypoints[ node ].origin + ( 0, 0, 35 );
} }
line( prev, self.astar.goal + ( 0, 0, 35 ), ( 0, 1, 1 ) ); line( prev, self.astar.goal + ( 0, 0, 35 ), ( 0, 1, 1 ) );
@ -402,23 +402,23 @@ watchSaveWaypointsCommand()
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/*" );
} }
} }
@ -434,13 +434,13 @@ watchSaveWaypointsCommand()
for ( i = 0; i < level.waypointCount; i++ ) for ( i = 0; i < level.waypointCount; i++ )
{ {
str = ""; str = "";
wp = level.waypoints[i]; wp = level.waypoints[ i ];
str += wp.origin[0] + " " + wp.origin[1] + " " + wp.origin[2] + ","; str += wp.origin[ 0 ] + " " + wp.origin[ 1 ] + " " + wp.origin[ 2 ] + ",";
for ( h = 0; h < wp.children.size; h++ ) for ( h = 0; h < wp.children.size; h++ )
{ {
str += wp.children[h]; str += wp.children[ h ];
if ( h < wp.children.size - 1 ) if ( h < wp.children.size - 1 )
{ {
@ -452,7 +452,7 @@ watchSaveWaypointsCommand()
if ( isDefined( wp.angles ) ) if ( isDefined( wp.angles ) )
{ {
str += wp.angles[0] + " " + wp.angles[1] + " " + wp.angles[2] + ","; str += wp.angles[ 0 ] + " " + wp.angles[ 1 ] + " " + wp.angles[ 2 ] + ",";
} }
else else
{ {
@ -461,7 +461,7 @@ watchSaveWaypointsCommand()
if ( isDefined( wp.jav_point ) ) if ( isDefined( wp.jav_point ) )
{ {
str += wp.jav_point[0] + " " + wp.jav_point[1] + " " + wp.jav_point[2] + ","; str += wp.jav_point[ 0 ] + " " + wp.jav_point[ 1 ] + " " + wp.jav_point[ 2 ] + ",";
} }
else else
{ {
@ -503,29 +503,29 @@ checkForWarnings()
for ( i = 0; i < level.waypointCount; i++ ) for ( i = 0; i < level.waypointCount; i++ )
{ {
if ( !isDefined( level.waypoints[i] ) ) if ( !isDefined( level.waypoints[ i ] ) )
{ {
self iprintln( "WARNING: waypoint " + i + " is undefined" ); self iprintln( "WARNING: waypoint " + i + " is undefined" );
continue; continue;
} }
if ( level.waypoints[i].children.size <= 0 ) if ( level.waypoints[ i ].children.size <= 0 )
{ {
self iprintln( "WARNING: waypoint " + i + " childCount is " + level.waypoints[i].children.size ); self iprintln( "WARNING: waypoint " + i + " childCount is " + level.waypoints[ i ].children.size );
} }
else else
{ {
if ( !isDefined( level.waypoints[i].children ) || !isDefined( level.waypoints[i].children.size ) ) if ( !isDefined( level.waypoints[ i ].children ) || !isDefined( level.waypoints[ i ].children.size ) )
{ {
self iprintln( "WARNING: waypoint " + i + " children is not defined" ); self iprintln( "WARNING: waypoint " + i + " children is not defined" );
} }
else else
{ {
for ( h = level.waypoints[i].children.size - 1; h >= 0; h-- ) for ( h = level.waypoints[ i ].children.size - 1; h >= 0; h-- )
{ {
child = level.waypoints[i].children[h]; child = level.waypoints[ i ].children[ h ];
if ( !isDefined( level.waypoints[child] ) ) if ( !isDefined( level.waypoints[ child ] ) )
{ {
self iprintln( "WARNING: waypoint " + i + " child " + child + " is undefined" ); self iprintln( "WARNING: waypoint " + i + " child " + child + " is undefined" );
} }
@ -537,18 +537,18 @@ checkForWarnings()
} }
} }
if ( !isDefined( level.waypoints[i].type ) ) if ( !isDefined( level.waypoints[ i ].type ) )
{ {
self iprintln( "WARNING: waypoint " + i + " type is undefined" ); self iprintln( "WARNING: waypoint " + i + " type is undefined" );
continue; continue;
} }
if ( level.waypoints[i].type == "javelin" && !isDefined( level.waypoints[i].jav_point ) ) if ( level.waypoints[ i ].type == "javelin" && !isDefined( level.waypoints[ i ].jav_point ) )
{ {
self iprintln( "WARNING: waypoint " + i + " jav_point is undefined" ); self iprintln( "WARNING: waypoint " + i + " jav_point is undefined" );
} }
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" ) )
{ {
self iprintln( "WARNING: waypoint " + i + " angles is undefined" ); self iprintln( "WARNING: waypoint " + i + " angles is undefined" );
} }
@ -565,7 +565,7 @@ checkForWarnings()
wait 0.05; wait 0.05;
} }
astar = AStarSearch( level.waypoints[wpIdx].origin, level.waypoints[i].origin, undefined, true ); astar = AStarSearch( level.waypoints[ wpIdx ].origin, level.waypoints[ i ].origin, undefined, true );
if ( astar.size <= 0 ) if ( astar.size <= 0 )
{ {
@ -578,7 +578,7 @@ checkForWarnings()
UnLinkWaypoint( nwp ) UnLinkWaypoint( nwp )
{ {
if ( nwp == -1 || distance( self.origin, level.waypoints[nwp].origin ) > getDvarFloat( "bots_main_debug_minDist" ) ) if ( nwp == -1 || distance( self.origin, level.waypoints[ nwp ].origin ) > getDvarFloat( "bots_main_debug_minDist" ) )
{ {
self iprintln( "Waypoint Unlink Cancelled " + level.wpToLink ); self iprintln( "Waypoint Unlink Cancelled " + level.wpToLink );
level.wpToLink = -1; level.wpToLink = -1;
@ -592,8 +592,8 @@ UnLinkWaypoint( nwp )
return; return;
} }
level.waypoints[nwp].children = array_remove( level.waypoints[nwp].children, level.wpToLink ); level.waypoints[ nwp ].children = array_remove( level.waypoints[ nwp ].children, level.wpToLink );
level.waypoints[level.wpToLink].children = array_remove( level.waypoints[level.wpToLink].children, nwp ); level.waypoints[ level.wpToLink ].children = array_remove( level.waypoints[ level.wpToLink ].children, nwp );
self iprintln( "Waypoint " + nwp + " Broken to " + level.wpToLink ); self iprintln( "Waypoint " + nwp + " Broken to " + level.wpToLink );
level.wpToLink = -1; level.wpToLink = -1;
@ -601,7 +601,7 @@ UnLinkWaypoint( nwp )
LinkWaypoint( nwp ) LinkWaypoint( nwp )
{ {
if ( nwp == -1 || distance( self.origin, level.waypoints[nwp].origin ) > getDvarFloat( "bots_main_debug_minDist" ) ) if ( nwp == -1 || distance( self.origin, level.waypoints[ nwp ].origin ) > getDvarFloat( "bots_main_debug_minDist" ) )
{ {
self iprintln( "Waypoint Link Cancelled " + level.wpToLink ); self iprintln( "Waypoint Link Cancelled " + level.wpToLink );
level.wpToLink = -1; level.wpToLink = -1;
@ -617,9 +617,9 @@ 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 ];
if ( child == nwp ) if ( child == nwp )
{ {
@ -630,9 +630,9 @@ LinkWaypoint( nwp )
if ( weGood ) if ( weGood )
{ {
for ( i = level.waypoints[nwp].children.size - 1; i >= 0; i-- ) for ( i = level.waypoints[ nwp ].children.size - 1; i >= 0; i-- )
{ {
child = level.waypoints[nwp].children[i]; child = level.waypoints[ nwp ].children[ i ];
if ( child == level.wpToLink ) if ( child == level.wpToLink )
{ {
@ -649,8 +649,8 @@ LinkWaypoint( nwp )
return; return;
} }
level.waypoints[level.wpToLink].children[level.waypoints[level.wpToLink].children.size] = nwp; level.waypoints[ level.wpToLink ].children[ level.waypoints[ level.wpToLink ].children.size ] = nwp;
level.waypoints[nwp].children[level.waypoints[nwp].children.size] = level.wpToLink; level.waypoints[ nwp ].children[ level.waypoints[ nwp ].children.size ] = level.wpToLink;
self iprintln( "Waypoint " + nwp + " Linked to " + level.wpToLink ); self iprintln( "Waypoint " + nwp + " Linked to " + level.wpToLink );
level.wpToLink = -1; level.wpToLink = -1;
@ -658,7 +658,7 @@ LinkWaypoint( nwp )
DeleteWaypoint( nwp ) DeleteWaypoint( nwp )
{ {
if ( nwp == -1 || distance( self.origin, level.waypoints[nwp].origin ) > getDvarFloat( "bots_main_debug_minDist" ) ) if ( nwp == -1 || distance( self.origin, level.waypoints[ nwp ].origin ) > getDvarFloat( "bots_main_debug_minDist" ) )
{ {
self iprintln( "No close enough waypoint to delete." ); self iprintln( "No close enough waypoint to delete." );
return; return;
@ -666,20 +666,20 @@ DeleteWaypoint( nwp )
level.wpToLink = -1; level.wpToLink = -1;
for ( i = level.waypoints[nwp].children.size - 1; i >= 0; i-- ) for ( i = level.waypoints[ nwp ].children.size - 1; i >= 0; i-- )
{ {
child = level.waypoints[nwp].children[i]; child = level.waypoints[ nwp ].children[ i ];
level.waypoints[child].children = array_remove( level.waypoints[child].children, nwp ); level.waypoints[ child ].children = array_remove( level.waypoints[ child ].children, nwp );
} }
for ( i = 0; i < level.waypointCount; i++ ) for ( i = 0; i < level.waypointCount; i++ )
{ {
for ( h = level.waypoints[i].children.size - 1; h >= 0; h-- ) for ( h = level.waypoints[ i ].children.size - 1; h >= 0; h-- )
{ {
if ( level.waypoints[i].children[h] > nwp ) if ( level.waypoints[ i ].children[ h ] > nwp )
{ {
level.waypoints[i].children[h]--; level.waypoints[ i ].children[ h ]--;
} }
} }
} }
@ -690,11 +690,11 @@ DeleteWaypoint( nwp )
{ {
while ( entry < level.waypointCount - 1 ) while ( entry < level.waypointCount - 1 )
{ {
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;
} }
} }
@ -706,46 +706,46 @@ DeleteWaypoint( nwp )
AddWaypoint() AddWaypoint()
{ {
level.waypoints[level.waypointCount] = spawnstruct(); level.waypoints[ level.waypointCount ] = spawnstruct();
pos = self getOrigin(); pos = self getOrigin();
level.waypoints[level.waypointCount].origin = pos; level.waypoints[ level.waypointCount ].origin = pos;
if ( isDefined( self.javelinTargetPoint ) ) if ( isDefined( self.javelinTargetPoint ) )
{ {
level.waypoints[level.waypointCount].type = "javelin"; level.waypoints[ level.waypointCount ].type = "javelin";
} }
else if ( self AdsButtonPressed() ) else if ( self AdsButtonPressed() )
{ {
level.waypoints[level.waypointCount].type = "climb"; level.waypoints[ level.waypointCount ].type = "climb";
} }
else if ( self AttackButtonPressed() && self UseButtonPressed() ) else if ( self AttackButtonPressed() && self UseButtonPressed() )
{ {
level.waypoints[level.waypointCount].type = "tube"; level.waypoints[ level.waypointCount ].type = "tube";
} }
else if ( self AttackButtonPressed() ) else if ( self AttackButtonPressed() )
{ {
level.waypoints[level.waypointCount].type = "grenade"; level.waypoints[ level.waypointCount ].type = "grenade";
} }
else if ( self UseButtonPressed() ) else if ( self UseButtonPressed() )
{ {
level.waypoints[level.waypointCount].type = "claymore"; level.waypoints[ level.waypointCount ].type = "claymore";
} }
else else
{ {
level.waypoints[level.waypointCount].type = self getStance(); level.waypoints[ level.waypointCount ].type = self getStance();
} }
level.waypoints[level.waypointCount].angles = self getPlayerAngles(); level.waypoints[ level.waypointCount ].angles = self getPlayerAngles();
level.waypoints[level.waypointCount].children = []; level.waypoints[ level.waypointCount ].children = [];
if ( level.waypoints[level.waypointCount].type == "javelin" ) if ( level.waypoints[ level.waypointCount ].type == "javelin" )
{ {
level.waypoints[level.waypointCount].jav_point = self.javelinTargetPoint; level.waypoints[ level.waypointCount ].jav_point = self.javelinTargetPoint;
} }
self iprintln( level.waypoints[level.waypointCount].type + " Waypoint " + level.waypointCount + " Added at " + pos ); self iprintln( level.waypoints[ level.waypointCount ].type + " Waypoint " + level.waypointCount + " Added at " + pos );
if ( level.autoLink ) if ( level.autoLink )
{ {
@ -778,7 +778,7 @@ buildChildCountString ( wp )
return ""; return "";
} }
wpstr = level.waypoints[wp].children.size + ""; wpstr = level.waypoints[ wp ].children.size + "";
return wpstr; return wpstr;
} }
@ -792,15 +792,15 @@ buildChildString( wp )
wpstr = ""; wpstr = "";
for ( i = 0; i < level.waypoints[wp].children.size; i++ ) for ( i = 0; i < level.waypoints[ wp ].children.size; i++ )
{ {
if ( i != 0 ) if ( i != 0 )
{ {
wpstr = wpstr + "," + level.waypoints[wp].children[i]; wpstr = wpstr + "," + level.waypoints[ wp ].children[ i ];
} }
else else
{ {
wpstr = wpstr + level.waypoints[wp].children[i]; wpstr = wpstr + level.waypoints[ wp ].children[ i ];
} }
} }
@ -814,7 +814,7 @@ buildTypeString( wp )
return ""; return "";
} }
return level.waypoints[wp].type; return level.waypoints[ wp ].type;
} }
destroyOnDeath( hud ) destroyOnDeath( hud )

View File

@ -1,13 +1,13 @@
init() init()
{ {
level.bot_builtins["printconsole"] = ::do_printconsole; level.bot_builtins[ "printconsole" ] = ::do_printconsole;
level.bot_builtins["filewrite"] = ::do_filewrite; level.bot_builtins[ "filewrite" ] = ::do_filewrite;
level.bot_builtins["fileread"] = ::do_fileread; level.bot_builtins[ "fileread" ] = ::do_fileread;
level.bot_builtins["fileexists"] = ::do_fileexists; level.bot_builtins[ "fileexists" ] = ::do_fileexists;
level.bot_builtins["botaction"] = ::do_botaction; level.bot_builtins[ "botaction" ] = ::do_botaction;
level.bot_builtins["botstop"] = ::do_botstop; level.bot_builtins[ "botstop" ] = ::do_botstop;
level.bot_builtins["botmovement"] = ::do_botmovement; level.bot_builtins[ "botmovement" ] = ::do_botmovement;
level.bot_builtins["botmeleeparams"] = ::do_botmeleeparams; level.bot_builtins[ "botmeleeparams" ] = ::do_botmeleeparams;
} }
do_printconsole( s ) do_printconsole( s )