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);
}