change Kampftalente to be Items

This commit is contained in:
Sven Balzer 2024-12-19 10:28:29 +01:00
parent 57eb581ae7
commit 4079a40d6b
8 changed files with 175 additions and 81 deletions

View File

@ -171,15 +171,13 @@
{{#each this}}
<div class="list-item" data-item-id="{{_id}}">
<div>
<div class="fit-content" data-action="item-open">{{maybeLocalize name prefix=(concat "DSA41.talente." system.kategorie ".name")}}</div>
</div>
<div data-action="item-open">{{maybeLocalize name prefix=(concat "DSA41.talente." system.kategorie ".name")}}</div>
<div class="center" data-action="roll" data-roll-type="talent">
{{>die-type type=system.attribute1}}
{{>die-type type=system.attribute2}}
{{>die-type type=system.attribute3}}
</div>
<div>{{>editable-input type="number" data-name="system.talentwert" value=system.talentwert}}</div>
<div>{{>editable-input name=(concat name "system.talentwert") type="number" data-name="system.talentwert" value=system.talentwert}}</div>
<div class="center fas fa-trash" data-action="item-delete"></div>
</div>
{{/each}}
@ -196,14 +194,14 @@
<div class="center">{{localize "DSA41.talente.kampf.label_parade_total"}}</div>
</div>
{{#each actor.system.kampf_talente}}
<div class="list-item">
<div>{{localize (concat "DSA41.talente.kampf.name." @key)}}</div>
<div>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".talentwert") value=(lookup this "talentwert")}}</div>
<div>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".attacke") value=(lookup this "attacke")}}</div>
<div>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".parade") value=(lookup this "parade")}}</div>
<div class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente @key) "attacke"}}</div>
<div class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente @key) "parade"}}</div>
{{#each actor.system.kampftalente}}
<div class="list-item" data-item-id="{{_id}}">
<div data-action="item-open">{{maybeLocalize name prefix="DSA41.talente.kampf.name."}}</div>
<div>{{>editable-input type="number" name=(concat name "system.talentwert") data-name="system.talentwert" value=system.talentwert}}</div>
<div>{{>editable-input type="number" name=(concat name "system.attacke") data-name="system.attacke" value=system.attacke}}</div>
<div>{{>editable-input type="number" name=(concat name "system.parade") data-name="system.parade" value=system.parade}}</div>
<div class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente name) "attacke"}}</div>
<div class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente name) "parade"}}</div>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,39 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off">
<div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}>
<div class="col">
<div class="grid3 gap">
{{>editable-input type="text" name="name" value=item.name placeholder=(localize "DSA41.name")}}
<div>
<select name="system.steigern">
<option value="A_Star" {{#if (eq item.system.steigern "A_Star")}}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.A_Star"}}</option>
<option value="A" {{#if (eq item.system.steigern "A") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.A"}} </option>
<option value="B" {{#if (eq item.system.steigern "B") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.B"}} </option>
<option value="C" {{#if (eq item.system.steigern "C") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.C"}} </option>
<option value="D" {{#if (eq item.system.steigern "D") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.D"}} </option>
<option value="E" {{#if (eq item.system.steigern "E") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.E"}} </option>
<option value="F" {{#if (eq item.system.steigern "F") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.F"}} </option>
<option value="G" {{#if (eq item.system.steigern "G") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.G"}} </option>
<option value="H" {{#if (eq item.system.steigern "H") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.H"}} </option>
</select>
<div class="placeholder">{{localize "DSA41.kampftalent.label_steigern"}}</div>
</div>
{{>editable-input type="text" name="system.behinderung" value=item.system.behinderung placeholder=(localize "DSA41.talente.label_behinderung")}}
</div>
<div class="grid gap">
<div>
<select name="system.kategorie">
<option value="waffenlos" {{#if (eq item.system.kategorie "waffenlos")}}selected{{/if}}>{{localize "DSA41.kampftalent.kategorie.waffenlos"}}</option>
<option value="nahkampf" {{#if (eq item.system.kategorie "nahkampf") }}selected{{/if}}>{{localize "DSA41.kampftalent.kategorie.nahkampf"}} </option>
<option value="fernkampf" {{#if (eq item.system.kategorie "fernkampf")}}selected{{/if}}>{{localize "DSA41.kampftalent.kategorie.fernkampf"}}</option>
</select>
<div class="placeholder">{{localize "DSA41.talente.label_kategorie"}}</div>
</div>
</div>
</div>
</div>
<div>
<prose-mirror name="system.beschreibung" value="{{item.system.beschreibung}}" compact="true">
</prose-mirror>
</div>
</div>

View File

@ -17,7 +17,6 @@
</div>
<div>
<prose-mirror name="system.beschreibung" value="{{item.system.beschreibung}}" compact="true">
</prose-mirror>
</div>
</div>

View File

@ -1,10 +1,15 @@
{
"TYPES": {
"Actor": {
"Player": "Spieler"
},
"Item": {
"Gegenstand": "Gegenstand",
"Ruestung": "Rüstung",
"Bewaffnung": "Bewaffnung",
"Talent": "Talent",
"Kampftalent": "Kampftalent",
"Sonderfertigkeit": "Sonderfertigkeit",
"VorNachteil": "Vor-/Nachteil"
}
@ -120,6 +125,30 @@
}
},
"kampftalent": {
"label": "Kampftalent",
"label_kategorie": "Kategorie",
"label_steigern": "Steigern",
"kategorie":{
"waffenlos": "Waffenlos",
"nahkampf": "Bewaffneter Nahkampf",
"fernkampf": "Fernkampf"
},
"steigern": {
"A_Star": "A*",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"G": "G",
"H": "H"
}
},
"talente":{
"label": "Talent",
"label_eigenschaften": "Eigenschaften",
@ -132,37 +161,7 @@
"label_attacke": "Attacke",
"label_parade": "Parade",
"label_attacke_total": "Attacke",
"label_parade_total": "Parade",
"name": {
"anderthalbhaender": "Anderthalbhänder",
"armbrust": "Armbrust",
"belagerungswaffen": "Belagerungswaffen",
"blasrohr": "Blasrohr",
"bogen": "Bogen",
"diskus": "Diskus",
"dolche": "Dolche",
"fechtwaffen": "Fechtwaffen",
"hiebwaffen": "Hiebwaffen",
"infanteriewaffen": "Infanteriewaffen",
"kettenstaebe": "Kettenstäbe",
"kettenwaffen": "Kettenwaffen",
"lanzenreiten": "Lanzenreiten",
"peitsche": "Peitsche",
"raufen": "Raufen",
"ringen": "Ringen",
"saebel": "Saebel",
"schleuder": "Schleuder",
"schwerter": "Schwerter",
"speere": "Speere",
"staebe": "Stäbe",
"wurfbeile": "Wurfbeile",
"wurfmesser": "Wurfmesser",
"wurfspeere": "Wurfspeere",
"zweihandflegel": "Zweihandflegel",
"zweihand_hiebwaffen": "Zweihand-Hiebwaffen",
"zweihandschwerter": "Zweihandschwerter/-säbel"
}
"label_parade_total": "Parade"
},
"koerperliche": {

View File

@ -18,6 +18,7 @@ Hooks.once("init", async function() {
CONFIG.Item.dataModels.Ruestung = DSA41_RuestungData;
CONFIG.Item.dataModels.Bewaffnung = DSA41_BewaffnungData;
CONFIG.Item.dataModels.Talent = DSA41_TalentData;
CONFIG.Item.dataModels.Kampftalent = DSA41_KampftalentData;
CONFIG.Item.dataModels.Sonderfertigkeit = DSA41_SonderfertigkeitData;
CONFIG.Item.dataModels.VorNachteil = DSA41_VorNachteilData;
@ -37,6 +38,7 @@ Hooks.once("init", async function() {
"Ruestung",
"Bewaffnung",
"Talent",
"Kampftalent",
"Sonderfertigkeit",
"VorNachteil",
]
@ -183,6 +185,14 @@ class DSA41_CharacterDocument extends Actor {
"Lederarbeiten",
"Malen/Zeichnen",
"Schneidern",
// Basis Kampftalente
"Dolche",
"Hiebwaffen",
"Raufen",
"Ringen",
"Säbel",
"Wurfmesser",
]});
await actor.createEmbeddedDocuments("Item", talente);
@ -212,36 +222,6 @@ class DSA41_CharacterData extends TypeDataModel {
constitution: new AttributeField(),
strength: new AttributeField(),
}),
kampf_talente: new SchemaField({
anderthalbhaender: new CombatTalentField(),
armbrust: new CombatTalentField(),
belagerungswaffen: new CombatTalentField(),
blasrohr: new CombatTalentField(),
bogen: new CombatTalentField(),
diskus: new CombatTalentField(),
dolche: new CombatTalentField(),
fechtwaffen: new CombatTalentField(),
hiebwaffen: new CombatTalentField(),
infanteriewaffen: new CombatTalentField(),
kettenstaebe: new CombatTalentField(),
kettenwaffen: new CombatTalentField(),
lanzenreiten: new CombatTalentField(),
peitsche: new CombatTalentField(),
raufen: new CombatTalentField(),
ringen: new CombatTalentField(),
saebel: new CombatTalentField(),
schleuder: new CombatTalentField(),
schwerter: new CombatTalentField(),
speere: new CombatTalentField(),
staebe: new CombatTalentField(),
wurfbeile: new CombatTalentField(),
wurfmesser: new CombatTalentField(),
wurfspeere: new CombatTalentField(),
zweihandflegel: new CombatTalentField(),
zweihand_hiebwaffen: new CombatTalentField(),
zweihandschwerter: new CombatTalentField(),
}),
}
}
@ -309,10 +289,14 @@ class DSA41_CharacterData extends TypeDataModel {
this.computed.kampf.ruestungen_gesamt[key] = Math.round(value);
}
for(const [name, values] of Object.entries(this.kampf_talente)) {
this.computed.kampf.talente[name] = {};
this.computed.kampf.talente[name].attacke = this.computed.at_basiswert + values.attacke;
this.computed.kampf.talente[name].parade = this.computed.pa_basiswert + values.parade;
this.kampftalente = this.parent.items.filter((x) => x.type === "Kampftalent").sort((a, b) => a.name > b.name);
for(const talent of this.kampftalente) {
this.computed.kampf.talente[talent.name] = {};
this.computed.kampf.talente[talent.name].attacke = this.computed.at_basiswert + talent.system.attacke;
this.computed.kampf.talente[talent.name].parade = this.computed.pa_basiswert + talent.system.parade;
this.computed.kampf.talente[talent.name].talent_attacke = talent.system.attacke;
this.computed.kampf.talente[talent.name].talent_parade = talent.system.parade;
}
const equipped_bewaffnung = this.parent.items.filter((x) => x.type === "Bewaffnung");
@ -353,8 +337,8 @@ class DSA41_CharacterData extends TypeDataModel {
const talent = item.system.nahkampfwaffe.kampftalente;
computed.talent_attacke = this.kampf_talente[talent]?.attacke ?? 0;
computed.talent_parade = this.kampf_talente[talent]?.parade ?? 0;
computed.talent_attacke = this.computed.kampf.talente[talent]?.talent_attacke ?? 0;
computed.talent_parade = this.computed.kampf.talente[talent]?.talent_parade ?? 0;
computed.modifikator_attacke = item.system.nahkampfwaffe.modifikator_attacke;
computed.modifikator_parade = item.system.nahkampfwaffe.modifikator_parade;
@ -399,7 +383,7 @@ class DSA41_CharacterData extends TypeDataModel {
computed.basis_attacke = this.computed.fk_basiswert;
const talent = item.system.nahkampfwaffe.kampftalente;
computed.talent_attacke = this.kampf_talente[talent]?.attacke ?? 0;
computed.talent_attacke = this.computed.kampf.talente[talent]?.talent_attacke ?? 0;
computed.attacke = computed.basis_attacke + computed.talent_attacke;
@ -542,6 +526,22 @@ class DSA41_TalentData extends TypeDataModel {
}
}
class DSA41_KampftalentData extends TypeDataModel {
static defineSchema() {
return {
kategorie: new StringField(),
behinderung: new StringField(),
steigern: new StringField(),
beschreibung: new StringField(),
talentwert: new NumberField({ integer: true, initial: 0 }),
attacke: new NumberField({ integer: true, initial: 0 }),
parade: new NumberField({ integer: true, initial: 0 }),
};
}
}
class DSA41_SonderfertigkeitData extends TypeDataModel {
static defineSchema() {
return {
@ -900,6 +900,7 @@ class DSA41_ItemSheetV2 extends DSA41_ApplicationMixin(ItemSheetV2) {
Gegenstand: { template: "systems/dsa-4th-edition/src/ItemSheets/Gegenstand.hbs" },
Ruestung: { template: "systems/dsa-4th-edition/src/ItemSheets/Ruestung.hbs" },
Talent: { template: "systems/dsa-4th-edition/src/ItemSheets/Talent.hbs" },
Kampftalent: { template: "systems/dsa-4th-edition/src/ItemSheets/Kampftalent.hbs" },
Sonderfertigkeit: { template: "systems/dsa-4th-edition/src/ItemSheets/Sonderfertigkeit.hbs" },
VorNachteil: { template: "systems/dsa-4th-edition/src/ItemSheets/VorNachteil.hbs" },
};

View File

@ -15,6 +15,7 @@
"Bewaffnung": {},
"Talent": {},
"Kampftalent": {},
"Sonderfertigkeit": {},
"VorNachteil": {}
}

View File

@ -131,6 +131,37 @@ const talente: system.ItemCompendium = .{ .entries = &.{
.{ .Talent = .{ .name = "Winzer", .system = .{ .kategorie = .handwerks, .attribute1 = .KL, .attribute2 = .FF, .attribute3 = .KK, .behinderung = "" } } },
.{ .Talent = .{ .name = "Zimmermann", .system = .{ .kategorie = .handwerks, .attribute1 = .KL, .attribute2 = .FF, .attribute3 = .KK, .behinderung = "" } } },
}}},
// Kampftalente
.{ .Folder = .{ .name = "Kampftalente", .entries = &.{
.{ .Kampftalent = .{ .name = "Anderthalbhänder", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Armbrust", .system = .{ .kategorie = .fernkampf, .steigern = .C, .behinderung = "@BE - 5" } } },
.{ .Kampftalent = .{ .name = "Belagerungswaffen", .system = .{ .kategorie = .fernkampf, .steigern = .D, .behinderung = "" } } },
.{ .Kampftalent = .{ .name = "Blasrohr", .system = .{ .kategorie = .fernkampf, .steigern = .D, .behinderung = "@BE - 5" } } },
.{ .Kampftalent = .{ .name = "Bogen", .system = .{ .kategorie = .fernkampf, .steigern = .E, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Diskus", .system = .{ .kategorie = .fernkampf, .steigern = .D, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Dolche", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 1" } } },
.{ .Kampftalent = .{ .name = "Fechtwaffen", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 1" } } },
.{ .Kampftalent = .{ .name = "Hiebwaffen", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 4" } } },
.{ .Kampftalent = .{ .name = "Infanteriewaffen", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Kettenstäbe", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 1" } } },
.{ .Kampftalent = .{ .name = "Kettenwaffen", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
// .{ .Kampftalent = .{ .name = "Lanzenreiten", .system = .{ .kategorie = .???, .steigern = .E, .behinderung = "" } } },
// .{ .Kampftalent = .{ .name = "Peitsche", .system = .{ .kategorie = .???, .steigern = .E, .behinderung = "@BE - 1" } } },
.{ .Kampftalent = .{ .name = "Raufen", .system = .{ .kategorie = .waffenlos, .steigern = .C, .behinderung = "@BE" } } },
.{ .Kampftalent = .{ .name = "Ringen", .system = .{ .kategorie = .waffenlos, .steigern = .D, .behinderung = "@BE" } } },
.{ .Kampftalent = .{ .name = "Saebel", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Schleuder", .system = .{ .kategorie = .fernkampf, .steigern = .E, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Schwerter", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Speere", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Stäbe", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Wurfbeile", .system = .{ .kategorie = .fernkampf, .steigern = .D, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Wurfmesser", .system = .{ .kategorie = .fernkampf, .steigern = .C, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Wurfspeere", .system = .{ .kategorie = .fernkampf, .steigern = .C, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Zweihandflegel", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Zweihand-Hiebwaffen", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Zweihandschwerter/-säbel", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 2" } } },
}}},
}};
pub fn main() !void {

View File

@ -120,6 +120,32 @@ pub const ItemCompendium = foundry.Compendium(.Item, union(enum) {
talentwert: u8 = 0,
}),
Kampftalent: foundry.Item("Kampftalent", struct {
kategorie: enum {
waffenlos,
nahkampf,
fernkampf,
},
steigern: enum {
A_Star,
A,
B,
C,
D,
E,
F,
G,
H,
},
behinderung: String = "",
beschreibung: String = "",
talentwert: u8 = 0,
attacke: u8 = 0,
parade: u8 = 0,
}),
});
const Attribute = enum {