feat: auto-contribute from clan vault (#1435)
The wiki says this is also supposed to do partial fills, but didn't see that in my testing on live. Reviewed-on: OpenWF/SpaceNinjaServer#1435 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
parent
ed10a89c1d
commit
9eadc7fa21
@ -1,4 +1,12 @@
|
||||
import { getDojoClient, getGuildForRequestEx, hasAccessToDojo, hasGuildPermission } from "@/src/services/guildService";
|
||||
import {
|
||||
getDojoClient,
|
||||
getGuildForRequestEx,
|
||||
getVaultMiscItemCount,
|
||||
hasAccessToDojo,
|
||||
hasGuildPermission,
|
||||
processDojoBuildMaterialsGathered,
|
||||
scaleRequiredCount
|
||||
} from "@/src/services/guildService";
|
||||
import { getInventory } from "@/src/services/inventoryService";
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { GuildPermission } from "@/src/types/guildTypes";
|
||||
@ -42,6 +50,36 @@ export const placeDecoInComponentController: RequestHandler = async (req, res) =
|
||||
}
|
||||
if (meta.price == 0 && meta.ingredients.length == 0) {
|
||||
deco.CompletionTime = new Date();
|
||||
} else if (guild.AutoContributeFromVault && guild.VaultRegularCredits && guild.VaultMiscItems) {
|
||||
if (guild.VaultRegularCredits >= scaleRequiredCount(guild.Tier, meta.price)) {
|
||||
let enoughMiscItems = true;
|
||||
for (const ingredient of meta.ingredients) {
|
||||
if (
|
||||
getVaultMiscItemCount(guild, ingredient.ItemType) <
|
||||
scaleRequiredCount(guild.Tier, ingredient.ItemCount)
|
||||
) {
|
||||
enoughMiscItems = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (enoughMiscItems) {
|
||||
guild.VaultRegularCredits -= meta.price;
|
||||
deco.RegularCredits = meta.price;
|
||||
|
||||
deco.MiscItems = [];
|
||||
for (const ingredient of meta.ingredients) {
|
||||
guild.VaultMiscItems.find(x => x.ItemType == ingredient.ItemType)!.ItemCount -=
|
||||
scaleRequiredCount(guild.Tier, ingredient.ItemCount);
|
||||
deco.MiscItems.push({
|
||||
ItemType: ingredient.ItemType,
|
||||
ItemCount: scaleRequiredCount(guild.Tier, ingredient.ItemCount)
|
||||
});
|
||||
}
|
||||
|
||||
deco.CompletionTime = new Date(Date.now() + meta.time * 1000);
|
||||
processDojoBuildMaterialsGathered(guild, meta);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
25
src/controllers/api/saveVaultAutoContributeController.ts
Normal file
25
src/controllers/api/saveVaultAutoContributeController.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
||||
import { Guild } from "@/src/models/guildModel";
|
||||
import { hasGuildPermission } from "@/src/services/guildService";
|
||||
import { getInventory } from "@/src/services/inventoryService";
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { GuildPermission } from "@/src/types/guildTypes";
|
||||
import { RequestHandler } from "express";
|
||||
|
||||
export const saveVaultAutoContributeController: RequestHandler = async (req, res) => {
|
||||
const accountId = await getAccountIdForRequest(req);
|
||||
const inventory = await getInventory(accountId, "GuildId");
|
||||
const guild = (await Guild.findById(inventory.GuildId!, "Ranks AutoContributeFromVault"))!;
|
||||
if (!(await hasGuildPermission(guild, accountId, GuildPermission.Treasurer))) {
|
||||
res.status(400).send("Invalid permission").end();
|
||||
return;
|
||||
}
|
||||
const data = getJSONfromString<ISetVaultAutoContributeRequest>(String(req.body));
|
||||
guild.AutoContributeFromVault = data.autoContributeFromVault;
|
||||
await guild.save();
|
||||
res.end();
|
||||
};
|
||||
|
||||
interface ISetVaultAutoContributeRequest {
|
||||
autoContributeFromVault: boolean;
|
||||
}
|
@ -170,6 +170,7 @@ const guildSchema = new Schema<IGuildDatabase>(
|
||||
TradeTax: { type: Number, default: 0 },
|
||||
Tier: { type: Number, default: 1 },
|
||||
Emblem: { type: Boolean },
|
||||
AutoContributeFromVault: { type: Boolean },
|
||||
AllianceId: { type: Types.ObjectId },
|
||||
DojoComponents: { type: [dojoComponentSchema], default: [] },
|
||||
DojoCapacity: { type: Number, default: 100 },
|
||||
|
@ -94,6 +94,7 @@ import { retrievePetFromStasisController } from "@/src/controllers/api/retrieveP
|
||||
import { saveDialogueController } from "@/src/controllers/api/saveDialogueController";
|
||||
import { saveLoadoutController } from "@/src/controllers/api/saveLoadout";
|
||||
import { saveSettingsController } from "@/src/controllers/api/saveSettingsController";
|
||||
import { saveVaultAutoContributeController } from "@/src/controllers/api/saveVaultAutoContributeController";
|
||||
import { sellController } from "@/src/controllers/api/sellController";
|
||||
import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestController";
|
||||
import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
|
||||
@ -246,6 +247,7 @@ apiRouter.post("/retrievePetFromStasis.php", retrievePetFromStasisController);
|
||||
apiRouter.post("/saveDialogue.php", saveDialogueController);
|
||||
apiRouter.post("/saveLoadout.php", saveLoadoutController);
|
||||
apiRouter.post("/saveSettings.php", saveSettingsController);
|
||||
apiRouter.post("/saveVaultAutoContribute.php", saveVaultAutoContributeController);
|
||||
apiRouter.post("/sell.php", sellController);
|
||||
apiRouter.post("/setDojoComponentMessage.php", setDojoComponentMessageController);
|
||||
apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController);
|
||||
|
@ -32,6 +32,7 @@ export interface IGuildDatabase {
|
||||
TradeTax: number;
|
||||
Tier: number;
|
||||
Emblem?: boolean;
|
||||
AutoContributeFromVault?: boolean;
|
||||
AllianceId?: Types.ObjectId;
|
||||
|
||||
DojoComponents: IDojoComponentDatabase[];
|
||||
|
Loading…
x
Reference in New Issue
Block a user