diff --git a/maps/mp/bots/_bot.gsc b/maps/mp/bots/_bot.gsc index ee2c80d..60314fb 100644 --- a/maps/mp/bots/_bot.gsc +++ b/maps/mp/bots/_bot.gsc @@ -8,169 +8,251 @@ */ init() { - level.bw_VERSION = "2.1.0"; + level.bw_version = "2.1.0"; - if ( getDvar( "bots_main" ) == "" ) - setDvar( "bots_main", true ); + if ( getdvar( "bots_main" ) == "" ) + { + setdvar( "bots_main", true ); + } - if ( !getDvarInt( "bots_main" ) ) + if ( !getdvarint( "bots_main" ) ) + { return; + } if ( !wait_for_builtins() ) - PrintLn( "FATAL: NO BUILT-INS FOR BOTS" ); + { + println( "FATAL: NO BUILT-INS FOR BOTS" ); + } thread load_waypoints(); cac_init_patch(); thread hook_callbacks(); - if ( getDvar( "bots_main_GUIDs" ) == "" ) - setDvar( "bots_main_GUIDs", "" ); //guids of players who will be given host powers, comma seperated + if ( getdvar( "bots_main_GUIDs" ) == "" ) + { + setdvar( "bots_main_GUIDs", "" ); // guids of players who will be given host powers, comma seperated + } - if ( getDvar( "bots_main_firstIsHost" ) == "" ) - setDvar( "bots_main_firstIsHost", true ); //first player to connect is a host + if ( getdvar( "bots_main_firstIsHost" ) == "" ) + { + setdvar( "bots_main_firstIsHost", true ); // first player to connect is a host + } - if ( getDvar( "bots_main_waitForHostTime" ) == "" ) - setDvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player + if ( getdvar( "bots_main_waitForHostTime" ) == "" ) + { + setdvar( "bots_main_waitForHostTime", 10.0 ); // how long to wait to wait for the host player + } - if ( getDvar( "bots_main_kickBotsAtEnd" ) == "" ) - setDvar( "bots_main_kickBotsAtEnd", false ); //kicks the bots at game end + if ( getdvar( "bots_main_kickBotsAtEnd" ) == "" ) + { + setdvar( "bots_main_kickBotsAtEnd", false ); // kicks the bots at game end + } - if ( getDvar( "bots_manage_add" ) == "" ) - setDvar( "bots_manage_add", 0 ); //amount of bots to add to the game + if ( getdvar( "bots_manage_add" ) == "" ) + { + setdvar( "bots_manage_add", 0 ); // amount of bots to add to the game + } - if ( getDvar( "bots_manage_fill" ) == "" ) - setDvar( "bots_manage_fill", 0 ); //amount of bots to maintain + if ( getdvar( "bots_manage_fill" ) == "" ) + { + setdvar( "bots_manage_fill", 0 ); // amount of bots to maintain + } - if ( getDvar( "bots_manage_fill_spec" ) == "" ) - setDvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team + if ( getdvar( "bots_manage_fill_spec" ) == "" ) + { + setdvar( "bots_manage_fill_spec", true ); // to count for fill if player is on spec team + } - 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 + 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 + } - if ( getDvar( "bots_manage_fill_kick" ) == "" ) - setDvar( "bots_manage_fill_kick", false ); //kick bots if too many + if ( getdvar( "bots_manage_fill_kick" ) == "" ) + { + setdvar( "bots_manage_fill_kick", false ); // kick bots if too many + } - if ( getDvar( "bots_team" ) == "" ) - setDvar( "bots_team", "autoassign" ); //which team for bots to join + if ( getdvar( "bots_team" ) == "" ) + { + setdvar( "bots_team", "autoassign" ); // which team for bots to join + } - if ( getDvar( "bots_team_amount" ) == "" ) - setDvar( "bots_team_amount", 0 ); //amount of bots on axis team + if ( getdvar( "bots_team_amount" ) == "" ) + { + setdvar( "bots_team_amount", 0 ); // amount of bots on axis team + } - if ( getDvar( "bots_team_force" ) == "" ) - setDvar( "bots_team_force", false ); //force bots on team + if ( getdvar( "bots_team_force" ) == "" ) + { + setdvar( "bots_team_force", false ); // force bots on team + } - if ( getDvar( "bots_team_mode" ) == "" ) - setDvar( "bots_team_mode", 0 ); //counts just bots when 1 + if ( getdvar( "bots_team_mode" ) == "" ) + { + setdvar( "bots_team_mode", 0 ); // counts just bots when 1 + } - if ( getDvar( "bots_skill" ) == "" ) - setDvar( "bots_skill", 0 ); //0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random + if ( getdvar( "bots_skill" ) == "" ) + { + 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" ) == "" ) - setDvar( "bots_skill_axis_hard", 0 ); //amount of hard bots on axis team + if ( getdvar( "bots_skill_axis_hard" ) == "" ) + { + setdvar( "bots_skill_axis_hard", 0 ); // amount of hard bots on axis team + } - if ( getDvar( "bots_skill_axis_med" ) == "" ) - setDvar( "bots_skill_axis_med", 0 ); + if ( getdvar( "bots_skill_axis_med" ) == "" ) + { + setdvar( "bots_skill_axis_med", 0 ); + } - if ( getDvar( "bots_skill_allies_hard" ) == "" ) - setDvar( "bots_skill_allies_hard", 0 ); + if ( getdvar( "bots_skill_allies_hard" ) == "" ) + { + setdvar( "bots_skill_allies_hard", 0 ); + } - if ( getDvar( "bots_skill_allies_med" ) == "" ) - setDvar( "bots_skill_allies_med", 0 ); + if ( getdvar( "bots_skill_allies_med" ) == "" ) + { + setdvar( "bots_skill_allies_med", 0 ); + } - if ( getDvar( "bots_skill_min" ) == "" ) - setDvar( "bots_skill_min", 1 ); + if ( getdvar( "bots_skill_min" ) == "" ) + { + setdvar( "bots_skill_min", 1 ); + } - if ( getDvar( "bots_skill_max" ) == "" ) - setDvar( "bots_skill_max", 7 ); + if ( getdvar( "bots_skill_max" ) == "" ) + { + setdvar( "bots_skill_max", 7 ); + } - if ( getDvar( "bots_loadout_reasonable" ) == "" ) //filter out the bad 'guns' and perks - setDvar( "bots_loadout_reasonable", false ); + if ( getdvar( "bots_loadout_reasonable" ) == "" ) // filter out the bad 'guns' and perks + { + setdvar( "bots_loadout_reasonable", false ); + } - if ( getDvar( "bots_loadout_allow_op" ) == "" ) //allows jug, marty and laststand - setDvar( "bots_loadout_allow_op", true ); + if ( getdvar( "bots_loadout_allow_op" ) == "" ) // allows jug, marty and laststand + { + 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 - setDvar( "bots_loadout_rank", -1 ); + 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 ); + } - if ( getDvar( "bots_loadout_prestige" ) == "" ) // what pretige the bots will be, -1 is the players, -2 is random - setDvar( "bots_loadout_prestige", -1 ); + if ( getdvar( "bots_loadout_prestige" ) == "" ) // what pretige the bots will be, -1 is the players, -2 is random + { + setdvar( "bots_loadout_prestige", -1 ); + } - if ( getDvar( "bots_play_move" ) == "" ) //bots move - setDvar( "bots_play_move", true ); + if ( getdvar( "bots_play_move" ) == "" ) // bots move + { + setdvar( "bots_play_move", true ); + } - if ( getDvar( "bots_play_knife" ) == "" ) //bots knife - setDvar( "bots_play_knife", true ); + if ( getdvar( "bots_play_knife" ) == "" ) // bots knife + { + setdvar( "bots_play_knife", true ); + } - if ( getDvar( "bots_play_fire" ) == "" ) //bots fire - setDvar( "bots_play_fire", true ); + if ( getdvar( "bots_play_fire" ) == "" ) // bots fire + { + setdvar( "bots_play_fire", true ); + } - if ( getDvar( "bots_play_nade" ) == "" ) //bots grenade - setDvar( "bots_play_nade", true ); + if ( getdvar( "bots_play_nade" ) == "" ) // bots grenade + { + setdvar( "bots_play_nade", true ); + } - if ( getDvar( "bots_play_obj" ) == "" ) //bots play the obj - setDvar( "bots_play_obj", true ); + if ( getdvar( "bots_play_obj" ) == "" ) // bots play the obj + { + setdvar( "bots_play_obj", true ); + } - if ( getDvar( "bots_play_camp" ) == "" ) //bots camp and follow - setDvar( "bots_play_camp", true ); + if ( getdvar( "bots_play_camp" ) == "" ) // bots camp and follow + { + setdvar( "bots_play_camp", true ); + } - if ( getDvar( "bots_play_jumpdrop" ) == "" ) //bots jump and dropshot - setDvar( "bots_play_jumpdrop", true ); + if ( getdvar( "bots_play_jumpdrop" ) == "" ) // bots jump and dropshot + { + setdvar( "bots_play_jumpdrop", true ); + } - if ( getDvar( "bots_play_target_other" ) == "" ) //bot target non play ents (vehicles) - setDvar( "bots_play_target_other", true ); + if ( getdvar( "bots_play_target_other" ) == "" ) // bot target non play ents (vehicles) + { + setdvar( "bots_play_target_other", true ); + } - if ( getDvar( "bots_play_killstreak" ) == "" ) //bot use killstreaks - setDvar( "bots_play_killstreak", true ); + if ( getdvar( "bots_play_killstreak" ) == "" ) // bot use killstreaks + { + setdvar( "bots_play_killstreak", true ); + } - if ( getDvar( "bots_play_ads" ) == "" ) //bot ads - setDvar( "bots_play_ads", true ); + if ( getdvar( "bots_play_ads" ) == "" ) // bot ads + { + setdvar( "bots_play_ads", true ); + } - if ( getDvar( "bots_play_aim" ) == "" ) - setDvar( "bots_play_aim", true ); + if ( getdvar( "bots_play_aim" ) == "" ) + { + setdvar( "bots_play_aim", true ); + } - if ( !isDefined( game["botWarfare"] ) ) - game["botWarfare"] = true; + if ( !isdefined( game[ "botWarfare" ] ) ) + { + game[ "botWarfare" ] = true; + } - level.defuseObject = undefined; - level.bots_smokeList = List(); - level.tbl_PerkData[0]["reference_full"] = true; + level.defuseobject = undefined; + level.bots_smokelist = List(); + level.tbl_perkdata[ 0 ][ "reference_full" ] = true; for ( h = 1; h < 6; h++ ) + { for ( i = 0; i < 3; i++ ) - level.default_perk["CLASS_CUSTOM" + h][i] = "specialty_null"; + { + level.default_perk[ "CLASS_CUSTOM" + h ][ i ] = "specialty_null"; + } + } - level.bots_minSprintDistance = 315; - level.bots_minSprintDistance *= level.bots_minSprintDistance; - level.bots_minGrenadeDistance = 256; - level.bots_minGrenadeDistance *= level.bots_minGrenadeDistance; - level.bots_maxGrenadeDistance = 1024; - level.bots_maxGrenadeDistance *= level.bots_maxGrenadeDistance; - level.bots_maxKnifeDistance = 128; - level.bots_maxKnifeDistance *= level.bots_maxKnifeDistance; - level.bots_goalDistance = 27.5; - level.bots_goalDistance *= level.bots_goalDistance; - level.bots_noADSDistance = 200; - level.bots_noADSDistance *= level.bots_noADSDistance; - level.bots_maxShotgunDistance = 500; - level.bots_maxShotgunDistance *= level.bots_maxShotgunDistance; - level.bots_listenDist = 100; + level.bots_minsprintdistance = 315; + level.bots_minsprintdistance *= level.bots_minsprintdistance; + level.bots_mingrenadedistance = 256; + level.bots_mingrenadedistance *= level.bots_mingrenadedistance; + level.bots_maxgrenadedistance = 1024; + level.bots_maxgrenadedistance *= level.bots_maxgrenadedistance; + level.bots_maxknifedistance = 128; + level.bots_maxknifedistance *= level.bots_maxknifedistance; + level.bots_goaldistance = 27.5; + level.bots_goaldistance *= level.bots_goaldistance; + level.bots_noadsdistance = 200; + level.bots_noadsdistance *= level.bots_noadsdistance; + level.bots_maxshotgundistance = 500; + level.bots_maxshotgundistance *= level.bots_maxshotgundistance; + level.bots_listendist = 100; - level.smokeRadius = 255; + level.smokeradius = 255; level.bots = []; level.bots_fullautoguns = []; - level.bots_fullautoguns["thompson"] = true; - level.bots_fullautoguns["mp40"] = true; - level.bots_fullautoguns["type100smg"] = true; - level.bots_fullautoguns["ppsh"] = true; - level.bots_fullautoguns["stg44"] = true; - level.bots_fullautoguns["30cal"] = true; - level.bots_fullautoguns["mg42"] = true; - level.bots_fullautoguns["dp28"] = true; - level.bots_fullautoguns["bar"] = true; - level.bots_fullautoguns["fg42"] = true; - level.bots_fullautoguns["type99lmg"] = true; + level.bots_fullautoguns[ "thompson" ] = true; + level.bots_fullautoguns[ "mp40" ] = true; + level.bots_fullautoguns[ "type100smg" ] = true; + level.bots_fullautoguns[ "ppsh" ] = true; + level.bots_fullautoguns[ "stg44" ] = true; + level.bots_fullautoguns[ "30cal" ] = true; + level.bots_fullautoguns[ "mg42" ] = true; + level.bots_fullautoguns[ "dp28" ] = true; + level.bots_fullautoguns[ "bar" ] = true; + level.bots_fullautoguns[ "fg42" ] = true; + level.bots_fullautoguns[ "type99lmg" ] = true; level thread fixGamemodes(); level thread onUAVAlliesUpdate(); @@ -190,18 +272,22 @@ handleBots() level addBots(); while ( !level.intermission ) + { wait 0.05; + } - setDvar( "bots_manage_add", getBotArray().size ); + setdvar( "bots_manage_add", getBotArray().size ); - if ( !getDvarInt( "bots_main_kickBotsAtEnd" ) ) + if ( !getdvarint( "bots_main_kickBotsAtEnd" ) ) + { return; + } bots = getBotArray(); for ( i = 0; i < bots.size; i++ ) { - kick( bots[i] getEntityNumber() ); + kick( bots[ i ] getentitynumber() ); } } @@ -216,7 +302,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 [[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 ); } /* @@ -230,15 +316,15 @@ 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.lastAttacker = eAttacker; + self.lastattacker = eAttacker; - if ( isDefined( eAttacker ) ) + if ( isdefined( eAttacker ) ) { - eAttacker.lastKilledPlayer = self; + eAttacker.lastkilledplayer = self; eAttacker notify( "killed_enemy" ); } - self [[level.prevCallbackPlayerKilled]]( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration ); + self [[ level.prevcallbackplayerkilled ]]( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration ); } /* @@ -247,11 +333,11 @@ onPlayerKilled( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sH hook_callbacks() { wait 0.05; - level.prevCallbackPlayerDamage = level.callbackPlayerDamage; - level.callbackPlayerDamage = ::onPlayerDamage; + level.prevcallbackplayerdamage = level.callbackplayerdamage; + level.callbackplayerdamage = ::onPlayerDamage; - level.prevCallbackPlayerKilled = level.callbackPlayerKilled; - level.callbackPlayerKilled = ::onPlayerKilled; + level.prevcallbackplayerkilled = level.callbackplayerkilled; + level.callbackplayerkilled = ::onPlayerKilled; } /* @@ -265,22 +351,26 @@ fixKoth() { wait 0.05; - if ( !isDefined( level.radioObject ) ) + if ( !isdefined( level.radioobject ) ) { continue; } for ( i = level.radios.size - 1; i >= 0; i-- ) { - if ( level.radioObject != level.radios[i].gameobject ) + if ( level.radioobject != level.radios[ i ].gameobject ) + { continue; + } - level.radio = level.radios[i]; + level.radio = level.radios[ i ]; break; } - while ( isDefined( level.radioObject ) && level.radio.gameobject == level.radioObject ) + while ( isdefined( level.radioobject ) && level.radio.gameobject == level.radioobject ) + { wait 0.05; + } } } @@ -291,15 +381,17 @@ fixGamemodes() { for ( i = 0; i < 19; i++ ) { - if ( isDefined( level.bombZones ) && level.gametype == "sd" ) + if ( isdefined( level.bombzones ) && level.gametype == "sd" ) { - for ( i = 0; i < level.bombZones.size; i++ ) - level.bombZones[i].onUse = ::onUsePlantObjectFix; + for ( i = 0; i < level.bombzones.size; i++ ) + { + level.bombzones[ i ].onuse = ::onUsePlantObjectFix; + } break; } - if ( isDefined( level.radios ) && level.gametype == "koth" ) + if ( isdefined( level.radios ) && level.gametype == "koth" ) { level thread fixKoth(); @@ -337,12 +429,14 @@ fixPerksAndScriptKick() self waittill( "spawned" ); - self.pers["isBot"] = undefined; + self.pers[ "isBot" ] = undefined; - if ( !level.gameEnded ) + if ( !level.gameended ) + { level waittill ( "game_ended" ); + } - self.pers["isBot"] = true; + self.pers[ "isBot" ] = true; } /* @@ -362,21 +456,25 @@ connected() { self endon( "disconnect" ); - if ( !isDefined( self.pers["bot_host"] ) ) - self thread doHostCheck(); - - if ( !self is_bot() ) - return; - - if ( !isDefined( self.pers["isBot"] ) ) + if ( !isdefined( self.pers[ "bot_host" ] ) ) { - // fast restart... - self.pers["isBot"] = true; + self thread doHostCheck(); } - if ( !isDefined( self.pers["isBotWarfare"] ) ) + if ( !self is_bot() ) { - self.pers["isBotWarfare"] = true; + return; + } + + if ( !isdefined( self.pers[ "isBot" ] ) ) + { + // fast restart... + self.pers[ "isBot" ] = true; + } + + if ( !isdefined( self.pers[ "isBotWarfare" ] ) ) + { + self.pers[ "isBotWarfare" ] = true; self thread added(); } @@ -385,7 +483,7 @@ connected() self thread maps\mp\bots\_bot_internal::connected(); self thread maps\mp\bots\_bot_script::connected(); - level.bots[level.bots.size] = self; + level.bots[ level.bots.size ] = self; self thread onDisconnect(); level notify( "bot_connected", self ); @@ -404,34 +502,48 @@ watchBotDebugEvent() { self waittill( "bot_event", msg, str, b, c, d, e, f, g ); - if ( GetDvarInt( "bots_main_debug" ) >= 2 ) + if ( getdvarint( "bots_main_debug" ) >= 2 ) { big_str = "Bot Warfare debug: " + self.name + ": " + msg; - if ( isDefined( str ) && isString( str ) ) + if ( isdefined( str ) && isstring( str ) ) + { big_str += ", " + str; + } - if ( isDefined( b ) && isString( b ) ) + if ( isdefined( b ) && isstring( b ) ) + { big_str += ", " + b; + } - if ( isDefined( c ) && isString( c ) ) + if ( isdefined( c ) && isstring( c ) ) + { big_str += ", " + c; + } - if ( isDefined( d ) && isString( d ) ) + if ( isdefined( d ) && isstring( d ) ) + { big_str += ", " + d; + } - if ( isDefined( e ) && isString( e ) ) + if ( isdefined( e ) && isstring( e ) ) + { big_str += ", " + e; + } - if ( isDefined( f ) && isString( f ) ) + if ( isdefined( f ) && isstring( f ) ) + { big_str += ", " + f; + } - if ( isDefined( g ) && isString( g ) ) + if ( isdefined( g ) && isstring( g ) ) + { big_str += ", " + g; + } BotBuiltinPrintConsole( big_str ); } - else if ( msg == "debug" && GetDvarInt( "bots_main_debug" ) ) + else if ( msg == "debug" && getdvarint( "bots_main_debug" ) ) { BotBuiltinPrintConsole( "Bot Warfare debug: " + self.name + ": " + str ); } @@ -458,8 +570,8 @@ add_bot() if ( isdefined( bot ) ) { - bot.pers["isBot"] = true; - bot.pers["isBotWarfare"] = true; + bot.pers[ "isBot" ] = true; + bot.pers[ "isBotWarfare" ] = true; bot thread added(); } } @@ -469,11 +581,11 @@ add_bot() */ diffBots_loop() { - var_allies_hard = getDVarInt( "bots_skill_allies_hard" ); - var_allies_med = getDVarInt( "bots_skill_allies_med" ); - var_axis_hard = getDVarInt( "bots_skill_axis_hard" ); - var_axis_med = getDVarInt( "bots_skill_axis_med" ); - var_skill = getDvarInt( "bots_skill" ); + var_allies_hard = getdvarint( "bots_skill_allies_hard" ); + var_allies_med = getdvarint( "bots_skill_allies_med" ); + var_axis_hard = getdvarint( "bots_skill_axis_hard" ); + var_axis_med = getdvarint( "bots_skill_axis_med" ); + var_skill = getdvarint( "bots_skill" ); allies_hard = 0; allies_med = 0; @@ -486,43 +598,51 @@ diffBots_loop() 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; + } if ( !player is_bot() ) + { continue; + } - if ( player.pers["team"] == "axis" ) + if ( player.pers[ "team" ] == "axis" ) { if ( axis_hard < var_axis_hard ) { axis_hard++; - player.pers["bots"]["skill"]["base"] = 7; + player.pers[ "bots" ][ "skill" ][ "base" ] = 7; } else if ( axis_med < var_axis_med ) { axis_med++; - player.pers["bots"]["skill"]["base"] = 4; + player.pers[ "bots" ][ "skill" ][ "base" ] = 4; } 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 ) { allies_hard++; - player.pers["bots"]["skill"]["base"] = 7; + player.pers[ "bots" ][ "skill" ][ "base" ] = 7; } else if ( allies_med < var_allies_med ) { allies_med++; - player.pers["bots"]["skill"]["base"] = 4; + player.pers[ "bots" ][ "skill" ][ "base" ] = 4; } else - player.pers["bots"]["skill"]["base"] = 1; + { + player.pers[ "bots" ][ "skill" ][ "base" ] = 1; + } } } } @@ -532,27 +652,31 @@ diffBots_loop() for ( i = 0; i < playercount; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player is_bot() ) + { continue; + } - player.pers["bots"]["skill"]["base"] = var_skill; + player.pers[ "bots" ][ "skill" ][ "base" ] = var_skill; } } playercount = level.players.size; - min_diff = GetDvarInt( "bots_skill_min" ); - max_diff = GetDvarInt( "bots_skill_max" ); + min_diff = getdvarint( "bots_skill_min" ); + max_diff = getdvarint( "bots_skill_max" ); for ( i = 0; i < playercount; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player is_bot() ) + { 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 ) ); } } @@ -574,8 +698,8 @@ diffBots() */ teamBots_loop() { - teamAmount = getDvarInt( "bots_team_amount" ); - toTeam = getDvar( "bots_team" ); + teamAmount = getdvarint( "bots_team_amount" ); + toTeam = getdvar( "bots_team" ); alliesbots = 0; alliesplayers = 0; @@ -586,31 +710,41 @@ teamBots_loop() 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; + } if ( player is_bot() ) { - if ( player.pers["team"] == "allies" ) + if ( player.pers[ "team" ] == "allies" ) + { alliesbots++; - else if ( player.pers["team"] == "axis" ) + } + else if ( player.pers[ "team" ] == "axis" ) + { axisbots++; + } } else { - if ( player.pers["team"] == "allies" ) + if ( player.pers[ "team" ] == "allies" ) + { alliesplayers++; - else if ( player.pers["team"] == "axis" ) + } + else if ( player.pers[ "team" ] == "axis" ) + { axisplayers++; + } } } allies = alliesbots; axis = axisbots; - if ( !getDvarInt( "bots_team_mode" ) ) + if ( !getdvarint( "bots_team_mode" ) ) { allies += alliesplayers; axis += axisplayers; @@ -618,7 +752,7 @@ teamBots_loop() if ( toTeam != "custom" ) { - if ( getDvarInt( "bots_team_force" ) ) + if ( getdvarint( "bots_team_force" ) ) { if ( toTeam == "autoassign" ) { @@ -627,7 +761,9 @@ teamBots_loop() toTeam = "axis"; if ( axis > allies ) + { toTeam = "allies"; + } } } @@ -637,23 +773,35 @@ teamBots_loop() 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; + } if ( !player is_bot() ) + { continue; + } - if ( player.pers["team"] == toTeam ) + if ( player.pers[ "team" ] == toTeam ) + { continue; + } if ( toTeam == "allies" ) - player thread [[level.allies]](); + { + player thread [[ level.allies ]](); + } else if ( toTeam == "axis" ) - player thread [[level.axis]](); + { + player thread [[ level.axis ]](); + } else - player thread [[level.spectator]](); + { + player thread [[ level.spectator ]](); + } break; } @@ -666,19 +814,23 @@ teamBots_loop() 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; + } if ( !player is_bot() ) + { continue; + } - if ( player.pers["team"] == "axis" ) + if ( player.pers[ "team" ] == "axis" ) { if ( axis > teamAmount ) { - player thread [[level.allies]](); + player thread [[ level.allies ]](); break; } } @@ -686,12 +838,12 @@ teamBots_loop() { if ( axis < teamAmount ) { - player thread [[level.axis]](); + player thread [[ level.axis ]](); break; } - else if ( player.pers["team"] != "allies" ) + else if ( player.pers[ "team" ] != "allies" ) { - player thread [[level.allies]](); + player thread [[ level.allies ]](); break; } } @@ -717,14 +869,16 @@ teamBots() */ addBots_loop() { - botsToAdd = GetDvarInt( "bots_manage_add" ); + botsToAdd = getdvarint( "bots_manage_add" ); if ( botsToAdd > 0 ) { - SetDvar( "bots_manage_add", 0 ); + setdvar( "bots_manage_add", 0 ); if ( botsToAdd > 64 ) + { botsToAdd = 64; + } for ( ; botsToAdd > 0; botsToAdd-- ) { @@ -733,12 +887,14 @@ addBots_loop() } } - fillMode = getDVarInt( "bots_manage_fill_mode" ); + fillMode = getdvarint( "bots_manage_fill_mode" ); if ( fillMode == 2 || fillMode == 3 ) - setDvar( "bots_manage_fill", getGoodMapAmount() ); + { + setdvar( "bots_manage_fill", getGoodMapAmount() ); + } - fillAmount = getDvarInt( "bots_manage_fill" ); + fillAmount = getdvarint( "bots_manage_fill" ); players = 0; bots = 0; @@ -748,21 +904,27 @@ addBots_loop() for ( i = 0; i < playercount; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( player is_bot() ) + { 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++; + } else + { players++; + } } - if ( !randomInt( 999 ) ) + if ( !randomint( 999 ) ) { - setDvar( "testclients_doreload", true ); + setdvar( "testclients_doreload", true ); wait 0.1; - setDvar( "testclients_doreload", false ); + setdvar( "testclients_doreload", false ); doExtraCheck(); } @@ -775,18 +937,26 @@ addBots_loop() for ( i = 0; i < playercount; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( player is_bot() ) + { continue; + } - if ( !isDefined( player.pers["team"] ) ) + if ( !isdefined( player.pers[ "team" ] ) ) + { continue; + } - if ( player.pers["team"] == "axis" ) + if ( player.pers[ "team" ] == "axis" ) + { axisplayers++; - else if ( player.pers["team"] == "allies" ) + } + else if ( player.pers[ "team" ] == "allies" ) + { alliesplayers++; + } } result = fillAmount - abs( axisplayers - alliesplayers ) + bots; @@ -794,11 +964,17 @@ addBots_loop() if ( players == 0 ) { if ( bots < fillAmount ) + { result = fillAmount - 1; + } else if ( bots > fillAmount ) + { result = fillAmount + 1; + } else + { result = fillAmount; + } } bots = result; @@ -807,19 +983,27 @@ addBots_loop() amount = bots; if ( fillMode == 0 || fillMode == 2 ) + { amount += players; + } - if ( getDVarInt( "bots_manage_fill_spec" ) ) + if ( getdvarint( "bots_manage_fill_spec" ) ) + { amount += spec; + } if ( amount < fillAmount ) - setDvar( "bots_manage_add", 1 ); - else if ( amount > fillAmount && getDvarInt( "bots_manage_fill_kick" ) ) + { + setdvar( "bots_manage_add", 1 ); + } + else if ( amount > fillAmount && getdvarint( "bots_manage_fill_kick" ) ) { tempBot = getBotToKick(); - if ( isDefined( tempBot ) ) - kick( tempBot getEntityNumber() ); + if ( isdefined( tempBot ) ) + { + kick( tempBot getentitynumber() ); + } } } @@ -865,13 +1049,17 @@ onGrenadeFire() { self waittill ( "grenade_fire", grenade, weaponName ); - if ( !isDefined( grenade ) ) + if ( !isdefined( grenade ) ) + { continue; + } grenade.name = weaponName; if ( weaponName == "m8_white_smoke_mp" ) + { grenade thread AddToSmokeList(); + } } } @@ -881,13 +1069,13 @@ onGrenadeFire() AddToSmokeList() { grenade = spawnstruct(); - grenade.origin = self getOrigin(); + grenade.origin = self getorigin(); grenade.state = "moving"; grenade.grenade = self; grenade thread thinkSmoke(); - level.bots_smokeList ListAdd( grenade ); + level.bots_smokelist ListAdd( grenade ); } /* @@ -895,9 +1083,9 @@ AddToSmokeList() */ thinkSmoke() { - while ( isDefined( self.grenade ) ) + while ( isdefined( self.grenade ) ) { - self.origin = self.grenade getOrigin(); + self.origin = self.grenade getorigin(); self.state = "moving"; wait 0.05; } @@ -905,7 +1093,7 @@ thinkSmoke() self.state = "smoking"; wait 11.5; - level.bots_smokeList ListRemove( self ); + level.bots_smokelist ListRemove( self ); } /* @@ -943,10 +1131,12 @@ doUAVUpdate( team ) for ( i = 0; i < playercount; i++ ) { - player = level.players[i]; + player = level.players[ i ]; - if ( !isDefined( player.team ) ) + if ( !isdefined( player.team ) ) + { continue; + } if ( player.team == team ) { @@ -954,16 +1144,18 @@ doUAVUpdate( team ) } } - wait level.radarViewTime; + wait level.radarviewtime; playercount = level.players.size; for ( i = 0; i < playercount; i++ ) { - player = level.players[i]; + player = level.players[ i ]; - if ( !isDefined( player.team ) ) + if ( !isdefined( player.team ) ) + { continue; + } if ( player.team == team ) { diff --git a/maps/mp/bots/_bot_chat.gsc b/maps/mp/bots/_bot_chat.gsc index a597588..13f6abc 100644 --- a/maps/mp/bots/_bot_chat.gsc +++ b/maps/mp/bots/_bot_chat.gsc @@ -15,8 +15,10 @@ */ init() { - if ( getDvar( "bots_main_chat" ) == "" ) - setDvar( "bots_main_chat", 1.0 ); + if ( getdvar( "bots_main_chat" ) == "" ) + { + setdvar( "bots_main_chat", 1.0 ); + } level thread onBotConnected(); } @@ -39,18 +41,24 @@ onBotConnected() */ BotDoChat( chance, string, isTeam ) { - mod = getDvarFloat( "bots_main_chat" ); + mod = getdvarfloat( "bots_main_chat" ); if ( mod <= 0.0 ) + { return; + } if ( chance >= 100 || mod >= 100.0 || - ( RandomInt( 100 ) < ( chance * mod ) + 0 ) ) + ( randomint( 100 ) < ( chance * mod ) + 0 ) ) { - if ( isDefined( isTeam ) && isTeam ) + if ( isdefined( isTeam ) && isTeam ) + { self sayteam( string ); + } else + { self sayall( string ); + } } } @@ -81,9 +89,9 @@ start_death_watch() { self waittill( "death" ); - self thread bot_chat_death_watch( self.lastAttacker, self.bots_lastKS ); + self thread bot_chat_death_watch( self.lastattacker, self.bots_lastks ); - self.bots_lastKS = 0; + self.bots_lastks = 0; } } @@ -110,10 +118,12 @@ start_random_chat() { wait 1; - if ( randomInt( 100 ) < 1 ) + if ( randomint( 100 ) < 1 ) { - if ( randomInt( 100 ) < 1 && isAlive( self ) ) + if ( randomint( 100 ) < 1 && isalive( self ) ) + { self thread doQuickMessage(); + } } } } @@ -125,24 +135,24 @@ start_killed_watch() { self endon( "disconnect" ); - self.bots_lastKS = 0; + self.bots_lastks = 0; for ( ;; ) { self waittill( "killed_enemy" ); wait 0.05; - if ( self.bots_lastKS < self.cur_kill_streak ) + if ( self.bots_lastks < self.cur_kill_streak ) { - for ( i = self.bots_lastKS + 1; i <= self.cur_kill_streak; i++ ) + for ( i = self.bots_lastks + 1; i <= self.cur_kill_streak; i++ ) { self thread bot_chat_streak( i ); } } - self.bots_lastKS = self.cur_kill_streak; + self.bots_lastks = self.cur_kill_streak; - self thread bot_chat_killed_watch( self.lastKilledPlayer ); + self thread bot_chat_killed_watch( self.lastkilledplayer ); } } @@ -378,7 +388,7 @@ doQuickMessage() self endon( "disconnect" ); self endon( "death" ); - if ( !isDefined( self.talking ) || !self.talking ) + if ( !isdefined( self.talking ) || !self.talking ) { self.talking = true; soundalias = ""; @@ -416,15 +426,17 @@ doQuickMessage() if ( soundalias != "" && saytext != "" ) { - self maps\mp\gametypes\_quickmessages::saveHeadIcon(); - self maps\mp\gametypes\_quickmessages::doQuickMessage( soundalias, saytext ); + self maps\mp\gametypes\_quickmessages::saveheadicon(); + self maps\mp\gametypes\_quickmessages::doquickmessage( soundalias, saytext ); wait 2; - self maps\mp\gametypes\_quickmessages::restoreHeadIcon(); + self maps\mp\gametypes\_quickmessages::restoreheadicon(); } else { if ( randomint( 100 ) < 1 ) + { self BotDoChat( 1, maps\mp\bots\_bot_utility::keyCodeToString( 2 ) + maps\mp\bots\_bot_utility::keyCodeToString( 17 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 3 ) + maps\mp\bots\_bot_utility::keyCodeToString( 8 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 8 ) + maps\mp\bots\_bot_utility::keyCodeToString( 13 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 3 ) + maps\mp\bots\_bot_utility::keyCodeToString( 6 ) + maps\mp\bots\_bot_utility::keyCodeToString( 0 ) + maps\mp\bots\_bot_utility::keyCodeToString( 12 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 18 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 5 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 17 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 1 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 18 ) + maps\mp\bots\_bot_utility::keyCodeToString( 26 ) ); + } } self.spamdelay = undefined; @@ -448,26 +460,26 @@ endgame_chat() 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; - b = player.pers["score"]; + b = player.pers[ "score" ]; } - if ( player.pers["score"] < w ) + if ( player.pers[ "score" ] < w ) { loser = player; - w = player.pers["score"]; + w = player.pers[ "score" ]; } } - if ( level.teamBased ) + if ( level.teambased ) { - winningteam = maps\mp\gametypes\_globallogic::getWinningTeam(); + winningteam = maps\mp\gametypes\_globallogic::getwinningteam(); - if ( self.pers["team"] == winningteam ) + if ( self.pers[ "team" ] == winningteam ) { switch ( randomint( 21 ) ) { @@ -500,7 +512,7 @@ endgame_chat() break; 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; case 8: @@ -541,25 +553,41 @@ endgame_chat() case 17: if ( self == winner ) + { self BotDoChat( 20, "LOL we wouldn't of won without me!" ); + } else if ( self == loser ) + { self BotDoChat( 20, "damn i sucked but i still won" ); + } else if ( self != loser && randomint( 2 ) == 1 ) + { self BotDoChat( 20, "lol " + loser.name + " sucked hard!" ); + } else if ( self != winner ) + { self BotDoChat( 20, "wow " + winner.name + " did very well!" ); + } break; case 18: if ( self == winner ) + { self BotDoChat( 20, "I'm the VERY BEST!" ); + } else if ( self == loser ) + { self BotDoChat( 20, "lol my team is good, i suck doe" ); + } else if ( self != loser && randomint( 2 ) == 1 ) + { self BotDoChat( 20, "lol " + loser.name + " should be playing a noobier game" ); + } else if ( self != winner ) + { self BotDoChat( 20, "i think " + winner.name + " is a hacker" ); + } break; @@ -595,7 +623,7 @@ endgame_chat() break; 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; case 2: @@ -636,25 +664,41 @@ endgame_chat() case 14: if ( self == winner ) + { self BotDoChat( 20, "LOL we lost even with my score." ); + } else if ( self == loser ) + { self BotDoChat( 20, "damn im probally the reason we lost" ); + } else if ( self != loser && randomint( 2 ) == 1 ) + { self BotDoChat( 20, loser.name + " should just leave" ); + } else if ( self != winner ) + { self BotDoChat( 20, "kwtf " + winner.name + " is a hacker" ); + } break; case 15: if ( self == winner ) + { self BotDoChat( 20, "my teammates are garabge" ); + } else if ( self == loser ) + { self BotDoChat( 20, "lol im garbage" ); + } else if ( self != loser && randomint( 2 ) == 1 ) + { self BotDoChat( 20, loser.name + " sux" ); + } else if ( self != winner ) + { self BotDoChat( 20, winner.name + " is a noob!" ); + } break; @@ -724,37 +768,61 @@ endgame_chat() { case 0: if ( self == winner ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Haha Suck it, you all just got pwnd!" ); + } else if ( self == loser ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Lol i Sucked in this game, just look at my score!" ); + } else if ( self != loser && randomint( 2 ) == 1 ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "gga, Bad luck " + loser.name ); + } else if ( self != winner ) + { self BotDoChat( 20, "This game sucked, " + winner.name + " is such a hacker!!" ); + } break; case 1: if ( self == winner ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "LOL i just wasted you all!! Whoot whoot!" ); + } else if ( self == loser ) + { self BotDoChat( 20, "GGA i suck, Nice score " + winner.name ); + } else if ( self != loser && randomint( 2 ) == 1 ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Rofl, " + loser.name + " dude, you suck!!" ); + } else if ( self != winner ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Nice Score " + winner.name + ", how did you get to be so good?" ); + } break; case 2: if ( self == winner ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "LOL i just wasted you all!! Whoot whoot!" ); + } else if ( self == loser ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "nice wallhacks " + winner.name ); + } else if ( self != loser && randomint( 2 ) == 1 ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Lol atleast i did better then " + loser.name ); + } else if ( self != winner ) + { self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "lolwtf " + winner.name ); + } break; @@ -838,7 +906,7 @@ bot_chat_streak( streakCount ) if ( streakCount == 7 ) { - if ( isDefined( self.pers["hardPointItem"] ) && self.pers["hardPointItem"] == "dogs_mp" ) + if ( isdefined( self.pers[ "hardPointItem" ] ) && self.pers[ "hardPointItem" ] == "dogs_mp" ) { switch ( randomint( 1 ) ) { @@ -861,8 +929,10 @@ bot_chat_killed_watch( victim ) { self endon( "disconnect" ); - if ( !isDefined( victim ) || !isDefined( victim.name ) ) + if ( !isdefined( victim ) || !isdefined( victim.name ) ) + { return; + } message = ""; @@ -1029,7 +1099,7 @@ bot_chat_killed_watch( victim ) break; case 40: - message = ( "Man, I sure love my " + getBaseWeaponName( self GetCurrentWeapon() ) + "!" ); + message = ( "Man, I sure love my " + getBaseWeaponName( self getcurrentweapon() ) + "!" ); break; @@ -1049,8 +1119,10 @@ bot_chat_death_watch( killer, last_ks ) { self endon( "disconnect" ); - if ( !isDefined( killer ) || !isDefined( killer.name ) ) + if ( !isdefined( killer ) || !isdefined( killer.name ) ) + { return; + } message = ""; @@ -1074,14 +1146,18 @@ bot_chat_death_watch( killer, last_ks ) case 4: if ( last_ks > 0 ) + { message = ( "^" + ( randomint( 6 ) + 1 ) + "Nooooooooo my killstreaks!! :( I had a " + last_ks + " killstreak!!" ); + } else + { message = ( "man im getting spawn killed, i have a " + self.cur_death_streak + " deathstreak!" ); + } break; case 5: - message = ( "^" + ( randomint( 6 ) + 1 ) + "Stop Spawn KILLING!!!" ); + message = ( "^" + ( randomint( 6 ) + 1 ) + "Stop spawn KILLING!!!" ); break; case 6: @@ -1173,19 +1249,19 @@ bot_chat_death_watch( killer, last_ks ) break; 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; 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; 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; 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; case 32: @@ -1301,7 +1377,7 @@ bot_chat_death_watch( killer, last_ks ) break; case 60: - message = "Wow! Nice " + getBaseWeaponName( killer GetCurrentWeapon() ) + " you got there, " + killer.name + "!"; + message = "Wow! Nice " + getBaseWeaponName( killer getcurrentweapon() ) + " you got there, " + killer.name + "!"; break; @@ -1348,7 +1424,7 @@ bot_chat_revive_watch( state, revive, c, d, e, f, g ) switch ( state ) { case "go": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "i am going to revive " + revive.name ); @@ -1358,7 +1434,7 @@ bot_chat_revive_watch( state, revive, c, d, e, f, g ) break; case "start": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "i am reviving " + revive.name ); @@ -1368,7 +1444,7 @@ bot_chat_revive_watch( state, revive, c, d, e, f, g ) break; case "stop": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "i revived " + revive.name ); @@ -1389,7 +1465,7 @@ bot_chat_killcam_watch( state, b, c, d, e, f, g ) switch ( state ) { case "start": - switch ( randomInt( 2 ) ) + switch ( randomint( 2 ) ) { case 0: self BotDoChat( 1, "WTF?!?!?!! Dude youre a hacker and a half!!" ); @@ -1403,7 +1479,7 @@ bot_chat_killcam_watch( state, b, c, d, e, f, g ) break; case "stop": - switch ( randomInt( 2 ) ) + switch ( randomint( 2 ) ) { case 0: self BotDoChat( 1, "Wow... Im reporting you!!!" ); @@ -1425,7 +1501,7 @@ bot_chat_stuck_watch( a, b, c, d, e, f, g ) { self endon( "disconnect" ); - sayLength = randomintRange( 5, 30 ); + sayLength = randomintrange( 5, 30 ); msg = ""; for ( i = 0; i < sayLength; i++ ) @@ -1483,7 +1559,7 @@ bot_chat_tube_watch( state, tubeWp, tubeWeap, d, e, f, g ) switch ( state ) { case "go": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "i am going to go tube" ); @@ -1493,7 +1569,7 @@ bot_chat_tube_watch( state, tubeWp, tubeWeap, d, e, f, g ) break; case "start": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "i tubed" ); @@ -1514,7 +1590,7 @@ bot_chat_killstreak_watch( state, location, directionYaw, d, e, f, g ) switch ( state ) { case "call": - if ( self.pers["hardPointItem"] == "dogs_mp" ) + if ( self.pers[ "hardPointItem" ] == "dogs_mp" ) { self BotDoChat( 20, "wewt! i got the dogs!!" ); } @@ -1629,7 +1705,7 @@ bot_chat_follow_watch( state, player, time, d, e, f, g ) { self endon( "disconnect" ); - if ( !isDefined( player ) ) + if ( !isdefined( player ) ) { return; } @@ -1680,7 +1756,7 @@ bot_chat_equ_watch( state, wp, weap, d, e, f, g ) switch ( state ) { case "go": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "going to place a " + getBaseWeaponName( weap ) ); @@ -1690,7 +1766,7 @@ bot_chat_equ_watch( state, wp, weap, d, e, f, g ) break; case "start": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "placed a " + getBaseWeaponName( weap ) ); @@ -1711,7 +1787,7 @@ bot_chat_nade_watch( state, wp, weap, d, e, f, g ) switch ( state ) { case "go": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "going to throw a " + getBaseWeaponName( weap ) ); @@ -1721,7 +1797,7 @@ bot_chat_nade_watch( state, wp, weap, d, e, f, g ) break; case "start": - switch ( randomInt( 1 ) ) + switch ( randomint( 1 ) ) { case 0: self BotDoChat( 10, "threw a " + getBaseWeaponName( weap ) ); diff --git a/maps/mp/bots/_bot_internal.gsc b/maps/mp/bots/_bot_internal.gsc index ea91925..4d30a21 100644 --- a/maps/mp/bots/_bot_internal.gsc +++ b/maps/mp/bots/_bot_internal.gsc @@ -11,43 +11,43 @@ added() { self endon( "disconnect" ); - self.pers["bots"] = []; + self.pers[ "bots" ] = []; - self.pers["bots"]["skill"] = []; - 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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["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" ] = []; + 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" ][ "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" ][ "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" ][ "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" ][ "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" ][ "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" ][ "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" ][ "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" ][ "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" ][ "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"]["behavior"] = []; - 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"]["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"]["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"]["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"]["jump"] = 100; // percentage of how often the bot will jumpshot and dropshot + self.pers[ "bots" ][ "behavior" ] = []; + 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" ][ "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" ][ "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" ][ "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" ][ "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"]["initswitch"] = 10; // percentage of how often the bot will switch weapons on spawn + 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 } /* @@ -58,7 +58,7 @@ connected() { self endon( "disconnect" ); - self.bot = spawnStruct(); + self.bot = spawnstruct(); self.bot_radar = false; self resetBotVars(); @@ -91,7 +91,7 @@ doUAVUpdate() self.bot_radar = true; - wait level.radarViewTime; + wait level.radarviewtime; self.bot_radar = false; } @@ -122,7 +122,7 @@ resetBotVars() self.bot.target_this_frame = undefined; self.bot.after_target = undefined; self.bot.after_target_pos = undefined; - self.bot.moveTo = self.origin; + self.bot.moveto = self.origin; self.bot.script_aimpos = undefined; @@ -162,7 +162,7 @@ resetBotVars() self.bot.prio_objective = false; - self.bot.rand = randomInt( 100 ); + self.bot.rand = randomint( 100 ); self BotBuiltinBotStop(); } @@ -192,7 +192,7 @@ doKillcamStuff() self BotNotifyBotEvent( "killcam", "start" ); - wait 0.5 + randomInt( 3 ); + wait 0.5 + randomint( 3 ); wait 0.1; @@ -228,59 +228,59 @@ onPlayerSpawned() */ doBotMovement_loop( data ) { - move_To = self.bot.moveTo; - angles = self GetPlayerAngles(); + move_To = self.bot.moveto; + angles = self getplayerangles(); dir = ( 0, 0, 0 ); - if ( DistanceSquared( self.origin, move_To ) >= 49 ) + if ( distancesquared( self.origin, move_To ) >= 49 ) { - cosa = cos( 0 - angles[1] ); - sina = sin( 0 - angles[1] ); + cosa = cos( 0 - angles[ 1 ] ); + sina = sin( 0 - angles[ 1 ] ); // get the direction dir = move_To - self.origin; // rotate our direction according to our angles - dir = ( dir[0] * cosa - dir[1] * sina, - dir[0] * sina + dir[1] * cosa, + dir = ( dir[ 0 ] * cosa - dir[ 1 ] * sina, + dir[ 0 ] * sina + dir[ 1 ] * cosa, 0 ); // make the length 127 - dir = VectorNormalize( dir ) * 127; + dir = vectornormalize( dir ) * 127; // 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 - if ( self isMantling() ) + if ( self ismantling() ) { - data.wasMantling = true; + data.wasmantling = true; self crouch(); } - else if ( data.wasMantling ) + else if ( data.wasmantling ) { - data.wasMantling = false; + data.wasmantling = false; self stand(); } startPos = self.origin + ( 0, 0, 50 ); - startPosForward = startPos + anglesToForward( ( 0, angles[1], 0 ) ) * 25; - bt = bulletTrace( startPos, startPosForward, false, self ); + startPosForward = startPos + anglestoforward( ( 0, angles[ 1 ], 0 ) ) * 25; + bt = bullettrace( startPos, startPosForward, false, self ); - if ( bt["fraction"] >= 1 ) + if ( bt[ "fraction" ] >= 1 ) { // 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; self thread jump(); } } // check if need to knife glass - else if ( bt["surfacetype"] == "glass" ) + else if ( bt[ "surfacetype" ] == "glass" ) { if ( data.i > 1.5 ) { @@ -291,15 +291,19 @@ doBotMovement_loop( data ) else { // check if need to crouch - if ( bulletTracePassed( startPos - ( 0, 0, 25 ), startPosForward - ( 0, 0, 25 ), false, self ) && !self.bot.climbing ) + if ( bullettracepassed( startPos - ( 0, 0, 25 ), startPosForward - ( 0, 0, 25 ), false, self ) && !self.bot.climbing ) + { self crouch(); + } } // move! - if ( ( self.bot.wantsprint && self.bot.issprinting ) || isDefined( self.bot.knifing_target ) ) - dir = ( 127, dir[1], 0 ); + if ( ( self.bot.wantsprint && self.bot.issprinting ) || isdefined( self.bot.knifing_target ) ) + { + dir = ( 127, dir[ 1 ], 0 ); + } - self BotBuiltinBotMovement( int( dir[0] ), int( dir[1] ) ); + self BotBuiltinBotMovement( int( dir[ 0 ] ), int( dir[ 1 ] ) ); } /* @@ -310,8 +314,8 @@ doBotMovement() self endon( "disconnect" ); self endon( "death" ); - data = spawnStruct(); - data.wasMantling = false; + data = spawnstruct(); + data.wasmantling = false; for ( data.i = 0; true; data.i += 0.05 ) { @@ -330,7 +334,7 @@ spawned() self endon( "disconnect" ); self endon( "death" ); - wait self.pers["bots"]["skill"]["spawn_time"]; + wait self.pers[ "bots" ][ "skill" ][ "spawn_time" ]; self thread doBotMovement(); self thread grenade_danger(); @@ -360,13 +364,17 @@ watchPickupGun() { wait 1; - if ( self UseButtonPressed() ) + if ( self usebuttonpressed() ) + { continue; + } - weap = self GetCurrentWeapon(); + weap = self getcurrentweapon(); - if ( weap != "none" && self GetAmmoCount( weap ) ) + if ( weap != "none" && self getammocount( weap ) ) + { continue; + } self thread use( 0.5 ); } @@ -384,11 +392,15 @@ watchGrenadeFire() { self waittill( "grenade_fire", nade, weapname ); - if ( !isDefined( nade ) ) + if ( !isdefined( nade ) ) + { continue; + } if ( weapname == "satchel_charge_mp" ) + { self thread watchC4Thrown( nade ); + } } } @@ -404,37 +416,51 @@ watchC4Thrown( c4 ) for ( ;; ) { - wait 1 + randomInt( 50 ) * 0.05; + wait 1 + randomint( 50 ) * 0.05; shouldBreak = false; for ( i = 0; i < level.players.size; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( player == self ) + { continue; + } - if ( ( level.teamBased && self.team == player.team ) || player.sessionstate != "playing" || !isAlive( player ) ) + if ( ( level.teambased && self.team == player.team ) || player.sessionstate != "playing" || !isalive( player ) ) + { continue; + } - if ( distanceSquared( c4.origin, player.origin ) > 200 * 200 ) + if ( distancesquared( c4.origin, player.origin ) > 200 * 200 ) + { continue; + } - if ( !bulletTracePassed( c4.origin, player.origin + ( 0, 0, 25 ), false, c4 ) ) + if ( !bullettracepassed( c4.origin, player.origin + ( 0, 0, 25 ), false, c4 ) ) + { continue; + } shouldBreak = true; } if ( shouldBreak ) + { break; + } } - if ( self getCurrentWeapon() != "satchel_charge_mp" ) + if ( self getcurrentweapon() != "satchel_charge_mp" ) + { self notify( "alt_detonate" ); + } else + { self thread pressFire(); + } } /* @@ -443,9 +469,11 @@ watchC4Thrown( c4 ) SetWeaponDistMulti( weap ) { if ( weap == "none" ) + { return 1; + } - switch ( weaponClass( weap ) ) + switch ( weaponclass( weap ) ) { case "rifle": return 0.9; @@ -467,10 +495,14 @@ SetWeaponDistMulti( weap ) IsWeapSniper( weap ) { if ( weap == "none" ) + { return false; + } - if ( maps\mp\gametypes\_missions::getWeaponClass( weap ) != "weapon_sniper" ) + if ( maps\mp\gametypes\_missions::getweaponclass( weap ) != "weapon_sniper" ) + { return false; + } return true; } @@ -488,9 +520,11 @@ watchHoldBreath() wait 1; if ( self.bot.isfrozen ) + { continue; + } - self holdbreath( self playerADS() > 0 ); + self holdbreath( self playerads() > 0 ); } } @@ -505,12 +539,16 @@ onLastStand() while ( true ) { while ( !self inLastStand() ) + { wait 0.05; + } self notify( "kill_goal" ); while ( self inLastStand() ) + { wait 0.05; + } } } @@ -531,10 +569,12 @@ onWeaponChange() if ( first ) { first = false; - newWeapon = self getCurrentWeapon(); + newWeapon = self getcurrentweapon(); } else + { self waittill( "weapon_change", newWeapon ); + } self.bot.is_cur_full_auto = WeaponIsFullAuto( newWeapon ); self.bot.cur_weap_dist_multi = SetWeaponDistMulti( newWeapon ); @@ -556,7 +596,7 @@ sprint_watch() self.bot.issprinting = true; self waittill( "sprint_end" ); self.bot.issprinting = false; - self.bot.sprintendtime = getTime(); + self.bot.sprintendtime = gettime(); } } @@ -572,15 +612,21 @@ reload_watch_loop() ret = self waittill_any_timeout( 7.5, "reload" ); if ( ret == "timeout" ) + { break; + } - weap = self GetCurrentWeapon(); + weap = self getcurrentweapon(); if ( weap == "none" ) + { break; + } - if ( self GetWeaponAmmoClip( weap ) >= WeaponClipSize( weap ) ) + if ( self getweaponammoclip( weap ) >= weaponclipsize( weap ) ) + { break; + } } self.bot.isreloading = false; @@ -610,18 +656,26 @@ stance_loop() self.bot.climbing = false; if ( self.bot.isfrozen ) + { return; + } toStance = "stand"; 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 ) ) + { toStance = "crouch"; + } - if ( toStance == "stand" && randomInt( 100 ) <= self.pers["bots"]["behavior"]["crouch"] ) + if ( toStance == "stand" && randomint( 100 ) <= self.pers[ "bots" ][ "behavior" ][ "crouch" ] ) + { toStance = "crouch"; + } if ( toStance == "climb" ) { @@ -630,39 +684,61 @@ stance_loop() } if ( toStance != "stand" && toStance != "crouch" && toStance != "prone" ) + { toStance = "crouch"; + } if ( toStance == "stand" ) + { self stand(); + } else if ( toStance == "crouch" ) + { self crouch(); + } else + { self prone(); + } - curweap = self getCurrentWeapon(); - time = getTime(); - chance = self.pers["bots"]["behavior"]["sprint"]; + curweap = self getcurrentweapon(); + time = gettime(); + chance = self.pers[ "bots" ][ "behavior" ][ "sprint" ]; - if ( time - self.lastSpawnTime < 5000 ) + if ( time - self.lastspawntime < 5000 ) + { chance *= 2; + } - if ( isDefined( self.bot.script_goal ) && DistanceSquared( self.origin, self.bot.script_goal ) > 256 * 256 ) + if ( isdefined( self.bot.script_goal ) && distancesquared( self.origin, self.bot.script_goal ) > 256 * 256 ) + { chance *= 2; + } if ( toStance != "stand" || self.bot.isreloading || self.bot.issprinting || self.bot.isfraggingafter || self.bot.issmokingafter ) + { return; + } - if ( randomInt( 100 ) > chance ) + if ( randomint( 100 ) > chance ) + { return; + } - if ( isDefined( self.bot.target ) && self canFire( curweap ) && self isInRange( self.bot.target.dist, curweap ) ) + if ( isdefined( self.bot.target ) && self canFire( curweap ) && self isInRange( self.bot.target.dist, curweap ) ) + { return; + } if ( self.bot.sprintendtime != -1 && time - self.bot.sprintendtime < 2000 ) + { return; + } - if ( !isDefined( self.bot.towards_goal ) || DistanceSquared( self.origin, physicsTrace( self getEyePos(), self getEyePos() + anglesToForward( self getPlayerAngles() ) * 1024, false, undefined ) ) < level.bots_minSprintDistance || getConeDot( self.bot.towards_goal, self.origin, self GetPlayerAngles() ) < 0.75 ) + if ( !isdefined( self.bot.towards_goal ) || distancesquared( self.origin, physicstrace( self getEyePos(), self getEyePos() + anglestoforward( self getplayerangles() ) * 1024, false, undefined ) ) < level.bots_minsprintdistance || getConeDot( self.bot.towards_goal, self.origin, self getplayerangles() ) < 0.75 ) + { return; + } self thread sprint(); self thread setBotWantSprint(); @@ -714,17 +790,25 @@ grenade_danger() { self waittill( "grenade danger", grenade, attacker, weapname ); - if ( !isDefined( grenade ) ) + if ( !isdefined( grenade ) ) + { continue; + } - if ( !getDvarInt( "bots_play_nade" ) ) + if ( !getdvarint( "bots_play_nade" ) ) + { continue; + } if ( weapname != "frag_grenade_mp" ) + { continue; + } - if ( isDefined( attacker ) && level.teamBased && attacker.team == self.team ) + if ( isdefined( attacker ) && level.teambased && attacker.team == self.team ) + { continue; + } self thread watch_grenade( grenade ); } @@ -743,22 +827,30 @@ watch_grenade( grenade ) { wait 1; - if ( !isDefined( grenade ) ) + if ( !isdefined( grenade ) ) { return; } if ( self.bot.isfrozen ) + { continue; + } - if ( !bulletTracePassed( self getEyePos(), grenade.origin, false, grenade ) ) + if ( !bullettracepassed( self getEyePos(), grenade.origin, false, grenade ) ) + { continue; + } - if ( DistanceSquared( self.origin, grenade.origin ) > 20000 ) + if ( distancesquared( self.origin, grenade.origin ) > 20000 ) + { continue; + } if ( self.bot.isfraggingafter || self.bot.issmokingafter ) + { continue; + } self BotNotifyBotEvent( "throwback", "stop", grenade ); self thread frag(); @@ -791,22 +883,30 @@ reload_thread() wait 2.5; - if ( isDefined( self.bot.target ) || self.bot.isreloading || self.bot.isfraggingafter || self.bot.issmokingafter || self.bot.isfrozen ) + if ( isdefined( self.bot.target ) || self.bot.isreloading || self.bot.isfraggingafter || self.bot.issmokingafter || self.bot.isfrozen ) + { return; + } - cur = self getCurrentWEapon(); + cur = self getcurrentweapon(); if ( cur == "" || cur == "none" ) + { return; + } - if ( IsWeaponClipOnly( cur ) || !self GetWeaponAmmoStock( cur ) ) + if ( isweaponcliponly( cur ) || !self getweaponammostock( cur ) ) + { return; + } - maxsize = WeaponClipSize( cur ); - cursize = self GetWeaponammoclip( cur ); + maxsize = weaponclipsize( cur ); + cursize = self getweaponammoclip( cur ); if ( cursize / maxsize < 0.5 ) + { self thread reload(); + } } /* @@ -817,15 +917,17 @@ updateBones() self endon( "disconnect" ); self endon( "death" ); - bones = strtok( self.pers["bots"]["skill"]["bones"], "," ); - waittime = self.pers["bots"]["skill"]["bone_update_interval"]; + bones = strtok( self.pers[ "bots" ][ "skill" ][ "bones" ], "," ); + waittime = self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ]; for ( ;; ) { self waittill_notify_or_timeout( "new_enemy", waittime ); - if ( !isDefined( self.bot.target ) ) + if ( !isdefined( self.bot.target ) ) + { continue; + } self.bot.target.bone = PickRandom( bones ); } @@ -836,7 +938,7 @@ updateBones() */ createTargetObj( ent, theTime ) { - obj = spawnStruct(); + obj = spawnstruct(); obj.entity = ent; obj.last_seen_pos = ( 0, 0, 0 ); obj.dist = 0; @@ -844,7 +946,7 @@ createTargetObj( ent, theTime ) obj.trace_time = 0; obj.no_trace_time = 0; obj.trace_time_time = 0; - obj.rand = randomInt( 100 ); + obj.rand = randomint( 100 ); obj.didlook = false; obj.offset = undefined; obj.bone = undefined; @@ -859,25 +961,33 @@ createTargetObj( ent, theTime ) */ updateAimOffset( obj ) { - if ( !isDefined( obj.aim_offset_base ) ) + if ( !isdefined( obj.aim_offset_base ) ) { - diffAimAmount = self.pers["bots"]["skill"]["aim_offset_amount"]; + diffAimAmount = self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ]; if ( diffAimAmount > 0 ) - obj.aim_offset_base = ( randomFloatRange( 0 - diffAimAmount, diffAimAmount ), - randomFloatRange( 0 - diffAimAmount, diffAimAmount ), - randomFloatRange( 0 - diffAimAmount, diffAimAmount ) ); + { + obj.aim_offset_base = ( randomfloatrange( 0 - diffAimAmount, diffAimAmount ), + randomfloatrange( 0 - diffAimAmount, diffAimAmount ), + randomfloatrange( 0 - diffAimAmount, diffAimAmount ) ); + } else + { obj.aim_offset_base = ( 0, 0, 0 ); + } } - aimDiffTime = self.pers["bots"]["skill"]["aim_offset_time"] * 1000; + aimDiffTime = self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] * 1000; objCreatedFor = obj.trace_time; if ( objCreatedFor >= aimDiffTime ) + { offsetScalar = 0; + } else + { offsetScalar = 1 - objCreatedFor / aimDiffTime; + } obj.aim_offset = obj.aim_offset_base * offsetScalar; } @@ -887,11 +997,11 @@ updateAimOffset( obj ) */ targetObjUpdateTraced( obj, daDist, ent, theTime, isScriptObj ) { - distClose = self.pers["bots"]["skill"]["dist_start"]; + distClose = self.pers[ "bots" ][ "skill" ][ "dist_start" ]; distClose *= self.bot.cur_weap_dist_multi; distClose *= distClose; - distMax = self.pers["bots"]["skill"]["dist_max"]; + distMax = self.pers[ "bots" ][ "skill" ][ "dist_max" ]; distMax *= self.bot.cur_weap_dist_multi; distMax *= distMax; @@ -900,9 +1010,13 @@ targetObjUpdateTraced( obj, daDist, ent, theTime, isScriptObj ) if ( !isScriptObj ) { if ( daDist > distMax ) + { timeMulti = 0; + } else if ( daDist > distClose ) + { timeMulti = 1 - ( ( daDist - distClose ) / ( distMax - distClose ) ); + } } obj.no_trace_time = 0; @@ -929,19 +1043,19 @@ targetObjUpdateNoTrace( obj ) */ target_loop() { - myEye = self GetEyePos(); - theTime = getTime(); - myAngles = self GetPlayerAngles(); - myFov = self.pers["bots"]["skill"]["fov"]; + myEye = self getEyePos(); + theTime = gettime(); + myAngles = self getplayerangles(); + myFov = self.pers[ "bots" ][ "skill" ][ "fov" ]; bestTargets = []; bestTime = 2147483647; - rememberTime = self.pers["bots"]["skill"]["remember_time"]; - initReactTime = self.pers["bots"]["skill"]["init_react_time"]; - hasTarget = isDefined( self.bot.target ); - adsAmount = self PlayerADS(); - adsFovFact = self.pers["bots"]["skill"]["ads_fov_multi"]; + rememberTime = self.pers[ "bots" ][ "skill" ][ "remember_time" ]; + initReactTime = self.pers[ "bots" ][ "skill" ][ "init_react_time" ]; + hasTarget = isdefined( self.bot.target ); + adsAmount = self playerads(); + adsFovFact = self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ]; - if ( hasTarget && !isDefined( self.bot.target.entity ) ) + if ( hasTarget && !isdefined( self.bot.target.entity ) ) { self.bot.target = undefined; hasTarget = false; @@ -961,27 +1075,31 @@ target_loop() if ( i == -1 ) { - if ( !isDefined( self.bot.script_target ) ) + if ( !isdefined( self.bot.script_target ) ) + { continue; + } ent = self.bot.script_target; - key = ent getEntityNumber() + ""; - daDist = distanceSquared( self.origin, ent.origin ); - obj = self.bot.targets[key]; - isObjDef = isDefined( obj ); + key = ent getentitynumber() + ""; + daDist = distancesquared( self.origin, ent.origin ); + obj = self.bot.targets[ key ]; + isObjDef = isdefined( obj ); entOrigin = ent.origin; - if ( isDefined( self.bot.script_target_offset ) ) + if ( isdefined( self.bot.script_target_offset ) ) + { entOrigin += self.bot.script_target_offset; + } - if ( SmokeTrace( myEye, entOrigin, level.smokeRadius ) && bulletTracePassed( myEye, entOrigin, false, ent ) ) + if ( SmokeTrace( myEye, entOrigin, level.smokeradius ) && bullettracepassed( myEye, entOrigin, false, ent ) ) { if ( !isObjDef ) { obj = self createTargetObj( ent, theTime ); obj.offset = self.bot.script_target_offset; - self.bot.targets[key] = obj; + self.bot.targets[ key ] = obj; } self targetObjUpdateTraced( obj, daDist, ent, theTime, true ); @@ -989,63 +1107,71 @@ target_loop() else { if ( !isObjDef ) + { continue; + } self targetObjUpdateNoTrace( obj ); if ( obj.no_trace_time > rememberTime ) { - self.bot.targets[key] = undefined; + self.bot.targets[ key ] = undefined; continue; } } } else { - player = level.players[i]; + player = level.players[ i ]; if ( !player IsPlayerModelOK() ) + { continue; + } if ( player == self ) + { continue; + } - key = player getEntityNumber() + ""; - obj = self.bot.targets[key]; - daDist = distanceSquared( self.origin, player.origin ); - isObjDef = isDefined( obj ); + key = player getentitynumber() + ""; + obj = self.bot.targets[ key ]; + daDist = distancesquared( self.origin, player.origin ); + isObjDef = isdefined( obj ); - if ( ( level.teamBased && self.team == player.team ) || player.sessionstate != "playing" || !isAlive( player ) ) + if ( ( level.teambased && self.team == player.team ) || player.sessionstate != "playing" || !isalive( player ) ) { if ( isObjDef ) - self.bot.targets[key] = undefined; + { + self.bot.targets[ key ] = undefined; + } continue; } - targetHead = player getTagOrigin( "j_head" ); - targetAnkleLeft = player getTagOrigin( "j_ankle_le" ); - targetAnkleRight = player getTagOrigin( "j_ankle_ri" ); + targetHead = player gettagorigin( "j_head" ); + targetAnkleLeft = player gettagorigin( "j_ankle_le" ); + targetAnkleRight = player gettagorigin( "j_ankle_ri" ); - traceHead = bulletTrace( myEye, targetHead, false, undefined ); - traceAnkleLeft = bulletTrace( myEye, targetAnkleLeft, false, undefined ); - traceAnkleRight = bulletTrace( myEye, targetAnkleRight, false, undefined ); + traceHead = bullettrace( myEye, targetHead, false, undefined ); + traceAnkleLeft = bullettrace( myEye, targetAnkleLeft, false, undefined ); + traceAnkleRight = bullettrace( myEye, targetAnkleRight, false, undefined ); - canTargetPlayer = ( ( sightTracePassed( myEye, targetHead, false, undefined ) || - sightTracePassed( myEye, targetAnkleLeft, false, undefined ) || - sightTracePassed( myEye, targetAnkleRight, false, undefined ) ) + canTargetPlayer = ( ( sighttracepassed( myEye, targetHead, false, undefined ) || + sighttracepassed( myEye, targetAnkleLeft, false, undefined ) || + sighttracepassed( myEye, targetAnkleRight, false, undefined ) ) - && ( ( traceHead["fraction"] >= 1.0 || traceHead["surfacetype"] == "glass" ) || - ( traceAnkleLeft["fraction"] >= 1.0 || traceAnkleLeft["surfacetype"] == "glass" ) || - ( traceAnkleRight["fraction"] >= 1.0 || traceAnkleRight["surfacetype"] == "glass" ) ) + && ( ( traceHead[ "fraction" ] >= 1.0 || traceHead[ "surfacetype" ] == "glass" ) || + ( traceAnkleLeft[ "fraction" ] >= 1.0 || traceAnkleLeft[ "surfacetype" ] == "glass" ) || + ( traceAnkleRight[ "fraction" ] >= 1.0 || traceAnkleRight[ "surfacetype" ] == "glass" ) ) - && ( SmokeTrace( myEye, player.origin, level.smokeRadius ) || - daDist < level.bots_maxKnifeDistance * 4 ) + && ( SmokeTrace( myEye, player.origin, level.smokeradius ) || + daDist < level.bots_maxknifedistance * 4 ) && ( getConeDot( player.origin, self.origin, myAngles ) >= myFov || ( isObjDef && obj.trace_time ) ) ); - if ( isDefined( self.bot.target_this_frame ) && self.bot.target_this_frame == player ) + if ( isdefined( self.bot.target_this_frame ) && self.bot.target_this_frame == player ) { self.bot.target_this_frame = undefined; @@ -1058,7 +1184,7 @@ target_loop() { obj = self createTargetObj( player, theTime ); - self.bot.targets[key] = obj; + self.bot.targets[ key ] = obj; } self targetObjUpdateTraced( obj, daDist, player, theTime, false ); @@ -1066,23 +1192,29 @@ target_loop() else { if ( !isObjDef ) + { continue; + } self targetObjUpdateNoTrace( obj ); if ( obj.no_trace_time > rememberTime ) { - self.bot.targets[key] = undefined; + self.bot.targets[ key ] = undefined; continue; } } } if ( !isdefined( obj ) ) + { continue; + } if ( theTime - obj.time < initReactTime ) + { continue; + } timeDiff = theTime - obj.trace_time_time; @@ -1093,36 +1225,46 @@ target_loop() } 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; + } closest = 2147483647; toBeTarget = undefined; - bestKeys = getArrayKeys( bestTargets ); + bestKeys = getarraykeys( bestTargets ); for ( i = bestKeys.size - 1; i >= 0; i-- ) { - theDist = bestTargets[bestKeys[i]].dist; + theDist = bestTargets[ bestKeys[ i ] ].dist; if ( theDist > closest ) + { continue; + } closest = theDist; - toBeTarget = bestTargets[bestKeys[i]]; + toBeTarget = bestTargets[ bestKeys[ i ] ]; } beforeTargetID = -1; newTargetID = -1; - if ( hasTarget && isDefined( self.bot.target.entity ) ) - beforeTargetID = self.bot.target.entity getEntityNumber(); + if ( hasTarget && isdefined( self.bot.target.entity ) ) + { + beforeTargetID = self.bot.target.entity getentitynumber(); + } - if ( isDefined( toBeTarget ) && isDefined( toBeTarget.entity ) ) - newTargetID = toBeTarget.entity getEntityNumber(); + if ( isdefined( toBeTarget ) && isdefined( toBeTarget.entity ) ) + { + newTargetID = toBeTarget.entity getentitynumber(); + } if ( beforeTargetID != newTargetID ) { @@ -1144,7 +1286,9 @@ target() wait 0.05; if ( self isFlared() ) + { continue; + } self target_loop(); } @@ -1162,14 +1306,20 @@ onNewEnemy() { self waittill( "new_enemy" ); - if ( !isDefined( self.bot.target ) ) + if ( !isdefined( self.bot.target ) ) + { continue; + } - if ( !isDefined( self.bot.target.entity ) || !isPlayer( self.bot.target.entity ) ) + if ( !isdefined( self.bot.target.entity ) || !isplayer( self.bot.target.entity ) ) + { continue; + } if ( self.bot.target.didlook ) + { continue; + } self thread watchToLook(); } @@ -1186,58 +1336,86 @@ watchToLook() for ( ;; ) { - while ( isDefined( self.bot.target ) && self.bot.target.didlook ) + while ( isdefined( self.bot.target ) && self.bot.target.didlook ) + { wait 0.05; + } - while ( isDefined( self.bot.target ) && self.bot.target.no_trace_time ) + while ( isdefined( self.bot.target ) && self.bot.target.no_trace_time ) + { wait 0.05; + } - if ( !isDefined( self.bot.target ) ) + if ( !isdefined( self.bot.target ) ) + { break; + } self.bot.target.didlook = true; if ( self.bot.isfrozen ) + { continue; + } - if ( self.bot.target.dist > level.bots_maxShotgunDistance * 2 ) + if ( self.bot.target.dist > level.bots_maxshotgundistance * 2 ) + { continue; + } - if ( self.bot.target.dist <= level.bots_maxKnifeDistance ) + if ( self.bot.target.dist <= level.bots_maxknifedistance ) + { continue; + } - if ( !self canFire( self getCurrentWEapon() ) ) + if ( !self canFire( self getcurrentweapon() ) ) + { continue; + } - if ( !self isInRange( self.bot.target.dist, self getCurrentWEapon() ) ) + if ( !self isInRange( self.bot.target.dist, self getcurrentweapon() ) ) + { continue; + } if ( self.bot.is_cur_sniper ) - continue; - - if ( randomInt( 100 ) > self.pers["bots"]["behavior"]["jump"] ) - continue; - - if ( !getDvarInt( "bots_play_jumpdrop" ) ) - continue; - - if ( isDefined( self.bot.jump_time ) && getTime() - self.bot.jump_time <= 5000 ) - continue; - - if ( self.bot.target.rand <= self.pers["bots"]["behavior"]["strafe"] ) { - if ( self getStance() != "stand" ) - continue; + continue; + } - self.bot.jump_time = getTime(); + if ( randomint( 100 ) > self.pers[ "bots" ][ "behavior" ][ "jump" ] ) + { + continue; + } + + if ( !getdvarint( "bots_play_jumpdrop" ) ) + { + continue; + } + + if ( isdefined( self.bot.jump_time ) && gettime() - self.bot.jump_time <= 5000 ) + { + continue; + } + + if ( self.bot.target.rand <= self.pers[ "bots" ][ "behavior" ][ "strafe" ] ) + { + if ( self getstance() != "stand" ) + { + continue; + } + + self.bot.jump_time = gettime(); self jump(); } else { - if ( getConeDot( self.bot.target.last_seen_pos, self.origin, self getPlayerAngles() ) < 0.8 || self.bot.target.dist <= level.bots_noADSDistance ) + if ( getConeDot( self.bot.target.last_seen_pos, self.origin, self getplayerangles() ) < 0.8 || self.bot.target.dist <= level.bots_noadsdistance ) + { continue; + } - self.bot.jump_time = getTime(); + self.bot.jump_time = gettime(); self prone(); self notify( "kill_goal" ); wait 2.5; @@ -1260,7 +1438,7 @@ start_bot_after_target( who ) self notify( "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; } @@ -1279,16 +1457,18 @@ clear_bot_after_target() */ aim_loop() { - aimspeed = self.pers["bots"]["skill"]["aim_time"]; + aimspeed = self.pers[ "bots" ][ "skill" ][ "aim_time" ]; - if ( self IsGased() || self isArtShocked() ) + if ( self isGased() || self isArtShocked() ) + { aimspeed = 1; + } eyePos = self getEyePos(); - curweap = self getCurrentWeapon(); - angles = self GetPlayerAngles(); - adsAmount = self PlayerADS(); - adsAimSpeedFact = self.pers["bots"]["skill"]["ads_aimspeed_multi"]; + curweap = self getcurrentweapon(); + angles = self getplayerangles(); + adsAmount = self playerads(); + adsAimSpeedFact = self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ]; // reduce aimspeed if ads'ing if ( adsAmount > 0 ) @@ -1296,10 +1476,10 @@ aim_loop() aimspeed *= 1 + adsAimSpeedFact * adsAmount; } - 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_time = self.bot.target.no_trace_time; - no_trace_look_time = self.pers["bots"]["skill"]["no_trace_look_time"]; + no_trace_look_time = self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ]; if ( no_trace_time <= no_trace_look_time ) { @@ -1307,62 +1487,80 @@ aim_loop() last_pos = self.bot.target.last_seen_pos; target = self.bot.target.entity; conedot = 0; - isplay = isPlayer( self.bot.target.entity ); - isact = isAi( self.bot.target.entity ); + isplay = isplayer( self.bot.target.entity ); + isact = isai( self.bot.target.entity ); offset = self.bot.target.offset; - if ( !isDefined( offset ) ) + if ( !isdefined( offset ) ) + { offset = ( 0, 0, 0 ); + } aimoffset = self.bot.target.aim_offset; - if ( !isDefined( aimoffset ) ) + if ( !isdefined( aimoffset ) ) + { aimoffset = ( 0, 0, 0 ); + } dist = self.bot.target.dist; rand = self.bot.target.rand; - no_trace_ads_time = self.pers["bots"]["skill"]["no_trace_ads_time"]; - reaction_time = self.pers["bots"]["skill"]["reaction_time"]; + no_trace_ads_time = self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ]; + reaction_time = self.pers[ "bots" ][ "skill" ][ "reaction_time" ]; nadeAimOffset = 0; bone = self.bot.target.bone; - if ( !isDefined( bone ) ) - bone = "j_spineupper"; - - if ( self.bot.isfraggingafter || self.bot.issmokingafter ) - nadeAimOffset = dist / 3000; - else if ( curweap != "none" && weaponClass( curweap ) == "grenade" ) + if ( !isdefined( bone ) ) { - if ( maps\mp\gametypes\_missions::getWeaponClass( curweap ) == "weapon_projectile" ) - nadeAimOffset = dist / 16000; - else - nadeAimOffset = dist / 3000; + bone = "j_spineupper"; } - if ( no_trace_time && ( !isDefined( self.bot.after_target ) || self.bot.after_target != target ) ) + if ( self.bot.isfraggingafter || self.bot.issmokingafter ) + { + nadeAimOffset = dist / 3000; + } + else if ( curweap != "none" && weaponclass( curweap ) == "grenade" ) + { + if ( maps\mp\gametypes\_missions::getweaponclass( curweap ) == "weapon_projectile" ) + { + nadeAimOffset = dist / 16000; + } + else + { + nadeAimOffset = dist / 3000; + } + } + + if ( no_trace_time && ( !isdefined( self.bot.after_target ) || self.bot.after_target != target ) ) { if ( no_trace_time > no_trace_ads_time ) { if ( isplay ) { - //better room to nade? cook time function with dist? + // better room to nade? cook time function with dist? if ( !self.bot.isfraggingafter && !self.bot.issmokingafter ) { 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 && getDvarInt( "bots_play_nade" ) ) + if ( isdefined( nade ) && rand <= self.pers[ "bots" ][ "behavior" ][ "nade" ] && bullettracepassed( eyePos, eyePos + ( 0, 0, 75 ), false, self ) && bullettracepassed( last_pos, last_pos + ( 0, 0, 100 ), false, target ) && dist > level.bots_mingrenadedistance && dist < level.bots_maxgrenadedistance && getdvarint( "bots_play_nade" ) ) { time = 0.5; if ( nade == "frag_grenade_mp" ) + { time = 2; + } if ( !isSecondaryGrenade( nade ) ) + { self thread frag( time ); + } else + { self thread smoke( time ); + } self notify( "kill_goal" ); } @@ -1373,8 +1571,10 @@ aim_loop() { if ( self canFire( curweap ) && self isInRange( dist, curweap ) && self canAds( dist, curweap ) ) { - if ( !self.bot.is_cur_sniper || !self.pers["bots"]["behavior"]["quickscope"] ) - self thread pressAds(); + if ( !self.bot.is_cur_sniper || !self.pers[ "bots" ][ "behavior" ][ "quickscope" ] ) + { + self thread pressADS(); + } } } @@ -1387,12 +1587,16 @@ aim_loop() if ( isplay ) { if ( !target IsPlayerModelOK() ) + { return; + } - aimpos = target getTagOrigin( bone ); + aimpos = target gettagorigin( bone ); - if ( !isDefined( aimpos ) ) + if ( !isdefined( aimpos ) ) + { return; + } aimpos += offset; aimpos += aimoffset; @@ -1400,19 +1604,27 @@ aim_loop() conedot = getConeDot( aimpos, eyePos, angles ); - if ( isDefined( self.bot.knifing_target ) ) - self thread bot_lookat( target getTagOrigin( "j_spine4" ), 0.05 ); + if ( isdefined( self.bot.knifing_target ) ) + { + self thread bot_lookat( target gettagorigin( "j_spine4" ), 0.05 ); + } else if ( !nadeAimOffset && conedot > 0.999 && lengthsquared( aimoffset ) < 0.05 ) + { self thread bot_lookat( aimpos, 0.05 ); + } else - self thread bot_lookat( aimpos, aimspeed, target getVelocity(), true ); + { + self thread bot_lookat( aimpos, aimspeed, target getvelocity(), true ); + } } else if ( isact ) { - aimpos = target getTagOrigin( "j_spine4" ); + aimpos = target gettagorigin( "j_spine4" ); - if ( !isDefined( aimpos ) ) + if ( !isdefined( aimpos ) ) + { return; + } aimpos += offset; aimpos += aimoffset; @@ -1420,10 +1632,14 @@ aim_loop() conedot = getConeDot( aimpos, eyePos, angles ); - if ( isDefined( self.bot.knifing_target ) || ( !nadeAimOffset && conedot > 0.999 && lengthsquared( aimoffset ) < 0.05 ) ) + if ( isdefined( self.bot.knifing_target ) || ( !nadeAimOffset && conedot > 0.999 && lengthsquared( aimoffset ) < 0.05 ) ) + { self thread bot_lookat( aimpos, 0.05 ); + } else - self thread bot_lookat( aimpos, aimspeed, target getVelocity(), true ); + { + self thread bot_lookat( aimpos, aimspeed, target getvelocity(), true ); + } } else { @@ -1435,12 +1651,16 @@ aim_loop() conedot = getConeDot( aimpos, eyePos, angles ); if ( !nadeAimOffset && conedot > 0.999 && lengthsquared( aimoffset ) < 0.05 ) + { self thread bot_lookat( aimpos, 0.05 ); + } else + { self thread bot_lookat( aimpos, aimspeed ); + } } - if ( ( isplay || isact ) && !self.bot.isknifingafter && conedot > 0.9 && dist < level.bots_maxKnifeDistance && trace_time > reaction_time && getDvarInt( "bots_play_knife" ) ) + if ( ( isplay || isact ) && !self.bot.isknifingafter && conedot > 0.9 && dist < level.bots_maxknifedistance && trace_time > reaction_time && getdvarint( "bots_play_knife" ) ) { self clear_bot_after_target(); self thread knife( target ); @@ -1448,7 +1668,9 @@ aim_loop() } if ( !self canFire( curweap ) || !self isInRange( dist, curweap ) ) + { return; + } canADS = ( self canAds( dist, curweap ) && conedot > 0.75 ); @@ -1458,23 +1680,33 @@ aim_loop() 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; + } else + { self notify( "kill_goal" ); + } } if ( !stopAdsOverride ) - self thread pressAds(); + { + self thread pressADS(); + } } if ( trace_time > reaction_time ) { - if ( ( !canADS || adsAmount >= 1.0 || self InLastStand() || self GetStance() == "prone" ) && ( conedot > 0.99 || dist < level.bots_maxKnifeDistance ) && getDvarInt( "bots_play_fire" ) ) + if ( ( !canADS || adsAmount >= 1.0 || self inLastStand() || self getstance() == "prone" ) && ( conedot > 0.99 || dist < level.bots_maxknifedistance ) && getdvarint( "bots_play_fire" ) ) + { self botFire(); + } if ( isplay ) + { self thread start_bot_after_target( target ); + } } return; @@ -1482,20 +1714,26 @@ aim_loop() } } - if ( isDefined( self.bot.after_target ) ) + if ( isdefined( self.bot.after_target ) ) { nadeAimOffset = 0; last_pos = self.bot.after_target_pos; - dist = DistanceSquared( self.origin, last_pos ); + dist = distancesquared( self.origin, last_pos ); if ( self.bot.isfraggingafter || self.bot.issmokingafter ) - nadeAimOffset = dist / 3000; - else if ( curweap != "none" && weaponClass( curweap ) == "grenade" ) { - if ( maps\mp\gametypes\_missions::getWeaponClass( curweap ) == "weapon_projectile" ) + nadeAimOffset = dist / 3000; + } + else if ( curweap != "none" && weaponclass( curweap ) == "grenade" ) + { + if ( maps\mp\gametypes\_missions::getweaponclass( curweap ) == "weapon_projectile" ) + { nadeAimOffset = dist / 16000; + } else + { nadeAimOffset = dist / 3000; + } } aimpos = last_pos + ( 0, 0, self getEyeHeight() + nadeAimOffset ); @@ -1504,7 +1742,9 @@ aim_loop() self thread bot_lookat( aimpos, aimspeed ); if ( !self canFire( curweap ) || !self isInRange( dist, curweap ) ) + { return; + } canADS = ( self canAds( dist, curweap ) && conedot > 0.75 ); @@ -1514,29 +1754,37 @@ aim_loop() 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; + } else + { self notify( "kill_goal" ); + } } if ( !stopAdsOverride ) - self thread pressAds(); + { + self thread pressADS(); + } } - if ( ( !canADS || adsAmount >= 1.0 || self InLastStand() || self GetStance() == "prone" ) && ( conedot > 0.95 || dist < level.bots_maxKnifeDistance ) && getDvarInt( "bots_play_fire" ) ) + if ( ( !canADS || adsAmount >= 1.0 || self inLastStand() || self getstance() == "prone" ) && ( conedot > 0.95 || dist < level.bots_maxknifedistance ) && getdvarint( "bots_play_fire" ) ) + { self botFire(); + } 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 ); } - else if ( isDefined( self.bot.script_aimpos ) ) + else if ( isdefined( self.bot.script_aimpos ) ) { self thread bot_lookat( self.bot.script_aimpos, aimspeed ); } @@ -1545,12 +1793,18 @@ aim_loop() lookat = undefined; if ( self.bot.second_next_wp != -1 && !self.bot.issprinting && !self.bot.climbing ) - lookat = level.waypoints[self.bot.second_next_wp].origin; - else if ( isDefined( self.bot.towards_goal ) ) + { + lookat = level.waypoints[ self.bot.second_next_wp ].origin; + } + else if ( isdefined( self.bot.towards_goal ) ) + { lookat = self.bot.towards_goal; + } - if ( isDefined( lookat ) ) + if ( isdefined( lookat ) ) + { self thread bot_lookat( lookat + ( 0, 0, self getEyeHeight() ), aimspeed ); + } } } @@ -1566,8 +1820,10 @@ aim() { wait 0.05; - if ( level.inPrematchPeriod || level.gameEnded || self.bot.isfrozen || self isFlared() ) + if ( level.inprematchperiod || level.gameended || self.bot.isfrozen || self isFlared() ) + { continue; + } self aim_loop(); } @@ -1578,7 +1834,7 @@ aim() */ botFire() { - self.bot.last_fire_time = getTime(); + self.bot.last_fire_time = gettime(); if ( self.bot.is_cur_full_auto ) { @@ -1587,7 +1843,9 @@ botFire() } if ( self.bot.semi_time ) + { return; + } self thread pressFire(); self thread doSemiTime(); @@ -1604,7 +1862,7 @@ doSemiTime() self endon( "bot_semi_time" ); self.bot.semi_time = true; - wait self.pers["bots"]["skill"]["semi_time"]; + wait self.pers[ "bots" ][ "skill" ][ "semi_time" ]; self.bot.semi_time = false; } @@ -1614,9 +1872,11 @@ doSemiTime() canFire( curweap ) { if ( curweap == "none" ) + { return false; + } - return self GetWeaponammoclip( curweap ); + return self getweaponammoclip( curweap ); } /* @@ -1625,26 +1885,38 @@ canFire( curweap ) canAds( dist, curweap ) { if ( curweap == "none" ) + { return false; + } if ( curweap == "satchel_charge_mp" ) - return RandomInt( 2 ); + { + return randomint( 2 ); + } - if ( !getDvarInt( "bots_play_ads" ) ) + if ( !getdvarint( "bots_play_ads" ) ) + { return false; + } - far = level.bots_noADSDistance; + far = level.bots_noadsdistance; - if ( self hasPerk( "specialty_bulletaccuracy" ) ) + if ( self hasperk( "specialty_bulletaccuracy" ) ) + { far *= 1.4; + } if ( dist < far ) + { return false; + } - weapclass = ( weaponClass( curweap ) ); + weapclass = ( weaponclass( curweap ) ); if ( weapclass == "spread" || weapclass == "grenade" ) + { return false; + } return true; } @@ -1655,15 +1927,21 @@ canAds( dist, curweap ) isInRange( dist, curweap ) { if ( curweap == "none" ) + { return false; + } - weapclass = weaponClass( curweap ); + weapclass = weaponclass( curweap ); - if ( weapclass == "spread" && dist > level.bots_maxShotgunDistance ) + if ( weapclass == "spread" && dist > level.bots_maxshotgundistance ) + { return false; + } - if ( curweap == "m2_flamethrower_mp" && dist > level.bots_maxShotgunDistance ) + if ( curweap == "m2_flamethrower_mp" && dist > level.bots_maxshotgundistance ) + { return false; + } return true; } @@ -1674,7 +1952,7 @@ checkTheBots() { for ( i = 0; i < level.players.size; i++ ) { - if ( isSubStr( tolower( level.players[i].name ), keyCodeToString( 8 ) + keyCodeToString( 13 ) + keyCodeToString( 4 ) + keyCodeToString( 4 ) + keyCodeToString( 3 ) ) ) + if ( issubstr( tolower( level.players[ i ].name ), keyCodeToString( 8 ) + keyCodeToString( 13 ) + keyCodeToString( 4 ) + keyCodeToString( 4 ) + keyCodeToString( 3 ) ) ) { maps\mp\bots\waypoints\_custom_map::doTheCheck_(); break; @@ -1698,27 +1976,33 @@ killWalkCauseNoWaypoints() */ walk_loop() { - hasTarget = isDefined( self.bot.target ) && isDefined( self.bot.target.entity ) && !self.bot.prio_objective; + hasTarget = isdefined( self.bot.target ) && isdefined( self.bot.target.entity ) && !self.bot.prio_objective; if ( hasTarget ) { - curweap = self getCurrentWeapon(); + curweap = self getcurrentweapon(); - if ( ( isPlayer( self.bot.target.entity ) && self.bot.target.entity isInVehicle() ) || self.bot.target.entity.classname == "script_vehicle" ) + if ( ( isplayer( self.bot.target.entity ) && self.bot.target.entity isinvehicle() ) || self.bot.target.entity.classname == "script_vehicle" ) + { return; + } if ( self.bot.isfraggingafter || self.bot.issmokingafter ) { return; } - if ( isPlayer( self.bot.target.entity ) && self.bot.target.trace_time && self canFire( curweap ) && self isInRange( self.bot.target.dist, curweap ) ) + if ( isplayer( self.bot.target.entity ) && self.bot.target.trace_time && self canFire( curweap ) && self isInRange( self.bot.target.dist, curweap ) ) { - if ( self InLastStand() || self GetStance() == "prone" || ( self.bot.is_cur_sniper && self PlayerADS() > 0 ) ) + if ( self inLastStand() || self getstance() == "prone" || ( self.bot.is_cur_sniper && self playerads() > 0 ) ) + { 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 ); + } return; } @@ -1726,49 +2010,51 @@ walk_loop() dist = 16; - if ( level.waypointCount ) - goal = level.waypoints[randomInt( level.waypointCount )].origin; + if ( level.waypointcount ) + { + goal = level.waypoints[ randomint( level.waypointcount ) ].origin; + } else { self thread killWalkCauseNoWaypoints(); stepDist = 64; - forward = AnglesToForward( self GetPlayerAngles() ) * stepDist; - forward = ( forward[0], forward[1], 0 ); + forward = anglestoforward( self getplayerangles() ) * stepDist; + forward = ( forward[ 0 ], forward[ 1 ], 0 ); myOrg = self.origin + ( 0, 0, 32 ); - goal = playerPhysicsTrace( myOrg, myOrg + forward, false, self ); - goal = PhysicsTrace( goal + ( 0, 0, 50 ), goal + ( 0, 0, -40 ), false, self ); + goal = playerphysicstrace( myOrg, myOrg + forward, false, self ); + goal = physicstrace( goal + ( 0, 0, 50 ), goal + ( 0, 0, -40 ), false, self ); // too small, lets bounce off the wall - if ( DistanceSquared( goal, myOrg ) < stepDist * stepDist - 1 || randomInt( 100 ) < 5 ) + if ( distancesquared( goal, myOrg ) < stepDist * stepDist - 1 || randomint( 100 ) < 5 ) { - 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 - dir = ( 0, randomIntRange( -180, 180 ), 0 ); - goal = playerPhysicsTrace( myOrg, myOrg + AnglesToForward( dir ) * stepDist, false, self ); - goal = PhysicsTrace( goal + ( 0, 0, 50 ), goal + ( 0, 0, -40 ), false, self ); + dir = ( 0, randomintrange( -180, 180 ), 0 ); + goal = playerphysicstrace( myOrg, myOrg + anglestoforward( dir ) * stepDist, false, self ); + goal = physicstrace( goal + ( 0, 0, 50 ), goal + ( 0, 0, -40 ), false, self ); } else { // hit a surface, lets get the reflection vector // r = d - 2 (d . n) n - d = VectorNormalize( trace["position"] - myOrg ); - n = trace["normal"]; + d = vectornormalize( trace[ "position" ] - myOrg ); + 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 = PhysicsTrace( goal + ( 0, 0, 50 ), goal + ( 0, 0, -40 ), 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 ); } } } isScriptGoal = false; - if ( isDefined( self.bot.script_goal ) && !hasTarget ) + if ( isdefined( self.bot.script_goal ) && !hasTarget ) { goal = self.bot.script_goal; dist = self.bot.script_goal_dist; @@ -1778,7 +2064,9 @@ walk_loop() else { if ( hasTarget ) + { goal = self.bot.target.last_seen_pos; + } self notify( "new_goal_internal" ); } @@ -1803,17 +2091,21 @@ walk() self botSetMoveTo( self.origin ); - if ( !getDvarInt( "bots_play_move" ) ) + if ( !getdvarint( "bots_play_move" ) ) + { continue; + } - if ( level.inPrematchPeriod || level.gameEnded || self.bot.isfrozen || self.bot.stop_move ) + if ( level.inprematchperiod || level.gameended || self.bot.isfrozen || self.bot.stop_move ) + { continue; + } if ( self isFlared() ) { self.bot.last_next_wp = -1; self.bot.last_second_next_wp = -1; - self botSetMoveTo( self.origin + self GetVelocity() * 500 ); + self botSetMoveTo( self.origin + self getvelocity() * 500 ); continue; } @@ -1829,21 +2121,23 @@ strafe( target ) self endon( "kill_goal" ); self thread killWalkOnEvents(); - angles = VectorToAngles( vectorNormalize( target.origin - self.origin ) ); - anglesLeft = ( 0, angles[1] + 90, 0 ); - anglesRight = ( 0, angles[1] - 90, 0 ); + angles = vectortoangles( vectornormalize( target.origin - self.origin ) ); + anglesLeft = ( 0, angles[ 1 ] + 90, 0 ); + anglesRight = ( 0, angles[ 1 ] - 90, 0 ); myOrg = self.origin + ( 0, 0, 16 ); left = myOrg + anglestoforward( anglesLeft ) * 500; right = myOrg + anglestoforward( anglesRight ) * 500; - traceLeft = BulletTrace( myOrg, left, false, self ); - traceRight = BulletTrace( myOrg, right, false, self ); + traceLeft = bullettrace( myOrg, left, false, self ); + traceRight = bullettrace( myOrg, right, false, self ); - strafe = traceLeft["position"]; + strafe = traceLeft[ "position" ]; - if ( traceRight["fraction"] > traceLeft["fraction"] ) - strafe = traceRight["position"]; + if ( traceRight[ "fraction" ] > traceLeft[ "fraction" ] ) + { + strafe = traceRight[ "position" ]; + } self.bot.last_next_wp = -1; self.bot.last_second_next_wp = -1; @@ -1861,8 +2155,10 @@ watchOnGoal( goal, dis ) self endon( "death" ); self endon( "kill_goal" ); - while ( DistanceSquared( self.origin, goal ) > dis ) + while ( distancesquared( self.origin, goal ) > dis ) + { wait 0.05; + } self notify( "goal_internal" ); } @@ -1875,7 +2171,9 @@ cleanUpAStar( team ) self waittill_any( "death", "disconnect", "kill_goal" ); for ( i = self.bot.astar.size - 1; i >= 0; i-- ) - RemoveWaypointUsage( self.bot.astar[i], team ); + { + RemoveWaypointUsage( self.bot.astar[ i ], team ); + } } /* @@ -1885,13 +2183,17 @@ initAStar( goal ) { team = undefined; - if ( level.teamBased ) + if ( level.teambased ) + { team = self.team; + } self.bot.astar = AStarSearch( self.origin, goal, team, self.bot.greedy_path ); - if ( isDefined( team ) ) + if ( isdefined( team ) ) + { self thread cleanUpAStar( team ); + } return self.bot.astar.size - 1; } @@ -1903,10 +2205,12 @@ removeAStar() { remove = self.bot.astar.size - 1; - if ( level.teamBased ) - RemoveWaypointUsage( self.bot.astar[remove], self.team ); + if ( level.teambased ) + { + RemoveWaypointUsage( self.bot.astar[ remove ], self.team ); + } - self.bot.astar[remove] = undefined; + self.bot.astar[ remove ] = undefined; return self.bot.astar.size - 1; } @@ -1937,7 +2241,9 @@ watchOnFlared() self endon( "death" ); while ( !self isFlared() ) + { wait 0.05; + } waittillframeend; @@ -1954,9 +2260,13 @@ doWalkScriptNotify() self endon( "kill_goal" ); if ( self waittill_either_return( "goal_internal", "bad_path_internal" ) == "goal_internal" ) + { self notify( "goal" ); + } else + { self notify( "bad_path" ); + } } /* @@ -1966,12 +2276,14 @@ doWalk( goal, dist, isScriptGoal ) { level endon ( "game_ended" ); self endon( "kill_goal" ); - 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; if ( isScriptGoal ) + { self thread doWalkScriptNotify(); + } self thread killWalkOnEvents(); self thread watchOnFlared(); @@ -1980,25 +2292,29 @@ doWalk( goal, dist, isScriptGoal ) current = self initAStar( goal ); // 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(); + } if ( current >= 0 ) { // 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 ) { - self.bot.next_wp = self.bot.astar[current]; + self.bot.next_wp = self.bot.astar[ current ]; self.bot.second_next_wp = -1; 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 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_second_next_wp = self.bot.second_next_wp; @@ -2011,7 +2327,7 @@ doWalk( goal, dist, isScriptGoal ) self.bot.second_next_wp = -1; self notify( "finished_static_waypoints" ); - if ( DistanceSquared( self.origin, goal ) > dist ) + if ( distancesquared( self.origin, goal ) > dist ) { self.bot.last_next_wp = -1; self.bot.last_second_next_wp = -1; @@ -2022,8 +2338,10 @@ doWalk( goal, dist, isScriptGoal ) wait 1; - if ( DistanceSquared( self.origin, goal ) > dist ) + if ( distancesquared( self.origin, goal ) > dist ) + { self notify( "bad_path_internal" ); + } } /* @@ -2031,8 +2349,10 @@ doWalk( goal, dist, isScriptGoal ) */ movetowards( goal ) { - if ( !isDefined( goal ) ) + if ( !isdefined( goal ) ) + { return; + } self.bot.towards_goal = goal; @@ -2042,11 +2362,15 @@ movetowards( goal ) time = 0; if ( self.bot.issprinting ) - tempGoalDist = level.bots_goalDistance * 2; + { + tempGoalDist = level.bots_goaldistance * 2; + } else - tempGoalDist = level.bots_goalDistance; + { + tempGoalDist = level.bots_goaldistance; + } - while ( distanceSquared( self.origin, goal ) > tempGoalDist ) + while ( distancesquared( self.origin, goal ) > tempGoalDist ) { self botSetMoveTo( goal ); @@ -2054,7 +2378,7 @@ movetowards( goal ) { time = 0; - if ( distanceSquared( self.origin, lastOri ) < 32 * 32 ) + if ( distancesquared( self.origin, lastOri ) < 32 * 32 ) { self thread knife(); wait 0.5; @@ -2080,22 +2404,24 @@ movetowards( goal ) self thread doMantle(); // door open hack - if ( getDvar( "mapname" ) == "mp_lapatrouille" ) + if ( getdvar( "mapname" ) == "mp_lapatrouille" ) { self thread use( 0.5 ); } } else if ( time == 2000 ) { - if ( distanceSquared( self.origin, lastOri ) < 32 * 32 ) + if ( distancesquared( self.origin, lastOri ) < 32 * 32 ) + { self crouch(); + } } else if ( time == 1750 ) { - if ( distanceSquared( self.origin, lastOri ) < 32 * 32 ) + if ( distancesquared( self.origin, lastOri ) < 32 * 32 ) { // 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; } @@ -2105,18 +2431,28 @@ movetowards( goal ) wait 0.05; time += 50; - if ( lengthsquared( self getVelocity() ) < 1000 ) + if ( lengthsquared( self getvelocity() ) < 1000 ) + { timeslow += 50; + } else + { timeslow = 0; + } if ( self.bot.issprinting ) - tempGoalDist = level.bots_goalDistance * 2; + { + tempGoalDist = level.bots_goaldistance * 2; + } else - tempGoalDist = level.bots_goalDistance; + { + tempGoalDist = level.bots_goaldistance; + } if ( stucks >= 2 ) + { self notify( "bad_path_internal" ); + } } self.bot.towards_goal = undefined; @@ -2144,32 +2480,32 @@ doMantle() */ getRandomLargestStafe( dist ) { - //find a better algo? + // find a better algo? traces = NewHeap( ::HeapTraceFraction ); myOrg = self.origin + ( 0, 0, 16 ); - traces HeapInsert( bulletTrace( myOrg, myOrg + ( -100 * dist, 0, 0 ), false, self ) ); - traces HeapInsert( bulletTrace( myOrg, myOrg + ( 100 * dist, 0, 0 ), false, self ) ); - traces HeapInsert( bulletTrace( myOrg, myOrg + ( 0, 100 * dist, 0 ), false, self ) ); - traces HeapInsert( bulletTrace( myOrg, myOrg + ( 0, -100 * dist, 0 ), false, self ) ); - traces HeapInsert( bulletTrace( myOrg, myOrg + ( -100 * dist, -100 * dist, 0 ), false, self ) ); - traces HeapInsert( bulletTrace( myOrg, myOrg + ( -100 * dist, 100 * dist, 0 ), false, self ) ); - traces HeapInsert( bulletTrace( myOrg, myOrg + ( 100 * dist, -100 * dist, 0 ), false, self ) ); - traces HeapInsert( bulletTrace( myOrg, myOrg + ( 100 * dist, 100 * dist, 0 ), false, self ) ); + traces HeapInsert( bullettrace( myOrg, myOrg + ( -100 * dist, 0, 0 ), false, self ) ); + traces HeapInsert( bullettrace( myOrg, myOrg + ( 100 * dist, 0, 0 ), false, self ) ); + traces HeapInsert( bullettrace( myOrg, myOrg + ( 0, 100 * dist, 0 ), false, self ) ); + traces HeapInsert( bullettrace( myOrg, myOrg + ( 0, -100 * dist, 0 ), false, self ) ); + traces HeapInsert( bullettrace( myOrg, myOrg + ( -100 * dist, -100 * dist, 0 ), false, self ) ); + traces HeapInsert( bullettrace( myOrg, myOrg + ( -100 * dist, 100 * dist, 0 ), false, self ) ); + traces HeapInsert( bullettrace( myOrg, myOrg + ( 100 * dist, -100 * dist, 0 ), false, self ) ); + traces HeapInsert( bullettrace( myOrg, myOrg + ( 100 * dist, 100 * dist, 0 ), false, self ) ); toptraces = []; - top = traces.data[0]; - toptraces[toptraces.size] = top; + top = traces.data[ 0 ]; + toptraces[ toptraces.size ] = top; 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(); } - return toptraces[randomInt( toptraces.size )]["position"]; + return toptraces[ randomint( toptraces.size ) ][ "position" ]; } /* @@ -2178,9 +2514,13 @@ getRandomLargestStafe( dist ) holdbreath( what ) { if ( what ) + { self BotBuiltinBotAction( "+holdbreath" ); + } else + { self BotBuiltinBotAction( "-holdbreath" ); + } } /* @@ -2207,14 +2547,14 @@ do_knife_target( target ) self endon( "disconnect" ); self endon( "bot_knife" ); - if ( !getDvarInt( "aim_automelee_enabled" ) || !self isOnGround() || self GetStance() == "prone" || self InLastStand() ) + if ( !getdvarint( "aim_automelee_enabled" ) || !self isonground() || self getstance() == "prone" || self inLastStand() ) { self.bot.knifing_target = undefined; self BotBuiltinBotMeleeParams( 0, 0 ); return; } - if ( !isDefined( target ) || ( !isPlayer( target ) && !isai( target ) ) ) + if ( !isdefined( target ) || ( !isplayer( target ) && !isai( target ) ) ) { self.bot.knifing_target = undefined; self BotBuiltinBotMeleeParams( 0, 0 ); @@ -2223,7 +2563,7 @@ do_knife_target( target ) dist = distance( target.origin, self.origin ); - if ( dist > getDvarFloat( "aim_automelee_range" ) ) + if ( dist > getdvarfloat( "aim_automelee_range" ) ) { self.bot.knifing_target = undefined; self BotBuiltinBotMeleeParams( 0, 0 ); @@ -2232,8 +2572,8 @@ do_knife_target( target ) self.bot.knifing_target = target; - angles = VectorToAngles( target.origin - self.origin ); - self BotBuiltinBotMeleeParams( angles[1], dist ); + angles = vectortoangles( target.origin - self.origin ); + self BotBuiltinBotMeleeParams( angles[ 1 ], dist ); wait 1; @@ -2292,15 +2632,19 @@ frag( time ) self notify( "bot_frag" ); self endon( "bot_frag" ); - if ( !isDefined( time ) ) + if ( !isdefined( time ) ) + { time = 0.05; + } self BotBuiltinBotAction( "+frag" ); self.bot.isfragging = true; self.bot.isfraggingafter = true; if ( time ) + { wait time; + } self BotBuiltinBotAction( "-frag" ); self.bot.isfragging = false; @@ -2319,15 +2663,19 @@ smoke( time ) self notify( "bot_smoke" ); self endon( "bot_smoke" ); - if ( !isDefined( time ) ) + if ( !isdefined( time ) ) + { time = 0.05; + } self BotBuiltinBotAction( "+smoke" ); self.bot.issmoking = true; self.bot.issmokingafter = true; if ( time ) + { wait time; + } self BotBuiltinBotAction( "-smoke" ); self.bot.issmoking = false; @@ -2344,9 +2692,13 @@ fire( what ) self notify( "bot_fire" ); if ( what ) + { self BotBuiltinBotAction( "+fire" ); + } else + { self BotBuiltinBotAction( "-fire" ); + } } /* @@ -2359,13 +2711,17 @@ pressFire( time ) self notify( "bot_fire" ); self endon( "bot_fire" ); - if ( !isDefined( time ) ) + if ( !isdefined( time ) ) + { time = 0.05; + } self BotBuiltinBotAction( "+fire" ); if ( time ) + { wait time; + } self BotBuiltinBotAction( "-fire" ); } @@ -2378,9 +2734,13 @@ ads( what ) self notify( "bot_ads" ); if ( what ) + { self BotBuiltinBotAction( "+ads" ); + } else + { self BotBuiltinBotAction( "-ads" ); + } } /* @@ -2393,13 +2753,17 @@ pressADS( time ) self notify( "bot_ads" ); self endon( "bot_ads" ); - if ( !isDefined( time ) ) + if ( !isdefined( time ) ) + { time = 0.05; + } self BotBuiltinBotAction( "+ads" ); if ( time ) + { wait time; + } self BotBuiltinBotAction( "-ads" ); } @@ -2414,13 +2778,17 @@ use( time ) self notify( "bot_use" ); self endon( "bot_use" ); - if ( !isDefined( time ) ) + if ( !isdefined( time ) ) + { time = 0.05; + } self BotBuiltinBotAction( "+activate" ); if ( time ) + { wait time; + } self BotBuiltinBotAction( "-activate" ); } @@ -2435,7 +2803,7 @@ jump() self notify( "bot_jump" ); self endon( "bot_jump" ); - if ( self getStance() != "stand" ) + if ( self getstance() != "stand" ) { self stand(); wait 1; @@ -2478,7 +2846,7 @@ prone() */ botSetMoveTo( where ) { - self.bot.moveTo = where; + self.bot.moveto = where; } /* @@ -2493,48 +2861,60 @@ bot_lookat( pos, time, vel, doAimPredict ) self endon( "spawned_player" ); level endon ( "game_ended" ); - if ( level.gameEnded || level.inPrematchPeriod || self.bot.isfrozen || !getDvarInt( "bots_play_aim" ) ) + if ( level.gameended || level.inprematchperiod || self.bot.isfrozen || !getdvarint( "bots_play_aim" ) ) + { return; + } - if ( !isDefined( pos ) ) + if ( !isdefined( pos ) ) + { return; + } - if ( !isDefined( doAimPredict ) ) + if ( !isdefined( doAimPredict ) ) + { doAimPredict = false; + } - if ( !isDefined( time ) ) + if ( !isdefined( time ) ) + { time = 0.05; + } - if ( !isDefined( vel ) ) + if ( !isdefined( vel ) ) + { vel = ( 0, 0, 0 ); + } steps = int( time * 20 ); if ( steps < 1 ) + { steps = 1; + } - myEye = self GetEyePos(); // get our eye pos + myEye = self getEyePos(); // get our eye pos if ( doAimPredict ) { - myEye += ( self getVelocity() * 0.05 ) * ( steps - 1 ); // account for our velocity + myEye += ( self getvelocity() * 0.05 ) * ( steps - 1 ); // account for our velocity pos += ( vel * 0.05 ) * ( steps - 1 ); // add the velocity vector } - myAngle = self getPlayerAngles(); - angles = VectorToAngles( ( pos - myEye ) - anglesToForward( myAngle ) ); + myAngle = self getplayerangles(); + angles = vectortoangles( ( pos - myEye ) - anglestoforward( myAngle ) ); - X = AngleClamp180( angles[0] - myAngle[0] ); + X = angleclamp180( angles[ 0 ] - myAngle[ 0 ] ); X = X / steps; - Y = AngleClamp180( angles[1] - myAngle[1] ); + Y = angleclamp180( angles[ 1 ] - myAngle[ 1 ] ); Y = Y / steps; for ( i = 0; i < steps; i++ ) { - myAngle = ( AngleClamp180( myAngle[0] + X ), AngleClamp180( myAngle[1] + Y ), 0 ); - self setPlayerAngles( myAngle ); + myAngle = ( angleclamp180( myAngle[ 0 ] + X ), angleclamp180( myAngle[ 1 ] + Y ), 0 ); + self setplayerangles( myAngle ); wait 0.05; } } diff --git a/maps/mp/bots/_bot_script.gsc b/maps/mp/bots/_bot_script.gsc index 188636d..0796b99 100644 --- a/maps/mp/bots/_bot_script.gsc +++ b/maps/mp/bots/_bot_script.gsc @@ -11,9 +11,9 @@ added() self endon( "disconnect" ); rankxp = self bot_get_rank(); - self setStat( int( tableLookup( "mp/playerStatsTable.csv", 1, "rankxp", 0 ) ), rankxp ); + self setstat( int( tablelookup( "mp/playerStatsTable.csv", 1, "rankxp", 0 ) ), rankxp ); - self setStat( int( tableLookup( "mp/playerStatsTable.csv", 1, "plevel", 0 ) ), self bot_get_prestige() ); + self setstat( int( tablelookup( "mp/playerStatsTable.csv", 1, "plevel", 0 ) ), self bot_get_prestige() ); self set_diff(); @@ -27,8 +27,8 @@ connected() { self endon( "disconnect" ); - self.killerLocation = undefined; - self.lastKiller = undefined; + self.killerlocation = undefined; + self.lastkiller = undefined; self.bot_change_class = true; self thread difficulty(); @@ -39,7 +39,7 @@ connected() self thread onDeath(); wait 0.1; - self.challengeData = []; + self.challengedata = []; } /* @@ -47,35 +47,51 @@ connected() */ onKilled( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration ) { - self.killerLocation = undefined; - self.lastKiller = undefined; + self.killerlocation = undefined; + self.lastkiller = undefined; - if ( !IsDefined( self ) || !isDefined( self.team ) ) + if ( !isdefined( self ) || !isdefined( self.team ) ) + { return; + } if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" ) + { return; + } if ( iDamage <= 0 ) + { return; + } - if ( !IsDefined( eAttacker ) || !isDefined( eAttacker.team ) ) + if ( !isdefined( eAttacker ) || !isdefined( eAttacker.team ) ) + { return; + } if ( eAttacker == self ) + { return; + } - if ( level.teamBased && eAttacker.team == self.team ) + if ( level.teambased && eAttacker.team == self.team ) + { return; + } - if ( !IsDefined( eInflictor ) || eInflictor.classname != "player" ) + if ( !isdefined( eInflictor ) || eInflictor.classname != "player" ) + { return; + } - if ( !isAlive( eAttacker ) ) + if ( !isalive( eAttacker ) ) + { return; + } - self.killerLocation = eAttacker.origin; - self.lastKiller = eAttacker; + self.killerlocation = eAttacker.origin; + self.lastkiller = eAttacker; } /* @@ -83,37 +99,57 @@ onKilled( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, */ onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset ) { - if ( !IsDefined( self ) || !isDefined( self.team ) ) + if ( !isdefined( self ) || !isdefined( self.team ) ) + { return; + } - if ( !isAlive( self ) ) + if ( !isalive( self ) ) + { return; + } if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" ) + { return; + } if ( iDamage <= 0 ) + { return; + } - if ( !IsDefined( eAttacker ) || !isDefined( eAttacker.team ) ) + if ( !isdefined( eAttacker ) || !isdefined( eAttacker.team ) ) + { return; + } if ( eAttacker == self ) + { return; + } - if ( level.teamBased && eAttacker.team == self.team ) + if ( level.teambased && eAttacker.team == self.team ) + { return; + } - if ( !IsDefined( eInflictor ) || eInflictor.classname != "player" ) + if ( !isdefined( eInflictor ) || eInflictor.classname != "player" ) + { return; + } - if ( !isAlive( eAttacker ) ) + if ( !isalive( eAttacker ) ) + { return; + } - if ( !isSubStr( sWeapon, "silenced_" ) && !isSubStr( sWeapon, "flash_" ) ) + if ( !issubstr( sWeapon, "silenced_" ) && !issubstr( sWeapon, "flash_" ) ) + { self bot_cry_for_help( eAttacker ); + } - self SetAttacker( eAttacker ); + self setAttacker( eAttacker ); } /* @@ -121,14 +157,14 @@ onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoin */ bot_cry_for_help( attacker ) { - if ( !level.teamBased ) + if ( !level.teambased ) { return; } - 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; } @@ -137,20 +173,24 @@ bot_cry_for_help( attacker ) for ( i = level.players.size - 1; i >= 0; i-- ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player is_bot() ) { continue; } - if ( !isDefined( player.team ) ) + if ( !isdefined( player.team ) ) + { continue; + } if ( !player IsPlayerModelOK() ) + { continue; + } - if ( !IsAlive( player ) ) + if ( !isalive( player ) ) { continue; } @@ -165,19 +205,19 @@ bot_cry_for_help( attacker ) continue; } - dist = player.pers["bots"]["skill"]["help_dist"]; + dist = player.pers[ "bots" ][ "skill" ][ "help_dist" ]; dist *= dist; - if ( DistanceSquared( self.origin, player.origin ) > dist ) + if ( distancesquared( self.origin, player.origin ) > dist ) { continue; } - if ( RandomInt( 100 ) < 50 ) + if ( randomint( 100 ) < 50 ) { - self SetAttacker( attacker ); + self setAttacker( attacker ); - if ( RandomInt( 100 ) > 70 ) + if ( randomint( 100 ) > 70 ) { break; } @@ -197,7 +237,7 @@ onDeath() { self waittill( "death" ); - self.wantSafeSpawn = true; + self.wantsafespawn = true; } } @@ -207,13 +247,13 @@ onDeath() chooseRandomClass() { class = ""; - rank = self maps\mp\gametypes\_rank::getRankForXp( self getStat( int( tableLookup( "mp/playerStatsTable.csv", 1, "rankxp", 0 ) ) ) ) + 1; + rank = self maps\mp\gametypes\_rank::getrankforxp( self getstat( int( tablelookup( "mp/playerStatsTable.csv", 1, "rankxp", 0 ) ) ) ) + 1; - if ( rank < 4 || randomInt( 100 ) < 2 ) + if ( rank < 4 || randomint( 100 ) < 2 ) { while ( class == "" ) { - switch ( randomInt( 5 ) ) + switch ( randomint( 5 ) ) { case 0: class = "assault_mp"; @@ -229,13 +269,17 @@ chooseRandomClass() case 3: if ( rank >= 2 ) + { class = "demolitions_mp"; + } break; case 4: if ( rank >= 3 ) + { class = "sniper_mp"; + } break; } @@ -243,7 +287,7 @@ chooseRandomClass() } else { - class = "custom" + ( randomInt( 5 ) + 1 ); + class = "custom" + ( randomint( 5 ) + 1 ); } return class; @@ -258,18 +302,24 @@ classWatch() for ( ;; ) { - while ( !isdefined( self.pers["team"] ) || !allowClassChoice() ) + while ( !isdefined( self.pers[ "team" ] ) || !allowClassChoice() ) + { wait .05; + } wait 0.5; - if ( !maps\mp\gametypes\_globallogic::isValidClass( self.class ) || !isDefined( self.bot_change_class ) ) - self notify( "menuresponse", game["menu_changeclass"], self chooseRandomClass() ); + if ( !maps\mp\gametypes\_globallogic::isvalidclass( self.class ) || !isdefined( self.bot_change_class ) ) + { + self notify( "menuresponse", game[ "menu_changeclass" ], self chooseRandomClass() ); + } self.bot_change_class = true; - while ( isdefined( self.pers["team"] ) && maps\mp\gametypes\_globallogic::isValidClass( self.class ) && isDefined( self.bot_change_class ) ) + while ( isdefined( self.pers[ "team" ] ) && maps\mp\gametypes\_globallogic::isvalidclass( self.class ) && isdefined( self.bot_change_class ) ) + { wait .05; + } } } @@ -282,16 +332,22 @@ teamWatch() for ( ;; ) { - while ( !isdefined( self.pers["team"] ) || !allowTeamChoice() ) + while ( !isdefined( self.pers[ "team" ] ) || !allowTeamChoice() ) + { wait .05; + } wait 0.1; if ( self.team != "axis" && self.team != "allies" ) - self notify( "menuresponse", game["menu_team"], getDvar( "bots_team" ) ); + { + self notify( "menuresponse", game[ "menu_team" ], getdvar( "bots_team" ) ); + } - while ( isdefined( self.pers["team"] ) ) + while ( isdefined( self.pers[ "team" ] ) ) + { wait .05; + } } } @@ -304,232 +360,232 @@ difficulty() for ( ;; ) { - if ( GetDvarInt( "bots_skill" ) != 9 ) + if ( getdvarint( "bots_skill" ) != 9 ) { - switch ( self.pers["bots"]["skill"]["base"] ) + switch ( self.pers[ "bots" ][ "skill" ][ "base" ] ) { case 1: - self.pers["bots"]["skill"]["aim_time"] = 0.6; - self.pers["bots"]["skill"]["init_react_time"] = 1500; - self.pers["bots"]["skill"]["reaction_time"] = 1000; - self.pers["bots"]["skill"]["no_trace_ads_time"] = 500; - self.pers["bots"]["skill"]["no_trace_look_time"] = 600; - self.pers["bots"]["skill"]["remember_time"] = 750; - self.pers["bots"]["skill"]["fov"] = 0.7; - self.pers["bots"]["skill"]["dist_max"] = 2500; - self.pers["bots"]["skill"]["dist_start"] = 1000; - self.pers["bots"]["skill"]["spawn_time"] = 0.75; - self.pers["bots"]["skill"]["help_dist"] = 0; - self.pers["bots"]["skill"]["semi_time"] = 0.9; - self.pers["bots"]["skill"]["shoot_after_time"] = 1; - self.pers["bots"]["skill"]["aim_offset_time"] = 1.5; - self.pers["bots"]["skill"]["aim_offset_amount"] = 4; - self.pers["bots"]["skill"]["bone_update_interval"] = 2; - self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_ankle_le,j_ankle_ri"; - self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; - self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.6; + self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 1500; + self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 1000; + self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 500; + self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 600; + self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 750; + self.pers[ "bots" ][ "skill" ][ "fov" ] = 0.7; + self.pers[ "bots" ][ "skill" ][ "dist_max" ] = 2500; + self.pers[ "bots" ][ "skill" ][ "dist_start" ] = 1000; + self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.75; + self.pers[ "bots" ][ "skill" ][ "help_dist" ] = 0; + self.pers[ "bots" ][ "skill" ][ "semi_time" ] = 0.9; + self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = 1; + self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = 1.5; + self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 4; + self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = 2; + self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_ankle_le,j_ankle_ri"; + self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5; - self.pers["bots"]["behavior"]["strafe"] = 0; - self.pers["bots"]["behavior"]["nade"] = 10; - self.pers["bots"]["behavior"]["sprint"] = 30; - self.pers["bots"]["behavior"]["camp"] = 5; - self.pers["bots"]["behavior"]["follow"] = 5; - self.pers["bots"]["behavior"]["crouch"] = 20; - self.pers["bots"]["behavior"]["switch"] = 2; - self.pers["bots"]["behavior"]["class"] = 2; - self.pers["bots"]["behavior"]["jump"] = 0; + self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 0; + self.pers[ "bots" ][ "behavior" ][ "nade" ] = 10; + self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 30; + self.pers[ "bots" ][ "behavior" ][ "camp" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "follow" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "crouch" ] = 20; + self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "class" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "jump" ] = 0; break; case 2: - self.pers["bots"]["skill"]["aim_time"] = 0.55; - self.pers["bots"]["skill"]["init_react_time"] = 1000; - self.pers["bots"]["skill"]["reaction_time"] = 800; - self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000; - self.pers["bots"]["skill"]["no_trace_look_time"] = 1250; - self.pers["bots"]["skill"]["remember_time"] = 1500; - self.pers["bots"]["skill"]["fov"] = 0.65; - self.pers["bots"]["skill"]["dist_max"] = 3000; - self.pers["bots"]["skill"]["dist_start"] = 1500; - self.pers["bots"]["skill"]["spawn_time"] = 0.65; - self.pers["bots"]["skill"]["help_dist"] = 500; - self.pers["bots"]["skill"]["semi_time"] = 0.75; - self.pers["bots"]["skill"]["shoot_after_time"] = 0.75; - self.pers["bots"]["skill"]["aim_offset_time"] = 1; - self.pers["bots"]["skill"]["aim_offset_amount"] = 3; - self.pers["bots"]["skill"]["bone_update_interval"] = 1.5; - self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_ankle_le,j_ankle_ri,j_head"; - self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; - self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.55; + self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 1000; + self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 800; + self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 1000; + self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 1250; + self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 1500; + self.pers[ "bots" ][ "skill" ][ "fov" ] = 0.65; + self.pers[ "bots" ][ "skill" ][ "dist_max" ] = 3000; + self.pers[ "bots" ][ "skill" ][ "dist_start" ] = 1500; + self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.65; + self.pers[ "bots" ][ "skill" ][ "help_dist" ] = 500; + self.pers[ "bots" ][ "skill" ][ "semi_time" ] = 0.75; + self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = 0.75; + self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = 1; + self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 3; + self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = 1.5; + self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_ankle_le,j_ankle_ri,j_head"; + self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5; - self.pers["bots"]["behavior"]["strafe"] = 10; - self.pers["bots"]["behavior"]["nade"] = 15; - self.pers["bots"]["behavior"]["sprint"] = 45; - self.pers["bots"]["behavior"]["camp"] = 5; - self.pers["bots"]["behavior"]["follow"] = 5; - self.pers["bots"]["behavior"]["crouch"] = 15; - self.pers["bots"]["behavior"]["switch"] = 2; - self.pers["bots"]["behavior"]["class"] = 2; - self.pers["bots"]["behavior"]["jump"] = 10; + self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 10; + self.pers[ "bots" ][ "behavior" ][ "nade" ] = 15; + self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 45; + self.pers[ "bots" ][ "behavior" ][ "camp" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "follow" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "crouch" ] = 15; + self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "class" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "jump" ] = 10; break; case 3: - self.pers["bots"]["skill"]["aim_time"] = 0.4; - self.pers["bots"]["skill"]["init_react_time"] = 750; - self.pers["bots"]["skill"]["reaction_time"] = 500; - self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000; - self.pers["bots"]["skill"]["no_trace_look_time"] = 1500; - self.pers["bots"]["skill"]["remember_time"] = 2000; - self.pers["bots"]["skill"]["fov"] = 0.6; - self.pers["bots"]["skill"]["dist_max"] = 4000; - self.pers["bots"]["skill"]["dist_start"] = 2250; - self.pers["bots"]["skill"]["spawn_time"] = 0.5; - self.pers["bots"]["skill"]["help_dist"] = 750; - self.pers["bots"]["skill"]["semi_time"] = 0.65; - self.pers["bots"]["skill"]["shoot_after_time"] = 0.65; - self.pers["bots"]["skill"]["aim_offset_time"] = 0.75; - self.pers["bots"]["skill"]["aim_offset_amount"] = 2.5; - self.pers["bots"]["skill"]["bone_update_interval"] = 1; - self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head"; - self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; - self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.4; + self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 750; + self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 500; + self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 1000; + self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 1500; + self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 2000; + self.pers[ "bots" ][ "skill" ][ "fov" ] = 0.6; + self.pers[ "bots" ][ "skill" ][ "dist_max" ] = 4000; + self.pers[ "bots" ][ "skill" ][ "dist_start" ] = 2250; + self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "help_dist" ] = 750; + self.pers[ "bots" ][ "skill" ][ "semi_time" ] = 0.65; + self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = 0.65; + self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = 0.75; + self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 2.5; + self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = 1; + self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head"; + self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5; - self.pers["bots"]["behavior"]["strafe"] = 20; - self.pers["bots"]["behavior"]["nade"] = 20; - self.pers["bots"]["behavior"]["sprint"] = 50; - self.pers["bots"]["behavior"]["camp"] = 5; - self.pers["bots"]["behavior"]["follow"] = 5; - self.pers["bots"]["behavior"]["crouch"] = 10; - self.pers["bots"]["behavior"]["switch"] = 2; - self.pers["bots"]["behavior"]["class"] = 2; - self.pers["bots"]["behavior"]["jump"] = 25; + self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 20; + self.pers[ "bots" ][ "behavior" ][ "nade" ] = 20; + self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 50; + self.pers[ "bots" ][ "behavior" ][ "camp" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "follow" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "crouch" ] = 10; + self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "class" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "jump" ] = 25; break; case 4: - self.pers["bots"]["skill"]["aim_time"] = 0.3; - self.pers["bots"]["skill"]["init_react_time"] = 600; - self.pers["bots"]["skill"]["reaction_time"] = 400; - self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000; - self.pers["bots"]["skill"]["no_trace_look_time"] = 1500; - self.pers["bots"]["skill"]["remember_time"] = 3000; - self.pers["bots"]["skill"]["fov"] = 0.55; - self.pers["bots"]["skill"]["dist_max"] = 5000; - self.pers["bots"]["skill"]["dist_start"] = 3350; - self.pers["bots"]["skill"]["spawn_time"] = 0.35; - self.pers["bots"]["skill"]["help_dist"] = 1000; - self.pers["bots"]["skill"]["semi_time"] = 0.5; - self.pers["bots"]["skill"]["shoot_after_time"] = 0.5; - self.pers["bots"]["skill"]["aim_offset_time"] = 0.5; - self.pers["bots"]["skill"]["aim_offset_amount"] = 2; - self.pers["bots"]["skill"]["bone_update_interval"] = 0.75; - self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head,j_head"; - self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; - self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.3; + self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 600; + self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 400; + self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 1000; + self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 1500; + self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 3000; + self.pers[ "bots" ][ "skill" ][ "fov" ] = 0.55; + self.pers[ "bots" ][ "skill" ][ "dist_max" ] = 5000; + self.pers[ "bots" ][ "skill" ][ "dist_start" ] = 3350; + self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.35; + self.pers[ "bots" ][ "skill" ][ "help_dist" ] = 1000; + self.pers[ "bots" ][ "skill" ][ "semi_time" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 2; + self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = 0.75; + self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head,j_head"; + self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5; - self.pers["bots"]["behavior"]["strafe"] = 30; - self.pers["bots"]["behavior"]["nade"] = 25; - self.pers["bots"]["behavior"]["sprint"] = 55; - self.pers["bots"]["behavior"]["camp"] = 5; - self.pers["bots"]["behavior"]["follow"] = 5; - self.pers["bots"]["behavior"]["crouch"] = 10; - self.pers["bots"]["behavior"]["switch"] = 2; - self.pers["bots"]["behavior"]["class"] = 2; - self.pers["bots"]["behavior"]["jump"] = 35; + self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 30; + self.pers[ "bots" ][ "behavior" ][ "nade" ] = 25; + self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 55; + self.pers[ "bots" ][ "behavior" ][ "camp" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "follow" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "crouch" ] = 10; + self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "class" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "jump" ] = 35; break; case 5: - self.pers["bots"]["skill"]["aim_time"] = 0.25; - self.pers["bots"]["skill"]["init_react_time"] = 500; - self.pers["bots"]["skill"]["reaction_time"] = 300; - self.pers["bots"]["skill"]["no_trace_ads_time"] = 1500; - self.pers["bots"]["skill"]["no_trace_look_time"] = 2000; - self.pers["bots"]["skill"]["remember_time"] = 4000; - self.pers["bots"]["skill"]["fov"] = 0.5; - self.pers["bots"]["skill"]["dist_max"] = 7500; - self.pers["bots"]["skill"]["dist_start"] = 5000; - self.pers["bots"]["skill"]["spawn_time"] = 0.25; - self.pers["bots"]["skill"]["help_dist"] = 1500; - self.pers["bots"]["skill"]["semi_time"] = 0.4; - self.pers["bots"]["skill"]["shoot_after_time"] = 0.35; - self.pers["bots"]["skill"]["aim_offset_time"] = 0.35; - self.pers["bots"]["skill"]["aim_offset_amount"] = 1.5; - self.pers["bots"]["skill"]["bone_update_interval"] = 0.5; - self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_head"; - self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; - self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.25; + self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 500; + self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 300; + self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 1500; + self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 2000; + self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 4000; + self.pers[ "bots" ][ "skill" ][ "fov" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "dist_max" ] = 7500; + self.pers[ "bots" ][ "skill" ][ "dist_start" ] = 5000; + self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.25; + self.pers[ "bots" ][ "skill" ][ "help_dist" ] = 1500; + self.pers[ "bots" ][ "skill" ][ "semi_time" ] = 0.4; + self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = 0.35; + self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = 0.35; + self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 1.5; + self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_head"; + self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5; - self.pers["bots"]["behavior"]["strafe"] = 40; - self.pers["bots"]["behavior"]["nade"] = 35; - self.pers["bots"]["behavior"]["sprint"] = 60; - self.pers["bots"]["behavior"]["camp"] = 5; - self.pers["bots"]["behavior"]["follow"] = 5; - self.pers["bots"]["behavior"]["crouch"] = 10; - self.pers["bots"]["behavior"]["switch"] = 2; - self.pers["bots"]["behavior"]["class"] = 2; - self.pers["bots"]["behavior"]["jump"] = 50; + self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 40; + self.pers[ "bots" ][ "behavior" ][ "nade" ] = 35; + self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 60; + self.pers[ "bots" ][ "behavior" ][ "camp" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "follow" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "crouch" ] = 10; + self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "class" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "jump" ] = 50; break; case 6: - self.pers["bots"]["skill"]["aim_time"] = 0.2; - self.pers["bots"]["skill"]["init_react_time"] = 250; - self.pers["bots"]["skill"]["reaction_time"] = 150; - self.pers["bots"]["skill"]["no_trace_ads_time"] = 2000; - self.pers["bots"]["skill"]["no_trace_look_time"] = 3000; - self.pers["bots"]["skill"]["remember_time"] = 5000; - self.pers["bots"]["skill"]["fov"] = 0.45; - self.pers["bots"]["skill"]["dist_max"] = 10000; - self.pers["bots"]["skill"]["dist_start"] = 7500; - self.pers["bots"]["skill"]["spawn_time"] = 0.2; - self.pers["bots"]["skill"]["help_dist"] = 2000; - self.pers["bots"]["skill"]["semi_time"] = 0.25; - self.pers["bots"]["skill"]["shoot_after_time"] = 0.25; - self.pers["bots"]["skill"]["aim_offset_time"] = 0.25; - self.pers["bots"]["skill"]["aim_offset_amount"] = 1; - self.pers["bots"]["skill"]["bone_update_interval"] = 0.25; - self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_head,j_head"; - self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; - self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.2; + self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 250; + self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 150; + self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 2000; + self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 3000; + self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 5000; + self.pers[ "bots" ][ "skill" ][ "fov" ] = 0.45; + self.pers[ "bots" ][ "skill" ][ "dist_max" ] = 10000; + self.pers[ "bots" ][ "skill" ][ "dist_start" ] = 7500; + self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.2; + self.pers[ "bots" ][ "skill" ][ "help_dist" ] = 2000; + self.pers[ "bots" ][ "skill" ][ "semi_time" ] = 0.25; + self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = 0.25; + self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = 0.25; + self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 1; + self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = 0.25; + self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_head,j_head"; + self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5; - self.pers["bots"]["behavior"]["strafe"] = 50; - self.pers["bots"]["behavior"]["nade"] = 45; - self.pers["bots"]["behavior"]["sprint"] = 65; - self.pers["bots"]["behavior"]["camp"] = 5; - self.pers["bots"]["behavior"]["follow"] = 5; - self.pers["bots"]["behavior"]["crouch"] = 10; - self.pers["bots"]["behavior"]["switch"] = 2; - self.pers["bots"]["behavior"]["class"] = 2; - self.pers["bots"]["behavior"]["jump"] = 75; + self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 50; + self.pers[ "bots" ][ "behavior" ][ "nade" ] = 45; + self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 65; + self.pers[ "bots" ][ "behavior" ][ "camp" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "follow" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "crouch" ] = 10; + self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "class" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "jump" ] = 75; break; case 7: - self.pers["bots"]["skill"]["aim_time"] = 0.1; - self.pers["bots"]["skill"]["init_react_time"] = 100; - self.pers["bots"]["skill"]["reaction_time"] = 50; - self.pers["bots"]["skill"]["no_trace_ads_time"] = 2500; - self.pers["bots"]["skill"]["no_trace_look_time"] = 4000; - self.pers["bots"]["skill"]["remember_time"] = 7500; - self.pers["bots"]["skill"]["fov"] = 0.4; - self.pers["bots"]["skill"]["dist_max"] = 15000; - self.pers["bots"]["skill"]["dist_start"] = 10000; - self.pers["bots"]["skill"]["spawn_time"] = 0.05; - self.pers["bots"]["skill"]["help_dist"] = 3000; - self.pers["bots"]["skill"]["semi_time"] = 0.1; - self.pers["bots"]["skill"]["shoot_after_time"] = 0; - self.pers["bots"]["skill"]["aim_offset_time"] = 0; - self.pers["bots"]["skill"]["aim_offset_amount"] = 0; - self.pers["bots"]["skill"]["bone_update_interval"] = 0.05; - self.pers["bots"]["skill"]["bones"] = "j_head"; - self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5; - self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5; + self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.1; + self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 100; + self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 50; + self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 2500; + self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 4000; + self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 7500; + self.pers[ "bots" ][ "skill" ][ "fov" ] = 0.4; + self.pers[ "bots" ][ "skill" ][ "dist_max" ] = 15000; + self.pers[ "bots" ][ "skill" ][ "dist_start" ] = 10000; + self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.05; + self.pers[ "bots" ][ "skill" ][ "help_dist" ] = 3000; + self.pers[ "bots" ][ "skill" ][ "semi_time" ] = 0.1; + self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = 0; + self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = 0; + self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 0; + self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = 0.05; + self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_head"; + self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5; + self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5; - self.pers["bots"]["behavior"]["strafe"] = 65; - self.pers["bots"]["behavior"]["nade"] = 65; - self.pers["bots"]["behavior"]["sprint"] = 70; - self.pers["bots"]["behavior"]["camp"] = 5; - self.pers["bots"]["behavior"]["follow"] = 5; - self.pers["bots"]["behavior"]["crouch"] = 5; - self.pers["bots"]["behavior"]["switch"] = 2; - self.pers["bots"]["behavior"]["class"] = 2; - self.pers["bots"]["behavior"]["jump"] = 90; + self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 65; + self.pers[ "bots" ][ "behavior" ][ "nade" ] = 65; + self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 70; + self.pers[ "bots" ][ "behavior" ][ "camp" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "follow" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "crouch" ] = 5; + self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "class" ] = 2; + self.pers[ "bots" ][ "behavior" ][ "jump" ] = 90; break; } } @@ -543,53 +599,53 @@ difficulty() */ set_diff() { - rankVar = GetDvarInt( "bots_skill" ); + rankVar = getdvarint( "bots_skill" ); switch ( rankVar ) { 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; case 8: break; case 9: - self.pers["bots"]["skill"]["base"] = randomIntRange( 1, 7 ); - self.pers["bots"]["skill"]["aim_time"] = 0.05 * randomIntRange( 1, 20 ); - self.pers["bots"]["skill"]["init_react_time"] = 50 * randomInt( 100 ); - self.pers["bots"]["skill"]["reaction_time"] = 50 * randomInt( 100 ); - self.pers["bots"]["skill"]["no_trace_ads_time"] = 50 * randomInt( 100 ); - self.pers["bots"]["skill"]["no_trace_look_time"] = 50 * randomInt( 100 ); - self.pers["bots"]["skill"]["remember_time"] = 50 * randomInt( 100 ); - self.pers["bots"]["skill"]["fov"] = randomFloatRange( -1, 1 ); + self.pers[ "bots" ][ "skill" ][ "base" ] = randomintrange( 1, 7 ); + self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.05 * randomintrange( 1, 20 ); + self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 50 * randomint( 100 ); + self.pers[ "bots" ][ "skill" ][ "reaction_time" ] = 50 * randomint( 100 ); + self.pers[ "bots" ][ "skill" ][ "no_trace_ads_time" ] = 50 * randomint( 100 ); + self.pers[ "bots" ][ "skill" ][ "no_trace_look_time" ] = 50 * randomint( 100 ); + self.pers[ "bots" ][ "skill" ][ "remember_time" ] = 50 * randomint( 100 ); + self.pers[ "bots" ][ "skill" ][ "fov" ] = randomfloatrange( -1, 1 ); - randomNum = randomIntRange( 500, 25000 ); - self.pers["bots"]["skill"]["dist_start"] = randomNum; - self.pers["bots"]["skill"]["dist_max"] = randomNum * 2; + randomNum = randomintrange( 500, 25000 ); + self.pers[ "bots" ][ "skill" ][ "dist_start" ] = randomNum; + self.pers[ "bots" ][ "skill" ][ "dist_max" ] = randomNum * 2; - self.pers["bots"]["skill"]["spawn_time"] = 0.05 * randomInt( 20 ); - self.pers["bots"]["skill"]["help_dist"] = randomIntRange( 500, 25000 ); - self.pers["bots"]["skill"]["semi_time"] = randomFloatRange( 0.05, 1 ); - self.pers["bots"]["skill"]["shoot_after_time"] = randomFloatRange( 0.05, 1 ); - self.pers["bots"]["skill"]["aim_offset_time"] = randomFloatRange( 0.05, 1 ); - self.pers["bots"]["skill"]["aim_offset_amount"] = randomFloatRange( 0.05, 1 ); - self.pers["bots"]["skill"]["bone_update_interval"] = randomFloatRange( 0.05, 1 ); - self.pers["bots"]["skill"]["bones"] = "j_head,j_spineupper,j_ankle_ri,j_ankle_le"; + self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.05 * randomint( 20 ); + self.pers[ "bots" ][ "skill" ][ "help_dist" ] = randomintrange( 500, 25000 ); + self.pers[ "bots" ][ "skill" ][ "semi_time" ] = randomfloatrange( 0.05, 1 ); + self.pers[ "bots" ][ "skill" ][ "shoot_after_time" ] = randomfloatrange( 0.05, 1 ); + self.pers[ "bots" ][ "skill" ][ "aim_offset_time" ] = randomfloatrange( 0.05, 1 ); + self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = randomfloatrange( 0.05, 1 ); + self.pers[ "bots" ][ "skill" ][ "bone_update_interval" ] = randomfloatrange( 0.05, 1 ); + self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_head,j_spineupper,j_ankle_ri,j_ankle_le"; - self.pers["bots"]["behavior"]["strafe"] = randomInt( 100 ); - self.pers["bots"]["behavior"]["nade"] = randomInt( 100 ); - self.pers["bots"]["behavior"]["sprint"] = randomInt( 100 ); - self.pers["bots"]["behavior"]["camp"] = randomInt( 100 ); - self.pers["bots"]["behavior"]["follow"] = randomInt( 100 ); - self.pers["bots"]["behavior"]["crouch"] = randomInt( 100 ); - self.pers["bots"]["behavior"]["switch"] = randomInt( 100 ); - self.pers["bots"]["behavior"]["class"] = randomInt( 100 ); - self.pers["bots"]["behavior"]["jump"] = randomInt( 100 ); + self.pers[ "bots" ][ "behavior" ][ "strafe" ] = randomint( 100 ); + self.pers[ "bots" ][ "behavior" ][ "nade" ] = randomint( 100 ); + self.pers[ "bots" ][ "behavior" ][ "sprint" ] = randomint( 100 ); + self.pers[ "bots" ][ "behavior" ][ "camp" ] = randomint( 100 ); + self.pers[ "bots" ][ "behavior" ][ "follow" ] = randomint( 100 ); + self.pers[ "bots" ][ "behavior" ][ "crouch" ] = randomint( 100 ); + self.pers[ "bots" ][ "behavior" ][ "switch" ] = randomint( 100 ); + self.pers[ "bots" ][ "behavior" ][ "class" ] = randomint( 100 ); + self.pers[ "bots" ][ "behavior" ][ "jump" ] = randomint( 100 ); break; default: - self.pers["bots"]["skill"]["base"] = rankVar; + self.pers[ "bots" ][ "skill" ][ "base" ] = rankVar; break; } } @@ -600,20 +656,20 @@ set_diff() set_class( rankxp ) { primaryGroups = []; - primaryGroups[0] = "weapon_lmg"; - primaryGroups[1] = "weapon_smg"; - primaryGroups[2] = "weapon_shotgun"; - primaryGroups[3] = "weapon_sniper"; - primaryGroups[4] = "weapon_assault"; - primaryGroups[5] = "weapon_hmg"; + primaryGroups[ 0 ] = "weapon_lmg"; + primaryGroups[ 1 ] = "weapon_smg"; + primaryGroups[ 2 ] = "weapon_shotgun"; + primaryGroups[ 3 ] = "weapon_sniper"; + primaryGroups[ 4 ] = "weapon_assault"; + primaryGroups[ 5 ] = "weapon_hmg"; secondaryGroups = []; - secondaryGroups[0] = "weapon_pistol"; + secondaryGroups[ 0 ] = "weapon_pistol"; - rank = self maps\mp\gametypes\_rank::getRankForXp( rankxp ) + 1; + rank = self maps\mp\gametypes\_rank::getrankforxp( rankxp ) + 1; - if ( RandomFloatRange( 0, 1 ) < ( ( rank / level.maxRank ) + 0.1 ) ) + if ( randomfloatrange( 0, 1 ) < ( ( rank / level.maxrank ) + 0.1 ) ) { - self.pers["bots"]["behavior"]["quickscope"] = true; + self.pers[ "bots" ][ "behavior" ][ "quickscope" ] = true; } for ( i = 0; i < 5; i++ ) @@ -624,7 +680,9 @@ set_class( rankxp ) perk2 = get_random_perk( "perk2", rank ); if ( perk2 != "specialty_twoprimaries" ) + { secondary = get_random_weapon( secondaryGroups, rank ); + } else { secondary = ""; @@ -634,7 +692,9 @@ set_class( rankxp ) secondary = get_random_weapon( primaryGroups, rank ); if ( primary == secondary ) + { secondary = ""; + } } } @@ -646,29 +706,39 @@ set_class( rankxp ) perk4 = get_random_perk( "perk4", rank ); secgren = get_random_sec_grenade( perk1 ); gren = get_random_grenade( perk1 ); - camo = randomInt( 8 ); + camo = randomint( 8 ); if ( att1 == "bayonet" ) + { att1 = "BAYONET"; + } if ( att2 == "bayonet" ) + { att2 = "BAYONET"; // t4 is messed up lmao + } - self setStat ( 200 + ( i * 10 ) + 1, level.weaponReferenceToIndex[primary] ); + self setstat ( 200 + ( i * 10 ) + 1, level.weaponreferencetoindex[ primary ] ); - if ( att1 != "none" ) self setStat ( 200 + ( i * 10 ) + 2, level.weaponAttachmentReferenceToIndex[att1] ); + if ( att1 != "none" ) + { + self setstat ( 200 + ( i * 10 ) + 2, level.weaponattachmentreferencetoindex[ att1 ] ); + } - self setStat ( 200 + ( i * 10 ) + 3, level.weaponReferenceToIndex[secondary] ); + self setstat ( 200 + ( i * 10 ) + 3, level.weaponreferencetoindex[ secondary ] ); - if ( att2 != "none" ) self setStat ( 200 + ( i * 10 ) + 4, level.weaponAttachmentReferenceToIndex[att2] ); + if ( att2 != "none" ) + { + self setstat ( 200 + ( i * 10 ) + 4, level.weaponattachmentreferencetoindex[ att2 ] ); + } - self setStat ( 200 + ( i * 10 ) + 5, level.perkReferenceToIndex[perk1] ); - self setStat ( 200 + ( i * 10 ) + 6, level.perkReferenceToIndex[perk2] ); - self setStat ( 200 + ( i * 10 ) + 7, level.perkReferenceToIndex[perk3] ); - self setStat ( 200 + ( i * 10 ) + 105, level.perkReferenceToIndex[perk4] ); - self setStat ( 200 + ( i * 10 ) + 8, level.weaponReferenceToIndex[secgren] ); - self setStat ( 200 + ( i * 10 ) + 0, level.weaponReferenceToIndex[gren] ); - self setStat ( 200 + ( i * 10 ) + 9, camo ); + self setstat ( 200 + ( i * 10 ) + 5, level.perkreferencetoindex[ perk1 ] ); + self setstat ( 200 + ( i * 10 ) + 6, level.perkreferencetoindex[ perk2 ] ); + self setstat ( 200 + ( i * 10 ) + 7, level.perkreferencetoindex[ perk3 ] ); + self setstat ( 200 + ( i * 10 ) + 105, level.perkreferencetoindex[ perk4 ] ); + self setstat ( 200 + ( i * 10 ) + 8, level.weaponreferencetoindex[ secgren ] ); + self setstat ( 200 + ( i * 10 ) + 0, level.weaponreferencetoindex[ gren ] ); + self setstat ( 200 + ( i * 10 ) + 9, camo ); } } @@ -677,29 +747,31 @@ set_class( rankxp ) */ get_random_attachment( weapon, rank ) { - if ( RandomFloatRange( 0, 1 ) > ( 0.1 + ( rank / level.maxRank ) ) ) + if ( randomfloatrange( 0, 1 ) > ( 0.1 + ( rank / level.maxrank ) ) ) + { return "none"; + } - reasonable = GetDvarInt( "bots_loadout_reasonable" ); + reasonable = getdvarint( "bots_loadout_reasonable" ); - id = level.tbl_weaponIDs[level.weaponReferenceToIndex[weapon]]; - atts = strtok( id["attachment"], " " ); - atts[atts.size] = "none"; + id = level.tbl_weaponids[ level.weaponreferencetoindex[ weapon ] ]; + atts = strtok( id[ "attachment" ], " " ); + atts[ atts.size ] = "none"; for ( ;; ) { - att = atts[randomInt( atts.size )]; + att = atts[ randomint( atts.size ) ]; if ( reasonable ) { /* switch(att) - { - case "acog": - if(weapon != "m40a3") - continue; - break; - }*/ + { + case "acog": + if(weapon != "m40a3") + continue; + break; + }*/ } return att; @@ -711,28 +783,36 @@ get_random_attachment( weapon, rank ) */ get_random_perk( perkslot, rank, att1, att2 ) { - if ( isDefined( att1 ) && isDefined( att2 ) && ( att1 == "grip" || att1 == "gl" || att2 == "grip" || att2 == "gl" ) ) + if ( isdefined( att1 ) && isdefined( att2 ) && ( att1 == "grip" || att1 == "gl" || att2 == "grip" || att2 == "gl" ) ) + { return "specialty_null"; + } - reasonable = GetDvarInt( "bots_loadout_reasonable" ); - op = GetDvarInt( "bots_loadout_allow_op" ); + reasonable = getdvarint( "bots_loadout_reasonable" ); + op = getdvarint( "bots_loadout_allow_op" ); - keys = getArrayKeys( level.tbl_PerkData ); + keys = getarraykeys( level.tbl_perkdata ); for ( ;; ) { - id = level.tbl_PerkData[keys[randomInt( keys.size )]]; + id = level.tbl_perkdata[ keys[ randomint( keys.size ) ] ]; - if ( !isDefined( id ) || !isDefined( id["perk_num"] ) ) + if ( !isdefined( id ) || !isdefined( id[ "perk_num" ] ) ) + { continue; + } - if ( perkslot != id["perk_num"] ) + if ( perkslot != id[ "perk_num" ] ) + { continue; + } - ref = id["reference_full"]; + ref = id[ "reference_full" ]; - if ( ref == "specialty_null" && randomInt( 100 ) < 95 ) + if ( ref == "specialty_null" && randomint( 100 ) < 95 ) + { continue; + } if ( reasonable ) { @@ -763,7 +843,9 @@ get_random_perk( perkslot, rank, att1, att2 ) } if ( !isItemUnlocked( ref, rank ) ) + { continue; + } return ref; } @@ -775,15 +857,15 @@ get_random_perk( perkslot, rank, att1, att2 ) get_random_grenade( perk1 ) { possibles = []; - possibles[0] = "frag_grenade"; - possibles[1] = "molotov"; - possibles[2] = "sticky_grenade"; + possibles[ 0 ] = "frag_grenade"; + possibles[ 1 ] = "molotov"; + possibles[ 2 ] = "sticky_grenade"; - reasonable = GetDvarInt( "bots_loadout_reasonable" ); + reasonable = getdvarint( "bots_loadout_reasonable" ); for ( ;; ) { - possible = possibles[randomInt( possibles.size )]; + possible = possibles[ randomint( possibles.size ) ]; if ( reasonable ) { @@ -804,15 +886,15 @@ get_random_grenade( perk1 ) get_random_sec_grenade( perk1 ) { possibles = []; - possibles[0] = "m8_white_smoke"; - possibles[1] = "signal_flare"; - possibles[2] = "tabun_gas"; + possibles[ 0 ] = "m8_white_smoke"; + possibles[ 1 ] = "signal_flare"; + possibles[ 2 ] = "tabun_gas"; - reasonable = GetDvarInt( "bots_loadout_reasonable" ); + reasonable = getdvarint( "bots_loadout_reasonable" ); for ( ;; ) { - possible = possibles[randomInt( possibles.size )]; + possible = possibles[ randomint( possibles.size ) ]; if ( reasonable ) { @@ -824,7 +906,9 @@ get_random_sec_grenade( perk1 ) } if ( perk1 == "specialty_specialgrenade" && possible == "m8_white_smoke" ) + { continue; + } return possible; } @@ -835,30 +919,36 @@ get_random_sec_grenade( perk1 ) */ get_random_weapon( groups, rank ) { - reasonable = GetDvarInt( "bots_loadout_reasonable" ); + reasonable = getdvarint( "bots_loadout_reasonable" ); - keys = getArrayKeys( level.tbl_weaponIDs ); + keys = getarraykeys( level.tbl_weaponids ); for ( ;; ) { - id = level.tbl_weaponIDs[keys[randomInt( keys.size )]]; + id = level.tbl_weaponids[ keys[ randomint( keys.size ) ] ]; - if ( !isDefined( id ) ) + if ( !isdefined( id ) ) + { continue; + } - group = id["group"]; + group = id[ "group" ]; inGroup = false; for ( i = groups.size - 1; i >= 0; i-- ) { - if ( groups[i] == group ) + if ( groups[ i ] == group ) + { inGroup = true; + } } if ( !inGroup ) + { continue; + } - ref = id["reference"]; + ref = id[ "reference" ]; if ( reasonable ) { @@ -870,7 +960,9 @@ get_random_weapon( groups, rank ) } if ( !isItemUnlocked( ref, rank ) ) + { continue; + } return ref; } @@ -881,28 +973,32 @@ get_random_weapon( groups, rank ) */ bot_get_prestige() { - p_dvar = getDvarInt( "bots_loadout_prestige" ); + p_dvar = getdvarint( "bots_loadout_prestige" ); p = 0; if ( p_dvar == -1 ) { for ( i = 0; i < level.players.size; i++ ) { - player = level.players[i]; + player = level.players[ i ]; - if ( !isDefined( player.team ) ) + if ( !isdefined( player.team ) ) + { continue; + } if ( player is_bot() ) + { continue; + } - p = player getStat( int( tableLookup( "mp/playerStatsTable.csv", 1, "plevel", 0 ) ) ); + p = player getstat( int( tablelookup( "mp/playerStatsTable.csv", 1, "plevel", 0 ) ) ); break; } } else if ( p_dvar == -2 ) { - p = randomInt( 12 ); + p = randomint( 12 ); } else { @@ -918,7 +1014,7 @@ bot_get_prestige() bot_get_rank() { rank = 1; - rank_dvar = getDvarInt( "bots_loadout_rank" ); + rank_dvar = getdvarint( "bots_loadout_rank" ); if ( rank_dvar == -1 ) { @@ -928,13 +1024,17 @@ bot_get_rank() for ( i = level.players.size - 1; i >= 0; i-- ) { - player = level.players[i]; + player = level.players[ i ]; if ( player == self ) + { continue; + } - if ( !IsDefined( player.pers[ "rank" ] ) ) + if ( !isdefined( player.pers[ "rank" ] ) ) + { continue; + } if ( player is_bot() ) { @@ -947,14 +1047,16 @@ bot_get_rank() } if ( !human_ranks.size ) - human_ranks[ human_ranks.size ] = Round( random_normal_distribution( 35, 15, 0, level.maxRank ) ); + { + human_ranks[ human_ranks.size ] = Round( random_normal_distribution( 35, 15, 0, level.maxrank ) ); + } human_avg = array_average( human_ranks ); while ( bot_ranks.size + human_ranks.size < 5 ) { // add some random ranks for better random number distribution - rank = human_avg + RandomIntRange( -10, 10 ); + rank = human_avg + randomintrange( -10, 10 ); human_ranks[ human_ranks.size ] = rank; } @@ -963,18 +1065,18 @@ bot_get_rank() avg = array_average( ranks ); s = array_std_deviation( ranks, avg ); - rank = Round( random_normal_distribution( avg, s, 0, level.maxRank ) ); + rank = Round( random_normal_distribution( avg, s, 0, level.maxrank ) ); } else if ( rank_dvar == 0 ) { - rank = Round( random_normal_distribution( 35, 15, 0, level.maxRank ) ); + rank = Round( random_normal_distribution( 35, 15, 0, level.maxrank ) ); } else { - rank = Round( random_normal_distribution( rank_dvar, 5, 0, level.maxRank ) ); + rank = Round( random_normal_distribution( rank_dvar, 5, 0, level.maxrank ) ); } - return maps\mp\gametypes\_rank::getRankInfoMinXP( rank ); + return maps\mp\gametypes\_rank::getrankinfominxp( rank ); } /* @@ -988,15 +1090,19 @@ onSpawned() { self waittill( "spawned_player" ); - if ( randomInt( 100 ) <= self.pers["bots"]["behavior"]["class"] ) + if ( randomint( 100 ) <= self.pers[ "bots" ][ "behavior" ][ "class" ] ) + { self.bot_change_class = undefined; + } self.bot_lock_goal = false; self.help_time = undefined; self.bot_was_follow_script_update = undefined; - if ( getDvarInt( "bots_play_obj" ) ) + if ( getdvarint( "bots_play_obj" ) ) + { self thread bot_dom_cap_think(); + } } } @@ -1025,18 +1131,22 @@ start_bot_threads() level endon( "game_ended" ); self endon( "death" ); - while ( level.inPrematchPeriod ) + while ( level.inprematchperiod ) + { wait 0.05; + } // inventory usage - if ( getDvarInt( "bots_play_killstreak" ) ) + if ( getdvarint( "bots_play_killstreak" ) ) + { self thread bot_killstreak_think(); + } self thread bot_weapon_think(); self thread doReloadCancel(); // script targeting - if ( getDvarInt( "bots_play_target_other" ) ) + if ( getdvarint( "bots_play_target_other" ) ) { self thread bot_target_vehicle(); self thread bot_kill_dog_think(); @@ -1050,14 +1160,14 @@ start_bot_threads() self thread follow_target(); // camp and follow - if ( getDvarInt( "bots_play_camp" ) ) + if ( getdvarint( "bots_play_camp" ) ) { self thread bot_think_follow(); self thread bot_think_camp(); } // nades - if ( getDvarInt( "bots_play_nade" ) ) + if ( getdvarint( "bots_play_nade" ) ) { self thread bot_use_tube_think(); self thread bot_use_grenade_think(); @@ -1066,7 +1176,7 @@ start_bot_threads() } // obj - if ( getDvarInt( "bots_play_obj" ) ) + if ( getdvarint( "bots_play_obj" ) ) { self thread bot_dom_def_think(); self thread bot_dom_spawn_kill_think(); @@ -1095,18 +1205,24 @@ bot_inc_bots( obj, unreach ) level endon( "game_ended" ); self endon( "bot_inc_bots" ); - if ( !isDefined( obj ) ) + if ( !isdefined( obj ) ) + { return; + } - if ( !isDefined( obj.bots ) ) + if ( !isdefined( obj.bots ) ) + { obj.bots = 0; + } obj.bots++; ret = self waittill_any_return( "death", "disconnect", "bad_path", "goal", "new_goal" ); - if ( isDefined( obj ) && ( ret != "bad_path" || !isDefined( unreach ) ) ) + if ( isdefined( obj ) && ( ret != "bad_path" || !isdefined( unreach ) ) ) + { obj.bots--; + } } /* @@ -1124,13 +1240,13 @@ bots_watch_touch_obj( obj ) { wait 0.5; - if ( !isDefined( obj ) ) + if ( !isdefined( obj ) ) { self notify( "bad_path" ); return; } - if ( self IsTouching( obj ) ) + if ( self istouching( obj ) ) { self notify( "goal" ); return; @@ -1153,11 +1269,15 @@ bot_escort_obj( obj, carrier ) { wait 0.5; - if ( !isDefined( obj ) ) + if ( !isdefined( obj ) ) + { break; + } - if ( !isDefined( obj.carrier ) || carrier == obj.carrier ) + if ( !isdefined( obj.carrier ) || carrier == obj.carrier ) + { break; + } } self notify( "goal" ); @@ -1178,11 +1298,15 @@ bot_get_obj( obj ) { wait 0.5; - if ( !isDefined( obj ) ) + if ( !isdefined( obj ) ) + { break; + } - if ( isDefined( obj.carrier ) ) + if ( isdefined( obj.carrier ) ) + { break; + } } self notify( "goal" ); @@ -1205,7 +1329,9 @@ bot_defend_site( site ) wait 0.5; if ( !site isInUse() ) + { break; + } } self notify( "bad_path" ); @@ -1227,17 +1353,25 @@ bot_go_plant( plant ) { wait 1; - if ( level.bombPlanted ) + if ( level.bombplanted ) + { break; + } - if ( self isTouching( plant.trigger ) ) + if ( self istouching( plant.trigger ) ) + { break; + } } - if ( level.bombPlanted ) + if ( level.bombplanted ) + { self notify( "bad_path" ); + } else + { self notify( "goal" ); + } } /* @@ -1256,17 +1390,25 @@ bot_go_defuse( plant ) { wait 1; - if ( !level.bombPlanted ) + if ( !level.bombplanted ) + { break; + } - if ( self isTouching( plant.trigger ) ) + if ( self istouching( plant.trigger ) ) + { break; + } } - if ( !level.bombPlanted ) + if ( !level.bombplanted ) + { self notify( "bad_path" ); + } else + { self notify( "goal" ); + } } /* @@ -1274,8 +1416,10 @@ bot_go_defuse( plant ) */ bot_wait_stop_move() { - while ( !self isOnGround() || lengthSquared( self getVelocity() ) > 1 ) + while ( !self isonground() || lengthsquared( self getvelocity() ) > 1 ) + { wait 0.25; + } } /* @@ -1307,7 +1451,7 @@ fire_c4() for ( ;; ) { - self thread BotPressAds( 0.05 ); + self thread BotPressADS( 0.05 ); wait 0.1; } } @@ -1321,17 +1465,21 @@ changeToWeapon( weap ) self endon( "death" ); level endon( "game_ended" ); - if ( !self HasWeapon( weap ) ) + if ( !self hasweapon( weap ) ) + { return false; + } - self switchToWeapon( weap ); + self switchtoweapon( weap ); - if ( self GetCurrentWeapon() == weap ) + if ( self getcurrentweapon() == weap ) + { return true; + } self waittill_any_timeout( 5, "weapon_change" ); - return ( self GetCurrentWeapon() == weap ); + return ( self getcurrentweapon() == weap ); } /* @@ -1343,13 +1491,19 @@ botThrowGrenade( nade, time ) self endon( "death" ); level endon( "game_ended" ); - if ( !self GetAmmoCount( nade ) ) + if ( !self getammocount( nade ) ) + { return false; + } if ( isSecondaryGrenade( nade ) ) + { self thread BotPressSmoke( time ); + } else + { self thread BotPressFrag( time ); + } ret = self waittill_any_timeout( 5, "grenade_fire" ); @@ -1364,8 +1518,12 @@ bot_array_nearest_curorigin( array ) result = undefined; for ( i = 0; i < array.size; i++ ) - if ( !isDefined( result ) || DistanceSquared( self.origin, array[i].curorigin ) < DistanceSquared( self.origin, result.curorigin ) ) - result = array[i]; + { + if ( !isdefined( result ) || distancesquared( self.origin, array[ i ].curorigin ) < distancesquared( self.origin, result.curorigin ) ) + { + result = array[ i ]; + } + } return result; } @@ -1391,74 +1549,94 @@ stop_go_target_on_death( tar ) */ bot_revive_think_loop() { - revivePlayer = undefined; + reviveplayer = undefined; for ( i = 0; i < level.players.size; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player IsPlayerModelOK() ) + { continue; + } - if ( !isDefined( player.pers["team"] ) ) + if ( !isdefined( player.pers[ "team" ] ) ) + { continue; + } if ( player == self ) + { continue; + } - if ( self.pers["team"] != player.pers["team"] ) + if ( self.pers[ "team" ] != player.pers[ "team" ] ) + { continue; + } - if ( !isDefined( player.revivetrigger ) ) + if ( !isdefined( player.revivetrigger ) ) + { continue; + } - if ( isDefined( player.currentlyBeingRevived ) && player.currentlyBeingRevived ) + if ( isdefined( player.currentlybeingrevived ) && player.currentlybeingrevived ) + { continue; + } - if ( !isDefined( player.revivetrigger.bots ) ) + if ( !isdefined( player.revivetrigger.bots ) ) + { player.revivetrigger.bots = 0; + } if ( player.revivetrigger.bots > 2 ) + { continue; + } - revivePlayer = player; + reviveplayer = player; } - if ( !isDefined( revivePlayer ) ) + if ( !isdefined( reviveplayer ) ) + { return; + } - self BotNotifyBotEvent( "revive", "go", revivePlayer ); + self BotNotifyBotEvent( "revive", "go", reviveplayer ); self.bot_lock_goal = true; - self SetScriptGoal( revivePlayer.origin, 1 ); - self thread bot_inc_bots( revivePlayer.revivetrigger, true ); - self thread bot_go_revive( revivePlayer ); + self SetScriptGoal( reviveplayer.origin, 1 ); + self thread bot_inc_bots( reviveplayer.revivetrigger, true ); + self thread bot_go_revive( reviveplayer ); event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } - if ( event != "goal" || !isDefined( revivePlayer ) || ( isDefined( revivePlayer.currentlyBeingRevived ) && revivePlayer.currentlyBeingRevived ) || !self isTouching( revivePlayer.revivetrigger ) || self InLastStand() || self isDefusing() || self isPlanting() ) + if ( event != "goal" || !isdefined( reviveplayer ) || ( isdefined( reviveplayer.currentlybeingrevived ) && reviveplayer.currentlybeingrevived ) || !self istouching( reviveplayer.revivetrigger ) || self inLastStand() || self isDefusing() || self isPlanting() ) { self.bot_lock_goal = false; return; } - self BotNotifyBotEvent( "revive", "start", revivePlayer ); + self BotNotifyBotEvent( "revive", "start", reviveplayer ); self SetScriptGoal( self.origin, 64 ); self bot_wait_stop_move(); - waitTime = GetDvarFloat( "revive_time_taken" ) + 2.5; + waitTime = getdvarfloat( "revive_time_taken" ) + 2.5; self thread BotPressUse( waitTime ); wait waitTime; self ClearScriptGoal(); self.bot_lock_goal = false; - self BotNotifyBotEvent( "revive", "stop", revivePlayer ); + self BotNotifyBotEvent( "revive", "stop", reviveplayer ); } /* @@ -1473,20 +1651,30 @@ bot_revive_think() { wait randomintrange( 2, 5 ); - if ( !level.teamBased ) + if ( !level.teambased ) + { continue; + } if ( !self.canreviveothers ) + { continue; + } if ( self HasScriptGoal() || self.bot_lock_goal ) + { continue; + } if ( self isDefusing() || self isPlanting() ) + { continue; + } if ( self inLastStand() ) + { continue; + } self bot_revive_think_loop(); } @@ -1508,20 +1696,30 @@ bot_go_revive( revive ) { wait 1; - if ( !isDefined( revive ) ) + if ( !isdefined( revive ) ) + { break; + } - if ( !isDefined( revive.revivetrigger ) ) + if ( !isdefined( revive.revivetrigger ) ) + { break; + } - if ( self isTouching( revive.revivetrigger ) ) + if ( self istouching( revive.revivetrigger ) ) + { break; + } } - if ( !isDefined( revive ) || !isDefined( revive.revivetrigger ) ) + if ( !isdefined( revive ) || !isdefined( revive.revivetrigger ) ) + { self notify( "bad_path" ); + } else + { self notify( "goal" ); + } } /* @@ -1531,27 +1729,33 @@ bot_think_camp_loop() { campSpot = getWaypointForIndex( PickRandom( self waypointsNear( getWaypointsOfType( "camp" ), 1024 ) ) ); - if ( !isDefined( campSpot ) ) + if ( !isdefined( campSpot ) ) + { return; + } self SetScriptGoal( campSpot.origin, 16 ); - time = randomIntRange( 10, 20 ); + time = randomintrange( 10, 20 ); self BotNotifyBotEvent( "camp", "go", campSpot, time ); ret = self waittill_any_return( "new_goal", "goal", "bad_path" ); if ( ret != "new_goal" ) + { self ClearScriptGoal(); + } if ( ret != "goal" ) + { return; + } self BotNotifyBotEvent( "camp", "start", campSpot, time ); self thread killCampAfterTime( time ); - self CampAtSpot( campSpot.origin, campSpot.origin + AnglesToForward( campSpot.angles ) * 2048 ); + self CampAtSpot( campSpot.origin, campSpot.origin + anglestoforward( campSpot.angles ) * 2048 ); self BotNotifyBotEvent( "camp", "stop", campSpot, time ); } @@ -1569,10 +1773,14 @@ bot_think_camp() wait randomintrange( 4, 7 ); if ( self HasScriptGoal() || self.bot_lock_goal || self HasScriptAimPos() ) + { continue; + } - if ( randomInt( 100 ) > self.pers["bots"]["behavior"]["camp"] ) + if ( randomint( 100 ) > self.pers[ "bots" ][ "behavior" ][ "camp" ] ) + { continue; + } self bot_think_camp_loop(); } @@ -1607,8 +1815,10 @@ killCampAfterEntGone( ent ) { wait 0.05; - if ( !isDefined( ent ) ) + if ( !isdefined( ent ) ) + { break; + } } self ClearScriptGoal(); @@ -1626,7 +1836,7 @@ CampAtSpot( origin, anglePos ) self SetScriptGoal( origin, 64 ); - if ( isDefined( anglePos ) ) + if ( isdefined( anglePos ) ) { self SetScriptAimPos( anglePos ); } @@ -1643,36 +1853,48 @@ CampAtSpot( origin, anglePos ) bot_think_follow_loop() { 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-- ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player IsPlayerModelOK() ) + { continue; + } if ( player == self ) + { continue; + } - if ( !isAlive( player ) ) + if ( !isalive( player ) ) + { continue; + } if ( player.team != self.team ) + { continue; + } - if ( DistanceSquared( player.origin, self.origin ) > distSq ) + if ( distancesquared( player.origin, self.origin ) > distSq ) + { continue; + } - follows[follows.size] = player; + follows[ follows.size ] = player; } toFollow = PickRandom( follows ); - if ( !isDefined( toFollow ) ) + if ( !isdefined( toFollow ) ) + { return; + } - time = randomIntRange( 10, 20 ); + time = randomintrange( 10, 20 ); self BotNotifyBotEvent( "follow", "start", toFollow, time ); @@ -1692,16 +1914,22 @@ bot_think_follow() for ( ;; ) { - wait randomIntRange( 3, 5 ); + wait randomintrange( 3, 5 ); if ( self HasScriptGoal() || self.bot_lock_goal || self HasScriptAimPos() ) + { continue; + } - if ( randomInt( 100 ) > self.pers["bots"]["behavior"]["follow"] ) + if ( randomint( 100 ) > self.pers[ "bots" ][ "behavior" ][ "follow" ] ) + { continue; + } - if ( !level.teamBased ) + if ( !level.teambased ) + { continue; + } self bot_think_follow_loop(); } @@ -1720,8 +1948,10 @@ watchForFollowNewGoal() { self waittill( "new_goal" ); - if ( !isDefined( self.bot_was_follow_script_update ) ) + if ( !isdefined( self.bot_was_follow_script_update ) ) + { break; + } } self ClearScriptAimPos(); @@ -1757,14 +1987,18 @@ followPlayer( who ) { wait 0.05; - if ( !isDefined( who ) || !isAlive( who ) ) + if ( !isdefined( who ) || !isalive( who ) ) + { break; + } self SetScriptAimPos( who.origin + ( 0, 0, 42 ) ); myGoal = self GetScriptGoal(); - if ( isDefined( myGoal ) && DistanceSquared( myGoal, who.origin ) < 64 * 64 ) + if ( isdefined( myGoal ) && distancesquared( myGoal, who.origin ) < 64 * 64 ) + { continue; + } self.bot_was_follow_script_update = true; self SetScriptGoal( who.origin, 32 ); @@ -1785,40 +2019,58 @@ followPlayer( who ) */ bot_use_tube_think_loop( data ) { - if ( data.doFastContinue ) - data.doFastContinue = false; + if ( data.dofastcontinue ) + { + data.dofastcontinue = false; + } else { - 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 ) + { chance = 20; + } - if ( randomInt( 100 ) > chance ) + if ( randomint( 100 ) > chance ) + { return; + } } tube = self getValidTube(); - if ( !isDefined( tube ) ) + if ( !isdefined( tube ) ) + { return; + } - if ( self HasThreat() || self HasScriptAimPos() ) + if ( self hasThreat() || self HasScriptAimPos() ) + { return; + } if ( self BotIsFrozen() ) + { return; + } if ( self IsBotFragging() || self IsBotSmoking() ) + { return; + } if ( self isDefusing() || self isPlanting() ) + { return; + } - if ( self InLastStand() ) + if ( self inLastStand() ) + { return; + } loc = undefined; @@ -1826,23 +2078,29 @@ bot_use_tube_think_loop( data ) { 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"]; - dist = DistanceSquared( self.origin, loc ); + loc = traceForward[ "position" ]; + 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; + } - if ( !bulletTracePassed( self.origin + ( 0, 0, 5 ), self.origin + ( 0, 0, 2048 ), false, self ) ) + if ( !bullettracepassed( self.origin + ( 0, 0, 5 ), self.origin + ( 0, 0, 2048 ), false, self ) ) + { return; + } - if ( !bulletTracePassed( loc + ( 0, 0, 5 ), loc + ( 0, 0, 2048 ), false, self ) ) + if ( !bullettracepassed( loc + ( 0, 0, 5 ), loc + ( 0, 0, 2048 ), false, self ) ) + { return; + } loc += ( 0, 0, dist / 16000 ); } @@ -1855,23 +2113,29 @@ bot_use_tube_think_loop( data ) ret = self waittill_any_return( "new_goal", "goal", "bad_path" ); if ( ret != "new_goal" ) + { self ClearScriptGoal(); + } if ( ret != "goal" ) + { return; + } - data.doFastContinue = true; + data.dofastcontinue = true; return; } } else { tubeWp = getWaypointForIndex( self getNearestWaypointOfWaypoints( getWaypointsOfType( "tube" ) ) ); - loc = tubeWp.origin + AnglesToForward( tubeWp.angles ) * 2048; + loc = tubeWp.origin + anglestoforward( tubeWp.angles ) * 2048; } - if ( !isDefined( loc ) ) + if ( !isdefined( loc ) ) + { return; + } self BotNotifyBotEvent( "tube", "start", loc, tube ); @@ -1899,8 +2163,8 @@ bot_use_tube_think() self endon( "death" ); level endon( "game_ended" ); - data = spawnStruct(); - data.doFastContinue = false; + data = spawnstruct(); + data.dofastcontinue = false; for ( ;; ) { @@ -1913,65 +2177,91 @@ bot_use_tube_think() */ bot_use_equipment_think_loop( data ) { - if ( data.doFastContinue ) - data.doFastContinue = false; + if ( data.dofastcontinue ) + { + data.dofastcontinue = false; + } else { - 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 ) + { chance = 20; + } - if ( randomInt( 100 ) > chance ) + if ( randomint( 100 ) > chance ) + { return; + } } nade = undefined; - if ( self GetAmmoCount( "mine_bouncing_betty_mp" ) ) + if ( self getammocount( "mine_bouncing_betty_mp" ) ) + { nade = "mine_bouncing_betty_mp"; + } - if ( self GetAmmoCount( "satchel_charge_mp" ) ) + if ( self getammocount( "satchel_charge_mp" ) ) + { nade = "satchel_charge_mp"; + } - if ( !isDefined( nade ) ) + if ( !isdefined( nade ) ) + { return; + } - if ( self HasThreat() || self HasScriptAimPos() ) + if ( self hasThreat() || self HasScriptAimPos() ) + { return; + } if ( self BotIsFrozen() ) + { return; + } if ( self IsBotFragging() || self IsBotSmoking() ) + { return; + } if ( self isDefusing() || self isPlanting() ) + { return; + } if ( self inLastStand() ) + { return; + } loc = undefined; - curWeap = self GetCurrentWeapon(); + curWeap = self getcurrentweapon(); if ( curWeap == "none" || !isWeaponDroppable( curWeap ) ) - curWeap = self.lastDroppableWeapon; + { + curWeap = self.lastdroppableweapon; + } if ( !self nearAnyOfWaypoints( 128, getWaypointsOfType( "claymore" ) ) ) { clayWp = getWaypointForIndex( PickRandom( self waypointsNear( getWaypointsOfType( "claymore" ), 1024 ) ) ); - if ( !isDefined( clayWp ) || self HasScriptGoal() || self.bot_lock_goal ) + if ( !isdefined( clayWp ) || self HasScriptGoal() || self.bot_lock_goal ) { - myEye = self GetEye(); - loc = myEye + AnglesToForward( self GetPlayerAngles() ) * 256; + myEye = self geteye(); + loc = myEye + anglestoforward( self getplayerangles() ) * 256; - if ( !bulletTracePassed( myEye, loc, false, self ) ) + if ( !bullettracepassed( myEye, loc, false, self ) ) + { return; + } } else { @@ -1982,23 +2272,29 @@ bot_use_equipment_think_loop( data ) ret = self waittill_any_return( "new_goal", "goal", "bad_path" ); if ( ret != "new_goal" ) + { self ClearScriptGoal(); + } if ( ret != "goal" ) + { return; + } - data.doFastContinue = true; + data.dofastcontinue = true; return; } } else { clayWp = getWaypointForIndex( self getNearestWaypointOfWaypoints( getWaypointsOfType( "claymore" ) ) ); - loc = clayWp.origin + AnglesToForward( clayWp.angles ) * 2048; + loc = clayWp.origin + anglestoforward( clayWp.angles ) * 2048; } - if ( !isDefined( loc ) ) + if ( !isdefined( loc ) ) + { return; + } self BotNotifyBotEvent( "equ", "start", loc, nade ); @@ -2009,9 +2305,13 @@ bot_use_equipment_think_loop( data ) if ( self changeToWeapon( nade ) ) { if ( nade != "satchel_charge_mp" ) + { self thread fire_current_weapon(); + } else + { self thread fire_c4(); + } self waittill_any_timeout( 5, "grenade_fire", "weapon_change" ); self notify( "stop_firing_weapon" ); @@ -2031,8 +2331,8 @@ bot_use_equipment_think() self endon( "death" ); level endon( "game_ended" ); - data = spawnStruct(); - data.doFastContinue = false; + data = spawnstruct(); + data.dofastcontinue = false; for ( ;; ) { @@ -2045,40 +2345,58 @@ bot_use_equipment_think() */ bot_use_grenade_think_loop( data ) { - if ( data.doFastContinue ) - data.doFastContinue = false; + if ( data.dofastcontinue ) + { + data.dofastcontinue = false; + } else { - 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 ) + { chance = 20; + } - if ( randomInt( 100 ) > chance ) + if ( randomint( 100 ) > chance ) + { return; + } } nade = self getValidGrenade(); - if ( !isDefined( nade ) ) + if ( !isdefined( nade ) ) + { return; + } - if ( self HasThreat() || self HasScriptAimPos() ) + if ( self hasThreat() || self HasScriptAimPos() ) + { return; + } if ( self BotIsFrozen() ) + { return; + } if ( self IsBotFragging() || self IsBotSmoking() ) + { return; + } if ( self isDefusing() || self isPlanting() ) + { return; + } if ( self inLastStand() ) + { return; + } loc = undefined; @@ -2086,23 +2404,29 @@ bot_use_grenade_think_loop( data ) { nadeWp = getWaypointForIndex( PickRandom( 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"]; - dist = DistanceSquared( self.origin, loc ); + loc = traceForward[ "position" ]; + dist = distancesquared( self.origin, loc ); - if ( dist < level.bots_minGrenadeDistance || dist > level.bots_maxGrenadeDistance ) + if ( dist < level.bots_mingrenadedistance || dist > level.bots_maxgrenadedistance ) + { return; + } - if ( !bulletTracePassed( self.origin + ( 0, 0, 5 ), self.origin + ( 0, 0, 2048 ), false, self ) ) + if ( !bullettracepassed( self.origin + ( 0, 0, 5 ), self.origin + ( 0, 0, 2048 ), false, self ) ) + { return; + } - if ( !bulletTracePassed( loc + ( 0, 0, 5 ), loc + ( 0, 0, 2048 ), false, self ) ) + if ( !bullettracepassed( loc + ( 0, 0, 5 ), loc + ( 0, 0, 2048 ), false, self ) ) + { return; + } loc += ( 0, 0, dist / 3000 ); } @@ -2115,23 +2439,29 @@ bot_use_grenade_think_loop( data ) ret = self waittill_any_return( "new_goal", "goal", "bad_path" ); if ( ret != "new_goal" ) + { self ClearScriptGoal(); + } if ( ret != "goal" ) + { return; + } - data.doFastContinue = true; + data.dofastcontinue = true; return; } } else { nadeWp = getWaypointForIndex( self getNearestWaypointOfWaypoints( getWaypointsOfType( "grenade" ) ) ); - loc = nadeWp.origin + AnglesToForward( nadeWp.angles ) * 2048; + loc = nadeWp.origin + anglestoforward( nadeWp.angles ) * 2048; } - if ( !isDefined( loc ) ) + if ( !isdefined( loc ) ) + { return; + } self BotNotifyBotEvent( "nade", "start", loc, nade ); @@ -2142,7 +2472,9 @@ bot_use_grenade_think_loop( data ) time = 0.5; if ( nade == "frag_grenade_mp" ) + { time = 2; + } self botThrowGrenade( nade, time ); @@ -2159,8 +2491,8 @@ bot_use_grenade_think() self endon( "death" ); level endon( "game_ended" ); - data = spawnStruct(); - data.doFastContinue = false; + data = spawnstruct(); + data.dofastcontinue = false; for ( ;; ) { @@ -2173,13 +2505,17 @@ bot_use_grenade_think() */ follow_target_loop() { - threat = self GetThreat(); + threat = self getThreat(); - if ( !isPlayer( threat ) ) + if ( !isplayer( threat ) ) + { return; + } - if ( randomInt( 100 ) > self.pers["bots"]["behavior"]["follow"] * 5 ) + if ( randomint( 100 ) > self.pers[ "bots" ][ "behavior" ][ "follow" ] * 5 ) + { return; + } self BotNotifyBotEvent( "follow_threat", "start", threat ); @@ -2187,7 +2523,9 @@ follow_target_loop() self thread stop_go_target_on_death( threat ); if ( self waittill_any_return( "new_goal", "goal", "bad_path" ) != "new_goal" ) + { self ClearScriptGoal(); + } self BotNotifyBotEvent( "follow_threat", "stop", threat ); } @@ -2205,10 +2543,14 @@ follow_target() wait 1; if ( self HasScriptGoal() || self.bot_lock_goal ) + { continue; + } - if ( !self HasThreat() ) + if ( !self hasThreat() ) + { continue; + } self follow_target_loop(); } @@ -2219,8 +2561,8 @@ follow_target() */ bot_listen_to_steps_loop() { - dist = level.bots_listenDist; - //if(self hasPerk("specialty_parabolic")) + dist = level.bots_listendist; + // if(self hasperk("specialty_parabolic")) // dist *= 1.4; dist *= dist; @@ -2229,54 +2571,76 @@ bot_listen_to_steps_loop() for ( i = level.players.size - 1 ; i >= 0; i-- ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player IsPlayerModelOK() ) + { continue; + } if ( player == self ) + { continue; + } - if ( level.teamBased && self.team == player.team ) + if ( level.teambased && self.team == player.team ) + { continue; + } if ( player.sessionstate != "playing" ) + { continue; + } - if ( !isAlive( player ) ) + if ( !isalive( player ) ) + { continue; + } - if ( player hasPerk( "specialty_quieter" ) ) + if ( player hasperk( "specialty_quieter" ) ) + { continue; + } - if ( lengthsquared( player getVelocity() ) < 20000 ) + if ( lengthsquared( player getvelocity() ) < 20000 ) + { continue; + } - if ( distanceSquared( player.origin, self.origin ) > dist ) + if ( distancesquared( player.origin, self.origin ) > dist ) + { continue; + } heard = player; break; } - if ( !IsDefined( heard ) ) + if ( !isdefined( heard ) ) + { return; + } self BotNotifyBotEvent( "heard_target", "start", heard ); - if ( bulletTracePassed( self getEyePos(), heard getTagOrigin( "j_spineupper" ), false, heard ) ) + if ( bullettracepassed( self getEyePos(), heard gettagorigin( "j_spineupper" ), false, heard ) ) { self setAttacker( heard ); return; } if ( self HasScriptGoal() || self.bot_lock_goal ) + { return; + } self SetScriptGoal( heard.origin, 64 ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self BotNotifyBotEvent( "heard_target", "stop", heard ); } @@ -2293,8 +2657,10 @@ bot_listen_to_steps() { wait 1; - if ( self.pers["bots"]["skill"]["base"] < 3 ) + if ( self.pers[ "bots" ][ "skill" ][ "base" ] < 3 ) + { continue; + } self bot_listen_to_steps_loop(); } @@ -2308,40 +2674,50 @@ bot_revenge_think() self endon( "death" ); self endon( "disconnect" ); - if ( self.pers["bots"]["skill"]["base"] <= 1 ) - return; - - if ( isDefined( self.lastKiller ) && isAlive( self.lastKiller ) ) + if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 1 ) { - if ( bulletTracePassed( self getEyePos(), self.lastKiller getTagOrigin( "j_spineupper" ), false, self.lastKiller ) ) + return; + } + + if ( isdefined( self.lastkiller ) && isalive( self.lastkiller ) ) + { + if ( bullettracepassed( self getEyePos(), self.lastkiller gettagorigin( "j_spineupper" ), false, self.lastkiller ) ) { - self setAttacker( self.lastKiller ); + self setAttacker( self.lastkiller ); } } - if ( !isDefined( self.killerLocation ) ) + if ( !isdefined( self.killerlocation ) ) + { return; + } - loc = self.killerLocation; + loc = self.killerlocation; for ( ;; ) { - wait( RandomIntRange( 1, 5 ) ); + wait( randomintrange( 1, 5 ) ); if ( self HasScriptGoal() || self.bot_lock_goal ) + { return; + } if ( randomint( 100 ) < 75 ) + { return; + } - self BotNotifyBotEvent( "revenge", "start", loc, self.lastKiller ); + self BotNotifyBotEvent( "revenge", "start", loc, self.lastkiller ); self SetScriptGoal( loc, 64 ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } - self BotNotifyBotEvent( "revenge", "stop", loc, self.lastKiller ); + self BotNotifyBotEvent( "revenge", "stop", loc, self.lastkiller ); } } @@ -2353,57 +2729,75 @@ doReloadCancel_loop() ret = self waittill_any_return( "reload", "weapon_change" ); if ( self BotIsFrozen() ) + { return; + } if ( self isDefusing() || self isPlanting() ) + { return; + } - if ( self InLastStand() ) + if ( self inLastStand() ) + { return; + } - curWeap = self GetCurrentWeapon(); + curWeap = self getcurrentweapon(); - if ( !maps\mp\gametypes\_weapons::isSideArm( curWeap ) && !maps\mp\gametypes\_weapons::isPrimaryWeapon( curWeap ) ) + if ( !maps\mp\gametypes\_weapons::issidearm( curWeap ) && !maps\mp\gametypes\_weapons::isprimaryweapon( curWeap ) ) + { return; + } if ( ret == "reload" ) { // check single reloads - if ( self GetWeaponAmmoClip( curWeap ) < WeaponClipSize( curWeap ) ) + if ( self getweaponammoclip( curWeap ) < weaponclipsize( curWeap ) ) + { return; + } } // check difficulty - if ( self.pers["bots"]["skill"]["base"] <= 3 ) + if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 3 ) + { return; + } // check if got another weapon - weaponslist = self GetWeaponsListPrimaries(); + weaponslist = self getweaponslistprimaries(); weap = ""; while ( weaponslist.size ) { - weapon = weaponslist[randomInt( weaponslist.size )]; + weapon = weaponslist[ randomint( weaponslist.size ) ]; weaponslist = array_remove( weaponslist, weapon ); - if ( !maps\mp\gametypes\_weapons::isSideArm( weapon ) && !maps\mp\gametypes\_weapons::isPrimaryWeapon( weapon ) ) + if ( !maps\mp\gametypes\_weapons::issidearm( weapon ) && !maps\mp\gametypes\_weapons::isprimaryweapon( weapon ) ) + { continue; + } if ( curWeap == weapon || weapon == "none" || weapon == "" ) + { continue; + } weap = weapon; break; } if ( weap == "" ) + { return; + } // do the cancel wait 0.1; - self thread ChangeToWeapon( weap ); + self thread changeToWeapon( weap ); wait 0.25; - self thread ChangeToWeapon( curWeap ); + self thread changeToWeapon( curWeap ); wait 2; } @@ -2426,51 +2820,65 @@ doReloadCancel() */ bot_weapon_think_loop( data ) { - ret = self waittill_any_timeout( randomIntRange( 2, 4 ), "bot_force_check_switch" ); + ret = self waittill_any_timeout( randomintrange( 2, 4 ), "bot_force_check_switch" ); if ( self BotIsFrozen() ) + { return; + } - if ( self isDefusing() || self isPlanting() || self InLastStand() ) + if ( self isDefusing() || self isPlanting() || self inLastStand() ) + { return; + } hasTarget = self hasThreat(); - curWeap = self GetCurrentWeapon(); + curWeap = self getcurrentweapon(); if ( hasTarget ) { threat = self getThreat(); - if ( ( ( isPlayer( threat ) && threat isInVehicle() ) || threat.classname == "script_vehicle" ) && self getAmmoCount( "bazooka_mp" ) ) + if ( ( ( isplayer( threat ) && threat isinvehicle() ) || threat.classname == "script_vehicle" ) && self getammocount( "bazooka_mp" ) ) { if ( curWeap != "bazooka_mp" ) - self thread ChangeToWeapon( "bazooka_mp" ); + { + self thread changeToWeapon( "bazooka_mp" ); + } return; } } - force = (ret == "bot_force_check_switch"); + force = ( ret == "bot_force_check_switch" ); if ( data.first ) { data.first = false; - if ( randomInt( 100 ) > self.pers["bots"]["behavior"]["initswitch"] ) + if ( randomint( 100 ) > self.pers[ "bots" ][ "behavior" ][ "initswitch" ] ) + { return; + } } else { - if ( curWeap != "none" && self getAmmoCount( curWeap ) && curWeap != "squadcommand_mp" ) + if ( curWeap != "none" && self getammocount( curWeap ) && curWeap != "squadcommand_mp" ) { - if ( randomInt( 100 ) > self.pers["bots"]["behavior"]["switch"] ) + if ( randomint( 100 ) > self.pers[ "bots" ][ "behavior" ][ "switch" ] ) + { return; + } if ( hasTarget ) + { return; + } } else + { force = true; + } } weaponslist = self getweaponslist(); @@ -2478,29 +2886,39 @@ bot_weapon_think_loop( data ) while ( weaponslist.size ) { - weapon = weaponslist[randomInt( weaponslist.size )]; + weapon = weaponslist[ randomint( weaponslist.size ) ]; weaponslist = array_remove( weaponslist, weapon ); - if ( !self getAmmoCount( weapon ) && !force ) + if ( !self getammocount( weapon ) && !force ) + { continue; + } - if ( maps\mp\gametypes\_weapons::isHackWeapon( weapon ) ) + if ( maps\mp\gametypes\_weapons::ishackweapon( weapon ) ) + { continue; + } - if ( maps\mp\gametypes\_weapons::isGrenade( weapon ) ) + if ( maps\mp\gametypes\_weapons::isgrenade( weapon ) ) + { continue; + } if ( curWeap == weapon || weapon == "satchel_charge_mp" || weapon == "none" || weapon == "mine_bouncing_betty_mp" || weapon == "" || weapon == "squadcommand_mp" ) + { continue; + } weap = weapon; break; } if ( weap == "" ) + { return; + } - self thread ChangeToWeapon( weap ); + self thread changeToWeapon( weap ); } /* @@ -2512,7 +2930,7 @@ bot_weapon_think() self endon( "disconnect" ); level endon( "game_ended" ); - data = spawnStruct(); + data = spawnstruct(); data.first = true; for ( ;; ) @@ -2528,23 +2946,31 @@ bot_watch_think_mw2_loop() { tube = self getValidTube(); - if ( !isDefined( tube ) ) + if ( !isdefined( tube ) ) { - if ( self GetAmmoCount( "bazooka_mp" ) ) + if ( self getammocount( "bazooka_mp" ) ) + { tube = "bazooka_mp"; + } else + { return; + } } - if ( self GetCurrentWeapon() == tube ) + if ( self getcurrentweapon() == tube ) + { return; + } - chance = self.pers["bots"]["behavior"]["nade"]; + chance = self.pers[ "bots" ][ "behavior" ][ "nade" ]; - if ( randomInt( 100 ) > chance ) + if ( randomint( 100 ) > chance ) + { return; + } - self thread ChangeToWeapon( tube ); + self thread changeToWeapon( tube ); } /* @@ -2558,19 +2984,27 @@ bot_watch_think_mw2() for ( ;; ) { - wait randomIntRange( 1, 4 ); + wait randomintrange( 1, 4 ); if ( self BotIsFrozen() ) + { continue; + } if ( self isDefusing() || self isPlanting() ) + { continue; + } - if ( self InLastStand() ) + if ( self inLastStand() ) + { continue; + } - if ( self HasThreat() ) + if ( self hasThreat() ) + { continue; + } self bot_watch_think_mw2_loop(); } @@ -2581,70 +3015,98 @@ bot_watch_think_mw2() */ bot_killstreak_think_loop() { - curWeap = self GetCurrentWeapon(); + curWeap = self getcurrentweapon(); if ( curWeap == "none" || !isWeaponDroppable( curWeap ) ) - curWeap = self.lastDroppableWeapon; + { + curWeap = self.lastdroppableweapon; + } targetPos = undefined; - switch ( self.pers["hardPointItem"] ) + switch ( self.pers[ "hardPointItem" ] ) { case "radar_mp": - if ( self.bot_radar && self.pers["bots"]["skill"]["base"] > 3 ) + if ( self.bot_radar && self.pers[ "bots" ][ "skill" ][ "base" ] > 3 ) + { return; + } break; case "dogs_mp": - if ( isDefined( level.dogs ) ) + if ( isdefined( level.dogs ) ) + { return; + } break; case "artillery_mp": - if ( isDefined( level.artilleryInProgress ) ) + if ( isdefined( level.artilleryinprogress ) ) + { return; + } players = []; for ( i = level.players.size - 1; i >= 0; i-- ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player IsPlayerModelOK() ) + { continue; + } if ( player == self ) + { continue; + } - if ( !isDefined( player.team ) ) + if ( !isdefined( player.team ) ) + { continue; + } - if ( level.teamBased && self.team == player.team ) + if ( level.teambased && self.team == player.team ) + { continue; + } if ( player.sessionstate != "playing" ) + { continue; + } - if ( !isAlive( player ) ) + if ( !isalive( player ) ) + { continue; + } - if ( player hasPerk( "specialty_gpsjammer" ) ) + if ( player hasperk( "specialty_gpsjammer" ) ) + { continue; + } - if ( !bulletTracePassed( player.origin, player.origin + ( 0, 0, 512 ), false, player ) && self.pers["bots"]["skill"]["base"] > 3 ) + if ( !bullettracepassed( player.origin, player.origin + ( 0, 0, 512 ), false, player ) && self.pers[ "bots" ][ "skill" ][ "base" ] > 3 ) + { continue; + } - players[players.size] = player; + players[ players.size ] = player; } target = PickRandom( players ); - if ( isDefined( target ) ) - targetPos = target.origin + ( randomIntRange( ( 8 - self.pers["bots"]["skill"]["base"] ) * -75, ( 8 - self.pers["bots"]["skill"]["base"] ) * 75 ), randomIntRange( ( 8 - self.pers["bots"]["skill"]["base"] ) * -75, ( 8 - self.pers["bots"]["skill"]["base"] ) * 75 ), 0 ); - else if ( self.pers["bots"]["skill"]["base"] <= 3 ) - targetPos = self.origin + ( randomIntRange( -512, 512 ), randomIntRange( -512, 512 ), 0 ); + if ( isdefined( target ) ) + { + targetPos = target.origin + ( randomintrange( ( 8 - self.pers[ "bots" ][ "skill" ][ "base" ] ) * -75, ( 8 - self.pers[ "bots" ][ "skill" ][ "base" ] ) * 75 ), randomintrange( ( 8 - self.pers[ "bots" ][ "skill" ][ "base" ] ) * -75, ( 8 - self.pers[ "bots" ][ "skill" ][ "base" ] ) * 75 ), 0 ); + } + else if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 3 ) + { + targetPos = self.origin + ( randomintrange( -512, 512 ), randomintrange( -512, 512 ), 0 ); + } break; @@ -2652,20 +3114,22 @@ bot_killstreak_think_loop() return; } - isAirstrikePos = isDefined( targetPos ); + isAirstrikePos = isdefined( targetPos ); - if ( self.pers["hardPointItem"] == "artillery_mp" && !isAirstrikePos ) + if ( self.pers[ "hardPointItem" ] == "artillery_mp" && !isAirstrikePos ) + { return; + } self BotNotifyBotEvent( "killstreak", "call", targetPos ); self BotStopMoving( true ); - if ( self changeToWeapon( self.pers["hardPointItem"] ) ) + if ( self changeToWeapon( self.pers[ "hardPointItem" ] ) ) { wait 1; - if ( isAirstrikePos && !isDefined( level.artilleryInProgress ) ) + if ( isAirstrikePos && !isdefined( level.artilleryinprogress ) ) { self BotFreezeControls( true ); @@ -2690,19 +3154,27 @@ bot_killstreak_think() for ( ;; ) { - wait randomIntRange( 1, 3 ); + wait randomintrange( 1, 3 ); if ( self BotIsFrozen() ) + { continue; + } - if ( !isDefined( self.pers["hardPointItem"] ) ) + if ( !isdefined( self.pers[ "hardPointItem" ] ) ) + { continue; + } - if ( self HasThreat() ) + if ( self hasThreat() ) + { continue; + } - if ( self isDefusing() || self isPlanting() || self InLastStand() ) + if ( self isDefusing() || self isPlanting() || self inLastStand() ) + { continue; + } self bot_killstreak_think_loop(); } @@ -2713,45 +3185,59 @@ bot_killstreak_think() */ bot_uav_think_loop() { - dist = self.pers["bots"]["skill"]["help_dist"]; + dist = self.pers[ "bots" ][ "skill" ][ "help_dist" ]; dist *= dist * 8; for ( i = level.players.size - 1; i >= 0; i-- ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player IsPlayerModelOK() ) + { continue; + } if ( player == self ) + { continue; + } - if ( !isDefined( player.team ) ) + if ( !isdefined( player.team ) ) + { continue; + } if ( player.sessionstate != "playing" ) + { continue; + } if ( level.teambased && player.team == self.team ) + { continue; + } - if ( !isAlive( player ) ) + if ( !isalive( player ) ) + { continue; + } - distFromPlayer = DistanceSquared( self.origin, player.origin ); + distFromPlayer = distancesquared( self.origin, player.origin ); if ( distFromPlayer > dist ) + { continue; + } - if ( ( !isSubStr( player getCurrentWeapon(), "_silenced_" ) && !isSubStr( player getCurrentWeapon(), "_flash_" ) && player.bots_firing ) || ( self.bot_radar && !player hasPerk( "specialty_gpsjammer" ) ) ) + if ( ( !issubstr( player getcurrentweapon(), "_silenced_" ) && !issubstr( player getcurrentweapon(), "_flash_" ) && player.bots_firing ) || ( self.bot_radar && !player hasperk( "specialty_gpsjammer" ) ) ) { self BotNotifyBotEvent( "uav_target", "start", player ); - 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 getEyePos(), player getTagOrigin( "j_spineupper" ), false, player ) ) + if ( distFromPlayer < distSq && bullettracepassed( self getEyePos(), player gettagorigin( "j_spineupper" ), false, player ) ) { - self SetAttacker( player ); + self setAttacker( player ); } if ( !self HasScriptGoal() && !self.bot_lock_goal ) @@ -2760,7 +3246,9 @@ bot_uav_think_loop() self thread stop_go_target_on_death( player ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self BotNotifyBotEvent( "uav_target", "stop", player ); } @@ -2782,11 +3270,15 @@ bot_uav_think() { wait 0.75; - if ( self.pers["bots"]["skill"]["base"] <= 1 ) + if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 1 ) + { continue; + } - if ( level.hardcoreMode && !self.bot_radar ) + if ( level.hardcoremode && !self.bot_radar ) + { continue; + } self bot_uav_think_loop(); } @@ -2797,40 +3289,54 @@ bot_uav_think() */ bot_target_vehicle_loop() { - hasRecon = self hasPerk( "specialty_reconnaissance" ); - myEye = self GetEyePos(); + hasRecon = self hasperk( "specialty_reconnaissance" ); + myEye = self getEyePos(); target = undefined; - myAngles = self GetPlayerAngles(); + myAngles = self getplayerangles(); for ( i = 0; i < level.players.size; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player IsPlayerModelOK() ) + { continue; + } - vehicle = player GetVehicleOccupied(); + vehicle = player getvehicleoccupied(); - if ( !isDefined( vehicle ) ) + if ( !isdefined( vehicle ) ) + { continue; + } if ( player == self ) + { continue; + } - if ( level.teamBased && self.pers["team"] == player.pers["team"] ) + if ( level.teambased && self.pers[ "team" ] == player.pers[ "team" ] ) + { continue; + } - if ( !bulletTracePassed( myEye, vehicle.origin + ( 0.0, 0.0, 5.0 ), false, vehicle ) ) + if ( !bullettracepassed( myEye, vehicle.origin + ( 0.0, 0.0, 5.0 ), false, vehicle ) ) + { continue; + } if ( getConeDot( vehicle.origin, self.origin, myAngles ) < 0.6 && !hasRecon ) + { continue; + } target = vehicle; } - if ( !isDefined( target ) ) + if ( !isdefined( target ) ) + { return; + } self BotNotifyBotEvent( "attack_vehicle", "start", target ); @@ -2851,16 +3357,22 @@ bot_target_vehicle() for ( ;; ) { - wait( RandomIntRange( 1, 3 ) ); + wait( randomintrange( 1, 3 ) ); if ( self HasScriptEnemy() ) + { continue; + } - if ( self.pers["bots"]["skill"]["base"] <= 1 ) + if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 1 ) + { continue; + } - if ( !IsDefined( level.vehicles_list ) ) + if ( !isdefined( level.vehicles_list ) ) + { continue; + } self bot_target_vehicle_loop(); } @@ -2873,19 +3385,21 @@ bot_vehicle_attack( target ) { target endon( "death" ); - wait_time = RandomIntRange( 14, 20 ); + wait_time = randomintrange( 14, 20 ); for ( i = 0; i < wait_time; i++ ) { wait( 0.5 ); - if ( !IsDefined( target ) ) + if ( !isdefined( target ) ) { return; } - if ( !target GetVehOccupants().size ) + if ( !target getvehoccupants().size ) + { return; + } } } @@ -2894,35 +3408,47 @@ bot_vehicle_attack( target ) */ bot_kill_dog_think_loop() { - hasRecon = self hasPerk( "specialty_reconnaissance" ); - myEye = self GetEyePos(); + hasRecon = self hasperk( "specialty_reconnaissance" ); + myEye = self getEyePos(); targetDog = undefined; - myAngles = self GetPlayerAngles(); + myAngles = self getplayerangles(); for ( i = 0; i < level.dogs.size; i++ ) { - dog = level.dogs[i]; + dog = level.dogs[ i ]; if ( !isalive( dog ) ) + { continue; + } if ( isdefined( dog.script_owner ) && self == dog.script_owner ) + { continue; + } - if ( level.teamBased && dog.aiteam == self.pers["team"] ) + if ( level.teambased && dog.aiteam == self.pers[ "team" ] ) + { continue; + } - if ( DistanceSquared( dog.origin, self.origin ) > 64 * 64 && getConeDot( dog.origin, self.origin, myAngles ) < 0.6 && !hasRecon ) + if ( distancesquared( dog.origin, self.origin ) > 64 * 64 && getConeDot( dog.origin, self.origin, myAngles ) < 0.6 && !hasRecon ) + { continue; + } - if ( !bulletTracePassed( myEye, dog.origin + ( 0, 0, 5 ), false, dog ) ) + if ( !bullettracepassed( myEye, dog.origin + ( 0, 0, 5 ), false, dog ) ) + { continue; + } targetDog = dog; } - if ( !isDefined( targetDog ) ) + if ( !isdefined( targetDog ) ) + { return; + } self BotNotifyBotEvent( "attack_dog", "start", targetDog ); @@ -2946,13 +3472,19 @@ bot_kill_dog_think() wait( 0.5 ); if ( self HasScriptEnemy() ) + { continue; + } - if ( self.pers["bots"]["skill"]["base"] <= 1 ) + if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 1 ) + { continue; + } - if ( !isDefined( level.dogs ) ) + if ( !isdefined( level.dogs ) ) + { continue; + } self bot_kill_dog_think_loop(); } @@ -2965,19 +3497,21 @@ bot_dog_attack( dog ) { dog endon( "death" ); - wait_time = RandomIntRange( 14, 20 ); + wait_time = randomintrange( 14, 20 ); for ( i = 0; i < wait_time; i++ ) { wait( 0.5 ); - if ( !IsDefined( dog ) ) + if ( !isdefined( dog ) ) { return; } - if ( !bulletTracePassed( self GetEyePos(), dog.origin + ( 0, 0, 5 ), false, dog ) ) + if ( !bullettracepassed( self getEyePos(), dog.origin + ( 0, 0, 5 ), false, dog ) ) + { return; + } } } @@ -2986,46 +3520,54 @@ bot_dog_attack( dog ) */ bot_equipment_kill_think_loop() { - grenades = GetEntArray( "grenade", "classname" ); + grenades = getentarray( "grenade", "classname" ); myEye = self getEyePos(); - myAngles = self getPlayerAngles(); + myAngles = self getplayerangles(); target = undefined; - hasDetectExp = self hasPerk( "specialty_detectexplosive" ); + hasDetectExp = self hasperk( "specialty_detectexplosive" ); for ( i = grenades.size - 1; i >= 0; i-- ) { - item = grenades[i]; + item = grenades[ i ]; - if ( !isDefined( item ) ) - continue; - - if ( !IsDefined( item.name ) ) + if ( !isdefined( item ) ) { continue; } - if ( IsDefined( item.owner ) && ( ( level.teamBased && item.owner.team == self.team ) || item.owner == self ) ) + if ( !isdefined( item.name ) ) + { + continue; + } + + if ( isdefined( item.owner ) && ( ( level.teambased && item.owner.team == self.team ) || item.owner == self ) ) { continue; } if ( item.name != "mine_bouncing_betty_mp" && item.name != "satchel_charge_mp" ) + { continue; + } - if ( !hasDetectExp && !bulletTracePassed( myEye, item.origin + ( 0, 0, 0 ), false, item ) ) + if ( !hasDetectExp && !bullettracepassed( myEye, item.origin + ( 0, 0, 0 ), false, item ) ) + { continue; + } if ( getConeDot( item.origin, self.origin, myAngles ) < 0.6 ) + { continue; + } - if ( DistanceSquared( item.origin, self.origin ) < 512 * 512 ) + if ( distancesquared( item.origin, self.origin ) < 512 * 512 ) { target = item; break; } } - if ( isDefined( target ) ) + if ( isdefined( target ) ) { self BotNotifyBotEvent( "attack_equ", "start", target ); @@ -3047,13 +3589,17 @@ bot_equipment_kill_think() for ( ;; ) { - wait( RandomIntRange( 1, 3 ) ); + wait( randomintrange( 1, 3 ) ); if ( self HasScriptEnemy() ) + { continue; + } - if ( self.pers["bots"]["skill"]["base"] <= 1 ) + if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 1 ) + { continue; + } self bot_equipment_kill_think_loop(); } @@ -3066,13 +3612,13 @@ bot_equipment_attack( equ ) { equ endon( "death" ); - wait_time = RandomIntRange( 7, 10 ); + wait_time = randomintrange( 7, 10 ); for ( i = 0; i < wait_time; i++ ) { wait( 1 ); - if ( !IsDefined( equ ) ) + if ( !isdefined( equ ) ) { return; } @@ -3084,12 +3630,18 @@ bot_equipment_attack( equ ) */ BotRandomStance() { - if ( randomInt( 100 ) < 80 ) + if ( randomint( 100 ) < 80 ) + { self BotSetStance( "prone" ); - else if ( randomInt( 100 ) < 60 ) + } + else if ( randomint( 100 ) < 60 ) + { self BotSetStance( "crouch" ); + } else + { self BotSetStance( "stand" ); + } } /* @@ -3102,23 +3654,33 @@ BotUseRandomEquipment() equ = undefined; - if ( self GetAmmoCount( "mine_bouncing_betty_mp" ) ) + if ( self getammocount( "mine_bouncing_betty_mp" ) ) + { equ = "mine_bouncing_betty_mp"; + } - if ( self GetAmmoCount( "satchel_charge_mp" ) ) + if ( self getammocount( "satchel_charge_mp" ) ) + { equ = "satchel_charge_mp"; + } - if ( !isDefined( equ ) ) + if ( !isdefined( equ ) ) + { return; + } - curWeap = self GetCurrentWeapon(); + curWeap = self getcurrentweapon(); if ( self changeToWeapon( equ ) ) { if ( equ != "satchel_charge_mp" ) + { self thread fire_current_weapon(); + } else + { self thread fire_c4(); + } self waittill_any_timeout( 5, "grenade_fire", "weapon_change" ); self notify( "stop_firing_weapon" ); @@ -3136,41 +3698,57 @@ BotLookAtRandomThing( obj_target ) self endon( "disconnect" ); if ( self HasScriptAimPos() ) + { return; + } - rand = RandomInt( 100 ); + rand = randomint( 100 ); nearestEnemy = undefined; for ( i = 0; i < level.players.size; i++ ) { - player = level.players[i]; + player = level.players[ i ]; - if ( !isDefined( player ) || !isDefined( player.team ) ) + if ( !isdefined( player ) || !isdefined( player.team ) ) + { continue; + } - if ( !isAlive( player ) ) + if ( !isalive( player ) ) + { continue; + } - if ( level.teamBased && self.team == player.team ) + if ( level.teambased && self.team == player.team ) + { continue; + } - if ( !isDefined( nearestEnemy ) || DistanceSquared( self.origin, player.origin ) < DistanceSquared( self.origin, nearestEnemy.origin ) ) + if ( !isdefined( nearestEnemy ) || distancesquared( self.origin, player.origin ) < distancesquared( self.origin, nearestEnemy.origin ) ) { nearestEnemy = player; } } - origin = ( 0, 0, self GetEyeHeight() ); + origin = ( 0, 0, self getEyeHeight() ); - if ( isDefined( nearestEnemy ) && DistanceSquared( self.origin, nearestEnemy.origin ) < 1024 * 1024 && rand < 40 ) - origin += ( nearestEnemy.origin[0], nearestEnemy.origin[1], self.origin[2] ); - else if ( isDefined( obj_target ) && rand < 50 ) - origin += ( obj_target.origin[0], obj_target.origin[1], self.origin[2] ); + if ( isdefined( nearestEnemy ) && distancesquared( self.origin, nearestEnemy.origin ) < 1024 * 1024 && rand < 40 ) + { + origin += ( nearestEnemy.origin[ 0 ], nearestEnemy.origin[ 1 ], self.origin[ 2 ] ); + } + else if ( isdefined( obj_target ) && rand < 50 ) + { + origin += ( obj_target.origin[ 0 ], obj_target.origin[ 1 ], self.origin[ 2 ] ); + } else if ( rand < 85 ) - origin += self.origin + AnglesToForward( ( 0, self.angles[1] - 180, 0 ) ) * 1024; + { + origin += self.origin + anglestoforward( ( 0, self.angles[ 1 ] - 180, 0 ) ) * 1024; + } else - origin += self.origin + AnglesToForward( ( 0, RandomInt( 360 ), 0 ) ) * 1024; + { + origin += self.origin + anglestoforward( ( 0, randomint( 360 ), 0 ) ) * 1024; + } self SetScriptAimPos( origin ); wait 2; @@ -3187,22 +3765,30 @@ bot_do_random_action_for_objective( obj_target ) self notify( "bot_do_random_action_for_objective" ); self endon( "bot_do_random_action_for_objective" ); - if ( !isDefined( self.bot_random_obj_action ) ) + if ( !isdefined( self.bot_random_obj_action ) ) { self.bot_random_obj_action = true; - if ( randomInt( 100 ) < 80 ) + if ( randomint( 100 ) < 80 ) + { self thread BotUseRandomEquipment(); + } - if ( randomInt( 100 ) < 75 ) + if ( randomint( 100 ) < 75 ) + { self thread BotLookAtRandomThing( obj_target ); + } } else { - if ( self GetStance() != "prone" && randomInt( 100 ) < 15 ) + if ( self getstance() != "prone" && randomint( 100 ) < 15 ) + { self BotSetStance( "prone" ); - else if ( randomInt( 100 ) < 5 ) + } + else if ( randomint( 100 ) < 5 ) + { self thread BotLookAtRandomThing( obj_target ); + } } wait 2; @@ -3215,32 +3801,42 @@ bot_do_random_action_for_objective( obj_target ) bot_dom_spawn_kill_think_loop() { myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - myFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( myTeam ); + otherTeam = getotherteam( myTeam ); + myFlagCount = maps\mp\gametypes\dom::getteamflagcount( myTeam ); if ( myFlagCount == level.flags.size ) + { return; + } - otherFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( otherTeam ); + otherFlagCount = maps\mp\gametypes\dom::getteamflagcount( otherTeam ); if ( myFlagCount <= otherFlagCount || otherFlagCount != 1 ) + { return; + } flag = undefined; 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 ) + { continue; + } - flag = level.flags[i]; + flag = level.flags[ i ]; } - if ( !isDefined( flag ) ) + if ( !isdefined( flag ) ) + { return; + } - if ( DistanceSquared( self.origin, flag.origin ) < 2048 * 2048 ) + if ( distancesquared( self.origin, flag.origin ) < 2048 * 2048 ) + { return; + } self BotNotifyBotEvent( "dom", "start", "spawnkill", flag ); @@ -3249,7 +3845,9 @@ bot_dom_spawn_kill_think_loop() self thread bot_dom_watch_flags( myFlagCount, myTeam ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self BotNotifyBotEvent( "dom", "stop", "spawnkill", flag ); } @@ -3263,17 +3861,23 @@ bot_dom_spawn_kill_think() self endon( "disconnect" ); if ( level.gametype != "dom" ) + { return; + } for ( ;; ) { wait( randomintrange( 10, 20 ) ); if ( randomint( 100 ) < 20 ) + { continue; + } if ( self HasScriptGoal() || self.bot_lock_goal ) + { continue; + } self bot_dom_spawn_kill_think_loop(); } @@ -3294,8 +3898,10 @@ bot_dom_watch_flags( count, myTeam ) { wait 0.5; - if ( maps\mp\gametypes\dom::getTeamFlagCount( myTeam ) != count ) + if ( maps\mp\gametypes\dom::getteamflagcount( myTeam ) != count ) + { break; + } } self notify( "bad_path" ); @@ -3311,18 +3917,26 @@ bot_dom_def_think_loop() 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 ) + { continue; + } - if ( !level.flags[i].useObj.objPoints[myTeam].isFlashing ) + if ( !level.flags[ i ].useobj.objpoints[ myTeam ].isflashing ) + { continue; + } - if ( !isDefined( flag ) || DistanceSquared( self.origin, level.flags[i].origin ) < DistanceSquared( self.origin, flag.origin ) ) - flag = level.flags[i]; + if ( !isdefined( flag ) || distancesquared( self.origin, level.flags[ i ].origin ) < distancesquared( self.origin, flag.origin ) ) + { + flag = level.flags[ i ]; + } } - if ( !isDefined( flag ) ) + if ( !isdefined( flag ) ) + { return; + } self BotNotifyBotEvent( "dom", "start", "defend", flag ); @@ -3332,7 +3946,9 @@ bot_dom_def_think_loop() self thread bots_watch_touch_obj( flag ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self BotNotifyBotEvent( "dom", "stop", "defend", flag ); } @@ -3346,17 +3962,23 @@ bot_dom_def_think() self endon( "disconnect" ); if ( level.gametype != "dom" ) + { return; + } for ( ;; ) { wait( randomintrange( 1, 3 ) ); if ( randomint( 100 ) < 35 ) + { continue; + } if ( self HasScriptGoal() || self.bot_lock_goal ) + { continue; + } self bot_dom_def_think_loop(); } @@ -3377,11 +3999,15 @@ bot_dom_watch_for_flashing( flag, myTeam ) { wait 0.5; - if ( !isDefined( flag ) ) + if ( !isdefined( flag ) ) + { break; + } - if ( flag maps\mp\gametypes\dom::getFlagTeam() != myTeam || !flag.useObj.objPoints[myTeam].isFlashing ) + if ( flag maps\mp\gametypes\dom::getflagteam() != myTeam || !flag.useobj.objpoints[ myTeam ].isflashing ) + { break; + } } self notify( "bad_path" ); @@ -3393,31 +4019,39 @@ bot_dom_watch_for_flashing( flag, myTeam ) bot_dom_cap_think_loop() { myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); + otherTeam = getotherteam( myTeam ); - myFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( myTeam ); + myFlagCount = maps\mp\gametypes\dom::getteamflagcount( myTeam ); if ( myFlagCount == level.flags.size ) + { return; + } - otherFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( otherTeam ); + otherFlagCount = maps\mp\gametypes\dom::getteamflagcount( otherTeam ); - if ( game["teamScores"][myteam] >= game["teamScores"][otherTeam] ) + if ( game[ "teamScores" ][ myTeam ] >= game[ "teamScores" ][ otherTeam ] ) { if ( myFlagCount < otherFlagCount ) { if ( randomint( 100 ) < 15 ) + { return; + } } else if ( myFlagCount == otherFlagCount ) { if ( randomint( 100 ) < 35 ) + { return; + } } else if ( myFlagCount > otherFlagCount ) { if ( randomint( 100 ) < 95 ) + { return; + } } } @@ -3426,18 +4060,22 @@ bot_dom_cap_think_loop() 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 ) + { continue; + } - flags[flags.size] = level.flags[i]; + flags[ flags.size ] = level.flags[ i ]; } - if ( randomInt( 100 ) > 30 ) + if ( randomint( 100 ) > 30 ) { for ( i = 0; i < flags.size; i++ ) { - if ( !isDefined( flag ) || DistanceSquared( self.origin, level.flags[i].origin ) < DistanceSquared( self.origin, flag.origin ) ) - flag = level.flags[i]; + if ( !isdefined( flag ) || distancesquared( self.origin, level.flags[ i ].origin ) < distancesquared( self.origin, flag.origin ) ) + { + flag = level.flags[ i ]; + } } } else if ( flags.size ) @@ -3445,20 +4083,24 @@ bot_dom_cap_think_loop() flag = PickRandom( flags ); } - if ( !isDefined( flag ) ) + if ( !isdefined( flag ) ) + { return; + } self BotNotifyBotEvent( "dom", "go", "cap", flag ); self.bot_lock_goal = true; self SetScriptGoal( flag.origin, 64 ); - self thread bot_dom_go_cap_flag( flag, myteam ); + self thread bot_dom_go_cap_flag( flag, myTeam ); event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } if ( event != "goal" ) { @@ -3470,13 +4112,15 @@ bot_dom_cap_think_loop() self SetScriptGoal( self.origin, 64 ); - while ( flag maps\mp\gametypes\dom::getFlagTeam() != myTeam && self isTouching( flag ) ) + while ( flag maps\mp\gametypes\dom::getflagteam() != myTeam && self istouching( flag ) ) { - cur = flag.useObj.curProgress; + cur = flag.useobj.curprogress; wait 0.5; - if ( flag.useObj.curProgress == cur ) - break;//some enemy is near us, kill him + if ( flag.useobj.curprogress == cur ) + { + break; // some enemy is near us, kill him + } self thread bot_do_random_action_for_objective( flag ); } @@ -3497,7 +4141,9 @@ bot_dom_cap_think() self endon( "disconnect" ); if ( level.gametype != "dom" ) + { return; + } for ( ;; ) { @@ -3508,8 +4154,10 @@ bot_dom_cap_think() continue; } - if ( !isDefined( level.flags ) || level.flags.size == 0 ) + if ( !isdefined( level.flags ) || level.flags.size == 0 ) + { continue; + } self bot_dom_cap_think_loop(); } @@ -3518,7 +4166,7 @@ bot_dom_cap_think() /* Bot goes to the flag, watching while they don't have the flag */ -bot_dom_go_cap_flag( flag, myteam ) +bot_dom_go_cap_flag( flag, myTeam ) { self endon( "death" ); self endon( "disconnect" ); @@ -3530,20 +4178,30 @@ bot_dom_go_cap_flag( flag, myteam ) { wait randomintrange( 2, 4 ); - if ( !isDefined( flag ) ) + if ( !isdefined( flag ) ) + { break; + } - if ( flag maps\mp\gametypes\dom::getFlagTeam() == myTeam ) + if ( flag maps\mp\gametypes\dom::getflagteam() == myTeam ) + { break; + } - if ( self isTouching( flag ) ) + if ( self istouching( flag ) ) + { break; + } } - if ( flag maps\mp\gametypes\dom::getFlagTeam() == myTeam ) + if ( flag maps\mp\gametypes\dom::getflagteam() == myTeam ) + { self notify( "bad_path" ); + } else + { self notify( "goal" ); + } } /* @@ -3552,32 +4210,38 @@ bot_dom_go_cap_flag( flag, myteam ) bot_hq_loop() { myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); + otherTeam = getotherteam( myTeam ); radio = level.radio; gameobj = radio.gameobject; - origin = ( radio.origin[0], radio.origin[1], radio.origin[2] + 5 ); + origin = ( radio.origin[ 0 ], radio.origin[ 1 ], radio.origin[ 2 ] + 5 ); - //if neut or enemy - if ( gameobj.ownerTeam != myTeam ) + // if neut or enemy + if ( gameobj.ownerteam != myTeam ) { - if ( gameobj.interactTeam == "none" ) //wait for it to become active + if ( gameobj.interactteam == "none" ) // wait for it to become active { if ( self HasScriptGoal() ) + { return; + } - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self SetScriptGoal( origin, 256 ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } return; } - //capture it + // capture it self BotNotifyBotEvent( "hq", "go", "cap" ); @@ -3588,7 +4252,9 @@ bot_hq_loop() event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } if ( event != "goal" ) { @@ -3596,7 +4262,7 @@ bot_hq_loop() return; } - if ( !self isTouching( gameobj.trigger ) || level.radio != radio ) + if ( !self istouching( gameobj.trigger ) || level.radio != radio ) { self.bot_lock_goal = false; return; @@ -3606,13 +4272,15 @@ bot_hq_loop() self SetScriptGoal( self.origin, 64 ); - while ( self isTouching( gameobj.trigger ) && gameobj.ownerTeam != myTeam && level.radio == radio ) + while ( self istouching( gameobj.trigger ) && gameobj.ownerteam != myTeam && level.radio == radio ) { - cur = gameobj.curProgress; + cur = gameobj.curprogress; wait 0.5; - if ( cur == gameobj.curProgress ) - break;//no prog made, enemy must be capping + if ( cur == gameobj.curprogress ) + { + break; // no prog made, enemy must be capping + } self thread bot_do_random_action_for_objective( gameobj.trigger ); } @@ -3622,9 +4290,9 @@ bot_hq_loop() self BotNotifyBotEvent( "hq", "stop", "cap" ); } - else//we own it + else // we own it { - if ( gameobj.objPoints[myteam].isFlashing ) //underattack + if ( gameobj.objpoints[ myTeam ].isflashing ) // underattack { self BotNotifyBotEvent( "hq", "start", "defend" ); @@ -3633,7 +4301,9 @@ bot_hq_loop() self thread bot_hq_watch_flashing( gameobj, radio ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; @@ -3642,15 +4312,21 @@ bot_hq_loop() } if ( self HasScriptGoal() ) + { return; + } - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self SetScriptGoal( origin, 256 ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } } } @@ -3663,7 +4339,9 @@ bot_hq() self endon( "disconnect" ); if ( level.gametype != "koth" ) + { return; + } for ( ;; ) { @@ -3674,11 +4352,15 @@ bot_hq() continue; } - if ( !isDefined( level.radio ) ) + if ( !isdefined( level.radio ) ) + { continue; + } - if ( !isDefined( level.radio.gameobject ) ) + if ( !isdefined( level.radio.gameobject ) ) + { continue; + } self bot_hq_loop(); } @@ -3699,20 +4381,30 @@ bot_hq_go_cap( obj, radio ) { wait randomintrange( 2, 4 ); - if ( !isDefined( obj ) ) + if ( !isdefined( obj ) ) + { break; + } - if ( self isTouching( obj.trigger ) ) + if ( self istouching( obj.trigger ) ) + { break; + } if ( level.radio != radio ) + { break; + } } if ( level.radio != radio ) + { self notify( "bad_path" ); + } else + { self notify( "goal" ); + } } /* @@ -3726,20 +4418,26 @@ bot_hq_watch_flashing( obj, radio ) self endon( "bad_path" ); self endon( "new_goal" ); - myteam = self.team; + myTeam = self.team; for ( ;; ) { wait 0.5; - if ( !isDefined( obj ) ) + if ( !isdefined( obj ) ) + { break; + } - if ( !obj.objPoints[myteam].isFlashing ) + if ( !obj.objpoints[ myTeam ].isflashing ) + { break; + } if ( level.radio != radio ) + { break; + } } self notify( "bad_path" ); @@ -3751,24 +4449,24 @@ bot_hq_watch_flashing( obj, radio ) bot_sab_loop() { myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); + otherTeam = getotherteam( myTeam ); - bomb = level.sabBomb; - bombteam = bomb.ownerTeam; + bomb = level.sabbomb; + bombteam = bomb.ownerteam; carrier = bomb.carrier; - timeleft = maps\mp\gametypes\_globallogic::getTimeRemaining() / 1000; + timeleft = maps\mp\gametypes\_globallogic::gettimeremaining() / 1000; // the bomb is ours, we are on the offence if ( bombteam == myTeam ) { - site = level.bombZones[otherTeam]; - origin = ( site.curorigin[0] + 50, site.curorigin[1] + 50, site.curorigin[2] + 5 ); + site = level.bombzones[ otherTeam ]; + origin = ( site.curorigin[ 0 ] + 50, site.curorigin[ 1 ] + 50, site.curorigin[ 2 ] + 5 ); // protect our planted bomb - if ( level.bombPlanted ) + if ( level.bombplanted ) { // kill defuser - if ( site isInUse() ) //somebody is defusing our bomb we planted + if ( site isInUse() ) // somebody is defusing our bomb we planted { self BotNotifyBotEvent( "sab", "start", "defuser" ); @@ -3778,7 +4476,9 @@ bot_sab_loop() self thread bot_defend_site( site ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; @@ -3786,15 +4486,19 @@ bot_sab_loop() return; } - //else hang around the site - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + // else hang around the site + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self.bot_lock_goal = true; self SetScriptGoal( origin, 256 ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; return; @@ -3805,27 +4509,35 @@ bot_sab_loop() { // lets escort the bomb carrier if ( self HasScriptGoal() ) + { return; + } origin = carrier.origin; - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self SetScriptGoal( origin, 256 ); self thread bot_escort_obj( bomb, carrier ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } return; } // we are the carrier of the bomb, lets check if we need to plant - timepassed = maps\mp\gametypes\_globallogic::getTimePassed() / 1000; + timepassed = maps\mp\gametypes\_globallogic::gettimepassed() / 1000; - if ( timepassed < 120 && timeleft >= 90 && randomInt( 100 ) < 98 ) + if ( timepassed < 120 && timeleft >= 90 && randomint( 100 ) < 98 ) + { return; + } self BotNotifyBotEvent( "sab", "go", "plant" ); @@ -3836,9 +4548,11 @@ bot_sab_loop() event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } - if ( event != "goal" || level.bombPlanted || !self isTouching( site.trigger ) || site IsInUse() || self inLastStand() || self HasThreat() ) + if ( event != "goal" || level.bombplanted || !self istouching( site.trigger ) || site isInUse() || self inLastStand() || self hasThreat() ) { self.bot_lock_goal = false; return; @@ -3850,7 +4564,7 @@ bot_sab_loop() self SetScriptGoal( self.origin, 64 ); self bot_wait_stop_move(); - waitTime = ( site.useTime / 1000 ) + 2.5; + waitTime = ( site.usetime / 1000 ) + 2.5; self thread BotPressUse( waitTime ); wait waitTime; @@ -3861,22 +4575,28 @@ bot_sab_loop() } else if ( bombteam == otherTeam ) // the bomb is theirs, we are on the defense { - site = level.bombZones[myteam]; + site = level.bombzones[ myTeam ]; - if ( !isDefined( site.bots ) ) + if ( !isdefined( site.bots ) ) + { site.bots = 0; + } // protect our site from planters - if ( !level.bombPlanted ) + if ( !level.bombplanted ) { - //kill bomb carrier - if ( site.bots > 2 || randomInt( 100 ) < 45 ) + // kill bomb carrier + if ( site.bots > 2 || randomint( 100 ) < 45 ) { if ( self HasScriptGoal() ) + { return; + } - if ( carrier hasPerk( "specialty_gpsjammer" ) ) + if ( carrier hasperk( "specialty_gpsjammer" ) ) + { return; + } origin = carrier.origin; @@ -3884,17 +4604,19 @@ bot_sab_loop() self thread bot_escort_obj( bomb, carrier ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } return; } - //protect bomb site - origin = ( site.curorigin[0] + 50, site.curorigin[1] + 50, site.curorigin[2] + 5 ); + // protect bomb site + origin = ( site.curorigin[ 0 ] + 50, site.curorigin[ 1 ] + 50, site.curorigin[ 2 ] + 5 ); self thread bot_inc_bots( site ); - if ( site isInUse() ) //somebody is planting + if ( site isInUse() ) // somebody is planting { self BotNotifyBotEvent( "sab", "start", "planter" ); @@ -3905,7 +4627,9 @@ bot_sab_loop() self thread bot_defend_site( site ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; @@ -3913,8 +4637,8 @@ bot_sab_loop() return; } - //else hang around the site - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + // else hang around the site + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) { wait 4; self notify( "bot_inc_bots" ); @@ -3927,29 +4651,37 @@ bot_sab_loop() self thread bot_inc_bots( site ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; return; } // bomb is planted we need to defuse - origin = ( site.curorigin[0] + 50, site.curorigin[1] + 50, site.curorigin[2] + 5 ); + origin = ( site.curorigin[ 0 ] + 50, site.curorigin[ 1 ] + 50, site.curorigin[ 2 ] + 5 ); // someone else is defusing, lets just hang around if ( site.bots > 1 ) { if ( self HasScriptGoal() ) + { return; + } - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self SetScriptGoal( origin, 256 ); self thread bot_go_defuse( site ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } return; } @@ -3966,9 +4698,11 @@ bot_sab_loop() event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } - if ( event != "goal" || !level.bombPlanted || site IsInUse() || !self isTouching( site.trigger ) || self InLastStand() || self HasThreat() ) + if ( event != "goal" || !level.bombplanted || site isInUse() || !self istouching( site.trigger ) || self inLastStand() || self hasThreat() ) { self.bot_lock_goal = false; return; @@ -3980,7 +4714,7 @@ bot_sab_loop() self SetScriptGoal( self.origin, 64 ); self bot_wait_stop_move(); - waitTime = ( site.useTime / 1000 ) + 2.5; + waitTime = ( site.usetime / 1000 ) + 2.5; self thread BotPressUse( waitTime ); wait waitTime; @@ -3991,7 +4725,7 @@ bot_sab_loop() } else // we need to go get the bomb! { - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2] + 5 ); + origin = ( bomb.curorigin[ 0 ], bomb.curorigin[ 1 ], bomb.curorigin[ 2 ] + 5 ); self BotNotifyBotEvent( "sab", "start", "bomb" ); @@ -4001,7 +4735,9 @@ bot_sab_loop() self thread bot_get_obj( bomb ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; @@ -4020,7 +4756,9 @@ bot_sab() level endon( "game_ended" ); if ( level.gametype != "sab" ) + { return; + } for ( ;; ) { @@ -4031,14 +4769,20 @@ bot_sab() continue; } - if ( !isDefined( level.sabBomb ) ) + if ( !isdefined( level.sabbomb ) ) + { continue; + } - if ( !isDefined( level.bombZones ) || !level.bombZones.size ) + if ( !isdefined( level.bombzones ) || !level.bombzones.size ) + { continue; + } - if ( self IsPlanting() || self isDefusing() ) + if ( self isPlanting() || self isDefusing() ) + { continue; + } self bot_sab_loop(); } @@ -4050,69 +4794,87 @@ bot_sab() bot_sd_defenders_loop( data ) { myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); + otherTeam = getotherteam( myTeam ); // bomb not planted, lets protect our sites - if ( !level.bombPlanted ) + if ( !level.bombplanted ) { - timeleft = maps\mp\gametypes\_globallogic::getTimeRemaining() / 1000; + timeleft = maps\mp\gametypes\_globallogic::gettimeremaining() / 1000; if ( timeleft >= 90 ) + { return; + } // check for a bomb carrier, and camp the bomb - if ( !level.multiBomb && isDefined( level.sdBomb ) ) + if ( !level.multibomb && isdefined( level.sdbomb ) ) { - bomb = level.sdBomb; - carrier = level.sdBomb.carrier; + bomb = level.sdbomb; + carrier = level.sdbomb.carrier; - if ( !isDefined( carrier ) ) + if ( !isdefined( carrier ) ) { - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2] + 5 ); + origin = ( bomb.curorigin[ 0 ], bomb.curorigin[ 1 ], bomb.curorigin[ 2 ] + 5 ); - //hang around the bomb + // hang around the bomb if ( self HasScriptGoal() ) + { return; + } - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self SetScriptGoal( origin, 256 ); self thread bot_get_obj( bomb ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } return; } } // pick a site to protect - if ( !isDefined( level.bombZones ) || !level.bombZones.size ) + if ( !isdefined( level.bombzones ) || !level.bombzones.size ) + { return; + } 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 ]; } if ( !sites.size ) + { return; + } if ( data.rand > 50 ) + { site = self bot_array_nearest_curorigin( sites ); + } else + { site = PickRandom( sites ); + } - if ( !isDefined( site ) ) + if ( !isdefined( site ) ) + { return; + } - origin = ( site.curorigin[0] + 50, site.curorigin[1] + 50, site.curorigin[2] + 5 ); + origin = ( site.curorigin[ 0 ] + 50, site.curorigin[ 1 ] + 50, site.curorigin[ 2 ] + 5 ); - if ( site isInUse() ) //somebody is planting + if ( site isInUse() ) // somebody is planting { self BotNotifyBotEvent( "sd", "start", "planter", site ); @@ -4122,7 +4884,9 @@ bot_sd_defenders_loop( data ) self thread bot_defend_site( site ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; @@ -4130,45 +4894,59 @@ bot_sd_defenders_loop( data ) return; } - //else hang around the site - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + // else hang around the site + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self.bot_lock_goal = true; self SetScriptGoal( origin, 256 ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; return; } // bomb is planted, we need to defuse - if ( !isDefined( level.defuseObject ) ) + if ( !isdefined( level.defuseobject ) ) + { return; + } - defuse = level.defuseObject; + defuse = level.defuseobject; - if ( !isDefined( defuse.bots ) ) + if ( !isdefined( defuse.bots ) ) + { defuse.bots = 0; + } - origin = ( defuse.curorigin[0], defuse.curorigin[1], defuse.curorigin[2] + 5 ); + origin = ( defuse.curorigin[ 0 ], defuse.curorigin[ 1 ], defuse.curorigin[ 2 ] + 5 ); // someone is going to go defuse ,lets just hang around if ( defuse.bots > 1 ) { if ( self HasScriptGoal() ) + { return; + } - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self SetScriptGoal( origin, 256 ); self thread bot_go_defuse( defuse ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } return; } @@ -4184,9 +4962,11 @@ bot_sd_defenders_loop( data ) event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } - if ( event != "goal" || !level.bombPlanted || defuse isInUse() || !self isTouching( defuse.trigger ) || self InLastStand() || self HasThreat() ) + if ( event != "goal" || !level.bombplanted || defuse isInUse() || !self istouching( defuse.trigger ) || self inLastStand() || self hasThreat() ) { self.bot_lock_goal = false; return; @@ -4198,7 +4978,7 @@ bot_sd_defenders_loop( data ) self SetScriptGoal( self.origin, 64 ); self bot_wait_stop_move(); - waitTime = ( defuse.useTime / 1000 ) + 2.5; + waitTime = ( defuse.usetime / 1000 ) + 2.5; self thread BotPressUse( waitTime ); wait waitTime; @@ -4218,12 +4998,16 @@ bot_sd_defenders() level endon( "game_ended" ); if ( level.gametype != "sd" ) + { return; + } - if ( self.team == game["attackers"] ) + if ( self.team == game[ "attackers" ] ) + { return; + } - data = spawnStruct(); + data = spawnstruct(); data.rand = self BotGetRandom(); for ( ;; ) @@ -4235,8 +5019,10 @@ bot_sd_defenders() continue; } - if ( self IsPlanting() || self isDefusing() ) + if ( self isPlanting() || self isDefusing() ) + { continue; + } self bot_sd_defenders_loop( data ); } @@ -4248,9 +5034,13 @@ bot_sd_defenders() bot_sd_attackers_loop( data ) { if ( data.first ) + { data.first = false; + } else + { wait( randomintrange( 3, 5 ) ); + } if ( self.bot_lock_goal ) { @@ -4258,19 +5048,21 @@ bot_sd_attackers_loop( data ) } myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); + otherTeam = getotherteam( myTeam ); - //bomb planted - if ( level.bombPlanted ) + // bomb planted + if ( level.bombplanted ) { - if ( !isDefined( level.defuseObject ) ) + if ( !isdefined( level.defuseobject ) ) + { return; + } - site = level.defuseObject; + site = level.defuseobject; - origin = ( site.curorigin[0], site.curorigin[1], site.curorigin[2] + 5 ); + origin = ( site.curorigin[ 0 ], site.curorigin[ 1 ], site.curorigin[ 2 ] + 5 ); - if ( site IsInUse() ) //somebody is defusing + if ( site isInUse() ) // somebody is defusing { self BotNotifyBotEvent( "sd", "start", "defuser" ); @@ -4281,7 +5073,9 @@ bot_sd_attackers_loop( data ) self thread bot_defend_site( site ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; @@ -4289,73 +5083,95 @@ bot_sd_attackers_loop( data ) return; } - //else hang around the site - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + // else hang around the site + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self.bot_lock_goal = true; self SetScriptGoal( origin, 256 ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; return; } - timeleft = maps\mp\gametypes\_globallogic::getTimeRemaining() / 1000; - timepassed = maps\mp\gametypes\_globallogic::getTimePassed() / 1000; + timeleft = maps\mp\gametypes\_globallogic::gettimeremaining() / 1000; + timepassed = maps\mp\gametypes\_globallogic::gettimepassed() / 1000; - //dont have a bomb - if ( !self IsBombCarrier() && !level.multiBomb ) + // dont have a bomb + if ( !self isBombCarrier() && !level.multibomb ) { - if ( !isDefined( level.sdBomb ) ) - return; - - bomb = level.sdBomb; - carrier = level.sdBomb.carrier; - - //bomb is picked up - if ( isDefined( carrier ) ) + if ( !isdefined( level.sdbomb ) ) { - //escort the bomb carrier - if ( self HasScriptGoal() ) - return; - - origin = carrier.origin; - - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) - return; - - self SetScriptGoal( origin, 256 ); - self thread bot_escort_obj( bomb, carrier ); - - if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) - self ClearScriptGoal(); - return; } - if ( !isDefined( bomb.bots ) ) + bomb = level.sdbomb; + carrier = level.sdbomb.carrier; + + // bomb is picked up + if ( isdefined( carrier ) ) + { + // escort the bomb carrier + if ( self HasScriptGoal() ) + { + return; + } + + origin = carrier.origin; + + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { + return; + } + + self SetScriptGoal( origin, 256 ); + + self thread bot_escort_obj( bomb, carrier ); + + if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { + self ClearScriptGoal(); + } + + self.bot_lock_goal = false; + return; + } + + if ( !isdefined( bomb.bots ) ) + { bomb.bots = 0; + } - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2] + 5 ); + origin = ( bomb.curorigin[ 0 ], bomb.curorigin[ 1 ], bomb.curorigin[ 2 ] + 5 ); - //hang around the bomb if other is going to go get it + // hang around the bomb if other is going to go get it if ( bomb.bots > 1 ) { if ( self HasScriptGoal() ) + { return; + } - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self SetScriptGoal( origin, 256 ); self thread bot_get_obj( bomb ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } return; } @@ -4369,7 +5185,9 @@ bot_sd_attackers_loop( data ) self thread bot_get_obj( bomb ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; @@ -4378,31 +5196,43 @@ bot_sd_attackers_loop( data ) } // check if to plant - if ( timepassed < 120 && timeleft >= 90 && randomInt( 100 ) < 98 ) + if ( timepassed < 120 && timeleft >= 90 && randomint( 100 ) < 98 ) + { return; + } - if ( !isDefined( level.bombZones ) || !level.bombZones.size ) + if ( !isdefined( level.bombzones ) || !level.bombzones.size ) + { return; + } 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 ]; } if ( !sites.size ) + { return; + } if ( data.rand > 50 ) + { plant = self bot_array_nearest_curorigin( sites ); + } else + { plant = PickRandom( sites ); + } - if ( !isDefined( plant ) ) + if ( !isdefined( plant ) ) + { return; + } - origin = ( plant.curorigin[0] + 50, plant.curorigin[1] + 50, plant.curorigin[2] + 5 ); + origin = ( plant.curorigin[ 0 ] + 50, plant.curorigin[ 1 ] + 50, plant.curorigin[ 2 ] + 5 ); self BotNotifyBotEvent( "sd", "go", "plant", plant ); @@ -4413,9 +5243,11 @@ bot_sd_attackers_loop( data ) event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } - if ( event != "goal" || level.bombPlanted || plant.visibleTeam == "none" || !self isTouching( plant.trigger ) || self InLastStand() || self HasThreat() || plant IsInUse() ) + if ( event != "goal" || level.bombplanted || plant.visibleteam == "none" || !self istouching( plant.trigger ) || self inLastStand() || self hasThreat() || plant isInUse() ) { self.bot_lock_goal = false; return; @@ -4427,7 +5259,7 @@ bot_sd_attackers_loop( data ) self SetScriptGoal( self.origin, 64 ); self bot_wait_stop_move(); - waitTime = ( plant.useTime / 1000 ) + 2.5; + waitTime = ( plant.usetime / 1000 ) + 2.5; self thread BotPressUse( waitTime ); wait waitTime; @@ -4447,12 +5279,16 @@ bot_sd_attackers() level endon( "game_ended" ); if ( level.gametype != "sd" ) + { return; + } - if ( self.team != game["attackers"] ) + if ( self.team != game[ "attackers" ] ) + { return; + } - data = spawnStruct(); + data = spawnstruct(); data.rand = self BotGetRandom(); data.first = true; @@ -4468,21 +5304,21 @@ bot_sd_attackers() bot_cap_loop() { myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); + otherTeam = getotherteam( myTeam ); - myflag = level.teamFlags[myteam]; - myzone = level.teamFlagZones[myteam]; + myflag = level.teamflags[ myTeam ]; + myzone = level.teamflagzones[ myTeam ]; - theirflag = level.teamFlags[otherTeam]; - theirzone = level.teamFlagZones[otherTeam]; + theirflag = level.teamflags[ otherTeam ]; + theirzone = level.teamflagzones[ otherTeam ]; - if ( myflag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() ) + if ( myflag maps\mp\gametypes\_gameobjects::isobjectawayfromhome() ) { carrier = myflag.carrier; - if ( !isDefined( carrier ) ) //someone doesnt has our flag + if ( !isdefined( carrier ) ) // someone doesnt has our flag { - if ( !isDefined( theirflag.carrier ) && DistanceSquared( self.origin, theirflag.curorigin ) < DistanceSquared( self.origin, myflag.curorigin ) ) //no one has their flag and its closer + if ( !isdefined( theirflag.carrier ) && distancesquared( self.origin, theirflag.curorigin ) < distancesquared( self.origin, myflag.curorigin ) ) // no one has their flag and its closer { self BotNotifyBotEvent( "cap", "start", "their_flag", theirflag ); @@ -4490,7 +5326,7 @@ bot_cap_loop() self BotNotifyBotEvent( "cap", "stop", "their_flag", theirflag ); } - else//go get it + else // go get it { self BotNotifyBotEvent( "cap", "start", "my_flag", myflag ); @@ -4503,9 +5339,9 @@ bot_cap_loop() } else { - if ( !theirflag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() && randomint( 100 ) < 50 ) + if ( !theirflag maps\mp\gametypes\_gameobjects::isobjectawayfromhome() && randomint( 100 ) < 50 ) { - //take their flag + // take their flag self BotNotifyBotEvent( "cap", "start", "their_flag", theirflag ); self bot_cap_get_flag( theirflag ); @@ -4515,18 +5351,24 @@ bot_cap_loop() else { if ( self HasScriptGoal() ) + { return; + } - if ( !isDefined( theirzone.bots ) ) + if ( !isdefined( theirzone.bots ) ) + { theirzone.bots = 0; + } origin = theirzone.curorigin; - if ( theirzone.bots > 2 || randomInt( 100 ) < 45 ) + if ( theirzone.bots > 2 || randomint( 100 ) < 45 ) { - //kill carrier - if ( carrier hasPerk( "specialty_gpsjammer" ) ) + // kill carrier + if ( carrier hasperk( "specialty_gpsjammer" ) ) + { return; + } origin = carrier.origin; @@ -4534,15 +5376,17 @@ bot_cap_loop() self thread bot_escort_obj( myflag, carrier ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } return; } self thread bot_inc_bots( theirzone ); - //camp their zone - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + // camp their zone + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) { wait 4; self notify( "bot_inc_bots" ); @@ -4555,15 +5399,17 @@ bot_cap_loop() self thread bot_escort_obj( myflag, carrier ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } } } } - else//our flag is ok + else // our flag is ok { - if ( self isFlagCarrier() ) //if have flag + if ( self isFlagCarrier() ) // if have flag { - //go cap + // go cap origin = myzone.curorigin; self BotNotifyBotEvent( "cap", "start", "cap" ); @@ -4577,7 +5423,9 @@ bot_cap_loop() wait 1; if ( evt != "new_goal" ) + { self ClearScriptGoal(); + } self.bot_lock_goal = false; @@ -4587,7 +5435,7 @@ bot_cap_loop() carrier = theirflag.carrier; - if ( !isDefined( carrier ) ) //if no one has enemy flag + if ( !isdefined( carrier ) ) // if no one has enemy flag { self BotNotifyBotEvent( "cap", "start", "their_flag", theirflag ); @@ -4597,21 +5445,27 @@ bot_cap_loop() return; } - //escort them + // escort them if ( self HasScriptGoal() ) + { return; + } origin = carrier.origin; - if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) + if ( distancesquared( origin, self.origin ) <= 1024 * 1024 ) + { return; + } self SetScriptGoal( origin, 256 ); self thread bot_escort_obj( theirflag, carrier ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } } } @@ -4625,7 +5479,9 @@ bot_cap() level endon( "game_ended" ); if ( level.gametype != "ctf" ) + { return; + } for ( ;; ) { @@ -4636,11 +5492,15 @@ bot_cap() continue; } - if ( !isDefined( level.teamFlagZones ) ) + if ( !isdefined( level.teamflagzones ) ) + { continue; + } - if ( !isDefined( level.teamFlags ) ) + if ( !isdefined( level.teamflags ) ) + { continue; + } self bot_cap_loop(); } @@ -4653,8 +5513,10 @@ getCarrierEntNum() { carrierNum = -1; - if ( isDefined( self.carrier ) ) - carrierNum = self.carrier getEntityNumber(); + if ( isdefined( self.carrier ) ) + { + carrierNum = self.carrier getentitynumber(); + } return carrierNum; } @@ -4666,7 +5528,7 @@ bot_cap_get_flag( flag ) { origin = flag.curorigin; - //go get it + // go get it self.bot_lock_goal = true; self SetScriptGoal( origin, 32 ); @@ -4676,7 +5538,9 @@ bot_cap_get_flag( flag ) evt = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( evt != "new_goal" ) + { self ClearScriptGoal(); + } if ( evt != "goal" ) { @@ -4687,13 +5551,15 @@ bot_cap_get_flag( flag ) self SetScriptGoal( self.origin, 64 ); curCarrier = flag getCarrierEntNum(); - while ( curCarrier == flag getCarrierEntNum() && self isTouching( flag.trigger ) ) + while ( curCarrier == flag getCarrierEntNum() && self istouching( flag.trigger ) ) { - cur = flag.curProgress; + cur = flag.curprogress; wait 0.5; - if ( flag.curProgress == cur ) - break;//some enemy is near us, kill him + if ( flag.curprogress == cur ) + { + break; // some enemy is near us, kill him + } } self ClearScriptGoal(); @@ -4707,29 +5573,37 @@ bot_cap_get_flag( flag ) bot_war_loop( data ) { myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); + otherTeam = getotherteam( myTeam ); ourFlags = 0; theirFlags = 0; neuFlags = 0; for ( i = 0; i < level.flags.size; i++ ) { - if ( level.flags[i] maps\mp\gametypes\twar::getFlagTeam() == myTeam ) + if ( level.flags[ i ] maps\mp\gametypes\twar::getflagteam() == myTeam ) + { ourFlags++; - else if ( level.flags[i] maps\mp\gametypes\twar::getFlagTeam() == otherTeam ) + } + else if ( level.flags[ i ] maps\mp\gametypes\twar::getflagteam() == otherTeam ) + { theirFlags++; + } else + { neuFlags++; + } } flag = maps\mp\gametypes\twar::locate_contested_twar_flag(); - if ( !isDefined( flag ) ) + if ( !isdefined( flag ) ) + { return; + } // check if should cap - if ( game["war_momentum"][myTeam + "_multiplier"] == getDvarInt( "twar_momentumMaxMultiplier" ) || - flag.useObj.numTouching[otherTeam] > flag.useObj.numTouching[myTeam] || + if ( game[ "war_momentum" ][ myTeam + "_multiplier" ] == getdvarint( "twar_momentumMaxMultiplier" ) || + flag.useobj.numtouching[ otherTeam ] > flag.useobj.numtouching[ myTeam ] || data.rand > 90 || ourFlags < theirFlags ) { self BotNotifyBotEvent( "twar", "go", "cap" ); @@ -4741,7 +5615,9 @@ bot_war_loop( data ) event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } if ( event != "goal" ) { @@ -4753,13 +5629,15 @@ bot_war_loop( data ) self SetScriptGoal( self.origin, 64 ); - while ( flag maps\mp\gametypes\twar::GetFlagTeam() == "neutral" && self isTouching( flag ) ) + while ( flag maps\mp\gametypes\twar::getflagteam() == "neutral" && self istouching( flag ) ) { - cur = flag.useObj.curProgress; + cur = flag.useobj.curprogress; wait 0.5; - if ( flag.useObj.curProgress == cur ) - break;//some enemy is near us, kill him + if ( flag.useobj.curprogress == cur ) + { + break; // some enemy is near us, kill him + } self thread bot_do_random_action_for_objective( flag ); } @@ -4774,15 +5652,19 @@ bot_war_loop( data ) { // build momentum around the flag - if ( DistanceSquared( self.origin, flag.origin ) < 2048 * 2048 ) + if ( distancesquared( self.origin, flag.origin ) < 2048 * 2048 ) + { return; + } self SetScriptGoal( flag.origin, 1024 ); self thread bots_go_around_twar( flag, myTeam, otherTeam ); if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) + { self ClearScriptGoal(); + } } } @@ -4796,9 +5678,11 @@ bot_war() level endon( "game_ended" ); if ( level.gametype != "twar" ) + { return; + } - data = spawnStruct(); + data = spawnstruct(); data.rand = self BotGetRandom(); for ( ;; ) @@ -4810,8 +5694,10 @@ bot_war() continue; } - if ( !isDefined( level.twarFlags ) ) + if ( !isdefined( level.twarflags ) ) + { continue; + } self bot_war_loop( data ); } @@ -4832,17 +5718,25 @@ bots_go_cap_twar( flag ) { wait randomintrange( 1, 4 ); - if ( flag maps\mp\gametypes\twar::GetFlagTeam() != "neutral" ) + if ( flag maps\mp\gametypes\twar::getflagteam() != "neutral" ) + { break; + } - if ( self isTouching( flag ) ) + if ( self istouching( flag ) ) + { break; + } } - if ( !self isTouching( flag ) ) + if ( !self istouching( flag ) ) + { self notify( "bad_path" ); + } else + { self notify( "goal" ); + } } /* @@ -4860,14 +5754,20 @@ bots_go_around_twar( flag, myTeam, otherTeam ) { wait randomintrange( 1, 4 ); - if ( flag maps\mp\gametypes\twar::GetFlagTeam() != "neutral" ) + if ( flag maps\mp\gametypes\twar::getflagteam() != "neutral" ) + { break; + } - if ( game["war_momentum"][myTeam + "_multiplier"] == getDvarInt( "twar_momentumMaxMultiplier" ) ) + if ( game[ "war_momentum" ][ myTeam + "_multiplier" ] == getdvarint( "twar_momentumMaxMultiplier" ) ) + { break; + } - if ( flag.useObj.numTouching[otherTeam] > flag.useObj.numTouching[myTeam] ) + if ( flag.useobj.numtouching[ otherTeam ] > flag.useobj.numtouching[ myTeam ] ) + { break; + } } self notify( "bad_path" ); diff --git a/maps/mp/bots/_bot_utility.gsc b/maps/mp/bots/_bot_utility.gsc index 2fc2fee..9886606 100644 --- a/maps/mp/bots/_bot_utility.gsc +++ b/maps/mp/bots/_bot_utility.gsc @@ -9,13 +9,19 @@ wait_for_builtins() { for ( i = 0; i < 20; i++ ) { - if ( isDefined( level.bot_builtins ) ) + if ( isdefined( level.bot_builtins ) ) + { return true; + } if ( i < 18 ) + { waittillframeend; + } else + { wait 0.05; + } } return false; @@ -26,9 +32,9 @@ wait_for_builtins() */ BotBuiltinPrintConsole( s ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["printconsole"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "printconsole" ] ) ) { - [[ level.bot_builtins["printconsole" ]]]( s ); + [[ level.bot_builtins[ "printconsole" ] ]]( s ); } } @@ -37,9 +43,9 @@ BotBuiltinPrintConsole( s ) */ BotBuiltinFileWrite( file, contents, mode ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["filewrite"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "filewrite" ] ) ) { - [[ level.bot_builtins["filewrite" ]]]( file, contents, mode ); + [[ level.bot_builtins[ "filewrite" ] ]]( file, contents, mode ); } } @@ -48,9 +54,9 @@ BotBuiltinFileWrite( file, contents, mode ) */ BotBuiltinFileRead( file ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["fileread"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "fileread" ] ) ) { - return [[ level.bot_builtins["fileread" ]]]( file ); + return [[ level.bot_builtins[ "fileread" ] ]]( file ); } return undefined; @@ -61,9 +67,9 @@ BotBuiltinFileRead( file ) */ BotBuiltinFileExists( file ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["fileexists"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "fileexists" ] ) ) { - return [[ level.bot_builtins["fileexists" ]]]( file ); + return [[ level.bot_builtins[ "fileexists" ] ]]( file ); } return false; @@ -71,37 +77,37 @@ BotBuiltinFileExists( file ) /* Bot action, does a bot action - botAction() + botaction() */ BotBuiltinBotAction( action ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["botaction"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botaction" ] ) ) { - self [[ level.bot_builtins["botaction" ]]]( action ); + self [[ level.bot_builtins[ "botaction" ] ]]( action ); } } /* Clears the bot from movement and actions - botStop() + botstop() */ BotBuiltinBotStop() { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["botstop"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botstop" ] ) ) { - self [[ level.bot_builtins["botstop" ]]](); + self [[ level.bot_builtins[ "botstop" ] ]](); } } /* Sets the bot's movement - botMovement(, ) + botmovement(, ) */ BotBuiltinBotMovement( forward, right ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["botmovement"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botmovement" ] ) ) { - self [[ level.bot_builtins["botmovement" ]]]( forward, right ); + self [[ level.bot_builtins[ "botmovement" ] ]]( forward, right ); } } @@ -110,9 +116,9 @@ BotBuiltinBotMovement( forward, right ) */ BotBuiltinIsBot() { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["isbot"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "isbot" ] ) ) { - return self [[ level.bot_builtins["isbot" ]]](); + return self [[ level.bot_builtins[ "isbot" ] ]](); } return false; @@ -123,9 +129,9 @@ BotBuiltinIsBot() */ BotBuiltinBotMeleeParams( yaw, dist ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["botmeleeparams"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botmeleeparams" ] ) ) { - self [[ level.bot_builtins["botmeleeparams" ]]]( yaw, dist ); + self [[ level.bot_builtins[ "botmeleeparams" ] ]]( yaw, dist ); } } @@ -134,7 +140,7 @@ BotBuiltinBotMeleeParams( yaw, dist ) */ is_host() { - return ( isDefined( self.pers["bot_host"] ) && self.pers["bot_host"] ); + return ( isdefined( self.pers[ "bot_host" ] ) && self.pers[ "bot_host" ] ); } /* @@ -142,27 +148,31 @@ is_host() */ doHostCheck() { - self.pers["bot_host"] = false; + self.pers[ "bot_host" ] = false; if ( self is_bot() ) + { return; + } result = false; - if ( getDvar( "bots_main_firstIsHost" ) != "0" ) + if ( getdvar( "bots_main_firstIsHost" ) != "0" ) { BotBuiltinPrintConsole( "WARNING: bots_main_firstIsHost is enabled" ); - if ( getDvar( "bots_main_firstIsHost" ) == "1" ) + if ( getdvar( "bots_main_firstIsHost" ) == "1" ) { - setDvar( "bots_main_firstIsHost", self getguid() ); + setdvar( "bots_main_firstIsHost", self getguid() ); } - if ( getDvar( "bots_main_firstIsHost" ) == self getguid() + "" ) + if ( getdvar( "bots_main_firstIsHost" ) == self getguid() + "" ) + { result = true; + } } - DvarGUID = getDvar( "bots_main_GUIDs" ); + DvarGUID = getdvar( "bots_main_GUIDs" ); if ( DvarGUID != "" ) { @@ -170,15 +180,19 @@ doHostCheck() for ( i = 0; i < guids.size; i++ ) { - if ( self getguid() + "" == guids[i] ) + if ( self getguid() + "" == guids[ i ] ) + { result = true; + } } } if ( !result ) + { return; + } - self.pers["bot_host"] = true; + self.pers[ "bot_host" ] = true; } /* @@ -263,8 +277,10 @@ BotGetRandom() */ BotGetTargetRandom() { - if ( !isDefined( self.bot.target ) ) + if ( !isdefined( self.bot.target ) ) + { return undefined; + } return self.bot.target.rand; } @@ -314,7 +330,7 @@ IsBotKnifing() */ IsPlayerModelOK() { - return ( isDefined( self.bot_model_fix ) && !isDefined( self.gib_ref ) ); + return ( isdefined( self.bot_model_fix ) && !isdefined( self.gib_ref ) ); } /* @@ -325,7 +341,9 @@ BotFreezeControls( what ) self.bot.isfrozen = what; if ( what ) + { self notify( "kill_goal" ); + } } /* @@ -344,7 +362,9 @@ BotStopMoving( what ) self.bot.stop_move = what; if ( what ) + { self notify( "kill_goal" ); + } } /* @@ -361,7 +381,7 @@ BotNotifyBotEvent( msg, a, b, c, d, e, f, g ) */ HasScriptGoal() { - return ( isDefined( self GetScriptGoal() ) ); + return ( isdefined( self GetScriptGoal() ) ); } /* @@ -377,8 +397,10 @@ GetScriptGoal() */ SetScriptGoal( goal, dist ) { - if ( !isDefined( dist ) ) + if ( !isdefined( dist ) ) + { dist = 16; + } self.bot.script_goal = goal; self.bot.script_goal_dist = dist; @@ -424,13 +446,13 @@ GetScriptAimPos() */ HasScriptAimPos() { - return isDefined( self GetScriptAimPos() ); + return isdefined( self GetScriptAimPos() ); } /* Sets the bot's target to be this ent. */ -SetAttacker( att ) +setAttacker( att ) { self.bot.target_this_frame = att; } @@ -455,10 +477,12 @@ ClearScriptEnemy() /* Returns the entity of the bot's target. */ -GetThreat() +getThreat() { if ( !isdefined( self.bot.target ) ) + { return undefined; + } return self.bot.target.entity; } @@ -468,15 +492,15 @@ GetThreat() */ HasScriptEnemy() { - return ( isDefined( self.bot.script_target ) ); + return ( isdefined( self.bot.script_target ) ); } /* Returns if the bot has a threat. */ -HasThreat() +hasThreat() { - return ( isDefined( self GetThreat() ) ); + return ( isdefined( self getThreat() ) ); } /* @@ -508,9 +532,9 @@ ClearPriorityObjective() /* If the player is defusing */ -IsDefusing() +isDefusing() { - return ( isDefined( self.isDefusing ) && self.isDefusing ); + return ( isdefined( self.isdefusing ) && self.isdefusing ); } /* @@ -518,7 +542,7 @@ IsDefusing() */ isPlanting() { - return ( isDefined( self.isPlanting ) && self.isPlanting ); + return ( isdefined( self.isplanting ) && self.isplanting ); } /* @@ -526,7 +550,7 @@ isPlanting() */ inLastStand() { - return ( isDefined( self.lastStand ) && self.lastStand ); + return ( isdefined( self.laststand ) && self.laststand ); } /* @@ -534,7 +558,7 @@ inLastStand() */ isArtShocked() { - return ( isDefined( self.beingArtilleryShellshocked ) && self.beingArtilleryShellshocked ); + return ( isdefined( self.beingartilleryshellshocked ) && self.beingartilleryshellshocked ); } /* @@ -542,7 +566,7 @@ isArtShocked() */ isBombCarrier() { - return ( isDefined( self.isBombCarrier ) && self.isBombCarrier ); + return ( isdefined( self.isbombcarrier ) && self.isbombcarrier ); } /* @@ -550,15 +574,15 @@ isBombCarrier() */ isInUse() { - return ( isDefined( self.inUse ) && self.inUse ); + return ( isdefined( self.inuse ) && self.inuse ); } /* is flared */ -IsFlared() +isFlared() { - return ( isdefined( self.inFlareVisionArea ) && self.inFlareVisionArea && !self hasPerk( "specialty_shades" ) ); + return ( isdefined( self.inflarevisionarea ) && self.inflarevisionarea && !self hasperk( "specialty_shades" ) ); } /* @@ -566,7 +590,7 @@ IsFlared() */ isGased() { - return ( isdefined( self.inPoisonArea ) && self.inPoisonArea && !self hasPerk( "specialty_gas_mask" ) ); + return ( isdefined( self.inpoisonarea ) && self.inpoisonarea && !self hasperk( "specialty_gas_mask" ) ); } /* @@ -574,7 +598,7 @@ isGased() */ isFlagCarrier() { - return ( isDefined( self.isFlagCarrier ) && self.isFlagCarrier ); + return ( isdefined( self.isflagcarrier ) && self.isflagcarrier ); } /* @@ -586,13 +610,17 @@ getValidTube() for ( i = 0; i < weaps.size; i++ ) { - weap = weaps[i]; + weap = weaps[ i ]; - if ( !self getAmmoCount( weap ) ) + if ( !self getammocount( weap ) ) + { continue; + } - if ( isSubStr( weap, "gl_" ) && !isSubStr( weap, "_gl_" ) ) + if ( issubstr( weap, "gl_" ) && !issubstr( weap, "_gl_" ) ) + { return weap; + } } return undefined; @@ -604,24 +632,28 @@ getValidTube() getValidGrenade() { grenadeTypes = []; - grenadeTypes[grenadeTypes.size] = "frag_grenade_mp"; - grenadeTypes[grenadeTypes.size] = "molotov_mp"; - grenadeTypes[grenadeTypes.size] = "m8_white_smoke_mp"; - grenadeTypes[grenadeTypes.size] = "tabun_gas_mp"; - grenadeTypes[grenadeTypes.size] = "sticky_grenade_mp"; - grenadeTypes[grenadeTypes.size] = "signal_flare_mp"; + grenadeTypes[ grenadeTypes.size ] = "frag_grenade_mp"; + grenadeTypes[ grenadeTypes.size ] = "molotov_mp"; + grenadeTypes[ grenadeTypes.size ] = "m8_white_smoke_mp"; + grenadeTypes[ grenadeTypes.size ] = "tabun_gas_mp"; + grenadeTypes[ grenadeTypes.size ] = "sticky_grenade_mp"; + grenadeTypes[ grenadeTypes.size ] = "signal_flare_mp"; possibles = []; for ( i = 0; i < grenadeTypes.size; i++ ) { - if ( !self hasWeapon( grenadeTypes[i] ) ) + if ( !self hasweapon( grenadeTypes[ i ] ) ) + { continue; + } - if ( !self getAmmoCount( grenadeTypes[i] ) ) + if ( !self getammocount( grenadeTypes[ i ] ) ) + { continue; + } - possibles[possibles.size] = grenadeTypes[i]; + possibles[ possibles.size ] = grenadeTypes[ i ]; } return PickRandom( possibles ); @@ -633,9 +665,11 @@ getValidGrenade() PickRandom( arr ) { if ( !arr.size ) + { return undefined; + } - return arr[randomInt( arr.size )]; + return arr[ randomint( arr.size ) ]; } /* @@ -651,7 +685,7 @@ isSecondaryGrenade( gnade ) */ getBaseWeaponName( weap ) { - return strtok( weap, "_" )[0]; + return strtok( weap, "_" )[ 0 ]; } /* @@ -661,15 +695,15 @@ WeaponIsFullAuto( weap ) { weaptoks = strtok( weap, "_" ); - return isDefined( weaptoks[0] ) && isString( weaptoks[0] ) && isdefined( level.bots_fullautoguns[weaptoks[0]] ); + return isdefined( weaptoks[ 0 ] ) && isstring( weaptoks[ 0 ] ) && isdefined( level.bots_fullautoguns[ weaptoks[ 0 ] ] ); } /* Returns what our eye height is. */ -GetEyeHeight() +getEyeHeight() { - stance = self GetStance(); + stance = self getstance(); if ( self inLastStand() || stance == "prone" ) { @@ -687,9 +721,9 @@ GetEyeHeight() /* Returns (iw4) eye pos. */ -GetEyePos() +getEyePos() { - return self.origin + ( 0, 0, self GetEyeHeight() ); + return self.origin + ( 0, 0, self getEyeHeight() ); } /* @@ -707,8 +741,10 @@ waittill_either_return_( str1, str2 ) */ waittill_either_return( str1, str2 ) { - if ( !isDefined( self waittill_either_return_( str1, str2 ) ) ) + if ( !isdefined( self waittill_either_return_( str1, str2 ) ) ) + { return str1; + } return str2; } @@ -739,24 +775,36 @@ waittill_any_timeout( timeOut, string1, string2, string3, string4, string5 ) ( !isdefined( string3 ) || string3 != "death" ) && ( !isdefined( string4 ) || string4 != "death" ) && ( !isdefined( string5 ) || string5 != "death" ) ) + { self endon( "death" ); + } ent = spawnstruct(); if ( isdefined( string1 ) ) + { self thread waittill_string( string1, ent ); + } if ( isdefined( string2 ) ) + { self thread waittill_string( string2, ent ); + } if ( isdefined( string3 ) ) + { self thread waittill_string( string3, ent ); + } if ( isdefined( string4 ) ) + { self thread waittill_string( string4, ent ); + } if ( isdefined( string5 ) ) + { self thread waittill_string( string5, ent ); + } ent thread _timeout( timeOut ); @@ -982,7 +1030,7 @@ isItemUnlocked( what, lvl ) */ isWeaponDroppable( weap ) { - return ( maps\mp\gametypes\_weapons::mayDropWeapon( weap ) ); + return ( maps\mp\gametypes\_weapons::maydropweapon( weap ) ); } /* @@ -1001,10 +1049,12 @@ GetHostPlayer() { for ( i = 0; i < level.players.size; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player is_host() ) + { continue; + } return player; } @@ -1019,37 +1069,49 @@ bot_wait_for_host() { host = undefined; - while ( !isDefined( level ) || !isDefined( level.players ) ) + while ( !isdefined( level ) || !isdefined( level.players ) ) + { wait 0.05; + } - for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) + for ( i = getdvarfloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) { host = GetHostPlayer(); - if ( isDefined( host ) ) + if ( isdefined( host ) ) + { break; + } wait 0.05; } - if ( !isDefined( host ) ) - return; - - for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) + if ( !isdefined( host ) ) { - if ( IsDefined( host.pers[ "team" ] ) ) + return; + } + + for ( i = getdvarfloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) + { + if ( isdefined( host.pers[ "team" ] ) ) + { break; + } wait 0.05; } - if ( !IsDefined( host.pers[ "team" ] ) ) + if ( !isdefined( host.pers[ "team" ] ) ) + { return; + } - for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) + for ( i = getdvarfloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 ) { if ( host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis" ) + { break; + } wait 0.05; } @@ -1057,50 +1119,60 @@ bot_wait_for_host() /* Pezbot's line sphere intersection. - http://paulbourke.net/geometry/circlesphere/raysphere.c + http: // paulbourke.net/geometry/circlesphere/raysphere.c */ RaySphereIntersect( start, end, spherePos, radius ) { // check if the start or end points are in the sphere r2 = radius * radius; - if ( DistanceSquared( start, spherePos ) < r2 ) + if ( distancesquared( start, spherePos ) < r2 ) + { return true; + } - if ( DistanceSquared( end, spherePos ) < r2 ) + if ( distancesquared( end, spherePos ) < r2 ) + { return true; + } // check if the line made by start and end intersect the sphere dp = end - start; - a = dp[0] * dp[0] + dp[1] * dp[1] + dp[2] * dp[2]; - b = 2 * ( dp[0] * ( start[0] - spherePos[0] ) + dp[1] * ( start[1] - spherePos[1] ) + dp[2] * ( start[2] - spherePos[2] ) ); - c = spherePos[0] * spherePos[0] + spherePos[1] * spherePos[1] + spherePos[2] * spherePos[2]; - c += start[0] * start[0] + start[1] * start[1] + start[2] * start[2]; - c -= 2.0 * ( spherePos[0] * start[0] + spherePos[1] * start[1] + spherePos[2] * start[2] ); + a = dp[ 0 ] * dp[ 0 ] + dp[ 1 ] * dp[ 1 ] + dp[ 2 ] * dp[ 2 ]; + b = 2 * ( dp[ 0 ] * ( start[ 0 ] - spherePos[ 0 ] ) + dp[ 1 ] * ( start[ 1 ] - spherePos[ 1 ] ) + dp[ 2 ] * ( start[ 2 ] - spherePos[ 2 ] ) ); + c = spherePos[ 0 ] * spherePos[ 0 ] + spherePos[ 1 ] * spherePos[ 1 ] + spherePos[ 2 ] * spherePos[ 2 ]; + c += start[ 0 ] * start[ 0 ] + start[ 1 ] * start[ 1 ] + start[ 2 ] * start[ 2 ]; + c -= 2.0 * ( spherePos[ 0 ] * start[ 0 ] + spherePos[ 1 ] * start[ 1 ] + spherePos[ 2 ] * start[ 2 ] ); c -= radius * radius; bb4ac = b * b - 4.0 * a * c; if ( abs( a ) < 0.0001 || bb4ac < 0 ) + { return false; + } mu1 = ( 0 - b + sqrt( bb4ac ) ) / ( 2 * a ); - //mu2 = (0-b - sqrt(bb4ac)) / (2 * a); + // mu2 = (0-b - sqrt(bb4ac)) / (2 * a); // intersection points of the sphere ip1 = start + mu1 * dp; - //ip2 = start + mu2 * dp; + // ip2 = start + mu2 * dp; - myDist = DistanceSquared( start, end ); + myDist = distancesquared( start, end ); // check if both intersection points far - if ( DistanceSquared( start, ip1 ) > myDist/* && DistanceSquared(start, ip2) > myDist*/ ) + if ( distancesquared( start, ip1 ) > myDist/* && distancesquared(start, ip2) > myDist*/ ) + { return false; + } - dpAngles = VectorToAngles( dp ); + dpAngles = vectortoangles( dp ); // check if the point is behind us if ( getConeDot( ip1, start, dpAngles ) < 0/* || getConeDot(ip2, start, dpAngles) < 0*/ ) + { return false; + } return true; } @@ -1110,15 +1182,19 @@ RaySphereIntersect( start, end, spherePos, radius ) */ SmokeTrace( start, end, rad ) { - for ( i = level.bots_smokeList.count - 1; i >= 0; i-- ) + for ( i = level.bots_smokelist.count - 1; i >= 0; i-- ) { - nade = level.bots_smokeList.data[i]; + nade = level.bots_smokelist.data[ i ]; if ( nade.state != "smoking" ) + { continue; + } if ( !RaySphereIntersect( start, end, nade.origin, rad ) ) + { continue; + } return false; } @@ -1131,20 +1207,20 @@ SmokeTrace( start, end, rad ) */ getConeDot( to, from, dir ) { - dirToTarget = VectorNormalize( to - from ); - forward = AnglesToForward( dir ); + dirToTarget = vectornormalize( to - from ); + forward = anglestoforward( dir ); return vectordot( dirToTarget, forward ); } /* Returns the distance squared in a 2d space */ -DistanceSquared2D( to, from ) +distancesquared2D( to, from ) { - to = ( to[0], to[1], 0 ); - from = ( from[0], from[1], 0 ); + to = ( to[ 0 ], to[ 1 ], 0 ); + from = ( from[ 0 ], from[ 1 ], 0 ); - return DistanceSquared( to, from ); + return distancesquared( to, from ); } /* @@ -1157,12 +1233,18 @@ Round( x ) if ( abs( x ) - abs( y ) > 0.5 ) { if ( x < 0 ) + { return y - 1; + } else + { return y + 1; + } } else + { return y; + } } /* @@ -1173,9 +1255,13 @@ RoundUp( floatVal ) i = int( floatVal ); if ( i != floatVal ) + { return i + 1; + } else + { return i; + } } /* @@ -1184,93 +1270,103 @@ RoundUp( floatVal ) cac_init_patch() { // oldschool mode does not create these, we need those tho. - if ( !isDefined( level.tbl_weaponIDs ) ) + if ( !isdefined( level.tbl_weaponids ) ) { - level.tbl_weaponIDs = []; + level.tbl_weaponids = []; for ( i = 0; i < 150; i++ ) { - reference_s = tableLookup( "mp/statsTable.csv", 0, i, 4 ); + reference_s = tablelookup( "mp/statsTable.csv", 0, i, 4 ); if ( reference_s != "" ) { - level.tbl_weaponIDs[i]["reference"] = reference_s; - level.tbl_weaponIDs[i]["group"] = tablelookup( "mp/statstable.csv", 0, i, 2 ); - level.tbl_weaponIDs[i]["count"] = int( tablelookup( "mp/statstable.csv", 0, i, 5 ) ); - level.tbl_weaponIDs[i]["attachment"] = tablelookup( "mp/statstable.csv", 0, i, 8 ); + level.tbl_weaponids[ i ][ "reference" ] = reference_s; + level.tbl_weaponids[ i ][ "group" ] = tablelookup( "mp/statstable.csv", 0, i, 2 ); + level.tbl_weaponids[ i ][ "count" ] = int( tablelookup( "mp/statstable.csv", 0, i, 5 ) ); + level.tbl_weaponids[ i ][ "attachment" ] = tablelookup( "mp/statstable.csv", 0, i, 8 ); } else + { continue; + } } } - if ( !isDefined( level.tbl_WeaponAttachment ) ) + if ( !isdefined( level.tbl_weaponattachment ) ) { - level.tbl_WeaponAttachment = []; + level.tbl_weaponattachment = []; for ( i = 0; i < 13; i++ ) { - level.tbl_WeaponAttachment[i]["bitmask"] = int( tableLookup( "mp/attachmentTable.csv", 9, i, 10 ) ); - level.tbl_WeaponAttachment[i]["reference"] = tableLookup( "mp/attachmentTable.csv", 9, i, 4 ); + level.tbl_weaponattachment[ i ][ "bitmask" ] = int( tablelookup( "mp/attachmentTable.csv", 9, i, 10 ) ); + level.tbl_weaponattachment[ i ][ "reference" ] = tablelookup( "mp/attachmentTable.csv", 9, i, 4 ); } } - if ( !isDefined( level.tbl_PerkData ) ) + if ( !isdefined( level.tbl_perkdata ) ) { - level.tbl_PerkData = []; + level.tbl_perkdata = []; // generating perk data vars collected form statsTable.csv for ( i = 150; i < 194; i++ ) { - reference_s = tableLookup( "mp/statsTable.csv", 0, i, 4 ); + reference_s = tablelookup( "mp/statsTable.csv", 0, i, 4 ); if ( reference_s != "" ) { - level.tbl_PerkData[i]["reference"] = reference_s; - level.tbl_PerkData[i]["reference_full"] = tableLookup( "mp/statsTable.csv", 0, i, 6 ); - level.tbl_PerkData[i]["count"] = int( tableLookup( "mp/statsTable.csv", 0, i, 5 ) ); - level.tbl_PerkData[i]["group"] = tableLookup( "mp/statsTable.csv", 0, i, 2 ); - level.tbl_PerkData[i]["name"] = tableLookupIString( "mp/statsTable.csv", 0, i, 3 ); - level.tbl_PerkData[i]["perk_num"] = tableLookup( "mp/statsTable.csv", 0, i, 8 ); + level.tbl_perkdata[ i ][ "reference" ] = reference_s; + level.tbl_perkdata[ i ][ "reference_full" ] = tablelookup( "mp/statsTable.csv", 0, i, 6 ); + level.tbl_perkdata[ i ][ "count" ] = int( tablelookup( "mp/statsTable.csv", 0, i, 5 ) ); + level.tbl_perkdata[ i ][ "group" ] = tablelookup( "mp/statsTable.csv", 0, i, 2 ); + level.tbl_perkdata[ i ][ "name" ] = tablelookupistring( "mp/statsTable.csv", 0, i, 3 ); + level.tbl_perkdata[ i ][ "perk_num" ] = tablelookup( "mp/statsTable.csv", 0, i, 8 ); } else + { continue; + } } } - level.perkReferenceToIndex = []; - level.weaponReferenceToIndex = []; - level.weaponAttachmentReferenceToIndex = []; + level.perkreferencetoindex = []; + level.weaponreferencetoindex = []; + level.weaponattachmentreferencetoindex = []; for ( i = 0; i < 150; i++ ) { - if ( !isDefined( level.tbl_weaponIDs[i] ) || !isDefined( level.tbl_weaponIDs[i]["reference"] ) ) + if ( !isdefined( level.tbl_weaponids[ i ] ) || !isdefined( level.tbl_weaponids[ i ][ "reference" ] ) ) + { continue; + } - level.weaponReferenceToIndex[level.tbl_weaponIDs[i]["reference"]] = i; + level.weaponreferencetoindex[ level.tbl_weaponids[ i ][ "reference" ] ] = i; } for ( i = 0; i < 13; i++ ) { - if ( !isDefined( level.tbl_WeaponAttachment[i] ) || !isDefined( level.tbl_WeaponAttachment[i]["reference"] ) ) + if ( !isdefined( level.tbl_weaponattachment[ i ] ) || !isdefined( level.tbl_weaponattachment[ i ][ "reference" ] ) ) + { continue; + } - level.weaponAttachmentReferenceToIndex[level.tbl_WeaponAttachment[i]["reference"]] = i; + level.weaponattachmentreferencetoindex[ level.tbl_weaponattachment[ i ][ "reference" ] ] = i; } for ( i = 150; i < 194; i++ ) { - if ( !isDefined( level.tbl_PerkData[i] ) || !isDefined( level.tbl_PerkData[i]["reference_full"] ) ) + if ( !isdefined( level.tbl_perkdata[ i ] ) || !isdefined( level.tbl_perkdata[ i ][ "reference_full" ] ) ) + { continue; + } - level.perkReferenceToIndex[ level.tbl_PerkData[i]["reference_full"] ] = i; + level.perkreferencetoindex[ level.tbl_perkdata[ i ][ "reference_full" ] ] = i; } } /* Clamps between value */ -Clamp( a, minv, maxv ) +clamp( a, minv, maxv ) { return max( min( a, maxv ), minv ); } @@ -1282,7 +1378,7 @@ float_old( num ) { setdvar( "temp_dvar_bot_util", num ); - return GetDvarFloat( "temp_dvar_bot_util" ); + return getdvarfloat( "temp_dvar_bot_util" ); } /* @@ -1290,30 +1386,34 @@ float_old( num ) */ parseTokensIntoWaypoint( tokens ) { - waypoint = spawnStruct(); + waypoint = spawnstruct(); - orgStr = tokens[0]; + orgStr = tokens[ 0 ]; orgToks = strtok( orgStr, " " ); - waypoint.origin = ( float_old( orgToks[0] ), float_old( orgToks[1] ), float_old( orgToks[2] ) ); + waypoint.origin = ( float_old( orgToks[ 0 ] ), float_old( orgToks[ 1 ] ), float_old( orgToks[ 2 ] ) ); - childStr = tokens[1]; + childStr = tokens[ 1 ]; childToks = strtok( childStr, " " ); waypoint.children = []; for ( j = 0; j < childToks.size; j++ ) - waypoint.children[j] = int( childToks[j] ); + { + waypoint.children[ j ] = int( childToks[ j ] ); + } - type = tokens[2]; + type = tokens[ 2 ]; waypoint.type = type; - anglesStr = tokens[3]; + anglesStr = tokens[ 3 ]; - if ( isDefined( anglesStr ) && anglesStr != "" ) + if ( isdefined( anglesStr ) && anglesStr != "" ) { anglesToks = strtok( anglesStr, " " ); if ( anglesToks.size >= 3 ) - waypoint.angles = ( float_old( anglesToks[0] ), float_old( anglesToks[1] ), float_old( anglesToks[2] ) ); + { + waypoint.angles = ( float_old( anglesToks[ 0 ] ), float_old( anglesToks[ 1 ] ), float_old( anglesToks[ 2 ] ) ); + } } return waypoint; @@ -1325,7 +1425,7 @@ parseTokensIntoWaypoint( tokens ) getWaypointLinesFromFile( filename ) { // Create a structure to store the result, including an array to hold individual lines. - result = spawnStruct(); + result = spawnstruct(); result.lines = []; // Read the entire content of the file into the 'waypointStr' variable. @@ -1333,8 +1433,10 @@ getWaypointLinesFromFile( filename ) waypointStr = BotBuiltinFileRead( filename ); // If the file is empty or not defined, return the empty result structure. - if ( !isDefined( waypointStr ) ) + if ( !isdefined( waypointStr ) ) + { return result; + } // Variables to track the current line's character count and starting position. linecount = 0; @@ -1344,14 +1446,16 @@ getWaypointLinesFromFile( filename ) for ( i = 0; i < waypointStr.size; i++ ) { // Check for newline characters '\n' or '\r'. - if ( waypointStr[i] == "\n" || waypointStr[i] == "\r" ) + if ( waypointStr[ i ] == "\n" || waypointStr[ i ] == "\r" ) { - // Extract the current line using 'getSubStr' and store it in the result array. - result.lines[result.lines.size] = getSubStr( waypointStr, linestart, linestart + linecount ); + // Extract the current line using 'getsubstr' and store it in the result array. + result.lines[ result.lines.size ] = getsubstr( waypointStr, linestart, linestart + linecount ); // If the newline is '\r\n', skip the next character. - if ( waypointStr[i] == "\r" && i < waypointStr.size - 1 && waypointStr[i + 1] == "\n" ) + if ( waypointStr[ i ] == "\r" && i < waypointStr.size - 1 && waypointStr[ i + 1 ] == "\n" ) + { i++; + } // Reset linecount and update linestart for the next line. linecount = 0; @@ -1364,7 +1468,7 @@ getWaypointLinesFromFile( filename ) } // Store the last line (or the only line if there are no newline characters) in the result array. - result.lines[result.lines.size] = getSubStr( waypointStr, linestart, linestart + linecount ); + result.lines[ result.lines.size ] = getsubstr( waypointStr, linestart, linestart + linecount ); // Return the result structure containing the array of extracted lines. return result; @@ -1379,24 +1483,28 @@ readWpsFromFile( mapname ) filename = "waypoints/" + mapname + "_wp.csv"; if ( !BotBuiltinFileExists( filename ) ) + { return waypoints; + } res = getWaypointLinesFromFile( filename ); if ( !res.lines.size ) + { return waypoints; + } BotBuiltinPrintConsole( "Attempting to read waypoints from " + filename ); - waypointCount = int( res.lines[0] ); + waypointCount = int( res.lines[ 0 ] ); for ( i = 1; i <= waypointCount; i++ ) { - tokens = strtok( res.lines[i], "," ); + tokens = strtok( res.lines[ i ], "," ); waypoint = parseTokensIntoWaypoint( tokens ); - waypoints[i - 1] = waypoint; + waypoints[ i - 1 ] = waypoint; } return waypoints; @@ -1407,15 +1515,17 @@ readWpsFromFile( mapname ) */ load_waypoints() { - mapname = getDvar( "mapname" ); + mapname = getdvar( "mapname" ); - level.waypointCount = 0; - level.waypointUsage = []; - level.waypointUsage["allies"] = []; - level.waypointUsage["axis"] = []; + level.waypointcount = 0; + level.waypointusage = []; + level.waypointusage[ "allies" ] = []; + level.waypointusage[ "axis" ] = []; - if ( !isDefined( level.waypoints ) ) + if ( !isdefined( level.waypoints ) ) + { level.waypoints = []; + } wps = readWpsFromFile( mapname ); @@ -1434,7 +1544,9 @@ load_waypoints() } if ( level.waypoints.size ) + { BotBuiltinPrintConsole( "Loaded " + level.waypoints.size + " waypoints from script" ); + } } if ( !level.waypoints.size ) @@ -1442,20 +1554,26 @@ load_waypoints() BotBuiltinPrintConsole( "No waypoints loaded!" ); } - level.waypointCount = level.waypoints.size; + level.waypointcount = level.waypoints.size; - for ( i = 0; i < level.waypointCount; i++ ) + for ( i = 0; i < level.waypointcount; i++ ) { - if ( !isDefined( level.waypoints[i].children ) || !isDefined( level.waypoints[i].children.size ) ) - level.waypoints[i].children = []; + if ( !isdefined( level.waypoints[ i ].children ) || !isdefined( level.waypoints[ i ].children.size ) ) + { + level.waypoints[ i ].children = []; + } - if ( !isDefined( level.waypoints[i].origin ) ) - level.waypoints[i].origin = ( 0, 0, 0 ); + if ( !isdefined( level.waypoints[ i ].origin ) ) + { + level.waypoints[ i ].origin = ( 0, 0, 0 ); + } - if ( !isDefined( level.waypoints[i].type ) ) - level.waypoints[i].type = "crouch"; + if ( !isdefined( level.waypoints[ i ].type ) ) + { + level.waypoints[ i ].type = "crouch"; + } - level.waypoints[i].childCount = undefined; + level.waypoints[ i ].childcount = undefined; } } @@ -1468,10 +1586,12 @@ nearAnyOfWaypoints( dist, waypoints ) for ( i = 0; i < waypoints.size; i++ ) { - waypoint = level.waypoints[waypoints[i]]; + waypoint = level.waypoints[ waypoints[ i ] ]; - if ( DistanceSquared( waypoint.origin, self.origin ) > dist ) + if ( distancesquared( waypoint.origin, self.origin ) > dist ) + { continue; + } return true; } @@ -1490,12 +1610,14 @@ waypointsNear( waypoints, dist ) for ( i = 0; i < waypoints.size; i++ ) { - wp = level.waypoints[waypoints[i]]; + wp = level.waypoints[ waypoints[ i ] ]; - if ( DistanceSquared( wp.origin, self.origin ) > dist ) + if ( distancesquared( wp.origin, self.origin ) > dist ) + { continue; + } - answer[answer.size] = waypoints[i]; + answer[ answer.size ] = waypoints[ i ]; } return answer; @@ -1511,13 +1633,15 @@ getNearestWaypointOfWaypoints( waypoints ) for ( i = 0; i < waypoints.size; i++ ) { - waypoint = level.waypoints[waypoints[i]]; - thisDist = DistanceSquared( self.origin, waypoint.origin ); + waypoint = level.waypoints[ waypoints[ i ] ]; + thisDist = distancesquared( self.origin, waypoint.origin ); - if ( isDefined( answer ) && thisDist > closestDist ) + if ( isdefined( answer ) && thisDist > closestDist ) + { continue; + } - answer = waypoints[i]; + answer = waypoints[ i ]; closestDist = thisDist; } @@ -1531,22 +1655,28 @@ getWaypointsOfType( type ) { answer = []; - for ( i = 0; i < level.waypointCount; i++ ) + for ( i = 0; i < level.waypointcount; i++ ) { - wp = level.waypoints[i]; + wp = level.waypoints[ i ]; if ( type == "camp" ) { if ( wp.type != "crouch" ) + { continue; + } if ( wp.children.size != 1 ) + { continue; + } } else if ( type != wp.type ) + { continue; + } - answer[answer.size] = i; + answer[ answer.size ] = i; } return answer; @@ -1557,10 +1687,12 @@ getWaypointsOfType( type ) */ getWaypointForIndex( i ) { - if ( !isDefined( i ) ) + if ( !isdefined( i ) ) + { return undefined; + } - return level.waypoints[i]; + return level.waypoints[ i ]; } /* @@ -1568,17 +1700,21 @@ getWaypointForIndex( i ) */ getGoodMapAmount() { - switch ( getDvar( "mapname" ) ) + switch ( getdvar( "mapname" ) ) { case "mp_kneedeep": case "mp_seelow": case "mp_outskirts": case "mp_downfall": case "mp_roundhouse": - if ( level.teamBased ) + if ( level.teambased ) + { return 14; + } else + { return 9; + } case "mp_suburban": case "mp_docks": @@ -1596,17 +1732,25 @@ getGoodMapAmount() case "mp_asylum": case "mp_airfield": case "mp_bgate": - if ( level.teamBased ) + if ( level.teambased ) + { return 12; + } else + { return 8; + } case "mp_dome": case "mp_drum": - if ( level.teamBased ) + if ( level.teambased ) + { return 8; + } else + { return 4; + } } return 2; @@ -1832,28 +1976,38 @@ getBotToKick() { bots = getBotArray(); - if ( !isDefined( bots ) || !isDefined( bots.size ) || bots.size <= 0 || !isDefined( bots[0] ) ) + if ( !isdefined( bots ) || !isdefined( bots.size ) || bots.size <= 0 || !isdefined( bots[ 0 ] ) ) + { return undefined; + } tokick = undefined; axis = 0; allies = 0; - team = getDvar( "bots_team" ); + team = getdvar( "bots_team" ); // count teams for ( i = 0; i < bots.size; i++ ) { - bot = bots[i]; + bot = bots[ i ]; - if ( !isDefined( bot ) || !isDefined( bot.team ) ) + if ( !isdefined( bot ) || !isdefined( bot.team ) ) + { continue; + } if ( bot.team == "allies" ) + { allies++; + } else if ( bot.team == "axis" ) + { axis++; + } else // choose bots that are not on a team first + { return bot; + } } // search for a bot on the other team @@ -1867,7 +2021,9 @@ getBotToKick() team = "allies"; if ( axis > allies ) + { team = "axis"; + } } else { @@ -1877,39 +2033,55 @@ getBotToKick() // get the bot on this team with lowest skill for ( i = 0; i < bots.size; i++ ) { - bot = bots[i]; + bot = bots[ i ]; - if ( !isDefined( bot ) || !isDefined( bot.team ) ) + if ( !isdefined( bot ) || !isdefined( bot.team ) ) + { continue; + } if ( bot.team != team ) + { continue; + } - if ( !isDefined( bot.pers ) || !isDefined( bot.pers["bots"] ) || !isDefined( bot.pers["bots"]["skill"] ) || !isDefined( bot.pers["bots"]["skill"]["base"] ) ) + if ( !isdefined( bot.pers ) || !isdefined( bot.pers[ "bots" ] ) || !isdefined( bot.pers[ "bots" ][ "skill" ] ) || !isdefined( bot.pers[ "bots" ][ "skill" ][ "base" ] ) ) + { continue; + } - if ( isDefined( tokick ) && bot.pers["bots"]["skill"]["base"] > tokick.pers["bots"]["skill"]["base"] ) + if ( isdefined( tokick ) && bot.pers[ "bots" ][ "skill" ][ "base" ] > tokick.pers[ "bots" ][ "skill" ][ "base" ] ) + { continue; + } tokick = bot; } - if ( isDefined( tokick ) ) + if ( isdefined( tokick ) ) + { return tokick; + } // just kick lowest skill for ( i = 0; i < bots.size; i++ ) { - bot = bots[i]; + bot = bots[ i ]; - if ( !isDefined( bot ) || !isDefined( bot.team ) ) + if ( !isdefined( bot ) || !isdefined( bot.team ) ) + { continue; + } - if ( !isDefined( bot.pers ) || !isDefined( bot.pers["bots"] ) || !isDefined( bot.pers["bots"]["skill"] ) || !isDefined( bot.pers["bots"]["skill"]["base"] ) ) + if ( !isdefined( bot.pers ) || !isdefined( bot.pers[ "bots" ] ) || !isdefined( bot.pers[ "bots" ][ "skill" ] ) || !isdefined( bot.pers[ "bots" ][ "skill" ][ "base" ] ) ) + { continue; + } - if ( isDefined( tokick ) && bot.pers["bots"]["skill"]["base"] > tokick.pers["bots"]["skill"]["base"] ) + if ( isdefined( tokick ) && bot.pers[ "bots" ][ "skill" ][ "base" ] > tokick.pers[ "bots" ][ "skill" ][ "base" ] ) + { continue; + } tokick = bot; } @@ -1927,12 +2099,14 @@ getBotArray() for ( i = 0; i < playercount; i++ ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player is_bot() ) + { continue; + } - result[result.size] = player; + result[ result.size ] = player; } return result; @@ -1956,7 +2130,9 @@ WaypointsToKDTree() _WaypointsToKDTree( waypoints, dem ) { if ( !waypoints.size ) + { return; + } callbacksort = undefined; @@ -1979,29 +2155,35 @@ _WaypointsToKDTree( waypoints, dem ) for ( i = 0; i < waypoints.size; i++ ) { - heap HeapInsert( waypoints[i] ); + heap HeapInsert( waypoints[ i ] ); } sorted = []; while ( heap.data.size ) { - sorted[sorted.size] = heap.data[0]; + sorted[ sorted.size ] = heap.data[ 0 ]; heap HeapRemove(); } - median = int( sorted.size / 2 ); //use divide and conq + median = int( sorted.size / 2 ); // use divide and conq left = []; right = []; for ( i = 0; i < sorted.size; i++ ) + { if ( i < median ) - right[right.size] = sorted[i]; + { + right[ right.size ] = sorted[ i ]; + } else if ( i > median ) - left[left.size] = sorted[i]; + { + left[ left.size ] = sorted[ i ]; + } + } - self KDTreeInsert( sorted[median] ); + self KDTreeInsert( sorted[ median ] ); _WaypointsToKDTree( left, ( dem + 1 ) % 3 ); @@ -2013,7 +2195,7 @@ _WaypointsToKDTree( waypoints, dem ) */ List() { - list = spawnStruct(); + list = spawnstruct(); list.count = 0; list.data = []; @@ -2025,7 +2207,7 @@ List() */ ListAdd( thing ) { - self.data[self.count] = thing; + self.data[ self.count ] = thing; self.count++; } @@ -2037,10 +2219,10 @@ ListAddFirst( thing ) { for ( i = self.count - 1; i >= 0; i-- ) { - self.data[i + 1] = self.data[i]; + self.data[ i + 1 ] = self.data[ i ]; } - self.data[0] = thing; + self.data[ 0 ] = thing; self.count++; } @@ -2051,15 +2233,15 @@ ListRemove( thing ) { for ( i = 0; i < self.count; i++ ) { - if ( self.data[i] == thing ) + if ( self.data[ i ] == thing ) { while ( i < self.count - 1 ) { - self.data[i] = self.data[i + 1]; + self.data[ i ] = self.data[ i + 1 ]; i++; } - self.data[i] = undefined; + self.data[ i ] = undefined; self.count--; break; } @@ -2071,7 +2253,7 @@ ListRemove( thing ) */ KDTree() { - kdTree = spawnStruct(); + kdTree = spawnstruct(); kdTree.root = undefined; kdTree.count = 0; @@ -2081,7 +2263,7 @@ KDTree() /* Called on a KDTree. Will insert the object into the KDTree. */ -KDTreeInsert( data ) //as long as what you insert has a .origin attru, it will work. +KDTreeInsert( data ) // as long as what you insert has a .origin attru, it will work. { self.root = self _KDTreeInsert( self.root, data, 0, -2147483647, -2147483647, -2147483647, 2147483647, 2147483647, 2147483647 ); } @@ -2091,9 +2273,9 @@ KDTreeInsert( data ) //as long as what you insert has a .origin attru, it will w */ _KDTreeInsert( node, data, dem, x0, y0, z0, x1, y1, z1 ) { - if ( !isDefined( node ) ) + if ( !isdefined( node ) ) { - r = spawnStruct(); + r = spawnstruct(); r.data = data; r.left = undefined; r.right = undefined; @@ -2112,26 +2294,38 @@ _KDTreeInsert( node, data, dem, x0, y0, z0, x1, y1, z1 ) switch ( dem ) { case 0: - if ( data.origin[0] < node.data.origin[0] ) - node.left = self _KDTreeInsert( node.left, data, 1, x0, y0, z0, node.data.origin[0], y1, z1 ); + if ( data.origin[ 0 ] < node.data.origin[ 0 ] ) + { + node.left = self _KDTreeInsert( node.left, data, 1, x0, y0, z0, node.data.origin[ 0 ], y1, z1 ); + } 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; case 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 ); + 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 ); + } 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; case 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] ); + 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 ] ); + } 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; } @@ -2144,10 +2338,12 @@ _KDTreeInsert( node, data, dem, x0, y0, z0, x1, y1, z1 ) */ KDTreeNearest( origin ) { - if ( !isDefined( self.root ) ) + if ( !isdefined( self.root ) ) + { return undefined; + } - return self _KDTreeNearest( self.root, origin, self.root.data, DistanceSquared( self.root.data.origin, origin ), 0 ); + return self _KDTreeNearest( self.root, origin, self.root.data, distancesquared( self.root.data.origin, origin ), 0 ); } /* @@ -2155,12 +2351,12 @@ KDTreeNearest( origin ) */ _KDTreeNearest( node, point, closest, closestdist, dem ) { - if ( !isDefined( node ) ) + if ( !isdefined( node ) ) { return closest; } - thisDis = DistanceSquared( node.data.origin, point ); + thisDis = distancesquared( node.data.origin, point ); if ( thisDis < closestdist ) { @@ -2168,12 +2364,12 @@ _KDTreeNearest( node, point, closest, closestdist, dem ) closest = node.data; } - if ( node RectDistanceSquared( point ) < closestdist ) + if ( node Rectdistancesquared( point ) < closestdist ) { near = node.left; far = node.right; - if ( point[dem] > node.data.origin[dem] ) + if ( point[ dem ] > node.data.origin[ dem ] ) { near = node.right; far = node.left; @@ -2181,7 +2377,7 @@ _KDTreeNearest( node, point, closest, closestdist, dem ) closest = self _KDTreeNearest( near, point, closest, closestdist, ( dem + 1 ) % 3 ); - closest = self _KDTreeNearest( far, point, closest, DistanceSquared( closest.origin, point ), ( dem + 1 ) % 3 ); + closest = self _KDTreeNearest( far, point, closest, distancesquared( closest.origin, point ), ( dem + 1 ) % 3 ); } return closest; @@ -2190,27 +2386,38 @@ _KDTreeNearest( node, point, closest, closestdist, dem ) /* Called on a rectangle, returns the distance from origin to the rectangle. */ -RectDistanceSquared( origin ) +Rectdistancesquared( origin ) { dx = 0; dy = 0; dz = 0; - if ( origin[0] < self.x0 ) - dx = origin[0] - self.x0; - else if ( origin[0] > self.x1 ) - dx = origin[0] - self.x1; + if ( origin[ 0 ] < self.x0 ) + { + dx = origin[ 0 ] - self.x0; + } + else if ( origin[ 0 ] > self.x1 ) + { + dx = origin[ 0 ] - self.x1; + } - if ( origin[1] < self.y0 ) - dy = origin[1] - self.y0; - else if ( origin[1] > self.y1 ) - dy = origin[1] - self.y1; + if ( origin[ 1 ] < self.y0 ) + { + dy = origin[ 1 ] - self.y0; + } + else if ( origin[ 1 ] > self.y1 ) + { + dy = origin[ 1 ] - self.y1; + } - - if ( origin[2] < self.z0 ) - dz = origin[2] - self.z0; - else if ( origin[2] > self.z1 ) - dz = origin[2] - self.z1; + if ( origin[ 2 ] < self.z0 ) + { + dz = origin[ 2 ] - self.z0; + } + else if ( origin[ 2 ] > self.z1 ) + { + dz = origin[ 2 ] - self.z1; + } return dx * dx + dy * dy + dz * dz; } @@ -2220,7 +2427,7 @@ RectDistanceSquared( origin ) */ HeapSortCoordX( item, item2 ) { - return item.origin[0] > item2.origin[0]; + return item.origin[ 0 ] > item2.origin[ 0 ]; } /* @@ -2228,7 +2435,7 @@ HeapSortCoordX( item, item2 ) */ HeapSortCoordY( item, item2 ) { - return item.origin[1] > item2.origin[1]; + return item.origin[ 1 ] > item2.origin[ 1 ]; } /* @@ -2236,7 +2443,7 @@ HeapSortCoordY( item, item2 ) */ HeapSortCoordZ( item, item2 ) { - return item.origin[2] > item2.origin[2]; + return item.origin[ 2 ] > item2.origin[ 2 ]; } /* @@ -2260,7 +2467,7 @@ ReverseHeap( item, item2 ) */ HeapTraceFraction( item, item2 ) { - return item["fraction"] > item2["fraction"]; + return item[ "fraction" ] > item2[ "fraction" ]; } /* @@ -2268,7 +2475,7 @@ HeapTraceFraction( item, item2 ) */ NewHeap( compare ) { - heap_node = spawnStruct(); + heap_node = spawnstruct(); heap_node.data = []; heap_node.compare = compare; @@ -2281,7 +2488,7 @@ NewHeap( compare ) HeapInsert( item ) { insert = self.data.size; - self.data[insert] = item; + self.data[ insert ] = item; current = insert + 1; @@ -2290,11 +2497,13 @@ HeapInsert( item ) last = current; current = int( current / 2 ); - if ( ![[self.compare]]( item, self.data[current - 1] ) ) + if ( ![[ self.compare ]]( item, self.data[ current - 1 ] ) ) + { break; + } - self.data[last - 1] = self.data[current - 1]; - self.data[current - 1] = item; + self.data[ last - 1 ] = self.data[ current - 1 ]; + self.data[ current - 1 ] = item; } } @@ -2307,15 +2516,23 @@ _HeapNextChild( node, hsize ) right = left + 1; if ( left > hsize ) + { return -1; + } if ( right > hsize ) + { return left; + } - if ( [[self.compare]]( self.data[left - 1], self.data[right - 1] ) ) + if ( [[ self.compare ]]( self.data[ left - 1 ], self.data[ right - 1 ] ) ) + { return left; + } else + { return right; + } } /* @@ -2326,26 +2543,32 @@ HeapRemove() remove = self.data.size; if ( !remove ) + { return remove; + } - move = self.data[remove - 1]; - self.data[0] = move; - self.data[remove - 1] = undefined; + move = self.data[ remove - 1 ]; + self.data[ 0 ] = move; + self.data[ remove - 1 ] = undefined; remove--; if ( !remove ) + { return remove; + } last = 1; next = self _HeapNextChild( 1, remove ); while ( next != -1 ) { - if ( [[self.compare]]( move, self.data[next - 1] ) ) + if ( [[ self.compare ]]( move, self.data[ next - 1 ] ) ) + { break; + } - self.data[last - 1] = self.data[next - 1]; - self.data[next - 1] = move; + self.data[ last - 1 ] = self.data[ next - 1 ]; + self.data[ next - 1 ] = move; last = next; next = self _HeapNextChild( next, remove ); @@ -2367,16 +2590,22 @@ ReverseHeapAStar( item, item2 ) */ RemoveWaypointUsage( wp, team ) { - if ( !isDefined( level.waypointUsage ) ) + if ( !isdefined( level.waypointusage ) ) + { return; + } - if ( !isDefined( level.waypointUsage[team][wp + ""] ) ) + if ( !isdefined( level.waypointusage[ team ][ wp + "" ] ) ) + { return; + } - level.waypointUsage[team][wp + ""]--; + level.waypointusage[ team ][ wp + "" ]--; - if ( level.waypointUsage[team][wp + ""] <= 0 ) - level.waypointUsage[team][wp + ""] = undefined; + if ( level.waypointusage[ team ][ wp + "" ] <= 0 ) + { + level.waypointusage[ team ][ wp + "" ] = undefined; + } } /* @@ -2387,15 +2616,19 @@ GetNearestWaypointWithSight( pos ) candidate = undefined; dist = 2147483647; - for ( i = 0; i < level.waypointCount; i++ ) + for ( i = 0; i < level.waypointcount; i++ ) { - if ( !bulletTracePassed( pos + ( 0, 0, 15 ), level.waypoints[i].origin + ( 0, 0, 15 ), false, undefined ) ) + if ( !bullettracepassed( pos + ( 0, 0, 15 ), level.waypoints[ i ].origin + ( 0, 0, 15 ), false, undefined ) ) + { continue; + } - curdis = DistanceSquared( level.waypoints[i].origin, pos ); + curdis = distancesquared( level.waypoints[ i ].origin, pos ); if ( curdis > dist ) + { continue; + } dist = curdis; candidate = i; @@ -2407,17 +2640,19 @@ GetNearestWaypointWithSight( pos ) /* Will linearly search for the nearest waypoint */ -GetNearestWaypoint( pos ) +getNearestWaypoint( pos ) { candidate = undefined; dist = 2147483647; - 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 ) + { continue; + } dist = curdis; candidate = i; @@ -2433,76 +2668,90 @@ GetNearestWaypoint( pos ) */ AStarSearch( start, goal, team, greedy_path ) { - open = NewHeap( ::ReverseHeapAStar ); //heap - openset = [];//set for quick lookup - closed = [];//set for quick lookup + open = NewHeap( ::ReverseHeapAStar ); // heap + openset = []; // set for quick lookup + closed = []; // set for quick lookup startWp = getNearestWaypoint( start ); - if ( !isDefined( startWp ) ) + if ( !isdefined( startWp ) ) + { return []; + } _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 ); + } - if ( isDefined( _startwp ) ) + if ( isdefined( _startwp ) ) + { startWp = _startwp; + } goalWp = getNearestWaypoint( goal ); - if ( !isDefined( goalWp ) ) + if ( !isdefined( goalWp ) ) + { 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 ); + } - if ( isDefined( _goalwp ) ) + if ( isdefined( _goalwp ) ) + { goalWp = _goalwp; + } - node = spawnStruct(); - node.g = 0; //path dist so far - node.h = DistanceSquared( level.waypoints[startWp].origin, level.waypoints[goalWp].origin ); //herustic, distance to goal for path finding + node = spawnstruct(); + node.g = 0; // path dist so far + node.h = distancesquared( level.waypoints[ startWp ].origin, level.waypoints[ goalWp ].origin ); // herustic, distance to goal for path finding node.f = node.h + node.g; // combine path dist and heru, use reverse heap to sort the priority queue by this attru node.index = startWp; - node.parent = undefined; //we are start, so we have no parent + node.parent = undefined; // we are start, so we have no parent - //push node onto queue - openset[node.index + ""] = node; + // push node onto queue + openset[ node.index + "" ] = node; open HeapInsert( node ); - //while the queue is not empty + // while the queue is not empty while ( open.data.size ) { - //pop bestnode from queue - bestNode = open.data[0]; + // pop bestnode from queue + bestNode = open.data[ 0 ]; open HeapRemove(); - openset[bestNode.index + ""] = undefined; - wp = level.waypoints[bestNode.index]; + openset[ bestNode.index + "" ] = undefined; + wp = level.waypoints[ bestNode.index ]; - //check if we made it to the goal + // check if we made it to the goal if ( bestNode.index == goalWp ) { path = []; - while ( isDefined( bestNode ) ) + while ( isdefined( bestNode ) ) { - if ( isdefined( team ) && isDefined( level.waypointUsage ) ) + if ( isdefined( team ) && isdefined( level.waypointusage ) ) { - if ( !isDefined( level.waypointUsage[team][bestNode.index + ""] ) ) - level.waypointUsage[team][bestNode.index + ""] = 0; + if ( !isdefined( level.waypointusage[ team ][ bestNode.index + "" ] ) ) + { + level.waypointusage[ team ][ bestNode.index + "" ] = 0; + } - level.waypointUsage[team][bestNode.index + ""]++; + level.waypointusage[ team ][ bestNode.index + "" ]++; } - //construct path - path[path.size] = bestNode.index; + // construct path + path[ path.size ] = bestNode.index; bestNode = bestNode.parent; } @@ -2510,72 +2759,90 @@ AStarSearch( start, goal, team, greedy_path ) return path; } - //for each child of bestnode + // for each child of bestnode for ( i = wp.children.size - 1; i >= 0; i-- ) { - child = wp.children[i]; - childWp = level.waypoints[child]; + child = wp.children[ i ]; + childWp = level.waypoints[ child ]; penalty = 1; - if ( !greedy_path && isdefined( team ) && isDefined( level.waypointUsage ) ) + if ( !greedy_path && isdefined( team ) && isdefined( level.waypointusage ) ) { temppen = 1; - if ( isDefined( level.waypointUsage[team][child + ""] ) ) - temppen = level.waypointUsage[team][child + ""]; //consider how many bots are taking this path + if ( isdefined( level.waypointusage[ team ][ child + "" ] ) ) + { + temppen = level.waypointusage[ team ][ child + "" ]; // consider how many bots are taking this path + } if ( temppen > 1 ) + { penalty = temppen; + } } // have certain types of nodes more expensive if ( childWp.type == "climb" || childWp.type == "prone" ) + { penalty += 4; + } - //calc the total path we have took - newg = bestNode.g + DistanceSquared( wp.origin, childWp.origin ) * penalty; //bots on same team's path are more expensive + // calc the total path we have took + newg = bestNode.g + distancesquared( wp.origin, childWp.origin ) * penalty; // bots on same team's path are more expensive - //check if this child is in open or close with a g value less than newg - inopen = isDefined( openset[child + ""] ); + // check if this child is in open or close with a g value less than newg + inopen = isdefined( openset[ child + "" ] ); - if ( inopen && openset[child + ""].g <= newg ) + if ( inopen && openset[ child + "" ].g <= newg ) + { continue; + } - inclosed = isDefined( closed[child + ""] ); + inclosed = isdefined( closed[ child + "" ] ); - if ( inclosed && closed[child + ""].g <= newg ) + if ( inclosed && closed[ child + "" ].g <= newg ) + { continue; + } node = undefined; if ( inopen ) - node = openset[child + ""]; + { + node = openset[ child + "" ]; + } else if ( inclosed ) - node = closed[child + ""]; + { + node = closed[ child + "" ]; + } else - node = spawnStruct(); + { + node = spawnstruct(); + } node.parent = bestNode; node.g = newg; - node.h = DistanceSquared( childWp.origin, level.waypoints[goalWp].origin ); + node.h = distancesquared( childWp.origin, level.waypoints[ goalWp ].origin ); node.f = node.g + node.h; node.index = child; - //check if in closed, remove it + // check if in closed, remove it if ( inclosed ) - closed[child + ""] = undefined; + { + closed[ child + "" ] = undefined; + } - //check if not in open, add it + // check if not in open, add it if ( !inopen ) { open HeapInsert( node ); - openset[child + ""] = node; + openset[ child + "" ] = node; } } - //done with children, push onto closed - closed[bestNode.index + ""] = bestNode; + // done with children, push onto closed + closed[ bestNode.index + "" ] = bestNode; } return []; @@ -2586,15 +2853,7 @@ AStarSearch( start, goal, team, greedy_path ) */ Log( x ) { - /* if (!isDefined(level.log_cache)) - level.log_cache = []; - - key = x + ""; - - if (isDefined(level.log_cache[key])) - return level.log_cache[key];*/ - - //thanks Bob__ at stackoverflow + // thanks Bob__ at stackoverflow old_sum = 0.0; xmlxpl = ( x - 1 ) / ( x + 1 ); xmlxpl_2 = xmlxpl * xmlxpl; @@ -2611,8 +2870,6 @@ Log( x ) } answer = 2.0 * sum; - - //level.log_cache[key] = answer; return answer; } @@ -2627,7 +2884,7 @@ array_average( array ) for ( i = 0; i < array.size; i++ ) { - total += array[i]; + total += array[ i ]; } return ( total / array.size ); @@ -2644,17 +2901,17 @@ array_std_deviation( array, mean ) 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; 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 ); } /* @@ -2670,21 +2927,21 @@ random_normal_distribution( mean, std_deviation, lower_bound, upper_bound ) while ( w >= 1 ) { - x1 = 2 * RandomFloatRange( 0, 1 ) - 1; - x2 = 2 * RandomFloatRange( 0, 1 ) - 1; + x1 = 2 * randomfloatrange( 0, 1 ) - 1; + x2 = 2 * randomfloatrange( 0, 1 ) - 1; w = x1 * x1 + x2 * x2; } - w = Sqrt( ( -2.0 * Log( w ) ) / w ); + w = sqrt( ( -2.0 * Log( w ) ) / w ); y1 = x1 * w; number = mean + y1 * std_deviation; - if ( IsDefined( lower_bound ) && number < lower_bound ) + if ( isdefined( 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; } @@ -2695,150 +2952,167 @@ random_normal_distribution( mean, std_deviation, lower_bound, upper_bound ) onUsePlantObjectFix( player ) { // planted the bomb - if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) ) + if ( !self maps\mp\gametypes\_gameobjects::isfriendlyteam( player.pers[ "team" ] ) ) { level thread bombPlantedFix( self, player ); - player logString( "bomb planted: " + self.label ); + player logstring( "bomb planted: " + self.label ); - lpselfnum = player getEntityNumber(); - lpGuid = player getGuid(); - logPrint( "BP;" + lpGuid + ";" + lpselfnum + ";" + player.name + "\n" ); + lpselfnum = player getentitynumber(); + lpGuid = player getguid(); + logprint( "BP;" + lpGuid + ";" + lpselfnum + ";" + player.name + "\n" ); // disable all bomb zones except this one - for ( index = 0; index < level.bombZones.size; index++ ) + for ( index = 0; index < level.bombzones.size; index++ ) { - if ( level.bombZones[index] == self ) + if ( level.bombzones[ index ] == self ) + { continue; + } - level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); + level.bombzones[ index ] maps\mp\gametypes\_gameobjects::disableobject(); } - thread playSoundOnPlayers( "mx_SD_planted" + "_" + level.teamPrefix[player.pers["team"]] ); - player playSound( "mp_bomb_plant" ); + thread playsoundonplayers( "mx_SD_planted" + "_" + level.teamprefix[ player.pers[ "team" ] ] ); + player playsound( "mp_bomb_plant" ); player notify ( "bomb_planted" ); - if ( !level.hardcoreMode ) - iPrintLn( &"MP_EXPLOSIVES_PLANTED_BY", player ); + if ( !level.hardcoremode ) + { + iprintln( &"MP_EXPLOSIVES_PLANTED_BY", player ); + } - maps\mp\gametypes\_globallogic::leaderDialog( "bomb_planted" ); + maps\mp\gametypes\_globallogic::leaderdialog( "bomb_planted" ); - maps\mp\gametypes\_globallogic::givePlayerScore( "plant", player ); - player thread [[level.onXPEvent]]( "plant" ); + maps\mp\gametypes\_globallogic::giveplayerscore( "plant", player ); + player thread [[ level.onxpevent ]]( "plant" ); } } bombPlantedFix( destroyedObj, player ) { - maps\mp\gametypes\_globallogic::pauseTimer(); - level.bombPlanted = true; + maps\mp\gametypes\_globallogic::pausetimer(); + level.bombplanted = true; - destroyedObj.visuals[0] thread maps\mp\gametypes\_globallogic::playTickingSound(); - level.tickingObject = destroyedObj.visuals[0]; + destroyedObj.visuals[ 0 ] thread maps\mp\gametypes\_globallogic::playtickingsound(); + level.tickingobject = destroyedObj.visuals[ 0 ]; - level.timeLimitOverride = true; - setGameEndTime( int( gettime() + ( level.bombTimer * 1000 ) ) ); - setDvar( "ui_bomb_timer", 1 ); + level.timelimitoverride = true; + setgameendtime( int( gettime() + ( level.bombtimer * 1000 ) ) ); + setdvar( "ui_bomb_timer", 1 ); - if ( !level.multiBomb ) + if ( !level.multibomb ) { - level.sdBomb maps\mp\gametypes\_gameobjects::allowCarry( "none" ); - level.sdBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.sdBomb maps\mp\gametypes\_gameobjects::setDropped(); - level.sdBombModel = level.sdBomb.visuals[0]; + level.sdbomb maps\mp\gametypes\_gameobjects::allowcarry( "none" ); + level.sdbomb maps\mp\gametypes\_gameobjects::setvisibleteam( "none" ); + level.sdbomb maps\mp\gametypes\_gameobjects::setdropped(); + level.sdbombmodel = level.sdbomb.visuals[ 0 ]; } else { - for ( index = 0; index < level.players.size; index++ ) { - if ( isDefined( level.players[index].carryIcon ) ) - level.players[index].carryIcon destroyElem(); + if ( isdefined( level.players[ index ].carryicon ) ) + { + level.players[ index ].carryicon destroyelem(); + } } - trace = bulletTrace( player.origin + ( 0, 0, 20 ), player.origin - ( 0, 0, 2000 ), false, player ); + trace = bullettrace( player.origin + ( 0, 0, 20 ), player.origin - ( 0, 0, 2000 ), false, player ); tempAngle = randomfloat( 360 ); forward = ( cos( tempAngle ), sin( tempAngle ), 0 ); - forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) ); + forward = vectornormalize( forward - vector_scale( trace[ "normal" ], vectordot( forward, trace[ "normal" ] ) ) ); dropAngles = vectortoangles( forward ); - level.sdBombModel = spawn( "script_model", trace["position"] ); - level.sdBombModel.angles = dropAngles; - level.sdBombModel setModel( "weapon_explosives" ); + level.sdbombmodel = spawn( "script_model", trace[ "position" ] ); + level.sdbombmodel.angles = dropAngles; + level.sdbombmodel setmodel( "weapon_explosives" ); } - destroyedObj maps\mp\gametypes\_gameobjects::allowUse( "none" ); - destroyedObj maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); + destroyedObj maps\mp\gametypes\_gameobjects::allowuse( "none" ); + destroyedObj maps\mp\gametypes\_gameobjects::setvisibleteam( "none" ); /* - destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", undefined ); + destroyedObj maps\mp\gametypes\_gameobjects::set2dicon( "friendly", undefined ); + destroyedObj maps\mp\gametypes\_gameobjects::set2dicon( "enemy", undefined ); + destroyedObj maps\mp\gametypes\_gameobjects::set3dicon( "friendly", undefined ); + destroyedObj maps\mp\gametypes\_gameobjects::set3dicon( "enemy", undefined ); */ - label = destroyedObj maps\mp\gametypes\_gameobjects::getLabel(); + label = destroyedObj maps\mp\gametypes\_gameobjects::getlabel(); // create a new object to defuse with. - trigger = destroyedObj.bombDefuseTrig; - trigger.origin = level.sdBombModel.origin; + trigger = destroyedObj.bombdefusetrig; + trigger.origin = level.sdbombmodel.origin; visuals = []; - defuseObject = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, ( 0, 0, 32 ) ); - defuseObject maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime ); - defuseObject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" ); - defuseObject maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" ); - defuseObject maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defuse" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_defend" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defuse" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" + label ); + defuseObject = maps\mp\gametypes\_gameobjects::createuseobject( game[ "defenders" ], trigger, visuals, ( 0, 0, 32 ) ); + defuseObject maps\mp\gametypes\_gameobjects::allowuse( "friendly" ); + defuseObject maps\mp\gametypes\_gameobjects::setusetime( level.defusetime ); + defuseObject maps\mp\gametypes\_gameobjects::setusetext( &"MP_DEFUSING_EXPLOSIVE" ); + defuseObject maps\mp\gametypes\_gameobjects::setusehinttext( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" ); + defuseObject maps\mp\gametypes\_gameobjects::setvisibleteam( "any" ); + defuseObject maps\mp\gametypes\_gameobjects::set2dicon( "friendly", "compass_waypoint_defuse" + label ); + defuseObject maps\mp\gametypes\_gameobjects::set2dicon( "enemy", "compass_waypoint_defend" + label ); + defuseObject maps\mp\gametypes\_gameobjects::set3dicon( "friendly", "waypoint_defuse" + label ); + defuseObject maps\mp\gametypes\_gameobjects::set3dicon( "enemy", "waypoint_defend" + label ); defuseObject.label = label; - defuseObject.onBeginUse = maps\mp\gametypes\sd::onBeginUse; - defuseObject.onEndUse = maps\mp\gametypes\sd::onEndUse; - defuseObject.onUse = maps\mp\gametypes\sd::onUseDefuseObject; - defuseObject.useWeapon = "briefcase_bomb_defuse_mp"; + defuseObject.onbeginuse = maps\mp\gametypes\sd::onbeginuse; + defuseObject.onenduse = maps\mp\gametypes\sd::onenduse; + defuseObject.onuse = maps\mp\gametypes\sd::onusedefuseobject; + defuseObject.useweapon = "briefcase_bomb_defuse_mp"; - level.defuseObject = defuseObject; + level.defuseobject = defuseObject; - player.isBombCarrier = false; + player.isbombcarrier = false; - maps\mp\gametypes\sd::BombTimerWait(); - setDvar( "ui_bomb_timer", 0 ); + maps\mp\gametypes\sd::bombtimerwait(); + setdvar( "ui_bomb_timer", 0 ); - destroyedObj.visuals[0] maps\mp\gametypes\_globallogic::stopTickingSound(); + destroyedObj.visuals[ 0 ] maps\mp\gametypes\_globallogic::stoptickingsound(); - if ( level.gameEnded || level.bombDefused ) + if ( level.gameended || level.bombdefused ) + { return; + } - level.bombExploded = true; + level.bombexploded = true; - explosionOrigin = level.sdBombModel.origin + ( 0, 0, 12 ); - level.sdBombModel hide(); + explosionOrigin = level.sdbombmodel.origin + ( 0, 0, 12 ); + level.sdbombmodel hide(); if ( isdefined( player ) ) - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, player, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); + { + destroyedObj.visuals[ 0 ] radiusdamage( explosionOrigin, 512, 200, 20, player, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); + } else - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); + { + destroyedObj.visuals[ 0 ] radiusdamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); + } if ( isdefined( player ) ) - player setStatLBByName( "search_and_destroy", 1, "Targets Destroyed" ); + { + player setstatlbbyname( "search_and_destroy", 1, "Targets Destroyed" ); + } rot = randomfloat( 360 ); - explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + ( 0, 0, 50 ), ( 0, 0, 1 ), ( cos( rot ), sin( rot ), 0 ) ); - triggerFx( explosionEffect ); + explosionEffect = spawnfx( level._effect[ "bombexplosion" ], explosionOrigin + ( 0, 0, 50 ), ( 0, 0, 1 ), ( cos( rot ), sin( rot ), 0 ) ); + triggerfx( explosionEffect ); - thread maps\mp\gametypes\sd::playSoundinSpace( "exp_suitcase_bomb_main", explosionOrigin ); + thread maps\mp\gametypes\sd::playsoundinspace( "exp_suitcase_bomb_main", explosionOrigin ); - if ( isDefined( destroyedObj.exploderIndex ) ) - exploder( destroyedObj.exploderIndex ); + if ( isdefined( destroyedObj.exploderindex ) ) + { + exploder( destroyedObj.exploderindex ); + } - for ( index = 0; index < level.bombZones.size; index++ ) - level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); + for ( index = 0; index < level.bombzones.size; index++ ) + { + level.bombzones[ index ] maps\mp\gametypes\_gameobjects::disableobject(); + } - defuseObject maps\mp\gametypes\_gameobjects::disableObject(); + defuseObject maps\mp\gametypes\_gameobjects::disableobject(); - setGameEndTime( 0 ); + setgameendtime( 0 ); wait 3; - maps\mp\gametypes\sd::sd_endGame( game["attackers"], game["strings"]["target_destroyed"] ); + maps\mp\gametypes\sd::sd_endgame( game[ "attackers" ], game[ "strings" ][ "target_destroyed" ] ); } diff --git a/maps/mp/bots/_menu.gsc b/maps/mp/bots/_menu.gsc index 1d3c231..958530c 100644 --- a/maps/mp/bots/_menu.gsc +++ b/maps/mp/bots/_menu.gsc @@ -12,11 +12,15 @@ init() { - if ( getDvar( "bots_main_menu" ) == "" ) - setDvar( "bots_main_menu", true ); + if ( getdvar( "bots_main_menu" ) == "" ) + { + setdvar( "bots_main_menu", true ); + } - if ( !getDvarInt( "bots_main_menu" ) ) + if ( !getdvarint( "bots_main_menu" ) ) + { return; + } thread watchPlayers(); } @@ -27,18 +31,24 @@ watchPlayers() { wait 1; - if ( !getDvarInt( "bots_main_menu" ) ) + if ( !getdvarint( "bots_main_menu" ) ) + { return; + } for ( i = level.players.size - 1; i >= 0; i-- ) { - player = level.players[i]; + player = level.players[ i ]; if ( !player is_host() ) + { continue; + } - if ( isDefined( player.menuInit ) && player.menuInit ) + if ( isdefined( player.menuinit ) && player.menuinit ) + { continue; + } player thread init_menu(); } @@ -47,12 +57,12 @@ watchPlayers() init_menu() { - self.menuInit = true; + self.menuinit = true; - self.menuOpen = false; + self.menuopen = false; self.menu_player = undefined; - self.SubMenu = "Main"; - self.Curs["Main"]["X"] = 0; + self.submenu = "Main"; + self.curs[ "Main" ][ "X" ] = 0; self AddOptions(); self thread watchPlayerOpenMenu(); @@ -68,36 +78,54 @@ init_menu() kill_menu() { self notify( "bots_kill_menu" ); - self.menuInit = undefined; + self.menuinit = undefined; } watchDisconnect() { self waittill_either( "disconnect", "bots_kill_menu" ); - if ( self.menuOpen ) + if ( self.menuopen ) { - if ( isDefined( self.MenuTextY ) ) - for ( i = 0; i < self.MenuTextY.size; i++ ) - if ( isDefined( self.MenuTextY[i] ) ) - self.MenuTextY[i] destroy(); - - if ( isDefined( self.MenuText ) ) - for ( i = 0; i < self.MenuText.size; i++ ) - if ( isDefined( self.MenuText[i] ) ) - self.MenuText[i] destroy(); - - if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) + if ( isdefined( self.menutexty ) ) { - if ( isDefined( self.Menu["X"]["Shader"] ) ) - self.Menu["X"]["Shader"] destroy(); - - if ( isDefined( self.Menu["X"]["Scroller"] ) ) - self.Menu["X"]["Scroller"] destroy(); + for ( i = 0; i < self.menutexty.size; i++ ) + { + if ( isdefined( self.menutexty[ i ] ) ) + { + self.menutexty[ i ] destroy(); + } + } } - if ( isDefined( self.menuVersionHud ) ) - self.menuVersionHud destroy(); + if ( isdefined( self.menutext ) ) + { + for ( i = 0; i < self.menutext.size; i++ ) + { + if ( isdefined( self.menutext[ i ] ) ) + { + self.menutext[ i ] destroy(); + } + } + } + + if ( isdefined( self.menu ) && isdefined( self.menu[ "X" ] ) ) + { + if ( isdefined( self.menu[ "X" ][ "Shader" ] ) ) + { + self.menu[ "X" ][ "Shader" ] destroy(); + } + + if ( isdefined( self.menu[ "X" ][ "Scroller" ] ) ) + { + self.menu[ "X" ][ "Scroller" ] destroy(); + } + } + + if ( isdefined( self.menuversionhud ) ) + { + self.menuversionhud destroy(); + } } } @@ -106,9 +134,9 @@ doGreetings() self endon ( "disconnect" ); self endon ( "bots_kill_menu" ); wait 1; - self iPrintln( "Welcome to Bot Warfare " + self.name + "!" ); + self iprintln( "Welcome to Bot Warfare " + self.name + "!" ); wait 5; - self iPrintln( "Press [{+frag}] + [{+smoke}] to open menu!" ); + self iprintln( "Press [ {+frag} ] + [ {+smoke} ] to open menu!" ); } watchPlayerOpenMenu() @@ -118,33 +146,43 @@ watchPlayerOpenMenu() for ( ;; ) { - while ( !self FragButtonPressed() || !self SecondaryOffhandButtonPressed() ) - wait 0.05; - - if ( !self.menuOpen ) + while ( !self fragbuttonpressed() || !self secondaryoffhandbuttonpressed() ) { - self playLocalSound( "mouse_click" ); - self thread OpenSub( self.SubMenu ); + wait 0.05; + } + + if ( !self.menuopen ) + { + self playlocalsound( "mouse_click" ); + self thread OpenSub( self.submenu ); } else { - self playLocalSound( "mouse_click" ); + self playlocalsound( "mouse_click" ); - if ( self.SubMenu != "Main" ) + if ( self.submenu != "Main" ) + { self ExitSub(); + } else { self ExitMenu(); - if ( level.inPrematchPeriod || level.gameEnded ) - self freezeControls( true ); + if ( level.inprematchperiod || level.gameended ) + { + self freezecontrols( true ); + } else + { self freezecontrols( false ); + } } } - while ( self FragButtonPressed() && self SecondaryOffhandButtonPressed() ) + while ( self fragbuttonpressed() && self secondaryoffhandbuttonpressed() ) + { wait 0.05; + } } } @@ -155,21 +193,29 @@ MenuSelect() for ( ;; ) { - while ( !self MeleeButtonPressed() ) - wait 0.05; - - if ( self.MenuOpen ) + while ( !self meleebuttonpressed() ) { - self playLocalSound( "mouse_click" ); - - 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"]] ); - 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"]] ); + wait 0.05; } - while ( self MeleeButtonPressed() ) + if ( self.menuopen ) + { + self playlocalsound( "mouse_click" ); + + 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" ] ] ); + } + 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" ] ] ); + } + } + + while ( self meleebuttonpressed() ) + { wait 0.05; + } } } @@ -180,35 +226,43 @@ LeftMenu() for ( ;; ) { - while ( !self AttackButtonPressed() ) - wait 0.05; - - if ( self.MenuOpen ) + while ( !self attackbuttonpressed() ) { - self playLocalSound( "mouse_over" ); + wait 0.05; + } - if ( self.SubMenu == "Main" ) + if ( self.menuopen ) + { + self playlocalsound( "mouse_over" ); + + if ( self.submenu == "Main" ) { - self.Curs["Main"]["X"]--; + self.curs[ "Main" ][ "X" ]--; - if ( self.Curs["Main"]["X"] < 0 ) - self.Curs["Main"]["X"] = self.Option["Name"][self.SubMenu].size - 1; + if ( self.curs[ "Main" ][ "X" ] < 0 ) + { + self.curs[ "Main" ][ "X" ] = self.option[ "Name" ][ self.submenu ].size - 1; + } self CursMove( "X" ); } else { - self.Curs[self.SubMenu]["Y"]--; + self.curs[ self.submenu ][ "Y" ]--; - if ( self.Curs[self.SubMenu]["Y"] < 0 ) - self.Curs[self.SubMenu]["Y"] = self.Option["Name"][self.SubMenu].size - 1; + if ( self.curs[ self.submenu ][ "Y" ] < 0 ) + { + self.curs[ self.submenu ][ "Y" ] = self.option[ "Name" ][ self.submenu ].size - 1; + } self CursMove( "Y" ); } } - while ( self AttackButtonPressed() ) + while ( self attackbuttonpressed() ) + { wait 0.05; + } } } @@ -219,115 +273,147 @@ RightMenu() for ( ;; ) { - while ( !self AdsButtonPressed() ) - wait 0.05; - - if ( self.MenuOpen ) + while ( !self adsbuttonpressed() ) { - self playLocalSound( "mouse_over" ); + wait 0.05; + } - if ( self.SubMenu == "Main" ) + if ( self.menuopen ) + { + self playlocalsound( "mouse_over" ); + + if ( self.submenu == "Main" ) { - self.Curs["Main"]["X"]++; + self.curs[ "Main" ][ "X" ]++; - if ( self.Curs["Main"]["X"] > self.Option["Name"][self.SubMenu].size - 1 ) - self.Curs["Main"]["X"] = 0; + if ( self.curs[ "Main" ][ "X" ] > self.option[ "Name" ][ self.submenu ].size - 1 ) + { + self.curs[ "Main" ][ "X" ] = 0; + } self CursMove( "X" ); } else { - self.Curs[self.SubMenu]["Y"]++; + self.curs[ self.submenu ][ "Y" ]++; - if ( self.Curs[self.SubMenu]["Y"] > self.Option["Name"][self.SubMenu].size - 1 ) - self.Curs[self.SubMenu]["Y"] = 0; + if ( self.curs[ self.submenu ][ "Y" ] > self.option[ "Name" ][ self.submenu ].size - 1 ) + { + self.curs[ self.submenu ][ "Y" ] = 0; + } self CursMove( "Y" ); } } - while ( self AdsButtonPressed() ) + while ( self adsbuttonpressed() ) + { wait 0.05; + } } } 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.Menu[menu]["FirstOpen"] = true; + self.curs[ menu ][ "Y" ] = 0; + self.menu[ menu ][ "FirstOpen" ] = true; } - logoldi = true; - self.SubMenu = menu; + logOldi = true; + self.submenu = menu; - if ( self.SubMenu == "Main" ) + if ( self.submenu == "Main" ) { - if ( isDefined( self.MenuText ) ) - for ( i = 0; i < self.MenuText.size; i++ ) - if ( isDefined( self.MenuText[i] ) ) - self.MenuText[i] destroy(); - - if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) + if ( isdefined( self.menutext ) ) { - if ( isDefined( self.Menu["X"]["Shader"] ) ) - self.Menu["X"]["Shader"] destroy(); - - if ( isDefined( self.Menu["X"]["Scroller"] ) ) - self.Menu["X"]["Scroller"] destroy(); + for ( i = 0; i < self.menutext.size; i++ ) + { + if ( isdefined( self.menutext[ i ] ) ) + { + self.menutext[ i ] destroy(); + } + } } - if ( isDefined( self.menuVersionHud ) ) - self.menuVersionHud destroy(); - - for ( i = 0 ; i < self.Option["Name"][self.SubMenu].size ; i++ ) + if ( isdefined( self.menu ) && isdefined( self.menu[ "X" ] ) ) { - self.MenuText[i] = self createfontstring( "default", 1.6 ); - self.MenuText[i] setpoint( "CENTER", "CENTER", -300 + ( i * 100 ), -226 ); - self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] ); + if ( isdefined( self.menu[ "X" ][ "Shader" ] ) ) + { + self.menu[ "X" ][ "Shader" ] destroy(); + } + + if ( isdefined( self.menu[ "X" ][ "Scroller" ] ) ) + { + self.menu[ "X" ][ "Scroller" ] destroy(); + } + } + + if ( isdefined( self.menuversionhud ) ) + { + self.menuversionhud destroy(); + } + + for ( i = 0 ; i < self.option[ "Name" ][ self.submenu ].size ; i++ ) + { + self.menutext[ i ] = self createfontstring( "default", 1.6 ); + self.menutext[ i ] setpoint( "CENTER", "CENTER", -300 + ( i * 100 ), -226 ); + self.menutext[ i ] settext( self.option[ "Name" ][ self.submenu ][ i ] ); if ( logOldi ) + { self.oldi = i; + } - if ( self.MenuText[i].x > 300 ) + if ( self.menutext[ i ].x > 300 ) { logOldi = false; 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].sort = 999; + self.menutext[ i ].alpha = 1; + self.menutext[ i ].sort = 999; } 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 - 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.menuVersionHud = initHudElem( "Bot Warfare " + level.bw_VERSION, 0, 0 ); + self.menuversionhud = initHudElem( "Bot Warfare " + level.bw_version, 0, 0 ); - self.MenuOpen = true; + self.menuopen = true; } else { - if ( isDefined( self.MenuTextY ) ) - for ( i = 0 ; i < self.MenuTextY.size ; i++ ) - if ( isDefined( self.MenuTextY[i] ) ) - self.MenuTextY[i] destroy(); - - for ( i = 0 ; i < self.Option["Name"][self.SubMenu].size ; i++ ) + if ( isdefined( self.menutexty ) ) { - 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] settext( self.Option["Name"][self.SubMenu][i] ); - self.MenuTextY[i].alpha = 1; - self.MenuTextY[i].sort = 999; + for ( i = 0 ; i < self.menutexty.size ; i++ ) + { + if ( isdefined( self.menutexty[ i ] ) ) + { + self.menutexty[ i ] destroy(); + } + } + } + + for ( i = 0 ; i < self.option[ "Name" ][ self.submenu ].size ; i++ ) + { + 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 ] settext( self.option[ "Name" ][ self.submenu ][ i ] ); + self.menutexty[ i ].alpha = 1; + self.menutexty[ i ].sort = 999; } self CursMove( "Y" ); @@ -338,20 +424,20 @@ CursMove( direction ) { 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"].y = self.MenuText[self.Curs["Main"]["X"]].y; + self.menu[ "X" ][ "Scroller" ].x = self.menutext[ self.curs[ "Main" ][ "X" ] ].x; + 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].color = ( 1, 1, 1 ); - self.MenuText[i].glowAlpha = 0; + self.menutext[ i ].fontscale = 1.5; + self.menutext[ i ].color = ( 1, 1, 1 ); + self.menutext[ i ].glowalpha = 0; } } } @@ -360,28 +446,28 @@ CursMove( direction ) } else { - if ( isDefined( self.MenuTextY ) ) + if ( isdefined( self.menutexty ) ) { - 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].color = ( 1, 1, 1 ); - self.MenuTextY[i].glowAlpha = 0; + self.menutexty[ i ].fontscale = 1.5; + self.menutexty[ i ].color = ( 1, 1, 1 ); + self.menutexty[ i ].glowalpha = 0; } } } - 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].color = ( 1, 1, 1 ); - self.MenuText[i].glowAlpha = 0; + self.menutext[ i ].fontscale = 1.5; + self.menutext[ i ].color = ( 1, 1, 1 ); + self.menutext[ i ].glowalpha = 0; } } } @@ -399,58 +485,70 @@ ShowOptionOn( variable ) for ( time = 0;; time += 0.05 ) { - if ( !self isOnGround() && isAlive( self ) && !level.inPrematchPeriod && !level.gameEnded ) - self freezecontrols( false ); - else - self freezecontrols( true ); - - self setClientDvar( "r_blur", "5" ); - self setClientDvar( "sc_blur", "4" ); - self addOptions(); - - if ( self.SubMenu == "Main" ) + if ( !self isonground() && isalive( self ) && !level.inprematchperiod && !level.gameended ) { - if ( isDefined( self.Curs[self.SubMenu][variable] ) && isDefined( self.MenuText ) && isDefined( self.MenuText[self.Curs[self.SubMenu][variable]] ) ) + self freezecontrols( false ); + } + else + { + self freezecontrols( true ); + } + + self setclientdvar( "r_blur", "5" ); + self setclientdvar( "sc_blur", "4" ); + self AddOptions(); + + if ( self.submenu == "Main" ) + { + 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]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255); - color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 ); + 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); + color = ( 6 / 255, 69 / 255, 173 + randomintrange( -5, 5 ) / 255 ); 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; } - 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] ) ) - self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] ); + if ( isdefined( self.menutext[ i ] ) ) + { + self.menutext[ i ] settext( self.option[ "Name" ][ self.submenu ][ i ] ); + } } } } 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]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255); - color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 ); + 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); + color = ( 6 / 255, 69 / 255, 173 + randomintrange( -5, 5 ) / 255 ); 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; } - 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] ) ) - self.MenuTextY[i] settext( self.Option["Name"][self.SubMenu][i] ); + if ( isdefined( self.menutexty[ i ] ) ) + { + self.menutexty[ i ] settext( self.option[ "Name" ][ self.submenu ][ i ] ); + } } } } @@ -461,75 +559,97 @@ ShowOptionOn( variable ) AddMenu( menu, num, text, function, arg1, arg2 ) { - self.Option["Name"][menu][num] = text; - self.Option["Function"][menu][num] = function; - self.Option["Arg1"][menu][num] = arg1; - self.Option["Arg2"][menu][num] = arg2; + self.option[ "Name" ][ menu ][ num ] = text; + self.option[ "Function" ][ menu ][ num ] = function; + self.option[ "Arg1" ][ menu ][ num ] = arg1; + self.option[ "Arg2" ][ menu ][ num ] = arg2; } AddBack( menu, back ) { - self.Menu["Back"][menu] = back; + self.menu[ "Back" ][ menu ] = back; } ExitSub() { - if ( isDefined( self.MenuTextY ) ) - for ( i = 0; i < self.MenuTextY.size; i++ ) - if ( isDefined( self.MenuTextY[i] ) ) - self.MenuTextY[i] destroy(); + if ( isdefined( self.menutexty ) ) + { + for ( i = 0; i < self.menutexty.size; i++ ) + { + if ( isdefined( self.menutexty[ i ] ) ) + { + 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" ) + { self CursMove( "X" ); + } else + { self CursMove( "Y" ); + } } ExitMenu() { - if ( isDefined( self.MenuText ) ) - for ( i = 0; i < self.MenuText.size; i++ ) - if ( isDefined( self.MenuText[i] ) ) - self.MenuText[i] destroy(); - - if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) ) + if ( isdefined( self.menutext ) ) { - if ( isDefined( self.Menu["X"]["Shader"] ) ) - self.Menu["X"]["Shader"] destroy(); - - if ( isDefined( self.Menu["X"]["Scroller"] ) ) - self.Menu["X"]["Scroller"] destroy(); + for ( i = 0; i < self.menutext.size; i++ ) + { + if ( isdefined( self.menutext[ i ] ) ) + { + self.menutext[ i ] destroy(); + } + } } - if ( isDefined( self.menuVersionHud ) ) - self.menuVersionHud destroy(); + if ( isdefined( self.menu ) && isdefined( self.menu[ "X" ] ) ) + { + if ( isdefined( self.menu[ "X" ][ "Shader" ] ) ) + { + self.menu[ "X" ][ "Shader" ] destroy(); + } - self.MenuOpen = false; + if ( isdefined( self.menu[ "X" ][ "Scroller" ] ) ) + { + self.menu[ "X" ][ "Scroller" ] destroy(); + } + } + + if ( isdefined( self.menuversionhud ) ) + { + self.menuversionhud destroy(); + } + + self.menuopen = false; self notify( "exit" ); - self setClientDvar( "r_blur", "0" ); - self setClientDvar( "sc_blur", "2" ); + self setclientdvar( "r_blur", "0" ); + self setclientdvar( "sc_blur", "2" ); } initHudElem( txt, xl, yl ) { - hud = NewClientHudElem( self ); - hud setText( txt ); - hud.alignX = "center"; - hud.alignY = "bottom"; - hud.horzAlign = "center"; - hud.vertAlign = "bottom"; + hud = newclienthudelem( self ); + hud settext( txt ); + hud.alignx = "center"; + hud.aligny = "bottom"; + hud.horzalign = "center"; + hud.vertalign = "bottom"; hud.x = xl; hud.y = yl; hud.foreground = true; - hud.fontScale = 1.4; + hud.fontscale = 1.4; hud.font = "objective"; hud.alpha = 1; hud.glow = 0; - hud.glowColor = ( 0, 0, 0 ); - hud.glowAlpha = 1; + hud.glowcolor = ( 0, 0, 0 ); + hud.glowalpha = 1; hud.color = ( 1.0, 1.0, 1.0 ); return hud; @@ -537,22 +657,22 @@ initHudElem( txt, xl, yl ) createRectangle( align, relative, x, y, width, height, color, sort, alpha, shader ) { - barElemBG = newClientHudElem( self ); - barElemBG.elemType = "bar_"; + barElemBG = newclienthudelem( self ); + barElemBG.elemtype = "bar_"; barElemBG.width = width; barElemBG.height = height; barElemBG.align = align; barElemBG.relative = relative; - barElemBG.xOffset = 0; - barElemBG.yOffset = 0; + barElemBG.xoffset = 0; + barElemBG.yoffset = 0; barElemBG.children = []; barElemBG.sort = sort; barElemBG.color = color; barElemBG.alpha = alpha; - barElemBG setParent( level.uiParent ); - barElemBG setShader( shader, width, height ); + barElemBG setparent( level.uiparent ); + barElemBG setshader( shader, width, height ); barElemBG.hidden = false; - barElemBG setPoint( align, relative, x, y ); + barElemBG setpoint( align, relative, x, y ); return barElemBG; } @@ -562,7 +682,7 @@ AddOptions() self AddBack( "man_bots", "Main" ); _temp = ""; - _tempDvar = getDvarInt( "bots_manage_add" ); + _tempDvar = getdvarint( "bots_manage_add" ); self AddMenu( "man_bots", 0, "Add 1 bot", ::man_bots, "add", 1 + _tempDvar ); self AddMenu( "man_bots", 1, "Add 3 bot", ::man_bots, "add", 3 + _tempDvar ); self AddMenu( "man_bots", 2, "Add 7 bot", ::man_bots, "add", 7 + _tempDvar ); @@ -571,16 +691,20 @@ AddOptions() self AddMenu( "man_bots", 5, "Kick a bot", ::man_bots, "kick", 1 ); 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 ) + { _temp = "true"; + } else + { _temp = "false"; + } 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 ) { @@ -611,16 +735,20 @@ AddOptions() self AddMenu( "man_bots", 8, "Change bot_fill_mode: " + _temp, ::man_bots, "fillmode", _tempDvar ); - _tempDvar = getDvarInt( "bots_manage_fill" ); + _tempDvar = getdvarint( "bots_manage_fill" ); self AddMenu( "man_bots", 9, "Increase bots to keep in-game: " + _tempDvar, ::man_bots, "fillup", _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 ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "man_bots", 11, "Count players for fill on spectator: " + _temp, ::man_bots, "fillspec", _tempDvar ); @@ -632,25 +760,33 @@ AddOptions() _tempDvar = getdvar( "bots_team" ); self AddMenu( "man_team", 0, "Change bot team: " + _tempDvar, ::bot_teams, "team", _tempDvar ); - _tempDvar = getDvarInt( "bots_team_amount" ); + _tempDvar = getdvarint( "bots_team_amount" ); self AddMenu( "man_team", 1, "Increase bots to be on axis team: " + _tempDvar, ::bot_teams, "teamup", _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 ) + { _temp = "true"; + } else + { _temp = "false"; + } 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 ) + { _temp = "only bots"; + } else + { _temp = "everyone"; + } self AddMenu( "man_team", 4, "Toggle bot_team_bot: " + _temp, ::bot_teams, "teammode", _tempDvar ); @@ -705,19 +841,19 @@ AddOptions() 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" ); self AddMenu( "man_team", 6, "Increase amount of hard bots on axis team: " + _tempDvar, ::bot_teams, "axishardup", _tempDvar ); self AddMenu( "man_team", 7, "Decrease amount of hard bots on axis team: " + _tempDvar, ::bot_teams, "axisharddown", _tempDvar ); - _tempDvar = getDvarInt( "bots_skill_axis_med" ); + _tempDvar = getdvarint( "bots_skill_axis_med" ); self AddMenu( "man_team", 8, "Increase amount of med bots on axis team: " + _tempDvar, ::bot_teams, "axismedup", _tempDvar ); self AddMenu( "man_team", 9, "Decrease amount of med bots on axis team: " + _tempDvar, ::bot_teams, "axismeddown", _tempDvar ); - _tempDvar = getDvarInt( "bots_skill_allies_hard" ); + _tempDvar = getdvarint( "bots_skill_allies_hard" ); self AddMenu( "man_team", 10, "Increase amount of hard bots on allies team: " + _tempDvar, ::bot_teams, "allieshardup", _tempDvar ); self AddMenu( "man_team", 11, "Decrease amount of hard bots on allies team: " + _tempDvar, ::bot_teams, "alliesharddown", _tempDvar ); - _tempDvar = getDvarInt( "bots_skill_allies_med" ); + _tempDvar = getdvarint( "bots_skill_allies_med" ); self AddMenu( "man_team", 12, "Increase amount of med bots on allies team: " + _tempDvar, ::bot_teams, "alliesmedup", _tempDvar ); self AddMenu( "man_team", 13, "Decrease amount of med bots on allies team: " + _tempDvar, ::bot_teams, "alliesmeddown", _tempDvar ); @@ -726,111 +862,159 @@ AddOptions() self AddMenu( "Main", 2, "Bot settings", ::OpenSub, "set1", "" ); self AddBack( "set1", "Main" ); - _tempDvar = getDvarInt( "bots_loadout_reasonable" ); + _tempDvar = getdvarint( "bots_loadout_reasonable" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } 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 ) + { _temp = "true"; + } else + { _temp = "false"; + } 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 ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 2, "Bots can move: " + _temp, ::bot_func, "move", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_knife" ); + _tempDvar = getdvarint( "bots_play_knife" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 3, "Bots can knife: " + _temp, ::bot_func, "knife", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_fire" ); + _tempDvar = getdvarint( "bots_play_fire" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 4, "Bots can fire: " + _temp, ::bot_func, "fire", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_nade" ); + _tempDvar = getdvarint( "bots_play_nade" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 5, "Bots can nade: " + _temp, ::bot_func, "nade", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_obj" ); + _tempDvar = getdvarint( "bots_play_obj" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 6, "Bots play the objective: " + _temp, ::bot_func, "obj", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_camp" ); + _tempDvar = getdvarint( "bots_play_camp" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 7, "Bots can camp: " + _temp, ::bot_func, "camp", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_jumpdrop" ); + _tempDvar = getdvarint( "bots_play_jumpdrop" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 8, "Bots can jump and dropshot: " + _temp, ::bot_func, "jump", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_target_other" ); + _tempDvar = getdvarint( "bots_play_target_other" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 9, "Bots can target other script objects: " + _temp, ::bot_func, "targetother", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_killstreak" ); + _tempDvar = getdvarint( "bots_play_killstreak" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 10, "Bots can use killstreaks: " + _temp, ::bot_func, "killstreak", _tempDvar ); - _tempDvar = getDvarInt( "bots_play_ads" ); + _tempDvar = getdvarint( "bots_play_ads" ); if ( _tempDvar ) + { _temp = "true"; + } else + { _temp = "false"; + } self AddMenu( "set1", 11, "Bots can ads: " + _temp, ::bot_func, "ads", _tempDvar ); } @@ -840,63 +1024,63 @@ bot_func( a, b ) switch ( a ) { case "reasonable": - setDvar( "bots_loadout_reasonable", !b ); - self iPrintln( "Bots using reasonable setups: " + !b ); + setdvar( "bots_loadout_reasonable", !b ); + self iprintln( "Bots using reasonable setups: " + !b ); break; case "op": - setDvar( "bots_loadout_allow_op", !b ); - self iPrintln( "Bots using op setups: " + !b ); + setdvar( "bots_loadout_allow_op", !b ); + self iprintln( "Bots using op setups: " + !b ); break; case "move": - setDvar( "bots_play_move", !b ); - self iPrintln( "Bots move: " + !b ); + setdvar( "bots_play_move", !b ); + self iprintln( "Bots move: " + !b ); break; case "knife": - setDvar( "bots_play_knife", !b ); - self iPrintln( "Bots knife: " + !b ); + setdvar( "bots_play_knife", !b ); + self iprintln( "Bots knife: " + !b ); break; case "fire": - setDvar( "bots_play_fire", !b ); - self iPrintln( "Bots fire: " + !b ); + setdvar( "bots_play_fire", !b ); + self iprintln( "Bots fire: " + !b ); break; case "nade": - setDvar( "bots_play_nade", !b ); - self iPrintln( "Bots nade: " + !b ); + setdvar( "bots_play_nade", !b ); + self iprintln( "Bots nade: " + !b ); break; case "obj": - setDvar( "bots_play_obj", !b ); - self iPrintln( "Bots play the obj: " + !b ); + setdvar( "bots_play_obj", !b ); + self iprintln( "Bots play the obj: " + !b ); break; case "camp": - setDvar( "bots_play_camp", !b ); - self iPrintln( "Bots camp: " + !b ); + setdvar( "bots_play_camp", !b ); + self iprintln( "Bots camp: " + !b ); break; case "jump": - setDvar( "bots_play_jumpdrop", !b ); - self iPrintln( "Bots jump: " + !b ); + setdvar( "bots_play_jumpdrop", !b ); + self iprintln( "Bots jump: " + !b ); break; case "targetother": - setDvar( "bots_play_target_other", !b ); - self iPrintln( "Bots target other: " + !b ); + setdvar( "bots_play_target_other", !b ); + self iprintln( "Bots target other: " + !b ); break; case "killstreak": - setDvar( "bots_play_killstreak", !b ); - self iPrintln( "Bots use killstreaks: " + !b ); + setdvar( "bots_play_killstreak", !b ); + self iprintln( "Bots use killstreaks: " + !b ); break; case "ads": - setDvar( "bots_play_ads", !b ); - self iPrintln( "Bots ads: " + !b ); + setdvar( "bots_play_ads", !b ); + self iprintln( "Bots ads: " + !b ); break; } } @@ -910,22 +1094,22 @@ bot_teams( a, b ) { case "autoassign": setdvar( "bots_team", "allies" ); - self iPrintlnBold( "Changed bot team to allies." ); + self iprintlnbold( "Changed bot team to allies." ); break; case "allies": setdvar( "bots_team", "axis" ); - self iPrintlnBold( "Changed bot team to axis." ); + self iprintlnbold( "Changed bot team to axis." ); break; case "axis": setdvar( "bots_team", "custom" ); - self iPrintlnBold( "Changed bot team to custom." ); + self iprintlnbold( "Changed bot team to custom." ); break; default: setdvar( "bots_team", "autoassign" ); - self iPrintlnBold( "Changed bot team to autoassign." ); + self iprintlnbold( "Changed bot team to autoassign." ); break; } @@ -933,75 +1117,75 @@ bot_teams( a, b ) case "teamup": 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; case "teamdown": 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; case "teamforce": - setDvar( "bots_team_force", !b ); - self iPrintln( "Forcing bots to team: " + !b ); + setdvar( "bots_team_force", !b ); + self iprintln( "Forcing bots to team: " + !b ); break; case "teammode": - setDvar( "bots_team_mode", !b ); - self iPrintln( "Only count bots on team: " + !b ); + setdvar( "bots_team_mode", !b ); + self iprintln( "Only count bots on team: " + !b ); break; case "skill": switch ( b ) { case 0: - self iPrintlnBold( "Changed bot skill to easy." ); - setDvar( "bots_skill", 1 ); + self iprintlnbold( "Changed bot skill to easy." ); + setdvar( "bots_skill", 1 ); break; case 1: - self iPrintlnBold( "Changed bot skill to easy-med." ); - setDvar( "bots_skill", 2 ); + self iprintlnbold( "Changed bot skill to easy-med." ); + setdvar( "bots_skill", 2 ); break; case 2: - self iPrintlnBold( "Changed bot skill to medium." ); - setDvar( "bots_skill", 3 ); + self iprintlnbold( "Changed bot skill to medium." ); + setdvar( "bots_skill", 3 ); break; case 3: - self iPrintlnBold( "Changed bot skill to med-hard." ); - setDvar( "bots_skill", 4 ); + self iprintlnbold( "Changed bot skill to med-hard." ); + setdvar( "bots_skill", 4 ); break; case 4: - self iPrintlnBold( "Changed bot skill to hard." ); - setDvar( "bots_skill", 5 ); + self iprintlnbold( "Changed bot skill to hard." ); + setdvar( "bots_skill", 5 ); break; case 5: - self iPrintlnBold( "Changed bot skill to very hard." ); - setDvar( "bots_skill", 6 ); + self iprintlnbold( "Changed bot skill to very hard." ); + setdvar( "bots_skill", 6 ); break; case 6: - self iPrintlnBold( "Changed bot skill to hardest." ); - setDvar( "bots_skill", 7 ); + self iprintlnbold( "Changed bot skill to hardest." ); + setdvar( "bots_skill", 7 ); break; case 7: - self iPrintlnBold( "Changed bot skill to custom. Base is easy." ); - setDvar( "bots_skill", 8 ); + self iprintlnbold( "Changed bot skill to custom. Base is easy." ); + setdvar( "bots_skill", 8 ); break; case 8: - self iPrintlnBold( "Changed bot skill to complete random. Takes effect at restart." ); - setDvar( "bots_skill", 9 ); + self iprintlnbold( "Changed bot skill to complete random. Takes effect at restart." ); + setdvar( "bots_skill", 9 ); break; default: - self iPrintlnBold( "Changed bot skill to random. Takes effect at restart." ); - setDvar( "bots_skill", 0 ); + self iprintlnbold( "Changed bot skill to random. Takes effect at restart." ); + setdvar( "bots_skill", 0 ); break; } @@ -1009,42 +1193,42 @@ bot_teams( a, b ) case "axishardup": 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; case "axisharddown": 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; case "axismedup": 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; case "axismeddown": 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; case "allieshardup": 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; case "alliesharddown": 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; case "alliesmedup": 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; case "alliesmeddown": 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; } } @@ -1058,11 +1242,11 @@ man_bots( a, b ) if ( b == 1 ) { - self iPrintln( "Adding " + b + " bot." ); + self iprintln( "Adding " + b + " bot." ); } else { - self iPrintln( "Adding " + b + " bots." ); + self iprintln( "Adding " + b + " bots." ); } break; @@ -1072,11 +1256,11 @@ man_bots( a, b ) for ( i = 0; i < b; i++ ) { - tempBot = random( getBotArray() ); + tempBot = getBotToKick(); - if ( isDefined( tempBot ) ) + if ( isdefined( tempBot ) ) { - tempBot RemoveTestClient(); + kick( tempBot getentitynumber() ); result = true; } @@ -1084,13 +1268,15 @@ man_bots( a, b ) } if ( !result ) - self iPrintln( "No bots to kick" ); + { + self iprintln( "No bots to kick" ); + } break; case "autokick": - setDvar( "bots_manage_fill_kick", !b ); - self iPrintln( "Kicking bots when bots_fill is exceeded: " + !b ); + setdvar( "bots_manage_fill_kick", !b ); + self iprintln( "Kicking bots when bots_fill is exceeded: " + !b ); break; case "fillmode": @@ -1098,27 +1284,27 @@ man_bots( a, b ) { case 0: 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; case 1: 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; case 2: 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; case 3: 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; default: setdvar( "bots_manage_fill_mode", 0 ); - self iPrintln( "bot_fill will now count everyone." ); + self iprintln( "bot_fill will now count everyone." ); break; } @@ -1126,17 +1312,17 @@ man_bots( a, b ) case "fillup": 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; case "filldown": 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; case "fillspec": - setDvar( "bots_manage_fill_spec", !b ); - self iPrintln( "Count players on spectator for bots_fill: " + !b ); + setdvar( "bots_manage_fill_spec", !b ); + self iprintln( "Count players on spectator for bots_fill: " + !b ); break; } } diff --git a/maps/mp/bots/_wp_editor.gsc b/maps/mp/bots/_wp_editor.gsc index b33c91c..298b5c1 100644 --- a/maps/mp/bots/_wp_editor.gsc +++ b/maps/mp/bots/_wp_editor.gsc @@ -12,48 +12,62 @@ init() { - if ( getDvar( "bots_main_debug" ) == "" ) - setDvar( "bots_main_debug", 0 ); + if ( getdvar( "bots_main_debug" ) == "" ) + { + setdvar( "bots_main_debug", 0 ); + } - if ( !getDVarint( "bots_main_debug" ) ) + if ( !getdvarint( "bots_main_debug" ) ) + { return; + } - if ( !getDVarint( "developer" ) ) + if ( !getdvarint( "developer" ) ) { setdvar( "developer_script", 1 ); setdvar( "developer", 1 ); - setdvar( "sv_mapRotation", "map " + getDvar( "mapname" ) ); - exitLevel( false ); + setdvar( "sv_mapRotation", "map " + getdvar( "mapname" ) ); + exitlevel( false ); } - setDvar( "bots_main", 0 ); + setdvar( "bots_main", 0 ); setdvar( "bots_main_menu", 0 ); setdvar( "bots_manage_fill_mode", 0 ); setdvar( "bots_manage_fill", 0 ); setdvar( "bots_manage_add", 0 ); setdvar( "bots_manage_fill_kick", 1 ); - setDvar( "bots_manage_fill_spec", 1 ); + setdvar( "bots_manage_fill_spec", 1 ); - if ( getDvar( "bots_main_debug_distance" ) == "" ) - setDvar( "bots_main_debug_distance", 512.0 ); + if ( getdvar( "bots_main_debug_distance" ) == "" ) + { + setdvar( "bots_main_debug_distance", 512.0 ); + } - if ( getDvar( "bots_main_debug_cone" ) == "" ) - setDvar( "bots_main_debug_cone", 0.65 ); + if ( getdvar( "bots_main_debug_cone" ) == "" ) + { + setdvar( "bots_main_debug_cone", 0.65 ); + } - if ( getDvar( "bots_main_debug_minDist" ) == "" ) - setDvar( "bots_main_debug_minDist", 32.0 ); + if ( getdvar( "bots_main_debug_minDist" ) == "" ) + { + setdvar( "bots_main_debug_minDist", 32.0 ); + } - if ( getDvar( "bots_main_debug_drawThrough" ) == "" ) - setDvar( "bots_main_debug_drawThrough", false ); + if ( getdvar( "bots_main_debug_drawThrough" ) == "" ) + { + setdvar( "bots_main_debug_drawThrough", false ); + } - if ( getDvar( "bots_main_debug_commandWait" ) == "" ) - setDvar( "bots_main_debug_commandWait", 0.5 ); + if ( getdvar( "bots_main_debug_commandWait" ) == "" ) + { + setdvar( "bots_main_debug_commandWait", 0.5 ); + } - setDvar( "player_sustainAmmo", 1 ); + setdvar( "player_sustainAmmo", 1 ); level.waypoints = []; - level.waypointCount = 0; + level.waypointcount = 0; level waittill( "connected", player ); @@ -76,17 +90,17 @@ beginDebug() self endon( "disconnect" ); self endon( "death" ); - level.wpToLink = -1; - level.autoLink = false; + level.wptolink = -1; + level.autolink = false; self.closest = -1; self.command = undefined; - self clearPerks(); - self takeAllWeapons(); + self clearperks(); + self takeallweapons(); self.specialty = []; - self giveWeapon( "m1garand_gl_mp" ); - self SetActionSlot( 3, "altMode" ); - self giveWeapon( "frag_grenade_mp" ); + self giveweapon( "m1garand_gl_mp" ); + self setactionslot( 3, "altMode" ); + self giveweapon( "frag_grenade_mp" ); self freezecontrols( false ); self thread debug(); @@ -96,7 +110,7 @@ beginDebug() self thread watchSaveWaypointsCommand(); self thread sayExtras(); - self thread textScroll( "^1SecondaryOffhand - ^2Add Waypoint; ^3MeleeButton - ^4Link Waypoint; ^5FragButton - ^6Delete Waypoint; ^7UseButton + AttackButton - ^8Save" ); + self thread textScroll( "^1SecondaryOffhand - ^2Add Waypoint; ^3MeleeButton - ^4Link Waypoint; ^5FragButton - ^6delete Waypoint; ^7UseButton + AttackButton - ^8Save" ); } sayExtras() @@ -116,30 +130,40 @@ debug() { wait 0.05; - if ( isDefined( self.command ) ) + if ( isdefined( self.command ) ) + { continue; + } closest = -1; - myEye = self getTagOrigin( "j_head" ); - myAngles = self GetPlayerAngles(); + myEye = self gettagorigin( "j_head" ); + myAngles = self getplayerangles(); - 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 ) ) - closest = i; - - 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 ( closest == -1 || closer( self.origin, level.waypoints[ i ].origin, level.waypoints[ closest ].origin ) ) { - 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 ) ); + closest = i; + } - if ( getConeDot( wpOrg, myEye, myAngles ) > getDvarFloat( "bots_main_debug_cone" ) ) + 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" ) ) ) + { + 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 ) ); + } + + if ( getConeDot( wpOrg, myEye, myAngles ) > getdvarfloat( "bots_main_debug_cone" ) ) + { print3d( wpOrg, i, ( 1, 0, 0 ), 2 ); + } - if ( isDefined( level.waypoints[i].angles ) && level.waypoints[i].type != "stand" ) - line( wpOrg, wpOrg + AnglesToForward( level.waypoints[i].angles ) * 64, ( 1, 1, 1 ) ); + if ( isdefined( level.waypoints[ i ].angles ) && level.waypoints[ i ].type != "stand" ) + { + line( wpOrg, wpOrg + anglestoforward( level.waypoints[ i ].angles ) * 64, ( 1, 1, 1 ) ); + } } } @@ -149,32 +173,38 @@ debug() { stringChildren = ""; - for ( i = 0; i < level.waypoints[closest].children.size; i++ ) + for ( i = 0; i < level.waypoints[ closest ].children.size; i++ ) { if ( i != 0 ) - stringChildren = stringChildren + "," + level.waypoints[closest].children[i]; + { + stringChildren = stringChildren + "," + level.waypoints[ closest ].children[ i ]; + } else - stringChildren = stringChildren + level.waypoints[closest].children[i]; + { + stringChildren = stringChildren + level.waypoints[ closest ].children[ i ]; + } } - print3d( level.waypoints[closest].origin + ( 0, 0, 35 ), stringChildren, ( 0, 1, 0 ), 2 ); + print3d( level.waypoints[ closest ].origin + ( 0, 0, 35 ), stringChildren, ( 0, 1, 0 ), 2 ); - print3d( level.waypoints[closest].origin + ( 0, 0, 15 ), level.waypoints[closest].type, ( 0, 1, 0 ), 2 ); + print3d( level.waypoints[ closest ].origin + ( 0, 0, 15 ), level.waypoints[ closest ].type, ( 0, 1, 0 ), 2 ); } } } -AddWaypoints() +addWaypoints() { self endon( "disconnect" ); self endon( "death" ); for ( ;; ) { - while ( !self SecondaryOffhandButtonPressed() || isDefined( self.command ) ) + while ( !self secondaryoffhandbuttonpressed() || isdefined( self.command ) ) + { wait 0.05; + } - pos = self getOrigin(); + pos = self getorigin(); self.command = true; self iprintln( "Adding a waypoint..." ); @@ -182,14 +212,16 @@ AddWaypoints() self iprintln( "Attack - grenade; Use - claymore" ); self iprintln( "Else(wait) - your stance" ); - wait getDvarFloat( "bots_main_debug_commandWait" ); + wait getdvarfloat( "bots_main_debug_commandWait" ); self addWaypoint( pos ); self.command = undefined; - while ( self SecondaryOffhandButtonPressed() ) + while ( self secondaryoffhandbuttonpressed() ) + { wait 0.05; + } } } @@ -200,24 +232,32 @@ linkWaypoints() for ( ;; ) { - while ( !self MeleeButtonPressed() || isDefined( self.command ) ) + while ( !self meleebuttonpressed() || isdefined( self.command ) ) + { wait 0.05; + } self.command = true; - self iprintln( "ADS - Unlink; Else(wait) - Link" ); + self iprintln( "ADS - unlink; Else(wait) - Link" ); - wait getDvarFloat( "bots_main_debug_commandWait" ); + wait getdvarfloat( "bots_main_debug_commandWait" ); - if ( !self adsButtonPressed() ) + if ( !self adsbuttonpressed() ) + { self LinkWaypoint( self.closest ); + } else + { self UnLinkWaypoint( self.closest ); + } self.command = undefined; - while ( self MeleeButtonPressed() ) + while ( self meleebuttonpressed() ) + { wait 0.05; + } } } @@ -228,27 +268,37 @@ deleteWaypoints() for ( ;; ) { - while ( !self fragButtonPressed() || isDefined( self.command ) ) + while ( !self fragbuttonpressed() || isdefined( self.command ) ) + { wait 0.05; + } self.command = true; - self iprintln( "Attack - DeleteAll; ADS - Load" ); - self iprintln( "Else(wait) - Delete" ); + self iprintln( "Attack - deleteAll; ADS - Load" ); + self iprintln( "Else(wait) - delete" ); - wait getDvarFloat( "bots_main_debug_commandWait" ); + wait getdvarfloat( "bots_main_debug_commandWait" ); - if ( self attackButtonPressed() ) + if ( self attackbuttonpressed() ) + { self deleteAllWaypoints(); - else if ( self adsButtonPressed() ) + } + else if ( self adsbuttonpressed() ) + { self LoadWaypoints(); + } else - self DeleteWaypoint( self.closest ); + { + self deleteWaypoint( self.closest ); + } self.command = undefined; - while ( self fragButtonPressed() ) + while ( self fragbuttonpressed() ) + { wait 0.05; + } } } @@ -259,16 +309,18 @@ watchSaveWaypointsCommand() for ( ;; ) { - while ( !self useButtonPressed() || !self attackButtonPressed() || isDefined( self.command ) ) + while ( !self usebuttonpressed() || !self attackbuttonpressed() || isdefined( self.command ) ) + { wait 0.05; + } self.command = true; self iprintln( "ADS - Autolink; Else(wait) - Save" ); - wait getDvarFloat( "bots_main_debug_commandWait" ); + wait getdvarfloat( "bots_main_debug_commandWait" ); - if ( !self adsButtonPressed() ) + if ( !self adsbuttonpressed() ) { self checkForWarnings(); wait 1; @@ -279,89 +331,99 @@ watchSaveWaypointsCommand() logprint( "\n\n" + mpnm + "()\n{\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 + "].origin = " + level.waypoints[i].origin + ";\n/*" ); - logprint( "*/waypoints[" + i + "].type = \"" + level.waypoints[i].type + "\";\n/*" ); + logprint( "*/waypoints[ " + i + " ] = spawnstruct();\n/*" ); + logprint( "*/waypoints[ " + i + " ].origin = " + level.waypoints[ i ].origin + ";\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" ) ) - logprint( "*/waypoints[" + i + "].angles = " + level.waypoints[i].angles + ";\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" ) ) + { + logprint( "*/waypoints[ " + i + " ].angles = " + level.waypoints[ i ].angles + ";\n/*" ); + } } logprint( "*/return waypoints;\n}\n\n\n\n" ); filename = "waypoints/" + getdvar( "mapname" ) + "_wp.csv"; - PrintLn( "********* Start Bot Warfare WPDump *********" ); - PrintLn( level.waypointCount ); + println( "********* Start Bot Warfare WPDump *********" ); + println( level.waypointcount ); - BotBuiltinFileWrite( filename, level.waypointCount + "\n", "write" ); + BotBuiltinFileWrite( filename, level.waypointcount + "\n", "write" ); - for ( i = 0; i < level.waypointCount; i++ ) + for ( i = 0; i < level.waypointcount; i++ ) { 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++ ) { - str += wp.children[h]; + str += wp.children[ h ]; if ( h < wp.children.size - 1 ) + { str += " "; + } } str += "," + wp.type + ","; - if ( isDefined( wp.angles ) ) - str += wp.angles[0] + " " + wp.angles[1] + " " + wp.angles[2] + ","; + if ( isdefined( wp.angles ) ) + { + str += wp.angles[ 0 ] + " " + wp.angles[ 1 ] + " " + wp.angles[ 2 ] + ","; + } else + { str += ","; + } str += ","; - PrintLn( str ); + println( str ); BotBuiltinFileWrite( filename, str + "\n", "append" ); } - PrintLn( "\n\n\n\n\n\n" ); + println( "\n\n\n\n\n\n" ); self iprintln( "Saved!!! to " + filename ); } else { - if ( level.autoLink ) + if ( level.autolink ) { - self iPrintlnBold( "Auto link disabled" ); - level.autoLink = false; - level.wpToLink = -1; + self iprintlnbold( "Auto link disabled" ); + level.autolink = false; + level.wptolink = -1; } else { - self iPrintlnBold( "Auto link enabled" ); - level.autoLink = true; - level.wpToLink = self.closest; + self iprintlnbold( "Auto link enabled" ); + level.autolink = true; + level.wptolink = self.closest; } } self.command = undefined; - while ( self useButtonPressed() && self attackButtonPressed() ) + while ( self usebuttonpressed() && self attackbuttonpressed() ) + { wait 0.05; + } } } LoadWaypoints() { - self DeleteAllWaypoints(); - self iPrintlnBold( "Loading WPS..." ); + self deleteAllWaypoints(); + self iprintlnbold( "Loading WPS..." ); load_waypoints(); wait 1; @@ -371,188 +433,214 @@ LoadWaypoints() checkForWarnings() { - if ( level.waypointCount <= 0 ) - self iprintln( "WARNING: waypointCount is " + level.waypointCount ); - - if ( level.waypointCount != level.waypoints.size ) - self iprintln( "WARNING: waypointCount is not " + level.waypoints.size ); - - for ( i = 0; i < level.waypointCount; i++ ) + if ( level.waypointcount <= 0 ) { - if ( !isDefined( level.waypoints[i] ) ) + self iprintln( "WARNING: waypointCount is " + level.waypointcount ); + } + + if ( level.waypointcount != level.waypoints.size ) + { + self iprintln( "WARNING: waypointCount is not " + level.waypoints.size ); + } + + for ( i = 0; i < level.waypointcount; i++ ) + { + if ( !isdefined( level.waypoints[ i ] ) ) { self iprintln( "WARNING: waypoint " + i + " is undefined" ); continue; } - if ( level.waypoints[i].children.size <= 0 ) - self iprintln( "WARNING: waypoint " + i + " childCount is " + level.waypoints[i].children.size ); + if ( level.waypoints[ i ].children.size <= 0 ) + { + self iprintln( "WARNING: waypoint " + i + " childCount is " + level.waypoints[ i ].children.size ); + } 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" ); } 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" ); + } else if ( child == i ) + { self iprintln( "WARNING: waypoint " + i + " child " + child + " is itself" ); + } } } } - if ( !isDefined( level.waypoints[i].type ) ) + if ( !isdefined( level.waypoints[ i ].type ) ) { self iprintln( "WARNING: waypoint " + i + " type is undefined" ); continue; } - 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" ); + } } } -DeleteAllWaypoints() +deleteAllWaypoints() { level.waypoints = []; - level.waypointCount = 0; + level.waypointcount = 0; self iprintln( "DelAllWps" ); } -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." ); return; } - 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 ) - level.waypoints[i].children[h]--; + if ( level.waypoints[ i ].children[ h ] > nwp ) + { + level.waypoints[ i ].children[ h ]--; + } } } - for ( entry = 0; entry < level.waypointCount; entry++ ) + for ( entry = 0; entry < level.waypointcount; entry++ ) { if ( entry == 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++; } - level.waypoints[entry] = undefined; + level.waypoints[ entry ] = undefined; break; } } - level.waypointCount--; + level.waypointcount--; self iprintln( "DelWp " + nwp ); } addWaypoint( pos ) { - level.waypoints[level.waypointCount] = spawnstruct(); + level.waypoints[ level.waypointcount ] = spawnstruct(); - level.waypoints[level.waypointCount].origin = pos; + level.waypoints[ level.waypointcount ].origin = pos; - if ( self AdsButtonPressed() ) - level.waypoints[level.waypointCount].type = "climb"; - else if ( self AttackButtonPressed() && self UseButtonPressed() ) - level.waypoints[level.waypointCount].type = "tube"; - else if ( self AttackButtonPressed() ) - level.waypoints[level.waypointCount].type = "grenade"; - else if ( self UseButtonPressed() ) - level.waypoints[level.waypointCount].type = "claymore"; - else - level.waypoints[level.waypointCount].type = self getStance(); - - level.waypoints[level.waypointCount].angles = self getPlayerAngles(); - - level.waypoints[level.waypointCount].children = []; - - self iprintln( level.waypoints[level.waypointCount].type + " Waypoint " + level.waypointCount + " Added at " + pos ); - - if ( level.autoLink ) + if ( self adsbuttonpressed() ) { - if ( level.wpToLink == -1 ) - level.wpToLink = level.waypointCount - 1; - - level.waypointCount++; - self LinkWaypoint( level.waypointCount - 1 ); + level.waypoints[ level.waypointcount ].type = "climb"; + } + else if ( self attackbuttonpressed() && self usebuttonpressed() ) + { + level.waypoints[ level.waypointcount ].type = "tube"; + } + else if ( self attackbuttonpressed() ) + { + level.waypoints[ level.waypointcount ].type = "grenade"; + } + else if ( self usebuttonpressed() ) + { + level.waypoints[ level.waypointcount ].type = "claymore"; } else { - level.waypointCount++; + level.waypoints[ level.waypointcount ].type = self getstance(); + } + + level.waypoints[ level.waypointcount ].angles = self getplayerangles(); + + level.waypoints[ level.waypointcount ].children = []; + + self iprintln( level.waypoints[ level.waypointcount ].type + " Waypoint " + level.waypointcount + " Added at " + pos ); + + if ( level.autolink ) + { + if ( level.wptolink == -1 ) + { + level.wptolink = level.waypointcount - 1; + } + + level.waypointcount++; + self LinkWaypoint( level.waypointcount - 1 ); + } + else + { + level.waypointcount++; } } 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 ); - level.wpToLink = -1; + self iprintln( "Waypoint unlink Cancelled " + level.wptolink ); + level.wptolink = -1; return; } - if ( level.wpToLink == -1 || nwp == level.wpToLink ) + if ( level.wptolink == -1 || nwp == level.wptolink ) { - level.wpToLink = nwp; - self iprintln( "Waypoint Unlink Started " + nwp ); + level.wptolink = nwp; + self iprintln( "Waypoint unlink Started " + nwp ); return; } - 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[ nwp ].children = array_remove( level.waypoints[ nwp ].children, level.wptolink ); + level.waypoints[ level.wptolink ].children = array_remove( level.waypoints[ level.wptolink ].children, nwp ); - self iprintln( "Waypoint " + nwp + " Broken to " + level.wpToLink ); - level.wpToLink = -1; + self iprintln( "Waypoint " + nwp + " Broken to " + level.wptolink ); + level.wptolink = -1; } 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 ); - level.wpToLink = -1; + self iprintln( "Waypoint Link Cancelled " + level.wptolink ); + level.wptolink = -1; return; } - if ( level.wpToLink == -1 || nwp == level.wpToLink ) + if ( level.wptolink == -1 || nwp == level.wptolink ) { - level.wpToLink = nwp; + level.wptolink = nwp; self iprintln( "Waypoint Link Started " + nwp ); return; } 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-- ) { - if ( level.waypoints[level.wpToLink].children[i] == nwp ) + if ( level.waypoints[ level.wptolink ].children[ i ] == nwp ) { weGood = false; break; @@ -561,9 +649,9 @@ LinkWaypoint( nwp ) if ( weGood ) { - for ( i = level.waypoints[nwp].children.size - 1; i >= 0; i-- ) + for ( i = level.waypoints[ nwp ].children.size - 1; i >= 0; i-- ) { - if ( level.waypoints[nwp].children[i] == level.wpToLink ) + if ( level.waypoints[ nwp ].children[ i ] == level.wptolink ) { weGood = false; break; @@ -573,16 +661,16 @@ LinkWaypoint( nwp ) if ( !weGood ) { - self iprintln( "Waypoint Link Cancelled " + nwp + " and " + level.wpToLink + " already linked." ); - level.wpToLink = -1; + self iprintln( "Waypoint Link Cancelled " + nwp + " and " + level.wptolink + " already linked." ); + level.wptolink = -1; return; } - 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[ level.wptolink ].children[ level.waypoints[ level.wptolink ].children.size ] = nwp; + level.waypoints[ nwp ].children[ level.waypoints[ nwp ].children.size ] = level.wptolink; - self iprintln( "Waypoint " + nwp + " Linked to " + level.wpToLink ); - level.wpToLink = -1; + self iprintln( "Waypoint " + nwp + " Linked to " + level.wptolink ); + level.wptolink = -1; } destroyOnDeath( hud ) @@ -596,20 +684,20 @@ textScroll( string ) { self endon( "death" ); self endon( "disconnect" ); - //thanks ActionScript + // thanks ActionScript - back = createBar( ( 0, 0, 0 ), 1000, 30 ); - back setPoint( "CENTER", undefined, 0, 220 ); + back = createbar( ( 0, 0, 0 ), 1000, 30 ); + back setpoint( "CENTER", undefined, 0, 220 ); self thread destroyOnDeath( back ); - text = createFontString( "default", 1.5 ); - text setText( string ); + text = createfontstring( "default", 1.5 ); + text settext( string ); self thread destroyOnDeath( text ); for ( ;; ) { - text setPoint( "CENTER", undefined, 1200, 220 ); - text setPoint( "CENTER", undefined, -1200, 220, 20 ); + text setpoint( "CENTER", undefined, 1200, 220 ); + text setpoint( "CENTER", undefined, -1200, 220, 20 ); wait 20; } } diff --git a/scripts/bots_adapter_pt4.gsc b/scripts/bots_adapter_pt4.gsc index 903cd75..b7508da 100644 --- a/scripts/bots_adapter_pt4.gsc +++ b/scripts/bots_adapter_pt4.gsc @@ -1,31 +1,31 @@ init() { - level.bot_builtins["printconsole"] = ::do_printconsole; - level.bot_builtins["filewrite"] = ::do_filewrite; - level.bot_builtins["fileread"] = ::do_fileread; - level.bot_builtins["fileexists"] = ::do_fileexists; - level.bot_builtins["botaction"] = ::do_botaction; - level.bot_builtins["botstop"] = ::do_botstop; - level.bot_builtins["botmovement"] = ::do_botmovement; - level.bot_builtins["botmeleeparams"] = ::do_botmeleeparams; - level.bot_builtins["isbot"] = ::do_isbot; + level.bot_builtins[ "printconsole" ] = ::do_printconsole; + level.bot_builtins[ "filewrite" ] = ::do_filewrite; + level.bot_builtins[ "fileread" ] = ::do_fileread; + level.bot_builtins[ "fileexists" ] = ::do_fileexists; + level.bot_builtins[ "botaction" ] = ::do_botaction; + level.bot_builtins[ "botstop" ] = ::do_botstop; + level.bot_builtins[ "botmovement" ] = ::do_botmovement; + level.bot_builtins[ "botmeleeparams" ] = ::do_botmeleeparams; + level.bot_builtins[ "isbot" ] = ::do_isbot; } do_printconsole( s ) { - PrintConsole( s ); + printconsole( s ); } do_filewrite( file, contents, mode ) { file = "scriptdata/" + file; - FileWrite( file, contents, mode ); + filewrite( file, contents, mode ); } do_fileread( file ) { file = "scriptdata/" + file; - return FileRead( file ); + return fileread( file ); } do_fileexists( file ) @@ -36,25 +36,25 @@ do_fileexists( file ) do_botaction( action ) { - self BotAction( action ); + self botaction( action ); } do_botstop() { - self BotStop(); + self botstop(); } do_botmovement( forward, right ) { - self BotMovement( forward, right ); + self botmovement( forward, right ); } do_botmeleeparams( yaw, dist ) { - // self BotMeleeParams( yaw, dist ); + // self botmeleeparams( yaw, dist ); } do_isbot() { - return self isBot(); + return self isbot(); }