Compare commits

...

5 Commits

213 changed files with 800 additions and 1730 deletions

View File

@ -803,6 +803,18 @@ body.system-bol img#logo {
max-width: calc(250px - 10px);
margin-right: 10px;
}
.sheet-profile-img {
cursor: pointer;
border: none;
background-color: #EEE;
height: auto;
width: 96px;
height: 96px;
min-width: 96px;
min-height: 96px;
max-width: 96px;
margin-right: 10px;
}
.bol.sheet.actor .window-content form .main .sheet-body {
overflow: hidden;
}
@ -937,6 +949,7 @@ body.system-bol img#logo {
min-height: 400px;
}
.bol.sheet.item h1 input.itemname {
margin-top: 32px;
font-family: "Wolfsbane2Expanded", cursive;
}
.bol.sheet.item .item-properties {
@ -1051,9 +1064,10 @@ body.system-bol img#logo {
.tokenhudext.right2 {
justify-content: flex-start;
flex-direction: column;
transform: translate(0, -30%);
position: absolute;
top: -4rem;
left: 12rem;
left: -12rem;
}
.control-icon.tokenhudicon {
width: fit-content;

View File

@ -1,10 +1,18 @@
{
"ACTOR.TypeCharacter": "Character",
"ACTOR.TypeEncounter": "Encounter",
"ITEM.TypeItem": "Item",
"ITEM.TypeFeature": "Feature",
"ITEM.TypeWeapon": "Weapon",
"ITEM.TypeArmor": "Armor",
"TYPES": {
"Actor": {
"character": "PC",
"encounter": "NPC",
"npc": "NPC",
"vehicle": "Vehicle"
},
"Item": {
"item": "Object",
"feature": "Trait",
"weapon": "Weapon",
"armure": "Armor"
}
},
"BOL.attributes.vigor": "Strength",
"BOL.attributes.halfvigor" : "Half-Strength",
@ -46,6 +54,9 @@
"BOL.ui.horoscopesMalus": "Horoscopes (Malus)",
"BOL.ui.groupHoroscope": "Horoscrope de Groupe de ",
"BOL.ui.rabble": "Rabble",
"BOL.ui.tough": "Tough",
"BOL.ui.villain": "Villain",
"BOL.ui.properties": "Properties",
"BOL.ui.description": "Description",
"BOL.ui.actions": "Actions",
@ -166,8 +177,43 @@
"BOL.ui.attackValue": "Attack Value",
"BOL.ui.weaponbonus": "Cette arme bénéficie déja d'un Dé de Bonus (Arme Favorite prise en compte, par exemple)",
"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.ui.attributaptitude": "Attribut ou Aptitude",
"BOL.ui.always": "Tout les jets (ie toujours)",
"BOL.ui.effectbonusmalus": "Bonus ou Malus à appliquer",
"BOL.ui.boleffects": "Effects (automatic)",
"BOL.ui.modifier": "Modifier",
"BOL.ui.effects": "Ongoing effects",
"BOL.ui.pcname": "PCs",
"BOL.ui.npcname": "NPCs",
"BOL.ui.pclistbutton": "Compact view",
"BOL.ui.noactorfound": "Unknown NPC. The NPC must be known in the world to be displayed here.",
"BOL.ui.deletetitle": "Delete",
"BOL.ui.confirmdelete": "Are you sure to delete this item ?",
"BOL.ui.nomorealchemypoints": "No more Creation Point !",
"BOL.ui.armornoformula": "The Armor {protect.name} has no protection formula !",
"BOL.ui.selectactor": "Select the actors to apply the macro",
"BOL.ui.itemnotfound": "Impossible to find the object of this macro",
"BOL.ui.noinit": "No initiative recorded. Roll initiative from the actor's sheet.",
"BOL.ui.warninitiative": "No available initiative. Roll Initiative for this combat.",
"BOL.ui.isspecial": "Special ?",
"BOL.ui.createEquipment": "Create an equipment",
"BOL.ui.astrology": "Astrology and Horoscope",
"BOL.ui.astrologyMinor": "Build a Minor Horoscope",
"BOL.ui.astrologyMajor": "Build a Major Horoscope",
"BOL.ui.astrologyMajorGroup": "Build a Major Group Horoscope",
"BOL.ui.makeHoroscope": "Build a Horoscope",
"BOL.ui.astrologerRank": "Astrologer Rank",
"BOL.ui.horoscopeCost": "Astrology Points cost",
"BOL.ui.minor": "Minor",
"BOL.ui.major": "Major",
"BOL.ui.majorgroup": "Group Major",
"BOL.ui.horoscopeGroup": "Group Horoscope",
"BOL.ui.horoscopeDiceRemaining": "Remaining Dice",
"BOL.ui.horoscopeDiceMax": "Max Dice",
"BOL.ui.astrologyNoPoints": "You do not have enough Astrology Points!",
"BOL.featureCategory.origins": "Origins",
"BOL.featureCategory.races": "Races",
@ -185,6 +231,11 @@
"BOL.featureSubtypes.language": "Language",
"BOL.featureSubtypes.gods": "Faith & Gods",
"BOL.featureSubtypes.fightOption": "Combat Option",
"BOL.featureSubtypes.effect": "Effcet",
"BOL.featureSubtypes.effects": "Effects",
"BOL.featureSubtypes.boleffect": "Effect",
"BOL.featureSubtypes.horoscope": "Horoscope",
"BOL.featureSubtypes.xplog": "XP Journal",
"BOL.bougette.nomoney": "Nothing",
"BOL.bougette.tolive": "To live",
@ -413,6 +464,7 @@
"BOL.chat.applydamagetotarget": "Apply damages to the target",
"BOL.chat.fightoption": "Combat options",
"BOL.chat.reroll": "Reroll (1 HP)",
"BOL.chat.heroicreminder": "In addition of the actions below, you can : <ul><li>Carnage : Do a second free attack on the same opponent</li><li>Precise : 1 Malus Die on your opponent on a chosen location</li><li>Disarm</li><li>Rabble Massacre</li><li>Prone : Push your opponent on the ground (max +1 size)</li></ul>If you spent 1 Hero Point in addition, all these effects can be doubled.",
"BOL.chat.toheroic": "Convert to Mighty success (1 HP)",
"BOL.chat.tolegend": "Convert to Legendary succes (1 HP)",
"BOL.chat.hurttitle": "{name} is going to receive {damageTotal} damages !",
@ -430,6 +482,48 @@
"BOL.chat.spell": "Spell",
"BOL.chat.spellcost": "Power Points cost",
"BOL.chat.spellremaining": "Remaining Power Points",
"BOL.chat.nodamagesummary": "No damage ....",
"BOL.chat.damageresume": "{name} as taken wounds ...",
"BOL.chat.fumblemessage": "If you accept the consequences of a fumble (GM choice), you can get 1 additionnal Hero Point.",
"BOL.chat.rangeinfo": "Range/Throw of {attackerName} to {defenderName}",
"BOL.chat.rangeweaponinfo": "Weapon : {weaponName} - Base range {weaponRange}",
"BOL.chat.rangeout": "Modifier : Out of range",
"BOL.chat.range0": "Modifier : Point blank (+1)",
"BOL.chat.range1": "Modifier : Short Range (0)",
"BOL.chat.range2": "Modifier : Middle Range (-1)",
"BOL.chat.range3": "Modifier : Long Range (-2)",
"BOL.chat.range4": "Modifier : Very Long Range (-4)",
"BOL.chat.range5": "Modifier : Extrem Range (-6)",
"BOL.chat.range6": "Modifier : Max Range (-8)",
"BOL.chat.rangeprefix": "Evaluated distance : ",
"BOL.chat.rangevisible": "Line of sight is cleared between tokens.",
"BOL.chat.rangenotvisible": "Line of sight is blocked between tokens.",
"BOL.chat.rangetitle": "GM Information",
"BOL.chat.weaponreroll1": "As a reminder, this weapon re-roll 1 whend rolling for damage.",
"BOL.chat.rollbougette": "Budget roll",
"BOL.chat.bougettesuccess": "Your budget remains unchanged !",
"BOL.chat.bougettefailure": "You spent too much money, your budget is going down by one level...",
"BOL.chat.initiative": "Initiative rank (10 to 1)",
"BOL.chat.horoscope": "Horoscope",
"BOL.chat.horoscopepoints": "Cost : {points} Astrology Points",
"BOL.chat.horoscopeminorsuccess": "Your minor horoscope is a success : change the horoscope name in your sheet. You will benefit of 1 Bonus Die for the given situation.",
"BOL.chat.horoscopeminorfailure": "Your minor horoscope mineur isa failure : change the horoscope name in your sheet. Vous will suffer 1 Malus Die for the given situation.",
"BOL.chat.horoscopemajorsuccess": "Your major horoscope is a success : {horoscopeName} gets 1 new Hero Point for this adventure. This point has been automatically added.",
"BOL.chat.horoscopemajorfailure": "Your major horoscope is a failure : {horoscopeName} looses 1 Hero Point for this adventure. This point has been automatically substracted.",
"BOL.chat.horoscopemajorgroupsuccess": "Your major group horoscope majeur is a success. Your and your party gets {careerBonus} Bonus Dice during this adventure.",
"BOL.chat.horoscopemajorgroupfailure": "Your major group horoscope is a failure. You and your party suffers {careerBonus} Malus Dice durig this adventure.",
"BOL.chat.usedhoroscope": "Horoscope has been used",
"BOL.chat.horoscopedeleted": "The Horoscopes used are deleted automatically.",
"BOL.chat.criticaloptions": "Critical success !! You can (select 1 option) :",
"BOL.chat.criticalcarnage": "Dual attack : you gain 1 free attack. This second attack can't benefit from a Hero/Villain Point.",
"BOL.chat.criticalplus6": "Devastating : damage +6 aux dommages (cf button below).",
"BOL.chat.criticalprecise": "Precise : You hit to harm your opponent. Describe what your are doing, and if the GM agree, your opponent will suffer 1 Malus Die for the relevant actions.",
"BOL.chat.criticalunarm": "Disarm : Si your opponnent has a weapon in hand, you disarm him.",
"BOL.chat.criticalrabble": "Rabble Massacre : If you fight against rabble, damages results indicate the amount of rabble you kill.",
"BOL.chat.criticalpush": "Prone : If the size allow it, you push your opponent on the ground. He suffer 1 Malus Die for all his actions during the next round.",
"BOL.chat.criticalup": "Transform to Legendary : If you spent 1 Hero Point/Villain, you can transform this Heroic success into a Legendary success.You can the choose 2 options in this list above.",
"BOL.chat.criticalinfo": "This is a Legendary or Heroic succes ! Choose your options and effects !",
"BOL.chat.criticalbuttonjournal": "Legendary/Heroic Success",
"BOL.dialog.soeasy": "So easy (+4)",
"BOL.dialog.veryeasy": "Very easy (+2)",

View File

@ -2,6 +2,7 @@
"TYPES": {
"Actor": {
"character": "Personnage",
"encounter": "PNJ",
"npc": "PNJ",
"vehicle": "Véhicule"
},
@ -207,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",
@ -620,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,
@ -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
@ -160,6 +160,7 @@ export class BoLActorSheet extends ActorSheet {
formData.bougette = this.actor.getBougette()
formData.charType = this.actor.getCharType()
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()
@ -187,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.

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,7 +196,7 @@ 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
}
@ -224,10 +221,10 @@ export class BoLActor extends Actor {
/* -------------------------------------------- */
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
@ -241,10 +238,10 @@ 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
@ -259,9 +256,9 @@ 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 })
@ -280,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 {
@ -326,13 +323,13 @@ export class BoLActor extends Actor {
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");
@ -414,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))
}
/*-------------------------------------------- */
@ -508,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 })
@ -559,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,
@ -592,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
@ -606,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
}
@ -614,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
}
@ -622,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
}
@ -653,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 {
@ -799,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({
@ -836,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() {
@ -860,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)
@ -888,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
}
}
@ -913,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
@ -1012,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)
@ -1022,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()
}
@ -1034,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,7 @@ 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 { BoLRoll } from "./controllers/bol-rolls.js"
/* -------------------------------------------- */
@ -27,6 +25,7 @@ Hooks.once('init', async function () {
BoLItem,
BoLHotbar,
BoLRoll,
BoLUtility,
macros: Macros,
config: BOL
};
@ -45,7 +44,7 @@ Hooks.once('init', async function () {
formula: "2d6+@attributes.mind.value+@aptitudes.init.value",
decimals: 2
};
// Define custom Entity classes
CONFIG.Actor.documentClass = BoLActor;
CONFIG.Item.documentClass = BoLItem;
@ -64,8 +63,7 @@ Hooks.once('init', async function () {
BoLTokenHud.init()
BoLHotbar.init()
BoLCommands.init()
BoLAdventureGenerator.init()
// Preload Handlebars Templates
await preloadHandlebarsTemplates();
@ -77,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() {
@ -122,9 +95,13 @@ function welcomeMessage() {
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()

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,6 +60,7 @@ export class BoLRoll {
armorInitMalus: actor.getArmorInitMalus(),
horoscopeBonusList: actor.getHoroscopesBonus(),
horoscopeMalusList: actor.getHoroscopesMalus(),
config: game.bol.config,
adv: "0",
mod: 0,
modRanged: 0,
@ -184,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)
}
@ -196,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 !")
@ -270,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)
}
@ -403,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()
@ -411,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()
@ -454,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
@ -464,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
@ -532,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
@ -618,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)
@ -690,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)
})
}
@ -743,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)
})
@ -778,7 +776,7 @@ export class BoLDefaultRoll {
//console.log("Formula", weaponFormula, damageFormula, this.rollData.weapon.data.data.properties.damage)
this.rollData.damageFormula = damageFormula
this.rollData.damageRoll = new Roll(damageFormula)
await this.rollData.damageRoll.roll({ "async": false })
await this.rollData.damageRoll.roll()
this.rollData.damageTotal = this.rollData.damageRoll.total
console.log("DAMAGE !!!", damageFormula, attrDamageValue, 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,7 +21,7 @@ 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
@ -78,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 ???
@ -469,7 +473,7 @@ export class BoLUtility {
if (defenseMode == 'damage-with-armor') {
let armorFormula = defender.getArmorFormula()
rollData.rollArmor = new Roll(armorFormula)
rollData.rollArmor.roll({ async: false })
await rollData.rollArmor.roll()
rollData.armorProtect = (rollData.rollArmor.total < 0) ? 0 : rollData.rollArmor.total
rollData.finalDamage = rollData.damageTotal - rollData.armorProtect
rollData.finalDamage = (rollData.finalDamage < 0) ? 0 : rollData.finalDamage
@ -483,10 +487,10 @@ export class BoLUtility {
if (defenseMode == 'hero-reduce-damage') {
let armorFormula = defender.getArmorFormula()
rollData.rollArmor = new Roll(armorFormula)
rollData.rollArmor.roll({ async: false })
await rollData.rollArmor.roll()
rollData.armorProtect = (rollData.rollArmor.total < 0) ? 0 : rollData.rollArmor.total
rollData.rollHero = new Roll("1d6")
rollData.rollHero.roll({ async: false })
await rollData.rollHero.roll()
rollData.finalDamage = rollData.damageTotal - rollData.rollHero.total - rollData.armorProtect
rollData.finalDamage = (rollData.finalDamage < 0) ? 0 : rollData.finalDamage
defender.sufferDamage(rollData.finalDamage)
@ -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

@ -189,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",

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;
})
@ -79,7 +79,7 @@ export const registerHandlebarsHelpers = function () {
Handlebars.registerHelper('countKeys', function (obj) {
return Object.keys(obj).length;
})
Handlebars.registerHelper('isEnabled', function (configKey) {
return game.settings.get("bol", configKey);
})
@ -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];
}
@ -108,16 +108,15 @@ export const registerHandlebarsHelpers = function () {
return parseInt(a) - parseInt(b);
})
Handlebars.registerHelper('abbrev2', function (a) {
return a.substring(0,2);
return a.substring(0, 2);
})
Handlebars.registerHelper('abbrev3', function (a) {
return a.substring(0,3);
return a.substring(0, 3);
})
Handlebars.registerHelper('valueAtIndex', function (arr, idx) {
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,16 @@ 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";
})
// Handle v12 removal of this helper
Handlebars.registerHelper('select', function (selected, options) {
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
const html = options.fn(this);
return html.replace(rgx, "$& selected");
});
}

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") {

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000164
MANIFEST-000303

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:00.654494 7f2aeffff6c0 Recovering log #162
2024/01/12-17:58:00.703417 7f2aeffff6c0 Delete type=3 #160
2024/01/12-17:58:00.703506 7f2aeffff6c0 Delete type=0 #162
2024/01/12-18:33:25.126235 7f2aee3ff6c0 Level-0 table #167: started
2024/01/12-18:33:25.126295 7f2aee3ff6c0 Level-0 table #167: 0 bytes OK
2024/01/12-18:33:25.133198 7f2aee3ff6c0 Delete type=0 #165
2024/01/12-18:33:25.139871 7f2aee3ff6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.139923 7f2aee3ff6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2024/08/12-22:22:36.614939 7f14756006c0 Recovering log #301
2024/08/12-22:22:36.625124 7f14756006c0 Delete type=3 #299
2024/08/12-22:22:36.625176 7f14756006c0 Delete type=0 #301
2024/08/12-22:24:19.300777 7f146fe006c0 Level-0 table #306: started
2024/08/12-22:24:19.300851 7f146fe006c0 Level-0 table #306: 0 bytes OK
2024/08/12-22:24:19.307219 7f146fe006c0 Delete type=0 #304
2024/08/12-22:24:19.328842 7f146fe006c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2024/08/12-22:24:19.328887 7f146fe006c0 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,8 @@
2024/01/11-23:52:22.269402 7f2d849ff6c0 Recovering log #158
2024/01/11-23:52:22.279265 7f2d849ff6c0 Delete type=3 #156
2024/01/11-23:52:22.279317 7f2d849ff6c0 Delete type=0 #158
2024/01/12-17:21:27.002365 7f2aee3ff6c0 Level-0 table #163: started
2024/01/12-17:21:27.002416 7f2aee3ff6c0 Level-0 table #163: 0 bytes OK
2024/01/12-17:21:27.035659 7f2aee3ff6c0 Delete type=0 #161
2024/01/12-17:21:27.068240 7f2aee3ff6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2024/01/12-17:21:27.068304 7f2aee3ff6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2024/08/12-14:24:59.749548 7f14756006c0 Recovering log #297
2024/08/12-14:24:59.759617 7f14756006c0 Delete type=3 #295
2024/08/12-14:24:59.759718 7f14756006c0 Delete type=0 #297
2024/08/12-15:14:31.888362 7f146fe006c0 Level-0 table #302: started
2024/08/12-15:14:31.888390 7f146fe006c0 Level-0 table #302: 0 bytes OK
2024/08/12-15:14:31.894838 7f146fe006c0 Delete type=0 #300
2024/08/12-15:14:31.894997 7f146fe006c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
2024/08/12-15:14:31.895028 7f146fe006c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 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/000200.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000070
MANIFEST-000209

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:00.559279 7f2aeeffd6c0 Recovering log #68
2024/01/12-17:58:00.603120 7f2aeeffd6c0 Delete type=3 #66
2024/01/12-17:58:00.603243 7f2aeeffd6c0 Delete type=0 #68
2024/01/12-18:33:25.082107 7f2aee3ff6c0 Level-0 table #73: started
2024/01/12-18:33:25.082159 7f2aee3ff6c0 Level-0 table #73: 0 bytes OK
2024/01/12-18:33:25.089101 7f2aee3ff6c0 Delete type=0 #71
2024/01/12-18:33:25.111117 7f2aee3ff6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.111206 7f2aee3ff6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/08/12-22:22:36.584046 7f1476a006c0 Recovering log #207
2024/08/12-22:22:36.594399 7f1476a006c0 Delete type=3 #205
2024/08/12-22:22:36.594454 7f1476a006c0 Delete type=0 #207
2024/08/12-22:24:19.315310 7f146fe006c0 Level-0 table #212: started
2024/08/12-22:24:19.315377 7f146fe006c0 Level-0 table #212: 0 bytes OK
2024/08/12-22:24:19.321841 7f146fe006c0 Delete type=0 #210
2024/08/12-22:24:19.328866 7f146fe006c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/08/12-22:24:19.328902 7f146fe006c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/01/11-23:52:22.245022 7f2aef7fe6c0 Recovering log #64
2024/01/11-23:52:22.255738 7f2aef7fe6c0 Delete type=3 #62
2024/01/11-23:52:22.255808 7f2aef7fe6c0 Delete type=0 #64
2024/01/12-17:21:26.552390 7f2aee3ff6c0 Level-0 table #69: started
2024/01/12-17:21:26.553565 7f2aee3ff6c0 Level-0 table #69: 0 bytes OK
2024/01/12-17:21:26.587319 7f2aee3ff6c0 Delete type=0 #67
2024/01/12-17:21:26.658367 7f2aee3ff6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/01/12-17:21:26.658422 7f2aee3ff6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/08/12-14:24:59.720560 7f1474c006c0 Recovering log #203
2024/08/12-14:24:59.731538 7f1474c006c0 Delete type=3 #201
2024/08/12-14:24:59.731601 7f1474c006c0 Delete type=0 #203
2024/08/12-15:14:31.868072 7f146fe006c0 Level-0 table #208: started
2024/08/12-15:14:31.868103 7f146fe006c0 Level-0 table #208: 0 bytes OK
2024/08/12-15:14:31.874133 7f146fe006c0 Delete type=0 #206
2024/08/12-15:14:31.894963 7f146fe006c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
2024/08/12-15:14:31.895004 7f146fe006c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/boons/000294.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000163
MANIFEST-000303

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:00.159080 7f2aeeffd6c0 Recovering log #161
2024/01/12-17:58:00.204717 7f2aeeffd6c0 Delete type=3 #159
2024/01/12-17:58:00.204803 7f2aeeffd6c0 Delete type=0 #161
2024/01/12-18:33:25.003258 7f2aee3ff6c0 Level-0 table #166: started
2024/01/12-18:33:25.003305 7f2aee3ff6c0 Level-0 table #166: 0 bytes OK
2024/01/12-18:33:25.009363 7f2aee3ff6c0 Delete type=0 #164
2024/01/12-18:33:25.027341 7f2aee3ff6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.038682 7f2aee3ff6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/08/12-22:22:36.471458 7f1476a006c0 Recovering log #301
2024/08/12-22:22:36.483054 7f1476a006c0 Delete type=3 #299
2024/08/12-22:22:36.483128 7f1476a006c0 Delete type=0 #301
2024/08/12-22:24:19.266903 7f146fe006c0 Level-0 table #306: started
2024/08/12-22:24:19.266943 7f146fe006c0 Level-0 table #306: 0 bytes OK
2024/08/12-22:24:19.273091 7f146fe006c0 Delete type=0 #304
2024/08/12-22:24:19.273227 7f146fe006c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/08/12-22:24:19.273257 7f146fe006c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/01/11-23:52:22.142717 7f2aef7fe6c0 Recovering log #157
2024/01/11-23:52:22.153108 7f2aef7fe6c0 Delete type=3 #155
2024/01/11-23:52:22.153152 7f2aef7fe6c0 Delete type=0 #157
2024/01/12-17:21:26.236099 7f2aee3ff6c0 Level-0 table #162: started
2024/01/12-17:21:26.236153 7f2aee3ff6c0 Level-0 table #162: 0 bytes OK
2024/01/12-17:21:26.269940 7f2aee3ff6c0 Delete type=0 #160
2024/01/12-17:21:26.270146 7f2aee3ff6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/01/12-17:21:26.329363 7f2aee3ff6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/08/12-14:24:59.604150 7f1474c006c0 Recovering log #297
2024/08/12-14:24:59.615057 7f1474c006c0 Delete type=3 #295
2024/08/12-14:24:59.615112 7f1474c006c0 Delete type=0 #297
2024/08/12-15:14:31.833556 7f146fe006c0 Level-0 table #302: started
2024/08/12-15:14:31.833611 7f146fe006c0 Level-0 table #302: 0 bytes OK
2024/08/12-15:14:31.840431 7f146fe006c0 Delete type=0 #300
2024/08/12-15:14:31.840645 7f146fe006c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
2024/08/12-15:14:31.840677 7f146fe006c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/boons/MANIFEST-000303 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000163
MANIFEST-000303

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:00.207662 7f2d849ff6c0 Recovering log #161
2024/01/12-17:58:00.250586 7f2d849ff6c0 Delete type=3 #159
2024/01/12-17:58:00.250725 7f2d849ff6c0 Delete type=0 #161
2024/01/12-18:33:25.054071 7f2aee3ff6c0 Level-0 table #166: started
2024/01/12-18:33:25.054116 7f2aee3ff6c0 Level-0 table #166: 0 bytes OK
2024/01/12-18:33:25.061185 7f2aee3ff6c0 Delete type=0 #164
2024/01/12-18:33:25.075176 7f2aee3ff6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.081858 7f2aee3ff6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/08/12-22:22:36.487187 7f14760006c0 Recovering log #301
2024/08/12-22:22:36.497741 7f14760006c0 Delete type=3 #299
2024/08/12-22:22:36.497799 7f14760006c0 Delete type=0 #301
2024/08/12-22:24:19.252816 7f146fe006c0 Level-0 table #306: started
2024/08/12-22:24:19.252870 7f146fe006c0 Level-0 table #306: 0 bytes OK
2024/08/12-22:24:19.259892 7f146fe006c0 Delete type=0 #304
2024/08/12-22:24:19.273201 7f146fe006c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/08/12-22:24:19.273242 7f146fe006c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/01/11-23:52:22.156402 7f2aeeffd6c0 Recovering log #157
2024/01/11-23:52:22.165789 7f2aeeffd6c0 Delete type=3 #155
2024/01/11-23:52:22.165838 7f2aeeffd6c0 Delete type=0 #157
2024/01/12-17:21:26.379895 7f2aee3ff6c0 Level-0 table #162: started
2024/01/12-17:21:26.379934 7f2aee3ff6c0 Level-0 table #162: 0 bytes OK
2024/01/12-17:21:26.407918 7f2aee3ff6c0 Delete type=0 #160
2024/01/12-17:21:26.472414 7f2aee3ff6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/01/12-17:21:26.510034 7f2aee3ff6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/08/12-14:24:59.619377 7f14760006c0 Recovering log #297
2024/08/12-14:24:59.630095 7f14760006c0 Delete type=3 #295
2024/08/12-14:24:59.630243 7f14760006c0 Delete type=0 #297
2024/08/12-15:14:31.826328 7f146fe006c0 Level-0 table #302: started
2024/08/12-15:14:31.826360 7f146fe006c0 Level-0 table #302: 0 bytes OK
2024/08/12-15:14:31.833311 7f146fe006c0 Delete type=0 #300
2024/08/12-15:14:31.840635 7f146fe006c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
2024/08/12-15:14:31.840669 7f146fe006c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/careers/000294.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000163
MANIFEST-000303

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:00.301181 7f2aef7fe6c0 Recovering log #161
2024/01/12-17:58:00.347103 7f2aef7fe6c0 Delete type=3 #159
2024/01/12-17:58:00.347210 7f2aef7fe6c0 Delete type=0 #161
2024/01/12-18:33:25.067972 7f2aee3ff6c0 Level-0 table #166: started
2024/01/12-18:33:25.068005 7f2aee3ff6c0 Level-0 table #166: 0 bytes OK
2024/01/12-18:33:25.074990 7f2aee3ff6c0 Delete type=0 #164
2024/01/12-18:33:25.081825 7f2aee3ff6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.081885 7f2aee3ff6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/08/12-22:22:36.513300 7f1474c006c0 Recovering log #301
2024/08/12-22:22:36.524215 7f1474c006c0 Delete type=3 #299
2024/08/12-22:22:36.524271 7f1474c006c0 Delete type=0 #301
2024/08/12-22:24:19.294026 7f146fe006c0 Level-0 table #306: started
2024/08/12-22:24:19.294078 7f146fe006c0 Level-0 table #306: 0 bytes OK
2024/08/12-22:24:19.300326 7f146fe006c0 Delete type=0 #304
2024/08/12-22:24:19.300533 7f146fe006c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/08/12-22:24:19.300580 7f146fe006c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/01/11-23:52:22.180911 7f2aeffff6c0 Recovering log #157
2024/01/11-23:52:22.191351 7f2aeffff6c0 Delete type=3 #155
2024/01/11-23:52:22.191473 7f2aeffff6c0 Delete type=0 #157
2024/01/12-17:21:26.450798 7f2aee3ff6c0 Level-0 table #162: started
2024/01/12-17:21:26.450844 7f2aee3ff6c0 Level-0 table #162: 0 bytes OK
2024/01/12-17:21:26.471880 7f2aee3ff6c0 Delete type=0 #160
2024/01/12-17:21:26.510014 7f2aee3ff6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/01/12-17:21:26.510071 7f2aee3ff6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/08/12-14:24:59.647136 7f1476a006c0 Recovering log #297
2024/08/12-14:24:59.658341 7f1476a006c0 Delete type=3 #295
2024/08/12-14:24:59.658389 7f1476a006c0 Delete type=0 #297
2024/08/12-15:14:31.810317 7f146fe006c0 Level-0 table #302: started
2024/08/12-15:14:31.812977 7f146fe006c0 Level-0 table #302: 0 bytes OK
2024/08/12-15:14:31.819987 7f146fe006c0 Delete type=0 #300
2024/08/12-15:14:31.840600 7f146fe006c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
2024/08/12-15:14:31.840654 7f146fe006c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000163
MANIFEST-000283

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:00.708420 7f2aef7fe6c0 Recovering log #161
2024/01/12-17:58:00.758343 7f2aef7fe6c0 Delete type=3 #159
2024/01/12-17:58:00.758928 7f2aef7fe6c0 Delete type=0 #161
2024/01/12-18:33:25.133341 7f2aee3ff6c0 Level-0 table #166: started
2024/01/12-18:33:25.133378 7f2aee3ff6c0 Level-0 table #166: 0 bytes OK
2024/01/12-18:33:25.139690 7f2aee3ff6c0 Delete type=0 #164
2024/01/12-18:33:25.139886 7f2aee3ff6c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.139935 7f2aee3ff6c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/07/08-22:24:33.833224 7fb8320006c0 Recovering log #281
2024/07/08-22:24:33.895807 7fb8320006c0 Delete type=3 #279
2024/07/08-22:24:33.895934 7fb8320006c0 Delete type=0 #281
2024/07/08-22:24:52.466387 7fb82be006c0 Level-0 table #286: started
2024/07/08-22:24:52.466440 7fb82be006c0 Level-0 table #286: 0 bytes OK
2024/07/08-22:24:52.472857 7fb82be006c0 Delete type=0 #284
2024/07/08-22:24:52.480332 7fb82be006c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/07/08-22:24:52.480427 7fb82be006c0 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 @@
2024/01/11-23:52:22.282439 7f2aeffff6c0 Recovering log #157
2024/01/11-23:52:22.293099 7f2aeffff6c0 Delete type=3 #155
2024/01/11-23:52:22.293221 7f2aeffff6c0 Delete type=0 #157
2024/01/12-17:21:26.685395 7f2aee3ff6c0 Level-0 table #162: started
2024/01/12-17:21:26.685435 7f2aee3ff6c0 Level-0 table #162: 0 bytes OK
2024/01/12-17:21:26.712975 7f2aee3ff6c0 Delete type=0 #160
2024/01/12-17:21:26.786099 7f2aee3ff6c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/01/12-17:21:26.786181 7f2aee3ff6c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/07/08-22:22:58.298438 7fb832a006c0 Recovering log #277
2024/07/08-22:22:58.309146 7fb832a006c0 Delete type=3 #275
2024/07/08-22:22:58.309315 7fb832a006c0 Delete type=0 #277
2024/07/08-22:24:02.597516 7fb82be006c0 Level-0 table #282: started
2024/07/08-22:24:02.597563 7fb82be006c0 Level-0 table #282: 0 bytes OK
2024/07/08-22:24:02.685456 7fb82be006c0 Delete type=0 #280
2024/07/08-22:24:02.775806 7fb82be006c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
2024/07/08-22:24:02.775850 7fb82be006c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/creatures/000203.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000163
MANIFEST-000208

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:01.104161 7f2d849ff6c0 Recovering log #161
2024/01/12-17:58:01.153283 7f2d849ff6c0 Delete type=3 #159
2024/01/12-17:58:01.153485 7f2d849ff6c0 Delete type=0 #161
2024/01/12-18:33:25.169822 7f2aee3ff6c0 Level-0 table #166: started
2024/01/12-18:33:25.169874 7f2aee3ff6c0 Level-0 table #166: 0 bytes OK
2024/01/12-18:33:25.176198 7f2aee3ff6c0 Delete type=0 #164
2024/01/12-18:33:25.199264 7f2aee3ff6c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.199362 7f2aee3ff6c0 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 @@
2024/01/11-23:52:22.387799 7f2aeeffd6c0 Recovering log #157
2024/01/11-23:52:22.398078 7f2aeeffd6c0 Delete type=3 #155
2024/01/11-23:52:22.398208 7f2aeeffd6c0 Delete type=0 #157
2024/01/12-17:21:26.929290 7f2aee3ff6c0 Level-0 table #162: started
2024/01/12-17:21:26.929361 7f2aee3ff6c0 Level-0 table #162: 0 bytes OK
2024/01/12-17:21:26.964576 7f2aee3ff6c0 Delete type=0 #160
2024/01/12-17:21:27.068192 7f2aee3ff6c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
2024/01/12-17:21:27.068263 7f2aee3ff6c0 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-000162
MANIFEST-000301

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:01.054556 7f2aeeffd6c0 Recovering log #160
2024/01/12-17:58:01.101242 7f2aeeffd6c0 Delete type=3 #158
2024/01/12-17:58:01.101327 7f2aeeffd6c0 Delete type=0 #160
2024/01/12-18:33:25.184427 7f2aee3ff6c0 Level-0 table #165: started
2024/01/12-18:33:25.184480 7f2aee3ff6c0 Level-0 table #165: 0 bytes OK
2024/01/12-18:33:25.191074 7f2aee3ff6c0 Delete type=0 #163
2024/01/12-18:33:25.199320 7f2aee3ff6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.199403 7f2aee3ff6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/08/12-22:22:36.709096 7f14760006c0 Recovering log #299
2024/08/12-22:22:36.719849 7f14760006c0 Delete type=3 #297
2024/08/12-22:22:36.719957 7f14760006c0 Delete type=0 #299
2024/08/12-22:24:19.364925 7f146fe006c0 Level-0 table #304: started
2024/08/12-22:24:19.364969 7f146fe006c0 Level-0 table #304: 0 bytes OK
2024/08/12-22:24:19.372290 7f146fe006c0 Delete type=0 #302
2024/08/12-22:24:19.389594 7f146fe006c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/08/12-22:24:19.389641 7f146fe006c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/01/11-23:52:22.375443 7f2aef7fe6c0 Recovering log #156
2024/01/11-23:52:22.385423 7f2aef7fe6c0 Delete type=3 #154
2024/01/11-23:52:22.385520 7f2aef7fe6c0 Delete type=0 #156
2024/01/12-17:21:26.964789 7f2aee3ff6c0 Level-0 table #161: started
2024/01/12-17:21:26.964843 7f2aee3ff6c0 Level-0 table #161: 0 bytes OK
2024/01/12-17:21:27.002161 7f2aee3ff6c0 Delete type=0 #159
2024/01/12-17:21:27.068219 7f2aee3ff6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/01/12-17:21:27.068283 7f2aee3ff6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/08/12-14:24:59.845850 7f14760006c0 Recovering log #295
2024/08/12-14:24:59.856716 7f14760006c0 Delete type=3 #293
2024/08/12-14:24:59.856868 7f14760006c0 Delete type=0 #295
2024/08/12-15:14:31.940476 7f146fe006c0 Level-0 table #300: started
2024/08/12-15:14:31.940532 7f146fe006c0 Level-0 table #300: 0 bytes OK
2024/08/12-15:14:31.946997 7f146fe006c0 Delete type=0 #298
2024/08/12-15:14:31.953834 7f146fe006c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
2024/08/12-15:14:31.965266 7f146fe006c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

BIN
packs/equipment/000295.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000164
MANIFEST-000304

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:00.455820 7f2aeffff6c0 Recovering log #162
2024/01/12-17:58:00.511511 7f2aeffff6c0 Delete type=3 #160
2024/01/12-17:58:00.511604 7f2aeffff6c0 Delete type=0 #162
2024/01/12-18:33:25.096428 7f2aee3ff6c0 Level-0 table #167: started
2024/01/12-18:33:25.096474 7f2aee3ff6c0 Level-0 table #167: 0 bytes OK
2024/01/12-18:33:25.102831 7f2aee3ff6c0 Delete type=0 #165
2024/01/12-18:33:25.111155 7f2aee3ff6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.111193 7f2aee3ff6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/08/12-22:22:36.555704 7f14756006c0 Recovering log #302
2024/08/12-22:22:36.566632 7f14756006c0 Delete type=3 #300
2024/08/12-22:22:36.566685 7f14756006c0 Delete type=0 #302
2024/08/12-22:24:19.273389 7f146fe006c0 Level-0 table #307: started
2024/08/12-22:24:19.273414 7f146fe006c0 Level-0 table #307: 0 bytes OK
2024/08/12-22:24:19.279499 7f146fe006c0 Delete type=0 #305
2024/08/12-22:24:19.300478 7f146fe006c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/08/12-22:24:19.300735 7f146fe006c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/01/11-23:52:22.220063 7f2d849ff6c0 Recovering log #158
2024/01/11-23:52:22.229888 7f2d849ff6c0 Delete type=3 #156
2024/01/11-23:52:22.230000 7f2d849ff6c0 Delete type=0 #158
2024/01/12-17:21:26.616976 7f2aee3ff6c0 Level-0 table #163: started
2024/01/12-17:21:26.617027 7f2aee3ff6c0 Level-0 table #163: 0 bytes OK
2024/01/12-17:21:26.658165 7f2aee3ff6c0 Delete type=0 #161
2024/01/12-17:21:26.658399 7f2aee3ff6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/01/12-17:21:26.658448 7f2aee3ff6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/08/12-14:24:59.689555 7f14756006c0 Recovering log #298
2024/08/12-14:24:59.700195 7f14756006c0 Delete type=3 #296
2024/08/12-14:24:59.700248 7f14756006c0 Delete type=0 #298
2024/08/12-15:14:31.853236 7f146fe006c0 Level-0 table #303: started
2024/08/12-15:14:31.853280 7f146fe006c0 Level-0 table #303: 0 bytes OK
2024/08/12-15:14:31.860223 7f146fe006c0 Delete type=0 #301
2024/08/12-15:14:31.867937 7f146fe006c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
2024/08/12-15:14:31.867974 7f146fe006c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 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-000162
MANIFEST-000302

View File

@ -1,8 +1,8 @@
2024/01/12-17:58:00.918780 7f2d849ff6c0 Recovering log #160
2024/01/12-17:58:00.957088 7f2d849ff6c0 Delete type=3 #158
2024/01/12-17:58:00.957195 7f2d849ff6c0 Delete type=0 #160
2024/01/12-18:33:25.147904 7f2aee3ff6c0 Level-0 table #165: started
2024/01/12-18:33:25.147965 7f2aee3ff6c0 Level-0 table #165: 0 bytes OK
2024/01/12-18:33:25.154391 7f2aee3ff6c0 Delete type=0 #163
2024/01/12-18:33:25.169583 7f2aee3ff6c0 Manual compaction at level-0 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/01/12-18:33:25.169641 7f2aee3ff6c0 Manual compaction at level-1 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/08/12-22:22:36.669427 7f14756006c0 Recovering log #300
2024/08/12-22:22:36.679352 7f14756006c0 Delete type=3 #298
2024/08/12-22:22:36.679408 7f14756006c0 Delete type=0 #300
2024/08/12-22:24:19.343213 7f146fe006c0 Level-0 table #305: started
2024/08/12-22:24:19.343237 7f146fe006c0 Level-0 table #305: 0 bytes OK
2024/08/12-22:24:19.350586 7f146fe006c0 Delete type=0 #303
2024/08/12-22:24:19.357356 7f146fe006c0 Manual compaction at level-0 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/08/12-22:24:19.357462 7f146fe006c0 Manual compaction at level-1 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/01/11-23:52:22.335396 7f2aeeffd6c0 Recovering log #156
2024/01/11-23:52:22.346449 7f2aeeffd6c0 Delete type=3 #154
2024/01/11-23:52:22.346560 7f2aeeffd6c0 Delete type=0 #156
2024/01/12-17:21:26.786343 7f2aee3ff6c0 Level-0 table #161: started
2024/01/12-17:21:26.790645 7f2aee3ff6c0 Level-0 table #161: 0 bytes OK
2024/01/12-17:21:26.827682 7f2aee3ff6c0 Delete type=0 #159
2024/01/12-17:21:26.928985 7f2aee3ff6c0 Manual compaction at level-0 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/01/12-17:21:26.929106 7f2aee3ff6c0 Manual compaction at level-1 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/08/12-14:24:59.805392 7f14756006c0 Recovering log #296
2024/08/12-14:24:59.815257 7f14756006c0 Delete type=3 #294
2024/08/12-14:24:59.815311 7f14756006c0 Delete type=0 #296
2024/08/12-15:14:31.908687 7f146fe006c0 Level-0 table #301: started
2024/08/12-15:14:31.908731 7f146fe006c0 Level-0 table #301: 0 bytes OK
2024/08/12-15:14:31.915933 7f146fe006c0 Delete type=0 #299
2024/08/12-15:14:31.922743 7f146fe006c0 Manual compaction at level-0 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)
2024/08/12-15:14:31.922808 7f146fe006c0 Manual compaction at level-1 from '!items!4EmWdK1cv7EX0X3E' @ 72057594037927935 : 1 .. '!items!vGydqADwTsHZ9B3j' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
packs/flaws/000294.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000163
MANIFEST-000303

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