Ejemplo n.º 1
0
        private bool HandleGump(Func <Gump> instantiateGump)
        {
            var nextGumpNotVisible = false;

            Gump gump;

            lock (gumpLock)
            {
                gump        = instantiateGump();
                CurrentGump = gump;

                if (!showNextAwaitedGump)
                {
                    currentGumpVisible  = false;
                    nextGumpNotVisible  = true;
                    showNextAwaitedGump = true;
                }
                else
                {
                    currentGumpVisible = true;
                }
            }

            eventSource.Publish(new GumpReceivedEvent(gump));
            gumpReceivedEvent.Set();

            if (nextGumpNotVisible)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
0
        private Packet?FilterServerPackets(Packet rawPacket)
        {
            if (rawPacket.Id == PacketDefinitions.OpenDialogBox.Id)
            {
                var packet    = packetRegistry.Materialize <OpenDialogBoxPacket>(rawPacket);
                var dialogBox = new DialogBox(packet.DialogId, packet.MenuId, packet.Question, packet.Responses);
                CurrentDialogBox = dialogBox;
                bool showDialogBox = ShowDialogBox;

                bool block = false;
                lock (blockedQuestionLock)
                {
                    if (!string.IsNullOrEmpty(blockedQuestion) && dialogBox.Question.IndexOf(blockedQuestion, StringComparison.Ordinal) >= 0)
                    {
                        blockedQuestion = null;
                        block           = true;
                    }
                }

                eventJournalSource.Publish(new DialogBoxOpenedEvent(dialogBox));
                DialogBoxOpened?.Invoke(dialogBox);

                if (!showDialogBox || block)
                {
                    return(null);
                }
            }

            return(rawPacket);
        }
Ejemplo n.º 3
0
 private void HanldeServerTargetCursorPacket(TargetCursorPacket packet)
 {
     targetFromServerReceivedEvent.Set();
     lastCursorId = packet.CursorId;
     lastTargetCursorPacketTime = DateTime.UtcNow;
     eventSource.Publish(new ServerRequestedTargetEvent(packet.CursorId));
 }
Ejemplo n.º 4
0
        private Packet?FilterSendGumpMenuDialog(Packet rawPacket)
        {
            if (rawPacket.Id == PacketDefinitions.GeneralInformationPacket.Id && rawPacket.Payload[4] == 4)
            {
                var packet = new CloseGenericGumpPacket();
                packet.Deserialize(rawPacket);

                eventSource.Publish(new ServerRequestedGumpCloseEvent(packet.GumpTypeId));
            }
            if (rawPacket.Id == PacketDefinitions.SendGumpMenuDialog.Id)
            {
                var nextGumpNotVisible = false;

                lock (gumpLock)
                {
                    var packet = PacketDefinitionRegistry.Materialize <SendGumpMenuDialogPacket>(rawPacket);
                    var gump   = new Gump(packet.GumpId, packet.GumpTypeId, packet.Commands, packet.TextLines);
                    CurrentGump = gump;
                    eventSource.Publish(new GumpReceivedEvent(gump));

                    if (!showNextAwaitedGump)
                    {
                        currentGumpVisible  = false;
                        nextGumpNotVisible  = true;
                        showNextAwaitedGump = true;
                    }
                    else
                    {
                        currentGumpVisible = true;
                    }
                }

                gumpReceivedEvent.Set();

                if (nextGumpNotVisible)
                {
                    return(null);
                }
            }

            return(rawPacket);
        }
Ejemplo n.º 5
0
 private void HandleRequestSkills(SkillRequest packet)
 {
     if (packet.Skill.HasValue)
     {
         eventJournalSource.Publish(new SkillRequestedEvent(packet.Skill.Value));
     }
 }
Ejemplo n.º 6
0
        public ItemsObservers(GameObjectCollection gameObjects, IServerPacketSubject serverPacketSubject, IClientPacketSubject clientPacketSubject,
                              Legacy legacyApi, EventJournalSource eventJournalSource)
        {
            this.eventJournal = new EventJournal(eventJournalSource);
            this.waitForItemDraggedJournal = new EventJournal(eventJournalSource);

            this.gameObjects = gameObjects;
            this.gameObjects.MobileLeftView += (sender, mobile) =>
            {
                eventJournalSource.Publish(new MobileLeftViewEvent(mobile));
            };
            this.gameObjects.MobileDeleted += (sender, mobile) =>
            {
                eventJournalSource.Publish(new MobileLeftViewEvent(mobile));
            };

            this.legacyApi          = legacyApi;
            this.eventJournalSource = eventJournalSource;
            serverPacketSubject.Subscribe(PacketDefinitions.AddMultipleItemsInContainer,
                                          HandleAddMultipleItemsInContainer);
            serverPacketSubject.Subscribe(PacketDefinitions.AddItemToContainer, HandleAddItemToContainer);
            serverPacketSubject.Subscribe(PacketDefinitions.DeleteObject, HandleDeleteObjectPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.ObjectInfo, HandleObjectInfoPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.SecondAgeObjectInformation7090, HandleSecondAgeObjectInfoPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.DrawObject, HandleDrawObjectPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.UpdatePlayer, HandleUpdatePlayerPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.UpdateCurrentHealth, HandleUpdateCurrentHealthPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.WornItem, HandleWornItemPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.RejectMoveItemRequest, HandleRejectMoveItemRequestPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.DrawContainer, HandleDrawContainer);
            serverPacketSubject.Subscribe(PacketDefinitions.PauseClient, HandlePauseClient);
            serverPacketSubject.Subscribe(PacketDefinitions.SendSpeech, HandleSendSpeechPacket);
            serverPacketSubject.Subscribe(PacketDefinitions.StatusBarInfo, HandleStatusBarInfo);
            serverPacketSubject.Subscribe(PacketDefinitions.GraphicalEffect, HandleGraphicalEffect);
            clientPacketSubject.Subscribe(PacketDefinitions.DoubleClick, HandleDoubleClick);

            serverPacketSubject.RegisterOutputFilter(FilterServerPackets);
        }
Ejemplo n.º 7
0
        internal Legacy(Configuration configuration, CommandHandler commandHandler,
                        UltimaServer ultimaServer, UltimaClient ultimaClient, ILogger logger)
        {
            Trace = new GlobalTrace(logger);

            cancellation       = new Cancellation(() => CancellationToken);
            eventJournalSource = new EventJournalSource();
            Me = new Player(() => GameObjects.OfType <Item>().OnLayer(Layer.Mount).FirstOrDefault() != null,
                            ultimaServer, this, eventJournalSource);
            gumpObservers       = new GumpObservers(ultimaServer, ultimaClient, eventJournalSource, cancellation);
            GameObjects         = new GameObjectCollection(Me);
            Items               = new ItemCollection(GameObjects);
            Mobiles             = new MobileCollection(GameObjects);
            Corpses             = new CorpseCollection(GameObjects);
            itemsObserver       = new ItemsObservers(GameObjects, ultimaServer, ultimaClient, this, eventJournalSource);
            Me.LocationChanged += itemsObserver.OnPlayerPositionChanged;
            journalSource       = new SpeechJournalSource();
            journalSource.NewMessageReceived +=
                (sender, entry) => eventJournalSource.Publish(new SpeechReceivedEvent(entry));
            Journal          = new SpeechJournal(journalSource, cancellation, () => DefaultTimeout, Trace.JournalTrace);
            journalObservers = new JournalObservers(journalSource, ultimaServer);
            targeting        = new Targeting(ultimaServer, ultimaClient, cancellation, eventJournalSource);

            blockedPacketsFilters = new BlockedClientPacketsFilters(ultimaClient);
            lightObserver         = new LightObserver(ultimaServer, ultimaClient, Me, this);
            weatherObserver       = new WeatherObserver(ultimaServer, ultimaClient, this);
            soundObserver         = new SoundObserver(ultimaServer, eventJournalSource);
            questArrowObserver    = new QuestArrowObserver(ultimaServer, eventJournalSource);
            shapeShifter          = new ShapeshiftingFilter(ultimaServer, ultimaClient);
            var speechRequestObserver = new SpeechRequestObserver(ultimaClient, commandHandler, eventJournalSource, logger);
            var staminaFilter         = new StaminaFilter(ultimaServer, ultimaClient);

            dialogBoxObervers = new DialogBoxObservers(ultimaServer, eventJournalSource);

            playerObservers = new PlayerObservers(Me, ultimaClient, ultimaServer, logger, this, GameObjects, eventJournalSource);
            playerObservers.WalkRequestDequeued += Me.OnWalkRequestDequeued;

            this.logger = logger;
            Server      = ultimaServer;
            Client      = ultimaClient;

            CommandHandler = commandHandler;
            CommandHandler.CancellationTokenCreated += (sender, token) => CancellationToken = token;

            Configuration      = configuration;
            legacyEventJournal = CreateEventJournal();

            ClientFilters = new LegacyFilters(staminaFilter, lightObserver, weatherObserver, soundObserver, shapeShifter);
            RegisterDefaultCommands();
        }
Ejemplo n.º 8
0
        private Packet?FilterServerPackets(Packet rawPacket)
        {
            if (rawPacket.Id == PacketDefinitions.OpenDialogBox.Id)
            {
                var packet    = PacketDefinitionRegistry.Materialize <OpenDialogBoxPacket>(rawPacket);
                var dialogBox = new DialogBox(packet.DialogId, packet.MenuId, packet.Question, packet.Responses);
                CurrentDialogBox = dialogBox;
                eventJournalSource.Publish(new DialogBoxOpenedEvent(dialogBox));

                if (!ShowDialogBox)
                {
                    return(null);
                }
            }

            return(rawPacket);
        }
Ejemplo n.º 9
0
 private void HandleGraphicalEffect(GraphicalEffectPacket packet)
 {
     eventJournalSource.Publish(new GraphicalEffectStartedEvent(packet.DirectionType, packet.CharacterId,
                                                                packet.TargetId, packet.Type, packet.Location, packet.TargetLocation));
 }