add MasodlagosErtekek.tsx
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
export function SignedNumberToText(val: number) : string {
|
||||
return val > 0 ? '+'+val : val.toString()
|
||||
}
|
||||
@@ -2,7 +2,13 @@ import React from "react";
|
||||
import KepzettsegSelector from "./KepzettsegSelector";
|
||||
import {Osztaly} from "../domain-models/osztaly";
|
||||
import {UseFormRegisterReturn} from "react-hook-form";
|
||||
import {Kepzettseg, Kepzettsegek, KepzettsegId, KepzettsegLista} from "../domain-models/kepzettsegek";
|
||||
import {
|
||||
AvailableKezpettsegList,
|
||||
Kepzettseg,
|
||||
Kepzettsegek,
|
||||
KepzettsegId,
|
||||
KepzettsegLista
|
||||
} from "../domain-models/kepzettsegek";
|
||||
import {Modifier} from "../domain-models/tulajdonsag";
|
||||
import {Faj} from "../domain-models/faj";
|
||||
|
||||
@@ -42,7 +48,7 @@ function KarakterKepzettsegek (props: {
|
||||
}) {
|
||||
const { faj, osztaly, t_int, register, watch } = props
|
||||
|
||||
const availableKepzettsegList = KepzettsegLista.filter(k => k.Osztalyok == null || k.Osztalyok.includes(osztaly))
|
||||
const availableKepzettsegList = AvailableKezpettsegList(osztaly)
|
||||
|
||||
let numberOfKepzettseg = 3 + Modifier(t_int) + (faj === Faj.Ember ? 1 : 0)
|
||||
console.log('Raw Number of Kepzetsegek = ', numberOfKepzettseg)
|
||||
@@ -74,7 +80,7 @@ function KarakterKepzettsegek (props: {
|
||||
}
|
||||
|
||||
const tolvajKepzettsegek = KepzettsegLista.filter(k => k.Osztalyok != null && k.Osztalyok.includes(Osztaly.Tolvaj))
|
||||
const getTolvajKepzettsegN = (n: number) => Kepzettsegek[watch('tolvaj_kep_'+n, tolvajKepzettsegek[n].Id) as KepzettsegId]
|
||||
const getTolvajKepzettsegN = (n: number) => Kepzettsegek[watch('tolvaj_kepzettseg.'+n, tolvajKepzettsegek[n].Id) as KepzettsegId]
|
||||
|
||||
const getTolvajKepzettsegListaN = (n: number) => {
|
||||
let response = tolvajKepzettsegek;
|
||||
@@ -98,7 +104,7 @@ function KarakterKepzettsegek (props: {
|
||||
numberOfKepzettseg={numberOfKepzettseg}
|
||||
availableKepzettsegList={availableKepzettsegList}
|
||||
getKepzettsegListaN={getKepzettsegListaN}
|
||||
register={(n: number) => register('kep_' + n)}
|
||||
register={(n: number) => register('kepzettseg.' + n)}
|
||||
getKepzettsegN={getKepzettsegN} />
|
||||
{osztaly === Osztaly.Tolvaj &&
|
||||
<InternalKepzettsegekSelector
|
||||
@@ -106,7 +112,7 @@ function KarakterKepzettsegek (props: {
|
||||
numberOfKepzettseg={4}
|
||||
availableKepzettsegList={tolvajKepzettsegek}
|
||||
getKepzettsegListaN={getTolvajKepzettsegListaN}
|
||||
register={(n: number) => register('tolvaj_kep_' + n)}
|
||||
register={(n: number) => register('tolvaj_kepzettseg.' + n)}
|
||||
getKepzettsegN={getTolvajKepzettsegN} />}
|
||||
</>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
import React from "react";
|
||||
import {Osztaly} from "../domain-models/osztaly";
|
||||
import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag";
|
||||
import {OverlayTrigger, Tooltip} from "react-bootstrap";
|
||||
import {SignedNumberToText} from "./Helpers";
|
||||
|
||||
function HP(osztaly: Osztaly, egeszseg: number) {
|
||||
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 + Modifier(egeszseg)
|
||||
}
|
||||
|
||||
function TamadasBonusz(osztaly: Osztaly) : number {
|
||||
switch (osztaly){
|
||||
case Osztaly.Barbar:
|
||||
case Osztaly.Amazon:
|
||||
case Osztaly.Ijasz:
|
||||
case Osztaly.Kaloz:
|
||||
case Osztaly.Harcos:
|
||||
return 2;
|
||||
case Osztaly.Pap:
|
||||
case Osztaly.Tolvaj:
|
||||
return 0;
|
||||
case Osztaly.Varazslo:
|
||||
case Osztaly.Illuzionista:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function KozelharciTB(osztaly: Osztaly, tulajdonsagok: KarakterTulajdonsagok): number {
|
||||
const base = TamadasBonusz(osztaly);
|
||||
if (osztaly === Osztaly.Kaloz && tulajdonsagok.t_ugy > tulajdonsagok.t_ero) {
|
||||
return base + Modifier(tulajdonsagok.t_ugy)
|
||||
}
|
||||
return base + Modifier(tulajdonsagok.t_ero)
|
||||
}
|
||||
|
||||
function KitartasMento(osztaly: Osztaly) : number {
|
||||
switch (osztaly){
|
||||
case Osztaly.Barbar:
|
||||
case Osztaly.Amazon:
|
||||
case Osztaly.Ijasz:
|
||||
case Osztaly.Kaloz:
|
||||
case Osztaly.Harcos:
|
||||
case Osztaly.Pap:
|
||||
return 2;
|
||||
case Osztaly.Tolvaj:
|
||||
case Osztaly.Varazslo:
|
||||
case Osztaly.Illuzionista:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function ReflexMento(osztaly: Osztaly) : number {
|
||||
switch (osztaly){
|
||||
case Osztaly.Tolvaj:
|
||||
return 2;
|
||||
case Osztaly.Barbar:
|
||||
case Osztaly.Amazon:
|
||||
case Osztaly.Ijasz:
|
||||
case Osztaly.Kaloz:
|
||||
case Osztaly.Harcos:
|
||||
case Osztaly.Pap:
|
||||
case Osztaly.Varazslo:
|
||||
case Osztaly.Illuzionista:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function AkarateroMento(osztaly: Osztaly) : number {
|
||||
switch (osztaly){
|
||||
case Osztaly.Pap:
|
||||
case Osztaly.Varazslo:
|
||||
case Osztaly.Illuzionista:
|
||||
return 2;
|
||||
case Osztaly.Tolvaj:
|
||||
case Osztaly.Barbar:
|
||||
case Osztaly.Amazon:
|
||||
case Osztaly.Ijasz:
|
||||
case Osztaly.Kaloz:
|
||||
case Osztaly.Harcos:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function MasodlagosErtekek(props: {osztaly: Osztaly, tulajdonsagok: () => KarakterTulajdonsagok}) {
|
||||
|
||||
const { osztaly, tulajdonsagok } = props;
|
||||
|
||||
const tooltip = (
|
||||
<Tooltip id="tooltip">
|
||||
<strong>Hentelési Potenciál</strong>
|
||||
</Tooltip>
|
||||
);
|
||||
|
||||
return <>
|
||||
<div className='row'>
|
||||
<h5 className='col align-self-center'>Másodlagos értékek</h5>
|
||||
</div>
|
||||
<div className='row'>
|
||||
<div className='col-lg-6'>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label'>Életerő{' '}
|
||||
<OverlayTrigger placement='top' overlay={tooltip} delay={0} defaultShow={false} flip={false}>
|
||||
<span>(HP)</span>
|
||||
</OverlayTrigger>
|
||||
</label>
|
||||
<p className='col'>{HP(osztaly, tulajdonsagok().t_egs)}</p>
|
||||
</div>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label' >Védekezési Osztály (VO)</label>
|
||||
<p className='col'>{10+Modifier(tulajdonsagok().t_ugy)}</p>
|
||||
</div>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label' >Közelharci támadás</label>
|
||||
<p className='col'>{SignedNumberToText(KozelharciTB(osztaly, tulajdonsagok()))}</p>
|
||||
</div>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label' >Célzó támadás</label>
|
||||
<p className='col'>{SignedNumberToText(TamadasBonusz(osztaly) + Modifier(tulajdonsagok().t_ugy))}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='col-lg-6'>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label' >Kitartás mentő</label>
|
||||
<p className='col'>{SignedNumberToText(KitartasMento(osztaly) + Modifier(tulajdonsagok().t_egs))}</p>
|
||||
</div>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label' >Reflex mentő</label>
|
||||
<p className='col'>{SignedNumberToText(ReflexMento(osztaly) + Modifier(tulajdonsagok().t_ugy))}</p>
|
||||
</div>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label' >Akaraterő mentő </label>
|
||||
<p className='col'>{SignedNumberToText(AkarateroMento(osztaly) + Modifier(tulajdonsagok().t_bol))}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
|
||||
export default MasodlagosErtekek
|
||||
@@ -2,10 +2,8 @@ import React from "react";
|
||||
|
||||
import {Faj, FajLabel} from "../domain-models/faj";
|
||||
import {Modifier} from "../domain-models/tulajdonsag";
|
||||
import {SignedNumberToText} from "./Helpers";
|
||||
|
||||
export function SignedNumberToText(val: number) : string {
|
||||
return val > 0 ? '+'+val : val.toString()
|
||||
}
|
||||
|
||||
function fajiModositoText(faj: Faj, szamolas: (f: Faj) => number) : string {
|
||||
const mod = szamolas(faj)
|
||||
|
||||
@@ -22,61 +22,61 @@ function Tulajdonsagok(props: {
|
||||
<h5 className='col-lg-2 col-sm-4 align-self-center'>Tulajdonságok</h5>
|
||||
<div className='col-sm-2 m-2'>
|
||||
<button className='btn btn-dark' type='button'
|
||||
onClick={() => RollAllAbilities(setValue)}>Dobás
|
||||
onClick={() => RollAllAbilities((name: string, value: number) => setValue('tul.'+name, value))}>Dobás
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<TulajdonsagInput
|
||||
tulajdonsag='Erő'
|
||||
getCurrentValue={() => Number(watch(Tulajdonsag.Ero, 10))}
|
||||
getCurrentValue={() => Number(watch('tul.'+Tulajdonsag.Ero, 10))}
|
||||
currentFaj={currentFaj}
|
||||
fajiModosito={TulajdonsagModositokFajokra(Tulajdonsag.Ero)}
|
||||
register={() => register(Tulajdonsag.Ero, tulajdonsagDefaultOptions)}
|
||||
register={() => register('tul.'+Tulajdonsag.Ero, tulajdonsagDefaultOptions)}
|
||||
tooLowError='Túl gyenge vagy, nem bírtad felemelni a kezed a jelentkezéshez!'
|
||||
tooHighError='Szét szakadtak az izmaid!'
|
||||
/>
|
||||
<TulajdonsagInput
|
||||
tulajdonsag='Ügyesség'
|
||||
getCurrentValue={() => Number(watch(Tulajdonsag.Ugyesseg, 10))}
|
||||
getCurrentValue={() => Number(watch('tul.'+Tulajdonsag.Ugyesseg, 10))}
|
||||
currentFaj={currentFaj}
|
||||
fajiModosito={TulajdonsagModositokFajokra(Tulajdonsag.Ugyesseg)}
|
||||
register={() => register(Tulajdonsag.Ugyesseg, tulajdonsagDefaultOptions)}
|
||||
register={() => register('tul.'+Tulajdonsag.Ugyesseg, tulajdonsagDefaultOptions)}
|
||||
tooLowError='Orrabuktál jelentkezés helyett!'
|
||||
tooHighError='Emberfeletti zsonglörködésedre záptojással válaszoltak a helyiek!'
|
||||
/>
|
||||
<TulajdonsagInput
|
||||
tulajdonsag='Egészség'
|
||||
getCurrentValue={() => Number(watch(Tulajdonsag.Egeszseg, 10))}
|
||||
getCurrentValue={() => Number(watch('tul.'+Tulajdonsag.Egeszseg, 10))}
|
||||
currentFaj={currentFaj}
|
||||
fajiModosito={TulajdonsagModositokFajokra(Tulajdonsag.Egeszseg)}
|
||||
register={() => register(Tulajdonsag.Egeszseg, tulajdonsagDefaultOptions)}
|
||||
register={() => register('tul.'+Tulajdonsag.Egeszseg, tulajdonsagDefaultOptions)}
|
||||
tooLowError='Túl beteg vagy ahhoz, hogy kalandozni menj!'
|
||||
tooHighError='Kicsattanó egészségedet csak a diambroid állíthatja meg, minő véletlen, hogy pont az arcodba robbant...'
|
||||
/>
|
||||
<TulajdonsagInput
|
||||
tulajdonsag='Intelligencia'
|
||||
getCurrentValue={() => Number(watch(Tulajdonsag.Intelligencia, 10))}
|
||||
getCurrentValue={() => Number(watch('tul.'+Tulajdonsag.Intelligencia, 10))}
|
||||
currentFaj={currentFaj}
|
||||
fajiModosito={TulajdonsagModositokFajokra(Tulajdonsag.Intelligencia)}
|
||||
register={() => register(Tulajdonsag.Intelligencia, tulajdonsagDefaultOptions)}
|
||||
register={() => register('tul.'+Tulajdonsag.Intelligencia, tulajdonsagDefaultOptions)}
|
||||
tooLowError='Elfelejtetted, hogy mikor is kéne kalandozni indulni!'
|
||||
tooHighError='Ilyen tudás és logika birtokában mi szükséged van új információkra? Mindent le tudsz vezetni a már meglévő ismereteidből, és ezt azonnal beláttad.'
|
||||
/>
|
||||
<TulajdonsagInput
|
||||
tulajdonsag='Bölcsesség'
|
||||
getCurrentValue={() => Number(watch(Tulajdonsag.Bolcsesseg, 10))}
|
||||
getCurrentValue={() => Number(watch('tul.'+Tulajdonsag.Bolcsesseg, 10))}
|
||||
currentFaj={currentFaj}
|
||||
fajiModosito={TulajdonsagModositokFajokra(Tulajdonsag.Bolcsesseg)}
|
||||
register={() => register(Tulajdonsag.Bolcsesseg, tulajdonsagDefaultOptions)}
|
||||
register={() => register('tul.'+Tulajdonsag.Bolcsesseg, tulajdonsagDefaultOptions)}
|
||||
tooLowError='Nem bírtál ellenállni a kíváncsiságodnak, hogy közelebbről is megvizsgáld a tőr hegyét. Nagyon közelről.'
|
||||
tooHighError='Hatalmas bölcsességedben beláttad a kalandozás veszélyeit és inkább más tevékenységbe fogtál.'
|
||||
/>
|
||||
<TulajdonsagInput
|
||||
tulajdonsag='Karizma'
|
||||
getCurrentValue={() => Number(watch(Tulajdonsag.Karizma, 10))}
|
||||
getCurrentValue={() => Number(watch('tul.'+Tulajdonsag.Karizma, 10))}
|
||||
currentFaj={currentFaj}
|
||||
fajiModosito={TulajdonsagModositokFajokra(Tulajdonsag.Karizma)}
|
||||
register={() => register(Tulajdonsag.Karizma, tulajdonsagDefaultOptions)}
|
||||
register={() => register('tul.'+Tulajdonsag.Karizma, tulajdonsagDefaultOptions)}
|
||||
tooLowError='Mintha taszítanád az embereket, sose sikerült kalandozó csapatot találnod.'
|
||||
tooHighError='Az ellenkező nem tagjai nem engedték, hogy útnak indulj.'
|
||||
/>
|
||||
|
||||
@@ -204,4 +204,8 @@ export const KepzettsegLista: Kepzettseg[] = [
|
||||
export const Kepzettsegek: Record<KepzettsegId, Kepzettseg> =
|
||||
KepzettsegLista.reduce(
|
||||
(acc: Record<KepzettsegId, Kepzettseg>, k) => { acc[k.Id] = k; return acc; },
|
||||
{} as Record<KepzettsegId, Kepzettseg>);
|
||||
{} as Record<KepzettsegId, Kepzettseg>);
|
||||
|
||||
export function AvailableKezpettsegList(osztaly: Osztaly): Kepzettseg[] {
|
||||
return KepzettsegLista.filter(k => k.Osztalyok == null || k.Osztalyok.includes(osztaly))
|
||||
}
|
||||
@@ -10,6 +10,8 @@ export enum Tulajdonsag {
|
||||
Karizma = 't_kar',
|
||||
}
|
||||
|
||||
export type KarakterTulajdonsagok = Record<Tulajdonsag, number>
|
||||
|
||||
export function TulajdonsagLabel(tul: Tulajdonsag) : string {
|
||||
switch (tul) {
|
||||
case Tulajdonsag.Bolcsesseg: return 'Bölcsesség';
|
||||
|
||||
@@ -8,6 +8,7 @@ import Tulajdonsagok from "../components/Tulajdonsagok";
|
||||
import OsztalySelector from "../components/OsztalySelector";
|
||||
import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
|
||||
import {Tulajdonsag} from "../domain-models/tulajdonsag";
|
||||
import MasodlagosErtekek from "../components/MasodlagosErtekek";
|
||||
|
||||
const FAJ_FIELD_NAME = 'faj'
|
||||
const OSZTALY_FIELD_NAME = 'osztaly'
|
||||
@@ -70,6 +71,9 @@ function CreateCharacterPage() {
|
||||
watch={watch}
|
||||
/>
|
||||
|
||||
<hr />
|
||||
<MasodlagosErtekek osztaly={currentOsztaly()} tulajdonsagok={() => watch('tul', {})} />
|
||||
|
||||
<div className='d-grid gap-2 m-5'>
|
||||
<button className='btn btn-danger btn-lg' type='submit'>Létrehozás</button>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user