Skip to content

Commit

Permalink
fix weapons with heat for everything but player-mechs
Browse files Browse the repository at this point in the history
fix message type respecting user choice
  • Loading branch information
Stexinator committed Jul 25, 2024
1 parent 3a206e3 commit 2ac25a8
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 57 deletions.
2 changes: 1 addition & 1 deletion src/module.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"flags": {}
}
],
"version": "0.0.20",
"version": "0.0.21",
"compatibility": {
"minimum": "11",
"verified": "12"
Expand Down
63 changes: 32 additions & 31 deletions src/scripts/applyDamage.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export default class SalvageUnionCombatAutomationDamage{
export default class SalvageUnionCombatAutomationDamage {

static async clickDamageButton(message) {

Expand All @@ -15,51 +15,52 @@ export default class SalvageUnionCombatAutomationDamage{

let modifier = button.dataset.value;

this.applyDamage(target, damage, modifier);
this.applyDamage(target, damage, modifier);
}

static async applyDamage(target, damage, modifier) {
if(!target) {
if (!target) {
return;
}

let damageNumber;
if(target.system.healthType?.includes("sp") || target.system.sp?.value) {

if (target.system.healthType?.includes("sp") || target.system.sp?.value) {
damageNumber = await this.applyDamageToSp(target, damage, modifier)
}
else {
damageNumber = await this.applyDamageToHp(target, damage, modifier)
}

ChatMessage.create({
content: game.i18n.format("salvage-union-combat-automation.apply-damage", {damage: damage + (modifier? ' ' + modifier + ' ('+damageNumber+')' : '' ), name: target.name}),
speaker: { alias: game.user.name }
});

const msgData = {
content: game.i18n.format("salvage-union-combat-automation.apply-damage", { damage: damage + (modifier ? ' ' + modifier + ' (' + damageNumber + ')' : ''), name: target.name }),
type: CONST.CHAT_MESSAGE_STYLES.ROLL,
};
ChatMessage.applyRollMode(msgData, game.settings.get("core", "rollMode"));
ChatMessage.create(msgData);
}

static async applyDamageToSp(target, damage, modifier) {
let damageNumber = parseInt(damage.match(/\d+/).pop());

if(modifier) {
if(modifier.includes('*') ||modifier.includes('x')) {
if (modifier) {
if (modifier.includes('*') || modifier.includes('x')) {
damageNumber *= parseInt(modifier.match(/\d+/).pop());
}
else if(modifier.includes('/')) {
damageNumber = Math.floor(damageNumber /parseInt(modifier.match(/\d+/).pop()));
else if (modifier.includes('/')) {
damageNumber = Math.floor(damageNumber / parseInt(modifier.match(/\d+/).pop()));
}
else {
damageNumber += parseInt(modifier);
}
}

if(damage.includes("HP")) {
damageNumber = Math.floor(damageNumber*0.5);
if (damage.includes("HP")) {
damageNumber = Math.floor(damageNumber * 0.5);
}

let newSp;
if(target.system.sp?.value) {
if (target.system.sp?.value) {
newSp = target.system.sp.value - damageNumber;
target.update({ 'system.sp.value': newSp });
}
Expand All @@ -69,7 +70,7 @@ export default class SalvageUnionCombatAutomationDamage{
}


if(newSp <= 0) {
if (newSp <= 0) {
this.markDefeated(target)
}

Expand All @@ -79,36 +80,36 @@ export default class SalvageUnionCombatAutomationDamage{
static async applyDamageToHp(target, damage, modifier) {
let damageNumber = damage.match(/\d+/).pop();

if(modifier) {
if(modifier.includes('*')) {
if (modifier) {
if (modifier.includes('*')) {
damageNumber *= parseInt(modifier.match(/\d+/).pop());
}
else if(modifier.includes('/')) {
else if (modifier.includes('/')) {
damageNumber /= Math.floor(parseInt(modifier.match(/\d+/).pop()));
}
else {
damageNumber += parseInt(modifier);
}
}

if(damage.includes("SP") && target.system.healthType !== 'sp') {
damageNumber = damageNumber*2;
}
if (damage.includes("SP") && target.system.healthType !== 'sp') {
damageNumber = damageNumber * 2;
}

let newHp = target.system.hp.value - damageNumber;
target.update({ 'system.hp.value': newHp });
let newHp = target.system.hp.value - damageNumber;
target.update({ 'system.hp.value': newHp });

if(newHp <= 0) {
this.markDefeated(target)
}
if (newHp <= 0) {
this.markDefeated(target)
}
}

static async markDefeated(target) {
let token = target.token
await token?.combatant?.update({defeated:true});
await token?.combatant?.update({ defeated: true });
const status = CONFIG.statusEffects.find(e => e.id === CONFIG.specialStatusEffects.DEFEATED);

const effect = token.actor && status ? status : CONFIG.controlIcons.defeated;
await token.object.toggleEffect(effect, {overlay: true, active: true});
await token.object.toggleEffect(effect, { overlay: true, active: true });
}
}
2 changes: 1 addition & 1 deletion src/scripts/heat.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export default class SalvageUnionCombatAutomationHeat{
static async handleHeat(hot, actor) {

if(hot == undefined || actor.type == "npc-mech") {
if(hot == undefined || actor.type !== "mech") {
return true;
}

Expand Down
49 changes: 25 additions & 24 deletions src/scripts/weapons.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import SalvageUnionCombatAutomationHeat from "./heat.js"
import SalvageUnionCombatAutomationResources from "./resources.js"


export default class SalvageUnionCombatAutomationWeapons{
export default class SalvageUnionCombatAutomationWeapons {

static addAutomationToWeapons(actor, html) {
let weapons = this.getAllWeapons(actor)
Expand All @@ -21,23 +21,23 @@ export default class SalvageUnionCombatAutomationWeapons{
return weapons;
}

static addButtonToWeapons( weapons, html) {
static addButtonToWeapons(weapons, html) {
const weaponHtmls = weapons.reduce((acc, weapon) => {
const node = html.find(`h2.item-context-menu.title[data-item-id="${weapon._id}"]`);
if(node) {
acc.push({node: node, uuid: weapon.uuid});
}
if (node) {
acc.push({ node: node, uuid: weapon.uuid });
}
return acc;
}, []);
}, []);

weaponHtmls.forEach(entry => {
weaponHtmls.forEach(entry => {
entry.node.append(
this.createAttackRollButton( entry.uuid)
);
});
this.createAttackRollButton(entry.uuid)
);
});
}

static createAttackRollButton( weaponId) {
static createAttackRollButton(weaponId) {
const tooltip = game.i18n.localize('salvage-union-combat-automation.attackRoll');

return `<small><button type='button' title='${tooltip}' class="su-combatautomation-combatdicebutton" weapon-uuid='${weaponId}'><i class="fas fa-dice-d20"></i></button></small>`
Expand All @@ -52,7 +52,7 @@ export default class SalvageUnionCombatAutomationWeapons{

let traits = weapon.system.traits.join(" // ")

if(await this.handleTraits(weapon)) {
if (await this.handleTraits(weapon)) {
const messageTemplate = 'modules/salvage-union-combat-automation/templates/attack.hbs'
const templateContext = {
name: weapon.name,
Expand All @@ -64,40 +64,41 @@ export default class SalvageUnionCombatAutomationWeapons{
activeStatus: CONFIG.SALVAGE.statusTypes.ACTIVE,
noTarget: game.user.targets?.first()?.document.name == null,
customButtons: game.settings.get('salvage-union-combat-automation', 'customDamageButtons').replace(',', ';').split(';')
}
}

const content = await renderTemplate(messageTemplate, templateContext)
const chatData = {
user: game.user._id,
speaker: ChatMessage.getSpeaker({ actor: weapon.actor }),
roll: result.roll,
content: content,
sound: CONFIG.sounds.dice,
type: CONST.CHAT_MESSAGE_TYPES.ROLL,
type: CONST.CHAT_MESSAGE_STYLES.ROLL,
}

ChatMessage.applyRollMode(chatData, game.settings.get("core", "rollMode"));

let message = await ChatMessage.create(chatData)

message.setFlag('salvage-union-combat-automation', 'damage', weapon.system.damage)
message.setFlag('salvage-union-combat-automation', 'target', game.user.targets?.first()?.actor.uuid)
}
}

static async handleTraits(weapon) {
let checks = []
if(weapon.system.traits.filter(trait => trait.includes('Hot').length > 0)) {

if (weapon.system.traits.filter(trait => trait.includes('Hot').length > 0)) {
let hot = weapon.system.traits.filter(trait => trait.includes('Hot'))[0]
checks.push(SalvageUnionCombatAutomationHeat.handleHeat(hot, weapon.actor))
}

if(weapon.system.traits.includes('Heat Spike')) {
if (weapon.system.traits.includes('Heat Spike')) {
checks.push(SalvageUnionCombatAutomationHeat.handleHeatspike(weapon.actor))
}
if(weapon.system.traits.filter(trait => trait.includes('Uses').length > 0)) {

if (weapon.system.traits.filter(trait => trait.includes('Uses').length > 0)) {
checks.push(SalvageUnionCombatAutomationResources.handleUsesWeapon(weapon))
}


return (await Promise.all(checks)).every(check => check);
}
Expand Down

0 comments on commit 2ac25a8

Please sign in to comment.