removed inventory and item modules and moved item

to utils. Updated imports accordingly.
decentralized entity stats-item coordination.
This commit is contained in:
2026-01-29 22:23:32 +01:00
parent fc5076d054
commit f16388dda4
7 changed files with 36 additions and 119 deletions

View File

@@ -24,27 +24,43 @@ class Entity(Serializable):
return self.id return self.id
def get_strength(self): 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 return self.strength
def get_dexterity(self): 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 return self.dexterity
def get_intelligence(self): 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 return self.intelligence
def get_wisdom(self): 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 return self.wisdom
def get_charisma(self): 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 return self.charisma
def get_hp(self): 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 return self.hp
def get_armor(self): 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 return self.armor
def get_speed(self): 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 return self.speed
def get_equipped_item(self): def get_equipped_item(self):
@@ -76,44 +92,4 @@ class Entity(Serializable):
def set_equipped_item(self, item): def set_equipped_item(self, item):
self.equipped_item = 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)

View File

@@ -1,9 +1,9 @@
from serializable import Serializable from serializable import Serializable
from dice import Dice from utils.dice import Dice
from events.event import Event from events.event import Event
from entities.player import Player from entities.player import Player
from entities.npc import NPC from entities.npc import NPC
from items.item import Item from utils.item import Item
class Game(Serializable): class Game(Serializable):
def __init__(self, seed:int=42): def __init__(self, seed:int=42):

View File

@@ -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

View File

@@ -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

View File

@@ -2,7 +2,7 @@ from typing import Any, Dict
import logging import logging
import httpx import httpx
from mcp.server.fastmcp import FastMCP from mcp.server.fastmcp import FastMCP
from dice import Dice from utils.dice import Dice
from entities.player import Player from entities.player import Player
from items.item import Item from items.item import Item
from game import Game from game import Game

16
utils/item.py Normal file
View File

@@ -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}"