diff --git a/userraw/maps/mp/bots/_bot_script.gsc b/userraw/maps/mp/bots/_bot_script.gsc index 8ea6ea5..b3c2252 100644 --- a/userraw/maps/mp/bots/_bot_script.gsc +++ b/userraw/maps/mp/bots/_bot_script.gsc @@ -1268,31 +1268,6 @@ set_diff() } } -/* - When the bot spawns. -*/ -onSpawned() -{ - self endon("disconnect"); - - for(;;) - { - self waittill("spawned_player"); - - if(randomInt(100) <= self.pers["bots"]["behavior"]["class"]) - self.bot_change_class = undefined; - - self.bot_lock_goal = false; - self.bot_oma_class = undefined; - self.help_time = undefined; - self.bot_was_follow_script_update = undefined; - self.bot_stuck_on_carepackage = undefined; - - if (getDvarInt("bots_play_obj")) - self thread bot_dom_cap_think(); - } -} - /* Allows the bot to spawn when force respawn is disabled Watches when the bot dies @@ -1329,6 +1304,123 @@ onGiveLoadout() } } +/* + When the bot spawns. +*/ +onSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("spawned_player"); + + if(randomInt(100) <= self.pers["bots"]["behavior"]["class"]) + self.bot_change_class = undefined; + + self.bot_lock_goal = false; + self.bot_oma_class = undefined; + self.help_time = undefined; + self.bot_was_follow_script_update = undefined; + self.bot_stuck_on_carepackage = undefined; + + if (getDvarInt("bots_play_obj")) + self thread bot_dom_cap_think(); + } +} + +/* + When the bot spawned, after the difficulty wait. Start the logic for the bot. +*/ +onBotSpawned() +{ + self endon("disconnect"); + level endon("game_ended"); + + for(;;) + { + self waittill("bot_spawned"); + + self thread start_bot_threads(); + } +} + +/* + Starts all the bot thinking +*/ +start_bot_threads() +{ + self endon("disconnect"); + level endon("game_ended"); + self endon("death"); + + gameFlagWait("prematch_done"); + + // inventory usage + if (getDvarInt("bots_play_killstreak")) + self thread bot_killstreak_think(); + + self thread bot_weapon_think(); + self thread bot_perk_think(); + + // script targeting + if (getDvarInt("bots_play_target_other")) + { + self thread bot_target_vehicle(); + self thread bot_equipment_kill_think(); + self thread bot_turret_think(); + } + + // airdrop + if (getDvarInt("bots_play_take_carepackages")) + { + self thread bot_watch_stuck_on_crate(); + self thread bot_crate_think(); + } + + // awareness + self thread bot_revenge_think(); + self thread bot_uav_think(); + self thread bot_listen_to_steps(); + self thread follow_target(); + + // camp and follow + if (getDvarInt("bots_play_camp")) + { + self thread bot_think_follow(); + self thread bot_think_camp(); + } + + // nades + if (getDvarInt("bots_play_nade")) + { + self thread bot_jav_loc_think(); + self thread bot_use_tube_think(); + self thread bot_use_grenade_think(); + self thread bot_use_equipment_think(); + self thread bot_watch_riot_weapons(); + } + + // obj + if (getDvarInt("bots_play_obj")) + { + self thread bot_dom_def_think(); + self thread bot_dom_spawn_kill_think(); + + self thread bot_hq(); + + self thread bot_cap(); + + self thread bot_sab(); + + self thread bot_sd_defenders(); + self thread bot_sd_attackers(); + + self thread bot_dem_attackers(); + self thread bot_dem_defenders(); + } +} + /* Increments the number of bots approching the obj, decrements when needed Used for preventing too many bots going to one obj, or unreachable objs @@ -1665,95 +1757,113 @@ bot_use_bomb(bomb) } /* - When the bot spawned, after the difficulty wait. Start the logic for the bot. + Fires the bots weapon until told to stop */ -onBotSpawned() +fire_current_weapon() { + self endon("death"); self endon("disconnect"); - level endon("game_ended"); - - for(;;) + self endon("weapon_change"); + self endon("stop_firing_weapon"); + + for (;;) { - self waittill("bot_spawned"); - - self thread start_bot_threads(); + self thread BotPressAttack(0.05); + wait 0.1; } } /* - Starts all the bot thinking + Changes to the weap */ -start_bot_threads() +changeToWeapon(weap) { self endon("disconnect"); - level endon("game_ended"); self endon("death"); + level endon("game_ended"); + + if (!self HasWeapon(weap)) + return false; + + if (self GetCurrentWeapon() == weap) + return true; + + self BotChangeToWeapon(weap); + + self waittill_any_timeout(5, "weapon_change"); + + return (self GetCurrentWeapon() == weap); +} + +/* + Bots throw the grenade +*/ +botThrowGrenade(nade, time) +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + + if (!self GetAmmoCount(nade)) + return false; + + if (isSecondaryGrenade(nade)) + self thread BotPressSmoke(time); + else + self thread BotPressFrag(time); + + ret = self waittill_any_timeout(5, "grenade_fire"); + + return (ret == "grenade_fire"); +} + +/* + Gets the object thats the closest in the array +*/ +bot_array_nearest_curorigin(array) +{ + result = undefined; - gameFlagWait("prematch_done"); + for(i = 0; i < array.size; i++) + if(!isDefined(result) || DistanceSquared(self.origin,array[i].curorigin) < DistanceSquared(self.origin,result.curorigin)) + result = array[i]; + + return result; +} - // inventory usage - if (getDvarInt("bots_play_killstreak")) - self thread bot_killstreak_think(); +/* + Returns an weapon thats a rocket with ammo +*/ +getRocketAmmo() +{ + answer = self getLockonAmmo(); - self thread bot_weapon_think(); - self thread bot_perk_think(); + if (isDefined(answer)) + return answer; - // script targeting - if (getDvarInt("bots_play_target_other")) - { - self thread bot_target_vehicle(); - self thread bot_equipment_kill_think(); - self thread bot_turret_think(); - } + if(self getAmmoCount("rpg_mp")) + answer = "rpg_mp"; - // airdrop - if (getDvarInt("bots_play_take_carepackages")) - { - self thread bot_watch_stuck_on_crate(); - self thread bot_crate_think(); - } + return answer; +} - // awareness - self thread bot_revenge_think(); - self thread bot_uav_think(); - self thread bot_listen_to_steps(); - self thread follow_target(); +/* + Returns a weapon thats lockon with ammo +*/ +getLockonAmmo() +{ + answer = undefined; + + if(self getAmmoCount("at4_mp")) + answer = "at4_mp"; + + if(self getAmmoCount("stinger_mp")) + answer = "stinger_mp"; - // camp and follow - if (getDvarInt("bots_play_camp")) - { - self thread bot_think_follow(); - self thread bot_think_camp(); - } + if(self getAmmoCount("javelin_mp")) + answer = "javelin_mp"; - // nades - if (getDvarInt("bots_play_nade")) - { - self thread bot_jav_loc_think(); - self thread bot_use_tube_think(); - self thread bot_use_grenade_think(); - self thread bot_use_equipment_think(); - self thread bot_watch_riot_weapons(); - } - - // obj - if (getDvarInt("bots_play_obj")) - { - self thread bot_dom_def_think(); - self thread bot_dom_spawn_kill_think(); - - self thread bot_hq(); - - self thread bot_cap(); - - self thread bot_sab(); - - self thread bot_sd_defenders(); - self thread bot_sd_attackers(); - - self thread bot_dem_attackers(); - self thread bot_dem_defenders(); - } + return answer; } /* @@ -2247,23 +2357,6 @@ bot_use_tube_think() } } -/* - Fires the bots weapon until told to stop -*/ -fire_current_weapon() -{ - self endon("death"); - self endon("disconnect"); - self endon("weapon_change"); - self endon("stop_firing_weapon"); - - for (;;) - { - self thread BotPressAttack(0.05); - wait 0.1; - } -} - /* Bots thinking of using claymores and TIs */ @@ -2498,28 +2591,6 @@ bot_use_grenade_think() } } -/* - Changes to the weap -*/ -changeToWeapon(weap) -{ - self endon("disconnect"); - self endon("death"); - level endon("game_ended"); - - if (!self HasWeapon(weap)) - return false; - - if (self GetCurrentWeapon() == weap) - return true; - - self BotChangeToWeapon(weap); - - self waittill_any_timeout(5, "weapon_change"); - - return (self GetCurrentWeapon() == weap); -} - /* Bots will use gremades/wweapons while having a target while using a shield */ @@ -2592,28 +2663,6 @@ bot_watch_riot_weapons() } } -/* - Bots throw the grenade -*/ -botThrowGrenade(nade, time) -{ - self endon("disconnect"); - self endon("death"); - level endon("game_ended"); - - if (!self GetAmmoCount(nade)) - return false; - - if (isSecondaryGrenade(nade)) - self thread BotPressSmoke(time); - else - self thread BotPressFrag(time); - - ret = self waittill_any_timeout(5, "grenade_fire"); - - return (ret == "grenade_fire"); -} - /* BOts thinking of using javelins */ @@ -3489,41 +3538,6 @@ bot_weapon_think() } } -/* - Returns an weapon thats a rocket with ammo -*/ -getRocketAmmo() -{ - answer = self getLockonAmmo(); - - if (isDefined(answer)) - return answer; - - if(self getAmmoCount("rpg_mp")) - answer = "rpg_mp"; - - return answer; -} - -/* - Returns a weapon thats lockon with ammo -*/ -getLockonAmmo() -{ - answer = undefined; - - if(self getAmmoCount("at4_mp")) - answer = "at4_mp"; - - if(self getAmmoCount("stinger_mp")) - answer = "stinger_mp"; - - if(self getAmmoCount("javelin_mp")) - answer = "javelin_mp"; - - return answer; -} - /* Bots think when to target vehicles */ @@ -4883,20 +4897,6 @@ bot_sab() } } -/* - Gets the object thats the closest in the array -*/ -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]; - - return result; -} - /* Bots play sd defenders */