diff --git a/module.json b/module.json
index a3e658f..7854364 100644
--- a/module.json
+++ b/module.json
@@ -1,38 +1,40 @@
{
- "name": "foundry-die-hard",
- "title": "Die Hard",
- "description": "Adjustments for DND5e & PF2e die rolls like fudging...",
- "author": "Jeremy (UranusBytes)",
- "version": "0.1.0",
- "minimumCoreVersion": "9",
- "compatibleCoreVersion": "10.277",
- "esmodules": [
- "scripts/die-hard.js"
- ],
- "styles": [
- "styles/die-hard.css"
- ],
- "dependencies": [
- {
- "name": "lib-wrapper",
- "type": "module"
- }
- ],
- "languages": [
- {
- "lang": "en",
- "name": "English",
- "path": "lang/en.json"
- }
- ],
- "flags": {
- "fvttdevleague": {
- "package-jam": 2022
- }
- },
- "url": "https://github.com/UranusBytes/foundry-die-hard",
- "manifest": "TBD",
- "readme": "https://github.com/UranusBytes/foundry-die-hard/blob/main/README.md",
- "changelog": "https://github.com/UranusBytes/foundry-die-hard/blob/main/CHANGELOG.md",
- "download": "TBD"
+ "id": "foundry-die-hard",
+ "title": "Die Hard",
+ "description": "Adjustments for DND5e & PF2e die rolls like fudging...",
+ "author": "Jeremy (UranusBytes)",
+ "version": "0.1.0",
+ "esmodules": [
+ "scripts/die-hard.js"
+ ],
+ "styles": [
+ "styles/die-hard.css"
+ ],
+ "dependencies": [
+ {
+ "name": "lib-wrapper",
+ "type": "module"
+ }
+ ],
+ "languages": [
+ {
+ "lang": "en",
+ "name": "English",
+ "path": "lang/en.json"
+ }
+ ],
+ "flags": {
+ "fvttdevleague": {
+ "package-jam": 2022
+ }
+ },
+ "compatibility": {
+ "minimum": 10,
+ "verified": "10.291"
+ },
+ "url": "https://github.com/UranusBytes/foundry-die-hard",
+ "manifest": "https://github.com/UranusBytes/foundry-die-hard/releases/latest/download/module.json",
+ "readme": "https://github.com/UranusBytes/foundry-die-hard/blob/main/README.md",
+ "changelog": "https://github.com/UranusBytes/foundry-die-hard/blob/main/CHANGELOG.md",
+ "download": "https://github.com/UranusBytes/foundry-die-hard/releases/download/0.1.0/module.zip"
}
\ No newline at end of file
diff --git a/scripts/classes/DieHard.js b/scripts/classes/DieHard.js
index 2a7297c..fc40e95 100644
--- a/scripts/classes/DieHard.js
+++ b/scripts/classes/DieHard.js
@@ -77,17 +77,17 @@ export default class DieHard {
static getDefaultSimpleKarmaSettings() {
return {
enabled: false,
- history: 5,
- threshold: 5,
- floor: 5
+ history: 2,
+ threshold: 7,
+ floor: 13
}
}
static getAvgSimpleKarmaSettings() {
return {
- enabled: false,
- history: 5,
- threshold: 5,
+ enabled: false,
+ history: 3,
+ threshold: 7,
nudge: 5
}
}
@@ -158,27 +158,33 @@ export default class DieHard {
config: false,
});
- // Enables fudge
- game.settings.register('foundry-die-hard', 'simpleKarmaSettings', {
- name: 'Simple Karma Settings',
- hint: 'Simple Karma Settings',
- scope: 'world',
- config: false,
- default: DieHard.getDefaultSimpleKarmaSettings(),
- type: Object
- });
-
- // Enables karma
- game.settings.register('foundry-die-hard', 'avgKarmaSettings', {
- name: 'Average Karma Settings',
- hint: 'Average Karma Settings',
- scope: 'world',
- config: false,
- default: DieHard.getAvgSimpleKarmaSettings(),
- type: Object
- });
+ // Simple Karma
+ game.settings.register('foundry-die-hard', 'simpleKarmaSettings', {
+ name: 'Simple Karma Settings',
+ hint: 'Simple Karma Settings',
+ scope: 'world',
+ config: false,
+ default: DieHard.getDefaultSimpleKarmaSettings(),
+ type: Object
+ });
+ // Average Karma
+ game.settings.register('foundry-die-hard', 'avgKarmaSettings', {
+ name: 'Average Karma Settings',
+ hint: 'Average Karma Settings',
+ scope: 'world',
+ config: false,
+ default: DieHard.getAvgSimpleKarmaSettings(),
+ type: Object
+ });
+ // Karma Who
+ game.settings.register('foundry-die-hard', 'karmaWho', {
+ scope: 'world',
+ config: false,
+ default: [],
+ type: Array
+ });
}
static async refreshDieHardStatus() {
diff --git a/scripts/classes/DieHardDnd5e.js b/scripts/classes/DieHardDnd5e.js
index d5e79ea..d331c57 100644
--- a/scripts/classes/DieHardDnd5e.js
+++ b/scripts/classes/DieHardDnd5e.js
@@ -74,7 +74,7 @@ export default class DieHardDnd5e extends DieHardSystem{
this.dmToGm('DieHard-Fudge: Fudge not needed, but still wiped from actor...');
} else {
gen_new_result = true;
- let dmMessage = "Fudge (" + result.data.fudgeHow + ") values:" + result.total;
+ let dmMessage = "Fudge (" + result.data.fudgeHow + ")\nValues:" + result.total;
// This is a safety to prevent endless loops from possibly sneaking in
let SafetyLoopIndex = game.settings.get('foundry-die-hard', 'dieHardSettings').fudgeConfig.maxFudgeAttemptsPerRoll;
diff --git a/scripts/classes/DieHardKarmaDialog.js b/scripts/classes/DieHardKarmaDialog.js
index 849b232..b4be8ac 100644
--- a/scripts/classes/DieHardKarmaDialog.js
+++ b/scripts/classes/DieHardKarmaDialog.js
@@ -34,7 +34,10 @@ export default class DieHardKarmaDialog extends FormApplication {
simpleKarma: DieHardSetting('simpleKarmaSettings'),
simpleKarmaPlayerStats: this.getkarmaPlayerStats('simpleKarma'),
avgKarma: DieHardSetting('avgKarmaSettings'),
- avgKarmaPlayerStats: this.getkarmaPlayerStats('avgKarmaData')
+ avgKarmaPlayerStats: this.getkarmaPlayerStats('avgKarmaData'),
+ whoGmOptions: game.dieHardSystem.getFudgeWhoGmOptions(),
+ whoUserOptions: game.dieHardSystem.getFudgeWhoUserOptions(),
+ //whoActorOptions: game.dieHardSystem.getFudgeWhoActorOptions(),
};
dieHardLog(false, 'DieHardKarmaDialog.getData', dialogData)
return dialogData;
@@ -78,7 +81,7 @@ export default class DieHardKarmaDialog extends FormApplication {
}
async _updateObject(event, formData) {
- dieHardLog(false, 'DieHardKarmaDialog._updateObject')
+ dieHardLog(false, 'DieHardKarmaDialog._updateObject');
if (formData.karmaSimpleEnabled && formData.karmaAvgEnabled) {
document.getElementById('karmaWarningHeader').style.display = '';
@@ -88,14 +91,17 @@ export default class DieHardKarmaDialog extends FormApplication {
document.getElementById('karmaWarningBody').style.display = 'none';
}
- let originalKarmaSimpleSettings = game.settings.get('foundry-die-hard', 'simpleKarmaSettings')
+ const who = formData.karmaWho.filter(Boolean);
+ await game.settings.set('foundry-die-hard', 'karmaWho', who);
+
+ let originalKarmaSimpleSettings = DieHardSetting('simpleKarmaSettings');
let karmaSimpleSettings = {
enabled: formData.karmaSimpleEnabled,
history: formData.karmaSimpleHistory,
threshold: formData.karmaSimpleThreshold,
floor: formData.karmaSimpleFloor
}
- await game.settings.set('foundry-die-hard', 'simpleKarmaSettings', karmaSimpleSettings)
+ await game.settings.set('foundry-die-hard', 'simpleKarmaSettings', karmaSimpleSettings);
if (formData.karmaSimpleEnabled) {
document.getElementById('divKarmaSimpleHistory').style.display = '';
document.getElementById('divKarmaSimpleThreshold').style.display = '';
@@ -108,7 +114,7 @@ export default class DieHardKarmaDialog extends FormApplication {
document.getElementById('divKarmaSimplePlayerStats').style.display = 'none';
}
- let originalKarmaAvgSettings = game.settings.get('foundry-die-hard', 'avgKarmaSettings')
+ let originalKarmaAvgSettings = DieHardSetting('avgKarmaSettings');
let karmaAvgSettings = {
enabled: formData.karmaAvgEnabled,
history: formData.karmaAvgHistory,
diff --git a/scripts/classes/DieHardPf2e.js b/scripts/classes/DieHardPf2e.js
index aa193be..2b37af5 100644
--- a/scripts/classes/DieHardPf2e.js
+++ b/scripts/classes/DieHardPf2e.js
@@ -1,19 +1,20 @@
-import {dieHardLog} from "../lib/helpers.js";
-
-import DieHardSystem from "./DieHardSystem.js";
-import {DieHardSetting} from "./DieHard.js";
+import { dieHardLog } from '../lib/helpers.js';
+import DieHardSystem from './DieHardSystem.js';
export default class DieHardPf2e extends DieHardSystem {
- constructor() {
- dieHardLog(false, 'DieHardPf2e.constructor');
- super();
+ constructor() {
+ dieHardLog(false, 'DieHardPf2e.constructor');
+ super();
- this.totalRollClassName = ["CheckRoll", "StrikeAttackRoll"]
- this.fudgeWhatOptions = []
- }
+ this.totalRollClassName = [
+ "Roll",
+ "CheckRoll",
+ "StrikeAttackRoll",
+ ];
+ this.fudgeWhatOptions = [];
+ }
- hookReady() {
- dieHardLog(false, 'PF2e System Hook - Ready');
- }
+ hookReady() {
+ dieHardLog(false, 'PF2e System Hook - Ready');
+ }
}
-
diff --git a/scripts/classes/DieHardSystem.js b/scripts/classes/DieHardSystem.js
index 4302efb..ce4080e 100644
--- a/scripts/classes/DieHardSystem.js
+++ b/scripts/classes/DieHardSystem.js
@@ -1,6 +1,6 @@
-import {dieHardLog, makeId} from '../lib/helpers.js';
-import DieHardFudgeRoll from './DieHardFudgeRoll.js';
-import DieHard, {DieHardSetting} from './DieHard.js';
+import {dieHardLog, makeId} from "../lib/helpers.js";
+import DieHardFudgeRoll from "./DieHardFudgeRoll.js";
+import DieHard, {DieHardSetting} from "./DieHard.js";
export default class DieHardSystem {
constructor() {
@@ -194,18 +194,14 @@ export default class DieHardSystem {
gen_new_result = false;
roll.result = newResult
this.results.push(roll);
- if (failedRolls.length === 0) {
- DieHard.dmToGm('DieHard-Fudge: Total Fudge not needed (' + newResult + ' ' + userFudge.howFormula + ')');
- } else {
- DieHard.dmToGm('DieHard-Fudge: Raw Fudge (' + userFudge.howFormula + ') values: ' + failedRolls.join(', ') + ' Final: ' + newResult);
- }
+ DieHard.dmToGm("Raw Fudge (" + userFudge.howFormula + ")
Values: " + failedRolls.join(', ') + "
Final: " + newResult);
} else {
// New roll is insufficient, but lets at least check if it is "closer"
if (game.dieHardSystem.isBetterFudge(roll.result, newResult, userFudge.operator, userFudge.operatorValue)) {
- dieHardLog(false, functionLogName + ' - New result (' + newResult + ') insufficient (' + userFudge.fudgeOperator + ' ' + userFudge.fudgeOperatorValue + '), but at least better. Try again (tries left: ' + SafetyLoopIndex + ')...')
+ dieHardLog(false, functionLogName + ' - New result insufficient, but at least better (' + newResult + "). Try again (tries left: " + SafetyLoopIndex + ")...")
roll.result = newResult
} else {
- dieHardLog(false, functionLogName + ' - New result (' + newResult + ') insufficient (' + userFudge.fudgeOperator + ' ' + userFudge.fudgeOperatorValue + '). Try again (tries left: ' + SafetyLoopIndex + ')...')
+ dieHardLog(false, functionLogName + ' - New result insufficient (' + newResult + "). Try again (tries left: " + SafetyLoopIndex + ")...")
}
failedRolls.push(newResult);
}
@@ -230,9 +226,10 @@ export default class DieHardSystem {
} else if (this.faces !== 20) {
dieHardLog(false, functionLogName + ' - Karma enabled, but wrong die type', this.faces);
} else {
- let simpleKarmaSettings = DieHardSetting('simpleKarmaSettings')
- let avgKarmaSettings = DieHardSetting('avgKarmaSettings')
- if (simpleKarmaSettings.enabled || avgKarmaSettings.enabled) {
+ let simpleKarmaSettings = DieHardSetting('simpleKarmaSettings');
+ let avgKarmaSettings = DieHardSetting('avgKarmaSettings');
+ const who = DieHardSetting('karmaWho');
+ if ((who.length === 0 || who.includes(game.user.id)) && (simpleKarmaSettings.enabled || avgKarmaSettings.enabled)) {
dieHardLog(false, functionLogName + ' - Karma is enabled', simpleKarmaSettings.enabled, avgKarmaSettings.enabled);
// Make the initial roll
@@ -290,7 +287,7 @@ export default class DieHardSystem {
if (avgKarmaSettings.enabled) {
dieHardLog(false, functionLogName + ' - Avg Karma', this);
let avgKarmaData = game.users.current.getFlag('foundry-die-hard', 'avgKarmaData')
-
+
if (avgKarmaData === undefined) {
avgKarmaData = {
history: [],
@@ -351,7 +348,7 @@ export default class DieHardSystem {
wrapRollEvaluate(wrapped, eval_options) {
let uuid = makeId(6)
let functionLogName = 'DieHardSystem.wrapRollEvaluate-' + uuid
- dieHardLog(false, functionLogName, this, eval_options);
+ dieHardLog(false, functionLogName);
if (! DieHardSetting('fudgeEnabled') ) {
dieHardLog(false, functionLogName + ' - Fudge disabled');
@@ -398,13 +395,14 @@ export default class DieHardSystem {
if (this instanceof CONFIG.Dice.DieHardFudgeRoll) {
dieHardLog(false, functionLogName + 'e - recursive roll', this);
} else {
- dieHardLog(false, functionLogName + ' - base roll', this, result);
+ dieHardLog(false, functionLogName + ' - base roll', this);
+ dieHardLog(false, functionLogName + ' - result', result);
let gen_new_result = false;
let evalResult = game.dieHardSystem.evalFudge(this.total, this.data.fudgeOperator, this.data.fudgeOperatorValue)
if (evalResult) {
- dieHardLog(false, functionLogName + ' - Fudge not needed (' + this.total + ' ' + this.data.fudgeOperator + ' ' + this.data.fudgeOperatorValue + ')');
- DieHard.dmToGm('DieHard-Fudge: Total Fudge not needed (' + this.total + ' ' + this.data.fudgeOperator + ' ' + this.data.fudgeOperatorValue + ')');
+ dieHardLog(false, functionLogName + ' - Fudge not needed, but still disabled');
+ DieHard.dmToGm('DieHard-Fudge: Total Fudge not needed, but still disabled...');
dieHardLog(false, functionLogName + ' - dmToGm');
} else {
@@ -420,15 +418,15 @@ export default class DieHardSystem {
if (evalResult) {
dieHardLog(false, functionLogName + ' - New result: ' + new_roll.total)
gen_new_result = false;
- foundry.utils.mergeObject(this, new_roll);
- DieHard.dmToGm('DieHard-Fudge: Total Fudge (' + result.data.fudgeHow + ') values: ' + failedRolls.join(', ') + ' Final: ' + new_roll.total);
+ foundry.utils.mergeObject(this, new_roll, { recursive: false });
+ DieHard.dmToGm("Total Fudge (" + result.data.fudgeHow + ")
Values: " + failedRolls.join(', ') + "
Final: " + new_roll.total);
} else {
// New roll is insufficient, but lets at least check if it is "closer"
if (game.dieHardSystem.isBetterFudge(this.total, new_roll.total, this.data.fudgeOperator, this.data.fudgeOperatorValue)) {
- dieHardLog(false, functionLogName + ' - New result (' + new_roll.total + ') insufficient (' + this.data.fudgeOperator + ' ' + this.data.fudgeOperatorValue + '), but at least better. Try again (tries left: ' + SafetyLoopIndex + ')...')
- foundry.utils.mergeObject(this, new_roll);
+ dieHardLog(false, functionLogName + ' - New result insufficient, but at least better (' + new_roll.total + "). Try again (tries left: " + SafetyLoopIndex + ")...")
+ foundry.utils.mergeObject(this, new_roll, { recursive: false });
} else {
- dieHardLog(false, functionLogName + ' - New result (' + new_roll.total + ') insufficient (' + this.data.fudgeOperator + ' ' + this.data.fudgeOperatorValue + '). Try again (tries left: ' + SafetyLoopIndex + ')...')
+ dieHardLog(false, functionLogName + ' - New result insufficient (' + new_roll.total + "). Try again (tries left: " + SafetyLoopIndex + ")...")
}
failedRolls.push(new_roll.total);
}
@@ -455,9 +453,10 @@ export default class DieHardSystem {
getUsers(activeOnly = true, includeFudges = false, getGM = false, userId = null) {
dieHardLog(false, 'DieHardSystem : getUsers', activeOnly, includeFudges, getGM, userId);
if (game.settings.get('foundry-die-hard', 'dieHardSettings').debug.allActors) {
- activeOnly = false
+ activeOnly = false;
}
- let activeUsers = []
+ let activeUsers = [];
+ const who = DieHardSetting('karmaWho');
for (let userId of game.users.keys()) {
let curUser = game.users.get(userId);
let curUserType = curUser.isGM;
@@ -466,7 +465,7 @@ export default class DieHardSystem {
}
if (activeOnly) {
if (!(curUserType) && curUser.active) {
- let newUser = {id: userId, name: curUser.name}
+ let newUser = { id: userId, name: curUser.name, karma: who.includes(userId) };
if (includeFudges) {
newUser.fudges = curUser.getFlag('foundry-die-hard', 'fudges')
if (!Array.isArray(newUser.fudges)){
@@ -477,7 +476,7 @@ export default class DieHardSystem {
}
} else {
if (!(curUserType)) {
- let newUser = {id: userId, name: curUser.name}
+ let newUser = { id: userId, name: curUser.name, karma: who.includes(userId) };
if (includeFudges) {
newUser.fudges = curUser.getFlag('foundry-die-hard', 'fudges')
if (!Array.isArray(newUser.fudges)){
@@ -488,7 +487,7 @@ export default class DieHardSystem {
}
}
}
- return activeUsers
+ return activeUsers;
}
/**
@@ -541,8 +540,8 @@ export default class DieHardSystem {
*/
hasActiveKarma() {
dieHardLog(false, 'DieHardSystem.hasActiveKarma')
- let avgKarmaSettings = game.settings.get('foundry-die-hard', 'avgKarmaSettings')
- let simpleKarmaSettings = game.settings.get('foundry-die-hard', 'simpleKarmaSettings')
+ let avgKarmaSettings = DieHardSetting('avgKarmaSettings');
+ let simpleKarmaSettings = DieHardSetting('simpleKarmaSettings');
if (avgKarmaSettings.enabled || simpleKarmaSettings.enabled) {
return true;
}
diff --git a/styles/die-hard.css b/styles/die-hard.css
index 212fb54..7fa95cf 100644
--- a/styles/die-hard.css
+++ b/styles/die-hard.css
@@ -16,10 +16,13 @@ Inspiration/plagarism from https://gitlab.com/asacolips-projects/foundry-mods/fo
.die-hard-blind-whisper {
display: none;
}
+.die-hard-fudge-icon, .die-hard-karma-icon {
+ color: gray;
+}
#chat-controls #die-hard-pause-fudge-icon {
flex: 0 0 0;
padding-left: 0px;
- color: #FFA500;
+ color: white;
/*color: red;
*/
@@ -29,7 +32,7 @@ Inspiration/plagarism from https://gitlab.com/asacolips-projects/foundry-mods/fo
margin-left: 5px;
}
#chat-controls .die-hard-icon-active {
- color: #FFA500;
+ color: white;
/*
animation-name: fudge-icon-color;
animation-duration: 2s;
@@ -43,7 +46,7 @@ Inspiration/plagarism from https://gitlab.com/asacolips-projects/foundry-mods/fo
}
#chat-controls .die-hard-karma-icon-active {
- color: #FFA500;
+ color: white;
}
.die-hard-column {
@@ -172,7 +175,7 @@ div.die-hard-form-group {
50% {
background-color: #ff6961;
}
- 100 {
+ 100% {
background-color: initial;
}
}
@@ -186,7 +189,7 @@ div.die-hard-form-group {
background-color: #77DD77;
-webkit-text-stroke: 1px #77DD77;
}
- 100 {
+ 100% {
background-color: initial;
-webkit-text-stroke: 1px #77DD77;
}
diff --git a/templates/die-hard-karma-config.html b/templates/die-hard-karma-config.html
index 13278a3..6321cbf 100644
--- a/templates/die-hard-karma-config.html
+++ b/templates/die-hard-karma-config.html
@@ -6,7 +6,24 @@