init commit
This commit is contained in:
56
app/game/generators/entity_factory.py
Normal file
56
app/game/generators/entity_factory.py
Normal file
@@ -0,0 +1,56 @@
|
||||
import uuid
|
||||
from typing import Dict, List, Any, Tuple
|
||||
|
||||
from app.game.utils.common import Dice
|
||||
from app.game.models.entities import Entity
|
||||
from app.game.utils.loaders import TemplateStore
|
||||
from app.game.systems.leveling import hp_and_mp_gain
|
||||
|
||||
dice = Dice()
|
||||
|
||||
def build_char(name:str, origin_story:str, race_id:str, class_id:str, fame:int=0) -> Entity:
|
||||
|
||||
templates = TemplateStore()
|
||||
|
||||
# base_ability_scores = {"STR":10,"DEX":10,"CON":10,"INT":10,"WIS":10,"CHA":10, "LUC":10}
|
||||
|
||||
race = templates.race(race_id)
|
||||
profession = templates.profession(class_id)
|
||||
|
||||
e = Entity(
|
||||
uuid = str(uuid.uuid4()),
|
||||
name = name,
|
||||
origin_story = origin_story,
|
||||
fame = fame,
|
||||
level=1,
|
||||
race =race.get("name"),
|
||||
profession = profession.get("name")
|
||||
)
|
||||
|
||||
# assign hit dice
|
||||
e.hit_die = profession.get("hit_die")
|
||||
e.per_level.hp_die = profession.get("per_level",{}).get("hp_rule",{}).get("die","1d10")
|
||||
e.per_level.mp_die = profession.get("per_level",{}).get("mp_rule",{}).get("die","1d10")
|
||||
e.per_level.hp_rule = profession.get("per_level",{}).get("hp_rule",{}).get("rule","avg")
|
||||
e.per_level.mp_rule = profession.get("per_level",{}).get("mp_rule",{}).get("rule","avg")
|
||||
|
||||
# assign hp/mp
|
||||
e.hp = hp_and_mp_gain(1,e.per_level.hp_die,e.per_level.hp_rule)
|
||||
e.mp = hp_and_mp_gain(1,e.per_level.mp_die,e.per_level.mp_rule)
|
||||
|
||||
for stat, delta in race.get("ability_mods", {}).items():
|
||||
e.ability_scores[stat] = e.ability_scores.get(stat, 10) + int(delta)
|
||||
|
||||
# Apply class grants (spells/skills/equipment + MP base)
|
||||
grants = profession.get("grants", {})
|
||||
|
||||
# add spells to char
|
||||
grant_spells = grants.get("spells", []) or []
|
||||
for spell in grant_spells:
|
||||
spell_dict = templates.spell(spell)
|
||||
e.spells.append(spell_dict)
|
||||
|
||||
# TODO
|
||||
# e.skills.extend(grants.get("skills", []) or [])
|
||||
|
||||
return e
|
||||
Reference in New Issue
Block a user