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; }
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; } }