reg
Différences
Ci-dessous, les différences entre deux révisions de la page.
| reg [2026/10/06 11:23] – créée nanaki | reg [2026/10/06 11:28] (Version actuelle) – nanaki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | Les compétences sont organisées en 5 grandes branches, formant un véritable arbre de progression : | ||
| + | |||
| + | • Magie (Sort) | ||
| + | • Corps à corps (CAC) | ||
| + | • Distance (DIS) | ||
| + | • Survie (SUR) | ||
| + | • Furtivité (FUR) | ||
| + | |||
| + | Chaque compétence appartient à une branche et possède des caractéristiques spécifiques détaillées dans le tableau ci-dessous. | ||
| + | |||
| + | — | ||
| + | |||
| + | Lecture du tableau : | ||
| + | |||
| + | • Race : Com (Commun), Elfes, Nains, Géants, HS, Olymp (Olympien) | ||
| + | |||
| + | • Catégorie : correspond à la branche (Sort, CAC, Distance, Survie, Furtivité) | ||
| + | |||
| + | • Nom : nom de la compétence | ||
| + | |||
| + | • Coût : ressources nécessaires à l’activation (PM, PV, Mouvement). Le coût minimum est toujours minimum 1 pa, si c'est 0 pa c'est indiqué dans le cout. | ||
| + | |||
| + | • Type : | ||
| + | |||
| + | Technique (T) | ||
| + | Passif (P): ne demande pas de coût pour activation, s' | ||
| + | Les Sorts | ||
| + | • Effet : description et puissance de la compétence | ||
| + | |||
| + | • Portée : distance d’utilisation | ||
| + | |||
| + | • Niveau : de 1 à 5 influence le coût ( voire plus bas) | ||
| + | augmente le seuil FM pour les sorts défensifs et de soin ( voir Combat partie sorts défensifs) | ||
| + | |||
| + | — | ||
| + | |||
| + | Règles générales : | ||
| + | |||
| + | • Vous disposez d’un maximum de 15 points de compétences | ||
| + | |||
| + | • Les passifs coûtent uniquement de l’or et ne nécessitent aucune activation | ||
| + | |||
| + | • Coût en or selon le niveau : | ||
| + | |||
| + | Niveau 1 : 50 pos | ||
| + | Niveau 2 : 100 pos | ||
| + | Niveau 3 : 200 pos | ||
| + | Niveau 4 : 300 pos | ||
| + | Niveau 5 : 300 pos | ||
| + | — | ||
| + | |||
| + | Utilisation du tableau : | ||
| + | |||
| + | Vous pouvez filtrer les compétences pour affiner votre recherche : | ||
| + | |||
| + | • Par catégorie → afficher une branche spécifique | ||
| + | • Par effet → uniquement pour les sorts (offensif, défensif, malédiction) | ||
| + | • Par type → techniques ou passifs | ||
| + | |||
| + | — | ||
| + | |||
| + | Note d’affichage : | ||
| + | Le tableau s' | ||
| + | |||
| + | — | ||
| + | |||
| + | Les compétences barrés sont celles qu'on ne peut plus acheter , si vous les connaissiez avant la mise à jour, elles restent dans votre liste de compétences mais si vous l' | ||
| + | |||
| + | Concernant les sorts, il y a un code couleur: | ||
| + | Offensif : fond et barre sur le coté gauche du tableau : rouge clair | ||
| + | Défensif et soin: fond et barre sur le coté gauche du tableau : vert clair | ||
| + | Malédiction: | ||
| + | |||
| + | Attention, pour lancer un sort defensifs et sorts de soins. Il faut faire un jet minimum. | ||
| + | Voici le calcul: | ||
| + | |||
| + | **Seuil minimal pour réussir les Bénédictions et sorts défensifs : 6 x (Niveau du sort +1). | ||
| + | ** | ||
| + | |||
| + | C'est à dire pour lancer un sort defensifs niveau 5 ( exemple virtuose), je dois faire un jet de 36 minimum. | ||
| + | |||
| + | Voici la liste complète des compétences : | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | < | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <meta name=" | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | body { | ||
| + | font-family: | ||
| + | margin: 10px; | ||
| + | } | ||
| + | |||
| + | .controls { | ||
| + | margin-bottom: | ||
| + | display: flex; | ||
| + | flex-wrap: wrap; | ||
| + | gap: 8px; | ||
| + | align-items: | ||
| + | } | ||
| + | |||
| + | .controls label { | ||
| + | font-weight: | ||
| + | } | ||
| + | |||
| + | .controls select, | ||
| + | .controls input { | ||
| + | padding: 5px; | ||
| + | } | ||
| + | |||
| + | #points { | ||
| + | font-weight: | ||
| + | font-size: 18px; | ||
| + | } | ||
| + | |||
| + | #warning { | ||
| + | margin: 8px 0; | ||
| + | padding: 8px; | ||
| + | background: #fff5cc; | ||
| + | border: 1px solid #e6c84f; | ||
| + | display: none; | ||
| + | } | ||
| + | |||
| + | /* Tableau */ | ||
| + | |||
| + | .table-container { | ||
| + | width: 100%; | ||
| + | overflow-x: auto; | ||
| + | } | ||
| + | |||
| + | table { | ||
| + | border-collapse: | ||
| + | width: 100%; | ||
| + | font-size: 13px; | ||
| + | table-layout: | ||
| + | } | ||
| + | |||
| + | td, | ||
| + | th { | ||
| + | border: 1px solid #ccc; | ||
| + | padding: 5px; | ||
| + | overflow: hidden; | ||
| + | text-overflow: | ||
| + | white-space: | ||
| + | } | ||
| + | |||
| + | th { | ||
| + | background: #f2f2f2; | ||
| + | cursor: pointer; | ||
| + | } | ||
| + | |||
| + | /* tailles colonnes */ | ||
| + | |||
| + | th: | ||
| + | th: | ||
| + | th: | ||
| + | th: | ||
| + | th: | ||
| + | th: | ||
| + | th: | ||
| + | th: | ||
| + | th: | ||
| + | |||
| + | /* Texte multi-lignes */ | ||
| + | |||
| + | td: | ||
| + | td: | ||
| + | white-space: | ||
| + | word-break: break-word; | ||
| + | } | ||
| + | |||
| + | /* Catégories */ | ||
| + | |||
| + | .sort { | ||
| + | background: #fff5e5; | ||
| + | } | ||
| + | |||
| + | .cac { | ||
| + | background: #ffe5e5; | ||
| + | } | ||
| + | |||
| + | .tir { | ||
| + | background: #e5f0ff; | ||
| + | } | ||
| + | |||
| + | .survie { | ||
| + | background: #e5fff5; | ||
| + | } | ||
| + | |||
| + | .furtivite { | ||
| + | background: #f5e5ff; | ||
| + | } | ||
| + | |||
| + | .Passif_Mana { | ||
| + | background: #fffbe5; | ||
| + | } | ||
| + | |||
| + | /* Effets */ | ||
| + | |||
| + | .offensif { | ||
| + | border-left: | ||
| + | } | ||
| + | |||
| + | .defensif { | ||
| + | border-left: | ||
| + | } | ||
| + | |||
| + | .soin { | ||
| + | border-left: | ||
| + | } | ||
| + | |||
| + | .malediction { | ||
| + | border-left: | ||
| + | } | ||
| + | |||
| + | /* Couleurs des sorts */ | ||
| + | |||
| + | .sort.offensif { | ||
| + | background: #ffe5e5; | ||
| + | } | ||
| + | |||
| + | .sort.defensif { | ||
| + | background: #e5f0ff; | ||
| + | } | ||
| + | |||
| + | .sort.malediction { | ||
| + | background: #f3e5ff; | ||
| + | } | ||
| + | |||
| + | /* Passifs */ | ||
| + | |||
| + | .P { | ||
| + | background: #e5ffe5 !important; | ||
| + | } | ||
| + | |||
| + | /* Compétence bloquée */ | ||
| + | |||
| + | tr.skill-locked { | ||
| + | opacity: 0.45; | ||
| + | } | ||
| + | |||
| + | tr.skill-locked td: | ||
| + | position: relative; | ||
| + | } | ||
| + | |||
| + | tr.skill-locked .skill { | ||
| + | cursor: not-allowed; | ||
| + | } | ||
| + | |||
| + | /* Compétences Mana répétables */ | ||
| + | |||
| + | .repeatable-cell { | ||
| + | white-space: | ||
| + | } | ||
| + | |||
| + | .repeat-controls { | ||
| + | display: inline-flex; | ||
| + | align-items: | ||
| + | gap: 3px; | ||
| + | } | ||
| + | |||
| + | .repeat-count { | ||
| + | min-width: 18px; | ||
| + | display: inline-block; | ||
| + | text-align: center; | ||
| + | font-weight: | ||
| + | } | ||
| + | |||
| + | .repeat-btn { | ||
| + | width: 20px; | ||
| + | height: 20px; | ||
| + | padding: 0; | ||
| + | line-height: | ||
| + | cursor: pointer; | ||
| + | border: 1px solid #aaa; | ||
| + | background: #eee; | ||
| + | border-radius: | ||
| + | } | ||
| + | |||
| + | .repeat-btn: | ||
| + | background: #ddd; | ||
| + | } | ||
| + | |||
| + | .repeat-btn: | ||
| + | opacity: 0.4; | ||
| + | cursor: not-allowed; | ||
| + | } | ||
| + | |||
| + | /* Sorts verrouillés par manque de capacité */ | ||
| + | |||
| + | tr.spell-locked { | ||
| + | opacity: 0.45; | ||
| + | } | ||
| + | |||
| + | .spell-capacity { | ||
| + | font-size: 12px; | ||
| + | margin-left: | ||
| + | } | ||
| + | |||
| + | .reset-container { | ||
| + | margin-bottom: | ||
| + | } | ||
| + | |||
| + | #resetTable { | ||
| + | padding: 6px 12px; | ||
| + | cursor: pointer; | ||
| + | } | ||
| + | |||
| + | /* Mobile */ | ||
| + | |||
| + | @media (max-width: 768px) { | ||
| + | table { | ||
| + | min-width: 950px; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | <div class=" | ||
| + | |||
| + | < | ||
| + | Points utilisés : | ||
| + | <span id=" | ||
| + | </ | ||
| + | |||
| + | <label for=" | ||
| + | <input | ||
| + | type=" | ||
| + | id=" | ||
| + | placeholder=" | ||
| + | > | ||
| + | |||
| + | <label for=" | ||
| + | <select id=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |||
| + | <label for=" | ||
| + | <select id=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |||
| + | <label for=" | ||
| + | <select id=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | <div id=" | ||
| + | |||
| + | <div class=" | ||
| + | <button id=" | ||
| + | Réinitialiser | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <div class=" | ||
| + | |||
| + | <table id=" | ||
| + | |||
| + | < | ||
| + | <tr> | ||
| + | < | ||
| + | <th onclick=" | ||
| + | <th onclick=" | ||
| + | <th onclick=" | ||
| + | <th onclick=" | ||
| + | <th onclick=" | ||
| + | <th onclick=" | ||
| + | <th onclick=" | ||
| + | <th onclick=" | ||
| + | </tr> | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | <!-- ===================================================== --> | ||
| + | <!-- ========================= MANA ====================== --> | ||
| + | <!-- ===================================================== --> | ||
| + | |||
| + | <tr class=" | ||
| + | data-repeatable=" | ||
| + | <td class=" | ||
| + | <div class=" | ||
| + | <button class=" | ||
| + | <span class=" | ||
| + | <button class=" | ||
| + | </ | ||
| + | </td> | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-repeatable=" | ||
| + | <td class=" | ||
| + | <div class=" | ||
| + | <button class=" | ||
| + | <span class=" | ||
| + | <button class=" | ||
| + | </ | ||
| + | </td> | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-repeatable=" | ||
| + | <td class=" | ||
| + | <div class=" | ||
| + | <button class=" | ||
| + | <span class=" | ||
| + | <button class=" | ||
| + | </ | ||
| + | </td> | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-repeatable=" | ||
| + | <td class=" | ||
| + | <div class=" | ||
| + | <button class=" | ||
| + | <span class=" | ||
| + | <button class=" | ||
| + | </ | ||
| + | </td> | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-repeatable=" | ||
| + | <td class=" | ||
| + | <div class=" | ||
| + | <button class=" | ||
| + | <span class=" | ||
| + | <button class=" | ||
| + | </ | ||
| + | </td> | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <!-- ===================================================== --> | ||
| + | <!-- ======================== SORTS ======================= --> | ||
| + | <!-- ===================================================== --> | ||
| + | |||
| + | <!-- Niveau 1 --> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | data-cat=" | ||
| + | data-effect=" | ||
| + | data-type=" | ||
| + | data-niv=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| <!-- Niveau 2 --> | <!-- Niveau 2 --> | ||
| Ligne 228: | Ligne 852: | ||
| </tr> | </tr> | ||
| + | |||
| + | |||
| + | <!-- ===================================================== --> | ||
| + | <!-- ========================= CAC ======================= --> | ||
| + | <!-- ===================================================== --> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | |||
| + | <!-- ===================================================== --> | ||
| + | <!-- ======================= DISTANCE ==================== --> | ||
| + | <!-- ===================================================== --> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | |||
| + | <!-- ===================================================== --> | ||
| + | <!-- ======================== SURVIE ===================== --> | ||
| + | <!-- ===================================================== --> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | |||
| + | |||
| + | <!-- ===================================================== --> | ||
| + | <!-- ====================== FURTIVITE ==================== --> | ||
| + | <!-- ===================================================== --> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | <td>X = 4×(Furtivité+1), | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | <td>X = 4×(Furtivité+1), | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | const MAX_POINTS = 15; | ||
| + | |||
| + | const points = document.getElementById(" | ||
| + | const warning = document.getElementById(" | ||
| + | |||
| + | const search = document.getElementById(" | ||
| + | const filterCat = document.getElementById(" | ||
| + | const filterEffect = document.getElementById(" | ||
| + | const filterType = document.getElementById(" | ||
| + | |||
| + | const table = document.getElementById(" | ||
| + | const tbody = table.querySelector(" | ||
| + | |||
| + | function resetTable() { | ||
| + | |||
| + | // Décocher toutes les compétences normales | ||
| + | tbody.querySelectorAll(" | ||
| + | cb.checked = false; | ||
| + | }); | ||
| + | |||
| + | // Remettre toutes les compétences répétables à 0 | ||
| + | tbody.querySelectorAll( | ||
| + | ' | ||
| + | ).forEach(counter => { | ||
| + | counter.innerText = " | ||
| + | }); | ||
| + | |||
| + | // Effacer le message éventuel | ||
| + | hideWarning(); | ||
| + | |||
| + | // Remettre les filtres à leur état initial | ||
| + | search.value = ""; | ||
| + | filterCat.value = " | ||
| + | filterEffect.value = " | ||
| + | filterType.value = " | ||
| + | |||
| + | updateAll(); | ||
| + | } | ||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | /* | ||
| + | * Retourne toutes les lignes de compétences d'un arbre. | ||
| + | * Les sorts ne sont pas considérés comme une partie de l' | ||
| + | * Mana pour les prérequis de niveau. | ||
| + | */ | ||
| + | function getTreeRows(tree) { | ||
| + | |||
| + | return Array.from( | ||
| + | tbody.querySelectorAll( | ||
| + | `tr[data-cat=" | ||
| + | ) | ||
| + | ); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Nombre d' | ||
| + | * | ||
| + | * Pour une compétence normale : | ||
| + | | ||
| + | * | ||
| + | * Pour les compétences Mana répétables : | ||
| + | | ||
| + | */ | ||
| + | function getSkillCount(row) { | ||
| + | |||
| + | if (row.dataset.repeatable === " | ||
| + | |||
| + | const counter = row.querySelector(" | ||
| + | |||
| + | return counter | ||
| + | ? parseInt(counter.innerText, | ||
| + | : 0; | ||
| + | } | ||
| + | |||
| + | const checkbox = row.querySelector(" | ||
| + | |||
| + | return checkbox && checkbox.checked ? 1 : 0; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Nombre total de points dépensés. | ||
| + | * | ||
| + | * Les sorts ne coûtent pas de point. | ||
| + | */ | ||
| + | function getUsedPoints() { | ||
| + | |||
| + | let total = 0; | ||
| + | |||
| + | tbody.querySelectorAll(" | ||
| + | |||
| + | const cat = row.dataset.cat; | ||
| + | |||
| + | if (cat === " | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | total += getSkillCount(row); | ||
| + | }); | ||
| + | |||
| + | return total; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Nombre de compétences connues à un niveau donné | ||
| + | * dans un arbre. | ||
| + | * | ||
| + | * Une acquisition répétée compte comme une compétence | ||
| + | * supplémentaire. | ||
| + | */ | ||
| + | function countLevel(tree, | ||
| + | |||
| + | let total = 0; | ||
| + | |||
| + | getTreeRows(tree).forEach(row => { | ||
| + | |||
| + | if (parseInt(row.dataset.niv, | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | total += getSkillCount(row); | ||
| + | }); | ||
| + | |||
| + | return total; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Nombre de niveaux 4 déjà acquis dans chaque arbre. | ||
| + | */ | ||
| + | function hasLevel4(tree) { | ||
| + | |||
| + | return countLevel(tree, | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Vérifie si un niveau est accessible dans son arbre. | ||
| + | */ | ||
| + | function levelRequirementMet(tree, | ||
| + | |||
| + | if (level <= 1) { | ||
| + | return true; | ||
| + | } | ||
| + | |||
| + | if (level === 2) { | ||
| + | return countLevel(tree, | ||
| + | } | ||
| + | |||
| + | if (level === 3) { | ||
| + | return countLevel(tree, | ||
| + | } | ||
| + | |||
| + | if (level === 4) { | ||
| + | return countLevel(tree, | ||
| + | } | ||
| + | |||
| + | return true; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Vérifie la règle : | ||
| + | * | ||
| + | * une fois un niveau 4 pris dans un arbre, | ||
| + | * aucun niveau 4 ne peut être pris dans un autre arbre. | ||
| + | * | ||
| + | * Plusieurs niveaux 4 restent possibles dans le même arbre. | ||
| + | */ | ||
| + | function level4Allowed(tree) { | ||
| + | |||
| + | if (!hasLevel4(tree)) { | ||
| + | |||
| + | const anotherTreeHasLevel4 = | ||
| + | [" | ||
| + | .some(otherTree => | ||
| + | otherTree !== tree && | ||
| + | hasLevel4(otherTree) | ||
| + | ); | ||
| + | |||
| + | if (anotherTreeHasLevel4) { | ||
| + | return false; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return true; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Vérifie si une compétence normale peut être apprise. | ||
| + | */ | ||
| + | function canLearn(row) { | ||
| + | |||
| + | const tree = row.dataset.cat; | ||
| + | const level = parseInt(row.dataset.niv, | ||
| + | |||
| + | if (tree === " | ||
| + | return true; | ||
| + | } | ||
| + | |||
| + | if (!levelRequirementMet(tree, | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | if (level === 4 && !level4Allowed(tree)) { | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | return true; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function getLockReason(row) { | ||
| + | |||
| + | const tree = row.dataset.cat; | ||
| + | const level = parseInt(row.dataset.niv, | ||
| + | |||
| + | if (level === 1) { | ||
| + | return ""; | ||
| + | } | ||
| + | |||
| + | if (level === 2 && countLevel(tree, | ||
| + | return " | ||
| + | } | ||
| + | |||
| + | if (level === 3 && countLevel(tree, | ||
| + | return " | ||
| + | } | ||
| + | |||
| + | if (level === 4) { | ||
| + | |||
| + | if (countLevel(tree, | ||
| + | return " | ||
| + | } | ||
| + | |||
| + | if (!level4Allowed(tree)) { | ||
| + | return "Un niveau 4 est déjà appris dans un autre arbre."; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return ""; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function setupNormalSkills() { | ||
| + | |||
| + | tbody.querySelectorAll( | ||
| + | ' | ||
| + | ).forEach(cb => { | ||
| + | |||
| + | cb.addEventListener(" | ||
| + | |||
| + | if (this.checked) { | ||
| + | |||
| + | const row = this.closest(" | ||
| + | |||
| + | if (!canLearn(row)) { | ||
| + | |||
| + | this.checked = false; | ||
| + | |||
| + | showWarning( | ||
| + | getLockReason(row) | ||
| + | ); | ||
| + | |||
| + | updateAll(); | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | if (getUsedPoints() > MAX_POINTS) { | ||
| + | |||
| + | this.checked = false; | ||
| + | |||
| + | showWarning( | ||
| + | "Vous ne pouvez pas dépasser " + | ||
| + | MAX_POINTS + | ||
| + | " points de compétences." | ||
| + | ); | ||
| + | |||
| + | updateAll(); | ||
| + | return; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | hideWarning(); | ||
| + | updateAll(); | ||
| + | }); | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function setupRepeatableSkills() { | ||
| + | |||
| + | tbody.querySelectorAll( | ||
| + | ' | ||
| + | ).forEach(row => { | ||
| + | |||
| + | const plus = row.querySelector(" | ||
| + | const minus = row.querySelector(" | ||
| + | |||
| + | plus.addEventListener(" | ||
| + | |||
| + | const current = getSkillCount(row); | ||
| + | |||
| + | /* | ||
| + | * Vérification du prérequis de niveau. | ||
| + | * | ||
| + | * Important : | ||
| + | * pour une compétence répétable, | ||
| + | * acquisition doit également respecter les | ||
| + | * prérequis de son niveau. | ||
| + | */ | ||
| + | if (!levelRequirementMet( | ||
| + | row.dataset.cat, | ||
| + | parseInt(row.dataset.niv, | ||
| + | )) { | ||
| + | |||
| + | showWarning( | ||
| + | getLockReason(row) | ||
| + | ); | ||
| + | |||
| + | return; | ||
| + | } | ||
| + | |||
| + | /* | ||
| + | * Pour les niveaux 4 : | ||
| + | * même règle que pour les autres compétences. | ||
| + | */ | ||
| + | if ( | ||
| + | parseInt(row.dataset.niv, | ||
| + | !level4Allowed(row.dataset.cat) | ||
| + | ) { | ||
| + | |||
| + | showWarning( | ||
| + | "Un niveau 4 est déjà appris dans un autre arbre." | ||
| + | ); | ||
| + | |||
| + | return; | ||
| + | } | ||
| + | |||
| + | /* | ||
| + | * Vérification du nombre maximal de points. | ||
| + | */ | ||
| + | if (getUsedPoints() >= MAX_POINTS) { | ||
| + | |||
| + | showWarning( | ||
| + | "Vous ne pouvez pas dépasser " + | ||
| + | MAX_POINTS + | ||
| + | " points de compétences." | ||
| + | ); | ||
| + | |||
| + | return; | ||
| + | } | ||
| + | |||
| + | row.querySelector(" | ||
| + | current + 1; | ||
| + | |||
| + | hideWarning(); | ||
| + | updateAll(); | ||
| + | }); | ||
| + | |||
| + | |||
| + | minus.addEventListener(" | ||
| + | |||
| + | const current = getSkillCount(row); | ||
| + | |||
| + | if (current <= 0) { | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | row.querySelector(" | ||
| + | current - 1; | ||
| + | |||
| + | hideWarning(); | ||
| + | updateAll(); | ||
| + | }); | ||
| + | |||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | MANA → CAPACITE DE SORTS | ||
| + | ========================================================= */ | ||
| + | |||
| + | const spellCapacity = { | ||
| + | 1: " | ||
| + | 2: " | ||
| + | 3: " | ||
| + | 4: "Grand Mage", | ||
| + | 5: " | ||
| + | }; | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Nombre de places de sorts disponibles pour un niveau. | ||
| + | */ | ||
| + | function getSpellCapacity(level) { | ||
| + | |||
| + | const requiredSkill = spellCapacity[level]; | ||
| + | |||
| + | if (!requiredSkill) { | ||
| + | return 0; | ||
| + | } | ||
| + | |||
| + | const row = Array.from( | ||
| + | tbody.querySelectorAll( | ||
| + | ' | ||
| + | ) | ||
| + | ).find(r => | ||
| + | r.dataset.repeatName === requiredSkill | ||
| + | ); | ||
| + | |||
| + | if (!row) { | ||
| + | return 0; | ||
| + | } | ||
| + | |||
| + | const acquisitions = getSkillCount(row); | ||
| + | |||
| + | if (level === 5) { | ||
| + | return acquisitions * 2; | ||
| + | } | ||
| + | |||
| + | return acquisitions * 3; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Nombre de sorts effectivement sélectionnés | ||
| + | * pour un niveau donné. | ||
| + | */ | ||
| + | function getSelectedSpells(level) { | ||
| + | |||
| + | return Array.from( | ||
| + | tbody.querySelectorAll( | ||
| + | `tr[data-cat=" | ||
| + | ) | ||
| + | ).filter(row => { | ||
| + | |||
| + | const checkbox = row.querySelector(" | ||
| + | |||
| + | return checkbox && checkbox.checked; | ||
| + | |||
| + | }).length; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Vérifie si un sort peut être sélectionné. | ||
| + | */ | ||
| + | function canLearnSpell(row) { | ||
| + | |||
| + | const level = parseInt(row.dataset.niv, | ||
| + | |||
| + | const capacity = getSpellCapacity(level); | ||
| + | const selected = getSelectedSpells(level); | ||
| + | |||
| + | return selected <= capacity; | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Configure les cases des sorts. | ||
| + | */ | ||
| + | function setupSpells() { | ||
| + | |||
| + | tbody.querySelectorAll( | ||
| + | ' | ||
| + | ).forEach(cb => { | ||
| + | |||
| + | cb.addEventListener(" | ||
| + | |||
| + | const row = this.closest(" | ||
| + | |||
| + | if (!this.checked) { | ||
| + | |||
| + | updateAll(); | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | if (!canLearnSpell(row)) { | ||
| + | |||
| + | this.checked = false; | ||
| + | |||
| + | const level = | ||
| + | parseInt(row.dataset.niv, | ||
| + | |||
| + | const capacity = | ||
| + | getSpellCapacity(level); | ||
| + | |||
| + | if (capacity === 0) { | ||
| + | |||
| + | showWarning( | ||
| + | "Vous ne possédez pas la compétence Mana nécessaire pour apprendre des sorts de niveau " + | ||
| + | level + | ||
| + | " | ||
| + | ); | ||
| + | |||
| + | } else { | ||
| + | |||
| + | showWarning( | ||
| + | "Vous avez atteint votre capacité de sorts de niveau " + | ||
| + | level + | ||
| + | " (" + | ||
| + | capacity + | ||
| + | " sort(s))." | ||
| + | ); | ||
| + | } | ||
| + | |||
| + | updateAll(); | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | hideWarning(); | ||
| + | updateAll(); | ||
| + | }); | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | MISE A JOUR VISUELLE | ||
| + | ========================================================= */ | ||
| + | |||
| + | function updatePoints() { | ||
| + | |||
| + | points.innerText = getUsedPoints(); | ||
| + | |||
| + | if (getUsedPoints() >= MAX_POINTS) { | ||
| + | points.style.color = " | ||
| + | } else { | ||
| + | points.style.color = ""; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Ajoute / retire l' | ||
| + | */ | ||
| + | function updateLocks() { | ||
| + | |||
| + | tbody.querySelectorAll(" | ||
| + | |||
| + | /* | ||
| + | * Les sorts sont gérés séparément par updateSpellRows(). | ||
| + | */ | ||
| + | if (row.dataset.cat === " | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | const level = parseInt(row.dataset.niv, | ||
| + | const tree = row.dataset.cat; | ||
| + | |||
| + | /* | ||
| + | * Les compétences Mana répétables sont gérées | ||
| + | * uniquement avec leurs boutons + / -. | ||
| + | */ | ||
| + | if (row.dataset.repeatable === " | ||
| + | |||
| + | let locked = false; | ||
| + | |||
| + | if (!levelRequirementMet(tree, | ||
| + | locked = true; | ||
| + | } | ||
| + | |||
| + | if ( | ||
| + | level === 4 && | ||
| + | !level4Allowed(tree) | ||
| + | ) { | ||
| + | locked = true; | ||
| + | } | ||
| + | |||
| + | row.classList.toggle( | ||
| + | " | ||
| + | locked | ||
| + | ); | ||
| + | |||
| + | return; | ||
| + | } | ||
| + | |||
| + | /* | ||
| + | * Compétences normales | ||
| + | */ | ||
| + | const locked = | ||
| + | !levelRequirementMet(tree, | ||
| + | ( | ||
| + | level === 4 && | ||
| + | !level4Allowed(tree) | ||
| + | ); | ||
| + | |||
| + | row.classList.toggle( | ||
| + | " | ||
| + | locked | ||
| + | ); | ||
| + | |||
| + | const checkbox = row.querySelector(" | ||
| + | |||
| + | if (checkbox) { | ||
| + | |||
| + | /* | ||
| + | * Une compétence déjà sélectionnée doit toujours | ||
| + | * pouvoir être décochée, même si on est à 15 points. | ||
| + | */ | ||
| + | checkbox.disabled = | ||
| + | locked || | ||
| + | ( | ||
| + | !checkbox.checked && | ||
| + | getUsedPoints() >= MAX_POINTS | ||
| + | ); | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Mise à jour de l' | ||
| + | */ | ||
| + | function updateRepeatButtons() { | ||
| + | |||
| + | tbody.querySelectorAll( | ||
| + | ' | ||
| + | ).forEach(row => { | ||
| + | |||
| + | const count = getSkillCount(row); | ||
| + | |||
| + | const minus = row.querySelector(" | ||
| + | const plus = row.querySelector(" | ||
| + | |||
| + | /* | ||
| + | * Le bouton - est disponible dès qu'au moins | ||
| + | * une acquisition existe. | ||
| + | */ | ||
| + | minus.disabled = count <= 0; | ||
| + | |||
| + | /* | ||
| + | * Le bouton + dépend : | ||
| + | * - du nombre maximal de points | ||
| + | * - du prérequis de niveau | ||
| + | * - de la règle des niveaux 4 | ||
| + | */ | ||
| + | const tree = row.dataset.cat; | ||
| + | const level = parseInt(row.dataset.niv, | ||
| + | |||
| + | let canAdd = true; | ||
| + | |||
| + | if (getUsedPoints() >= MAX_POINTS) { | ||
| + | canAdd = false; | ||
| + | } | ||
| + | |||
| + | if (!levelRequirementMet(tree, | ||
| + | canAdd = false; | ||
| + | } | ||
| + | |||
| + | if ( | ||
| + | level === 4 && | ||
| + | !level4Allowed(tree) | ||
| + | ) { | ||
| + | canAdd = false; | ||
| + | } | ||
| + | |||
| + | plus.disabled = !canAdd; | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* | ||
| + | * Affichage de la capacité de sorts. | ||
| + | */ | ||
| + | function updateSpellRows() { | ||
| + | |||
| + | tbody.querySelectorAll( | ||
| + | ' | ||
| + | ).forEach(row => { | ||
| + | |||
| + | const level = | ||
| + | parseInt(row.dataset.niv, | ||
| + | |||
| + | const capacity = | ||
| + | getSpellCapacity(level); | ||
| + | |||
| + | const selected = | ||
| + | getSelectedSpells(level); | ||
| + | |||
| + | const checkbox = | ||
| + | row.querySelector(" | ||
| + | |||
| + | const locked = | ||
| + | capacity === 0 || | ||
| + | ( | ||
| + | !checkbox.checked && | ||
| + | selected >= capacity | ||
| + | ); | ||
| + | |||
| + | row.classList.toggle( | ||
| + | " | ||
| + | locked | ||
| + | ); | ||
| + | |||
| + | checkbox.disabled = | ||
| + | locked && !checkbox.checked; | ||
| + | |||
| + | /* | ||
| + | * Affiche la capacité sur la première cellule | ||
| + | * uniquement si nécessaire. | ||
| + | */ | ||
| + | let info = | ||
| + | row.querySelector(" | ||
| + | |||
| + | if (!info) { | ||
| + | |||
| + | info = document.createElement(" | ||
| + | |||
| + | info.className = | ||
| + | " | ||
| + | |||
| + | row.cells[0].appendChild(info); | ||
| + | } | ||
| + | |||
| + | info.innerText = | ||
| + | capacity > 0 | ||
| + | ? `(${selected}/ | ||
| + | : " | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function showWarning(message) { | ||
| + | |||
| + | warning.innerText = message; | ||
| + | warning.style.display = " | ||
| + | } | ||
| + | |||
| + | function hideWarning() { | ||
| + | |||
| + | warning.innerText = ""; | ||
| + | warning.style.display = " | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | function filter() { | ||
| + | |||
| + | const cat = filterCat.value; | ||
| + | const eff = filterEffect.value; | ||
| + | const type = filterType.value; | ||
| + | const s = search.value.toLowerCase(); | ||
| + | |||
| + | tbody.querySelectorAll(" | ||
| + | |||
| + | const txt = | ||
| + | row.innerText.toLowerCase(); | ||
| + | |||
| + | /* | ||
| + | * Les sorts appartiennent à leur propre filtre | ||
| + | * " | ||
| + | */ | ||
| + | const rowCat = row.dataset.cat || ""; | ||
| + | |||
| + | const categoryOK = | ||
| + | cat === " | ||
| + | rowCat === cat; | ||
| + | |||
| + | const effectOK = | ||
| + | eff === " | ||
| + | ? true | ||
| + | : ( | ||
| + | rowCat === " | ||
| + | (row.dataset.effect || "" | ||
| + | ); | ||
| + | |||
| + | const typeOK = | ||
| + | type === " | ||
| + | (row.dataset.type || "" | ||
| + | |||
| + | const searchOK = | ||
| + | txt.includes(s); | ||
| + | |||
| + | row.style.display = | ||
| + | categoryOK && | ||
| + | effectOK && | ||
| + | typeOK && | ||
| + | searchOK | ||
| + | ? "" | ||
| + | : " | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | filterCat.onchange = filter; | ||
| + | filterEffect.onchange = filter; | ||
| + | filterType.onchange = filter; | ||
| + | search.oninput = filter; | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | TRI | ||
| + | ========================================================= */ | ||
| + | |||
| + | function sortTable(n) { | ||
| + | |||
| + | const rows = | ||
| + | Array.from( | ||
| + | tbody.querySelectorAll(" | ||
| + | ); | ||
| + | |||
| + | const asc = | ||
| + | document.body.dataset.sort !== " | ||
| + | |||
| + | rows.sort((a, | ||
| + | |||
| + | let x = | ||
| + | a.cells[n].innerText.toLowerCase(); | ||
| + | |||
| + | let y = | ||
| + | b.cells[n].innerText.toLowerCase(); | ||
| + | |||
| + | return asc | ||
| + | ? x.localeCompare( | ||
| + | y, | ||
| + | undefined, | ||
| + | { numeric: true } | ||
| + | ) | ||
| + | : y.localeCompare( | ||
| + | x, | ||
| + | undefined, | ||
| + | { numeric: true } | ||
| + | ); | ||
| + | }); | ||
| + | |||
| + | document.body.dataset.sort = | ||
| + | asc ? " | ||
| + | |||
| + | rows.forEach(row => | ||
| + | tbody.appendChild(row) | ||
| + | ); | ||
| + | |||
| + | /* | ||
| + | * Le tri ne doit pas casser les états. | ||
| + | */ | ||
| + | updateAll(); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | MISE A JOUR GENERALE | ||
| + | ========================================================= */ | ||
| + | |||
| + | function updateAll() { | ||
| + | |||
| + | updatePoints(); | ||
| + | updateLocks(); | ||
| + | updateRepeatButtons(); | ||
| + | updateSpellRows(); | ||
| + | filter(); | ||
| + | } | ||
| + | |||
| + | |||
| + | /* ========================================================= | ||
| + | | ||
| + | ========================================================= */ | ||
| + | |||
| + | setupNormalSkills(); | ||
| + | setupRepeatableSkills(); | ||
| + | setupSpells(); | ||
| + | |||
| + | document.getElementById(" | ||
| + | .addEventListener(" | ||
| + | |||
| + | updateAll(); | ||
| + | |||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
reg.1791278630.txt.gz · Dernière modification : 2026/10/06 11:23 de nanaki
