1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00

Implement Battle Units table and newbattle command

This commit is contained in:
Steffo 2020-02-21 20:32:24 +01:00
parent 5f26184ebf
commit 0fdba9aca0
8 changed files with 121 additions and 5 deletions

View file

@ -10,6 +10,7 @@ from .dnditem import DnditemCommand
from .dndspell import DndspellCommand from .dndspell import DndspellCommand
from .testhealth import TesthealthCommand from .testhealth import TesthealthCommand
from .testfaction import TestfactionCommand from .testfaction import TestfactionCommand
from .dndnewbattle import DndnewbattleCommand
# Enter the commands of your Pack here! # Enter the commands of your Pack here!
available_commands = [ available_commands = [

View file

@ -0,0 +1,29 @@
from typing import *
import royalnet
import royalnet.commands as rc
from ..tables import DndBattle
class DndnewbattleCommand(rc.Command):
name: str = "dndnewbattle"
description: str = "Create a new D&D battle."
syntax: str = "{name}\n[description]"
async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None:
BattleT = self.alchemy.get(DndBattle)
line_args = args.joined(require_at_least=1).split("\n", 1)
name = line_args[0]
description = line_args[1] if len(line_args) > 1 else None
battle = BattleT(
name=name,
description=description
)
data.session.add(battle)
await data.session_commit()
await data.reply(f"✅ Battaglia [b]{battle.name}[/b] creata!")

View file

@ -1,7 +1,7 @@
from typing import * from typing import *
import royalnet import royalnet
import royalnet.commands as rc import royalnet.commands as rc
from ..utils import FactionColor from ..utils import Faction
class TestfactionCommand(rc.Command): class TestfactionCommand(rc.Command):
@ -12,4 +12,4 @@ class TestfactionCommand(rc.Command):
syntax: str = "{factionstring}" syntax: str = "{factionstring}"
async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None: async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None:
await data.reply(FactionColor[args[0].upper()].value) await data.reply(Faction[args[0].upper()].value)

View file

@ -1,11 +1,15 @@
# Imports go here! # Imports go here!
from .dndactivecharacters import DndActiveCharacter from .dndactivecharacters import DndActiveCharacter
from .dndcharacters import DndCharacter from .dndcharacters import DndCharacter
from .dndbattle import DndBattle
from .dndbattleunit import DndBattleUnit
# Enter the tables of your Pack here! # Enter the tables of your Pack here!
available_tables = [ available_tables = [
DndActiveCharacter, DndActiveCharacter,
DndCharacter, DndCharacter,
DndBattle,
DndBattleUnit,
] ]
# Don't change this, it should automatically generate __all__ # Don't change this, it should automatically generate __all__

View file

@ -0,0 +1,26 @@
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import *
class DndActiveBattle:
__tablename__ = "dndactivebattle"
@declared_attr
def battle_id(self):
return Column(Integer, ForeignKey("dndbattle.id"), primary_key=True)
@declared_attr
def battle(self):
return relationship("DndCharacter", foreign_keys=self.battle_id, backref="active_in")
@declared_attr
def interface_name(self):
return Column(String)
@declared_attr
def interface_data(self):
return Column(LargeBinary)
def __repr__(self):
return f"<{self.__class__.__qualname__}: {self.battle_id}>"

View file

@ -0,0 +1,56 @@
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declared_attr
from ..utils import Health, Faction
class DndBattleUnit:
__tablename__ = "dndbattleunit"
@declared_attr
def id(self):
return Column(Integer, primary_key=True)
@declared_attr
def battle_id(self):
return Column(Integer, ForeignKey("dndbattle.id"))
@declared_attr
def battle(self):
return relationship("DndBattle", backref="units")
@declared_attr
def initiative(self):
return Column(Integer, nullable=False)
@declared_attr
def health_string(self):
return Column(String)
@property
def health(self):
return Health.from_text(self.health_string) if self.health_string else None
@health.setter
def health(self, value: Health):
self.health_string = value.to_text()
@declared_attr
def faction(self):
return Column(Enum(Faction), nullable=False)
@declared_attr
def name(self):
return Column(String, nullable=False)
@declared_attr
def armor_class(self):
return Column(Integer)
@declared_attr
def extra(self):
return Column(String)
@declared_attr
def status(self):
return Column(String)

View file

@ -1,7 +1,7 @@
from .dndproficiencytype import DndProficiencyType from .dndproficiencytype import DndProficiencyType
from .parse5etoolsentry import parse_5etools_entry from .parse5etoolsentry import parse_5etools_entry
from .getactivechar import get_active_character, get_interface_data from .getactivechar import get_active_character, get_interface_data
from .factioncolors import FactionColor from .faction import Faction
from .health import Health from .health import Health
__all__ = [ __all__ = [
@ -9,6 +9,6 @@ __all__ = [
"parse_5etools_entry", "parse_5etools_entry",
"get_active_character", "get_active_character",
"get_interface_data", "get_interface_data",
"FactionColor", "Faction",
"Health", "Health",
] ]

View file

@ -2,7 +2,7 @@ from typing import *
import enum import enum
class FactionColor(enum.Enum): class Faction(enum.Enum):
RED = "🔴" RED = "🔴"
ORANGE = "🟠" ORANGE = "🟠"
YELLOW = "🟡" YELLOW = "🟡"