forked from OpenWF/SpaceNinjaServer
feat: polychrome (#1495)
Reviewed-on: OpenWF/SpaceNinjaServer#1495 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
7fd4d50e07
commit
74c7d86090
@ -64,7 +64,12 @@ export const placeDecoInComponentController: RequestHandler = async (req, res) =
|
|||||||
}
|
}
|
||||||
if (!meta || (meta.price == 0 && meta.ingredients.length == 0)) {
|
if (!meta || (meta.price == 0 && meta.ingredients.length == 0)) {
|
||||||
deco.CompletionTime = new Date();
|
deco.CompletionTime = new Date();
|
||||||
} else if (guild.AutoContributeFromVault && guild.VaultRegularCredits && guild.VaultMiscItems) {
|
} else if (
|
||||||
|
guild.AutoContributeFromVault &&
|
||||||
|
guild.VaultRegularCredits &&
|
||||||
|
guild.VaultMiscItems &&
|
||||||
|
deco.Type != "/Lotus/Objects/Tenno/Props/TnoPaintBotDojoDeco"
|
||||||
|
) {
|
||||||
if (guild.VaultRegularCredits >= scaleRequiredCount(guild.Tier, meta.price)) {
|
if (guild.VaultRegularCredits >= scaleRequiredCount(guild.Tier, meta.price)) {
|
||||||
let enoughMiscItems = true;
|
let enoughMiscItems = true;
|
||||||
for (const ingredient of meta.ingredients) {
|
for (const ingredient of meta.ingredients) {
|
||||||
|
34
src/controllers/api/setDojoComponentColorsController.ts
Normal file
34
src/controllers/api/setDojoComponentColorsController.ts
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
||||||
|
import { getDojoClient, getGuildForRequestEx, hasAccessToDojo, 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 setDojoComponentColorsController: RequestHandler = async (req, res) => {
|
||||||
|
const accountId = await getAccountIdForRequest(req);
|
||||||
|
const inventory = await getInventory(accountId, "GuildId LevelKeys");
|
||||||
|
const guild = await getGuildForRequestEx(req, inventory);
|
||||||
|
if (!hasAccessToDojo(inventory) || !(await hasGuildPermission(guild, accountId, GuildPermission.Decorator))) {
|
||||||
|
res.json({ DojoRequestStatus: -1 });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const data = getJSONfromString<ISetDojoComponentColorsRequest>(String(req.body));
|
||||||
|
const component = guild.DojoComponents.id(data.ComponentId)!;
|
||||||
|
//const deco = component.Decos!.find(x => x._id.equals(data.DecoId))!;
|
||||||
|
//deco.Pending = true;
|
||||||
|
//component.PaintBot = new Types.ObjectId(data.DecoId);
|
||||||
|
if ("lights" in req.query) {
|
||||||
|
component.PendingLights = data.Colours;
|
||||||
|
} else {
|
||||||
|
component.PendingColors = data.Colours;
|
||||||
|
}
|
||||||
|
await guild.save();
|
||||||
|
res.json(await getDojoClient(guild, 0, component._id));
|
||||||
|
};
|
||||||
|
|
||||||
|
interface ISetDojoComponentColorsRequest {
|
||||||
|
ComponentId: string;
|
||||||
|
DecoId: string;
|
||||||
|
Colours: number[];
|
||||||
|
}
|
@ -29,7 +29,8 @@ const dojoDecoSchema = new Schema<IDojoDecoDatabase>({
|
|||||||
MiscItems: { type: [typeCountSchema], default: undefined },
|
MiscItems: { type: [typeCountSchema], default: undefined },
|
||||||
CompletionTime: Date,
|
CompletionTime: Date,
|
||||||
RushPlatinum: Number,
|
RushPlatinum: Number,
|
||||||
PictureFrameInfo: pictureFrameInfoSchema
|
PictureFrameInfo: pictureFrameInfoSchema,
|
||||||
|
Pending: Boolean
|
||||||
});
|
});
|
||||||
|
|
||||||
const dojoLeaderboardEntrySchema = new Schema<IDojoLeaderboardEntry>(
|
const dojoLeaderboardEntrySchema = new Schema<IDojoLeaderboardEntry>(
|
||||||
@ -57,6 +58,11 @@ const dojoComponentSchema = new Schema<IDojoComponentDatabase>({
|
|||||||
DestructionTime: Date,
|
DestructionTime: Date,
|
||||||
Decos: [dojoDecoSchema],
|
Decos: [dojoDecoSchema],
|
||||||
DecoCapacity: Number,
|
DecoCapacity: Number,
|
||||||
|
PaintBot: Schema.Types.ObjectId,
|
||||||
|
PendingColors: { type: [Number], default: undefined },
|
||||||
|
Colors: { type: [Number], default: undefined },
|
||||||
|
PendingLights: { type: [Number], default: undefined },
|
||||||
|
Lights: { type: [Number], default: undefined },
|
||||||
Leaderboard: { type: [dojoLeaderboardEntrySchema], default: undefined }
|
Leaderboard: { type: [dojoLeaderboardEntrySchema], default: undefined }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -105,6 +105,7 @@ import { setActiveQuestController } from "@/src/controllers/api/setActiveQuestCo
|
|||||||
import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
|
import { setActiveShipController } from "@/src/controllers/api/setActiveShipController";
|
||||||
import { setAllianceGuildPermissionsController } from "@/src/controllers/api/setAllianceGuildPermissionsController";
|
import { setAllianceGuildPermissionsController } from "@/src/controllers/api/setAllianceGuildPermissionsController";
|
||||||
import { setBootLocationController } from "@/src/controllers/api/setBootLocationController";
|
import { setBootLocationController } from "@/src/controllers/api/setBootLocationController";
|
||||||
|
import { setDojoComponentColorsController } from "@/src/controllers/api/setDojoComponentColorsController";
|
||||||
import { setDojoComponentMessageController } from "@/src/controllers/api/setDojoComponentMessageController";
|
import { setDojoComponentMessageController } from "@/src/controllers/api/setDojoComponentMessageController";
|
||||||
import { setEquippedInstrumentController } from "@/src/controllers/api/setEquippedInstrumentController";
|
import { setEquippedInstrumentController } from "@/src/controllers/api/setEquippedInstrumentController";
|
||||||
import { setGuildMotdController } from "@/src/controllers/api/setGuildMotdController";
|
import { setGuildMotdController } from "@/src/controllers/api/setGuildMotdController";
|
||||||
@ -261,6 +262,7 @@ apiRouter.post("/saveLoadout.php", saveLoadoutController);
|
|||||||
apiRouter.post("/saveSettings.php", saveSettingsController);
|
apiRouter.post("/saveSettings.php", saveSettingsController);
|
||||||
apiRouter.post("/saveVaultAutoContribute.php", saveVaultAutoContributeController);
|
apiRouter.post("/saveVaultAutoContribute.php", saveVaultAutoContributeController);
|
||||||
apiRouter.post("/sell.php", sellController);
|
apiRouter.post("/sell.php", sellController);
|
||||||
|
apiRouter.post("/setDojoComponentColors.php", setDojoComponentColorsController);
|
||||||
apiRouter.post("/setDojoComponentMessage.php", setDojoComponentMessageController);
|
apiRouter.post("/setDojoComponentMessage.php", setDojoComponentMessageController);
|
||||||
apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController);
|
apiRouter.post("/setEquippedInstrument.php", setEquippedInstrumentController);
|
||||||
apiRouter.post("/setGuildMotd.php", setGuildMotdController);
|
apiRouter.post("/setGuildMotd.php", setGuildMotdController);
|
||||||
|
@ -141,6 +141,7 @@ export const getDojoClient = async (
|
|||||||
DojoComponents: []
|
DojoComponents: []
|
||||||
};
|
};
|
||||||
const roomsToRemove: Types.ObjectId[] = [];
|
const roomsToRemove: Types.ObjectId[] = [];
|
||||||
|
const decosToRemoveNoRefund: { componentId: Types.ObjectId; decoId: Types.ObjectId }[] = [];
|
||||||
let needSave = false;
|
let needSave = false;
|
||||||
for (const dojoComponent of guild.DojoComponents) {
|
for (const dojoComponent of guild.DojoComponents) {
|
||||||
if (!componentId || dojoComponent._id.equals(componentId)) {
|
if (!componentId || dojoComponent._id.equals(componentId)) {
|
||||||
@ -212,6 +213,21 @@ export const getDojoClient = async (
|
|||||||
PictureFrameInfo: deco.PictureFrameInfo
|
PictureFrameInfo: deco.PictureFrameInfo
|
||||||
};
|
};
|
||||||
if (deco.CompletionTime) {
|
if (deco.CompletionTime) {
|
||||||
|
if (
|
||||||
|
deco.Type == "/Lotus/Objects/Tenno/Props/TnoPaintBotDojoDeco" &&
|
||||||
|
Date.now() >= deco.CompletionTime.getTime()
|
||||||
|
) {
|
||||||
|
if (dojoComponent.PendingColors) {
|
||||||
|
dojoComponent.Colors = dojoComponent.PendingColors;
|
||||||
|
dojoComponent.PendingColors = undefined;
|
||||||
|
}
|
||||||
|
if (dojoComponent.PendingLights) {
|
||||||
|
dojoComponent.Lights = dojoComponent.PendingLights;
|
||||||
|
dojoComponent.PendingLights = undefined;
|
||||||
|
}
|
||||||
|
decosToRemoveNoRefund.push({ componentId: dojoComponent._id, decoId: deco._id });
|
||||||
|
continue;
|
||||||
|
}
|
||||||
clientDeco.CompletionTime = toMongoDate(deco.CompletionTime);
|
clientDeco.CompletionTime = toMongoDate(deco.CompletionTime);
|
||||||
} else {
|
} else {
|
||||||
clientDeco.RegularCredits = deco.RegularCredits;
|
clientDeco.RegularCredits = deco.RegularCredits;
|
||||||
@ -220,6 +236,10 @@ export const getDojoClient = async (
|
|||||||
clientComponent.Decos.push(clientDeco);
|
clientComponent.Decos.push(clientDeco);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
clientComponent.PendingColors = dojoComponent.PendingColors;
|
||||||
|
clientComponent.Colors = dojoComponent.Colors;
|
||||||
|
clientComponent.PendingLights = dojoComponent.PendingLights;
|
||||||
|
clientComponent.Lights = dojoComponent.Lights;
|
||||||
dojo.DojoComponents.push(clientComponent);
|
dojo.DojoComponents.push(clientComponent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -230,6 +250,15 @@ export const getDojoClient = async (
|
|||||||
}
|
}
|
||||||
needSave = true;
|
needSave = true;
|
||||||
}
|
}
|
||||||
|
for (const deco of decosToRemoveNoRefund) {
|
||||||
|
logger.debug(`removing polychrome`, deco);
|
||||||
|
const component = guild.DojoComponents.id(deco.componentId)!;
|
||||||
|
component.Decos!.splice(
|
||||||
|
component.Decos!.findIndex(x => x._id.equals(deco.decoId)),
|
||||||
|
1
|
||||||
|
);
|
||||||
|
needSave = true;
|
||||||
|
}
|
||||||
if (needSave) {
|
if (needSave) {
|
||||||
await guild.save();
|
await guild.save();
|
||||||
}
|
}
|
||||||
|
@ -161,6 +161,7 @@ export interface IDojoClient {
|
|||||||
|
|
||||||
export interface IDojoComponentClient {
|
export interface IDojoComponentClient {
|
||||||
id: IOid;
|
id: IOid;
|
||||||
|
SortId?: IOid;
|
||||||
pf: string; // Prefab (.level)
|
pf: string; // Prefab (.level)
|
||||||
ppf: string;
|
ppf: string;
|
||||||
pi?: IOid; // Parent ID. N/A to root.
|
pi?: IOid; // Parent ID. N/A to root.
|
||||||
@ -175,16 +176,25 @@ export interface IDojoComponentClient {
|
|||||||
DestructionTime?: IMongoDate;
|
DestructionTime?: IMongoDate;
|
||||||
Decos?: IDojoDecoClient[];
|
Decos?: IDojoDecoClient[];
|
||||||
DecoCapacity?: number;
|
DecoCapacity?: number;
|
||||||
|
PaintBot?: IOid;
|
||||||
|
PendingColors?: number[];
|
||||||
|
Colors?: number[];
|
||||||
|
PendingLights?: number[];
|
||||||
|
Lights?: number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IDojoComponentDatabase
|
export interface IDojoComponentDatabase
|
||||||
extends Omit<IDojoComponentClient, "id" | "pi" | "CompletionTime" | "DestructionTime" | "Decos"> {
|
extends Omit<
|
||||||
|
IDojoComponentClient,
|
||||||
|
"id" | "SortId" | "pi" | "CompletionTime" | "DestructionTime" | "Decos" | "PaintBot"
|
||||||
|
> {
|
||||||
_id: Types.ObjectId;
|
_id: Types.ObjectId;
|
||||||
pi?: Types.ObjectId;
|
pi?: Types.ObjectId;
|
||||||
CompletionTime?: Date;
|
CompletionTime?: Date;
|
||||||
CompletionLogPending?: boolean;
|
CompletionLogPending?: boolean;
|
||||||
DestructionTime?: Date;
|
DestructionTime?: Date;
|
||||||
Decos?: IDojoDecoDatabase[];
|
Decos?: IDojoDecoDatabase[];
|
||||||
|
PaintBot?: Types.ObjectId;
|
||||||
Leaderboard?: IDojoLeaderboardEntry[];
|
Leaderboard?: IDojoLeaderboardEntry[];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,6 +210,7 @@ export interface IDojoDecoClient {
|
|||||||
CompletionTime?: IMongoDate;
|
CompletionTime?: IMongoDate;
|
||||||
RushPlatinum?: number;
|
RushPlatinum?: number;
|
||||||
PictureFrameInfo?: IPictureFrameInfo;
|
PictureFrameInfo?: IPictureFrameInfo;
|
||||||
|
Pending?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IDojoDecoDatabase extends Omit<IDojoDecoClient, "id" | "CompletionTime"> {
|
export interface IDojoDecoDatabase extends Omit<IDojoDecoClient, "id" | "CompletionTime"> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user