Fix: ajustements surprises
Affichage de l'image de la surprise
This commit is contained in:
		
							
								
								
									
										1
									
								
								assets/actions/armes-disparates.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								assets/actions/armes-disparates.svg
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,0)" style=""><path d="m329.5 29.12-8.1 11.4L359 67.16l8.1-11.44zm-88 5.04 24.2 45.36 1.8 1.29 14.8-40.36zm57.6 12.63-16.4 44.8 40.7 28.81 35.3-31.54c-.9-.58-1.9-1.19-2.8-1.84zM59.83 48.56l10.84 45.83 29.63 2.6 2.7-29.63zM470.9 75.41c-5.6 4.71-12.2 8.59-19.5 11.74 5 46.45-14.7 83.45-45.2 109.75-26.5 22.9-60.9 38.4-95 47.9-2.5 4.8-5 9.2-7.4 13.1 41.5 5.4 93.2-21.2 129.2-60 19.8-21.3 34.8-45.9 41.1-69.2 5.2-19.4 4.7-37.42-3.2-53.29zm-351.3 8.71-3 32.48-32.35-2.9 226.55 271 20-16.7 15.3-12.8zM434 93.09c-4.2 1-8.5 2-12.8 2.7-14.9 2.5-30.1 3.1-43.5.3l-41 36.61c4 7 5 15.7 4.5 24.5-.6 12.6-4.3 26.7-9.3 40.9-3 8.3-6.3 16.6-9.9 24.6 26.9-9.2 52.6-22.3 72.5-39.4 26.2-22.8 42.5-51.6 39.5-90.21zM274 107.4l-51.2 72.2 30.6 36.5 58.2-82.1zM173.8 248.8 34.53 445.2l37.53 26.6L204.3 285.3zm233 79.2L273.3 439.5l19.2 23.1L426 351zm-18.3 77.9-35.3 29.4 39.7 47.6 35.3-29.4z" fill="#fff" fill-opacity="1"></path></g></svg> | ||||||
| After Width: | Height: | Size: 1.0 KiB | 
| @@ -855,7 +855,7 @@ select, | |||||||
|   max-width: 1.4rem; |   max-width: 1.4rem; | ||||||
|   max-height: 1.4rem; |   max-height: 1.4rem; | ||||||
|   border: 1px; |   border: 1px; | ||||||
|   background: center / contain no-repeat url('../../assets/ui/icone_parchement_vierge.webp'); |   background: center / contain no-repeat url('../../icons/templates/icone_parchement_vierge.webp'); | ||||||
| } | } | ||||||
| .system-foundryvtt-reve-de-dragon .sheet-header .header-compteurs { | .system-foundryvtt-reve-de-dragon .sheet-header .header-compteurs { | ||||||
|   width: calc(60% - 110px - 1rem); |   width: calc(60% - 110px - 1rem); | ||||||
| @@ -2708,6 +2708,13 @@ select, | |||||||
| .system-foundryvtt-reve-de-dragon :is(.tooltip, .tooltip-overflow) .ttt-ajustements div:nth-child(odd) { | .system-foundryvtt-reve-de-dragon :is(.tooltip, .tooltip-overflow) .ttt-ajustements div:nth-child(odd) { | ||||||
|   background: var(--background-tooltip-alt); |   background: var(--background-tooltip-alt); | ||||||
| } | } | ||||||
|  | .system-foundryvtt-reve-de-dragon :is(.tooltip, .tooltip-overflow) .ttt-ajustements div img { | ||||||
|  |   display: inline; | ||||||
|  |   margin: 0; | ||||||
|  |   max-width: 1rem; | ||||||
|  |   max-height: 1rem; | ||||||
|  |   filter: invert(0.8); | ||||||
|  | } | ||||||
| .system-foundryvtt-reve-de-dragon aside#tooltip { | .system-foundryvtt-reve-de-dragon aside#tooltip { | ||||||
|   max-width: 15rem; |   max-width: 15rem; | ||||||
|   background: var(--background-tooltip); |   background: var(--background-tooltip); | ||||||
|   | |||||||
| @@ -118,7 +118,7 @@ | |||||||
|     max-width: 1.4rem; |     max-width: 1.4rem; | ||||||
|     max-height: 1.4rem; |     max-height: 1.4rem; | ||||||
|     border: 1px; |     border: 1px; | ||||||
|     background: center / contain no-repeat url('../../assets/ui/icone_parchement_vierge.webp'); |     background: center / contain no-repeat url('../../icons/templates/icone_parchement_vierge.webp'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .sheet-header .header-compteurs { |   .sheet-header .header-compteurs { | ||||||
| @@ -1955,6 +1955,13 @@ | |||||||
|       div:nth-child(odd) { |       div:nth-child(odd) { | ||||||
|         background: var(--background-tooltip-alt); |         background: var(--background-tooltip-alt); | ||||||
|       } |       } | ||||||
|  |       div img { | ||||||
|  |         display: inline; | ||||||
|  |         margin: 0; | ||||||
|  |         max-width: 1rem; | ||||||
|  |         max-height: 1rem; | ||||||
|  |         filter: invert(0.8); | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -53,9 +53,15 @@ export const RDD_CONFIG = { | |||||||
|     { value: "Rarissime", label: "Rarissime" } |     { value: "Rarissime", label: "Rarissime" } | ||||||
|   ], |   ], | ||||||
|   particuliere: { |   particuliere: { | ||||||
|     force: { key: 'force', descr: 'en force', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-force.svg'}, |     force: { key: 'force', descr: 'en force', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-force.svg' }, | ||||||
|     finesse: { key: 'finesse', descr: 'en finesse', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-finesse.svg'}, |     finesse: { key: 'finesse', descr: 'en finesse', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-finesse.svg' }, | ||||||
|     rapidite: { key: 'rapidite', descr: 'en rapidité', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-rapidite.svg'}, |     rapidite: { key: 'rapidite', descr: 'en rapidité', img: 'systems/foundryvtt-reve-de-dragon/assets/ui/part-rapidite.svg' }, | ||||||
|  |   }, | ||||||
|  |   icons: { | ||||||
|  |     armesDisparates: 'systems/foundryvtt-reve-de-dragon/assets/actions/armes-disparates.svg', | ||||||
|  |     demiReve: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg', | ||||||
|  |     empoignade: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp', | ||||||
|  |     forceWeak: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg', | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -59,7 +59,7 @@ export class RdDBonus { | |||||||
|   static dmgRollV2(rollData, attaque) { |   static dmgRollV2(rollData, attaque) { | ||||||
|     const actor = rollData.active.actor |     const actor = rollData.active.actor | ||||||
|     const arme = attaque.arme |     const arme = attaque.arme | ||||||
|     const dmgArme = RdDBonus.dmgArme(arme, attaque.dommagesArme) |     const dmgArme = RdDBonus.dmgArme(arme, attaque.dommages) | ||||||
|     const dmg = { |     const dmg = { | ||||||
|       total: 0, |       total: 0, | ||||||
|       dmgArme: dmgArme, |       dmgArme: dmgArme, | ||||||
| @@ -70,7 +70,7 @@ export class RdDBonus { | |||||||
|       dmgSurprise: rollData.opponent?.surprise?.dmg ?? 0, |       dmgSurprise: rollData.opponent?.surprise?.dmg ?? 0, | ||||||
|       mortalite: RdDBonus.mortalite(attaque.dmg?.mortalite, arme?.system.mortalite, rollData.opponent?.actor?.isEntite()), |       mortalite: RdDBonus.mortalite(attaque.dmg?.mortalite, arme?.system.mortalite, rollData.opponent?.actor?.isEntite()), | ||||||
|       dmgActor: RdDBonus.bonusDmg(actor, attaque.carac.key, dmgArme, attaque.forceRequise), |       dmgActor: RdDBonus.bonusDmg(actor, attaque.carac.key, dmgArme, attaque.forceRequise), | ||||||
|       dmgForceInsuffisante: Math.min(0, actor.getForce() - attaque.forceRequise), |       dmgForceInsuffisante: Math.min(0, actor.getForce() - (attaque.forceRequise ?? 0)), | ||||||
|       dmgDiffLibre: ReglesOptionnelles.isUsing('degat-ajout-malus-libre') ? Math.abs(attaque.diff ?? 0) : 0 |       dmgDiffLibre: ReglesOptionnelles.isUsing('degat-ajout-malus-libre') ? Math.abs(attaque.diff ?? 0) : 0 | ||||||
|     } |     } | ||||||
|     dmg.total = dmg.dmgSurprise + dmg.dmgTactique + dmg.dmgArme + dmg.dmgActor + dmg.dmgParticuliere + dmg.dmgForceInsuffisante + dmg.dmgDiffLibre |     dmg.total = dmg.dmgSurprise + dmg.dmgTactique + dmg.dmgArme + dmg.dmgActor + dmg.dmgParticuliere + dmg.dmgForceInsuffisante + dmg.dmgDiffLibre | ||||||
| @@ -105,9 +105,9 @@ export class RdDBonus { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static dmgArme(arme, dommagesMain) { |   static dmgArme(arme, dommages) { | ||||||
|     if (arme) { |     if (arme) { | ||||||
|       let dmgBase = dommagesMain ?? Number(arme.system.dommages ?? 0); |       let dmgBase = dommages ?? Number(arme.system.dommages ?? 0); | ||||||
|       //Le bonus dégats magiques ne peut pas faire dépasser le bonus de l'arme (cf p.278) |       //Le bonus dégats magiques ne peut pas faire dépasser le bonus de l'arme (cf p.278) | ||||||
|       return dmgBase + Math.min(dmgBase, arme.system.magique ? arme.system.ecaille_efficacite : 0); |       return dmgBase + Math.min(dmgBase, arme.system.magique ? arme.system.ecaille_efficacite : 0); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -96,7 +96,7 @@ export class RollDialogAdapter { | |||||||
|       rolled.niveauNecessaire = RdDResolutionTable.findNiveauNecessaire(rollData.selectedCarac.value, rolled.roll) |       rolled.niveauNecessaire = RdDResolutionTable.findNiveauNecessaire(rollData.selectedCarac.value, rolled.roll) | ||||||
|       rolled.ajustementNecessaire = rolled.niveauNecessaire - diff |       rolled.ajustementNecessaire = rolled.niveauNecessaire - diff | ||||||
|     } |     } | ||||||
|     rollData.ajustements = rollData.ajustements.map(aj => { return { label: aj.label, value: aj.value } }) |     rollData.ajustements = rollData.ajustements.map(a => { return { label: a.label, value: a.value } }) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   static adjustDemiSurprise(rollData) { |   static adjustDemiSurprise(rollData) { | ||||||
| @@ -165,8 +165,6 @@ export class RollDialogAdapter { | |||||||
|       comp: attackerRoll.competence, |       comp: attackerRoll.competence, | ||||||
|       main: RdDItemArme.getMainAttaque(attackerRoll.competence), |       main: RdDItemArme.getMainAttaque(attackerRoll.competence), | ||||||
|       equipe: attackerRoll.arme.system.equipe, |       equipe: attackerRoll.arme.system.equipe, | ||||||
|       // carac: { key: caracCode, value: caracValue }, |  | ||||||
|       // dommagesArme: dommagesArme, |  | ||||||
|       diff: attackerRoll.diffLibre, |       diff: attackerRoll.diffLibre, | ||||||
|       particuliere: attackerRoll.particuliere, |       particuliere: attackerRoll.particuliere, | ||||||
|       tactique: RdDBonus.find(attackerRoll.tactique), |       tactique: RdDBonus.find(attackerRoll.tactique), | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
|  | import { RDD_CONFIG } from "../constants.js" | ||||||
| import { Misc } from "../misc.js" | import { Misc } from "../misc.js" | ||||||
| import { ReglesOptionnelles } from "../settings/regles-optionnelles.js" | import { ReglesOptionnelles } from "../settings/regles-optionnelles.js" | ||||||
| import { StatusEffects } from "../settings/status-effects.js" | import { demiReveStatusEffect, StatusEffects } from "../settings/status-effects.js" | ||||||
| import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs" | import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs" | ||||||
| import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs" | import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs" | ||||||
|  |  | ||||||
| @@ -40,28 +41,29 @@ export class RollPartSign extends RollPart { | |||||||
|     const current = this.getCurrent(rollData) |     const current = this.getCurrent(rollData) | ||||||
|     current.armeDisparate = isCombat && current.armeDisparate |     current.armeDisparate = isCombat && current.armeDisparate | ||||||
|     current.surprise = actor.getSurprise(isCombat) // TODO: could be from rollData.active.surprise?? |     current.surprise = actor.getSurprise(isCombat) // TODO: could be from rollData.active.surprise?? | ||||||
|     current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it) > 0).map(it => it.name) |     current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it) > 0) | ||||||
|  |       .map(it => { return { img: it.img, label: game.i18n.localize(it.name) } }) | ||||||
|     current.diviseur = 1 |     current.diviseur = 1 | ||||||
|     if (current.surprise == 'demi') { |     if (current.surprise == 'demi') { | ||||||
|       current.diviseur *= 2 |       current.diviseur *= 2 | ||||||
|     } |     } | ||||||
|     if (isCombat && actor.isDemiReve()) { |     if (isCombat && actor.isDemiReve()) { | ||||||
|       current.reasons.push('Demi-rêve en combat') |       current.reasons.push({ img: RDD_CONFIG.icons.demiReve, label: 'Demi-rêve en combat' }) | ||||||
|     } |     } | ||||||
|     if (this.isParadeArmeDisparate(current)) { |     if (this.isParadeArmeDisparate(current)) { | ||||||
|       current.diviseur *= 2 |       current.diviseur *= 2 | ||||||
|       current.reasons.push('Armes disparates') |       current.reasons.push({ img: RDD_CONFIG.icons.armesDisparates, label: 'Armes disparates' }) | ||||||
|     } |     } | ||||||
|     if (this.isAttaqueFinesse(rollData)) { |     if (this.isAttaqueFinesse(rollData)) { | ||||||
|       current.diviseur *= 2 |       current.diviseur *= 2 | ||||||
|       current.reasons.push('Particulière en finesse') |       current.reasons.push({ img: RDD_CONFIG.particuliere.finesse.img, label: 'Particulière en finesse' }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (!ReglesOptionnelles.isUsing('tripleSignificative')) { |     if (!ReglesOptionnelles.isUsing('tripleSignificative')) { | ||||||
|       current.diviseur = Math.min(current.diviseur, 4); |       current.diviseur = Math.min(current.diviseur, 4); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     current.reason = current.reasons.join(', ') |     current.reason = current.reasons.map(it => it.label).join(', ') | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   isAttaqueFinesse(rollData) { |   isAttaqueFinesse(rollData) { | ||||||
| @@ -76,8 +78,16 @@ export class RollPartSign extends RollPart { | |||||||
|     const current = this.getCurrent(rollData) |     const current = this.getCurrent(rollData) | ||||||
|     if (current.surprise == 'demi') { |     if (current.surprise == 'demi') { | ||||||
|       return [ |       return [ | ||||||
|         { label: 'Significative requise ' + Misc.getFractionOneN(current.diviseur) }, |         { | ||||||
|         ...current.reasons.map(it => { return { label: '<i class="fa-solid fa-triangle-exclamation"></i> ' + it } }) |           label: 'Significative requise ' + Misc.getFractionOneN(current.diviseur) | ||||||
|  |         }, | ||||||
|  |         ...current.reasons.map(it => { | ||||||
|  |           return { | ||||||
|  |             label: it.img | ||||||
|  |               ? `<img src="${it.img}"> ${it.label}` | ||||||
|  |               : `<i class="fa-solid fa-triangle-exclamation"></i> ${it.label}` | ||||||
|  |           } | ||||||
|  |         }) | ||||||
|       ] |       ] | ||||||
|     } |     } | ||||||
|     return [] |     return [] | ||||||
|   | |||||||
| @@ -30,7 +30,8 @@ export class RollPart { | |||||||
|       rollData.selected[this.code] = {} |       rollData.selected[this.code] = {} | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |   /** l'acteur actif du jet */ | ||||||
|  |   getActor(rollData) { return rollData.active.actor } | ||||||
|   /** le conteneur de données du RollPart */ |   /** le conteneur de données du RollPart */ | ||||||
|   getRefs(rollData) { |   getRefs(rollData) { | ||||||
|     return rollData.refs[this.code] |     return rollData.refs[this.code] | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| import { SYSTEM_RDD } from "../constants.js"; | import { RDD_CONFIG, SYSTEM_RDD } from "../constants.js"; | ||||||
| import { Misc } from "../misc.js"; | import { Misc } from "../misc.js"; | ||||||
| import { RdDBonus } from "../rdd-bonus.js"; | import { RdDBonus } from "../rdd-bonus.js"; | ||||||
|  |  | ||||||
| @@ -17,11 +17,13 @@ export const STATUSES = { | |||||||
|   StatusForceWeak: 'force insuffisante', |   StatusForceWeak: 'force insuffisante', | ||||||
| } | } | ||||||
|  |  | ||||||
| const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg' }; | export const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: RDD_CONFIG.icons.forceWeak }; | ||||||
| const demiReveStatusEffect = { rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg' }; | export const demiReveStatusEffect = { | ||||||
|  |   rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: RDD_CONFIG.icons.demiReve | ||||||
|  | }; | ||||||
| const rddStatusEffects = [ | const rddStatusEffects = [ | ||||||
|   { rdd: true, id: STATUSES.StatusGrappling, tint: '#33cc33', name: 'EFFECT.StatusGrappling', img: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' }, |   { rdd: true, id: STATUSES.StatusGrappling, tint: '#33cc33', name: 'EFFECT.StatusGrappling', img: RDD_CONFIG.icons.empoignade }, | ||||||
|   { rdd: true, id: STATUSES.StatusGrappled, tint: '#ff9900', name: 'EFFECT.StatusGrappled', img: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' }, |   { rdd: true, id: STATUSES.StatusGrappled, tint: '#ff9900', name: 'EFFECT.StatusGrappled', img: RDD_CONFIG.icons.empoignade }, | ||||||
|  |  | ||||||
|   { rdd: true, id: STATUSES.StatusRestrained, name: 'EFFECT.StatusRestrained', img: 'icons/svg/net.svg' }, |   { rdd: true, id: STATUSES.StatusRestrained, name: 'EFFECT.StatusRestrained', img: 'icons/svg/net.svg' }, | ||||||
|   { rdd: true, id: STATUSES.StatusStunned, name: 'EFFECT.StatusStunned', img: 'icons/svg/stoned.svg', "duration.rounds": 1 }, |   { rdd: true, id: STATUSES.StatusStunned, name: 'EFFECT.StatusStunned', img: 'icons/svg/stoned.svg', "duration.rounds": 1 }, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user