Compare commits

...

9 Commits

153 changed files with 2263 additions and 778 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

201
lang/en.json Normal file
View File

@ -0,0 +1,201 @@
{
"Adresse": "Agility",
"Clairvoyance": "Clarity",
"MNBL.abilities": "Gifts/Pacts",
"MNBL.activatedrunes": "Activated Runes",
"MNBL.addpredilection": "Add a specialization",
"MNBL.aimingbonus": "Aiming Bonus",
"MNBL.alignement": "Alignment",
"MNBL.all": "All",
"MNBL.allegiance": "Allegiance",
"MNBL.applydamage": "Apply damage/bonus/penalty",
"MNBL.aspect": "Aspect",
"MNBL.Assaut": "Smite",
"MNBL.attack": "Attack",
"MNBL.attackcapacity": "Offensive Ability",
"MNBL.attackmountbonus": "Mounted attacker vs ground defender (+5)",
"MNBL.attacks": "Attacks",
"MNBL.attribut": "Attribute",
"MNBL.attributes": "Attributes",
"MNBL.automalus": "Auto Penalty",
"MNBL.base": "Base",
"MNBL.beastslords": "Beast Lords",
"MNBL.bio": "Bio & Notes",
"MNBL.bonus": "Bonus",
"MNBL.candoublebonusskill": "Bonuses can be doubled (cf. Profession)",
"MNBL.chaos": "Chaos",
"MNBL.chaotictraits": "Chaotic Traits",
"MNBL.charge": "Charge",
"MNBL.consumed": "Consumed",
"MNBL.contain": "Contain the opponent",
"MNBL.creatureresourcecost": "Resource Cost (creatures)",
"MNBL.current": "Current",
"MNBL.currentmax": "Current Max",
"MNBL.damage": "Damage",
"MNBL.damagebonus": "Damage Bonus",
"MNBL.defense": "Defense",
"MNBL.defensebonus": "Defense Bonus",
"MNBL.defensecapacity": "Defensive Ability",
"MNBL.dice": "Dice",
"MNBL.difficulty": "Difficulty",
"MNBL.dirtyattack": "Cheap Shot",
"MNBL.disadvantagepositions": "Disadvantageous positions (Max bonus +15)",
"MNBL.disarm": "Disarm",
"MNBL.doubleD20": "Double d20 (1 Shard Point)",
"MNBL.dramaticfailure": "Dramatic Failure",
"MNBL.duration": "Duration",
"MNBL.easy": "Easy (5)",
"MNBL.eclat": "Shard",
"MNBL.elementslords": "Elemental Lords",
"MNBL.equipmentactions": "Equipment/Actions",
"MNBL.equipments": "Equipments",
"MNBL.equipped": "Equipped",
"MNBL.exp": "Experience",
"MNBL.eyes": "Eyes",
"MNBL.failure": "Failure",
"MNBL.feint": "Feint",
"MNBL.flee": "Flee",
"MNBL.formula": "Formula",
"MNBL.genre": "Gender",
"MNBL.gifts": "Gifts",
"MNBL.goodadventure": "Good Adventure",
"MNBL.hair": "Hair",
"MNBL.hard": "Hard (15)",
"MNBL.hascover": "Cover",
"MNBL.hazardous": "Tricky (20)",
"MNBL.health": "Health",
"MNBL.healthmalus": "Health Penalty",
"MNBL.heavycover": "Almost complete (-10)",
"MNBL.heroicsuccess": "Heroic Success",
"MNBL.highlanguage": "High Melnibonéan",
"MNBL.ignorearmor": "Ignore Armor",
"MNBL.ignorehealthmalus": "Ignore Health Penalty",
"MNBL.ignoresoulmalus": "Ignore Soul Penalty",
"MNBL.immobilize": "Immobilize",
"MNBL.insane": "Ridiculous (25)",
"MNBL.isdefense": "Defensive",
"MNBL.knockout": "Knock Out",
"MNBL.law": "Law",
"MNBL.legacy": "Legacy",
"MNBL.lessthanshort": "Less than short (10)",
"MNBL.lethal": "Lethal",
"MNBL.level": "Level",
"MNBL.lightcover": "Buckler or light (-2)",
"MNBL.longmore": "Long and more (25)",
"MNBL.longrange": "Long Range",
"MNBL.malus": "Penalty",
"MNBL.margin": "Margin",
"MNBL.medium": "Average (10)",
"MNBL.mediumcover": "Pavise or half (-5)",
"MNBL.mediummore": "Medium and more (20)",
"MNBL.mediumrange": "Medium Range",
"MNBL.meleethrowweapon": "Melee and Throwing Weapon",
"MNBL.meleeweapon": "Melee Weapon",
"MNBL.mode": "Mode",
"MNBL.modifier": "Modifiers",
"MNBL.modifiertype": "Modifier Type",
"MNBL.mounted": "Mounted",
"MNBL.nextactionmalus": "Penalty for next action",
"MNBL.nextattackbonus": "Bonus for next attack",
"MNBL.none": "None",
"MNBL.noneunknwon": "None/Unknown",
"MNBL.nonlethal": "Non-Lethal",
"MNBL.nonlethaldamage": "Non-Lethal Damage",
"MNBL.notarget": "No designated target",
"MNBL.origin": "Origin",
"MNBL.pacts": "Pacts",
"MNBL.points": "Points",
"MNBL.preciseattack": "Precision Attack",
"MNBL.predilections": "Specializations",
"MNBL.preferredhand": "Preferred Hand",
"MNBL.prerequisites": "Prerequisites",
"MNBL.price": "Price",
"MNBL.profession": "Profession",
"MNBL.pronounced": "Spoken",
"MNBL.pronouncedrune": "Spoken Rune",
"MNBL.pronouncerune": "Speak the rune",
"MNBL.protections": "Protections",
"MNBL.puremadness": "Insane (30)",
"MNBL.quantity": "Quantity",
"MNBL.range": "Range",
"MNBL.rarity": "Rarity",
"MNBL.registeredmodifiers": "Registered Modifiers",
"MNBL.reloadduration": "Reload Time",
"MNBL.ressources": "Resources",
"MNBL.roll": "Roll",
"MNBL.runes": "Runes",
"MNBL.runningtarget": "Running target (-5/-10 depending on range)",
"MNBL.shootmodifier": "Shooting Modifiers",
"MNBL.shootweapon": "Shoot Weapon",
"MNBL.shortmore": "Short and more (10)",
"MNBL.shortrange": "Short Range",
"MNBL.size": "Size",
"MNBL.skill": "Skill",
"MNBL.skills": "Skills",
"MNBL.smallroomtarget": "Target in confined space (+5)",
"MNBL.soul": "Soul",
"MNBL.soulmalus": "Soul Penalty",
"MNBL.soulmultiplier": "Soul Multiplier",
"MNBL.soulpoints": "Soul Points",
"MNBL.specialactions": "Special Actions",
"MNBL.specialweapon": "Special (ability/gift)",
"MNBL.speciestrait": "Species Trait",
"MNBL.speed": "Speed",
"MNBL.success": "Success",
"MNBL.target": "Target",
"MNBL.targetbelow": "Target below (+5)",
"MNBL.targetcantmove": "Target immobilized (+5)",
"MNBL.targetdefense": "Opponent's Defense",
"MNBL.targetground": "Target on the ground (+5)",
"MNBL.targetseeshoot": "Target is aware of the shot",
"MNBL.tendancies": "Tendencies",
"MNBL.throwweapon": "Throwing Weapon",
"MNBL.totalprotection": "Total Protection",
"MNBL.traced": "Written",
"MNBL.tracedrune": "Written Rune",
"MNBL.tracerune": "Write the rune",
"MNBL.treasuremoney": "Treasures and Money",
"MNBL.twohands": "Two-handed",
"MNBL.type": "Type",
"MNBL.unarmedtarget": "Unarmed target (+5)",
"MNBL.unit": "Unit",
"MNBL.use": "Use",
"MNBL.usedpredilection": "Used Predilection",
"MNBL.value": "Value",
"MNBL.weapon": "Weapon",
"MNBL.weaponbonusattack": "Handling Bonus (offensive)",
"MNBL.weaponbonusdefense": "Handling Bonus (defensive)",
"MNBL.weapons": "Weapons",
"MNBL.weaponscapacities": "Weapons/Abilities",
"MNBL.weapontype": "Weapon Type",
"MNBL.weight": "Weight",
"Présence": "Presence",
"Puissance": "Might",
"Trempe": "Mettle",
"TYPES": {
"Actor": {
"creature": "Creature",
"personnage": "Character"
},
"Item": {
"arme": "Weapon",
"bouclier": "Shield",
"capacite": "Ability",
"competence": "Skill",
"don": "Gifts",
"equipement": "Equipment",
"heritage": "Background",
"metier": "Profession",
"modifier": "Modifier",
"monnaie": "Currency",
"origine": "Origin",
"pacte": "Pacts",
"protection": "Protections",
"rune": "Rune",
"runeeffect": "Rune Effect",
"tendance": "Signs of Chaos",
"traitchaotique": "Background",
"traitespece": "Species Trait"
}
}
}

View File

@ -2,7 +2,7 @@
"TYPES": {
"Actor": {
"personnage": "Personnage",
"PNJ": "PNJ"
"creature": "Créature"
},
"Item": {
"arme": "Arme",
@ -21,7 +21,193 @@
"metier": "Métier",
"runeeffect": "Effet de Rune",
"bouclier": "Bouclier",
"modifier": "Modificateur"
}
"modifier": "Modificateur",
"traitespece": "Trait d'Espèce"
}
},
"Adresse": "Adresse",
"Puissance": "Puissance",
"Clairvoyance": "Clairvoyance",
"Présence": "Présence",
"Trempe": "Trempe",
"MNBL.assaut": "Assaut",
"MNBL.preciseattack": "Attaque Précise",
"MNBL.feint": "Feinte",
"MNBL.dirtyattack": "Coup Bas",
"MNBL.charge": "Charger",
"MNBL.contain": "Contenir l'adversaire",
"MNBL.disarm": "Désarmer",
"MNBL.none": "Aucun",
"MNBL.lightcover": "Rondache ou léger (-2)",
"MNBL.mediumcover": "Pavois ou à moitié (-5)",
"MNBL.heavycover": "Quasi complet (-10)",
"MNBL.roll": "Jet",
"MNBL.defensecapacity": "Capacité défensive",
"MNBL.attackcapacity": "Capacité offensive",
"MNBL.lessthanshort": "Moins que courte (10)",
"MNBL.shortmore": "Courte et + (10)",
"MNBL.mediummore": "Moyenne et + (20)",
"MNBL.longmore": "Longue et + (25)",
"MNBL.noneunknwon": "Aucune/Inconnue",
"MNBL.easy": "Facile (5)",
"MNBL.medium": "Moyenne (10)",
"MNBL.hard": "Ardue (15)",
"MNBL.hazardous": "Hasardeuse (20)",
"MNBL.insane": "Insensée (25)",
"MNBL.puremadness": "Pure Folie (30)",
"MNBL.pronouncerune": "Prononcer la rune",
"MNBL.tracerune": "Tracer la rune",
"MNBL.pronounced": "Prononcée",
"MNBL.traced": "Tracée",
"MNBL.meleeweapon": "Arme de contact",
"MNBL.meleethrowweapon": "Arme de contact et de Jet",
"MNBL.throwweapon": "Arme de Lancer",
"MNBL.shootweapon": "Arme de Tir",
"MNBL.specialweapon": "Spécial (capacité/don)",
"MNBL.all": "Tous",
"MNBL.beastslords": "Seigneurs des Bêtes",
"MNBL.elementslords": "Seigneurs Elementaires",
"MNBL.law": "Loi",
"MNBL.chaos": "Chaos",
"MNBL.level": "Niveau",
"MNBL.points": "Points",
"MNBL.aspect": "Aspect",
"MNBL.margin": "Marge",
"MNBL.goodadventure" : "Bonne Aventure",
"MNBL.base": "Base",
"MNBL.current": "Actuelle",
"MNBL.alignement" : "Alignement",
"MNBL.eclat": "Eclat",
"MNBL.exp": "Expérience",
"MNBL.attributes": "Attributs",
"MNBL.skills": "Compétences",
"MNBL.abilities": "Dons/Pactes",
"MNBL.equipmentactions": "Equipements/Actions",
"MNBL.bio": "Bio&Notes",
"MNBL.health": "Santé",
"MNBL.bonus": "Bonus",
"MNBL.malus": "Malus",
"MNBL.nonlethal": "Non Létaux",
"MNBL.lethal": "Létaux",
"MNBL.automalus" : "Malus Auto",
"MNBL.soul": "Ame",
"MNBL.currentmax": "Max Actuel",
"MNBL.consumed": "Consommé",
"MNBL.damagebonus": "B. Dégats",
"MNBL.speed": "Vitesse",
"MNBL.defense": "Défense",
"MNBL.totalprotection": "Protection Totale",
"MNBL.modifier": "Modificateurs",
"MNBL.type": "Type",
"MNBL.value": "Valeur",
"MNBL.gifts": "Dons",
"MNBL.allegiance": "Allégeance",
"MNBL.pacts": "Pactes",
"MNBL.runes": "Runes",
"MNBL.highlanguage": "Haut Parler",
"MNBL.difficulty": "Difficulté",
"MNBL.tendancies": "Tendances",
"MNBL.chaotictraits": "Traits Chaotique",
"MNBL.activatedrunes": "Runes actives",
"MNBL.mode": "Mode",
"MNBL.duration": "Durée",
"MNBL.treasuremoney": "Richesses et Argent",
"MNBL.quantity": "Quantité",
"MNBL.unit": "Unité",
"MNBL.specialactions": "Actions spéciales",
"MNBL.knockout": "Assomer",
"MNBL.flee": "Fuir",
"MNBL.immobilize": "Immobiliser",
"MNBL.mounted": "Monté",
"MNBL.weapons": "Armes",
"MNBL.attack": "Attaque",
"MNBL.damage": "Dégats",
"MNBL.protections": "Protections",
"MNBL.equipments": "Equipements",
"MNBL.origin": "Origine",
"MNBL.legacy": "Héritage",
"MNBL.profession": "Métier",
"MNBL.genre": "Genre",
"MNBL.size": "Taille",
"MNBL.hair": "Cheveux",
"MNBL.eyes": "Yeux",
"MNBL.preferredhand": "Main Préférée",
"MNBL.weight": "Weight",
"MNBL.soulmultiplier": "Multiplicateur d'âme",
"MNBL.ignorehealthmalus": "Ignore le malus de santé",
"MNBL.ignoresoulmalus": "Ignore le malus d'âme",
"MNBL.weapon": "Arme",
"MNBL.nextattackbonus": "Bonus pour prochaine attaque",
"MNBL.nextactionmalus": "Malus au défenseur pour prochaine action",
"MNBL.applydamage": "Appliquer les dégats/bonus/malus",
"MNBL.attribut": "Attribut",
"MNBL.skill": "Compétence",
"MNBL.target": "Cible",
"MNBL.usedpredilection": "Prédilection utilisée",
"MNBL.soulpoints": "Points d'âme",
"MNBL.formula": "Formule",
"MNBL.dice":"Dé",
"MNBL.success": "Succés",
"MNBL.failure": "Echec",
"MNBL.heroicsuccess": "Succés Héroïque",
"MNBL.dramaticfailure": "Echec Dramatique",
"MNBL.attackmountbonus": "Attaquant monté vs def. au sol (+5)",
"MNBL.targetdefense": "Défense adversaire",
"MNBL.shootmodifier": "Modificateurs de Tir",
"MNBL.aimingbonus": "Bonus de visée",
"MNBL.targetseeshoot": "La cible est consciente du tir",
"MNBL.notarget": "Pas de cible désignée",
"MNBL.runningtarget": "La cible court (-5/-10 selon portée)",
"MNBL.hascover": "Couvert",
"MNBL.range": "Portée",
"MNBL.disadvantagepositions": "Positions désavantageuses (Bonus max +15)",
"MNBL.targetground": "Cible au sol (+5)",
"MNBL.unarmedtarget": "Cible désarmée (+5)",
"MNBL.smallroomtarget": "Cible en espace restreint (+5)",
"MNBL.targetcantmove": "Cible immobilisée (+5)",
"MNBL.targetbelow": "Cible surplombée (+5)",
"MNBL.healthmalus": "Malus de santé",
"MNBL.soulmalus": "Malus d'âme",
"MNBL.registeredmodifiers": "Modificateurs enregistrés",
"MNBL.doubleD20": "Doubler le d20 (1 Point d'Eclat)",
"MNBL.pronouncedrune": "Rune prononcée",
"MNBL.tracedrune": "Rune tracée",
"MNBL.equipped": "Equipé",
"MNBL.rarity": "Rareté",
"MNBL.price": "Prix",
"MNBL.modifiertype": "Type de modificateur",
"MNBL.prerequisites": "Prérequis",
"MNBL.predilections": "Prédilections",
"MNBL.candoublebonusskill": "Les bonus de Bonne Aventure et d'Eclat peuvent être doublés (cf. Métier)",
"MNBL.addpredilection": "Ajouter une prédilection",
"MNBL.defensebonus": "Bonus de défense",
"MNBL.nonlethaldamage": "Dégâts non létaux",
"MNBL.weapontype": "Type d'arme",
"MNBL.weaponbonusattack": "Bonus de maniement (offensif)",
"MNBL.weaponbonusdefense": "Bonus de maniement (défensif)",
"MNBL.isdefense": "Défensive",
"MNBL.twohands": "A deux mains",
"MNBL.ignorearmor": "Ignore l'armure",
"MNBL.creatureresourcecost": "Cout en Ressources (créatures)",
"MNBL.shortrange": "Portée courte",
"MNBL.mediumrange":"Portée moyenne",
"MNBL.longrange":"Portée longue",
"MNBL.reloadduration": "Temps de rechargement",
"MNBL.attacks": "Attaques",
"MNBL.ressources": "Ressources",
"MNBL.weaponscapacities": "Armes/Capacités",
"MNBL.use": "Utiliser",
"MNBL.speciestrait": "Trait d'espèce"
}

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)
@ -204,7 +215,7 @@ export class MournbladeActor extends Actor {
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,24 +356,40 @@ 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 })
}
}
@ -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
@ -531,12 +613,12 @@ export class MournbladeActor extends Actor {
/* -------------------------------------------- */
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
@ -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,81 @@
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",
export class MournbladeConfig {
static getConfig() {
let MOURNBLADE_CONFIG = {
attaques: {
assaut: game.i18n.localize("MNBL.assaut"),
precise: game.i18n.localize("MNBL.preciseattack"),
feinte: game.i18n.localize("MNBL.feint"),
coupbas: game.i18n.localize("MNBL.dirtyattack"),
charger: game.i18n.localize("MNBL.charge"),
contenir: game.i18n.localize("MNBL.contain"),
desarmer: game.i18n.localize("MNBL.disarm")
},
couverts:{
aucun: {name: "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: game.i18n.localize("MNBL.none"), value: 0 },
rondache: { name: game.i18n.localize("MNBL.lightcover"), value: -2 },
pavois: { name: game.i18n.localize("MNBL.mediumcover"), value: -5 },
complet: { name: game.i18n.localize("MNBL.heavycover"), value: -10 },
},
modifierTypes: {
aucun: {name: "Aucun", value: 0},
roll: {name: "Jet", value: 0},
degats: {name: "Dégats", value: 0},
aucun: { name: game.i18n.localize("MNBL.none"), value: 0 },
roll: { name: game.i18n.localize("MNBL.roll"), value: 0 },
degats: { name: game.i18n.localize("MNBL.damage"), value: 0 },
defense: { name: game.i18n.localize("MNBL.defensecapacity"), value: 0 },
attaque: { name: game.i18n.localize("MNBL.attackcapacity"), value: 0 },
},
listeNiveau: {
},
listeNiveauCreature: {
},
listePortees: {
"10": game.i18n.localize("MNBL.lessthanshort"),
"15": game.i18n.localize("MNBL.shortmore"),
"20": game.i18n.localize("MNBL.mediummore"),
"25": game.i18n.localize("MNBL.longmore")
},
modificateurOptions: {},
pointsAmeOptions: {},
difficulteOptions: {
"0": game.i18n.localize("MNBL.noneunknwon"),
"5": game.i18n.localize("MNBL.easy"),
"10": game.i18n.localize("MNBL.medium"),
"15": game.i18n.localize("MNBL.hard"),
"20": game.i18n.localize("MNBL.hazardous"),
"25": game.i18n.localize("MNBL.insane"),
"30": game.i18n.localize("MNBL.puremadness")
},
attributs: {
adr: game.i18n.localize("Adresse"), pui: game.i18n.localize("Puissance"),
cla: game.i18n.localize("Clairvoyance"), pre: game.i18n.localize("Présence"), tre: game.i18n.localize("Trempe")
},
lancementRuneOptions: {
prononcer: game.i18n.localize("MNBL.pronouncerune"),
inscrire: game.i18n.localize("MNBL.tracerune")
},
effetRuneOptions: {
prononcee: game.i18n.localize("MNBL.pronounced"),
inscrite: game.i18n.localize("MNBL.traced")
},
typeArmeOptions: {
contact: game.i18n.localize("MNBL.meleeweapon"),
contactjet: game.i18n.localize("MNBL.meleethrowweapon"),
jet: game.i18n.localize("MNBL.throwweapon"),
tir: game.i18n.localize("MNBL.shootweapon"),
special: game.i18n.localize("MNBL.specialweapon")
},
allegeanceOptions: {
tous: game.i18n.localize("MNBL.all"),
chaos: game.i18n.localize("MNBL.chaos"),
loi: game.i18n.localize("MNBL.law"),
betes: game.i18n.localize("MNBL.beastslords"),
elementaires: game.i18n.localize("MNBL.elementslords")
}
}
return MOURNBLADE_CONFIG;
}
};

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,11 +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";
import { MournbladeConfig } from "./mournblade-config.js";
/* -------------------------------------------- */
/* Foundry VTT Initialization */
@ -47,14 +47,14 @@ Hooks.once("init", async function () {
CONFIG.Actor.documentClass = MournbladeActor
CONFIG.Item.documentClass = MournbladeItem
game.system.mournblade = {
config : MOURNBLADE_CONFIG,
config : MournbladeConfig.getConfig(),
}
/* -------------------------------------------- */
// Register sheet application classes
Actors.unregisterSheet("core", ActorSheet);
Actors.registerSheet("fvtt-mournblade", MournbladeActorSheet, { types: ["personnage"], makeDefault: true })
//Actors.registerSheet("fvtt-mournblade", MournbladeNPCSheet, { types: ["npc"], makeDefault: false });
Actors.registerSheet("fvtt-mournblade", MournbladeCreatureSheet, { types: ["creature"], makeDefault: true })
Items.unregisterSheet("core", ItemSheet);
Items.registerSheet("fvtt-mournblade", MournbladeItemSheet, { makeDefault: true })
@ -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();
}
}
@ -107,6 +92,10 @@ function registerUsageCount( registerKey ) {
/* -------------------------------------------- */
Hooks.once("ready", function () {
game.system.mournblade = {
config : MournbladeConfig.getConfig(),
}
MournbladeUtility.ready();
// User warning
if (!game.user.isGM && game.user.character == undefined) {
@ -116,8 +105,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
});
}
registerUsageCount('fvtt-mournblade')
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
console.log("ClassCounter loaded", moduleCounter)
moduleCounter.ClassCounter.registerUsageCount()
}).catch(err=>
console.log("No stats available, giving up.")
)
importDefaultScene();
welcomeMessage();
});

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

@ -15,9 +15,6 @@ export class MournbladeUtility {
Hooks.on("getCombatTrackerEntryContext", (html, options) => {
MournbladeUtility.pushInitiativeOptions(html, options);
})
Hooks.on("dropCanvasData", (canvas, data) => {
MournbladeUtility.dropItemOnToken(canvas, data)
});
this.rollDataStore = {}
this.defenderStore = {}
@ -59,15 +56,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 +63,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 +80,11 @@ export class MournbladeUtility {
static async ready() {
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills")
this.skills = skills.map(i => i.toObject())
game.system.mournblade.config.listeNiveauSkill = MournbladeUtility.createDirectOptionList(0, 10)
game.system.mournblade.config.listeNiveauCreature = MournbladeUtility.createDirectOptionList(0, 35)
game.system.mournblade.config.modificateurOptions = MournbladeUtility.createArrayOptionList(-15, 15)
game.system.mournblade.config.pointsAmeOptions = MournbladeUtility.createDirectOptionList(0, 20)
}
/* -------------------------------------------- */
@ -122,8 +106,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 +134,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 +164,7 @@ export class MournbladeUtility {
const templatePaths = [
'systems/fvtt-mournblade/templates/editor-notes-gm.html',
'systems/fvtt-mournblade/templates/partial-item-description.html',
'systems/fvtt-mournblade/templates/partial-list-niveau.html'
'systems/fvtt-mournblade/templates/partial-item-description.html'
]
return loadTemplates(templatePaths);
}
@ -223,12 +206,10 @@ export class MournbladeUtility {
}
return options;
}
/* -------------------------------------------- */
static buildListOptions(min, max) {
let options = ""
static createArrayOptionList(min, max) {
let options = [];
for (let i = min; i <= max; i++) {
options += `<option value="${i}">${i}</option>`
options.push({key:`${i}`, label:`${i}`});
}
return options;
}
@ -323,6 +304,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 +317,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 +329,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 +347,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 +378,7 @@ export class MournbladeUtility {
}
}
if (rollData.typeCouvert != "aucun") {
rollData.diceFormula += `-${rollData.config.couverts[rollData.typeCouvert].value}`
rollData.diceFormula += `+${rollData.config.couverts[rollData.typeCouvert].value}`
}
}
@ -396,15 +392,16 @@ export class MournbladeUtility {
}
}
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 +409,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 +434,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"
}
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,16 +470,16 @@ 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 +
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"
}
}
@ -479,24 +493,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 +543,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 +560,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 +596,7 @@ export class MournbladeUtility {
/* -------------------------------------------- */
static blindMessageToGM(chatOptions) {
let chatGM = duplicate(chatOptions);
let chatGM = foundry.utils.duplicate(chatOptions);
chatGM.whisper = this.getUsers(user => user.isGM);
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
console.log("blindMessageToGM", chatGM);
@ -637,13 +659,11 @@ export class MournbladeUtility {
/* -------------------------------------------- */
static getBasicRollData() {
let rollData = {
rollId: randomID(16),
rollId: foundry.utils.randomID(16),
rollMode: game.settings.get("core", "rollMode"),
modificateursOptions: this.getModificateurOptions(),
pointAmeOptions: this.getPointAmeOptions(),
difficulte: 0,
modificateur: 0,
config: game.system.mournblade.config,
config: foundry.utils.duplicate(game.system.mournblade.config),
}
MournbladeUtility.updateWithTarget(rollData)
return rollData
@ -655,7 +675,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/000212.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000217

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/09/10-07:14:44.885743 7f7ed4e006c0 Recovering log #215
2024/09/10-07:14:44.956966 7f7ed4e006c0 Delete type=3 #213
2024/09/10-07:14:44.957144 7f7ed4e006c0 Delete type=0 #215
2024/09/10-07:20:33.463210 7f7ecd6006c0 Level-0 table #220: started
2024/09/10-07:20:33.463253 7f7ecd6006c0 Level-0 table #220: 0 bytes OK
2024/09/10-07:20:33.501220 7f7ecd6006c0 Delete type=0 #218
2024/09/10-07:20:33.538862 7f7ecd6006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.538937 7f7ecd6006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)

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/09/09-21:51:17.138004 7f7ecf4006c0 Recovering log #210
2024/09/09-21:51:17.149501 7f7ecf4006c0 Delete type=3 #208
2024/09/09-21:51:17.149609 7f7ecf4006c0 Delete type=0 #210
2024/09/09-21:52:48.597265 7f7ecd6006c0 Level-0 table #216: started
2024/09/09-21:52:48.597313 7f7ecd6006c0 Level-0 table #216: 0 bytes OK
2024/09/09-21:52:48.604438 7f7ecd6006c0 Delete type=0 #214
2024/09/09-21:52:48.611351 7f7ecd6006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.611418 7f7ecd6006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/armes/MANIFEST-000217 Normal file

Binary file not shown.

Binary file not shown.

BIN
packs/dons/000211.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000216

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/09/10-07:14:45.086238 7f7ecf4006c0 Recovering log #214
2024/09/10-07:14:45.144857 7f7ecf4006c0 Delete type=3 #212
2024/09/10-07:14:45.145056 7f7ecf4006c0 Delete type=0 #214
2024/09/10-07:20:33.607105 7f7ecd6006c0 Level-0 table #219: started
2024/09/10-07:20:33.607143 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
2024/09/10-07:20:33.638955 7f7ecd6006c0 Delete type=0 #217
2024/09/10-07:20:33.678483 7f7ecd6006c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.678561 7f7ecd6006c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)

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/09/09-21:51:17.180244 7f7ecea006c0 Recovering log #209
2024/09/09-21:51:17.191008 7f7ecea006c0 Delete type=3 #207
2024/09/09-21:51:17.191115 7f7ecea006c0 Delete type=0 #209
2024/09/09-21:52:48.625325 7f7ecd6006c0 Level-0 table #215: started
2024/09/09-21:52:48.625386 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
2024/09/09-21:52:48.631864 7f7ecd6006c0 Delete type=0 #213
2024/09/09-21:52:48.638978 7f7ecd6006c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.639033 7f7ecd6006c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/dons/MANIFEST-000216 Normal file

Binary file not shown.

Binary file not shown.

BIN
packs/equipement/000211.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000216

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/09/10-07:14:45.020069 7f7ecfe006c0 Recovering log #214
2024/09/10-07:14:45.082360 7f7ecfe006c0 Delete type=3 #212
2024/09/10-07:14:45.082521 7f7ecfe006c0 Delete type=0 #214
2024/09/10-07:20:33.576805 7f7ecd6006c0 Level-0 table #219: started
2024/09/10-07:20:33.576855 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
2024/09/10-07:20:33.606927 7f7ecd6006c0 Delete type=0 #217
2024/09/10-07:20:33.678460 7f7ecd6006c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.678542 7f7ecd6006c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)

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/09/09-21:51:17.166142 7f7ecfe006c0 Recovering log #209
2024/09/09-21:51:17.176865 7f7ecfe006c0 Delete type=3 #207
2024/09/09-21:51:17.176960 7f7ecfe006c0 Delete type=0 #209
2024/09/09-21:52:48.618041 7f7ecd6006c0 Level-0 table #215: started
2024/09/09-21:52:48.618105 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
2024/09/09-21:52:48.625105 7f7ecd6006c0 Delete type=0 #213
2024/09/09-21:52:48.638957 7f7ecd6006c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.639048 7f7ecd6006c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/heritages/000211.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000216

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/09/10-07:14:45.210943 7f7ecea006c0 Recovering log #214
2024/09/10-07:14:45.265940 7f7ecea006c0 Delete type=3 #212
2024/09/10-07:14:45.266060 7f7ecea006c0 Delete type=0 #214
2024/09/10-07:20:33.678752 7f7ecd6006c0 Level-0 table #219: started
2024/09/10-07:20:33.678827 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
2024/09/10-07:20:33.713480 7f7ecd6006c0 Delete type=0 #217
2024/09/10-07:20:33.816847 7f7ecd6006c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.816952 7f7ecd6006c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)

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/09/09-21:51:17.208104 7f7ed4e006c0 Recovering log #209
2024/09/09-21:51:17.219088 7f7ed4e006c0 Delete type=3 #207
2024/09/09-21:51:17.219197 7f7ed4e006c0 Delete type=0 #209
2024/09/09-21:52:48.639145 7f7ecd6006c0 Level-0 table #215: started
2024/09/09-21:52:48.639185 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
2024/09/09-21:52:48.646533 7f7ecd6006c0 Delete type=0 #213
2024/09/09-21:52:48.668071 7f7ecd6006c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.668151 7f7ecd6006c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/metiers/000211.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000216

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/09/10-07:14:45.269926 7f7ecfe006c0 Recovering log #214
2024/09/10-07:14:45.328808 7f7ecfe006c0 Delete type=3 #212
2024/09/10-07:14:45.328977 7f7ecfe006c0 Delete type=0 #214
2024/09/10-07:20:33.783195 7f7ecd6006c0 Level-0 table #219: started
2024/09/10-07:20:33.783241 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
2024/09/10-07:20:33.816523 7f7ecd6006c0 Delete type=0 #217
2024/09/10-07:20:33.816931 7f7ecd6006c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.817030 7f7ecd6006c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)

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/09/09-21:51:17.222186 7f7ecfe006c0 Recovering log #209
2024/09/09-21:51:17.233209 7f7ecfe006c0 Delete type=3 #207
2024/09/09-21:51:17.233359 7f7ecfe006c0 Delete type=0 #209
2024/09/09-21:52:48.646768 7f7ecd6006c0 Level-0 table #215: started
2024/09/09-21:52:48.646827 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
2024/09/09-21:52:48.653236 7f7ecd6006c0 Delete type=0 #213
2024/09/09-21:52:48.668098 7f7ecd6006c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.668166 7f7ecd6006c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/origines/000211.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000216

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/09/10-07:14:45.148885 7f7ed4e006c0 Recovering log #214
2024/09/10-07:14:45.204991 7f7ed4e006c0 Delete type=3 #212
2024/09/10-07:14:45.205146 7f7ed4e006c0 Delete type=0 #214
2024/09/10-07:20:33.639140 7f7ecd6006c0 Level-0 table #219: started
2024/09/10-07:20:33.639178 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
2024/09/10-07:20:33.677964 7f7ecd6006c0 Delete type=0 #217
2024/09/10-07:20:33.678505 7f7ecd6006c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.678580 7f7ecd6006c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)

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/09/09-21:51:17.194403 7f7ecf4006c0 Recovering log #209
2024/09/09-21:51:17.204990 7f7ecf4006c0 Delete type=3 #207
2024/09/09-21:51:17.205104 7f7ecf4006c0 Delete type=0 #209
2024/09/09-21:52:48.632133 7f7ecd6006c0 Level-0 table #215: started
2024/09/09-21:52:48.632191 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
2024/09/09-21:52:48.638748 7f7ecd6006c0 Delete type=0 #213
2024/09/09-21:52:48.638992 7f7ecd6006c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.639018 7f7ecd6006c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
MANIFEST-000112

8
packs/pnj-creatures/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/09/10-07:14:44.657561 7f7ecf4006c0 Recovering log #110
2024/09/10-07:14:44.756808 7f7ecf4006c0 Delete type=3 #108
2024/09/10-07:14:44.756963 7f7ecf4006c0 Delete type=0 #110
2024/09/10-07:20:33.399722 7f7ecd6006c0 Level-0 table #115: started
2024/09/10-07:20:33.399823 7f7ecd6006c0 Level-0 table #115: 0 bytes OK
2024/09/10-07:20:33.426020 7f7ecd6006c0 Delete type=0 #113
2024/09/10-07:20:33.538803 7f7ecd6006c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.538898 7f7ecd6006c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)

View File

@ -0,0 +1,8 @@
2024/09/09-21:51:17.088284 7f7ecea006c0 Recovering log #105
2024/09/09-21:51:17.099095 7f7ecea006c0 Delete type=3 #103
2024/09/09-21:51:17.099204 7f7ecea006c0 Delete type=0 #105
2024/09/09-21:52:48.582588 7f7ecd6006c0 Level-0 table #111: started
2024/09/09-21:52:48.582673 7f7ecd6006c0 Level-0 table #111: 0 bytes OK
2024/09/09-21:52:48.589717 7f7ecd6006c0 Delete type=0 #109
2024/09/09-21:52:48.611309 7f7ecd6006c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.611384 7f7ecd6006c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/protection/000211.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000216

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/09/10-07:14:44.961549 7f7ecea006c0 Recovering log #214
2024/09/10-07:14:45.016222 7f7ecea006c0 Delete type=3 #212
2024/09/10-07:14:45.016606 7f7ecea006c0 Delete type=0 #214
2024/09/10-07:20:33.539100 7f7ecd6006c0 Level-0 table #219: started
2024/09/10-07:20:33.539159 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
2024/09/10-07:20:33.576585 7f7ecd6006c0 Delete type=0 #217
2024/09/10-07:20:33.678420 7f7ecd6006c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.678524 7f7ecd6006c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)

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/09/09-21:51:17.152829 7f7ed4e006c0 Recovering log #209
2024/09/09-21:51:17.163037 7f7ed4e006c0 Delete type=3 #207
2024/09/09-21:51:17.163143 7f7ed4e006c0 Delete type=0 #209
2024/09/09-21:52:48.611545 7f7ecd6006c0 Level-0 table #215: started
2024/09/09-21:52:48.611586 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
2024/09/09-21:52:48.617883 7f7ecd6006c0 Delete type=0 #213
2024/09/09-21:52:48.638938 7f7ecd6006c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.639004 7f7ecd6006c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/runes/000211.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000216

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/09/10-07:14:45.464393 7f7ecea006c0 Recovering log #214
2024/09/10-07:14:45.568041 7f7ecea006c0 Delete type=3 #212
2024/09/10-07:14:45.568192 7f7ecea006c0 Delete type=0 #214
2024/09/10-07:20:33.817119 7f7ecd6006c0 Level-0 table #219: started
2024/09/10-07:20:33.817259 7f7ecd6006c0 Level-0 table #219: 0 bytes OK
2024/09/10-07:20:33.853842 7f7ecd6006c0 Delete type=0 #217
2024/09/10-07:20:33.990487 7f7ecd6006c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.990597 7f7ecd6006c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)

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/09/09-21:51:17.266111 7f7ed4e006c0 Recovering log #209
2024/09/09-21:51:17.276764 7f7ed4e006c0 Delete type=3 #207
2024/09/09-21:51:17.276860 7f7ed4e006c0 Delete type=0 #209
2024/09/09-21:52:48.668305 7f7ecd6006c0 Level-0 table #215: started
2024/09/09-21:52:48.668347 7f7ecd6006c0 Level-0 table #215: 0 bytes OK
2024/09/09-21:52:48.674748 7f7ecd6006c0 Delete type=0 #213
2024/09/09-21:52:48.696639 7f7ecd6006c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.696713 7f7ecd6006c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/runes/MANIFEST-000216 Normal file

Binary file not shown.

BIN
packs/scenes/000127.ldb Normal file

Binary file not shown.

1
packs/scenes/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000132

8
packs/scenes/LOG Normal file
View File

@ -0,0 +1,8 @@
2024/09/10-07:14:45.696006 7f7ecf4006c0 Recovering log #130
2024/09/10-07:14:45.752701 7f7ecf4006c0 Delete type=3 #128
2024/09/10-07:14:45.752833 7f7ecf4006c0 Delete type=0 #130
2024/09/10-07:20:33.897005 7f7ecd6006c0 Level-0 table #135: started
2024/09/10-07:20:33.897068 7f7ecd6006c0 Level-0 table #135: 0 bytes OK
2024/09/10-07:20:33.928636 7f7ecd6006c0 Delete type=0 #133
2024/09/10-07:20:33.990553 7f7ecd6006c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.990640 7f7ecd6006c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)

8
packs/scenes/LOG.old Normal file
View File

@ -0,0 +1,8 @@
2024/09/09-21:51:17.296296 7f7ecea006c0 Recovering log #125
2024/09/09-21:51:17.307966 7f7ecea006c0 Delete type=3 #123
2024/09/09-21:51:17.308176 7f7ecea006c0 Delete type=0 #125
2024/09/09-21:52:48.682640 7f7ecd6006c0 Level-0 table #131: started
2024/09/09-21:52:48.682688 7f7ecd6006c0 Level-0 table #131: 0 bytes OK
2024/09/09-21:52:48.689372 7f7ecd6006c0 Delete type=0 #129
2024/09/09-21:52:48.696686 7f7ecd6006c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.696741 7f7ecd6006c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

View File

@ -0,0 +1 @@
MANIFEST-000124

View File

View File

@ -0,0 +1,8 @@
2024/09/10-07:14:44.824622 7f7ecf4006c0 Recovering log #122
2024/09/10-07:14:44.881625 7f7ecf4006c0 Delete type=3 #120
2024/09/10-07:14:44.881742 7f7ecf4006c0 Delete type=0 #122
2024/09/10-07:20:33.426241 7f7ecd6006c0 Level-0 table #127: started
2024/09/10-07:20:33.426287 7f7ecd6006c0 Level-0 table #127: 0 bytes OK
2024/09/10-07:20:33.462927 7f7ecd6006c0 Delete type=0 #125
2024/09/10-07:20:33.538838 7f7ecd6006c0 Manual compaction at level-0 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
2024/09/10-07:20:33.538919 7f7ecd6006c0 Manual compaction at level-1 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)

View File

@ -0,0 +1,8 @@
2024/09/09-21:51:17.124273 7f7ecea006c0 Recovering log #117
2024/09/09-21:51:17.134938 7f7ecea006c0 Delete type=3 #115
2024/09/09-21:51:17.135076 7f7ecea006c0 Delete type=0 #117
2024/09/09-21:52:48.604710 7f7ecd6006c0 Level-0 table #123: started
2024/09/09-21:52:48.604782 7f7ecd6006c0 Level-0 table #123: 0 bytes OK
2024/09/09-21:52:48.611122 7f7ecd6006c0 Delete type=0 #121
2024/09/09-21:52:48.611368 7f7ecd6006c0 Manual compaction at level-0 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
2024/09/09-21:52:48.611434 7f7ecd6006c0 Manual compaction at level-1 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/skills/000211.ldb Normal file

Binary file not shown.

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

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