removed inventory and item modules and moved item
to utils. Updated imports accordingly. decentralized entity stats-item coordination.
This commit is contained in:
@@ -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)
|
|
||||||
|
|||||||
4
game.py
4
game.py
@@ -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):
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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
16
utils/item.py
Normal 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}"
|
||||||
|
|
||||||
Reference in New Issue
Block a user