roll modifier working for skill & lethality tests

This commit is contained in:
The Last Scrub
2020-11-25 22:05:19 -08:00
parent 9af4a38920
commit f7ce00aea3
7 changed files with 112 additions and 75 deletions
+14
View File
@@ -0,0 +1,14 @@
.skill-modify-grid{
display: grid;
grid-template-columns: auto auto;
align-content: left;
justify-content: left;
align-items: left;
padding: 10px;
grid-gap: 10px 15px;
}
.numeric-label-field{
width: 50px !important;
text-align: center !important;
}
+6 -1
View File
@@ -200,5 +200,10 @@
"DG.ItemWindow.Weapons.ArmorPiercing": "Armor Piercing",
"DG.ItemWindow.Weapons.Ammo": "Ammo (Amount/Type)",
"DG.ItemWindow.Weapons.Range": "Range",
"DG.ItemWindow.Weapons.KillRadius": "Kill Radius"
"DG.ItemWindow.Weapons.KillRadius": "Kill Radius",
"DG.ModifySkillRollDialogue.Title": "Modify Roll",
"DG.ModifySkillRollDialogue.Test": "Test:",
"DG.ModifySkillRollDialogue.OriginalTarget": "Original Target:",
"DG.ModifySkillRollDialogue.TargetModifier": "Modify Target:"
}
+6 -1
View File
@@ -200,5 +200,10 @@
"DG.ItemWindow.Weapons.ArmorPiercing": "武具貫通",
"DG.ItemWindow.Weapons.Ammo": "弾 (量/種類/など)",
"DG.ItemWindow.Weapons.Range": "距離",
"DG.ItemWindow.Weapons.KillRadius": "致命の半径"
"DG.ItemWindow.Weapons.KillRadius": "致命の半径",
"DG.ModifySkillRollDialogue.Title": "ロールの変更",
"DG.ModifySkillRollDialogue.Test": "テスト:",
"DG.ModifySkillRollDialogue.OriginalTarget": "元のターゲット:",
"DG.ModifySkillRollDialogue.TargetModifier": "変換:"
}
+30 -64
View File
@@ -1,4 +1,4 @@
import { sendPercentileTestToChat, sendLethalityTestToChat, sendDamageRollToChat } from "../roll/roll.js"
import { sendPercentileTestToChat, sendLethalityTestToChat, sendDamageRollToChat, showModifyPercentileTestDialogue } from "../roll/roll.js"
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
@@ -300,18 +300,20 @@ export class DeltaGreenActorSheet extends ActorSheet {
const dataset = element.dataset;
if(event && event.which === 2){
// probably don't want rolls to trigger from a middle mouse click
// probably don't want rolls to trigger from a middle mouse click so just kill it here
return;
}
if (dataset.roll) {
let roll = new Roll(dataset.roll, this.actor.data.data);
//let roll = new Roll(dataset.roll, this.actor.data.data);
let key = dataset.label ? dataset.label : '';
//let label = dataset.label ? `Rolling ${dataset.label.toUpperCase()}` : '';
let label = dataset.label ? `${dataset.label}` : '';
let targetVal = "";
let rollType = dataset.rolltype ? dataset.rolltype : '';
let isDamageRoll = false;
let isLethalityRoll = false;
// 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));
@@ -319,87 +321,51 @@ export class DeltaGreenActorSheet extends ActorSheet {
if(rollType === "skill" || rollType === "typeskill"){
targetVal = dataset.target;
label = game.i18n.localize(label).toUpperCase();
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();
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();
if(requestedModifyRoll){
this._showModifyPercentileTestDialogue(this.actor, label, targetVal);
}
else{
sendPercentileTestToChat(this.actor, label, targetVal);
}
}
else if(rollType === "damage"){
// damage roll, not a skill check
isDamageRoll = true;
label = dataset.label ? dataset.label : '';
sendDamageRollToChat(this.actor, label, dataset.roll);
}
else if(rollType === "lethality"){
// a lethality roll
isLethalityRoll = true;
targetVal = dataset.target;
sendLethalityTestToChat(this.actor, label, targetVal);
}
}
}
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);
}
if(isDamageRoll){
if(requestedModifyRoll){
// TO DO: Damage roll modifier dialogue
}
else{
sendDamageRollToChat(this.actor, label, dataset.roll);
}
}
}).render(true);
else{
if(requestedModifyRoll){
showModifyPercentileTestDialogue(this.actor, label, targetVal, isLethalityRoll);
}
else{
if(isLethalityRoll)
{
sendLethalityTestToChat(this.actor, label, targetVal);
}
else{
sendPercentileTestToChat(this.actor, label, targetVal);
}
}
}
}
}
_resetBreakingPoint(event){
+46
View File
@@ -187,4 +187,50 @@ export function sendPercentileTestToChat(actor, skill, target){
roll: roll,
rollMode: game.settings.get("core", "rollMode")
});
}
export async function showModifyPercentileTestDialogue(actor, label, originalTarget, isLethalityTest){
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: game.i18n.localize("DG.ModifySkillRollDialogue.Title"),
default: "roll",
buttons: {
roll:{
label: game.i18n.translations.DG.Roll.Roll,
callback: html => {
try{
let targetModifier = html.find("[name='targetModifier']").val(); // this is text as a heads up
let newTarget = parseInt(originalTarget); // this should be an int, but technically the incoming value is text, so parse it just to be safe
newTarget += parseInt(targetModifier);
if(isLethalityTest){
sendLethalityTestToChat(actor, label, newTarget);
}
else{
sendPercentileTestToChat(actor, label, newTarget);
}
}
catch(ex){
console.log(ex);
}
}
}
}
}
).render(true);
}
+1 -1
View File
@@ -8,7 +8,7 @@
"templateVersion": 2,
"author": "TheLastScrub (https://github.com/TheLastScrub)",
"esmodules": ["module/deltagreen.js"],
"styles": ["css/deltagreen.css"],
"styles": ["css/deltagreen.css", "css/dialogue.css"],
"scripts": [],
"packs": [
{
+9 -8
View File
@@ -1,11 +1,12 @@
<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 class="skill-modify-grid">
<span>{{localize 'DG.ModifySkillRollDialogue.Test'}}</span>
<span>{{data.label}}</span>
<span>{{localize 'DG.ModifySkillRollDialogue.OriginalTarget'}}</span>
<input class="numeric-label-field" disabled value="{{data.originalTarget}}" />
<span>{{localize 'DG.ModifySkillRollDialogue.TargetModifier'}}</span>
<input class="numeric-label-field" type="number" name="targetModifier" value="{{data.targetModifier}}" />
</div>
</form>