/// <summary> /// mtlist /// </summary> /// <param name="packet"></param> public void MultiTargetListHit(MultiTargetListPacket mutliTargetListPacket) { PenaltyLogDTO penalty = Session.Account.PenaltyLogs.OrderByDescending(s => s.DateEnd).FirstOrDefault(); if (Session.Character.IsMuted()) { Session.SendPacket("cancel 0 0"); Session.CurrentMap?.Broadcast(Session.Character.Gender == GenderType.Female ? Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("MUTED_FEMALE"), 1) : Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("MUTED_MALE"), 1)); Session.SendPacket(Session.Character.GenerateSay(String.Format(Language.Instance.GetMessageFromKey("MUTE_TIME"), (penalty.DateEnd - DateTime.Now).ToString("hh\\:mm\\:ss")), 11)); Session.SendPacket(Session.Character.GenerateSay(String.Format(Language.Instance.GetMessageFromKey("MUTE_TIME"), (penalty.DateEnd - DateTime.Now).ToString("hh\\:mm\\:ss")), 12)); return; } if ((DateTime.Now - Session.Character.LastTransform).TotalSeconds < 3) { Session.SendPacket("cancel 0 0"); Session.SendPacket(Session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_ATTACKNOW"), 0)); return; } if (Session.Character.IsVehicled) { Session.SendPacket("cancel 0 0"); return; } Logger.Debug(mutliTargetListPacket.ToString(), Session.SessionId); if (mutliTargetListPacket != null && mutliTargetListPacket.TargetsAmount > 0 && mutliTargetListPacket.TargetsAmount == mutliTargetListPacket.Targets.Count()) { foreach (MultiTargetListSubPacket subpacket in mutliTargetListPacket.Targets) { List <CharacterSkill> skills = Session.Character.UseSp ? Session.Character.SkillsSp.GetAllItems() : Session.Character.Skills.GetAllItems(); if (skills != null) { CharacterSkill ski = skills.FirstOrDefault(s => s.Skill.CastId == subpacket.SkillCastId - 1); if (ski.CanBeUsed()) { MapMonster mon = Session.CurrentMap.GetMonster(subpacket.TargetId); if (mon != null && mon.IsInRange(Session.Character.MapX, Session.Character.MapY, ski.Skill.Range) && ski != null && mon.CurrentHp > 0) { Session.Character.LastSkillUse = DateTime.Now; mon.HitQueue.Enqueue(new GameObject.Networking.HitRequest(TargetHitType.SpecialZoneHit, Session, ski.Skill)); } Observable.Timer(TimeSpan.FromMilliseconds(ski.Skill.CastTime * 100)) .Subscribe( o => { Session.SendPacket($"sr {subpacket.SkillCastId - 1}"); } ); } } } } }
public void PacketFactoryTest() { // this test only tests the factory, not the packets intialize factory PacketFactory.Initialize <WalkPacket>(); Logger.InitializeLogger(LogManager.GetLogger(typeof(CoreTest))); // mtlist packet const string mtlistPacket = "mtlist 30 3 1698 3 1703 3 1861 3 1865 3 1870 3 1873 3 1874 3 1879 3 1880 3 1882 3 1885 3 1887 3 1890 3 1896 3 1900 3 1901 3 1904 3 1908 3 1915 3 1916 3 1919 3 1923 3 1925 3 1931 3 1934 3 1935 3 1937 3 1941 3 1942 3 1946"; MultiTargetListPacket deserializedMtlistPacket = PacketFactory.Deserialize <MultiTargetListPacket>(mtlistPacket); string serializedMtlistPacket = PacketFactory.Serialize(deserializedMtlistPacket); Assert.AreEqual(mtlistPacket, serializedMtlistPacket); // Equip Packet const string equipPacket = "equip 5 0 0.4903.5.0.0 2.340.0.0.0 3.720.0.0.0 5.4912.6.0.0 9.227.0.0.0 10.803.0.0.0 11.347.0.0.0 13.4146.0.0.0 14.4138.0.0.0"; EquipPacket deserializedEquipPacket = PacketFactory.Deserialize <EquipPacket>(equipPacket); string serializedEquipPacket = PacketFactory.Serialize(deserializedEquipPacket); Assert.AreEqual(equipPacket, serializedEquipPacket); // In Packet const string inPacket = "in 1 ImACharacter - 1 80 116 0 2 1 0 3 0 -1.12.1.8.-1.-1.-1.-1.-1 100 100 0 -1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 1 0 0 0 10 0"; InPacket deserializedInPacket = PacketFactory.Deserialize <InPacket>(inPacket); string serializedInPacket = PacketFactory.Serialize(deserializedInPacket); Assert.AreEqual(inPacket, serializedInPacket); // Walk Packet const string walkPacket = "walk 3 115 1 11"; WalkPacket deserializedWalkPacket = PacketFactory.Deserialize <WalkPacket>(walkPacket); string serializedWalkPacket = PacketFactory.Serialize(deserializedWalkPacket); Assert.AreEqual(walkPacket, serializedWalkPacket); WalkPacket invalidWalkPacket = PacketFactory.Deserialize <WalkPacket>("walk 3a0 115 1 11"); Assert.IsNull(invalidWalkPacket); // Dialog Packet const string dialogPacket = "dlg #walk^3^115^1^11 #walk^3^115^1^11 Do you really wanna walk this way?"; DialogPacket <WalkPacket, WalkPacket> deserializedDialogPacket = PacketFactory.Deserialize <DialogPacket <WalkPacket, WalkPacket> >(dialogPacket); string serializedDialogPacket = PacketFactory.Serialize(deserializedDialogPacket); Assert.AreEqual(dialogPacket, serializedDialogPacket); }