Exemplo n.º 1
0
        private void HandleSendSkillsPacket(SendSkillsPacket packet)
        {
            if (packet.Values.Length == 1)
            {
                var skill = packet.Values[0].Skill != Skill.None ? packet.Values[0].Skill : lastSkill ?? Skill.None;
                if (skill == Skill.None)
                {
                    throw new NotImplementedException("Server sent 3a packet with skill 0 and no skill was requested from client.");
                }

                if (player.Skills.TryGetValue(skill, out var currentSkillValue))
                {
                    if (currentSkillValue.Value != packet.Values[0].Value)
                    {
                        eventJournalSource.Publish(new SkillChangedEvent(skill, currentSkillValue.Value, packet.Values[0].Value));
                    }

                    if (currentSkillValue.Value < packet.Values[0].Value)
                    {
                        var delta = packet.Values[0].Percentage - currentSkillValue.Percentage;
                        console.WriteLine(ConsoleLineType.SkillChanged,
                                          $"Skill {skill} increased by {delta:F1} %, currently it is {packet.Values[0].Percentage:F1} %");
                    }
                }
            }

            player.UpdateSkills(packet.Values);
        }
Exemplo n.º 2
0
        public void Can_deserialize_single_skill_update()
        {
            var rawPacket = FakePackets.Instantiate(new byte[]
            {
                0x3A, 0x00, 0x0B, 0xFF, 0x00, 0x2C, 0x00, 0x0A, 0x00, 0x0A, 0x00,
            });

            var packet = new SendSkillsPacket();

            packet.Deserialize(rawPacket);

            packet.Values.Length.Should().Be(1);
            packet.Values[0].Should().Be(new SkillValue(Skill.Lumberjacking, 0x0A, 0x0A, 0, false));
        }
Exemplo n.º 3
0
        public void Can_deserialize_skill_update_with_skillcaps_without_null_terminator()
        {
            var rawPacket = FakePackets.Instantiate(new byte[]
            {
                0x3A,       // packet
                0x00, 0x1F, // size
                0x02,       // type
                0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xBC,
                0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xBC,
                0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xBC,
            });

            var packet = new SendSkillsPacket();

            packet.Deserialize(rawPacket);

            packet.Values.Length.Should().Be(3);
            packet.Values[0].Should().Be(new SkillValue(Skill.Alchemy, 0x0, 0x0, 0, false));
            packet.Values[1].Should().Be(new SkillValue(Skill.Anatomy, 0, 0, 0, false));
            packet.Values[2].Should().Be(new SkillValue(Skill.AnimalLore, 0x0, 0x0, 0, false));
        }
Exemplo n.º 4
0
        public void Can_deserialize_initial_skill_update()
        {
            var rawPacket = FakePackets.Instantiate(new byte[]
            {
                0x3A,                                     // packet
                0x01, 0x64,                               // size
                0x00,                                     // type
                0x00, 0x01, 0x01, 0x2C, 0x01, 0x2F, 0x00, // ushort skill, ushort value, ushort unchangedValue, byte lock
                0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x0E, 0x01, 0x32, 0x01, 0x32, 0x00,
                0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x11, 0x01, 0x2C, 0x01, 0x2C, 0x00,
                0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x13, 0x01, 0x2F, 0x01, 0x2F, 0x00,
                0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x18, 0x01, 0x2C, 0x01, 0x2C, 0x00,
                0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x1A, 0x01, 0xF4, 0x01, 0xF4, 0x00,
                0x00, 0x1B, 0x01, 0x2C, 0x01, 0x2C, 0x00,
                0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x21, 0x00, 0x64, 0x00, 0x64, 0x00,
                0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x2F, 0x01, 0xF4, 0x01, 0xF4, 0x00,
                0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x32, 0x01, 0x2C, 0x01, 0x2D, 0x00,
                0x00, 0x00
            });

            var packet = new SendSkillsPacket();

            packet.Deserialize(rawPacket);

            packet.Values.Length.Should().Be(0x32);
            packet.Values.First().Should().Be(new SkillValue(Skill.Alchemy, 0x12C, 0x12F, 0, false));
            packet.Values.Last().Should().Be(new SkillValue(Skill.Necromancy, 0x12C, 0x12D, 0, false));
        }