XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

XFEstudio/SpaceNinjaServer

feat: rewards for overriden enemy caches (#2919)

Closes #2913 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2919 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>

2322a994
AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
提交于

代码差异

6 个文件 +85 -17
Modified package-lock.json +4 -4
@@ -18,7 +18,7 @@
18 18 "morgan": "^1.10.0",
19 19 "ncp": "^2.0.0",
20 20 "undici": "^7.10.0",
21 "warframe-public-export-plus": "^0.5.91",
21 "warframe-public-export-plus": "^0.5.92",
22 22 "warframe-riven-info": "^0.1.2",
23 23 "winston": "^3.17.0",
24 24 "winston-daily-rotate-file": "^5.0.0",
@@ -5534,9 +5534,9 @@
5534 5534 }
5535 5535 },
5536 5536 "node_modules/warframe-public-export-plus": {
5537 "version": "0.5.91",
5538 "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.91.tgz",
5539 "integrity": "sha512-xp8rq/dvFC6+urb6vVFRtAmm1v0iE/ZALI3uVGBpblsVB/PWmGxjBBp8l00dCZs67JsqEKcrCcogKwtKTwDc1w=="
5537 "version": "0.5.92",
5538 "resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.92.tgz",
5539 "integrity": "sha512-5O5VtyVXxKtl5QdpzoVyKov5GX6t3z/U5tqPq73kjoSyA5NQT2V9sWsZK4ASyY8Edv9hNsdwlZdsdP8QmYbubg=="
5540 5540 },
5541 5541 "node_modules/warframe-riven-info": {
5542 5542 "version": "0.1.2",
Modified package.json +1 -1
@@ -36,7 +36,7 @@
36 36 "morgan": "^1.10.0",
37 37 "ncp": "^2.0.0",
38 38 "undici": "^7.10.0",
39 "warframe-public-export-plus": "^0.5.91",
39 "warframe-public-export-plus": "^0.5.92",
40 40 "warframe-riven-info": "^0.1.2",
41 41 "winston": "^3.17.0",
42 42 "winston-daily-rotate-file": "^5.0.0",
Modified src/services/inventoryService.ts +9 -10
@@ -117,6 +117,7 @@ export const createInventory = async (
117 117 inventory.PlayedParkourTutorial = true;
118 118 await addStartingGear(inventory);
119 119 await completeQuest(inventory, "/Lotus/Types/Keys/VorsPrize/VorsPrizeQuestKeyChain");
120 await completeQuest(inventory, "/Lotus/Types/Keys/ModQuest/ModQuestKeyChain");
120 121
121 122 const completedMissions = ["SolNode27", "SolNode89", "SolNode63", "SolNode85", "SolNode15", "SolNode79"];
122 123
@@ -134,16 +135,6 @@ export const createInventory = async (
134 135 }
135 136 };
136 137
137 //TODO: RawUpgrades might need to return a LastAdded
138 const awakeningRewards = [
139 "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem1",
140 "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem2",
141 "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem3",
142 "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem4",
143 "/Lotus/Types/Restoratives/LisetAutoHack",
144 "/Lotus/Upgrades/Mods/Warframe/AvatarShieldMaxMod"
145 ];
146
147 138 export const addStartingGear = async (
148 139 inventory: TInventoryDatabaseDocument,
149 140 startingGear?: TPartialStartingGear
@@ -196,6 +187,14 @@ export const addStartingGear = async (
196 187 inventory.RegularCredits = 3000;
197 188 inventoryChanges.RegularCredits = 3000;
198 189
190 const awakeningRewards = [
191 "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem1",
192 "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem2",
193 "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem3",
194 "/Lotus/Types/StoreItems/AvatarImages/AvatarImageItem4",
195 "/Lotus/Types/Restoratives/LisetAutoHack"
196 ];
197
199 198 for (const item of awakeningRewards) {
200 199 const inventoryDelta = await addItem(inventory, item);
201 200 combineInventoryChanges(inventoryChanges, inventoryDelta);
Modified src/services/loginService.ts +1 -1
@@ -65,7 +65,7 @@ export const createPersonalRooms = async (accountId: Types.ObjectId, shipId: Typ
65 65 activeShipId: shipId
66 66 });
67 67 if (config.skipTutorial) {
68 // unlocked during Vor's Prize
68 // unlocked during Vor's Prize and The Teacher quests
69 69 const defaultFeatures = [
70 70 "/Lotus/Types/Items/ShipFeatureItems/MercuryNavigationFeatureItem",
71 71 "/Lotus/Types/Items/ShipFeatureItems/ArsenalFeatureItem",
Modified src/services/missionInventoryUpdateService.ts +69 -1
@@ -8,6 +8,7 @@ import {
8 8 ExportAnimals,
9 9 ExportEnemies,
10 10 ExportFusionBundles,
11 ExportKeys,
11 12 ExportRegions,
12 13 ExportRelics,
13 14 ExportRewards
@@ -1141,6 +1142,7 @@ export const addMissionRewards = async (
1141 1142 const MissionRewards: IMissionReward[] = getRandomMissionDrops(
1142 1143 inventory,
1143 1144 rewardInfo,
1145 levelKeyName,
1144 1146 missions,
1145 1147 wagerTier,
1146 1148 firstCompletion
@@ -1756,6 +1758,7 @@ function getLevelCreditRewards(node: IRegion): number {
1756 1758 function getRandomMissionDrops(
1757 1759 inventory: TInventoryDatabaseDocument,
1758 1760 RewardInfo: IRewardInfo,
1761 levelKeyName: string | undefined,
1759 1762 mission: IMission | undefined,
1760 1763 tierOverride: number | undefined,
1761 1764 firstCompletion: boolean
@@ -2193,7 +2196,7 @@ function getRandomMissionDrops(
2193 2196 }
2194 2197 }
2195 2198
2196 if (region.cacheRewardManifest && RewardInfo.EnemyCachesFound) {
2199 if (region.cacheRewardManifest && RewardInfo.EnemyCachesFound && !RewardInfo.goalId) {
2197 2200 const deck = ExportRewards[region.cacheRewardManifest];
2198 2201 for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
2199 2202 const drop = getRandomRewardByChance(deck[rotation]);
@@ -2259,6 +2262,71 @@ function getRandomMissionDrops(
2259 2262 }
2260 2263 }
2261 2264
2265 if (RewardInfo.EnemyCachesFound) {
2266 if (RewardInfo.goalId) {
2267 const goal = getWorldState().Goals.find(x => x._id.$oid == RewardInfo.goalId);
2268 if (goal) {
2269 let currentMissionKey: string | undefined;
2270 if (RewardInfo.node == goal.Node) {
2271 currentMissionKey = goal.MissionKeyName;
2272 } else if (goal.ConcurrentNodes && goal.ConcurrentMissionKeyNames) {
2273 for (let i = 0; i < goal.ConcurrentNodes.length; i++) {
2274 if (RewardInfo.node == goal.ConcurrentNodes[i]) {
2275 currentMissionKey = goal.ConcurrentMissionKeyNames[i];
2276 break;
2277 }
2278 }
2279 }
2280 if (currentMissionKey) {
2281 const keyMeta = ExportKeys[currentMissionKey];
2282 if (keyMeta.cacheRewardManifest) {
2283 const deck = ExportRewards[keyMeta.cacheRewardManifest];
2284 for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
2285 const drop = getRandomRewardByChance(deck[rotation]);
2286 if (drop) {
2287 drops.push({
2288 StoreItem: drop.type,
2289 ItemCount: drop.itemCount,
2290 FromEnemyCache: true
2291 });
2292 }
2293 }
2294 }
2295 }
2296 }
2297 } else if (RewardInfo.alertId) {
2298 const alert = getWorldState().Alerts.find(x => x._id.$oid == RewardInfo.alertId);
2299 if (alert && alert.MissionInfo.enemyCacheOverride) {
2300 const deck = ExportRewards[alert.MissionInfo.enemyCacheOverride];
2301 for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
2302 const drop = getRandomRewardByChance(deck[rotation]);
2303 if (drop) {
2304 drops.push({
2305 StoreItem: drop.type,
2306 ItemCount: drop.itemCount,
2307 FromEnemyCache: true
2308 });
2309 }
2310 }
2311 }
2312 } else if (levelKeyName) {
2313 const keyMeta = ExportKeys[levelKeyName];
2314 if (keyMeta.cacheRewardManifest) {
2315 const deck = ExportRewards[keyMeta.cacheRewardManifest];
2316 for (let rotation = 0; rotation != RewardInfo.EnemyCachesFound; ++rotation) {
2317 const drop = getRandomRewardByChance(deck[rotation]);
2318 if (drop) {
2319 drops.push({
2320 StoreItem: drop.type,
2321 ItemCount: drop.itemCount,
2322 FromEnemyCache: true
2323 });
2324 }
2325 }
2326 }
2327 }
2328 }
2329
2262 2330 if (inventory.missionsCanGiveAllRelics) {
2263 2331 for (const drop of drops) {
2264 2332 const itemType = fromStoreItem(drop.StoreItem);
Modified src/types/worldStateTypes.ts +1 -0
@@ -58,6 +58,7 @@ export interface IAlertMissionInfo {
58 58 maxEnemyLevel?: number;
59 59 maxWaveNum?: number;
60 60 descText?: string;
61 enemyCacheOverride?: string;
61 62
62 63 maxRotations?: number; // SNS specific field
63 64 }