You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.8 KiB
61 lines
1.8 KiB
import click
|
|
from flask.cli import AppGroup
|
|
|
|
from ..models import db
|
|
|
|
|
|
npc_cli = AppGroup('npc')
|
|
|
|
@npc_cli.command('populate')
|
|
def populate_npc_database():
|
|
import csv
|
|
from .models import (
|
|
CharacterClass,
|
|
ClassLevelProgression,
|
|
EquipmentArmour,
|
|
EquipmentRangedWeapon,
|
|
EquipmentMeleeWeapon,
|
|
Spell
|
|
)
|
|
|
|
def load_csv_data(file_name, cls):
|
|
rows = []
|
|
with open('acks/npc/data/{}'.format(file_name), newline='') as data:
|
|
reader = csv.DictReader(data)
|
|
for row in reader:
|
|
rows.append(cls(**row))
|
|
return rows
|
|
|
|
# Character Classes
|
|
db.session.bulk_save_objects(load_csv_data('default_classes.csv', CharacterClass))
|
|
|
|
# Equipment Armour
|
|
db.session.bulk_save_objects(load_csv_data('default_armours.csv', EquipmentArmour))
|
|
|
|
# Ranged Weapons
|
|
db.session.bulk_save_objects(load_csv_data('default_ranged.csv', EquipmentRangedWeapon))
|
|
|
|
# Melee Weapons
|
|
melee_weps = load_csv_data('default_melee.csv', EquipmentMeleeWeapon)
|
|
for wep in melee_weps:
|
|
wep.two_handed = (wep.two_handed == 'True')
|
|
db.session.bulk_save_objects(melee_weps)
|
|
|
|
# Level Progressions
|
|
progressions = load_csv_data('default_progression.csv', ClassLevelProgression)
|
|
classes = {c.name: c.id for c in CharacterClass.query.all()}
|
|
for prog in progressions:
|
|
prog.guild_id = classes[prog.guild_id]
|
|
db.session.bulk_save_objects(progressions)
|
|
|
|
# Spells
|
|
spells = load_csv_data('default_spells.csv', Spell)
|
|
for spell in spells:
|
|
if spell.arcane == '':
|
|
spell.arcane = 0
|
|
if spell.divine == '':
|
|
spell.divine = 0
|
|
spell.description = spell.description.strip()
|
|
db.session.bulk_save_objects(spells)
|
|
|
|
db.session.commit()
|