Compare commits
31 Commits
fvtt-mourn
...
v10
Author | SHA1 | Date | |
---|---|---|---|
e840b70ac9 | |||
03b8779862 | |||
580a2ccaba | |||
699dba5511 | |||
aac552102a | |||
4762dc33ac | |||
0a030460e4 | |||
ed2dc58680 | |||
9c20f277ea | |||
2a8617d781 | |||
91ad26730a | |||
e1816b3dd7 | |||
c48401a199 | |||
f487908ecd | |||
e9dc31ada1 | |||
e504427dbb | |||
6aa63f9a98 | |||
861aa19637 | |||
ddb3f9dee1 | |||
da074d6ea1 | |||
1c0c722bd0 | |||
fef42b7093 | |||
a63ec19362 | |||
a26af23c9c | |||
983bc6a2ed | |||
da6d6584c4 | |||
f08ec8eaff | |||
c34bfbf229 | |||
e7de42cf16 | |||
0f2348fec6 | |||
98ccd8fde1 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.history/
|
23
README.md
23
README.md
@ -1,4 +1,23 @@
|
||||
# fvtt-mournblade
|
||||
# Système Foundry pour Mournblade (French RPG, Titam France/Sombres Projets)
|
||||
|
||||
FoundryVTT system for Mournblade from Sombres Projets
|
||||
## EN
|
||||
|
||||
Unofficial system for Mournblade (French version from Titam France).
|
||||
|
||||
Books are mandatory to play and are available at : http://www.titam-france.fr
|
||||
|
||||
## FR
|
||||
|
||||
Système non-officiel pour le JDR Mournblade (Titam France).
|
||||
|
||||
Ce système a été autorisé par Le Département des Sombres Projets, merci à eux !
|
||||
|
||||
Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http://www.titam-france.fr
|
||||
|
||||
# Credits
|
||||
|
||||
Mournblade, le jeu de rôle de Sword & Sorcery, is a property of Titam France/Sombres Projets.
|
||||
|
||||
# Developmement
|
||||
|
||||
LeRatierBretonnien
|
||||
|
BIN
assets/ui/landing_page_mournblade.webp
Normal file
BIN
assets/ui/landing_page_mournblade.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 380 KiB |
201
lang/en.json
Normal file
201
lang/en.json
Normal file
@ -0,0 +1,201 @@
|
||||
{
|
||||
"Adresse": "Agility",
|
||||
"Clairvoyance": "Clarity",
|
||||
"MNBL.abilities": "Gifts/Pacts",
|
||||
"MNBL.activatedrunes": "Activated Runes",
|
||||
"MNBL.addpredilection": "Add a specialization",
|
||||
"MNBL.aimingbonus": "Aiming Bonus",
|
||||
"MNBL.alignement": "Alignment",
|
||||
"MNBL.all": "All",
|
||||
"MNBL.allegiance": "Allegiance",
|
||||
"MNBL.applydamage": "Apply damage/bonus/penalty",
|
||||
"MNBL.aspect": "Aspect",
|
||||
"MNBL.Assaut": "Smite",
|
||||
"MNBL.attack": "Attack",
|
||||
"MNBL.attackcapacity": "Offensive Ability",
|
||||
"MNBL.attackmountbonus": "Mounted attacker vs ground defender (+5)",
|
||||
"MNBL.attacks": "Attacks",
|
||||
"MNBL.attribut": "Attribute",
|
||||
"MNBL.attributes": "Attributes",
|
||||
"MNBL.automalus": "Auto Penalty",
|
||||
"MNBL.base": "Base",
|
||||
"MNBL.beastslords": "Beast Lords",
|
||||
"MNBL.bio": "Bio & Notes",
|
||||
"MNBL.bonus": "Bonus",
|
||||
"MNBL.candoublebonusskill": "Bonuses can be doubled (cf. Profession)",
|
||||
"MNBL.chaos": "Chaos",
|
||||
"MNBL.chaotictraits": "Chaotic Traits",
|
||||
"MNBL.charge": "Charge",
|
||||
"MNBL.consumed": "Consumed",
|
||||
"MNBL.contain": "Contain the opponent",
|
||||
"MNBL.creatureresourcecost": "Resource Cost (creatures)",
|
||||
"MNBL.current": "Current",
|
||||
"MNBL.currentmax": "Current Max",
|
||||
"MNBL.damage": "Damage",
|
||||
"MNBL.damagebonus": "Damage Bonus",
|
||||
"MNBL.defense": "Defense",
|
||||
"MNBL.defensebonus": "Defense Bonus",
|
||||
"MNBL.defensecapacity": "Defensive Ability",
|
||||
"MNBL.dice": "Dice",
|
||||
"MNBL.difficulty": "Difficulty",
|
||||
"MNBL.dirtyattack": "Cheap Shot",
|
||||
"MNBL.disadvantagepositions": "Disadvantageous positions (Max bonus +15)",
|
||||
"MNBL.disarm": "Disarm",
|
||||
"MNBL.doubleD20": "Double d20 (1 Shard Point)",
|
||||
"MNBL.dramaticfailure": "Dramatic Failure",
|
||||
"MNBL.duration": "Duration",
|
||||
"MNBL.easy": "Easy (5)",
|
||||
"MNBL.eclat": "Shard",
|
||||
"MNBL.elementslords": "Elemental Lords",
|
||||
"MNBL.equipmentactions": "Equipment/Actions",
|
||||
"MNBL.equipments": "Equipments",
|
||||
"MNBL.equipped": "Equipped",
|
||||
"MNBL.exp": "Experience",
|
||||
"MNBL.eyes": "Eyes",
|
||||
"MNBL.failure": "Failure",
|
||||
"MNBL.feint": "Feint",
|
||||
"MNBL.flee": "Flee",
|
||||
"MNBL.formula": "Formula",
|
||||
"MNBL.genre": "Gender",
|
||||
"MNBL.gifts": "Gifts",
|
||||
"MNBL.goodadventure": "Good Adventure",
|
||||
"MNBL.hair": "Hair",
|
||||
"MNBL.hard": "Hard (15)",
|
||||
"MNBL.hascover": "Cover",
|
||||
"MNBL.hazardous": "Tricky (20)",
|
||||
"MNBL.health": "Health",
|
||||
"MNBL.healthmalus": "Health Penalty",
|
||||
"MNBL.heavycover": "Almost complete (-10)",
|
||||
"MNBL.heroicsuccess": "Heroic Success",
|
||||
"MNBL.highlanguage": "High Melnibonéan",
|
||||
"MNBL.ignorearmor": "Ignore Armor",
|
||||
"MNBL.ignorehealthmalus": "Ignore Health Penalty",
|
||||
"MNBL.ignoresoulmalus": "Ignore Soul Penalty",
|
||||
"MNBL.immobilize": "Immobilize",
|
||||
"MNBL.insane": "Ridiculous (25)",
|
||||
"MNBL.isdefense": "Defensive",
|
||||
"MNBL.knockout": "Knock Out",
|
||||
"MNBL.law": "Law",
|
||||
"MNBL.legacy": "Legacy",
|
||||
"MNBL.lessthanshort": "Less than short (10)",
|
||||
"MNBL.lethal": "Lethal",
|
||||
"MNBL.level": "Level",
|
||||
"MNBL.lightcover": "Buckler or light (-2)",
|
||||
"MNBL.longmore": "Long and more (25)",
|
||||
"MNBL.longrange": "Long Range",
|
||||
"MNBL.malus": "Penalty",
|
||||
"MNBL.margin": "Margin",
|
||||
"MNBL.medium": "Average (10)",
|
||||
"MNBL.mediumcover": "Pavise or half (-5)",
|
||||
"MNBL.mediummore": "Medium and more (20)",
|
||||
"MNBL.mediumrange": "Medium Range",
|
||||
"MNBL.meleethrowweapon": "Melee and Throwing Weapon",
|
||||
"MNBL.meleeweapon": "Melee Weapon",
|
||||
"MNBL.mode": "Mode",
|
||||
"MNBL.modifier": "Modifiers",
|
||||
"MNBL.modifiertype": "Modifier Type",
|
||||
"MNBL.mounted": "Mounted",
|
||||
"MNBL.nextactionmalus": "Penalty for next action",
|
||||
"MNBL.nextattackbonus": "Bonus for next attack",
|
||||
"MNBL.none": "None",
|
||||
"MNBL.noneunknwon": "None/Unknown",
|
||||
"MNBL.nonlethal": "Non-Lethal",
|
||||
"MNBL.nonlethaldamage": "Non-Lethal Damage",
|
||||
"MNBL.notarget": "No designated target",
|
||||
"MNBL.origin": "Origin",
|
||||
"MNBL.pacts": "Pacts",
|
||||
"MNBL.points": "Points",
|
||||
"MNBL.preciseattack": "Precision Attack",
|
||||
"MNBL.predilections": "Specializations",
|
||||
"MNBL.preferredhand": "Preferred Hand",
|
||||
"MNBL.prerequisites": "Prerequisites",
|
||||
"MNBL.price": "Price",
|
||||
"MNBL.profession": "Profession",
|
||||
"MNBL.pronounced": "Spoken",
|
||||
"MNBL.pronouncedrune": "Spoken Rune",
|
||||
"MNBL.pronouncerune": "Speak the rune",
|
||||
"MNBL.protections": "Protections",
|
||||
"MNBL.puremadness": "Insane (30)",
|
||||
"MNBL.quantity": "Quantity",
|
||||
"MNBL.range": "Range",
|
||||
"MNBL.rarity": "Rarity",
|
||||
"MNBL.registeredmodifiers": "Registered Modifiers",
|
||||
"MNBL.reloadduration": "Reload Time",
|
||||
"MNBL.ressources": "Resources",
|
||||
"MNBL.roll": "Roll",
|
||||
"MNBL.runes": "Runes",
|
||||
"MNBL.runningtarget": "Running target (-5/-10 depending on range)",
|
||||
"MNBL.shootmodifier": "Shooting Modifiers",
|
||||
"MNBL.shootweapon": "Shoot Weapon",
|
||||
"MNBL.shortmore": "Short and more (10)",
|
||||
"MNBL.shortrange": "Short Range",
|
||||
"MNBL.size": "Size",
|
||||
"MNBL.skill": "Skill",
|
||||
"MNBL.skills": "Skills",
|
||||
"MNBL.smallroomtarget": "Target in confined space (+5)",
|
||||
"MNBL.soul": "Soul",
|
||||
"MNBL.soulmalus": "Soul Penalty",
|
||||
"MNBL.soulmultiplier": "Soul Multiplier",
|
||||
"MNBL.soulpoints": "Soul Points",
|
||||
"MNBL.specialactions": "Special Actions",
|
||||
"MNBL.specialweapon": "Special (ability/gift)",
|
||||
"MNBL.speciestrait": "Species Trait",
|
||||
"MNBL.speed": "Speed",
|
||||
"MNBL.success": "Success",
|
||||
"MNBL.target": "Target",
|
||||
"MNBL.targetbelow": "Target below (+5)",
|
||||
"MNBL.targetcantmove": "Target immobilized (+5)",
|
||||
"MNBL.targetdefense": "Opponent's Defense",
|
||||
"MNBL.targetground": "Target on the ground (+5)",
|
||||
"MNBL.targetseeshoot": "Target is aware of the shot",
|
||||
"MNBL.tendancies": "Tendencies",
|
||||
"MNBL.throwweapon": "Throwing Weapon",
|
||||
"MNBL.totalprotection": "Total Protection",
|
||||
"MNBL.traced": "Written",
|
||||
"MNBL.tracedrune": "Written Rune",
|
||||
"MNBL.tracerune": "Write the rune",
|
||||
"MNBL.treasuremoney": "Treasures and Money",
|
||||
"MNBL.twohands": "Two-handed",
|
||||
"MNBL.type": "Type",
|
||||
"MNBL.unarmedtarget": "Unarmed target (+5)",
|
||||
"MNBL.unit": "Unit",
|
||||
"MNBL.use": "Use",
|
||||
"MNBL.usedpredilection": "Used Predilection",
|
||||
"MNBL.value": "Value",
|
||||
"MNBL.weapon": "Weapon",
|
||||
"MNBL.weaponbonusattack": "Handling Bonus (offensive)",
|
||||
"MNBL.weaponbonusdefense": "Handling Bonus (defensive)",
|
||||
"MNBL.weapons": "Weapons",
|
||||
"MNBL.weaponscapacities": "Weapons/Abilities",
|
||||
"MNBL.weapontype": "Weapon Type",
|
||||
"MNBL.weight": "Weight",
|
||||
"Présence": "Presence",
|
||||
"Puissance": "Might",
|
||||
"Trempe": "Mettle",
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"creature": "Creature",
|
||||
"personnage": "Character"
|
||||
},
|
||||
"Item": {
|
||||
"arme": "Weapon",
|
||||
"bouclier": "Shield",
|
||||
"capacite": "Ability",
|
||||
"competence": "Skill",
|
||||
"don": "Gifts",
|
||||
"equipement": "Equipment",
|
||||
"heritage": "Background",
|
||||
"metier": "Profession",
|
||||
"modifier": "Modifier",
|
||||
"monnaie": "Currency",
|
||||
"origine": "Origin",
|
||||
"pacte": "Pacts",
|
||||
"protection": "Protections",
|
||||
"rune": "Rune",
|
||||
"runeeffect": "Rune Effect",
|
||||
"tendance": "Signs of Chaos",
|
||||
"traitchaotique": "Background",
|
||||
"traitespece": "Species Trait"
|
||||
}
|
||||
}
|
||||
}
|
213
lang/fr.json
Normal file
213
lang/fr.json
Normal file
@ -0,0 +1,213 @@
|
||||
{
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"personnage": "Personnage",
|
||||
"creature": "Créature"
|
||||
},
|
||||
"Item": {
|
||||
"arme": "Arme",
|
||||
"competence": "Compétence",
|
||||
"protection": "Protection",
|
||||
"pacte": "Pacte",
|
||||
"traitchaotique": "Trait Chaotique",
|
||||
"monnaie": "Monnaie",
|
||||
"don": "Don",
|
||||
"tendance": "Tendance",
|
||||
"rune": "Rune",
|
||||
"equipement": "Equipement",
|
||||
"capacite": "Capacité",
|
||||
"origine": "Origine",
|
||||
"heritage": "Héritage",
|
||||
"metier": "Métier",
|
||||
"runeeffect": "Effet de Rune",
|
||||
"bouclier": "Bouclier",
|
||||
"modifier": "Modificateur",
|
||||
"traitespece": "Trait d'Espèce"
|
||||
}
|
||||
},
|
||||
"Adresse": "Adresse",
|
||||
"Puissance": "Puissance",
|
||||
"Clairvoyance": "Clairvoyance",
|
||||
"Présence": "Présence",
|
||||
"Trempe": "Trempe",
|
||||
|
||||
"MNBL.assaut": "Assaut",
|
||||
"MNBL.preciseattack": "Attaque Précise",
|
||||
"MNBL.feint": "Feinte",
|
||||
"MNBL.dirtyattack": "Coup Bas",
|
||||
"MNBL.charge": "Charger",
|
||||
"MNBL.contain": "Contenir l'adversaire",
|
||||
"MNBL.disarm": "Désarmer",
|
||||
|
||||
"MNBL.none": "Aucun",
|
||||
"MNBL.lightcover": "Rondache ou léger (-2)",
|
||||
"MNBL.mediumcover": "Pavois ou à moitié (-5)",
|
||||
"MNBL.heavycover": "Quasi complet (-10)",
|
||||
"MNBL.roll": "Jet",
|
||||
"MNBL.defensecapacity": "Capacité défensive",
|
||||
"MNBL.attackcapacity": "Capacité offensive",
|
||||
|
||||
"MNBL.lessthanshort": "Moins que courte (10)",
|
||||
"MNBL.shortmore": "Courte et + (10)",
|
||||
"MNBL.mediummore": "Moyenne et + (20)",
|
||||
"MNBL.longmore": "Longue et + (25)",
|
||||
|
||||
"MNBL.noneunknwon": "Aucune/Inconnue",
|
||||
"MNBL.easy": "Facile (5)",
|
||||
"MNBL.medium": "Moyenne (10)",
|
||||
"MNBL.hard": "Ardue (15)",
|
||||
"MNBL.hazardous": "Hasardeuse (20)",
|
||||
"MNBL.insane": "Insensée (25)",
|
||||
"MNBL.puremadness": "Pure Folie (30)",
|
||||
|
||||
"MNBL.pronouncerune": "Prononcer la rune",
|
||||
"MNBL.tracerune": "Tracer la rune",
|
||||
"MNBL.pronounced": "Prononcée",
|
||||
"MNBL.traced": "Tracée",
|
||||
|
||||
"MNBL.meleeweapon": "Arme de contact",
|
||||
"MNBL.meleethrowweapon": "Arme de contact et de Jet",
|
||||
"MNBL.throwweapon": "Arme de Lancer",
|
||||
"MNBL.shootweapon": "Arme de Tir",
|
||||
"MNBL.specialweapon": "Spécial (capacité/don)",
|
||||
|
||||
"MNBL.all": "Tous",
|
||||
"MNBL.beastslords": "Seigneurs des Bêtes",
|
||||
"MNBL.elementslords": "Seigneurs Elementaires",
|
||||
|
||||
"MNBL.law": "Loi",
|
||||
"MNBL.chaos": "Chaos",
|
||||
"MNBL.level": "Niveau",
|
||||
"MNBL.points": "Points",
|
||||
"MNBL.aspect": "Aspect",
|
||||
"MNBL.margin": "Marge",
|
||||
"MNBL.goodadventure" : "Bonne Aventure",
|
||||
"MNBL.base": "Base",
|
||||
"MNBL.current": "Actuelle",
|
||||
"MNBL.alignement" : "Alignement",
|
||||
"MNBL.eclat": "Eclat",
|
||||
"MNBL.exp": "Expérience",
|
||||
"MNBL.attributes": "Attributs",
|
||||
"MNBL.skills": "Compétences",
|
||||
"MNBL.abilities": "Dons/Pactes",
|
||||
"MNBL.equipmentactions": "Equipements/Actions",
|
||||
"MNBL.bio": "Bio&Notes",
|
||||
"MNBL.health": "Santé",
|
||||
"MNBL.bonus": "Bonus",
|
||||
"MNBL.malus": "Malus",
|
||||
"MNBL.nonlethal": "Non Létaux",
|
||||
"MNBL.lethal": "Létaux",
|
||||
"MNBL.automalus" : "Malus Auto",
|
||||
"MNBL.soul": "Ame",
|
||||
"MNBL.currentmax": "Max Actuel",
|
||||
"MNBL.consumed": "Consommé",
|
||||
"MNBL.damagebonus": "B. Dégats",
|
||||
"MNBL.speed": "Vitesse",
|
||||
"MNBL.defense": "Défense",
|
||||
"MNBL.totalprotection": "Protection Totale",
|
||||
"MNBL.modifier": "Modificateurs",
|
||||
"MNBL.type": "Type",
|
||||
"MNBL.value": "Valeur",
|
||||
"MNBL.gifts": "Dons",
|
||||
"MNBL.allegiance": "Allégeance",
|
||||
"MNBL.pacts": "Pactes",
|
||||
"MNBL.runes": "Runes",
|
||||
"MNBL.highlanguage": "Haut Parler",
|
||||
"MNBL.difficulty": "Difficulté",
|
||||
"MNBL.tendancies": "Tendances",
|
||||
"MNBL.chaotictraits": "Traits Chaotique",
|
||||
"MNBL.activatedrunes": "Runes actives",
|
||||
"MNBL.mode": "Mode",
|
||||
"MNBL.duration": "Durée",
|
||||
"MNBL.treasuremoney": "Richesses et Argent",
|
||||
"MNBL.quantity": "Quantité",
|
||||
"MNBL.unit": "Unité",
|
||||
"MNBL.specialactions": "Actions spéciales",
|
||||
"MNBL.knockout": "Assomer",
|
||||
"MNBL.flee": "Fuir",
|
||||
"MNBL.immobilize": "Immobiliser",
|
||||
"MNBL.mounted": "Monté",
|
||||
"MNBL.weapons": "Armes",
|
||||
"MNBL.attack": "Attaque",
|
||||
"MNBL.damage": "Dégats",
|
||||
"MNBL.protections": "Protections",
|
||||
"MNBL.equipments": "Equipements",
|
||||
"MNBL.origin": "Origine",
|
||||
"MNBL.legacy": "Héritage",
|
||||
"MNBL.profession": "Métier",
|
||||
"MNBL.genre": "Genre",
|
||||
"MNBL.size": "Taille",
|
||||
"MNBL.hair": "Cheveux",
|
||||
"MNBL.eyes": "Yeux",
|
||||
"MNBL.preferredhand": "Main Préférée",
|
||||
"MNBL.weight": "Weight",
|
||||
"MNBL.soulmultiplier": "Multiplicateur d'âme",
|
||||
"MNBL.ignorehealthmalus": "Ignore le malus de santé",
|
||||
"MNBL.ignoresoulmalus": "Ignore le malus d'âme",
|
||||
|
||||
"MNBL.weapon": "Arme",
|
||||
"MNBL.nextattackbonus": "Bonus pour prochaine attaque",
|
||||
"MNBL.nextactionmalus": "Malus au défenseur pour prochaine action",
|
||||
"MNBL.applydamage": "Appliquer les dégats/bonus/malus",
|
||||
"MNBL.attribut": "Attribut",
|
||||
"MNBL.skill": "Compétence",
|
||||
"MNBL.target": "Cible",
|
||||
"MNBL.usedpredilection": "Prédilection utilisée",
|
||||
"MNBL.soulpoints": "Points d'âme",
|
||||
"MNBL.formula": "Formule",
|
||||
"MNBL.dice":"Dé",
|
||||
"MNBL.success": "Succés",
|
||||
"MNBL.failure": "Echec",
|
||||
"MNBL.heroicsuccess": "Succés Héroïque",
|
||||
"MNBL.dramaticfailure": "Echec Dramatique",
|
||||
|
||||
"MNBL.attackmountbonus": "Attaquant monté vs def. au sol (+5)",
|
||||
"MNBL.targetdefense": "Défense adversaire",
|
||||
"MNBL.shootmodifier": "Modificateurs de Tir",
|
||||
"MNBL.aimingbonus": "Bonus de visée",
|
||||
"MNBL.targetseeshoot": "La cible est consciente du tir",
|
||||
"MNBL.notarget": "Pas de cible désignée",
|
||||
"MNBL.runningtarget": "La cible court (-5/-10 selon portée)",
|
||||
"MNBL.hascover": "Couvert",
|
||||
"MNBL.range": "Portée",
|
||||
"MNBL.disadvantagepositions": "Positions désavantageuses (Bonus max +15)",
|
||||
"MNBL.targetground": "Cible au sol (+5)",
|
||||
"MNBL.unarmedtarget": "Cible désarmée (+5)",
|
||||
"MNBL.smallroomtarget": "Cible en espace restreint (+5)",
|
||||
"MNBL.targetcantmove": "Cible immobilisée (+5)",
|
||||
"MNBL.targetbelow": "Cible surplombée (+5)",
|
||||
"MNBL.healthmalus": "Malus de santé",
|
||||
"MNBL.soulmalus": "Malus d'âme",
|
||||
"MNBL.registeredmodifiers": "Modificateurs enregistrés",
|
||||
"MNBL.doubleD20": "Doubler le d20 (1 Point d'Eclat)",
|
||||
|
||||
"MNBL.pronouncedrune": "Rune prononcée",
|
||||
"MNBL.tracedrune": "Rune tracée",
|
||||
"MNBL.equipped": "Equipé",
|
||||
"MNBL.rarity": "Rareté",
|
||||
"MNBL.price": "Prix",
|
||||
"MNBL.modifiertype": "Type de modificateur",
|
||||
"MNBL.prerequisites": "Prérequis",
|
||||
"MNBL.predilections": "Prédilections",
|
||||
"MNBL.candoublebonusskill": "Les bonus de Bonne Aventure et d'Eclat peuvent être doublés (cf. Métier)",
|
||||
"MNBL.addpredilection": "Ajouter une prédilection",
|
||||
"MNBL.defensebonus": "Bonus de défense",
|
||||
"MNBL.nonlethaldamage": "Dégâts non létaux",
|
||||
"MNBL.weapontype": "Type d'arme",
|
||||
"MNBL.weaponbonusattack": "Bonus de maniement (offensif)",
|
||||
"MNBL.weaponbonusdefense": "Bonus de maniement (défensif)",
|
||||
"MNBL.isdefense": "Défensive",
|
||||
"MNBL.twohands": "A deux mains",
|
||||
"MNBL.ignorearmor": "Ignore l'armure",
|
||||
"MNBL.creatureresourcecost": "Cout en Ressources (créatures)",
|
||||
"MNBL.shortrange": "Portée courte",
|
||||
"MNBL.mediumrange":"Portée moyenne",
|
||||
"MNBL.longrange":"Portée longue",
|
||||
"MNBL.reloadduration": "Temps de rechargement",
|
||||
"MNBL.attacks": "Attaques",
|
||||
"MNBL.ressources": "Ressources",
|
||||
"MNBL.weaponscapacities": "Armes/Capacités",
|
||||
"MNBL.use": "Utiliser",
|
||||
"MNBL.speciestrait": "Trait d'espèce"
|
||||
|
||||
}
|
@ -12,7 +12,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade/templates/actor-sheet.html",
|
||||
width: 640,
|
||||
@ -25,7 +25,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let actorData = objectData
|
||||
|
||||
let formData = {
|
||||
@ -40,17 +40,30 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills(),
|
||||
armes: duplicate(this.actor.getWeapons()),
|
||||
protections: duplicate(this.actor.getArmors()),
|
||||
dons: duplicate(this.actor.getDons()),
|
||||
armes: foundry.utils.duplicate(this.actor.getWeapons()),
|
||||
protections: foundry.utils.duplicate(this.actor.getArmors()),
|
||||
dons: foundry.utils.duplicate(this.actor.getDons()),
|
||||
pactes: foundry.utils.duplicate(this.actor.getPactes()),
|
||||
alignement: this.actor.getAlignement(),
|
||||
tendances:duplicate(this.actor.getTendances()),
|
||||
runes:duplicate(this.actor.getRunes()),
|
||||
origine: duplicate(this.actor.getOrigine() || {}),
|
||||
heritage: duplicate(this.actor.getHeritage() || {}),
|
||||
metier: duplicate(this.actor.getMetier() || {}),
|
||||
aspect: this.actor.getAspect(),
|
||||
marge: this.actor.getMarge(),
|
||||
tendances:foundry.utils.duplicate(this.actor.getTendances()),
|
||||
runes:foundry.utils.duplicate(this.actor.getRunes()),
|
||||
traitsChaotiques:foundry.utils.duplicate(this.actor.getTraitsChaotiques()),
|
||||
traitsEspeces: foundry.utils.duplicate(this.actor.getTraitsEspeces()),
|
||||
origine: foundry.utils.duplicate(this.actor.getOrigine() || {}),
|
||||
heritage: foundry.utils.duplicate(this.actor.getHeritage() || {}),
|
||||
metier: foundry.utils.duplicate(this.actor.getMetier() || {}),
|
||||
combat: this.actor.getCombatValues(),
|
||||
equipements: duplicate(this.actor.getEquipments()),
|
||||
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
|
||||
modifiers: foundry.utils.duplicate(this.actor.getModifiers()),
|
||||
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
|
||||
runeEffects: foundry.utils.duplicate(this.actor.getRuneEffects()),
|
||||
config: game.system.mournblade.config,
|
||||
protectionTotal: this.actor.getProtectionTotal(),
|
||||
santeMalus: this.actor.getStatusMalus(),
|
||||
ameMalus: this.actor.getAmeMalus(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
@ -92,7 +105,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
let value = ev.currentTarget.value
|
||||
this.actor.editItemField(itemId, itemType, itemField, dataType, value)
|
||||
})
|
||||
|
||||
|
||||
html.find('.quantity-minus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity( li.data("item-id"), -1 );
|
||||
@ -123,12 +136,45 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeOffensif(armeId)
|
||||
})
|
||||
html.find('.roll-assomer').click((event) => {
|
||||
this.actor.rollAssomer()
|
||||
})
|
||||
html.find('.roll-fuir').click((event) => {
|
||||
this.actor.rollFuir()
|
||||
})
|
||||
html.find('.roll-immobiliser').click((event) => {
|
||||
this.actor.rollImmobiliser()
|
||||
})
|
||||
html.find('.roll-arme-special').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeSpecial(armeId)
|
||||
})
|
||||
|
||||
html.find('.roll-arme-degats').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeDegats(armeId)
|
||||
})
|
||||
|
||||
html.find('.quantity-modify').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const value = Number($(event.currentTarget).data("quantite-value"))
|
||||
this.actor.incDecQuantity( li.data("item-id"), value );
|
||||
})
|
||||
html.find('.item-add').click((event) => {
|
||||
const itemType = $(event.currentTarget).data("type")
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||
})
|
||||
html.find('.sante-modify').click((event) => {
|
||||
const santeType = $(event.currentTarget).data("type")
|
||||
const value = $(event.currentTarget).data("value")
|
||||
this.actor.incDecSante(santeType, value, false)
|
||||
})
|
||||
html.find('.ame-modify').click((event) => {
|
||||
const value = $(event.currentTarget).data("value")
|
||||
this.actor.incDecAme(value)
|
||||
})
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
|
@ -31,7 +31,7 @@ export class MournbladeActor extends Actor {
|
||||
if (data instanceof Array) {
|
||||
return super.create(data, options);
|
||||
}
|
||||
// If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
|
||||
// If the created actor has items (only applicable to foundry.utils.duplicated actors) bypass the new actor creation logic
|
||||
if (data.items) {
|
||||
let actor = super.create(data, options);
|
||||
return actor;
|
||||
@ -41,29 +41,42 @@ export class MournbladeActor extends Actor {
|
||||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills")
|
||||
data.items = skills.map(i => i.toObject())
|
||||
}
|
||||
if (data.type == 'pnj') {
|
||||
if (data.type == 'creature') {
|
||||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills-creatures")
|
||||
data.items = skills.map(i => i.toObject())
|
||||
data.items.push({ name: "Arme naturelle 1", type: 'arme', img: "systems/fvtt-mournblade/assets/icons/arme.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
|
||||
data.items.push({ name: "Arme naturelle 2", type: 'arme', img: "systems/fvtt-mournblade/assets/icons/arme.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
|
||||
}
|
||||
|
||||
|
||||
return super.create(data, options);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
setModifier(name, type, value) {
|
||||
this.createEmbeddedDocuments("Item", [{ type: "modifier", name: name, system: { modifiertype: type, value: value } }])
|
||||
ui.notifications.info("Le modificateur " + name + " a été ajouté à " + this.name + ".")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareArme(arme) {
|
||||
arme = duplicate(arme)
|
||||
arme = foundry.utils.duplicate(arme)
|
||||
let combat = this.getCombatValues()
|
||||
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
|
||||
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
arme.system.isMelee = true
|
||||
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
arme.system.attrKey = "pui"
|
||||
arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal
|
||||
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
|
||||
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + combat.attaqueModifier
|
||||
if (arme.system.isdefense) {
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
|
||||
}
|
||||
}
|
||||
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
|
||||
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
|
||||
arme.system.isDistance = true
|
||||
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
|
||||
arme.system.attrKey = "adr"
|
||||
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
|
||||
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + combat.attaqueModifier
|
||||
arme.system.totalDegats = arme.system.degats
|
||||
if (arme.system.isdefense) {
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
|
||||
@ -71,6 +84,19 @@ export class MournbladeActor extends Actor {
|
||||
}
|
||||
return arme
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
prepareBouclier(bouclier) {
|
||||
bouclier = foundry.utils.duplicate(bouclier)
|
||||
let combat = this.getCombatValues()
|
||||
bouclier.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
bouclier.system.attrKey = "pui"
|
||||
bouclier.system.totalDegats = bouclier.system.degats + "+" + combat.bonusDegatsTotal
|
||||
bouclier.system.totalOffensif = this.system.attributs.pui.value + bouclier.system.competence.system.niveau
|
||||
bouclier.system.isdefense = true
|
||||
bouclier.system.bonusmaniementoff = 0
|
||||
bouclier.system.totalDefensif = combat.defenseTotal + bouclier.system.competence.system.niveau + bouclier.system.bonusdefense
|
||||
return bouclier
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getWeapons() {
|
||||
@ -79,28 +105,66 @@ export class MournbladeActor extends Actor {
|
||||
if (arme.type == "arme") {
|
||||
armes.push(this.prepareArme(arme))
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
armes.push(this.prepareBouclier(arme))
|
||||
}
|
||||
}
|
||||
MournbladeUtility.sortArrayObjectsByName(armes)
|
||||
return armes
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDons() {
|
||||
return this.items.filter(item => item.type == "don")
|
||||
getModifiersForRoll() {
|
||||
let modifiers = []
|
||||
for (let mod of this.items) {
|
||||
if (mod.type == "modifier" && mod.system.modifiertype == "roll") {
|
||||
let modObj = mod.toObject()
|
||||
modObj.system.apply = true
|
||||
modifiers.push(modObj)
|
||||
}
|
||||
}
|
||||
MournbladeUtility.sortArrayObjectsByName(modifiers)
|
||||
return modifiers
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getItemSorted(types) {
|
||||
let items = this.items.filter(item => types.includes(item.type)) || []
|
||||
MournbladeUtility.sortArrayObjectsByName(items)
|
||||
return items
|
||||
}
|
||||
getDons() {
|
||||
return this.getItemSorted(["don"])
|
||||
}
|
||||
getPactes() {
|
||||
return this.getItemSorted(["pacte"])
|
||||
}
|
||||
getTendances() {
|
||||
return this.items.filter(item => item.type == "tendance")
|
||||
return this.getItemSorted(["tendance"])
|
||||
}
|
||||
getRunes() {
|
||||
return this.items.filter(item => item.type == "rune")
|
||||
return this.getItemSorted(["rune"])
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getEquipments() {
|
||||
return this.items.filter(item => item.type == "equipement")
|
||||
return this.getItemSorted(["equipement"])
|
||||
}
|
||||
getModifiers() {
|
||||
return this.getItemSorted(["modifier"])
|
||||
}
|
||||
getTraitsChaotiques() {
|
||||
return this.getItemSorted(["traitchaotique"])
|
||||
}
|
||||
getTraitsEspeces() {
|
||||
return this.getItemSorted(["traitespece"])
|
||||
}
|
||||
getMonnaies() {
|
||||
return this.getItemSorted(["monnaie"])
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getArmors() {
|
||||
return this.items.filter(item => item.type == "protection")
|
||||
return this.getItemSorted(["protection"])
|
||||
}
|
||||
getRuneEffects() {
|
||||
return this.getItemSorted(["runeeffect"])
|
||||
}
|
||||
getOrigine() {
|
||||
return this.items.find(item => item.type == "origine")
|
||||
@ -115,7 +179,7 @@ export class MournbladeActor extends Actor {
|
||||
getSkills() {
|
||||
let comp = []
|
||||
for (let item of this.items) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
if (item.type == "competence") {
|
||||
item.system.attribut1total = item.system.niveau + (this.system.attributs[item.system.attribut1]?.value || 0)
|
||||
item.system.attribut2total = item.system.niveau + (this.system.attributs[item.system.attribut2]?.value || 0)
|
||||
@ -131,20 +195,28 @@ export class MournbladeActor extends Actor {
|
||||
comp.push(item)
|
||||
}
|
||||
}
|
||||
return comp.sort(function (a, b) {
|
||||
let fa = a.name.toLowerCase(),
|
||||
fb = b.name.toLowerCase();
|
||||
if (fa < fb) {
|
||||
return -1;
|
||||
}
|
||||
if (fa > fb) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
})
|
||||
MournbladeUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getProtectionTotal() {
|
||||
let protection = 0
|
||||
for (let item of this.items) {
|
||||
if (item.type == "protection" && item.system.equipped) {
|
||||
protection += item.system.protection
|
||||
}
|
||||
}
|
||||
return protection
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getAspect() {
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? this.system.balance.loi : this.system.balance.chaos
|
||||
}
|
||||
getMarge() {
|
||||
return Math.abs(this.system.balance.loi - this.system.balance.chaos)
|
||||
}
|
||||
getAlignement() {
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? "loyal" : "chaotique"
|
||||
}
|
||||
@ -161,7 +233,14 @@ export class MournbladeActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCombatValues() {
|
||||
let defenserModifier = 0
|
||||
this.items.filter(item => item.type == "modifier" && item.system.modifiertype == "defense").map(e => defenserModifier += e.system.value)
|
||||
let attaqueModifier = 0
|
||||
this.items.filter(item => item.type == "modifier" && item.system.modifiertype == "attaque").map(e => attaqueModifier += e.system.value)
|
||||
|
||||
let combat = {
|
||||
defenserModifier,
|
||||
attaqueModifier,
|
||||
initBase: this.system.attributs.adr.value,
|
||||
initTotal: this.system.attributs.adr.value + this.system.combat.initbonus,
|
||||
bonusDegats: this.getBonusDegats(),
|
||||
@ -169,10 +248,11 @@ export class MournbladeActor extends Actor {
|
||||
vitesseBase: this.getVitesseBase(),
|
||||
vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus,
|
||||
defenseBase: this.getDefenseBase(),
|
||||
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus
|
||||
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + defenserModifier
|
||||
}
|
||||
return combat
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareBaseData() {
|
||||
}
|
||||
@ -209,20 +289,57 @@ export class MournbladeActor extends Actor {
|
||||
getItemById(id) {
|
||||
let item = this.items.find(item => item.id == id);
|
||||
if (item) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equipItem(itemId) {
|
||||
let item = this.items.find(item => item.id == itemId);
|
||||
if (item && item.system.data) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
if (item?.system) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped }
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getStatusMalus() {
|
||||
if (this.system.biodata.ignoresantemalus) {
|
||||
return 0
|
||||
}
|
||||
|
||||
let malusL = 0
|
||||
let malusNL = 0
|
||||
if (this.system.sante.base - this.system.sante.letaux < 10) {
|
||||
malusL = -2
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.letaux < 5) {
|
||||
malusL = -5
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.nonletaux < 10) {
|
||||
malusNL = -2
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.nonletaux < 5) {
|
||||
malusNL = -5
|
||||
}
|
||||
return Math.min(malusL, malusNL)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getAmeMalus() {
|
||||
if (this.system.biodata.ignoreamemalus) {
|
||||
return 0
|
||||
}
|
||||
let malusA = 0
|
||||
if (this.system.ame.currentmax - this.system.ame.value < 10) {
|
||||
malusA = -2
|
||||
}
|
||||
if (this.system.ame.currentmax - this.system.ame.value < 5) {
|
||||
malusA = -5
|
||||
}
|
||||
return malusA
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
editItemField(itemId, itemType, itemField, dataType, value) {
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
@ -238,6 +355,44 @@ export class MournbladeActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incDecSante(type, value, applyArmure = true) {
|
||||
value = Number(value)
|
||||
if (value && applyArmure) {
|
||||
let protection = this.getProtectionTotal()
|
||||
value -= protection
|
||||
value = Math.max(0, Number(value))
|
||||
}
|
||||
if (value) {
|
||||
let newSante = foundry.utils.duplicate(this.system.sante)
|
||||
newSante[type] += Number(value)
|
||||
newSante[type] = Math.max(0, newSante[type])
|
||||
if (newSante[type] > this.system.sante.base) {
|
||||
value -= this.system.sante.base - newSante[type]
|
||||
newSante[type] = this.system.sante.base
|
||||
} else {
|
||||
value = 0
|
||||
}
|
||||
newSante[type] = Math.min(newSante[type], newSante.base)
|
||||
if (value && type == "nonletaux") {
|
||||
newSante["letaux"] += value
|
||||
}
|
||||
this.update({ 'system.sante': newSante })
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incDecAme(value) {
|
||||
value = Number(value)
|
||||
if (value) {
|
||||
let newAme = foundry.utils.duplicate(this.system.ame)
|
||||
newAme.value += Number(value)
|
||||
newAme.value = Math.max(0, newAme.value)
|
||||
newAme.value = Math.min(newAme.value, newAme.currentmax)
|
||||
this.update({ 'system.ame': newAme })
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonneAventure() {
|
||||
return this.system.bonneaventure.actuelle
|
||||
@ -268,13 +423,13 @@ export class MournbladeActor extends Actor {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
subPointsAme(runeMode, value) {
|
||||
let ame = duplicate(this.system.ame)
|
||||
if(runeMode == "prononcer") {
|
||||
ame.value -= value
|
||||
let ame = foundry.utils.duplicate(this.system.ame)
|
||||
if (runeMode == "prononcer") {
|
||||
ame.value += value
|
||||
} else {
|
||||
ame.currentmax -= value
|
||||
}
|
||||
this.update( {'system.ame': ame})
|
||||
this.update({ 'system.ame': ame })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -295,6 +450,9 @@ export class MournbladeActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonusDegats() {
|
||||
if (this.type == "creature") {
|
||||
return 0
|
||||
}
|
||||
return __degatsBonus[this.system.attributs.pui.value]
|
||||
}
|
||||
|
||||
@ -311,13 +469,13 @@ export class MournbladeActor extends Actor {
|
||||
getSubActors() {
|
||||
let subActors = [];
|
||||
for (let id of this.system.subactors) {
|
||||
subActors.push(duplicate(game.actors.get(id)));
|
||||
subActors.push(foundry.utils.duplicate(game.actors.get(id)));
|
||||
}
|
||||
return subActors;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async addSubActor(subActorId) {
|
||||
let subActors = duplicate(this.system.subactors);
|
||||
let subActors = foundry.utils.duplicate(this.system.subactors);
|
||||
subActors.push(subActorId);
|
||||
await this.update({ 'system.subactors': subActors });
|
||||
}
|
||||
@ -336,11 +494,10 @@ export class MournbladeActor extends Actor {
|
||||
async incDecQuantity(objetId, incDec = 0) {
|
||||
let objetQ = this.items.get(objetId)
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.quantity + incDec;
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]); // pdates one EmbeddedEntity
|
||||
let newQ = objetQ.system.quantite + incDec;
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCompetence(compId) {
|
||||
return this.items.get(compId)
|
||||
@ -349,15 +506,55 @@ export class MournbladeActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async setPredilectionUsed(compId, predIdx) {
|
||||
let comp = this.items.get(compId)
|
||||
let pred = duplicate(comp.system.predilections)
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
pred[predIdx].used = true
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore( ) {
|
||||
getInitiativeScore() {
|
||||
return Number(this.system.attributs.adr.value) + Number(this.system.combat.initbonus)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getBestDefenseValue() {
|
||||
let defenseList = this.items.filter(item => (item.type == "arme" || item.type == "bouclier") && item.system.equipped)
|
||||
let maxDef = 0
|
||||
let bestArme
|
||||
for (let arme of defenseList) {
|
||||
if (arme.type == "arme" && arme.system.isdefense) {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
if (arme.system.totalDefensif > maxDef) {
|
||||
maxDef = arme.system.totalDefensif
|
||||
bestArme = foundry.utils.duplicate(arme)
|
||||
}
|
||||
}
|
||||
return bestArme
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
depenseRessources(arme) {
|
||||
if (arme.system.nbressources && Number(arme.system.nbressources) > 0) {
|
||||
if (this.type == "creature") {
|
||||
let ressources = foundry.utils.duplicate(this.system.ressources)
|
||||
if (Number(ressources.value) >= Number(arme.system.nbressources)) {
|
||||
ressources.value -= arme.system.nbressources
|
||||
this.update({ 'system.ressources': ressources })
|
||||
ChatMessage.create({
|
||||
content: "L'utilisation de la capacité/arme a dépensé " + arme.system.nbressources + " ressources.",
|
||||
whisper: game.user._id,
|
||||
user: game.user._id
|
||||
});
|
||||
} else {
|
||||
ui.notifications.warn("Points de ressources insuffisants.")
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Les ressources ne sont pas disponibles pour les personnages.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCommonRollData(attrKey = undefined, compId = undefined, compName = undefined) {
|
||||
@ -365,24 +562,34 @@ export class MournbladeActor extends Actor {
|
||||
rollData.alias = this.name
|
||||
rollData.actorImg = this.img
|
||||
rollData.actorId = this.id
|
||||
rollData.tokenId = this.token?.id
|
||||
rollData.img = this.img
|
||||
rollData.canEclatDoubleD20 = this.canEclatDoubleD20()
|
||||
rollData.doubleD20 = false
|
||||
rollData.attributs = MournbladeUtility.getAttributs()
|
||||
rollData.selectDifficulte = true
|
||||
rollData.malusSante = this.getStatusMalus() + this.system.sante.malusmanuel
|
||||
rollData.malusAme = this.getAmeMalus()
|
||||
rollData.modifiers = this.getModifiersForRoll()
|
||||
rollData.desavantages = {}
|
||||
rollData.isMonte = this.system.combat.monte
|
||||
if (rollData.isMonte) {
|
||||
rollData.config.attaques["chargecavalerie"] = "Charge de cavalerie"
|
||||
}
|
||||
|
||||
if (attrKey) {
|
||||
rollData.attrKey = attrKey
|
||||
if (attrKey != "tochoose") {
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp"
|
||||
rollData.attr = duplicate(this.system.attributs[attrKey])
|
||||
rollData.attr = foundry.utils.duplicate(this.system.attributs[attrKey])
|
||||
}
|
||||
}
|
||||
if (compId) {
|
||||
rollData.competence = duplicate(this.items.get(compId) || {})
|
||||
rollData.competence = foundry.utils.duplicate(this.items.get(compId) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
if (compName) {
|
||||
rollData.competence = duplicate(this.items.find( item => item.name.toLowerCase() == compName.toLowerCase()) || {})
|
||||
rollData.competence = foundry.utils.duplicate(this.items.find(item => item.name.toLowerCase() == compName.toLowerCase()) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
return rollData
|
||||
@ -391,7 +598,6 @@ export class MournbladeActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async rollAttribut(attrKey) {
|
||||
let rollData = this.getCommonRollData(attrKey)
|
||||
console.log("RollDatra", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
@ -405,32 +611,114 @@ export class MournbladeActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollRune(runeId) {
|
||||
async rollRune(runeId) {
|
||||
let comp = this.items.find(comp => comp.type == "competence" && comp.name.toLowerCase() == "savoir : runes")
|
||||
if (!comp) {
|
||||
ui.notifications.warn("La compétence Savoirs : Runes n'a pas été trouvée, abandon.")
|
||||
return
|
||||
}
|
||||
let rollData = this.getCommonRollData("cla", undefined, "Savoir : Runes")
|
||||
rollData.rune = duplicate(this.items.get(runeId) || {})
|
||||
rollData.rune = foundry.utils.duplicate(this.items.get(runeId) || {})
|
||||
rollData.difficulte = rollData.rune?.system?.seuil || 0
|
||||
rollData.runemode = "prononcer"
|
||||
rollData.runeame = 1
|
||||
rollData.runeame = 1
|
||||
console.log("runeData", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeOffensif(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
arme = this.prepareArme(arme)
|
||||
let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id)
|
||||
rollData.arme = arme
|
||||
console.log("ARME!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeOffensif(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id)
|
||||
rollData.arme = arme
|
||||
rollData.typeAttaque = "assaut"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
rollData.visee = false
|
||||
rollData.ciblecourt = false
|
||||
rollData.cibleconsciente = false
|
||||
// Do not display difficulte if defense weapon or distance
|
||||
if (rollData.armeDefense || rollData.arme.system.isDistance) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = (rollData.arme.system.isDistance) ? 0 : rollData.difficulte
|
||||
}
|
||||
console.log("ARME!", rollData)
|
||||
this.depenseRessources(arme)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollAssomer() {
|
||||
let rollData = this.getCommonRollData("adr", undefined, "Filouterie")
|
||||
rollData.typeAttaque = "assomer"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = rollData.defender.system.attributs.tre.value * 2
|
||||
}
|
||||
console.log("Assomer!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollFuir() {
|
||||
let rollData = this.getCommonRollData("adr", undefined, "Mouvements")
|
||||
rollData.typeAttaque = "fuir"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
let comp = rollData.defender.items.find(it => it.type == "competence" && it.name.toLowerCase() == "mouvements")
|
||||
rollData.difficulte = rollData.defender.system.attributs.adr.value + ((comp) ? comp.system.niveau : rollData.defender.system.attributs.adr.value)
|
||||
}
|
||||
console.log("Fuir!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollImmobiliser() {
|
||||
let rollData = this.getCommonRollData("pui", undefined, "Mêlée")
|
||||
rollData.typeAttaque = "immobiliser"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = rollData.defenderCombatValues.defenseTotal
|
||||
}
|
||||
console.log("Immobiliser!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeSpecial(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
if (arme) {
|
||||
MournbladeUtility.createChatWithRollMode("GM", {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-display-description.html`, arme)
|
||||
}, arme)
|
||||
this.depenseRessources(arme)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeDegats(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
arme = this.prepareArme(arme)
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
rollData.degatsFormula = arme.system.totalDegats
|
||||
let roll = new Roll(arme.system.totalDegats).roll({ async: false })
|
||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
|
||||
let rollData = {
|
||||
|
@ -12,7 +12,7 @@ export class MournbladeCombat extends Combat {
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore() : 0
|
||||
let roll = new Roll("1d10 + "+initBonus).roll({ async: false})
|
||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"))
|
||||
console.log("Init bonus", initBonus, roll.total)
|
||||
//console.log("Init bonus", initBonus, roll.total)
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: roll.total } ]);
|
||||
}
|
||||
|
||||
|
81
modules/mournblade-config.js
Normal file
81
modules/mournblade-config.js
Normal file
@ -0,0 +1,81 @@
|
||||
|
||||
export class MournbladeConfig {
|
||||
|
||||
static getConfig() {
|
||||
let MOURNBLADE_CONFIG = {
|
||||
|
||||
attaques: {
|
||||
assaut: game.i18n.localize("MNBL.assaut"),
|
||||
precise: game.i18n.localize("MNBL.preciseattack"),
|
||||
feinte: game.i18n.localize("MNBL.feint"),
|
||||
coupbas: game.i18n.localize("MNBL.dirtyattack"),
|
||||
charger: game.i18n.localize("MNBL.charge"),
|
||||
contenir: game.i18n.localize("MNBL.contain"),
|
||||
desarmer: game.i18n.localize("MNBL.disarm")
|
||||
},
|
||||
couverts: {
|
||||
aucun: { name: game.i18n.localize("MNBL.none"), value: 0 },
|
||||
rondache: { name: game.i18n.localize("MNBL.lightcover"), value: -2 },
|
||||
pavois: { name: game.i18n.localize("MNBL.mediumcover"), value: -5 },
|
||||
complet: { name: game.i18n.localize("MNBL.heavycover"), value: -10 },
|
||||
},
|
||||
modifierTypes: {
|
||||
aucun: { name: game.i18n.localize("MNBL.none"), value: 0 },
|
||||
roll: { name: game.i18n.localize("MNBL.roll"), value: 0 },
|
||||
degats: { name: game.i18n.localize("MNBL.damage"), value: 0 },
|
||||
defense: { name: game.i18n.localize("MNBL.defensecapacity"), value: 0 },
|
||||
attaque: { name: game.i18n.localize("MNBL.attackcapacity"), value: 0 },
|
||||
},
|
||||
listeNiveau: {
|
||||
},
|
||||
listeNiveauCreature: {
|
||||
},
|
||||
listePortees: {
|
||||
"10": game.i18n.localize("MNBL.lessthanshort"),
|
||||
"15": game.i18n.localize("MNBL.shortmore"),
|
||||
"20": game.i18n.localize("MNBL.mediummore"),
|
||||
"25": game.i18n.localize("MNBL.longmore")
|
||||
},
|
||||
modificateurOptions: {},
|
||||
pointsAmeOptions: {},
|
||||
difficulteOptions: {
|
||||
"0": game.i18n.localize("MNBL.noneunknwon"),
|
||||
"5": game.i18n.localize("MNBL.easy"),
|
||||
"10": game.i18n.localize("MNBL.medium"),
|
||||
"15": game.i18n.localize("MNBL.hard"),
|
||||
"20": game.i18n.localize("MNBL.hazardous"),
|
||||
"25": game.i18n.localize("MNBL.insane"),
|
||||
"30": game.i18n.localize("MNBL.puremadness")
|
||||
},
|
||||
attributs: {
|
||||
adr: game.i18n.localize("Adresse"), pui: game.i18n.localize("Puissance"),
|
||||
cla: game.i18n.localize("Clairvoyance"), pre: game.i18n.localize("Présence"), tre: game.i18n.localize("Trempe")
|
||||
},
|
||||
lancementRuneOptions: {
|
||||
prononcer: game.i18n.localize("MNBL.pronouncerune"),
|
||||
inscrire: game.i18n.localize("MNBL.tracerune")
|
||||
},
|
||||
effetRuneOptions: {
|
||||
prononcee: game.i18n.localize("MNBL.pronounced"),
|
||||
inscrite: game.i18n.localize("MNBL.traced")
|
||||
},
|
||||
typeArmeOptions: {
|
||||
contact: game.i18n.localize("MNBL.meleeweapon"),
|
||||
contactjet: game.i18n.localize("MNBL.meleethrowweapon"),
|
||||
jet: game.i18n.localize("MNBL.throwweapon"),
|
||||
tir: game.i18n.localize("MNBL.shootweapon"),
|
||||
special: game.i18n.localize("MNBL.specialweapon")
|
||||
},
|
||||
allegeanceOptions: {
|
||||
tous: game.i18n.localize("MNBL.all"),
|
||||
chaos: game.i18n.localize("MNBL.chaos"),
|
||||
loi: game.i18n.localize("MNBL.law"),
|
||||
betes: game.i18n.localize("MNBL.beastslords"),
|
||||
elementaires: game.i18n.localize("MNBL.elementslords")
|
||||
}
|
||||
}
|
||||
|
||||
return MOURNBLADE_CONFIG;
|
||||
}
|
||||
|
||||
};
|
25
modules/mournblade-creature-sheet.js
Normal file
25
modules/mournblade-creature-sheet.js
Normal file
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
* @extends {ActorSheet}
|
||||
*/
|
||||
|
||||
import { MournbladeActorSheet } from "./mournblade-actor-sheet.js";
|
||||
import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class MournbladeCreatureSheet extends MournbladeActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade/templates/creature-sheet.html",
|
||||
width: 640,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: false
|
||||
})
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "item"],
|
||||
template: "systems/fvtt-mournblade/templates/item-sheet.html",
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
@ -48,7 +48,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let itemData = objectData
|
||||
let formData = {
|
||||
title: this.title,
|
||||
@ -63,10 +63,15 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
limited: this.object.limited,
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
||||
config: game.system.mournblade.config,
|
||||
mr: (this.object.type == 'specialisation'),
|
||||
isGM: game.user.isGM
|
||||
}
|
||||
|
||||
if ( objectData.type == "don") {
|
||||
formData.sacrifice = await TextEditor.enrichHTML(this.object.system.sacrifice, {async: true})
|
||||
}
|
||||
//this.options.editable = !(this.object.origin == "embeddedItem");
|
||||
console.log("ITEM DATA", formData, this);
|
||||
return formData;
|
||||
@ -86,7 +91,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
postItem() {
|
||||
let chatData = duplicate(MournbladeUtility.data(this.item));
|
||||
let chatData = foundry.utils.duplicate(MournbladeUtility.data(this.item));
|
||||
if (this.actor) {
|
||||
chatData.actor = { id: this.actor.id };
|
||||
}
|
||||
@ -129,28 +134,28 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
html.find('.edit-prediction').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].name = ev.currentTarget.value
|
||||
this.object.update( { 'data.predilections': pred })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.delete-prediction').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.splice(index,1)
|
||||
this.object.update( { 'data.predilections': pred })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.use-prediction').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].used = ev.currentTarget.checked
|
||||
this.object.update( { 'data.predilections': pred })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('#add-predilection').click(ev => {
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
pred.push( { name: "Nouvelle prédilection", used: false })
|
||||
this.object.update( { 'data.predilections': pred })
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.push( { name: "Nouvelle prédilection", id: randomID(), used: false })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
|
@ -11,8 +11,10 @@ export const defaultItemImg = {
|
||||
predilection: "systems/fvtt-mournblade/assets/icons/predilection.webp",
|
||||
protection: "systems/fvtt-mournblade/assets/icons/protection.webp",
|
||||
rune: "systems/fvtt-mournblade/assets/icons/rune.webp",
|
||||
runeeffect: "systems/fvtt-mournblade/assets/icons/rune.webp",
|
||||
tendance: "systems/fvtt-mournblade/assets/icons/tendance.webp",
|
||||
traitchaotique: "systems/fvtt-mournblade/assets/icons/traitchaotique.webp",
|
||||
traitespece: "systems/fvtt-mournblade/assets/icons/capacite.webp"
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -11,10 +11,11 @@
|
||||
import { MournbladeActor } from "./mournblade-actor.js";
|
||||
import { MournbladeItemSheet } from "./mournblade-item-sheet.js";
|
||||
import { MournbladeActorSheet } from "./mournblade-actor-sheet.js";
|
||||
//import { MournbladeNPCSheet } from "./mournblade-npc-sheet.js";
|
||||
import { MournbladeCreatureSheet } from "./mournblade-creature-sheet.js";
|
||||
import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
import { MournbladeCombat } from "./mournblade-combat.js";
|
||||
import { MournbladeItem } from "./mournblade-item.js";
|
||||
import { MournbladeConfig } from "./mournblade-config.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
@ -45,13 +46,15 @@ Hooks.once("init", async function () {
|
||||
CONFIG.Combat.documentClass = MournbladeCombat
|
||||
CONFIG.Actor.documentClass = MournbladeActor
|
||||
CONFIG.Item.documentClass = MournbladeItem
|
||||
game.system.mournblade = { }
|
||||
game.system.mournblade = {
|
||||
config : MournbladeConfig.getConfig(),
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register sheet application classes
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-mournblade", MournbladeActorSheet, { types: ["personnage"], makeDefault: true })
|
||||
//Actors.registerSheet("fvtt-mournblade", MournbladeNPCSheet, { types: ["npc"], makeDefault: false });
|
||||
Actors.registerSheet("fvtt-mournblade", MournbladeCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-mournblade", MournbladeItemSheet, { makeDefault: true })
|
||||
@ -67,14 +70,32 @@ function welcomeMessage() {
|
||||
whisper: [game.user.id],
|
||||
content: `<div id="welcome-message-Mournblade"><span class="rdd-roll-part">
|
||||
<strong>Bienvenue dans les Jeunes Royaumes de Mournblade !</strong>
|
||||
<p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr</p>
|
||||
<p>Mournblade est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.</p>
|
||||
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
|
||||
` });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async function importDefaultScene() {
|
||||
let exists = game.scenes.find(j => j.name == "Accueil");
|
||||
if (!exists) {
|
||||
const scenes = await MournbladeUtility.loadCompendium("fvtt-mournblade.scenes")
|
||||
let newDocuments = scenes.filter(i => i.name == "Accueil");
|
||||
await game.scenes.documentClass.create(newDocuments);
|
||||
game.scenes.find(i => i.name == "Accueil").activate();
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once("ready", function () {
|
||||
|
||||
game.system.mournblade = {
|
||||
config : MournbladeConfig.getConfig(),
|
||||
}
|
||||
|
||||
MournbladeUtility.ready();
|
||||
// User warning
|
||||
if (!game.user.isGM && game.user.character == undefined) {
|
||||
@ -84,13 +105,22 @@ Hooks.once("ready", function () {
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
// CSS patch for v9
|
||||
if (game.version) {
|
||||
let sidebar = document.getElementById("sidebar");
|
||||
sidebar.style.width = "min-content";
|
||||
if (!game.user.isGM && game.user.character && !game.user.character.prototypeToken.actorLink) {
|
||||
ui.notifications.info("Le token de du joueur n'est pas connecté à l'acteur !");
|
||||
ChatMessage.create({
|
||||
content: "<b>ATTENTION</b> Le token du joueur " + game.user.name + " n'est pas connecté à l'acteur !",
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err=>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
|
||||
importDefaultScene();
|
||||
welcomeMessage();
|
||||
});
|
||||
|
||||
|
@ -5,7 +5,7 @@ export class MournbladeRollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData ) {
|
||||
|
||||
let options = { classes: ["MournbladeDialog"], width: 340, height: 420, 'z-index': 99999 };
|
||||
let options = { classes: ["MournbladeDialog"], width: 340, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-mournblade/templates/roll-dialog-generic.html', rollData);
|
||||
|
||||
return new MournbladeRollDialog(actor, rollData, html, options );
|
||||
@ -52,14 +52,22 @@ export class MournbladeRollDialog extends Dialog {
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
var dialog = this;
|
||||
function onLoad() {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
||||
|
||||
html.find('.apply-modifier').change(async (event) => {
|
||||
let modifierIdx = $(event.currentTarget).data("modifier-idx")
|
||||
let modifier = this.rollData.modifiers[modifierIdx]
|
||||
modifier.system.apply = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#modificateur').change(async (event) => {
|
||||
this.rollData.modificateur = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#typeAttaque').change(async (event) => {
|
||||
this.rollData.typeAttaque = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#difficulte').change(async (event) => {
|
||||
this.rollData.difficulte = Number(event.currentTarget.value)
|
||||
})
|
||||
@ -72,8 +80,41 @@ export class MournbladeRollDialog extends Dialog {
|
||||
html.find('#runeame').change(async (event) => {
|
||||
this.rollData.runeame = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#isMonte').change(async (event) => {
|
||||
this.rollData.desavantages.isMonte = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#cibleausol').change(async (event) => {
|
||||
this.rollData.desavantages.cibleausol = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibledesarmee').change(async (event) => {
|
||||
this.rollData.desavantages.cibledesarmee = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblerestreint').change(async (event) => {
|
||||
this.rollData.desavantages.ciblerestreint = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibleimmobilisée').change(async (event) => {
|
||||
this.rollData.desavantages.cibleimmobilisée = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblesurplomb').change(async (event) => {
|
||||
this.rollData.desavantages.ciblesurplomb = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#doubleD20').change(async (event) => {
|
||||
this.rollData.doubleD20 = event.currentTarget.checked
|
||||
})
|
||||
html.find('#visee').change(async (event) => {
|
||||
this.rollData.visee = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibleconsciente').change(async (event) => {
|
||||
this.rollData.cibleconsciente = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblecourt').change(async (event) => {
|
||||
this.rollData.ciblecourt = event.currentTarget.checked
|
||||
})
|
||||
html.find('#typeCouvert').change(async (event) => {
|
||||
this.rollData.typeCouvert = String(event.currentTarget.value)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
@ -10,13 +10,11 @@ export class MournbladeUtility {
|
||||
static async init() {
|
||||
Hooks.on('renderChatLog', (log, html, data) => MournbladeUtility.chatListeners(html))
|
||||
Hooks.on("getChatLogEntryContext", (html, options) => MournbladeUtility.chatRollMenu(html, options))
|
||||
Hooks.on('renderChatMessage', (message, html, data) => MournbladeUtility.chatMessageHandler(message, html, data))
|
||||
|
||||
Hooks.on("getCombatTrackerEntryContext", (html, options) => {
|
||||
MournbladeUtility.pushInitiativeOptions(html, options);
|
||||
})
|
||||
Hooks.on("dropCanvasData", (canvas, data) => {
|
||||
MournbladeUtility.dropItemOnToken(canvas, data)
|
||||
});
|
||||
|
||||
this.rollDataStore = {}
|
||||
this.defenderStore = {}
|
||||
@ -46,28 +44,28 @@ export class MournbladeUtility {
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getModificateurOptions() {
|
||||
let opt = []
|
||||
for (let i = -15; i <= 15; i++) {
|
||||
opt.push(`<option value="${i}">${i}</option>`)
|
||||
static getActorFromRollData(rollData) {
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
if (rollData.tokenId) {
|
||||
let token = canvas.tokens.placeables.find(t => t.id == rollData.tokenId)
|
||||
if (token) {
|
||||
actor = token.actor
|
||||
}
|
||||
}
|
||||
return opt.concat("\n")
|
||||
return actor
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getPointAmeOptions() {
|
||||
let opt = []
|
||||
for (let i = 1; i <= 20; i++) {
|
||||
opt.push(`<option value="${i}">${i}</option>`)
|
||||
}
|
||||
return opt.concat("\n")
|
||||
static sortArrayObjectsByName(myArray) {
|
||||
myArray.sort((a, b) => {
|
||||
return a.name.localeCompare(b.name);
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getAttributs() {
|
||||
return { adr: "Adresse", pui: "Puissance", cla: "Clairvoyance", pre: "Présence", tre: "Trempe" }
|
||||
return game.system.mournblade.config.attributs
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static pushInitiativeOptions(html, options) {
|
||||
@ -82,6 +80,11 @@ export class MournbladeUtility {
|
||||
static async ready() {
|
||||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills")
|
||||
this.skills = skills.map(i => i.toObject())
|
||||
|
||||
game.system.mournblade.config.listeNiveauSkill = MournbladeUtility.createDirectOptionList(0, 10)
|
||||
game.system.mournblade.config.listeNiveauCreature = MournbladeUtility.createDirectOptionList(0, 35)
|
||||
game.system.mournblade.config.modificateurOptions = MournbladeUtility.createArrayOptionList(-15, 15)
|
||||
game.system.mournblade.config.pointsAmeOptions = MournbladeUtility.createDirectOptionList(0, 20)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -100,19 +103,60 @@ export class MournbladeUtility {
|
||||
static getOptionsStatusList() {
|
||||
return this.optionsStatusList;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getPredilection(comp, predIdx) {
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
return foundry.utils.duplicate(pred[predIdx] || { name: "Error!" })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatMessageHandler(message, html, data) {
|
||||
const chatCard = html.find('.action-section')
|
||||
if (chatCard.length > 0) {
|
||||
// If the user is the message author or the actor owner, proceed
|
||||
const actor = game.actors.get(data.message.speaker.actor)
|
||||
// DEBUG : console.log("FOUND 1!!! ", actor, data.message)
|
||||
if (actor?.isOwner || game.user.isGM) {
|
||||
return
|
||||
}
|
||||
chatCard.hide()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatListeners(html) {
|
||||
|
||||
html.on("click", '.predilection-reroll', async event => {
|
||||
let predIdx = $(event.currentTarget).data("predilection-index")
|
||||
let predIdx = $(event.currentTarget).data("predilection-index")
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
await actor.setPredilectionUsed( rollData.competence._id, predIdx)
|
||||
rollData.competence = duplicate( actor.getCompetence(rollData.competence._id) )
|
||||
MournbladeUtility.rollMournblade(rollData)
|
||||
})
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
|
||||
rollData.competence = foundry.utils.duplicate(actor.getCompetence(rollData.competence._id))
|
||||
rollData.predilectionUsed = MournbladeUtility.getPredilection(rollData.competence, predIdx)
|
||||
await MournbladeUtility.rollMournblade(rollData)
|
||||
})
|
||||
|
||||
html.on("click", '.arme-roll-degats', async event => {
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
MournbladeUtility.rollDegatsFromAttaque(rollData)
|
||||
|
||||
})
|
||||
|
||||
html.on("click", '.arme-apply-degats', async event => {
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
if (game.user.isGM) {
|
||||
MournbladeUtility.applyDegatsFromAttaque(rollData)
|
||||
} else {
|
||||
game.socket.emit("system.fvtt-mournblade", { name: "msg_apply_damage", data: { rolLData: rollData } })
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -120,8 +164,7 @@ export class MournbladeUtility {
|
||||
|
||||
const templatePaths = [
|
||||
'systems/fvtt-mournblade/templates/editor-notes-gm.html',
|
||||
'systems/fvtt-mournblade/templates/partial-item-description.html',
|
||||
'systems/fvtt-mournblade/templates/partial-list-niveau.html'
|
||||
'systems/fvtt-mournblade/templates/partial-item-description.html'
|
||||
]
|
||||
return loadTemplates(templatePaths);
|
||||
}
|
||||
@ -163,12 +206,10 @@ export class MournbladeUtility {
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static buildListOptions(min, max) {
|
||||
let options = ""
|
||||
static createArrayOptionList(min, max) {
|
||||
let options = [];
|
||||
for (let i = min; i <= max; i++) {
|
||||
options += `<option value="${i}">${i}</option>`
|
||||
options.push({key:`${i}`, label:`${i}`});
|
||||
}
|
||||
return options;
|
||||
}
|
||||
@ -183,27 +224,6 @@ export class MournbladeUtility {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getDefenseState(actorId) {
|
||||
return this.defenderStore[actorId];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static updateRollData(rollData) {
|
||||
|
||||
let id = rollData.rollId;
|
||||
let oldRollData = this.rollDataStore[id] || {};
|
||||
let newRollData = mergeObject(oldRollData, rollData);
|
||||
this.rollDataStore[id] = newRollData;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static saveRollData(rollData) {
|
||||
game.socket.emit("system.fvtt-mournblade", {
|
||||
name: "msg_update_roll", data: rollData
|
||||
}); // Notify all other clients of the roll
|
||||
this.updateRollData(rollData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getRollData(id) {
|
||||
return this.rollDataStore[id];
|
||||
@ -211,12 +231,10 @@ export class MournbladeUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static onSocketMesssage(msg) {
|
||||
//console.log("SOCKET MESSAGE", msg.name, game.user.character.id, msg.data.defenderId);
|
||||
if (msg.name == "msg_update_defense_state") {
|
||||
this.updateDefenseState(msg.data.defenderId, msg.data.rollId);
|
||||
}
|
||||
if (msg.name == "msg_update_roll") {
|
||||
this.updateRollData(msg.data);
|
||||
if (msg.name == "msg_apply_damage") {
|
||||
if (game.user.isGM) {
|
||||
this.applyDegatsFromAttaque(msg.data.rollData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -281,84 +299,274 @@ export class MournbladeUtility {
|
||||
}
|
||||
}
|
||||
|
||||
//console.log("Result : ", rollData)
|
||||
if (rollData.difficulte > 0 && !rollData.isDramatique) {
|
||||
rollData.isSuccess = (rollData.roll.finalResult >= rollData.difficulte)
|
||||
rollData.isHeroique = ((rollData.roll.finalResult - rollData.difficulte) >= 10)
|
||||
rollData.isDramatique = ((rollData.roll.finalResult - rollData.difficulte) <= -10)
|
||||
rollData.isSuccess = (rollData.finalResult >= rollData.difficulte)
|
||||
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10)
|
||||
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10)
|
||||
rollData.isPureSuccess = (rollData.isSuccess && !rollData.isHeroique)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollMournblade(rollData) {
|
||||
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.attrKey == "tochoose") { // No attr selected, force address
|
||||
rollData.attrKey = "adr"
|
||||
}
|
||||
if ( !rollData.attr) {
|
||||
if (!rollData.attr) {
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
|
||||
rollData.attr = duplicate(actor.system.attributs[rollData.attrKey])
|
||||
rollData.attr = foundry.utils.duplicate(actor.system.attributs[rollData.attrKey])
|
||||
}
|
||||
|
||||
rollData.diceFormula = rollData.mainDice
|
||||
if ( rollData.doubleD20) { // Multiply result !
|
||||
if (rollData.doubleD20) { // Multiply result !
|
||||
rollData.diceFormula += "*2"
|
||||
if (!rollData.isReroll) {
|
||||
actor.changeEclat(-1)
|
||||
}
|
||||
}
|
||||
//console.log("BEFORE COMP", rollData)
|
||||
if (rollData.competence) {
|
||||
rollData.predilections = duplicate( rollData.competence.system.predilections.filter( pred => !pred.used) || [] )
|
||||
rollData.predilections = foundry.utils.duplicate(rollData.competence.system.predilections)
|
||||
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
|
||||
rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.system.niveau}+${rollData.modificateur}+${compmod}`
|
||||
} else {
|
||||
rollData.diceFormula += `+${rollData.attr.value}*2+${rollData.modificateur}`
|
||||
}
|
||||
|
||||
if (rollData.arme) {
|
||||
rollData.diceFormula += `+${rollData.malusSante}+${rollData.malusAme}`
|
||||
|
||||
if (rollData.arme?.type == "arme") {
|
||||
rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}`
|
||||
}
|
||||
|
||||
if(rollData.rune) {
|
||||
rollData.runeduree = Math.ceil((rollData.runeame+3) / 3)
|
||||
if ( rollData.runemode == "inscrire") {
|
||||
rollData.runeduree *= 2
|
||||
}
|
||||
// Apply modifiers
|
||||
for (let modifier of rollData.modifiers) {
|
||||
if (modifier.system.modifiertype == "roll" && modifier.system.apply) {
|
||||
rollData.diceFormula += `+${modifier.system.value}`
|
||||
}
|
||||
}
|
||||
// Apply desavantages
|
||||
let desavantagesBonus = 0
|
||||
for (let desavantage in rollData.desavantages) {
|
||||
if (rollData.desavantages[desavantage]) {
|
||||
desavantagesBonus += 5
|
||||
}
|
||||
}
|
||||
desavantagesBonus = Math.min(15, desavantagesBonus)
|
||||
rollData.diceFormula += `+${desavantagesBonus}`
|
||||
|
||||
// Monté ?
|
||||
if (rollData.isMonte) {
|
||||
rollData.diceFormula += "+5"
|
||||
}
|
||||
|
||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
// Specific modifier for distance
|
||||
if (rollData.arme?.system?.isDistance) {
|
||||
if (rollData.visee) {
|
||||
rollData.diceFormula += "+5"
|
||||
}
|
||||
if (rollData.cibleconsciente) {
|
||||
rollData.diceFormula += `-${rollData.defender.system.attributs.adr.value}`
|
||||
}
|
||||
if (rollData.ciblecourt) {
|
||||
if (rollData.difficulte <= 15) { // Portée courte ou moins
|
||||
rollData.diceFormula += `-5`
|
||||
} else {
|
||||
rollData.diceFormula += `-10`
|
||||
}
|
||||
}
|
||||
if (rollData.typeCouvert != "aucun") {
|
||||
rollData.diceFormula += `+${rollData.config.couverts[rollData.typeCouvert].value}`
|
||||
}
|
||||
}
|
||||
|
||||
if (rollData.rune) {
|
||||
rollData.runeduree = Math.ceil((rollData.runeame + 3) / 3)
|
||||
if (rollData.runemode == "inscrire") {
|
||||
rollData.runeduree *= 2
|
||||
}
|
||||
if (rollData.runemode == "prononcer") {
|
||||
rollData.runeduree = 1
|
||||
}
|
||||
}
|
||||
|
||||
let myRoll = await new Roll(rollData.diceFormula).evaluate();
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.roll = myRoll
|
||||
rollData.roll = foundry.utils.duplicate(myRoll)
|
||||
rollData.diceResult = myRoll.terms[0].results[0].result
|
||||
console.log(">>>> ", myRoll)
|
||||
|
||||
rollData.finalResult = myRoll.total
|
||||
this.computeResult( rollData)
|
||||
this.computeResult(rollData)
|
||||
|
||||
if (rollData.rune ) {
|
||||
// Application immédiate selon type de jet
|
||||
if (rollData.rune) {
|
||||
let subAme = rollData.runeame
|
||||
if ( rollData.isEchec && !rollData.isDramatique) {
|
||||
subAme = Math.ceil((subAme+1) / 2)
|
||||
if (rollData.isEchec && !rollData.isDramatique) {
|
||||
subAme = Math.ceil((subAme + 1) / 2)
|
||||
}
|
||||
actor.subPointsAme(rollData.runemode, subAme)
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "assomer" && rollData.defenderTokenId && rollData.isPureSuccess) {
|
||||
let defender = game.canvas.tokens.get(rollData?.defenderTokenId)?.actor
|
||||
defender.setModifier("Assomer : Prochaine action", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "fuir" && rollData.difficulte > 0 && !rollData.isSuccess) {
|
||||
actor.setModifier("Fuite échouée : -5 en défense ce round et suivant", "defense", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "immobiliser" && rollData.difficulte > 0 && rollData.isPureSuccess) {
|
||||
actor.setModifier("Immobilisation en cours : -5 pour prochaine action", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "chargecavalerie") {
|
||||
actor.setModifier("Charge de Cavalerie : -5 défense pour le tour", "defense", -5)
|
||||
}
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-generic-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollDegatsFromAttaque(rollData) {
|
||||
let maximize = false
|
||||
let degatsMessage = "Degats normaux"
|
||||
|
||||
if (rollData.arme?.system?.isMelee) {
|
||||
rollData.degatsFormula = rollData.arme.system.totalDegats
|
||||
if (rollData.isHeroique) { // Deux fois les dés de dégats
|
||||
degatsMessage = "Dégats doublés"
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "assomer") {
|
||||
rollData.degatsFormula = false
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "charger") {
|
||||
rollData.degatsFormula += "+2"
|
||||
}
|
||||
if (rollData.typeAttaque == "chargecavalerie") {
|
||||
rollData.degatsFormula += "+5"
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "precise") {
|
||||
degatsMessage = "Degats normaux"
|
||||
if (rollData.isHeroique) { // Degats max
|
||||
maximize = true
|
||||
degatsMessage = "Dégats maximaux, ignore l'armure du défenseur";
|
||||
rollData.ignoreDefenseArmor = true
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "feinte") {
|
||||
degatsMessage = "Pas de dégats, mais bonus pour prochaine attaque"
|
||||
rollData.degatsFormula = false
|
||||
rollData.nextBonus = 5
|
||||
if (rollData.isHeroique) { // Bonus pour prochaine action
|
||||
rollData.nextBonus = 10
|
||||
rollData.nextBonusDegats = 10
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "coupbas") {
|
||||
degatsMessage = "Pas de dégats, mais malus pour prochaine action complexe du défenseur"
|
||||
rollData.degatsFormula = false
|
||||
rollData.nextMalus = 5
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
rollData.nextMalus = 15
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "contenir") {
|
||||
degatsMessage = "Pas de dégats, mais l'adversaire ne peut pas vous attaquer pour le reste du tour"
|
||||
rollData.degatsFormula = false
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
degatsMessage = "Pas de dégats, mais tout les adversaires avec une défense inférieure ou égale à " + rollData.finalResult - 10 +
|
||||
" ne peuvent pas vous attaquer pour le reste du tour"
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "desarmer") {
|
||||
degatsMessage = "Pas de dégats, mais l'adversaire reçoit un malus de -5 pour sa prochaine action"
|
||||
rollData.degatsFormula = false
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
rollData.defenderDesarme = true
|
||||
degatsMessage = "Pas de dégats, mais l'arme de votre adversaire est arrachée de ses mains"
|
||||
}
|
||||
}
|
||||
} else { // Armes à distance
|
||||
rollData.degatsFormula = rollData.arme.system.totalDegats
|
||||
}
|
||||
|
||||
// Perform the roll, show the dice
|
||||
rollData.finalResult = 0
|
||||
rollData.degatsMessage = degatsMessage
|
||||
if (rollData.degatsFormula) {
|
||||
console.log("Degats formula", rollData.degatsFormula)
|
||||
// Twice!maximize
|
||||
if (rollData.isHeroique && !maximize) {
|
||||
rollData.degatsFormula += "+" + rollData.degatsFormula
|
||||
}
|
||||
// Latest modifiers
|
||||
for (let mod of rollData.modifiers) {
|
||||
if (mod.system.modifiertype == "degats") {
|
||||
rollData.degatsFormula += `+${mod.system.value}`
|
||||
}
|
||||
}
|
||||
let degatsRoll = await new Roll(rollData.degatsFormula).evaluate({ maximize: maximize })
|
||||
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||
rollData.finalResult = degatsRoll.total
|
||||
}
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-degats-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyDegatsFromAttaque(rollData) {
|
||||
let defender = game.canvas.tokens.get(rollData?.defenderTokenId)?.actor
|
||||
if (defender && rollData.arme) {
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.typeAttaque == "desarmer" && !rollData.isHeroique) {
|
||||
defender.setModifier("Malus suite à désarmement", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "charger") {
|
||||
actor.setModifier("Défense suite à charge", "roll", -5)
|
||||
}
|
||||
if (rollData.nextBonus) {
|
||||
actor.setModifier("Prochaine attaque", "roll", rollData.nextBonus)
|
||||
if (rollData.nextDegatsBonus) {
|
||||
actor.setModifier("Prochaine attaque", "degats", rollData.nextDegatsBonus)
|
||||
}
|
||||
}
|
||||
if (rollData.nextMalus) {
|
||||
defender.setModifier("Prochaine action complexe", "roll", -rollData.nextMalus)
|
||||
}
|
||||
if (rollData.defenderDesarme) {
|
||||
ui.notifications.info("L'arme de " + defender.name + " est arrachée de ses mains (à gérer manuellement)")
|
||||
}
|
||||
let degats = rollData.finalResult
|
||||
|
||||
let type = (rollData.arme.system.nonletaux) ? "nonletaux" : "letaux"
|
||||
if (rollData.arme.system.ignorearmure) {
|
||||
rollData.ignoreDefenseArmor = true
|
||||
}
|
||||
defender.incDecSante(type, +degats, rollData.ignoreDefenseArmor)
|
||||
ui.notifications.info(defender.name + "a subi " + degats + " points de santé " + type + ".")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async bonusRollMournblade(rollData) {
|
||||
rollData.bonusFormula = rollData.addedBonus
|
||||
|
||||
let bonusRoll = new Roll(rollData.bonusFormula).roll({async: false})
|
||||
|
||||
let bonusRoll = await new Roll(rollData.bonusFormula).evaluate()
|
||||
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
|
||||
rollData.bonusRoll = bonusRoll
|
||||
|
||||
rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)
|
||||
|
||||
rollData.finalResult += rollData.bonusRoll.total
|
||||
|
||||
this.computeResult( rollData)
|
||||
this.computeResult(rollData)
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-generic-result.html`, rollData)
|
||||
@ -370,6 +578,7 @@ export class MournbladeUtility {
|
||||
static getUsers(filter) {
|
||||
return game.users.filter(filter).map(user => user.data._id);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getWhisperRecipients(rollMode, name) {
|
||||
switch (rollMode) {
|
||||
@ -387,7 +596,7 @@ export class MournbladeUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static blindMessageToGM(chatOptions) {
|
||||
let chatGM = duplicate(chatOptions);
|
||||
let chatGM = foundry.utils.duplicate(chatOptions);
|
||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
||||
console.log("blindMessageToGM", chatGM);
|
||||
@ -440,7 +649,8 @@ export class MournbladeUtility {
|
||||
chatOptions.whisper = this.getWhisperRecipients(rollMode, name);
|
||||
break;
|
||||
}
|
||||
chatOptions.alias = chatOptions.alias || name
|
||||
chatOptions.alias = chatOptions.alias || name;
|
||||
chatOptions.speaker = ChatMessage.getSpeaker();
|
||||
let msg = await ChatMessage.create(chatOptions)
|
||||
console.log("=======>", rollData)
|
||||
msg.setFlag("world", "mournblade-roll", rollData)
|
||||
@ -449,12 +659,11 @@ export class MournbladeUtility {
|
||||
/* -------------------------------------------- */
|
||||
static getBasicRollData() {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollId: foundry.utils.randomID(16),
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
modificateursOptions: this.getModificateurOptions(),
|
||||
pointAmeOptions: this.getPointAmeOptions(),
|
||||
difficulte: 0,
|
||||
modificateur: 0,
|
||||
config: foundry.utils.duplicate(game.system.mournblade.config),
|
||||
}
|
||||
MournbladeUtility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
@ -462,15 +671,19 @@ export class MournbladeUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static updateWithTarget(rollData) {
|
||||
let objectDefender
|
||||
let target = MournbladeUtility.getTarget();
|
||||
let target = MournbladeUtility.getTarget()
|
||||
if (target) {
|
||||
let defenderActor = game.actors.get(target.data.actorId)
|
||||
objectDefender = MournbladeUtility.data(defenderActor)
|
||||
objectDefender = mergeObject(objectDefender, target.data.actorData)
|
||||
rollData.defender = objectDefender
|
||||
rollData.attackerId = this.id
|
||||
rollData.defenderId = objectDefender._id
|
||||
rollData.defenderTokenId = target.id
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
rollData.defenderCombatValues = defender.getCombatValues()
|
||||
rollData.defender = defender.toObject() // Simpler
|
||||
rollData.defenderDefense = defender.getBestDefenseValue()
|
||||
rollData.armeDefense = defender.getBestDefenseValue()
|
||||
if (rollData.armeDefense) {
|
||||
rollData.difficulte = rollData.armeDefense.system.totalDefensif
|
||||
} else {
|
||||
ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -485,82 +698,82 @@ export class MournbladeUtility {
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
actor.changeBonneAventure( changed )
|
||||
rollData.isReroll = true
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
actor.changeBonneAventure(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus de Points d'Aventure"
|
||||
if (addedBonus == "reroll") {
|
||||
MournbladeUtility.rollMournblade(rollData)
|
||||
} else {
|
||||
MournbladeUtility.rollMournblade(rollData)
|
||||
} else {
|
||||
rollData.addedBonus = addedBonus
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyEclatRoll(li, changed, addedBonus) {
|
||||
let msgId = li.data("message-id")
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
actor.changeEclat( changed )
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus d'Eclat"
|
||||
rollData.addedBonus = addedBonus
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static applyEclatRoll(li, changed, addedBonus) {
|
||||
let msgId = li.data("message-id")
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
actor.changeEclat(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus d'Eclat"
|
||||
rollData.addedBonus = addedBonus
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static chatRollMenu(html, options) {
|
||||
let canApply = li => canvas.tokens.controlled.length && li.find(".mournblade-roll").length
|
||||
let canApplyBALoyal = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "loyal")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "loyal")
|
||||
}
|
||||
let canApplyPELoyal = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "loyal")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "loyal")
|
||||
}
|
||||
let canApplyBAChaotique = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "chaotique")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let canApplyBAChaotique3 = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getBonneAventure() > 2 && actor.getAlignement() == "chaotique")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 2 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let canApplyPEChaotique = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "chaotique")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let hasPredilection = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
if ( rollData.competence) {
|
||||
let nbPred = rollData.competence.data.predilections.filter( pred => !pred.used).length
|
||||
return ( !rollData.isReroll && rollData.competence && nbPred > 0 )
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.competence) {
|
||||
let nbPred = rollData.competence.data.predilections.filter(pred => !pred.used).length
|
||||
return (!rollData.isReroll && rollData.competence && nbPred > 0)
|
||||
}
|
||||
return false
|
||||
}
|
||||
let canCompetenceDouble = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
if ( rollData.competence) {
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.competence) {
|
||||
return rollData.competence.data.doublebonus
|
||||
}
|
||||
return false
|
||||
@ -627,11 +840,11 @@ export class MournbladeUtility {
|
||||
/* -------------------------------------------- */
|
||||
static async confirmDelete(actorSheet, li) {
|
||||
let itemId = li.data("item-id");
|
||||
let msgTxt = "<p>Are you sure to remove this Item ?";
|
||||
let msgTxt = "<p>Voulez vous supprimer cet item ?";
|
||||
let buttons = {
|
||||
delete: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Yes, remove it",
|
||||
label: "Oui !",
|
||||
callback: () => {
|
||||
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||
li.slideUp(200, () => actorSheet.render(false));
|
||||
@ -639,12 +852,12 @@ export class MournbladeUtility {
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: "Cancel"
|
||||
label: "Non !"
|
||||
}
|
||||
}
|
||||
msgTxt += "</p>";
|
||||
let d = new Dialog({
|
||||
title: "Confirm removal",
|
||||
title: "Confirmer la suppression",
|
||||
content: msgTxt,
|
||||
buttons: buttons,
|
||||
default: "cancel"
|
||||
|
@ -1,42 +1,46 @@
|
||||
{"name":"Fouet","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contactjet","bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d4 + 1","deuxmains":false,"courte":3,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Qb1h25U88mTM4h72"}},"_id":"0swiE8k5zfUIqmXu"}
|
||||
{"_id":"2BSVJXr0FGZZJ9fh","name":"Hache des mers","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.mGYFgteaWBDo10Xb"}}}
|
||||
{"_id":"2qezkR1BdC0DcRIl","name":"Fléau d’armes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D10+1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.PHQabMgfk1GNOjKo"}}}
|
||||
{"name":"Arbalète","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2d6","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":3,"rarete":10,"prix":500},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.WYp8ojQN8HYJwUJc"}},"_id":"2zIdrBK88iuMbOF0"}
|
||||
{"_id":"3Iv1oLpZcPEJVaI4","name":"Cimeterre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":1,"degats":"1d10","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.RYxEg0gJfAlIZ4mw"}}}
|
||||
{"name":"Fronde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":2,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TgVuNnytO9k2K0Xe"}},"_id":"4To8rLxv4efsoZK0"}
|
||||
{"name":"Pierre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contactjet","bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":0,"prix":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.3YS9IfQddECnoagK"}},"_id":"4yKlK8MeSj5Zk8lM"}
|
||||
{"_id":"6e1JHoD1Jrz020R7","name":"Grand marteau","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2D6+2","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.vjic4cPkJ0iMCIt5"}}}
|
||||
{"name":"Arc de cavalerie","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":7,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5EWrgNQjJMx1t2v1"}},"_id":"88UuW1bdpFuCmkqb"}
|
||||
{"_id":"9Eo9mRbPPZHN98Cr","name":"Épée de maître","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d8+ 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.kX3MbDFu9uYZVNf2"}}}
|
||||
{"_id":"9xPd4ITtyk3nmMoN","name":"Lance ilmioréenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>La lance ilmioréenne est un solide bâton de combat surmonté d’une pointe sur lequel est fi xé quasi perpendiculairement un fer de hache plat et étroit. Un contrepoids fi xé à l’autre extrémité sert à équilibrer l’arme qui peut être maniée à la fois comme une lance et comme une hache à deux mains, ce qui permet de maintenir ses ennemis à distance ou de leur porter des coups dévastateurs. Ces lances furent inventées à l’époque de la tribu d’Ilm, quand les lances et épées étaient déclarées illégales par les gouverneurs melnibonéens de la région. Certaines écoles militaires ilmioréennes enseignent toujours le Style Imar, qui mêle en une seule et même technique le combat à deux mains à la lance et le combat au bâton.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"1d8 + 2","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.8ApbiVgkx79OHVp2"}}}
|
||||
{"_id":"CeC5lAKs7NdPF05l","name":"Masse lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 1","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":80},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.DPfXgFj3gpjJ3nbR"}}}
|
||||
{"_id":"CqP80SQFQOefpGgd","name":"Gourdin","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1D6","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.CBIfq9eRd2RmoI4H"}}}
|
||||
{"_id":"CupT9m8L909l4Fo5","name":"Rapière","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":1,"degats":"1d8+ 1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.XIStcClTnmLoSwyR"}}}
|
||||
{"name":"Hachette / Hache de lancer","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contactjet","bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d4 + 1","deuxmains":false,"courte":5,"moyenne":10,"longue":15,"tr":1,"rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5NHbRanxXA5vUE3B"}},"_id":"DzkeP7jbruqW4nQH"}
|
||||
{"_id":"FDeRBkxXwoZIuL9B","name":"Lance légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8","deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":5,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.LIVeq22E9EanRS9L"}}}
|
||||
{"name":"Arc de chasse","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 - 1","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TrYZ9BxYukS1mbBX"}},"_id":"Hrm08cpgAMMV6Jpq"}
|
||||
{"_id":"Iw3j4oC6H8HJ9MFQ","name":"Coup de pied / poing / tête","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.nBPKHsYIM0HgMcBy"}}}
|
||||
{"_id":"KY22L6Lx5WxgvyGD","name":"Lance lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1d10","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Kcl07bs7TOcne37W"}}}
|
||||
{"name":"Arc du Désert des Larmes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Cet arc composite fait de bois, d’andouillers de cerf et/ou d’os est un arc court et très recourbé utilisé par les barbares du Désert des Larmes pour la chasse. On peut également trouver ce type d’arcs à Pikarayd et au Dorel.</p>","typearme":"tir","bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 1","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.QmYjdRCAk3MnxKJg"}},"_id":"MDpFpqmXpIX5VV80"}
|
||||
{"_id":"MP49mYF7FVuW9ALB","name":"Hache de bataille dite lormyrienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Cette double hache parfaitement équilibrée et proportionnée est l’arme favorite des chevaliers lormyriens. Il s’agit de l’arme idéale pour trancher, découper les lances ennemies et fendre les crânes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 2","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Lpa6kesbzgKVtogn"}}}
|
||||
{"_id":"N5BbO2lGwzQnpvH0","name":"Couteau / Dague","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contactjet","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":1,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5a9GKIvNgbbXBq3s"}}}
|
||||
{"_id":"QwrZbFeJUQv2OBqI","name":"Pique filkharienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Cette longue pique à grande lame de près de trois mètres de long est l’arme de prédilection des piquiers de l’armée de Filkhar. Très effi cace pour lutter contre des cavaliers ou des ennemis en train de charger, elle l’est beaucoup moins en combat rapproché.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8 + 2","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.dF9LxfA1crZBmT92"}}}
|
||||
{"_id":"SzgkzHvzma8NiMd5","name":"Masse légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.xrWRNZBrEzkUQzRG"}}}
|
||||
{"_id":"U8CoqFhGuT3ZHeq1","name":"Sabre d’abordage","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d8","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.aNUqO9OZT0GBszvv"}}}
|
||||
{"name":"Javelot","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"jet","bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":5,"prix":30},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Zwiz9E3TbeUP8qHH"}},"_id":"aELvOR7A9DIJKgBk"}
|
||||
{"_id":"aJBVfqQ3JQNyVL7c","name":"Fourche / Faux de paysan","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D6","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":1,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.K5Ayim6mPKZoCSCc"}}}
|
||||
{"_id":"c6l49ZmEBjUxfI3W","name":"Arme improvisée","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d6","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.E7gcmnNQK2t5OQjv"}}}
|
||||
{"name":"Arc de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d10 + 1","deuxmains":false,"courte":30,"moyenne":50,"longue":100,"tr":1,"rarete":6,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Tq6lUFPTkBN5cBwn"}},"_id":"cKf5z3fajUnxJh0r"}
|
||||
{"_id":"fLHX6ut131CQI630","name":"Main gauche","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":3,"degats":"1d4 + 1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.BBii0qi1unvSRNO4"}}}
|
||||
{"_id":"freCCeiYGfWmUAQU","name":"Marteau de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d8 + 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":6,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.6n2uSdYfRAsSqQnA"}}}
|
||||
{"_id":"j5659PJlrHz56V1k","name":"Sabre de Pan Tang","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Ce long sabre effi lé sert aux Cavaliers démoniaques de Pan Tang pour couper les têtes depuis le dos de leurs monstrueuses montures reptiliennes à six pattes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":120},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.l3ffzso7GyHMKguD"}}}
|
||||
{"_id":"lYtm5MwP96numskx","name":"Hallebarde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"2d6","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.ZTdyIoMzE9kqm4e6"}}}
|
||||
{"_id":"mQGT0vmDjoTZCW5u","name":"Lance melnibonéenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>La lance melnibonéenne, faite pour le combat à cheval ou à dos de dragon, ressemble à une lance ordinaire. Son fer est cependant plus fi n et plus étroit. Avant la chute d’Imrryr, il est quasi impossible de se procurer de telles armes sur les marchés des Jeunes Royaumes. Elles peuvent être maniées à une main comme lors des joutes à cheval ou à deux mains au cœur des mêlées.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"2d6+ 4","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":10,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.KAl5qXHeYDoYRU6G"}}}
|
||||
{"name":"Arc en os","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Arc composite recourbé fait de bois, d’os et d’acier, l’arc en os melnibonéen est une arme extraordinairement puissante entre les mains d’un guerrier melnibonéen ou d’un archer esclave du Glorieux Empire. On peut se le procurer dans les Jeunes Royaumes après la chute d’Imrryr.</p>","typearme":"tir","bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d8 + 1","deuxmains":false,"courte":30,"moyenne":60,"longue":125,"tr":2,"rarete":10,"prix":500},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Dy9dzVhXbNAVm3zn"}},"_id":"nzve5qucVN6FC5wn"}
|
||||
{"_id":"sHj90bPcMaDlOw51","name":"Bâton ferré ou lesté","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1D8","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.zoBHSbvJPnjbtPh6"}}}
|
||||
{"_id":"sju2r73hUHyGbHYg","name":"Épée courte / Glaive","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1D6+1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Mxv5gMHRvRrsuhPA"}}}
|
||||
{"_id":"t2uQcWe7kirUOp3D","name":"Faucheur","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d4 + 1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.OlmzE29fh9DFd8TF"}}}
|
||||
{"_id":"uatjBTFCE5ZCqhAd","name":"Fléau lourd","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d10+ 3","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.vDDw0qqM1Kg7Pu6T"}}}
|
||||
{"_id":"v7ymzlEALvsk0poA","name":"Hache","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":2,"prix":30},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.2MwgptY2kE4tgYBe"}}}
|
||||
{"_id":"wWk0Wfer06Ttmouv","name":"Épée large","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d6+ 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.iuAizxCvnUxmsjrn"}}}
|
||||
{"_id":"wv5EiePmPTpqFutt","name":"Épée longue","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 1","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.yiYtZ0sCUpMihvzz"}}}
|
||||
{"name":"Fouet","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Qb1h25U88mTM4h72"}},"_id":"0swiE8k5zfUIqmXu","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d4 + 1","nonletaux":true,"deuxmains":false,"courte":3,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964292,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"2BSVJXr0FGZZJ9fh","name":"Hache des mers","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.mGYFgteaWBDo10Xb"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Ecu d'acier","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":3,"degats":"1d8","nonletaux":"false","rarete":9,"prix":10,"equipped":false,"isdefense":null},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.Gn52Vfp6Vg4cnpd0"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573706183,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"2PmIgKP4wZLHGp0s"}
|
||||
{"_id":"2qezkR1BdC0DcRIl","name":"Fléau d’armes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.PHQabMgfk1GNOjKo"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D10+1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arbalète","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.WYp8ojQN8HYJwUJc"}},"_id":"2zIdrBK88iuMbOF0","system":{"description":"","typearme":"tir","isdefense":null,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2d6","nonletaux":null,"deuxmains":"","courte":25,"moyenne":50,"longue":75,"tr":3,"rarete":10,"prix":500,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"3Iv1oLpZcPEJVaI4","name":"Cimeterre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.RYxEg0gJfAlIZ4mw"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":1,"degats":"1d10","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Fronde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.TgVuNnytO9k2K0Xe"}},"_id":"4To8rLxv4efsoZK0","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","nonletaux":false,"deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":2,"prix":1,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Pierre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.3YS9IfQddECnoagK"}},"_id":"4yKlK8MeSj5Zk8lM","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","nonletaux":true,"deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"6e1JHoD1Jrz020R7","name":"Grand marteau","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.vjic4cPkJ0iMCIt5"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2D6+2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de cavalerie","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5EWrgNQjJMx1t2v1"}},"_id":"88UuW1bdpFuCmkqb","system":{"description":"","typearme":"tir","isdefense":null,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","nonletaux":null,"deuxmains":null,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":7,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"9Eo9mRbPPZHN98Cr","name":"Épée de maître","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.kX3MbDFu9uYZVNf2"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d8+ 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"9xPd4ITtyk3nmMoN","name":"Lance ilmioréenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.8ApbiVgkx79OHVp2"}},"system":{"description":"<p>La lance ilmioréenne est un solide bâton de combat surmonté d’une pointe sur lequel est fi xé quasi perpendiculairement un fer de hache plat et étroit. Un contrepoids fi xé à l’autre extrémité sert à équilibrer l’arme qui peut être maniée à la fois comme une lance et comme une hache à deux mains, ce qui permet de maintenir ses ennemis à distance ou de leur porter des coups dévastateurs. Ces lances furent inventées à l’époque de la tribu d’Ilm, quand les lances et épées étaient déclarées illégales par les gouverneurs melnibonéens de la région. Certaines écoles militaires ilmioréennes enseignent toujours le Style Imar, qui mêle en une seule et même technique le combat à deux mains à la lance et le combat au bâton.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"1d8 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CeC5lAKs7NdPF05l","name":"Masse lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.DPfXgFj3gpjJ3nbR"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 1","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":80,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CqP80SQFQOefpGgd","name":"Gourdin","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.CBIfq9eRd2RmoI4H"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1D6","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CupT9m8L909l4Fo5","name":"Rapière","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.XIStcClTnmLoSwyR"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":1,"degats":"1d8+ 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Hachette / Hache de lancer","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5NHbRanxXA5vUE3B"}},"_id":"DzkeP7jbruqW4nQH","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":5,"moyenne":10,"longue":15,"tr":1,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"FDeRBkxXwoZIuL9B","name":"Lance légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.LIVeq22E9EanRS9L"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8","nonletaux":false,"deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":5,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de chasse","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.TrYZ9BxYukS1mbBX"}},"_id":"Hrm08cpgAMMV6Jpq","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 - 1","nonletaux":false,"deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"Iw3j4oC6H8HJ9MFQ","name":"Coup de pied / poing / tête","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.nBPKHsYIM0HgMcBy"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"KY22L6Lx5WxgvyGD","name":"Lance lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Kcl07bs7TOcne37W"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1d10","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc du Désert des Larmes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.QmYjdRCAk3MnxKJg"}},"_id":"MDpFpqmXpIX5VV80","system":{"description":"<p>Cet arc composite fait de bois, d’andouillers de cerf et/ou d’os est un arc court et très recourbé utilisé par les barbares du Désert des Larmes pour la chasse. On peut également trouver ce type d’arcs à Pikarayd et au Dorel.</p>","typearme":"tir","isdefense":null,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 1","nonletaux":null,"deuxmains":null,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964296,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"MP49mYF7FVuW9ALB","name":"Hache de bataille dite lormyrienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Lpa6kesbzgKVtogn"}},"system":{"description":"<p>Cette double hache parfaitement équilibrée et proportionnée est l’arme favorite des chevaliers lormyriens. Il s’agit de l’arme idéale pour trancher, découper les lances ennemies et fendre les crânes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964296,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"N5BbO2lGwzQnpvH0","name":"Couteau / Dague","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5a9GKIvNgbbXBq3s"}},"system":{"description":"","typearme":"contactjet","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","nonletaux":false,"deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":1,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"QwrZbFeJUQv2OBqI","name":"Pique filkharienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.dF9LxfA1crZBmT92"}},"system":{"description":"<p>Cette longue pique à grande lame de près de trois mètres de long est l’arme de prédilection des piquiers de l’armée de Filkhar. Très effi cace pour lutter contre des cavaliers ou des ennemis en train de charger, elle l’est beaucoup moins en combat rapproché.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"SzgkzHvzma8NiMd5","name":"Masse légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.xrWRNZBrEzkUQzRG"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"U8CoqFhGuT3ZHeq1","name":"Sabre d’abordage","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.aNUqO9OZT0GBszvv"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d8","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Javelot","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Zwiz9E3TbeUP8qHH"}},"_id":"aELvOR7A9DIJKgBk","system":{"description":"","typearme":"jet","isdefense":false,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","nonletaux":false,"deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":5,"prix":30,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"aJBVfqQ3JQNyVL7c","name":"Fourche / Faux de paysan","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.K5Ayim6mPKZoCSCc"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":1,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Pavois","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"<p>Le Pavois se plante dans le sol au début du combat et ne peut plus être déplacé jusqu'à son issue.</p>","bonusdefense":3,"degats":"0","nonletaux":"false","rarete":7,"prix":5,"equipped":false,"isdefense":"false"},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.E3A8EnGzQctvYndd"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573708981,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"b2VNhFBgbvlzaMw8"}
|
||||
{"name":"Bouclier d'Infanterie","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":2,"degats":"1d6","nonletaux":"false","rarete":5,"prix":2,"equipped":false},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.jeMLhLTJhTU6TJ58"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573703190,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"bqDEyPj9OlGnEJsr"}
|
||||
{"_id":"c6l49ZmEBjUxfI3W","name":"Arme improvisée","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.E7gcmnNQK2t5OQjv"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d6","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Tq6lUFPTkBN5cBwn"}},"_id":"cKf5z3fajUnxJh0r","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d10 + 1","nonletaux":false,"deuxmains":false,"courte":30,"moyenne":50,"longue":100,"tr":1,"rarete":6,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Targe","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":1,"degats":"1d4","nonletaux":"false","rarete":4,"prix":2,"equipped":false},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.9rJkBsRltxH08QT8"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573712553,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"cZorS8WAKNS0dN0T"}
|
||||
{"_id":"fLHX6ut131CQI630","name":"Main gauche","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.BBii0qi1unvSRNO4"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":3,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"freCCeiYGfWmUAQU","name":"Marteau de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.6n2uSdYfRAsSqQnA"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d8 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":6,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"j5659PJlrHz56V1k","name":"Sabre de Pan Tang","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.l3ffzso7GyHMKguD"}},"system":{"description":"<p>Ce long sabre effi lé sert aux Cavaliers démoniaques de Pan Tang pour couper les têtes depuis le dos de leurs monstrueuses montures reptiliennes à six pattes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"lYtm5MwP96numskx","name":"Hallebarde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.ZTdyIoMzE9kqm4e6"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"2d6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"mQGT0vmDjoTZCW5u","name":"Lance melnibonéenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.KAl5qXHeYDoYRU6G"}},"system":{"description":"<p>La lance melnibonéenne, faite pour le combat à cheval ou à dos de dragon, ressemble à une lance ordinaire. Son fer est cependant plus fi n et plus étroit. Avant la chute d’Imrryr, il est quasi impossible de se procurer de telles armes sur les marchés des Jeunes Royaumes. Elles peuvent être maniées à une main comme lors des joutes à cheval ou à deux mains au cœur des mêlées.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"2d6+ 4","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":10,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc en os","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Dy9dzVhXbNAVm3zn"}},"_id":"nzve5qucVN6FC5wn","system":{"description":"<p>Arc composite recourbé fait de bois, d’os et d’acier, l’arc en os melnibonéen est une arme extraordinairement puissante entre les mains d’un guerrier melnibonéen ou d’un archer esclave du Glorieux Empire. On peut se le procurer dans les Jeunes Royaumes après la chute d’Imrryr.</p>","typearme":"tir","isdefense":false,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d8 + 1","nonletaux":false,"deuxmains":false,"courte":30,"moyenne":60,"longue":125,"tr":2,"rarete":10,"prix":500,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"sHj90bPcMaDlOw51","name":"Bâton ferré ou lesté","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.zoBHSbvJPnjbtPh6"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1D8","nonletaux":true,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":1,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"sju2r73hUHyGbHYg","name":"Épée courte / Glaive","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Mxv5gMHRvRrsuhPA"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1D6+1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"t2uQcWe7kirUOp3D","name":"Faucheur","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.OlmzE29fh9DFd8TF"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"uatjBTFCE5ZCqhAd","name":"Fléau lourd","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.vDDw0qqM1Kg7Pu6T"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d10+ 3","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"v7ymzlEALvsk0poA","name":"Hache","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.2MwgptY2kE4tgYBe"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":2,"prix":30,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"wWk0Wfer06Ttmouv","name":"Épée large","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.iuAizxCvnUxmsjrn"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d6+ 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"wv5EiePmPTpqFutt","name":"Épée longue","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.yiYtZ0sCUpMihvzz"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 1","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964301,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
|
BIN
packs/armes/000212.ldb
Normal file
BIN
packs/armes/000212.ldb
Normal file
Binary file not shown.
0
packs/armes/000219.log
Normal file
0
packs/armes/000219.log
Normal file
1
packs/armes/CURRENT
Normal file
1
packs/armes/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000217
|
0
packs/armes/LOCK
Normal file
0
packs/armes/LOCK
Normal file
8
packs/armes/LOG
Normal file
8
packs/armes/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:44.885743 7f7ed4e006c0 Recovering log #215
|
||||
2024/09/10-07:14:44.956966 7f7ed4e006c0 Delete type=3 #213
|
||||
2024/09/10-07:14:44.957144 7f7ed4e006c0 Delete type=0 #215
|
||||
2024/09/10-07:20:33.463210 7f7ecd6006c0 Level-0 table #220: started
|
||||
2024/09/10-07:20:33.463253 7f7ecd6006c0 Level-0 table #220: 0 bytes OK
|
||||
2024/09/10-07:20:33.501220 7f7ecd6006c0 Delete type=0 #218
|
||||
2024/09/10-07:20:33.538862 7f7ecd6006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.538937 7f7ecd6006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
8
packs/armes/LOG.old
Normal file
8
packs/armes/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.138004 7f7ecf4006c0 Recovering log #210
|
||||
2024/09/09-21:51:17.149501 7f7ecf4006c0 Delete type=3 #208
|
||||
2024/09/09-21:51:17.149609 7f7ecf4006c0 Delete type=0 #210
|
||||
2024/09/09-21:52:48.597265 7f7ecd6006c0 Level-0 table #216: started
|
||||
2024/09/09-21:52:48.597313 7f7ecd6006c0 Level-0 table #216: 0 bytes OK
|
||||
2024/09/09-21:52:48.604438 7f7ecd6006c0 Delete type=0 #214
|
||||
2024/09/09-21:52:48.611351 7f7ecd6006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.611418 7f7ecd6006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
BIN
packs/armes/MANIFEST-000217
Normal file
BIN
packs/armes/MANIFEST-000217
Normal file
Binary file not shown.
BIN
packs/dons/000211.ldb
Normal file
BIN
packs/dons/000211.ldb
Normal file
Binary file not shown.
0
packs/dons/000218.log
Normal file
0
packs/dons/000218.log
Normal file
1
packs/dons/CURRENT
Normal file
1
packs/dons/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000216
|
0
packs/dons/LOCK
Normal file
0
packs/dons/LOCK
Normal file
8
packs/dons/LOG
Normal file
8
packs/dons/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:45.086238 7f7ecf4006c0 Recovering log #214
|
||||
2024/09/10-07:14:45.144857 7f7ecf4006c0 Delete type=3 #212
|
||||
2024/09/10-07:14:45.145056 7f7ecf4006c0 Delete type=0 #214
|
||||
2024/09/10-07:20:33.607105 7f7ecd6006c0 Level-0 table #219: started
|
||||
2024/09/10-07:20:33.607143 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
|
||||
2024/09/10-07:20:33.638955 7f7ecd6006c0 Delete type=0 #217
|
||||
2024/09/10-07:20:33.678483 7f7ecd6006c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.678561 7f7ecd6006c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
8
packs/dons/LOG.old
Normal file
8
packs/dons/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.180244 7f7ecea006c0 Recovering log #209
|
||||
2024/09/09-21:51:17.191008 7f7ecea006c0 Delete type=3 #207
|
||||
2024/09/09-21:51:17.191115 7f7ecea006c0 Delete type=0 #209
|
||||
2024/09/09-21:52:48.625325 7f7ecd6006c0 Level-0 table #215: started
|
||||
2024/09/09-21:52:48.625386 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
|
||||
2024/09/09-21:52:48.631864 7f7ecd6006c0 Delete type=0 #213
|
||||
2024/09/09-21:52:48.638978 7f7ecd6006c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.639033 7f7ecd6006c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
BIN
packs/dons/MANIFEST-000216
Normal file
BIN
packs/dons/MANIFEST-000216
Normal file
Binary file not shown.
BIN
packs/equipement/000211.ldb
Normal file
BIN
packs/equipement/000211.ldb
Normal file
Binary file not shown.
0
packs/equipement/000218.log
Normal file
0
packs/equipement/000218.log
Normal file
1
packs/equipement/CURRENT
Normal file
1
packs/equipement/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000216
|
0
packs/equipement/LOCK
Normal file
0
packs/equipement/LOCK
Normal file
8
packs/equipement/LOG
Normal file
8
packs/equipement/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:45.020069 7f7ecfe006c0 Recovering log #214
|
||||
2024/09/10-07:14:45.082360 7f7ecfe006c0 Delete type=3 #212
|
||||
2024/09/10-07:14:45.082521 7f7ecfe006c0 Delete type=0 #214
|
||||
2024/09/10-07:20:33.576805 7f7ecd6006c0 Level-0 table #219: started
|
||||
2024/09/10-07:20:33.576855 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
|
||||
2024/09/10-07:20:33.606927 7f7ecd6006c0 Delete type=0 #217
|
||||
2024/09/10-07:20:33.678460 7f7ecd6006c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.678542 7f7ecd6006c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
8
packs/equipement/LOG.old
Normal file
8
packs/equipement/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.166142 7f7ecfe006c0 Recovering log #209
|
||||
2024/09/09-21:51:17.176865 7f7ecfe006c0 Delete type=3 #207
|
||||
2024/09/09-21:51:17.176960 7f7ecfe006c0 Delete type=0 #209
|
||||
2024/09/09-21:52:48.618041 7f7ecd6006c0 Level-0 table #215: started
|
||||
2024/09/09-21:52:48.618105 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
|
||||
2024/09/09-21:52:48.625105 7f7ecd6006c0 Delete type=0 #213
|
||||
2024/09/09-21:52:48.638957 7f7ecd6006c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.639048 7f7ecd6006c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
BIN
packs/equipement/MANIFEST-000216
Normal file
BIN
packs/equipement/MANIFEST-000216
Normal file
Binary file not shown.
BIN
packs/heritages/000211.ldb
Normal file
BIN
packs/heritages/000211.ldb
Normal file
Binary file not shown.
0
packs/heritages/000218.log
Normal file
0
packs/heritages/000218.log
Normal file
1
packs/heritages/CURRENT
Normal file
1
packs/heritages/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000216
|
0
packs/heritages/LOCK
Normal file
0
packs/heritages/LOCK
Normal file
8
packs/heritages/LOG
Normal file
8
packs/heritages/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:45.210943 7f7ecea006c0 Recovering log #214
|
||||
2024/09/10-07:14:45.265940 7f7ecea006c0 Delete type=3 #212
|
||||
2024/09/10-07:14:45.266060 7f7ecea006c0 Delete type=0 #214
|
||||
2024/09/10-07:20:33.678752 7f7ecd6006c0 Level-0 table #219: started
|
||||
2024/09/10-07:20:33.678827 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
|
||||
2024/09/10-07:20:33.713480 7f7ecd6006c0 Delete type=0 #217
|
||||
2024/09/10-07:20:33.816847 7f7ecd6006c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.816952 7f7ecd6006c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
8
packs/heritages/LOG.old
Normal file
8
packs/heritages/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.208104 7f7ed4e006c0 Recovering log #209
|
||||
2024/09/09-21:51:17.219088 7f7ed4e006c0 Delete type=3 #207
|
||||
2024/09/09-21:51:17.219197 7f7ed4e006c0 Delete type=0 #209
|
||||
2024/09/09-21:52:48.639145 7f7ecd6006c0 Level-0 table #215: started
|
||||
2024/09/09-21:52:48.639185 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
|
||||
2024/09/09-21:52:48.646533 7f7ecd6006c0 Delete type=0 #213
|
||||
2024/09/09-21:52:48.668071 7f7ecd6006c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.668151 7f7ecd6006c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
BIN
packs/heritages/MANIFEST-000216
Normal file
BIN
packs/heritages/MANIFEST-000216
Normal file
Binary file not shown.
BIN
packs/metiers/000211.ldb
Normal file
BIN
packs/metiers/000211.ldb
Normal file
Binary file not shown.
0
packs/metiers/000218.log
Normal file
0
packs/metiers/000218.log
Normal file
1
packs/metiers/CURRENT
Normal file
1
packs/metiers/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000216
|
0
packs/metiers/LOCK
Normal file
0
packs/metiers/LOCK
Normal file
8
packs/metiers/LOG
Normal file
8
packs/metiers/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:45.269926 7f7ecfe006c0 Recovering log #214
|
||||
2024/09/10-07:14:45.328808 7f7ecfe006c0 Delete type=3 #212
|
||||
2024/09/10-07:14:45.328977 7f7ecfe006c0 Delete type=0 #214
|
||||
2024/09/10-07:20:33.783195 7f7ecd6006c0 Level-0 table #219: started
|
||||
2024/09/10-07:20:33.783241 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
|
||||
2024/09/10-07:20:33.816523 7f7ecd6006c0 Delete type=0 #217
|
||||
2024/09/10-07:20:33.816931 7f7ecd6006c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.817030 7f7ecd6006c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
8
packs/metiers/LOG.old
Normal file
8
packs/metiers/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.222186 7f7ecfe006c0 Recovering log #209
|
||||
2024/09/09-21:51:17.233209 7f7ecfe006c0 Delete type=3 #207
|
||||
2024/09/09-21:51:17.233359 7f7ecfe006c0 Delete type=0 #209
|
||||
2024/09/09-21:52:48.646768 7f7ecd6006c0 Level-0 table #215: started
|
||||
2024/09/09-21:52:48.646827 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
|
||||
2024/09/09-21:52:48.653236 7f7ecd6006c0 Delete type=0 #213
|
||||
2024/09/09-21:52:48.668098 7f7ecd6006c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.668166 7f7ecd6006c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
BIN
packs/metiers/MANIFEST-000216
Normal file
BIN
packs/metiers/MANIFEST-000216
Normal file
Binary file not shown.
BIN
packs/origines/000211.ldb
Normal file
BIN
packs/origines/000211.ldb
Normal file
Binary file not shown.
0
packs/origines/000218.log
Normal file
0
packs/origines/000218.log
Normal file
1
packs/origines/CURRENT
Normal file
1
packs/origines/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000216
|
0
packs/origines/LOCK
Normal file
0
packs/origines/LOCK
Normal file
8
packs/origines/LOG
Normal file
8
packs/origines/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:45.148885 7f7ed4e006c0 Recovering log #214
|
||||
2024/09/10-07:14:45.204991 7f7ed4e006c0 Delete type=3 #212
|
||||
2024/09/10-07:14:45.205146 7f7ed4e006c0 Delete type=0 #214
|
||||
2024/09/10-07:20:33.639140 7f7ecd6006c0 Level-0 table #219: started
|
||||
2024/09/10-07:20:33.639178 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
|
||||
2024/09/10-07:20:33.677964 7f7ecd6006c0 Delete type=0 #217
|
||||
2024/09/10-07:20:33.678505 7f7ecd6006c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.678580 7f7ecd6006c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
8
packs/origines/LOG.old
Normal file
8
packs/origines/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.194403 7f7ecf4006c0 Recovering log #209
|
||||
2024/09/09-21:51:17.204990 7f7ecf4006c0 Delete type=3 #207
|
||||
2024/09/09-21:51:17.205104 7f7ecf4006c0 Delete type=0 #209
|
||||
2024/09/09-21:52:48.632133 7f7ecd6006c0 Level-0 table #215: started
|
||||
2024/09/09-21:52:48.632191 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
|
||||
2024/09/09-21:52:48.638748 7f7ecd6006c0 Delete type=0 #213
|
||||
2024/09/09-21:52:48.638992 7f7ecd6006c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.639018 7f7ecd6006c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
BIN
packs/origines/MANIFEST-000216
Normal file
BIN
packs/origines/MANIFEST-000216
Normal file
Binary file not shown.
BIN
packs/pnj-creatures/000107.ldb
Normal file
BIN
packs/pnj-creatures/000107.ldb
Normal file
Binary file not shown.
0
packs/pnj-creatures/000114.log
Normal file
0
packs/pnj-creatures/000114.log
Normal file
1
packs/pnj-creatures/CURRENT
Normal file
1
packs/pnj-creatures/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000112
|
0
packs/pnj-creatures/LOCK
Normal file
0
packs/pnj-creatures/LOCK
Normal file
8
packs/pnj-creatures/LOG
Normal file
8
packs/pnj-creatures/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:44.657561 7f7ecf4006c0 Recovering log #110
|
||||
2024/09/10-07:14:44.756808 7f7ecf4006c0 Delete type=3 #108
|
||||
2024/09/10-07:14:44.756963 7f7ecf4006c0 Delete type=0 #110
|
||||
2024/09/10-07:20:33.399722 7f7ecd6006c0 Level-0 table #115: started
|
||||
2024/09/10-07:20:33.399823 7f7ecd6006c0 Level-0 table #115: 0 bytes OK
|
||||
2024/09/10-07:20:33.426020 7f7ecd6006c0 Delete type=0 #113
|
||||
2024/09/10-07:20:33.538803 7f7ecd6006c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.538898 7f7ecd6006c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
8
packs/pnj-creatures/LOG.old
Normal file
8
packs/pnj-creatures/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.088284 7f7ecea006c0 Recovering log #105
|
||||
2024/09/09-21:51:17.099095 7f7ecea006c0 Delete type=3 #103
|
||||
2024/09/09-21:51:17.099204 7f7ecea006c0 Delete type=0 #105
|
||||
2024/09/09-21:52:48.582588 7f7ecd6006c0 Level-0 table #111: started
|
||||
2024/09/09-21:52:48.582673 7f7ecd6006c0 Level-0 table #111: 0 bytes OK
|
||||
2024/09/09-21:52:48.589717 7f7ecd6006c0 Delete type=0 #109
|
||||
2024/09/09-21:52:48.611309 7f7ecd6006c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.611384 7f7ecd6006c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
BIN
packs/pnj-creatures/MANIFEST-000112
Normal file
BIN
packs/pnj-creatures/MANIFEST-000112
Normal file
Binary file not shown.
@ -1,11 +1,7 @@
|
||||
{"name":"Cuirasse, armure de demi-plaques","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":4,"degats":"","rarete":8,"prix":200},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.FvufSkzJOSftZhYt"}},"_id":"2hD1DQVeCIQIXFU7"}
|
||||
{"name":"Pavois","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"<p>Le pavois se plante dans le sol au début du combat et ne peut normalement plus être déplacé jusqu’à son issue.</p>","typeprotection":"armure","protection":3,"degats":"","rarete":7,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.y1kNQJYRCEol83IA"}},"_id":"2uqB1doLYK4S2EN2"}
|
||||
{"name":"Armure de plaques melnibonéenne","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"<p>Cette armure ornée et fi nement gravée est ajustée aux mensurations de celui qui la porte. On ne peut en trouver en dehors d’Imrryr avant sa chute. L’armure couvre tout le corps des pieds à la tête. Le casque est toujours surmonté d’une sculpture en forme de dragon ou de serpent de mer. Des motifs complexes et imbriqués recouvrent la surface de tous les éléments de l’armure. Après la chute d’Imrryr, quelques pièces d’armure melnibonéennes apparaissent de temps en temps sur les marchés mais les armures entières restent rarissimes. Si elle a été spécialement conçue pour son porteur, une armure de plaques melnibonéenne n’impose pas de pénalité d’encombrement à ce dernier.</p>","typeprotection":"armure","protection":6,"degats":"","rarete":10,"prix":1000},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.09OukepQ8Oep0642"}},"_id":"FFX0dFDZoVXFzyXk"}
|
||||
{"name":"Bouclier d’infanterie","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":2,"degats":"1D6","rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Xn1tVJgKinG0hc10"}},"_id":"I2X36O7hkpigZmJo"}
|
||||
{"name":"Tenues rembourrées, cuir souple, fourrures","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":1,"degats":"","rarete":2,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5dV4DORRrNdAd2Z5"}},"_id":"SqyKvR1GJMJvgHCJ"}
|
||||
{"name":"Targe","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":1,"degats":"1D4","rarete":4,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.dyTeMFfvg5mAKT2n"}},"_id":"WH1m35jgm7ilTTuG"}
|
||||
{"name":"Armure du Désert des Larmes","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"<p>Les barbares et les nomades du Désert des Larmes ont créé des armures de bois protégeant l’abdomen, la poitrine et les bras. Ces armures sont faites à partir du bois de l’arbre Fal, originaire de plateaux pluvieux situés au-delà du désert. Les barbares décorent souvent leurs armures de symboles tribaux et en protègent la surface avec de la laque. Conçue en bois, cette armure a la particularité de pouvoir flotter quoiqu’un séjour prolongé dans l’eau risque de la détériorer très rapidement. Elle n’en reste pas moins une protection très recherchée par ceux qui ont à s’aventurer sur les flots.</p>","typeprotection":"armure","protection":2,"degats":"","rarete":8,"prix":200},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.b1JGc5OlrIzlQbTO"}},"_id":"ZzzXZUn5PU1lnP0X"}
|
||||
{"name":"Cuir bouilli, cuir clouté","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":2,"degats":"","rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.T9RAyLXDPSHlvoDR"}},"_id":"kis2lI7oEtdWzJbQ"}
|
||||
{"name":"Armure de plates, harnois","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":5,"degats":"","rarete":10,"prix":500},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.7JErvrlTYaFbCvoR"}},"_id":"so7x8hK8qEc5QqnQ"}
|
||||
{"name":"Broigne, cotte de maille","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":3,"degats":"","rarete":7,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.th6blCtgBmsWSYdY"}},"_id":"veoS6Gtzj6Dq087V"}
|
||||
{"name":"Écu d’acier","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":3,"degats":"1D8","rarete":9,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TAA8qb6POO0HyhU5"}},"_id":"zqKOtmrDNrDYBu2z"}
|
||||
|
BIN
packs/protection/000211.ldb
Normal file
BIN
packs/protection/000211.ldb
Normal file
Binary file not shown.
0
packs/protection/000218.log
Normal file
0
packs/protection/000218.log
Normal file
1
packs/protection/CURRENT
Normal file
1
packs/protection/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000216
|
0
packs/protection/LOCK
Normal file
0
packs/protection/LOCK
Normal file
8
packs/protection/LOG
Normal file
8
packs/protection/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:44.961549 7f7ecea006c0 Recovering log #214
|
||||
2024/09/10-07:14:45.016222 7f7ecea006c0 Delete type=3 #212
|
||||
2024/09/10-07:14:45.016606 7f7ecea006c0 Delete type=0 #214
|
||||
2024/09/10-07:20:33.539100 7f7ecd6006c0 Level-0 table #219: started
|
||||
2024/09/10-07:20:33.539159 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
|
||||
2024/09/10-07:20:33.576585 7f7ecd6006c0 Delete type=0 #217
|
||||
2024/09/10-07:20:33.678420 7f7ecd6006c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.678524 7f7ecd6006c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
8
packs/protection/LOG.old
Normal file
8
packs/protection/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.152829 7f7ed4e006c0 Recovering log #209
|
||||
2024/09/09-21:51:17.163037 7f7ed4e006c0 Delete type=3 #207
|
||||
2024/09/09-21:51:17.163143 7f7ed4e006c0 Delete type=0 #209
|
||||
2024/09/09-21:52:48.611545 7f7ecd6006c0 Level-0 table #215: started
|
||||
2024/09/09-21:52:48.611586 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
|
||||
2024/09/09-21:52:48.617883 7f7ecd6006c0 Delete type=0 #213
|
||||
2024/09/09-21:52:48.638938 7f7ecd6006c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.639004 7f7ecd6006c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
BIN
packs/protection/MANIFEST-000216
Normal file
BIN
packs/protection/MANIFEST-000216
Normal file
Binary file not shown.
BIN
packs/runes/000211.ldb
Normal file
BIN
packs/runes/000211.ldb
Normal file
Binary file not shown.
0
packs/runes/000218.log
Normal file
0
packs/runes/000218.log
Normal file
1
packs/runes/CURRENT
Normal file
1
packs/runes/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000216
|
0
packs/runes/LOCK
Normal file
0
packs/runes/LOCK
Normal file
8
packs/runes/LOG
Normal file
8
packs/runes/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:45.464393 7f7ecea006c0 Recovering log #214
|
||||
2024/09/10-07:14:45.568041 7f7ecea006c0 Delete type=3 #212
|
||||
2024/09/10-07:14:45.568192 7f7ecea006c0 Delete type=0 #214
|
||||
2024/09/10-07:20:33.817119 7f7ecd6006c0 Level-0 table #219: started
|
||||
2024/09/10-07:20:33.817259 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
|
||||
2024/09/10-07:20:33.853842 7f7ecd6006c0 Delete type=0 #217
|
||||
2024/09/10-07:20:33.990487 7f7ecd6006c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.990597 7f7ecd6006c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
8
packs/runes/LOG.old
Normal file
8
packs/runes/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.266111 7f7ed4e006c0 Recovering log #209
|
||||
2024/09/09-21:51:17.276764 7f7ed4e006c0 Delete type=3 #207
|
||||
2024/09/09-21:51:17.276860 7f7ed4e006c0 Delete type=0 #209
|
||||
2024/09/09-21:52:48.668305 7f7ecd6006c0 Level-0 table #215: started
|
||||
2024/09/09-21:52:48.668347 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
|
||||
2024/09/09-21:52:48.674748 7f7ecd6006c0 Delete type=0 #213
|
||||
2024/09/09-21:52:48.696639 7f7ecd6006c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.696713 7f7ecd6006c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
BIN
packs/runes/MANIFEST-000216
Normal file
BIN
packs/runes/MANIFEST-000216
Normal file
Binary file not shown.
BIN
packs/scenes/000127.ldb
Normal file
BIN
packs/scenes/000127.ldb
Normal file
Binary file not shown.
0
packs/scenes/000134.log
Normal file
0
packs/scenes/000134.log
Normal file
1
packs/scenes/CURRENT
Normal file
1
packs/scenes/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000132
|
0
packs/scenes/LOCK
Normal file
0
packs/scenes/LOCK
Normal file
8
packs/scenes/LOG
Normal file
8
packs/scenes/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:45.696006 7f7ecf4006c0 Recovering log #130
|
||||
2024/09/10-07:14:45.752701 7f7ecf4006c0 Delete type=3 #128
|
||||
2024/09/10-07:14:45.752833 7f7ecf4006c0 Delete type=0 #130
|
||||
2024/09/10-07:20:33.897005 7f7ecd6006c0 Level-0 table #135: started
|
||||
2024/09/10-07:20:33.897068 7f7ecd6006c0 Level-0 table #135: 0 bytes OK
|
||||
2024/09/10-07:20:33.928636 7f7ecd6006c0 Delete type=0 #133
|
||||
2024/09/10-07:20:33.990553 7f7ecd6006c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.990640 7f7ecd6006c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
8
packs/scenes/LOG.old
Normal file
8
packs/scenes/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.296296 7f7ecea006c0 Recovering log #125
|
||||
2024/09/09-21:51:17.307966 7f7ecea006c0 Delete type=3 #123
|
||||
2024/09/09-21:51:17.308176 7f7ecea006c0 Delete type=0 #125
|
||||
2024/09/09-21:52:48.682640 7f7ecd6006c0 Level-0 table #131: started
|
||||
2024/09/09-21:52:48.682688 7f7ecd6006c0 Level-0 table #131: 0 bytes OK
|
||||
2024/09/09-21:52:48.689372 7f7ecd6006c0 Delete type=0 #129
|
||||
2024/09/09-21:52:48.696686 7f7ecd6006c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.696741 7f7ecd6006c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
BIN
packs/scenes/MANIFEST-000132
Normal file
BIN
packs/scenes/MANIFEST-000132
Normal file
Binary file not shown.
BIN
packs/skills-creatures/000119.ldb
Normal file
BIN
packs/skills-creatures/000119.ldb
Normal file
Binary file not shown.
0
packs/skills-creatures/000126.log
Normal file
0
packs/skills-creatures/000126.log
Normal file
1
packs/skills-creatures/CURRENT
Normal file
1
packs/skills-creatures/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000124
|
0
packs/skills-creatures/LOCK
Normal file
0
packs/skills-creatures/LOCK
Normal file
8
packs/skills-creatures/LOG
Normal file
8
packs/skills-creatures/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:44.824622 7f7ecf4006c0 Recovering log #122
|
||||
2024/09/10-07:14:44.881625 7f7ecf4006c0 Delete type=3 #120
|
||||
2024/09/10-07:14:44.881742 7f7ecf4006c0 Delete type=0 #122
|
||||
2024/09/10-07:20:33.426241 7f7ecd6006c0 Level-0 table #127: started
|
||||
2024/09/10-07:20:33.426287 7f7ecd6006c0 Level-0 table #127: 0 bytes OK
|
||||
2024/09/10-07:20:33.462927 7f7ecd6006c0 Delete type=0 #125
|
||||
2024/09/10-07:20:33.538838 7f7ecd6006c0 Manual compaction at level-0 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.538919 7f7ecd6006c0 Manual compaction at level-1 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
8
packs/skills-creatures/LOG.old
Normal file
8
packs/skills-creatures/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.124273 7f7ecea006c0 Recovering log #117
|
||||
2024/09/09-21:51:17.134938 7f7ecea006c0 Delete type=3 #115
|
||||
2024/09/09-21:51:17.135076 7f7ecea006c0 Delete type=0 #117
|
||||
2024/09/09-21:52:48.604710 7f7ecd6006c0 Level-0 table #123: started
|
||||
2024/09/09-21:52:48.604782 7f7ecd6006c0 Level-0 table #123: 0 bytes OK
|
||||
2024/09/09-21:52:48.611122 7f7ecd6006c0 Delete type=0 #121
|
||||
2024/09/09-21:52:48.611368 7f7ecd6006c0 Manual compaction at level-0 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.611434 7f7ecd6006c0 Manual compaction at level-1 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
BIN
packs/skills-creatures/MANIFEST-000124
Normal file
BIN
packs/skills-creatures/MANIFEST-000124
Normal file
Binary file not shown.
BIN
packs/skills/000211.ldb
Normal file
BIN
packs/skills/000211.ldb
Normal file
Binary file not shown.
0
packs/skills/000218.log
Normal file
0
packs/skills/000218.log
Normal file
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000216
|
0
packs/skills/LOCK
Normal file
0
packs/skills/LOCK
Normal file
8
packs/skills/LOG
Normal file
8
packs/skills/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/10-07:14:44.767296 7f7ecfe006c0 Recovering log #214
|
||||
2024/09/10-07:14:44.820594 7f7ecfe006c0 Delete type=3 #212
|
||||
2024/09/10-07:14:44.820691 7f7ecfe006c0 Delete type=0 #214
|
||||
2024/09/10-07:20:33.501559 7f7ecd6006c0 Level-0 table #219: started
|
||||
2024/09/10-07:20:33.501629 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
|
||||
2024/09/10-07:20:33.538595 7f7ecd6006c0 Delete type=0 #217
|
||||
2024/09/10-07:20:33.538881 7f7ecd6006c0 Manual compaction at level-0 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
||||
2024/09/10-07:20:33.538953 7f7ecd6006c0 Manual compaction at level-1 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
8
packs/skills/LOG.old
Normal file
8
packs/skills/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2024/09/09-21:51:17.108857 7f7ecfe006c0 Recovering log #209
|
||||
2024/09/09-21:51:17.120456 7f7ecfe006c0 Delete type=3 #207
|
||||
2024/09/09-21:51:17.120652 7f7ecfe006c0 Delete type=0 #209
|
||||
2024/09/09-21:52:48.589940 7f7ecd6006c0 Level-0 table #215: started
|
||||
2024/09/09-21:52:48.589993 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
|
||||
2024/09/09-21:52:48.597050 7f7ecd6006c0 Delete type=0 #213
|
||||
2024/09/09-21:52:48.611333 7f7ecd6006c0 Manual compaction at level-0 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
||||
2024/09/09-21:52:48.611399 7f7ecd6006c0 Manual compaction at level-1 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user