chore(webui): update zh #2657

Closed
BanLanGen wants to merge 4 commits from (deleted):main into main
16 changed files with 677 additions and 212 deletions
Showing only changes of commit 2db5b5755c - Show all commits

View File

@ -59,7 +59,8 @@
"nightwaveStandingMultiplier": 1, "nightwaveStandingMultiplier": 1,
"unfaithfulBugFixes": { "unfaithfulBugFixes": {
"ignore1999LastRegionPlayed": false, "ignore1999LastRegionPlayed": false,
"fixXtraCheeseTimer": false "fixXtraCheeseTimer": false,
"useAnniversaryTagForOldGoals": true
}, },
"worldState": { "worldState": {
"creditBoost": false, "creditBoost": false,
@ -70,6 +71,7 @@
"orphixVenom": false, "orphixVenom": false,
"longShadow": false, "longShadow": false,
"hallowedFlame": false, "hallowedFlame": false,
"anniversary": null,
"hallowedNightmares": false, "hallowedNightmares": false,
"hallowedNightmaresRewardsOverride": 0, "hallowedNightmaresRewardsOverride": 0,
"proxyRebellion": false, "proxyRebellion": false,

View File

@ -88,8 +88,7 @@ export const loginController: RequestHandler = async (request, response) => {
account.LastLogin = new Date(); account.LastLogin = new Date();
await account.save(); await account.save();
// Tell WebUI its nonce has been invalidated sendWsBroadcastTo(account._id.toString(), { nonce_updated: true });
sendWsBroadcastTo(account._id.toString(), { logged_out: true });
response.json(createLoginResponse(myAddress, myUrlBase, account.toJSON(), buildLabel)); response.json(createLoginResponse(myAddress, myUrlBase, account.toJSON(), buildLabel));
}; };

View File

@ -21,8 +21,7 @@ export const logoutController: RequestHandler = async (req, res) => {
} }
); );
if (stat.modifiedCount) { if (stat.modifiedCount) {
// Tell WebUI its nonce has been invalidated sendWsBroadcastTo(req.query.accountId as string, { nonce_updated: true });
sendWsBroadcastTo(req.query.accountId as string, { logged_out: true });
} }
res.writeHead(200, { res.writeHead(200, {

View File

@ -71,6 +71,7 @@ export interface IConfig {
unfaithfulBugFixes?: { unfaithfulBugFixes?: {
ignore1999LastRegionPlayed?: boolean; ignore1999LastRegionPlayed?: boolean;
fixXtraCheeseTimer?: boolean; fixXtraCheeseTimer?: boolean;
useAnniversaryTagForOldGoals?: boolean;
}; };
worldState?: { worldState?: {
creditBoost?: boolean; creditBoost?: boolean;
@ -82,6 +83,7 @@ export interface IConfig {
orphixVenom?: boolean; orphixVenom?: boolean;
longShadow?: boolean; longShadow?: boolean;
hallowedFlame?: boolean; hallowedFlame?: boolean;
anniversary?: number;
hallowedNightmares?: boolean; hallowedNightmares?: boolean;
hallowedNightmaresRewardsOverride?: number; hallowedNightmaresRewardsOverride?: number;
proxyRebellion?: boolean; proxyRebellion?: boolean;

View File

@ -712,6 +712,20 @@ export const addMissionInventoryUpdates = async (
if (reward.credits) { if (reward.credits) {
message.RegularCredits = reward.credits; message.RegularCredits = reward.credits;
} }
if (info.arg) {
const args: Record<string, string | number> = {
PLAYER_NAME: account.DisplayName,
CREDIT_REWARD: reward.credits ?? 0
};
info.arg.forEach(key => {
const value = args[key];
if (value) {
message.arg ??= [];
message.arg.push({ Key: key, Tag: value });
}
});
}
await createMessage(inventory.accountOwnerId, [message]); await createMessage(inventory.accountOwnerId, [message]);
} }
@ -2271,7 +2285,7 @@ const getHexBounties = (seed: number): { nodes: string[]; buddies: string[] } =>
return { nodes, buddies }; return { nodes, buddies };
};*/ };*/
const goalMessagesByKey: Record<string, { sndr: string; msg: string; sub: string; icon: string }> = { const goalMessagesByKey: Record<string, { sndr: string; msg: string; sub: string; icon: string; arg?: string[] }> = {
"/Lotus/Types/Keys/GalleonRobberyAlert": { "/Lotus/Types/Keys/GalleonRobberyAlert": {
sndr: "/Lotus/Language/Bosses/BossCouncilorVayHek", sndr: "/Lotus/Language/Bosses/BossCouncilorVayHek",
msg: "/Lotus/Language/Messages/GalleonRobbery2025RewardMsgA", msg: "/Lotus/Language/Messages/GalleonRobbery2025RewardMsgA",
@ -2384,19 +2398,22 @@ const goalMessagesByKey: Record<string, { sndr: string; msg: string; sub: string
sndr: "/Lotus/Language/Bosses/Lotus", sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/G1Quests/RazorbackArmadaRewardBody", msg: "/Lotus/Language/G1Quests/RazorbackArmadaRewardBody",
sub: "/Lotus/Language/G1Quests/GenericTacAlertSmallRewardMsgTitle", sub: "/Lotus/Language/G1Quests/GenericTacAlertSmallRewardMsgTitle",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png" icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["CREDIT_REWARD"]
}, },
"/Lotus/Types/Keys/TacAlertKeyProxyRebellionTwo": { "/Lotus/Types/Keys/TacAlertKeyProxyRebellionTwo": {
sndr: "/Lotus/Language/Bosses/Lotus", sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/G1Quests/RazorbackArmadaRewardBody", msg: "/Lotus/Language/G1Quests/RazorbackArmadaRewardBody",
sub: "/Lotus/Language/G1Quests/GenericTacAlertSmallRewardMsgTitle", sub: "/Lotus/Language/G1Quests/GenericTacAlertSmallRewardMsgTitle",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png" icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["CREDIT_REWARD"]
}, },
"/Lotus/Types/Keys/TacAlertKeyProxyRebellionThree": { "/Lotus/Types/Keys/TacAlertKeyProxyRebellionThree": {
sndr: "/Lotus/Language/Bosses/Lotus", sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/G1Quests/RazorbackArmadaRewardBody", msg: "/Lotus/Language/G1Quests/RazorbackArmadaRewardBody",
sub: "/Lotus/Language/G1Quests/GenericTacAlertSmallRewardMsgTitle", sub: "/Lotus/Language/G1Quests/GenericTacAlertSmallRewardMsgTitle",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png" icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["CREDIT_REWARD"]
}, },
"/Lotus/Types/Keys/TacAlertKeyProxyRebellionFour": { "/Lotus/Types/Keys/TacAlertKeyProxyRebellionFour": {
sndr: "/Lotus/Language/Bosses/Lotus", sndr: "/Lotus/Language/Bosses/Lotus",
@ -2408,7 +2425,8 @@ const goalMessagesByKey: Record<string, { sndr: string; msg: string; sub: string
sndr: "/Lotus/Language/Bosses/Lotus", sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/G1Quests/ProjectNightwatchRewardMsgA", msg: "/Lotus/Language/G1Quests/ProjectNightwatchRewardMsgA",
sub: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertMissionOneTitle", sub: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertMissionOneTitle",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png" icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["CREDIT_REWARD"]
}, },
"/Lotus/Types/Keys/TacAlertKeyProjectNightwatch": { "/Lotus/Types/Keys/TacAlertKeyProjectNightwatch": {
sndr: "/Lotus/Language/Bosses/Lotus", sndr: "/Lotus/Language/Bosses/Lotus",
@ -2457,5 +2475,145 @@ const goalMessagesByKey: Record<string, { sndr: string; msg: string; sub: string
msg: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteDesc", msg: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteDesc",
sub: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteTitle", sub: "/Lotus/Language/Inbox/MechEvent2020Tier3CompleteTitle",
icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png" icon: "/Lotus/Interface/Icons/Npcs/Entrati/Father.png"
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2019E": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2024RewardMsgB",
sub: "/Lotus/Language/Messages/Anniversary2024MissionTitleB",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2020F": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2024RewardMsgC",
sub: "/Lotus/Language/Messages/Anniversary2024MissionTitleB",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2024ChallengeModeA": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2024RewardMsgD",
sub: "/Lotus/Language/Messages/Anniversary2024MissionTitleD",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2017C": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2019RewardMsgC",
sub: "/Lotus/Language/Messages/Anniversary2019MissionTitleC",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2020H": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2020RewardMsgH",
sub: "/Lotus/Language/Messages/Anniversary2020MissionTitleH",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2022J": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2022RewardMsgJ",
sub: "/Lotus/Language/Messages/Anniversary2022MissionTitleJ",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2025D": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2025RewardMsgB",
sub: "/Lotus/Language/Messages/Anniversary2025MissionTitleB",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2025ChallengeModeA": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2025RewardMsgC",
sub: "/Lotus/Language/Messages/Anniversary2025MissionTitleC",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2020G": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2020RewardMsgG",
sub: "/Lotus/Language/Messages/Anniversary2020MissionTitleG",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2017B": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2019RewardMsgB",
sub: "/Lotus/Language/Messages/Anniversary2019MissionTitleB",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2017A": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2019RewardMsgA",
sub: "/Lotus/Language/Messages/Anniversary2019MissionTitleA",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2023K": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2025RewardMsgG",
sub: "/Lotus/Language/Messages/Anniversary2025MissionTitleG",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2025ChallengeModeB": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2025RewardMsgD",
sub: "/Lotus/Language/Messages/Anniversary2025MissionTitleD",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2025A": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2025RewardMsgA",
sub: "/Lotus/Language/Messages/Anniversary2025MissionTitleA",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2018D": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2024RewardMsgG",
sub: "/Lotus/Language/Messages/Anniversary2024MissionTitleG",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2025C": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2024RewardMsgF",
sub: "/Lotus/Language/Messages/Anniversary2024MissionTitleF",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2024L": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2024RewardMsgA",
sub: "/Lotus/Language/Messages/Anniversary2024MissionTitleA",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2024ChallengeModeB": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2024RewardMsgE",
sub: "/Lotus/Language/Messages/Anniversary2024MissionTitleE",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2021I": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2024RewardMsgH",
sub: "/Lotus/Language/Messages/Anniversary2024MissionTitleH",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
},
"/Lotus/Types/Keys/TacAlertKeyAnniversary2025B": {
sndr: "/Lotus/Language/Bosses/Lotus",
msg: "/Lotus/Language/Messages/Anniversary2025RewardMsgE",
sub: "/Lotus/Language/Messages/Anniversary2025MissionTitleE",
icon: "/Lotus/Interface/Icons/Npcs/Lotus_d.png",
arg: ["PLAYER_NAME"]
} }
}; };

View File

@ -18,6 +18,7 @@ import {
ICalendarDay, ICalendarDay,
ICalendarEvent, ICalendarEvent,
ICalendarSeason, ICalendarSeason,
IGoal,
IInvasion, IInvasion,
ILiteSortie, ILiteSortie,
IPrimeVaultTrader, IPrimeVaultTrader,
@ -1538,7 +1539,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
Personal: true, Personal: true,
Bounty: true, Bounty: true,
ClampNodeScores: true, ClampNodeScores: true,
Node: "EventNode28", // Incompatible with Wolf Hunt (2025), Orphix Venom Node: "EventNode28", // Incompatible with Wolf Hunt (2025), Orphix Venom, Warframe Anniversary
MissionKeyName: "/Lotus/Types/Keys/GalleonRobberyAlertB", MissionKeyName: "/Lotus/Types/Keys/GalleonRobberyAlertB",
Desc: "/Lotus/Language/Events/GalleonRobberyEventMissionTitle", Desc: "/Lotus/Language/Events/GalleonRobberyEventMissionTitle",
Icon: "/Lotus/Interface/Icons/Player/GalleonRobberiesEvent.png", Icon: "/Lotus/Interface/Icons/Player/GalleonRobberiesEvent.png",
@ -1819,14 +1820,14 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
Personal: true, Personal: true,
Bounty: true, Bounty: true,
ClampNodeScores: true, ClampNodeScores: true,
Node: "EventNode25", // Incompatible with Hallowed Flame, Hallowed Nightmares Node: "EventNode25", // Incompatible with Hallowed Flame, Hallowed Nightmares, Warframe Anniversary
ConcurrentMissionKeyNames: [ ConcurrentMissionKeyNames: [
"/Lotus/Types/Keys/TacAlertKeyWaterFightB", "/Lotus/Types/Keys/TacAlertKeyWaterFightB",
"/Lotus/Types/Keys/TacAlertKeyWaterFightC", "/Lotus/Types/Keys/TacAlertKeyWaterFightC",
"/Lotus/Types/Keys/TacAlertKeyWaterFightD" "/Lotus/Types/Keys/TacAlertKeyWaterFightD"
], ],
ConcurrentNodeReqs: [25, 50, 100], ConcurrentNodeReqs: [25, 50, 100],
ConcurrentNodes: ["EventNode24", "EventNode34", "EventNode35"], // Incompatible with Hallowed Flame, Hallowed Nightmares ConcurrentNodes: ["EventNode24", "EventNode34", "EventNode35"], // Incompatible with Hallowed Flame, Hallowed Nightmares, Warframe Anniversary
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyWaterFightA", MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyWaterFightA",
Faction: "FC_CORPUS", Faction: "FC_CORPUS",
Desc: "/Lotus/Language/Alerts/TacAlertWaterFight", Desc: "/Lotus/Language/Alerts/TacAlertWaterFight",
@ -1934,6 +1935,226 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
} }
} }
if (config.worldState?.anniversary != undefined) {
// Incompatible with: Use Tag from Warframe Anniversary for old Events, Wolf Hunt (2025), Galleon Of Ghouls, Hallowed Flame, Hallowed Nightmares, Dog Days, Proxy Rebellion, Long Shadow
const goalsByWeek: Partial<IGoal>[][] = [
[
{
Node: "EventNode28",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2019E",
Tag: "Anniversary2019TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Upgrades/Skins/Excalibur/ExcaliburDexSkin"]
}
},
{
Node: "EventNode26",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2020F",
Tag: "Anniversary2020TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Types/Items/ShipDecos/ExcaliburDexBobbleHead"]
}
},
{
Node: "EventNode19",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2024ChallengeModeA",
Tag: "Anniversary2024TacAlertCMA",
Reward: {
items: ["/Lotus/StoreItems/Types/Items/MiscItems/WeaponUtilityUnlocker"]
}
}
],
[
{
Node: "EventNode24",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2017C",
Tag: "Anniversary2018TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Weapons/Tenno/LongGuns/DexTheThird/DexTheThird"]
}
},
{
Node: "EventNode18",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2020H",
Tag: "Anniversary2020TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageDexAnniversary"]
}
}
],
[
{
Node: "EventNode18",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2022J",
Tag: "Anniversary2022TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Upgrades/Skins/Rhino/RhinoDexSkin"]
}
},
{
Node: "EventNode38",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2025D",
Tag: "Anniversary2020TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Types/Items/ShipDecos/RhinoDexBobbleHead"]
}
},
{
Node: "EventNode27",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2025ChallengeModeA",
Tag: "Anniversary2024TacAlertCMA",
Reward: {
items: ["/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst"]
}
}
],
[
{
Node: "EventNode2",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2020G",
Tag: "Anniversary2020TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Upgrades/Skins/Liset/DexLisetSkin"]
}
},
{
Node: "EventNode17",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2017B",
Tag: "Anniversary2018TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Weapons/Tenno/Melee/Swords/DexTheSecond/DexTheSecond"]
}
}
],
[
{
Node: "EventNode18",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2017A",
Tag: "Anniversary2018TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Weapons/Tenno/Pistols/DexFuris/DexFuris"]
}
},
{
Node: "EventNode26",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2023K",
Tag: "Anniversary2025TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Types/StoreItems/AvatarImages/AvatarImageCommunityClemComic"]
}
},
{
Node: "EventNode12",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2025ChallengeModeB",
Tag: "Anniversary2025TacAlertCMB",
Reward: {
items: ["/Lotus/StoreItems/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker"]
}
}
],
[
{
Node: "EventNode17",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2025A",
Tag: "Anniversary2025TacAlert",
Reward: {
items: [
"/Lotus/StoreItems/Weapons/Tenno/Melee/Swords/KatanaAndWakizashi/Dex2023Nikana/Dex2023Nikana"
]
}
},
{
Node: "EventNode27",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2018D",
Tag: "Anniversary2018TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Upgrades/Skins/Scarves/DexScarf"]
}
}
],
[
{
Node: "EventNode38",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2025C",
Tag: "Anniversary2018TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Upgrades/Skins/Wisp/DexWispSkin"]
}
},
{
Node: "EventNode12",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2024L",
Tag: "Anniversary2024TacAlert",
Reward: {
items: ["/Lotus/Types/StoreItems/Packages/OperatorDrifterDexBundle"]
}
},
{
Node: "EventNode26",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2024ChallengeModeB",
Tag: "Anniversary2024TacAlertCMB",
Reward: {
items: ["/Lotus/StoreItems/Types/Recipes/Components/UmbraFormaBlueprint"]
}
}
],
[
{
Node: "EventNode37",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2021I",
Tag: "Anniversary2021TacAlert",
Reward: {
items: [
"/Lotus/StoreItems/Upgrades/Skins/Armor/Dex2020Armor/Dex2020ArmorAArmor",
"/Lotus/StoreItems/Upgrades/Skins/Armor/Dex2020Armor/Dex2020ArmorCArmor",
"/Lotus/StoreItems/Upgrades/Skins/Armor/Dex2020Armor/Dex2020ArmorLArmor",
"/Lotus/StoreItems/Types/Game/CatbrowPet/CatbrowGeneticSignature"
],
countedItems: [
{
ItemType: "/Lotus/Types/Game/CatbrowPet/CatbrowGeneticSignature",
ItemCount: 10
}
]
}
},
{
Node: "EventNode9",
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyAnniversary2025B",
Tag: "Anniversary2025TacAlert",
Reward: {
items: ["/Lotus/StoreItems/Types/StoreItems/SuitCustomizations/ColourPickerAnniversaryEleven"]
}
}
]
];
goalsByWeek[config.worldState.anniversary].forEach((goal, i) => {
worldState.Goals.push({
_id: {
$oid:
"67c6d8e725b23feb" +
config.worldState?.anniversary!.toString(16).padStart(4, "0") +
i.toString(16).padStart(4, "0")
},
Activation: { $date: { $numberLong: "1745593200000" } },
Expiry: { $date: { $numberLong: "2000000000000" } },
Count: 0,
Goal: 1,
Success: 0,
Personal: true,
ClampNodeScores: true,
Node: goal.Node,
MissionKeyName: goal.MissionKeyName,
Desc: goal.Tag!.endsWith("CMB")
? "/Lotus/Language/Events/Anniversary2024ChallengeMode"
: "/Lotus/Language/G1Quests/Anniversary2017MissionTitle",
Icon: "/Lotus/Interface/Icons/Player/GlyphLotus12Anniversary.png",
Tag: goal.Tag!,
Reward: goal.Reward
});
});
}
if (config.worldState?.wolfHunt) { if (config.worldState?.wolfHunt) {
worldState.Goals.push({ worldState.Goals.push({
_id: { _id: {
@ -1964,7 +2185,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
"/Lotus/Types/Keys/WolfTacAlertReduxD" "/Lotus/Types/Keys/WolfTacAlertReduxD"
], ],
ConcurrentNodeReqs: [1, 2, 3], ConcurrentNodeReqs: [1, 2, 3],
ConcurrentNodes: ["EventNode28", "EventNode39", "EventNode40"], // Incompatible with Galleon Of Ghouls, Orphix Venom ConcurrentNodes: ["EventNode28", "EventNode39", "EventNode40"], // Incompatible with Galleon Of Ghouls, Orphix Venom, Warframe Anniversary
MissionKeyName: "/Lotus/Types/Keys/WolfTacAlertReduxA", MissionKeyName: "/Lotus/Types/Keys/WolfTacAlertReduxA",
Faction: "FC_GRINEER", Faction: "FC_GRINEER",
Desc: "/Lotus/Language/Alerts/WolfAlert", Desc: "/Lotus/Language/Alerts/WolfAlert",
@ -1995,6 +2216,18 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
}); });
} }
const tagsForOlderGoals: string[] = [
"Anniversary2018TacAlert",
"Anniversary2019TacAlert",
"Anniversary2020TacAlert",
"Anniversary2021TacAlert",
"Anniversary2022TacAlert",
"Anniversary2024TacAlert",
"Anniversary2024TacAlertCMA",
"Anniversary2025TacAlert",
"Anniversary2025TacAlertCMB"
];
if (config.worldState?.hallowedFlame) { if (config.worldState?.hallowedFlame) {
worldState.Goals.push( worldState.Goals.push(
{ {
@ -2019,7 +2252,7 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
Faction: "FC_INFESTATION", Faction: "FC_INFESTATION",
Desc: "/Lotus/Language/Events/TacAlertHalloweenLantern", Desc: "/Lotus/Language/Events/TacAlertHalloweenLantern",
Icon: "/Lotus/Interface/Icons/JackOLanternColour.png", Icon: "/Lotus/Interface/Icons/JackOLanternColour.png",
Tag: "Halloween19", Tag: config.unfaithfulBugFixes?.useAnniversaryTagForOldGoals ? tagsForOlderGoals[0] : "Halloween19",
InterimRewards: [ InterimRewards: [
{ items: ["/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst"] }, { items: ["/Lotus/StoreItems/Types/Items/MiscItems/OrokinCatalyst"] },
{ items: ["/Lotus/StoreItems/Types/Items/MiscItems/Forma"] } { items: ["/Lotus/StoreItems/Types/Items/MiscItems/Forma"] }
@ -2045,7 +2278,9 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
Desc: "/Lotus/Language/Events/TacAlertHalloweenLanternEndless", Desc: "/Lotus/Language/Events/TacAlertHalloweenLanternEndless",
Icon: "/Lotus/Interface/Icons/JackOLanternColour.png", Icon: "/Lotus/Interface/Icons/JackOLanternColour.png",
Tag: "Halloween19Endless", Tag: "Halloween19Endless",
PrereqGoalTags: ["Halloween19"], PrereqGoalTags: [
config.unfaithfulBugFixes?.useAnniversaryTagForOldGoals ? tagsForOlderGoals[0] : "Halloween19"
],
Reward: { Reward: {
items: [ items: [
"/Lotus/StoreItems/Upgrades/Skins/Effects/BatsEphemera", "/Lotus/StoreItems/Upgrades/Skins/Effects/BatsEphemera",
@ -2109,17 +2344,17 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
Success: 0, Success: 0,
Personal: true, Personal: true,
Bounty: true, Bounty: true,
Tag: "Halloween", Tag: config.unfaithfulBugFixes?.useAnniversaryTagForOldGoals ? tagsForOlderGoals[0] : "Halloween",
Faction: "FC_INFESTATION", Faction: "FC_INFESTATION",
Desc: "/Lotus/Language/G1Quests/TacAlertHalloweenTitle", Desc: "/Lotus/Language/G1Quests/TacAlertHalloweenTitle",
ToolTip: "/Lotus/Language/G1Quests/TacAlertHalloweenToolTip", ToolTip: "/Lotus/Language/G1Quests/TacAlertHalloweenToolTip",
Icon: "/Lotus/Interface/Icons/JackOLanternColour.png", Icon: "/Lotus/Interface/Icons/JackOLanternColour.png",
ClampNodeScores: true, ClampNodeScores: true,
Node: "EventNode2", Node: "EventNode2", // Incompatible with Warframe Anniversary
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyHalloween", MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyHalloween",
ConcurrentMissionKeyNames: ["/Lotus/Types/Keys/TacAlertKeyHalloweenBonus"], ConcurrentMissionKeyNames: ["/Lotus/Types/Keys/TacAlertKeyHalloweenBonus"],
ConcurrentNodeReqs: [1], ConcurrentNodeReqs: [1],
ConcurrentNodes: ["EventNode24"], // Incompatible with Hallowed Flame, Dog Days ConcurrentNodes: ["EventNode24"], // Incompatible with Hallowed Flame, Dog Days, Warframe Anniversary
InterimRewards: [rewards[year][0]], InterimRewards: [rewards[year][0]],
Reward: rewards[year][1] Reward: rewards[year][1]
}); });
@ -2135,7 +2370,9 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
Bounty: true, Bounty: true,
Best: true, Best: true,
Tag: "Halloween", Tag: "Halloween",
PrereqGoalTags: ["Halloween"], PrereqGoalTags: [
config.unfaithfulBugFixes?.useAnniversaryTagForOldGoals ? tagsForOlderGoals[0] : "Halloween"
],
Faction: "FC_INFESTATION", Faction: "FC_INFESTATION",
Desc: "Hallowed Nightmares - Time Attack", Desc: "Hallowed Nightmares - Time Attack",
ToolTip: "/Lotus/Language/G1Quests/TacAlertHalloweenToolTip", ToolTip: "/Lotus/Language/G1Quests/TacAlertHalloweenToolTip",
@ -2209,19 +2446,19 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
Personal: true, Personal: true,
Bounty: true, Bounty: true,
ClampNodeScores: true, ClampNodeScores: true,
Node: "EventNode18", Node: "EventNode18", // Incompatible with Warframe Anniversary
ConcurrentMissionKeyNames: [ ConcurrentMissionKeyNames: [
"/Lotus/Types/Keys/TacAlertKeyProxyRebellionTwo", "/Lotus/Types/Keys/TacAlertKeyProxyRebellionTwo",
"/Lotus/Types/Keys/TacAlertKeyProxyRebellionThree", "/Lotus/Types/Keys/TacAlertKeyProxyRebellionThree",
"/Lotus/Types/Keys/TacAlertKeyProxyRebellionFour" "/Lotus/Types/Keys/TacAlertKeyProxyRebellionFour"
], ],
ConcurrentNodeReqs: [1, 2, 3], ConcurrentNodeReqs: [1, 2, 3],
ConcurrentNodes: ["EventNode7", "EventNode4", "EventNode17"], // Incompatible with Orphix venom ConcurrentNodes: ["EventNode7", "EventNode4", "EventNode17"], // Incompatible with Orphix venom, Warframe Anniversary
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyProxyRebellionOne", MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyProxyRebellionOne",
Faction: "FC_CORPUS", Faction: "FC_CORPUS",
Desc: "/Lotus/Language/Alerts/TacAlertProxyRebellion", Desc: "/Lotus/Language/Alerts/TacAlertProxyRebellion",
Icon: "/Lotus/Materials/Emblems/BountyBadge_e.png", Icon: "/Lotus/Materials/Emblems/BountyBadge_e.png",
Tag: "ProxyRebellion", Tag: config.unfaithfulBugFixes?.useAnniversaryTagForOldGoals ? tagsForOlderGoals[1] : "ProxyRebellion",
InterimRewards: rewards[year].slice(0, 2), InterimRewards: rewards[year].slice(0, 2),
Reward: rewards[year][2], Reward: rewards[year][2],
BonusReward: rewards[year][3] BonusReward: rewards[year][3]
@ -2240,12 +2477,12 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
Success: 0, Success: 0,
Personal: true, Personal: true,
Bounty: true, Bounty: true,
Tag: "NightwatchTacAlert", Tag: config.unfaithfulBugFixes?.useAnniversaryTagForOldGoals ? tagsForOlderGoals[2] : "NightwatchTacAlert",
Faction: "FC_GRINEER", Faction: "FC_GRINEER",
Desc: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertTitle", Desc: "/Lotus/Language/G1Quests/ProjectNightwatchTacAlertTitle",
Icon: "/Lotus/Materials/Emblems/BountyBadge_e.png", Icon: "/Lotus/Materials/Emblems/BountyBadge_e.png",
ClampNodeScores: true, ClampNodeScores: true,
Node: "EventNode9", Node: "EventNode9", // Incompatible with Warframe Anniversary
MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyProjectNightwatchEasy", MissionKeyName: "/Lotus/Types/Keys/TacAlertKeyProjectNightwatchEasy",
ConcurrentMissionKeyNames: [ ConcurrentMissionKeyNames: [
"/Lotus/Types/Keys/TacAlertKeyProjectNightwatch", "/Lotus/Types/Keys/TacAlertKeyProjectNightwatch",

View File

@ -73,8 +73,9 @@ interface IWsMsgToClient {
auth_fail?: { auth_fail?: {
isRegister: boolean; isRegister: boolean;
}; };
logged_out?: boolean; nonce_updated?: boolean;
update_inventory?: boolean; update_inventory?: boolean;
logged_out?: boolean;
} }
const wsOnConnect = (ws: ws, req: http.IncomingMessage): void => { const wsOnConnect = (ws: ws, req: http.IncomingMessage): void => {

View File

@ -937,29 +937,35 @@
<input class="form-check-input" type="checkbox" id="worldState.varziaFullyStocked" /> <input class="form-check-input" type="checkbox" id="worldState.varziaFullyStocked" />
<label class="form-check-label" for="worldState.varziaFullyStocked" data-loc="worldState_varziaFullyStocked"></label> <label class="form-check-label" for="worldState.varziaFullyStocked" data-loc="worldState_varziaFullyStocked"></label>
</div> </div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="unfaithfulBugFixes.useAnniversaryTagForOldGoals" />
<label class="form-check-label" for="unfaithfulBugFixes.useAnniversaryTagForOldGoals" data-loc="worldState_useAnniversaryTagForOldGoals"></label>
<abbr data-loc-inc="worldState_anniversary"><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"> <div class="form-check">
<input class="form-check-input" type="checkbox" id="worldState.wolfHunt" /> <input class="form-check-input" type="checkbox" id="worldState.wolfHunt" />
<label class="form-check-label" for="worldState.wolfHunt" data-loc="worldState_wolfHunt"></label> <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> <abbr data-loc-inc="worldState_galleonOfGhouls|worldState_orphixVenom|worldState_anniversary"><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>
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" id="worldState.orphixVenom" /> <input class="form-check-input" type="checkbox" id="worldState.orphixVenom" />
<label class="form-check-label" for="worldState.orphixVenom" data-loc="worldState_orphixVenom"></label> <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|worldState_wolfHunt|worldState_proxyRebellion|worldState_anniversary"><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>
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" id="worldState.longShadow" /> <input class="form-check-input" type="checkbox" id="worldState.longShadow" />
<label class="form-check-label" for="worldState.longShadow" data-loc="worldState_longShadow"></label> <label class="form-check-label" for="worldState.longShadow" data-loc="worldState_longShadow"></label>
<abbr data-loc-inc="worldState_anniversary"><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>
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" id="worldState.hallowedFlame" /> <input class="form-check-input" type="checkbox" id="worldState.hallowedFlame" />
<label class="form-check-label" for="worldState.hallowedFlame" data-loc="worldState_hallowedFlame"></label> <label class="form-check-label" for="worldState.hallowedFlame" data-loc="worldState_hallowedFlame"></label>
<abbr data-loc-inc="worldState_hallowedNightmares|worldState_dogDays"><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_hallowedNightmares|worldState_dogDays|worldState_anniversary"><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>
<div class="form-group mt-2 d-flex gap-2"> <div class="form-group mt-2 d-flex gap-2">
<div class="flex-fill"> <div class="flex-fill">
<label class="form-label" for="worldState.hallowedNightmares" data-loc="worldState_hallowedNightmares"></label> <label class="form-label" for="worldState.hallowedNightmares" data-loc="worldState_hallowedNightmares"></label>
<abbr data-loc-inc="worldState_hallowedFlame|worldState_dogDays"><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_hallowedFlame|worldState_dogDays|worldState_anniversary"><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.hallowedNightmares" data-default="false"> <select class="form-control" id="worldState.hallowedNightmares" data-default="false">
<option value="true" data-loc="enabled"></option> <option value="true" data-loc="enabled"></option>
<option value="false" data-loc="disabled"></option> <option value="false" data-loc="disabled"></option>
@ -968,16 +974,16 @@
<div class="flex-fill"> <div class="flex-fill">
<label class="form-label" for="worldState.hallowedNightmaresRewardsOverride" data-loc="worldState_hallowedNightmaresRewards"></label> <label class="form-label" for="worldState.hallowedNightmaresRewardsOverride" data-loc="worldState_hallowedNightmaresRewards"></label>
<select class="form-control" id="worldState.hallowedNightmaresRewardsOverride" data-default="0"> <select class="form-control" id="worldState.hallowedNightmaresRewardsOverride" data-default="0">
<option value="0" data-loc="worldState_from_year" data-loc-year="2018"></option> <option value="0" data-loc="worldState_from_year" data-loc-replace="2018"></option>
<option value="1" data-loc="worldState_from_year" data-loc-year="2016"></option> <option value="1" data-loc="worldState_from_year" data-loc-replace="2016"></option>
<option value="2" data-loc="worldState_from_year" data-loc-year="2015"></option> <option value="2" data-loc="worldState_from_year" data-loc-replace="2015"></option>
</select> </select>
</div> </div>
</div> </div>
<div class="form-group mt-2 d-flex gap-2"> <div class="form-group mt-2 d-flex gap-2">
<div class="flex-fill"> <div class="flex-fill">
<label class="form-label" for="worldState.proxyRebellion" data-loc="worldState_proxyRebellion"></label> <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> <abbr data-loc-inc="worldState_anniversary|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"> <select class="form-control" id="worldState.proxyRebellion" data-default="false">
<option value="true" data-loc="enabled"></option> <option value="true" data-loc="enabled"></option>
<option value="false" data-loc="disabled"></option> <option value="false" data-loc="disabled"></option>
@ -986,14 +992,14 @@
<div class="flex-fill"> <div class="flex-fill">
<label class="form-label" for="worldState.proxyRebellionRewardsOverride" data-loc="worldState_proxyRebellionRewards"></label> <label class="form-label" for="worldState.proxyRebellionRewardsOverride" data-loc="worldState_proxyRebellionRewards"></label>
<select class="form-control" id="worldState.proxyRebellionRewardsOverride" data-default="0"> <select class="form-control" id="worldState.proxyRebellionRewardsOverride" data-default="0">
<option value="0" data-loc="worldState_from_year" data-loc-year="2019"></option> <option value="0" data-loc="worldState_from_year" data-loc-replace="2019"></option>
<option value="1" data-loc="worldState_from_year" data-loc-year="2018"></option> <option value="1" data-loc="worldState_from_year" data-loc-replace="2018"></option>
</select> </select>
</div> </div>
</div> </div>
<div class="form-group mt-2"> <div class="form-group mt-2">
<label class="form-label" for="worldState.galleonOfGhouls" data-loc="worldState_galleonOfGhouls"></label> <label class="form-label" for="worldState.galleonOfGhouls" data-loc="worldState_galleonOfGhouls"></label>
<abbr data-loc-inc="worldState_wolfHunt"><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_wolfHunt|worldState_anniversary|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.galleonOfGhouls" data-default="0"> <select class="form-control" id="worldState.galleonOfGhouls" data-default="0">
<option value="0" data-loc="disabled"></option> <option value="0" data-loc="disabled"></option>
<option value="1" data-loc="worldState_we1"></option> <option value="1" data-loc="worldState_we1"></option>
@ -1001,6 +1007,21 @@
<option value="3" data-loc="worldState_we3"></option> <option value="3" data-loc="worldState_we3"></option>
</select> </select>
</div> </div>
<div class="form-group mt-2">
<label class="form-label" for="worldState.anniversary" data-loc="worldState_anniversary"></label>
<abbr data-loc-inc="worldState_useAnniversaryTagForOldGoals|worldState_wolfHunt|worldState_galleonOfGhouls|worldState_hallowedNightmares|worldState_hallowedFlame|worldState_dogDays|worldState_proxyRebellion|worldState_longShadow|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.anniversary" data-default="null">
<option value="null" data-loc="disabled"></option>
<option value="0" data-loc="worldState_week" data-loc-replace="1"></option>
<option value="1" data-loc="worldState_week" data-loc-replace="2"></option>
<option value="2" data-loc="worldState_week" data-loc-replace="3"></option>
<option value="3" data-loc="worldState_week" data-loc-replace="4"></option>
<option value="4" data-loc="worldState_week" data-loc-replace="5"></option>
<option value="5" data-loc="worldState_week" data-loc-replace="6"></option>
<option value="6" data-loc="worldState_week" data-loc-replace="7"></option>
<option value="7" data-loc="worldState_week" data-loc-replace="8"></option>
</select>
</div>
<div class="form-group mt-2"> <div class="form-group mt-2">
<label class="form-label" for="worldState.ghoulEmergenceOverride" data-loc="worldState_ghoulEmergence"></label> <label class="form-label" for="worldState.ghoulEmergenceOverride" data-loc="worldState_ghoulEmergence"></label>
<select class="form-control" id="worldState.ghoulEmergenceOverride" data-default="null"> <select class="form-control" id="worldState.ghoulEmergenceOverride" data-default="null">
@ -1028,7 +1049,7 @@
<div class="form-group mt-2 d-flex gap-2"> <div class="form-group mt-2 d-flex gap-2">
<div class="flex-fill"> <div class="flex-fill">
<label class="form-label" for="worldState.dogDaysOverride" data-loc="worldState_dogDays"></label> <label class="form-label" for="worldState.dogDaysOverride" data-loc="worldState_dogDays"></label>
<abbr data-loc-inc="worldState_hallowedFlame|worldState_hallowedNightmares"><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_hallowedFlame|worldState_hallowedNightmares|worldState_anniversary"><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.dogDaysOverride" data-default="null"> <select class="form-control" id="worldState.dogDaysOverride" data-default="null">
<option value="null" data-loc="normal"></option> <option value="null" data-loc="normal"></option>
<option value="true" data-loc="enabled"></option> <option value="true" data-loc="enabled"></option>
@ -1039,10 +1060,10 @@
<label class="form-label" for="worldState.dogDaysRewardsOverride" data-loc="worldState_dogDaysRewards"></label> <label class="form-label" for="worldState.dogDaysRewardsOverride" data-loc="worldState_dogDaysRewards"></label>
<select class="form-control" id="worldState.dogDaysRewardsOverride" data-default="null"> <select class="form-control" id="worldState.dogDaysRewardsOverride" data-default="null">
<option value="null" data-loc="normal"></option> <option value="null" data-loc="normal"></option>
<option value="3" data-loc="worldState_from_year" data-loc-year="2025"></option> <option value="3" data-loc="worldState_from_year" data-loc-replace="2025"></option>
<option value="2" data-loc="worldState_from_year" data-loc-year="2024"></option> <option value="2" data-loc="worldState_from_year" data-loc-replace="2024"></option>
<option value="1" data-loc="worldState_from_year" data-loc-year="2023"></option> <option value="1" data-loc="worldState_from_year" data-loc-replace="2023"></option>
<option value="0" data-loc="worldState_pre_year" data-loc-year="2023"></option> <option value="0" data-loc="worldState_pre_year" data-loc-replace="2023"></option>
</select> </select>
</div> </div>
</div> </div>

View File

@ -81,12 +81,15 @@ function openWebSocket() {
single.loadRoute("/webui/"); single.loadRoute("/webui/");
} }
} }
if ("logged_out" in msg) { if ("nonce_updated" in msg) {
sendAuth(); sendAuth();
} }
if ("update_inventory" in msg) { if ("update_inventory" in msg) {
updateInventory(); updateInventory();
} }
if ("logged_out" in msg) {
logout();
}
}; };
window.ws.onclose = function () { window.ws.onclose = function () {
ws_is_open = false; ws_is_open = false;
@ -145,13 +148,20 @@ function doLogout() {
} }
} }
function renameAccount() { function renameAccount(taken_name) {
const newname = window.prompt(loc("code_changeNameConfirm")); const newname = window.prompt(
(taken_name ? loc("code_changeNameRetry").split("|NAME|").join(taken_name) + " " : "") +
loc("code_changeNameConfirm")
);
if (newname) { if (newname) {
revalidateAuthz().then(() => { revalidateAuthz().then(() => {
fetch("/custom/renameAccount?" + window.authz + "&newname=" + newname).then(() => { fetch("/custom/renameAccount?" + window.authz + "&newname=" + newname).then(res => {
$(".displayname").text(newname); if (res.status == 409) {
updateLocElements(); renameAccount(newname);
} else {
$(".displayname").text(newname);
updateLocElements();
}
}); });
}); });
} }
@ -206,12 +216,12 @@ function updateLocElements() {
const incWith = elm const incWith = elm
.getAttribute("data-loc-inc") .getAttribute("data-loc-inc")
.split("|") .split("|")
.map(key => loc(key)) .map(key => loc(key).replace(/<[^>]+>/g, ""))
.join(", "); .join(", ");
elm.title = `${loc("worldState_incompatibleWith")} ${incWith}`; elm.title = `${loc("worldState_incompatibleWith")} ${incWith}`;
}); });
document.querySelectorAll("[data-loc-year]").forEach(elm => { document.querySelectorAll("[data-loc-replace]").forEach(elm => {
elm.innerHTML = elm.innerHTML.replace("|YEAR|", elm.getAttribute("data-loc-year")); elm.innerHTML = elm.innerHTML.replace("|VAL|", elm.getAttribute("data-loc-replace"));
}); });
} }
@ -662,166 +672,174 @@ function updateInventory() {
"KubrowPets" "KubrowPets"
].forEach(category => { ].forEach(category => {
document.getElementById(category + "-list").innerHTML = ""; document.getElementById(category + "-list").innerHTML = "";
data[category].forEach(item => { data[category]
const tr = document.createElement("tr"); .sort((a, b) => (b.Favorite ? 1 : 0) - (a.Favorite ? 1 : 0))
tr.setAttribute("data-item-type", item.ItemType); .forEach(item => {
{ const tr = document.createElement("tr");
const td = document.createElement("td"); tr.setAttribute("data-item-type", item.ItemType);
td.textContent = itemMap[item.ItemType]?.name ?? item.ItemType; {
if (item.ItemName) { const td = document.createElement("td");
const pipeIndex = item.ItemName.indexOf("|"); td.textContent = itemMap[item.ItemType]?.name ?? item.ItemType;
if (pipeIndex != -1) { if (item.ItemName) {
td.textContent = item.ItemName.substr(1 + pipeIndex) + " " + td.textContent; const pipeIndex = item.ItemName.indexOf("|");
} else { if (pipeIndex != -1) {
td.textContent = item.ItemName + " (" + td.textContent + ")"; td.textContent = item.ItemName.substr(1 + pipeIndex) + " " + td.textContent;
} else {
td.textContent = item.ItemName + " (" + td.textContent + ")";
}
} }
if (item.Details?.Name) {
td.textContent = item.Details.Name + " (" + td.textContent + ")";
}
if (item.ModularParts && item.ModularParts.length) {
td.textContent += " [";
item.ModularParts.forEach(part => {
td.textContent += " " + (itemMap[part]?.name ?? part) + ",";
});
td.textContent = td.textContent.slice(0, -1) + " ]";
}
tr.appendChild(td);
} }
if (item.Details?.Name) { {
td.textContent = item.Details.Name + " (" + td.textContent + ")"; const td = document.createElement("td");
} td.classList = "text-end text-nowrap";
if (item.ModularParts && item.ModularParts.length) {
td.textContent += " [";
item.ModularParts.forEach(part => {
td.textContent += " " + (itemMap[part]?.name ?? part) + ",";
});
td.textContent = td.textContent.slice(0, -1) + " ]";
}
tr.appendChild(td);
}
{
const td = document.createElement("td");
td.classList = "text-end text-nowrap";
let maxXP = Math.pow(uniqueLevelCaps[item.ItemType] ?? 30, 2) * 1000; let maxXP = Math.pow(uniqueLevelCaps[item.ItemType] ?? 30, 2) * 1000;
if ( if (
category != "Suits" && category != "Suits" &&
category != "SpaceSuits" && category != "SpaceSuits" &&
category != "Sentinels" && category != "Sentinels" &&
category != "Hoverboards" && category != "Hoverboards" &&
category != "MechSuits" && category != "MechSuits" &&
category != "MoaPets" && category != "MoaPets" &&
category != "KubrowPets" category != "KubrowPets"
) { ) {
maxXP /= 2; maxXP /= 2;
} }
let anyExaltedMissingXP = false; let anyExaltedMissingXP = false;
if (item.XP >= maxXP && item.ItemType in itemMap && "exalted" in itemMap[item.ItemType]) { if (item.XP >= maxXP && item.ItemType in itemMap && "exalted" in itemMap[item.ItemType]) {
for (const exaltedType of itemMap[item.ItemType].exalted) { for (const exaltedType of itemMap[item.ItemType].exalted) {
const exaltedItem = data.SpecialItems.find(x => x.ItemType == exaltedType); const exaltedItem = data.SpecialItems.find(x => x.ItemType == exaltedType);
if (exaltedItem) { if (exaltedItem) {
const exaltedCap = itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000; const exaltedCap =
if (exaltedItem.XP < exaltedCap) { itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000;
anyExaltedMissingXP = true; if (exaltedItem.XP < exaltedCap) {
break; anyExaltedMissingXP = true;
break;
}
} }
} }
} }
} if (item.XP < maxXP || anyExaltedMissingXP) {
if (item.XP < maxXP || anyExaltedMissingXP) { const a = document.createElement("a");
const a = document.createElement("a"); a.href = "#";
a.href = "#"; a.onclick = function (event) {
a.onclick = function (event) { event.preventDefault();
event.preventDefault(); revalidateAuthz().then(() => {
revalidateAuthz().then(() => { const promises = [];
const promises = []; if (item.XP < maxXP) {
if (item.XP < maxXP) { promises.push(addGearExp(category, item.ItemId.$oid, maxXP - item.XP));
promises.push(addGearExp(category, item.ItemId.$oid, maxXP - item.XP)); }
} if ("exalted" in itemMap[item.ItemType]) {
if ("exalted" in itemMap[item.ItemType]) { for (const exaltedType of itemMap[item.ItemType].exalted) {
for (const exaltedType of itemMap[item.ItemType].exalted) { const exaltedItem = data.SpecialItems.find(
const exaltedItem = data.SpecialItems.find(x => x.ItemType == exaltedType); x => x.ItemType == exaltedType
if (exaltedItem) { );
const exaltedCap = if (exaltedItem) {
itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000; const exaltedCap =
if (exaltedItem.XP < exaltedCap) { itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000;
promises.push( if (exaltedItem.XP < exaltedCap) {
addGearExp( promises.push(
"SpecialItems", addGearExp(
exaltedItem.ItemId.$oid, "SpecialItems",
exaltedCap - exaltedItem.XP exaltedItem.ItemId.$oid,
) exaltedCap - exaltedItem.XP
); )
);
}
} }
} }
} }
} Promise.all(promises).then(() => {
Promise.all(promises).then(() => { updateInventory();
updateInventory(); });
}); });
}); };
}; a.title = loc("code_maxRank");
a.title = loc("code_maxRank"); a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`; td.appendChild(a);
td.appendChild(a);
}
if (
["Suits", "LongGuns", "Pistols", "Melee", "SpaceGuns", "SpaceMelee"].includes(category) ||
modularWeapons.includes(item.ItemType)
) {
const a = document.createElement("a");
a.href = "/webui/detailedView?productCategory=" + category + "&itemId=" + item.ItemId.$oid;
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z"/></svg>`;
td.appendChild(a);
}
if (!(item.Features & 8) && modularWeapons.includes(item.ItemType)) {
const a = document.createElement("a");
a.href = "#";
a.onclick = function (event) {
event.preventDefault();
gildEquipment(category, item.ItemId.$oid);
};
a.title = loc("code_gild");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z"/></svg>`;
td.appendChild(a);
}
if (category == "KubrowPets") {
const a = document.createElement("a");
a.href = "#";
a.onclick = function (event) {
event.preventDefault();
maturePet(item.ItemId.$oid, !item.Details.IsPuppy);
};
if (item.Details.IsPuppy) {
a.title = loc("code_mature");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z"/></svg>`;
} else {
a.title = loc("code_unmature");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z"/></svg>`;
} }
td.appendChild(a);
} if (
{ ["Suits", "LongGuns", "Pistols", "Melee", "SpaceGuns", "SpaceMelee"].includes(
const a = document.createElement("a"); category
a.href = "#"; ) ||
a.onclick = function (event) { modularWeapons.includes(item.ItemType)
event.preventDefault(); ) {
const name = prompt(loc("code_renamePrompt")); const a = document.createElement("a");
if (name !== null) { a.href =
renameGear(category, item.ItemId.$oid, name); "/webui/detailedView?productCategory=" + category + "&itemId=" + item.ItemId.$oid;
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z"/></svg>`;
td.appendChild(a);
}
if (!(item.Features & 8) && modularWeapons.includes(item.ItemType)) {
const a = document.createElement("a");
a.href = "#";
a.onclick = function (event) {
event.preventDefault();
gildEquipment(category, item.ItemId.$oid);
};
a.title = loc("code_gild");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z"/></svg>`;
td.appendChild(a);
}
if (category == "KubrowPets") {
const a = document.createElement("a");
a.href = "#";
a.onclick = function (event) {
event.preventDefault();
maturePet(item.ItemId.$oid, !item.Details.IsPuppy);
};
if (item.Details.IsPuppy) {
a.title = loc("code_mature");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z"/></svg>`;
} else {
a.title = loc("code_unmature");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z"/></svg>`;
} }
}; td.appendChild(a);
a.title = loc("code_rename"); }
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>`; {
td.appendChild(a); const a = document.createElement("a");
a.href = "#";
a.onclick = function (event) {
event.preventDefault();
const name = prompt(loc("code_renamePrompt"));
if (name !== null) {
renameGear(category, item.ItemId.$oid, name);
}
};
a.title = loc("code_rename");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>`;
td.appendChild(a);
}
{
const a = document.createElement("a");
a.href = "#";
a.onclick = function (event) {
event.preventDefault();
document.getElementById(category + "-list").removeChild(tr);
disposeOfGear(category, item.ItemId.$oid);
};
a.title = loc("code_remove");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
td.appendChild(a);
}
tr.appendChild(td);
} }
{ document.getElementById(category + "-list").appendChild(tr);
const a = document.createElement("a"); });
a.href = "#";
a.onclick = function (event) {
event.preventDefault();
document.getElementById(category + "-list").removeChild(tr);
disposeOfGear(category, item.ItemId.$oid);
};
a.title = loc("code_remove");
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
td.appendChild(a);
}
tr.appendChild(td);
}
document.getElementById(category + "-list").appendChild(tr);
});
}); });
document.getElementById("EvolutionProgress-list").innerHTML = ""; document.getElementById("EvolutionProgress-list").innerHTML = "";

View File

@ -10,6 +10,7 @@ dict = {
code_loginFail: `Anmeldung fehlgeschlagen. Bitte überprüfe deine Angaben.`, code_loginFail: `Anmeldung fehlgeschlagen. Bitte überprüfe deine Angaben.`,
code_regFail: `Registrierung fehlgeschlagen. Account existiert bereits?`, code_regFail: `Registrierung fehlgeschlagen. Account existiert bereits?`,
code_changeNameConfirm: `In welchen Namen möchtest du deinen Account umbenennen?`, code_changeNameConfirm: `In welchen Namen möchtest du deinen Account umbenennen?`,
code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`,
code_deleteAccountConfirm: `Bist du sicher, dass du deinen Account |DISPLAYNAME| (|EMAIL|) löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.`, code_deleteAccountConfirm: `Bist du sicher, dass du deinen Account |DISPLAYNAME| (|EMAIL|) löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.`,
code_archgun: `Arch-Gewehr`, code_archgun: `Arch-Gewehr`,
code_melee: `Nahkampf`, code_melee: `Nahkampf`,
@ -246,6 +247,8 @@ dict = {
worldState_baroTennoConRelay: `Baros TennoCon Relais`, worldState_baroTennoConRelay: `Baros TennoCon Relais`,
worldState_starDays: `Sternen-Tage`, worldState_starDays: `Sternen-Tage`,
worldState_galleonOfGhouls: `Galeone der Ghule`, worldState_galleonOfGhouls: `Galeone der Ghule`,
worldState_anniversary: `[UNTRANSLATED] Warframe Anniversary`,
worldState_useAnniversaryTagForOldGoals: `[UNTRANSLATED] Use <code>Tag</code> from Warframe Anniversary for old Events`,
worldState_ghoulEmergence: `Ghul Ausrottung`, worldState_ghoulEmergence: `Ghul Ausrottung`,
worldState_plagueStar: `Plagenstern`, worldState_plagueStar: `Plagenstern`,
worldState_dogDays: `Hitzefrei`, worldState_dogDays: `Hitzefrei`,
@ -262,8 +265,9 @@ dict = {
worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`, worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`,
worldState_eightClaw: `Acht Klauen`, worldState_eightClaw: `Acht Klauen`,
worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`, worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
worldState_from_year: `[UNTRANSLATED] from |YEAR|`, worldState_from_year: `[UNTRANSLATED] from |VAL|`,
worldState_pre_year: `[UNTRANSLATED] pre |YEAR|`, worldState_pre_year: `[UNTRANSLATED] pre |VAL|`,
worldState_week: `[UNTRANSLATED] Week |VAL|`,
worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`, worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`,
enabled: `Aktiviert`, enabled: `Aktiviert`,
disabled: `Deaktiviert`, disabled: `Deaktiviert`,

View File

@ -9,6 +9,7 @@ dict = {
code_loginFail: `Login failed. Double-check the email and password.`, code_loginFail: `Login failed. Double-check the email and password.`,
code_regFail: `Registration failed. Account already exists?`, code_regFail: `Registration failed. Account already exists?`,
code_changeNameConfirm: `What would you like to change your account name to?`, code_changeNameConfirm: `What would you like to change your account name to?`,
code_changeNameRetry: `|NAME| is already taken.`,
code_deleteAccountConfirm: `Are you sure you want to delete your account |DISPLAYNAME| (|EMAIL|)? This action cannot be undone.`, code_deleteAccountConfirm: `Are you sure you want to delete your account |DISPLAYNAME| (|EMAIL|)? This action cannot be undone.`,
code_archgun: `Archgun`, code_archgun: `Archgun`,
code_melee: `Melee`, code_melee: `Melee`,
@ -245,6 +246,8 @@ dict = {
worldState_baroTennoConRelay: `Baro's TennoCon Relay`, worldState_baroTennoConRelay: `Baro's TennoCon Relay`,
worldState_starDays: `Star Days`, worldState_starDays: `Star Days`,
worldState_galleonOfGhouls: `Galleon of Ghouls`, worldState_galleonOfGhouls: `Galleon of Ghouls`,
worldState_anniversary: `Warframe Anniversary`,
worldState_useAnniversaryTagForOldGoals: `Use <code>Tag</code> from Warframe Anniversary for old Events`,
worldState_ghoulEmergence: `Ghoul Purge`, worldState_ghoulEmergence: `Ghoul Purge`,
worldState_plagueStar: `Plague Star`, worldState_plagueStar: `Plague Star`,
worldState_dogDays: `Dog Days`, worldState_dogDays: `Dog Days`,
@ -261,8 +264,9 @@ dict = {
worldState_bellyOfTheBeastProgressOverride: `Belly of the Beast Progress`, worldState_bellyOfTheBeastProgressOverride: `Belly of the Beast Progress`,
worldState_eightClaw: `Eight Claw`, worldState_eightClaw: `Eight Claw`,
worldState_eightClawProgressOverride: `Eight Claw Progress`, worldState_eightClawProgressOverride: `Eight Claw Progress`,
worldState_from_year: `from |YEAR|`, worldState_from_year: `from |VAL|`,
worldState_pre_year: `pre |YEAR|`, worldState_pre_year: `pre |VAL|`,
worldState_week: `Week |VAL|`,
worldState_incompatibleWith: `Incompatible with:`, worldState_incompatibleWith: `Incompatible with:`,
enabled: `Enabled`, enabled: `Enabled`,
disabled: `Disabled`, disabled: `Disabled`,

View File

@ -10,6 +10,7 @@ dict = {
code_loginFail: `Error al iniciar sesión. Verifica el correo electrónico y la contraseña.`, code_loginFail: `Error al iniciar sesión. Verifica el correo electrónico y la contraseña.`,
code_regFail: `Error al registrar la cuenta. ¿Ya existe una cuenta con este correo?`, code_regFail: `Error al registrar la cuenta. ¿Ya existe una cuenta con este correo?`,
code_changeNameConfirm: `¿Qué nombre te gustaría ponerle a tu cuenta?`, code_changeNameConfirm: `¿Qué nombre te gustaría ponerle a tu cuenta?`,
code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`,
code_deleteAccountConfirm: `¿Estás seguro de que deseas eliminar tu cuenta |DISPLAYNAME| (|EMAIL|)? Esta acción es permanente.`, code_deleteAccountConfirm: `¿Estás seguro de que deseas eliminar tu cuenta |DISPLAYNAME| (|EMAIL|)? Esta acción es permanente.`,
code_archgun: `Archcañón`, code_archgun: `Archcañón`,
code_melee: `Cuerpo a cuerpo`, code_melee: `Cuerpo a cuerpo`,
@ -246,6 +247,8 @@ dict = {
worldState_baroTennoConRelay: `Repetidor de Baro de la TennoCon`, worldState_baroTennoConRelay: `Repetidor de Baro de la TennoCon`,
worldState_starDays: `Días estelares`, worldState_starDays: `Días estelares`,
worldState_galleonOfGhouls: `Galeón de Gules`, worldState_galleonOfGhouls: `Galeón de Gules`,
worldState_anniversary: `[UNTRANSLATED] Warframe Anniversary`,
worldState_useAnniversaryTagForOldGoals: `[UNTRANSLATED] Use <code>Tag</code> from Warframe Anniversary for old Events`,
worldState_ghoulEmergence: `Purga de Gules`, worldState_ghoulEmergence: `Purga de Gules`,
worldState_plagueStar: `Estrella Infestada`, worldState_plagueStar: `Estrella Infestada`,
worldState_dogDays: `Canícula`, worldState_dogDays: `Canícula`,
@ -262,8 +265,9 @@ dict = {
worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`, worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`,
worldState_eightClaw: `Octava Garra`, worldState_eightClaw: `Octava Garra`,
worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`, worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
worldState_from_year: `de |YEAR|`, worldState_from_year: `de |VAL|`,
worldState_pre_year: `antes de |YEAR|`, worldState_pre_year: `antes de |VAL|`,
worldState_week: `[UNTRANSLATED] Week |VAL|`,
worldState_incompatibleWith: `No compatible con:`, worldState_incompatibleWith: `No compatible con:`,
enabled: `Activado`, enabled: `Activado`,
disabled: `Desactivado`, disabled: `Desactivado`,

View File

@ -10,6 +10,7 @@ dict = {
code_loginFail: `Connexion échouée. Vérifiez le mot de passe.`, code_loginFail: `Connexion échouée. Vérifiez le mot de passe.`,
code_regFail: `Enregistrement impossible. Compte existant?`, code_regFail: `Enregistrement impossible. Compte existant?`,
code_changeNameConfirm: `Nouveau nom du compte :`, code_changeNameConfirm: `Nouveau nom du compte :`,
code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`,
code_deleteAccountConfirm: `Supprimer |DISPLAYNAME| (|EMAIL|) ? Cette action est irreversible.`, code_deleteAccountConfirm: `Supprimer |DISPLAYNAME| (|EMAIL|) ? Cette action est irreversible.`,
code_archgun: `Archgun`, code_archgun: `Archgun`,
code_melee: `Melee`, code_melee: `Melee`,
@ -246,6 +247,8 @@ dict = {
worldState_baroTennoConRelay: `Relais Baro TennoCon`, worldState_baroTennoConRelay: `Relais Baro TennoCon`,
worldState_starDays: `Jours Stellaires`, worldState_starDays: `Jours Stellaires`,
worldState_galleonOfGhouls: `Galion des Goules`, worldState_galleonOfGhouls: `Galion des Goules`,
worldState_anniversary: `[UNTRANSLATED] Warframe Anniversary`,
worldState_useAnniversaryTagForOldGoals: `[UNTRANSLATED] Use <code>Tag</code> from Warframe Anniversary for old Events`,
worldState_ghoulEmergence: `Purge des Goules`, worldState_ghoulEmergence: `Purge des Goules`,
worldState_plagueStar: `Fléau Céleste`, worldState_plagueStar: `Fléau Céleste`,
worldState_dogDays: `Bataille d'Eau`, worldState_dogDays: `Bataille d'Eau`,
@ -262,8 +265,9 @@ dict = {
worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`, worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`,
worldState_eightClaw: `Huitième Griffe`, worldState_eightClaw: `Huitième Griffe`,
worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`, worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
worldState_from_year: `[UNTRANSLATED] from |YEAR|`, worldState_from_year: `[UNTRANSLATED] from |VAL|`,
worldState_pre_year: `[UNTRANSLATED] pre |YEAR|`, worldState_pre_year: `[UNTRANSLATED] pre |VAL|`,
worldState_week: `[UNTRANSLATED] Week |VAL|`,
worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`, worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`,
enabled: `Activé`, enabled: `Activé`,
disabled: `Désactivé`, disabled: `Désactivé`,

View File

@ -10,6 +10,7 @@ dict = {
code_loginFail: `Не удалось войти. Проверьте адрес электронной почты и пароль.`, code_loginFail: `Не удалось войти. Проверьте адрес электронной почты и пароль.`,
code_regFail: `Не удалось зарегистрироваться. Учетная запись уже существует?`, code_regFail: `Не удалось зарегистрироваться. Учетная запись уже существует?`,
code_changeNameConfirm: `Какое имя вы хотите установить для своей учетной записи?`, code_changeNameConfirm: `Какое имя вы хотите установить для своей учетной записи?`,
code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`,
code_deleteAccountConfirm: `Вы уверены, что хотите удалить аккаунт |DISPLAYNAME| (|EMAIL|)? Это действие нельзя отменить.`, code_deleteAccountConfirm: `Вы уверены, что хотите удалить аккаунт |DISPLAYNAME| (|EMAIL|)? Это действие нельзя отменить.`,
code_archgun: `Арч-Пушка`, code_archgun: `Арч-Пушка`,
code_melee: `Ближний бой`, code_melee: `Ближний бой`,
@ -246,6 +247,8 @@ dict = {
worldState_baroTennoConRelay: `Реле Баро TennoCon`, worldState_baroTennoConRelay: `Реле Баро TennoCon`,
worldState_starDays: `Звёздные дни`, worldState_starDays: `Звёздные дни`,
worldState_galleonOfGhouls: `Галеон Гулей`, worldState_galleonOfGhouls: `Галеон Гулей`,
worldState_anniversary: `Годовщина Warframe`,
worldState_useAnniversaryTagForOldGoals: `Использовать <code>Tag</code> из Годовщины Warframe для старых событий`,
worldState_ghoulEmergence: `Избавление от гулей`, worldState_ghoulEmergence: `Избавление от гулей`,
worldState_plagueStar: `Чумная звезда`, worldState_plagueStar: `Чумная звезда`,
worldState_dogDays: `Знойные дни`, worldState_dogDays: `Знойные дни`,
@ -262,8 +265,9 @@ dict = {
worldState_bellyOfTheBeastProgressOverride: `Прогресс Чрева зверя`, worldState_bellyOfTheBeastProgressOverride: `Прогресс Чрева зверя`,
worldState_eightClaw: `Восемь когтей`, worldState_eightClaw: `Восемь когтей`,
worldState_eightClawProgressOverride: `Прогресс Восьми когтей`, worldState_eightClawProgressOverride: `Прогресс Восьми когтей`,
worldState_from_year: `из |YEAR|`, worldState_from_year: `из |VAL|`,
worldState_pre_year: `до |YEAR|`, worldState_pre_year: `до |VAL|`,
worldState_week: `Неделя |VAL|`,
worldState_incompatibleWith: `Несовместимо с:`, worldState_incompatibleWith: `Несовместимо с:`,
enabled: `Включено`, enabled: `Включено`,
disabled: `Отключено`, disabled: `Отключено`,

View File

@ -10,6 +10,7 @@ dict = {
code_loginFail: `Не вдалося увійти. Перевірте адресу електронної пошти та пароль.`, code_loginFail: `Не вдалося увійти. Перевірте адресу електронної пошти та пароль.`,
code_regFail: `Не вдалося зареєструватися. Обліковий запис вже існує?`, code_regFail: `Не вдалося зареєструватися. Обліковий запис вже існує?`,
code_changeNameConfirm: `Яке ім'я ви хочете встановити для свого облікового запису?`, code_changeNameConfirm: `Яке ім'я ви хочете встановити для свого облікового запису?`,
code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`,
code_deleteAccountConfirm: `Ви впевнені, що хочете видалити обліковий запис |DISPLAYNAME| (|EMAIL|)? Цю дію не можна скасувати.`, code_deleteAccountConfirm: `Ви впевнені, що хочете видалити обліковий запис |DISPLAYNAME| (|EMAIL|)? Цю дію не можна скасувати.`,
code_archgun: `Арк-гармата`, code_archgun: `Арк-гармата`,
code_melee: `Холодна зброя`, code_melee: `Холодна зброя`,
@ -246,6 +247,8 @@ dict = {
worldState_baroTennoConRelay: `Реле Баро TennoCon`, worldState_baroTennoConRelay: `Реле Баро TennoCon`,
worldState_starDays: `Зоряні дні`, worldState_starDays: `Зоряні дні`,
worldState_galleonOfGhouls: `Гульський галеон`, worldState_galleonOfGhouls: `Гульський галеон`,
worldState_anniversary: `[UNTRANSLATED] Warframe Anniversary`,
worldState_useAnniversaryTagForOldGoals: `[UNTRANSLATED] Use <code>Tag</code> from Warframe Anniversary for old Events`,
worldState_ghoulEmergence: `Зачищення від гулів`, worldState_ghoulEmergence: `Зачищення від гулів`,
worldState_plagueStar: `Морова зірка`, worldState_plagueStar: `Морова зірка`,
worldState_dogDays: `Спекотні дні`, worldState_dogDays: `Спекотні дні`,
@ -262,8 +265,9 @@ dict = {
worldState_bellyOfTheBeastProgressOverride: `Прогрес У лігві звіра`, worldState_bellyOfTheBeastProgressOverride: `Прогрес У лігві звіра`,
worldState_eightClaw: `Вісім кігтів`, worldState_eightClaw: `Вісім кігтів`,
worldState_eightClawProgressOverride: `Прогрес Восьми кігтів`, worldState_eightClawProgressOverride: `Прогрес Восьми кігтів`,
worldState_from_year: `з |YEAR|`, worldState_from_year: `з |VAL|`,
worldState_pre_year: `до |YEAR|`, worldState_pre_year: `до |VAL|`,
worldState_week: `[UNTRANSLATED] Week |VAL|`,
worldState_incompatibleWith: `Несумісне з:`, worldState_incompatibleWith: `Несумісне з:`,
enabled: `Увімкнено`, enabled: `Увімкнено`,
disabled: `Вимкнено`, disabled: `Вимкнено`,

View File

@ -10,6 +10,7 @@ dict = {
code_loginFail: `登录失败。请检查邮箱和密码。`, code_loginFail: `登录失败。请检查邮箱和密码。`,
code_regFail: `注册失败。账号是否已存在?`, code_regFail: `注册失败。账号是否已存在?`,
code_changeNameConfirm: `您想将账户名称更改为?`, code_changeNameConfirm: `您想将账户名称更改为?`,
code_changeNameRetry: `[UNTRANSLATED] |NAME| is already taken.`,
code_deleteAccountConfirm: `确定要删除您的账户 |DISPLAYNAME|(|EMAIL|) 吗?此操作不可撤销。`, code_deleteAccountConfirm: `确定要删除您的账户 |DISPLAYNAME|(|EMAIL|) 吗?此操作不可撤销。`,
code_archgun: `空战`, code_archgun: `空战`,
code_melee: `近战`, code_melee: `近战`,
@ -246,6 +247,8 @@ dict = {
worldState_baroTennoConRelay: `Baro的TennoCon中继站`, worldState_baroTennoConRelay: `Baro的TennoCon中继站`,
worldState_starDays: `活动:星日`, worldState_starDays: `活动:星日`,
worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`, worldState_galleonOfGhouls: `战术警报:尸鬼的帆船战舰`,
worldState_anniversary: `[UNTRANSLATED] Warframe Anniversary`,
worldState_useAnniversaryTagForOldGoals: `[UNTRANSLATED] Use <code>Tag</code> from Warframe Anniversary for old Events`,
worldState_ghoulEmergence: `尸鬼净化`, worldState_ghoulEmergence: `尸鬼净化`,
worldState_plagueStar: `瘟疫之星`, worldState_plagueStar: `瘟疫之星`,
worldState_dogDays: `三伏天`, worldState_dogDays: `三伏天`,
@ -262,8 +265,9 @@ dict = {
worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`, worldState_bellyOfTheBeastProgressOverride: `[UNTRANSLATED] Belly of the Beast Progress`,
worldState_eightClaw: `八爪`, worldState_eightClaw: `八爪`,
worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`, worldState_eightClawProgressOverride: `[UNTRANSLATED] Eight Claw Progress`,
worldState_from_year: `[UNTRANSLATED] from |YEAR|`, worldState_from_year: `[UNTRANSLATED] from |VAL|`,
worldState_pre_year: `[UNTRANSLATED] pre |YEAR|`, worldState_pre_year: `[UNTRANSLATED] pre |VAL|`,
worldState_week: `[UNTRANSLATED] Week |VAL|`,
worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`, worldState_incompatibleWith: `[UNTRANSLATED] Incompatible with:`,
enabled: `启用`, enabled: `启用`,
disabled: `关闭/取消配置`, disabled: `关闭/取消配置`,