feat: faji szint limitek + some refactor

This commit is contained in:
2023-10-02 00:03:16 +02:00
parent 016be20342
commit 18ab856ed9
4 changed files with 203 additions and 34 deletions
+4 -4
View File
@@ -6,7 +6,7 @@ import {
OsztalyProperties,
OsztalySpecialSkills
} from "../domain-models/osztaly";
import {Faj} from "../domain-models/faj";
import {Faj, SzintKorlatokFajokra} from "../domain-models/faj";
function OsztalySelector(props: {currentFaj: Faj, currentOsztaly: Osztaly, changeOsztaly: (newOsztaly: Osztaly) => void}) {
const {currentFaj, currentOsztaly, changeOsztaly} = props;
@@ -17,15 +17,15 @@ function OsztalySelector(props: {currentFaj: Faj, currentOsztaly: Osztaly, chang
<select className="col form-select" value={currentOsztaly} onChange={(e) => changeOsztaly(e.target.value as Osztaly)} >
<optgroup label='Harcos'>
<option value={Osztaly.Harcos}>{OsztalyLabel(Osztaly.Harcos)}</option>
{currentFaj === Faj.Amazon && (
{SzintKorlatokFajokra(currentFaj)[Osztaly.Amazon] > 0 && (
<option value={Osztaly.Amazon}>{OsztalyLabel(Osztaly.Amazon)}</option>) }
<option value={Osztaly.Barbar}>{OsztalyLabel(Osztaly.Barbar)}</option>
<option value={Osztaly.Ijasz}>{OsztalyLabel(Osztaly.Ijasz)}</option>
<option value={Osztaly.Kaloz}>{OsztalyLabel(Osztaly.Kaloz)}</option>
</optgroup>
<option value={Osztaly.Pap}>{OsztalyLabel(Osztaly.Pap)}</option>
{currentFaj !== Faj.Amazon && (<option value={Osztaly.Tolvaj}>{OsztalyLabel(Osztaly.Tolvaj)}</option>)}
{![Faj.Osember, Faj.Amazon].includes(currentFaj) && (
{SzintKorlatokFajokra(currentFaj)[Osztaly.Tolvaj] > 0 && (<option value={Osztaly.Tolvaj}>{OsztalyLabel(Osztaly.Tolvaj)}</option>)}
{SzintKorlatokFajokra(currentFaj)[Osztaly.Varazslo] > 0 && (
<optgroup label='Varázsló'>
<option value={Osztaly.Varazslo}>{OsztalyLabel(Osztaly.Varazslo)}</option>
<option value={Osztaly.Illuzionista}>{OsztalyLabel(Osztaly.Illuzionista)}</option>
+149
View File
@@ -1,3 +1,9 @@
import {
KarakterTulajdonsagok,
Tulajdonsag,
TulajdonsagModositokFajokra,
} from "./tulajdonsag";
import {Osztaly} from "./osztaly";
export enum Faj {
@@ -111,3 +117,146 @@ export function FajSpecials(faj : Faj) : string[] {
];
}
}
export type Szintkorlatok = Record<Osztaly, number>
export interface FajDetails {
ID: Faj,
Label: string,
Description: string,
Specials: string[],
TulajdonsagModifiers: KarakterTulajdonsagok
Szintkorlatok: Szintkorlatok
}
export function GetFajDetails(faj: Faj): FajDetails {
return {
ID: faj,
Label: FajLabel(faj),
Description: FajDescription(faj),
Specials: FajSpecials(faj),
TulajdonsagModifiers: fajiTulajdonsagModositok(faj),
Szintkorlatok: SzintKorlatokFajokra(faj),
}
}
function fajiTulajdonsagModositok(faj: Faj): KarakterTulajdonsagok {
return {
[Tulajdonsag.Ero]: TulajdonsagModositokFajokra(Tulajdonsag.Ero)(faj),
[Tulajdonsag.Ugyesseg]: TulajdonsagModositokFajokra(Tulajdonsag.Ugyesseg)(faj),
[Tulajdonsag.Egeszseg]: TulajdonsagModositokFajokra(Tulajdonsag.Egeszseg)(faj),
[Tulajdonsag.Intelligencia]: TulajdonsagModositokFajokra(Tulajdonsag.Intelligencia)(faj),
[Tulajdonsag.Bolcsesseg]: TulajdonsagModositokFajokra(Tulajdonsag.Bolcsesseg)(faj),
[Tulajdonsag.Karizma]: TulajdonsagModositokFajokra(Tulajdonsag.Karizma)(faj),
}
}
const EmberiSzintKorlatok: Szintkorlatok = {
o_amazon: 0,
o_barbar: 20,
o_harcos: 20,
o_ijasz: 20,
o_illuzionista: 20,
o_kaloz: 20,
o_pap: 20,
o_tolvaj: 20,
o_varazslo: 20
}
// noinspection OverlyComplexFunctionJS,FunctionTooLongJS
export function SzintKorlatokFajokra(faj: Faj) : Szintkorlatok {
let szintkorlatok = {...EmberiSzintKorlatok}
switch (faj) {
case Faj.Ember: break;
case Faj.Amazon:
szintkorlatok.o_pap = 5
szintkorlatok.o_tolvaj = 0
szintkorlatok.o_illuzionista = 0
szintkorlatok.o_varazslo = 0
szintkorlatok.o_amazon = 20
break
case Faj.Birodalmi:
szintkorlatok.o_harcos = 7
szintkorlatok.o_barbar = 7
szintkorlatok.o_ijasz = 7
szintkorlatok.o_kaloz = 7
szintkorlatok.o_pap = 5
szintkorlatok.o_tolvaj = 5
break
case Faj.Eszaki:
case Faj.Etuniai:
szintkorlatok.o_pap = 7
szintkorlatok.o_illuzionista = 5
szintkorlatok.o_varazslo = 5
break
case Faj.Osember:
szintkorlatok.o_pap = 7
szintkorlatok.o_tolvaj = 4
szintkorlatok.o_illuzionista = 0
szintkorlatok.o_varazslo = 0
break
case Faj.Elf:
szintkorlatok.o_pap = 7
szintkorlatok.o_tolvaj = 6
szintkorlatok.o_illuzionista = 9
szintkorlatok.o_varazslo = 9
szintkorlatok.o_harcos = 9
szintkorlatok.o_barbar = 9
szintkorlatok.o_ijasz = 9
szintkorlatok.o_kaloz = 9
break
case Faj.Felelf:
szintkorlatok.o_pap = 5
szintkorlatok.o_tolvaj = 9
szintkorlatok.o_illuzionista = 9
szintkorlatok.o_varazslo = 9
szintkorlatok.o_harcos = 9
szintkorlatok.o_barbar = 9
szintkorlatok.o_ijasz = 9
szintkorlatok.o_kaloz = 9
break
case Faj.Felork:
szintkorlatok.o_pap = 5
szintkorlatok.o_tolvaj = 9
szintkorlatok.o_illuzionista = 5
szintkorlatok.o_varazslo = 5
szintkorlatok.o_harcos = 9
szintkorlatok.o_barbar = 9
szintkorlatok.o_ijasz = 9
szintkorlatok.o_kaloz = 9
break
case Faj.Felszerzet:
szintkorlatok.o_pap = 6
szintkorlatok.o_tolvaj = 9
szintkorlatok.o_illuzionista = 4
szintkorlatok.o_varazslo = 4
szintkorlatok.o_harcos = 6
szintkorlatok.o_barbar = 6
szintkorlatok.o_ijasz = 6
szintkorlatok.o_kaloz = 6
break
case Faj.Gnom:
szintkorlatok.o_pap = 6
szintkorlatok.o_tolvaj = 8
szintkorlatok.o_illuzionista = 7
szintkorlatok.o_varazslo = 7
szintkorlatok.o_harcos = 6
szintkorlatok.o_barbar = 6
szintkorlatok.o_ijasz = 6
szintkorlatok.o_kaloz = 6
break
case Faj.Torpe:
szintkorlatok.o_pap = 9
szintkorlatok.o_tolvaj = 6
szintkorlatok.o_illuzionista = 4
szintkorlatok.o_varazslo = 4
szintkorlatok.o_harcos = 9
szintkorlatok.o_barbar = 9
szintkorlatok.o_ijasz = 9
szintkorlatok.o_kaloz = 9
break
}
return szintkorlatok
}
+39
View File
@@ -0,0 +1,39 @@
import {BaseHP} from "./masodlagos_ertekek";
import {dAny} from "./kockak";
import {TulajdonsagIDs, TulajdonsagokTotal} from "./tulajdonsag";
import {KarakterInputs} from "./karakter";
import {GetFajDetails} from "./faj";
export function LevelUp(karakter: KarakterInputs, changeKarakter: (input: KarakterInputs) => void) {
const tulajdonsagokTotal = TulajdonsagokTotal(karakter)
const szint = karakter.szint + 1
const dice = BaseHP(karakter.osztaly)
const roll = dAny(dice)
const hpRolls = [...karakter.hpRolls, roll]
console.log(`Level ${szint} HP roll on d${dice} is: ${roll}`)
let tulajdonsagNovelesek = karakter.tulajdonsagNovelesek
if (szint % 4 === 0) {
for (const tulajdonsag of TulajdonsagIDs) {
if (tulajdonsagokTotal[tulajdonsag] < 18) {
tulajdonsagNovelesek = [...tulajdonsagNovelesek, tulajdonsag]
break;
}
}
}
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek})
}
export function LevelDown(karakter: KarakterInputs, changeKarakter: (input: KarakterInputs) => void) {
let tulajdonsagNovelesek = karakter.tulajdonsagNovelesek
if (karakter.szint % 4 === 0) {
tulajdonsagNovelesek = tulajdonsagNovelesek.slice(0, -1)
}
const szint = karakter.szint - 1
const hpRolls = karakter.hpRolls.slice(0, -1)
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek})
}
export function CanLevelUp(karakter: Pick<KarakterInputs, 'szint' | 'faj' | 'osztaly'>): boolean {
return karakter.szint < 10 && karakter.szint < GetFajDetails(karakter.faj).Szintkorlatok[karakter.osztaly]
}
+11 -30
View File
@@ -9,7 +9,6 @@ import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
import {
KarakterTulajdonsagok,
Tulajdonsag,
TulajdonsagIDs,
TulajdonsagokFajjal,
TulajdonsagokTotal
} from "../domain-models/tulajdonsag";
@@ -22,12 +21,13 @@ import {
import {CreatePDF} from "../pdf/character.pdf";
import {KarakterDefaults} from "../domain-models/karakter";
import BasicNewLevel from "../components/BasicNewLevel";
import {dAny} from "../domain-models/kockak";
import {BaseHP, CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view";
import {arraySetN} from "../util";
import TulajdonsagNoveles from "../components/TulajdonsagNoveles";
import JellemSelector from "../components/JellemSelector";
import {LevelUp, LevelDown, CanLevelUp} from "../domain-models/level";
import {Card} from "react-bootstrap";
function CreateCharacterPage() {
@@ -42,39 +42,18 @@ function CreateCharacterPage() {
SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg)
const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly)
function levelUp() {
const szint = karakter.szint + 1
const dice = BaseHP(karakter.osztaly)
const roll = dAny(dice)
const hpRolls = [...karakter.hpRolls, roll]
console.log(`Level ${szint} HP roll on d${dice} is: ${roll}`)
let tulajdonsagNovelesek = karakter.tulajdonsagNovelesek
if (szint % 4 === 0) {
for (const tulajdonsag of TulajdonsagIDs) {
if (tulajdonsagokTotal[tulajdonsag] < 18) {
tulajdonsagNovelesek = [...tulajdonsagNovelesek, tulajdonsag]
break;
}
}
}
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek})
}
function levelDown() {
let tulajdonsagNovelesek = karakter.tulajdonsagNovelesek
if (karakter.szint % 4 === 0) {
tulajdonsagNovelesek = tulajdonsagNovelesek.slice(0, -1)
}
const szint = karakter.szint - 1
const hpRolls = karakter.hpRolls.slice(0, -1)
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek})
}
const changeHProllAtSzint = (szint: number) => (newHProll: number) => {
changeKarakter({...karakter, hpRolls: arraySetN(karakter.hpRolls, szint-2, newHProll)})
console.log(karakter)
}
const levelUp = () => LevelUp(karakter, changeKarakter)
const levelDown = () => LevelDown(karakter, changeKarakter)
const canLevelUp = CanLevelUp(karakter)
return (
<div>
<div className='container-fluid p-5 bg-black text-white text-center'>
@@ -161,7 +140,9 @@ function CreateCharacterPage() {
)}
<div className='d-grid gap-2 m-5'>
{karakter.szint < 10 && <button className='btn btn-dark btn-lg' type='button' onClick={levelUp}>Szintlépés! </button> }
{canLevelUp && <button className='btn btn-dark btn-lg' type='button' onClick={levelUp}>Szintlépés! </button> }
{!canLevelUp && karakter.szint < 10 &&
<Card className='col text-center p-3'>Elérted a fajod szint limitjét</Card>}
{karakter.szint > 1 && <button className='btn btn-dark btn-lg' type='button' onClick={levelDown}>Visszalépés! </button> }
</div>