[ZM] Updated bo2_zm_bots
-
Updated code bot now buy weapons for ammo replenished
-
Nice
-
Is there anyway to mix this script:
bot_buy_box()
{
if(self maps\mp\zombies_zm_laststand::player_is_in_laststand())
return;if(!isDefined(level.chests) || level.chests.size == 0) return; current_box = level.chests[level.chest_index]; if(!isDefined(current_box)) return; dist = Distance(current_box.origin, self.origin); // Only try to use box if we have enough points and aren't too far if(self.score >= 1900 && dist < 150) { // Check if box is available if(!is_true(current_box._box_open) && !is_true(current_box._box_opened_by_fire_sale) && !flag("moving_chest_now")) { if(FindPath(self.origin, current_box.origin, undefined, 0, 1)) { // Move to box if not already there if(dist > 75) { self AddGoal(current_box.origin, 50, 2, "boxBuy"); return; } // Use the box when close enough self maps\mp\zombies\_zm_score::minus_to_player_score(950); current_box notify("trigger", self); // Wait for weapon to appear and box to fully open wait 4; // Try to grab weapon multiple times to ensure it's picked up for(i = 0; i < 3; i++) { if(is_true(current_box._box_open)) { current_box notify("trigger", self); self UseButtonPressed(); wait 0.5; // Check if weapon was actually taken if(!is_true(current_box._box_open)) return; } wait 0.5; } } } } // Clean up any remaining box goal if(self hasgoal("boxBuy")) self cancelgoal("boxBuy");
}
With this one:
// Improved weapon selection logic
bot_should_take_weapon(boxWeapon, currentWeapon)
{
if(!isDefined(boxWeapon))
return false;// Check if we already have this weapon if(self HasWeapon(boxWeapon)) return false; // Always take wonder weapons if(IsSubStr(boxWeapon, "raygun") || IsSubStr(boxWeapon, "thunder") || IsSubStr(boxWeapon, "wave") || IsSubStr(boxWeapon, "mark2") || IsSubStr(boxWeapon, "tesla")) { return true; } // Define weapon tiers for better decision making tier1_weapons = array("raygun_", "thunder", "wave_gun", "mark2", "tesla"); tier2_weapons = array("galil", "an94", "hamr", "rpd", "lsat", "dsr50"); tier3_weapons = array("mp5k", "pdw57", "mtar", "mp40", "ak74u", "qcw05"); tier4_weapons = array("m14", "870mcs", "r870", "olympia", "fnfal"); // Track if current weapon is in specific tier currentIsTier1 = false; currentIsTier2 = false; currentIsTier3 = false; // Check current weapon tier foreach(weapon in tier1_weapons) { if(IsSubStr(currentWeapon, weapon)) { currentIsTier1 = true; break; } } if(!currentIsTier1) { foreach(weapon in tier2_weapons) { if(IsSubStr(currentWeapon, weapon)) { currentIsTier2 = true; break; } } } if(!currentIsTier1 && !currentIsTier2) { foreach(weapon in tier3_weapons) { if(IsSubStr(currentWeapon, weapon)) { currentIsTier3 = true; break; } } } // Don't take bad weapons like snipers or launchers (with small chance for variety) if(IsSubStr(boxWeapon, "sniper") || IsSubStr(boxWeapon, "launcher") || IsSubStr(boxWeapon, "knife") || (IsSubStr(boxWeapon, "ballistic") && !IsSubStr(boxWeapon, "ballistic_knife"))) { return (randomfloat(1) < 0.15); // 15% chance } // Check box weapon tier boxIsTier2 = false; boxIsTier3 = false; boxIsTier4 = false; foreach(weapon in tier2_weapons) { if(IsSubStr(boxWeapon, weapon)) { boxIsTier2 = true; break; } } if(!boxIsTier2) { foreach(weapon in tier3_weapons) { if(IsSubStr(boxWeapon, weapon)) { boxIsTier3 = true; break; } } } if(!boxIsTier2 && !boxIsTier3) { foreach(weapon in tier4_weapons) { if(IsSubStr(boxWeapon, weapon)) { boxIsTier4 = true; break; } } } // Decision logic based on tiers and round number if(currentIsTier1) { // Already have a wonder weapon, only take another if it's a different one // For example, allow taking thunder gun when already having raygun foreach(weapon in tier1_weapons) { if(IsSubStr(boxWeapon, weapon) && !IsSubStr(currentWeapon, weapon)) { // 70% chance to take another wonder weapon return (randomfloat(1) < 0.7); } } return false; // Don't replace wonder weapon with non-wonder weapon } // Have tier 2 weapon already if(currentIsTier2) { if(boxIsTier2) { // 50% chance to swap between tier 2 weapons for variety return (randomfloat(1) < 0.5); } else if(boxIsTier3 || boxIsTier4) { // Almost never downgrade from tier 2 return (randomfloat(1) < 0.1); } // For unclassified weapons, low chance return (randomfloat(1) < 0.2); } // Have tier 3 weapon already if(currentIsTier3) { if(boxIsTier2) { // Always upgrade to tier 2 return true; } else if(boxIsTier3) { // 60% chance to swap between tier 3 for variety return (randomfloat(1) < 0.6); } else if(boxIsTier4) { // Don't downgrade return (randomfloat(1) < 0.15); } } // Round-based logic - in early rounds take most weapons if(level.round_number <= 5) { return true; } // Mid rounds - prefer at least tier 3 else if(level.round_number <= 15) { if(boxIsTier2 || boxIsTier3) return true; else return (randomfloat(1) < 0.5); // 50% chance for other weapons } // Late rounds - generally only take tier 2 else { if(boxIsTier2) return true; else if(boxIsTier3) return (randomfloat(1) < 0.7); // 70% chance for tier 3 else return (randomfloat(1) < 0.3); // 30% chance for other weapons } // Default case - 50/50 chance return (randomfloat(1) < 0.5);
}