add harcos fegyver specializacio
This commit is contained in:
@@ -5,10 +5,9 @@
|
||||
- PDF pretty: Tamadas bonuszok +10/+5
|
||||
|
||||
## Level up
|
||||
- Faji szint korlatok
|
||||
- Harcos fegyver specializáció választás szintlépéskor (free text)
|
||||
- Kalóz kritikus fegyver választás szintlépéskor (free text)
|
||||
- Tolvaj 9.ik szinttől tiltott képzettségek
|
||||
- multiclass characters
|
||||
|
||||
## PDF
|
||||
- specialis kepessegek 2ik oldalra nyomtatasa
|
||||
|
||||
@@ -28,7 +28,7 @@ function UjMento(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mento
|
||||
}
|
||||
|
||||
function BasicNewLevel(props: {
|
||||
karakter: KarakterInputs
|
||||
karakter: Pick<KarakterInputs, 'osztaly' | 'tulajdonsagok' | 'hpRolls'>
|
||||
szint: number
|
||||
changeRolledHP: (hp: number) => void,
|
||||
}) {
|
||||
@@ -45,9 +45,6 @@ function BasicNewLevel(props: {
|
||||
const isTBincreased = TBdiff.length > 0 && TBdiff.some(x => x > 0)
|
||||
|
||||
return <>
|
||||
<div className='row'>
|
||||
<h5 className='col align-self-center'>{szint}. Szint</h5>
|
||||
</div>
|
||||
<div className='row'>
|
||||
<div className='col-lg-6'>
|
||||
<div className='row m-2'>
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import React from "react";
|
||||
|
||||
function HarcosFegyverSpecializacio(props: {specialization: string, existingSpecializations: string[], changeSpecialization: (specialization: string) => void }) {
|
||||
const {specialization, existingSpecializations, changeSpecialization} = props
|
||||
const hasError = existingSpecializations.filter(x => x === specialization).length > 1
|
||||
return <>
|
||||
<div className='row m-2'>
|
||||
<label className='col-md-2 col-sm-3 col-form-label' >Fegyver specializáció</label>
|
||||
<input className='col form-control'
|
||||
value={specialization}
|
||||
onChange={(e) => changeSpecialization(e.target.value)}/>
|
||||
{hasError && <span className='form-field-error'>Már választottad ezt a specializaciót!</span>}
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
|
||||
export default HarcosFegyverSpecializacio
|
||||
@@ -35,10 +35,8 @@ function InternalKepzettsegekSelector(props: {
|
||||
}
|
||||
|
||||
return <>
|
||||
<div className='row'>
|
||||
<div className='col-lg-2 col-md-12'>
|
||||
<label className='col-form-label text-body-emphasis'>{title}</label>
|
||||
</div>
|
||||
<div className='row m-2'>
|
||||
<label className='col-lg-2 col-md-12 col-form-label'>{title}</label>
|
||||
<div className='col'>
|
||||
{klist.map((idx) =>
|
||||
<KepzettsegSelector
|
||||
@@ -64,7 +62,7 @@ function KarakterKepzettsegek (props: {
|
||||
}) {
|
||||
const { kepzettsegek, numberOfKepzettsegek, getKepzettsegListaN, changeKepzettsegek, tolvajKepzettsegek, changeTolvajKepzettsegek} = props
|
||||
|
||||
// TODO: Eszakinak es Kaloznak hajozas, Birodalminak Alikmia, vagy Meregkeveres, Etuniainak Lovaglas
|
||||
// TODO: Birodalmi tolvajnal az Alikmia, vagy Meregkeveres kezelese
|
||||
|
||||
const getTolvajKepzettsegListaN = (n: number) : Kepzettseg[] => {
|
||||
const tolvajKepzettsegekWithoutN = [...tolvajKepzettsegek.slice(0, n), ...tolvajKepzettsegek.slice(n+1)]
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
import React from "react";
|
||||
import {KarakterInputs} from "../domain-models/karakter";
|
||||
import BasicNewLevel from "./BasicNewLevel";
|
||||
import TulajdonsagNoveles from "./TulajdonsagNoveles";
|
||||
import {Tulajdonsag, TulajdonsagokTotal} from "../domain-models/tulajdonsag";
|
||||
import {arraySetN} from "../util";
|
||||
import {Osztaly} from "../domain-models/osztaly";
|
||||
import HarcosFegyverSpecializacio from "./HarcosFegyverSpecializacio";
|
||||
|
||||
function LevelUp(props: {szint: number, karakter: KarakterInputs, changeTulajdonsagNoveles: (t: Tulajdonsag) => void, changeRolledHP: (rolledHP: number) => void, changeHarcosSpec: (spec: string) => void}) {
|
||||
const {szint, karakter, changeTulajdonsagNoveles, changeRolledHP, changeHarcosSpec} = props
|
||||
|
||||
const specializationIndex = Math.floor((szint-1) / 2)
|
||||
console.log('Specialization index: ' + specializationIndex.toString())
|
||||
const specialization = karakter.harcosSpecializaciok[specializationIndex]
|
||||
console.log(specialization)
|
||||
|
||||
return <div key={`level-up-${szint}`}>
|
||||
<div className='row mt-3'>
|
||||
<h5 className='col align-self-center'>{szint}. Szint</h5>
|
||||
</div>
|
||||
{szint % 4 === 0 && <TulajdonsagNoveles
|
||||
tulajdonsagok={karakter.tulajdonsagok}
|
||||
szint={szint}
|
||||
tulajdonsagNovelesek={karakter.tulajdonsagNovelesek}
|
||||
changeTulajdonsagNoveles={changeTulajdonsagNoveles}
|
||||
/>}
|
||||
<BasicNewLevel
|
||||
szint={szint}
|
||||
karakter={karakter}
|
||||
changeRolledHP={changeRolledHP}
|
||||
/>
|
||||
{karakter.osztaly === Osztaly.Harcos && szint % 2 === 1 &&
|
||||
<HarcosFegyverSpecializacio specialization={specialization} existingSpecializations={karakter.harcosSpecializaciok} changeSpecialization={changeHarcosSpec} />}
|
||||
</div>
|
||||
}
|
||||
|
||||
export function LevelUps(props: {karakter: KarakterInputs, changeKarakter: (inputs: KarakterInputs) => void}){
|
||||
const {karakter, changeKarakter} = props;
|
||||
|
||||
const tulajdonsagokAtSzint = (szint: number) => TulajdonsagokTotal({...karakter, tulajdonsagNovelesek: karakter.tulajdonsagNovelesek.slice(0, Math.floor(szint / 4))})
|
||||
|
||||
const changeRolledHPAtSzint = (szint: number) => (newHProll: number) => {
|
||||
changeKarakter({...karakter, hpRolls: arraySetN(karakter.hpRolls, szint-2, newHProll)})
|
||||
console.log(karakter)
|
||||
}
|
||||
const changeTulajdonsagNovelesAtSzint = (szint: number) => (t: Tulajdonsag) => { changeKarakter({...karakter, tulajdonsagNovelesek: arraySetN(karakter.tulajdonsagNovelesek, Math.floor((szint / 4)-1), t)}) }
|
||||
|
||||
const changeHarcosSpecializacioAtSzint = (szint: number) => (spec: string) => {
|
||||
changeKarakter({...karakter, harcosSpecializaciok: arraySetN(karakter.harcosSpecializaciok, Math.floor((szint-1) / 2), spec)})
|
||||
}
|
||||
|
||||
return <>
|
||||
{karakter.hpRolls.map((_, i) => i+2).map(szint => <>
|
||||
<LevelUp
|
||||
key={`level-up-${szint}`}
|
||||
szint={szint}
|
||||
karakter={{...karakter, tulajdonsagok: tulajdonsagokAtSzint(szint)}}
|
||||
changeTulajdonsagNoveles={changeTulajdonsagNovelesAtSzint(szint)}
|
||||
changeRolledHP={changeRolledHPAtSzint(szint)}
|
||||
changeHarcosSpec={changeHarcosSpecializacioAtSzint(szint)}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
}
|
||||
|
||||
export default LevelUps
|
||||
@@ -1,5 +1,12 @@
|
||||
import React from "react";
|
||||
import {KarakterTulajdonsagok, Tulajdonsag, TulajdonsagIDs, TulajdonsagLabel} from "../domain-models/tulajdonsag";
|
||||
import {
|
||||
KarakterTulajdonsagok,
|
||||
Modifier,
|
||||
Tulajdonsag,
|
||||
TulajdonsagIDs,
|
||||
TulajdonsagLabel
|
||||
} from "../domain-models/tulajdonsag";
|
||||
import {SignedNumberToText} from "./Helpers";
|
||||
|
||||
function TulajdonsagNoveles(props: {tulajdonsagok: KarakterTulajdonsagok, szint: number, tulajdonsagNovelesek: Tulajdonsag[], changeTulajdonsagNoveles: (tulajdonsag: Tulajdonsag) => void}) {
|
||||
const {tulajdonsagok, szint, tulajdonsagNovelesek, changeTulajdonsagNoveles} = props
|
||||
@@ -21,7 +28,7 @@ function TulajdonsagNoveles(props: {tulajdonsagok: KarakterTulajdonsagok, szint:
|
||||
<div className='col-lg-6'>
|
||||
<div className='row m-2'>
|
||||
<label className='col-sm-6 col-8 col-form-label'>Új {TulajdonsagLabel(tulajdonsagNoveles)}{' '}</label>
|
||||
<span className='col col-form-label'>{tulajdonsagok[tulajdonsagNoveles]}</span>
|
||||
<span className='col col-form-label'>{tulajdonsagok[tulajdonsagNoveles]} ({SignedNumberToText(Modifier(tulajdonsagok[tulajdonsagNoveles]))})</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -18,6 +18,8 @@ export interface KarakterInputs {
|
||||
szint: number
|
||||
hpRolls: number[],
|
||||
tulajdonsagNovelesek: Tulajdonsag[],
|
||||
harcosSpecializaciok: string[],
|
||||
kalozKritikus: string[],
|
||||
}
|
||||
|
||||
export const KarakterDefaults: KarakterInputs = {
|
||||
@@ -30,5 +32,7 @@ export const KarakterDefaults: KarakterInputs = {
|
||||
kepzettsegek: [],
|
||||
szint: 1,
|
||||
hpRolls: [],
|
||||
tulajdonsagNovelesek: []
|
||||
tulajdonsagNovelesek: [],
|
||||
harcosSpecializaciok: ['szablya'],
|
||||
kalozKritikus: [],
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import {dAny} from "./kockak";
|
||||
import {TulajdonsagIDs, TulajdonsagokTotal} from "./tulajdonsag";
|
||||
import {KarakterInputs} from "./karakter";
|
||||
import {GetFajDetails} from "./faj";
|
||||
import {Osztaly} from "./osztaly";
|
||||
|
||||
|
||||
export function LevelUp(karakter: KarakterInputs, changeKarakter: (input: KarakterInputs) => void) {
|
||||
@@ -21,7 +22,11 @@ export function LevelUp(karakter: KarakterInputs, changeKarakter: (input: Karakt
|
||||
}
|
||||
}
|
||||
}
|
||||
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek})
|
||||
let harcosSpecializaciok = karakter.harcosSpecializaciok
|
||||
if(karakter.osztaly === Osztaly.Harcos && szint % 2 === 1) {
|
||||
harcosSpecializaciok = [...harcosSpecializaciok, "szablya"]
|
||||
}
|
||||
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek, harcosSpecializaciok})
|
||||
}
|
||||
|
||||
export function LevelDown(karakter: KarakterInputs, changeKarakter: (input: KarakterInputs) => void) {
|
||||
@@ -31,7 +36,11 @@ export function LevelDown(karakter: KarakterInputs, changeKarakter: (input: Kara
|
||||
}
|
||||
const szint = karakter.szint - 1
|
||||
const hpRolls = karakter.hpRolls.slice(0, -1)
|
||||
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek})
|
||||
let harcosSpecializaciok = karakter.harcosSpecializaciok
|
||||
if (karakter.osztaly === Osztaly.Harcos && szint % 2 === 0) {
|
||||
harcosSpecializaciok = harcosSpecializaciok.slice(0, -1)
|
||||
}
|
||||
changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek, harcosSpecializaciok})
|
||||
}
|
||||
|
||||
export function CanLevelUp(karakter: Pick<KarakterInputs, 'szint' | 'faj' | 'osztaly'>): boolean {
|
||||
|
||||
@@ -6,35 +6,31 @@ import FajSelector from "../components/FajSelector";
|
||||
import Tulajdonsagok from "../components/Tulajdonsagok";
|
||||
import OsztalySelector from "../components/OsztalySelector";
|
||||
import KarakterKepzettsegek from "../components/KarakterKepzettsegek";
|
||||
import {
|
||||
KarakterTulajdonsagok,
|
||||
Tulajdonsag,
|
||||
TulajdonsagokFajjal,
|
||||
TulajdonsagokTotal
|
||||
} from "../domain-models/tulajdonsag";
|
||||
import {KarakterTulajdonsagok, TulajdonsagokFajjal} from "../domain-models/tulajdonsag";
|
||||
import MasodlagosErtekek from "../components/MasodlagosErtekek";
|
||||
import {
|
||||
AvailableKezpettsegList, GetKepzettsegListaN,
|
||||
GetNumberOfKepzettsegek, KepzettsegId, SetDefaultKepzettsegek,
|
||||
AvailableKezpettsegList,
|
||||
GetKepzettsegListaN,
|
||||
GetNumberOfKepzettsegek,
|
||||
KepzettsegId,
|
||||
SetDefaultKepzettsegek,
|
||||
SetDefaultTolvajKepzettsegek,
|
||||
} from "../domain-models/kepzettsegek";
|
||||
import {CreatePDF} from "../pdf/character.pdf";
|
||||
import {KarakterDefaults} from "../domain-models/karakter";
|
||||
import BasicNewLevel from "../components/BasicNewLevel";
|
||||
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 {CanLevelUp, LevelDown, LevelUp} from "../domain-models/level";
|
||||
import {Card} from "react-bootstrap";
|
||||
import LevelUps from "../components/LevelUps";
|
||||
import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpecializacio";
|
||||
|
||||
function CreateCharacterPage() {
|
||||
|
||||
let [karakter, changeKarakter] = useState(KarakterDefaults)
|
||||
|
||||
const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
|
||||
const tulajdonsagokTotal = TulajdonsagokTotal(karakter)
|
||||
|
||||
const changeKepzettseg = (k: KepzettsegId[]) => changeKarakter({...karakter, kepzettsegek: k})
|
||||
const changeTolvajKepzettseg = (tk?: KepzettsegId[]) => changeKarakter({...karakter, tolvajKepzettsegek: tk})
|
||||
@@ -42,13 +38,6 @@ function CreateCharacterPage() {
|
||||
SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg)
|
||||
const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly)
|
||||
|
||||
|
||||
|
||||
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)
|
||||
|
||||
@@ -108,8 +97,16 @@ function CreateCharacterPage() {
|
||||
<OsztalySelector
|
||||
currentFaj={karakter.faj}
|
||||
currentOsztaly={karakter.osztaly}
|
||||
changeOsztaly={(o: Osztaly) => changeKarakter({...karakter, osztaly: o})}
|
||||
changeOsztaly={(o: Osztaly) => changeKarakter({...karakter, osztaly: o, harcosSpecializaciok: o === Osztaly.Harcos ? ['szablya'] : []})}
|
||||
/>
|
||||
{karakter.osztaly === Osztaly.Harcos &&
|
||||
<div className='mb-6'>
|
||||
<HarcosFegyverSpecializacio
|
||||
specialization={karakter.harcosSpecializaciok[0]}
|
||||
existingSpecializations={karakter.harcosSpecializaciok}
|
||||
changeSpecialization={(spec: string) => changeKarakter({...karakter, harcosSpecializaciok: [spec, ...karakter.harcosSpecializaciok.slice(1)]})}
|
||||
/>
|
||||
</div>}
|
||||
<KarakterKepzettsegek
|
||||
getKepzettsegListaN={GetKepzettsegListaN(karakter)}
|
||||
numberOfKepzettsegek={GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, karakter.faj, availableKepzettsegList.length)}
|
||||
@@ -122,22 +119,7 @@ function CreateCharacterPage() {
|
||||
<hr />
|
||||
<MasodlagosErtekek {...CalculateMasodlagosErtekek({...karakter, tulajdonsagok: tulajdonsagokFajjal, szint: 1, hpRolls: []})} />
|
||||
|
||||
{karakter.hpRolls.map((_, i) => i+2).map(szint => <>
|
||||
<BasicNewLevel
|
||||
key={`level-${szint}`}
|
||||
szint={szint}
|
||||
karakter={karakter}
|
||||
changeRolledHP={changeHProllAtSzint(szint)}
|
||||
/>
|
||||
{szint % 4 === 0 && <TulajdonsagNoveles
|
||||
key={`tulajdonsag-noveles-${szint}`}
|
||||
tulajdonsagok={tulajdonsagokTotal}
|
||||
szint={szint}
|
||||
tulajdonsagNovelesek={karakter.tulajdonsagNovelesek}
|
||||
changeTulajdonsagNoveles={(t: Tulajdonsag) => { changeKarakter({...karakter, tulajdonsagNovelesek: arraySetN(karakter.tulajdonsagNovelesek, Math.floor((szint / 4)-1), t)}) }}
|
||||
/>}
|
||||
</>
|
||||
)}
|
||||
<LevelUps key={'level-ups'} karakter={karakter} changeKarakter={changeKarakter} />
|
||||
|
||||
<div className='d-grid gap-2 m-5'>
|
||||
{canLevelUp && <button className='btn btn-dark btn-lg' type='button' onClick={levelUp}>Szintlépés! ⇧</button> }
|
||||
|
||||
Reference in New Issue
Block a user