From f16388dda41f8f44942876534b7bd4bca3b64f7e Mon Sep 17 00:00:00 2001 From: Hemithermos Date: Thu, 29 Jan 2026 22:23:32 +0100 Subject: [PATCH] removed inventory and item modules and moved item to utils. Updated imports accordingly. decentralized entity stats-item coordination. --- entities/entity.py | 58 ++++++++++++---------------------------- game.py | 4 +-- items/inventory.py | 40 --------------------------- items/item.py | 35 ------------------------ server.py | 2 +- dice.py => utils/dice.py | 0 utils/item.py | 16 +++++++++++ 7 files changed, 36 insertions(+), 119 deletions(-) delete mode 100644 items/inventory.py delete mode 100644 items/item.py rename dice.py => utils/dice.py (100%) create mode 100644 utils/item.py diff --git a/entities/entity.py b/entities/entity.py index b9197b1..8b8ca44 100644 --- a/entities/entity.py +++ b/entities/entity.py @@ -24,27 +24,43 @@ class Entity(Serializable): return self.id def get_strength(self): + if self.equipped_item and "strength" in self.equipped_item.stat_modifier.keys(): + return self.strength + self.equipped_item.stat_modifier["strength"] return self.strength def get_dexterity(self): + if self.equipped_item and "dexterity" in self.equipped_item.stat_modifier.keys(): + return self.dexterity + self.equipped_item.stat_modifier["dexterity"] return self.dexterity def get_intelligence(self): + if self.equipped_item and "intelligence" in self.equipped_item.stat_modifier.keys(): + return self.intelligence + self.equipped_item.stat_modifier["intelligence"] return self.intelligence def get_wisdom(self): + if self.equipped_item and "wisdom" in self.equipped_item.stat_modifier.keys(): + return self.wisdom + self.equipped_item.stat_modifier["wisdom"] return self.wisdom def get_charisma(self): + if self.equipped_item and "charisma" in self.equipped_item.stat_modifier.keys(): + return self.charisma + self.equipped_item.stat_modifier["charisma"] return self.charisma def get_hp(self): + if self.equipped_item and "hp" in self.equipped_item.stat_modifier.keys(): + return self.hp + self.equipped_item.stat_modifier["hp"] return self.hp def get_armor(self): + if self.equipped_item and "armor" in self.equipped_item.stat_modifier.keys(): + return self.armor + self.equipped_item.stat_modifier["armor"] return self.armor def get_speed(self): + if self.equipped_item and "speed" in self.equipped_item.stat_modifier.keys(): + return self.speed + self.equipped_item.stat_modifier["speed"] return self.speed def get_equipped_item(self): @@ -76,44 +92,4 @@ 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/game.py b/game.py index 8505717..67ff05b 100644 --- a/game.py +++ b/game.py @@ -1,9 +1,9 @@ from serializable import Serializable -from dice import Dice +from utils.dice import Dice from events.event import Event from entities.player import Player from entities.npc import NPC -from items.item import Item +from utils.item import Item class Game(Serializable): def __init__(self, seed:int=42): diff --git a/items/inventory.py b/items/inventory.py deleted file mode 100644 index c79d6eb..0000000 --- a/items/inventory.py +++ /dev/null @@ -1,40 +0,0 @@ -from serializable import Serializable -from items.item import Item - -class Inventory(Serializable): - def __init__(self, max_capacity:int = 5): - super().__init__() - self.items:list[Item] = [] - self.max_capacity = max_capacity # Maximum umber of items - - 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 = '' - for item in self.items: - s_items += item.__str__() + '; ' - return s_items - - def add_item(self, added_item:Item): - if self.current_capacity() == self.max_capacity: - return f'The inventory is full!' - else: - self.items.append(added_item) - return f'{added_item.name} added to inventory. Current number of items: {self.current_capacity()}/{self.max_capacity}' - - def remove_item(self, item_id:str): - searched_item = self.get_item(item_id=item_id) - if searched_item: - return f'{searched_item.name} was removed from the inventory.' - raise ValueError(f'Item #{item_id} is not present within the inventory!') - - def get_item(self, item_id:str): - for item in self.items: - if item.id == item_id: - return item - # The item was not found - return None \ No newline at end of file diff --git a/items/item.py b/items/item.py deleted file mode 100644 index 5202eae..0000000 --- a/items/item.py +++ /dev/null @@ -1,35 +0,0 @@ -from serializable import Serializable - -import uuid - -class Item(Serializable): - def __init__(self,name:str, description:str, stat_modifier:str): - super().__init__() - self.id = str(uuid.uuid4()) - self.name = name - self.description = description - self.stat_modifier = stat_modifier - - def __str__(self): - return f"{self.name}: {self.description}" - -class Equippable(Item): - def __init__(self, name, description, stat_modifier, equipped:bool): - super().__init__(name, description, stat_modifier) - self.equipped = equipped - - def equip(self): - self.equipped = True - - def unequip(self): - self.equipped = False - -class Consummable(Item): - def __init__(self, name, description, stat_modifier, nb_of_uses:int): - super().__init__(name, description, stat_modifier) - self.nb_of_uses = nb_of_uses - - def consumme(self): - if self.nb_of_uses > 0: - self.nb_of_uses -= 1 - \ No newline at end of file diff --git a/server.py b/server.py index 26ced8e..47c02f8 100644 --- a/server.py +++ b/server.py @@ -2,7 +2,7 @@ from typing import Any, Dict import logging import httpx from mcp.server.fastmcp import FastMCP -from dice import Dice +from utils.dice import Dice from entities.player import Player from items.item import Item from game import Game diff --git a/dice.py b/utils/dice.py similarity index 100% rename from dice.py rename to utils/dice.py diff --git a/utils/item.py b/utils/item.py new file mode 100644 index 0000000..7273f75 --- /dev/null +++ b/utils/item.py @@ -0,0 +1,16 @@ +from typing import Dict +from serializable import Serializable + +import uuid + +class Item(Serializable): + def __init__(self,name:str, description:str, stat_modifier:Dict[str, int]): + super().__init__() + self.id = str(uuid.uuid4()) + self.name = name + self.description = description + self.stat_modifier = stat_modifier + + def __str__(self): + return f"{self.name}: {self.description}" +