返回提交历史
Modified
static/webui/index.html
+13
-11
Modified
static/webui/script.js
+80
-0
XFEstudio/SpaceNinjaServer
feat(webui): add "max rank all warframes" & "max rank all weapons" (#783)
Co-authored-by: Sainan <sainan@calamity.inc>
a545d4f0
代码差异
2 个文件
+93
-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>
@@ -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({