From fc5076d054247dfa934a71e95ca747ba0a7feaf1 Mon Sep 17 00:00:00 2001 From: Hemithermos Date: Thu, 29 Jan 2026 22:05:56 +0100 Subject: [PATCH] commit entity-modify-player-inventory --- entities/entity.py | 46 ++++++++++++++++++++++++++++++++++++++++++++-- entities/player.py | 10 ++++------ items/inventory.py | 3 +++ server.py | 11 +++++------ 4 files changed, 56 insertions(+), 14 deletions(-) diff --git a/entities/entity.py b/entities/entity.py index 58fe829..b9197b1 100644 --- a/entities/entity.py +++ b/entities/entity.py @@ -16,7 +16,9 @@ class Entity(Serializable): self.hp = hp self.armor = armor self.speed = speed - self.equipped_item = equipped_item + self.equipped_item = None + if equipped_item: + self.set_equipped_item(equipped_item) def get_id(self): return self.id @@ -74,4 +76,44 @@ class Entity(Serializable): def set_equipped_item(self, item): self.equipped_item = item - + if item.stat_modifier == "strength": + self.set_strength(self.get_strength() + item.stat_modifier_value) + elif item.stat_modifier == "dexterity": + self.set_dexterity(self.get_dexterity() + item.stat_modifier_value) + elif item.stat_modifier == "intelligence": + self.set_intelligence(self.get_intelligence() + item.stat_modifier_value) + elif item.stat_modifier == "wisdom": + self.set_wisdom(self.get_wisdom() + item.stat_modifier_value) + elif item.stat_modifier == "charisma": + self.set_charisma(self.get_charisma() + item.stat_modifier_value) + elif item.stat_modifier == "hp": + self.set_hp(self.get_hp() + item.stat_modifier_value) + elif item.stat_modifier == "armor": + self.set_armor(self.get_armor() + item.stat_modifier_value) + elif item.stat_modifier == "speed": + self.set_speed(self.get_speed() + item.stat_modifier_value) + else: + raise ValueError(f"Unknown stat modifier: {item.stat_modifier}") + + def change_equipped_item(self, new_item): + if self.equipped_item: + # Remove the stat modifier of the currently equipped item + if self.equipped_item.stat_modifier == "strength": + self.set_strength(self.get_strength() - self.equipped_item.stat_modifier_value) + elif self.equipped_item.stat_modifier == "dexterity": + self.set_dexterity(self.get_dexterity() - self.equipped_item.stat_modifier_value) + elif self.equipped_item.stat_modifier == "intelligence": + self.set_intelligence(self.get_intelligence() - self.equipped_item.stat_modifier_value) + elif self.equipped_item.stat_modifier == "wisdom": + self.set_wisdom(self.get_wisdom() - self.equipped_item.stat_modifier_value) + elif self.equipped_item.stat_modifier == "charisma": + self.set_charisma(self.get_charisma() - self.equipped_item.stat_modifier_value) + elif self.equipped_item.stat_modifier == "hp": + self.set_hp(self.get_hp() - self.equipped_item.stat_modifier_value) + elif self.equipped_item.stat_modifier == "armor": + self.set_armor(self.get_armor() - self.equipped_item.stat_modifier_value) + elif self.equipped_item.stat_modifier == "speed": + self.set_speed(self.get_speed() - self.equipped_item.stat_modifier_value) + + # Equip the new item + self.set_equipped_item(new_item) \ No newline at end of file diff --git a/entities/player.py b/entities/player.py index 173cc16..778eb3f 100644 --- a/entities/player.py +++ b/entities/player.py @@ -1,9 +1,7 @@ -from inventory import Inventory from entity import Entity class Player(Entity): - def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, item=None): - super().__init__(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed) - self.inventory = Inventory() - if item: - self.inventory.add_item(item) + def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, equipped_item=None): + super().__init__(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, equipped_item) + + \ No newline at end of file diff --git a/items/inventory.py b/items/inventory.py index 41088f7..c79d6eb 100644 --- a/items/inventory.py +++ b/items/inventory.py @@ -9,6 +9,9 @@ class Inventory(Serializable): def current_capacity(self): return len(self.items) + + def is_full(self): + return self.current_capacity() >= self.max_capacity def list_items(self): s_items = '' diff --git a/server.py b/server.py index df3b29f..26ced8e 100644 --- a/server.py +++ b/server.py @@ -100,16 +100,15 @@ async def throw_a_dice(n_faces: int) -> Any: n_faces: Number of faces of the dice """ logging.info(f"Throwing a dice with {n_faces} faces") - dice = Dice(n_faces) if n_faces < 1: raise ValueError("Number of faces must be at least 1") elif n_faces == 1: return 1 elif n_faces == 2: - return dice.head_or_tails() + return Dice.head_or_tails() else: - return dice.roll() + return Dice.roll(n_faces) @@ -133,7 +132,7 @@ async def create_player(name: str, strength: int, dexterity: int, intelligence: logging.info(f"Creating player with name={name}") player = Player(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed) logging.info(f"Created player: {player}") - game.players.append(player) + game.active_players.append(player) return player.serialize_dict() @mcp.tool() @@ -156,7 +155,7 @@ async def create_npc(name: str, strength: int, dexterity: int, intelligence: int logging.info(f"Creating NPC with name={name}") npc = NPC(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed) logging.info(f"Created NPC: {npc}") - game.npcs.append(npc) + game.active_npcs.append(npc) return npc.serialize_dict() @mcp.tool() @@ -171,7 +170,7 @@ async def create_item(name: str, description: str, bonus: str) -> Dict[str, Any] logging.info(f"Creating item with name={name}") item = Item(name, description, bonus) logging.info(f"Created item: {item}") - game.items.append(item) + game.active_items.append(item) return item.serialize_dict() @mcp.tool()