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