add felszereles domain models and combat data

This commit is contained in:
2024-01-16 23:08:56 +01:00
committed by Bálint Mórász
parent e9c4452908
commit e0a4437d43
7 changed files with 1669 additions and 13 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,115 @@
import pancelok from './pancel.json'
import pajzsok from './pajzs.json'
import fegyverek from './fegyver.json'
export type PancelType = 'konnyu' | 'nehez'
export const PancelTypes: PancelType[] = ['konnyu', 'nehez']
export interface Pancel {
Id: string,
Name: string,
Type: PancelType
VO: number,
Price: number,
Size: number
}
export interface Pajzs {
Id: string,
Name: string,
Type: 'pajzs'
VO: number,
Price: number,
Size: number
}
export interface Fegyver {
Id: string,
Name: string,
Type: 'kozelharci' | 'lofegyver',
Harcos: boolean,
CsakNemHarcos: boolean,
Masfelkezes: boolean,
Ketkezes: boolean,
KetkezesBonusz: boolean,
HarciManover: boolean,
Alakzat: boolean,
Hosszu: boolean,
Kabito: boolean,
LovasRoham: boolean,
PancelToro: boolean,
PajzsZuzo: boolean,
Rohamtoro: boolean,
EroBonusz: boolean,
Megterheltseg: boolean,
Megjegyzes: string | undefined | null,
Price: number,
DamageMultiplier: number,
DamageDice: number,
NumberOfDamageDice: number,
DamageBonusz: number,
CritRangeStart: number,
CritMultiplier: number,
Range: number,
Size: number
}
export interface KarakterFelszereles {
pancelID?: string
pajzsID?: string
fegyverIDk: string[]
}
export const DefaultFelszereles: KarakterFelszereles = {
fegyverIDk: [],
}
export function PancelTypeLabel(type: PancelType): string {
let result: string
switch(type) {
case 'konnyu':
result = 'Könnyű'
break
case 'nehez':
result = 'Nehéz'
break
default:
result = 'Egyéb páncél'
}
return result
}
export function GetPancel(id?: string): Pancel | undefined {
if (id == null) {
return undefined
}
const filteredPancel = pancelok['pancel'].filter(p => p.Id === id) as Pancel[]
return filteredPancel.length > 0 ? filteredPancel[0] : undefined
}
export function MaxAbilityVO(p: PancelType) {
switch(p){
case 'konnyu': return 9999;
case 'nehez': return 1;
default: return 9999;
}
}
export function GetPajzs(id?: string): Pajzs | undefined {
if (id == null) {
return undefined
}
const filtered = pajzsok['pajzs'].filter(p => p.Id === id) as Pajzs[]
return filtered.length > 0 ? filtered[0] : undefined
}
export function GetFegyver(id: string): Fegyver | undefined {
return fegyverek.data.find(f => f.Id === id) as Fegyver | undefined
}
export function GetFegyverek(ids: string[]): Fegyver[] {
return ids.map(GetFegyver).filter(x => x != null).map(x => x as Fegyver)
}
export const defaultFegyverID = 'okol'
export const defaultFegyver = GetFegyver('okol')!
@@ -3,6 +3,7 @@ import {Faj2E} from "./faj2E";
import {Osztaly2E} from "./osztaly2E";
import {KepzettsegId} from "./kepzettsegek2E";
import {JellemID} from "./jellem";
import {DefaultFelszereles, KarakterFelszereles} from "./felszereles";
export interface Karakter2E {
name: string,
@@ -19,7 +20,9 @@ export interface Karakter2E {
tolvajKepzettsegek?: KepzettsegId[]
szint: number,
hpRolls: number[]
felszereles: KarakterFelszereles,
}
export const DefaultKarakter: Karakter2E = {
name: 'Névtelen Kalandozó',
kor: 20,
@@ -32,5 +35,6 @@ export const DefaultKarakter: Karakter2E = {
kepzettsegek: [],
tolvajKepzettsegek: [],
szint: 1,
hpRolls: []
}
hpRolls: [],
felszereles: DefaultFelszereles,
}
@@ -3,8 +3,8 @@ import {Osztaly2E} from "./osztaly2E";
import {Karakter2E} from "./karakter2E";
import {CelzoTB, KozelharciTB} from "./tamadas_bonusz";
import {Faj2E} from "./faj2E";
// import { GetPajzs, GetPancel, MaxAbilityVO } from "./felszereles";
import {Modifier} from "./tulajdonsag2E";
import {GetPajzs, GetPancel, MaxAbilityVO} from "./felszereles";
export interface MasodlagosErtekekView {
HP: number
@@ -14,7 +14,7 @@ export interface MasodlagosErtekekView {
Mentok: Mentok
}
export type KarakterpickForMasodlagosErtekek = Pick<Karakter2E, 'osztaly' | 'hpRolls' | 'tulajdonsagok' | 'szint' | 'faj'>
export type KarakterpickForMasodlagosErtekek = Pick<Karakter2E, 'osztaly' | 'hpRolls' | 'tulajdonsagok' | 'szint' | 'faj' | 'felszereles'>
export function BaseHP(osztaly: Osztaly2E) {
let base = 4;
@@ -53,13 +53,15 @@ export function HP(karakter: Pick<Karakter2E, 'osztaly' | 'tulajdonsagok' | 'hpR
.reduce((sum, val) => sum + val, 0)
}
export function VO(karakter: Pick<Karakter2E, 'tulajdonsagok' | 'faj' | 'osztaly' | 'szint'>): number {
// const pancel = GetPancel(karakter.felszereles.pancelID)
// const pancelVO = pancel?.VO ?? 0
// const pajzsVO = GetPajzs(karakter.felszereles.pajzsID)?.VO ?? 0
// let vo = 10 + pajzsVO + pancelVO
let vo = 10
export function VO(karakter: Pick<Karakter2E, 'tulajdonsagok' | 'faj' | 'osztaly' | 'szint' | 'felszereles'>): number {
const pancel = GetPancel(karakter.felszereles.pancelID)
const pancelVO = pancel?.VO ?? 0
const pajzsVO = GetPajzs(karakter.felszereles.pajzsID)?.VO ?? 0
let vo = 10 + pajzsVO + pancelVO
let abilityVO = Modifier(karakter.tulajdonsagok.t_ugy)
if (pancel) {
abilityVO = Math.min(MaxAbilityVO(pancel.Type), abilityVO)
}
if (karakter.osztaly === Osztaly2E.Tengeresz) {
vo += Math.floor(karakter.szint / 3)
}
@@ -72,9 +74,6 @@ export function VO(karakter: Pick<Karakter2E, 'tulajdonsagok' | 'faj' | 'osztaly
if (karakter.faj === Faj2E.Felszerzet || karakter.faj === Faj2E.Gnom){
vo += 1
}
// if (pancel) {
// abilityVO = Math.min(MaxAbilityVO(pancel.Type), abilityVO)
// }
vo += abilityVO
return vo
@@ -0,0 +1,20 @@
{
"pajzs": [
{
"Id": "pajzs_fa",
"Name": "Pajzs, fa",
"Type": "pajzs",
"VO": 2,
"Price": 8,
"Size": 1
},
{
"Id": "pajzs_fem",
"Name": "Pajzs, fém",
"Type": "pajzs",
"VO": 2,
"Price": 20,
"Size": 1
}
]
}
@@ -0,0 +1,92 @@
{
"pancel": [
{
"Id": "csuha",
"Name": "Vastag ruha, csuha, stb",
"Type": "konnyu",
"VO": 1,
"Price": 1,
"Size": 1
},
{
"Id": "bor",
"Name": "Bőrvért, bőrruha, fegyverkabát",
"Type": "konnyu",
"VO": 2,
"Price": 5,
"Size": 1
},
{
"Id": "kivert_bor",
"Name": "Kivert bőrvért, brigantin",
"Type": "konnyu",
"VO": 3,
"Price": 15,
"Size": 1
},
{
"Id": "prem",
"Name": "Prémruha, bunda",
"Type": "konnyu",
"VO": 3,
"Price": 12,
"Size": 2
},
{
"Id": "len",
"Name": "Linothorax, ragasztott lenpáncél",
"Type": "konnyu",
"VO": 4,
"Price": 20,
"Size": 2
},
{
"Id": "lancing",
"Name": "Láncing",
"Type": "konnyu",
"VO": 4,
"Price": 50,
"Size": 1
},
{
"Id": "pikkelyvert",
"Name": "Pikkelyvért",
"Type": "nehez",
"VO": 5,
"Price": 30,
"Size": 3
},
{
"Id": "lancvert",
"Name": "Láncvért",
"Type": "nehez",
"VO": 5,
"Price": 75,
"Size": 2
},
{
"Id": "mellvert",
"Name": "Mellvért, lorica musculata",
"Type": "nehez",
"VO": 5,
"Price": 100,
"Size": 2
},
{
"Id": "szalagvert",
"Name": "Szalagvért, lorica segmentata",
"Type": "nehez",
"VO": 6,
"Price": 250,
"Size": 2
},
{
"Id": "lemezvert",
"Name": "Lemezvért",
"Type": "nehez",
"VO": 7,
"Price": 400,
"Size": 3
}
]
}
+12
View File
@@ -20,3 +20,15 @@
- Felszerelés
- KéM 2.0-ra felkészülés
- Klikkelésre dobás
# 2e Errata to ask
- Fejszek pajzs zúzása
- kétkezes kopja hiányzó `LR` jelzése
- mit jelent, hogy "lovassági" ? csak lóról használható? Miért nem kapott külön jelölést?
- kopják miért nem hosszúak?
- vs. háromágú szigony: trident https://en.wikipedia.org/wiki/Retiarius)
> The trident, as tall as a human being...
- https://en.wikipedia.org/wiki/Lance
> The length of the standard kontarion is estimated at about 2.5 meters (8.2 ft), which is shorter than that of the medieval knight of Western Europe.
- botnál mit jelent, hogy "alapesetben KO"? Tud nem KO-t is?