forked from OpenWF/SpaceNinjaServer
		
	feat: skipClanKeyCrafting cheat (#1883)
Closes #1843 Reviewed-on: OpenWF/SpaceNinjaServer#1883 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									ee1a49f5f2
								
							
						
					
					
						commit
						afec59e8a6
					
				@ -38,6 +38,7 @@
 | 
			
		||||
  "noKimCooldowns": false,
 | 
			
		||||
  "instantResourceExtractorDrones": false,
 | 
			
		||||
  "noResourceExtractorDronesDamage": false,
 | 
			
		||||
  "skipClanKeyCrafting": false,
 | 
			
		||||
  "noDojoRoomBuildStage": false,
 | 
			
		||||
  "noDecoBuildStage": false,
 | 
			
		||||
  "fastDojoRoomDestruction": false,
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,14 @@
 | 
			
		||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
import { Guild, GuildMember } from "@/src/models/guildModel";
 | 
			
		||||
import { Account } from "@/src/models/loginModel";
 | 
			
		||||
import { deleteGuild, getGuildClient, hasGuildPermission, removeDojoKeyItems } from "@/src/services/guildService";
 | 
			
		||||
import { addRecipes, combineInventoryChanges, getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import {
 | 
			
		||||
    deleteGuild,
 | 
			
		||||
    getGuildClient,
 | 
			
		||||
    giveClanKey,
 | 
			
		||||
    hasGuildPermission,
 | 
			
		||||
    removeDojoKeyItems
 | 
			
		||||
} from "@/src/services/guildService";
 | 
			
		||||
import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { getAccountForRequest, getAccountIdForRequest, getSuffixedName } from "@/src/services/loginService";
 | 
			
		||||
import { GuildPermission } from "@/src/types/guildTypes";
 | 
			
		||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
			
		||||
@ -41,14 +47,7 @@ export const confirmGuildInvitationGetController: RequestHandler = async (req, r
 | 
			
		||||
        // Update inventory of new member
 | 
			
		||||
        const inventory = await getInventory(account._id.toString(), "GuildId LevelKeys Recipes");
 | 
			
		||||
        inventory.GuildId = new Types.ObjectId(req.query.clanId as string);
 | 
			
		||||
        const recipeChanges = [
 | 
			
		||||
            {
 | 
			
		||||
                ItemType: "/Lotus/Types/Keys/DojoKeyBlueprint",
 | 
			
		||||
                ItemCount: 1
 | 
			
		||||
            }
 | 
			
		||||
        ];
 | 
			
		||||
        addRecipes(inventory, recipeChanges);
 | 
			
		||||
        combineInventoryChanges(inventoryChanges, { Recipes: recipeChanges });
 | 
			
		||||
        giveClanKey(inventory, inventoryChanges);
 | 
			
		||||
        await inventory.save();
 | 
			
		||||
 | 
			
		||||
        const guild = (await Guild.findById(req.query.clanId as string))!;
 | 
			
		||||
@ -96,14 +95,9 @@ export const confirmGuildInvitationPostController: RequestHandler = async (req,
 | 
			
		||||
        await GuildMember.deleteMany({ accountId: guildMember.accountId, status: 1 });
 | 
			
		||||
 | 
			
		||||
        // Update inventory of new member
 | 
			
		||||
        const inventory = await getInventory(guildMember.accountId.toString(), "GuildId Recipes");
 | 
			
		||||
        const inventory = await getInventory(guildMember.accountId.toString(), "GuildId LevelKeys Recipes");
 | 
			
		||||
        inventory.GuildId = new Types.ObjectId(req.query.clanId as string);
 | 
			
		||||
        addRecipes(inventory, [
 | 
			
		||||
            {
 | 
			
		||||
                ItemType: "/Lotus/Types/Keys/DojoKeyBlueprint",
 | 
			
		||||
                ItemCount: 1
 | 
			
		||||
            }
 | 
			
		||||
        ]);
 | 
			
		||||
        giveClanKey(inventory);
 | 
			
		||||
        await inventory.save();
 | 
			
		||||
 | 
			
		||||
        // Add join to clan log
 | 
			
		||||
 | 
			
		||||
@ -2,8 +2,9 @@ import { RequestHandler } from "express";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
 | 
			
		||||
import { Guild, GuildMember } from "@/src/models/guildModel";
 | 
			
		||||
import { createUniqueClanName, getGuildClient } from "@/src/services/guildService";
 | 
			
		||||
import { addRecipes, getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { createUniqueClanName, getGuildClient, giveClanKey } from "@/src/services/guildService";
 | 
			
		||||
import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { IInventoryChanges } from "@/src/types/purchaseTypes";
 | 
			
		||||
 | 
			
		||||
export const createGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
    const accountId = await getAccountIdForRequest(req);
 | 
			
		||||
@ -26,26 +27,15 @@ export const createGuildController: RequestHandler = async (req, res) => {
 | 
			
		||||
        rank: 0
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const inventory = await getInventory(accountId, "GuildId Recipes");
 | 
			
		||||
    const inventory = await getInventory(accountId, "GuildId LevelKeys Recipes");
 | 
			
		||||
    inventory.GuildId = guild._id;
 | 
			
		||||
    addRecipes(inventory, [
 | 
			
		||||
        {
 | 
			
		||||
            ItemType: "/Lotus/Types/Keys/DojoKeyBlueprint",
 | 
			
		||||
            ItemCount: 1
 | 
			
		||||
        }
 | 
			
		||||
    ]);
 | 
			
		||||
    const inventoryChanges: IInventoryChanges = {};
 | 
			
		||||
    giveClanKey(inventory, inventoryChanges);
 | 
			
		||||
    await inventory.save();
 | 
			
		||||
 | 
			
		||||
    res.json({
 | 
			
		||||
        ...(await getGuildClient(guild, accountId)),
 | 
			
		||||
        InventoryChanges: {
 | 
			
		||||
            Recipes: [
 | 
			
		||||
                {
 | 
			
		||||
                    ItemType: "/Lotus/Types/Keys/DojoKeyBlueprint",
 | 
			
		||||
                    ItemCount: 1
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
        InventoryChanges: inventoryChanges
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -44,6 +44,7 @@ interface IConfig {
 | 
			
		||||
    noKimCooldowns?: boolean;
 | 
			
		||||
    instantResourceExtractorDrones?: boolean;
 | 
			
		||||
    noResourceExtractorDronesDamage?: boolean;
 | 
			
		||||
    skipClanKeyCrafting?: boolean;
 | 
			
		||||
    noDojoRoomBuildStage?: boolean;
 | 
			
		||||
    noDojoDecoBuildStage?: boolean;
 | 
			
		||||
    fastDojoRoomDestruction?: boolean;
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { Request } from "express";
 | 
			
		||||
import { getAccountIdForRequest } from "@/src/services/loginService";
 | 
			
		||||
import { getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { addLevelKeys, addRecipes, combineInventoryChanges, getInventory } from "@/src/services/inventoryService";
 | 
			
		||||
import { Alliance, AllianceMember, Guild, GuildAd, GuildMember, TGuildDatabaseDocument } from "@/src/models/guildModel";
 | 
			
		||||
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
 | 
			
		||||
import {
 | 
			
		||||
@ -657,6 +657,32 @@ export const checkClanAscensionHasRequiredContributors = async (guild: TGuildDat
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const giveClanKey = (inventory: TInventoryDatabaseDocument, inventoryChanges?: IInventoryChanges): void => {
 | 
			
		||||
    if (config.skipClanKeyCrafting) {
 | 
			
		||||
        const levelKeyChanges = [
 | 
			
		||||
            {
 | 
			
		||||
                ItemType: "/Lotus/Types/Keys/DojoKey",
 | 
			
		||||
                ItemCount: 1
 | 
			
		||||
            }
 | 
			
		||||
        ];
 | 
			
		||||
        addLevelKeys(inventory, levelKeyChanges);
 | 
			
		||||
        if (inventoryChanges) {
 | 
			
		||||
            combineInventoryChanges(inventoryChanges, { LevelKeys: levelKeyChanges });
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        const recipeChanges = [
 | 
			
		||||
            {
 | 
			
		||||
                ItemType: "/Lotus/Types/Keys/DojoKeyBlueprint",
 | 
			
		||||
                ItemCount: 1
 | 
			
		||||
            }
 | 
			
		||||
        ];
 | 
			
		||||
        addRecipes(inventory, recipeChanges);
 | 
			
		||||
        if (inventoryChanges) {
 | 
			
		||||
            combineInventoryChanges(inventoryChanges, { Recipes: recipeChanges });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const removeDojoKeyItems = (inventory: TInventoryDatabaseDocument): IInventoryChanges => {
 | 
			
		||||
    const inventoryChanges: IInventoryChanges = {};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -674,6 +674,10 @@
 | 
			
		||||
                                        <input class="form-check-input" type="checkbox" id="noResourceExtractorDronesDamage" />
 | 
			
		||||
                                        <label class="form-check-label" for="noResourceExtractorDronesDamage" data-loc="cheats_noResourceExtractorDronesDamage"></label>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                    <div class="form-check">
 | 
			
		||||
                                        <input class="form-check-input" type="checkbox" id="skipClanKeyCrafting" />
 | 
			
		||||
                                        <label class="form-check-label" for="skipClanKeyCrafting" data-loc="cheats_skipClanKeyCrafting"></label>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                    <div class="form-check">
 | 
			
		||||
                                        <input class="form-check-input" type="checkbox" id="noDojoRoomBuildStage" />
 | 
			
		||||
                                        <label class="form-check-label" for="noDojoRoomBuildStage" data-loc="cheats_noDojoRoomBuildStage"></label>
 | 
			
		||||
 | 
			
		||||
@ -154,6 +154,7 @@ dict = {
 | 
			
		||||
    cheats_noKimCooldowns: `Keine Wartezeit bei KIM`,
 | 
			
		||||
    cheats_instantResourceExtractorDrones: `Sofortige Ressourcen-Extraktor-Drohnen`,
 | 
			
		||||
    cheats_noResourceExtractorDronesDamage: `Kein Schaden für Ressourcen-Extraktor-Drohnen`,
 | 
			
		||||
    cheats_skipClanKeyCrafting: `[UNTRANSLATED] Skip Clan Key Crafting`,
 | 
			
		||||
    cheats_noDojoRoomBuildStage: `Kein Dojo-Raum-Bauvorgang`,
 | 
			
		||||
    cheats_noDojoDecoBuildStage: `Kein Dojo-Deko-Bauvorgang`,
 | 
			
		||||
    cheats_fastDojoRoomDestruction: `Schnelle Dojo-Raum-Zerstörung`,
 | 
			
		||||
 | 
			
		||||
@ -153,6 +153,7 @@ dict = {
 | 
			
		||||
    cheats_noKimCooldowns: `No KIM Cooldowns`,
 | 
			
		||||
    cheats_instantResourceExtractorDrones: `Instant Resource Extractor Drones`,
 | 
			
		||||
    cheats_noResourceExtractorDronesDamage: `No Resource Extractor Drones Damage`,
 | 
			
		||||
    cheats_skipClanKeyCrafting: `Skip Clan Key Crafting`,
 | 
			
		||||
    cheats_noDojoRoomBuildStage: `No Dojo Room Build Stage`,
 | 
			
		||||
    cheats_noDojoDecoBuildStage: `No Dojo Deco Build Stage`,
 | 
			
		||||
    cheats_fastDojoRoomDestruction: `Fast Dojo Room Destruction`,
 | 
			
		||||
 | 
			
		||||
@ -154,6 +154,7 @@ dict = {
 | 
			
		||||
    cheats_noKimCooldowns: `Sin tiempo de espera para conversaciones KIM`,
 | 
			
		||||
    cheats_instantResourceExtractorDrones: `Drones de extracción de recursos instantáneos`,
 | 
			
		||||
    cheats_noResourceExtractorDronesDamage: `Sin daño a los drones extractores de recursos`,
 | 
			
		||||
    cheats_skipClanKeyCrafting: `[UNTRANSLATED] Skip Clan Key Crafting`,
 | 
			
		||||
    cheats_noDojoRoomBuildStage: `Sin etapa de construcción de sala del dojo`,
 | 
			
		||||
    cheats_noDojoDecoBuildStage: `Sin etapa de construcción de decoraciones del dojo`,
 | 
			
		||||
    cheats_fastDojoRoomDestruction: `Destrucción rápida de salas del dojo`,
 | 
			
		||||
 | 
			
		||||
@ -154,6 +154,7 @@ dict = {
 | 
			
		||||
    cheats_noKimCooldowns: `Aucun cooldown sur le KIM`,
 | 
			
		||||
    cheats_instantResourceExtractorDrones: `Ressources de drones d'extraction instantannées`,
 | 
			
		||||
    cheats_noResourceExtractorDronesDamage: `Aucun dégâts aux drones d'extraction de resources`,
 | 
			
		||||
    cheats_skipClanKeyCrafting: `[UNTRANSLATED] Skip Clan Key Crafting`,
 | 
			
		||||
    cheats_noDojoRoomBuildStage: `Aucune attente (construction des salles)`,
 | 
			
		||||
    cheats_noDojoDecoBuildStage: `Aucune attente (construction des décorations)`,
 | 
			
		||||
    cheats_fastDojoRoomDestruction: `Destruction de salle instantanée (Dojo)`,
 | 
			
		||||
 | 
			
		||||
@ -154,6 +154,7 @@ dict = {
 | 
			
		||||
    cheats_noKimCooldowns: `Чаты KIM без кулдауна`,
 | 
			
		||||
    cheats_instantResourceExtractorDrones: `Мгновенные Экстракторы Ресурсов`,
 | 
			
		||||
    cheats_noResourceExtractorDronesDamage: `Без урона по дронам-сборщикам`,
 | 
			
		||||
    cheats_skipClanKeyCrafting: `[UNTRANSLATED] Skip Clan Key Crafting`,
 | 
			
		||||
    cheats_noDojoRoomBuildStage: `Мгновенное Строительтво Комнат Додзё`,
 | 
			
		||||
    cheats_noDojoDecoBuildStage: `Мгновенное Строительтво Декораций Додзё`,
 | 
			
		||||
    cheats_fastDojoRoomDestruction: `Мгновенные Уничтожение Комнат Додзё`,
 | 
			
		||||
 | 
			
		||||
@ -154,6 +154,7 @@ dict = {
 | 
			
		||||
    cheats_noKimCooldowns: `[UNTRANSLATED] No KIM Cooldowns`,
 | 
			
		||||
    cheats_instantResourceExtractorDrones: `即时资源采集无人机`,
 | 
			
		||||
    cheats_noResourceExtractorDronesDamage: `[UNTRANSLATED] No Resource Extractor Drones Damage`,
 | 
			
		||||
    cheats_skipClanKeyCrafting: `[UNTRANSLATED] Skip Clan Key Crafting`,
 | 
			
		||||
    cheats_noDojoRoomBuildStage: `无视道场房间建造阶段`,
 | 
			
		||||
    cheats_noDojoDecoBuildStage: `[UNTRANSLATED] No Dojo Deco Build Stage`,
 | 
			
		||||
    cheats_fastDojoRoomDestruction: `快速拆除道场房间`,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user