From ff413d513b6e0b3e07fa6687aa2b2b7520e6a422 Mon Sep 17 00:00:00 2001 From: INeedBots Date: Tue, 2 Mar 2021 00:48:25 -0600 Subject: [PATCH] Added ads aimspeed delay --- main_shared/maps/mp/bots/_bot_internal.gsc | 25 ++++++-- main_shared/maps/mp/bots/_bot_script.gsc | 67 +++++++++++++++++++++- 2 files changed, 86 insertions(+), 6 deletions(-) diff --git a/main_shared/maps/mp/bots/_bot_internal.gsc b/main_shared/maps/mp/bots/_bot_internal.gsc index 3a0bb3e..9066dca 100644 --- a/main_shared/maps/mp/bots/_bot_internal.gsc +++ b/main_shared/maps/mp/bots/_bot_internal.gsc @@ -32,6 +32,8 @@ added() 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 @@ -694,6 +696,8 @@ target() rememberTime = self.pers["bots"]["skill"]["remember_time"]; initReactTime = self.pers["bots"]["skill"]["init_react_time"]; hasTarget = isDefined(self.bot.target); + adsAmount = self PlayerADS(); + adsFovFact = self.pers["bots"]["skill"]["ads_fov_multi"]; if(hasTarget && !isDefined(self.bot.target.entity)) { @@ -702,7 +706,10 @@ target() } // reduce fov if ads'ing - myFov *= 1 - 0.5 * self PlayerADS(); + if (adsAmount > 0) + { + myFov *= 1 - adsFovFact * adsAmount; + } playercount = level.players.size; for(i = -1; i < playercount; i++) @@ -1013,6 +1020,14 @@ aim() eyePos = self getEyePos(); 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) + { + aimspeed *= 1 + adsAimSpeedFact * adsAmount; + } if(isDefined(self.bot.target) && isDefined(self.bot.target.entity)) { @@ -1133,13 +1148,13 @@ aim() //c4 logic here, but doesnt work anyway - canADS = self canAds(dist, curweap); + canADS = (self canAds(dist, curweap) && conedot > 0.65); if (canADS) self thread pressADS(); if (trace_time > reaction_time) { - if((!canADS || self playerads() == 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(); if (isplay) @@ -1170,11 +1185,11 @@ aim() if(!self canFire(curweap) || !self isInRange(dist, curweap)) continue; - canADS = self canAds(dist, curweap); + canADS = (self canAds(dist, curweap) && conedot > 0.65); if (canADS) self thread pressADS(); - if((!canADS || self playerads() == 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(); continue; diff --git a/main_shared/maps/mp/bots/_bot_script.gsc b/main_shared/maps/mp/bots/_bot_script.gsc index c7840ca..c97f6a2 100644 --- a/main_shared/maps/mp/bots/_bot_script.gsc +++ b/main_shared/maps/mp/bots/_bot_script.gsc @@ -275,7 +275,7 @@ difficulty() for(;;) { - wait 1; + wait 5; rankVar = GetDvarInt("bots_skill"); @@ -302,6 +302,8 @@ difficulty() 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; @@ -331,6 +333,8 @@ difficulty() 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; @@ -360,6 +364,8 @@ difficulty() 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; @@ -389,6 +395,8 @@ difficulty() 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; @@ -418,6 +426,8 @@ difficulty() 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; @@ -447,6 +457,8 @@ difficulty() 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; @@ -476,6 +488,8 @@ difficulty() 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; @@ -997,6 +1011,7 @@ start_bot_threads() self thread bot_use_tube_think(); self thread bot_use_grenade_think(); self thread bot_use_equipment_think(); + self thread bot_watch_think_mw2(); } // obj @@ -2452,6 +2467,52 @@ bot_weapon_think() } } +/* + Bots play mw2 +*/ +bot_watch_think_mw2() +{ + self endon("disconnect"); + self endon("death"); + level endon("game_ended"); + + for (;;) + { + wait randomIntRange(1, 4); + + if(self BotIsFrozen()) + continue; + + if(self isDefusing() || self isPlanting()) + continue; + + if (self InLastStand()) + continue; + + if (self HasThreat()) + continue; + + tube = self getValidTube(); + if (!isDefined(tube)) + { + if (self GetAmmoCount("bazooka_mp")) + tube = "bazooka_mp"; + else + continue; + } + + if (self GetCurrentWeapon() == tube) + continue; + + chance = self.pers["bots"]["behavior"]["nade"]; + + if (randomInt(100) > chance) + continue; + + self ChangeToWeapon(tube); + } +} + /* Bot logic for killstreaks. */ @@ -2549,8 +2610,12 @@ bot_killstreak_think() if (isAirstrikePos && !isDefined( level.artilleryInProgress )) { + self BotFreezeControls(true); + self notify( "confirm_location", targetPos ); wait 1; + + self BotFreezeControls(false); } self thread changeToWeapon(curWeap);