Compare commits

..

6 Commits

Author SHA1 Message Date
2dff59c829 Fix pv value pour PNJ 2023-04-24 15:59:07 +02:00
55a2a8e3c3 Fix malus 2023-04-23 23:13:31 +02:00
2da1f56a91 Ajout XP + rework fees 2023-04-23 17:13:08 +02:00
66bd9dd2c8 Ajout XP + rework fees 2023-04-23 17:12:43 +02:00
15427f3747 Gestion des attaques ciblées 2023-04-11 13:29:04 +02:00
577eccbbd3 Gestion des attaques ciblées 2023-04-11 13:26:51 +02:00
13 changed files with 175 additions and 54 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.history/

View File

@@ -1,8 +1,8 @@
# Système Foundry pour Hawkmoon (French RPG, Titam France/Sombres Projets)
# Système Foundry pour Les Héritiers (French RPG, Titam France/Sombres Projets)
## EN
Unofficial system for Hawkmoon (French version from Titam France).
Unofficial system for Les Heritiers (from Titam France).
This system has been approved by Département des Sombres Projets ( http://www.titam-france.fr/ ), thanks !
@@ -10,7 +10,7 @@ Books are mandatory to play and are available at : http://www.titam-france.fr
## FR
Système non-officiel pour le JDR Hawkmoon (Titam France/Sombres Projets).
Système non-officiel pour le JDR Les Héritiers (Titam France/Sombres Projets).
Ce système a été autorisé par le Département des Sombres Projets ( http://www.titam-france.fr/ ), merci à eux !
@@ -18,7 +18,7 @@ Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http:/
# Credits
Hawkmoon, le jeu de rôle du Troisième Millénaire, is a property of Titam France/Sombres Projets.
Les Héritiers, is a property of Titam France/Sombres Projets.
# Developmement
@@ -26,4 +26,4 @@ LeRatierBretonnien
# Tests, icones et saisie des données
Prêtre, Blondin, Zechrub/Chris, Kyllian, Lightbringer
Prêtre, Carter

View File

@@ -70,6 +70,16 @@ export class HeritiersActor extends Actor {
return armes
}
/* -------------------------------------------- */
getOtherMeleeWeapons(excludeArme) {
let armes = []
for (let arme of this.items) {
if ( HeritiersUtility.isArmeMelee(arme) && arme.id != excludeArme._id) {
armes.push(this.prepareArme(arme))
}
}
return armes
}
/* -------------------------------------------- */
getMonnaies() {
return this.items.filter(it => it.type == "monnaie")
}
@@ -294,12 +304,12 @@ export class HeritiersActor extends Actor {
/* -------------------------------------------- */
getPvMalus() {
if (this.system.pv.value > 0) {
if (this.system.pv.value < this.system.pv.max / 2) {
return { name: "Santé", value: -1 }
}
if (this.system.pv.value < 5) {
return { name: "Santé", value: -2 }
}
if (this.system.pv.value < this.system.pv.max / 2) {
return { name: "Santé", value: -1 }
}
return { name: "Santé", value: 0 }
}
return { name: "Moribond(e)", value: -50 }
@@ -613,6 +623,7 @@ export class HeritiersActor extends Actor {
rollData.caracKey = key
rollData.arme = arme
rollData.mode = "arme"
rollData.armes = this.getOtherMeleeWeapons(arme)
if (rollData.defenderTokenId && arme.system.isMelee ) {
rollData.cacheDifficulte = true
}
@@ -634,6 +645,7 @@ export class HeritiersActor extends Actor {
rollData.caracKey = key
rollData.arme = duplicate(arme)
rollData.mode = "attaquebrutale"
rollData.armes = this.getOtherMeleeWeapons(arme)
rollData.rulesMalus.push({ name: "Attaque brutale", value: -2 } )
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)
@@ -650,6 +662,7 @@ export class HeritiersActor extends Actor {
rollData.carac = this.system.caracteristiques[key]
rollData.caracKey = key
rollData.arme = duplicate(arme)
rollData.armes = this.getOtherMeleeWeapons(arme)
rollData.mode = "attaquecharge"
let rollDialog = await HeritiersRollDialog.create(this, rollData)
rollDialog.render(true)

View File

@@ -93,6 +93,13 @@ export const HERITIERS_CONFIG = {
"30": "Divine"
},
attaqueCible: {
"none": "Aucune",
"membre": "Membre",
"main": "Main",
"tete": "Tête/Coeur"
},
categorieArme : {
"trait": "Arme de trait",
"poing": "Arme de poing",

View File

@@ -120,7 +120,7 @@ Hooks.once("ready", function () {
});
}
registerUsageCount('fvtt-les-heritiers')
registerUsageCount(game.system.id)
welcomeMessage()
// CSS patch for v9

View File

@@ -5,7 +5,7 @@ export class HeritiersRollDialog extends Dialog {
/* -------------------------------------------- */
static async create(actor, rollData) {
let options = { classes: ["HeritiersDialog"], width: 320, height: 'fit-content', 'z-index': 99999 };
let options = { classes: ["HeritiersDialog"], width: 420, height: 'fit-content', 'z-index': 99999 };
let html = await renderTemplate('systems/fvtt-les-heritiers/templates/roll-dialog-generic.html', rollData);
return new HeritiersRollDialog(actor, rollData, html, options);
@@ -119,6 +119,12 @@ export class HeritiersRollDialog extends Dialog {
html.find('#attaqueDos').change((event) => {
this.rollData.attaqueDos = event.currentTarget.checked
})
html.find('#bonus-attaque-seconde-arme').change((event) => {
this.rollData.secondeArme = String(event.currentTarget.value)
})
html.find('#attaque-cible').change((event) => {
this.rollData.attaqueCible = String(event.currentTarget.value)
})
}
}

View File

@@ -338,14 +338,31 @@ export class HeritiersUtility {
/* -------------------------------------------- */
static computeArmeDegats(rollData, actor) {
rollData.degatsArme = rollData.arme.system.degats + rollData.marge
if (rollData.arme.system.categorie == "lourde") {
rollData.degatsArme += actor.system.caracteristiques.for.value
if (rollData.attaqueDeuxArmes != 0 && rollData.secondeArme ) {
let secondeArme = actor.items.get(secondeArme)
if (secondeArme) {
rollData.degatsArme += secondeArme.system.degats
rollData.degatsArme += actor.system.caracteristiques.for.value
}
} else {
if (rollData.arme.system.categorie == "lourde") {
rollData.degatsArme += actor.system.caracteristiques.for.value
}
if (rollData.arme.system.categorie == "blanche" || rollData.arme.system.categorie == "improvise") {
rollData.degatsArme += Math.max(0, actor.system.caracteristiques.for.value - 2)
}
if (rollData.mode == "attaquecharge") {
rollData.degatsArme += 3
}
}
if (rollData.arme.system.categorie == "blanche" || rollData.arme.system.categorie == "improvise") {
rollData.degatsArme += Math.max(0, actor.system.caracteristiques.for.value - 2)
if (rollData.attaqueCible == "membre") {
rollData.degatsArme -= 2
}
if (rollData.mode == "attaquecharge") {
rollData.degatsArme += 3
if (rollData.attaqueCible == "main") {
rollData.degatsArme -= 3
}
if (rollData.attaqueCible == "tete") {
rollData.degatsArme *= 3
}
}
@@ -417,6 +434,7 @@ export class HeritiersUtility {
}
rollData.diceFormula += `+${ruleMalus}`
// Gestion bonus attaque à plusieurs
let bonusAttaque = rollData.bonusAttaquePlusieurs
if (rollData.attaqueDos) {
bonusAttaque = 2
@@ -426,6 +444,24 @@ export class HeritiersUtility {
}
rollData.diceFormula += `+${bonusAttaque}`
// Gestion attaque avec 2 armes
if (rollData.attaqueDeuxArmes != 0) {
rollData.diceFormula += `+${rollData.attaqueDeuxArmes}`
}
// Gestion des attaques ciblées
if (rollData.attaqueCible != "none") {
if ( rollData.attaqueCible == "membre") {
rollData.diceFormula += `-2`
}
if ( rollData.attaqueCible == "main") {
rollData.diceFormula += `-3`
}
if ( rollData.attaqueCible == "tete") {
rollData.diceFormula += `-6`
}
}
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
rollData.roll = myRoll
@@ -576,8 +612,11 @@ export class HeritiersUtility {
sdList: game.system.lesheritiers.config.seuilsDifficulte,
sdValue: -1,
bonusAttaquePlusieurs: 0,
attaqueDeuxArmes: 0,
attaqueDos: false,
bonusMalusContext: 0,
attaqueCible: "none",
config: game.system.lesheritiers.config,
rulesMalus : []
}
return rollData

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
{
"id": "fvtt-les-heritiers",
"description": "Les Héritiers pour FoundryVTT",
"version": "10.0.37",
"version": "10.1.3",
"authors": [
{
"name": "Uberwald/LeRatierBretonnien",
@@ -19,7 +19,7 @@
"gridUnits": "m",
"license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/raw/branch/master/system.json",
"download": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/archive/fvtt-les-heritiers-10.0.37.zip",
"download": "https://www.uberwald.me/gitea/public/fvtt-les-heritiers/archive/fvtt-les-heritiers-10.1.3.zip",
"languages": [
{
"lang": "fr",
@@ -122,7 +122,6 @@
"background": "systems/fvtt-les-heritiers/assets/ui/wallpaper_foundry2.webp",
"compatibility": {
"minimum": "10",
"verified": "10",
"maximum": "10"
"verified": "10"
}
}

View File

@@ -48,7 +48,7 @@
<input type="text" class="item-field-label-short" name="system.pv.value" value="{{system.pv.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.pv.max" value="{{system.pv.max}}" data-dtype="Number" />
<label class="item-field-label-short">Malus</label>
<input type="text" class="item-field-label-short" value="{{pvMalus}}" data-dtype="Number" disabled />
<input type="text" class="item-field-label-short" value="{{pvMalus.value}}" data-dtype="Number" disabled />
<span>&nbsp;&nbsp;</span>
<select class="item-field-label-medium" type="text" name="system.statutmasque" value="{{system.statutmasque}}" data-dtype="string">

View File

@@ -47,7 +47,7 @@
<input type="text" class="item-field-label-short" name="system.pv.value" value="{{system.pv.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.pv.max" value="{{system.pv.max}}" data-dtype="Number" />
<label class="item-field-label-short">Malus</label>
<input type="text" class="item-field-label-short" value="{{pvMalus}}" data-dtype="Number" disabled />
<input type="text" class="item-field-label-short" value="{{pvMalus.value}}" data-dtype="Number" disabled />
<span>&nbsp;&nbsp;</span>
<select class="item-field-label-medium" type="text" name="system.statutmasque" value="{{system.statutmasque}}" data-dtype="string">
@@ -632,8 +632,18 @@
<input type="text" class="" name="system.biodata.poidsdemasquee" value="{{system.biodata.poidsdemasquee}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">XP</label>
<input type="text" class="" name="system.experience.value" value="{{system.experience.value}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">XP pour tricher</label>
<input type="text" class="" name="system.experience.pourtricher" value="{{system.experience.pourtricher}}"
data-dtype="String" />
</li>
</ul>
</div>
</div>
</div>
</div>

View File

@@ -23,6 +23,14 @@
{{#if isSuccess}}
<li>Marge : {{marge}}</li>
<li>Degats de l'arme : {{degatsArme}}</li>
{{#if (eq attaqueCible "membre")}}
<li><strong>Cible un membre : La cible a -2 de malus sur ces actions avec ce membre (mouvement 2 si jambes)</strong></li>
{{/if}}
{{#if (eq attaqueCible "main")}}
<li><strong>Cible une main : La cible ne peut plus utiliser sa main</strong></li>
{{/if}}
{{#if isCriticalSuccess}}
<Li>Critique : Aubaine ou +2 aux dégats ci-dessus</li>
{{/if}}

View File

@@ -89,6 +89,44 @@
<span class="roll-dialog-label">Attaque dans le dos ?</span>
<input type="checkbox" class="item-field-label-short" id="attaqueDos" {{checked attaqueDos}}/>
</div>
<div class="flexrow">
<span class="roll-dialog-label">Attaque à deux armes </span>
<select class="roll-dialog-label" id="bonus-attaque-deux-armes" type="text" value="{{attaqueDeuxArmes}}"
data-dtype="Number">
{{#select attaqueDeuxArmes}}
<option value="0">Aucun</option>
<option value="-4">Deux armes à 1 main</option>
<option value="-2">Deux armes naturelles"</option>
<option value="-2">Avec spécialisation "Mauvaise Main"</option>
{{/select}}
</select>
</div>
<div class="flexrow">
<span class="roll-dialog-label">Seconde arme</span>
<select class="roll-dialog-label" id="bonus-attaque-seconde-arme" type="text" value="{{secondeArme}}"
data-dtype="String">
{{#select secondeArme}}
{{#each armes as |arme idx|}}
<option value="{{arme.id}}">{{arme.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
{{/if}}
{{#if arme}}
<li class="flexrow item">
<label class="roll-dialog-label">Ataque ciblée : </label>
<select class="roll-dialog-label" type="text" id="attaque-cible" value="{{attaqueCible}}" data-dtype="String">
{{#select attaqueCible}}
{{#each config.attaqueCible as |categ key|}}
<option value="{{key}}">{{categ}}</option>
{{/each}}
{{/select}}
</select>
</li>
{{/if}}
<div class="flexrow">