Compare commits

...

7 Commits

145 changed files with 1697 additions and 618 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

View File

@ -2,7 +2,7 @@
"TYPES": {
"Actor": {
"personnage": "Personnage",
"PNJ": "PNJ"
"creature": "Créature"
},
"Item": {
"arme": "Arme",
@ -21,7 +21,8 @@
"metier": "Métier",
"runeeffect": "Effet de Rune",
"bouclier": "Bouclier",
"modifier": "Modificateur"
"modifier": "Modificateur",
"traitespece": "Trait d'Espèce"
}
}
}

View File

@ -12,7 +12,7 @@ export class MournbladeActorSheet extends ActorSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-mournblade", "sheet", "actor"],
template: "systems/fvtt-mournblade/templates/actor-sheet.html",
width: 640,
@ -25,7 +25,7 @@ export class MournbladeActorSheet extends ActorSheet {
/* -------------------------------------------- */
async getData() {
const objectData = duplicate(this.object)
const objectData = foundry.utils.duplicate(this.object)
let actorData = objectData
let formData = {
@ -40,26 +40,29 @@ export class MournbladeActorSheet extends ActorSheet {
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
limited: this.object.limited,
skills: this.actor.getSkills(),
armes: duplicate(this.actor.getWeapons()),
protections: duplicate(this.actor.getArmors()),
dons: duplicate(this.actor.getDons()),
armes: foundry.utils.duplicate(this.actor.getWeapons()),
protections: foundry.utils.duplicate(this.actor.getArmors()),
dons: foundry.utils.duplicate(this.actor.getDons()),
pactes: foundry.utils.duplicate(this.actor.getPactes()),
alignement: this.actor.getAlignement(),
aspect: this.actor.getAspect(),
marge: this.actor.getMarge(),
tendances:duplicate(this.actor.getTendances()),
runes:duplicate(this.actor.getRunes()),
traitsChaotiques:duplicate(this.actor.getTraitsChaotiques()),
origine: duplicate(this.actor.getOrigine() || {}),
heritage: duplicate(this.actor.getHeritage() || {}),
metier: duplicate(this.actor.getMetier() || {}),
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()),
modifiers: duplicate(this.actor.getModifiers()),
monnaies: duplicate(this.actor.getMonnaies()),
runeEffects: duplicate(this.actor.getRuneEffects()),
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,
@ -133,6 +136,21 @@ export class MournbladeActorSheet extends ActorSheet {
let armeId = li.data("item-id")
this.actor.rollArmeOffensif(armeId)
})
html.find('.roll-assomer').click((event) => {
this.actor.rollAssomer()
})
html.find('.roll-fuir').click((event) => {
this.actor.rollFuir()
})
html.find('.roll-immobiliser').click((event) => {
this.actor.rollImmobiliser()
})
html.find('.roll-arme-special').click((event) => {
const li = $(event.currentTarget).parents(".item")
let armeId = li.data("item-id")
this.actor.rollArmeSpecial(armeId)
})
html.find('.roll-arme-degats').click((event) => {
const li = $(event.currentTarget).parents(".item")
let armeId = li.data("item-id")
@ -147,6 +165,15 @@ export class MournbladeActorSheet extends ActorSheet {
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) => {

View File

@ -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,9 +41,14 @@ 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);
}
@ -55,23 +60,23 @@ export class MournbladeActor extends Actor {
/* -------------------------------------------- */
prepareArme(arme) {
arme = duplicate(arme)
arme = foundry.utils.duplicate(arme)
let combat = this.getCombatValues()
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
arme.system.isMelee = true
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
arme.system.attrKey = "pui"
arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + combat.attaqueModifier
if (arme.system.isdefense) {
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
}
}
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
arme.system.isDistance = true
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
arme.system.attrKey = "adr"
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + combat.attaqueModifier
arme.system.totalDegats = arme.system.degats
if (arme.system.isdefense) {
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
@ -81,9 +86,9 @@ export class MournbladeActor extends Actor {
}
/* -------------------------------------------- */
prepareBouclier(bouclier) {
bouclier = duplicate(bouclier)
bouclier = foundry.utils.duplicate(bouclier)
let combat = this.getCombatValues()
bouclier.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
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
@ -114,8 +119,8 @@ export class MournbladeActor extends Actor {
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 )
modObj.system.apply = true
modifiers.push(modObj)
}
}
MournbladeUtility.sortArrayObjectsByName(modifiers)
@ -123,14 +128,17 @@ export class MournbladeActor extends Actor {
}
/* -------------------------------------------- */
getItemSorted( types) {
let items = this.items.filter(item => types.includes(item.type )) || []
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.getItemSorted(["tendance"])
}
@ -146,6 +154,9 @@ export class MournbladeActor extends Actor {
getTraitsChaotiques() {
return this.getItemSorted(["traitchaotique"])
}
getTraitsEspeces() {
return this.getItemSorted(["traitespece"])
}
getMonnaies() {
return this.getItemSorted(["monnaie"])
}
@ -168,7 +179,7 @@ export class MournbladeActor extends Actor {
getSkills() {
let comp = []
for (let item of this.items) {
item = duplicate(item)
item = foundry.utils.duplicate(item)
if (item.type == "competence") {
item.system.attribut1total = item.system.niveau + (this.system.attributs[item.system.attribut1]?.value || 0)
item.system.attribut2total = item.system.niveau + (this.system.attributs[item.system.attribut2]?.value || 0)
@ -201,10 +212,10 @@ export class MournbladeActor extends Actor {
/* -------------------------------------------- */
getAspect() {
return (this.system.balance.loi > this.system.balance.chaos) ? this.system.balance.loi : this.system.balance.chaos
return (this.system.balance.loi > this.system.balance.chaos) ? this.system.balance.loi : this.system.balance.chaos
}
getMarge() {
return Math.abs( this.system.balance.loi - this.system.balance.chaos)
return Math.abs(this.system.balance.loi - this.system.balance.chaos)
}
getAlignement() {
return (this.system.balance.loi > this.system.balance.chaos) ? "loyal" : "chaotique"
@ -222,7 +233,14 @@ export class MournbladeActor extends Actor {
/* -------------------------------------------- */
getCombatValues() {
let defenserModifier = 0
this.items.filter(item => item.type == "modifier" && item.system.modifiertype == "defense").map(e => defenserModifier += e.system.value)
let attaqueModifier = 0
this.items.filter(item => item.type == "modifier" && item.system.modifiertype == "attaque").map(e => attaqueModifier += e.system.value)
let combat = {
defenserModifier,
attaqueModifier,
initBase: this.system.attributs.adr.value,
initTotal: this.system.attributs.adr.value + this.system.combat.initbonus,
bonusDegats: this.getBonusDegats(),
@ -230,7 +248,7 @@ export class MournbladeActor extends Actor {
vitesseBase: this.getVitesseBase(),
vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus,
defenseBase: this.getDefenseBase(),
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + defenserModifier
}
return combat
}
@ -271,7 +289,7 @@ export class MournbladeActor extends Actor {
getItemById(id) {
let item = this.items.find(item => item.id == id);
if (item) {
item = duplicate(item)
item = foundry.utils.duplicate(item)
}
return item;
}
@ -287,22 +305,40 @@ export class MournbladeActor extends Actor {
/* -------------------------------------------- */
getStatusMalus() {
if (this.system.biodata.ignoresantemalus) {
return 0
}
let malusL = 0
let malusNL = 0
if (this.system.sante.base-this.system.sante.letaux < 10) {
if (this.system.sante.base - this.system.sante.letaux < 10) {
malusL = -2
}
if (this.system.sante.base-this.system.sante.letaux < 5) {
if (this.system.sante.base - this.system.sante.letaux < 5) {
malusL = -5
}
if (this.system.sante.base-this.system.sante.nonletaux < 10) {
if (this.system.sante.base - this.system.sante.nonletaux < 10) {
malusNL = -2
}
if (this.system.sante.base-this.system.sante.nonletaux < 5) {
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) {
@ -320,27 +356,43 @@ export class MournbladeActor extends Actor {
}
/* -------------------------------------------- */
incDecSante(type, value, applyArmure=true) {
if (applyArmure) {
incDecSante(type, value, applyArmure = true) {
value = Number(value)
if (value && applyArmure) {
let protection = this.getProtectionTotal()
value -= protection
value = Math.max(0, value)
value = Math.max(0, Number(value))
}
if (value) {
let newSante = duplicate(this.system.sante)
newSante[type] += 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 })
ui.notifications.info(this.name + "a subi " + value + " points de santé " + type + ".")
}
}
/* -------------------------------------------- */
incDecAme(value) {
value = Number(value)
if (value) {
let newAme = foundry.utils.duplicate(this.system.ame)
newAme.value += Number(value)
newAme.value = Math.max(0, newAme.value)
newAme.value = Math.min(newAme.value, newAme.currentmax)
this.update({ 'system.ame': newAme })
}
}
/* -------------------------------------------- */
getBonneAventure() {
return this.system.bonneaventure.actuelle
@ -371,13 +423,13 @@ export class MournbladeActor extends Actor {
}
/* -------------------------------------------- */
subPointsAme(runeMode, value) {
let ame = duplicate(this.system.ame)
if(runeMode == "prononcer") {
ame.value -= value
let ame = foundry.utils.duplicate(this.system.ame)
if (runeMode == "prononcer") {
ame.value += value
} else {
ame.currentmax -= value
}
this.update( {'system.ame': ame})
this.update({ 'system.ame': ame })
}
/* -------------------------------------------- */
@ -398,6 +450,9 @@ export class MournbladeActor extends Actor {
/* -------------------------------------------- */
getBonusDegats() {
if (this.type == "creature") {
return 0
}
return __degatsBonus[this.system.attributs.pui.value]
}
@ -414,13 +469,13 @@ export class MournbladeActor extends Actor {
getSubActors() {
let subActors = [];
for (let id of this.system.subactors) {
subActors.push(duplicate(game.actors.get(id)));
subActors.push(foundry.utils.duplicate(game.actors.get(id)));
}
return subActors;
}
/* -------------------------------------------- */
async addSubActor(subActorId) {
let subActors = duplicate(this.system.subactors);
let subActors = foundry.utils.duplicate(this.system.subactors);
subActors.push(subActorId);
await this.update({ 'system.subactors': subActors });
}
@ -451,34 +506,55 @@ export class MournbladeActor extends Actor {
/* -------------------------------------------- */
async setPredilectionUsed(compId, predIdx) {
let comp = this.items.get(compId)
let pred = duplicate(comp.system.predilections)
let pred = foundry.utils.duplicate(comp.system.predilections)
pred[predIdx].used = true
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
}
/* -------------------------------------------- */
getInitiativeScore( ) {
getInitiativeScore() {
return Number(this.system.attributs.adr.value) + Number(this.system.combat.initbonus)
}
/* -------------------------------------------- */
getBestDefenseValue() {
let defenseList = this.items.filter(item => (item.type =="arme" || item.type == "bouclier") && item.system.equipped)
let defenseList = this.items.filter(item => (item.type == "arme" || item.type == "bouclier") && item.system.equipped)
let maxDef = 0
let bestArme
for(let arme of defenseList) {
for (let arme of defenseList) {
if (arme.type == "arme" && arme.system.isdefense) {
arme = this.prepareArme(arme)
}
if (arme.type == "bouclier" ) {
if (arme.type == "bouclier") {
arme = this.prepareBouclier(arme)
}
if ( arme.system.totalDefensif > maxDef) {
if (arme.system.totalDefensif > maxDef) {
maxDef = arme.system.totalDefensif
bestArme = duplicate(arme)
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) {
@ -493,21 +569,27 @@ export class MournbladeActor extends Actor {
rollData.attributs = MournbladeUtility.getAttributs()
rollData.selectDifficulte = true
rollData.malusSante = this.getStatusMalus() + this.system.sante.malusmanuel
rollData.malusAme = this.getAmeMalus()
rollData.modifiers = this.getModifiersForRoll()
rollData.desavantages = {}
rollData.isMonte = this.system.combat.monte
if (rollData.isMonte) {
rollData.config.attaques["chargecavalerie"] = "Charge de cavalerie"
}
if (attrKey) {
rollData.attrKey = attrKey
if (attrKey != "tochoose") {
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp"
rollData.attr = duplicate(this.system.attributs[attrKey])
rollData.attr = foundry.utils.duplicate(this.system.attributs[attrKey])
}
}
if (compId) {
rollData.competence = duplicate(this.items.get(compId) || {})
rollData.competence = foundry.utils.duplicate(this.items.get(compId) || {})
rollData.actionImg = rollData.competence?.img
}
if (compName) {
rollData.competence = duplicate(this.items.find( item => item.name.toLowerCase() == compName.toLowerCase()) || {})
rollData.competence = foundry.utils.duplicate(this.items.find(item => item.name.toLowerCase() == compName.toLowerCase()) || {})
rollData.actionImg = rollData.competence?.img
}
return rollData
@ -529,22 +611,22 @@ export class MournbladeActor extends Actor {
}
/* -------------------------------------------- */
async rollRune(runeId) {
async rollRune(runeId) {
let comp = this.items.find(comp => comp.type == "competence" && comp.name.toLowerCase() == "savoir : runes")
if ( !comp) {
if (!comp) {
ui.notifications.warn("La compétence Savoirs : Runes n'a pas été trouvée, abandon.")
return
}
let rollData = this.getCommonRollData("cla", undefined, "Savoir : Runes")
rollData.rune = duplicate(this.items.get(runeId) || {})
rollData.rune = foundry.utils.duplicate(this.items.get(runeId) || {})
rollData.difficulte = rollData.rune?.system?.seuil || 0
rollData.runemode = "prononcer"
rollData.runeame = 1
rollData.runeame = 1
console.log("runeData", rollData)
let rollDialog = await MournbladeRollDialog.create(this, rollData)
rollDialog.render(true)
}
/* -------------------------------------------- */
async rollArmeOffensif(armeId) {
let arme = this.items.get(armeId)
@ -558,18 +640,75 @@ export class MournbladeActor extends Actor {
rollData.arme = arme
rollData.typeAttaque = "assaut"
rollData.typeCouvert = "aucun"
rollData.hasDesavantageBonus = true
rollData.visee = false
rollData.ciblecourt = false
rollData.cibleconsciente = false
// Do not display difficulte if defense weapon or distance
if (rollData.armeDefense || rollData.arme.system.isDistance) {
rollData.selectDifficulte = false
rollData.difficulte = (rollData.arme.system.isDistance) ? 0 : rollData.difficulte
}
console.log("ARME!", rollData)
this.depenseRessources(arme)
let rollDialog = await MournbladeRollDialog.create(this, rollData)
rollDialog.render(true)
}
/* -------------------------------------------- */
async rollAssomer() {
let rollData = this.getCommonRollData("adr", undefined, "Filouterie")
rollData.typeAttaque = "assomer"
rollData.typeCouvert = "aucun"
rollData.hasDesavantageBonus = true
if (rollData.defender) {
rollData.selectDifficulte = false
rollData.difficulte = rollData.defender.system.attributs.tre.value * 2
}
console.log("Assomer!", rollData)
let rollDialog = await MournbladeRollDialog.create(this, rollData)
rollDialog.render(true)
}
/* -------------------------------------------- */
async rollFuir() {
let rollData = this.getCommonRollData("adr", undefined, "Mouvements")
rollData.typeAttaque = "fuir"
rollData.typeCouvert = "aucun"
rollData.hasDesavantageBonus = true
if (rollData.defender) {
rollData.selectDifficulte = false
let comp = rollData.defender.items.find(it => it.type == "competence" && it.name.toLowerCase() == "mouvements")
rollData.difficulte = rollData.defender.system.attributs.adr.value + ((comp) ? comp.system.niveau : rollData.defender.system.attributs.adr.value)
}
console.log("Fuir!", rollData)
let rollDialog = await MournbladeRollDialog.create(this, rollData)
rollDialog.render(true)
}
/* -------------------------------------------- */
async rollImmobiliser() {
let rollData = this.getCommonRollData("pui", undefined, "Mêlée")
rollData.typeAttaque = "immobiliser"
rollData.typeCouvert = "aucun"
rollData.hasDesavantageBonus = true
if (rollData.defender) {
rollData.selectDifficulte = false
rollData.difficulte = rollData.defenderCombatValues.defenseTotal
}
console.log("Immobiliser!", rollData)
let rollDialog = await MournbladeRollDialog.create(this, rollData)
rollDialog.render(true)
}
/* -------------------------------------------- */
async rollArmeSpecial(armeId) {
let arme = this.items.get(armeId)
if (arme) {
MournbladeUtility.createChatWithRollMode("GM", {
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-display-description.html`, arme)
}, arme)
this.depenseRessources(arme)
}
}
/* -------------------------------------------- */
async rollArmeDegats(armeId) {
let arme = this.items.get(armeId)

View File

@ -1,23 +1,71 @@
export const MOURNBLADE_CONFIG = {
attaques:{
attaques: {
assaut: "Assaut",
precise: "Attaque Précise",
feinte: "Feinte",
coupbas: "Coup Bas",
charger: "Charger",
contenir: "Contenir l'adversaire",
desarmer: "Désarmer",
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 },
},
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},
}
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"
},
};

View 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
})
}
}

View File

@ -9,7 +9,7 @@ export class MournbladeItemSheet extends ItemSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["fvtt-mournblade", "sheet", "item"],
template: "systems/fvtt-mournblade/templates/item-sheet.html",
dragDrop: [{ dragSelector: null, dropSelector: null }],
@ -48,7 +48,7 @@ export class MournbladeItemSheet extends ItemSheet {
/* -------------------------------------------- */
async getData() {
const objectData = duplicate(this.object)
const objectData = foundry.utils.duplicate(this.object)
let itemData = objectData
let formData = {
title: this.title,
@ -91,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 };
}
@ -134,26 +134,26 @@ export class MournbladeItemSheet extends ItemSheet {
html.find('.edit-prediction').change(ev => {
const li = $(ev.currentTarget).parents(".prediction-item")
let index = li.data("prediction-index")
let pred = duplicate(this.object.system.predilections)
let pred = foundry.utils.duplicate(this.object.system.predilections)
pred[index].name = ev.currentTarget.value
this.object.update( { 'system.predilections': pred })
})
html.find('.delete-prediction').click(ev => {
const li = $(ev.currentTarget).parents(".prediction-item")
let index = li.data("prediction-index")
let pred = duplicate(this.object.system.predilections)
let pred = foundry.utils.duplicate(this.object.system.predilections)
pred.splice(index,1)
this.object.update( { 'system.predilections': pred })
})
html.find('.use-prediction').change(ev => {
const li = $(ev.currentTarget).parents(".prediction-item")
let index = li.data("prediction-index")
let pred = duplicate(this.object.system.predilections)
let pred = foundry.utils.duplicate(this.object.system.predilections)
pred[index].used = ev.currentTarget.checked
this.object.update( { 'system.predilections': pred })
})
html.find('#add-predilection').click(ev => {
let pred = duplicate(this.object.system.predilections)
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 })
})

View File

@ -14,6 +14,7 @@ export const defaultItemImg = {
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"
}
/**

View File

@ -11,7 +11,7 @@
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";
@ -54,7 +54,7 @@ Hooks.once("init", async function () {
// 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 })
@ -77,28 +77,13 @@ function welcomeMessage() {
}
/* -------------------------------------------- */
// Register world usage statistics
function registerUsageCount( registerKey ) {
if ( game.user.isGM ) {
game.settings.register(registerKey, "world-key", {
name: "Unique world key",
scope: "world",
config: false,
default: "",
type: String
});
let worldKey = game.settings.get(registerKey, "world-key")
if ( worldKey == undefined || worldKey == "" ) {
worldKey = randomID(32)
game.settings.set(registerKey, "world-key", worldKey )
}
// Simple API counter
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
//$.ajaxSetup({
//headers: { 'Access-Control-Allow-Origin': '*' }
//})
$.ajax(regURL)
async function importDefaultScene() {
let exists = game.scenes.find(j => j.name == "Accueil");
if (!exists) {
const scenes = await MournbladeUtility.loadCompendium("fvtt-mournblade.scenes")
let newDocuments = scenes.filter(i => i.name == "Accueil");
await game.scenes.documentClass.create(newDocuments);
game.scenes.find(i => i.name == "Accueil").activate();
}
}
@ -116,8 +101,22 @@ Hooks.once("ready", function () {
user: game.user._id
});
}
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.")
)
registerUsageCount('fvtt-mournblade')
importDefaultScene();
welcomeMessage();
});

View File

@ -80,6 +80,26 @@ export class MournbladeRollDialog extends Dialog {
html.find('#runeame').change(async (event) => {
this.rollData.runeame = Number(event.currentTarget.value)
})
html.find('#isMonte').change(async (event) => {
this.rollData.desavantages.isMonte = event.currentTarget.checked
})
html.find('#cibleausol').change(async (event) => {
this.rollData.desavantages.cibleausol = event.currentTarget.checked
})
html.find('#cibledesarmee').change(async (event) => {
this.rollData.desavantages.cibledesarmee = event.currentTarget.checked
})
html.find('#ciblerestreint').change(async (event) => {
this.rollData.desavantages.ciblerestreint = event.currentTarget.checked
})
html.find('#cibleimmobilisée').change(async (event) => {
this.rollData.desavantages.cibleimmobilisée = event.currentTarget.checked
})
html.find('#ciblesurplomb').change(async (event) => {
this.rollData.desavantages.ciblesurplomb = event.currentTarget.checked
})
html.find('#doubleD20').change(async (event) => {
this.rollData.doubleD20 = event.currentTarget.checked
})

View File

@ -59,15 +59,6 @@ export class MournbladeUtility {
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) => {
@ -75,18 +66,9 @@ export class MournbladeUtility {
})
}
/* -------------------------------------------- */
static getPointAmeOptions() {
let opt = []
for (let i = 1; i <= 20; i++) {
opt.push(`<option value="${i}">${i}</option>`)
}
return opt.concat("\n")
}
/* -------------------------------------------- */
static getAttributs() {
return { adr: "Adresse", pui: "Puissance", cla: "Clairvoyance", pre: "Présence", tre: "Trempe" }
return game.system.mournblade.config.attributs
}
/* -------------------------------------------- */
static pushInitiativeOptions(html, options) {
@ -101,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)
}
/* -------------------------------------------- */
@ -122,8 +109,8 @@ export class MournbladeUtility {
/* -------------------------------------------- */
static getPredilection(comp, predIdx) {
let pred = duplicate(comp.system.predilections)
return duplicate(pred[predIdx] || { name: "Error!" })
let pred = foundry.utils.duplicate(comp.system.predilections)
return foundry.utils.duplicate(pred[predIdx] || { name: "Error!" })
}
/* -------------------------------------------- */
@ -150,7 +137,7 @@ export class MournbladeUtility {
let rollData = message.getFlag("world", "mournblade-roll")
let actor = MournbladeUtility.getActorFromRollData(rollData)
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
rollData.competence = duplicate(actor.getCompetence(rollData.competence._id))
rollData.competence = foundry.utils.duplicate(actor.getCompetence(rollData.competence._id))
rollData.predilectionUsed = MournbladeUtility.getPredilection(rollData.competence, predIdx)
await MournbladeUtility.rollMournblade(rollData)
})
@ -180,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);
}
@ -223,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;
}
@ -323,6 +307,7 @@ export class MournbladeUtility {
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)
}
}
@ -335,7 +320,7 @@ export class MournbladeUtility {
}
if (!rollData.attr) {
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
rollData.attr = duplicate(actor.system.attributs[rollData.attrKey])
rollData.attr = foundry.utils.duplicate(actor.system.attributs[rollData.attrKey])
}
rollData.diceFormula = rollData.mainDice
@ -347,13 +332,13 @@ export class MournbladeUtility {
}
//console.log("BEFORE COMP", rollData)
if (rollData.competence) {
rollData.predilections = duplicate(rollData.competence.system.predilections)
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}`
}
rollData.diceFormula += `+${rollData.malusSante}`
rollData.diceFormula += `+${rollData.malusSante}+${rollData.malusAme}`
if (rollData.arme?.type == "arme") {
rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}`
@ -365,6 +350,20 @@ export class MournbladeUtility {
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) {
@ -382,7 +381,7 @@ export class MournbladeUtility {
}
}
if (rollData.typeCouvert != "aucun") {
rollData.diceFormula += `-${rollData.config.couverts[rollData.typeCouvert].value}`
rollData.diceFormula += `+${rollData.config.couverts[rollData.typeCouvert].value}`
}
}
@ -395,16 +394,17 @@ export class MournbladeUtility {
rollData.runeduree = 1
}
}
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
let myRoll = await new Roll(rollData.diceFormula).evaluate();
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
rollData.roll = duplicate(myRoll)
rollData.roll = foundry.utils.duplicate(myRoll)
rollData.diceResult = myRoll.terms[0].results[0].result
console.log(">>>> ", myRoll)
rollData.finalResult = myRoll.total
this.computeResult(rollData)
// Application immédiate selon type de jet
if (rollData.rune) {
let subAme = rollData.runeame
if (rollData.isEchec && !rollData.isDramatique) {
@ -412,7 +412,19 @@ export class MournbladeUtility {
}
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)
@ -425,16 +437,21 @@ export class MournbladeUtility {
let degatsMessage = "Degats normaux"
if (rollData.arme?.system?.isMelee) {
if (rollData.typeAttaque == "assaut") {
rollData.degatsFormula = rollData.arme.system.totalDegats
if (rollData.isHeroique) { // Deux fois les dés de dégats
rollData.degatsFormula += " + " + rollData.arme.system.totalDegats
degatsMessage = "Dégats doublés"
}
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"
@ -456,17 +473,17 @@ export class MournbladeUtility {
if (rollData.typeAttaque == "coupbas") {
degatsMessage = "Pas de dégats, mais malus pour prochaine action complexe du défenseur"
rollData.degatsFormula = false
rollData.nextMalus = -5
rollData.nextMalus = 5
if (rollData.isHeroique) { // Malus pour prochaine action
rollData.nextMalus = -15
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"
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") {
@ -479,24 +496,26 @@ export class MournbladeUtility {
}
} else { // Armes à distance
rollData.degatsFormula = rollData.arme.system.totalDegats
if (rollData.isHeroique) { // Deux fois les dés de dégats
rollData.degatsFormula += " + " + rollData.arme.system.totalDegats
}
}
for(let mod of rollData.modifiers) {
if (mod.system.modifiertype == "degats") {
rollData.degatsFormula += `+${mod.system.value}`
}
}
// Perform the roll, show the dice
rollData.finalResult = 0
rollData.degatsMessage = degatsMessage
if (rollData.degatsFormula) {
let degatsRoll = new Roll(rollData.degatsFormula).roll({ async: false, maximize: maximize })
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 = duplicate(degatsRoll)
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
rollData.finalResult = degatsRoll.total
}
@ -527,10 +546,16 @@ export class MournbladeUtility {
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)" )
ui.notifications.info("L'arme de " + defender.name + " est arrachée de ses mains (à gérer manuellement)")
}
let degats = rollData.finalResult
defender.incDecSante((rollData.arme.system.nonletaux) ? "nonletaux" : "letaux", +degats, rollData.ignoreDefenseArmor)
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 + ".")
}
}
@ -538,9 +563,9 @@ export class MournbladeUtility {
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 = duplicate(bonusRoll)
rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)
rollData.finalResult += rollData.bonusRoll.total
@ -574,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);
@ -637,13 +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(),
pointAmeOptions: this.getPointAmeOptions(),
difficulte: 0,
modificateur: 0,
config: game.system.mournblade.config,
config: foundry.utils.duplicate(game.system.mournblade.config),
}
MournbladeUtility.updateWithTarget(rollData)
return rollData
@ -655,7 +678,9 @@ export class MournbladeUtility {
if (target) {
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

Binary file not shown.

BIN
packs/armes/000195.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000200

View File

@ -1,8 +1,8 @@
2023/12/24-12:34:00.246595 7f83a17fa6c0 Recovering log #68
2023/12/24-12:34:00.257620 7f83a17fa6c0 Delete type=3 #66
2023/12/24-12:34:00.257707 7f83a17fa6c0 Delete type=0 #68
2023/12/24-12:37:21.706460 7f83937fe6c0 Level-0 table #73: started
2023/12/24-12:37:21.706493 7f83937fe6c0 Level-0 table #73: 0 bytes OK
2023/12/24-12:37:21.712455 7f83937fe6c0 Delete type=0 #71
2023/12/24-12:37:21.726437 7f83937fe6c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
2023/12/24-12:37:21.726469 7f83937fe6c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
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)

View File

@ -1,8 +1,8 @@
2023/12/24-10:16:21.267441 7f83a17fa6c0 Recovering log #64
2023/12/24-10:16:21.277442 7f83a17fa6c0 Delete type=3 #62
2023/12/24-10:16:21.277525 7f83a17fa6c0 Delete type=0 #64
2023/12/24-12:20:18.746298 7f83937fe6c0 Level-0 table #69: started
2023/12/24-12:20:18.746346 7f83937fe6c0 Level-0 table #69: 0 bytes OK
2023/12/24-12:20:18.754266 7f83937fe6c0 Delete type=0 #67
2023/12/24-12:20:18.761595 7f83937fe6c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
2023/12/24-12:20:18.768615 7f83937fe6c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
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)

Binary file not shown.

BIN
packs/armes/MANIFEST-000200 Normal file

Binary file not shown.

Binary file not shown.

BIN
packs/dons/000194.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000199

View File

@ -1,8 +1,8 @@
2023/12/24-12:34:00.290195 7f83a0ff96c0 Recovering log #68
2023/12/24-12:34:00.300801 7f83a0ff96c0 Delete type=3 #66
2023/12/24-12:34:00.300889 7f83a0ff96c0 Delete type=0 #68
2023/12/24-12:37:21.720129 7f83937fe6c0 Level-0 table #73: started
2023/12/24-12:37:21.720181 7f83937fe6c0 Level-0 table #73: 0 bytes OK
2023/12/24-12:37:21.726326 7f83937fe6c0 Delete type=0 #71
2023/12/24-12:37:21.726457 7f83937fe6c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
2023/12/24-12:37:21.726475 7f83937fe6c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
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)

View File

@ -1,8 +1,8 @@
2023/12/24-10:16:21.308457 7f83a0ff96c0 Recovering log #64
2023/12/24-10:16:21.320693 7f83a0ff96c0 Delete type=3 #62
2023/12/24-10:16:21.320808 7f83a0ff96c0 Delete type=0 #64
2023/12/24-12:20:18.768640 7f83937fe6c0 Level-0 table #69: started
2023/12/24-12:20:18.768688 7f83937fe6c0 Level-0 table #69: 0 bytes OK
2023/12/24-12:20:18.776307 7f83937fe6c0 Delete type=0 #67
2023/12/24-12:20:18.783712 7f83937fe6c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
2023/12/24-12:20:18.791457 7f83937fe6c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
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)

Binary file not shown.

BIN
packs/dons/MANIFEST-000199 Normal file

Binary file not shown.

Binary file not shown.

BIN
packs/equipement/000194.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000199

View File

@ -1,8 +1,8 @@
2023/12/24-12:34:00.275379 7f8393fff6c0 Recovering log #68
2023/12/24-12:34:00.286070 7f8393fff6c0 Delete type=3 #66
2023/12/24-12:34:00.286179 7f8393fff6c0 Delete type=0 #68
2023/12/24-12:37:21.712724 7f83937fe6c0 Level-0 table #73: started
2023/12/24-12:37:21.712753 7f83937fe6c0 Level-0 table #73: 0 bytes OK
2023/12/24-12:37:21.719948 7f83937fe6c0 Delete type=0 #71
2023/12/24-12:37:21.726447 7f83937fe6c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
2023/12/24-12:37:21.726492 7f83937fe6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
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)

View File

@ -1,8 +1,8 @@
2023/12/24-10:16:21.294166 7f83a1ffb6c0 Recovering log #64
2023/12/24-10:16:21.304260 7f83a1ffb6c0 Delete type=3 #62
2023/12/24-10:16:21.304374 7f83a1ffb6c0 Delete type=0 #64
2023/12/24-12:20:18.761629 7f83937fe6c0 Level-0 table #69: started
2023/12/24-12:20:18.761667 7f83937fe6c0 Level-0 table #69: 0 bytes OK
2023/12/24-12:20:18.768357 7f83937fe6c0 Delete type=0 #67
2023/12/24-12:20:18.776812 7f83937fe6c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
2023/12/24-12:20:18.783744 7f83937fe6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/heritages/000194.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000199

View File

@ -1,8 +1,8 @@
2023/12/24-12:34:00.318719 7f83a1ffb6c0 Recovering log #68
2023/12/24-12:34:00.328670 7f83a1ffb6c0 Delete type=3 #66
2023/12/24-12:34:00.328802 7f83a1ffb6c0 Delete type=0 #68
2023/12/24-12:37:21.733261 7f83937fe6c0 Level-0 table #73: started
2023/12/24-12:37:21.733307 7f83937fe6c0 Level-0 table #73: 0 bytes OK
2023/12/24-12:37:21.739952 7f83937fe6c0 Delete type=0 #71
2023/12/24-12:37:21.753835 7f83937fe6c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
2023/12/24-12:37:21.753900 7f83937fe6c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
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)

View File

@ -1,8 +1,8 @@
2023/12/24-10:16:21.337236 7f8393fff6c0 Recovering log #64
2023/12/24-10:16:21.348102 7f8393fff6c0 Delete type=3 #62
2023/12/24-10:16:21.348205 7f8393fff6c0 Delete type=0 #64
2023/12/24-12:20:18.783758 7f83937fe6c0 Level-0 table #69: started
2023/12/24-12:20:18.783798 7f83937fe6c0 Level-0 table #69: 0 bytes OK
2023/12/24-12:20:18.791210 7f83937fe6c0 Delete type=0 #67
2023/12/24-12:20:18.798452 7f83937fe6c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
2023/12/24-12:20:18.805941 7f83937fe6c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/metiers/000194.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000199

View File

@ -1,8 +1,8 @@
2023/12/24-12:34:00.331651 7f8393fff6c0 Recovering log #68
2023/12/24-12:34:00.342356 7f8393fff6c0 Delete type=3 #66
2023/12/24-12:34:00.342523 7f8393fff6c0 Delete type=0 #68
2023/12/24-12:37:21.746294 7f83937fe6c0 Level-0 table #73: started
2023/12/24-12:37:21.746356 7f83937fe6c0 Level-0 table #73: 0 bytes OK
2023/12/24-12:37:21.753448 7f83937fe6c0 Delete type=0 #71
2023/12/24-12:37:21.753873 7f83937fe6c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
2023/12/24-12:37:21.753932 7f83937fe6c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
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)

View File

@ -1,8 +1,8 @@
2023/12/24-10:16:21.352520 7f83a1ffb6c0 Recovering log #64
2023/12/24-10:16:21.363460 7f83a1ffb6c0 Delete type=3 #62
2023/12/24-10:16:21.363586 7f83a1ffb6c0 Delete type=0 #64
2023/12/24-12:20:18.791492 7f83937fe6c0 Level-0 table #69: started
2023/12/24-12:20:18.791588 7f83937fe6c0 Level-0 table #69: 0 bytes OK
2023/12/24-12:20:18.798213 7f83937fe6c0 Delete type=0 #67
2023/12/24-12:20:18.805913 7f83937fe6c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
2023/12/24-12:20:18.813013 7f83937fe6c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/origines/000194.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000199

View File

@ -1,8 +1,8 @@
2023/12/24-12:34:00.304162 7f83a17fa6c0 Recovering log #68
2023/12/24-12:34:00.315560 7f83a17fa6c0 Delete type=3 #66
2023/12/24-12:34:00.315745 7f83a17fa6c0 Delete type=0 #68
2023/12/24-12:37:21.726546 7f83937fe6c0 Level-0 table #73: started
2023/12/24-12:37:21.726570 7f83937fe6c0 Level-0 table #73: 0 bytes OK
2023/12/24-12:37:21.733055 7f83937fe6c0 Delete type=0 #71
2023/12/24-12:37:21.753606 7f83937fe6c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
2023/12/24-12:37:21.753886 7f83937fe6c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
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)

View File

@ -1,8 +1,8 @@
2023/12/24-10:16:21.323806 7f83a17fa6c0 Recovering log #64
2023/12/24-10:16:21.333877 7f83a17fa6c0 Delete type=3 #62
2023/12/24-10:16:21.333966 7f83a17fa6c0 Delete type=0 #64
2023/12/24-12:20:18.776871 7f83937fe6c0 Level-0 table #69: started
2023/12/24-12:20:18.776925 7f83937fe6c0 Level-0 table #69: 0 bytes OK
2023/12/24-12:20:18.783560 7f83937fe6c0 Delete type=0 #67
2023/12/24-12:20:18.791429 7f83937fe6c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
2023/12/24-12:20:18.798479 7f83937fe6c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
MANIFEST-000095

8
packs/pnj-creatures/LOG Normal file
View 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)

View 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)

Binary file not shown.

Binary file not shown.

BIN
packs/protection/000194.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000199

View File

@ -1,8 +1,8 @@
2023/12/24-12:34:00.260773 7f83a1ffb6c0 Recovering log #68
2023/12/24-12:34:00.272894 7f83a1ffb6c0 Delete type=3 #66
2023/12/24-12:34:00.273030 7f83a1ffb6c0 Delete type=0 #68
2023/12/24-12:37:21.699002 7f83937fe6c0 Level-0 table #73: started
2023/12/24-12:37:21.699041 7f83937fe6c0 Level-0 table #73: 0 bytes OK
2023/12/24-12:37:21.706302 7f83937fe6c0 Delete type=0 #71
2023/12/24-12:37:21.726427 7f83937fe6c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
2023/12/24-12:37:21.726463 7f83937fe6c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
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)

View File

@ -1,8 +1,8 @@
2023/12/24-10:16:21.280418 7f8393fff6c0 Recovering log #64
2023/12/24-10:16:21.291443 7f8393fff6c0 Delete type=3 #62
2023/12/24-10:16:21.291522 7f8393fff6c0 Delete type=0 #64
2023/12/24-12:20:18.754630 7f83937fe6c0 Level-0 table #69: started
2023/12/24-12:20:18.754699 7f83937fe6c0 Level-0 table #69: 0 bytes OK
2023/12/24-12:20:18.761432 7f83937fe6c0 Delete type=0 #67
2023/12/24-12:20:18.768575 7f83937fe6c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
2023/12/24-12:20:18.776849 7f83937fe6c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/runes/000194.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000199

View File

@ -1,8 +1,8 @@
2023/12/24-12:34:00.373049 7f83a1ffb6c0 Recovering log #68
2023/12/24-12:34:00.383735 7f83a1ffb6c0 Delete type=3 #66
2023/12/24-12:34:00.383841 7f83a1ffb6c0 Delete type=0 #68
2023/12/24-12:37:21.760456 7f83937fe6c0 Level-0 table #73: started
2023/12/24-12:37:21.760489 7f83937fe6c0 Level-0 table #73: 0 bytes OK
2023/12/24-12:37:21.766845 7f83937fe6c0 Delete type=0 #71
2023/12/24-12:37:21.773984 7f83937fe6c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
2023/12/24-12:37:21.774012 7f83937fe6c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
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)

View File

@ -1,8 +1,8 @@
2023/12/24-10:16:21.395156 7f8393fff6c0 Recovering log #64
2023/12/24-10:16:21.406418 7f8393fff6c0 Delete type=3 #62
2023/12/24-10:16:21.406910 7f8393fff6c0 Delete type=0 #64
2023/12/24-12:20:18.813028 7f83937fe6c0 Level-0 table #69: started
2023/12/24-12:20:18.813071 7f83937fe6c0 Level-0 table #69: 0 bytes OK
2023/12/24-12:20:18.819811 7f83937fe6c0 Delete type=0 #67
2023/12/24-12:20:18.827987 7f83937fe6c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
2023/12/24-12:20:18.828164 7f83937fe6c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
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)

Binary file not shown.

BIN
packs/runes/MANIFEST-000199 Normal file

Binary file not shown.

BIN
packs/scenes/000110.ldb Normal file

Binary file not shown.

1
packs/scenes/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000115

8
packs/scenes/LOG Normal file
View 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
View 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)

Binary file not shown.

Binary file not shown.

View File

View File

@ -0,0 +1 @@
MANIFEST-000107

View File

View 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)

View 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)

Binary file not shown.

Binary file not shown.

BIN
packs/skills/000194.ldb Normal file

Binary file not shown.

0
packs/skills/000201.log Normal file
View File

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000199

Some files were not shown because too many files have changed in this diff Show More