2021-02-12 15:21:58 +01:00
export class WH4FRPatchConfig {
2021-05-27 12:20:50 +02:00
/************************************************************************************/
2021-02-12 15:21:58 +01:00
static perform _patch ( ) {
// Detect and patch as necessary
if ( game . wfrp4e . config && game . wfrp4e . config . talentBonuses && game . wfrp4e . config . talentBonuses [ "vivacité" ] == undefined ) {
console . log ( "Patching WFRP4E now ...." ) ;
game . wfrp4e . config . qualityDescriptions [ "distract" ] = game . i18n . localize ( "WFRP4E.Properties.Distract" ) ; // Patch missing quality
game . wfrp4e . config . talentBonuses = {
"perspicace" : "int" ,
"affable" : "fel" ,
"tireur de précision" : "bs" ,
"très fort" : "s" ,
"vivacité" : "i" ,
"reflexes foudroyants" : "ag" ,
"imperturbable" : "wp" ,
"très résistant" : "t" ,
"doigts de fée" : "dex" ,
"guerrier né" : "ws"
}
2021-05-27 12:20:50 +02:00
game . wfrp4e . config . speciesSkills [ "human" ] = [
2021-02-12 15:21:58 +01:00
"Soins aux animaux" ,
"Charme" ,
"Calme" ,
"Evaluation" ,
"Ragot" ,
"Marchandage" ,
"Langue (Bretonnien)" ,
"Langue (Wastelander)" ,
"Commandement" ,
"Savoir (Reikland)" ,
"Corps à corps (Base)" ,
"Projectiles (Arc)"
2021-05-27 12:20:50 +02:00
] ;
game . wfrp4e . config . speciesSkills [ "dwarf" ] = [
2021-02-12 15:21:58 +01:00
"Résistance à l'alcool" ,
"Calme" ,
"Résistance" ,
"Divertissement (Raconter)" ,
"Evaluation" ,
"Intimidation" ,
"Langue (Khazalid)" ,
"Savoir (Nains)" ,
"Savoir (Geologie)" ,
"Savoir (Metallurgie)" ,
"Corps à corps (Base)" ,
"Métier (Au choix)"
2021-05-27 12:20:50 +02:00
] ;
game . wfrp4e . config . speciesSkills [ "halfling" ] = [
2021-02-12 15:21:58 +01:00
"Charme" ,
"Résistance à l'alcool" ,
"Esquive" ,
"Pari" ,
"Marchandage" ,
"Intuition" ,
"Langue (Mootland)" ,
"Savoir (Reikland)" ,
"Perception" ,
"Escamotage" ,
"Discrétion (Au choix)" ,
"Métier (Cuisinier)"
2021-05-27 12:20:50 +02:00
] ;
game . wfrp4e . config . speciesSkills [ "helf" ] = [
2021-02-12 15:21:58 +01:00
"Calme" ,
"Divertissement (Chant)" ,
"Evaluation" ,
"Langue (Eltharin)" ,
"Commandement" ,
"Corps à corps (Base)" ,
2021-04-29 09:01:22 +02:00
"Orientation" ,
2021-02-12 15:21:58 +01:00
"Perception" ,
"Musicien (Au choix)" ,
"Projectiles (Arc)" ,
"Voile" ,
"Natation"
2021-05-27 12:20:50 +02:00
] ;
game . wfrp4e . config . speciesSkills [ "welf" ] = [
2021-02-12 15:21:58 +01:00
"Athlétisme" ,
"Escalade" ,
"Résistance" ,
"Divertissement (Chant)" ,
"Intimidation" ,
"Langue (Eltharin)" ,
"Corps à corps (Base)" ,
"Survie en extérieur" ,
"Perception" ,
"Projectiles (Arc)" ,
"Discrétion (Rural)" ,
"Pistage"
2021-05-27 12:20:50 +02:00
] ;
game . wfrp4e . config . speciesTalents [ "human" ] = [
"Destinée" ,
"Affable, Perspicace" ,
3
]
game . wfrp4e . config . speciesTalents [ "dwarf" ] = [
2021-02-12 15:21:58 +01:00
"Résistance à la Magie" ,
"Vision Nocturne" ,
"Lire/Ecrire, Impitoyable" ,
"Déterminé, Obstiné" ,
"Costaud" ,
0
2021-05-27 12:20:50 +02:00
]
game . wfrp4e . config . speciesTalents [ "halfling" ] = [
2021-02-12 15:21:58 +01:00
"Sens Aiguisé (Gout)" ,
"Vision Nocturne" ,
2021-04-29 09:01:22 +02:00
"Résistant (Chaos)" ,
2021-02-12 15:21:58 +01:00
"Petit" ,
2
2021-05-27 12:20:50 +02:00
] ;
game . wfrp4e . config . speciesTalents [ "helf" ] = [
2021-02-12 15:21:58 +01:00
"Sens Aiguisé (Vue)" ,
"Imperturbable, Perspicace" ,
"Vision Nocturne" ,
"Seconde Vue, Sixième Sens" ,
"Lire/Ecrire" ,
0
2021-05-27 12:20:50 +02:00
]
game . wfrp4e . config . speciesTalents [ "welf" ] = [
2021-05-23 18:05:31 +02:00
"Sens Aiguisé (Vue)" ,
2021-02-12 15:21:58 +01:00
"Dur à cuire, Seconde Vue" ,
"Vision Nocturne" ,
2021-05-23 18:05:31 +02:00
"Nomade" ,
"Lire/Ecrire, Très Résistant" ,
2021-02-12 15:21:58 +01:00
0
2021-05-27 12:20:50 +02:00
]
game . wfrp4e . config . species [ "human" ] = "Humain" ;
game . wfrp4e . config . species [ "dwarf" ] = "Nain" ;
game . wfrp4e . config . species [ "halfling" ] = "Halfling" ;
game . wfrp4e . config . species [ "helf" ] = "Haut Elfe" ;
game . wfrp4e . config . species [ "welf" ] = "Elfe Sylvain" ;
2021-02-12 15:21:58 +01:00
2021-06-10 21:27:40 +02:00
game . wfrp4e . config . subspecies = {
human : {
reiklander : {
name : "Reiklander" ,
skills : [
"Soins aux animaux" ,
"Charme" ,
"Calme" ,
"Evaluation" ,
"Ragot" ,
"Marchandage" ,
"Langue (Bretonnien)" ,
"Langue (Wastelander)" ,
"Commandement" ,
"Savoir (Reikland)" ,
"Corps à corps (Base)" ,
"Projectiles (Arc)"
] ,
talents : [
"Destinée" ,
"Affable, Perspicace" ,
3
]
}
}
}
2021-08-14 22:49:25 +02:00
game . wfrp4e . config . conditionScripts = {
"ablaze" : async function ( actor ) {
let effect = actor . hasCondition ( "ablaze" )
let value = effect . conditionValue ;
let leastProtectedLoc ;
let leastProtectedValue = 999 ;
for ( let loc in actor . status . armour )
{
if ( actor . status . armour [ loc ] . value != undefined && actor . status . armour [ loc ] . value < leastProtectedValue )
{
leastProtectedLoc = loc ;
leastProtectedValue = actor . status . armour [ loc ] . value ;
}
}
let rollString = ` 1d10 + ${ value - 1 } `
let roll = new Roll ( ` ${ rollString } - ${ leastProtectedValue || 0 } ` ) . roll ( ) ;
let msg = ` <h2>En Flammes</h2><b>Formule</b>: ${ rollString } <br><b>Lancer</b>: ${ roll . terms . map ( i => i . total ) . splice ( 0 , 3 ) . join ( " " ) } ` // Don't show AP in the roll formula
actor . runEffects ( "preApplyCondition" , { effect , data : { msg , roll , rollString } } )
value = effect . conditionValue ;
let damageMsg = ( ` <br> ` + await actor . applyBasicDamage ( roll . total , { damageType : game . wfrp4e . config . DAMAGE _TYPE . IGNORE _AP , suppressMsg : true } ) ) . split ( "" )
damageMsg . splice ( damageMsg . length - 1 , 1 ) // Removes the parentheses and adds + AP amount.
msg += damageMsg . join ( "" ) . concat ( ` + ${ leastProtectedValue } AP) ` )
let messageData = game . wfrp4e . utility . chatDataSetup ( msg ) ;
messageData . speaker = { alias : actor . data . token . name }
actor . runEffects ( "applyCondition" , { effect , data : { messageData } } )
return messageData
} ,
"poisoned" : async function ( actor ) {
let effect = actor . hasCondition ( "poisoned" )
let msg = ` <h2>Empoisonné</h2> `
actor . runEffects ( "preApplyCondition" , { effect , data : { msg } } )
let value = effect . conditionValue ;
msg += await actor . applyBasicDamage ( value , { damageType : game . wfrp4e . config . DAMAGE _TYPE . IGNORE _ALL , suppressMsg : true } )
let messageData = game . wfrp4e . utility . chatDataSetup ( msg ) ;
messageData . speaker = { alias : actor . data . token . name }
actor . runEffects ( "applyCondition" , { effect , data : { messageData } } )
return messageData
} ,
"bleeding" : async function ( actor ) {
let effect = actor . hasCondition ( "bleeding" )
let bleedingAmt ;
let bleedingRoll ;
let msg = ` <h2>Hémorragie</h2> `
actor . runEffects ( "preApplyCondition" , { effect , data : { msg } } )
let value = effect . conditionValue ;
msg += await actor . applyBasicDamage ( value , { damageType : game . wfrp4e . config . DAMAGE _TYPE . IGNORE _ALL , minimumOne : false , suppressMsg : true } )
if ( actor . status . wounds . value == 0 && ! actor . hasCondition ( "unconscious" ) )
{
await actor . addCondition ( "unconscious" )
msg += ` <br><b> ${ actor . data . token . name } </b> tombe inconscient! `
}
if ( actor . hasCondition ( "unconscious" ) )
{
bleedingAmt = value ;
bleedingRoll = new Roll ( "1d100" ) . roll ( ) . total ;
if ( bleedingRoll <= bleedingAmt * 10 )
{
msg += ` <br><b> ${ actor . data . token . name } </b> meurt de la perte de sang! (Lancé ${ bleedingRoll } ) `
actor . addCondition ( "dead" )
}
else if ( bleedingRoll % 11 == 0 )
{
msg += ` <br><b> ${ actor . data . token . name } 's</b> cicatrise un peu et élimine 1 Etat Hémorragique (Lancé ${ bleedingRoll } ) `
actor . removeCondition ( "bleeding" )
}
else
{
msg += ` <br>Bleeding Roll: ${ bleedingRoll } `
}
}
let messageData = game . wfrp4e . utility . chatDataSetup ( msg ) ;
messageData . speaker = { alias : actor . data . token . name }
actor . runEffects ( "applyCondition" , { effect , data : { messageData , bleedingRoll } } )
return messageData
}
}
game . wfrp4e . config . statusEffects = [
2021-02-12 15:21:58 +01:00
{
icon : "systems/wfrp4e/icons/conditions/bleeding.png" ,
id : "bleeding" ,
label : "Hémorragique" ,
flags : {
wfrp4e : {
"trigger" : "endRound" ,
"value" : 1
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/poisoned.png" ,
id : "poisoned" ,
label : "Empoisonné" ,
flags : {
wfrp4e : {
"trigger" : "endRound" ,
"effectTrigger" : "prefillDialog" ,
"script" : "args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')" ,
"value" : 1
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/ablaze.png" ,
id : "ablaze" ,
label : "En Flammes" ,
flags : {
wfrp4e : {
"trigger" : "endRound" ,
"value" : 1
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/deafened.png" ,
id : "deafened" ,
label : "Assourdi" ,
flags : {
wfrp4e : {
"trigger" : "endRound" ,
"effectTrigger" : "dialogChoice" ,
"effectData" : {
"description" : "Tests related to hearing" ,
"modifier" : "-10 * this.flags.wfrp4e.value"
} ,
"value" : 1
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/stunned.png" ,
id : "stunned" ,
label : "Assommé" ,
flags : {
wfrp4e : {
"trigger" : "endRound" ,
"effectTrigger" : "prefillDialog" ,
"script" : "args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')" ,
"value" : 1
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/entangled.png" ,
id : "entangled" ,
label : "Empêtré" ,
flags : {
wfrp4e : {
"trigger" : "endRound" ,
"effectTrigger" : "dialogChoice" ,
"effectData" : {
"description" : "Tout les tests relatifs au mouvement" ,
"modifier" : "-10 * this.flags.wfrp4e.value"
} ,
"value" : 1
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/fatigued.png" ,
id : "fatigued" ,
label : "Extenué" ,
flags : {
wfrp4e : {
"effectTrigger" : "prefillDialog" ,
"script" : "args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')" ,
"value" : 1
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/blinded.png" ,
id : "blinded" ,
label : "Aveuglé" ,
flags : {
wfrp4e : {
"trigger" : "endRound" ,
"effectTrigger" : "dialogChoice" ,
"effectData" : {
"description" : "Tests relatifs à la vue" ,
"modifier" : "-10 * this.flags.wfrp4e.value"
} ,
"value" : 1 ,
"secondaryEffect" : {
"effectTrigger" : "targetPrefillDialog" ,
"script" : "if (args.type == 'weapon' && args.item.attackType=='melee') args.prefillModifiers.modifier += 10 * getProperty(this.effect, 'flags.wfrp4e.value')" ,
}
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/broken.png" ,
id : "broken" ,
label : "Brisé" ,
flags : {
wfrp4e : {
"effectTrigger" : "prefillDialog" ,
"script" : "args.prefillModifiers.modifier -= 10 * getProperty(this.effect, 'flags.wfrp4e.value')" ,
"value" : 1
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/prone.png" ,
id : "prone" ,
label : "A terre" ,
flags : {
wfrp4e : {
"effectTrigger" : "dialogChoice" ,
"effectData" : {
"description" : "Tout les tests relatifs au mouvement" ,
"modifier" : "-20"
} ,
"value" : null ,
"secondaryEffect" : {
"effectTrigger" : "targetPrefillDialog" ,
"script" : "if (args.type == 'weapon' && args.item.attackType=='melee') args.prefillModifiers.modifier += 20" ,
}
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/fear.png" ,
id : "fear" ,
label : "Peur" ,
flags : {
wfrp4e : {
"effectTrigger" : "dialogChoice" ,
"effectData" : {
"description" : "Tests affectés " ,
"slBonus" : "-1"
} ,
"script" : `
if ( this . flags . wfrp4e . fearName )
this . flags . wfrp4e . effectData . description += " " + this . flags . wfrp4e . fearName
else
this . flags . wfrp4e . effectData . description += " la source de la Peur"
` ,
"value" : null
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/surprised.png" ,
id : "surprised" ,
label : "Surpris" ,
flags : {
wfrp4e : {
"value" : null ,
"secondaryEffect" : {
"effectTrigger" : "targetPrefillDialog" ,
"script" : "if (args.type == 'weapon' && args.item.attackType=='melee') args.prefillModifiers.modifier += 20" ,
}
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/unconscious.png" ,
id : "unconscious" ,
label : "Inconscient" ,
flags : {
wfrp4e : {
"value" : null
}
}
} ,
{
icon : "systems/wfrp4e/icons/conditions/grappling.png" ,
id : "grappling" ,
label : "Empoigné" ,
flags : {
wfrp4e : {
"value" : null
}
}
} ,
{
icon : "systems/wfrp4e/icons/defeated.png" ,
id : "dead" ,
label : "Mort" ,
flags : {
wfrp4e : {
"value" : null
}
}
}
]
2021-08-14 22:49:25 +02:00
game . wfrp4e . config . systemEffects = {
"enc1" : {
label : "Encombrement 1" ,
icon : "systems/wfrp4e/icons/effects/enc1.png" ,
flags : {
wfrp4e : {
"effectTrigger" : "prePrepareData" ,
"effectApplication" : "actor" ,
"script" : `
args . actor . characteristics . ag . modifier -= 10 ;
args . actor . details . move . value -= 1 ;
if ( args . actor . details . move . value < 3 )
args . actor . details . move . value = 3 `
}
}
} ,
"enc2" : {
label : "Encombrement 2" ,
icon : "systems/wfrp4e/icons/effects/enc2.png" ,
flags : {
wfrp4e : {
"effectTrigger" : "prePrepareData" ,
"effectApplication" : "actor" ,
"script" : `
args . actor . characteristics . ag . modifier -= 20 ;
args . actor . details . move . value -= 2 ;
if ( args . actor . details . move . value < 2 )
args . actor . details . move . value = 2 `
}
}
} ,
"enc3" : {
label : "Encombrement 3" ,
icon : "systems/wfrp4e/icons/effects/enc3.png" ,
flags : {
wfrp4e : {
"effectTrigger" : "prePrepareData" ,
"effectApplication" : "actor" ,
"script" : `
args . actor . details . move . value = 0 ; `
}
}
} ,
"cold1" : {
label : "Exposition au Froid 1" ,
icon : "" ,
changes : [
{ key : "data.characteristics.bs.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ag.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.dex.modifier" , mode : 2 , value : - 10 } ,
] ,
flags : {
wfrp4e : {
"effectTrigger" : "" ,
"effectApplication" : "actor" ,
"script" : ` `
}
}
} ,
"cold2" : {
label : "Exposition au Froid 2" ,
icon : "" ,
changes : [
{ key : "data.characteristics.bs.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ag.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ws.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.s.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.i.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.dex.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.wp.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.fel.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.s.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.wp.calculationBonusModifier" , mode : 2 , value : 1 } ,
] ,
flags : {
wfrp4e : {
"effectTrigger" : "" ,
"effectApplication" : "actor" ,
"script" : ` `
}
}
} ,
"cold3" : {
label : "Exposition au Froid 3" ,
icon : "" ,
flags : {
wfrp4e : {
"effectTrigger" : "oneTime" ,
"effectApplication" : "actor" ,
"script" : `
let tb = this . actor . characteristics . t . bonus
let damage = new Roll ( "1d10" ) . roll ( ) . total
damage -= tb
if ( damage <= 0 ) damage = 1
if ( this . actor . status . wounds . value <= damage )
{
this . actor . addCondition ( "unconscious" )
}
this . actor . modifyWounds ( - damage )
ui . notifications . notify ( "Encaisse " + damage + " dégats" )
`
}
}
} ,
"heat1" : {
label : "Exposition à la chaleur 1" ,
icon : "" ,
changes : [
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.wp.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.wp.calculationBonusModifier" , mode : 2 , value : 1 } ,
] ,
flags : {
wfrp4e : {
"effectTrigger" : "" ,
"effectApplication" : "actor" ,
"script" : ` `
}
}
} ,
"heat2" : {
label : "Exposition à la chaleur 2" ,
icon : "" ,
changes : [
{ key : "data.characteristics.bs.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ag.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ws.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.s.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.i.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.dex.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.wp.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.fel.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.s.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.wp.calculationBonusModifier" , mode : 2 , value : 1 } ,
] ,
flags : {
wfrp4e : {
"effectTrigger" : "" ,
"effectApplication" : "actor" ,
"script" : ` `
}
}
} ,
"heat3" : {
label : "Exposition à la chaleur 3" ,
icon : "" ,
flags : {
wfrp4e : {
"effectTrigger" : "oneTime" ,
"effectApplication" : "actor" ,
"script" : `
let tb = this . actor . characteristics . t . bonus
let damage = new Roll ( "1d10" ) . roll ( ) . total
damage -= tb
if ( damage <= 0 ) damage = 1
this . actor . modifyWounds ( - damage )
ui . notifications . notify ( "Encaisse " + damage + " dégats" )
`
}
}
} ,
"thirst1" : {
label : "Assoiffé 1" ,
icon : "" ,
changes : [
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.wp.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.fel.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.wp.calculationBonusModifier" , mode : 2 , value : 1 } ,
] ,
flags : {
wfrp4e : {
"effectTrigger" : "" ,
"effectApplication" : "actor" ,
"script" : ` `
}
}
} ,
"thirst2" : {
label : "Assoiffé 2+" ,
icon : "" ,
changes : [
{ key : "data.characteristics.bs.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ag.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ws.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.s.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.i.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.dex.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.wp.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.fel.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.s.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.wp.calculationBonusModifier" , mode : 2 , value : 1 } ,
] ,
flags : {
wfrp4e : {
"effectTrigger" : "invoke" ,
"effectApplication" : "actor" ,
"script" : `
let tb = this . actor . characteristics . t . bonus
let damage = new Roll ( "1d10" ) . roll ( ) . total
damage -= tb
if ( damage <= 0 ) damage = 1
this . actor . modifyWounds ( - damage )
ui . notifications . notify ( "Encasse " + damage + " dégats" )
`
}
}
} ,
"starvation1" : {
label : "Affamé 1" ,
icon : "" ,
changes : [
{ key : "data.characteristics.s.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.s.calculationBonusModifier" , mode : 2 , value : 1 } ,
] ,
flags : {
wfrp4e : {
"effectTrigger" : "" ,
"effectApplication" : "actor" ,
"script" : ` `
}
}
} ,
"starvation2" : {
label : "Affamé 2" ,
icon : "" ,
changes : [
{ key : "data.characteristics.bs.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ag.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ws.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.s.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.i.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.dex.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.wp.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.fel.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.t.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.s.calculationBonusModifier" , mode : 2 , value : 1 } ,
{ key : "data.characteristics.wp.calculationBonusModifier" , mode : 2 , value : 1 } ,
] ,
flags : {
wfrp4e : {
"effectTrigger" : "invoke" ,
"effectApplication" : "actor" ,
"script" : `
let tb = this . actor . characteristics . t . bonus
let damage = new Roll ( "1d10" ) . roll ( ) . total
damage -= tb
if ( damage <= 0 ) damage = 1
this . actor . modifyWounds ( - damage )
ui . notifications . notify ( "Encaisse " + damage + " dégats" )
`
}
}
} ,
"infighting" : {
label : "Combat au contact" ,
icon : "modules/wfrp4e-core/icons/talents/in-fighter.png" ,
flags : {
wfrp4e : {
"effectTrigger" : "prePrepareItem" ,
"effectApplication" : "actor" ,
"script" : `
if ( args . item . type == "weapon" && args . item . isEquipped )
{
let weaponLength = args . item . reachNum
if ( weaponLength > 3 )
{
let improv = duplicate ( game . wfrp4e . config . systemItems . improv )
improv . data . twohanded . value = args . item . twohanded . value
improv . data . offhand . value = args . item . offhand . value
args . item . data . update ( { "data" : improv . data , name : args . item . name + " (Combat au Contact" ) } )
}
}
`
}
}
} ,
"defensive" : {
label : "Posture Défensive [Compétence]" ,
icon : "" ,
flags : {
wfrp4e : {
"effectTrigger" : "prefillDialog" ,
"effectApplication" : "actor" ,
"script" : `
let skillName = this . effect . label . substring ( this . effect . label . indexOf ( "[" ) + 1 , this . effect . label . indexOf ( "]" ) )
if ( ! this . actor . isOpposing )
return
if ( ( args . type == "skill" && args . item . name == skillName ) ||
( args . type == "weapon" && args . item . skillToUse . name == skillName ) ||
( args . type == "cast" && skillName == "Langue (Magick)" ) ||
( args . type == "prayer" && skillName == "Prière" ) ||
( args . type == "trait" && args . item . rollable . skill == skillName ) )
args . prefillModifiers . modifier += 20 `
}
}
} ,
"dualwielder" : {
label : "Maniement de 2 armes" ,
icon : "modules/wfrp4e-core/icons/talents/dual-wielder.png" ,
flags : {
wfrp4e : {
"effectTrigger" : "prefillDialog" ,
"effectApplication" : "actor" ,
"script" : `
if ( this . actor . isOpposing )
args . prefillModifiers . modifier -= 10 `
}
}
} ,
"consumealcohol1" : {
label : "Résistance à l'alcool 1" ,
icon : "" ,
changes : [
{ key : "data.characteristics.bs.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ag.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.ws.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 10 } ,
{ key : "data.characteristics.dex.modifier" , mode : 2 , value : - 10 } ,
]
} ,
"consumealcohol2" : {
label : "Résistance à l'alcool 2" ,
icon : "" ,
changes : [
{ key : "data.characteristics.bs.modifier" , mode : 2 , value : - 20 } ,
{ key : "data.characteristics.ag.modifier" , mode : 2 , value : - 20 } ,
{ key : "data.characteristics.ws.modifier" , mode : 2 , value : - 20 } ,
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 20 } ,
{ key : "data.characteristics.dex.modifier" , mode : 2 , value : - 20 } ,
]
} ,
"consumealcohol3" : {
label : "Résistance à l'alcool 3" ,
icon : "" ,
changes : [
{ key : "data.characteristics.bs.modifier" , mode : 2 , value : - 30 } ,
{ key : "data.characteristics.ag.modifier" , mode : 2 , value : - 30 } ,
{ key : "data.characteristics.ws.modifier" , mode : 2 , value : - 30 } ,
{ key : "data.characteristics.int.modifier" , mode : 2 , value : - 30 } ,
{ key : "data.characteristics.dex.modifier" , mode : 2 , value : - 30 } ,
]
} ,
"stinkingdrunk1" : {
label : "Courage du Marienbourgeois" ,
icon : "" ,
flags : {
wfrp4e : {
"effectTrigger" : "prefillDialog" ,
"effectApplication" : "actor" ,
"script" : `
if ( args . type == "skill" && args . item . name == "Calme" )
args . prefillModifiers . modifier += 20 `
}
}
}
}
game . wfrp4e . config . systemItems = {
reload : {
type : "extendedTest" ,
name : "" ,
data : {
SL : {
} ,
test : {
value : ""
} ,
completion : {
value : "remove"
}
} ,
flags : {
wfrp4e : {
reloading : ""
}
}
} ,
improv : {
name : "Arme improvisée" ,
type : "weapon" ,
effects : [ ] ,
data : {
damage : { value : "SB + 1" } ,
reach : { value : "personal" } ,
weaponGroup : { value : "basic" } ,
twohanded : { value : false } ,
qualities : { value : "" } ,
flaws : { value : [ { name : "undamaging" } ] } ,
special : { value : "" } ,
range : { value : "" } ,
ammunitionGroup : { value : "" } ,
offhand : { value : false } ,
}
} ,
stomp : {
name : "Piétiner" ,
type : "trait" ,
effects : [ ] ,
data : {
specification : { value : "4" } ,
rollable : { value : true , rollCharacteristic : "ws" , bonusCharacteristic : "s" , defaultDifficulty : "challenging" , damage : true } ,
}
} ,
unarmed : {
name : "Désarmé" ,
type : "weapon" ,
effects : [ ] ,
data : {
damage : { value : "SB + 0" } ,
reach : { value : "personal" } ,
weaponGroup : { value : "brawling" } ,
twohanded : { value : false } ,
qualities : { value : "" } ,
flaws : { value : [ { name : "undamaging" } ] } ,
special : { value : "" } ,
range : { value : "" } ,
ammunitionGroup : { value : "" } ,
offhand : { value : false } ,
}
} ,
fear : {
name : "Peur" ,
type : "extendedTest" ,
data : {
completion : { value : 'remove' } ,
description : { type : 'String' , label : 'Description' , value : '' } ,
failingDecreases : { value : true } ,
gmdescription : { type : 'String' , label : 'Description' , value : '' } ,
hide : { test : false , progress : false } ,
negativePossible : { value : false } ,
SL : { current : 0 , target : 1 } ,
test : { value : 'Calme' }
} ,
effects :
[ {
label : "Peur" ,
icon : "systems/wfrp4e/icons/conditions/fear.png" ,
transfer : true ,
flags : {
core : {
statusId : "fear"
} ,
wfrp4e : {
"effectTrigger" : "dialogChoice" ,
"effectData" : {
"description" : "Tests affectés" ,
"slBonus" : "-1"
} ,
"script" : `
if ( this . flags . wfrp4e . fearName )
this . flags . wfrp4e . effectData . description += " " + this . flags . wfrp4e . fearName
else
this . flags . wfrp4e . effectData . description += " the source of fear"
` }
}
}
]
} ,
terror : {
label : "Terreur" ,
icon : "systems/wfrp4e/icons/conditions/terror.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectTrigger" : "oneTime" ,
"effectApplication" : "actor" ,
"terrorValue" : 1 ,
"script" : `
args . actor . setupSkill ( "Calme" ) . then ( setupData => {
args . actor . basicTest ( setupData ) . then ( test => {
if ( test . result . outcome == "failure" )
{
let terror = this . effect . flags . wfrp4e . terrorValue
if ( test . result . SL < 0 )
terror += Math . abs ( test . result . SL )
args . actor . addCondition ( "broken" , terror )
}
args . actor . applyFear ( value , name )
} )
} ) `
}
}
}
}
2021-02-12 15:21:58 +01:00
2021-08-14 22:49:25 +02:00
game . wfrp4e . config . symptomEffects = {
2021-02-12 15:21:58 +01:00
"blight" : {
label : "Toxine" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "invoke" ,
"symptom" : true ,
"script" : `
let difficulty = ""
if ( this . effect . label . includes ( "Modéré" ) )
difficulty = "easy"
else if ( this . effect . label . includes ( "Sévère" ) )
difficulty = "average"
else
difficulty = "veasy"
2021-07-15 14:28:19 +02:00
if ( args . actor . isOwner )
2021-02-12 15:21:58 +01:00
{
args . actor . setupSkill ( "Résistance" , { absolute : { difficulty } } ) . then ( setupData => {
args . actor . basicTest ( setupData ) . then ( test =>
{
2021-07-15 14:28:19 +02:00
if ( test . result . outcome == "failure" )
2021-02-12 15:21:58 +01:00
args . actor . addCondition ( "dead" )
} )
} )
} `
}
}
} ,
"buboes" : {
label : "Bubons" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "prefillDialog" ,
"symptom" : true ,
"script" : `
let applicableCharacteristics = [ "ws" , "bs" , "s" , "fel" , "ag" , "t" , "dex" ]
if ( args . type == "weapon" )
args . prefillModifiers . modifier -= 10
else if ( args . type == "characteristic" )
{
if ( applicableCharacteristics . includes ( args . item ) )
args . prefillModifiers . modifier -= 10
}
else if ( args . type == "skill" )
{
2021-07-15 14:28:19 +02:00
if ( applicableCharacteristics . includes ( args . item . characteristic . value ) )
2021-02-12 15:21:58 +01:00
args . prefillModifiers . modifier -= 10
}
` }
}
} ,
"convulsions" : {
label : "Convulsions" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "prefillDialog" ,
"symptom" : true ,
"script" : `
let modifier = 0
if ( this . effect . label . includes ( "Modéré" ) )
modifier = - 20
else
modifier = - 10
let applicableCharacteristics = [ "ws" , "bs" , "s" , "ag" , "t" , "dex" ]
if ( args . type == "weapon" )
args . prefillModifiers . modifier += modifier
else if ( args . type == "characteristic" )
{
if ( applicableCharacteristics . includes ( args . item ) )
args . prefillModifiers . modifier += modifier
}
else if ( args . type == "skill" )
{
2021-07-15 14:28:19 +02:00
if ( applicableCharacteristics . includes ( args . item . characteristic . value ) )
2021-02-12 15:21:58 +01:00
args . prefillModifiers . modifier += modifier
}
} `
}
}
} ,
"fever" : {
label : "Fièvre" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "prefillDialog" ,
"symptom" : true ,
"script" : `
let applicableCharacteristics = [ "ws" , "bs" , "s" , "fel" , "ag" , "t" , "dex" ]
if ( args . type == "weapon" )
args . prefillModifiers . modifier -= 10
else if ( args . type == "characteristic" )
{
if ( applicableCharacteristics . includes ( args . item ) )
args . prefillModifiers . modifier -= 10
}
else if ( args . type == "skill" )
{
2021-07-15 14:28:19 +02:00
if ( applicableCharacteristics . includes ( args . item . characteristic . value ) )
2021-02-12 15:21:58 +01:00
args . prefillModifiers . modifier -= 10
} ` ,
"otherEffects" : [ "blight" , "wounded" ]
}
}
} ,
"flux" : {
label : "Intoxication Alimentaire" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"symptom" : true
}
}
} ,
"lingering" : {
label : "Persistant" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"symptom" : true
}
}
} ,
"coughsAndSneezes" : {
label : "Toux et éternuements" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"symptom" : true
}
}
} ,
"gangrene" : {
label : "Gangrène" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "prefillDialog" ,
"symptom" : true ,
"script" : `
if ( args . type == "characteristic" && args . item == "fel" )
{
if ( args . item == "fel" )
args . prefillModifiers . modifier -= 10
}
else if ( args . type == "skill" )
{
2021-07-15 14:28:19 +02:00
if ( args . item . characteristic . value == "fel" )
2021-02-12 15:21:58 +01:00
args . prefillModifiers . modifier -= 10
}
} `
}
}
} ,
"malaise" : {
label : "Malaise" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "prepareData" ,
"symptom" : true ,
"script" : `
if ( game . user . isUniqueGM )
{
let fatigued = args . actor . hasCondition ( "fatigued" )
if ( ! fatigued )
{
args . actor . addCondition ( "fatigued" )
ui . notifications . notify ( "Etat Extenué ajouté à " + args . actor . name + ", qui ne peut pas être enlevé tant que le symptôme Malaise est présent." )
}
}
`
}
}
} ,
"nausea" : {
label : "Nausée" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "rollTest" ,
"symptom" : true ,
"script" : `
2021-07-15 14:28:19 +02:00
if ( this . actor . isOwner && args . test . result . outcome == "failure" )
2021-02-12 15:21:58 +01:00
{
let applicableCharacteristics = [ "ws" , "bs" , "s" , "fel" , "ag" , "t" , "dex" ]
2021-07-15 14:28:19 +02:00
if ( applicableCharacteristics . includes ( args . test . result . characteristic ) )
2021-02-12 15:21:58 +01:00
this . actor . addCondition ( "stunned" )
2021-07-15 14:28:19 +02:00
else if ( args . test . result . skill && applicableCharacteristics . includes ( args . test . result . skill . data . characteristic . value ) )
2021-02-12 15:21:58 +01:00
this . actor . addCondition ( "stunned" )
2021-07-15 14:28:19 +02:00
else if ( args . test . result . weapon )
2021-02-12 15:21:58 +01:00
this . actor . addCondition ( "stunned" )
}
`
}
}
} ,
"pox" : {
label : "Démangeaisons" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "prefillDialog" ,
"symptom" : true ,
"script" : `
if ( args . type == "characteristic" && args . item == "fel" )
args . prefillModifiers . modifier -= 10
else if ( args . type == "skill" )
{
2021-07-15 14:28:19 +02:00
if ( args . item . characteristic . value == "fel" )
2021-02-12 15:21:58 +01:00
args . prefillModifiers . modifier -= 10
}
} `
}
}
} ,
"wounded" : {
label : "Blessé" ,
icon : "modules/wfrp4e-core/icons/diseases/disease.png" ,
transfer : true ,
flags : {
wfrp4e : {
"effectApplication" : "actor" ,
"effectTrigger" : "invoke" ,
"symptom" : true ,
"script" : `
2021-07-15 14:28:19 +02:00
if ( args . actor . isOwner )
2021-02-12 15:21:58 +01:00
{
args . actor . setupSkill ( "Résistance" , { absolute : { difficulty : "average" } } ) . then ( setupData => {
args . actor . basicTest ( setupData ) . then ( test =>
{
2021-07-15 14:28:19 +02:00
if ( test . result . outcome == "failure" )
2021-02-12 15:21:58 +01:00
fromUuid ( "Compendium.wfrp4e-core.diseases.kKccDTGzWzSXCBOb" ) . then ( disease => {
args . actor . createEmbeddedEntity ( "OwnedItem" , disease . data )
} )
} )
} )
} `
}
}
}
}
game . wfrp4e . config . effectApplication = {
"actor" : "Acteur" ,
"equipped" : "Lorsque l'item est équipé" ,
"apply" : "Apliqué lorsqu'une cible est présente" ,
"damage" : "Apliqué lorsqu'un Item fait des dégâts" ,
}
game . wfrp4e . config . applyScope = {
"actor" : "Acteur" ,
"item" : "Item"
}
game . wfrp4e . config . effectTriggers = {
"invoke" : "Appliqué manuellement" ,
"oneTime" : "Immediat" ,
"dialogChoice" : "Choix par un Dialogue" ,
"prefillDialog" : "Dialogue pré-remplie" ,
"prePrepareData" : "Pré-Préparation des données" ,
"prePrepareItems" : "Pré-préparation des Items d'Acteurs" ,
"prepareData" : "Préparation des données" ,
"preWoundCalc" : "Avant le calcul des Blessures" ,
"woundCalc" : "Calcul des Blessures" ,
"preApplyDamage" : "Avant l'application des Dégâts" ,
"applyDamage" : "Application des Dégâts" ,
"preTakeDamage" : "Avant de prendre les Dégâts" ,
"takeDamage" : "Prise des Dégâts" ,
"preApplyCondition" : "Avant l'application d'un Etat" ,
"applyCondition" : "Application d'Etat" ,
"prePrepareItem" : "Avant la préparation d'un Item" ,
"prepareItem" : "Préparation d'Item" ,
"preRollTest" : "Avant le lancement du Test" ,
"preRollWeaponTest" : "Avant le lancement d'un Test d'Arme" ,
"preRollCastTest" : "Avant le lancement d'un Test d'Incantation" ,
"preChannellingTest" : "Avant le lancement d'un Test de Focalisation" ,
"preRollPrayerTest" : "Avant le lancement d'un Test de Prière" ,
"preRollTraitTest" : "Avant le lancement d'un Test de Trait" ,
"rollTest" : "Lancement du Test" ,
"rollIncomeTest" : "Lancement d'un Test de Revenu" ,
"rollWeaponTest" : "Lancement d'un Test d'Arme" ,
"rollCastTest" : "Lancement d'un Test d'Incantation" ,
"rollChannellingTest" : "Lancement d'un Test de Focalisation" ,
"rollPrayerTest" : "Lancement d'un Test de Prière" ,
"rollTraitTest" : "Lancement d'un Test de Trait" ,
"preOpposedAttacker" : "Avant l'opposition de l'Attaquant" ,
"preOpposedDefender" : "Avant l'opposition du Défenseur" ,
"opposedAttacker" : "Opposition de l'Attaquant" ,
"opposedDefender" : "Opposition du Défenseur" ,
"calculateOpposedDamage" : "Calcul des Dếgats suite au Test Opposé" ,
"targetPrefillDialog" : "Pré-remplir le dialogue de la cible" ,
"getInitiativeFormula" : "Initiative" ,
"endTurn" : "Fin du Tour" ,
"endRound" : "Fin du Round" ,
"endCombat" : "Fin du Combat"
}
game . wfrp4e . config . effectPlaceholder = {
"invoke" :
` Cet effet est uniquement appliqué lorsque le bouton "Appliquer" est cliqué.
args :
none ` ,
"oneTime" :
` Cet effet s'applique une seule fois, lorsqu'il s'applique.
args :
actor : l 'acteur qui possède l' effet
` ,
"prefillDialog" :
` Cet effet s'applique avant d'afficher la fenêtre de Lancer et est destiné à changer les valeurs pré-chargées dans la section des bonus/malus.
args :
prefillModifiers : { modifier , difficulty , slBonus , successBonus }
type : string , 'weapon' , 'skill' 'characteristic' , etc .
item : l ' objet du type sus - mentionné
options : Autres détails à propos du test ( options . rest ou options . mutate par exemple )
Exemple :
if ( args . type == "skill" && args . item . name == "Atléthisme" ) args . prefillModifiers . modifier += 10 ` ,
"prePrepareData" :
` Cet effet est appliqué avant le calcul des paramètres et données de l'acteur.
args :
actor : actor who owns the effect
` ,
"prePrepareItems" :
` Cet effet est appliqué avant que les Items soient triés et traités.
actor : l 'acteur qui possède l' effet
` ,
"prepareData" :
` Cet effet est appliqué avant le calcul des paramètres et données de l'acteur.
args :
actor : l 'acteur qui possède l' effet
` ,
"preWoundCalc" :
` Cet effet est apliqué juste avant le calcul des blessures, idéal pour échanger des caractéristiues ou ajouter des multiplicateurs.
actor : l 'acteur qui possède l' effet
sb : Bonus de Force
tb : Bonus d ' Endurance
wpb : Bonus de FM
multiplier : {
sb : Multiplicateur du SB
tb : Multiplicateur du TB
wpb : Multiplicateur du WPB
}
e . g . pour Dur à Cuire : "args.multiplier.tb += 1"
` ,
"woundCalc" :
` Cet effet s'applique après le calcul des Blessures, idéal pour mutiplier le résultat.
args :
actor : l 'acteur qui possède l' effet
wounds : les blessures calculées
e . g . pour Nuée : "wounds *= 5"
` ,
"preApplyDamage" :
` Cet effet s'applique avant d'appliquer les dégats durant un Test Opposé
args :
actor : l ' acteur qui encaisse les dégâts
attacker : l 'acteur qui porte l' attaque
2021-07-15 14:28:19 +02:00
opposedTest : l ' objet qui détaille le Test Opposé
2021-02-12 15:21:58 +01:00
damageType : le type de dégâts sélectionné ( ignorer le Bonus d ' Endurance , les PA , etc ... )
` ,
"applyDamage" :
` Cet effet s'applique après que les dégâts aient été calculés lors d'un Test Opposé, mais avant que les dêgats soient appliqués sur l'acteur.
args :
actor : l ' acteur qui encaisse les dégâts
attacker : l 'acteur qui porte l' attaque
2021-07-15 14:28:19 +02:00
opposedTest : l ' objet qui détaille le Test Opposé
2021-02-12 15:21:58 +01:00
damageType : le type de dégâts sélectionné ( ignorer le Bonus d ' Endurance , les PA , etc ... )
totalWoundLoss : les Blessures perdues après calculs
AP : les données concernant les PA utilisés
updateMsg : le début de la chaîne de caractère pour le message d ' information
messageElements : un tableau de chaîne de caractères listant comment et pourquoi les dommages ont été modifiés
` ,
"preTakeDamage" :
` Cet effet s'applique avant d'encaisser les dommages d'un Test Opposé
args :
actor : l ' acteur qui encaisse les dégâts
attacker : l 'acteur qui porte l' attaque
2021-07-15 14:28:19 +02:00
opposedTest : l ' objet qui détaille le Test Opposé
2021-02-12 15:21:58 +01:00
damageType : le type de dégâts sélectionné ( ignorer le Bonus d ' Endurance , les PA , etc ... )
` ,
"takeDamage" :
` Cet effet s'applique après le calcul des dommages d'un Test Opposé, mais avant que l'acteur ne les encaisse.
args :
actor : l ' acteur qui encaisse les dégâts
attacker : l 'acteur qui porte l' attaque
2021-07-15 14:28:19 +02:00
opposedTest : l ' objet qui détaille le Test Opposé
2021-02-12 15:21:58 +01:00
damageType : le type de dégâts sélectionné ( ignorer le Bonus d ' Endurance , les PA , etc ... )
totalWoundLoss : les Blessures perdues après calculs
AP : les données concernant les PA utilisés
updateMsg : le début de la chaîne de caractère pour le message d ' information
messageElements : un tableau de chaîne de caractères listant comment et pourquoi les dommages ont été modifiés
` ,
"preApplyCondition" :
` Cet effet s'applique avant qu'un état ne s'applique.
args :
effect : l ' état à appliquer
data : {
msg : Le message de tchat à propos de l 'application de l' Etat
< autres données , selon l ' état >
}
` ,
"applyCondition" :
` Cette effet s'applique après que les effets d'un état aient été appliqués.
args :
effect : l ' état à appliquer
data : {
messageData : Le message de tchat à propos de l 'application de l' Etat
< autres données , selon l ' état >
}
` ,
"prePrepareItem" :
` Cet effet est appliqué avant qu'un item soit traité lors de la phase de clacul des données d'acteur.
args :
item : l ' item à traité
` ,
"prepareItem" :
` Cet effet est appliqué après qu'un item soit traité lors de la phase de clacul des données d'acteur.
args :
item : l ' item traité
` ,
"preRollTest" :
` Cet effet est appliqué avant qu'un Test sois calculé.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"preRollWeaponTest" :
` Cett effet s'applique avant que le résultat du test d'arme soit calculé.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"preRollCastTest" :
` Cet effet est appliqué avant que le test d'Incantation soit calculé.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"preChannellingTest" :
` Cet effet s'applique avant que le Test de Focalisation soit calculé.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"preRollPrayerTest" :
` Cet effet est appliqué avant qu'un Test de Prière soit appliqué.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"preRollTraitTest" :
` Cet effet s'applique avant qu'un Trait soit calculé.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"rollTest" :
` Cet effet s'applique après qu'un Test sois calculé.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"rollIncomeTest" :
` Cet effet s'applique après qu'un test de revenu soit effectué.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"rollWeaponTest" :
` Cet effet s'applique après qu'un Test d'Arme soit calculé.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"rollCastTest" :
` Cet effet s'applique après le calcul du Test d'Incantation.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"rollChannellingTest" :
` Cet effet s'applique après le calcul du Test de Focalisation.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"rollPrayerTest" :
` Cet effet s'applique après le calcul du Test de Prière.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"rollTraitTest" :
` Cet effet s'applique après le calcul du Test de Trait.
args :
2021-07-15 14:28:19 +02:00
test : Toutes les donnnées pour évaluer le résultat du test
2021-02-12 15:21:58 +01:00
cardOptions : Les données pour l ' affichage dans le Tchat ( titre , template , etc )
` ,
"preOpposedAttacker" :
` Cet effet s'applique avant le calcul du résultat d'un Test Opposé, en tant qu'attaquant.
args :
attackerTest : le résultat du test de l ' attaquant
defenderTest : le résultat du test du défenseur
2021-07-15 14:28:19 +02:00
opposedTest . result : l ' objet opposedTest . result , avant calcul
2021-02-12 15:21:58 +01:00
` ,
"preOpposedDefender" :
` Cet effet s'applique avant le calcul du résultat d'un Test Opposé, en tant que défenseur.
args :
attackerTest : le résultat du test de l ' attaquant
defenderTest : le résultat du test du défenseur
2021-07-15 14:28:19 +02:00
opposedTest . result : l ' objet opposedTest . result , avant calcul
2021-02-12 15:21:58 +01:00
` ,
"opposedAttacker" :
` Cet effet s'applique après le calcul du résultat d'un Test Opposé, en tant qu'attaquant.
args :
attackerTest : le résultat du test de l ' attaquant
defenderTest : le résultat du test du défenseur
2021-07-15 14:28:19 +02:00
opposedTest . result : l ' objet opposedTest . result , avant calcul
2021-02-12 15:21:58 +01:00
` ,
"opposedDefender" :
` Cet effet s'applique après le calcul du résultat d'un Test Opposé, en tant que défenseur.
args :
attackerTest : le résultat du test de l ' attaquant
defenderTest : le résultat du test du défenseur
2021-07-15 14:28:19 +02:00
opposedTest . result : l ' objet opposedTest . result , avant calcul
2021-02-12 15:21:58 +01:00
` ,
"calculateOpposedDamage" :
` Cet effet s'applique durant les calculs de dégâts d'un Test Opposé. Cet effect est effectué dans le contexte de l'acteur attaquant.
args :
damage : calcul initial des dégâts avant multiplications
damageMultiplier : facteur mutiplicateur basé sur la différence de taille
sizeDiff : la différence numérique en taille , sera utilisé pour ajouter les dégâts / impact
2021-07-15 14:28:19 +02:00
opposedTest . result : détail à propos du Test Opposé
2021-02-12 15:21:58 +01:00
` ,
"getInitiativeFormula" :
` Cet effect s'applque lors de la détermination de l'initiative.
args :
initiative : Valeur d ' intiative calculée
` ,
"targetPrefillDialog" :
` Cet effet est appliqué sur un autre acteur, même si la cible initiale est un acteur, et est destiné à changer les valeurs pré-remplies dans la section des bonus/malus
args :
prefillModifiers : { modifier , difficulty , slBonus , successBonus }
type : string , 'weapon' , 'skill' 'characteristic' , etc .
item : l ' item du type sus - mentionné
options : autres détails à propos du test ( options . rest ou options . mutate par exemple )
Example :
if ( args . type == "skill" && args . item . name == "Atléthisme" ) args . prefillModifiers . modifier += 10 ` ,
"endTurn" :
` Cet effet s'applique à la fin du tour de l'acteur
args :
combat : combat actuel
` ,
"endRound" :
` Cet effet s'execute à la fin du round.
args :
combat : combat actuel
` ,
"endCombat" :
` Cet effet s'applique lorsque le combat se termine
args :
combat : combat actuel
` ,
"this" :
`
Tout les effets ont accès à :
this . actor : l 'acteur executant l' effet
this . effect : l ' effet à executer
this . item : l 'item qui possède l' effet , si l 'effet vient d' un item `
}
}
}
2021-05-27 12:20:50 +02:00
/************************************************************************************/
static perform _ogrekingdom _patch ( ) {
WFRP4E . speciesSkills [ "ogre" ] = [
"Résistance à l'alcool" ,
"Calme" ,
"Résistance" ,
2021-05-30 19:41:55 +02:00
"Pari" ,
2021-05-27 12:20:50 +02:00
"Intimidation" ,
"Langue (Au choix)" ,
"Langue (Grumbarth)" ,
"Langue (Mootland)" ,
"Savoir (Ogres)" ,
"Corps à corps (Base)" ,
"Corps à corps (Bagarre)" ,
"Métier (Cuisiner)" ,
]
WFRP4E . speciesTalents [ "ogre" ] = [
"Sens aiguisé (Odorat), Sens aiguisé (Goût)" ,
"Résistance (Mutation), Obstiné" ,
"Vision nocturne" ,
"Très résistant, Très fort" ,
"Seconde vue, Sixième sens" ,
"Trait - Morsure" ,
2021-05-30 19:41:55 +02:00
"Trait - Taille (Grande)" ,
2021-05-27 12:20:50 +02:00
"Psychologie - Faim d'Ogre" ,
"Psychologie - Met favori (Cible)" ,
"Trait de tribu d'ogre (Au choix)" ,
0
]
}
/************************************************************************************/
2021-02-12 15:21:58 +01:00
static perform _rnhd _patch ( ) {
2021-05-06 21:51:06 +02:00
game . wfrp4e . config . species [ 'gnome' ] = 'Gnome' ;
2021-02-12 15:21:58 +01:00
game . wfrp4e . config . speciesSkills [ "gnome" ] = [
"Focalisation (Ulgu)" ,
"Charme" ,
"Résistance à l'alcool" ,
"Esquive" ,
"Divertissement (Au choix)" ,
2021-05-10 19:41:24 +02:00
"Ragot" ,
2021-02-12 15:21:58 +01:00
"Marchandage" ,
"Langue (Ghassally)" ,
"Langue (Magick)" ,
"Langue (Wastelander)" ,
"Survie en extérieur" ,
"Discrétion (Au choix)"
] ;
game . wfrp4e . config . speciesTalents [ "gnome" ] = [
"Insignifiant, Imprégné avec Uglu" ,
2021-05-10 19:41:24 +02:00
"Chanceux, Imitation" ,
2021-02-12 15:21:58 +01:00
"Vision Nocturne" ,
"Pêcheur, Lire/Ecrire" ,
"Seconde Vue, Sixième Sens" ,
"Petit" ,
0
] ;
}
}