Zwergenhort revised

This commit is contained in:
LeFrique 2023-12-30 19:20:40 +01:00
parent 30eca09ae2
commit 944895dea1
12 changed files with 156 additions and 66 deletions

View File

@ -40,6 +40,7 @@
"midgard5.item-quantity": "Menge", "midgard5.item-quantity": "Menge",
"midgard5.item-onbody": "Am Körper", "midgard5.item-onbody": "Am Körper",
"midgard5.item-ismagic": "Ist Magisch", "midgard5.item-ismagic": "Ist Magisch",
"midgard5.item-wealth": "Vermögenswert",
"midgard5.actor-lp": "Lebenspunkte", "midgard5.actor-lp": "Lebenspunkte",
"midgard5.actor-lp-short": "LP", "midgard5.actor-lp-short": "LP",
@ -94,8 +95,11 @@
"midgard5.currency-gold": "Gold", "midgard5.currency-gold": "Gold",
"midgard5.currency-silver": "Silber", "midgard5.currency-silver": "Silber",
"midgard5.currency-copper": "Kupfer", "midgard5.currency-copper": "Kupfer",
"midgard5.hoard": "Hort", "midgard5.currency-wealth": "Vermögen in GS",
"midgard5.hoardNext": "Hort für nächsten Grad", "midgard5.currency-available": "verfügbares Vermögen",
"midgard5.hoard": "aktueller Hort",
"midgard5.hoardMin": "benötigter Mindesthort",
"midgard5.hoard-next": "Hort für nächsten Grad",
"midgard5.exp-overall": "Erfahrungsschatz", "midgard5.exp-overall": "Erfahrungsschatz",
"midgard5.exp-available": "Erfahrungspunkte", "midgard5.exp-available": "Erfahrungspunkte",
@ -218,6 +222,7 @@
"midgard5.defensive-weapon": "Verteidigungswaffe", "midgard5.defensive-weapon": "Verteidigungswaffe",
"midgard5.no-skill": "Keine Fertigkeit", "midgard5.no-skill": "Keine Fertigkeit",
"midgard5.magic": "magisch", "midgard5.magic": "magisch",
"midgard5.valuable": "Vermögenswert",
"midgard5.equipped": "Ausgerüstet", "midgard5.equipped": "Ausgerüstet",
"midgard5.active": "Aktiv", "midgard5.active": "Aktiv",
"midgard5.rangedWeapon": "Schusswaffe", "midgard5.rangedWeapon": "Schusswaffe",

View File

@ -88,6 +88,8 @@ export enum M5Stats {
DRINKING = "drinking", DRINKING = "drinking",
HOARD = "hoard", HOARD = "hoard",
HOARD_NEXT = "hoardNext", HOARD_NEXT = "hoardNext",
HOARD_MIN = "hoardMin",
WEALTH = "wealth",
} }
export enum M5ModType { export enum M5ModType {
@ -177,6 +179,8 @@ export interface M5CharacterCalculatedData {
drinkingFW: number; drinkingFW: number;
hoard: number; hoard: number;
hoardNext: number; hoardNext: number;
hoardMin: number;
wealth: number;
}; };
skillMods: {}; skillMods: {};
skills: { skills: {

View File

@ -1,7 +1,6 @@
import { M5Item } from "../items/M5Item"; import { M5Item } from "../items/M5Item";
import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned } from "../M5Base"; import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned } from "../M5Base";
import M5ModAggregate from "./M5ModAggregate"; import M5ModAggregate from "./M5ModAggregate";
export class M5Character extends Actor { export class M5Character extends Actor {
// constructor( // constructor(
// data: ConstructorParameters<typeof foundry.documents.BaseActor>[0], // data: ConstructorParameters<typeof foundry.documents.BaseActor>[0],
@ -144,8 +143,10 @@ export class M5Character extends Actor {
ret.stats.perceptionFW = 6; ret.stats.perceptionFW = 6;
ret.stats.drinking = this.modResult(0); ret.stats.drinking = this.modResult(0);
ret.stats.drinkingFW = Math.floor(ret.attributes.ko.value / 10); ret.stats.drinkingFW = Math.floor(ret.attributes.ko.value / 10);
ret.stats.hoard = M5Character.hoardFromExp(data.es); ret.stats.hoardMin = M5Character.levelThreshold.at (ret.level - 1)/2;
ret.stats.hoardNext = M5Character.hoardNextFromExp(data.es); ret.stats.hoardNext = M5Character.levelThreshold.at (ret.level)/2;
ret.stats.wealth = data.info.gold + data.info.silver/10 + data.info.copper/100 - (data.info.race === "Zwerg" ? (ret.stats.hoardMin) : 0);
ret.stats.hoard = ret.stats.wealth + (data.info.race === "Zwerg" ? (ret.stats.hoardMin) : 0);
if (!skip?.mods) { if (!skip?.mods) {
const aggregate = new M5ModAggregate(data, ret); const aggregate = new M5ModAggregate(data, ret);
@ -173,7 +174,13 @@ export class M5Character extends Actor {
let label = item.name; let label = item.name;
if (item.system.magic) { if (item.system.magic) {
label += "*"; label += "*";
};
if (item.system.valuable) {
label += "€";
ret.stats.wealth += item.system.value || 0;
ret.stats.hoard += item.system.value || 0;
} }
let rollable = false; let rollable = false;
// console.log(item.system.rolls.formulas.map((p) => p.enabled)); // console.log(item.system.rolls.formulas.map((p) => p.enabled));
@ -183,9 +190,11 @@ export class M5Character extends Actor {
break; break;
} }
} }
ret.gear.items[item.id] = { ret.gear.items[item.id] = {
label: label, label: label,
magic: item.system.magic, magic: item.system.magic,
valuable: item.system?.valuable,
calc: item.system.calc, calc: item.system.calc,
equipped: item.system?.equipped, equipped: item.system?.equipped,
value: item.system.value || 0, value: item.system.value || 0,
@ -193,6 +202,7 @@ export class M5Character extends Actor {
quantity: item.system.quantity || 0, quantity: item.system.quantity || 0,
rollExist: rollable, rollExist: rollable,
}; };
}); });
} }
@ -205,8 +215,8 @@ export class M5Character extends Actor {
let label = item.name; let label = item.name;
if (item.system.magic) { if (item.system.magic) {
label += "*"; label += "*";
} };
ret.gear.effects[item.id] = { ret.gear.effects[item.id] = {
label: label, label: label,
magic: item.system.magic, magic: item.system.magic,
@ -249,12 +259,19 @@ export class M5Character extends Actor {
(item.system.stats.damageBonus < 0 ? "" : "+") + (item.system.stats.damageBonus < 0 ? "" : "+") +
item.system.stats.damageBonus + item.system.stats.damageBonus +
")"; ")";
} };
if (item.system.valuable) {
label += "€";
ret.stats.wealth += item.system.value || 0;
ret.stats.hoard += item.system.value || 0;
}
ret.gear.weapons[item.id] = { ret.gear.weapons[item.id] = {
label: label, label: label,
skillId: item.system.skillId, skillId: item.system.skillId,
magic: item.system.magic, magic: item.system.magic,
valuable: item.system?.valuable,
value: item.system.value || 0,
calc: item.system.calc, calc: item.system.calc,
}; };
}); });
@ -269,12 +286,19 @@ export class M5Character extends Actor {
let label = item.name; let label = item.name;
if (item.system.magic) { if (item.system.magic) {
label += "*(" + (item.system.stats.defenseBonus < 0 ? "" : "+") + item.system.stats.defenseBonus + ")"; label += "*(" + (item.system.stats.defenseBonus < 0 ? "" : "+") + item.system.stats.defenseBonus + ")";
};
if (item.system.valuable) {
label += "€";
ret.stats.wealth += item.system.value || 0;
ret.stats.hoard += item.system.value || 0;
} }
ret.gear.defensiveWeapons[item.id] = { ret.gear.defensiveWeapons[item.id] = {
label: label, label: label,
skillId: item.system.skillId, skillId: item.system.skillId,
magic: item.system.magic, magic: item.system.magic,
valuable: item.system?.valuable,
value: item.system.value || 0,
calc: item.system.calc, calc: item.system.calc,
}; };
}); });
@ -289,11 +313,18 @@ export class M5Character extends Actor {
let label = item.name; let label = item.name;
if (item.system.magic) { if (item.system.magic) {
label += "*"; label += "*";
} };
if (item.system.valuable) {
label += "€";
ret.stats.wealth += item.system.value || 0;
ret.stats.hoard += item.system.value || 0;
}
ret.gear.armor[item.id] = { ret.gear.armor[item.id] = {
label: label, label: label,
magic: item.system.magic, magic: item.system.magic,
valuable: item.system?.valuable,
value: item.system.value || 0,
calc: item.system.calc, calc: item.system.calc,
equipped: item.system?.equipped, equipped: item.system?.equipped,
}; };
@ -374,21 +405,7 @@ export class M5Character extends Actor {
const ret = M5Character.levelThreshold.findIndex((val) => val > exp); const ret = M5Character.levelThreshold.findIndex((val) => val > exp);
return ret === -1 ? M5Character.levelThreshold.length : ret; return ret === -1 ? M5Character.levelThreshold.length : ret;
} }
static hoardFromExp(exp: number): number {
const ret = M5Character.levelThreshold.findIndex((val) => val > exp);
const hoard = Math.floor(exp / 2)
return hoard;
}
static hoardNextFromExp(exp: number): number {
const ret = M5Character.levelThreshold.findIndex((val) => val > exp);
const currentLevel = ret === -1 ? M5Character.levelThreshold.length : ret;
const nextLevelExp = M5Character.levelThreshold[currentLevel];
const hoardNext = (nextLevelExp /2);
return hoardNext;
}
static readonly defenseThreshold: Array<[number, number]> = [ static readonly defenseThreshold: Array<[number, number]> = [
[30, 18], [30, 18],
[25, 17], [25, 17],

View File

@ -66,19 +66,6 @@
font-weight: bold; font-weight: bold;
} }
.hoard {
text-align: center;
color: rgb(255, 255, 0);
font-weight: bold;
font-size: larger;
}
.hoardNext {
text-align: center;
color: rgb(255, 255, 255);
font-weight: bold;
font-size: medium;
}
table { table {
background-color: beige; background-color: beige;
} }

View File

@ -200,6 +200,10 @@
"equippable": false, "equippable": false,
"equipped": true "equipped": true
}, },
"valuable": {
"valuable": false,
"item-wealth": true
},
"physical": { "physical": {
"value": 0, "value": 0,
"magic": false "magic": false
@ -297,7 +301,7 @@
"calc": {} "calc": {}
}, },
"item": { "item": {
"templates": ["itemDescription", "equippable", "physical"], "templates": ["itemDescription", "equippable", "physical","valuable"],
"rolls": { "rolls": {
"formulas": {}, "formulas": {},
"output": "" "output": ""
@ -315,9 +319,10 @@
"calc": {} "calc": {}
}, },
"weapon": { "weapon": {
"templates": ["itemDescription", "stats", "equippable", "physical"], "templates": ["itemDescription", "stats", "equippable", "physical","valuable"],
"special": false, "special": false,
"ranged": false, "ranged": false,
"valuable": false,
"skillId": "", "skillId": "",
"damageBase": "1d6", "damageBase": "1d6",
"rolls": { "rolls": {
@ -338,8 +343,9 @@
"calc": {} "calc": {}
}, },
"defensiveWeapon": { "defensiveWeapon": {
"templates": ["itemDescription", "stats", "equippable", "physical"], "templates": ["itemDescription", "stats", "equippable", "physical","valuable"],
"special": false, "special": false,
"valuable": false,
"skillId": "", "skillId": "",
"rolls": { "rolls": {
"formulas": { "formulas": {
@ -354,9 +360,10 @@
"calc": {} "calc": {}
}, },
"armor": { "armor": {
"templates": ["itemDescription", "stats", "equippable", "attributeMod", "physical"], "templates": ["itemDescription", "stats", "equippable", "attributeMod", "physical","valuable"],
"lpProtection": 0, "lpProtection": 0,
"apProtection": 0, "apProtection": 0,
"valuable": false,
"rolls": { "rolls": {
"formulas": {}, "formulas": {},
"output": "" "output": ""

View File

@ -109,17 +109,21 @@
<td>{{localize "midgard5.resistanceBody"}}</td> <td>{{localize "midgard5.resistanceBody"}}</td>
<td class="fixed-value">{{data.calc.stats.resistanceBody.value}}</td> <td class="fixed-value">{{data.calc.stats.resistanceBody.value}}</td>
</tr> </tr>
<tr>
<td>{{localize "midgard5.resistanceMind"}}</td>
<td class="fixed-value">{{data.calc.stats.resistanceMind.value}}</td>
<td>{{localize "midgard5.resistanceBody"}}</td>
<td class="fixed-value">{{data.calc.stats.resistanceBody.value}}</td>
</tr>
<tr> <tr>
<td>{{localize "midgard5.movementRange"}}</td> <td>{{localize "midgard5.movementRange"}}</td>
<td class="fixed-value">{{data.calc.stats.movement.value}}</td> <td class="fixed-value">{{data.calc.stats.movement.value}}</td>
<td>{{localize "midgard5.actor-git-long"}}</td> {{#if (eq data.info.race "Zwerg")}}
<td class="fixed-value">{{data.calc.stats.poisonResistance.value}}</td> <td>{{localize "midgard5.hoard"}}</td>
<td class="fixed-value">{{data.calc.stats.hoard}}</td>
{{/if}}
</tr>
<tr>
{{#if (eq data.info.race "Zwerg")}}
<td>{{localize "midgard5.hoardMin"}}</td>
<td class="fixed-value">{{data.calc.stats.hoardMin}}</td>
<td>{{localize "midgard5.hoard-next"}}</td>
<td class="fixed-value">{{data.calc.stats.hoardNext}}</td>
{{/if}}
</tr> </tr>
<tr height = 10px></tr> <tr height = 10px></tr>
</tbody> </tbody>

View File

@ -1,16 +1,24 @@
<table> <table>
<thead> <thead>
<tr> <tr>
<th class="title" style="text-align: center">{{localize "midgard5.currency-wealth"}}</th>
<th class="title" style="text-align: center">{{localize "midgard5.currency-gold"}}</th> <th class="title" style="text-align: center">{{localize "midgard5.currency-gold"}}</th>
<th class="title" style="text-align: center">{{localize "midgard5.currency-silver"}}</th> <th class="title" style="text-align: center">{{localize "midgard5.currency-silver"}}</th>
<th class="title" style="text-align: center">{{localize "midgard5.currency-copper"}}</th> <th class="title" style="text-align: center">{{localize "midgard5.currency-copper"}}</th>
{{#if (eq data.info.race "Zwerg")}}
<th class="title" style="text-align: center">{{localize "midgard5.hoard"}}</th>
{{/if}}
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td class="fixed-value"><input type="number" name="data.info.wealth" value="{{data.calc.stats.wealth}}"></td>
<td class="fixed-value"><input type="number" name="data.info.gold" value="{{data.info.gold}}"></td> <td class="fixed-value"><input type="number" name="data.info.gold" value="{{data.info.gold}}"></td>
<td class="fixed-value"><input type="number" name="data.info.silver" value="{{data.info.silver}}"></td> <td class="fixed-value"><input type="number" name="data.info.silver" value="{{data.info.silver}}"></td>
<td class="fixed-value"><input type="number" name="data.info.copper" value="{{data.info.copper}}"></td> <td class="fixed-value"><input type="number" name="data.info.copper" value="{{data.info.copper}}"></td>
{{#if (eq data.info.race "Zwerg")}}
<td class="fixed-value"><input type="number" name="midgard5.hoard" value="{{data.calc.stats.hoard}}"></td>
{{/if}}
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@ -4,24 +4,15 @@
<tr height = 5px></tr> <tr height = 5px></tr>
<tr> <tr>
<td style="text-align: left;" colspan="4" rowspan="2"><img style="border: 0px solid black;" src="/systems/midgard5/assets/icons/logo/midgard.webp" alt="Midgard"></td> <td style="text-align: left;" colspan="4" rowspan="2"><img style="border: 0px solid black;" src="/systems/midgard5/assets/icons/logo/midgard.webp" alt="Midgard"></td>
<td></td>
<td colspan="5" style="font-size: x-large; font-weigh: bold;"><input name="name" type="text" value="{{actor.name}}" data-dtype="String" /></td> <td colspan="5" style="font-size: x-large; font-weigh: bold;"><input name="name" type="text" value="{{actor.name}}" data-dtype="String" /></td>
<td style="font-size: x-large; font-weigh: bold; text-align: center; text-align-vertical: middle;" ><div style="border: 2px solid black; border-radius: 10px; background-color: white;">{{data.calc.level}}</div></td> <td style="font-size: x-large; font-weigh: bold; text-align: center; text-align-vertical: middle;" ><div style="border: 2px solid black; border-radius: 10px; background-color: white;">{{data.calc.level}}</div></td>
{{#if (eq data.info.race "Zwerg")}} </tr>
<td style="font-size: x-large; font-weigh: bold; text-align: center; text-align-vertical: middle;">
<div style="border: 2px solid black; border-radius: 10px; background-color: white; background-image: url('icons/commodities/currency/coins-wheat-stack-copper.webp');background-size: cover; background-position: center;">
<span class="hoard">{{data.calc.stats.hoard}} GS</span><br>
<span class="hoardNext">Hort für nächsten Grad: <br>{{data.calc.stats.hoardNext}} GS</span>
</div>
</td>
{{/if}}
</tr>
<tr> <tr>
<td></td>
<td colspan="5"><b>Name</b></td> <td colspan="5"><b>Name</b></td>
<td style="text-align: center;"><b>Grad</b></td> <td style="text-align: center;"><b>Grad</b></td>
{{#if (eq data.info.race "Zwerg")}} </tr>
<td style="text-align: center;"><b>Hort</b></td>
{{/if}}
</tr>
<tr height = 10px></tr> <tr height = 10px></tr>
<tr> <tr>
<td rowspan="8" width=128><img style="max-width: 128px; height: 160px; border: 0px solid black;" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" /></td> <td rowspan="8" width=128><img style="max-width: 128px; height: 160px; border: 0px solid black;" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" /></td>

View File

@ -18,6 +18,27 @@
<input id="data.magic" type="checkbox" name="data.magic" {{checked data.magic}} /> <input id="data.magic" type="checkbox" name="data.magic" {{checked data.magic}} />
<label for="data.magic">{{localize "midgard5.magic"}}</label> <label for="data.magic">{{localize "midgard5.magic"}}</label>
</span> </span>
<span>
<input id="data.valuable" type="checkbox" name="data.valuable" {{checked data.valuable}}>
<label for="data.valuable">{{localize "midgard5.valuable"}}</label>
</span>
</div>
</td>
</tr>
<tr>
<td colspan="4">
<div class="flexrow">
<span>{{localize "midgard5.item-value"}}</span>
<input name="data.value" type="number" value="{{data.value}}" data-dtype="Number" />
<select class="select-mod-operation" name="data.currency" data-type="String">
{{#select data.currency}}
<option value=""></option>
<option value="copper">{{localize "midgard5.currency-copper"}}</option>
<option value="silver">{{localize "midgard5.currency-silver"}}</option>
<option value="gold">{{localize "midgard5.currency-gold"}}</option>
{{/select}}
</select>
</div> </div>
</td> </td>
</tr> </tr>

View File

@ -18,6 +18,27 @@
<input id="data.special" type="checkbox" name="data.special" {{checked data.special}}> <input id="data.special" type="checkbox" name="data.special" {{checked data.special}}>
<label for="data.special">{{localize "midgard5.special"}}</label> <label for="data.special">{{localize "midgard5.special"}}</label>
</span> </span>
<span>
<input id="data.valuable" type="checkbox" name="data.valuable" {{checked data.valuable}}>
<label for="data.valuable">{{localize "midgard5.valuable"}}</label>
</span>
</div>
</td>
</tr>
<tr>
<td colspan="4">
<div class="flexrow">
<span>{{localize "midgard5.item-value"}}</span>
<input name="data.value" type="number" value="{{data.value}}" data-dtype="Number" />
<select class="select-mod-operation" name="data.currency" data-type="String">
{{#select data.currency}}
<option value=""></option>
<option value="copper">{{localize "midgard5.currency-copper"}}</option>
<option value="silver">{{localize "midgard5.currency-silver"}}</option>
<option value="gold">{{localize "midgard5.currency-gold"}}</option>
{{/select}}
</select>
</div> </div>
</td> </td>
</tr> </tr>

View File

@ -16,6 +16,10 @@
<input id="data.magic" type="checkbox" name="data.magic" {{checked data.magic}}> <input id="data.magic" type="checkbox" name="data.magic" {{checked data.magic}}>
<label for="data.magic">{{localize "midgard5.magic"}}</label> <label for="data.magic">{{localize "midgard5.magic"}}</label>
</span> </span>
<span>
<input id="data.valuable" type="checkbox" name="data.valuable" {{checked data.valuable}}>
<label for="data.valuable">{{localize "midgard5.valuable"}}</label>
</span>
</div> </div>
</td> </td>
</tr> </tr>
@ -28,7 +32,7 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td colspan="4">
<div class="flexrow"> <div class="flexrow">
<span>{{localize "midgard5.item-value"}}</span> <span>{{localize "midgard5.item-value"}}</span>
<input name="data.value" type="number" value="{{data.value}}" data-dtype="Number" /> <input name="data.value" type="number" value="{{data.value}}" data-dtype="Number" />

View File

@ -23,6 +23,27 @@
<input id="data.special" type="checkbox" name="data.special" {{checked data.special}}> <input id="data.special" type="checkbox" name="data.special" {{checked data.special}}>
<label for="data.special">{{localize "midgard5.special"}}</label> <label for="data.special">{{localize "midgard5.special"}}</label>
</span> </span>
<span>
<input id="data.valuable" type="checkbox" name="data.valuable" {{checked data.valuable}}>
<label for="data.valuable">{{localize "midgard5.valuable"}}</label>
</span>
</div>
</td>
</tr>
<tr>
<td colspan="4">
<div class="flexrow">
<span>{{localize "midgard5.item-value"}}</span>
<input name="data.value" type="number" value="{{data.value}}" data-dtype="Number" />
<select class="select-mod-operation" name="data.currency" data-type="String">
{{#select data.currency}}
<option value=""></option>
<option value="copper">{{localize "midgard5.currency-copper"}}</option>
<option value="silver">{{localize "midgard5.currency-silver"}}</option>
<option value="gold">{{localize "midgard5.currency-gold"}}</option>
{{/select}}
</select>
</div> </div>
</td> </td>
</tr> </tr>