Compare commits
No commits in common. "main" and "main" have entirely different histories.
@ -67,7 +67,6 @@
|
||||
"resourceBoost": false,
|
||||
"tennoLiveRelay": false,
|
||||
"wolfHunt": false,
|
||||
"orphixVenom": false,
|
||||
"longShadow": false,
|
||||
"hallowedFlame": false,
|
||||
"hallowedNightmares": false,
|
||||
@ -80,10 +79,6 @@
|
||||
"starDaysOverride": null,
|
||||
"dogDaysOverride": null,
|
||||
"dogDaysRewardsOverride": null,
|
||||
"bellyOfTheBeast": false,
|
||||
"bellyOfTheBeastProgressOverride": 0,
|
||||
"eightClaw": false,
|
||||
"eightClawProgressOverride": 0,
|
||||
"eidolonOverride": "",
|
||||
"vallisOverride": "",
|
||||
"duviriOverride": "",
|
||||
|
8
package-lock.json
generated
8
package-lock.json
generated
@ -23,7 +23,7 @@
|
||||
"ncp": "^2.0.0",
|
||||
"typescript": "^5.5",
|
||||
"undici": "^7.10.0",
|
||||
"warframe-public-export-plus": "^0.5.81",
|
||||
"warframe-public-export-plus": "^0.5.80",
|
||||
"warframe-riven-info": "^0.1.2",
|
||||
"winston": "^3.17.0",
|
||||
"winston-daily-rotate-file": "^5.0.0",
|
||||
@ -5507,9 +5507,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/warframe-public-export-plus": {
|
||||
"version": "0.5.81",
|
||||
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.81.tgz",
|
||||
"integrity": "sha512-kh3e21XThVDSwdC3TJsMsXZnlZ4B/21HdeJkKcjuTygpCd842EPEKS3lRZl3mpXFOmdha744vAW1XEyHfiLofg=="
|
||||
"version": "0.5.80",
|
||||
"resolved": "https://registry.npmjs.org/warframe-public-export-plus/-/warframe-public-export-plus-0.5.80.tgz",
|
||||
"integrity": "sha512-K5f1Ws3szVdnO0tBcxlNdhXoGHIw09cjHel7spKPGL7aF/vmEkbBGRmYQFvs8n5cGo+v+3qIDMre54Ghb3t0Iw=="
|
||||
},
|
||||
"node_modules/warframe-riven-info": {
|
||||
"version": "0.1.2",
|
||||
|
@ -40,7 +40,7 @@
|
||||
"ncp": "^2.0.0",
|
||||
"typescript": "^5.5",
|
||||
"undici": "^7.10.0",
|
||||
"warframe-public-export-plus": "^0.5.81",
|
||||
"warframe-public-export-plus": "^0.5.80",
|
||||
"warframe-riven-info": "^0.1.2",
|
||||
"winston": "^3.17.0",
|
||||
"winston-daily-rotate-file": "^5.0.0",
|
||||
|
@ -102,10 +102,7 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
|
||||
const secondsElapsed = Math.trunc(Date.now() / 1000) - start;
|
||||
const progress = secondsElapsed / recipe.buildTime;
|
||||
logger.debug(`rushing recipe at ${Math.trunc(progress * 100)}% completion`);
|
||||
const cost =
|
||||
progress > 0.5
|
||||
? Math.round(recipe.skipBuildTimePrice * (1 - (progress - 0.5)))
|
||||
: recipe.skipBuildTimePrice;
|
||||
const cost = Math.round(recipe.skipBuildTimePrice * (1 - (progress - 0.5)));
|
||||
InventoryChanges = {
|
||||
...InventoryChanges,
|
||||
...updateCurrency(inventory, cost, true)
|
||||
|
@ -72,7 +72,7 @@ export const dronesController: RequestHandler = async (req, res) => {
|
||||
);
|
||||
}
|
||||
} else {
|
||||
drone.ResourceCount = droneMeta.binCapacity * droneMeta.capacityMultipliers[resource.Rarity];
|
||||
drone.ResourceCount = 1;
|
||||
}
|
||||
await inventory.save();
|
||||
res.json({});
|
||||
|
@ -1,26 +0,0 @@
|
||||
import { RequestHandler } from "express";
|
||||
import { getAccountForRequest } from "@/src/services/loginService";
|
||||
import { getInventory } from "@/src/services/inventoryService";
|
||||
import { Guild } from "@/src/models/guildModel";
|
||||
|
||||
export const getGuildEventScoreController: RequestHandler = async (req, res) => {
|
||||
const account = await getAccountForRequest(req);
|
||||
const inventory = await getInventory(account._id.toString(), "GuildId");
|
||||
const guild = await Guild.findById(inventory.GuildId);
|
||||
const goalId = req.query.goalId as string;
|
||||
if (guild && guild.GoalProgress && goalId) {
|
||||
const goal = guild.GoalProgress.find(x => x.goalId.toString() == goalId);
|
||||
if (goal) {
|
||||
res.json({
|
||||
Tier: guild.Tier,
|
||||
GoalProgress: {
|
||||
Count: goal.Count,
|
||||
Tag: goal.Tag,
|
||||
_id: { $oid: goal.goalId }
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
res.json({});
|
||||
};
|
@ -12,7 +12,7 @@ export const hubBlessingController: RequestHandler = async (req, res) => {
|
||||
if (req.query.mode == "send") {
|
||||
const inventory = await getInventory(accountId, "BlessingCooldown Boosters");
|
||||
inventory.BlessingCooldown = new Date(Date.now() + 86400000);
|
||||
addBooster(boosterType, 3 * 3600, inventory); // unfaithful, but current HUB server does not handle broadcasting, so this way users can bless themselves.
|
||||
addBooster(boosterType, 3 * 3600, inventory);
|
||||
await inventory.save();
|
||||
|
||||
let token = "";
|
||||
|
@ -1,19 +1,23 @@
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { ISetPlacedDecoInfoRequest } from "@/src/types/personalRoomsTypes";
|
||||
import { IPictureFrameInfo, ISetPlacedDecoInfoRequest } from "@/src/types/personalRoomsTypes";
|
||||
import { RequestHandler } from "express";
|
||||
import { handleSetPlacedDecoInfo } from "@/src/services/shipCustomizationsService";
|
||||
|
||||
export const setPlacedDecoInfoController: RequestHandler = async (req, res) => {
|
||||
const accountId = await getAccountIdForRequest(req);
|
||||
const payload = JSON.parse(req.body as string) as ISetPlacedDecoInfoRequest;
|
||||
//console.log(JSON.stringify(payload, null, 2));
|
||||
await handleSetPlacedDecoInfo(accountId, payload);
|
||||
res.json({
|
||||
...payload,
|
||||
IsPicture: !!payload.PictureFrameInfo
|
||||
DecoId: payload.DecoId,
|
||||
IsPicture: true,
|
||||
PictureFrameInfo: payload.PictureFrameInfo,
|
||||
BootLocation: payload.BootLocation
|
||||
} satisfies ISetPlacedDecoInfoResponse);
|
||||
};
|
||||
|
||||
interface ISetPlacedDecoInfoResponse extends ISetPlacedDecoInfoRequest {
|
||||
interface ISetPlacedDecoInfoResponse {
|
||||
DecoId: string;
|
||||
IsPicture: boolean;
|
||||
PictureFrameInfo?: IPictureFrameInfo;
|
||||
BootLocation?: string;
|
||||
}
|
||||
|
@ -1,10 +1,8 @@
|
||||
import { importInventory, importLoadOutPresets, importPersonalRooms } from "@/src/services/importService";
|
||||
import { importInventory, importLoadOutPresets } from "@/src/services/importService";
|
||||
import { getInventory } from "@/src/services/inventoryService";
|
||||
import { getLoadout } from "@/src/services/loadoutService";
|
||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||
import { getPersonalRooms } from "@/src/services/personalRoomsService";
|
||||
import { IInventoryClient } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
import { IGetShipResponse } from "@/src/types/personalRoomsTypes";
|
||||
import { RequestHandler } from "express";
|
||||
|
||||
export const importController: RequestHandler = async (req, res) => {
|
||||
@ -15,21 +13,15 @@ export const importController: RequestHandler = async (req, res) => {
|
||||
importInventory(inventory, request.inventory);
|
||||
await inventory.save();
|
||||
|
||||
if ("LoadOutPresets" in request.inventory && request.inventory.LoadOutPresets) {
|
||||
if (request.inventory.LoadOutPresets) {
|
||||
const loadout = await getLoadout(accountId);
|
||||
importLoadOutPresets(loadout, request.inventory.LoadOutPresets);
|
||||
await loadout.save();
|
||||
}
|
||||
|
||||
if ("Ship" in request.inventory || "Apartment" in request.inventory || "TailorShop" in request.inventory) {
|
||||
const personalRooms = await getPersonalRooms(accountId);
|
||||
importPersonalRooms(personalRooms, request.inventory);
|
||||
await personalRooms.save();
|
||||
}
|
||||
|
||||
res.end();
|
||||
};
|
||||
|
||||
interface IImportRequest {
|
||||
inventory: Partial<IInventoryClient> | Partial<IGetShipResponse>;
|
||||
inventory: Partial<IInventoryClient>;
|
||||
}
|
||||
|
@ -19,8 +19,6 @@ import {
|
||||
import { Document, Model, model, Schema, Types } from "mongoose";
|
||||
import { fusionTreasuresSchema, typeCountSchema } from "@/src/models/inventoryModels/inventoryModel";
|
||||
import { pictureFrameInfoSchema } from "@/src/models/personalRoomsModel";
|
||||
import { IGoalProgressClient, IGoalProgressDatabase } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
import { toOid } from "@/src/helpers/inventoryHelpers";
|
||||
|
||||
const dojoDecoSchema = new Schema<IDojoDecoDatabase>({
|
||||
Type: String,
|
||||
@ -176,28 +174,6 @@ const guildLogEntryNumberSchema = new Schema<IGuildLogEntryNumber>(
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
const goalProgressSchema = new Schema<IGoalProgressDatabase>(
|
||||
{
|
||||
Count: Number,
|
||||
Tag: String,
|
||||
goalId: Types.ObjectId
|
||||
},
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
goalProgressSchema.set("toJSON", {
|
||||
virtuals: true,
|
||||
transform(_doc, obj: Record<string, any>) {
|
||||
const db = obj as IGoalProgressDatabase;
|
||||
const client = obj as IGoalProgressClient;
|
||||
|
||||
client._id = toOid(db.goalId);
|
||||
|
||||
delete obj.goalId;
|
||||
delete obj.__v;
|
||||
}
|
||||
});
|
||||
|
||||
const guildSchema = new Schema<IGuildDatabase>(
|
||||
{
|
||||
Name: { type: String, required: true, unique: true },
|
||||
@ -230,8 +206,7 @@ const guildSchema = new Schema<IGuildDatabase>(
|
||||
RoomChanges: { type: [guildLogRoomChangeSchema], default: undefined },
|
||||
TechChanges: { type: [guildLogEntryContributableSchema], default: undefined },
|
||||
RosterActivity: { type: [guildLogEntryRosterSchema], default: undefined },
|
||||
ClassChanges: { type: [guildLogEntryNumberSchema], default: undefined },
|
||||
GoalProgress: { type: [goalProgressSchema], default: undefined }
|
||||
ClassChanges: { type: [guildLogEntryNumberSchema], default: undefined }
|
||||
},
|
||||
{ id: false }
|
||||
);
|
||||
|
@ -85,8 +85,8 @@ import {
|
||||
IAccolades,
|
||||
IHubNpcCustomization,
|
||||
IEndlessXpReward,
|
||||
IGoalProgressDatabase,
|
||||
IGoalProgressClient,
|
||||
IPersonalGoalProgressDatabase,
|
||||
IPersonalGoalProgressClient,
|
||||
IKubrowPetPrintClient,
|
||||
IKubrowPetPrintDatabase
|
||||
} from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
@ -445,7 +445,7 @@ const discoveredMarkerSchema = new Schema<IDiscoveredMarker>(
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
const personalGoalProgressSchema = new Schema<IGoalProgressDatabase>(
|
||||
const personalGoalProgressSchema = new Schema<IPersonalGoalProgressDatabase>(
|
||||
{
|
||||
Best: Number,
|
||||
Count: Number,
|
||||
@ -458,8 +458,8 @@ const personalGoalProgressSchema = new Schema<IGoalProgressDatabase>(
|
||||
personalGoalProgressSchema.set("toJSON", {
|
||||
virtuals: true,
|
||||
transform(_doc, obj: Record<string, any>) {
|
||||
const db = obj as IGoalProgressDatabase;
|
||||
const client = obj as IGoalProgressClient;
|
||||
const db = obj as IPersonalGoalProgressDatabase;
|
||||
const client = obj as IPersonalGoalProgressClient;
|
||||
|
||||
client._id = toOid(db.goalId);
|
||||
|
||||
|
@ -25,7 +25,7 @@ export const EquipmentSelectionSchema = new Schema<IEquipmentSelection>(
|
||||
}
|
||||
);
|
||||
|
||||
export const loadoutConfigSchema = new Schema<ILoadoutConfigDatabase>(
|
||||
const loadoutConfigSchema = new Schema<ILoadoutConfigDatabase>(
|
||||
{
|
||||
FocusSchool: String,
|
||||
PresetIcon: String,
|
||||
|
@ -8,7 +8,7 @@ const leaderboardEntrySchema = new Schema<ILeaderboardEntryDatabase>(
|
||||
displayName: { type: String, required: true },
|
||||
score: { type: Number, required: true },
|
||||
guildId: Schema.Types.ObjectId,
|
||||
expiry: Date,
|
||||
expiry: { type: Date, required: true },
|
||||
guildTier: Number
|
||||
},
|
||||
{ id: false }
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { toMongoDate, toOid } from "@/src/helpers/inventoryHelpers";
|
||||
import {
|
||||
IApartmentDatabase,
|
||||
ICustomizationInfoDatabase,
|
||||
IFavouriteLoadoutDatabase,
|
||||
IGardeningDatabase,
|
||||
IOrbiterClient,
|
||||
@ -12,13 +11,12 @@ import {
|
||||
IPlantClient,
|
||||
IPlantDatabase,
|
||||
IPlanterDatabase,
|
||||
IRoomDatabase,
|
||||
IRoom,
|
||||
ITailorShopDatabase,
|
||||
PersonalRoomsModelType
|
||||
} from "@/src/types/personalRoomsTypes";
|
||||
import { Schema, Types, model } from "mongoose";
|
||||
import { colorSchema, shipCustomizationSchema } from "@/src/models/commonModel";
|
||||
import { loadoutConfigSchema } from "@/src/models/inventoryModels/loadoutModel";
|
||||
|
||||
export const pictureFrameInfoSchema = new Schema<IPictureFrameInfo>(
|
||||
{
|
||||
@ -36,20 +34,7 @@ export const pictureFrameInfoSchema = new Schema<IPictureFrameInfo>(
|
||||
TextColorB: Number,
|
||||
TextOrientation: Number
|
||||
},
|
||||
{ _id: false }
|
||||
);
|
||||
|
||||
export const customizationInfoSchema = new Schema<ICustomizationInfoDatabase>(
|
||||
{
|
||||
Anim: String,
|
||||
AnimPose: Number,
|
||||
LoadOutPreset: loadoutConfigSchema,
|
||||
VehiclePreset: loadoutConfigSchema,
|
||||
EquippedWeapon: String,
|
||||
AvatarType: String,
|
||||
LoadOutType: String
|
||||
},
|
||||
{ _id: false }
|
||||
{ id: false, _id: false }
|
||||
);
|
||||
|
||||
const placedDecosSchema = new Schema<IPlacedDecosDatabase>(
|
||||
@ -59,9 +44,7 @@ const placedDecosSchema = new Schema<IPlacedDecosDatabase>(
|
||||
Rot: [Number],
|
||||
Scale: Number,
|
||||
Sockets: Number,
|
||||
PictureFrameInfo: { type: pictureFrameInfoSchema, default: undefined },
|
||||
CustomizationInfo: { type: customizationInfoSchema, default: undefined },
|
||||
AnimPoseItem: String
|
||||
PictureFrameInfo: { type: pictureFrameInfoSchema, default: undefined }
|
||||
},
|
||||
{ id: false }
|
||||
);
|
||||
@ -77,7 +60,7 @@ placedDecosSchema.set("toJSON", {
|
||||
}
|
||||
});
|
||||
|
||||
const roomSchema = new Schema<IRoomDatabase>(
|
||||
const roomSchema = new Schema<IRoom>(
|
||||
{
|
||||
Name: String,
|
||||
MaxCapacity: Number,
|
||||
|
@ -97,19 +97,7 @@ const statsSchema = new Schema<IStatsDatabase>({
|
||||
SentinelGameScore: Number,
|
||||
CaliberChicksScore: Number,
|
||||
OlliesCrashCourseScore: Number,
|
||||
DojoObstacleScore: Number,
|
||||
|
||||
Halloween16: Number,
|
||||
AmalgamEventScoreMax: Number,
|
||||
Halloween19ScoreMax: Number,
|
||||
FlotillaEventScore: Number,
|
||||
FlotillaSpaceBadgesTier1: Number,
|
||||
FlotillaSpaceBadgesTier2: Number,
|
||||
FlotillaSpaceBadgesTier3: Number,
|
||||
FlotillaGroundBadgesTier1: Number,
|
||||
FlotillaGroundBadgesTier2: Number,
|
||||
FlotillaGroundBadgesTier3: Number,
|
||||
MechSurvivalScoreMax: Number
|
||||
DojoObstacleScore: Number
|
||||
});
|
||||
|
||||
statsSchema.set("toJSON", {
|
||||
|
@ -62,7 +62,6 @@ import { getFriendsController } from "@/src/controllers/api/getFriendsController
|
||||
import { getGuildContributionsController } from "@/src/controllers/api/getGuildContributionsController";
|
||||
import { getGuildController } from "@/src/controllers/api/getGuildController";
|
||||
import { getGuildDojoController } from "@/src/controllers/api/getGuildDojoController";
|
||||
import { getGuildEventScoreController } from "@/src/controllers/api/getGuildEventScoreController";
|
||||
import { getGuildLogController } from "@/src/controllers/api/getGuildLogController";
|
||||
import { getIgnoredUsersController } from "@/src/controllers/api/getIgnoredUsersController";
|
||||
import { getNewRewardSeedController } from "@/src/controllers/api/getNewRewardSeedController";
|
||||
@ -193,7 +192,6 @@ apiRouter.get("/getFriends.php", getFriendsController);
|
||||
apiRouter.get("/getGuild.php", getGuildController);
|
||||
apiRouter.get("/getGuildContributions.php", getGuildContributionsController);
|
||||
apiRouter.get("/getGuildDojo.php", getGuildDojoController);
|
||||
apiRouter.get("/getGuildEventScore.php", getGuildEventScoreController);
|
||||
apiRouter.get("/getGuildLog.php", getGuildLogController);
|
||||
apiRouter.get("/getIgnoredUsers.php", getIgnoredUsersController);
|
||||
apiRouter.get("/getMessages.php", inboxController); // unsure if this is correct, but needed for U17
|
||||
|
@ -8,6 +8,5 @@ const statsRouter = express.Router();
|
||||
statsRouter.get("/view.php", viewController);
|
||||
statsRouter.post("/upload.php", uploadController);
|
||||
statsRouter.post("/leaderboardWeekly.php", leaderboardController);
|
||||
statsRouter.post("/leaderboardArchived.php", leaderboardController);
|
||||
|
||||
export { statsRouter };
|
||||
|
@ -79,7 +79,6 @@ export interface IConfig {
|
||||
tennoLiveRelay?: boolean;
|
||||
baroTennoConRelay?: boolean;
|
||||
wolfHunt?: boolean;
|
||||
orphixVenom?: boolean;
|
||||
longShadow?: boolean;
|
||||
hallowedFlame?: boolean;
|
||||
hallowedNightmares?: boolean;
|
||||
@ -92,10 +91,6 @@ export interface IConfig {
|
||||
starDaysOverride?: boolean;
|
||||
dogDaysOverride?: boolean;
|
||||
dogDaysRewardsOverride?: number;
|
||||
bellyOfTheBeast?: boolean;
|
||||
bellyOfTheBeastProgressOverride?: number;
|
||||
eightClaw?: boolean;
|
||||
eightClawProgressOverride?: number;
|
||||
eidolonOverride?: string;
|
||||
vallisOverride?: string;
|
||||
duviriOverride?: string;
|
||||
|
@ -115,14 +115,7 @@ export const getGuildClient = async (
|
||||
NumContributors: guild.CeremonyContributors?.length ?? 0,
|
||||
CeremonyResetDate: guild.CeremonyResetDate ? toMongoDate(guild.CeremonyResetDate) : undefined,
|
||||
AutoContributeFromVault: guild.AutoContributeFromVault,
|
||||
AllianceId: guild.AllianceId ? toOid2(guild.AllianceId, account.BuildLabel) : undefined,
|
||||
GoalProgress: guild.GoalProgress
|
||||
? guild.GoalProgress.map(gp => ({
|
||||
Count: gp.Count,
|
||||
Tag: gp.Tag,
|
||||
_id: { $oid: gp.goalId.toString() }
|
||||
}))
|
||||
: undefined
|
||||
AllianceId: guild.AllianceId ? toOid2(guild.AllianceId, account.BuildLabel) : undefined
|
||||
};
|
||||
};
|
||||
|
||||
@ -816,100 +809,3 @@ export const getAllianceClient = async (
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
export const handleGuildGoalProgress = async (
|
||||
guild: TGuildDatabaseDocument,
|
||||
upload: { Count: number; Tag: string; goalId: Types.ObjectId }
|
||||
): Promise<void> => {
|
||||
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"
|
||||
]
|
||||
},
|
||||
MechSurvival: {
|
||||
guildGoals: [
|
||||
[1390, 5860, 13920, 18850],
|
||||
[3510, 22275, 69120, 137250],
|
||||
[11700, 75250, 230400, 457500],
|
||||
[35100, 222750, 691200, 1372500],
|
||||
[117000, 742500, 2304000, 4575000]
|
||||
],
|
||||
rewards: [
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/MechEventTrophyTerracottaRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/MechEventTrophyBronzeRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/MechEventTrophySilverRecipe",
|
||||
"/Lotus/Levels/ClanDojo/ComponentPropRecipes/MechEventTrophyGoldRecipe"
|
||||
]
|
||||
}
|
||||
};
|
||||
|
@ -44,28 +44,6 @@ import {
|
||||
IKubrowPetDetailsClient,
|
||||
IKubrowPetDetailsDatabase
|
||||
} from "@/src/types/equipmentTypes";
|
||||
import {
|
||||
IApartmentClient,
|
||||
IApartmentDatabase,
|
||||
ICustomizationInfoClient,
|
||||
ICustomizationInfoDatabase,
|
||||
IFavouriteLoadout,
|
||||
IFavouriteLoadoutDatabase,
|
||||
IGetShipResponse,
|
||||
IOrbiterClient,
|
||||
IOrbiterDatabase,
|
||||
IPersonalRoomsDatabase,
|
||||
IPlacedDecosClient,
|
||||
IPlacedDecosDatabase,
|
||||
IPlantClient,
|
||||
IPlantDatabase,
|
||||
IPlanterClient,
|
||||
IPlanterDatabase,
|
||||
IRoomClient,
|
||||
IRoomDatabase,
|
||||
ITailorShop,
|
||||
ITailorShopDatabase
|
||||
} from "@/src/types/personalRoomsTypes";
|
||||
|
||||
const convertDate = (value: IMongoDate): Date => {
|
||||
return new Date(parseInt(value.$date.$numberLong));
|
||||
@ -451,84 +429,3 @@ export const importLoadOutPresets = (db: ILoadoutDatabase, client: ILoadOutPrese
|
||||
db.OPERATOR_ADULT = client.OPERATOR_ADULT.map(convertLoadOutConfig);
|
||||
db.DRIFTER = client.DRIFTER.map(convertLoadOutConfig);
|
||||
};
|
||||
|
||||
export const convertCustomizationInfo = (client: ICustomizationInfoClient): ICustomizationInfoDatabase => {
|
||||
return {
|
||||
...client,
|
||||
LoadOutPreset: client.LoadOutPreset ? convertLoadOutConfig(client.LoadOutPreset) : undefined,
|
||||
VehiclePreset: client.VehiclePreset ? convertLoadOutConfig(client.VehiclePreset) : undefined
|
||||
};
|
||||
};
|
||||
|
||||
const convertDeco = (client: IPlacedDecosClient): IPlacedDecosDatabase => {
|
||||
const { id, ...rest } = client;
|
||||
return {
|
||||
...rest,
|
||||
CustomizationInfo: client.CustomizationInfo ? convertCustomizationInfo(client.CustomizationInfo) : undefined,
|
||||
_id: new Types.ObjectId(id.$oid)
|
||||
};
|
||||
};
|
||||
|
||||
const convertRoom = (client: IRoomClient): IRoomDatabase => {
|
||||
return {
|
||||
...client,
|
||||
PlacedDecos: client.PlacedDecos ? client.PlacedDecos.map(convertDeco) : []
|
||||
};
|
||||
};
|
||||
|
||||
const convertShip = (client: IOrbiterClient): IOrbiterDatabase => {
|
||||
return {
|
||||
...client,
|
||||
ShipInterior: {
|
||||
...client.ShipInterior,
|
||||
Colors: Array.isArray(client.ShipInterior.Colors) ? {} : client.ShipInterior.Colors
|
||||
},
|
||||
Rooms: client.Rooms.map(convertRoom),
|
||||
FavouriteLoadoutId: client.FavouriteLoadoutId ? new Types.ObjectId(client.FavouriteLoadoutId.$oid) : undefined
|
||||
};
|
||||
};
|
||||
|
||||
const convertPlant = (client: IPlantClient): IPlantDatabase => {
|
||||
return {
|
||||
...client,
|
||||
EndTime: convertDate(client.EndTime)
|
||||
};
|
||||
};
|
||||
|
||||
const convertPlanter = (client: IPlanterClient): IPlanterDatabase => {
|
||||
return {
|
||||
...client,
|
||||
Plants: client.Plants.map(convertPlant)
|
||||
};
|
||||
};
|
||||
|
||||
const convertFavouriteLoadout = (client: IFavouriteLoadout): IFavouriteLoadoutDatabase => {
|
||||
return {
|
||||
...client,
|
||||
LoadoutId: new Types.ObjectId(client.LoadoutId.$oid)
|
||||
};
|
||||
};
|
||||
|
||||
const convertApartment = (client: IApartmentClient): IApartmentDatabase => {
|
||||
return {
|
||||
...client,
|
||||
Rooms: client.Rooms.map(convertRoom),
|
||||
Gardening: { Planters: client.Gardening.Planters.map(convertPlanter) },
|
||||
FavouriteLoadouts: client.FavouriteLoadouts ? client.FavouriteLoadouts.map(convertFavouriteLoadout) : []
|
||||
};
|
||||
};
|
||||
|
||||
const convertTailorShop = (client: ITailorShop): ITailorShopDatabase => {
|
||||
return {
|
||||
...client,
|
||||
Rooms: client.Rooms.map(convertRoom),
|
||||
Colors: Array.isArray(client.Colors) ? {} : client.Colors,
|
||||
FavouriteLoadouts: client.FavouriteLoadouts ? client.FavouriteLoadouts.map(convertFavouriteLoadout) : []
|
||||
};
|
||||
};
|
||||
|
||||
export const importPersonalRooms = (db: IPersonalRoomsDatabase, client: Partial<IGetShipResponse>): void => {
|
||||
if (client.Ship !== undefined) db.Ship = convertShip(client.Ship);
|
||||
if (client.Apartment !== undefined) db.Apartment = convertApartment(client.Apartment);
|
||||
if (client.TailorShop !== undefined) db.TailorShop = convertTailorShop(client.TailorShop);
|
||||
};
|
||||
|
@ -847,32 +847,6 @@ export const addItem = async (
|
||||
return addMotorcycle(inventory, typeName);
|
||||
}
|
||||
break;
|
||||
case "Lore":
|
||||
if (typeName == "/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentRewards") {
|
||||
const fragmentType = getRandomElement([
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentA",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentB",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentC",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentD",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentE",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentF",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentG",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentH",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentI",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentJ",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentK",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentL",
|
||||
"/Lotus/Types/Lore/Fragments/GrineerGhoulFragments/GhoulFragmentM"
|
||||
])!;
|
||||
addLoreFragmentScans(inventory, [
|
||||
{
|
||||
Progress: 1,
|
||||
Region: "",
|
||||
ItemType: fragmentType
|
||||
}
|
||||
]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1,66 +1,38 @@
|
||||
import { Guild } from "@/src/models/guildModel";
|
||||
import { Leaderboard, TLeaderboardEntryDocument } from "@/src/models/leaderboardModel";
|
||||
import { ILeaderboardEntryClient } from "@/src/types/leaderboardTypes";
|
||||
import { handleGuildGoalProgress } from "@/src/services/guildService";
|
||||
import { getWorldState } from "@/src/services/worldStateService";
|
||||
import { Types } from "mongoose";
|
||||
|
||||
export const submitLeaderboardScore = async (
|
||||
schedule: "weekly" | "daily" | "events",
|
||||
schedule: "weekly" | "daily",
|
||||
leaderboard: string,
|
||||
ownerId: string,
|
||||
displayName: string,
|
||||
score: number,
|
||||
guildId: string | undefined
|
||||
): Promise<void> => {
|
||||
let expiry: Date | undefined;
|
||||
let expiry: Date;
|
||||
if (schedule == "daily") {
|
||||
expiry = new Date(Math.trunc(Date.now() / 86400000) * 86400000 + 86400000);
|
||||
} else if (schedule == "weekly") {
|
||||
} else {
|
||||
const EPOCH = 1734307200 * 1000; // Monday
|
||||
const week = Math.trunc((Date.now() - EPOCH) / 604800000);
|
||||
const weekStart = EPOCH + week * 604800000;
|
||||
const weekEnd = weekStart + 604800000;
|
||||
expiry = new Date(weekEnd);
|
||||
}
|
||||
|
||||
if (guildId) {
|
||||
const guild = (await Guild.findById(guildId, "Name Tier GoalProgress VaultDecoRecipes"))!;
|
||||
if (schedule == "events") {
|
||||
const prevAccount = await Leaderboard.findOne(
|
||||
{ leaderboard: `${schedule}.accounts.${leaderboard}`, ownerId },
|
||||
"score"
|
||||
);
|
||||
const delta = score - (prevAccount?.score ?? 0);
|
||||
if (delta > 0) {
|
||||
await Leaderboard.findOneAndUpdate(
|
||||
{ leaderboard: `${schedule}.guilds.${leaderboard}`, ownerId: guildId },
|
||||
{ $inc: { score: delta }, $set: { displayName: guild.Name, guildTier: guild.Tier } },
|
||||
{ upsert: true }
|
||||
);
|
||||
const goal = getWorldState().Goals.find(x => x.ScoreMaxTag == leaderboard);
|
||||
if (goal) {
|
||||
await handleGuildGoalProgress(guild, {
|
||||
Count: delta,
|
||||
Tag: goal.Tag,
|
||||
goalId: new Types.ObjectId(goal._id.$oid)
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
await Leaderboard.findOneAndUpdate(
|
||||
{ leaderboard: `${schedule}.guilds.${leaderboard}`, ownerId: guildId },
|
||||
{ $max: { score }, $set: { displayName: guild.Name, guildTier: guild.Tier, expiry } },
|
||||
{ upsert: true, new: true }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
await Leaderboard.findOneAndUpdate(
|
||||
{ leaderboard: `${schedule}.accounts.${leaderboard}`, ownerId },
|
||||
{ $max: { score }, $set: { displayName, guildId, expiry } },
|
||||
{ upsert: true }
|
||||
);
|
||||
if (guildId) {
|
||||
const guild = (await Guild.findById(guildId, "Name Tier"))!;
|
||||
await Leaderboard.findOneAndUpdate(
|
||||
{ leaderboard: `${schedule}.guilds.${leaderboard}`, ownerId: guildId },
|
||||
{ $max: { score }, $set: { displayName: guild.Name, guildTier: guild.Tier, expiry } },
|
||||
{ upsert: true }
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const getLeaderboard = async (
|
||||
@ -71,7 +43,6 @@ export const getLeaderboard = async (
|
||||
guildId: string | undefined,
|
||||
guildTier: number | undefined
|
||||
): Promise<ILeaderboardEntryClient[]> => {
|
||||
leaderboard = leaderboard.replace("archived", guildTier || guildId ? "events.guilds" : "events.accounts");
|
||||
const filter: { leaderboard: string; guildId?: string; guildTier?: number } = { leaderboard };
|
||||
if (guildId) {
|
||||
filter.guildId = guildId;
|
||||
|
@ -81,8 +81,6 @@ import { fromOid } from "@/src/helpers/inventoryHelpers";
|
||||
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)
|
||||
@ -652,12 +650,7 @@ export const addMissionInventoryUpdates = async (
|
||||
}
|
||||
}
|
||||
if (currentMissionKey && currentMissionKey in goalMessagesByKey) {
|
||||
let countBeforeUpload = goalProgress?.Count ?? 0;
|
||||
let totalCount = countBeforeUpload + uploadProgress.Count;
|
||||
if (goal.Best) {
|
||||
countBeforeUpload = goalProgress?.Best ?? 0;
|
||||
totalCount = uploadProgress.Best;
|
||||
}
|
||||
const totalCount = (goalProgress?.Count ?? 0) + uploadProgress.Count;
|
||||
let reward;
|
||||
|
||||
if (goal.InterimGoals && goal.InterimRewards) {
|
||||
@ -665,7 +658,7 @@ export const addMissionInventoryUpdates = async (
|
||||
if (
|
||||
goal.InterimGoals[i] &&
|
||||
goal.InterimGoals[i] <= totalCount &&
|
||||
(!goalProgress || countBeforeUpload < goal.InterimGoals[i]) &&
|
||||
(!goalProgress || goalProgress.Count < goal.InterimGoals[i]) &&
|
||||
goal.InterimRewards[i]
|
||||
) {
|
||||
reward = goal.InterimRewards[i];
|
||||
@ -677,7 +670,7 @@ export const addMissionInventoryUpdates = async (
|
||||
!reward &&
|
||||
goal.Goal &&
|
||||
goal.Goal <= totalCount &&
|
||||
(!goalProgress || countBeforeUpload < goal.Goal) &&
|
||||
(!goalProgress || goalProgress.Count < goal.Goal) &&
|
||||
goal.Reward
|
||||
) {
|
||||
reward = goal.Reward;
|
||||
@ -686,7 +679,7 @@ export const addMissionInventoryUpdates = async (
|
||||
!reward &&
|
||||
goal.BonusGoal &&
|
||||
goal.BonusGoal <= totalCount &&
|
||||
(!goalProgress || countBeforeUpload < goal.BonusGoal) &&
|
||||
(!goalProgress || goalProgress.Count < goal.BonusGoal) &&
|
||||
goal.BonusReward
|
||||
) {
|
||||
reward = goal.BonusReward;
|
||||
@ -719,20 +712,10 @@ export const addMissionInventoryUpdates = async (
|
||||
}
|
||||
|
||||
if (goalProgress) {
|
||||
goalProgress.Best = Math.max(goalProgress.Best!, uploadProgress.Best);
|
||||
goalProgress.Best = Math.max(goalProgress.Best, uploadProgress.Best);
|
||||
goalProgress.Count += uploadProgress.Count;
|
||||
}
|
||||
}
|
||||
if (goal && goal.ClanGoal && inventory.GuildId) {
|
||||
const guild = await Guild.findById(inventory.GuildId, "GoalProgress Tier VaultDecoRecipes");
|
||||
if (guild) {
|
||||
await handleGuildGoalProgress(guild, {
|
||||
Count: uploadProgress.Count,
|
||||
Tag: goal.Tag,
|
||||
goalId: new Types.ObjectId(goal._id.$oid)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1096,12 +1079,6 @@ export const addMissionRewards = async (
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rewardInfo.GoalProgressAmount && goal.Tag.startsWith("MechSurvival")) {
|
||||
MissionRewards.push({
|
||||
StoreItem: "/Lotus/StoreItems/Types/Items/MiscItems/MechSurvivalEventCreds",
|
||||
ItemCount: Math.trunc(rewardInfo.GoalProgressAmount / 10)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1320,27 +1297,6 @@ export const addMissionRewards = async (
|
||||
logger.error(`unknown droptable ${si.DropTable} for DROP_BLUEPRINT`);
|
||||
}
|
||||
}
|
||||
// e.g. H-09 Apex Turret Sumdali
|
||||
if (si.DROP_MISC_ITEM) {
|
||||
const resourceDroptable = droptables.find(x => x.type == "resource");
|
||||
if (resourceDroptable) {
|
||||
for (let i = 0; i != si.DROP_MISC_ITEM.length; ++i) {
|
||||
const reward = getRandomReward(resourceDroptable.items)!;
|
||||
logger.debug(`stripped droptable (resources pool) rolled`, reward);
|
||||
if (Object.keys(await addItem(inventory, reward.type)).length == 0) {
|
||||
logger.debug(`item already owned, skipping`);
|
||||
} else {
|
||||
MissionRewards.push({
|
||||
StoreItem: toStoreItem(reward.type),
|
||||
ItemCount: 1,
|
||||
FromEnemyCache: true // to show "identified"
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.error(`unknown droptable ${si.DropTable} for DROP_BLUEPRINT`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2427,35 +2383,5 @@ const goalMessagesByKey: Record<string, { sndr: string; msg: string; sub: string
|
||||
msg: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertMissionRewardBody",
|
||||
sub: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertMissionFourTitle",
|
||||
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png"
|
||||
},
|
||||
"/Lotus/Types/Keys/MechSurvivalCorpusShip": {
|
||||
sndr: "/Lotus/Language/Bosses/DeimosFather",
|
||||
msg: "/Lotus/Language/Inbox/MechEvent2020Tier1CompleteDesc",
|
||||
sub: "/Lotus/Language/Inbox/MechEvent2020Tier1CompleteTitle",
|
||||
icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
|
||||
},
|
||||
"/Lotus/Types/Keys/MechSurvivalGrineerGalleon": {
|
||||
sndr: "/Lotus/Language/Bosses/DeimosFather",
|
||||
msg: "/Lotus/Language/Inbox/MechEvent2020Tier2CompleteDesc",
|
||||
sub: "/Lotus/Language/Inbox/MechEvent2020Tier2CompleteTitle",
|
||||
icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
|
||||
},
|
||||
"/Lotus/Types/Keys/MechSurvivalGasCity": {
|
||||
sndr: "/Lotus/Language/Bosses/DeimosFather",
|
||||
msg: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteDesc",
|
||||
sub: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteTitle",
|
||||
icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
|
||||
},
|
||||
"/Lotus/Types/Keys/MechSurvivalCorpusShipEndurance": {
|
||||
sndr: "/Lotus/Language/Bosses/DeimosFather",
|
||||
msg: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteDesc",
|
||||
sub: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteTitle",
|
||||
icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
|
||||
},
|
||||
"/Lotus/Types/Keys/MechSurvivalGrineerGalleonEndurance": {
|
||||
sndr: "/Lotus/Language/Bosses/DeimosFather",
|
||||
msg: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteDesc",
|
||||
sub: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteTitle",
|
||||
icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
|
||||
}
|
||||
};
|
||||
|
@ -36,9 +36,6 @@ 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 { 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/");
|
||||
@ -140,22 +137,6 @@ 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) {
|
||||
await 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(
|
||||
|
@ -19,7 +19,6 @@ import { Guild } from "@/src/models/guildModel";
|
||||
import { hasGuildPermission } from "@/src/services/guildService";
|
||||
import { GuildPermission } from "@/src/types/guildTypes";
|
||||
import { ExportResources } from "warframe-public-export-plus";
|
||||
import { convertCustomizationInfo } from "@/src/services/importService";
|
||||
|
||||
export const setShipCustomizations = async (
|
||||
accountId: string,
|
||||
@ -270,8 +269,6 @@ export const handleSetPlacedDecoInfo = async (accountId: string, req: ISetPlaced
|
||||
}
|
||||
|
||||
placedDeco.PictureFrameInfo = req.PictureFrameInfo;
|
||||
placedDeco.CustomizationInfo = req.CustomizationInfo ? convertCustomizationInfo(req.CustomizationInfo) : undefined;
|
||||
placedDeco.AnimPoseItem = req.AnimPoseItem;
|
||||
|
||||
await personalRooms.save();
|
||||
};
|
||||
|
@ -382,29 +382,6 @@ export const updateStats = async (accountOwnerId: string, payload: IStatsUpdate)
|
||||
);
|
||||
break;
|
||||
|
||||
case "Halloween16":
|
||||
case "AmalgamEventScoreMax":
|
||||
case "Halloween19ScoreMax":
|
||||
case "FlotillaEventScore":
|
||||
case "FlotillaSpaceBadgesTier1":
|
||||
case "FlotillaSpaceBadgesTier2":
|
||||
case "FlotillaSpaceBadgesTier3":
|
||||
case "FlotillaGroundBadgesTier1":
|
||||
case "FlotillaGroundBadgesTier2":
|
||||
case "FlotillaGroundBadgesTier3":
|
||||
case "MechSurvivalScoreMax":
|
||||
playerStats[category] ??= 0;
|
||||
if (data > playerStats[category]) playerStats[category] = data as number;
|
||||
await submitLeaderboardScore(
|
||||
"events",
|
||||
category,
|
||||
accountOwnerId,
|
||||
payload.displayName,
|
||||
data as number,
|
||||
payload.guildId
|
||||
);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (!ignoredCategories.includes(category)) {
|
||||
unknownCategories[action] ??= [];
|
||||
|
@ -8,7 +8,6 @@ import syndicateMissions from "@/static/fixed_responses/worldState/syndicateMiss
|
||||
import darvoDeals from "@/static/fixed_responses/worldState/darvoDeals.json";
|
||||
import invasionNodes from "@/static/fixed_responses/worldState/invasionNodes.json";
|
||||
import invasionRewards from "@/static/fixed_responses/worldState/invasionRewards.json";
|
||||
import pvpChallenges from "@/static/fixed_responses/worldState/pvpChallenges.json";
|
||||
import { buildConfig } from "@/src/services/buildConfigService";
|
||||
import { unixTimesInMs } from "@/src/constants/timeConstants";
|
||||
import { config } from "@/src/services/configService";
|
||||
@ -22,7 +21,6 @@ import {
|
||||
ILiteSortie,
|
||||
IPrimeVaultTrader,
|
||||
IPrimeVaultTraderOffer,
|
||||
IPVPChallengeInstance,
|
||||
ISeasonChallenge,
|
||||
ISortie,
|
||||
ISortieMission,
|
||||
@ -1403,7 +1401,6 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
DailyDeals: [],
|
||||
EndlessXpChoices: [],
|
||||
KnownCalendarSeasons: [],
|
||||
PVPChallengeInstances: [],
|
||||
...staticWorldState,
|
||||
SyndicateMissions: [...staticWorldState.SyndicateMissions],
|
||||
InGameMarket: {
|
||||
@ -1538,7 +1535,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
Personal: true,
|
||||
Bounty: true,
|
||||
ClampNodeScores: true,
|
||||
Node: "EventNode28", // Incompatible with Wolf Hunt (2025), Orphix Venom
|
||||
Node: "EventNode28", // Incompatible with Wolf Hunt (2025)
|
||||
MissionKeyName: "/Lotus/Types/Keys/GalleonRobberyAlertB",
|
||||
Desc: "/Lotus/Language/Events/GalleonRobberyEventMissionTitle",
|
||||
Icon: "/Lotus/Interface/Icons/Player/GalleonRobberiesEvent.png",
|
||||
@ -1804,10 +1801,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
|
||||
worldState.Goals.push({
|
||||
_id: {
|
||||
$oid:
|
||||
((dogDaysStart / 1000) & 0xffffffff).toString(16).padStart(8, "0") +
|
||||
"c57487c3768936d" +
|
||||
year.toString(16)
|
||||
$oid: ((dogDaysStart / 1000) & 0xffffffff).toString(16).padStart(8, "0") + "c57487c3768936df"
|
||||
},
|
||||
Activation: { $date: { $numberLong: activationTimeStamp } },
|
||||
Expiry: { $date: { $numberLong: expiryTimeStamp } },
|
||||
@ -1964,7 +1958,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
"/Lotus/Types/Keys/WolfTacAlertReduxD"
|
||||
],
|
||||
ConcurrentNodeReqs: [1, 2, 3],
|
||||
ConcurrentNodes: ["EventNode28", "EventNode39", "EventNode40"], // Incompatible with Galleon Of Ghouls, Orphix Venom
|
||||
ConcurrentNodes: ["EventNode28", "EventNode39", "EventNode40"], // Incompatible with Galleon Of Ghouls
|
||||
MissionKeyName: "/Lotus/Types/Keys/WolfTacAlertReduxA",
|
||||
Faction: "FC_GRINEER",
|
||||
Desc: "/Lotus/Language/Alerts/WolfAlert",
|
||||
@ -2100,7 +2094,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
const year = config.worldState.hallowedNightmaresRewardsOverride ?? 0;
|
||||
|
||||
worldState.Goals.push({
|
||||
_id: { $oid: "5bc98f00000000000000000" + year.toString(16) },
|
||||
_id: { $oid: "5bc9e8f7972d7d184c8398c9" },
|
||||
Activation: { $date: { $numberLong: "1539972000000" } },
|
||||
Expiry: { $date: { $numberLong: "2000000000000" } },
|
||||
Count: 0,
|
||||
@ -2125,7 +2119,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
});
|
||||
if (year != 2) {
|
||||
worldState.Goals.push({
|
||||
_id: { $oid: "5bc98f01000000000000000" + year.toString(16) },
|
||||
_id: { $oid: "5bca18b1e12d9e14a0b6ad27" },
|
||||
Activation: { $date: { $numberLong: "1539972000000" } },
|
||||
Expiry: { $date: { $numberLong: "2000000000000" } },
|
||||
Count: 0,
|
||||
@ -2198,7 +2192,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
const year = config.worldState.proxyRebellionRewardsOverride ?? 0;
|
||||
|
||||
worldState.Goals.push({
|
||||
_id: { $oid: "5b5b5da0000000000000000" + year.toString(16) },
|
||||
_id: { $oid: "5b5743ac972d7d3ed0517b0d" },
|
||||
Activation: { $date: { $numberLong: "1532714400000" } },
|
||||
Expiry: { $date: { $numberLong: "2000000000000" } },
|
||||
Count: 0,
|
||||
@ -2216,7 +2210,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
"/Lotus/Types/Keys/TacAlertKeyProxyRebellionFour"
|
||||
],
|
||||
ConcurrentNodeReqs: [1, 2, 3],
|
||||
ConcurrentNodes: ["EventNode7", "EventNode4", "EventNode17"], // Incompatible with Orphix venom
|
||||
ConcurrentNodes: ["EventNode7", "EventNode4", "EventNode17"],
|
||||
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyProxyRebellionOne",
|
||||
Faction: "FC_CORPUS",
|
||||
Desc: "/Lotus/Language/Alerts/TacAlertProxyRebellion",
|
||||
@ -2271,126 +2265,6 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
BonusReward: { items: ["/Lotus/StoreItems/Upgrades/Skins/Clan/BountyHunterBadgeItem"] }
|
||||
});
|
||||
}
|
||||
if (config.worldState?.bellyOfTheBeast) {
|
||||
worldState.Goals.push({
|
||||
_id: { $oid: "67a5035c2a198564d62e165e" },
|
||||
Activation: { $date: { $numberLong: "1738868400000" } },
|
||||
Expiry: { $date: { $numberLong: "2000000000000" } },
|
||||
Count: config.worldState.bellyOfTheBeastProgressOverride ?? 0,
|
||||
HealthPct: (config.worldState.bellyOfTheBeastProgressOverride ?? 0) / 100,
|
||||
Goal: 0,
|
||||
Personal: true,
|
||||
Community: true,
|
||||
ClanGoal: [72, 216, 648, 1944, 5832],
|
||||
Tag: "JadeShadowsEvent",
|
||||
Faction: "FC_MITW",
|
||||
Desc: "/Lotus/Language/JadeShadows/JadeShadowsEventName",
|
||||
ToolTip: "/Lotus/Language/JadeShadows/JadeShadowsShortEventDesc",
|
||||
Icon: "/Lotus/Interface/Icons/WorldStatePanel/JadeShadowsEventBadge.png",
|
||||
ScoreLocTag: "/Lotus/Language/JadeShadows/JadeShadowsEventScore",
|
||||
Node: "SolNode723",
|
||||
MissionKeyName: "/Lotus/Types/Keys/JadeShadowsEventMission",
|
||||
ItemType: "/Lotus/Types/Gameplay/JadeShadows/Resources/AscensionEventResourceItem"
|
||||
});
|
||||
}
|
||||
if (config.worldState?.eightClaw) {
|
||||
worldState.Goals.push({
|
||||
_id: { $oid: "685c15f80000000000000000" },
|
||||
Activation: { $date: { $numberLong: "1750865400000" } },
|
||||
Expiry: { $date: { $numberLong: "2000000000000" } },
|
||||
Count: config.worldState.eightClawProgressOverride ?? 0,
|
||||
HealthPct: (config.worldState.eightClawProgressOverride ?? 0) / 100,
|
||||
Goal: 0,
|
||||
Personal: true,
|
||||
Community: true,
|
||||
ClanGoal: [72, 216, 648, 1944, 5832],
|
||||
Tag: "DuviriMurmurEvent",
|
||||
Faction: "FC_MITW",
|
||||
Desc: "/Lotus/Language/Isleweaver/DuviriMurmurEventTitle",
|
||||
ToolTip: "/Lotus/Language/Isleweaver/DuviriMurmurEventDescription",
|
||||
Icon: "/Lotus/Interface/Icons/WorldStatePanel/EightClawEventBadge.png",
|
||||
ScoreLocTag: "/Lotus/Language/Isleweaver/DuviriMurmurEventScore",
|
||||
Node: "SolNode236",
|
||||
MissionKeyName: "/Lotus/Types/Keys/DuviriMITW/DuviriMITWEventKey"
|
||||
});
|
||||
}
|
||||
|
||||
if (config.worldState?.orphixVenom) {
|
||||
worldState.Goals.push(
|
||||
{
|
||||
_id: { $oid: "5fdcccb875d5ad500dc477d0" },
|
||||
Activation: { $date: { $numberLong: "1608320400000" } },
|
||||
Expiry: { $date: { $numberLong: "2000000000000" } },
|
||||
Count: 0,
|
||||
Goal: 500,
|
||||
Success: 0,
|
||||
Personal: true,
|
||||
Best: true,
|
||||
Node: "EventNode17", // Incompatible with Proxy Rebellion
|
||||
MissionKeyName: "/Lotus/Types/Keys/MechSurvivalCorpusShip",
|
||||
Faction: "FC_SENTIENT",
|
||||
Desc: "/Lotus/Language/Events/MechEventMissionTier1",
|
||||
Icon: "/Lotus/Interface/Icons/Categories/IconMech256.png",
|
||||
Tag: "MechSurvivalA",
|
||||
ScoreVar: "MechSurvivalScore",
|
||||
Reward: {
|
||||
items: ["/Lotus/StoreItems/Upgrades/Skins/Clan/MechEventEmblemItem"]
|
||||
}
|
||||
},
|
||||
{
|
||||
_id: { $oid: "5fdcccb875d5ad500dc477d1" },
|
||||
Activation: { $date: { $numberLong: "1608320400000" } },
|
||||
Expiry: { $date: { $numberLong: "2000000000000" } },
|
||||
Count: 0,
|
||||
Goal: 1000,
|
||||
Success: 0,
|
||||
Personal: true,
|
||||
Best: true,
|
||||
Node: "EventNode28", // Incompatible with Galleon Of Ghouls, Wolf Hunt (2025)
|
||||
MissionKeyName: "/Lotus/Types/Keys/MechSurvivalGrineerGalleon",
|
||||
Faction: "FC_SENTIENT",
|
||||
Desc: "/Lotus/Language/Events/MechEventMissionTier2",
|
||||
Icon: "/Lotus/Interface/Icons/Categories/IconMech256.png",
|
||||
Tag: "MechSurvivalB",
|
||||
PrereqGoalTags: ["MechSurvivalA"],
|
||||
ScoreVar: "MechSurvivalScore",
|
||||
Reward: {
|
||||
items: ["/Lotus/StoreItems/Types/Items/FusionTreasures/OroFusexJ"]
|
||||
}
|
||||
},
|
||||
{
|
||||
_id: { $oid: "5fdcccb875d5ad500dc477d2" },
|
||||
Activation: { $date: { $numberLong: "1608320400000" } },
|
||||
Expiry: { $date: { $numberLong: "2000000000000" } },
|
||||
Count: 0,
|
||||
Goal: 2000,
|
||||
Success: 0,
|
||||
Personal: true,
|
||||
Best: true,
|
||||
Node: "EventNode32",
|
||||
MissionKeyName: "/Lotus/Types/Keys/MechSurvivalGasCity",
|
||||
MissionKeyRotation: [
|
||||
"/Lotus/Types/Keys/MechSurvivalGasCity",
|
||||
"/Lotus/Types/Keys/MechSurvivalCorpusShipEndurance",
|
||||
"/Lotus/Types/Keys/MechSurvivalGrineerGalleonEndurance"
|
||||
],
|
||||
MissionKeyRotationInterval: 3600, // 1 hour
|
||||
Faction: "FC_SENTIENT",
|
||||
Desc: "/Lotus/Language/Events/MechEventMissionTier3",
|
||||
Icon: "/Lotus/Interface/Icons/Categories/IconMech256.png",
|
||||
Tag: "MechSurvival",
|
||||
PrereqGoalTags: ["MechSurvivalA", "MechSurvivalB"],
|
||||
ScoreVar: "MechSurvivalScore",
|
||||
ScoreMaxTag: "MechSurvivalScoreMax",
|
||||
Reward: {
|
||||
items: [
|
||||
"/Lotus/StoreItems/Types/Items/MiscItems/FormaAura",
|
||||
"/Lotus/StoreItems/Upgrades/Skins/Necramech/MechWeapon/MechEventMausolonSkin"
|
||||
]
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// Nightwave Challenges
|
||||
const nightwaveSyndicateTag = getNightwaveSyndicateTag(buildLabel);
|
||||
@ -2712,23 +2586,6 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
|
||||
pushSyndicateMissions(worldState, sdy, rng.randomInt(0, 100_000), "ba6f84724fa48061", "SteelMeridianSyndicate");
|
||||
}
|
||||
|
||||
{
|
||||
const conclaveDayStart = EPOCH + day * unixTimesInMs.day + 5 * unixTimesInMs.hour + 30 * unixTimesInMs.minute;
|
||||
const conclaveDayEnd = conclaveDayStart + unixTimesInMs.day;
|
||||
const conclaveWeekStart = weekStart + 40 * unixTimesInMs.minute - 2 * unixTimesInMs.day;
|
||||
const conclaveWeekEnd = conclaveWeekStart + unixTimesInMs.week;
|
||||
|
||||
pushConclaveWeakly(worldState.PVPChallengeInstances, week);
|
||||
pushConclaveDailys(worldState.PVPChallengeInstances, day);
|
||||
|
||||
if (isBeforeNextExpectedWorldStateRefresh(timeMs, conclaveDayEnd)) {
|
||||
pushConclaveDailys(worldState.PVPChallengeInstances, day + 1);
|
||||
}
|
||||
if (isBeforeNextExpectedWorldStateRefresh(timeMs, conclaveWeekEnd)) {
|
||||
pushConclaveWeakly(worldState.PVPChallengeInstances, week + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Archon Hunt cycling every week
|
||||
worldState.LiteSorties.push(getLiteSortie(week));
|
||||
if (isBeforeNextExpectedWorldStateRefresh(timeMs, weekEnd)) {
|
||||
@ -3114,136 +2971,3 @@ const updateDailyDeal = async (): Promise<void> => {
|
||||
export const updateWorldStateCollections = async (): Promise<void> => {
|
||||
await Promise.all([updateFissures(), updateDailyDeal()]);
|
||||
};
|
||||
|
||||
const pushConclaveDaily = (
|
||||
activeChallenges: IPVPChallengeInstance[],
|
||||
PVPMode: string,
|
||||
pool: {
|
||||
key: string;
|
||||
ScriptParamValue: number;
|
||||
PVPModeAllowed: string[];
|
||||
SyndicateXP: number;
|
||||
DuringSingleMatch?: boolean;
|
||||
}[],
|
||||
day: number,
|
||||
id: number
|
||||
): void => {
|
||||
const conclaveDayStart = EPOCH + day * unixTimesInMs.day + 5 * unixTimesInMs.hour + 30 * unixTimesInMs.minute;
|
||||
const conclaveDayEnd = conclaveDayStart + unixTimesInMs.day;
|
||||
const challengeId = day * 8 + id;
|
||||
const rng = new SRng(new SRng(challengeId).randomInt(0, 100_000));
|
||||
let challenge: {
|
||||
key: string;
|
||||
ScriptParamValue: number;
|
||||
PVPModeAllowed?: string[];
|
||||
SyndicateXP?: number;
|
||||
DuringSingleMatch?: boolean;
|
||||
};
|
||||
do {
|
||||
challenge = rng.randomElement(pool)!;
|
||||
} while (
|
||||
activeChallenges.some(x => x.challengeTypeRefID == challenge.key) &&
|
||||
activeChallenges.some(x => x.PVPMode == PVPMode)
|
||||
);
|
||||
activeChallenges.push({
|
||||
_id: {
|
||||
$oid: "689ec5d985b55902" + challengeId.toString().padStart(8, "0")
|
||||
},
|
||||
challengeTypeRefID: challenge.key,
|
||||
startDate: { $date: { $numberLong: conclaveDayStart.toString() } },
|
||||
endDate: { $date: { $numberLong: conclaveDayEnd.toString() } },
|
||||
params: [{ n: "ScriptParamValue", v: challenge.ScriptParamValue }],
|
||||
isGenerated: true,
|
||||
PVPMode,
|
||||
subChallenges: [],
|
||||
Category: "PVPChallengeTypeCategory_DAILY"
|
||||
});
|
||||
};
|
||||
|
||||
const pushConclaveDailys = (activeChallenges: IPVPChallengeInstance[], day: number): void => {
|
||||
const modes = [
|
||||
"PVPMODE_SPEEDBALL",
|
||||
"PVPMODE_CAPTURETHEFLAG",
|
||||
"PVPMODE_DEATHMATCH",
|
||||
"PVPMODE_TEAMDEATHMATCH"
|
||||
] as const;
|
||||
|
||||
const challengesMap: Record<
|
||||
string,
|
||||
{
|
||||
key: string;
|
||||
ScriptParamValue: number;
|
||||
PVPModeAllowed: string[];
|
||||
SyndicateXP: number;
|
||||
DuringSingleMatch?: boolean;
|
||||
}[]
|
||||
> = {};
|
||||
|
||||
for (const mode of modes) {
|
||||
challengesMap[mode] = Object.entries(pvpChallenges)
|
||||
.filter(([_, challenge]) => challenge.PVPModeAllowed.includes(mode))
|
||||
.map(([key, challenge]) => ({ key, ...challenge }));
|
||||
}
|
||||
|
||||
modes.forEach((mode, index) => {
|
||||
pushConclaveDaily(activeChallenges, mode, challengesMap[mode], day, index * 2);
|
||||
pushConclaveDaily(activeChallenges, mode, challengesMap[mode], day, index * 2 + 1);
|
||||
});
|
||||
};
|
||||
|
||||
const pushConclaveWeakly = (activeChallenges: IPVPChallengeInstance[], week: number): void => {
|
||||
const weekStart = EPOCH + week * unixTimesInMs.week;
|
||||
const conclaveWeekStart = weekStart + 40 * unixTimesInMs.minute - 2 * unixTimesInMs.day;
|
||||
const conclaveWeekEnd = conclaveWeekStart + unixTimesInMs.week;
|
||||
const conclaveIdStart = ((conclaveWeekStart / 1000) & 0xffffffff).toString(16).padStart(8, "0").padEnd(23, "0");
|
||||
activeChallenges.push(
|
||||
{
|
||||
_id: { $oid: conclaveIdStart + "1" },
|
||||
challengeTypeRefID: "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins",
|
||||
startDate: { $date: { $numberLong: conclaveWeekStart.toString() } },
|
||||
endDate: { $date: { $numberLong: conclaveWeekEnd.toString() } },
|
||||
params: [{ n: "ScriptParamValue", v: 6 }],
|
||||
isGenerated: true,
|
||||
PVPMode: "PVPMODE_ALL",
|
||||
subChallenges: [],
|
||||
Category: "PVPChallengeTypeCategory_WEEKLY"
|
||||
},
|
||||
{
|
||||
_id: { $oid: conclaveIdStart + "2" },
|
||||
challengeTypeRefID: "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete",
|
||||
startDate: { $date: { $numberLong: conclaveWeekStart.toString() } },
|
||||
endDate: { $date: { $numberLong: conclaveWeekEnd.toString() } },
|
||||
params: [{ n: "ScriptParamValue", v: 20 }],
|
||||
isGenerated: true,
|
||||
PVPMode: "PVPMODE_ALL",
|
||||
subChallenges: [],
|
||||
Category: "PVPChallengeTypeCategory_WEEKLY"
|
||||
},
|
||||
{
|
||||
_id: { $oid: conclaveIdStart + "3" },
|
||||
challengeTypeRefID: "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY",
|
||||
startDate: { $date: { $numberLong: conclaveWeekStart.toString() } },
|
||||
endDate: { $date: { $numberLong: conclaveWeekEnd.toString() } },
|
||||
params: [{ n: "ScriptParamValue", v: 10 }],
|
||||
isGenerated: true,
|
||||
PVPMode: "PVPMODE_ALL",
|
||||
subChallenges: [],
|
||||
Category: "PVPChallengeTypeCategory_WEEKLY"
|
||||
},
|
||||
{
|
||||
_id: { $oid: conclaveIdStart + "4" },
|
||||
challengeTypeRefID: "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet",
|
||||
startDate: { $date: { $numberLong: conclaveWeekStart.toString() } },
|
||||
endDate: { $date: { $numberLong: conclaveWeekEnd.toString() } },
|
||||
params: [{ n: "ScriptParamValue", v: 0 }],
|
||||
isGenerated: true,
|
||||
PVPMode: "PVPMODE_NONE",
|
||||
subChallenges: [
|
||||
{ $oid: conclaveIdStart + "1" },
|
||||
{ $oid: conclaveIdStart + "2" },
|
||||
{ $oid: conclaveIdStart + "3" }
|
||||
],
|
||||
Category: "PVPChallengeTypeCategory_WEEKLY_ROOT"
|
||||
}
|
||||
);
|
||||
};
|
||||
|
@ -1,11 +1,6 @@
|
||||
import { Types } from "mongoose";
|
||||
import { IOid, IMongoDate, IOidWithLegacySupport, ITypeCount } from "@/src/types/commonTypes";
|
||||
import {
|
||||
IFusionTreasure,
|
||||
IMiscItem,
|
||||
IGoalProgressDatabase,
|
||||
IGoalProgressClient
|
||||
} from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
import { IFusionTreasure, IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||
import { IPictureFrameInfo } from "@/src/types/personalRoomsTypes";
|
||||
import { IFriendInfo } from "@/src/types/friendTypes";
|
||||
|
||||
@ -28,8 +23,6 @@ export interface IGuildClient {
|
||||
CrossPlatformEnabled?: boolean;
|
||||
AutoContributeFromVault?: boolean;
|
||||
AllianceId?: IOidWithLegacySupport;
|
||||
|
||||
GoalProgress?: IGoalProgressClient[];
|
||||
}
|
||||
|
||||
export interface IGuildDatabase {
|
||||
@ -70,8 +63,6 @@ export interface IGuildDatabase {
|
||||
TechChanges?: IGuildLogEntryContributable[];
|
||||
RosterActivity?: IGuildLogEntryRoster[];
|
||||
ClassChanges?: IGuildLogEntryNumber[];
|
||||
|
||||
GoalProgress?: IGoalProgressDatabase[];
|
||||
}
|
||||
|
||||
export interface ILongMOTD {
|
||||
|
@ -109,7 +109,7 @@ export interface IInventoryDatabase
|
||||
QualifyingInvasions: IInvasionProgressDatabase[];
|
||||
LastInventorySync?: Types.ObjectId;
|
||||
EndlessXP?: IEndlessXpProgressDatabase[];
|
||||
PersonalGoalProgress?: IGoalProgressDatabase[];
|
||||
PersonalGoalProgress?: IPersonalGoalProgressDatabase[];
|
||||
}
|
||||
|
||||
export interface IQuestKeyDatabase {
|
||||
@ -318,7 +318,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
|
||||
HWIDProtectEnabled?: boolean;
|
||||
KubrowPetPrints: IKubrowPetPrintClient[];
|
||||
AlignmentReplay?: IAlignment;
|
||||
PersonalGoalProgress?: IGoalProgressClient[];
|
||||
PersonalGoalProgress?: IPersonalGoalProgressClient[];
|
||||
ThemeStyle: string;
|
||||
ThemeBackground: string;
|
||||
ThemeSounds: string;
|
||||
@ -730,7 +730,7 @@ export enum UpgradeType {
|
||||
|
||||
export interface ILoreFragmentScan {
|
||||
Progress: number;
|
||||
Region: string;
|
||||
Region?: string;
|
||||
ItemType: string;
|
||||
}
|
||||
|
||||
@ -895,8 +895,8 @@ export interface IPeriodicMissionCompletionResponse extends Omit<IPeriodicMissio
|
||||
date: IMongoDate;
|
||||
}
|
||||
|
||||
export interface IGoalProgressClient {
|
||||
Best?: number;
|
||||
export interface IPersonalGoalProgressClient {
|
||||
Best: number;
|
||||
Count: number;
|
||||
Tag: string;
|
||||
_id: IOid;
|
||||
@ -904,7 +904,7 @@ export interface IGoalProgressClient {
|
||||
//ReceivedClanReward1?: boolean;
|
||||
}
|
||||
|
||||
export interface IGoalProgressDatabase extends Omit<IGoalProgressClient, "_id"> {
|
||||
export interface IPersonalGoalProgressDatabase extends Omit<IPersonalGoalProgressClient, "_id"> {
|
||||
goalId: Types.ObjectId;
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@ export interface ILeaderboardEntryDatabase {
|
||||
displayName: string;
|
||||
score: number;
|
||||
guildId?: Types.ObjectId;
|
||||
expiry?: Date;
|
||||
expiry: Date;
|
||||
guildTier?: number;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { IColor, IShipAttachments, IShipCustomization } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
||||
import { Document, Model, Types } from "mongoose";
|
||||
import { ILoadoutClient, ILoadoutConfigClient, ILoadoutConfigDatabase } from "@/src/types/saveLoadoutTypes";
|
||||
import { ILoadoutClient } from "@/src/types/saveLoadoutTypes";
|
||||
import { IMongoDate, IOid } from "@/src/types/commonTypes";
|
||||
|
||||
export interface IGetShipResponse {
|
||||
@ -17,7 +17,7 @@ export interface IOrbiterClient {
|
||||
Features: string[];
|
||||
ShipId: IOid;
|
||||
ShipInterior: IShipCustomization;
|
||||
Rooms: IRoomClient[];
|
||||
Rooms: IRoom[];
|
||||
VignetteFish?: string[];
|
||||
FavouriteLoadoutId?: IOid;
|
||||
Wallpaper?: string;
|
||||
@ -28,7 +28,7 @@ export interface IOrbiterClient {
|
||||
|
||||
export interface IOrbiterDatabase {
|
||||
Features: string[];
|
||||
Rooms: IRoomDatabase[];
|
||||
Rooms: IRoom[];
|
||||
ShipInterior?: IShipCustomization;
|
||||
VignetteFish?: string[];
|
||||
FavouriteLoadoutId?: Types.ObjectId;
|
||||
@ -53,18 +53,12 @@ export interface IPersonalRoomsDatabase {
|
||||
TailorShop: ITailorShopDatabase;
|
||||
}
|
||||
|
||||
export interface IRoomDatabase {
|
||||
export interface IRoom {
|
||||
Name: string;
|
||||
MaxCapacity: number;
|
||||
PlacedDecos?: IPlacedDecosDatabase[];
|
||||
}
|
||||
|
||||
export interface IRoomClient {
|
||||
Name: string;
|
||||
MaxCapacity: number;
|
||||
PlacedDecos?: IPlacedDecosClient[];
|
||||
}
|
||||
|
||||
export interface IPlantClient {
|
||||
PlantType: string;
|
||||
EndTime: IMongoDate;
|
||||
@ -95,15 +89,15 @@ export interface IGardeningDatabase {
|
||||
|
||||
export interface IApartmentClient {
|
||||
Gardening: IGardeningClient;
|
||||
Rooms: IRoomClient[];
|
||||
FavouriteLoadouts?: IFavouriteLoadout[];
|
||||
Rooms: IRoom[];
|
||||
FavouriteLoadouts: IFavouriteLoadout[];
|
||||
VideoWallBackdrop?: string;
|
||||
Soundscape?: string;
|
||||
}
|
||||
|
||||
export interface IApartmentDatabase {
|
||||
Gardening: IGardeningDatabase;
|
||||
Rooms: IRoomDatabase[];
|
||||
Rooms: IRoom[];
|
||||
FavouriteLoadouts: IFavouriteLoadoutDatabase[];
|
||||
VideoWallBackdrop?: string;
|
||||
Soundscape?: string;
|
||||
@ -116,14 +110,11 @@ export interface IPlacedDecosDatabase {
|
||||
Scale?: number;
|
||||
Sockets?: number;
|
||||
PictureFrameInfo?: IPictureFrameInfo;
|
||||
CustomizationInfo?: ICustomizationInfoDatabase;
|
||||
AnimPoseItem?: string;
|
||||
_id: Types.ObjectId;
|
||||
}
|
||||
|
||||
export interface IPlacedDecosClient extends Omit<IPlacedDecosDatabase, "_id" | "CustomizationInfo"> {
|
||||
export interface IPlacedDecosClient extends Omit<IPlacedDecosDatabase, "_id"> {
|
||||
id: IOid;
|
||||
CustomizationInfo?: ICustomizationInfoClient;
|
||||
}
|
||||
|
||||
export interface ISetShipCustomizationsRequest {
|
||||
@ -175,13 +166,11 @@ export interface IResetShipDecorationsResponse {
|
||||
}
|
||||
|
||||
export interface ISetPlacedDecoInfoRequest {
|
||||
DecoType?: string;
|
||||
DecoType: string;
|
||||
DecoId: string;
|
||||
Room: string;
|
||||
PictureFrameInfo: IPictureFrameInfo; // IsPicture
|
||||
CustomizationInfo?: ICustomizationInfoClient; // !IsPicture
|
||||
PictureFrameInfo: IPictureFrameInfo;
|
||||
BootLocation?: TBootLocation;
|
||||
AnimPoseItem?: string; // !IsPicture
|
||||
ComponentId?: string;
|
||||
GuildId?: string;
|
||||
}
|
||||
@ -202,21 +191,6 @@ export interface IPictureFrameInfo {
|
||||
TextOrientation: number;
|
||||
}
|
||||
|
||||
export interface ICustomizationInfoClient {
|
||||
Anim?: string;
|
||||
AnimPose?: number;
|
||||
LoadOutPreset?: ILoadoutConfigClient;
|
||||
VehiclePreset?: ILoadoutConfigClient;
|
||||
EquippedWeapon?: "SUIT_SLOT" | "LONG_GUN_SLOT" | "PISTOL_SLOT";
|
||||
AvatarType?: string;
|
||||
LoadOutType?: string; // "LOT_NORMAL"
|
||||
}
|
||||
|
||||
export interface ICustomizationInfoDatabase extends Omit<ICustomizationInfoClient, "LoadOutPreset" | "VehiclePreset"> {
|
||||
LoadOutPreset?: ILoadoutConfigDatabase;
|
||||
VehiclePreset?: ILoadoutConfigDatabase;
|
||||
}
|
||||
|
||||
export interface IFavouriteLoadout {
|
||||
Tag: string;
|
||||
LoadoutId: IOid;
|
||||
@ -232,12 +206,11 @@ export interface ITailorShopDatabase {
|
||||
Colors?: IColor;
|
||||
CustomJson?: string;
|
||||
LevelDecosVisible?: boolean;
|
||||
Rooms: IRoomDatabase[];
|
||||
Rooms: IRoom[];
|
||||
}
|
||||
|
||||
export interface ITailorShop extends Omit<ITailorShopDatabase, "Rooms" | "FavouriteLoadouts"> {
|
||||
Rooms: IRoomClient[];
|
||||
FavouriteLoadouts?: IFavouriteLoadout[];
|
||||
export interface ITailorShop extends Omit<ITailorShopDatabase, "FavouriteLoadouts"> {
|
||||
FavouriteLoadouts: IFavouriteLoadout[];
|
||||
}
|
||||
|
||||
export type RoomsType = { Name: string; MaxCapacity: number; PlacedDecos: Types.DocumentArray<IPlacedDecosDatabase> };
|
||||
|
@ -117,7 +117,6 @@ export type IMissionInventoryUpdateRequest = {
|
||||
DropTable: string;
|
||||
DROP_MOD?: number[];
|
||||
DROP_BLUEPRINT?: number[];
|
||||
DROP_MISC_ITEM?: number[];
|
||||
}[];
|
||||
DeathMarks?: string[];
|
||||
Nemesis?: number;
|
||||
@ -206,7 +205,6 @@ export interface IRewardInfo {
|
||||
Q?: boolean; // likely indicates that the bonus objective for this stage was completed
|
||||
CheckpointCounter?: number; // starts at 1, is incremented with each job stage upload, and does not reset when starting a new job
|
||||
challengeMissionId?: string;
|
||||
GoalProgressAmount?: number;
|
||||
}
|
||||
|
||||
export type IMissionStatus = "GS_SUCCESS" | "GS_FAILURE" | "GS_DUMPED" | "GS_QUIT" | "GS_INTERRUPTED";
|
||||
|
@ -32,19 +32,6 @@ export interface IStatsClient {
|
||||
OlliesCrashCourseScore?: number;
|
||||
DojoObstacleScore?: number;
|
||||
|
||||
// event scores
|
||||
Halloween16?: number;
|
||||
AmalgamEventScoreMax?: number;
|
||||
Halloween19ScoreMax?: number;
|
||||
FlotillaEventScore?: number;
|
||||
FlotillaSpaceBadgesTier1?: number;
|
||||
FlotillaSpaceBadgesTier2?: number;
|
||||
FlotillaSpaceBadgesTier3?: number;
|
||||
FlotillaGroundBadgesTier1?: number;
|
||||
FlotillaGroundBadgesTier2?: number;
|
||||
FlotillaGroundBadgesTier3?: number;
|
||||
MechSurvivalScoreMax?: number;
|
||||
|
||||
// not in schema
|
||||
PVP?: {
|
||||
suitDeaths?: number;
|
||||
|
@ -39,44 +39,32 @@ export interface IGoal {
|
||||
_id: IOid;
|
||||
Activation: IMongoDate;
|
||||
Expiry: IMongoDate;
|
||||
|
||||
Count?: number;
|
||||
HealthPct?: number;
|
||||
|
||||
Icon: string;
|
||||
Desc: string;
|
||||
ToolTip?: string;
|
||||
Faction?: string;
|
||||
|
||||
Goal?: number;
|
||||
InterimGoals?: number[];
|
||||
BonusGoal?: number;
|
||||
ClanGoal?: number[];
|
||||
|
||||
HealthPct?: number;
|
||||
Success?: number;
|
||||
Personal?: boolean;
|
||||
Community?: boolean;
|
||||
Best?: boolean; // Use Best instead of Count to check for reward
|
||||
Best?: boolean;
|
||||
Bounty?: boolean; // Tactical Alert
|
||||
Faction?: string;
|
||||
ClampNodeScores?: boolean;
|
||||
|
||||
Desc: string;
|
||||
ToolTip?: string;
|
||||
Transmission?: string;
|
||||
InstructionalItem?: string;
|
||||
ItemType?: string;
|
||||
|
||||
Icon: string;
|
||||
Tag: string;
|
||||
PrereqGoalTags?: string[];
|
||||
|
||||
Node?: string;
|
||||
VictimNode?: string;
|
||||
|
||||
ConcurrentMissionKeyNames?: string[];
|
||||
ConcurrentNodeReqs?: number[];
|
||||
ConcurrentNodes?: string[];
|
||||
RegionIdx?: number;
|
||||
Regions?: number[];
|
||||
MissionKeyName?: string;
|
||||
|
||||
Reward?: IMissionReward;
|
||||
InterimRewards?: IMissionReward[];
|
||||
BonusReward?: IMissionReward;
|
||||
@ -88,12 +76,7 @@ export interface IGoal {
|
||||
JobPreviousVersion?: IOid;
|
||||
|
||||
ScoreVar?: string;
|
||||
ScoreMaxTag?: string; // Field in leaderboard
|
||||
ScoreLocTag?: string;
|
||||
|
||||
MissionKeyRotation?: string[];
|
||||
MissionKeyRotationInterval?: number;
|
||||
|
||||
ScoreMaxTag?: string;
|
||||
NightLevel?: string;
|
||||
}
|
||||
|
||||
|
@ -1,290 +0,0 @@
|
||||
{
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagCaptureEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_CAPTURETHEFLAG"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagCaptureMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_CAPTURETHEFLAG"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_CAPTURETHEFLAG"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsComboEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsComboMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsHeadShotsEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsHeadShotsMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsMeleeEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsMeleeMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsMeleeHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 3000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsMultiMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPaybackEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPayback_MEDIUM": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPowerEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPowerMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPowerHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 3000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPrimaryEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPrimaryMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPrimaryHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 3000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsSecondaryEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsSecondaryMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsSecondaryHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 3000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreak_MEDIUM": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakDominationEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakDomination_MEDIUM": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakDominationHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 3000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakStoppedEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakStopped_MEDIUM": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakHARD": {
|
||||
"ScriptParamValue": 2,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 3000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsTargetInAirEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsTargetInAirMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsTargetInAirHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 3000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileSlidingEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileSlidingMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileSlidingHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 3000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteEASY": {
|
||||
"ScriptParamValue": 1,
|
||||
"PVPModeAllowed": ["PVPMODE_CAPTURETHEFLAG", "PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_CAPTURETHEFLAG", "PVPMODE_DEATHMATCH", "PVPMODE_TEAMDEATHMATCH"],
|
||||
"SyndicateXP": 1500
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballCatchesEASY": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 1000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballCatchesMEDIUM": {
|
||||
"ScriptParamValue": 10,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 3000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballCatchesHARD": {
|
||||
"ScriptParamValue": 6,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 6000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballChecksEASY": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 1000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballChecksMEDIUM": {
|
||||
"ScriptParamValue": 10,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 3000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballChecksHARD": {
|
||||
"ScriptParamValue": 6,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 6000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballGoalsEASY": {
|
||||
"ScriptParamValue": 2,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 1000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballGoalsMEDIUM": {
|
||||
"ScriptParamValue": 6,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 3000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballGoalsHARD": {
|
||||
"ScriptParamValue": 4,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 6000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsEASY": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 1000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsMEDIUM": {
|
||||
"ScriptParamValue": 6,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 3000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsHARD": {
|
||||
"ScriptParamValue": 6,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 6000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballPassesEASY": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 1000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballPassesMEDIUM": {
|
||||
"ScriptParamValue": 6,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 3000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballPassesHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 6000,
|
||||
"DuringSingleMatch": true
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballStealsEASY": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 1000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballStealsMEDIUM": {
|
||||
"ScriptParamValue": 6,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 3000
|
||||
},
|
||||
"/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballStealsHARD": {
|
||||
"ScriptParamValue": 3,
|
||||
"PVPModeAllowed": ["PVPMODE_SPEEDBALL"],
|
||||
"SyndicateXP": 6000
|
||||
}
|
||||
}
|
@ -311,6 +311,140 @@
|
||||
"PrimeVaultAvailabilities": [false, false, false, false, false],
|
||||
"PrimeTokenAvailability": true,
|
||||
"LibraryInfo": { "LastCompletedTargetType": "/Lotus/Types/Game/Library/Targets/Research7Target" },
|
||||
"PVPChallengeInstances": [
|
||||
{
|
||||
"_id": { "$oid": "6635562d036ce37f7f98e264" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeComplete",
|
||||
"startDate": { "$date": { "$numberLong": "1714771501460" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 20 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_ALL",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_WEEKLY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6635562d036ce37f7f98e263" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeGameModeWins",
|
||||
"startDate": { "$date": { "$numberLong": "1714771501460" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 6 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_ALL",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_WEEKLY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6635562d036ce37f7f98e265" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeOtherChallengeCompleteANY",
|
||||
"startDate": { "$date": { "$numberLong": "1714771501460" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 10 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_ALL",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_WEEKLY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6635562d036ce37f7f98e266" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeWeeklyStandardSet",
|
||||
"startDate": { "$date": { "$numberLong": "1714771501460" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 0 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_NONE",
|
||||
"subChallenges": [{ "$oid": "6635562d036ce37f7f98e263" }, { "$oid": "6635562d036ce37f7f98e264" }, { "$oid": "6635562d036ce37f7f98e265" }],
|
||||
"Category": "PVPChallengeTypeCategory_WEEKLY_ROOT"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6639ca6967c1192987d75fee" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeFlagReturnEASY",
|
||||
"startDate": { "$date": { "$numberLong": "1715063401824" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 1 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_CAPTURETHEFLAG",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_DAILY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6639ca6967c1192987d75fed" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteMEDIUM",
|
||||
"startDate": { "$date": { "$numberLong": "1715063401824" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 4 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_CAPTURETHEFLAG",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_DAILY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6639ca6967c1192987d75ff2" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeMatchCompleteEASY",
|
||||
"startDate": { "$date": { "$numberLong": "1715063401824" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 1 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_DEATHMATCH",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_DAILY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6639ca6967c1192987d75ff1" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsPayback_MEDIUM",
|
||||
"startDate": { "$date": { "$numberLong": "1715063401824" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 3 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_DEATHMATCH",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_DAILY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6639ca6967c1192987d75fef" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsStreakDominationEASY",
|
||||
"startDate": { "$date": { "$numberLong": "1715063401824" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 1 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_TEAMDEATHMATCH",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_DAILY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6639ca6967c1192987d75ff0" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeKillsWhileInAirHARD",
|
||||
"startDate": { "$date": { "$numberLong": "1715063401824" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 3 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_TEAMDEATHMATCH",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_DAILY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6639ca6967c1192987d75ff3" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballCatchesMEDIUM",
|
||||
"startDate": { "$date": { "$numberLong": "1715063401824" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 10 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_SPEEDBALL",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_DAILY"
|
||||
},
|
||||
{
|
||||
"_id": { "$oid": "6639ca6967c1192987d75ff4" },
|
||||
"challengeTypeRefID": "/Lotus/PVPChallengeTypes/PVPTimedChallengeSpeedballInterceptionsEASY",
|
||||
"startDate": { "$date": { "$numberLong": "1715063401824" } },
|
||||
"endDate": { "$date": { "$numberLong": "2000000000000" } },
|
||||
"params": [{ "n": "ScriptParamValue", "v": 3 }],
|
||||
"isGenerated": true,
|
||||
"PVPMode": "PVPMODE_SPEEDBALL",
|
||||
"subChallenges": [],
|
||||
"Category": "PVPChallengeTypeCategory_DAILY"
|
||||
}
|
||||
],
|
||||
"PersistentEnemies": [],
|
||||
"PVPAlternativeModes": [],
|
||||
"PVPActiveTournaments": [],
|
||||
|
@ -940,12 +940,7 @@
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="worldState.wolfHunt" />
|
||||
<label class="form-check-label" for="worldState.wolfHunt" data-loc="worldState_wolfHunt"></label>
|
||||
<abbr data-loc-inc="worldState_galleonOfGhouls|worldState_orphixVenom"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="worldState.orphixVenom" />
|
||||
<label class="form-check-label" for="worldState.orphixVenom" data-loc="worldState_orphixVenom"></label>
|
||||
<abbr data-loc-inc="worldState_galleonOfGhouls|worldState_wolfHunt|worldState_proxyRebellion"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr>
|
||||
<abbr data-loc-inc="worldState_galleonOfGhouls"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="worldState.longShadow" />
|
||||
@ -977,7 +972,6 @@
|
||||
<div class="form-group mt-2 d-flex gap-2">
|
||||
<div class="flex-fill">
|
||||
<label class="form-label" for="worldState.proxyRebellion" data-loc="worldState_proxyRebellion"></label>
|
||||
<abbr data-loc-inc="worldState_orphixVenom"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><path d="M320 576C461.4 576 576 461.4 576 320C576 178.6 461.4 64 320 64C178.6 64 64 178.6 64 320C64 461.4 178.6 576 320 576zM320 200C333.3 200 344 210.7 344 224L344 336C344 349.3 333.3 360 320 360C306.7 360 296 349.3 296 336L296 224C296 210.7 306.7 200 320 200zM293.3 416C292.7 406.1 297.6 396.7 306.1 391.5C314.6 386.4 325.3 386.4 333.8 391.5C342.3 396.7 347.2 406.1 346.6 416C347.2 425.9 342.3 435.3 333.8 440.5C325.3 445.6 314.6 445.6 306.1 440.5C297.6 435.3 292.7 425.9 293.3 416z"/></svg></abbr>
|
||||
<select class="form-control" id="worldState.proxyRebellion" data-default="false">
|
||||
<option value="true" data-loc="enabled"></option>
|
||||
<option value="false" data-loc="disabled"></option>
|
||||
@ -1046,42 +1040,6 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-2 d-flex gap-2">
|
||||
<div class="flex-fill">
|
||||
<label class="form-label" for="worldState.bellyOfTheBeast" data-loc="worldState_bellyOfTheBeast"></label>
|
||||
<select class="form-control" id="worldState.bellyOfTheBeast" data-default="false">
|
||||
<option value="true" data-loc="enabled"></option>
|
||||
<option value="false" data-loc="disabled"></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="flex-fill">
|
||||
<form class="form-group" onsubmit="doSaveConfigInt('worldState.bellyOfTheBeastProgressOverride'); return false;">
|
||||
<label class="form-label" for="worldState.bellyOfTheBeastProgressOverride" data-loc="worldState_bellyOfTheBeastProgressOverride"></label>
|
||||
<div class="input-group">
|
||||
<input id="worldState.bellyOfTheBeastProgressOverride" class="form-control" type="number" min="0" max="100" data-default="0" />
|
||||
<button class="btn btn-secondary" type="submit" data-loc="cheats_save"></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-2 d-flex gap-2">
|
||||
<div class="flex-fill">
|
||||
<label class="form-label" for="worldState.eightClaw" data-loc="worldState_eightClaw"></label>
|
||||
<select class="form-control" id="worldState.eightClaw" data-default="false">
|
||||
<option value="true" data-loc="enabled"></option>
|
||||
<option value="false" data-loc="disabled"></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="flex-fill">
|
||||
<form class="form-group" onsubmit="doSaveConfigInt('worldState.eightClawProgressOverride'); return false;">
|
||||
<label class="form-label" for="worldState.eightClawProgressOverride" data-loc="worldState_eightClawProgressOverride"></label>
|
||||
<div class="input-group">
|
||||
<input id="worldState.eightClawProgressOverride" class="form-control" type="number" min="0" max="100" data-default="0" />
|
||||
<button class="btn btn-secondary" type="submit" data-loc="cheats_save"></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group mt-2">
|
||||
<label class="form-label" for="worldState.eidolonOverride" data-loc="worldState_eidolonOverride"></label>
|
||||
<select class="form-control" id="worldState.eidolonOverride" data-default="">
|
||||
@ -1163,10 +1121,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div data-route="/webui/import" data-title="Import | OpenWF WebUI">
|
||||
<p>
|
||||
<span data-loc="import_importNote"></span>
|
||||
<span data-loc="import_importNote2"></span>
|
||||
</p>
|
||||
<p data-loc="import_importNote"></p>
|
||||
<textarea class="form-control" id="import-inventory" style="height: calc(100vh - 300px)"></textarea>
|
||||
<button class="btn btn-primary mt-3" onclick="doImport();" data-loc="import_submit"></button>
|
||||
<p class="mt-3 mb-1" data-loc="import_samples"></p>
|
||||
|
@ -251,17 +251,12 @@ dict = {
|
||||
worldState_dogDays: `Hitzefrei`,
|
||||
worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
|
||||
worldState_wolfHunt: `Wolfsjagd (2025)`,
|
||||
worldState_orphixVenom: `Orphix Gift`,
|
||||
worldState_longShadow: `Lange Schatten`,
|
||||
worldState_hallowedFlame: `Geweihte Flamme`,
|
||||
worldState_hallowedNightmares: `Geweihte Albträume`,
|
||||
worldState_hallowedNightmaresRewards: `[UNTRANSLATED] Hallowed Nightmares Rewards`,
|
||||
worldState_proxyRebellion: `Proxy-Rebellion`,
|
||||
worldState_proxyRebellionRewards: `[UNTRANSLATED] Proxy Rebellion Rewards`,
|
||||
worldState_bellyOfTheBeast: `Das Innere der Bestie`,
|
||||
worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`,
|
||||
worldState_eightClaw: `Acht Klauen`,
|
||||
worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
|
||||
worldState_from_year: `[UNTRANSLATED] from |YEAR|`,
|
||||
worldState_pre_year: `[UNTRANSLATED] pre |YEAR|`,
|
||||
worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`,
|
||||
@ -308,8 +303,7 @@ dict = {
|
||||
worldState_varziaFullyStocked: `Varzia hat volles Inventar`,
|
||||
worldState_varziaOverride: `Varzia-Angebotsüberschreibung`,
|
||||
|
||||
import_importNote: `[UNTRANSLATED] You can provide a full or partial <code>inventory.php</code> or <code>getShip.php</code> response (client representation) here.`,
|
||||
import_importNote2: `Alle Felder, die vom Importer unterstützt werden, <b>werden in deinem Account überschrieben</b>.`,
|
||||
import_importNote: `Du kannst hier eine vollständige oder teilweise Inventarantwort (Client-Darstellung) einfügen. Alle Felder, die vom Importer unterstützt werden, <b>werden in deinem Account überschrieben</b>.`,
|
||||
import_submit: `Absenden`,
|
||||
import_samples: `Beispiele:`,
|
||||
import_samples_maxFocus: `Alle Fokus-Schulen maximiert`,
|
||||
|
@ -250,17 +250,12 @@ dict = {
|
||||
worldState_dogDays: `Dog Days`,
|
||||
worldState_dogDaysRewards: `Dog Days Rewards`,
|
||||
worldState_wolfHunt: `Wolf Hunt (2025)`,
|
||||
worldState_orphixVenom: `Orphix Venom`,
|
||||
worldState_longShadow: `Long Shadow`,
|
||||
worldState_hallowedFlame: `Hallowed Flame`,
|
||||
worldState_hallowedNightmares: `Hallowed Nightmares`,
|
||||
worldState_hallowedNightmaresRewards: `Hallowed Nightmares Rewards`,
|
||||
worldState_proxyRebellion: `Proxy Rebellion`,
|
||||
worldState_proxyRebellionRewards: `Proxy Rebellion Rewards`,
|
||||
worldState_bellyOfTheBeast: `Belly of the Beast`,
|
||||
worldState_bellyOfTheBeastProgressOverride: `Belly of the Beast Progress`,
|
||||
worldState_eightClaw: `Eight Claw`,
|
||||
worldState_eightClawProgressOverride: `Eight Claw Progress`,
|
||||
worldState_from_year: `from |YEAR|`,
|
||||
worldState_pre_year: `pre |YEAR|`,
|
||||
worldState_incompatibleWith: `Incompatible with:`,
|
||||
@ -307,8 +302,7 @@ dict = {
|
||||
worldState_varziaFullyStocked: `Varzia Fully Stocked`,
|
||||
worldState_varziaOverride: `Varzia Rotation Override`,
|
||||
|
||||
import_importNote: `You can provide a full or partial <code>inventory.php</code> or <code>getShip.php</code> response (client representation) here.`,
|
||||
import_importNote2: `All fields that are supported by the importer <b>will be overwritten</b> in your account.`,
|
||||
import_importNote: `You can provide a full or partial inventory response (client respresentation) here. All fields that are supported by the importer <b>will be overwritten</b> in your account.`,
|
||||
import_submit: `Submit`,
|
||||
import_samples: `Samples:`,
|
||||
import_samples_maxFocus: `All Focus Schools Maxed Out`,
|
||||
|
@ -251,17 +251,12 @@ dict = {
|
||||
worldState_dogDays: `Canícula`,
|
||||
worldState_dogDaysRewards: `Recompensas de Canícula`,
|
||||
worldState_wolfHunt: `Cacería del Lobo (2025)`,
|
||||
worldState_orphixVenom: `Veneno de Orphix`,
|
||||
worldState_longShadow: `Sombra Prolongada`,
|
||||
worldState_hallowedFlame: `Llama Sagrada`,
|
||||
worldState_hallowedNightmares: `Pesadillas Sagradas`,
|
||||
worldState_hallowedNightmaresRewards: `Recompensas de Pesadillas Sagradas`,
|
||||
worldState_proxyRebellion: `Rebelión Proxy`,
|
||||
worldState_proxyRebellionRewards: `Recompensas de Rebelión Proxy`,
|
||||
worldState_bellyOfTheBeast: `Vientre de la Bestia`,
|
||||
worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`,
|
||||
worldState_eightClaw: `Octava Garra`,
|
||||
worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
|
||||
worldState_from_year: `de |YEAR|`,
|
||||
worldState_pre_year: `antes de |YEAR|`,
|
||||
worldState_incompatibleWith: `No compatible con:`,
|
||||
@ -308,8 +303,7 @@ dict = {
|
||||
worldState_varziaFullyStocked: `Varzia con stock completo`,
|
||||
worldState_varziaOverride: `Cambio en rotación de Varzia`,
|
||||
|
||||
import_importNote: `[UNTRANSLATED] You can provide a full or partial <code>inventory.php</code> or <code>getShip.php</code> response (client representation) here.`,
|
||||
import_importNote2: `Todos los campos compatibles con el importador <b>serán sobrescritos</b> en tu cuenta.`,
|
||||
import_importNote: `Puedes proporcionar una respuesta de inventario completa o parcial (representación del cliente) aquí. Todos los campos compatibles con el importador <b>serán sobrescritos</b> en tu cuenta.`,
|
||||
import_submit: `Enviar`,
|
||||
import_samples: `Muestras:`,
|
||||
import_samples_maxFocus: `Todas las escuelas de enfoque al máximo`,
|
||||
|
@ -251,17 +251,12 @@ dict = {
|
||||
worldState_dogDays: `Bataille d'Eau`,
|
||||
worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
|
||||
worldState_wolfHunt: `Chasse au Loup (2025)`,
|
||||
worldState_orphixVenom: `Venin Orphix`,
|
||||
worldState_longShadow: `La Propagation des Ombres`,
|
||||
worldState_hallowedFlame: `Flamme Hantée`,
|
||||
worldState_hallowedNightmares: `Cauchemars Hantés`,
|
||||
worldState_hallowedNightmaresRewards: `[UNTRANSLATED] Hallowed Nightmares Rewards`,
|
||||
worldState_proxyRebellion: `Rébellion Proxy`,
|
||||
worldState_proxyRebellionRewards: `[UNTRANSLATED] Proxy Rebellion Rewards`,
|
||||
worldState_bellyOfTheBeast: `Ventre de la Bête`,
|
||||
worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`,
|
||||
worldState_eightClaw: `Huitième Griffe`,
|
||||
worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
|
||||
worldState_from_year: `[UNTRANSLATED] from |YEAR|`,
|
||||
worldState_pre_year: `[UNTRANSLATED] pre |YEAR|`,
|
||||
worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`,
|
||||
@ -308,8 +303,7 @@ dict = {
|
||||
worldState_varziaFullyStocked: `Stock de Varzia au max`,
|
||||
worldState_varziaOverride: `Rotation de Varzia`,
|
||||
|
||||
import_importNote: `[UNTRANSLATED] You can provide a full or partial <code>inventory.php</code> or <code>getShip.php</code> response (client representation) here.`,
|
||||
import_importNote2: `[UNTRANSLATED] All fields that are supported by the importer <b>will be overwritten</b> in your account.`,
|
||||
import_importNote: `Import manuel. Toutes les modifcations supportées par l'inventaire <b>écraseront celles présentes dans la base de données</b>.`,
|
||||
import_submit: `Soumettre`,
|
||||
import_samples: `Échantillons :`,
|
||||
import_samples_maxFocus: `Toutes les écoles de focus au rang max`,
|
||||
|
@ -25,12 +25,12 @@ dict = {
|
||||
code_traumaticPeculiar: `Травмирующая Странность`,
|
||||
code_starter: `|MOD| (Повреждённый)`,
|
||||
code_badItem: `(Самозванец)`,
|
||||
code_maxRank: `Макс. ранг`,
|
||||
code_maxRank: `Максимальный ранг`,
|
||||
code_rename: `Переименовать`,
|
||||
code_renamePrompt: `Введите новое имя:`,
|
||||
code_remove: `Удалить`,
|
||||
code_addItemsConfirm: `Вы уверены, что хотите добавить |COUNT| предметов на ваш аккаунт?`,
|
||||
code_succRankUp: `Ранг успешно повышен.`,
|
||||
code_succRankUp: `Ранг успешно повышен`,
|
||||
code_noEquipmentToRankUp: `Нет снаряжения для повышения ранга.`,
|
||||
code_succAdded: `Успешно добавлено.`,
|
||||
code_succRemoved: `Успешно удалено.`,
|
||||
@ -39,11 +39,11 @@ dict = {
|
||||
code_rerollsNumber: `Количество рероллов`,
|
||||
code_viewStats: `Просмотр характеристики`,
|
||||
code_rank: `Ранг`,
|
||||
code_rankUp: `Повысить ранг`,
|
||||
code_rankDown: `Понизить ранг`,
|
||||
code_rankUp: `Повысить Ранг`,
|
||||
code_rankDown: `Понизить Ранг`,
|
||||
code_count: `Количество`,
|
||||
code_focusAllUnlocked: `Все школы Фокуса уже разблокированы.`,
|
||||
code_focusUnlocked: `Разблокировано |COUNT| новых школ Фокуса! Для отображения изменений в игре потребуется обновление инвентаря. Посещение навигации — самый простой способ этого добиться.`,
|
||||
code_focusAllUnlocked: `Все школы фокуса уже разблокированы.`,
|
||||
code_focusUnlocked: `Разблокировано |COUNT| новых школ фокуса! Для отображения изменений в игре потребуется обновление инвентаря. Посещение навигации — самый простой способ этого добиться.`,
|
||||
code_addModsConfirm: `Вы уверены, что хотите добавить |COUNT| модов на ваш аккаунт?`,
|
||||
code_succImport: `Успешно импортировано.`,
|
||||
code_succRelog: `Готово. Обратите внимание, что вам нужно будет перезайти, чтобы увидеть изменения в игре.`,
|
||||
@ -83,7 +83,7 @@ dict = {
|
||||
inventory_pistols: `Вторичное оружие`,
|
||||
inventory_melee: `Оружие ближнего боя`,
|
||||
inventory_spaceSuits: `Арчвинги`,
|
||||
inventory_spaceGuns: `Оружие Арчвинга`,
|
||||
inventory_spaceGuns: `Оружие арчвинга`,
|
||||
inventory_spaceMelee: `Оружие ближнего боя арчвинга`,
|
||||
inventory_mechSuits: `Некрамехи`,
|
||||
inventory_sentinels: `Стражи`,
|
||||
@ -94,21 +94,21 @@ dict = {
|
||||
inventory_kubrowPets: `Звери`,
|
||||
inventory_evolutionProgress: `Прогресс эволюции Инкарнонов`,
|
||||
inventory_Boosters: `Бустеры`,
|
||||
inventory_bulkAddSuits: `Добавить отсутствующие Варфреймы`,
|
||||
inventory_bulkAddSuits: `Добавить отсутствующие варфреймы`,
|
||||
inventory_bulkAddWeapons: `Добавить отсутствующее оружие`,
|
||||
inventory_bulkAddSpaceSuits: `Добавить отсутствующие Арчвинги`,
|
||||
inventory_bulkAddSpaceWeapons: `Добавить отсутствующее оружие Арчвингов`,
|
||||
inventory_bulkAddSentinels: `Добавить отсутствующих Стражей`,
|
||||
inventory_bulkAddSentinelWeapons: `Добавить отсутствующее оружие Стражей`,
|
||||
inventory_bulkAddSpaceSuits: `Добавить отсутствующие арчвинги`,
|
||||
inventory_bulkAddSpaceWeapons: `Добавить отсутствующее оружие арчвингов`,
|
||||
inventory_bulkAddSentinels: `Добавить отсутствующих стражей`,
|
||||
inventory_bulkAddSentinelWeapons: `Добавить отсутствующее оружие стражей`,
|
||||
inventory_bulkAddEvolutionProgress: `Добавить отсутствующий прогресс эволюции Инкарнонов`,
|
||||
inventory_bulkRankUpSuits: `Макс. ранг всех Варфреймов`,
|
||||
inventory_bulkRankUpWeapons: `Макс. ранг всего оружия`,
|
||||
inventory_bulkRankUpSpaceSuits: `Макс. ранг всех Арчвингов`,
|
||||
inventory_bulkRankUpSpaceWeapons: `Макс. ранг всего оружия Арчвингов`,
|
||||
inventory_bulkRankUpSentinels: `Макс. ранг всех Стражей`,
|
||||
inventory_bulkRankUpSentinelWeapons: `Макс. ранг всего оружия Стражей`,
|
||||
inventory_bulkRankUpEvolutionProgress: `Макс. ранг всех эволюций Инкарнонов`,
|
||||
inventory_maxPlexus: `Макс. ранг Плексуса`,
|
||||
inventory_bulkRankUpSuits: `Максимальный ранг всех варфреймов`,
|
||||
inventory_bulkRankUpWeapons: `Максимальный ранг всего оружия`,
|
||||
inventory_bulkRankUpSpaceSuits: `Максимальный ранг всех арчвингов`,
|
||||
inventory_bulkRankUpSpaceWeapons: `Максимальный ранг всего оружия арчвингов`,
|
||||
inventory_bulkRankUpSentinels: `Максимальный ранг всех стражей`,
|
||||
inventory_bulkRankUpSentinelWeapons: `Максимальный ранг всего оружия стражей`,
|
||||
inventory_bulkRankUpEvolutionProgress: `Максимальный ранг всех эволюций Инкарнонов`,
|
||||
inventory_maxPlexus: `Максимальный ранг Плексуса`,
|
||||
|
||||
quests_list: `Квесты`,
|
||||
quests_completeAll: `Завершить все квесты`,
|
||||
@ -121,53 +121,53 @@ dict = {
|
||||
currency_PrimeTokens: `Королевские Айя`,
|
||||
currency_owned: `У тебя |COUNT|.`,
|
||||
|
||||
detailedView_archonShardsLabel: `Ячейки осколков Архонта`,
|
||||
detailedView_archonShardsLabel: `Ячейки осколков архонта`,
|
||||
detailedView_archonShardsDescription: `Вы можете использовать эти неограниченные ячейки для установки множества улучшений.`,
|
||||
detailedView_archonShardsDescription2: `Обратите внимание: каждый осколок Архонта применяется с задержкой при загрузке.`,
|
||||
detailedView_archonShardsDescription2: `Обратите внимание: каждый осколок архонта применяется с задержкой при загрузке.`,
|
||||
detailedView_valenceBonusLabel: `Бонус Валентности`,
|
||||
detailedView_valenceBonusDescription: `Вы можете установить или убрать бонус Валентности с вашего оружия.`,
|
||||
detailedView_modularPartsLabel: `Изменить модульные части`,
|
||||
detailedView_valenceBonusDescription: `Вы можете установить или убрать бонус валентности с вашего оружия.`,
|
||||
detailedView_modularPartsLabel: `Изменить Модульные Части`,
|
||||
detailedView_suitInvigorationLabel: `Воодушевление Варфрейма`,
|
||||
detailedView_loadoutLabel: `Конфигурации`,
|
||||
|
||||
invigorations_offensive_AbilityStrength: `+200% к силе способностей.`,
|
||||
invigorations_offensive_AbilityRange: `+100% к зоне поражения способностей.`,
|
||||
invigorations_offensive_AbilityDuration: `+100% к длительности способностей.`,
|
||||
invigorations_offensive_MeleeDamage: `+250% к урону оружия ближнего боя.`,
|
||||
invigorations_offensive_PrimaryDamage: `+250% к урону основного оружия.`,
|
||||
invigorations_offensive_SecondaryDamage: `+250% к урону вторичного оружия.`,
|
||||
invigorations_offensive_PrimaryCritChance: `+200% к шансу крит. урона для основного оружия.`,
|
||||
invigorations_offensive_SecondaryCritChance: `+200% к шансу крит. урона для вторичного оружия.`,
|
||||
invigorations_offensive_MeleeCritChance: `+200% у шансу крит. урона для оружия ближнего боя.`,
|
||||
invigorations_offensive_AbilityStrength: `+200% Сила Способностей`,
|
||||
invigorations_offensive_AbilityRange: `+100% Радиус Способностей`,
|
||||
invigorations_offensive_AbilityDuration: `+100% Длительность Способностей`,
|
||||
invigorations_offensive_MeleeDamage: `+250% Урон Ближнего Боя`,
|
||||
invigorations_offensive_PrimaryDamage: `+250% Урон Основного Оружия`,
|
||||
invigorations_offensive_SecondaryDamage: `+250% Урон Вторичного Оружия`,
|
||||
invigorations_offensive_PrimaryCritChance: `+200% Шанс Критического Урона Основного Оружия`,
|
||||
invigorations_offensive_SecondaryCritChance: `+200% Шанс Критического Урона Вторичного Оружия`,
|
||||
invigorations_offensive_MeleeCritChance: `+200% Шанс Критического Урона Ближнего Боя`,
|
||||
|
||||
invigorations_utility_AbilityEfficiency: `+75% к энергоэффективности способностей.`,
|
||||
invigorations_utility_SprintSpeed: `+75% к скорости бега.`,
|
||||
invigorations_utility_ParkourVelocity: `+75% к скорости паркура.`,
|
||||
invigorations_utility_HealthMax: `+1000 к здоровью.`,
|
||||
invigorations_utility_EnergyMax: `+200% к макс. запасу энергии.`,
|
||||
invigorations_utility_StatusImmune: `Иммунитет к статусным эффектам.`,
|
||||
invigorations_utility_ReloadSpeed: `+75% к скорости перезарядки.`,
|
||||
invigorations_utility_HealthRegen: `+25 к регенерации здоровья в секунду.`,
|
||||
invigorations_utility_ArmorMax: `+1000 к брони.`,
|
||||
invigorations_utility_Jumps: `+5 сбросов прыжка.`,
|
||||
invigorations_utility_EnergyRegen: `+2 к регенерации энергии в секунду.`,
|
||||
invigorations_utility_AbilityEfficiency: `+75% Энергоэффективность Способностей`,
|
||||
invigorations_utility_SprintSpeed: `+75% Скорость Бега`,
|
||||
invigorations_utility_ParkourVelocity: `+75% Скорость Паркура`,
|
||||
invigorations_utility_HealthMax: `+1000 Здоровья`,
|
||||
invigorations_utility_EnergyMax: `+200% Максимум Энергии`,
|
||||
invigorations_utility_StatusImmune: `Иммунитет к Эффектам Статуса`,
|
||||
invigorations_utility_ReloadSpeed: `+75% Скорость Перезарядки`,
|
||||
invigorations_utility_HealthRegen: `+25 Здоровья в секунду`,
|
||||
invigorations_utility_ArmorMax: `+1000 Брони`,
|
||||
invigorations_utility_Jumps: `+5 Сбросов Прыжков`,
|
||||
invigorations_utility_EnergyRegen: `+2 Энергии в секунду`,
|
||||
|
||||
invigorations_offensiveLabel: `Атакующее улучшение`,
|
||||
invigorations_defensiveLabel: `Вспомогательное улучшение`,
|
||||
invigorations_offensiveLabel: `Атакующее Улучшение`,
|
||||
invigorations_defensiveLabel: `Вспомогательное Улучшение`,
|
||||
invigorations_expiryLabel: `Срок действия Воодушевления (необязательно)`,
|
||||
|
||||
abilityOverride_label: `Переопределение способности`,
|
||||
abilityOverride_onSlot: `в ячейке`,
|
||||
|
||||
mods_addRiven: `Добавить мод Разлома`,
|
||||
mods_addRiven: `Добавить Мод Разлома`,
|
||||
mods_fingerprint: `Отпечаток`,
|
||||
mods_fingerprintHelp: `Нужна помощь с отпечатком?`,
|
||||
mods_rivens: `Моды Разлома`,
|
||||
mods_mods: `Моды`,
|
||||
mods_addMax: `Добавить макс. улучшенный`,
|
||||
mods_addMax: `Добавить максимально улучшенный`,
|
||||
mods_addMissingUnrankedMods: `Добавить недостающие моды без ранга`,
|
||||
mods_removeUnranked: `Удалить моды без ранга`,
|
||||
mods_addMissingMaxRankMods: `Добавить недостающие моды макс. ранга`,
|
||||
mods_addMissingMaxRankMods: `Добавить недостающие моды максимального ранга`,
|
||||
cheats_administratorRequirement: `Вы должны быть администратором для использования этой функции. Чтобы стать администратором, добавьте <code>\"|DISPLAYNAME|\"</code> в <code>administratorNames</code> в config.json.`,
|
||||
cheats_server: `Сервер`,
|
||||
cheats_skipTutorial: `Пропустить обучение`,
|
||||
@ -175,14 +175,14 @@ dict = {
|
||||
cheats_unlockAllScans: `Разблокировать все сканирования`,
|
||||
cheats_unlockAllMissions: `Разблокировать все миссии`,
|
||||
cheats_unlockAllMissions_ok: `Успех. Пожалуйста, обратите внимание, что вам нужно будет войти в Додзё/Реле или перезайти, чтобы клиент обновил звездную карту.`,
|
||||
cheats_infiniteCredits: `Бесконечные Кредиты`,
|
||||
cheats_infinitePlatinum: `Бесконечная Платина`,
|
||||
cheats_infiniteEndo: `Бесконечное Эндо`,
|
||||
cheats_infiniteCredits: `Бесконечные кредиты`,
|
||||
cheats_infinitePlatinum: `Бесконечная платина`,
|
||||
cheats_infiniteEndo: `Бесконечное эндо`,
|
||||
cheats_infiniteRegalAya: `Бесконечная Королевская Айя`,
|
||||
cheats_infiniteHelminthMaterials: `Бесконечные секреции Гельминта`,
|
||||
cheats_infiniteHelminthMaterials: `Бесконечные Секреции Гельминта`,
|
||||
cheats_claimingBlueprintRefundsIngredients: `Возврат ингредиентов чертежей`,
|
||||
cheats_dontSubtractPurchaseCreditCost: `Не вычитать стоимость Кредитов при покупке`,
|
||||
cheats_dontSubtractPurchasePlatinumCost: `Не вычитать стоимость Платины при покупке`,
|
||||
cheats_dontSubtractPurchaseCreditCost: `Не вычитать стоимость кредитов при покупке`,
|
||||
cheats_dontSubtractPurchasePlatinumCost: `Не вычитать стоимость платины при покупке`,
|
||||
cheats_dontSubtractPurchaseItemCost: `Не вычитать стоимость предметов при покупке`,
|
||||
cheats_dontSubtractPurchaseStandingCost: `Не вычитать стоимость репутации при покупке`,
|
||||
cheats_dontSubtractVoidTraces: `Не вычитать количество Отголосков Бездны`,
|
||||
@ -196,10 +196,10 @@ dict = {
|
||||
cheats_universalPolarityEverywhere: `Универсальная полярность везде`,
|
||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Реакторы/Катализаторы орокин везде`,
|
||||
cheats_unlockExilusEverywhere: `Адаптеры Эксилус везде`,
|
||||
cheats_unlockArcanesEverywhere: `Адаптеры для Мистификаторов везде`,
|
||||
cheats_unlockArcanesEverywhere: `Адаптеры для мистификаторов везде`,
|
||||
cheats_noDailyStandingLimits: `Без ежедневных лимитов репутации`,
|
||||
cheats_noDailyFocusLimit: `Без ежедневных лимитов Фокуса`,
|
||||
cheats_noArgonCrystalDecay: `Без распада Аргоновых кристаллов`,
|
||||
cheats_noDailyFocusLimit: `Без ежедневных лимитов фокуса`,
|
||||
cheats_noArgonCrystalDecay: `Без распада аргоновых кристаллов`,
|
||||
cheats_noMasteryRankUpCooldown: `Повышение ранга мастерства без кулдауна`,
|
||||
cheats_noVendorPurchaseLimits: `Отсутствие лимитов на покупки у торговцев`,
|
||||
cheats_noDeathMarks: `Без меток смерти`,
|
||||
@ -209,28 +209,28 @@ dict = {
|
||||
cheats_baroFullyStocked: `Баро полностью укомплектован`,
|
||||
cheats_syndicateMissionsRepeatable: `Повторять миссии синдиката`,
|
||||
cheats_unlockAllProfitTakerStages: `Разблокировать все этапы Сферы извлечения прибыли`,
|
||||
cheats_instantFinishRivenChallenge: `Мгновенное завершение испытания мода Разлома`,
|
||||
cheats_instantResourceExtractorDrones: `Мгновенно добывающие Дроны-сборщики`,
|
||||
cheats_noResourceExtractorDronesDamage: `Без урона по Дронам-сборщикам`,
|
||||
cheats_skipClanKeyCrafting: `Пропустить создание кланового ключа`,
|
||||
cheats_noDojoRoomBuildStage: `Мгновенное строительство комнат Додзё`,
|
||||
cheats_noDojoDecoBuildStage: `Мгновенное строительство декораций Додзё`,
|
||||
cheats_fastDojoRoomDestruction: `Мгновенные уничтожение комнат Додзё`,
|
||||
cheats_noDojoResearchCosts: `Бесплатные исследование Додзё`,
|
||||
cheats_noDojoResearchTime: `Мгновенные исследование Додзё`,
|
||||
cheats_fastClanAscension: `Мгновенное вознесение клана`,
|
||||
cheats_instantFinishRivenChallenge: `Мгновенное завершение испытания Мода разлома`,
|
||||
cheats_instantResourceExtractorDrones: `Мгновенно добывающие дроны-сборщики`,
|
||||
cheats_noResourceExtractorDronesDamage: `Без урона по дронам-сборщикам`,
|
||||
cheats_skipClanKeyCrafting: `Пропустить крафт кланового ключа`,
|
||||
cheats_noDojoRoomBuildStage: `Мгновенное строительство Комнат Додзё`,
|
||||
cheats_noDojoDecoBuildStage: `Мгновенное строительство Декораций Додзё`,
|
||||
cheats_fastDojoRoomDestruction: `Мгновенные Уничтожение Комнат Додзё`,
|
||||
cheats_noDojoResearchCosts: `Бесплатные Исследование Додзё`,
|
||||
cheats_noDojoResearchTime: `Мгновенные Исследование Додзё`,
|
||||
cheats_fastClanAscension: `Мгновенное Вознесение Клана`,
|
||||
cheats_missionsCanGiveAllRelics: `Миссии могут давать все реликвии`,
|
||||
cheats_exceptionalRelicsAlwaysGiveBronzeReward: `Необычные реликвии всегда дают бронзовую награду`,
|
||||
cheats_flawlessRelicsAlwaysGiveSilverReward: `Бесподобные реликвии всегда дают серебряную награду`,
|
||||
cheats_radiantRelicsAlwaysGiveGoldReward: `Сияющие реликвии всегда дают золотую награду`,
|
||||
cheats_unlockAllSimarisResearchEntries: `Разблокировать все записи исследований Симэриса`,
|
||||
cheats_disableDailyTribute: `Отключить ежедневные награды`,
|
||||
cheats_disableDailyTribute: `Отключить Ежедневные награды`,
|
||||
cheats_spoofMasteryRank: `Поддельный ранг мастерства (-1 для отключения)`,
|
||||
cheats_relicRewardItemCountMultiplier: `Мультипликатор количества предметов награды реликвии`,
|
||||
cheats_nightwaveStandingMultiplier: `Мультипликатор репутации Ночной волны`,
|
||||
cheats_save: `Сохранить`,
|
||||
cheats_account: `Аккаунт`,
|
||||
cheats_unlockAllFocusSchools: `Разблокировать все школы Фокуса`,
|
||||
cheats_unlockAllFocusSchools: `Разблокировать все школы фокуса`,
|
||||
cheats_helminthUnlockAll: `Полностью улучшить Гельминта`,
|
||||
cheats_addMissingSubsumedAbilities: `Добавить отсутствующие поглощённые способности`,
|
||||
cheats_intrinsicsUnlockAll: `Полностью улучшить Модуляры`,
|
||||
@ -239,9 +239,9 @@ dict = {
|
||||
cheats_markAllAsRead: `Пометить все входящие как прочитанные`,
|
||||
|
||||
worldState: `Состояние мира`,
|
||||
worldState_creditBoost: `Глобальный бустер Кредитов`,
|
||||
worldState_affinityBoost: `Глобальный бустер Синтеза`,
|
||||
worldState_resourceBoost: `Глобальный бустер Ресурсов`,
|
||||
worldState_creditBoost: `Глобальный бустер кредитов`,
|
||||
worldState_affinityBoost: `Глобальный бустер синтеза`,
|
||||
worldState_resourceBoost: `Глобальный бустер ресурсов`,
|
||||
worldState_tennoLiveRelay: `Реле TennoLive`,
|
||||
worldState_baroTennoConRelay: `Реле Баро TennoCon`,
|
||||
worldState_starDays: `Звёздные дни`,
|
||||
@ -251,17 +251,12 @@ dict = {
|
||||
worldState_dogDays: `Знойные дни`,
|
||||
worldState_dogDaysRewards: `Награды Знойных дней`,
|
||||
worldState_wolfHunt: `Волчья Охота (2025)`,
|
||||
worldState_orphixVenom: `Яд Орфикса`,
|
||||
worldState_longShadow: `Длинная Тень`,
|
||||
worldState_hallowedFlame: `Священное пламя`,
|
||||
worldState_hallowedNightmares: `Священные кошмары`,
|
||||
worldState_hallowedNightmaresRewards: `Награды Священных кошмаров`,
|
||||
worldState_proxyRebellion: `Восстание роботов`,
|
||||
worldState_proxyRebellionRewards: `Награды Восстания роботов`,
|
||||
worldState_bellyOfTheBeast: `Чрево зверя`,
|
||||
worldState_bellyOfTheBeastProgressOverride: `Прогресс Чрева зверя`,
|
||||
worldState_eightClaw: `Восемь когтей`,
|
||||
worldState_eightClawProgressOverride: `Прогресс Восьми когтей`,
|
||||
worldState_hallowedNightmares: `Священные Кошмары`,
|
||||
worldState_hallowedNightmaresRewards: `Награды Священных Кошмаров`,
|
||||
worldState_proxyRebellion: `Восстание Роботов`,
|
||||
worldState_proxyRebellionRewards: `Награды Восстания Роботов`,
|
||||
worldState_from_year: `из |YEAR|`,
|
||||
worldState_pre_year: `до |YEAR|`,
|
||||
worldState_incompatibleWith: `Несовместимо с:`,
|
||||
@ -304,74 +299,73 @@ dict = {
|
||||
worldState_allAtOnceNormal: `Все сразу, в обычном режиме`,
|
||||
worldState_allAtOnceSteelPath: `Все сразу, в режиме Стального Пути`,
|
||||
worldState_theCircuitOverride: `Типы миссий в подземелье Дувири`,
|
||||
worldState_darvoStockMultiplier: `Множитель запасов Дарво`,
|
||||
worldState_varziaFullyStocked: `Полный ассортимент Варзии`,
|
||||
worldState_varziaOverride: `Изменение ротации Варзии`,
|
||||
worldState_darvoStockMultiplier: `Множитель Запасов Дарво`,
|
||||
worldState_varziaFullyStocked: `Полный Ассортимент Варзии`,
|
||||
worldState_varziaOverride: `Изменение Ротации Варзии`,
|
||||
|
||||
import_importNote: `Вы можете загрузить полный или частичный ответ <code>inventory.php</code> или <code>getShip.php</code> (клиентское представление) здесь. `,
|
||||
import_importNote2: `Все поддерживаемые поля <b>будут перезаписаны</b> в вашем аккаунте.`,
|
||||
import_importNote: `Вы можете загрузить полный или частичный ответ инвентаря (клиентское представление) здесь. Все поддерживаемые поля <b>будут перезаписаны</b> в вашем аккаунте.`,
|
||||
import_submit: `Отправить`,
|
||||
import_samples: `Пример:`,
|
||||
import_samples_maxFocus: `Все школы Фокуса макс. уровня`,
|
||||
import_samples_maxFocus: `Все школы Фокуса максимального уровня`,
|
||||
|
||||
upgrade_Equilibrium: `Подбор сфер здоровья даёт +|VAL|% энергии. Подбор сфер энергии даёт +|VAL|% здоровья.`,
|
||||
upgrade_MeleeCritDamage: `+|VAL|% к крит. урону в ближнем бою.`,
|
||||
upgrade_PrimaryStatusChance: `+|VAL|% к шансу статуса основного оружия.`,
|
||||
upgrade_SecondaryCritChance: `+|VAL|% к шансу крит. урона от вторичного оружия.`,
|
||||
upgrade_WarframeAbilityDuration: `+|VAL|% к длительности способностей.`,
|
||||
upgrade_WarframeAbilityStrength: `+|VAL|% к силе способностей.`,
|
||||
upgrade_WarframeArmorMax: `+|VAL| к броне.`,
|
||||
upgrade_WarframeBlastProc: `Регенерирует +|VAL| щитов, когда вы убиваете врага, наложив статус Взрыва.`,
|
||||
upgrade_WarframeCastingSpeed: `+|VAL|% к скорости применения способностей.`,
|
||||
upgrade_WarframeCorrosiveDamageBoost: `Даёт +|VAL|% урона от сопсобнстй по врагам, находящимся под действием статуса Коррозии.`,
|
||||
upgrade_WarframeCorrosiveStack: `Увеличить макс. количество стаков статуса Коррози на +|VAL|.`,
|
||||
upgrade_WarframeCritDamageBoost: `Даёт +|VAL|% крит. урона в ближнем бою. Когда макс. энергия превышает 500, увеличение урона удваивается.`,
|
||||
upgrade_WarframeElectricDamage: `Даёт +|VAL1|% Электрического урона основному оружию. Получите дополнительно +|VAL2|% за каждый экипированный багровый, лазурный или фиолетовый осколок архонта (Комбинируется с модами).`,
|
||||
upgrade_WarframeElectricDamageBoost: `Даёт +|VAL|% урон аот спсобностей по врагам, находящимся под действием статуса Электричества.`,
|
||||
upgrade_WarframeEnergyMax: `+|VAL| к запасу энергии.`,
|
||||
upgrade_WarframeGlobeEffectEnergy: `+|VAL|% к эффективности сфер энергии.`,
|
||||
upgrade_WarframeGlobeEffectHealth: `+|VAL|% к эффективности сфер здоровья.`,
|
||||
upgrade_WarframeHealthMax: `+|VAL| к здоровью.`,
|
||||
upgrade_WarframeHPBoostFromImpact: `Даёт +|VAL1| здоровья за каждого врага, убитого с помощью Взрывного урона. Макс. |VAL2| здоровья.`,
|
||||
upgrade_WarframeParkourVelocity: `+|VAL|% к скорости паркура.`,
|
||||
upgrade_WarframeRadiationDamageBoost: `Даёт +|VAL|% урона от способностей по врагам, находящимся под действием статуса Радиации.`,
|
||||
upgrade_WarframeHealthRegen: `+|VAL| к восстановлению здоровья в секунду.`,
|
||||
upgrade_WarframeShieldMax: `+|VAL| к мощности щитов.`,
|
||||
upgrade_WarframeStartingEnergy: `+|VAL|% к макс. энергии при появлении.`,
|
||||
upgrade_WarframeToxinDamage: `Статусный эффект Токсина наносит на +|VAL|% больше урона.`,
|
||||
upgrade_WarframeToxinHeal: `Восстанавливает +|VAL| здоровья кадый раз, когда враги получают урон от эффекта статуса Токсина.`,
|
||||
upgrade_WeaponCritBoostFromHeat: `Увеличивает шанс крит. урона вторичным оружием на |VAL1|% каждый раз, когда вы убиваете врага, назодящегося под действием статуса Огня. Макс.: |VAL2|%.`,
|
||||
upgrade_AvatarAbilityRange: `+7.5% к зоне поражения способностей.`,
|
||||
upgrade_AvatarAbilityEfficiency: `+5% к энергоэффективности способностей.`,
|
||||
upgrade_AvatarEnergyRegen: `+0.5 к регенерации энергии в секунду.`,
|
||||
upgrade_AvatarEnemyRadar: `+5м обнаружение врагов.`,
|
||||
upgrade_AvatarLootRadar: `+7м к радиусу обнаружения добычи.`,
|
||||
upgrade_WeaponAmmoMax: `+15% макс. боеприпасов.`,
|
||||
upgrade_EnemyArmorReductionAura: `Враги теряют -3% брони.`,
|
||||
upgrade_OnExecutionAmmo: `Убийство Милосердием пополняет магазины основного и вторичного оружия на 100%.`,
|
||||
upgrade_OnExecutionHealthDrop: `+100% шанс выпадения сферы здоровья при убийстве Милосердием.`,
|
||||
upgrade_OnExecutionEnergyDrop: `+50% шанс выпадения сферы энергии при убийстве Милосердием.`,
|
||||
upgrade_OnFailHackReset: `+50% шанс доволнительной попытки взлома в случае неудачи.`,
|
||||
upgrade_DamageReductionOnHack: `Уменьшает урон на 75% во время взлома.`,
|
||||
upgrade_OnExecutionReviveCompanion: `Убийства Милосердием уменьшают время восстановления компаньона на 15 секунд.`,
|
||||
upgrade_OnExecutionParkourSpeed: `+60% к скорости паркура после убийства Милосердием на 15 секунд.`,
|
||||
upgrade_AvatarTimeLimitIncrease: `+8 секунд на взлом.`,
|
||||
upgrade_ElectrifyOnHack: `Шокирует врагов в радиусе 20м во время взлома.`,
|
||||
upgrade_OnExecutionTerrify: `50% шанс, что при убийстве Милосердием враги в радиусе 15м будут параллизованы от страха на 8 секунд.`,
|
||||
upgrade_OnHackLockers: `Открывает 5 контейнеров в радиусе 20м после взлома.`,
|
||||
upgrade_OnExecutionBlind: `Ослепляет врагов в радиусе 18м при убийстве Милосердием.`,
|
||||
upgrade_OnExecutionDrainPower: `Следующая способность, применённая после убийства Милосердием, получает +50% к силе способности.`,
|
||||
upgrade_OnHackSprintSpeed: `+75% к скорости бега после взлома на 15 секунд.`,
|
||||
upgrade_SwiftExecute: `Увеличивает скорость добиваний Милосердием на 50%.`,
|
||||
upgrade_OnHackInvis: `Невидимсть на 15 секунд после взлома.`,
|
||||
upgrade_Equilibrium: `+|VAL|% Энергия от подбирания здоровья, +|VAL|% Здоровье от подбирания энергии`,
|
||||
upgrade_MeleeCritDamage: `+|VAL|% Критический урон ближнего боя`,
|
||||
upgrade_PrimaryStatusChance: `+|VAL|% Шанс наложения статуса основным оружием`,
|
||||
upgrade_SecondaryCritChance: `+|VAL|% Шанс критического удара вторичным оружием`,
|
||||
upgrade_WarframeAbilityDuration: `+|VAL|% Длительность способностей`,
|
||||
upgrade_WarframeAbilityStrength: `+|VAL|% Сила способностей`,
|
||||
upgrade_WarframeArmorMax: `+|VAL| Броня`,
|
||||
upgrade_WarframeBlastProc: `+|VAL| Щиты при убийстве с Взрывным Уроном`,
|
||||
upgrade_WarframeCastingSpeed: `+|VAL|% Скорость Применения Способностей`,
|
||||
upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% Урон Способностей по врагам, пораженным Коррозией`,
|
||||
upgrade_WarframeCorrosiveStack: `Увеличить макс. стаки Коррозии на +|VAL|`,
|
||||
upgrade_WarframeCritDamageBoost: `+|VAL|% Критический Урон Ближнего Боя (Удваивается при 500 Энергии)`,
|
||||
upgrade_WarframeElectricDamage: `+|VAL1|% Урон Электричеством Основным Оружием (+|VAL2|% за каждый дополнительный Осколок)`,
|
||||
upgrade_WarframeElectricDamageBoost: `+|VAL|% Урон Способностей по врагам, пораженным Электричеством`,
|
||||
upgrade_WarframeEnergyMax: `+|VAL| Макс. Энергия`,
|
||||
upgrade_WarframeGlobeEffectEnergy: `+|VAL|% Эффективность сфер Энергии`,
|
||||
upgrade_WarframeGlobeEffectHealth: `+|VAL|% Эффективность сфер Здоровья`,
|
||||
upgrade_WarframeHealthMax: `+|VAL| Макс. Здоровье`,
|
||||
upgrade_WarframeHPBoostFromImpact: `+|VAL1| Здоровья при убийстве с Взрывным Уроном (Макс. |VAL2| Здоровья)`,
|
||||
upgrade_WarframeParkourVelocity: `+|VAL|% Скорость Паркура`,
|
||||
upgrade_WarframeRadiationDamageBoost: `+|VAL|% Урон Способностей по врагам, пораженным Радиацией`,
|
||||
upgrade_WarframeHealthRegen: `+|VAL| Здоровья в секунду`,
|
||||
upgrade_WarframeShieldMax: `+|VAL| Щитов`,
|
||||
upgrade_WarframeStartingEnergy: `+|VAL|% Энергии при Спавне`,
|
||||
upgrade_WarframeToxinDamage: `+|VAL|% Урон Токсином`,
|
||||
upgrade_WarframeToxinHeal: `+|VAL| Здоровья при нанесении урона врагам с Токсином`,
|
||||
upgrade_WeaponCritBoostFromHeat: `+|VAL1|% Шанс Критического Удара Вторичным Оружием за каждого убитого врага, пораженного Огнем (Макс. |VAL2|%)`,
|
||||
upgrade_AvatarAbilityRange: `+7.5% Радиус Способностей`,
|
||||
upgrade_AvatarAbilityEfficiency: `+5% Энергоэффективность Способностей`,
|
||||
upgrade_AvatarEnergyRegen: `+0.5 Регенерация Энергии в секунду`,
|
||||
upgrade_AvatarEnemyRadar: `+5m обнаружение врагов`,
|
||||
upgrade_AvatarLootRadar: `+7m обнаружение добычи`,
|
||||
upgrade_WeaponAmmoMax: `+15% Макс. Патронов`,
|
||||
upgrade_EnemyArmorReductionAura: `-3% Броня Врагов`,
|
||||
upgrade_OnExecutionAmmo: `+100% Заполнение Магазина Основного и Вторичного Оружия при убийстве Милосердием`,
|
||||
upgrade_OnExecutionHealthDrop: `+100% Шанс Падения сферы Здоровья при убийстве Милосердием`,
|
||||
upgrade_OnExecutionEnergyDrop: `+50% Шанс Падения сферы Энергии при убийстве Милосердием`,
|
||||
upgrade_OnFailHackReset: `+50% Шанс Повтора Взлома`,
|
||||
upgrade_DamageReductionOnHack: `+75% Уменьшение Урона во время Взлома`,
|
||||
upgrade_OnExecutionReviveCompanion: `Убийства Милосердием уменьшают время восстановления Компаньона на 15 секунд`,
|
||||
upgrade_OnExecutionParkourSpeed: `+60% Скорость Паркура после убийства Милосердием на 15 секунд`,
|
||||
upgrade_AvatarTimeLimitIncrease: `+8 секунд к Взлому`,
|
||||
upgrade_ElectrifyOnHack: `Шокировать врагов в пределах 20 метров во время Взлома`,
|
||||
upgrade_OnExecutionTerrify: `+50% шанс, что враги в пределах 15 метров будут дрожать от страха в течение 8 секунд после убийства Милосердием`,
|
||||
upgrade_OnHackLockers: `Открыть 5 шкафчиков в пределах 20 метров после Взлома`,
|
||||
upgrade_OnExecutionBlind: `Ослепить врагов в пределах 18 метров после убийства Милосердием`,
|
||||
upgrade_OnExecutionDrainPower: `Следующее использование способности получает +50% Силы Способности после убийства Милосердием`,
|
||||
upgrade_OnHackSprintSpeed: `+75% Скорость Бега в течение 15 секунд после Взлома`,
|
||||
upgrade_SwiftExecute: `+50% Скорость Убийства Милосердием`,
|
||||
upgrade_OnHackInvis: `Невидимость в течение 15 секунд после Взлома`,
|
||||
|
||||
damageType_Electricity: `Электрический`,
|
||||
damageType_Fire: `Огненный`,
|
||||
damageType_Freeze: `Холодовой`,
|
||||
damageType_Impact: `Ударный`,
|
||||
damageType_Magnetic: `Магнитный`,
|
||||
damageType_Poison: `Токсичный`,
|
||||
damageType_Radiation: `Радиационный`,
|
||||
damageType_Electricity: `Электричество`,
|
||||
damageType_Fire: `Огонь`,
|
||||
damageType_Freeze: `Холод`,
|
||||
damageType_Impact: `Удар`,
|
||||
damageType_Magnetic: `Магнит`,
|
||||
damageType_Poison: `Токсин`,
|
||||
damageType_Radiation: `Радиация`,
|
||||
|
||||
theme_dark: `Темная тема`,
|
||||
theme_light: `Светлая тема`,
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Ukrainian translation by LoseFace
|
||||
dict = {
|
||||
general_inventoryUpdateNote: `Пам'ятка: Щоб побачити зміни в грі, вам потрібно повторно синхронізувати своє спорядження, наприклад, використовуючи команду /sync завантажувача, відвідавши Доджьо/Реле або перезавантаживши гру.`,
|
||||
general_inventoryUpdateNote: `Пам'ятка: Щоб побачити зміни в грі, вам потрібно повторно синхронізувати свій інвентар, наприклад, використовуючи команду /sync завантажувача, відвідавши Доджьо/Реле або перезавантаживши гру.`,
|
||||
general_addButton: `Добавити`,
|
||||
general_setButton: `Встановити`,
|
||||
general_none: `Відсутній`,
|
||||
@ -11,8 +11,8 @@ dict = {
|
||||
code_regFail: `Не вдалося зареєструватися. Обліковий запис вже існує?`,
|
||||
code_changeNameConfirm: `Яке ім'я ви хочете встановити для свого облікового запису?`,
|
||||
code_deleteAccountConfirm: `Ви впевнені, що хочете видалити обліковий запис |DISPLAYNAME| (|EMAIL|)? Цю дію не можна скасувати.`,
|
||||
code_archgun: `Арк-гармата`,
|
||||
code_melee: `Холодна зброя`,
|
||||
code_archgun: `Арч-Пушка`,
|
||||
code_melee: `Ближній бій`,
|
||||
code_pistol: `Пістолет`,
|
||||
code_rifle: `Гвинтівка`,
|
||||
code_shotgun: `Рушниця`,
|
||||
@ -22,11 +22,11 @@ dict = {
|
||||
code_amp: `Підсилювач`,
|
||||
code_kDrive: `К-Драйв`,
|
||||
code_legendaryCore: `Легендарне ядро`,
|
||||
code_traumaticPeculiar: `Особливе травмування`,
|
||||
code_traumaticPeculiar: `Травмуюча Странність`,
|
||||
code_starter: `|MOD| (Пошкоджений)`,
|
||||
code_badItem: `(Самозванець)`,
|
||||
code_maxRank: `Макс. рівень`,
|
||||
code_rename: `Перейменувати`,
|
||||
code_maxRank: `Максимальний рівень`,
|
||||
code_rename: `Переіменувати`,
|
||||
code_renamePrompt: `Введіть нове ім'я:`,
|
||||
code_remove: `Видалити`,
|
||||
code_addItemsConfirm: `Ви впевнені, що хочете додати |COUNT| предметів на ваш обліковий запис?`,
|
||||
@ -42,15 +42,15 @@ dict = {
|
||||
code_rankUp: `Підвищити рівень`,
|
||||
code_rankDown: `Понизити рівень`,
|
||||
code_count: `Кількість`,
|
||||
code_focusAllUnlocked: `Всі школи Фокусу вже розблоковані.`,
|
||||
code_focusUnlocked: `Розблоковано |COUNT| нових шкіл Фокусу! Для відображення змін в грі знадобиться оновлення спорядження. Відвідування навігації — найпростіший спосіб цього досягти.`,
|
||||
code_focusAllUnlocked: `Всі школи фокуса вже розблоковані.`,
|
||||
code_focusUnlocked: `Розблоковано |COUNT| нових шкіл фокуса! Для відображення змін в грі знадобиться оновлення спорядження. Відвідування навігації — найпростіший спосіб цього досягти.`,
|
||||
code_addModsConfirm: `Ви впевнені, що хочете додати |COUNT| модифікаторів на ваш обліковий запис?`,
|
||||
code_succImport: `Успішно імпортовано.`,
|
||||
code_succRelog: `Готово. Зверніть увагу, що вам потрібно буде перезайти, щоб побачити зміни в грі.`,
|
||||
code_nothingToDo: `Готово. Немає що робити.`,
|
||||
code_gild: `Покращити`,
|
||||
code_moa: `МОА`,
|
||||
code_zanuka: `Гончак`,
|
||||
code_zanuka: `Гончарка`,
|
||||
code_stage: `Етап`,
|
||||
code_complete: `Завершити`,
|
||||
code_nextStage: `Наступний етап`,
|
||||
@ -59,56 +59,56 @@ dict = {
|
||||
code_setInactive: `Зробити пригоду неактивною`,
|
||||
code_completed: `Завершено`,
|
||||
code_active: `Активний`,
|
||||
code_pigment: `Барвник`,
|
||||
code_mature: `Виростити для бою`,
|
||||
code_pigment: `Пігмент`,
|
||||
code_mature: `Підготувати до бою`,
|
||||
code_unmature: `Обернути старіння`,
|
||||
code_succChange: `Успішно змінено.`,
|
||||
code_requiredInvigorationUpgrade: `Ви повинні вибрати як атакуюче, так і допоміжне вдосконалення.`,
|
||||
login_description: `Увійдіть, використовуючи облікові дані OpenWF (ті ж, що й у грі при підключенні до цього серверу).`,
|
||||
code_requiredInvigorationUpgrade: `Ви повинні вибрати як атакуюче, так і допоміжне покращення.`,
|
||||
login_description: `Увійдіть, використовуючи облікові дані OpenWF (ті ж, що й у грі при підключенні до цього сервера).`,
|
||||
login_emailLabel: `Адреса електронної пошти`,
|
||||
login_passwordLabel: `Пароль`,
|
||||
login_loginButton: `Увійти`,
|
||||
login_registerButton: `Зареєструватися`,
|
||||
navbar_logout: `Вийти`,
|
||||
navbar_renameAccount: `Перейменувати обліковий запис`,
|
||||
navbar_renameAccount: `Переіменувати обліковий запис`,
|
||||
navbar_deleteAccount: `Видалити обліковий запис`,
|
||||
navbar_inventory: `Спорядження`,
|
||||
navbar_mods: `Модифікатори`,
|
||||
navbar_mods: `Моди`,
|
||||
navbar_quests: `Пригоди`,
|
||||
navbar_cheats: `Чити`,
|
||||
navbar_import: `Імпорт`,
|
||||
inventory_addItems: `Додати предмети`,
|
||||
inventory_suits: `Ворфрейми`,
|
||||
inventory_longGuns: `Основна зброя`,
|
||||
inventory_pistols: `Допоміжна зброя`,
|
||||
inventory_melee: `Холодна зброя`,
|
||||
inventory_longGuns: `Основне озброєння`,
|
||||
inventory_pistols: `Допоміжне озброєння`,
|
||||
inventory_melee: `Холодне озброєння`,
|
||||
inventory_spaceSuits: `Арквінґи`,
|
||||
inventory_spaceGuns: `Зброя Арквінґів`,
|
||||
inventory_spaceMelee: `Холодна зброя Арквінґів`,
|
||||
inventory_spaceGuns: `Озброєння арквінґів`,
|
||||
inventory_spaceMelee: `Холодне озброєння арквінґів`,
|
||||
inventory_mechSuits: `Некрамехи`,
|
||||
inventory_sentinels: `Вартові`,
|
||||
inventory_sentinelWeapons: `Зброя Вартових`,
|
||||
inventory_sentinelWeapons: `Озброєння вартових`,
|
||||
inventory_operatorAmps: `Підсилювачі`,
|
||||
inventory_hoverboards: `К-Драйви`,
|
||||
inventory_moaPets: `МОА`,
|
||||
inventory_kubrowPets: `Тварини`,
|
||||
inventory_evolutionProgress: `Прогрес еволюції Інкарнонів`,
|
||||
inventory_Boosters: `Посилення`,
|
||||
inventory_bulkAddSuits: `Додати відсутні Ворфрейми`,
|
||||
inventory_bulkAddWeapons: `Додати відсутню зброю`,
|
||||
inventory_bulkAddSpaceSuits: `Додати відсутні Арквінґи`,
|
||||
inventory_bulkAddSpaceWeapons: `Додати відсутню зброю Арквінґів`,
|
||||
inventory_bulkAddSentinels: `Додати відсутніх Вартових`,
|
||||
inventory_bulkAddSentinelWeapons: `Додати відсутню зброю Вартових`,
|
||||
inventory_bulkAddEvolutionProgress: `Додати відсутній прогрес еволюції Інкарнонів`,
|
||||
inventory_bulkRankUpSuits: `Макс. рівень всіх Ворфреймів`,
|
||||
inventory_bulkRankUpWeapons: `Макс. рівень всієї зброї`,
|
||||
inventory_bulkRankUpSpaceSuits: `Макс. рівень всіх Арквінґів`,
|
||||
inventory_bulkRankUpSpaceWeapons: `Макс. рівень всієї зброї Арквінґів`,
|
||||
inventory_bulkRankUpSentinels: `Макс. рівень всіх Вартових`,
|
||||
inventory_bulkRankUpSentinelWeapons: `Макс. рівень всієї зброї Вартових`,
|
||||
inventory_bulkRankUpEvolutionProgress: `Макс. рівень всіх еволюцій Інкарнонів`,
|
||||
inventory_maxPlexus: `Макс. рівень Плексу`,
|
||||
inventory_evolutionProgress: `Прогрес Еволюції Інкарнонов`,
|
||||
inventory_Boosters: `Бустери`,
|
||||
inventory_bulkAddSuits: `Додати відсутні ворфрейми`,
|
||||
inventory_bulkAddWeapons: `Додати відсутнє озброєння`,
|
||||
inventory_bulkAddSpaceSuits: `Додати відсутні арквінґи`,
|
||||
inventory_bulkAddSpaceWeapons: `Додати відсутнє озброєння арквінґів`,
|
||||
inventory_bulkAddSentinels: `Додати відсутніх вартових`,
|
||||
inventory_bulkAddSentinelWeapons: `Додати відсутнє озброєння вартових`,
|
||||
inventory_bulkAddEvolutionProgress: `Додати відсутній прогрес Еволюції Інкарнонов`,
|
||||
inventory_bulkRankUpSuits: `Максимальний рівень всіх ворфреймів`,
|
||||
inventory_bulkRankUpWeapons: `Максимальний рівень всього озброєння`,
|
||||
inventory_bulkRankUpSpaceSuits: `Максимальний рівень всіх арквінґів`,
|
||||
inventory_bulkRankUpSpaceWeapons: `Максимальний рівень всього озброєння арквінґів`,
|
||||
inventory_bulkRankUpSentinels: `Максимальний рівень всіх вартових`,
|
||||
inventory_bulkRankUpSentinelWeapons: `Максимальний рівень всього озброєння вартових`,
|
||||
inventory_bulkRankUpEvolutionProgress: `Максимальний рівень всіх еволюцій Інкарнонов`,
|
||||
inventory_maxPlexus: `Максимальний рівень Плексу`,
|
||||
|
||||
quests_list: `Пригоди`,
|
||||
quests_completeAll: `Закінчити всі пригоди`,
|
||||
@ -121,71 +121,71 @@ dict = {
|
||||
currency_PrimeTokens: `Королівські Ая`,
|
||||
currency_owned: `У тебе |COUNT|.`,
|
||||
|
||||
detailedView_archonShardsLabel: `Комірки уламків Архонта`,
|
||||
detailedView_archonShardsDescription: `Ви можете використовувати ці необмежені комірки для встановлення безлічі вдосконалень.`,
|
||||
detailedView_archonShardsDescription2: `Зверніть увагу: кожен уламок Архонта застосовується з затримкою при завантаженні.`,
|
||||
detailedView_archonShardsLabel: `Клітинки осколків архонта`,
|
||||
detailedView_archonShardsDescription: `Ви можете використовувати ці необмежені клітинки для встановлення безлічі вдосконалень.`,
|
||||
detailedView_archonShardsDescription2: `Зверніть увагу: кожен уламок архонта застосовується з затримкою при завантаженні.`,
|
||||
detailedView_valenceBonusLabel: `Ознака Валентності`,
|
||||
detailedView_valenceBonusDescription: `Ви можете встановити або прибрати ознаку Валентності з вашої зброї.`,
|
||||
detailedView_modularPartsLabel: `Змінити модульні частини`,
|
||||
detailedView_valenceBonusDescription: `Ви можете встановити або прибрати ознака валентності з вашої зброї.`,
|
||||
detailedView_modularPartsLabel: `Змінити Модульні Частини`,
|
||||
detailedView_suitInvigorationLabel: `Зміцнення Ворфрейма`,
|
||||
detailedView_loadoutLabel: `Конфігурації`,
|
||||
|
||||
invigorations_offensive_AbilityStrength: `+200% до потужності здібностей.`,
|
||||
invigorations_offensive_AbilityRange: `+100% до досяжності здібностей.`,
|
||||
invigorations_offensive_AbilityDuration: `+100% до тривалості дії здібностей.`,
|
||||
invigorations_offensive_MeleeDamage: `+250% до шкоди від холодної зброї.`,
|
||||
invigorations_offensive_PrimaryDamage: `+250% до шкоди від основної зброї.`,
|
||||
invigorations_offensive_SecondaryDamage: `+250% до шкоди від допоміжної зброї.`,
|
||||
invigorations_offensive_PrimaryCritChance: `+200% до ймовірності критичної шкоди від основної зброї.`,
|
||||
invigorations_offensive_SecondaryCritChance: `+200% до ймовірності критичної шкоди від допоміжної зброї.`,
|
||||
invigorations_offensive_MeleeCritChance: `+200% до ймовірності критичної шкоди від холодної зброї.`,
|
||||
invigorations_offensive_AbilityStrength: `+200% Потужності Здібностей`,
|
||||
invigorations_offensive_AbilityRange: `+100% Досяжність Здібностей`,
|
||||
invigorations_offensive_AbilityDuration: `+100% Тривалість Здібностей`,
|
||||
invigorations_offensive_MeleeDamage: `+250% Шкода Ближнього Бою`,
|
||||
invigorations_offensive_PrimaryDamage: `+250% Шкода Основного Озброєння`,
|
||||
invigorations_offensive_SecondaryDamage: `+250% Шкода Допоміжного Озброєння`,
|
||||
invigorations_offensive_PrimaryCritChance: `+200% Імовірність Критичної Шкоди Основного Озброєння`,
|
||||
invigorations_offensive_SecondaryCritChance: `+200% Імовірність Критичної Шкоди Допоміжного Озброєння`,
|
||||
invigorations_offensive_MeleeCritChance: `+200% Імовірність Критичної Шкоди Ближнього Бою`,
|
||||
|
||||
invigorations_utility_AbilityEfficiency: `+75% до ощадливості здібностей.`,
|
||||
invigorations_utility_SprintSpeed: `+75% до швидкості бігу.`,
|
||||
invigorations_utility_ParkourVelocity: `+75% до швидкості паркуру.`,
|
||||
invigorations_utility_HealthMax: `+1000 до здоров'я.`,
|
||||
invigorations_utility_EnergyMax: `+200% до макс. енергії.`,
|
||||
invigorations_utility_StatusImmune: `Імунітет до ефектів стану.`,
|
||||
invigorations_utility_ReloadSpeed: `+75% до швидкості перезаряджання.`,
|
||||
invigorations_utility_HealthRegen: `+25 до відновлення здоров'я на секунду.`,
|
||||
invigorations_utility_ArmorMax: `+1000 до захисту.`,
|
||||
invigorations_utility_Jumps: `+5 Оновлень стрибків.`,
|
||||
invigorations_utility_EnergyRegen: `+2 до відновлення енергії на секунду.`,
|
||||
invigorations_utility_AbilityEfficiency: `+75% Ощадливість Здібностей`,
|
||||
invigorations_utility_SprintSpeed: `+75% Швидкість Бігу`,
|
||||
invigorations_utility_ParkourVelocity: `+75% Швидкість Паркура`,
|
||||
invigorations_utility_HealthMax: `+1000 Здоров'я`,
|
||||
invigorations_utility_EnergyMax: `+200% Максимум Енергії`,
|
||||
invigorations_utility_StatusImmune: `Імунітет до Ефектів Статусу`,
|
||||
invigorations_utility_ReloadSpeed: `+75% Швидкість Перезаряджання`,
|
||||
invigorations_utility_HealthRegen: `+25 Здоров'я в секунду`,
|
||||
invigorations_utility_ArmorMax: `+1000 Захисту`,
|
||||
invigorations_utility_Jumps: `+5 Оновлень Стрибків`,
|
||||
invigorations_utility_EnergyRegen: `+2 Енергії в секунду`,
|
||||
|
||||
invigorations_offensiveLabel: `Атакуюче вдосконалення`,
|
||||
invigorations_defensiveLabel: `Допоміжне вдосконалення`,
|
||||
invigorations_offensiveLabel: `Атакуюче Вдосконалення`,
|
||||
invigorations_defensiveLabel: `Вспомогательное Вдосконалення`,
|
||||
invigorations_expiryLabel: `Термін дії Зміцнення (необов'язково)`,
|
||||
|
||||
abilityOverride_label: `Перевизначення здібностей`,
|
||||
abilityOverride_onSlot: `у комірці`,
|
||||
abilityOverride_onSlot: `у клітинці`,
|
||||
|
||||
mods_addRiven: `Добавити модифікатор Розколу`,
|
||||
mods_addRiven: `Добавити Модифікатор Розколу`,
|
||||
mods_fingerprint: `Відбиток`,
|
||||
mods_fingerprintHelp: `Потрібна допомога з відбитком?`,
|
||||
mods_rivens: `Модифікатори Розколу`,
|
||||
mods_mods: `Модифікатори`,
|
||||
mods_addMax: `Добавити макс. вдосконалений`,
|
||||
mods_addMax: `Добавити максимально вдосконалений`,
|
||||
mods_addMissingUnrankedMods: `Добавити недостаючі модифікатори без рівня`,
|
||||
mods_removeUnranked: `Видалити модифікатори без рівня`,
|
||||
mods_addMissingMaxRankMods: `Добавити недостаючі модифікатори макс. рівня`,
|
||||
mods_addMissingMaxRankMods: `Добавити недостаючі модифікатори максимального рівня`,
|
||||
cheats_administratorRequirement: `Ви повинні бути адміністратором для використання цієї функції. Щоб стати адміністратором, додайте <code>\"|DISPLAYNAME|\"</code> в <code>administratorNames</code> в config.json.`,
|
||||
cheats_server: `Сервер`,
|
||||
cheats_skipTutorial: `Пропустити навчання`,
|
||||
cheats_skipAllDialogue: `Пропустити всі діалоги`,
|
||||
cheats_unlockAllScans: `Розблокувати всі сканування`,
|
||||
cheats_unlockAllMissions: `Розблокувати всі місії`,
|
||||
cheats_unlockAllMissions_ok: `Успіх. Будь ласка, зверніть увагу, що вам потрібно буде увійти в Доджьо/Реле або перезайти, щоб клієнт оновив Зоряну мапу.`,
|
||||
cheats_infiniteCredits: `Бескінечні Кредити`,
|
||||
cheats_infinitePlatinum: `Бескінечна Платина`,
|
||||
cheats_infiniteEndo: `Бескінечне Ендо`,
|
||||
cheats_unlockAllMissions_ok: `Успіх. Будь ласка, зверніть увагу, що вам потрібно буде увійти в Доджьо/Реле або перезайти, щоб клієнт оновив зоряну мапу.`,
|
||||
cheats_infiniteCredits: `Бескінечні кредити`,
|
||||
cheats_infinitePlatinum: `Бескінечна платина`,
|
||||
cheats_infiniteEndo: `Бескінечне ендо`,
|
||||
cheats_infiniteRegalAya: `Бескінечна Королівська Ая`,
|
||||
cheats_infiniteHelminthMaterials: `Бескінечні секреції Гельмінта`,
|
||||
cheats_infiniteHelminthMaterials: `Бескінечні Секреції Гельмінта`,
|
||||
cheats_claimingBlueprintRefundsIngredients: `Повернення інгредієнтів креслеників`,
|
||||
cheats_dontSubtractPurchaseCreditCost: `Не вираховувати вартість Кредитів при купівлі`,
|
||||
cheats_dontSubtractPurchasePlatinumCost: `Не вираховувати вартість Платини при купівлі`,
|
||||
cheats_dontSubtractPurchaseCreditCost: `Не вираховувати вартість кредитів при купівлі`,
|
||||
cheats_dontSubtractPurchasePlatinumCost: `Не вираховувати вартість платини при купівлі`,
|
||||
cheats_dontSubtractPurchaseItemCost: `Не вираховувати вартість предметів при купівлі`,
|
||||
cheats_dontSubtractPurchaseStandingCost: `Не вираховувати вартість репутації при купівлі`,
|
||||
cheats_dontSubtractVoidTraces: `Не вираховувати кількість Відлуння`,
|
||||
cheats_dontSubtractVoidTraces: `Не вираховувати кількість Відголосків Безодні`,
|
||||
cheats_dontSubtractConsumables: `Не вираховувати кількість витратних матеріалів`,
|
||||
cheats_unlockAllShipFeatures: `Розблокувати всі функції судна`,
|
||||
cheats_unlockAllShipDecorations: `Розблокувати всі прикраси судна`,
|
||||
@ -196,10 +196,10 @@ dict = {
|
||||
cheats_universalPolarityEverywhere: `Будь-яка полярність скрізь`,
|
||||
cheats_unlockDoubleCapacityPotatoesEverywhere: `Орокінські Реактори/Каталізатори скрізь`,
|
||||
cheats_unlockExilusEverywhere: `Ексилотримач скрізь`,
|
||||
cheats_unlockArcanesEverywhere: `Тримач Містифікаторів скрізь`,
|
||||
cheats_unlockArcanesEverywhere: `Тримач містифікаторів скрізь`,
|
||||
cheats_noDailyStandingLimits: `Без щоденних лімітів репутації`,
|
||||
cheats_noDailyFocusLimit: `Без щоденних лімітів Фокусу`,
|
||||
cheats_noArgonCrystalDecay: `Без розпаду Аргонових кристалів`,
|
||||
cheats_noDailyFocusLimit: `Без щоденних лімітів фокуса`,
|
||||
cheats_noArgonCrystalDecay: `Без розпаду аргонових кристалів`,
|
||||
cheats_noMasteryRankUpCooldown: `Підвищення ранга майстерності без очікування`,
|
||||
cheats_noVendorPurchaseLimits: `Відсутність лімітів на купівлю у продавців`,
|
||||
cheats_noDeathMarks: `Без позначок смерті`,
|
||||
@ -209,16 +209,16 @@ dict = {
|
||||
cheats_baroFullyStocked: `Баро повністю укомплектований`,
|
||||
cheats_syndicateMissionsRepeatable: `Повторювати місії синдиката`,
|
||||
cheats_unlockAllProfitTakerStages: `Розблокувати всі етапи Привласнювачки`,
|
||||
cheats_instantFinishRivenChallenge: `Миттєве завершення випробування модифікатора Розколу`,
|
||||
cheats_instantResourceExtractorDrones: `Миттєво добуваючі Дрони-видобувачі`,
|
||||
cheats_noResourceExtractorDronesDamage: `Без шкоди по Дронам-видобувачам`,
|
||||
cheats_instantFinishRivenChallenge: `Миттєве завершення випробування Модифікатора Розколу`,
|
||||
cheats_instantResourceExtractorDrones: `Миттєво добуваючі дрони-видобувачі`,
|
||||
cheats_noResourceExtractorDronesDamage: `Без шкоди по дронам-видобувачам`,
|
||||
cheats_skipClanKeyCrafting: `Пропустити створення кланового ключа`,
|
||||
cheats_noDojoRoomBuildStage: `Миттєве будівництво кімнат Доджьо`,
|
||||
cheats_noDojoDecoBuildStage: `Миттєве будівництво декорацій Доджьо`,
|
||||
cheats_fastDojoRoomDestruction: `Миттєве знищення кімнат Доджьо`,
|
||||
cheats_noDojoResearchCosts: `Безкоштовні дослідження Доджьо`,
|
||||
cheats_noDojoResearchTime: `Миттєві дослідження Доджьо`,
|
||||
cheats_fastClanAscension: `Миттєве піднесення клану`,
|
||||
cheats_noDojoRoomBuildStage: `Миттєве будівництво Кімнат Доджьо`,
|
||||
cheats_noDojoDecoBuildStage: `Миттєве будівництво Декорацій Доджьо`,
|
||||
cheats_fastDojoRoomDestruction: `Миттєве знищення Кімнат Доджьо`,
|
||||
cheats_noDojoResearchCosts: `Безкоштовні Дослідження Доджьо`,
|
||||
cheats_noDojoResearchTime: `Миттєві Дослідження Доджьо`,
|
||||
cheats_fastClanAscension: `Миттєве Піднесення Клану`,
|
||||
cheats_missionsCanGiveAllRelics: `Місії можуть давати всі реліквії`,
|
||||
cheats_exceptionalRelicsAlwaysGiveBronzeReward: `Вийняткові реліквії завжди дають бронзову нагороду`,
|
||||
cheats_flawlessRelicsAlwaysGiveSilverReward: `Бездоганні реліквії завжди дають срібну нагороду`,
|
||||
@ -230,7 +230,7 @@ dict = {
|
||||
cheats_nightwaveStandingMultiplier: `Множник репутації Нічної хвилі`,
|
||||
cheats_save: `Зберегти`,
|
||||
cheats_account: `Обліковий запис`,
|
||||
cheats_unlockAllFocusSchools: `Розблокувати всі школи Фокусу`,
|
||||
cheats_unlockAllFocusSchools: `Розблокувати всі школи фокуса`,
|
||||
cheats_helminthUnlockAll: `Повністю покращити Гельмінта`,
|
||||
cheats_addMissingSubsumedAbilities: `Додати відсутні поглинуті здібності`,
|
||||
cheats_intrinsicsUnlockAll: `Повністю покращити Кваліфікації`,
|
||||
@ -239,29 +239,24 @@ dict = {
|
||||
cheats_markAllAsRead: `Помітити всі вхідні як прочитані`,
|
||||
|
||||
worldState: `Стан світу`,
|
||||
worldState_creditBoost: `Глобальне посилення Кредитів`,
|
||||
worldState_affinityBoost: `Глобальне посилення Синтезу`,
|
||||
worldState_resourceBoost: `Глобальне посилення Ресурсів`,
|
||||
worldState_creditBoost: `Глобальний бустер кредитів`,
|
||||
worldState_affinityBoost: `Глобальний бустер синтезу`,
|
||||
worldState_resourceBoost: `Глобальний бустер ресурсів`,
|
||||
worldState_tennoLiveRelay: `Реле TennoLive`,
|
||||
worldState_baroTennoConRelay: `Реле Баро TennoCon`,
|
||||
worldState_starDays: `Зоряні дні`,
|
||||
worldState_galleonOfGhouls: `Гульський галеон`,
|
||||
worldState_galleonOfGhouls: `Гульський Галеон`,
|
||||
worldState_ghoulEmergence: `Зачищення від гулів`,
|
||||
worldState_plagueStar: `Морова зірка`,
|
||||
worldState_dogDays: `Спекотні дні`,
|
||||
worldState_dogDaysRewards: `Нагороди Спекотних днів`,
|
||||
worldState_wolfHunt: `Полювання на Вовка (2025)`,
|
||||
worldState_orphixVenom: `Орфіксова отрута`,
|
||||
worldState_longShadow: `Довга тінь`,
|
||||
worldState_hallowedFlame: `Священне полум'я`,
|
||||
worldState_hallowedNightmares: `Священні жахіття`,
|
||||
worldState_hallowedNightmaresRewards: `Нагороди Священних жахіть`,
|
||||
worldState_hallowedNightmaresRewards: `Нагороди Священних Жахіть`,
|
||||
worldState_proxyRebellion: `Повстання роботів`,
|
||||
worldState_proxyRebellionRewards: `Нагороди Повстання роботів`,
|
||||
worldState_bellyOfTheBeast: `У лігві звіра`,
|
||||
worldState_bellyOfTheBeastProgressOverride: `Прогрес У лігві звіра`,
|
||||
worldState_eightClaw: `Вісім кігтів`,
|
||||
worldState_eightClawProgressOverride: `Прогрес Восьми кігтів`,
|
||||
worldState_from_year: `з |YEAR|`,
|
||||
worldState_pre_year: `до |YEAR|`,
|
||||
worldState_incompatibleWith: `Несумісне з:`,
|
||||
@ -278,9 +273,9 @@ dict = {
|
||||
worldState_cold: `Холод`,
|
||||
worldState_duviriOverride: `Цикл Дувірі`,
|
||||
worldState_joy: `Радість`,
|
||||
worldState_anger: `Злість`,
|
||||
worldState_anger: `Гнів`,
|
||||
worldState_envy: `Заздрість`,
|
||||
worldState_sorrow: `Журба`,
|
||||
worldState_sorrow: `Скорбота`,
|
||||
worldState_fear: `Страх`,
|
||||
worldState_nightwaveOverride: `Сезон Нічної хвилі`,
|
||||
worldState_RadioLegionIntermission13Syndicate: `Вибірка Нори 9`,
|
||||
@ -304,69 +299,68 @@ dict = {
|
||||
worldState_allAtOnceNormal: `Всі одразу, в звичайному режимі`,
|
||||
worldState_allAtOnceSteelPath: `Всі одразу, в режимі Шляху Сталі`,
|
||||
worldState_theCircuitOverride: `Типи місій у підземеллі Дувірі`,
|
||||
worldState_darvoStockMultiplier: `Множник запасів Дарво`,
|
||||
worldState_varziaFullyStocked: `Повний асортимент Варзії`,
|
||||
worldState_varziaOverride: `Зміна ротації Варзії`,
|
||||
worldState_darvoStockMultiplier: `Множник Запасів Дарво`,
|
||||
worldState_varziaFullyStocked: `Повний Асортимент Варзії`,
|
||||
worldState_varziaOverride: `Зміна Ротації Варзії`,
|
||||
|
||||
import_importNote: `Ви можете завантажити повну або часткову відповідь <code>inventory.php</code> або <code>getShip.php</code> (клієнтське представлення) тут.`,
|
||||
import_importNote2: `Всі підтримувані поля <b>будуть перезаписані</b> у вашому акаунті.`,
|
||||
import_importNote: `Ви можете завантажити повну або часткову відповідь спорядження (клієнтське представлення) тут. Всі підтримувані поля <b>будуть перезаписані</b> у вашому акаунті.`,
|
||||
import_submit: `Відправити`,
|
||||
import_samples: `Приклад:`,
|
||||
import_samples_maxFocus: `Всі школи Фокусу макс. рівня`,
|
||||
import_samples_maxFocus: `Всі школи Фокуса максимального рівня`,
|
||||
|
||||
upgrade_Equilibrium: `Згустки здоров'я дають +|VAL|% енергії, згустки енергії дають +|VAL|% здоров'я.`,
|
||||
upgrade_MeleeCritDamage: `+|VAL|% до критичної шкоди від холодної зброї.`,
|
||||
upgrade_PrimaryStatusChance: `+|VAL|% до ймовірності ефекту стану від основної зброї.`,
|
||||
upgrade_SecondaryCritChance: `+|VAL|% до ймовірності критичної шкоди від допоміжної зброї.`,
|
||||
upgrade_WarframeAbilityDuration: `+|VAL|% до тривалості дії здібностей.`,
|
||||
upgrade_WarframeAbilityStrength: `+|VAL|% до потужності здібностей.`,
|
||||
upgrade_WarframeArmorMax: `+|VAL| до захисту.`,
|
||||
upgrade_WarframeBlastProc: `Відновлює +|VAL| щитів, коли ви вбиваєте ворога Вибуховою шкодою.`,
|
||||
upgrade_WarframeCastingSpeed: `+|VAL|% до швидкості застосування здібностей.`,
|
||||
upgrade_WarframeCorrosiveDamageBoost: `Дає +|VAL|% до шкоди від здібностей ворогам під впливом Корозійної шкоди.`,
|
||||
upgrade_WarframeCorrosiveStack: `Збільшує макс. кількість накопичень Коррозійних ефектів стану на +|VAL|.`,
|
||||
upgrade_WarframeCritDamageBoost: `Дає +|VAL|% до критичної шкоди холодної зброї. Коли макс. енергія перевищує 500, то збільшення шкоди подвоюється.`,
|
||||
upgrade_WarframeElectricDamage: `Дає +|VAL1|% до Електричної шкоди від основної зрої. Додатково дає +|VAL2|% за споряджений багряний, блакитний чи фіолетовий архонтовий уламок (Поєднується з модифікаторами).`,
|
||||
upgrade_WarframeElectricDamageBoost: `Дає +|VAL|% до шкоди від здібностей ворогам під впливом Електричної шкоди.`,
|
||||
upgrade_WarframeEnergyMax: `+|VAL| до макс. енергії.`,
|
||||
upgrade_WarframeGlobeEffectEnergy: `+|VAL|% до дієвості згустків енергії.`,
|
||||
upgrade_WarframeGlobeEffectHealth: `+|VAL|% до дієвості згустків здоров'я.`,
|
||||
upgrade_WarframeHealthMax: `+|VAL| до здоров'я.`,
|
||||
upgrade_WarframeHPBoostFromImpact: `Отримайте +|VAL1| здоров'я за ворога, вбитого Вибуховою шкодою. Макс. — |VAL2| здоров'я.`,
|
||||
upgrade_WarframeParkourVelocity: `+|VAL|% до швидкості паркуру.`,
|
||||
upgrade_WarframeRadiationDamageBoost: `Дає +|VAL|% до шкоди від здібностей ворогам під впливом Радіаційної шкоди.`,
|
||||
upgrade_WarframeHealthRegen: `+|VAL| до відновлення здоров'я на секунду.`,
|
||||
upgrade_WarframeShieldMax: `+|VAL| до місткості щитів.`,
|
||||
upgrade_WarframeStartingEnergy: `+|VAL|% до початкової макс. енергії.`,
|
||||
upgrade_WarframeToxinDamage: `Токсичні ефекти стану завдаватимуть на +|VAL|% більше шкоди.`,
|
||||
upgrade_WarframeToxinHeal: `Відновлює +|VAL| здоров'я за кожен раз як вороги отримують шкоду від Токсичних ефектів стану.`,
|
||||
upgrade_WeaponCritBoostFromHeat: `Збільшує ймовірність критичної шкоди від допоміжної зброї на |VAL1|% щоразу, коли ви вбиваєте ворога під впливом Термічного ефекту стану. Накопичується до |VAL2|%.`,
|
||||
upgrade_AvatarAbilityRange: `+7.5% Досяжність Здібностей.`,
|
||||
upgrade_AvatarAbilityEfficiency: `+5% Ощадливість Здібностей.`,
|
||||
upgrade_AvatarEnergyRegen: `+0.5 Відновлення Енергії в секунду.`,
|
||||
upgrade_AvatarEnemyRadar: `+5м Виявлення ворогів.`,
|
||||
upgrade_AvatarLootRadar: `+7м Виявлення здобичі.`,
|
||||
upgrade_WeaponAmmoMax: `+15% Макс. Набоїв.`,
|
||||
upgrade_EnemyArmorReductionAura: `-3% Захист Ворогів.`,
|
||||
upgrade_OnExecutionAmmo: `+100% Заповнення Магазина Основного і Допоміжного Озброєння при вбивстві Милосердям.`,
|
||||
upgrade_OnExecutionHealthDrop: `+100% Імовірність Падіння згустка здоров'я при вбивстві Милосердям.`,
|
||||
upgrade_OnExecutionEnergyDrop: `+50% Імовірність Падіння згустка Енергії при вбивстві Милосердям.`,
|
||||
upgrade_OnFailHackReset: `+50% Імовірність Повтора Зламу.`,
|
||||
upgrade_DamageReductionOnHack: `+75% Зменшення Шкоди під час Зламу.`,
|
||||
upgrade_OnExecutionReviveCompanion: `Вбивства Милосердям зменшують час відновлення Компаньйона на 15 секунд.`,
|
||||
upgrade_OnExecutionParkourSpeed: `+60% Швидкість Паркура після вбивства Милосердям на 15 секунд.`,
|
||||
upgrade_AvatarTimeLimitIncrease: `+8 секунд до Зламу.`,
|
||||
upgrade_ElectrifyOnHack: `Шокувати ворогів в межах 20м під час Зламу.`,
|
||||
upgrade_OnExecutionTerrify: `+50% Імовірність, що вороги в межах 15м будуть тремтіти від страху протягом 8 секунд після вбивства Милосердям.`,
|
||||
upgrade_OnHackLockers: `Відкрити 5 шафок в межах 20м після Зламу.`,
|
||||
upgrade_OnExecutionBlind: `Засліпити ворогів в межах 18м після вбивства Милосердям.`,
|
||||
upgrade_OnExecutionDrainPower: `Наступне застосування здібності отримує +50% Потужності Здібності після вбивства Милосердям.`,
|
||||
upgrade_OnHackSprintSpeed: `+75% Швидкість Бігу протягом 15 секунд після Зламу.`,
|
||||
upgrade_SwiftExecute: `+50% Швидкість Вбивства Милосердям.`,
|
||||
upgrade_OnHackInvis: `Невидимість протягом 15 секунд після Зламу.`,
|
||||
upgrade_Equilibrium: `+|VAL|% Енергія від підбирання здоров'я, +|VAL|% Здоров'я від підбирання енергії`,
|
||||
upgrade_MeleeCritDamage: `+|VAL|% Критична шкода ближнього бою`,
|
||||
upgrade_PrimaryStatusChance: `+|VAL|% Імовірність накладення ефекту стану основною зброєю`,
|
||||
upgrade_SecondaryCritChance: `+|VAL|% Імовірність критичної шкоди допоміжною зброєю`,
|
||||
upgrade_WarframeAbilityDuration: `+|VAL|% Тривалість здібностей`,
|
||||
upgrade_WarframeAbilityStrength: `+|VAL|% Потужність здібностей`,
|
||||
upgrade_WarframeArmorMax: `+|VAL| Захист`,
|
||||
upgrade_WarframeBlastProc: `+|VAL| Щит при вбивстві з Вибуховим Уронoм`,
|
||||
upgrade_WarframeCastingSpeed: `+|VAL|% Швидкість Застосування Здібностей`,
|
||||
upgrade_WarframeCorrosiveDamageBoost: `+|VAL|% Урон Здібностей по ворогам, ураженим Корозією`,
|
||||
upgrade_WarframeCorrosiveStack: `Збільшити макс. стаки Корозії на +|VAL|`,
|
||||
upgrade_WarframeCritDamageBoost: `+|VAL|% Критична шкода Ближнього Бою (Подвоюється при 500 Енергії)`,
|
||||
upgrade_WarframeElectricDamage: `+|VAL1|% Урон Електрикою Основним Озброєнням (+|VAL2|% за кожен додатковий Уламок)`,
|
||||
upgrade_WarframeElectricDamageBoost: `+|VAL|% Шкода Здібностей по ворогам, ураженим Електрикою`,
|
||||
upgrade_WarframeEnergyMax: `+|VAL| Макс. Енергія`,
|
||||
upgrade_WarframeGlobeEffectEnergy: `+|VAL|% Ефективність згустків Енергії`,
|
||||
upgrade_WarframeGlobeEffectHealth: `+|VAL|% Ефективність згустків Здоров'я`,
|
||||
upgrade_WarframeHealthMax: `+|VAL| Макс. Здоров'я`,
|
||||
upgrade_WarframeHPBoostFromImpact: `+|VAL1| Здоров'я при вбивстві з Вибуховою шкодою (Макс. |VAL2| Здоров'я)`,
|
||||
upgrade_WarframeParkourVelocity: `+|VAL|% Швидкість Паркура`,
|
||||
upgrade_WarframeRadiationDamageBoost: `+|VAL|% Шкода Здібностей по ворогам, ураженим Радіацією`,
|
||||
upgrade_WarframeHealthRegen: `+|VAL| Здоров'я в секунду`,
|
||||
upgrade_WarframeShieldMax: `+|VAL| Щиту`,
|
||||
upgrade_WarframeStartingEnergy: `+|VAL|% Енергії при Спавні`,
|
||||
upgrade_WarframeToxinDamage: `+|VAL|% Шкода Токсином`,
|
||||
upgrade_WarframeToxinHeal: `+|VAL| Здоров'я при нанесенні шкоди ворогам з Токсином`,
|
||||
upgrade_WeaponCritBoostFromHeat: `+|VAL1|% Імовірність Критичної Шкоди Допоміжною Зброєю за кожного вбитого ворога, ураженого Термічною шкодою (Макс. |VAL2|%)`,
|
||||
upgrade_AvatarAbilityRange: `+7.5% Досяжність Здібностей`,
|
||||
upgrade_AvatarAbilityEfficiency: `+5% Ощадливість Здібностей`,
|
||||
upgrade_AvatarEnergyRegen: `+0.5 Відновлення Енергії в секунду`,
|
||||
upgrade_AvatarEnemyRadar: `+5m Виявлення ворогів`,
|
||||
upgrade_AvatarLootRadar: `+7m Виявлення здобичі`,
|
||||
upgrade_WeaponAmmoMax: `+15% Макс. Набоїв`,
|
||||
upgrade_EnemyArmorReductionAura: `-3% Захист Ворогів`,
|
||||
upgrade_OnExecutionAmmo: `+100% Заповнення Магазина Основного і Допоміжного Озброєння при вбивстві Милосердям`,
|
||||
upgrade_OnExecutionHealthDrop: `+100% Імовірність Падіння згустка Здоров'я при вбивстві Милосердям`,
|
||||
upgrade_OnExecutionEnergyDrop: `+50% Імовірність Падіння згустка Енергії при вбивстві Милосердям`,
|
||||
upgrade_OnFailHackReset: `+50% Імовірність Повтора Зламу`,
|
||||
upgrade_DamageReductionOnHack: `+75% Зменшення Шкоди під час Зламу`,
|
||||
upgrade_OnExecutionReviveCompanion: `Вбивства Милосердям зменшують час відновлення Компаньйона на 15 секунд`,
|
||||
upgrade_OnExecutionParkourSpeed: `+60% Швидкість Паркура після вбивства Милосердям на 15 секунд`,
|
||||
upgrade_AvatarTimeLimitIncrease: `+8 секунд до Зламу`,
|
||||
upgrade_ElectrifyOnHack: `Шокувати ворогів в межах 20 метрів під час Зламу`,
|
||||
upgrade_OnExecutionTerrify: `+50% Імовірність, що вороги в межах 15 метрів будуть тремтіти від страху протягом 8 секунд після вбивства Милосердям`,
|
||||
upgrade_OnHackLockers: `Відкрити 5 шафок в межах 20 метрів після Зламу`,
|
||||
upgrade_OnExecutionBlind: `Засліпити ворогів в межах 18 метрів після вбивства Милосердям`,
|
||||
upgrade_OnExecutionDrainPower: `Наступне застосування здібності отримує +50% Потужності Здібності після вбивства Милосердям`,
|
||||
upgrade_OnHackSprintSpeed: `+75% Швидкість Бігу протягом 15 секунд після Зламу`,
|
||||
upgrade_SwiftExecute: `+50% Швидкість Вбивства Милосердям`,
|
||||
upgrade_OnHackInvis: `Невидимість протягом 15 секунд після Зламу`,
|
||||
|
||||
damageType_Electricity: `Електричний`,
|
||||
damageType_Fire: `Термічний`,
|
||||
damageType_Fire: `Трммічний`,
|
||||
damageType_Freeze: `Крижаний`,
|
||||
damageType_Impact: `Ударний`,
|
||||
damageType_Magnetic: `Магнетичний`,
|
||||
|
@ -251,17 +251,12 @@ dict = {
|
||||
worldState_dogDays: `三伏天`,
|
||||
worldState_dogDaysRewards: `[UNTRANSLATED] Dog Days Rewards`,
|
||||
worldState_wolfHunt: `恶狼狩猎 (2025)`,
|
||||
worldState_orphixVenom: `奥影之毒`,
|
||||
worldState_longShadow: `暗夜长影`,
|
||||
worldState_hallowedFlame: `万圣之焰`,
|
||||
worldState_hallowedNightmares: `万圣噩梦`,
|
||||
worldState_hallowedNightmaresRewards: `[UNTRANSLATED] Hallowed Nightmares Rewards`,
|
||||
worldState_proxyRebellion: `机械叛乱`,
|
||||
worldState_proxyRebellionRewards: `[UNTRANSLATED] Proxy Rebellion Rewards`,
|
||||
worldState_bellyOfTheBeast: `兽之腹`,
|
||||
worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`,
|
||||
worldState_eightClaw: `八爪`,
|
||||
worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
|
||||
worldState_from_year: `[UNTRANSLATED] from |YEAR|`,
|
||||
worldState_pre_year: `[UNTRANSLATED] pre |YEAR|`,
|
||||
worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`,
|
||||
@ -308,8 +303,7 @@ dict = {
|
||||
worldState_varziaFullyStocked: `瓦奇娅开启全部库存商品`,
|
||||
worldState_varziaOverride: `瓦奇娅(Prime重生)轮换状态`,
|
||||
|
||||
import_importNote: `[UNTRANSLATED] You can provide a full or partial <code>inventory.php</code> or <code>getShip.php</code> response (client representation) here.`,
|
||||
import_importNote2: `支持的所有字段<b>将被覆盖</b>到您的账户中。`,
|
||||
import_importNote: `您可以在此处提供完整或部分库存响应(客户端表示)。支持的所有字段<b>将被覆盖</b>到您的账户中。`,
|
||||
import_submit: `提交`,
|
||||
import_samples: `示例:`,
|
||||
import_samples_maxFocus: `所有专精学派完全精通`,
|
||||
|
Loading…
x
Reference in New Issue
Block a user