Fix rolls and various glitches

This commit is contained in:
2022-01-23 00:07:47 +01:00
parent 26a5cdcffb
commit da5b2bf785
8 changed files with 196 additions and 154 deletions

View File

@ -98,6 +98,38 @@ export class YggdrasillUtility {
return compendiumData.filter(filter);
}
/* -------------------------------------------- */
static async specificYggRoll( nbDice ) {
let rawDices = []
let rolls = []
let maxTab = []
maxTab[0] = {idx: 0, value: 0}
maxTab[1] = {idx: 0, value: 0}
for (let i=0; i<nbDice; i++) {
rolls[i] = new Roll("1d10x10").roll( {async: false}) //+sumDice+"+"+rollData.furorUsage+"d10+"+niveauCompetence+"+"+rollData.finalBM).roll( { async: false} );
if ( i == nbDice-1 ) {
await this.showDiceSoNice(rolls[i], game.settings.get("core", "rollMode") );
} else {
this.showDiceSoNice(rolls[i], game.settings.get("core", "rollMode") );
}
rawDices.push({ 'result': rolls[i].total});
if ( rolls[i].total > maxTab[0].value) {
if ( nbDice > 1 && maxTab[0].value > maxTab[1].value) {
maxTab[1].value = maxTab[0].value
}
maxTab[0].value = rolls[i].total
} else {
if ( nbDice > 1 && rolls[i].total > maxTab[1].value) {
maxTab[1].value = rolls[i].total
}
}
}
return { rawDices: rawDices, maxTab: maxTab, rolls: rolls}
}
/* -------------------------------------------- */
static async rollAttribute( rollData ) {
// Init stuff
@ -114,31 +146,27 @@ export class YggdrasillUtility {
rollData.finalBM -= 3;
}
let rolls = []
rollData.rawDices = []
for (let i=0; i < 2; i++) {
rolls[i] = new Roll("1d10x10").roll( { async: false} );
rollData.rawDices.push({ 'result': rolls[i].total});
}
this.showDiceSoNice(rolls[0], game.settings.get("core", "rollMode") );
await this.showDiceSoNice(rolls[1], game.settings.get("core", "rollMode") );
let results = await this.specificYggRoll( 2 )
rollData.rawDices = results.rawDices
rollData.maxTab = results.maxTab
rollData.rolls = results.rolls
rollData.bonus = niveau + rollData.finalBM
rollData.finalTotal = 0
for (let i=0; i< 2; i++) {
rollData.finalTotal = rolls[i].dice[0].results[0].result
}
rollData.finalTotal = rollData.maxTab[0].value + rollData.maxTab[1].value;
rollData.finalTotal += rollData.bonus
// Compute total SR
rollData.srFinal = rollData.sr;
if ( rollData.bonusdefense ) {
rollData.srFinal += rollData.bonusdefense;
}
if ( rollData.srFinal > 0 ) {
isCritical = rollData.finalTotal >= rollData.srFinal*2;
isSuccess = rollData.finalTotal >= rollData.srFinal;
marge = rollData.finalTotal - rollData.srFinal;
}
if (rolls[0].dice[0].results[0].result == 1 && rolls[1].dice[0].results[0].result == 1) {
if (rollData.rolls[0].dice[0].results[0].result == 1 && rollData.rolls[1].dice[0].results[0].result == 1) {
isFailure = true;
}
// Dégats
@ -154,7 +182,6 @@ export class YggdrasillUtility {
rollData.isSuccess = isSuccess;
rollData.isCritical = isCritical;
rollData.marge = marge;
rollData.rolls = rolls
console.log("ROLLLL ATTR!!!!", rollData);
@ -196,41 +223,30 @@ export class YggdrasillUtility {
rollData.finalBM -= 3;
}
rollData.rawDices = []
if (sumDice > nbDice) sumDice = nbDice;
let rolls = []
let maxTab = [ {idx: 0, value: 0}, {idx: 0, value:0}]
for (let i=0; i<nbDice; i++) {
rolls[i] = new Roll("1d10x10").roll( {async: false}) //+sumDice+"+"+rollData.furorUsage+"d10+"+niveauCompetence+"+"+rollData.finalBM).roll( { async: false} );
if ( i == nbDice-1 ) {
await this.showDiceSoNice(rolls[nbDice-1], game.settings.get("core", "rollMode") );
} else {
this.showDiceSoNice(rolls[i], game.settings.get("core", "rollMode") );
}
rollData.rawDices.push({ 'result': rolls[i].total});
let results = await this.specificYggRoll( nbDice )
rollData.rawDices = results.rawDices
rollData.maxTab = results.maxTab
rollData.rolls = results.rolls
console.log("RES", results, nbDice, sumDice)
if ( rolls[i].total > maxTab[0].value) {
if ( maxTab[0].value > maxTab[1].value) {
maxTab[1].value = maxTab[0].value
maxTab[1].idx = maxTab[0].idx
}
maxTab[0].value = rolls[i].total
maxTab[0].idx = i
} else {
if ( rolls[i].total > maxTab[1].value) {
maxTab[1].value = rolls[i].total
maxTab[1].idx = i
}
}
if ( rollData.furorUsage > 0 ) {
results = await this.specificYggRoll( rollData.furorUsage )
rollData.furorRawDices = results.rawDices
rollData.furorMaxTab = results.maxTab
rollData.furorRolls = results.rolls
let actor = game.actors.get(rollData.actorId);
actor.decrementFuror( rollData.furorUsage);
}
let bonusRoll = new Roll(rollData.furorUsage+"d10x10+"+niveauCompetence+"+"+rollData.finalBM).roll( {async: false})
if ( rollData.furorUsage > 0) {
this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode") );
}
rollData.finalTotal = (sumDice ==1) ? maxTab[0].value : maxTab[0].value + maxTab[1].value;
rollData.finalTotal += bonusRoll.total;
rollData.furorResult = (rollData.furorUsage >0 ) ? bonusRoll.dice[0].results[0].result : 0;
rollData.maxTab = maxTab
rollData.bonusTotal = niveauCompetence + rollData.finalBM
rollData.finalTotal = (sumDice ==1) ? rollData.maxTab[0].value : rollData.maxTab[0].value + rollData.maxTab[1].value;
rollData.furorResult = 0
for (let i=0; i<rollData.furorUsage; i++) {
rollData.furorResult += rollData.furorMaxTab[i].value
}
rollData.finalTotal += rollData.furorResult + rollData.bonusTotal;
rollData.niveauCompetence = niveauCompetence
// Compute total SR
rollData.srFinal = rollData.sr;
@ -244,23 +260,19 @@ export class YggdrasillUtility {
marge = rollData.finalTotal - rollData.srFinal;
}
if (nbDice == 1 && rolls[0].dice[0].results[0].result == 1) {
if (nbDice == 1 && rollData.rolls[0].dice[0].results[0].result == 1) {
isFailure = true;
}
if (nbDice == 2 && rolls[0].dice[0].results[0].result == 1 && rolls[1].dice[0].results[0].result == 1) {
if (nbDice == 2 && rollData.rolls[0].dice[0].results[0].result == 1 && rollData.rolls[1].dice[0].results[0].result == 1) {
isFailure = true;
}
if (nbDice >= 3 ) {
let nbOnes = 0
for (let roll of rolls) {
for (let roll of rollData.rolls) {
if (roll.dice[0].results[0].result == 1 ) nbOnes++;
}
isFailure = nbOnes >= 3;
}
if ( rollData.furorUsage > 0 ) {
let actor = game.actors.get(rollData.actorId);
actor.decrementFuror( rollData.furorUsage);
}
// Dégats
if ( isSuccess && (rollData.mode == "armecc" || rollData.mode == "armedist") ) {
@ -269,7 +281,6 @@ export class YggdrasillUtility {
}
// Stockage resultats
rollData.rolls = rolls
rollData.sumDice = sumDice;
rollData.isFailure = isFailure;
rollData.isSuccess = isSuccess;