4 Commits

Author SHA1 Message Date
morbalint c5fa7a92d9 tolvaj level 9 kepzettseg 2026-04-05 12:47:53 +02:00
morbalint 700684ecfd fix tolvaj multiclass 2026-04-05 11:46:25 +02:00
morbalint 43959ae94f address review comments 2026-04-05 11:39:37 +02:00
morbalint 88b0379c93 add some level up tests and maybe fixes 2026-04-05 11:19:04 +02:00
6 changed files with 4 additions and 232 deletions
-27
View File
@@ -1,27 +0,0 @@
when:
- event: [push, manual]
branch: [main]
steps:
prepare-fe-image-tags:
image: alpine:3.21
commands:
- SHORT_SHA="$(echo "$CI_COMMIT_SHA" | cut -c1-8)"
- printf '%s\n' "$SHORT_SHA" > .fe-tags
- printf '%s\n' "latest" >> .fe-tags
build-and-push-fe-image:
image: docker.io/woodpeckerci/plugin-docker-buildx:latest
privileged: true
depends_on:
- prepare-fe-image-tags
settings:
registry: git.cluster.lab.kemkas.hu
repo: git.cluster.lab.kemkas.hu/${CI_REPO}
context: frontend
dockerfile: frontend/Dockerfile
tags_file: .fe-tags
username:
from_secret: gitea_packages_username
password:
from_secret: gitea_packages_token
-60
View File
@@ -1,60 +0,0 @@
when:
- event: [push, manual]
branch: [main]
steps:
prepare-e2e-image-tags:
image: alpine:3.21
commands:
- SHORT_SHA="$(echo "$CI_COMMIT_SHA" | cut -c1-8)"
- printf '%s\n' "$SHORT_SHA" > .e2e-tags
- printf '%s\n' "latest" >> .e2e-tags
build-and-push-e2e-image:
image: docker.io/woodpeckerci/plugin-docker-buildx:latest
privileged: true
depends_on:
- prepare-e2e-image-tags
settings:
registry: git.cluster.lab.kemkas.hu
repo: git.cluster.lab.kemkas.hu/${CI_REPO}-e2e
context: e2e
dockerfile: e2e/Dockerfile
tags_file: .e2e-tags
username:
from_secret: gitea_packages_username
password:
from_secret: gitea_packages_token
run-e2e:
image: docker:28-cli
privileged: true
depends_on:
- build-and-push-e2e-image
environment:
GITEA_PACKAGES_USERNAME:
from_secret: gitea_packages_username
GITEA_PACKAGES_TOKEN:
from_secret: gitea_packages_token
commands:
- SHORT_SHA="$(echo "$CI_COMMIT_SHA" | cut -c1-8)"
- export FRONTEND_IMAGE="git.cluster.lab.kemkas.hu/${CI_REPO}:${SHORT_SHA}"
- export E2E_IMAGE="git.cluster.lab.kemkas.hu/${CI_REPO}-e2e:${SHORT_SHA}"
- docker login git.cluster.lab.kemkas.hu -u "$GITEA_PACKAGES_USERNAME" -p "$GITEA_PACKAGES_TOKEN"
- |
for i in $(seq 1 30); do
if docker manifest inspect "$FRONTEND_IMAGE" >/dev/null 2>&1; then
break
fi
if [ "$i" -eq 30 ]; then
echo "Frontend image not available: $FRONTEND_IMAGE"
exit 1
fi
echo "Waiting for frontend image: $FRONTEND_IMAGE"
sleep 10
done
- trap 'docker compose -f e2e.docker-compose.yaml down -v --remove-orphans' EXIT
- docker compose -f e2e.docker-compose.yaml pull
- docker compose -f e2e.docker-compose.yaml up --no-build --abort-on-container-exit --exit-code-from e2e e2e
-14
View File
@@ -1,14 +0,0 @@
when:
- event: [push, pull_request, manual]
branch: [main]
steps:
unit-test-and-lint:
image: node:24
commands:
- corepack enable
- corepack prepare yarn@1.22.22 --activate
- cd frontend
- yarn install --frozen-lockfile
- yarn run test
- yarn run lint
@@ -1,126 +0,0 @@
import React from "react";
import {render} from "@testing-library/react";
import {configureStore} from "@reduxjs/toolkit";
import {Provider} from "react-redux";
import KarakterKepzettsegek from "./Kepzettsegek2E";
import userReducer from "../../shared/domain-models/userSlice";
import characterReducer, {setCharacter} from "../domain-models/characterSlice";
import {DefaultKarakter, Karakter2E} from "../domain-models/karakter2E";
import {Osztaly2E} from "../domain-models/osztaly2E";
import {Tulajdonsag2E} from "../domain-models/tulajdonsag2E";
function createStore() {
return configureStore({
reducer: {
user: userReducer,
character2E: characterReducer,
},
});
}
describe("KarakterKepzettsegek", () => {
it("shows one more kepzettseg selector when INT modifier increases from level-up", () => {
const karakter: Karakter2E = {
...DefaultKarakter,
szint: 4,
tulajdonsagok: {
...DefaultKarakter.tulajdonsagok,
t_int: 17,
},
szintlepesek: [
{ osztaly: Osztaly2E.Harcos, HProll: 10 },
{ osztaly: Osztaly2E.Harcos, HProll: 7 },
{ osztaly: Osztaly2E.Harcos, HProll: 6 },
{ osztaly: Osztaly2E.Harcos, HProll: 8, tulajdonsagNoveles: Tulajdonsag2E.Intelligencia },
],
tolvajKepzettsegek: [],
varazslatok: [],
};
const store = createStore();
store.dispatch(setCharacter(karakter));
const sut = render(
<Provider store={store}>
<KarakterKepzettsegek />
</Provider>
);
const selectors = sut.container.querySelectorAll('[data-testid^="kepzettseg-"]');
expect(selectors).toHaveLength(7);
});
it("shows one more kepzettseg selector when INT modifier increases at level 8", () => {
const karakter: Karakter2E = {
...DefaultKarakter,
szint: 8,
tulajdonsagok: {
...DefaultKarakter.tulajdonsagok,
t_int: 14,
},
szintlepesek: [
{ osztaly: Osztaly2E.Harcos, HProll: 10 },
{ osztaly: Osztaly2E.Harcos, HProll: 7 },
{ osztaly: Osztaly2E.Harcos, HProll: 6 },
{ osztaly: Osztaly2E.Harcos, HProll: 8, tulajdonsagNoveles: Tulajdonsag2E.Ero },
{ osztaly: Osztaly2E.Harcos, HProll: 4 },
{ osztaly: Osztaly2E.Harcos, HProll: 9 },
{ osztaly: Osztaly2E.Harcos, HProll: 5 },
{ osztaly: Osztaly2E.Harcos, HProll: 6, tulajdonsagNoveles: Tulajdonsag2E.Intelligencia },
],
tolvajKepzettsegek: [],
varazslatok: [],
};
const store = createStore();
store.dispatch(setCharacter(karakter));
const sut = render(
<Provider store={store}>
<KarakterKepzettsegek />
</Provider>
);
const selectors = sut.container.querySelectorAll('[data-testid^="kepzettseg-"]');
expect(selectors).toHaveLength(6);
});
it("shows one more kepzettseg selector when INT modifier increases at level 12", () => {
const karakter: Karakter2E = {
...DefaultKarakter,
szint: 12,
tulajdonsagok: {
...DefaultKarakter.tulajdonsagok,
t_int: 17,
},
szintlepesek: [
{ osztaly: Osztaly2E.Harcos, HProll: 10 },
{ osztaly: Osztaly2E.Harcos, HProll: 7 },
{ osztaly: Osztaly2E.Harcos, HProll: 6 },
{ osztaly: Osztaly2E.Harcos, HProll: 8, tulajdonsagNoveles: Tulajdonsag2E.Ero },
{ osztaly: Osztaly2E.Harcos, HProll: 4 },
{ osztaly: Osztaly2E.Harcos, HProll: 9 },
{ osztaly: Osztaly2E.Harcos, HProll: 5 },
{ osztaly: Osztaly2E.Harcos, HProll: 6, tulajdonsagNoveles: Tulajdonsag2E.Egeszseg },
{ osztaly: Osztaly2E.Harcos, HProll: 3 },
{ osztaly: Osztaly2E.Harcos, HProll: 7 },
{ osztaly: Osztaly2E.Harcos, HProll: 5 },
{ osztaly: Osztaly2E.Harcos, HProll: 4, tulajdonsagNoveles: Tulajdonsag2E.Intelligencia },
],
tolvajKepzettsegek: [],
varazslatok: [],
};
const store = createStore();
store.dispatch(setCharacter(karakter));
const sut = render(
<Provider store={store}>
<KarakterKepzettsegek />
</Provider>
);
const selectors = sut.container.querySelectorAll('[data-testid^="kepzettseg-"]');
expect(selectors).toHaveLength(7);
});
});
@@ -13,7 +13,7 @@ import {arraySetN} from "../../util";
import {useDispatch, useSelector} from "react-redux";
import {AppDispatch, RootState} from "../../store";
import {characterSelector, setKepzettsegek, setTolvajKepzettsegek} from "../domain-models/characterSlice";
import {TulajdonsagokTotal} from "../domain-models/tulajdonsag2E";
import {TulajdonsagokFajjal} from "../domain-models/faj2E";
function InternalKepzettsegekSelector(props: {
title: string,
@@ -70,8 +70,8 @@ function KarakterKepzettsegek () {
const karakter = useSelector.withTypes<RootState>()(characterSelector);
const dispatch = useDispatch.withTypes<AppDispatch>()();
const tulajdonsagokTotal = TulajdonsagokTotal(karakter)
const numberOfKepzettsegek = GetNumberOfKepzettsegek(tulajdonsagokTotal.t_int, karakter.faj)
const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj)
const numberOfKepzettsegek = GetNumberOfKepzettsegek(tulajdonsagokFajjal.t_int, karakter.faj)
const kepzettsegek = karakter.kepzettsegek
const fajError = karakter.kepzettsegFajError
const osztalyError = karakter.kepzettsegOsztalyError
@@ -13,8 +13,7 @@ function availableKezpettsegListFajjal(faj: Faj2E, ...osztalyok: Osztaly2E[]): K
}
export function GetNumberOfKepzettsegek(t_int: number, faj: Faj2E, max: number = 11) {
// Default cap is 11. Base calculation is 3 + 1 (human) + 3 (max ability modifier) = 7;
// thief-specific extra selections are handled elsewhere and are not part of this default max.
//max = 3 + 1 + 3 + 5 = 12 // 3 base, 1 human, 3 from max ability modifier, 4 from Thief +1 at 9th level
let numberOfKepzettseg = 3 + Modifier(t_int) + (faj === Faj2E.Ember ? 1 : 0)
if (numberOfKepzettseg < 1) {