mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 03:13:46 +00:00
test for kepzettsegek and allowed fegyverek and pancel
This commit is contained in:
@@ -0,0 +1,73 @@
|
|||||||
|
import {AllowedFegyver} from "./allowed-fegyver";
|
||||||
|
import {Osztaly} from "./osztaly";
|
||||||
|
|
||||||
|
describe('Allowed Fegyver calculations', () => {
|
||||||
|
|
||||||
|
describe('varazslo fegyverek', () => {
|
||||||
|
test.each([
|
||||||
|
[Osztaly.Varazslo],
|
||||||
|
[Osztaly.Illuzionista]])('%s fegyverek should be fixed', (osztaly: Osztaly) => {
|
||||||
|
const expected = new Set([
|
||||||
|
'bot',
|
||||||
|
'bunko',
|
||||||
|
'dobotu',
|
||||||
|
'tor',
|
||||||
|
'okol',
|
||||||
|
'parittya',
|
||||||
|
]);
|
||||||
|
const actual = AllowedFegyver(osztaly, []);
|
||||||
|
const actualSet = new Set(actual.map(f => f.Id));
|
||||||
|
expect(actualSet.size).toEqual(expected.size)
|
||||||
|
for (const expectedKey in expected) {
|
||||||
|
expect(actualSet).toContain(expectedKey)
|
||||||
|
}
|
||||||
|
for (const actualKey in actualSet) {
|
||||||
|
expect(expected).toContain(actualKey)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('Tolvaj fegyverek', () => {
|
||||||
|
it('should be fixed', () => {
|
||||||
|
const expected = new Set([
|
||||||
|
'rovid_ij',
|
||||||
|
'konnyu_szamszerij',
|
||||||
|
'nehez_szamszerij',
|
||||||
|
'dobotu',
|
||||||
|
'tor',
|
||||||
|
'okol',
|
||||||
|
'parittya',
|
||||||
|
'szablya',
|
||||||
|
'hosszu_kard',
|
||||||
|
'rovid_kard'
|
||||||
|
]);
|
||||||
|
const actual = AllowedFegyver(Osztaly.Tolvaj, []);
|
||||||
|
const actualSet = new Set(actual.map(f => f.Id));
|
||||||
|
expect(actualSet.size).toEqual(expected.size)
|
||||||
|
for (const expectedKey in expected) {
|
||||||
|
expect(actualSet).toContain(expectedKey)
|
||||||
|
}
|
||||||
|
for (const actualKey in actualSet) {
|
||||||
|
expect(expected).toContain(actualKey)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('Harcos fegyverek', () => {
|
||||||
|
it('Ijasz can use visszacsapo_ij', () => {
|
||||||
|
const actual = AllowedFegyver(Osztaly.Ijasz, []);
|
||||||
|
const actualSet = new Set(actual.map(f => f.Id));
|
||||||
|
expect(actualSet).toContain('visszacsapo_ij')
|
||||||
|
})
|
||||||
|
test.each([
|
||||||
|
[['visszacsapo_ij']],
|
||||||
|
[['fattyu_kard', 'torpe_fejsze']],
|
||||||
|
])('Harcos can use %s specializations', (specializations) => {
|
||||||
|
const actual = AllowedFegyver(Osztaly.Harcos, specializations);
|
||||||
|
const actualSet = new Set(actual.map(f => f.Id));
|
||||||
|
for (const specialization of specializations) {
|
||||||
|
expect(actualSet).toContain(specialization)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import {Osztaly} from "./osztaly";
|
||||||
|
import {AllowedPancelTypes} from "./allowed-pancel-types";
|
||||||
|
|
||||||
|
|
||||||
|
describe('Allowed Pancel types', () => {
|
||||||
|
test.each([
|
||||||
|
[[Osztaly.Amazon], ['konnyu']],
|
||||||
|
[[Osztaly.Amazon, Osztaly.Barbar], ['konnyu', 'kozepes', 'nehez']],
|
||||||
|
[[Osztaly.Illuzionista], []],
|
||||||
|
[[Osztaly.Varazslo], []],
|
||||||
|
[[Osztaly.Tolvaj], ['konnyu']],
|
||||||
|
[[Osztaly.Ijasz], ['konnyu', 'kozepes']],
|
||||||
|
[[Osztaly.Kaloz], ['konnyu', 'kozepes']],
|
||||||
|
])('%s allows %s pancel types', (osztalyok: Osztaly[], expected: string[]) => {
|
||||||
|
const actual = AllowedPancelTypes(osztalyok)
|
||||||
|
expect(actual.length).toEqual(expected.length)
|
||||||
|
for (const expectedElement of expected) {
|
||||||
|
expect(actual).toContain(expectedElement)
|
||||||
|
}
|
||||||
|
for (const actualElement of actual) {
|
||||||
|
expect(expected).toContain(actualElement)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
import {KarakterDefaults} from "./karakter";
|
||||||
|
import {Osztaly} from "./osztaly";
|
||||||
|
import {
|
||||||
|
AvailableKezpettsegList, GetKepzettsegListaN,
|
||||||
|
GetNumberOfKepzettsegek,
|
||||||
|
SetDefaultTolvajKepzettsegek
|
||||||
|
} from "./kepzettsegek";
|
||||||
|
import {Faj} from "./faj";
|
||||||
|
|
||||||
|
describe('AvailableKezpettsegList', ()=> {
|
||||||
|
|
||||||
|
const commonKepzettsegek = ['k_allatidomitas', 'k_eloadas', 'k_ertekbecsles', 'k_gyogyitas', 'k_hajozas',
|
||||||
|
'k_hallgatozas', 'k_lovaglas', 'k_maszas', 'k_megfigyeles', 'k_mesterseg', 'k_nyomkereses', 'k_osonas', 'k_rejtozes',
|
||||||
|
'k_tudas', 'k_ugras', 'k_uszas']
|
||||||
|
|
||||||
|
test.each([
|
||||||
|
[Osztaly.Amazon, commonKepzettsegek],
|
||||||
|
[Osztaly.Ijasz, commonKepzettsegek],
|
||||||
|
[Osztaly.Harcos, commonKepzettsegek],
|
||||||
|
[Osztaly.Kaloz, commonKepzettsegek],
|
||||||
|
[Osztaly.Barbar, commonKepzettsegek],
|
||||||
|
[Osztaly.Tolvaj, ['k_alcazas', 'k_csapdak', 'k_egyensulyozas', 'k_hamisitas', 'k_jelek_olvasasa', 'k_meregkeveres', 'k_szabadulomuveszet', 'k_zarnyitas', 'k_zsebmetszes', ...commonKepzettsegek]],
|
||||||
|
[Osztaly.Pap, ['k_varazslatismeret', 'k_koncentracio', 'k_csillagjoslas', 'k_alkimia', 'k_jelek_olvasasa', ...commonKepzettsegek]],
|
||||||
|
[Osztaly.Varazslo, ['k_varazslatismeret', 'k_koncentracio', 'k_csillagjoslas', 'k_alkimia', 'k_jelek_olvasasa', ...commonKepzettsegek]],
|
||||||
|
[Osztaly.Illuzionista, ['k_varazslatismeret', 'k_koncentracio', 'k_csillagjoslas', 'k_alkimia', 'k_jelek_olvasasa', ...commonKepzettsegek]],
|
||||||
|
])('%s has %s', (osztaly: Osztaly, expected: string[]) => {
|
||||||
|
const availableKezpettsegList = AvailableKezpettsegList(osztaly).map(x => x.Id)
|
||||||
|
expect(availableKezpettsegList).toHaveLength(expected.length)
|
||||||
|
for (const kepzettseg of expected) {
|
||||||
|
expect(availableKezpettsegList).toContain(kepzettseg)
|
||||||
|
}
|
||||||
|
for (const kepzettseg of availableKezpettsegList) {
|
||||||
|
expect(expected).toContain(kepzettseg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('GetNumberOfKepzettsegek', () => {
|
||||||
|
test.each([
|
||||||
|
[Faj.Birodalmi, 10, 3],
|
||||||
|
[Faj.Ember, 10, 4],
|
||||||
|
[Faj.Elf, 18, 6],
|
||||||
|
[Faj.Torpe, 3, 1],
|
||||||
|
])('%s with %i INT has %i kepzettseg', (faj: Faj, int: number, expected: number) => {
|
||||||
|
const actual = GetNumberOfKepzettsegek(int, faj, 16)
|
||||||
|
expect(actual).toEqual(expected)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('SetDefaultTolvajKepzettsegek', ()=> {
|
||||||
|
describe('when karakter is not a Tolvaj', () => {
|
||||||
|
it('sets tolvaj kepzettsegek to empty', () => {
|
||||||
|
// arrange
|
||||||
|
const karakter = {...KarakterDefaults}
|
||||||
|
karakter.osztaly = Osztaly.Barbar
|
||||||
|
karakter.tolvajKepzettsegek = ['k_alkimia']
|
||||||
|
|
||||||
|
const invocations = [] as (string[] | undefined)[]
|
||||||
|
const changeTolvajkepzettsegek = (ids?: string[]) => {
|
||||||
|
invocations.push(ids)
|
||||||
|
}
|
||||||
|
// act
|
||||||
|
SetDefaultTolvajKepzettsegek(karakter, changeTolvajkepzettsegek)
|
||||||
|
// assert
|
||||||
|
expect(invocations).toHaveLength(1)
|
||||||
|
expect(invocations[0]).toBeUndefined()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe('when karakter is a Tolvaj', () => {
|
||||||
|
describe('and tolvaj kepzettsegek is empty', () => {
|
||||||
|
it('sets 4 tolvaj kepzettsegek', () => {
|
||||||
|
// arrange
|
||||||
|
const karakter = {...KarakterDefaults}
|
||||||
|
karakter.osztaly = Osztaly.Tolvaj
|
||||||
|
const invocations = [] as (string[] | undefined)[]
|
||||||
|
const changeTolvajkepzettsegek = (ids?: string[]) => {
|
||||||
|
invocations.push(ids)
|
||||||
|
}
|
||||||
|
// act
|
||||||
|
SetDefaultTolvajKepzettsegek(karakter, changeTolvajkepzettsegek)
|
||||||
|
// assert
|
||||||
|
expect(invocations).toHaveLength(1)
|
||||||
|
expect(invocations[0]).toHaveLength(4)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
describe('and tolvaj kepzettsegek is already set', () => {
|
||||||
|
it('doesnt change anything', () => {
|
||||||
|
// arrange
|
||||||
|
const karakter = {...KarakterDefaults}
|
||||||
|
karakter.osztaly = Osztaly.Tolvaj
|
||||||
|
karakter.tolvajKepzettsegek = ['k_alkimia', 'k_hamisitas', 'k_meregkeveres', 'k_zsebmetszes']
|
||||||
|
const invocations = [] as (string[] | undefined)[]
|
||||||
|
const changeTolvajkepzettsegek = (ids?: string[]) => {
|
||||||
|
invocations.push(ids)
|
||||||
|
}
|
||||||
|
// act
|
||||||
|
SetDefaultTolvajKepzettsegek(karakter, changeTolvajkepzettsegek)
|
||||||
|
// assert
|
||||||
|
expect(invocations).toHaveLength(0)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('GetKepzettsegListaN', () => {
|
||||||
|
it("contains the Nth kepzettseg", () => {
|
||||||
|
const karakter = {...KarakterDefaults}
|
||||||
|
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
|
||||||
|
const sut = GetKepzettsegListaN(karakter)
|
||||||
|
for (let i = 0; i < karakter.kepzettsegek.length; i++) {
|
||||||
|
const actual = sut(i).map(x => x.Id)
|
||||||
|
expect(actual).toContain(karakter.kepzettsegek[i])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
it('returns Hajozas as 1st for Eszaki', ()=> {
|
||||||
|
const karakter = {...KarakterDefaults}
|
||||||
|
karakter.faj = Faj.Eszaki
|
||||||
|
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
|
||||||
|
const actual = GetKepzettsegListaN(karakter)(0).map(x => x.Id)
|
||||||
|
expect(actual).toHaveLength(1)
|
||||||
|
expect(actual[0]).toEqual('k_hajozas')
|
||||||
|
})
|
||||||
|
it('returns Lovaglas as 1st for Etuniai', ()=> {
|
||||||
|
const karakter = {...KarakterDefaults}
|
||||||
|
karakter.faj = Faj.Etuniai
|
||||||
|
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
|
||||||
|
const actual = GetKepzettsegListaN(karakter)(0).map(x => x.Id)
|
||||||
|
expect(actual).toHaveLength(1)
|
||||||
|
expect(actual[0]).toEqual('k_lovaglas')
|
||||||
|
})
|
||||||
|
it('returns Meregkeveres and Alkimia as 1st for Birodalmi', ()=> {
|
||||||
|
const karakter = {...KarakterDefaults}
|
||||||
|
karakter.faj = Faj.Birodalmi
|
||||||
|
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
|
||||||
|
const actual = GetKepzettsegListaN(karakter)(0).map(x => x.Id)
|
||||||
|
expect(actual).toHaveLength(2)
|
||||||
|
expect(actual).toContain('k_meregkeveres')
|
||||||
|
expect(actual).toContain('k_alkimia')
|
||||||
|
})
|
||||||
|
it("doesn't contains other selected kepzettsegek", () => {
|
||||||
|
const karakter = {...KarakterDefaults}
|
||||||
|
karakter.kepzettsegek = ['k_uszas', 'k_ugras', 'k_osonas', 'k_hallgatozas']
|
||||||
|
const sut = GetKepzettsegListaN(karakter)
|
||||||
|
for (let i = 0; i < karakter.kepzettsegek.length; i++) {
|
||||||
|
const actual = sut(i).map(x => x.Id)
|
||||||
|
for (let j = 0; j < karakter.kepzettsegek.length; j++) {
|
||||||
|
if (i === j) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
expect(actual.indexOf(karakter.kepzettsegek[j])).toEqual(-1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -19,7 +19,7 @@ export const KepzettsegLista: Kepzettseg[] = [
|
|||||||
Name: 'Alkímia',
|
Name: 'Alkímia',
|
||||||
Description: 'Különféle különleges anyagok, pl. savak, görögtűz, stb. kikeverésére szolgál. Használatához gyakran jól felszerelt laboratórium szükséges. Az Alkímia képzettséggel a karakter képes beazonosítani a különféle vegyi anyagokat és mérgeket, bizonyos esetekben varázsitalokat is.',
|
Description: 'Különféle különleges anyagok, pl. savak, görögtűz, stb. kikeverésére szolgál. Használatához gyakran jól felszerelt laboratórium szükséges. Az Alkímia képzettséggel a karakter képes beazonosítani a különféle vegyi anyagokat és mérgeket, bizonyos esetekben varázsitalokat is.',
|
||||||
Tulajdonsag: [Tulajdonsag.Intelligencia],
|
Tulajdonsag: [Tulajdonsag.Intelligencia],
|
||||||
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista],
|
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista, Osztaly.Pap],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Id: 'k_alcazas',
|
Id: 'k_alcazas',
|
||||||
@@ -46,7 +46,7 @@ export const KepzettsegLista: Kepzettseg[] = [
|
|||||||
Name: 'Csillagjóslás',
|
Name: 'Csillagjóslás',
|
||||||
Description: 'A karakter a képzettséggel egyrészt képes meghatározni a karakterek hozzávetőleges pozícióját a térképen, másrészt egyszerűbb jóslatokat készíthet.',
|
Description: 'A karakter a képzettséggel egyrészt képes meghatározni a karakterek hozzávetőleges pozícióját a térképen, másrészt egyszerűbb jóslatokat készíthet.',
|
||||||
Tulajdonsag: [Tulajdonsag.Bolcsesseg],
|
Tulajdonsag: [Tulajdonsag.Bolcsesseg],
|
||||||
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista],
|
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista, Osztaly.Pap],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Id: 'k_egyensulyozas',
|
Id: 'k_egyensulyozas',
|
||||||
@@ -97,14 +97,14 @@ export const KepzettsegLista: Kepzettseg[] = [
|
|||||||
Name: 'Jelek Olvasása',
|
Name: 'Jelek Olvasása',
|
||||||
Description: 'A képzettséggel a karakter el tud olvasni más nyelven írt írásokat és feliratokat.',
|
Description: 'A képzettséggel a karakter el tud olvasni más nyelven írt írásokat és feliratokat.',
|
||||||
Tulajdonsag: [Tulajdonsag.Intelligencia],
|
Tulajdonsag: [Tulajdonsag.Intelligencia],
|
||||||
Osztalyok: [Osztaly.Tolvaj, Osztaly.Varazslo, Osztaly.Illuzionista],
|
Osztalyok: [Osztaly.Tolvaj, Osztaly.Varazslo, Osztaly.Illuzionista, Osztaly.Pap],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Id: 'k_koncentracio',
|
Id: 'k_koncentracio',
|
||||||
Name: 'Koncentráció',
|
Name: 'Koncentráció',
|
||||||
Description: 'Ez a képesség arra teszi alkalmassá a varázshasználót, hogy nehéz körülmények között – sebesülten, vágtató lovon, hánykolódó hajón, stb. – is alkalmazhassa varázslatait.',
|
Description: 'Ez a képesség arra teszi alkalmassá a varázshasználót, hogy nehéz körülmények között – sebesülten, vágtató lovon, hánykolódó hajón, stb. – is alkalmazhassa varázslatait.',
|
||||||
Tulajdonsag: [Tulajdonsag.Bolcsesseg],
|
Tulajdonsag: [Tulajdonsag.Bolcsesseg],
|
||||||
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista],
|
Osztalyok: [Osztaly.Varazslo, Osztaly.Illuzionista, Osztaly.Pap],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Id: 'k_lovaglas',
|
Id: 'k_lovaglas',
|
||||||
@@ -185,7 +185,7 @@ export const KepzettsegLista: Kepzettseg[] = [
|
|||||||
Name: 'Varázslatismeret',
|
Name: 'Varázslatismeret',
|
||||||
Description: 'A Mágiaismerettel ellentétben ez a képzettség nem a mágia elméletében, hanem a konkrét varázslatokban való ismereteket méri. Sikeres próbával a karakter azonosíthatja az elmondás alatt álló varázslatokat (NF= a mentődobás nehézsége), bizonyos mágikus effektusokat, csapdákat, stb.',
|
Description: 'A Mágiaismerettel ellentétben ez a képzettség nem a mágia elméletében, hanem a konkrét varázslatokban való ismereteket méri. Sikeres próbával a karakter azonosíthatja az elmondás alatt álló varázslatokat (NF= a mentődobás nehézsége), bizonyos mágikus effektusokat, csapdákat, stb.',
|
||||||
Tulajdonsag: [Tulajdonsag.Intelligencia],
|
Tulajdonsag: [Tulajdonsag.Intelligencia],
|
||||||
Osztalyok: [Osztaly.Illuzionista, Osztaly.Varazslo],
|
Osztalyok: [Osztaly.Illuzionista, Osztaly.Varazslo, Osztaly.Pap],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Id: 'k_zarnyitas',
|
Id: 'k_zarnyitas',
|
||||||
|
|||||||
Reference in New Issue
Block a user