v0.0.6
Version 0.0.6 Fixed rolling of rituals Fixed skill dialog for rituals Fixed chat message for rituals Fixed chat message for opposed spell rolls Co-Authored-By: erebus <erebus@rikspolisen.se> Co-Committed-By: erebus <erebus@rikspolisen.se>
This commit was merged in pull request #6.
This commit is contained in:
@@ -271,10 +271,69 @@ export class ActorSheetKH extends ActorSheet {
|
||||
skillName = _item.name + " (" + skill.name + ")"
|
||||
}
|
||||
|
||||
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty)
|
||||
let opposite = []
|
||||
// Retrieve skill based on name
|
||||
|
||||
if(_item.data.data.roll.oppositeskill !== "") {
|
||||
let skill1 = this.actor.items.find((element) => element.name === _item.data.data.roll.oppositeskill);
|
||||
opposite.push(skill1.name)
|
||||
}
|
||||
|
||||
if(_item.data.data.roll.oppositeskilltwo !== "") {
|
||||
let skill2 = this.actor.items.find((element) => element.name === _item.data.data.roll.oppositeskilltwo);
|
||||
opposite.push(skill2.name)
|
||||
}
|
||||
|
||||
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty, opposite)
|
||||
} else if(_item.data.data.roll.value === "ritual") {
|
||||
console.log("Not supported yet")
|
||||
this.khRoller.rollSkillDialogInChat("Ritual", -1, showValue, this.actor, difficulty)
|
||||
let skills = []
|
||||
|
||||
if(_item.data.data.roll.ritual.skillone !== "") {
|
||||
let skill1 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillone);
|
||||
|
||||
skills.push({
|
||||
name: skill1.name,
|
||||
value: skill1.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
if(_item.data.data.roll.ritual.skilltwo !== "") {
|
||||
let skill2 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skilltwo);
|
||||
|
||||
skills.push({
|
||||
name: skill2.name,
|
||||
value: skill2.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
if(_item.data.data.roll.ritual.skillthree !== "") {
|
||||
let skill3 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillthree);
|
||||
|
||||
skills.push({
|
||||
name: skill3.name,
|
||||
value: skill3.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
if(_item.data.data.roll.ritual.skillfour !== "") {
|
||||
let skill4 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillfour);
|
||||
|
||||
skills.push({
|
||||
name: skill4.name,
|
||||
value: skill4.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
if(_item.data.data.roll.ritual.skillfive !== "") {
|
||||
let skill5 = this.actor.items.find((element) => element.name === _item.data.data.roll.ritual.skillfive);
|
||||
|
||||
skills.push({
|
||||
name: skill5.name,
|
||||
value: skill5.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
this.khRoller.rollSkillChallangeDialogInChat(_item.name, skills, showValue, this.actor, difficulty)
|
||||
}
|
||||
},
|
||||
},
|
||||
@@ -474,9 +533,20 @@ export class ActorSheetKH extends ActorSheet {
|
||||
|
||||
this.khRoller.rollSkillInChat(skillName, skillValue, showValue, this.actor, difficulty)
|
||||
} else if(spell.data.data.roll.value === "opposite") {
|
||||
let opposite = []
|
||||
// Retrieve skill based on name
|
||||
let skill = this.actor.items.find((element) => element.name === spell.data.data.roll.skill);
|
||||
|
||||
if(spell.data.data.roll.oppositeskill !== "") {
|
||||
let skill1 = this.actor.items.find((element) => element.name === spell.data.data.roll.oppositeskill);
|
||||
opposite.push(skill1.name)
|
||||
}
|
||||
|
||||
if(spell.data.data.roll.oppositeskilltwo !== "") {
|
||||
let skill2 = this.actor.items.find((element) => element.name === spell.data.data.roll.oppositeskilltwo);
|
||||
opposite.push(skill2.name)
|
||||
}
|
||||
|
||||
let skillName = spell.name
|
||||
let skillValue = skill.data.data.value
|
||||
|
||||
@@ -484,9 +554,60 @@ export class ActorSheetKH extends ActorSheet {
|
||||
skillName = spell.name + " (" + skill.name + ")"
|
||||
}
|
||||
|
||||
this.khRoller.rollSkillInChat(skillName, skillValue, showValue, this.actor, difficulty)
|
||||
this.khRoller.rollSkillInChat(skillName, skillValue, showValue, this.actor, difficulty, opposite)
|
||||
} else if(spell.data.data.roll.value === "ritual") {
|
||||
console.log("Not supported yet")
|
||||
let skill1, skill2, skill3, skill4, skill5;
|
||||
let skills = []
|
||||
|
||||
// Retrieve skill based on name
|
||||
if(spell.data.data.roll.ritual.skillone !== "") {
|
||||
skill1 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skillone);
|
||||
|
||||
skills.push({
|
||||
name: skill1.name,
|
||||
value: skill1.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
if(spell.data.data.roll.ritual.skilltwo !== "") {
|
||||
skill2 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skilltwo);
|
||||
|
||||
skills.push({
|
||||
name: skill2.name,
|
||||
value: skill2.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
if(spell.data.data.roll.ritual.skillthree !== "") {
|
||||
skill3 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skillthree);
|
||||
|
||||
skills.push({
|
||||
name: skill3.name,
|
||||
value: skill3.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
if(spell.data.data.roll.ritual.skillfour !== "") {
|
||||
skill4 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skillfour);
|
||||
|
||||
skills.push({
|
||||
name: skill4.name,
|
||||
value: skill4.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
if(spell.data.data.roll.ritual.skillfive !== "") {
|
||||
skill5 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skillfive);
|
||||
|
||||
skills.push({
|
||||
name: skill5.name,
|
||||
value: skill5.data.data.value
|
||||
});
|
||||
}
|
||||
|
||||
let skillName = spell.name
|
||||
|
||||
this.khRoller.rollSkillRitualInChat(skillName, skills, showValue, this.actor, difficulty)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ export default class KHDiceRoller {
|
||||
});
|
||||
}
|
||||
|
||||
async rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed) {
|
||||
async rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed, opposite) {
|
||||
const roll = new Roll(`1d100`);
|
||||
|
||||
let res = roll.roll();
|
||||
@@ -105,9 +105,23 @@ export default class KHDiceRoller {
|
||||
openclosed = 0
|
||||
}
|
||||
|
||||
if(opposite === undefined) {
|
||||
opposite = []
|
||||
}
|
||||
|
||||
let oppositeValue = ""
|
||||
|
||||
opposite.forEach(function(skill) {
|
||||
if(oppositeValue !== "") {
|
||||
oppositeValue = oppositeValue + " " + game.i18n.localize("ROLL.OR") + " "
|
||||
}
|
||||
oppositeValue = oppositeValue + skill
|
||||
})
|
||||
|
||||
let rollData = {
|
||||
name: computedName,
|
||||
res: res
|
||||
res: res,
|
||||
opposite: oppositeValue
|
||||
};
|
||||
|
||||
if(skillValue > 0) {
|
||||
@@ -155,7 +169,7 @@ export default class KHDiceRoller {
|
||||
});
|
||||
}
|
||||
|
||||
async rollSkillDialogInChat(skillName, skillValue, showValue, speaker, startopen) {
|
||||
async rollSkillDialogInChat(skillName, skillValue, showValue, speaker, startopen, opposite) {
|
||||
const id = randomID();
|
||||
|
||||
if(startopen === undefined) {
|
||||
@@ -180,6 +194,9 @@ export default class KHDiceRoller {
|
||||
const container = document.getElementById(id);
|
||||
let openclosed = container.querySelector('[name="openclosed"]').value
|
||||
|
||||
await this.rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed, opposite)
|
||||
|
||||
/*
|
||||
const roll = new Roll(`1d100`);
|
||||
|
||||
let res = roll.roll();
|
||||
@@ -239,6 +256,7 @@ export default class KHDiceRoller {
|
||||
alias: speaker.name,
|
||||
},
|
||||
});
|
||||
*/
|
||||
},
|
||||
},
|
||||
two: {
|
||||
@@ -251,4 +269,208 @@ export default class KHDiceRoller {
|
||||
classes: ["dialog", "kopparhavet"],
|
||||
}).render(true);
|
||||
}
|
||||
|
||||
async rollSkillRitualInChat(ritualName, skills, showValue, speaker, openclosed) {
|
||||
let rollData = {
|
||||
name: ritualName,
|
||||
res: []
|
||||
};
|
||||
|
||||
if(openclosed === undefined) {
|
||||
openclosed = 0
|
||||
}
|
||||
|
||||
if(openclosed < 0) {
|
||||
rollData.closed = Math.abs(openclosed)
|
||||
}
|
||||
|
||||
if(openclosed > 0) {
|
||||
rollData.opened = Math.abs(openclosed)
|
||||
}
|
||||
|
||||
let successes = 0
|
||||
let totalrolls = 0
|
||||
|
||||
for (const skill of skills) {
|
||||
totalrolls++
|
||||
const roll = new Roll(`1d100`);
|
||||
|
||||
let res = roll.roll();
|
||||
|
||||
let skillName = skill.name
|
||||
let success = false
|
||||
let failure = false
|
||||
|
||||
if(showValue) {
|
||||
skillName = skillName + " (" + skill.value + ")"
|
||||
}
|
||||
|
||||
let rollData2 = {
|
||||
name: skillName,
|
||||
res: res,
|
||||
};
|
||||
|
||||
if(openclosed < 0) {
|
||||
rollData2.closed = Math.abs(openclosed)
|
||||
}
|
||||
|
||||
if(openclosed > 0) {
|
||||
rollData2.opened = Math.abs(openclosed)
|
||||
}
|
||||
|
||||
if(skill.value > 0) {
|
||||
let oneRes = Math.floor((res.total / 1) % 10);
|
||||
//let tenRes = Math.floor((res.total / 10) % 10);
|
||||
|
||||
if(openclosed < 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes) {
|
||||
// roll is closed
|
||||
failure = true
|
||||
} else if(openclosed > 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes){
|
||||
// roll is opened
|
||||
success = true
|
||||
successes++
|
||||
} else {
|
||||
if (res.total <= skill.value) {
|
||||
success = true
|
||||
successes++
|
||||
} else {
|
||||
failure = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rollData.res.push({
|
||||
name: skillName,
|
||||
failure: failure,
|
||||
success: success,
|
||||
result: res,
|
||||
})
|
||||
|
||||
rollData2.success = success
|
||||
rollData2.failure = failure
|
||||
|
||||
const html = await renderTemplate("systems/kopparhavet/templates/dice/roll.html", rollData2);
|
||||
|
||||
await roll.toMessage({
|
||||
create: true,
|
||||
content: html,
|
||||
user: game.user._id,
|
||||
speaker: {
|
||||
actor: speaker._id,
|
||||
token: speaker.token,
|
||||
alias: speaker.name,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
switch (totalrolls) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
if(successes === 0) {
|
||||
rollData.result = "0"
|
||||
} else if(successes === 1) {
|
||||
rollData.result = "2"
|
||||
} else if(successes === 2) {
|
||||
rollData.result = "3"
|
||||
} else if(successes === 3) {
|
||||
rollData.result = "4"
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if(successes === 0) {
|
||||
rollData.result = "0"
|
||||
} else if(successes === 1) {
|
||||
rollData.result = "1"
|
||||
} else if(successes === 2) {
|
||||
rollData.result = "2"
|
||||
} else if(successes === 3) {
|
||||
rollData.result = "3"
|
||||
} else if(successes === 4) {
|
||||
rollData.result = "4"
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if(successes === 0) {
|
||||
rollData.result = "0"
|
||||
} else if(successes === 1) {
|
||||
rollData.result = "1"
|
||||
} else if(successes === 2) {
|
||||
rollData.result = "1"
|
||||
} else if(successes === 3) {
|
||||
rollData.result = "2"
|
||||
} else if(successes === 4) {
|
||||
rollData.result = "3"
|
||||
} else if(successes === 5) {
|
||||
rollData.result = "4"
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
const html = await renderTemplate("systems/kopparhavet/templates/dice/ritual-roll.html", rollData);
|
||||
|
||||
/*
|
||||
await roll.toMessage({
|
||||
create: true,
|
||||
content: html,
|
||||
user: game.user._id,
|
||||
speaker: {
|
||||
actor: speaker._id,
|
||||
token: speaker.token,
|
||||
alias: speaker.name,
|
||||
},
|
||||
});
|
||||
*/
|
||||
|
||||
await ChatMessage.create({
|
||||
create: true,
|
||||
content: html,
|
||||
user: game.user._id,
|
||||
speaker: {
|
||||
actor: speaker._id,
|
||||
token: speaker.token,
|
||||
alias: speaker.name,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async rollSkillChallangeDialogInChat(name, skills, showValue, speaker, startopen) {
|
||||
const id = randomID();
|
||||
|
||||
if(startopen === undefined) {
|
||||
startopen = 0
|
||||
}
|
||||
|
||||
const content = await renderTemplate("systems/kopparhavet/templates/roll-dialog.html", {
|
||||
id,
|
||||
startopen,
|
||||
name,
|
||||
});
|
||||
|
||||
await new Dialog({
|
||||
title: game.i18n.localize("ROLL.TITLE"),
|
||||
content,
|
||||
buttons: {
|
||||
one: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: game.i18n.localize("BUTTON.ROLL"),
|
||||
callback: async () => {
|
||||
const container = document.getElementById(id);
|
||||
let openclosed = container.querySelector('[name="openclosed"]').value
|
||||
|
||||
await this.rollSkillRitualInChat(name, skills, showValue, speaker, openclosed)
|
||||
},
|
||||
},
|
||||
two: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: game.i18n.localize("BUTTON.CANCEL"),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
classes: ["dialog", "kopparhavet"],
|
||||
}).render(true);
|
||||
}
|
||||
}
|
||||
@@ -204,6 +204,40 @@ function registerHandlebarsHelpers() {
|
||||
}
|
||||
});
|
||||
|
||||
// Allows {if X = Y} type syntax in html using handlebars
|
||||
Handlebars.registerHelper("iff", function (a, operator, b, opts) {
|
||||
var bool = false;
|
||||
switch (operator) {
|
||||
case "==":
|
||||
bool = a == b;
|
||||
break;
|
||||
case ">":
|
||||
bool = a > b;
|
||||
break;
|
||||
case "<":
|
||||
bool = a < b;
|
||||
break;
|
||||
case "!=":
|
||||
bool = a != b;
|
||||
break;
|
||||
case "contains":
|
||||
if (a && b) {
|
||||
bool = a.includes(b);
|
||||
} else {
|
||||
bool = false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw "Unknown operator " + operator;
|
||||
}
|
||||
|
||||
if (bool) {
|
||||
return opts.fn(this);
|
||||
} else {
|
||||
return opts.inverse(this);
|
||||
}
|
||||
});
|
||||
|
||||
Handlebars.registerHelper('plaintextToHTML', function(value) {
|
||||
// strip tags, add <br/> tags
|
||||
return new Handlebars.SafeString(value.replace(/(<([^>]+)>)/gi, "").replace(/(?:\r\n|\r|\n)/g, '<br/>'));
|
||||
|
||||
Reference in New Issue
Block a user