Compare commits
38 Commits
fvtt-mourn
...
v10
Author | SHA1 | Date | |
---|---|---|---|
580a2ccaba | |||
699dba5511 | |||
aac552102a | |||
4762dc33ac | |||
0a030460e4 | |||
ed2dc58680 | |||
9c20f277ea | |||
2a8617d781 | |||
91ad26730a | |||
e1816b3dd7 | |||
c48401a199 | |||
f487908ecd | |||
e9dc31ada1 | |||
e504427dbb | |||
6aa63f9a98 | |||
861aa19637 | |||
ddb3f9dee1 | |||
da074d6ea1 | |||
1c0c722bd0 | |||
fef42b7093 | |||
a63ec19362 | |||
a26af23c9c | |||
983bc6a2ed | |||
da6d6584c4 | |||
f08ec8eaff | |||
c34bfbf229 | |||
e7de42cf16 | |||
0f2348fec6 | |||
98ccd8fde1 | |||
fcec785f00 | |||
734945d68e | |||
33916c9ec2 | |||
dda8fee616 | |||
1730a8d390 | |||
4a0a57870c | |||
8d43ae6b6e | |||
3f91a161ab | |||
1e72eaec04 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.history/
|
23
README.md
23
README.md
|
@ -1,4 +1,23 @@
|
|||
# fvtt-mournblade
|
||||
# Système Foundry pour Mournblade (French RPG, Titam France/Sombres Projets)
|
||||
|
||||
FoundryVTT system for Mournblade from Sombres Projets
|
||||
## EN
|
||||
|
||||
Unofficial system for Mournblade (French version from Titam France).
|
||||
|
||||
Books are mandatory to play and are available at : http://www.titam-france.fr
|
||||
|
||||
## FR
|
||||
|
||||
Système non-officiel pour le JDR Mournblade (Titam France).
|
||||
|
||||
Ce système a été autorisé par Le Département des Sombres Projets, merci à eux !
|
||||
|
||||
Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http://www.titam-france.fr
|
||||
|
||||
# Credits
|
||||
|
||||
Mournblade, le jeu de rôle de Sword & Sorcery, is a property of Titam France/Sombres Projets.
|
||||
|
||||
# Developmement
|
||||
|
||||
LeRatierBretonnien
|
||||
|
|
BIN
assets/ui/landing_page_mournblade.webp
Normal file
BIN
assets/ui/landing_page_mournblade.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 380 KiB |
28
lang/fr.json
Normal file
28
lang/fr.json
Normal file
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade/templates/actor-sheet.html",
|
||||
width: 640,
|
||||
|
@ -25,9 +25,8 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = MournbladeUtility.data(this.object);
|
||||
|
||||
let actorData = duplicate(MournbladeUtility.templateData(this.object))
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let actorData = objectData
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
|
@ -37,21 +36,34 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||
name: objectData.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
data: actorData,
|
||||
data: actorData.system,
|
||||
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills(),
|
||||
armes: duplicate(this.actor.getWeapons()),
|
||||
protections: duplicate(this.actor.getArmors()),
|
||||
dons: duplicate(this.actor.getDons()),
|
||||
armes: foundry.utils.duplicate(this.actor.getWeapons()),
|
||||
protections: foundry.utils.duplicate(this.actor.getArmors()),
|
||||
dons: foundry.utils.duplicate(this.actor.getDons()),
|
||||
pactes: foundry.utils.duplicate(this.actor.getPactes()),
|
||||
alignement: this.actor.getAlignement(),
|
||||
tendances:duplicate(this.actor.getTendances()),
|
||||
runes:duplicate(this.actor.getRunes()),
|
||||
origine: duplicate(this.actor.getOrigine() || {}),
|
||||
heritage: duplicate(this.actor.getHeritage() || {}),
|
||||
metier: duplicate(this.actor.getMetier() || {}),
|
||||
aspect: this.actor.getAspect(),
|
||||
marge: this.actor.getMarge(),
|
||||
tendances:foundry.utils.duplicate(this.actor.getTendances()),
|
||||
runes:foundry.utils.duplicate(this.actor.getRunes()),
|
||||
traitsChaotiques:foundry.utils.duplicate(this.actor.getTraitsChaotiques()),
|
||||
traitsEspeces: foundry.utils.duplicate(this.actor.getTraitsEspeces()),
|
||||
origine: foundry.utils.duplicate(this.actor.getOrigine() || {}),
|
||||
heritage: foundry.utils.duplicate(this.actor.getHeritage() || {}),
|
||||
metier: foundry.utils.duplicate(this.actor.getMetier() || {}),
|
||||
combat: this.actor.getCombatValues(),
|
||||
equipements: duplicate(this.actor.getEquipments()),
|
||||
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
|
||||
modifiers: foundry.utils.duplicate(this.actor.getModifiers()),
|
||||
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
|
||||
runeEffects: foundry.utils.duplicate(this.actor.getRuneEffects()),
|
||||
config: game.system.mournblade.config,
|
||||
protectionTotal: this.actor.getProtectionTotal(),
|
||||
santeMalus: this.actor.getStatusMalus(),
|
||||
ameMalus: this.actor.getAmeMalus(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
|
@ -93,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 );
|
||||
|
@ -114,17 +126,55 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||
let compId = li.data("item-id")
|
||||
this.actor.rollCompetence(attrKey, compId)
|
||||
})
|
||||
html.find('.roll-rune').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let runeId = li.data("item-id")
|
||||
this.actor.rollRune(runeId)
|
||||
})
|
||||
html.find('.roll-arme-offensif').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeOffensif(armeId)
|
||||
})
|
||||
html.find('.roll-assomer').click((event) => {
|
||||
this.actor.rollAssomer()
|
||||
})
|
||||
html.find('.roll-fuir').click((event) => {
|
||||
this.actor.rollFuir()
|
||||
})
|
||||
html.find('.roll-immobiliser').click((event) => {
|
||||
this.actor.rollImmobiliser()
|
||||
})
|
||||
html.find('.roll-arme-special').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeSpecial(armeId)
|
||||
})
|
||||
|
||||
html.find('.roll-arme-degats').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeDegats(armeId)
|
||||
})
|
||||
|
||||
html.find('.quantity-modify').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const value = Number($(event.currentTarget).data("quantite-value"))
|
||||
this.actor.incDecQuantity( li.data("item-id"), value );
|
||||
})
|
||||
html.find('.item-add').click((event) => {
|
||||
const itemType = $(event.currentTarget).data("type")
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||
})
|
||||
html.find('.sante-modify').click((event) => {
|
||||
const santeType = $(event.currentTarget).data("type")
|
||||
const value = $(event.currentTarget).data("value")
|
||||
this.actor.incDecSante(santeType, value, false)
|
||||
})
|
||||
html.find('.ame-modify').click((event) => {
|
||||
const value = $(event.currentTarget).data("value")
|
||||
this.actor.incDecAme(value)
|
||||
})
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
|
|
|
@ -31,7 +31,7 @@ export class MournbladeActor extends Actor {
|
|||
if (data instanceof Array) {
|
||||
return super.create(data, options);
|
||||
}
|
||||
// If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
|
||||
// If the created actor has items (only applicable to foundry.utils.duplicated actors) bypass the new actor creation logic
|
||||
if (data.items) {
|
||||
let actor = super.create(data, options);
|
||||
return actor;
|
||||
|
@ -41,138 +41,218 @@ 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.data.typearme == "contact" || arme.data.typearme == "contactjet") {
|
||||
arme.data.competence = duplicate(this.data.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
arme.data.attrKey = "pui"
|
||||
arme.data.totalDegats = arme.data.degats + "+" + combat.bonusDegatsTotal
|
||||
arme.data.totalOffensif = this.data.data.attributs.pui.value + arme.data.competence.data.niveau + arme.data.bonusmaniementoff
|
||||
if (arme.data.isdefense) {
|
||||
arme.data.totalDefensif = combat.defenseTotal + arme.data.competence.data.niveau + arme.data.bonusmaniementdef
|
||||
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
|
||||
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 + combat.attaqueModifier
|
||||
if (arme.system.isdefense) {
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
|
||||
}
|
||||
}
|
||||
if (arme.data.typearme == "jet" || arme.data.typearme == "tir") {
|
||||
arme.data.competence = duplicate(this.data.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
|
||||
arme.data.attrKey = "adr"
|
||||
arme.data.totalOffensif = this.data.data.attributs.adr.value + arme.data.competence.data.niveau + arme.data.bonusmaniementoff
|
||||
arme.data.totalDegats = arme.data.degats
|
||||
if (arme.data.isdefense) {
|
||||
arme.data.totalDefensif = combat.defenseTotal + arme.data.competence.data.niveau + arme.data.bonusmaniementdef
|
||||
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
|
||||
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 + 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
|
||||
}
|
||||
}
|
||||
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() {
|
||||
let armes = []
|
||||
for (let arme of this.data.items) {
|
||||
for (let arme of this.items) {
|
||||
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.data.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.data.items.filter(item => item.type == "tendance")
|
||||
return this.getItemSorted(["tendance"])
|
||||
}
|
||||
getRunes() {
|
||||
return this.data.items.filter(item => item.type == "rune")
|
||||
return this.getItemSorted(["rune"])
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getEquipments() {
|
||||
return this.data.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.data.items.filter(item => item.type == "protection")
|
||||
return this.getItemSorted(["protection"])
|
||||
}
|
||||
getRuneEffects() {
|
||||
return this.getItemSorted(["runeeffect"])
|
||||
}
|
||||
getOrigine() {
|
||||
return this.data.items.find(item => item.type == "origine")
|
||||
return this.items.find(item => item.type == "origine")
|
||||
}
|
||||
getMetier() {
|
||||
return this.data.items.find(item => item.type == "metier")
|
||||
return this.items.find(item => item.type == "metier")
|
||||
}
|
||||
getHeritage() {
|
||||
return this.data.items.find(item => item.type == "heritage")
|
||||
return this.items.find(item => item.type == "heritage")
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getSkills() {
|
||||
let comp = []
|
||||
for (let item of this.data.items) {
|
||||
item = duplicate(item)
|
||||
for (let item of this.items) {
|
||||
item = foundry.utils.duplicate(item)
|
||||
if (item.type == "competence") {
|
||||
item.data.attribut1total = item.data.niveau + (this.data.data.attributs[item.data.attribut1]?.value || 0)
|
||||
item.data.attribut2total = item.data.niveau + (this.data.data.attributs[item.data.attribut2]?.value || 0)
|
||||
item.data.attribut3total = item.data.niveau + (this.data.data.attributs[item.data.attribut3]?.value || 0)
|
||||
if (item.data.niveau == 0) {
|
||||
item.data.attribut1total -= 3
|
||||
item.data.attribut2total -= 3
|
||||
item.data.attribut3total -= 3
|
||||
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)
|
||||
item.system.attribut3total = item.system.niveau + (this.system.attributs[item.system.attribut3]?.value || 0)
|
||||
if (item.system.niveau == 0) {
|
||||
item.system.attribut1total -= 3
|
||||
item.system.attribut2total -= 3
|
||||
item.system.attribut3total -= 3
|
||||
}
|
||||
item.data.attribut1label = this.data.data.attributs[item.data.attribut1]?.label || ""
|
||||
item.data.attribut2label = this.data.data.attributs[item.data.attribut2]?.label || ""
|
||||
item.data.attribut3label = this.data.data.attributs[item.data.attribut3]?.label || ""
|
||||
item.system.attribut1label = this.system.attributs[item.system.attribut1]?.label || ""
|
||||
item.system.attribut2label = this.system.attributs[item.system.attribut2]?.label || ""
|
||||
item.system.attribut3label = this.system.attributs[item.system.attribut3]?.label || ""
|
||||
comp.push(item)
|
||||
}
|
||||
}
|
||||
return comp.sort(function (a, b) {
|
||||
let fa = a.name.toLowerCase(),
|
||||
fb = b.name.toLowerCase();
|
||||
if (fa < fb) {
|
||||
return -1;
|
||||
}
|
||||
if (fa > fb) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
})
|
||||
MournbladeUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getProtectionTotal() {
|
||||
let protection = 0
|
||||
for (let item of this.items) {
|
||||
if (item.type == "protection" && item.system.equipped) {
|
||||
protection += item.system.protection
|
||||
}
|
||||
}
|
||||
return protection
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getAspect() {
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? this.system.balance.loi : this.system.balance.chaos
|
||||
}
|
||||
getMarge() {
|
||||
return Math.abs(this.system.balance.loi - this.system.balance.chaos)
|
||||
}
|
||||
getAlignement() {
|
||||
return (this.data.data.balance.loi > this.data.data.balance.chaos) ? "loyal" : "chaotique"
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? "loyal" : "chaotique"
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDefenseBase() {
|
||||
return this.data.data.attributs.tre.value + 5
|
||||
return this.system.attributs.tre.value + 5
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getVitesseBase() {
|
||||
return 5 + __vitesseBonus[this.data.data.attributs.adr.value]
|
||||
return 5 + __vitesseBonus[this.system.attributs.adr.value]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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 = {
|
||||
initBase: this.data.data.attributs.adr.value,
|
||||
initTotal: this.data.data.attributs.adr.value + this.data.data.combat.initbonus,
|
||||
defenserModifier,
|
||||
attaqueModifier,
|
||||
initBase: this.system.attributs.adr.value,
|
||||
initTotal: this.system.attributs.adr.value + this.system.combat.initbonus,
|
||||
bonusDegats: this.getBonusDegats(),
|
||||
bonusDegatsTotal: this.getBonusDegats() + this.data.data.combat.bonusdegats,
|
||||
bonusDegatsTotal: this.getBonusDegats() + this.system.combat.bonusdegats,
|
||||
vitesseBase: this.getVitesseBase(),
|
||||
vitesseTotal: this.getVitesseBase() + this.data.data.combat.vitessebonus,
|
||||
vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus,
|
||||
defenseBase: this.getDefenseBase(),
|
||||
defenseTotal: this.getDefenseBase() + this.data.data.combat.defensebonus
|
||||
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + defenserModifier
|
||||
}
|
||||
return combat
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareBaseData() {
|
||||
}
|
||||
|
@ -186,13 +266,13 @@ export class MournbladeActor extends Actor {
|
|||
prepareDerivedData() {
|
||||
|
||||
if (this.type == 'personnage') {
|
||||
let newSante = this.data.data.sante.bonus + (this.data.data.attributs.pui.value + this.data.data.attributs.tre.value) * 2 + 5
|
||||
if (this.data.data.sante.base != newSante) {
|
||||
this.update({ 'data.sante.base': newSante })
|
||||
let newSante = this.system.sante.bonus + (this.system.attributs.pui.value + this.system.attributs.tre.value) * 2 + 5
|
||||
if (this.system.sante.base != newSante) {
|
||||
this.update({ 'system.sante.base': newSante })
|
||||
}
|
||||
let newAme = (this.data.data.attributs.cla.value + this.data.data.attributs.tre.value) * this.data.data.biodata.amemultiplier + 5
|
||||
if (this.data.data.ame.base != newAme) {
|
||||
this.update({ 'data.ame.base': newAme })
|
||||
let newAme = (this.system.attributs.cla.value + this.system.attributs.tre.value) * this.system.biodata.amemultiplier + 5
|
||||
if (this.system.ame.fullmax != newAme) {
|
||||
this.update({ 'system.ame.fullmax': newAme })
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -207,25 +287,62 @@ export class MournbladeActor extends Actor {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
getItemById(id) {
|
||||
let item = this.data.items.find(item => item.id == 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.data.items.find(item => item.id == itemId);
|
||||
if (item && item.data.data) {
|
||||
let update = { _id: item.id, "data.equipped": !item.data.data.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.data.items.find(item => item.id == itemId)
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
if (item) {
|
||||
console.log("Item ", item, itemField, dataType, value)
|
||||
if (dataType.toLowerCase() == "number") {
|
||||
|
@ -233,38 +350,86 @@ export class MournbladeActor extends Actor {
|
|||
} else {
|
||||
value = String(value)
|
||||
}
|
||||
let update = { _id: item.id, [`data.${itemField}`]: value };
|
||||
let update = { _id: item.id, [`system.${itemField}`]: value };
|
||||
this.updateEmbeddedDocuments("Item", [update])
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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.data.data.bonneaventure.actuelle
|
||||
return this.system.bonneaventure.actuelle
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
changeBonneAventure(value) {
|
||||
let newBA = this.data.data.bonneaventure.actuelle
|
||||
let newBA = this.system.bonneaventure.actuelle
|
||||
newBA += value
|
||||
this.update({ 'data.bonneaventure.actuelle': newBA })
|
||||
this.update({ 'system.bonneaventure.actuelle': newBA })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getEclat() {
|
||||
return this.data.data.eclat.value
|
||||
return this.system.eclat.value
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
changeEclat(value) {
|
||||
let newE = this.data.data.eclat.value
|
||||
let newE = this.system.eclat.value
|
||||
newE += value
|
||||
this.update({ 'data.eclat.value': newE })
|
||||
this.update({ 'system.eclat.value': newE })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
canEclatDoubleD20() {
|
||||
return (this.getAlignement() == "loyal" && this.data.data.eclat.value > 0)
|
||||
return (this.getAlignement() == "loyal" && this.system.eclat.value > 0)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
subPointsAme(runeMode, value) {
|
||||
let ame = foundry.utils.duplicate(this.system.ame)
|
||||
if (runeMode == "prononcer") {
|
||||
ame.value += value
|
||||
} else {
|
||||
ame.currentmax -= value
|
||||
}
|
||||
this.update({ 'system.ame': ame })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -280,19 +445,22 @@ export class MournbladeActor extends Actor {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
getAttribute(attrKey) {
|
||||
return this.data.data.attributes[attrKey]
|
||||
return this.system.attributes[attrKey]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonusDegats() {
|
||||
return __degatsBonus[this.data.data.attributs.pui.value]
|
||||
if (this.type == "creature") {
|
||||
return 0
|
||||
}
|
||||
return __degatsBonus[this.system.attributs.pui.value]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equipGear(equipmentId) {
|
||||
let item = this.data.items.find(item => item.id == equipmentId);
|
||||
if (item && item.data.data) {
|
||||
let update = { _id: item.id, "data.equipped": !item.data.data.equipped };
|
||||
let item = this.items.find(item => item.id == equipmentId);
|
||||
if (item && item.system.data) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
|
@ -300,71 +468,129 @@ export class MournbladeActor extends Actor {
|
|||
/* -------------------------------------------- */
|
||||
getSubActors() {
|
||||
let subActors = [];
|
||||
for (let id of this.data.data.subactors) {
|
||||
subActors.push(duplicate(game.actors.get(id)));
|
||||
for (let id of this.system.subactors) {
|
||||
subActors.push(foundry.utils.duplicate(game.actors.get(id)));
|
||||
}
|
||||
return subActors;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async addSubActor(subActorId) {
|
||||
let subActors = duplicate(this.data.data.subactors);
|
||||
let subActors = foundry.utils.duplicate(this.system.subactors);
|
||||
subActors.push(subActorId);
|
||||
await this.update({ 'data.subactors': subActors });
|
||||
await this.update({ 'system.subactors': subActors });
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async delSubActor(subActorId) {
|
||||
let newArray = [];
|
||||
for (let id of this.data.data.subactors) {
|
||||
for (let id of this.system.subactors) {
|
||||
if (id != subActorId) {
|
||||
newArray.push(id);
|
||||
}
|
||||
}
|
||||
await this.update({ 'data.subactors': newArray });
|
||||
await this.update({ 'system.subactors': newArray });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async incDecQuantity(objetId, incDec = 0) {
|
||||
let objetQ = this.data.items.get(objetId)
|
||||
let objetQ = this.items.get(objetId)
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.data.data.quantity + incDec;
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'data.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.data.items.get(compId)
|
||||
return this.items.get(compId)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async setPredilectionUsed(compId, predIdx) {
|
||||
let comp = this.data.items.get(compId)
|
||||
let pred = duplicate(comp.data.data.predilections)
|
||||
let comp = this.items.get(compId)
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
pred[predIdx].used = true
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'data.predilections': pred }])
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCommonRollData(attrKey = undefined, compId = undefined) {
|
||||
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) {
|
||||
let rollData = MournbladeUtility.getBasicRollData()
|
||||
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.data.data.attributs[attrKey].labelnorm + ".webp"
|
||||
rollData.attr = duplicate(this.data.data.attributs[attrKey])
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp"
|
||||
rollData.attr = foundry.utils.duplicate(this.system.attributs[attrKey])
|
||||
}
|
||||
}
|
||||
if (compId) {
|
||||
rollData.competence = duplicate(this.data.items.get(compId) || {})
|
||||
rollData.actionImg = rollData.competence.img
|
||||
rollData.competence = foundry.utils.duplicate(this.items.get(compId) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
if (compName) {
|
||||
rollData.competence = foundry.utils.duplicate(this.items.find(item => item.name.toLowerCase() == compName.toLowerCase()) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
return rollData
|
||||
}
|
||||
|
@ -372,7 +598,6 @@ export class MournbladeActor extends Actor {
|
|||
/* -------------------------------------------- */
|
||||
async rollAttribut(attrKey) {
|
||||
let rollData = this.getCommonRollData(attrKey)
|
||||
console.log("RollDatra", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
@ -386,21 +611,115 @@ export class MournbladeActor extends Actor {
|
|||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeOffensif(armeId) {
|
||||
let arme = this.data.items.get(armeId)
|
||||
arme = this.prepareArme(arme)
|
||||
let rollData = this.getCommonRollData(arme.data.attrKey, arme.data.competence._id)
|
||||
rollData.arme = arme
|
||||
console.log("ARME!", rollData)
|
||||
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 = foundry.utils.duplicate(this.items.get(runeId) || {})
|
||||
rollData.difficulte = rollData.rune?.system?.seuil || 0
|
||||
rollData.runemode = "prononcer"
|
||||
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)
|
||||
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.data.items.get(armeId)
|
||||
arme = this.prepareArme(arme)
|
||||
let roll = new Roll(arme.data.totalDegats).roll({ async: false })
|
||||
let arme = this.items.get(armeId)
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
rollData.degatsFormula = arme.system.totalDegats
|
||||
let roll = new Roll(arme.system.totalDegats).roll({ async: false })
|
||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
|
||||
let rollData = {
|
||||
arme: arme,
|
||||
|
|
|
@ -9,8 +9,11 @@ export class MournbladeCombat extends Combat {
|
|||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const c = this.combatants.get(ids[cId]);
|
||||
let id = c._id || c.id;
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, id ) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initBonus } ]);
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore() : 0
|
||||
let roll = new Roll("1d10 + "+initBonus).roll({ async: false})
|
||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"))
|
||||
//console.log("Init bonus", initBonus, roll.total)
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: roll.total } ]);
|
||||
}
|
||||
|
||||
return this;
|
||||
|
|
71
modules/mournblade-config.js
Normal file
71
modules/mournblade-config.js
Normal file
|
@ -0,0 +1,71 @@
|
|||
export const MOURNBLADE_CONFIG = {
|
||||
|
||||
attaques: {
|
||||
assaut: "Assaut",
|
||||
precise: "Attaque Précise",
|
||||
feinte: "Feinte",
|
||||
coupbas: "Coup Bas",
|
||||
charger: "Charger",
|
||||
contenir: "Contenir l'adversaire",
|
||||
desarmer: "Désarmer"
|
||||
},
|
||||
couverts: {
|
||||
aucun: { name: "Aucun", value: 0 },
|
||||
rondache: { name: "Rondache ou léger (-2)", value: -2 },
|
||||
pavois: { name: "Pavois ou à moitié (-5)", value: -5 },
|
||||
complet: { name: "Quasi complet (-10)", value: -10 },
|
||||
},
|
||||
modifierTypes: {
|
||||
aucun: { name: "Aucun", value: 0 },
|
||||
roll: { name: "Jet", value: 0 },
|
||||
degats: { name: "Dégats", value: 0 },
|
||||
defense: { name: "Capacité défensive", value: 0 },
|
||||
attaque: { name: "Capacité offensive", value: 0 },
|
||||
},
|
||||
listeNiveau: {
|
||||
},
|
||||
listeNiveauCreature: {
|
||||
},
|
||||
listePortees: {
|
||||
"10": "Moins que courte (10)",
|
||||
"15": "Courte et + (15)",
|
||||
"20": "Moyenne et + (20)",
|
||||
"25": "Longue et + (25)"
|
||||
},
|
||||
modificateurOptions: {},
|
||||
pointsAmeOptions: {},
|
||||
difficulteOptions: {
|
||||
"0": "Aucune/Inconnue",
|
||||
"5": "Facile (5)",
|
||||
"10": "Moyenne (10)",
|
||||
"15": "Ardue (15)",
|
||||
"20": "Hasardeuse (20)",
|
||||
"25": "Insensée (25)",
|
||||
"30": "Pure Folie (30)"
|
||||
},
|
||||
attributs: {
|
||||
adr: "Adresse", pui: "Puissance", cla: "Clairvoyance", pre: "Présence", tre: "Trempe"
|
||||
},
|
||||
lancementRuneOptions: {
|
||||
prononcer: "Prononcer la rune",
|
||||
inscrire: "Inscrire la rune"
|
||||
},
|
||||
effetRuneOptions: {
|
||||
prononcee: "Prononcée",
|
||||
inscrite: "Inscrite"
|
||||
},
|
||||
typeArmeOptions: {
|
||||
contact: "Arme de contact",
|
||||
contactjet: "Arme de contact et de Jet",
|
||||
jet: "Arme de Jet",
|
||||
tir: "Arme de Tir",
|
||||
special: "Spécial (capacité/don)"
|
||||
},
|
||||
allegeanceOptions: {
|
||||
tous: "Tous",
|
||||
chaos: "Chaos",
|
||||
loi: "Loi",
|
||||
betes: "Seigneurs des Bêtes",
|
||||
elementaires: "Seigneurs Elementaires"
|
||||
},
|
||||
};
|
25
modules/mournblade-creature-sheet.js
Normal file
25
modules/mournblade-creature-sheet.js
Normal file
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
* @extends {ActorSheet}
|
||||
*/
|
||||
|
||||
import { MournbladeActorSheet } from "./mournblade-actor-sheet.js";
|
||||
import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class MournbladeCreatureSheet extends MournbladeActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade/templates/creature-sheet.html",
|
||||
width: 640,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: false
|
||||
})
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "item"],
|
||||
template: "systems/fvtt-mournblade/templates/item-sheet.html",
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
|
@ -48,9 +48,8 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = MournbladeUtility.data(this.object);
|
||||
|
||||
let itemData = foundry.utils.deepClone(MournbladeUtility.templateData(this.object));
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let itemData = objectData
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: this.id,
|
||||
|
@ -60,15 +59,20 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
attributs: MournbladeUtility.getAttributs(),
|
||||
data: itemData,
|
||||
data: itemData.system,
|
||||
limited: this.object.limited,
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
||||
config: game.system.mournblade.config,
|
||||
mr: (this.object.type == 'specialisation'),
|
||||
isGM: game.user.isGM
|
||||
}
|
||||
|
||||
this.options.editable = !(this.object.data.origin == "embeddedItem");
|
||||
if ( objectData.type == "don") {
|
||||
formData.sacrifice = await TextEditor.enrichHTML(this.object.system.sacrifice, {async: true})
|
||||
}
|
||||
//this.options.editable = !(this.object.origin == "embeddedItem");
|
||||
console.log("ITEM DATA", formData, this);
|
||||
return formData;
|
||||
}
|
||||
|
@ -87,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 };
|
||||
}
|
||||
|
@ -130,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.data.data.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.data.data.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.data.data.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.data.data.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 { MOURNBLADE_CONFIG } from "./mournblade-config.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
|
@ -45,13 +46,15 @@ Hooks.once("init", async function () {
|
|||
CONFIG.Combat.documentClass = MournbladeCombat
|
||||
CONFIG.Actor.documentClass = MournbladeActor
|
||||
CONFIG.Item.documentClass = MournbladeItem
|
||||
game.system.mournblade = { }
|
||||
game.system.mournblade = {
|
||||
config : MOURNBLADE_CONFIG,
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register sheet application classes
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-mournblade", MournbladeActorSheet, { types: ["personnage"], makeDefault: true })
|
||||
//Actors.registerSheet("fvtt-mournblade", MournbladeNPCSheet, { types: ["npc"], makeDefault: false });
|
||||
Actors.registerSheet("fvtt-mournblade", MournbladeCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-mournblade", MournbladeItemSheet, { makeDefault: true })
|
||||
|
@ -67,9 +70,23 @@ function welcomeMessage() {
|
|||
whisper: [game.user.id],
|
||||
content: `<div id="welcome-message-Mournblade"><span class="rdd-roll-part">
|
||||
<strong>Bienvenue dans les Jeunes Royaumes de Mournblade !</strong>
|
||||
<p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr</p>
|
||||
<p>Mournblade est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.</p>
|
||||
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
|
||||
` });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async function importDefaultScene() {
|
||||
let exists = game.scenes.find(j => j.name == "Accueil");
|
||||
if (!exists) {
|
||||
const scenes = await MournbladeUtility.loadCompendium("fvtt-mournblade.scenes")
|
||||
let newDocuments = scenes.filter(i => i.name == "Accueil");
|
||||
await game.scenes.documentClass.create(newDocuments);
|
||||
game.scenes.find(i => i.name == "Accueil").activate();
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
/* -------------------------------------------- */
|
||||
|
@ -84,13 +101,22 @@ Hooks.once("ready", function () {
|
|||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
// CSS patch for v9
|
||||
if (game.version) {
|
||||
let sidebar = document.getElementById("sidebar");
|
||||
sidebar.style.width = "min-content";
|
||||
if (!game.user.isGM && game.user.character && !game.user.character.prototypeToken.actorLink) {
|
||||
ui.notifications.info("Le token de du joueur n'est pas connecté à l'acteur !");
|
||||
ChatMessage.create({
|
||||
content: "<b>ATTENTION</b> Le token du joueur " + game.user.name + " n'est pas connecté à l'acteur !",
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err=>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
|
||||
importDefaultScene();
|
||||
welcomeMessage();
|
||||
});
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ export class MournbladeRollDialog extends Dialog {
|
|||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData ) {
|
||||
|
||||
let options = { classes: ["MournbladeDialog"], width: 320, height: 380, 'z-index': 99999 };
|
||||
let options = { classes: ["MournbladeDialog"], width: 340, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-mournblade/templates/roll-dialog-generic.html', rollData);
|
||||
|
||||
return new MournbladeRollDialog(actor, rollData, html, options );
|
||||
|
@ -52,22 +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)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
|
@ -10,6 +10,7 @@ export class MournbladeUtility {
|
|||
static async init() {
|
||||
Hooks.on('renderChatLog', (log, html, data) => MournbladeUtility.chatListeners(html))
|
||||
Hooks.on("getChatLogEntryContext", (html, options) => MournbladeUtility.chatRollMenu(html, options))
|
||||
Hooks.on('renderChatMessage', (message, html, data) => MournbladeUtility.chatMessageHandler(message, html, data))
|
||||
|
||||
Hooks.on("getCombatTrackerEntryContext", (html, options) => {
|
||||
MournbladeUtility.pushInitiativeOptions(html, options);
|
||||
|
@ -46,19 +47,28 @@ export class MournbladeUtility {
|
|||
})
|
||||
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
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 actor
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getModificateurOptions() {
|
||||
let opt = []
|
||||
for (let i = -15; i <= 15; 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) {
|
||||
|
@ -73,6 +83,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)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -91,19 +106,60 @@ export class MournbladeUtility {
|
|||
static getOptionsStatusList() {
|
||||
return this.optionsStatusList;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getPredilection(comp, predIdx) {
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
return foundry.utils.duplicate(pred[predIdx] || { name: "Error!" })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatMessageHandler(message, html, data) {
|
||||
const chatCard = html.find('.action-section')
|
||||
if (chatCard.length > 0) {
|
||||
// If the user is the message author or the actor owner, proceed
|
||||
const actor = game.actors.get(data.message.speaker.actor)
|
||||
// DEBUG : console.log("FOUND 1!!! ", actor, data.message)
|
||||
if (actor?.isOwner || game.user.isGM) {
|
||||
return
|
||||
}
|
||||
chatCard.hide()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatListeners(html) {
|
||||
|
||||
html.on("click", '.predilection-reroll', async event => {
|
||||
let predIdx = $(event.currentTarget).data("predilection-index")
|
||||
let predIdx = $(event.currentTarget).data("predilection-index")
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
await actor.setPredilectionUsed( rollData.competence._id, predIdx)
|
||||
rollData.competence = duplicate( actor.getCompetence(rollData.competence._id) )
|
||||
MournbladeUtility.rollMournblade(rollData)
|
||||
})
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
|
||||
rollData.competence = foundry.utils.duplicate(actor.getCompetence(rollData.competence._id))
|
||||
rollData.predilectionUsed = MournbladeUtility.getPredilection(rollData.competence, predIdx)
|
||||
await MournbladeUtility.rollMournblade(rollData)
|
||||
})
|
||||
|
||||
html.on("click", '.arme-roll-degats', async event => {
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
MournbladeUtility.rollDegatsFromAttaque(rollData)
|
||||
|
||||
})
|
||||
|
||||
html.on("click", '.arme-apply-degats', async event => {
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
if (game.user.isGM) {
|
||||
MournbladeUtility.applyDegatsFromAttaque(rollData)
|
||||
} else {
|
||||
game.socket.emit("system.fvtt-mournblade", { name: "msg_apply_damage", data: { rolLData: rollData } })
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -111,8 +167,7 @@ export class MournbladeUtility {
|
|||
|
||||
const templatePaths = [
|
||||
'systems/fvtt-mournblade/templates/editor-notes-gm.html',
|
||||
'systems/fvtt-mournblade/templates/partial-item-description.html',
|
||||
'systems/fvtt-mournblade/templates/partial-list-niveau.html'
|
||||
'systems/fvtt-mournblade/templates/partial-item-description.html'
|
||||
]
|
||||
return loadTemplates(templatePaths);
|
||||
}
|
||||
|
@ -146,19 +201,6 @@ export class MournbladeUtility {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static templateData(it) {
|
||||
return MournbladeUtility.data(it)?.data ?? {}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static data(it) {
|
||||
if (it instanceof Actor || it instanceof Item || it instanceof Combatant) {
|
||||
return it.data;
|
||||
}
|
||||
return it;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createDirectOptionList(min, max) {
|
||||
let options = {};
|
||||
|
@ -167,12 +209,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;
|
||||
}
|
||||
|
@ -187,27 +227,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];
|
||||
|
@ -215,12 +234,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -285,68 +302,274 @@ export class MournbladeUtility {
|
|||
}
|
||||
}
|
||||
|
||||
//console.log("Result : ", rollData)
|
||||
if (rollData.difficulte > 0 && !rollData.isDramatique) {
|
||||
rollData.isSuccess = (rollData.roll.finalResult >= rollData.difficulte)
|
||||
rollData.isHeroique = ((rollData.roll.finalResult - rollData.difficulte) >= 10)
|
||||
rollData.isDramatique = ((rollData.roll.finalResult - rollData.difficulte) <= -10)
|
||||
rollData.isSuccess = (rollData.finalResult >= rollData.difficulte)
|
||||
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10)
|
||||
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10)
|
||||
rollData.isPureSuccess = (rollData.isSuccess && !rollData.isHeroique)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollMournblade(rollData) {
|
||||
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.attrKey == "tochoose") { // No attr selected, force address
|
||||
rollData.attrKey = "adr"
|
||||
}
|
||||
if ( !rollData.attr) {
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + actor.data.data.attributs[rollData.attrKey].labelnorm + ".webp"
|
||||
rollData.attr = duplicate(actor.data.data.attributs[rollData.attrKey])
|
||||
if (!rollData.attr) {
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
|
||||
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.data.predilections.filter( pred => !pred.used) || [] )
|
||||
let compmod = (rollData.competence.data.niveau == 0) ? -3 : 0
|
||||
rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.data.niveau}+${rollData.modificateur}+${compmod}`
|
||||
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.arme.data.bonusmaniementoff}`
|
||||
rollData.diceFormula += `+${rollData.malusSante}+${rollData.malusAme}`
|
||||
|
||||
if (rollData.arme?.type == "arme") {
|
||||
rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}`
|
||||
}
|
||||
|
||||
// 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"
|
||||
}
|
||||
|
||||
// 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 = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"));
|
||||
rollData.roll = myRoll
|
||||
let myRoll = await new Roll(rollData.diceFormula).evaluate();
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
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)
|
||||
|
||||
// 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)
|
||||
}
|
||||
actor.subPointsAme(rollData.runemode, subAme)
|
||||
}
|
||||
if (rollData.typeAttaque == "assomer" && rollData.defenderTokenId && rollData.isPureSuccess) {
|
||||
let defender = game.canvas.tokens.get(rollData?.defenderTokenId)?.actor
|
||||
defender.setModifier("Assomer : Prochaine action", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "fuir" && rollData.difficulte > 0 && !rollData.isSuccess) {
|
||||
actor.setModifier("Fuite échouée : -5 en défense ce round et suivant", "defense", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "immobiliser" && rollData.difficulte > 0 && rollData.isPureSuccess) {
|
||||
actor.setModifier("Immobilisation en cours : -5 pour prochaine action", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "chargecavalerie") {
|
||||
actor.setModifier("Charge de Cavalerie : -5 défense pour le tour", "defense", -5)
|
||||
}
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-generic-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollDegatsFromAttaque(rollData) {
|
||||
let maximize = false
|
||||
let degatsMessage = "Degats normaux"
|
||||
|
||||
if (rollData.arme?.system?.isMelee) {
|
||||
rollData.degatsFormula = rollData.arme.system.totalDegats
|
||||
if (rollData.isHeroique) { // Deux fois les dés de dégats
|
||||
degatsMessage = "Dégats doublés"
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "assomer") {
|
||||
rollData.degatsFormula = false
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "charger") {
|
||||
rollData.degatsFormula += "+2"
|
||||
}
|
||||
if (rollData.typeAttaque == "chargecavalerie") {
|
||||
rollData.degatsFormula += "+5"
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "precise") {
|
||||
degatsMessage = "Degats normaux"
|
||||
if (rollData.isHeroique) { // Degats max
|
||||
maximize = true
|
||||
degatsMessage = "Dégats maximaux, ignore l'armure du défenseur";
|
||||
rollData.ignoreDefenseArmor = true
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "feinte") {
|
||||
degatsMessage = "Pas de dégats, mais bonus pour prochaine attaque"
|
||||
rollData.degatsFormula = false
|
||||
rollData.nextBonus = 5
|
||||
if (rollData.isHeroique) { // Bonus pour prochaine action
|
||||
rollData.nextBonus = 10
|
||||
rollData.nextBonusDegats = 10
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "coupbas") {
|
||||
degatsMessage = "Pas de dégats, mais malus pour prochaine action complexe du défenseur"
|
||||
rollData.degatsFormula = false
|
||||
rollData.nextMalus = 5
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
rollData.nextMalus = 15
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "contenir") {
|
||||
degatsMessage = "Pas de dégats, mais l'adversaire ne peut pas vous attaquer pour le reste du tour"
|
||||
rollData.degatsFormula = false
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
degatsMessage = "Pas de dégats, mais tout les adversaires avec une défense inférieure ou égale à " + rollData.finalResult - 10 +
|
||||
" ne peuvent pas vous attaquer pour le reste du tour"
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "desarmer") {
|
||||
degatsMessage = "Pas de dégats, mais l'adversaire reçoit un malus de -5 pour sa prochaine action"
|
||||
rollData.degatsFormula = false
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
rollData.defenderDesarme = true
|
||||
degatsMessage = "Pas de dégats, mais l'arme de votre adversaire est arrachée de ses mains"
|
||||
}
|
||||
}
|
||||
} else { // Armes à distance
|
||||
rollData.degatsFormula = rollData.arme.system.totalDegats
|
||||
}
|
||||
|
||||
// Perform the roll, show the dice
|
||||
rollData.finalResult = 0
|
||||
rollData.degatsMessage = degatsMessage
|
||||
if (rollData.degatsFormula) {
|
||||
console.log("Degats formula", rollData.degatsFormula)
|
||||
// Twice!maximize
|
||||
if (rollData.isHeroique && !maximize) {
|
||||
rollData.degatsFormula += "+" + rollData.degatsFormula
|
||||
}
|
||||
// Latest modifiers
|
||||
for (let mod of rollData.modifiers) {
|
||||
if (mod.system.modifiertype == "degats") {
|
||||
rollData.degatsFormula += `+${mod.system.value}`
|
||||
}
|
||||
}
|
||||
let degatsRoll = await new Roll(rollData.degatsFormula).evaluate({ maximize: maximize })
|
||||
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||
rollData.finalResult = degatsRoll.total
|
||||
}
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-degats-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyDegatsFromAttaque(rollData) {
|
||||
let defender = game.canvas.tokens.get(rollData?.defenderTokenId)?.actor
|
||||
if (defender && rollData.arme) {
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.typeAttaque == "desarmer" && !rollData.isHeroique) {
|
||||
defender.setModifier("Malus suite à désarmement", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "charger") {
|
||||
actor.setModifier("Défense suite à charge", "roll", -5)
|
||||
}
|
||||
if (rollData.nextBonus) {
|
||||
actor.setModifier("Prochaine attaque", "roll", rollData.nextBonus)
|
||||
if (rollData.nextDegatsBonus) {
|
||||
actor.setModifier("Prochaine attaque", "degats", rollData.nextDegatsBonus)
|
||||
}
|
||||
}
|
||||
if (rollData.nextMalus) {
|
||||
defender.setModifier("Prochaine action complexe", "roll", -rollData.nextMalus)
|
||||
}
|
||||
if (rollData.defenderDesarme) {
|
||||
ui.notifications.info("L'arme de " + defender.name + " est arrachée de ses mains (à gérer manuellement)")
|
||||
}
|
||||
let degats = rollData.finalResult
|
||||
|
||||
let type = (rollData.arme.system.nonletaux) ? "nonletaux" : "letaux"
|
||||
if (rollData.arme.system.ignorearmure) {
|
||||
rollData.ignoreDefenseArmor = true
|
||||
}
|
||||
defender.incDecSante(type, +degats, rollData.ignoreDefenseArmor)
|
||||
ui.notifications.info(defender.name + "a subi " + degats + " points de santé " + type + ".")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async bonusRollMournblade(rollData) {
|
||||
rollData.bonusFormula = rollData.addedBonus
|
||||
|
||||
let bonusRoll = new Roll(rollData.bonusFormula).roll({async: false})
|
||||
|
||||
let bonusRoll = await new Roll(rollData.bonusFormula).evaluate()
|
||||
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
|
||||
rollData.bonusRoll = bonusRoll
|
||||
|
||||
rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)
|
||||
|
||||
rollData.finalResult += rollData.bonusRoll.total
|
||||
|
||||
this.computeResult( rollData)
|
||||
this.computeResult(rollData)
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-generic-result.html`, rollData)
|
||||
|
@ -358,6 +581,7 @@ export class MournbladeUtility {
|
|||
static getUsers(filter) {
|
||||
return game.users.filter(filter).map(user => user.data._id);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getWhisperRecipients(rollMode, name) {
|
||||
switch (rollMode) {
|
||||
|
@ -375,7 +599,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);
|
||||
|
@ -428,7 +652,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)
|
||||
|
@ -437,11 +662,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(),
|
||||
difficulte: 0,
|
||||
modificateur: 0,
|
||||
config: foundry.utils.duplicate(game.system.mournblade.config),
|
||||
}
|
||||
MournbladeUtility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
|
@ -449,15 +674,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.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -472,82 +701,82 @@ export class MournbladeUtility {
|
|||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
actor.changeBonneAventure( changed )
|
||||
rollData.isReroll = true
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
actor.changeBonneAventure(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus de Points d'Aventure"
|
||||
if (addedBonus == "reroll") {
|
||||
MournbladeUtility.rollMournblade(rollData)
|
||||
} else {
|
||||
MournbladeUtility.rollMournblade(rollData)
|
||||
} else {
|
||||
rollData.addedBonus = addedBonus
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyEclatRoll(li, changed, addedBonus) {
|
||||
let msgId = li.data("message-id")
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
actor.changeEclat( changed )
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus d'Eclat"
|
||||
rollData.addedBonus = addedBonus
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static applyEclatRoll(li, changed, addedBonus) {
|
||||
let msgId = li.data("message-id")
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
actor.changeEclat(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus d'Eclat"
|
||||
rollData.addedBonus = addedBonus
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static chatRollMenu(html, options) {
|
||||
let canApply = li => canvas.tokens.controlled.length && li.find(".mournblade-roll").length
|
||||
let canApplyBALoyal = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "loyal")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "loyal")
|
||||
}
|
||||
let canApplyPELoyal = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "loyal")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "loyal")
|
||||
}
|
||||
let canApplyBAChaotique = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "chaotique")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let canApplyBAChaotique3 = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getBonneAventure() > 2 && actor.getAlignement() == "chaotique")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 2 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let canApplyPEChaotique = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
return ( !rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "chaotique")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let hasPredilection = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
if ( rollData.competence) {
|
||||
let nbPred = rollData.competence.data.predilections.filter( pred => !pred.used).length
|
||||
return ( !rollData.isReroll && rollData.competence && nbPred > 0 )
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.competence) {
|
||||
let nbPred = rollData.competence.data.predilections.filter(pred => !pred.used).length
|
||||
return (!rollData.isReroll && rollData.competence && nbPred > 0)
|
||||
}
|
||||
return false
|
||||
}
|
||||
let canCompetenceDouble = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
if ( rollData.competence) {
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.competence) {
|
||||
return rollData.competence.data.doublebonus
|
||||
}
|
||||
return false
|
||||
|
@ -614,11 +843,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));
|
||||
|
@ -626,12 +855,12 @@ export class MournbladeUtility {
|
|||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: "Cancel"
|
||||
label: "Non !"
|
||||
}
|
||||
}
|
||||
msgTxt += "</p>";
|
||||
let d = new Dialog({
|
||||
title: "Confirm removal",
|
||||
title: "Confirmer la suppression",
|
||||
content: msgTxt,
|
||||
buttons: buttons,
|
||||
default: "cancel"
|
||||
|
|
|
@ -1,42 +1,46 @@
|
|||
{"name":"Fouet","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contactjet","bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d4 + 1","deuxmains":false,"courte":3,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Qb1h25U88mTM4h72"}},"_id":"0swiE8k5zfUIqmXu"}
|
||||
{"_id":"2BSVJXr0FGZZJ9fh","name":"Hache des mers","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.mGYFgteaWBDo10Xb"}}}
|
||||
{"_id":"2qezkR1BdC0DcRIl","name":"Fléau d’armes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D10+1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.PHQabMgfk1GNOjKo"}}}
|
||||
{"name":"Arbalète","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2d6","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":3,"rarete":10,"prix":500},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.WYp8ojQN8HYJwUJc"}},"_id":"2zIdrBK88iuMbOF0"}
|
||||
{"_id":"3Iv1oLpZcPEJVaI4","name":"Cimeterre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":1,"degats":"1d10","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.RYxEg0gJfAlIZ4mw"}}}
|
||||
{"name":"Fronde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":2,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TgVuNnytO9k2K0Xe"}},"_id":"4To8rLxv4efsoZK0"}
|
||||
{"name":"Pierre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contactjet","bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":0,"prix":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.3YS9IfQddECnoagK"}},"_id":"4yKlK8MeSj5Zk8lM"}
|
||||
{"_id":"6e1JHoD1Jrz020R7","name":"Grand marteau","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2D6+2","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.vjic4cPkJ0iMCIt5"}}}
|
||||
{"name":"Arc de cavalerie","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":7,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5EWrgNQjJMx1t2v1"}},"_id":"88UuW1bdpFuCmkqb"}
|
||||
{"_id":"9Eo9mRbPPZHN98Cr","name":"Épée de maître","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d8+ 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.kX3MbDFu9uYZVNf2"}}}
|
||||
{"_id":"9xPd4ITtyk3nmMoN","name":"Lance ilmioréenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>La lance ilmioréenne est un solide bâton de combat surmonté d’une pointe sur lequel est fi xé quasi perpendiculairement un fer de hache plat et étroit. Un contrepoids fi xé à l’autre extrémité sert à équilibrer l’arme qui peut être maniée à la fois comme une lance et comme une hache à deux mains, ce qui permet de maintenir ses ennemis à distance ou de leur porter des coups dévastateurs. Ces lances furent inventées à l’époque de la tribu d’Ilm, quand les lances et épées étaient déclarées illégales par les gouverneurs melnibonéens de la région. Certaines écoles militaires ilmioréennes enseignent toujours le Style Imar, qui mêle en une seule et même technique le combat à deux mains à la lance et le combat au bâton.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"1d8 + 2","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.8ApbiVgkx79OHVp2"}}}
|
||||
{"_id":"CeC5lAKs7NdPF05l","name":"Masse lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 1","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":80},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.DPfXgFj3gpjJ3nbR"}}}
|
||||
{"_id":"CqP80SQFQOefpGgd","name":"Gourdin","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1D6","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.CBIfq9eRd2RmoI4H"}}}
|
||||
{"_id":"CupT9m8L909l4Fo5","name":"Rapière","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":1,"degats":"1d8+ 1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.XIStcClTnmLoSwyR"}}}
|
||||
{"name":"Hachette / Hache de lancer","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contactjet","bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d4 + 1","deuxmains":false,"courte":5,"moyenne":10,"longue":15,"tr":1,"rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5NHbRanxXA5vUE3B"}},"_id":"DzkeP7jbruqW4nQH"}
|
||||
{"_id":"FDeRBkxXwoZIuL9B","name":"Lance légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8","deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":5,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.LIVeq22E9EanRS9L"}}}
|
||||
{"name":"Arc de chasse","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 - 1","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TrYZ9BxYukS1mbBX"}},"_id":"Hrm08cpgAMMV6Jpq"}
|
||||
{"_id":"Iw3j4oC6H8HJ9MFQ","name":"Coup de pied / poing / tête","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.nBPKHsYIM0HgMcBy"}}}
|
||||
{"_id":"KY22L6Lx5WxgvyGD","name":"Lance lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1d10","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Kcl07bs7TOcne37W"}}}
|
||||
{"name":"Arc du Désert des Larmes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Cet arc composite fait de bois, d’andouillers de cerf et/ou d’os est un arc court et très recourbé utilisé par les barbares du Désert des Larmes pour la chasse. On peut également trouver ce type d’arcs à Pikarayd et au Dorel.</p>","typearme":"tir","bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 1","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.QmYjdRCAk3MnxKJg"}},"_id":"MDpFpqmXpIX5VV80"}
|
||||
{"_id":"MP49mYF7FVuW9ALB","name":"Hache de bataille dite lormyrienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Cette double hache parfaitement équilibrée et proportionnée est l’arme favorite des chevaliers lormyriens. Il s’agit de l’arme idéale pour trancher, découper les lances ennemies et fendre les crânes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 2","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Lpa6kesbzgKVtogn"}}}
|
||||
{"_id":"N5BbO2lGwzQnpvH0","name":"Couteau / Dague","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contactjet","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":1,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5a9GKIvNgbbXBq3s"}}}
|
||||
{"_id":"QwrZbFeJUQv2OBqI","name":"Pique filkharienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Cette longue pique à grande lame de près de trois mètres de long est l’arme de prédilection des piquiers de l’armée de Filkhar. Très effi cace pour lutter contre des cavaliers ou des ennemis en train de charger, elle l’est beaucoup moins en combat rapproché.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8 + 2","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.dF9LxfA1crZBmT92"}}}
|
||||
{"_id":"SzgkzHvzma8NiMd5","name":"Masse légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.xrWRNZBrEzkUQzRG"}}}
|
||||
{"_id":"U8CoqFhGuT3ZHeq1","name":"Sabre d’abordage","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d8","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.aNUqO9OZT0GBszvv"}}}
|
||||
{"name":"Javelot","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"jet","bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":5,"prix":30},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Zwiz9E3TbeUP8qHH"}},"_id":"aELvOR7A9DIJKgBk"}
|
||||
{"_id":"aJBVfqQ3JQNyVL7c","name":"Fourche / Faux de paysan","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D6","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":1,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.K5Ayim6mPKZoCSCc"}}}
|
||||
{"_id":"c6l49ZmEBjUxfI3W","name":"Arme improvisée","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d6","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.E7gcmnNQK2t5OQjv"}}}
|
||||
{"name":"Arc de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"tir","bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d10 + 1","deuxmains":false,"courte":30,"moyenne":50,"longue":100,"tr":1,"rarete":6,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Tq6lUFPTkBN5cBwn"}},"_id":"cKf5z3fajUnxJh0r"}
|
||||
{"_id":"fLHX6ut131CQI630","name":"Main gauche","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":3,"degats":"1d4 + 1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.BBii0qi1unvSRNO4"}}}
|
||||
{"_id":"freCCeiYGfWmUAQU","name":"Marteau de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d8 + 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":6,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.6n2uSdYfRAsSqQnA"}}}
|
||||
{"_id":"j5659PJlrHz56V1k","name":"Sabre de Pan Tang","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Ce long sabre effi lé sert aux Cavaliers démoniaques de Pan Tang pour couper les têtes depuis le dos de leurs monstrueuses montures reptiliennes à six pattes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":120},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.l3ffzso7GyHMKguD"}}}
|
||||
{"_id":"lYtm5MwP96numskx","name":"Hallebarde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"2d6","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.ZTdyIoMzE9kqm4e6"}}}
|
||||
{"_id":"mQGT0vmDjoTZCW5u","name":"Lance melnibonéenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>La lance melnibonéenne, faite pour le combat à cheval ou à dos de dragon, ressemble à une lance ordinaire. Son fer est cependant plus fi n et plus étroit. Avant la chute d’Imrryr, il est quasi impossible de se procurer de telles armes sur les marchés des Jeunes Royaumes. Elles peuvent être maniées à une main comme lors des joutes à cheval ou à deux mains au cœur des mêlées.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"2d6+ 4","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":10,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.KAl5qXHeYDoYRU6G"}}}
|
||||
{"name":"Arc en os","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"<p>Arc composite recourbé fait de bois, d’os et d’acier, l’arc en os melnibonéen est une arme extraordinairement puissante entre les mains d’un guerrier melnibonéen ou d’un archer esclave du Glorieux Empire. On peut se le procurer dans les Jeunes Royaumes après la chute d’Imrryr.</p>","typearme":"tir","bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d8 + 1","deuxmains":false,"courte":30,"moyenne":60,"longue":125,"tr":2,"rarete":10,"prix":500},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Dy9dzVhXbNAVm3zn"}},"_id":"nzve5qucVN6FC5wn"}
|
||||
{"_id":"sHj90bPcMaDlOw51","name":"Bâton ferré ou lesté","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1D8","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.zoBHSbvJPnjbtPh6"}}}
|
||||
{"_id":"sju2r73hUHyGbHYg","name":"Épée courte / Glaive","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1D6+1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Mxv5gMHRvRrsuhPA"}}}
|
||||
{"_id":"t2uQcWe7kirUOp3D","name":"Faucheur","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d4 + 1","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.OlmzE29fh9DFd8TF"}}}
|
||||
{"_id":"uatjBTFCE5ZCqhAd","name":"Fléau lourd","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d10+ 3","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.vDDw0qqM1Kg7Pu6T"}}}
|
||||
{"_id":"v7ymzlEALvsk0poA","name":"Hache","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":2,"prix":30},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.2MwgptY2kE4tgYBe"}}}
|
||||
{"_id":"wWk0Wfer06Ttmouv","name":"Épée large","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d6+ 2","deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.iuAizxCvnUxmsjrn"}}}
|
||||
{"_id":"wv5EiePmPTpqFutt","name":"Épée longue","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","data":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 1","deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.yiYtZ0sCUpMihvzz"}}}
|
||||
{"name":"Fouet","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Qb1h25U88mTM4h72"}},"_id":"0swiE8k5zfUIqmXu","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d4 + 1","nonletaux":true,"deuxmains":false,"courte":3,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964292,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"2BSVJXr0FGZZJ9fh","name":"Hache des mers","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.mGYFgteaWBDo10Xb"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Ecu d'acier","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":3,"degats":"1d8","nonletaux":"false","rarete":9,"prix":10,"equipped":false,"isdefense":null},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.Gn52Vfp6Vg4cnpd0"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573706183,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"2PmIgKP4wZLHGp0s"}
|
||||
{"_id":"2qezkR1BdC0DcRIl","name":"Fléau d’armes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.PHQabMgfk1GNOjKo"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D10+1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arbalète","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.WYp8ojQN8HYJwUJc"}},"_id":"2zIdrBK88iuMbOF0","system":{"description":"","typearme":"tir","isdefense":null,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2d6","nonletaux":null,"deuxmains":"","courte":25,"moyenne":50,"longue":75,"tr":3,"rarete":10,"prix":500,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"3Iv1oLpZcPEJVaI4","name":"Cimeterre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.RYxEg0gJfAlIZ4mw"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":1,"degats":"1d10","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Fronde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.TgVuNnytO9k2K0Xe"}},"_id":"4To8rLxv4efsoZK0","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","nonletaux":false,"deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":2,"prix":1,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Pierre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.3YS9IfQddECnoagK"}},"_id":"4yKlK8MeSj5Zk8lM","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","nonletaux":true,"deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"6e1JHoD1Jrz020R7","name":"Grand marteau","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.vjic4cPkJ0iMCIt5"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2D6+2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de cavalerie","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5EWrgNQjJMx1t2v1"}},"_id":"88UuW1bdpFuCmkqb","system":{"description":"","typearme":"tir","isdefense":null,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","nonletaux":null,"deuxmains":null,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":7,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"9Eo9mRbPPZHN98Cr","name":"Épée de maître","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.kX3MbDFu9uYZVNf2"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d8+ 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"9xPd4ITtyk3nmMoN","name":"Lance ilmioréenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.8ApbiVgkx79OHVp2"}},"system":{"description":"<p>La lance ilmioréenne est un solide bâton de combat surmonté d’une pointe sur lequel est fi xé quasi perpendiculairement un fer de hache plat et étroit. Un contrepoids fi xé à l’autre extrémité sert à équilibrer l’arme qui peut être maniée à la fois comme une lance et comme une hache à deux mains, ce qui permet de maintenir ses ennemis à distance ou de leur porter des coups dévastateurs. Ces lances furent inventées à l’époque de la tribu d’Ilm, quand les lances et épées étaient déclarées illégales par les gouverneurs melnibonéens de la région. Certaines écoles militaires ilmioréennes enseignent toujours le Style Imar, qui mêle en une seule et même technique le combat à deux mains à la lance et le combat au bâton.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"1d8 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CeC5lAKs7NdPF05l","name":"Masse lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.DPfXgFj3gpjJ3nbR"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 1","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":80,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CqP80SQFQOefpGgd","name":"Gourdin","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.CBIfq9eRd2RmoI4H"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1D6","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CupT9m8L909l4Fo5","name":"Rapière","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.XIStcClTnmLoSwyR"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":1,"degats":"1d8+ 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Hachette / Hache de lancer","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5NHbRanxXA5vUE3B"}},"_id":"DzkeP7jbruqW4nQH","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":5,"moyenne":10,"longue":15,"tr":1,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"FDeRBkxXwoZIuL9B","name":"Lance légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.LIVeq22E9EanRS9L"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8","nonletaux":false,"deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":5,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de chasse","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.TrYZ9BxYukS1mbBX"}},"_id":"Hrm08cpgAMMV6Jpq","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 - 1","nonletaux":false,"deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"Iw3j4oC6H8HJ9MFQ","name":"Coup de pied / poing / tête","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.nBPKHsYIM0HgMcBy"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"KY22L6Lx5WxgvyGD","name":"Lance lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Kcl07bs7TOcne37W"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1d10","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc du Désert des Larmes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.QmYjdRCAk3MnxKJg"}},"_id":"MDpFpqmXpIX5VV80","system":{"description":"<p>Cet arc composite fait de bois, d’andouillers de cerf et/ou d’os est un arc court et très recourbé utilisé par les barbares du Désert des Larmes pour la chasse. On peut également trouver ce type d’arcs à Pikarayd et au Dorel.</p>","typearme":"tir","isdefense":null,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 1","nonletaux":null,"deuxmains":null,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964296,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"MP49mYF7FVuW9ALB","name":"Hache de bataille dite lormyrienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Lpa6kesbzgKVtogn"}},"system":{"description":"<p>Cette double hache parfaitement équilibrée et proportionnée est l’arme favorite des chevaliers lormyriens. Il s’agit de l’arme idéale pour trancher, découper les lances ennemies et fendre les crânes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964296,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"N5BbO2lGwzQnpvH0","name":"Couteau / Dague","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5a9GKIvNgbbXBq3s"}},"system":{"description":"","typearme":"contactjet","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","nonletaux":false,"deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":1,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"QwrZbFeJUQv2OBqI","name":"Pique filkharienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.dF9LxfA1crZBmT92"}},"system":{"description":"<p>Cette longue pique à grande lame de près de trois mètres de long est l’arme de prédilection des piquiers de l’armée de Filkhar. Très effi cace pour lutter contre des cavaliers ou des ennemis en train de charger, elle l’est beaucoup moins en combat rapproché.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"SzgkzHvzma8NiMd5","name":"Masse légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.xrWRNZBrEzkUQzRG"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"U8CoqFhGuT3ZHeq1","name":"Sabre d’abordage","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.aNUqO9OZT0GBszvv"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d8","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Javelot","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Zwiz9E3TbeUP8qHH"}},"_id":"aELvOR7A9DIJKgBk","system":{"description":"","typearme":"jet","isdefense":false,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","nonletaux":false,"deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":5,"prix":30,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"aJBVfqQ3JQNyVL7c","name":"Fourche / Faux de paysan","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.K5Ayim6mPKZoCSCc"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":1,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Pavois","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"<p>Le Pavois se plante dans le sol au début du combat et ne peut plus être déplacé jusqu'à son issue.</p>","bonusdefense":3,"degats":"0","nonletaux":"false","rarete":7,"prix":5,"equipped":false,"isdefense":"false"},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.E3A8EnGzQctvYndd"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573708981,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"b2VNhFBgbvlzaMw8"}
|
||||
{"name":"Bouclier d'Infanterie","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":2,"degats":"1d6","nonletaux":"false","rarete":5,"prix":2,"equipped":false},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.jeMLhLTJhTU6TJ58"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573703190,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"bqDEyPj9OlGnEJsr"}
|
||||
{"_id":"c6l49ZmEBjUxfI3W","name":"Arme improvisée","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.E7gcmnNQK2t5OQjv"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d6","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Tq6lUFPTkBN5cBwn"}},"_id":"cKf5z3fajUnxJh0r","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d10 + 1","nonletaux":false,"deuxmains":false,"courte":30,"moyenne":50,"longue":100,"tr":1,"rarete":6,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Targe","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":1,"degats":"1d4","nonletaux":"false","rarete":4,"prix":2,"equipped":false},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.9rJkBsRltxH08QT8"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573712553,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"cZorS8WAKNS0dN0T"}
|
||||
{"_id":"fLHX6ut131CQI630","name":"Main gauche","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.BBii0qi1unvSRNO4"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":3,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"freCCeiYGfWmUAQU","name":"Marteau de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.6n2uSdYfRAsSqQnA"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d8 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":6,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"j5659PJlrHz56V1k","name":"Sabre de Pan Tang","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.l3ffzso7GyHMKguD"}},"system":{"description":"<p>Ce long sabre effi lé sert aux Cavaliers démoniaques de Pan Tang pour couper les têtes depuis le dos de leurs monstrueuses montures reptiliennes à six pattes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"lYtm5MwP96numskx","name":"Hallebarde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.ZTdyIoMzE9kqm4e6"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"2d6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"mQGT0vmDjoTZCW5u","name":"Lance melnibonéenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.KAl5qXHeYDoYRU6G"}},"system":{"description":"<p>La lance melnibonéenne, faite pour le combat à cheval ou à dos de dragon, ressemble à une lance ordinaire. Son fer est cependant plus fi n et plus étroit. Avant la chute d’Imrryr, il est quasi impossible de se procurer de telles armes sur les marchés des Jeunes Royaumes. Elles peuvent être maniées à une main comme lors des joutes à cheval ou à deux mains au cœur des mêlées.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"2d6+ 4","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":10,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc en os","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Dy9dzVhXbNAVm3zn"}},"_id":"nzve5qucVN6FC5wn","system":{"description":"<p>Arc composite recourbé fait de bois, d’os et d’acier, l’arc en os melnibonéen est une arme extraordinairement puissante entre les mains d’un guerrier melnibonéen ou d’un archer esclave du Glorieux Empire. On peut se le procurer dans les Jeunes Royaumes après la chute d’Imrryr.</p>","typearme":"tir","isdefense":false,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d8 + 1","nonletaux":false,"deuxmains":false,"courte":30,"moyenne":60,"longue":125,"tr":2,"rarete":10,"prix":500,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"sHj90bPcMaDlOw51","name":"Bâton ferré ou lesté","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.zoBHSbvJPnjbtPh6"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1D8","nonletaux":true,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":1,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"sju2r73hUHyGbHYg","name":"Épée courte / Glaive","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Mxv5gMHRvRrsuhPA"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1D6+1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"t2uQcWe7kirUOp3D","name":"Faucheur","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.OlmzE29fh9DFd8TF"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"uatjBTFCE5ZCqhAd","name":"Fléau lourd","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.vDDw0qqM1Kg7Pu6T"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d10+ 3","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"v7ymzlEALvsk0poA","name":"Hache","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.2MwgptY2kE4tgYBe"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":2,"prix":30,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"wWk0Wfer06Ttmouv","name":"Épée large","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.iuAizxCvnUxmsjrn"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d6+ 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"wv5EiePmPTpqFutt","name":"Épée longue","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.yiYtZ0sCUpMihvzz"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 1","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964301,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
|
|
BIN
packs/armes/000195.ldb
Normal file
BIN
packs/armes/000195.ldb
Normal file
Binary file not shown.
0
packs/armes/000202.log
Normal file
0
packs/armes/000202.log
Normal file
1
packs/armes/CURRENT
Normal file
1
packs/armes/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000200
|
0
packs/armes/LOCK
Normal file
0
packs/armes/LOCK
Normal file
8
packs/armes/LOG
Normal file
8
packs/armes/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.267528 7f830f4006c0 Recovering log #198
|
||||
2024/05/01-09:35:36.318214 7f830f4006c0 Delete type=3 #196
|
||||
2024/05/01-09:35:36.318310 7f830f4006c0 Delete type=0 #198
|
||||
2024/05/01-09:42:43.133457 7f830e0006c0 Level-0 table #203: started
|
||||
2024/05/01-09:42:43.133499 7f830e0006c0 Level-0 table #203: 0 bytes OK
|
||||
2024/05/01-09:42:43.141393 7f830e0006c0 Delete type=0 #201
|
||||
2024/05/01-09:42:43.156019 7f830e0006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.156088 7f830e0006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
8
packs/armes/LOG.old
Normal file
8
packs/armes/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.595518 7f0832a006c0 Recovering log #193
|
||||
2024/04/25-23:18:20.606674 7f0832a006c0 Delete type=3 #191
|
||||
2024/04/25-23:18:20.606816 7f0832a006c0 Delete type=0 #193
|
||||
2024/04/25-23:31:59.770416 7f08310006c0 Level-0 table #199: started
|
||||
2024/04/25-23:31:59.770479 7f08310006c0 Level-0 table #199: 0 bytes OK
|
||||
2024/04/25-23:31:59.807298 7f08310006c0 Delete type=0 #197
|
||||
2024/04/25-23:31:59.807694 7f08310006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.846668 7f08310006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
BIN
packs/armes/MANIFEST-000200
Normal file
BIN
packs/armes/MANIFEST-000200
Normal file
Binary file not shown.
BIN
packs/dons/000194.ldb
Normal file
BIN
packs/dons/000194.ldb
Normal file
Binary file not shown.
0
packs/dons/000201.log
Normal file
0
packs/dons/000201.log
Normal file
1
packs/dons/CURRENT
Normal file
1
packs/dons/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/dons/LOCK
Normal file
0
packs/dons/LOCK
Normal file
8
packs/dons/LOG
Normal file
8
packs/dons/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.447142 7f830ea006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.500900 7f830ea006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.501044 7f830ea006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.163729 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.163769 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.170272 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.184812 7f830e0006c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.184921 7f830e0006c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
8
packs/dons/LOG.old
Normal file
8
packs/dons/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.639847 7f0833e006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.650619 7f0833e006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.650726 7f0833e006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.846695 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.846738 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.878047 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.950365 7f08310006c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.950424 7f08310006c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
BIN
packs/dons/MANIFEST-000199
Normal file
BIN
packs/dons/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/equipement/000194.ldb
Normal file
BIN
packs/equipement/000194.ldb
Normal file
Binary file not shown.
0
packs/equipement/000201.log
Normal file
0
packs/equipement/000201.log
Normal file
1
packs/equipement/CURRENT
Normal file
1
packs/equipement/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/equipement/LOCK
Normal file
0
packs/equipement/LOCK
Normal file
8
packs/equipement/LOG
Normal file
8
packs/equipement/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.386580 7f830f4006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.440932 7f830f4006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.441077 7f830f4006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.156323 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.156397 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.163540 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.184777 7f830e0006c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.184871 7f830e0006c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
8
packs/equipement/LOG.old
Normal file
8
packs/equipement/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.625174 7f0832a006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.636417 7f0832a006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.636541 7f0832a006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.807936 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.807990 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.846313 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.913834 7f08310006c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.950407 7f08310006c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
BIN
packs/equipement/MANIFEST-000199
Normal file
BIN
packs/equipement/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/heritages/000194.ldb
Normal file
BIN
packs/heritages/000194.ldb
Normal file
Binary file not shown.
0
packs/heritages/000201.log
Normal file
0
packs/heritages/000201.log
Normal file
1
packs/heritages/CURRENT
Normal file
1
packs/heritages/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/heritages/LOCK
Normal file
0
packs/heritages/LOCK
Normal file
8
packs/heritages/LOG
Normal file
8
packs/heritages/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.580416 7f830ea006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.650922 7f830ea006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.651073 7f830ea006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.178046 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.178094 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.184514 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.184854 7f830e0006c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.184903 7f830e0006c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
8
packs/heritages/LOG.old
Normal file
8
packs/heritages/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.668825 7f0833e006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.680265 7f0833e006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.680363 7f0833e006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.913864 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.913918 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.950159 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.950438 7f08310006c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.950490 7f08310006c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
BIN
packs/heritages/MANIFEST-000199
Normal file
BIN
packs/heritages/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/metiers/000194.ldb
Normal file
BIN
packs/metiers/000194.ldb
Normal file
Binary file not shown.
0
packs/metiers/000201.log
Normal file
0
packs/metiers/000201.log
Normal file
1
packs/metiers/CURRENT
Normal file
1
packs/metiers/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/metiers/LOCK
Normal file
0
packs/metiers/LOCK
Normal file
8
packs/metiers/LOG
Normal file
8
packs/metiers/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.655366 7f830f4006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.709235 7f830f4006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.709381 7f830f4006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.185067 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.185130 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.191994 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.216134 7f830e0006c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.216237 7f830e0006c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
8
packs/metiers/LOG.old
Normal file
8
packs/metiers/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.683579 7f0832a006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.739808 7f0832a006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.740012 7f0832a006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.987531 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.987597 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:32:00.025092 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:32:00.098181 7f08310006c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:32:00.098246 7f08310006c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
BIN
packs/metiers/MANIFEST-000199
Normal file
BIN
packs/metiers/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/origines/000194.ldb
Normal file
BIN
packs/origines/000194.ldb
Normal file
Binary file not shown.
0
packs/origines/000201.log
Normal file
0
packs/origines/000201.log
Normal file
1
packs/origines/CURRENT
Normal file
1
packs/origines/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/origines/LOCK
Normal file
0
packs/origines/LOCK
Normal file
8
packs/origines/LOG
Normal file
8
packs/origines/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.508432 7f830f4006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.561800 7f830f4006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.561939 7f830f4006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.170680 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.170753 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.177825 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.184836 7f830e0006c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.184888 7f830e0006c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
8
packs/origines/LOG.old
Normal file
8
packs/origines/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.653541 7f0832a006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.665587 7f0832a006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.665693 7f0832a006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.878272 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.878321 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.913563 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.950389 7f08310006c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.950473 7f08310006c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
BIN
packs/origines/MANIFEST-000199
Normal file
BIN
packs/origines/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/pnj-creatures/000090.ldb
Normal file
BIN
packs/pnj-creatures/000090.ldb
Normal file
Binary file not shown.
0
packs/pnj-creatures/000097.log
Normal file
0
packs/pnj-creatures/000097.log
Normal file
1
packs/pnj-creatures/CURRENT
Normal file
1
packs/pnj-creatures/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000095
|
0
packs/pnj-creatures/LOCK
Normal file
0
packs/pnj-creatures/LOCK
Normal file
8
packs/pnj-creatures/LOG
Normal file
8
packs/pnj-creatures/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.082984 7f830f4006c0 Recovering log #93
|
||||
2024/05/01-09:35:36.138765 7f830f4006c0 Delete type=3 #91
|
||||
2024/05/01-09:35:36.138887 7f830f4006c0 Delete type=0 #93
|
||||
2024/05/01-09:42:43.096611 7f830e0006c0 Level-0 table #98: started
|
||||
2024/05/01-09:42:43.096659 7f830e0006c0 Level-0 table #98: 0 bytes OK
|
||||
2024/05/01-09:42:43.103787 7f830e0006c0 Delete type=0 #96
|
||||
2024/05/01-09:42:43.126495 7f830e0006c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.126585 7f830e0006c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
8
packs/pnj-creatures/LOG.old
Normal file
8
packs/pnj-creatures/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.542505 7f0832a006c0 Recovering log #88
|
||||
2024/04/25-23:18:20.553330 7f0832a006c0 Delete type=3 #86
|
||||
2024/04/25-23:18:20.553446 7f0832a006c0 Delete type=0 #88
|
||||
2024/04/25-23:31:59.654488 7f08310006c0 Level-0 table #94: started
|
||||
2024/04/25-23:31:59.654563 7f08310006c0 Level-0 table #94: 0 bytes OK
|
||||
2024/04/25-23:31:59.691350 7f08310006c0 Delete type=0 #92
|
||||
2024/04/25-23:31:59.691614 7f08310006c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.807584 7f08310006c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
BIN
packs/pnj-creatures/MANIFEST-000095
Normal file
BIN
packs/pnj-creatures/MANIFEST-000095
Normal file
Binary file not shown.
|
@ -1,11 +1,7 @@
|
|||
{"name":"Cuirasse, armure de demi-plaques","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":4,"degats":"","rarete":8,"prix":200},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.FvufSkzJOSftZhYt"}},"_id":"2hD1DQVeCIQIXFU7"}
|
||||
{"name":"Pavois","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"<p>Le pavois se plante dans le sol au début du combat et ne peut normalement plus être déplacé jusqu’à son issue.</p>","typeprotection":"armure","protection":3,"degats":"","rarete":7,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.y1kNQJYRCEol83IA"}},"_id":"2uqB1doLYK4S2EN2"}
|
||||
{"name":"Armure de plaques melnibonéenne","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"<p>Cette armure ornée et fi nement gravée est ajustée aux mensurations de celui qui la porte. On ne peut en trouver en dehors d’Imrryr avant sa chute. L’armure couvre tout le corps des pieds à la tête. Le casque est toujours surmonté d’une sculpture en forme de dragon ou de serpent de mer. Des motifs complexes et imbriqués recouvrent la surface de tous les éléments de l’armure. Après la chute d’Imrryr, quelques pièces d’armure melnibonéennes apparaissent de temps en temps sur les marchés mais les armures entières restent rarissimes. Si elle a été spécialement conçue pour son porteur, une armure de plaques melnibonéenne n’impose pas de pénalité d’encombrement à ce dernier.</p>","typeprotection":"armure","protection":6,"degats":"","rarete":10,"prix":1000},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.09OukepQ8Oep0642"}},"_id":"FFX0dFDZoVXFzyXk"}
|
||||
{"name":"Bouclier d’infanterie","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":2,"degats":"1D6","rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Xn1tVJgKinG0hc10"}},"_id":"I2X36O7hkpigZmJo"}
|
||||
{"name":"Tenues rembourrées, cuir souple, fourrures","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":1,"degats":"","rarete":2,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5dV4DORRrNdAd2Z5"}},"_id":"SqyKvR1GJMJvgHCJ"}
|
||||
{"name":"Targe","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":1,"degats":"1D4","rarete":4,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.dyTeMFfvg5mAKT2n"}},"_id":"WH1m35jgm7ilTTuG"}
|
||||
{"name":"Armure du Désert des Larmes","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"<p>Les barbares et les nomades du Désert des Larmes ont créé des armures de bois protégeant l’abdomen, la poitrine et les bras. Ces armures sont faites à partir du bois de l’arbre Fal, originaire de plateaux pluvieux situés au-delà du désert. Les barbares décorent souvent leurs armures de symboles tribaux et en protègent la surface avec de la laque. Conçue en bois, cette armure a la particularité de pouvoir flotter quoiqu’un séjour prolongé dans l’eau risque de la détériorer très rapidement. Elle n’en reste pas moins une protection très recherchée par ceux qui ont à s’aventurer sur les flots.</p>","typeprotection":"armure","protection":2,"degats":"","rarete":8,"prix":200},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.b1JGc5OlrIzlQbTO"}},"_id":"ZzzXZUn5PU1lnP0X"}
|
||||
{"name":"Cuir bouilli, cuir clouté","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":2,"degats":"","rarete":5,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.T9RAyLXDPSHlvoDR"}},"_id":"kis2lI7oEtdWzJbQ"}
|
||||
{"name":"Armure de plates, harnois","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":5,"degats":"","rarete":10,"prix":500},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.7JErvrlTYaFbCvoR"}},"_id":"so7x8hK8qEc5QqnQ"}
|
||||
{"name":"Broigne, cotte de maille","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":3,"degats":"","rarete":7,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.th6blCtgBmsWSYdY"}},"_id":"veoS6Gtzj6Dq087V"}
|
||||
{"name":"Écu d’acier","type":"protection","img":"systems/fvtt-mournblade/assets/icons/protection.webp","data":{"description":"","typeprotection":"armure","protection":3,"degats":"1D8","rarete":9,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TAA8qb6POO0HyhU5"}},"_id":"zqKOtmrDNrDYBu2z"}
|
||||
|
|
BIN
packs/protection/000194.ldb
Normal file
BIN
packs/protection/000194.ldb
Normal file
Binary file not shown.
0
packs/protection/000201.log
Normal file
0
packs/protection/000201.log
Normal file
1
packs/protection/CURRENT
Normal file
1
packs/protection/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/protection/LOCK
Normal file
0
packs/protection/LOCK
Normal file
8
packs/protection/LOG
Normal file
8
packs/protection/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.326101 7f830ea006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.382463 7f830ea006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.382677 7f830ea006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.148903 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.148967 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.155801 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.156059 7f830e0006c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.156117 7f830e0006c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
8
packs/protection/LOG.old
Normal file
8
packs/protection/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.610323 7f0833e006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.622545 7f0833e006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.622654 7f0833e006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.733906 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.734001 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.770187 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.807670 7f08310006c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.807915 7f08310006c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
BIN
packs/protection/MANIFEST-000199
Normal file
BIN
packs/protection/MANIFEST-000199
Normal file
Binary file not shown.
45
packs/runes.db
Normal file
45
packs/runes.db
Normal file
|
@ -0,0 +1,45 @@
|
|||
{"name":"Garde","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de Garde dissipe les effets des Runes employées contre le sorcier, <strong>même celles qu’il ne connaît pas.</strong> Chaque point d’Âme utilisé annule un point d’effet magique de la Rune contrée. La Rune de Garde ne bloque pas l’effet d’une Rune que le sorcier active sur lui-même.</p>","formule":"Kest’","seuil":20,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.1qARybMHY7tyvRCN"}},"_id":"1JqWbEkHUoKXbsgn"}
|
||||
{"name":"Vérité","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de Vérité oblige sa cible à répondre avec une totale sin\u0002cérité à une question. Pour chaque tranche de 3 points d’Âme, le sorcier peut poser une question fermée, c’est-à-dire une question dont la réponse est obligatoirement oui ou non. Un test en oppo\u0002sition Clairvoyance + Trempe / Clairvoyance + Savoir : Runes du sorcier peut être tenté, mais seule une réussite héroïque permet de mentir avec succès. Une réussite simple permet simplement de ne pas répondre à la question posée. La Rune de Vérité est usuellement activée en prononçant son nom bien qu’elle puisse également être intégrée par un enchantement dans une potion que l’on donne à boire. La victime est consciente qu’une force magique la pousse à révéler ses secrets.</p>","formule":"Léth’ Hé’ Yyr","seuil":10,"prononcee":"effet normal","tracee":"tracée sur un onguent ou, par exemple, dans les remous d’une potion bouillonnante, elle confère son pouvoir à la potion qui peut ensuite être donnée à boire. Elle a pour particularité de retirer la saveur de tout aliment avec lequel elle est mélangée."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.wqTA4HN4c0mW0ctT"}},"_id":"1gjuH4gFroHLx4yX"}
|
||||
{"name":"Passage","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune du Passage contre les effets de la Rune de Barrage et de la Rune d’Emprisonnement. Elle permet également d’ou\u0002vrir n’importe quel mécanisme de fermeture (comme un cade\u0002nas ou un verrou) même si ce mécanisme n’est pas apparent (comme un verrou posé de l’autre côté d’une porte). Comptez 1 point pour une simple serrure, 10 points pour un pont\u0002levis. Pour activer cette Rune, le sorcier peut prononcer son nom ou l’inscrire sur l’objet selon ce qui est le plus approprié.</p>","formule":"Ne’Hel Fikhorn","seuil":15,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.n2tV6CX4qcHdxCQf"}},"_id":"4mgRvTPQR2JP6VAE"}
|
||||
{"name":"Emprisonnement","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune d’Emprisonnement ne peut pas être activée en pro\u0002nonçant son nom : elle doit être inscrite. La Rune est la plu\u0002part du temps utilisée pour définir une zone dans laquelle il est possible d’entrer mais non de sortir tant que son pouvoir dure. La Rune d’Emprisonnement est très similaire à la Rune de Barrage ; reportez-vous à cette Rune. Le sorcier doit tou\u0002jours définir précisément la zone sous l’emprise de l’effet. Quiconque est emprisonné par la Rune ne souffre d’aucune affliction, sauf celles éventuellement causées par l’environne\u0002ment. Il ne subit aucun dommage s’il tente de sortir de la zone d’Emprisonnement. La victime sait qu’elle est prisonnière et se doute qu’elle est sans doute victime de Sorcellerie, mais elle ne peut sortir de la zone dans laquelle elle est retenue. Il n’y a pas de barrière invisible qui s’élève ou de mains de pierre qui lui saisissent les pieds. Elle ne peut simplement plus sortir de cette zone, comme si une part de son esprit s’y refusait, même si un compagnon tente de la porter ou de l’en faire sortir de force. Et il y a de fortes chances que ledit compagnon ne puisse plus en sortir non plus. </p>","formule":"Ân’Tan mahau","seuil":15,"prononcee":"sans effet","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.eAcWKxN0AAyCTSUp"}},"_id":"5JgGBHAz9aZQTGIR"}
|
||||
{"name":"Bêtes","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Chaque bête – insecte, poisson, reptile, mammifère ou oiseau – possède sa propre Rune. Il faut dépenser 1 point d’Âme pour les activer. Les Runes des Bêtes ne font rien de plus qu’indi\u0002quer la nature de la bête. Quand une autre Rune est assemblée avec Rune des Bêtes, leurs pouvoirs n’affectent que la créature associée à la Rune. Ainsi, combiner la Rune de Garde avec la Rune de l’Insecte permet de tenir les insectes, et seulement les insectes, à distance.</p>","formule":"Galab","seuil":5,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.56G3xBhwVK9k3jVA"}},"_id":"87qaL20n9DqU6b9B"}
|
||||
{"name":"Miroir","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune du Miroir renvoie toute attaque physique portée sur le sorcier vers l’attaquant. L’attaquant s’attaque en réalité lui\u0002-même. Le nombre total d’attaques contrées dépend du nombre de points d’Âme utilisés pour activer la Rune. Chaque attaque entame la réserve de la Rune de 3 points d’Âme. Lorsque cette réserve est vide, la Rune est épuisée et cesse de faire effet.</p>\n<p>Pour que l’effet se produise, il faut que le magicien sache qu’il fait l’objet d’une attaque.</p>","formule":"Aé’Kholôn","seuil":15,"prononcee":"effet normal","tracee":"effet normal mais la Rune doit être tracée sur un bouclier, une armure ou un corps."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.UR8FXYlqxp5Vi3jr"}},"_id":"8dSf90NE4cpByZxu"}
|
||||
{"name":"Air","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de l’Air permet au sorcier de contrôler l’air, de l’ani\u0002mer et dans une certaine mesure d’en créer quand il fait défaut, comme lorsque le sorcier se trouve sous l’eau. Le contrôle de l’air permet d’influencer la force et la direction du vent. Le sor\u0002cier peut également, grâce à la force de l’air, soulever à distance des objets et leur faire effectuer des mouvements simples. Un point d’Âme permet de réaliser l’un des effets suivants :</p>\n<ul>\n<li>augmenter ou diminuer la vitesse du vent de 15 mètres par seconde ;</li>\n<li>dissiper un gaz empoisonné ou nauséabond contenu dans un verre (1 point) dans une jarre (2 points), dans une petite pièce (5 points), dans une salle (8 points), etc. ;</li>\n<li>soulever et déplacer à toute petite vitesse un objet de 500 grammes environ.</li>\n</ul>\n<p>La connaissance de la Rune de l’Air est nécessaire pour invo\u0002quer et contrôler un Élémentaire d’Air</p>","formule":"Aïlé","seuil":10,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.v6eXdl7ZxbB1qC6s"}},"_id":"AUAoyxiocnxSPxyq"}
|
||||
{"name":"Hybride","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette Rune fut découverte au temps des Guerres Dharzi, mais fut peu employée par les Dharzi qui préféraient user de sa Rune jumelle : Chimère.</p>\n<p>La Rune peut être employée sur des cadavres ou des corps bien vivants, ou un immonde mélange des deux.</p>\n<p>La Rune Hybride permet de fusionner deux ou plusieurs corps humains (ou humanoïdes) afin de créer un nouvel homme ou une nouvelle femme. Le nombre de points d’Âme utili\u0002sés pour l’activer doit être égal au nombre total de points de Trempe combinés de l’ensemble des créatures affectées. Le sorcier peut interchanger les parties du corps comme il le sou\u0002haite. Il est possible à un être vivant ciblé par cette Rune d’y résister en réussissant un test en opposition de Clairvoyance + Trempe / Clairvoyance + Savoir : Runes du sorcier. Quand la Rune est désactivée, la créature hybride se disloque et ses parties vivantes subissent [[/roll 1d10 + 3]] points de dégâts létaux.</p>","formule":"An’An’","seuil":25,"prononcee":"effet normal","tracee":"si la Rune est tracée, les conséquences de l’échec dramatique du Sort ne peuvent être que la perte des points d’Âme."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.JUczeoZCX72Y2eil"}},"_id":"AYeUGdCvSSwdKEky"}
|
||||
{"name":"Homme","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>En tant que telle, la Rune de l’Homme est une indication de genre. Quand elle est combinée avec une autre Rune, elle restreint les effets de cette Rune aux seuls êtres masculins. Il faut dépenser 1 point d’Âme pour l’activer.</p>","formule":"An’ Haer","seuil":5,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.YQYed3IAkTFmF1Mj"}},"_id":"Asg637gk3ciMb8nG"}
|
||||
{"name":"Vision","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Pour activer la Rune de Vision, le sorcier peut prononcer son nom ou l’inscrire.</p>","formule":"Katz’ Hyyr","seuil":10,"prononcee":"quand il prononce le nom de cette Rune, la compétence Perception du sorcier est augmentée de 1 point pour 2 points d’Âme dépensés, uniquement dans le cas de tests de perception visuelle.","tracee":"si la Rune est inscrite sur un objet, un mur ou un arbre, le sorcier peut voir comme s’il se trouvait là où elle est tracée, aussi longtemps que la Rune est maintenue (coût : 5 points d’Âme)."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.6JaFdIj3DloGOs7Z"}},"_id":"Dx1aqAbGPjlYcGKm"}
|
||||
{"name":"Chimère","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette Rune fut découverte au temps des Guerres Dharzi. Elle permet de fusionner deux ou plusieurs créatures ensemble pour en créer une nouvelle. Le nombre de points d’Âme utilisés pour l’activer doit être égal au nombre total de points de Puis\u0002sance combinés de l’ensemble des créatures affectées. Le sorcier peut décider de quel attribut et de quelle partie du corps de chaque créature dispose la chimère ainsi constituée. Cette Rune doit être assemblée avec les Runes des Bêtes appropriées pour chaque type de créature touché. Quand la Rune est désactivée, la chimère se disloque en un répugnant amas de chairs mortes.</p>","formule":"An’ Galab","seuil":20,"prononcee":"effet normal","tracee":"si la Rune est tracée, les conséquences de l’échec dramatique du Sort ne peuvent être que la perte des points d’Âme."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.I9hHQiphvR5K0Rlh"}},"_id":"EEjjKvuPrVGuF5kp"}
|
||||
{"name":"Parfum","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Pour activer la Rune du Parfum, le sorcier peut prononcer son nom ou l’inscrire. Il convient de noter que la Rune du Parfum ne supprime pas les effets du poison ou de la maladie ; elle ne fait qu’en masquer l’odeur ou le goût. </p>","formule":"O’ Khaïm","seuil":10,"prononcee":"quand le sorcier prononce le nom de la Rune, sa compétence Perception est augmentée de 1 point pour 2 points d’Âme dépensés, uniquement dans le cas de tests de perception olfactive ou gustative.","tracee":"si la Rune est inscrite sur un objet approprié (comme un bol, une assiette ou un gobelet), son contenu, quel qu’il soit et quel que soit son état, devient pour celui qui l’ingère incroyablement savoureux."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.YAFRcdM6nAIiQTRD"}},"_id":"FEMjhQ3csQXkVvIn"}
|
||||
{"name":"Chaos","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune du Chaos est une étoile composée de huit flèches provenant toutes d’un même point central. Il faut dépenser 1 point d’Âme pour l’activer. Elle n’a en fait aucun pouvoir intrinsèque. Elle sert simplement à marquer l’influence du Chaos sur un endroit ou l’allégeance d’un sorcier. Assemblée avec une autre Rune, elle focalise l’effet de celle-ci sur qui\u0002conque est affi lié d’une manière ou d’une autre au Chaos. <strong>La connaissance de la Rune du Chaos est nécessaire pour pou\u0002voir invoquer et contrôler des Démons.</strong></p>","formule":"Fa’Hi ou Ka’He","seuil":10,"prononcee":"effet normal","tracee":"si la Rune du Chaos est tracée sur une arme, l’arme bénéfi cie d’un bonus de + 1 aux dégâts (par tranche de 5 points d’Âmes investis) lorsqu’elle frappe un Automaton ou un être ayant conclu un Pacte avec la Loi."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.YDQgSU1dJZWqtb9G"}},"_id":"GYNL8PAjFzH6HBfh"}
|
||||
{"name":"Amélioration","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Chaque Rune d’Amélioration augmente un unique attribut d’un point pour cinq points d’Âme dépensés. L’amélioration de la Clairvoyance ou de la Trempe par ce biais n’a aucun effet sur le nombre de points d’Âme. Le sorcier doit connaître la Rune correspondant à l’attribut qu’il souhaite améliorer. Tous les attributs secondaires, à l’exception de l’Âme, sont recal\u0002culés en fonction de l’amélioration pendant toute la durée d’activité de la Rune. Les cinq Runes d’Amélioration sont : la Rune d’Adresse, la Rune de Clairvoyance, la Rune de Pré\u0002sence, la Rune de Puissance et la Rune de Trempe.</p>\n<p>Cette Rune ne peut qu’être tracée sur le corps de la cible.</p>","formule":"Ach S’erem","seuil":10,"prononcee":"sans effet","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.mAvirNh3g3q4t2fe"}},"_id":"Hqi40av8JOGqNQ1S"}
|
||||
{"name":"Influence","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Le sorcier peut infl uencer la cible qu’il touche de manière à obtenir ses faveurs. Par tranche de 3 points d’Âme dépensés, il obtient un bonus de + 1 à tous ses tests de Persuasion ou de Coercition. La cible peut y résister en réussissant un test en opposition Clairvoyance + Trempe / Clairvoyance + Savoir : Runes du sorcier.</p>","formule":"Akh’A’Haïme","seuil":15,"prononcee":"effet normal","tracee":"les conséquences de l’échec dramatique du Sort ne peuvent être que la perte de points d’Âme."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.fxq2glX79V7Wv0xY"}},"_id":"KGK11U6UJbtv4CHH"}
|
||||
{"name":"Silence","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Pour activer la Rune de Silence, le sorcier peut murmurer son nom ou l’inscrire. La Rune de Silence ne rend pas invisible : elle est inutile lorsqu’il s’agit de ne pas être vu.</p>","formule":"Hess ’lan","seuil":10,"prononcee":"si le sorcier murmure le nom de la Rune, sa compétence Discrétion augmente d’un point pour 2 points d’Âme dépensés.","tracee":"si la Rune est inscrite sur un objet, tous les sons dans un rayon de 1 mètre par point d’Âme dépensé sont étouffés, ce qui a également pour effet d’augmenter la discré\u0002tion du porteur de l’objet et de ceux qui l’entourent. Il faut alors dépenser 3 points d’Âme pour 1 point supplémentaire en Discrétion."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.y9tz2MnBJSn34tcL"}},"_id":"LF2NIr48WTpGJF2a"}
|
||||
{"name":"Sommeil","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de Sommeil plonge la cible dans un sommeil répa\u0002rateur et sans rêve. Pour l’activer, il faut dépenser un nombre de points d’Âme égal au niveau de Trempe de la cible. Il est impossible de réveiller le dormeur tant que l’effet de la Rune est actif. Si la cible de la Rune n’est pas consentante, elle peut y résister en réussissant un test en opposition de Clairvoyance + Trempe / Clairvoyance + Savoir : Runes du sorcier. Pour activer la Rune de Sommeil, le sorcier peut prononcer son nom ou l’inscrire. La Rune de Sommeil protège également le dormeur contre toute attaque des Voleurs de Rêves (qui seront traités dans un supplément à venir).</p>","formule":"Syk’Myyr","seuil":15,"prononcee":"si le sorcier prononce le nom de la Rune, il doit également toucher la cible pour que la Rune fasse effet.","tracee":"si la Rune est inscrite, l’objet qui la porte doit être en contact avec la cible."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.L1SaKkFkFF7Of8j6"}},"_id":"N8c4UlQacW1nBeVx"}
|
||||
{"name":"Lien de l’âme","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette Rune autorise le sorcier à transférer temporairement son âme, ou celle d’une personne consentante qu’il touche, hors de son corps vers un autre réceptacle. Le nombre de points d’Âme utilisés pour l’activer doit être égal au niveau de Clair\u0002voyance de la cible. Un être affecté par cet effet ne souffre pas du transfert et n’est pas repérable par l’Œil du Sorcier. Une âme introduite dans le corps d’une autre créature continue à vivre si son corps originel vient à mourir. Elle peut à nouveau changer de corps si la Rune est une nouvelle fois activée. Si l’âme est introduite dans un objet et que son corps originel est tué, l’âme reste liée à l’objet jusqu’à ce que quelqu’un la délivre ou que la Rune soit désactivée. Dans ce second cas, l’âme captive meurt sur-le-champ.</p>","formule":"Kh’Ân’Tan mahau","seuil":30,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Y6H0d6itYEKRSk29"}},"_id":"Q7ErQMozGsQRjakA"}
|
||||
{"name":"Froid","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune du Froid rend le sorcier, ou l’objet sur lequel elle est inscrite, froid au toucher. Un seul point d’Âme investi rend la cible aussi froide qu’une source d’eau fraîche (ou qu’un cadavre). Les points supplémentaires dépensés causent des dégâts létaux dus au froid à quiconque touche la cible : les dégâts sont de 1 point pour 2 points d’Âme dépensés. Les dégâts continuent à chaque tour de jeu tant que la victime est en contact avec la cible du sort. Pour geler de l’eau ou de la nourriture, le sorcier doit prononcer le nom de la Rune, dépenser 2 points d’Âme et toucher l’objet ou le liquide qu’il souhaite geler. Il peut geler pour 1 point d’Âme 1 litre de liquide, pour 2 points l’auge des chevaux dans une écurie, pour 5 points un agneau, 8 points une mare ou un puits, 50 points un petit lac, etc. </p>","formule":"Kalda","seuil":10,"prononcee":"effet normal","tracee":"si la Rune est tracée, elle ne cause pas de dom\u0002mage au support sur lequel elle est inscrite"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.4NDeb8AQrKteJacI"}},"_id":"SF4NMsUpaoOYBWUJ"}
|
||||
{"name":"Domination","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette Rune permet d’obtenir une obéissance totale de l’être sur lequel elle est activée. Le nombre de points d’Âme uti\u0002lisés pour la Rune doit être égal à la Trempe de la cible. Si la Rune est utilisée contre un être pensant, celui-ci peut y résister en réussissant un test d’opposition Clairvoyance + Trempe / Clairvoyance + Savoir : Runes du sorcier. Il lui est possible de refaire ce test chaque fois qu’il reçoit un ordre mettant sa vie en péril direct (par exemple, l’ordre de se jeter dans le vide).</p>","formule":"Saë Tar","seuil":20,"prononcee":"effet normal","tracee":"si la Rune est tracée sur le corps de la victime, effet normal."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.0KyAUGiKJlSADYBD"}},"_id":"XDpno2OGwpRx082M"}
|
||||
{"name":"Vitesse","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette augmente d’1 niveau la Vitesse de la cible par point d’Âme dépensé. Elle octroie également un bonus de + 1 point d’initiative pour 2 points d’Âme dépensés.</p>","formule":"Aé’Ké’Léon","seuil":10,"prononcee":"effet normal","tracee":"la Rune doit être tracée sur la cible."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.xfEG6nj0R2eblfYM"}},"_id":"XkaQxMd65Pt5Le5A"}
|
||||
{"name":"Feu","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune du Feu permet au sorcier de contrôler, mais pas de créer, le feu. La Rune peut être utilisée pour éteindre des flammes ou pour contrôler leur direction.</p>\n<p>Un point d’Âme permet d’éteindre une flamme, 2 points le petit feu d’un bivouac, 5 points un grand feu de joie, 8 points un feu qui embrase une chambre, 50 points un feu de forêt, etc. La connaissance de la Rune du Feu est nécessaire pour invo\u0002quer et contrôler un Élémentaire de Feu.</p>","formule":"At’ra","seuil":10,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.1dkIsj4ZTIi8e4Zj"}},"_id":"XvFeI7mbRNcu1Ara"}
|
||||
{"name":"Animation des morts","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette Rune très dangereuse permet de restituer aux morts un semblant de vie. Pour réanimer un mort, le sorcier doit dépen\u0002ser autant de points d’Âme que le corps avait de Puissance. Lorsqu’un mort est ramené dans le monde des vivants, le sor\u0002cier doit accomplir un test de Capacité de Présence + Coer\u0002cition / 15. En cas d’échec, la créature devient incontrôlable. En cas de réussite, elle obéira à des ordres simples.</p>\n<p>Les créatures ainsi réanimées utilisent les attributs – à l’excep\u0002tion de la Clairvoyance et des points d’Âme – et compétences physiques qu’elles possédaient de leur vivant. Si elles tombent à 0 point de Santé, elles sont détruites. Le corps reste dans l’état dans lequel il a été trouvé. Si le corps n’a plus de forme, s’il est à l’état de poussière ou de squelette épars, la Rune d’Animation ne fonctionne pas. Un squelette intact, portant encore ses armes et son armure, pourra être réanimé, mais deux fémurs, quelques côtes et un crâne ne serviront à rien. </p>","formule":"Li’Nokhaïm","seuil":25,"prononcee":"effet normal","tracee":"si la Rune est tracée, les conséquences de l’échec dramatique du Sort ne peuvent être que la perte des points d’Âme."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.lGm46q8kB1hZ3JFL"}},"_id":"aSlGu6bN9EBWr66s"}
|
||||
{"name":"Santé","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de Santé peut être inscrite ou prononcée. Elle est la composition de base des Sortilèges et des potions de soin. Elle possède les effets suivants :</p>\n<ul>\n<li>elle soigne les blessures et referme les plaies à raison de 1 point de dégât létal pour 2 points d’Âme dépensés ;</li>\n<li>elle soigne une maladie d’une Virulence égale au nombre de points d’Âme investis multiplié par deux, à condition que le sorcier ait pu identifier la maladie. Le patient recouvre norma\u0002lement ses points de Santé.</li>\n</ul>","formule":"Oû Kheïa","seuil":15,"prononcee":"si la Rune est prononcée, elle doit l’être à nouveau chaque jour jusqu’à la guérison complète du malade.","tracee":"si la Rune est inscrite, elle doit l’être sur tout le corps, et le malade doit la garder tout au long du processus."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.9skcG3NV0xqxZjMk"}},"_id":"df0XfMeNhaP6RPQ8"}
|
||||
{"name":"Barrage, Interdiction ou Excommunication","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Les créatures prises dans l’aire d’effet de la Rune peuvent s’en échapper mais elles ne peuvent pas y retourner tant que l’effet n’est pas dissipé. Toute tentative pour abattre les murs, bri\u0002ser les fenêtres ou creuser un tunnel dans la zone d’effet de la Rune est vouée à l’échec. Le seul moyen de contrer l’effet d’une Rune de Barrage est d’utiliser une Rune de Passage, pour laquelle le sorcier doit dépenser au moins autant de points d’Âme que le pouvoir de la Rune.</p>","formule":"Na’Khal’Rlye Na","seuil":10,"prononcee":"effet normal","tracee":"si la Rune est tracée, les conséquences de l’échec dramatique du Sort ne peuvent être que la perte des points d’Âme."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.UD13BGbUPdOJsBBL"}},"_id":"elc9fGa5mmssw8GT"}
|
||||
{"name":"Toucher","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de Caresse permet de toucher virtuellement un objet ou un être vivant sans être en contact avec lui. Les sorciers ont l’habitude de prononcer son nom plutôt que de l’inscrire. Pour chaque point d’Âme investi, le sorcier peut toucher et ressentir le contact d’un objet distant de 10 mètres. Il convient de noter que la Rune de Caresse ne permet en aucune façon de faire bouger l’objet. Si la cible est un être vivant, elle peut faire un test d’opposition de Clairvoyance + Trempe / Clairvoyance + Savoir : Runes du sorcier. Si le test est réussi, la cible est consciente de l’effet de la Rune comme si les mains du sorcier étaient réellement en contact avec elle, bien que l’origine de la sensation puisse ne pas être visible. Cette Rune est surtout utile en combinaison avec d’autres Runes, afin d’appliquer leur effet sur une cible hors de portée de la main du sorcier.</p>","formule":"Bliss’ Bissa’ët","seuil":10,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.nIz4B2jKV0Eo32ta"}},"_id":"f3HcCBLRhM5qC1pN"}
|
||||
{"name":"Lumière","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette Rune crée de la lumière autour du sorcier, s’il prononce son nom, ou de l’objet, si la Rune est inscrite. La zone est considérée comme éclairée. Il convient de noter que seule la zone indiquée est éclairée, tout ce qui se trouve en dehors de l’aire d’effet reste dans l’ombre. La Rune de la Lumière crée de la lumière, pas une fl amme, dans une zone allant de la taille d’une main pour 1 point d’Âme dépensé, à une maison pour 10 points d’Âme, et ainsi de suite.</p>","formule":"K’hos","seuil":10,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.gT44LzC7XJKlIwOh"}},"_id":"hDfxyYJvN5jOt3b9"}
|
||||
{"name":"Transfert","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette puissante Rune est toujours créée en deux parties. Elle per\u0002met le transfert d’un objet entre ces deux parties. On peut inscrire la première moitié dans un lieu, sur un objet ou un être vivant, en dépensant un seul point d’Âme pour s’assurer de la durée de l’effet. L’effet de la Rune est déclenché quand la deuxième moitié est ins\u0002crite ou que son nom est prononcé. Le sorcier peut alors transférer la cible de la deuxième moitié vers la première ou vice-versa. Si l’une des deux moitiés est liée à un lieu, l’autre moitié, être vivant ou objet, est alors immédiatement transférée vers ce lieu. Le sorcier peut ainsi déplacer un point de Puissance par point d’Âme dépensé dans la seconde partie de la Rune. Si la cible du Transfert n’est pas consentante, elle peut y résister en réussissant un test en opposition de Clairvoyance + Trempe / Clairvoyance + Savoir : Runes du sorcier. La portée du Transfert est illimitée, que ce soit dans notre monde ou dans l’ensemble des plans d’existence.</p>\n<p>Une fois que les deux moitiés de la Rune sont réunies, le pou\u0002voir de la Rune de Transfert se dissipe.</p>","formule":"Laef’ Eren","seuil":25,"prononcee":"sans effet","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.WgQ2pbdqhjswvtuS"}},"_id":"hG2yf6gcEgl54gvt"}
|
||||
{"name":"Alarme","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Quand elle est inscrite sur une personne ou un objet, le sorcier est immédiatement informé de ses déplacements et de tout contact extérieur. La Rune d’Alarme ne peut pas être activée verbalement. Sa portée est de 1 kilomètre par point d’Âme investi.</p>","formule":"Haer’ Gan","seuil":10,"prononcee":"sans effet","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.YSyh6AX3tHrDWfja"}},"_id":"iiltK3LhCxfXwGbB"}
|
||||
{"name":"Ténèbres","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette Rune crée un manteau de ténèbres. Au sein de la zone affectée, les sources de lumière n’apportent aucun éclairage et nul ne peut voir quoi que ce soit, pas même le sorcier. Les autres sens, comme le sonar d’une chauve-souris, fonc\u0002tionnent normalement. L’Œil n’est pas affecté par le pouvoir de la Rune. Celle-ci affecte une zone de la taille d’une main pour 1 point d’Âme dépensé, d’une maison pour 10 points d’Âme, et ainsi de suite. </p>","formule":"Mel’Koô’Ros","seuil":10,"prononcee":"le manteau de ténèbres se tisse autour du sorcier.","tracee":"le manteau de ténèbres se tisse autour de l’objet sur lequel la Rune est inscrite."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.a7MD1ZIKAYMJ8uvZ"}},"_id":"jr7YHR7SJp9fWTk7"}
|
||||
{"name":"Végétaux","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Chaque végétal – arbre, buisson, fleur ou mousse – possède sa propre Rune. Il faut dépenser 1 point d’Âme pour l’ac\u0002tiver. Les Runes des Végétaux ne font ne font rien de plus qu’indiquer la nature du végétal. Quand une autre Rune est assemblée avec l’une des Runes des Végétaux, ses pouvoirs n’affectent que le végétal associé.</p>","formule":"Dhen Drôn","seuil":5,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.n32BpC0hhiEQeQNp"}},"_id":"jymqWk93AuF9piFA"}
|
||||
{"name":"Loi","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de la Loi est une simple fl èche tournée vers le haut. Elle n’a en fait aucun pouvoir intrinsèque. Il faut dépenser 1 point d’Âme pour l’activer. Elle sert juste à marquer l’influence de la Loi sur un endroit ou à indiquer l’allégeance de l’ecclésiaste por\u0002tant ce symbole. Quand elle est assemblée avec une autre Rune, elle focalise l’effet de celle-ci sur les êtres affi liés d’une manière ou d’une autre à la Loi. <strong>La connaissance de la Rune de la Loi est nécessaire pour invoquer et contrôler des créations de la Loi.</strong></p>","formule":"Aerk’Hyn","seuil":10,"prononcee":"effet normal","tracee":"si la Rune de la Loi est tracée sur une arme, l’arme bénéfi cie d’un bonus de + 1 aux dégâts (par tranche de 5 points d’Âmes investis) lorsqu’elle frappe un Démon ou un être ayant conclu un Pacte avec le Chaos."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.uDEeZsq3sUvVEFOl"}},"_id":"kWwx24Zw4tmkrTrq"}
|
||||
{"name":"Purification","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de Purification possède plusieurs pouvoirs. Elle peut en premier lieu stériliser un liquide ou de la nourriture pour 1 point d’Âme. Elle est également capable de réduire de 5 points la Virulence d’un poison (y compris un poison magique) pour chaque point d’Âme investi. Enfin, chaque point d’Âme investi offre 1 point supplémentaire sur les tests de résistance à la maladie.</p>","formule":"Anak’h Sis","seuil":10,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.gKWHe4cgM72aGjfv"}},"_id":"mP50AhMJJbjT3sWG"}
|
||||
{"name":"Dégradation","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Chaque Rune de Dégradation abaisse un seul attribut de 1 point pour 5 points d’Âme dépensés. La dégradation de la Clairvoyance ou de la Trempe par ce biais n’a aucun effet sur le nombre de points d’Âme. Le sorcier doit connaître la Rune correspondant à l’attribut qu’il souhaite détériorer. Tous les attributs secondaires, à l’exception de l’Âme, sont recalculés en fonction de la dégradation pendant toute la durée d’acti\u0002vité de la Rune. Les cinq Runes de Dégradation sont : la Rune de Maladresse, la Rune d’Imbécilité, la Rune d’Insignifiance, la Rune de Faiblesse et la Rune de Couardise.</p>","formule":"Kha Nekhaim Assat","seuil":25,"prononcee":"effet normal","tracee":"si la Rune est tracée sur le corps de la victime, effet normal."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.vOdAOu2d81xY9cnm"}},"_id":"mcdSaXloOXRB6S31"}
|
||||
{"name":"Eau","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de l’Eau permet au sorcier de contrôler l’eau mais pas de la créer. La Rune peut être utilisée pour mettre en mouvement une masse liquide inerte ou pour contrôler la direction d’un torrent ou de vagues.</p>\n<p>L’efficacité de la Rune varie en fonction du nombre de points d’Âmes dépensés. Elle permet de manipuler une masse de liquide égale à :</p>\n<ul>\n<li>un verre (1 point) ;</li>\n<li>une bouteille (2 points) ;</li>\n<li>un tonneau (4 points) ;</li>\n<li>une cuve (10 points) ;</li>\n<li>une fontaine ou un puits (20 points) ;</li>\n<li>un petit étang, un ruisseau ou une vague (40 points) ;</li>\n<li>un lac, un torrent ou une lame de pleine mer (50 points) ;</li>\n<li>un grand lac, une rivière ou un petit raz de marée (200 points).</li>\n</ul>\n<p>La connaissance de la Rune de l’Eau est nécessaire pour invo\u0002quer et contrôler un Élémentaire d’Eau.</p>","formule":"Néh’Khan","seuil":10,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.ILxlXoCYq4Db8wOr"}},"_id":"nGgoDFnZPS6uYGcD"}
|
||||
{"name":"Protection","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La surface protégée par la Rune semble durcir légèrement et pourtant conserve sa souplesse initiale. Frappée, la surface protégée produit un son plus mat ou assourdi que la normale. Sur une armure, des reflets étranges apparaissent parfois, comme si elle luisait d’une lueur irréelle. Le sorcier ajoute des points de Protection temporaire à sa cible : 1 point pour 1 point d’Âme investi dans la Rune, 2 pour 2 points d’Âme, 3 pour 6 points d’Âme et 4 pour 11 points. Ces points se cumulent avec la Protection existante.</p>\n<p>La Rune peut être activée en prononçant son nom ou en l’inscrivant.</p>","formule":"Kha’ Maé ’Mellôn","seuil":15,"prononcee":"effet normal","tracee":"effet normal mais la Rune doit être tracée sur un bouclier, une armure ou un corps."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.kSaiqifyg6eq02vj"}},"_id":"nymd8UI4AWnE74fk"}
|
||||
{"name":"Écoute","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Pour activer la Rune d’Écoute, le sorcier peut prononcer son nom ou l’inscrire. </p>","formule":"Hénak","seuil":10,"prononcee":"quand il prononce le nom de la Rune, la compétence Perception du sorcier est augmentée de 1 point pour 2 points d’Âme dépensés. Cette augmentation n’est effective que dans le cas de tests de perception auditive.","tracee":"si la Rune est inscrite sur un objet, sur un mur, ou un arbre, le sorcier peut entendre comme s’il se trouvait près du lieu où elle est tracée aussi longtemps que la Rune est maintenue."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.6RJicyLNG50WfnJ7"}},"_id":"olzDZforp9LsxUEJ"}
|
||||
{"name":"Contre-Sort","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p><strong>Seuil de difficulté :</strong> égal à celui de la Rune à contrer, ou de la Rune la plus puissante dans le cas d’un Sortilège à contrer.</p>\n<p>La Rune de Contre-Sort affaiblit ou annihile le pouvoir des autres Runes. Quand elle draine le pouvoir d’une Rune, elle absorbe autant de points d’effet que le nombre de points attri\u0002bués à sa création. Si ce nombre de points dépasse celui de la Rune vampirisée, cette dernière est détruite. Le sorcier ne peut pas contrer une Rune qu’il ne maîtrise pas. Pour absorber une Rune, la Rune de Contre-Sort doit être inscrite ou prononcée à une distance maximum de l’endroit où se manifeste la Rune contrée d’un mètre par point d’Âme dépensé.</p>\n<p>NB : pour contrer un Sortilège à l’effet indésirable, il suffit parfois de contrer une seule de ses Runes, les autres se mani\u0002festent normalement.</p>","formule":"Thâ Ereb","seuil":0,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.45YcQxfXYYzSaZ15"}},"_id":"q3ypyD55RBR220l7"}
|
||||
{"name":"Terre","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>En utilisant la Rune de la Terre, le sorcier peut affecter une brouette de terre ou de pierre pour chaque point d’Âme dépensé. Considérez qu’à 10 points d’Âme, un muret est affecté, et qu’à 100 points, le sorcier peut manipuler un bout de rempart.</p>\n<p>Un point d’Âme permet de réaliser l’un des effets suivants :</p>\n<ul>\n<li>déplacer un mètre cube de terre ou de pierre à la vitesse d’un homme qui marche pour chaque point d’Âme dépensé ;</li>\n<li>ramollir ou fissurer une pierre, en infl igeant 2 points de dégâts par point d’Âme utilisé (rappel : une pierre mince possède une résistance de 15, une pierre épaisse de 20) ;</li>\n<li>renforcer ou solidifier de la terre ou de la pierre. Chaque point d’Âme dépensé augmente de 2 points le facteur de résistance de la pierre ou de la masse de terre ciblée.</li>\n</ul>\n<p>Pour l’utiliser, le sorcier peut prononcer son nom ou l’inscrire, selon les circonstances ou son humeur. La connaissance de la Rune de la Terre est nécessaire pour invoquer et contrôler un Élémentaire de Terre.</p>","formule":"Tul’Rah’","seuil":10,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.YSbkTWYOCH5chkpv"}},"_id":"q6spSOEdcr1hsoF2"}
|
||||
{"name":"Contact","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Tant que la Rune de Contact est maintenue, elle permet de créer un lien mental avec une personne à longue distance. La Rune doit être inscrite sur un objet ou un vêtement porté par la personne que le sorcier souhaite contacter. Pour chaque tranche de 3 points d’Âme dépensés, le contact inclut un nou\u0002veau canal : la vision, les paroles, le goût, les sensations tactiles ou encore les émotions. Il est possible d’inclure une personne supplémentaire dans le lien mental par la dépense d’un point supplémentaire par cible. La portée de la Rune de Contact est illimitée, que ce soit dans les Jeunes Royaumes ou dans l’ensemble des plans d’existence.</p>","formule":"Elam Ans’Ha","seuil":15,"prononcee":"sans effet","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.wmQ1EbWCuIwwY85F"}},"_id":"rVmgDzp6LcXEILvS"}
|
||||
{"name":"Incandescence","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune d’Incandescence rend le sorcier ou l’objet sur lequel elle est inscrite chaud au toucher. Un seul point d’Âme investi rend la cible agréablement chaude (comme si elle était enve\u0002loppée dans une couverture au coin du feu) et elle ne subit aucun désagrément dû à un environnement froid tant que la Rune est active. Les points supplémentaires dépensés causent des dégâts létaux dus à la chaleur à quiconque touche la cible : les dégâts sont de 1 point pour 2 points d’Âme dépensés. Les dégâts continuent à chaque tour de jeu tant que la victime est en contact avec la cible du sort. </p>","formule":"Néhan Hira","seuil":10,"prononcee":"effet normal","tracee":"si la Rune est tracée, elle ne cause pas de dom\u0002mage au support sur lequel elle est inscrite."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Swlx5c5xQ0PmOT9M"}},"_id":"tpXavlZ4WBurbY8X"}
|
||||
{"name":"Secret des morts","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de Secret des morts redonne temporairement vie à un mort, permettant au sorcier de lui poser des questions durant une courte période. Tous les sorciers savent que les morts ne peuvent pas répondre directement aux questions. Ils peuvent répondre par un poème, par une sorte de prophétie ou, plus sim\u0002plement, de manière alambiquée. Le mort est cependant tenu de dire la vérité ou, du moins, ce qu’il croit sincèrement être vrai. Le mort se remémore ses souvenirs sur une période précédant sa mort qui dépend du nombre de points d’Âme investis : 1 jour pour 1 point d’Âme, 2 jours pour 3 points d’Âme, 3 jours pour 6 points d’Âme et jusqu’à 4 jours pour 11 points d’Âme. La magie nécessaire pour rappeler l’âme de la créature d’au-delà du Multivers est telle que la Rune ne dure qu’une minute. La Rune ne ramène pas le mort définitivement et il ne peut pas mouvoir son corps. Il peut seulement répondre aux questions. En fonction de sa personnalité et de son existence dans l’au-delà, la fiabilité de ses réponses peut être très variable.</p>\n<p>Si le mort avait conclu un Pacte avec une puissance, l’utilisation de la Rune de Secret des morts attire immanquablement la colère du Seigneur concerné. Lui seul dispose légitimement du droit de vie et de mort sur ses serviteurs. Le MJ décide de la forme que prend sa vengeance contre le sorcier : il peut s’agir de la mise en échec de ses projet de manière vicieuse, systématique et particulièrement efficace ou d’une malchance subtile mais insidieuse.</p>","formule":"Nad’Melnë","seuil":30,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.uqwvF7B9Lk0EkNf6"}},"_id":"uIg9xU0wI5jRLyED"}
|
||||
{"name":"Confusion","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>Cette Rune suscite la confusion et le trouble. Il convient de noter que la Rune de Confusion ne rend pas invisible ; elle altère simplement les perceptions du spectateur, en masquant la véritable nature du sujet. L’Œil peut percer le voile d’une Rune de Confusion (Clairvoyance + Perception / Seuil de difficulté de la Rune). Ceux qui ne pratiquent pas la Sorcelle\u0002rie doivent obtenir une réussite héroïque à un test de Percep\u0002tion pour comprendre que quelque chose ne va pas, mais ils ne pourront pas, même dans ce cas, percevoir la réalité telle qu’elle est.</p>","formule":"Aës Thir’ N’Hab","seuil":15,"prononcee":"quand le sorcier prononce le nom de la Rune, il brouille la vue et les souvenirs des gens qui le ren\u0002contrent. Il devient impossible de se souvenir avec précision des actions, du visage, des mots du sorcier ou encore de ses vêtements. Chaque point utilisé pour activer la Rune permet de rendre indistinct l’un de ces éléments.","tracee":"quand la Rune est inscrite sur un objet, son apparence est modifi ée de la même manière (coût : 2 points d’Âme)."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.CFlDvIIQBP1hAtWG"}},"_id":"vI9EoswpPCJoUV1L"}
|
||||
{"name":"Femme","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>En tant que telle, la Rune de la Femme est une indication de genre. Quand elle est combinée avec une autre Rune, elle res\u0002treint les effets de cette Rune aux seuls êtres féminins. Il faut dépenser 1 point d’Âme pour l’activer.</p>","formule":"No’Hos","seuil":5,"prononcee":"effet normal","tracee":"effet normal"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.DwfdRyBDNi7A7bQe"}},"_id":"vV6BZHznNdJ0f4IR"}
|
||||
{"name":"Dissolution","type":"rune","img":"systems/fvtt-mournblade/assets/icons/rune.webp","data":{"description":"<p>La Rune de Dissolution dissout, ou désintègre, une substance particulière. Cette Rune doit être assemblée avec une autre pour affecter le matériau ciblé. Par exemple, pour désintégrer une pierre de fondation, le magicien doit assembler une Rune de Dissolution avec une Rune de Terre. L’aire d’effet de la Rune varie en fonction du nombre de points d’Âmes dépen\u0002sés. Elle peut désintégrer un objet ou une surface :</p>\n<ul>\n<li>de la taille d’un poing (1 point) ;</li>\n<li>de la taille d’un bras (2 points) ;</li>\n<li>de la taille d’un loup (4 points) ;</li>\n<li>de la taille d’un homme (10 points) ;</li>\n<li>de la taille d’un arbre ordinaire (20 points) ;</li>\n<li>de la taille d’une pièce (40 points) ;</li>\n<li>de la taille d’une maison (50 points) ;</li>\n<li>de la taille d’un navire (200 points).</li>\n</ul>\n<p>Si la Rune est utilisée contre un être vivant, celui-ci peut y résis\u0002ter en réussissant un test de Clairvoyance + Trempe / Clair\u0002voyance + Savoir : Runes du sorcier. Quand la Rune est utilisée contre un être vivant, chaque point d’Âme utilisé inflige un point de dommage létal mais la Rune doit être assemblée avec la Rune appropriée en fonction de l’adversaire (Rune de l’Homme, Rune de la Femme, Runes des Végétaux, Runes des Bêtes).</p>","formule":"Kha Aërgôn","seuil":15,"prononcee":"effet normal","tracee":"si la Rune est tracée, les conséquences de l’échec dramatique du Sort ne peuvent être que la perte des points d’Âme."},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.XBMARAPavdX7yq1c"}},"_id":"xnCf2xIPzdsUoBTy"}
|
BIN
packs/runes/000194.ldb
Normal file
BIN
packs/runes/000194.ldb
Normal file
Binary file not shown.
0
packs/runes/000201.log
Normal file
0
packs/runes/000201.log
Normal file
1
packs/runes/CURRENT
Normal file
1
packs/runes/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/runes/LOCK
Normal file
0
packs/runes/LOCK
Normal file
8
packs/runes/LOG
Normal file
8
packs/runes/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.849912 7f830ea006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.895690 7f830ea006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.895779 7f830ea006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.207927 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.207966 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.215840 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.216214 7f830e0006c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.216305 7f830e0006c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
8
packs/runes/LOG.old
Normal file
8
packs/runes/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.771521 7f0833e006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.782849 7f0833e006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.782970 7f0833e006c0 Delete type=0 #192
|
||||
2024/04/25-23:32:00.061611 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:32:00.061677 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:32:00.097976 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:32:00.098231 7f08310006c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:32:00.098275 7f08310006c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
BIN
packs/runes/MANIFEST-000199
Normal file
BIN
packs/runes/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/scenes/000110.ldb
Normal file
BIN
packs/scenes/000110.ldb
Normal file
Binary file not shown.
0
packs/scenes/000117.log
Normal file
0
packs/scenes/000117.log
Normal file
1
packs/scenes/CURRENT
Normal file
1
packs/scenes/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000115
|
0
packs/scenes/LOCK
Normal file
0
packs/scenes/LOCK
Normal file
8
packs/scenes/LOG
Normal file
8
packs/scenes/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.976720 7f830ea006c0 Recovering log #113
|
||||
2024/05/01-09:35:37.030673 7f830ea006c0 Delete type=3 #111
|
||||
2024/05/01-09:35:37.030805 7f830ea006c0 Delete type=0 #113
|
||||
2024/05/01-09:42:43.223193 7f830e0006c0 Level-0 table #118: started
|
||||
2024/05/01-09:42:43.223235 7f830e0006c0 Level-0 table #118: 0 bytes OK
|
||||
2024/05/01-09:42:43.229929 7f830e0006c0 Delete type=0 #116
|
||||
2024/05/01-09:42:43.230159 7f830e0006c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.230186 7f830e0006c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
8
packs/scenes/LOG.old
Normal file
8
packs/scenes/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.802683 7f0833e006c0 Recovering log #108
|
||||
2024/04/25-23:18:20.813089 7f0833e006c0 Delete type=3 #106
|
||||
2024/04/25-23:18:20.813231 7f0833e006c0 Delete type=0 #108
|
||||
2024/04/25-23:32:00.135709 7f08310006c0 Level-0 table #114: started
|
||||
2024/04/25-23:32:00.135776 7f08310006c0 Level-0 table #114: 0 bytes OK
|
||||
2024/04/25-23:32:00.192118 7f08310006c0 Delete type=0 #112
|
||||
2024/04/25-23:32:00.192474 7f08310006c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:32:00.192524 7f08310006c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
BIN
packs/scenes/MANIFEST-000115
Normal file
BIN
packs/scenes/MANIFEST-000115
Normal file
Binary file not shown.
BIN
packs/skills-creatures/000102.ldb
Normal file
BIN
packs/skills-creatures/000102.ldb
Normal file
Binary file not shown.
0
packs/skills-creatures/000109.log
Normal file
0
packs/skills-creatures/000109.log
Normal file
1
packs/skills-creatures/CURRENT
Normal file
1
packs/skills-creatures/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000107
|
0
packs/skills-creatures/LOCK
Normal file
0
packs/skills-creatures/LOCK
Normal file
8
packs/skills-creatures/LOG
Normal file
8
packs/skills-creatures/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.208918 7f830ea006c0 Recovering log #105
|
||||
2024/05/01-09:35:36.259681 7f830ea006c0 Delete type=3 #103
|
||||
2024/05/01-09:35:36.259786 7f830ea006c0 Delete type=0 #105
|
||||
2024/05/01-09:42:43.141574 7f830e0006c0 Level-0 table #110: started
|
||||
2024/05/01-09:42:43.141614 7f830e0006c0 Level-0 table #110: 0 bytes OK
|
||||
2024/05/01-09:42:43.148597 7f830e0006c0 Delete type=0 #108
|
||||
2024/05/01-09:42:43.156038 7f830e0006c0 Manual compaction at level-0 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.156102 7f830e0006c0 Manual compaction at level-1 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
8
packs/skills-creatures/LOG.old
Normal file
8
packs/skills-creatures/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.580223 7f0833e006c0 Recovering log #100
|
||||
2024/04/25-23:18:20.591502 7f0833e006c0 Delete type=3 #98
|
||||
2024/04/25-23:18:20.591624 7f0833e006c0 Delete type=0 #100
|
||||
2024/04/25-23:31:59.691806 7f08310006c0 Level-0 table #106: started
|
||||
2024/04/25-23:31:59.691866 7f08310006c0 Level-0 table #106: 0 bytes OK
|
||||
2024/04/25-23:31:59.733591 7f08310006c0 Delete type=0 #104
|
||||
2024/04/25-23:31:59.807634 7f08310006c0 Manual compaction at level-0 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.807869 7f08310006c0 Manual compaction at level-1 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
BIN
packs/skills-creatures/MANIFEST-000107
Normal file
BIN
packs/skills-creatures/MANIFEST-000107
Normal file
Binary file not shown.
BIN
packs/skills/000194.ldb
Normal file
BIN
packs/skills/000194.ldb
Normal file
Binary file not shown.
0
packs/skills/000201.log
Normal file
0
packs/skills/000201.log
Normal file
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/skills/LOCK
Normal file
0
packs/skills/LOCK
Normal file
8
packs/skills/LOG
Normal file
8
packs/skills/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.157653 7f830f4006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.201543 7f830f4006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.201652 7f830f4006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.126781 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.126821 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.133212 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.156000 7f830e0006c0 Manual compaction at level-0 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.156076 7f830e0006c0 Manual compaction at level-1 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
8
packs/skills/LOG.old
Normal file
8
packs/skills/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.564492 7f0832a006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.576603 7f0832a006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.576708 7f0832a006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.612869 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.612922 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.654250 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.691593 7f08310006c0 Manual compaction at level-0 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.691665 7f08310006c0 Manual compaction at level-1 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user