From a8578c3aa14dc797e366cc28c2b3aa630496fa90 Mon Sep 17 00:00:00 2001 From: tmtabor Date: Thu, 25 Feb 2021 21:16:46 -0800 Subject: [PATCH] Prevent the combat script from crashing when there's a token without an assigned actor --- module/sos-combat.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/module/sos-combat.js b/module/sos-combat.js index 51ec277..6dc6842 100644 --- a/module/sos-combat.js +++ b/module/sos-combat.js @@ -15,13 +15,14 @@ export class SoSCombat extends Combat { for( let combatant of this.combatants) { this.setInitiative(combatant._id, -1 ); // Reset init let uniq = randomID(16); + const name = combatant.actor ? combatant.actor.data.name : combatant.name; if ( combatant.players[0]) { // A player controls this combatant -> message ! - ChatMessage.create( { content: `New round ! Click on the button below to declare the actions of ${combatant.actor.data.name} for round ${this.round} !
+ ChatMessage.create( { content: `New round ! Click on the button below to declare the actions of ${name} for round ${this.round} !
Declare actions`, whisper: [ combatant.players[0].data._id] } ); } else { - ChatMessage.create( { content: `New round ! Click on the button below to declare the actions of ${combatant.actor.data.name} for round ${this.round} !
+ ChatMessage.create( { content: `New round ! Click on the button below to declare the actions of ${name} for round ${this.round} !
Declare actions`, whisper: [ ChatMessage.getWhisperRecipients("GM") ] } ); } @@ -57,11 +58,12 @@ export class SoSCombat extends Combat { let actionData = this.phaseSetup[combatantId]; if ( actionData.phaseArray[phaseIndex].name != 'No Action' ) { let combatant = this.combatants.find( comb => comb._id == actionData.combatantId); + const name = combatant.actor ? combatant.actor.data.name : combatant.name; actionList.push( { combatant: combatant, action: actionData.phaseArray[phaseIndex], isDone: false }); - actionMsg += `
${combatant.actor.name} is going to : ${actionData.phaseArray[phaseIndex].name}`; + actionMsg += `
${name} is going to : ${actionData.phaseArray[phaseIndex].name}`; } } if ( actionList.length == 0) { @@ -75,14 +77,15 @@ export class SoSCombat extends Combat { for ( let action of actionList) { let uniq = randomID(16); action.uniqId = uniq; // Easy tracking with chat messages + const name = action.combatant.actor ? action.combatant.actor.data.name : action.combatant.name; if ( action.combatant.players[0]) { // A player controls this combatant -> message ! - ChatMessage.create( { content: `Phase ${this.phaseNumber} ! ${action.combatant.actor.data.name} must perform a ${action.action.name} action. + ChatMessage.create( { content: `Phase ${this.phaseNumber} ! ${name} must perform a ${action.action.name} action. When done, click on the button below to close the action. Action is done !`, whisper: [ action.combatant.players[0].data._id] } ); } else { - ChatMessage.create( { content: `Phase ${this.phaseNumber} ! ${action.combatant.actor.data.name} must perform a ${action.action.name} action.
+ ChatMessage.create( { content: `Phase ${this.phaseNumber} ! ${name} must perform a ${action.action.name} action.
When done, click on the button below to close the action. Action is done !`, whisper: [ ChatMessage.getWhisperRecipients("GM") ] } ); @@ -96,6 +99,7 @@ export class SoSCombat extends Combat { applyConsequences( ) { if (game.user.isGM ) { for( let combatant of this.combatants) { + if (!combatant.actor) continue; // Can't check tokens without assigned actors, Maybe print chat message about bleeding happening so that the GM can manually track this? let bleeding = combatant.actor.data.items.find( item => item.type == 'consequence' && item.name == 'Bleeding'); combatant.actor.applyConsequenceWound( bleeding.data.severity, "bleeding" ); }