Compare commits
37 Commits
fvtt-les-h
...
fvtt-les-h
| Author | SHA1 | Date | |
|---|---|---|---|
| c993a9a5b1 | |||
| cc7de0e53c | |||
| 4d41986c12 | |||
| d04731f475 | |||
| 44a641a0ca | |||
| 1ad022d193 | |||
| 1c7cf343b1 | |||
| d4b00e3508 | |||
| adc912e6cd | |||
| 51a457ebf6 | |||
| 2e9c558027 | |||
| bcd0758328 | |||
| 2b680a203f | |||
| e3d7874dce | |||
| ab6a5832c0 | |||
| d83a999974 | |||
| b83890a764 | |||
| 5ad3c165e5 | |||
| 2b3e774cbb | |||
| 96f8d2bceb | |||
| e288c90ee4 | |||
| 8916de8613 | |||
| 8598df5a57 | |||
| 8781462c8d | |||
| 8c38aead3e | |||
| 67bf71e6c0 | |||
| 63d15e82bb | |||
| 62c3787cea | |||
| df61abac19 | |||
| a7d1a14c52 | |||
| b0dc6f36e4 | |||
| 5109d2aa91 | |||
| 51c162ecbb | |||
| 44d02b0cd1 | |||
| 9b1600304a | |||
| 2dff59c829 | |||
| 55a2a8e3c3 |
BIN
assets/icons/sort.webp
Normal file
BIN
assets/icons/sort.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
BIN
assets/scenes/8DjkNeeujp2qff1N-thumb.webp
Normal file
BIN
assets/scenes/8DjkNeeujp2qff1N-thumb.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.2 KiB |
BIN
assets/scenes/ZjIQTg8S4hLZ4kXN-thumb.webp
Normal file
BIN
assets/scenes/ZjIQTg8S4hLZ4kXN-thumb.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.8 KiB |
BIN
assets/scenes/aanMTXv8znDyE6qb-thumb.webp
Normal file
BIN
assets/scenes/aanMTXv8znDyE6qb-thumb.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
BIN
assets/scenes/ypDutqjqZcr7lx6I-thumb.webp
Normal file
BIN
assets/scenes/ypDutqjqZcr7lx6I-thumb.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.4 KiB |
BIN
assets/ui/heritiers_background_01.webp
Normal file
BIN
assets/ui/heritiers_background_01.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 192 KiB |
44
lang/fr.json
44
lang/fr.json
@@ -1,30 +1,24 @@
|
|||||||
{
|
{
|
||||||
"ACTOR": {
|
"TYPES": {
|
||||||
"TypePersonnage": "Personnage",
|
"Actor": {
|
||||||
"TypePNJ": "PNJ"
|
"personnage": "Personnage",
|
||||||
|
"pnj": "PNJ"
|
||||||
},
|
},
|
||||||
|
"Item": {
|
||||||
"ITEM": {
|
"accessoire": "Accessoire",
|
||||||
"TypeArtefact": "Artefact",
|
"arme": "Arme",
|
||||||
"TypeArme": "Arme",
|
"atoutfeerique": "Atout féerique",
|
||||||
"TypeTalent": "Talent",
|
"avantage": "Avantage",
|
||||||
"TypeHistorique": "Historique",
|
"capacitenaturelle": "Capacité naturelle",
|
||||||
"TypeProfil": "Profil",
|
"competence": "Compétence",
|
||||||
"TypeCompetence": "Compétence",
|
"contact": "Contact",
|
||||||
"TypeProtection": "Protection",
|
"desavantage": "Désavantage",
|
||||||
"TypeMonnaie": "Monnaie",
|
"equipement": "Equipement",
|
||||||
"TypeEquipement": "Equipement",
|
"fee": "Fée",
|
||||||
"TypeRessource": "Ressource",
|
"pouvoir": "Pouvoir",
|
||||||
"TypeContact": "Contact"
|
"profil": "Profil",
|
||||||
|
"protection": "Protection",
|
||||||
},
|
"sort": "Sort"
|
||||||
|
|
||||||
"HAWKMOON": {
|
|
||||||
"ui": {
|
|
||||||
"editContact": "Modifier le contact",
|
|
||||||
"deleteContact": "Supprimer le contact",
|
|
||||||
"editTrait": "Modifier le trait",
|
|
||||||
"deleteTrait": "Supprimer le trait"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@ export class HeritiersActorPNJSheet extends HeritiersActorSheet {
|
|||||||
/** @override */
|
/** @override */
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
|
|
||||||
return mergeObject(super.defaultOptions, {
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||||
classes: ["fvtt-les-heritiers", "sheet", "actor"],
|
classes: ["fvtt-les-heritiers", "sheet", "actor"],
|
||||||
template: "systems/fvtt-les-heritiers/templates/actor-pnj-sheet.html",
|
template: "systems/fvtt-les-heritiers/templates/actor-pnj-sheet.html",
|
||||||
width: 780,
|
width: 780,
|
||||||
|
|||||||
@@ -6,12 +6,12 @@
|
|||||||
import { HeritiersUtility } from "./heritiers-utility.js";
|
import { HeritiersUtility } from "./heritiers-utility.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class HeritiersActorSheet extends ActorSheet {
|
export class HeritiersActorSheet extends foundry.appv1.sheets.ActorSheet {
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
|
|
||||||
return mergeObject(super.defaultOptions, {
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||||
classes: ["fvtt-les-heritiers", "sheet", "actor"],
|
classes: ["fvtt-les-heritiers", "sheet", "actor"],
|
||||||
template: "systems/fvtt-les-heritiers/templates/actor-sheet.html",
|
template: "systems/fvtt-les-heritiers/templates/actor-sheet.html",
|
||||||
width: 780,
|
width: 780,
|
||||||
@@ -24,7 +24,7 @@ export class HeritiersActorSheet extends ActorSheet {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async getData() {
|
async getData() {
|
||||||
const objectData = duplicate(this.object)
|
const objectData = foundry.utils.duplicate(this.object)
|
||||||
|
|
||||||
let formData = {
|
let formData = {
|
||||||
title: this.title,
|
title: this.title,
|
||||||
@@ -40,28 +40,31 @@ export class HeritiersActorSheet extends ActorSheet {
|
|||||||
skills: this.actor.getSkills(),
|
skills: this.actor.getSkills(),
|
||||||
utileSkillsMental: this.actor.organizeUtileSkills("mental"),
|
utileSkillsMental: this.actor.organizeUtileSkills("mental"),
|
||||||
utileSkillsPhysical: this.actor.organizeUtileSkills("physical"),
|
utileSkillsPhysical: this.actor.organizeUtileSkills("physical"),
|
||||||
|
competencesMagie: HeritiersUtility.getCompetencesMagie(),
|
||||||
futileSkills: this.actor.organizeFutileSkills(),
|
futileSkills: this.actor.organizeFutileSkills(),
|
||||||
contacts: this.actor.organizeContacts(),
|
contacts: this.actor.organizeContacts(),
|
||||||
armes: duplicate(this.actor.getWeapons()),
|
armes: foundry.utils.duplicate(this.actor.getWeapons()),
|
||||||
monnaies: duplicate(this.actor.getMonnaies()),
|
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
|
||||||
pouvoirs: duplicate(this.actor.getPouvoirs()),
|
pouvoirs: foundry.utils.duplicate(this.actor.getPouvoirs()),
|
||||||
fee: duplicate(this.actor.getFee() || {} ),
|
fee: foundry.utils.duplicate(this.actor.getFee() || {}),
|
||||||
protections: duplicate(this.actor.getArmors()),
|
protections: foundry.utils.duplicate(this.actor.getArmors()),
|
||||||
combat: this.actor.getCombatValues(),
|
combat: this.actor.getCombatValues(),
|
||||||
equipements: duplicate(this.actor.getEquipments()),
|
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
|
||||||
avantages: duplicate(this.actor.getAvantages()),
|
avantages: foundry.utils.duplicate(this.actor.getAvantages()),
|
||||||
atouts: duplicate(this.actor.getAtouts()),
|
atouts: foundry.utils.duplicate(this.actor.getAtouts()),
|
||||||
capacites: duplicate(this.actor.getCapacites()),
|
capacites: foundry.utils.duplicate(this.actor.getCapacites()),
|
||||||
desavantages: duplicate(this.actor.getDesavantages()),
|
desavantages: foundry.utils.duplicate(this.actor.getDesavantages()),
|
||||||
profils: duplicate(this.actor.getProfils()),
|
profils: foundry.utils.duplicate(this.actor.getProfils()),
|
||||||
pvMalus: this.actor.getPvMalus(),
|
pvMalus: this.actor.getPvMalus(),
|
||||||
|
heritage: game.settings.get("fvtt-les-heritiers", "heritiers-heritage"),
|
||||||
initiative: this.actor.getFlag("world", "last-initiative") || -1,
|
initiative: this.actor.getFlag("world", "last-initiative") || -1,
|
||||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, { async: true }),
|
||||||
revesetranges: await TextEditor.enrichHTML(this.object.system.biodata.revesetranges, {async: true}),
|
revesetranges: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.revesetranges, { async: true }),
|
||||||
secretsdecouverts: await TextEditor.enrichHTML(this.object.system.biodata.secretsdecouverts, {async: true}),
|
secretsdecouverts: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.secretsdecouverts, { async: true }),
|
||||||
questions: await TextEditor.enrichHTML(this.object.system.biodata.questions, {async: true}),
|
questions: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.questions, { async: true }),
|
||||||
habitat: await TextEditor.enrichHTML(this.object.system.biodata.habitat, {async: true}),
|
habitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.habitat, { async: true }),
|
||||||
playernotes: await TextEditor.enrichHTML(this.object.system.biodata.playernotes, {async: true}),
|
playernotes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.playernotes, { async: true }),
|
||||||
|
magieList: this.actor.prepareMagie(),
|
||||||
options: this.options,
|
options: this.options,
|
||||||
owner: this.document.isOwner,
|
owner: this.document.isOwner,
|
||||||
editScore: this.options.editScore,
|
editScore: this.options.editScore,
|
||||||
@@ -76,19 +79,42 @@ export class HeritiersActorSheet extends ActorSheet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getCelluleTalents( ) {
|
dialogRecupUsage() {
|
||||||
let talents = []
|
new Dialog({
|
||||||
for(let cellule of game.actors) {
|
title: "Récupération des Points d'Usage",
|
||||||
if (cellule.type == "cellule") {
|
content: "<p>Combien de Points d'Usage souhaitez-vous récupérer ?</p>",
|
||||||
let found = cellule.system.members.find( it => it.id == this.actor.id)
|
buttons: {
|
||||||
if (found) {
|
one: {
|
||||||
talents = talents.concat( cellule.getTalents() )
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: "1 Point",
|
||||||
|
callback: () => {
|
||||||
|
this.actor.recupUsage(1)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
two: {
|
||||||
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: "2 Points",
|
||||||
|
callback: () => {
|
||||||
|
this.actor.recupUsage(2)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
four: {
|
||||||
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: "4 Points",
|
||||||
|
callback: () => {
|
||||||
|
this.actor.recupUsage(4)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
all: {
|
||||||
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: "Tous les Points",
|
||||||
|
callback: () => {
|
||||||
|
this.actor.recupUsage(100)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return talents
|
}).render(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/** @override */
|
/** @override */
|
||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
@@ -153,6 +179,11 @@ export class HeritiersActorSheet extends ActorSheet {
|
|||||||
let compId = li.data("item-id")
|
let compId = li.data("item-id")
|
||||||
this.actor.rollCompetence(compId)
|
this.actor.rollCompetence(compId)
|
||||||
})
|
})
|
||||||
|
html.find('.roll-sort').click((event) => {
|
||||||
|
const li = $(event.currentTarget).parents(".item")
|
||||||
|
let sortId = li.data("item-id")
|
||||||
|
this.actor.rollSort(sortId)
|
||||||
|
})
|
||||||
html.find('.roll-attaque-arme').click((event) => {
|
html.find('.roll-attaque-arme').click((event) => {
|
||||||
const li = $(event.currentTarget).parents(".item")
|
const li = $(event.currentTarget).parents(".item")
|
||||||
let armeId = li.data("item-id")
|
let armeId = li.data("item-id")
|
||||||
@@ -179,9 +210,20 @@ export class HeritiersActorSheet extends ActorSheet {
|
|||||||
let pouvoirId = li.data("item-id")
|
let pouvoirId = li.data("item-id")
|
||||||
this.actor.rollPouvoir(pouvoirId)
|
this.actor.rollPouvoir(pouvoirId)
|
||||||
})
|
})
|
||||||
|
html.find('.dialog-recup-usage').click((event) => {
|
||||||
|
this.dialogRecupUsage()
|
||||||
|
})
|
||||||
|
|
||||||
html.find('.item-add').click((event) => {
|
html.find('.item-add').click((event) => {
|
||||||
const itemType = $(event.currentTarget).data("type")
|
const itemType = $(event.currentTarget).data("type")
|
||||||
|
if (itemType == "sort") {
|
||||||
|
// Get data-sort-competence
|
||||||
|
let sortCompetence = $(event.currentTarget).data("sort-competence");
|
||||||
|
if (sortCompetence) {
|
||||||
|
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType} de ${sortCompetence}`, type: itemType, system: { competence: sortCompetence } }], { renderSheet: true })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ export class HeritiersActor extends Actor {
|
|||||||
const skills = await HeritiersUtility.loadCompendium("fvtt-les-heritiers.competences")
|
const skills = await HeritiersUtility.loadCompendium("fvtt-les-heritiers.competences")
|
||||||
data.items = []
|
data.items = []
|
||||||
for (let skill of skills) {
|
for (let skill of skills) {
|
||||||
if (skill.system.categorie == "utile") {
|
if (skill.system.categorie == "utile" && skill.system.profil != "magie") {
|
||||||
data.items.push(skill.toObject())
|
data.items.push(skill.toObject())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ export class HeritiersActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
prepareArme(arme) {
|
prepareArme(arme) {
|
||||||
arme = duplicate(arme)
|
arme = foundry.utils.duplicate(arme)
|
||||||
arme.system.isMelee = HeritiersUtility.isArmeMelee(arme)
|
arme.system.isMelee = HeritiersUtility.isArmeMelee(arme)
|
||||||
return arme
|
return arme
|
||||||
}
|
}
|
||||||
@@ -86,7 +86,7 @@ export class HeritiersActor extends Actor {
|
|||||||
|
|
||||||
/* ----------------------- --------------------- */
|
/* ----------------------- --------------------- */
|
||||||
addMember(actorId) {
|
addMember(actorId) {
|
||||||
let members = duplicate(this.system.members)
|
let members = foundry.utils.duplicate(this.system.members)
|
||||||
members.push({ id: actorId })
|
members.push({ id: actorId })
|
||||||
this.update({ 'system.members': members })
|
this.update({ 'system.members': members })
|
||||||
}
|
}
|
||||||
@@ -135,13 +135,102 @@ export class HeritiersActor extends Actor {
|
|||||||
return this.getItemSorted(["profil"])
|
return this.getItemSorted(["profil"])
|
||||||
}
|
}
|
||||||
getPouvoirs() {
|
getPouvoirs() {
|
||||||
return this.getItemSorted(["pouvoir"])
|
let pouvoirs = []
|
||||||
|
for (let item of this.items) {
|
||||||
|
if (item.type == "pouvoir") {
|
||||||
|
let itemObj = foundry.utils.duplicate(item)
|
||||||
|
itemObj.maxUsage = this.getPouvoirUsageMax(item)
|
||||||
|
pouvoirs.push(itemObj)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
HeritiersUtility.sortArrayObjectsByName(pouvoirs)
|
||||||
|
return pouvoirs
|
||||||
|
}
|
||||||
|
getSorts() {
|
||||||
|
return this.getItemSorted(["sort"])
|
||||||
|
}
|
||||||
|
getCompetencesMagie() {
|
||||||
|
let comp = []
|
||||||
|
for (let item of this.items) {
|
||||||
|
if (item.type == "competence" && item.system.profil == "magie") {
|
||||||
|
let itemObj = foundry.utils.duplicate(item)
|
||||||
|
comp.push(itemObj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HeritiersUtility.sortArrayObjectsByName(comp)
|
||||||
|
return comp
|
||||||
|
}
|
||||||
|
|
||||||
|
prepareMagie() {
|
||||||
|
let magieList = []
|
||||||
|
for (let item of this.items) {
|
||||||
|
if (item.type == "competence" && item.system.profil == "magie") {
|
||||||
|
let magie = {}
|
||||||
|
magie.name = item.name
|
||||||
|
magie.competence = foundry.utils.duplicate(item)
|
||||||
|
magie.rang = Math.round(item.system.niveau / 2);
|
||||||
|
magie.rangGenericName = game.system.lesheritiers.config.rangName[magie.rang];
|
||||||
|
console.log("Magie", item.name, item.system.niveau, magie.rang, magie.rangGenericName)
|
||||||
|
//magie.rangSpecificName = game.system.lesheritiers.config.rangNameSpecific[item.name][magie.rangGenericName];
|
||||||
|
magie.sorts = {}
|
||||||
|
if (item.name == "Magie du Clan") {
|
||||||
|
magie.sorts = {
|
||||||
|
"soufflecombat": {
|
||||||
|
1: { nomNiveau: magie.competence.system.nomniveausouffle.soufflecombat["1"], sorts: [] },
|
||||||
|
2: { nomNiveau: magie.competence.system.nomniveausouffle.soufflecombat["2"], sorts: [] },
|
||||||
|
3: { nomNiveau: magie.competence.system.nomniveausouffle.soufflecombat["3"], sorts: [] },
|
||||||
|
4: { nomNiveau: magie.competence.system.nomniveausouffle.soufflecombat["4"], sorts: [] }
|
||||||
|
},
|
||||||
|
"soufflemouvement": {
|
||||||
|
1: { nomNiveau: magie.competence.system.nomniveausouffle.soufflemouvement["1"], sorts: [] },
|
||||||
|
2: { nomNiveau: magie.competence.system.nomniveausouffle.soufflemouvement["2"], sorts: [] },
|
||||||
|
3: { nomNiveau: magie.competence.system.nomniveausouffle.soufflemouvement["3"], sorts: [] },
|
||||||
|
4: { nomNiveau: magie.competence.system.nomniveausouffle.soufflemouvement["4"], sorts: [] }
|
||||||
|
},
|
||||||
|
"souffleesprit": {
|
||||||
|
1: { nomNiveau: magie.competence.system.nomniveausouffle.souffleesprit["1"], sorts: [] },
|
||||||
|
2: { nomNiveau: magie.competence.system.nomniveausouffle.souffleesprit["2"], sorts: [] },
|
||||||
|
3: { nomNiveau: magie.competence.system.nomniveausouffle.souffleesprit["3"], sorts: [] },
|
||||||
|
4: { nomNiveau: magie.competence.system.nomniveausouffle.souffleesprit["4"], sorts: [] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (let sort of this.items) {
|
||||||
|
if (sort.type == "sort" && sort.system.competence == item.name) {
|
||||||
|
let sortObj = foundry.utils.duplicate(sort)
|
||||||
|
sortObj.sdValue = HeritiersUtility.getSDSortValue(Number(sort.system.niveau))
|
||||||
|
if (!magie.sorts[sort.system?.souffle]) {
|
||||||
|
console.warn("Sort with unknown souffle ", sort.system.souffle, sort)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
magie.sorts[sort.system.souffle][Number(sort.system.niveau)].sorts.push(sortObj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
magie.sorts = {
|
||||||
|
1: { nomNiveau: magie.competence.system.nomniveau["1"], sorts: [] },
|
||||||
|
2: { nomNiveau: magie.competence.system.nomniveau["2"], sorts: [] },
|
||||||
|
3: { nomNiveau: magie.competence.system.nomniveau["3"], sorts: [] },
|
||||||
|
4: { nomNiveau: magie.competence.system.nomniveau["4"], sorts: [] }
|
||||||
|
}
|
||||||
|
for (let sort of this.items) {
|
||||||
|
if (sort.type == "sort" && sort.system.competence == item.name) {
|
||||||
|
let sortObj = foundry.utils.duplicate(sort)
|
||||||
|
sortObj.sdValue = HeritiersUtility.getSDSortValue(Number(sort.system.niveau))
|
||||||
|
magie.sorts[Number(sort.system.niveau)].sorts.push(sortObj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
magieList.push(magie)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return magieList
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getSkills() {
|
getSkills() {
|
||||||
let comp = []
|
let comp = []
|
||||||
for (let item of this.items) {
|
for (let item of this.items) {
|
||||||
item = duplicate(item)
|
item = foundry.utils.duplicate(item)
|
||||||
if (item.type == "competence") {
|
if (item.type == "competence") {
|
||||||
comp.push(item)
|
comp.push(item)
|
||||||
}
|
}
|
||||||
@@ -152,7 +241,7 @@ export class HeritiersActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
prepareUtileSkill(item) {
|
prepareUtileSkill(item) {
|
||||||
let specList = []
|
let specList = []
|
||||||
if (item && item.system.categorie && item.system.categorie == "utile") {
|
if (item?.system?.categorie == "utile") {
|
||||||
for (let spec of item.system.specialites) {
|
for (let spec of item.system.specialites) {
|
||||||
specList.push(spec.name)
|
specList.push(spec.name)
|
||||||
}
|
}
|
||||||
@@ -161,6 +250,28 @@ export class HeritiersActor extends Actor {
|
|||||||
item.specList = specList.toString()
|
item.specList = specList.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
organizeMagicSkills() {
|
||||||
|
let comp = {}
|
||||||
|
for (let key in game.system.lesheritiers.config.competenceProfil) {
|
||||||
|
if (game.system.lesheritiers.config.competenceProfil[key].kind == "magical")
|
||||||
|
comp[key] = { skills: [], niveau: 0 }
|
||||||
|
}
|
||||||
|
for (let item of this.items) {
|
||||||
|
if (item.type == "competence") {
|
||||||
|
if (item.system.categorie == "utile" && comp[item.system.profil]) {
|
||||||
|
this.prepareUtileSkill(item)
|
||||||
|
comp[item.system.profil].skills.push(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let key in comp) {
|
||||||
|
HeritiersUtility.sortArrayObjectsByName(comp[key].skills)
|
||||||
|
}
|
||||||
|
return Object.fromEntries(Object.entries(comp).sort())
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
organizeUtileSkills(kind = "mental") {
|
organizeUtileSkills(kind = "mental") {
|
||||||
let comp = {}
|
let comp = {}
|
||||||
@@ -182,6 +293,7 @@ export class HeritiersActor extends Actor {
|
|||||||
}
|
}
|
||||||
return Object.fromEntries(Object.entries(comp).sort())
|
return Object.fromEntries(Object.entries(comp).sort())
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
organizeContacts() {
|
organizeContacts() {
|
||||||
let contactList = {}
|
let contactList = {}
|
||||||
@@ -248,9 +360,39 @@ export class HeritiersActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async prepareData() {
|
async prepareData() {
|
||||||
|
|
||||||
|
let pvMax = (this.system.caracteristiques.con.rang * 3) + 9 + this.system.pv.mod
|
||||||
|
if (this.system.pv.max != pvMax) {
|
||||||
|
this.update({ 'system.pv.max': pvMax })
|
||||||
|
}
|
||||||
|
if (this.system.biodata.magie || this.type == "pnj") {
|
||||||
|
let pointsAmes = this.system.caracteristiques.esp.rang + this.system.caracteristiques.san.rang + this.getMaxRangMagie()
|
||||||
|
if (this.system.magie.pointsame.max != pointsAmes) {
|
||||||
|
this.update({ 'system.magie.pointsame.max': pointsAmes })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
super.prepareData();
|
super.prepareData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
getMaxRangMagie() {
|
||||||
|
let niv = 0
|
||||||
|
let bestMagie
|
||||||
|
for (let comp of this.items) {
|
||||||
|
if (comp.type == "competence" && comp.system.profil == "magie") {
|
||||||
|
if (comp.system.niveau > niv) {
|
||||||
|
bestMagie = comp
|
||||||
|
niv = comp.system.niveau
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bestMagie) {
|
||||||
|
return Math.round(bestMagie.system.niveau / 2)
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
prepareDerivedData() {
|
prepareDerivedData() {
|
||||||
|
|
||||||
@@ -270,7 +412,7 @@ export class HeritiersActor extends Actor {
|
|||||||
getItemById(id) {
|
getItemById(id) {
|
||||||
let item = this.items.find(item => item.id == id);
|
let item = this.items.find(item => item.id == id);
|
||||||
if (item) {
|
if (item) {
|
||||||
item = duplicate(item)
|
item = foundry.utils.duplicate(item)
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@@ -278,7 +420,7 @@ export class HeritiersActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async equipItem(itemId) {
|
async equipItem(itemId) {
|
||||||
let item = this.items.find(item => item.id == 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 }
|
let update = { _id: item.id, "system.equipped": !item.system.equipped }
|
||||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||||
}
|
}
|
||||||
@@ -304,12 +446,12 @@ export class HeritiersActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getPvMalus() {
|
getPvMalus() {
|
||||||
if (this.system.pv.value > 0) {
|
if (this.system.pv.value > 0) {
|
||||||
if (this.system.pv.value < this.system.pv.max / 2) {
|
|
||||||
return { name: "Santé", value: -1 }
|
|
||||||
}
|
|
||||||
if (this.system.pv.value < 5) {
|
if (this.system.pv.value < 5) {
|
||||||
return { name: "Santé", value: -2 }
|
return { name: "Santé", value: -2 }
|
||||||
}
|
}
|
||||||
|
if (this.system.pv.value < this.system.pv.max / 2) {
|
||||||
|
return { name: "Santé", value: -1 }
|
||||||
|
}
|
||||||
return { name: "Santé", value: 0 }
|
return { name: "Santé", value: 0 }
|
||||||
}
|
}
|
||||||
return { name: "Moribond(e)", value: -50 }
|
return { name: "Moribond(e)", value: -50 }
|
||||||
@@ -328,7 +470,7 @@ export class HeritiersActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getCarac(attrKey) {
|
getCarac(attrKey) {
|
||||||
return duplicate(this.system.caracteristiques)
|
return foundry.utils.duplicate(this.system.caracteristiques)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -339,7 +481,7 @@ export class HeritiersActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async equipGear(equipmentId) {
|
async equipGear(equipmentId) {
|
||||||
let item = this.items.find(item => item.id == equipmentId);
|
let item = this.items.find(item => item.id == equipmentId);
|
||||||
if (item && item.system.data) {
|
if (item?.system) {
|
||||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||||
}
|
}
|
||||||
@@ -349,13 +491,13 @@ export class HeritiersActor extends Actor {
|
|||||||
getSubActors() {
|
getSubActors() {
|
||||||
let subActors = [];
|
let subActors = [];
|
||||||
for (let id of this.system.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;
|
return subActors;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async addSubActor(subActorId) {
|
async addSubActor(subActorId) {
|
||||||
let subActors = duplicate(this.system.subactors);
|
let subActors = foundry.utils.duplicate(this.system.subactors);
|
||||||
subActors.push(subActorId);
|
subActors.push(subActorId);
|
||||||
await this.update({ 'system.subactors': subActors });
|
await this.update({ 'system.subactors': subActors });
|
||||||
}
|
}
|
||||||
@@ -377,11 +519,12 @@ export class HeritiersActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async incDecAdversite(adv, incDec = 0) {
|
async incDecAdversite(adv, incDec = 0) {
|
||||||
let adversite = duplicate(this.system.adversite)
|
let adversite = foundry.utils.duplicate(this.system.adversite)
|
||||||
adversite[adv] += Number(incDec)
|
adversite[adv] += Number(incDec)
|
||||||
adversite[adv] = Math.max(adversite[adv], 0)
|
adversite[adv] = Math.max(adversite[adv], 0)
|
||||||
this.update({ 'system.adversite': adversite })
|
this.update({ 'system.adversite': adversite })
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async incDecQuantity(objetId, incDec = 0) {
|
async incDecQuantity(objetId, incDec = 0) {
|
||||||
let objetQ = this.items.get(objetId)
|
let objetQ = this.items.get(objetId)
|
||||||
@@ -424,7 +567,7 @@ export class HeritiersActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async setPredilectionUsed(compId, predIdx) {
|
async setPredilectionUsed(compId, predIdx) {
|
||||||
let comp = this.items.get(compId)
|
let comp = this.items.get(compId)
|
||||||
let pred = duplicate(comp.system.predilections)
|
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||||
pred[predIdx].used = true
|
pred[predIdx].used = true
|
||||||
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
|
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
|
||||||
}
|
}
|
||||||
@@ -446,7 +589,7 @@ export class HeritiersActor extends Actor {
|
|||||||
}
|
}
|
||||||
if (arme.system.totalDefensif > maxDef) {
|
if (arme.system.totalDefensif > maxDef) {
|
||||||
maxDef = arme.system.totalDefensif
|
maxDef = arme.system.totalDefensif
|
||||||
bestArme = duplicate(arme)
|
bestArme = foundry.utils.duplicate(arme)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bestArme
|
return bestArme
|
||||||
@@ -461,7 +604,7 @@ export class HeritiersActor extends Actor {
|
|||||||
for (let auto of talent.system.automations) {
|
for (let auto of talent.system.automations) {
|
||||||
if (auto.eventtype === "prepare-roll") {
|
if (auto.eventtype === "prepare-roll") {
|
||||||
if (auto.competence.toLowerCase() == competence.name.toLowerCase()) {
|
if (auto.competence.toLowerCase() == competence.name.toLowerCase()) {
|
||||||
talent = duplicate(talent)
|
talent = foundry.utils.duplicate(talent)
|
||||||
talent.system.bonus = auto.bonus
|
talent.system.bonus = auto.bonus
|
||||||
talent.system.baCost = auto.baCost
|
talent.system.baCost = auto.baCost
|
||||||
talents.push(talent)
|
talents.push(talent)
|
||||||
@@ -501,9 +644,14 @@ export class HeritiersActor extends Actor {
|
|||||||
incDecTricherie(value) {
|
incDecTricherie(value) {
|
||||||
let tricherie = this.system.rang.tricherie
|
let tricherie = this.system.rang.tricherie
|
||||||
tricherie.value += value
|
tricherie.value += value
|
||||||
|
if (tricherie.value < 0 || tricherie.value > tricherie.max) {
|
||||||
|
ui.notifications.warn("Pas assez de points de Tricherie !")
|
||||||
|
return false
|
||||||
|
}
|
||||||
tricherie.value = Math.max(tricherie.value, 0)
|
tricherie.value = Math.max(tricherie.value, 0)
|
||||||
tricherie.value = Math.min(tricherie.value, tricherie.max)
|
tricherie.value = Math.min(tricherie.value, tricherie.max)
|
||||||
this.update({ 'system.rang.tricherie': tricherie })
|
this.update({ 'system.rang.tricherie': tricherie })
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getPireCompetence(compName1, compName2) {
|
getPireCompetence(compName1, compName2) {
|
||||||
@@ -518,6 +666,7 @@ export class HeritiersActor extends Actor {
|
|||||||
}
|
}
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getCommonRollData(compId = undefined, compName = undefined) {
|
getCommonRollData(compId = undefined, compName = undefined) {
|
||||||
let rollData = HeritiersUtility.getBasicRollData()
|
let rollData = HeritiersUtility.getBasicRollData()
|
||||||
@@ -533,16 +682,17 @@ export class HeritiersActor extends Actor {
|
|||||||
rollData.useTricherie = false
|
rollData.useTricherie = false
|
||||||
rollData.useSpecialite = false
|
rollData.useSpecialite = false
|
||||||
rollData.useHeritage = false
|
rollData.useHeritage = false
|
||||||
|
rollData.pouvoirPointsUsage = 1
|
||||||
rollData.rulesMalus.push(this.getPvMalus())
|
rollData.rulesMalus.push(this.getPvMalus())
|
||||||
|
|
||||||
if (compId) {
|
if (compId) {
|
||||||
rollData.competence = duplicate(this.items.get(compId) || {})
|
rollData.competence = foundry.utils.duplicate(this.items.get(compId) || {})
|
||||||
this.prepareUtileSkill(rollData.competence)
|
this.prepareUtileSkill(rollData.competence)
|
||||||
rollData.actionImg = rollData.competence?.img
|
rollData.actionImg = rollData.competence?.img
|
||||||
}
|
}
|
||||||
if (compName) {
|
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()) || {})
|
||||||
if (rollData.competence && rollData.competence.name) {
|
if (rollData.competence?.name) {
|
||||||
this.prepareUtileSkill(rollData.competence)
|
this.prepareUtileSkill(rollData.competence)
|
||||||
rollData.actionImg = rollData.competence?.img
|
rollData.actionImg = rollData.competence?.img
|
||||||
} else {
|
} else {
|
||||||
@@ -590,7 +740,6 @@ export class HeritiersActor extends Actor {
|
|||||||
async rollRootCompetence(compKey) {
|
async rollRootCompetence(compKey) {
|
||||||
let rollData = this.getCommonRollData()
|
let rollData = this.getCommonRollData()
|
||||||
rollData.mode = "competence"
|
rollData.mode = "competence"
|
||||||
console.log("Compkey", compKey)
|
|
||||||
rollData.competence = { name: this.system.competences[compKey].label, system: { niveau: this.system.competences[compKey].niveau } }
|
rollData.competence = { name: this.system.competences[compKey].label, system: { niveau: this.system.competences[compKey].niveau } }
|
||||||
console.log("RollDatra", rollData)
|
console.log("RollDatra", rollData)
|
||||||
let rollDialog = await HeritiersRollDialog.create(this, rollData)
|
let rollDialog = await HeritiersRollDialog.create(this, rollData)
|
||||||
@@ -606,11 +755,80 @@ export class HeritiersActor extends Actor {
|
|||||||
rollDialog.render(true)
|
rollDialog.render(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
inDecCarac(key, incDec) {
|
||||||
|
let carac = this.system.caracteristiques[key]
|
||||||
|
carac.value += incDec
|
||||||
|
if (carac.value < 0 || carac.value > carac.rang) {
|
||||||
|
ui.notifications.warn("Pas assez de points dans cette caractéristique ou rang max atteint !")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
carac.value = Math.max(carac.value, 0)
|
||||||
|
carac.value = Math.min(carac.value, carac.rang)
|
||||||
|
this.update({ [`system.caracteristiques.${key}`]: carac })
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async rollSort(sortId) {
|
||||||
|
let sort = this.items.get(sortId)
|
||||||
|
let comp = this.items.find(it => it.type == "competence" && it.name.toLowerCase() == sort.system.competence.toLowerCase())
|
||||||
|
if (!comp) {
|
||||||
|
ui.notifications.warn("Compétence de magie associée non trouvée !")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (sort.system.informatif) {
|
||||||
|
ui.notifications.info("Ce sort est uniquement informatif et ne peut pas être lancé.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let rollData = this.getCommonRollData(comp.id)
|
||||||
|
rollData.mode = "sort"
|
||||||
|
rollData.sort = foundry.utils.duplicate(sort)
|
||||||
|
rollData.sdValue = HeritiersUtility.getSDSortValue(Number(sort.system.niveau))
|
||||||
|
if (Number(sort.system.sdspecial) && Number(sort.system.sdspecial) > 0) {
|
||||||
|
rollData.sdValue = Number(sort.system.sdspecial)
|
||||||
|
}
|
||||||
|
rollData.sortPointsAme = Number(sort.system.niveau)
|
||||||
|
rollData.totalEsprit = 1
|
||||||
|
if (sort.system.competence == "Grand Langage") {
|
||||||
|
rollData.sortPointsAme *= 2
|
||||||
|
rollData.totalEsprit = Math.floor((rollData.sortPointsAme) / 3)
|
||||||
|
}
|
||||||
|
if (rollData.sortPointsAme > this.system.magie.pointsame.value) {
|
||||||
|
// Vérifier si au moins 1 point d'Esprit est disponible
|
||||||
|
if (this.system.caracteristiques.esp.value <= rollData.totalEsprit) {
|
||||||
|
ui.notifications.warn(`Pas assez de Points d'Esprit ni de Points d'Ame pour lancer ce sort (requis: ${rollData.totalEsprit}, disponible: ${this.system.caracteristiques.esp.value})`)
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
rollData.spendEsprit = true
|
||||||
|
ui.notifications.warn(`Vous n'avez pas assez de Points d'Ame pour lancer ce sort (requis: ${rollData.sortPointsAme}, disponible: ${this.system.magie.pointsame.value}).`)
|
||||||
|
ui.notifications.warn(`${rollData.totalEsprit} Points d'Esprit seront utilisés à la place si vous effectuez le lancer.`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sort.system.carac2 != "none") {
|
||||||
|
// get the best carac between carac1 and carac2
|
||||||
|
if (this.system.caracteristiques[sort.system.carac1].value > this.system.caracteristiques[sort.system.carac2].value) {
|
||||||
|
rollData.caracKey = sort.system.carac1
|
||||||
|
} else {
|
||||||
|
rollData.caracKey = sort.system.carac2
|
||||||
|
}
|
||||||
|
rollData.caracMessage = "Ce sort peut être lancé avec " + game.system.lesheritiers.config.caracList[sort.system.carac1] + " ou " + game.system.lesheritiers.config.caracList[sort.system.carac2] + ". La meilleure caractéristique a été selectionnée."
|
||||||
|
} else {
|
||||||
|
rollData.caracKey = sort.system.carac1
|
||||||
|
}
|
||||||
|
console.log("RollData", rollData)
|
||||||
|
let rollDialog = await HeritiersRollDialog.create(this, rollData)
|
||||||
|
rollDialog.render(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollAttaqueArme(armeId) {
|
async rollAttaqueArme(armeId) {
|
||||||
let arme = this.items.get(armeId)
|
let arme = this.items.get(armeId)
|
||||||
if (arme) {
|
if (arme) {
|
||||||
arme = duplicate(arme)
|
arme = foundry.utils.duplicate(arme)
|
||||||
arme.system.isMelee = HeritiersUtility.isArmeMelee(arme)
|
arme.system.isMelee = HeritiersUtility.isArmeMelee(arme)
|
||||||
let competenceName = "Tir"
|
let competenceName = "Tir"
|
||||||
let key = "prec"
|
let key = "prec"
|
||||||
@@ -643,7 +861,7 @@ export class HeritiersActor extends Actor {
|
|||||||
let rollData = this.getCommonRollData(undefined, competenceName)
|
let rollData = this.getCommonRollData(undefined, competenceName)
|
||||||
rollData.carac = this.system.caracteristiques[key]
|
rollData.carac = this.system.caracteristiques[key]
|
||||||
rollData.caracKey = key
|
rollData.caracKey = key
|
||||||
rollData.arme = duplicate(arme)
|
rollData.arme = foundry.utils.duplicate(arme)
|
||||||
rollData.mode = "attaquebrutale"
|
rollData.mode = "attaquebrutale"
|
||||||
rollData.armes = this.getOtherMeleeWeapons(arme)
|
rollData.armes = this.getOtherMeleeWeapons(arme)
|
||||||
rollData.rulesMalus.push({ name: "Attaque brutale", value: -2 })
|
rollData.rulesMalus.push({ name: "Attaque brutale", value: -2 })
|
||||||
@@ -661,7 +879,7 @@ export class HeritiersActor extends Actor {
|
|||||||
let rollData = this.getCommonRollData(undefined, pireCompetence.name)
|
let rollData = this.getCommonRollData(undefined, pireCompetence.name)
|
||||||
rollData.carac = this.system.caracteristiques[key]
|
rollData.carac = this.system.caracteristiques[key]
|
||||||
rollData.caracKey = key
|
rollData.caracKey = key
|
||||||
rollData.arme = duplicate(arme)
|
rollData.arme = foundry.utils.duplicate(arme)
|
||||||
rollData.armes = this.getOtherMeleeWeapons(arme)
|
rollData.armes = this.getOtherMeleeWeapons(arme)
|
||||||
rollData.mode = "attaquecharge"
|
rollData.mode = "attaquecharge"
|
||||||
let rollDialog = await HeritiersRollDialog.create(this, rollData)
|
let rollDialog = await HeritiersRollDialog.create(this, rollData)
|
||||||
@@ -678,7 +896,7 @@ export class HeritiersActor extends Actor {
|
|||||||
let rollData = this.getCommonRollData(undefined, competenceName)
|
let rollData = this.getCommonRollData(undefined, competenceName)
|
||||||
rollData.carac = this.system.caracteristiques["agi"]
|
rollData.carac = this.system.caracteristiques["agi"]
|
||||||
rollData.caracKey = "agi"
|
rollData.caracKey = "agi"
|
||||||
rollData.arme = duplicate(arme)
|
rollData.arme = foundry.utils.duplicate(arme)
|
||||||
rollData.mode = "assommer"
|
rollData.mode = "assommer"
|
||||||
if (rollData.defenderTokenId) {
|
if (rollData.defenderTokenId) {
|
||||||
rollData.cacheDifficulte = true
|
rollData.cacheDifficulte = true
|
||||||
@@ -688,22 +906,153 @@ export class HeritiersActor extends Actor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
pouvoirPassifDialog(pouvoir) {
|
||||||
|
let rollData = this.getCommonRollData()
|
||||||
|
rollData.pouvoir = pouvoir
|
||||||
|
rollData.mode = "pouvoirpassif"
|
||||||
|
rollData.pouvoirPointsUsage = 0
|
||||||
|
rollData.noRoll = true
|
||||||
|
|
||||||
|
let d = new Dialog({
|
||||||
|
title: "Activer le pouvoir passif " + pouvoir.name,
|
||||||
|
content: "<p>Choisissez le nombre de Points d'Usage</p>",
|
||||||
|
buttons: {
|
||||||
|
one: {
|
||||||
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: "1 Point d'Usage",
|
||||||
|
callback: () => {
|
||||||
|
rollData.pouvoirPointsUsage = 1;
|
||||||
|
HeritiersUtility.rollHeritiers(rollData);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
two: {
|
||||||
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: "2 Points d'Usage",
|
||||||
|
callback: () => {
|
||||||
|
rollData.pouvoirPointsUsage = 2;
|
||||||
|
HeritiersUtility.rollHeritiers(rollData);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
three: {
|
||||||
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: "3 Points d'Usage",
|
||||||
|
callback: () => {
|
||||||
|
rollData.pouvoirPointsUsage = 3;
|
||||||
|
HeritiersUtility.rollHeritiers(rollData);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
four: {
|
||||||
|
icon: '<i class="fas fa-check"></i>',
|
||||||
|
label: "4 Points d'Usage",
|
||||||
|
callback: () => {
|
||||||
|
rollData.pouvoirPointsUsage = 4;
|
||||||
|
HeritiersUtility.rollHeritiers(rollData);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
close: {
|
||||||
|
icon: '<i class="fas fa-times"></i>',
|
||||||
|
label: "Annuler",
|
||||||
|
callback: () => {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
default: "one",
|
||||||
|
render: html => console.log("Pouvoir passif"),
|
||||||
|
close: html => console.log("No option")
|
||||||
|
});
|
||||||
|
d.render(true);
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollPouvoir(pouvoirId) {
|
async rollPouvoir(pouvoirId) {
|
||||||
let pouvoir = this.items.get(pouvoirId)
|
let pouvoir = this.items.get(pouvoirId)
|
||||||
if (pouvoir) {
|
if (pouvoir) {
|
||||||
let rollData = this.getCommonRollData(undefined, undefined)
|
if (pouvoir.system.pouvoirtype == "passif") {
|
||||||
if (pouvoir.system.feeriemasque != "autre") {
|
this.pouvoirPassifDialog(pouvoir)
|
||||||
rollData.pouvoirBase = duplicate(this.system.rang[pouvoir.system.feeriemasque.toLowerCase()])
|
return
|
||||||
rollData.pouvoirBase.label = "Féerie"
|
|
||||||
rollData.carac = duplicate(this.system.caracteristiques[pouvoir.system.carac])
|
|
||||||
rollData.caracKey = pouvoir.system.carac
|
|
||||||
}
|
}
|
||||||
rollData.pouvoir = duplicate(pouvoir)
|
|
||||||
|
let rollData = this.getCommonRollData(undefined, undefined)
|
||||||
|
|
||||||
|
rollData.pouvoirMaxUsage = this.getPouvoirUsageMax(pouvoir)
|
||||||
|
rollData.pouvoir = foundry.utils.duplicate(pouvoir)
|
||||||
rollData.mode = "pouvoir"
|
rollData.mode = "pouvoir"
|
||||||
|
|
||||||
|
if (pouvoir.system.feeriemasque != "autre") {
|
||||||
|
rollData.pouvoirBase = foundry.utils.duplicate(this.system.rang[pouvoir.system.feeriemasque.toLowerCase()])
|
||||||
|
rollData.pouvoirBase.label = "Féerie"
|
||||||
|
if (pouvoir.system.istest && !pouvoir.system.carac) {
|
||||||
|
ui.notifications.warn("Le pouvoir actif " + pouvoir.name + " n'a pas de caractéristique associée")
|
||||||
|
}
|
||||||
|
if (pouvoir.system.istest) {
|
||||||
|
rollData.carac = foundry.utils.duplicate(this.system.caracteristiques[pouvoir.system.carac])
|
||||||
|
rollData.caracKey = pouvoir.system.carac
|
||||||
|
} else {
|
||||||
|
rollData.noRoll = true
|
||||||
|
HeritiersUtility.rollHeritiers(rollData);
|
||||||
|
return;
|
||||||
|
//this.incDecPointsUsage(pouvoir.id, -rollData.pouvoirPointsUsage)
|
||||||
|
//ui.notifications.warn("Le pouvoir actif " + pouvoir.name + " a été utilisé, dépense de " + pouvoirPointsUsage + " points d'usage")
|
||||||
|
}
|
||||||
|
}
|
||||||
let rollDialog = await HeritiersRollDialog.create(this, rollData)
|
let rollDialog = await HeritiersRollDialog.create(this, rollData)
|
||||||
rollDialog.render(true)
|
rollDialog.render(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
incDecPointsAme(value) {
|
||||||
|
let newValue = this.system.magie.pointsame.value + value
|
||||||
|
newValue = Math.max(newValue, 0)
|
||||||
|
newValue = Math.min(newValue, this.system.magie.pointsame.max)
|
||||||
|
this.update({ 'system.magie.pointsame.value': newValue })
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
incDecPV(value) {
|
||||||
|
let newValue = this.system.pv.value + value
|
||||||
|
newValue = Math.max(newValue, 0)
|
||||||
|
newValue = Math.min(newValue, this.system.pv.max)
|
||||||
|
this.update({ 'system.pv.value': newValue })
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
incDecPointsUsage(pouvoirId, value) {
|
||||||
|
let pouvoir = this.items.get(pouvoirId)
|
||||||
|
let newValue = pouvoir.system.pointsusagecourant + value
|
||||||
|
newValue = Math.max(newValue, 0)
|
||||||
|
newValue = Math.min(newValue, this.getPouvoirUsageMax(pouvoir))
|
||||||
|
this.updateEmbeddedDocuments('Item', [{ _id: pouvoirId, 'system.pointsusagecourant': newValue }])
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
getPouvoirUsage(pouvoirId) {
|
||||||
|
let pouvoir = this.items.get(pouvoirId)
|
||||||
|
return pouvoir.system.pointsusagecourant
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
getPouvoirUsageMax(pouvoir) {
|
||||||
|
if (pouvoir.system.masquetype == "masque") {
|
||||||
|
return this.system.rang.masque.value
|
||||||
|
}
|
||||||
|
return this.system.rang.feerie.value
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
recupUsage(value) {
|
||||||
|
let updates = []
|
||||||
|
for (let pouvoir of this.items) {
|
||||||
|
if (pouvoir.type == "pouvoir") {
|
||||||
|
let newValue = pouvoir.system.pointsusagecourant + value
|
||||||
|
newValue = Math.max(newValue, 0)
|
||||||
|
newValue = Math.min(newValue, this.getPouvoirUsageMax(pouvoir))
|
||||||
|
updates.push({ _id: pouvoir.id, 'system.pointsusagecourant': newValue })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (updates.length > 0) {
|
||||||
|
this.updateEmbeddedDocuments('Item', updates)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ export const HERITIERS_CONFIG = {
|
|||||||
"combattant": { kind: "physical", name: "Combattant" },
|
"combattant": { kind: "physical", name: "Combattant" },
|
||||||
"erudit": { kind: "mental", name: "Erudit" },
|
"erudit": { kind: "mental", name: "Erudit" },
|
||||||
"savant": { kind: "mental", name: "Savant" },
|
"savant": { kind: "mental", name: "Savant" },
|
||||||
"gentleman": {kind: "mental",name:"Gentleman"}
|
"gentleman": { kind: "mental", name: "Gentleman" },
|
||||||
|
"magie": { kind: "magical", name: "Magie" },
|
||||||
},
|
},
|
||||||
baseTestPouvoir: {
|
baseTestPouvoir: {
|
||||||
"feerie": "Féerie",
|
"feerie": "Féerie",
|
||||||
@@ -65,32 +66,32 @@ export const HERITIERS_CONFIG = {
|
|||||||
},
|
},
|
||||||
seuilsDifficulte: {
|
seuilsDifficulte: {
|
||||||
"-1": "Aucun/Non applicable",
|
"-1": "Aucun/Non applicable",
|
||||||
"5": "Enfantine",
|
"5": "Enfantine (5)",
|
||||||
"6": "Triviale",
|
"6": "Triviale (6)",
|
||||||
"7": "Moins Triviale",
|
"7": "Moins Triviale (7)",
|
||||||
"8": "Aisée",
|
"8": "Aisée (8)",
|
||||||
"7": "Moins Aisée",
|
"9": "Moins Aisée (9)",
|
||||||
"10": "Normale",
|
"10": "Normale (10)",
|
||||||
"11": "Moins Normale",
|
"11": "Moins Normale (11)",
|
||||||
"12": "Compliquée",
|
"12": "Compliquée (12)",
|
||||||
"13": "Plus Compliquée",
|
"13": "Plus Compliquée (13)",
|
||||||
"14": "Difficile",
|
"14": "Difficile (14)",
|
||||||
"15": "Plus Difficile",
|
"15": "Plus Difficile (15)",
|
||||||
"16": "Très Difficile",
|
"16": "Très Difficile (16)",
|
||||||
"17": "Très Très Difficile",
|
"17": "Très Très Difficile (17)",
|
||||||
"18": "Critique",
|
"18": "Critique (18)",
|
||||||
"19": "Plus Critique",
|
"19": "Plus Critique (19)",
|
||||||
"20": "Insurmontable",
|
"20": "Insurmontable (20)",
|
||||||
"20": "Très Insurmontable",
|
"21": "Très Insurmontable (21)",
|
||||||
"22": "Surhumaine",
|
"22": "Surhumaine (22)",
|
||||||
"23": "Très Surhumaine",
|
"23": "Très Surhumaine (23)",
|
||||||
"24": "Epique",
|
"24": "Epique (24)",
|
||||||
"25": "Plus Epique",
|
"25": "Plus Epique (25)",
|
||||||
"26": "Légendaire",
|
"26": "Légendaire (26)",
|
||||||
"26": "Très Légendaire",
|
"27": "Très Légendaire (27)",
|
||||||
"28": "Mythique",
|
"28": "Mythique (28)",
|
||||||
"29": "Plus Mythique",
|
"29": "Plus Mythique (29)",
|
||||||
"30": "Divine"
|
"30": "Divine (30)"
|
||||||
},
|
},
|
||||||
|
|
||||||
attaqueCible: {
|
attaqueCible: {
|
||||||
@@ -145,7 +146,137 @@ export const HERITIERS_CONFIG = {
|
|||||||
"traditionnelle": "Traditionnelle",
|
"traditionnelle": "Traditionnelle",
|
||||||
"moderne": "Moderne",
|
"moderne": "Moderne",
|
||||||
"orientale": "Orientale"
|
"orientale": "Orientale"
|
||||||
|
},
|
||||||
|
typeContact: {
|
||||||
|
"contact": "Contact",
|
||||||
|
"allie": "Allié",
|
||||||
|
"ennemi": "Ennemi",
|
||||||
|
"interet": "Personne d'interêt"
|
||||||
|
},
|
||||||
|
niveauContact: {
|
||||||
|
"1": "1",
|
||||||
|
"2": "2",
|
||||||
|
"3": "3",
|
||||||
|
},
|
||||||
|
pointsUsageList: {
|
||||||
|
"1": "1",
|
||||||
|
"2": "2",
|
||||||
|
"3": "3",
|
||||||
|
"4": "4",
|
||||||
|
},
|
||||||
|
attaquePlusieursList: {
|
||||||
|
"0": "0",
|
||||||
|
"1": "+1",
|
||||||
|
"2": "+2",
|
||||||
|
},
|
||||||
|
attaque2ArmesListe: [
|
||||||
|
{ value: "0", label: "Aucun" },
|
||||||
|
{ value: "-4", label: "Deux armes à 1 main" },
|
||||||
|
{ value: "-2", label: "Deux armes naturelles" },
|
||||||
|
{ value: "-2", label: "Avec spécialisation \"Mauvaise Main\"" }
|
||||||
|
],
|
||||||
|
typeProfil: {
|
||||||
|
"mineur": "Mineur",
|
||||||
|
"majeur": "Majeur",
|
||||||
|
},
|
||||||
|
bonusMalusContext: [
|
||||||
|
{ value: "-6", label: "-6" },
|
||||||
|
{ value: "-5", label: "-5" },
|
||||||
|
{ value: "-4", label: "-4" },
|
||||||
|
{ value: "-3", label: "-3" },
|
||||||
|
{ value: "-2", label: "-2" },
|
||||||
|
{ value: "-1", label: "-1" },
|
||||||
|
{ value: "0", label: "0" },
|
||||||
|
{ value: "1", label: "+1" },
|
||||||
|
{ value: "2", label: "+2" },
|
||||||
|
{ value: "3", label: "+3" },
|
||||||
|
{ value: "4", label: "+4" },
|
||||||
|
{ value: "5", label: "+5" },
|
||||||
|
{ value: "6", label: "+6" }
|
||||||
|
],
|
||||||
|
listNiveauSort: {
|
||||||
|
"1": "1",
|
||||||
|
"2": "2",
|
||||||
|
"3": "3",
|
||||||
|
"4": "4"
|
||||||
|
},
|
||||||
|
listRangSort: {
|
||||||
|
"1": "1",
|
||||||
|
"2": "2",
|
||||||
|
"3": "3",
|
||||||
|
"4": "4",
|
||||||
|
"5": "5",
|
||||||
|
"6": "6",
|
||||||
|
"7": "7"
|
||||||
|
},
|
||||||
|
listNiveau: {
|
||||||
|
"0": "0",
|
||||||
|
"1": "1",
|
||||||
|
"2": "2",
|
||||||
|
"3": "3",
|
||||||
|
"4": "4",
|
||||||
|
"5": "5",
|
||||||
|
"6": "6",
|
||||||
|
"7": "7",
|
||||||
|
"8": "8",
|
||||||
|
"9": "9",
|
||||||
|
"10": "10"
|
||||||
|
},
|
||||||
|
rangName: [
|
||||||
|
"Novice",
|
||||||
|
"Novice",
|
||||||
|
"Adepte",
|
||||||
|
"Maître",
|
||||||
|
"Grand Maître"
|
||||||
|
],
|
||||||
|
rangNameSpecific: {
|
||||||
|
"Druidisme": {
|
||||||
|
"Novice": "Eubage",
|
||||||
|
"Adepte": "Saronide",
|
||||||
|
"Maître": "Ovate",
|
||||||
|
"Grand Maître": "Archidruide"
|
||||||
|
},
|
||||||
|
"Faëomancie": {
|
||||||
|
"Novice": "Marmiton",
|
||||||
|
"Adepte": "Queux",
|
||||||
|
"Maître": "Chef",
|
||||||
|
"Grand Maître": "Maître-queux"
|
||||||
|
},
|
||||||
|
"Nécromancie": {
|
||||||
|
"Novice": "Inexpertus",
|
||||||
|
"Adepte": "Discipulus",
|
||||||
|
"Maître": "Dominus",
|
||||||
|
"Grand Maître": "Magister"
|
||||||
|
},
|
||||||
|
"Necromancie": {
|
||||||
|
"Novice": "Inexpertus",
|
||||||
|
"Adepte": "Discipulus",
|
||||||
|
"Maître": "Dominus",
|
||||||
|
"Grand Maître": "Magister"
|
||||||
|
},
|
||||||
|
"Magie du Clan": {
|
||||||
|
"Novice": "Apprenti",
|
||||||
|
"Adepte": "Disciple",
|
||||||
|
"Maître": "Maître",
|
||||||
|
"Grand Maître": "Éminence"
|
||||||
|
},
|
||||||
|
"Théurgie": {
|
||||||
|
"Novice": "Frère",
|
||||||
|
"Adepte": "Père",
|
||||||
|
"Maître": "Saint",
|
||||||
|
"Grand Maître": "Apôtre"
|
||||||
|
},
|
||||||
|
"Grand Langage": {
|
||||||
|
"Novice": "Éveillé",
|
||||||
|
"Adepte": "Initié",
|
||||||
|
"Maître": "Sage",
|
||||||
|
"Grand Maître": "Docteur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
soufflesMagieDuClan: {
|
||||||
|
"soufflecombat": "Souffle du Combat",
|
||||||
|
"soufflemouvement": "Souffle du Mouvement",
|
||||||
|
"souffleesprit": "Souffle de l'Esprit"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
/**
|
|
||||||
* Extend the basic ActorSheet with some very simple modifications
|
|
||||||
* @extends {ActorSheet}
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { HeritiersActorSheet } from "./heritiers-actor-sheet.js";
|
|
||||||
import { HeritiersUtility } from "./heritiers-utility.js";
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
export class HeritiersCreatureSheet extends HeritiersActorSheet {
|
|
||||||
|
|
||||||
/** @override */
|
|
||||||
static get defaultOptions() {
|
|
||||||
|
|
||||||
return mergeObject(super.defaultOptions, {
|
|
||||||
classes: ["fvtt-les-heritiers", "sheet", "actor"],
|
|
||||||
template: "systems/fvtt-les-heritiers/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
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,12 +4,12 @@ import { HeritiersUtility } from "./heritiers-utility.js";
|
|||||||
* Extend the basic ItemSheet with some very simple modifications
|
* Extend the basic ItemSheet with some very simple modifications
|
||||||
* @extends {ItemSheet}
|
* @extends {ItemSheet}
|
||||||
*/
|
*/
|
||||||
export class HeritiersItemSheet extends ItemSheet {
|
export class HeritiersItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
|
|
||||||
return mergeObject(super.defaultOptions, {
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||||
classes: ["fvtt-les-heritiers", "sheet", "item"],
|
classes: ["fvtt-les-heritiers", "sheet", "item"],
|
||||||
template: "systems/fvtt-les-heritiers/templates/item-sheet.html",
|
template: "systems/fvtt-les-heritiers/templates/item-sheet.html",
|
||||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||||
@@ -48,7 +48,7 @@ export class HeritiersItemSheet extends ItemSheet {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async getData() {
|
async getData() {
|
||||||
const objectData = duplicate(this.object)
|
const objectData = foundry.utils.duplicate(this.object)
|
||||||
let formData = {
|
let formData = {
|
||||||
title: this.title,
|
title: this.title,
|
||||||
id: this.id,
|
id: this.id,
|
||||||
@@ -63,11 +63,24 @@ export class HeritiersItemSheet extends ItemSheet {
|
|||||||
owner: this.document.isOwner,
|
owner: this.document.isOwner,
|
||||||
config: game.system.lesheritiers.config,
|
config: game.system.lesheritiers.config,
|
||||||
isArmeMelee: HeritiersUtility.isArmeMelee(this.object),
|
isArmeMelee: HeritiersUtility.isArmeMelee(this.object),
|
||||||
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, { async: true }),
|
||||||
mr: (this.object.type == 'specialisation'),
|
mr: (this.object.type == 'specialisation'),
|
||||||
isGM: game.user.isGM
|
isGM: game.user.isGM,
|
||||||
|
usageMax: -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Items specific data
|
||||||
|
if (this.object.type == 'pouvoir' && this.document.isOwner && this.actor) {
|
||||||
|
formData.usageMax = this.actor.getPouvoirUsageMax(this.object)
|
||||||
|
if (this.object.system.pointsusagecourant == -1) {
|
||||||
|
this.object.system.pointsusagecourant = formData.usageMax
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.object.type == 'sort') {
|
||||||
|
formData.competencesMagie = HeritiersUtility.getCompetencesMagie()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//this.options.editable = !(this.object.origin == "embeddedItem");
|
//this.options.editable = !(this.object.origin == "embeddedItem");
|
||||||
console.log("ITEM DATA", formData, this);
|
console.log("ITEM DATA", formData, this);
|
||||||
return formData;
|
return formData;
|
||||||
@@ -87,7 +100,7 @@ export class HeritiersItemSheet extends ItemSheet {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
postItem() {
|
postItem() {
|
||||||
let chatData = duplicate(HeritiersUtility.data(this.item));
|
let chatData = foundry.utils.duplicate(HeritiersUtility.data(this.item));
|
||||||
if (this.actor) {
|
if (this.actor) {
|
||||||
chatData.actor = { id: this.actor.id };
|
chatData.actor = { id: this.actor.id };
|
||||||
}
|
}
|
||||||
@@ -129,52 +142,52 @@ export class HeritiersItemSheet extends ItemSheet {
|
|||||||
})
|
})
|
||||||
|
|
||||||
html.find('#add-specialite').click(ev => {
|
html.find('#add-specialite').click(ev => {
|
||||||
let spec = duplicate(this.object.system.specialites)
|
let spec = foundry.utils.duplicate(this.object.system.specialites)
|
||||||
spec.push( { name: "Nouvelle Spécialité", id: randomID(16), used: false })
|
spec.push({ name: "Nouvelle Spécialité", id: foundry.utils.randomID(16), used: false })
|
||||||
this.object.update({ 'system.specialites': spec })
|
this.object.update({ 'system.specialites': spec })
|
||||||
})
|
})
|
||||||
html.find('.delete-specialite').click(ev => {
|
html.find('.delete-specialite').click(ev => {
|
||||||
const li = $(ev.currentTarget).parents(".specialite-item")
|
const li = $(ev.currentTarget).parents(".specialite-item")
|
||||||
let index = li.data("specialite-index")
|
let index = li.data("specialite-index")
|
||||||
let spec = duplicate(this.object.system.specialites)
|
let spec = foundry.utils.duplicate(this.object.system.specialites)
|
||||||
spec.splice(index, 1)
|
spec.splice(index, 1)
|
||||||
this.object.update({ 'system.specialites': spec })
|
this.object.update({ 'system.specialites': spec })
|
||||||
})
|
})
|
||||||
html.find('.edit-specialite').change(ev => {
|
html.find('.edit-specialite').change(ev => {
|
||||||
const li = $(ev.currentTarget).parents(".specialite-item")
|
const li = $(ev.currentTarget).parents(".specialite-item")
|
||||||
let index = li.data("specialite-index")
|
let index = li.data("specialite-index")
|
||||||
let spec = duplicate(this.object.system.specialites)
|
let spec = foundry.utils.duplicate(this.object.system.specialites)
|
||||||
spec[index].name = ev.currentTarget.value
|
spec[index].name = ev.currentTarget.value
|
||||||
spec[index].id = spec[index].id || randomID(16)
|
spec[index].id = spec[index].id || foundry.utils.randomID(16)
|
||||||
this.object.update({ 'system.specialites': spec })
|
this.object.update({ 'system.specialites': spec })
|
||||||
})
|
})
|
||||||
html.find('.edit-specialite-description').change(ev => {
|
html.find('.edit-specialite-description').change(ev => {
|
||||||
const li = $(ev.currentTarget).parents(".specialite-item")
|
const li = $(ev.currentTarget).parents(".specialite-item")
|
||||||
let index = li.data("specialite-index")
|
let index = li.data("specialite-index")
|
||||||
let spec = duplicate(this.object.system.specialites)
|
let spec = foundry.utils.duplicate(this.object.system.specialites)
|
||||||
spec[index].description = ev.currentTarget.value
|
spec[index].description = ev.currentTarget.value
|
||||||
spec[index].id = spec[index].id || randomID(16)
|
spec[index].id = spec[index].id || foundry.utils.randomID(16)
|
||||||
this.object.update({ 'system.specialites': spec })
|
this.object.update({ 'system.specialites': spec })
|
||||||
})
|
})
|
||||||
|
|
||||||
html.find('#add-automation').click(ev => {
|
html.find('#add-automation').click(ev => {
|
||||||
let autom = duplicate(this.object.system.automations)
|
let autom = foundry.utils.duplicate(this.object.system.automations)
|
||||||
autom.push( { eventtype: "on-drop", name: "Automatisation 1", competence: "", minLevel: 0, id: randomID(16) })
|
autom.push({ eventtype: "on-drop", name: "Automatisation 1", competence: "", minLevel: 0, id: foundry.utils.randomID(16) })
|
||||||
this.object.update({ 'system.automations': autom })
|
this.object.update({ 'system.automations': autom })
|
||||||
})
|
})
|
||||||
html.find('.delete-automation').click(ev => {
|
html.find('.delete-automation').click(ev => {
|
||||||
const li = $(ev.currentTarget).parents(".automation-item")
|
const li = $(ev.currentTarget).parents(".automation-item")
|
||||||
let index = li.data("automation-index")
|
let index = li.data("automation-index")
|
||||||
let autom = duplicate(this.object.system.automations)
|
let autom = foundry.utils.duplicate(this.object.system.automations)
|
||||||
autom.splice(index, 1)
|
autom.splice(index, 1)
|
||||||
this.object.update({ 'system.automations': autom })
|
this.object.update({ 'system.automations': autom })
|
||||||
})
|
})
|
||||||
html.find('.automation-edit-field').change(ev => {
|
html.find('.automation-edit-field').change(ev => {
|
||||||
let index = $(ev.currentTarget).data("automation-index")
|
let index = $(ev.currentTarget).data("automation-index")
|
||||||
let field = $(ev.currentTarget).data("automation-field")
|
let field = $(ev.currentTarget).data("automation-field")
|
||||||
let auto = duplicate(this.object.system.automations)
|
let auto = foundry.utils.duplicate(this.object.system.automations)
|
||||||
auto[index][field] = ev.currentTarget.value
|
auto[index][field] = ev.currentTarget.value
|
||||||
auto[index].id = auto[index].id || randomID(16)
|
auto[index].id = auto[index].id || foundry.utils.randomID(16)
|
||||||
this.object.update({ 'system.automations': auto })
|
this.object.update({ 'system.automations': auto })
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ export const defaultItemImg = {
|
|||||||
fee: "systems/fvtt-les-heritiers/assets/icons/faery_type.webp",
|
fee: "systems/fvtt-les-heritiers/assets/icons/faery_type.webp",
|
||||||
profil: "systems/fvtt-les-heritiers/assets/icons/profil.webp",
|
profil: "systems/fvtt-les-heritiers/assets/icons/profil.webp",
|
||||||
equipement: "systems/fvtt-les-heritiers/assets/icons/equipement.webp",
|
equipement: "systems/fvtt-les-heritiers/assets/icons/equipement.webp",
|
||||||
|
sort: "systems/fvtt-les-heritiers/assets/icons/sort.webp",
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import { HeritiersActor } from "./heritiers-actor.js";
|
|||||||
import { HeritiersItemSheet } from "./heritiers-item-sheet.js";
|
import { HeritiersItemSheet } from "./heritiers-item-sheet.js";
|
||||||
import { HeritiersActorSheet } from "./heritiers-actor-sheet.js";
|
import { HeritiersActorSheet } from "./heritiers-actor-sheet.js";
|
||||||
import { HeritiersActorPNJSheet } from "./heritiers-actor-pnj-sheet.js";
|
import { HeritiersActorPNJSheet } from "./heritiers-actor-pnj-sheet.js";
|
||||||
import { HeritiersCreatureSheet } from "./heritiers-creature-sheet.js";
|
|
||||||
import { HeritiersUtility } from "./heritiers-utility.js";
|
import { HeritiersUtility } from "./heritiers-utility.js";
|
||||||
import { HeritiersCombat } from "./heritiers-combat.js";
|
import { HeritiersCombat } from "./heritiers-combat.js";
|
||||||
import { HeritiersItem } from "./heritiers-item.js";
|
import { HeritiersItem } from "./heritiers-item.js";
|
||||||
@@ -47,6 +46,8 @@ Hooks.once("init", async function () {
|
|||||||
CONFIG.Combat.documentClass = HeritiersCombat
|
CONFIG.Combat.documentClass = HeritiersCombat
|
||||||
CONFIG.Actor.documentClass = HeritiersActor
|
CONFIG.Actor.documentClass = HeritiersActor
|
||||||
CONFIG.Item.documentClass = HeritiersItem
|
CONFIG.Item.documentClass = HeritiersItem
|
||||||
|
// Create an object of bonus/malus from -6 to +6 signed
|
||||||
|
HERITIERS_CONFIG.bonusMalus = Array.from({ length: 7 }, (v, k) => toString(k - 6))
|
||||||
game.system.lesheritiers = {
|
game.system.lesheritiers = {
|
||||||
HeritiersUtility,
|
HeritiersUtility,
|
||||||
config: HERITIERS_CONFIG
|
config: HERITIERS_CONFIG
|
||||||
@@ -54,12 +55,12 @@ Hooks.once("init", async function () {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// Register sheet application classes
|
// Register sheet application classes
|
||||||
Actors.unregisterSheet("core", ActorSheet);
|
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
||||||
Actors.registerSheet("fvtt-les-heritiers", HeritiersActorSheet, { types: ["personnage"], makeDefault: true })
|
foundry.documents.collections.Actors.registerSheet("fvtt-les-heritiers", HeritiersActorSheet, { types: ["personnage"], makeDefault: true })
|
||||||
Actors.registerSheet("fvtt-les-heritiers", HeritiersActorPNJSheet, { types: ["pnj"], makeDefault: true })
|
foundry.documents.collections.Actors.registerSheet("fvtt-les-heritiers", HeritiersActorPNJSheet, { types: ["pnj"], makeDefault: true })
|
||||||
|
|
||||||
Items.unregisterSheet("core", ItemSheet);
|
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||||
Items.registerSheet("fvtt-les-heritiers", HeritiersItemSheet, { makeDefault: true })
|
foundry.documents.collections.Items.registerSheet("fvtt-les-heritiers", HeritiersItemSheet, { makeDefault: true })
|
||||||
|
|
||||||
HeritiersUtility.init()
|
HeritiersUtility.init()
|
||||||
|
|
||||||
@@ -79,30 +80,16 @@ function welcomeMessage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// Register world usage statistics
|
async function importDefaultScene() {
|
||||||
function registerUsageCount(registerKey) {
|
let exists = game.scenes.find(j => j.name == "Accueil");
|
||||||
if (game.user.isGM) {
|
if (!exists) {
|
||||||
game.settings.register(registerKey, "world-key", {
|
const scenes = await HeritiersUtility.loadCompendium("fvtt-les-heritiers.scenes")
|
||||||
name: "Unique world key",
|
let newDocuments = scenes.filter(i => i.name == "Accueil");
|
||||||
scope: "world",
|
await game.scenes.documentClass.create(newDocuments);
|
||||||
config: false,
|
game.scenes.find(i => i.name == "Accueil").activate();
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/* Foundry VTT Initialization */
|
/* Foundry VTT Initialization */
|
||||||
@@ -120,14 +107,15 @@ Hooks.once("ready", function () {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
registerUsageCount(game.system.id)
|
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter => {
|
||||||
welcomeMessage()
|
console.log("ClassCounter loaded", moduleCounter)
|
||||||
|
moduleCounter.ClassCounter.registerUsageCount()
|
||||||
|
}).catch(err =>
|
||||||
|
console.log("No stats available, giving up.")
|
||||||
|
)
|
||||||
|
welcomeMessage();
|
||||||
|
importDefaultScene();
|
||||||
|
|
||||||
// CSS patch for v9
|
|
||||||
if (game.version) {
|
|
||||||
let sidebar = document.getElementById("sidebar");
|
|
||||||
sidebar.style.width = "min-content";
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -137,10 +125,9 @@ Hooks.on("chatMessage", (html, content, msg) => {
|
|||||||
if (content[0] == '/') {
|
if (content[0] == '/') {
|
||||||
let regExp = /(\S+)/g;
|
let regExp = /(\S+)/g;
|
||||||
let commands = content.match(regExp);
|
let commands = content.match(regExp);
|
||||||
if (game.system.mournblade.commands.processChatCommand(commands, content, msg)) {
|
if (game.system.lesheritiers.commands.processChatCommand(commands, content, msg)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ export class HeritiersRollDialog extends Dialog {
|
|||||||
static async create(actor, rollData) {
|
static async create(actor, rollData) {
|
||||||
|
|
||||||
let options = { classes: ["HeritiersDialog"], width: 420, height: 'fit-content', 'z-index': 99999 };
|
let options = { classes: ["HeritiersDialog"], width: 420, height: 'fit-content', 'z-index': 99999 };
|
||||||
let html = await renderTemplate('systems/fvtt-les-heritiers/templates/roll-dialog-generic.html', rollData);
|
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-les-heritiers/templates/roll-dialog-generic.html', rollData);
|
||||||
|
|
||||||
return new HeritiersRollDialog(actor, rollData, html, options);
|
return new HeritiersRollDialog(actor, rollData, html, options);
|
||||||
}
|
}
|
||||||
@@ -18,18 +18,31 @@ export class HeritiersRollDialog extends Dialog {
|
|||||||
icon: '<i class="fas fa-check"></i>',
|
icon: '<i class="fas fa-check"></i>',
|
||||||
label: "Lancer 1d8",
|
label: "Lancer 1d8",
|
||||||
callback: () => { this.roll("d8") }
|
callback: () => { this.roll("d8") }
|
||||||
},
|
}
|
||||||
rolld10: {
|
}
|
||||||
|
let enableD10 = false
|
||||||
|
let enableD12 = false
|
||||||
|
if (rollData.mode == "pouvoir" || rollData.competence?.system.niveau > 0) {
|
||||||
|
enableD10 = true
|
||||||
|
}
|
||||||
|
if (rollData.mode == "pouvoir" || rollData.competence?.system.niveau > 1) {
|
||||||
|
enableD12 = true
|
||||||
|
}
|
||||||
|
if (enableD10) {
|
||||||
|
buttons.rolld10 = {
|
||||||
icon: '<i class="fas fa-check"></i>',
|
icon: '<i class="fas fa-check"></i>',
|
||||||
label: "Lancer 1d10",
|
label: "Lancer 1d10",
|
||||||
callback: () => { this.roll("d10") }
|
callback: () => { this.roll("d10") }
|
||||||
},
|
}
|
||||||
rolld12: {
|
}
|
||||||
|
if (enableD12) {
|
||||||
|
buttons.rolld12 = {
|
||||||
icon: '<i class="fas fa-check"></i>',
|
icon: '<i class="fas fa-check"></i>',
|
||||||
label: "Lancer 1d12",
|
label: "Lancer 1d12",
|
||||||
callback: () => { this.roll("d12") }
|
callback: () => { this.roll("d12") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rollData.tricherie) {
|
if (rollData.tricherie) {
|
||||||
buttons["rollTricherie"] = {
|
buttons["rollTricherie"] = {
|
||||||
icon: '<i class="fas fa-check"></i>',
|
icon: '<i class="fas fa-check"></i>',
|
||||||
@@ -55,7 +68,7 @@ export class HeritiersRollDialog extends Dialog {
|
|||||||
buttons: buttons,
|
buttons: buttons,
|
||||||
close: close
|
close: close
|
||||||
}
|
}
|
||||||
// Overwrite in case of carac only -> 1d10
|
// Overwrite in case of carac only -> 1d8
|
||||||
if (rollData.mode == "carac") {
|
if (rollData.mode == "carac") {
|
||||||
conf.buttons = {
|
conf.buttons = {
|
||||||
rolld8: {
|
rolld8: {
|
||||||
@@ -96,7 +109,6 @@ export class HeritiersRollDialog extends Dialog {
|
|||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
|
||||||
var dialog = this;
|
|
||||||
function onLoad() {
|
function onLoad() {
|
||||||
}
|
}
|
||||||
$(function () { onLoad(); });
|
$(function () { onLoad(); });
|
||||||
@@ -105,6 +117,7 @@ export class HeritiersRollDialog extends Dialog {
|
|||||||
this.rollData.sdValue = Number(event.currentTarget.value)
|
this.rollData.sdValue = Number(event.currentTarget.value)
|
||||||
})
|
})
|
||||||
html.find('#caracKey').change(async (event) => {
|
html.find('#caracKey').change(async (event) => {
|
||||||
|
//console.log("caracKey", event.currentTarget.value)
|
||||||
this.rollData.caracKey = String(event.currentTarget.value)
|
this.rollData.caracKey = String(event.currentTarget.value)
|
||||||
})
|
})
|
||||||
html.find('#bonus-malus-context').change((event) => {
|
html.find('#bonus-malus-context').change((event) => {
|
||||||
@@ -116,6 +129,9 @@ export class HeritiersRollDialog extends Dialog {
|
|||||||
html.find('#useSpecialite').change((event) => {
|
html.find('#useSpecialite').change((event) => {
|
||||||
this.rollData.useSpecialite = event.currentTarget.checked
|
this.rollData.useSpecialite = event.currentTarget.checked
|
||||||
})
|
})
|
||||||
|
html.find('#pouvoirPointsUsage').change((event) => {
|
||||||
|
this.rollData.pouvoirPointsUsage = Number(event.currentTarget.value)
|
||||||
|
})
|
||||||
html.find('#attaqueDos').change((event) => {
|
html.find('#attaqueDos').change((event) => {
|
||||||
this.rollData.attaqueDos = event.currentTarget.checked
|
this.rollData.attaqueDos = event.currentTarget.checked
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -2,6 +2,45 @@
|
|||||||
import { HeritiersCombat } from "./heritiers-combat.js";
|
import { HeritiersCombat } from "./heritiers-combat.js";
|
||||||
import { HeritiersCommands } from "./heritiers-commands.js";
|
import { HeritiersCommands } from "./heritiers-commands.js";
|
||||||
|
|
||||||
|
const __facesAdjacentes = {
|
||||||
|
"d8": {
|
||||||
|
1: [4, 8, 6],
|
||||||
|
2: [7, 5, 3],
|
||||||
|
3: [2, 8, 6],
|
||||||
|
4: [1, 5, 7],
|
||||||
|
5: [2, 4, 8],
|
||||||
|
6: [1, 7, 3],
|
||||||
|
7: [2, 4, 6],
|
||||||
|
8: [1, 3, 5]
|
||||||
|
},
|
||||||
|
"d10": {
|
||||||
|
1: [4, 6, 9, 7],
|
||||||
|
2: [6, 8, 5, 9],
|
||||||
|
3: [7, 5, 8, 10],
|
||||||
|
4: [10, 6, 7, 1],
|
||||||
|
5: [3, 9, 2, 8],
|
||||||
|
6: [1, 4, 2, 9],
|
||||||
|
7: [1, 3, 4, 10],
|
||||||
|
8: [2, 10, 5, 3],
|
||||||
|
9: [1, 5, 6, 2],
|
||||||
|
10: [8, 4, 3, 7]
|
||||||
|
},
|
||||||
|
"d12": {
|
||||||
|
1: [2, 3, 4, 5, 6],
|
||||||
|
2: [1, 6, 8, 12, 3],
|
||||||
|
3: [1, 4, 11, 12, 2],
|
||||||
|
4: [1, 5, 10, 11, 3],
|
||||||
|
5: [1, 6, 9, 10, 4],
|
||||||
|
6: [1, 2, 8, 9, 5],
|
||||||
|
7: [8, 9, 10, 11, 12],
|
||||||
|
8: [2, 6, 9, 7, 12],
|
||||||
|
9: [5, 10, 7, 8, 6],
|
||||||
|
10: [4, 11, 7, 9, 5],
|
||||||
|
11: [7, 10, 4, 3, 12],
|
||||||
|
12: [2, 8, 7, 11, 3]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class HeritiersUtility {
|
export class HeritiersUtility {
|
||||||
|
|
||||||
@@ -9,7 +48,7 @@ export class HeritiersUtility {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async init() {
|
static async init() {
|
||||||
Hooks.on('renderChatLog', (log, html, data) => HeritiersUtility.chatListeners(html))
|
Hooks.on('renderChatLog', (log, html, data) => HeritiersUtility.chatListeners(html))
|
||||||
Hooks.on("getChatLogEntryContext", (html, options) => HeritiersUtility.chatRollMenu(html, options))
|
/* Unused for Heitiers : Hooks.on("getChatMessageContextOptions", (html, options) => HeritiersUtility.chatRollMenu(html, options))*/
|
||||||
|
|
||||||
this.rollDataStore = {}
|
this.rollDataStore = {}
|
||||||
this.defenderStore = {}
|
this.defenderStore = {}
|
||||||
@@ -65,6 +104,42 @@ export class HeritiersUtility {
|
|||||||
const skills = await HeritiersUtility.loadCompendium("fvtt-les-heritiers.competences")
|
const skills = await HeritiersUtility.loadCompendium("fvtt-les-heritiers.competences")
|
||||||
this.skills = skills.map(i => i.toObject())
|
this.skills = skills.map(i => i.toObject())
|
||||||
|
|
||||||
|
this.competencesMagie = this.skills.filter(s => s.system.profil == "magie")
|
||||||
|
|
||||||
|
game.settings.register("fvtt-les-heritiers", "heritiers-heritage", {
|
||||||
|
name: "Points d'héritage",
|
||||||
|
hint: "Points d'héritage du groupe",
|
||||||
|
scope: "world",
|
||||||
|
config: true,
|
||||||
|
default: 0,
|
||||||
|
type: Number
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static getSDSortValue(niveau) {
|
||||||
|
if (niveau <= 1) return 12;
|
||||||
|
if (niveau == 2) return 14;
|
||||||
|
if (niveau == 3) return 16;
|
||||||
|
if (niveau > 3) return 18;
|
||||||
|
return 18;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static getCompetencesMagie() {
|
||||||
|
return this.competencesMagie
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static buildCompetencesMagie() {
|
||||||
|
let competences = foundry.utils.duplicate(this.getCompetencesMagie())
|
||||||
|
for (let comp of competences) {
|
||||||
|
// Calcul du rang
|
||||||
|
let rang = Math.round(comp.system.niveau / 2);
|
||||||
|
competences.system.rang = rang;
|
||||||
|
competences.system.rangGenericName = game.system.lesheritiers.config.rangName[rang];
|
||||||
|
competences.system.rangSpecificName = game.system.lesheritiers.config.rangNameSpecific[comp.Name][competences.system.rangGenericName];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -86,18 +161,29 @@ export class HeritiersUtility {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async chatListeners(html) {
|
static async chatListeners(html) {
|
||||||
|
|
||||||
html.on("click", '.predilection-reroll', async event => {
|
$(html).on("click", '.predilection-reroll', async event => {
|
||||||
let predIdx = $(event.currentTarget).data("predilection-index")
|
let predIdx = $(event.currentTarget).data("predilection-index")
|
||||||
let messageId = HeritiersUtility.findChatMessageId(event.currentTarget)
|
let messageId = HeritiersUtility.findChatMessageId(event.currentTarget)
|
||||||
let message = game.messages.get(messageId)
|
let message = game.messages.get(messageId)
|
||||||
let rollData = message.getFlag("world", "heritiers-roll")
|
let rollData = message.getFlag("world", "heritiers-roll")
|
||||||
let actor = this.getActorFromRollData(rollData)
|
let actor = this.getActorFromRollData(rollData)
|
||||||
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
|
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
|
||||||
rollData.competence = duplicate(actor.getCompetence(rollData.competence._id))
|
rollData.competence = foundry.utils.duplicate(actor.getCompetence(rollData.competence._id))
|
||||||
HeritiersUtility.rollHeritiers(rollData)
|
HeritiersUtility.rollHeritiers(rollData)
|
||||||
})
|
})
|
||||||
|
|
||||||
html.on("click", '.roll-chat-degat', async event => {
|
$(html).on("click", '.roll-tricherie-2', async event => {
|
||||||
|
let messageId = HeritiersUtility.findChatMessageId(event.currentTarget)
|
||||||
|
let message = game.messages.get(messageId)
|
||||||
|
let rollData = message.getFlag("world", "heritiers-roll")
|
||||||
|
let actor = this.getActorFromRollData(rollData)
|
||||||
|
if (await actor.incDecTricherie(-2)) {
|
||||||
|
rollData.forcedValue = Number($(event.currentTarget).data("dice-value"))
|
||||||
|
HeritiersUtility.rollHeritiers(rollData)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
$(html).on("click", '.roll-chat-degat', async event => {
|
||||||
let messageId = HeritiersUtility.findChatMessageId(event.currentTarget)
|
let messageId = HeritiersUtility.findChatMessageId(event.currentTarget)
|
||||||
let message = game.messages.get(messageId)
|
let message = game.messages.get(messageId)
|
||||||
let rollData = message.getFlag("world", "heritiers-roll")
|
let rollData = message.getFlag("world", "heritiers-roll")
|
||||||
@@ -114,10 +200,9 @@ export class HeritiersUtility {
|
|||||||
'systems/fvtt-les-heritiers/templates/partial-item-header.html',
|
'systems/fvtt-les-heritiers/templates/partial-item-header.html',
|
||||||
'systems/fvtt-les-heritiers/templates/partial-item-description.html',
|
'systems/fvtt-les-heritiers/templates/partial-item-description.html',
|
||||||
'systems/fvtt-les-heritiers/templates/partial-item-nav.html',
|
'systems/fvtt-les-heritiers/templates/partial-item-nav.html',
|
||||||
'systems/fvtt-les-heritiers/templates/partial-utile-skills.html',
|
'systems/fvtt-les-heritiers/templates/partial-utile-skills.html'
|
||||||
'systems/fvtt-les-heritiers/templates/partial-list-niveau.html'
|
|
||||||
]
|
]
|
||||||
return loadTemplates(templatePaths);
|
return foundry.applications.handlebars.loadTemplates(templatePaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -194,7 +279,7 @@ export class HeritiersUtility {
|
|||||||
|
|
||||||
let id = rollData.rollId;
|
let id = rollData.rollId;
|
||||||
let oldRollData = this.rollDataStore[id] || {};
|
let oldRollData = this.rollDataStore[id] || {};
|
||||||
let newRollData = mergeObject(oldRollData, rollData);
|
let newRollData = foundry.utils.mergeObject(oldRollData, rollData);
|
||||||
this.rollDataStore[id] = newRollData;
|
this.rollDataStore[id] = newRollData;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -212,7 +297,6 @@ export class HeritiersUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static onSocketMesssage(msg) {
|
static onSocketMesssage(msg) {
|
||||||
//console.log("SOCKET MESSAGE", msg.name, game.user.character.id, msg.data.defenderId);
|
|
||||||
if (msg.name == "msg_update_defense_state") {
|
if (msg.name == "msg_update_defense_state") {
|
||||||
this.updateDefenseState(msg.data.defenderId, msg.data.rollId);
|
this.updateDefenseState(msg.data.defenderId, msg.data.rollId);
|
||||||
}
|
}
|
||||||
@@ -294,7 +378,8 @@ export class HeritiersUtility {
|
|||||||
if (resTab[1] == 1) { resTab[1] -= 4 }
|
if (resTab[1] == 1) { resTab[1] -= 4 }
|
||||||
if (resTab[2] == 1) { resTab[2] -= 6 }
|
if (resTab[2] == 1) { resTab[2] -= 6 }
|
||||||
if (resTab[2] == 2) { resTab[2] -= 7 }
|
if (resTab[2] == 2) { resTab[2] -= 7 }
|
||||||
rollData.finalResult = rollData.roll.total - foundryTotal + Math.max(Math.max(resTab[0], resTab[1]), resTab[2])
|
rollData.diceValue = Math.max(Math.max(resTab[0], resTab[1]), resTab[2])
|
||||||
|
rollData.finalResult = rollData.roll.total - foundryTotal + rollData.diceValue
|
||||||
|
|
||||||
// Gestion des résultats spéciaux
|
// Gestion des résultats spéciaux
|
||||||
resTab = resTab.sort()
|
resTab = resTab.sort()
|
||||||
@@ -319,8 +404,9 @@ export class HeritiersUtility {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
rollData.finalResult = rollData.roll.total
|
rollData.finalResult = rollData.roll.total
|
||||||
let rollValue = rollData.roll.terms[0].results[0].result
|
let rollValue = rollData.forcedValue || rollData.roll.terms[0].results[0].result
|
||||||
rollData.diceResult = rollData.roll.terms[0].results[0].result
|
rollData.diceResult = rollValue
|
||||||
|
rollData.diceValue = rollValue
|
||||||
if (rollData.mainDice.includes("d10")) {
|
if (rollData.mainDice.includes("d10")) {
|
||||||
if (rollValue == 1) {
|
if (rollValue == 1) {
|
||||||
rollData.finalResult -= 3 + rollValue // substract 3 and the 1 value that has been added
|
rollData.finalResult -= 3 + rollValue // substract 3 and the 1 value that has been added
|
||||||
@@ -331,8 +417,10 @@ export class HeritiersUtility {
|
|||||||
rollData.finalResult -= 5 + rollValue // Remove also the dice result has it has been added already
|
rollData.finalResult -= 5 + rollValue // Remove also the dice result has it has been added already
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!rollData.forcedValue) {
|
||||||
|
rollData.adjacentFaces = foundry.utils.duplicate(__facesAdjacentes[rollData.mainDice][rollData.diceValue])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -373,6 +461,10 @@ export class HeritiersUtility {
|
|||||||
rollData.isSuccess = (rollData.finalResult >= seuil)
|
rollData.isSuccess = (rollData.finalResult >= seuil)
|
||||||
rollData.isCriticalSuccess = ((rollData.finalResult - seuil) >= 7)
|
rollData.isCriticalSuccess = ((rollData.finalResult - seuil) >= 7)
|
||||||
rollData.isCriticalFailure = ((rollData.finalResult - seuil) <= -7)
|
rollData.isCriticalFailure = ((rollData.finalResult - seuil) <= -7)
|
||||||
|
// Si compétence > 0 et d8 -> echec critique impossible
|
||||||
|
if (rollData?.competence?.system.niveau > 0 && rollData?.mainDice == "d8") {
|
||||||
|
rollData.isCriticalFailure = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,7 +478,7 @@ export class HeritiersUtility {
|
|||||||
this.computeArmeDegats(rollData, actor)
|
this.computeArmeDegats(rollData, actor)
|
||||||
}
|
}
|
||||||
this.createChatWithRollMode(rollData.alias, {
|
this.createChatWithRollMode(rollData.alias, {
|
||||||
content: await renderTemplate(`systems/fvtt-les-heritiers/templates/chat-cc-result.html`, rollData)
|
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-cc-result.html`, rollData)
|
||||||
}, rollData, "selfroll")
|
}, rollData, "selfroll")
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -398,7 +490,7 @@ export class HeritiersUtility {
|
|||||||
this.computeMarge(rollData, valeurDefense)
|
this.computeMarge(rollData, valeurDefense)
|
||||||
rollData.dureeAssommer = (rollData.marge) ? rollData.marge * 2 : 1
|
rollData.dureeAssommer = (rollData.marge) ? rollData.marge * 2 : 1
|
||||||
this.createChatWithRollMode(rollData.alias, {
|
this.createChatWithRollMode(rollData.alias, {
|
||||||
content: await renderTemplate(`systems/fvtt-les-heritiers/templates/chat-assommer-result.html`, rollData)
|
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-assommer-result.html`, rollData)
|
||||||
}, rollData, "selfroll")
|
}, rollData, "selfroll")
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -406,25 +498,35 @@ export class HeritiersUtility {
|
|||||||
|
|
||||||
let actor = this.getActorFromRollData(rollData)
|
let actor = this.getActorFromRollData(rollData)
|
||||||
|
|
||||||
//rollData.actionImg = "systems/fvtt-les-heritiers/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
|
if (rollData.mode == "pouvoir" && actor.getPouvoirUsage(rollData.pouvoir._id) < rollData.pouvoirPointsUsage) {
|
||||||
rollData.carac = duplicate(actor.system.caracteristiques[rollData.caracKey])
|
ui.notifications.warn("Pas assez de points d'usage pour ce pouvoir.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//rollData.actionImg = "systems/fvtt-les-heritiers/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
|
||||||
|
if (rollData.caracKey == "pre") rollData.caracKey = "pres"; // Patch tomanage wrong carac key
|
||||||
|
rollData.carac = foundry.utils.duplicate(actor.system.caracteristiques[rollData.caracKey])
|
||||||
|
|
||||||
|
if (rollData.forcedValue) {
|
||||||
|
rollData.diceFormula = rollData.forcedValue
|
||||||
|
} else {
|
||||||
if (rollData.useTricherie || rollData.useHeritage) {
|
if (rollData.useTricherie || rollData.useHeritage) {
|
||||||
rollData.diceFormula = "{1d8, 1d10, 1d12}"
|
rollData.diceFormula = "{1d8, 1d10, 1d12}"
|
||||||
} else {
|
} else {
|
||||||
rollData.diceFormula = "1" + rollData.mainDice + "kh1"
|
rollData.diceFormula = "1" + rollData.mainDice + "kh1"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let rangValue = 0
|
let rangValue = 0
|
||||||
if (rollData.rang) {
|
if (rollData.rang) {
|
||||||
rangValue = rollData.rang.value
|
rangValue = rollData.rang.value
|
||||||
}
|
}
|
||||||
if (rollData.competence) {
|
if (rollData.competence) {
|
||||||
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
|
let compmod = 0 // Bonus de compétence à 0 dans Les Heritiers
|
||||||
let specBonus = (rollData.useSpecialite) ? 1 : 0
|
let specBonus = (rollData.useSpecialite) ? 1 : 0
|
||||||
rollData.diceFormula += `+${rollData.carac.value}+${rangValue}+${rollData.competence.system.niveau}+${specBonus}+${rollData.bonusMalusContext}+${compmod}`
|
rollData.diceFormula += `+${rollData.carac.value}+${rangValue}+${rollData.competence.system.niveau}+${specBonus}+${rollData.bonusMalusContext}+${compmod}`
|
||||||
} else if (rollData.pouvoirBase) {
|
} else if (rollData.pouvoirBase) {
|
||||||
rollData.diceFormula += `+${rollData.pouvoirBase.value}+${rangValue}+${rollData.bonusMalusContext}`
|
rollData.diceFormula += `+${rollData.carac.value}+${rollData.pouvoirBase.value}+${rangValue}+${rollData.bonusMalusContext}`
|
||||||
} else {
|
} else {
|
||||||
rollData.diceFormula += `+${rollData.carac.value}+${rangValue}+${rollData.bonusMalusContext}`
|
rollData.diceFormula += `+${rollData.carac.value}+${rangValue}+${rollData.bonusMalusContext}`
|
||||||
}
|
}
|
||||||
@@ -461,20 +563,37 @@ export class HeritiersUtility {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!rollData.noRoll) {
|
||||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
let myRoll = await new Roll(rollData.diceFormula).roll()
|
||||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||||
rollData.roll = myRoll
|
rollData.roll = foundry.utils.duplicate(myRoll)
|
||||||
console.log(">>>> ", myRoll)
|
console.log(">>>> ", myRoll)
|
||||||
this.computeResult(actor, rollData)
|
this.computeResult(actor, rollData)
|
||||||
this.computeMarge(rollData, rollData.sdValue) // Calcul de la marge si seuil présent
|
this.computeMarge(rollData, rollData.sdValue) // Calcul de la marge si seuil présent
|
||||||
|
}
|
||||||
|
|
||||||
if (rollData.mode == "init") {
|
if (rollData.mode == "init") {
|
||||||
actor.setFlag("world", "last-initiative", rollData.finalResult)
|
actor.setFlag("world", "last-initiative", rollData.finalResult)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gestion pouvoir et points d'usage
|
||||||
|
if (rollData.mode == "pouvoir" || rollData.mode == "pouvoirpassif") {
|
||||||
|
actor.incDecPointsUsage(rollData.pouvoir._id, -rollData.pouvoirPointsUsage)
|
||||||
|
}
|
||||||
|
// Gestion sort et points d'âme
|
||||||
|
if (rollData.mode == "sort") {
|
||||||
|
if (rollData.spendEsprit) {
|
||||||
|
actor.inDecCarac("esp", -rollData.totalEsprit)
|
||||||
|
} else {
|
||||||
|
actor.incDecPointsAme(-rollData.sortPointsAme)
|
||||||
|
if (rollData.sort.system.competence == "Magie du Clan") {
|
||||||
|
actor.incDecPV(-2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.createChatWithRollMode(rollData.alias, {
|
this.createChatWithRollMode(rollData.alias, {
|
||||||
content: await renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.html`, rollData)
|
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.html`, rollData)
|
||||||
}, rollData)
|
}, rollData)
|
||||||
|
|
||||||
// Gestion attaque standard
|
// Gestion attaque standard
|
||||||
@@ -503,16 +622,16 @@ export class HeritiersUtility {
|
|||||||
static async bonusRollHeritiers(rollData) {
|
static async bonusRollHeritiers(rollData) {
|
||||||
rollData.bonusFormula = rollData.addedBonus
|
rollData.bonusFormula = rollData.addedBonus
|
||||||
|
|
||||||
let bonusRoll = new Roll(rollData.bonusFormula).roll({ async: false })
|
let bonusRoll = await new Roll(rollData.bonusFormula).roll()
|
||||||
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
|
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
|
||||||
rollData.bonusRoll = bonusRoll
|
rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)
|
||||||
|
|
||||||
rollData.finalResult += rollData.bonusRoll.total
|
rollData.finalResult += rollData.bonusRoll.total
|
||||||
|
|
||||||
this.computeResult(rollData)
|
this.computeResult(rollData)
|
||||||
|
|
||||||
this.createChatWithRollMode(rollData.alias, {
|
this.createChatWithRollMode(rollData.alias, {
|
||||||
content: await renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.html`, rollData)
|
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-les-heritiers/templates/chat-generic-result.html`, rollData)
|
||||||
}, rollData)
|
}, rollData)
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -524,7 +643,7 @@ export class HeritiersUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static isArmeMelee(arme) {
|
static isArmeMelee(arme) {
|
||||||
return (arme.type == "arme" && (arme.system.categorie == "lourde" || arme.system.categorie == "blanche" || arme.system.categorie == "improvise")) ? true : false
|
return (arme.type == "arme" && (arme.system.categorie == "lourde" || arme.system.categorie == "blanche" || arme.system.categorie == "improvise"))
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getWhisperRecipients(rollMode, name) {
|
static getWhisperRecipients(rollMode, name) {
|
||||||
@@ -543,7 +662,7 @@ export class HeritiersUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static blindMessageToGM(chatOptions) {
|
static blindMessageToGM(chatOptions) {
|
||||||
let chatGM = duplicate(chatOptions);
|
let chatGM = foundry.utils.duplicate(chatOptions);
|
||||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||||
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
||||||
console.log("blindMessageToGM", chatGM);
|
console.log("blindMessageToGM", chatGM);
|
||||||
@@ -607,7 +726,7 @@ export class HeritiersUtility {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getBasicRollData() {
|
static getBasicRollData() {
|
||||||
let rollData = {
|
let rollData = {
|
||||||
rollId: randomID(16),
|
rollId: foundry.utils.randomID(16),
|
||||||
rollMode: game.settings.get("core", "rollMode"),
|
rollMode: game.settings.get("core", "rollMode"),
|
||||||
sdList: game.system.lesheritiers.config.seuilsDifficulte,
|
sdList: game.system.lesheritiers.config.seuilsDifficulte,
|
||||||
sdValue: -1,
|
sdValue: -1,
|
||||||
@@ -685,13 +804,13 @@ export class HeritiersUtility {
|
|||||||
static chatRollMenu(html, options) {
|
static chatRollMenu(html, options) {
|
||||||
let canApply = li => canvas.tokens.controlled.length && li.find(".heritiers-roll").length
|
let canApply = li => canvas.tokens.controlled.length && li.find(".heritiers-roll").length
|
||||||
let canApplyBA = function (li) {
|
let canApplyBA = function (li) {
|
||||||
let message = game.messages.get(li.attr("data-message-id"))
|
let message = game.messages.get($(li).attr("data-message-id"))
|
||||||
let rollData = message.getFlag("world", "heritiers-roll")
|
let rollData = message.getFlag("world", "heritiers-roll")
|
||||||
let actor = this.getActorFromRollData(rollData)
|
let actor = this.getActorFromRollData(rollData)
|
||||||
return (!rollData.isReroll && actor.getBonneAventure() > 0)
|
return (!rollData.isReroll && actor.getBonneAventure() > 0)
|
||||||
}
|
}
|
||||||
let canApplyPE = function (li) {
|
let canApplyPE = function (li) {
|
||||||
let message = game.messages.get(li.attr("data-message-id"))
|
let message = game.messages.get($(li).attr("data-message-id"))
|
||||||
let rollData = message.getFlag("world", "heritiers-roll")
|
let rollData = message.getFlag("world", "heritiers-roll")
|
||||||
let actor = this.getActorFromRollData(rollData)
|
let actor = this.getActorFromRollData(rollData)
|
||||||
return (!rollData.isReroll && actor.getEclat() > 0)
|
return (!rollData.isReroll && actor.getEclat() > 0)
|
||||||
@@ -726,11 +845,11 @@ export class HeritiersUtility {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async confirmDelete(actorSheet, li) {
|
static async confirmDelete(actorSheet, li) {
|
||||||
let itemId = li.data("item-id");
|
let itemId = li.data("item-id");
|
||||||
let msgTxt = "<p>Are you sure to remove this Item ?";
|
let msgTxt = "<p>Certain de supprimer cet item ?";
|
||||||
let buttons = {
|
let buttons = {
|
||||||
delete: {
|
delete: {
|
||||||
icon: '<i class="fas fa-check"></i>',
|
icon: '<i class="fas fa-check"></i>',
|
||||||
label: "Yes, remove it",
|
label: "Oui !",
|
||||||
callback: () => {
|
callback: () => {
|
||||||
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||||
li.slideUp(200, () => actorSheet.render(false));
|
li.slideUp(200, () => actorSheet.render(false));
|
||||||
@@ -738,12 +857,12 @@ export class HeritiersUtility {
|
|||||||
},
|
},
|
||||||
cancel: {
|
cancel: {
|
||||||
icon: '<i class="fas fa-times"></i>',
|
icon: '<i class="fas fa-times"></i>',
|
||||||
label: "Cancel"
|
label: "Non !"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msgTxt += "</p>";
|
msgTxt += "</p>";
|
||||||
let d = new Dialog({
|
let d = new Dialog({
|
||||||
title: "Confirm removal",
|
title: "Confirmer la suppression",
|
||||||
content: msgTxt,
|
content: msgTxt,
|
||||||
buttons: buttons,
|
buttons: buttons,
|
||||||
default: "cancel"
|
default: "cancel"
|
||||||
@@ -751,21 +870,56 @@ export class HeritiersUtility {
|
|||||||
d.render(true);
|
d.render(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************************/
|
static loadSort() {
|
||||||
static async __create_talents_table() {
|
// Create afolder in the item directory if it doesn't exist
|
||||||
let compName = "fvtt-les-heritiers.talents-cellule"
|
if (!game.folders.getName("Magie du Clan")) {
|
||||||
const compData = await HeritiersUtility.loadCompendium(compName)
|
Folder.create({
|
||||||
let talents = compData.map(i => i.toObject())
|
name: "Magie du Clan",
|
||||||
|
type: "Item",
|
||||||
|
color: "#3b1361"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
let htmlTab = "<table border='1'><tbody>";
|
// Load the srcdata/sorts-druidisme.json file
|
||||||
for (let entryData of talents) {
|
return fetch("systems/fvtt-les-heritiers/srcdata/sort_magieduclan.json")
|
||||||
console.log(entryData)
|
.then(response => response.json())
|
||||||
htmlTab += `<tr><td>@UUID[Compendium.${compName}.${entryData._id}]{${entryData.name}}</td>`
|
.then(data => {
|
||||||
htmlTab += `<td>${entryData.system.description}</td>`;
|
console.log("Sorts Magie du Clan loaded:", data);
|
||||||
//htmlTab += `<td>${entryData.system.resumebonus}</td>`;
|
this.sortDruidisme = data;
|
||||||
htmlTab += "</tr>\n";
|
// Loop through the spell and create the "sort "item based on the JSON content
|
||||||
}
|
data.forEach(spell => {
|
||||||
htmlTab += "</table>";
|
spell.name = spell.name;
|
||||||
await JournalEntry.create({ name: 'Liste des Talents de Cellule', content: htmlTab });
|
spell.type = "sort";
|
||||||
|
spell.system = {
|
||||||
|
niveau: spell.niveau,
|
||||||
|
competence: spell.competence,
|
||||||
|
carac1: spell.carac1,
|
||||||
|
carac2: spell.carac2,
|
||||||
|
description: spell.description,
|
||||||
|
ingredients: spell.ingredients,
|
||||||
|
portee: spell.portee,
|
||||||
|
duree: spell.duree,
|
||||||
|
concentration: spell.concentration,
|
||||||
|
critique: spell.critique,
|
||||||
|
resistance: spell.resistance,
|
||||||
|
coutactivation: spell.coutactivation
|
||||||
|
};
|
||||||
|
spell.img = "systems/fvtt-les-heritiers/assets/icons/sort.webp";
|
||||||
|
spell.folder = game.folders.getName("Magie du Clan").id;
|
||||||
|
|
||||||
|
// Create the item in the world
|
||||||
|
Item.create(spell)
|
||||||
|
.then(item => {
|
||||||
|
console.log("Sort created:", item);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error("Error creating sort item:", error);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error("Error loading druidism spells:", error);
|
||||||
|
return [];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
packs/archetypes-fees/000179.ldb
Normal file
BIN
packs/archetypes-fees/000179.ldb
Normal file
Binary file not shown.
0
packs/archetypes-fees/000298.log
Normal file
0
packs/archetypes-fees/000298.log
Normal file
1
packs/archetypes-fees/CURRENT
Normal file
1
packs/archetypes-fees/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000296
|
||||||
0
packs/archetypes-fees/LOCK
Normal file
0
packs/archetypes-fees/LOCK
Normal file
8
packs/archetypes-fees/LOG
Normal file
8
packs/archetypes-fees/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.325495 7f307affd6c0 Recovering log #294
|
||||||
|
2025/09/15-21:06:27.335836 7f307affd6c0 Delete type=3 #292
|
||||||
|
2025/09/15-21:06:27.335957 7f307affd6c0 Delete type=0 #294
|
||||||
|
2025/09/15-21:08:54.705256 7f307a7fc6c0 Level-0 table #299: started
|
||||||
|
2025/09/15-21:08:54.705333 7f307a7fc6c0 Level-0 table #299: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.712270 7f307a7fc6c0 Delete type=0 #297
|
||||||
|
2025/09/15-21:08:54.731675 7f307a7fc6c0 Manual compaction at level-0 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.731735 7f307a7fc6c0 Manual compaction at level-1 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)
|
||||||
8
packs/archetypes-fees/LOG.old
Normal file
8
packs/archetypes-fees/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.749852 7f307bfff6c0 Recovering log #290
|
||||||
|
2025/09/15-21:05:50.760671 7f307bfff6c0 Delete type=3 #288
|
||||||
|
2025/09/15-21:05:50.760753 7f307bfff6c0 Delete type=0 #290
|
||||||
|
2025/09/15-21:06:21.676014 7f307a7fc6c0 Level-0 table #295: started
|
||||||
|
2025/09/15-21:06:21.676034 7f307a7fc6c0 Level-0 table #295: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.682447 7f307a7fc6c0 Delete type=0 #293
|
||||||
|
2025/09/15-21:06:21.703547 7f307a7fc6c0 Manual compaction at level-0 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.703599 7f307a7fc6c0 Manual compaction at level-1 from '!items!1NhJH4IJpxsGmLB8' @ 72057594037927935 : 1 .. '!items!y1yOenfAJTsb3r6e' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/archetypes-fees/MANIFEST-000296
Normal file
BIN
packs/archetypes-fees/MANIFEST-000296
Normal file
Binary file not shown.
BIN
packs/armes-et-protection/000179.ldb
Normal file
BIN
packs/armes-et-protection/000179.ldb
Normal file
Binary file not shown.
0
packs/armes-et-protection/000298.log
Normal file
0
packs/armes-et-protection/000298.log
Normal file
1
packs/armes-et-protection/CURRENT
Normal file
1
packs/armes-et-protection/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000296
|
||||||
0
packs/armes-et-protection/LOCK
Normal file
0
packs/armes-et-protection/LOCK
Normal file
8
packs/armes-et-protection/LOG
Normal file
8
packs/armes-et-protection/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.351420 7f307bfff6c0 Recovering log #294
|
||||||
|
2025/09/15-21:06:27.362201 7f307bfff6c0 Delete type=3 #292
|
||||||
|
2025/09/15-21:06:27.362258 7f307bfff6c0 Delete type=0 #294
|
||||||
|
2025/09/15-21:08:54.712395 7f307a7fc6c0 Level-0 table #299: started
|
||||||
|
2025/09/15-21:08:54.712426 7f307a7fc6c0 Level-0 table #299: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.718406 7f307a7fc6c0 Delete type=0 #297
|
||||||
|
2025/09/15-21:08:54.731696 7f307a7fc6c0 Manual compaction at level-0 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.731747 7f307a7fc6c0 Manual compaction at level-1 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)
|
||||||
8
packs/armes-et-protection/LOG.old
Normal file
8
packs/armes-et-protection/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.792465 7f307affd6c0 Recovering log #290
|
||||||
|
2025/09/15-21:05:50.802711 7f307affd6c0 Delete type=3 #288
|
||||||
|
2025/09/15-21:05:50.802777 7f307affd6c0 Delete type=0 #290
|
||||||
|
2025/09/15-21:06:21.682608 7f307a7fc6c0 Level-0 table #295: started
|
||||||
|
2025/09/15-21:06:21.682630 7f307a7fc6c0 Level-0 table #295: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.689497 7f307a7fc6c0 Delete type=0 #293
|
||||||
|
2025/09/15-21:06:21.703561 7f307a7fc6c0 Manual compaction at level-0 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.703608 7f307a7fc6c0 Manual compaction at level-1 from '!items!1ETVaPBtjDtzelK1' @ 72057594037927935 : 1 .. '!items!zbsVCsWxRzkzzG1N' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/armes-et-protection/MANIFEST-000296
Normal file
BIN
packs/armes-et-protection/MANIFEST-000296
Normal file
Binary file not shown.
BIN
packs/atouts-feeriques/000179.ldb
Normal file
BIN
packs/atouts-feeriques/000179.ldb
Normal file
Binary file not shown.
0
packs/atouts-feeriques/000298.log
Normal file
0
packs/atouts-feeriques/000298.log
Normal file
1
packs/atouts-feeriques/CURRENT
Normal file
1
packs/atouts-feeriques/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000296
|
||||||
0
packs/atouts-feeriques/LOCK
Normal file
0
packs/atouts-feeriques/LOCK
Normal file
8
packs/atouts-feeriques/LOG
Normal file
8
packs/atouts-feeriques/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.300488 7f307bfff6c0 Recovering log #294
|
||||||
|
2025/09/15-21:06:27.310028 7f307bfff6c0 Delete type=3 #292
|
||||||
|
2025/09/15-21:06:27.310094 7f307bfff6c0 Delete type=0 #294
|
||||||
|
2025/09/15-21:08:54.685417 7f307a7fc6c0 Level-0 table #299: started
|
||||||
|
2025/09/15-21:08:54.685439 7f307a7fc6c0 Level-0 table #299: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.692723 7f307a7fc6c0 Delete type=0 #297
|
||||||
|
2025/09/15-21:08:54.705096 7f307a7fc6c0 Manual compaction at level-0 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.705139 7f307a7fc6c0 Manual compaction at level-1 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)
|
||||||
8
packs/atouts-feeriques/LOG.old
Normal file
8
packs/atouts-feeriques/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.721561 7f307b7fe6c0 Recovering log #290
|
||||||
|
2025/09/15-21:05:50.731631 7f307b7fe6c0 Delete type=3 #288
|
||||||
|
2025/09/15-21:05:50.731750 7f307b7fe6c0 Delete type=0 #290
|
||||||
|
2025/09/15-21:06:21.649937 7f307a7fc6c0 Level-0 table #295: started
|
||||||
|
2025/09/15-21:06:21.649963 7f307a7fc6c0 Level-0 table #295: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.655936 7f307a7fc6c0 Delete type=0 #293
|
||||||
|
2025/09/15-21:06:21.675866 7f307a7fc6c0 Manual compaction at level-0 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.675905 7f307a7fc6c0 Manual compaction at level-1 from '!items!0fPXtA5LkLgG8uDj' @ 72057594037927935 : 1 .. '!items!zvtBlG6KCIn0oCVk' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/atouts-feeriques/MANIFEST-000296
Normal file
BIN
packs/atouts-feeriques/MANIFEST-000296
Normal file
Binary file not shown.
BIN
packs/avantages/000179.ldb
Normal file
BIN
packs/avantages/000179.ldb
Normal file
Binary file not shown.
0
packs/avantages/000298.log
Normal file
0
packs/avantages/000298.log
Normal file
1
packs/avantages/CURRENT
Normal file
1
packs/avantages/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000296
|
||||||
0
packs/avantages/LOCK
Normal file
0
packs/avantages/LOCK
Normal file
8
packs/avantages/LOG
Normal file
8
packs/avantages/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.262631 7f307bfff6c0 Recovering log #294
|
||||||
|
2025/09/15-21:06:27.272396 7f307bfff6c0 Delete type=3 #292
|
||||||
|
2025/09/15-21:06:27.272468 7f307bfff6c0 Delete type=0 #294
|
||||||
|
2025/09/15-21:08:54.666847 7f307a7fc6c0 Level-0 table #299: started
|
||||||
|
2025/09/15-21:08:54.666873 7f307a7fc6c0 Level-0 table #299: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.672959 7f307a7fc6c0 Delete type=0 #297
|
||||||
|
2025/09/15-21:08:54.679358 7f307a7fc6c0 Manual compaction at level-0 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.679384 7f307a7fc6c0 Manual compaction at level-1 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)
|
||||||
8
packs/avantages/LOG.old
Normal file
8
packs/avantages/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.682842 7f307affd6c0 Recovering log #290
|
||||||
|
2025/09/15-21:05:50.693038 7f307affd6c0 Delete type=3 #288
|
||||||
|
2025/09/15-21:05:50.693115 7f307affd6c0 Delete type=0 #290
|
||||||
|
2025/09/15-21:06:21.637234 7f307a7fc6c0 Level-0 table #295: started
|
||||||
|
2025/09/15-21:06:21.637274 7f307a7fc6c0 Level-0 table #295: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.643352 7f307a7fc6c0 Delete type=0 #293
|
||||||
|
2025/09/15-21:06:21.649756 7f307a7fc6c0 Manual compaction at level-0 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.649793 7f307a7fc6c0 Manual compaction at level-1 from '!items!0EAAt0qSzcD9VRBH' @ 72057594037927935 : 1 .. '!items!zfpjROW9LDAlXUkN' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/avantages/MANIFEST-000296
Normal file
BIN
packs/avantages/MANIFEST-000296
Normal file
Binary file not shown.
BIN
packs/capacites/000179.ldb
Normal file
BIN
packs/capacites/000179.ldb
Normal file
Binary file not shown.
0
packs/capacites/000298.log
Normal file
0
packs/capacites/000298.log
Normal file
1
packs/capacites/CURRENT
Normal file
1
packs/capacites/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000296
|
||||||
0
packs/capacites/LOCK
Normal file
0
packs/capacites/LOCK
Normal file
8
packs/capacites/LOG
Normal file
8
packs/capacites/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.288049 7f307b7fe6c0 Recovering log #294
|
||||||
|
2025/09/15-21:06:27.298262 7f307b7fe6c0 Delete type=3 #292
|
||||||
|
2025/09/15-21:06:27.298356 7f307b7fe6c0 Delete type=0 #294
|
||||||
|
2025/09/15-21:08:54.692841 7f307a7fc6c0 Level-0 table #299: started
|
||||||
|
2025/09/15-21:08:54.692870 7f307a7fc6c0 Level-0 table #299: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.698762 7f307a7fc6c0 Delete type=0 #297
|
||||||
|
2025/09/15-21:08:54.705111 7f307a7fc6c0 Manual compaction at level-0 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.705145 7f307a7fc6c0 Manual compaction at level-1 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)
|
||||||
8
packs/capacites/LOG.old
Normal file
8
packs/capacites/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.708391 7f307bfff6c0 Recovering log #290
|
||||||
|
2025/09/15-21:05:50.719354 7f307bfff6c0 Delete type=3 #288
|
||||||
|
2025/09/15-21:05:50.719430 7f307bfff6c0 Delete type=0 #290
|
||||||
|
2025/09/15-21:06:21.656046 7f307a7fc6c0 Level-0 table #295: started
|
||||||
|
2025/09/15-21:06:21.656071 7f307a7fc6c0 Level-0 table #295: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.663074 7f307a7fc6c0 Delete type=0 #293
|
||||||
|
2025/09/15-21:06:21.675879 7f307a7fc6c0 Manual compaction at level-0 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.675911 7f307a7fc6c0 Manual compaction at level-1 from '!items!0cNSRJVPk3GbvxfD' @ 72057594037927935 : 1 .. '!items!yWDg2KlXEz33TSmZ' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/capacites/MANIFEST-000296
Normal file
BIN
packs/capacites/MANIFEST-000296
Normal file
Binary file not shown.
BIN
packs/competences/000277.ldb
Normal file
BIN
packs/competences/000277.ldb
Normal file
Binary file not shown.
0
packs/competences/000304.log
Normal file
0
packs/competences/000304.log
Normal file
1
packs/competences/CURRENT
Normal file
1
packs/competences/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000302
|
||||||
0
packs/competences/LOCK
Normal file
0
packs/competences/LOCK
Normal file
8
packs/competences/LOG
Normal file
8
packs/competences/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.249709 7f307b7fe6c0 Recovering log #300
|
||||||
|
2025/09/15-21:06:27.260222 7f307b7fe6c0 Delete type=3 #298
|
||||||
|
2025/09/15-21:06:27.260307 7f307b7fe6c0 Delete type=0 #300
|
||||||
|
2025/09/15-21:08:54.660355 7f307a7fc6c0 Level-0 table #305: started
|
||||||
|
2025/09/15-21:08:54.660389 7f307a7fc6c0 Level-0 table #305: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.666754 7f307a7fc6c0 Delete type=0 #303
|
||||||
|
2025/09/15-21:08:54.679346 7f307a7fc6c0 Manual compaction at level-0 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.679378 7f307a7fc6c0 Manual compaction at level-1 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)
|
||||||
8
packs/competences/LOG.old
Normal file
8
packs/competences/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.668992 7f307bfff6c0 Recovering log #296
|
||||||
|
2025/09/15-21:05:50.678844 7f307bfff6c0 Delete type=3 #294
|
||||||
|
2025/09/15-21:05:50.678911 7f307bfff6c0 Delete type=0 #296
|
||||||
|
2025/09/15-21:06:21.643436 7f307a7fc6c0 Level-0 table #301: started
|
||||||
|
2025/09/15-21:06:21.643461 7f307a7fc6c0 Level-0 table #301: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.649497 7f307a7fc6c0 Delete type=0 #299
|
||||||
|
2025/09/15-21:06:21.649771 7f307a7fc6c0 Manual compaction at level-0 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.649805 7f307a7fc6c0 Manual compaction at level-1 from '!folders!FBCujRu055QLePB2' @ 72057594037927935 : 1 .. '!items!zEl2NQsnCpELVWzh' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/competences/MANIFEST-000302
Normal file
BIN
packs/competences/MANIFEST-000302
Normal file
Binary file not shown.
BIN
packs/desavantages/000179.ldb
Normal file
BIN
packs/desavantages/000179.ldb
Normal file
Binary file not shown.
0
packs/desavantages/000298.log
Normal file
0
packs/desavantages/000298.log
Normal file
1
packs/desavantages/CURRENT
Normal file
1
packs/desavantages/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000296
|
||||||
0
packs/desavantages/LOCK
Normal file
0
packs/desavantages/LOCK
Normal file
8
packs/desavantages/LOG
Normal file
8
packs/desavantages/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.274645 7f3080dfa6c0 Recovering log #294
|
||||||
|
2025/09/15-21:06:27.285405 7f3080dfa6c0 Delete type=3 #292
|
||||||
|
2025/09/15-21:06:27.285486 7f3080dfa6c0 Delete type=0 #294
|
||||||
|
2025/09/15-21:08:54.679508 7f307a7fc6c0 Level-0 table #299: started
|
||||||
|
2025/09/15-21:08:54.679542 7f307a7fc6c0 Level-0 table #299: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.685322 7f307a7fc6c0 Delete type=0 #297
|
||||||
|
2025/09/15-21:08:54.705080 7f307a7fc6c0 Manual compaction at level-0 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.705123 7f307a7fc6c0 Manual compaction at level-1 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)
|
||||||
8
packs/desavantages/LOG.old
Normal file
8
packs/desavantages/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.695732 7f3080dfa6c0 Recovering log #290
|
||||||
|
2025/09/15-21:05:50.705423 7f3080dfa6c0 Delete type=3 #288
|
||||||
|
2025/09/15-21:05:50.705491 7f3080dfa6c0 Delete type=0 #290
|
||||||
|
2025/09/15-21:06:21.663365 7f307a7fc6c0 Level-0 table #295: started
|
||||||
|
2025/09/15-21:06:21.663391 7f307a7fc6c0 Level-0 table #295: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.669738 7f307a7fc6c0 Delete type=0 #293
|
||||||
|
2025/09/15-21:06:21.675888 7f307a7fc6c0 Manual compaction at level-0 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.675917 7f307a7fc6c0 Manual compaction at level-1 from '!items!2QqvtClSVnh5ejXu' @ 72057594037927935 : 1 .. '!items!xzRJ6JP1HqoqxLdj' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/desavantages/MANIFEST-000296
Normal file
BIN
packs/desavantages/MANIFEST-000296
Normal file
Binary file not shown.
BIN
packs/journaux/000005.ldb
Normal file
BIN
packs/journaux/000005.ldb
Normal file
Binary file not shown.
0
packs/journaux/000016.log
Normal file
0
packs/journaux/000016.log
Normal file
1
packs/journaux/CURRENT
Normal file
1
packs/journaux/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000014
|
||||||
0
packs/journaux/LOCK
Normal file
0
packs/journaux/LOCK
Normal file
8
packs/journaux/LOG
Normal file
8
packs/journaux/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.389764 7f307affd6c0 Recovering log #12
|
||||||
|
2025/09/15-21:06:27.400118 7f307affd6c0 Delete type=3 #10
|
||||||
|
2025/09/15-21:06:27.400175 7f307affd6c0 Delete type=0 #12
|
||||||
|
2025/09/15-21:08:54.731831 7f307a7fc6c0 Level-0 table #17: started
|
||||||
|
2025/09/15-21:08:54.731879 7f307a7fc6c0 Level-0 table #17: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.738151 7f307a7fc6c0 Delete type=0 #15
|
||||||
|
2025/09/15-21:08:54.758915 7f307a7fc6c0 Manual compaction at level-0 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.758952 7f307a7fc6c0 Manual compaction at level-1 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)
|
||||||
8
packs/journaux/LOG.old
Normal file
8
packs/journaux/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.834942 7f307affd6c0 Recovering log #8
|
||||||
|
2025/09/15-21:05:50.845163 7f307affd6c0 Delete type=3 #6
|
||||||
|
2025/09/15-21:05:50.845242 7f307affd6c0 Delete type=0 #8
|
||||||
|
2025/09/15-21:06:21.703752 7f307a7fc6c0 Level-0 table #13: started
|
||||||
|
2025/09/15-21:06:21.703776 7f307a7fc6c0 Level-0 table #13: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.709810 7f307a7fc6c0 Delete type=0 #11
|
||||||
|
2025/09/15-21:06:21.729784 7f307a7fc6c0 Manual compaction at level-0 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.729843 7f307a7fc6c0 Manual compaction at level-1 from '!journal!QZDy8zwSVh7t4meA' @ 72057594037927935 : 1 .. '!journal.pages!QZDy8zwSVh7t4meA.gdXBDBkPlBjfmTy7' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/journaux/MANIFEST-000014
Normal file
BIN
packs/journaux/MANIFEST-000014
Normal file
Binary file not shown.
BIN
packs/magie-sorts/000086.ldb
Normal file
BIN
packs/magie-sorts/000086.ldb
Normal file
Binary file not shown.
0
packs/magie-sorts/000101.log
Normal file
0
packs/magie-sorts/000101.log
Normal file
1
packs/magie-sorts/CURRENT
Normal file
1
packs/magie-sorts/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000099
|
||||||
0
packs/magie-sorts/LOCK
Normal file
0
packs/magie-sorts/LOCK
Normal file
8
packs/magie-sorts/LOG
Normal file
8
packs/magie-sorts/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.312840 7f3080dfa6c0 Recovering log #97
|
||||||
|
2025/09/15-21:06:27.322814 7f3080dfa6c0 Delete type=3 #95
|
||||||
|
2025/09/15-21:06:27.322901 7f3080dfa6c0 Delete type=0 #97
|
||||||
|
2025/09/15-21:08:54.698842 7f307a7fc6c0 Level-0 table #102: started
|
||||||
|
2025/09/15-21:08:54.698870 7f307a7fc6c0 Level-0 table #102: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.704908 7f307a7fc6c0 Delete type=0 #100
|
||||||
|
2025/09/15-21:08:54.705132 7f307a7fc6c0 Manual compaction at level-0 from '!folders!1ENmqNfRLUTmKPc6' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.705168 7f307a7fc6c0 Manual compaction at level-1 from '!folders!1ENmqNfRLUTmKPc6' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)
|
||||||
8
packs/magie-sorts/LOG.old
Normal file
8
packs/magie-sorts/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.735075 7f3080dfa6c0 Recovering log #93
|
||||||
|
2025/09/15-21:05:50.744757 7f3080dfa6c0 Delete type=3 #91
|
||||||
|
2025/09/15-21:05:50.744834 7f3080dfa6c0 Delete type=0 #93
|
||||||
|
2025/09/15-21:06:21.669850 7f307a7fc6c0 Level-0 table #98: started
|
||||||
|
2025/09/15-21:06:21.669871 7f307a7fc6c0 Level-0 table #98: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.675753 7f307a7fc6c0 Delete type=0 #96
|
||||||
|
2025/09/15-21:06:21.675897 7f307a7fc6c0 Manual compaction at level-0 from '!folders!1ENmqNfRLUTmKPc6' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.675924 7f307a7fc6c0 Manual compaction at level-1 from '!folders!1ENmqNfRLUTmKPc6' @ 72057594037927935 : 1 .. '!items!zbZ88BQkH9ZCYlDK' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/magie-sorts/MANIFEST-000099
Normal file
BIN
packs/magie-sorts/MANIFEST-000099
Normal file
Binary file not shown.
@@ -10,7 +10,7 @@
|
|||||||
{"name":"Élémentaire majeur (Légendaire)","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"metamorphose","masquetype":"demasque","niveau":"legendaire","activation":"2 points d’usage au lieu d’un, ainsi qu’1 point temporaire de Constitution.","istest":false,"feeriemasque":"feerie","zoneffet":"","testautre":"Attaque avec des crocs","carac":"pres","duree":"une scène","cibles":"","effet":"transformation en élémentaire de son\naffinité ; absorbe Féérie points de dégâts sauf contre des attaques efficaces (élément contraire ou argent). \nAttaques : effectuées avec Mêlée + AGI ; dégâts élémentaires = Féérie + MR (pas de bonus de Force).\n","portee":"","resistance":"aucune","resistanceautre":"Esquive / test d’opposition de Mêlée ou Ressort + Force pour se dégager.","isvirulence":false,"virulence":"","description":"<p>Le djinn se transforme en élémentaire majeur de très grande taille (environ 2,5 mètres de haut et d’envergure), avec d’importants pouvoirs de contrôle de son élément de prédilection : tornade de sable ou d’eau, contrôle du feu, tempête, etc. Ce contrôle élémentaire est de forme relativement libre selon la vraisemblance et ce qu’autorise le Docte et sa puissance est comparable au Pouvoir profond du phénix Contrôle du feu (voir p. 264). Il utilise ses longs bras (1,5 m) pour porter des attaques élémentaires avec des effets critiques liés : le feu enflamme les vêtements, l’eau et le sable étourdissent, l’air ajoute des dégâts de projection ou de chute, etc.</p>\n<p>Les attaques physiques portées contre lui sont réduites d’autant de points de dégâts que son rang de Féérie, sauf si elles font intervenir de l’argent. Toutefois, projeter sur lui une grande quantité (1 m3 environ) d’un élément auquel il est vulnérable (l’eau pour les djinns du feu, la terre ou le sable pour les djinns de l’eau, le vent pour les djinns de sable, le feu pour les djinns de l’air) pourra contraindre un djinn légendaire à abandonner sa forme d’Élémentaire majeur.</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678214487456,"modifiedTime":1678303349575,"lastModifiedBy":"xGnwWyEbO2k89UsP"},"_id":"4v8Z2ThDSwwWb0DU","folder":null,"sort":0,"ownership":{"default":0,"xGnwWyEbO2k89UsP":3}}
|
{"name":"Élémentaire majeur (Légendaire)","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"metamorphose","masquetype":"demasque","niveau":"legendaire","activation":"2 points d’usage au lieu d’un, ainsi qu’1 point temporaire de Constitution.","istest":false,"feeriemasque":"feerie","zoneffet":"","testautre":"Attaque avec des crocs","carac":"pres","duree":"une scène","cibles":"","effet":"transformation en élémentaire de son\naffinité ; absorbe Féérie points de dégâts sauf contre des attaques efficaces (élément contraire ou argent). \nAttaques : effectuées avec Mêlée + AGI ; dégâts élémentaires = Féérie + MR (pas de bonus de Force).\n","portee":"","resistance":"aucune","resistanceautre":"Esquive / test d’opposition de Mêlée ou Ressort + Force pour se dégager.","isvirulence":false,"virulence":"","description":"<p>Le djinn se transforme en élémentaire majeur de très grande taille (environ 2,5 mètres de haut et d’envergure), avec d’importants pouvoirs de contrôle de son élément de prédilection : tornade de sable ou d’eau, contrôle du feu, tempête, etc. Ce contrôle élémentaire est de forme relativement libre selon la vraisemblance et ce qu’autorise le Docte et sa puissance est comparable au Pouvoir profond du phénix Contrôle du feu (voir p. 264). Il utilise ses longs bras (1,5 m) pour porter des attaques élémentaires avec des effets critiques liés : le feu enflamme les vêtements, l’eau et le sable étourdissent, l’air ajoute des dégâts de projection ou de chute, etc.</p>\n<p>Les attaques physiques portées contre lui sont réduites d’autant de points de dégâts que son rang de Féérie, sauf si elles font intervenir de l’argent. Toutefois, projeter sur lui une grande quantité (1 m3 environ) d’un élément auquel il est vulnérable (l’eau pour les djinns du feu, la terre ou le sable pour les djinns de l’eau, le vent pour les djinns de sable, le feu pour les djinns de l’air) pourra contraindre un djinn légendaire à abandonner sa forme d’Élémentaire majeur.</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678214487456,"modifiedTime":1678303349575,"lastModifiedBy":"xGnwWyEbO2k89UsP"},"_id":"4v8Z2ThDSwwWb0DU","folder":null,"sort":0,"ownership":{"default":0,"xGnwWyEbO2k89UsP":3}}
|
||||||
{"name":"Psychotopie","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"actif","masquetype":"masque","niveau":"normal","activation":"Féérie + Esprit et une transe de 5 minutes au moins, contre un SD variable selon la taille et les événements se déroulant dans le lieu (une chambre isolée depuis des années : SD10 ; un immeuble rempli d'habitants dans lequel il y a fréquemment du passage : SD 20).","istest":true,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"esp","duree":"","cibles":"un seul lieu","effet":"apprend des informations marquantes sur un lieu","portee":"un lieu (pas plus grand qu’un bâtiment)","resistance":"aucune","resistanceautre":"","isvirulence":false,"virulence":"","description":"<p><strong>Type de Pouvoir : </strong>actif.</p>\n<p><strong>Activation : </strong>Féérie + Esprit et une transe de 5 minutes au moins, contre un SD variable selon la taille et les événements se déroulant dans le lieu (une chambre isolée depuis des années : SD10 ; un immeuble rempli d'habitants dans lequel il y a fréquemment du passage : SD 20).</p>\n<p><strong>Cibles :</strong> un seul lieu.</p>\n<p><strong>Effet :</strong> apprend des informations marquantes sur un lieu.</p>\n<p><strong>Zone d’effet : </strong>un lieu (pas plus grand qu’un bâtiment).</p>\n<p>La créature est capable, après avoir établi un contact mental avec un lieu par une transe prolongée, de récupérer des informations sur ce qui s’y est passé. En fonction de sa MR, elle aura accès à différents détails : paroles prononcées récemment ou qui ont marqué l’atmosphère, traits physiques généraux de protagonistes présents (odeur, poids, etc.). Les événements marquants (meurtre, incendie, etc.) imprègnent davantage un lieu et faciliteront le SD du test à la discrétion du Docte mais peuvent rester imperceptibles dans la masse d’informations si le lieu est vaste et fréquenté.</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678280900282,"modifiedTime":1678314472642,"lastModifiedBy":"3jSVOAZZNxArxD7h"},"_id":"672N9fk2mJahvJIL","folder":null,"sort":0,"ownership":{"default":0,"3jSVOAZZNxArxD7h":3}}
|
{"name":"Psychotopie","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"actif","masquetype":"masque","niveau":"normal","activation":"Féérie + Esprit et une transe de 5 minutes au moins, contre un SD variable selon la taille et les événements se déroulant dans le lieu (une chambre isolée depuis des années : SD10 ; un immeuble rempli d'habitants dans lequel il y a fréquemment du passage : SD 20).","istest":true,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"esp","duree":"","cibles":"un seul lieu","effet":"apprend des informations marquantes sur un lieu","portee":"un lieu (pas plus grand qu’un bâtiment)","resistance":"aucune","resistanceautre":"","isvirulence":false,"virulence":"","description":"<p><strong>Type de Pouvoir : </strong>actif.</p>\n<p><strong>Activation : </strong>Féérie + Esprit et une transe de 5 minutes au moins, contre un SD variable selon la taille et les événements se déroulant dans le lieu (une chambre isolée depuis des années : SD10 ; un immeuble rempli d'habitants dans lequel il y a fréquemment du passage : SD 20).</p>\n<p><strong>Cibles :</strong> un seul lieu.</p>\n<p><strong>Effet :</strong> apprend des informations marquantes sur un lieu.</p>\n<p><strong>Zone d’effet : </strong>un lieu (pas plus grand qu’un bâtiment).</p>\n<p>La créature est capable, après avoir établi un contact mental avec un lieu par une transe prolongée, de récupérer des informations sur ce qui s’y est passé. En fonction de sa MR, elle aura accès à différents détails : paroles prononcées récemment ou qui ont marqué l’atmosphère, traits physiques généraux de protagonistes présents (odeur, poids, etc.). Les événements marquants (meurtre, incendie, etc.) imprègnent davantage un lieu et faciliteront le SD du test à la discrétion du Docte mais peuvent rester imperceptibles dans la masse d’informations si le lieu est vaste et fréquenté.</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678280900282,"modifiedTime":1678314472642,"lastModifiedBy":"3jSVOAZZNxArxD7h"},"_id":"672N9fk2mJahvJIL","folder":null,"sort":0,"ownership":{"default":0,"3jSVOAZZNxArxD7h":3}}
|
||||||
{"name":"Doppelgänger universel","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"metamorphose","masquetype":"demasque","niveau":"legendaire","activation":"test de Masque + Féérie contre un SD de 10 + Prestance de la personne imitée modifiée par la précision de la source servant à l’imitation (connaissance personnelle profonde = bonus de + 3, connaissance personnelle superficielle = + 1, photographie = - 1, illustration fidèle = - 2).","istest":true,"feeriemasque":"Masque","zoneffet":"","testautre":"","carac":"agi","duree":" une scène.","cibles":"","effet":"prendre l’apparence de n’importe qui.","portee":"","resistance":"autre","resistanceautre":"percer à jour le protys légendaire nécessite un test de Sensibilité (Psychologie) + Perception en opposition au test de Féérie + Masque du protys.","isvirulence":false,"virulence":"","description":"<p><strong>Type de Pouvoir : </strong>démasqué ; actif puis métamorphose pour adopter l’identité imitée.</p>\n<p><strong>Activation : </strong>test de Masque + Féérie contre un SD de 10 + Prestance de la personne imitée modifiée par la précision de la source servant à l’imitation (connaissance personnelle profonde = bonus de + 3, connaissance personnelle superficielle = + 1, photographie = - 1, illustration fidèle = - 2).</p>\n<p><strong>Durée : </strong>une scène.</p>\n<p><strong>Effet : </strong>prendre l’apparence de n’importe qui.</p>\n<p><strong>Résistance : </strong>percer à jour le protys légendaire nécessite un test de Sensibilité (Psychologie) + Perception en opposition au test de Féérie + Masque du protys.</p>\n<p>Le protys légendaire est capable, pendant une scène, de prendre l’apparence (traits du visage, corpulence, etc.) de n’importe quel individu dont il aurait vu le visage en réalité ou en photographie, voire sur une illustration suffisamment fidèle. Il peut même imiter une fée avec ses capacités naturelles (ailes, crocs, pelage, etc.) au point de pouvoir s’en servir normalement (il pourra ainsi voler, utiliser une queue préhensile, etc.). Il n’aura en revanche pas accès aux Pouvoirs de la fée imitée.</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.21","coreVersion":"10.291","createdTime":1678354656026,"modifiedTime":1678356879899,"lastModifiedBy":"3jSVOAZZNxArxD7h"},"_id":"67ECitVegs2SFn2g","folder":null,"sort":0,"ownership":{"default":0,"3jSVOAZZNxArxD7h":3}}
|
{"name":"Doppelgänger universel","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"metamorphose","masquetype":"demasque","niveau":"legendaire","activation":"test de Masque + Féérie contre un SD de 10 + Prestance de la personne imitée modifiée par la précision de la source servant à l’imitation (connaissance personnelle profonde = bonus de + 3, connaissance personnelle superficielle = + 1, photographie = - 1, illustration fidèle = - 2).","istest":true,"feeriemasque":"Masque","zoneffet":"","testautre":"","carac":"agi","duree":" une scène.","cibles":"","effet":"prendre l’apparence de n’importe qui.","portee":"","resistance":"autre","resistanceautre":"percer à jour le protys légendaire nécessite un test de Sensibilité (Psychologie) + Perception en opposition au test de Féérie + Masque du protys.","isvirulence":false,"virulence":"","description":"<p><strong>Type de Pouvoir : </strong>démasqué ; actif puis métamorphose pour adopter l’identité imitée.</p>\n<p><strong>Activation : </strong>test de Masque + Féérie contre un SD de 10 + Prestance de la personne imitée modifiée par la précision de la source servant à l’imitation (connaissance personnelle profonde = bonus de + 3, connaissance personnelle superficielle = + 1, photographie = - 1, illustration fidèle = - 2).</p>\n<p><strong>Durée : </strong>une scène.</p>\n<p><strong>Effet : </strong>prendre l’apparence de n’importe qui.</p>\n<p><strong>Résistance : </strong>percer à jour le protys légendaire nécessite un test de Sensibilité (Psychologie) + Perception en opposition au test de Féérie + Masque du protys.</p>\n<p>Le protys légendaire est capable, pendant une scène, de prendre l’apparence (traits du visage, corpulence, etc.) de n’importe quel individu dont il aurait vu le visage en réalité ou en photographie, voire sur une illustration suffisamment fidèle. Il peut même imiter une fée avec ses capacités naturelles (ailes, crocs, pelage, etc.) au point de pouvoir s’en servir normalement (il pourra ainsi voler, utiliser une queue préhensile, etc.). Il n’aura en revanche pas accès aux Pouvoirs de la fée imitée.</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.21","coreVersion":"10.291","createdTime":1678354656026,"modifiedTime":1678356879899,"lastModifiedBy":"3jSVOAZZNxArxD7h"},"_id":"67ECitVegs2SFn2g","folder":null,"sort":0,"ownership":{"default":0,"3jSVOAZZNxArxD7h":3}}
|
||||||
{"name":"Souffle enflammé","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"actif","masquetype":"masque","niveau":"normal","activation":" test de Féérie + Agilité ou Précision.","istest":false,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"pre","duree":"","cibles":"une seule.","effet":"souffle de feu de dégâts = 2 + MR","portee":"Féérie mètres.","resistance":"autre","resistanceautre":"Esquive","isvirulence":false,"virulence":"","description":"<p><strong>Type de Pouvoir : </strong>actif.</p>\n<p><strong>Activation : </strong>test de Féérie + Agilité ou Précision.</p>\n<p><strong>Cibles : </strong>une seule.</p>\n<p><strong>Effet : </strong>souffle de feu de dégâts = 2 + MR.</p>\n<p><strong>Portée : </strong>Féérie mètres.</p>\n<p><strong>Résistance : </strong>Esquive.</p>\n<p>La créature souffle un jet de feu capables d’enflammer les matériaux combustibles (papier, tissus, bois) et faire des dégâts sur une cible. Cette dernière peut être durablement enflammée si les dégâts subis sont de 8 ou plus (en cumulant les attaques). La cible subira alors 1 point de dégât par tour jusqu’à ce que les flammes soient éteintes par la cible ou un allié. En as de réussite critique du Souffle enflammé, la cible peut perdre, en plus de points de Vie, un point de Prestance permanent à moins d’être soignée immédiatement.</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678293330850,"modifiedTime":1678314472644,"lastModifiedBy":"3jSVOAZZNxArxD7h"},"_id":"68wj1CJt4oipIedV","folder":null,"sort":0,"ownership":{"default":0,"3jSVOAZZNxArxD7h":3}}
|
{"name":"Souffle enflammé","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"actif","masquetype":"masque","niveau":"normal","activation":" test de Féérie + Agilité ou Précision.","istest":true,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"agi","duree":"","cibles":"une seule.","effet":"souffle de feu de dégâts = 2 + MR","portee":"Féérie mètres.","resistance":"autre","resistanceautre":"Esquive","isvirulence":false,"virulence":"","description":"<p><strong>Type de Pouvoir : </strong>actif.</p>\n<p><strong>Activation : </strong>test de Féérie + Agilité ou Précision.</p>\n<p><strong>Cibles : </strong>une seule.</p>\n<p><strong>Effet : </strong>souffle de feu de dégâts = 2 + MR.</p>\n<p><strong>Portée : </strong>Féérie mètres.</p>\n<p><strong>Résistance : </strong>Esquive.</p>\n<p>La créature souffle un jet de feu capables d’enflammer les matériaux combustibles (papier, tissus, bois) et faire des dégâts sur une cible. Cette dernière peut être durablement enflammée si les dégâts subis sont de 8 ou plus (en cumulant les attaques). La cible subira alors 1 point de dégât par tour jusqu’à ce que les flammes soient éteintes par la cible ou un allié. En as de réussite critique du Souffle enflammé, la cible peut perdre, en plus de points de Vie, un point de Prestance permanent à moins d’être soignée immédiatement.</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.1.3","coreVersion":"10.291","createdTime":1678293330850,"modifiedTime":1682875304779,"lastModifiedBy":"xGnwWyEbO2k89UsP"},"_id":"68wj1CJt4oipIedV","folder":null,"sort":0,"ownership":{"default":0,"3jSVOAZZNxArxD7h":3}}
|
||||||
{"name":"Chute indolore","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"passif","masquetype":"masque","niveau":"normal","activation":"","istest":false,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"pres","duree":"","cibles":"","effet":"la hauteur d’une chute est réduite de Féérie x 4 m pour le calcul de son SD.","portee":"","resistance":"aucune","resistanceautre":"Celle de la structure ou de l’objet (voir p. 204).","isvirulence":false,"virulence":"","description":"<p>La créature est capable d’affronter les pires chutes sans se faire mal. Lorsque ce Pouvoir est actif, on soustrait Féérie x 4 m à la hauteur de la chute pour le calcul de son SD.</p>\n<p><strong>Exemple</strong> : <em>si une créature a 4 en Féérie et chute de 20 m, c’est comme si elle ne chutait que de 4 m (elle ignore 4 x 4 = 16 m). Le SD de son test de Ressort + Agilité pour limiter les dégâts de la chute sera égal à 8 au lieu de 22 (voir le tableau des chutes, p. 190).</em></p>"},"effects":[],"flags":{"core":{"sourceId":"Item.745Qz4iEGB7RnBPk"}},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678214487456,"modifiedTime":1678303349644,"lastModifiedBy":"xGnwWyEbO2k89UsP"},"_id":"6v3s1I0blnPJHipG","folder":null,"sort":0,"ownership":{"default":0,"xGnwWyEbO2k89UsP":3}}
|
{"name":"Chute indolore","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"passif","masquetype":"masque","niveau":"normal","activation":"","istest":false,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"pres","duree":"","cibles":"","effet":"la hauteur d’une chute est réduite de Féérie x 4 m pour le calcul de son SD.","portee":"","resistance":"aucune","resistanceautre":"Celle de la structure ou de l’objet (voir p. 204).","isvirulence":false,"virulence":"","description":"<p>La créature est capable d’affronter les pires chutes sans se faire mal. Lorsque ce Pouvoir est actif, on soustrait Féérie x 4 m à la hauteur de la chute pour le calcul de son SD.</p>\n<p><strong>Exemple</strong> : <em>si une créature a 4 en Féérie et chute de 20 m, c’est comme si elle ne chutait que de 4 m (elle ignore 4 x 4 = 16 m). Le SD de son test de Ressort + Agilité pour limiter les dégâts de la chute sera égal à 8 au lieu de 22 (voir le tableau des chutes, p. 190).</em></p>"},"effects":[],"flags":{"core":{"sourceId":"Item.745Qz4iEGB7RnBPk"}},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678214487456,"modifiedTime":1678303349644,"lastModifiedBy":"xGnwWyEbO2k89UsP"},"_id":"6v3s1I0blnPJHipG","folder":null,"sort":0,"ownership":{"default":0,"xGnwWyEbO2k89UsP":3}}
|
||||||
{"name":"Charme","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"actif","masquetype":"masque","niveau":"normal","activation":"test de Féérie + Prestance.","istest":true,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"pres","duree":"Féérie + MR jours.","cibles":" une cible.","effet":"la cible tombe amoureuse.","portee":"conversation.","resistance":"psychiquepassive","resistanceautre":"Celle de la structure ou de l’objet (voir p. 204).","isvirulence":false,"virulence":"","description":"<p>La créature est capable, au cours d’une conversation, de faire tomber sa cible follement amoureuse d’elle si elle ne Résiste pas. La cible, une fois éprise de la créature, aura du mal à lui refuser quelque chose mais ne fera rien qui puisse directement nuire à ses jours et ira rarement contre son code moral.</p>\n<p>Pour la pousser à une telle extrémité, la créature devra obtenir une réussite critique ou réussir un test de Rhétorique ou Séduction de SD 15 minimum (au jugement du Docte) bénéficiant d’un bonus égal à la MR du Pouvoir.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678214487456,"modifiedTime":1678303349644,"lastModifiedBy":"xGnwWyEbO2k89UsP"},"_id":"745Qz4iEGB7RnBPk","folder":null,"sort":0,"ownership":{"default":0,"xGnwWyEbO2k89UsP":3}}
|
{"name":"Charme","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"actif","masquetype":"masque","niveau":"normal","activation":"test de Féérie + Prestance.","istest":true,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"pres","duree":"Féérie + MR jours.","cibles":" une cible.","effet":"la cible tombe amoureuse.","portee":"conversation.","resistance":"psychiquepassive","resistanceautre":"Celle de la structure ou de l’objet (voir p. 204).","isvirulence":false,"virulence":"","description":"<p>La créature est capable, au cours d’une conversation, de faire tomber sa cible follement amoureuse d’elle si elle ne Résiste pas. La cible, une fois éprise de la créature, aura du mal à lui refuser quelque chose mais ne fera rien qui puisse directement nuire à ses jours et ira rarement contre son code moral.</p>\n<p>Pour la pousser à une telle extrémité, la créature devra obtenir une réussite critique ou réussir un test de Rhétorique ou Séduction de SD 15 minimum (au jugement du Docte) bénéficiant d’un bonus égal à la MR du Pouvoir.</p>"},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678214487456,"modifiedTime":1678303349644,"lastModifiedBy":"xGnwWyEbO2k89UsP"},"_id":"745Qz4iEGB7RnBPk","folder":null,"sort":0,"ownership":{"default":0,"xGnwWyEbO2k89UsP":3}}
|
||||||
{"name":"Sujet qui fâche","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"actif","masquetype":"masque","niveau":"normal","activation":"test de Féérie + Esprit.","istest":true,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"esp","duree":"","cibles":" une cible","effet":"fait deviner ce qui fâche quelqu’un ; fait perdre automatiquement un point de Sang-froid quand ce sujet est abordé et pousse à la colère.","portee":" à vue","resistance":"autre","resistanceautre":"psychique pour ne pas être percé à jour puis Fortitude + Sang-froid pour garder le contrôle contre un SD difficile (13 ou plus) fixé par le Docte.","isvirulence":false,"virulence":"","description":"<p><strong>Type de Pouvoir :</strong> actif.</p>\n<p><strong>Activation : </strong>test de Féérie + Esprit.</p>\n<p><strong>Cibles : </strong>une cible.</p>\n<p><strong>Effet :</strong> fait deviner ce qui fâche quelqu’un ; fait perdre automatiquement un point de Sang-froid quand ce sujet est abordé et pousse à la colère.</p>\n<p><strong>Portée :</strong> à vue.</p>\n<p><strong>Résistance : </strong>psychique pour ne pas être percé à jour puis Fortitude + Sang-froid pour garder le contrôle contre un SD difficile (13 ou plus) fixé par le Docte.</p>\n<p>Lorsqu’elle active ce Pouvoir, la créature peut, en observant son interlocuteur (il peut avoir un bonus d’après des éléments qu’il connaît), trouver instinctivement le sujet qui va le fâcher et, selon son caractère, le mettre en colère ou le faire fuir en rougissant. Ce peut être un complexe, une histoire louche, une phobie… Toutefois, elle n’est pas obligée d’en faire usage : le Docte doit juste lui communiquer le sujet susceptible de froisser la personne en question.<br>Si la victime Résiste, la créature n’est pas sûre du « sujet qui fâche ». En cas de succès du Pouvoir, si la créature se sert du Sujet qui fâche, la cible perd automatiquement un point de Sang-froid (effet non cumulable) et doit réussir à se maîtriser pour ne pas montrer sa colère ou sa gêne. Toutefois, la victime ne peut que maîtriser ses réactions apparentes (et bouillir intérieurement).</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678313273572,"modifiedTime":1678314472645,"lastModifiedBy":"3jSVOAZZNxArxD7h"},"_id":"7BsyUzwv31oxldYQ","folder":null,"sort":0,"ownership":{"default":0,"3jSVOAZZNxArxD7h":3}}
|
{"name":"Sujet qui fâche","type":"pouvoir","img":"systems/fvtt-les-heritiers/assets/icons/power.webp","system":{"pouvoirtype":"actif","masquetype":"masque","niveau":"normal","activation":"test de Féérie + Esprit.","istest":true,"feeriemasque":"feerie","zoneffet":"","testautre":"","carac":"esp","duree":"","cibles":" une cible","effet":"fait deviner ce qui fâche quelqu’un ; fait perdre automatiquement un point de Sang-froid quand ce sujet est abordé et pousse à la colère.","portee":" à vue","resistance":"autre","resistanceautre":"psychique pour ne pas être percé à jour puis Fortitude + Sang-froid pour garder le contrôle contre un SD difficile (13 ou plus) fixé par le Docte.","isvirulence":false,"virulence":"","description":"<p><strong>Type de Pouvoir :</strong> actif.</p>\n<p><strong>Activation : </strong>test de Féérie + Esprit.</p>\n<p><strong>Cibles : </strong>une cible.</p>\n<p><strong>Effet :</strong> fait deviner ce qui fâche quelqu’un ; fait perdre automatiquement un point de Sang-froid quand ce sujet est abordé et pousse à la colère.</p>\n<p><strong>Portée :</strong> à vue.</p>\n<p><strong>Résistance : </strong>psychique pour ne pas être percé à jour puis Fortitude + Sang-froid pour garder le contrôle contre un SD difficile (13 ou plus) fixé par le Docte.</p>\n<p>Lorsqu’elle active ce Pouvoir, la créature peut, en observant son interlocuteur (il peut avoir un bonus d’après des éléments qu’il connaît), trouver instinctivement le sujet qui va le fâcher et, selon son caractère, le mettre en colère ou le faire fuir en rougissant. Ce peut être un complexe, une histoire louche, une phobie… Toutefois, elle n’est pas obligée d’en faire usage : le Docte doit juste lui communiquer le sujet susceptible de froisser la personne en question.<br>Si la victime Résiste, la créature n’est pas sûre du « sujet qui fâche ». En cas de succès du Pouvoir, si la créature se sert du Sujet qui fâche, la cible perd automatiquement un point de Sang-froid (effet non cumulable) et doit réussir à se maîtriser pour ne pas montrer sa colère ou sa gêne. Toutefois, la victime ne peut que maîtriser ses réactions apparentes (et bouillir intérieurement).</p>","zoneeffet":""},"effects":[],"flags":{},"_stats":{"systemId":"fvtt-les-heritiers","systemVersion":"10.0.18","coreVersion":"10.291","createdTime":1678313273572,"modifiedTime":1678314472645,"lastModifiedBy":"3jSVOAZZNxArxD7h"},"_id":"7BsyUzwv31oxldYQ","folder":null,"sort":0,"ownership":{"default":0,"3jSVOAZZNxArxD7h":3}}
|
||||||
|
|||||||
BIN
packs/pouvoirs/000180.ldb
Normal file
BIN
packs/pouvoirs/000180.ldb
Normal file
Binary file not shown.
0
packs/pouvoirs/000299.log
Normal file
0
packs/pouvoirs/000299.log
Normal file
1
packs/pouvoirs/CURRENT
Normal file
1
packs/pouvoirs/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000297
|
||||||
0
packs/pouvoirs/LOCK
Normal file
0
packs/pouvoirs/LOCK
Normal file
8
packs/pouvoirs/LOG
Normal file
8
packs/pouvoirs/LOG
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:06:27.338726 7f307b7fe6c0 Recovering log #295
|
||||||
|
2025/09/15-21:06:27.348432 7f307b7fe6c0 Delete type=3 #293
|
||||||
|
2025/09/15-21:06:27.348491 7f307b7fe6c0 Delete type=0 #295
|
||||||
|
2025/09/15-21:08:54.718495 7f307a7fc6c0 Level-0 table #300: started
|
||||||
|
2025/09/15-21:08:54.718519 7f307a7fc6c0 Level-0 table #300: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.724957 7f307a7fc6c0 Delete type=0 #298
|
||||||
|
2025/09/15-21:08:54.731709 7f307a7fc6c0 Manual compaction at level-0 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.731758 7f307a7fc6c0 Manual compaction at level-1 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)
|
||||||
8
packs/pouvoirs/LOG.old
Normal file
8
packs/pouvoirs/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.763699 7f307b7fe6c0 Recovering log #291
|
||||||
|
2025/09/15-21:05:50.789495 7f307b7fe6c0 Delete type=3 #289
|
||||||
|
2025/09/15-21:05:50.789561 7f307b7fe6c0 Delete type=0 #291
|
||||||
|
2025/09/15-21:06:21.689659 7f307a7fc6c0 Level-0 table #296: started
|
||||||
|
2025/09/15-21:06:21.689685 7f307a7fc6c0 Level-0 table #296: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.695776 7f307a7fc6c0 Delete type=0 #294
|
||||||
|
2025/09/15-21:06:21.703573 7f307a7fc6c0 Manual compaction at level-0 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.703617 7f307a7fc6c0 Manual compaction at level-1 from '!items!19r9ijZUyvnlIqgm' @ 72057594037927935 : 1 .. '!items!zON0h5SjFyANjPnA' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/pouvoirs/MANIFEST-000297
Normal file
BIN
packs/pouvoirs/MANIFEST-000297
Normal file
Binary file not shown.
0
packs/profils/000296.log
Normal file
0
packs/profils/000296.log
Normal file
1
packs/profils/CURRENT
Normal file
1
packs/profils/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000294
|
||||||
0
packs/profils/LOCK
Normal file
0
packs/profils/LOCK
Normal file
7
packs/profils/LOG
Normal file
7
packs/profils/LOG
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
2025/09/15-21:06:27.364429 7f3080dfa6c0 Recovering log #292
|
||||||
|
2025/09/15-21:06:27.374643 7f3080dfa6c0 Delete type=3 #290
|
||||||
|
2025/09/15-21:06:27.374720 7f3080dfa6c0 Delete type=0 #292
|
||||||
|
2025/09/15-21:08:54.725160 7f307a7fc6c0 Level-0 table #297: started
|
||||||
|
2025/09/15-21:08:54.725200 7f307a7fc6c0 Level-0 table #297: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.731505 7f307a7fc6c0 Delete type=0 #295
|
||||||
|
2025/09/15-21:08:54.731723 7f307a7fc6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||||
7
packs/profils/LOG.old
Normal file
7
packs/profils/LOG.old
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
2025/09/15-21:05:50.804897 7f307bfff6c0 Recovering log #288
|
||||||
|
2025/09/15-21:05:50.816008 7f307bfff6c0 Delete type=3 #286
|
||||||
|
2025/09/15-21:05:50.816107 7f307bfff6c0 Delete type=0 #288
|
||||||
|
2025/09/15-21:06:21.696108 7f307a7fc6c0 Level-0 table #293: started
|
||||||
|
2025/09/15-21:06:21.696160 7f307a7fc6c0 Level-0 table #293: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.703387 7f307a7fc6c0 Delete type=0 #291
|
||||||
|
2025/09/15-21:06:21.703588 7f307a7fc6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
||||||
BIN
packs/profils/MANIFEST-000294
Normal file
BIN
packs/profils/MANIFEST-000294
Normal file
Binary file not shown.
BIN
packs/scenes/000148.ldb
Normal file
BIN
packs/scenes/000148.ldb
Normal file
Binary file not shown.
0
packs/scenes/000267.log
Normal file
0
packs/scenes/000267.log
Normal file
1
packs/scenes/CURRENT
Normal file
1
packs/scenes/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000265
|
||||||
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 @@
|
|||||||
|
2025/09/15-21:06:27.376909 7f307b7fe6c0 Recovering log #263
|
||||||
|
2025/09/15-21:06:27.386759 7f307b7fe6c0 Delete type=3 #261
|
||||||
|
2025/09/15-21:06:27.386852 7f307b7fe6c0 Delete type=0 #263
|
||||||
|
2025/09/15-21:08:54.752330 7f307a7fc6c0 Level-0 table #268: started
|
||||||
|
2025/09/15-21:08:54.752369 7f307a7fc6c0 Level-0 table #268: 0 bytes OK
|
||||||
|
2025/09/15-21:08:54.758780 7f307a7fc6c0 Delete type=0 #266
|
||||||
|
2025/09/15-21:08:54.758945 7f307a7fc6c0 Manual compaction at level-0 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:08:54.758971 7f307a7fc6c0 Manual compaction at level-1 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end)
|
||||||
8
packs/scenes/LOG.old
Normal file
8
packs/scenes/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/09/15-21:05:50.819637 7f3080dfa6c0 Recovering log #259
|
||||||
|
2025/09/15-21:05:50.829492 7f3080dfa6c0 Delete type=3 #257
|
||||||
|
2025/09/15-21:05:50.829569 7f3080dfa6c0 Delete type=0 #259
|
||||||
|
2025/09/15-21:06:21.709921 7f307a7fc6c0 Level-0 table #264: started
|
||||||
|
2025/09/15-21:06:21.709944 7f307a7fc6c0 Level-0 table #264: 0 bytes OK
|
||||||
|
2025/09/15-21:06:21.716749 7f307a7fc6c0 Delete type=0 #262
|
||||||
|
2025/09/15-21:06:21.729805 7f307a7fc6c0 Manual compaction at level-0 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end)
|
||||||
|
2025/09/15-21:06:21.729851 7f307a7fc6c0 Manual compaction at level-1 from '!scenes!8DjkNeeujp2qff1N' @ 72057594037927935 : 1 .. '!scenes!ypDutqjqZcr7lx6I' @ 0 : 0; will stop at (end)
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user