accurate first inventory
This commit is contained in:
parent
78548a2ebe
commit
c00f5a764e
@ -1,13 +1,11 @@
|
||||
import { RequestHandler } from "express";
|
||||
|
||||
const getNewRewardSeedController: RequestHandler = (_req, res) => {
|
||||
export const getNewRewardSeedController: RequestHandler = (_req, res) => {
|
||||
res.json({ rewardSeed: generateRewardSeed() });
|
||||
};
|
||||
|
||||
function generateRewardSeed(): number {
|
||||
export function generateRewardSeed(): number {
|
||||
const min = -Number.MAX_SAFE_INTEGER;
|
||||
const max = Number.MAX_SAFE_INTEGER;
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||
}
|
||||
|
||||
export { getNewRewardSeedController };
|
||||
|
1
src/controllers/api/giveStartingGearController.ts
Normal file
1
src/controllers/api/giveStartingGearController.ts
Normal file
@ -0,0 +1 @@
|
||||
export const giveStartingGearController = async () => {};
|
@ -64,7 +64,11 @@ import {
|
||||
IKubrowPetEggClient,
|
||||
ICustomMarkers,
|
||||
IMarkerInfo,
|
||||
IMarker
|
||||
IMarker,
|
||||
ICalendarProgress,
|
||||
IPendingCouponDatabase,
|
||||
IPendingCouponClient,
|
||||
ILibraryAvailableDailyTaskInfo
|
||||
} from "../../types/inventoryTypes/inventoryTypes";
|
||||
import { IOid } from "../../types/commonTypes";
|
||||
import {
|
||||
@ -323,7 +327,7 @@ MailboxSchema.set("toJSON", {
|
||||
const DuviriInfoSchema = new Schema<IDuviriInfo>(
|
||||
{
|
||||
Seed: Number,
|
||||
NumCompletions: Number
|
||||
NumCompletions: { type: Number, default: 0 }
|
||||
},
|
||||
{
|
||||
_id: false,
|
||||
@ -435,6 +439,7 @@ const seasonChallengeHistorySchema = new Schema<ISeasonChallenge>(
|
||||
//TODO: check whether this is complete
|
||||
const playerSkillsSchema = new Schema<IPlayerSkills>(
|
||||
{
|
||||
LPP_NONE: { type: Number, default: 0 },
|
||||
LPP_SPACE: { type: Number, default: 0 },
|
||||
LPS_PILOTING: { type: Number, default: 0 },
|
||||
LPS_GUNNERY: { type: Number, default: 0 },
|
||||
@ -891,19 +896,63 @@ const CustomMarkersSchema = new Schema<ICustomMarkers>(
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
const calenderProgressSchema = new Schema<ICalendarProgress>(
|
||||
{
|
||||
Version: { type: Number, default: 19 },
|
||||
Iteration: { type: Number, default: 2 },
|
||||
YearProgress: {
|
||||
Upgrades: { type: [] }
|
||||
},
|
||||
SeasonProgress: {
|
||||
SeasonType: String,
|
||||
LastCompletedDayIdx: { type: Number, default: -1 },
|
||||
LastCompletedChallengeDayIdx: { type: Number, default: -1 },
|
||||
ActivatedChallenges: []
|
||||
}
|
||||
},
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
const pendingCouponSchema = new Schema<IPendingCouponDatabase>(
|
||||
{
|
||||
Expiry: { type: Date, default: new Date(0) },
|
||||
Discount: { type: Number, default: 0 }
|
||||
},
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
pendingCouponSchema.set("toJSON", {
|
||||
transform(_doc, ret, _options) {
|
||||
(ret as IPendingCouponClient).Expiry = toMongoDate((ret as IPendingCouponDatabase).Expiry);
|
||||
}
|
||||
});
|
||||
|
||||
const libraryAvailableDailyTaskInfoSchema = new Schema<ILibraryAvailableDailyTaskInfo>(
|
||||
{
|
||||
EnemyTypes: [String],
|
||||
EnemyLocTag: String,
|
||||
EnemyIcon: String,
|
||||
ScansRequired: Number,
|
||||
RewardStoreItem: String,
|
||||
RewardQuantity: Number,
|
||||
RewardStanding: Number
|
||||
},
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
||||
{
|
||||
accountOwnerId: Schema.Types.ObjectId,
|
||||
SubscribedToEmails: Number,
|
||||
Created: Date,
|
||||
SubscribedToEmails: { type: Number, default: 0 },
|
||||
SubscribedToEmailsPersonalized: { type: Number, default: 0 },
|
||||
RewardSeed: Number,
|
||||
|
||||
//Credit
|
||||
RegularCredits: { type: Number, default: 0 },
|
||||
//Platinum
|
||||
PremiumCredits: { type: Number, default: 50 },
|
||||
PremiumCredits: { type: Number, default: 0 },
|
||||
//Gift Platinum(Non trade)
|
||||
PremiumCreditsFree: { type: Number, default: 50 },
|
||||
PremiumCreditsFree: { type: Number, default: 0 },
|
||||
//Endo
|
||||
FusionPoints: { type: Number, default: 0 },
|
||||
//Regal Aya
|
||||
@ -911,7 +960,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
||||
|
||||
//Slots
|
||||
SuitBin: { type: slotsBinSchema, default: { Slots: 3 } },
|
||||
WeaponBin: { type: slotsBinSchema, default: { Slots: 10 } },
|
||||
WeaponBin: { type: slotsBinSchema, default: { Slots: 11 } },
|
||||
SentinelBin: { type: slotsBinSchema, default: { Slots: 10 } },
|
||||
SpaceSuitBin: { type: slotsBinSchema, default: { Slots: 4 } },
|
||||
SpaceWeaponBin: { type: slotsBinSchema, default: { Slots: 4 } },
|
||||
@ -1022,7 +1071,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
||||
//Complete Mission\Quests
|
||||
Missions: [missionSchema],
|
||||
QuestKeys: [questKeysSchema],
|
||||
ActiveQuest: { type: String, default: "/Lotus/Types/Keys/VorsPrize/VorsPrizeQuestKeyChain" }, //TODO: check after mission starting gear
|
||||
ActiveQuest: { type: String, default: "" },
|
||||
//item like DojoKey or Boss missions key
|
||||
LevelKeys: [Schema.Types.Mixed],
|
||||
//Active quests
|
||||
@ -1137,7 +1186,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
||||
//Cephalon Simaris Entries Example:"TargetType"+"Scans"(1-10)+"Completed": true|false
|
||||
LibraryPersonalProgress: [Schema.Types.Mixed],
|
||||
//Cephalon Simaris Daily Task
|
||||
LibraryAvailableDailyTaskInfo: Schema.Types.Mixed,
|
||||
LibraryAvailableDailyTaskInfo: libraryAvailableDailyTaskInfoSchema,
|
||||
|
||||
//https://warframe.fandom.com/wiki/Invasion
|
||||
InvasionChainProgress: [Schema.Types.Mixed],
|
||||
@ -1184,7 +1233,6 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
||||
HandlerPoints: Number,
|
||||
ChallengesFixVersion: Number,
|
||||
PlayedParkourTutorial: Boolean,
|
||||
SubscribedToEmailsPersonalized: Number,
|
||||
ActiveLandscapeTraps: [Schema.Types.Mixed],
|
||||
RepVotes: [Schema.Types.Mixed],
|
||||
LeagueTickets: [Schema.Types.Mixed],
|
||||
@ -1202,7 +1250,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
||||
HasResetAccount: { type: Boolean, default: false },
|
||||
|
||||
//Discount Coupon
|
||||
PendingCoupon: Schema.Types.Mixed,
|
||||
PendingCoupon: pendingCouponSchema,
|
||||
//Like BossAladV,BossCaptainVor come for you on missions % chance
|
||||
DeathMarks: [String],
|
||||
//Zanuka
|
||||
@ -1212,7 +1260,8 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
||||
|
||||
EndlessXP: { type: [endlessXpProgressSchema], default: undefined },
|
||||
|
||||
DialogueHistory: dialogueHistorySchema
|
||||
DialogueHistory: dialogueHistorySchema,
|
||||
CalendarProgress: calenderProgressSchema
|
||||
},
|
||||
{ timestamps: { createdAt: "Created", updatedAt: false } }
|
||||
);
|
||||
|
@ -87,6 +87,7 @@ import { updateSessionGetController, updateSessionPostController } from "@/src/c
|
||||
import { updateThemeController } from "../controllers/api/updateThemeController";
|
||||
import { upgradesController } from "@/src/controllers/api/upgradesController";
|
||||
import { saveSettingsController } from "../controllers/api/saveSettingsController";
|
||||
import { giveStartingGearController } from "@/src/controllers/api/giveStartingGearController";
|
||||
|
||||
const apiRouter = express.Router();
|
||||
|
||||
@ -146,6 +147,7 @@ apiRouter.post("/gildWeapon.php", gildWeaponController);
|
||||
apiRouter.post("/giveKeyChainTriggeredItems.php", giveKeyChainTriggeredItemsController);
|
||||
apiRouter.post("/giveKeyChainTriggeredMessage.php", giveKeyChainTriggeredMessageController);
|
||||
apiRouter.post("/giveQuestKeyReward.php", giveQuestKeyRewardController);
|
||||
apiRouter.post("/giveStartingGear.php", giveStartingGearController);
|
||||
apiRouter.post("/guildTech.php", guildTechController);
|
||||
apiRouter.post("/hostSession.php", hostSessionController);
|
||||
apiRouter.post("/infestedFoundry.php", infestedFoundryController);
|
||||
|
@ -22,7 +22,8 @@ import {
|
||||
IDailyAffiliations,
|
||||
IInventoryDatabase,
|
||||
IKubrowPetEggDatabase,
|
||||
IKubrowPetEggClient
|
||||
IKubrowPetEggClient,
|
||||
ILibraryAvailableDailyTaskInfo
|
||||
} from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
import { IGenericUpdate } from "../types/genericUpdate";
|
||||
import {
|
||||
@ -51,6 +52,7 @@ import { createShip } from "./shipService";
|
||||
import { creditBundles, fusionBundles } from "@/src/services/missionInventoryUpdateService";
|
||||
import { IKeyChainRequest } from "@/src/controllers/api/giveKeyChainTriggeredItemsController";
|
||||
import { toOid } from "../helpers/inventoryHelpers";
|
||||
import { generateRewardSeed } from "@/src/controllers/api/getNewRewardSeedController";
|
||||
|
||||
export const createInventory = async (
|
||||
accountOwnerId: Types.ObjectId,
|
||||
@ -65,6 +67,10 @@ export const createInventory = async (
|
||||
ReceivedStartingGear: config.skipTutorial
|
||||
});
|
||||
|
||||
inventory.LibraryAvailableDailyTaskInfo = createLibraryAvailableDailyTaskInfo();
|
||||
inventory.RewardSeed = generateRewardSeed();
|
||||
//await addItem(inventory, "/Lotus/Types/Friendly/PlayerControllable/Weapons/DuviriDualSwords"); TODO: can enable this once driter melees have been added to export
|
||||
|
||||
if (config.skipTutorial) {
|
||||
const defaultEquipment = [
|
||||
// Awakening rewards
|
||||
@ -140,7 +146,7 @@ export const createInventory = async (
|
||||
|
||||
await inventory.save();
|
||||
} catch (error) {
|
||||
throw new Error(`Error creating inventory: ${error instanceof Error ? error.message : "Unknown error"}`);
|
||||
throw new Error(`Error creating inventory: ${error instanceof Error ? error.message : "Unknown error type"}`);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1173,3 +1179,14 @@ export const addKeyChainItems = async (
|
||||
|
||||
return inventoryChanges;
|
||||
};
|
||||
const createLibraryAvailableDailyTaskInfo = (): ILibraryAvailableDailyTaskInfo => {
|
||||
return {
|
||||
EnemyTypes: ["/Lotus/Types/Enemies/Orokin/RifleLancerAvatar"],
|
||||
EnemyLocTag: "/Lotus/Language/Game/CorruptedLancer",
|
||||
EnemyIcon: "/Lotus/Interface/Icons/Npcs/OrokinRifleLancerAvatar.png",
|
||||
ScansRequired: 3,
|
||||
RewardStoreItem: "/Lotus/StoreItems/Upgrades/Mods/FusionBundles/UncommonFusionBundle",
|
||||
RewardQuantity: 7,
|
||||
RewardStanding: 7500
|
||||
};
|
||||
};
|
||||
|
@ -38,6 +38,7 @@ export interface IInventoryDatabase
|
||||
| "InfestedFoundry"
|
||||
| "DialogueHistory"
|
||||
| "KubrowPetEggs"
|
||||
| "PendingCoupon"
|
||||
| TEquipmentKey
|
||||
>,
|
||||
InventoryDatabaseEquipment {
|
||||
@ -61,6 +62,7 @@ export interface IInventoryDatabase
|
||||
InfestedFoundry?: IInfestedFoundryDatabase;
|
||||
DialogueHistory?: IDialogueHistoryDatabase;
|
||||
KubrowPetEggs?: IKubrowPetEggDatabase[];
|
||||
PendingCoupon: IPendingCouponDatabase;
|
||||
}
|
||||
|
||||
export interface IQuestKeyDatabase {
|
||||
@ -318,11 +320,12 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
|
||||
CollectibleSeries: ICollectibleSery[];
|
||||
LibraryAvailableDailyTaskInfo: ILibraryAvailableDailyTaskInfo;
|
||||
HasResetAccount: boolean;
|
||||
PendingCoupon: IPendingCoupon;
|
||||
PendingCoupon: IPendingCouponClient;
|
||||
Harvestable: boolean;
|
||||
DeathSquadable: boolean;
|
||||
EndlessXP?: IEndlessXpProgress[];
|
||||
DialogueHistory?: IDialogueHistoryClient;
|
||||
CalendarProgress: ICalendarProgress;
|
||||
}
|
||||
|
||||
export interface IAffiliation {
|
||||
@ -759,7 +762,12 @@ export enum Manifest {
|
||||
LotusTypesGameNemesisKuvaLichKuvaLichManifestVersionTwo = "/Lotus/Types/Game/Nemesis/KuvaLich/KuvaLichManifestVersionTwo"
|
||||
}
|
||||
|
||||
export interface IPendingCoupon {
|
||||
export interface IPendingCouponDatabase {
|
||||
Expiry: Date;
|
||||
Discount: number;
|
||||
}
|
||||
|
||||
export interface IPendingCouponClient {
|
||||
Expiry: IMongoDate;
|
||||
Discount: number;
|
||||
}
|
||||
@ -858,6 +866,7 @@ export interface IPersonalTechProject {
|
||||
}
|
||||
|
||||
export interface IPlayerSkills {
|
||||
LPP_NONE: number;
|
||||
LPP_SPACE: number;
|
||||
LPS_PILOTING: number;
|
||||
LPS_GUNNERY: number;
|
||||
@ -1042,3 +1051,16 @@ export interface IMarker {
|
||||
z: number;
|
||||
showInHud: boolean;
|
||||
}
|
||||
export interface ISeasonProgress {
|
||||
SeasonType: "CST_UNDEFINED" | "CST_WINTER" | "CST_SPRING" | "CST_SUMMER" | "CST_FALL";
|
||||
LastCompletedDayIdx: number;
|
||||
LastCompletedChallengeDayIdx: number;
|
||||
ActivatedChallenges: unknown[];
|
||||
}
|
||||
|
||||
export interface ICalendarProgress {
|
||||
Version: number;
|
||||
Iteration: number;
|
||||
YearProgress: { Upgrades: unknown[] };
|
||||
SeasonProgress: ISeasonProgress;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user