Compare commits
No commits in common. "b21ba191d8c223e27df0c9a779a96fa9021d84fc" and "c42f8b90b3e545d5305b8d9464593b283b9a5792" have entirely different histories.
b21ba191d8
...
c42f8b90b3
|
|
@ -1,8 +0,0 @@
|
||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -16,7 +16,6 @@
|
||||||
"@foundryvtt/foundryvtt-cli": "^3.0.0",
|
"@foundryvtt/foundryvtt-cli": "^3.0.0",
|
||||||
"cb": "^0.1.1",
|
"cb": "^0.1.1",
|
||||||
"del": "^8.0.1",
|
"del": "^8.0.1",
|
||||||
"fvtt-types": "npm:@league-of-foundry-developers/foundry-vtt-types@^13.346.0-beta.20250812191140",
|
|
||||||
"gulp": "^5.0.1",
|
"gulp": "^5.0.1",
|
||||||
"gulp-replace": "^1.1.4",
|
"gulp-replace": "^1.1.4",
|
||||||
"gulp-sass": "^6.0.1",
|
"gulp-sass": "^6.0.1",
|
||||||
|
|
|
||||||
23
src/main.mjs
23
src/main.mjs
|
|
@ -1,10 +1,10 @@
|
||||||
|
import {SkillSheet} from "./module/sheets/skillSheet.mjs";
|
||||||
|
import {SpellSheet} from "./module/sheets/spellSheet.mjs";
|
||||||
|
import {SkillDataModel} from "./module/data/skill.mjs";
|
||||||
|
import {SpellDataModel} from "./module/data/spell.mjs";
|
||||||
|
import {Character} from "./module/documents/character.mjs";
|
||||||
import {PlayerCharacterDataModel} from "./module/data/character.mjs";
|
import {PlayerCharacterDataModel} from "./module/data/character.mjs";
|
||||||
import { SkillSheet } from "./module/sheets/skillSheet.mjs";
|
import {CharacterSheet} from "./module/Sheet/CharacterSheet.mjs";
|
||||||
import { SpellSheet } from "./module/sheets/spellSheet.mjs";
|
|
||||||
import { SkillDataModel } from "./module/data/skill.mjs";
|
|
||||||
import { SpellDataModel } from "./module/data/spell.mjs";
|
|
||||||
import { Character } from "./module/documents/character.mjs";
|
|
||||||
import { CharacterSheet } from "./module/sheets/characterSheet.mjs";
|
|
||||||
|
|
||||||
Hooks.once("init", () => {
|
Hooks.once("init", () => {
|
||||||
|
|
||||||
|
|
@ -21,13 +21,12 @@ Hooks.once("init", () => {
|
||||||
spell: SpellDataModel
|
spell: SpellDataModel
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("DSA 4.1 is ready for development!")
|
foundry.documents.collections.Actors.registerSheet("dsa41.character", CharacterSheet, {
|
||||||
|
|
||||||
Actors.registerSheet('dsa41.character', CharacterSheet, {
|
|
||||||
types: ["character"],
|
types: ["character"],
|
||||||
makeDefault: true,
|
makeDefault: true
|
||||||
label: 'DSA41.CharacterLabels.Item'
|
});
|
||||||
})
|
|
||||||
|
console.log("DSA 4.1 is ready for development!")
|
||||||
|
|
||||||
// Register sheet application classes
|
// Register sheet application classes
|
||||||
Items.registerSheet('dsa41.skill', SkillSheet, {
|
Items.registerSheet('dsa41.skill', SkillSheet, {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import {SkillDataModel} from "./skill.mjs";
|
import { Skill } from "./Items/skill.mjs";
|
||||||
import {SpellDataModel} from "./spell.mjs";
|
import { Spell } from "./Items/spell.mjs";
|
||||||
|
|
||||||
const {
|
const {
|
||||||
SchemaField, NumberField, StringField, ArrayField, BooleanField, ForeignDocumentField
|
SchemaField, NumberField, StringField, ArrayField, BooleanField, EmbeddedCollectionField,
|
||||||
} = foundry.data.fields;
|
} = foundry.data.fields;
|
||||||
|
|
||||||
export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel {
|
export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel {
|
||||||
|
|
@ -113,9 +113,8 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel {
|
||||||
name: new StringField(),
|
name: new StringField(),
|
||||||
auswahlen: new ArrayField(new StringField()),
|
auswahlen: new ArrayField(new StringField()),
|
||||||
})),
|
})),
|
||||||
|
talente: new EmbeddedCollectionField( { model: Skill }),
|
||||||
talente: new ArrayField ( new ForeignDocumentField(Item) ),
|
zauber: new EmbeddedCollectionField( { model: Spell }),
|
||||||
zauber: new ArrayField ( new ForeignDocumentField(Item) ),
|
|
||||||
liturgien: new ArrayField(new SchemaField({
|
liturgien: new ArrayField(new SchemaField({
|
||||||
name: new StringField(),
|
name: new StringField(),
|
||||||
})),
|
})),
|
||||||
|
|
@ -127,12 +126,8 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel {
|
||||||
notizen: new ArrayField(new SchemaField({
|
notizen: new ArrayField(new SchemaField({
|
||||||
key: new StringField(),
|
key: new StringField(),
|
||||||
notiz: new StringField(),
|
notiz: new StringField(),
|
||||||
})),
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_initialize(options) {
|
|
||||||
super._initialize(options);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,22 +1,9 @@
|
||||||
import {importCharacter} from "../xml-import/xml-import.mjs";
|
export class Character extends Item {
|
||||||
|
|
||||||
export class Character extends Actor {
|
|
||||||
|
|
||||||
import() {
|
|
||||||
let input = document.createElement('input')
|
|
||||||
input.type = 'file'
|
|
||||||
input.accept = '.xml'
|
|
||||||
input.onchange = e => {
|
|
||||||
importCharacter(this.id, e.target.files[0])
|
|
||||||
}
|
|
||||||
input.click()
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Augment the basic Item data model with additional dynamic data.
|
* Augment the basic Item data model with additional dynamic data.
|
||||||
*/
|
*/
|
||||||
prepareData() {
|
prepareData() {
|
||||||
super.prepareData();
|
super.prepareData();
|
||||||
this.prepareEmbeddedDocuments();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
export class CharacterSheet extends ActorSheet {
|
|
||||||
/**@override */
|
|
||||||
static get defaultOptions() {
|
|
||||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
|
||||||
classes: ['dsa41', 'sheet', 'actor', 'character'],
|
|
||||||
width: 520,
|
|
||||||
height: 480,
|
|
||||||
tabs: [
|
|
||||||
{
|
|
||||||
navSelector: '.sheet-tabs',
|
|
||||||
contentSelector: '.sheet-body',
|
|
||||||
initial: 'description',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @override */
|
|
||||||
get template() {
|
|
||||||
return `systems/DSA_4-1/templates/actor/actor-character-sheet.hbs`;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @override */
|
|
||||||
getData() {
|
|
||||||
// Retrieve the data structure from the base sheet. You can inspect or log
|
|
||||||
// the context variable to see the structure, but some key properties for
|
|
||||||
// sheets are the actor object, the data object, whether or not it's
|
|
||||||
// editable, the items array, and the effects array.
|
|
||||||
const context = super.getData();
|
|
||||||
|
|
||||||
// Use a safe clone of the actor data for further operations.
|
|
||||||
const actorData = context.data;
|
|
||||||
|
|
||||||
// Add the actor's data to context.data for easier access, as well as flags.
|
|
||||||
context.system = actorData.system;
|
|
||||||
context.flags = actorData.flags;
|
|
||||||
context.skills = [];
|
|
||||||
if ( context.system.talente?.length >= 0) {
|
|
||||||
context.system.talente.forEach(talent => {
|
|
||||||
const tempTalent = talent();
|
|
||||||
console.log(tempTalent.system.probe);
|
|
||||||
context.skills.push({
|
|
||||||
talentName: tempTalent.name,
|
|
||||||
probe: `ROLLDATA(${Object.values(tempTalent.system.probe).join("/")})`
|
|
||||||
});
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
console.log(context);
|
|
||||||
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
|
|
||||||
// Everything below here is only needed if the sheet is editable
|
|
||||||
if (!this.isEditable) return;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -73,21 +73,7 @@
|
||||||
],
|
],
|
||||||
"documentTypes": {
|
"documentTypes": {
|
||||||
"Actor": {
|
"Actor": {
|
||||||
"character": {
|
"character": {}
|
||||||
"numberFields": [
|
|
||||||
"groesse", "alter", "gewicht"
|
|
||||||
],
|
|
||||||
"stringFields": [
|
|
||||||
"name"
|
|
||||||
],
|
|
||||||
"schemaFields": [
|
|
||||||
"attribute", "meta"
|
|
||||||
],
|
|
||||||
"arrayFields": [
|
|
||||||
"talente",
|
|
||||||
"zauber"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"Item": {
|
"Item": {
|
||||||
"Skill": {
|
"Skill": {
|
||||||
|
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
<form class="{{cssClass}} {{actor.type}} flexcol" autocomplete="off">
|
|
||||||
|
|
||||||
{{!-- Sheet Header --}}
|
|
||||||
<header class="sheet-header">
|
|
||||||
{{!-- Header stuff goes here --}}
|
|
||||||
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="100" width="100"/>
|
|
||||||
<div class="header-fields">
|
|
||||||
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name"/></h1>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{{!-- Sheet Tab Navigation --}}
|
|
||||||
<nav class="sheet-tabs tabs" data-group="primary">
|
|
||||||
<a class="item" data-tab="overview">Übersicht</a>
|
|
||||||
<a class="item" data-tab="skills">Talente</a>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
{{!-- Sheet Body --}}
|
|
||||||
<section class="sheet-body">
|
|
||||||
<div class="tab description" data-group="primary" data-tab="description">
|
|
||||||
<div><label>Spezies
|
|
||||||
<input type="text" name="system.meta.spezies.value" value="{{system.meta.spezies}}"/>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div><label>Kultur<input type="text" name="system.meta.kultur.value" value="{{system.meta.kultur}}"/></label>
|
|
||||||
</div>
|
|
||||||
<div><label>Profession<input type="text" name="system.meta.profession.value"
|
|
||||||
value="{{system.meta.profession}}"/></label>
|
|
||||||
</div>
|
|
||||||
<div><label>Geschlecht<input type="text" name="system.meta.geschlecht.value"
|
|
||||||
value="{{system.meta.geschlecht}}"/></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab skills" data-group="primary" data-tab="skills">
|
|
||||||
<ul>
|
|
||||||
{{#each skills}}
|
|
||||||
<li><div>
|
|
||||||
<b>{{this.talentName}}</b>
|
|
||||||
{{this.probe}}
|
|
||||||
</div></li>
|
|
||||||
{{/each}}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</form>
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
<form class="{{cssClass}} {{actor.type}} flexcol" autocomplete="off">
|
||||||
|
|
||||||
|
{{!-- Sheet Header --}}
|
||||||
|
<header class="sheet-header">
|
||||||
|
{{!-- Header stuff goes here --}}
|
||||||
|
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="100" width="100"/>
|
||||||
|
<div class="header-fields">
|
||||||
|
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name"/></h1>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{!-- Sheet Tab Navigation --}}
|
||||||
|
<nav class="sheet-tabs tabs" data-group="primary">
|
||||||
|
<a class="item" data-tab="overview">Übersicht</a>
|
||||||
|
<a class="item" data-tab="skills">Talente</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
{{!-- Sheet Body --}}
|
||||||
|
<section class="sheet-body">
|
||||||
|
<div class="tab description" data-group="primary" data-tab="description">
|
||||||
|
<input type="text" name="system.meta.spezies.value" value="{{system.meta.spezies.value}}" />
|
||||||
|
<input type="text" name="system.meta.kultur.value" value="{{system.meta.kultur.value}}" />
|
||||||
|
<input type="text" name="system.meta.profession.value" value="{{system.meta.profession.value}}" />
|
||||||
|
<input type="text" name="system.meta.geschlecht.value" value="{{system.meta.geschlecht.value}}" />
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</form>
|
||||||
Loading…
Reference in New Issue