WIP: Generators
parent
e23adf87f9
commit
0ea0e25fba
|
@ -15,6 +15,7 @@
|
||||||
"OSE.dialog.partysheet": "Party Overview",
|
"OSE.dialog.partysheet": "Party Overview",
|
||||||
"OSE.dialog.selectActors": "Select PCs",
|
"OSE.dialog.selectActors": "Select PCs",
|
||||||
"OSE.dialog.dealXP": "Deal XP",
|
"OSE.dialog.dealXP": "Deal XP",
|
||||||
|
"OSE.dialog.generateSaves": "Generate Saves",
|
||||||
|
|
||||||
"OSE.Formula": "Formula",
|
"OSE.Formula": "Formula",
|
||||||
"OSE.SitMod": "Situational Modifier",
|
"OSE.SitMod": "Situational Modifier",
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
"OSE.dialog.partysheet": "Fiche de Groupe",
|
"OSE.dialog.partysheet": "Fiche de Groupe",
|
||||||
"OSE.dialog.selectActors": "Choisir PJs",
|
"OSE.dialog.selectActors": "Choisir PJs",
|
||||||
"OSE.dialog.dealXP": "Donner XP",
|
"OSE.dialog.dealXP": "Donner XP",
|
||||||
|
"OSE.dialog.generateSaves": "Générer les Sauvegardes",
|
||||||
|
|
||||||
"OSE.Formula": "Formule",
|
"OSE.Formula": "Formule",
|
||||||
"OSE.SitMod": "Mod. de situation",
|
"OSE.SitMod": "Mod. de situation",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { OseActor } from "./entity.js";
|
import { OseActor } from "./entity.js";
|
||||||
import { OseActorSheet } from "./actor-sheet.js";
|
import { OseActorSheet } from "./actor-sheet.js";
|
||||||
import { OseCharacterModifiers } from "../dialog/character-modifiers.js";
|
import { OseCharacterModifiers } from "../dialog/character-modifiers.js";
|
||||||
|
import { OseCharacterCreator } from "../dialog/character-creation.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend the basic ActorSheet with some very simple modifications
|
* Extend the basic ActorSheet with some very simple modifications
|
||||||
|
@ -33,6 +34,22 @@ export class OseActorSheetCharacter extends OseActorSheet {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Character creation helpers
|
||||||
|
* @param {...any} args
|
||||||
|
*/
|
||||||
|
async _render(...args) {
|
||||||
|
super._render(...args).then(() => {
|
||||||
|
if (this.actor.isNew()) {
|
||||||
|
event.preventDefault();
|
||||||
|
new OseCharacterCreator(this.actor, {
|
||||||
|
top: this.position.top + 40,
|
||||||
|
left: this.position.left + (this.position.width - 400) / 2,
|
||||||
|
}).render(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare data for rendering the Actor sheet
|
* Prepare data for rendering the Actor sheet
|
||||||
* The prepared data object contains both the actor data as well as additional sheet options
|
* The prepared data object contains both the actor data as well as additional sheet options
|
||||||
|
|
|
@ -51,6 +51,56 @@ export class OseActor extends Actor {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isNew() {
|
||||||
|
const data = this.data.data;
|
||||||
|
if (this.data.type == 'character') {
|
||||||
|
let ct = 0;
|
||||||
|
Object.values(data.scores).forEach((el) => {
|
||||||
|
ct += el.value;
|
||||||
|
})
|
||||||
|
return ct == 0 ? true : false;
|
||||||
|
} else if (this.data.type == 'monster') {
|
||||||
|
let ct = 0;
|
||||||
|
Object.values(data.saves).forEach(el => {
|
||||||
|
ct += el.value;
|
||||||
|
});
|
||||||
|
return ct == 0 ? true : false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
generator() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
generateSave(hd) {
|
||||||
|
let saves = {};
|
||||||
|
for (let i = 0; i <= hd; i++) {
|
||||||
|
let tmp = CONFIG.OSE.monster_saves[i];
|
||||||
|
if (tmp) {
|
||||||
|
saves = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.update({
|
||||||
|
"data.saves": {
|
||||||
|
death: {
|
||||||
|
value: saves.d
|
||||||
|
},
|
||||||
|
wand: {
|
||||||
|
value: saves.w
|
||||||
|
},
|
||||||
|
paralysis: {
|
||||||
|
value: saves.p
|
||||||
|
},
|
||||||
|
breath: {
|
||||||
|
value: saves.b
|
||||||
|
},
|
||||||
|
spell: {
|
||||||
|
value: saves.s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/* Rolls */
|
/* Rolls */
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -540,7 +590,7 @@ export class OseActor extends Actor {
|
||||||
let total = 0;
|
let total = 0;
|
||||||
let treasure = this.data.items.filter(i => (i.type == "item" && i.data.treasure))
|
let treasure = this.data.items.filter(i => (i.type == "item" && i.data.treasure))
|
||||||
treasure.forEach((item) => {
|
treasure.forEach((item) => {
|
||||||
total += item.data.quantity.value * item.data.cost;
|
total += item.data.quantity.value * item.data.cost;
|
||||||
});
|
});
|
||||||
data.treasure = total;
|
data.treasure = total;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,38 @@ export class OseActorSheetMonster extends OseActorSheet {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Monster creation helpers
|
||||||
|
* @param {...any} args
|
||||||
|
*/
|
||||||
|
async _render(...args) {
|
||||||
|
super._render(...args).then(() => {
|
||||||
|
if (this.actor.isNew()) {
|
||||||
|
const template = `
|
||||||
|
<form>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Hit dice count</label>
|
||||||
|
<input name="total" placeholder="Hit Dice" type="text"/>
|
||||||
|
</div>
|
||||||
|
</form>`;
|
||||||
|
new Dialog({
|
||||||
|
title: game.i18n.localize("OSE.dialog.generateSaves"),
|
||||||
|
content: template,
|
||||||
|
buttons: {
|
||||||
|
set: {
|
||||||
|
icon: '<i class="fas fa-dice"></i>',
|
||||||
|
label: game.i18n.localize("OSE.dialog.generateSaves"),
|
||||||
|
callback: (html) => {
|
||||||
|
let hd = html.find('input[name="total"]').val();
|
||||||
|
this.actor.generateSave(hd);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).render(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare data for rendering the Actor sheet
|
* Prepare data for rendering the Actor sheet
|
||||||
* The prepared data object contains both the actor data as well as additional sheet options
|
* The prepared data object contains both the actor data as well as additional sheet options
|
||||||
|
|
|
@ -87,5 +87,70 @@ export const OSE = {
|
||||||
splash: "/systems/ose/assets/splash.png",
|
splash: "/systems/ose/assets/splash.png",
|
||||||
reload: "/systems/ose/assets/reload.png",
|
reload: "/systems/ose/assets/reload.png",
|
||||||
charge: "/systems/ose/assets/charge.png",
|
charge: "/systems/ose/assets/charge.png",
|
||||||
|
},
|
||||||
|
monster_saves: {
|
||||||
|
0: {
|
||||||
|
d: 14,
|
||||||
|
w: 15,
|
||||||
|
p: 16,
|
||||||
|
b: 17,
|
||||||
|
s: 18
|
||||||
|
},
|
||||||
|
1: {
|
||||||
|
d: 12,
|
||||||
|
w: 13,
|
||||||
|
p: 14,
|
||||||
|
b: 15,
|
||||||
|
s: 16
|
||||||
|
},
|
||||||
|
4: {
|
||||||
|
d: 10,
|
||||||
|
w: 11,
|
||||||
|
p: 12,
|
||||||
|
b: 13,
|
||||||
|
s: 14
|
||||||
|
},
|
||||||
|
7: {
|
||||||
|
d: 8,
|
||||||
|
w: 9,
|
||||||
|
p: 10,
|
||||||
|
b: 10,
|
||||||
|
s: 12
|
||||||
|
},
|
||||||
|
10: {
|
||||||
|
d: 6,
|
||||||
|
w: 7,
|
||||||
|
p: 8,
|
||||||
|
b: 8,
|
||||||
|
s: 10
|
||||||
|
},
|
||||||
|
13: {
|
||||||
|
d: 4,
|
||||||
|
w: 5,
|
||||||
|
p: 6,
|
||||||
|
b: 5,
|
||||||
|
s: 8
|
||||||
|
},
|
||||||
|
16: {
|
||||||
|
d: 2,
|
||||||
|
w: 3,
|
||||||
|
p: 4,
|
||||||
|
b: 3,
|
||||||
|
s: 6
|
||||||
|
},
|
||||||
|
19: {
|
||||||
|
d: 2,
|
||||||
|
w: 2,
|
||||||
|
p: 2,
|
||||||
|
b: 2,
|
||||||
|
s: 4
|
||||||
|
},
|
||||||
|
22: {
|
||||||
|
d: 2,
|
||||||
|
w: 2,
|
||||||
|
p: 2,
|
||||||
|
b: 2,
|
||||||
|
s: 2
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
|
@ -0,0 +1,57 @@
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
import { OseActor } from '../actor/entity.js';
|
||||||
|
|
||||||
|
export class OseCharacterCreator extends FormApplication {
|
||||||
|
static get defaultOptions() {
|
||||||
|
const options = super.defaultOptions;
|
||||||
|
options.id = 'character-creator';
|
||||||
|
options.template =
|
||||||
|
'systems/ose/templates/actors/dialogs/character-creation.html';
|
||||||
|
options.width = 380;
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the Entity name into the window title
|
||||||
|
* @type {String}
|
||||||
|
*/
|
||||||
|
get title() {
|
||||||
|
return `${this.object.name}: ${game.i18n.localize('OSE.dialog.tweaks')}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct and return the data object used to render the HTML template for this form application.
|
||||||
|
* @return {Object}
|
||||||
|
*/
|
||||||
|
getData() {
|
||||||
|
let data = this.object.data;
|
||||||
|
data.user = game.user;
|
||||||
|
data.config = CONFIG.OSE;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called upon form submission after form data is validated
|
||||||
|
* @param event {Event} The initial triggering submission event
|
||||||
|
* @param formData {Object} The object of validated form data with which to update the object
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
async _updateObject(event, formData) {
|
||||||
|
event.preventDefault();
|
||||||
|
// Update the actor
|
||||||
|
this.object.update(formData);
|
||||||
|
// Re-draw the updated sheet
|
||||||
|
this.object.sheet.render(true);
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,19 +31,19 @@
|
||||||
},
|
},
|
||||||
"saves": {
|
"saves": {
|
||||||
"death": {
|
"death": {
|
||||||
"value": 10
|
"value": 0
|
||||||
},
|
},
|
||||||
"wand": {
|
"wand": {
|
||||||
"value": 10
|
"value": 0
|
||||||
},
|
},
|
||||||
"paralysis": {
|
"paralysis": {
|
||||||
"value": 10
|
"value": 0
|
||||||
},
|
},
|
||||||
"breath": {
|
"breath": {
|
||||||
"value": 10
|
"value": 0
|
||||||
},
|
},
|
||||||
"spell": {
|
"spell": {
|
||||||
"value": 10
|
"value": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"movement": {
|
"movement": {
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<form autocomplete="off" onsubmit="event.preventDefault();">
|
||||||
|
<ol class="attribute-list">
|
||||||
|
{{#each config.scores as |score id| }}
|
||||||
|
<li data-score="{{id}}">{{score}}</li>
|
||||||
|
{{/each}}
|
||||||
|
</ol>
|
||||||
|
</form>
|
Loading…
Reference in New Issue