fix tolvaj multiclass
This commit is contained in:
@@ -9,6 +9,7 @@ import {AllowedFegyver} from "../domain-models/allowed-fegyver";
|
||||
import {Osztaly2E} from "../domain-models/osztaly2E";
|
||||
import {ChangeOsztalyAtSzint, DefaultKarakter, Karakter2E} from "../domain-models/karakter2E";
|
||||
import {LevelUp} from "../domain-models/szintlepes";
|
||||
import {GetAvailableKepzettsegek} from "../domain-models/kepzettsegek2E";
|
||||
|
||||
function applyLevelUp(karakter: Karakter2E): Karakter2E {
|
||||
let next: Karakter2E | undefined;
|
||||
@@ -154,4 +155,50 @@ describe("LevelUps Harcos specialization indexing", () => {
|
||||
|
||||
expect(sut.queryByTestId("kaloz-krit-3")).toBeNull();
|
||||
});
|
||||
|
||||
it("shows and updates Tolvaj extra skill on multiclass Tolvaj level 5", async () => {
|
||||
const multiclassTolvaj: Karakter2E = {
|
||||
...DefaultKarakter,
|
||||
szint: 6,
|
||||
szintlepesek: [
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 6 },
|
||||
{ osztaly: Osztaly2E.Harcos, HProll: 10 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 4 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 5 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 6 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 3, tolvajExtraKepzettseg: "k_meregkeveres" },
|
||||
],
|
||||
tolvajKepzettsegek: ["k_alcazas", "k_csapdak", "k_egyensulyozas", "k_hamisitas"],
|
||||
varazslatok: [],
|
||||
};
|
||||
|
||||
const store = configureStore({
|
||||
reducer: {
|
||||
user: userReducer,
|
||||
character2E: characterReducer,
|
||||
},
|
||||
});
|
||||
store.dispatch(setCharacter(multiclassTolvaj));
|
||||
|
||||
const sut = render(
|
||||
<Provider store={store}>
|
||||
<LevelUps
|
||||
karakter={store.getState().character2E}
|
||||
changeKarakter={(updated) => store.dispatch(setCharacter(updated))}
|
||||
/>
|
||||
</Provider>
|
||||
);
|
||||
|
||||
const selector = await sut.findByTestId("tolvaj-extra-kepzettseg-6");
|
||||
const nextKepzettseg = GetAvailableKepzettsegek(multiclassTolvaj)
|
||||
.map(x => x.Id)
|
||||
.find(id => id !== multiclassTolvaj.szintlepesek[5]?.tolvajExtraKepzettseg);
|
||||
|
||||
expect(nextKepzettseg).toBeDefined();
|
||||
fireEvent.change(selector, {target: {value: nextKepzettseg as string}});
|
||||
|
||||
const stateAfter = store.getState().character2E;
|
||||
expect(stateAfter.szintlepesek[5]?.tolvajExtraKepzettseg).toBe(nextKepzettseg);
|
||||
expect(stateAfter.szintlepesek[4]?.tolvajExtraKepzettseg).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -9,6 +9,7 @@ import {AllowedFegyver} from "./allowed-fegyver";
|
||||
import {BaseHP} from "./masodlagos_ertekek";
|
||||
import {dAny} from "../../shared/domain-models/kockak";
|
||||
import {KarakterVarazslat} from "./varazslat";
|
||||
import {GetAvailableKepzettsegek} from "./kepzettsegek2E";
|
||||
|
||||
export interface Karakter2E {
|
||||
id?: string,
|
||||
@@ -51,13 +52,15 @@ export const DefaultKarakter: Karakter2E = {
|
||||
varazslatok: [],
|
||||
}
|
||||
|
||||
function setOsztalyForSzintLepes(szintlepesek: Szintlepes[], osztaly: Osztaly2E, szint: number): Szintlepes[] {
|
||||
function setOsztalyForSzintLepes(karakter: Karakter2E, osztaly: Osztaly2E, szint: number): Szintlepes[] {
|
||||
const szintlepesek = karakter.szintlepesek
|
||||
const prev = szintlepesek.slice(0, szint-1)
|
||||
const current : Szintlepes = {
|
||||
...szintlepesek[szint-1],
|
||||
osztaly,
|
||||
harcosFegyver: undefined,
|
||||
kalozKritikus: undefined
|
||||
kalozKritikus: undefined,
|
||||
tolvajExtraKepzettseg: undefined,
|
||||
}
|
||||
const tail = szintlepesek.slice(szint).map(x => {return {...x}})
|
||||
|
||||
@@ -117,6 +120,37 @@ function setOsztalyForSzintLepes(szintlepesek: Szintlepes[], osztaly: Osztaly2E,
|
||||
tail[i].kalozKritikus = kalozKritAtSzint(kalozSzint)
|
||||
}
|
||||
}
|
||||
|
||||
let tolvajSzint = prev.filter(x => x.osztaly === Osztaly2E.Tolvaj).length
|
||||
const existingTolvajExtraKepzettsegek = szintlepesek
|
||||
.map(x => x.tolvajExtraKepzettseg)
|
||||
.filter(x => x != null) as KepzettsegId[]
|
||||
const tolvajExtraKepzettsegAtSzint = (tSzint: number, atLevelSzintlepesek: Szintlepes[]): (KepzettsegId | undefined) => {
|
||||
if (tSzint !== 5 && tSzint !== 9) {
|
||||
return undefined
|
||||
}
|
||||
const extraIndex = tSzint === 5 ? 0 : 1
|
||||
if (existingTolvajExtraKepzettsegek.length > extraIndex) {
|
||||
return existingTolvajExtraKepzettsegek[extraIndex]
|
||||
}
|
||||
return GetAvailableKepzettsegek({
|
||||
szintlepesek: atLevelSzintlepesek,
|
||||
faj: karakter.faj,
|
||||
kepzettsegek: karakter.kepzettsegek,
|
||||
tolvajKepzettsegek: karakter.tolvajKepzettsegek,
|
||||
})[0]?.Id
|
||||
}
|
||||
|
||||
if (osztaly === Osztaly2E.Tolvaj) {
|
||||
tolvajSzint++
|
||||
current.tolvajExtraKepzettseg = tolvajExtraKepzettsegAtSzint(tolvajSzint, [...prev, current])
|
||||
}
|
||||
for (let i = 0; i < tail.length; i++) {
|
||||
if (tail[i].osztaly === Osztaly2E.Tolvaj) {
|
||||
tolvajSzint++
|
||||
tail[i].tolvajExtraKepzettseg = tolvajExtraKepzettsegAtSzint(tolvajSzint, [...prev, current, ...tail.slice(0, i+1)])
|
||||
}
|
||||
}
|
||||
|
||||
const HD = BaseHP(osztaly)
|
||||
if (szint === 1) {
|
||||
@@ -138,6 +172,6 @@ export function ChangeLvl1Osztaly(karakter: Karakter2E, osztaly: Osztaly2E): Kar
|
||||
export function ChangeOsztalyAtSzint(karakter: Karakter2E, osztaly: Osztaly2E, szint: number): Karakter2E {
|
||||
return {
|
||||
...karakter,
|
||||
szintlepesek: setOsztalyForSzintLepes(karakter.szintlepesek, osztaly, szint)
|
||||
szintlepesek: setOsztalyForSzintLepes(karakter, osztaly, szint)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,3 +58,49 @@ describe("Harcos specialization in multiclass level-ups", () => {
|
||||
expect(thirdHarcosLevelSpec).not.toBe(firstHarcosSpec);
|
||||
});
|
||||
});
|
||||
|
||||
describe("Tolvaj extra skill in multiclass level-ups", () => {
|
||||
it("adds extra skill when Tolvaj class reaches level 5 at higher character level", () => {
|
||||
const karakter: Karakter2E = {
|
||||
...DefaultKarakter,
|
||||
szint: 5,
|
||||
szintlepesek: [
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 6 },
|
||||
{ osztaly: Osztaly2E.Harcos, HProll: 10 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 4 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 5 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 3 },
|
||||
],
|
||||
tolvajKepzettsegek: ["k_alcazas", "k_csapdak", "k_egyensulyozas", "k_hamisitas"],
|
||||
varazslatok: [],
|
||||
};
|
||||
|
||||
const afterLevel6 = applyLevelUp(karakter);
|
||||
const sixthLevel = afterLevel6.szintlepesek[5];
|
||||
|
||||
expect(sixthLevel?.osztaly).toBe(Osztaly2E.Tolvaj);
|
||||
expect(sixthLevel?.tolvajExtraKepzettseg).toBeDefined();
|
||||
});
|
||||
|
||||
it("recomputes missing extra skill when class change makes current level Tolvaj level 5", () => {
|
||||
const karakter: Karakter2E = {
|
||||
...DefaultKarakter,
|
||||
szint: 5,
|
||||
szintlepesek: [
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 6 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 5 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 4 },
|
||||
{ osztaly: Osztaly2E.Tolvaj, HProll: 3 },
|
||||
{ osztaly: Osztaly2E.Harcos, HProll: 8 },
|
||||
],
|
||||
tolvajKepzettsegek: ["k_alcazas", "k_csapdak", "k_egyensulyozas", "k_hamisitas"],
|
||||
varazslatok: [],
|
||||
};
|
||||
|
||||
const changed = ChangeOsztalyAtSzint(karakter, Osztaly2E.Tolvaj, 5);
|
||||
const fifthLevel = changed.szintlepesek[4];
|
||||
|
||||
expect(fifthLevel?.osztaly).toBe(Osztaly2E.Tolvaj);
|
||||
expect(fifthLevel?.tolvajExtraKepzettseg).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user