mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-17 19:03:46 +00:00
add felszereles domain models and combat data
This commit is contained in:
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
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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?
|
||||
Reference in New Issue
Block a user