Compare commits
54 Commits
fvtt-hawkm
...
fvtt-hawkm
| Author | SHA1 | Date | |
|---|---|---|---|
| a6fa3afbee | |||
| 1051349dd0 | |||
| a245b0e87c | |||
| c9ce3367ed | |||
| e95e068112 | |||
| 6dd63a2c54 | |||
| 650e4b7449 | |||
| 3f27482ad9 | |||
| 436b282ff5 | |||
| 39f8cfdbcc | |||
| 24a57a906e | |||
| 667f3678fb | |||
| d5dd9e5bf7 | |||
| 3403b72d1f | |||
| 8a4487c833 | |||
| 4eece5aaf4 | |||
| b574ba76ef | |||
| 0b9e1a80af | |||
| 6505b1c969 | |||
| 280e90d7a6 | |||
| 4fa9a911a0 | |||
| b8c61f8f12 | |||
| b47b14a4b1 | |||
| 9391acf6ee | |||
| 8af9c582bf | |||
| fac158e0ad | |||
| 69a2f81ede | |||
| 005d390941 | |||
| 3327109f7e | |||
| b38bfc97c2 | |||
| 89a7730d43 | |||
| 2ebd1bd1fd | |||
| 9e023d3f01 | |||
| 2c12ec38fb | |||
| 38059232cb | |||
| c331604393 | |||
| 71c1e1cd29 | |||
| 4a2ca5fab5 | |||
| ea8c82256c | |||
| 7df8aad4dc | |||
| bb38705d52 | |||
| 4344a5fbd3 | |||
| df461fecf9 | |||
| 3aeb51c8ac | |||
| 154e9d3da5 | |||
| 9b58acc058 | |||
| 189411eef8 | |||
| b1966412a0 | |||
| c34d223d8f | |||
| 0e5be07fb9 | |||
| 22ae4fb588 | |||
| 42ac857c06 | |||
| 1c143f542c | |||
| 4d447c9783 |
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
.vscode/settings.json
|
||||
.idea
|
||||
.history
|
||||
todo.md
|
||||
/.vscode
|
||||
/ignored/
|
||||
/node_modules/
|
||||
/jsconfig.json
|
||||
/package.json
|
||||
/package-lock.json
|
||||
8
_deprecated/competences-creatures.db
Normal file
8
_deprecated/competences-creatures.db
Normal file
@@ -0,0 +1,8 @@
|
||||
{"name":"Mêlée","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Mêlée représente la maîtrise martiale et l’habileté au combat rapproché, avec ou sans arme. Plus cette Compétence est élevée, plus le personnage est à même de passer la garde de ses adversaires en combat au corps-à-corps.</p>","niveau":0,"attribut1":"pui","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Armes à une main (Puissance)","used":false,"description":"Pour utiliser des armes comme l’épée courte, la hache, une arme improvisée à une main, etc.\n\n"},{"name":"Armes à deux mains (Puissance)","used":false,"description":"Pour utiliser des armes comme la hache nordaine ou l’épée arthurienne, une arme improvisée à deux mains, etc."},{"name":"Mains nues (Puissance)","used":false,"description":"Pour se battre à mains nues, qu’il s’agisse d’une bagarre ou d’un pugilat codifié."}],"predilections[0]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.VM3TSQYxseYdCFjv"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645643952,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"0nhTxujlIUB63Aqt"}
|
||||
{"name":"Discrétion","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Discrétion représente la capacité à ne pas se faire remarquer, qu’il s’agisse de se fondre dans la foule, de prendre l'apparence de quelqu’un d’autre, de se cacher dans l’ombre ou encore de se déplacer en silence. Plus cette Compétence est élevée, plus le personnage est apte à passer<br>physiquement inaperçu.</p>","niveau":0,"attribut1":"adr","attribut2":"tre","attribut3":"none","doublebonus":false,"predilections":[{"name":"Cacher et se cacher (Trempe)","used":false,"description":"Pour se fondre dans le décor. Le personnage adopte un comportement décontracté qui le fait passer inaperçu, il trouve une cachette, etc. Permet également de dissimuler un objet sur soi (qu’il s’agisse d’une bourse, d’une arme, d’un tatouage, etc.).\n\n"},{"name":"Déguisement (Trempe)","used":false,"description":"Pour dissimuler son identité, altérer ses traits ou prendre ceux d'une personne spécifique."},{"name":"Déplacement silencieux (Adresse)","used":false,"description":"Pour se déplacer sans éveiller l’attention lorsqu’on ne peut être vu (dans l’obscurité ou à couvert, lorsqu’un garde est derrière une porte ou un angle\nde mur, etc.)."}]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.gBmAdYl4rhbY89ee"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645638028,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"J4x6SP6l6njOrZn3"}
|
||||
{"name":"Armes à distance","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Représente l’habileté au lancer ou avec une arme à distance. Plus cette Compétence est élevée, plus les tirs du personnage sont précis. </p>\n<p style=\"text-align: justify;\"> </p>\n<p style=\"text-align: justify;\"> </p>\n<p style=\"text-align: justify;\"> </p>","niveau":0,"attribut1":"adr","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Armes à feu (Adresse) ","used":false,"description":"Pour des armes comme le lance-feu. "},{"name":"Armes à projectile (Adresse)","used":false,"description":"Pour des armes comme l'arc, la fronde, l'arbalète, etc."},{"name":"Armes de jet (Adresse)","used":false,"description":"Pour des armes comme la dague de lancer, la bombe à mèche, le javelot, les projectiles improvisés, etc. "}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.MLMlscPBb1ZCPTRl"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666619959067,"modifiedTime":1671645649970,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"UfVYwmPFwy2T7jZM"}
|
||||
{"name":"Survie","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Survie représente la capacité à trouver de quoi subsister dans la nature, à établir un campement, à faire du feu avec les moyens du bord, à se repérer. Avec Clairvoyance, cette Compétence permet de trouver des baies comestibles, de poser tous les types de pièges, de pister, de trouver le meilleur emplacement pour un campement. Avec Adresse, elle permet de chasser, de pêcher, de faire du feu dans des conditions difficiles et de confectionner les pièges les plus simples (collets, fosses, etc.).</p>\n<p style=\"text-align: justify;\">Les Prédilections représentent quant à elles les différents milieux ou climats.</p>","niveau":0,"attribut1":"adr","attribut2":"cla","attribut3":"none","doublebonus":false,"predilections":[{"name":"Fleuve, Forêt, Hiver, Mer, Montagne, Souterrains, etc. (Adresse ou Clairvoyance)","used":false,"description":"En fonction de chaque milieu, la Prédilection permet d’y évoluer de la façon la plus adaptée."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""],"predilections[4]":["Nouvelle prédilection",""],"predilections[5]":["Nouvelle prédilection",""],"predilections[6]":["Nouvelle prédilection",""],"predilections[7]":["Nouvelle prédilection",""],"predilections[8]":["Nouvelle prédilection",""],"predilections[9]":["Nouvelle prédilection",""],"predilections[10]":["Nouvelle prédilection",""],"predilections[11]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.yI1zY5k8mAdx9wHK"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645647913,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"Vpth0atT9qS6VqUB"}
|
||||
{"name":"Perception","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Perception représente à la fois la conscience de son environnement, la capacité à remarquer les détails incongrus, et l’aptitude à lire le langage corporel. Plus cette Compétence est élevée, plus les sens du personnage sont affûtés.</p>","niveau":0,"attribut1":"cla","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Empathie (Clairvoyance)","used":false,"description":"Pour déchiffrer, par son attitude ou ses gestes, l’opinion ou la sincérité d’un interlocuteur, pour deviner les choses exprimées à mots couverts, pour comprendre quelqu’un qui s’exprime par signes."},{"name":"Recherche (Clairvoyance)","used":false,"description":"Pour remarquer les détails les plus infimes, pour trouver un objet ou un passage dissimulés."},{"name":"Vigilance (Clairvoyance) ","used":false,"description":"Pour détecter un personnage ou un animal qui se cache, pour remarquer une menace potentielle (piège, terrain dangereux, tireur embusqué), pour rester attentif lors d’un tour de garde."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""],"predilections[4]":["Nouvelle prédilection",""],"predilections[5]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.7p2MTjttE4fllp9e"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645646434,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"cunjmZoXNhSX5qdV"}
|
||||
{"name":"Coercition","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Coercition représente la capacité de forcer quelqu’un à agir contre son gré, à révéler des secrets ou à obéir aveuglément. Plus cette Compétence est élevée, plus le personnage sait se montrer intimidant et jouer sur l’autorité qu’il inspire pour briser la volonté de ses interlocuteurs.</p>","niveau":0,"attribut1":"pre","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Commandement (Présence) ","used":false,"description":"Pour donner des ordres auxquels on obéira sans poser de question. "},{"name":"Interrogatoire (Présence)","used":false,"description":"Pour forcer quelqu'un à révéler des informations, que ce soit par la torture ou à l'aide de techniques de manipulation plus subtiles. "},{"name":"Intimidation (Présence)","used":false,"description":"Pour faire peur, pour convaincre quelqu'un de renoncer à se battre, pour donner l'impression d'être dangereux. "}]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.15IDGG6JoZnRCQtY"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620317429,"modifiedTime":1671645635525,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"lchi2ulzWdm8j1l7"}
|
||||
{"name":"Nage","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Nage représente la vitesse (Adresse), mais aussi l’endurance du nageur (Puissance). La natation est une Compétence assez rare dans le monde de Hawkmoon. Un personnage qui n’a plus pied et ne sait pas nager commence à se noyer au bout d’un tour de jeu (soit six secondes). Reportez-vous à la règle de noyade p. 214.</p>\n<p style=\"text-align: justify;\"> </p>\n<h3 style=\"text-align: justify;\"><strong>Prédilections/Maîtrises</strong></h3>\n<ul>\n<li style=\"text-align: justify;\"><strong>Au choix du joueur et du MJ.</strong></li>\n</ul>","niveau":0,"attribut1":"adr","attribut2":"pui","attribut3":"none","doublebonus":false,"predilections":[],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.Dw7q0dGCoaBy1Smu"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645639961,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"pyeEZFo46NTnV8WK"}
|
||||
{"name":"Mouvements","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Mouvements indique la capacité du personnage à se déplacer rapidement et longtemps. Cette Compétence représente aussi bien la souplesse et la vivacité des gestes que l’endurance physique et la résistance à l’effort. Plus cette Compétence est élevée, plus le personnage est en forme et peut courir, grimper ou sauter longtemps et rapidement sans se fatiguer.</p>","niveau":0,"attribut1":"adr","attribut2":"pui","attribut3":"none","doublebonus":false,"predilections":[{"name":"Acrobaties (Adresse)","used":true,"description":"Pour faire des figures acrobatiques, sauter en hauteur ou en longueur, jongler, ou encore pour rattraper un objet fragile sans l’abîmer (ou un ustensile dangereux sans se blesser).\n\n"},{"name":"Course (Puissance)","used":false,"description":"Pour sprinter ou pour tenir la distance dans une course d’endurance."},{"name":"Escalade (Puissance) ","used":false,"description":"Pour escalader murs, arbres, etc. Sert également à avancer en étant suspendu à une corde horizontale."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.bP7pPSCekexUEf7m"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645642114,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"tFU5yISK6spdNWco"}
|
||||
BIN
assets/icons/mutation.webp
Normal file
BIN
assets/icons/mutation.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.1 KiB |
BIN
assets/scenes/hawkmoon_map_europe.webp
Normal file
BIN
assets/scenes/hawkmoon_map_europe.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 807 KiB |
BIN
assets/scenes/scenes-CXx90Qk7nXEd2uTh-thumb.webp
Normal file
BIN
assets/scenes/scenes-CXx90Qk7nXEd2uTh-thumb.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
BIN
assets/scenes/scenes-j6RYn1X7KfhTioX5-thumb.webp
Normal file
BIN
assets/scenes/scenes-j6RYn1X7KfhTioX5-thumb.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.2 KiB |
BIN
assets/ui/landing_page_hawmoon.webp
Normal file
BIN
assets/ui/landing_page_hawmoon.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 384 KiB |
40
lang/fr.json
40
lang/fr.json
@@ -1,25 +1,25 @@
|
||||
{
|
||||
"ACTOR": {
|
||||
"TypePersonnage": "Personnage",
|
||||
"TypeCellule": "Cellule",
|
||||
"TypeCreature": "Créature"
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"personnage": "Personnage",
|
||||
"cellule": "Cellule",
|
||||
"creature": "Créature"
|
||||
},
|
||||
"Item": {
|
||||
"artefact": "Artefact",
|
||||
"arme": "Arme",
|
||||
"talent": "Talent",
|
||||
"historique": "Historique",
|
||||
"profil": "Profil",
|
||||
"competence": "Compétence",
|
||||
"protection": "Protection",
|
||||
"monnaie": "Monnaie",
|
||||
"equipement": "Equipement",
|
||||
"ressource": "Ressource",
|
||||
"contact": "Contact",
|
||||
"mutation": "Mutation"
|
||||
}
|
||||
},
|
||||
|
||||
"ITEM": {
|
||||
"TypeArtefact": "Artefact",
|
||||
"TypeArme": "Arme",
|
||||
"TypeTalent": "Talent",
|
||||
"TypeHistorique": "Historique",
|
||||
"TypeProfil": "Profil",
|
||||
"TypeCompetence": "Compétence",
|
||||
"TypeProtection": "Protection",
|
||||
"TypeMonnaie": "Monnaie",
|
||||
"TypeEquipement": "Equipement",
|
||||
"TypeRessource": "Ressource",
|
||||
"TypeContact": "Contact"
|
||||
|
||||
},
|
||||
|
||||
"HAWKMOON": {
|
||||
"ui": {
|
||||
"editContact": "Modifier le contact",
|
||||
|
||||
@@ -7,12 +7,12 @@ import { HawkmoonUtility } from "./hawkmoon-utility.js";
|
||||
import { HawkmoonAutomation } from "./hawkmoon-automation.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class HawkmoonActorSheet extends ActorSheet {
|
||||
export class HawkmoonActorSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-hawkmoon-cyd", "sheet", "actor"],
|
||||
template: "systems/fvtt-hawkmoon-cyd/templates/actor-sheet.html",
|
||||
width: 640,
|
||||
@@ -25,7 +25,7 @@ export class HawkmoonActorSheet extends ActorSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
@@ -39,26 +39,30 @@ export class HawkmoonActorSheet extends ActorSheet {
|
||||
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills(),
|
||||
armes: duplicate(this.actor.getWeapons()),
|
||||
monnaies: duplicate(this.actor.getMonnaies()),
|
||||
protections: duplicate(this.actor.getArmors()),
|
||||
historiques: duplicate(this.actor.getHistoriques() || []),
|
||||
talents: duplicate(this.actor.getTalents() || []),
|
||||
armes: foundry.utils.duplicate(this.actor.getWeapons()),
|
||||
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
|
||||
protections: foundry.utils.duplicate(this.actor.getArmors()),
|
||||
historiques: foundry.utils.duplicate(this.actor.getHistoriques() || []),
|
||||
talents: foundry.utils.duplicate(this.actor.getTalents() || []),
|
||||
mutations: foundry.utils.duplicate(this.actor.getMutations() || []),
|
||||
talentsCell: this.getCelluleTalents(),
|
||||
profils: duplicate(this.actor.getProfils() || []),
|
||||
combat: this.actor.getCombatValues(),
|
||||
equipements: duplicate(this.actor.getEquipments()),
|
||||
artefacts: duplicate(this.actor.getArtefacts()),
|
||||
monnaies: duplicate(this.actor.getMonnaies()),
|
||||
profils: foundry.utils.duplicate(this.actor.getProfils() || []),
|
||||
combat: this.actor.getCombatValues(),
|
||||
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
|
||||
artefacts: foundry.utils.duplicate(this.actor.getArtefacts()),
|
||||
richesse: this.actor.computeRichesse(),
|
||||
coupDevastateur: this.actor.items.find(it => it.type =="talent" && it.name.toLowerCase() == "coup devastateur" && !it.system.used),
|
||||
valeurEquipement: this.actor.computeValeurEquipement(),
|
||||
nbCombativite: this.actor.system.sante.nbcombativite,
|
||||
combativiteList: HawkmoonUtility.getCombativiteList(this.actor.system.sante.nbcombativite),
|
||||
initiative: this.actor.getFlag("world", "last-initiative") || -1,
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
habitat: await TextEditor.enrichHTML(this.object.system.biodata.habitat, {async: true}),
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
habitat: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.habitat, {async: true}),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
isGM: game.user.isGM
|
||||
isGM: game.user.isGM,
|
||||
config: game.system.hawkmoon.config
|
||||
}
|
||||
this.formData = formData;
|
||||
|
||||
@@ -87,14 +91,14 @@ export class HawkmoonActorSheet extends ActorSheet {
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
const item = this.actor.items.get( itemId )
|
||||
item.sheet.render(true)
|
||||
})
|
||||
})
|
||||
// Delete Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
@@ -116,7 +120,7 @@ export class HawkmoonActorSheet extends ActorSheet {
|
||||
let value = Number($(event.currentTarget).data("adversite-value"))
|
||||
this.actor.incDecAdversite(adv, value)
|
||||
})
|
||||
|
||||
|
||||
html.find('.quantity-modify').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const value = Number($(event.currentTarget).data("quantite-value"))
|
||||
@@ -124,9 +128,9 @@ export class HawkmoonActorSheet extends ActorSheet {
|
||||
})
|
||||
|
||||
html.find('.roll-initiative').click((event) => {
|
||||
this.actor.rollAttribut("pre", true)
|
||||
this.actor.rollAttribut("adr", true)
|
||||
})
|
||||
|
||||
|
||||
html.find('.roll-attribut').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let attrKey = li.data("attr-key")
|
||||
@@ -143,29 +147,46 @@ export class HawkmoonActorSheet extends ActorSheet {
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeOffensif(armeId)
|
||||
})
|
||||
|
||||
html.find('.roll-assommer').click((event) => {
|
||||
this.actor.rollAssommer()
|
||||
})
|
||||
html.find('.roll-coup-bas').click((event) => {
|
||||
this.actor.rollCoupBas()
|
||||
})
|
||||
html.find('.roll-immobiliser').click((event) => {
|
||||
this.actor.rollImmobiliser()
|
||||
})
|
||||
html.find('.roll-repousser').click((event) => {
|
||||
this.actor.rollRepousser()
|
||||
})
|
||||
html.find('.roll-desengager').click((event) => {
|
||||
this.actor.rollDesengager()
|
||||
})
|
||||
|
||||
html.find('.roll-arme-degats').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeDegats(armeId)
|
||||
})
|
||||
|
||||
|
||||
html.find('.item-add').click((event) => {
|
||||
const itemType = $(event.currentTarget).data("type")
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||
})
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
this.render(true);
|
||||
});
|
||||
});
|
||||
html.find('.item-equip').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.equipItem( li.data("item-id") );
|
||||
this.render(true);
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
|
||||
@@ -17,8 +17,8 @@ export class HawkmoonActor extends Actor {
|
||||
/**
|
||||
* Override the create() function to provide additional SoS functionality.
|
||||
*
|
||||
* This overrided create() function adds initial items
|
||||
* Namely: Basic skills, money,
|
||||
* This overrided create() function adds initial items
|
||||
* Namely: Basic skills, money,
|
||||
*
|
||||
* @param {Object} data Barebones actor data which this function adds onto.
|
||||
* @param {Object} options (Unused) Additional options which customize the creation workflow.
|
||||
@@ -41,7 +41,11 @@ export class HawkmoonActor extends Actor {
|
||||
const skills = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.skills")
|
||||
data.items = skills.map(i => i.toObject())
|
||||
}
|
||||
if (data.type == 'pnj') {
|
||||
if (data.type == 'creature') {
|
||||
const skills = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.skills-creatures")
|
||||
data.items = skills.map(i => i.toObject())
|
||||
data.items.push({ name: "Arme naturelle 1", type: 'arme', img: "systems/fvtt-hawkmoon-cyd/assets/icons/melee.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
|
||||
data.items.push({ name: "Arme naturelle 2", type: 'arme', img: "systems/fvtt-hawkmoon-cyd/assets/icons/melee.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
|
||||
}
|
||||
|
||||
return super.create(data, options);
|
||||
@@ -63,22 +67,31 @@ export class HawkmoonActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareArme(arme) {
|
||||
arme = duplicate(arme)
|
||||
if (this.type == "cellule") {
|
||||
return arme
|
||||
}
|
||||
|
||||
arme = foundry.utils.duplicate(arme)
|
||||
let combat = this.getCombatValues()
|
||||
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
|
||||
let bonusDefense = this.getBonusDefenseFromTalents()
|
||||
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
arme.system.attrKey = "pui"
|
||||
arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal
|
||||
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense + bonusDefense
|
||||
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + (this.system.combat.monte ? 3 : 0)
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense + bonusDefense + (this.system.combat.monte ? 3 : 0)
|
||||
console.log("Arme", arme.system.totalDefensif, combat, arme.system.competence.system.niveau, arme.system.seuildefense, bonusDefense)
|
||||
arme.system.isdefense = true
|
||||
arme.system.isMelee = true
|
||||
arme.system.isDistance = false
|
||||
}
|
||||
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
|
||||
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
|
||||
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
|
||||
arme.system.attrKey = "adr"
|
||||
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
|
||||
arme.system.totalDegats = arme.system.degats
|
||||
arme.system.isMelee = false
|
||||
arme.system.isDistance = true
|
||||
if (arme.system.isdefense) {
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense
|
||||
}
|
||||
@@ -87,6 +100,11 @@ export class HawkmoonActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getItemSorted(types) {
|
||||
let items = this.items.filter(item => types.includes(item.type)) || []
|
||||
HawkmoonUtility.sortArrayObjectsByName(items)
|
||||
return items
|
||||
}
|
||||
getWeapons() {
|
||||
let armes = []
|
||||
for (let arme of this.items) {
|
||||
@@ -94,60 +112,45 @@ export class HawkmoonActor extends Actor {
|
||||
armes.push(this.prepareArme(arme))
|
||||
}
|
||||
}
|
||||
HawkmoonUtility.sortArrayObjectsByName(armes)
|
||||
return armes
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getMonnaies() {
|
||||
return this.items.filter( it => it.type == "monnaie")
|
||||
return this.getItemSorted(["monnaie"])
|
||||
}
|
||||
|
||||
/* ----------------------- --------------------- */
|
||||
addMember( actorId) {
|
||||
let members = duplicate(this.system.members)
|
||||
members.push( {id: actorId} )
|
||||
this.update ({'system.members': members})
|
||||
}
|
||||
async removeMember(actorId) {
|
||||
let members = this.system.members.filter(it => it.id != actorId )
|
||||
this.update ({'system.members': members})
|
||||
}
|
||||
|
||||
/* ----------------------- --------------------- */
|
||||
getEquipments() {
|
||||
return this.items.filter(item => item.type == "equipement")
|
||||
return this.getItemSorted(["equipement"])
|
||||
}
|
||||
/* ----------------------- --------------------- */
|
||||
getArtefacts() {
|
||||
return this.items.filter(item => item.type == "artefact")
|
||||
return this.getItemSorted(["artefact"])
|
||||
}
|
||||
/* ----------------------- --------------------- */
|
||||
getMonnaies() {
|
||||
return this.items.filter(item => item.type == "monnaie")
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getArmors() {
|
||||
return this.items.filter(item => item.type == "protection")
|
||||
return this.getItemSorted(["protection"])
|
||||
}
|
||||
getHistoriques() {
|
||||
return this.items.filter(item => item.type == "historique")
|
||||
return this.getItemSorted(["historique"])
|
||||
}
|
||||
getProfils() {
|
||||
return this.items.filter(item => item.type == "profil")
|
||||
return this.getItemSorted(["profil"])
|
||||
}
|
||||
getTalents() {
|
||||
return this.items.filter(item => item.type == "talent")
|
||||
return this.getItemSorted(["talent"])
|
||||
}
|
||||
getRessources() {
|
||||
return this.items.filter(item => item.type == "ressource")
|
||||
return this.getItemSorted(["ressource"])
|
||||
}
|
||||
getContacts() {
|
||||
return this.items.filter(item => item.type == "contact")
|
||||
return this.getItemSorted(["contact"])
|
||||
}
|
||||
getMutations() {
|
||||
return this.getItemSorted(["mutation"])
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getSkills() {
|
||||
let comp = []
|
||||
for (let item of this.items) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
if (item.type == "competence") {
|
||||
item.system.attribut1total = item.system.niveau + (this.system.attributs[item.system.attribut1]?.value || 0)
|
||||
item.system.attribut2total = item.system.niveau + (this.system.attributs[item.system.attribut2]?.value || 0)
|
||||
@@ -163,22 +166,24 @@ export class HawkmoonActor extends Actor {
|
||||
comp.push(item)
|
||||
}
|
||||
}
|
||||
return comp.sort(function (a, b) {
|
||||
let fa = a.name.toLowerCase(),
|
||||
fb = b.name.toLowerCase();
|
||||
if (fa < fb) {
|
||||
return -1;
|
||||
}
|
||||
if (fa > fb) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
})
|
||||
HawkmoonUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
/* ----------------------- --------------------- */
|
||||
addMember(actorId) {
|
||||
let members = foundry.utils.duplicate(this.system.members)
|
||||
members.push({ id: actorId })
|
||||
this.update({ 'system.members': members })
|
||||
}
|
||||
async removeMember(actorId) {
|
||||
let members = this.system.members.filter(it => it.id != actorId)
|
||||
this.update({ 'system.members': members })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDefenseBase() {
|
||||
return Math.max(this.system.attributs.tre.value, this.system.attributs.pui.value)
|
||||
return Math.max(this.system.attributs.tre.value, this.system.attributs.adr.value)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -188,7 +193,7 @@ export class HawkmoonActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
getProtection() {
|
||||
let equipProtection = 0
|
||||
for(let armor in this.items) {
|
||||
for (let armor of this.items) {
|
||||
if (armor.type == "protection" && armor.system.equipped) {
|
||||
equipProtection += Number(armor.system.protection)
|
||||
}
|
||||
@@ -201,6 +206,20 @@ export class HawkmoonActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCombatValues() {
|
||||
if (this.type == "cellule") {
|
||||
return {
|
||||
initBase: 0,
|
||||
initTotal: 0,
|
||||
bonusDegats: 0,
|
||||
bonusDegatsTotal: 0,
|
||||
vitesseBase: 0,
|
||||
vitesseTotal: 0,
|
||||
defenseBase: 0,
|
||||
protection: 0,
|
||||
defenseTotal: 0
|
||||
}
|
||||
}
|
||||
|
||||
let combat = {
|
||||
initBase: this.system.attributs.adr.value,
|
||||
initTotal: this.system.attributs.adr.value + this.system.combat.initbonus,
|
||||
@@ -209,8 +228,8 @@ export class HawkmoonActor extends Actor {
|
||||
vitesseBase: this.getVitesseBase(),
|
||||
vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus,
|
||||
defenseBase: this.getDefenseBase(),
|
||||
protection : this.getProtection(),
|
||||
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + this.getProtection() - this.getTotalAdversite()
|
||||
protection: this.getProtection(),
|
||||
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + this.getProtection() - this.getTotalAdversite() + (this.system.combat.defensetotale ? 3 : 0)
|
||||
}
|
||||
return combat
|
||||
}
|
||||
@@ -229,26 +248,33 @@ export class HawkmoonActor extends Actor {
|
||||
|
||||
if (this.type == 'personnage') {
|
||||
let talentBonus = this.getVigueurBonus()
|
||||
let vigueur = Math.floor((this.system.attributs.pui.value + this.system.attributs.tre.value) / 2) + talentBonus
|
||||
let vigueur = Math.floor((this.system.attributs.pui.value + this.system.attributs.tre.value) / 2) + talentBonus + this.system.sante.vigueurmodifier
|
||||
if (vigueur != this.system.sante.vigueur) {
|
||||
this.update({ 'system.sante.vigueur': vigueur })
|
||||
}
|
||||
}
|
||||
|
||||
super.prepareDerivedData()
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_preUpdate(changed, options, user) {
|
||||
|
||||
if (changed?.system?.sante?.etat && changed?.system?.sante?.etat != this.system.sante.etat) {
|
||||
setTimeout(() => {
|
||||
this.processCombativite(changed.system.sante)
|
||||
}, 800)
|
||||
}
|
||||
super._preUpdate(changed, options, user);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_onUpdate(data, options, user) {
|
||||
super._onUpdate(data, options, user);
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getItemById(id) {
|
||||
let item = this.items.find(item => item.id == id);
|
||||
if (item) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
}
|
||||
return item;
|
||||
}
|
||||
@@ -281,7 +307,7 @@ export class HawkmoonActor extends Actor {
|
||||
checkAttribut(attribut, minLevel) {
|
||||
let attr = this.system.attributs.find(at => at.labelnorm == attribut.toLowerCase())
|
||||
if (attr && attr.value >= minLevel) {
|
||||
return { isValid: true, attr: duplicate(attr) }
|
||||
return { isValid: true, attr: foundry.utils.duplicate(attr) }
|
||||
}
|
||||
return { isValid: false }
|
||||
}
|
||||
@@ -289,11 +315,11 @@ export class HawkmoonActor extends Actor {
|
||||
checkAttributOrCompetenceLevel(compName, minLevel) {
|
||||
let comp = this.items.find(i => i.type == "competence" && i.name.toLowerCase() == compName.toLowerCase() && i.system.niveau >= minLevel)
|
||||
if (comp) {
|
||||
return { isValid: true, item: duplicate(comp) }
|
||||
return { isValid: true, item: foundry.utils.duplicate(comp) }
|
||||
} else {
|
||||
for (let attrKey in this.system.attributs) {
|
||||
if (this.system.attributs[attrKey].label.toLowerCase() == compName.toLowerCase() && this.system.attributs[attrKey].value >= minLevel) {
|
||||
return { isValid: true, item: duplicate(this.system.attributs[attrKey]) }
|
||||
return { isValid: true, item: foundry.utils.duplicate(this.system.attributs[attrKey]) }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -303,7 +329,7 @@ export class HawkmoonActor extends Actor {
|
||||
addCompetenceBonus(compName, bonus, baCost) {
|
||||
let comp = this.items.find(i => i.type == "competence" && i.name.toLowerCase() == compName.toLowerCase())
|
||||
if (comp) {
|
||||
comp = duplicate(comp)
|
||||
comp = foundry.utils.duplicate(comp)
|
||||
comp.system.bonus = bonus
|
||||
comp.system.baCost = baCost
|
||||
return { isValid: true, item: comp }
|
||||
@@ -382,13 +408,45 @@ export class HawkmoonActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonusDegats() {
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
changeEtatCombativite(value) {
|
||||
if (value === "vaincu") {
|
||||
value = 200
|
||||
}
|
||||
let sante = foundry.utils.duplicate(this.system.sante)
|
||||
sante.etat += Number(value)
|
||||
sante.etat = Math.max(sante.etat, 0)
|
||||
sante.etat = Math.min(sante.etat, this.system.sante.nbcombativite)
|
||||
this.update({ 'system.sante': sante })
|
||||
if (sante.etat == this.system.sante.nbcombativite) {
|
||||
ChatMessage.create({ content: `<strong>${this.name} est vaincu !</strong>` })
|
||||
}
|
||||
// Duplicated ! this.processCombativite(sante)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
processCombativite(sante) {
|
||||
sante = sante || foundry.utils.duplicate(this.system.sante)
|
||||
// Gestion des états affaibli et très affaibli
|
||||
if (sante.etat == this.system.sante.nbcombativite - 2 || sante.etat == this.system.sante.nbcombativite - 1) {
|
||||
if (sante.etat == this.system.sante.nbcombativite - 2 && this.items.find(item => item.type == "talent" && item.name.toLowerCase() == "encaissement")) {
|
||||
ChatMessage.create({ content: `<strong>${this.name} ne subit pas les 2 adversités rouge grâce à Encaissement. Pensez à les ajouter à la fin de la scène !</strong>` })
|
||||
} else if (sante.etat == this.system.sante.nbcombativite - 1 && this.items.find(item => item.type == "talent" && item.name.toLowerCase().includes("vaillant"))) {
|
||||
ChatMessage.create({ content: `<strong>${this.name} ne subit pas les 2 adversités rouge grâce à Vaillant. Pensez à les ajouter à la fin de la scène !</strong>` })
|
||||
} else {
|
||||
ChatMessage.create({ content: `<strong>${this.name} subit 2 adversités rouge !</strong>` })
|
||||
this.incDecAdversite("rouge", 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equipGear(equipmentId) {
|
||||
let item = this.items.find(item => item.id == equipmentId);
|
||||
if (item && item.system.data) {
|
||||
if (item?.system?.data) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
@@ -398,13 +456,13 @@ export class HawkmoonActor extends Actor {
|
||||
getSubActors() {
|
||||
let subActors = [];
|
||||
for (let id of this.system.subactors) {
|
||||
subActors.push(duplicate(game.actors.get(id)));
|
||||
subActors.push(foundry.utils.duplicate(game.actors.get(id)));
|
||||
}
|
||||
return subActors;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async addSubActor(subActorId) {
|
||||
let subActors = duplicate(this.system.subactors);
|
||||
let subActors = foundry.utils.duplicate(this.system.subactors);
|
||||
subActors.push(subActorId);
|
||||
await this.update({ 'system.subactors': subActors });
|
||||
}
|
||||
@@ -426,9 +484,10 @@ export class HawkmoonActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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] = Math.max(adversite[adv], 0)
|
||||
adversite[adv] = Math.min(adversite[adv], 20)
|
||||
this.update({ 'system.adversite': adversite })
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
@@ -437,34 +496,34 @@ export class HawkmoonActor extends Actor {
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.quantite + incDec
|
||||
newQ = Math.max(newQ, 0)
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeRichesse() {
|
||||
let valueSC = 0
|
||||
for(let monnaie of this.items) {
|
||||
for (let monnaie of this.items) {
|
||||
if (monnaie.type == "monnaie") {
|
||||
valueSC += Number(monnaie.system.prixsc) * Number(monnaie.system.quantite)
|
||||
valueSC += Number(monnaie.system.prixsc) * Number(monnaie.system.quantite)
|
||||
}
|
||||
}
|
||||
return HawkmoonUtility.computeMonnaieDetails( valueSC)
|
||||
return HawkmoonUtility.computeMonnaieDetails(valueSC)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeValeurEquipement() {
|
||||
let valueSC = 0
|
||||
for(let equip of this.items) {
|
||||
for (let equip of this.items) {
|
||||
if (equip.type == "equipement" || equip.type == "arme" || equip.type == "protection") {
|
||||
valueSC += Number(equip.system.prixsc) * Number(equip.system.quantite ?? 1)
|
||||
valueSC += (Number(equip.system.prixca) * Number(equip.system.quantite ?? 1)) * 20
|
||||
valueSC += (Number(equip.system.prixpo) * Number(equip.system.quantite ?? 1)) * 400
|
||||
valueSC += Number(equip.system.prixsc) * Number(equip.system.quantite ?? 1)
|
||||
valueSC += (Number(equip.system.prixca) * Number(equip.system.quantite ?? 1)) * 20
|
||||
valueSC += (Number(equip.system.prixpo) * Number(equip.system.quantite ?? 1)) * 400
|
||||
}
|
||||
}
|
||||
return HawkmoonUtility.computeMonnaieDetails( valueSC)
|
||||
return HawkmoonUtility.computeMonnaieDetails(valueSC)
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCompetence(compId) {
|
||||
return this.items.get(compId)
|
||||
@@ -473,7 +532,7 @@ export class HawkmoonActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async setPredilectionUsed(compId, predIdx) {
|
||||
let comp = this.items.get(compId)
|
||||
let pred = duplicate(comp.system.predilections)
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
pred[predIdx].used = true
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
|
||||
}
|
||||
@@ -484,18 +543,35 @@ export class HawkmoonActor extends Actor {
|
||||
return init || -1
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBestAttackValue() {
|
||||
let attackList = this.items.filter(item => (item.type == "arme" || item.type == "talent") && item.system.equipped)
|
||||
let maxOff = 0
|
||||
let bestArme
|
||||
for (let arme of attackList) {
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.system.totalOffensif > maxOff) {
|
||||
maxOff = arme.system.totalOffensif
|
||||
bestArme = foundry.utils.duplicate(arme)
|
||||
}
|
||||
}
|
||||
return bestArme
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBestDefenseValue() {
|
||||
let defenseList = this.items.filter(item => (item.type == "arme") && item.system.equipped)
|
||||
let maxDef = 0
|
||||
let bestArme
|
||||
for (let arme of defenseList) {
|
||||
if (arme.type == "arme" ) {
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.system.totalDefensif > maxDef) {
|
||||
maxDef = arme.system.totalDefensif
|
||||
bestArme = duplicate(arme)
|
||||
bestArme = foundry.utils.duplicate(arme)
|
||||
}
|
||||
}
|
||||
return bestArme
|
||||
@@ -510,7 +586,7 @@ export class HawkmoonActor extends Actor {
|
||||
for (let auto of talent.system.automations) {
|
||||
if (auto.eventtype === "prepare-roll") {
|
||||
if (auto.competence.toLowerCase() == competence.name.toLowerCase()) {
|
||||
talent = duplicate(talent)
|
||||
talent = foundry.utils.duplicate(talent)
|
||||
talent.system.bonus = auto.bonus
|
||||
talent.system.baCost = auto.baCost
|
||||
talents.push(talent)
|
||||
@@ -541,22 +617,34 @@ export class HawkmoonActor extends Actor {
|
||||
rollData.nbBA = this.system.bonneaventure.actuelle
|
||||
rollData.nbAdversites = this.getTotalAdversite()
|
||||
rollData.talents = []
|
||||
rollData.attrKey2 = "none"
|
||||
rollData.coupDevastateur = this.items.find(it => it.type == "talent" && it.name.toLowerCase() == "coup dévastateur" && !it.system.used)
|
||||
rollData.hasAmbidextre = this.items.find(it => it.type == "talent" && it.name.toLowerCase() == "ambidextre")
|
||||
rollData.hasFeinte = this.system.bonneaventure.actuelle > 0 && this.items.find(it => it.type == "talent" && it.name.toLowerCase() == "feinte")
|
||||
rollData.isMonte = this.system.combat.monte
|
||||
rollData.config = game.system.hawkmoon.config
|
||||
|
||||
if (attrKey) {
|
||||
rollData.attrKey = attrKey
|
||||
if (attrKey != "tochoose") {
|
||||
rollData.actionImg = "systems/fvtt-hawkmoon-cyd/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp"
|
||||
rollData.attr = duplicate(this.system.attributs[attrKey])
|
||||
rollData.attr = foundry.utils.duplicate(this.system.attributs[attrKey])
|
||||
}
|
||||
}
|
||||
if (compId) {
|
||||
rollData.competence = duplicate(this.items.get(compId) || {})
|
||||
rollData.maitrises = rollData.competence.system.predilections.filter(p => p.maitrise)
|
||||
rollData.competence = foundry.utils.duplicate(this.items.get(compId) || {})
|
||||
let maitrises = [{ key: "none", label: "Aucune" }]
|
||||
rollData.competence.system.predilections.forEach(function (item) {
|
||||
if (item.maitrise) {
|
||||
maitrises.push({ key: item.id, label: item.name });
|
||||
}
|
||||
})
|
||||
rollData.maitrises = maitrises // rollData.competence.system.predilections.filter(p => p.maitrise)
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
rollData.talents = this.searchRelevantTalents(rollData.competence)
|
||||
}
|
||||
if (compName) {
|
||||
rollData.competence = duplicate(this.items.find(item => item.name.toLowerCase() == compName.toLowerCase()) || {})
|
||||
rollData.competence = foundry.utils.duplicate(this.items.find(item => item.name.toLowerCase() == compName.toLowerCase()) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
return rollData
|
||||
@@ -564,8 +652,8 @@ export class HawkmoonActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollAttribut(attrKey, isInit = false) {
|
||||
let rollData = this.getCommonRollData(attrKey)
|
||||
rollData.multiplier = (isInit)? 1 : 2
|
||||
let rollData = this.getCommonRollData(attrKey)
|
||||
rollData.multiplier = (isInit) ? 1 : 2
|
||||
rollData.isInit = isInit
|
||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
@@ -593,26 +681,102 @@ export class HawkmoonActor extends Actor {
|
||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollAssommer() {
|
||||
let rollData = this.getCommonRollData("pui", undefined, "Filouterie")
|
||||
rollData.assomer = true
|
||||
rollData.conditionsCommunes = true
|
||||
HawkmoonUtility.updateWithTarget(rollData)
|
||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollCoupBas() {
|
||||
let rollData = this.getCommonRollData("pui", undefined, "Mêlée")
|
||||
rollData.coupBas = true
|
||||
rollData.conditionsCommunes = true
|
||||
HawkmoonUtility.updateWithTarget(rollData)
|
||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollImmobiliser() {
|
||||
let rollData = this.getCommonRollData("pui", undefined, "Mêlée")
|
||||
rollData.immobiliser = true
|
||||
rollData.conditionsCommunes = true
|
||||
rollData.cibleconsciente = true
|
||||
HawkmoonUtility.updateWithTarget(rollData)
|
||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollRepousser() {
|
||||
let rollData = this.getCommonRollData("pui", undefined, "Mêlée")
|
||||
rollData.repousser = true
|
||||
rollData.conditionsCommunes = true
|
||||
rollData.cibleconsciente = true
|
||||
HawkmoonUtility.updateWithTarget(rollData)
|
||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollDesengager() {
|
||||
let rollData = this.getCommonRollData("adr", undefined, "Mouvements")
|
||||
rollData.desengager = true
|
||||
rollData.conditionsCommunes = true
|
||||
HawkmoonUtility.updateWithTarget(rollData)
|
||||
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeDegats(armeId, targetVigueur = undefined) {
|
||||
async rollArmeDegats(armeId, targetVigueur = undefined, rollDataInput = undefined) {
|
||||
let arme = this.items.get(armeId)
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
console.log("DEGATS", arme)
|
||||
let roll = new Roll( "1d10+"+arme.system.totalDegats).roll({ async: false })
|
||||
console.log("DEGATS", arme, targetVigueur, rollDataInput)
|
||||
let roll
|
||||
let bonus = 0
|
||||
let bonus2 = 0
|
||||
|
||||
if (rollDataInput?.applyCoupDevastateur) {
|
||||
bonus2 = Math.floor(this.system.attributs.pui.value / 2)
|
||||
let talent = this.items.find(item => item.type == "talent" && item.name.toLowerCase() == "coup dévastateur")
|
||||
this.updateEmbeddedDocuments('Item', [{ _id: talent.id, 'system.used': true }])
|
||||
}
|
||||
|
||||
if (rollDataInput?.isHeroique) {
|
||||
if (rollDataInput?.attaqueCharge) {
|
||||
bonus = 5
|
||||
}
|
||||
if (rollDataInput?.chargeCavalerie) {
|
||||
bonus = 6
|
||||
}
|
||||
roll = await new Roll("2d10rr10+" + arme.system.totalDegats + "+" + bonus + "+" + bonus2).roll()
|
||||
} else {
|
||||
if (rollDataInput?.attaqueCharge) {
|
||||
bonus = 3
|
||||
}
|
||||
if (rollDataInput?.chargeCavalerie) {
|
||||
bonus = 4
|
||||
}
|
||||
roll = await new Roll("1d10+" + arme.system.totalDegats + "+" + bonus + "+" + bonus2).roll()
|
||||
}
|
||||
await HawkmoonUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
|
||||
let nbEtatPerdus = 0
|
||||
let nbEtatPerdus = 0
|
||||
if (targetVigueur) {
|
||||
nbEtatPerdus = Math.floor(roll.total / targetVigueur)
|
||||
}
|
||||
//console.log(roll)
|
||||
let rollData = {
|
||||
arme: arme,
|
||||
finalResult: roll.total,
|
||||
formula: roll.formula,
|
||||
alias: this.name,
|
||||
actorImg: this.img,
|
||||
actorId: this.id,
|
||||
defenderTokenId: rollDataInput?.defenderTokenId,
|
||||
actionImg: arme.img,
|
||||
targetVigueur: targetVigueur,
|
||||
nbEtatPerdus: nbEtatPerdus
|
||||
@@ -621,5 +785,9 @@ export class HawkmoonActor extends Actor {
|
||||
content: await renderTemplate(`systems/fvtt-hawkmoon-cyd/templates/chat-degats-result.html`, rollData)
|
||||
})
|
||||
|
||||
if (rollDataInput?.defenderTokenId && nbEtatPerdus) {
|
||||
HawkmoonUtility.applyCombativite(rollDataInput, nbEtatPerdus)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,10 +14,10 @@ export class HawkmoonAutomation {
|
||||
this.__objectTypes = { }
|
||||
|
||||
Object.entries(game.data.model.Actor).forEach(kv => {
|
||||
this.__objectTypes[kv[0]] = duplicate(kv[1])
|
||||
this.__objectTypes[kv[0]] = foundry.utils.duplicate(kv[1])
|
||||
})
|
||||
Object.entries(game.data.model.Item).forEach(kv => {
|
||||
this.__objectTypes[kv[0]] = duplicate(kv[1])
|
||||
this.__objectTypes[kv[0]] = foundry.utils.duplicate(kv[1])
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ import { HawkmoonUtility } from "./hawkmoon-utility.js";
|
||||
import { HawkmoonAutomation } from "./hawkmoon-automation.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const __ALLOWED_ITEM_CELLULE = { "talent": 1, "ressource": 1, "contact": 1}
|
||||
const __ALLOWED_ITEM_CELLULE = { "talent": 1, "ressource": 1, "contact": 1, "equipement": 1, "protection": 1, "artefact": 1, "arme": 1, "monnaie": 1 }
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class HawkmoonCelluleSheet extends ActorSheet {
|
||||
export class HawkmoonCelluleSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-hawkmoon-cyd", "sheet", "actor"],
|
||||
template: "systems/fvtt-hawkmoon-cyd/templates/cellule-sheet.html",
|
||||
width: 640,
|
||||
@@ -28,7 +28,7 @@ export class HawkmoonCelluleSheet extends ActorSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
@@ -41,15 +41,23 @@ export class HawkmoonCelluleSheet extends ActorSheet {
|
||||
system: objectData.system,
|
||||
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
||||
limited: this.object.limited,
|
||||
talents: duplicate(this.actor.getTalents() || {}),
|
||||
ressources: duplicate(this.actor.getRessources()),
|
||||
contacts: duplicate(this.actor.getContacts()),
|
||||
talents: foundry.utils.duplicate(this.actor.getTalents() || {}),
|
||||
ressources: foundry.utils.duplicate(this.actor.getRessources()),
|
||||
contacts: foundry.utils.duplicate(this.actor.getContacts()),
|
||||
members: this.getMembers(),
|
||||
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
|
||||
artefacts: foundry.utils.duplicate(this.actor.getArtefacts()),
|
||||
armes: foundry.utils.duplicate(this.actor.getWeapons()),
|
||||
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
|
||||
protections: foundry.utils.duplicate(this.actor.getArmors()),
|
||||
richesse: this.actor.computeRichesse(),
|
||||
valeurEquipement: this.actor.computeValeurEquipement(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
isGM: game.user.isGM
|
||||
isGM: game.user.isGM,
|
||||
config: game.system.hawkmoon.config
|
||||
}
|
||||
this.formData = formData;
|
||||
|
||||
@@ -87,7 +95,7 @@ export class HawkmoonCelluleSheet extends ActorSheet {
|
||||
let actorId = li.data("actor-id")
|
||||
this.actor.removeMember(actorId)
|
||||
})
|
||||
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
@@ -109,15 +117,15 @@ export class HawkmoonCelluleSheet extends ActorSheet {
|
||||
let value = ev.currentTarget.value
|
||||
this.actor.editItemField(itemId, itemType, itemField, dataType, value)
|
||||
})
|
||||
|
||||
html.find('.quantity-minus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity(li.data("item-id"), -1);
|
||||
});
|
||||
html.find('.quantity-plus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity(li.data("item-id"), +1);
|
||||
});
|
||||
html.find('.quantity-modify').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const value = Number($(event.currentTarget).data("quantite-value"))
|
||||
this.actor.incDecQuantity( li.data("item-id"), value );
|
||||
})
|
||||
html.find('.item-add').click((event) => {
|
||||
const itemType = $(event.currentTarget).data("type")
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||
})
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
@@ -128,7 +136,7 @@ export class HawkmoonCelluleSheet extends ActorSheet {
|
||||
/* -------------------------------------------- */
|
||||
async _onDropActor(event, dragData) {
|
||||
const actor = fromUuidSync(dragData.uuid)
|
||||
if (actor) {
|
||||
if (actor) {
|
||||
this.actor.addMember(actor.id)
|
||||
} else {
|
||||
ui.notifications.warn("Cet acteur n'a pas été trouvé.")
|
||||
@@ -148,7 +156,7 @@ export class HawkmoonCelluleSheet extends ActorSheet {
|
||||
super._onDropItem(event, dragData)
|
||||
return
|
||||
}
|
||||
ui.notifications("Ce type d'item n'est pas autorisé sur une Cellule.")
|
||||
ui.notification.info("Ce type d'item n'est pas autorisé sur une Cellule.")
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@ export class HawkmoonCombat extends Combat {
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const c = this.combatants.get(ids[cId]);
|
||||
//console.log("Init for combattant", c )
|
||||
for (let cId of ids) {
|
||||
const c = this.combatants.get(cId);
|
||||
console.log("Init for combattant", c, ids)
|
||||
let id = c._id || c.id
|
||||
let initValue = c.actor ? c.actor.getInitiativeScore() : 0
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initValue } ]);
|
||||
@@ -21,5 +21,4 @@ export class HawkmoonCombat extends Combat {
|
||||
_onUpdate(changed, options, userId) {
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
143
modules/hawkmoon-config.js
Normal file
143
modules/hawkmoon-config.js
Normal file
@@ -0,0 +1,143 @@
|
||||
export const HAWKMOON_CONFIG = {
|
||||
|
||||
optionsDifficulte: [
|
||||
{ key: "0", label: "Aucune/Inconnue" },
|
||||
{ key: "5", label: "Facile (5)" },
|
||||
{ key: "6", label: "(6)" },
|
||||
{ key: "7", label: "(7)" },
|
||||
{ key: "8", label: "(8)" },
|
||||
{ key: "9", label: "(9)" },
|
||||
{ key: "10", label: "Moyenne (10)" },
|
||||
{ key: "11", label: "(11)" },
|
||||
{ key: "12", label: "(12)" },
|
||||
{ key: "13", label: "(13)" },
|
||||
{ key: "14", label: "(14)" },
|
||||
{ key: "15", label: "Ardue (15)" },
|
||||
{ key: "16", label: "(16)" },
|
||||
{ key: "17", label: "(17)" },
|
||||
{ key: "18", label: "(18)" },
|
||||
{ key: "19", label: "(19)" },
|
||||
{ key: "20", label: "Hasardeuse (20)" },
|
||||
{ key: "21", label: "(21)" },
|
||||
{ key: "22", label: "(22)" },
|
||||
{ key: "23", label: "(23)" },
|
||||
{ key: "24", label: "(24)" },
|
||||
{ key: "25", label: "Insensée (25)" },
|
||||
{ key: "26", label: "(26)" },
|
||||
{ key: "27", label: "(27)" },
|
||||
{ key: "28", label: "(28)" },
|
||||
{ key: "29", label: "(29)" },
|
||||
{ key: "30", label: "Pure Folie (30)" }
|
||||
],
|
||||
optionsDistanceTir: [
|
||||
{ key: "porteecourte", label: "Courte ({protectionDefenseur}+5)" },
|
||||
{ key: "porteemoyenne", label: "Moyenne ({protectionDefenseur}+9)" },
|
||||
{ key: "porteelongue", label: "Longue ({protectionDefenseur}+14)" }
|
||||
],
|
||||
optionsBonusMalus: [
|
||||
{ key: "-10", label: "-10" },
|
||||
{ key: "-9", label: "-9" },
|
||||
{ key: "-8", label: "-8" },
|
||||
{ key: "-7", label: "-7" },
|
||||
{ key: "-6", label: "-6" },
|
||||
{ key: "-5", label: "-5" },
|
||||
{ key: "-4", label: "-4" },
|
||||
{ key: "-3", label: "-3" },
|
||||
{ key: "-2", label: "-2" },
|
||||
{ key: "-1", label: "-1" },
|
||||
{ key: "0", label: "0" },
|
||||
{ key: "1", label: "+1" },
|
||||
{ key: "2", label: "+2" },
|
||||
{ key: "3", label: "+3" },
|
||||
{ key: "4", label: "+4" },
|
||||
{ key: "5", label: "+5" },
|
||||
{ key: "6", label: "+6" },
|
||||
{ key: "7", label: "+7" },
|
||||
{ key: "8", label: "+8" },
|
||||
{ key: "9", label: "+9" },
|
||||
{ key: "10", label: "+10" }
|
||||
],
|
||||
optionsTailleCible: [
|
||||
{ key: "normal", label: "Normal (SD+0)" },
|
||||
{ key: "main", label: "Main (SD+10)" },
|
||||
{ key: "enfant", label: "Enfant (SD+3)" },
|
||||
{ key: "maison", label: "Maison (SD-10)" }
|
||||
],
|
||||
optionsCouvert: [
|
||||
{ key: "aucun", label: "Aucun" },
|
||||
{ key: "leger", label: "Léger (SD+5)" },
|
||||
{ key: "complet", label: "Quasi complet (SD+10)" }
|
||||
],
|
||||
optionsTireurDeplacement: [
|
||||
{ key: "immobile", label: "Immobile (SD+0)" },
|
||||
{ key: "lent", label: "Lent (SD+3)" },
|
||||
{ key: "rapide", label: "Rapide (SD+5)" }
|
||||
],
|
||||
optionsSoutiens: [
|
||||
{ key: "0", label: "Aucun" },
|
||||
{ key: "1", label: "Un soutien (+3)" },
|
||||
{ key: "2", label: "Deux soutiens (+4)" },
|
||||
{ key: "3", label: "Trois soutiens (+5)" }
|
||||
],
|
||||
optionsStatutResistant: [
|
||||
{ key: "commun", label: "Commun" },
|
||||
{ key: "clandestin", label: "Clandestin" },
|
||||
{ key: "insurge", label: "Insurgé" }
|
||||
],
|
||||
optionsTypeArme: [
|
||||
{key: "contact", label: "Arme de contact"},
|
||||
{key: "contactjet", label: "Arme de contact et de Jet"},
|
||||
{key: "jet", label: "Arme de Jet"},
|
||||
{key: "tir", label: "Arme de Tir"}
|
||||
],
|
||||
optionsArtefactBranche: [
|
||||
{key: "alchimie", label: "Alchimie"},
|
||||
{key: "biologie", label: "Biologie"},
|
||||
{key: "electricite", label: "Electricité"},
|
||||
{key: "mecanique", label: "Mécanique"},
|
||||
{key: "scienceesprit", label: "Science de l'Esprit"}
|
||||
],
|
||||
optionsArtefactBranche2: [
|
||||
{key: "none", label: "Aucune"},
|
||||
{key: "alchimie", label: "Alchimie"},
|
||||
{key: "biologie", label: "Biologie"},
|
||||
{key: "electricite", label: "Electricité"},
|
||||
{key: "mecanique", label: "Mécanique"},
|
||||
{key: "scienceesprit", label: "Science de l'Esprit"}
|
||||
],
|
||||
optionsTypeContact: [
|
||||
{key: "contact", label: "Contact"},
|
||||
{key: "allie", label: "Allié"}
|
||||
],
|
||||
optionsTypeMutation: [
|
||||
{key: "tares_communes", label: "Tares et Malformations communes"},
|
||||
{key: "evolutions_communes", label: "Evolutions communes"},
|
||||
{key: "tares_rares", label: "Tares et Malformations rares"},
|
||||
{key: "evolutions_rares", label: "Evolutions rares"},
|
||||
{key: "tares_majeures", label: "Tares et Maformations majeures"},
|
||||
{key: "evolutions_majeures", label: "Evolutions majeures"},
|
||||
{key: "tares_except", label: "Tares et Malformations exceptionnelles"},
|
||||
{key: "evolutions_except", label: "Evolutions exceptionnelles"}
|
||||
],
|
||||
optionsTypeTalent: [
|
||||
{key: "personnage", label: "Personnage"},
|
||||
{key: "cellule", label: "Cellule"},
|
||||
{key: "traitespece", label: "Trait d'espèce"}
|
||||
],
|
||||
optionsUseTalent: [
|
||||
{key: "permanent", label: "Permanent"},
|
||||
{key: "sceance", label: "Une fois par scéance"},
|
||||
{key: "scenario", label: "Une fois par scénario"},
|
||||
{key: "jour", label: "Une fois par jour"},
|
||||
{key: "unique", label: "Unique"}
|
||||
],
|
||||
optionsAutomationEvent: [
|
||||
{key: "on-drop", label: "Drop sur l'acteur"},
|
||||
{key: "prepare-roll", label: "Préparation d'un jet"},
|
||||
{key: "bonus-permanent", label: "Bonus permanent"}
|
||||
],
|
||||
optionsBonusPermanent: [
|
||||
{key: "vigueur", label: "Vigueur"},
|
||||
{key: "bonus-defensif", label: "Bonus au Seuil de Défense"}
|
||||
]
|
||||
}
|
||||
@@ -13,7 +13,7 @@ export class HawkmoonCreatureSheet extends HawkmoonActorSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-hawkmoon-cyd", "sheet", "actor"],
|
||||
template: "systems/fvtt-hawkmoon-cyd/templates/creature-sheet.html",
|
||||
width: 640,
|
||||
|
||||
@@ -22,7 +22,7 @@ export class HawkmoonTokenHud {
|
||||
|
||||
const hudData = { actor: actor }
|
||||
|
||||
const controlIconActions = html.find('.control-icon[data-action=combat]');
|
||||
const controlIconActions = $(html).find('.control-icon[data-action=combat]');
|
||||
// initiative
|
||||
await HawkmoonTokenHud._configureSubMenu(controlIconActions, 'systems/fvtt-hawkmoon-cyd/templates/hud-adversites.html', hudData,
|
||||
(event) => {
|
||||
@@ -34,7 +34,7 @@ export class HawkmoonTokenHud {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async addTokenHudExtensions(app, html, tokenId) {
|
||||
const controlIconCombat = html.find('.control-icon[data-action=combat]')
|
||||
const controlIconCombat = $(html).find('.control-icon[data-action=combat]')
|
||||
if (controlIconCombat.length>0 ) {
|
||||
HawkmoonTokenHud.addExtensionHud(app, html, tokenId);
|
||||
}
|
||||
@@ -42,11 +42,11 @@ export class HawkmoonTokenHud {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async _configureSubMenu(insertionPoint, template, hudData, onMenuItem) {
|
||||
const hud = $(await renderTemplate(template, hudData))
|
||||
const hud = $(await foundry.applications.handlebars.renderTemplate(template, hudData))
|
||||
const list = hud.find('div.hawkmoon-hud-list')
|
||||
|
||||
|
||||
HawkmoonTokenHud._toggleHudListActive(hud, list);
|
||||
|
||||
|
||||
hud.find('img.hawkmoon-hud-togglebutton').click(event => HawkmoonTokenHud._toggleHudListActive(hud, list));
|
||||
list.find('.hawkmoon-hud-adversite').click(onMenuItem);
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@ import { HawkmoonUtility } from "./hawkmoon-utility.js";
|
||||
* Extend the basic ItemSheet with some very simple modifications
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class HawkmoonItemSheet extends ItemSheet {
|
||||
export class HawkmoonItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-hawkmoon-cyd", "sheet", "item"],
|
||||
template: "systems/fvtt-hawkmoon-cyd/templates/item-sheet.html",
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
@@ -48,7 +48,7 @@ export class HawkmoonItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = duplicate(this.object)
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: this.id,
|
||||
@@ -64,7 +64,8 @@ export class HawkmoonItemSheet extends ItemSheet {
|
||||
owner: this.document.isOwner,
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
||||
mr: (this.object.type == 'specialisation'),
|
||||
isGM: game.user.isGM
|
||||
isGM: game.user.isGM,
|
||||
config: game.system.hawkmoon.config
|
||||
}
|
||||
|
||||
if ( objectData.type == "don") {
|
||||
@@ -89,7 +90,7 @@ export class HawkmoonItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
postItem() {
|
||||
let chatData = duplicate(HawkmoonUtility.data(this.item));
|
||||
let chatData = foundry.utils.duplicate(HawkmoonUtility.data(this.item));
|
||||
if (this.actor) {
|
||||
chatData.actor = { id: this.actor.id };
|
||||
}
|
||||
@@ -132,7 +133,7 @@ export class HawkmoonItemSheet extends ItemSheet {
|
||||
html.find('.edit-predilection').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].name = ev.currentTarget.value
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
@@ -140,70 +141,70 @@ export class HawkmoonItemSheet extends ItemSheet {
|
||||
html.find('.edit-predilection-description').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].description = ev.currentTarget.value
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
})
|
||||
html.find('.predilection-acquise').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].acquise = ev.currentTarget.checked
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
})
|
||||
html.find('.predilection-maitrise').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].maitrise = ev.currentTarget.checked
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
})
|
||||
html.find('.predilection-used').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].used = ev.currentTarget.checked
|
||||
pred[index].id = pred[index].id || randomID(16)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
html.find('#add-predilection').click(ev => {
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
pred.push( { name: "Nouvelle prédilection", id: randomID(16), used: false })
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.push( { name: "Nouvelle prédilection", id: randomID(16), used: false })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.delete-prediction').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = duplicate(this.object.system.predilections)
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.splice(index,1)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
|
||||
html.find('#add-automation').click(ev => {
|
||||
let autom = duplicate(this.object.system.automations)
|
||||
autom.push( { eventtype: "on-drop", name: "Automatisation 1", competence: "", minLevel: 0, id: randomID(16) })
|
||||
let autom = foundry.utils.duplicate(this.object.system.automations)
|
||||
autom.push( { eventtype: "on-drop", name: "Automatisation 1", bonusname: "vigueur", bonus: 0, competence: "", minLevel: 0, baCost: 0, id: randomID(16) })
|
||||
this.object.update( { 'system.automations': autom })
|
||||
})
|
||||
html.find('.delete-automation').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".automation-item")
|
||||
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)
|
||||
this.object.update( { 'system.automations': autom })
|
||||
})
|
||||
html.find('.automation-edit-field').change(ev => {
|
||||
let index = $(ev.currentTarget).data("automation-index")
|
||||
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].id = auto[index].id || randomID(16)
|
||||
this.object.update( { 'system.automations': auto })
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
|
||||
@@ -13,6 +13,7 @@ export const defaultItemImg = {
|
||||
artefact: "systems/fvtt-hawkmoon-cyd/assets/icons/artefact.webp",
|
||||
contact: "systems/fvtt-hawkmoon-cyd/assets/icons/contacts.webp",
|
||||
ressource: "systems/fvtt-hawkmoon-cyd/assets/icons/ressources.webp",
|
||||
mutation: "systems/fvtt-hawkmoon-cyd/assets/icons/mutation.webp",
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,7 @@ import { HawkmoonCombat } from "./hawkmoon-combat.js";
|
||||
import { HawkmoonItem } from "./hawkmoon-item.js";
|
||||
import { HawkmoonAutomation } from "./hawkmoon-automation.js";
|
||||
import { HawkmoonTokenHud } from "./hawkmoon-hud.js";
|
||||
import { HAWKMOON_CONFIG } from "./hawkmoon-config.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
@@ -32,7 +33,7 @@ Hooks.once("init", async function () {
|
||||
HawkmoonUtility.preloadHandlebarsTemplates()
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Set an initiative formula for the system
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "1d10",
|
||||
decimals: 1
|
||||
@@ -50,18 +51,19 @@ Hooks.once("init", async function () {
|
||||
CONFIG.Item.documentClass = HawkmoonItem
|
||||
game.system.hawkmoon = {
|
||||
HawkmoonUtility,
|
||||
HawkmoonAutomation
|
||||
HawkmoonAutomation,
|
||||
config : HAWKMOON_CONFIG
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register sheet application classes
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonActorSheet, { types: ["personnage"], makeDefault: true })
|
||||
Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||
Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonCelluleSheet, { types: ["cellule"], makeDefault: true });
|
||||
// Regster sheet application classes
|
||||
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonActorSheet, { types: ["personnage"], makeDefault: true })
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-hawkmoon-cyd", HawkmoonCelluleSheet, { types: ["cellule"], makeDefault: true });
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-hawkmoon-cyd", HawkmoonItemSheet, { makeDefault: true })
|
||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-hawkmoon-cyd", HawkmoonItemSheet, { makeDefault: true })
|
||||
|
||||
HawkmoonUtility.init()
|
||||
HawkmoonAutomation.init()
|
||||
@@ -83,28 +85,15 @@ function welcomeMessage() {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register world usage statistics
|
||||
function registerUsageCount(registerKey) {
|
||||
if (game.user.isGM) {
|
||||
game.settings.register(registerKey, "world-key", {
|
||||
name: "Unique world key",
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: "",
|
||||
type: String
|
||||
});
|
||||
|
||||
let worldKey = game.settings.get(registerKey, "world-key")
|
||||
if (worldKey == undefined || worldKey == "") {
|
||||
worldKey = randomID(32)
|
||||
game.settings.set(registerKey, "world-key", worldKey)
|
||||
async function importDefaultScene() {
|
||||
let exists = game.scenes.find(j => j.name == "Accueil");
|
||||
if (!exists) {
|
||||
const scenes = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.scenes")
|
||||
let newDocuments = scenes.filter(i => i.name == "Accueil");
|
||||
if (newDocuments) {
|
||||
await game.scenes.documentClass.create(newDocuments);
|
||||
game.scenes.find(i => i.name == "Accueil").activate();
|
||||
}
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,14 +113,16 @@ Hooks.once("ready", function () {
|
||||
});
|
||||
}
|
||||
|
||||
registerUsageCount('fvtt-hawkmoon-cyd')
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err=>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
|
||||
importDefaultScene()
|
||||
welcomeMessage()
|
||||
|
||||
// CSS patch for v9
|
||||
if (game.version) {
|
||||
let sidebar = document.getElementById("sidebar");
|
||||
sidebar.style.width = "min-content";
|
||||
}
|
||||
});
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -147,4 +138,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ export class HawkmoonRollDialog extends Dialog {
|
||||
static async create(actor, rollData ) {
|
||||
|
||||
let options = { classes: ["HawkmoonDialog"], width: 320, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-hawkmoon-cyd/templates/roll-dialog-generic.html', rollData);
|
||||
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-hawkmoon-cyd/templates/roll-dialog-generic.html', rollData);
|
||||
|
||||
return new HawkmoonRollDialog(actor, rollData, html, options );
|
||||
}
|
||||
@@ -16,16 +16,16 @@ export class HawkmoonRollDialog extends Dialog {
|
||||
let conf = {
|
||||
title: "Test de Capacité",
|
||||
content: html,
|
||||
buttons: {
|
||||
buttons: {
|
||||
rolld10: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Lancer 1d10",
|
||||
callback: () => { this.roll("d10") }
|
||||
callback: () => { this.roll("d10") }
|
||||
},
|
||||
rolld20: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Lancer 1d20",
|
||||
callback: () => { this.roll("d20") }
|
||||
callback: () => { this.roll("d20") }
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
@@ -56,25 +56,87 @@ export class HawkmoonRollDialog extends Dialog {
|
||||
function onLoad() {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
||||
|
||||
html.find('#modificateur').change(async (event) => {
|
||||
this.rollData.modificateur = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#difficulte').change(async (event) => {
|
||||
html.find('#difficulte').change( (event) => {
|
||||
console.log("Difficulte: " + event.currentTarget.value)
|
||||
this.rollData.difficulte = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#attrKey').change(async (event) => {
|
||||
this.rollData.attrKey = String(event.currentTarget.value)
|
||||
})
|
||||
})
|
||||
html.find('#attrKey2').change(async (event) => {
|
||||
this.rollData.attrKey2 = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#select-maitrise').change(async (event) => {
|
||||
this.rollData.maitriseId = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#competence-talents').change((event) => {
|
||||
this.rollData.selectedTalents = $('#competence-talents').val()
|
||||
this.rollData.selectedTalents = $('#competence-talents').val()
|
||||
})
|
||||
html.find('#taille-cible').change((event) => {
|
||||
this.rollData.tailleCible = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#tireur-deplacement').change((event) => {
|
||||
this.rollData.tireurDeplacement = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#cible-couvert').change((event) => {
|
||||
this.rollData.cibleCouvert = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#distance-tir').change((event) => {
|
||||
this.rollData.distanceTir = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#bonus-malus-context').change((event) => {
|
||||
this.rollData.bonusMalusContext = Number(event.currentTarget.value)
|
||||
this.rollData.bonusMalusContext = Number(event.currentTarget.value)
|
||||
})
|
||||
|
||||
html.find('#defenseur-au-sol').change((event) => {
|
||||
this.rollData.defenseurAuSol = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ambidextre-1').change((event) => {
|
||||
this.rollData.ambidextre1 = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ambidextre-2').change((event) => {
|
||||
this.rollData.ambidextre2 = event.currentTarget.checked
|
||||
})
|
||||
html.find('#attaque-monte').change((event) => {
|
||||
this.rollData.attqueMonte = event.currentTarget.checked
|
||||
})
|
||||
html.find('#defenseur-aveugle').change((event) => {
|
||||
this.rollData.defenseurAveugle = event.currentTarget.checked
|
||||
})
|
||||
html.find('#defenseur-de-dos').change((event) => {
|
||||
this.rollData.defenseurDeDos = event.currentTarget.checked
|
||||
})
|
||||
html.find('#defenseur-restreint').change((event) => {
|
||||
this.rollData.defenseurRestreint = event.currentTarget.checked
|
||||
})
|
||||
html.find('#defenseur-immobilise').change((event) => {
|
||||
this.rollData.defenseurImmobilise = event.currentTarget.checked
|
||||
})
|
||||
html.find('#attaque-charge').change((event) => {
|
||||
this.rollData.attaqueCharge = event.currentTarget.checked
|
||||
})
|
||||
html.find('#charge-cavalerie').change((event) => {
|
||||
this.rollData.chargeCavalerie = event.currentTarget.checked
|
||||
})
|
||||
html.find('#attaquants-multiple').change((event) => {
|
||||
this.rollData.attaquantsMultiples = event.currentTarget.checked
|
||||
})
|
||||
html.find('#soutiens').change((event) => {
|
||||
this.rollData.soutiens = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#feinte').change((event) => {
|
||||
this.rollData.feinte = event.currentTarget.checked
|
||||
})
|
||||
html.find('#contenir').change((event) => {
|
||||
this.rollData.contenir = event.currentTarget.checked
|
||||
})
|
||||
html.find('#attaque-desarme').change((event) => {
|
||||
this.rollData.attaqueDesarme = event.currentTarget.checked
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,12 @@
|
||||
import { HawkmoonCombat } from "./hawkmoon-combat.js";
|
||||
import { HawkmoonCommands } from "./hawkmoon-commands.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const __distanceDifficulte = { "porteecourte": 5, "porteemoyenne": 9, "porteelongue": 14 }
|
||||
const __tireurDeplacement = { immobile: 0, lent: 3, rapide: 5 }
|
||||
const __cibleCouvert = { aucun: 0, leger: 5, complet: 10 }
|
||||
const __tailleCible = { normal: 0, main: 10, enfant: 3, maison: -10 }
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class HawkmoonUtility {
|
||||
|
||||
@@ -9,8 +15,7 @@ export class HawkmoonUtility {
|
||||
/* -------------------------------------------- */
|
||||
static async init() {
|
||||
Hooks.on('renderChatLog', (log, html, data) => HawkmoonUtility.chatListeners(html))
|
||||
Hooks.on("getChatLogEntryContext", (html, options) => HawkmoonUtility.chatRollMenu(html, options))
|
||||
|
||||
Hooks.on("getChatMessageContextOptions", (html, options) => HawkmoonUtility.chatRollMenu(html, options))
|
||||
Hooks.on("getCombatTrackerEntryContext", (html, options) => {
|
||||
HawkmoonUtility.pushInitiativeOptions(html, options);
|
||||
})
|
||||
@@ -61,6 +66,13 @@ export class HawkmoonUtility {
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static sortArrayObjectsByName(myArray) {
|
||||
myArray.sort((a, b) => {
|
||||
return a.name.localeCompare(b.name);
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getModificateurOptions() {
|
||||
let opt = []
|
||||
@@ -101,6 +113,26 @@ export class HawkmoonUtility {
|
||||
let logoPause = "systems/fvtt-hawkmoon-cyd/assets/logos/" + game.settings.get("fvtt-hawkmoon-cyd", "hawkmoon-pause-logo") + ".webp"
|
||||
let logoImg = document.querySelector('#pause').children[0]
|
||||
logoImg.setAttribute('style', `content: url(${logoPause})`)
|
||||
|
||||
game.system.hawkmoon.config.listeNiveauSkill = this.createDirectOptionList(0, 10)
|
||||
game.system.hawkmoon.config.listeNiveauCreature = this.createDirectOptionList(0, 35)
|
||||
game.system.hawkmoon.config.listeNiveauContact = this.createDirectOptionList(1, 3)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createDirectOptionList(min, max) {
|
||||
let options = {};
|
||||
for (let i = min; i <= max; i++) {
|
||||
options[`${i}`] = `${i}`;
|
||||
}
|
||||
return options;
|
||||
}
|
||||
static createArrayOptionList(min, max) {
|
||||
let options = [];
|
||||
for (let i = min; i <= max; i++) {
|
||||
options.push({ key: `${i}`, label: `${i}` });
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -122,24 +154,33 @@ export class HawkmoonUtility {
|
||||
/* -------------------------------------------- */
|
||||
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 messageId = HawkmoonUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "hawkmoon-roll")
|
||||
let actor = this.getActorFromRollData(rollData)
|
||||
let actor = HawkmoonUtility.getActorFromRollData(rollData)
|
||||
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
|
||||
rollData.competence = duplicate(actor.getCompetence(rollData.competence._id))
|
||||
rollData.competence = foundry.utils.duplicate(actor.getCompetence(rollData.competence._id))
|
||||
HawkmoonUtility.rollHawkmoon(rollData)
|
||||
})
|
||||
|
||||
html.on("click", '.roll-chat-degat', async event => {
|
||||
$(html).on("click", '.roll-chat-degat', async event => {
|
||||
let messageId = HawkmoonUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "hawkmoon-roll")
|
||||
let actor = this.getActorFromRollData(rollData)
|
||||
actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur)
|
||||
let actor = HawkmoonUtility.getActorFromRollData(rollData)
|
||||
actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur, rollData)
|
||||
})
|
||||
$(html).on("click", '.roll-chat-degat-devastateur', async event => {
|
||||
let messageId = HawkmoonUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "hawkmoon-roll")
|
||||
let actor = HawkmoonUtility.getActorFromRollData(rollData)
|
||||
rollData.applyCoupDevastateur = true
|
||||
actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur, rollData)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -150,13 +191,11 @@ export class HawkmoonUtility {
|
||||
'systems/fvtt-hawkmoon-cyd/templates/partial-item-header.html',
|
||||
'systems/fvtt-hawkmoon-cyd/templates/partial-item-description.html',
|
||||
'systems/fvtt-hawkmoon-cyd/templates/partial-item-nav.html',
|
||||
'systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau.html',
|
||||
'systems/fvtt-hawkmoon-cyd/templates/partial-item-prix.html',
|
||||
'systems/fvtt-hawkmoon-cyd/templates/partial-sante-etat.html',
|
||||
'systems/fvtt-hawkmoon-cyd/templates/partial-automation.html',
|
||||
'systems/fvtt-hawkmoon-cyd/templates/hud-adversites.html',
|
||||
]
|
||||
return loadTemplates(templatePaths);
|
||||
return foundry.applications.handlebars.loadTemplates(templatePaths);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -233,30 +272,19 @@ export class HawkmoonUtility {
|
||||
|
||||
let id = rollData.rollId;
|
||||
let oldRollData = this.rollDataStore[id] || {};
|
||||
let newRollData = mergeObject(oldRollData, rollData);
|
||||
let newRollData = foundry.utils.mergeObject(oldRollData, rollData);
|
||||
this.rollDataStore[id] = newRollData;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static saveRollData(rollData) {
|
||||
game.socket.emit("system.fvtt-hawkmoon-cyd", {
|
||||
name: "msg_update_roll", data: rollData
|
||||
}); // Notify all other clients of the roll
|
||||
this.updateRollData(rollData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getRollData(id) {
|
||||
return this.rollDataStore[id];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static onSocketMesssage(msg) {
|
||||
//console.log("SOCKET MESSAGE", msg.name, game.user.character.id, msg.data.defenderId);
|
||||
if (msg.name == "msg_update_defense_state") {
|
||||
this.updateDefenseState(msg.data.defenderId, msg.data.rollId);
|
||||
}
|
||||
if (msg.name == "msg_update_roll") {
|
||||
this.updateRollData(msg.data);
|
||||
if (msg.msg == "msg_apply_combativite") {
|
||||
let defender = game.canvas.tokens.get(msg.data.defenderTokenId)?.actor
|
||||
if (defender) {
|
||||
defender.changeEtatCombativite(msg.data.value)
|
||||
} else {
|
||||
console.warn("HawkmoonUtility.onSocketMesssage : Impossible de trouver le token pour appliquer la combativité", msg.defenderTokenId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,10 +318,10 @@ export class HawkmoonUtility {
|
||||
switch (rollMode) {
|
||||
case "blindroll": //GM only
|
||||
blind = true;
|
||||
case "gmroll": //GM + rolling player
|
||||
case "gmroll": // GM + rolling player
|
||||
whisper = this.getUsers(user => user.isGM);
|
||||
break;
|
||||
case "roll": //everybody
|
||||
case "roll": // everybody
|
||||
whisper = this.getUsers(user => user.active);
|
||||
break;
|
||||
case "selfroll":
|
||||
@@ -308,13 +336,13 @@ export class HawkmoonUtility {
|
||||
/* -------------------------------------------- */
|
||||
static computeMonnaieDetails(valueSC) {
|
||||
let po = Math.floor(valueSC / 400)
|
||||
let pa = Math.floor((valueSC - (po*400)) / 20)
|
||||
let sc = valueSC - (po*400) - (pa*20)
|
||||
let pa = Math.floor((valueSC - (po * 400)) / 20)
|
||||
let sc = valueSC - (po * 400) - (pa * 20)
|
||||
return {
|
||||
po: po, pa: pa, sc: sc, valueSC: valueSC
|
||||
po, pa, sc, valueSC
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static computeResult(rollData) {
|
||||
rollData.diceResult = rollData.roll.terms[0].results[0].result
|
||||
@@ -330,15 +358,28 @@ export class HawkmoonUtility {
|
||||
}
|
||||
}
|
||||
|
||||
//console.log("Result : ", rollData)
|
||||
//console.log("Result : ", rollData
|
||||
this.computeResultQuality(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static computeResultQuality(rollData) {
|
||||
if (rollData.difficulte > 0 && !rollData.isDramatique) {
|
||||
rollData.isSuccess = (rollData.finalResult >= rollData.difficulte)
|
||||
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10)
|
||||
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyCombativite(rollData, value) {
|
||||
if (game.user.isGM) {
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
defender.changeEtatCombativite(value)
|
||||
} else {
|
||||
game.socket.emit("system.fvtt-hawkmoon-cyd", { msg: "msg_apply_combativite", data: { defenderTokenId: rollData.defenderTokenId, value } });
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static async rollHawkmoon(rollData) {
|
||||
|
||||
@@ -348,7 +389,10 @@ export class HawkmoonUtility {
|
||||
}
|
||||
if (!rollData.attr) {
|
||||
rollData.actionImg = "systems/fvtt-hawkmoon-cyd/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
|
||||
rollData.attr = duplicate(actor.system.attributs[rollData.attrKey])
|
||||
rollData.attr = foundry.utils.duplicate(actor.system.attributs[rollData.attrKey])
|
||||
}
|
||||
if (rollData.attrKey2 != "none") {
|
||||
rollData.attr2 = foundry.utils.duplicate(actor.system.attributs[rollData.attrKey2])
|
||||
}
|
||||
|
||||
if (rollData.maitriseId != "none") {
|
||||
@@ -360,7 +404,7 @@ export class HawkmoonUtility {
|
||||
|
||||
//console.log("BEFORE COMP", rollData)
|
||||
if (rollData.competence) {
|
||||
rollData.predilections = duplicate(rollData.competence.system.predilections.filter(pred => pred.acquise && !pred.maitrise && !pred.used) || [])
|
||||
rollData.predilections = foundry.utils.duplicate(rollData.competence.system.predilections || [])
|
||||
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
|
||||
rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.system.niveau}+${rollData.modificateur}+${compmod}`
|
||||
|
||||
@@ -382,10 +426,58 @@ export class HawkmoonUtility {
|
||||
}
|
||||
}
|
||||
rollData.diceFormula += `+${rollData.bonusMalusContext}`
|
||||
} else if (rollData.attr2) {
|
||||
rollData.diceFormula += `+${rollData.attr.value}+${rollData.attr2.value}+${rollData.modificateur}+${rollData.bonusMalusContext}`
|
||||
} else {
|
||||
rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}+${rollData.bonusMalusContext}`
|
||||
}
|
||||
|
||||
// Bonus arme naturelle en défense
|
||||
if (rollData.bonusArmeNaturelle) {
|
||||
rollData.diceFormula += `+${rollData.bonusArmeNaturelle}`
|
||||
}
|
||||
if (rollData.attaquantsMultiples) {
|
||||
rollData.diceFormula += `+3`
|
||||
}
|
||||
if (rollData.hasAmbidextre) {
|
||||
if (rollData.ambidextre1) {
|
||||
rollData.diceFormula += `-3`
|
||||
} else if (rollData.ambidextre2) {
|
||||
rollData.diceFormula += `-6`
|
||||
}
|
||||
}
|
||||
if (rollData.defenseurAuSol) {
|
||||
rollData.diceFormula += `+3`
|
||||
}
|
||||
if (rollData.defenseurAveugle) {
|
||||
rollData.diceFormula += `+10`
|
||||
}
|
||||
if (rollData.defenseurDeDos) {
|
||||
rollData.diceFormula += `+5`
|
||||
}
|
||||
if (rollData.defenseurRestreint) {
|
||||
rollData.diceFormula += `+3`
|
||||
}
|
||||
if (rollData.defenseurImmobilise) {
|
||||
rollData.diceFormula += `+5`
|
||||
}
|
||||
if (rollData.soutiens > 0) { // 1 soutien = +3, 2 soutiens = +4, 3 soutiens = +5
|
||||
rollData.diceFormula += `+${rollData.soutiens + 2}`
|
||||
}
|
||||
|
||||
if (rollData.arme?.system.isDistance) {
|
||||
rollData.difficulte = __distanceDifficulte[rollData.distanceTir]
|
||||
rollData.difficulte += __tireurDeplacement[rollData.tireurDeplacement]
|
||||
rollData.difficulte += __cibleCouvert[rollData.cibleCouvert]
|
||||
rollData.difficulte += __tailleCible[rollData.tailleCible]
|
||||
rollData.difficulte += rollData.cibleDeplace ? 3 : 0
|
||||
rollData.difficulte += rollData.cibleCaC ? 3 : 0
|
||||
rollData.difficulte += rollData.protectionDefenseur
|
||||
}
|
||||
if (rollData.attaqueDesarme) {
|
||||
rollData.difficulte += 10
|
||||
}
|
||||
|
||||
// Ajout adversités
|
||||
rollData.diceFormula += `-${rollData.nbAdversites}`
|
||||
|
||||
@@ -393,9 +485,12 @@ export class HawkmoonUtility {
|
||||
rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}`
|
||||
}
|
||||
|
||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
// Gestion de la feinte éventuelle
|
||||
rollData.nbCombativitePerdu = 1
|
||||
|
||||
let myRoll = await new Roll(rollData.diceFormula).roll()
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.roll = myRoll
|
||||
rollData.roll = foundry.utils.duplicate(myRoll)
|
||||
console.log(">>>> ", myRoll)
|
||||
|
||||
rollData.finalResult = myRoll.total
|
||||
@@ -403,34 +498,66 @@ export class HawkmoonUtility {
|
||||
if (rollData.isInit) {
|
||||
actor.setFlag("world", "last-initiative", rollData.finalResult)
|
||||
}
|
||||
if (rollData.feinte) {
|
||||
actor.changeBonneAventure(-1)
|
||||
if (rollData.isHeroique) {
|
||||
rollData.nbCombativitePerdu = "vaincu"
|
||||
} else if (rollData.isSuccess) {
|
||||
rollData.nbCombativitePerdu = 2
|
||||
}
|
||||
}
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-hawkmoon-cyd/templates/chat-generic-result.html`, rollData)
|
||||
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-hawkmoon-cyd/templates/chat-generic-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
if ((rollData.coupBas || rollData.arme) && rollData.isSuccess && rollData.defenderTokenId) {
|
||||
this.applyCombativite(rollData, rollData.nbCombativitePerdu)
|
||||
}
|
||||
if (rollData.coupBas && rollData.isSuccess && rollData.defenderTokenId) {
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
defender.incDecAdversite("bleue", -2)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getCombativiteList(nbActivite) {
|
||||
let list = [{ value: String(0), label: "Combatif" }]
|
||||
for (let i = 1; i < nbActivite - 2; i++) {
|
||||
list.push({ value: String(i), label: "Eprouvé " + i })
|
||||
}
|
||||
list[nbActivite - 2] = { value: String(nbActivite - 2), label: "Affaibli" }
|
||||
list[nbActivite - 1] = { value: String(nbActivite - 1), label: "Très Affaibli" }
|
||||
list[nbActivite] = { value: String(nbActivite), label: "Vaincu" }
|
||||
return list
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async bonusRollHawkmoon(rollData) {
|
||||
rollData.bonusFormula = rollData.addedBonus
|
||||
console.log("Bonus Roll Hawkmoon", rollData.bonusFormula)
|
||||
|
||||
let bonusRoll = new Roll(rollData.bonusFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
|
||||
rollData.bonusRoll = bonusRoll
|
||||
if (!Number(rollData.bonusFormula)) {
|
||||
let bonusRoll = await new Roll(rollData.bonusFormula).roll()
|
||||
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
|
||||
rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)
|
||||
rollData.finalResult += Number(rollData.bonusRoll.total)
|
||||
} else {
|
||||
rollData.finalResult += Number(rollData.bonusFormula)
|
||||
console.log("Bonus Roll Hawkmoon 2", rollData.finalResult)
|
||||
}
|
||||
|
||||
rollData.finalResult += rollData.bonusRoll.total
|
||||
|
||||
this.computeResult(rollData)
|
||||
this.computeResultQuality(rollData)
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-hawkmoon-cyd/templates/chat-generic-result.html`, rollData)
|
||||
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-hawkmoon-cyd/templates/chat-generic-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getUsers(filter) {
|
||||
return game.users.filter(filter).map(user => user.data._id);
|
||||
return game.users.filter(filter).map(user => user._id);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@@ -450,7 +577,7 @@ export class HawkmoonUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static blindMessageToGM(chatOptions) {
|
||||
let chatGM = duplicate(chatOptions);
|
||||
let chatGM = foundry.utils.duplicate(chatOptions);
|
||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
||||
console.log("blindMessageToGM", chatGM);
|
||||
@@ -514,13 +641,30 @@ export class HawkmoonUtility {
|
||||
/* -------------------------------------------- */
|
||||
static getBasicRollData() {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollId: foundry.utils.randomID(16),
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
modificateursOptions: this.getModificateurOptions(),
|
||||
pointAmeOptions: this.getPointAmeOptions(),
|
||||
difficulte: 0,
|
||||
modificateur: 0,
|
||||
bonusMalusContext: 0
|
||||
bonusMalusContext: 0,
|
||||
bonusArmeNaturelle: 0,
|
||||
defenseurAveugle: false,
|
||||
defenseurDeDos: false,
|
||||
defenseurAuSol: false,
|
||||
defenseurRestreint: false,
|
||||
defenseurImmobilise: false,
|
||||
tailleCible: "normal",
|
||||
tireurDeplacement: "immobile",
|
||||
cibleCouvert: "aucun",
|
||||
distanceTir: "porteemoyenne",
|
||||
attaqueCharge: false,
|
||||
attaqueDesarme: false,
|
||||
attaqueAmbidextre1: false,
|
||||
attaqueAmbidextre2: false,
|
||||
chargeCavalerie: false,
|
||||
contenir: false,
|
||||
soutiens: 0
|
||||
}
|
||||
return rollData
|
||||
}
|
||||
@@ -532,9 +676,26 @@ export class HawkmoonUtility {
|
||||
rollData.defenderTokenId = target.id
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
rollData.armeDefense = defender.getBestDefenseValue()
|
||||
rollData.armeAttaqueDefenseur = defender.getBestAttackValue()
|
||||
rollData.targetVigueur = defender.getVigueur()
|
||||
if (rollData.armeDefense) {
|
||||
rollData.protectionDefenseur = defender.getProtection()
|
||||
if (rollData.immobiliser || rollData.repousser) {
|
||||
let combatValues = defender.getCombatValues()
|
||||
rollData.difficulte = combatValues.defenseTotal + (rollData.armeDefense && rollData.cibleconsciente ? 5 : 0)
|
||||
} else if (rollData.coupBas) {
|
||||
let combatValues = defender.getCombatValues()
|
||||
rollData.difficulte = combatValues.defenseTotal
|
||||
} else if (rollData.assomer) {
|
||||
rollData.difficulte = 3 + (defender.system.attributs.tre.value * 2)
|
||||
} else if (rollData.desengager) {
|
||||
rollData.difficulte = rollData.armeAttaqueDefenseur?.system?.totalOffensif || 0;
|
||||
} else if (rollData.armeDefense) {
|
||||
rollData.difficulte = rollData.armeDefense.system.totalDefensif
|
||||
if (!rollData.desengager && !rollData.arme.system.armenaturelle && !rollData.arme.system.armefortune) {
|
||||
if (rollData.armeDefense.system.armenaturelle || rollData.armeDefense.system.armefortune) {
|
||||
rollData.bonusArmeNaturelle = 3
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.")
|
||||
}
|
||||
@@ -548,11 +709,11 @@ export class HawkmoonUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyBonneAventureRoll(li, changed, addedBonus) {
|
||||
let msgId = li.data("message-id")
|
||||
let msgId = $(li).data("message-id")
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "hawkmoon-roll")
|
||||
let actor = this.getActorFromRollData(rollData)
|
||||
let actor = HawkmoonUtility.getActorFromRollData(rollData)
|
||||
actor.changeBonneAventure(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus de Points d'Aventure"
|
||||
@@ -567,11 +728,11 @@ export class HawkmoonUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyEclatRoll(li, changed, addedBonus) {
|
||||
let msgId = li.data("message-id")
|
||||
let msgId = $(li).data("message-id")
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "hawkmoon-roll")
|
||||
let actor = this.getActorFromRollData(rollData)
|
||||
let actor = HawkmoonUtility.getActorFromRollData(rollData)
|
||||
actor.changeEclat(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus d'Eclat"
|
||||
@@ -588,15 +749,15 @@ export class HawkmoonUtility {
|
||||
static chatRollMenu(html, options) {
|
||||
let canApply = li => canvas.tokens.controlled.length && li.find(".hawkmoon-roll").length
|
||||
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", "hawkmoon-roll")
|
||||
let actor = this.getActorFromRollData(rollData)
|
||||
let actor = HawkmoonUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0)
|
||||
}
|
||||
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", "hawkmoon-roll")
|
||||
let actor = this.getActorFromRollData(rollData)
|
||||
let actor = HawkmoonUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0)
|
||||
}
|
||||
options.push(
|
||||
@@ -620,7 +781,7 @@ export class HawkmoonUtility {
|
||||
name: "Relancer le dé (1 point d'Eclat)",
|
||||
icon: "<i class='fas fa-user-plus'></i>",
|
||||
condition: canApply && canApplyPE,
|
||||
callback: li => HawkmoonUtility.applyEclatRoll(li, -3, "reroll")
|
||||
callback: li => HawkmoonUtility.applyEclatRoll(li, -1, "reroll")
|
||||
}
|
||||
)
|
||||
return options
|
||||
@@ -629,11 +790,11 @@ export class HawkmoonUtility {
|
||||
/* -------------------------------------------- */
|
||||
static async confirmDelete(actorSheet, li) {
|
||||
let itemId = li.data("item-id");
|
||||
let msgTxt = "<p>Are you sure to remove this Item ?";
|
||||
let msgTxt = "<p>Etes vous certain de vouloir supprimer cet item ?";
|
||||
let buttons = {
|
||||
delete: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Yes, remove it",
|
||||
label: "Oui !",
|
||||
callback: () => {
|
||||
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||
li.slideUp(200, () => actorSheet.render(false));
|
||||
@@ -641,12 +802,12 @@ export class HawkmoonUtility {
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: "Cancel"
|
||||
label: "Non"
|
||||
}
|
||||
}
|
||||
msgTxt += "</p>";
|
||||
let d = new Dialog({
|
||||
title: "Confirm removal",
|
||||
title: "Confirmer la suppression",
|
||||
content: msgTxt,
|
||||
buttons: buttons,
|
||||
default: "cancel"
|
||||
@@ -665,7 +826,6 @@ export class HawkmoonUtility {
|
||||
console.log(entryData)
|
||||
htmlTab += `<tr><td>@UUID[Compendium.${compName}.${entryData._id}]{${entryData.name}}</td>`
|
||||
htmlTab += `<td>${entryData.system.description}</td>`;
|
||||
//htmlTab += `<td>${entryData.system.resumebonus}</td>`;
|
||||
htmlTab += "</tr>\n";
|
||||
}
|
||||
htmlTab += "</table>";
|
||||
|
||||
BIN
packs/aides-de-jeu/000276.ldb
Normal file
BIN
packs/aides-de-jeu/000276.ldb
Normal file
Binary file not shown.
0
packs/aides-de-jeu/000311.log
Normal file
0
packs/aides-de-jeu/000311.log
Normal file
1
packs/aides-de-jeu/CURRENT
Normal file
1
packs/aides-de-jeu/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000309
|
||||
0
packs/aides-de-jeu/LOCK
Normal file
0
packs/aides-de-jeu/LOCK
Normal file
8
packs/aides-de-jeu/LOG
Normal file
8
packs/aides-de-jeu/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/08/24-16:39:04.800687 7f99ca7fc6c0 Recovering log #307
|
||||
2025/08/24-16:39:04.811571 7f99ca7fc6c0 Delete type=3 #305
|
||||
2025/08/24-16:39:04.811645 7f99ca7fc6c0 Delete type=0 #307
|
||||
2025/08/24-16:59:15.773185 7f99c8ff96c0 Level-0 table #312: started
|
||||
2025/08/24-16:59:15.773255 7f99c8ff96c0 Level-0 table #312: 0 bytes OK
|
||||
2025/08/24-16:59:15.779965 7f99c8ff96c0 Delete type=0 #310
|
||||
2025/08/24-16:59:15.786903 7f99c8ff96c0 Manual compaction at level-0 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.786956 7f99c8ff96c0 Manual compaction at level-1 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
||||
8
packs/aides-de-jeu/LOG.old
Normal file
8
packs/aides-de-jeu/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/02-22:46:22.187484 7f0798bfa6c0 Recovering log #303
|
||||
2025/07/02-22:46:22.198111 7f0798bfa6c0 Delete type=3 #301
|
||||
2025/07/02-22:46:22.198158 7f0798bfa6c0 Delete type=0 #303
|
||||
2025/07/02-22:48:09.734542 7f07923ff6c0 Level-0 table #308: started
|
||||
2025/07/02-22:48:09.734569 7f07923ff6c0 Level-0 table #308: 0 bytes OK
|
||||
2025/07/02-22:48:09.744356 7f07923ff6c0 Delete type=0 #306
|
||||
2025/07/02-22:48:09.791085 7f07923ff6c0 Manual compaction at level-0 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.791154 7f07923ff6c0 Manual compaction at level-1 from '!journal!MUbViCE2PkVxlzqe' @ 72057594037927935 : 1 .. '!journal.pages!gVybbv17TFY8o3Y4.fQidyqfF1TbsZKHM' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/aides-de-jeu/MANIFEST-000309
Normal file
BIN
packs/aides-de-jeu/MANIFEST-000309
Normal file
Binary file not shown.
BIN
packs/armes/000275.ldb
Normal file
BIN
packs/armes/000275.ldb
Normal file
Binary file not shown.
0
packs/armes/000310.log
Normal file
0
packs/armes/000310.log
Normal file
1
packs/armes/CURRENT
Normal file
1
packs/armes/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000308
|
||||
0
packs/armes/LOCK
Normal file
0
packs/armes/LOCK
Normal file
8
packs/armes/LOG
Normal file
8
packs/armes/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/08/24-16:39:04.657736 7f99ca7fc6c0 Recovering log #306
|
||||
2025/08/24-16:39:04.668479 7f99ca7fc6c0 Delete type=3 #304
|
||||
2025/08/24-16:39:04.668567 7f99ca7fc6c0 Delete type=0 #306
|
||||
2025/08/24-16:59:15.720000 7f99c8ff96c0 Level-0 table #311: started
|
||||
2025/08/24-16:59:15.720030 7f99c8ff96c0 Level-0 table #311: 0 bytes OK
|
||||
2025/08/24-16:59:15.726074 7f99c8ff96c0 Delete type=0 #309
|
||||
2025/08/24-16:59:15.733124 7f99c8ff96c0 Manual compaction at level-0 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.733174 7f99c8ff96c0 Manual compaction at level-1 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
||||
8
packs/armes/LOG.old
Normal file
8
packs/armes/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/02-22:46:22.075956 7f07937fe6c0 Recovering log #302
|
||||
2025/07/02-22:46:22.086980 7f07937fe6c0 Delete type=3 #300
|
||||
2025/07/02-22:46:22.087033 7f07937fe6c0 Delete type=0 #302
|
||||
2025/07/02-22:48:09.675327 7f07923ff6c0 Level-0 table #307: started
|
||||
2025/07/02-22:48:09.675362 7f07923ff6c0 Level-0 table #307: 0 bytes OK
|
||||
2025/07/02-22:48:09.686702 7f07923ff6c0 Delete type=0 #305
|
||||
2025/07/02-22:48:09.686958 7f07923ff6c0 Manual compaction at level-0 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.686996 7f07923ff6c0 Manual compaction at level-1 from '!items!0fit7HelSjaFtXcW' @ 72057594037927935 : 1 .. '!items!wxrzP3NyiHiYnAMJ' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/armes/MANIFEST-000308
Normal file
BIN
packs/armes/MANIFEST-000308
Normal file
Binary file not shown.
BIN
packs/competences-creatures/000275.ldb
Normal file
BIN
packs/competences-creatures/000275.ldb
Normal file
Binary file not shown.
0
packs/competences-creatures/000310.log
Normal file
0
packs/competences-creatures/000310.log
Normal file
1
packs/competences-creatures/CURRENT
Normal file
1
packs/competences-creatures/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000308
|
||||
0
packs/competences-creatures/LOCK
Normal file
0
packs/competences-creatures/LOCK
Normal file
8
packs/competences-creatures/LOG
Normal file
8
packs/competences-creatures/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/08/24-16:39:04.627677 7f99c97fa6c0 Recovering log #306
|
||||
2025/08/24-16:39:04.637852 7f99c97fa6c0 Delete type=3 #304
|
||||
2025/08/24-16:39:04.637963 7f99c97fa6c0 Delete type=0 #306
|
||||
2025/08/24-16:59:15.678161 7f99c8ff96c0 Level-0 table #311: started
|
||||
2025/08/24-16:59:15.678292 7f99c8ff96c0 Level-0 table #311: 0 bytes OK
|
||||
2025/08/24-16:59:15.685710 7f99c8ff96c0 Delete type=0 #309
|
||||
2025/08/24-16:59:15.705541 7f99c8ff96c0 Manual compaction at level-0 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.705635 7f99c8ff96c0 Manual compaction at level-1 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
||||
8
packs/competences-creatures/LOG.old
Normal file
8
packs/competences-creatures/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/02-22:46:22.050017 7f0793fff6c0 Recovering log #302
|
||||
2025/07/02-22:46:22.059979 7f0793fff6c0 Delete type=3 #300
|
||||
2025/07/02-22:46:22.060037 7f0793fff6c0 Delete type=0 #302
|
||||
2025/07/02-22:48:09.634420 7f07923ff6c0 Level-0 table #307: started
|
||||
2025/07/02-22:48:09.634441 7f07923ff6c0 Level-0 table #307: 0 bytes OK
|
||||
2025/07/02-22:48:09.644014 7f07923ff6c0 Delete type=0 #305
|
||||
2025/07/02-22:48:09.644146 7f07923ff6c0 Manual compaction at level-0 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.644167 7f07923ff6c0 Manual compaction at level-1 from '!items!0nhTxujlIUB63Aqt' @ 72057594037927935 : 1 .. '!items!tFU5yISK6spdNWco' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/competences-creatures/MANIFEST-000308
Normal file
BIN
packs/competences-creatures/MANIFEST-000308
Normal file
Binary file not shown.
BIN
packs/competences/000275.ldb
Normal file
BIN
packs/competences/000275.ldb
Normal file
Binary file not shown.
0
packs/competences/000310.log
Normal file
0
packs/competences/000310.log
Normal file
1
packs/competences/CURRENT
Normal file
1
packs/competences/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000308
|
||||
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/08/24-16:39:04.595109 7f99caffd6c0 Recovering log #306
|
||||
2025/08/24-16:39:04.604941 7f99caffd6c0 Delete type=3 #304
|
||||
2025/08/24-16:39:04.605009 7f99caffd6c0 Delete type=0 #306
|
||||
2025/08/24-16:59:15.698867 7f99c8ff96c0 Level-0 table #311: started
|
||||
2025/08/24-16:59:15.698952 7f99c8ff96c0 Level-0 table #311: 0 bytes OK
|
||||
2025/08/24-16:59:15.705403 7f99c8ff96c0 Delete type=0 #309
|
||||
2025/08/24-16:59:15.705617 7f99c8ff96c0 Manual compaction at level-0 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.705693 7f99c8ff96c0 Manual compaction at level-1 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 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/07/02-22:46:22.022022 7f07937fe6c0 Recovering log #302
|
||||
2025/07/02-22:46:22.031802 7f07937fe6c0 Delete type=3 #300
|
||||
2025/07/02-22:46:22.031862 7f07937fe6c0 Delete type=0 #302
|
||||
2025/07/02-22:48:09.604476 7f07923ff6c0 Level-0 table #307: started
|
||||
2025/07/02-22:48:09.604540 7f07923ff6c0 Level-0 table #307: 0 bytes OK
|
||||
2025/07/02-22:48:09.616123 7f07923ff6c0 Delete type=0 #305
|
||||
2025/07/02-22:48:09.644121 7f07923ff6c0 Manual compaction at level-0 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.644157 7f07923ff6c0 Manual compaction at level-1 from '!items!15IDGG6JoZnRCQtY' @ 72057594037927935 : 1 .. '!items!yI1zY5k8mAdx9wHK' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/competences/MANIFEST-000308
Normal file
BIN
packs/competences/MANIFEST-000308
Normal file
Binary file not shown.
BIN
packs/equipement/000275.ldb
Normal file
BIN
packs/equipement/000275.ldb
Normal file
Binary file not shown.
0
packs/equipement/000310.log
Normal file
0
packs/equipement/000310.log
Normal file
1
packs/equipement/CURRENT
Normal file
1
packs/equipement/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000308
|
||||
0
packs/equipement/LOCK
Normal file
0
packs/equipement/LOCK
Normal file
8
packs/equipement/LOG
Normal file
8
packs/equipement/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/08/24-16:39:04.685664 7f99c9ffb6c0 Recovering log #306
|
||||
2025/08/24-16:39:04.696583 7f99c9ffb6c0 Delete type=3 #304
|
||||
2025/08/24-16:39:04.696664 7f99c9ffb6c0 Delete type=0 #306
|
||||
2025/08/24-16:59:15.713614 7f99c8ff96c0 Level-0 table #311: started
|
||||
2025/08/24-16:59:15.713701 7f99c8ff96c0 Level-0 table #311: 0 bytes OK
|
||||
2025/08/24-16:59:15.719863 7f99c8ff96c0 Delete type=0 #309
|
||||
2025/08/24-16:59:15.733110 7f99c8ff96c0 Manual compaction at level-0 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.733164 7f99c8ff96c0 Manual compaction at level-1 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
||||
8
packs/equipement/LOG.old
Normal file
8
packs/equipement/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/02-22:46:22.103691 7f0798bfa6c0 Recovering log #302
|
||||
2025/07/02-22:46:22.113425 7f0798bfa6c0 Delete type=3 #300
|
||||
2025/07/02-22:46:22.113488 7f0798bfa6c0 Delete type=0 #302
|
||||
2025/07/02-22:48:09.644254 7f07923ff6c0 Level-0 table #307: started
|
||||
2025/07/02-22:48:09.644276 7f07923ff6c0 Level-0 table #307: 0 bytes OK
|
||||
2025/07/02-22:48:09.654757 7f07923ff6c0 Delete type=0 #305
|
||||
2025/07/02-22:48:09.686905 7f07923ff6c0 Manual compaction at level-0 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.686969 7f07923ff6c0 Manual compaction at level-1 from '!items!0BopmCu8vGK2923j' @ 72057594037927935 : 1 .. '!items!zYx0Ak2y1LNTcKlO' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/equipement/MANIFEST-000308
Normal file
BIN
packs/equipement/MANIFEST-000308
Normal file
Binary file not shown.
BIN
packs/historiques/000275.ldb
Normal file
BIN
packs/historiques/000275.ldb
Normal file
Binary file not shown.
0
packs/historiques/000310.log
Normal file
0
packs/historiques/000310.log
Normal file
1
packs/historiques/CURRENT
Normal file
1
packs/historiques/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000308
|
||||
0
packs/historiques/LOCK
Normal file
0
packs/historiques/LOCK
Normal file
8
packs/historiques/LOG
Normal file
8
packs/historiques/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/08/24-16:39:04.642541 7f99c9ffb6c0 Recovering log #306
|
||||
2025/08/24-16:39:04.652781 7f99c9ffb6c0 Delete type=3 #304
|
||||
2025/08/24-16:39:04.652862 7f99c9ffb6c0 Delete type=0 #306
|
||||
2025/08/24-16:59:15.685953 7f99c8ff96c0 Level-0 table #311: started
|
||||
2025/08/24-16:59:15.686013 7f99c8ff96c0 Level-0 table #311: 0 bytes OK
|
||||
2025/08/24-16:59:15.692263 7f99c8ff96c0 Delete type=0 #309
|
||||
2025/08/24-16:59:15.705571 7f99c8ff96c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.705656 7f99c8ff96c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
||||
8
packs/historiques/LOG.old
Normal file
8
packs/historiques/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/02-22:46:22.062411 7f0798bfa6c0 Recovering log #302
|
||||
2025/07/02-22:46:22.072211 7f0798bfa6c0 Delete type=3 #300
|
||||
2025/07/02-22:46:22.072276 7f0798bfa6c0 Delete type=0 #302
|
||||
2025/07/02-22:48:09.625684 7f07923ff6c0 Level-0 table #307: started
|
||||
2025/07/02-22:48:09.625708 7f07923ff6c0 Level-0 table #307: 0 bytes OK
|
||||
2025/07/02-22:48:09.634315 7f07923ff6c0 Delete type=0 #305
|
||||
2025/07/02-22:48:09.644139 7f07923ff6c0 Manual compaction at level-0 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.644162 7f07923ff6c0 Manual compaction at level-1 from '!items!15foLG7y3LUXNzkK' @ 72057594037927935 : 1 .. '!items!z1HtkvazCGHut7cz' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/historiques/MANIFEST-000308
Normal file
BIN
packs/historiques/MANIFEST-000308
Normal file
Binary file not shown.
BIN
packs/mutations/000185.ldb
Normal file
BIN
packs/mutations/000185.ldb
Normal file
Binary file not shown.
0
packs/mutations/000220.log
Normal file
0
packs/mutations/000220.log
Normal file
1
packs/mutations/CURRENT
Normal file
1
packs/mutations/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000218
|
||||
0
packs/mutations/LOCK
Normal file
0
packs/mutations/LOCK
Normal file
8
packs/mutations/LOG
Normal file
8
packs/mutations/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/08/24-16:39:04.611112 7f99ca7fc6c0 Recovering log #216
|
||||
2025/08/24-16:39:04.621971 7f99ca7fc6c0 Delete type=3 #214
|
||||
2025/08/24-16:39:04.622127 7f99ca7fc6c0 Delete type=0 #216
|
||||
2025/08/24-16:59:15.692465 7f99c8ff96c0 Level-0 table #221: started
|
||||
2025/08/24-16:59:15.692517 7f99c8ff96c0 Level-0 table #221: 0 bytes OK
|
||||
2025/08/24-16:59:15.698622 7f99c8ff96c0 Delete type=0 #219
|
||||
2025/08/24-16:59:15.705597 7f99c8ff96c0 Manual compaction at level-0 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.705674 7f99c8ff96c0 Manual compaction at level-1 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
||||
8
packs/mutations/LOG.old
Normal file
8
packs/mutations/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/02-22:46:22.035824 7f0798bfa6c0 Recovering log #212
|
||||
2025/07/02-22:46:22.046033 7f0798bfa6c0 Delete type=3 #210
|
||||
2025/07/02-22:46:22.046089 7f0798bfa6c0 Delete type=0 #212
|
||||
2025/07/02-22:48:09.616234 7f07923ff6c0 Level-0 table #217: started
|
||||
2025/07/02-22:48:09.616258 7f07923ff6c0 Level-0 table #217: 0 bytes OK
|
||||
2025/07/02-22:48:09.625537 7f07923ff6c0 Delete type=0 #215
|
||||
2025/07/02-22:48:09.644131 7f07923ff6c0 Manual compaction at level-0 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.644152 7f07923ff6c0 Manual compaction at level-1 from '!folders!5d4Zn28TUcPxRyXd' @ 72057594037927935 : 1 .. '!items!zttESycGKltfwCzJ' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/mutations/MANIFEST-000218
Normal file
BIN
packs/mutations/MANIFEST-000218
Normal file
Binary file not shown.
BIN
packs/profils/000275.ldb
Normal file
BIN
packs/profils/000275.ldb
Normal file
Binary file not shown.
0
packs/profils/000310.log
Normal file
0
packs/profils/000310.log
Normal file
1
packs/profils/CURRENT
Normal file
1
packs/profils/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000308
|
||||
0
packs/profils/LOCK
Normal file
0
packs/profils/LOCK
Normal file
8
packs/profils/LOG
Normal file
8
packs/profils/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/08/24-16:39:04.701459 7f99caffd6c0 Recovering log #306
|
||||
2025/08/24-16:39:04.712420 7f99caffd6c0 Delete type=3 #304
|
||||
2025/08/24-16:39:04.712492 7f99caffd6c0 Delete type=0 #306
|
||||
2025/08/24-16:59:15.746507 7f99c8ff96c0 Level-0 table #311: started
|
||||
2025/08/24-16:59:15.746545 7f99c8ff96c0 Level-0 table #311: 0 bytes OK
|
||||
2025/08/24-16:59:15.752641 7f99c8ff96c0 Delete type=0 #309
|
||||
2025/08/24-16:59:15.759929 7f99c8ff96c0 Manual compaction at level-0 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.759962 7f99c8ff96c0 Manual compaction at level-1 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
||||
8
packs/profils/LOG.old
Normal file
8
packs/profils/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/02-22:46:22.117261 7f07937fe6c0 Recovering log #302
|
||||
2025/07/02-22:46:22.127319 7f07937fe6c0 Delete type=3 #300
|
||||
2025/07/02-22:46:22.127379 7f07937fe6c0 Delete type=0 #302
|
||||
2025/07/02-22:48:09.664713 7f07923ff6c0 Level-0 table #307: started
|
||||
2025/07/02-22:48:09.664747 7f07923ff6c0 Level-0 table #307: 0 bytes OK
|
||||
2025/07/02-22:48:09.675149 7f07923ff6c0 Delete type=0 #305
|
||||
2025/07/02-22:48:09.686945 7f07923ff6c0 Manual compaction at level-0 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.686987 7f07923ff6c0 Manual compaction at level-1 from '!items!26mRstKhCJoXkhu1' @ 72057594037927935 : 1 .. '!items!tFQqcxmkS3MT6ASE' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/profils/MANIFEST-000308
Normal file
BIN
packs/profils/MANIFEST-000308
Normal file
Binary file not shown.
BIN
packs/protections/000275.ldb
Normal file
BIN
packs/protections/000275.ldb
Normal file
Binary file not shown.
0
packs/protections/000310.log
Normal file
0
packs/protections/000310.log
Normal file
1
packs/protections/CURRENT
Normal file
1
packs/protections/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000308
|
||||
0
packs/protections/LOCK
Normal file
0
packs/protections/LOCK
Normal file
8
packs/protections/LOG
Normal file
8
packs/protections/LOG
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/08/24-16:39:04.672110 7f99c97fa6c0 Recovering log #306
|
||||
2025/08/24-16:39:04.682415 7f99c97fa6c0 Delete type=3 #304
|
||||
2025/08/24-16:39:04.682496 7f99c97fa6c0 Delete type=0 #306
|
||||
2025/08/24-16:59:15.705816 7f99c8ff96c0 Level-0 table #311: started
|
||||
2025/08/24-16:59:15.705873 7f99c8ff96c0 Level-0 table #311: 0 bytes OK
|
||||
2025/08/24-16:59:15.713330 7f99c8ff96c0 Delete type=0 #309
|
||||
2025/08/24-16:59:15.733088 7f99c8ff96c0 Manual compaction at level-0 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.733151 7f99c8ff96c0 Manual compaction at level-1 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
||||
8
packs/protections/LOG.old
Normal file
8
packs/protections/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
||||
2025/07/02-22:46:22.089999 7f0793fff6c0 Recovering log #302
|
||||
2025/07/02-22:46:22.100226 7f0793fff6c0 Delete type=3 #300
|
||||
2025/07/02-22:46:22.100296 7f0793fff6c0 Delete type=0 #302
|
||||
2025/07/02-22:48:09.654876 7f07923ff6c0 Level-0 table #307: started
|
||||
2025/07/02-22:48:09.654897 7f07923ff6c0 Level-0 table #307: 0 bytes OK
|
||||
2025/07/02-22:48:09.664567 7f07923ff6c0 Delete type=0 #305
|
||||
2025/07/02-22:48:09.686931 7f07923ff6c0 Manual compaction at level-0 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
||||
2025/07/02-22:48:09.686978 7f07923ff6c0 Manual compaction at level-1 from '!items!16iPa2yIzB0V3pxb' @ 72057594037927935 : 1 .. '!items!yszkersMTE4p9VzP' @ 0 : 0; will stop at (end)
|
||||
BIN
packs/protections/MANIFEST-000308
Normal file
BIN
packs/protections/MANIFEST-000308
Normal file
Binary file not shown.
BIN
packs/scenes/000114.ldb
Normal file
BIN
packs/scenes/000114.ldb
Normal file
Binary file not shown.
0
packs/scenes/000149.log
Normal file
0
packs/scenes/000149.log
Normal file
1
packs/scenes/CURRENT
Normal file
1
packs/scenes/CURRENT
Normal file
@@ -0,0 +1 @@
|
||||
MANIFEST-000147
|
||||
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/08/24-16:39:04.786487 7f99c97fa6c0 Recovering log #145
|
||||
2025/08/24-16:39:04.796655 7f99c97fa6c0 Delete type=3 #143
|
||||
2025/08/24-16:39:04.796726 7f99c97fa6c0 Delete type=0 #145
|
||||
2025/08/24-16:59:15.752769 7f99c8ff96c0 Level-0 table #150: started
|
||||
2025/08/24-16:59:15.752800 7f99c8ff96c0 Level-0 table #150: 0 bytes OK
|
||||
2025/08/24-16:59:15.759765 7f99c8ff96c0 Delete type=0 #148
|
||||
2025/08/24-16:59:15.759940 7f99c8ff96c0 Manual compaction at level-0 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 0 : 0; will stop at (end)
|
||||
2025/08/24-16:59:15.759971 7f99c8ff96c0 Manual compaction at level-1 from '!scenes!VOzC5ey4qi1C34MY' @ 72057594037927935 : 1 .. '!scenes!mfosNsLsHN5Pf4TO' @ 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