Compare commits

...

115 Commits

Author SHA1 Message Date
daca86b1df Fix: experience sur particulière 2025-01-10 19:37:34 +01:00
aa52e26e1a Fix: pas de message si carac exacte pas trouvée
La recherche se fait en deux temps, on avait un message d'erreur pour
odorat-gout
2025-01-09 00:16:52 +01:00
f956da1fc0 Merge pull request '12.0.32 - les rêveries d'Astrobazzarh' (#735) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 2m22s
Reviewed-on: #735
2024-12-29 22:01:08 +01:00
10971e9e7b Fix typo 2024-12-29 17:47:10 +01:00
a3e6b95ef3 Simplification import 2024-12-29 17:43:54 +01:00
d0a5a3617c Pas de drag depuis champs dérivés/biographie 2024-12-29 17:39:03 +01:00
755df936fb Cleanup valeurs numériques 2024-12-29 16:50:09 +01:00
2fa0ce5f15 Support de races
L'item "race" permet de paramétrer des ajustements de caracs,
des min/max de taille, et une limite de force.

Ajouter une race à un acteur enlève la/les races précédentes et ajoute
les modificateurs de caracs de la nouvelle race.

Enlever une race enlève les modificateurs de caracs de la race
aux caractéristiques
2024-12-29 16:50:08 +01:00
b4eed49e9a Correction compendiums Voies Draconic
Le nom des voies ne doit pas contenir "Voie de "
2024-12-28 22:36:09 +01:00
af4404aab1 Merge pull request 'Fix: automatisations de combat' (#734) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 1m28s
Reviewed-on: #734
2024-12-20 10:52:54 +01:00
85804bc838 Fix: automatisations de combat 2024-12-20 01:30:00 +01:00
ad4baecdf2 Merge pull request 'v11 Niveau des entités; compendiums venins' (#733) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 1m28s
Reviewed-on: #733
2024-12-18 23:48:32 +01:00
8dc5616d7c Fix: probleme de sauvegarde messages combat
Il était impossible de sauvegarde à cause d'une exception lors
de la création du flag car on accédait au Token.
2024-12-18 22:15:00 +01:00
db6b025e8f Liens vers les venins 2024-12-18 17:59:08 +01:00
7f53757f26 Pas de valeurs par défaut dans descriptions
Elles n'apportent pas grand chose
2024-12-18 17:38:23 +01:00
879d2d10e5 Mineur - ordre des attributs dérivés 2024-12-18 17:37:35 +01:00
016e4463bd Support d'apostrophe dans les noms
v2: simple escape seulement
2024-12-18 17:36:47 +01:00
1dfab01c4b Support espace insécable
Dans le poids, on a généralement un espace insécable
2024-12-18 17:36:15 +01:00
a9cb211dba Ne pas afficher l'âge si 0
Dans la feuille simplifiée, ne pas afficher l'âge si 0 (correspondant
en général à des acteurs non liés)
2024-12-18 17:28:50 +01:00
4dce510c91 Calcul automatique du niveau des entités 2024-12-18 17:27:50 +01:00
14abfa8e7d Merge pull request '12.0.29 - L'indexation d'Astrobazzarh' (#732) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 1m36s
Reviewed-on: #732
2024-12-17 07:11:59 +01:00
1f564e0d89 Meilleure extraction du nom
- cas des entités non incarnées
2024-12-17 01:51:23 +01:00
ab61d5991d Correction des liens vers les compendiums
Afin de permettre de naviguer, les liens référencent maintenant les
compendiums dans les sorts.

Le venin des charasmes est référencé depuis les chrasmes.
2024-12-17 01:39:41 +01:00
e3a858a9ef Meilleure détection type d'acteur
- entités: pas de force (cas des entités non incarnées)
- créatures: pas de vue / avec perception
sinon: personnages
2024-12-17 01:35:47 +01:00
4cacf46ed8 Import "protection naturelle" 2024-12-17 01:32:56 +01:00
5a5b5cdbb3 Ajustement dommages créatures
Les bonus aux dommages des créatures et entitées sont intégrés
dans les données importées, il faut donc retirer le plusdom de
l'acteur après création
2024-12-17 01:32:29 +01:00
f90dddfbf8 Le nom peut contenir une apostrophe 2024-12-14 23:21:50 +01:00
d04da56c22 Merge pull request 'Corrections imports et ajouts sorts en réserve' (#731) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 1m35s
Reviewed-on: #731
2024-12-14 16:48:39 +01:00
a87a4d371e Import de Nom avec tiret de séparation 2024-12-14 01:02:19 +01:00
c577fa5f29 Correction import niveau 0
Correction d'import pour armes au niveau 0 (ou négatif)
2024-12-14 00:51:32 +01:00
30303330d7 Correction import armes à deux mains
pluriel!
2024-12-14 00:50:51 +01:00
ded92ddf2d Déplacement update competences
Placé sur les feuilles d'acteurs qui ont des compétences
2024-12-14 00:38:39 +01:00
2d2b75e33f Chance actuelle sur feuille simplifiée
- Affichages boutons +/-

- Jet de chance actuelle

- Correction de la détermination de chance actuelle
parfois vide/undefined
2024-12-14 00:33:31 +01:00
a9b7dff83a Affichage du coût de seuil sur les sorts 2024-12-11 23:29:01 +01:00
75d6f78b40 Mettre en réserve depuis un sort
Ajout d'une icône pour mettre les sorts en réserve depuis la
liste de sorts
2024-12-11 23:22:20 +01:00
979d49f96e Force reload on TMR change
All checks were successful
Release Creation / build (release) Successful in 2m22s
2024-12-09 23:12:22 +01:00
22cab26908 Merge pull request '12.0.27 - Les vêtements d'Astrobazzarh' (#730) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
Reviewed-on: #730
2024-12-09 23:02:09 +01:00
23b3be246b Correction tooltips TMR multiples 2024-12-09 23:00:43 +01:00
b160ce78bc Correction imports du compendium
- les personnages conservent la valeur de token lié/non-lié
- les voyageirs sont liés
- les PNJs sont non-liés
- les invocations sont non liées
2024-12-09 22:24:22 +01:00
60921cfef1 Bouton ajout de personnage accordé 2024-12-09 22:07:03 +01:00
12e5c94aba Bouton Ajout de compétence créature 2024-12-09 22:05:46 +01:00
4dd6e1c3ff Corrections des invocations
- ajout de lien entre le sort et la créature
- correction des liens vers les journaux
- limitation aux compétences listées
2024-12-09 00:12:14 +01:00
c7dfc8682d Support de personnages sans compétences
Un personnage peut maintenant n'avoir aucune compétence

Exemple: les entités invoquées (Kanaillous, ..) n'ont pas besoin
d'une liste de compétences sans aucune valeur.

Ceci permettrait de supprimer des compétences prohibées.

# Conflicts:
#	module/actor.js
#	module/actor/base-actor-reve.js
2024-12-09 00:09:31 +01:00
88c8a70744 Carte des TMR alternatives
Ajout d'une option pour choisir parmi les TMRs des 3 éditions
2024-12-08 19:41:08 +01:00
3258285cea Correction des rituels Détection/lecture 2024-12-08 00:02:06 +01:00
250a1abd65 Le MJ peut créer des sorts en réserve 2024-12-08 00:01:10 +01:00
2e689f642a Fix sélection cible parmi multiples 2024-12-08 00:00:16 +01:00
1c68c34641 Import des sorts en réserve 2024-12-07 22:58:02 +01:00
5dd5a03487 Correction des Voies des sorts 2024-12-07 22:55:55 +01:00
9448407e41 12.0.27 - Les vêtements d'Astrobazzarh 2024-12-07 20:31:34 +01:00
32adbb721f Suppression items inutiles
Les compétences de personnages ne sont pas
utilisables/visibles sur les entités
2024-12-07 20:31:33 +01:00
f3120f34d0 Rename compétence Équitation 2024-12-07 20:31:33 +01:00
c6feac41c6 Import compétences avec spécialisations
ie: Musique (Harpe) +6
2024-12-07 20:31:33 +01:00
a896fdb166 rename méthodes handlebars 2024-12-07 19:23:12 +01:00
1ff0de1348 Correction des ajouts de blessures
- la contusion n'ajoute plus de blessure légère
- les pertes d'endurance fonctionnent
2024-12-07 19:23:04 +01:00
ab365e9780 Affichage des armures
Afficher la liste des armures avec les caractéristiques
2024-12-07 17:20:22 +01:00
3739519610 Fix imports divers
- gestion du malus armure (esquive ou autres)
- gestion des sous-listes competences au même niveau
- gestion des armes avec plusieurs maniements
- un personnage ayant du draconic est haut-rêvant
  (cas des haut-rêvants connaissant "tous les sorts" ou une liste
 non précisée)
2024-12-07 01:20:33 +01:00
f7fc7fbefb Ouverture de l'acteur après import 2024-12-07 01:20:33 +01:00
d5686b81ed Ajout "kg" au poids 2024-12-07 01:20:33 +01:00
5bf1ecaea3 Fix typos 2024-12-07 01:20:33 +01:00
81d826ee2e Fix import de creatures sans heure de naissance 2024-12-06 13:29:25 +01:00
2a164f6a32 Fix import de creatures sans heure de naissance 2024-12-06 13:21:22 +01:00
6479f00642 Fix import de creatures sans heure de naissance 2024-12-06 13:11:19 +01:00
3cbd777e6a Merge pull request '12.0.26 - Astrobazzarh le Haut-rêvant' (#728) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 1m19s
Reviewed-on: #728
2024-12-05 16:16:09 +01:00
b377739481 Meilleure détection des sorts (TMR spécifique) 2024-12-04 20:04:47 +01:00
d9cdfef688 Fix: échanges achat-vente "prendre"
simplification des tests de droits pour savoir si on transmet
l'appel de méthode à un MJ connecté.

De manière générale, si on est le owner: pas besoin d'appel remote.
Donc si MJ pas besoin.

Si on a un appel remote, seul un MJ le traite.
2024-12-04 18:55:34 +01:00
d9af32b168 Initialisation valeurs actuelles
Prise encompte de l'endutrance et vie actuelles
2024-12-04 15:55:59 +01:00
f13677106e Calculs des informations dérivées
Calcul automatique des informations dérivées:
- vie max
- endurance max
- bonus dommages

Ces informations ne peuvent plus être saisies.

L'endurance max des animaux est vie+constitution.
Les entités non-incarnées n'ont pas de +dom
2024-12-04 15:55:09 +01:00
e98a793506 Version 12.0.26 - Astrobazzarh le Haut-rêvant
- Changelog
- changement des versions dans system pour test de migration
2024-12-04 01:49:39 +01:00
57d35a0f9a Fix: sorts contenant des apostrophes
Le caractère utilisé dans le texte n'est pas l'apostrophe simple
informatique (utilisé dans les compendiums), et pas transformé
par toLowerCaseNoAccent...
2024-12-04 01:43:44 +01:00
417db33752 Parser: demi-rêve/valeurs actuelles/remise à neuf 2024-12-04 01:09:57 +01:00
bf0eea693a Migration draconic
Utilisation des noms de compétences draconiques standard
2024-12-04 01:09:22 +01:00
28ee8607bb Fix feuille simplifiée case TMR
Cases spéciales des TMRs mal gérée...
2024-12-04 01:09:22 +01:00
91717a3290 Bouton "don de haut-rêve"
Pour permettre au MJ de rendre un personnage haut rêvant
sans avoir à chercher dans les compendiums
2024-12-04 01:09:22 +01:00
39ce66a26c Setup auto-publish action
Some checks failed
Release Creation / build (release) Failing after 1m18s
2024-12-03 14:30:18 +01:00
5265c013c1 Setup auto-publish action
Some checks failed
Release Creation / build (release) Failing after 15s
2024-12-03 14:15:43 +01:00
a03cee5d60 Setup auto-publish action 2024-12-03 14:12:19 +01:00
296c4babbb Setup auto-publish action
Some checks failed
Release Creation / build (release) Has been cancelled
2024-12-03 14:09:32 +01:00
d9c1804a08 Merge pull request 'Imports créatures et entités de cauchemar' (#727) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
Reviewed-on: #727
2024-12-03 07:31:22 +01:00
fa375f8092 Améliorations parser
- armure équipée
- armes équipées
- ajout des bonus de cases
- dommages des créatures
- ajout des esquives spéciales
- fix édition feuilles de compétences créatures

- déplacement des valeurs de test en fin de fichier
2024-12-03 00:50:39 +01:00
a27e3894a0 Fix Import entités de cauchemar&créatures
- utiliser les carac liées au type d'entités
- fix: +dom&protection 0 ou négatifs
- fix compétences (qui peuvent ne pas avoir d'init)
2024-12-02 22:21:43 +01:00
ce8616c34e Merge compétences créatures/entités
Les deux compendiums n'avaient pas de raison d'être séparés
2024-12-02 22:21:43 +01:00
bbfac286a6 Amelioration parser : heures, cheveux, yeux et sorts 2024-12-01 14:22:40 +01:00
c0563efcfa Merge pull request 'Amélioration du parser' (#725) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
Reviewed-on: #725
2024-12-01 12:38:50 +01:00
c481bad81a Amélioration du parser:
- correction de la taille (ne prennait que avant le 'm'
- ajout du sexe masculin/féminin
- correction heure de naissance (support heure composée, articles)
- support Unicode (nom, HN)
- support groupes de compétences (saut, danse +1)
- ignorer parenthèses dans ccompétences
- armes avec compétences accentuées
2024-11-30 22:32:00 +01:00
37c281b300 Merge pull request 'Version 12.0.24' (#724) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 2m6s
Reviewed-on: #724
2024-11-30 12:48:20 +01:00
9b1a179a71 Corrections voies draconic
- Utilisation du nom de voie (Oniros au lieu de Voie d'Oniros)
- compatible anciens sorts
- migration des objets existants
- amélioration de l'affichage de la liste des sorts
2024-11-30 00:08:20 +01:00
8be4c3343f Fix: les tas de conteneurs 2024-11-30 00:07:52 +01:00
6af5a85dc1 Corrections des tirages tmr/rencontres
- on n'affiche plus le compendium d'origine des rencontres dans le tchat
- utilisation de ChatMessageData#rolls (compat future v14)
- le résultat d'un d100 n'a pas à afficher de signe '%'
- utilistaion des types de TMR plutôt que les noms en minuscules
2024-11-30 00:07:52 +01:00
c6d64e09d5 Fix: saisie des bonus de cases 2024-11-30 00:07:48 +01:00
56c99c5044 Change zip file path
All checks were successful
Release Creation / build (release) Successful in 2m21s
2024-11-27 10:13:54 +01:00
a7862a25e5 Change zip file path 2024-11-27 10:13:16 +01:00
f4b5a4a4d2 Merge pull request 'Version 12.0.23 - La bibliothèque d'Astrobazzarh' (#723) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
Reviewed-on: #723
2024-11-27 10:12:25 +01:00
6a17586a6c Changelog 12.0.23 2024-11-26 23:55:52 +01:00
40f7ef48c9 Lettre accentuées
Utilisation des majuscules Écriture, Épée
pour exports scriptariums
2024-11-26 23:42:38 +01:00
62dfa8a580 fix export Corps à Corps 2024-11-26 23:28:59 +01:00
e71088fe2f Fix sorts r1+
Ne pas mettre d'espace entre le r et une valeur commençant comme un
nombre
2024-11-26 22:48:23 +01:00
b7cb0f0752 Fix recherche compétence sans accents
La recherche était case-sensitive, du coup corriger le nom de la
compétence 'Epées' dans le compendium des compétences rend
les Épées inutilisable (et échec au chargement de la fiche)
2024-11-26 22:35:05 +01:00
9b31f25640 Fix doublon isActionPhysique 2024-11-25 22:17:05 +01:00
2291eaf135 Support des sorts voies multiples
Si un sort (autre que détection/lecture/annulation) a plusieurs voies
(ie: Oniros/Hypnos), les voies draconiques sont proposées pour le sort
2024-11-24 23:12:03 +01:00
a91264cd82 Correction erreur onMsgEncaisser
Pas d'actor passé pour déterminer si on doit gérer le message
2024-11-24 23:12:03 +01:00
864194e3b4 Correction "lacks permission to update"
Correction de message d'erreur

'User ... lacks permission to update Item ... in parent Actor'

Causé par le traitement d'un hook onUpdateActor qui semble
autorisé à modifier l'actor, mais ne l'est pas
- lors de modifications/ajouts de blessures
- lors de l'ajout d'effets
2024-11-24 23:12:03 +01:00
2c836f17e7 Correction sorts
- typos
- voies de draconic multiples
  (Détection/Lecture/Annulation)
- case TMR variable Invocation entité de cauchemar
2024-11-24 23:12:02 +01:00
444e52cb49 Armes naturelles
Corrections mineures sur l'affichage des armes
naturelles
2024-11-24 16:28:17 +01:00
82b0537d43 cleanup compendiums
- suppression flags inutiles
- mise à jour des versions dans les documents
- suppression des anciennes listes de blessures
- suppression des anciennes listes de queues/souffles/...
- suppression des textes 'Histoire personnelle/Notes du MJ
2024-11-24 16:28:16 +01:00
1eea07c8a8 Suppression notes obsoletes 2024-11-24 16:28:15 +01:00
de70ba8a3c Mise à jour résistance 2024-11-24 16:28:15 +01:00
f0e02e2205 Sync release scheme
All checks were successful
Release Creation / build (release) Successful in 1m18s
2024-11-20 10:27:59 +01:00
7d9ccfaf28 Sync release scheme 2024-11-20 10:25:33 +01:00
830cd1c200 Merge pull request 'Version 12.0.21' (#722) from VincentVk/foundryvtt-reve-de-dragon:v11 into v11
All checks were successful
Release Creation / build (release) Successful in 2m8s
Reviewed-on: #722
2024-11-20 10:19:30 +01:00
b9458c717e Version 12.0.21 2024-11-20 00:10:15 +01:00
22f25b45ce Fix typo "ambidextre" 2024-11-20 00:10:15 +01:00
dca9505925 Utilisation du token.name au lieu d'actor.name
Pour permettre de masquer les informations sur les
PNJs secondaires, et ne pas dévoiler le nom de l'acteur
2024-11-20 00:10:08 +01:00
45e9e94646 Fix selection des status effects 2024-11-20 00:09:22 +01:00
a0c7b87996 Merge pull request 'build-test' (#721) from build-test into v11
Reviewed-on: #721
2024-11-15 11:26:25 +01:00
1224 changed files with 21189 additions and 74737 deletions

View File

@ -27,8 +27,8 @@ jobs:
env:
version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/${{gitea.repository}}
manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download//${{github.event.release.tag_name}}/system.json
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/foundryvtt-reve-de-dragon-${{github.event.release.tag_name}}.zip
manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/rddsystem.zip
- name: Set up Node.js
uses: actions/setup-node@v2
@ -46,7 +46,7 @@ jobs:
apt update -y
apt install -y zip
- run: zip -r ./foundryvtt-reve-de-dragon-${{github.event.release.tag_name}}.zip system.json template.json README.md LICENSE.txt assets/ fonts/ icons lang/ module/ packs/ pic/ sounds/ styles/ templates/
- run: zip -r ./rddsystem.zip system.json template.json README.md LICENSE.txt assets/ fonts/ icons lang/ module/ packs/ pic/ sounds/ styles/ templates/
- name: setup go
uses: actions/setup-go@v3
@ -58,6 +58,17 @@ jobs:
uses: https://gitea.com/actions/release-action@main
with:
files: |-
./foundryvtt-reve-de-dragon-${{github.event.release.tag_name}}.zip
./rddsystem.zip
system.json
api_key: '${{secrets.ALLOW_PUSH_RELEASE}}'
- name: Publish to Foundry server
uses: djlechuck/foundryvtt-publish-package-action@v1
with:
token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }}
id: 'foundryvtt-reve-de-dragon'
version: ${{github.event.release.tag_name}}
manifest: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json'
notes: 'https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md'
compatibility-minimum: '12'
compatibility-verified: '12'

View File

@ -1,4 +1,83 @@
# 12.0
## 12.0.33 - la vieillesse d'Astrobazzarh
- retour de l'expérience pour les joueurs
- suppression du message "Pas de caractéristique" sur les jets d'odorat-goût
## 12.0.32 - les rêveries d'Astrobazzarh
- Ajout des Items Race pour gérer les ajustements liés aux races
## 12.0.31 - le mausolée d'Astrobazzarh
- Correction: les automatisation de combat jouer-MJ fonctionnentde nouveau
## 12.0.30 - le cauchemar d'Astrobazzarh
- calcul automatique du niveau des entités selon leur rêve
- la description des créatures venimeuses contient un lien vers leur venin
- Correction: les messages de combats ne marchaient plus (Changement combiné Foundry + rêve de Dragon)
## 12.0.29 - L'indexation d'Astrobazzarh
- les liens dans la descriptions des sorts pointent vers les sorts du compendium
- la description du chrasme contient le lien vers son venin plutôt qu'un tableau
## 12.0.28 - Les réserves d'Astrobazzarh
- possibilité de mettre en réserve depuis un sort connu
## 12.0.27 - Les vêtements d'Astrobazzarh
- Ajout de la liste des armures dans l'onglet caractéristiques
- Ajout d'une option pour choisir une carte des TMR alternatives
- Le Gardien peut créer des sorts en réserve parmi les sorts d'un personnage
- Bouton pour ajouter des compétences aux créatures/entités
- Bouton pour ajouter un personnage accordé aux entités de cauchemar
- Correction du choix d'une cible parmi toutes les cibles pour les combats
- Correction des ajouts de blessures (prise en compte de l'endurance et des contusions)
- Correction des rituels de Détection et Lecture d'Aura des personnages prétirés
- Correction des invocations
- support de "personnages" n'ayant pas toutes les compétences
- ajout de lien entre le sort et la créature
- correction des liens vers les journaux
- limitation aux compétences listées
- acteur non lié par défaut
- Correction des compendiums
- l'import de personnages depuis un compendium respecte les acteurs liés/non-liés
- les modèles de voyageurs sont liés par défaut
- les modèles de personnages non joueurs sont non-liés par défaut
## 12.0.26 - Astrobazzarh le Haut-rêvant
- bouton pour le don de haut-rêve en un clic
- les compétences de draconic ne sont plus précédées de "Voie de"
- migration des compétences & compendiums
- Correction feuille simplifiée qui ne s'affichait pas en cas de sort variable
## 12.0.24 - Les ajustements d'Astrobazzarh
- amélioration
- meilleure gestion des noms des voies de draconic
- affichage du détail des sorts avec le nom de voie, 'court', la difficulté, le coût
- corrections
- les tas dans les conteneurs peuvent être désempilés sans rendre le conteneur inutilisable
- les conteneurs ne peuvent plus être empilés (pour éviter que le contenu de Schroedinger quand on les sépare)
- on peut maintenant saisir et supprimer les bonus de cases de manière intuitive
## 12.0.23 - La bibliothèque d'Astrobazzarh
- corrections mineures
- meilleure gestion de la parade des armes naturelles
- cas de "User lacks permission to update" pour les blessures et les StatusEffects
- risque de message d'encaissement non affiché
- support de sorts à voies multiples
- correction de compendiums
- résistance des armes mise à jour
- voies multiples pour las sorts de Lecture d'aura, Détection d'aura et Annulation de magie
- améliorations "Scriptarium"
- recherche des compétences sans accents pour permettre les noms accentués (standard Scriptarium)
- affichage r1+ des sorts à coût variable dans la feuille simplifiée
- affichage de Corps à corps pour le combat à mains nues dans la feuille simplifiée
- dans les compendiums, les compétences Écriture et Épée ont une majuscule accentuée. Les Épée dans le compendium d'équipements référence le nom de compétence accentué.
## 12.0.21 - La nomination d'Astrobazzarh
- Les noms pour les messages dans le tchat sont maintenant ceux des tokens plutôt que ceux des acteurs
- Fix: le choix des effets dans les options s'affiche correctement
## 12.0.20 - Le tableau d'Astrobazzarh
- Ecran d'accueil officiel Scriptarium
## 12.0.19 - La témérité d'Astrobazzarh
- Fix
- les défenses des créatures sont correctement filtrées
@ -58,11 +137,9 @@
- encodage de l'export en windows-1252
- export de l'esquive avec armure et sans armure
## 12.0.10 - Le scriptorium d'Astrobazzarh
## 12.0.9 - 12.0.10 - Le scriptorium d'Astrobazzarh
- corrections de l'export scriptarium
## 12.0.9 - Le scriptorium d'Astrobazzarh
- ajout d'une fonction avancée pour exporter les personnages dans un format csv
- ajout d'une fonction avancée pour un exporter "scriptarium" des personnages
## 12.0.8 - La quincaillerie d'Astrobazzarh
- le propriétaire est indiqué dans les feuilles d'équipements/compétences/...

View File

@ -1,61 +0,0 @@
# Actor notes
> The Actor#getData default implementation gives you the following for use in sheet rendering:
```
actor -> the Actor instance
data -> a cloned copy of Actor#data
items -> a cloned copy of Actor#data#items
effects -> a cloned copy of Actor#data#effects
```
> if all you need is a safe copy of `Actor#data`, you'll be much better off by simply defining your own function and avoiding all the wasted work that the parent class does which will slow down your sheet
```js
getData(options) {
return {
data: foundry.utils.deepClone(this.object.data)
}
}
```
who knows, maybe you don't even need to copy your actor data, skip the copy and it's even faster:
```js
getData(options) {
return {
data: this.object.data
}
}
```
Atropos19/02/2021
There are two recommended ways to create owned items in 0.8.0:
```js
await Item.create(itemData, {parent: actor});
await actor.createEmbeddedDocuments("Item", itemDataArray);
```
You can update an embedded item in one of two ways:
```js
//Method 1:
const item = actor.items.get(itemId);
item.update(data);
//Method 2:
actor.updateEmbeddedDocuments("Item", [{_id: itemId, ...}]);
```
I noticed adding an ActiveEffect to an actor in code using
```js
this.createEmbeddedDocuments('ActiveEffect', [effet], options);
this.applyActiveEffects();
```
Atropos — Aujourdhui à 14:42
Two notes on this:
1. You don't actually need to call this.applyActiveEffects() because this will happen automatically whenever an effect is created/updated/deleted
2. If you want to suppress the automatic display of the sheet for the newly created document, you can pass options.renderSheet = false as part of your options object

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -1 +1,191 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-3" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><path d="M90.53 23c-18.345 0-36.688 7.002-50.686 21-27.996 27.996-27.994 73.38 0 101.375 21.776 21.776 54.08 26.603 80.53 14.5l53.69 53.688c-21.425 19.696-44 38.257-67.44 55.937l30.126 30.125c18.734-22.545 37.953-44.474 57.844-65.53l169.594 169.593c-51.845 40.444-120.866 53.838-192.813 42.562L173 424.906 72.47 404.47l95.405 88.405 1.97-26c86.593 36.97 177.603 34.61 241.343-11.75l63.062 21.313-21.47-63.594c44.61-63.62 46.408-153.412 9.908-238.875l26.03-1.97-88.406-95.375 20.438 100.53 21.344-1.624c11.278 71.983-2.168 141.017-42.656 192.876l-169.782-169.75c21.075-20.34 42.93-39.665 65.78-57.72l-30.123-30.124c-17.015 24.154-35.673 46.66-55.688 67.813l-53.97-53.97C167.834 98.183 163.032 65.814 141.22 44c-14-13.998-32.343-21-50.69-21zm0 27.03c11.434.002 22.872 4.34 31.595 13.064 17.447 17.447 17.446 45.742 0 63.187-17.446 17.447-45.71 17.447-63.156 0-17.447-17.444-17.448-45.74 0-63.186C67.69 54.37 79.097 50.03 90.53 50.03z" fill="#8eff09" fill-opacity="1" transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)" filter="url(#shadow-1)"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg52"
sodipodi:docname="attache.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata56">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1769"
inkscape:window-height="1333"
id="namedview54"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg52" />
<defs
id="defs46">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-3"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood35" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite37" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur39" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset41" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite43" />
</filter>
</defs>
<g
class=""
id="g50"
style="stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;fill:#7db27d;fill-opacity:1">
<path
d="m 90.53,23 c -18.345,0 -36.688,7.002 -50.686,21 -27.996,27.996 -27.994,73.38 0,101.375 21.776,21.776 54.08,26.603 80.53,14.5 l 53.69,53.688 c -21.425,19.696 -44,38.257 -67.44,55.937 l 30.126,30.125 c 18.734,-22.545 37.953,-44.474 57.844,-65.53 L 364.188,403.688 C 312.343,444.132 243.322,457.526 171.375,446.25 L 173,424.906 72.47,404.47 l 95.405,88.405 1.97,-26 c 86.593,36.97 177.603,34.61 241.343,-11.75 l 63.062,21.313 -21.47,-63.594 c 44.61,-63.62 46.408,-153.412 9.908,-238.875 l 26.03,-1.97 -88.406,-95.375 20.438,100.53 21.344,-1.624 c 11.278,71.983 -2.168,141.017 -42.656,192.876 L 229.656,198.656 c 21.075,-20.34 42.93,-39.665 65.78,-57.72 l -30.123,-30.124 c -17.015,24.154 -35.673,46.66 -55.688,67.813 l -53.97,-53.97 C 167.834,98.183 163.032,65.814 141.22,44 127.22,30.002 108.877,23 90.53,23 Z m 0,27.03 c 11.434,0.002 22.872,4.34 31.595,13.064 17.447,17.447 17.446,45.742 0,63.187 -17.446,17.447 -45.71,17.447 -63.156,0 -17.447,-17.444 -17.448,-45.74 0,-63.186 C 67.69,54.37 79.097,50.03 90.53,50.03 Z"
fill="#8eff09"
fill-opacity="1"
transform="matrix(0.9,0,0,0.9,25.6,25.6)"
filter="url(#shadow-1)"
id="path48"
style="stroke:#000000;stroke-width:11.11111111;stroke-miterlimit:4;stroke-dasharray:none;fill:#7db27d;fill-opacity:1" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -1 +1,159 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><path d="M27.084 18.248C-17.903 146.478 143.15 277.92 314.496 381.074c-4.645 13.767-5.585 27.628-3.394 40.635 4.44 26.355 20.974 48.997 42.86 62.425 21.884 13.428 49.776 17.57 75.645 5.765 25.87-11.804 48.69-38.923 62.737-84.654l-17.865-5.488c-13 42.318-32.806 64.094-52.63 73.14-19.825 9.047-40.69 5.998-58.116-4.693-17.425-10.69-30.75-29.095-34.205-49.6-3.455-20.507 2.232-43.318 24.677-65.218 20.743-20.24 32.068-41.615 30.434-61.24l-18.622 1.552c.74 8.89-4.35 22.76-16.684 37.486C222.057 230.8 73.838 128.622 27.084 18.248zm458.05 0C451.34 98.03 364.527 173.53 270.93 247.166c19.492 15.878 39.56 31.622 59.195 45.012 110.756-84.836 187.878-180.243 155.01-273.93zM127.58 292.146c-1.634 19.626 9.69 41 30.434 61.24 22.445 21.9 28.132 44.712 24.677 65.218-3.455 20.506-16.78 38.91-34.206 49.6-17.425 10.692-38.29 13.74-58.115 4.694-19.825-9.046-39.632-30.822-52.63-73.14l-17.865 5.488c14.046 45.73 36.867 72.85 62.736 84.654 25.87 11.805 53.763 7.663 75.648-5.765 21.885-13.428 38.42-36.07 42.86-62.426 2.19-13.005 1.25-26.863-3.393-40.628 13.986-8.42 27.905-17.022 41.648-25.803l-56.967-39.387c-6.55 5.103-13.063 10.2-19.52 15.293C150.55 316.46 145.46 302.59 146.2 293.7l-18.622-1.554zm18.1 73.614c-26.1 8.6-62.087 36.255-77.104 60.324 4.948 8.63 10.393 15.223 16.05 20.14 25.846-8.953 59.85-37.406 74.733-60.257-3.007-6.6-7.454-13.386-13.68-20.207zm220.863 0c-6.225 6.822-10.67 13.61-13.68 20.21 14.886 22.85 48.89 51.3 74.736 60.255 5.656-4.918 11.1-11.51 16.05-20.14-15.018-24.07-51.004-51.724-77.105-60.325z" fill="#b41e00" fill-opacity="1" transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)" filter="url(#shadow-1)"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg41"
sodipodi:docname="conquete.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata45">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2077"
inkscape:window-height="1321"
id="namedview43"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="1573"
inkscape:window-y="459"
inkscape:window-maximized="0"
inkscape:current-layer="svg41" />
<defs
id="defs35">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
</defs>
<g
class=""
id="g39"
style="stroke:#000000;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none">
<path
d="m 27.084,18.248 c -44.987,128.23 116.066,259.672 287.412,362.826 -4.645,13.767 -5.585,27.628 -3.394,40.635 4.44,26.355 20.974,48.997 42.86,62.425 21.884,13.428 49.776,17.57 75.645,5.765 25.87,-11.804 48.69,-38.923 62.737,-84.654 l -17.865,-5.488 c -13,42.318 -32.806,64.094 -52.63,73.14 -19.825,9.047 -40.69,5.998 -58.116,-4.693 -17.425,-10.69 -30.75,-29.095 -34.205,-49.6 -3.455,-20.507 2.232,-43.318 24.677,-65.218 20.743,-20.24 32.068,-41.615 30.434,-61.24 l -18.622,1.552 c 0.74,8.89 -4.35,22.76 -16.684,37.486 C 222.057,230.8 73.838,128.622 27.084,18.248 Z m 458.05,0 C 451.34,98.03 364.527,173.53 270.93,247.166 c 19.492,15.878 39.56,31.622 59.195,45.012 110.756,-84.836 187.878,-180.243 155.01,-273.93 z M 127.58,292.146 c -1.634,19.626 9.69,41 30.434,61.24 22.445,21.9 28.132,44.712 24.677,65.218 -3.455,20.506 -16.78,38.91 -34.206,49.6 -17.425,10.692 -38.29,13.74 -58.115,4.694 -19.825,-9.046 -39.632,-30.822 -52.63,-73.14 l -17.865,5.488 c 14.046,45.73 36.867,72.85 62.736,84.654 25.87,11.805 53.763,7.663 75.648,-5.765 21.885,-13.428 38.42,-36.07 42.86,-62.426 2.19,-13.005 1.25,-26.863 -3.393,-40.628 13.986,-8.42 27.905,-17.022 41.648,-25.803 l -56.967,-39.387 c -6.55,5.103 -13.063,10.2 -19.52,15.293 C 150.55,316.46 145.46,302.59 146.2,293.7 l -18.622,-1.554 z m 18.1,73.614 c -26.1,8.6 -62.087,36.255 -77.104,60.324 4.948,8.63 10.393,15.223 16.05,20.14 25.846,-8.953 59.85,-37.406 74.733,-60.257 -3.007,-6.6 -7.454,-13.386 -13.68,-20.207 z m 220.863,0 c -6.225,6.822 -10.67,13.61 -13.68,20.21 14.886,22.85 48.89,51.3 74.736,60.255 5.656,-4.918 11.1,-11.51 16.05,-20.14 -15.018,-24.07 -51.004,-51.724 -77.105,-60.325 z"
fill="#b41e00"
fill-opacity="1"
transform="matrix(0.9,0,0,0.9,25.6,25.6)"
filter="url(#shadow-1)"
id="path37"
style="stroke:#000000;stroke-width:8.88888889;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -1 +1,191 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(255, 255, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="10" result="blur"></feGaussianBlur><feOffset dx="0" dy="10" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-3" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><path d="M400.9 104.8c-12 30-41 47.9-99.7 43.9-13.7-1.8-27.6-4.1-41.6-6.7-119.1-37.2-236.24-37.2-236.24 37.2 33.48-37.2 117.74-30.8 225.04-4 116.8 29.2 241.8 41.2 241.8-51.8-18.4 19.3-53.4 28.6-96.6 30.4 10-10.4 12.5-26.7 7.3-49zM147 187.5c-70.75-.3-123.64 16.1-123.64 66.1 33.48-37.2 117.74-34.8 225.04-8 116.8 29.2 241.8 45.2 241.8-47.8-35.4 37.2-130.2 39.6-230.6 8-37.7-11.9-78-18.2-112.6-18.3zm-23.9 69.6c-58.44-.2-99.74 15.6-99.74 70.9 33.48-37.2 122.34-44.3 225.04-18.6 121 30.2 241.8 37.2 241.8-37.2-35.4 37.2-132.1 22.6-230.6 4-48.4-7.5-96.5-19.1-136.5-19.1zm0 74.3c-58.44-.1-99.74 15.8-99.74 71 19.03-21.1 55.52-30.3 102.54-30.8-10.4 10.4-12.9 26.9-7.7 49.4 13.9-34.8 52-51.8 130.3-37.2 122.6 22.8 241.7 37.2 241.7-37.2-35.4 37.2-132.1 18.6-230.6 0-48.4-7.6-96.5-15.1-136.5-15.2z" fill="#48baff" fill-opacity="1" transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)" filter="url(#shadow-1)"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 256px; width: 256px;"
version="1.1"
id="svg52"
sodipodi:docname="debordement.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata56">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2673"
inkscape:window-height="1516"
id="namedview54"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg52" />
<defs
id="defs46">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(255, 255, 255, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="10"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="10"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-3"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood35" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite37" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur39" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset41" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite43" />
</filter>
</defs>
<g
class=""
id="g50"
style="stroke:#5959b2;stroke-width:7;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
<path
d="m 400.9,104.8 c -12,30 -41,47.9 -99.7,43.9 -13.7,-1.8 -27.6,-4.1 -41.6,-6.7 C 140.5,104.8 23.36,104.8 23.36,179.2 56.84,142 141.1,148.4 248.4,175.2 c 116.8,29.2 241.8,41.2 241.8,-51.8 -18.4,19.3 -53.4,28.6 -96.6,30.4 10,-10.4 12.5,-26.7 7.3,-49 z M 147,187.5 c -70.75,-0.3 -123.64,16.1 -123.64,66.1 33.48,-37.2 117.74,-34.8 225.04,-8 116.8,29.2 241.8,45.2 241.8,-47.8 -35.4,37.2 -130.2,39.6 -230.6,8 -37.7,-11.9 -78,-18.2 -112.6,-18.3 z m -23.9,69.6 C 64.66,256.9 23.36,272.7 23.36,328 56.84,290.8 145.7,283.7 248.4,309.4 c 121,30.2 241.8,37.2 241.8,-37.2 -35.4,37.2 -132.1,22.6 -230.6,4 -48.4,-7.5 -96.5,-19.1 -136.5,-19.1 z m 0,74.3 c -58.44,-0.1 -99.74,15.8 -99.74,71 19.03,-21.1 55.52,-30.3 102.54,-30.8 -10.4,10.4 -12.9,26.9 -7.7,49.4 13.9,-34.8 52,-51.8 130.3,-37.2 122.6,22.8 241.7,37.2 241.7,-37.2 -35.4,37.2 -132.1,18.6 -230.6,0 -48.4,-7.6 -96.5,-15.1 -136.5,-15.2 z"
fill="#48baff"
fill-opacity="1"
transform="matrix(0.9,0,0,0.9,25.6,25.6)"
filter="url(#shadow-1)"
id="path48"
style="stroke:#5959b2;stroke-width:7.77777778;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -33,8 +33,8 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2014"
inkscape:window-height="1404"
inkscape:window-width="2513"
inkscape:window-height="1633"
id="namedview32"
showgrid="false"
inkscape:zoom="2.2094112"
@ -43,7 +43,8 @@
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg30" />
inkscape:current-layer="svg30"
inkscape:document-rotation="0" />
<defs
id="defs24">
<filter
@ -114,11 +115,13 @@
<g
class=""
transform="translate(-2.1627108,-0.3)"
id="g28">
id="g28"
style="stroke:#000080;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none">
<path
d="m 342.5,17.9 c -3.1,11.63 -2.2,21.56 -23.8,25.11 20.3,-2.7 22.3,9.58 24.8,21.49 -2.8,1.94 -5.5,4.11 -8.1,6.49 -21.9,20.84 -33,41.11 -49,61.61 -6.3,1.2 5.3,-53.52 31.1,-79.87 C 225.1,40.92 207.6,268.4 236.4,275 184.7,293.4 163.8,176.7 177,117.7 c -37.1,3.9 -62,39.8 -67.9,60 2.8,27.1 6.1,55.1 38.7,80.9 -32.1,3.6 -42,-27.8 -55.31,-54 -78.59,104.9 105.91,106.8 136.01,94.5 -93,70.5 -149.62,52.3 -196.77,39 -40.48,85.1 61.46,56 107.57,35.7 -18.4,30.7 -72.25,37.6 -88.92,41 61.62,51.3 174.42,-67 200.02,-106.5 2.5,65.7 -74.3,134.4 -122.8,171.7 43.6,2.2 83.2,-17.9 102.4,-55.5 0,10.1 -4.1,22.6 -9.6,35.8 15,-2.1 39.6,-6.2 48.8,-24.2 25,-54.1 37.8,-93.1 15.3,-138.2 29.9,33.5 63.6,65.3 58.4,114.5 26.9,-15.6 48.8,-33.6 24.7,-60.1 14.1,1.4 23.6,7.7 32.8,13.7 13.9,-2.8 34.4,-19.9 33.7,-33 -31.6,-29.8 -83.4,-43.7 -133.8,-55.9 72.1,-19.8 136.9,-10.1 175.6,5.6 5,-11.7 9.4,-29.6 5.9,-41.9 -16.4,-9.7 -62.7,-7.8 -83.3,-5.6 17.7,-15.7 56.8,-21.1 81.3,-21.2 -2,-67.7 -162.6,27.8 -182.2,42.8 32.7,-59.1 123.2,-112.7 178.7,-121.1 -13.2,-31.1 -37.2,-34 -64.3,-22.4 2.4,-9.5 6.7,-17.49 23.4,-15.29 -21.6,-3.51 -20.7,-13.44 -23.8,-25.07 -2.4,13.55 -4.1,17.11 -19.4,26.67 14.3,-2.17 16.4,6.69 17.4,14.69 -53.5,24.4 -117.8,102.8 -135.1,132.5 -22.1,-24 51,-121.5 107.7,-187.46 -3.1,-9.48 -21.8,-6.31 -38.2,4.81 1.1,-8.63 0.7,-22.16 17.9,-19.54 -15.3,-9.6 -17,-13.16 -19.4,-26.71 z m -166.3,0.3 c 5.4,10.73 12.7,17.53 -1,34.56 13.8,-16.07 23.7,-7.13 33.9,0.22 -4.6,-7.19 -16.3,-17.67 -0.7,-27.86 -17.8,3.09 -21.4,1.57 -32.2,-6.92 z M 47.71,26.61 C 44.63,38.24 45.58,48.17 23.95,51.66 44.97,48.92 46.34,62.21 49.01,74.47 50.44,66.04 48.73,50.5 67.15,53.31 51.88,43.72 50.17,40.16 47.71,26.61 Z m 419.39,5.5 c 1.6,10.83 1.3,13.93 -7.8,25.07 13.1,-6.8 15.9,5.39 19.1,11.38 C 477.2,58.59 475,48.2 491.5,44.92 474.3,47.79 472.4,40.07 467.1,32.11 Z M 125.3,84.28 c -0.6,18.02 -12,17.32 -22.7,17.92 7,2.4 20.3,3 15.3,18.2 10.2,-11.6 13.3,-12.5 25.2,-12.6 -9.4,-4.3 -17.8,-4.9 -17.8,-23.52 z M 71.21,153.9 c -8.61,8.5 -12.85,17.5 -33.24,9.6 19.47,8.3 13.98,20.4 10.08,32.4 5.46,-6.6 11.9,-20.9 26.35,-9.1 -8.38,-16 -8.02,-19.9 -3.19,-32.9 z M 453.9,282.7 c -2.4,8.9 -1.7,16.5 -18.2,19.2 16,-2.1 17.1,8.1 19.2,17.5 1.1,-6.5 -0.2,-18.4 13.8,-16.3 -11.7,-7.3 -13,-10 -14.8,-20.4 z M 69.25,293.8 c -12.82,12.7 -16.72,13.5 -30.41,12.7 10.55,5.7 20.39,7.1 18.72,29 2.3,-21.1 15.46,-19.4 28.05,-19.1 -7.83,-3.3 -23.4,-5.3 -16.36,-22.6 z m 394.55,50.7 c 3.1,11.6 8.9,19.7 -8,33.6 16.8,-12.9 24.6,-2.2 33.2,7.1 -3.1,-8 -12.4,-20.6 4.9,-27.4 -18,-0.5 -21.3,-2.8 -30.1,-13.3 z m -139.2,72.1 c -2.7,12.3 -4.1,25.5 -25.1,22.8 21.6,3.5 20.7,13.4 23.8,25 2.4,-13.5 4.1,-17.1 19.4,-26.6 C 324.3,440.6 326,425 324.6,416.6 Z M 83.9,438.2 c -2.83,16 -4.84,20.2 -22.86,31.5 21.68,-3.3 19.67,15.1 21.33,25 3.19,-14.5 4.84,-30.1 29.63,-26.9 -25.5,-4.2 -24.43,-15.9 -28.1,-29.6 z m 366.2,11.4 c -7.3,9.6 -10.2,19.1 -31.5,14.2 20.4,5.4 16.8,18.1 14.6,30.6 4.5,-7.3 8.8,-22.4 24.8,-12.8 -10.6,-14.6 -10.8,-18.6 -7.9,-32 z"
fill="#ffffff"
fill-opacity="1"
id="path26" />
id="path26"
style="stroke:#000080;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -33,8 +33,8 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1680"
inkscape:window-height="1083"
inkscape:window-width="2665"
inkscape:window-height="1441"
id="namedview54"
showgrid="false"
inkscape:zoom="1.5990661"
@ -43,7 +43,8 @@
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg52" />
inkscape:current-layer="svg52"
inkscape:document-rotation="0" />
<defs
id="defs46">
<filter
@ -178,13 +179,15 @@
<g
class=""
id="g50"
transform="matrix(1.1287777,0,0,1.1287777,-32.967091,-40.026839)">
transform="matrix(1.1287777,0,0,1.1287777,-32.967091,-40.026839)"
style="stroke:#000000;stroke-width:4.42957014;stroke-miterlimit:4;stroke-dasharray:none">
<path
d="M 72.877,31.904 C 71.887,31.89 70.919,31.91 69.889,32.002 43.67,35.408 22.545,61.005 18,93.775 v 26.15 c 2.296,16.266 8.804,30.665 17.848,41.565 -6.58,1.237 -12.504,3.53 -17.848,6.717 v 23.813 c 22.983,0.386 43.265,14.03 57.31,34.318 C 89.56,246.92 98,274.598 98,305 98,335.402 89.56,363.08 75.31,383.662 61.266,403.95 40.984,417.592 18,417.98 v 8.577 L 23.03,494 H 30.7 L 138.904,332.176 140,304 c 0.732,-41.132 16.536,-59.598 32,-48 4.26,3.195 8.3,6.024 12.135,8.533 l 23.574,-35.258 c -21.607,-17.4 -59.103,-43.23 -90.68,-68.658 10.89,-13.647 17.894,-32.612 17.894,-53.627 C 134.924,65.494 108.478,32 76,32 74.88,31.964 73.867,31.918 72.877,31.904 Z m 366.246,0 c -0.99,0.014 -2.002,0.06 -3.123,0.096 -32.478,0 -58.924,33.494 -58.924,74.99 0,21.015 7.005,39.98 17.895,53.627 -31.577,25.43 -69.073,51.26 -90.68,68.658 l 23.577,35.258 A 232.03,232.03 0 0 0 340,256 c 15.464,-11.598 31.268,6.868 32,48 l 1.096,28.174 L 481.3,494 h 7.67 L 494,426.557 v -8.578 C 471.017,417.591 450.735,403.949 436.69,383.661 422.44,363.08 414,335.402 414,305 c 0,-30.402 8.44,-58.08 22.69,-78.662 14.045,-20.288 34.327,-33.932 57.31,-34.318 v -23.813 c -5.344,-3.187 -11.27,-5.48 -17.848,-6.717 9.044,-10.9 15.552,-25.3 17.848,-41.566 V 93.774 C 489.454,61.004 468.33,35.408 442.11,32.002 a 28.52,28.52 0 0 0 -2.987,-0.098 z m -290.365,14.854 40.068,110.215 47.34,-31.653 z m 214.484,0 -87.408,78.562 47.34,31.653 z M 230.25,150.93 213.625,162.047 435.588,494 h 24.057 z m 51.5,0 -14.922,22.316 12.03,17.99 19.517,-29.19 z M 18,210.018 v 189.964 c 15.993,-0.38 30.943,-9.855 42.512,-26.566 C 72.322,356.356 80,332.036 80,305 80,277.965 72.322,253.643 60.512,236.584 48.942,219.874 33.992,210.398 18,210.018 Z m 476,0 c -15.993,0.38 -30.943,9.855 -42.512,26.566 C 439.678,253.644 432,277.964 432,305 c 0,27.035 7.678,51.357 19.488,68.416 11.57,16.71 26.52,26.186 42.512,26.566 z M 233.145,223.62 52.355,494 H 76.412 L 245.174,241.61 Z M 134.748,439.14 98.066,494 h 34.55 z m 242.504,0 2.13,54.86 h 34.552 z"
fill="#003fb2"
fill-opacity="1"
transform="matrix(0.9,0,0,0.9,25.6,25.6)"
filter="url(#shadow-1)"
id="path48" />
id="path48"
style="stroke:#000000;stroke-width:4.92174461;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -1 +1,187 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-3" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><g transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)"><path d="M256 20C198.562 20 152 66.562 152 124C152 181.438 198.562 228 256 228C313.438 228 360 181.438 360 124C360 66.562 313.438 20 256 20Z" class="" fill="#087505" fill-opacity="0"></path><path d="M16 256L16 496L64 496C128 336 384 336 448 496L496 496L496 256L448 256L448 320L388 320L388 256L340 256L340 320L280 320L280 256L232 256L232 320L172 320L172 256L124 256L124 320L64 320L64 256L16 256Z" class="selected" fill="#087505" fill-opacity="1" filter="url(#shadow-3)"></path></g></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg56"
sodipodi:docname="maitrisee.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata60">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2352"
inkscape:window-height="1016"
id="namedview58"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg56" />
<defs
id="defs46">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-3"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood35" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite37" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur39" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset41" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite43" />
</filter>
</defs>
<path
d="m 16,256 v 240 h 48 c 64,-160 320,-160 384,0 h 48 V 256 h -48 v 64 h -60 v -64 h -48 v 64 h -60 v -64 h -48 v 64 h -60 v -64 h -48 v 64 H 64 v -64 z"
class="selected"
fill="#087505"
fill-opacity="1"
filter="url(#shadow-3)"
id="path50"
style="fill:#7db27d;fill-opacity:1;stroke:#000000;stroke-width:11.11111111;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.9,0,0,0.9,25.6,25.6)" />
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -1 +1,159 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><path d="M259.844 73.406l1.625 214.47-18.69.155-1.655-214.342C206.358 75.24 172.012 82.588 141 95.78c36.116 61.6 59.493 126.474 75.813 196.5l-18.22 4.25C182.46 227.29 159.504 163.924 124 103.78c-37.016 19.19-67.986 47.49-87.156 84.97 57.884 24.66 105.126 67.86 140.937 118.688l-15.28 10.75c-34.284-48.66-79.092-89.328-133.28-112.344-8.57 22.082-13.345 46.943-13.345 74.594 95.028 17.855 145.516 75.937 151.406 92 3.752 10.228-27.905 21.074-27.905 38.156 0 12.34 25.52 20.537 59.668 24.67-3.846-4.94-7.694-10.374-11.59-16.31l15.625-10.255c9.802 14.937 18.996 25.865 27.354 32.73 8.358 6.864 15.493 9.632 22.423 9.68 13.862.094 31.592-12.316 53.723-42.776l15.12 10.984c-4.31 5.93-8.553 11.385-12.76 16.35 36.362-4.006 64.125-12.375 64.125-25.074 0-17.92-35.487-28.412-33.72-39.97 2.31-15.09 55.528-74.91 156.626-90.187 0-28.807-5.284-54.622-14.72-77.437-57.322 22.41-104.478 64.46-140.22 115.188l-15.28-10.75c37.145-52.72 86.607-97.216 147.47-121.344-20.457-37.87-53.207-66.233-92.064-85.03-36.426 60.947-59.84 125.186-76.22 195.467l-18.186-4.25c16.523-70.893 40.278-136.5 77.156-198.78-32.42-12.835-68.166-19.55-104.062-20.094z" fill="#b41e00" fill-opacity="1" transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)" filter="url(#shadow-1)"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg41"
sodipodi:docname="pelerinage.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata45">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2530"
inkscape:window-height="1154"
id="namedview43"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg41" />
<defs
id="defs35">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
</defs>
<g
class=""
id="g39"
style="stroke:#000000;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none">
<path
d="m 259.844,73.406 1.625,214.47 -18.69,0.155 -1.655,-214.342 C 206.358,75.24 172.012,82.588 141,95.78 c 36.116,61.6 59.493,126.474 75.813,196.5 l -18.22,4.25 C 182.46,227.29 159.504,163.924 124,103.78 86.984,122.97 56.014,151.27 36.844,188.75 94.728,213.41 141.97,256.61 177.781,307.438 l -15.28,10.75 C 128.217,269.528 83.409,228.86 29.221,205.844 c -8.57,22.082 -13.345,46.943 -13.345,74.594 95.028,17.855 145.516,75.937 151.406,92 3.752,10.228 -27.905,21.074 -27.905,38.156 0,12.34 25.52,20.537 59.668,24.67 -3.846,-4.94 -7.694,-10.374 -11.59,-16.31 l 15.625,-10.255 c 9.802,14.937 18.996,25.865 27.354,32.73 8.358,6.864 15.493,9.632 22.423,9.68 13.862,0.094 31.592,-12.316 53.723,-42.776 l 15.12,10.984 c -4.31,5.93 -8.553,11.385 -12.76,16.35 36.362,-4.006 64.125,-12.375 64.125,-25.074 0,-17.92 -35.487,-28.412 -33.72,-39.97 2.31,-15.09 55.528,-74.91 156.626,-90.187 0,-28.807 -5.284,-54.622 -14.72,-77.437 -57.322,22.41 -104.478,64.46 -140.22,115.188 l -15.28,-10.75 c 37.145,-52.72 86.607,-97.216 147.47,-121.344 -20.457,-37.87 -53.207,-66.233 -92.064,-85.03 -36.426,60.947 -59.84,125.186 -76.22,195.467 l -18.186,-4.25 C 303.274,221.387 327.029,155.78 363.907,93.5 331.487,80.665 295.741,73.95 259.845,73.406 Z"
fill="#b41e00"
fill-opacity="1"
transform="matrix(0.9,0,0,0.9,25.6,25.6)"
filter="url(#shadow-1)"
id="path37"
style="stroke:#000000;stroke-width:8.88888889;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -1 +1,191 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-3" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><path d="M149.9 27.2L34.25 56.74v76.76L157.8 93.85l46.7-44.67-54.6-21.98zm132.8 57c-7.4.18-10.1 1.88.9 7.13C346.9 121.6 441.7 206.8 391.3 216.9 232.2 249 130.4 292.3 48.51 390.8 25.42 418.6 18 494.8 18 494.8h432.6s-139-21.1-147.8-75.7c-14.9-92.2 194.5-102.7 196.5-199.9.9-43.2-88.3-124.99-184.4-132.52-5.6-.44-22.7-2.71-32.2-2.48zm-163.5 40.9l-32.69 10.5v122.2l35.99-10-3.3-122.7z" fill="#b41e00" fill-opacity="1" transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)" filter="url(#shadow-1)"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg52"
sodipodi:docname="periple.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata56">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2760"
inkscape:window-height="1358"
id="namedview54"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg52" />
<defs
id="defs46">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-3"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood35" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite37" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur39" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset41" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite43" />
</filter>
</defs>
<g
class=""
id="g50"
style="stroke:#000000;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none">
<path
d="M 149.9,27.2 34.25,56.74 V 133.5 L 157.8,93.85 204.5,49.18 Z m 132.8,57 c -7.4,0.18 -10.1,1.88 0.9,7.13 C 346.9,121.6 441.7,206.8 391.3,216.9 232.2,249 130.4,292.3 48.51,390.8 25.42,418.6 18,494.8 18,494.8 h 432.6 c 0,0 -139,-21.1 -147.8,-75.7 C 287.9,326.9 497.3,316.4 499.3,219.2 500.2,176 411,94.21 314.9,86.68 309.3,86.24 292.2,83.97 282.7,84.2 Z m -163.5,40.9 -32.69,10.5 v 122.2 l 35.99,-10 z"
fill="#b41e00"
fill-opacity="1"
transform="matrix(0.9,0,0,0.9,25.6,25.6)"
filter="url(#shadow-1)"
id="path48"
style="stroke:#000000;stroke-width:8.88888889;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -1 +1,132 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><path d="M0 0h512v512H0z" fill="#4a4a4a" fill-opacity="0.5"></path><g class="" transform="translate(1,-1)" style=""><path d="M149.518 78.38c-6.55.117-12.45 1.736-17.35 4.91-7.465 4.84-11.765 12.904-13.063 21.34-2.595 16.874 4.747 36.355 19.862 52.31C154.08 172.893 177.643 185 208 185h2.438l-9.118-18.234c-22.194-1.554-38.46-10.777-49.287-22.205-11.885-12.545-16.543-28.064-15.138-37.19.702-4.564 2.402-7.25 5.062-8.974 2.66-1.724 7.113-2.875 14.756-1.326 13.078 2.65 34.233 13.948 62.205 39.284L220.27 135h23.408c-35.31-34.8-62.215-51.278-83.39-55.57-2.715-.55-5.363-.887-7.925-1.006-.96-.045-1.91-.06-2.845-.043zm212.964 0c-.935-.016-1.885 0-2.845.044-2.562.12-5.21.455-7.924 1.006-21.176 4.292-48.082 20.77-83.39 55.57h23.406l1.352 1.354c27.972-25.336 49.127-36.633 62.205-39.284 7.643-1.55 12.096-.398 14.756 1.326 2.66 1.725 4.36 4.41 5.062 8.973 1.405 9.126-3.253 24.645-15.138 37.19-10.827 11.43-27.093 20.652-49.287 22.206L301.562 185H304c30.357 0 53.92-12.106 69.033-28.06 15.115-15.955 22.457-35.436 19.862-52.31-1.298-8.436-5.598-16.5-13.063-21.34-4.9-3.174-10.8-4.793-17.35-4.91zM227.73 153l-8.78 8.777L229.564 183h52.875l10.61-21.223-8.777-8.777h-56.54zM73 201v46h142v-46H73zm160 0v270h46V201h-46zm64 0v46h142v-46H297zm-192 64v206h110V265H105zm192 0v206h110V265H297z" fill="#ffffff" fill-opacity="1"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg32"
sodipodi:docname="present.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata36">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2323"
inkscape:window-height="1657"
id="namedview34"
showgrid="false"
inkscape:zoom="2.0301699"
inkscape:cx="290.19906"
inkscape:cy="295.26229"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg32" />
<defs
id="defs24">
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
</defs>
<path
d="M0 0h512v512H0z"
fill="#4a4a4a"
fill-opacity="0.5"
id="path26"
style="fill:none" />
<g
class=""
transform="translate(1,-1)"
id="g30"
style="stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;fill:#7db27d;fill-opacity:1">
<path
d="M149.518 78.38c-6.55.117-12.45 1.736-17.35 4.91-7.465 4.84-11.765 12.904-13.063 21.34-2.595 16.874 4.747 36.355 19.862 52.31C154.08 172.893 177.643 185 208 185h2.438l-9.118-18.234c-22.194-1.554-38.46-10.777-49.287-22.205-11.885-12.545-16.543-28.064-15.138-37.19.702-4.564 2.402-7.25 5.062-8.974 2.66-1.724 7.113-2.875 14.756-1.326 13.078 2.65 34.233 13.948 62.205 39.284L220.27 135h23.408c-35.31-34.8-62.215-51.278-83.39-55.57-2.715-.55-5.363-.887-7.925-1.006-.96-.045-1.91-.06-2.845-.043zm212.964 0c-.935-.016-1.885 0-2.845.044-2.562.12-5.21.455-7.924 1.006-21.176 4.292-48.082 20.77-83.39 55.57h23.406l1.352 1.354c27.972-25.336 49.127-36.633 62.205-39.284 7.643-1.55 12.096-.398 14.756 1.326 2.66 1.725 4.36 4.41 5.062 8.973 1.405 9.126-3.253 24.645-15.138 37.19-10.827 11.43-27.093 20.652-49.287 22.206L301.562 185H304c30.357 0 53.92-12.106 69.033-28.06 15.115-15.955 22.457-35.436 19.862-52.31-1.298-8.436-5.598-16.5-13.063-21.34-4.9-3.174-10.8-4.793-17.35-4.91zM227.73 153l-8.78 8.777L229.564 183h52.875l10.61-21.223-8.777-8.777h-56.54zM73 201v46h142v-46H73zm160 0v270h46V201h-46zm64 0v46h142v-46H297zm-192 64v206h110V265H105zm192 0v206h110V265H297z"
fill="#ffffff"
fill-opacity="1"
id="path28"
style="stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;fill:#7db27d;fill-opacity:1" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1 +1,159 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><path d="M324.97 17.54c.03.034.057.07.087.106l-34.924 32.428 36.904-3.752-15.396 30.12 38.048-16.075c26.147 69.965.623 154.277-52.555 166.262-6.554-25.37-34.13-37.945-36.055-57.382.303.093.604.187.912.27 4.833 1.295 9.736 1.183 14.274-.07l25.138 22.89 20.653-16.377c-7.363 2.836-28.588-1.402-33.25-13.923 3.154-3.24 5.55-7.284 6.793-11.922.485-1.813.757-3.635.86-5.445l11.524 22.777 5.22-16.94c7.625 5.575 12.474 13.605 11.49 21.136l16.673-29.4-72.14-29.56-58.057-48.03 17.1 31.25-48.206-19.753 35.14 31.237c-40.602 28.158-22.085 85.04-1.796 119.29-57.5-9.685-103.128-77.435-95.763-145.03l49.21-21.366-31.08-5.14 29.207-33.417-32.015 11.54c.037-.067.07-.135.107-.202-168.36 66.33-116.413 367-63.728 417.99-.19-1.317-.364-2.58-.54-3.855-14.922-56.244-20.375-125.624-17.5-190.53 3.02-68.237 14.834-131.16 36.794-169.522l16.22 9.283c-18.894 33.008-31.4 94.563-34.345 161.064-1.942 43.86.106 90.022 6.275 132.082 6.124 1.892 15.046 9.615 27.295 23.24-4.818-13.35-6.78-26.5-6.482-38.28 20.286 41.665 67.34 69.234 104.633 62.308 22.444-4.17 41.803-12.73 57.81-24.475l7.31 15.418c-20.068 5.036-22.807 32.635-14.737 55.112 1.748-19.882 11.36-29.794 21.73-32.303-6.598 15.867-4.698 30.623-3.117 44.158 10.15-12.147 21.47-23.793 23.628-39.354 8.738 7.332 12.317 21.49 1.194 39.057 26.32-15.473 31.565-41.994 7.978-57.685l-32.07-34.297c5.918-5.55 11.24-11.6 15.947-18.066l39.28 15.776c-3.942 13.69 5.833 31.512 19.77 43.31-8.055-17.288-4.826-30.08 2.562-37.103 1.63 17.39 10.64 29.193 18.733 40.064 2.73-15.665 6.79-31.493-.213-45.987 11.016 1.56 21.2 11.568 20.338 31.877 14.362-25.313 6.11-49.702-20.742-51.52l-71.135-9.892c12.757-22.982 18.676-49.823 17.015-77.475 14.188-34.708 50.058-11.816 54.523 49.16C394.924 262.27 434.58 304 426.324 367.13c11.808-23.38 21.835-35.013 29.862-36.247-10.772-91.925-40.458-191.57-77.637-250.748l15.823-9.942c50.328 80.106 85.112 220.65 84.88 331.547 42.403-115.912-2.347-356.61-154.282-384.2zm-29.458 476.913l-.026.016-.015.05c.015-.02.027-.044.042-.067zm26.543-318.492h.01v-.007l-.01.008zm-53.348-41.716c.866-.027 1.757.073 2.652.313 4.774 1.28 7.467 5.945 6.187 10.72-1.28 4.776-5.943 7.47-10.72 6.19-4.775-1.28-7.468-5.943-6.188-10.72.96-3.584 3.823-5.993 7.21-6.435.282-.036.568-.06.857-.068zM204.904 297.13c11.878-.2 22.637 6.756 26.172 22.487-.008 35.88-9.557 68.823-42.137 77.412-27.624 7.283-69.725-11.398-84.12-53.663 12.28-21.078 37.362-21.986 62.838 22.592-12.583-41.596 14.386-68.444 37.246-68.83z" fill="#003fb2" fill-opacity="1" filter="url(#shadow-1)" transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg41"
sodipodi:docname="rencontre.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata45">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1683"
inkscape:window-height="1292"
id="namedview43"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg41" />
<defs
id="defs35">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
</defs>
<g
class=""
id="g39"
style="stroke:#000000;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none">
<path
d="m 324.97,17.54 c 0.03,0.034 0.057,0.07 0.087,0.106 l -34.924,32.428 36.904,-3.752 -15.396,30.12 38.048,-16.075 c 26.147,69.965 0.623,154.277 -52.555,166.262 -6.554,-25.37 -34.13,-37.945 -36.055,-57.382 0.303,0.093 0.604,0.187 0.912,0.27 4.833,1.295 9.736,1.183 14.274,-0.07 l 25.138,22.89 20.653,-16.377 c -7.363,2.836 -28.588,-1.402 -33.25,-13.923 3.154,-3.24 5.55,-7.284 6.793,-11.922 0.485,-1.813 0.757,-3.635 0.86,-5.445 l 11.524,22.777 5.22,-16.94 c 7.625,5.575 12.474,13.605 11.49,21.136 l 16.673,-29.4 -72.14,-29.56 -58.057,-48.03 17.1,31.25 -48.206,-19.753 35.14,31.237 c -40.602,28.158 -22.085,85.04 -1.796,119.29 -57.5,-9.685 -103.128,-77.435 -95.763,-145.03 l 49.21,-21.366 -31.08,-5.14 29.207,-33.417 -32.015,11.54 c 0.037,-0.067 0.07,-0.135 0.107,-0.202 -168.36,66.33 -116.413,367 -63.728,417.99 -0.19,-1.317 -0.364,-2.58 -0.54,-3.855 C 53.883,390.953 48.43,321.573 51.305,256.667 54.325,188.43 66.139,125.507 88.099,87.145 l 16.22,9.283 c -18.894,33.008 -31.4,94.563 -34.345,161.064 -1.942,43.86 0.106,90.022 6.275,132.082 6.124,1.892 15.046,9.615 27.295,23.24 -4.818,-13.35 -6.78,-26.5 -6.482,-38.28 20.286,41.665 67.34,69.234 104.633,62.308 22.444,-4.17 41.803,-12.73 57.81,-24.475 l 7.31,15.418 c -20.068,5.036 -22.807,32.635 -14.737,55.112 1.748,-19.882 11.36,-29.794 21.73,-32.303 -6.598,15.867 -4.698,30.623 -3.117,44.158 10.15,-12.147 21.47,-23.793 23.628,-39.354 8.738,7.332 12.317,21.49 1.194,39.057 26.32,-15.473 31.565,-41.994 7.978,-57.685 l -32.07,-34.297 c 5.918,-5.55 11.24,-11.6 15.947,-18.066 l 39.28,15.776 c -3.942,13.69 5.833,31.512 19.77,43.31 -8.055,-17.288 -4.826,-30.08 2.562,-37.103 1.63,17.39 10.64,29.193 18.733,40.064 2.73,-15.665 6.79,-31.493 -0.213,-45.987 11.016,1.56 21.2,11.568 20.338,31.877 14.362,-25.313 6.11,-49.702 -20.742,-51.52 l -71.135,-9.892 c 12.757,-22.982 18.676,-49.823 17.015,-77.475 14.188,-34.708 50.058,-11.816 54.523,49.16 27.425,-80.347 67.081,-38.617 58.825,24.513 11.808,-23.38 21.835,-35.013 29.862,-36.247 -10.772,-91.925 -40.458,-191.57 -77.637,-250.748 l 15.823,-9.942 c 50.328,80.106 85.112,220.65 84.88,331.547 C 521.655,285.828 476.905,45.13 324.97,17.54 Z m -29.458,476.913 -0.026,0.016 -0.015,0.05 c 0.015,-0.02 0.027,-0.044 0.042,-0.067 z m 26.543,-318.492 h 0.01 v -0.007 l -0.01,0.008 z m -53.348,-41.716 c 0.866,-0.027 1.757,0.073 2.652,0.313 4.774,1.28 7.467,5.945 6.187,10.72 -1.28,4.776 -5.943,7.47 -10.72,6.19 -4.775,-1.28 -7.468,-5.943 -6.188,-10.72 0.96,-3.584 3.823,-5.993 7.21,-6.435 0.282,-0.036 0.568,-0.06 0.857,-0.068 z M 204.904,297.13 c 11.878,-0.2 22.637,6.756 26.172,22.487 -0.008,35.88 -9.557,68.823 -42.137,77.412 -27.624,7.283 -69.725,-11.398 -84.12,-53.663 12.28,-21.078 37.362,-21.986 62.838,22.592 -12.583,-41.596 14.386,-68.444 37.246,-68.83 z"
fill="#003fb2"
fill-opacity="1"
filter="url(#shadow-1)"
transform="matrix(0.9,0,0,0.9,25.6,25.6)"
id="path37"
style="stroke:#000000;stroke-width:5.55555556;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -1 +1,160 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><path d="M149.688 85.625c-1.234.005-2.465.033-3.72.063-33.913.806-75.48 10.704-127.25 33.718V362.78c60.77-28.82 106.718-37.067 144.22-33.092 33.502 3.55 59.685 16.66 83.562 31.187v-242.97c-23.217-17.744-50.195-30.04-85.97-32-3.52-.192-7.142-.296-10.843-.28zm211.968 0c-3.7-.016-7.322.088-10.844.28-35.773 1.96-62.75 14.256-85.968 32v242.97c23.876-14.527 50.06-27.637 83.562-31.188 37.502-3.974 83.45 4.272 144.22 33.094V119.407c-51.77-23.014-93.337-32.912-127.25-33.72-1.255-.028-2.486-.056-3.72-.06zm5.72 261.78c-1.038-.002-2.074.017-3.095.033-4.808.075-9.43.37-13.905.843-33.932 3.597-59.603 17.976-85.53 34.44v.28c-6.554-1.99-13.02-2.37-19.408-.97-25.566-16.177-51.003-30.202-84.468-33.75-5.595-.592-11.44-.883-17.564-.842-32.04.213-71.833 9.778-124.687 35.937v42.53c60.77-28.823 106.714-37.067 144.218-33.092 18.545 1.965 34.837 6.845 49.75 13.28-4.682 6.064-9.308 13.268-13.875 21.688h117.156c-5.93-8.22-11.798-15.414-17.626-21.56 14.996-6.503 31.39-11.43 50.062-13.408 37.503-3.974 83.448 4.27 144.22 33.094v-42.53c-53.16-26.31-93.115-35.863-125.25-35.97z" fill="#087505" fill-opacity="1" transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)" filter="url(#shadow-1)"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg41"
sodipodi:docname="reserve.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata45">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1963"
inkscape:window-height="1393"
id="namedview43"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="257.8922"
inkscape:cy="255.21477"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg41" />
<defs
id="defs35">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
</defs>
<g
class=""
id="g39"
style="stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill:#7db27d;fill-opacity:1"
transform="translate(0,0)">
<path
d="M149.688 85.625c-1.234.005-2.465.033-3.72.063-33.913.806-75.48 10.704-127.25 33.718V362.78c60.77-28.82 106.718-37.067 144.22-33.092 33.502 3.55 59.685 16.66 83.562 31.187v-242.97c-23.217-17.744-50.195-30.04-85.97-32-3.52-.192-7.142-.296-10.843-.28zm211.968 0c-3.7-.016-7.322.088-10.844.28-35.773 1.96-62.75 14.256-85.968 32v242.97c23.876-14.527 50.06-27.637 83.562-31.188 37.502-3.974 83.45 4.272 144.22 33.094V119.407c-51.77-23.014-93.337-32.912-127.25-33.72-1.255-.028-2.486-.056-3.72-.06zm5.72 261.78c-1.038-.002-2.074.017-3.095.033-4.808.075-9.43.37-13.905.843-33.932 3.597-59.603 17.976-85.53 34.44v.28c-6.554-1.99-13.02-2.37-19.408-.97-25.566-16.177-51.003-30.202-84.468-33.75-5.595-.592-11.44-.883-17.564-.842-32.04.213-71.833 9.778-124.687 35.937v42.53c60.77-28.823 106.714-37.067 144.218-33.092 18.545 1.965 34.837 6.845 49.75 13.28-4.682 6.064-9.308 13.268-13.875 21.688h117.156c-5.93-8.22-11.798-15.414-17.626-21.56 14.996-6.503 31.39-11.43 50.062-13.408 37.503-3.974 83.448 4.27 144.22 33.094v-42.53c-53.16-26.31-93.115-35.863-125.25-35.97z"
fill="#087505"
fill-opacity="1"
transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)"
filter="url(#shadow-1)"
id="path37"
style="stroke:#000000;stroke-width:11.11111111;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill:#7db27d;fill-opacity:1" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -11,7 +11,7 @@
style="height: 256px; width: 256px;"
version="1.1"
id="svg24"
sodipodi:docname="sort-reserve-humide3.svg"
sodipodi:docname="sort-reserve-humide.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata30">
@ -35,68 +35,70 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2794"
inkscape:window-height="1756"
inkscape:window-width="2660"
inkscape:window-height="1472"
id="namedview26"
showgrid="false"
inkscape:zoom="2.8786993"
inkscape:cx="323.66586"
inkscape:cy="227.70764"
inkscape:zoom="1.4393497"
inkscape:cx="557.39157"
inkscape:cy="411.60399"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg24" />
inkscape:current-layer="svg24"
inkscape:document-rotation="0" />
<g
id="g881"
transform="translate(2.1482304,2.80716)">
transform="translate(2.1482304,2.80716)"
style="fill:#ffffff;stroke:#7d7db2;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal">
<path
d="m 243.94189,104.37921 -82.23331,178.13543 82.23331,27.44784 z"
class=""
fill="#f4e3d7"
fill-opacity="1"
id="path2"
style="stroke-width:1.10232" />
style="fill:#ffffff;stroke:#7d7db2;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
d="m 263.7837,104.37921 v 205.58327 l 82.23331,-27.44784 z"
class=""
fill="#f4e3d7"
fill-opacity="1"
id="path4"
style="stroke-width:1.10232" />
style="fill:#ffffff;stroke:#7d7db2;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
d="M 168.21228,221.005 18.274279,239.7445 141.75653,278.32581 Z"
class=""
fill="#f4e3d7"
fill-opacity="1"
id="path6"
style="stroke-width:1.10232" />
style="fill:#ffffff;stroke:#7d7db2;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
d="M 339.51331,221.005 365.96906,278.32581 489.5395,239.7445 Z"
class=""
fill="#f4e3d7"
fill-opacity="1"
id="path8"
style="stroke-width:1.10232" />
style="fill:#ffffff;stroke:#7d7db2;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
d="M -0.24475089,254.73609 114.97007,398.80973 230.27308,326.7178 Z"
class=""
fill="#f4e3d7"
fill-opacity="1"
id="path10"
style="stroke-width:1.10232" />
style="fill:#ffffff;stroke:#7d7db2;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
d="M 507.94829,254.73609 277.45251,326.7178 392.75552,398.80973 Z"
class=""
fill="#f4e3d7"
fill-opacity="1"
id="path12"
style="stroke-width:1.10232" />
style="fill:#ffffff;stroke:#7d7db2;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
d="M 253.8628,335.42615 147.37837,402.00647 H 360.34722 Z"
class=""
fill="#f4e3d7"
fill-opacity="1"
id="path14"
style="stroke-width:1.10232" />
style="fill:#ffffff;stroke:#7d7db2;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -37,13 +37,14 @@
inkscape:window-height="1268"
id="namedview34"
showgrid="false"
inkscape:zoom="1.9888504"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:zoom="0.7031648"
inkscape:cx="1044.9871"
inkscape:cy="610.71305"
inkscape:window-x="518"
inkscape:window-y="680"
inkscape:window-maximized="0"
inkscape:current-layer="svg32" />
inkscape:current-layer="svg32"
inkscape:document-rotation="0" />
<defs
id="defs24">
<filter
@ -121,12 +122,12 @@
class=""
transform="translate(1,-1)"
id="g30"
style="fill:#f4e3d7">
style="fill:#ffffff;fill-opacity:1;stroke:#7d7db2;stroke-width:13;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
<path
d="m 373.563,18.406 c -15.616,-0.167 -27.91,4.622 -32.563,14.75 -22.778,49.605 -48.743,87.14 -79.094,117.28 3.047,1.015 6.046,2.29 8.938,3.783 12.987,6.708 25.268,17.78 35.312,30.843 10.044,13.062 17.85,28.114 20.78,43.5 0.746,3.908 1.16,7.885 1.158,11.843 38.97,-24.36 85.058,-41.223 140.875,-51.312 14.91,-2.697 23.652,-28.632 21.405,-58.656 l -35.156,-1 30.56,-24.813 C 481.63,90.117 474.765,75.87 464.623,63.904 449.095,45.59 428.193,32.528 407.903,25.218 l -25.963,15.594 2.812,-21.5 c -3.875,-0.55 -7.61,-0.87 -11.188,-0.907 z M 246.938,166.562 c -1.063,0.052 -2.06,0.226 -3,0.47 -11.976,10.254 -24.61,19.597 -37.938,28.28 0.842,0.33 1.67,0.667 2.5,1.032 14.123,6.192 27.438,17.145 38.47,30.625 13.356,16.322 23.62,36.94 25.624,57.75 10.334,-10.367 21.24,-19.943 32.844,-28.72 4.096,-6.555 4.93,-14.468 3.125,-23.938 -2.184,-11.46 -8.642,-24.43 -17.25,-35.625 -8.61,-11.194 -19.38,-20.622 -29.063,-25.625 -6.052,-3.126 -11.154,-4.45 -15.313,-4.25 z m -61.907,43.282 c -1.385,0.053 -2.69,0.27 -3.968,0.562 -37,20.762 -79.088,37.985 -127.312,56 0.574,0.042 1.14,0.093 1.72,0.156 10.627,1.156 21.076,5.008 31.155,10.875 L 124.313,261 108.5,293.72 c 5.995,5.432 11.803,11.477 17.344,18 20.76,24.434 37.964,55.865 47.094,88.092 0.002,0.01 -0.003,0.022 0,0.032 2.98,10.508 5.11,20.916 6.312,31 20.99,-48.438 44.38,-89.26 72.344,-123 7.3,-21.48 -2.186,-48.408 -19.063,-69.03 -9.44,-11.538 -20.976,-20.718 -31.53,-25.345 -5.936,-2.604 -11.27,-3.808 -15.97,-3.626 z m 141.626,54.844 c -7.31,5.05 -14.462,10.51 -21.437,16.312 39.16,9.26 60.953,35.722 80.655,62.156 10.464,14.04 20.598,28.11 33.125,40.688 24.19,9.147 43.17,6.38 63.906,-14.938 -92.165,-27.78 -96.11,-92.61 -156.25,-104.22 z M 48.594,284.906 c -10.873,0.225 -18.26,5.755 -23.344,16.594 -5.81,12.387 -7.114,32.47 0.438,57.063 5.75,18.73 16.52,37.718 28.75,51.625 12.23,13.906 25.9,22.076 35.374,22.406 h 0.032 c 3.717,0.13 6.553,-0.682 8.812,-2.75 l -0.187,-0.188 2.093,-2.094 c 0.793,-1.168 1.52,-2.548 2.187,-4.187 2.81,-6.9 3.28,-18.552 -1.844,-33 -6.885,-19.417 -19.12,-31.932 -33.375,-34.78 l -22.968,-4.564 19.813,-12.5 38.47,-24.186 c -16.65,-16.822 -34.55,-27.607 -49.376,-29.22 -1.7,-0.184 -3.323,-0.25 -4.876,-0.218 z m 236.25,5.406 -24.53,25.375 c 100.442,17.878 55.45,141.005 159.31,176.188 l -24.78,-57.28 c 32.766,16.15 67.39,22.623 97.72,12.03 -135.77,-41.948 -96.32,-126.983 -207.72,-156.313 z m -169.47,38.22 -25.968,16.343 c 13.18,8.5 23.21,22.565 29.125,39.25 2.57,7.244 4.133,14.205 4.75,20.78 l 23.44,-23.374 c -8.08,-19.19 -19.035,-37.566 -31.345,-53 z m 38.376,72.374 -42.063,42 -0.156,-0.156 c -4.255,3.942 -9.456,6.765 -15.186,7.938 23.268,14.873 44.644,19.346 56.812,9.562 4.26,-3.426 7.043,-8.36 8.47,-14.406 -0.41,-12.684 -2.602,-26.615 -6.657,-40.906 -0.382,-1.346 -0.806,-2.686 -1.22,-4.032 z"
fill="#ffffff"
fill-opacity="1"
id="path28"
style="fill:#f4e3d7" />
style="fill:#ffffff;fill-opacity:1;stroke:#7d7db2;stroke-width:13;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -33,17 +33,18 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1553"
inkscape:window-height="1145"
inkscape:window-width="1879"
inkscape:window-height="1569"
id="namedview34"
showgrid="false"
inkscape:zoom="1.4374483"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-x="460"
inkscape:window-y="170"
inkscape:window-maximized="0"
inkscape:current-layer="svg32" />
inkscape:current-layer="svg32"
inkscape:document-rotation="0" />
<defs
id="defs24">
<filter
@ -116,11 +117,11 @@
fill="#4a4a4a"
fill-opacity="0.5"
id="path26"
style="fill:#333333;fill-opacity:0.69999999" />
style="fill:#3a174d;fill-opacity:0.69999999" />
<path
d="m 329.547,18.115 c -30.61,99.22 -47.583,151.205 -86.88,156.778 -18.626,2.642 -42.988,-19.225 -70.16,-50.29 15.47,30.702 21.275,55.265 10.845,61.348 -15.787,9.21 -51.095,-6.94 -106.815,-30.837 31.653,20.827 83.667,50.18 77.358,58.63 -8.074,10.81 -77.23,-4.706 -130.866,-13.163 89.224,25.398 137.61,55.572 137.61,82.387 0,18.423 -48.845,62.18 -71.888,83.928 19.558,-11.397 64.736,-24.44 76.777,-2.99 13.335,23.758 -6.577,61.6 -28.5,128.027 31.39,-46.19 73.363,-108.122 90.734,-106.49 12.248,1.15 -4.805,60.692 -10.47,98.71 21.547,-80.082 46.534,-132.5 90.153,-131.015 29.665,1.01 58.022,30.762 88.99,52.047 -16.188,-19.81 -45.975,-47.99 -39.55,-53.243 8.9,-7.276 56.48,12.547 94.224,25.726 -24.982,-17.962 -68.644,-43.88 -61.653,-50.852 10.417,-10.387 72.436,1.332 117.49,7.178 C 419.2,303.266 370.1,289.807 359.616,255.461 c -5.283,-17.31 10.853,-40.3 40.89,-68.038 -31.377,17.197 -54.588,28.694 -63.737,12.392 -11.576,-20.622 11.374,-65.883 35.238,-126.06 -21.135,32.47 -48.532,83.487 -55.254,77.174 -8.972,-8.425 5.598,-77.597 12.795,-132.813 h -0.003 z M 21.45,18.27 V 41.63 C 69.97,69.067 116.703,104.02 162.783,144.416 129.015,102.731 95.443,60.626 68.758,18.27 Z m 175.79,0 c 18.465,37.356 34.503,76.96 48.475,117.97 -5.007,-39.79 -9.898,-79.367 -12.264,-117.97 h -36.21 z m 160.022,0 c -7.18,26.672 -15.416,53.437 -25.116,80.593 15.405,-27.34 30.698,-54.514 46.723,-80.593 H 357.26 Z m 105.123,0 c -27.895,50.718 -63.73,99.873 -105.707,147.755 46.514,-37.68 92.9,-75.343 140.164,-103.37 V 18.27 Z m 34.455,160.02 c -36.077,17.98 -74.843,34.036 -115.635,47.89 38.908,-6.17 77.882,-12.105 115.635,-15.77 z m -206.266,42.868 c 9.35,0 16.93,7.58 16.93,16.932 0,9.35 -7.58,16.93 -16.93,16.93 -9.35,0 -16.93,-7.58 -16.93,-16.93 0,-9.35 7.58,-16.932 16.93,-16.932 z m -52.06,1.598 c 15.508,0 28.082,12.57 28.082,28.08 0,9.718 -4.938,18.28 -12.44,23.322 3.614,3.843 5.842,9.002 5.842,14.694 0,11.86 -9.613,21.474 -21.473,21.474 -11.86,0 -21.474,-9.615 -21.474,-21.474 0,-5.687 2.228,-10.842 5.837,-14.684 -7.51,-5.04 -12.453,-13.608 -12.453,-23.332 0,-15.51 12.57,-28.08 28.08,-28.08 z M 21.45,234.078 v 38.547 c 31.87,-4.584 64.46,-5.693 97.532,-4.09 -33.727,-10.19 -67.407,-20.35 -97.53,-34.457 z m 265.82,28.377 c 9.35,0 16.93,7.58 16.93,16.932 0,9.35 -7.58,16.93 -16.93,16.93 -9.35,0 -16.932,-7.58 -16.932,-16.93 0,-9.35 7.58,-16.932 16.932,-16.932 z M 129.494,294.05 c -36.153,11.99 -72.24,20.293 -108.043,24.313 v 51.393 c 30.994,-28.64 69.426,-52.264 108.044,-75.703 v -0.002 z m 5.84,88.645 c -37.923,30.72 -75.607,61.482 -113.885,87.02 v 23.943 h 29.784 c 24.02,-37.76 52.365,-74.765 84.1,-110.963 z m 202.07,11.096 c 26.807,33.093 53.226,66.414 76.508,99.87 h 59.568 c -46.586,-27.078 -91.877,-61.12 -136.074,-99.87 z m -52.562,9.93 c -3.175,30.26 -6.39,60.5 -10.512,89.94 h 20.44 c -4.51,-29.083 -7.904,-59.17 -9.926,-89.94 z m 26.865,13.432 c 11.346,25.473 22.374,51.18 32.705,76.508 h 23.36 c -19.395,-23.9 -38.105,-49.64 -56.065,-76.508 z"
fill="#602000"
fill-opacity="1"
id="path28"
style="fill:#401060;fill-opacity:1" />
style="fill:#380f4d;fill-opacity:1" />
</svg>

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -1 +1,159 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(248, 231, 28, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="40" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-6" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter><filter id="shadow-7" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(72, 186, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="8" result="blur"></feGaussianBlur><feOffset dx="5" dy="15" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" transform="translate(0,0)" style=""><path d="M103.432 17.844c-1.118.005-2.234.032-3.348.08-2.547.11-5.083.334-7.604.678-20.167 2.747-39.158 13.667-52.324 33.67-24.613 37.4 2.194 98.025 56.625 98.025.536 0 1.058-.012 1.583-.022v.704h60.565c-10.758 31.994-30.298 66.596-52.448 101.43-2.162 3.4-4.254 6.878-6.29 10.406l34.878 35.733-56.263 9.423c-32.728 85.966-27.42 182.074 48.277 182.074v-.002l9.31.066c23.83-.57 46.732-4.298 61.325-12.887 4.174-2.458 7.63-5.237 10.467-8.42h-32.446c-20.33 5.95-40.8-6.94-47.396-25.922-8.956-25.77 7.52-52.36 31.867-60.452 5.803-1.93 11.723-2.834 17.565-2.834v-.406h178.33c-.57-44.403 16.35-90.125 49.184-126 23.955-26.176 42.03-60.624 51.3-94.846l-41.225-24.932 38.272-6.906-43.37-25.807h-.005l.002-.002.002.002 52.127-8.85c-5.232-39.134-28.84-68.113-77.37-68.113C341.14 32.26 222.11 35.29 149.34 28.496c-14.888-6.763-30.547-10.723-45.908-10.652zm.464 18.703c13.137.043 27.407 3.804 41.247 10.63l.033-.07c4.667 4.735 8.542 9.737 11.68 14.985H82.92l10.574 14.78c10.608 14.83 19.803 31.99 21.09 42.024.643 5.017-.11 7.167-1.814 8.836-1.705 1.67-6.228 3.875-15.99 3.875-40.587 0-56.878-44.952-41.012-69.06C66.238 46.64 79.582 39.22 95.002 37.12c2.89-.395 5.863-.583 8.894-.573zM118.5 80.78h46.28c4.275 15.734 3.656 33.07-.544 51.51H131.52c1.9-5.027 2.268-10.574 1.6-15.77-1.527-11.913-7.405-24.065-14.62-35.74zm101.553 317.095c6.44 6.84 11.192 15.31 13.37 24.914 3.797 16.736 3.092 31.208-1.767 43.204-4.526 11.175-12.576 19.79-22.29 26h237.19c14.448 0 24.887-5.678 32.2-14.318 7.312-8.64 11.2-20.514 10.705-32.352-.186-4.473-.978-8.913-2.407-13.18l-69.91-8.205 42.017-20.528c-8.32-3.442-18.64-5.537-31.375-5.537H220.053zm-42.668.506c-1.152-.003-2.306.048-3.457.153-2.633.242-5.256.775-7.824 1.63-15.11 5.02-25.338 21.54-20.11 36.583 3.673 10.57 15.347 17.71 25.654 13.938l1.555-.57h43.354c.946-6.36.754-13.882-1.358-23.192-3.71-16.358-20.543-28.483-37.815-28.54z" fill="#b41e00" fill-opacity="1" transform="translate(25.6, 25.6) scale(0.9, 0.9) rotate(0, 256, 256) skewX(0) skewY(0)" filter="url(#shadow-1)"></path></g></svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 512 512"
style="height: 512px; width: 512px;"
version="1.1"
id="svg41"
sodipodi:docname="urgence.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata45">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2038"
inkscape:window-height="1243"
id="namedview43"
showgrid="false"
inkscape:zoom="1.4355469"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg41" />
<defs
id="defs35">
<filter
id="shadow-1"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(248, 231, 28, 1)"
result="flood"
id="feFlood2" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite4" />
<feGaussianBlur
in="composite"
stdDeviation="40"
result="blur"
id="feGaussianBlur6" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset8" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite10" />
</filter>
<filter
id="shadow-6"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood13" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite15" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur17" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset19" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite21" />
</filter>
<filter
id="shadow-7"
height="300%"
width="300%"
x="-100%"
y="-100%">
<feFlood
flood-color="rgba(72, 186, 255, 1)"
result="flood"
id="feFlood24" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="atop"
result="composite"
id="feComposite26" />
<feGaussianBlur
in="composite"
stdDeviation="8"
result="blur"
id="feGaussianBlur28" />
<feOffset
dx="5"
dy="15"
result="offset"
id="feOffset30" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
id="feComposite32" />
</filter>
</defs>
<g
class=""
id="g39"
style="stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none">
<path
d="m 103.432,17.844 c -1.118,0.005 -2.234,0.032 -3.348,0.08 -2.547,0.11 -5.083,0.334 -7.604,0.678 -20.167,2.747 -39.158,13.667 -52.324,33.67 -24.613,37.4 2.194,98.025 56.625,98.025 0.536,0 1.058,-0.012 1.583,-0.022 v 0.704 h 60.565 c -10.758,31.994 -30.298,66.596 -52.448,101.43 -2.162,3.4 -4.254,6.878 -6.29,10.406 l 34.878,35.733 -56.263,9.423 c -32.728,85.966 -27.42,182.074 48.277,182.074 v -0.002 l 9.31,0.066 c 23.83,-0.57 46.732,-4.298 61.325,-12.887 4.174,-2.458 7.63,-5.237 10.467,-8.42 h -32.446 c -20.33,5.95 -40.8,-6.94 -47.396,-25.922 -8.956,-25.77 7.52,-52.36 31.867,-60.452 5.803,-1.93 11.723,-2.834 17.565,-2.834 v -0.406 h 178.33 c -0.57,-44.403 16.35,-90.125 49.184,-126 23.955,-26.176 42.03,-60.624 51.3,-94.846 l -41.225,-24.932 38.272,-6.906 -43.37,-25.807 h -0.005 l 0.002,-0.002 0.002,0.002 52.127,-8.85 C 457.16,52.713 433.552,23.734 385.022,23.734 341.14,32.26 222.11,35.29 149.34,28.496 134.452,21.733 118.793,17.773 103.432,17.844 Z m 0.464,18.703 c 13.137,0.043 27.407,3.804 41.247,10.63 l 0.033,-0.07 c 4.667,4.735 8.542,9.737 11.68,14.985 H 82.92 l 10.574,14.78 c 10.608,14.83 19.803,31.99 21.09,42.024 0.643,5.017 -0.11,7.167 -1.814,8.836 -1.705,1.67 -6.228,3.875 -15.99,3.875 -40.587,0 -56.878,-44.952 -41.012,-69.06 C 66.238,46.64 79.582,39.22 95.002,37.12 c 2.89,-0.395 5.863,-0.583 8.894,-0.573 z M 118.5,80.78 h 46.28 c 4.275,15.734 3.656,33.07 -0.544,51.51 H 131.52 c 1.9,-5.027 2.268,-10.574 1.6,-15.77 -1.527,-11.913 -7.405,-24.065 -14.62,-35.74 z m 101.553,317.095 c 6.44,6.84 11.192,15.31 13.37,24.914 3.797,16.736 3.092,31.208 -1.767,43.204 -4.526,11.175 -12.576,19.79 -22.29,26 h 237.19 c 14.448,0 24.887,-5.678 32.2,-14.318 7.312,-8.64 11.2,-20.514 10.705,-32.352 -0.186,-4.473 -0.978,-8.913 -2.407,-13.18 l -69.91,-8.205 42.017,-20.528 c -8.32,-3.442 -18.64,-5.537 -31.375,-5.537 H 220.053 Z m -42.668,0.506 c -1.152,-0.003 -2.306,0.048 -3.457,0.153 -2.633,0.242 -5.256,0.775 -7.824,1.63 -15.11,5.02 -25.338,21.54 -20.11,36.583 3.673,10.57 15.347,17.71 25.654,13.938 l 1.555,-0.57 h 43.354 c 0.946,-6.36 0.754,-13.882 -1.358,-23.192 -3.71,-16.358 -20.543,-28.483 -37.815,-28.54 z"
fill="#b41e00"
fill-opacity="1"
transform="matrix(0.9,0,0,0.9,25.6,25.6)"
filter="url(#shadow-1)"
id="path37"
style="stroke:#000000;stroke-width:11.11111111;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -40,6 +40,7 @@
"possession": "Possession",
"potion": "Potion",
"queue": "Queue de Dragon",
"race": "Race",
"recettealchimique": "Recette alchimique",
"recettecuisine": "Recette de cuisine",
"rencontre": "Rencontre TMR",

View File

@ -12,17 +12,17 @@ import { RdDSheetUtility } from "./rdd-sheet-utility.js";
import { STATUSES } from "./settings/status-effects.js";
import { MAINS_DIRECTRICES } from "./actor.js";
import { RdDBaseActorReveSheet } from "./actor/base-actor-reve-sheet.js";
import { RdDItem } from "./item.js";
import { ITEM_TYPES, RdDItem } from "./item.js";
import { RdDItemBlessure } from "./item/blessure.js";
import { RdDEmpoignade } from "./rdd-empoignade.js";
import { RdDBaseActorSangSheet } from "./actor/base-actor-sang-sheet.js";
import { RdDCoeur } from "./coeur/rdd-coeur.js";
import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire.js";
import { RdDItemRace } from "./item/race.js";
/* -------------------------------------------- */
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
export class RdDActorSheet extends RdDBaseActorSangSheet {
@ -80,10 +80,10 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
const actor = this.actor;
formData.combat = foundry.utils.duplicate(formData.armes);
RdDItemArme.computeNiveauArmes(formData.combat, formData.competences);
formData.combat.push(RdDItemArme.mainsNues(actor));
formData.combat.push(RdDItemArme.corpsACorps(actor));
formData.combat.push(RdDItemArme.empoignade(actor));
formData.esquives = this.actor.getCompetences("Esquive");
formData.esquives = this.actor.getCompetencesEsquive()
formData.combat = RdDCombatManager.listActionsArmes(formData.combat, formData.competences, formData.system.carac);
formData.empoignades = this.actor.getEmpoignades();
@ -98,6 +98,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
cacheTMR: this.actor.isTMRCache()
}
formData.race = actor.itemTypes[ITEM_TYPES.race].find(it => true)
formData.subacteurs = {
vehicules: this.actor.listeVehicules(),
montures: this.actor.listeMontures(),
@ -184,7 +185,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
// Equip Inventory Item
this.html.find('.item-equip').click(async event => this.actor.equiperObjet(RdDSheetUtility.getItemId(event)))
this.html.find('.chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle'))
this.html.find('.roll-chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle'))
this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance())
@ -214,6 +215,8 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
});
// Boutons spéciaux MJs
this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ"))
this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve())
this.html.find('.sortreserve-add').click(async event => this.actor.addSortReserve(RdDSheetUtility.getItemId(event)))
this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible())
}
@ -283,6 +286,8 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
this.html.find('.ptreve-actuel-plus').click(async event => this.actor.reveActuelIncDec(1))
this.html.find('.ptreve-actuel-moins').click(async event => this.actor.reveActuelIncDec(-1))
this.html.find('.chance-actuelle-plus').click(async event => this.actor.chanceActuelleIncDec(1))
this.html.find('.chance-actuelle-moins').click(async event => this.actor.chanceActuelleIncDec(-1))
this.html.find('.fatigue-plus').click(async event => this.actor.santeIncDec("fatigue", 1))
this.html.find('.fatigue-moins').click(async event => this.actor.santeIncDec("fatigue", -1))
}

View File

@ -17,7 +17,7 @@ import { RdDItemSigneDraconique } from "./item/signedraconique.js";
import { ReglesOptionnelles } from "./settings/regles-optionnelles.js";
import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
import { Draconique } from "./tmr/draconique.js";
import { RdDCarac } from "./rdd-carac.js";
import { LIST_CARAC, RdDCarac } from "./rdd-carac.js";
import { DialogConsommer } from "./dialog-item-consommer.js";
import { DialogFabriquerPotion } from "./dialog-fabriquer-potion.js";
import { RollDataAjustements } from "./rolldata-ajustements.js";
@ -38,9 +38,14 @@ import { RdDCoeur } from "./coeur/rdd-coeur.js";
import { DialogChoixXpCarac } from "./dialog-choix-xp-carac.js";
import { RdDItemArme } from "./item-arme.js";
import { RdDCombatManager } from "./rdd-combat.js";
import { RdDItemTete } from "./item/tete.js";
import { DialogSelect } from "./dialog-select.js";
import { PAS_DE_DRACONIC, POSSESSION_SANS_DRACONIC } from "./item/base-items.js";
import { RdDItemRace } from "./item/race.js";
export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre']
/* -------------------------------------------- */
/**
* Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system.
@ -53,41 +58,27 @@ export class RdDActor extends RdDBaseActorSang {
* Prepare Character type specific data
*/
prepareActorData() {
this.$computeCaracDerivee()
this.$computeIsHautRevant()
}
/* -------------------------------------------- */
$computeCaracDerivee() {
RdDItemRace.applyRacialLimits(this)
this.system.carac.force.value = Math.min(this.system.carac.force.value, parseInt(this.system.carac.taille.value) + 4);
this.system.carac.melee.value = Math.floor((parseInt(this.system.carac.force.value) + parseInt(this.system.carac.agilite.value)) / 2);
this.system.carac.melee.value = Math.floor((this.getForce() + parseInt(this.system.carac.agilite.value)) / 2);
this.system.carac.tir.value = Math.floor((parseInt(this.system.carac.vue.value) + parseInt(this.system.carac.dexterite.value)) / 2);
this.system.carac.lancer.value = Math.floor((parseInt(this.system.carac.tir.value) + parseInt(this.system.carac.force.value)) / 2);
this.system.carac.derobee.value = Math.floor(parseInt(((21 - this.system.carac.taille.value)) + parseInt(this.system.carac.agilite.value)) / 2);
let bonusDomKey = Math.floor((parseInt(this.system.carac.force.value) + parseInt(this.system.carac.taille.value)) / 2);
let tailleData = RdDCarac.getCaracDerivee(bonusDomKey);
this.system.attributs.plusdom.value = tailleData.plusdom;
this.system.attributs.encombrement.value = (parseInt(this.system.carac.force.value) + parseInt(this.system.carac.taille.value)) / 2;
super.prepareActorData()
this.system.attributs.sconst.value = RdDCarac.calculSConst(this.system.carac.constitution.value);
this.system.attributs.sust.value = RdDCarac.getCaracDerivee(this.system.carac.taille.value).sust;
this.system.sante.vie.max = Math.ceil((parseInt(this.system.carac.taille.value) + parseInt(this.system.carac.constitution.value)) / 2);
this.system.attributs.sconst.value = RdDCarac.calculSConst(this.getConstitution())
this.system.attributs.sust.value = RdDCarac.getCaracDerivee(this.getTaille()).sust
this.system.sante.vie.value = Math.min(this.system.sante.vie.value, this.system.sante.vie.max)
this.system.sante.endurance.max = Math.max(parseInt(this.system.carac.taille.value) + parseInt(this.system.carac.constitution.value), parseInt(this.system.sante.vie.max) + parseInt(this.system.carac.volonte.value));
this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max);
this.system.sante.fatigue.max = this.getFatigueMax();
this.system.sante.fatigue.max = this.getFatigueMax()
this.system.sante.fatigue.value = Math.min(this.system.sante.fatigue.value, this.system.sante.fatigue.max);
//Compteurs
this.system.reve.reve.max = this.system.carac.reve.value;
this.system.compteurs.chance.max = this.system.carac.chance.value;
}
this.system.reve.reve.max = 3 * this.getReve()
this.system.compteurs.chance.max = this.getChance()
$computeIsHautRevant() {
this.system.attributs.hautrevant.value = this.itemTypes['tete'].find(it => Grammar.equalsInsensitive(it.name, 'don de haut-reve'))
this.system.attributs.hautrevant.value = this.itemTypes[ITEM_TYPES.tete].find(it => RdDItemTete.isDonDeHautReve(it))
? "Haut rêvant"
: "";
}
@ -105,13 +96,18 @@ export class RdDActor extends RdDBaseActorSang {
isHautRevant() { return this.system.attributs.hautrevant.value != "" }
/* -------------------------------------------- */
getAgilite() { return this.system.carac.agilite?.value ?? 0 }
getChance() { return this.system.carac.chance?.value ?? 0 }
getAgilite() { return Misc.toInt(this.system.carac.agilite?.value ?? 0) }
getChance() { return Misc.toInt(this.system.carac.chance?.value ?? 0) }
getReveActuel() { return this.system.reve?.reve?.value ?? this.carac.reve.value ?? 0 }
getChanceActuel() { return this.system.compteurs.chance?.value ?? 10 }
getReveActuel() { return Misc.toInt(this.system.reve?.reve?.value) ?? this.carac.reve.value ?? 0 }
getChanceActuel() {
return Number.isNumeric(this.system.compteurs.chance.value) ?
Misc.toInt(this.system.compteurs.chance.value) : this.getChance()
}
getMoralTotal() { return this.system.compteurs.moral?.value ?? 0 }
getEnduranceMax() { return Math.max(1, Math.max(this.getTaille() + this.getConstitution(), this.getVieMax() + this.getVolonte())) }
/* -------------------------------------------- */
getEtatGeneral(options = { ethylisme: false }) {
const etatGeneral = this.system.compteurs.etat?.value ?? 0
@ -137,8 +133,8 @@ export class RdDActor extends RdDBaseActorSang {
const actions = RdDCombatManager.listActionsArmes(
this.itemTypes[ITEM_TYPES.arme]
.filter(it => RdDItemArme.isAttaque(it))
.concat(RdDItemArme.corpsACorps(this))
.concat(RdDItemArme.empoignade(this))
.concat(RdDItemArme.mainsNues(this))
,
this.itemTypes[ITEM_TYPES.competence],
this.system.carac)
@ -162,10 +158,9 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
getDemiReve() { return this.system.reve.tmrpos.coord }
getDraconicList() { return this.itemTypes[ITEM_TYPES.competence].filter(it => it.system.categorie == 'draconic') }
getBestDraconic() { return foundry.utils.duplicate(this.getDraconicList().sort(Misc.descending(it => it.system.niveau)).find(it => true)) }
getBestDraconic() { return foundry.utils.duplicate([...this.getDraconicList(), PAS_DE_DRACONIC].sort(Misc.descending(it => it.system.niveau)).find(it => true)) }
getDraconicOuPossession() {
return [...this.getDraconicList().filter(it => it.system.niveau >= 0),
super.getDraconicOuPossession()]
return [...this.getDraconicList().filter(it => it.system.niveau >= 0), POSSESSION_SANS_DRACONIC]
.sort(Misc.descending(it => it.system.niveau))
.find(it => true)
}
@ -181,7 +176,7 @@ export class RdDActor extends RdDBaseActorSang {
whisper: ChatUtility.getOwners(this),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html`, {
pr: nouveauReve,
alias: this.name,
alias: this.getAlias(),
potionName: it.name,
potionImg: it.img
})
@ -666,18 +661,16 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async updateCarac(caracName, to) {
if (caracName == "force") {
if (Number(to) > this.getTaille() + 4) {
ui.notifications.warn("Votre FORCE doit être au maximum de TAILLE+4");
return;
}
to = Number(to)
if (!RdDItemRace.checkRacialMax(this, caracName, to)){
return
}
if (caracName == "reve") {
if (caracName == LIST_CARAC.reve.code) {
if (to > Misc.toInt(this.system.reve.seuil.value)) {
this.setPointsDeSeuil(to);
}
}
if (caracName == "chance") {
if (caracName == LIST_CARAC.chance.code) {
if (to > Misc.toInt(this.system.compteurs.chance.value)) {
this.setPointsDeChance(to);
}
@ -989,7 +982,43 @@ export class RdDActor extends RdDBaseActorSang {
});
}
/* -------------------------------------------- */
async addDonDeHautReve() {
if (!game.user.isGM || this.isHautRevant()) {
return
}
const donHR = await RdDItemTete.teteDonDeHautReve()
if (donHR) {
this.createEmbeddedDocuments('Item', [donHR.toObject()])
}
}
async addSortReserve(itemId) {
if (itemId) {
const item = this.items.get(itemId)
if (item.type == ITEM_TYPES.sort && !item.system.isrituel) {
this.$createSortReserve(item)
return
}
}
const selectSortReserve = {
title: "Créer un sort en réserve",
label: "Choisir un sort",
list: this.itemTypes[ITEM_TYPES.sort].filter(it => !it.system.isrituel)
}
DialogSelect.select(selectSortReserve, sort => this.$createSortReserve(sort))
}
$createSortReserve(sort) {
this.createEmbeddedDocuments("Item",
[{
type: ITEM_TYPES.sortreserve,
name: sort.name,
img: sort.img,
system: { sortid: sort.id, draconic: sort.system.draconic, ptreve: Number(sort.system.ptreve.match(/\d+/)), coord: 'A1', heurecible: 'Vaisseau' }
}],
{ renderSheet: true })
}
/* -------------------------------------------- */
async reinsertionAleatoire(raison, accessible = tmr => true) {
const innaccessible = this.buildTMRInnaccessible();
@ -1053,6 +1082,11 @@ export class RdDActor extends RdDBaseActorSang {
await this.update({ "system.reve.reve.value": reve });
}
async chanceActuelleIncDec(value) {
const chance = Math.min(this.getChance(), Math.max(this.getChanceActuel() + value, 0));
await this.update({ "system.compteurs.chance.value": chance });
}
/* -------------------------------------------- */
async regainPointDeSeuil() {
const seuil = Misc.toInt(this.system.reve.seuil.value);
@ -1083,9 +1117,7 @@ export class RdDActor extends RdDBaseActorSang {
}
/* -------------------------------------------- */
getSConst() {
return RdDCarac.calculSConst(this.system.carac.constitution.value)
}
getSConst() { return RdDCarac.calculSConst(this.getConstitution()) }
async ajoutXpConstitution(xp) {
await this.update({ "system.carac.constitution.xp": Misc.toInt(this.system.carac.constitution.xp) + xp });
@ -1237,16 +1269,14 @@ export class RdDActor extends RdDBaseActorSang {
}
/* -------------------------------------------- */
async consommerNourritureboisson(itemId, choix = { doses: 1, seForcer: false, supprimerSiZero: false }, userId = undefined) {
if (userId != undefined && userId != game.user.id) {
async consommerNourritureboisson(itemId, choix = { doses: 1, seForcer: false, supprimerSiZero: false }) {
if (!this.isOwner) {
RdDBaseActor.remoteActorCall({
tokenId: this.token?.id,
actorId: this.id,
method: 'consommerNourritureboisson',
args: [itemId, choix, userId]
},
userId)
return;
method: 'consommerNourritureboisson', args: [itemId, choix]
})
return
}
const item = this.getItem(itemId)
if (!item.getUtilisationCuisine()) {
@ -1341,7 +1371,7 @@ export class RdDActor extends RdDBaseActorSang {
const etat = this.getEtatGeneral({ ethylisme: true });
const nbDoses = Number(this.system.compteurs.ethylisme.nb_doses || 0);
const ethylismeData = {
alias: this.name,
alias: this.getAlias(),
actor: this,
vie: this.system.sante.vie.max,
alcool: alcool,
@ -1426,7 +1456,7 @@ export class RdDActor extends RdDBaseActorSang {
const perteDissolution = Math.max(0, Math.min(dissolution, conversion));
let stressRollData = {
alias: this.name,
alias: this.getAlias(),
selectedCarac: this.system.carac.reve,
rolled: stressRoll,
stress: fromStress,
@ -1500,13 +1530,12 @@ export class RdDActor extends RdDBaseActorSang {
};
}
/* -------------------------------------------- */
isCaracMax(code) {
if (code == 'force' && parseInt(this.system.carac.force.value) >= parseInt(this.system.carac.taille.value) + 4) {
return true;
}
return false
return RdDItemRace.isRacialMax(this, code)
}
async checkCaracXP(caracName, display = true) {
let carac = this.findCaracByName(caracName);
if (carac && carac.xp > 0) {
@ -1517,7 +1546,7 @@ export class RdDActor extends RdDBaseActorSang {
carac.value = niveauSuivant;
let checkXp = {
alias: this.name,
alias: this.getAlias(),
carac: caracName,
value: niveauSuivant,
xp: carac.xp
@ -1547,7 +1576,7 @@ export class RdDActor extends RdDBaseActorSang {
newCompData.system.niveau += 1;
newCompData.system.xp = newXP;
let checkXp = {
alias: this.name,
alias: this.getAlias(),
competence: newCompData.name,
niveau: newCompData.system.niveau,
xp: newCompData.system.xp,
@ -1567,7 +1596,7 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async appliquerAjoutExperience(rollData, hideChatMessage = 'show') {
if (!Misc.isFirstConnectedGM()) {
if (!Misc.hasConnectedGM()) {
return
}
hideChatMessage = hideChatMessage == 'hide' || (Misc.isRollModeHiddenToPlayer() && !game.user.isGM)
@ -1633,10 +1662,12 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async rollUnSort(coord) {
RdDEmpoignade.checkEmpoignadeEnCours(this)
if (RdDEmpoignade.checkEmpoignadeEnCours(this)) {
return
}
if (EffetsDraconiques.isSortImpossible(this)) {
ui.notifications.error("Une queue ou un souffle vous empèche de lancer de sort!");
return;
ui.notifications.error("Une queue ou un souffle vous empèche de lancer de sort!")
return
}
// Duplication car les pts de reve sont modifiés dans le sort
let sorts = foundry.utils.duplicate(this.$filterSortList(this.itemTypes['sort'], coord));
@ -1784,7 +1815,7 @@ export class RdDActor extends RdDBaseActorSang {
}
const competence = this.getCompetence(compName);
let rollData = {
alias: this.name,
alias: this.getAlias(),
caracValue: Number(carac.value),
selectedCarac: carac,
competence: competence,
@ -1857,7 +1888,7 @@ export class RdDActor extends RdDBaseActorSang {
label: 'Jet ' + Grammar.apostrophe('de', competence.name),
template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html',
rollData: {
alias: this.name,
alias: this.getAlias(),
carac: this.system.carac,
selectedCarac: this.getCaracByName(caracName),
selectedCaracName: caracName,
@ -2241,12 +2272,6 @@ export class RdDActor extends RdDBaseActorSang {
}
}
/* -------------------------------------------- */
async chanceActuelleIncDec(value) {
const chance = Math.min(this.getChance(), Math.max(this.getChanceActuel() + value, 0));
await this.updateCompteurValue("chance", chance);
}
/* -------------------------------------------- */
async appelDestinee(onSuccess = () => { }, onEchec = () => { }) {
let destinee = this.system.compteurs.destinee?.value ?? 0;
@ -2521,7 +2546,11 @@ export class RdDActor extends RdDBaseActorSang {
async onRollTachePremiersSoins(blessureId, rollData) {
if (!this.isOwner) {
return RdDBaseActor.remoteActorCall({ tokenId: this.token?.id, actorId: this.id, method: 'onRollTachePremiersSoins', args: [blessureId, rollData] });
return RdDBaseActor.remoteActorCall({
tokenId: this.token?.id,
actorId: this.id,
method: 'onRollTachePremiersSoins', args: [blessureId, rollData]
})
}
const blessure = this.getItem(blessureId, 'blessure')
console.log('TODO update blessure', this, blessureId, rollData, rollData.tache);
@ -2551,7 +2580,11 @@ export class RdDActor extends RdDBaseActorSang {
async onRollSoinsComplets(blessureId, rollData) {
if (!this.isOwner) {
return RdDBaseActor.remoteActorCall({ tokenId: this.token?.id, actorId: this.id, method: 'onRollSoinsComplets', args: [blessureId, rollData] });
return RdDBaseActor.remoteActorCall({
tokenId: this.token?.id,
actorId: this.id,
method: 'onRollSoinsComplets', args: [blessureId, rollData]
})
}
const blessure = this.getItem(blessureId, 'blessure')
if (blessure && blessure.system.premierssoins.done && !blessure.system.soinscomplets.done) {
@ -2930,7 +2963,7 @@ export class RdDActor extends RdDBaseActorSang {
let newQuantite = herbeData.system.quantite - herbeData.nbBrins;
let messageData = {
alias: this.name,
alias: this.getAlias(),
nbBrinsReste: newQuantite,
potion: newPotion,
herbe: herbeData
@ -3000,12 +3033,14 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async onCreateItem(item, options, id) {
switch (item.type) {
case 'tete':
case 'queue':
case 'ombre':
case 'souffle':
await this.onCreateOwnedDraconique(item, options, id);
break;
case ITEM_TYPES.tete:
case ITEM_TYPES.queue:
case ITEM_TYPES.ombre:
case ITEM_TYPES.souffle:
await this.onCreateOwnedDraconique(item, options, id)
break
case ITEM_TYPES.race:
await this.onCreateOwnedRace(item, options, id)
}
await item.onCreateItemTemporel(this);
await item.onCreateDecoupeComestible(this);
@ -3013,19 +3048,23 @@ export class RdDActor extends RdDBaseActorSang {
async onDeleteItem(item, options, id) {
switch (item.type) {
case 'tete':
case 'queue':
case 'ombre':
case 'souffle':
await this.onDeleteOwnedDraconique(item, options, id);
break;
case 'casetmr':
await this.onDeleteOwnedCaseTmr(item, options, id);
break;
case 'empoignade':
case ITEM_TYPES.tete:
case ITEM_TYPES.queue:
case ITEM_TYPES.ombre:
case ITEM_TYPES.souffle:
await this.onDeleteOwnedDraconique(item, options, id)
break
case ITEM_TYPES.race:
await this.onDeleteOwnedRace(item, options, id)
break
case ITEM_TYPES.casetmr:
await this.onDeleteOwnedCaseTmr(item, options, id)
break
case ITEM_TYPES.empoignade:
await RdDEmpoignade.deleteLinkedEmpoignade(this.id, item)
break;
break
}
super.onDeleteItem(item, options, id)
}
/* -------------------------------------------- */
@ -3050,6 +3089,35 @@ export class RdDActor extends RdDBaseActorSang {
}
}
async onCreateOwnedRace(item, options, id) {
if (Misc.isFirstConnectedGM()) {
const raceIds = this.itemTypes[ITEM_TYPES.race].map(it => it.id).filter(id => id != item.id)
if (raceIds.length > 0) {
await this.deleteEmbeddedDocuments('Item', raceIds)
}
await this._applyRaceCaracUpdates(item, 1)
}
}
async onDeleteOwnedRace(item, options, id) {
if (Misc.isFirstConnectedGM()) {
await this._applyRaceCaracUpdates(item, -1)
}
}
async _applyRaceCaracUpdates(item, sign) {
const updates = {};
RdDCarac.caracs(it => true).forEach(c => {
const toAdd = Number(foundry.utils.getProperty(item, c.path)) * sign
if (toAdd != 0) {
updates[c.path] = Number(foundry.utils.getProperty(this, c.path)) + toAdd
}
})
if (Object.keys(updates).length > 0) {
await this.update(updates)
}
}
/* -------------------------------------------- */
async onDeleteOwnedCaseTmr(item, options, id) {
if (Misc.isFirstConnectedGM()) {

View File

@ -1,4 +1,5 @@
import { Grammar } from "../grammar.js";
import { ITEM_TYPES } from "../item.js";
import { RdDSheetUtility } from "../rdd-sheet-utility.js";
import { RdDBaseActorSheet } from "./base-actor-sheet.js";
@ -36,7 +37,30 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet {
this.html.find('.delete-active-effect').click(async event => this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect')));
this.html.find('.enlever-tous-effets').click(async event => await this.actor.removeEffects());
}
this.html.find('.competence-add').click(async event =>
await this.actor.createEmbeddedDocuments("Item", [{
type: ITEM_TYPES.competencecreature,
name: 'Nouvelle competence',
img: 'systems/foundryvtt-reve-de-dragon/icons/compcreature-serres.webp',
system: {
carac_value: this.actor.getForce(),
}
}], { renderSheet: true })
)
if (this.options.vueDetaillee) {
// On carac change
this.html.find('.carac-value').change(async event => {
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "");
this.actor.updateCarac(caracName, parseInt(event.target.value));
});
// On competence change
this.html.find('.competence-value').change(async event => {
let compName = event.currentTarget.attributes.compname.value;
//console.log("Competence changed :", compName);
this.actor.updateCompetence(compName, parseInt(event.target.value));
});
}
}
}

View File

@ -1,33 +1,27 @@
import { ChatUtility } from "../chat-utility.js";
import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js";
import { ENTITE_INCARNE, SHOW_DICE, SYSTEM_RDD } from "../constants.js";
import { Grammar } from "../grammar.js";
import { RdDItemCompetence } from "../item-competence.js";
import { Misc } from "../misc.js";
import { RdDEmpoignade } from "../rdd-empoignade.js";
import { RdDResolutionTable } from "../rdd-resolution-table.js";
import { RdDEncaisser } from "../rdd-roll-encaisser.js";
import { RdDRoll } from "../rdd-roll.js";
import { RdDUtility } from "../rdd-utility.js";
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js";
import { RdDBaseActor } from "./base-actor.js";
import { RdDItemCompetenceCreature } from "../item-competencecreature.js";
import { StatusEffects } from "../settings/status-effects.js";
import { ITEM_TYPES } from "../item.js";
import { Targets } from "../targets.js";
import { RdDPossession } from "../rdd-possession.js";
import { RdDCombat, RdDCombatManager } from "../rdd-combat.js";
import { RdDConfirm } from "../rdd-confirm.js";
import { ENTITE_INCARNE, SHOW_DICE, SYSTEM_RDD } from "../constants.js";
import { RdDItemCompetence } from "../item-competence.js";
import { RdDItemCompetenceCreature } from "../item-competencecreature.js";
import { RdDItemArme } from "../item-arme.js";
import { StatusEffects } from "../settings/status-effects.js";
import { Targets } from "../targets.js";
import { RdDConfirm } from "../rdd-confirm.js";
import { RdDCarac } from "../rdd-carac.js";
const POSSESSION_SANS_DRACONIC = {
img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp',
name: 'Sans draconic',
system: {
niveau: 0,
defaut_carac: "reve-actuel",
}
};
import { ChatUtility } from "../chat-utility.js";
import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js";
import { RdDCombat } from "../rdd-combat.js";
import { RdDEmpoignade } from "../rdd-empoignade.js";
import { RdDPossession } from "../rdd-possession.js";
import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, POSSESSION_SANS_DRACONIC } from "../item/base-items.js";
/**
* Classe de base pour les acteurs disposant de rêve (donc, pas des objets)
@ -36,6 +30,22 @@ const POSSESSION_SANS_DRACONIC = {
*/
export class RdDBaseActorReve extends RdDBaseActor {
prepareActorData() {
super.prepareActorData()
this.system.attributs.plusdom.value = this.getBonusDegat()
this.system.sante.endurance.max = this.getEnduranceMax()
this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max)
}
getCarac() {
return foundry.utils.mergeObject(this.system.carac,
{
'reve-actuel': this.getCaracReveActuel(),
'chance-actuelle': this.getCaracChanceActuelle()
},
{ inplace: false })
}
getCaracChanceActuelle() {
return {
label: 'Chance actuelle',
@ -52,21 +62,25 @@ export class RdDBaseActorReve extends RdDBaseActor {
};
}
getTaille() { return Misc.toInt(this.system.carac.taille?.value) }
getConstitution() { return this.getReve() }
getForce() { return this.getReve() }
getAgilite() { return this.getForce() }
getReve() { return Misc.toInt(this.system.carac.reve?.value) }
getChance() { return this.getReve() }
getReveActuel() { return this.getReve() }
getChanceActuel() { return this.getChance() }
getReve() { return Number(this.system.carac.reve?.value ?? 0) }
getForce() { return this.getReve() }
getTaille() { return Number(this.system.carac.taille?.value ?? 0) }
getAgilite() { return this.getForce() }
getChance() { return this.getReve() }
getEnduranceMax() { return Math.max(1, this.getTaille() + this.getConstitution()) }
getEncombrementMax() { return (this.getForce() + this.getTaille()) / 2 }
getBonusDegat() { return RdDCarac.getCaracDerivee(this.getEncombrementMax()).plusdom }
getMoralTotal() { return 0 }
getBonusDegat() { return Number(this.system.attributs?.plusdom?.value ?? 0) }
getProtectionNaturelle() { return Number(this.system.attributs?.protection?.value ?? 0) }
getSConst() { return 0 }
/* -------------------------------------------- */
getEncombrementMax() { return 0 }
isSurenc() { return false }
computeMalusSurEncombrement() { return 0 }
@ -84,7 +98,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
isActorCombat() { return true }
getCaracInit(competence) {
if (!competence){
if (!competence) {
return 0
}
if (competence.type == ITEM_TYPES.competencecreature) {
@ -117,7 +131,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
for (let effect of this.getEffects()) {
if (effect.duration.type !== 'none' && (effect.duration.remaining <= 0 || options.terminer)) {
await effect.delete();
ChatMessage.create({ content: `${this.name} n'est plus ${Misc.lowerFirst(game.i18n.localize(effect.system.label))} !` });
ChatMessage.create({ content: `${this.getAlias()} n'est plus ${Misc.lowerFirst(game.i18n.localize(effect.system.label))} !` });
}
}
}
@ -150,24 +164,24 @@ export class RdDBaseActorReve extends RdDBaseActor {
}
return RdDItemCompetence.findCompetence(this.items, idOrName, options)
}
getCompetences(name) {
return RdDItemCompetence.findCompetences(this.items, name)
getCompetences(name, options = { onMessage: message => { } }) {
return RdDItemCompetence.findCompetences(this.items, name, options)
}
getCompetenceCorpsACorps(options = {}) {
return this.getCompetence("Corps à corps", options)
getCompetenceCorpsACorps(options = { onMessage: message => { } }) {
return this.getCompetence(BASE_CORPS_A_CORPS.name, options) ?? BASE_CORPS_A_CORPS
}
getCompetencesEsquive() {
return this.getCompetences("esquive")
getCompetencesEsquive(options = { onMessage: message => { } }) {
return this.getCompetences(BASE_ESQUIVE.name, options) ?? [BASE_ESQUIVE]
}
getArmeParade(armeParadeId) {
const item = armeParadeId ? this.getEmbeddedDocument('Item', armeParadeId) : undefined;
return RdDItemArme.getArme(item);
return RdDItemArme.getArme(armeParadeId ? this.getEmbeddedDocument('Item', armeParadeId) : undefined)
}
getDraconicOuPossession() {
return POSSESSION_SANS_DRACONIC
}
getDraconicOuPossession() { return POSSESSION_SANS_DRACONIC }
getPossession(possessionId) {
return this.itemTypes[ITEM_TYPES.possession].find(it => it.system.possessionid == possessionId);
@ -288,7 +302,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
await this.openRollDialog({
name: `jet-${this.id}`,
label: `Jet de ${this.name}`,
label: `Jet de ${this.getAlias()}`,
template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll.html',
rollData: {
carac: carac,
@ -300,16 +314,6 @@ export class RdDBaseActorReve extends RdDBaseActor {
});
}
getCarac() {
// TODO: le niveau d'une entité de cauchemar devrait être exclu...
return foundry.utils.mergeObject(this.system.carac,
{
'reve-actuel': this.getCaracReveActuel(),
'chance-actuelle': this.getCaracChanceActuelle()
},
{ inplace: false })
}
/* -------------------------------------------- */
async rollCarac(caracName, jetResistance = undefined) {
if (Grammar.equalsInsensitive(caracName, 'taille')) {
@ -445,8 +449,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
RdDBaseActor.remoteActorCall({
tokenId: this.token?.id,
actorId: this.id,
method: 'encaisserDommagesValidationGR',
args: [rollData, armure, show, attackerToken, defenderToken]
method: 'encaisserDommagesValidationGR', args: [rollData, armure, show, attackerToken, defenderToken]
})
} else {
DialogValidationEncaissement.validerEncaissement(this, rollData, armure,
@ -463,7 +466,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
async $afficherEncaissement(encaissement, show, defenderToken) {
foundry.utils.mergeObject(encaissement, {
alias: defenderToken?.name ?? this.name,
alias: defenderToken?.name ?? this.getAlias(),
hasPlayerOwner: this.hasPlayerOwner,
show: show ?? {}
}, { overwrite: false });
@ -494,9 +497,9 @@ export class RdDBaseActorReve extends RdDBaseActor {
|| entite.isEntiteAccordee(this)) {
return true;
}
const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.system.carac.niveau.value));
const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.getNiveau()));
const rollData = {
alias: this.name,
alias: this.getAlias(),
rolled: rolled,
entite: entite.name,
selectedCarac: this.system.carac.reve
@ -516,7 +519,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
isEntiteAccordee(attacker) { return true }
async setEntiteReveAccordee(actor) {
ui.notifications.error("Impossible de s'accorder à " + this.name + ": ce n'est pas une entité incarnée");
ui.notifications.error("Impossible de s'accorder à " + this.getAlias() + ": ce n'est pas une entité incarnée");
}
}

View File

@ -21,7 +21,7 @@ export class RdDBaseActorSangSheet extends RdDBaseActorReveSheet {
this.html.find('.creer-blessure-grave').click(async event => RdDItemBlessure.createBlessure(this.actor, 4));
this.html.find('.creer-blessure-critique').click(async event => RdDItemBlessure.createBlessure(this.actor, 6));
this.html.find('.subir-blessure-contusion').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 2));
this.html.find('.subir-blessure-contusion').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 0));
this.html.find('.subir-blessure-legere').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 2));
this.html.find('.subir-blessure-grave').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 4));
this.html.find('.subir-blessure-critique').click(async event => RdDItemBlessure.applyFullBlessure(this.actor, 6));

View File

@ -1,4 +1,4 @@
import { MAX_ENDURANCE_FATIGUE, RdDUtility } from "../rdd-utility.js";
import { RdDUtility } from "../rdd-utility.js";
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js";
import { STATUSES } from "../settings/status-effects.js";
import { ITEM_TYPES } from "../item.js";
@ -6,6 +6,7 @@ import { RdDBaseActorReve } from "./base-actor-reve.js";
import { RdDDice } from "../rdd-dice.js";
import { RdDItemBlessure } from "../item/blessure.js";
import { ChatUtility } from "../chat-utility.js";
import { Misc } from "../misc.js";
/**
* Classe de base pour les acteurs qui peuvent subir des blessures
@ -14,25 +15,32 @@ import { ChatUtility } from "../chat-utility.js";
*/
export class RdDBaseActorSang extends RdDBaseActorReve {
prepareActorData() {
this.system.sante.vie.max = Math.ceil((this.getTaille() + this.getConstitution()) / 2)
this.system.sante.vie.value = Math.min(this.system.sante.vie.value, this.system.sante.vie.max)
super.prepareActorData()
this.system.attributs.encombrement.value = this.getEncombrementMax()
}
getForce() { return Number(this.system.carac.force?.value ?? 0) }
getForce() { return Misc.toInt(this.system.carac.force?.value) }
getConstitution() { return Misc.toInt(this.system.carac.constitution?.value) }
getVolonte() { return Misc.toInt(this.system.carac.volonte?.value) }
getBonusDegat() { return Number(this.system.attributs?.plusdom?.value ?? 0) }
getProtectionNaturelle() { return Number(this.system.attributs?.protection?.value ?? 0) }
getSConst() { return 0 }
getVieMax() { return Misc.toInt(this.system.sante.vie?.max) }
getEnduranceMax() { return Math.max(1, this.getTaille() + this.getConstitution()) }
getFatigueMax() { return this.getEnduranceMax() * 2 }
getEnduranceMax() { return Math.max(1, Math.min(this.system.sante.endurance.max, MAX_ENDURANCE_FATIGUE)) }
getProtectionNaturelle() { return Misc.toInt(this.system.attributs?.protection?.value) }
getFatigueActuelle() {
if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
return Math.max(0, Math.min(this.getFatigueMax(), this.system.sante.fatigue?.value ?? 0));
return Math.max(0, Math.min(this.getFatigueMax(), Misc.toInt(this.system.sante.fatigue?.value)))
}
return 0;
}
getFatigueRestante() { return this.getFatigueMax() - this.getFatigueActuelle() }
getFatigueMin() { return this.system.sante.endurance.max - this.system.sante.endurance.value }
getFatigueMax() { return this.getEnduranceMax() * 2 }
malusFatigue() {
if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
@ -42,7 +50,6 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
}
/* -------------------------------------------- */
getEncombrementMax() { return Number(this.system.attributs?.encombrement?.value ?? 0) }
isSurenc() { return this.computeMalusSurEncombrement() < 0 }
computeMalusSurEncombrement() {
@ -191,7 +198,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
encaissement.mort = true;
ChatMessage.create({
content: `<img class="chat-icon" src="icons/svg/skull.svg" data-tooltip="charge" />
<strong>${this.name} vient de succomber à une seconde blessure critique ! Que les Dragons gardent son Archétype en paix !</strong>`
<strong>${this.getAlias()} vient de succomber à une seconde blessure critique ! Que les Dragons gardent son Archétype en paix !</strong>`
});
}
return blessure;
@ -218,7 +225,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
async jetDeVie() {
if (this.isDead()) {
ChatMessage.create({
content: `Jet de Vie: ${this.name} est déjà mort, ce n'est pas la peine d'en rajouter !!!!!`,
content: `Jet de Vie: ${this.getAlias()} est déjà mort, ce n'est pas la peine d'en rajouter !!!!!`,
whisper: ChatUtility.getOwners(this)
})
return
@ -242,7 +249,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
await this.santeIncDec("vie", -perte);
}
if (this.isDead()) {
msgText += `<br><strong>${this.name} est mort !!!!</strong>`;
msgText += `<br><strong>${this.getAlias()} est mort !!!!</strong>`;
}
else if (prochainJet > 0) {
msgText += `<br>Prochain jet de vie dans ${prochainJet} ${isCritique ? 'round' : 'minute'}${prochainJet > 1 ? 's' : ''} ${isCritique ? '(état critique)' : '(état grave)'}`
@ -273,7 +280,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
async setSonne(sonne = true) {
if (!game.combat && sonne) {
ui.notifications.info(`${this.name} est hors combat, il ne reste donc pas sonné`);
ui.notifications.info(`${this.getAlias()} est hors combat, il ne reste donc pas sonné`);
return;
}
await this.setEffect(STATUSES.StatusStunned, sonne)

View File

@ -177,21 +177,6 @@ export class RdDBaseActorSheet extends ActorSheet {
this.options.vueDetaillee = !this.options.vueDetaillee;
this.render(true);
});
if (this.options.vueDetaillee) {
// On carac change
this.html.find('.carac-value').change(async event => {
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "");
this.actor.updateCarac(caracName, parseInt(event.target.value));
});
// On competence change
this.html.find('.competence-value').change(async event => {
let compName = event.currentTarget.attributes.compname.value;
//console.log("Competence changed :", compName);
this.actor.updateCompetence(compName, parseInt(event.target.value));
});
}
}
_rechercherKeyup(event) {

View File

@ -18,14 +18,25 @@ export class RdDBaseActor extends Actor {
.map(it => it[0])
.find(it => it)
}
static $findCaracByName(carac, name) {
const caracList = Object.entries(carac);
let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique' });
let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique', onMessage: m => { } });
if (!entry || entry.length == 0) {
entry = Misc.findFirstLike(name, caracList, { mapper: it => it[1].label, description: 'caractéristique' });
}
return entry && entry.length > 0 ? carac[entry[0]] : undefined;
}
static getDefaultValue(actorType, path) {
if (path.includes('.')) {
path = path.split('.')
}
let obj = game.model.Actor[actorType]
for (let p of path) {
obj = obj ? obj[p] : undefined
}
return obj
}
static getDefaultImg(itemType) {
return game.system.rdd.actorClasses[itemType]?.defaultIcon ?? defaultItemImg[itemType];
@ -45,29 +56,32 @@ export class RdDBaseActor extends Actor {
}
}
static remoteActorCall(callData, userId = undefined) {
userId = userId ?? Misc.firstConnectedGMId();
if (userId == game.user.id) {
RdDBaseActor.onRemoteActorCall(callData, userId);
return false;
static remoteActorCall(callData) {
if (game.user.isGM) {
RdDBaseActor.onRemoteActorCall(callData, game.user.id)
return false
}
else {
game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_remote_actor_call", data: callData, userId: userId });
return true;
game.socket.emit(SYSTEM_SOCKET_ID, {
msg: "msg_remote_actor_call",
data: callData,
userId: Misc.firstConnectedGMId()
})
return true
}
}
static onRemoteActorCall(callData, userId) {
const actor = RdDBaseActor.getRealActor(callData?.actorId, callData?.tokenId);
if (userId == game.user.id) {
const actor = RdDBaseActor.getRealActor(callData?.actorId, callData?.tokenId);
if (Misc.isOwnerPlayerOrUniqueConnectedGM(actor)) { // Seul le joueur choisi effectue l'appel: le joueur courant si propriétaire de l'actor, ou le MJ sinon
const args = callData.args;
console.info(`RdDBaseActor.onRemoteActorCall: pour l'Actor ${callData.actorId}, appel de RdDBaseActor.${callData.method}(`, ...args, ')');
actor[callData.method](...args);
}
// Seul le joueur choisi effectue l'appel: le joueur courant si propriétaire de l'actor, ou le MJ sinon
const args = callData.args;
console.info(`RdDBaseActor.onRemoteActorCall: pour l'Actor ${callData.actorId}, appel de RdDBaseActor.${callData.method}(`, ...args, ')');
actor[callData.method](...args);
}
}
static getRealActor(actorId, tokenId) {
if (tokenId) {
let token = canvas.tokens.get(tokenId)
@ -78,6 +92,13 @@ export class RdDBaseActor extends Actor {
return game.actors.get(actorId)
}
getAlias() {
if (this.token?.name != null && this.token != this.prototypeToken) {
return this.token.name
}
return this.name
}
isPersonnageJoueur() { return false }
static extractActorMin = (actor) => { return { id: actor?.id, type: actor?.type, name: actor?.name, img: actor?.img }; };
@ -155,11 +176,19 @@ export class RdDBaseActor extends Actor {
await super._preCreate(data, options, user);
// Configure prototype token settings
const prototypeToken = {};
if (this.type === "personnage") Object.assign(prototypeToken, {
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
});
this.updateSource({ prototypeToken });
if (this.type === "personnage") {
this.updateSource({
sight: { enabled: true },
actorLink: options.fromCompendium ? data.prototypeToken.actorLink : true,
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
})
} else {
const prototypeToken = {
sight: { enabled: true },
disposition: CONST.TOKEN_DISPOSITIONS.NEUTRAL
}
this.updateSource({ prototypeToken });
}
}
/* -------------------------------------------- */
@ -171,7 +200,8 @@ export class RdDBaseActor extends Actor {
this.computeEncTotal()
}
async prepareActorData() { }
prepareActorData() { }
async computeEtatGeneral() { }
/* -------------------------------------------- */
findPlayer() {
@ -203,11 +233,26 @@ export class RdDBaseActor extends Actor {
getMonnaie(id) { return this.findItemLike(id, 'monnaie'); }
getEncombrementMax() { return 0 }
/* -------------------------------------------- */
async updateCarac(caracName, to) {
}
/* -------------------------------------------- */
async onPreUpdateItem(item, change, options, id) { }
async onCreateItem(item, options, id) { }
async onDeleteItem(item, options, id) { }
async onUpdateActor(update, options, actorId) { }
async onDeleteItem(item, options, id) {
if (item.isInventaire()) {
this._removeItemFromConteneur(item)
}
}
_removeItemFromConteneur(item) {
this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id))
.forEach(conteneur => {
const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id);
conteneur.update({ 'system.contenu': nouveauContenu });
});
}
async onTimeChanging(oldTimestamp, newTimestamp) {
this.items.filter(it => it.isFinPeriode(oldTimestamp, newTimestamp))
@ -215,21 +260,20 @@ export class RdDBaseActor extends Actor {
}
async creerObjetParMJ(object) {
if (!Misc.isFirstConnectedGM()) {
RdDBaseActor.remoteActorCall({
tokenId: this.token?.id,
actorId: this.id,
method: 'creerObjetParMJ',
args: [object]
});
return;
if (this.isOwner) {
await this.createEmbeddedDocuments('Item', [object])
return
}
await this.createEmbeddedDocuments('Item', [object])
RdDBaseActor.remoteActorCall({
tokenId: this.token?.id,
actorId: this.id,
method: 'creerObjetParMJ', args: [object]
})
}
/* -------------------------------------------- */
async cleanupConteneurs() {
if (Misc.isOwnerPlayerOrUniqueConnectedGM(this)) {
if (Misc.isOwnerPlayer(this)) {
let updates = this.itemTypes['conteneur']
.filter(c => c.system.contenu.filter(id => this.getItem(id) == undefined).length > 0)
.map(c => { return { _id: c._id, 'system.contenu': c.system.contenu.filter(id => this.getItem(id) != undefined) } });
@ -300,7 +344,7 @@ export class RdDBaseActor extends Actor {
ui.notifications.error(`Impossible d'ajouter un gain de ${sols} <0`);
return;
}
if (fromActorId && !game.user.isGM) {
if (fromActorId && !this.isOwner) {
RdDBaseActor.remoteActorCall({
userId: Misc.connectedGMOrUser(),
tokenId: this.token?.id,
@ -335,10 +379,9 @@ export class RdDBaseActor extends Actor {
if (!Misc.isFirstConnectedGM()) {
RdDBaseActor.remoteActorCall({
actorId: achat.vendeurId ?? achat.acheteurId,
method: 'achatVente',
args: [achat]
method: 'achatVente', args: [achat]
});
return;
return
}
const cout = Number(achat.prixTotal ?? 0);
const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined;
@ -367,7 +410,7 @@ export class RdDBaseActor extends Actor {
chatAchatItem.quantiteTotal = quantite;
ChatMessage.create({
user: achat.userId,
speaker: { alias: (acheteur ?? vendeur).name },
speaker: { alias: (acheteur ?? vendeur).getAlias() },
whisper: ChatUtility.getOwners(this),
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-achat-item.html', chatAchatItem)
});
@ -683,7 +726,7 @@ export class RdDBaseActor extends Actor {
type: this.type,
img: this.img,
pack: this.pack,
name: this.name,
name: this.getAlias(),
system: { description: this.system.description }
}
renderTemplate('systems/foundryvtt-reve-de-dragon/templates/post-actor.html', chatData)
@ -691,10 +734,10 @@ export class RdDBaseActor extends Actor {
}
actionImpossible(action) {
ui.notifications.info(`${this.name} ne peut pas faire cette action: ${action}`)
ui.notifications.info(`${this.getAlias()} ne peut pas faire cette action: ${action}`)
}
async roll() { this.actionImpossible("jet de caractéristiques") }
async jetEthylisme() { this.actionImpossible("jet d'éthylisme") }
async rollAppelChance() { this.actionImpossible("appel à la chance") }
async jetDeMoral() { this.actionImpossible("jet de moral") }

View File

@ -73,7 +73,7 @@ export class RdDCommerceSheet extends RdDBaseActorSheet {
}
const disponible = this.actor.getQuantiteDisponible(item)
if (disponible == 0) {
ui.notifications.warn(`${this.name} n'a plus de ${item.name} en vente`);
ui.notifications.warn(`${this.getAlias()} n'a plus de ${item.name} en vente`);
return;
}

View File

@ -25,9 +25,6 @@ export class RdDCommerce extends RdDBaseActor {
}
await super.depenserSols(cout)
}
async consommerNourritureboisson(itemId, choix, userId) {
// ne pas consommer pour un commerce
}
async decrementerQuantiteItem(item, quantite) {
if (this.system.illimite) {

View File

@ -1,6 +1,4 @@
import { ENTITE_INCARNE } from "../constants.js";
import { ITEM_TYPES } from "../item.js";
import { STATUSES } from "../settings/status-effects.js";
import { RdDBaseActorSang } from "./base-actor-sang.js";
export class RdDCreature extends RdDBaseActorSang {
@ -9,6 +7,7 @@ export class RdDCreature extends RdDBaseActorSang {
return "systems/foundryvtt-reve-de-dragon/icons/creatures/bramart.svg";
}
getEnduranceMax() { return Math.max(1, this.getVieMax() + this.getConstitution()) }
isCreature() { return true }
canReceive(item) {

View File

@ -1,6 +1,7 @@
import { RdDBaseActorReveSheet } from "./base-actor-reve-sheet.js";
import { RdDSheetUtility } from "../rdd-sheet-utility.js";
import { RdDUtility } from "../rdd-utility.js";
import { DialogSelect } from "../dialog-select.js";
export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
@ -14,6 +15,8 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
async getData() {
let formData = await super.getData();
formData.niveau = this.actor.getNiveau()
delete formData.system.carac.niveau
formData.resonances = this.actor.system.sante.resonnance.actors.map(actorId => game.actors.get(actorId))
.map(actor => { return { id: actor.id, name: actor.name, img: actor.img } })
return formData
@ -32,26 +35,30 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
let compName = event.currentTarget.attributes.compname.value;
this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value));
});
this.html.find('.creature-niveau').change(async event => {
let compName = event.currentTarget.attributes.compname.value;
this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value));
});
this.html.find('.creature-dommages').change(async event => {
let compName = event.currentTarget.attributes.compname.value;
this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value));
});
})
this.html.find('.resonance-add').click(async event =>
DialogSelect.select({
label: "Choisir un acteur à accorder",
list: game.actors.filter(it => it.isPersonnage() && it.prototypeToken.actorLink)
},
it => this.resonanceAdd(it.id))
)
this.html.find('.resonance-delete').click(async event => {
const li = RdDSheetUtility.getEventElement(event);
const actorId = li.data("actor-id");
if (actorId) {
const actorResonance = game.actors.get(actorId);
RdDUtility.confirmSubActeurDelete(this, actorResonance, li, () => {
console.log('Delete : ', actorId);
this.deleteSubActeur(actorId);
this.resonanceDelete(actorId);
RdDUtility.slideOnDelete(this, li);
});
})
}
});
})
}
async _onDropActor(event, dragData) {
@ -60,7 +67,13 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
super._onDropActor(event, dragData)
}
async deleteSubActeur(actorId) {
async resonanceAdd(actorId) {
let newResonances = [...this.actor.system.sante.resonnance.actors, actorId]
await this.actor.update({ 'system.sante.resonnance.actors': newResonances });
}
async resonanceDelete(actorId) {
console.log('Delete : ', actorId);
let newResonances = this.actor.system.sante.resonnance.actors.filter(id => id != actorId);
await this.actor.update({ 'system.sante.resonnance.actors': newResonances }, { renderSheet: false });
}

View File

@ -1,6 +1,7 @@
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
import { ITEM_TYPES } from "../item.js";
import { Misc } from "../misc.js";
import { RdDCarac } from "../rdd-carac.js";
import { RdDEncaisser } from "../rdd-roll-encaisser.js";
import { STATUSES } from "../settings/status-effects.js";
import { RdDBaseActorReve } from "./base-actor-reve.js";
@ -18,15 +19,27 @@ export class RdDEntite extends RdDBaseActorReve {
isEntite(typeentite = []) {
return (typeentite.length == 0 || typeentite.includes(this.system.definition.typeentite));
}
isNonIncarnee() { return this.isEntite([ENTITE_NONINCARNE]) }
getReveActuel() {
return Misc.toInt(this.system.carac.reve?.value)
}
getCarac() {
const carac = super.getCarac()
delete carac.niveau
return carac
}
getNiveau() {
const reve = this.getReve()
return RdDCarac.getCaracDerivee(reve).niveau
}
getForce() { return this.getReve() }
getAgilite() { return this.getReve() }
getChance() { return this.getReve() }
getEnduranceMax() { return Math.max(1, this.getTaille() + this.getReve()) }
getDraconicOuPossession() {
return this.itemTypes[ITEM_TYPES.competencecreature]
@ -63,6 +76,7 @@ export class RdDEntite extends RdDBaseActorReve {
}
return {}
}
async encaisser() {
if (this.isNonIncarnee()) {
return

View File

@ -76,13 +76,14 @@ const MAPPING_BASE = [
{ column: "derobee", rollClass: 'roll-carac', colName: 'Dérobée', getter: (actor, context) => actor.system.carac.derobee.value },
{ column: "vie", getter: (actor, context) => actor.system.sante.vie.max },
{ column: "endurance", getter: (actor, context) => actor.system.sante.endurance.max },
{ column: "plusdom", colName: '+dom', getter: (actor, context) => actor.system.attributs.plusdom.value },
{ column: "plusdom", colName: '+dom', getter: (actor, context) => actor.getBonusDegat() },
{ column: "protectionnaturelle", colName: 'Protection naturelle', getter: (actor, context) => actor.system.attributs.protection.value > 0 ? actor.system.attributs.protection.value : '' },
{ column: "description", getter: (actor, context) => Mapping.getDescription(actor) },
{ column: "armure", getter: (actor, context) => Mapping.getArmure(actor, context) },
{ column: "protectionarmure", colName: 'Protection', getter: (actor, context) => Mapping.getProtectionArmure(actor, context) },
{ column: "malus_armure", getter: (actor, context) => Mapping.getMalusArmure(actor, context) },
{ column: "reve_actuel", rollClass: 'roll-reve-actuel', colName: 'Rêve actuel', getter: (actor, context) => actor.system.reve.reve.value },
{ column: "chance_actuel", rollClass: 'roll-chance-actuelle', colName: 'Chance actuelle', getter: (actor, context) => actor.system.compteurs.chance.value },
{ column: "vie_actuel", rollClass: 'jet-vie', getter: (actor, context) => actor.system.sante.vie.value },
{ column: "endurance_actuel", rollClass: 'jet-endurance', getter: (actor, context) => actor.system.sante.endurance.value },
{ column: "esquive", getter: (actor, context) => Mapping.getEsquive(context) },
@ -140,7 +141,8 @@ export class Mapping {
static prepareArmes(actor) {
const armes = actor.items.filter(it => it.type == ITEM_TYPES.arme)
RdDItemArme.ajoutCorpsACorps(armes, actor)
armes.push(RdDItemArme.corpsACorps(actor));
armes.push(RdDItemArme.empoignade(actor));
return armes.map(arme => [
arme.system.unemain ? Mapping.prepareArme(actor, arme, 'unemain') : undefined,
arme.system.deuxmains ? Mapping.prepareArme(actor, arme, 'deuxmains') : undefined,
@ -168,10 +170,10 @@ export class Mapping {
arme: arme
}
}
static dommagesArme(actor, arme, maniement){
static dommagesArme(actor, arme, maniement) {
const dmgArme = RdDItemArme.dommagesReels(arme, maniement)
const dommages = Misc.toSignedString(dmgArme + RdDBonus.bonusDmg(actor, maniement, dmgArme))
switch(arme.system.mortalite) {
switch (arme.system.mortalite) {
case 'non-mortel': return `(${dommages})`
case 'empoignade': return '-'
}
@ -237,7 +239,7 @@ export class Mapping {
static prepareSorts(actor) {
const codeVoies = Mapping.getCompetencesCategorie(actor, CATEGORIES_DRACONIC)
.map(it => RdDItemSort.getVoieCode(it))
.map(it => RdDItemSort.getCodeVoie(it.name))
return actor.itemTypes[ITEM_TYPES.sort].map(it => Mapping.prepareSort(it, codeVoies))
.sort(Misc.ascending(it => `${it.voie} : ${it.description}`))
@ -245,7 +247,7 @@ export class Mapping {
static prepareSort(sort, voies) {
return {
voie: RdDItemSort.getCodeDraconic(sort, voies),
voie: RdDItemSort.getCode(sort, voies),
description: Mapping.descriptionSort(sort),
bonus: Mapping.bonusCase(sort)
}
@ -254,21 +256,16 @@ export class Mapping {
static descriptionSort(sort) {
const ptSeuil = Array(sort.system.coutseuil).map(it => '*')
const caseTMR = sort.system.caseTMRspeciale.length > 0 ? Mapping.toVar(sort.system.caseTMRspeciale) : Misc.upperFirst(TMRType[sort.system.caseTMR].name)
const ptreve = Mapping.addSpaceToNonNumeric(sort.system.ptreve)
const diff = Mapping.addSpaceToNonNumeric(sort.system.difficulte)
return `${sort.name}${ptSeuil} (${caseTMR}) R${diff} r${ptreve}`
const coutReve = 'r' + RdDItemSort.addSpaceToNonNumeric(sort.system.ptreve)
const diff = 'R' + RdDItemSort.addSpaceToNonNumeric(sort.system.difficulte)
return `${sort.name}${ptSeuil} (${caseTMR}) ${diff} ${coutReve}`
}
static addSpaceToNonNumeric(value) {
return Number.isNumeric(value) ? value : ' ' + Mapping.toVar(value)
}
static toVar(value) {
return value.replace('variable', 'var')
static toVar(caseSpeciale) {
return Grammar.toLowerCaseNoAccent(caseSpeciale).startsWith('var') ? 'var' : caseSpeciale
}
static bonusCase(sort) {
const list = RdDItemSort.bonuscaseStringToList(sort.system.bonuscase).sort(Misc.descending(it => it.bonus))
const list = RdDItemSort.stringToBonuscases(sort.system.bonuscase).sort(Misc.descending(it => it.bonus))
if (list.length > 0) {
const bonus = list[0]
return `+${bonus.bonus}% en ${bonus.case}`
@ -282,7 +279,7 @@ export class Mapping {
const race = ['', 'humain'].includes(Grammar.toLowerCaseNoAccent(actor.system.race)) ? '' : (actor.system.race + ' ')
const heure = actor.system.heure
const hn = `${sexeFeminin} à l'heure ${RdDTimestamp.definition(heure).avecArticle}`
const age = actor.system.age ? `${actor.system.age} ans` : undefined
const age = (actor.system.age && actor.system.age >0) ? `${actor.system.age} ans` : undefined
const taille = actor.system.taille
const poids = actor.system.poids
const cheveux = actor.system.cheveux ? `cheveux ${actor.system.cheveux}` : undefined

View File

@ -19,7 +19,7 @@ const PATHS = [
const RANDOM_VALUES = {
'system.sexe': { 'masculin': 1, 'féminin': 1 },
'system.main': { 'droitier': 51, 'gaucher': 15, 'ambidectre': 6 },
'system.main': { 'droitier': 51, 'gaucher': 15, 'ambidextre': 6 },
'system.cheveux': { 'noirs': 2, 'bruns': 5, 'châtains clair': 5, 'blonds': 4, 'blonds très clair': 1, 'roux carotte': 1, 'roux cuivré': 3 },
'system.yeux': { 'noirs': 2, 'noisettes': 3, 'bruns vert': 4, 'verts': 3, 'bleus clair': 3, 'bleus gris': 2, 'gris': 1, 'mauves': 1, 'indigos': 1 },
}

View File

@ -2,6 +2,516 @@
import "./xregexp-all.js";
import { SystemCompendiums } from "../settings/system-compendiums.js";
import { RdDBaseActorReve } from "../actor/base-actor-reve.js";
import { Grammar } from "../grammar.js";
import { Misc } from "../misc.js";
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
import { RdDItemTete } from "../item/tete.js";
import { ITEM_TYPES } from "../item.js";
const WHITESPACES = "\\s+"
const NUMERIC = "[\\+\\-]?\\d+"
const NUMERIC_VALUE = "(?<value>" + NUMERIC + ")"
const XREGEXP_COMP_CREATURE = WHITESPACES + "(?<carac>\\d+)"
+ WHITESPACES + NUMERIC_VALUE
+ "(" + WHITESPACES + "(?<init>\\d+)?\\s+?(?<dommages>[\\+\\-]?\\d+)?" + ")?"
// Skill parser depending on the type of actor
const compParser = {
personnage: "(\\s+\\((?<special>[^\\)]+)\\))?(,\\s*\\p{Letter}+)*(\\s+(?<malus>avec armure))?" + WHITESPACES + NUMERIC_VALUE,
creature: XREGEXP_COMP_CREATURE,
entite: XREGEXP_COMP_CREATURE
}
const MANIEMENTS = {
'de lancer': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } },
'de jet': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } },
'à une main': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } },
'à deux mains': (weapon) => { return { name: weapon.system.competence.replace("à 1 main", "à 2 mains"), categorie: 'melee' } },
'mêlée': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } },
}
const XREGEXP_WEAPON_MANIEMENT = "(?<maniement>(" + Misc.join(Object.keys(MANIEMENTS), '|') + "))"
const XREGEXP_SORT_VOIE = "(?<voies>[OHNT](\\/[OHNT])*)"
const XREGEXP_SORT_NAME = "(?<name>[^\\(]+)"
// const XREGEXP_SORT_CASE = "(?<coord>([A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+|[A-M]\\d{1,2})+)"
const XREGEXP_SORT_CASE = "(?<coord>([A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+|[A-M]\\d{1,2}))"
const XREGEXP_SORT = "(" + XREGEXP_SORT_VOIE
+ WHITESPACES + XREGEXP_SORT_NAME
+ WHITESPACES + "\\(" + XREGEXP_SORT_CASE + "\\)"
+ WHITESPACES + "R(?<diff>([\\-\\d]+|(\\w|\\s)+))"
+ WHITESPACES + "r(?<reve>(\\d+(\\+)?|\\s\\w+))"
+ "(" + WHITESPACES + "\\+(?<bonus>\\d+)\\s?%" + WHITESPACES + "en" + WHITESPACES + "(?<bonuscase>[A-M]\\d{1,2})" + ")?"
+ ")"
const XREGEXP_SORTRESERVE_CASE = "(?<coord>[A-M]\\d{1,2})";
const XREGEXP_SORT_RESERVE = XREGEXP_SORTRESERVE_CASE
+ WHITESPACES + XREGEXP_SORT_NAME
+ WHITESPACES + "(\\((?<description>[^\\)]+)\\))?"
// Main class for parsing a stat block
export class RdDStatBlockParser {
static openInputDialog() {
let dialog = new Dialog({
title: "Import de stats de PNJ/Créatures",
content: `
<div>
<p>Coller le texte de la stat ici</p>
<textarea id="statBlock" style="width: 100%; height: 200px;"></textarea>
</div>
`,
buttons: {
ok: {
label: "OK",
callback: async (html) => {
let statBlock = html.find("#statBlock")[0].value;
await RdDStatBlockParser.parseStatBlock(statBlock);
dialog.close();
}
},
cancel: {
label: "Cancel"
}
}
});
dialog.render(true);
}
static fixWeirdPDF(statString) {
// Split the statString into lines
let lines = statString.split("\n");
let newLines = [];
let index = 0;
let nextType = "string";
// Loop through each line
for (let i = 0; i < lines.length; i++) {
// remove trailing spaces
lines[i] = lines[i].trim();
// Is it text ?
if (lines[i].match(/^[a-zA-Zéêè\s]+/)) {
if (nextType == "string") {
newLines[index] = lines[i];
nextType = "number";
} else {
console.log("Wrong sequence string detected...", lines[i], nextType);
}
}
// Is it a number ?
if (lines[i].match(/^[\d\s]+/)) {
if (nextType == "number") {
newLines[index] = newLines[index] + lines[i];
nextType = "string";
index++;
} else {
console.log("Wrong sequence number detected...", lines[i], nextType);
}
}
}
}
static getHeureKey(heure) {
for (let h of game.system.rdd.config.heuresRdD) {
if (h.label.toLowerCase() == heure.toLowerCase()) {
return h.value;
}
}
return "vaisseau";
}
static fixCompName(name) {
name = name.replace("Voie d'", "");
name = name.replace("Voie de ", "");
return name
}
static async parseStatBlock(statString) {
//statString = statBlock03;
if (!statString) {
return;
}
// Special function to fix strange/weird copy/paste from PDF readers
// Unused up to now : this.fixWeirdPDF(statString);
// Replace all endline by space in the statString
statString = statString.replace(/\n/g, " ");
// Remove all multiple spaces
statString = statString.replace(/\s{2,}/g, " ");
// Remove all leading and trailing spaces
statString = statString.trim();
// TODO: check for entite
let type = RdDStatBlockParser.parseActorType(statString);
// Now start carac
let actorData = foundry.utils.deepClone(game.model.Actor[type]);
let items = [];
actorData.flags = { hautRevant: false, malusArmure: 0, type }
for (let key in actorData.carac) {
let caracDef = actorData.carac[key];
// Parse the stat string for each caracteristic
let carac = XRegExp.exec(statString, XRegExp(caracDef.label + "\\s+(?<value>\\d+)", 'giu'));
if (carac?.value) {
actorData.carac[key].value = Number(carac.value);
}
}
// If creature we need to setup additionnal fields
switch (type) {
case "creature":
RdDStatBlockParser.parseCreature(statString, actorData)
await RdDStatBlockParser.parseCompetences(statString, actorData, items)
break
case "entite":
RdDStatBlockParser.parseEntite(statString, actorData)
await RdDStatBlockParser.parseCompetences(statString, actorData, items)
break
case "personnage":
await RdDStatBlockParser.parseArmors(statString, actorData, items);
await RdDStatBlockParser.parseCompetences(statString, actorData, items);
await RdDStatBlockParser.parseWeapons(statString, items);
await RdDStatBlockParser.parseHautReve(statString, actorData, items);
RdDStatBlockParser.parsePersonnage(statString, actorData);
}
const name = RdDStatBlockParser.extractName(type, statString);
actorData.flags = undefined
console.log(actorData);
let newActor = await RdDBaseActorReve.create({ name, type, system: actorData, items });
await newActor.remiseANeuf()
await RdDStatBlockParser.adjustAttacks(newActor)
await RdDStatBlockParser.setValeursActuelles(newActor, statString)
await newActor?.sheet.render(true)
}
static async parseCompetences(statString, actorData, items) {
const competences = await SystemCompendiums.getCompetences(actorData.flags.type);
//console.log("Competences : ", competences);
for (let competence of competences) {
let pushed = actorData.flags.type != "personnage"
let compNameToSearch = RdDStatBlockParser.fixCompName(competence.name)
XRegExp.forEach(statString, XRegExp("\\s" + compNameToSearch + compParser[actorData.flags.type], 'giu'),
function (compMatch, i) {
items.push(RdDStatBlockParser.prepareCompetence(actorData, competence, compMatch))
if (!compMatch.special) {
pushed = true
}
})
if (!pushed) {
// ajout niveau de base
items.push(competence.toObject())
}
}
}
static prepareCompetence(actorData, competence, compMatch) {
const comp = competence.toObject();
if (compMatch.special) {
comp._id = undefined
comp.name = `${comp.name} (${compMatch.special})`
}
comp.system.niveau = Number(compMatch.value);
if (compMatch.malus) {
comp.system.niveau = Number(compMatch.value) - actorData.flags.malusArmure
}
if (comp.system.categorie == 'draconic' && comp.system.niveau > -11) {
actorData.flags.hautRevant = true
}
if (["creature", "entite"].includes(actorData.flags.type)) {
comp.system.carac_value = Number(compMatch.carac);
if (compMatch.dommages != undefined) {
comp.system.dommages = Number(compMatch.dommages)
comp.system.iscombat = true
}
}
return comp
}
static async parseArmors(statString, actorData, items) {
const armors = await SystemCompendiums.getWorldOrCompendiumItems("armure", "equipement");
for (let armor of armors) {
let matchArmor = XRegExp.exec(statString, XRegExp(armor.name, 'giu'));
if (matchArmor) {
armor = armor.toObject()
armor.system.equipe = true
actorData.flags.malusArmure = armor.system.malus
items.push(armor)
break
}
}
}
static async parseWeapons(statString, items) {
const weapons = await SystemCompendiums.getWorldOrCompendiumItems("arme", "equipement");
//console.log("Equipement : ", equipment);
// TODO: les noms d'armes peuvent avoir un suffixe (à une main, lancée) qui détermine la compétence correspondante
// TODO: une arme peut être spécifique ("fourche"), ajouter une compétence dans ces cas là?
for (let weapon of weapons) {
let nomArmeManiement = XRegExp.exec(weapon.name, XRegExp(".*" + XREGEXP_WEAPON_MANIEMENT));
if (nomArmeManiement) {
continue // ignore les objets 'Dague de jet" ou "dague mêlée"
}
let weapMatch = XRegExp.exec(statString, XRegExp(weapon.name
+ "(\\s*" + XREGEXP_WEAPON_MANIEMENT + ")?"
+ "\\s+(?<value>[\\+\\-]?\\d+)", 'giu'));
if (weapMatch) {
weapon = weapon.toObject();
weapon.system.equipe = 'true';
items.push(weapon);
const niveau = Number(weapMatch.value);
// now process the skill
if (weapMatch?.maniement) {
RdDStatBlockParser.setNiveauCompetenceArme(items, MANIEMENTS[weapMatch.maniement](weapon), niveau)
}
else {
RdDStatBlockParser.setNiveauCompetenceArme(items, { name: weapon.system.competence, categorie: 'melee' }, niveau)
RdDStatBlockParser.setNiveauCompetenceArme(items, { name: weapon.system.tir, categorie: 'tir' }, niveau)
RdDStatBlockParser.setNiveauCompetenceArme(items, { name: weapon.system.lancer, categorie: 'lancer' }, niveau)
}
}
}
}
static setNiveauCompetenceArme(items, competence, niveau) {
if (competence != "") {
const item = items.find(i => i.system.categorie == competence.categorie && Grammar.equalsInsensitive(i.name, competence.name))
if (item) {
item.system.niveau = niveau
}
}
}
static async adjustAttacks(newActor) {
if (["creature", "entite"].includes(newActor.type)) {
const bonusDommages = newActor.getBonusDegat()
const ajustementAttaques = newActor.itemTypes[ITEM_TYPES.competencecreature].filter(it => it.system.iscombat)
.map(it => {
return {
_id: it.id,
'system.categorie': 'melee',
'system.dommages': it.system.dommages - bonusDommages
}
})
await newActor.updateEmbeddedDocuments('Item', ajustementAttaques)
}
}
static async setValeursActuelles(newActor, statString) {
const updates = {
}
const endurance = XRegExp.exec(statString, XRegExp("endurance\\s+(?<value>\\d+)\\s+(\\(actuelle\\s*:\\s+(?<actuelle>\\d+)\\))?", 'giu'));
if (endurance?.value) {
if (newActor.getEnduranceMax() != endurance.value) {
ui.notifications.warn(`Vérifier le calcul de l'endurance, calcul: ${newActor.getEnduranceMax()} / import: ${endurance.value}`)
}
}
if (endurance?.actuelle) {
updates['system.sante.endurance.value'] = Number(endurance?.actuelle)
}
const vie = XRegExp.exec(statString, XRegExp("vie\\s+(?<value>\\d+)\\s+(\\(actuelle\\s*:\\s+(?<actuelle>\\d+)\\))?", 'giu'));
if (vie?.value) {
if (newActor.getVieMax() != vie.value) {
ui.notifications.warn(`Vérifier le calcul de la vie, calcul: ${newActor.getVieMax()} / import: ${vie.value}`)
}
}
if (vie?.actuelle) {
updates['system.sante.vie.value'] = Number(vie?.actuelle)
}
await newActor.update(updates)
}
static async parseHautReve(statString, actorData, items) {
// Attemp to detect spell
let sorts = await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-oniros");
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-hypnos"));
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-narcos"));
sorts = sorts.concat(await SystemCompendiums.getWorldOrCompendiumItems("sort", "sorts-thanatos"));
XRegExp.forEach(statString, XRegExp(XREGEXP_SORT, 'gu' /* keep case sensitive to match the spell draconic skill */),
function (matchSort, i) {
actorData.flags.hautRevant = true
const sortName = Grammar.toLowerCaseNoAccent(matchSort.name).trim().replace("", "'");
let sort = sorts.find(s => Grammar.toLowerCaseNoAccent(s.name) == sortName)
if (sort) {
sort = sort.toObject();
if (matchSort.bonus && matchSort.bonuscase) {
sort.system.bonuscase = `${matchSort.bonuscase}:${matchSort.bonus}`;
}
items.push(sort);
}
else {
ui.notifications.warn(`Impossible de trouver le sort ${matchSort.name} / ${sortName}`)
}
})
const sortsReserve = XRegExp.exec(statString, XRegExp('En réserve\\s+(?<reserve>.*)', 'gu' /* keep case sensitive to match the spell draconic skill */))
if (sortsReserve?.reserve) {
actorData.flags.hautRevant = true
XRegExp.forEach(sortsReserve.reserve, XRegExp(XREGEXP_SORT_RESERVE, 'giu'),
function (matchSortReserve, i) {
const name = Grammar.toLowerCaseNoAccent(matchSortReserve.name).trim().replace("", "'");
const sort = sorts.find(s => Grammar.toLowerCaseNoAccent(s.name) == name)
if (sort) {
if (!items.find(it => it._id == sort.id)) {
const nouveauSort = sort.toObject()
nouveauSort.system.bonuscase = `${matchSortReserve.coord}:1`;
items.push(sort.toObject())
}
items.push({
name: sort.name,
type: 'sortreserve',
img: sort.img,
system: {
sortid: sort.id,
draconic: sort.system.draconic,
coord: matchSortReserve.coord,
ptreve: Number(sort.system.ptreve.match(/\d+/)),
},
description: matchSortReserve.description
})
}
else {
ui.notifications.warn(`Impossible de mettre ${matchSortReserve.name} en réserve en ${matchSortReserve.coord}`)
}
})
}
if (actorData.flags.hautRevant) {
const donHR = await RdDItemTete.teteDonDeHautReve();
if (donHR) {
items.push(donHR.toObject());
}
const demiReve = XRegExp.exec(statString, XRegExp("Demi-rêve\\s+(?<value>[A-M]\\d{1,2})", 'giu'))
actorData.reve.tmrpos.coord = demiReve?.value ?? 'A1'
}
}
static parsePersonnage(statString, actorData) {
actorData.reve.seuil.value = actorData.carac.reve.value
actorData.compteurs.chance.value = actorData.carac.chance.value
const reveActuel = XRegExp.exec(statString, XRegExp("Rêve actuel\\s+(?<value>\\d+)", 'giu'))
actorData.reve.reve.value = reveActuel?.value ? Number(reveActuel.value) : actorData.reve.seuil.value
const feminin = XRegExp.exec(statString, XRegExp("né(?<value>e?) à", 'giu'));
actorData.sexe = (feminin?.value == 'e') ? 'féminin' : 'masculin';
// Get hour name : heure du XXXXX
const heure = XRegExp.exec(statString, XRegExp("heure (du|de la|des|de l\')\\s*(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s]+),", 'giu'));
actorData.heure = this.getHeureKey(heure?.value || "Vaisseau");
// Get age
const age = XRegExp.exec(statString, XRegExp("(?<value>\\d+) ans", 'giu'));
if (age?.value) {
actorData.age = Number(age.value);
}
// Get height
const taille = XRegExp.exec(statString, XRegExp("(?<value>\\d+m\\d+)", 'giu'));
if (taille?.value) {
actorData.taille = taille.value;
}
// Get weight
const poids = XRegExp.exec(statString, XRegExp(",\\s+(?<value>\\d+)\\s+kg", 'giu'));
if (poids?.value) {
actorData.poids = poids.value + ' kg';
}
// Get cheveux
const cheveux = XRegExp.exec(statString, XRegExp("kg,\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+),\\s+yeux", 'giu'));
if (cheveux?.value) {
actorData.cheveux = cheveux.value;
}
// Get yeux
const yeux = XRegExp.exec(statString, XRegExp("yeux\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+), Beau", 'giu'));
if (yeux?.value) {
actorData.yeux = yeux.value;
}
// Get beauty
const beaute = XRegExp.exec(statString, XRegExp("beauté\\s+(?<value>\\d+)", 'giu'));
if (beaute?.value) {
actorData.beaute = Number(beaute.value);
}
}
static parseCreature(statString, actorData) {
let protection = XRegExp.exec(statString, XRegExp("protection(\\s+naturelle)?\\s+(?<value>[\\-]?\\d+)", 'giu'));
if (protection?.value) {
actorData.attributs.protection.value = Number(protection.value);
}
let vitesse = XRegExp.exec(statString, XRegExp("vitesse\\s+(?<value>[\\d\\/]+)", 'giu'));
if (vitesse?.value) {
actorData.attributs.vitesse.value = vitesse.value;
}
}
static parseEntite(statString, actorData) {
actorData.definition.categorieentite = 'cauchemar'
actorData.definition.typeentite = ENTITE_NONINCARNE
let endurance = XRegExp.exec(statString, XRegExp("endurance\\s+(?<value>\\d+)", 'giu'));
if (endurance?.value) {
actorData.sante.endurance.value = Number(endurance.value);
actorData.sante.endurance.max = Number(endurance.value);
actorData.definition.typeentite = ENTITE_INCARNE
}
let vitesse = XRegExp.exec(statString, XRegExp("vitesse\\s+(?<value>[\\d\\/]+)", 'giu'));
if (vitesse?.value) {
actorData.attributs.vitesse.value = vitesse.value;
}
}
static parseActorType(statString) {
let force = XRegExp.exec(statString, XRegExp("Force\\s+(?<value>[\\+\\-]?\\d+)", 'giu'))
let vue = XRegExp.exec(statString, XRegExp("Vue\\s+(?<value>[\\+\\-]?\\d+)", 'giu'))
let perception = XRegExp.exec(statString, XRegExp("perception\\s+(?<value>\\d+)", 'giu'))
if (!force) {
return "entite"
}
if (!vue || perception) {
return "creature"
}
return "personnage"
}
static extractName(actorType, statString) {
if (actorType == "personnage") {
// Check if ',né le' is present
let namePersonnage = "Importé"
if (statString.includes(", né")) {
// Name is all string before first comma ','
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\'\\-\\s\\d]+),", 'giu'));
} else {
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\'\\-\\s\\d]+)\\s+TAILLE", 'giu'));
}
if (namePersonnage?.value) {
return Misc.upperFirst(namePersonnage?.value.toLowerCase());
}
}
const name = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+taille", 'giu'));
if (actorType == "entite") {
if (!(name?.value)) {
const nameEntiteReve = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+rêve", 'giu'));
return Misc.upperFirst(nameEntiteReve?.value || "Importé");
}
}
return Misc.upperFirst(name?.value || "Importé");
}
static warning(message) {
ui.notifications.warn(message);
}
}
/************************************************************************************/
// Some internal test strings
@ -76,7 +586,7 @@ Corps à corps
(0)
Esquive
+8
Escalade +4 / Saut +5 / Commerce +3 / Équitation
Escalade, Saut +4 / Commerce +3 / Équitation
+6 / Chirurgie 0 / Survie en extérieur +4 / Survie fo-
rêt +6 / Acrobatie -2 / Métallurgie +2 / Natation +3 /
Légendes -1 / Écriture -4
@ -194,240 +704,4 @@ Discrétion
Vigilance
13
+3
`
// Skill parser depending on the type of actor
const compParser = { personnage: "\\s+(?<value>[\\+\\-]?\\d+)", creature: "\\s+(?<carac>\\d+)\\s+(?<value>[\\+\\-]?\\d+)\\s?(?<init>\\d+)?\\s+?(?<dommages>\\+\\d+)?" };
// Main class for parsing a stat block
export class RdDStatBlockParser {
static openInputDialog() {
let dialog = new Dialog({
title: "Import de stats de PNJ/Créatures",
content: `
<div>
<p>Coller le texte de la stat ici</p>
<textarea id="statBlock" style="width: 100%; height: 200px;"></textarea>
</div>
`,
buttons: {
ok: {
label: "OK",
callback: async (html) => {
let statBlock = html.find("#statBlock")[0].value;
await RdDStatBlockParser.parseStatBlock(statBlock);
dialog.close();
}
},
cancel: {
label: "Cancel"
}
}
});
dialog.render(true);
}
static fixWeirdPDF(statString) {
// Split the statString into lines
let lines = statString.split("\n");
let newLines = [];
let index = 0;
let nextType = "string";
// Loop through each line
for (let i = 0; i < lines.length; i++) {
// remove trailing spaces
lines[i] = lines[i].trim();
// Is it text ?
if (lines[i].match(/^[a-zA-Zéêè\s]+/)) {
if ( nextType == "string" ) {
newLines[index] = lines[i];
nextType = "number";
} else {
console.log("Wrong sequence string detected...", lines[i], nextType);
}
}
// Is it a number ?
if (lines[i].match(/^[\d\s]+/)) {
if ( nextType == "number" ) {
newLines[index] = newLines[index] + lines[i];
nextType = "string";
index++;
} else {
console.log("Wrong sequence number detected...", lines[i], nextType);
}
}
}
}
static async parseStatBlock(statString, type = "npc") {
//statString = statBlock03;
if (!statString) {
return;
}
// Special function to fix strange/weird copy/paste from PDF readers
// Unused up to now : this.fixWeirdPDF(statString);
// Replace all endline by space in the statString
statString = statString.replace(/\n/g, " ");
// Remove all multiple spaces
statString = statString.replace(/\s{2,}/g, " ");
// Remove all leading and trailing spaces
statString = statString.trim();
let actorType = "personnage";
let perception = XRegExp.exec(statString.toLowerCase(), XRegExp("perception\\s+(?<value>\\d+)", 'gi'));
if (perception?.value ) {
actorType = "creature";
}
// Now start carac
let actorData = foundry.utils.deepClone(game.model.Actor[actorType]);
for (let key in game.model.Actor.personnage.carac) {
let caracDef = game.model.Actor.personnage.carac[key];
// Parse the stat string for each caracteristic
let carac = XRegExp.exec(statString.toLowerCase(), XRegExp(caracDef.label.toLowerCase()+"\\s+(?<value>\\d+)", 'gi'));
if (carac?.value) {
actorData.carac[key].value = Number(carac.value);
}
}
// If creature we need to setup additionnal fields
if (actorType == "creature") {
let plusDom = XRegExp.exec(statString.toLowerCase(), XRegExp("\\+dom\\s+(?<value>\\+\\d+)", 'gi'));
if (plusDom?.values) {
actorData.attributs.plusdom.value = Number(plusDom.value);
}
let protection = XRegExp.exec(statString.toLowerCase(), XRegExp("protection\\s+(?<value>\\d+)", 'gi'));
if (protection?.value) {
actorData.attributs.protection.value = Number(protection.value);
}
let endurance = XRegExp.exec(statString.toLowerCase(), XRegExp("endurance\\s+(?<value>\\d+)", 'gi'));
if (endurance?.value) {
actorData.sante.endurance.value = Number(endurance.value);
actorData.sante.endurance.max = Number(endurance.value);
}
let vie = XRegExp.exec(statString.toLowerCase(), XRegExp("vie\\s+(?<value>\\d+)", 'gi'));
if (vie.value) {
actorData.sante.vie.value = Number(vie.value);
actorData.sante.vie.max = Number(vie.value);
}
let vitesse = XRegExp.exec(statString.toLowerCase(), XRegExp("vitesse\\s+(?<value>[\\d\\/]+)", 'gi'));
if (vitesse?.value) {
actorData.attributs.vitesse.value = vitesse.value;
}
}
let items = [];
// Get skills from compendium
const competences = await SystemCompendiums.getCompetences(actorType);
//console.log("Competences : ", competences);
let allComp = competences.map(i => i.toObject())
for (let comp of allComp) {
let skill = XRegExp.exec(statString.toLowerCase(), XRegExp(comp.name.toLowerCase()+compParser[actorType], 'gi'));
if (skill) {
comp.system.niveau = Number(skill.value);
if (actorType == "creature") {
comp.system.carac_value = Number(skill.carac);
if (skill.init) {
comp.system.dommages = Number(skill.dommages);
comp.system.iscombat = true;
}
items.push(comp); // Only selective push
}
}
if (actorType == "personnage") {
items.push(comp); // Always push
}
}
// Now process weapons
const weapons = await SystemCompendiums.getWorldOrCompendiumItems("arme", "equipement")
//console.log("Equipement : ", equipment);
for (let w of weapons) {
let weapon = XRegExp.exec(statString.toLowerCase(), XRegExp(w.name.toLowerCase()+"\\s+(?<value>\\+\\d+)", 'gi'));
if (weapon) {
w.system.equipe = true
items.push(w.toObject());
// now process the skill
if ( w.system?.competence != "") {
let wComp = items.find(i => i.name.toLowerCase() == w.system.competence.toLowerCase());
if (wComp) {
wComp.system.niveau = Number(weapon.value);
}
}
if ( w.system?.tir != "") {
let wComp = items.find(i => i.name.toLowerCase() == w.system.tir.toLowerCase());
if (wComp) {
wComp.system.niveau = Number(weapon.value);
}
}
if ( w.system?.lancer != "") {
let wComp = items.find(i => i.name.toLowerCase() == w.system.lancer.toLowerCase());
if (wComp) {
wComp.system.niveau = Number(weapon.value);
}
}
}
}
// Now process armors
const armors = await SystemCompendiums.getWorldOrCompendiumItems("armure", "equipement")
for (let a of armors) {
let armor = XRegExp.exec(statString.toLowerCase(), XRegExp(a.name.toLowerCase(), 'gi'));
if (armor) {
a.system.equipe = true
items.push(a.toObject());
}
}
// Get hour name : heure du XXXXX
let heure = XRegExp.exec(statString.toLowerCase(), XRegExp("heure du\\s+(?<value>\\w+)", 'gi'));
if (heure?.value) {
actorData.heure = heure.value;
}
// Get age
let age = XRegExp.exec(statString.toLowerCase(), XRegExp("(?<value>\\d+) ans", 'gi'));
if (age?.value) {
actorData.age = Number(age.value);
}
// Get height
let taille = XRegExp.exec(statString.toLowerCase(), XRegExp("(?<value>\\d+)m\\d+", 'gi'));
if (taille?.value) {
actorData.taille = taille.value;
}
// Get weight
let poids = XRegExp.exec(statString.toLowerCase(), XRegExp("(?<value>\\d+) kg", 'gi'));
if (poids?.value) {
actorData.poids = poids.value;
}
// Get beauty
let beaute = XRegExp.exec(statString.toLowerCase(), XRegExp("beauté\\s+(?<value>\\d+)", 'gi'));
if (beaute?.value) {
actorData.beaute = Number(beaute.value);
}
// Name is all string before ', né'
let name
if (actorType == "personnage") {
name = XRegExp.exec(statString.toLowerCase(), XRegExp("(?<value>[\\w\\s\\d]+),", 'gi'));
if (!name?.value) {
name = XRegExp.exec(statString.toLowerCase(), XRegExp("(?<value>.+)\\s+taille", 'gi'));
}
name = name?.value || "Importé";
}
if (actorType == "creature") {
name = XRegExp.exec(statString.toLowerCase(), XRegExp("(?<value>.+)\\s+taille", 'gi'));
name = name?.value || "Importé";
}
let newActor = RdDBaseActorReve.create({name: name || "Importé", type:actorType, system: actorData, items: items});
// DUmp....
console.log(actorData);
}
}
`

View File

@ -51,7 +51,7 @@ export class DialogCreateSigneDraconique extends Dialog {
whisper: ChatUtility.getOwners(actor),
content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html", {
signe: signe,
alias: actor.name
alias: actor.getAlias()
})
});
}

View File

@ -2,11 +2,11 @@
export class DialogSelect extends Dialog {
static extractIdNameImg(it) { return { id: it.id, name: it.name, img: it.img } }
static async select(selectData, onSelectChoice) {
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-select.html", selectData)
static async select(selectionData, onSelectChoice) {
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-select.html", selectionData)
const dialogData = {
title: selectData.title ?? selectData.label,
title: selectionData.title ?? selectionData.label,
content: html,
buttons: {}
}
@ -18,7 +18,7 @@ export class DialogSelect extends Dialog {
'max-height': 600,
'z-index': 99999
}
new DialogSelect(dialogData, dialogOptions, selectData, onSelectChoice).render(true)
new DialogSelect(dialogData, dialogOptions, selectionData, onSelectChoice).render(true)
}
constructor(dialogData, dialogOptions, selectionData, onSelectChoice) {
@ -36,7 +36,7 @@ export class DialogSelect extends Dialog {
}
choiceSelected(selectedId) {
const selected = this.selectionData.find(it => it.id == selectedId)
const selected = this.selectionData.list.find(it => it.id == selectedId)
this.close()
if (selected) {
this.onSelectChoice(selected)

View File

@ -24,7 +24,7 @@ export class Grammar {
}
static includesLowerCaseNoAccent(value, content) {
return Grammar.toLowerCaseNoAccent(value).includes(Grammar.toLowerCaseNoAccent(content));
return Grammar.toLowerCaseNoAccent(value)?.includes(Grammar.toLowerCaseNoAccent(content));
}
/* -------------------------------------------- */

View File

@ -1,10 +1,12 @@
import { Grammar } from "./grammar.js";
import { RdDItemCompetenceCreature } from "./item-competencecreature.js"
import { ITEM_TYPES } from "./item.js";
import { BASE_CORPS_A_CORPS } from "./item/base-items.js";
import { RdDCombatManager } from "./rdd-combat.js";
const nomCategorieParade = {
"sans-armes": "Sans arme",
"armes-naturelles": "Sans arme",
"armes-naturelles": "Armes naturelles",
"hast": "Armes d'hast",
"batons": "Bâtons",
"boucliers": "Boucliers",
@ -30,7 +32,7 @@ export class RdDItemArme extends Item {
case ITEM_TYPES.competencecreature:
return RdDItemCompetenceCreature.armeCreature(arme);
}
return RdDItemArme.mainsNues();
return RdDItemArme.corpsACorps();
}
static getCompetenceArme(arme, maniement) {
@ -56,8 +58,8 @@ export class RdDItemArme extends Item {
}
static niveauCompetenceArme(arme, competences) {
const compArme = competences.find(it => it.name == arme.system.competence);
return compArme?.system.niveau ?? -8;
const compArme = competences.find(it => Grammar.equalsInsensitive(it.name, arme.system.competence))
return compArme?.system.niveau ?? -8
}
/* -------------------------------------------- */
@ -234,19 +236,14 @@ export class RdDItemArme extends Item {
return false
}
static ajoutCorpsACorps(armes, actor) {
armes.push(RdDItemArme.mainsNues(actor));
armes.push(RdDItemArme.empoignade(actor));
}
static corpsACorps(actor) {
let competence = actor?.getCompetenceCorpsACorps() ?? { system: { niveau: -6 } };
let competence = actor?.getCompetenceCorpsACorps() ?? BASE_CORPS_A_CORPS
let melee = actor ? actor.system.carac['melee'].value : 0
return {
_id: competence?.id,
_id: competence.id,
name: 'Corps à corps',
type: ITEM_TYPES.arme,
img: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp',
img: competence.img,
system: {
initiative: RdDCombatManager.calculInitiative(competence.system.niveau, melee),
equipe: true,
@ -257,6 +254,8 @@ export class RdDItemArme extends Item {
mortalite: 'non-mortel',
competence: 'Corps à corps',
resistance: 1,
baseInit: 4,
cac: 'pugilat',
deuxmains: true,
categorie_parade: 'sans-armes'
}
@ -266,8 +265,6 @@ export class RdDItemArme extends Item {
static mainsNues(actor) {
const mainsNues = RdDItemArme.corpsACorps(actor)
mainsNues.name = 'Mains nues'
mainsNues.system.cac = 'pugilat'
mainsNues.system.baseInit = 4
return mainsNues;
}

View File

@ -1,5 +1,6 @@
import { Grammar } from "./grammar.js";
import { RdDItem } from "./item.js";
import { SANS_COMPETENCE } from "./item/base-items.js";
import { Misc } from "./misc.js";
const competenceTroncs = [["Esquive", "Dague", "Corps à corps"],
@ -137,7 +138,7 @@ export class RdDItemCompetence extends Item {
/* -------------------------------------------- */
static computeEconomieXPTronc(competences) {
return competenceTroncs.map(
list => list.map(name => RdDItemCompetence.findCompetence(competences, name))
list => list.map(name => RdDItemCompetence.findCompetence(competences, name, { onMessage: message => { } }))
// calcul du coût xp jusqu'au niveau 0 maximum
.map(it => RdDItemCompetence.computeDeltaXP(it?.system.base ?? -11, Math.min(it?.system.niveau ?? -11, 0)))
.sort(Misc.ascending())
@ -203,26 +204,12 @@ export class RdDItemCompetence extends Item {
}
/* -------------------------------------------- */
static findCompetences(list, name) {
return Misc.findAllLike(name, list, { filter: it => it.isCompetence(), description: 'compétence' });
static findCompetences(list, name, options = {}) {
options = foundry.utils.mergeObject(options, { preFilter: it => it.isCompetence(), description: 'compétence' }, { overwrite: false, inplace: false });
return Misc.findAllLike(name, list, options);
}
static sansCompetence() {
return {
name: "Sans compétence",
type: "competence",
img: "systems/foundryvtt-reve-de-dragon/icons/templates/icone_parchement_vierge.webp",
system: {
niveau: 0,
default_diffLibre: 0,
base: 0,
categorie: "Aucune",
description: "",
descriptionmj: "",
defaut_carac: "",
}
};
}
static sansCompetence() { return SANS_COMPETENCE }
static findFirstItem(list, idOrName, options) {
return list.find(it => it.id == idOrName && options.preFilter(it))
@ -272,8 +259,9 @@ export class RdDItemCompetence extends Item {
/* -------------------------------------------- */
static triVisible(competences) {
return competences.filter(it => !it.system.isHidden)
.sort((a, b) => RdDItemCompetence.compare(a, b))
return competences
? competences.filter(it => !it.system.isHidden).sort((a, b) => RdDItemCompetence.compare(a, b))
: []
}
static $positionTri(comp) {

View File

@ -49,17 +49,7 @@ export class RdDItemCompetenceCreature extends Item {
/* -------------------------------------------- */
static isAttaque(item) {
if (item.type == ITEM_TYPES.competencecreature) {
switch (item.system.categorie) {
case "melee":
case "tir":
case "lancer":
case "naturelle":
case "possession":
return true
}
}
return false
return RdDItemCompetenceCreature.getCategorieAttaque(item) != undefined
}
static getCategorieAttaque(item) {
@ -70,7 +60,6 @@ export class RdDItemCompetenceCreature extends Item {
case "lancer":
case "naturelle":
case "possession":
case "parade":
return item.system.categorie
}
}
@ -92,12 +81,7 @@ export class RdDItemCompetenceCreature extends Item {
static isParade(item) {
if (item.type == ITEM_TYPES.competencecreature) {
switch (item.system.categorie) {
case "melee":
case "naturelle":
case "parade":
return true
}
return item.system.categorie_parade || item.system.isparade
}
return false
}

View File

@ -13,6 +13,7 @@ import { Misc } from "./misc.js";
import { RdDTimestamp } from "./time/rdd-timestamp.js";
import { RdDItemCompetenceCreature } from "./item-competencecreature.js";
import { ITEM_TYPES, RdDItem } from "./item.js";
import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js";
/**
* Extend the basic ItemSheet for RdD specific items
@ -100,55 +101,59 @@ export class RdDItemSheet extends ItemSheet {
descriptionmj: await TextEditor.enrichHTML(this.item.system.descriptionmj, { async: true }),
isComestible: this.item.getUtilisationCuisine(),
options: RdDSheetUtility.mergeDocumentRights(this.options, this.item, this.isEditable),
competences: await SystemCompendiums.getCompetences('personnage'),
categories: RdDItem.getCategories(this.item.type),
}
if (this.item.type == ITEM_TYPES.competencecreature) {
formData.isparade = RdDItemCompetenceCreature.isParade(this.item)
formData.isdommages = RdDItemCompetenceCreature.isDommages(this.item)
}
const competences = await SystemCompendiums.getCompetences('personnage');
formData.categories = RdDItem.getCategories(this.item.type)
if (this.item.type == 'tache' || this.item.type == 'livre' || this.item.type == 'meditation' || this.item.type == 'oeuvre') {
if (this.item.type == ITEM_TYPES.tache ||
this.item.type == ITEM_TYPES.livre ||
this.item.type == ITEM_TYPES.meditation ||
this.item.type == ITEM_TYPES.oeuvre) {
formData.caracList = foundry.utils.duplicate(game.model.Actor.personnage.carac)
formData.caracList["reve-actuel"] = foundry.utils.duplicate(game.model.Actor.personnage.reve.reve)
formData.competences = competences;
}
if (this.item.type == 'arme') {
formData.competences = competences.filter(it => it.isCompetenceArme())
if (this.item.type == ITEM_TYPES.arme) {
formData.competences = formData.competences.filter(it => it.isCompetenceArme())
}
if (['sort', 'sortreserve'].includes(this.item.type)) {
formData.competences = competences.filter(it => RdDItemCompetence.isDraconic(it));
}
if (this.item.type == 'recettecuisine') {
if (this.item.type == ITEM_TYPES.recettecuisine) {
formData.ingredients = await TextEditor.enrichHTML(this.object.system.ingredients, { async: true })
}
if (this.item.type == 'extraitpoetique') {
if (this.item.type == ITEM_TYPES.extraitpoetique) {
formData.extrait = await TextEditor.enrichHTML(this.object.system.extrait, { async: true })
formData.texte = await TextEditor.enrichHTML(this.object.system.texte, { async: true })
}
if (this.item.type == 'recettealchimique') {
RdDAlchimie.processManipulation(this.item, this.actor && this.actor.id);
if (this.item.type == ITEM_TYPES.recettealchimique) {
RdDAlchimie.processManipulation(this.item, this.actor?.id);
formData.manipulation_update = await TextEditor.enrichHTML(this.object.system.manipulation_update, { async: true })
formData.utilisation = await TextEditor.enrichHTML(this.object.system.utilisation, { async: true })
formData.enchantement = await TextEditor.enrichHTML(this.object.system.enchantement, { async: true })
formData.sureffet = await TextEditor.enrichHTML(this.object.system.sureffet, { async: true })
}
if (this.item.type == 'gemme') {
if (this.item.type == ITEM_TYPES.gemme) {
formData.gemmeTypeList = RdDGemme.getGemmeTypeOptionList();
RdDGemme.calculDataDerivees(this.item);
RdDGemme.calculDataDerivees(this.item)
}
if (this.item.type == 'potion') {
await RdDHerbes.addPotionFormData(formData);
if (this.item.type == ITEM_TYPES.potion) {
RdDHerbes.calculFormData(formData, this.item)
}
if (formData.options.isOwned && this.item.type == 'herbe' && (formData.system.categorie == 'Soin' || formData.system.categorie == 'Repos')) {
formData.isIngredientPotionBase = true;
if (this.item.type == ITEM_TYPES.herbe) {
if (formData.options.isOwned && ['Soin', 'Repos'].includes(formData.system.categorie)) {
formData.isIngredientPotionBase = true;
}
}
if (this.item.type == 'sortreserve') {
if (this.item.type == ITEM_TYPES.sortreserve) {
const sortId = this.item.system.sortid;
formData.competences = formData.competences.filter(it => RdDItemCompetence.isDraconic(it));
formData.sort = formData.options.isOwned ? this.item.actor.items.get(sortId) : game.items.get(sortId);
}
formData.bonusCaseList = RdDItemSort.getBonusCaseList(formData, true);
if (this.item.type == ITEM_TYPES.sort) {
formData.competences = formData.competences.filter(it => RdDItemCompetence.isDraconic(it));
formData.bonusCaseList = RdDItemSort.getBonusCaseList(this.item);
}
return formData;
}
@ -185,6 +190,9 @@ export class RdDItemSheet extends ItemSheet {
}
}
})
this.html.find('.delete-bonus-case').click((event) => {
this.supprimerBonusCase(event.currentTarget.attributes['data-deleteCoord'].value)
})
this.html.find('.date-enchantement').change((event) => {
const jour = Number(this.html.find('input.date-enchantement[name="enchantement.jour"]').val());
@ -264,23 +272,66 @@ export class RdDItemSheet extends ItemSheet {
}
}
async supprimerBonusCase(deleteCoord){
if (this.item.type == ITEM_TYPES.sort) {
const oldList = RdDItemSort.getBonusCaseList(this.item)
const newList = oldList.filter(it => it.case != deleteCoord);
if (newList.length != oldList.length) {
await this.item.update({
'system.bonuscase': RdDItemSort.bonuscasesToString(newList)
})
}
}
}
/* -------------------------------------------- */
/** @override */
_updateObject(event, formData) {
switch (this.item.type) {
case ITEM_TYPES.sort:
// Données de bonus de cases ?
formData['system.bonuscase'] = RdDItemSort.buildBonuscaseFromArrays(formData.bonusValue, formData.caseValue)
formData['system.bonuscase'] = RdDItemSort.bonuscasesToString(RdDItemSheet._listCaseTmr(
formData.caseTmrCoord,
formData.caseTmrBonus,
formData.caseTmrAdd
))
break
case ITEM_TYPES.competence:
if (formData['system.niveau'] == undefined) {
formData['system.niveau'] = formData['system.base']
}
formData['system.niveau'] = formData['system.niveau'] ?? formData['system.base']
break
}
return this.item.update(formData);
}
/* -------------------------------------------- */
/**
* reconstruit les bonus de cases
* @param {*} caseTmrCoord tableau des coordonées
* @param {*} caseTmrBonus tableau des bonus
* @param {*} caseTmrAdd case à ajouter
* @returns list d'objets {coord, bonus}
*/
static _listCaseTmr(caseTmrCoord, caseTmrBonus, caseTmrAdd) {
const listCaseTmrCoord = caseTmrCoord == undefined ? [] : Array.isArray(caseTmrCoord) ? caseTmrCoord : [caseTmrCoord]
const listCaseTmrBonus = caseTmrBonus == undefined ? [] : Array.isArray(caseTmrBonus) ? caseTmrBonus : [caseTmrBonus]
if (caseTmrAdd != undefined && caseTmrAdd != '' && TMRUtility.verifyTMRCoord(caseTmrAdd) && !listCaseTmrCoord.includes(caseTmrAdd)) {
listCaseTmrCoord.push(TMRUtility.getTMR(caseTmrAdd).coord)
listCaseTmrBonus.push(1)
}
const list = [];
const caseChecked = {};
for (let i = 0; i < listCaseTmrBonus.length && i < listCaseTmrCoord.length; i++) {
const coord = listCaseTmrCoord[i] == FLEUVE_COORD ? FLEUVE_COORD : (listCaseTmrCoord[i]?.toUpperCase() ?? 'A1')
const bonus = listCaseTmrBonus[i] ?? 0
if (TMRUtility.verifyTMRCoord(coord) && bonus >= 0 && !caseChecked[coord]) {
caseChecked[coord] = coord
list.push({ case: coord, bonus: bonus })
}
}
return list
}
/* -------------------------------------------- */
async _onDragStart(event) {
}

View File

@ -2,52 +2,69 @@ import { Grammar } from "./grammar.js";
import { RdDItemCompetence } from "./item-competence.js";
import { ITEM_TYPES } from "./item.js";
import { Misc } from "./misc.js";
import { TMRUtility } from "./tmr-utility.js";
import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js";
const VOIES_DRACONIC = [
export const VOIES_DRACONIC = [
{ code: 'O', label: "Voie d'Oniros", short: 'Oniros', ordre: 'a' },
{ code: 'H', label: "Voie d'Hypnos", short: 'Hypnos', ordre: 'b' },
{ code: 'N', label: "Voie de Narcos", short: 'Narcos', ordre: 'c' },
{ code: 'T', label: "Voie de Thanatos", short: 'Thanatos', ordre: 'd' },
{ code: 'O/H/N/T', label: "Oniros/Hypnos/Narcos/Thanatos", short: 'Oniros/Hypnos/Narcos/Thanatos', ordre: 'e' },
{ code: 'O/H/N', label: "Oniros/Hypnos/Narcos", short: "Oniros/Hypnos/Narcos", ordre: 'f' }
{ code: 'O/H/N/T', label: "Oniros/Hypnos/Narcos/Thanatos", short: 'O/H/N/T', ordre: 'e' },
{ code: 'O/H/N', label: "Oniros/Hypnos/Narcos", short: "O/H/N", ordre: 'f' }
]
/* -------------------------------------------- */
export class RdDItemSort extends Item {
static preloadHandlebars() {
Handlebars.registerHelper('itemSort-spaceIfText', val => RdDItemSort.addSpaceToNonNumeric(val))
Handlebars.registerHelper('itemSort-codeDraconic', voie => RdDItemSort.getCode(voie))
Handlebars.registerHelper('itemSort-shortDraconic', voie => RdDItemSort.getShortVoie(voie))
}
static getDraconicsSort(draconicList, sort) {
static addSpaceToNonNumeric(value) {
return Number.isNumeric(value) || ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].includes( String(value).charAt[0]) ? value : ' ' + RdDItemSort.toVar(value)
}
static toVar(value) {
return value ? value.replace('variable', 'var') : ''
}
static getDraconicsSort(competencesDraconic, sort) {
// se baser sur la voie du sort?
switch (Grammar.toLowerCaseNoAccent(sort.name)) {
case "lecture d'aura":
case "detection d'aura":
return draconicList;
return competencesDraconic;
case "annulation de magie":
return draconicList.filter(it => !RdDItemCompetence.isThanatos(it));
return competencesDraconic.filter(it => !RdDItemCompetence.isThanatos(it));
}
return [RdDItemCompetence.getVoieDraconic(draconicList, sort.system.draconic)];
const voies = sort.system.draconic.split('/')
return voies.map(voie => RdDItemCompetence.getVoieDraconic(competencesDraconic, voie))
}
static getOrdreCode(code) {
return (VOIES_DRACONIC.find(it => it.code == code)?.ordre ?? '?')
}
static getVoieCode(voie) {
return VOIES_DRACONIC.find(it => voie.name.includes(it.short))?.code ?? '?'
static getCodeVoie(voie) {
return VOIES_DRACONIC.find(it => [it.code, it.short, it.label].includes(voie))?.code ?? '?'
}
static getCodeDraconic(sort, voies = ['O', 'H', 'N', 'T']) {
static getShortVoie(voie) {
return VOIES_DRACONIC.find(it => [it.code, it.short, it.label].includes(voie))?.short ?? voie
}
static getCode(sort, codeVoies = ['O', 'H', 'N', 'T']) {
switch (Grammar.toLowerCaseNoAccent(sort.name)) {
case "lecture d'aura":
case "detection d'aura":
return RdDItemSort.$voiesConnues('O/H/N/T', voies)
return RdDItemSort.$voiesConnues('O/H/N/T', codeVoies)
case "annulation de magie":
return RdDItemSort.$voiesConnues('O/H/N', voies)
return RdDItemSort.$voiesConnues('O/H/N', codeVoies)
}
const voie = VOIES_DRACONIC.find(it => it.label.includes(sort.system.draconic))
return voie?.code ?? sort.system.draconic
return RdDItemSort.getCodeVoie(sort.system.draconic)
}
static $voiesConnues(voiesSort, voies) {
const codes = voies.filter(it => voiesSort.includes(it))
.sort(Misc.ascending(it => RdDItemSort.getOrdreCode(it)))
@ -79,89 +96,60 @@ export class RdDItemSort extends Item {
return variable;
}
/* -------------------------------------------- */
static buildBonusCaseList(bonuscase, newCase) {
const list = RdDItemSort.bonuscaseStringToList(bonuscase)
if (newCase) {
list.push({ case: "Nouvelle", bonus: 0 })
}
return list;
}
/**
* Retourne une liste de bonus/case pour un item-sheet
* @param {} item
*/
static getBonusCaseList(item, newCase = false) {
static getBonusCaseList(item) {
// Gestion spéciale case bonus
if (item.type == ITEM_TYPES.sort) {
return RdDItemSort.buildBonusCaseList(item.system.bonuscase, newCase);
return RdDItemSort.stringToBonuscases(item.system.bonuscase)
}
return undefined;
}
/* -------------------------------------------- */
/** Met à jour les données de formulaire
* si static des bonus de cases sont présents
* */
static buildBonuscaseFromArrays(bonuses, coords) {
if (bonuses) {
const list = [];
const caseCheck = {};
for (let i = 0; i < bonuses.length && i < coords.length; i++) {
const coord = coords[i] == 'Fleuve' ? 'Fleuve' : (coords[i]?.toUpperCase() ?? 'A1');
const bonus = bonuses[i] || 0;
if (TMRUtility.verifyTMRCoord(coord) && bonus > 0 && caseCheck[coord] == undefined) {
caseCheck[coord] = bonus;
list.push({ case: coord, bonus: bonus });
}
}
return RdDItemSort._bonuscaseListToString(list);
}
return undefined;
return [];
}
/* -------------------------------------------- */
static incrementBonusCase(actor, sort, coord) {
if (TMRUtility.getTMR(coord).type == "fleuve") {
coord = 'Fleuve';
if (TMRUtility.isFleuve(coord)) {
coord = FLEUVE_COORD;
}
let list = RdDItemSort.stringToBonuscases(sort.system.bonuscase);
const existing = list.find(it => it.case == coord)
const bonus = Number(existing?.bonus ?? 0) + 1
if (existing) {
existing.bonus = bonus
}
else {
list.push({ case: coord, bonus: 1 })
}
const list = RdDItemSort.buildBonusCaseList(sort.system.bonuscase, false);
const bonus = Number(list.find(it => it.case == coord)?.bonus ?? 0);
const modified = { case: coord, bonus: bonus + 1 };
const bonuscase = RdDItemSort._bonuscaseListToString(
list.filter(it => it.case != coord).concat(modified)
);
// Sauvegarde/update
actor.updateEmbeddedDocuments('Item', [{ _id: sort._id, 'system.bonuscase': bonuscase }]);
actor.updateEmbeddedDocuments('Item', [{ _id: sort._id, 'system.bonuscase': RdDItemSort.bonuscasesToString(list) }]);
}
/* -------------------------------------------- */
static getCaseBonus(sort, coord) {
const isFleuve = TMRUtility.getTMR(coord).type == "fleuve";
let bc = RdDItemSort.buildBonusCaseList(sort.system.bonuscase, false)
.filter(it => it.case == coord || (isFleuve && it.case == 'Fleuve'))
.find(it => true)
const search = TMRUtility.isFleuve(coord)
? it => it.case == 'Fleuve'
: it => it.case == coord;
const bc = RdDItemSort.stringToBonuscases(sort.system.bonuscase)
.find(search)
return Number(bc?.bonus ?? 0);
}
static _bonuscaseListToString(list) {
static bonuscasesToString(list) {
return list.map(it => `${it.case}:${it.bonus}`)
.sort(Misc.ascending())
.join(',');
}
static bonuscaseStringToList(bonuscase) {
static stringToBonuscases(bonuscase) {
if (bonuscase == undefined || bonuscase == '') {
return []
}
return bonuscase.split(',').map(it => {
const b = it.split(':');
return { case: b[0], bonus: b[1] };
});
return bonuscase.split(',')
.map(it => it.split(':'))
.map(it => { return { case: it[0], bonus: it[1] } });
}
}

View File

@ -8,6 +8,7 @@ import { SystemCompendiums } from "./settings/system-compendiums.js";
import { RdDRaretes } from "./item/raretes.js";
import { CATEGORIES_COMPETENCES } from "./item-competence.js";
import { CATEGORIES_COMPETENCES_CREATURES } from "./item-competencecreature.js";
import { BASE_CORPS_A_CORPS, BASE_ESQUIVE } from "./item/base-items.js";
export const ACTOR_TYPES = {
personnage: 'personnage',
@ -44,6 +45,7 @@ export const ITEM_TYPES = {
danse: 'danse',
chant: 'chant',
jeu: 'jeu',
race: 'race',
recettecuisine: 'recettecuisine',
oeuvre: 'oeuvre',
recettealchimique: 'recettealchimique',
@ -244,13 +246,13 @@ export class RdDItem extends Item {
isEsquive() {
return (this.isCompetence()
&& this.system.categorie == 'melee'
&& Grammar.includesLowerCaseNoAccent(this.name, 'Esquive'));
&& Grammar.includesLowerCaseNoAccent(this.name, BASE_ESQUIVE.name));
}
isCorpsACorps() {
return this.isCompetence()
&& this.system.categorie == 'melee'
&& Grammar.includesLowerCaseNoAccent(this.name, 'Corps à Corps')
&& Grammar.includesLowerCaseNoAccent(this.name, BASE_CORPS_A_CORPS.name)
}
isCompetenceArme() {
@ -571,6 +573,7 @@ export class RdDItem extends Item {
else {
await this.quantiteIncDec(item.system.quantite);
}
// TODO: suppression dans les conteneurs!
await item.delete();
}
@ -601,6 +604,9 @@ export class RdDItem extends Item {
if (!other || !this.isInventaire()) {
return [false, undefined];
}
if (this.isConteneur()) {
return [false, `Impossible de regrouper des conteneurs, ils ne sont pas empilables`];
}
if (this.system.quantite == undefined) {
return [false, `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`];
}

View File

@ -1,9 +1,11 @@
import { RdDItem } from "../item.js";
import { ITEM_TYPES, RdDItem } from "../item.js";
import { Misc } from "../misc.js";
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js";
export class RdDItemArmure extends RdDItem {
static get ITEM_TYPE() { return ITEM_TYPES.armure }
static get defaultIcon() {
return "systems/foundryvtt-reve-de-dragon/icons/armes_armures/armure_plaques.webp";
}

20
module/item/base-items.js Normal file
View File

@ -0,0 +1,20 @@
export const POSSESSION_SANS_DRACONIC = { name: 'Sans draconic', type: 'competence', system: { niveau: 0, defaut_carac: "reve-actuel", }, img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp' }
export const PAS_DE_DRACONIC = { name: 'Pas de draconic', type: 'competence', system: { niveau: -11, defaut_carac: "reve" }, img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp' }
export const BASE_CORPS_A_CORPS = { name: 'Corps à Corps', type: 'competence', system: { niveau: -6, defaut_carac: "melee" }, img: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp' }
export const BASE_ESQUIVE = { name: 'Esquive', type: 'competence', system: { niveau: -6, defaut_carac: "derobee" }, img: 'systems/foundryvtt-reve-de-dragon/icons/competence_esquive.webp' }
export const SANS_COMPETENCE = {
name: "Sans compétence",
type: 'competence',
system: {
niveau: 0,
default_diffLibre: 0,
base: 0,
categorie: "Aucune",
description: "",
descriptionmj: "",
defaut_carac: "",
},
img: "systems/foundryvtt-reve-de-dragon/icons/templates/icone_parchement_vierge.webp"
}

View File

@ -48,8 +48,9 @@ export class RdDItemBlessure extends RdDItem {
let lostEndurance = 0
let lostVie = 0
if (definition.endurance) {
lostEndurance = await new Roll(definition.endurance).roll().total;
actor.santeIncDec("endurance", -Number(lostEndurance));
lostEndurance = new Roll(definition.endurance)
await lostEndurance.roll();
actor.santeIncDec("endurance", -Number(lostEndurance.total));
}
if (definition.vie) {
lostVie = definition.vie

100
module/item/race.js Normal file
View File

@ -0,0 +1,100 @@
import { ITEM_TYPES, RdDItem } from "../item.js";
import { Misc } from "../misc.js";
import { LIST_CARAC, RdDCarac } from "../rdd-carac.js";
export class RdDItemRace extends RdDItem {
static get ITEM_TYPE() { return ITEM_TYPES.race }
static get defaultIcon() {
return "systems/foundryvtt-reve-de-dragon/icons/humanoides/humain.webp";
}
static checkRacialMax(actor, code, value) {
const race = RdDItemRace.getRace(actor)
if (code == LIST_CARAC.force.code) {
if (!race.isForceValid(actor, value)) {
ui.notifications.warn(race.system.carac.force.limitmessage)
return false
}
}
const carac = RdDCarac.carac(code)
if (race.isMax(actor, code, value - 1)) {
ui.notifications.warn(`${value} est supérieure au maximum de ${carac.label}`)
return false
}
return true
}
static applyRacialLimits(actor) {
const race = RdDItemRace.getRace(actor)
actor.system.carac.taille.value = race.getValidTaille(actor.getTaille())
actor.system.carac.force.value = Math.min(
actor.getForce(),
race.getForceMax(actor))
}
static isRacialMax(actor, code, value = undefined) {
return RdDItemRace.getRace(actor).isMax(actor, code, value)
}
static getRace(actor) {
return actor.itemTypes[ITEM_TYPES.race].find(it => true) ?? RdDItemRace.getFallbackRace()
}
static getFallbackRace() {
if (RdDItemRace.fallback == undefined) {
RdDItemRace.fallback = new RdDItemRace({ name: 'Humain', type: RdDItemRace.ITEM_TYPE })
}
return RdDItemRace.fallback
}
isMax(actor, code, value = undefined) {
const path = RdDCarac.carac(code)?.path
if (value == undefined) {
value = path ? foundry.utils.getProperty(actor, path) : 0
}
if (code == LIST_CARAC.force.code) {
return value >= this.getForceMax(actor)
}
const max = foundry.utils.getProperty(this, path) ?? -1
return (max > 0 && value >= max)
}
getValidTaille(taille) {
const min = Math.max(this.system.carac.taille.min, 0)
if (min > taille) {
ui.notifications.warn("La Taille est inférieur au minimum racial")
return min
}
const raceMax = this.system.carac.taille.max;
const max = raceMax < 0 ? taille + 1 : raceMax
if (max < taille) {
ui.notifications.warn("La Taille est supérieure au maximum racial")
return max
}
return taille
}
isForceValid(actor, value) {
return value <= this.getForceMax(actor)
}
getForceMax(actor) {
const terms = this.system.carac.force.limit.replaceAll(' ', '').split('+')
return terms.map(
it => {
const term = Number.parseInt(it)
if (Number.isInteger(term)) {
return term
}
const path = RdDCarac.carac(it)?.path
if (path) {
return foundry.utils.getProperty(actor, path)
}
return 0
}
).reduce(Misc.sum());
}
}

View File

@ -1,11 +1,12 @@
import { RdDBaseActorSheet } from "../actor/base-actor-sheet.js";
import { ITEM_TYPES } from "../item.js";
import { RdDSheetUtility } from "../rdd-sheet-utility.js";
import { RdDUtility } from "../rdd-utility.js";
import { RdDItemInventaireSheet } from "./sheet-base-inventaire.js";
export class RdDConteneurItemSheet extends RdDItemInventaireSheet {
static get ITEM_TYPE() { return "conteneur" };
static get ITEM_TYPE() { return ITEM_TYPES.conteneur };
async getData() {
const formData = await super.getData();

25
module/item/tete.js Normal file
View File

@ -0,0 +1,25 @@
import { Grammar } from "../grammar.js"
import { ITEM_TYPES, RdDItem } from "../item.js"
import { SystemCompendiums } from "../settings/system-compendiums.js"
const DON_HAUT_REVE = "Don de Haut-Rêve"
export class RdDItemTete extends RdDItem {
static get defaultIcon() {
return "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp"
}
static isDonDeHautReve(tete) {
return tete.type == ITEM_TYPES.tete && Grammar.equalsInsensitive(tete.name, DON_HAUT_REVE)
}
static async teteDonDeHautReve() {
const tetes = await SystemCompendiums.getItems("tetes-de-dragon-pour-tous-personnages", ITEM_TYPES.tete)
const tete = tetes.find(it => RdDItemTete.isDonDeHautReve(it))
if (!tete) {
ui.notifications.warn(`Impossible de trouver la tête "${DON_HAUT_REVE}", vérifiez le compendium de têtes pour tous personnages`)
}
return tete
}
}

View File

@ -2,10 +2,11 @@ import { RdDBaseActor } from "./actor/base-actor.js";
import { LOG_HEAD, SYSTEM_RDD } from "./constants.js";
import { Grammar } from "./grammar.js";
import { Monnaie } from "./item-monnaie.js";
import { RdDItem, ITEM_TYPES } from "./item.js";
import { RdDItem, ITEM_TYPES, ACTOR_TYPES } from "./item.js";
import { RdDTimestamp } from "./time/rdd-timestamp.js";
import { RdDRaretes } from "./item/raretes.js";
import { RdDCalendrier } from "./time/rdd-calendrier.js";
import { VOIES_DRACONIC } from "./item-sort.js";
import { SystemCompendiums } from "./settings/system-compendiums.js";
class Migration {
get code() { return "sample"; }
@ -137,7 +138,7 @@ class _10_0_21_VehiculeStructureResistanceMax extends Migration {
}
class _10_0_33_MigrationNomsDraconic extends Migration {
get code() { return "competences-creature-parade"; }
get code() { return "competences-nom-draconic"; }
get version() { return "10.0.33"; }
migrationNomDraconic(ancien) {
@ -530,6 +531,63 @@ class _11_2_20_MigrationAstrologie extends Migration {
}
}
class _12_0_26_MigrationVoieSorts extends Migration {
get code() { return "migration-voies-sorts" }
get version() { return "12.0.26" }
async migrate() {
await this.applyItemsUpdates(items => items
.filter(it => [ITEM_TYPES.sort, ITEM_TYPES.sortreserve].includes(it.type))
.map(it => this.migrateSort(it))
)
await this.applyItemsUpdates(items => items
.filter(it => ITEM_TYPES.competence == it.type && it.system.categorie == 'draconic')
.map(it => this.migrateDraconic(it))
)
}
migrateDraconic(it) {
return {
_id: it.id,
name: this.convertDraconic(it.name),
}
}
migrateSort(it) {
return {
_id: it.id,
'system.draconic': this.convertDraconic(it.system.draconic),
}
}
convertDraconic(draconic) {
for (let v of VOIES_DRACONIC) {
if ([v.label, v.short, v.code].includes(draconic)) {
return v.short
}
}
return draconic
}
}
class _12_0_32_MigrationRaces extends Migration {
get code() { return "migration-races" }
get version() { return "12.0.32" }
async migrate() {
const races = await SystemCompendiums.getItems("races", ITEM_TYPES.race)
await game.actors.filter(it => it.type == ACTOR_TYPES.personnage).forEach(async actor => {
if (actor.itemTypes[ITEM_TYPES.race].length == 0) {
const raceName = actor.system.race ?? 'Humain'
const race = races.find(it => Grammar.equalsInsensitive(raceName, it.name))
if (race) {
console.log(this.code, `Adding race ${race.name} to actor ${actor.name}`)
actor.createEmbeddedDocuments('Item', [race])
console.log(this.code, `Neutralizing race ${race.name} adjustments for actor ${actor.name}`)
actor._applyRaceCaracUpdates(race, -1)
}
}
})
}
}
export class Migrations {
static getMigrations() {
return [
@ -549,6 +607,8 @@ export class Migrations {
new _10_7_19_CategorieCompetenceCreature(),
new _10_7_19_PossessionsEntiteVictime(),
new _11_2_20_MigrationAstrologie(),
new _12_0_26_MigrationVoieSorts(),
new _12_0_32_MigrationRaces(),
];
}

View File

@ -1,5 +1,12 @@
import { Grammar } from "./grammar.js";
const DEFAULT_FIND_OPTIONS = {
mapper: it => it.name,
preFilter: it => true,
description: 'valeur',
onMessage: m => ui.notifications.info(m)
}
/**
* This class is intended as a placeholder for utility methods unrelated
* to actual classes of the game system or of FoundryVTT
@ -22,7 +29,7 @@ export class Misc {
const isPositiveNumber = value != NaN && value > 0;
return isPositiveNumber ? "+" + number : number
}
static modulo(n, m) {
return ((n % m) + m) % m;
}
@ -58,9 +65,6 @@ export class Misc {
* @param {*} value value to convert to an integer using parseInt
*/
static toInt(value) {
if (value == undefined) {
return 0;
}
const parsed = parseInt(value);
return isNaN(parsed) ? 0 : parsed;
}
@ -168,7 +172,7 @@ export class Misc {
static firstConnectedGM() {
if (foundry.utils.isNewerVersion(game.release.version, '12.0')) {
return game.users.activeGM
}
}
return game.users.find(u => u.isGM && u.active);
}
@ -189,13 +193,7 @@ export class Misc {
* and there is no connected GM
*/
static documentIfResponsible(document) {
if (foundry.utils.isNewerVersion(game.release.version, '12.0')) {
if (game.users.activeGM || (Misc.connectedGMs().length == 0 && Misc.isOwnerPlayer(document)))
{
return document
}
}
else if (Misc.isFirstConnectedGM() || (Misc.connectedGMs().length == 0 && Misc.isOwnerPlayer(document))) {
if (Misc.isFirstConnectedGM() || (Misc.connectedGMs().length == 0 && Misc.isFirstOwnerPlayer(document))) {
return document
}
return undefined
@ -205,8 +203,11 @@ export class Misc {
return document.testUserPermission && document.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
}
static isOwnerPlayerOrUniqueConnectedGM(actor) {
return Misc.isOwnerPlayer(actor) ?? Misc.isFirstConnectedGM();
static isFirstOwnerPlayer(document) {
if (!document.testUserPermission) {
return false
}
return game.users.find(u => document.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)) == game.user
}
/**
@ -215,6 +216,10 @@ export class Misc {
static isFirstConnectedGM() {
return game.user == Misc.firstConnectedGM();
}
static hasConnectedGM() {
return Misc.firstConnectedGM();
}
static firstConnectedGMId() {
return Misc.firstConnectedGM()?.id;
@ -232,13 +237,7 @@ export class Misc {
/* -------------------------------------------- */
static findFirstLike(value, elements, options = {}) {
options = foundry.utils.mergeObject({
mapper: it => it.name,
preFilter: it => true,
description: 'valeur',
onMessage: m => ui.notifications.info(m)
}, options);
options = foundry.utils.mergeObject(DEFAULT_FIND_OPTIONS, options, { overwrite: true, inplace: false });
const subset = this.findAllLike(value, elements, options);
if (subset.length == 0) {
console.log(`Aucune ${options.description} pour ${value}`);
@ -257,13 +256,7 @@ export class Misc {
}
static findAllLike(value, elements, options = {}) {
options = foundry.utils.mergeObject({
mapper: it => it.name,
preFilter: it => true,
description: 'valeur',
onMessage: m => ui.notifications.info(m)
}, options);
options = foundry.utils.mergeObject(DEFAULT_FIND_OPTIONS, options, { overwrite: true, inplace: false });
if (!value) {
options.onMessage(`Pas de ${options.description} correspondant à une valeur vide`);
return [];

View File

@ -3,42 +3,73 @@ import { Misc } from "./misc.js";
const TABLE_CARACTERISTIQUES_DERIVEES = {
// xp: coût pour passer du niveau inférieur à ce niveau
1: { xp: 3, poids: "moins de 1kg", poidsMin: 0, poidsMax: 1, plusdom: -5, sconst: 0.5, sust: 0.1 },
2: { xp: 3, poids: "1-5", poidsMin: 1, poidsMax: 5, plusdom: -4, sconst: 0.5, sust: 0.3 },
3: { xp: 4, poids: "6-10", poidsMin: 6, poidsMax: 10, plusdom: -3, sconst: 1, sust: 0.5, beaute: 'hideux' },
4: { xp: 4, poids: "11-20", poidsMin: 11, poidsMax: 20, plusdom: -3, sconst: 1, sust: 1, beaute: 'repoussant' },
5: { xp: 5, poids: "21-30", poidsMin: 21, poidsMax: 30, plusdom: -2, sconst: 1, sust: 1, beaute: 'franchement très laid' },
6: { xp: 5, poids: "31-40", poidsMin: 31, poidsMax: 40, plusdom: -1, sconst: 2, sust: 2, beaute: 'laid' },
7: { xp: 6, poids: "41-50", poidsMin: 41, poidsMax: 50, plusdom: -1, sconst: 2, sust: 2, beaute: 'très désavantagé' },
8: { xp: 6, poids: "51-60", poidsMin: 51, poidsMax: 60, plusdom: 0, sconst: 2, sust: 2, beaute: 'désavantagé' },
9: { xp: 7, poids: "61-65", poidsMin: 61, poidsMax: 65, plusdom: 0, sconst: 3, sust: 2, beaute: 'pas terrible' },
10: { xp: 7, poids: "66-70", poidsMin: 66, poidsMax: 70, plusdom: 0, sconst: 3, sust: 3, beaute: 'commun' },
11: { xp: 8, poids: "71-75", poidsMin: 71, poidsMax: 75, plusdom: 0, sconst: 3, sust: 3, beaute: 'pas mal' },
12: { xp: 8, poids: "76-80", poidsMin: 76, poidsMax: 80, plusdom: +1, sconst: 4, sust: 3, beaute: 'avantagé' },
13: { xp: 9, poids: "81-90", poidsMin: 81, poidsMax: 90, plusdom: +1, sconst: 4, sust: 3, beaute: 'mignon' },
14: { xp: 9, poids: "91-100", poidsMin: 91, poidsMax: 100, plusdom: +2, sconst: 4, sust: 4, beaute: 'beau' },
15: { xp: 10, poids: "101-110", poidsMin: 101, poidsMax: 110, plusdom: +2, sconst: 5, sust: 4, beaute: 'très beau' },
16: { xp: 20, poids: "111-120", poidsMin: 111, poidsMax: 120, plusdom: +3, sconst: 5, sust: 4, beaute: 'éblouissant' },
17: { xp: 30, poids: "121-131", poidsMin: 121, poidsMax: 131, plusdom: +3, sconst: 5, sust: 5 },
18: { xp: 40, poids: "131-141", poidsMin: 131, poidsMax: 141, plusdom: +4, sconst: 6, sust: 5 },
19: { xp: 50, poids: "141-150", poidsMin: 141, poidsMax: 150, plusdom: +4, sconst: 6, sust: 5 },
20: { xp: 60, poids: "151-160", poidsMin: 151, poidsMax: 160, plusdom: +4, sconst: 6, sust: 6 },
21: { xp: 70, poids: "161-180", poidsMin: 161, poidsMax: 180, plusdom: +5, sconst: 7, sust: 6 },
22: { xp: 80, poids: "181-200", poidsMin: 181, poidsMax: 200, plusdom: +5, sconst: 7, sust: 7 },
23: { xp: 90, poids: "201-300", poidsMin: 201, poidsMax: 300, plusdom: +6, sconst: 7, sust: 8 },
24: { xp: 100, poids: "301-400", poidsMin: 301, poidsMax: 400, plusdom: +6, sconst: 8, sust: 9 },
25: { xp: 110, poids: "401-500", poidsMin: 401, poidsMax: 500, plusdom: +7, sconst: 8, sust: 10 },
26: { xp: 120, poids: "501-600", poidsMin: 501, poidsMax: 600, plusdom: +7, sconst: 8, sust: 11 },
27: { xp: 130, poids: "601-700", poidsMin: 601, poidsMax: 700, plusdom: +8, sconst: 9, sust: 12 },
28: { xp: 140, poids: "701-800", poidsMin: 701, poidsMax: 800, plusdom: +8, sconst: 9, sust: 13 },
29: { xp: 150, poids: "801-900", poidsMin: 801, poidsMax: 900, plusdom: +9, sconst: 9, sust: 14 },
30: { xp: 160, poids: "901-1000", poidsMin: 901, poidsMax: 1000, plusdom: +9, sconst: 10, sust: 15 },
31: { xp: 170, poids: "1001-1500", poidsMin: 1001, poidsMax: 1500, plusdom: +10, sconst: 10, sust: 16 },
32: { xp: 180, poids: "1501-2000", poidsMin: 1501, poidsMax: 2000, plusdom: +11, sconst: 10, sust: 17 }
1: { xp: 3, niveau: -5, poids: "moins de 1kg", poidsMin: 0, poidsMax: 1, plusdom: -5, sconst: 0.5, sust: 0.1 },
2: { xp: 3, niveau: -4, poids: "1-5", poidsMin: 1, poidsMax: 5, plusdom: -4, sconst: 0.5, sust: 0.3 },
3: { xp: 4, niveau: -3, poids: "6-10", poidsMin: 6, poidsMax: 10, plusdom: -3, sconst: 1, sust: 0.5, beaute: 'hideux' },
4: { xp: 4, niveau: -2, poids: "11-20", poidsMin: 11, poidsMax: 20, plusdom: -3, sconst: 1, sust: 1, beaute: 'repoussant' },
5: { xp: 5, niveau: -1, poids: "21-30", poidsMin: 21, poidsMax: 30, plusdom: -2, sconst: 1, sust: 1, beaute: 'franchement très laid' },
6: { xp: 5, niveau: 0, poids: "31-40", poidsMin: 31, poidsMax: 40, plusdom: -1, sconst: 2, sust: 2, beaute: 'laid' },
7: { xp: 6, niveau: 0, poids: "41-50", poidsMin: 41, poidsMax: 50, plusdom: -1, sconst: 2, sust: 2, beaute: 'très désavantagé' },
8: { xp: 6, niveau: 0, poids: "51-60", poidsMin: 51, poidsMax: 60, plusdom: 0, sconst: 2, sust: 2, beaute: 'désavantagé' },
9: { xp: 7, niveau: 0, poids: "61-65", poidsMin: 61, poidsMax: 65, plusdom: 0, sconst: 3, sust: 2, beaute: 'pas terrible' },
10: { xp: 7, niveau: 0, poids: "66-70", poidsMin: 66, poidsMax: 70, plusdom: 0, sconst: 3, sust: 3, beaute: 'commun' },
11: { xp: 8, niveau: 1, poids: "71-75", poidsMin: 71, poidsMax: 75, plusdom: 0, sconst: 3, sust: 3, beaute: 'pas mal' },
12: { xp: 8, niveau: 1, poids: "76-80", poidsMin: 76, poidsMax: 80, plusdom: +1, sconst: 4, sust: 3, beaute: 'avantagé' },
13: { xp: 9, niveau: 2, poids: "81-90", poidsMin: 81, poidsMax: 90, plusdom: +1, sconst: 4, sust: 3, beaute: 'mignon' },
14: { xp: 9, niveau: 2, poids: "91-100", poidsMin: 91, poidsMax: 100, plusdom: +2, sconst: 4, sust: 4, beaute: 'beau' },
15: { xp: 10, niveau: 3, poids: "101-110", poidsMin: 101, poidsMax: 110, plusdom: +2, sconst: 5, sust: 4, beaute: 'très beau' },
16: { xp: 20, niveau: 3, poids: "111-120", poidsMin: 111, poidsMax: 120, plusdom: +3, sconst: 5, sust: 4, beaute: 'éblouissant' },
17: { xp: 30, niveau: 4, poids: "121-131", poidsMin: 121, poidsMax: 131, plusdom: +3, sconst: 5, sust: 5 },
18: { xp: 40, niveau: 4, poids: "131-141", poidsMin: 131, poidsMax: 141, plusdom: +4, sconst: 6, sust: 5 },
19: { xp: 50, niveau: 5, poids: "141-150", poidsMin: 141, poidsMax: 150, plusdom: +4, sconst: 6, sust: 5 },
20: { xp: 60, niveau: 5, poids: "151-160", poidsMin: 151, poidsMax: 160, plusdom: +4, sconst: 6, sust: 6 },
21: { xp: 70, niveau: 6, poids: "161-180", poidsMin: 161, poidsMax: 180, plusdom: +5, sconst: 7, sust: 6 },
22: { xp: 80, niveau: 6, poids: "181-200", poidsMin: 181, poidsMax: 200, plusdom: +5, sconst: 7, sust: 7 },
23: { xp: 90, niveau: 7, poids: "201-300", poidsMin: 201, poidsMax: 300, plusdom: +6, sconst: 7, sust: 8 },
24: { xp: 100, niveau: 7, poids: "301-400", poidsMin: 301, poidsMax: 400, plusdom: +6, sconst: 8, sust: 9 },
25: { xp: 110, niveau: 8, poids: "401-500", poidsMin: 401, poidsMax: 500, plusdom: +7, sconst: 8, sust: 10 },
26: { xp: 120, niveau: 8, poids: "501-600", poidsMin: 501, poidsMax: 600, plusdom: +7, sconst: 8, sust: 11 },
27: { xp: 130, niveau: 9, poids: "601-700", poidsMin: 601, poidsMax: 700, plusdom: +8, sconst: 9, sust: 12 },
28: { xp: 140, niveau: 9, poids: "701-800", poidsMin: 701, poidsMax: 800, plusdom: +8, sconst: 9, sust: 13 },
29: { xp: 150, niveau: 10, poids: "801-900", poidsMin: 801, poidsMax: 900, plusdom: +9, sconst: 9, sust: 14 },
30: { xp: 160, niveau: 10, poids: "901-1000", poidsMin: 901, poidsMax: 1000, plusdom: +9, sconst: 10, sust: 15 },
31: { xp: 170, niveau: 11, poids: "1001-1500", poidsMin: 1001, poidsMax: 1500, plusdom: +10, sconst: 10, sust: 16 },
32: { xp: 180, niveau: 11, poids: "1501-2000", poidsMin: 1501, poidsMax: 2000, plusdom: +11, sconst: 10, sust: 17 }
};
export const LIST_CARAC = {
'taille': { code: 'taille', label: 'Taille', isCarac: true, path: 'system.carac.taille.value' },
'apparence': { code: 'apparence', label: 'Apparence', isCarac: true, path: 'system.carac.apparence.value' },
'constitution': { code: 'constitution', label: 'Constitution', isCarac: true, path: 'system.carac.constitution.value' },
'force': { code: 'force', label: 'Force', isCarac: true, path: 'system.carac.force.value' },
'agilite': { code: 'agilite', label: 'Agilité', isCarac: true, path: 'system.carac.agilite.value' },
'dexterite': { code: 'dexterite', label: 'Dextérité', isCarac: true, path: 'system.carac.dexterite.value' },
'vue': { code: 'vue', label: 'Vue', isCarac: true, path: 'system.carac.vue.value' },
'ouie': { code: 'ouie', label: 'Ouïe', isCarac: true, path: 'system.carac.ouie.value' },
'odoratgout': { code: 'odoratgout', label: 'Odorat-Goût', isCarac: true, path: 'system.carac.odoratgout.value' },
'volonte': { code: 'volonte', label: 'Volonté', isCarac: true, path: 'system.carac.volonte.value' },
'intellect': { code: 'intellect', label: 'Intellect', isCarac: true, path: 'system.carac.intellect.value' },
'empathie': { code: 'empathie', label: 'Empathie', isCarac: true, path: 'system.carac.empathie.value' },
'reve': { code: 'reve', label: 'Rêve', isCarac: true, path: 'system.carac.reve.value' },
'chance': { code: 'chance', label: 'Chance', isCarac: true, path: 'system.carac.chance.value' },
'protection': { code: 'protection', label: 'Protection naturelle', isCarac: false, path: 'system.attributs.protection.value' },
'beaute': { code: 'beaute', label: 'Beauté', isCarac: false, path: 'system.background.beaute.value' }
}
export class RdDCarac {
static carac(code) {
return LIST_CARAC[code]
}
static label(code) {
return RdDCarac.carac(code)?.label ?? '---'
}
static caracs(filter = it => it.isCarac) {
return Object.values(LIST_CARAC).filter(filter)
}
static isAgiliteOuDerobee(selectedCarac) {
return selectedCarac?.label.match(/(Agilité|Dérobée)/);
}
@ -53,13 +84,18 @@ export class RdDCarac {
return selectedCarac?.label?.toLowerCase()?.match(/r(e|ê)ve(( |-)actuel)?/);
}
/**
* Lappel à la chance nest possible que pour recommencer les jets dactions physiques :
* tous les jets de combat, de FORCE, dAGILITÉ, de DEXTÉRITÉ, de Dérobée, dAPPARENCE,
* ainsi que de Perception active et volontaire.
*/
static isActionPhysique(selectedCarac) {
return !selectedCarac ||
selectedCarac?.label.match(/(Apparence|Force|Agilité|Dextérité|Vue|Ouïe|Odorat-Goût|Empathie|Dérobée|Mêlée|Tir|Lancer)/);
return Grammar.toLowerCaseNoAccent(selectedCarac?.label)
?.match(/(apparence|force|agilite|dexterite|vue|ouie|gout|odorat|empathie|melee|tir|lancer|derobee)/) != null
}
static getCaracDerivee(value) {
return TABLE_CARACTERISTIQUES_DERIVEES[Math.min(Math.max(Number(value), 1), 32)];
return TABLE_CARACTERISTIQUES_DERIVEES[Math.min(Math.max(Math.floor(Number(value)), 1), 32)];
}
static computeTotal(carac, beaute = undefined) {
@ -90,15 +126,4 @@ export class RdDCarac {
static getCaracXp(targetValue) {
return RdDCarac.getCaracDerivee(targetValue)?.xp ?? 200;
}
/**
* Lappel à la chance nest possible que pour recommencer les jets dactions physiques :
* tous les jets de combat, de FORCE, dAGILITÉ, de DEXTÉRITÉ, de Dérobée, dAPPARENCE,
* ainsi que de Perception active et volontaire.
*/
static isActionPhysique(selectedCarac) {
return Grammar.toLowerCaseNoAccent(selectedCarac?.label)?.match(/(apparence|force|agilite|dexterite|vue|ouie|odorat|empathie|melee|tir|lancer|derobee)/);
}
}

View File

@ -133,10 +133,10 @@ export class RdDCombatManager extends Combat {
scene: canvas.scene._id,
actor: combatant.actor?._id,
token: combatant.token._id,
alias: combatant.token.name,
alias: combatant.token?.name,
sound: CONFIG.sounds.dice,
},
flavor: `${combatant.token.name} a fait son jet d'Initiative (${messageOptions.info})<br>`
flavor: `${combatant.token?.name} a fait son jet d'Initiative (${messageOptions.info})<br>`
},
messageOptions);
roll.toMessage(messageData, { rollMode, create: true });
@ -226,18 +226,21 @@ export class RdDCombatManager extends Combat {
}
static $prepareAttaqueArme(infoAttaque) {
const comp = infoAttaque.competences.find(c => c.name == infoAttaque.competence);
const comp = infoAttaque.competences.find(it => Grammar.equalsInsensitive(it.name, infoAttaque.competence))
const arme = infoAttaque.arme;
const attaque = foundry.utils.duplicate(arme);
const attaque = foundry.utils.duplicate(arme)
const carac = comp?.system.defaut_carac ?? (infoAttaque.infoMain == '(lancer)' ? 'lancer' : infoAttaque.infoMain == '(lancer)' ? 'tir' : 'melee')
const niveau = comp?.system.niveau ?? (infoAttaque.infoMain == '(lancer)' ? -8 : -6)
attaque.action = 'attaque';
attaque.system.competence = infoAttaque.competence;
attaque.system.dommagesReels = infoAttaque.dommagesReel;
attaque.system.infoMain = infoAttaque.infoMain;
attaque.system.niveau = comp.system.niveau;
attaque.system.niveau = niveau
const ajustement = (arme?.parent?.getEtatGeneral() ?? 0) + (arme?.system.magique) ? arme.system.ecaille_efficacite : 0;
attaque.system.initiative = RdDCombatManager.calculInitiative(comp.system.niveau, infoAttaque.carac[comp.system.defaut_carac].value, ajustement);
return attaque;
const ajustement = (arme.parent?.getEtatGeneral() ?? 0) + (arme.system.magique) ? arme.system.ecaille_efficacite : 0
attaque.system.initiative = RdDCombatManager.calculInitiative(niveau, infoAttaque.carac[carac].value, ajustement)
return attaque
}
/* -------------------------------------------- */
@ -252,7 +255,7 @@ export class RdDCombatManager extends Combat {
if (action && action.type == "arme") {
for (let initData of premierRoundInit) {
if (Grammar.toLowerCaseNoAccentNoSpace(action.system.initpremierround).includes(initData.pattern)) {
let msg = `<h4>L'initiative de ${combatant.actor.name} a été modifiée !</h4>
let msg = `<h4>L'initiative de ${combatant.actor.getAlias()} a été modifiée !</h4>
<hr>
<div>
Etant donné son ${action.name}, son initative pour ce premier round est désormais de ${initData.init}.
@ -435,11 +438,10 @@ export class RdDCombat {
/* -------------------------------------------- */
static onMsgEncaisser(msg) {
if (Misc.isOwnerPlayerOrUniqueConnectedGM()) {
let defender = canvas.tokens.get(msg.defenderToken.id).actor;
if (Misc.isOwnerPlayer(defender)) {
let attackerRoll = msg.attackerRoll;
let attacker = msg.attackerId ? game.actors.get(msg.attackerId) : undefined;
let defender = canvas.tokens.get(msg.defenderToken.id).actor;
defender.encaisserDommages(attackerRoll, attacker, msg.attackerToken);
const rddCombat = RdDCombat.rddCombatForAttackerAndDefender(msg.attackerId, msg.attackerToken.id, msg.defenderToken.id);
rddCombat?.removeChatMessageActionsPasseArme(attackerRoll.passeArme);
@ -750,11 +752,10 @@ export class RdDCombat {
dialog.render(true);
}
/* -------------------------------------------- */
_prepareAttaque(competence, arme) {
let rollData = {
alias: this.attackerToken.name,
alias: this.attacker?.getAlias(),
passeArme: foundry.utils.randomID(16),
mortalite: arme?.system.mortalite,
competence: competence,
@ -774,9 +775,9 @@ export class RdDCombat {
}
else {
// sans armes: à mains nues
const niveau = competence.system.niveau;
const init = RdDCombatManager.calculInitiative(niveau, this.attacker.system.carac['melee'].value);
rollData.arme = RdDItemArme.mainsNues({ niveau: niveau, initiative: init });
rollData.arme = RdDItemArme.corpsACorps(this.attacker)
rollData.arme.system.niveau = competence.system.niveau
rollData.arme.system.initiative = RdDCombatManager.calculInitiative(competence.system.niveau, this.attacker.system.carac['melee'].value);
}
return rollData;
}
@ -803,10 +804,10 @@ export class RdDCombat {
}
const choixParticuliere = await ChatMessage.create({
alias: this.attacker.name,
alias: this.attacker.getAlias(),
whisper: ChatUtility.getOwners(this.attacker),
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-attaque-particuliere.html', {
alias: this.attackerToken.name,
alias: this.attacker.getAlias(),
attackerId: this.attackerId,
attackerToken: this.attackerToken,
defenderToken: this.defenderToken,
@ -826,7 +827,7 @@ export class RdDCombat {
attackerRoll.dmg = RdDBonus.dmg(attackerRoll, this.attacker, this.defender.isEntite());
let defenderRoll = { attackerRoll: attackerRoll, passeArme: attackerRoll.passeArme, show: {} }
attackerRoll.show = {
cible: this.defenderToken?.name ?? 'la cible',
cible: this.defender?.getAlias() ?? 'la cible',
isRecul: (attackerRoll.particuliere == 'force' || attackerRoll.tactique == 'charge')
}
await RdDResolutionTable.displayRollData(attackerRoll, this.attacker, 'chat-resultat-attaque.html');
@ -892,7 +893,7 @@ export class RdDCombat {
const choixDefense = await ChatMessage.create({
// message privé: du défenseur à lui même (et aux GMs)
speaker: ChatMessage.getSpeaker(this.defender, canvas.tokens.get(this.defenderTokenId)),
alias: this.attackerToken.name,
alias: this.attacker?.getAlias(),
whisper: ChatUtility.getOwners(this.defender),
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-demande-defense.html', paramDemandeDefense),
});
@ -1015,7 +1016,7 @@ export class RdDCombat {
/* -------------------------------------------- */
_prepareParade(attackerRoll, armeParade, competenceParade) {
let defenderRoll = {
alias: this.defenderToken?.name,
alias: this.defender?.getAlias(),
passeArme: attackerRoll.passeArme,
diffLibre: attackerRoll.diffLibre,
attackerToken: this.attackerToken,
@ -1072,7 +1073,7 @@ export class RdDCombat {
async esquive(attackerRoll, compId, compName) {
const esquive = this.defender.getCompetence(compId) ?? this.defender.getCompetence(compName)
if (esquive == undefined) {
ui.notifications.error(this.defender.name + " n'a pas de compétence " + compName);
ui.notifications.error(this.defender.getAlias() + " n'a pas de compétence " + compName);
return;
}
console.log("RdDCombat.esquive >>>", attackerRoll, esquive);
@ -1099,7 +1100,7 @@ export class RdDCombat {
/* -------------------------------------------- */
_prepareEsquive(attackerRoll, competence) {
let rollData = {
alias: this.defenderToken?.name,
alias: this.defender.getAlias(),
passeArme: attackerRoll.passeArme,
diffLibre: attackerRoll.diffLibre,
attackerToken: this.attackerToken,
@ -1252,7 +1253,7 @@ export class RdDCombat {
this._onEchecTotal(defenderRoll);
}
if (Misc.isOwnerPlayerOrUniqueConnectedGM(this.defender)) {
if (Misc.isOwnerPlayer(this.defender)) {
attackerRoll.attackerId = this.attackerId;
attackerRoll.defenderTokenId = this.defenderToken.id;
@ -1278,9 +1279,10 @@ export class RdDCombat {
if (!actor?.isActorCombat()) {
return
}
const alias = token?.name ?? actor.getAlias();
const formData = {
combatId: combat._id,
alias: token.name ?? actor.name,
alias: alias,
etatGeneral: actor.getEtatGeneral(),
isSonne: actor.isSonne(),
blessuresStatus: actor.computeResumeBlessure(),
@ -1293,12 +1295,12 @@ export class RdDCombat {
}
await ChatMessage.create({
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-acteur.hbs`, formData),
alias: token.name ?? actor.name
alias: alias
})
await ChatMessage.create({
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-sante.hbs`, formData),
whisper: ChatUtility.getOwners(actor),
alias: token.name ?? actor.name
alias: alias
})
}
}

View File

@ -360,13 +360,14 @@ export class RdDCommands {
async getTMRAleatoire(msg, params) {
if (params.length < 2) {
let type = params[0];
const tmr = await TMRUtility.getTMRAleatoire(type ? (it => it.type == type) : (it => true));
return RdDCommands._chatAnswer(msg, `Case aléatoire: ${tmr.coord} - ${tmr.label}`);
}
else {
return false;
let type = params[0]
const solvedTerrain = TMRUtility.findTMRLike(type)?.type
if (solvedTerrain){
const tmr = await TMRUtility.getTMRAleatoire(type ? (it => it.type == solvedTerrain) : (it => true))
return RdDCommands._chatAnswer(msg, `Case aléatoire: ${tmr.coord} - ${tmr.label}`)
}
}
return false;
}
async findTMR(msg, params) {
@ -384,11 +385,11 @@ export class RdDCommands {
async tableRencontres(msg, params) {
if (params && params.length > 0) {
const search = Misc.join(params, ' ');
const solvedTerrain = TMRUtility.findTMRLike(search);
const solvedTerrain = TMRUtility.findTMRLike(search)
if (solvedTerrain == undefined) {
return RdDCommands._chatAnswer(msg, 'Aucune TMR correspondant à ' + search);
}
return await game.system.rdd.rencontresTMR.chatTable(solvedTerrain);
return await game.system.rdd.rencontresTMR.chatTable(solvedTMRType.name)
}
return false;
}

View File

@ -28,9 +28,9 @@ export class RdDHerbes extends Item {
}
/* -------------------------------------------- */
static async addPotionFormData(formData) {
formData.isSoins = formData.system.categorie.includes('Soin');
formData.isRepos = formData.system.categorie.includes('Repos');
static calculFormData(formData, item) {
formData.isSoins = item.system.categorie.includes('Soin');
formData.isRepos = item.system.categorie.includes('Repos');
if (formData.isSoins) {
RdDHerbes.calculBonusHerbe(formData, this.herbesSoins, 12);
}
@ -40,7 +40,7 @@ export class RdDHerbes extends Item {
formData.herbesSoins = RdDHerbes.buildHerbesList(this.herbesSoins, 12);
formData.herbesRepos = RdDHerbes.buildHerbesList(this.herbesRepos, 7);
formData.dateActuelle = game.system.rdd.calendrier.dateCourante();
formData.enchantement = RdDTimestamp.splitIndexDate(formData.system.prdate);
formData.enchantement = RdDTimestamp.splitIndexDate(item.system.prdate);
}
/* -------------------------------------------- */

View File

@ -121,7 +121,7 @@ export class RdDHotbar {
if (item.isCorpsACorps()) {
switch (categorieArme) {
case 'pugilat':
return actor.rollArme(RdDItemArme.mainsNues(actor), 'competence');
return actor.rollArme(RdDItemArme.corpsACorps(actor), 'competence');
case 'empoignade':
return actor.rollArme(RdDItemArme.empoignade(actor), 'competence');
}

View File

@ -28,9 +28,11 @@ import { Environnement } from "./environnement.js"
import { RdDActor } from "./actor.js"
import { RdDBaseActor } from "./actor/base-actor.js"
import { RdDCreature } from "./actor/creature.js"
import { RdDCommerce } from "./actor/commerce.js"
import { RdDEntite } from "./actor/entite.js"
import { RdDVehicule } from "./actor/vehicule.js"
import { RdDActorSheet } from "./actor-sheet.js"
import { RdDCommerceSheet } from "./actor/commerce-sheet.js"
import { RdDCreatureSheet } from "./actor/creature-sheet.js"
@ -38,6 +40,7 @@ import { RdDActorEntiteSheet } from "./actor/entite-sheet.js"
import { RdDActorVehiculeSheet } from "./actor/vehicule-sheet.js"
import { RdDItem } from "./item.js"
import { RdDItemArmure } from "./item/armure.js"
import { RdDItemBlessure } from "./item/blessure.js"
import { RdDItemService } from "./item/service.js"
import { RdDItemMaladie } from "./item/maladie.js"
@ -45,7 +48,11 @@ import { RdDItemPoison } from "./item/poison.js"
import { RdDItemSigneDraconique } from "./item/signedraconique.js"
import { RdDItemQueue } from "./item/queue.js"
import { RdDItemOmbre } from "./item/ombre.js"
import { RdDItemSort } from "./item-sort.js"
import { RdDItemTete } from "./item/tete.js"
import { RdDItemRace } from "./item/race.js"
import { RdDItemSouffle } from "./item/souffle.js"
import { RdDRencontre } from "./item/rencontre.js"
import { RdDItemSheet } from "./item-sheet.js"
@ -57,12 +64,11 @@ import { RdDPlanteItemSheet } from "./item/sheet-plante.js"
import { RdDIngredientItemSheet } from "./item/sheet-ingredient.js"
import { RdDFauneItemSheet } from "./item/sheet-faune.js"
import { RdDConteneurItemSheet } from "./item/sheet-conteneur.js"
import { RdDSigneDraconiqueItemSheet } from "./item/sheet-signedraconique.js"
import { RdDItemInventaireSheet } from "./item/sheet-base-inventaire.js"
import { RdDSigneDraconiqueItemSheet } from "./item/sheet-signedraconique.js"
import { AppAstrologie } from "./sommeil/app-astrologie.js"
import { RdDItemArmure } from "./item/armure.js"
import { AutoAdjustDarkness } from "./time/auto-adjust-darkness.js"
import { RdDCreature } from "./actor/creature.js"
import { RdDTMRDialog } from "./rdd-tmr-dialog.js"
import { OptionsAvancees } from "./settings/options-avancees.js"
import { ExportScriptarium } from "./actor/export-scriptarium/export-scriptarium.js"
@ -96,6 +102,8 @@ export class SystemReveDeDragon {
ombre: RdDItemOmbre,
poison: RdDItemPoison,
queue: RdDItemQueue,
tete: RdDItemTete,
race: RdDItemRace,
rencontre: RdDRencontre,
service: RdDItemService,
signedraconique: RdDItemSigneDraconique,
@ -122,6 +130,7 @@ export class SystemReveDeDragon {
// preload handlebars templates
RdDUtility.preloadHandlebarsTemplates()
AppPersonnageAleatoire.preloadHandlebars()
RdDItemSort.preloadHandlebars()
/* -------------------------------------------- */
ReglesOptionnelles.initSettings()
@ -131,6 +140,7 @@ export class SystemReveDeDragon {
RdDCalendrier.initSettings()
SystemCompendiums.initSettings()
DialogChronologie.initSettings()
EffetsDraconiques.initSettings()
RdDTMRDialog.initSettings()
Environnement.initSettings()
@ -196,8 +206,9 @@ export class SystemReveDeDragon {
Items.registerSheet(SYSTEM_RDD, RdDItemSheet, {
types: [
"competence", "competencecreature",
"recettealchimique", "musique", "chant", "danse", "jeu", "recettecuisine", "oeuvre",
"meditation", "queue", "ombre", "souffle", "tete", "casetmr", "sort", "sortreserve",
"recettealchimique", "musique", "chant", "danse", "jeu", "race",
"recettecuisine", "oeuvre", "meditation",
"queue", "ombre", "souffle", "tete", "casetmr", "sort", "sortreserve",
"nombreastral", "tache", "maladie", "poison", "possession",
"tarot", "extraitpoetique", "empoignade"
], makeDefault: true

View File

@ -7,6 +7,7 @@ import { RdDBonus } from "./rdd-bonus.js";
import { RdDCarac } from "./rdd-carac.js";
import { RdDResolutionTable } from "./rdd-resolution-table.js";
import { ReglesOptionnelles } from "./settings/regles-optionnelles.js";
import { Grammar } from "./grammar.js";
/**
* Extend the base Dialog entity to select roll parameters
@ -32,7 +33,7 @@ export class RdDRoll extends Dialog {
/* -------------------------------------------- */
static _setDefaultOptions(actor, rollData) {
let defaultRollData = {
alias: actor.name,
alias: actor.getAlias(),
ajustementsConditions: CONFIG.RDD.ajustementsConditions,
difficultesLibres: CONFIG.RDD.difficultesLibres,
etat: actor.getEtatGeneral(),
@ -173,8 +174,8 @@ export class RdDRoll extends Dialog {
this.html.find("[name='diffLibre']").val(this.rollData.diffLibre);
});
this.html.find('.roll-carac-competence').change((event) => {
const competence = event.currentTarget.value;
this.rollData.competence = this.rollData.competences.find(it => it.name == competence);
const competence = event.currentTarget.value
this.rollData.competence = this.rollData.competences.find(it => Grammar.equalsInsensitive(it.name, competence))
this.updateRollResult(html);
});
this.html.find('.select-suivant-coeur').change((event) => {
@ -345,24 +346,25 @@ export class RdDRoll extends Dialog {
/* -------------------------------------------- */
_getTitle(rollData) {
const alias = rollData.alias
const carac = rollData.selectedCarac.label;
if (!rollData.competence) {
return carac;
return `${alias}: ${carac}`
}
const compName = rollData.competence.name;
const niveau = Misc.toSignedString(rollData.competence.system.niveau)
if (compName == carac) {
// cas des créatures
return `${carac} Niveau ${niveau}`
return `${alias}: ${carac} Niveau ${niveau}`
}
if (rollData.draconicList && rollData.selectedSort) {
// cas de lancer de sort
return `${rollData.competence.name} Niveau ${niveau} ${rollData.selectedSort.name}`
return `${alias}: ${rollData.competence.name} Niveau ${niveau} ${rollData.selectedSort.name}`
}
if (rollData.arme && rollData.arme.name != compName) {
// ajouter l'arme au titre si son nom n'est pas la compétence
return `${carac} / ${compName} (${rollData.arme.name}) Niveau ${niveau}`
return `${alias}: ${carac} / ${compName} (${rollData.arme.name}) Niveau ${niveau}`
}
return `${carac} / ${compName} Niveau ${niveau}`
return `${alias}: ${carac} / ${compName} Niveau ${niveau}`
}
}

View File

@ -1,4 +1,3 @@
import { Grammar } from "./grammar.js";
import { CompendiumTable, CompendiumTableHelpers, SystemCompendiums } from "./settings/system-compendiums.js";
export class RdDRollTables {

View File

@ -176,7 +176,7 @@ export class RdDTMRDialog extends Dialog {
}
bringSubDialogToTop() {
if (this.subdialog?.bringToTop && this.subdialog?.element[0]) {
if (this.subdialog?.bringToTop && this.subdialog?.element && this.subdialog?.element[0]) {
this.subdialog.bringToTop();
}
}
@ -241,10 +241,11 @@ export class RdDTMRDialog extends Dialog {
this._getTokensRencontres().forEach(t => this._trackToken(t))
this._getTokensSortsReserve().forEach(t => this._trackToken(t))
}
/* -------------------------------------------- */
updateTokens() {
this._removeTokens(t => true);
this.allTokens = []
this.loadRencontres();
this.loadCasesSpeciales();
this._createTokens();
@ -460,7 +461,7 @@ export class RdDTMRDialog extends Dialog {
let rencontreData = {
actor: this.actor,
alias: this.actor.name,
alias: this.actor.getAlias(),
reveDepart: this.actor.getReveActuel(),
competence: this.actor.getBestDraconic(),
rencontre: this.currentRencontre,
@ -641,7 +642,7 @@ export class RdDTMRDialog extends Dialog {
// simuler une rencontre
let rencontreData = {
actor: this.actor,
alias: this.actor.name,
alias: this.actor.getAlias(),
reveDepart: this.actor.getReveActuel(),
competence: this.actor.getBestDraconic(),
rencontre: this.currentRencontre,
@ -1098,7 +1099,10 @@ export class RdDTMRDialog extends Dialog {
if (!this.viewOnly && this.actor.isResonanceSigneDraconique(coord)) {
ChatMessage.create({
whisper: ChatUtility.getOwners(this.actor),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-resonance.html`, { alias: this.actor.name, typeTMR: TMRUtility.getTMRType(coord) })
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-resonance.html`, {
alias: this.actor.getAlias(),
typeTMR: TMRUtility.getTMRType(coord)
})
});
}
}
@ -1130,6 +1134,14 @@ export class RdDTMRDialog extends Dialog {
return tmr;
}
getTokensDetails(coordTMR) {
const tmrTooltip = `${coordTMR}: ${TMRUtility.getTMRLabel(coordTMR)}`
const tokenTooltips = this.allTokens
.filter(token => token.coordTMR() == coordTMR)
.map(token => token.tooltip);
return [tmrTooltip, ...tokenTooltips].reduce(Misc.joining('\n'))
}
/* -------------------------------------------- */
_removeTokens(filter = it => true) {
this.allTokens.filter(filter).forEach(token => this.pixiTMR.removeToken(token))
@ -1141,7 +1153,7 @@ export class RdDTMRDialog extends Dialog {
return
}
if (this.demiReve === token && this.isDemiReveCache()) {
return;
return
}
this.pixiTMR.positionToken(token);
if (!this.allTokens.includes(token)) {

View File

@ -20,6 +20,8 @@ import { ExperienceLog } from "./actor/experience-log.js";
import { RdDCoeur } from "./coeur/rdd-coeur.js";
import { APP_ASTROLOGIE_REFRESH } from "./sommeil/app-astrologie.js";
import { RDD_CONFIG } from "./constants.js";
import { RdDBaseActor } from "./actor/base-actor.js";
import { RdDCarac } from "./rdd-carac.js";
/* -------------------------------------------- */
// This table starts at 0 -> niveau -10
@ -121,6 +123,7 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/actor/header-hautreve.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/archetype.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/vue-detaillee.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/armures.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html',
@ -145,8 +148,8 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.hbs',
'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queue.html',
'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.html',
@ -259,48 +262,13 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html',
'systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html'
];
Handlebars.registerHelper('either', (a, b) => a ?? b);
Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null'));
Handlebars.registerHelper('lowerFirst', str => Misc.lowerFirst(str ?? 'Null'));
Handlebars.registerHelper('upper', str => str?.toUpperCase() ?? '');
Handlebars.registerHelper('lowercase', str => str?.toLowerCase() ?? '');
Handlebars.registerHelper('le', str => Grammar.articleDetermine(str));
Handlebars.registerHelper('apostrophe', (article, str) => Grammar.apostrophe(article, str));
Handlebars.registerHelper('un', str => Grammar.articleIndetermine(str));
Handlebars.registerHelper('accord', (genre, ...args) => Grammar.accord(genre, args));
// foundry et options
Handlebars.registerHelper('RDD_CONFIG', path => RDD_CONFIG[path])
Handlebars.registerHelper('computeResolutionScore', (row, col) => RdDResolutionTable.computePercentage(row, col));
Handlebars.registerHelper('computeResolutionChances', (row, col) => RdDResolutionTable.computeChances(row, col));
Handlebars.registerHelper('buildLigneInventaire', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildLigneInventaire(item, options)); });
Handlebars.registerHelper('buildInventaireConteneur', (actorId, itemId, options) => { return new Handlebars.SafeString(RdDUtility.buildInventaireConteneur(actorId, itemId, options)); });
Handlebars.registerHelper('buildContenuConteneur', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildContenuConteneur(item, options)); });
Handlebars.registerHelper('calculerPrixCommercant', item => item.calculerPrixCommercant());
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
Handlebars.registerHelper('timestamp-imgSigneHeure', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigneHeure(heure)) });
Handlebars.registerHelper('timestamp-imgSigne', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigne(heure)) });
Handlebars.registerHelper('timestamp-extract', timestamp => new RdDTimestamp(timestamp).toCalendrier());
Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree());
Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode());
Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
Handlebars.registerHelper('isLastIndex', (index, list) => index + 1 >= list.length);
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option));
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
Handlebars.registerHelper('linkCompendium', (pack, id, name) => RdDUtility.linkCompendium(pack, id, name));
Handlebars.registerHelper('uniteQuantite', (itemId, actorId) => RdDUtility.getItem(itemId, actorId)?.getUniteQuantite());
Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field));
Handlebars.registerHelper('rarete-getChamp', (rarete, field) => RdDRaretes.getChamp(rarete, field));
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option));
Handlebars.registerHelper('plusMoins', diff => (diff > 0 ? '+' : '') + Math.round(diff))
Handlebars.registerHelper('experienceLog-topic', topic => ExperienceLog.labelTopic(topic));
// Handle v12 removal of this helper
Handlebars.registerHelper('select', function (selected, options) {
@ -308,7 +276,68 @@ export class RdDUtility {
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
const html = options.fn(this);
return html.replace(rgx, "$& selected");
});
})
// logic
Handlebars.registerHelper('either', (a, b) => a ?? b);
// string manipulation
Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null'));
Handlebars.registerHelper('lowerFirst', str => Misc.lowerFirst(str ?? 'Null'));
Handlebars.registerHelper('uppercase', str => str?.toUpperCase() ?? '');
Handlebars.registerHelper('lowercase', str => str?.toLowerCase() ?? '');
Handlebars.registerHelper('grammar-le', str => Grammar.articleDetermine(str));
Handlebars.registerHelper('grammar-apostrophe', (article, str) => Grammar.apostrophe(article, str));
Handlebars.registerHelper('grammar-un', str => Grammar.articleIndetermine(str));
Handlebars.registerHelper('grammar-accord', (genre, ...args) => Grammar.accord(genre, args));
// math
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
Handlebars.registerHelper('repeat', function(n, block) {
let accum = '';
for(let i = 0; i < n; ++i){
accum += block.fn(i)
}
return accum
})
// tableaux, listes
Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
Handlebars.registerHelper('isLastIndex', (index, list) => index + 1 >= list.length);
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
// table de résolution
Handlebars.registerHelper('computeResolutionScore', (row, col) => RdDResolutionTable.computePercentage(row, col));
Handlebars.registerHelper('computeResolutionChances', (row, col) => RdDResolutionTable.computeChances(row, col));
// gestion des dates et heures
Handlebars.registerHelper('timestamp-imgSigneHeure', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigneHeure(heure)) });
Handlebars.registerHelper('timestamp-imgSigne', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigne(heure)) });
Handlebars.registerHelper('timestamp-extract', timestamp => new RdDTimestamp(timestamp).toCalendrier());
Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree());
Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode());
// informations sur les acteurs
Handlebars.registerHelper('actor-default', (actorType, ...path) => RdDBaseActor.getDefaultValue(actorType, path.slice(0, -1)));
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
Handlebars.registerHelper('experienceLog-topic', topic => ExperienceLog.labelTopic(topic));
Handlebars.registerHelper('carac-label', (code) => RdDCarac.label(code))
// inventaire et marchands
Handlebars.registerHelper('buildLigneInventaire', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildLigneInventaire(item, options)); });
Handlebars.registerHelper('buildInventaireConteneur', (actorId, itemId, options) => { return new Handlebars.SafeString(RdDUtility.buildInventaireConteneur(actorId, itemId, options)); });
Handlebars.registerHelper('buildContenuConteneur', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildContenuConteneur(item, options)); });
Handlebars.registerHelper('calculerPrixCommercant', item => item.calculerPrixCommercant());
Handlebars.registerHelper('uniteQuantite', (itemId, actorId) => RdDUtility.getItem(itemId, actorId)?.getUniteQuantite());
Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field));
// Items
Handlebars.registerHelper('rarete-getChamp', (rarete, field) => RdDRaretes.getChamp(rarete, field));
// TMRs
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
return loadTemplates(templatePaths);
}
@ -904,7 +933,7 @@ export class RdDUtility {
/*-------------------------------------------- */
static checkThanatosXP(compName) {
if (compName.includes('Thanatos')) {
let message = "Vous avez mis des points d'Expérience dans la Voie de Thanatos !<br>Vous devez réduire manuellement d'un même montant d'XP une autre compétence Draconique.";
let message = "Vous avez mis des points d'Expérience en Thanatos !<br>Vous devez réduire manuellement d'un même montant d'XP une autre compétence Draconique.";
ChatMessage.create({
whisper: ChatUtility.getUserAndGMs(),
content: message

View File

@ -168,7 +168,7 @@ export class RollDataAjustements {
// s'assurer de la correction des infos rollData
foundry.utils.mergeObject(rollData, { ajustements: {}, use: {} }, { overwrite: false })
for (var key in referenceAjustements) {
for (let key in referenceAjustements) {
const reference = referenceAjustements[key];
rollData.ajustements[key] = {
visible: reference.isVisible && reference.isVisible(rollData, actor),

View File

@ -15,17 +15,17 @@ export const STATUSES = {
}
const rddStatusEffects = [
{ rdd: true, id: STATUSES.StatusStunned, label: 'EFFECT.StatusStunned', icon: 'icons/svg/stoned.svg', "duration.rounds": 1 },
{ rdd: true, id: STATUSES.StatusBleeding, label: 'EFFECT.StatusBleeding', icon: 'icons/svg/blood.svg' },
{ rdd: true, id: STATUSES.StatusProne, label: 'EFFECT.StatusProne', icon: 'icons/svg/falling.svg' },
{ rdd: true, id: STATUSES.StatusGrappling, tint: '#33cc33', label: 'EFFECT.StatusGrappling', icon: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' },
{ rdd: true, id: STATUSES.StatusGrappled, tint: '#ff9900', label: 'EFFECT.StatusGrappled', icon: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' },
{ rdd: true, id: STATUSES.StatusRestrained, label: 'EFFECT.StatusRestrained', icon: 'icons/svg/net.svg' },
{ rdd: true, id: STATUSES.StatusUnconscious, label: 'EFFECT.StatusUnconscious', icon: 'icons/svg/unconscious.svg' },
{ rdd: true, id: STATUSES.StatusBlind, label: 'EFFECT.StatusBlind', icon: 'icons/svg/blind.svg' },
{ rdd: true, id: STATUSES.StatusComma, label: 'EFFECT.StatusComma', icon: 'icons/svg/skull.svg' },
{ rdd: true, id: STATUSES.StatusDead, label: 'EFFECT.StatusDead', icon: 'icons/svg/skull.svg' },
{ rdd: true, id: STATUSES.StatusDemiReve, label: 'EFFECT.StatusDemiReve', icon: 'systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg' }
{ rdd: true, id: STATUSES.StatusStunned, name: 'EFFECT.StatusStunned', img: 'icons/svg/stoned.svg', "duration.rounds": 1 },
{ rdd: true, id: STATUSES.StatusBleeding, name: 'EFFECT.StatusBleeding', img: 'icons/svg/blood.svg' },
{ rdd: true, id: STATUSES.StatusProne, name: 'EFFECT.StatusProne', img: 'icons/svg/falling.svg' },
{ rdd: true, id: STATUSES.StatusGrappling, tint: '#33cc33', name: 'EFFECT.StatusGrappling', img: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' },
{ rdd: true, id: STATUSES.StatusGrappled, tint: '#ff9900', name: 'EFFECT.StatusGrappled', img: 'systems/foundryvtt-reve-de-dragon/icons/empoignade.webp' },
{ rdd: true, id: STATUSES.StatusRestrained, name: 'EFFECT.StatusRestrained', img: 'icons/svg/net.svg' },
{ rdd: true, id: STATUSES.StatusUnconscious, name: 'EFFECT.StatusUnconscious', img: 'icons/svg/unconscious.svg' },
{ rdd: true, id: STATUSES.StatusBlind, name: 'EFFECT.StatusBlind', img: 'icons/svg/blind.svg' },
{ rdd: true, id: STATUSES.StatusComma, name: 'EFFECT.StatusComma', img: 'icons/svg/skull.svg' },
{ rdd: true, id: STATUSES.StatusDead, name: 'EFFECT.StatusDead', img: 'icons/svg/skull.svg' },
{ rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: 'systems/foundryvtt-reve-de-dragon/icons/heures/hd12.svg' }
];
const demiReveStatusEffect = rddStatusEffects.find(it => it.id == STATUSES.StatusDemiReve);
@ -57,7 +57,7 @@ export class StatusEffects extends FormApplication {
restricted: true
});
CONFIG.RDD.allEffects = rddStatusEffects.concat(CONFIG.statusEffects.filter(it => !rddEffectIds.includes(it.id)));
CONFIG.RDD.allEffects = rddStatusEffects.concat(CONFIG.statusEffects.filter(it => !rddEffectIds.includes(it.id)))
StatusEffects._setUseStatusEffects(StatusEffects._getUseStatusEffects());
console.log('statusEffects', CONFIG.statusEffects);

View File

@ -1,5 +1,6 @@
import { ChatUtility } from "../chat-utility.js";
import { HIDE_DICE, SYSTEM_RDD } from "../constants.js";
import { Grammar } from "../grammar.js";
import { RdDItem } from "../item.js";
import { Misc } from "../misc.js";
import { RdDDice } from "../rdd-dice.js";
@ -14,6 +15,7 @@ const CONFIGURABLE_COMPENDIUMS = {
'ombres-de-thanatos': { label: "Ombres de Thanatos", type: "Item" },
'souffles-de-dragon': { label: "Souffles de Dragon", type: "Item" },
'tarot-draconique': { label: "Tarots draconiques", type: "Item" },
'races': { label: "Races", type: "Item" },
'rencontres': { label: "Rencontres dans les TMR", type: "Item" },
'tetes-de-dragon-pour-haut-revants': { label: "Têtes de dragons (haut-rêvant)", type: "Item" },
'tetes-de-dragon-pour-tous-personnages': { label: "Têtes de dragons (tous)", type: "Item" },
@ -32,7 +34,7 @@ export class SystemCompendiums extends FormApplication {
compendium: compendium,
default: SystemCompendiums._getDefaultCompendium(compendium),
setting: SystemCompendiums._getSettingCompendium(compendium)
});
})
game.settings.register(SYSTEM_RDD, definition.setting, {
name: definition.label,
@ -40,8 +42,8 @@ export class SystemCompendiums extends FormApplication {
scope: "world",
config: false,
type: String
});
});
})
})
game.settings.registerMenu(SYSTEM_RDD, "compendium-settings", {
name: "Choisir les compendiums système",
@ -71,26 +73,27 @@ export class SystemCompendiums extends FormApplication {
static async getCompetences(actorType) {
switch (actorType ?? 'personnage') {
case 'personnage': return await SystemCompendiums.getWorldOrCompendiumItems('competence', 'competences');
case 'creature': return await SystemCompendiums.getWorldOrCompendiumItems('competencecreature', 'competences-creatures');
case 'entite': return await SystemCompendiums.getWorldOrCompendiumItems('competencecreature', 'competences-entites');
case 'personnage':
return await SystemCompendiums.getWorldOrCompendiumItems('competence', 'competences')
case 'entite':
case 'creature':
return await SystemCompendiums.getWorldOrCompendiumItems('competencecreature', 'competences-creatures')
case 'vehicule': return [];
}
}
/* -------------------------------------------- */
static async getWorldOrCompendiumItems(itemType, compendium) {
let items = game.items.filter(it => it.type == itemType);
let items = game.items.filter(it => it.type == itemType)
if (compendium) {
const ids = items.map(it => it.id);
const names = items.map(it => it.name.toLowerCase());
const compendiumItems = await SystemCompendiums.getItems(compendium);
items = items.concat(compendiumItems
.filter(it => it.type == itemType)
const ids = items.map(it => it.id)
const names = items.map(it => Grammar.toLowerCaseNoAccent(it.name))
const compendiumItems = await SystemCompendiums.getItems(compendium, itemType)
return items.concat(compendiumItems
.filter(it => !ids.includes(it.id))
.filter(it => !names.includes(it.name.toLowerCase())));
.filter(it => !names.includes(Grammar.equalsInsensitive(it.name))))
}
return items;
return items
}
static async loadDocument(document) {
@ -284,23 +287,20 @@ export class CompendiumTableHelpers {
}
/* -------------------------------------------- */
static async tableRowToChatMessage(row, type = 'Item') {
static async tableRowToChatMessage(row, type, options = { showSource: true }) {
if (!row) {
return;
}
const percentages = (row.total == 100) ? '%' : ''
const flavorContent = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-compendium-table-roll.hbs', {
roll: row.roll,
document: row.document,
percentages,
typeName: Misc.typeName(type, row.document?.type ?? 'objet'),
isGM: game.user.isGM,
options
});
const messageData = {
// flavor: flavorContent,
user: game.user.id,
type: CONST.CHAT_MESSAGE_TYPES.ROLL,
roll: row.roll,
rolls: [row.roll],
sound: CONFIG.sounds.dice,
content: flavorContent
};

View File

@ -11,11 +11,17 @@ export class Targets {
}
static extractTokenData(target) {
return { id: target?.id, name: target?.document.name, img: target?.document.texture.src ?? target?.actor.img ?? 'icons/svg/mystery-man.svg' };
return {
id: target?.id,
name: target?.document.name,
img: target?.document.texture.src ?? target?.actor.img ?? 'icons/svg/mystery-man.svg'
}
}
static buildActorTokenData(tokenId, actor) {
return { id: tokenId, name: actor.name, img: actor.img ?? 'icons/svg/mystery-man.svg' };
}
static isTargetEntite(target) {
return target?.actor.type == 'entite' && target?.actor.system.definition.typeentite == ENTITE_NONINCARNE;
}
@ -35,7 +41,7 @@ export class Targets {
label: "Choisir une seule des cibles",
list: targets.map(it => Targets.extractTokenData(it))
};
DialogSelect.select(selectData, onSelectTarget)
DialogSelect.select(selectData, t => onSelectTarget(t.target))
}
}
}

View File

@ -26,22 +26,19 @@ export class TMRRencontres {
* @param {*} forcedRoll
*/
async rollRencontre(terrain, forcedRoll) {
terrain = TMRUtility.findTMRLike(terrain);
if (terrain == undefined) {
const tmrType = TMRUtility.findTMRLike(terrain)?.type
if (tmrType == undefined) {
return undefined;
}
if (forcedRoll && (forcedRoll <= 0 || forcedRoll > 100)) {
forcedRoll = undefined;
}
const codeTerrain = Grammar.toLowerCaseNoAccent(terrain)
const filtreMauvaise = codeTerrain == 'mauvaise' ? it => it.system.mauvaiseRencontre : it => !it.system.mauvaiseRencontre;
const frequence = it => it.system.frequence[codeTerrain];
const filtreMauvaise = tmrType == 'mauvaise' ? it => it.system.mauvaiseRencontre : it => !it.system.mauvaiseRencontre;
const frequence = it => it.system.frequence[tmrType];
const row = await this.table.getRandom(frequence, filtreMauvaise, forcedRoll);
if (row) {
console.log("DORM", row);
//row.document.system.computedForce = new Roll(row.document.system.formula).roll({async: false}).total;
await CompendiumTableHelpers.tableRowToChatMessage(row);
await CompendiumTableHelpers.tableRowToChatMessage(row, 'Item', {showSource: false});
}
return row?.document;

View File

@ -2,228 +2,216 @@ import { Misc } from "./misc.js";
import { Grammar } from "./grammar.js";
import { RdDDice } from "./rdd-dice.js";
/* -------------------------------------------- */
const TMRMapping = {
A1: { type: "cite", label: "Cité Vide" },
B1: { type: "plaines", label: "Plaines dAssorh" },
C1: { type: "necropole", label: "Nécropole de Kroak" },
D1: { type: "fleuve", label: "Fleuve de l'Oubli" },
E1: { type: "monts", label: "Monts de Kanaï" },
F1: { type: "cite", label: "Cité Glauque" },
G1: { type: "desolation", label: "Désolation de Jamais" },
H1: { type: "lac", label: "Lac dAnticalme" },
I1: { type: "plaines", label: "Plaines Grises" },
J1: { type: "monts", label: "Monts Fainéants" },
K1: { type: "cite", label: "Cité dOnkause" },
L1: { type: "fleuve", label: "Fleuve de l'Oubli" },
M1: { type: "cite", label: "Cité Jalouse" },
A2: { type: "desert", label: "Désert de Mieux" },
B2: { type: "collines", label: "Collines de Dawell" },
C2: { type: "marais", label: "Marais Glignants" },
D2: { type: "cite", label: "Cité de Frost" },
E2: { type: "plaines", label: "Plaines de Fiask" },
F2: { type: "lac", label: "Lac de Misère" },
G2: { type: "marais", label: "Marais Nuisants" },
H2: { type: "collines", label: "Collines de Parta" },
I2: { type: "foret", label: "Forêt Fade" },
J2: { type: "desert", label: "Désert de Poly" },
K2: { type: "foret", label: "Forêt Tamée" },
L2: { type: "fleuve", label: "Fleuve de l'Oubli" },
M2: { type: "necropole", label: "Nécropole de Logos" },
A3: { type: "desolation", label: "Désolation de Demain" },
B3: { type: "plaines", label: "Plaines de Rubéga" },
C3: { type: "fleuve", label: "Fleuve de l'Oubli" },
D3: { type: "gouffre", label: "Gouffre dOki" },
E3: { type: "foret", label: "Forêt dEstoubh" },
F3: { type: "fleuve", label: "Fleuve de l'Oubli" },
G3: { type: "gouffre", label: "Gouffre de Sun" },
H3: { type: "foret", label: "Forêt de Ganna" },
I3: { type: "monts", label: "Monts Grinçants" },
J3: { type: "cite", label: "Cité Venin" },
K3: { type: "plaines", label: "Plaines de Dois" },
L3: { type: "lac", label: "Lac Laineux" },
M3: { type: "monts", label: "Monts de Vdah" },
A4: { type: "foret", label: "Forêt de Falconax" },
B4: { type: "monts", label: "Monts Crâneurs" },
C4: { type: "pont", label: "Pont de Giolii" },
D4: { type: "lac", label: "Lac de Foam" },
E4: { type: "plaines", label: "Plaines dOrti" },
F4: { type: "fleuve", label: "Fleuve de l'Oubli" },
G4: { type: "sanctuaire", label: "Sanctuaire Blanc" },
H4: { type: "plaines", label: "Plaines de Psark" },
I4: { type: "plaines", label: "Plaines de Xiax" },
J4: { type: "collines", label: "Collines dEncre" },
K4: { type: "pont", label: "Pont de Fah" },
L4: { type: "sanctuaire", label: "Sanctuaire Mauve" },
M4: { type: "gouffre", label: "Gouffre Grisant" },
A5: { type: "plaines", label: "Plaines de Trilkh" },
B5: { type: "collines", label: "Collines de Tanegy" },
C5: { type: "marais", label: "Marais Flouants" },
D5: { type: "fleuve", label: "Fleuve de l'Oubli" },
E5: { type: "monts", label: "Monts Brûlants" },
F5: { type: "cite", label: "Cité de Panople" },
G5: { type: "pont", label: "Pont dIk" },
H5: { type: "desert", label: "Désert de Krane" },
I5: { type: "desolation", label: "Désolation de Toujours" },
J5: { type: "marais", label: "Marais de Jab" },
K5: { type: "fleuve", label: "Fleuve de l'Oubli" },
L5: { type: "collines", label: "Collines Suaves" },
M5: { type: "cite", label: "Cité Rimarde" },
A6: { type: "necropole", label: "Nécropole de Zniak" },
B6: { type: "foret", label: "Forêt de Bust" },
C6: { type: "cite", label: "Cité Pavois" },
D6: { type: "fleuve", label: "Fleuve de l'Oubli" },
E6: { type: "sanctuaire", label: "Sanctuaire de Plaine" },
F6: { type: "fleuve", label: "Fleuve de l'Oubli" },
G6: { type: "marais", label: "Marais Glutants" },
H6: { type: "monts", label: "Monts Gurdes" },
I6: { type: "necropole", label: "Nécropole de Xotar" },
J6: { type: "lac", label: "Lac dIaupe" },
K6: { type: "desolation", label: "Désolation de Poor" },
L6: { type: "foret", label: "Forêt Gueuse" },
M6: { type: "desolation", label: "Désolation de Presque" },
A7: { type: "plaines", label: "Plaines de lArc" },
B7: { type: "marais", label: "Marais Bluants" },
C7: { type: "fleuve", label: "Fleuve de l'Oubli" },
D7: { type: "plaines", label: "Plaines dAffa" },
E7: { type: "foret", label: "Forêt de Glusks" },
F7: { type: "fleuve", label: "Fleuve de l'Oubli" },
G7: { type: "cite", label: "Cité de Terwa" },
H7: { type: "gouffre", label: "Gouffre de Kapfa" },
I7: { type: "plaines", label: "Plaines de Troo" },
J7: { type: "fleuve", label: "Fleuve de l'Oubli" },
K7: { type: "cite", label: "Cité de Kolix" },
L7: { type: "gouffre", label: "Gouffre dEpisophe" },
M7: { type: "desert", label: "Désert de Lave" },
A8: { type: "gouffre", label: "Gouffre de Shok" },
B8: { type: "fleuve", label: "Fleuve de l'Oubli" },
C8: { type: "foret", label: "Forêt Turmide" },
D8: { type: "cite", label: "Cité dOlak" },
E8: { type: "plaines", label: "Plaines dIolise" },
F8: { type: "lac", label: "Lac des Chats" },
G8: { type: "plaines", label: "Plaines Sans Joie" },
H8: { type: "foret", label: "Forêt dOurf" },
I8: { type: "fleuve", label: "Fleuve de l'Oubli" },
J8: { type: "monts", label: "Monts Barask" },
K8: { type: "desert", label: "Désert de Fumée" },
L8: { type: "monts", label: "Monts Tavelés" },
M8: { type: "plaines", label: "Plaines Lavées" },
A9: { type: "collines", label: "Collines de Korrex" },
B9: { type: "lac", label: "Lac de Lucre" },
C9: { type: "monts", label: "Monts Tuméfiés" },
D9: { type: "pont", label: "Pont dOrx" },
E9: { type: "fleuve", label: "Fleuve de l'Oubli" },
F9: { type: "plaines", label: "Plaines de Foe" },
G9: { type: "desolation", label: "Désolation de Sel" },
H9: { type: "collines", label: "Collines de Noirseul" },
I9: { type: "fleuve", label: "Fleuve de l'Oubli" },
J9: { type: "marais", label: "Marais Gronchants" },
K9: { type: "sanctuaire", label: "Sanctuaire Noir" },
L9: { type: "collines", label: "Collines Cornues" },
M9: { type: "necropole", label: "Nécropole de Zonar" },
A10: { type: "sanctuaire", label: "Sanctuaire dOlis" },
B10: { type: "monts", label: "Monts Salés" },
C10: { type: "marais", label: "Marais de Dom" },
D10: { type: "fleuve", label: "Fleuve de l'Oubli" },
E10: { type: "gouffre", label: "Gouffre de Junk" },
F10: { type: "marais", label: "Marais Zultants" },
G10: { type: "cite", label: "Cité de Sergal" },
H10: { type: "plaines", label: "Plaines Noires" },
I10: { type: "lac", label: "Lac Wanito" },
J10: { type: "fleuve", label: "Fleuve de l'Oubli" },
K10: { type: "plaines", label: "Plaines Jaunes" },
L10: { type: "desert", label: "Désert de Nicrop" },
M10: { type: "foret", label: "Forêt de Jajou" },
A11: { type: "desolation", label: "Désolation dHier" },
B11: { type: "cite", label: "Cité de Brilz" },
C11: { type: "pont", label: "Pont de Roï" },
D11: { type: "desolation", label: "Désolation de Partout" },
E11: { type: "lac", label: "Lac de Glinster" },
F11: { type: "cite", label: "Cité de Noape" },
G11: { type: "fleuve", label: "Fleuve de l'Oubli" },
H11: { type: "fleuve", label: "Fleuve de l'Oubli" },
I11: { type: "pont", label: "Pont de Yalm" },
J11: { type: "plaines", label: "Plaines de Miltiar" },
K11: { type: "cite", label: "Cité Tonnerre" },
L11: { type: "collines", label: "Collines de Kol" },
M11: { type: "cite", label: "Cité Crapaud" },
A12: { type: "plaines", label: "Plaines Sages" },
B12: { type: "fleuve", label: "Fleuve de l'Oubli" },
C12: { type: "lac", label: "Lac de Fricassa" },
D12: { type: "collines", label: "Collines dHuaï" },
E12: { type: "monts", label: "Monts Ajourés" },
F12: { type: "necropole", label: "Nécropole de Throat" },
G12: { type: "plaines", label: "Plaines de Lufmil" },
H12: { type: "collines", label: "Collines de Tooth" },
I12: { type: "gouffre", label: "Gouffre Abimeux" },
J12: { type: "cite", label: "Cité Folle" },
K12: { type: "desolation", label: "Désolation dAmour" },
L12: { type: "plaines", label: "Plaines Venteuses" },
M12: { type: "collines", label: "Collines Révulsantes" },
A13: { type: "fleuve", label: "Fleuve de l'Oubli" },
B13: { type: "gouffre", label: "Gouffre des Litiges" },
C13: { type: "desert", label: "Désert de Neige" },
D13: { type: "cite", label: "Cité Sordide" },
E13: { type: "plaines", label: "Plaines de Xnez" },
F13: { type: "foret", label: "Forêt des Cris" },
G13: { type: "plaines", label: "Plaines Calcaires" },
H13: { type: "desolation", label: "Désolation de Rien" },
I13: { type: "monts", label: "Monts Bigleux" },
J13: { type: "gouffre", label: "Gouffre de Gromph" },
K13: { type: "foret", label: "Forêt de Kluth" },
L13: { type: "monts", label: "Monts Dormants" },
M13: { type: "plaines", label: "Plaines dAnjou" },
A14: { type: "collines", label: "Collines de Stolis" },
B14: { type: "necropole", label: "Nécropole de Gorlo" },
C14: { type: "foret", label: "Forêt de Bissam" },
D14: { type: "sanctuaire", label: "Sanctuaire Plat" },
E14: { type: "monts", label: "Monts de Quath" },
F14: { type: "plaines", label: "Plaines Brisées" },
G14: { type: "desert", label: "Désert de Sek" },
H14: { type: "plaines", label: "Plaines Blanches" },
I14: { type: "cite", label: "Cité Destituée" },
J14: { type: "desert", label: "Désert de Sank" },
K14: { type: "necropole", label: "Nécropole dAntinéar" },
L14: { type: "plaines", label: "Plaines de Jislith" },
M14: { type: "desolation", label: "Désolation dAprès" },
A15: { type: "cite", label: "Cité de Mielh" },
C15: { type: "plaines", label: "Plaines de Toué" },
E15: { type: "foret", label: "Forêt des Furies" },
G15: { type: "plaines", label: "Plaines des Soupirs" },
I15: { type: "monts", label: "Monts des Dragées" },
K15: { type: "collines", label: "Collines Pourpres" },
M15: { type: "cite", label: "Cité de Klana" }
export const TMRType = {
cite: { type: 'cite', name: "cité", genre: "f" },
sanctuaire: { type: 'sanctuaire', name: "sanctuaire", genre: 'm' },
plaines: { type: 'plaines', name: "plaines", genre: "fp" },
pont: { type: 'pont', name: "pont", genre: "m" },
collines: { type: 'collines', name: "collines", genre: "p" },
foret: { type: 'foret', name: "forêt", genre: "f" },
monts: { type: 'monts', name: "monts", genre: "p" },
desert: { type: 'desert', name: "désert", genre: "m" },
fleuve: { type: 'fleuve', name: "fleuve", genre: "m" },
lac: { type: 'lac', name: "lac", genre: "m" },
marais: { type: 'marais', name: "marais", genre: "m" },
gouffre: { type: 'gouffre', name: "gouffre", genre: "m" },
necropole: { type: 'necropole', name: "nécropole", genre: "f" },
desolation: { type: 'desolation', name: "désolation", genre: "f" }
}
export const TMRType = {
cite: { name: "cité", genre: "f" },
sanctuaire: { name: "sanctuaire", genre: 'm' },
plaines: { name: "plaines", genre: "fp" },
pont: { name: "pont", genre: "m" },
collines: { name: "collines", genre: "p" },
foret: { name: "forêt", genre: "f" },
monts: { name: "monts", genre: "p" },
desert: { name: "désert", genre: "m" },
fleuve: { name: "fleuve", genre: "m" },
lac: { name: "lac", genre: "m" },
marais: { name: "marais", genre: "m" },
gouffre: { name: "gouffre", genre: "m" },
necropole: { name: "nécropole", genre: "f" },
desolation: { name: "désolation", genre: "f" }
export const FLEUVE_COORD = 'Fleuve'
const TMRMapping = {
Fleuve: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
A1: { type: TMRType.cite.type, label: "Cité Vide" },
B1: { type: TMRType.plaines.type, label: "Plaines dAssorh" },
C1: { type: TMRType.necropole.type, label: "Nécropole de Kroak" },
D1: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
E1: { type: TMRType.monts.type, label: "Monts de Kanaï" },
F1: { type: TMRType.cite.type, label: "Cité Glauque" },
G1: { type: TMRType.desolation.type, label: "Désolation de Jamais" },
H1: { type: TMRType.lac.type, label: "Lac dAnticalme" },
I1: { type: TMRType.plaines.type, label: "Plaines Grises" },
J1: { type: TMRType.monts.type, label: "Monts Fainéants" },
K1: { type: TMRType.cite.type, label: "Cité dOnkause" },
L1: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
M1: { type: TMRType.cite.type, label: "Cité Jalouse" },
A2: { type: TMRType.desert.type, label: "Désert de Mieux" },
B2: { type: TMRType.collines.type, label: "Collines de Dawell" },
C2: { type: TMRType.marais.type, label: "Marais Glignants" },
D2: { type: TMRType.cite.type, label: "Cité de Frost" },
E2: { type: TMRType.plaines.type, label: "Plaines de Fiask" },
F2: { type: TMRType.lac.type, label: "Lac de Misère" },
G2: { type: TMRType.marais.type, label: "Marais Nuisants" },
H2: { type: TMRType.collines.type, label: "Collines de Parta" },
I2: { type: TMRType.foret.type, label: "Forêt Fade" },
J2: { type: TMRType.desert.type, label: "Désert de Poly" },
K2: { type: TMRType.foret.type, label: "Forêt Tamée" },
L2: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
M2: { type: TMRType.necropole.type, label: "Nécropole de Logos" },
A3: { type: TMRType.desolation.type, label: "Désolation de Demain" },
B3: { type: TMRType.plaines.type, label: "Plaines de Rubéga" },
C3: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
D3: { type: TMRType.gouffre.type, label: "Gouffre dOki" },
E3: { type: TMRType.foret.type, label: "Forêt dEstoubh" },
F3: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
G3: { type: TMRType.gouffre.type, label: "Gouffre de Sun" },
H3: { type: TMRType.foret.type, label: "Forêt de Ganna" },
I3: { type: TMRType.monts.type, label: "Monts Grinçants" },
J3: { type: TMRType.cite.type, label: "Cité Venin" },
K3: { type: TMRType.plaines.type, label: "Plaines de Dois" },
L3: { type: TMRType.lac.type, label: "Lac Laineux" },
M3: { type: TMRType.monts.type, label: "Monts de Vdah" },
A4: { type: TMRType.foret.type, label: "Forêt de Falconax" },
B4: { type: TMRType.monts.type, label: "Monts Crâneurs" },
C4: { type: TMRType.pont.type, label: "Pont de Giolii" },
D4: { type: TMRType.lac.type, label: "Lac de Foam" },
E4: { type: TMRType.plaines.type, label: "Plaines dOrti" },
F4: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
G4: { type: TMRType.sanctuaire.type, label: "Sanctuaire Blanc" },
H4: { type: TMRType.plaines.type, label: "Plaines de Psark" },
I4: { type: TMRType.plaines.type, label: "Plaines de Xiax" },
J4: { type: TMRType.collines.type, label: "Collines dEncre" },
K4: { type: TMRType.pont.type, label: "Pont de Fah" },
L4: { type: TMRType.sanctuaire.type, label: "Sanctuaire Mauve" },
M4: { type: TMRType.gouffre.type, label: "Gouffre Grisant" },
A5: { type: TMRType.plaines.type, label: "Plaines de Trilkh" },
B5: { type: TMRType.collines.type, label: "Collines de Tanegy" },
C5: { type: TMRType.marais.type, label: "Marais Flouants" },
D5: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
E5: { type: TMRType.monts.type, label: "Monts Brûlants" },
F5: { type: TMRType.cite.type, label: "Cité de Panople" },
G5: { type: TMRType.pont.type, label: "Pont dIk" },
H5: { type: TMRType.desert.type, label: "Désert de Krane" },
I5: { type: TMRType.desolation.type, label: "Désolation de Toujours" },
J5: { type: TMRType.marais.type, label: "Marais de Jab" },
K5: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
L5: { type: TMRType.collines.type, label: "Collines Suaves" },
M5: { type: TMRType.cite.type, label: "Cité Rimarde" },
A6: { type: TMRType.necropole.type, label: "Nécropole de Zniak" },
B6: { type: TMRType.foret.type, label: "Forêt de Bust" },
C6: { type: TMRType.cite.type, label: "Cité Pavois" },
D6: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
E6: { type: TMRType.sanctuaire.type, label: "Sanctuaire de Plaine" },
F6: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
G6: { type: TMRType.marais.type, label: "Marais Glutants" },
H6: { type: TMRType.monts.type, label: "Monts Gurdes" },
I6: { type: TMRType.necropole.type, label: "Nécropole de Xotar" },
J6: { type: TMRType.lac.type, label: "Lac dIaupe" },
K6: { type: TMRType.desolation.type, label: "Désolation de Poor" },
L6: { type: TMRType.foret.type, label: "Forêt Gueuse" },
M6: { type: TMRType.desolation.type, label: "Désolation de Presque" },
A7: { type: TMRType.plaines.type, label: "Plaines de lArc" },
B7: { type: TMRType.marais.type, label: "Marais Bluants" },
C7: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
D7: { type: TMRType.plaines.type, label: "Plaines dAffa" },
E7: { type: TMRType.foret.type, label: "Forêt de Glusks" },
F7: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
G7: { type: TMRType.cite.type, label: "Cité de Terwa" },
H7: { type: TMRType.gouffre.type, label: "Gouffre de Kapfa" },
I7: { type: TMRType.plaines.type, label: "Plaines de Troo" },
J7: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
K7: { type: TMRType.cite.type, label: "Cité de Kolix" },
L7: { type: TMRType.gouffre.type, label: "Gouffre dEpisophe" },
M7: { type: TMRType.desert.type, label: "Désert de Lave" },
A8: { type: TMRType.gouffre.type, label: "Gouffre de Shok" },
B8: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
C8: { type: TMRType.foret.type, label: "Forêt Turmide" },
D8: { type: TMRType.cite.type, label: "Cité dOlak" },
E8: { type: TMRType.plaines.type, label: "Plaines dIolise" },
F8: { type: TMRType.lac.type, label: "Lac des Chats" },
G8: { type: TMRType.plaines.type, label: "Plaines Sans Joie" },
H8: { type: TMRType.foret.type, label: "Forêt dOurf" },
I8: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
J8: { type: TMRType.monts.type, label: "Monts Barask" },
K8: { type: TMRType.desert.type, label: "Désert de Fumée" },
L8: { type: TMRType.monts.type, label: "Monts Tavelés" },
M8: { type: TMRType.plaines.type, label: "Plaines Lavées" },
A9: { type: TMRType.collines.type, label: "Collines de Korrex" },
B9: { type: TMRType.lac.type, label: "Lac de Lucre" },
C9: { type: TMRType.monts.type, label: "Monts Tuméfiés" },
D9: { type: TMRType.pont.type, label: "Pont dOrx" },
E9: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
F9: { type: TMRType.plaines.type, label: "Plaines de Foe" },
G9: { type: TMRType.desolation.type, label: "Désolation de Sel" },
H9: { type: TMRType.collines.type, label: "Collines de Noirseul" },
I9: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
J9: { type: TMRType.marais.type, label: "Marais Gronchants" },
K9: { type: TMRType.sanctuaire.type, label: "Sanctuaire Noir" },
L9: { type: TMRType.collines.type, label: "Collines Cornues" },
M9: { type: TMRType.necropole.type, label: "Nécropole de Zonar" },
A10: { type: TMRType.sanctuaire.type, label: "Sanctuaire dOlis" },
B10: { type: TMRType.monts.type, label: "Monts Salés" },
C10: { type: TMRType.marais.type, label: "Marais de Dom" },
D10: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
E10: { type: TMRType.gouffre.type, label: "Gouffre de Junk" },
F10: { type: TMRType.marais.type, label: "Marais Zultants" },
G10: { type: TMRType.cite.type, label: "Cité de Sergal" },
H10: { type: TMRType.plaines.type, label: "Plaines Noires" },
I10: { type: TMRType.lac.type, label: "Lac Wanito" },
J10: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
K10: { type: TMRType.plaines.type, label: "Plaines Jaunes" },
L10: { type: TMRType.desert.type, label: "Désert de Nicrop" },
M10: { type: TMRType.foret.type, label: "Forêt de Jajou" },
A11: { type: TMRType.desolation.type, label: "Désolation dHier" },
B11: { type: TMRType.cite.type, label: "Cité de Brilz" },
C11: { type: TMRType.pont.type, label: "Pont de Roï" },
D11: { type: TMRType.desolation.type, label: "Désolation de Partout" },
E11: { type: TMRType.lac.type, label: "Lac de Glinster" },
F11: { type: TMRType.cite.type, label: "Cité de Noape" },
G11: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
H11: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
I11: { type: TMRType.pont.type, label: "Pont de Yalm" },
J11: { type: TMRType.plaines.type, label: "Plaines de Miltiar" },
K11: { type: TMRType.cite.type, label: "Cité Tonnerre" },
L11: { type: TMRType.collines.type, label: "Collines de Kol" },
M11: { type: TMRType.cite.type, label: "Cité Crapaud" },
A12: { type: TMRType.plaines.type, label: "Plaines Sages" },
B12: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
C12: { type: TMRType.lac.type, label: "Lac de Fricassa" },
D12: { type: TMRType.collines.type, label: "Collines dHuaï" },
E12: { type: TMRType.monts.type, label: "Monts Ajourés" },
F12: { type: TMRType.necropole.type, label: "Nécropole de Throat" },
G12: { type: TMRType.plaines.type, label: "Plaines de Lufmil" },
H12: { type: TMRType.collines.type, label: "Collines de Tooth" },
I12: { type: TMRType.gouffre.type, label: "Gouffre Abimeux" },
J12: { type: TMRType.cite.type, label: "Cité Folle" },
K12: { type: TMRType.desolation.type, label: "Désolation dAmour" },
L12: { type: TMRType.plaines.type, label: "Plaines Venteuses" },
M12: { type: TMRType.collines.type, label: "Collines Révulsantes" },
A13: { type: TMRType.fleuve.type, label: "Fleuve de l'Oubli" },
B13: { type: TMRType.gouffre.type, label: "Gouffre des Litiges" },
C13: { type: TMRType.desert.type, label: "Désert de Neige" },
D13: { type: TMRType.cite.type, label: "Cité Sordide" },
E13: { type: TMRType.plaines.type, label: "Plaines de Xnez" },
F13: { type: TMRType.foret.type, label: "Forêt des Cris" },
G13: { type: TMRType.plaines.type, label: "Plaines Calcaires" },
H13: { type: TMRType.desolation.type, label: "Désolation de Rien" },
I13: { type: TMRType.monts.type, label: "Monts Bigleux" },
J13: { type: TMRType.gouffre.type, label: "Gouffre de Gromph" },
K13: { type: TMRType.foret.type, label: "Forêt de Kluth" },
L13: { type: TMRType.monts.type, label: "Monts Dormants" },
M13: { type: TMRType.plaines.type, label: "Plaines dAnjou" },
A14: { type: TMRType.collines.type, label: "Collines de Stolis" },
B14: { type: TMRType.necropole.type, label: "Nécropole de Gorlo" },
C14: { type: TMRType.foret.type, label: "Forêt de Bissam" },
D14: { type: TMRType.sanctuaire.type, label: "Sanctuaire Plat" },
E14: { type: TMRType.monts.type, label: "Monts de Quath" },
F14: { type: TMRType.plaines.type, label: "Plaines Brisées" },
G14: { type: TMRType.desert.type, label: "Désert de Sek" },
H14: { type: TMRType.plaines.type, label: "Plaines Blanches" },
I14: { type: TMRType.cite.type, label: "Cité Destituée" },
J14: { type: TMRType.desert.type, label: "Désert de Sank" },
K14: { type: TMRType.necropole.type, label: "Nécropole dAntinéar" },
L14: { type: TMRType.plaines.type, label: "Plaines de Jislith" },
M14: { type: TMRType.desolation.type, label: "Désolation dAprès" },
A15: { type: TMRType.cite.type, label: "Cité de Mielh" },
C15: { type: TMRType.plaines.type, label: "Plaines de Toué" },
E15: { type: TMRType.foret.type, label: "Forêt des Furies" },
G15: { type: TMRType.plaines.type, label: "Plaines des Soupirs" },
I15: { type: TMRType.monts.type, label: "Monts des Dragées" },
K15: { type: TMRType.collines.type, label: "Collines Pourpres" },
M15: { type: TMRType.cite.type, label: "Cité de Klana" }
}
/* -------------------------------------------- */
@ -251,13 +239,16 @@ const TMR_MOVE = {
*/
export class TMRUtility {
static init() {
for (let coord in TMRMapping) {
const tmr = TMRMapping[coord];
tmr.coord = coord;
tmr.oddq = TMRUtility.coordTMRToOddq(coord);
tmr.genre = TMRType[tmr.type].genre;
const tmr = TMRMapping[coord]
tmr.coord = coord
tmr.genre = TMRType[tmr.type].genre
if (coord != FLEUVE_COORD) {
tmr.oddq = TMRUtility.coordTMRToOddq(coord)
}
}
let tmrByType = Misc.classify(Object.values(TMRMapping));
let tmrByType = Misc.classify(Object.values(TMRMapping).filter(it => it.coord != FLEUVE_COORD))
for (const [type, list] of Object.entries(tmrByType)) {
TMRType[type].list = list;
}
@ -265,14 +256,17 @@ export class TMRUtility {
/* -------------------------------------------- */
static verifyTMRCoord(coord) {
return Grammar.equalsInsensitive(coord, 'Fleuve') || TMRUtility.getTMR(coord);
return Grammar.equalsInsensitive(coord, FLEUVE_COORD) || TMRUtility.getTMR(coord);
}
/* -------------------------------------------- */
static getTMR(coord) {
return coord == 'Fleuve' ? TMRMapping['D1'] : TMRMapping[coord];
return coord == FLEUVE_COORD ? TMRMapping['D1'] : TMRMapping[coord];
}
static isFleuve(coord) {
return TMRMapping[coord]?.type == TMRType.fleuve.type
}
static getTMRLabel(coord) {
return TMRUtility.getTMR(coord)?.label ?? (coord + ": case inconnue");
}
@ -290,18 +284,18 @@ export class TMRUtility {
static findTMRLike(type, options = { inclusMauvaise: true }) {
const choix = [...Object.values(TMRType)]
if (options.inclusMauvaise) {
choix.push({ name: 'Mauvaise' });
choix.push({ name: 'Mauvaise', type: 'mauvaise'});
}
const selection = Misc.findAllLike(type, choix).map(it => it.name);
const selection = Misc.findAllLike(type, choix)
if (selection.length == 0) {
ui.notifications.warn(`Un type de TMR doit être indiqué, '${type}' n'est pas trouvé dans ${choix}`);
return undefined;
return undefined
}
if (selection.length > 1) {
ui.notifications.warn(`Plusieurs types de TMR pourraient correspondre à '${type}': ${selection}`);
ui.notifications.warn(`Plusieurs types de TMR pourraient correspondre à '${type}': ${selection.map(it => it.name)}`);
return undefined;
}
return selection[0];
return selection[0]
}
static typeTmrName(type) {
@ -326,7 +320,7 @@ export class TMRUtility {
/* -------------------------------------------- */
static deplacement(coordOrig, moveName) {
const tmrMove = TMR_MOVE[moveName];
if (! tmrMove) {
if (!tmrMove) {
ui.notifications.error(`Le déplacement dans les TMR '${moveName}' est inconnu`)
return coordOrig
}

View File

@ -1,32 +1,3 @@
// pixiTMR.animate(pixiApp => pixiApp.ticker.add((delta) => {
// if (!sprite.waveAnimation) {
// sprite.waveAnimation = {
// originx: sprite.x,
// movex: 0,
// step: 0.03
// }
// }
// else {
// if (Math.abs(sprite.waveAnimation.movex) > 2) {
// sprite.waveAnimation.step = -sprite.waveAnimation.step
// }
// sprite.waveAnimation.movex += sprite.waveAnimation.step;
// }
// sprite.x = sprite.waveAnimation.originx + sprite.waveAnimation.movex
// }));
// return pixiTMR.square(this.code(),
// {
// zIndex: tmrTokenZIndex.trounoir,
// tint: tmrColors.trounoir,
// alpha: 1,
// taille: () => pixiTMR.sizes.full,
// decallage: {
// x: -pixiTMR.sizes.half,
// y: -pixiTMR.sizes.half
// }
// })
export class TMRAnimations {
static withAnimation(sprite, pixiTMR, ...animations) {

View File

@ -1,16 +1,39 @@
import { TMRUtility } from "../tmr-utility.js";
import { SYSTEM_RDD } from "../constants.js";
import { Draconique } from "./draconique.js";
import { PixiTMR } from "./pixi-tmr.js";
const IMAGE_CARTE_TMR = 'image-carte-tmr';
const TMR_V1 = "systems/foundryvtt-reve-de-dragon/styles/img/ui/tmr-v1.webp";
const TMR_V2 = "systems/foundryvtt-reve-de-dragon/styles/img/ui/tmr-v2.webp";
const TMR_V3_COULEUR = "systems/foundryvtt-reve-de-dragon/styles/img/ui/tmr-v3-couleur.webp";
export class CarteTmr extends Draconique {
static initSettings() {
game.settings.register(SYSTEM_RDD, IMAGE_CARTE_TMR,
{
name: 'Carte des TMR',
hint: "Choix de l'image de la carte des TMR",
scope: "client",
requiresReload: true,
config: true,
choices: {
[TMR_V3_COULEUR]: "TMR Scriptarium v3 couleur",
[TMR_V2]: "TMR Multisim v2",
[TMR_V1]: "TMR NEF v1",
},
default: TMR_V3_COULEUR,
type: String
})
}
type() { return '' }
match(item) { return false; }
manualMessage() { return false }
async onActorCreateOwned(actor, item) { }
code() { return 'tmr' }
img() { return 'systems/foundryvtt-reve-de-dragon/styles/img/ui/tmr.webp' }
img() { return game.settings.get(SYSTEM_RDD, IMAGE_CARTE_TMR) }
createSprite(pixiTMR) {
const img = PixiTMR.getImgFromCode(this.code())

View File

@ -43,6 +43,9 @@ export class EffetsDraconiques {
static augmentationSeuil = new AugmentationSeuil();
static initSettings() {
CarteTmr.initSettings()
}
static init() {
Draconique.init();
Draconique.register(EffetsDraconiques.carteTmr);

View File

@ -184,12 +184,9 @@ export class PixiTMR {
const coordTMR = TMRUtility.oddqToCoordTMR(oddq);
const tmr = TMRUtility.getTMR(coordTMR)
if (tmr) {
const tmrTooltip = `${coordTMR}: ${TMRUtility.getTMRLabel(coordTMR)}`;
const tokenTooltips = this.tmrDialog.allTokens
.filter(token => token.coordTMR() == coordTMR)
.map(token => token.tooltip);
return [tmrTooltip, ...tokenTooltips].reduce(Misc.joining('\n'))
return this.tmrDialog.getTokensDetails(coordTMR)
}
return undefined
}
computeEventOddq(event) {

View File

@ -17,11 +17,11 @@ export class SortReserve extends Draconique {
createSprite(pixiTMR) {
return pixiTMR.sprite(this.code(), {
zIndex: tmrTokenZIndex.sort,
decallage: pixiTMR.sizes.decallage(-1, 0),
taille: () => pixiTMR.sizes.third,
decallage: pixiTMR.sizes.decallage(-0.6, 0),
taille: () => pixiTMR.sizes.half,
});
}
tokens(pixiTMR, linkData, coordTMR, type = undefined) {
if (TMRUtility.getTMR(coordTMR()).type == 'fleuve') {
const tooltip = this.tooltip(linkData)

View File

@ -19,8 +19,8 @@ export class TerreAttache extends Draconique {
createSprite(pixiTMR) {
return pixiTMR.sprite(this.code(), {
zIndex: tmrTokenZIndex.tetes,
decallage: pixiTMR.sizes.decallage(1, 1),
taille: () => pixiTMR.sizes.third
decallage: pixiTMR.sizes.decallage(0.8, 0.8),
taille: () => pixiTMR.sizes.half
});
}

View File

@ -17,7 +17,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!Igt8XPaL7NQrGYlq.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -51,7 +46,7 @@ items:
carac_value: 8
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!Igt8XPaL7NQrGYlq.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -85,7 +75,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,23 +86,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!Igt8XPaL7NQrGYlq.lzEdMrKXbOYrWG5S'
- _id: NWmRryjNFkXcd1v9
name: Piétinement
type: competencecreature
sort: 150000
flags:
core:
sourceId: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.PrVuVpwuYaZtwRUi
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-pietinement.webp
effects: []
folder: null
@ -134,58 +115,49 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776394
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.PrVuVpwuYaZtwRUi
duplicateSource: null
_key: '!actors.items!Igt8XPaL7NQrGYlq.NWmRryjNFkXcd1v9'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.Igt8XPaL7NQrGYlq
system:
carac:
taille:
type: number
value: '23'
value: 23
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '18'
value: 18
label: Constitution
xp: '0'
xp: 0
derivee: false
force:
type: number
value: '18'
value: 18
label: Force
xp: '0'
xp: 0
derivee: false
perception:
type: number
value: '11'
value: 11
label: Perception
xp: '0'
xp: 0
derivee: false
volonte:
type: number
value: '7'
value: 7
label: Volonté
xp: '0'
xp: 0
derivee: false
reve:
type: number
value: '8'
value: 8
label: Rêve
xp: '0'
xp: 0
derivee: false
sante:
vie:
@ -218,12 +190,12 @@ system:
derivee: true
encombrement:
type: number
value: '20'
value: 20
label: Encombrement
derivee: false
protection:
type: number
value: '4'
value: 4
label: Protection
derivee: false
compteurs:
@ -256,57 +228,9 @@ system:
<p>&nbsp;</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
Q2G6GTdrotKzYGUC: 3
prototypeToken:
flags: {}
name: Aligate
@ -385,12 +309,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574848
modifiedTime: 1686701218698
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.Igt8XPaL7NQrGYlq
duplicateSource: null
_key: '!actors!Igt8XPaL7NQrGYlq'

View File

@ -17,7 +17,7 @@ items:
carac_value: 14
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@ -51,7 +46,7 @@ items:
carac_value: 14
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -85,7 +75,7 @@ items:
carac_value: 14
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@ -131,13 +116,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776403
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -153,7 +133,7 @@ items:
carac_value: 15
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -164,56 +144,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.lzEdMrKXbOYrWG5S'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.ppjPZoSKp7j841bp
system:
carac:
taille:
type: number
value: '3'
value: 3
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '12'
value: 12
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '7'
value: 7
label: Force
xp: 0
derivee: false
perception:
type: number
value: '15'
value: 15
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '10'
value: 10
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '7'
value: 7
label: Rêve
xp: 0
derivee: false
@ -238,7 +210,7 @@ system:
attributs:
plusdom:
type: number
value: '-2'
value: -2
label: +dom
derivee: true
vitesse:
@ -248,12 +220,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '-3'
value: -3
label: Protection
derivee: false
compteurs:
@ -285,99 +257,12 @@ system:
d&eacute;vore.</p>
<h1>Venin</h1>
<table style="width: 65.039%; height: 65px;" border="1">
<tbody>
<tr style="height: 16px;">
<td style="width: 30.8567%; height: 16px;">Malignit&eacute;</td>
<td style="width: 68.3263%; height: 16px;">6</td>
</tr>
<tr style="height: 16px;">
<td style="width: 30.8567%; height: 16px;">P&eacute;riodicit&eacute;</td>
<td style="width: 68.3263%; height: 16px;">1 round</td>
</tr>
<tr style="height: 16px;">
<td style="width: 30.8567%; height: 16px;">Dommages</td>
<td style="width: 68.3263%; height: 16px;">-1d6 points d'endurance</td>
</tr>
<tr style="height: 17px;">
<td style="width: 30.8567%; height: 17px;">Antidotes</td>
<td style="width: 68.3263%; height: 17px;">-3 \ Liqueur de Bagdol +12, Lait
de lune +6</td>
</tr>
</tbody>
</table>
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.v7yZidE9mObKO566]{Venin
d'Araflate}</p> <p></p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Araflate
@ -456,12 +341,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574886
modifiedTime: 1686701218699
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.ppjPZoSKp7j841bp
duplicateSource: null
_key: '!actors!ppjPZoSKp7j841bp'

View File

@ -17,7 +17,7 @@ items:
carac_value: 8
niveau: 0
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@ -51,7 +46,7 @@ items:
carac_value: 13
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -85,7 +75,7 @@ items:
carac_value: 8
niveau: 1
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@ -131,13 +116,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776417
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -153,7 +133,7 @@ items:
carac_value: 12
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -164,56 +144,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.lzEdMrKXbOYrWG5S'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.Q0i8frS62Mn7SW5c
system:
carac:
taille:
type: number
value: '19'
value: 19
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '18'
value: 18
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '18'
value: 18
label: Force
xp: 0
derivee: false
perception:
type: number
value: '12'
value: 12
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '4'
value: 4
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '6'
value: 6
label: Rêve
xp: 0
derivee: false
@ -248,12 +220,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '2'
value: 2
label: Protection
derivee: false
compteurs:
@ -278,57 +250,9 @@ system:
d&eacute;vorer tout ce qui bouge. Ses r&eacute;ussites particuli&egrave;res
sont toujours en <em>force</em>.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Baffreux
@ -341,9 +265,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -407,12 +331,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574857
modifiedTime: 1686701218700
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.Q0i8frS62Mn7SW5c
duplicateSource: null
_key: '!actors!Q0i8frS62Mn7SW5c'

View File

@ -17,7 +17,7 @@ items:
carac_value: 15
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ZLROmHLm6G9pElkk.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -51,7 +46,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ZLROmHLm6G9pElkk.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@ -97,13 +87,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776423
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ZLROmHLm6G9pElkk.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -119,7 +104,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,56 +115,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!ZLROmHLm6G9pElkk.lzEdMrKXbOYrWG5S'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.ZLROmHLm6G9pElkk
system:
carac:
taille:
type: number
value: '33'
value: 33
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '26'
value: 26
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '26'
value: 26
label: Force
xp: 0
derivee: false
perception:
type: number
value: '13'
value: 13
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '3'
value: 3
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -214,12 +191,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '2'
value: 2
label: Protection
derivee: false
compteurs:
@ -260,57 +237,9 @@ system:
comment vous y prendriez-vous pour le faire sortir de son antre en plein
jour ?</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Bandersnatch
@ -389,12 +318,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574870
modifiedTime: 1686701218700
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.ZLROmHLm6G9pElkk
duplicateSource: null
_key: '!actors!ZLROmHLm6G9pElkk'

View File

@ -29,13 +29,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776438
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.LWQHz5ymNBzh6ZEr'
- _id: shsUV8UpU18c0RJK
name: Course
@ -51,7 +46,7 @@ items:
carac_value: 15
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -85,7 +75,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -119,7 +104,7 @@ items:
carac_value: 13
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,22 +115,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.lzEdMrKXbOYrWG5S'
- _id: iwQo9KoK5tfIN7sw
name: Saut
type: competencecreature
sort: 100000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -155,7 +132,7 @@ items:
carac_value: 15
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -166,56 +143,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.iwQo9KoK5tfIN7sw'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.zMvyRrp10dkfcS43
system:
carac:
taille:
type: number
value: '20'
value: 20
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '15'
value: 15
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '16'
value: 16
label: Force
xp: 0
derivee: false
perception:
type: number
value: '13'
value: 13
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '9'
value: 9
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -250,12 +219,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '1'
value: 1
label: Protection
derivee: false
compteurs:
@ -283,57 +252,9 @@ system:
n&rsquo;h&eacute;sitent pas &agrave; charger les intrus pour prot&eacute;ger
biches et faons.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Bramart
@ -412,12 +333,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574891
modifiedTime: 1686701218701
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.zMvyRrp10dkfcS43
duplicateSource: null
_key: '!actors!zMvyRrp10dkfcS43'

View File

@ -17,7 +17,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.shsUV8UpU18c0RJK'
- _id: 4GmpkphbsmQjvVVK
name: Escalade
@ -51,7 +46,7 @@ items:
carac_value: 15
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.4GmpkphbsmQjvVVK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -85,7 +75,7 @@ items:
carac_value: 13
niveau: 5
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@ -131,13 +116,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776442
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -153,7 +133,7 @@ items:
carac_value: 14
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -164,22 +144,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.lzEdMrKXbOYrWG5S'
- _id: plIWZXJT0XGKJ5ar
name: Saut
type: competencecreature
sort: 200000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -189,7 +161,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -200,56 +172,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.plIWZXJT0XGKJ5ar'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.twCuK1GjVBTUFGXF
system:
carac:
taille:
type: number
value: '7'
value: 7
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '12'
value: 12
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '11'
value: 11
label: Force
xp: 0
derivee: false
perception:
type: number
value: '14'
value: 14
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '8'
value: 8
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '15'
value: 15
label: Rêve
xp: 0
derivee: false
@ -284,12 +248,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '0'
value: 0
label: Protection
derivee: false
compteurs:
@ -340,57 +304,9 @@ system:
combat indiqu&eacute;es ne s&rsquo;appliquent qu&rsquo;&agrave; la
pointue.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Brolute rieuse
@ -469,12 +385,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574889
modifiedTime: 1686701218702
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.twCuK1GjVBTUFGXF
duplicateSource: null
_key: '!actors!twCuK1GjVBTUFGXF'

View File

@ -2,9 +2,6 @@ _id: LqYHIJf9LVGxRT7S
name: Chamule
type: creature
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.LqYHIJf9LVGxRT7S
img: systems/foundryvtt-reve-de-dragon/icons/creatures/chamule.svg
items:
- _id: shsUV8UpU18c0RJK
@ -20,7 +17,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -32,14 +29,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -54,7 +46,7 @@ items:
carac_value: 8
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -66,14 +58,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@ -101,13 +88,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776536
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -122,7 +104,7 @@ items:
carac_value: 12
niveau: 0
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -134,23 +116,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.lzEdMrKXbOYrWG5S'
- _id: 3MgAaUHeKGBcbyr5
name: Coup de pied
type: competencecreature
sort: 500000
flags:
core:
sourceId: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.Zpl2Bi451vB3r91W
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-coup_de_pied.webp
effects: []
system:
@ -172,51 +145,45 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776536
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.Zpl2Bi451vB3r91W
duplicateSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.3MgAaUHeKGBcbyr5'
effects: []
system:
carac:
taille:
type: number
value: '21'
value: 21
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '17'
value: 17
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '16'
value: 16
label: Force
xp: 0
derivee: false
perception:
type: number
value: '12'
value: 12
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '12'
value: 12
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '12'
value: 12
label: Rêve
xp: 0
derivee: false
@ -251,12 +218,12 @@ system:
derivee: true
encombrement:
type: number
value: '18'
value: 18
label: Encombrement
derivee: false
protection:
type: number
value: '1'
value: 1
label: Protection
derivee: false
compteurs:
@ -290,57 +257,9 @@ system:
normalement de graines et de fruits. Si on les laisse go&ucirc;ter &agrave;
la chair, elles deviennent agressives, intraitables, et mordent.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Chamule
@ -420,12 +339,7 @@ prototypeToken:
folder: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574851
modifiedTime: 1686701218702
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.LqYHIJf9LVGxRT7S
duplicateSource: null
_key: '!actors!LqYHIJf9LVGxRT7S'

View File

@ -17,7 +17,7 @@ items:
carac_value: 14
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!76I21ASdWYBqsg8I.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -51,7 +46,7 @@ items:
carac_value: 9
niveau: 1
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!76I21ASdWYBqsg8I.CYpxxf1uTa78NWR9'
- _id: ndNshntOYb1JFNqi
name: Ruade
@ -97,13 +87,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776446
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!76I21ASdWYBqsg8I.ndNshntOYb1JFNqi'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -119,7 +104,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,56 +115,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!76I21ASdWYBqsg8I.lzEdMrKXbOYrWG5S'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.76I21ASdWYBqsg8I
system:
carac:
taille:
type: number
value: '25'
value: 25
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '18'
value: 18
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '20'
value: 20
label: Force
xp: 0
derivee: false
perception:
type: number
value: '12'
value: 12
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '8'
value: 8
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -214,12 +191,12 @@ system:
derivee: true
encombrement:
type: number
value: '22'
value: 22
label: Encombrement
derivee: false
protection:
type: number
value: '2'
value: 2
label: Protection
derivee: false
compteurs:
@ -243,57 +220,9 @@ system:
course est rajout&eacute;e une fois pour toutes, mais peut &ecirc;tre
modul&eacute;e par un jet de course sur la table de Course animale.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Cheval
@ -372,12 +301,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574839
modifiedTime: 1686701218703
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.76I21ASdWYBqsg8I
duplicateSource: null
_key: '!actors!76I21ASdWYBqsg8I'

View File

@ -2,9 +2,6 @@ _id: XuDpG772k6PAQ5LJ
name: Chiard
type: creature
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.XuDpG772k6PAQ5LJ
img: systems/foundryvtt-reve-de-dragon/icons/creatures/chiard.svg
items:
- _id: shsUV8UpU18c0RJK
@ -20,7 +17,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -32,14 +29,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -54,7 +46,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -66,14 +58,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@ -101,13 +88,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776448
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -122,7 +104,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -134,22 +116,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.lzEdMrKXbOYrWG5S'
- _id: Rtt7bny59v2jBhuO
name: Saut
type: competencecreature
sort: 200000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
system:
@ -158,7 +132,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -170,51 +144,46 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.Rtt7bny59v2jBhuO'
effects: []
system:
carac:
taille:
type: number
value: '6'
value: 6
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '10'
value: 10
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '10'
value: 10
label: Force
xp: 0
derivee: false
perception:
type: number
value: '11'
value: 11
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '8'
value: 8
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '8'
value: 8
label: Rêve
xp: 0
derivee: false
@ -249,12 +218,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '-1'
value: -1
label: Protection
derivee: false
compteurs:
@ -277,57 +246,9 @@ system:
s&rsquo;il est affam&eacute;. Un individu adulte p&egrave;se en moyenne 40
kg.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Chiard
@ -407,12 +328,7 @@ prototypeToken:
folder: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574867
modifiedTime: 1686701218704
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.XuDpG772k6PAQ5LJ
duplicateSource: null
_key: '!actors!XuDpG772k6PAQ5LJ'

View File

@ -17,7 +17,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!yL1XStIKWxGnhKvR.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -51,7 +46,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!yL1XStIKWxGnhKvR.CYpxxf1uTa78NWR9'
- _id: XgfRxSj8Ty1d3JFM
name: Mandibules
@ -97,13 +87,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776455
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!yL1XStIKWxGnhKvR.XgfRxSj8Ty1d3JFM'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -119,7 +104,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,56 +115,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!yL1XStIKWxGnhKvR.lzEdMrKXbOYrWG5S'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.yL1XStIKWxGnhKvR
system:
carac:
taille:
type: number
value: '7'
value: 7
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '9'
value: 9
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '11'
value: 11
label: Force
xp: 0
derivee: false
perception:
type: number
value: '10'
value: 10
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '3'
value: 3
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '2'
value: 2
label: Rêve
xp: 0
derivee: false
@ -214,12 +191,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '4'
value: 4
label: Protection
derivee: false
compteurs:
@ -250,99 +227,12 @@ system:
que vous nous faites un peu peur ?</p>
<h1>Venin</h1>
<table style="width: 399px; height: 65px;" border="1">
<tbody>
<tr style="height: 16px;">
<td style="width: 121px; height: 16px;">Malignit&eacute;</td>
<td style="width: 274px; height: 16px;">3</td>
</tr>
<tr style="height: 16px;">
<td style="width: 121px; height: 16px;">P&eacute;riodicit&eacute;</td>
<td style="width: 274px; height: 16px;">1 miute</td>
</tr>
<tr style="height: 16px;">
<td style="width: 121px; height: 16px;">Dommages</td>
<td style="width: 274px; height: 16px;">-1 point de vie</td>
</tr>
<tr style="height: 17px;">
<td style="width: 121px; height: 17px;">Antidotes</td>
<td style="width: 274px; height: 17px;">-2 \ Liqueur de Bagdol +16, Teinture
d'Erozonne +10</td>
</tr>
</tbody>
</table>
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.cFMUtU6LZG0mKeDl]{Venin
de chrasme}</p> <p></p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Chrasme
@ -421,12 +311,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574889
modifiedTime: 1686701218705
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.yL1XStIKWxGnhKvR
duplicateSource: null
_key: '!actors!yL1XStIKWxGnhKvR'

View File

@ -29,13 +29,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776458
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.LWQHz5ymNBzh6ZEr'
- _id: shsUV8UpU18c0RJK
name: Course
@ -51,7 +46,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@ -85,7 +75,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -119,7 +104,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,14 +115,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -153,7 +133,7 @@ items:
carac_value: 13
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -164,56 +144,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.lzEdMrKXbOYrWG5S'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.VsEw24DEekBbU69Z
system:
carac:
taille:
type: number
value: '20'
value: 20
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '18'
value: 18
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '16'
value: 16
label: Force
xp: 0
derivee: false
perception:
type: number
value: '13'
value: 13
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '7'
value: 7
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '9'
value: 9
label: Rêve
xp: 0
derivee: false
@ -248,12 +220,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '3'
value: 3
label: Protection
derivee: false
compteurs:
@ -284,57 +256,9 @@ system:
pr&eacute;dateur qui n&rsquo;h&eacute;site pas &agrave; s&rsquo;attaquer
&agrave; l&rsquo;homme, se servant redoutablement de ses cornes.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Cornicochon
@ -413,12 +337,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574860
modifiedTime: 1686701218707
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.VsEw24DEekBbU69Z
duplicateSource: null
_key: '!actors!VsEw24DEekBbU69Z'

View File

@ -17,7 +17,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -51,7 +46,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@ -97,13 +87,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776466
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -119,7 +104,7 @@ items:
carac_value: 10
niveau: 0
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,22 +115,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.lzEdMrKXbOYrWG5S'
- _id: 0bTL8SzhNJoPrXd4
name: Saut
type: competencecreature
sort: 150000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -155,7 +132,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -166,56 +143,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.0bTL8SzhNJoPrXd4'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.IdZUNtuYcDBffZKn
system:
carac:
taille:
type: number
value: '12'
value: 12
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '12'
value: 12
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '15'
value: 15
label: Force
xp: 0
derivee: false
perception:
type: number
value: '10'
value: 10
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '6'
value: 6
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '4'
value: 4
label: Rêve
xp: 0
derivee: false
@ -250,12 +219,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '3'
value: 3
label: Protection
derivee: false
compteurs:
@ -290,57 +259,9 @@ system:
Quand il bondit, son attaque est consid&eacute;r&eacute;e comme une
<em>charge</em>.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Dong
@ -419,12 +340,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574846
modifiedTime: 1686701218708
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.IdZUNtuYcDBffZKn
duplicateSource: null
_key: '!actors!IdZUNtuYcDBffZKn'

View File

@ -17,7 +17,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!kPDswxsWVnSYitfL.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@ -63,13 +58,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776469
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!kPDswxsWVnSYitfL.6DK46pyO0hzEuuUg'
- _id: Kt7WlB5Ui97X211z
name: Vol
@ -85,7 +75,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,56 +86,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!kPDswxsWVnSYitfL.Kt7WlB5Ui97X211z'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.kPDswxsWVnSYitfL
system:
carac:
taille:
type: number
value: '4'
value: 4
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '10'
value: 10
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '8'
value: 8
label: Force
xp: 0
derivee: false
perception:
type: number
value: '12'
value: 12
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '7'
value: 7
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '7'
value: 7
label: Rêve
xp: 0
derivee: false
@ -170,7 +152,7 @@ system:
attributs:
plusdom:
type: number
value: '-1'
value: -1
label: +dom
derivee: true
vitesse:
@ -180,12 +162,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '-3'
value: -3
label: Protection
derivee: false
compteurs:
@ -232,57 +214,9 @@ system:
d&rsquo;attaque, puisqu&rsquo;il cause des dommages automatiques, mais peut
contrer empoignade ou attaque de dague par le battement de ses ailes.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Drakkule
@ -361,12 +295,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574882
modifiedTime: 1686701218708
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.kPDswxsWVnSYitfL
duplicateSource: null
_key: '!actors!kPDswxsWVnSYitfL'

View File

@ -17,7 +17,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!tbBCUzaYThtcq3Ch.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -51,7 +46,7 @@ items:
carac_value: 13
niveau: 0
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!tbBCUzaYThtcq3Ch.lzEdMrKXbOYrWG5S'
- _id: Kt7WlB5Ui97X211z
name: Vol
@ -85,7 +75,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,56 +86,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!tbBCUzaYThtcq3Ch.Kt7WlB5Ui97X211z'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.tbBCUzaYThtcq3Ch
system:
carac:
taille:
type: number
value: '2'
value: 2
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '8'
value: 8
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '3'
value: 3
label: Force
xp: 0
derivee: false
perception:
type: number
value: '13'
value: 13
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '10'
value: 10
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '11'
value: 11
label: Rêve
xp: 0
derivee: false
@ -170,7 +152,7 @@ system:
attributs:
plusdom:
type: number
value: '-4'
value: -4
label: +dom
derivee: true
vitesse:
@ -180,12 +162,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '-6'
value: -6
label: Protection
derivee: false
compteurs:
@ -219,57 +201,9 @@ system:
pratiquement pas de m&eacute;moire. Au demeurant adorable, un f&eacute;lorn
de compagnie peut vite devenir assez crispant.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Félorn
@ -348,12 +282,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574888
modifiedTime: 1686701218709
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.tbBCUzaYThtcq3Ch
duplicateSource: null
_key: '!actors!tbBCUzaYThtcq3Ch'

View File

@ -17,7 +17,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@ -51,7 +46,7 @@ items:
carac_value: 14
niveau: 5
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.yDHZfK4RmwQW4YaW'
- _id: 4GmpkphbsmQjvVVK
name: Escalade
@ -85,7 +75,7 @@ items:
carac_value: 14
niveau: 5
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.4GmpkphbsmQjvVVK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -119,7 +104,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,14 +115,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@ -165,13 +145,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776477
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -187,7 +162,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -198,56 +173,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.lzEdMrKXbOYrWG5S'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.f31jeCsQgw3hWjk6
system:
carac:
taille:
type: number
value: '7'
value: 7
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '12'
value: 12
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '11'
value: 11
label: Force
xp: 0
derivee: false
perception:
type: number
value: '13'
value: 13
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '10'
value: 10
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -282,12 +249,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '0'
value: 0
label: Protection
derivee: false
compteurs:
@ -318,57 +285,9 @@ system:
chevreuils, voire aux humains isol&eacute;s. La fourrure de furlong est
tr&egrave;s recherch&eacute;e.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Furlong
@ -381,9 +300,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -447,12 +366,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574877
modifiedTime: 1686701218709
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.f31jeCsQgw3hWjk6
duplicateSource: null
_key: '!actors!f31jeCsQgw3hWjk6'

View File

@ -7,10 +7,6 @@ items:
name: Morsure
type: competencecreature
sort: 100000
flags:
core:
sourceId: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.6DK46pyO0hzEuuUg
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-morsure.webp
effects: []
folder: null
@ -32,23 +28,13 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776480
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.6DK46pyO0hzEuuUg
duplicateSource: null
_key: '!actors.items!igtHarwizNIUhd8M.bwJZ6nTLX9hohV7Q'
- _id: 7td0EmFMtpwNyWwo
name: Esquive
type: competencecreature
sort: 200000
flags:
core:
sourceId: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.CYpxxf1uTa78NWR9
img: systems/foundryvtt-reve-de-dragon/icons/competence_esquive.webp
effects: []
folder: null
@ -58,7 +44,7 @@ items:
carac_value: 15
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -69,24 +55,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.CYpxxf1uTa78NWR9
duplicateSource: null
_key: '!actors.items!igtHarwizNIUhd8M.7td0EmFMtpwNyWwo'
- _id: d2yxJ5c57vMatAQV
name: Discrétion
type: competencecreature
sort: 300000
flags:
core:
sourceId: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.yDHZfK4RmwQW4YaW
img: systems/foundryvtt-reve-de-dragon/icons/competence_discretion.webp
effects: []
folder: null
@ -96,7 +72,7 @@ items:
carac_value: 14
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -107,24 +83,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.yDHZfK4RmwQW4YaW
duplicateSource: null
_key: '!actors.items!igtHarwizNIUhd8M.d2yxJ5c57vMatAQV'
- _id: aGm8xRr55CPUo5rM
name: Pickpocket
type: competencecreature
sort: 400000
flags:
core:
sourceId: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.sUdXhpuVVOAlcVpo
img: systems/foundryvtt-reve-de-dragon/icons/competence_pickpocket.webp
effects: []
folder: null
@ -134,7 +100,7 @@ items:
carac_value: 14
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -145,24 +111,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.sUdXhpuVVOAlcVpo
duplicateSource: null
_key: '!actors.items!igtHarwizNIUhd8M.aGm8xRr55CPUo5rM'
- _id: bL7lL688cp1s1Vke
name: Vigilance
type: competencecreature
sort: 500000
flags:
core:
sourceId: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.lzEdMrKXbOYrWG5S
img: systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp
effects: []
folder: null
@ -172,7 +128,7 @@ items:
carac_value: 14
niveau: 0
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -183,24 +139,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.lzEdMrKXbOYrWG5S
duplicateSource: null
_key: '!actors.items!igtHarwizNIUhd8M.bL7lL688cp1s1Vke'
- _id: Fu61NMCeLxi9nfSD
name: Course
type: competencecreature
sort: 600000
flags:
core:
sourceId: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.shsUV8UpU18c0RJK
img: systems/foundryvtt-reve-de-dragon/icons/competence_course.webp
effects: []
folder: null
@ -210,7 +156,7 @@ items:
carac_value: 15
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -221,23 +167,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: >-
Compendium.foundryvtt-reve-de-dragon.competences-creatures.shsUV8UpU18c0RJK
duplicateSource: null
_key: '!actors.items!igtHarwizNIUhd8M.Fu61NMCeLxi9nfSD'
- _id: uW9fTmhw6GBnf1e9
name: Saut
type: competencecreature
sort: 700000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -247,7 +184,7 @@ items:
carac_value: 15
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -258,56 +195,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!igtHarwizNIUhd8M.uW9fTmhw6GBnf1e9'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.igtHarwizNIUhd8M
system:
carac:
taille:
type: number
value: '6'
value: 6
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '10'
value: 10
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '9'
value: 9
label: Force
xp: 0
derivee: false
perception:
type: number
value: '14'
value: 14
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '11'
value: 11
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '12'
value: 12
label: Rêve
xp: 0
derivee: false
@ -332,7 +261,7 @@ system:
attributs:
plusdom:
type: number
value: '-1'
value: -1
label: +dom
derivee: true
vitesse:
@ -342,12 +271,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '0'
value: 0
label: Protection
derivee: false
compteurs:
@ -388,57 +317,9 @@ system:
agressif, le glipzouk ne se bat que s&rsquo;il est accul&eacute; sans
pouvoir fuir.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Glipzouk
@ -451,9 +332,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -517,12 +398,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574881
modifiedTime: 1686701218712
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.igtHarwizNIUhd8M
duplicateSource: null
_key: '!actors!igtHarwizNIUhd8M'

View File

@ -29,13 +29,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.0.16
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1663624241418
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!X7j6D136KAhFvItD.shsUV8UpU18c0RJK'
- _id: JTuBQCPdumw3DfxH
name: Crête
@ -63,13 +58,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776482
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!X7j6D136KAhFvItD.JTuBQCPdumw3DfxH'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@ -85,7 +75,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!X7j6D136KAhFvItD.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -119,7 +104,7 @@ items:
carac_value: 9
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,14 +115,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!X7j6D136KAhFvItD.CYpxxf1uTa78NWR9'
- _id: efl1HdDSKpBfImQ1
name: Pierre Lancée
@ -165,13 +145,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.0.16
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1663624231257
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!X7j6D136KAhFvItD.efl1HdDSKpBfImQ1'
- _id: OzHBowOMADRwcVXR
name: Pierre Tenue
@ -199,13 +174,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.0.16
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1663624295697
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!X7j6D136KAhFvItD.OzHBowOMADRwcVXR'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -221,7 +191,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -232,22 +202,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!X7j6D136KAhFvItD.lzEdMrKXbOYrWG5S'
- _id: 2G5PanD98Nj91PQD
name: Saut
type: competencecreature
sort: 750000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -257,7 +219,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -268,58 +230,50 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!X7j6D136KAhFvItD.2G5PanD98Nj91PQD'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.X7j6D136KAhFvItD
system:
carac:
taille:
type: number
value: '16'
value: 16
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '15'
value: 15
label: Constitution
xp: '0'
xp: 0
derivee: false
force:
type: number
value: '13'
value: 13
label: Force
xp: '0'
xp: 0
derivee: false
perception:
type: number
value: '10'
value: 10
label: Perception
xp: '0'
xp: 0
derivee: false
volonte:
type: number
value: '8'
value: 8
label: Volonté
xp: '0'
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: '0'
xp: 0
derivee: false
sante:
vie:
@ -352,12 +306,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '4'
value: 4
label: Protection
derivee: false
compteurs:
@ -392,57 +346,9 @@ system:
les glous. Agressifs et omnivores, les glous d&eacute;vorent la chair de
leurs vaincus.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Glou
@ -455,9 +361,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -521,12 +427,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574862
modifiedTime: 1686701218712
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.X7j6D136KAhFvItD
duplicateSource: null
_key: '!actors!X7j6D136KAhFvItD'

View File

@ -17,7 +17,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@ -51,7 +46,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -85,7 +75,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@ -131,13 +116,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776484
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -153,7 +133,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -164,56 +144,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.lzEdMrKXbOYrWG5S'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.f6wzOaOzdwy51prt
system:
carac:
taille:
type: number
value: '11'
value: 11
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '14'
value: 14
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '13'
value: 13
label: Force
xp: 0
derivee: false
perception:
type: number
value: '10'
value: 10
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '7'
value: 7
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -248,12 +220,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '0'
value: 0
label: Protection
derivee: false
compteurs:
@ -285,56 +257,8 @@ system:
<h1 style="box-sizing: border-box; user-select: text; color: #191813;
font-family: GoudyAcc, sans-serif;">Venin</h1>
<table style="box-sizing: border-box; user-select: text; width: 395px;
color: #191813; font-family: GoudyAcc, sans-serif; height: 65px;"
border="1">
<tbody style="box-sizing: border-box; user-select: text;">
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
16px;">Malignit&eacute;</td>
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
16px;">6</td>
</tr>
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
16px;">P&eacute;riodicit&eacute;</td>
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
16px;">1 round</td>
</tr>
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
16px;">Dommages</td>
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
16px;">1 ligne de fatigue</td>
</tr>
<tr style="box-sizing: border-box; user-select: text; height: 17px;">
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
17px;">Antidotes</td>
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
17px;">-4 \ Floume-dhu +16</td>
</tr>
</tbody>
</table>
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.IF19EUvrY1HL87lr]{Venin
paralysant de goule}</p>
<p>La paralysie intervient quand toutes les lignes de fatigue sont pleines
et dure 6 heures.</p>
@ -344,57 +268,9 @@ system:
(pour une dose": une demi-mesure de chaque). Puis chauffer le m&eacute;lange
jusqu&rsquo;&agrave; couleur bleu-sangue (-2).</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Goule
@ -407,9 +283,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -473,12 +349,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574878
modifiedTime: 1686701218713
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.f6wzOaOzdwy51prt
duplicateSource: null
_key: '!actors!f6wzOaOzdwy51prt'

View File

@ -17,7 +17,7 @@ items:
carac_value: 15
niveau: 5
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,21 +28,13 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!VCRmWnhzCF9tJTD0.yDHZfK4RmwQW4YaW'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.VCRmWnhzCF9tJTD0
system:
carac:
taille:
@ -153,57 +145,9 @@ system:
<p>Tout coup qui touche la grincette l&rsquo;extermine.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Grincette
@ -216,9 +160,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -282,12 +226,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574858
modifiedTime: 1686701218714
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.VCRmWnhzCF9tJTD0
duplicateSource: null
_key: '!actors!VCRmWnhzCF9tJTD0'

View File

@ -17,7 +17,7 @@ items:
carac_value: 14
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.shsUV8UpU18c0RJK'
- _id: 4GmpkphbsmQjvVVK
name: Escalade
@ -51,7 +46,7 @@ items:
carac_value: 14
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.4GmpkphbsmQjvVVK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -85,7 +75,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@ -131,13 +116,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776487
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -153,7 +133,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -164,22 +144,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.lzEdMrKXbOYrWG5S'
- _id: wxT2H9CD43z4LlnS
name: Saut
type: competencecreature
sort: 100000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -189,7 +161,7 @@ items:
carac_value: 14
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -200,56 +172,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.wxT2H9CD43z4LlnS'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.OWuf2ryyCtipWnpE
system:
carac:
taille:
type: number
value: '23'
value: 23
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '20'
value: 20
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '20'
value: 20
label: Force
xp: 0
derivee: false
perception:
type: number
value: '11'
value: 11
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '8'
value: 8
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -284,12 +248,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '3'
value: 3
label: Protection
derivee: false
compteurs:
@ -322,57 +286,9 @@ system:
pr&eacute;matur&eacute;ment. En combat, ses r&eacute;ussites
particuli&egrave;res sont usuellement pass&eacute;es en <em>force</em>.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Grizzal
@ -385,9 +301,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -451,12 +367,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574854
modifiedTime: 1686701218714
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.OWuf2ryyCtipWnpE
duplicateSource: null
_key: '!actors!OWuf2ryyCtipWnpE'

View File

@ -17,7 +17,7 @@ items:
carac_value: 11
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!BgXjyfnolHRQNWCj.CYpxxf1uTa78NWR9'
- _id: ndNshntOYb1JFNqi
name: Serres
@ -63,55 +58,47 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776491
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!BgXjyfnolHRQNWCj.ndNshntOYb1JFNqi'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.BgXjyfnolHRQNWCj
system:
carac:
taille:
type: number
value: '9'
value: 9
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '11'
value: 11
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '12'
value: 12
label: Force
xp: 0
derivee: false
perception:
type: number
value: '11'
value: 11
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '12'
value: 12
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '11'
value: 11
label: Rêve
xp: 0
derivee: false
@ -146,12 +133,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '4'
value: 4
label: Protection
derivee: false
compteurs:
@ -197,57 +184,9 @@ system:
ne peut pas r&eacute;utiliser son pouvoir sur un personnage qui a
r&eacute;ussi son JR.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Harpie
@ -326,12 +265,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574842
modifiedTime: 1686701218715
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.BgXjyfnolHRQNWCj
duplicateSource: null
_key: '!actors!BgXjyfnolHRQNWCj'

View File

@ -17,7 +17,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -51,7 +46,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@ -97,13 +87,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776493
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -119,7 +104,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,22 +115,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.lzEdMrKXbOYrWG5S'
- _id: 4JttwOCHxLNbsW4R
name: Saut
type: competencecreature
sort: 1900000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -155,7 +132,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -166,56 +143,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.4JttwOCHxLNbsW4R'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.lHt8Tyexy3qzAerO
system:
carac:
taille:
type: number
value: '11'
value: 11
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '13'
value: 13
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '13'
value: 13
label: Force
xp: 0
derivee: false
perception:
type: number
value: '11'
value: 11
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '6'
value: 6
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -250,12 +219,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '2'
value: 2
label: Protection
derivee: false
compteurs:
@ -284,57 +253,9 @@ system:
l&rsquo;un des deux partenaires, g&eacute;n&eacute;ralement le m&acirc;le,
trouve la mort.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Jigstang
@ -347,9 +268,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -413,12 +334,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574884
modifiedTime: 1686701218716
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.lHt8Tyexy3qzAerO
duplicateSource: null
_key: '!actors!lHt8Tyexy3qzAerO'

View File

@ -17,7 +17,7 @@ items:
carac_value: 12
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!YjBDfNoLA7rlofsh.CYpxxf1uTa78NWR9'
- _id: h9ASt4vrvEgxfj7j
name: Tronçonneuse
@ -63,13 +58,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776495
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!YjBDfNoLA7rlofsh.h9ASt4vrvEgxfj7j'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -85,7 +75,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!YjBDfNoLA7rlofsh.lzEdMrKXbOYrWG5S'
- _id: Kt7WlB5Ui97X211z
name: Vol
@ -119,7 +104,7 @@ items:
carac_value: 14
niveau: 6
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -130,56 +115,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!YjBDfNoLA7rlofsh.Kt7WlB5Ui97X211z'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.YjBDfNoLA7rlofsh
system:
carac:
taille:
type: number
value: '3'
value: 3
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '4'
value: 4
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '7'
value: 7
label: Force
xp: 0
derivee: false
perception:
type: number
value: '11'
value: 11
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '2'
value: 2
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '2'
value: 2
label: Rêve
xp: 0
derivee: false
@ -204,7 +181,7 @@ system:
attributs:
plusdom:
type: number
value: '0'
value: 0
label: +dom
derivee: true
vitesse:
@ -214,12 +191,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '-6'
value: -6
label: Protection
derivee: false
compteurs:
@ -255,57 +232,9 @@ system:
rebrousser chemin le round suivant et revenir examiner ce qui bouge
encore.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Libelle
@ -318,9 +247,9 @@ prototypeToken:
disposition: -1
displayBars: 0
bar1:
attribute: null
attribute: sante.vie
bar2:
attribute: null
attribute: sante.endurance
randomImg: false
alpha: 1
light:
@ -384,12 +313,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574869
modifiedTime: 1686701218716
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.YjBDfNoLA7rlofsh
duplicateSource: null
_key: '!actors!YjBDfNoLA7rlofsh'

View File

@ -17,7 +17,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!99I06oTwCziLTnnl.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@ -51,7 +46,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!99I06oTwCziLTnnl.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -85,7 +75,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!99I06oTwCziLTnnl.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@ -131,13 +116,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776497
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!99I06oTwCziLTnnl.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -153,7 +133,7 @@ items:
carac_value: 13
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -164,22 +144,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!99I06oTwCziLTnnl.lzEdMrKXbOYrWG5S'
- _id: PBS6YfmZLbSbwzpH
name: Saut
type: competencecreature
sort: 100000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -189,7 +161,7 @@ items:
carac_value: 12
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -200,56 +172,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!99I06oTwCziLTnnl.PBS6YfmZLbSbwzpH'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.99I06oTwCziLTnnl
system:
carac:
taille:
type: number
value: '8'
value: 8
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '11'
value: 11
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '12'
value: 12
label: Force
xp: 0
derivee: false
perception:
type: number
value: '13'
value: 13
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '10'
value: 10
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -284,12 +248,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '0'
value: 0
label: Protection
derivee: false
compteurs:
@ -322,57 +286,9 @@ system:
vont m&ecirc;me jusqu&rsquo;&agrave; effectuer des razzias sur les
villages.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Lycan
@ -451,12 +367,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574841
modifiedTime: 1686701218717
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.99I06oTwCziLTnnl
duplicateSource: null
_key: '!actors!99I06oTwCziLTnnl'

View File

@ -17,7 +17,7 @@ items:
carac_value: 10
niveau: 0
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -28,14 +28,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!DsE2xomX97onO2mN.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@ -51,7 +46,7 @@ items:
carac_value: 12
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -62,14 +57,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!DsE2xomX97onO2mN.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@ -85,7 +75,7 @@ items:
carac_value: 11
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -96,14 +86,9 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!DsE2xomX97onO2mN.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@ -131,13 +116,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1686700776499
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!DsE2xomX97onO2mN.6DK46pyO0hzEuuUg'
- _id: efl1HdDSKpBfImQ1
name: Pierre Lancée
@ -165,13 +145,8 @@ items:
default: 0
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.0.16
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: 1663624147664
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
_key: '!actors.items!DsE2xomX97onO2mN.efl1HdDSKpBfImQ1'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@ -187,7 +162,7 @@ items:
carac_value: 10
niveau: 3
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -198,22 +173,14 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
_key: '!actors.items!DsE2xomX97onO2mN.lzEdMrKXbOYrWG5S'
- _id: WJq3afIoq0xUV2dF
name: Saut
type: competencecreature
sort: 100000
flags:
core:
sourceId: Item.JZDgJ7ySiV84llkK
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
effects: []
folder: null
@ -223,7 +190,7 @@ items:
carac_value: 12
niveau: 4
default_diffLibre: 0
categorie: ''
categorie: generale
categorie_parade: ''
iscombat: false
isnaturelle: true
@ -234,56 +201,48 @@ items:
ownership:
default: 0
_stats:
systemId: null
systemVersion: null
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: null
modifiedTime: null
lastModifiedBy: null
compendiumSource: Item.JZDgJ7ySiV84llkK
duplicateSource: null
_key: '!actors.items!DsE2xomX97onO2mN.WJq3afIoq0xUV2dF'
effects: []
folder: null
sort: 100001
flags:
core:
sourceId: Compendium.foundryvtt-reve-de-dragon.animaux.DsE2xomX97onO2mN
system:
carac:
taille:
type: number
value: '5'
value: 5
label: Taille
xp: 0
derivee: false
constitution:
type: number
value: '11'
value: 11
label: Constitution
xp: 0
derivee: false
force:
type: number
value: '9'
value: 9
label: Force
xp: 0
derivee: false
perception:
type: number
value: '10'
value: 10
label: Perception
xp: 0
derivee: false
volonte:
type: number
value: '10'
value: 10
label: Volonté
xp: 0
derivee: false
reve:
type: number
value: '10'
value: 10
label: Rêve
xp: 0
derivee: false
@ -308,7 +267,7 @@ system:
attributs:
plusdom:
type: number
value: '-1'
value: -1
label: +dom
derivee: true
vitesse:
@ -318,12 +277,12 @@ system:
derivee: true
encombrement:
type: number
value: '0'
value: 0
label: Encombrement
derivee: false
protection:
type: number
value: '0'
value: 0
label: Protection
derivee: false
compteurs:
@ -365,57 +324,9 @@ system:
d&eacute;ploy&eacute;e. Certaines de leurs fosses sont assez grandes pour
accueillir des hommes.</p>
race: ''
notesmj: Notes du MJ
blessures:
legeres:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
graves:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
critiques:
liste:
- active: false
premiers_soins: 0
soins_complets: 0
jours: 0
localisation: ''
notesmj: ''
ownership:
default: 0
jOzRscDxoXZWpGS6: 3
prototypeToken:
flags: {}
name: Mariol
@ -494,12 +405,7 @@ prototypeToken:
texture: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 10.7.19
systemVersion: 12.0.22
coreVersion: '12.331'
createdTime: 1663623574844
modifiedTime: 1686701218718
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: Compendium.foundryvtt-reve-de-dragon.animaux.DsE2xomX97onO2mN
duplicateSource: null
_key: '!actors!DsE2xomX97onO2mN'

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