ENH: Roll Loyalty

master
U~man 2020-07-11 19:11:19 +02:00
parent 4fa91f1759
commit 765e06debe
3 changed files with 112 additions and 47 deletions

View File

@ -202,7 +202,7 @@ export class OseActorSheetCharacter extends OseActorSheet {
let update = data[table].value.filter((el) => el != lang);
console.log(update);
let newData = {};
newData[table] = {value: update};
newData[table] = { value: update };
return this.actor.update({ data: newData }).then(() => {
this.render(true);
});
@ -298,7 +298,14 @@ export class OseActorSheetCharacter extends OseActorSheet {
let actorObject = this.actor;
let element = event.currentTarget;
let score = element.parentElement.parentElement.dataset.score;
actorObject.rollCheck(score, { event: event });
let stat = element.parentElement.parentElement.dataset.stat;
if (!score) {
if (stat == "lr") {
actorObject.rollLoyalty(score, { event: event });
}
} else {
actorObject.rollCheck(score, { event: event });
}
});
html.find(".exploration .attribute-name a").click((ev) => {
@ -308,17 +315,6 @@ export class OseActorSheetCharacter extends OseActorSheet {
actorObject.rollExploration(expl, { event: event });
});
html.find(".ability-score .attribute-mod a").click((ev) => {
let box = $(
event.currentTarget.parentElement.parentElement.parentElement
);
box.children(".attribute-bonuses").slideDown(200);
});
html.find(".ability-score .attribute-bonuses a").click((ev) => {
$(event.currentTarget.parentElement.parentElement).slideUp(200);
});
html.find(".inventory .item-titles .item-caret").click((ev) => {
let items = $(event.currentTarget.parentElement.parentElement).children(
".item-list"

View File

@ -118,6 +118,32 @@ export class OseActor extends Actor {
});
}
rollLoyalty(options = {}) {
const label = game.i18n.localize(`OSE.Loyalty`);
const rollParts = ["2d6"];
const data = {
...this.data,
...{
rollData: {
type: "Below",
target: this.data.data.retainer.loyalty,
},
},
};
// Roll and return
return OseDice.Roll({
event: options.event,
parts: rollParts,
data: data,
skipDialog: true,
speaker: ChatMessage.getSpeaker({ actor: this }),
flavor: `${label} ${game.i18n.localize("OSE.Roll")}`,
title: `${label} ${game.i18n.localize("OSE.Roll")}`,
});
}
rollReaction(options = {}) {
const label = game.i18n.localize(`OSE.Reaction`);
const rollParts = ["2d6"];
@ -128,12 +154,22 @@ export class OseActor extends Actor {
rollData: {
type: "Table",
table: {
2: game.i18n.format("OSE.reaction.Hostile", {name: this.data.name}),
3: game.i18n.format("OSE.reaction.Unfriendly", {name: this.data.name}),
6: game.i18n.format("OSE.reaction.Neutral", {name: this.data.name}),
9: game.i18n.format("OSE.reaction.Indifferent", {name: this.data.name}),
12: game.i18n.format("OSE.reaction.Friendly", {name: this.data.name})
}
2: game.i18n.format("OSE.reaction.Hostile", {
name: this.data.name,
}),
3: game.i18n.format("OSE.reaction.Unfriendly", {
name: this.data.name,
}),
6: game.i18n.format("OSE.reaction.Neutral", {
name: this.data.name,
}),
9: game.i18n.format("OSE.reaction.Indifferent", {
name: this.data.name,
}),
12: game.i18n.format("OSE.reaction.Friendly", {
name: this.data.name,
}),
},
},
},
};
@ -369,15 +405,15 @@ export class OseActor extends Actor {
_isSlow() {
this.data.data.isSlow = false;
if (this.data.type != 'character') {
if (this.data.type != "character") {
return;
}
this.data.items.forEach(item => {
if (item.type == 'weapon' && item.data.slow && item.data.equipped) {
this.data.items.forEach((item) => {
if (item.type == "weapon" && item.data.slow && item.data.equipped) {
this.data.data.isSlow = true;
return;
}
})
});
}
computeModifiers() {
@ -393,14 +429,32 @@ export class OseActor extends Actor {
9: 0,
13: 1,
16: 2,
18: 3
}
data.scores.str.mod = OseActor._valueFromTable(standard, data.scores.str.value);
data.scores.int.mod = OseActor._valueFromTable(standard, data.scores.int.value);
data.scores.dex.mod = OseActor._valueFromTable(standard, data.scores.dex.value);
data.scores.cha.mod = OseActor._valueFromTable(standard, data.scores.cha.value);
data.scores.wis.mod = OseActor._valueFromTable(standard, data.scores.wis.value);
data.scores.con.mod = OseActor._valueFromTable(standard, data.scores.con.value);
18: 3,
};
data.scores.str.mod = OseActor._valueFromTable(
standard,
data.scores.str.value
);
data.scores.int.mod = OseActor._valueFromTable(
standard,
data.scores.int.value
);
data.scores.dex.mod = OseActor._valueFromTable(
standard,
data.scores.dex.value
);
data.scores.cha.mod = OseActor._valueFromTable(
standard,
data.scores.cha.value
);
data.scores.wis.mod = OseActor._valueFromTable(
standard,
data.scores.wis.value
);
data.scores.con.mod = OseActor._valueFromTable(
standard,
data.scores.con.value
);
const capped = {
3: -2,
@ -409,10 +463,16 @@ export class OseActor extends Actor {
9: 0,
13: 1,
16: 1,
18: 2
}
data.scores.dex.init = OseActor._valueFromTable(capped, data.scores.dex.value);
data.scores.cha.npc = OseActor._valueFromTable(capped, data.scores.cha.value);
18: 2,
};
data.scores.dex.init = OseActor._valueFromTable(
capped,
data.scores.dex.value
);
data.scores.cha.npc = OseActor._valueFromTable(
capped,
data.scores.cha.value
);
data.scores.cha.retain = data.scores.cha.mod + 4;
data.scores.cha.loyalty = data.scores.cha.mod + 7;
@ -421,23 +481,32 @@ export class OseActor extends Actor {
9: 2,
13: 3,
16: 4,
18: 5
}
data.exploration.odMod = OseActor._valueFromTable(od, data.scores.str.value);
18: 5,
};
data.exploration.odMod = OseActor._valueFromTable(
od,
data.scores.str.value
);
const literacy = {
3: "OSE.Illiterate",
6: "OSE.LiteracyBasic",
9: "OSE.Literate"
}
data.languages.literacy = OseActor._valueFromTable(literacy, data.scores.int.value)
9: "OSE.Literate",
};
data.languages.literacy = OseActor._valueFromTable(
literacy,
data.scores.int.value
);
const spoken = {
3: 0,
13: 2,
16: 3,
18: 4
}
data.languages.count = OseActor._valueFromTable(spoken, data.scores.int.value)
18: 4,
};
data.languages.count = OseActor._valueFromTable(
spoken,
data.scores.int.value
);
}
}

View File

@ -51,9 +51,9 @@
</div>
</li>
{{#if data.retainer.enabled}}
<li class="attribute ability-score">
<li class="attribute ability-score" data-stat="lr">
<h4 class="attribute-name box-title" title="{{ localize 'OSE.Loyalty' }}">
{{ localize "OSE.LoyaltyShort" }}
<a>{{ localize "OSE.LoyaltyShort" }}</a>
</h4>
<div class="attribute-value">
<input name="data.retainer.loyalty" type="text" value="{{data.retainer.loyalty}}" placeholder="0"