Compare commits

...

9 Commits

201 changed files with 1000 additions and 1709 deletions

View File

@ -24,6 +24,7 @@ Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http:/
Barbarians of Lemuria, Mythic edition, est un jeu de Simon Washbourne
Auteur : Simon Washbourne.
## Crédits de la version française
Barbarians of Lemuria, le jeu de rôle de Sword & Sorcery, est une publication des éditions Ludospherik, tous droits réservés.

View File

@ -1,3 +1,9 @@
Changes :
# v11.1.2
- Ajout des traductions manquantes en anglais
# v11.1.1
- Re-organisation des compendiums + ajouts de nouveaux equipements
@ -11,11 +17,11 @@
- Correction sur l'encaissement sans armure
- Ajout d'une note d'explication sur l'initiative
# v11.0.8
- Correction sur les malus de bouclier (blocage)
- Corrrection sur le malus d'init des boucliers qui était mal affiché dans la fiche d'item
# v10.4.0
- Ajout de la gestion d'effets

View File

@ -168,6 +168,9 @@
"BOL.ui.initMalus": "Init malus",
"BOL.ui.isspecial": "Spécial ?",
"BOL.ui.createEquipment": "Create Equipment",
"BOL.ui.creature": "Creature",
"BOL.ui.undead": "Undead",
"BOL.ui.daemon": "Daemon",
"BOL.featureCategory.origins": "Origins",
"BOL.featureCategory.races": "Races",

View File

@ -2,6 +2,7 @@
"TYPES": {
"Actor": {
"character": "Personnage",
"encounter": "PNJ",
"npc": "PNJ",
"vehicle": "Véhicule"
},
@ -139,6 +140,12 @@
"BOL.ui.registerInit": "Enregistrer comme Init. de combat",
"BOL.ui.initMalus": "Malus d'initiative",
"BOL.ui.magicnewrules": "Règles supplémentaires (cf. supplément fan-made Sorcellerie!)",
"BOL.ui.other":"Autre",
"BOL.ui.career":"Carrière",
"BOL.ui.boon":"Avantage",
"BOL.ui.flaw":"Désanvatage",
"BOL.ui.cost":"Cout XP",
"BOL.ui.date":"Date",
"BOL.ui.isSorcerer": "Carrière de Sorcier ?",
"BOL.ui.isAlchemist": "Carrière d'Alchimiste ?",
@ -201,7 +208,9 @@
"BOL.ui.crewDamage": "D.équipage",
"BOL.ui.fireDamage": "Feu ?",
"BOL.ui.weaponbonus": "Cette arme bénéficie déja d'un Dé de Bonus (Arme Favorite prise en compte, par exemple)",
"BOL.ui.creature": "Creature",
"BOL.ui.creature": "Créature",
"BOL.ui.undead": "Mort vivant",
"BOL.ui.daemon": "Démon",
"BOL.ui.rabble": "Piétaille",
"BOL.ui.tough": "Coriace",
"BOL.ui.villain": "Rival",
@ -251,6 +260,7 @@
"BOL.featureSubtypes.effects": "Effets",
"BOL.featureSubtypes.boleffect": "Effet",
"BOL.featureSubtypes.horoscope": "Horoscope",
"BOL.featureSubtypes.xplog": "Log d'XP",
"BOL.fightOptionTypes.armor": "Attaque au défaut d'armure",
"BOL.fightOptionTypes.intrepid": "Attaque intrépide",
@ -581,6 +591,8 @@
"BOL.ui.biosigns": "Signes distinctifs",
"BOL.ui.biodescription": "Description",
"BOL.ui.bionotes": "Notes",
"BOL.ui.xplog":"Journal d'XP",
"BOL.ui.value":"Valeur",
"BOL.chat.welcome1": "Bienvenue dans Barbarians of Lemuria (Ludospherik version)",
"BOL.chat.welcome2": "Les livres nécessaires pour jouer sont disponibles sur le site de <a href='http://www.ludospherik.fr/content/14-barbarians-of-lemuria'>l'éditeur Ludospherik.</a>",
@ -589,6 +601,10 @@
"BOL.chat.welcome5": "Consulter l'aide en ligne pour plus d'informations : @UUID[Compendium.bol.aides-de-jeu.97rugQOtiwt8zPfQ]{Aide du Jeu}.",
"BOL.chat.welcome6": "Bon jeu en Lemurie !",
"BOL.chat.nodamage": "Ne pas appliquer les dommages",
"BOL.chat.pcwarning": "Attention ! Aucun personnage n'est relié au joueur !",
"BOL.chat.pcwarningmsg": "<b>ATTENTION</b> Le joueur n'est relié à aucun personnage !",
"BOL.chat.pcnotlinked": "Le token du personnage joueur n'est pas relié à l'acteur",
"BOL.chat.pcnotlinkedmsg": "<b>ATTENTION</b> Le token du personnage joueur n'est pas relié à l'acteur !",
"BOL.settings.rollArmor": "Effectuer des jets pour les armures",
"BOL.settings.rollArmorTooltip": "Effectue un jet de dés pour les armures (valeur fixe si désactivé)",
@ -607,5 +623,8 @@
"BOL.settings.defaultLogoActorSheetPath" : "Chemin du logo des fiches de perso",
"BOL.settings.defaultLogoPathActorSheetTooltip": "Vous pouvez changer le logo BoL des fiches de perso, pour jouer dans un autre univers (idéalement 346 x 200, défaut : /systems/bol/ui/logo.webp)",
"BOL.settings.defaultLogoTopLeftPath" : "Chemin du logo haut gauche",
"BOL.settings.defaultLogoTopLeftPathTooltip": "Vous pouvez changer le logo BoL en haut à gauche de chaque écran (idéalement 718 x 416, défaut : /systems/bol/ui/logo2.webp)"
"BOL.settings.defaultLogoTopLeftPathTooltip": "Vous pouvez changer le logo BoL en haut à gauche de chaque écran (idéalement 718 x 416, défaut : /systems/bol/ui/logo2.webp)",
"EFFECT.StatusProne": "A terre",
"EFFECT.StatusDead": "Mort"
}

View File

@ -9,7 +9,7 @@ export class BoLActorSheet extends ActorSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["bol", "sheet", "actor"],
template: "systems/bol/templates/actor/actor-sheet.hbs",
width: 860,
@ -27,7 +27,7 @@ export class BoLActorSheet extends ActorSheet {
function onLoad() {
let logoSheet = BoLUtility.getLogoActorSheet()
$(".bol-actor-form").css("backgroundImage",`url(${logoSheet})`)
$(".bol-actor-form").css("backgroundImage", `url(${logoSheet})`)
}
// Setup everything onload
$(function () { onLoad(); });
@ -122,8 +122,8 @@ export class BoLActorSheet extends ActorSheet {
/** @override */
async getData(options) {
const data = super.getData(options)
const actorData = duplicate(data)
let formData = duplicate(data)
const actorData = foundry.utils.duplicate(data)
let formData = foundry.utils.duplicate(data)
formData.config = game.bol.config
formData.data = actorData
@ -147,6 +147,7 @@ export class BoLActorSheet extends ActorSheet {
formData.fightoptions = this.actor.fightoptions
formData.ammos = this.actor.ammos
formData.misc = this.actor.misc
formData.xplog = this.actor.xplog
formData.combat = this.actor.buildCombat()
formData.initiativeRank = this.actor.getInitiativeRank()
//formData.combatCreature = this.actor.buildCombatCreature()
@ -155,12 +156,13 @@ export class BoLActorSheet extends ActorSheet {
formData.options = this.options
formData.owner = this.document.isOwner
formData.editScore = this.options.editScore
formData.useBougette = (this.actor.type == "character" && BoLUtility.getUseBougette()) || false
formData.useBougette = (this.actor.type == "character" && BoLUtility.getUseBougette()) || false
formData.bougette = this.actor.getBougette()
formData.charType = this.actor.getCharType()
formData.villainy = this.actor.getVillainy()
formData.biography = await TextEditor.enrichHTML(this.object.system.details?.biography || "", {async: true})
formData.notes = await TextEditor.enrichHTML(this.object.system.details.notes || "", {async: true})
formData.villainy = this.actor.getVillainy()
formData.isUndead = this.actor.isUndead()
formData.biography = await TextEditor.enrichHTML(this.object.system.details?.biography || "", { async: true })
formData.notes = await TextEditor.enrichHTML(this.object.system.details.notes || "", { async: true })
formData.isSorcerer = this.actor.isSorcerer()
formData.isAlchemist = this.actor.isAlchemist()
formData.isAstrologer = this.actor.isAstrologer()
@ -186,7 +188,7 @@ export class BoLActorSheet extends ActorSheet {
// Get the type of item to create.
const type = header.dataset.type;
// Grab any data associated with this control.
const data = duplicate(header.dataset);
const data = foundry.utils.duplicate(header.dataset);
// Initialize a default name.
const name = `New ${type.capitalize()}`;
// Prepare the item object.
@ -248,22 +250,22 @@ export class BoLActorSheet extends ActorSheet {
case "attributexp":
this.actor.incAttributeXP(dataset.key)
break;
case "bougette":
this.actor.rollBougette()
break;
case "careerxp":
this.actor.incCareerXP( li.data("item-id"))
this.actor.incCareerXP(li.data("item-id"))
break;
case "horoscope-minor":
BoLRoll.horoscopeCheck(this.actor, event, "minor")
break
case "horoscope-major":
BoLRoll.horoscopeCheck(this.actor, event, "major")
break
break
case "horoscope-major-group":
BoLRoll.horoscopeCheck(this.actor, event, "majorgroup")
break
break
case "bougette":
this.actor.rollBougette()
break;
default: break;
}
}

View File

@ -38,10 +38,7 @@ export class BoLActor extends Actor {
if (this.type === 'character') {
return true
}
if (this.type === 'encounter' && this.chartype == "adversary") {
return true
}
return false
return (this.type === 'encounter' && this.chartype == "adversary")
}
/* -------------------------------------------- */
@ -54,10 +51,10 @@ export class BoLActor extends Actor {
/* -------------------------------------------- */
getVillainy() {
if (this.type === 'encounter' && this.chartype == "adversary") {
return true
}
return false
return (this.type === 'encounter' && this.chartype == "adversary")
}
isUndead() {
return (this.type == "encounter" && this.system.isundead)
}
/* -------------------------------------------- */
getInitiativeMalus() {
@ -69,7 +66,7 @@ export class BoLActor extends Actor {
/* -------------------------------------------- */
getBougette() {
if (this.type == "character") {
let b = duplicate(this.system.bougette)
let b = foundry.utils.duplicate(this.system.bougette)
b.label = game.i18n.localize(game.bol.config.bougetteState[String(this.system.bougette.value)])
b.diceImg = "icons/dice/" + game.bol.config.bougetteDice[String(this.system.bougette.value)] + "black.svg"
return b
@ -80,7 +77,7 @@ export class BoLActor extends Actor {
/* -------------------------------------------- */
async rollBougette() {
if (this.type == "character") {
let attribute = duplicate(this.system.attributes.vigor)
let attribute = foundry.utils.duplicate(this.system.attributes.vigor)
let rollData = BoLRoll.getCommonRollData(this, "bougette", attribute, undefined)
rollData.formula = game.bol.config.bougetteDice[String(this.system.bougette.value)]
let r = new BoLDefaultRoll(rollData)
@ -91,7 +88,7 @@ export class BoLActor extends Actor {
/* -------------------------------------------- */
decBougette() {
if (this.type == "character") {
let bougette = duplicate(this.system.bougette)
let bougette = foundry.utils.duplicate(this.system.bougette)
bougette.value = Math.max(Number(bougette.value) - 1, 0)
this.update({ 'system.bougette': bougette })
}
@ -145,7 +142,7 @@ export class BoLActor extends Actor {
}
}
get attributes() {
let attrList = duplicate(Object.values(this.system.attributes))
let attrList = foundry.utils.duplicate(Object.values(this.system.attributes))
this.addEffectModifiers(attrList, "system.attributes.")
return attrList
}
@ -199,21 +196,40 @@ export class BoLActor extends Actor {
getActiveFightOption() {
let it = this.items.find(i => i.type === "feature" && i.system.subtype === "fightoption" && i.system.properties.activated)
if (it) {
return duplicate(it)
return foundry.utils.duplicate(it)
}
return undefined
}
/* -------------------------------------------- */
addXPLog(type, name, cost, value) {
let xplog = {
name: "XP : "+game.i18n.localize(type), type: "feature",
img: "icons/magic/symbols/chevron-elipse-circle-blue.webp",
system: {
subtype: "xplog", properties: {
xptype: type,
xpdate: new Date().toLocaleDateString(),
xpname: name,
xpcost: cost,
xpvalue: value
}
}
}
this.createEmbeddedDocuments('Item', [xplog])
}
/* -------------------------------------------- */
incAttributeXP(key) {
let attr = duplicate(this.system.attributes[key])
let attr = foundry.utils.duplicate(this.system.attributes[key])
if (attr) {
let nextXP = (attr.value == -1) ? 2 : attr.value + (attr.value + 1)
let xp = duplicate(this.system.xp)
let xp = foundry.utils.duplicate(this.system.xp)
if (xp.total - xp.spent >= nextXP) {
attr.value += 1
xp.spent += nextXP
this.update({ [`system.attributes.${key}`]: attr, [`system.xp`]: xp })
this.addXPLog("attribute", key, nextXP, attr.value)
} else {
ui.notifications.warn("Pas assez de points d'expérience !")
}
@ -222,14 +238,15 @@ export class BoLActor extends Actor {
/* -------------------------------------------- */
incAptitudeXP(key) {
let apt = duplicate(this.system.aptitudes[key])
let apt = foundry.utils.duplicate(this.system.aptitudes[key])
if (apt) {
let nextXP = (apt.value == -1) ? 1 : apt.value + 2
let xp = duplicate(this.system.xp)
let xp = foundry.utils.duplicate(this.system.xp)
if (xp.total - xp.spent >= nextXP) {
apt.value += 1
xp.spent += nextXP
this.update({ [`system.aptitudes.${key}`]: apt, [`system.xp`]: xp })
this.addXPLog("aptitude", key, nextXP, apt.value)
} else {
ui.notifications.warn("Pas assez de points d'expérience !")
}
@ -239,13 +256,14 @@ export class BoLActor extends Actor {
incCareerXP(itemId) {
let career = this.items.get(itemId)
if (career) {
career = duplicate(career)
career = foundry.utils.duplicate(career)
let nextXP = career.system.rank + 1
let xp = duplicate(this.system.xp)
let xp = foundry.utils.duplicate(this.system.xp)
if (xp.total - xp.spent >= nextXP) {
xp.spent += nextXP
this.update({ [`system.xp`]: xp })
this.updateEmbeddedDocuments('Item', [{ _id: career._id, 'system.rank': career.system.rank + 1 }])
this.addXPLog("career", career.name, nextXP, career.system.rank+1)
} else {
ui.notifications.warn("Pas assez de points d'expérience !")
}
@ -259,7 +277,7 @@ export class BoLActor extends Actor {
let updates = []
if (fightOption) {
fightOption = duplicate(fightOption)
fightOption = foundry.utils.duplicate(fightOption)
if (fightOption.system.properties.activated) {
state = false
} else {
@ -298,17 +316,20 @@ export class BoLActor extends Actor {
get boleffects() {
return this.items.filter(i => i.type === "feature" && i.system.subtype === "boleffect")
}
get xplog() {
return this.items.filter(i => i.type === "feature" && i.system.subtype === "xplog")
}
get horoscopes() {
return this.items.filter(i => i.type === "feature" && i.system.subtype === "horoscope")
}
get boons() {
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "boon") || []);
return foundry.utils.duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "boon") || []);
}
get flaws() {
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw") || []);
return foundry.utils.duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw") || []);
}
get careers() {
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "career") || [])
return foundry.utils.duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "career") || [])
}
get origins() {
return this.items.filter(i => i.type === "feature" && i.system.subtype === "origin");
@ -390,31 +411,23 @@ export class BoLActor extends Actor {
get bonusBoons() {
let boons = this.items.filter(i => i.type === "feature" && i.system.subtype === "boon" && i.system.properties.isbonusdice)
return duplicate(boons || [])
return foundry.utils.duplicate(boons || [])
}
get malusFlaws() {
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw" && i.system.properties.ismalusdice) || []);
return foundry.utils.duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw" && i.system.properties.ismalusdice) || []);
}
isSorcerer() {
if (this.careers.find(item => item.system.properties.sorcerer == true))
return true
return false
return (this.careers.find(item => item.system.properties.sorcerer ))
}
isAlchemist() {
if (this.careers.find(item => item.system.properties.alchemist == true))
return true
return false
return (this.careers.find(item => item.system.properties.alchemist))
}
isAstrologer() {
if (this.careers.find(item => item.system.properties.astrologer == true))
return true
return false
return (this.careers.find(item => item.system.properties.astrologer))
}
isPriest() {
if (this.careers.find(item => item.system.properties.priest == true))
return true
return false
return (this.careers.find(item => item.system.properties.priest))
}
/*-------------------------------------------- */
@ -484,7 +497,7 @@ export class BoLActor extends Actor {
/*-------------------------------------------- */
spentAstrologyPoints(points) {
let astrology = duplicate(this.system.resources.astrologypoints)
let astrology = foundry.utils.duplicate(this.system.resources.astrologypoints)
astrology.value -= points
astrology.value = Math.max(astrology.value, 0)
this.update({ 'system.resources.astrologypoints': astrology })
@ -535,8 +548,8 @@ export class BoLActor extends Actor {
rollData.horoscopeName = actorHoroscope.name
}
if (rollData.horoscopeType == "majorgroup") {
let rID = randomID(16)
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
let rID = foundry.utils.randomID(16)
let horoscopes = foundry.utils.duplicate(game.settings.get("bol", "horoscope-group"))
horoscopes[rID] = {
id: rID,
name: game.i18n.localize("BOL.ui.groupHoroscope") + this.name,
@ -568,7 +581,7 @@ export class BoLActor extends Actor {
async spendAlchemyPoint(alchemyId, pcCost) {
let alchemy = this.items.get(alchemyId)
if (alchemy) {
pcCost = Number(pcCost) ?? 0
pcCost = Number(pcCost) || 0
if (this.system.resources.alchemypoints.value >= pcCost) {
let newPC = this.system.resources.alchemypoints.value - pcCost
newPC = (newPC < 0) ? 0 : newPC
@ -582,7 +595,7 @@ export class BoLActor extends Actor {
}
/*-------------------------------------------- */
getAstrologerBonus() {
let astrologer = this.careers.find(item => item.system.properties.astrologer == true)
let astrologer = this.careers.find(item => item.system.properties.astrologer)
if (astrologer) {
return astrologer.system.rank
}
@ -590,7 +603,7 @@ export class BoLActor extends Actor {
}
/*-------------------------------------------- */
getAlchemistBonus() {
let sorcerer = this.careers.find(item => item.system.properties.alchemist == true)
let sorcerer = this.careers.find(item => item.system.properties.alchemist)
if (sorcerer) {
return sorcerer.system.rank
}
@ -598,7 +611,7 @@ export class BoLActor extends Actor {
}
/*-------------------------------------------- */
getSorcererBonus() {
let sorcerer = this.careers.find(item => item.system.properties.sorcerer == true)
let sorcerer = this.careers.find(item => item.system.properties.sorcerer )
if (sorcerer) {
return sorcerer.system.rank
}
@ -629,7 +642,7 @@ export class BoLActor extends Actor {
resources['power'] = this.system.resources.power
}
if (this.system.chartype == 'adversary') {
resources['hero'] = duplicate(this.system.resources.hero)
resources['hero'] = foundry.utils.duplicate(this.system.resources.hero)
resources['hero'].label = "BOL.resources.villainy"
}
} else {
@ -775,17 +788,17 @@ export class BoLActor extends Actor {
let lastHP = await this.getFlag("world", hpID)
if (lastHP != this.system.resources.hp.value && game.user.isGM) { // Only GM sends this
await this.setFlag("world", hpID, this.system.resources.hp.value)
let prone = this.effects.find(ef => ef.label == "EFFECT.StatusProne")
let dead = this.effects.find(ef => ef.label == "EFFECT.StatusDead")
let prone = this.effects.find(ef => ef.name == game.i18n.localize("EFFECT.StatusProne"))
let dead = this.effects.find(ef => ef.name == game.i18n.localize("EFFECT.StatusDead"))
if (this.system.resources.hp.value <= 0) {
if (!prone) {
await this.createEmbeddedDocuments("ActiveEffect", [
{ label: 'EFFECT.StatusProne', icon: 'icons/svg/falling.svg', flags: { core: { statusId: 'prone' } } }
{ name: game.i18n.localize('EFFECT.StatusProne'), icon: 'icons/svg/falling.svg', statuses: 'prone' }
])
}
if (this.system.resources.hp.value < -5 && !dead) {
await this.createEmbeddedDocuments("ActiveEffect", [
{ label: 'EFFECT.StatusDead', icon: 'icons/svg/skull.svg', flags: { core: { statusId: 'dead' } } }
{ name: game.i18n.localize('EFFECT.StatusDead'), icon: 'icons/svg/skull.svg', statuses: 'dead' }
])
}
ChatMessage.create({
@ -812,7 +825,7 @@ export class BoLActor extends Actor {
/*-------------------------------------------- */
storeVitaliteCombat() {
this.setFlag("world", "vitalite-before-combat", duplicate(this.system.resources.hp))
this.setFlag("world", "vitalite-before-combat", foundry.utils.duplicate(this.system.resources.hp))
}
/*-------------------------------------------- */
async displayRecuperation() {
@ -836,7 +849,7 @@ export class BoLActor extends Actor {
}
/*-------------------------------------------- */
async applyRecuperation(recupHP) {
let hp = duplicate(this.system.resources.hp)
let hp = foundry.utils.duplicate(this.system.resources.hp)
//console.log("RECUP !!!!", hp, recupHP)
hp.value += Number(recupHP)
hp.value = Math.min(hp.value, hp.max)
@ -864,10 +877,7 @@ export class BoLActor extends Actor {
checkNumeric(myObject) {
if (myObject) {
for (let key in myObject) {
if (myObject[key].value === null) {
myObject[key].value = 0
}
if (myObject[key].value === NaN) {
if (myObject[key].value === null || isNaN(myObject[key].value)) {
myObject[key].value = 0
}
}
@ -889,7 +899,7 @@ export class BoLActor extends Actor {
}
/*-------------------------------------------- */
getInitiativeRank(rollData = undefined, isCombat = false, combatData) {
getInitiativeRank(rollData = undefined, isCombat = false, combatData = undefined) {
let fvttInit = 4 // Pietaille par defaut
if (this.type == 'character') {
fvttInit = 5
@ -988,7 +998,7 @@ export class BoLActor extends Actor {
/* -------------------------------------------- */
rollProtection(itemId) {
let armor = duplicate(this.items.get(itemId))
let armor = foundry.utils.duplicate(this.items.get(itemId))
if (armor) {
let armorFormula = "max(" + armor.system.properties.soak.formula + ", 0)"
let rollArmor = new Roll(armorFormula)
@ -998,9 +1008,9 @@ export class BoLActor extends Actor {
/* -------------------------------------------- */
rollWeaponDamage(itemId) {
let weapon = duplicate(this.items.get(itemId))
let weapon = foundry.utils.duplicate(this.items.get(itemId))
if (weapon) {
let r = new BoLDefaultRoll({ id: randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actorId: this.id, actor: this })
let r = new BoLDefaultRoll({ id: foundry.utils.randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actorId: this.id, actor: this })
r.setSuccess(true)
r.rollDamage()
}
@ -1010,7 +1020,7 @@ export class BoLActor extends Actor {
toggleEquipItem(item) {
const equipable = item.system.properties.equipable;
if (equipable) {
let itemData = duplicate(item);
let itemData = foundry.utils.duplicate(item);
itemData.system.worn = !itemData.system.worn;
return item.update(itemData);
}

View File

@ -9,7 +9,7 @@ export class BoLVehicleSheet extends ActorSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["bol", "sheet", "actor"],
template: "systems/bol/templates/actor/vehicle-sheet.hbs",
width: 860,
@ -116,13 +116,12 @@ export class BoLVehicleSheet extends ActorSheet {
/** @override */
async getData(options) {
const data = super.getData(options)
const actorData = duplicate(data)
let formData = duplicate(data)
let formData = foundry.utils.duplicate(data)
formData.config = game.bol.config
formData.name = this.actor.name
formData.img = this.actor.img
formData.system = duplicate(this.actor.system)
formData.system = foundry.utils.duplicate(this.actor.system)
formData.weapons = this.actor.vehicleWeapons
formData.isGM = game.user.isGM
formData.options = this.options
@ -148,7 +147,7 @@ export class BoLVehicleSheet extends ActorSheet {
// Get the type of item to create.
const type = header.dataset.type;
// Grab any data associated with this control.
const data = duplicate(header.dataset);
const data = foundry.utils.duplicate(header.dataset);
// Initialize a default name.
const name = `New ${type.capitalize()}`;
// Prepare the item object.

View File

@ -14,9 +14,8 @@ import { BoLUtility } from "./system/bol-utility.js"
import { BoLCombatManager } from "./system/bol-combat.js"
import { BoLTokenHud } from "./system/bol-action-hud.js"
import { BoLHotbar } from "./system/bol-hotbar.js"
import { BoLAdventureGenerator } from "./system/bol-adventure-generator.js"
import { BoLCommands} from "./system/bol-commands.js"
import { BoLCharacterSummary} from "./system/bol-character-summary.js"
import { BoLCommands } from "./system/bol-commands.js"
import { BoLRoll } from "./controllers/bol-rolls.js"
/* -------------------------------------------- */
Hooks.once('init', async function () {
@ -25,10 +24,12 @@ Hooks.once('init', async function () {
BoLActor,
BoLItem,
BoLHotbar,
BoLRoll,
BoLUtility,
macros: Macros,
config: BOL
};
// Game socket
game.socket.on("system.bol", sockmsg => {
BoLUtility.onSocketMessage(sockmsg);
@ -62,8 +63,7 @@ Hooks.once('init', async function () {
BoLTokenHud.init()
BoLHotbar.init()
BoLCommands.init()
BoLAdventureGenerator.init()
// Preload Handlebars Templates
await preloadHandlebarsTemplates();
@ -75,31 +75,6 @@ Hooks.once('init', async function () {
});
/* -------------------------------------------- */
// 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)
}
}
/* -------------------------------------------- */
function welcomeMessage() {
@ -108,24 +83,44 @@ function welcomeMessage() {
whisper: [game.user.id],
content: `<div id="welcome-message-pegasus"><span class="rdd-roll-part">
<strong>` + game.i18n.localize("BOL.chat.welcome1") + `</strong><p>` +
game.i18n.localize("BOL.chat.welcome2") + "<p>" +
game.i18n.localize("BOL.chat.welcome3") + "<p>" +
game.i18n.localize("BOL.chat.welcome4") + "</p>" +
game.i18n.localize("BOL.chat.welcome5") + "<br>" +
game.i18n.localize("BOL.chat.welcome6")
} )
game.i18n.localize("BOL.chat.welcome2") + "<p>" +
game.i18n.localize("BOL.chat.welcome3") + "<p>" +
game.i18n.localize("BOL.chat.welcome4") + "</p>" +
game.i18n.localize("BOL.chat.welcome5") + "<br>" +
game.i18n.localize("BOL.chat.welcome6")
})
}
/* -------------------------------------------- */
Hooks.once('ready', async function () {
BoLUtility.ready()
BoLCharacterSummary.ready()
registerUsageCount(game.system.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.")
)
welcomeMessage()
// User warning
if (!game.user.isGM && game.user.character == undefined) {
ui.notifications.info(game.i18n.localize("BOL.chat.pcwarning"));
ChatMessage.create({
content: game.i18n.localize("BOL.chat.pcwarningmsg") + game.user.name,
user: game.user._id
});
}
if (!game.user.isGM && game.user.character && !game.user.character.prototypeToken.actorLink) {
ui.notifications.info(game.i18n.localize("BOL.chat.pcnotlinked"));
ChatMessage.create({
content: game.i18n.localize("BOL.chat.pcnotlinkedmsg") + game.user.name,
user: game.user._id
});
}
})

View File

@ -19,11 +19,9 @@ export class BoLRoll {
static updateApplicableEffects(rollData) {
let appEffects = []
for (let effect of rollData.bolEffects) {
if (effect.system.properties.identifier == "always") {
appEffects.push(effect)
} else if (effect.system.properties.identifier.includes(rollData.attribute.key)) {
appEffects.push(effect)
} else if (rollData.aptitude && effect.system.properties.identifier.includes(rollData.aptitude.key)) {
if ( (effect.system.properties.identifier == "always") ||
(effect.system.properties.identifier.includes(rollData.attribute.key)) ||
(rollData.aptitude && effect.system.properties.identifier.includes(rollData.aptitude.key)) ){
appEffects.push(effect)
}
}
@ -62,10 +60,10 @@ export class BoLRoll {
armorInitMalus: actor.getArmorInitMalus(),
horoscopeBonusList: actor.getHoroscopesBonus(),
horoscopeMalusList: actor.getHoroscopesMalus(),
config: game.bol.config,
adv: "0",
mod: 0,
modRanged: 0,
aptValue: 0,
bolEffects: actor.boleffects,
horoscopeGroupList: this.buildHoroscopeGroupList()
}
@ -78,7 +76,7 @@ export class BoLRoll {
}
/* -------------------------------------------- */
static attributeCheck(actor, key, event, combatData) {
static attributeCheck(actor, key="vigor", event=undefined, combatData=undefined) {
let attribute = eval(`actor.system.attributes.${key}`)
@ -91,7 +89,7 @@ export class BoLRoll {
}
/* -------------------------------------------- */
static aptitudeCheck(actor, key, event, combatData) {
static aptitudeCheck(actor, key="init", event=undefined, combatData=undefined) {
let aptitude = eval(`actor.system.aptitudes.${key}`)
let attrKey = this.getDefaultAttribute(key)
@ -185,7 +183,7 @@ export class BoLRoll {
ui.notifications.warn("Unable to find weapon !")
return
}
weapon = duplicate(weapon)
weapon = foundry.utils.duplicate(weapon)
return this.weaponCheckWithWeapon(actor, weapon)
}
@ -197,7 +195,7 @@ export class BoLRoll {
ui.notifications.warn("Unable to find Alchemy !");
return;
}
alchemy = duplicate(alchemy)
alchemy = foundry.utils.duplicate(alchemy)
let alchemyData = alchemy.system
if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) {
ui.notifications.warn("Pas assez de Points de Création investis dans la Préparation !")
@ -271,7 +269,7 @@ export class BoLRoll {
ui.notifications.warn("Impossible de trouver ce sort !")
return
}
spell = duplicate(spell)
spell = foundry.utils.duplicate(spell)
return this.spellCheckWithSpell(actor, spell)
}
@ -404,7 +402,7 @@ export class BoLRoll {
html.find('#attr').change((event) => {
let attrKey = event.currentTarget.value
let actor = BoLUtility.getActorFromRollData(this.rollData)
this.rollData.attribute = duplicate(actor.system.attributes[attrKey])
this.rollData.attribute = foundry.utils.duplicate(actor.system.attributes[attrKey])
this.rollData.attrValue = actor.system.attributes[attrKey].value
this.rollData.bolApplicableEffects = this.updateApplicableEffects(this.rollData)
this.updateTotalDice()
@ -412,7 +410,7 @@ export class BoLRoll {
html.find('#apt').change((event) => {
let aptKey = event.currentTarget.value
let actor = BoLUtility.getActorFromRollData(this.rollData)
this.rollData.aptitude = duplicate(actor.system.aptitudes[aptKey])
this.rollData.aptitude = foundry.utils.duplicate(actor.system.aptitudes[aptKey])
this.rollData.aptValue = actor.system.aptitudes[aptKey].value
this.rollData.bolApplicableEffects = this.updateApplicableEffects(this.rollData)
this.updateTotalDice()
@ -455,7 +453,7 @@ export class BoLRoll {
html.find('#horoscope-bonus-applied').change((event) => {
this.rollData.selectedHoroscope = []
for (let option of event.currentTarget.selectedOptions) {
this.rollData.selectedHoroscope.push(duplicate(this.rollData.horoscopeBonusList[Number(option.index)]))
this.rollData.selectedHoroscope.push(foundry.utils.duplicate(this.rollData.horoscopeBonusList[Number(option.index)]))
}
let horoscopes = $('#horoscope-bonus-applied').val()
this.rollData.horoscopeBonus = (!horoscopes || horoscopes.length == 0) ? 0 : horoscopes.length
@ -465,7 +463,7 @@ export class BoLRoll {
html.find('#horoscope-malus-applied').change((event) => {
this.rollData.selectedHoroscope = []
for (let option of event.currentTarget.selectedOptions) {
this.rollData.selectedHoroscope.push(duplicate(this.rollData.horoscopeBonusList[Number(option.index)]))
this.rollData.selectedHoroscope.push(foundry.utils.duplicate(this.rollData.horoscopeBonusList[Number(option.index)]))
}
let horoscopes = $('#horoscope-malus-applied').val()
this.rollData.horoscopeMalus = (!horoscopes || horoscopes.length == 0) ? 0 : horoscopes.length
@ -533,7 +531,7 @@ export class BoLRoll {
rollData.careerBonus = rollData.careerBonus ?? 0
rollData.modRanged = rollData.modRanged ?? 0
rollData.mod = rollData.mod ?? 0
rollData.id = randomID(16)
rollData.id = foundry.utils.randomID(16)
rollData.weaponModifier = 0
rollData.attackBonusDice = false
rollData.armorMalus = 0
@ -619,16 +617,15 @@ export class BoLDefaultRoll {
if (this.rollData.applyId) {
BoLUtility.cleanupButtons(this.rollData.applyId)
}
this.rollData.optionsId = randomID(16)
this.rollData.applyId = randomID(16)
this.rollData.optionsId = foundry.utils.randomID(16)
this.rollData.applyId = foundry.utils.randomID(16)
}
/* -------------------------------------------- */
async roll() {
const r = new Roll(this.rollData.formula)
//console.log("Roll formula", this.rollData.formula)
await r.roll({ "async": false })
await r.roll()
let diceData = BoLUtility.getDiceData()
//console.log("DICEDATA", diceData)
@ -691,7 +688,7 @@ export class BoLDefaultRoll {
flavor: msgFlavor,
speaker: ChatMessage.getSpeaker({ actor: actor }),
})
this.rollData.roll = duplicate(this.rollData.roll) // Remove object, keep data (v111 ready)
this.rollData.roll = foundry.utils.duplicate(this.rollData.roll) // Remove object, keep data (v111 ready)
msg.setFlag("world", "bol-roll-data", this.rollData)
})
}
@ -744,7 +741,7 @@ export class BoLDefaultRoll {
speaker: ChatMessage.getSpeaker({ actor: actor }),
flags: { msgType: "default" }
})
this.rollData.damageRoll = duplicate(this.rollData.damageRoll)
this.rollData.damageRoll = foundry.utils.duplicate(this.rollData.damageRoll)
this.rollData.actor = undefined // Cleanup
msg.setFlag("world", "bol-roll-data", this.rollData)
})

View File

@ -8,7 +8,7 @@ export class BoLItemSheet extends ItemSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["bol", "sheet", "item"],
template: "systems/bol/templates/item/item-sheet.hbs",
width: 650,
@ -21,14 +21,16 @@ export class BoLItemSheet extends ItemSheet {
/** @override */
async getData(options) {
const data = super.getData(options)
let itemData = duplicate(data.document)
let itemData = foundry.utils.duplicate(data.document)
data.config = game.bol.config
data.item = itemData
data.category = itemData.system.category
data.isGM = game.user.isGM;
data.itemProperties = this.item.itemProperties;
data.description = await TextEditor.enrichHTML(this.object.system.description, { async: true })
if (data.document.actor) {
data.careers = data.document.actor.careers
}
// Dynamic default data fix/adapt
if (itemData.type == "item") {
if (!itemData.system.category) {
@ -76,7 +78,7 @@ export class BoLItemSheet extends ItemSheet {
/* -------------------------------------------- */
postItem() {
let chatData = duplicate(this.item)
let chatData = foundry.utils.duplicate(this.item)
if (this.actor) {
chatData.actor = { id: this.actor.id };
}

View File

@ -1,620 +0,0 @@
{
"titre1": [
{
"prefix": "la",
"name": "Prophétie"
},
{
"prefix": "les",
"name": "Grottes",
"isLieu": true
},
{
"prefix": "les",
"name": "Collines",
"isLieu": true
},
{
"prefix": "les",
"name": "Voleurs",
"isEnnemi": true,
"isCarriere": true
},
{
"prefix": "les",
"name": "Sorcier(s)",
"isEnnemi": true,
"isCarriere": true
},
{
"prefix": "la",
"name": "Bataille"
},
{
"prefix": "la",
"name": "Légende"
},
{
"prefix": "la",
"name": "Tour",
"isLieu": true
},
{
"prefix": "l'",
"name": "Ile",
"isLieu": true
},
{
"prefix": "les",
"name": "Pirates",
"isEnnemi": true,
"isCarriere": true
},
{
"prefix": "les",
"name": "Druide(s)",
"isEnnemi": true,
"isCarriere": true
},
{
"prefix": "le",
"name": "Navire",
"isCarriere": false
},
{
"prefix": "la",
"name": "Couronne",
"isObjet": true
},
{
"prefix": "la",
"name": "Cité",
"isLieu": true
},
{
"prefix": "le",
"name": "Désert",
"isLieu": true
},
{
"prefix": "les",
"name": "Bête(s)",
"isEnnemi": true,
"isLieu": false
},
{
"prefix": "les",
"name": "Démon(s)",
"isEnnemi": true,
"isLieu": false
},
{
"prefix": "le",
"name": "Trésor",
"isObjet": true
},
{
"prefix": "l'",
"name": "Epée",
"isObjet": true
},
{
"prefix": "l'",
"name": "Arène",
"isLieu": true
},
{
"prefix": "les",
"name": "Marais",
"isLieu": true
},
{
"prefix": "les",
"name": "Seigneur(s)",
"isEnnemi": true,
"isLieu": false
},
{
"prefix": "les",
"name": "Assassin(s)",
"isEnnemi": true,
"isCarriere": true
},
{
"prefix": "le",
"name": "Culte",
"isEnnemi": true,
"isCarriere": false
},
{
"prefix": "le",
"name": "Secret",
"isCarriere": false
},
{
"prefix": "le",
"name": "Palais",
"isLieu": true
},
{
"prefix": "la",
"name": "Mer",
"isLieu": true
},
{
"prefix": "les",
"name": "Barbares",
"isEnnemi": true,
"isCarriere": true
},
{
"prefix": "le",
"name": "Manuscrit",
"isObjet": true
},
{
"prefix": "les",
"name": "Plaines",
"isLieu": true
},
{
"prefix": "le",
"name": "Sang",
"isLieu": false
},
{
"prefix": "la",
"name": "Tombe",
"isLieu": true
},
{
"prefix": "la",
"name": "Forêt",
"isLieu": true
},
{
"prefix": "les",
"name": "Esclaves",
"isEnnemi": true,
"isCarriere": true
},
{
"prefix": "les",
"name": "Mendiant(s)",
"isEnnemi": true,
"isCarriere": true
},
{
"prefix": "les",
"name": "Montagnes",
"isCarriereLieu": true
}
],
"titre2": [
{
"prefix": "du",
"name": "mal"
},
{
"prefix": "et le",
"name": "Roi Maussade",
"isEnnemi": true
},
{
"prefix": "et la",
"name": "pestilence",
"isEnnemi": false
},
{
"prefix": "de",
"name": "Malakut",
"isLieu": true
},
{
"prefix": "d'",
"name": "Halakh",
"isLieu": true
},
{
"prefix": "d'",
"name": "Hyrdral",
"isLieu": true
},
{
"prefix": "des",
"name": "esprits abandonnés",
"isEnnemi": true
},
{
"prefix": "du",
"name": "chaos",
"isEnnemi": true
},
{
"prefix": "de la",
"name": "folie",
"isEnnemi": false
},
{
"prefix": "de",
"name": "Satarla",
"isLieu": true
},
{
"prefix": "d'",
"name": "Urceb",
"isLieu": true
},
{
"prefix": "des",
"name": "Terres Désolées",
"isLieu": true
},
{
"prefix": "de la",
"name": "mort",
"isLieu": false
},
{
"prefix": "des",
"name": "idoles impies",
"isObjet": true
},
{
"prefix": "des",
"name": "ténèbres",
"isObjet": false
},
{
"prefix": "de",
"name": "Parsool",
"isLieu": true
},
{
"prefix": "de",
"name": "Qiddesh",
"isLieu": true
},
{
"prefix": "de",
"name": "Kasht",
"isLieu": true
},
{
"prefix": "de la ",
"name": "falalité",
"isLieu": false
},
{
"prefix": "du",
"name": "Nécromant",
"isEnnemi": true
},
{
"prefix": "du",
"name": "Néant",
"isEnnemi": false
},
{
"prefix": "de",
"name": "Lysor",
"isLieu": true
},
{
"prefix": "d'",
"name": "Oosal",
"isLieu": true
},
{
"prefix": "de",
"name": "Thulé",
"isLieu": true
},
{
"prefix": "du",
"name": "désespoir",
"isLieu": false
},
{
"prefix": "du",
"name": "Dieu Bouffi",
"isEnnemi": true
},
{
"prefix": "du",
"name": "silence",
"isEnnemi": false
},
{
"prefix": "de",
"name": "Tyrus",
"isLieu": true
},
{
"prefix": "d'",
"name": "Ygddar",
"isLieu": true
},
{
"prefix": "de",
"name": "la Côte de Feu",
"isLieu": true
},
{
"prefix": "des",
"name": "ombres cruelles",
"isLieu": false
},
{
"prefix": "de la",
"name": "poussière écarlate",
"isLieu": false
},
{
"prefix": "du",
"name": "destin",
"isLieu": false
},
{
"prefix": "du",
"name": "Valgard",
"isLieu": true
},
{
"prefix": "de",
"name": "Qeb",
"isLieu": true
},
{
"prefix": "de",
"name": "la Mer Inconnue",
"isLieu": true
}
],
"mission": [
{
"name": "dattaquer un lieu."
},
{
"name": "de détruire un certain objet."
},
{
"name": "de kidnapper quelquun."
},
{
"name": "dobtenir une certaine chose."
},
{
"name": "dexplorer un lieu."
},
{
"name": "de sauver une personne."
},
{
"name": "déchapper à quelquun."
},
{
"name": "de fuir un lieu."
},
{
"name": "de trouver une personne."
},
{
"name": "de trouver un lieu."
},
{
"name": "de trouver chose."
},
{
"name": "de protéger une personne."
},
{
"name": "de protéger un lieu."
},
{
"name": "de protéger chose."
},
{
"name": "de dérober une certaine chose."
},
{
"name": "de tuer une personne."
},
{
"name": "de détruire une chose."
},
{
"name": "descorter une personne."
},
{
"name": "de transporter une chose."
}
],
"carriere": [
"Noble",
"Acrobate",
"Sorcier",
"Alchimiste",
"Esclave",
"Courtisane",
"Médecin",
"Marin",
"Érudit",
"Mendiant",
"Scribe",
"Poète",
"Forgeron",
"Prêtre",
"Danseur",
"Marchand",
"Pilote des airs",
"Fermier"
],
"lieux1": [
"Palais",
"Donjon",
"Ruines",
"Sanctuaire",
"Crypte",
"Forteresse",
"Tombeau",
"Grottes",
"Tour",
"Antre",
"Île",
"Montagne"
],
"lieux2": [
"de la mort.",
"de la destruction.",
"du désespoir.",
"des morts-vivants.",
"du sage.",
"de l'or.",
"de la tempête.",
"de la terreur.",
"descannibales.",
"du désespoir.",
"des Rois-Sorciers.",
"des âmes perdues."
],
"objets1": [
"Livre",
"Anneau",
"Coupe",
"Joyau",
"Casque",
"Parchemin",
"Couronne",
"Sceau",
"Cristal",
"Crâne",
"Épée",
"Bâton"
],
"objets2": [
"des sept sceaux.",
"de l'éternelle douleur.",
"du sang bouillonnant.",
"de la mort hideuse.",
"du pouvoir suprême.",
"du serpent sournois.",
"du plaisir infini.",
"de la richesse illusoire.",
"de la cruelle trahison.",
"du froid funeste.",
"des spectres inapaisés.",
"du mystère."
],
"motivation": [
"cest le genre de choses que fait Krongar.",
"sinon il finira en prison.",
"il est victime dun chantage.",
"il a trouvé une carte.",
"il a été maudit.",
"il a eu une vision (peut-être un soir de beuverie).",
"il a été engagé pour le faire.",
"il a surpris une conversation.",
"il a lu quelque chose dans un ancien manuscrit.",
"il est tombé accidentellement dans cette affaire.",
"il cherche à assouvir une vengeance.",
"il a ,été dupé."
],
"rival": [
"un poète obsédé.",
"un prince (esse) guerrier.",
"un ministre corrompu.",
"un sectateur fanatique.",
"un noble arrogant.",
"un étrange alchimiste.",
"un sorcier maléfique.",
"un druide cruel.",
"un marchand cupide.",
"un brigand sans foi ni loi.",
"un démon sanguinaire.",
"un fantôme errant."
],
"dieu": [
"Tharungozoth",
"Yrzlak",
"Dyr",
"Knothakon",
"Hadron",
"Shazzadion",
"Chiomalla",
"SaTel",
"Morgazzon",
"Hurm",
"Afyra",
"Grondil",
"Zaggath",
"Zalkyr",
"Fillana",
"Lilandra",
"Zylidith",
"Quathoomar",
"Iondal",
"Piandra",
"Nemmereth",
"Charkond",
"Karyzon",
"Zarymphyxos",
"Kryphondus"
],
"complique1": [
"cest toujours comme ça avec Krongar !",
"la situation réveille chez Krongar des peurs ancestrales.",
"un usurier et ses hommes de main veulent récupérer leur argent.",
"une grave épidémie ravage la région.",
"Krongar est traqué pour un crime passé.",
"les actions dun groupe de rebelles rendent la région peu sûre.",
"des hordes de guerriers envahissent la région pour la conquérir",
"un(e) ancien(ne) admirateur (trice) éconduit(e) cherche à se venger.",
"la loi locale est très sévère et interdit une chose nécessaire à laccomplissement de la mission.",
"un(e) admirateur (trice) inattendu(e) déclare son amour.",
"un rival qui fut défait autrefois réapparaît et met son grain de sel.",
"la folie de Morgazzon fait des ravages dans la région."
],
"obstacle": [
"dun ancien secret.",
"dun long voyage.",
"dune malédiction.",
"dun voleur rusé.",
"dune forte troupe de soldats.",
"dun énorme monstre.",
"dune horde de monstres.",
"dun manque de temps.",
"de gardes et de pièges magiques.",
"dune catastrophe naturelle sur le point de se produire.",
"dune énigme à résoudre.",
"dune bataille à gagner."
],
"retournement": [
"Lennemi est en fait Krongar lui-même, venu dune autre réalité !",
"Toute cette histoire était un piège machiavélique !",
"Lennemi est en fait un vieil ami ou un allié qui a comploté dans lombre !",
"Krongar est contraint de sassocier à un rival pour accomplir la mission !",
"Tout ce qui semblait ordinaire se révèle en fait surnaturel !",
"Lennemi est en fait le père, la mère, le frère ou la sœur de Krongar !",
"Une toute autre mission attend en fait notre héros !",
"Parfois, il ny a pas de retournement de situation !",
"i la mission est accomplie, cela entraînera de terribles répercussions !",
"Le destin offre à Krongar une chance daméliorer les choses, et il est renvoyé dans le temps au début de laventure. La saga recommence, mais cette fois sans retournement de situation !",
"Un ami ou un allié a trahi Krongar !",
"Les dieux sont furieux et lui imposent d'autres tâches"
],
"recompense": [
"Rien du tout ! On sest joué de lui !",
"Beaucoup moins quescompté.",
"Beaucoup moins quescompté, mais il gagne au moins la reconnaissance dune personne haut placée.",
"Beaucoup moins quescompté, mais il est marqué par les dieux (avantage).",
"La récompense escomptée.",
"La récompense escomptée, et il est marqué par les dieux (avantage).",
"La récompense escomptée, ainsi que la reconnaissance dune personne haut placée.",
"Plus quescompté.",
"Plus quescompté, ainsi que la reconnaissance dune personne haut placée.",
"Plus quescompté, et il est marqué par les dieux (avantage).",
"Plus quescompté, ainsi que la reconnaissance dune personne haut placée, et il est marqué par les dieux (avantage).",
"Une promotion... Longue vie au roi Krongar !"
]
}

View File

@ -33,9 +33,9 @@ export class BoLTokenHud {
let action = hudData.actionsList[actionIndex]
const actionItem = actor.items.get(action._id)
if (actionItem.system.subtype == "weapon") {
BoLRoll.weaponCheckWithWeapon(hudData.actor, duplicate(actionItem))
BoLRoll.weaponCheckWithWeapon(hudData.actor, foundry.utils.duplicate(actionItem))
} else if (actionItem.system.subtype == "fightoption") {
let chatData = duplicate(actionItem)
let chatData = foundry.utils.duplicate(actionItem)
if (actionItem.actor) {
chatData.actor = { id: actionItem.actor._id };
}

View File

@ -1,86 +0,0 @@
/* -------------------------------------------- */
import { BoLUtility } from "./bol-utility.js";
/* -------------------------------------------- */
export class BoLAdventureGenerator {
/* -------------------------------------------- */
static async init() {
this.adventureData = await fetchJsonWithTimeout("systems/bol/module/system/adventure_data.json")
}
/* -------------------------------------------- */
static async createAdventure() {
let roll1 = new Roll("1d" + this.adventureData.titre1.length).evaluate({ async: false })
let roll2 = new Roll("1d" + this.adventureData.titre2.length).evaluate({ async: false })
let p1 = this.adventureData.titre1[roll1.result - 1]
let p2 = this.adventureData.titre2[roll2.result - 1]
let story = {}
story.title = "Krongar et " + p1.prefix + " " + p1.name + " " + p2.prefix + " " + p2.name
let rollM = new Roll("1d" + this.adventureData.mission.length).evaluate({ async: false })
story.mission = "La mission de Krongar est de " + this.adventureData.mission[rollM.result - 1].name
if (!p1.isCarriere && !p2.isCarriere) {
let rollC = new Roll("1d" + this.adventureData.carriere.length).evaluate({ async: false })
story.carriere = "Une carrière : " + this.adventureData.carriere[rollC.result - 1]
}
if (!p1.isLieu && !p2.isLieu) {
let rollL1 = new Roll("1d" + this.adventureData.lieux1.length).evaluate({ async: false })
let rollL2 = new Roll("1d" + this.adventureData.lieux2.length).evaluate({ async: false })
story.lieu = "Un lieu : " + this.adventureData.lieux1[rollL1.result - 1] + " " + this.adventureData.lieux2[rollL2.result - 1]
}
if (!p1.isObjet && !p2.isObjet) {
let rollO1 = new Roll("1d" + this.adventureData.objets1.length).evaluate({ async: false })
let rollO2 = new Roll("1d" + this.adventureData.objets2.length).evaluate({ async: false })
story.objet = "Un objet : " + this.adventureData.objets1[rollO1.result - 1] + " " + this.adventureData.objets2[rollO2.result - 1]
}
let rollMOT = new Roll("1d" + this.adventureData.motivation.length).evaluate({ async: false })
story.motivation = "Krongar entreprend cette mission parce que " + this.adventureData.motivation[rollMOT.result - 1]
if (!p1.isEnnemi && !p2.isEnnemi) {
let rollE = new Roll("1d" + this.adventureData.rival.length).evaluate({ async: false })
story.rival = "Un rival : " + this.adventureData.rival[rollE.result - 1]
}
let rollDieu = new Roll("1d6").evaluate({ async: false })
if (rollDieu.result == 6) {
rollDieu = new Roll("1d" + this.adventureData.dieu.length).evaluate({ async: false })
story.dieu = "Un Dieu est impliqué : " + this.adventureData.dieu[rollDieu.result - 1]
}
let rollComp = new Roll("1d6").evaluate({ async: false })
if (rollComp.result >= 5) {
rollComp = new Roll("1d" + this.adventureData.complique1.length).evaluate({ async: false })
story.complication = "Une complication : " + this.adventureData.complique1[rollComp.result - 1]
}
let rollObs = new Roll("1d6").evaluate({ async: false })
if (rollObs.result >= 5) {
rollObs = new Roll("1d" + this.adventureData.obstacle.length).evaluate({ async: false })
story.obstacle = "Un obstacle : " + this.adventureData.obstacle[rollObs.result - 1]
}
let rollRet = new Roll("1d6").evaluate({ async: false })
if (rollRet.result == 6) {
rollRet = new Roll("1d" + this.adventureData.retournement.length).evaluate({ async: false })
story.retournement = "Un retournement : " + this.adventureData.retournement[rollRet.result - 1]
}
let rollRec = new Roll("1d" + this.adventureData.recompense.length).evaluate({ async: false })
story.recompense = "Pour sa peine, Krongar reçoit " + this.adventureData.recompense[rollRec.result - 1]
ChatMessage.create({
alias: this.name,
whisper: BoLUtility.getUsers(user => user.isGM),
content: await renderTemplate('systems/bol/templates/chat/chat-adventure-result.hbs',
{ name: "Aventure !", img: "icons/commodities/gems/gem-cluster-red.webp", story : story})
})
}
}

View File

@ -40,14 +40,14 @@ export class BoLCalendar extends Application {
constructor() {
super();
// position
this.calendarPos = duplicate(game.settings.get("bol", "calendar-pos"));
this.calendarPos = foundry.utils.duplicate(game.settings.get("bol", "calendar-pos"));
if (this.calendarPos == undefined || this.calendarPos.top == undefined) {
this.calendrierPos = BoLCalendar.createCalendarPos()
game.settings.set("bol", "calendar-pos", this.calendarPos)
}
// Calendar
this.calendar = duplicate(game.settings.get("bol", "calendar") ?? BoLCalendar.getCalendar(0));
this.calendar = foundry.utils.duplicate(game.settings.get("bol", "calendar") ?? BoLCalendar.getCalendar(0));
this.calendar.year = this.calendar.year || 900
this.calendar.month = 0
@ -58,7 +58,7 @@ export class BoLCalendar extends Application {
/* -------------------------------------------- */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
template: "systems/bol/templates/calendar-template.html",
popOut: false,
resizable: false
@ -95,11 +95,11 @@ export class BoLCalendar extends Application {
this.calendar.hour -= 24
await this.incrementDay()
}
game.settings.set("bol", "calendar", duplicate(this.calendar));
game.settings.set("bol", "calendar", foundry.utils.duplicate(this.calendar));
// Notification aux joueurs // TODO: replace with Hook on game settings update
game.socket.emit(SYSTEM_SOCKET_ID, {
msg: "msg_sync_time",
data: duplicate(this.calendrier)
data: foundry.utils.duplicate(this.calendrier)
});
}
@ -112,7 +112,7 @@ export class BoLCalendar extends Application {
/* -------------------------------------------- */
syncPlayerTime(calendrier) {
this.calendrier = duplicate(calendrier); // Local copy update
this.calendrier = foundry.utils.duplicate(calendrier); // Local copy update
this.updateDisplay();
}
@ -123,7 +123,7 @@ export class BoLCalendar extends Application {
}
this.calendrier.heureRdD = indexHeure;
this.calendrier.minutesRelative = 0;
game.settings.set(SYSTEM_RDD, "calendrier", duplicate(this.calendrier));
game.settings.set(SYSTEM_RDD, "calendrier", foundry.utils.duplicate(this.calendrier));
}
/* -------------------------------------------- */
@ -312,13 +312,13 @@ export class BoLCalendar extends Application {
this.calendrier.jour = Number(calendrierData.jourMois) - 1;
this.calendrier.moisRdD = RdDCalendrier.getChiffreFromSigne(calendrierData.moisKey);
this.calendrier.heureRdD = RdDCalendrier.getChiffreFromSigne(calendrierData.heureKey);
game.settings.set(SYSTEM_RDD, "calendrier", duplicate(this.calendrier));
game.settings.set(SYSTEM_RDD, "calendrier", foundry.utils.duplicate(this.calendrier));
await this.rebuildListeNombreAstral();
game.socket.emit(SYSTEM_SOCKET_ID, {
msg: "msg_sync_time",
data: duplicate(this.calendrier)
data: foundry.utils.duplicate(this.calendrier)
});
this.updateDisplay();
@ -326,7 +326,7 @@ export class BoLCalendar extends Application {
/* -------------------------------------------- */
async showCalendarEditor() {
let calendrierData = duplicate(this.fillCalendrierData());
let calendrierData = foundry.utils.duplicate(this.fillCalendrierData());
if (this.editeur == undefined) {
calendrierData.jourMoisOptions = RdDCalendrier.buildJoursMois();
calendrierData.heuresOptions = [0, 1];
@ -344,7 +344,7 @@ export class BoLCalendar extends Application {
/* -------------------------------------------- */
async showAstrologieEditor() {
let calendrierData = duplicate(this.fillCalendrierData());
let calendrierData = foundry.utils.duplicate(this.fillCalendrierData());
let astrologieArray = [];
this.listeNombreAstral = this.listeNombreAstral || [];
for (let astralData of this.listeNombreAstral) {
@ -353,7 +353,7 @@ export class BoLCalendar extends Application {
let actor = game.actors.get(vf.actorId);
vf.actorName = (actor) ? actor.name : "Inconnu";
}
astrologieArray.push(duplicate(astralData));
astrologieArray.push(foundry.utils.duplicate(astralData));
}
let heuresParActeur = {};
for (let actor of game.actors) {
@ -448,7 +448,7 @@ export class BoLCalendar extends Application {
game.system.rdd.calendrier.calendrierPos.top = yPos;
game.system.rdd.calendrier.calendrierPos.left = xPos;
if (game.user.isGM) {
game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos));
game.settings.set(SYSTEM_RDD, "calendrier-pos", foundry.utils.duplicate(game.system.rdd.calendrier.calendrierPos));
}
}
}
@ -456,7 +456,7 @@ export class BoLCalendar extends Application {
game.system.rdd.calendrier.calendrierPos.top = 200;
game.system.rdd.calendrier.calendrierPos.left = 200;
if (game.user.isGM) {
game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos));
game.settings.set(SYSTEM_RDD, "calendrier-pos", foundry.utils.duplicate(game.system.rdd.calendrier.calendrierPos));
}
this.setPos(game.system.rdd.calendrier.calendrierPos);
}

View File

@ -1,162 +0,0 @@
/* -------------------------------------------- */
import { BoLUtility } from "./bol-utility.js";
import { BoLRoll } from "../controllers/bol-rolls.js";
/* -------------------------------------------- */
export class BoLCharacterSummary extends Application {
/* -------------------------------------------- */
static displayPCSummary(){
game.bol.charSummary.render(true)
}
/* -------------------------------------------- */
updatePCSummary(){
if ( this.rendered) {
this.render(true)
}
}
/* -------------------------------------------- */
static createSummaryPos() {
return { top: 200, left: 200 };
}
/* -------------------------------------------- */
static ready() {
if ( !game.user.isGM ) { // Uniquement si GM
return
}
let charSummary = new BoLCharacterSummary()
game.bol.charSummary = charSummary
}
/* -------------------------------------------- */
constructor() {
super();
//game.settings.set("world", "character-summary-data", {npcList: [], x:0, y:0})
this.settings = game.settings.get("world", "character-summary-data")
}
/* -------------------------------------------- */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
template: "systems/bol/templates/apps/character-summary-template.html",
popOut: true,
resizable: true,
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
classes: ["bol", "dialog"], width: 820, height: 'fit-content'
})
}
/* -------------------------------------------- */
getData() {
let formData = super.getData();
formData.pcs = game.actors.filter( ac => ac.type == "character" && ac.hasPlayerOwner )
formData.npcs = []
let newList = []
let toUpdate = false
for( let actorId of this.settings.npcList ) {
let actor = game.actors.get(actorId)
if (actor) {
formData.npcs.push( actor )
newList.push(actorId)
} else {
toUpdate = true
}
}
formData.config = game.bol.config
formData.horoscopeGroupList = game.settings.get("bol", "horoscope-group")
if ( toUpdate ) {
this.settings.npcList = newList
//console.log("Going to update ...", this.settings)
game.settings.set("world", "character-summary-data", this.settings)
}
return formData
}
/* -------------------------------------------- */
updateNPC() {
game.settings.set("world", "character-summary-data", game.bol.charSummary.settings)
game.bol.charSummary.close()
setTimeout( function() { game.bol.charSummary.render(true)}, 500)
}
/* -------------------------------------------- */
async _onDrop(event) {
//console.log("Dragged data are : ", dragData)
let data = event.dataTransfer.getData('text/plain')
let dataItem = JSON.parse( data)
let actor = fromUuidSync(dataItem.uuid)
if (actor) {
game.bol.charSummary.settings.npcList.push( actor.id )
game.bol.charSummary.updateNPC()
} else {
ui.notifications.warn( game.i18n.localize("BOL.ui.noactorfound") )
}
}
/* -------------------------------------------- */
/** @override */
async activateListeners(html) {
super.activateListeners(html);
html.find('.actor-open').click((event) => {
const li = $(event.currentTarget).parents(".item")
const actor = game.actors.get(li.data("actor-id"))
actor.sheet.render(true)
})
html.find('.summary-roll').click((event) => {
const li = $(event.currentTarget).parents(".item")
const actor = game.actors.get(li.data("actor-id"))
let type = $(event.currentTarget).data("type")
let key = $(event.currentTarget).data("key")
if ( type == "attribute") {
BoLRoll.attributeCheck(actor, key, event)
} else if (type == "aptitude") {
BoLRoll.aptitudeCheck(actor, key, event)
}
})
html.find('.actor-delete').click(event => {
const li = $(event.currentTarget).parents(".item");
let actorId = li.data("actor-id")
let newList = game.bol.charSummary.settings.npcList.filter(id => id != actorId)
game.bol.charSummary.settings.npcList = newList
game.bol.charSummary.updateNPC()
})
html.find('#horoscope-group-edit-available').change(event => {
const horoId = $(event.currentTarget).data("horo-id")
let newValue = event.currentTarget.value
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
if ( horoId && horoscopes[horoId]) {
horoscopes[horoId].availableDice = Number(newValue)
if (newValue <= 0) {
horoscopes[horoId] = undefined
}
game.settings.set("bol", "horoscope-group", horoscopes)
setTimeout(function() { BoLUtility.updateSheets()}, 800 )
}
})
html.find('#horoscope-group-edit-max').change(event => {
const horoId = $(event.currentTarget).data("horo-id")
let newValue = event.currentTarget.value
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
if ( horoId && horoscopes[horoId]) {
horoscopes[horoId].maxDice = Number(newValue)
if (newValue <= 0) {
horoscopes[horoId] = undefined
}
game.settings.set("bol", "horoscope-group", horoscopes)
setTimeout(function() { BoLUtility.updateSheets()}, 800 )
}
})
}
}

View File

@ -1,6 +1,3 @@
/* -------------------------------------------- */
import { BoLAdventureGenerator } from "./bol-adventure-generator.js"
import { BoLCharacterSummary } from "./bol-character-summary.js"
/* -------------------------------------------- */
export class BoLCommands {
@ -8,8 +5,6 @@ export class BoLCommands {
static init() {
if (!game.bol.commands) {
const bolCommands = new BoLCommands()
bolCommands.registerCommand({ path: ["/adventure"], func: (content, msg, params) => BoLAdventureGenerator.createAdventure(), descr: "Nouvelle idée d'aventure!" });
bolCommands.registerCommand({ path: ["/pcview"], func: (content, msg, params) => BoLCharacterSummary.displayPCSummary(), descr: "Affiche la liste des PJs!" });
game.bol.commands = bolCommands
}
@ -88,7 +83,7 @@ export class BoLCommands {
console.log("===> Processing command")
let command = commandsTable[name];
path = path + name + " ";
if (command && command.subTable) {
if (command?.subTable) {
if (params[0]) {
return this._processCommand(command.subTable, params[0], params.slice(1), content, msg, path)
}
@ -97,9 +92,9 @@ export class BoLCommands {
return true;
}
}
if (command && command.func) {
if (command?.func) {
const result = command.func(content, msg, params);
if (result == false) {
if (!result) {
BoLCommands._chatAnswer(msg, command.descr);
}
return true;

View File

@ -136,6 +136,10 @@ export class BoLUtility {
this.successValue = Number(game.settings.get("bol", "dice-success-value"))
this.criticalSuccessValue = Number(game.settings.get("bol", "dice-critical-success-value"))
this.criticalFailureValue = Number(game.settings.get("bol", "dice-critical-failure-value"))
// Update the effect modifiers
game.bol.config.effectIdentifiers = foundry.utils.mergeObject(game.bol.config.effectIdentifiers, game.bol.config.attackAttributes)
game.bol.config.effectIdentifiers = foundry.utils.mergeObject(game.bol.config.effectIdentifiers, game.bol.config.aptitudes)
}
/* -------------------------------------------- */
@ -196,7 +200,7 @@ export class BoLUtility {
//$("#logo").attr("src", this.getLogoTopLeft() )
$("#logo").css("content", `url(${this.getLogoTopLeft()})`)
CONFIG.statusEffects = duplicate(game.bol.config.statusEffects)
CONFIG.statusEffects = foundry.utils.duplicate(game.bol.config.statusEffects)
}
/* -------------------------------------------- */
@ -311,7 +315,7 @@ export class BoLUtility {
/* -------------------------------------------- */
static blindMessageToGM(chatOptions) {
let chatGM = duplicate(chatOptions);
let chatGM = foundry.utils.duplicate(chatOptions);
chatGM.whisper = this.getUsers(user => user.isGM);
chatGM.content = "Blind message of " + game.user.name + "<br>" + chatOptions.content;
console.log("blindMessageToGM", chatGM);
@ -323,7 +327,7 @@ export class BoLUtility {
if (rollData.targetId) {
// Broadcast to GM or process it directly in case of GM defense
if (!game.user.isGM) {
game.socket.emit("system.bol", { name: "msg_attack_success", data: duplicate(rollData) })
game.socket.emit("system.bol", { name: "msg_attack_success", data: foundry.utils.duplicate(rollData) })
} else {
BoLUtility.processAttackSuccess(rollData)
}
@ -337,7 +341,7 @@ export class BoLUtility {
// If the user is the message author or the actor owner, proceed
const actor = game.actors.get(data.message.speaker.actor)
//console.log("FOUND 1!!! ", actor)
if (actor && actor.isOwner) return
if (actor?.isOwner) return
else if (game.user.isGM || data.author.id === game.user.id) return
const divButtons = chatCard.find('.actions-section')
@ -354,7 +358,7 @@ export class BoLUtility {
/* -------------------------------------------- */
static requestInitRoll(actorId, combatData) {
let actor = game.actors.get(actorId)
if (actor && actor.isOwner) {
if (actor?.isOwner) {
ui.notifications.info(game.i18n.localize("BOL.ui.warninitiative"))
BoLRoll.aptitudeCheck(actor, "init", undefined, combatData)
}
@ -447,7 +451,7 @@ export class BoLUtility {
}
/* -------------------------------------------- */
static async processDamageHandling(attackId, defenseMode, weaponId = -1, msgId) {
static async processDamageHandling(attackId, defenseMode, weaponId, msgId) {
if (!game.user.isGM) {
return
}
@ -457,7 +461,7 @@ export class BoLUtility {
console.log("Damage Handling", attackId, defenseMode, weaponId)
// Only GM process this
if (rollData && rollData.defenderId) {
if (rollData?.defenderId) {
if (rollData.defenseDone || defenseMode == 'damage-not-applied') {
return
} // ?? Why ???
@ -668,7 +672,6 @@ export class BoLUtility {
let res = myReg.exec(damageString)
let nbDice = parseInt(res[1])
let postForm = 'kh' + nbDice
let modIndex = 3
// Upgrade damage if needed
if (upgradeDamage && (!res[3] || res[3] == "")) {
res[3] = "B" // Upgrade to bonus
@ -680,22 +683,18 @@ export class BoLUtility {
if (res[3] == 'M') {
postForm = 'kl' + nbDice
nbDice++
modIndex = 4
}
if (res[3] == 'MM') {
postForm = 'kl' + nbDice
nbDice += 2
modIndex = 4
}
if (res[3] == 'B') {
postForm = 'kh' + nbDice
nbDice++
modIndex = 4
}
if (res[3] == 'BB') {
postForm = 'kh' + nbDice
nbDice += 2
modIndex = 4
}
}
formula = "(" + nbDice + "d" + res[2] + reroll + postForm + "+" + modifier + ") *" + multiplier
@ -742,8 +741,8 @@ export class BoLUtility {
/* -------------------------------------------- */
static removeGroupHoroscope(rollData) {
let horo = rollData.horoscopeGroupList[rollData.selectedGroupHoroscopeIndex]
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
let toChange = duplicate(horoscopes[horo.id])
let horoscopes = foundry.utils.duplicate(game.settings.get("bol", "horoscope-group"))
let toChange = foundry.utils.duplicate(horoscopes[horo.id])
toChange.availableDice -= horo.nbDice // Remove the dice
if (toChange.availableDice <= 0) {
horoscopes[horo.id] = undefined

View File

@ -31,6 +31,15 @@ BOL.damageMultiplier = {
"8": "x8"
}
BOL.listTypes = {
"attribute": "BOL.ui.attribute",
"aptitude": "BOL.ui.aptitude",
"career": "BOL.ui.career",
"boon": "BOL.ui.boon",
"flaw": "BOL.ui.flaw",
"other": "BOL.ui.other"
}
BOL.spellType = {
"0": "BOL.spellItem.charm",
"1": "BOL.spellItem.circle1",
@ -180,6 +189,61 @@ BOL.vehicleSubtypes = {
// "other" : "BOL.equipmentCategory.other"
// }
BOL.rangeModifiers = {
"1": "BOL.dialog.pointblank",
"0": "BOL.dialog.close",
"-1": "BOL.dialog.medium",
"-2": "BOL.dialog.long",
"-4": "BOL.dialog.distant",
"-6": "BOL.dialog.extreme",
"-8": "BOL.dialog.utmost"
}
BOL.difficultyModifiers = {
"4": "BOL.dialog.soeasy",
"2": "BOL.dialog.veryeasy",
"1": "BOL.dialog.easy",
"0": "BOL.dialog.moderate",
"-1": "BOL.dialog.hard",
"-2": "BOL.dialog.tough",
"-4": "BOL.dialog.demanding",
"-6": "BOL.dialog.formidable",
"-8": "BOL.dialog.heroic",
"-10": "BOL.dialog.mythic",
"-12": "BOL.dialog.divine"
}
BOL.alchemyModifiers = {
"2": "BOL.dialog.veryeasy",
"1": "BOL.dialog.easy",
"0": "BOL.dialog.moderate",
"-1": "BOL.dialog.hard",
"-2": "BOL.dialog.tough",
"-4": "BOL.dialog.demanding",
"-6": "BOL.dialog.formidable",
"-8": "BOL.dialog.heroic",
}
BOL.spellModifiers = BOL.alchemyModifiers
BOL.spellMandatoryConditions = {
"1": "1",
"2": "2",
"3": "3",
"4": "4"
}
BOL.spellOptionnalConditions = {
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8"
}
BOL.effectIdentifiers = {
"always": "BOL.ui.always",
}
BOL.protectionCategories = {
"armor" : "BOL.protectionCategory.armor",
"shield" : "BOL.protectionCategory.shield",
@ -271,6 +335,7 @@ BOL.featureSubtypes = {
"fightoption" : "BOL.featureSubtypes.fightOption",
"boleffect": "BOL.featureSubtypes.effect",
"horoscope": "BOL.featureSubtypes.horoscope",
"xplog": "BOL.featureSubtypes.xplog",
}
BOL.fightOptionTypes = {
@ -286,7 +351,7 @@ BOL.fightOptionTypes = {
BOL.itemIcons = {
"item": "icons/containers/chest/chest-worn-oak-tan.webp",
"capacity": "icons/sundries/scrolls/scroll-plain-tan-red.webp",
"feature": "icons/sundries/scrolls/scroll-plain-tan-red.webp",
"species": "icons/environment/people/group.webp",
"profile": "icons/sundries/documents/blueprint-axe.webp",
"path": "icons/sundries/books/book-embossed-gold-red.webp"

View File

@ -10,7 +10,7 @@ export const registerHandlebarsHelpers = function () {
Handlebars.registerHelper('isEmpty', function (list) {
if (list) return list.length == 0;
else return 0;
else return false;
});
Handlebars.registerHelper('notEmpty', function (list) {
@ -64,8 +64,8 @@ export const registerHandlebarsHelpers = function () {
})
Handlebars.registerHelper('for', function (from, to, incr, block) {
var accum = '';
for (var i = from; i < to; i += incr)
let accum = '';
for (let i = from; i < to; i += incr)
accum += block.fn(i);
return accum;
})
@ -89,8 +89,8 @@ export const registerHandlebarsHelpers = function () {
// If you need to add Handlebars helpers, here are a few useful examples:
Handlebars.registerHelper('concat', function () {
var outStr = '';
for (var arg in arguments) {
let outStr = '';
for (let arg in arguments) {
if (typeof arguments[arg] != 'object') {
outStr += arguments[arg];
}
@ -117,7 +117,6 @@ export const registerHandlebarsHelpers = function () {
return arr[idx];
})
Handlebars.registerHelper('includesKey', function (items, type, key) {
// console.log(items);
return items.filter(i => i.type === type).map(i => i.system.key).includes(key);
})
Handlebars.registerHelper('includes', function (array, val) {
@ -128,10 +127,7 @@ export const registerHandlebarsHelpers = function () {
})
Handlebars.registerHelper('isOwnerOrGM', function (actor) {
console.log("Testing actor", actor.isOwner, game.userId)
if (actor.isOwner || game.isGM) {
return true
}
return false
return actor.isOwner || game.isGM;
})
Handlebars.registerHelper('upperFirst', function (text) {
if (typeof text !== 'string') return text
@ -141,6 +137,9 @@ export const registerHandlebarsHelpers = function () {
if (typeof text !== 'string') return text
return text.charAt(0).toUpperCase()
})
Handlebars.registerHelper('isCreature', function (key) {
return key == "creature" || key == "daemon";
})
}

View File

@ -29,18 +29,6 @@ export default function registerHooks() {
if (data.type == "Item") {
let item = data.data;
console.log(item);
// let command = `let onlyDamage = false;\nlet customLabel = "";\nlet skillDescription = "";\nlet dmgDescription = "";\n\nif (event) {\n if (event.shiftKey) onlyDamage = true;\n}\n\ngame.cof.macros.rollItemMacro("${item._id}", "${item.name}", "${item.type}", 0, 0, 0, onlyDamage, customLabel, skillDescription, dmgDescription);`;
// let macro = game.macros.entities.find(m => (m.name === item.name) && (m.command === command));
// if (!macro) {
// macro = await Macro.create({
// name: item.name,
// type : "script",
// img: item.img,
// command : command
// }, {displaySheet: false})
// }
// game.user.assignHotbarMacro(macro, slot);
}
// Create a macro to open the actor sheet of the actor dropped on the hotbar
else if (data.type == "Actor") {

View File

@ -43,6 +43,7 @@ export const preloadHandlebarsTemplates = async function () {
"systems/bol/templates/item/parts/properties/feature/fightoption-properties.hbs",
"systems/bol/templates/item/parts/properties/item/weapon-vehicle-properties.hbs",
"systems/bol/templates/item/parts/properties/feature/horoscope-properties.hbs",
"systems/bol/templates/item/parts/properties/feature/xplog-properties.hbs",
// DIALOGS
"systems/bol/templates/chat/rolls/attack-damage-card.hbs",

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000107
MANIFEST-000262

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.430277 7f84f7fff6c0 Recovering log #105
2023/12/04-21:16:34.440834 7f84f7fff6c0 Delete type=3 #103
2023/12/04-21:16:34.440885 7f84f7fff6c0 Delete type=0 #105
2023/12/04-21:29:36.294789 7f84f5ffb6c0 Level-0 table #110: started
2023/12/04-21:29:36.294815 7f84f5ffb6c0 Level-0 table #110: 0 bytes OK
2023/12/04-21:29:36.301173 7f84f5ffb6c0 Delete type=0 #108
2023/12/04-21:29:36.301317 7f84f5ffb6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!Yl1RKQb0BjVUtilk.kNb9ZrMbgONi1mlE' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.301343 7f84f5ffb6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!Yl1RKQb0BjVUtilk.kNb9ZrMbgONi1mlE' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.161260 7f78fa0006c0 Recovering log #259
2024/04/26-11:56:58.172348 7f78fa0006c0 Delete type=3 #257
2024/04/26-11:56:58.172412 7f78fa0006c0 Delete type=0 #259
2024/04/26-14:04:50.930192 7f78f90006c0 Level-0 table #265: started
2024/04/26-14:04:50.930219 7f78f90006c0 Level-0 table #265: 0 bytes OK
2024/04/26-14:04:50.936493 7f78f90006c0 Delete type=0 #263
2024/04/26-14:04:50.950259 7f78f90006c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2024/04/26-14:04:50.950292 7f78f90006c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/10/28-18:46:58.144165 7f5610ff96c0 Recovering log #101
2023/10/28-18:46:58.154293 7f5610ff96c0 Delete type=3 #99
2023/10/28-18:46:58.154395 7f5610ff96c0 Delete type=0 #101
2023/10/28-18:47:32.356263 7f56037fe6c0 Level-0 table #106: started
2023/10/28-18:47:32.356293 7f56037fe6c0 Level-0 table #106: 0 bytes OK
2023/10/28-18:47:32.362824 7f56037fe6c0 Delete type=0 #104
2023/10/28-18:47:32.375967 7f56037fe6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!Yl1RKQb0BjVUtilk.kNb9ZrMbgONi1mlE' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.376034 7f56037fe6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!Yl1RKQb0BjVUtilk.kNb9ZrMbgONi1mlE' @ 0 : 0; will stop at (end)
2024/04/19-08:19:44.083034 7f94642006c0 Recovering log #255
2024/04/19-08:19:44.095849 7f94642006c0 Delete type=3 #253
2024/04/19-08:19:44.095950 7f94642006c0 Delete type=0 #255
2024/04/19-08:30:00.016102 7f94632006c0 Level-0 table #260: started
2024/04/19-08:30:00.020232 7f94632006c0 Level-0 table #260: 27751 bytes OK
2024/04/19-08:30:00.027004 7f94632006c0 Delete type=0 #258
2024/04/19-08:30:00.027264 7f94632006c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2024/04/19-08:30:00.049736 7f94632006c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 159 : 1
2024/04/19-08:30:00.049751 7f94632006c0 Compacting 1@1 + 1@2 files
2024/04/19-08:30:00.054303 7f94632006c0 Generated table #261@1: 24 keys, 27751 bytes
2024/04/19-08:30:00.054348 7f94632006c0 Compacted 1@1 + 1@2 files => 27751 bytes
2024/04/19-08:30:00.060656 7f94632006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/04/19-08:30:00.060882 7f94632006c0 Delete type=2 #204
2024/04/19-08:30:00.061163 7f94632006c0 Delete type=2 #260
2024/04/19-08:30:00.073152 7f94632006c0 Manual compaction at level-1 from '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 159 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/armors/000167.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000014
MANIFEST-000168

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.402100 7f84f6ffd6c0 Recovering log #12
2023/12/04-21:16:34.413052 7f84f6ffd6c0 Delete type=3 #10
2023/12/04-21:16:34.413101 7f84f6ffd6c0 Delete type=0 #12
2023/12/04-21:29:36.274254 7f84f5ffb6c0 Level-0 table #17: started
2023/12/04-21:29:36.274306 7f84f5ffb6c0 Level-0 table #17: 0 bytes OK
2023/12/04-21:29:36.281091 7f84f5ffb6c0 Delete type=0 #15
2023/12/04-21:29:36.301284 7f84f5ffb6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.301326 7f84f5ffb6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.134706 7f78fbe006c0 Recovering log #165
2024/04/26-11:56:58.144933 7f78fbe006c0 Delete type=3 #163
2024/04/26-11:56:58.145031 7f78fbe006c0 Delete type=0 #165
2024/04/26-14:04:50.923546 7f78f90006c0 Level-0 table #171: started
2024/04/26-14:04:50.923576 7f78f90006c0 Level-0 table #171: 0 bytes OK
2024/04/26-14:04:50.930043 7f78f90006c0 Delete type=0 #169
2024/04/26-14:04:50.950239 7f78f90006c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/04/26-14:04:50.950346 7f78f90006c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/10/28-18:46:58.118619 7f5603fff6c0 Recovering log #8
2023/10/28-18:46:58.129553 7f5603fff6c0 Delete type=3 #6
2023/10/28-18:46:58.129618 7f5603fff6c0 Delete type=0 #8
2023/10/28-18:47:32.323904 7f56037fe6c0 Level-0 table #13: started
2023/10/28-18:47:32.323933 7f56037fe6c0 Level-0 table #13: 0 bytes OK
2023/10/28-18:47:32.329984 7f56037fe6c0 Delete type=0 #11
2023/10/28-18:47:32.349515 7f56037fe6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.349581 7f56037fe6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/04/19-08:19:44.050910 7f94656006c0 Recovering log #161
2024/04/19-08:19:44.062747 7f94656006c0 Delete type=3 #159
2024/04/19-08:19:44.062841 7f94656006c0 Delete type=0 #161
2024/04/19-08:29:59.998576 7f94632006c0 Level-0 table #166: started
2024/04/19-08:30:00.001989 7f94632006c0 Level-0 table #166: 5548 bytes OK
2024/04/19-08:30:00.008530 7f94632006c0 Delete type=0 #164
2024/04/19-08:30:00.027235 7f94632006c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/04/19-08:30:00.038530 7f94632006c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at '!items!xhEcsi3WHjbt2ro9' @ 18 : 1
2024/04/19-08:30:00.038547 7f94632006c0 Compacting 1@1 + 1@2 files
2024/04/19-08:30:00.042082 7f94632006c0 Generated table #167@1: 6 keys, 5548 bytes
2024/04/19-08:30:00.042108 7f94632006c0 Compacted 1@1 + 1@2 files => 5548 bytes
2024/04/19-08:30:00.048990 7f94632006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/04/19-08:30:00.049179 7f94632006c0 Delete type=2 #110
2024/04/19-08:30:00.049479 7f94632006c0 Delete type=2 #166
2024/04/19-08:30:00.061357 7f94632006c0 Manual compaction at level-1 from '!items!xhEcsi3WHjbt2ro9' @ 18 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/boons/000260.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000106
MANIFEST-000261

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.244782 7f84f6ffd6c0 Recovering log #104
2023/12/04-21:16:34.255803 7f84f6ffd6c0 Delete type=3 #102
2023/12/04-21:16:34.255859 7f84f6ffd6c0 Delete type=0 #104
2023/12/04-21:29:36.227120 7f84f5ffb6c0 Level-0 table #109: started
2023/12/04-21:29:36.227155 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
2023/12/04-21:29:36.233490 7f84f5ffb6c0 Delete type=0 #107
2023/12/04-21:29:36.247612 7f84f5ffb6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.247638 7f84f5ffb6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.024961 7f78fbe006c0 Recovering log #258
2024/04/26-11:56:58.034823 7f78fbe006c0 Delete type=3 #256
2024/04/26-11:56:58.034882 7f78fbe006c0 Delete type=0 #258
2024/04/26-14:04:50.869646 7f78f90006c0 Level-0 table #264: started
2024/04/26-14:04:50.869694 7f78f90006c0 Level-0 table #264: 0 bytes OK
2024/04/26-14:04:50.876074 7f78f90006c0 Delete type=0 #262
2024/04/26-14:04:50.896825 7f78f90006c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/04/26-14:04:50.896897 7f78f90006c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/10/28-18:46:58.021346 7f5603fff6c0 Recovering log #100
2023/10/28-18:46:58.032316 7f5603fff6c0 Delete type=3 #98
2023/10/28-18:46:58.032370 7f5603fff6c0 Delete type=0 #100
2023/10/28-18:47:32.275625 7f56037fe6c0 Level-0 table #105: started
2023/10/28-18:47:32.275699 7f56037fe6c0 Level-0 table #105: 0 bytes OK
2023/10/28-18:47:32.281755 7f56037fe6c0 Delete type=0 #103
2023/10/28-18:47:32.288117 7f56037fe6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.298397 7f56037fe6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/04/19-08:19:43.920264 7f94656006c0 Recovering log #254
2024/04/19-08:19:43.932138 7f94656006c0 Delete type=3 #252
2024/04/19-08:19:43.932303 7f94656006c0 Delete type=0 #254
2024/04/19-08:29:59.809068 7f94632006c0 Level-0 table #259: started
2024/04/19-08:29:59.813175 7f94632006c0 Level-0 table #259: 18151 bytes OK
2024/04/19-08:29:59.819452 7f94632006c0 Delete type=0 #257
2024/04/19-08:29:59.851866 7f94632006c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/04/19-08:29:59.851973 7f94632006c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at '!items!zgspy1QKaxdEetEw' @ 236 : 1
2024/04/19-08:29:59.851985 7f94632006c0 Compacting 1@1 + 1@2 files
2024/04/19-08:29:59.856258 7f94632006c0 Generated table #260@1: 59 keys, 18151 bytes
2024/04/19-08:29:59.856292 7f94632006c0 Compacted 1@1 + 1@2 files => 18151 bytes
2024/04/19-08:29:59.862772 7f94632006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/04/19-08:29:59.862925 7f94632006c0 Delete type=2 #203
2024/04/19-08:29:59.863159 7f94632006c0 Delete type=2 #259
2024/04/19-08:29:59.896639 7f94632006c0 Manual compaction at level-1 from '!items!zgspy1QKaxdEetEw' @ 236 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/boons/MANIFEST-000261 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000106
MANIFEST-000261

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.258787 7f84f77fe6c0 Recovering log #104
2023/12/04-21:16:34.268652 7f84f77fe6c0 Delete type=3 #102
2023/12/04-21:16:34.268705 7f84f77fe6c0 Delete type=0 #104
2023/12/04-21:29:36.233597 7f84f5ffb6c0 Level-0 table #109: started
2023/12/04-21:29:36.233621 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
2023/12/04-21:29:36.239701 7f84f5ffb6c0 Delete type=0 #107
2023/12/04-21:29:36.247623 7f84f5ffb6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.247651 7f84f5ffb6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.038384 7f78faa006c0 Recovering log #258
2024/04/26-11:56:58.049190 7f78faa006c0 Delete type=3 #256
2024/04/26-11:56:58.049324 7f78faa006c0 Delete type=0 #258
2024/04/26-14:04:50.890102 7f78f90006c0 Level-0 table #264: started
2024/04/26-14:04:50.890126 7f78f90006c0 Level-0 table #264: 0 bytes OK
2024/04/26-14:04:50.896657 7f78f90006c0 Delete type=0 #262
2024/04/26-14:04:50.896882 7f78f90006c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/04/26-14:04:50.896947 7f78f90006c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/10/28-18:46:58.033991 7f5611ffb6c0 Recovering log #100
2023/10/28-18:46:58.043491 7f5611ffb6c0 Delete type=3 #98
2023/10/28-18:46:58.043553 7f5611ffb6c0 Delete type=0 #100
2023/10/28-18:47:32.281934 7f56037fe6c0 Level-0 table #105: started
2023/10/28-18:47:32.281973 7f56037fe6c0 Level-0 table #105: 0 bytes OK
2023/10/28-18:47:32.287993 7f56037fe6c0 Delete type=0 #103
2023/10/28-18:47:32.298372 7f56037fe6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.298448 7f56037fe6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/04/19-08:19:43.937500 7f9464c006c0 Recovering log #254
2024/04/19-08:19:43.949011 7f9464c006c0 Delete type=3 #252
2024/04/19-08:19:43.949130 7f9464c006c0 Delete type=0 #254
2024/04/19-08:29:59.829996 7f94632006c0 Level-0 table #259: started
2024/04/19-08:29:59.833757 7f94632006c0 Level-0 table #259: 2399 bytes OK
2024/04/19-08:29:59.840517 7f94632006c0 Delete type=0 #257
2024/04/19-08:29:59.851922 7f94632006c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/04/19-08:29:59.873788 7f94632006c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at '!items!yofwG0YrsL902G77' @ 32 : 1
2024/04/19-08:29:59.873804 7f94632006c0 Compacting 1@1 + 1@2 files
2024/04/19-08:29:59.877246 7f94632006c0 Generated table #260@1: 8 keys, 2399 bytes
2024/04/19-08:29:59.877287 7f94632006c0 Compacted 1@1 + 1@2 files => 2399 bytes
2024/04/19-08:29:59.884259 7f94632006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/04/19-08:29:59.884426 7f94632006c0 Delete type=2 #203
2024/04/19-08:29:59.884735 7f94632006c0 Delete type=2 #259
2024/04/19-08:29:59.896671 7f94632006c0 Manual compaction at level-1 from '!items!yofwG0YrsL902G77' @ 32 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/careers/000260.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000106
MANIFEST-000261

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.285844 7f84f67fc6c0 Recovering log #104
2023/12/04-21:16:34.295915 7f84f67fc6c0 Delete type=3 #102
2023/12/04-21:16:34.295974 7f84f67fc6c0 Delete type=0 #104
2023/12/04-21:29:36.267733 7f84f5ffb6c0 Level-0 table #109: started
2023/12/04-21:29:36.267761 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
2023/12/04-21:29:36.273875 7f84f5ffb6c0 Delete type=0 #107
2023/12/04-21:29:36.274078 7f84f5ffb6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.274142 7f84f5ffb6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.065626 7f78fb4006c0 Recovering log #258
2024/04/26-11:56:58.075327 7f78fb4006c0 Delete type=3 #256
2024/04/26-11:56:58.075454 7f78fb4006c0 Delete type=0 #258
2024/04/26-14:04:50.882862 7f78f90006c0 Level-0 table #264: started
2024/04/26-14:04:50.882919 7f78f90006c0 Level-0 table #264: 0 bytes OK
2024/04/26-14:04:50.889962 7f78f90006c0 Delete type=0 #262
2024/04/26-14:04:50.896865 7f78f90006c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/04/26-14:04:50.896926 7f78f90006c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/10/28-18:46:58.057967 7f56117fa6c0 Recovering log #100
2023/10/28-18:46:58.068576 7f56117fa6c0 Delete type=3 #98
2023/10/28-18:46:58.068630 7f56117fa6c0 Delete type=0 #100
2023/10/28-18:47:32.298557 7f56037fe6c0 Level-0 table #105: started
2023/10/28-18:47:32.298612 7f56037fe6c0 Level-0 table #105: 0 bytes OK
2023/10/28-18:47:32.304559 7f56037fe6c0 Delete type=0 #103
2023/10/28-18:47:32.323741 7f56037fe6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.323783 7f56037fe6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/04/19-08:19:43.969794 7f94660006c0 Recovering log #254
2024/04/19-08:19:43.980384 7f94660006c0 Delete type=3 #252
2024/04/19-08:19:43.980502 7f94660006c0 Delete type=0 #254
2024/04/19-08:29:59.840760 7f94632006c0 Level-0 table #259: started
2024/04/19-08:29:59.845225 7f94632006c0 Level-0 table #259: 41173 bytes OK
2024/04/19-08:29:59.851577 7f94632006c0 Delete type=0 #257
2024/04/19-08:29:59.851940 7f94632006c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/04/19-08:29:59.884948 7f94632006c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at '!items!zxY3sW0iCJBvwjOS' @ 107 : 1
2024/04/19-08:29:59.884972 7f94632006c0 Compacting 1@1 + 1@2 files
2024/04/19-08:29:59.889715 7f94632006c0 Generated table #260@1: 27 keys, 41173 bytes
2024/04/19-08:29:59.889752 7f94632006c0 Compacted 1@1 + 1@2 files => 41173 bytes
2024/04/19-08:29:59.896200 7f94632006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/04/19-08:29:59.896338 7f94632006c0 Delete type=2 #203
2024/04/19-08:29:59.896535 7f94632006c0 Delete type=2 #259
2024/04/19-08:29:59.896685 7f94632006c0 Manual compaction at level-1 from '!items!zxY3sW0iCJBvwjOS' @ 107 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/cartes/000122.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000106
MANIFEST-000259

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.444268 7f84f67fc6c0 Recovering log #104
2023/12/04-21:16:34.454337 7f84f67fc6c0 Delete type=3 #102
2023/12/04-21:16:34.454390 7f84f67fc6c0 Delete type=0 #104
2023/12/04-21:29:36.307716 7f84f5ffb6c0 Level-0 table #109: started
2023/12/04-21:29:36.307782 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
2023/12/04-21:29:36.314556 7f84f5ffb6c0 Delete type=0 #107
2023/12/04-21:29:36.327965 7f84f5ffb6c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.328032 7f84f5ffb6c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.176077 7f78fb4006c0 Recovering log #257
2024/04/26-11:56:58.186350 7f78fb4006c0 Delete type=3 #255
2024/04/26-11:56:58.186407 7f78fb4006c0 Delete type=0 #257
2024/04/26-14:04:50.943258 7f78f90006c0 Level-0 table #262: started
2024/04/26-14:04:50.943288 7f78f90006c0 Level-0 table #262: 0 bytes OK
2024/04/26-14:04:50.950031 7f78f90006c0 Delete type=0 #260
2024/04/26-14:04:50.950283 7f78f90006c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/04/26-14:04:50.950309 7f78f90006c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/10/28-18:46:58.157567 7f56117fa6c0 Recovering log #100
2023/10/28-18:46:58.168362 7f56117fa6c0 Delete type=3 #98
2023/10/28-18:46:58.168445 7f56117fa6c0 Delete type=0 #100
2023/10/28-18:47:32.362933 7f56037fe6c0 Level-0 table #105: started
2023/10/28-18:47:32.362962 7f56037fe6c0 Level-0 table #105: 0 bytes OK
2023/10/28-18:47:32.369115 7f56037fe6c0 Delete type=0 #103
2023/10/28-18:47:32.375986 7f56037fe6c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.376049 7f56037fe6c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/04/19-08:19:44.103925 7f94660006c0 Recovering log #253
2024/04/19-08:19:44.147003 7f94660006c0 Delete type=3 #251
2024/04/19-08:19:44.147169 7f94660006c0 Delete type=0 #253
2024/04/19-08:30:00.008693 7f94632006c0 Level-0 table #258: started
2024/04/19-08:30:00.008732 7f94632006c0 Level-0 table #258: 0 bytes OK
2024/04/19-08:30:00.015925 7f94632006c0 Delete type=0 #256
2024/04/19-08:30:00.027251 7f94632006c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/04/19-08:30:00.049675 7f94632006c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/creatures/000203.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000106
MANIFEST-000208

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.555441 7f84f77fe6c0 Recovering log #104
2023/12/04-21:16:34.566877 7f84f77fe6c0 Delete type=3 #102
2023/12/04-21:16:34.566941 7f84f77fe6c0 Delete type=0 #104
2023/12/04-21:29:36.355366 7f84f5ffb6c0 Level-0 table #109: started
2023/12/04-21:29:36.355392 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
2023/12/04-21:29:36.362705 7f84f5ffb6c0 Delete type=0 #107
2023/12/04-21:29:36.362912 7f84f5ffb6c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.362955 7f84f5ffb6c0 Manual compaction at level-1 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
2024/02/23-23:05:36.345111 7fe93a0006c0 Recovering log #206
2024/02/23-23:05:36.355350 7fe93a0006c0 Delete type=3 #204
2024/02/23-23:05:36.355397 7fe93a0006c0 Delete type=0 #206
2024/02/23-23:11:16.411887 7fe9336006c0 Level-0 table #211: started
2024/02/23-23:11:16.411923 7fe9336006c0 Level-0 table #211: 0 bytes OK
2024/02/23-23:11:16.418695 7fe9336006c0 Delete type=0 #209
2024/02/23-23:11:16.419070 7fe9336006c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
2024/02/23-23:11:16.419088 7fe9336006c0 Manual compaction at level-1 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/10/28-18:46:58.256101 7f5611ffb6c0 Recovering log #100
2023/10/28-18:46:58.266925 7f5611ffb6c0 Delete type=3 #98
2023/10/28-18:46:58.267031 7f5611ffb6c0 Delete type=0 #100
2023/10/28-18:47:32.403078 7f56037fe6c0 Level-0 table #105: started
2023/10/28-18:47:32.403107 7f56037fe6c0 Level-0 table #105: 0 bytes OK
2023/10/28-18:47:32.410392 7f56037fe6c0 Delete type=0 #103
2023/10/28-18:47:32.416800 7f56037fe6c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.416838 7f56037fe6c0 Manual compaction at level-1 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
2024/02/22-16:41:06.582756 7fe93be006c0 Recovering log #201
2024/02/22-16:41:06.592273 7fe93be006c0 Delete type=3 #199
2024/02/22-16:41:06.592326 7fe93be006c0 Delete type=0 #201
2024/02/22-17:53:02.294923 7fe9336006c0 Level-0 table #207: started
2024/02/22-17:53:02.294959 7fe9336006c0 Level-0 table #207: 0 bytes OK
2024/02/22-17:53:02.313594 7fe9336006c0 Delete type=0 #205
2024/02/22-17:53:02.322132 7fe9336006c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
2024/02/22-17:53:02.322180 7fe9336006c0 Manual compaction at level-1 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000106
MANIFEST-000260

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.543411 7f84f6ffd6c0 Recovering log #104
2023/12/04-21:16:34.553517 7f84f6ffd6c0 Delete type=3 #102
2023/12/04-21:16:34.553574 7f84f6ffd6c0 Delete type=0 #104
2023/12/04-21:29:36.348547 7f84f5ffb6c0 Level-0 table #109: started
2023/12/04-21:29:36.348582 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
2023/12/04-21:29:36.355093 7f84f5ffb6c0 Delete type=0 #107
2023/12/04-21:29:36.355262 7f84f5ffb6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.355296 7f84f5ffb6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.274057 7f78fbe006c0 Recovering log #257
2024/04/26-11:56:58.285249 7f78fbe006c0 Delete type=3 #255
2024/04/26-11:56:58.285383 7f78fbe006c0 Delete type=0 #257
2024/04/26-14:04:50.977171 7f78f90006c0 Level-0 table #263: started
2024/04/26-14:04:50.977197 7f78f90006c0 Level-0 table #263: 0 bytes OK
2024/04/26-14:04:50.984422 7f78f90006c0 Delete type=0 #261
2024/04/26-14:04:51.009734 7f78f90006c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/04/26-14:04:51.009781 7f78f90006c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/10/28-18:46:58.244978 7f5603fff6c0 Recovering log #100
2023/10/28-18:46:58.254318 7f5603fff6c0 Delete type=3 #98
2023/10/28-18:46:58.254370 7f5603fff6c0 Delete type=0 #100
2023/10/28-18:47:32.410495 7f56037fe6c0 Level-0 table #105: started
2023/10/28-18:47:32.410517 7f56037fe6c0 Level-0 table #105: 0 bytes OK
2023/10/28-18:47:32.416657 7f56037fe6c0 Delete type=0 #103
2023/10/28-18:47:32.416814 7f56037fe6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.416846 7f56037fe6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/04/19-08:19:44.259456 7f94656006c0 Recovering log #253
2024/04/19-08:19:44.271045 7f94656006c0 Delete type=3 #251
2024/04/19-08:19:44.271171 7f94656006c0 Delete type=0 #253
2024/04/19-08:30:00.174557 7f94632006c0 Level-0 table #258: started
2024/04/19-08:30:00.178272 7f94632006c0 Level-0 table #258: 995 bytes OK
2024/04/19-08:30:00.184949 7f94632006c0 Delete type=0 #256
2024/04/19-08:30:00.196844 7f94632006c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/04/19-08:30:00.219861 7f94632006c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at '!items!zwSNMO9HpiqUCMt8' @ 12 : 1
2024/04/19-08:30:00.219880 7f94632006c0 Compacting 1@1 + 1@2 files
2024/04/19-08:30:00.223286 7f94632006c0 Generated table #259@1: 4 keys, 995 bytes
2024/04/19-08:30:00.223305 7f94632006c0 Compacted 1@1 + 1@2 files => 995 bytes
2024/04/19-08:30:00.230007 7f94632006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/04/19-08:30:00.230147 7f94632006c0 Delete type=2 #202
2024/04/19-08:30:00.230383 7f94632006c0 Delete type=2 #258
2024/04/19-08:30:00.242012 7f94632006c0 Manual compaction at level-1 from '!items!zwSNMO9HpiqUCMt8' @ 12 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/equipment/000261.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000108
MANIFEST-000262

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.326886 7f84f7fff6c0 Recovering log #106
2023/12/04-21:16:34.337231 7f84f7fff6c0 Delete type=3 #104
2023/12/04-21:16:34.337341 7f84f7fff6c0 Delete type=0 #106
2023/12/04-21:29:36.247774 7f84f5ffb6c0 Level-0 table #111: started
2023/12/04-21:29:36.247806 7f84f5ffb6c0 Level-0 table #111: 0 bytes OK
2023/12/04-21:29:36.253805 7f84f5ffb6c0 Delete type=0 #109
2023/12/04-21:29:36.274024 7f84f5ffb6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.274096 7f84f5ffb6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.107651 7f78fa0006c0 Recovering log #259
2024/04/26-11:56:58.117467 7f78fa0006c0 Delete type=3 #257
2024/04/26-11:56:58.117610 7f78fa0006c0 Delete type=0 #259
2024/04/26-14:04:50.910072 7f78f90006c0 Level-0 table #265: started
2024/04/26-14:04:50.910098 7f78f90006c0 Level-0 table #265: 0 bytes OK
2024/04/26-14:04:50.916483 7f78f90006c0 Delete type=0 #263
2024/04/26-14:04:50.923413 7f78f90006c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/04/26-14:04:50.923450 7f78f90006c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/10/28-18:46:58.094686 7f5610ff96c0 Recovering log #102
2023/10/28-18:46:58.104878 7f5610ff96c0 Delete type=3 #100
2023/10/28-18:46:58.104944 7f5610ff96c0 Delete type=0 #102
2023/10/28-18:47:32.336166 7f56037fe6c0 Level-0 table #107: started
2023/10/28-18:47:32.336197 7f56037fe6c0 Level-0 table #107: 0 bytes OK
2023/10/28-18:47:32.342982 7f56037fe6c0 Delete type=0 #105
2023/10/28-18:47:32.349554 7f56037fe6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.349606 7f56037fe6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/04/19-08:19:44.019625 7f94642006c0 Recovering log #255
2024/04/19-08:19:44.030373 7f94642006c0 Delete type=3 #253
2024/04/19-08:19:44.030526 7f94642006c0 Delete type=0 #255
2024/04/19-08:29:59.918387 7f94632006c0 Level-0 table #260: started
2024/04/19-08:29:59.922021 7f94632006c0 Level-0 table #260: 11238 bytes OK
2024/04/19-08:29:59.928489 7f94632006c0 Delete type=0 #258
2024/04/19-08:29:59.940377 7f94632006c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/04/19-08:29:59.962979 7f94632006c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at '!items!yE8UH6YAgNGjKDEu' @ 327 : 1
2024/04/19-08:29:59.962990 7f94632006c0 Compacting 1@1 + 1@2 files
2024/04/19-08:29:59.966809 7f94632006c0 Generated table #261@1: 43 keys, 11238 bytes
2024/04/19-08:29:59.966843 7f94632006c0 Compacted 1@1 + 1@2 files => 11238 bytes
2024/04/19-08:29:59.974600 7f94632006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/04/19-08:29:59.974784 7f94632006c0 Delete type=2 #204
2024/04/19-08:29:59.975112 7f94632006c0 Delete type=2 #260
2024/04/19-08:29:59.986927 7f94632006c0 Manual compaction at level-1 from '!items!yE8UH6YAgNGjKDEu' @ 327 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000106
MANIFEST-000260

View File

@ -1,8 +1,8 @@
2023/12/04-21:16:34.503638 7f84f77fe6c0 Recovering log #104
2023/12/04-21:16:34.513495 7f84f77fe6c0 Delete type=3 #102
2023/12/04-21:16:34.513540 7f84f77fe6c0 Delete type=0 #104
2023/12/04-21:29:36.328177 7f84f5ffb6c0 Level-0 table #109: started
2023/12/04-21:29:36.328221 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
2023/12/04-21:29:36.334799 7f84f5ffb6c0 Delete type=0 #107
2023/12/04-21:29:36.355226 7f84f5ffb6c0 Manual compaction at level-0 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2023/12/04-21:29:36.355270 7f84f5ffb6c0 Manual compaction at level-1 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/04/26-11:56:58.234275 7f78faa006c0 Recovering log #257
2024/04/26-11:56:58.244632 7f78faa006c0 Delete type=3 #255
2024/04/26-11:56:58.244781 7f78faa006c0 Delete type=0 #257
2024/04/26-14:04:50.963407 7f78f90006c0 Level-0 table #263: started
2024/04/26-14:04:50.963434 7f78f90006c0 Level-0 table #263: 0 bytes OK
2024/04/26-14:04:50.970529 7f78f90006c0 Delete type=0 #261
2024/04/26-14:04:50.977009 7f78f90006c0 Manual compaction at level-0 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/04/26-14:04:50.977040 7f78f90006c0 Manual compaction at level-1 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/10/28-18:46:58.208291 7f5611ffb6c0 Recovering log #100
2023/10/28-18:46:58.217629 7f5611ffb6c0 Delete type=3 #98
2023/10/28-18:46:58.217715 7f5611ffb6c0 Delete type=0 #100
2023/10/28-18:47:32.376126 7f56037fe6c0 Level-0 table #105: started
2023/10/28-18:47:32.376155 7f56037fe6c0 Level-0 table #105: 0 bytes OK
2023/10/28-18:47:32.382230 7f56037fe6c0 Delete type=0 #103
2023/10/28-18:47:32.402910 7f56037fe6c0 Manual compaction at level-0 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2023/10/28-18:47:32.402958 7f56037fe6c0 Manual compaction at level-1 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/04/19-08:19:44.212596 7f9464c006c0 Recovering log #253
2024/04/19-08:19:44.224303 7f9464c006c0 Delete type=3 #251
2024/04/19-08:19:44.224391 7f9464c006c0 Delete type=0 #253
2024/04/19-08:30:00.095765 7f94632006c0 Level-0 table #258: started
2024/04/19-08:30:00.099582 7f94632006c0 Level-0 table #258: 15776 bytes OK
2024/04/19-08:30:00.107187 7f94632006c0 Delete type=0 #256
2024/04/19-08:30:00.118151 7f94632006c0 Manual compaction at level-0 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/04/19-08:30:00.140008 7f94632006c0 Manual compaction at level-1 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at '!items!vGydqADwTsHZ9B3j' @ 90 : 1
2024/04/19-08:30:00.140020 7f94632006c0 Compacting 1@1 + 1@2 files
2024/04/19-08:30:00.144757 7f94632006c0 Generated table #259@1: 30 keys, 15776 bytes
2024/04/19-08:30:00.144786 7f94632006c0 Compacted 1@1 + 1@2 files => 15776 bytes
2024/04/19-08:30:00.151053 7f94632006c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2024/04/19-08:30:00.151191 7f94632006c0 Delete type=2 #202
2024/04/19-08:30:00.151438 7f94632006c0 Delete type=2 #258
2024/04/19-08:30:00.163491 7f94632006c0 Manual compaction at level-1 from '!items!vGydqADwTsHZ9B3j' @ 90 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)

Binary file not shown.

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