diff --git a/main_shared/maps/mp/bots/_bot_internal.gsc b/main_shared/maps/mp/bots/_bot_internal.gsc index f2ec211..5516e06 100644 --- a/main_shared/maps/mp/bots/_bot_internal.gsc +++ b/main_shared/maps/mp/bots/_bot_internal.gsc @@ -30,8 +30,7 @@ added() self.pers["bots"]["skill"]["aim_offset_time"] = 1; self.pers["bots"]["skill"]["aim_offset_amount"] = 1; self.pers["bots"]["skill"]["bone_update_interval"] = 0.05; - self.pers["bots"]["skill"]["bones"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_head"; + self.pers["bots"]["skill"]["bones"] = "j_head"; self.pers["bots"]["behavior"] = []; self.pers["bots"]["behavior"]["strafe"] = 50; @@ -117,6 +116,7 @@ resetBotVars() self.bot.targets = []; self.bot.target_this_frame = undefined; self.bot.after_target = undefined; + self.bot.after_target_pos = undefined; self.bot.script_aimpos = undefined; @@ -470,15 +470,18 @@ updateBones() { self endon("disconnect"); self endon("death"); + + bones = strtok(self.pers["bots"]["skill"]["bones"], ","); + waittime = self.pers["bots"]["skill"]["bone_update_interval"]; for(;;) { - self waittill_notify_or_timeout("new_enemy", self.pers["bots"]["skill"]["bone_update_interval"]); + self waittill_notify_or_timeout("new_enemy", waittime); if (!isDefined(self.bot.target)) continue; - self.bot.target.bone = random(self.pers["bots"]["skill"]["bones"]); + self.bot.target.bone = random(bones); } } @@ -513,10 +516,12 @@ updateAimOffset(obj) { if (!isDefined(obj.aim_offset_base)) { - if (self.pers["bots"]["skill"]["aim_offset_amount"] > 0) - obj.aim_offset_base = (randomFloatRange(0-self.pers["bots"]["skill"]["aim_offset_amount"], self.pers["bots"]["skill"]["aim_offset_amount"]), - randomFloatRange(0-self.pers["bots"]["skill"]["aim_offset_amount"], self.pers["bots"]["skill"]["aim_offset_amount"]), - randomFloatRange(0-self.pers["bots"]["skill"]["aim_offset_amount"], 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)); else obj.aim_offset_base = (0,0,0); } @@ -592,6 +597,8 @@ target() playercount = level.players.size; for(i = -1; i < playercount; i++) { + obj = undefined; + if (i == -1) { if(!isDefined(self.bot.script_target)) @@ -699,6 +706,9 @@ target() } } } + + if (!isdefined(obj)) + continue; if(theTime - obj.time < initReactTime) continue; @@ -846,9 +856,8 @@ start_bot_after_target(who) self endon("disconnect"); self endon("death"); - self.bot.after_target = spawnStruct(); - self.bot.after_target.target = who; - self.bot.after_target.last_pos = who.origin; + self.bot.after_target = who; + self.bot.after_target_pos = who.origin; self notify("kill_after_target"); self endon("kill_after_target"); @@ -927,7 +936,7 @@ aim() else if(weaponClass(curweap) == "grenade") nadeAimOffset = dist/16000; - if(no_trace_time && (!isDefined(self.bot.after_target) || self.bot.after_target.target != target)) + if(no_trace_time && (!isDefined(self.bot.after_target) || self.bot.after_target != target)) { if(no_trace_time > no_trace_ads_time) { @@ -1020,7 +1029,7 @@ aim() if (isDefined(self.bot.after_target)) { nadeAimOffset = 0; - last_pos = self.bot.after_target.last_pos; + last_pos = self.bot.after_target_pos; dist = DistanceSquared(self.origin, last_pos); if(self.bot.isfraggingafter || self.bot.issmokingafter) diff --git a/main_shared/maps/mp/bots/_bot_script.gsc b/main_shared/maps/mp/bots/_bot_script.gsc index 992a151..15b44f6 100644 --- a/main_shared/maps/mp/bots/_bot_script.gsc +++ b/main_shared/maps/mp/bots/_bot_script.gsc @@ -278,10 +278,7 @@ difficulty() 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"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][1] = "j_ankle_le"; - self.pers["bots"]["skill"]["bones"][2] = "j_ankle_ri"; + self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_ankle_le,j_ankle_ri"; self.pers["bots"]["behavior"]["strafe"] = 0; self.pers["bots"]["behavior"]["nade"] = 10; @@ -309,11 +306,7 @@ difficulty() 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"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][1] = "j_ankle_le"; - self.pers["bots"]["skill"]["bones"][2] = "j_ankle_ri"; - self.pers["bots"]["skill"]["bones"][3] = "j_head"; + self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_ankle_le,j_ankle_ri,j_head"; self.pers["bots"]["behavior"]["strafe"] = 10; self.pers["bots"]["behavior"]["nade"] = 15; @@ -341,12 +334,7 @@ difficulty() 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"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][1] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][2] = "j_ankle_le"; - self.pers["bots"]["skill"]["bones"][3] = "j_ankle_ri"; - self.pers["bots"]["skill"]["bones"][4] = "j_head"; + self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head"; self.pers["bots"]["behavior"]["strafe"] = 20; self.pers["bots"]["behavior"]["nade"] = 20; @@ -374,13 +362,7 @@ difficulty() 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"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][1] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][2] = "j_ankle_le"; - self.pers["bots"]["skill"]["bones"][3] = "j_ankle_ri"; - self.pers["bots"]["skill"]["bones"][4] = "j_head"; - self.pers["bots"]["skill"]["bones"][5] = "j_head"; + self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head,j_head"; self.pers["bots"]["behavior"]["strafe"] = 30; self.pers["bots"]["behavior"]["nade"] = 25; @@ -408,11 +390,7 @@ difficulty() 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"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][1] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][2] = "j_head"; - self.pers["bots"]["skill"]["bones"][3] = "j_head"; + self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_head"; self.pers["bots"]["behavior"]["strafe"] = 40; self.pers["bots"]["behavior"]["nade"] = 35; @@ -440,10 +418,7 @@ difficulty() 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"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][1] = "j_head"; - self.pers["bots"]["skill"]["bones"][2] = "j_head"; + self.pers["bots"]["skill"]["bones"] = "j_spineupper,j_head,j_head"; self.pers["bots"]["behavior"]["strafe"] = 50; self.pers["bots"]["behavior"]["nade"] = 45; @@ -471,8 +446,7 @@ difficulty() 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"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_head"; + self.pers["bots"]["skill"]["bones"] = "j_head"; self.pers["bots"]["behavior"]["strafe"] = 65; self.pers["bots"]["behavior"]["nade"] = 65; @@ -519,11 +493,7 @@ set_diff() 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"] = []; - self.pers["bots"]["skill"]["bones"][0] = "j_head"; - self.pers["bots"]["skill"]["bones"][1] = "j_spineupper"; - self.pers["bots"]["skill"]["bones"][2] = "j_ankle_ri"; - self.pers["bots"]["skill"]["bones"][3] = "j_ankle_le"; + 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);