mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 03:13:46 +00:00
feat: multiclassing almost works in 2e
This commit is contained in:
@@ -17,7 +17,6 @@ export interface Karakter2E {
|
||||
jellem: JellemID,
|
||||
tulajdonsagok: KarakterTulajdonsagok
|
||||
faj: Faj2E
|
||||
osztaly: Osztaly2E
|
||||
kepzettsegek: KepzettsegId[]
|
||||
tolvajKepzettsegek?: KepzettsegId[]
|
||||
szint: number,
|
||||
@@ -31,7 +30,6 @@ export const DefaultKarakter: Karakter2E = {
|
||||
jellem: 'S',
|
||||
tulajdonsagok: TulajdonsagDefaults,
|
||||
faj: Faj2E.Ember,
|
||||
osztaly: Osztaly2E.Tengeresz,
|
||||
kepzettsegek: [],
|
||||
tolvajKepzettsegek: [],
|
||||
szint: 1,
|
||||
@@ -42,34 +40,93 @@ export const DefaultKarakter: Karakter2E = {
|
||||
}]
|
||||
}
|
||||
|
||||
function setOsztalyForSzintLepes(szintlepes: Szintlepes, osztaly: Osztaly2E, szint: number): Szintlepes {
|
||||
const base : Szintlepes = {
|
||||
...szintlepes,
|
||||
function setOsztalyForSzintLepes(szintlepesek: Szintlepes[], osztaly: Osztaly2E, szint: number): Szintlepes[] {
|
||||
const prev = szintlepesek.slice(0, szint-1)
|
||||
const current : Szintlepes = {
|
||||
...szintlepesek[szint-1],
|
||||
osztaly,
|
||||
harcosFegyver: undefined,
|
||||
kalozKritikus: undefined
|
||||
}
|
||||
const tail = szintlepesek.slice(szint).map(x => {return {...x}})
|
||||
|
||||
let harcosSzint = prev.filter(x => x.osztaly === Osztaly2E.Harcos).length
|
||||
// TODO: only pick specializations from valid levels
|
||||
const harcosSpecializaciok = szintlepesek
|
||||
.map(x => x.harcosFegyver)
|
||||
.filter(x => x != null)
|
||||
const harcosSpecAtSzint = (hSzint: number): (string | undefined) => {
|
||||
if (hSzint % 2 === 1) {
|
||||
const specIndex = (hSzint+1)/2 -1
|
||||
if (harcosSpecializaciok.length > specIndex ) {
|
||||
return harcosSpecializaciok[specIndex]
|
||||
} else {
|
||||
return AllowedFegyver(Osztaly2E.Harcos)[specIndex].Id
|
||||
}
|
||||
}
|
||||
else {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
if (osztaly === Osztaly2E.Harcos) {
|
||||
harcosSzint += 1
|
||||
current.harcosFegyver = harcosSpecAtSzint(harcosSzint)
|
||||
}
|
||||
for (let i = 0; i < tail.length; i++) {
|
||||
if (tail[i].osztaly === Osztaly2E.Harcos) {
|
||||
harcosSzint++
|
||||
tail[i].harcosFegyver = harcosSpecAtSzint(harcosSzint)
|
||||
}
|
||||
}
|
||||
|
||||
let kalozSzint = prev.filter(x => x.osztaly === Osztaly2E.Tengeresz).length
|
||||
const existingKalozKrits = szintlepesek
|
||||
.map(x => x.kalozKritikus)
|
||||
.filter(x => x != null)
|
||||
const kalozKritAtSzint = (kSzint: number): (string | undefined) => {
|
||||
if (kSzint % 3 === 0) {
|
||||
const specIndex = kSzint/3 -1
|
||||
if (existingKalozKrits.length > specIndex ) {
|
||||
return existingKalozKrits[specIndex]
|
||||
} else {
|
||||
return AllowedFegyver(Osztaly2E.Tengeresz)[specIndex].Id
|
||||
}
|
||||
}
|
||||
else {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
if (osztaly === Osztaly2E.Tengeresz) {
|
||||
kalozSzint++
|
||||
current.kalozKritikus = kalozKritAtSzint(szint)
|
||||
}
|
||||
for (let i = 0; i < tail.length; i++) {
|
||||
if (tail[i].osztaly === Osztaly2E.Tengeresz) {
|
||||
kalozSzint++
|
||||
tail[i].kalozKritikus = kalozKritAtSzint(kalozSzint)
|
||||
}
|
||||
}
|
||||
|
||||
if (osztaly === Osztaly2E.Harcos && szint % 2 === 1) {
|
||||
base.harcosFegyver = AllowedFegyver(Osztaly2E.Harcos)[szint].Id
|
||||
}
|
||||
if (osztaly === Osztaly2E.Tengeresz && szint % 3 === 0) {
|
||||
base.kalozKritikus = AllowedFegyver(Osztaly2E.Tengeresz)[szint].Id
|
||||
}
|
||||
const HD = BaseHP(osztaly)
|
||||
if (szint === 1) {
|
||||
base.HProll = HD
|
||||
current.HProll = HD
|
||||
} else {
|
||||
base.HProll = dAny(HD)
|
||||
console.log(`Level ${szint} HP roll on d${HD} is: ${base.HProll} due to class change`)
|
||||
current.HProll = dAny(HD)
|
||||
console.log(`Level ${szint} HP roll on d${HD} is: ${current.HProll} due to class change`)
|
||||
}
|
||||
return base
|
||||
return [...prev, current, ...tail]
|
||||
}
|
||||
|
||||
export function ChangeLvl1Osztaly(karakter: Karakter2E, osztaly: Osztaly2E): Karakter2E {
|
||||
return {
|
||||
...karakter,
|
||||
osztaly,
|
||||
szintlepesek: karakter.szintlepesek.map((l, idx) => setOsztalyForSzintLepes(l, osztaly, idx +1))
|
||||
szintlepesek: [{...karakter.szintlepesek[0], osztaly}, ...karakter.szintlepesek.slice(1)]
|
||||
}
|
||||
}
|
||||
|
||||
export function ChangeOsztalyAtSzint(karakter: Karakter2E, osztaly: Osztaly2E, szint: number): Karakter2E {
|
||||
return {
|
||||
...karakter,
|
||||
szintlepesek: setOsztalyForSzintLepes(karakter.szintlepesek, osztaly, szint)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user