Example #1
0
        private static void Game_OnGameProcessPacket(GamePacketEventArgs args)
        {
            if (args.PacketData[0] == Packet.S2C.TowerAggro.Header)
            {
                Packet.S2C.TowerAggro.Struct aggroPacket = Packet.S2C.TowerAggro.Decoded(args.PacketData);
                Obj_AI_Turret turret = ObjectManager.Get <Obj_AI_Turret>().First(t => t.NetworkId == aggroPacket.TurretNetworkId);
                Obj_AI_Base   target = ObjectManager.Get <Obj_AI_Base>().First(t => t.NetworkId == aggroPacket.TargetNetworkId);

                Game.PrintChat(turret.BaseSkinName + target.BaseSkinName);
            }



            GamePacket p = new GamePacket(args.PacketData);

            if (p.Header != Packet.S2C.TowerAggro.Header)
            {
                return;
            }
            if (Packet.S2C.TowerAggro.Decoded(args.PacketData).TargetNetworkId != Player.NetworkId)
            {
                return;
            }

            if (Game.Time - foundturret > 20 && !recalling)
            {
                var turret2 =
                    ObjectManager.Get <Obj_AI_Turret>()
                    .Where(x => x.Distance(Player.Position) < 3500 && x.IsAlly);

                if (turret2.Any())
                {
                    stopfollowing = true;
                    turret        = turret2.First();
                    foundturret   = Game.Time;
                }
            }


            if (!stopfollowing || recalling) //따라다니고 있고 리콜중이라면 패스
            {
                return;
            }

            Player.IssueOrder(GameObjectOrder.MoveTo, turret);                          // 터렛으로 움직여

            if ((Player.Distance(turret.Position) <= 350) || !(Game.Time - count > 15)) // 15초가 안지났고 터렛과의 거리가 350보다 크면
            {
                return;
            }
            Player.Spellbook.CastSpell(SpellSlot.Recall);

            recalling = true;
            count     = Game.Time;
        }
Example #2
0
 static void OnRecievePacket(GamePacketEventArgs args)
 {
     if (PacketChannel.S2C == args.Channel && args.PacketData[0] == Packet.S2C.TowerAggro.Header) //Header checks
     {
         Packet.S2C.TowerAggro.Struct temp = Packet.S2C.TowerAggro.Decoded(args.PacketData);      //Decode packet
         if (temp.TargetNetworkId != player.NetworkId)
         {
             return;
         }
         TUnit_obj.Position      = ObjectManager.GetUnitByNetworkId <Obj_AI_Turret>(temp.TurretNetworkId).Position;//Get turret position
         TUnit_obj.LastAggroTime = Game.Time;
         TUnit_obj.isAggred      = true;
     }
 }