Ejemplo n.º 1
0
        };                                        // Используем для отслеживания убийства


        public override void Execute(Map.World world)
        {
            var boss    = world.GetActorBySNO(CapitanDaltynAID);
            var minions = world.GetActorsBySNO(RiseZombieAID);

            if (boss == null)
            {
                Logger.Debug("Не найдено: Капитан Далтин - {0}", CapitanDaltynAID);
                Vector3D   CapitanDaltyn = new Vector3D(51.12595f, 100.2664f, 0.1000305f);
                Vector3D[] Zombie        = new Vector3D[4];
                Zombie[0] = new Vector3D(50.00065f, 125.4087f, 0.1000305f);
                Zombie[1] = new Vector3D(54.88688f, 62.24541f, 0.1000305f);
                Zombie[2] = new Vector3D(86.45869f, 77.09571f, 0.1000305f);
                Zombie[3] = new Vector3D(102.117f, 97.59058f, 0.1000305f);
                world.SpawnMonster(CapitanDaltynAID, CapitanDaltyn);
                foreach (Vector3D point in Zombie)
                {
                    world.SpawnMonster(RiseZombieAID, point);
                }
                boss = world.GetActorBySNO(CapitanDaltynAID);
                CapitanDaltynKiller.Add(boss.DynamicID);
                minions = world.GetActorsBySNO(RiseZombieAID);

                foreach (var minion in minions)
                {
                    CapitanDaltynKiller.Add(minion.DynamicID);
                }
            }
            else
            {
                CapitanDaltynKiller.Add(boss.DynamicID);
            }
            // Пытаемся привязать статус босса!
            boss = world.GetActorBySNO(CapitanDaltynAID);
            boss.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar]   = true;
            boss.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true;
            // DOES NOT WORK it should be champion affixes or shit of this kind ...
            // Увеличиваем здоровье босса!
            boss.Attributes[GameAttribute.Hitpoints_Max] = 200f;
            boss.Attributes[GameAttribute.Hitpoints_Cur] = 200f;
            boss.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f;
            boss.Attributes[GameAttribute.Quest_Monster] = true;
            //Запуск отслеживания убийства
            var ListenerDaltyn = Task <bool> .Factory.StartNew(() => OnKillListener(CapitanDaltynKiller, world));

            //Ждём пока убьют
            ListenerDaltyn.ContinueWith(delegate
            {
                world.Game.Quests.Advance(72095);
            });
        }
Ejemplo n.º 2
0
        public override void Execute(Map.World world)
        {
            Logger.Debug(" Death Of King Event ");

            //Берём участников сцены
            var LeoricGhost    = world.GetActorBySNO(5365);
            var GhostKnights   = world.GetActorsBySNO(4182);
            var LachdananGhost = world.GetActorBySNO(4183);
            var SwordPlace     = world.GetActorBySNO(163449);
            //Вычесляем взгляд для участников
            float LeoricFacingAngle    = Actors.Movement.MovementHelpers.GetFacingAngle(LeoricGhost, LachdananGhost);
            float LachdananFacingAngle = Actors.Movement.MovementHelpers.GetFacingAngle(LachdananGhost, LeoricGhost);


            LeoricGhost.SetFacingRotation(LeoricFacingAngle);
            LachdananGhost.SetFacingRotation(LachdananFacingAngle);
            //4 секунды до убийства
            //Убийство + запуск нового диалога


            foreach (var GKnight in GhostKnights)
            {
                float KnightFacing = Actors.Movement.MovementHelpers.GetFacingAngle(GKnight, world.GetActorBySNO(220219));
                GKnight.SetFacingRotation(KnightFacing);
            }
            LachdananGhost.Move(SwordPlace.Position, LachdananFacingAngle);

            TickTimer Timeout = new SecondsTickTimer(world.Game, 4f);
            var       ListenerKingSkeletons = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => WaitToSpawn(Timeout));

            ListenerKingSkeletons.ContinueWith(delegate
            {
                StartConversation(world, 139825);
            });
        }
Ejemplo n.º 3
0
        public override void Execute(Map.World world)
        {
            if (HadConversation)
            {
                HadConversation = false;
                var      CainBrains      = world.GetActorsBySNO(102386);
                Vector3D CainPath        = new Vector3D(76.99389f, 155.145f, 0.0997252f);
                var      FindDynamicCain = world.GetActorByDynamicId(2297);
                foreach (var AnyCain in CainBrains)
                {
                    var facingAngle = Actors.Movement.MovementHelpers.GetFacingAngle(AnyCain, CainPath);
                    AnyCain.Move(CainPath, facingAngle);
                }

                world.Game.Quests.Advance(72095);
                Logger.Debug(" Quests.Advance(72095) ");

                Logger.Debug(" Dialog with Cain ");
            }
            foreach (var player in world.Players.Values)
            {
                player.Toon.ActiveQuest    = 72095;
                player.Toon.StepOfQuest    = 14;
                player.Toon.StepIDofQuest  = 19;
                player.Toon.WayPointStatus = 7;


                Logger.Debug(" Progress Saved ");
                player.UpdateHeroState();
            }
            ;

            var BookShelf = world.GetActorBySNO(5723);

            world.BroadcastIfRevealed(new PlayAnimationMessage
            {
                ActorID = BookShelf.DynamicID,
                Field1  = 5,
                Field2  = 0,
                tAnim   = new Net.GS.Message.Fields.PlayAnimationMessageSpec[]
                {
                    new Net.GS.Message.Fields.PlayAnimationMessageSpec()
                    {
                        Duration         = 100,
                        AnimationSNO     = BookShelf.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening],
                        PermutationIndex = 0,
                        Speed            = 1
                    }
                }
            }, BookShelf);

            world.BroadcastIfRevealed(new SetIdleAnimationMessage
            {
                ActorID      = BookShelf.DynamicID,
                AnimationSNO = AnimationSetKeys.Open.ID
            }, BookShelf);

            //*/
        }
Ejemplo n.º 4
0
        public override void Execute(Map.World world)
        {
            if (HadConversation)
            {
                HadConversation = false;
                Logger.Debug(" Quests.Advance(72221) ");
            }
            foreach (var player in world.Players.Values)
            {
                player.Toon.ActiveQuest = 72221;
                player.Toon.StepOfQuest = 2;
                Logger.Debug(" Progress Saved ");
            }
            ;
            var      TELEGAS    = world.GetActorsBySNO(112131);
            Vector3D LastTelega = new Vector3D();

            foreach (var TELEGA in TELEGAS)
            {
                TELEGA.Destroy();
                LastTelega = TELEGA.Position;
            }

            world.Game.Quests.NotifyQuest(72221, QuestStepObjectiveType.HadConversation, 198292);
            var BlacksmithQuest = world.GetActorBySNO(65036);

            (BlacksmithQuest as Core.GS.Actors.InteractiveNPC).Conversations.Clear();
            (BlacksmithQuest as Core.GS.Actors.InteractiveNPC).Attributes[Net.GS.Message.GameAttribute.Conversation_Icon, 0] = 0;
            (BlacksmithQuest as Core.GS.Actors.InteractiveNPC).Attributes.BroadcastChangedIfRevealed();

            BlacksmithQuest.WalkSpeed = 0.33f;
            BlacksmithQuest.RunSpeed  = 0.33f;

            Vector3D FirstPoint  = new Vector3D(2905.856f, 2584.807f, 0.5997877f);
            Vector3D SecondPoint = new Vector3D(2790.396f, 2611.313f, 0.5997864f);

            var FirstfacingAngle = Actors.Movement.MovementHelpers.GetFacingAngle(BlacksmithQuest, FirstPoint);

            var SecondfacingAngle = Actors.Movement.MovementHelpers.GetFacingAngle(BlacksmithQuest, SecondPoint);

            BlacksmithQuest.Move(FirstPoint, FirstfacingAngle);

            Ticker.TickTimer Timeout  = new Ticker.SecondsTickTimer(world.Game, 3f);
            var ListenerKingSkeletons = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => WaitToSpawn(Timeout));

            ListenerKingSkeletons.ContinueWith(delegate
            {
                BlacksmithQuest.Move(SecondPoint, SecondfacingAngle);
            });
        }
Ejemplo n.º 5
0
        public override void Execute(Map.World world)
        {
            if (HadConversation)
            {
                HadConversation = false;
                world.Game.Quests.Advance(72095);
                world.Game.Quests.Notify(QuestStepObjectiveType.CompleteQuest, 72095);
            }
            foreach (var player in world.Players)
            {
                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                dbQuestProgress.LastQuest   = 72095;
                dbQuestProgress.ActiveQuest = 72221;
                dbQuestProgress.StepOfQuest = 1;
                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                DBSessions.AccountSession.Flush();
                player.Value.InGameClient.SendMessage(new Mooege.Net.GS.Message.Definitions.Quest.QuestMeterMessage()
                {
                    snoQuest = 72095,
                    Field1   = 2,
                    Field2   = 10.0f
                });
            }
            ;
            Logger.Debug(" Второй квест окончен. ");

            // starting third quest
            world.Game.Quests.Advance(72221);
            var      BlacksmithVendor = world.GetActorBySNO(56947);
            Vector3D position         = new Vector3D(BlacksmithVendor.Position);
            //world.SpawnMonster(65036, position);// NonVendor - 65036
            var BlacksmithQuest = world.GetActorBySNO(65036);

            BlacksmithQuest.RotationAxis = BlacksmithVendor.RotationAxis;
            BlacksmithQuest.RotationW    = BlacksmithVendor.RotationW;
            world.Leave(BlacksmithVendor);

            var      TELEGAS    = world.GetActorsBySNO(112131);
            Vector3D LastTelega = new Vector3D();

            foreach (var TELEGA in TELEGAS)
            {
                TELEGA.Destroy();
                LastTelega = TELEGA.Position;
            }
        }
Ejemplo n.º 6
0
        public override void Execute(Map.World world)
        {
            if (HadConversation)
            {
                HadConversation = false;
                Logger.Debug(" Quests.Advance(72221) ");
                //198312 - had Conv
                //156381 - Chancellor Eamon
            }
            foreach (var player in world.Players)
            {
                var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID);
                dbQuestProgress.ActiveQuest = 72221;
                dbQuestProgress.StepOfQuest = 2;
                DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress);
                DBSessions.AccountSession.Flush();
                Logger.Debug(" Progress Saved ");
            }
            ;
            // Нахер тележку!)
            //3026,339 2779,678 24,04532
            // 112131 - Телега
            var      TELEGAS    = world.GetActorsBySNO(112131);
            Vector3D LastTelega = new Vector3D();

            foreach (var TELEGA in TELEGAS)
            {
                TELEGA.Destroy();
                LastTelega = TELEGA.Position;
            }


            var      BlacksmithQuest  = world.GetActorBySNO(65036);
            Vector3D FirstPoint       = new Vector3D(3026.339f, 2779.678f, 24.0453f);
            var      FirstfacingAngle = Actors.Movement.MovementHelpers.GetFacingAngle(BlacksmithQuest, FirstPoint);

            //BlacksmithQuest.Move(FirstPoint,FirstfacingAngle);

            //world.SpawnMonster(112131, LastTelega);
            StartConversation(world, 198307);
        }
Ejemplo n.º 7
0
        //This is so ugly but I don't knwo how to put few mob with same actor ID in a "group"...
        private bool OnKillBonusListener(List <uint> monstersAlive, Map.World world, int taskID)
        {
            var monsterCount = monstersAlive.Count; //Since we are removing values while iterating, this is set at the first real read of the mob counting.

            Logger.Debug(" dead to be counted {0} world contains {1} WM ", monsterCount, world.GetActorsBySNO(wretchedMotherAID).Count);
            while (true)
            {
                if (world.GetActorsBySNO(wretchedMotherAID).Count < monsterCount)
                {
                    //If dead we count one less and send the update for the bonus stuff :p
                    Logger.Debug("A wretched mother has been killed");
                    monsterCount--;
                    world.Game.Quests.NotifyBonus(Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.BonusStep, bonusTaskID);
                    if (monsterCount == 0)
                    {
                        break;
                    }
                }
            }
            return(true);
        }
Ejemplo n.º 8
0
        public override void Execute(Map.World world)
        {
            Logger.Debug(" Death Of King Event Path 2");

            //Берём участников сцены
            var LeoricGhost    = world.GetActorBySNO(5365);
            var GhostKnights   = world.GetActorsBySNO(4182);
            var LachdananGhost = world.GetActorBySNO(4183);
            var SwordPlace     = world.GetActorBySNO(163449);

            TickTimer Timeout = new SecondsTickTimer(world.Game, 23f);
            var       ListenerKingSkeletons = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => WaitToSpawn(Timeout));

            ListenerKingSkeletons.ContinueWith(delegate
            {
                LeoricGhost.Destroy();
                LachdananGhost.Destroy();
                foreach (var GK in GhostKnights)
                {
                    GK.Destroy();
                }
            });
        }
Ejemplo n.º 9
0
        };                                                      //We fill this with the vectors of the actors
        //bool started = false;

        public override void Execute(Map.World world)
        {
            ////Disable RumFord so he doesn't offer the quest. Somehow, hes supposed to mark it as readed and not offer it while theres no other quest available but he does,
            ////so you can trigger the event multiple times while the event is already running, therefor, we disable his interaction till the event is done.-Wesko

            setActorOperable(world, 3739, false); // no need for it now the update conversation list is laucnhed once the conversation is marked as read :p
            StartConversation(world, 198199);
            var wave1Actors = world.GetActorsInGroup("GizmoGroup1");

            monstersId.Clear();
            ActorsVector3D.Clear();
            foreach (var actor in wave1Actors)
            {
                if (actor.ActorSNO.Id == 76857)
                {
                    monstersId.Add(6632);
                }
                else
                {
                    monstersId.Add(6644);
                }
                ActorsVector3D.Add(new Vector3D(actor.Position.X, actor.Position.Y, actor.Position.Z));
            }
            var zombieWave1 = Task <bool> .Factory.StartNew(() => LaunchWave(ActorsVector3D, world, monstersId));

            zombieWave1.Wait();
            var ListenerZombie1 = Task <bool> .Factory.StartNew(() => OnKillListener(monstersAlive, world));

            ListenerZombie1.ContinueWith(delegate //Once killed:
            {
                //Wave three: Skinnies + RumFord conversation #2 "They Keep Comming!".
                StartConversation(world, 80088);
                var wave2Actors = world.GetActorsInGroup("GizmoGroup2");
                monstersId.Clear();
                ActorsVector3D.Clear();
                foreach (var actor in wave2Actors)
                {
                    if (actor.ActorSNO.Id == 76857)
                    {
                        monstersId.Add(6632);
                    }
                    else
                    {
                        monstersId.Add(6644);
                    }
                    ActorsVector3D.Add(new Vector3D(actor.Position.X, actor.Position.Y, actor.Position.Z));
                }
                var zombieWave2 = Task <bool> .Factory.StartNew(() => LaunchWave(ActorsVector3D, world, monstersId));
                zombieWave2.Wait();
                var ListenerZombie2 = Task <bool> .Factory.StartNew(() => OnKillListener(monstersAlive, world));
                ListenerZombie2.ContinueWith(delegate //Once killed:
                {
                    StartConversation(world, 151102);
                    world.Game.Quests.Advance(87700);
                    Logger.Debug("Event finished");
                    // wyjebanie leah
                    var actorToShoot = world.GetActorByDynamicId(72);
                    if (actorToShoot != null)
                    {
                        Logger.Debug("trying to shoot actor SNO {0}, world contains {1} such actors ", actorToShoot.ActorSNO, world.GetActorsBySNO(3739).Count);
                        world.Leave(actorToShoot);
                    }
                    else
                    {
                        Logger.Debug("No actor to shoot yet");
                    }

                    setActorOperable(world, 3739, true);
                });
            });

            // check rumford state :p
            var rumfordActor = world.GetActorBySNO(3739);

            // display real type for rumford actor
            Logger.Debug(" Rumford has type {0}", rumfordActor.GetType());

            //var rumfordBrain = (rumfordActor as Living).Brain;
            //try
            //{
            //    Logger.Debug(" Rumford as a brain {0}, activating now ! ", (rumfordActor as CaptainRumford).Brain);
            //    (rumfordActor as CaptainRumford).Brain.Activate();

            //}
            //catch (System.NullReferenceException e)
            //{
            //    Logger.Debug(" brain in rumford has a lots of problems !");
            //}
        }
Ejemplo n.º 10
0
        };                                              //We use this for the killeventlistener.

        public override void Execute(Map.World world)
        {
            //The spawning positions for each monster in its wave. Basically, you add here the "number" of mobs, accoring to each vector LaunchWave() will spawn every mob in its position.
            //Vector3D[] WretchedMotherSpawn = { new Vector3D(2766.513f, 2913.982f, 24.04533f) };

            //Somehow shes already spawned when the Inn event finishes.. so we search for the ID and add it to the kill event listener.
            var actor = world.GetActorBySNO(wretchedMotherAID);

            if (actor == null)
            {
                Logger.Debug("Could not find the Wretched Mother ACTOR ID {0}", wretchedMotherAID);
                Vector3D FirstMother = new Vector3D(2766.513f, 2913.982f, 24.04533f);
                world.SpawnMonster(wretchedMotherAID, FirstMother);
                actor = world.GetActorBySNO(wretchedMotherAID);
                monstersAlive1.Add(actor.DynamicID);
            }
            else
            {
                monstersAlive1.Add(actor.DynamicID);
            }

            //Убираем телегу
            var FactorToShoot = world.GetActorBySNO(81699);

            try
            {
                world.Leave(FactorToShoot);
            }
            catch { }

            //FactorToShoot.Destroy();

            //Запуск отслеживания убийства
            var ListenerWretchedMother = Task <bool> .Factory.StartNew(() => OnKillListener(monstersAlive1, world));

            //Ждём пока убьют
            ListenerWretchedMother.ContinueWith(delegate
            {
                // WMQ + 3 WM (group)
                // portal + rumford (group)
                // WMQ + 3 WM (group)

                // force next quest step
                world.Game.Quests.Advance(87700);
                Logger.Debug("Event finished");
                // launch dialog
                StartConversation(world, 156223);

                // position of the wretched mother
                Vector3D[] WretchedMotherPosSpawn = new Vector3D[3];     // too hard 3 elems..
                WretchedMotherPosSpawn[0]         = new Vector3D(2427.788f, 2852.193f, 27.1f);
                WretchedMotherPosSpawn[1]         = new Vector3D(2356.931f, 2528.715f, 27.1f);
                WretchedMotherPosSpawn[2]         = new Vector3D(2119.563f, 2489.693f, 27.1f);

                // spawn 3 wretched mother
                Logger.Debug(" spawn 1  Wretched Mother ");
                world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[0]);
                Logger.Debug(" spawn 1  Wretched Mother ");
                world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[1]);
                Logger.Debug(" spawn 1  Wretched Mother ");
                world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[2]);

                // ugly hack to get all actors with the same snoID..no idea if it is lmegit or if game will crash and summon diablo on my pc...
                var actorsWM = world.GetActorsBySNO(wretchedMotherAID);     // this is the List of wretched mother ACTOR ID
                var actorWQM = world.GetActorBySNO(wretchedMotherQueenAID); // this is the wretched queen mother ACTOR ID

                Logger.Debug(" world contains {0} WM ", actorsWM.Count);

                if (actorsWM.Count > 0)
                {
                    monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID); monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID); monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID);
                    // run killbonus event listener
                    var ListenerWQTask = Task <bool> .Factory.StartNew(() => OnKillBonusListener(monstersAliveBonus, world, bonusTaskID));
                    //Wait for wretched queen mother to be killed.
                    ListenerWQTask.ContinueWith(delegate     //Once killed:
                    {
                        Logger.Debug("Bonus Event Completed ");
                    });
                }
                else
                {
                    Logger.Debug("Could not get/spawn the Wretched Mother ACTOR ID {0}", wretchedMotherAID);
                }
                if (actorWQM != null)
                {
                    // Пытаемся привязать статус босса!
                    actorWQM.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar]   = true;
                    actorWQM.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true;
                    //actorWQM.Attributes[Net.GS.Message.GameAttribute.Si]
                    // DOES NOT WORK it should be champion affixes or shit of this kind ...
                    // Увеличиваем здоровье босса!
                    //actorWQM.Q
                    actorWQM.Attributes[GameAttribute.Hitpoints_Max] = 150f;
                    actorWQM.Attributes[GameAttribute.Hitpoints_Cur] = 150f;

                    //Запуск отслеживания убийства королевы
                    var ListenerWQMTask = Task <bool> .Factory.StartNew(() => OnWMQKillListener(actorWQM.DynamicID, world));
                    //Wait for wretched queen mother to be killed.
                    ListenerWQMTask.ContinueWith(delegate            //Once killed:
                    {
                        Logger.Debug(" Wretch Queen Event done !!"); // WretchedQueenIsDead

                        // portal shit
                        var portalActorId         = world.GetActorBySNO(portalAID);
                        var ListenerUsePortalTask = Task <bool> .Factory.StartNew(() => OnUseTeleporterListener(portalActorId.DynamicID, world));
                        //Wait for portal to be used .
                        ListenerUsePortalTask.ContinueWith(delegate                //Once killed:
                        {
                            Logger.Debug(" Waypoint_OldTristram Objective done "); // Waypoint_OldTristram
                        });
                        //conversation with rumford... delegated to another class... since we have a nice conversation system :p
                    });
                }
                else
                {
                    Logger.Debug("Could not find the Wretched Mother QUEEN ACTOR ID {0}", wretchedMotherQueenAID);
                }
            });
        }
Ejemplo n.º 11
0
        public override void Execute(Map.World world)
        {
            if (HadConversation)
            {
                HadConversation = false;
            }
            foreach (var player in world.Players.Values)
            {
                player.Toon.MaximumQuest = 72221;
                player.Toon.ActiveQuest  = 72221;
                player.Toon.StepOfQuest  = -1;
            }
            ;
            Logger.Debug(" Второй квест окончен. ");


            bool questConversation = true;
            var  Cain = world.GetActorBySNO(3533);

            Cain.Attributes[Net.GS.Message.GameAttribute.MinimapActive] = true;
            (Cain as InteractiveNPC).Conversations.Clear();
            (Cain as InteractiveNPC).Conversations.Add(new Actors.Interactions.ConversationInteraction(198691));

            Cain.Attributes[Net.GS.Message.GameAttribute.Conversation_Icon, 0] = questConversation ? 1 : 0;
            Cain.Attributes.BroadcastChangedIfRevealed();

            try
            {
                var      BlacksmithVendor = world.GetActorBySNO(56947);
                Vector3D position         = new Vector3D(BlacksmithVendor.Position);
                var      BlacksmithQuest  = world.GetActorBySNO(65036);
                BlacksmithQuest.RotationAxis = BlacksmithVendor.RotationAxis;
                BlacksmithQuest.RotationW    = BlacksmithVendor.RotationW;

                var      TELEGAS    = world.GetActorsBySNO(112131);
                Vector3D LastTelega = new Vector3D();
                foreach (var TELEGA in TELEGAS)
                {
                    LastTelega = TELEGA.Position;
                    TELEGA.Destroy();
                }
            }
            catch { Logger.Warn("Не критичная ошибка скрипта."); }

            Players.Player Master = null;

            Logger.Debug("ПОЛУЧЕНИЕ НАГРАДЫ!");
            foreach (var player in world.Game.Players.Values)
            {
                if (player.PlayerIndex == 0)
                {
                    Master = player;
                }

                D3.Quests.QuestReward.Builder Reward = new D3.Quests.QuestReward.Builder();
                Reward.SnoQuest  = 72095;
                Reward.XpGranted = 3300;

                D3.Quests.QuestStepComplete.Builder StepCompleted = new D3.Quests.QuestStepComplete.Builder();
                StepCompleted.Reward = Reward.Build();
                StepCompleted.SetIsQuestComplete(true);

                player.InGameClient.SendMessage(new Net.GS.Message.Definitions.Quest.QuestStepCompleteMessage()
                {
                    QuestStepComplete = StepCompleted.Build()
                });
                player.UpdateExp(Reward.XpGranted);
            }
        }
Ejemplo n.º 12
0
        };                                              //We use this for the killeventlistener.

        public override void Execute(Map.World world)
        {
            //The spawning positions for each monster in its wave. Basically, you add here the "number" of mobs, accoring to each vector LaunchWave() will spawn every mob in its position.
            //Vector3D[] WretchedMotherSpawn = { new Vector3D(2766.513f, 2913.982f, 24.04533f) };

            //Somehow shes already spawned when the Inn event finishes.. so we search for the ID and add it to the kill event listener.
            var actor = world.GetActorBySNO(wretchedMotherAID);

            if (actor == null)
            {
                Logger.Debug("Could not find the Wretched Mother ACTOR ID {0}", wretchedMotherAID);
            }
            else
            {
                monstersAlive1.Add(actor.DynamicID);

                //Run Kill Event Listener
                var ListenerWretchedMother = Task <bool> .Factory.StartNew(() => OnKillListener(monstersAlive1, world));

                //Wait for wtretchedmother to be killed.
                ListenerWretchedMother.ContinueWith(delegate //Once killed:
                {
                    // WMQ + 3 WM (group)
                    // portal + rumford (group)


                    // WMQ + 3 WM (group)

                    // force next quest step
                    world.Game.Quests.Advance(87700);
                    Logger.Debug("Event finished");
                    // launch dialog
                    StartConversation(world, 156223);

                    // position of the wretched mother
                    Vector3D[] WretchedMotherPosSpawn = new Vector3D[3];  // too hard 3 elems..
                    WretchedMotherPosSpawn[0]         = new Vector3D(2427.788f, 2852.193f, 27.1f);
                    WretchedMotherPosSpawn[1]         = new Vector3D(2356.931f, 2528.715f, 27.1f);
                    WretchedMotherPosSpawn[2]         = new Vector3D(2119.563f, 2489.693f, 27.1f);

                    // spawn 3 wretched mother
                    Logger.Debug(" spawn 1  Wretched Mother ");
                    world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[0]);
                    Logger.Debug(" spawn 1  Wretched Mother ");
                    world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[1]);
                    Logger.Debug(" spawn 1  Wretched Mother ");
                    world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[2]);

                    // ugly hack to get all actors with the same snoID..no idea if it is lmegit or if game will crash and summon diablo on my pc...
                    var actorsWM = world.GetActorsBySNO(wretchedMotherQueenAID); // this is the List of wretched mother ACTOR ID
                    var actorWQM = world.GetActorBySNO(wretchedMotherQueenAID);  // this is the wretched queen mother ACTOR ID

                    Logger.Debug(" world contains {0} WM ", actorsWM.Count);

                    if (actorsWM.Count > 0)
                    {
                        monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID); monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID); monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID);
                        // run killbonus event listener
                        var ListenerWQTask = Task <bool> .Factory.StartNew(() => OnKillBonusListener(monstersAliveBonus, world, bonusTaskID));
                        //Wait for wretched queen mother to be killed.
                        ListenerWQTask.ContinueWith(delegate //Once killed:
                        {
                            Logger.Debug("Bonus Event Completed ");
                        });
                    }
                    else
                    {
                        Logger.Debug("Could not get/spawn the Wretched Mother ACTOR ID {0}", wretchedMotherAID);
                    }
                    if (actorWQM != null)
                    {
                        //Run Kill Event Listener
                        var ListenerWQMTask = Task <bool> .Factory.StartNew(() => OnWMQKillListener(actorWQM.DynamicID, world));
                        //Wait for wretched queen mother to be killed.
                        ListenerWQMTask.ContinueWith(delegate //Once killed:
                        {
                            //world.Game.Quests.Advance(87700);
                            Logger.Debug("Event finished");

                            // portal + rumford (group)

                            // portal shit
                            var portalActorId         = world.GetActorBySNO(portalAID);
                            var ListenerUsePortalTask = Task <bool> .Factory.StartNew(() => OnUseActorListener(portalActorId.DynamicID, world));
                            //Wait for portal to be used .
                            ListenerUsePortalTask.ContinueWith(delegate //Once killed:
                            {
                                Logger.Debug(" Portal used :p");
                            });



                            //conversation with rumford...
                        });
                    }
                    else
                    {
                        Logger.Debug("Could not find the Wretched Mother QUEEN ACTOR ID {0}", wretchedMotherQueenAID);
                    }
                });
            }
        }
Ejemplo n.º 13
0
        public override void Execute(Map.World world)
        {
            var actor = world.GetActorBySNO(wretchedMotherAID);

            if (actor == null)
            {
                Logger.Debug("Could not find the Wretched Mother ACTOR ID {0}", wretchedMotherAID);
                Vector3D FirstMother = new Vector3D(2766.513f, 2913.982f, 24.04533f);
                world.SpawnMonster(wretchedMotherAID, FirstMother);
                actor = world.GetActorBySNO(wretchedMotherAID);
                monstersAlive1.Add(actor.DynamicID);
            }
            else
            {
                monstersAlive1.Add(actor.DynamicID);
            }

            //Убираем телегу
            var FactorToShoot = world.GetActorBySNO(81699);

            try
            {
                world.BroadcastIfRevealed(new PlayAnimationMessage
                {
                    ActorID = FactorToShoot.DynamicID,
                    Field1  = 11,
                    Field2  = 0,
                    tAnim   = new Net.GS.Message.Fields.PlayAnimationMessageSpec[]
                    {
                        new Net.GS.Message.Fields.PlayAnimationMessageSpec()
                        {
                            Duration         = 10,
                            AnimationSNO     = 81701,
                            PermutationIndex = 0,
                            Speed            = 1
                        }
                    }
                }, FactorToShoot);

                FactorToShoot.Attributes[GameAttribute.Deleted_On_Server]    = true;
                FactorToShoot.Attributes[GameAttribute.Could_Have_Ragdolled] = true;
                FactorToShoot.Attributes.BroadcastChangedIfRevealed();
                FactorToShoot.Destroy();
            }
            catch { }

            //Запуск отслеживания убийства
            var ListenerWretchedMother = Task <bool> .Factory.StartNew(() => OnKillListener(monstersAlive1, world));

            //Ждём пока убьют
            ListenerWretchedMother.ContinueWith(delegate
            {
                world.Game.Quests.NotifyQuest(87700, QuestStepObjectiveType.EventReceived, -1);
                world.Game.Quests.NotifyQuest(87700, QuestStepObjectiveType.KillMonster, 108444);
                Logger.Debug("Event finished");

                StartConversation(world, 156223);

                // position of the wretched mother
                Vector3D[] WretchedMotherPosSpawn = new Vector3D[3]; // too hard 3 elems..
                WretchedMotherPosSpawn[0]         = new Vector3D(2427.788f, 2852.193f, 27.1f);
                WretchedMotherPosSpawn[1]         = new Vector3D(2356.931f, 2528.715f, 27.1f);
                WretchedMotherPosSpawn[2]         = new Vector3D(2119.563f, 2489.693f, 27.1f);

                // spawn 3 wretched mother
                Logger.Debug(" spawn 1  Wretched Mother ");
                world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[0]);
                Logger.Debug(" spawn 1  Wretched Mother ");
                world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[1]);
                Logger.Debug(" spawn 1  Wretched Mother ");
                world.SpawnMonster(wretchedMotherAID, WretchedMotherPosSpawn[2]);

                // ugly hack to get all actors with the same snoID..no idea if it is lmegit or if game will crash and summon diablo on my pc...
                var actorsWM = world.GetActorsBySNO(wretchedMotherAID);     // this is the List of wretched mother ACTOR ID
                var actorWQM = world.GetActorBySNO(wretchedMotherQueenAID); // this is the wretched queen mother ACTOR ID
                if (actorWQM == null)
                {
                    actorWQM = world.SpawnMonsterWithGet(wretchedMotherQueenAID, new Vector3D(2032.949f, 2771.926f, 40.15685f));
                }

                Logger.Debug(" world contains {0} WM ", actorsWM.Count);

                if (actorsWM.Count > 0)
                {
                    monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID); monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID); monstersAliveBonus.Add(actorsWM.ElementAt(0).DynamicID);
                    // run killbonus event listener
                    var ListenerWQTask = Task <bool> .Factory.StartNew(() => OnKillBonusListener(monstersAliveBonus, world, bonusTaskID));
                    //Wait for wretched queen mother to be killed.
                    ListenerWQTask.ContinueWith(delegate //Once killed:
                    {
                        Logger.Debug("Bonus Event Completed ");
                    });
                }
                else
                {
                    Logger.Debug("Could not get/spawn the Wretched Mother ACTOR ID {0}", wretchedMotherAID);
                }
                if (actorWQM != null)
                {
                    // Пытаемся привязать статус босса!
                    actorWQM.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar]   = true;
                    actorWQM.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true;
                    // Увеличиваем здоровье босса!
                    //actorWQM.Q
                    actorWQM.Attributes[GameAttribute.Hitpoints_Max] = 150f;
                    actorWQM.Attributes[GameAttribute.Hitpoints_Cur] = 150f;

                    //Запуск отслеживания убийства королевы
                    var ListenerWQMTask = Task <bool> .Factory.StartNew(() => OnWMQKillListener(actorWQM.DynamicID, world));
                    //Wait for wretched queen mother to be killed.
                    ListenerWQMTask.ContinueWith(delegate
                    {
                        Logger.Debug(" Wretch Queen Event done !!");

                        // portal shit
                        var portalActorId = world.GetActorBySNO(portalAID);
                        portalActorId.Attributes[Net.GS.Message.GameAttribute.Gizmo_Has_Been_Operated] = false;
                        var ListenerUsePortalTask = Task <bool> .Factory.StartNew(() => OnUseTeleporterListener(portalActorId.DynamicID, world));
                        //Wait for portal to be used .
                        ListenerUsePortalTask.ContinueWith(delegate                //Once killed:
                        {
                            Logger.Debug(" Waypoint_OldTristram Objective done "); // Waypoint_OldTristram
                        });
                    });
                }
                else
                {
                    Logger.Debug("Could not find the Wretched Mother QUEEN ACTOR ID {0}", wretchedMotherQueenAID);
                }
            });
        }
Ejemplo n.º 14
0
        };                                        // Используем для отслеживания убийства


        public override void Execute(Map.World world)
        {
            var boss    = world.GetActorBySNO(CapitanDaltynAID);
            var minions = world.GetActorsBySNO(RiseZombieAID);

            if (boss == null)
            {
                Logger.Debug("Не найдено: Капитан Далтин - {0}", CapitanDaltynAID);
                Vector3D   CapitanDaltyn = new Vector3D(51.12595f, 100.2664f, 0.1000305f);
                Vector3D[] Zombies       = new Vector3D[4];
                Zombies[0] = new Vector3D(50.00065f, 125.4087f, 0.1000305f);
                Zombies[1] = new Vector3D(54.88688f, 62.24541f, 0.1000305f);
                Zombies[2] = new Vector3D(86.45869f, 77.09571f, 0.1000305f);
                Zombies[3] = new Vector3D(102.117f, 97.59058f, 0.1000305f);
                var Daltyn = world.SpawnMonsterWithGet(CapitanDaltynAID, CapitanDaltyn);
                //[011523] [Anim] zombie_male_skinny_spawn
                world.BroadcastIfRevealed(new PlayAnimationMessage
                {
                    ActorID = Daltyn.DynamicID,
                    Field1  = 5,
                    Field2  = 0,
                    tAnim   = new Net.GS.Message.Fields.PlayAnimationMessageSpec[]
                    {
                        new Net.GS.Message.Fields.PlayAnimationMessageSpec()
                        {
                            Duration         = 20,
                            AnimationSNO     = 11523,
                            PermutationIndex = 0,
                            Speed            = 0.9f
                        }
                    }
                }, Daltyn);
                (Daltyn as Actors.Monster).Brain.DeActivate();
                foreach (Vector3D point in Zombies)
                {
                    var Zombie = world.SpawnMonsterWithGet(RiseZombieAID, point);
                    CapitanDaltynKiller.Add(Zombie.DynamicID);

                    Zombie.Attributes[GameAttribute.Quest_Monster] = true;
                    (Zombie as Actors.Monster).Brain.DeActivate();
                    world.BroadcastIfRevealed(new PlayAnimationMessage
                    {
                        ActorID = Zombie.DynamicID,
                        Field1  = 5,
                        Field2  = 0,
                        tAnim   = new Net.GS.Message.Fields.PlayAnimationMessageSpec[]
                        {
                            new Net.GS.Message.Fields.PlayAnimationMessageSpec()
                            {
                                Duration         = 160,
                                AnimationSNO     = 11523,
                                PermutationIndex = 0,
                                Speed            = 1f
                            }
                        }
                    }, Zombie);
                }
                boss = world.GetActorBySNO(CapitanDaltynAID);
                CapitanDaltynKiller.Add(boss.DynamicID);
                minions        = world.GetActorsBySNO(RiseZombieAID);
                boss.RunSpeed  = 0.33f;
                boss.WalkSpeed = 0.33f;

                Ticker.TickTimer Timeout = new Ticker.SecondsTickTimer(world.Game, 3.5f);
                var Boom = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => WaitToSpawn(Timeout));

                Boom.ContinueWith(delegate
                {
                    (Daltyn as Actors.Monster).Brain.Activate();
                    foreach (var minion in minions)
                    {
                        (minion as Actors.Monster).Brain.Activate();
                    }
                });
            }
            else
            {
                CapitanDaltynKiller.Add(boss.DynamicID);
            }

            // Пытаемся привязать статус босса!
            boss = world.GetActorBySNO(CapitanDaltynAID);
            boss.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar]   = true;
            boss.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true;
            // DOES NOT WORK it should be champion affixes or shit of this kind ...
            // Увеличиваем здоровье босса!

            boss.Attributes[GameAttribute.Hitpoints_Max] = 200f;
            boss.Attributes[GameAttribute.Hitpoints_Cur] = 200f;
            boss.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f;
            boss.Attributes[GameAttribute.Quest_Monster] = true;


            //Запуск отслеживания убийства
            var ListenerDaltyn = Task <bool> .Factory.StartNew(() => OnKillListener(CapitanDaltynKiller, world));

            //Ждём пока убьют
            ListenerDaltyn.ContinueWith(delegate
            {
                //{[Actor] [Type: Monster] SNOId:203030 DynamicId: 3634 Position: x:149,8516 y:60,33301 z:3,051758E-05 Name: Leah_AdriaCellar}
                var Leah_Cellar      = world.GetActorBySNO(203030);
                Leah_Cellar.Position = new Vector3D(149.8516f, 60.33301f, 3.051758E-05f);
                Leah_Cellar.Attributes[Net.GS.Message.GameAttribute.MinimapActive] = true;
                (Leah_Cellar as Actors.InteractiveNPC).Conversations.Clear();
                (Leah_Cellar as Actors.InteractiveNPC).Conversations.Add(new Actors.Interactions.ConversationInteraction(198588));
                Leah_Cellar.Attributes[Net.GS.Message.GameAttribute.Conversation_Icon, 0] = 1;
                Leah_Cellar.Attributes.BroadcastChangedIfRevealed();


                foreach (var player in world.Players)
                {
                    try
                    {
                        if (player.Value.PlayerIndex == 0)
                        {
                            world.Game.Quests.Advance(72095);
                        }
                        if (player.Value.ActiveHireling != null)
                        {
                            player.Value.ActiveHireling      = null;
                            player.Value.ActiveHirelingProxy = null;
                        }
                    }
                    catch { }
                }
            });
        }