コード例 #1
0
ファイル: TalkNpcAction.cs プロジェクト: psydox/OpenMU
        private void ShowDialogOfOpenedNpc(Player player)
        {
            var npcStats = player.OpenedNpc !.Definition;

            switch (npcStats.NpcWindow)
            {
            case NpcWindow.Undefined:
                var eventArgs = new NpcTalkEventArgs();
                player.GameContext.PlugInManager.GetPlugInPoint <IPlayerTalkToNpcPlugIn>()?.PlayerTalksToNpc(player, player.OpenedNpc, eventArgs);
                if (!eventArgs.HasBeenHandled)
                {
                    player.ViewPlugIns.GetPlugIn <IShowMessagePlugIn>()?.ShowMessage($"Talking to this NPC ({npcStats.Number}, {npcStats.Designation}) is not implemented yet.", MessageType.BlueNormal);
                    player.PlayerState.TryAdvanceTo(PlayerState.EnteredWorld);
                }
                else if (!eventArgs.LeavesDialogOpen)
                {
                    player.OpenedNpc = null;
                    player.PlayerState.TryAdvanceTo(PlayerState.EnteredWorld);
                }
                else
                {
                    // Leaves dialog opened, so leave the state as it is.
                }

                break;

            case NpcWindow.VaultStorage:
                player.Account !.Vault ??= player.PersistenceContext.CreateNew <ItemStorage>();
                player.Vault = new Storage(InventoryConstants.WarehouseSize, player.Account.Vault);
                player.ViewPlugIns.GetPlugIn <IShowVaultPlugIn>()?.ShowVault();
                break;

            case NpcWindow.GuildMaster:
                if (this.IsPlayedAllowedToCreateGuild(player))
                {
                    player.ViewPlugIns.GetPlugIn <IShowGuildMasterDialogPlugIn>()?.ShowGuildMasterDialog();
                }
                else
                {
                    player.OpenedNpc = null;
                    player.PlayerState.TryAdvanceTo(PlayerState.EnteredWorld);
                }

                break;

            case NpcWindow.LegacyQuest:
                this.ShowLegacyQuestDialog(player);
                break;

            default:
                player.ViewPlugIns.GetPlugIn <IOpenNpcWindowPlugIn>()?.OpenNpcWindow(npcStats.NpcWindow);
                break;
            }
        }
コード例 #2
0
        /// <inheritdoc />
        public void PlayerTalksToNpc(Player player, NonPlayerCharacter npc, NpcTalkEventArgs eventArgs)
        {
            if (npc.Definition.Number != ResetNpcNumber)
            {
                return;
            }

            eventArgs.HasBeenHandled = true;
            var resetAction = new ResetCharacterAction(player, npc);

            resetAction.ResetCharacter();
        }