diff --git a/config/server-config.example.json b/config/server-config.example.json index 738feb413..4081e9bfb 100644 --- a/config/server-config.example.json +++ b/config/server-config.example.json @@ -20,5 +20,6 @@ "giveAchievements": true, "checkCredentials": true, "tutorialEnabled": false, - "adminDropsEnabled": true + "adminDropsEnabled": true, + "bypassTeleportRequirements": false } diff --git a/src/engine/interface/interface-state.ts b/src/engine/interface/interface-state.ts index 3af3c0370..1c3322b6c 100644 --- a/src/engine/interface/interface-state.ts +++ b/src/engine/interface/interface-state.ts @@ -45,6 +45,7 @@ export interface WidgetOptions { container?: ItemContainer; fakeWidget?: number; metadata?: { [key: string]: any }; + doNotRegister?: boolean; } export class Widget { @@ -178,7 +179,9 @@ export class InterfaceState { this.clearSlots(); } - this.widgetSlots[widget.slot] = widget; + if (!options.doNotRegister) { + this.widgetSlots[widget.slot] = widget; + } this.showWidget(widget); return widget; } diff --git a/src/engine/world/actor/player/player.ts b/src/engine/world/actor/player/player.ts index b7ee8ef2f..39d14b77a 100644 --- a/src/engine/world/actor/player/player.ts +++ b/src/engine/world/actor/player/player.ts @@ -275,6 +275,9 @@ export class Player extends Actor { this.interfaceState.openWidget(widgets.welcomeScreen, { slot: 'full', containerId: widgets.welcomeScreenChildren.question, + // The welcome screen's main button does not trigger the button packet + // @todo read this from elsewhere to mark the welcome screen as closed + doNotRegister: true, }); } diff --git a/src/plugins/buttons/magic-teleports.plugin.ts b/src/plugins/buttons/magic-teleports.plugin.ts index eb541831a..cb4fa47f3 100644 --- a/src/plugins/buttons/magic-teleports.plugin.ts +++ b/src/plugins/buttons/magic-teleports.plugin.ts @@ -13,6 +13,7 @@ import type { TravelLocation } from '@engine/world/config/travel-locations'; import type { Item } from '@engine/world/items/item'; import { Position } from '@engine/world/position'; import { openHouse } from '@plugins/skills/construction/house'; +import { serverConfig } from '@server/game/game-server'; enum Teleports { Home = 591, @@ -333,7 +334,7 @@ const activate = (task: TaskExecutor, elapsedTicks: number = 0) => player.metadata.castingStationarySpell = true; - if (!expenseMagic(player, MagicCosts[buttonId])) { + if (!serverConfig.bypassTeleportRequirements && !expenseMagic(player, MagicCosts[buttonId])) { player.sendMessage(insufficient); completed = true; break; diff --git a/src/server/game/game-server-config.ts b/src/server/game/game-server-config.ts index 271a57d91..0f3a6543e 100644 --- a/src/server/game/game-server-config.ts +++ b/src/server/game/game-server-config.ts @@ -14,4 +14,5 @@ export interface GameServerConfig { checkCredentials: boolean; tutorialEnabled: boolean; adminDropsEnabled: boolean; + bypassTeleportRequirements?: boolean; }