Some fixes and additions

This commit is contained in:
Torsten Schulz
2025-07-09 14:28:35 +02:00
parent 5029be81e9
commit fceea5b7fb
32 changed files with 4373 additions and 1294 deletions

View File

@@ -12,6 +12,8 @@ import PartyType from "../../models/falukant/type/party.js";
import MusicType from "../../models/falukant/type/music.js";
import BanquetteType from "../../models/falukant/type/banquette.js";
import LearnRecipient from "../../models/falukant/type/learn_recipient.js";
import PoliticalOfficeType from "../../models/falukant/type/political_office_type.js";
import PoliticalOfficePrerequisite from "../../models/falukant/predefine/political_office_prerequisite.js";
export const initializeFalukantTypes = async () => {
await initializeFalukantTypeRegions();
@@ -25,6 +27,8 @@ export const initializeFalukantTypes = async () => {
await initializeFalukantMusicTypes();
await initializeFalukantBanquetteTypes();
await initializeLearnerTypes();
await initializePoliticalOfficeTypes();
await initializePoliticalOfficePrerequisites();
};
const regionTypes = [];
@@ -39,14 +43,15 @@ const regionTypeTrs = [
const regions = [
{ labelTr: "falukant", regionType: "country", parentTr: null },
{ labelTr: "duchy1", regionType: "duchy", parentTr: "falukant" },
{ labelTr: "markgravate", regionType: "markgravate", parentTr: "duchy1" },
{ labelTr: "shire1", regionType: "shire", parentTr: "markgravate" },
{ labelTr: "county1", regionType: "county", parentTr: "shire1" },
{ labelTr: "town1", regionType: "city", parentTr: "county1" },
{ labelTr: "town2", regionType: "city", parentTr: "county1" },
{ labelTr: "town3", regionType: "city", parentTr: "county1" },
{ labelTr: "town4", regionType: "city", parentTr: "county1" },
{ labelTr: "Hessen", regionType: "duchy", parentTr: "falukant" },
{ labelTr: "Groß-Benbach", regionType: "markgravate", parentTr: "Hessen" },
{ labelTr: "Siebenbachen", regionType: "shire", parentTr: "Groß-Benbach" },
{ labelTr: "Bad Homburg", regionType: "county", parentTr: "Siebenbachen" },
{ labelTr: "Maintal", regionType: "county", parentTr: "Siebenbachen" },
{ labelTr: "Frankfurt", regionType: "city", parentTr: "Bad Homburg", map: {x: 187, y: 117, w: 10, h:11} },
{ labelTr: "Oberursel", regionType: "city", parentTr: "Bad Homburg", map: {x: 168, y: 121, w: 10, h:11} },
{ labelTr: "Offenbach", regionType: "city", parentTr: "Bad Homburg", map: {x: 171, y: 142, w: 10, h:11} },
{ labelTr: "Königstein", regionType: "city", parentTr: "Maintal", map: {x: 207, y: 124, w: 24, h:18} },
];
const relationships = [
@@ -244,8 +249,8 @@ const musicTypes = [
];
const banquetteTypes = [
{ type: 'bread', cost: 5, reputationGrowth: 0 },
{ type: 'roastWithBeer', cost: 200, reputationGrowth: 5 },
{ type: 'bread', cost: 5, reputationGrowth: 0 },
{ type: 'roastWithBeer', cost: 200, reputationGrowth: 5 },
{ type: 'poultryWithVegetablesAndWine', cost: 5000, reputationGrowth: 10 },
{ type: 'extensiveBuffet', cost: 100000, reputationGrowth: 20 }
];
@@ -256,6 +261,282 @@ const learnerTypes = [
{ tr: 'director', },
];
const politicalOffices = [
{ tr: "assessor", seatsPerRegion: 10, regionType: "city", termLength: 5 },
{ tr: "councillor", seatsPerRegion: 7, regionType: "city", termLength: 7 },
{ tr: "council", seatsPerRegion: 5, regionType: "city", termLength: 4 },
{ tr: "beadle", seatsPerRegion: 1, regionType: "city", termLength: 6 },
{ tr: "town-clerk", seatsPerRegion: 3, regionType: "city", termLength: 10 },
{ tr: "mayor", seatsPerRegion: 1, regionType: "city", termLength: 3 },
{ tr: "master-builder", seatsPerRegion: 10, regionType: "county", termLength: 10 },
{ tr: "village-major", seatsPerRegion: 6, regionType: "county", termLength: 5 },
{ tr: "judge", seatsPerRegion: 3, regionType: "county", termLength: 8 },
{ tr: "bailif", seatsPerRegion: 1, regionType: "county", termLength: 4 },
{ tr: "taxman", seatsPerRegion: 8, regionType: "shire", termLength: 5 },
{ tr: "sheriff", seatsPerRegion: 5, regionType: "shire", termLength: 8 },
{ tr: "consultant", seatsPerRegion: 3, regionType: "shire", termLength: 9 },
{ tr: "treasurer", seatsPerRegion: 1, regionType: "shire", termLength: 7 },
{ tr: "hangman", seatsPerRegion: 9, regionType: "markgravate", termLength: 5 },
{ tr: "territorial-council", seatsPerRegion: 6, regionType: "markgravate", termLength: 6 },
{ tr: "territorial-council-speaker", seatsPerRegion: 4, regionType: "markgravate", termLength: 8 },
{ tr: "ruler-consultant", seatsPerRegion: 1, regionType: "markgravate", termLength: 3 },
{ tr: "state-administrator", seatsPerRegion: 7, regionType: "duchy", termLength: 3 },
{ tr: "super-state-administrator", seatsPerRegion: 5, regionType: "duchy", termLength: 6 },
{ tr: "governor", seatsPerRegion: 1, regionType: "duchy", termLength: 5 },
{ tr: "ministry-helper", seatsPerRegion: 12, regionType: "country", termLength: 4 },
{ tr: "minister", seatsPerRegion: 3, regionType: "country", termLength: 4 },
{ tr: "chancellor", seatsPerRegion: 1, regionType: "country", termLength: 4 }
];
const politicalOfficePrerequisites = [
{
officeTr: "assessor",
prerequisite: {
titles: [
"civil", "sir", "townlord", "by", "landlord", "knight",
"baron", "count", "palsgrave", "margrave", "landgrave",
"ruler", "elector", "imperial-prince", "duke", "grand-duke",
"prince-regent", "king"
]
}
},
{
officeTr: "councillor",
prerequisite: {
titles: [
"civil", "sir", "townlord", "by", "landlord", "knight",
"baron", "count", "palsgrave", "margrave", "landgrave",
"ruler", "elector", "imperial-prince", "duke", "grand-duke",
"prince-regent", "king"
],
jobs: ["assessor"]
}
},
{
officeTr: "council",
prerequisite: {
titles: [
"civil", "sir", "townlord", "by", "landlord", "knight",
"baron", "count", "palsgrave", "margrave", "landgrave",
"ruler", "elector", "imperial-prince", "duke", "grand-duke",
"prince-regent", "king"
],
jobs: ["councillor"]
}
},
{
officeTr: "beadle",
prerequisite: {
titles: [
"sir", "townlord", "by", "landlord", "knight", "baron",
"count", "palsgrave", "margrave", "landgrave", "ruler",
"elector", "imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["council"]
}
},
{
officeTr: "town-clerk",
prerequisite: {
titles: [
"sir", "townlord", "by", "landlord", "knight", "baron",
"count", "palsgrave", "margrave", "landgrave", "ruler",
"elector", "imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["council"]
}
},
{
officeTr: "mayor",
prerequisite: {
titles: [
"townlord", "by", "landlord", "knight", "baron", "count",
"palsgrave", "margrave", "landgrave", "ruler", "elector",
"imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["beadle", "town-clerk"]
}
},
{
officeTr: "master-builder",
prerequisite: {
titles: [
"by", "landlord", "knight", "baron", "count", "palsgrave",
"margrave", "landgrave", "ruler", "elector", "imperial-prince",
"duke", "grand-duke", "prince-regent", "king"
],
jobs: ["mayor"]
}
},
{
officeTr: "village-major",
prerequisite: {
titles: [
"by", "landlord", "knight", "baron", "count", "palsgrave",
"margrave", "landgrave", "ruler", "elector", "imperial-prince",
"duke", "grand-duke", "prince-regent", "king"
],
jobs: ["master-builder"]
}
},
{
officeTr: "judge",
prerequisite: {
titles: [
"landlord", "knight", "baron", "count", "palsgrave", "margrave",
"landgrave", "ruler", "elector", "imperial-prince", "duke",
"grand-duke", "prince-regent", "king"
],
jobs: ["village-major"]
}
},
{
officeTr: "bailif",
prerequisite: {
titles: [
"landlord", "knight", "baron", "count", "palsgrave", "margrave",
"landgrave", "ruler", "elector", "imperial-prince", "duke",
"grand-duke", "prince-regent", "king"
],
jobs: ["judge"]
}
},
{
officeTr: "taxman",
prerequisite: {
titles: [
"knight", "baron", "count", "palsgrave", "margrave", "landgrave",
"ruler", "elector", "imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["bailif"]
}
},
{
officeTr: "sheriff",
prerequisite: {
titles: [
"baron", "count", "palsgrave", "margrave", "landgrave", "ruler",
"elector", "imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["taxman"]
}
},
{
officeTr: "consultant",
prerequisite: {
titles: [
"baron", "count", "palsgrave", "margrave", "landgrave", "ruler",
"elector", "imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["sheriff"]
}
},
{
officeTr: "treasurer",
prerequisite: {
titles: [
"count", "palsgrave", "margrave", "landgrave", "ruler", "elector",
"imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["consultant"]
}
},
{
officeTr: "hangman",
prerequisite: {
titles: [
"count", "palsgrave", "margrave", "landgrave", "ruler", "elector",
"imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["consultant"]
}
},
{
officeTr: "territorial-council",
prerequisite: {
titles: [
"palsgrave", "margrave", "landgrave", "ruler", "elector", "imperial-prince",
"duke", "grand-duke", "prince-regent", "king"
],
jobs: ["treasurer", "hangman"]
}
},
{
officeTr: "territorial-council-speaker",
prerequisite: {
titles: [
"margrave", "landgrave", "ruler", "elector", "imperial-prince", "duke",
"grand-duke", "prince-regent", "king"
],
jobs: ["territorial-council"]
}
},
{
officeTr: "ruler-consultant",
prerequisite: {
titles: [
"landgrave", "ruler", "elector", "imperial-prince", "duke", "grand-duke",
"prince-regent", "king"
],
jobs: ["territorial-council-speaker"]
}
},
{
officeTr: "state-administrator",
prerequisite: {
titles: [
"ruler", "elector", "imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["ruler-consultant"]
}
},
{
officeTr: "super-state-administrator",
prerequisite: {
titles: [
"elector", "imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["state-administrator"]
}
},
{
officeTr: "governor",
prerequisite: {
titles: [
"imperial-prince", "duke", "grand-duke", "prince-regent", "king"
],
jobs: ["super-state-administrator"]
}
},
{
officeTr: "ministry-helper",
prerequisite: {
titles: [
"grand-duke", "prince-regent", "king"
],
jobs: ["governor"]
}
},
{
officeTr: "minister",
prerequisite: {
titles: [
"prince-regent", "king"
],
jobs: ["ministry-helper"]
}
},
{
officeTr: "chancellor",
prerequisite: {
titles: [
"prince-regent", "king"
],
jobs: ["minister"]
}
}
];
{
const giftNames = promotionalGifts.map(g => g.name);
const traitNames = characterTraits.map(t => t.name);
@@ -330,7 +611,8 @@ export const initializeFalukantRegions = async () => {
where: { name: region.labelTr },
defaults: {
regionTypeId: regionType.id,
parentId: parentRegion?.id || null
parentId: parentRegion?.id || null,
map: parentRegion?.map || {},
}
});
}
@@ -478,4 +760,37 @@ export const initializeLearnerTypes = async () => {
}
});
}
}
}
export const initializePoliticalOfficeTypes = async () => {
for (const po of politicalOffices) {
await PoliticalOfficeType.findOrCreate({
where: { name: po.tr },
defaults: {
seatsPerRegion: po.seatsPerRegion,
regionType: po.regionType,
termLength: po.termLength
}
});
}
};
export const initializePoliticalOfficePrerequisites = async () => {
for (const prereq of politicalOfficePrerequisites) {
// zunächst den OfficeType anhand seines Namens (tr) ermitteln
const office = await PoliticalOfficeType.findOne({
where: { name: prereq.officeTr }
});
if (!office) continue;
// Nun findOrCreate mit dem neuen Spaltennamen:
await PoliticalOfficePrerequisite.findOrCreate({
where: { office_type_id: office.id },
defaults: {
office_type_id: office.id,
prerequisite: prereq.prerequisite
}
});
}
};