Пример #1
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);
                }
            });
        }
Пример #2
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 { }
                }
            });
        }