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): add "max rank all warframes" & "max rank all weapons" (#783)

Co-authored-by: Sainan <sainan@calamity.inc>

a545d4f0
neon <itzneonrb@gmail.com>
提交于

代码差异

2 个文件 +93 -11
Modified static/webui/index.html +13 -11
@@ -96,9 +96,9 @@
96 96 </div>
97 97 <div class="row g-3">
98 98 <div class="col-lg-6">
99 <div class="card mb-3">
99 <div class="card mb-3" style="height: 480px;">
100 100 <h5 class="card-header">Warframes</h5>
101 <div class="card-body">
101 <div class="card-body overflow-auto">
102 102 <form class="input-group mb-3" onsubmit="doAcquireWarframe();return false;">
103 103 <input class="form-control" id="warframe-to-acquire" list="datalist-warframes" />
104 104 <button class="btn btn-primary" type="submit">Add</button>
@@ -108,18 +108,11 @@
108 108 </table>
109 109 </div>
110 110 </div>
111 <div class="card mb-3">
112 <h5 class="card-header">Bulk Actions</h5>
113 <div class="card-body">
114 <button class="btn btn-primary" onclick="addMissingWarframes();">Add Missing Warframes</button>
115 <button class="btn btn-primary" onclick="addMissingWeapons();">Add Missing Weapons</button>
116 </div>
117 </div>
118 111 </div>
119 112 <div class="col-lg-6">
120 <div class="card mb-3">
113 <div class="card mb-3" style="height: 480px;">
121 114 <h5 class="card-header">Weapons</h5>
122 <div class="card-body">
115 <div class="card-body overflow-auto">
123 116 <form class="input-group mb-3" onsubmit="doAcquireWeapon();return false;">
124 117 <input class="form-control" id="weapon-to-acquire" list="datalist-weapons" />
125 118 <button class="btn btn-primary" type="submit">Add</button>
@@ -131,6 +124,15 @@
131 124 </div>
132 125 </div>
133 126 </div>
127 <div class="card mb-3">
128 <h5 class="card-header">Bulk Actions</h5>
129 <div class="card-body d-flex flex-wrap gap-2">
130 <button class="btn btn-primary" onclick="addMissingWarframes();">Add Missing Warframes</button>
131 <button class="btn btn-primary" onclick="addMissingWeapons();">Add Missing Weapons</button>
132 <button class="btn btn-success" onclick="maxRankAllWarframes()">Max Rank All Warframes</button>
133 <button class="btn btn-success" onclick="maxRankAllWeapons()">Max Rank All Weapons</button>
134 </div>
135 </div>
134 136 </div>
135 137 <div id="powersuit-route" data-route="~ /webui/powersuit/(.+)" data-title="Inventory | OpenWF WebUI">
136 138 <h3 class="mb-0"></h3>
Modified static/webui/script.js +80 -0
@@ -605,6 +605,46 @@ function addMissingWarframes() {
605 605 }
606 606 }
607 607
608 function maxRankAllWarframes() {
609 const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
610
611 req.done(data => {
612 window.itemListPromise.then(itemMap => {
613 const batchData = { Suits: [], SpecialItems: [] };
614
615 data.Suits.forEach(item => {
616 if (item.XP < 1_600_000) {
617 batchData.Suits.push({
618 ItemId: { $oid: item.ItemId.$oid },
619 XP: 1_600_000 - item.XP
620 });
621 }
622
623 if ("exalted" in itemMap[item.ItemType]) {
624 for (const exaltedType of itemMap[item.ItemType].exalted) {
625 const exaltedItem = data.SpecialItems.find(x => x.ItemType == exaltedType);
626 if (exaltedItem) {
627 const exaltedCap = itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000;
628 if (exaltedItem.XP < exaltedCap) {
629 batchData.SpecialItems.push({
630 ItemId: { $oid: exaltedItem.ItemId.$oid },
631 XP: exaltedCap
632 });
633 }
634 }
635 }
636 }
637 });
638
639 if (batchData.Suits.length > 0 || batchData.SpecialItems.length > 0) {
640 return sendBatchGearExp(batchData);
641 }
642
643 alert("No Warframes to rank up.");
644 });
645 });
646 }
647
608 648 function addMissingWeapons() {
609 649 const requests = [];
610 650 document.querySelectorAll("#datalist-weapons option").forEach(elm => {
@@ -620,6 +660,34 @@ function addMissingWeapons() {
620 660 }
621 661 }
622 662
663 function maxRankAllWeapons() {
664 const req = $.get("/api/inventory.php?" + window.authz + "&xpBasedLevelCapDisabled=1");
665
666 req.done(data => {
667 const batchData = {};
668
669 ["LongGuns", "Pistols", "Melee"].forEach(category => {
670 data[category].forEach(item => {
671 if (item.XP < 800_000) {
672 if (!batchData[category]) {
673 batchData[category] = [];
674 }
675 batchData[category].push({
676 ItemId: { $oid: item.ItemId.$oid },
677 XP: 800_000 - item.XP
678 });
679 }
680 });
681 });
682
683 if (Object.keys(batchData).length > 0) {
684 return sendBatchGearExp(batchData);
685 }
686
687 alert("No weapons to rank up.");
688 });
689 }
690
623 691 function addGearExp(category, oid, xp) {
624 692 const data = {};
625 693 data[category] = [
@@ -641,6 +709,18 @@ function addGearExp(category, oid, xp) {
641 709 });
642 710 }
643 711
712 function sendBatchGearExp(data) {
713 revalidateAuthz(() => {
714 $.post({
715 url: "/api/missionInventoryUpdate.php?" + window.authz,
716 contentType: "text/plain",
717 data: JSON.stringify(data)
718 }).done(() => {
719 updateInventory();
720 });
721 });
722 }
723
644 724 function renameGear(category, oid, name) {
645 725 revalidateAuthz(() => {
646 726 $.post({