basic roll modification logic
This commit is contained in:
@@ -90,6 +90,7 @@
|
||||
"DG.Roll.Damage": "Damage",
|
||||
"DG.Roll.RollingDamageFor": "Rolling DAMAGE for",
|
||||
"DG.Roll.Or": "Or",
|
||||
"DG.Roll.Roll": "Roll",
|
||||
|
||||
"DG.Physical.Wounds": "Wounds",
|
||||
"DG.Physical.FirstAidLabel": "First Aid Has Already Been Attempted: ",
|
||||
|
||||
@@ -90,6 +90,7 @@
|
||||
"DG.Roll.Damage": "ダメージ",
|
||||
"DG.Roll.RollingDamageFor": "ダメージ・ロール:",
|
||||
"DG.Roll.Or": " / ",
|
||||
"DG.Roll.Roll": "振る",
|
||||
|
||||
"DG.Physical.Wounds": "傷",
|
||||
"DG.Physical.FirstAidLabel": "応急処置は既に施された",
|
||||
|
||||
@@ -154,7 +154,8 @@ export class DeltaGreenActorSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
// Rollable abilities - bind to everything with the 'Rollable' class
|
||||
html.find('.rollable').click(this._onRoll.bind(this));
|
||||
//html.find('.rollable').click(this._onRoll.bind(this));
|
||||
html.find('.rollable').mousedown(this._onRoll.bind(this));
|
||||
|
||||
// Drag events for macros.
|
||||
if (this.actor.owner) {
|
||||
@@ -218,7 +219,7 @@ export class DeltaGreenActorSheet extends ActorSheet {
|
||||
htmlContent += `</div>`;
|
||||
|
||||
new Dialog({
|
||||
content:htmlContent,
|
||||
content: htmlContent,
|
||||
title: game.i18n.translations.DG.Skills.AddTypedOrCustomSkill,
|
||||
buttons: {
|
||||
add:{
|
||||
@@ -298,6 +299,11 @@ export class DeltaGreenActorSheet extends ActorSheet {
|
||||
const element = event.currentTarget;
|
||||
const dataset = element.dataset;
|
||||
|
||||
if(event && event.which === 2){
|
||||
// probably don't want rolls to trigger from a middle mouse click
|
||||
return;
|
||||
}
|
||||
|
||||
if (dataset.roll) {
|
||||
let roll = new Roll(dataset.roll, this.actor.data.data);
|
||||
let key = dataset.label ? dataset.label : '';
|
||||
@@ -305,23 +311,44 @@ export class DeltaGreenActorSheet extends ActorSheet {
|
||||
let label = dataset.label ? `${dataset.label}` : '';
|
||||
let targetVal = "";
|
||||
let rollType = dataset.rolltype ? dataset.rolltype : '';
|
||||
|
||||
// if shift-click or right click, bring up roll editor dialog
|
||||
let requestedModifyRoll = (event && event.shiftKey || event.which === 3); //(event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey));
|
||||
|
||||
// check the 'data-target="something" property to determine how to grab the target for the roll
|
||||
if(rollType === "skill" || rollType === "typeskill"){
|
||||
targetVal = dataset.target;
|
||||
label = game.i18n.localize(label).toUpperCase();
|
||||
sendPercentileTestToChat(this.actor, label, targetVal);
|
||||
|
||||
if(requestedModifyRoll){
|
||||
this._showModifyPercentileTestDialogue(this.actor, label, targetVal);
|
||||
}
|
||||
else{
|
||||
sendPercentileTestToChat(this.actor, label, targetVal);
|
||||
}
|
||||
}
|
||||
else if(dataset.target === "statistic.x5"){
|
||||
let stat = this.actor.data.data.statistics[key];
|
||||
targetVal = stat.x5;
|
||||
label = game.i18n.localize("DG.Attributes." + key).toUpperCase();
|
||||
sendPercentileTestToChat(this.actor, label, targetVal);
|
||||
|
||||
if(requestedModifyRoll){
|
||||
this._showModifyPercentileTestDialogue(this.actor, label, targetVal);
|
||||
}
|
||||
else{
|
||||
sendPercentileTestToChat(this.actor, label, targetVal);
|
||||
}
|
||||
}
|
||||
else if(rollType === "sanity"){
|
||||
targetVal = this.actor.data.data.sanity.value;
|
||||
label = game.i18n.localize("DG.Attributes.SAN").toUpperCase();
|
||||
sendPercentileTestToChat(this.actor, label, targetVal);
|
||||
|
||||
if(requestedModifyRoll){
|
||||
this._showModifyPercentileTestDialogue(this.actor, label, targetVal);
|
||||
}
|
||||
else{
|
||||
sendPercentileTestToChat(this.actor, label, targetVal);
|
||||
}
|
||||
}
|
||||
else if(rollType === "damage"){
|
||||
// damage roll, not a skill check
|
||||
@@ -336,6 +363,45 @@ export class DeltaGreenActorSheet extends ActorSheet {
|
||||
}
|
||||
}
|
||||
|
||||
async _showModifyPercentileTestDialogue(actor, label, originalTarget){
|
||||
|
||||
let template = "systems/deltagreen/templates/dialog/modify-percentile-roll.html";
|
||||
let backingData = {
|
||||
data:{
|
||||
label: label,
|
||||
originalTarget: originalTarget,
|
||||
targetModifier: 20
|
||||
},
|
||||
};
|
||||
|
||||
let html = await renderTemplate(template, backingData);
|
||||
|
||||
new Dialog({
|
||||
content: html,
|
||||
title: "Modify Roll",
|
||||
default: "roll",
|
||||
buttons: {
|
||||
roll:{
|
||||
label: game.i18n.translations.DG.Roll.Roll,
|
||||
callback: html => {
|
||||
let targetModifier = html.find("[name='targetModifier']").val();
|
||||
|
||||
let newTarget = parseInt(originalTarget);
|
||||
|
||||
try{
|
||||
newTarget += parseInt(targetModifier);
|
||||
}
|
||||
catch(ex){
|
||||
console.log(ex);
|
||||
}
|
||||
|
||||
sendPercentileTestToChat(actor, label, newTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
}).render(true);
|
||||
}
|
||||
|
||||
_resetBreakingPoint(event){
|
||||
event.preventDefault();
|
||||
let currentBreakingPoint = 0;
|
||||
|
||||
@@ -4,6 +4,8 @@ import { DeltaGreenActorSheet } from "./actor/actor-sheet.js";
|
||||
import { DeltaGreenItem } from "./item/item.js";
|
||||
import { DeltaGreenItemSheet } from "./item/item-sheet.js";
|
||||
|
||||
import { preloadHandlebarsTemplates } from "./templates.js";
|
||||
|
||||
Hooks.once('init', async function() {
|
||||
|
||||
game.deltagreen = {
|
||||
@@ -30,8 +32,11 @@ Hooks.once('init', async function() {
|
||||
Actors.registerSheet("deltagreen", DeltaGreenActorSheet, { makeDefault: true });
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("deltagreen", DeltaGreenItemSheet, { makeDefault: true });
|
||||
|
||||
// Preload Handlebars Templates
|
||||
preloadHandlebarsTemplates();
|
||||
|
||||
// Add Handlebars helpers, here are a few useful examples:
|
||||
// Add Handlebars helpers
|
||||
Handlebars.registerHelper('concat', function() {
|
||||
var outStr = '';
|
||||
for (var arg in arguments) {
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Define a set of template paths to pre-load
|
||||
* Pre-loaded templates are compiled and cached for fast access when rendering
|
||||
* NWE - I am not sure if there is actually much point to this
|
||||
* @return {Promise}
|
||||
*/
|
||||
export const preloadHandlebarsTemplates = async function() {
|
||||
return loadTemplates([
|
||||
"systems/deltagreen/templates/actor/actor-sheet.html",
|
||||
"systems/deltagreen/templates/dialog/modify-percentile-roll.html"
|
||||
]);
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
<form>
|
||||
<div>
|
||||
<div>
|
||||
<p>Skill: {{data.label}}</p>
|
||||
</div>
|
||||
<br>
|
||||
<label>Original Target: {{data.originalTarget}}</label>
|
||||
<label>Modify Target<label>
|
||||
<input id="test" type="number" name="targetModifier" value="{{data.targetModifier}}" />
|
||||
</div>
|
||||
</form>
|
||||
Reference in New Issue
Block a user