Compare commits
4 Commits
api
...
julien-wor
| Author | SHA1 | Date | |
|---|---|---|---|
| f16388dda4 | |||
| fc5076d054 | |||
| 7b5c411c8d | |||
| 609485f734 |
@@ -16,7 +16,80 @@ class Entity(Serializable):
|
|||||||
self.hp = hp
|
self.hp = hp
|
||||||
self.armor = armor
|
self.armor = armor
|
||||||
self.speed = speed
|
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):
|
def get_id(self):
|
||||||
return self.id
|
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
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
from inventory import Inventory
|
|
||||||
from entity import Entity
|
from entity import Entity
|
||||||
|
|
||||||
class Player(Entity):
|
class Player(Entity):
|
||||||
def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, item=None):
|
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)
|
super().__init__(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, equipped_item)
|
||||||
self.inventory = Inventory()
|
|
||||||
if item:
|
|
||||||
self.inventory.add_item(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,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
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
19
server.py
19
server.py
@@ -2,11 +2,11 @@ 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 player import Player
|
from entities.player import Player
|
||||||
from item import Item
|
from items.item import Item
|
||||||
from game import Game
|
from game import Game
|
||||||
from npc import NPC
|
from entities.npc import NPC
|
||||||
from serializable import Serializable
|
from serializable import Serializable
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
@@ -100,16 +100,15 @@ async def throw_a_dice(n_faces: int) -> Any:
|
|||||||
n_faces: Number of faces of the dice
|
n_faces: Number of faces of the dice
|
||||||
"""
|
"""
|
||||||
logging.info(f"Throwing a dice with {n_faces} faces")
|
logging.info(f"Throwing a dice with {n_faces} faces")
|
||||||
dice = Dice(n_faces)
|
|
||||||
|
|
||||||
if n_faces < 1:
|
if n_faces < 1:
|
||||||
raise ValueError("Number of faces must be at least 1")
|
raise ValueError("Number of faces must be at least 1")
|
||||||
elif n_faces == 1:
|
elif n_faces == 1:
|
||||||
return 1
|
return 1
|
||||||
elif n_faces == 2:
|
elif n_faces == 2:
|
||||||
return dice.head_or_tails()
|
return Dice.head_or_tails()
|
||||||
else:
|
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}")
|
logging.info(f"Creating player with name={name}")
|
||||||
player = Player(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed)
|
player = Player(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed)
|
||||||
logging.info(f"Created player: {player}")
|
logging.info(f"Created player: {player}")
|
||||||
game.players.append(player)
|
game.active_players.append(player)
|
||||||
return player.serialize_dict()
|
return player.serialize_dict()
|
||||||
|
|
||||||
@mcp.tool()
|
@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}")
|
logging.info(f"Creating NPC with name={name}")
|
||||||
npc = NPC(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed)
|
npc = NPC(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed)
|
||||||
logging.info(f"Created NPC: {npc}")
|
logging.info(f"Created NPC: {npc}")
|
||||||
game.npcs.append(npc)
|
game.active_npcs.append(npc)
|
||||||
return npc.serialize_dict()
|
return npc.serialize_dict()
|
||||||
|
|
||||||
@mcp.tool()
|
@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}")
|
logging.info(f"Creating item with name={name}")
|
||||||
item = Item(name, description, bonus)
|
item = Item(name, description, bonus)
|
||||||
logging.info(f"Created item: {item}")
|
logging.info(f"Created item: {item}")
|
||||||
game.items.append(item)
|
game.active_items.append(item)
|
||||||
return item.serialize_dict()
|
return item.serialize_dict()
|
||||||
|
|
||||||
@mcp.tool()
|
@mcp.tool()
|
||||||
|
|||||||
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