entity.py

← Back to explorer
customs/rpg/entity.py
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