This commit is contained in:
parent
a82c1640e6
commit
41aaea56f9
@ -816,3 +816,85 @@ export const getAllianceClient = async (
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
export const handleGuildGoalProgress = async (
|
||||
guild: TGuildDatabaseDocument,
|
||||
upload: { Count: number; Tag: string; goalId: Types.ObjectId }
|
||||
) => {
|
||||
guild.GoalProgress ??= [];
|
||||
const goalProgress = guild.GoalProgress.find(x => x.goalId.equals(upload.goalId));
|
||||
if (!goalProgress) {
|
||||
guild.GoalProgress.push({
|
||||
Count: upload.Count,
|
||||
Tag: upload.Tag,
|
||||
goalId: upload.goalId
|
||||
});
|
||||
}
|
||||
const totalCount = (goalProgress?.Count ?? 0) + upload.Count;
|
||||
const guildRewards = goalGuildRewardByTag[upload.Tag].rewards;
|
||||
const tierGoals = goalGuildRewardByTag[upload.Tag].guildGoals[guild.Tier - 1];
|
||||
const rewards = [];
|
||||
if (tierGoals.length && guildRewards.length) {
|
||||
for (let i = 0; i < tierGoals.length; i++) {
|
||||
if (
|
||||
tierGoals[i] &&
|
||||
tierGoals[i] <= totalCount &&
|
||||
(!goalProgress || goalProgress.Count < tierGoals[i]) &&
|
||||
guildRewards[i]
|
||||
) {
|
||||
rewards.push(guildRewards[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (rewards.length) {
|
||||
logger.debug(`guild goal rewards`, rewards);
|
||||
guild.VaultDecoRecipes ??= [];
|
||||
rewards.forEach(type => {
|
||||
guild.VaultDecoRecipes!.push({
|
||||
ItemType: type,
|
||||
ItemCount: 1
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (goalProgress) {
|
||||
goalProgress.Count += upload.Count;
|
||||
}
|
||||
await guild.save();
|
||||
};
|
||||
|
||||
export const goalGuildRewardByTag: Record<string, { guildGoals: number[][]; rewards: string[] }> = {
|
||||
JadeShadowsEvent: {
|
||||
guildGoals: [
|
||||
// I don't know what ClanGoal means
|
||||
[15, 30, 45, 60],
|
||||
[45, 90, 135, 180],
|
||||
[150, 300, 450, 600],
|
||||
[450, 900, 1350, 1800],
|
||||
[1500, 3000, 4500, 6000]
|
||||
],
|
||||
rewards: [
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/JadeShadowsEventPewterTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/JadeShadowsEventBronzeTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/JadeShadowsEventSilverTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/JadeShadowsEventGoldTrophyRecipe"
|
||||
]
|
||||
},
|
||||
DuviriMurmurEvent: {
|
||||
guildGoals: [
|
||||
// I don't know what ClanGoal means
|
||||
[260, 519, 779, 1038],
|
||||
[779, 1557, 2336, 3114],
|
||||
[2595, 5190, 7785, 10380],
|
||||
[7785, 15570, 23355, 31140],
|
||||
[29950, 51900, 77850, 103800]
|
||||
],
|
||||
rewards: [
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventClayTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventBronzeTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventSilverTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventGoldTrophyRecipe"
|
||||
]
|
||||
}
|
||||
};
|
||||
|
@ -82,6 +82,7 @@ import { TAccountDocument } from "@/src/services/loginService";
|
||||
import { ITypeCount } from "@/src/types/commonTypes";
|
||||
import { IEquipmentClient } from "@/src/types/equipmentTypes";
|
||||
import { Guild } from "@/src/models/guildModel";
|
||||
import { handleGuildGoalProgress } from "@/src/services/guildService";
|
||||
|
||||
const getRotations = (rewardInfo: IRewardInfo, tierOverride?: number): number[] => {
|
||||
// Disruption missions just tell us (https://onlyg.it/OpenWF/SpaceNinjaServer/issues/2599)
|
||||
@ -720,47 +721,11 @@ export const addMissionInventoryUpdates = async (
|
||||
if (goal && goal.ClanGoal && inventory.GuildId) {
|
||||
const guild = await Guild.findById(inventory.GuildId, "GoalProgress Tier VaultDecoRecipes");
|
||||
if (guild) {
|
||||
guild.GoalProgress ??= [];
|
||||
const goalProgress = guild.GoalProgress.find(x => x.goalId.equals(goal._id.$oid));
|
||||
if (!goalProgress) {
|
||||
guild.GoalProgress.push({
|
||||
Count: uploadProgress.Count,
|
||||
Tag: goal.Tag,
|
||||
goalId: new Types.ObjectId(goal._id.$oid)
|
||||
});
|
||||
}
|
||||
const totalCount = (goalProgress?.Count ?? 0) + uploadProgress.Count;
|
||||
const guildRewards = goalGuildRewardByTag[goal.Tag].rewards;
|
||||
const tierGoals = goalGuildRewardByTag[goal.Tag].guildGoals[guild.Tier - 1];
|
||||
const rewards = [];
|
||||
if (tierGoals.length && guildRewards.length) {
|
||||
for (let i = 0; i < tierGoals.length; i++) {
|
||||
if (
|
||||
tierGoals[i] &&
|
||||
tierGoals[i] <= totalCount &&
|
||||
(!goalProgress || goalProgress.Count < tierGoals[i]) &&
|
||||
guildRewards[i]
|
||||
) {
|
||||
rewards.push(guildRewards[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (rewards.length) {
|
||||
logger.debug(`guild goal rewards`, rewards);
|
||||
guild.VaultDecoRecipes ??= [];
|
||||
rewards.forEach(type => {
|
||||
guild.VaultDecoRecipes!.push({
|
||||
ItemType: type,
|
||||
ItemCount: 1
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (goalProgress) {
|
||||
goalProgress.Count += uploadProgress.Count;
|
||||
}
|
||||
await guild.save();
|
||||
handleGuildGoalProgress(guild, {
|
||||
Count: uploadProgress.Count,
|
||||
Tag: goal.Tag,
|
||||
goalId: new Types.ObjectId(goal._id.$oid)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2434,38 +2399,3 @@ const goalMessagesByKey: Record<string, { sndr: string; msg: string; sub: string
|
||||
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png"
|
||||
}
|
||||
};
|
||||
|
||||
const goalGuildRewardByTag: Record<string, { guildGoals: number[][]; rewards: string[] }> = {
|
||||
JadeShadowsEvent: {
|
||||
guildGoals: [
|
||||
// I don't know what ClanGoal means
|
||||
[15, 30, 45, 60],
|
||||
[45, 90, 135, 180],
|
||||
[150, 300, 450, 600],
|
||||
[450, 900, 1350, 1800],
|
||||
[1500, 3000, 4500, 6000]
|
||||
],
|
||||
rewards: [
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/JadeShadowsEventPewterTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/JadeShadowsEventBronzeTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/JadeShadowsEventSilverTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/JadeShadowsEventGoldTrophyRecipe"
|
||||
]
|
||||
},
|
||||
DuviriMurmurEvent: {
|
||||
guildGoals: [
|
||||
// I don't know what ClanGoal means
|
||||
[260, 519, 779, 1038],
|
||||
[779, 1557, 2336, 3114],
|
||||
[2595, 5190, 7785, 10380],
|
||||
[7785, 15570, 23355, 31140],
|
||||
[29950, 51900, 77850, 103800]
|
||||
],
|
||||
rewards: [
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventClayTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventBronzeTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventSilverTrophyRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/DuviriMurmurEventGoldTrophyRecipe"
|
||||
]
|
||||
}
|
||||
};
|
||||
|
@ -37,6 +37,10 @@ import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/invento
|
||||
import { fromStoreItem, toStoreItem } from "@/src/services/itemDataService";
|
||||
import { DailyDeal } from "@/src/models/worldStateModel";
|
||||
import { fromMongoDate, toMongoDate } from "@/src/helpers/inventoryHelpers";
|
||||
import { Account } from "@/src/models/loginModel";
|
||||
import { Guild } from "@/src/models/guildModel";
|
||||
import { handleGuildGoalProgress } from "@/src/services/guildService";
|
||||
import { Types } from "mongoose";
|
||||
|
||||
export const getStoreItemCategory = (storeItem: string): string => {
|
||||
const storeItemString = getSubstringFromKeyword(storeItem, "StoreItems/");
|
||||
@ -138,6 +142,22 @@ export const handlePurchase = async (
|
||||
updateCurrency(inventory, offer.PremiumPrice[0], true, prePurchaseInventoryChanges);
|
||||
}
|
||||
}
|
||||
if (
|
||||
inventory.GuildId &&
|
||||
offer.ItemPrices &&
|
||||
manifest.VendorInfo.TypeName ==
|
||||
"/Lotus/Types/Game/VendorManifests/Events/DuviriMurmurInvasionVendorManifest"
|
||||
) {
|
||||
const guild = await Guild.findById(inventory.GuildId, "GoalProgress Tier VaultDecoRecipes");
|
||||
const goal = getWorldState().Goals.find(x => x.Tag == "DuviriMurmurEvent");
|
||||
if (guild && goal) {
|
||||
handleGuildGoalProgress(guild, {
|
||||
Count: offer.ItemPrices[0].ItemCount * purchaseRequest.PurchaseParams.Quantity,
|
||||
Tag: goal.Tag,
|
||||
goalId: new Types.ObjectId(goal._id.$oid)
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!config.dontSubtractPurchaseItemCost) {
|
||||
if (offer.ItemPrices) {
|
||||
handleItemPrices(
|
||||
|
Loading…
x
Reference in New Issue
Block a user