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

XFESpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/XFESpaceNinjaServer

feat: infiniteTrades cheat & update skipAllPopups to avoid first time trade message (#3434)

- Also fixes importer ignoring Settings object (e.g. couldn't change `TradingRulesConfirmed` value previously). - `skipAllPopups` skips now the first time trading message (though not sure if my approach may be a little too questionable). - Also fixes `skipAllDialogue` not taking effect when activated while being in an open world hub. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3434 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: Animan8000 <187183497+Veniman8000@users.noreply.github.com> Co-committed-by: Animan8000 <187183497+Veniman8000@users.noreply.github.com>

a6b29dbf
Animan8000 <187183497+Veniman8000@users.noreply.github.com>
提交于

代码差异

15 个文件 +48 -4
Modified src/controllers/api/creditsController.ts +4 -1
@@ -8,7 +8,7 @@ export const creditsController: RequestHandler = async (req, res) => {
8 8 getAccountIdForRequest(req),
9 9 getInventory(
10 10 req.query.accountId as string,
11 "RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits infiniteCredits infinitePlatinum"
11 "RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits infiniteCredits infinitePlatinum infiniteTrades"
12 12 )
13 13 ])
14 14 )[1];
@@ -27,6 +27,9 @@ export const creditsController: RequestHandler = async (req, res) => {
27 27 response.PremiumCreditsFree = 0;
28 28 response.PremiumCredits = 999999999;
29 29 }
30 if (inventory.infiniteTrades) {
31 response.TradesRemaining = 9999;
32 }
30 33
31 34 res.json(response);
32 35 };
Modified src/controllers/api/inventoryController.ts +11 -0
@@ -355,6 +355,9 @@ export const getInventoryResponse = async (
355 355 if (inventory.infiniteRegalAya) {
356 356 inventoryResponse.PrimeTokens = 999999999;
357 357 }
358 if (inventory.infiniteTrades) {
359 inventoryResponse.TradesRemaining = 9999;
360 }
358 361
359 362 if (inventory.skipAllDialogue) {
360 363 inventoryResponse.TauntHistory ??= [];
@@ -385,6 +388,14 @@ export const getInventoryResponse = async (
385 388 for (const str of allPopups) {
386 389 addString(inventoryResponse.NodeIntrosCompleted, str);
387 390 }
391 inventoryResponse.Settings ??= {
392 FriendInvRestriction: "GIFT_MODE_ALL",
393 GiftMode: "GIFT_MODE_ALL",
394 GuildInvRestriction: "GIFT_MODE_ALL",
395 ShowFriendInvNotifications: true,
396 TradingRulesConfirmed: false
397 };
398 inventoryResponse.Settings.TradingRulesConfirmed = true;
388 399 inventoryResponse.PlayedParkourTutorial = true; // Skips PoE update popup in U22
389 400 }
390 401
Modified src/controllers/api/tradingController.ts +6 -2
@@ -84,7 +84,9 @@ export const tradingController: RequestHandler = async (req, res) => {
84 84 pendingTrades[tradeId].clanTax,
85 85 req.query.guildId as string | undefined
86 86 );
87 traderInventory.TradesRemaining -= 1;
87 if (!traderInventory.infiniteTrades) {
88 traderInventory.TradesRemaining -= 1;
89 }
88 90 }
89 91 if (!tradeeInventory.tradesDontTouchInventory) {
90 92 applyOfferToInventory(tradeeInventory, pendingTrades[tradeId].tradeeOffer, -1); // Conversely, tradee gives up their items
@@ -96,7 +98,9 @@ export const tradingController: RequestHandler = async (req, res) => {
96 98 pendingTrades[tradeId].clanTax,
97 99 req.query.guildId as string | undefined
98 100 );
99 tradeeInventory.TradesRemaining -= 1;
101 if (!tradeeInventory.infiniteTrades) {
102 tradeeInventory.TradesRemaining -= 1;
103 }
100 104 }
101 105
102 106 await Promise.all([traderInventory.save(), tradeeInventory.save()]);
Modified src/controllers/custom/setAccountCheatController.ts +11 -1
@@ -23,7 +23,17 @@ export const setAccountCheatController: RequestHandler = async (req, res) => {
23 23 }
24 24 await inventory.save();
25 25 res.end();
26 if (["infiniteCredits", "infinitePlatinum", "infiniteEndo", "infiniteRegalAya"].indexOf(payload.key) != -1) {
26 if (
27 [
28 "infiniteCredits",
29 "infinitePlatinum",
30 "infiniteEndo",
31 "infiniteRegalAya",
32 "infiniteTrades",
33 "skipAllDialogue",
34 "skipAllPopups"
35 ].indexOf(payload.key) != -1
36 ) {
27 37 sendWsBroadcastTo(accountId, { update_inventory: true, sync_inventory: true });
28 38 } else {
29 39 sendWsBroadcastEx({ update_inventory: true }, accountId, parseInt(String(req.query.wsid)));
Modified src/models/inventoryModels/inventoryModel.ts +1 -0
@@ -1557,6 +1557,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
1557 1557 infinitePlatinum: Boolean,
1558 1558 infiniteEndo: Boolean,
1559 1559 infiniteRegalAya: Boolean,
1560 infiniteTrades: Boolean,
1560 1561 infiniteHelminthMaterials: Boolean,
1561 1562 universalPolarityEverywhere: Boolean,
1562 1563 unlockDoubleCapacityPotatoesEverywhere: Boolean,
Modified src/services/importService.ts +3 -0
@@ -554,6 +554,9 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial<
554 554 if (client.Boosters !== undefined) {
555 555 replaceArray<IBooster>(db.Boosters, client.Boosters);
556 556 }
557 if (client.Settings !== undefined) {
558 db.Settings = client.Settings;
559 }
557 560
558 561 // Final sanity check over data
559 562 for (const pr of db.PendingRecipes) {
Modified src/types/inventoryTypes/inventoryTypes.ts +1 -0
@@ -43,6 +43,7 @@ export const accountCheatBooleans = [
43 43 "infinitePlatinum",
44 44 "infiniteEndo",
45 45 "infiniteRegalAya",
46 "infiniteTrades",
46 47 "infiniteHelminthMaterials",
47 48 "universalPolarityEverywhere",
48 49 "unlockDoubleCapacityPotatoesEverywhere",
Modified static/webui/index.html +4 -0
@@ -1010,6 +1010,10 @@
1010 1010 <input class="form-check-input" type="checkbox" id="infiniteRegalAya" />
1011 1011 <label class="form-check-label" for="infiniteRegalAya" data-loc="cheats_infiniteRegalAya"></label>
1012 1012 </div>
1013 <div class="form-check">
1014 <input class="form-check-input" type="checkbox" id="infiniteTrades" />
1015 <label class="form-check-label" for="infiniteTrades" data-loc="cheats_infiniteTrades"></label>
1016 </div>
1013 1017 <div class="form-check">
1014 1018 <input class="form-check-input" type="checkbox" id="infiniteHelminthMaterials" />
1015 1019 <label class="form-check-label" for="infiniteHelminthMaterials" data-loc="cheats_infiniteHelminthMaterials"></label>
Modified static/webui/translations/de.js +1 -0
@@ -230,6 +230,7 @@ dict = {
230 230 cheats_infinitePlatinum: `Unendlich Platinum`,
231 231 cheats_infiniteEndo: `Unendlich Endo`,
232 232 cheats_infiniteRegalAya: `Unendlich Reines Aya`,
233 cheats_infiniteTrades: `Unendlich handeln`,
233 234 cheats_infiniteHelminthMaterials: `Unendlich Helminth-Materialien`,
234 235 cheats_claimingBlueprintRefundsIngredients: `Fertige Blaupausen erstatten Ressourcen zurück`,
235 236 cheats_dontSubtractPurchaseCreditCost: `Credits beim Kauf nicht verbrauchen`,
Modified static/webui/translations/en.js +1 -0
@@ -229,6 +229,7 @@ dict = {
229 229 cheats_infinitePlatinum: `Infinite Platinum`,
230 230 cheats_infiniteEndo: `Infinite Endo`,
231 231 cheats_infiniteRegalAya: `Infinite Regal Aya`,
232 cheats_infiniteTrades: `Infinite Trades`,
232 233 cheats_infiniteHelminthMaterials: `Infinite Helminth Materials`,
233 234 cheats_claimingBlueprintRefundsIngredients: `Claiming Blueprint Refunds Ingredients`,
234 235 cheats_dontSubtractPurchaseCreditCost: `Don't Subtract Purchase Credit Cost`,
Modified static/webui/translations/es.js +1 -0
@@ -230,6 +230,7 @@ dict = {
230 230 cheats_infinitePlatinum: `Platino infinito`,
231 231 cheats_infiniteEndo: `Endo infinito`,
232 232 cheats_infiniteRegalAya: `Aya Real infinita`,
233 cheats_infiniteTrades: `[UNTRANSLATED] Infinite Trades`,
233 234 cheats_infiniteHelminthMaterials: `Materiales Helminto infinitos`,
234 235 cheats_claimingBlueprintRefundsIngredients: `Reclamar planos devuelve los ingredientes`,
235 236 cheats_dontSubtractPurchaseCreditCost: `No restar costo en créditos al comprar`,
Modified static/webui/translations/fr.js +1 -0
@@ -230,6 +230,7 @@ dict = {
230 230 cheats_infinitePlatinum: `Platinum infini`,
231 231 cheats_infiniteEndo: `Endo infini`,
232 232 cheats_infiniteRegalAya: `Aya Raffiné infini`,
233 cheats_infiniteTrades: `[UNTRANSLATED] Infinite Trades`,
233 234 cheats_infiniteHelminthMaterials: `Ressources d'Helminth infinies`,
234 235 cheats_claimingBlueprintRefundsIngredients: `Récupérer les items rend les ressources`,
235 236 cheats_dontSubtractPurchaseCreditCost: `Ne pas retirer le coût en crédits`,
Modified static/webui/translations/ru.js +1 -0
Modified static/webui/translations/uk.js +1 -0
Modified static/webui/translations/zh.js +1 -0