Compare commits

..

8 Commits

Author SHA1 Message Date
f72c1482b3 feat: handle NemesisKillConvert at missionInventoryUpdate
All checks were successful
Build / build (push) Successful in 55s
Build / build (pull_request) Successful in 1m32s
2025-04-27 21:37:14 +02:00
40acb3b03f add getWeaponsForManifest 2025-04-27 21:37:06 +02:00
9e94083875 feat: handle KubrowPetEggs in missionInventoryUpdate (#1876)
All checks were successful
Build Docker image / docker (push) Successful in 33s
Build / build (push) Successful in 1m35s
Closes #1866

Reviewed-on: #1876
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-27 12:36:00 -07:00
db0e0d80dd chore: remove PropertyTextHash from auto-generated vendors
All checks were successful
Build / build (push) Successful in 55s
Build Docker image / docker (push) Successful in 35s
2025-04-27 07:20:04 +02:00
5cda2e2d08 chore: improve unlockAllScans's handling of existing scans (#1875)
All checks were successful
Build Docker image / docker (push) Successful in 1m5s
Build / build (push) Successful in 1m23s
Reviewed-on: #1875
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 19:28:03 -07:00
e23d865044 fix: use a list of "known good" syndicate missions (#1874)
Some checks failed
Build Docker image / docker (push) Has been cancelled
Build / build (push) Has been cancelled
Closes #1870

Reviewed-on: #1874
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-04-26 19:27:50 -07:00
c7658b5b20 chore: use parallelForeach in removePigmentsFromGuildMembers
All checks were successful
Build Docker image / docker (push) Successful in 34s
Build / build (push) Successful in 1m34s
2025-04-27 04:22:18 +02:00
9993500eca chore(webui): update to Spanish translation (#1881)
All checks were successful
Build Docker image / docker (push) Successful in 1m7s
Build / build (push) Successful in 1m4s
Reviewed-on: #1881
Co-authored-by: hxedcl <hxedcl@noreply.localhost>
Co-committed-by: hxedcl <hxedcl@noreply.localhost>
2025-04-26 18:53:46 -07:00
8 changed files with 186 additions and 26 deletions

View File

@ -27,7 +27,15 @@ const viewController: RequestHandler = async (req, res) => {
for (const type of Object.keys(ExportEnemies.avatars)) { for (const type of Object.keys(ExportEnemies.avatars)) {
if (!scans.has(type)) scans.add(type); if (!scans.has(type)) scans.add(type);
} }
responseJson.Scans ??= [];
// Take any existing scans and also set them to 9999
if (responseJson.Scans) {
for (const scan of responseJson.Scans) {
scans.add(scan.type);
}
}
responseJson.Scans = [];
for (const type of scans) { for (const type of scans) {
responseJson.Scans.push({ type: type, scans: 9999 }); responseJson.Scans.push({ type: type, scans: 9999 });
} }

View File

@ -505,7 +505,7 @@ export const hasGuildPermissionEx = (
export const removePigmentsFromGuildMembers = async (guildId: string | Types.ObjectId): Promise<void> => { export const removePigmentsFromGuildMembers = async (guildId: string | Types.ObjectId): Promise<void> => {
const members = await GuildMember.find({ guildId, status: 0 }, "accountId"); const members = await GuildMember.find({ guildId, status: 0 }, "accountId");
for (const member of members) { await parallelForeach(members, async member => {
const inventory = await getInventory(member.accountId.toString(), "MiscItems"); const inventory = await getInventory(member.accountId.toString(), "MiscItems");
const index = inventory.MiscItems.findIndex( const index = inventory.MiscItems.findIndex(
x => x.ItemType == "/Lotus/Types/Items/Research/DojoColors/GenericDojoColorPigment" x => x.ItemType == "/Lotus/Types/Items/Research/DojoColors/GenericDojoColorPigment"
@ -514,7 +514,7 @@ export const removePigmentsFromGuildMembers = async (guildId: string | Types.Obj
inventory.MiscItems.splice(index, 1); inventory.MiscItems.splice(index, 1);
await inventory.save(); await inventory.save();
} }
} });
}; };
export const processGuildTechProjectContributionsUpdate = async ( export const processGuildTechProjectContributionsUpdate = async (

View File

@ -515,6 +515,16 @@ export const addMissionInventoryUpdates = async (
} }
break; break;
} }
case "KubrowPetEggs": {
for (const egg of value) {
inventory.KubrowPetEggs ??= [];
inventory.KubrowPetEggs.push({
ItemType: egg.ItemType,
_id: new Types.ObjectId()
});
}
break;
}
case "DiscoveredMarkers": { case "DiscoveredMarkers": {
for (const clientMarker of value) { for (const clientMarker of value) {
const dbMarker = inventory.DiscoveredMarkers.find(x => x.tag == clientMarker.tag); const dbMarker = inventory.DiscoveredMarkers.find(x => x.tag == clientMarker.tag);

View File

@ -73,7 +73,6 @@ const generatableVendors: IGeneratableVendorInfo[] = [
{ {
_id: { $oid: "67dadc30e4b6e0e5979c8d84" }, _id: { $oid: "67dadc30e4b6e0e5979c8d84" },
TypeName: "/Lotus/Types/Game/VendorManifests/TheHex/InfestedLichWeaponVendorManifest", TypeName: "/Lotus/Types/Game/VendorManifests/TheHex/InfestedLichWeaponVendorManifest",
PropertyTextHash: "77093DD05A8561A022DEC9A4B9BB4A56",
RandomSeedType: "VRST_WEAPON", RandomSeedType: "VRST_WEAPON",
RequiredGoalTag: "", RequiredGoalTag: "",
WeaponUpgradeValueAttenuationExponent: 2.25, WeaponUpgradeValueAttenuationExponent: 2.25,
@ -83,7 +82,6 @@ const generatableVendors: IGeneratableVendorInfo[] = [
{ {
_id: { $oid: "60ad3b6ec96976e97d227e19" }, _id: { $oid: "60ad3b6ec96976e97d227e19" },
TypeName: "/Lotus/Types/Game/VendorManifests/Hubs/PerrinSequenceWeaponVendorManifest", TypeName: "/Lotus/Types/Game/VendorManifests/Hubs/PerrinSequenceWeaponVendorManifest",
PropertyTextHash: "34F8CF1DFF745F0D67433A5EF0A03E70",
RandomSeedType: "VRST_WEAPON", RandomSeedType: "VRST_WEAPON",
WeaponUpgradeValueAttenuationExponent: 2.25, WeaponUpgradeValueAttenuationExponent: 2.25,
cycleOffset: 1744934400_000, cycleOffset: 1744934400_000,
@ -92,21 +90,18 @@ const generatableVendors: IGeneratableVendorInfo[] = [
{ {
_id: { $oid: "5be4a159b144f3cdf1c22efa" }, _id: { $oid: "5be4a159b144f3cdf1c22efa" },
TypeName: "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorManifest", TypeName: "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorManifest",
PropertyTextHash: "A39621049CA3CA13761028CD21C239EF",
RandomSeedType: "VRST_FLAVOUR_TEXT", RandomSeedType: "VRST_FLAVOUR_TEXT",
cycleDuration: unixTimesInMs.hour cycleDuration: unixTimesInMs.hour
}, },
{ {
_id: { $oid: "61ba123467e5d37975aeeb03" }, _id: { $oid: "61ba123467e5d37975aeeb03" },
TypeName: "/Lotus/Types/Game/VendorManifests/Hubs/GuildAdvertisementVendorManifest", TypeName: "/Lotus/Types/Game/VendorManifests/Hubs/GuildAdvertisementVendorManifest",
PropertyTextHash: "255AFE2169BAE4130B4B20D7C55D14FA",
RandomSeedType: "VRST_FLAVOUR_TEXT", RandomSeedType: "VRST_FLAVOUR_TEXT",
cycleDuration: unixTimesInMs.week cycleDuration: unixTimesInMs.week
} }
// { // {
// _id: { $oid: "5dbb4c41e966f7886c3ce939" }, // _id: { $oid: "5dbb4c41e966f7886c3ce939" },
// TypeName: "/Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest", // TypeName: "/Lotus/Types/Game/VendorManifests/Hubs/IronwakeDondaVendorManifest"
// PropertyTextHash: "62B64A8065B7C0FA345895D4BC234621"
// } // }
]; ];

View File

@ -1,5 +1,6 @@
import staticWorldState from "@/static/fixed_responses/worldState/worldState.json"; import staticWorldState from "@/static/fixed_responses/worldState/worldState.json";
import sortieTilesets from "@/static/fixed_responses/worldState/sortieTilesets.json"; import sortieTilesets from "@/static/fixed_responses/worldState/sortieTilesets.json";
import syndicateMissions from "@/static/fixed_responses/worldState/syndicateMissions.json";
import { buildConfig } from "@/src/services/buildConfigService"; import { buildConfig } from "@/src/services/buildConfigService";
import { unixTimesInMs } from "@/src/constants/timeConstants"; import { unixTimesInMs } from "@/src/constants/timeConstants";
import { config } from "@/src/services/configService"; import { config } from "@/src/services/configService";
@ -189,20 +190,7 @@ const pushSyndicateMissions = (
idSuffix: string, idSuffix: string,
syndicateTag: string syndicateTag: string
): void => { ): void => {
const nodeOptions: string[] = []; const nodeOptions: string[] = [...syndicateMissions];
for (const [key, value] of Object.entries(ExportRegions)) {
if (
!isArchwingMission(value) &&
!value.questReq && // Exclude zariman, murmor, and 1999 stuff
!value.hidden && // Exclude the index
!value.darkSectorData && // Exclude dark sectors
value.missionIndex != 10 && // Exclude MT_PVP (for relays)
value.missionIndex != 23 && // no junctions
value.missionIndex < 28 // no open worlds, railjack, etc
) {
nodeOptions.push(key);
}
}
const rng = new CRng(seed); const rng = new CRng(seed);
const nodes: string[] = []; const nodes: string[] = [];

View File

@ -22,6 +22,7 @@ import {
ILoadOutPresets, ILoadOutPresets,
IInvasionProgressClient, IInvasionProgressClient,
IWeaponSkinClient, IWeaponSkinClient,
IKubrowPetEggClient,
INemesisClient INemesisClient
} from "./inventoryTypes/inventoryTypes"; } from "./inventoryTypes/inventoryTypes";
import { IGroup } from "./loginTypes"; import { IGroup } from "./loginTypes";
@ -127,6 +128,7 @@ export type IMissionInventoryUpdateRequest = {
NumExtraRewards: number; NumExtraRewards: number;
Count: number; Count: number;
}[]; }[];
KubrowPetEggs?: IKubrowPetEggClient[];
DiscoveredMarkers?: IDiscoveredMarker[]; DiscoveredMarkers?: IDiscoveredMarker[];
LockedWeaponGroup?: ILockedWeaponGroupClient; // sent when captured by zanuka LockedWeaponGroup?: ILockedWeaponGroupClient; // sent when captured by zanuka
UnlockWeapons?: boolean; // sent when recovered weapons from zanuka capture UnlockWeapons?: boolean; // sent when recovered weapons from zanuka capture

View File

@ -0,0 +1,157 @@
[
"SettlementNode1",
"SettlementNode11",
"SettlementNode12",
"SettlementNode14",
"SettlementNode15",
"SettlementNode2",
"SettlementNode3",
"SolNode1",
"SolNode10",
"SolNode100",
"SolNode101",
"SolNode102",
"SolNode103",
"SolNode106",
"SolNode107",
"SolNode109",
"SolNode11",
"SolNode113",
"SolNode118",
"SolNode119",
"SolNode12",
"SolNode121",
"SolNode122",
"SolNode123",
"SolNode125",
"SolNode126",
"SolNode128",
"SolNode130",
"SolNode131",
"SolNode132",
"SolNode135",
"SolNode137",
"SolNode138",
"SolNode139",
"SolNode14",
"SolNode140",
"SolNode141",
"SolNode146",
"SolNode147",
"SolNode149",
"SolNode15",
"SolNode153",
"SolNode16",
"SolNode162",
"SolNode164",
"SolNode166",
"SolNode167",
"SolNode17",
"SolNode171",
"SolNode172",
"SolNode173",
"SolNode175",
"SolNode177",
"SolNode18",
"SolNode181",
"SolNode184",
"SolNode185",
"SolNode187",
"SolNode188",
"SolNode189",
"SolNode19",
"SolNode191",
"SolNode195",
"SolNode196",
"SolNode2",
"SolNode20",
"SolNode203",
"SolNode204",
"SolNode205",
"SolNode209",
"SolNode21",
"SolNode211",
"SolNode212",
"SolNode214",
"SolNode215",
"SolNode216",
"SolNode217",
"SolNode22",
"SolNode220",
"SolNode223",
"SolNode224",
"SolNode225",
"SolNode226",
"SolNode23",
"SolNode25",
"SolNode26",
"SolNode27",
"SolNode30",
"SolNode31",
"SolNode36",
"SolNode38",
"SolNode39",
"SolNode4",
"SolNode400",
"SolNode401",
"SolNode402",
"SolNode403",
"SolNode404",
"SolNode405",
"SolNode406",
"SolNode407",
"SolNode408",
"SolNode409",
"SolNode41",
"SolNode410",
"SolNode412",
"SolNode42",
"SolNode43",
"SolNode45",
"SolNode46",
"SolNode48",
"SolNode49",
"SolNode50",
"SolNode56",
"SolNode57",
"SolNode58",
"SolNode59",
"SolNode6",
"SolNode61",
"SolNode62",
"SolNode63",
"SolNode64",
"SolNode66",
"SolNode67",
"SolNode68",
"SolNode70",
"SolNode706",
"SolNode707",
"SolNode708",
"SolNode709",
"SolNode710",
"SolNode711",
"SolNode72",
"SolNode73",
"SolNode74",
"SolNode741",
"SolNode742",
"SolNode743",
"SolNode744",
"SolNode745",
"SolNode746",
"SolNode748",
"SolNode75",
"SolNode76",
"SolNode78",
"SolNode79",
"SolNode81",
"SolNode82",
"SolNode84",
"SolNode85",
"SolNode88",
"SolNode89",
"SolNode93",
"SolNode96",
"SolNode97"
]

View File

@ -120,9 +120,9 @@ dict = {
mods_fingerprintHelp: `¿Necesitas ayuda con la huella digital?`, mods_fingerprintHelp: `¿Necesitas ayuda con la huella digital?`,
mods_rivens: `Agrietados`, mods_rivens: `Agrietados`,
mods_mods: `Mods`, mods_mods: `Mods`,
mods_addMissingUnrankedMods: `[UNTRANSLATED] Add Missing Unranked Mods`, mods_addMissingUnrankedMods: `Agregar mods sin rango faltantes`,
mods_removeUnranked: `Quitar mods sin rango`, mods_removeUnranked: `Quitar mods sin rango`,
mods_addMissingMaxRankMods: `[UNTRANSLATED] Add Missing Max Rank Mods`, mods_addMissingMaxRankMods: `Agregar mods de rango máximo faltantes`,
cheats_administratorRequirement: `Debes ser administrador para usar esta función. Para convertirte en administrador, agrega <code>|DISPLAYNAME|</code> a <code>administratorNames</code> en el archivo config.json.`, cheats_administratorRequirement: `Debes ser administrador para usar esta función. Para convertirte en administrador, agrega <code>|DISPLAYNAME|</code> a <code>administratorNames</code> en el archivo config.json.`,
cheats_server: `Servidor`, cheats_server: `Servidor`,
cheats_skipTutorial: `Omitir tutorial`, cheats_skipTutorial: `Omitir tutorial`,
@ -134,7 +134,7 @@ dict = {
cheats_infiniteEndo: `Endo infinito`, cheats_infiniteEndo: `Endo infinito`,
cheats_infiniteRegalAya: `Aya Real infinita`, cheats_infiniteRegalAya: `Aya Real infinita`,
cheats_infiniteHelminthMaterials: `Materiales Helminto infinitos`, cheats_infiniteHelminthMaterials: `Materiales Helminto infinitos`,
cheats_dontSubtractConsumables: `[UNTRANSLATED] Don't Subtract Consumables`, cheats_dontSubtractConsumables: `No restar consumibles`,
cheats_unlockAllShipFeatures: `Desbloquear todas las funciones de nave`, cheats_unlockAllShipFeatures: `Desbloquear todas las funciones de nave`,
cheats_unlockAllShipDecorations: `Desbloquear todas las decoraciones de nave`, cheats_unlockAllShipDecorations: `Desbloquear todas las decoraciones de nave`,
cheats_unlockAllFlavourItems: `Desbloquear todos los <abbr title="Conjuntos de animaciones, glifos, paletas, etc.">ítems estéticos</abbr>`, cheats_unlockAllFlavourItems: `Desbloquear todos los <abbr title="Conjuntos de animaciones, glifos, paletas, etc.">ítems estéticos</abbr>`,