Get the PlayerSheet working and actually saving data, using the data models instead of the template.json
This commit is contained in:
parent
6e3510ddd4
commit
58facf1490
11 changed files with 339 additions and 234 deletions
|
|
@ -1 +0,0 @@
|
||||||
export class CharacterActor extends Actor {}
|
|
||||||
11
module/documents/PlayerActor.js
Normal file
11
module/documents/PlayerActor.js
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
export class PlayerActor extends Actor {
|
||||||
|
prepareData() {
|
||||||
|
super.prepareData();
|
||||||
|
};
|
||||||
|
|
||||||
|
prepareDerivedData() {};
|
||||||
|
|
||||||
|
_preparePCData() {};
|
||||||
|
|
||||||
|
_prepareNPCData() {};
|
||||||
|
};
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Class imports
|
// Class imports
|
||||||
import { CharacterActor } from "./documents/CharacterActor.js";
|
import { PlayerActor } from "./documents/PlayerActor.js";
|
||||||
import { CharacterSheet } from "./sheets/CharacterSheet.js";
|
import { PlayerSheet } from "./sheets/PlayerSheet.mjs";
|
||||||
|
import { PlayerData } from "./models/PlayerData.js";
|
||||||
|
|
||||||
// Utility imports
|
// Utility imports
|
||||||
import * as hbs from "./handlebars.js";
|
import * as hbs from "./handlebars.js";
|
||||||
|
|
@ -9,17 +10,19 @@ import * as hbs from "./handlebars.js";
|
||||||
import "./hooks/hotReload.js";
|
import "./hooks/hotReload.js";
|
||||||
|
|
||||||
|
|
||||||
Hooks.once(`init`, async () => {
|
Hooks.once(`init`, () => {
|
||||||
|
console.log(`.dungeon | Init hook started`)
|
||||||
game.boilerplate = {
|
game.boilerplate = {
|
||||||
CharacterActor,
|
PlayerActor,
|
||||||
};
|
};
|
||||||
|
CONFIG.Actor.systemDataModels.player = PlayerData;
|
||||||
|
|
||||||
Actors.unregisterSheet("core", ActorSheet);
|
Actors.unregisterSheet("core", ActorSheet);
|
||||||
Actors.registerSheet("dotdungeon", CharacterSheet, { makeDefault: true, });
|
// Actors.registerSheet("dotdungeon", CharacterSheet, { makeDefault: true, });
|
||||||
|
Actors.registerSheet("dotdungeon.player", PlayerSheet, { makeDefault: true });
|
||||||
|
|
||||||
|
hbs.registerHandlebarsHelpers();
|
||||||
await hbs.registerHandlebarsHelpers();
|
hbs.preloadHandlebarsTemplates();
|
||||||
await hbs.preloadHandlebarsTemplates()
|
|
||||||
console.info(`.dungeon | Dot Dungeon has been initialized fully`);
|
console.info(`.dungeon | Dot Dungeon has been initialized fully`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
57
module/models/PlayerData.js
Normal file
57
module/models/PlayerData.js
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
export class PlayerData extends foundry.abstract.DataModel {
|
||||||
|
static defineSchema() {
|
||||||
|
const fields = foundry.data.fields;
|
||||||
|
return {
|
||||||
|
stats: new fields.SchemaField({
|
||||||
|
build: new fields.StringField({
|
||||||
|
blank: true,
|
||||||
|
trim: true,
|
||||||
|
options(...args) {
|
||||||
|
console.log(`build args`, args);
|
||||||
|
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
meta: new fields.StringField({
|
||||||
|
blank: true,
|
||||||
|
trim: true,
|
||||||
|
options(...args) {
|
||||||
|
console.log(args);
|
||||||
|
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
presence: new fields.StringField({
|
||||||
|
blank: true,
|
||||||
|
trim: true,
|
||||||
|
options(...args) {
|
||||||
|
console.log(args);
|
||||||
|
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
hands: new fields.StringField({
|
||||||
|
blank: true,
|
||||||
|
trim: true,
|
||||||
|
options(...args) {
|
||||||
|
console.log(args);
|
||||||
|
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
tilt: new fields.StringField({
|
||||||
|
blank: true,
|
||||||
|
trim: true,
|
||||||
|
options(...args) {
|
||||||
|
console.log(args);
|
||||||
|
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
rng: new fields.StringField({
|
||||||
|
blank: true,
|
||||||
|
trim: true,
|
||||||
|
options(...args) {
|
||||||
|
console.log(args);
|
||||||
|
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
/**
|
|
||||||
* Extend the basic ActorSheet with some very simple modifications
|
|
||||||
* @extends {ActorSheet}
|
|
||||||
*/
|
|
||||||
export class CharacterSheet extends ActorSheet {
|
|
||||||
static get defaultOptions() {
|
|
||||||
let opts = mergeObject(
|
|
||||||
super.defaultOptions,
|
|
||||||
{
|
|
||||||
template: "systems/dotdungeon/templates/actors/char-sheet-mvp/sheet.hbs"
|
|
||||||
}
|
|
||||||
);
|
|
||||||
opts.classes.push("dotdungeon");
|
|
||||||
return opts;
|
|
||||||
};
|
|
||||||
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
if (!this.isEditable) return;
|
|
||||||
console.debug(`.dungeon | Adding event listeners for Actor${this.id}`)
|
|
||||||
|
|
||||||
// Modal openings
|
|
||||||
html.find(`button.stat-prompt`).on("click", () => {});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
36
module/sheets/PlayerSheet.mjs
Normal file
36
module/sheets/PlayerSheet.mjs
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
export class PlayerSheet extends ActorSheet {
|
||||||
|
static get defaultOptions() {
|
||||||
|
let opts = mergeObject(
|
||||||
|
super.defaultOptions,
|
||||||
|
{
|
||||||
|
template: "systems/dotdungeon/templates/actors/char-sheet-mvp/sheet.hbs"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
opts.classes.push("dotdungeon");
|
||||||
|
return opts;
|
||||||
|
};
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
|
||||||
|
if (!this.isEditable) return;
|
||||||
|
console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`);
|
||||||
|
|
||||||
|
// Modal openings
|
||||||
|
// html.find(`button.stat-prompt`).on("click", () => {});
|
||||||
|
};
|
||||||
|
|
||||||
|
getData() {
|
||||||
|
const ctx = super.getData();
|
||||||
|
const actor = this.actor.toObject(false);
|
||||||
|
|
||||||
|
ctx.system = actor.system;
|
||||||
|
ctx.flags = actor.flags;
|
||||||
|
|
||||||
|
console.group(`PlayerSheet.getData`);
|
||||||
|
console.log(`ctx`, ctx);
|
||||||
|
console.log(`actor`, actor);
|
||||||
|
console.groupEnd();
|
||||||
|
return ctx;
|
||||||
|
};
|
||||||
|
}
|
||||||
209
template.bak.json
Normal file
209
template.bak.json
Normal file
|
|
@ -0,0 +1,209 @@
|
||||||
|
{
|
||||||
|
"Actor": {
|
||||||
|
"types": [
|
||||||
|
"npc",
|
||||||
|
"pc",
|
||||||
|
"mob"
|
||||||
|
],
|
||||||
|
"templates": {
|
||||||
|
"common": {
|
||||||
|
"bytes": {
|
||||||
|
"value": 0,
|
||||||
|
"min": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sync":{
|
||||||
|
"value": 100,
|
||||||
|
"max": 100,
|
||||||
|
"min": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"NPC": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"PC": {
|
||||||
|
"templates": [
|
||||||
|
"common",
|
||||||
|
"sync"
|
||||||
|
],
|
||||||
|
"stats": {
|
||||||
|
"build": "",
|
||||||
|
"meta": "",
|
||||||
|
"presence": "",
|
||||||
|
"hands": "",
|
||||||
|
"tilt": "",
|
||||||
|
"rng": ""
|
||||||
|
},
|
||||||
|
"skills": {
|
||||||
|
"build": {
|
||||||
|
"defense": "untrained",
|
||||||
|
"magic": "untrained",
|
||||||
|
"melee": "untrained",
|
||||||
|
"platforming": "untrained",
|
||||||
|
"strength": "untrained"
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
"alchemy": "untrained",
|
||||||
|
"arcanum": "untrained",
|
||||||
|
"dreams": "untrained",
|
||||||
|
"lore": "untrained",
|
||||||
|
"navigation": "untrained"
|
||||||
|
},
|
||||||
|
"presence": {
|
||||||
|
"animalHandling": "untrained",
|
||||||
|
"perception": "untrained",
|
||||||
|
"sneak": "untrained",
|
||||||
|
"speech": "untrained",
|
||||||
|
"vibes": "untrained"
|
||||||
|
},
|
||||||
|
"hands": {
|
||||||
|
"accuracy": "untrained",
|
||||||
|
"crafting": "untrained",
|
||||||
|
"engineering": "untrained",
|
||||||
|
"explosives": "untrained",
|
||||||
|
"piloting": "untrained"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aspect": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"weapon": {
|
||||||
|
"name": "",
|
||||||
|
"damage": "",
|
||||||
|
"quivers": {
|
||||||
|
"value": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 5
|
||||||
|
},
|
||||||
|
"mags": {
|
||||||
|
"value": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 5
|
||||||
|
},
|
||||||
|
"cells": {
|
||||||
|
"value": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"backpack": [],
|
||||||
|
"bytes": {
|
||||||
|
"value": 0,
|
||||||
|
"min": 0
|
||||||
|
},
|
||||||
|
"supplies": {
|
||||||
|
"value": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 5
|
||||||
|
},
|
||||||
|
"materials": {
|
||||||
|
"value": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 5
|
||||||
|
},
|
||||||
|
"pet": {},
|
||||||
|
"transport": {},
|
||||||
|
"spells": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Mob": {
|
||||||
|
"templates": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Item": {
|
||||||
|
"types": [
|
||||||
|
"weapon",
|
||||||
|
"armour",
|
||||||
|
"equipment",
|
||||||
|
"foil",
|
||||||
|
"pet",
|
||||||
|
"transportation",
|
||||||
|
"structure",
|
||||||
|
"service",
|
||||||
|
"legendaryItem",
|
||||||
|
"spell"
|
||||||
|
],
|
||||||
|
"templates": {
|
||||||
|
"common": {
|
||||||
|
"name": "",
|
||||||
|
"rarity": "simple",
|
||||||
|
"cost": {
|
||||||
|
"min": 0,
|
||||||
|
"value": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weapon": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Armor": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Equipment": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"foil": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pet": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"transportation": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"structure": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"service": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"legendaryItem": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"spell": {
|
||||||
|
"templates": [
|
||||||
|
"common"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
190
template.json
190
template.json
|
|
@ -1,137 +1,9 @@
|
||||||
{
|
{
|
||||||
"Actor": {
|
"Actor": {
|
||||||
"types": [
|
"types": [
|
||||||
"NPC",
|
"player"
|
||||||
"PC",
|
|
||||||
"Mob"
|
|
||||||
],
|
|
||||||
"templates": {
|
|
||||||
"common": {
|
|
||||||
"bytes": {
|
|
||||||
"value": 0,
|
|
||||||
"min": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sync":{
|
|
||||||
"value": 100,
|
|
||||||
"max": 100,
|
|
||||||
"min": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"NPC": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"PC": {
|
|
||||||
"templates": [
|
|
||||||
"common",
|
|
||||||
"sync"
|
|
||||||
],
|
|
||||||
"stats": {
|
|
||||||
"build": "",
|
|
||||||
"meta": "",
|
|
||||||
"presence": "",
|
|
||||||
"hands": "",
|
|
||||||
"tilt": "",
|
|
||||||
"rng": ""
|
|
||||||
},
|
|
||||||
"skills": {
|
|
||||||
"build": {
|
|
||||||
"defense": "untrained",
|
|
||||||
"magic": "untrained",
|
|
||||||
"melee": "untrained",
|
|
||||||
"platforming": "untrained",
|
|
||||||
"strength": "untrained"
|
|
||||||
},
|
|
||||||
"meta": {
|
|
||||||
"alchemy": "untrained",
|
|
||||||
"arcanum": "untrained",
|
|
||||||
"dreams": "untrained",
|
|
||||||
"lore": "untrained",
|
|
||||||
"navigation": "untrained"
|
|
||||||
},
|
|
||||||
"presence": {
|
|
||||||
"animalHandling": "untrained",
|
|
||||||
"perception": "untrained",
|
|
||||||
"sneak": "untrained",
|
|
||||||
"speech": "untrained",
|
|
||||||
"vibes": "untrained"
|
|
||||||
},
|
|
||||||
"hands": {
|
|
||||||
"accuracy": "untrained",
|
|
||||||
"crafting": "untrained",
|
|
||||||
"engineering": "untrained",
|
|
||||||
"explosives": "untrained",
|
|
||||||
"piloting": "untrained"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"aspect": {
|
|
||||||
"name": "",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
"roles": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"weapon": {
|
|
||||||
"name": "",
|
|
||||||
"damage": "",
|
|
||||||
"quivers": {
|
|
||||||
"value": 0,
|
|
||||||
"min": 0,
|
|
||||||
"max": 5
|
|
||||||
},
|
|
||||||
"mags": {
|
|
||||||
"value": 0,
|
|
||||||
"min": 0,
|
|
||||||
"max": 5
|
|
||||||
},
|
|
||||||
"cells": {
|
|
||||||
"value": 0,
|
|
||||||
"min": 0,
|
|
||||||
"max": 5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inventory": {
|
|
||||||
"backpack": [],
|
|
||||||
"bytes": {
|
|
||||||
"value": 0,
|
|
||||||
"min": 0
|
|
||||||
},
|
|
||||||
"supplies": {
|
|
||||||
"value": 0,
|
|
||||||
"min": 0,
|
|
||||||
"max": 5
|
|
||||||
},
|
|
||||||
"materials": {
|
|
||||||
"value": 0,
|
|
||||||
"min": 0,
|
|
||||||
"max": 5
|
|
||||||
},
|
|
||||||
"pet": {},
|
|
||||||
"transport": {},
|
|
||||||
"spells": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Mob": {
|
|
||||||
"templates": []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Item": {
|
"Item": {
|
||||||
"types": [
|
"types": [
|
||||||
"weapon",
|
"weapon",
|
||||||
|
|
@ -144,66 +16,6 @@
|
||||||
"service",
|
"service",
|
||||||
"legendaryItem",
|
"legendaryItem",
|
||||||
"spell"
|
"spell"
|
||||||
],
|
|
||||||
"templates": {
|
|
||||||
"common": {
|
|
||||||
"name": "",
|
|
||||||
"rarity": "simple",
|
|
||||||
"cost": {
|
|
||||||
"min": 0,
|
|
||||||
"value": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"weapon": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Armor": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Equipment": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"foil": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"pet": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"transportation": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"structure": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"service": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"legendaryItem": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"spell": {
|
|
||||||
"templates": [
|
|
||||||
"common"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
<select>
|
<select name="{{fieldToUpdate}}">
|
||||||
|
{{#select selected}}
|
||||||
|
<option value="">---</option>
|
||||||
{{#each (dotdungeon-array "d4" "d6" "d8" "d10" "d12" "d20")}}
|
{{#each (dotdungeon-array "d4" "d6" "d8" "d10" "d12" "d20")}}
|
||||||
<option value="{{this}}">{{this}}</option>
|
<option value="{{this}}">{{this}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
|
|
@ -2,5 +2,5 @@
|
||||||
<button class="roll-stat" data-stat="{{name}}">
|
<button class="roll-stat" data-stat="{{name}}">
|
||||||
{{localize (concat "dotdungeon.stat." name)}}
|
{{localize (concat "dotdungeon.stat." name)}}
|
||||||
</button>
|
</button>
|
||||||
{{> dotdungeon.dice_choice }}
|
{{> dotdungeon.dice_choice fieldToUpdate=(concat "system.stats." name) selected=value }}
|
||||||
</label>
|
</label>
|
||||||
|
|
@ -1,14 +1,15 @@
|
||||||
<form autocomplete="off" class="actor--pc">
|
<form autocomplete="off" class="actor--pc">
|
||||||
|
{{log system}}
|
||||||
{{#> dotdungeon.panel class="avatar" title="dotdungeon.panel.avatar"}}
|
{{#> dotdungeon.panel class="avatar" title="dotdungeon.panel.avatar"}}
|
||||||
Avatar Content
|
Avatar Content
|
||||||
{{/ dotdungeon.panel}}
|
{{/ dotdungeon.panel}}
|
||||||
{{#> dotdungeon.panel class="stats" title="dotdungeon.panel.statistics"}}
|
{{#> dotdungeon.panel class="stats" title="dotdungeon.panel.statistics"}}
|
||||||
{{#each (dotdungeon-array "build" "meta" "presence" "hands" "tilt" "rng")}}
|
{{#each system.stats }}
|
||||||
{{> dotdungeon.stat name=this}}
|
{{> dotdungeon.stat name=@key value=this}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{/ dotdungeon.panel}}
|
{{/ dotdungeon.panel}}
|
||||||
{{#> dotdungeon.panel class="skills" title="dotdungeon.panel.skills"}}
|
{{#> dotdungeon.panel class="skills" title="dotdungeon.panel.skills"}}
|
||||||
{{> dotdungeon.skills }}
|
Skills
|
||||||
{{/ dotdungeon.panel}}
|
{{/ dotdungeon.panel}}
|
||||||
{{#> dotdungeon.panel class="backpack" title="dotdungeon.panel.backpack"}}
|
{{#> dotdungeon.panel class="backpack" title="dotdungeon.panel.backpack"}}
|
||||||
Backpack
|
Backpack
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue