ajout du handicap de rareté

This commit is contained in:
rwanoux
2024-11-20 12:08:03 +01:00
parent 6568eb067f
commit 80277f822f
14 changed files with 160 additions and 83 deletions
+4 -1
View File
@@ -38,13 +38,16 @@
- [ ] gérer les seuils auto si compétence non maitrisée
### le combat
faut s'y pencher
- [ ] modifier la difficulté en fonction de l'état du combatant /offensif/actif/passif/
### les items
- [X] passer le type d'arme en select/options
- [X] ajouter handicap de rareté
- [ ] ajouter pour items Item "competence nécessaire"
- [-] gérer les rolls d'items dans le chat
- [-] repasser sur les différents itemTypes et sheets
- [X] verifier le selector de traits (trait pratique cf : msg pretre)
- [X] construire une selecteur de traits, traits= CONFIG.VERMINE.traits
traits:[
key:{
+1 -6
View File
@@ -10,7 +10,7 @@ export class VermineItemSheet extends ItemSheet {
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["vermine2047", "sheet", "item"],
width: "fit-content",
width: 450,
height: "auto",
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }]
});
@@ -19,11 +19,6 @@ export class VermineItemSheet extends ItemSheet {
/** @override */
get template() {
const path = "systems/vermine2047/templates/item";
// Return a single sheet for all item types.
// return `${path}/item-sheet.html`;
// Alternatively, you could use the following return statement to do a
// unique item sheet by type, like `weapon-sheet.html`.
return `${path}/item-${this.item.type}-sheet.html`;
}
+4 -6
View File
@@ -156,17 +156,14 @@ export class TraitSelector extends Application {
}
async validateTraits(html) {
let checks = html.find("input.trait-selector");
let val = html.find("input.trait-value");
for (let inp of [...checks, val]) {
for (let inp of checks) {
if (this.targetItem.system.traits[inp.dataset.trait]) {
if (inp.type == "checkbox") {
inp.checked = true
}
if (inp.type == "value") {
inp.value = this.targetItem.system.traits[inp.dataset.trait].value
}
}
}
}
await this.render(true)
}
async onChangeInput(ev) {
@@ -195,5 +192,6 @@ export class TraitSelector extends Application {
} else {
el.closest("label").querySelector('.trait-selector').checked = false;
}
this.render(true)
}
}
+4 -3
View File
@@ -224,8 +224,8 @@ VERMINE.traits = {
description: "Lobjet a une portée utile ou maximale de(n) mètres.Les armes de distance disposent de plusieurs Portées, qui peuvent être fixes ou modifiées par la Vigueur de lattaquant, notamment pour les armes de tir ou de lancer.",
value: 1
},
"pratique.": {
name: "Pratique.",
"pratique": {
name: "Pratique",
description: "Le matériel offre une prise en main exceptionnelle, une maniabilité étonnante, une simplicité dusage remarquable.Utiliser un tel matériel pour une action adéquate accorde un Bonus de 2D au lieu de 1D.Rechercher ce Trait sur un matériel compte comme deux critères de Rareté à lui seul.De plus les réparations, améliorations et fabrications de matériel avec ce Trait souffrent de(I) Handicap en plus de ceux applicables normalement.",
value: 0
},
@@ -251,4 +251,5 @@ VERMINE.damageTypes = [
"lame",
"feu",
"balle"
]
];
+20 -18
View File
@@ -442,30 +442,13 @@ export class VermineCombatTracker extends CombatTracker {
return context;
}
for (let [i, combatant] of context.combat.turns.entries()) {
context.turns[i].attitude = combatant.getFlag("world", "attitude");
context.turns[i].isPlayer = combatant.actor.type == "character";
context.turns[i].isNpc = combatant.actor.type == "npc";
context.turns[i].isCreature = combatant.actor.type == "creature";
}
return context;
}
activateListeners(html) {
super.activateListeners(html);
html.find("[data-attitude]").click(this._setStatut.bind(this));
html.find("[data-control='rollInitiative']").click(this.rollVermineInitiative.bind(this))
}
async rollVermineInitiative(ev) {
ev.preventDefault();
ev.stopPropagation();
const btn = ev.currentTarget;
const li = btn.closest(".combatant");
const combat = this.viewed;
const combatant = combat.combatants.get(li.dataset.combatantId);
console.log(combatant)
}
/**
@@ -489,4 +472,23 @@ export class VermineCombatTracker extends CombatTracker {
}
}
}
export class VermineCombatant extends Combatant {
constructor(data, context) {
super(data, context);
this.setDefaultAttitude();
console.log(this)
}
setDefaultAttitude() {
this.attitude = this.token.flags.world?.attitude || "active"
}
_getInitiativeFormula() {
console.log(this);
return String(CONFIG.Combat.initiative.formula || game.system.initiative);
}
}
+20
View File
@@ -41,6 +41,8 @@ export const preloadHandlebarsTemplates = async function () {
//items partials
"systems/vermine2047/templates/item/partials/damages.html",
"systems/vermine2047/templates/item/partials/traits.html",
"systems/vermine2047/templates/item/partials/header.hbs",
"systems/vermine2047/templates/item/partials/physicalItems.hbs",
]);
};
@@ -84,6 +86,24 @@ export const registerHandlebarsHelpers = function () {
Handlebars.registerHelper('toLowerCase', function (str) {
return str.toLowerCase();
});
Handlebars.registerHelper('romanNumber', function (numb) {
switch (numb) {
case 0:
return '';
case 1:
return 'I';
case 2:
return 'II';
case 3:
return 'III';
case 4:
return 'IV';
case 5:
return 'V';
default:
throw new Error('Le handicap rareté doit être comprise entre 0 et 5');
}
});
// search translation with variables
Handlebars.registerHelper('smarttl', function (arrayLabel, objectLabel, options) {
+3 -1
View File
@@ -13,7 +13,7 @@ import { VermineItem } from "./documents/item.mjs";
import { VermineItemSheet } from "./sheets/item-sheet.mjs";
import { VermineUtils } from "./system/roll.mjs";
import { VermineCombat, VermineCombatTracker } from "./system/fight.mjs";
import { VermineCombat, VermineCombatant, VermineCombatTracker } from "./system/fight.mjs";
// Import helper/utility classes and constants.
import { preloadHandlebarsTemplates, registerHandlebarsHelpers } from "./system/handlebars-manager.mjs";
@@ -49,7 +49,9 @@ Hooks.once('init', async function () {
// Define custom Document classes
CONFIG.Actor.documentClass = VermineActor;
CONFIG.Item.documentClass = VermineItem;
CONFIG.ui.combat = VermineCombatTracker;
CONFIG.Combatant.documentClass = VermineCombatant;
// Register sheet application classes
Actors.unregisterSheet("core", ActorSheet);
+2
View File
@@ -4,6 +4,8 @@
.window-app {
font-family: "Roboto", sans-serif;
box-shadow: 0px 0px 30px rgb(69, 78, 44);
}
.rollable:hover,
+4 -1
View File
@@ -485,7 +485,10 @@
"templates": {
"base": {
"description": "",
"rarity": 3,
"rarity": {
"value": 3,
"handicap": 0
},
"reliability": 3,
"handicap": 0,
"quantity": 1,
+21 -14
View File
@@ -5,23 +5,30 @@
<div class="item-rarity">{{ localize 'VERMINE.rarity'}}</div>
<div class="item-reliability">{{ localize 'VERMINE.reliability'}}</div>
<div class="item-controls">
<a class="item-control item-create" title="Create item" data-type="vehicle"><i class="fas fa-plus"></i></a>
<a class="item-control item-create" title="Create item"
data-type="vehicle"><i class="fas fa-plus"></i></a>
</div>
</li>
{{#each vehicles as |item id|}}
<li class="item flexrow flex-group-center" data-item-id="{{item._id}}">
<div class="item-name" style="flex:4;">
<div class="item-image">
<a class="item-control item-edit" data-roll-type="item"><img src="{{item.img}}" title="{{item.name}}" width="24" height="24"/></a>
</div>
<a class="item-control item-edit" title="Edit Item">{{item.name}}</a>
<li class="item flexrow flex-group-center" data-item-id="{{item._id}}">
<div class="item-name" style="flex:4;">
<div class="item-image">
<a class="item-control item-edit" data-roll-type="item"><img
src="{{item.img}}" title="{{item.name}}" width="24"
height="24" /></a>
</div>
<p><a class="item-control item-edit" title="Edit Item">{{item.system.mobility}}</a></p>
<p><a class="item-control item-edit" title="Edit Item">{{item.system.rarity}}</a></p>
<p><a class="item-control item-edit" title="Edit Item">{{item.system.reliability}}</a></p>
<div class="item-controls">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
<a class="item-control item-edit" title="Edit Item">{{item.name}}</a>
</div>
<p><a class="item-control item-edit"
title="Edit Item">{{item.system.mobility}}</a></p>
<p><a class="item-control item-edit"
title="Edit Item">{{item.system.rarity.value}}</a></p>
<p><a class="item-control item-edit"
title="Edit Item">{{item.system.reliability}}</a></p>
<div class="item-controls">
<a class="item-control item-delete" title="Delete Item"><i
class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ol>
-6
View File
@@ -1,17 +1,11 @@
<div class="trait choose grid grid-2col" style="padding:5px;">
{{#each traits as |trait ind|}}
{{log @root.item}}
{{log trait}}
{{log ind}}
<div class="form-group" data-trait="{{ind}}">
<label>
<input type="checkbox" class="trait-selector"
data-trait="{{ind}}" />
{{trait.name}}
</label>
<p class="hint">{{trait.description}}</p>
</div>
{{/each}}
+17 -27
View File
@@ -1,13 +1,12 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img class="profile-img" src="{{item.img}}" data-edit="img" title="{{item.name}}"/>
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{item.name}}" placeholder="Name"/></h1>
</div>
</header>
{{log this}}
{{> "systems/vermine2047/templates/item/partials/header.hbs"}}
<section class="sheet-body">
{{> "systems/vermine2047/templates/item/partials/traits.html"}}
<h4 class="flexrow">
<div class="resource align-center flexcol">
@@ -32,35 +31,26 @@
<input type="checkbox" data-tooltip="ajouter la vigueur" name="system.damage.addVigor" {{#if system.damage.addVigor}} checked {{/if}}>
</span>
</div>
<input type="text" placeholder="type" name="system.damage.type" value="{{system.damage.type}}" data-dtype="Text" list="damageType"/>
<datalist id="damageType">
<option value="choc">choc</option>
<option value="lame">lame</option>
<option value="feu">feu</option>
<option value="balle">balle</option>
</datalist>
<select name="system.damage.type">
<option value="0">type</option>
{{#each config.damageTypes as |label index|}}
<option value="{{label}}" {{#ife @root.system.damage.type label}} selected {{/ife}}>
{{label}}
</option>
{{/each}}
</select>
</div>
</div>
<div class="resource align-center flexcol">
<label class="resource-label">{{ localize "VERMINE.ammo"}}</label>
<div class="hexa"><input type="number" name="system.ammo" value="{{system.ammo}}" data-dtype="Number"/></div>
</div>
<div class="resource align-center flexcol">
<label class="resource-label">{{ localize "VERMINE.rarity"}}</label>
<div class="hexa"><input type="number" name="system.rarity" value="{{system.rarity}}" data-dtype="Number"/></div>
</div>
<div class="resource align-center flexcol">
<label class="resource-label">{{ localize "VERMINE.reliability"}}</label>
<div class="hexa"><input type="number" name="system.reliability" value="{{system.reliability}}" data-dtype="Number"/></div>
</div>
</h4>
<h2>description</h2>
{{editor system.description target="system.description" rollData=rollData button=true owner=owner editable=editable}}
{{> "systems/vermine2047/templates/item/partials/damages.html"}}
{{> "systems/vermine2047/templates/item/partials/physicalItems.hbs"}}
</form>
+16
View File
@@ -0,0 +1,16 @@
<header class="sheet-header">
<img
class="profile-img"
src="{{item.img}}"
data-edit="img"
title="{{item.name}}" />
<div class="header-fields">
<h1 class="charname"><input
name="name"
type="text"
value="{{item.name}}"
placeholder="Name" /></h1>
</div>
</header>
+44
View File
@@ -0,0 +1,44 @@
<h4 class="physicalItem flexrow align-center">
<div class="resource align-center flexcol">
<label class="resource-label">{{ localize "VERMINE.rarity"}}</label>
<div class="hexa">
<input type="number" name="system.rarity.value"
value="{{system.rarity.value}}" data-dtype="Number" />
</div>
<select name="system.rarity.handicap">
<option value="0">handicap 0</option>
{{#repeat 5 1 index}}
<option value="{{@index }}" {{#ife @index system.rarity.handicap}}
selected {{/ife}}>{{romanNumber @index}}</option>
{{/repeat}}
</select>
</div>
<div class="resource align-center flexcol">
<label class="resource-label">{{ localize
"VERMINE.reliability"}}</label>
<div class="hexa"><input type="number" name="system.reliability"
value="{{system.reliability}}" data-dtype="Number" /></div>
</div>
<div class="resource align-center flexcol">
<label class="resource-label">{{ localize
"VERMINE.quantity"}}</label>
<div class="hexa"><input type="number" name="system.quantity"
value="{{system.quantity}}" data-dtype="Number" /></div>
</div>
<div class="resource align-center flexcol">
<label class="resource-label">{{ localize
"VERMINE.weight"}}</label>
<div class="hexa"><input type="number" name="system.weight"
value="{{system.weight}}" data-dtype="Number" /></div>
</div>
</h4>
<h2>description</h2>
{{editor system.description target="system.description" rollData=rollData
button=true owner=owner editable=editable}}
{{> "systems/vermine2047/templates/item/partials/damages.html"}}