feat(game-engine): implement CreateManyNPC monthly action

This commit is contained in:
2026-07-25 18:15:52 +00:00
parent 3a8dba6cbf
commit 90d195e721
11 changed files with 962 additions and 6 deletions
+19 -3
View File
@@ -153,6 +153,11 @@ const buildRankRows = (
}));
};
const buildInitialRankRows = (
general: ReturnType<InMemoryTurnWorld['consumeDirtyState']>['generals'][number]
): Array<{ generalId: number; nationId: number; type: string; value: number }> =>
buildRankRows(general).map((row) => ({ ...row, nationId: 0, value: 0 }));
const buildGeneralUpdate = (
general: ReturnType<InMemoryTurnWorld['consumeDirtyState']>['generals'][number]
): TurnEngineGeneralUpdateInput => ({
@@ -175,6 +180,10 @@ const buildGeneralUpdate = (
train: toLegacyDatabaseInt(general.train),
atmos: toLegacyDatabaseInt(general.atmos),
age: general.age,
affinity: general.affinity ?? null,
bornYear: general.bornYear,
deadYear: general.deadYear,
picture: general.picture ?? null,
npcState: general.npcState,
horseCode: toCode(general.role.items.horse),
weaponCode: toCode(general.role.items.weapon),
@@ -212,6 +221,10 @@ const buildGeneralCreate = (
train: toLegacyDatabaseInt(general.train),
atmos: toLegacyDatabaseInt(general.atmos),
age: general.age,
affinity: general.affinity ?? null,
bornYear: general.bornYear,
deadYear: general.deadYear,
picture: general.picture ?? null,
horseCode: toCode(general.role.items.horse),
weaponCode: toCode(general.role.items.weapon),
bookCode: toCode(general.role.items.book),
@@ -662,9 +675,12 @@ export const createDatabaseTurnHooks = async (
),
]);
const rankTargets = [...createdGenerals, ...generals];
if (rankTargets.length > 0) {
const rankRows = rankTargets.flatMap(buildRankRows);
const rankTargets = generals.filter((general) => !createdIds.has(general.id));
if (createdGenerals.length > 0 || rankTargets.length > 0) {
const rankRows = [
...createdGenerals.flatMap(buildInitialRankRows),
...rankTargets.flatMap(buildRankRows),
];
await Promise.all(
rankRows.map((row) =>
prisma.rankData.upsert({