Compare commits
21 Commits
fvtt-mourn
...
v10
Author | SHA1 | Date | |
---|---|---|---|
580a2ccaba | |||
699dba5511 | |||
aac552102a | |||
4762dc33ac | |||
0a030460e4 | |||
ed2dc58680 | |||
9c20f277ea | |||
2a8617d781 | |||
91ad26730a | |||
e1816b3dd7 | |||
c48401a199 | |||
f487908ecd | |||
e9dc31ada1 | |||
e504427dbb | |||
6aa63f9a98 | |||
861aa19637 | |||
ddb3f9dee1 | |||
da074d6ea1 | |||
1c0c722bd0 | |||
fef42b7093 | |||
a63ec19362 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.history/
|
|
@ -10,7 +10,7 @@ Books are mandatory to play and are available at : http://www.titam-france.fr
|
|||
|
||||
Système non-officiel pour le JDR Mournblade (Titam France).
|
||||
|
||||
Ce système a été autorisé par Ludospherik ( http://www.ludospherik.fr/ ), merci à eux !
|
||||
Ce système a été autorisé par Le Département des Sombres Projets, merci à eux !
|
||||
|
||||
Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http://www.titam-france.fr
|
||||
|
||||
|
|
BIN
assets/ui/landing_page_mournblade.webp
Normal file
BIN
assets/ui/landing_page_mournblade.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 380 KiB |
28
lang/fr.json
Normal file
28
lang/fr.json
Normal file
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"personnage": "Personnage",
|
||||
"creature": "Créature"
|
||||
},
|
||||
"Item": {
|
||||
"arme": "Arme",
|
||||
"competence": "Compétence",
|
||||
"protection": "Protection",
|
||||
"pacte": "Pacte",
|
||||
"traitchaotique": "Trait Chaotique",
|
||||
"monnaie": "Monnaie",
|
||||
"don": "Don",
|
||||
"tendance": "Tendance",
|
||||
"rune": "Rune",
|
||||
"equipement": "Equipement",
|
||||
"capacite": "Capacité",
|
||||
"origine": "Origine",
|
||||
"heritage": "Héritage",
|
||||
"metier": "Métier",
|
||||
"runeeffect": "Effet de Rune",
|
||||
"bouclier": "Bouclier",
|
||||
"modifier": "Modificateur",
|
||||
"traitespece": "Trait d'Espèce"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade/templates/actor-sheet.html",
|
||||
width: 640,
|
||||
|
@ -25,7 +25,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let actorData = objectData
|
||||
|
||||
let formData = {
|
||||
|
@ -40,19 +40,29 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills(),
|
||||
armes: duplicate(this.actor.getWeapons()),
|
||||
protections: duplicate(this.actor.getArmors()),
|
||||
dons: duplicate(this.actor.getDons()),
|
||||
armes: foundry.utils.duplicate(this.actor.getWeapons()),
|
||||
protections: foundry.utils.duplicate(this.actor.getArmors()),
|
||||
dons: foundry.utils.duplicate(this.actor.getDons()),
|
||||
pactes: foundry.utils.duplicate(this.actor.getPactes()),
|
||||
alignement: this.actor.getAlignement(),
|
||||
aspect: this.actor.getAspect(),
|
||||
marge: this.actor.getMarge(),
|
||||
tendances:duplicate(this.actor.getTendances()),
|
||||
runes:duplicate(this.actor.getRunes()),
|
||||
origine: duplicate(this.actor.getOrigine() || {}),
|
||||
heritage: duplicate(this.actor.getHeritage() || {}),
|
||||
metier: duplicate(this.actor.getMetier() || {}),
|
||||
tendances:foundry.utils.duplicate(this.actor.getTendances()),
|
||||
runes:foundry.utils.duplicate(this.actor.getRunes()),
|
||||
traitsChaotiques:foundry.utils.duplicate(this.actor.getTraitsChaotiques()),
|
||||
traitsEspeces: foundry.utils.duplicate(this.actor.getTraitsEspeces()),
|
||||
origine: foundry.utils.duplicate(this.actor.getOrigine() || {}),
|
||||
heritage: foundry.utils.duplicate(this.actor.getHeritage() || {}),
|
||||
metier: foundry.utils.duplicate(this.actor.getMetier() || {}),
|
||||
combat: this.actor.getCombatValues(),
|
||||
equipements: duplicate(this.actor.getEquipments()),
|
||||
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
|
||||
modifiers: foundry.utils.duplicate(this.actor.getModifiers()),
|
||||
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
|
||||
runeEffects: foundry.utils.duplicate(this.actor.getRuneEffects()),
|
||||
config: game.system.mournblade.config,
|
||||
protectionTotal: this.actor.getProtectionTotal(),
|
||||
santeMalus: this.actor.getStatusMalus(),
|
||||
ameMalus: this.actor.getAmeMalus(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
|
@ -126,11 +136,44 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeOffensif(armeId)
|
||||
})
|
||||
html.find('.roll-assomer').click((event) => {
|
||||
this.actor.rollAssomer()
|
||||
})
|
||||
html.find('.roll-fuir').click((event) => {
|
||||
this.actor.rollFuir()
|
||||
})
|
||||
html.find('.roll-immobiliser').click((event) => {
|
||||
this.actor.rollImmobiliser()
|
||||
})
|
||||
html.find('.roll-arme-special').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeSpecial(armeId)
|
||||
})
|
||||
|
||||
html.find('.roll-arme-degats').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeDegats(armeId)
|
||||
})
|
||||
html.find('.quantity-modify').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const value = Number($(event.currentTarget).data("quantite-value"))
|
||||
this.actor.incDecQuantity( li.data("item-id"), value );
|
||||
})
|
||||
html.find('.item-add').click((event) => {
|
||||
const itemType = $(event.currentTarget).data("type")
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||
})
|
||||
html.find('.sante-modify').click((event) => {
|
||||
const santeType = $(event.currentTarget).data("type")
|
||||
const value = $(event.currentTarget).data("value")
|
||||
this.actor.incDecSante(santeType, value, false)
|
||||
})
|
||||
html.find('.ame-modify').click((event) => {
|
||||
const value = $(event.currentTarget).data("value")
|
||||
this.actor.incDecAme(value)
|
||||
})
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
|
|
|
@ -31,7 +31,7 @@ export class MournbladeActor extends Actor {
|
|||
if (data instanceof Array) {
|
||||
return super.create(data, options);
|
||||
}
|
||||
// If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
|
||||
// If the created actor has items (only applicable to foundry.utils.duplicated actors) bypass the new actor creation logic
|
||||
if (data.items) {
|
||||
let actor = super.create(data, options);
|
||||
return actor;
|
||||
|
@ -41,29 +41,42 @@ export class MournbladeActor extends Actor {
|
|||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills")
|
||||
data.items = skills.map(i => i.toObject())
|
||||
}
|
||||
if (data.type == 'pnj') {
|
||||
if (data.type == 'creature') {
|
||||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills-creatures")
|
||||
data.items = skills.map(i => i.toObject())
|
||||
data.items.push({ name: "Arme naturelle 1", type: 'arme', img: "systems/fvtt-mournblade/assets/icons/arme.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
|
||||
data.items.push({ name: "Arme naturelle 2", type: 'arme', img: "systems/fvtt-mournblade/assets/icons/arme.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
|
||||
}
|
||||
|
||||
|
||||
return super.create(data, options);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
setModifier(name, type, value) {
|
||||
this.createEmbeddedDocuments("Item", [{ type: "modifier", name: name, system: { modifiertype: type, value: value } }])
|
||||
ui.notifications.info("Le modificateur " + name + " a été ajouté à " + this.name + ".")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareArme(arme) {
|
||||
arme = duplicate(arme)
|
||||
arme = foundry.utils.duplicate(arme)
|
||||
let combat = this.getCombatValues()
|
||||
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
|
||||
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
arme.system.isMelee = true
|
||||
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
arme.system.attrKey = "pui"
|
||||
arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal
|
||||
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
|
||||
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + combat.attaqueModifier
|
||||
if (arme.system.isdefense) {
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
|
||||
}
|
||||
}
|
||||
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
|
||||
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
|
||||
arme.system.isDistance = true
|
||||
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
|
||||
arme.system.attrKey = "adr"
|
||||
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
|
||||
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + combat.attaqueModifier
|
||||
arme.system.totalDegats = arme.system.degats
|
||||
if (arme.system.isdefense) {
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
|
||||
|
@ -73,9 +86,9 @@ export class MournbladeActor extends Actor {
|
|||
}
|
||||
/* -------------------------------------------- */
|
||||
prepareBouclier(bouclier) {
|
||||
bouclier = duplicate(bouclier)
|
||||
bouclier = foundry.utils.duplicate(bouclier)
|
||||
let combat = this.getCombatValues()
|
||||
bouclier.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
bouclier.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
bouclier.system.attrKey = "pui"
|
||||
bouclier.system.totalDegats = bouclier.system.degats + "+" + combat.bonusDegatsTotal
|
||||
bouclier.system.totalOffensif = this.system.attributs.pui.value + bouclier.system.competence.system.niveau
|
||||
|
@ -96,27 +109,62 @@ export class MournbladeActor extends Actor {
|
|||
armes.push(this.prepareBouclier(arme))
|
||||
}
|
||||
}
|
||||
MournbladeUtility.sortArrayObjectsByName(armes)
|
||||
return armes
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDons() {
|
||||
return this.items.filter(item => item.type == "don")
|
||||
getModifiersForRoll() {
|
||||
let modifiers = []
|
||||
for (let mod of this.items) {
|
||||
if (mod.type == "modifier" && mod.system.modifiertype == "roll") {
|
||||
let modObj = mod.toObject()
|
||||
modObj.system.apply = true
|
||||
modifiers.push(modObj)
|
||||
}
|
||||
}
|
||||
MournbladeUtility.sortArrayObjectsByName(modifiers)
|
||||
return modifiers
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getItemSorted(types) {
|
||||
let items = this.items.filter(item => types.includes(item.type)) || []
|
||||
MournbladeUtility.sortArrayObjectsByName(items)
|
||||
return items
|
||||
}
|
||||
getDons() {
|
||||
return this.getItemSorted(["don"])
|
||||
}
|
||||
getPactes() {
|
||||
return this.getItemSorted(["pacte"])
|
||||
}
|
||||
getTendances() {
|
||||
return this.items.filter(item => item.type == "tendance")
|
||||
return this.getItemSorted(["tendance"])
|
||||
}
|
||||
getRunes() {
|
||||
return this.items.filter(item => item.type == "rune")
|
||||
return this.getItemSorted(["rune"])
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getEquipments() {
|
||||
return this.items.filter(item => item.type == "equipement")
|
||||
return this.getItemSorted(["equipement"])
|
||||
}
|
||||
getModifiers() {
|
||||
return this.getItemSorted(["modifier"])
|
||||
}
|
||||
getTraitsChaotiques() {
|
||||
return this.getItemSorted(["traitchaotique"])
|
||||
}
|
||||
getTraitsEspeces() {
|
||||
return this.getItemSorted(["traitespece"])
|
||||
}
|
||||
getMonnaies() {
|
||||
return this.getItemSorted(["monnaie"])
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getArmors() {
|
||||
return this.items.filter(item => item.type == "protection")
|
||||
return this.getItemSorted(["protection"])
|
||||
}
|
||||
getRuneEffects() {
|
||||
return this.getItemSorted(["runeeffect"])
|
||||
}
|
||||
getOrigine() {
|
||||
return this.items.find(item => item.type == "origine")
|
||||
|
@ -131,7 +179,7 @@ export class MournbladeActor extends Actor {
|
|||
getSkills() {
|
||||
let comp = []
|
||||
for (let item of this.items) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
if (item.type == "competence") {
|
||||
item.system.attribut1total = item.system.niveau + (this.system.attributs[item.system.attribut1]?.value || 0)
|
||||
item.system.attribut2total = item.system.niveau + (this.system.attributs[item.system.attribut2]?.value || 0)
|
||||
|
@ -147,17 +195,19 @@ export class MournbladeActor extends Actor {
|
|||
comp.push(item)
|
||||
}
|
||||
}
|
||||
return comp.sort(function (a, b) {
|
||||
let fa = a.name.toLowerCase(),
|
||||
fb = b.name.toLowerCase();
|
||||
if (fa < fb) {
|
||||
return -1;
|
||||
MournbladeUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
if (fa > fb) {
|
||||
return 1;
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getProtectionTotal() {
|
||||
let protection = 0
|
||||
for (let item of this.items) {
|
||||
if (item.type == "protection" && item.system.equipped) {
|
||||
protection += item.system.protection
|
||||
}
|
||||
return 0;
|
||||
})
|
||||
}
|
||||
return protection
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -165,7 +215,7 @@ export class MournbladeActor extends Actor {
|
|||
return (this.system.balance.loi > this.system.balance.chaos) ? this.system.balance.loi : this.system.balance.chaos
|
||||
}
|
||||
getMarge() {
|
||||
return Math.abs( this.system.balance.loi - this.system.balance.chaos)
|
||||
return Math.abs(this.system.balance.loi - this.system.balance.chaos)
|
||||
}
|
||||
getAlignement() {
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? "loyal" : "chaotique"
|
||||
|
@ -183,7 +233,14 @@ export class MournbladeActor extends Actor {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
getCombatValues() {
|
||||
let defenserModifier = 0
|
||||
this.items.filter(item => item.type == "modifier" && item.system.modifiertype == "defense").map(e => defenserModifier += e.system.value)
|
||||
let attaqueModifier = 0
|
||||
this.items.filter(item => item.type == "modifier" && item.system.modifiertype == "attaque").map(e => attaqueModifier += e.system.value)
|
||||
|
||||
let combat = {
|
||||
defenserModifier,
|
||||
attaqueModifier,
|
||||
initBase: this.system.attributs.adr.value,
|
||||
initTotal: this.system.attributs.adr.value + this.system.combat.initbonus,
|
||||
bonusDegats: this.getBonusDegats(),
|
||||
|
@ -191,7 +248,7 @@ export class MournbladeActor extends Actor {
|
|||
vitesseBase: this.getVitesseBase(),
|
||||
vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus,
|
||||
defenseBase: this.getDefenseBase(),
|
||||
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus
|
||||
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + defenserModifier
|
||||
}
|
||||
return combat
|
||||
}
|
||||
|
@ -232,7 +289,7 @@ export class MournbladeActor extends Actor {
|
|||
getItemById(id) {
|
||||
let item = this.items.find(item => item.id == id);
|
||||
if (item) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
@ -240,12 +297,49 @@ export class MournbladeActor extends Actor {
|
|||
/* -------------------------------------------- */
|
||||
async equipItem(itemId) {
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
if (item && item.system) {
|
||||
if (item?.system) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped }
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getStatusMalus() {
|
||||
if (this.system.biodata.ignoresantemalus) {
|
||||
return 0
|
||||
}
|
||||
|
||||
let malusL = 0
|
||||
let malusNL = 0
|
||||
if (this.system.sante.base - this.system.sante.letaux < 10) {
|
||||
malusL = -2
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.letaux < 5) {
|
||||
malusL = -5
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.nonletaux < 10) {
|
||||
malusNL = -2
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.nonletaux < 5) {
|
||||
malusNL = -5
|
||||
}
|
||||
return Math.min(malusL, malusNL)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getAmeMalus() {
|
||||
if (this.system.biodata.ignoreamemalus) {
|
||||
return 0
|
||||
}
|
||||
let malusA = 0
|
||||
if (this.system.ame.currentmax - this.system.ame.value < 10) {
|
||||
malusA = -2
|
||||
}
|
||||
if (this.system.ame.currentmax - this.system.ame.value < 5) {
|
||||
malusA = -5
|
||||
}
|
||||
return malusA
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
editItemField(itemId, itemType, itemField, dataType, value) {
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
|
@ -261,6 +355,44 @@ export class MournbladeActor extends Actor {
|
|||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incDecSante(type, value, applyArmure = true) {
|
||||
value = Number(value)
|
||||
if (value && applyArmure) {
|
||||
let protection = this.getProtectionTotal()
|
||||
value -= protection
|
||||
value = Math.max(0, Number(value))
|
||||
}
|
||||
if (value) {
|
||||
let newSante = foundry.utils.duplicate(this.system.sante)
|
||||
newSante[type] += Number(value)
|
||||
newSante[type] = Math.max(0, newSante[type])
|
||||
if (newSante[type] > this.system.sante.base) {
|
||||
value -= this.system.sante.base - newSante[type]
|
||||
newSante[type] = this.system.sante.base
|
||||
} else {
|
||||
value = 0
|
||||
}
|
||||
newSante[type] = Math.min(newSante[type], newSante.base)
|
||||
if (value && type == "nonletaux") {
|
||||
newSante["letaux"] += value
|
||||
}
|
||||
this.update({ 'system.sante': newSante })
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incDecAme(value) {
|
||||
value = Number(value)
|
||||
if (value) {
|
||||
let newAme = foundry.utils.duplicate(this.system.ame)
|
||||
newAme.value += Number(value)
|
||||
newAme.value = Math.max(0, newAme.value)
|
||||
newAme.value = Math.min(newAme.value, newAme.currentmax)
|
||||
this.update({ 'system.ame': newAme })
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonneAventure() {
|
||||
return this.system.bonneaventure.actuelle
|
||||
|
@ -291,13 +423,13 @@ export class MournbladeActor extends Actor {
|
|||
}
|
||||
/* -------------------------------------------- */
|
||||
subPointsAme(runeMode, value) {
|
||||
let ame = duplicate(this.system.ame)
|
||||
if(runeMode == "prononcer") {
|
||||
ame.value -= value
|
||||
let ame = foundry.utils.duplicate(this.system.ame)
|
||||
if (runeMode == "prononcer") {
|
||||
ame.value += value
|
||||
} else {
|
||||
ame.currentmax -= value
|
||||
}
|
||||
this.update( {'system.ame': ame})
|
||||
this.update({ 'system.ame': ame })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -318,6 +450,9 @@ export class MournbladeActor extends Actor {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
getBonusDegats() {
|
||||
if (this.type == "creature") {
|
||||
return 0
|
||||
}
|
||||
return __degatsBonus[this.system.attributs.pui.value]
|
||||
}
|
||||
|
||||
|
@ -334,13 +469,13 @@ export class MournbladeActor extends Actor {
|
|||
getSubActors() {
|
||||
let subActors = [];
|
||||
for (let id of this.system.subactors) {
|
||||
subActors.push(duplicate(game.actors.get(id)));
|
||||
subActors.push(foundry.utils.duplicate(game.actors.get(id)));
|
||||
}
|
||||
return subActors;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async addSubActor(subActorId) {
|
||||
let subActors = duplicate(this.system.subactors);
|
||||
let subActors = foundry.utils.duplicate(this.system.subactors);
|
||||
subActors.push(subActorId);
|
||||
await this.update({ 'system.subactors': subActors });
|
||||
}
|
||||
|
@ -359,11 +494,10 @@ export class MournbladeActor extends Actor {
|
|||
async incDecQuantity(objetId, incDec = 0) {
|
||||
let objetQ = this.items.get(objetId)
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.quantity + incDec;
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]); // pdates one EmbeddedEntity
|
||||
let newQ = objetQ.system.quantite + incDec;
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCompetence(compId) {
|
||||
return this.items.get(compId)
|
||||
|
@ -372,34 +506,55 @@ export class MournbladeActor extends Actor {
|
|||
/* -------------------------------------------- */
|
||||
async setPredilectionUsed(compId, predIdx) {
|
||||
let comp = this.items.get(compId)
|
||||
let pred = duplicate(comp.system.predilections)
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
pred[predIdx].used = true
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore( ) {
|
||||
getInitiativeScore() {
|
||||
return Number(this.system.attributs.adr.value) + Number(this.system.combat.initbonus)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getBestDefenseValue() {
|
||||
let defenseList = this.items.filter(item => (item.type =="arme" || item.type == "bouclier") && item.system.equipped)
|
||||
let defenseList = this.items.filter(item => (item.type == "arme" || item.type == "bouclier") && item.system.equipped)
|
||||
let maxDef = 0
|
||||
let bestArme
|
||||
for(let arme of defenseList) {
|
||||
for (let arme of defenseList) {
|
||||
if (arme.type == "arme" && arme.system.isdefense) {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier" ) {
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
if ( arme.system.totalDefensif > maxDef) {
|
||||
if (arme.system.totalDefensif > maxDef) {
|
||||
maxDef = arme.system.totalDefensif
|
||||
bestArme = duplicate(arme)
|
||||
bestArme = foundry.utils.duplicate(arme)
|
||||
}
|
||||
}
|
||||
return bestArme
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
depenseRessources(arme) {
|
||||
if (arme.system.nbressources && Number(arme.system.nbressources) > 0) {
|
||||
if (this.type == "creature") {
|
||||
let ressources = foundry.utils.duplicate(this.system.ressources)
|
||||
if (Number(ressources.value) >= Number(arme.system.nbressources)) {
|
||||
ressources.value -= arme.system.nbressources
|
||||
this.update({ 'system.ressources': ressources })
|
||||
ChatMessage.create({
|
||||
content: "L'utilisation de la capacité/arme a dépensé " + arme.system.nbressources + " ressources.",
|
||||
whisper: game.user._id,
|
||||
user: game.user._id
|
||||
});
|
||||
} else {
|
||||
ui.notifications.warn("Points de ressources insuffisants.")
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Les ressources ne sont pas disponibles pour les personnages.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCommonRollData(attrKey = undefined, compId = undefined, compName = undefined) {
|
||||
|
@ -407,24 +562,34 @@ export class MournbladeActor extends Actor {
|
|||
rollData.alias = this.name
|
||||
rollData.actorImg = this.img
|
||||
rollData.actorId = this.id
|
||||
rollData.tokenId = this.token?.id
|
||||
rollData.img = this.img
|
||||
rollData.canEclatDoubleD20 = this.canEclatDoubleD20()
|
||||
rollData.doubleD20 = false
|
||||
rollData.attributs = MournbladeUtility.getAttributs()
|
||||
rollData.selectDifficulte = true
|
||||
rollData.malusSante = this.getStatusMalus() + this.system.sante.malusmanuel
|
||||
rollData.malusAme = this.getAmeMalus()
|
||||
rollData.modifiers = this.getModifiersForRoll()
|
||||
rollData.desavantages = {}
|
||||
rollData.isMonte = this.system.combat.monte
|
||||
if (rollData.isMonte) {
|
||||
rollData.config.attaques["chargecavalerie"] = "Charge de cavalerie"
|
||||
}
|
||||
|
||||
if (attrKey) {
|
||||
rollData.attrKey = attrKey
|
||||
if (attrKey != "tochoose") {
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp"
|
||||
rollData.attr = duplicate(this.system.attributs[attrKey])
|
||||
rollData.attr = foundry.utils.duplicate(this.system.attributs[attrKey])
|
||||
}
|
||||
}
|
||||
if (compId) {
|
||||
rollData.competence = duplicate(this.items.get(compId) || {})
|
||||
rollData.competence = foundry.utils.duplicate(this.items.get(compId) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
if (compName) {
|
||||
rollData.competence = duplicate(this.items.find( item => item.name.toLowerCase() == compName.toLowerCase()) || {})
|
||||
rollData.competence = foundry.utils.duplicate(this.items.find(item => item.name.toLowerCase() == compName.toLowerCase()) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
return rollData
|
||||
|
@ -433,7 +598,6 @@ export class MournbladeActor extends Actor {
|
|||
/* -------------------------------------------- */
|
||||
async rollAttribut(attrKey) {
|
||||
let rollData = this.getCommonRollData(attrKey)
|
||||
console.log("RollDatra", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
@ -449,12 +613,12 @@ export class MournbladeActor extends Actor {
|
|||
/* -------------------------------------------- */
|
||||
async rollRune(runeId) {
|
||||
let comp = this.items.find(comp => comp.type == "competence" && comp.name.toLowerCase() == "savoir : runes")
|
||||
if ( !comp) {
|
||||
if (!comp) {
|
||||
ui.notifications.warn("La compétence Savoirs : Runes n'a pas été trouvée, abandon.")
|
||||
return
|
||||
}
|
||||
let rollData = this.getCommonRollData("cla", undefined, "Savoir : Runes")
|
||||
rollData.rune = duplicate(this.items.get(runeId) || {})
|
||||
rollData.rune = foundry.utils.duplicate(this.items.get(runeId) || {})
|
||||
rollData.difficulte = rollData.rune?.system?.seuil || 0
|
||||
rollData.runemode = "prononcer"
|
||||
rollData.runeame = 1
|
||||
|
@ -474,11 +638,77 @@ export class MournbladeActor extends Actor {
|
|||
}
|
||||
let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id)
|
||||
rollData.arme = arme
|
||||
rollData.typeAttaque = "assaut"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
rollData.visee = false
|
||||
rollData.ciblecourt = false
|
||||
rollData.cibleconsciente = false
|
||||
// Do not display difficulte if defense weapon or distance
|
||||
if (rollData.armeDefense || rollData.arme.system.isDistance) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = (rollData.arme.system.isDistance) ? 0 : rollData.difficulte
|
||||
}
|
||||
console.log("ARME!", rollData)
|
||||
this.depenseRessources(arme)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollAssomer() {
|
||||
let rollData = this.getCommonRollData("adr", undefined, "Filouterie")
|
||||
rollData.typeAttaque = "assomer"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = rollData.defender.system.attributs.tre.value * 2
|
||||
}
|
||||
console.log("Assomer!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollFuir() {
|
||||
let rollData = this.getCommonRollData("adr", undefined, "Mouvements")
|
||||
rollData.typeAttaque = "fuir"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
let comp = rollData.defender.items.find(it => it.type == "competence" && it.name.toLowerCase() == "mouvements")
|
||||
rollData.difficulte = rollData.defender.system.attributs.adr.value + ((comp) ? comp.system.niveau : rollData.defender.system.attributs.adr.value)
|
||||
}
|
||||
console.log("Fuir!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollImmobiliser() {
|
||||
let rollData = this.getCommonRollData("pui", undefined, "Mêlée")
|
||||
rollData.typeAttaque = "immobiliser"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = rollData.defenderCombatValues.defenseTotal
|
||||
}
|
||||
console.log("Immobiliser!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeSpecial(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
if (arme) {
|
||||
MournbladeUtility.createChatWithRollMode("GM", {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-display-description.html`, arme)
|
||||
}, arme)
|
||||
this.depenseRessources(arme)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeDegats(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
|
@ -488,6 +718,7 @@ export class MournbladeActor extends Actor {
|
|||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
rollData.degatsFormula = arme.system.totalDegats
|
||||
let roll = new Roll(arme.system.totalDegats).roll({ async: false })
|
||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
|
||||
let rollData = {
|
||||
|
|
71
modules/mournblade-config.js
Normal file
71
modules/mournblade-config.js
Normal file
|
@ -0,0 +1,71 @@
|
|||
export const MOURNBLADE_CONFIG = {
|
||||
|
||||
attaques: {
|
||||
assaut: "Assaut",
|
||||
precise: "Attaque Précise",
|
||||
feinte: "Feinte",
|
||||
coupbas: "Coup Bas",
|
||||
charger: "Charger",
|
||||
contenir: "Contenir l'adversaire",
|
||||
desarmer: "Désarmer"
|
||||
},
|
||||
couverts: {
|
||||
aucun: { name: "Aucun", value: 0 },
|
||||
rondache: { name: "Rondache ou léger (-2)", value: -2 },
|
||||
pavois: { name: "Pavois ou à moitié (-5)", value: -5 },
|
||||
complet: { name: "Quasi complet (-10)", value: -10 },
|
||||
},
|
||||
modifierTypes: {
|
||||
aucun: { name: "Aucun", value: 0 },
|
||||
roll: { name: "Jet", value: 0 },
|
||||
degats: { name: "Dégats", value: 0 },
|
||||
defense: { name: "Capacité défensive", value: 0 },
|
||||
attaque: { name: "Capacité offensive", value: 0 },
|
||||
},
|
||||
listeNiveau: {
|
||||
},
|
||||
listeNiveauCreature: {
|
||||
},
|
||||
listePortees: {
|
||||
"10": "Moins que courte (10)",
|
||||
"15": "Courte et + (15)",
|
||||
"20": "Moyenne et + (20)",
|
||||
"25": "Longue et + (25)"
|
||||
},
|
||||
modificateurOptions: {},
|
||||
pointsAmeOptions: {},
|
||||
difficulteOptions: {
|
||||
"0": "Aucune/Inconnue",
|
||||
"5": "Facile (5)",
|
||||
"10": "Moyenne (10)",
|
||||
"15": "Ardue (15)",
|
||||
"20": "Hasardeuse (20)",
|
||||
"25": "Insensée (25)",
|
||||
"30": "Pure Folie (30)"
|
||||
},
|
||||
attributs: {
|
||||
adr: "Adresse", pui: "Puissance", cla: "Clairvoyance", pre: "Présence", tre: "Trempe"
|
||||
},
|
||||
lancementRuneOptions: {
|
||||
prononcer: "Prononcer la rune",
|
||||
inscrire: "Inscrire la rune"
|
||||
},
|
||||
effetRuneOptions: {
|
||||
prononcee: "Prononcée",
|
||||
inscrite: "Inscrite"
|
||||
},
|
||||
typeArmeOptions: {
|
||||
contact: "Arme de contact",
|
||||
contactjet: "Arme de contact et de Jet",
|
||||
jet: "Arme de Jet",
|
||||
tir: "Arme de Tir",
|
||||
special: "Spécial (capacité/don)"
|
||||
},
|
||||
allegeanceOptions: {
|
||||
tous: "Tous",
|
||||
chaos: "Chaos",
|
||||
loi: "Loi",
|
||||
betes: "Seigneurs des Bêtes",
|
||||
elementaires: "Seigneurs Elementaires"
|
||||
},
|
||||
};
|
25
modules/mournblade-creature-sheet.js
Normal file
25
modules/mournblade-creature-sheet.js
Normal file
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
* @extends {ActorSheet}
|
||||
*/
|
||||
|
||||
import { MournbladeActorSheet } from "./mournblade-actor-sheet.js";
|
||||
import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class MournbladeCreatureSheet extends MournbladeActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade/templates/creature-sheet.html",
|
||||
width: 640,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: false
|
||||
})
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "item"],
|
||||
template: "systems/fvtt-mournblade/templates/item-sheet.html",
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
|
@ -48,7 +48,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let itemData = objectData
|
||||
let formData = {
|
||||
title: this.title,
|
||||
|
@ -64,6 +64,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
||||
config: game.system.mournblade.config,
|
||||
mr: (this.object.type == 'specialisation'),
|
||||
isGM: game.user.isGM
|
||||
}
|
||||
|
@ -90,7 +91,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
postItem() {
|
||||
let chatData = duplicate(MournbladeUtility.data(this.item));
|
||||
let chatData = foundry.utils.duplicate(MournbladeUtility.data(this.item));
|
||||
if (this.actor) {
|
||||
chatData.actor = { id: this.actor.id };
|
||||
}
|
||||
|
@ -133,28 +134,28 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||
html.find('.edit-prediction').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].name = ev.currentTarget.value
|
||||
this.object.update( { 'data.predilections': pred })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.delete-prediction').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.splice(index,1)
|
||||
this.object.update( { 'data.predilections': pred })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.use-prediction').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].used = ev.currentTarget.checked
|
||||
this.object.update( { 'data.predilections': pred })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('#add-predilection').click(ev => {
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
pred.push( { name: "Nouvelle prédilection", used: false })
|
||||
this.object.update( { 'data.predilections': pred })
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.push( { name: "Nouvelle prédilection", id: randomID(), used: false })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
|
|
|
@ -11,8 +11,10 @@ export const defaultItemImg = {
|
|||
predilection: "systems/fvtt-mournblade/assets/icons/predilection.webp",
|
||||
protection: "systems/fvtt-mournblade/assets/icons/protection.webp",
|
||||
rune: "systems/fvtt-mournblade/assets/icons/rune.webp",
|
||||
runeeffect: "systems/fvtt-mournblade/assets/icons/rune.webp",
|
||||
tendance: "systems/fvtt-mournblade/assets/icons/tendance.webp",
|
||||
traitchaotique: "systems/fvtt-mournblade/assets/icons/traitchaotique.webp",
|
||||
traitespece: "systems/fvtt-mournblade/assets/icons/capacite.webp"
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -11,10 +11,11 @@
|
|||
import { MournbladeActor } from "./mournblade-actor.js";
|
||||
import { MournbladeItemSheet } from "./mournblade-item-sheet.js";
|
||||
import { MournbladeActorSheet } from "./mournblade-actor-sheet.js";
|
||||
//import { MournbladeNPCSheet } from "./mournblade-npc-sheet.js";
|
||||
import { MournbladeCreatureSheet } from "./mournblade-creature-sheet.js";
|
||||
import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
import { MournbladeCombat } from "./mournblade-combat.js";
|
||||
import { MournbladeItem } from "./mournblade-item.js";
|
||||
import { MOURNBLADE_CONFIG } from "./mournblade-config.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
|
@ -45,13 +46,15 @@ Hooks.once("init", async function () {
|
|||
CONFIG.Combat.documentClass = MournbladeCombat
|
||||
CONFIG.Actor.documentClass = MournbladeActor
|
||||
CONFIG.Item.documentClass = MournbladeItem
|
||||
game.system.mournblade = { }
|
||||
game.system.mournblade = {
|
||||
config : MOURNBLADE_CONFIG,
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register sheet application classes
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-mournblade", MournbladeActorSheet, { types: ["personnage"], makeDefault: true })
|
||||
//Actors.registerSheet("fvtt-mournblade", MournbladeNPCSheet, { types: ["npc"], makeDefault: false });
|
||||
Actors.registerSheet("fvtt-mournblade", MournbladeCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-mournblade", MournbladeItemSheet, { makeDefault: true })
|
||||
|
@ -68,33 +71,19 @@ function welcomeMessage() {
|
|||
content: `<div id="welcome-message-Mournblade"><span class="rdd-roll-part">
|
||||
<strong>Bienvenue dans les Jeunes Royaumes de Mournblade !</strong>
|
||||
<p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr</p>
|
||||
<p>Mournblade est jeude rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.<p>
|
||||
<p>Mournblade est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.</p>
|
||||
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
|
||||
` });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register world usage statistics
|
||||
function registerUsageCount( registerKey ) {
|
||||
if ( game.user.isGM ) {
|
||||
game.settings.register(registerKey, "world-key", {
|
||||
name: "Unique world key",
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: "",
|
||||
type: String
|
||||
});
|
||||
|
||||
let worldKey = game.settings.get(registerKey, "world-key")
|
||||
if ( worldKey == undefined || worldKey == "" ) {
|
||||
worldKey = randomID(32)
|
||||
game.settings.set(registerKey, "world-key", worldKey )
|
||||
}
|
||||
// Simple API counter
|
||||
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
|
||||
//$.ajaxSetup({
|
||||
//headers: { 'Access-Control-Allow-Origin': '*' }
|
||||
//})
|
||||
$.ajax(regURL)
|
||||
async function importDefaultScene() {
|
||||
let exists = game.scenes.find(j => j.name == "Accueil");
|
||||
if (!exists) {
|
||||
const scenes = await MournbladeUtility.loadCompendium("fvtt-mournblade.scenes")
|
||||
let newDocuments = scenes.filter(i => i.name == "Accueil");
|
||||
await game.scenes.documentClass.create(newDocuments);
|
||||
game.scenes.find(i => i.name == "Accueil").activate();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,13 +101,22 @@ Hooks.once("ready", function () {
|
|||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
// CSS patch for v9
|
||||
if (game.version) {
|
||||
let sidebar = document.getElementById("sidebar");
|
||||
sidebar.style.width = "min-content";
|
||||
if (!game.user.isGM && game.user.character && !game.user.character.prototypeToken.actorLink) {
|
||||
ui.notifications.info("Le token de du joueur n'est pas connecté à l'acteur !");
|
||||
ChatMessage.create({
|
||||
content: "<b>ATTENTION</b> Le token du joueur " + game.user.name + " n'est pas connecté à l'acteur !",
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
registerUsageCount('fvtt-mournblade')
|
||||
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err=>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
|
||||
importDefaultScene();
|
||||
welcomeMessage();
|
||||
});
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ export class MournbladeRollDialog extends Dialog {
|
|||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData ) {
|
||||
|
||||
let options = { classes: ["MournbladeDialog"], width: 340, height: 420, 'z-index': 99999 };
|
||||
let options = { classes: ["MournbladeDialog"], width: 340, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-mournblade/templates/roll-dialog-generic.html', rollData);
|
||||
|
||||
return new MournbladeRollDialog(actor, rollData, html, options );
|
||||
|
@ -52,14 +52,22 @@ export class MournbladeRollDialog extends Dialog {
|
|||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
var dialog = this;
|
||||
function onLoad() {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
||||
html.find('.apply-modifier').change(async (event) => {
|
||||
let modifierIdx = $(event.currentTarget).data("modifier-idx")
|
||||
let modifier = this.rollData.modifiers[modifierIdx]
|
||||
modifier.system.apply = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#modificateur').change(async (event) => {
|
||||
this.rollData.modificateur = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#typeAttaque').change(async (event) => {
|
||||
this.rollData.typeAttaque = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#difficulte').change(async (event) => {
|
||||
this.rollData.difficulte = Number(event.currentTarget.value)
|
||||
})
|
||||
|
@ -72,8 +80,41 @@ export class MournbladeRollDialog extends Dialog {
|
|||
html.find('#runeame').change(async (event) => {
|
||||
this.rollData.runeame = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#isMonte').change(async (event) => {
|
||||
this.rollData.desavantages.isMonte = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#cibleausol').change(async (event) => {
|
||||
this.rollData.desavantages.cibleausol = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibledesarmee').change(async (event) => {
|
||||
this.rollData.desavantages.cibledesarmee = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblerestreint').change(async (event) => {
|
||||
this.rollData.desavantages.ciblerestreint = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibleimmobilisée').change(async (event) => {
|
||||
this.rollData.desavantages.cibleimmobilisée = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblesurplomb').change(async (event) => {
|
||||
this.rollData.desavantages.ciblesurplomb = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#doubleD20').change(async (event) => {
|
||||
this.rollData.doubleD20 = event.currentTarget.checked
|
||||
})
|
||||
html.find('#visee').change(async (event) => {
|
||||
this.rollData.visee = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibleconsciente').change(async (event) => {
|
||||
this.rollData.cibleconsciente = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblecourt').change(async (event) => {
|
||||
this.rollData.ciblecourt = event.currentTarget.checked
|
||||
})
|
||||
html.find('#typeCouvert').change(async (event) => {
|
||||
this.rollData.typeCouvert = String(event.currentTarget.value)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
|
@ -10,6 +10,7 @@ export class MournbladeUtility {
|
|||
static async init() {
|
||||
Hooks.on('renderChatLog', (log, html, data) => MournbladeUtility.chatListeners(html))
|
||||
Hooks.on("getChatLogEntryContext", (html, options) => MournbladeUtility.chatRollMenu(html, options))
|
||||
Hooks.on('renderChatMessage', (message, html, data) => MournbladeUtility.chatMessageHandler(message, html, data))
|
||||
|
||||
Hooks.on("getCombatTrackerEntryContext", (html, options) => {
|
||||
MournbladeUtility.pushInitiativeOptions(html, options);
|
||||
|
@ -46,28 +47,28 @@ export class MournbladeUtility {
|
|||
})
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getModificateurOptions() {
|
||||
let opt = []
|
||||
for (let i = -15; i <= 15; i++) {
|
||||
opt.push(`<option value="${i}">${i}</option>`)
|
||||
static getActorFromRollData(rollData) {
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
if (rollData.tokenId) {
|
||||
let token = canvas.tokens.placeables.find(t => t.id == rollData.tokenId)
|
||||
if (token) {
|
||||
actor = token.actor
|
||||
}
|
||||
return opt.concat("\n")
|
||||
}
|
||||
return actor
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getPointAmeOptions() {
|
||||
let opt = []
|
||||
for (let i = 1; i <= 20; i++) {
|
||||
opt.push(`<option value="${i}">${i}</option>`)
|
||||
}
|
||||
return opt.concat("\n")
|
||||
static sortArrayObjectsByName(myArray) {
|
||||
myArray.sort((a, b) => {
|
||||
return a.name.localeCompare(b.name);
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getAttributs() {
|
||||
return { adr: "Adresse", pui: "Puissance", cla: "Clairvoyance", pre: "Présence", tre: "Trempe" }
|
||||
return game.system.mournblade.config.attributs
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static pushInitiativeOptions(html, options) {
|
||||
|
@ -82,6 +83,11 @@ export class MournbladeUtility {
|
|||
static async ready() {
|
||||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills")
|
||||
this.skills = skills.map(i => i.toObject())
|
||||
|
||||
game.system.mournblade.config.listeNiveauSkill = MournbladeUtility.createDirectOptionList(0, 10)
|
||||
game.system.mournblade.config.listeNiveauCreature = MournbladeUtility.createDirectOptionList(0, 35)
|
||||
game.system.mournblade.config.modificateurOptions = MournbladeUtility.createArrayOptionList(-15, 15)
|
||||
game.system.mournblade.config.pointsAmeOptions = MournbladeUtility.createDirectOptionList(0, 20)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -100,6 +106,27 @@ export class MournbladeUtility {
|
|||
static getOptionsStatusList() {
|
||||
return this.optionsStatusList;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getPredilection(comp, predIdx) {
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
return foundry.utils.duplicate(pred[predIdx] || { name: "Error!" })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatMessageHandler(message, html, data) {
|
||||
const chatCard = html.find('.action-section')
|
||||
if (chatCard.length > 0) {
|
||||
// If the user is the message author or the actor owner, proceed
|
||||
const actor = game.actors.get(data.message.speaker.actor)
|
||||
// DEBUG : console.log("FOUND 1!!! ", actor, data.message)
|
||||
if (actor?.isOwner || game.user.isGM) {
|
||||
return
|
||||
}
|
||||
chatCard.hide()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatListeners(html) {
|
||||
|
||||
|
@ -108,10 +135,30 @@ export class MournbladeUtility {
|
|||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
|
||||
rollData.competence = duplicate(actor.getCompetence(rollData.competence._id))
|
||||
MournbladeUtility.rollMournblade(rollData)
|
||||
rollData.competence = foundry.utils.duplicate(actor.getCompetence(rollData.competence._id))
|
||||
rollData.predilectionUsed = MournbladeUtility.getPredilection(rollData.competence, predIdx)
|
||||
await MournbladeUtility.rollMournblade(rollData)
|
||||
})
|
||||
|
||||
html.on("click", '.arme-roll-degats', async event => {
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
MournbladeUtility.rollDegatsFromAttaque(rollData)
|
||||
|
||||
})
|
||||
|
||||
html.on("click", '.arme-apply-degats', async event => {
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
if (game.user.isGM) {
|
||||
MournbladeUtility.applyDegatsFromAttaque(rollData)
|
||||
} else {
|
||||
game.socket.emit("system.fvtt-mournblade", { name: "msg_apply_damage", data: { rolLData: rollData } })
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -120,8 +167,7 @@ export class MournbladeUtility {
|
|||
|
||||
const templatePaths = [
|
||||
'systems/fvtt-mournblade/templates/editor-notes-gm.html',
|
||||
'systems/fvtt-mournblade/templates/partial-item-description.html',
|
||||
'systems/fvtt-mournblade/templates/partial-list-niveau.html'
|
||||
'systems/fvtt-mournblade/templates/partial-item-description.html'
|
||||
]
|
||||
return loadTemplates(templatePaths);
|
||||
}
|
||||
|
@ -163,12 +209,10 @@ export class MournbladeUtility {
|
|||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static buildListOptions(min, max) {
|
||||
let options = ""
|
||||
static createArrayOptionList(min, max) {
|
||||
let options = [];
|
||||
for (let i = min; i <= max; i++) {
|
||||
options += `<option value="${i}">${i}</option>`
|
||||
options.push({key:`${i}`, label:`${i}`});
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
@ -183,27 +227,6 @@ export class MournbladeUtility {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getDefenseState(actorId) {
|
||||
return this.defenderStore[actorId];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static updateRollData(rollData) {
|
||||
|
||||
let id = rollData.rollId;
|
||||
let oldRollData = this.rollDataStore[id] || {};
|
||||
let newRollData = mergeObject(oldRollData, rollData);
|
||||
this.rollDataStore[id] = newRollData;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static saveRollData(rollData) {
|
||||
game.socket.emit("system.fvtt-mournblade", {
|
||||
name: "msg_update_roll", data: rollData
|
||||
}); // Notify all other clients of the roll
|
||||
this.updateRollData(rollData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getRollData(id) {
|
||||
return this.rollDataStore[id];
|
||||
|
@ -211,12 +234,10 @@ export class MournbladeUtility {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
static onSocketMesssage(msg) {
|
||||
//console.log("SOCKET MESSAGE", msg.name, game.user.character.id, msg.data.defenderId);
|
||||
if (msg.name == "msg_update_defense_state") {
|
||||
this.updateDefenseState(msg.data.defenderId, msg.data.rollId);
|
||||
if (msg.name == "msg_apply_damage") {
|
||||
if (game.user.isGM) {
|
||||
this.applyDegatsFromAttaque(msg.data.rollData);
|
||||
}
|
||||
if (msg.name == "msg_update_roll") {
|
||||
this.updateRollData(msg.data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -286,19 +307,20 @@ export class MournbladeUtility {
|
|||
rollData.isSuccess = (rollData.finalResult >= rollData.difficulte)
|
||||
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10)
|
||||
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10)
|
||||
rollData.isPureSuccess = (rollData.isSuccess && !rollData.isHeroique)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollMournblade(rollData) {
|
||||
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.attrKey == "tochoose") { // No attr selected, force address
|
||||
rollData.attrKey = "adr"
|
||||
}
|
||||
if (!rollData.attr) {
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
|
||||
rollData.attr = duplicate(actor.system.attributs[rollData.attrKey])
|
||||
rollData.attr = foundry.utils.duplicate(actor.system.attributs[rollData.attrKey])
|
||||
}
|
||||
|
||||
rollData.diceFormula = rollData.mainDice
|
||||
|
@ -310,17 +332,59 @@ export class MournbladeUtility {
|
|||
}
|
||||
//console.log("BEFORE COMP", rollData)
|
||||
if (rollData.competence) {
|
||||
rollData.predilections = duplicate(rollData.competence.system.predilections.filter(pred => !pred.used) || [])
|
||||
rollData.predilections = foundry.utils.duplicate(rollData.competence.system.predilections)
|
||||
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
|
||||
rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.system.niveau}+${rollData.modificateur}+${compmod}`
|
||||
} else {
|
||||
rollData.diceFormula += `+${rollData.attr.value}*2+${rollData.modificateur}`
|
||||
}
|
||||
rollData.diceFormula += `+${rollData.malusSante}+${rollData.malusAme}`
|
||||
|
||||
if (rollData.arme && rollData.arme.type == "arme") {
|
||||
if (rollData.arme?.type == "arme") {
|
||||
rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}`
|
||||
}
|
||||
|
||||
// Apply modifiers
|
||||
for (let modifier of rollData.modifiers) {
|
||||
if (modifier.system.modifiertype == "roll" && modifier.system.apply) {
|
||||
rollData.diceFormula += `+${modifier.system.value}`
|
||||
}
|
||||
}
|
||||
// Apply desavantages
|
||||
let desavantagesBonus = 0
|
||||
for (let desavantage in rollData.desavantages) {
|
||||
if (rollData.desavantages[desavantage]) {
|
||||
desavantagesBonus += 5
|
||||
}
|
||||
}
|
||||
desavantagesBonus = Math.min(15, desavantagesBonus)
|
||||
rollData.diceFormula += `+${desavantagesBonus}`
|
||||
|
||||
// Monté ?
|
||||
if (rollData.isMonte) {
|
||||
rollData.diceFormula += "+5"
|
||||
}
|
||||
|
||||
// Specific modifier for distance
|
||||
if (rollData.arme?.system?.isDistance) {
|
||||
if (rollData.visee) {
|
||||
rollData.diceFormula += "+5"
|
||||
}
|
||||
if (rollData.cibleconsciente) {
|
||||
rollData.diceFormula += `-${rollData.defender.system.attributs.adr.value}`
|
||||
}
|
||||
if (rollData.ciblecourt) {
|
||||
if (rollData.difficulte <= 15) { // Portée courte ou moins
|
||||
rollData.diceFormula += `-5`
|
||||
} else {
|
||||
rollData.diceFormula += `-10`
|
||||
}
|
||||
}
|
||||
if (rollData.typeCouvert != "aucun") {
|
||||
rollData.diceFormula += `+${rollData.config.couverts[rollData.typeCouvert].value}`
|
||||
}
|
||||
}
|
||||
|
||||
if (rollData.rune) {
|
||||
rollData.runeduree = Math.ceil((rollData.runeame + 3) / 3)
|
||||
if (rollData.runemode == "inscrire") {
|
||||
|
@ -331,14 +395,16 @@ export class MournbladeUtility {
|
|||
}
|
||||
}
|
||||
|
||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
let myRoll = await new Roll(rollData.diceFormula).evaluate();
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.roll = myRoll
|
||||
rollData.roll = foundry.utils.duplicate(myRoll)
|
||||
rollData.diceResult = myRoll.terms[0].results[0].result
|
||||
console.log(">>>> ", myRoll)
|
||||
|
||||
rollData.finalResult = myRoll.total
|
||||
this.computeResult(rollData)
|
||||
|
||||
// Application immédiate selon type de jet
|
||||
if (rollData.rune) {
|
||||
let subAme = rollData.runeame
|
||||
if (rollData.isEchec && !rollData.isDramatique) {
|
||||
|
@ -346,20 +412,160 @@ export class MournbladeUtility {
|
|||
}
|
||||
actor.subPointsAme(rollData.runemode, subAme)
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "assomer" && rollData.defenderTokenId && rollData.isPureSuccess) {
|
||||
let defender = game.canvas.tokens.get(rollData?.defenderTokenId)?.actor
|
||||
defender.setModifier("Assomer : Prochaine action", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "fuir" && rollData.difficulte > 0 && !rollData.isSuccess) {
|
||||
actor.setModifier("Fuite échouée : -5 en défense ce round et suivant", "defense", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "immobiliser" && rollData.difficulte > 0 && rollData.isPureSuccess) {
|
||||
actor.setModifier("Immobilisation en cours : -5 pour prochaine action", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "chargecavalerie") {
|
||||
actor.setModifier("Charge de Cavalerie : -5 défense pour le tour", "defense", -5)
|
||||
}
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-generic-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollDegatsFromAttaque(rollData) {
|
||||
let maximize = false
|
||||
let degatsMessage = "Degats normaux"
|
||||
|
||||
if (rollData.arme?.system?.isMelee) {
|
||||
rollData.degatsFormula = rollData.arme.system.totalDegats
|
||||
if (rollData.isHeroique) { // Deux fois les dés de dégats
|
||||
degatsMessage = "Dégats doublés"
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "assomer") {
|
||||
rollData.degatsFormula = false
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "charger") {
|
||||
rollData.degatsFormula += "+2"
|
||||
}
|
||||
if (rollData.typeAttaque == "chargecavalerie") {
|
||||
rollData.degatsFormula += "+5"
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "precise") {
|
||||
degatsMessage = "Degats normaux"
|
||||
if (rollData.isHeroique) { // Degats max
|
||||
maximize = true
|
||||
degatsMessage = "Dégats maximaux, ignore l'armure du défenseur";
|
||||
rollData.ignoreDefenseArmor = true
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "feinte") {
|
||||
degatsMessage = "Pas de dégats, mais bonus pour prochaine attaque"
|
||||
rollData.degatsFormula = false
|
||||
rollData.nextBonus = 5
|
||||
if (rollData.isHeroique) { // Bonus pour prochaine action
|
||||
rollData.nextBonus = 10
|
||||
rollData.nextBonusDegats = 10
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "coupbas") {
|
||||
degatsMessage = "Pas de dégats, mais malus pour prochaine action complexe du défenseur"
|
||||
rollData.degatsFormula = false
|
||||
rollData.nextMalus = 5
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
rollData.nextMalus = 15
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "contenir") {
|
||||
degatsMessage = "Pas de dégats, mais l'adversaire ne peut pas vous attaquer pour le reste du tour"
|
||||
rollData.degatsFormula = false
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
degatsMessage = "Pas de dégats, mais tout les adversaires avec une défense inférieure ou égale à " + rollData.finalResult - 10 +
|
||||
" ne peuvent pas vous attaquer pour le reste du tour"
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "desarmer") {
|
||||
degatsMessage = "Pas de dégats, mais l'adversaire reçoit un malus de -5 pour sa prochaine action"
|
||||
rollData.degatsFormula = false
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
rollData.defenderDesarme = true
|
||||
degatsMessage = "Pas de dégats, mais l'arme de votre adversaire est arrachée de ses mains"
|
||||
}
|
||||
}
|
||||
} else { // Armes à distance
|
||||
rollData.degatsFormula = rollData.arme.system.totalDegats
|
||||
}
|
||||
|
||||
// Perform the roll, show the dice
|
||||
rollData.finalResult = 0
|
||||
rollData.degatsMessage = degatsMessage
|
||||
if (rollData.degatsFormula) {
|
||||
console.log("Degats formula", rollData.degatsFormula)
|
||||
// Twice!maximize
|
||||
if (rollData.isHeroique && !maximize) {
|
||||
rollData.degatsFormula += "+" + rollData.degatsFormula
|
||||
}
|
||||
// Latest modifiers
|
||||
for (let mod of rollData.modifiers) {
|
||||
if (mod.system.modifiertype == "degats") {
|
||||
rollData.degatsFormula += `+${mod.system.value}`
|
||||
}
|
||||
}
|
||||
let degatsRoll = await new Roll(rollData.degatsFormula).evaluate({ maximize: maximize })
|
||||
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||
rollData.finalResult = degatsRoll.total
|
||||
}
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-degats-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyDegatsFromAttaque(rollData) {
|
||||
let defender = game.canvas.tokens.get(rollData?.defenderTokenId)?.actor
|
||||
if (defender && rollData.arme) {
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.typeAttaque == "desarmer" && !rollData.isHeroique) {
|
||||
defender.setModifier("Malus suite à désarmement", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "charger") {
|
||||
actor.setModifier("Défense suite à charge", "roll", -5)
|
||||
}
|
||||
if (rollData.nextBonus) {
|
||||
actor.setModifier("Prochaine attaque", "roll", rollData.nextBonus)
|
||||
if (rollData.nextDegatsBonus) {
|
||||
actor.setModifier("Prochaine attaque", "degats", rollData.nextDegatsBonus)
|
||||
}
|
||||
}
|
||||
if (rollData.nextMalus) {
|
||||
defender.setModifier("Prochaine action complexe", "roll", -rollData.nextMalus)
|
||||
}
|
||||
if (rollData.defenderDesarme) {
|
||||
ui.notifications.info("L'arme de " + defender.name + " est arrachée de ses mains (à gérer manuellement)")
|
||||
}
|
||||
let degats = rollData.finalResult
|
||||
|
||||
let type = (rollData.arme.system.nonletaux) ? "nonletaux" : "letaux"
|
||||
if (rollData.arme.system.ignorearmure) {
|
||||
rollData.ignoreDefenseArmor = true
|
||||
}
|
||||
defender.incDecSante(type, +degats, rollData.ignoreDefenseArmor)
|
||||
ui.notifications.info(defender.name + "a subi " + degats + " points de santé " + type + ".")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async bonusRollMournblade(rollData) {
|
||||
rollData.bonusFormula = rollData.addedBonus
|
||||
|
||||
let bonusRoll = new Roll(rollData.bonusFormula).roll({ async: false })
|
||||
let bonusRoll = await new Roll(rollData.bonusFormula).evaluate()
|
||||
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
|
||||
rollData.bonusRoll = bonusRoll
|
||||
rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)
|
||||
|
||||
rollData.finalResult += rollData.bonusRoll.total
|
||||
|
||||
|
@ -393,7 +599,7 @@ export class MournbladeUtility {
|
|||
|
||||
/* -------------------------------------------- */
|
||||
static blindMessageToGM(chatOptions) {
|
||||
let chatGM = duplicate(chatOptions);
|
||||
let chatGM = foundry.utils.duplicate(chatOptions);
|
||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
||||
console.log("blindMessageToGM", chatGM);
|
||||
|
@ -446,7 +652,8 @@ export class MournbladeUtility {
|
|||
chatOptions.whisper = this.getWhisperRecipients(rollMode, name);
|
||||
break;
|
||||
}
|
||||
chatOptions.alias = chatOptions.alias || name
|
||||
chatOptions.alias = chatOptions.alias || name;
|
||||
chatOptions.speaker = ChatMessage.getSpeaker();
|
||||
let msg = await ChatMessage.create(chatOptions)
|
||||
console.log("=======>", rollData)
|
||||
msg.setFlag("world", "mournblade-roll", rollData)
|
||||
|
@ -455,12 +662,11 @@ export class MournbladeUtility {
|
|||
/* -------------------------------------------- */
|
||||
static getBasicRollData() {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollId: foundry.utils.randomID(16),
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
modificateursOptions: this.getModificateurOptions(),
|
||||
pointAmeOptions: this.getPointAmeOptions(),
|
||||
difficulte: 0,
|
||||
modificateur: 0,
|
||||
config: foundry.utils.duplicate(game.system.mournblade.config),
|
||||
}
|
||||
MournbladeUtility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
|
@ -472,8 +678,11 @@ export class MournbladeUtility {
|
|||
if (target) {
|
||||
rollData.defenderTokenId = target.id
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
rollData.defenderCombatValues = defender.getCombatValues()
|
||||
rollData.defender = defender.toObject() // Simpler
|
||||
rollData.defenderDefense = defender.getBestDefenseValue()
|
||||
rollData.armeDefense = defender.getBestDefenseValue()
|
||||
if ( rollData.armeDefense) {
|
||||
if (rollData.armeDefense) {
|
||||
rollData.difficulte = rollData.armeDefense.system.totalDefensif
|
||||
} else {
|
||||
ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.")
|
||||
|
@ -492,7 +701,7 @@ export class MournbladeUtility {
|
|||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
actor.changeBonneAventure(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus de Points d'Aventure"
|
||||
|
@ -511,7 +720,7 @@ export class MournbladeUtility {
|
|||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
actor.changeEclat(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus d'Eclat"
|
||||
|
@ -526,37 +735,37 @@ export class MournbladeUtility {
|
|||
let canApplyBALoyal = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "loyal")
|
||||
}
|
||||
let canApplyPELoyal = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "loyal")
|
||||
}
|
||||
let canApplyBAChaotique = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let canApplyBAChaotique3 = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 2 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let canApplyPEChaotique = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let hasPredilection = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.competence) {
|
||||
let nbPred = rollData.competence.data.predilections.filter(pred => !pred.used).length
|
||||
return (!rollData.isReroll && rollData.competence && nbPred > 0)
|
||||
|
@ -566,7 +775,7 @@ export class MournbladeUtility {
|
|||
let canCompetenceDouble = function (li) {
|
||||
let message = game.messages.get(li.attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.competence) {
|
||||
return rollData.competence.data.doublebonus
|
||||
}
|
||||
|
@ -634,11 +843,11 @@ export class MournbladeUtility {
|
|||
/* -------------------------------------------- */
|
||||
static async confirmDelete(actorSheet, li) {
|
||||
let itemId = li.data("item-id");
|
||||
let msgTxt = "<p>Are you sure to remove this Item ?";
|
||||
let msgTxt = "<p>Voulez vous supprimer cet item ?";
|
||||
let buttons = {
|
||||
delete: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Yes, remove it",
|
||||
label: "Oui !",
|
||||
callback: () => {
|
||||
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||
li.slideUp(200, () => actorSheet.render(false));
|
||||
|
@ -646,12 +855,12 @@ export class MournbladeUtility {
|
|||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: "Cancel"
|
||||
label: "Non !"
|
||||
}
|
||||
}
|
||||
msgTxt += "</p>";
|
||||
let d = new Dialog({
|
||||
title: "Confirm removal",
|
||||
title: "Confirmer la suppression",
|
||||
content: msgTxt,
|
||||
buttons: buttons,
|
||||
default: "cancel"
|
||||
|
|
BIN
packs/armes/000195.ldb
Normal file
BIN
packs/armes/000195.ldb
Normal file
Binary file not shown.
0
packs/armes/000202.log
Normal file
0
packs/armes/000202.log
Normal file
1
packs/armes/CURRENT
Normal file
1
packs/armes/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000200
|
0
packs/armes/LOCK
Normal file
0
packs/armes/LOCK
Normal file
8
packs/armes/LOG
Normal file
8
packs/armes/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.267528 7f830f4006c0 Recovering log #198
|
||||
2024/05/01-09:35:36.318214 7f830f4006c0 Delete type=3 #196
|
||||
2024/05/01-09:35:36.318310 7f830f4006c0 Delete type=0 #198
|
||||
2024/05/01-09:42:43.133457 7f830e0006c0 Level-0 table #203: started
|
||||
2024/05/01-09:42:43.133499 7f830e0006c0 Level-0 table #203: 0 bytes OK
|
||||
2024/05/01-09:42:43.141393 7f830e0006c0 Delete type=0 #201
|
||||
2024/05/01-09:42:43.156019 7f830e0006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.156088 7f830e0006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
8
packs/armes/LOG.old
Normal file
8
packs/armes/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.595518 7f0832a006c0 Recovering log #193
|
||||
2024/04/25-23:18:20.606674 7f0832a006c0 Delete type=3 #191
|
||||
2024/04/25-23:18:20.606816 7f0832a006c0 Delete type=0 #193
|
||||
2024/04/25-23:31:59.770416 7f08310006c0 Level-0 table #199: started
|
||||
2024/04/25-23:31:59.770479 7f08310006c0 Level-0 table #199: 0 bytes OK
|
||||
2024/04/25-23:31:59.807298 7f08310006c0 Delete type=0 #197
|
||||
2024/04/25-23:31:59.807694 7f08310006c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.846668 7f08310006c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
BIN
packs/armes/MANIFEST-000200
Normal file
BIN
packs/armes/MANIFEST-000200
Normal file
Binary file not shown.
BIN
packs/dons/000194.ldb
Normal file
BIN
packs/dons/000194.ldb
Normal file
Binary file not shown.
0
packs/dons/000201.log
Normal file
0
packs/dons/000201.log
Normal file
1
packs/dons/CURRENT
Normal file
1
packs/dons/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/dons/LOCK
Normal file
0
packs/dons/LOCK
Normal file
8
packs/dons/LOG
Normal file
8
packs/dons/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.447142 7f830ea006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.500900 7f830ea006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.501044 7f830ea006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.163729 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.163769 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.170272 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.184812 7f830e0006c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.184921 7f830e0006c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
8
packs/dons/LOG.old
Normal file
8
packs/dons/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.639847 7f0833e006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.650619 7f0833e006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.650726 7f0833e006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.846695 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.846738 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.878047 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.950365 7f08310006c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.950424 7f08310006c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
BIN
packs/dons/MANIFEST-000199
Normal file
BIN
packs/dons/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/equipement/000194.ldb
Normal file
BIN
packs/equipement/000194.ldb
Normal file
Binary file not shown.
0
packs/equipement/000201.log
Normal file
0
packs/equipement/000201.log
Normal file
1
packs/equipement/CURRENT
Normal file
1
packs/equipement/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/equipement/LOCK
Normal file
0
packs/equipement/LOCK
Normal file
8
packs/equipement/LOG
Normal file
8
packs/equipement/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.386580 7f830f4006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.440932 7f830f4006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.441077 7f830f4006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.156323 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.156397 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.163540 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.184777 7f830e0006c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.184871 7f830e0006c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
8
packs/equipement/LOG.old
Normal file
8
packs/equipement/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.625174 7f0832a006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.636417 7f0832a006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.636541 7f0832a006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.807936 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.807990 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.846313 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.913834 7f08310006c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.950407 7f08310006c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
BIN
packs/equipement/MANIFEST-000199
Normal file
BIN
packs/equipement/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/heritages/000194.ldb
Normal file
BIN
packs/heritages/000194.ldb
Normal file
Binary file not shown.
0
packs/heritages/000201.log
Normal file
0
packs/heritages/000201.log
Normal file
1
packs/heritages/CURRENT
Normal file
1
packs/heritages/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/heritages/LOCK
Normal file
0
packs/heritages/LOCK
Normal file
8
packs/heritages/LOG
Normal file
8
packs/heritages/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.580416 7f830ea006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.650922 7f830ea006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.651073 7f830ea006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.178046 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.178094 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.184514 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.184854 7f830e0006c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.184903 7f830e0006c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
8
packs/heritages/LOG.old
Normal file
8
packs/heritages/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.668825 7f0833e006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.680265 7f0833e006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.680363 7f0833e006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.913864 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.913918 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.950159 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.950438 7f08310006c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.950490 7f08310006c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
BIN
packs/heritages/MANIFEST-000199
Normal file
BIN
packs/heritages/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/metiers/000194.ldb
Normal file
BIN
packs/metiers/000194.ldb
Normal file
Binary file not shown.
0
packs/metiers/000201.log
Normal file
0
packs/metiers/000201.log
Normal file
1
packs/metiers/CURRENT
Normal file
1
packs/metiers/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/metiers/LOCK
Normal file
0
packs/metiers/LOCK
Normal file
8
packs/metiers/LOG
Normal file
8
packs/metiers/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.655366 7f830f4006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.709235 7f830f4006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.709381 7f830f4006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.185067 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.185130 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.191994 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.216134 7f830e0006c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.216237 7f830e0006c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
8
packs/metiers/LOG.old
Normal file
8
packs/metiers/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.683579 7f0832a006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.739808 7f0832a006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.740012 7f0832a006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.987531 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.987597 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:32:00.025092 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:32:00.098181 7f08310006c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:32:00.098246 7f08310006c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
BIN
packs/metiers/MANIFEST-000199
Normal file
BIN
packs/metiers/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/origines/000194.ldb
Normal file
BIN
packs/origines/000194.ldb
Normal file
Binary file not shown.
0
packs/origines/000201.log
Normal file
0
packs/origines/000201.log
Normal file
1
packs/origines/CURRENT
Normal file
1
packs/origines/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/origines/LOCK
Normal file
0
packs/origines/LOCK
Normal file
8
packs/origines/LOG
Normal file
8
packs/origines/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.508432 7f830f4006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.561800 7f830f4006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.561939 7f830f4006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.170680 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.170753 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.177825 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.184836 7f830e0006c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.184888 7f830e0006c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
8
packs/origines/LOG.old
Normal file
8
packs/origines/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.653541 7f0832a006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.665587 7f0832a006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.665693 7f0832a006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.878272 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.878321 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.913563 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.950389 7f08310006c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.950473 7f08310006c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
BIN
packs/origines/MANIFEST-000199
Normal file
BIN
packs/origines/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/pnj-creatures/000090.ldb
Normal file
BIN
packs/pnj-creatures/000090.ldb
Normal file
Binary file not shown.
0
packs/pnj-creatures/000097.log
Normal file
0
packs/pnj-creatures/000097.log
Normal file
1
packs/pnj-creatures/CURRENT
Normal file
1
packs/pnj-creatures/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000095
|
0
packs/pnj-creatures/LOCK
Normal file
0
packs/pnj-creatures/LOCK
Normal file
8
packs/pnj-creatures/LOG
Normal file
8
packs/pnj-creatures/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.082984 7f830f4006c0 Recovering log #93
|
||||
2024/05/01-09:35:36.138765 7f830f4006c0 Delete type=3 #91
|
||||
2024/05/01-09:35:36.138887 7f830f4006c0 Delete type=0 #93
|
||||
2024/05/01-09:42:43.096611 7f830e0006c0 Level-0 table #98: started
|
||||
2024/05/01-09:42:43.096659 7f830e0006c0 Level-0 table #98: 0 bytes OK
|
||||
2024/05/01-09:42:43.103787 7f830e0006c0 Delete type=0 #96
|
||||
2024/05/01-09:42:43.126495 7f830e0006c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.126585 7f830e0006c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
8
packs/pnj-creatures/LOG.old
Normal file
8
packs/pnj-creatures/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.542505 7f0832a006c0 Recovering log #88
|
||||
2024/04/25-23:18:20.553330 7f0832a006c0 Delete type=3 #86
|
||||
2024/04/25-23:18:20.553446 7f0832a006c0 Delete type=0 #88
|
||||
2024/04/25-23:31:59.654488 7f08310006c0 Level-0 table #94: started
|
||||
2024/04/25-23:31:59.654563 7f08310006c0 Level-0 table #94: 0 bytes OK
|
||||
2024/04/25-23:31:59.691350 7f08310006c0 Delete type=0 #92
|
||||
2024/04/25-23:31:59.691614 7f08310006c0 Manual compaction at level-0 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.807584 7f08310006c0 Manual compaction at level-1 from '!actors!00CKDCqVh5fLZbYo' @ 72057594037927935 : 1 .. '!folders!dwT9WnH0ZnpuZh92' @ 0 : 0; will stop at (end)
|
BIN
packs/pnj-creatures/MANIFEST-000095
Normal file
BIN
packs/pnj-creatures/MANIFEST-000095
Normal file
Binary file not shown.
BIN
packs/protection/000194.ldb
Normal file
BIN
packs/protection/000194.ldb
Normal file
Binary file not shown.
0
packs/protection/000201.log
Normal file
0
packs/protection/000201.log
Normal file
1
packs/protection/CURRENT
Normal file
1
packs/protection/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/protection/LOCK
Normal file
0
packs/protection/LOCK
Normal file
8
packs/protection/LOG
Normal file
8
packs/protection/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.326101 7f830ea006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.382463 7f830ea006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.382677 7f830ea006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.148903 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.148967 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.155801 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.156059 7f830e0006c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.156117 7f830e0006c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
8
packs/protection/LOG.old
Normal file
8
packs/protection/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.610323 7f0833e006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.622545 7f0833e006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.622654 7f0833e006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.733906 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.734001 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.770187 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.807670 7f08310006c0 Manual compaction at level-0 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.807915 7f08310006c0 Manual compaction at level-1 from '!items!2hD1DQVeCIQIXFU7' @ 72057594037927935 : 1 .. '!items!veoS6Gtzj6Dq087V' @ 0 : 0; will stop at (end)
|
BIN
packs/protection/MANIFEST-000199
Normal file
BIN
packs/protection/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/runes/000194.ldb
Normal file
BIN
packs/runes/000194.ldb
Normal file
Binary file not shown.
0
packs/runes/000201.log
Normal file
0
packs/runes/000201.log
Normal file
1
packs/runes/CURRENT
Normal file
1
packs/runes/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/runes/LOCK
Normal file
0
packs/runes/LOCK
Normal file
8
packs/runes/LOG
Normal file
8
packs/runes/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.849912 7f830ea006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.895690 7f830ea006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.895779 7f830ea006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.207927 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.207966 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.215840 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.216214 7f830e0006c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.216305 7f830e0006c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
8
packs/runes/LOG.old
Normal file
8
packs/runes/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.771521 7f0833e006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.782849 7f0833e006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.782970 7f0833e006c0 Delete type=0 #192
|
||||
2024/04/25-23:32:00.061611 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:32:00.061677 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:32:00.097976 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:32:00.098231 7f08310006c0 Manual compaction at level-0 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:32:00.098275 7f08310006c0 Manual compaction at level-1 from '!items!1JqWbEkHUoKXbsgn' @ 72057594037927935 : 1 .. '!items!xnCf2xIPzdsUoBTy' @ 0 : 0; will stop at (end)
|
BIN
packs/runes/MANIFEST-000199
Normal file
BIN
packs/runes/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/scenes/000110.ldb
Normal file
BIN
packs/scenes/000110.ldb
Normal file
Binary file not shown.
0
packs/scenes/000117.log
Normal file
0
packs/scenes/000117.log
Normal file
1
packs/scenes/CURRENT
Normal file
1
packs/scenes/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000115
|
0
packs/scenes/LOCK
Normal file
0
packs/scenes/LOCK
Normal file
8
packs/scenes/LOG
Normal file
8
packs/scenes/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.976720 7f830ea006c0 Recovering log #113
|
||||
2024/05/01-09:35:37.030673 7f830ea006c0 Delete type=3 #111
|
||||
2024/05/01-09:35:37.030805 7f830ea006c0 Delete type=0 #113
|
||||
2024/05/01-09:42:43.223193 7f830e0006c0 Level-0 table #118: started
|
||||
2024/05/01-09:42:43.223235 7f830e0006c0 Level-0 table #118: 0 bytes OK
|
||||
2024/05/01-09:42:43.229929 7f830e0006c0 Delete type=0 #116
|
||||
2024/05/01-09:42:43.230159 7f830e0006c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.230186 7f830e0006c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
8
packs/scenes/LOG.old
Normal file
8
packs/scenes/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.802683 7f0833e006c0 Recovering log #108
|
||||
2024/04/25-23:18:20.813089 7f0833e006c0 Delete type=3 #106
|
||||
2024/04/25-23:18:20.813231 7f0833e006c0 Delete type=0 #108
|
||||
2024/04/25-23:32:00.135709 7f08310006c0 Level-0 table #114: started
|
||||
2024/04/25-23:32:00.135776 7f08310006c0 Level-0 table #114: 0 bytes OK
|
||||
2024/04/25-23:32:00.192118 7f08310006c0 Delete type=0 #112
|
||||
2024/04/25-23:32:00.192474 7f08310006c0 Manual compaction at level-0 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:32:00.192524 7f08310006c0 Manual compaction at level-1 from '!scenes!ZDV2IwduhOXTxy72' @ 72057594037927935 : 1 .. '!scenes!ZDV2IwduhOXTxy72' @ 0 : 0; will stop at (end)
|
BIN
packs/scenes/MANIFEST-000115
Normal file
BIN
packs/scenes/MANIFEST-000115
Normal file
Binary file not shown.
BIN
packs/skills-creatures/000102.ldb
Normal file
BIN
packs/skills-creatures/000102.ldb
Normal file
Binary file not shown.
0
packs/skills-creatures/000109.log
Normal file
0
packs/skills-creatures/000109.log
Normal file
1
packs/skills-creatures/CURRENT
Normal file
1
packs/skills-creatures/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000107
|
0
packs/skills-creatures/LOCK
Normal file
0
packs/skills-creatures/LOCK
Normal file
8
packs/skills-creatures/LOG
Normal file
8
packs/skills-creatures/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.208918 7f830ea006c0 Recovering log #105
|
||||
2024/05/01-09:35:36.259681 7f830ea006c0 Delete type=3 #103
|
||||
2024/05/01-09:35:36.259786 7f830ea006c0 Delete type=0 #105
|
||||
2024/05/01-09:42:43.141574 7f830e0006c0 Level-0 table #110: started
|
||||
2024/05/01-09:42:43.141614 7f830e0006c0 Level-0 table #110: 0 bytes OK
|
||||
2024/05/01-09:42:43.148597 7f830e0006c0 Delete type=0 #108
|
||||
2024/05/01-09:42:43.156038 7f830e0006c0 Manual compaction at level-0 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.156102 7f830e0006c0 Manual compaction at level-1 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
8
packs/skills-creatures/LOG.old
Normal file
8
packs/skills-creatures/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.580223 7f0833e006c0 Recovering log #100
|
||||
2024/04/25-23:18:20.591502 7f0833e006c0 Delete type=3 #98
|
||||
2024/04/25-23:18:20.591624 7f0833e006c0 Delete type=0 #100
|
||||
2024/04/25-23:31:59.691806 7f08310006c0 Level-0 table #106: started
|
||||
2024/04/25-23:31:59.691866 7f08310006c0 Level-0 table #106: 0 bytes OK
|
||||
2024/04/25-23:31:59.733591 7f08310006c0 Delete type=0 #104
|
||||
2024/04/25-23:31:59.807634 7f08310006c0 Manual compaction at level-0 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.807869 7f08310006c0 Manual compaction at level-1 from '!items!6bmjc4MUduGs9s6n' @ 72057594037927935 : 1 .. '!items!t692JcsGHG4YJIlM' @ 0 : 0; will stop at (end)
|
BIN
packs/skills-creatures/MANIFEST-000107
Normal file
BIN
packs/skills-creatures/MANIFEST-000107
Normal file
Binary file not shown.
BIN
packs/skills/000194.ldb
Normal file
BIN
packs/skills/000194.ldb
Normal file
Binary file not shown.
0
packs/skills/000201.log
Normal file
0
packs/skills/000201.log
Normal file
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
0
packs/skills/LOCK
Normal file
0
packs/skills/LOCK
Normal file
8
packs/skills/LOG
Normal file
8
packs/skills/LOG
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/05/01-09:35:36.157653 7f830f4006c0 Recovering log #197
|
||||
2024/05/01-09:35:36.201543 7f830f4006c0 Delete type=3 #195
|
||||
2024/05/01-09:35:36.201652 7f830f4006c0 Delete type=0 #197
|
||||
2024/05/01-09:42:43.126781 7f830e0006c0 Level-0 table #202: started
|
||||
2024/05/01-09:42:43.126821 7f830e0006c0 Level-0 table #202: 0 bytes OK
|
||||
2024/05/01-09:42:43.133212 7f830e0006c0 Delete type=0 #200
|
||||
2024/05/01-09:42:43.156000 7f830e0006c0 Manual compaction at level-0 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
||||
2024/05/01-09:42:43.156076 7f830e0006c0 Manual compaction at level-1 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
8
packs/skills/LOG.old
Normal file
8
packs/skills/LOG.old
Normal file
|
@ -0,0 +1,8 @@
|
|||
2024/04/25-23:18:20.564492 7f0832a006c0 Recovering log #192
|
||||
2024/04/25-23:18:20.576603 7f0832a006c0 Delete type=3 #190
|
||||
2024/04/25-23:18:20.576708 7f0832a006c0 Delete type=0 #192
|
||||
2024/04/25-23:31:59.612869 7f08310006c0 Level-0 table #198: started
|
||||
2024/04/25-23:31:59.612922 7f08310006c0 Level-0 table #198: 0 bytes OK
|
||||
2024/04/25-23:31:59.654250 7f08310006c0 Delete type=0 #196
|
||||
2024/04/25-23:31:59.691593 7f08310006c0 Manual compaction at level-0 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
||||
2024/04/25-23:31:59.691665 7f08310006c0 Manual compaction at level-1 from '!items!0LlzDyCurJedqeyG' @ 72057594037927935 : 1 .. '!items!tq6mEgXog7h4VyWk' @ 0 : 0; will stop at (end)
|
BIN
packs/skills/MANIFEST-000199
Normal file
BIN
packs/skills/MANIFEST-000199
Normal file
Binary file not shown.
BIN
packs/tables/000194.ldb
Normal file
BIN
packs/tables/000194.ldb
Normal file
Binary file not shown.
0
packs/tables/000201.log
Normal file
0
packs/tables/000201.log
Normal file
1
packs/tables/CURRENT
Normal file
1
packs/tables/CURRENT
Normal file
|
@ -0,0 +1 @@
|
|||
MANIFEST-000199
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user