mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 11:23:47 +00:00
feat: multiclassing almost works in 2e
This commit is contained in:
@@ -3,7 +3,8 @@ import {Karakter2E} from "../domain-models/karakter2E";
|
||||
import {SignedNumberToText} from "../../shared/components/Helpers";
|
||||
import {Mentok, MentoTipus, MentoTipusLabel, MentokTotal} from "../domain-models/mentok";
|
||||
import {BaseHP, HP} from "../domain-models/masodlagos_ertekek";
|
||||
import {TamadasBonusz} from "../domain-models/tamadas_bonusz";
|
||||
import {MultiClassTamadasBonusz} from "../domain-models/tamadas_bonusz";
|
||||
import {Osztaly2E} from "../domain-models/osztaly2E";
|
||||
|
||||
function MentoNovekedes(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mentok}) {
|
||||
const {tipus, ujMentok, regiMentok} = props
|
||||
@@ -28,16 +29,17 @@ function UjMento(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mento
|
||||
}
|
||||
|
||||
function BasicNewLevel(props: {
|
||||
karakter: Pick<Karakter2E, 'osztaly' | 'tulajdonsagok' | 'szintlepesek'>
|
||||
karakter: Pick<Karakter2E, 'tulajdonsagok' | 'szintlepesek'>
|
||||
szint: number
|
||||
osztaly: Osztaly2E
|
||||
changeRolledHP: (hp: number) => void,
|
||||
}) {
|
||||
const {karakter, szint, changeRolledHP} = props
|
||||
const regiMentok = MentokTotal({...karakter, szint: szint - 1})
|
||||
const ujMentok = MentokTotal({...karakter, szint: szint})
|
||||
const {karakter, szint, osztaly, changeRolledHP} = props
|
||||
const regiMentok = MentokTotal({...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint - 1)})
|
||||
const ujMentok = MentokTotal({...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint)})
|
||||
|
||||
const regiTB = TamadasBonusz(karakter.osztaly, szint-1)
|
||||
const ujTB = TamadasBonusz(karakter.osztaly, szint)
|
||||
const regiTB = MultiClassTamadasBonusz(karakter.szintlepesek.slice(0, szint-1))
|
||||
const ujTB = MultiClassTamadasBonusz(karakter.szintlepesek.slice(0, szint))
|
||||
if (regiTB.length < ujTB.length) {
|
||||
regiTB.push(0)
|
||||
}
|
||||
@@ -48,7 +50,7 @@ function BasicNewLevel(props: {
|
||||
<div className='row'>
|
||||
<div className='col-lg-6'>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label'>Plusz dobott HP (d{BaseHP(karakter.osztaly)}){' '}</label>
|
||||
<label className='col-sm-6 col-8 col-form-label'>Plusz dobott HP (d{BaseHP(osztaly)}){' '}</label>
|
||||
<div className='col-sm-2 col'>
|
||||
<input
|
||||
className='form-control'
|
||||
@@ -71,7 +73,7 @@ function BasicNewLevel(props: {
|
||||
<div className='col-lg-6'>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label'>Új HP{' '}</label>
|
||||
<span className='col col-form-label'>{HP({...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint-1)})}</span>
|
||||
<span className='col col-form-label'>{HP({...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint)})}</span>
|
||||
</div>
|
||||
{isTBincreased && <div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label'>Új Támadás bónusz{' '}</label>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React from "react";
|
||||
import {Karakter2E} from "../domain-models/karakter2E";
|
||||
import {ChangeOsztalyAtSzint, Karakter2E} from "../domain-models/karakter2E";
|
||||
import BasicNewLevel from "./BasicNewLevel";
|
||||
import TulajdonsagNoveles from "./TulajdonsagNoveles";
|
||||
import {Tulajdonsag2E, TulajdonsagokTotal} from "../domain-models/tulajdonsag2E";
|
||||
@@ -7,24 +7,31 @@ import {arraySetN} from "../../util";
|
||||
import {Osztaly2E} from "../domain-models/osztaly2E";
|
||||
import KalozKritikus from "./KalozKritikus";
|
||||
import HarcosFegyverSpecializacio from "./HarcosFegyverSpec";
|
||||
import {BasicOsztalySelector2E} from "./OsztalySelector2E";
|
||||
|
||||
function LevelUp(props: {
|
||||
szint: number,
|
||||
osztaly: Osztaly2E,
|
||||
karakter: Karakter2E,
|
||||
changeTulajdonsagNoveles: (t: Tulajdonsag2E) => void,
|
||||
changeRolledHP: (rolledHP: number) => void,
|
||||
changeHarcosSpec: (spec: string) => void,
|
||||
changeKalozKritikus: (krit: string) => void,
|
||||
changeOsztaly: (osztaly: Osztaly2E) => void
|
||||
}) {
|
||||
const {
|
||||
szint,
|
||||
osztaly,
|
||||
karakter,
|
||||
changeTulajdonsagNoveles,
|
||||
changeRolledHP,
|
||||
changeHarcosSpec,
|
||||
changeKalozKritikus,
|
||||
changeOsztaly
|
||||
} = props
|
||||
|
||||
const harcosSzint = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Harcos).length
|
||||
const kalozSzint = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Tengeresz).length
|
||||
const specialization = karakter.szintlepesek[szint-1].harcosFegyver
|
||||
const krit = karakter.szintlepesek[szint-1].kalozKritikus
|
||||
|
||||
@@ -32,6 +39,7 @@ function LevelUp(props: {
|
||||
<div className='row mt-3'>
|
||||
<h5 className='col align-self-center'>{szint}. Szint</h5>
|
||||
</div>
|
||||
<BasicOsztalySelector2E faj={karakter.faj} osztaly={osztaly} changeOsztaly={changeOsztaly} />
|
||||
{szint % 4 === 0
|
||||
&& <TulajdonsagNoveles
|
||||
tulajdonsagok={karakter.tulajdonsagok}
|
||||
@@ -41,22 +49,23 @@ function LevelUp(props: {
|
||||
<BasicNewLevel
|
||||
szint={szint}
|
||||
karakter={karakter}
|
||||
osztaly={osztaly}
|
||||
changeRolledHP={changeRolledHP}
|
||||
/>
|
||||
{karakter.osztaly === Osztaly2E.Harcos && szint % 2 === 1 &&
|
||||
{osztaly === Osztaly2E.Harcos && harcosSzint % 2 === 1 &&
|
||||
<HarcosFegyverSpecializacio
|
||||
specialization={specialization!}
|
||||
existingSpecializations={karakter.szintlepesek.map(x => x.harcosFegyver)}
|
||||
changeSpecialization={changeHarcosSpec}
|
||||
szint={szint}
|
||||
szint={harcosSzint}
|
||||
/>
|
||||
}
|
||||
{karakter.osztaly === Osztaly2E.Tengeresz && szint % 3 === 0 && !!krit &&
|
||||
{osztaly === Osztaly2E.Tengeresz && kalozSzint % 3 === 0 && !!krit &&
|
||||
<KalozKritikus
|
||||
kritFegyverId={krit}
|
||||
existingKrits={karakter.szintlepesek.map(x => x.kalozKritikus)}
|
||||
changeKrit={changeKalozKritikus}
|
||||
szint={szint}
|
||||
szint={kalozSzint}
|
||||
/>
|
||||
}
|
||||
</div>
|
||||
@@ -65,10 +74,10 @@ function LevelUp(props: {
|
||||
export function LevelUps(props: {karakter: Karakter2E, changeKarakter: (inputs: Karakter2E) => void}){
|
||||
const {karakter, changeKarakter} = props;
|
||||
|
||||
const tulajdonsagokAtSzint = (szint: number) => TulajdonsagokTotal({...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint - 1)})
|
||||
const tulajdonsagokAtSzint = (szint: number) => TulajdonsagokTotal({...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint)})
|
||||
|
||||
const changeRolledHPAtSzint = (szint: number) => (newHProll: number) => {
|
||||
changeKarakter({...karakter, szintlepesek: arraySetN(karakter.szintlepesek, szint-2, {...karakter.szintlepesek[szint-2], HProll: newHProll})})
|
||||
changeKarakter({...karakter, szintlepesek: arraySetN(karakter.szintlepesek, szint-1, {...karakter.szintlepesek[szint-1], HProll: newHProll})})
|
||||
console.log(karakter)
|
||||
}
|
||||
const changeTulajdonsagNovelesAtSzint = (szint: number) => {
|
||||
@@ -113,11 +122,13 @@ export function LevelUps(props: {karakter: Karakter2E, changeKarakter: (inputs:
|
||||
<LevelUp
|
||||
key={`level-up-${szint}`}
|
||||
szint={szint}
|
||||
karakter={{...karakter, tulajdonsagok: tulajdonsagokAtSzint(szint)}}
|
||||
osztaly={karakter.szintlepesek[szint-1].osztaly}
|
||||
karakter={{...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint) ,tulajdonsagok: tulajdonsagokAtSzint(szint)}}
|
||||
changeTulajdonsagNoveles={changeTulajdonsagNovelesAtSzint(szint)}
|
||||
changeRolledHP={changeRolledHPAtSzint(szint)}
|
||||
changeHarcosSpec={changeHarcosSpecializacioAtSzint(szint)}
|
||||
changeKalozKritikus={changeKalozKritikusAtSzint(szint)}
|
||||
changeOsztaly={(o) => changeKarakter(ChangeOsztalyAtSzint(karakter, o, szint))}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
|
||||
@@ -8,21 +8,16 @@ import {
|
||||
} from "../domain-models/osztaly2E";
|
||||
import {Faj2E, SzintKorlatokFajokra} from "../domain-models/faj2E";
|
||||
|
||||
function OsztalySelector2E(props: {
|
||||
currentFaj: Faj2E,
|
||||
currentOsztaly: Osztaly2E,
|
||||
changeOsztaly: (newOsztaly: Osztaly2E) => void
|
||||
}) {
|
||||
const {currentFaj, currentOsztaly, changeOsztaly} = props;
|
||||
|
||||
export function BasicOsztalySelector2E(props: {faj: Faj2E, osztaly: Osztaly2E, changeOsztaly: (osztaly: Osztaly2E) => void}) {
|
||||
const {faj, osztaly, changeOsztaly} = props;
|
||||
return <>
|
||||
<div className='row m-2'>
|
||||
<label className='col-md-2 col-sm-3 col-form-label'>Osztály</label>
|
||||
<select className="col form-select" value={currentOsztaly}
|
||||
<select className="col form-select" value={osztaly}
|
||||
onChange={(e) => changeOsztaly(e.target.value as Osztaly2E)}>
|
||||
<optgroup label='Harcos'>
|
||||
<option value={Osztaly2E.Harcos}>{OsztalyLabel(Osztaly2E.Harcos)}</option>
|
||||
{SzintKorlatokFajokra(currentFaj)[Osztaly2E.Amazon] > 0 && (
|
||||
{SzintKorlatokFajokra(faj)[Osztaly2E.Amazon] > 0 && (
|
||||
<option value={Osztaly2E.Amazon}>{OsztalyLabel(Osztaly2E.Amazon)}</option>)}
|
||||
<option value={Osztaly2E.Barbar}>{OsztalyLabel(Osztaly2E.Barbar)}</option>
|
||||
<option value={Osztaly2E.Ijasz}>{OsztalyLabel(Osztaly2E.Ijasz)}</option>
|
||||
@@ -41,6 +36,18 @@ function OsztalySelector2E(props: {
|
||||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
|
||||
function OsztalySelector2E(props: {
|
||||
currentFaj: Faj2E,
|
||||
currentOsztaly: Osztaly2E,
|
||||
changeOsztaly: (newOsztaly: Osztaly2E) => void
|
||||
}) {
|
||||
const {currentFaj, currentOsztaly, changeOsztaly} = props;
|
||||
|
||||
return <>
|
||||
<BasicOsztalySelector2E faj={currentFaj} osztaly={currentOsztaly} changeOsztaly={changeOsztaly} />
|
||||
<div className='row m-2'>
|
||||
<label className='col-md-2 col-sm-3 form-label'></label>
|
||||
<div className='col'>
|
||||
|
||||
Reference in New Issue
Block a user