From 4729a45c30a87e5acfac848e71567c8ee9cd7f45290acf026b8fff50916000c9 Mon Sep 17 00:00:00 2001 From: andrea Date: Sat, 26 Jul 2025 18:07:14 +0200 Subject: [PATCH] player stats review and minor bot improvements --- bot.py | 4 ++-- bot_libs/simulation.py | 10 ++++++---- entities/player.py | 39 +++++++++++++++++++++++++++------------ main.py | 2 -- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/bot.py b/bot.py index 501acea..88d540f 100644 --- a/bot.py +++ b/bot.py @@ -5,7 +5,7 @@ from telegram.ext import filters from telegram import ReplyKeyboardMarkup from telegram import ReplyKeyboardRemove -import main as _brsim +from entities import arena as _arena from bot_libs import player_handling as _bot_player from bot_libs import simulation as _bot_sim from bot_libs import repeating as _bot_repeat @@ -25,7 +25,7 @@ async def bot_start(update, context): chat_id = update.effective_chat.id print(f'{chat_id}: I\'m building the world\'s game...') - Arena= _brsim.init_arena() + Arena= _arena.BrSimArena() await update.message.reply_text('Ho creato il mondo di gioco', reply_markup=reply_markup) context.application.bot_data['arena'] = Arena diff --git a/bot_libs/simulation.py b/bot_libs/simulation.py index 867bc8c..6780dd3 100644 --- a/bot_libs/simulation.py +++ b/bot_libs/simulation.py @@ -6,13 +6,15 @@ def get_winner(Arena): context.job.schedule_removal() print(f'simulate_day: Loop removed') except: pass - day= Arena.day + msg= f'{winner.get_name_and_stats()} Vince la cruenta battaglia ' + msg+= f'uccidendo {winner.get_kills()} giocatori ' + msg+= f'e schivando {winner.get_dodges()} colpi nemici, e vive felice e ' if winner.player_gender_is_male(): - msg= f'{winner.get_name_and_stats()} Vince la cruenta battaglia uccidendo {winner.get_kills()} giocatori, e vive felice e contento con Guarino' + msg+= 'contento con Guarino' elif winner.player_gender_is_female(): - msg= f'{winner.get_name_and_stats()} Vince la cruenta battaglia uccidendo {winner.get_kills()} giocatori, e vive felice e contenta con Guarino' + msg+= 'contenta con Guarino' else: - msg= f'{winner.get_name_and_stats()} Vince la cruenta battaglia uccidendo {winner.get_kills()} giocatori, e vive felice e content# con Guarino' + msg+= 'content# con Guarino' return msg async def simulate_day(context, chat_id): diff --git a/entities/player.py b/entities/player.py index 84f9beb..cff8775 100644 --- a/entities/player.py +++ b/entities/player.py @@ -11,10 +11,11 @@ class BrSimPlayer(): self.inventory= inventory or [] self.damage= _random.randint(1,2) # this is the punch damage amount self.max_weight= 5 # this is the max inventory weight - self.agility= _random.randint(5,30) # chance to avoid an hit + self.agility= _random.randint(1,3) # chance to avoid an hit self.kills= 0 # track the number of kills self.accused_damage= 0 self.survived_days= 0 # track the number of the survived days + self.dodges= 0 self.equipped_weapon= None self.gender= _random.sample(['m', 'f', '-'], 1)[0] # for now get a random gender self.reputation= 50 #Like RDR2 the player can be evil(0) or good(100). This should influence the sponsors and internal alliance @@ -22,9 +23,9 @@ class BrSimPlayer(): ### control methods def get_name_and_stats(self): - health= '♥️' * self.health + health= '♥️' * self.health or '☠️' strength= '⚔️' * self.damage - agility= f'🚀{self.agility}' + agility= '🚀' * self.agility if self.player_gender_is_male(): gender= '♂' elif self.player_gender_is_female(): gender= '♀' else: gender= '⚩' @@ -54,19 +55,26 @@ class BrSimPlayer(): def get_inventory_weight(self): weight= 0 - for inv in self.get_inventory(): - weight+= inv.get_weight() + for item in self.get_inventory(): + weight+= item.get_weight() return weight + def get_dodges(self): + return self.dodges + def get_max_weight(self): return self.max_weight def get_health(self): return self.health + def get_equipped_weapon(self): + return self.equipped_weapon + def get_damage(self): - if not self.equipped_weapon: return self.damage - return self.equipped_weapon.damage + weapon= self.get_equipped_weapon() + if not weapon: return self.damage + return weapon.get_damage() def get_agility(self): return self.agility @@ -100,18 +108,21 @@ class BrSimPlayer(): if not self.inventory: return available_weapons= [] - for inv in self.get_inventory(): + for item in self.get_inventory(): # XXX # i don't know yet if this is ok, # we'll see it when weapon and items are defined - if not inv.damage: continue - available_weapons.append(inv) + # maybe we need item.is_weapon() method + if not item.damage: continue + available_weapons.append(item) self.equipped_weapon= random.sample(available_weapons, 1)[0] def dodge(self): # maybe depend on the attack, if it is a gun shot it's quite impossible to dodge - rnd= _random.randint(0, 100) - if rnd < self.agility: return True + rnd= _random.randint(0, 10) + if rnd < self.agility: + self.dodges+= 1 + return True return False def accuses_damage(self, damage): @@ -139,7 +150,11 @@ class BrSimPlayer(): msg= f'Ehhhh voleviiii!!! sei lent##! {target.get_name_and_stats()} schiva il colpo di {self.get_name_and_stats()}' return 0, msg target.accuses_damage(self.damage) + msg= f'{self.get_name_and_stats()} Colpisce {target.get_name_and_stats()}' + weapon= self.get_equipped_weapon() + if weapon: msg+= f' con un {weapon.get_name}' + else: msg+= f' con un pugno' self.kills+= 1 return self.damage, msg diff --git a/main.py b/main.py index f6c4712..aa6e50a 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,3 @@ -import random as _random -from entities import weapon_syms as _wsyms from entities import arena as _arena def init_arena(players= None, weapons= None):