Add configurable auto-rearm feature when duck is shot/befriended

- Add 'rearm_on_duck_shot' config option (defaults to true)
- Automatically rearm all disarmed players when any duck is successfully shot
- Also applies when ducks are successfully befriended
- Includes error handling and logging for the rearm process
- Improves game flow by reducing downtime for players who made wild shots
This commit is contained in:
2025-09-24 16:03:03 +01:00
parent 688aca759f
commit f9883758f3
2 changed files with 29 additions and 2 deletions

View File

@@ -15,6 +15,7 @@
"duck_spawn_min": 10, "duck_spawn_min": 10,
"duck_spawn_max": 30, "duck_spawn_max": 30,
"duck_timeout": 60, "duck_timeout": 60,
"befriend_success_rate": 75 "befriend_success_rate": 75,
"rearm_on_duck_shot": true
} }

View File

@@ -169,6 +169,11 @@ class DuckGame:
new_level = self.bot.levels.calculate_player_level(player) new_level = self.bot.levels.calculate_player_level(player)
if new_level != old_level: if new_level != old_level:
self.bot.levels.update_player_magazines(player) self.bot.levels.update_player_magazines(player)
# If config option enabled, rearm all disarmed players when duck is shot
if self.bot.get_config('rearm_on_duck_shot', False):
self._rearm_all_disarmed_players()
self.db.save_database() self.db.save_database()
return { return {
'success': True, 'success': True,
@@ -230,6 +235,10 @@ class DuckGame:
if new_level != old_level: if new_level != old_level:
self.bot.levels.update_player_magazines(player) self.bot.levels.update_player_magazines(player)
# If config option enabled, rearm all disarmed players when duck is befriended
if self.bot.get_config('rearm_on_duck_shot', False):
self._rearm_all_disarmed_players()
self.db.save_database() self.db.save_database()
return { return {
'success': True, 'success': True,
@@ -296,4 +305,21 @@ class DuckGame:
'max_ammo': bullets_per_mag, 'max_ammo': bullets_per_mag,
'chargers': player['magazines'] - 1 # Spare magazines (excluding current) 'chargers': player['magazines'] - 1 # Spare magazines (excluding current)
} }
} }
def _rearm_all_disarmed_players(self):
"""Rearm all players who have been disarmed (gun confiscated)"""
try:
rearmed_count = 0
for player_name, player_data in self.db.players.items():
if player_data.get('gun_confiscated', False):
player_data['gun_confiscated'] = False
# Update magazines based on player level
self.bot.levels.update_player_magazines(player_data)
player_data['current_ammo'] = player_data.get('bullets_per_magazine', 6)
rearmed_count += 1
if rearmed_count > 0:
self.logger.info(f"Auto-rearmed {rearmed_count} disarmed players after duck shot")
except Exception as e:
self.logger.error(f"Error in _rearm_all_disarmed_players: {e}")