Esempio n. 1
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            try
            {
                var world = this.World.Game.GetWorld(this.Destination.WorldSNO);

                if (world == null)
                {
                    return;
                }
            }
            catch
            {
                Logger.Warn("Portal's destination world does not exist"); //We can't call WorldSNO since it DOESNT EXIST.
                return;
            }

            try
            {
                var world         = this.World.Game.GetWorld(this.Destination.WorldSNO);
                var startingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag);

                if (startingPoint != null)
                {
                    player.ChangeWorld(world, startingPoint);
                }
            }
            catch
            {
                Logger.Warn("Portal's tagged starting point does not exist (Tag = {0})", this.Destination.StartingPointActorTag);
            }
        }
Esempio n. 2
0
 public override void OnTargeted(Player player, TargetMessage message)
 {
     player.InGameClient.SendMessage(new OpenArtisanWindowMessage()
     {
         ArtisanID = this.DynamicID
     });
 }
Esempio n. 3
0
        public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null,
                             TargetMessage targetMessage             = null)
        {
            Actor target;

            if (targetId == uint.MaxValue)
            {
                target = null;
            }
            else
            {
                target = user.World.GetActorByDynamicId(targetId);
                if (target == null)
                {
                    return(false);
                }

                targetPosition = target.Position;
            }

            // find and run a power implementation
            var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO);

            if (implementation != null)
            {
                return(RunPower(user, implementation, target, targetPosition, targetMessage));
            }
            else
            {
                return(false);
            }
        }
Esempio n. 4
0
        public bool RunPower(Actor user, PowerScript power, Actor target = null,
                             Vector3D targetPosition = null, TargetMessage targetMessage = null)
        {
            // replace power with existing channel instance if one exists
            if (power is ChanneledSkill)
            {
                var existingChannel = _FindChannelingSkill(user, power.PowerSNO);
                if (existingChannel != null)
                {
                    power = existingChannel;
                }
                else  // new channeled skill, add it to the list
                {
                    _channeledSkills.Add((ChanneledSkill)power);
                }
            }

            // copy in context params
            power.User           = user;
            power.Target         = target;
            power.World          = user.World;
            power.TargetPosition = targetPosition;
            power.TargetMessage  = targetMessage;

            _StartScript(power);
            return(true);
        }
Esempio n. 5
0
        internal void ProcessMessages()
        {
            lock (m_lock)
            {
                if (m_readBuffer.DataLength > 0)
                {
                    // Try and process as many complete messages as possible
                    m_readBuffer.BeginRead();
                    while (m_readBuffer.DataAvailable > 0 && !m_shutdown)
                    {
                        int msgstart = m_readBuffer.Position;
                        int msglen   = m_readBuffer.PeekInt32();
                        if (m_readBuffer.DataAvailable < msglen)
                        {
                            break;
                        }

                        m_readBuffer.BeginMessage();
                        TargetMessage cmd = (TargetMessage)m_readBuffer.ReadInt32();
                        switch (cmd)
                        {
                        case TargetMessage.Connect: ProcessMessage_Connect(); break;

                        case TargetMessage.Disconnect: ProcessMessage_Disconnect(); break;

                        case TargetMessage.ErrorMessage: ProcessMessage_ErrorMessage(); break;

                        case TargetMessage.StateUpdate: ProcessMessage_StateUpdate(); break;

                        case TargetMessage.BreakpointAdded: ProcessMessage_BreakpointAdded(); break;

                        case TargetMessage.BreakpointRemoved: ProcessMessage_BreakpointRemoved(); break;

                        case TargetMessage.CallstackUpdate: ProcessMessage_CallstackUpdate(); break;

                        case TargetMessage.ValueCached: ProcessMessage_ValueCached(); break;

                        case TargetMessage.LocalsUpdate: ProcessMessage_LocalsUpdate(); break;

                        case TargetMessage.WatchUpdate: ProcessMessage_WatchUpdate(); break;

                        case TargetMessage.ThreadsUpdate: ProcessMessage_ThreadsUpdate(); break;

                        case TargetMessage.UploadFile: ProcessMessage_UploadFile(); break;

                        case TargetMessage.SnippetResult: ProcessMessage_SnippetResult(); break;

                        case TargetMessage.AutocompleteOptions: ProcessMessage_AutocompleteOptions(); break;

                        case TargetMessage.ExMessage: ProcessMessage_ExMessage(); break;
                        }
                        m_readBuffer.EndMessage();
                    }

                    m_readBuffer.EndRead();
                }
            }
        }
Esempio n. 6
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            Logging.LogManager.DefaultLogger.Trace("OnTargeted Item ID: {0}", message.TargetID);

            if (player.Inventory.TryPickUp(this))
            {
                World.Leave(this);
            }
        }
Esempio n. 7
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            Logger.Debug(" (OnTargeted) the npc has dynID {0}", DynamicID);

            player.SelectedNPC = this;

            var count = Interactions.Count + Conversations.Count;

            if (count == 0)
            {
                return;
            }

            // If there is only one conversation option, immediatly select it without showing menu
            if (Interactions.Count == 0 && Conversations.Count == 1)
            {
                player.Conversations.StartConversation(Conversations[0].ConversationSNO);
                Conversations[0].MarkAsRead();
                UpdateConversationList();
                return;
            }


            NPCInteraction[] npcInters = new NPCInteraction[count];

            var it = 0;

            foreach (var conv in Conversations)
            {
                npcInters[it] = conv.AsNPCInteraction(this, player);
                it++;
            }

            foreach (var inter in Interactions)
            {
                npcInters[it] = inter.AsNPCInteraction(this, player);
                it++;
            }


            player.InGameClient.SendMessage(new NPCInteractOptionsMessage()
            {
                ActorID         = this.DynamicID,
                tNPCInteraction = npcInters,
                Type            = NPCInteractOptionsType.Normal
            });

            // TODO: this has no effect, why is it sent?
            player.InGameClient.SendMessage(new Mooege.Net.GS.Message.Definitions.Effect.PlayEffectMessage()
            {
                ActorId = this.DynamicID,
                Effect  = Net.GS.Message.Definitions.Effect.Effect.Unknown36
            });

            UpdateConversationList();
        }
Esempio n. 8
0
        public override async Task AddReactions()
        {
            //await TargetMessage.AddReactionsAsync(LanguageEmotes.Where(x => ValidLanguages.Contains(x.Item1)) // Get all from ValidLangauges
            //    .Select(x => x.Item2) // Get all IEmotes
            //    .ToArray());

            foreach (Language language in ValidLanguages)
            {
                await TargetMessage.AddReactionAsync(LanguageEmotes.Where(x => x.Item1 == language).FirstOrDefault().Item2);
            }
        }
Esempio n. 9
0
        public async Task ModifyOriginalMessage()
        {
            // Create the new message properties
            MessageProperties newProperties = CreateMessageProperties();

            // Modify the target message
            await TargetMessage.ModifyAsync(properties =>
            {
                properties.Content = newProperties.Content;
                properties.Embed   = newProperties.Embed;
            });
        }
Esempio n. 10
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.UseNephalemAltarMessage)
            {
                ActorID = this.DynamicID
            });

            player.Attributes[GameAttribute.Last_Altar_ANN] = (int)this.DynamicID;
            player.Attributes.BroadcastChangedIfRevealed();
            Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true;
            Attributes.BroadcastChangedIfRevealed();
        }
Esempio n. 11
0
/*
 * // Items are NOT constructed with tags!
 *      protected override void ReadTags()
 *      {
 *          base.ReadTags();
 *          if (this.Tags.ContainsKey((int)MarkerTagTypes.LoreSNOId))
 *          {
 *              LoreSNOId = Tags[(int)MarkerTagTypes.LoreSNOId].Int2;
 *          }
 *          else
 *          {
 *              LoreSNOId = -1;
 *          }
 *      }
 */
        public override void OnTargeted(Player player, TargetMessage message)
        {
            //Logger.Trace("OnTargeted");
            if (LoreSNOId != -1)
            {
                player.PlayLore(LoreSNOId, true);
            }
            if (player.GroundItems.ContainsKey(this.DynamicID))
            {
                player.GroundItems.Remove(this.DynamicID);
            }
            this.Destroy();
        }
Esempio n. 12
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            if (player.Busy)
            {
                return;
            }

            if (player.IsShopOpened)
            {
                return;
            }

            if (this.NPCType == Core.NPCType.VAULT)
            {
                Logging.LogManager.DefaultLogger.Trace("VAULT OPENED");
                InventoryShowWindowMessage msg_show_vault = new InventoryShowWindowMessage();
                msg_show_vault.windowId = InventoryWindowsID.Vault;
                msg_show_vault.visible  = true;
                player.GameClient.SendMessage(msg_show_vault);

                InventoryShowWindowMessage msg_show_playerinv = new InventoryShowWindowMessage();
                msg_show_playerinv.windowId = InventoryWindowsID.PlayerInventory;
                msg_show_playerinv.visible  = true;
                player.GameClient.SendMessage(msg_show_playerinv);

                player.Busy          = true;
                player.IsVaultOpened = true;
                player.OpenedNPC     = this;
            }

            if (this.NPCType == Core.NPCType.SHOP)
            {
                Logging.LogManager.DefaultLogger.Trace("SHOP OPENED");

                InventoryShowWindowMessage msg_show_shop = new InventoryShowWindowMessage();
                msg_show_shop.windowId = InventoryWindowsID._SHOP;
                msg_show_shop.visible  = true;
                player.GameClient.SendMessage(msg_show_shop);

                InventoryShowWindowMessage msg_show_playerinv = new InventoryShowWindowMessage();
                msg_show_playerinv.windowId = InventoryWindowsID.PlayerInventory;
                msg_show_playerinv.visible  = true;
                player.GameClient.SendMessage(msg_show_playerinv);

                this.ShopInventory.RevealTo(player);

                player.Busy         = true;
                player.IsShopOpened = true;
                player.OpenedNPC    = this;
            }
        }
Esempio n. 13
0
        private void OnObjectTargeted(GameClient client, TargetMessage message)
        {
            Actor targetActor = this.World.Actors[message.TargetID];

            if (targetActor != null)
            {
                if (targetActor.ActorType == ActorType.Item)
                {
                    targetActor.OnTargeted(this, message);
                    return;
                }

                if (targetActor.ActorType == ActorType.NPC)
                {
                    targetActor.OnTargeted(this, message);
                    return;
                }

                if (targetActor.ActorType == Dirac.GameServer.Core.ActorType.Monster)
                {
                    SkillManager.RunPower(this, message);
                }

                /*if (targetActor.ActorType == ActorType.Monster)
                 * {
                 *  bool powerHandled = PowerManager.RunPower(this, targetActor, message);
                 * }*/
            }
            else
            {
                bool powerHandled = SkillManager.RunPower(this, message);
            }

            /*if (!powerHandled)
             * {
             *  Actor actor = this.World.GetActorByDynamicId(message.TargetID);
             *  if (actor == null)
             *      return;
             *
             *  actor.OnTargeted(this, message);
             * }*/

            //this.ExpBonusData.Check(2);
        }
Esempio n. 14
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            var playersAffected = player.GetPlayersInRange(26f);

            foreach (Player plr in playersAffected)
            {
                foreach (Player targetAffected in playersAffected)
                {
                    plr.InGameClient.SendMessage(new PlayEffectMessage()
                    {
                        ActorId = targetAffected.DynamicID,
                        Effect  = Effect.HealthOrbPickup
                    });
                }
                //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO
                plr.AddPercentageHP(100);
            }
            base.OnTargeted(player, message);
        }
Esempio n. 15
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            var world = this.World.Game.GetWorld(this.Destination.WorldSNO);

            if (world == null)
            {
                Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO);
                return;
            }

            var startingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag);

            if (startingPoint != null)
            {
                player.ChangeWorld(world, startingPoint);
            }
            else
            {
                Logger.Warn("Portal's tagged starting point does not exist (Tag = {0})", this.Destination.StartingPointActorTag);
            }
        }
Esempio n. 16
0
        public static bool RunPower(Actor owner /*, Actor targetedActor*/, TargetMessage targetMessage)
        {
            if (targetMessage.PowerSlot == null)
            {
                return(false); //thrwo ex
            }
            //targetPosition = targetedActor.Position;

            //user.Attributes[GameAttribute.Mana_Cur, (int)(user as Player).Toon.HeroTable.PrimaryResource] = 100 /*GetMaxResource((int)Toon.HeroTable.SecondaryResource)*/;
            //user.Attributes.BroadcastChangedIfRevealed();


            //return false;


            // find and run a power implementation
            SkillContext implementation = SkillManager.createInstance((owner as Player), (SkillSlot)targetMessage.PowerSlot);

            if (implementation == null)
            {
                return(false); //loghack //throw ex
            }
            if (owner.World.Actors.ContainsKey(targetMessage.TargetID))
            {
                implementation.TargetActor = owner.World.Actors[targetMessage.TargetID];
            }
            implementation.TargetMessageFromClient = targetMessage;
            implementation.Player = (owner as Player);
            implementation.World  = owner.World;
            implementation.DestinationUserClick = targetMessage.Position;
            implementation.VectorDirector       = (implementation.DestinationUserClick - implementation.Player.Position).NormalizedCopy;

            implementation.Run();

            //Logging.LogManager.DefaultLogger.Trace("Skill SNO Used {0}", targetMessage.PowerSlot);

            return(true);
        }
Esempio n. 17
0
 public override void OnTargeted(Player player, TargetMessage message)
 {
     //Logger.Trace("OnTargeted");
     player.Inventory.PickUp(this);
 }
Esempio n. 18
0
        public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null,
                             TargetMessage targetMessage             = null)
        {
            Actor target;

            if (targetId == uint.MaxValue)
            {
                target = null;
            }
            else
            {
                target = user.World.GetActorByDynamicId(targetId);
                if (target == null)
                {
                    return(false);
                }

                targetPosition = target.Position;
            }

            #region Items and Monster spawn HACK
            // HACK: intercept hotbar skill 1 to always spawn test mobs.
            if (user is Player && powerSNO == (user as Player).SkillSet.HotBarSkills[4].SNOSkill)
            {
                // number of monsters to spawn
                int spawn_count = 3;

                // list of actorSNO values to pick from when spawning
                int[] actorSNO_values = { 5387, 6652, 5346 };
                int   actorSNO        = actorSNO_values[RandomHelper.Next(actorSNO_values.Length)];
                Logger.Debug("3 monsters spawning with actor sno {0}", actorSNO);

                for (int n = 0; n < spawn_count; ++n)
                {
                    Vector3D position;

                    if (targetPosition.X == 0f)
                    {
                        position = new Vector3D(user.Position);
                        if ((n % 2) == 0)
                        {
                            position.X += (float)(RandomHelper.NextDouble() * 20);
                            position.Y += (float)(RandomHelper.NextDouble() * 20);
                        }
                        else
                        {
                            position.X -= (float)(RandomHelper.NextDouble() * 20);
                            position.Y -= (float)(RandomHelper.NextDouble() * 20);
                        }
                    }
                    else
                    {
                        position    = new Vector3D(targetPosition);
                        position.X += (float)(RandomHelper.NextDouble() - 0.5) * 20;
                        position.Y += (float)(RandomHelper.NextDouble() - 0.5) * 20;
                        position.Z  = user.Position.Z;
                    }

                    Monster mon = new Monster(user.World, actorSNO, null);
                    mon.SetBrain(new Mooege.Core.GS.AI.Brains.MonsterBrain(mon));
                    mon.Position = position;
                    mon.Scale    = 1.35f;
                    mon.Attributes[GameAttribute.Hitpoints_Max_Total]          = 5f;
                    mon.Attributes[GameAttribute.Hitpoints_Max]                = 5f;
                    mon.Attributes[GameAttribute.Hitpoints_Total_From_Level]   = 0f;
                    mon.Attributes[GameAttribute.Hitpoints_Cur]                = 5f;
                    mon.Attributes[GameAttribute.Attacks_Per_Second_Total]     = 1.0f;
                    mon.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]   = 5f;
                    mon.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] = 7f;
                    mon.Attributes[GameAttribute.Casting_Speed_Total]          = 1.0f;
                    user.World.Enter(mon);
                }

                // spawn some useful items for testing at the ground of the player
                if (!_spawnedHelperItems)
                {
                    _spawnedHelperItems = true;
                    Items.ItemGenerator.Cook((Players.Player)user, "Sword_2H_205").EnterWorld(user.Position);
                    Items.ItemGenerator.Cook((Players.Player)user, "Crossbow_102").EnterWorld(user.Position);
                    for (int n = 0; n < 30; ++n)
                    {
                        Items.ItemGenerator.Cook((Players.Player)user, "Runestone_Unattuned_07").EnterWorld(user.Position);
                    }
                }

                return(true);
            }
            #endregion

            // find and run a power implementation
            var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO);
            if (implementation != null)
            {
                return(RunPower(user, implementation, target, targetPosition, targetMessage));
            }
            else
            {
                // no power script is available, but try to play the cast effects
                var efgTag = Mooege.Core.GS.Common.Types.TagMap.PowerKeys.CastingEffectGroup_Male;
                var tagmap = PowerTagHelper.FindTagMapWithKey(powerSNO, efgTag);
                if (tagmap != null)
                {
                    user.PlayEffectGroup(tagmap[efgTag].Id);
                }

                return(false);
            }
        }
 public override async Task AddReactions()
 {
     await TargetMessage.AddReactionAsync(EMOTE_EXIT);
 }
Esempio n. 20
0
 public async Task ClearReactions()
 {
     await TargetMessage.RemoveAllReactionsAsync();
 }
Esempio n. 21
0
 public override void OnTargeted(Player player, TargetMessage message)
 {
     base.OnTargeted(player, message);
     player.InGameClient.SendMessage(new OpenTradeWindowMessage((int)this.DynamicID));
 }
Esempio n. 22
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            Logger.Debug("(OnTargeted) Portal has been activated ");
            var world         = this.World.Game.GetWorld(this.Destination.WorldSNO);
            var startingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag);

            #region События
            //Подвал Адрии
            if (this.Destination.WorldSNO == 62751)
            {
                //Enter в Adrian's Hut
                bool QuestEnter = false;
                var  Cauldron   = world.GetActorBySNO(131123);
                if (player.PlayerIndex == 0)
                {
                    if (player.Toon.ActiveQuest == 72095)
                    {
                        player.Toon.ActiveQuest = 72095;
                        if (player.Toon.StepOfQuest == 5)
                        {
                            player.Toon.StepOfQuest   = 6;
                            player.Toon.StepIDofQuest = 51;
                            QuestEnter = true;
                        }
                        var Leah_Cellar = world.GetActorBySNO(203030);
                        Leah_Cellar.Position = new Vector3D(-200f, -200f, 3.051758E-05f);
                    }
                }
                if (QuestEnter == true)
                {
                    world.Game.Quests.NotifyQuest(72095, NullD.Common.MPQ.FileFormats.QuestStepObjectiveType.EventReceived, -1);
                    //world.Game.Quests.Advance(72095);
                }
            }
            #endregion

            #region Авто-Учёт перехода для Квест-Менеджера
            world.Game.Quests.NotifyQuest(player.Toon.ActiveQuest, NullD.Common.MPQ.FileFormats.QuestStepObjectiveType.EnterWorld, this.Destination.WorldSNO);
            #endregion
            if (world == null)
            {
                Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO);
                return;
            }

            #region Не санкционированные порталы)
            if (this.Destination.StartingPointActorTag == -100)
            {
                Vector3D ToPortal     = new Vector3D(2985.6241f, 2795.627f, 24.04532f);
                Vector3D ToPortal2Act = new Vector3D(310.739f, 275.8123f, 0.09997072f);
                Vector3D ToPortal3Act = new Vector3D(390f, 402f, 0f);
                Vector3D ToPortal4Act = new Vector3D(390f, 402f, 0f);



                //Сохраняем в базу координаты для обратного портала.
                var dbPortalOfToon  = DBSessions.AccountSession.Get <DBPortalOfToon>(player.Toon.PersistentID);
                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                dbPortalOfToon.WorldDest   = player.World.WorldSNO.Id;
                dbPortalOfToon.X           = this.Position.X;
                dbPortalOfToon.Y           = this.Position.Y;
                dbPortalOfToon.Z           = this.Position.Z;
                dbPortalOfToon.PlayerIndex = player.PlayerIndex;


                DBSessions.AccountSession.SaveOrUpdate(dbPortalOfToon);

                Logger.Warn("Data for back portal Saved.");

                if (dbQuestProgress.ActiveAct == 0)
                {
                    var TristramHome = player.World.Game.GetWorld(71150);
                    var OldPortal    = TristramHome.GetActorsBySNO(5648);
                    foreach (var OldP in OldPortal)
                    {
                        OldP.Destroy();
                    }

                    var ToHome = new Portal(player.World.Game.GetWorld(71150), 5648, player.World.Game.GetWorld(71150).StartingPoints[0].Tags);

                    ToHome.Destination = new ResolvedPortalDestination
                    {
                        WorldSNO              = dbPortalOfToon.WorldDest,
                        DestLevelAreaSNO      = player.CurrentScene.Specification.SNOLevelAreas[0],
                        StartingPointActorTag = -101
                    };
                    ToHome.EnterWorld(ToPortal);
                    if (PlayerBackPortalID == 0xFFFFFFFFFFFF)
                    {
                        ToHome.PlayerBackPortalID = player.Toon.PersistentID;
                    }

                    if (player.World.Game.GetWorld(71150) != player.World)
                    {
                        /*
                         * if (dbQuestProgress.ActiveQuest == 72221 & dbQuestProgress.StepOfQuest == 10 & player.PlayerIndex == 0)
                         * {
                         *  player.World.Game.Quests.NotifyQuest(72221, DiIiS.Common.MPQ.FileFormats.QuestStepObjectiveType.EventReceived, -1);
                         *  dbQuestProgress.StepOfQuest = 11;
                         * }*/
                        player.ChangeWorld(player.World.Game.GetWorld(71150), ToPortal);
                        if (dbQuestProgress.ActiveQuest == 72738 && dbQuestProgress.StepOfQuest == 18)
                        {
                            //player.World.Game.Quests.NotifyQuest(72738, DiIiS.Common.MPQ.FileFormats.QuestStepObjectiveType.EventReceived, -1);
                            dbQuestProgress.ActiveQuest = 73236;
                            dbQuestProgress.StepOfQuest = -1;
                        }
                        player.ChangeWorld(player.World.Game.GetWorld(71150), ToPortal);

                        if (player.ActiveHireling != null)
                        {
                            player.ActiveHireling.ChangeWorld(world, ToPortal);
                            player.InGameClient.SendMessage(new PetMessage()
                            {
                                Field0 = 0,
                                Field1 = 0,
                                PetId  = player.ActiveHireling.DynamicID,
                                Field3 = 0,
                            });
                        }
                    }
                    else
                    {
                        player.Teleport(ToPortal);
                        if (player.ActiveHireling != null)
                        {
                            player.ActiveHireling.Teleport(ToPortal);
                        }
                    }
                }
                else if (dbQuestProgress.ActiveAct == 100)
                {
                    var CaldeumHome = player.World.Game.GetWorld(161472);
                    var OldPortal   = CaldeumHome.GetActorsBySNO(5648);
                    foreach (var OldP in OldPortal)
                    {
                        OldP.Destroy();
                    }

                    var ToHome = new Portal(player.World.Game.GetWorld(161472), 5648, player.World.Game.GetWorld(161472).StartingPoints[0].Tags);
                    ToHome.Destination = new ResolvedPortalDestination
                    {
                        WorldSNO              = dbPortalOfToon.WorldDest,
                        DestLevelAreaSNO      = player.CurrentScene.Specification.SNOLevelAreas[0],
                        StartingPointActorTag = -101
                    };

                    ToHome.EnterWorld(ToPortal2Act);
                    if (PlayerBackPortalID == 0xFFFFFFFFFFFF)
                    {
                        ToHome.PlayerBackPortalID = player.Toon.PersistentID;
                    }
                    if (player.World.Game.GetWorld(161472) != player.World)
                    {
                        player.ChangeWorld(player.World.Game.GetWorld(161472), ToPortal2Act);
                        if (player.ActiveHireling != null)
                        {
                            player.ActiveHireling.ChangeWorld(world, ToPortal2Act);
                            player.InGameClient.SendMessage(new PetMessage()
                            {
                                Field0 = 0,
                                Field1 = 0,
                                PetId  = player.ActiveHireling.DynamicID,
                                Field3 = 0,
                            });
                        }
                    }
                }
                else if (dbQuestProgress.ActiveAct == 200)
                {
                    var BastionHome = player.World.Game.GetWorld(172909);
                    var OldPortal   = BastionHome.GetActorsBySNO(5648);
                    foreach (var OldP in OldPortal)
                    {
                        OldP.Destroy();
                    }

                    var ToHome = new Portal(player.World.Game.GetWorld(172909), 5648, player.World.Game.GetWorld(172909).StartingPoints[0].Tags);
                    ToHome.Destination = new ResolvedPortalDestination
                    {
                        WorldSNO              = dbPortalOfToon.WorldDest,
                        DestLevelAreaSNO      = player.CurrentScene.Specification.SNOLevelAreas[0],
                        StartingPointActorTag = -101
                    };
                    ToHome.EnterWorld(ToPortal3Act);
                    if (PlayerBackPortalID == 0xFFFFFFFFFFFF)
                    {
                        ToHome.PlayerBackPortalID = player.Toon.PersistentID;
                    }
                    if (player.World.Game.GetWorld(172909) != player.World)
                    {
                        player.ChangeWorld(player.World.Game.GetWorld(172909), ToPortal3Act);
                    }
                    else
                    {
                        player.Teleport(ToPortal3Act);
                    }
                }
                else if (dbQuestProgress.ActiveAct == 300)
                {
                    var BastionHome = player.World.Game.GetWorld(178152);
                    var OldPortal   = BastionHome.GetActorsBySNO(5648);
                    foreach (var OldP in OldPortal)
                    {
                        OldP.Destroy();
                    }

                    var ToHome = new Portal(player.World.Game.GetWorld(178152), 5648, player.World.Game.GetWorld(178152).StartingPoints[0].Tags);
                    ToHome.Destination = new ResolvedPortalDestination
                    {
                        WorldSNO              = dbPortalOfToon.WorldDest,
                        DestLevelAreaSNO      = player.CurrentScene.Specification.SNOLevelAreas[0],
                        StartingPointActorTag = -101
                    };
                    ToHome.EnterWorld(ToPortal4Act);
                    if (PlayerBackPortalID == 0xFFFFFFFFFFFF)
                    {
                        ToHome.PlayerBackPortalID = player.Toon.PersistentID;
                    }
                    if (player.World.Game.GetWorld(178152) != player.World)
                    {
                        player.ChangeWorld(player.World.Game.GetWorld(178152), ToPortal4Act);
                    }
                    else
                    {
                        player.Teleport(ToPortal4Act);
                    }
                }

                DBSessions.AccountSession.Flush();
            }
            //Портал из Города
            else if (this.Destination.StartingPointActorTag == -101)
            {
                if (PlayerBackPortalID == player.Toon.PersistentID)
                {
                    this.Destroy();
                }

                var dbPortalOfToon = DBSessions.AccountSession.Get <DBPortalOfToon>(PlayerBackPortalID);


                Vector3D ToPortal   = new Vector3D(dbPortalOfToon.X, dbPortalOfToon.Y, dbPortalOfToon.Z);
                var      DestWorld  = player.World.Game.GetWorld(dbPortalOfToon.WorldDest);
                var      oldPortals = DestWorld.GetActorsBySNO(5648);

                foreach (var OldP in oldPortals)
                {
                    OldP.Destroy();
                }

                if (player.World.Game.GetWorld(dbPortalOfToon.WorldDest) != player.World)
                {
                    player.ChangeWorld(player.World.Game.GetWorld(dbPortalOfToon.WorldDest), ToPortal);
                    if (player.ActiveHireling != null)
                    {
                        player.ActiveHireling.ChangeWorld(world, ToPortal);
                        player.InGameClient.SendMessage(new PetMessage()
                        {
                            Field0 = 0,
                            Field1 = 0,
                            PetId  = player.ActiveHireling.DynamicID,
                            Field3 = 0,
                        });
                    }
                }
                else
                {
                    player.Teleport(ToPortal);
                    if (player.ActiveHireling != null)
                    {
                        player.ActiveHireling.Teleport(ToPortal);
                        player.InGameClient.SendMessage(new PetMessage()
                        {
                            Field0 = 0,
                            Field1 = 0,
                            PetId  = player.ActiveHireling.DynamicID,
                            Field3 = 0,
                        });
                    }
                }
            }
            else
            {
                #endregion


                if (startingPoint != null)
                {
                    player.ChangeWorld(world, startingPoint);
                }
                else
                {
                    #region Использование умного телепорта
                    if (this.Destination.StartingPointActorTag != 0)
                    {
                        StartingPoint NeededStartingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag);
                        var           DestWorld           = world.Game.GetWorld(this.Destination.WorldSNO);
                        var           StartingPoints      = DestWorld.GetActorsBySNO(5502);
                        foreach (var ST in StartingPoints)
                        {
                            if (ST.CurrentScene.SceneSNO.Id == this.Destination.StartingPointActorTag)
                            {
                                NeededStartingPoint = (ST as StartingPoint);
                            }
                        }
                        player.ChangeWorld(DestWorld, NeededStartingPoint);
                    }
                    #endregion
                    else
                    {
                        Logger.Warn("Portal's tagged starting point does not exist (Tag = {0})", this.Destination.StartingPointActorTag);
                    }
                }
            }
        }
Esempio n. 23
0
        public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null,
                             TargetMessage targetMessage             = null)
        {
            Actor target;

            if (targetId == uint.MaxValue)
            {
                target = null;
            }
            else
            {
                target = user.World.GetActorByDynamicId(targetId);
                if (target == null)
                {
                    return(false);
                }

                targetPosition = target.Position;
            }

            // find and run a power implementation
            var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO);

            //Королевские скелеты 087012
            //[Actor] [Type: Gizmo] SNOId:5766 DynamicId: 2009 Position: x:964,2715 y:579,897 z:2,670288E-05 Name: trDun_Cath_Gate_C
            // 46 - 117779
            // Ворота -
            // Негодяй - 80812
            #region Южные ворота в тристрам.
            try
            {
                if (target.ActorSNO.Id == 90419)
                {
                    foreach (var player in user.World.Players)
                    {
                    }
                }
            } catch { }

            #endregion

            #region Не Лекарь, а мужик неподалёку)
            try
            {
                if (target.ActorSNO.Id == 205665)
                {
                    var playersAffected = user.GetPlayersInRange(26f);
                    foreach (Player player in playersAffected)
                    {
                        foreach (Player targetAffected in playersAffected)
                        {
                            player.InGameClient.SendMessage(new PlayEffectMessage()
                            {
                                ActorId = targetAffected.DynamicID,
                                Effect  = Effect.HealthOrbPickup
                            });
                        }

                        //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO
                        player.AddPercentageHP(100);
                    }
                    //player.UpdateExp(player.Attributes[Net.GS.Message.GameAttribute.Experience_Next]);
                }
            }catch { }
            #endregion

            #region Активация баннера игрока для телепортации
            try
            {
                var TeleportToPlayer = new Vector3D();
                if (target.ActorSNO.Name == "Banner_Player_1")
                {
                    foreach (var player in user.World.Players)
                    {
                        if (player.Value.PlayerIndex == 0)
                        {
                            if (player.Value.Position != user.Position)
                            {
                                TeleportToPlayer = player.Value.Position;
                            }
                        }
                        Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.PlayerIndex);
                    }
                    if (TeleportToPlayer.Z != 0)
                    {
                        user.Teleport(TeleportToPlayer);
                    }
                }
                else if (target.ActorSNO.Name == "Banner_Player_2")
                {
                    foreach (var player in user.World.Players)
                    {
                        if (player.Value.PlayerIndex == 1)
                        {
                            if (player.Value.Position != user.Position)
                            {
                                TeleportToPlayer = player.Value.Position;
                            }
                        }
                        Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position);
                    }
                    if (TeleportToPlayer.Z != 0)
                    {
                        user.Teleport(TeleportToPlayer);
                    }
                }
                else if (target.ActorSNO.Name == "Banner_Player_3")
                {
                    foreach (var player in user.World.Players)
                    {
                        if (player.Value.PlayerIndex == 2)
                        {
                            if (player.Value.Position != user.Position)
                            {
                                TeleportToPlayer = player.Value.Position;
                            }
                        }
                        Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position);
                    }
                    if (TeleportToPlayer.Z != 0)
                    {
                        user.Teleport(TeleportToPlayer);
                    }
                }
                else if (target.ActorSNO.Name == "Banner_Player_4")
                {
                    foreach (var player in user.World.Players)
                    {
                        if (player.Value.PlayerIndex == 3)
                        {
                            if (player.Value.Position != user.Position)
                            {
                                TeleportToPlayer = player.Value.Position;
                            }
                        }
                        Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position);
                    }
                    if (TeleportToPlayer.Z != 0)
                    {
                        user.Teleport(TeleportToPlayer);
                    }
                }
            }
            catch { }
            #endregion

            #region Квестовые события

            #region Северные ворота
            try
            {
                if (target.ActorSNO.Id == 121241)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            if (dbQuestProgress.StepOfQuest == 5)
                            {
                                dbQuestProgress.StepOfQuest = 6;
                                Dialog72221 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                    if (Dialog72221 == true)
                    {
                        //user.World.Game.Quests.Advance(72221);
                        user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, 121241);
                        Dialog72221 = false;
                    }
                }
            }
            catch { }
            #endregion

            #region  азговор с кузнецом
            try
            {
                if (target.ActorSNO.Id == 65036)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            dbQuestProgress.ActiveQuest = 72221;
                            if (dbQuestProgress.StepOfQuest == 1)
                            {
                                Dialog72221 = true;
                                dbQuestProgress.StepOfQuest = 2;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                    if (Dialog72221 == true)
                    {
                        Dialog72221 = false;
                        StartConversation(target.World, 198292);
                    }
                }
            }
            catch { }
            #endregion

            #region Выход через шкаф)
            try
            {
                if (target.ActorSNO.Id == 188743)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72095)
                        {
                            dbQuestProgress.ActiveQuest = 72095;
                            if (dbQuestProgress.StepOfQuest == 14)
                            {
                                dbQuestProgress.StepOfQuest = 15;
                                UseDoor72095 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }

                    if (this.UseDoor72095 == true)
                    {
                        user.World.Game.Quests.Advance(72095);
                        UseDoor72095 = false;
                    }
                    // 136291 - Houser_Door_trOut_newTristram
                }
            }
            catch { }
            #endregion

            #region Двери собора
            try
            {
                if (target.DynamicID == 1543 || target.ActorSNO.Id == 167289)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72095)
                        {
                            dbQuestProgress.ActiveQuest = 72095;
                            if (dbQuestProgress.StepOfQuest == 9)
                            {
                                dbQuestProgress.StepOfQuest = 10;
                                UseDoor72095 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }

                    if (this.UseDoor72095 == true)
                    {
                        user.World.Game.Quests.Advance(72095);
                        UseDoor72095 = false;
                    }
                }
            }
            catch {}
            #endregion

            #region Котёл в хижине
            try
            {
                if (target.DynamicID == 1859 || target.ActorSNO.Id == 131123)
                {
                    //Отлавливаем котёл в потойном подвале
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72095)
                        {
                            dbQuestProgress.ActiveQuest = 72095;
                            if (dbQuestProgress.StepOfQuest == 6)
                            {
                                //dbQuestProgress.StepOfQuest = 7;
                                UseActorOnKotel72095 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }

                    if (this.UseActorOnKotel72095 == true)
                    {
                        StartConversation(user.World, 167115);
                        user.World.Game.Quests.Advance(72095);
                        UseActorOnKotel72095 = false;
                    }
                }
            }
            catch {}
            #endregion

            #region Корона короля-скелета
            try
            {
                if (target.ActorSNO.Id == 159446)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            if (dbQuestProgress.StepOfQuest == 9)
                            {
                                dbQuestProgress.StepOfQuest = 10;
                                Dialog72221 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                    if (Dialog72221 == true)
                    {
                        //user.World.Game.Quests.Advance(72221);
                        string BrokenCrown = "SkeletonKing_BrokenCrown";
                        //target.Destroy();
                        foreach (var player in user.World.Players)
                        {
                            var item = Items.ItemGenerator.Cook(player.Value, BrokenCrown);
                            item.EnterWorld(player.Value.Position);
                        }
                        user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.PossessItem, -1);

                        Dialog72221 = false;
                    }
                }
                else if (target.ActorSNO.Id == 92168)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            if (dbQuestProgress.StepOfQuest == 10)
                            {
                                user.World.Game.Quests.Advance(72221);
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                }
                else if (target.ActorSNO.Id == 199642)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            if (dbQuestProgress.StepOfQuest == 9)
                            {
                                dbQuestProgress.StepOfQuest = 10;
                                Dialog72221 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                    if (Dialog72221 == true)
                    {
                        //user.World.Game.Quests.Advance(72221);
                        string BrokenCrown = "SkeletonKing_BrokenCrown";
                        //target.Destroy();
                        foreach (var player in user.World.Players)
                        {
                            var item = Items.ItemGenerator.Cook(player.Value, BrokenCrown);
                            item.EnterWorld(player.Value.Position);
                        }
                        user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.PossessItem, -1);

                        Dialog72221 = false;
                    }
                }
            }

            catch { }
            #endregion

            #region Меч короля скелетов
            try
            {
                if (target.ActorSNO.Id == 163449)
                {
                    //163449 - Sword Leoric
                    //220219 - Point to Spawn Ghost Leoric
                    //220218 - Point to Spawn Ghost Knight
                    //4182 - Ghost Knight
                    //4183 - Lachdanan's Ghost
                    //5365 - King Leoric's Ghost
                    //139823  Event_DoK_Kill.cnv
                    //139825  Event_DoK_Death.cnv

                    var GhostLeoricPoint    = user.World.GetActorBySNO(220219).Position;
                    var GhostKingtsSpawners = user.World.GetActorsBySNO(220218);
                    //Спауним Дух Леорика
                    user.World.SpawnMonster(5365, GhostLeoricPoint);
                    //Спауним Духов Рыцарей
                    for (int i = 0; i < 4; i++)
                    {
                        user.World.SpawnMonster(4182, GhostKingtsSpawners[i].Position);
                    }
                    //Спауним Дух Ласхадана
                    user.World.SpawnMonster(4183, GhostKingtsSpawners[4].Position);

                    //Запуск сцены
                    StartConversation(target.World, 139823);
                }
            }
            catch { }
            #endregion

            #region Король скелетов
            try
            {
                if (target.ActorSNO.Id == 5354)
                {
                    user.World.Game.Quests.NotifyQuest(72061, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, 5354);
                    target.Attributes[GameAttribute.Gizmo_State] = 1;
                    target.Attributes.BroadcastChangedIfRevealed();
                    var SkeletionThrone = user.World.GetActorBySNO(5354);
                    //user.World.SpawnMonster()
                    //var SkeletonKing = 0;
                    Vector3D    SpawnPoint   = new Vector3D(343.5578f, 270.1681f, 21.33655f);
                    List <uint> monsterAlive = new List <uint> {
                    };
                    user.World.BroadcastIfRevealed(new Mooege.Net.GS.Message.Definitions.Animation.PlayAnimationMessage
                    {
                        ActorID = SkeletionThrone.DynamicID,
                        Field1  = 5,
                        Field2  = 0,
                        tAnim   = new Net.GS.Message.Fields.PlayAnimationMessageSpec[]
                        {
                            new Net.GS.Message.Fields.PlayAnimationMessageSpec()
                            {
                                Duration         = 1000,
                                AnimationSNO     = 9859,
                                PermutationIndex = 0,
                                Speed            = 1f
                            }
                        }
                    }, SkeletionThrone);
                    SkeletionThrone.Attributes[Net.GS.Message.GameAttribute.Operatable] = false;
                    Timeout = new SecondsTickTimer(user.World.Game, 16f);
                    var ListenerKingSkeletons = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => WaitToSpawn(Timeout));

                    //Ждём пока убьют
                    ListenerKingSkeletons.ContinueWith(delegate
                    {
                        user.World.Leave(SkeletionThrone);
                        user.World.SpawnMonster(5350, SpawnPoint);
                        var SkeletonKing = user.World.GetActorBySNO(5350);
                        monsterAlive.Add(SkeletonKing.DynamicID);
                        SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar]   = true;
                        SkeletonKing.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true;
                        // DOES NOT WORK it should be champion affixes or shit of this kind ...
                        // Увеличиваем здоровье босса!
                        SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Max]                      = 2000f;
                        SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Cur]                      = 2000f;
                        SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Damage_Weapon_Min, 0]               = 100f;
                        SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Damage_Weapon_Delta, 0]             = 100f;
                        SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f;
                        SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Quest_Monster]                      = true;
                        var BossListener = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => OnKillBossListener(monsterAlive, user.World));
                        BossListener.ContinueWith(delegate
                        {
                            //despawnn 009848
                            user.World.Game.Quests.Advance(72061);
                            user.World.BroadcastIfRevealed(new Mooege.Net.GS.Message.Definitions.Animation.PlayAnimationMessage
                            {
                                ActorID = SkeletionThrone.DynamicID,
                                Field1  = 5,
                                Field2  = 0,
                                tAnim   = new Net.GS.Message.Fields.PlayAnimationMessageSpec[]
                                {
                                    new Net.GS.Message.Fields.PlayAnimationMessageSpec()
                                    {
                                        Duration         = 1000,
                                        AnimationSNO     = 9859,
                                        PermutationIndex = 0,
                                        Speed            = 1f
                                    }
                                }
                            }, SkeletionThrone);


                            foreach (var player in user.World.Players)
                            {
                                var dbQuestProgress         = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                                dbQuestProgress.StepOfQuest = 15;

                                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                                DBSessions.AccountSession.Flush();
                            }

                            Timeout             = new SecondsTickTimer(user.World.Game, 2f);
                            var ListenerWaiting = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => WaitToSpawn(Timeout));
                            ListenerWaiting.ContinueWith(delegate
                            {
                                var Throne = user.World.GetActorBySNO(175181);

                                user.World.BroadcastIfRevealed(new Mooege.Net.GS.Message.Definitions.Animation.PlayAnimationMessage
                                {
                                    ActorID = Throne.DynamicID,
                                    Field1  = 5,
                                    Field2  = 0,
                                    tAnim   = new Net.GS.Message.Fields.PlayAnimationMessageSpec[] { new Net.GS.Message.Fields.PlayAnimationMessageSpec()
                                                                                                     {
                                                                                                         Duration         = 100,
                                                                                                         AnimationSNO     = Throne.AnimationSet.TagMapAnimDefault[Core.GS.Common.Types.TagMap.AnimationSetKeys.Opening],
                                                                                                         PermutationIndex = 0,
                                                                                                         Speed            = 0.5f
                                                                                                     } }
                                }, Throne);

                                user.World.BroadcastIfRevealed(new Mooege.Net.GS.Message.Definitions.Animation.SetIdleAnimationMessage
                                {
                                    ActorID      = Throne.DynamicID,
                                    AnimationSNO = Core.GS.Common.Types.TagMap.AnimationSetKeys.Open.ID,
                                }, Throne);
                            });
                        });
                    });
                }
            }
            catch { }
            #endregion

            #region  азговор в кратере
            try
            {
                if (target.ActorSNO.Id == 180900)
                {
                    StartConversation(target.World, 181910);
                }
            }catch { }
            #endregion

            #region Лезвия меча
            try
            {
                if (target.ActorSNO.Id == 206527)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 117779)
                        {
                            if (dbQuestProgress.StepOfQuest == 5)
                            {
                                //118037 - Конец квеста
                                user.World.Leave(target.World.GetActorBySNO(206527));
                                StartConversation(target.World, 194412);
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                }
            }
            catch { }
            #endregion
            #endregion

            #region Книги
            try
            {
                #region Книга Лии - первый журнал
                if (target.ActorSNO.Id == 86817)
                {
                    Vector3D PointToItem = new Vector3D(93.56282f, 111.3167f, 0.5335404f);
                    //LeahJorunal First Book
                    string Leah_Diary_in_room = "LeahJournal_PartOne";
                    target.Destroy();
                    foreach (var player in user.World.Players)
                    {
                        var item = Items.ItemGenerator.Cook(player.Value, Leah_Diary_in_room);
                        item.EnterWorld(PointToItem);
                    }
                }
                #endregion
                #region История нового тристрама
                else if (target.ActorSNO.Id == 230232)
                {
                    Vector3D PointToItem        = new Vector3D(84.39566f, 100.7473f, 7.900131f);
                    string   HistoryNewTristram = "Lore_NewTRistram";
                    target.Destroy();
                    foreach (var player in user.World.Players)
                    {
                        var item = Items.ItemGenerator.Cook(player.Value, HistoryNewTristram);
                        item.EnterWorld(PointToItem);
                    }
                }
                #endregion
            }
            catch { }
            #endregion
            if (implementation != null)
            {
                return(RunPower(user, implementation, target, targetPosition, targetMessage));
            }
            else
            {
                return(false);
            }
        }
Esempio n. 24
0
        public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null,
                             TargetMessage targetMessage             = null)
        {
            Actor target;

            if (targetId == uint.MaxValue)
            {
                target = null;
            }
            else
            {
                target = user.World.GetActorByDynamicId(targetId);
                if (target == null)
                {
                    return(false);
                }

                targetPosition = target.Position;
            }

            // find and run a power implementation
            var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO);

            #region Южные ворота в тристрам.
            try
            {
                if (target.ActorSNO.Id == 90419)
                {
                    foreach (var player in user.World.Players)
                    {
                    }
                }
            } catch { }

            #endregion

            #region Не Лекарь, а мужик неподалёку)
            try
            {
                if (target.ActorSNO.Id == 205665)
                {
                    var playersAffected = user.GetPlayersInRange(26f);
                    foreach (Player player in playersAffected)
                    {
                        foreach (Player targetAffected in playersAffected)
                        {
                            player.InGameClient.SendMessage(new PlayEffectMessage()
                            {
                                ActorId = targetAffected.DynamicID,
                                Effect  = Effect.HealthOrbPickup
                            });
                        }

                        //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO
                        player.AddPercentageHP(100);
                    }
                    //player.UpdateExp(player.Attributes[Net.GS.Message.GameAttribute.Experience_Next]);
                }
            }catch { }
            #endregion

            #region Активация баннера игрока для телепортации
            try
            {
                var TeleportToPlayer = new Vector3D();
                if (target.ActorSNO.Name == "Banner_Player_1")
                {
                    foreach (var player in user.World.Players)
                    {
                        if (player.Value.PlayerIndex == 0)
                        {
                            if (player.Value.Position != user.Position)
                            {
                                TeleportToPlayer = player.Value.Position;
                            }
                        }
                        Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.PlayerIndex);
                    }
                    if (TeleportToPlayer.Z != 0)
                    {
                        user.Teleport(TeleportToPlayer);
                    }
                }
                else if (target.ActorSNO.Name == "Banner_Player_2")
                {
                    foreach (var player in user.World.Players)
                    {
                        if (player.Value.PlayerIndex == 1)
                        {
                            if (player.Value.Position != user.Position)
                            {
                                TeleportToPlayer = player.Value.Position;
                            }
                        }
                        Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position);
                    }
                    if (TeleportToPlayer.Z != 0)
                    {
                        user.Teleport(TeleportToPlayer);
                    }
                }
                else if (target.ActorSNO.Name == "Banner_Player_3")
                {
                    foreach (var player in user.World.Players)
                    {
                        if (player.Value.PlayerIndex == 2)
                        {
                            if (player.Value.Position != user.Position)
                            {
                                TeleportToPlayer = player.Value.Position;
                            }
                        }
                        Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position);
                    }
                    if (TeleportToPlayer.Z != 0)
                    {
                        user.Teleport(TeleportToPlayer);
                    }
                }
                else if (target.ActorSNO.Name == "Banner_Player_4")
                {
                    foreach (var player in user.World.Players)
                    {
                        if (player.Value.PlayerIndex == 3)
                        {
                            if (player.Value.Position != user.Position)
                            {
                                TeleportToPlayer = player.Value.Position;
                            }
                        }
                        Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position);
                    }
                    if (TeleportToPlayer.Z != 0)
                    {
                        user.Teleport(TeleportToPlayer);
                    }
                }
            }
            catch { }
            #endregion

            #region Квестовые события

            #region Северные ворота
            try
            {
                if (target.ActorSNO.Id == 121241)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            if (dbQuestProgress.StepOfQuest == 5)
                            {
                                dbQuestProgress.StepOfQuest = 6;
                                Dialog72221 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                    if (Dialog72221 == true)
                    {
                        //user.World.Game.Quests.Advance(72221);
                        user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, 121241);
                        Dialog72221 = false;
                    }
                }
            }
            catch { }
            #endregion

            #region  азговор с кузнецом
            try
            {
                if (target.ActorSNO.Id == 65036)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            dbQuestProgress.ActiveQuest = 72221;
                            if (dbQuestProgress.StepOfQuest == 1)
                            {
                                Dialog72221 = true;
                                dbQuestProgress.StepOfQuest = 2;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                    if (Dialog72221 == true)
                    {
                        Dialog72221 = false;
                        StartConversation(target.World, 198292);
                    }
                }
            }
            catch { }
            #endregion

            #region Выход через шкаф)
            try
            {
                if (target.ActorSNO.Id == 188743)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72095)
                        {
                            dbQuestProgress.ActiveQuest = 72095;
                            if (dbQuestProgress.StepOfQuest == 14)
                            {
                                dbQuestProgress.StepOfQuest = 15;
                                UseDoor72095 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }

                    if (this.UseDoor72095 == true)
                    {
                        user.World.Game.Quests.Advance(72095);
                        UseDoor72095 = false;
                    }
                    // 136291 - Houser_Door_trOut_newTristram
                }
            }
            catch { }
            #endregion

            #region Двери собора
            try
            {
                if (target.DynamicID == 1543 || target.ActorSNO.Id == 167289)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72095)
                        {
                            dbQuestProgress.ActiveQuest = 72095;
                            if (dbQuestProgress.StepOfQuest == 9)
                            {
                                dbQuestProgress.StepOfQuest = 10;
                                UseDoor72095 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }

                    if (this.UseDoor72095 == true)
                    {
                        user.World.Game.Quests.Advance(72095);
                        UseDoor72095 = false;
                    }
                }
            }
            catch {}
            #endregion

            #region Котёл в хижине
            try
            {
                if (target.DynamicID == 1859 || target.ActorSNO.Id == 131123)
                {
                    //Отлавливаем котёл в потойном подвале
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72095)
                        {
                            dbQuestProgress.ActiveQuest = 72095;
                            if (dbQuestProgress.StepOfQuest == 6)
                            {
                                //dbQuestProgress.StepOfQuest = 7;
                                UseActorOnKotel72095 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }

                    if (this.UseActorOnKotel72095 == true)
                    {
                        StartConversation(user.World, 167115);
                        user.World.Game.Quests.Advance(72095);
                        UseActorOnKotel72095 = false;
                    }
                }
            }
            catch {}
            #endregion

            #region Корона короля-скелета
            try
            {
                if (target.ActorSNO.Id == 159446)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            if (dbQuestProgress.StepOfQuest == 9)
                            {
                                dbQuestProgress.StepOfQuest = 10;
                                Dialog72221 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                    if (Dialog72221 == true)
                    {
                        //user.World.Game.Quests.Advance(72221);
                        string BrokenCrown = "SkeletonKing_BrokenCrown";
                        //target.Destroy();
                        foreach (var player in user.World.Players)
                        {
                            var item = Items.ItemGenerator.Cook(player.Value, BrokenCrown);
                            item.EnterWorld(player.Value.Position);
                        }
                        user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.PossessItem, -1);

                        Dialog72221 = false;
                    }
                }
                else if (target.ActorSNO.Id == 92168)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            if (dbQuestProgress.StepOfQuest == 10)
                            {
                                user.World.Game.Quests.Advance(72221);
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                }
                else if (target.ActorSNO.Id == 199642)
                {
                    foreach (var player in user.World.Players)
                    {
                        var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                        if (dbQuestProgress.ActiveQuest == 72221)
                        {
                            if (dbQuestProgress.StepOfQuest == 9)
                            {
                                dbQuestProgress.StepOfQuest = 10;
                                Dialog72221 = true;
                            }
                        }
                        DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                        DBSessions.AccountSession.Flush();
                    }
                    if (Dialog72221 == true)
                    {
                        //user.World.Game.Quests.Advance(72221);
                        string BrokenCrown = "SkeletonKing_BrokenCrown";
                        //target.Destroy();
                        foreach (var player in user.World.Players)
                        {
                            var item = Items.ItemGenerator.Cook(player.Value, BrokenCrown);
                            item.EnterWorld(player.Value.Position);
                        }
                        user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.PossessItem, -1);

                        Dialog72221 = false;
                    }
                }
            }

            catch { }
            #endregion
            #endregion

            #region Книги
            try
            {
                #region Книга Лии - первый журнал
                if (target.ActorSNO.Id == 86817)
                {
                    Vector3D PointToItem = new Vector3D(93.56282f, 111.3167f, 0.5335404f);
                    //LeahJorunal First Book
                    string Leah_Diary_in_room = "LeahJournal_PartOne";
                    target.Destroy();
                    foreach (var player in user.World.Players)
                    {
                        var item = Items.ItemGenerator.Cook(player.Value, Leah_Diary_in_room);
                        item.EnterWorld(PointToItem);
                    }
                }
                #endregion
                #region История нового тристрама
                else if (target.ActorSNO.Id == 230232)
                {
                    Vector3D PointToItem        = new Vector3D(84.39566f, 100.7473f, 7.900131f);
                    string   HistoryNewTristram = "Lore_NewTRistram";
                    target.Destroy();
                    foreach (var player in user.World.Players)
                    {
                        var item = Items.ItemGenerator.Cook(player.Value, HistoryNewTristram);
                        item.EnterWorld(PointToItem);
                    }
                }
                #endregion
            }
            catch { }
            #endregion
            if (implementation != null)
            {
                return(RunPower(user, implementation, target, targetPosition, targetMessage));
            }
            else
            {
                return(false);
            }
        }
Esempio n. 25
0
 public override void OnTargeted(Player player, TargetMessage message)
 {
 }
Esempio n. 26
0
        private void OnToonTargetChange(GameClient client, TargetMessage message)
        {
            if (message.Field1 == 0x77F20036)
            {
                this.EnterInn(client);
                return;
            }
            else if (client.ObjectIdsSpawned == null || !client.ObjectIdsSpawned.Contains(message.Field1)) return;

            client.ObjectIdsSpawned.Remove(message.Field1);

            var killAni = new int[]{
                    0x2cd7,
                    0x2cd4,
                    0x01b378,
                    0x2cdc,
                    0x02f2,
                    0x2ccf,
                    0x2cd0,
                    0x2cd1,
                    0x2cd2,
                    0x2cd3,
                    0x2cd5,
                    0x01b144,
                    0x2cd6,
                    0x2cd8,
                    0x2cda,
                    0x2cd9
            };
            client.SendMessage(new PlayEffectMessage()
            {
                Id = 0x7a,
                Field0 = message.Field1,
                Field1 = 0x0,
                Field2 = 0x2,
            });
            client.SendMessage(new PlayEffectMessage()
            {
                Id = 0x7a,
                Field0 = message.Field1,
                Field1 = 0xc,
            });
            client.SendMessage(new PlayHitEffectMessage()
            {
                Id = 0x7b,
                Field0 = message.Field1,
                Field1 = 0x789E00E2,
                Field2 = 0x2,
                Field3 = false,
            });

            client.SendMessage(new FloatingNumberMessage()
            {
                Id = 0xd0,
                Field0 = message.Field1,
                Field1 = 9001.0f,
                Field2 = 0,
            });

            client.SendMessage(new ANNDataMessage()
            {
                Id = 0x6d,
                Field0 = message.Field1,
            });

            int ani = killAni[RandomHelper.Next(killAni.Length)];
            Logger.Info("Ani used: " + ani);

            client.SendMessage(new PlayAnimationMessage()
            {
                Id = 0x6c,
                Field0 = message.Field1,
                Field1 = 0xb,
                Field2 = 0,
                tAnim = new PlayAnimationMessageSpec[1]
                {
                    new PlayAnimationMessageSpec()
                    {
                        Field0 = 0x2,
                        Field1 = ani,
                        Field2 = 0x0,
                        Field3 = 1f
                    }
                }
            });

            client.PacketId += 10 * 2;
            client.SendMessage(new DWordDataMessage()
            {
                Id = 0x89,
                Field0 = client.PacketId,
            });

            client.SendMessage(new ANNDataMessage()
            {
                Id = 0xc5,
                Field0 = message.Field1,
            });

            client.SendMessage(new AttributeSetValueMessage
            {
                Id = 0x4c,
                Field0 = message.Field1,
                Field1 = new NetAttributeKeyValue
                {
                    Attribute = GameAttribute.Attributes[0x4d],
                    Float = 0
                }
            });

            client.SendMessage(new AttributeSetValueMessage
            {
                Id = 0x4c,
                Field0 = message.Field1,
                Field1 = new NetAttributeKeyValue
                {
                    Attribute = GameAttribute.Attributes[0x1c2],
                    Int = 1
                }
            });

            client.SendMessage(new AttributeSetValueMessage
            {
                Id = 0x4c,
                Field0 = message.Field1,
                Field1 = new NetAttributeKeyValue
                {
                    Attribute = GameAttribute.Attributes[0x1c5],
                    Int = 1
                }
            });
            client.SendMessage(new PlayEffectMessage()
            {
                Id = 0x7a,
                Field0 = message.Field1,
                Field1 = 0xc,
            });
            client.SendMessage(new PlayEffectMessage()
            {
                Id = 0x7a,
                Field0 = message.Field1,
                Field1 = 0x37,
            });
            client.SendMessage(new PlayHitEffectMessage()
            {
                Id = 0x7b,
                Field0 = message.Field1,
                Field1 = 0x789E00E2,
                Field2 = 0x2,
                Field3 = false,
            });
            client.PacketId += 10 * 2;
            client.SendMessage(new DWordDataMessage()
            {
                Id = 0x89,
                Field0 = client.PacketId,
            });
        }
Esempio n. 27
0
 public override void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message)
 {
     World world = this.World.Game.GetWorld(this.Destination.WorldSNO);
     if (world != null)
         player.TransferTo(world, this.TargetPos);
     else
         Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO);
 }
Esempio n. 28
0
 // Message handlers
 private void OnObjectTargeted(GameClient client, TargetMessage message)
 {
     Actor actor = this.World.GetActor(message.TargetID);
     if (actor != null)
     {
         actor.OnTargeted(this, message);
     }
     else
     {
         //Logger.Warn("Player targeted an invalid object (ID = {0})", message.TargetID);
     }
 }
Esempio n. 29
0
        private void OnToonTargetChange(GameClient client, TargetMessage message)
        {
            Logger.Info("Player interaction with " + message.AsText());

            Portal p=GetPortal(message.Field1);

            if (p!=null)
            {
                //we have a transition between worlds here
                ChangeToonWorld(client, p.TargetWorldID, p.TargetPos); //targetpos will always be valid as otherwise the portal wouldn't be targetable
                return;
            }

            else if (client.ObjectIdsSpawned == null || !client.ObjectIdsSpawned.Contains(message.Field1)) return;

            client.ObjectIdsSpawned.Remove(message.Field1);

            var killAni = new int[]{
                    0x2cd7,
                    0x2cd4,
                    0x01b378,
                    0x2cdc,
                    0x02f2,
                    0x2ccf,
                    0x2cd0,
                    0x2cd1,
                    0x2cd2,
                    0x2cd3,
                    0x2cd5,
                    0x01b144,
                    0x2cd6,
                    0x2cd8,
                    0x2cda,
                    0x2cd9
            };
            client.SendMessage(new PlayEffectMessage()
            {
                Id = 0x7a,
                Field0 = message.Field1,
                Field1 = 0x0,
                Field2 = 0x2,
            });
            client.SendMessage(new PlayEffectMessage()
            {
                Id = 0x7a,
                Field0 = message.Field1,
                Field1 = 0xc,
            });
            client.SendMessage(new PlayHitEffectMessage()
            {
                Id = 0x7b,
                Field0 = message.Field1,
                Field1 = 0x789E00E2,
                Field2 = 0x2,
                Field3 = false,
            });

            client.SendMessage(new FloatingNumberMessage()
            {
                Id = 0xd0,
                Field0 = message.Field1,
                Field1 = 9001.0f,
                Field2 = 0,
            });

            client.SendMessage(new ANNDataMessage()
            {
                Id = 0x6d,
                Field0 = message.Field1,
            });

            int ani = killAni[RandomHelper.Next(killAni.Length)];
            Logger.Info("Ani used: " + ani);

            client.SendMessage(new PlayAnimationMessage()
            {
                Id = 0x6c,
                Field0 = message.Field1,
                Field1 = 0xb,
                Field2 = 0,
                tAnim = new PlayAnimationMessageSpec[1]
                {
                    new PlayAnimationMessageSpec()
                    {
                        Field0 = 0x2,
                        Field1 = ani,
                        Field2 = 0x0,
                        Field3 = 1f
                    }
                }
            });

            client.PacketId += 10 * 2;
            client.SendMessage(new DWordDataMessage()
            {
                Id = 0x89,
                Field0 = client.PacketId,
            });

            client.SendMessage(new ANNDataMessage()
            {
                Id = 0xc5,
                Field0 = message.Field1,
            });

            client.SendMessage(new AttributeSetValueMessage
            {
                Id = 0x4c,
                Field0 = message.Field1,
                Field1 = new NetAttributeKeyValue
                {
                    Attribute = GameAttribute.Attributes[0x4d],
                    Float = 0
                }
            });

            client.SendMessage(new AttributeSetValueMessage
            {
                Id = 0x4c,
                Field0 = message.Field1,
                Field1 = new NetAttributeKeyValue
                {
                    Attribute = GameAttribute.Attributes[0x1c2],
                    Int = 1
                }
            });

            client.SendMessage(new AttributeSetValueMessage
            {
                Id = 0x4c,
                Field0 = message.Field1,
                Field1 = new NetAttributeKeyValue
                {
                    Attribute = GameAttribute.Attributes[0x1c5],
                    Int = 1
                }
            });
            client.SendMessage(new PlayEffectMessage()
            {
                Id = 0x7a,
                Field0 = message.Field1,
                Field1 = 0xc,
            });
            client.SendMessage(new PlayEffectMessage()
            {
                Id = 0x7a,
                Field0 = message.Field1,
                Field1 = 0x37,
            });
            client.SendMessage(new PlayHitEffectMessage()
            {
                Id = 0x7b,
                Field0 = message.Field1,
                Field1 = 0x789E00E2,
                Field2 = 0x2,
                Field3 = false,
            });
            client.PacketId += 10 * 2;
            client.SendMessage(new DWordDataMessage()
            {
                Id = 0x89,
                Field0 = client.PacketId,
            });
        }
Esempio n. 30
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            Logger.Debug(" (OnTargeted) the npc has dynID {0}", DynamicID);

            player.SelectedNPC = this;

            var vendor = player.SelectedNPC as Vendor;
            var count  = Interactions.Count + Conversations.Count;

            if (count == 0)
            {
                return;
            }

            // If there is only one conversation option, immediatly select it without showing menu
            if (Interactions.Count == 0 && Conversations.Count == 1 && this != vendor)
            {
                player.Conversations.StartConversation(Conversations[0].ConversationSNO);
                Conversations[0].MarkAsRead();
                UpdateConversationList();
                return;
            }
            if (Interactions.Count == 0 & Conversations.Count > 0)
            {
                int AllDialogs = 0;
                ConversationManager Manager = new ConversationManager(player, this.World.Game.Quests);
                foreach (var ConvSNO in Conversations)
                {
                    if (new Conversation(ConvSNO.ConversationSNO, player, Manager).asset.ConversationType == NullD.Common.MPQ.FileFormats.ConversationTypes.AmbientGossip)
                    {
                        AllDialogs++;
                    }
                }
                Manager = null;
                bool HaveUnReaded = false;
                if (AllDialogs == Conversations.Count)
                {
                    if (Conversations.Count > 0 & Attributes[GameAttribute.Conversation_Icon, 0] != 1 & !(this is Vendor) & !(this is Healer))
                    {
                        foreach (var conv in this.Conversations)
                        {
                            if (!conv.Read)
                            {
                                Attributes[GameAttribute.Conversation_Icon, 0] = 3;
                                HaveUnReaded = true;
                                player.Conversations.StartConversation(conv.ConversationSNO);
                                conv.Read = true;
                            }
                        }
                        if (!HaveUnReaded)
                        {
                            Attributes[GameAttribute.Conversation_Icon, 0] = 0;
                        }
                        Attributes[Net.GS.Message.GameAttribute.MinimapActive] = true;
                    }

                    //player.Conversations.StartConversation(Conversations[DiIiS.Common.Helpers.Math.RandomHelper.Next(0,Conversations.Count-1)].ConversationSNO);

                    //Conversations[0].MarkAsRead();
                    UpdateConversationList();
                    return;
                }
            }

            NPCInteraction[] npcInters = new NPCInteraction[count];

            var it = 0;

            foreach (var conv in Conversations)
            {
                if (this == vendor)
                {
                    return;
                }
                else
                {
                    npcInters[it] = conv.AsNPCInteraction(this, player);
                    it++;
                }
            }

            foreach (var inter in Interactions)
            {
                npcInters[it] = inter.AsNPCInteraction(this, player);
                it++;
            }


            player.InGameClient.SendMessage(new NPCInteractOptionsMessage()
            {
                ActorID         = this.DynamicID,
                tNPCInteraction = npcInters,
                Type            = NPCInteractOptionsType.Normal
            });

            // TODO: this has no effect, why is it sent?
            player.InGameClient.SendMessage(new NullD.Net.GS.Message.Definitions.Effect.PlayEffectMessage()
            {
                ActorId = this.DynamicID,
                Effect  = Net.GS.Message.Definitions.Effect.Effect.Unknown36
            });
            if (this.ActorSNO.Id != 203030 || //Лея в подвале
                this.ActorSNO.Id != -1)
            {
                UpdateConversationList();
            }
        }
Esempio n. 31
0
 public override void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message)
 {
     //this.Die(player);
     //Temp route to powermanager
 }
Esempio n. 32
0
 public override void OnTargeted(Player player, TargetMessage message)
 {
     this.Die(player);
 }
Esempio n. 33
0
        public override void OnTargeted(Player player, TargetMessage message)
        {
            Logger.Debug("(OnTargeted) Portal has been activated ");

            var world     = this.World.Game.GetWorld(this.Destination.WorldSNO);
            var now_world = player.World;

            if (this.Destination.WorldSNO == 71150)
            {
                if (this.ActorSNO.Id == 241660)
                {
                    Vector3D Point = new Vector3D(2867.382f, 2398.66f, 1.813717f);
                    player.Teleport(Point);
                    //OnListenerToEnterGraveyard
                    var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                    if (dbQuestProgress.StepOfQuest == 6)
                    {
                        var ListenerEnterToGraveyard = Task <bool> .Factory.StartNew(() => OnListenerToEnterGraveyard(player, world));

                        ListenerEnterToGraveyard.ContinueWith(delegate
                        {
                            Logger.Debug("Enter to Road Objective done ");
                        });
                    }
                    DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                    DBSessions.AccountSession.Flush();
                }
                if (this.ActorSNO.Id == 241661)
                {
                    Vector3D Point = new Vector3D(2870.336f, 2498.836f, 3.700585f);
                    player.Teleport(Point);
                }
            }

            if (this.Destination.WorldSNO == 72637)
            {
                // Вход в Оскверненный склеп
                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                if (dbQuestProgress.ActiveQuest == 72221)
                {
                    if (dbQuestProgress.StepOfQuest == 7)
                    {
                        var Crypto = world.Game.GetWorld(72637);
                        var ListenerEnterToBossZone = Task <bool> .Factory.StartNew(() => OnListenerToEnterBossScene(player, Crypto));

                        ListenerEnterToBossZone.ContinueWith(delegate
                        {
                            Logger.Debug("Founding Zone Objective done ");
                            //156381 - Chancellor Eamon
                            var Summoner = world.GetActorBySNO(5387);
                            Crypto.SpawnMonster(156353, Summoner.Position);
                            var ChancellorEamon = world.GetActorBySNO(156353);
                            ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar]   = true;
                            ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true;
                            // DOES NOT WORK it should be champion affixes or shit of this kind ...
                            // Увеличиваем здоровье босса!
                            ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Max] = 200f;
                            ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Cur] = 200f;
                            ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f;
                            ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Quest_Monster] = true;
                            List <uint> Boss = new List <uint> {
                            };
                            Boss.Add(ChancellorEamon.DynamicID);
                            var BossKillEvent = Task <bool> .Factory.StartNew(() => OnKillListenerBossEamon(Boss, Crypto));
                            BossKillEvent.ContinueWith(delegate
                            {
                                dbQuestProgress.StepOfQuest = 9;
                                world.Game.Quests.Advance(72221);
                            });
                        });
                    }
                }
                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                DBSessions.AccountSession.Flush();
            }

            if (this.Destination.WorldSNO == 62751)
            {
                //Enter в Adrian's Hut
                bool QuestEnter = false;

                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                if (dbQuestProgress.ActiveQuest == 72095)
                {
                    dbQuestProgress.ActiveQuest = 72095;
                    if (dbQuestProgress.StepOfQuest == 5)
                    {
                        dbQuestProgress.StepOfQuest = 6;
                        QuestEnter = true;
                    }
                }
                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                DBSessions.AccountSession.Flush();

                if (QuestEnter == true)
                {
                    world.Game.Quests.Advance(72095);
                    QuestEnter = false;
                }
            }

            if (this.Destination.WorldSNO == 50579)
            {
                //Enter в Cathedral level 1
                bool QuestEnter = false;

                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                if (dbQuestProgress.ActiveQuest == 72095)
                {
                    dbQuestProgress.ActiveQuest = 72095;
                    if (dbQuestProgress.StepOfQuest == 10)
                    {
                        dbQuestProgress.StepOfQuest = 11;
                        QuestEnter = true;
                    }
                }
                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                DBSessions.AccountSession.Flush();

                if (QuestEnter == true)
                {
                    world.Game.Quests.Advance(72095);
                    QuestEnter = false;
                }

                var FakePortal = world.GetActorBySNO(168932);

                Portal RealPortal = new Portal(world.Game.GetWorld(50579), 5648, world.Game.GetWorld(60713).StartingPoints[0].Tags);
                // FakePortal.Destroy();
                //80652
                Vector3D RealPosition = new Vector3D(643.384f, 339.6074f, -6.970252f);
                RealPortal.Destination = new ResolvedPortalDestination
                {
                    WorldSNO              = 60713,
                    DestLevelAreaSNO      = 60885,
                    StartingPointActorTag = -102
                };
                RealPortal.EnterWorld(FakePortal.Position);
            }

            if (this.Destination.WorldSNO == 136441)
            {
                //Входим в погреб проклятых
                var dest            = world.Game.GetWorld(136441);
                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                if (dbQuestProgress.ActiveQuest == 72221)
                {
                    if (dbQuestProgress.StepOfQuest == 2)
                    {
                        //98888 - BlacksmithWife
                        //85900 - Mira Eamon Monster
                        //174023,204605,204615,204607,204608,204606,204616,174023,204605
                        //6646 - Ravenous Dead
                        List <uint> Deadly = new List <uint> {
                        };
                        List <uint> Boss   = new List <uint> {
                        };
                        #region Собираем всех!
                        var Preminions1 = dest.GetActorsBySNO(174023);
                        var Preminions2 = dest.GetActorsBySNO(204605);
                        var Preminions3 = dest.GetActorsBySNO(204615);
                        var Preminions4 = dest.GetActorsBySNO(204607);
                        var Preminions5 = dest.GetActorsBySNO(204608);
                        var Preminions6 = dest.GetActorsBySNO(204606);
                        var Preminions7 = dest.GetActorsBySNO(204616);
                        var Preminions8 = dest.GetActorsBySNO(174023);
                        var Preminions9 = dest.GetActorsBySNO(204605);
                        var PreBoss     = dest.GetActorBySNO(98888);
                        #endregion
                        #region Убираем мирных и заменяем их злыми)
                        foreach (var minion in Preminions1)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        foreach (var minion in Preminions2)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        foreach (var minion in Preminions3)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        foreach (var minion in Preminions4)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        foreach (var minion in Preminions5)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        foreach (var minion in Preminions6)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        foreach (var minion in Preminions7)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        foreach (var minion in Preminions8)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        foreach (var minion in Preminions9)
                        {
                            dest.SpawnMonster(6646, minion.Position);
                            dest.Leave(minion);
                        }
                        #endregion
                        #region Заполняем массив монстрами
                        var Minions = dest.GetActorsBySNO(6646);
                        foreach (var Minion in Minions)
                        {
                            Deadly.Add(Minion.DynamicID);
                        }
                        #endregion

                        var DeadlyKillEvent = Task <bool> .Factory.StartNew(() => OnKillListenerDeadly(Deadly, dest));

                        DeadlyKillEvent.ContinueWith(delegate
                        {
                            if (dbQuestProgress.StepOfQuest == 2)
                            {
                                world.Game.Quests.Advance(72221);
                                dest.SpawnMonster(85900, PreBoss.Position);
                                dest.Leave(PreBoss);
                                var BOSSMira = dest.GetActorBySNO(85900);
                                // Пытаемся привязать статус босса!
                                BOSSMira.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar]   = true;
                                BOSSMira.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true;
                                // DOES NOT WORK it should be champion affixes or shit of this kind ...
                                // Увеличиваем здоровье босса!
                                BOSSMira.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Max] = 200f;
                                BOSSMira.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Cur] = 200f;
                                BOSSMira.Attributes[Net.GS.Message.GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f;
                                BOSSMira.Attributes[Net.GS.Message.GameAttribute.Quest_Monster] = true;
                                Boss.Add(BOSSMira.DynamicID);
                                var BossSmithWifeKillEvent = Task <bool> .Factory.StartNew(() => OnKillListenerBossSmithWife(Boss, dest));

                                BossSmithWifeKillEvent.ContinueWith(delegate
                                {
                                    world.Game.Quests.Advance(72221);
                                    dbQuestProgress.StepOfQuest = 4;
                                });
                            }
                        });
                    }
                }
                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                DBSessions.AccountSession.Flush();
            }
            if (this.Destination.WorldSNO == 60395)
            {
                //Enter to Drowned Temple
            }

            if (this.Destination.WorldSNO == 60713)
            {
                //Enter to Leoric Hall
                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                if (dbQuestProgress.StepOfQuest > 12 || dbQuestProgress.ActiveQuest != 72095)
                {
                    var BookShelf = world.GetActorBySNO(5723);
                    world.BroadcastIfRevealed(new Net.GS.Message.Definitions.Animation.SetIdleAnimationMessage
                    {
                        ActorID      = BookShelf.DynamicID,
                        AnimationSNO = AnimationSetKeys.Open.ID
                    }, BookShelf);
                    var minions = world.GetActorsBySNO(80652);
                    foreach (var minion in minions)
                    {
                        minion.Destroy();
                    }
                }
                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                DBSessions.AccountSession.Flush();
            }
            if (this.Destination.WorldSNO == 50582)
            {
                //Enter to Cathedral Level 2

                Vector3D Point = new Vector3D(1146.33f, 1539.594f, 0.2f);
                if (world.Game.GetWorld(50582).StartingPoints.Count == 0)
                {
                    player.ChangeWorld(player.World.Game.GetWorld(50582), Point);
                }
            }

            if (world == null)
            {
                Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO);
                return;
            }



            //Portal to New Tristram
            if (this.Destination.StartingPointActorTag == -100)
            {
                Vector3D ToPortal = new Vector3D(2988.73f, 2798.009f, 24.66344f);
                //Сохраняем в базу координаты для обратного портала.
                var dbPortalOfToon  = DBSessions.AccountSession.Get <DBPortalOfToon>(player.Toon.PersistentID);
                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                dbPortalOfToon.WorldDest = now_world.WorldSNO.Id;
                dbPortalOfToon.X         = this.Position.X;
                dbPortalOfToon.Y         = this.Position.Y;
                dbPortalOfToon.Z         = this.Position.Z;
                DBSessions.AccountSession.SaveOrUpdate(dbPortalOfToon);

                Logger.Warn("Data for back portal Saved.");

                if (player.World.Game.GetWorld(71150) != player.World)
                {
                    try
                    {
                        if (player.ActiveHireling != null)
                        {
                            var HirelingToLeave = player.ActiveHireling;
                            now_world.Leave(HirelingToLeave);
                        }
                    }
                    catch { }
                    if (dbQuestProgress.ActiveQuest == 72221 && dbQuestProgress.StepOfQuest == 10)
                    {
                        player.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.EventReceived, -1);
                    }
                    player.ChangeWorld(player.World.Game.GetWorld(71150), ToPortal);
                }
                else
                {
                    player.Teleport(ToPortal);
                }

                //Create Back Portal
                var TristramHome = player.World.Game.GetWorld(71150);
                var OldPortal    = TristramHome.GetActorsBySNO(5648);
                foreach (var OldP in OldPortal)
                {
                    OldP.Destroy();
                }
                var ToHome = new Portal(player.World.Game.GetWorld(71150), 5648, player.World.Game.GetWorld(71150).StartingPoints[0].Tags);
                ToHome.Destination = new ResolvedPortalDestination
                {
                    WorldSNO              = dbPortalOfToon.WorldDest,
                    DestLevelAreaSNO      = 172,
                    StartingPointActorTag = -101
                };
                // Название локации, не работает(
                ToHome.NameSNOId = now_world.WorldSNO.Id;
                ToHome.EnterWorld(ToPortal);

                DBSessions.AccountSession.Flush();
            }
            else if (this.Destination.StartingPointActorTag == -101)
            {
                var      dbPortalOfToon = DBSessions.AccountSession.Get <DBPortalOfToon>(player.Toon.PersistentID);
                Vector3D ToPortal       = new Vector3D(dbPortalOfToon.X, dbPortalOfToon.Y, dbPortalOfToon.Z);
                var      DestWorld      = player.World.Game.GetWorld(dbPortalOfToon.WorldDest);
                var      oldPortals     = DestWorld.GetActorsBySNO(5648);

                foreach (var OldP in oldPortals)
                {
                    //        OldP.Destroy();
                }

                if (player.World.Game.GetWorld(dbPortalOfToon.WorldDest) != player.World)
                {
                    player.ChangeWorld(player.World.Game.GetWorld(dbPortalOfToon.WorldDest), ToPortal);
                }
                else
                {
                    player.Teleport(ToPortal);
                }
            }
            else if (this.Destination.StartingPointActorTag == -102)
            {
                var      dest  = world.Game.GetWorld(60713);
                Vector3D Point = new Vector3D(237.3005f, 200.94f, 31.17498f);

                bool QuestEnter = false;

                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID);
                if (dbQuestProgress.ActiveQuest == 72095)
                {
                    dbQuestProgress.ActiveQuest = 72095;
                    if (dbQuestProgress.StepOfQuest == 11)
                    {
                        dbQuestProgress.StepOfQuest = 12;
                        QuestEnter = true;
                        var         minions       = dest.GetActorsBySNO(80652);
                        List <uint> SkilletKiller = new List <uint> {
                        };
                        var CainBrains            = world.GetActorBySNO(102386);
                        foreach (var minion in minions)
                        {
                            SkilletKiller.Add(minion.DynamicID);

                            var facingAngle = Actors.Movement.MovementHelpers.GetFacingAngle(minion, CainBrains.Position);

                            minion.Move(CainBrains.Position, facingAngle);
                        }


                        var CainKillerEvent = Task <bool> .Factory.StartNew(() => OnKillListenerCain(SkilletKiller, dest));

                        CainKillerEvent.ContinueWith(delegate
                        {
                            if (dbQuestProgress.StepOfQuest == 12)
                            {
                                world.Game.Quests.Advance(72095);
                                dbQuestProgress.StepOfQuest = 13;
                            }
                        });
                    }
                    else
                    {
                        QuestEnter = false;
                    }
                }
                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                DBSessions.AccountSession.Flush();

                if (QuestEnter == true)
                {
                    world.Game.Quests.Advance(72095);
                    QuestEnter = false;
                }



                player.ChangeWorld(player.World.Game.GetWorld(60713), Point);
            }
            else if (this.Destination.StartingPointActorTag == -103)
            {
                Vector3D Point = new Vector3D(1769.139f, 2914.95f, 20.16885f);
                player.ChangeWorld(player.World.Game.GetWorld(71150), Point);
            }
            else if (this.Destination.StartingPointActorTag == -104)
            {
                Vector3D Point = new Vector3D(1769.139f, 2914.95f, 20.16885f);
                player.ChangeWorld(player.World.Game.GetWorld(71150), Point);
            }
            else
            {
                var startingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag);

                if (startingPoint != null)
                {
                    try
                    {
                        if (player.ActiveHireling != null)
                        {
                            var HirelingToLeave = player.ActiveHireling;
                            now_world.Leave(HirelingToLeave);
                            var NewTristram = player.InGameClient.Game.GetWorld(71150);
                            var Leah_Back   = NewTristram.GetActorByDynamicId(83);
                            Leah_Back.EnterWorld(Leah_Back.Position);
                        }
                    }
                    catch { }
                    player.ChangeWorld(world, startingPoint);
                }
                else
                {
                    Logger.Warn("Portal's tagged starting point does not exist (Tag = {0})", this.Destination.StartingPointActorTag);
                }
            }
        }
Esempio n. 34
0
 public override void OnTargeted(Player player, TargetMessage message)
 {
     player.InGameClient.SendMessage(new OpenSharedStashMessage((int)this.DynamicID));
 }
Esempio n. 35
0
        public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null,
                             TargetMessage targetMessage             = null)
        {
            Actor target;

            if (targetId == uint.MaxValue)
            {
                target = null;
            }
            else
            {
                target = user.World.GetActorByDynamicId(targetId);
                if (target == null)
                {
                    return(false);
                }

                targetPosition = target.Position;
            }

            // find and run a power implementation
            var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO);

            if (target != null)
            {
                try
                {
                    #region Выход через шкаф)

                    if (target.ActorSNO.Id == 188743)
                    {
                        foreach (var player in user.World.Game.Players.Values)
                        {
                            if (player.PlayerIndex == 0 & player.Toon.ActiveQuest == 72095)
                            {
                                player.Toon.ActiveQuest = 72095;
                                if (player.Toon.StepOfQuest == 14)
                                {
                                    player.Toon.StepOfQuest   = 15;
                                    player.Toon.StepIDofQuest = 32;
                                    user.World.Game.Quests.Advance(72095);
                                }
                            }
                        }
                    }

                    #endregion

                    #region Двери собора

                    else if (target.DynamicID == 1543 || target.ActorSNO.Id == 167289)
                    {
                        foreach (var player in user.World.Game.Players.Values)
                        {
                            if (player.PlayerIndex == 0 & player.Toon.ActiveQuest == 72095)
                            {
                                player.Toon.ActiveQuest = 72095;
                                if (player.Toon.StepOfQuest == 9)
                                {
                                    player.Toon.StepOfQuest   = 10;
                                    player.Toon.StepIDofQuest = 23;
                                    user.World.Game.Quests.Advance(72095);
                                }
                            }
                        }
                    }

                    #endregion

                    #region Выход через шкаф)

                    else if (target.ActorSNO.Id == 188743)
                    {
                        foreach (var player in user.World.Players)
                        {
                            if (player.Value.Toon.ActiveQuest == 72095)
                            {
                                player.Value.Toon.ActiveQuest = 72095;
                                if (player.Value.Toon.StepOfQuest == 14)
                                {
                                    player.Value.Toon.StepOfQuest   = 15;
                                    player.Value.Toon.StepIDofQuest = 32;
                                    user.World.Game.Quests.Advance(72095);
                                }
                            }
                        }
                    }

                    #endregion
                }
                catch { }
            }
            if (implementation != null)
            {
                return(RunPower(user, implementation, target, targetPosition, targetMessage));
            }
            else
            {
                return(false);
            }
        }
Esempio n. 36
0
        // Message handlers
        private void OnObjectTargeted(GameClient client, TargetMessage message)
        {
            Actor actor = this.World.GetActor(message.TargetID);
            if (actor != null)
            {
                if ((actor.GBHandle.Type == 1) && (actor.Attributes[GameAttribute.TeamID] == 10))
                {
                    this._lastMonsterAttackTick = this.InGameClient.Game.Tick;
                }

                actor.OnTargeted(this, message);
                CheckExpBonus(2);
            }
            else
            {
                //Logger.Warn("Player targeted an invalid object (ID = {0})", message.TargetID);
            }
        }
Esempio n. 37
0
 public override void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message)
 {
     //Logger.Trace("OnTargeted");
     player.Inventory.PickUp(this);
 }