merge upstream
This commit is contained in:
		
						commit
						d1a570380e
					
				@ -4,9 +4,15 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
 | 
			
		||||
export const creditsController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
 | 
			
		||||
    const inventory = await getInventory(accountId, "RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits");
 | 
			
		||||
    const inventory = (
 | 
			
		||||
        await Promise.all([
 | 
			
		||||
            getAccountIdForRequest(req),
 | 
			
		||||
            getInventory(
 | 
			
		||||
                req.query.accountId as string,
 | 
			
		||||
                "RegularCredits TradesRemaining PremiumCreditsFree PremiumCredits"
 | 
			
		||||
            )
 | 
			
		||||
        ])
 | 
			
		||||
    )[1];
 | 
			
		||||
 | 
			
		||||
    const response = {
 | 
			
		||||
        RegularCredits: inventory.RegularCredits,
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,8 @@ import {
 | 
			
		||||
    allDailyAffiliationKeys,
 | 
			
		||||
    cleanupInventory,
 | 
			
		||||
    createLibraryDailyTask,
 | 
			
		||||
    generateRewardSeed
 | 
			
		||||
    generateRewardSeed,
 | 
			
		||||
    getCalendarProgress
 | 
			
		||||
} from "@/src/services/inventoryService";
 | 
			
		||||
import { logger } from "@/src/utils/logger";
 | 
			
		||||
import { addString, catBreadHash } from "@/src/helpers/stringHelpers";
 | 
			
		||||
@ -108,6 +109,10 @@ export const inventoryController: RequestHandler = async (request, response) =>
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (inventory.CalendarProgress) {
 | 
			
		||||
            getCalendarProgress(inventory); // handle year rollover; the client expects to receive an inventory with an up-to-date CalendarProgress
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        cleanupInventory(inventory);
 | 
			
		||||
 | 
			
		||||
        inventory.NextRefill = new Date((today + 1) * 86400000); // tomorrow at 0 UTC
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,7 @@ import {
 | 
			
		||||
} from "@/src/services/loginRewardService";
 | 
			
		||||
import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { config } from "@/src/services/configService";
 | 
			
		||||
import { sendWsBroadcastTo } from "@/src/services/webService";
 | 
			
		||||
 | 
			
		||||
export const loginRewardsController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const account = await getAccountForRequest(req);
 | 
			
		||||
@ -51,6 +52,8 @@ export const loginRewardsController: RequestHandler = async (req, res) => {
 | 
			
		||||
 | 
			
		||||
        setAccountGotLoginRewardToday(account);
 | 
			
		||||
        await account.save();
 | 
			
		||||
 | 
			
		||||
        sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
 | 
			
		||||
    }
 | 
			
		||||
    res.json(response);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ import {
 | 
			
		||||
} from "@/src/services/loginRewardService";
 | 
			
		||||
import { getAccountForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { handleStoreItemAcquisition } from "@/src/services/purchaseService";
 | 
			
		||||
import { sendWsBroadcastTo } from "@/src/services/webService";
 | 
			
		||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
			
		||||
import { logger } from "@/src/utils/logger";
 | 
			
		||||
import { RequestHandler } from "express";
 | 
			
		||||
@ -39,6 +40,7 @@ export const loginRewardsSelectionController: RequestHandler = async (req, res)
 | 
			
		||||
    setAccountGotLoginRewardToday(account);
 | 
			
		||||
    await account.save();
 | 
			
		||||
 | 
			
		||||
    sendWsBroadcastTo(account._id.toString(), { update_inventory: true });
 | 
			
		||||
    res.json({
 | 
			
		||||
        DailyTributeInfo: {
 | 
			
		||||
            NewInventory: inventoryChanges,
 | 
			
		||||
 | 
			
		||||
@ -58,6 +58,9 @@ export const sellController: RequestHandler = async (req, res) => {
 | 
			
		||||
    if (payload.Items.Hoverboards) {
 | 
			
		||||
        requiredFields.add(InventorySlot.SPACESUITS);
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.CrewMembers) {
 | 
			
		||||
        requiredFields.add(InventorySlot.CREWMEMBERS);
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.CrewShipWeapons || payload.Items.CrewShipWeaponSkins) {
 | 
			
		||||
        requiredFields.add(InventorySlot.RJ_COMPONENT_AND_ARMAMENTS);
 | 
			
		||||
        requiredFields.add("CrewShipRawSalvage");
 | 
			
		||||
@ -181,6 +184,12 @@ export const sellController: RequestHandler = async (req, res) => {
 | 
			
		||||
            inventory.Drones.pull({ _id: sellItem.String });
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.CrewMembers) {
 | 
			
		||||
        payload.Items.CrewMembers.forEach(sellItem => {
 | 
			
		||||
            inventory.CrewMembers.pull({ _id: sellItem.String });
 | 
			
		||||
            freeUpSlot(inventory, InventorySlot.CREWMEMBERS);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    if (payload.Items.CrewShipWeapons) {
 | 
			
		||||
        payload.Items.CrewShipWeapons.forEach(sellItem => {
 | 
			
		||||
            if (sellItem.String[0] == "/") {
 | 
			
		||||
@ -303,6 +312,7 @@ interface ISellRequest {
 | 
			
		||||
        OperatorAmps?: ISellItem[];
 | 
			
		||||
        Hoverboards?: ISellItem[];
 | 
			
		||||
        Drones?: ISellItem[];
 | 
			
		||||
        CrewMembers?: ISellItem[];
 | 
			
		||||
        CrewShipWeapons?: ISellItem[];
 | 
			
		||||
        CrewShipWeaponSkins?: ISellItem[];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@ -45,6 +45,39 @@ export type WeaponTypeInternal =
 | 
			
		||||
    | "SpecialItems";
 | 
			
		||||
 | 
			
		||||
export const getRecipe = (uniqueName: string): IRecipe | undefined => {
 | 
			
		||||
    // Handle crafting of archwing summon for versions prior to 39.0.0 as this blueprint was removed then.
 | 
			
		||||
    if (uniqueName == "/Lotus/Types/Recipes/EidolonRecipes/OpenArchwingSummonBlueprint") {
 | 
			
		||||
        return {
 | 
			
		||||
            resultType: "/Lotus/Types/Restoratives/OpenArchwingSummon",
 | 
			
		||||
            buildPrice: 7500,
 | 
			
		||||
            buildTime: 1800,
 | 
			
		||||
            skipBuildTimePrice: 10,
 | 
			
		||||
            consumeOnUse: false,
 | 
			
		||||
            num: 1,
 | 
			
		||||
            codexSecret: false,
 | 
			
		||||
            alwaysAvailable: true,
 | 
			
		||||
            ingredients: [
 | 
			
		||||
                {
 | 
			
		||||
                    ItemType: "/Lotus/Types/Gameplay/Eidolon/Resources/IraditeItem",
 | 
			
		||||
                    ItemCount: 50
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    ItemType: "/Lotus/Types/Gameplay/Eidolon/Resources/GrokdrulItem",
 | 
			
		||||
                    ItemCount: 50
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    ItemType: "/Lotus/Types/Items/Fish/Eidolon/FishParts/EidolonFishOilItem",
 | 
			
		||||
                    ItemCount: 30
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    ItemType: "/Lotus/Types/Items/MiscItems/Circuits",
 | 
			
		||||
                    ItemCount: 600
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            excludeFromMarket: true
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ExportRecipes[uniqueName];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -75,7 +75,7 @@
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="w-100">
 | 
			
		||||
        <div id="main-content" class="w-100">
 | 
			
		||||
            <div data-route="/webui/" data-title="Login | OpenWF WebUI">
 | 
			
		||||
                <p data-loc="login_description"></p>
 | 
			
		||||
                <form onsubmit="doLogin();return false;">
 | 
			
		||||
 | 
			
		||||
@ -2738,3 +2738,9 @@ function handleValenceBonusChange(event) {
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
document.querySelectorAll("#sidebar .nav-link").forEach(function (elm) {
 | 
			
		||||
    elm.addEventListener("click", function () {
 | 
			
		||||
        window.scrollTo(0, 0);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@ -4,9 +4,19 @@
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    body.logged-in #sidebar {
 | 
			
		||||
        position: sticky;
 | 
			
		||||
        top: 5rem;
 | 
			
		||||
        margin-right: 3rem;
 | 
			
		||||
        position: fixed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    body.logged-in #main-content {
 | 
			
		||||
        margin-left: 7rem;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    body.logged-in:has([data-lang="de"].active) #main-content {
 | 
			
		||||
        margin-left: 8rem;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    body.logged-in:has([data-lang="zh"].active) #main-content {
 | 
			
		||||
        margin-left: 6rem;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    body:not(.logged-in) #sidebar {
 | 
			
		||||
 | 
			
		||||
@ -2,8 +2,8 @@
 | 
			
		||||
dict = {
 | 
			
		||||
    general_inventoryUpdateNote: `Para ver los cambios en el juego, necesitas volver a sincronizar tu inventario, por ejemplo, usando el comando /sync del bootstrapper, visitando un dojo o repetidor, o volviendo a iniciar sesión.`,
 | 
			
		||||
    general_addButton: `Agregar`,
 | 
			
		||||
    general_setButton: `[UNTRANSLATED] Set`,
 | 
			
		||||
    general_removeButton: `[UNTRANSLATED] Remove`,
 | 
			
		||||
    general_setButton: `Establecer`,
 | 
			
		||||
    general_removeButton: `Quitar`,
 | 
			
		||||
    general_bulkActions: `Acciones masivas`,
 | 
			
		||||
 | 
			
		||||
    code_loginFail: `Error al iniciar sesión. Verifica el correo electrónico y la contraseña.`,
 | 
			
		||||
@ -120,7 +120,7 @@ dict = {
 | 
			
		||||
    detailedView_archonShardsDescription: `Puedes usar estas ranuras ilimitadas para aplicar una amplia variedad de mejoras`,
 | 
			
		||||
    detailedView_archonShardsDescription2: `Ten en cuenta que cada fragmento de archón tarda un poco en aplicarse al cargar`,
 | 
			
		||||
    detailedView_valenceBonusLabel: `Bônus de Valência`,
 | 
			
		||||
    detailedView_valenceBonusDescription: `[UNTRANSLATED] You can set or remove the Valence Bonus from your weapon.`,
 | 
			
		||||
    detailedView_valenceBonusDescription: `Puedes establecer o quitar el bono de valencia de tu arma.`,
 | 
			
		||||
 | 
			
		||||
    mods_addRiven: `Agregar Agrietado`,
 | 
			
		||||
    mods_fingerprint: `Huella digital`,
 | 
			
		||||
@ -136,7 +136,7 @@ dict = {
 | 
			
		||||
    cheats_skipAllDialogue: `Omitir todos los diálogos`,
 | 
			
		||||
    cheats_unlockAllScans: `Desbloquear todos los escaneos`,
 | 
			
		||||
    cheats_unlockAllMissions: `Desbloquear todas las misiones`,
 | 
			
		||||
    cheats_unlockAllMissions_ok: `[UNTRANSLATED] Success. Please note that you'll need to enter a dojo/relay or relog for the client to refresh the star chart.`,
 | 
			
		||||
    cheats_unlockAllMissions_ok: `Éxito. Ten en cuenta que deberás entrar a un dojo, repetidor o volver a iniciar sesión para que el cliente actualice el mapa estelar.`,
 | 
			
		||||
    cheats_infiniteCredits: `Créditos infinitos`,
 | 
			
		||||
    cheats_infinitePlatinum: `Platino infinito`,
 | 
			
		||||
    cheats_infiniteEndo: `Endo infinito`,
 | 
			
		||||
@ -306,8 +306,8 @@ dict = {
 | 
			
		||||
    damageType_Poison: `Tóxico`,
 | 
			
		||||
    damageType_Radiation: `Radioativo`,
 | 
			
		||||
 | 
			
		||||
    theme_dark: `[UNTRANSLATED] Dark Theme`,
 | 
			
		||||
    theme_light: `[UNTRANSLATED] Light Theme`,
 | 
			
		||||
    theme_dark: `Tema Oscuro`,
 | 
			
		||||
    theme_light: `Tema Claro`,
 | 
			
		||||
 | 
			
		||||
    prettier_sucks_ass: ``
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user