from dataclasses import dataclass, field
import random
@dataclass
class BaseStats:
entity: str
level: int
curr_health: int
max_health: int
attack: int
defense: int
curr_xp: int
max_xp: int
health_percent: float = field(init=False)
def __post_init__(self):
self.health_percent = (self.curr_health / self.max_health) * 100
@dataclass
class Player(BaseStats):
name: str
def raw(self) -> dict:
raw_data: dict = {
"entity": "Player", "name": self.name, "level": self.level, "current_health": self.curr_health,
"max_health": self.max_health,
"attack": self.attack, "defense": self.defense, "current_xp": self.curr_xp, "max_xp": self.max_xp,
"health_percentage": self.health_percent
}
return raw_data
@dataclass
class PlayerData:
curr_pos: int
def raw(self) -> dict:
raw_data: dict = {
"curr_pos": self.curr_pos
}
return raw_data
@dataclass
class Mob:
entity: str
name: str
level: int
xp: int
health: int
attack: int
defense: int
class Spider(Mob):
def __init__(self, entity=None, name=None, level=None, xp=None, health=None, attack=None, defense=None):
super().__init__(entity, name, level, xp, health, attack, defense)
self.entity = "Mob"
self.name = "🕷 Spider"
self.level = level
self.xp = random.choice([130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140])
self.health = health
self.attack = attack
self.defense = defense
def raw(self) -> dict:
self.level = random.randrange(1, 101)
if self.level >= 11:
self.attack = random.randrange(self.level - 11, self.level + 11)
self.defense = random.randrange(self.level - 11, self.level + 11)
else:
self.attack = random.randrange(0, self.level + 11)
self.defense = random.randrange(0, self.level + 11)
raw_data: dict = {
"entity": self.entity, "name": self.name, "level": self.level, "health": self.level + 100,
"attack": self.attack, "defense": self.defense, "xp": self.xp
}
return raw_data