diff --git a/main_shared/maps/mp/bots/_bot_internal.gsc b/main_shared/maps/mp/bots/_bot_internal.gsc index 8dbb1da..e829b3b 100644 --- a/main_shared/maps/mp/bots/_bot_internal.gsc +++ b/main_shared/maps/mp/bots/_bot_internal.gsc @@ -155,6 +155,7 @@ resetBotVars() self.bot.is_cur_full_auto = false; self.bot.cur_weap_dist_multi = 1; + self.bot.is_cur_sniper = false; self.bot.rand = randomInt(100); @@ -300,6 +301,20 @@ SetWeaponDistMulti(weap) } } +/* + Is the weap a sniper +*/ +IsWeapSniper(weap) +{ + if (weap == "none") + return false; + + if (maps\mp\gametypes\_missions::getWeaponClass(weap) != "weapon_sniper") + return false; + + return true; +} + /* The hold breath thread. */ @@ -363,6 +378,7 @@ onWeaponChange() weap = self GetCurrentWeapon(); self.bot.is_cur_full_auto = WeaponIsFullAuto(weap); self.bot.cur_weap_dist_multi = SetWeaponDistMulti(weap); + self.bot.is_cur_sniper = IsWeapSniper(weap); if (weap != "none") self changeToWeap(weap); @@ -372,6 +388,7 @@ onWeaponChange() self.bot.is_cur_full_auto = WeaponIsFullAuto(newWeapon); self.bot.cur_weap_dist_multi = SetWeaponDistMulti(weap); + self.bot.is_cur_sniper = IsWeapSniper(weap); if (newWeapon == "none") { @@ -412,7 +429,18 @@ reload_watch() { self waittill("reload_start"); self.bot.isreloading = true; - self waittill_notify_or_timeout("reload", 7.5); + + while(true) + { + ret = self waittill_any_timeout(7.5, "reload"); + + if (ret == "timeout") + break; + + weap = self GetCurrentWeapon(); + if (self GetWeaponAmmoClip(weap) >= WeaponClipSize(weap)) + break; + } self.bot.isreloading = false; } } @@ -974,7 +1002,7 @@ watchToLook() if(!self isInRange(self.bot.target.dist, curweap)) continue; - if (weaponClass(curweap) == "sniper") + if (self.bot.is_cur_sniper) continue; if(randomInt(100) > self.pers["bots"]["behavior"]["jump"]) @@ -1132,7 +1160,7 @@ aim() { if (self canAds(dist, curweap)) { - if (weaponClass(curweap) != "sniper" || !self.pers["bots"]["behavior"]["quickscope"]) + if (!self.bot.is_cur_sniper || !self.pers["bots"]["behavior"]["quickscope"]) self thread pressAds(); } } @@ -1192,7 +1220,7 @@ aim() if (canADS) { stopAdsOverride = false; - if (weaponClass(curweap) == "sniper") + 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) stopAdsOverride = true; @@ -1206,7 +1234,7 @@ aim() if (trace_time > reaction_time) { - 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.99 || dist < level.bots_maxKnifeDistance) && getDvarInt("bots_play_fire")) self botFire(); if (isplay) @@ -1241,7 +1269,7 @@ aim() if (canADS) { stopAdsOverride = false; - if (weaponClass(curweap) == "sniper") + 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) stopAdsOverride = true; @@ -1423,7 +1451,7 @@ walk() if(self.bot.target.isplay && self.bot.target.trace_time && self canFire(curweap) && self isInRange(self.bot.target.dist, curweap)) { - if (self InLastStand() || self GetStance() == "prone" || (weaponClass(curweap) == "sniper" && self PlayerADS() > 0)) + if (self InLastStand() || self GetStance() == "prone" || (self.bot.is_cur_sniper && self PlayerADS() > 0)) continue; if(self.bot.target.rand <= self.pers["bots"]["behavior"]["strafe"]) diff --git a/main_shared/maps/mp/bots/_bot_script.gsc b/main_shared/maps/mp/bots/_bot_script.gsc index f13279d..9c6130a 100644 --- a/main_shared/maps/mp/bots/_bot_script.gsc +++ b/main_shared/maps/mp/bots/_bot_script.gsc @@ -263,233 +263,233 @@ difficulty() for(;;) { - wait 5; - rankVar = GetDvarInt("bots_skill"); - if(rankVar == 9) - continue; - - switch(self.pers["bots"]["skill"]["base"]) + if(rankVar != 9) { - 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; + 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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["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; + 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; + } } + + wait 5; } } @@ -939,6 +939,7 @@ start_bot_threads() self thread bot_killstreak_think(); self thread bot_weapon_think(); + self thread doReloadCancel(); // script targeting if (getDvarInt("bots_play_target_other")) @@ -2143,6 +2144,65 @@ bot_revenge_think() } } +/* + Reload cancels +*/ +doReloadCancel() +{ + self endon("disconnect"); + self endon("death"); + + for (;;) + { + self waittill("reload"); + + if(self BotIsFrozen()) + continue; + + if(self isDefusing() || self isPlanting()) + continue; + + if (self InLastStand()) + continue; + + curWeap = self GetCurrentWeapon(); + // check single reloads + if (self GetWeaponAmmoClip(curWeap) < WeaponClipSize(curWeap)) + continue; + + // check difficulty + if (self.pers["bots"]["skill"]["base"] <= 3) + continue; + + // check if got another weapon + weaponslist = self GetWeaponsListPrimaries(); + weap = ""; + while(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 )) + continue; + + if(curWeap == weapon || weapon == "none" || weapon == "") + continue; + + weap = weapon; + break; + } + + if(weap == "") + continue; + + // do the cancel + wait 0.1; + self BotChangeToWeapon(weap); + wait 0.25; + self BotChangeToWeapon(curWeap); + } +} + /* Bot logic for switching weapons. */