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(webui): currencies (#931)

Closes #854 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/931

7c59d4fe
Sainan <sainan@calamity.inc>
提交于

代码差异

6 个文件 +103 -2
Added src/controllers/custom/addCurrencyController.ts +17 -0
@@ -0,0 +1,17 @@
1 import { RequestHandler } from "express";
2 import { getAccountIdForRequest } from "@/src/services/loginService";
3 import { getInventory } from "@/src/services/inventoryService";
4
5 export const addCurrencyController: RequestHandler = async (req, res) => {
6 const accountId = await getAccountIdForRequest(req);
7 const inventory = await getInventory(accountId);
8 const request = req.body as IAddCurrencyRequest;
9 inventory[request.currency] += request.delta;
10 await inventory.save();
11 res.end();
12 };
13
14 interface IAddCurrencyRequest {
15 currency: "RegularCredits" | "PremiumCredits" | "FusionPoints" | "PrimeTokens";
16 delta: number;
17 }
Modified src/routes/custom.ts +3 -1
@@ -8,13 +8,14 @@ import { deleteAccountController } from "@/src/controllers/custom/deleteAccountC
8 8 import { renameAccountController } from "@/src/controllers/custom/renameAccountController";
9 9
10 10 import { createAccountController } from "@/src/controllers/custom/createAccountController";
11 import { createMessageController } from "@/src/controllers/custom/createMessageController";
12 import { addCurrencyController } from "../controllers/custom/addCurrencyController";
11 13 import { addItemsController } from "@/src/controllers/custom/addItemsController";
12 14 import { addXpController } from "@/src/controllers/custom/addXpController";
13 15 import { importController } from "@/src/controllers/custom/importController";
14 16
15 17 import { getConfigDataController } from "@/src/controllers/custom/getConfigDataController";
16 18 import { updateConfigDataController } from "@/src/controllers/custom/updateConfigDataController";
17 import { createMessageController } from "@/src/controllers/custom/createMessageController";
18 19
19 20 const customRouter = express.Router();
20 21
@@ -27,6 +28,7 @@ customRouter.get("/renameAccount", renameAccountController);
27 28
28 29 customRouter.post("/createAccount", createAccountController);
29 30 customRouter.post("/createMessage", createMessageController);
31 customRouter.post("/addCurrency", addCurrencyController);
30 32 customRouter.post("/addItems", addItemsController);
31 33 customRouter.post("/addXp", addXpController);
32 34 customRouter.post("/import", importController);
Modified static/webui/index.html +50 -0
@@ -94,6 +94,56 @@
94 94 <button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
95 95 </form>
96 96 </div>
97 <div class="row g-3">
98 <div class="col-md-3">
99 <div class="card mb-3">
100 <h5 class="card-header" data-loc="currency_RegularCredits"></h5>
101 <div class="card-body">
102 <p class="card-text" id="RegularCredits-owned"></p>
103 <form class="input-group" onsubmit="doAddCurrency('RegularCredits');return false;">
104 <input class="form-control" id="RegularCredits-delta" type="number" value="1000000" step="1000000" />
105 <button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
106 </form>
107 </div>
108 </div>
109 </div>
110 <div class="col-md-3">
111 <div class="card mb-3">
112 <h5 class="card-header" data-loc="currency_PremiumCredits"></h5>
113 <div class="card-body">
114 <p class="card-text" id="PremiumCredits-owned"></p>
115 <form class="input-group" onsubmit="doAddCurrency('PremiumCredits');return false;">
116 <input class="form-control" id="PremiumCredits-delta" type="number" value="100" step="100" />
117 <button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
118 </form>
119 </div>
120 </div>
121 </div>
122 <div class="col-md-3">
123 <div class="card mb-3">
124 <h5 class="card-header" data-loc="currency_FusionPoints"></h5>
125 <div class="card-body">
126 <p class="card-text" id="FusionPoints-owned"></p>
127 <form class="input-group" onsubmit="doAddCurrency('FusionPoints');return false;">
128 <input class="form-control" id="FusionPoints-delta" type="number" value="1000" step="1000" />
129 <button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
130 </form>
131 </div>
132 </div>
133 </div>
134 <div class="col-md-3">
135 <div class="card mb-3">
136 <h5 class="card-header" data-loc="currency_PrimeTokens"></h5>
137 <div class="card-body">
138 <p class="card-text" id="PrimeTokens-owned"></p>
139 <form class="input-group" onsubmit="doAddCurrency('PrimeTokens');return false;">
140 <input class="form-control" id="PrimeTokens-delta" type="number" value="1" step="1" />
141 <button class="btn btn-primary" type="submit" data-loc="general_addButton"></button>
142 </form>
143 </div>
144 </div>
145 </div>
146 </div>
97 147 <div class="row g-3">
98 148 <div class="col-lg-6">
99 149 <div class="card mb-3" style="height: 400px;">
Modified static/webui/script.js +22 -0
@@ -227,6 +227,15 @@ function updateInventory() {
227 227 window.didInitialInventoryUpdate = true;
228 228
229 229 // Populate inventory route
230 [
231 "RegularCredits",
232 "PremiumCredits",
233 "FusionPoints",
234 "PrimeTokens"
235 ].forEach(currency => {
236 document.getElementById(currency + "-owned").textContent = loc("currency_owned").split("|COUNT|").join(data[currency].toLocaleString());
237 });
238
230 239 [
231 240 "Suits",
232 241 "SpaceSuits",
@@ -1116,3 +1125,16 @@ function doChangeSupportedSyndicate() {
1116 1125 });
1117 1126 });
1118 1127 }
1128
1129 function doAddCurrency(currency) {
1130 $.post({
1131 url: "/custom/addCurrency?" + window.authz,
1132 contentType: "application/json",
1133 data: JSON.stringify({
1134 currency,
1135 delta: document.getElementById(currency + "-delta").valueAsNumber
1136 })
1137 }).then(function () {
1138 updateInventory();
1139 });
1140 }
Modified static/webui/translations/en.js +6 -1
@@ -1,5 +1,5 @@
1 1 dict = {
2 general_inventoryUpdateNote: `Note: Changes made here will only be reflected in-game when the game re-downloads your inventory. Visiting the navigation should be the easiest way to trigger that.`,
2 general_inventoryUpdateNote: `Note: Changes made here will only be applied in-game when the game syncs the inventory. Visiting the navigation should be the easiest way to trigger that.`,
3 3 general_addButton: `Add`,
4 4 general_bulkActions: `Bulk Actions`,
5 5 code_nonValidAuthz: `Your credentials are no longer valid.`,
@@ -72,6 +72,11 @@ dict = {
72 72 inventory_bulkRankUpSpaceWeapons: `Max Rank All Archwing Weapons`,
73 73 inventory_bulkRankUpSentinels: `Max Rank All Sentinels`,
74 74 inventory_bulkRankUpSentinelWeapons: `Max Rank All Sentinel Weapons`,
75 currency_RegularCredits: `Credits`,
76 currency_PremiumCredits: `Platinum`,
77 currency_FusionPoints: `Endo`,
78 currency_PrimeTokens: `Regal Aya`,
79 currency_owned: `You have |COUNT|.`,
75 80 powersuit_archonShardsLabel: `Archon Shard Slots`,
76 81 powersuit_archonShardsDescription: `You can use these unlimited slots to apply a wide range of upgrades`,
77 82 mods_addRiven: `Add Riven`,
Modified static/webui/translations/ru.js +5 -0
@@ -73,6 +73,11 @@ dict = {
73 73 inventory_bulkRankUpSpaceWeapons: `Максимальный ранг всего оружия арчвингов`,
74 74 inventory_bulkRankUpSentinels: `Максимальный ранг всех стражей`,
75 75 inventory_bulkRankUpSentinelWeapons: `Максимальный ранг всего оружия стражей`,
76 currency_RegularCredits: `[UNTRANSLATED] Credits`,
77 currency_PremiumCredits: `[UNTRANSLATED] Platinum`,
78 currency_FusionPoints: `[UNTRANSLATED] Endo`,
79 currency_PrimeTokens: `[UNTRANSLATED] Regal Aya`,
80 currency_owned: `[UNTRANSLATED] You have |COUNT|.`,
76 81 powersuit_archonShardsLabel: `Ячейки осколков архонта`,
77 82 powersuit_archonShardsDescription: `Вы можете использовать эти неограниченные ячейки для установки множества улучшений.`,
78 83 mods_addRiven: `Добавить Мод Разлома`,