diff --git a/maps/mp/bots/_bot.gsc b/maps/mp/bots/_bot.gsc index 8e83110..32b87ea 100644 --- a/maps/mp/bots/_bot.gsc +++ b/maps/mp/bots/_bot.gsc @@ -8,170 +8,252 @@ */ 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["rpd"] = true; - level.bots_fullautoguns["m60e4"] = true; - level.bots_fullautoguns["saw"] = true; - level.bots_fullautoguns["ak74u"] = true; - level.bots_fullautoguns["mp5"] = true; - level.bots_fullautoguns["p90"] = true; - level.bots_fullautoguns["skorpion"] = true; - level.bots_fullautoguns["uzi"] = true; - level.bots_fullautoguns["g36c"] = true; - level.bots_fullautoguns["m4"] = true; - level.bots_fullautoguns["ak47"] = true; - level.bots_fullautoguns["mp44"] = true; + level.bots_fullautoguns[ "rpd" ] = true; + level.bots_fullautoguns[ "m60e4" ] = true; + level.bots_fullautoguns[ "saw" ] = true; + level.bots_fullautoguns[ "ak74u" ] = true; + level.bots_fullautoguns[ "mp5" ] = true; + level.bots_fullautoguns[ "p90" ] = true; + level.bots_fullautoguns[ "skorpion" ] = true; + level.bots_fullautoguns[ "uzi" ] = true; + level.bots_fullautoguns[ "g36c" ] = true; + level.bots_fullautoguns[ "m4" ] = true; + level.bots_fullautoguns[ "ak47" ] = true; + level.bots_fullautoguns[ "mp44" ] = true; level thread fixGamemodes(); level thread onUAVAlliesUpdate(); @@ -192,18 +274,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() ); } } @@ -218,7 +304,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 ); } /* @@ -232,15 +318,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 ); } /* @@ -249,11 +335,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; } /* @@ -267,22 +353,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; + } } } @@ -293,15 +383,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(); @@ -338,12 +430,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; } /* @@ -363,21 +457,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(); } @@ -386,7 +484,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 ); @@ -405,34 +503,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 ); } @@ -460,15 +572,19 @@ add_bot() bot = undefined; - if ( isDefined( name ) && name.size >= 3 ) + if ( isdefined( name ) && name.size >= 3 ) + { bot = addtestclient( name ); + } else + { bot = addtestclient(); + } if ( isdefined( bot ) ) { - bot.pers["isBot"] = true; - bot.pers["isBotWarfare"] = true; + bot.pers[ "isBot" ] = true; + bot.pers[ "isBotWarfare" ] = true; bot thread added(); } } @@ -478,11 +594,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; @@ -495,43 +611,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; + } } } } @@ -541,27 +665,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 ) ); } } @@ -583,8 +711,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; @@ -595,31 +723,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; @@ -627,7 +765,7 @@ teamBots_loop() if ( toTeam != "custom" ) { - if ( getDvarInt( "bots_team_force" ) ) + if ( getdvarint( "bots_team_force" ) ) { if ( toTeam == "autoassign" ) { @@ -636,7 +774,9 @@ teamBots_loop() toTeam = "axis"; if ( axis > allies ) + { toTeam = "allies"; + } } } @@ -646,23 +786,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; } @@ -675,19 +827,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; } } @@ -695,12 +851,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; } } @@ -726,14 +882,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-- ) { @@ -742,12 +900,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; @@ -757,21 +917,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(); } @@ -784,18 +950,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; @@ -803,11 +977,17 @@ addBots_loop() if ( players == 0 ) { if ( bots < fillAmount ) + { result = fillAmount - 1; + } else if ( bots > fillAmount ) + { result = fillAmount + 1; + } else + { result = fillAmount; + } } bots = result; @@ -816,19 +996,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() ); + } } } @@ -860,13 +1048,17 @@ onGrenadeFire() { self waittill ( "grenade_fire", grenade, weaponName ); - if ( !isDefined( grenade ) ) + if ( !isdefined( grenade ) ) + { continue; + } grenade.name = weaponName; if ( weaponName == "smoke_grenade_mp" ) + { grenade thread AddToSmokeList(); + } } } @@ -876,13 +1068,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 ); } /* @@ -890,9 +1082,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; } @@ -900,7 +1092,7 @@ thinkSmoke() self.state = "smoking"; wait 11.5; - level.bots_smokeList ListRemove( self ); + level.bots_smokelist ListRemove( self ); } /* @@ -910,25 +1102,31 @@ chopperWatch() { for ( ;; ) { - while ( !isDefined( level.chopper ) ) + while ( !isdefined( level.chopper ) ) + { wait 0.05; + } chopper = level.chopper; - if ( level.teamBased && getDvarInt( "doubleHeli" ) ) + if ( level.teambased && getdvarint( "doubleHeli" ) ) { - chopper = level.chopper["allies"]; + chopper = level.chopper[ "allies" ]; - if ( !isDefined( chopper ) ) - chopper = level.chopper["axis"]; + if ( !isdefined( chopper ) ) + { + chopper = level.chopper[ "axis" ]; + } } level.bot_chopper = true; chopper watchChopper(); level.bot_chopper = false; - while ( isDefined( level.chopper ) ) + while ( isdefined( level.chopper ) ) + { wait 0.05; + } } } @@ -979,10 +1177,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 ) { @@ -990,16 +1190,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 337789b..6f50939 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 ); } } @@ -362,7 +372,7 @@ doQuickMessage() self endon( "disconnect" ); self endon( "death" ); - if ( !isDefined( self.talking ) || !self.talking ) + if ( !isdefined( self.talking ) || !self.talking ) { self.talking = true; soundalias = ""; @@ -400,15 +410,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; @@ -432,26 +444,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 = getWinningTeam(); - if ( self.pers["team"] == winningteam ) + if ( self.pers[ "team" ] == winningteam ) { switch ( randomint( 21 ) ) { @@ -484,7 +496,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: @@ -525,25 +537,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; @@ -579,7 +607,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: @@ -620,25 +648,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; @@ -708,37 +752,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; @@ -822,7 +890,7 @@ bot_chat_streak( streakCount ) if ( streakCount == 7 ) { - if ( isDefined( self.pers["hardPointItem"] ) && self.pers["hardPointItem"] == "helicopter_mp" ) + if ( isdefined( self.pers[ "hardPointItem" ] ) && self.pers[ "hardPointItem" ] == "helicopter_mp" ) { switch ( randomint( 1 ) ) { @@ -845,8 +913,10 @@ bot_chat_killed_watch( victim ) { self endon( "disconnect" ); - if ( !isDefined( victim ) || !isDefined( victim.name ) ) + if ( !isdefined( victim ) || !isdefined( victim.name ) ) + { return; + } message = ""; @@ -1013,7 +1083,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; @@ -1033,8 +1103,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 = ""; @@ -1058,14 +1130,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: @@ -1157,19 +1233,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: @@ -1285,7 +1361,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; @@ -1332,7 +1408,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!!" ); @@ -1346,7 +1422,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!!!" ); @@ -1368,7 +1444,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++ ) @@ -1426,7 +1502,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" ); @@ -1436,7 +1512,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" ); @@ -1457,7 +1533,7 @@ bot_chat_killstreak_watch( state, location, directionYaw, d, e, f, g ) switch ( state ) { case "call": - if ( self.pers["hardPointItem"] == "helicopter_mp" ) + if ( self.pers[ "hardPointItem" ] == "helicopter_mp" ) { self BotDoChat( 20, "wewt! i got the choppa!!" ); } @@ -1533,8 +1609,10 @@ bot_chat_attack_vehicle_watch( state, vehicle, c, d, e, f, g ) case 13: weap = "rpg_mp"; - if ( !self GetAmmoCount( "weap" ) ) - weap = self getCurrentWeapon(); + if ( !self getammocount( "weap" ) ) + { + weap = self getcurrentweapon(); + } self BotDoChat( 10, "Im going to takedown your ks with my " + getBaseWeaponName( weap ) ); break; @@ -1636,7 +1714,7 @@ bot_chat_follow_watch( state, player, time, d, e, f, g ) { self endon( "disconnect" ); - if ( !isDefined( player ) ) + if ( !isdefined( player ) ) { return; } @@ -1687,7 +1765,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 ) ); @@ -1697,7 +1775,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 ) ); @@ -1718,7 +1796,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 ) ); @@ -1728,7 +1806,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 a17a11e..d0da081 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(); @@ -89,9 +89,9 @@ doUAVUpdate() self endon( "disconnect" ); self endon( "radar_timer_kill" ); - self.bot_radar = true;//wtf happened to hasRadar? its bugging out, something other than script is touching it + self.bot_radar = true; // wtf happened to hasRadar? its bugging out, something other than script is touching it - 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(); } @@ -179,7 +179,7 @@ bot_skip_killcam() { wait 1; - if ( isDefined( self.killcam ) ) + if ( isdefined( self.killcam ) ) { self notify( "end_killcam" ); } @@ -216,7 +216,7 @@ spawned() self endon( "disconnect" ); self endon( "death" ); - wait self.pers["bots"]["skill"]["spawn_time"]; + wait self.pers[ "bots" ][ "skill" ][ "spawn_time" ]; self thread grenade_danger(); self thread check_reload(); @@ -246,13 +246,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 ); } @@ -270,11 +274,15 @@ watchGrenadeFire() { self waittill( "grenade_fire", nade, weapname ); - if ( !isDefined( nade ) ) + if ( !isdefined( nade ) ) + { continue; + } if ( weapname == "c4_mp" ) + { self thread watchC4Thrown( nade ); + } } } @@ -290,37 +298,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() != "c4_mp" ) + if ( self getcurrentweapon() != "c4_mp" ) + { self notify( "alt_detonate" ); + } else + { self thread pressFire(); + } } /* @@ -328,59 +350,59 @@ watchC4Thrown( c4 ) */ 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() ) { - 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 ) { @@ -391,15 +413,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 ] ) ); self BotBuiltinBotMoveTo( move_To ); // cod4x } @@ -411,8 +437,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 ) { @@ -429,9 +455,11 @@ doBotMovement() SetWeaponDistMulti( weap ) { if ( weap == "none" ) + { return 1; + } - switch ( weaponClass( weap ) ) + switch ( weaponclass( weap ) ) { case "rifle": return 0.9; @@ -453,10 +481,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; } @@ -474,9 +506,11 @@ watchHoldBreath() wait 1; if ( self.bot.isfrozen ) + { continue; + } - self holdbreath( self playerADS() > 0 ); + self holdbreath( self playerads() > 0 ); } } @@ -491,12 +525,16 @@ onLastStand() while ( true ) { while ( !self inLastStand() ) + { wait 0.05; + } self notify( "kill_goal" ); while ( self inLastStand() ) + { wait 0.05; + } } } @@ -517,10 +555,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 ); @@ -542,7 +582,7 @@ sprint_watch() self.bot.issprinting = true; self waittill( "sprint_end" ); self.bot.issprinting = false; - self.bot.sprintendtime = getTime(); + self.bot.sprintendtime = gettime(); } } @@ -558,15 +598,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; @@ -596,18 +642,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" ) { @@ -616,39 +670,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(); @@ -700,17 +776,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 ); } @@ -729,22 +813,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(); @@ -777,22 +869,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(); + } } /* @@ -803,15 +903,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 = random( bones ); } @@ -822,7 +924,7 @@ updateBones() */ createTargetObj( ent, theTime ) { - obj = spawnStruct(); + obj = spawnstruct(); obj.entity = ent; obj.last_seen_pos = ( 0, 0, 0 ); obj.dist = 0; @@ -830,7 +932,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; @@ -845,25 +947,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; } @@ -873,11 +983,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; @@ -886,9 +996,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; @@ -915,17 +1029,17 @@ 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" ]; // reduce fov if ads'ing if ( adsAmount > 0 ) @@ -933,7 +1047,7 @@ target_loop() myFov *= 1 - adsFovFact * adsAmount; } - if ( hasTarget && !isDefined( self.bot.target.entity ) ) + if ( hasTarget && !isdefined( self.bot.target.entity ) ) { self.bot.target = undefined; hasTarget = false; @@ -947,27 +1061,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 ); @@ -975,63 +1093,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; @@ -1044,7 +1170,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 ); @@ -1052,23 +1178,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; @@ -1079,36 +1211,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 ) { @@ -1129,8 +1271,10 @@ target() { wait 0.05; - if ( self maps\mp\_flashgrenades::isFlashbanged() ) + if ( self maps\mp\_flashgrenades::isflashbanged() ) + { continue; + } self target_loop(); } @@ -1148,14 +1292,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(); } @@ -1172,58 +1322,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; @@ -1246,7 +1424,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; } @@ -1265,16 +1443,18 @@ clear_bot_after_target() */ aim_loop() { - aimspeed = self.pers["bots"]["skill"]["aim_time"]; + aimspeed = self.pers[ "bots" ][ "skill" ][ "aim_time" ]; if ( self IsStunned() || 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 ) @@ -1282,10 +1462,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 ) { @@ -1293,56 +1473,72 @@ aim_loop() last_pos = self.bot.target.last_seen_pos; target = self.bot.target.entity; conedot = 0; - isplay = isPlayer( self.bot.target.entity ); + isplay = isplayer( 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" ) ) { if ( nade == "frag_grenade_mp" ) + { self thread frag( 2.5 ); + } else + { self thread smoke( 0.5 ); + } self notify( "kill_goal" ); } @@ -1353,8 +1549,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(); + } } } @@ -1367,12 +1565,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; @@ -1380,12 +1582,18 @@ 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 { @@ -1397,12 +1605,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 && !self.bot.isknifingafter && conedot > 0.9 && dist < level.bots_maxKnifeDistance && trace_time > reaction_time && getDvarInt( "bots_play_knife" ) ) + if ( isplay && !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 ); @@ -1410,7 +1622,9 @@ aim_loop() } if ( !self canFire( curweap ) || !self isInRange( dist, curweap ) ) + { return; + } canADS = ( self canAds( dist, curweap ) && conedot > 0.75 ); @@ -1420,23 +1634,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; @@ -1444,20 +1668,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 ); @@ -1466,7 +1696,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 ); @@ -1476,29 +1708,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 ); } @@ -1507,12 +1747,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 ); + } } } @@ -1528,8 +1774,10 @@ aim() { wait 0.05; - if ( level.inPrematchPeriod || level.gameEnded || self.bot.isfrozen || self maps\mp\_flashgrenades::isFlashbanged() ) + if ( level.inprematchperiod || level.gameended || self.bot.isfrozen || self maps\mp\_flashgrenades::isflashbanged() ) + { continue; + } self aim_loop(); } @@ -1540,7 +1788,7 @@ aim() */ botFire() { - self.bot.last_fire_time = getTime(); + self.bot.last_fire_time = gettime(); if ( self.bot.is_cur_full_auto ) { @@ -1549,7 +1797,9 @@ botFire() } if ( self.bot.semi_time ) + { return; + } self thread pressFire(); self thread doSemiTime(); @@ -1566,7 +1816,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; } @@ -1576,9 +1826,11 @@ doSemiTime() canFire( curweap ) { if ( curweap == "none" ) + { return false; + } - return self GetWeaponammoclip( curweap ); + return self getweaponammoclip( curweap ); } /* @@ -1587,26 +1839,38 @@ canFire( curweap ) canAds( dist, curweap ) { if ( curweap == "none" ) + { return false; + } if ( curweap == "c4_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; } @@ -1617,12 +1881,16 @@ 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; + } return true; } @@ -1633,7 +1901,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; @@ -1657,24 +1925,28 @@ 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 ( self.bot.target.entity.classname == "script_vehicle" || 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; } @@ -1682,49 +1954,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; @@ -1734,7 +2008,9 @@ walk_loop() else { if ( hasTarget ) + { goal = self.bot.target.last_seen_pos; + } self notify( "new_goal_internal" ); } @@ -1759,17 +2035,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 maps\mp\_flashgrenades::isFlashbanged() ) + if ( self maps\mp\_flashgrenades::isflashbanged() ) { 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; } @@ -1785,21 +2065,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; @@ -1817,8 +2099,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" ); } @@ -1831,7 +2115,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 ); + } } /* @@ -1841,13 +2127,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; } @@ -1859,10 +2149,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; } @@ -1893,9 +2185,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" ); + } } /* @@ -1905,12 +2201,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 watchOnGoal( goal, dist ); @@ -1918,25 +2216,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; @@ -1949,7 +2251,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; @@ -1960,8 +2262,10 @@ doWalk( goal, dist, isScriptGoal ) wait 1; - if ( DistanceSquared( self.origin, goal ) > dist ) + if ( distancesquared( self.origin, goal ) > dist ) + { self notify( "bad_path_internal" ); + } } /* @@ -1969,8 +2273,10 @@ doWalk( goal, dist, isScriptGoal ) */ movetowards( goal ) { - if ( !isDefined( goal ) ) + if ( !isdefined( goal ) ) + { return; + } self.bot.towards_goal = goal; @@ -1980,11 +2286,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 ); @@ -1992,7 +2302,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; @@ -2019,15 +2329,17 @@ movetowards( goal ) } 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; } @@ -2037,18 +2349,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; @@ -2076,32 +2398,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" ]; } /* @@ -2110,9 +2432,13 @@ getRandomLargestStafe( dist ) holdbreath( what ) { if ( what ) + { self BotBuiltinBotAction( "+holdbreath" ); + } else + { self BotBuiltinBotAction( "-holdbreath" ); + } } /* @@ -2139,14 +2465,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 ) ) + if ( !isdefined( target ) || !isplayer( target ) ) { self.bot.knifing_target = undefined; self BotBuiltinBotMeleeParams( 0, 0 ); @@ -2155,7 +2481,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 ); @@ -2164,8 +2490,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; @@ -2224,15 +2550,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; @@ -2251,15 +2581,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; @@ -2278,13 +2612,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" ); } @@ -2297,9 +2635,13 @@ fire( what ) self notify( "bot_fire" ); if ( what ) + { self BotBuiltinBotAction( "+fire" ); + } else + { self BotBuiltinBotAction( "-fire" ); + } } /* @@ -2312,13 +2654,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" ); } @@ -2331,9 +2677,13 @@ ads( what ) self notify( "bot_ads" ); if ( what ) + { self BotBuiltinBotAction( "+ads" ); + } else + { self BotBuiltinBotAction( "-ads" ); + } } /* @@ -2346,13 +2696,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" ); } @@ -2367,7 +2721,7 @@ jump() self notify( "bot_jump" ); self endon( "bot_jump" ); - if ( self getStance() != "stand" ) + if ( self getstance() != "stand" ) { self stand(); wait 1; @@ -2410,7 +2764,7 @@ prone() */ botSetMoveTo( where ) { - self.bot.moveTo = where; + self.bot.moveto = where; } /* @@ -2425,48 +2779,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 97375f0..4c60079 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(); @@ -40,7 +40,7 @@ connected() self thread onKillcam(); wait 0.1; - self.challengeData = []; + self.challengedata = []; } /* @@ -69,7 +69,7 @@ doKillcamStuff() self BotNotifyBotEvent( "killcam", "start" ); - wait 0.5 + randomInt( 3 ); + wait 0.5 + randomint( 3 ); wait 0.1; @@ -83,35 +83,51 @@ doKillcamStuff() */ 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; } /* @@ -119,35 +135,55 @@ 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, "_silencer_" ) ) + if ( !issubstr( sWeapon, "_silencer_" ) ) + { self bot_cry_for_help( eAttacker ); + } self SetAttacker( eAttacker ); } @@ -157,14 +193,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; } @@ -173,20 +209,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; } @@ -201,19 +241,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 ); - if ( RandomInt( 100 ) > 70 ) + if ( randomint( 100 ) > 70 ) { break; } @@ -233,7 +273,7 @@ onDeath() { self waittill( "death" ); - self.wantSafeSpawn = true; + self.wantsafespawn = true; } } @@ -243,13 +283,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"; @@ -265,13 +305,17 @@ chooseRandomClass() case 3: if ( rank >= 2 ) + { class = "demolitions_mp"; + } break; case 4: if ( rank >= 3 ) + { class = "sniper_mp"; + } break; } @@ -279,7 +323,7 @@ chooseRandomClass() } else { - class = "custom" + ( randomInt( 5 ) + 1 ); + class = "custom" + ( randomint( 5 ) + 1 ); } return class; @@ -294,18 +338,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; + } } } @@ -318,16 +368,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; + } } } @@ -340,232 +396,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; } } @@ -579,53 +635,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; } } @@ -636,19 +692,19 @@ 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[ 0 ] = "weapon_lmg"; + primaryGroups[ 1 ] = "weapon_smg"; + primaryGroups[ 2 ] = "weapon_shotgun"; + primaryGroups[ 3 ] = "weapon_sniper"; + primaryGroups[ 4 ] = "weapon_assault"; 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++ ) @@ -659,7 +715,9 @@ set_class( rankxp ) perk2 = get_random_perk( "perk2", rank ); if ( perk2 != "specialty_twoprimaries" ) + { secondary = get_random_weapon( secondaryGroups, rank ); + } else { secondary = ""; @@ -669,7 +727,9 @@ set_class( rankxp ) secondary = get_random_weapon( primaryGroups, rank ); if ( primary == secondary ) + { secondary = ""; + } } } @@ -678,17 +738,17 @@ set_class( rankxp ) perk3 = get_random_perk( "perk3", rank ); gren = get_random_grenade( perk1 ); - camo = randomInt( 8 ); + camo = randomint( 8 ); - self setStat ( 200 + ( i * 10 ) + 1, level.weaponReferenceToIndex[primary] ); - self setStat ( 200 + ( i * 10 ) + 2, level.weaponAttachmentReferenceToIndex[att1] ); - self setStat ( 200 + ( i * 10 ) + 3, level.weaponReferenceToIndex[secondary] ); - 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 ) + 8, level.weaponReferenceToIndex[gren] ); - self setStat ( 200 + ( i * 10 ) + 9, camo ); + self setstat ( 200 + ( i * 10 ) + 1, level.weaponreferencetoindex[ primary ] ); + self setstat ( 200 + ( i * 10 ) + 2, level.weaponattachmentreferencetoindex[ att1 ] ); + self setstat ( 200 + ( i * 10 ) + 3, level.weaponreferencetoindex[ secondary ] ); + 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 ) + 8, level.weaponreferencetoindex[ gren ] ); + self setstat ( 200 + ( i * 10 ) + 9, camo ); } } @@ -697,20 +757,22 @@ 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" ); - op = GetDvarInt( "bots_loadout_allow_op" ); + reasonable = getdvarint( "bots_loadout_reasonable" ); + op = getdvarint( "bots_loadout_allow_op" ); - 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 ) { @@ -718,7 +780,9 @@ get_random_attachment( weapon, rank ) { case "acog": if ( weapon != "m40a3" ) + { continue; + } break; } @@ -727,7 +791,9 @@ get_random_attachment( weapon, rank ) if ( !op ) { if ( att == "gl" ) + { continue; + } } return att; @@ -739,28 +805,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 ) { @@ -787,7 +861,9 @@ get_random_perk( perkslot, rank, att1, att2 ) } if ( !isItemUnlocked( ref, rank ) ) + { continue; + } return ref; } @@ -799,15 +875,15 @@ get_random_perk( perkslot, rank, att1, att2 ) get_random_grenade( perk1 ) { possibles = []; - possibles[0] = "flash_grenade"; - possibles[1] = "smoke_grenade"; - possibles[2] = "concussion_grenade"; + possibles[ 0 ] = "flash_grenade"; + possibles[ 1 ] = "smoke_grenade"; + possibles[ 2 ] = "concussion_grenade"; - reasonable = GetDvarInt( "bots_loadout_reasonable" ); + reasonable = getdvarint( "bots_loadout_reasonable" ); for ( ;; ) { - possible = possibles[randomInt( possibles.size )]; + possible = possibles[ randomint( possibles.size ) ]; if ( reasonable ) { @@ -819,7 +895,9 @@ get_random_grenade( perk1 ) } if ( perk1 == "specialty_specialgrenade" && possible == "smoke_grenade" ) + { continue; + } return possible; } @@ -830,31 +908,37 @@ get_random_grenade( perk1 ) */ get_random_weapon( groups, rank ) { - 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_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 ) { @@ -876,11 +960,15 @@ get_random_weapon( groups, rank ) if ( !op ) { if ( ref == "rpg" ) + { continue; + } } if ( !isItemUnlocked( ref, rank ) ) + { continue; + } return ref; } @@ -891,28 +979,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 { @@ -928,7 +1020,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 ) { @@ -938,13 +1030,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() ) { @@ -957,14 +1053,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; } @@ -973,18 +1071,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 ); } /* @@ -998,15 +1096,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(); + } } } @@ -1035,18 +1137,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_equipment_kill_think(); @@ -1059,14 +1165,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(); @@ -1075,7 +1181,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(); @@ -1098,18 +1204,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--; + } } /* @@ -1127,13 +1239,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; @@ -1156,11 +1268,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" ); @@ -1181,11 +1297,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" ); @@ -1208,7 +1328,9 @@ bot_defend_site( site ) wait 0.5; if ( !site isInUse() ) + { break; + } } self notify( "bad_path" ); @@ -1230,17 +1352,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" ); + } } /* @@ -1259,17 +1389,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" ); + } } /* @@ -1277,8 +1415,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; + } } /* @@ -1310,7 +1450,7 @@ fire_c4() for ( ;; ) { - self thread BotPressAds( 0.05 ); + self thread BotPressADS( 0.05 ); wait 0.1; } } @@ -1324,17 +1464,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 ); } /* @@ -1346,13 +1490,19 @@ botThrowGrenade( nade, time ) self endon( "death" ); level endon( "game_ended" ); - if ( !self GetAmmoCount( nade ) ) + if ( !self getammocount( nade ) ) + { return false; + } if ( nade != "frag_grenade_mp" ) + { self thread BotPressSmoke( time ); + } else + { self thread BotPressFrag( time ); + } ret = self waittill_any_timeout( 5, "grenade_fire" ); @@ -1367,8 +1517,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; } @@ -1396,27 +1550,33 @@ bot_think_camp_loop() { campSpot = getWaypointForIndex( random( 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 ); } @@ -1434,10 +1594,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(); } @@ -1472,8 +1636,10 @@ killCampAfterEntGone( ent ) { wait 0.05; - if ( !isDefined( ent ) ) + if ( !isdefined( ent ) ) + { break; + } } self ClearScriptGoal(); @@ -1491,7 +1657,7 @@ CampAtSpot( origin, anglePos ) self SetScriptGoal( origin, 64 ); - if ( isDefined( anglePos ) ) + if ( isdefined( anglePos ) ) { self SetScriptAimPos( anglePos ); } @@ -1508,36 +1674,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 = random( follows ); - if ( !isDefined( toFollow ) ) + if ( !isdefined( toFollow ) ) + { return; + } - time = randomIntRange( 10, 20 ); + time = randomintrange( 10, 20 ); self BotNotifyBotEvent( "follow", "start", toFollow, time ); @@ -1557,16 +1735,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(); } @@ -1585,8 +1769,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(); @@ -1622,14 +1808,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 ); @@ -1650,40 +1840,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() ) + { 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; @@ -1691,23 +1899,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 ); } @@ -1720,23 +1934,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 ); @@ -1764,8 +1984,8 @@ bot_use_tube_think() self endon( "death" ); level endon( "game_ended" ); - data = spawnStruct(); - data.doFastContinue = false; + data = spawnstruct(); + data.dofastcontinue = false; for ( ;; ) { @@ -1778,51 +1998,75 @@ 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( "claymore_mp" ) ) + if ( self getammocount( "claymore_mp" ) ) + { nade = "claymore_mp"; + } - if ( self GetAmmoCount( "c4_mp" ) ) + if ( self getammocount( "c4_mp" ) ) + { nade = "c4_mp"; + } - if ( !isDefined( nade ) ) + if ( !isdefined( nade ) ) + { return; + } 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; + } - curWeap = self GetCurrentWeapon(); + curWeap = self getcurrentweapon(); if ( curWeap == "none" || !isWeaponDroppable( curWeap ) ) - curWeap = self.lastDroppableWeapon; + { + curWeap = self.lastdroppableweapon; + } loc = undefined; @@ -1830,13 +2074,15 @@ bot_use_equipment_think_loop( data ) { clayWp = getWaypointForIndex( random( 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 { @@ -1847,23 +2093,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 ); @@ -1874,9 +2126,13 @@ bot_use_equipment_think_loop( data ) if ( self changeToWeapon( nade ) ) { if ( nade != "c4_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" ); @@ -1896,8 +2152,8 @@ bot_use_equipment_think() self endon( "death" ); level endon( "game_ended" ); - data = spawnStruct(); - data.doFastContinue = false; + data = spawnstruct(); + data.dofastcontinue = false; for ( ;; ) { @@ -1910,40 +2166,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() ) + { return; + } if ( self BotIsFrozen() ) + { return; + } if ( self IsBotFragging() || self IsBotSmoking() ) + { return; + } if ( self isDefusing() || self isPlanting() ) + { return; + } if ( self inLastStand() ) + { return; + } loc = undefined; @@ -1951,23 +2225,29 @@ bot_use_grenade_think_loop( data ) { nadeWp = getWaypointForIndex( random( self waypointsNear( getWaypointsOfType( "grenade" ), 1024 ) ) ); - myEye = self GetEye(); + myEye = self geteye(); - if ( !isDefined( nadeWp ) || self HasScriptGoal() || self.bot_lock_goal ) + if ( !isdefined( nadeWp ) || self HasScriptGoal() || self.bot_lock_goal ) { - traceForward = BulletTrace( myEye, myEye + AnglesToForward( self GetPlayerAngles() ) * 900, false, self ); + traceForward = bullettrace( myEye, myEye + anglestoforward( self getplayerangles() ) * 900, false, self ); - loc = traceForward["position"]; - 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 ); } @@ -1980,23 +2260,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 ); @@ -2007,7 +2293,9 @@ bot_use_grenade_think_loop( data ) time = 0.5; if ( nade == "frag_grenade_mp" ) + { time = 2; + } self botThrowGrenade( nade, time ); @@ -2024,8 +2312,8 @@ bot_use_grenade_think() self endon( "death" ); level endon( "game_ended" ); - data = spawnStruct(); - data.doFastContinue = false; + data = spawnstruct(); + data.dofastcontinue = false; for ( ;; ) { @@ -2038,13 +2326,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 ); @@ -2052,7 +2344,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 ); } @@ -2070,10 +2364,14 @@ follow_target() wait 1; if ( self HasScriptGoal() || self.bot_lock_goal ) + { continue; + } if ( !self HasThreat() ) + { continue; + } self follow_target_loop(); } @@ -2084,10 +2382,12 @@ follow_target() */ bot_listen_to_steps_loop() { - dist = level.bots_listenDist; + dist = level.bots_listendist; - if ( self hasPerk( "specialty_parabolic" ) ) + if ( self hasperk( "specialty_parabolic" ) ) + { dist *= 1.4; + } dist *= dist; @@ -2095,54 +2395,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 ); + 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 ); } @@ -2159,8 +2481,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(); } @@ -2174,40 +2498,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 ); } } @@ -2219,57 +2553,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; } @@ -2292,25 +2644,31 @@ 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(); + hasTarget = self HasThreat(); + curWeap = self getcurrentweapon(); if ( hasTarget ) { threat = self getThreat(); - if ( threat.classname == "script_vehicle" && self getAmmoCount( "rpg_mp" ) ) + if ( threat.classname == "script_vehicle" && self getammocount( "rpg_mp" ) ) { if ( curWeap != "rpg_mp" ) - self thread ChangeToWeapon( "rpg_mp" ); + { + self thread changeToWeapon( "rpg_mp" ); + } return; } @@ -2322,21 +2680,29 @@ bot_weapon_think_loop( data ) { 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 ) ) + if ( curWeap != "none" && self getammocount( curWeap ) ) { - 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(); @@ -2344,29 +2710,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 == "c4_mp" || weapon == "none" || weapon == "claymore_mp" || weapon == "" ) + { continue; + } weap = weapon; break; } if ( weap == "" ) + { return; + } - self thread ChangeToWeapon( weap ); + self thread changeToWeapon( weap ); } /* @@ -2378,7 +2754,7 @@ bot_weapon_think() self endon( "disconnect" ); level endon( "game_ended" ); - data = spawnStruct(); + data = spawnstruct(); data.first = true; for ( ;; ) @@ -2394,23 +2770,31 @@ bot_watch_think_mw2_loop() { tube = self getValidTube(); - if ( !isDefined( tube ) ) + if ( !isdefined( tube ) ) { - if ( self GetAmmoCount( "rpg_mp" ) ) + if ( self getammocount( "rpg_mp" ) ) + { tube = "rpg_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 ); } /* @@ -2424,19 +2808,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() ) + { continue; + } self bot_watch_think_mw2_loop(); } @@ -2447,78 +2839,110 @@ 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 "helicopter_mp": chopper = level.chopper; - if ( isDefined( chopper ) && level.teamBased && getDvarInt( "doubleHeli" ) ) - chopper = level.chopper[self.team]; + if ( isdefined( chopper ) && level.teambased && getdvarint( "doubleHeli" ) ) + { + chopper = level.chopper[ self.team ]; + } - if ( isDefined( chopper ) ) + if ( isdefined( chopper ) ) + { return; + } - if ( isDefined( level.mannedchopper ) ) + if ( isdefined( level.mannedchopper ) ) + { return; + } break; case "airstrike_mp": - if ( isDefined( level.airstrikeInProgress ) ) + if ( isdefined( level.airstrikeinprogress ) ) + { 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 = random( 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; @@ -2526,20 +2950,22 @@ bot_killstreak_think_loop() return; } - isAirstrikePos = isDefined( targetPos ); + isAirstrikePos = isdefined( targetPos ); - if ( self.pers["hardPointItem"] == "airstrike_mp" && !isAirstrikePos ) + if ( self.pers[ "hardPointItem" ] == "airstrike_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.airstrikeInProgress ) ) + if ( isAirstrikePos && !isdefined( level.airstrikeinprogress ) ) { self BotFreezeControls( true ); @@ -2564,19 +2990,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() ) + { continue; + } - if ( self isDefusing() || self isPlanting() || self InLastStand() ) + if ( self isDefusing() || self isPlanting() || self inLastStand() ) + { continue; + } self bot_killstreak_think_loop(); } @@ -2587,43 +3021,57 @@ 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(), "_silencer_" ) && player.bots_firing ) || ( self.bot_radar && !player hasPerk( "specialty_gpsjammer" ) ) ) + if ( ( !issubstr( player getcurrentweapon(), "_silencer_" ) && 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 ); } @@ -2634,7 +3082,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 ); } @@ -2656,11 +3106,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(); } @@ -2673,25 +3127,35 @@ bot_target_vehicle_loop() { chopper = level.chopper; - if ( isDefined( chopper ) && level.teamBased && getDvarInt( "doubleHeli" ) ) + if ( isdefined( chopper ) && level.teambased && getdvarint( "doubleHeli" ) ) { - chopper = level.chopper[ level.otherTeam[self.team] ]; + chopper = level.chopper[ level.otherteam[ self.team ] ]; } if ( !isdefined( chopper ) ) + { return; + } - if ( !isDefined( level.bot_chopper ) || !level.bot_chopper ) //must be crashing or leaving + if ( !isdefined( level.bot_chopper ) || !level.bot_chopper ) // must be crashing or leaving + { return; + } - if ( isDefined( chopper.owner ) && chopper.owner == self ) + if ( isdefined( chopper.owner ) && chopper.owner == self ) + { return; + } - if ( chopper.team == self.team && level.teamBased ) + if ( chopper.team == self.team && level.teambased ) + { return; + } - if ( !bulletTracePassed( self getEyePos(), chopper.origin + ( 0, 0, -5 ), false, chopper ) ) + if ( !bullettracepassed( self getEyePos(), chopper.origin + ( 0, 0, -5 ), false, chopper ) ) + { return; + } self BotNotifyBotEvent( "attack_vehicle", "start", chopper ); @@ -2713,16 +3177,22 @@ bot_target_vehicle() for ( ;; ) { - wait( RandomIntRange( 2, 4 ) ); + wait( randomintrange( 2, 4 ) ); - if ( self.pers["bots"]["skill"]["base"] <= 1 ) + if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 1 ) + { continue; + } if ( self HasScriptEnemy() ) + { continue; + } - if ( !self getAmmoCount( "rpg_mp" ) && self BotGetRandom() < 90 ) + if ( !self getammocount( "rpg_mp" ) && self BotGetRandom() < 90 ) + { continue; + } self bot_target_vehicle_loop(); } @@ -2737,14 +3207,14 @@ bot_attack_vehicle( chopper ) chopper endon( "crashing" ); chopper endon( "leaving" ); - wait_time = RandomIntRange( 7, 10 ); + wait_time = randomintrange( 7, 10 ); for ( i = 0; i < wait_time; i++ ) { self notify( "bot_force_check_switch" ); wait( 1 ); - if ( !IsDefined( chopper ) ) + if ( !isdefined( chopper ) ) { return; } @@ -2756,46 +3226,54 @@ bot_attack_vehicle( chopper ) */ 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 != "c4_mp" && item.name != "claymore_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 ); @@ -2817,13 +3295,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(); } @@ -2836,13 +3318,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; } @@ -2854,12 +3336,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" ); + } } /* @@ -2872,23 +3360,33 @@ BotUseRandomEquipment() equ = undefined; - if ( self GetAmmoCount( "claymore_mp" ) ) + if ( self getammocount( "claymore_mp" ) ) + { equ = "claymore_mp"; + } - if ( self GetAmmoCount( "c4_mp" ) ) + if ( self getammocount( "c4_mp" ) ) + { equ = "c4_mp"; + } - if ( !isDefined( equ ) ) + if ( !isdefined( equ ) ) + { return; + } - curWeap = self GetCurrentWeapon(); + curWeap = self getcurrentweapon(); if ( self changeToWeapon( equ ) ) { if ( equ != "c4_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" ); @@ -2906,41 +3404,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; @@ -2957,22 +3471,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; @@ -2985,32 +3507,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 ); @@ -3019,7 +3551,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 ); } @@ -3033,17 +3567,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(); } @@ -3064,8 +3604,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" ); @@ -3081,18 +3623,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 ); @@ -3102,7 +3652,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 ); } @@ -3116,17 +3668,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(); } @@ -3147,11 +3705,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" ); @@ -3163,31 +3725,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; + } } } @@ -3196,18 +3766,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 ) @@ -3215,20 +3789,24 @@ bot_dom_cap_think_loop() flag = random( 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" ) { @@ -3240,13 +3818,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 ); } @@ -3267,7 +3847,9 @@ bot_dom_cap_think() self endon( "disconnect" ); if ( level.gametype != "dom" ) + { return; + } for ( ;; ) { @@ -3278,8 +3860,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(); } @@ -3288,7 +3872,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" ); @@ -3300,20 +3884,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" ); + } } /* @@ -3322,32 +3916,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" ); @@ -3358,7 +3958,9 @@ bot_hq_loop() event = self waittill_any_return( "goal", "bad_path", "new_goal" ); if ( event != "new_goal" ) + { self ClearScriptGoal(); + } if ( event != "goal" ) { @@ -3366,7 +3968,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; @@ -3376,13 +3978,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 ); } @@ -3392,9 +3996,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" ); @@ -3403,7 +4007,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; @@ -3412,15 +4018,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(); + } } } @@ -3433,7 +4045,9 @@ bot_hq() self endon( "disconnect" ); if ( level.gametype != "koth" ) + { return; + } for ( ;; ) { @@ -3444,11 +4058,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(); } @@ -3469,20 +4087,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" ); + } } /* @@ -3502,14 +4130,20 @@ bot_hq_watch_flashing( obj, radio ) { 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" ); @@ -3521,24 +4155,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" ); @@ -3548,7 +4182,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; @@ -3556,15 +4192,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; @@ -3575,27 +4215,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" ); @@ -3606,9 +4254,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; @@ -3620,7 +4270,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; @@ -3631,22 +4281,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; @@ -3654,17 +4310,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" ); @@ -3675,7 +4333,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; @@ -3683,8 +4343,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" ); @@ -3697,29 +4357,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; } @@ -3736,9 +4404,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; @@ -3750,7 +4420,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; @@ -3761,7 +4431,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" ); @@ -3771,7 +4441,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; @@ -3790,7 +4462,9 @@ bot_sab() level endon( "game_ended" ); if ( level.gametype != "sab" ) + { return; + } for ( ;; ) { @@ -3801,14 +4475,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(); } @@ -3820,69 +4500,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 = random( 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 ); @@ -3892,7 +4590,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; @@ -3900,45 +4600,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; } @@ -3954,9 +4668,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; @@ -3968,7 +4684,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; @@ -3988,12 +4704,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 ( ;; ) @@ -4005,8 +4725,10 @@ bot_sd_defenders() continue; } - if ( self IsPlanting() || self isDefusing() ) + if ( self isPlanting() || self isDefusing() ) + { continue; + } self bot_sd_defenders_loop( data ); } @@ -4018,9 +4740,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 ) { @@ -4028,19 +4754,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" ); @@ -4051,7 +4779,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; @@ -4059,73 +4789,93 @@ 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 + return; + } + + 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 ) + 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 ) ) + 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; } @@ -4139,7 +4889,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; @@ -4148,31 +4900,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 = random( 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 ); @@ -4183,9 +4947,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; @@ -4197,7 +4963,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; @@ -4217,12 +4983,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; diff --git a/maps/mp/bots/_bot_utility.gsc b/maps/mp/bots/_bot_utility.gsc index 464c471..6ae1131 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 ) */ BotBuiltinBotMoveTo( where ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["botmoveto"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "botmoveto" ] ) ) { - self [[ level.bot_builtins["botmoveto" ]]]( where ); + self [[ level.bot_builtins[ "botmoveto" ] ]]( where ); } } @@ -121,9 +127,9 @@ BotBuiltinBotMoveTo( where ) */ 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 ); } } @@ -132,9 +138,9 @@ BotBuiltinBotMeleeParams( yaw, dist ) */ 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; @@ -145,9 +151,9 @@ BotBuiltinIsBot() */ BotBuiltinFileOpen( file, mode ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["fs_fopen"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "fs_fopen" ] ) ) { - return [[ level.bot_builtins["fs_fopen" ]]]( file, mode ); + return [[ level.bot_builtins[ "fs_fopen" ] ]]( file, mode ); } return 0; @@ -158,9 +164,9 @@ BotBuiltinFileOpen( file, mode ) */ BotBuiltinFileClose( fh ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["fs_fclose"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "fs_fclose" ] ) ) { - [[ level.bot_builtins["fs_fclose" ]]]( fh ); + [[ level.bot_builtins[ "fs_fclose" ] ]]( fh ); } } @@ -169,9 +175,9 @@ BotBuiltinFileClose( fh ) */ BotBuiltinReadLine( fh ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["fs_readline"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "fs_readline" ] ) ) { - return [[ level.bot_builtins["fs_readline" ]]]( fh ); + return [[ level.bot_builtins[ "fs_readline" ] ]]( fh ); } return undefined; @@ -182,9 +188,9 @@ BotBuiltinReadLine( fh ) */ BotBuiltinWriteLine( fh, contents ) { - if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["fs_writeline"] ) ) + if ( isdefined( level.bot_builtins ) && isdefined( level.bot_builtins[ "fs_writeline" ] ) ) { - [[ level.bot_builtins["fs_writeline" ]]]( fh, contents ); + [[ level.bot_builtins[ "fs_writeline" ] ]]( fh, contents ); } } @@ -193,7 +199,7 @@ BotBuiltinWriteLine( fh, contents ) */ is_host() { - return ( isDefined( self.pers["bot_host"] ) && self.pers["bot_host"] ); + return ( isdefined( self.pers[ "bot_host" ] ) && self.pers[ "bot_host" ] ); } /* @@ -201,27 +207,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 != "" ) { @@ -229,15 +239,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; } /* @@ -322,8 +336,10 @@ BotGetRandom() */ BotGetTargetRandom() { - if ( !isDefined( self.bot.target ) ) + if ( !isdefined( self.bot.target ) ) + { return undefined; + } return self.bot.target.rand; } @@ -373,7 +389,7 @@ IsBotKnifing() */ IsPlayerModelOK() { - return ( isDefined( self.bot_model_fix ) ); + return ( isdefined( self.bot_model_fix ) ); } /* @@ -384,7 +400,9 @@ BotFreezeControls( what ) self.bot.isfrozen = what; if ( what ) + { self notify( "kill_goal" ); + } } /* @@ -403,7 +421,9 @@ BotStopMoving( what ) self.bot.stop_move = what; if ( what ) + { self notify( "kill_goal" ); + } } /* @@ -420,7 +440,7 @@ BotNotifyBotEvent( msg, a, b, c, d, e, f, g ) */ HasScriptGoal() { - return ( isDefined( self GetScriptGoal() ) ); + return ( isdefined( self GetScriptGoal() ) ); } /* @@ -436,8 +456,10 @@ GetScriptGoal() */ SetScriptGoal( goal, dist ) { - if ( !isDefined( dist ) ) + if ( !isdefined( dist ) ) + { dist = 16; + } self.bot.script_goal = goal; self.bot.script_goal_dist = dist; @@ -509,7 +531,7 @@ GetScriptAimPos() */ HasScriptAimPos() { - return isDefined( self GetScriptAimPos() ); + return isdefined( self GetScriptAimPos() ); } /* @@ -540,10 +562,12 @@ ClearScriptEnemy() /* Returns the entity of the bot's target. */ -GetThreat() +getThreat() { if ( !isdefined( self.bot.target ) ) + { return undefined; + } return self.bot.target.entity; } @@ -553,7 +577,7 @@ GetThreat() */ HasScriptEnemy() { - return ( isDefined( self.bot.script_target ) ); + return ( isdefined( self.bot.script_target ) ); } /* @@ -561,15 +585,15 @@ HasScriptEnemy() */ HasThreat() { - return ( isDefined( self GetThreat() ) ); + return ( isdefined( self getThreat() ) ); } /* If the player is defusing */ -IsDefusing() +isDefusing() { - return ( isDefined( self.isDefusing ) && self.isDefusing ); + return ( isdefined( self.isdefusing ) && self.isdefusing ); } /* @@ -577,7 +601,7 @@ IsDefusing() */ isPlanting() { - return ( isDefined( self.isPlanting ) && self.isPlanting ); + return ( isdefined( self.isplanting ) && self.isplanting ); } /* @@ -585,7 +609,7 @@ isPlanting() */ inLastStand() { - return ( isDefined( self.lastStand ) && self.lastStand ); + return ( isdefined( self.laststand ) && self.laststand ); } /* @@ -593,7 +617,7 @@ inLastStand() */ isBombCarrier() { - return ( isDefined( self.isBombCarrier ) && self.isBombCarrier ); + return ( isdefined( self.isbombcarrier ) && self.isbombcarrier ); } /* @@ -601,7 +625,7 @@ isBombCarrier() */ isInUse() { - return ( isDefined( self.inUse ) && self.inUse ); + return ( isdefined( self.inuse ) && self.inuse ); } /* @@ -609,7 +633,7 @@ isInUse() */ IsStunned() { - return ( isdefined( self.concussionEndTime ) && self.concussionEndTime > gettime() ); + return ( isdefined( self.concussionendtime ) && self.concussionendtime > gettime() ); } /* @@ -617,7 +641,7 @@ IsStunned() */ isArtShocked() { - return ( isDefined( self.beingArtilleryShellshocked ) && self.beingArtilleryShellshocked ); + return ( isdefined( self.beingartilleryshellshocked ) && self.beingartilleryshellshocked ); } /* @@ -629,13 +653,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; @@ -647,22 +675,26 @@ getValidTube() getValidGrenade() { grenadeTypes = []; - grenadeTypes[grenadeTypes.size] = "frag_grenade_mp"; - grenadeTypes[grenadeTypes.size] = "smoke_grenade_mp"; - grenadeTypes[grenadeTypes.size] = "flash_grenade_mp"; - grenadeTypes[grenadeTypes.size] = "concussion_grenade_mp"; + grenadeTypes[ grenadeTypes.size ] = "frag_grenade_mp"; + grenadeTypes[ grenadeTypes.size ] = "smoke_grenade_mp"; + grenadeTypes[ grenadeTypes.size ] = "flash_grenade_mp"; + grenadeTypes[ grenadeTypes.size ] = "concussion_grenade_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 random( possibles ); @@ -673,33 +705,28 @@ getValidGrenade() */ getWinningTeam() { - if ( maps\mp\gametypes\_globallogic::getGameScore( "allies" ) == maps\mp\gametypes\_globallogic::getGameScore( "axis" ) ) + if ( maps\mp\gametypes\_globallogic::getgamescore( "allies" ) == maps\mp\gametypes\_globallogic::getgamescore( "axis" ) ) + { winner = "tie"; - else if ( maps\mp\gametypes\_globallogic::getGameScore( "allies" ) > maps\mp\gametypes\_globallogic::getGameScore( "axis" ) ) + } + else if ( maps\mp\gametypes\_globallogic::getgamescore( "allies" ) > maps\mp\gametypes\_globallogic::getgamescore( "axis" ) ) + { winner = "allies"; + } else + { winner = "axis"; + } return winner; } -/* - Picks a random thing -*/ -PickRandom( arr ) -{ - if ( !arr.size ) - return undefined; - - return arr[randomInt( arr.size )]; -} - /* CoD4 */ getBaseWeaponName( weap ) { - return strtok( weap, "_" )[0]; + return strtok( weap, "_" )[ 0 ]; } /* @@ -709,15 +736,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" ) { @@ -735,9 +762,9 @@ GetEyeHeight() /* Returns (iw4) eye pos. */ -GetEyePos() +getEyePos() { - return self.origin + ( 0, 0, self GetEyeHeight() ); + return self.origin + ( 0, 0, self getEyeHeight() ); } /* @@ -755,8 +782,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; } @@ -796,24 +825,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 ); @@ -997,20 +1038,22 @@ isItemUnlocked( what, lvl ) */ isWeaponDroppable( weap ) { - return ( maps\mp\gametypes\_weapons::mayDropWeapon( weap ) ); + return ( maps\mp\gametypes\_weapons::maydropweapon( weap ) ); } /* Selects a random element from the array. */ -Random( arr ) +random( arr ) { size = arr.size; if ( !size ) + { return undefined; + } - return arr[randomInt( size )]; + return arr[ randomint( size ) ]; } /* @@ -1022,10 +1065,12 @@ array_remove( ents, remover ) for ( i = 0; i < ents.size; i++ ) { - index = ents[i]; + index = ents[ i ]; if ( index != remover ) + { newents[ newents.size ] = index; + } } return newents; @@ -1047,10 +1092,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; } @@ -1065,37 +1112,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; } @@ -1110,43 +1169,53 @@ 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; } @@ -1156,15 +1225,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; } @@ -1177,20 +1250,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 ); } /* @@ -1200,7 +1273,7 @@ float_old( num ) { setdvar( "temp_dvar_bot_util", num ); - return GetDvarFloat( "temp_dvar_bot_util" ); + return getdvarfloat( "temp_dvar_bot_util" ); } /* @@ -1213,24 +1286,32 @@ Round( x ) if ( abs( x ) - abs( y ) > 0.5 ) { if ( x < 0 ) + { return y - 1; + } else + { return y + 1; + } } else + { return y; + } } /* clamps angle between -180 and 180 */ -AngleClamp180( angle ) +angleclamp180( angle ) { angleFrac = angle / 360.0; angle = ( angleFrac - floor( angleFrac ) ) * 360.0; if ( angle > 180.0 ) + { return angle - 360.0; + } return angle; } @@ -1238,7 +1319,7 @@ AngleClamp180( angle ) /* Clamps between value */ -Clamp( a, minv, maxv ) +clamp( a, minv, maxv ) { return max( min( a, maxv ), minv ); } @@ -1374,86 +1455,96 @@ keyCodeToString( a ) 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 < 8; 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 < 8; 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; } } @@ -1466,31 +1557,33 @@ FrontLinesWaypoints() for ( i = 0;; i++ ) { - dvar_answer = getDvar( "flwp_" + i ); + dvar_answer = getdvar( "flwp_" + i ); if ( dvar_answer == "" || dvar_answer == "eof" ) + { break; + } toks = strtok( dvar_answer, "," ); - waypoint = spawnStruct(); - wp_num = int( toks[0] ); - x = float_old( toks[1] ); - y = float_old( toks[2] ); - z = float_old( toks[3] ); + waypoint = spawnstruct(); + wp_num = int( toks[ 0 ] ); + x = float_old( toks[ 1 ] ); + y = float_old( toks[ 2 ] ); + z = float_old( toks[ 3 ] ); waypoint.origin = ( x, y, z ); - waypoint.type = toks[4]; + waypoint.type = toks[ 4 ]; waypoint.children = []; - num_children = int( toks[5] ); + num_children = int( toks[ 5 ] ); for ( h = 0; h < num_children; h++ ) { - waypoint.children[waypoint.children.size] = int( toks[6 + h] ); + waypoint.children[ waypoint.children.size ] = int( toks[ 6 + h ] ); } - waypoints[wp_num] = waypoint; + waypoints[ wp_num ] = waypoint; } return waypoints; @@ -1501,30 +1594,34 @@ FrontLinesWaypoints() */ 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; @@ -1535,12 +1632,14 @@ parseTokensIntoWaypoint( tokens ) */ getABotName() { - if ( !isDefined( level.bot_names ) ) + if ( !isdefined( level.bot_names ) ) { level.bot_names = []; - if ( getDvar( "temp_dvar_bot_name_cursor" ) == "" ) - setDvar( "temp_dvar_bot_name_cursor", 0 ); + if ( getdvar( "temp_dvar_bot_name_cursor" ) == "" ) + { + setdvar( "temp_dvar_bot_name_cursor", 0 ); + } filename = "botnames.txt"; @@ -1550,9 +1649,9 @@ getABotName() if ( f > 0 ) { - for ( line = BotBuiltinReadLine( f ); isDefined( line ); line = BotBuiltinReadLine( f ) ) + for ( line = BotBuiltinReadLine( f ); isdefined( line ); line = BotBuiltinReadLine( f ) ) { - level.bot_names[level.bot_names.size] = line; + level.bot_names[ level.bot_names.size ] = line; } BotBuiltinFileClose( f ); @@ -1561,11 +1660,13 @@ getABotName() } if ( !level.bot_names.size ) + { return undefined; + } - cur = getDvarInt( "temp_dvar_bot_name_cursor" ); - name = level.bot_names[cur % level.bot_names.size]; - setDvar( "temp_dvar_bot_name_cursor", cur + 1 ); + cur = getdvarint( "temp_dvar_bot_name_cursor" ); + name = level.bot_names[ cur % level.bot_names.size ]; + setdvar( "temp_dvar_bot_name_cursor", cur + 1 ); return name; } @@ -1579,18 +1680,22 @@ readWpsFromFile( mapname ) filename = "waypoints/" + mapname + "_wp.csv"; if ( !BotBuiltinFileExists( filename ) ) + { return waypoints; + } f = BotBuiltinFileOpen( filename, "read" ); if ( f < 1 ) + { return waypoints; + } BotBuiltinPrintConsole( "Attempting to read waypoints from " + filename ); line = BotBuiltinReadLine( f ); - if ( isDefined( line ) ) + if ( isdefined( line ) ) { waypointCount = int( line ); @@ -1598,14 +1703,16 @@ readWpsFromFile( mapname ) { line = BotBuiltinReadLine( f ); - if ( !isDefined( line ) ) + if ( !isdefined( line ) ) + { break; + } tokens = strtok( line, "," ); waypoint = parseTokensIntoWaypoint( tokens ); - waypoints[i - 1] = waypoint; + waypoints[ i - 1 ] = waypoint; } } @@ -1619,15 +1726,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 ); @@ -1646,7 +1755,9 @@ load_waypoints() } if ( level.waypoints.size ) + { BotBuiltinPrintConsole( "Loaded " + level.waypoints.size + " waypoints from script." ); + } } if ( !level.waypoints.size ) @@ -1654,7 +1765,9 @@ load_waypoints() level.waypoints = FrontLinesWaypoints(); if ( level.waypoints.size ) + { BotBuiltinPrintConsole( "Loaded " + level.waypoints.size + " waypoints from frontlines." ); + } } if ( !level.waypoints.size ) @@ -1662,20 +1775,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; } } @@ -1688,10 +1807,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; } @@ -1710,12 +1831,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; @@ -1731,13 +1854,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; } @@ -1751,22 +1876,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; @@ -1777,10 +1908,12 @@ getWaypointsOfType( type ) */ getWaypointForIndex( i ) { - if ( !isDefined( i ) ) + if ( !isdefined( i ) ) + { return undefined; + } - return level.waypoints[i]; + return level.waypoints[ i ]; } /* @@ -1788,7 +1921,7 @@ getWaypointForIndex( i ) */ getGoodMapAmount() { - switch ( getDvar( "mapname" ) ) + switch ( getdvar( "mapname" ) ) { case "mp_crash": case "mp_crash_snow": @@ -1805,26 +1938,38 @@ getGoodMapAmount() case "mp_backlot": case "mp_convoy": case "mp_bloc": - if ( level.teamBased ) + if ( level.teambased ) + { return 14; + } else + { return 9; + } case "mp_vacant": case "mp_showdown": case "mp_citystreets": case "mp_bog": - if ( level.teamBased ) + if ( level.teambased ) + { return 12; + } else + { return 8; + } case "mp_killhouse": case "mp_shipment": - if ( level.teamBased ) + if ( level.teambased ) + { return 8; + } else + { return 4; + } } return 2; @@ -1919,28 +2064,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 + } + else // choose bots that are not on a team first + { return bot; + } } // search for a bot on the other team @@ -1954,7 +2109,9 @@ getBotToKick() team = "allies"; if ( axis > allies ) + { team = "axis"; + } } else { @@ -1964,39 +2121,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; } @@ -2014,12 +2187,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; @@ -2043,7 +2218,9 @@ WaypointsToKDTree() _WaypointsToKDTree( waypoints, dem ) { if ( !waypoints.size ) + { return; + } callbacksort = undefined; @@ -2066,29 +2243,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 ); @@ -2100,7 +2283,7 @@ _WaypointsToKDTree( waypoints, dem ) */ List() { - list = spawnStruct(); + list = spawnstruct(); list.count = 0; list.data = []; @@ -2112,7 +2295,7 @@ List() */ ListAdd( thing ) { - self.data[self.count] = thing; + self.data[ self.count ] = thing; self.count++; } @@ -2124,10 +2307,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++; } @@ -2138,15 +2321,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; } @@ -2158,7 +2341,7 @@ ListRemove( thing ) */ KDTree() { - kdTree = spawnStruct(); + kdTree = spawnstruct(); kdTree.root = undefined; kdTree.count = 0; @@ -2168,7 +2351,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 ); } @@ -2178,9 +2361,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; @@ -2199,26 +2382,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; } @@ -2231,10 +2426,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 ); } /* @@ -2242,12 +2439,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 ) { @@ -2255,12 +2452,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; @@ -2268,7 +2465,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; @@ -2277,27 +2474,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; } @@ -2307,7 +2515,7 @@ RectDistanceSquared( origin ) */ HeapSortCoordX( item, item2 ) { - return item.origin[0] > item2.origin[0]; + return item.origin[ 0 ] > item2.origin[ 0 ]; } /* @@ -2315,7 +2523,7 @@ HeapSortCoordX( item, item2 ) */ HeapSortCoordY( item, item2 ) { - return item.origin[1] > item2.origin[1]; + return item.origin[ 1 ] > item2.origin[ 1 ]; } /* @@ -2323,7 +2531,7 @@ HeapSortCoordY( item, item2 ) */ HeapSortCoordZ( item, item2 ) { - return item.origin[2] > item2.origin[2]; + return item.origin[ 2 ] > item2.origin[ 2 ]; } /* @@ -2347,7 +2555,7 @@ ReverseHeap( item, item2 ) */ HeapTraceFraction( item, item2 ) { - return item["fraction"] > item2["fraction"]; + return item[ "fraction" ] > item2[ "fraction" ]; } /* @@ -2355,7 +2563,7 @@ HeapTraceFraction( item, item2 ) */ NewHeap( compare ) { - heap_node = spawnStruct(); + heap_node = spawnstruct(); heap_node.data = []; heap_node.compare = compare; @@ -2368,7 +2576,7 @@ NewHeap( compare ) HeapInsert( item ) { insert = self.data.size; - self.data[insert] = item; + self.data[ insert ] = item; current = insert + 1; @@ -2377,11 +2585,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; } } @@ -2394,15 +2604,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; + } } /* @@ -2413,26 +2631,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 ); @@ -2454,16 +2678,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; + } } /* @@ -2474,15 +2704,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; @@ -2494,17 +2728,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; @@ -2520,76 +2756,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; } @@ -2597,72 +2847,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 []; @@ -2673,15 +2941,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; @@ -2698,8 +2958,6 @@ Log( x ) } answer = 2.0 * sum; - - //level.log_cache[key] = answer; return answer; } @@ -2714,7 +2972,7 @@ array_combine( array1, array2 ) } array3 = []; - keys = GetArrayKeys( array1 ); + keys = getarraykeys( array1 ); for ( i = 0; i < keys.size; i++ ) { @@ -2722,7 +2980,7 @@ array_combine( array1, array2 ) array3[ array3.size ] = array1[ key ]; } - keys = GetArrayKeys( array2 ); + keys = getarraykeys( array2 ); for ( i = 0; i < keys.size; i++ ) { @@ -2744,7 +3002,7 @@ array_average( array ) for ( i = 0; i < array.size; i++ ) { - total += array[i]; + total += array[ i ]; } return ( total / array.size ); @@ -2761,17 +3019,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 ); } /* @@ -2787,21 +3045,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; } @@ -2815,30 +3073,34 @@ 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 ); // 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(); } - player playSound( "mp_bomb_plant" ); + 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" ); } } @@ -2847,111 +3109,123 @@ onUsePlantObjectFix( player ) */ 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( "prop_suitcase_bomb" ); + level.sdbombmodel = spawn( "script_model", trace[ "position" ] ); + level.sdbombmodel.angles = dropAngles; + level.sdbombmodel setmodel( "prop_suitcase_bomb" ); } - 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; - 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; - level.sdBombModel hide(); + explosionOrigin = level.sdbombmodel.origin; + level.sdbombmodel hide(); if ( isdefined( player ) ) - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, player ); + { + destroyedObj.visuals[ 0 ] radiusdamage( explosionOrigin, 512, 200, 20, player ); + } else - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20 ); + { + destroyedObj.visuals[ 0 ] radiusdamage( explosionOrigin, 512, 200, 20 ); + } 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 ); 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 770b9e1..918f104 100644 --- a/maps/mp/bots/_menu.gsc +++ b/maps/mp/bots/_menu.gsc @@ -1,1131 +1,1320 @@ -/* - _menu - Author: INeedGames - Date: 09/26/2020 - The ingame menu. -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -init() -{ - if ( getDvar( "bots_main_menu" ) == "" ) - setDvar( "bots_main_menu", true ); - - if ( !getDvarInt( "bots_main_menu" ) ) - return; - - thread watchPlayers(); -} - -watchPlayers() -{ - for ( ;; ) - { - wait 1; - - if ( !getDvarInt( "bots_main_menu" ) ) - return; - - for ( i = level.players.size - 1; i >= 0; i-- ) - { - player = level.players[i]; - - if ( !player is_host() ) - continue; - - if ( isDefined( player.menuInit ) && player.menuInit ) - continue; - - player thread init_menu(); - } - } -} - -init_menu() -{ - self.menuInit = true; - - self.menuOpen = false; - self.menu_player = undefined; - self.SubMenu = "Main"; - self.Curs["Main"]["X"] = 0; - self AddOptions(); - - self thread watchPlayerOpenMenu(); - self thread MenuSelect(); - self thread RightMenu(); - self thread LeftMenu(); - - self thread watchDisconnect(); - - self thread doGreetings(); -} - -kill_menu() -{ - self notify( "bots_kill_menu" ); - self.menuInit = undefined; -} - -watchDisconnect() -{ - self waittill_either( "disconnect", "bots_kill_menu" ); - - 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.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(); - } -} - -doGreetings() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - wait 1; - self iPrintln( "Welcome to Bot Warfare " + self.name + "!" ); - wait 5; - self iPrintln( "Press [{+frag}] + [{+smoke}] to open menu!" ); -} - -watchPlayerOpenMenu() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - - for ( ;; ) - { - while ( !self FragButtonPressed() || !self SecondaryOffhandButtonPressed() ) - wait 0.05; - - if ( !self.menuOpen ) - { - self playLocalSound( "mouse_click" ); - self thread OpenSub( self.SubMenu ); - } - else - { - self playLocalSound( "mouse_click" ); - - if ( self.SubMenu != "Main" ) - self ExitSub(); - else - { - self ExitMenu(); - - if ( level.inPrematchPeriod || level.gameEnded ) - self freezeControls( true ); - else - self freezecontrols( false ); - } - } - - while ( self FragButtonPressed() && self SecondaryOffhandButtonPressed() ) - wait 0.05; - } -} - -MenuSelect() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - - for ( ;; ) - { - while ( !self MeleeButtonPressed() ) - wait 0.05; - - 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; - } -} - -LeftMenu() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - - for ( ;; ) - { - while ( !self AttackButtonPressed() ) - wait 0.05; - - if ( self.MenuOpen ) - { - self playLocalSound( "mouse_over" ); - - if ( self.SubMenu == "Main" ) - { - self.Curs["Main"]["X"]--; - - 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"]--; - - 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() ) - wait 0.05; - } -} - -RightMenu() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - - for ( ;; ) - { - while ( !self AdsButtonPressed() ) - wait 0.05; - - if ( self.MenuOpen ) - { - self playLocalSound( "mouse_over" ); - - if ( self.SubMenu == "Main" ) - { - self.Curs["Main"]["X"]++; - - 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"]++; - - 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() ) - wait 0.05; - } -} - -OpenSub( menu, menu2 ) -{ - if ( menu != "Main" && ( !isDefined( self.Menu[menu] ) || !!isDefined( self.Menu[menu]["FirstOpen"] ) ) ) - { - self.Curs[menu]["Y"] = 0; - self.Menu[menu]["FirstOpen"] = true; - } - - logoldi = true; - self.SubMenu = menu; - - 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.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 ) - { - logOldi = false; - x = i - self.oldi; - self.MenuText[i] setpoint( "CENTER", "CENTER", ( ( ( -300 ) - ( i * 100 ) ) + ( i * 100 ) ) + ( x * 100 ), -196 ); - } - - 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" ); - else - 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 CursMove( "X" ); - - self.menuVersionHud = initHudElem( "Bot Warfare " + level.bw_VERSION, 0, 0 ); - - 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++ ) - { - 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" ); - } -} - -CursMove( direction ) -{ - self notify( "scrolled" ); - - 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; - - if ( isDefined( self.MenuText ) ) - { - for ( i = 0; i < self.MenuText.size; 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 thread ShowOptionOn( direction ); - } - else - { - if ( isDefined( self.MenuTextY ) ) - { - for ( i = 0; i < self.MenuTextY.size; i++ ) - { - if ( isDefined( self.MenuTextY[i] ) ) - { - self.MenuTextY[i].fontscale = 1.5; - self.MenuTextY[i].color = ( 1, 1, 1 ); - self.MenuTextY[i].glowAlpha = 0; - } - } - } - - if ( isDefined( self.MenuText ) ) - { - for ( i = 0; i < self.MenuText.size; 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 thread ShowOptionOn( direction ); - } -} - -ShowOptionOn( variable ) -{ - self endon( "scrolled" ); - self endon( "disconnect" ); - self endon( "exit" ); - self endon( "bots_kill_menu" ); - - 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 ( 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 ); - - if ( int( time * 4 ) % 2 ) - color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 ); - - self.MenuText[self.Curs[self.SubMenu][variable]].color = color; - } - - if ( isDefined( self.MenuText ) ) - { - 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] ); - } - } - } - else - { - 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 ); - - if ( int( time * 4 ) % 2 ) - color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 ); - - self.MenuTextY[self.Curs[self.SubMenu][variable]].color = color; - } - - if ( isDefined( self.MenuTextY ) ) - { - 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] ); - } - } - } - - wait 0.05; - } -} - -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; -} - -AddBack( 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(); - - self.SubMenu = self.Menu["Back"][self.Submenu]; - - 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.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(); - - self.MenuOpen = false; - self notify( "exit" ); - - 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.x = xl; - hud.y = yl; - hud.foreground = true; - hud.fontScale = 1.4; - hud.font = "objective"; - hud.alpha = 1; - hud.glow = 0; - hud.glowColor = ( 0, 0, 0 ); - hud.glowAlpha = 1; - hud.color = ( 1.0, 1.0, 1.0 ); - - return hud; -} - -createRectangle( align, relative, x, y, width, height, color, sort, alpha, shader ) -{ - 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.children = []; - barElemBG.sort = sort; - barElemBG.color = color; - barElemBG.alpha = alpha; - barElemBG setParent( level.uiParent ); - barElemBG setShader( shader, width, height ); - barElemBG.hidden = false; - barElemBG setPoint( align, relative, x, y ); - return barElemBG; -} - -AddOptions() -{ - self AddMenu( "Main", 0, "Manage bots", ::OpenSub, "man_bots", "" ); - self AddBack( "man_bots", "Main" ); - - _temp = ""; - _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 ); - self AddMenu( "man_bots", 3, "Add 11 bot", ::man_bots, "add", 11 + _tempDvar ); - self AddMenu( "man_bots", 4, "Add 17 bot", ::man_bots, "add", 17 + _tempDvar ); - 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" ); - - 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" ); - - switch ( _tempDvar ) - { - case 0: - _temp = "everyone"; - break; - - case 1: - _temp = "just bots"; - break; - - case 2: - _temp = "everyone, adjust to map"; - break; - - case 3: - _temp = "just bots, adjust to map"; - break; - - case 4: - _temp = "bots used as team balance"; - break; - - default: - _temp = "out of range"; - break; - } - - self AddMenu( "man_bots", 8, "Change bot_fill_mode: " + _temp, ::man_bots, "fillmode", _tempDvar ); - - _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" ); - - if ( _tempDvar ) - _temp = "true"; - else - _temp = "false"; - - self AddMenu( "man_bots", 11, "Count players for fill on spectator: " + _temp, ::man_bots, "fillspec", _tempDvar ); - - // - - self AddMenu( "Main", 1, "Teams and difficulty", ::OpenSub, "man_team", "" ); - self AddBack( "man_team", "Main" ); - - _tempDvar = getdvar( "bots_team" ); - self AddMenu( "man_team", 0, "Change bot team: " + _tempDvar, ::bot_teams, "team", _tempDvar ); - - _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" ); - - 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" ); - - if ( _tempDvar ) - _temp = "only bots"; - else - _temp = "everyone"; - - self AddMenu( "man_team", 4, "Toggle bot_team_bot: " + _temp, ::bot_teams, "teammode", _tempDvar ); - - _tempDvar = getdvarint( "bots_skill" ); - - switch ( _tempDvar ) - { - case 0: - _temp = "random for all"; - break; - - case 1: - _temp = "too easy"; - break; - - case 2: - _temp = "easy"; - break; - - case 3: - _temp = "easy-medium"; - break; - - case 4: - _temp = "medium"; - break; - - case 5: - _temp = "hard"; - break; - - case 6: - _temp = "very hard"; - break; - - case 7: - _temp = "hardest"; - break; - - case 8: - _temp = "custom"; - break; - - case 9: - _temp = "complete random"; - break; - - default: - _temp = "out of range"; - break; - } - - self AddMenu( "man_team", 5, "Change bot difficulty: " + _temp, ::bot_teams, "skill", _tempDvar ); - - _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" ); - 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" ); - 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" ); - 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 ); - - // - - self AddMenu( "Main", 2, "Bot settings", ::OpenSub, "set1", "" ); - self AddBack( "set1", "Main" ); - - _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" ); - - 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" ); - - if ( _tempDvar ) - _temp = "true"; - else - _temp = "false"; - - self AddMenu( "set1", 2, "Bots can move: " + _temp, ::bot_func, "move", _tempDvar ); - - _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" ); - - if ( _tempDvar ) - _temp = "true"; - else - _temp = "false"; - - self AddMenu( "set1", 4, "Bots can fire: " + _temp, ::bot_func, "fire", _tempDvar ); - - _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" ); - - 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" ); - - if ( _tempDvar ) - _temp = "true"; - else - _temp = "false"; - - self AddMenu( "set1", 7, "Bots can camp: " + _temp, ::bot_func, "camp", _tempDvar ); - - _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" ); - - 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" ); - - 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" ); - - if ( _tempDvar ) - _temp = "true"; - else - _temp = "false"; - - self AddMenu( "set1", 11, "Bots can ads: " + _temp, ::bot_func, "ads", _tempDvar ); -} - -bot_func( a, b ) -{ - switch ( a ) - { - case "reasonable": - 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 ); - break; - - case "move": - setDvar( "bots_play_move", !b ); - self iPrintln( "Bots move: " + !b ); - break; - - case "knife": - setDvar( "bots_play_knife", !b ); - self iPrintln( "Bots knife: " + !b ); - break; - - case "fire": - setDvar( "bots_play_fire", !b ); - self iPrintln( "Bots fire: " + !b ); - break; - - case "nade": - 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 ); - break; - - case "camp": - setDvar( "bots_play_camp", !b ); - self iPrintln( "Bots camp: " + !b ); - break; - - case "jump": - 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 ); - break; - - case "killstreak": - setDvar( "bots_play_killstreak", !b ); - self iPrintln( "Bots use killstreaks: " + !b ); - break; - - case "ads": - setDvar( "bots_play_ads", !b ); - self iPrintln( "Bots ads: " + !b ); - break; - } -} - -bot_teams( a, b ) -{ - switch ( a ) - { - case "team": - switch ( b ) - { - case "autoassign": - setdvar( "bots_team", "allies" ); - self iPrintlnBold( "Changed bot team to allies." ); - break; - - case "allies": - setdvar( "bots_team", "axis" ); - self iPrintlnBold( "Changed bot team to axis." ); - break; - - case "axis": - setdvar( "bots_team", "custom" ); - self iPrintlnBold( "Changed bot team to custom." ); - break; - - default: - setdvar( "bots_team", "autoassign" ); - self iPrintlnBold( "Changed bot team to autoassign." ); - break; - } - - break; - - case "teamup": - setdvar( "bots_team_amount", b + 1 ); - 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." ); - break; - - case "teamforce": - 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 ); - break; - - case "skill": - switch ( b ) - { - case 0: - 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 ); - break; - - case 2: - 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 ); - break; - - case 4: - 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 ); - break; - - case 6: - 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 ); - break; - - case 8: - 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 ); - break; - } - - break; - - case "axishardup": - setdvar( "bots_skill_axis_hard", ( b + 1 ) ); - 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." ); - break; - - case "axismedup": - setdvar( "bots_skill_axis_med", ( b + 1 ) ); - 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." ); - break; - - case "allieshardup": - setdvar( "bots_skill_allies_hard", ( b + 1 ) ); - 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." ); - break; - - case "alliesmedup": - setdvar( "bots_skill_allies_med", ( b + 1 ) ); - 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." ); - break; - } -} - -man_bots( a, b ) -{ - switch ( a ) - { - case "add": - setdvar( "bots_manage_add", b ); - - if ( b == 1 ) - { - self iPrintln( "Adding " + b + " bot." ); - } - else - { - self iPrintln( "Adding " + b + " bots." ); - } - - break; - - case "kick": - for ( i = 0; i < b; i++ ) - { - RemoveTestClient(); - - wait 0.25; - } - - break; - - case "autokick": - setDvar( "bots_manage_fill_kick", !b ); - self iPrintln( "Kicking bots when bots_fill is exceeded: " + !b ); - break; - - case "fillmode": - switch ( b ) - { - case 0: - setdvar( "bots_manage_fill_mode", 1 ); - 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." ); - break; - - case 2: - setdvar( "bots_manage_fill_mode", 3 ); - 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." ); - break; - - default: - setdvar( "bots_manage_fill_mode", 0 ); - self iPrintln( "bot_fill will now count everyone." ); - break; - } - - break; - - case "fillup": - setdvar( "bots_manage_fill", b + 1 ); - 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)." ); - break; - - case "fillspec": - setDvar( "bots_manage_fill_spec", !b ); - self iPrintln( "Count players on spectator for bots_fill: " + !b ); - break; - } -} +/* + _menu + Author: INeedGames + Date: 09/26/2020 + The ingame menu. +*/ + +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\bots\_bot_utility; + +init() +{ + if ( getdvar( "bots_main_menu" ) == "" ) + { + setdvar( "bots_main_menu", true ); + } + + if ( !getdvarint( "bots_main_menu" ) ) + { + return; + } + + thread watchPlayers(); +} + +watchPlayers() +{ + for ( ;; ) + { + wait 1; + + if ( !getdvarint( "bots_main_menu" ) ) + { + return; + } + + for ( i = level.players.size - 1; i >= 0; i-- ) + { + player = level.players[ i ]; + + if ( !player is_host() ) + { + continue; + } + + if ( isdefined( player.menuinit ) && player.menuinit ) + { + continue; + } + + player thread init_menu(); + } + } +} + +init_menu() +{ + self.menuinit = true; + + self.menuopen = false; + self.menu_player = undefined; + self.submenu = "Main"; + self.curs[ "Main" ][ "X" ] = 0; + self addOptions(); + + self thread watchPlayerOpenMenu(); + self thread MenuSelect(); + self thread RightMenu(); + self thread LeftMenu(); + + self thread watchDisconnect(); + + self thread doGreetings(); +} + +kill_menu() +{ + self notify( "bots_kill_menu" ); + self.menuinit = undefined; +} + +watchDisconnect() +{ + self waittill_either( "disconnect", "bots_kill_menu" ); + + 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.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(); + } + } +} + +doGreetings() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + wait 1; + self iprintln( "Welcome to Bot Warfare " + self.name + "!" ); + wait 5; + self iprintln( "Press [ {+frag} ] + [ {+smoke} ] to open menu!" ); +} + +watchPlayerOpenMenu() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + for ( ;; ) + { + while ( !self FragButtonPressed() || !self SecondaryOffhandButtonPressed() ) + { + wait 0.05; + } + + if ( !self.menuopen ) + { + self playlocalsound( "mouse_click" ); + self thread OpenSub( self.submenu ); + } + else + { + self playlocalsound( "mouse_click" ); + + if ( self.submenu != "Main" ) + { + self ExitSub(); + } + else + { + self ExitMenu(); + + if ( level.inprematchperiod || level.gameended ) + { + self freezecontrols( true ); + } + else + { + self freezecontrols( false ); + } + } + } + + while ( self FragButtonPressed() && self SecondaryOffhandButtonPressed() ) + { + wait 0.05; + } + } +} + +MenuSelect() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + for ( ;; ) + { + while ( !self meleebuttonpressed() ) + { + wait 0.05; + } + + 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; + } + } +} + +LeftMenu() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + for ( ;; ) + { + while ( !self attackbuttonpressed() ) + { + wait 0.05; + } + + if ( self.menuopen ) + { + self playlocalsound( "mouse_over" ); + + if ( self.submenu == "Main" ) + { + self.curs[ "Main" ][ "X" ]--; + + 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" ]--; + + 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() ) + { + wait 0.05; + } + } +} + +RightMenu() +{ + self endon ( "disconnect" ); + self endon ( "bots_kill_menu" ); + + for ( ;; ) + { + while ( !self adsbuttonpressed() ) + { + wait 0.05; + } + + if ( self.menuopen ) + { + self playlocalsound( "mouse_over" ); + + if ( self.submenu == "Main" ) + { + self.curs[ "Main" ][ "X" ]++; + + 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" ]++; + + 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() ) + { + wait 0.05; + } + } +} + +OpenSub( menu, menu2 ) +{ + if ( menu != "Main" && ( !isdefined( self.menu[ menu ] ) || !!isdefined( self.menu[ menu ][ "FirstOpen" ] ) ) ) + { + self.curs[ menu ][ "Y" ] = 0; + self.menu[ menu ][ "FirstOpen" ] = true; + } + + logOldi = true; + self.submenu = menu; + + 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.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 ) + { + logOldi = false; + x = i - self.oldi; + self.menutext[ i ] setpoint( "CENTER", "CENTER", ( ( ( -300 ) - ( i * 100 ) ) + ( i * 100 ) ) + ( x * 100 ), -196 ); + } + + 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" ); + } + else + { + 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 CursMove( "X" ); + + self.menuversionhud = initHudElem( "Bot Warfare " + level.bw_version, 0, 0 ); + + 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++ ) + { + 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" ); + } +} + +CursMove( direction ) +{ + self notify( "scrolled" ); + + 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; + + if ( isdefined( self.menutext ) ) + { + for ( i = 0; i < self.menutext.size; 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 thread ShowOptionOn( direction ); + } + else + { + if ( isdefined( self.menutexty ) ) + { + for ( i = 0; i < self.menutexty.size; i++ ) + { + if ( isdefined( self.menutexty[ i ] ) ) + { + self.menutexty[ i ].fontscale = 1.5; + self.menutexty[ i ].color = ( 1, 1, 1 ); + self.menutexty[ i ].glowalpha = 0; + } + } + } + + if ( isdefined( self.menutext ) ) + { + for ( i = 0; i < self.menutext.size; 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 thread ShowOptionOn( direction ); + } +} + +ShowOptionOn( variable ) +{ + self endon( "scrolled" ); + self endon( "disconnect" ); + self endon( "exit" ); + self endon( "bots_kill_menu" ); + + 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 ( 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 ); + + if ( int( time * 4 ) % 2 ) + { + color = ( 11 / 255, 0 / 255, 128 + randomintrange( -10, 10 ) / 255 ); + } + + self.menutext[ self.curs[ self.submenu ][ variable ] ].color = color; + } + + if ( isdefined( self.menutext ) ) + { + 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 ] ); + } + } + } + } + else + { + 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 ); + + if ( int( time * 4 ) % 2 ) + { + color = ( 11 / 255, 0 / 255, 128 + randomintrange( -10, 10 ) / 255 ); + } + + self.menutexty[ self.curs[ self.submenu ][ variable ] ].color = color; + } + + if ( isdefined( self.menutexty ) ) + { + 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 ] ); + } + } + } + } + + wait 0.05; + } +} + +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; +} + +AddBack( 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(); + } + } + } + + self.submenu = self.menu[ "Back" ][ self.submenu ]; + + 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.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(); + } + + self.menuopen = false; + self notify( "exit" ); + + 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.x = xl; + hud.y = yl; + hud.foreground = true; + hud.fontscale = 1.4; + hud.font = "objective"; + hud.alpha = 1; + hud.glow = 0; + hud.glowcolor = ( 0, 0, 0 ); + hud.glowalpha = 1; + hud.color = ( 1.0, 1.0, 1.0 ); + + return hud; +} + +createRectangle( align, relative, x, y, width, height, color, sort, alpha, shader ) +{ + 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.children = []; + barElemBG.sort = sort; + barElemBG.color = color; + barElemBG.alpha = alpha; + barElemBG setparent( level.uiparent ); + barElemBG setshader( shader, width, height ); + barElemBG.hidden = false; + barElemBG setpoint( align, relative, x, y ); + return barElemBG; +} + +addOptions() +{ + self AddMenu( "Main", 0, "Manage bots", ::OpenSub, "man_bots", "" ); + self AddBack( "man_bots", "Main" ); + + _temp = ""; + _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 ); + self AddMenu( "man_bots", 3, "Add 11 bot", ::man_bots, "add", 11 + _tempDvar ); + self AddMenu( "man_bots", 4, "Add 17 bot", ::man_bots, "add", 17 + _tempDvar ); + 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" ); + + 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" ); + + switch ( _tempDvar ) + { + case 0: + _temp = "everyone"; + break; + + case 1: + _temp = "just bots"; + break; + + case 2: + _temp = "everyone, adjust to map"; + break; + + case 3: + _temp = "just bots, adjust to map"; + break; + + case 4: + _temp = "bots used as team balance"; + break; + + default: + _temp = "out of range"; + break; + } + + self AddMenu( "man_bots", 8, "Change bot_fill_mode: " + _temp, ::man_bots, "fillmode", _tempDvar ); + + _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" ); + + if ( _tempDvar ) + { + _temp = "true"; + } + else + { + _temp = "false"; + } + + self AddMenu( "man_bots", 11, "Count players for fill on spectator: " + _temp, ::man_bots, "fillspec", _tempDvar ); + + // + + self AddMenu( "Main", 1, "Teams and difficulty", ::OpenSub, "man_team", "" ); + self AddBack( "man_team", "Main" ); + + _tempDvar = getdvar( "bots_team" ); + self AddMenu( "man_team", 0, "Change bot team: " + _tempDvar, ::bot_teams, "team", _tempDvar ); + + _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" ); + + 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" ); + + if ( _tempDvar ) + { + _temp = "only bots"; + } + else + { + _temp = "everyone"; + } + + self AddMenu( "man_team", 4, "Toggle bot_team_bot: " + _temp, ::bot_teams, "teammode", _tempDvar ); + + _tempDvar = getdvarint( "bots_skill" ); + + switch ( _tempDvar ) + { + case 0: + _temp = "random for all"; + break; + + case 1: + _temp = "too easy"; + break; + + case 2: + _temp = "easy"; + break; + + case 3: + _temp = "easy-medium"; + break; + + case 4: + _temp = "medium"; + break; + + case 5: + _temp = "hard"; + break; + + case 6: + _temp = "very hard"; + break; + + case 7: + _temp = "hardest"; + break; + + case 8: + _temp = "custom"; + break; + + case 9: + _temp = "complete random"; + break; + + default: + _temp = "out of range"; + break; + } + + self AddMenu( "man_team", 5, "Change bot difficulty: " + _temp, ::bot_teams, "skill", _tempDvar ); + + _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" ); + 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" ); + 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" ); + 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 ); + + // + + self AddMenu( "Main", 2, "Bot settings", ::OpenSub, "set1", "" ); + self AddBack( "set1", "Main" ); + + _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" ); + + 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" ); + + if ( _tempDvar ) + { + _temp = "true"; + } + else + { + _temp = "false"; + } + + self AddMenu( "set1", 2, "Bots can move: " + _temp, ::bot_func, "move", _tempDvar ); + + _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" ); + + if ( _tempDvar ) + { + _temp = "true"; + } + else + { + _temp = "false"; + } + + self AddMenu( "set1", 4, "Bots can fire: " + _temp, ::bot_func, "fire", _tempDvar ); + + _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" ); + + 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" ); + + if ( _tempDvar ) + { + _temp = "true"; + } + else + { + _temp = "false"; + } + + self AddMenu( "set1", 7, "Bots can camp: " + _temp, ::bot_func, "camp", _tempDvar ); + + _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" ); + + 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" ); + + 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" ); + + if ( _tempDvar ) + { + _temp = "true"; + } + else + { + _temp = "false"; + } + + self AddMenu( "set1", 11, "Bots can ads: " + _temp, ::bot_func, "ads", _tempDvar ); +} + +bot_func( a, b ) +{ + switch ( a ) + { + case "reasonable": + 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 ); + break; + + case "move": + setdvar( "bots_play_move", !b ); + self iprintln( "Bots move: " + !b ); + break; + + case "knife": + setdvar( "bots_play_knife", !b ); + self iprintln( "Bots knife: " + !b ); + break; + + case "fire": + setdvar( "bots_play_fire", !b ); + self iprintln( "Bots fire: " + !b ); + break; + + case "nade": + 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 ); + break; + + case "camp": + setdvar( "bots_play_camp", !b ); + self iprintln( "Bots camp: " + !b ); + break; + + case "jump": + 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 ); + break; + + case "killstreak": + setdvar( "bots_play_killstreak", !b ); + self iprintln( "Bots use killstreaks: " + !b ); + break; + + case "ads": + setdvar( "bots_play_ads", !b ); + self iprintln( "Bots ads: " + !b ); + break; + } +} + +bot_teams( a, b ) +{ + switch ( a ) + { + case "team": + switch ( b ) + { + case "autoassign": + setdvar( "bots_team", "allies" ); + self iprintlnbold( "Changed bot team to allies." ); + break; + + case "allies": + setdvar( "bots_team", "axis" ); + self iprintlnbold( "Changed bot team to axis." ); + break; + + case "axis": + setdvar( "bots_team", "custom" ); + self iprintlnbold( "Changed bot team to custom." ); + break; + + default: + setdvar( "bots_team", "autoassign" ); + self iprintlnbold( "Changed bot team to autoassign." ); + break; + } + + break; + + case "teamup": + setdvar( "bots_team_amount", b + 1 ); + 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." ); + break; + + case "teamforce": + 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 ); + break; + + case "skill": + switch ( b ) + { + case 0: + 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 ); + break; + + case 2: + 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 ); + break; + + case 4: + 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 ); + break; + + case 6: + 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 ); + break; + + case 8: + 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 ); + break; + } + + break; + + case "axishardup": + setdvar( "bots_skill_axis_hard", ( b + 1 ) ); + 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." ); + break; + + case "axismedup": + setdvar( "bots_skill_axis_med", ( b + 1 ) ); + 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." ); + break; + + case "allieshardup": + setdvar( "bots_skill_allies_hard", ( b + 1 ) ); + 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." ); + break; + + case "alliesmedup": + setdvar( "bots_skill_allies_med", ( b + 1 ) ); + 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." ); + break; + } +} + +man_bots( a, b ) +{ + switch ( a ) + { + case "add": + setdvar( "bots_manage_add", b ); + + if ( b == 1 ) + { + self iprintln( "Adding " + b + " bot." ); + } + else + { + self iprintln( "Adding " + b + " bots." ); + } + + break; + + case "kick": + for ( i = 0; i < b; i++ ) + { + tempBot = getBotToKick(); + + if ( isdefined( tempBot ) ) + { + kick( tempBot getentitynumber() ); + } + + wait 0.25; + } + + break; + + case "autokick": + setdvar( "bots_manage_fill_kick", !b ); + self iprintln( "Kicking bots when bots_fill is exceeded: " + !b ); + break; + + case "fillmode": + switch ( b ) + { + case 0: + setdvar( "bots_manage_fill_mode", 1 ); + 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." ); + break; + + case 2: + setdvar( "bots_manage_fill_mode", 3 ); + 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." ); + break; + + default: + setdvar( "bots_manage_fill_mode", 0 ); + self iprintln( "bot_fill will now count everyone." ); + break; + } + + break; + + case "fillup": + setdvar( "bots_manage_fill", b + 1 ); + 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)." ); + break; + + case "fillspec": + 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 1eb261c..526b0f9 100644 --- a/maps/mp/bots/_wp_editor.gsc +++ b/maps/mp/bots/_wp_editor.gsc @@ -12,60 +12,82 @@ 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 ); + } - if ( getDvar( "bots_main_debug_framerate" ) == "" ) - setDvar( "bots_main_debug_framerate", 58 ); + if ( getdvar( "bots_main_debug_framerate" ) == "" ) + { + setdvar( "bots_main_debug_framerate", 58 ); + } - if ( getDvar( "bots_main_debug_lineDuration" ) == "" ) - setDvar( "bots_main_debug_lineDuration", 3 ); + if ( getdvar( "bots_main_debug_lineDuration" ) == "" ) + { + setdvar( "bots_main_debug_lineDuration", 3 ); + } - if ( getDvar( "bots_main_debug_printDuration" ) == "" ) - setDvar( "bots_main_debug_printDuration", 3 ); + if ( getdvar( "bots_main_debug_printDuration" ) == "" ) + { + setdvar( "bots_main_debug_printDuration", 3 ); + } - if ( getDvar( "bots_main_debug_debugRate" ) == "" ) - setDvar( "bots_main_debug_debugRate", 0.5 ); + if ( getdvar( "bots_main_debug_debugRate" ) == "" ) + { + setdvar( "bots_main_debug_debugRate", 0.5 ); + } - setDvar( "player_sustainAmmo", 1 ); + setdvar( "player_sustainAmmo", 1 ); level.waypoints = []; - level.waypointCount = 0; + level.waypointcount = 0; level waittill( "connected", player ); @@ -88,17 +110,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 takeallweapons(); self.specialty = []; - self giveWeapon( "m16_gl_mp" ); - self SetActionSlot( 3, "altMode" ); - self giveWeapon( "frag_grenade_mp" ); + self giveweapon( "m16_gl_mp" ); + self setactionslot( 3, "altMode" ); + self giveweapon( "frag_grenade_mp" ); self freezecontrols( false ); self thread debug(); @@ -108,7 +130,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() @@ -124,36 +146,46 @@ debug() self endon( "disconnect" ); self endon( "death" ); - self setClientDvar( "com_maxfps", getDvarInt( "bots_main_debug_framerate" ) ); + self setclientdvar( "com_maxfps", getdvarint( "bots_main_debug_framerate" ) ); for ( ;; ) { - wait getDvarFloat( "bots_main_debug_debugRate" ); + wait getdvarfloat( "bots_main_debug_debugRate" ); - 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 ), 1, 1, getDvarInt( "bots_main_debug_lineDuration" ) ); + 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 ), 1, 1, getdvarint( "bots_main_debug_lineDuration" ) ); + } + + if ( getConeDot( wpOrg, myEye, myAngles ) > getdvarfloat( "bots_main_debug_cone" ) ) + { print3d( wpOrg, i, ( 1, 0, 0 ), 2, 1, 6 ); + } - if ( isDefined( level.waypoints[i].angles ) && level.waypoints[i].type != "stand" ) - line( wpOrg, wpOrg + AnglesToForward( level.waypoints[i].angles ) * 64, ( 1, 1, 1 ), 1, 1, getDvarInt( "bots_main_debug_lineDuration" ) ); + if ( isdefined( level.waypoints[ i ].angles ) && level.waypoints[ i ].type != "stand" ) + { + line( wpOrg, wpOrg + anglestoforward( level.waypoints[ i ].angles ) * 64, ( 1, 1, 1 ), 1, 1, getdvarint( "bots_main_debug_lineDuration" ) ); + } } } @@ -163,32 +195,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, 1, getDvarInt( "bots_main_debug_printDuration" ) ); + print3d( level.waypoints[ closest ].origin + ( 0, 0, 35 ), stringChildren, ( 0, 1, 0 ), 2, 1, getdvarint( "bots_main_debug_printDuration" ) ); - print3d( level.waypoints[closest].origin + ( 0, 0, 15 ), level.waypoints[closest].type, ( 0, 1, 0 ), 2, 1, getDvarInt( "bots_main_debug_printDuration" ) ); + print3d( level.waypoints[ closest ].origin + ( 0, 0, 15 ), level.waypoints[ closest ].type, ( 0, 1, 0 ), 2, 1, getdvarint( "bots_main_debug_printDuration" ) ); } } } -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..." ); @@ -196,14 +234,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() ) + { wait 0.05; + } } } @@ -214,24 +254,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; + } } } @@ -242,27 +290,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() ) + { wait 0.05; + } } } @@ -273,16 +331,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; @@ -293,97 +353,113 @@ 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 ); f = BotBuiltinFileOpen( filename, "write" ); if ( f > 0 ) - BotBuiltinWriteLine( f, level.waypointCount ); + { + BotBuiltinWriteLine( f, level.waypointcount ); + } - 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 ); if ( f > 0 ) + { BotBuiltinWriteLine( f, str ); + } } if ( f > 0 ) + { BotBuiltinFileClose( f ); + } - 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; @@ -393,188 +469,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; @@ -583,9 +685,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; @@ -595,16 +697,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 ) @@ -618,20 +720,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_cod4x.gsc b/scripts/bots_adapter_cod4x.gsc index 9b87d54..5c65773 100644 --- a/scripts/bots_adapter_cod4x.gsc +++ b/scripts/bots_adapter_cod4x.gsc @@ -1,17 +1,17 @@ init() { - level.bot_builtins["printconsole"] = ::do_printconsole; - 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["botmoveto"] = ::do_botmoveto; - level.bot_builtins["botmeleeparams"] = ::do_botmeleeparams; - level.bot_builtins["isbot"] = ::do_isbot; - level.bot_builtins["fs_fopen"] = ::do_fs_fopen; - level.bot_builtins["fs_fclose"] = ::do_fs_fclose; - level.bot_builtins["fs_readline"] = ::do_fs_readline; - level.bot_builtins["fs_writeline"] = ::do_fs_writeline; + level.bot_builtins[ "printconsole" ] = ::do_printconsole; + 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[ "botmoveto" ] = ::do_botmoveto; + level.bot_builtins[ "botmeleeparams" ] = ::do_botmeleeparams; + level.bot_builtins[ "isbot" ] = ::do_isbot; + level.bot_builtins[ "fs_fopen" ] = ::do_fs_fopen; + level.bot_builtins[ "fs_fclose" ] = ::do_fs_fclose; + level.bot_builtins[ "fs_readline" ] = ::do_fs_readline; + level.bot_builtins[ "fs_writeline" ] = ::do_fs_writeline; } do_printconsole( s ) @@ -22,17 +22,17 @@ do_printconsole( s ) do_fileexists( file ) { file = "scriptdata/" + file; - return FS_TestFile( file ); + return fs_testfile( file ); } do_botaction( action ) { - self BotAction( action ); + self botaction( action ); } do_botstop() { - self BotStop(); + self botstop(); } do_botmovement( forward, right ) @@ -41,7 +41,7 @@ do_botmovement( forward, right ) do_botmoveto( where ) { - self BotMoveTo( where ); + self botmoveto( where ); } do_botmeleeparams( yaw, dist ) @@ -57,20 +57,20 @@ do_isbot() do_fs_fopen( file, mode ) { file = "scriptdata/" + file; - return FS_FOpen( file, mode ); + return fs_fopen( file, mode ); } do_fs_fclose( fh ) { - FS_FClose( fh ); + fs_fclose( fh ); } do_fs_readline( fh ) { - return FS_ReadLine( fh ); + return fs_readline( fh ); } do_fs_writeline( fh, contents ) { - FS_WriteLine( fh, contents ); + fs_writeline( fh, contents ); }