diff --git a/userraw/maps/mp/bots/_bot_internal.gsc b/userraw/maps/mp/bots/_bot_internal.gsc index 50a07ad..0987588 100644 --- a/userraw/maps/mp/bots/_bot_internal.gsc +++ b/userraw/maps/mp/bots/_bot_internal.gsc @@ -925,7 +925,7 @@ onLastStand() while (!self inLastStand()) wait 0.05; - if (!self inFinalStand()) + if (!self inFinalStand() && !self IsUsingRemote()) { pistol = undefined; weaponsList = self GetWeaponsListPrimaries(); @@ -1015,10 +1015,13 @@ watchUsingAc130() while (isDefined(level.ac130Player) && level.ac130player == self) { + self SetWeaponAmmoClip("ac130_105mm_mp", 999); self setspawnweapon("ac130_105mm_mp"); wait 3+randomInt(3); + self SetWeaponAmmoClip("ac130_40mm_mp", 999); self setspawnweapon("ac130_40mm_mp"); wait 4+randomInt(3); + self SetWeaponAmmoClip("ac130_25mm_mp", 999); self setspawnweapon("ac130_25mm_mp"); wait 4+randomInt(3); } @@ -1060,7 +1063,7 @@ grenade_danager() if (self.bot.isfrozen || level.gameEnded || !gameFlag( "prematch_done" )) continue; - if(self.bot.isfraggingafter || self.bot.climbing || self.bot.knifingafter) + if(self.bot.isfraggingafter || self.bot.climbing || self.bot.knifingafter || self IsUsingRemote()) continue; curWeap = self GetCurrentWeapon(); @@ -1705,7 +1708,7 @@ aim() knifeDist = level.bots_maxKnifeDistance; if (self _hasPerk("specialty_extendedmelee")) knifeDist *= 1.4; - if((isplay || target.classname == "misc_turret") && !self.bot.knifing && conedot > 0.9 && dist < knifeDist && trace_time > reaction_time) + if((isplay || target.classname == "misc_turret") && !self.bot.knifing && conedot > 0.9 && dist < knifeDist && trace_time > reaction_time && !usingRemote) { self thread knife(target, knifeDist); continue; @@ -2120,7 +2123,7 @@ knife(ent, knifeDist) self endon("death"); level endon ( "game_ended" ); - if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen) + if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen || self IsUsingRemote()) return; curWeap = self GetCurrentWeapon(); @@ -2281,7 +2284,7 @@ reload() { cur = self GetCurrentWeapon(); - if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen) + if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen || self IsUsingRemote()) return; self SetWeaponAmmoStock(cur, self GetWeaponAmmoClip(cur) + self GetWeaponAmmoStock(cur)); @@ -2298,7 +2301,7 @@ botThrowGrenade(grenName) if (self inLastStand() && !self _hasPerk("specialty_laststandoffhand") && !self inFinalStand()) return "laststand"; - if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen || self.bot.climbing) + if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen || self.bot.climbing || self IsUsingRemote()) return "can't move"; curWeap = self GetCurrentWeapon(); @@ -2417,6 +2420,9 @@ jump() */ stand() { + if (self IsUsingRemote()) + return; + self.bot.stance = "stand"; } @@ -2425,6 +2431,9 @@ stand() */ crouch() { + if (self IsUsingRemote()) + return; + self.bot.stance = "crouch"; } @@ -2433,6 +2442,9 @@ crouch() */ prone() { + if (self IsUsingRemote()) + return; + curWeap = self GetCurrentWeapon(); if (curWeap == "riotshield_mp") diff --git a/userraw/maps/mp/bots/_bot_script.gsc b/userraw/maps/mp/bots/_bot_script.gsc index 67b0736..ce9301c 100644 --- a/userraw/maps/mp/bots/_bot_script.gsc +++ b/userraw/maps/mp/bots/_bot_script.gsc @@ -1013,12 +1013,53 @@ onBotSpawned() } } +getKillstreakTargetLocation() +{ + location = undefined; + players = []; + for(i = level.players.size - 1; i >= 0; i--) + { + player = level.players[i]; + + if(player == self) + continue; + if(!isDefined(player.team)) + continue; + if(level.teamBased && self.team == player.team) + continue; + if(player.sessionstate != "playing") + continue; + if(!isReallyAlive(player)) + continue; + if(player _hasPerk("specialty_coldblooded")) + continue; + if(!bulletTracePassed(player.origin, player.origin+(0,0,2048), false, player) && self.pers["bots"]["skill"]["base"] > 3) + continue; + + players[players.size] = player; + } + + target = random(players); + + if(isDefined(target)) + location = 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) + location = self.origin + (randomIntRange(-512, 512), randomIntRange(-512, 512), 0); + + return location; +} + bot_killstreak_think() { self endon("disconnect"); self endon("death"); level endon("game_ended"); + if (randomInt(2)) + self maps\mp\killstreaks\_killstreaks::tryGiveKillstreak("ac130"); + else + self maps\mp\killstreaks\_killstreaks::tryGiveKillstreak("helicopter_minigun"); + for (;;) { wait randomIntRange(1, 3); @@ -1048,16 +1089,121 @@ bot_killstreak_think() if (self botIsClimbing()) continue; + if (self IsUsingRemote()) + continue; + streakName = self.pers["killstreaks"][0].streakName; + if (level.inGracePeriod && maps\mp\killstreaks\_killstreaks::deadlyKillstreak(streakName)) + continue; + ksWeap = maps\mp\killstreaks\_killstreaks::getKillstreakWeapon( streakName ); if (maps\mp\killstreaks\_killstreaks::isRideKillstreak(streakName) || maps\mp\killstreaks\_killstreaks::isCarryKillstreak(streakName)) { - // sentry - // predator_missile - // ac130 - // helicopter_minigun + if (self inLastStand()) + continue; + + if (streakName == "sentry") + { + myEye = self GetEye(); + angles = self GetPlayerAngles(); + + forwardTrace = bulletTrace(myEye, myEye + AnglesToForward(angles)*1024, false, self); + + if (Distance(self.origin, forwardTrace["position"]) < 1000 && self.pers["bots"]["skill"]["base"] > 3) + continue; + + self BotFreezeControls(true); + wait 1; + + sentryGun = maps\mp\killstreaks\_autosentry::createSentryForPlayer( "sentry_minigun", self ); + sentryGun maps\mp\killstreaks\_autosentry::sentry_setPlaced(); + self notify( "sentry_placement_finished", sentryGun ); + + self maps\mp\_matchdata::logKillstreakEvent( "sentry", self.origin ); + + self maps\mp\killstreaks\_killstreaks::usedKillstreak( "sentry", true ); + self maps\mp\killstreaks\_killstreaks::shuffleKillStreaksFILO( "sentry" ); + self maps\mp\killstreaks\_killstreaks::giveOwnedKillstreakItem(); + wait 1; + + self BotFreezeControls(false); + } + else if (streakName == "predator_missile") + { + location = self getKillstreakTargetLocation(); + + if(!isDefined(location)) + continue; + + self setUsingRemote( "remotemissile" ); + self setSpawnWeapon(ksWeap); + self BotFreezeControls(true); + wait 1; + + self maps\mp\killstreaks\_killstreaks::usedKillstreak( "predator_missile", true ); + self maps\mp\killstreaks\_killstreaks::shuffleKillStreaksFILO( "predator_missile" ); + self maps\mp\killstreaks\_killstreaks::giveOwnedKillstreakItem(); + + rocket = MagicBullet( "remotemissile_projectile_mp", self.origin + (0.0,0.0,7000.0 - (self.pers["bots"]["skill"]["base"] * 400)), location, self ); + rocket.lifeId = self.pers["killstreaks"][0].lifeId; + rocket.type = "remote"; + + rocket thread maps\mp\gametypes\_weapons::AddMissileToSightTraces( self.pers["team"] ); + rocket thread maps\mp\killstreaks\_remotemissile::handleDamage(); + thread maps\mp\killstreaks\_remotemissile::MissileEyes( self, rocket ); + + self waittill( "stopped_using_remote" ); + + wait 1; + self setSpawnWeapon(curWeap); + self BotFreezeControls(false); + } + else if (streakName == "ac130") + { + if ( isDefined( level.ac130player ) || level.ac130InUse ) + continue; + + level.ac130InUse = true; + self setUsingRemote( "ac130" ); + self setSpawnWeapon(ksWeap); + + self maps\mp\_matchdata::logKillstreakEvent( "ac130", self.origin ); + + self.ac130LifeId = self.pers["killstreaks"][0].lifeId; + level.ac130.planeModel.crashed = undefined; + + thread maps\mp\killstreaks\_ac130::setAC130Player( self ); + + self maps\mp\killstreaks\_killstreaks::usedKillstreak( "ac130", true ); + self maps\mp\killstreaks\_killstreaks::shuffleKillStreaksFILO( "ac130" ); + self maps\mp\killstreaks\_killstreaks::giveOwnedKillstreakItem(); + + self waittill( "stopped_using_remote" ); + + wait 1; + self setSpawnWeapon(curWeap); + } + else if (streakName == "helicopter_minigun") + { + if (isDefined( level.chopper )) + continue; + + self setUsingRemote( "helicopter_minigun" ); + self setSpawnWeapon(ksWeap); + + self thread maps\mp\killstreaks\_helicopter::startHelicopter(self.pers["killstreaks"][0].lifeId, "minigun"); + + self maps\mp\killstreaks\_killstreaks::usedKillstreak( "helicopter_minigun", true ); + self maps\mp\killstreaks\_killstreaks::shuffleKillStreaksFILO( "helicopter_minigun" ); + self maps\mp\killstreaks\_killstreaks::giveOwnedKillstreakItem(); + + self waittill( "stopped_using_remote" ); + + wait 1; + self setSpawnWeapon(curWeap); + } } else { @@ -1077,7 +1223,7 @@ bot_killstreak_think() forwardTrace = bulletTrace(myEye, myEye + AnglesToForward(angles)*256, false, self); - if (Distance(self.origin, forwardTrace["position"]) < 96) + if (Distance(self.origin, forwardTrace["position"]) < 96 && self.pers["bots"]["skill"]["base"] > 3) continue; if (!bulletTracePassed(forwardTrace["position"], forwardTrace["position"]+(0,0,2048), false, self) && self.pers["bots"]["skill"]["base"] > 3) @@ -1108,36 +1254,7 @@ bot_killstreak_think() case "harrier_airstrike": case "stealth_airstrike": case "precision_airstrike": - players = []; - for(i = level.players.size - 1; i >= 0; i--) - { - player = level.players[i]; - - if(player == self) - continue; - if(!isDefined(player.team)) - continue; - if(level.teamBased && self.team == player.team) - continue; - if(player.sessionstate != "playing") - continue; - if(!isReallyAlive(player)) - continue; - if(player _hasPerk("specialty_coldblooded")) - continue; - if(!bulletTracePassed(player.origin, player.origin+(0,0,512), false, player) && self.pers["bots"]["skill"]["base"] > 3) - continue; - - players[players.size] = player; - } - - target = random(players); - - if(isDefined(target)) - location = 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) - location = self.origin + (randomIntRange(-512, 512), randomIntRange(-512, 512), 0); - + location = self getKillstreakTargetLocation(); directionYaw = randomInt(360); if (!isDefined(location))