diff --git a/src/components/KarakterKepzettsegek.tsx b/src/components/KarakterKepzettsegek.tsx index 450710e..f1572d7 100644 --- a/src/components/KarakterKepzettsegek.tsx +++ b/src/components/KarakterKepzettsegek.tsx @@ -71,27 +71,15 @@ function KarakterKepzettsegek (props: { changeTolvajKepzettsegek: (newKepzettsegek: KepzettsegId[]) => void }) { const { numberOfKepzettsegek, availableKepzettsegList, changeKepzettsegek, tolvajKepzettsegek, changeTolvajKepzettsegek} = props - let kepzettsegek = props.kepzettsegek + let kepzettsegek = [ ...props.kepzettsegek] + + // TODO: Eszakinak es Kaloznak hajozas, Birodalminak Alikmia, vagy Meregkeveres, Etuniainak Lovaglas const getKepzettsegListaN = (n: number) => { const kepzettsegekWithoutN = [...kepzettsegek.slice(0, n), ...kepzettsegek.slice(n+1)] return availableKepzettsegList.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !tolvajKepzettsegek.includes(x.Id)) } - if (kepzettsegek.length < numberOfKepzettsegek) { - for (let i = kepzettsegek.length; i < numberOfKepzettsegek; i++) { - const kepzettsegLista = getKepzettsegListaN(i) - if (kepzettsegLista.length > 0) { - kepzettsegek.push(kepzettsegLista[0].Id) - } - } - changeKepzettsegek(kepzettsegek) - } - if (kepzettsegek.length > numberOfKepzettsegek){ - kepzettsegek = kepzettsegek.slice(0, numberOfKepzettsegek) - changeKepzettsegek(kepzettsegek) - } - const getTolvajKepzettsegListaN = (n: number) : Kepzettseg[] => { const tolvajKepzettsegekWithoutN = [...tolvajKepzettsegek.slice(0, n), ...tolvajKepzettsegek.slice(n+1)] return TolvajKepzettsegList.filter(x => !kepzettsegek.includes(x.Id) && !tolvajKepzettsegekWithoutN.includes(x.Id)) diff --git a/src/components/Level2.tsx b/src/components/Level2.tsx index 3a0d1e6..3a6e3d4 100644 --- a/src/components/Level2.tsx +++ b/src/components/Level2.tsx @@ -1,7 +1,9 @@ import React from "react"; -import {KarakterClass, KarakterInputs} from "../domain-models/karakter"; +import {KarakterInputs} from "../domain-models/karakter"; import {SignedNumberToText} from "./Helpers"; -import {Mentok, MentoTipus, MentoTipusLabel} from "../domain-models/mentok"; +import {Mentok, MentoTipus, MentoTipusLabel, MentokTotal} from "../domain-models/mentok"; +import {BaseHP, HP} from "../domain-models/masodlagos_ertekek"; +import {TamadasBonusz} from "../domain-models/tamadas_bonusz"; function MentoNovekedes(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mentok}) { const {tipus, ujMentok, regiMentok} = props @@ -30,10 +32,9 @@ function Level2(props: { rolledHP: number changeRolledHP: (hp: number) => void, }) { - const {karakter, rolledHP, changeRolledHP} = props - const karakterClass = new KarakterClass(karakter) - const regiMentok = karakterClass.MentokTulajdonsaggal(karakter.szint - 1) - const ujMentok = karakterClass.MentokTulajdonsaggal(karakter.szint) + const {karakter, changeRolledHP} = props + const regiMentok = MentokTotal({...karakter, szint: karakter.szint - 1}) + const ujMentok = MentokTotal(karakter) return <>
@@ -42,13 +43,13 @@ function Level2(props: {
- +
changeRolledHP(Number(e.target.value))} /> @@ -65,11 +66,11 @@ function Level2(props: {
- {karakterClass.HP()} + {HP(karakter)}
- {karakterClass.TamadasBonusz().map(SignedNumberToText).join("/")} + {TamadasBonusz(karakter.osztaly, karakter.szint).map(SignedNumberToText).join("/")}
diff --git a/src/components/MasodlagosErtekek.tsx b/src/components/MasodlagosErtekek.tsx index f43190e..bafd558 100644 --- a/src/components/MasodlagosErtekek.tsx +++ b/src/components/MasodlagosErtekek.tsx @@ -1,19 +1,18 @@ import React from "react"; import {OverlayTrigger, Tooltip} from "react-bootstrap"; import {SignedNumberToText} from "./Helpers"; -import {Karakter} from "../domain-models/karakter"; +import {MasodlagosErtekekView} from "../domain-models/masodlagos_ertekek"; +function MasodlagosErtekek(props: MasodlagosErtekekView) { -function MasodlagosErtekek(props: {karakter: Karakter}) { - - const { karakter } = props + const { HP, VO, CelzoTB, Mentok, KozelharciTB } = props const tooltip = ( Hentelési Potenciál ); - const mentok = karakter.MentokTulajdonsaggal(1) + //const mentok = karakter.MentokTulajdonsaggal(1) return <>
@@ -27,33 +26,33 @@ function MasodlagosErtekek(props: {karakter: Karakter}) { (HP) -

{karakter.HP()}

+

{HP}

-

{karakter.VO()}

+

{VO}

-

{SignedNumberToText(karakter.KozelharciTB(1)[0])}

+

{KozelharciTB.map(SignedNumberToText).join(" / ")}

-

{SignedNumberToText(karakter.CelzoTB(1)[0])}

+

{CelzoTB.map(SignedNumberToText).join(" / ")}

-

{SignedNumberToText(mentok.kitartas)}

+

{SignedNumberToText(Mentok.kitartas)}

-

{SignedNumberToText(mentok.reflex)}

+

{SignedNumberToText(Mentok.reflex)}

-

{SignedNumberToText(mentok.akaratero)}

+

{SignedNumberToText(Mentok.akaratero)}

diff --git a/src/components/Tulajdonsagok.tsx b/src/components/Tulajdonsagok.tsx index 197d4c6..ecd6a86 100644 --- a/src/components/Tulajdonsagok.tsx +++ b/src/components/Tulajdonsagok.tsx @@ -19,7 +19,7 @@ function Tulajdonsagok(props: {
Tulajdonságok
diff --git a/src/domain-models/faj.ts b/src/domain-models/faj.ts index c5a09a7..15e0a9a 100644 --- a/src/domain-models/faj.ts +++ b/src/domain-models/faj.ts @@ -81,12 +81,12 @@ export function FajSpecials(faj : Faj) : string[] { case Faj.Elf: return [ "+1 Ügy, -1 Egs", "Immunisak az altató mágiára, +2 mentődobás bűbáj ellen", - "Automatikusan képzettek az íjak és a hoszszúkard használatában akkor is, ha osztályuk ezt nem adná meg nekik", + "Automatikusan képzettek az íjak és a hosszúkard használatában akkor is, ha osztályuk ezt nem adná meg nekik", "Nem támaszthatók föl közönséges mágiával", "Szintkorlátok: Harcos 9, Pap 7, Tolvaj 6, Varázsló 9", ]; case Faj.Felelf: return [ - "Automatikusan képzettek az íjak és a hoszszúkard használatában", + "Automatikusan képzettek az íjak és a hosszúkard használatában", "Szintkorlátok: Harcos 9, Pap 5, Tolvaj 9, Varázsló 9", ]; case Faj.Felork: return [ diff --git a/src/domain-models/karakter.ts b/src/domain-models/karakter.ts index e4d97ec..db0fa93 100644 --- a/src/domain-models/karakter.ts +++ b/src/domain-models/karakter.ts @@ -1,55 +1,7 @@ import {Faj} from "./faj"; import {Osztaly} from "./osztaly"; -import {KarakterTulajdonsagok, Modifier, TulajdonsagModosito} from "./tulajdonsag"; -import {Kepzettseg, Kepzettsegek, KepzettsegId} from "./kepzettsegek"; -import TamadasBonuszTabla from './tamadas_bonus_tabla.json'; -import {ElsodlegesMento, MasodlagosMento, Mentok, MentokAlap, MentoModositok, MentoTipus} from "./mentok"; -import {CelzoTB, KozelharciTB} from "./tamadas_bonusz"; - -export interface Karakter { - Name: string - Nem: string - Kor: number - Isten: string - Faj: Faj - Osztaly: Osztaly - Tulajdonsagok: KarakterTulajdonsagok, - Szint: number - HP: () => number - VO: () => number - Mozgas: () => number - Kezdemenyezes: () => number - KozelharciTB: (szint?: number) => number[] - CelzoTB: (szint?: number) => number[] - ElsodlegesMentok: () => MentoTipus[] - MentokAlap: (szint?: number) => Mentok - MentokTulajdonsaggal: (szint?: number) => Mentok - Kepzettsegek: Kepzettseg[] - TolvajKepzettsegek: Kepzettseg[] -} - -export interface KarakterPdfView { - Name: string - Nem: string - Kor: number - Isten: string - Faj: Faj - Osztaly: Osztaly - Tulajdonsagok: KarakterTulajdonsagok, - TulajdonsagModositok: KarakterTulajdonsagok, - Szint: number - HP: number - VO: number - Mozgas: number - Kezdemenyezes: number - KozelharciTB: number[] - CelzoTB: number[] - MentokAlap: Mentok - MentoModositok: Mentok - MentokModositokkal: Mentok - Kepzettsegek: Kepzettseg[] - TolvajKepzettsegek: Kepzettseg[] -} +import {KarakterTulajdonsagok, TulajdonsagDefaults} from "./tulajdonsag"; +import {KepzettsegId} from "./kepzettsegek"; export interface KarakterInputs { name: string, @@ -65,226 +17,14 @@ export interface KarakterInputs { HProlls: number[], } -function BaseHP(osztaly: Osztaly) { - let base = 4; - switch (osztaly){ - case Osztaly.Barbar: - base = 12 - break; - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - base = 10; - break - case Osztaly.Pap: - base = 8; - break; - case Osztaly.Tolvaj: - base = 6; - break; - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - base = 4; - break; - } - return base +export const KarakterDefaults: KarakterInputs = { + name: "Névtelen Kalandozó", + faj: Faj.Ember, + kor: 20, + tulajdonsagok: TulajdonsagDefaults, + osztaly: Osztaly.Harcos, + kepzettsegek: [], + szint: 1, + HProlls: [], } -export function HP(osztaly: Osztaly, egeszsegModifier: number, hpRolls: number[]): number { - return BaseHP(osztaly) + egeszsegModifier + hpRolls - // https://lfg.hu/forum/topic/15079-kard-es-magia/page/219/#comment-2218333 - .map(hp => Math.max(1, hp + egeszsegModifier)) - .reduce((sum, val) => sum + val, 0) -} - - -export function KarakterInputToPdfView(input: KarakterInputs): KarakterPdfView { - const tulajdonsagModositok = TulajdonsagModosito(input.tulajdonsagok) - const hp = HP(input.osztaly, tulajdonsagModositok.t_egs, input.HProlls) - const vo = 10 + tulajdonsagModositok.t_ugy // TODO: kaloz, amazon! - const mozgas = input.faj === Faj.Torpe ? 20 : 30 - const kezdemenyezes = tulajdonsagModositok.t_ugy + (input.osztaly === Osztaly.Tolvaj ? 4 : 0) - - const mentok = MentokAlap(input.osztaly, input.szint) - const mentoModositok = MentoModositok(tulajdonsagModositok) - - return { - Faj: input.faj, - Isten: input.isten || "", - Kor: input.kor, - Name: input.name, - Nem: input.nem || "", - Tulajdonsagok: input.tulajdonsagok, - Osztaly: input.osztaly, - Szint: input.szint, - Kepzettsegek: input.kepzettsegek.map(id => Kepzettsegek[id]), - TolvajKepzettsegek: input.tolvajKepzettsegek?.map(id => Kepzettsegek[id]) || [], - TulajdonsagModositok: tulajdonsagModositok, - - HP: hp, - VO: vo, - Mozgas: mozgas, - Kezdemenyezes: kezdemenyezes, - KozelharciTB: KozelharciTB(input), - CelzoTB: CelzoTB(input), - - MentoModositok: mentoModositok, - MentokAlap: mentok, - MentokModositokkal: { - kitartas: mentok.kitartas + mentoModositok.kitartas, - akaratero: mentok.akaratero + mentoModositok.akaratero, - reflex: mentok.reflex + mentoModositok.reflex, - } - } -} - -/// deprecated -export class KarakterClass implements Karakter { - - public Name : string - public Nem : string - public Kor : number - public Isten : string - public Faj : Faj - public Osztaly : Osztaly - public Tulajdonsagok : KarakterTulajdonsagok - public Szint : number = 1 - public Kepzettsegek: Kepzettseg[] - public TolvajKepzettsegek: Kepzettseg[] - - private HProlls: number[] - - constructor(inputs: KarakterInputs) { - this.Name = inputs.name - this.Nem = inputs.nem || "" - this.Kor = inputs.kor - this.Isten = inputs.isten || "" - this.Faj = inputs.faj - this.Osztaly = inputs.osztaly - this.Tulajdonsagok = inputs.tulajdonsagok - this.Kepzettsegek = inputs.kepzettsegek.map(k => Kepzettsegek[k]) - this.TolvajKepzettsegek = (inputs.tolvajKepzettsegek || []).map(k => Kepzettsegek[k]) - this.Szint = Math.min(Math.max(1,inputs.szint), 20) - this.HProlls = inputs.HProlls - } - - public HP = () => this.baseHP() + Modifier(this.Tulajdonsagok.t_egs) + this.HProlls - // https://lfg.hu/forum/topic/15079-kard-es-magia/page/219/#comment-2218333 - .map(hp => Math.max(1, hp + Modifier(this.Tulajdonsagok.t_egs))) - .reduce((sum, val) => sum + val, 0) - - public VO = () => 10 + Modifier(this.Tulajdonsagok.t_ugy) - - public Mozgas = () => this.Faj === Faj.Torpe ? 20 : 30 - - public Kezdemenyezes() : number { - return Modifier(this.Tulajdonsagok.t_ugy) + (this.Osztaly === Osztaly.Tolvaj ? 4 : 0) - } - - public TamadasBonusz(szint: number = this.Szint) : number[] { - let base = [] - switch (this.Osztaly){ - case Osztaly.Barbar: - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - base = TamadasBonuszTabla['elsodleges']; - break; - case Osztaly.Pap: - case Osztaly.Tolvaj: - base = TamadasBonuszTabla['ketharmados']; - break; - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - base = TamadasBonuszTabla['feles']; - break; - } - return base[szint-1] - } - - public KozelharciTB(szint: number = this.Szint): number[] { - const base = this.TamadasBonusz(szint); - let modifier = Modifier(this.Tulajdonsagok.t_ero) - if (this.Osztaly === Osztaly.Kaloz && this.Tulajdonsagok.t_ugy > this.Tulajdonsagok.t_ero) { - modifier = Modifier(this.Tulajdonsagok.t_ugy) - } - return base.map(v => v + modifier) - } - public CelzoTB(szint: number = this.Szint): number[] { - let base = this.TamadasBonusz(szint) - if (this.Osztaly === Osztaly.Ijasz) { - base = [base[0], ...base] - } - return base.map(v => v + Modifier(this.Tulajdonsagok.t_ugy)) - } - - public ElsodlegesMentok() : MentoTipus[] { - let t: MentoTipus[] = [] - switch (this.Osztaly){ - case Osztaly.Barbar: - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - t = ['kitartas']; - break; - case Osztaly.Pap: - t = ['kitartas', 'akaratero']; - break; - case Osztaly.Tolvaj: - t = ['reflex']; - break; - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - t = ['akaratero'] - break; - } - return t - } - - public MentokAlap(szint: number = this.Szint) { - const elsodlegesek = this.ElsodlegesMentok() - return { - kitartas: elsodlegesek.includes('kitartas') ? ElsodlegesMento(szint) : MasodlagosMento(szint), - reflex: elsodlegesek.includes('reflex') ? ElsodlegesMento(szint) : MasodlagosMento(szint), - akaratero: elsodlegesek.includes('akaratero') ? ElsodlegesMento(szint) : MasodlagosMento(szint), - } - } - - public MentokTulajdonsaggal(szint: number = this.Szint) { - const mentok = this.MentokAlap(szint) - return { - kitartas: mentok.kitartas + Modifier(this.Tulajdonsagok.t_egs), - reflex: mentok.reflex + Modifier(this.Tulajdonsagok.t_ugy), - akaratero: mentok.akaratero + Modifier(this.Tulajdonsagok.t_bol), - } - } - - public baseHP() { - let base = 4; - switch (this.Osztaly){ - case Osztaly.Barbar: - base = 12 - break; - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - base = 10; - break - case Osztaly.Pap: - base = 8; - break; - case Osztaly.Tolvaj: - base = 6; - break; - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - base = 4; - break; - } - return base - } -} \ No newline at end of file diff --git a/src/domain-models/kepzettsegek.ts b/src/domain-models/kepzettsegek.ts index 8c246cb..26ea770 100644 --- a/src/domain-models/kepzettsegek.ts +++ b/src/domain-models/kepzettsegek.ts @@ -1,5 +1,9 @@ -import {Tulajdonsag} from "./tulajdonsag"; +import {Modifier, Tulajdonsag} from "./tulajdonsag"; import {Osztaly} from "./osztaly"; +import {Faj} from "./faj"; +import {KarakterInputs} from "./karakter"; +import karakterKepzettsegek from "../components/KarakterKepzettsegek"; +import tulajdonsagok from "../components/Tulajdonsagok"; export type KepzettsegId = 'k_alkimia' | 'k_alcazas' | 'k_allatidomitas' | 'k_csapdak' | 'k_csillagjoslas' | 'k_egyensulyozas' | 'k_eloadas' | 'k_ertekbecsles' | 'k_gyogyitas' | 'k_hajozas' | 'k_hallgatozas' | 'k_hamisitas' | 'k_jelek_olvasasa' | 'k_koncentracio' | 'k_lovaglas' | 'k_maszas' | 'k_megfigyeles' | 'k_meregkeveres' | 'k_mesterseg' | 'k_nyomkereses' | 'k_osonas' | 'k_rejtozes' | 'k_szabadulomuveszet' | 'k_tudas' | 'k_ugras' | 'k_uszas' | 'k_varazslatismeret' | 'k_zarnyitas' | 'k_zsebmetszes' @@ -210,4 +214,51 @@ export const Kepzettsegek: Record = export function AvailableKezpettsegList(osztaly: Osztaly): Kepzettseg[] { return KepzettsegLista.filter(k => k.Osztalyok == null || k.Osztalyok.includes(osztaly)) +} + +export function GetNumberOfKepzettsegek(t_int: number, faj: Faj, max: number) { + let numberOfKepzettseg = 3 + Modifier(t_int) + (faj === Faj.Ember ? 1 : 0) + console.log('Raw Number of Kepzetsegek = ', numberOfKepzettseg) + + if (numberOfKepzettseg < 1) { + numberOfKepzettseg = 1 + } + if (numberOfKepzettseg > max) { + numberOfKepzettseg = max + } + console.log('Adjusted Number of Kepzetsegek = ', numberOfKepzettseg) + return numberOfKepzettseg; +} + +export function SetDefaultTolvajKepzettsegek(karakter: Pick, changeTolvajKepzettsegek: (tolvajKepzettsegek?: KepzettsegId[]) => void) { + if (karakter.osztaly !== Osztaly.Tolvaj && karakter.tolvajKepzettsegek != null) { + changeTolvajKepzettsegek(undefined) + } + if (karakter.osztaly === Osztaly.Tolvaj && (karakter.tolvajKepzettsegek == null || karakter.tolvajKepzettsegek.length === 0)) { + const tolvajKepzettsegek = TolvajKepzettsegList.slice(0, 4).map(x => x.Id) + changeTolvajKepzettsegek(tolvajKepzettsegek) + } +} + +export function SetDefaultKepzettsegek(karakter: Pick, changeKepzettsegek: (k: KepzettsegId[]) => void) { + const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) + const numberOfKepzettsegek = GetNumberOfKepzettsegek(karakter.tulajdonsagok.t_int, karakter.faj, availableKepzettsegList.length) + let kepzettsegek = karakter.kepzettsegek + const getKepzettsegListaN = (n: number) => { + const kepzettsegekWithoutN = [...kepzettsegek.slice(0, n), ...kepzettsegek.slice(n+1)] + return availableKepzettsegList.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !karakter.tolvajKepzettsegek?.includes(x.Id)) + } + if (kepzettsegek.length < numberOfKepzettsegek) { + for (let i = kepzettsegek.length; i < numberOfKepzettsegek; i++) { + const kepzettsegLista = getKepzettsegListaN(i) + if (kepzettsegLista.length > 0) { + kepzettsegek.push(kepzettsegLista[0].Id) + } + } + changeKepzettsegek(kepzettsegek) + } + if (kepzettsegek.length > numberOfKepzettsegek){ + kepzettsegek = kepzettsegek.slice(0, numberOfKepzettsegek) + changeKepzettsegek(kepzettsegek) + } } \ No newline at end of file diff --git a/src/domain-models/masodlagos_ertekek.ts b/src/domain-models/masodlagos_ertekek.ts new file mode 100644 index 0000000..9172222 --- /dev/null +++ b/src/domain-models/masodlagos_ertekek.ts @@ -0,0 +1,63 @@ +import {Mentok, MentokTotal} from "./mentok"; +import {Osztaly} from "./osztaly"; +import {KarakterInputs} from "./karakter"; +import {Modifier} from "./tulajdonsag"; +import {CelzoTB, KozelharciTB} from "./tamadas_bonusz"; + +export interface MasodlagosErtekekView { + HP: number + VO: number + KozelharciTB: number[] + CelzoTB: number[] + Mentok: Mentok +} + +export type KarakterpickForMasodlagosErtekek = Pick + +export function BaseHP(osztaly: Osztaly) { + let base = 4; + switch (osztaly){ + case Osztaly.Barbar: + base = 12 + break; + case Osztaly.Amazon: + case Osztaly.Ijasz: + case Osztaly.Kaloz: + case Osztaly.Harcos: + base = 10; + break + case Osztaly.Pap: + base = 8; + break; + case Osztaly.Tolvaj: + base = 6; + break; + case Osztaly.Varazslo: + case Osztaly.Illuzionista: + base = 4; + break; + } + return base +} + +export function HP(karakter: Pick): number { + const egeszsegModifier = Modifier(karakter.tulajdonsagok.t_egs) + return BaseHP(karakter.osztaly) + egeszsegModifier + karakter.HProlls + // https://lfg.hu/forum/topic/15079-kard-es-magia/page/219/#comment-2218333 + .map(hp => Math.max(1, hp + egeszsegModifier)) + .reduce((sum, val) => sum + val, 0) +} + +export function VO(karakter: Pick): number { + return 10 + Modifier(karakter.tulajdonsagok.t_ugy) // TODO: Kaloz, Amazon +} + +export function CalculateMasodlagosErtekek(karakter: KarakterpickForMasodlagosErtekek): MasodlagosErtekekView { + return { + HP: HP(karakter), + VO: VO(karakter), + CelzoTB: CelzoTB(karakter), + KozelharciTB: KozelharciTB(karakter), + Mentok: MentokTotal(karakter) + } +} \ No newline at end of file diff --git a/src/domain-models/mentok.ts b/src/domain-models/mentok.ts index d855923..c623bf2 100644 --- a/src/domain-models/mentok.ts +++ b/src/domain-models/mentok.ts @@ -1,5 +1,6 @@ import {Osztaly} from "./osztaly"; -import {KarakterTulajdonsagok} from "./tulajdonsag"; +import {KarakterTulajdonsagok, TulajdonsagModosito} from "./tulajdonsag"; +import {KarakterInputs} from "./karakter"; export interface Mentok { kitartas: number @@ -66,4 +67,14 @@ export function MentoModositok(tulajdonsagModositok: KarakterTulajdonsagok) { reflex: tulajdonsagModositok.t_ugy, akaratero: tulajdonsagModositok.t_bol, } +} + +export function MentokTotal(karakter: Pick) { + const alap = MentokAlap(karakter.osztaly, karakter.szint) + const modositok = MentoModositok(TulajdonsagModosito(karakter.tulajdonsagok)) + return { + kitartas: alap.kitartas + modositok.kitartas, + reflex: alap.kitartas + modositok.kitartas, + akaratero: alap.akaratero + modositok.akaratero, + } } \ No newline at end of file diff --git a/src/domain-models/tulajdonsag.ts b/src/domain-models/tulajdonsag.ts index c6cf945..691b91f 100644 --- a/src/domain-models/tulajdonsag.ts +++ b/src/domain-models/tulajdonsag.ts @@ -12,6 +12,15 @@ export enum Tulajdonsag { export type KarakterTulajdonsagok = Record +export const TulajdonsagDefaults: KarakterTulajdonsagok = { + t_ero: 10, + t_ugy: 10, + t_egs: 10, + t_int: 10, + t_bol: 10, + t_kar: 10, +} + export function TulajdonsagLabel(tul: Tulajdonsag) : string { switch (tul) { case Tulajdonsag.Bolcsesseg: return 'Bölcsesség'; @@ -33,22 +42,22 @@ function rollAbility() { min = roll; } sum += roll; - rolls = [...rolls, roll] + rolls.push(roll) } const result = sum - min; console.log("Rolled: " + rolls + " got: " + result) return result; } -export function RollAllAbilities(setValue: (newValue: KarakterTulajdonsagok) => void) { - setValue({ +export function RollAllAbilities() : KarakterTulajdonsagok { + return { t_ero: rollAbility(), t_ugy: rollAbility(), t_egs: rollAbility(), t_int: rollAbility(), t_bol: rollAbility(), t_kar: rollAbility(), - }) + } } export const Modifier = (val : number) => Math.floor(val / 3) - 3 diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index 7e6d6f2..c77e0bd 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -6,68 +6,35 @@ import FajSelector from "../components/FajSelector"; import Tulajdonsagok from "../components/Tulajdonsagok"; import OsztalySelector from "../components/OsztalySelector"; import KarakterKepzettsegek from "../components/KarakterKepzettsegek"; -import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag"; +import {KarakterTulajdonsagok} from "../domain-models/tulajdonsag"; import MasodlagosErtekek from "../components/MasodlagosErtekek"; -import {AvailableKezpettsegList, TolvajKepzettsegList} from "../domain-models/kepzettsegek"; +import { + AvailableKezpettsegList, + GetNumberOfKepzettsegek, KepzettsegId, SetDefaultKepzettsegek, + SetDefaultTolvajKepzettsegek, +} from "../domain-models/kepzettsegek"; import {CreatePDF} from "../pdf/character.pdf"; -import {KarakterClass, KarakterInputs, KarakterInputToPdfView} from "../domain-models/karakter"; +import {KarakterDefaults} from "../domain-models/karakter"; import Level2 from "../components/Level2"; import {dAny} from "../domain-models/kockak"; - -const tulajdonsagDefaults: KarakterTulajdonsagok = { - t_ero: 10, - t_ugy: 10, - t_egs: 10, - t_int: 10, - t_bol: 10, - t_kar: 10, -} - -const karakterDefaults: KarakterInputs = { - name: "Névtelen Kalandozó", - faj: Faj.Ember, - kor: 20, - tulajdonsagok: tulajdonsagDefaults, - osztaly: Osztaly.Harcos, - kepzettsegek: [], - szint: 1, - HProlls: [], -} - -function getNumberOfKepzettsegek(t_int: number, faj: Faj, max: number) { - let numberOfKepzettseg = 3 + Modifier(t_int) + (faj === Faj.Ember ? 1 : 0) - console.log('Raw Number of Kepzetsegek = ', numberOfKepzettseg) - - if (numberOfKepzettseg < 1) { - numberOfKepzettseg = 1 - } - if (numberOfKepzettseg > max) { - numberOfKepzettseg = max - } - console.log('Adjusted Number of Kepzetsegek = ', numberOfKepzettseg) - return numberOfKepzettseg; -} +import {BaseHP, CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; +import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view"; function CreateCharacterPage() { - let [karakter, changeKarakter] = useState(karakterDefaults) - const karakterClass = new KarakterClass(karakter) + let [karakter, changeKarakter] = useState(KarakterDefaults) + + SetDefaultTolvajKepzettsegek(karakter, (tk) => changeKarakter({...karakter, tolvajKepzettsegek: tk})) + SetDefaultKepzettsegek(karakter, (k: KepzettsegId[]) => changeKarakter({...karakter, kepzettsegek: k})) const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) - if (karakter.osztaly !== Osztaly.Tolvaj && karakter.tolvajKepzettsegek != null) { - changeKarakter({...karakter, tolvajKepzettsegek: undefined}) - } - if (karakter.osztaly === Osztaly.Tolvaj && (karakter.tolvajKepzettsegek == null || karakter.tolvajKepzettsegek.length === 0)) { - const tolvajKepzettsegek = TolvajKepzettsegList.slice(0, 4).map(x => x.Id) - changeKarakter({...karakter, tolvajKepzettsegek: tolvajKepzettsegek}) - } - function levelUp() { - const dice = karakterClass.baseHP() + const szint = karakter.szint + 1 + const dice = BaseHP(karakter.osztaly) const roll = dAny(dice) - console.log(`Level 2 HP roll on d${dice} is: ${roll}`) - changeKarakter({...karakter, szint: karakter.szint + 1, HProlls: [...karakter.HProlls, roll]}) + console.log(`Level ${szint} HP roll on d${dice} is: ${roll}`) + changeKarakter({...karakter, szint: szint, HProlls: [...karakter.HProlls, roll]}) } function levelDown() { @@ -79,6 +46,8 @@ function CreateCharacterPage() { console.log(karakter) } + const masodlagosErtekek = CalculateMasodlagosErtekek({...karakter, szint: 1, HProlls: []}) + return (
@@ -136,7 +105,7 @@ function CreateCharacterPage() { /> changeKarakter({...karakter, kepzettsegek: ks}) } tolvajKepzettsegek={karakter.tolvajKepzettsegek || []} @@ -144,7 +113,7 @@ function CreateCharacterPage() { />
- + {karakter.szint > 1 && } diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts index 9729bfb..05821e2 100644 --- a/src/pdf/character.pdf.ts +++ b/src/pdf/character.pdf.ts @@ -1,4 +1,4 @@ -import {KarakterPdfView} from "../domain-models/karakter"; +import {KarakterPdfView} from "./karakter_pdf_view"; import {PDFDocument, PDFFont, PDFPage, rgb} from "pdf-lib"; import fontkit from '@pdf-lib/fontkit' import {OsztalyLabel} from "../domain-models/osztaly"; diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts new file mode 100644 index 0000000..37ae7a7 --- /dev/null +++ b/src/pdf/karakter_pdf_view.ts @@ -0,0 +1,66 @@ +import {KarakterTulajdonsagok, TulajdonsagModosito} from "../domain-models/tulajdonsag"; +import {Mentok, MentokAlap, MentoModositok} from "../domain-models/mentok"; +import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek"; +import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; +import {Faj} from "../domain-models/faj"; +import {Osztaly} from "../domain-models/osztaly"; +import {CelzoTB, KozelharciTB} from "../domain-models/tamadas_bonusz"; +import {KarakterInputs} from "../domain-models/karakter"; + +export interface KarakterPdfView { + Name: string + Nem: string + Kor: number + Isten: string + Faj: Faj + Osztaly: Osztaly + Tulajdonsagok: KarakterTulajdonsagok, + TulajdonsagModositok: KarakterTulajdonsagok, + Szint: number + HP: number + VO: number + Mozgas: number + Kezdemenyezes: number + KozelharciTB: number[] + CelzoTB: number[] + MentokAlap: Mentok + MentoModositok: Mentok + MentokModositokkal: Mentok + Kepzettsegek: Kepzettseg[] + TolvajKepzettsegek: Kepzettseg[] +} + +export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView { + const masodlagosErtekek = CalculateMasodlagosErtekek(karakter) + const tulajdonsagModositok = TulajdonsagModosito(karakter.tulajdonsagok) + const mozgas = karakter.faj === Faj.Torpe ? 20 : 30 + const kezdemenyezes = tulajdonsagModositok.t_ugy + (karakter.osztaly === Osztaly.Tolvaj ? 4 : 0) + + const mentok = MentokAlap(karakter.osztaly, karakter.szint) + const mentoModositok = MentoModositok(tulajdonsagModositok) + + return { + Faj: karakter.faj, + Isten: karakter.isten || "", + Kor: karakter.kor, + Name: karakter.name, + Nem: karakter.nem || "", + Tulajdonsagok: karakter.tulajdonsagok, + Osztaly: karakter.osztaly, + Szint: karakter.szint, + Kepzettsegek: karakter.kepzettsegek.map(id => Kepzettsegek[id]), + TolvajKepzettsegek: karakter.tolvajKepzettsegek?.map(id => Kepzettsegek[id]) || [], + TulajdonsagModositok: tulajdonsagModositok, + + HP: masodlagosErtekek.HP, + VO: masodlagosErtekek.VO, + Mozgas: mozgas, + Kezdemenyezes: kezdemenyezes, + KozelharciTB: KozelharciTB(karakter), + CelzoTB: CelzoTB(karakter), + + MentoModositok: mentoModositok, + MentokAlap: mentok, + MentokModositokkal: masodlagosErtekek.Mentok + } +}