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