4 Commits

Author SHA1 Message Date
f16388dda4 removed inventory and item modules and moved item
to utils. Updated imports accordingly.
decentralized entity stats-item coordination.
2026-01-29 22:23:32 +01:00
fc5076d054 commit entity-modify-player-inventory 2026-01-29 22:05:56 +01:00
7b5c411c8d added setters and getters for entity attributes 2026-01-29 21:37:44 +01:00
609485f734 modified imports 2026-01-29 21:17:05 +01:00
8 changed files with 106 additions and 92 deletions

View File

@@ -16,7 +16,80 @@ 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
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):
return self.equipped_item
def set_strength(self, value):
self.strength = value
def set_dexterity(self, value):
self.dexterity = value
def set_intelligence(self, value):
self.intelligence = value
def set_wisdom(self, value):
self.wisdom = value
def set_charisma(self, value):
self.charisma = value
def set_hp(self, value):
self.hp = value
def set_armor(self, value):
self.armor = value
def set_speed(self, value):
self.speed = value
def set_equipped_item(self, item):
self.equipped_item = item

View File

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

View File

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

View File

@@ -1,37 +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 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,11 +2,11 @@ from typing import Any, Dict
import logging
import httpx
from mcp.server.fastmcp import FastMCP
from dice import Dice
from player import Player
from item import Item
from utils.dice import Dice
from entities.player import Player
from items.item import Item
from game import Game
from npc import NPC
from entities.npc import NPC
from serializable import Serializable
import json
import os
@@ -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()

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