Compare commits
28 Commits
fvtt-mourn
...
fvtt-mourn
| Author | SHA1 | Date | |
|---|---|---|---|
| c9e4f125b4 | |||
| 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 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.history/
|
||||
@@ -10,7 +10,7 @@ Books are mandatory to play and are available at : http://www.titam-france.fr
|
||||
|
||||
Système non-officiel pour le JDR Mournblade (Titam France).
|
||||
|
||||
Ce système a été autorisé par Ludospherik ( http://www.ludospherik.fr/ ), merci à eux !
|
||||
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
|
||||
|
||||
|
||||
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"
|
||||
}
|
||||
}
|
||||
}
|
||||
218
lang/fr.json
Normal file
218
lang/fr.json
Normal file
@@ -0,0 +1,218 @@
|
||||
{
|
||||
"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.equipment": "Equipement",
|
||||
"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",
|
||||
|
||||
"MNBL.attribute": "Attribut",
|
||||
"MNBL.Protections": "Protections",
|
||||
"MNBL.rune": "Rune"
|
||||
|
||||
}
|
||||
@@ -7,12 +7,12 @@ import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
import { MournbladeRollDialog } from "./mournblade-roll-dialog.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class MournbladeActorSheet extends ActorSheet {
|
||||
export class MournbladeActorSheet extends foundry.appv1.sheets.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,8 +25,8 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
let actorData = objectData
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let actorData = objectData
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
@@ -40,19 +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(),
|
||||
aspect: this.actor.getAspect(),
|
||||
marge: this.actor.getMarge(),
|
||||
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() || {}),
|
||||
combat: this.actor.getCombatValues(),
|
||||
equipements: duplicate(this.actor.getEquipments()),
|
||||
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: 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 foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
@@ -64,7 +75,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
return formData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
@@ -72,14 +83,14 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
const item = this.actor.items.get( itemId )
|
||||
item.sheet.render(true)
|
||||
})
|
||||
})
|
||||
// Delete Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
@@ -94,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 );
|
||||
@@ -125,25 +136,58 @@ 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;
|
||||
this.render(true);
|
||||
});
|
||||
});
|
||||
html.find('.item-equip').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.equipItem( li.data("item-id") );
|
||||
this.render(true);
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
|
||||
@@ -17,8 +17,8 @@ export class MournbladeActor extends Actor {
|
||||
/**
|
||||
* Override the create() function to provide additional SoS functionality.
|
||||
*
|
||||
* This overrided create() function adds initial items
|
||||
* Namely: Basic skills, money,
|
||||
* This overrided create() function adds initial items
|
||||
* Namely: Basic skills, money,
|
||||
*
|
||||
* @param {Object} data Barebones actor data which this function adds onto.
|
||||
* @param {Object} options (Unused) Additional options which customize the creation workflow.
|
||||
@@ -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,25 +195,27 @@ 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;
|
||||
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
|
||||
}
|
||||
if (fa > fb) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
})
|
||||
}
|
||||
return protection
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getAspect() {
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? this.system.balance.loi : this.system.balance.chaos
|
||||
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)
|
||||
return Math.abs(this.system.balance.loi - this.system.balance.chaos)
|
||||
}
|
||||
getAlignement() {
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? "loyal" : "chaotique"
|
||||
@@ -167,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(),
|
||||
@@ -175,18 +248,10 @@ 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() {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async prepareData() {
|
||||
super.prepareData();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareDerivedData() {
|
||||
@@ -215,20 +280,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)
|
||||
@@ -244,6 +346,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
|
||||
@@ -274,13 +414,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 })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -301,6 +441,9 @@ export class MournbladeActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonusDegats() {
|
||||
if (this.type == "creature") {
|
||||
return 0
|
||||
}
|
||||
return __degatsBonus[this.system.attributs.pui.value]
|
||||
}
|
||||
|
||||
@@ -317,13 +460,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 });
|
||||
}
|
||||
@@ -342,11 +485,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)
|
||||
@@ -355,15 +497,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) {
|
||||
@@ -371,24 +553,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
|
||||
@@ -397,7 +589,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)
|
||||
}
|
||||
@@ -411,33 +602,115 @@ 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)
|
||||
let roll = new Roll(arme.system.totalDegats).roll({ async: false })
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
//Unused rollData.degatsFormula = arme.system.totalDegats
|
||||
let roll = await new Roll(arme.system.totalDegats).roll()
|
||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
|
||||
let rollData = {
|
||||
arme: arme,
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -4,12 +4,12 @@ import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
* Extend the basic ItemSheet with some very simple modifications
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class MournbladeItemSheet extends ItemSheet {
|
||||
export class MournbladeItemSheet extends foundry.appv1.sheets.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,8 +48,8 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
let itemData = objectData
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let itemData = objectData
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: this.id,
|
||||
@@ -63,10 +63,15 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
limited: this.object.limited,
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
description: await foundry.applications.ux.TextEditor.implementation.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 foundry.applications.ux.TextEditor.implementation.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 */
|
||||
@@ -29,7 +30,7 @@ Hooks.once("init", async function () {
|
||||
MournbladeUtility.preloadHandlebarsTemplates();
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Set an initiative formula for the system
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "1d6",
|
||||
decimals: 1
|
||||
@@ -45,19 +46,21 @@ 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 });
|
||||
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-mournblade", MournbladeActorSheet, { types: ["personnage"], makeDefault: true })
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-mournblade", MournbladeCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-mournblade", MournbladeItemSheet, { makeDefault: true })
|
||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-mournblade", MournbladeItemSheet, { makeDefault: true })
|
||||
|
||||
MournbladeUtility.init();
|
||||
|
||||
|
||||
});
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -68,33 +71,19 @@ function welcomeMessage() {
|
||||
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 jeude rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.<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>
|
||||
` });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register world usage statistics
|
||||
function registerUsageCount( registerKey ) {
|
||||
if ( game.user.isGM ) {
|
||||
game.settings.register(registerKey, "world-key", {
|
||||
name: "Unique world key",
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: "",
|
||||
type: String
|
||||
});
|
||||
|
||||
let worldKey = game.settings.get(registerKey, "world-key")
|
||||
if ( worldKey == undefined || worldKey == "" ) {
|
||||
worldKey = randomID(32)
|
||||
game.settings.set(registerKey, "world-key", worldKey )
|
||||
}
|
||||
// Simple API counter
|
||||
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
|
||||
//$.ajaxSetup({
|
||||
//headers: { 'Access-Control-Allow-Origin': '*' }
|
||||
//})
|
||||
$.ajax(regURL)
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,6 +92,10 @@ function registerUsageCount( registerKey ) {
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once("ready", function () {
|
||||
|
||||
game.system.mournblade = {
|
||||
config : MournbladeConfig.getConfig(),
|
||||
}
|
||||
|
||||
MournbladeUtility.ready();
|
||||
// User warning
|
||||
if (!game.user.isGM && game.user.character == undefined) {
|
||||
@@ -112,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
|
||||
});
|
||||
}
|
||||
registerUsageCount('fvtt-mournblade')
|
||||
|
||||
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();
|
||||
});
|
||||
|
||||
@@ -135,4 +137,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ export class MournbladeRollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData ) {
|
||||
|
||||
let options = { classes: ["MournbladeDialog"], width: 340, height: 420, 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-mournblade/templates/roll-dialog-generic.html', rollData);
|
||||
let options = { classes: ["MournbladeDialog"], width: 340, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-mournblade/templates/roll-dialog-generic.html', rollData);
|
||||
|
||||
return new MournbladeRollDialog(actor, rollData, html, options );
|
||||
}
|
||||
@@ -16,16 +16,16 @@ export class MournbladeRollDialog extends Dialog {
|
||||
let conf = {
|
||||
title: "Test de Capacité",
|
||||
content: html,
|
||||
buttons: {
|
||||
buttons: {
|
||||
rolld10: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Lancer 1d10",
|
||||
callback: () => { this.roll("1d10") }
|
||||
callback: () => { this.roll("1d10") }
|
||||
},
|
||||
rolld20: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Lancer 1d20",
|
||||
callback: () => { this.roll("1d20") }
|
||||
callback: () => { this.roll("1d20") }
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
@@ -52,28 +52,69 @@ 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)
|
||||
})
|
||||
html.find('#attrKey').change(async (event) => {
|
||||
this.rollData.attrKey = String(event.currentTarget.value)
|
||||
})
|
||||
})
|
||||
html.find('#runemode').change(async (event) => {
|
||||
this.rollData.runemode = String(event.currentTarget.value)
|
||||
})
|
||||
})
|
||||
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)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
@@ -8,15 +8,13 @@ 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('renderChatMessageHTML', (log, html, data) => MournbladeUtility.chatListeners(html))
|
||||
Hooks.on("getChatMessageContextOptions", (html, options) => MournbladeUtility.chatRollMenu(html, options))
|
||||
Hooks.on('renderChatMessageHTML', (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")
|
||||
$(html).on("click", '.predilection-reroll', async event => {
|
||||
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,10 +164,9 @@ 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);
|
||||
return foundry.applications.handlebars.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,276 @@ 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)
|
||||
content: await foundry.applications.handlebars.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 + ".")
|
||||
} else {
|
||||
ui.notifications.warn("Pas de cible sélectionnée ou pas d'arme de défense équipée.")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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 +580,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 +598,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 +651,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 +661,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 +673,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.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -481,86 +696,86 @@ export class MournbladeUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyBonneAventureRoll(li, changed, addedBonus) {
|
||||
let msgId = li.data("message-id")
|
||||
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.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 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 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 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 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 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 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 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 +842,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 +854,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"}}
|
||||
|
||||
0
packs/armes/000233.log
Normal file
0
packs/armes/000233.log
Normal file
BIN
packs/armes/000235.ldb
Normal file
BIN
packs/armes/000235.ldb
Normal file
Binary file not shown.
1
packs/armes/CURRENT
Normal file
1
packs/armes/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000221
|
||||
0
packs/armes/LOCK
Normal file
0
packs/armes/LOCK
Normal file
17
packs/armes/LOG
Normal file
17
packs/armes/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.404410 7fad8f7fe6c0 Recovering log #219
|
||||
2025/05/01-19:59:13.404447 7fad8f7fe6c0 Recovering log #231
|
||||
2025/05/01-19:59:13.456319 7fad8f7fe6c0 Delete type=0 #231
|
||||
2025/05/01-19:59:13.456390 7fad8f7fe6c0 Delete type=0 #219
|
||||
2025/05/01-19:59:13.456430 7fad8f7fe6c0 Delete type=3 #217
|
||||
2025/05/01-20:40:06.630698 7fad8effd6c0 Level-0 table #234: started
|
||||
2025/05/01-20:40:06.634192 7fad8effd6c0 Level-0 table #234: 14422 bytes OK
|
||||
2025/05/01-20:40:06.640500 7fad8effd6c0 Delete type=0 #232
|
||||
2025/05/01-20:40:06.664516 7fad8effd6c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.675130 7fad8effd6c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at '!items!wv5EiePmPTpqFutt' @ 239 : 1
|
||||
2025/05/01-20:40:06.675140 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.678758 7fad8effd6c0 Generated table #235@1: 48 keys, 14422 bytes
|
||||
2025/05/01-20:40:06.678804 7fad8effd6c0 Compacted 1@1 + 1@2 files => 14422 bytes
|
||||
2025/05/01-20:40:06.684949 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.685040 7fad8effd6c0 Delete type=2 #212
|
||||
2025/05/01-20:40:06.685158 7fad8effd6c0 Delete type=2 #234
|
||||
2025/05/01-20:40:06.711796 7fad8effd6c0 Manual compaction at level-1 from '!items!wv5EiePmPTpqFutt' @ 239 : 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/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)
|
||||
BIN
packs/armes/MANIFEST-000221
Normal file
BIN
packs/armes/MANIFEST-000221
Normal file
Binary file not shown.
BIN
packs/armes/MANIFEST-000229
Normal file
BIN
packs/armes/MANIFEST-000229
Normal file
Binary file not shown.
0
packs/dons/000232.log
Normal file
0
packs/dons/000232.log
Normal file
BIN
packs/dons/000234.ldb
Normal file
BIN
packs/dons/000234.ldb
Normal file
Binary file not shown.
1
packs/dons/CURRENT
Normal file
1
packs/dons/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000220
|
||||
0
packs/dons/LOCK
Normal file
0
packs/dons/LOCK
Normal file
17
packs/dons/LOG
Normal file
17
packs/dons/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.580839 7fad8ffff6c0 Recovering log #218
|
||||
2025/05/01-19:59:13.580868 7fad8ffff6c0 Recovering log #230
|
||||
2025/05/01-19:59:13.634048 7fad8ffff6c0 Delete type=0 #230
|
||||
2025/05/01-19:59:13.634180 7fad8ffff6c0 Delete type=0 #218
|
||||
2025/05/01-19:59:13.634255 7fad8ffff6c0 Delete type=3 #216
|
||||
2025/05/01-20:40:06.742304 7fad8effd6c0 Level-0 table #233: started
|
||||
2025/05/01-20:40:06.745942 7fad8effd6c0 Level-0 table #233: 15890 bytes OK
|
||||
2025/05/01-20:40:06.753021 7fad8effd6c0 Delete type=0 #231
|
||||
2025/05/01-20:40:06.753355 7fad8effd6c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.785179 7fad8effd6c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at '!items!zzz9JrtWjELdoAfK' @ 120 : 1
|
||||
2025/05/01-20:40:06.785187 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.788604 7fad8effd6c0 Generated table #234@1: 30 keys, 15890 bytes
|
||||
2025/05/01-20:40:06.788633 7fad8effd6c0 Compacted 1@1 + 1@2 files => 15890 bytes
|
||||
2025/05/01-20:40:06.794726 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.794865 7fad8effd6c0 Delete type=2 #211
|
||||
2025/05/01-20:40:06.794985 7fad8effd6c0 Delete type=2 #233
|
||||
2025/05/01-20:40:06.795083 7fad8effd6c0 Manual compaction at level-1 from '!items!zzz9JrtWjELdoAfK' @ 120 : 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/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)
|
||||
BIN
packs/dons/MANIFEST-000220
Normal file
BIN
packs/dons/MANIFEST-000220
Normal file
Binary file not shown.
BIN
packs/dons/MANIFEST-000228
Normal file
BIN
packs/dons/MANIFEST-000228
Normal file
Binary file not shown.
0
packs/equipement/000232.log
Normal file
0
packs/equipement/000232.log
Normal file
BIN
packs/equipement/000234.ldb
Normal file
BIN
packs/equipement/000234.ldb
Normal file
Binary file not shown.
1
packs/equipement/CURRENT
Normal file
1
packs/equipement/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000220
|
||||
0
packs/equipement/LOCK
Normal file
0
packs/equipement/LOCK
Normal file
17
packs/equipement/LOG
Normal file
17
packs/equipement/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.522396 7fad94ff96c0 Recovering log #218
|
||||
2025/05/01-19:59:13.522423 7fad94ff96c0 Recovering log #230
|
||||
2025/05/01-19:59:13.578113 7fad94ff96c0 Delete type=0 #230
|
||||
2025/05/01-19:59:13.578220 7fad94ff96c0 Delete type=0 #218
|
||||
2025/05/01-19:59:13.578283 7fad94ff96c0 Delete type=3 #216
|
||||
2025/05/01-20:40:06.722073 7fad8effd6c0 Level-0 table #233: started
|
||||
2025/05/01-20:40:06.725291 7fad8effd6c0 Level-0 table #233: 9727 bytes OK
|
||||
2025/05/01-20:40:06.731851 7fad8effd6c0 Delete type=0 #231
|
||||
2025/05/01-20:40:06.753320 7fad8effd6c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.763595 7fad8effd6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at '!items!y47dBO3Mf5Pn7tOd' @ 220 : 1
|
||||
2025/05/01-20:40:06.763602 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.767733 7fad8effd6c0 Generated table #234@1: 55 keys, 9727 bytes
|
||||
2025/05/01-20:40:06.767783 7fad8effd6c0 Compacted 1@1 + 1@2 files => 9727 bytes
|
||||
2025/05/01-20:40:06.773941 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.774135 7fad8effd6c0 Delete type=2 #211
|
||||
2025/05/01-20:40:06.774350 7fad8effd6c0 Delete type=2 #233
|
||||
2025/05/01-20:40:06.795066 7fad8effd6c0 Manual compaction at level-1 from '!items!y47dBO3Mf5Pn7tOd' @ 220 : 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/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)
|
||||
BIN
packs/equipement/MANIFEST-000220
Normal file
BIN
packs/equipement/MANIFEST-000220
Normal file
Binary file not shown.
BIN
packs/equipement/MANIFEST-000228
Normal file
BIN
packs/equipement/MANIFEST-000228
Normal file
Binary file not shown.
0
packs/heritages/000232.log
Normal file
0
packs/heritages/000232.log
Normal file
BIN
packs/heritages/000234.ldb
Normal file
BIN
packs/heritages/000234.ldb
Normal file
Binary file not shown.
1
packs/heritages/CURRENT
Normal file
1
packs/heritages/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000220
|
||||
0
packs/heritages/LOCK
Normal file
0
packs/heritages/LOCK
Normal file
17
packs/heritages/LOG
Normal file
17
packs/heritages/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.692563 7fad8f7fe6c0 Recovering log #218
|
||||
2025/05/01-19:59:13.692594 7fad8f7fe6c0 Recovering log #230
|
||||
2025/05/01-19:59:13.751135 7fad8f7fe6c0 Delete type=0 #230
|
||||
2025/05/01-19:59:13.751215 7fad8f7fe6c0 Delete type=0 #218
|
||||
2025/05/01-19:59:13.751260 7fad8f7fe6c0 Delete type=3 #216
|
||||
2025/05/01-20:40:06.795194 7fad8effd6c0 Level-0 table #233: started
|
||||
2025/05/01-20:40:06.798717 7fad8effd6c0 Level-0 table #233: 6896 bytes OK
|
||||
2025/05/01-20:40:06.805344 7fad8effd6c0 Delete type=0 #231
|
||||
2025/05/01-20:40:06.836956 7fad8effd6c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.837016 7fad8effd6c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at '!items!ui4JGsGwHNlSXVK3' @ 40 : 1
|
||||
2025/05/01-20:40:06.837022 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.840346 7fad8effd6c0 Generated table #234@1: 10 keys, 6896 bytes
|
||||
2025/05/01-20:40:06.840376 7fad8effd6c0 Compacted 1@1 + 1@2 files => 6896 bytes
|
||||
2025/05/01-20:40:06.846429 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.846541 7fad8effd6c0 Delete type=2 #211
|
||||
2025/05/01-20:40:06.846672 7fad8effd6c0 Delete type=2 #233
|
||||
2025/05/01-20:40:06.878912 7fad8effd6c0 Manual compaction at level-1 from '!items!ui4JGsGwHNlSXVK3' @ 40 : 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/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)
|
||||
BIN
packs/heritages/MANIFEST-000220
Normal file
BIN
packs/heritages/MANIFEST-000220
Normal file
Binary file not shown.
BIN
packs/heritages/MANIFEST-000228
Normal file
BIN
packs/heritages/MANIFEST-000228
Normal file
Binary file not shown.
0
packs/metiers/000232.log
Normal file
0
packs/metiers/000232.log
Normal file
BIN
packs/metiers/000234.ldb
Normal file
BIN
packs/metiers/000234.ldb
Normal file
Binary file not shown.
1
packs/metiers/CURRENT
Normal file
1
packs/metiers/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000220
|
||||
0
packs/metiers/LOCK
Normal file
0
packs/metiers/LOCK
Normal file
17
packs/metiers/LOG
Normal file
17
packs/metiers/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.753968 7fad94ff96c0 Recovering log #218
|
||||
2025/05/01-19:59:13.754006 7fad94ff96c0 Recovering log #230
|
||||
2025/05/01-19:59:13.815180 7fad94ff96c0 Delete type=0 #230
|
||||
2025/05/01-19:59:13.815253 7fad94ff96c0 Delete type=0 #218
|
||||
2025/05/01-19:59:13.815293 7fad94ff96c0 Delete type=3 #216
|
||||
2025/05/01-20:40:06.805500 7fad8effd6c0 Level-0 table #233: started
|
||||
2025/05/01-20:40:06.809047 7fad8effd6c0 Level-0 table #233: 14917 bytes OK
|
||||
2025/05/01-20:40:06.815729 7fad8effd6c0 Delete type=0 #231
|
||||
2025/05/01-20:40:06.836975 7fad8effd6c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.846758 7fad8effd6c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at '!items!xlyFCQClBZ1N3O1B' @ 68 : 1
|
||||
2025/05/01-20:40:06.846768 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.850361 7fad8effd6c0 Generated table #234@1: 17 keys, 14917 bytes
|
||||
2025/05/01-20:40:06.850390 7fad8effd6c0 Compacted 1@1 + 1@2 files => 14917 bytes
|
||||
2025/05/01-20:40:06.856955 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.857113 7fad8effd6c0 Delete type=2 #211
|
||||
2025/05/01-20:40:06.857266 7fad8effd6c0 Delete type=2 #233
|
||||
2025/05/01-20:40:06.878923 7fad8effd6c0 Manual compaction at level-1 from '!items!xlyFCQClBZ1N3O1B' @ 68 : 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/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)
|
||||
BIN
packs/metiers/MANIFEST-000220
Normal file
BIN
packs/metiers/MANIFEST-000220
Normal file
Binary file not shown.
BIN
packs/metiers/MANIFEST-000228
Normal file
BIN
packs/metiers/MANIFEST-000228
Normal file
Binary file not shown.
0
packs/origines/000232.log
Normal file
0
packs/origines/000232.log
Normal file
BIN
packs/origines/000234.ldb
Normal file
BIN
packs/origines/000234.ldb
Normal file
Binary file not shown.
1
packs/origines/CURRENT
Normal file
1
packs/origines/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000220
|
||||
0
packs/origines/LOCK
Normal file
0
packs/origines/LOCK
Normal file
17
packs/origines/LOG
Normal file
17
packs/origines/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.636438 7fad957fa6c0 Recovering log #218
|
||||
2025/05/01-19:59:13.636464 7fad957fa6c0 Recovering log #230
|
||||
2025/05/01-19:59:13.689669 7fad957fa6c0 Delete type=0 #230
|
||||
2025/05/01-19:59:13.689733 7fad957fa6c0 Delete type=0 #218
|
||||
2025/05/01-19:59:13.689767 7fad957fa6c0 Delete type=3 #216
|
||||
2025/05/01-20:40:06.732058 7fad8effd6c0 Level-0 table #233: started
|
||||
2025/05/01-20:40:06.735754 7fad8effd6c0 Level-0 table #233: 9362 bytes OK
|
||||
2025/05/01-20:40:06.742187 7fad8effd6c0 Delete type=0 #231
|
||||
2025/05/01-20:40:06.753338 7fad8effd6c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.774492 7fad8effd6c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at '!items!yBvkQb9S64s908sR' @ 80 : 1
|
||||
2025/05/01-20:40:06.774508 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.777817 7fad8effd6c0 Generated table #234@1: 20 keys, 9362 bytes
|
||||
2025/05/01-20:40:06.777855 7fad8effd6c0 Compacted 1@1 + 1@2 files => 9362 bytes
|
||||
2025/05/01-20:40:06.784851 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.784962 7fad8effd6c0 Delete type=2 #211
|
||||
2025/05/01-20:40:06.785089 7fad8effd6c0 Delete type=2 #233
|
||||
2025/05/01-20:40:06.795076 7fad8effd6c0 Manual compaction at level-1 from '!items!yBvkQb9S64s908sR' @ 80 : 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/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)
|
||||
BIN
packs/origines/MANIFEST-000220
Normal file
BIN
packs/origines/MANIFEST-000220
Normal file
Binary file not shown.
BIN
packs/origines/MANIFEST-000228
Normal file
BIN
packs/origines/MANIFEST-000228
Normal file
Binary file not shown.
0
packs/pnj-creatures/000128.log
Normal file
0
packs/pnj-creatures/000128.log
Normal file
BIN
packs/pnj-creatures/000130.ldb
Normal file
BIN
packs/pnj-creatures/000130.ldb
Normal file
Binary file not shown.
1
packs/pnj-creatures/CURRENT
Normal file
1
packs/pnj-creatures/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000116
|
||||
0
packs/pnj-creatures/LOCK
Normal file
0
packs/pnj-creatures/LOCK
Normal file
17
packs/pnj-creatures/LOG
Normal file
17
packs/pnj-creatures/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.228260 7fad94ff96c0 Recovering log #114
|
||||
2025/05/01-19:59:13.228290 7fad94ff96c0 Recovering log #126
|
||||
2025/05/01-19:59:13.284461 7fad94ff96c0 Delete type=0 #126
|
||||
2025/05/01-19:59:13.284677 7fad94ff96c0 Delete type=0 #114
|
||||
2025/05/01-19:59:13.284774 7fad94ff96c0 Delete type=3 #112
|
||||
2025/05/01-20:40:06.640617 7fad8effd6c0 Level-0 table #129: started
|
||||
2025/05/01-20:40:06.647756 7fad8effd6c0 Level-0 table #129: 423653 bytes OK
|
||||
2025/05/01-20:40:06.654365 7fad8effd6c0 Delete type=0 #127
|
||||
2025/05/01-20:40:06.664527 7fad8effd6c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.695911 7fad8effd6c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at '!actors.items!vwUVYPpU0V6bEDLa.t692JcsGHG4YJIlM' @ 2765 : 1
|
||||
2025/05/01-20:40:06.695928 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.704206 7fad8effd6c0 Generated table #130@1: 694 keys, 424214 bytes
|
||||
2025/05/01-20:40:06.704245 7fad8effd6c0 Compacted 1@1 + 1@2 files => 424214 bytes
|
||||
2025/05/01-20:40:06.711236 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.711415 7fad8effd6c0 Delete type=2 #107
|
||||
2025/05/01-20:40:06.711670 7fad8effd6c0 Delete type=2 #129
|
||||
2025/05/01-20:40:06.711825 7fad8effd6c0 Manual compaction at level-1 from '!actors.items!vwUVYPpU0V6bEDLa.t692JcsGHG4YJIlM' @ 2765 : 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/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)
|
||||
BIN
packs/pnj-creatures/MANIFEST-000116
Normal file
BIN
packs/pnj-creatures/MANIFEST-000116
Normal file
Binary file not shown.
BIN
packs/pnj-creatures/MANIFEST-000124
Normal file
BIN
packs/pnj-creatures/MANIFEST-000124
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"}
|
||||
|
||||
0
packs/protection/000232.log
Normal file
0
packs/protection/000232.log
Normal file
BIN
packs/protection/000234.ldb
Normal file
BIN
packs/protection/000234.ldb
Normal file
Binary file not shown.
1
packs/protection/CURRENT
Normal file
1
packs/protection/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000220
|
||||
0
packs/protection/LOCK
Normal file
0
packs/protection/LOCK
Normal file
17
packs/protection/LOG
Normal file
17
packs/protection/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.459137 7fad957fa6c0 Recovering log #218
|
||||
2025/05/01-19:59:13.459172 7fad957fa6c0 Recovering log #230
|
||||
2025/05/01-19:59:13.519467 7fad957fa6c0 Delete type=0 #230
|
||||
2025/05/01-19:59:13.519571 7fad957fa6c0 Delete type=0 #218
|
||||
2025/05/01-19:59:13.519639 7fad957fa6c0 Delete type=3 #216
|
||||
2025/05/01-20:40:06.711943 7fad8effd6c0 Level-0 table #233: started
|
||||
2025/05/01-20:40:06.715460 7fad8effd6c0 Level-0 table #233: 2866 bytes OK
|
||||
2025/05/01-20:40:06.721938 7fad8effd6c0 Delete type=0 #231
|
||||
2025/05/01-20:40:06.753295 7fad8effd6c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.753377 7fad8effd6c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at '!items!veoS6Gtzj6Dq087V' @ 28 : 1
|
||||
2025/05/01-20:40:06.753389 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.756847 7fad8effd6c0 Generated table #234@1: 7 keys, 2866 bytes
|
||||
2025/05/01-20:40:06.756890 7fad8effd6c0 Compacted 1@1 + 1@2 files => 2866 bytes
|
||||
2025/05/01-20:40:06.763265 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.763390 7fad8effd6c0 Delete type=2 #211
|
||||
2025/05/01-20:40:06.763517 7fad8effd6c0 Delete type=2 #233
|
||||
2025/05/01-20:40:06.795056 7fad8effd6c0 Manual compaction at level-1 from '!items!veoS6Gtzj6Dq087V' @ 28 : 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/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)
|
||||
BIN
packs/protection/MANIFEST-000220
Normal file
BIN
packs/protection/MANIFEST-000220
Normal file
Binary file not shown.
BIN
packs/protection/MANIFEST-000228
Normal file
BIN
packs/protection/MANIFEST-000228
Normal file
Binary file not shown.
0
packs/runes/000232.log
Normal file
0
packs/runes/000232.log
Normal file
BIN
packs/runes/000234.ldb
Normal file
BIN
packs/runes/000234.ldb
Normal file
Binary file not shown.
1
packs/runes/CURRENT
Normal file
1
packs/runes/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000220
|
||||
0
packs/runes/LOCK
Normal file
0
packs/runes/LOCK
Normal file
17
packs/runes/LOG
Normal file
17
packs/runes/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:13.951217 7fad8f7fe6c0 Recovering log #218
|
||||
2025/05/01-19:59:13.951252 7fad8f7fe6c0 Recovering log #230
|
||||
2025/05/01-19:59:14.010531 7fad8f7fe6c0 Delete type=0 #230
|
||||
2025/05/01-19:59:14.010644 7fad8f7fe6c0 Delete type=0 #218
|
||||
2025/05/01-19:59:14.010710 7fad8f7fe6c0 Delete type=3 #216
|
||||
2025/05/01-20:40:06.879005 7fad8effd6c0 Level-0 table #233: started
|
||||
2025/05/01-20:40:06.882368 7fad8effd6c0 Level-0 table #233: 33708 bytes OK
|
||||
2025/05/01-20:40:06.889400 7fad8effd6c0 Delete type=0 #231
|
||||
2025/05/01-20:40:06.920445 7fad8effd6c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.920540 7fad8effd6c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at '!items!xnCf2xIPzdsUoBTy' @ 180 : 1
|
||||
2025/05/01-20:40:06.920554 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.924361 7fad8effd6c0 Generated table #234@1: 45 keys, 33708 bytes
|
||||
2025/05/01-20:40:06.924378 7fad8effd6c0 Compacted 1@1 + 1@2 files => 33708 bytes
|
||||
2025/05/01-20:40:06.930331 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.930441 7fad8effd6c0 Delete type=2 #211
|
||||
2025/05/01-20:40:06.930542 7fad8effd6c0 Delete type=2 #233
|
||||
2025/05/01-20:40:06.957681 7fad8effd6c0 Manual compaction at level-1 from '!items!xnCf2xIPzdsUoBTy' @ 180 : 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/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)
|
||||
BIN
packs/runes/MANIFEST-000220
Normal file
BIN
packs/runes/MANIFEST-000220
Normal file
Binary file not shown.
BIN
packs/runes/MANIFEST-000228
Normal file
BIN
packs/runes/MANIFEST-000228
Normal file
Binary file not shown.
0
packs/scenes/000148.log
Normal file
0
packs/scenes/000148.log
Normal file
BIN
packs/scenes/000150.ldb
Normal file
BIN
packs/scenes/000150.ldb
Normal file
Binary file not shown.
1
packs/scenes/CURRENT
Normal file
1
packs/scenes/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000136
|
||||
0
packs/scenes/LOCK
Normal file
0
packs/scenes/LOCK
Normal file
17
packs/scenes/LOG
Normal file
17
packs/scenes/LOG
Normal file
@@ -0,0 +1,17 @@
|
||||
2025/05/01-19:59:14.070146 7fad94ff96c0 Recovering log #134
|
||||
2025/05/01-19:59:14.070195 7fad94ff96c0 Recovering log #146
|
||||
2025/05/01-19:59:14.130070 7fad94ff96c0 Delete type=0 #146
|
||||
2025/05/01-19:59:14.130135 7fad94ff96c0 Delete type=0 #134
|
||||
2025/05/01-19:59:14.130165 7fad94ff96c0 Delete type=3 #132
|
||||
2025/05/01-20:40:06.899798 7fad8effd6c0 Level-0 table #149: started
|
||||
2025/05/01-20:40:06.903123 7fad8effd6c0 Level-0 table #149: 1383 bytes OK
|
||||
2025/05/01-20:40:06.909413 7fad8effd6c0 Delete type=0 #147
|
||||
2025/05/01-20:40:06.920493 7fad8effd6c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
||||
2025/05/01-20:40:06.930617 7fad8effd6c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at '!scenes!ZDV2IwduhOXTxy72' @ 4 : 1
|
||||
2025/05/01-20:40:06.930624 7fad8effd6c0 Compacting 1@1 + 1@2 files
|
||||
2025/05/01-20:40:06.934015 7fad8effd6c0 Generated table #150@1: 1 keys, 1383 bytes
|
||||
2025/05/01-20:40:06.934056 7fad8effd6c0 Compacted 1@1 + 1@2 files => 1383 bytes
|
||||
2025/05/01-20:40:06.940412 7fad8effd6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||
2025/05/01-20:40:06.940518 7fad8effd6c0 Delete type=2 #127
|
||||
2025/05/01-20:40:06.940625 7fad8effd6c0 Delete type=2 #149
|
||||
2025/05/01-20:40:06.957696 7fad8effd6c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 4 : 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/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)
|
||||
BIN
packs/scenes/MANIFEST-000136
Normal file
BIN
packs/scenes/MANIFEST-000136
Normal file
Binary file not shown.
BIN
packs/scenes/MANIFEST-000144
Normal file
BIN
packs/scenes/MANIFEST-000144
Normal file
Binary file not shown.
0
packs/skills-creatures/000140.log
Normal file
0
packs/skills-creatures/000140.log
Normal file
BIN
packs/skills-creatures/000142.ldb
Normal file
BIN
packs/skills-creatures/000142.ldb
Normal file
Binary file not shown.
1
packs/skills-creatures/CURRENT
Normal file
1
packs/skills-creatures/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000128
|
||||
0
packs/skills-creatures/LOCK
Normal file
0
packs/skills-creatures/LOCK
Normal file
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user