WIP: Attack saves
parent
1b01c7ff10
commit
f31bc3e790
|
@ -1,2 +1,3 @@
|
|||
node_modules
|
||||
dist
|
||||
dist
|
||||
foundryconfig.json
|
||||
|
|
|
@ -53,15 +53,15 @@ export class OseActor extends Actor {
|
|||
|
||||
isNew() {
|
||||
const data = this.data.data;
|
||||
if (this.data.type == 'character') {
|
||||
if (this.data.type == "character") {
|
||||
let ct = 0;
|
||||
Object.values(data.scores).forEach((el) => {
|
||||
ct += el.value;
|
||||
})
|
||||
});
|
||||
return ct == 0 ? true : false;
|
||||
} else if (this.data.type == 'monster') {
|
||||
} else if (this.data.type == "monster") {
|
||||
let ct = 0;
|
||||
Object.values(data.saves).forEach(el => {
|
||||
Object.values(data.saves).forEach((el) => {
|
||||
ct += el.value;
|
||||
});
|
||||
return ct == 0 ? true : false;
|
||||
|
@ -79,21 +79,21 @@ export class OseActor extends Actor {
|
|||
this.update({
|
||||
"data.saves": {
|
||||
death: {
|
||||
value: saves.d
|
||||
value: saves.d,
|
||||
},
|
||||
wand: {
|
||||
value: saves.w
|
||||
value: saves.w,
|
||||
},
|
||||
paralysis: {
|
||||
value: saves.p
|
||||
value: saves.p,
|
||||
},
|
||||
breath: {
|
||||
value: saves.b
|
||||
value: saves.b,
|
||||
},
|
||||
spell: {
|
||||
value: saves.s
|
||||
}
|
||||
}
|
||||
value: saves.s,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -270,7 +270,7 @@ export class OseActor extends Actor {
|
|||
rollHitDice(options = {}) {
|
||||
const label = game.i18n.localize(`OSE.roll.hd`);
|
||||
const rollParts = [this.data.data.hp.hd];
|
||||
if (this.data.type == 'character') {
|
||||
if (this.data.type == "character") {
|
||||
rollParts.push(this.data.data.scores.con.mod);
|
||||
}
|
||||
|
||||
|
@ -436,6 +436,7 @@ export class OseActor extends Actor {
|
|||
rollData: {
|
||||
type: "attack",
|
||||
thac0: thac0,
|
||||
save: attData.save,
|
||||
weapon: {
|
||||
parts: dmgParts,
|
||||
},
|
||||
|
@ -522,7 +523,7 @@ export class OseActor extends Actor {
|
|||
value: totalWeight,
|
||||
};
|
||||
|
||||
if (data.config.movementAuto && option != 'disabled') {
|
||||
if (data.config.movementAuto && option != "disabled") {
|
||||
this._calculateMovement();
|
||||
}
|
||||
}
|
||||
|
@ -545,7 +546,7 @@ export class OseActor extends Actor {
|
|||
data.movement.base = 120;
|
||||
}
|
||||
} else if (option == "basic") {
|
||||
const armors = this.data.items.filter(i => i.type == "armor");
|
||||
const armors = this.data.items.filter((i) => i.type == "armor");
|
||||
let heaviest = 0;
|
||||
armors.forEach((a) => {
|
||||
if (a.data.equipped) {
|
||||
|
@ -580,7 +581,9 @@ export class OseActor extends Actor {
|
|||
const data = this.data.data;
|
||||
// Compute treasure
|
||||
let total = 0;
|
||||
let treasure = this.data.items.filter(i => (i.type == "item" && i.data.treasure))
|
||||
let treasure = this.data.items.filter(
|
||||
(i) => i.type == "item" && i.data.treasure
|
||||
);
|
||||
treasure.forEach((item) => {
|
||||
total += item.data.quantity.value * item.data.cost;
|
||||
});
|
||||
|
|
|
@ -165,6 +165,7 @@ export class OseDice {
|
|||
title: title,
|
||||
flavor: flavor,
|
||||
data: data,
|
||||
config: CONFIG.OSE,
|
||||
};
|
||||
|
||||
// Optionally include a situational bonus
|
||||
|
|
|
@ -4,7 +4,6 @@ import { OseDice } from "../dice.js";
|
|||
* Override and extend the basic :class:`Item` implementation
|
||||
*/
|
||||
export class OseItem extends Item {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Data Preparation */
|
||||
/* -------------------------------------------- */
|
||||
|
@ -82,6 +81,7 @@ export class OseItem extends Item {
|
|||
this.actor.rollAttack(
|
||||
{
|
||||
type: "melee",
|
||||
save: this.data.data.save,
|
||||
label: this.name,
|
||||
dmg: this.data.data.damage,
|
||||
bonus: data.bonus,
|
||||
|
@ -98,6 +98,7 @@ export class OseItem extends Item {
|
|||
{
|
||||
type: "missile",
|
||||
label: this.name,
|
||||
save: this.data.data.save,
|
||||
dmg: this.data.data.damage,
|
||||
},
|
||||
options
|
||||
|
@ -114,7 +115,13 @@ export class OseItem extends Item {
|
|||
type = "melee";
|
||||
}
|
||||
this.actor.rollAttack(
|
||||
{ type: type, label: this.name, dmg: data.damage, bonus: data.bonus },
|
||||
{
|
||||
type: type,
|
||||
label: this.name,
|
||||
save: data.save,
|
||||
dmg: data.damage,
|
||||
bonus: data.bonus,
|
||||
},
|
||||
options
|
||||
);
|
||||
|
||||
|
@ -166,29 +173,42 @@ export class OseItem extends Item {
|
|||
}
|
||||
|
||||
getTags() {
|
||||
let formatTag = (tag) => {
|
||||
let formatTag = (tag, icon) => {
|
||||
if (!tag) return "";
|
||||
return `<li class='tag'>${tag}</li>`;
|
||||
let fa = "";
|
||||
if (icon) {
|
||||
fa = `<i class="fas ${icon}"></i> `;
|
||||
}
|
||||
return `<li class='tag'>${fa}${tag}</li>`;
|
||||
};
|
||||
|
||||
const data = this.data.data;
|
||||
switch (this.data.type) {
|
||||
case "weapon":
|
||||
let wTags = formatTag(data.damage);
|
||||
data.tags.forEach(t => {
|
||||
let wTags = formatTag(data.damage, "fa-tint");
|
||||
data.tags.forEach((t) => {
|
||||
wTags += formatTag(t.value);
|
||||
})
|
||||
});
|
||||
wTags += formatTag(CONFIG.OSE.saves_long[data.save], "fa-skull");
|
||||
if (data.missile) {
|
||||
wTags += formatTag(
|
||||
data.range.short + "/" + data.range.medium + "/" + data.range.long,
|
||||
"fa-bullseye"
|
||||
);
|
||||
}
|
||||
return wTags;
|
||||
case "armor":
|
||||
return `${formatTag(CONFIG.OSE.armor[data.type])}`;
|
||||
return `${formatTag(CONFIG.OSE.armor[data.type], "fa-tshirt")}`;
|
||||
case "item":
|
||||
return "";
|
||||
case "spell":
|
||||
return `${formatTag(data.class)}${formatTag(data.range)}${formatTag(
|
||||
data.duration
|
||||
)}${formatTag(CONFIG.OSE.saves_long[data.save])}${formatTag(
|
||||
data.roll
|
||||
)}`;
|
||||
let sTags = `${formatTag(data.class)}${formatTag(
|
||||
data.range
|
||||
)}${formatTag(data.duration)}${formatTag(data.roll)}`;
|
||||
if (data.save) {
|
||||
sTags += formatTag(CONFIG.OSE.saves_long[data.save], "fa-skull");
|
||||
}
|
||||
return sTags;
|
||||
case "ability":
|
||||
let roll = "";
|
||||
roll += data.roll ? data.roll : "";
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
<section class="ose chat-message">
|
||||
{{log data}}
|
||||
<div class="ose chat-card item-card" data-actor-id="{{actor._id}}" data-item-id="{{item._id}}">
|
||||
{{#if tokenId}}data-token-id="{{tokenId}}"{{/if}}>
|
||||
<div class="ose chat-block">
|
||||
<div class="flexrow chat-header">
|
||||
<div class="chat-title"><h2>{{title}}</h2></div>
|
||||
<div class="chat-title">
|
||||
<h2>{{title}}</h2>
|
||||
</div>
|
||||
<div class="chat-img" style="background-image:url('{{data.img}}')"></div>
|
||||
</div>
|
||||
<div class="chat-details">
|
||||
|
@ -13,6 +17,13 @@
|
|||
<div class="roll-result"><b>{{localize 'OSE.messages.InflictsDamage'}}</b></div>
|
||||
</div>
|
||||
<div class="damage-roll">{{{rollDamage}}}</div>
|
||||
{{#if data.rollData.save}}
|
||||
<div class="card-buttons">
|
||||
<button data-action="save" data-save="{{data.rollData.save}}" disabled>
|
||||
{{lookup config.saves_long data.rollData.save}} - {{localize "OSE.spells.Save"}}
|
||||
</button>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
|
|
@ -101,8 +101,8 @@
|
|||
<div class="form-fields range">
|
||||
<input
|
||||
type="text"
|
||||
name="data.range.close"
|
||||
value="{{data.range.close}}"
|
||||
name="data.range.short"
|
||||
value="{{data.range.short}}"
|
||||
data-dtype="Number"
|
||||
/>
|
||||
<div class="sep"></div>
|
||||
|
|
Loading…
Reference in New Issue