コード例 #1
0
        private static void NewMethod1(Player player, Item item, ItemStructure strucc)
        {
            var builder = new PacketBuilder(Packets.SendToClient.OpenContainer);

            builder.AddU8(0);        // container index
            builder.AddU16(item.Id); // container look id? the one identifying the container
            builder.AddString(strucc.Name);
            builder.AddU8(strucc.ContainerSize);
            builder.AddU8(0); // root container, 1 == child container
            var inside = player.Equipment.Backpack.Inside;

            if (inside == null)
            {
                builder.AddU8(0);
            }
            else
            {
                builder.AddU8((byte)inside.Count);
                for (int i = 0; i < inside.Count; i++)
                {
                    builder.AddItem(inside[i]);
                }
            }

            player.OpenContainer(player.Equipment.Backpack);

            builder.Send(player);
        }
コード例 #2
0
        public void Open(byte newContainerIndex, Item container, ItemStructure strucc, bool childContainer = true)
        {
            var builder = new PacketBuilder(Packets.SendToClient.OpenContainer);
            builder.AddU8(newContainerIndex); // container index
            builder.AddU16(container.Id); // container look id? the one identifying the container
            builder.AddString(strucc.Name);
            builder.AddU8(strucc.ContainerSize);
            builder.AddU8((byte)(childContainer ? 1 : 0)); // 0 == root container, 1 == child container
            var inside = container.Inside;
            if (inside == null)
            {
                builder.AddU8(0);
            }
            else
            {
                builder.AddU8((byte) inside.Count);
                for (int i = 0; i < inside.Count; i++)
                {
                    builder.AddItem(inside[i]);
                }
            }

            _player.OpenContainer(container);

            builder.Send(_player);
        }
コード例 #3
0
        public void UpdateLight(Creature creature)
        {
            var builder = new PacketBuilder(Packets.SendToClient.UpdateCreatureLight);

            builder.AddU32(creature.Id);
            builder.AddU8(creature.LightColor);
            builder.AddU8(creature.LightLevel);
            builder.Send(_player);
        }
コード例 #4
0
        public void WorldLight()
        {
            var builder = new PacketBuilder(Packets.SendToClient.WorldLight);

            // 40 = night
            // 250 = day
            builder.AddU8(40);
            builder.AddU8(215);
            builder.Send(_player);
        }
コード例 #5
0
        public void CreatureTurn(Creature creature)
        {
            var builder = new PacketBuilder();

            builder.AddPacketId(Packets.SendToClient.CreatureTurn);
            builder.AddPosition(creature.Position);
            builder.AddU8(creature.ZIndex);
            builder.AddU16(0x63);
            builder.AddU32(creature.Id);
            builder.AddU8((byte)creature.Direction);
            builder.Send(_player);
        }
コード例 #6
0
        public void Stats()
        {
            var builder = new PacketBuilder(Packets.SendToClient.PlayerStats);

            builder.AddU16(_player.Hitpoints);
            builder.AddU16(_player.MaxHitpoints);
            builder.AddU16(_player.Capacity);
            builder.AddU32(_player.Experience);
            builder.AddU8(_player.Level);
            builder.AddU16(_player.Mana);
            builder.AddU16(_player.MaxMana);
            builder.AddU8(_player.MagicLevel.Get());
            builder.Send(_player);
        }
コード例 #7
0
        public void AddMapDescriptionToBuilder(PacketBuilder builder, ushort x, ushort y,
                                               byte z, int width, int height, bool isStep)
        {
            const int maxZ = 15;
            var       skip = -1;
            byte      startZ, endZ;
            short     zStep;

            if (z > 7)
            {
                startZ = (byte)(_player.Position.Z - 2);
                endZ   = (byte)(Math.Min(maxZ, z + 2));
                zStep  = 1;
            }
            else
            {
                startZ = 7;
                endZ   = 0;
                zStep  = -1;
            }
            // if (_player.Position.Z > 7)
            // {
            //     startz = (byte) (_player.Position.Z - 2);
            //     endz = (byte) (Math.Min(maxZ, _player.Position.Z + 2));
            //     zstep = 1;
            // }
            // else
            // {
            //     startz = 7;
            //     endz = 0;
            //     zstep = -1;
            // }

            // short x = (short) (_player.Position.X - 8);
            // short y = (short) (_player.Position.Y - 6);
            // byte z = _player.Position.Z;
            for (short nz = startZ;
                 nz != endZ + zStep;
                 nz += zStep) // +/- 2 of player z (but no higher than max Z or lower than min Z)
            {
                AddFloorDescriptionToBuilder(builder, x, y, (byte)nz, width, height, (short)(z - nz), isStep, ref skip);
            }

            if (skip < 0)
            {
                return;
            }
            builder.AddU8((byte)skip);
            builder.AddU8(0xFF);
        }
コード例 #8
0
        public void StatusIcons()
        {
            var builder = new PacketBuilder(Packets.SendToClient.PlayerStatusIcons);

            builder.AddU8((byte)Constants.StatusIcons.None);
            builder.Send(_player);
        }
コード例 #9
0
        public void MoveSouth()
        {
            var builder   = new PacketBuilder(Packets.SendToClient.CreaturePositionUpdate);
            var oldPos    = _player.Position;
            var oldZIndex = _player.ZIndex;

            builder.AddPosition(oldPos);
            builder.AddU8(oldZIndex); // old stack position (z-index)
            _player.MoveDown();
            var newPos = _player.Position;

            builder.AddPosition(newPos);
            builder.Send(_player);

            builder.AddPacketId(Packets.SendToClient.MoveDown);
            /* add rest of map description */
            _player.Packets.Map.AddMapDescriptionToBuilder(builder,
                                                           (ushort)(oldPos.X - 8),
                                                           (ushort)(newPos.Y + 7),
                                                           newPos.Z,
                                                           GameClient.Width, 1, true);

            builder.Send(_player);

            var newZIndex = IoC.Game.GetCreatureZIndex(_player, _player.Position);

            IoC.Game.CreatureMoved(_player, oldPos, newPos, newZIndex);
        }
コード例 #10
0
        public void ServerBroadcast(string message)
        {
            var builder = new PacketBuilder(Packets.SendToClient.SpecialMessage);

            builder.AddU8(0xF);
            builder.AddString(message);
            builder.Send(_player);
        }
コード例 #11
0
        public void Magic(Position destination, byte projectileId)
        {
            var builder = new PacketBuilder(Packets.SendToClient.MagicEffect);

            builder.AddPosition(destination);
            builder.AddU8((byte)(projectileId - 1)); // projectile id - 1 because the client adds 1 to whatever we send
            builder.Send(_player);
        }
コード例 #12
0
        public void UpdateHealth(Creature creature)
        {
            var builder = new PacketBuilder(Packets.SendToClient.UpdateCreatureHealthPercent);

            builder.AddU32(creature.Id);
            builder.AddU8(creature.PercentHitpoints);
            builder.Send(_player);
        }
コード例 #13
0
        public void Logout(Creature creature)
        {
            var builder = new PacketBuilder(Packets.SendToClient.MagicEffect);

            builder.AddPosition(creature.Position);
            builder.AddU8(2); // effect id - 1
            builder.Send(_player);
        }
コード例 #14
0
        public void LookAt(string message)
        {
            var builder = new PacketBuilder(Packets.SendToClient.SpecialMessage);

            builder.AddU8(0x13);
            builder.AddString(message);
            builder.Send(_player);
        }
コード例 #15
0
        public void AdvanceOrRaid(string message)
        {
            var builder = new PacketBuilder(Packets.SendToClient.SpecialMessage);

            builder.AddU8(0x10);
            builder.AddString(message);
            builder.Send(_player);
        }
コード例 #16
0
        public void StatusAndConsole(string message)
        {
            var builder = new PacketBuilder(Packets.SendToClient.SpecialMessage);

            builder.AddU8(0x11);
            builder.AddString(message);
            builder.Send(_player);
        }
コード例 #17
0
        public void Animated(Position pos, Colors color, string message)
        {
            var builder = new PacketBuilder(Packets.SendToClient.AnimatedText);

            builder.AddPosition(pos);
            builder.AddU8((byte)color);
            builder.AddString(message);
            builder.Send(_player);
        }
コード例 #18
0
        public void CreatureDisappear(Creature creature)
        {
            var builder = new PacketBuilder();

            builder.AddPacketId(Packets.SendToClient.ItemOrCreatureDisappear);
            builder.AddPosition(creature.Position);
            builder.AddU8(creature.ZIndex);
            builder.Send(_player);
        }
コード例 #19
0
        public void Private(string fromName, string message)
        {
            var builder = new PacketBuilder(Packets.SendToClient.Message);

            builder.AddString(fromName);               // source player
            builder.AddU8((byte)MessageTypes.Private); // message type
            builder.AddString(message);
            builder.Send(_player);
        }
コード例 #20
0
        /// <summary>
        /// Probably some sort of global channel message
        /// </summary>
        public void NotSure(string text, string something)
        {
            var builder = new PacketBuilder(Packets.SendToClient.Message);

            builder.AddString(text);                   // source player
            builder.AddU8((byte)MessageTypes.NotSure); // message type
            builder.AddString(something);              // source player
            builder.Send(_player);
        }
コード例 #21
0
        public void Projectile(Position source, Position destination, byte projectileId)
        {
            var builder = new PacketBuilder(Packets.SendToClient.ProjectileEffect);

            builder.AddPosition(source);
            builder.AddPosition(destination);
            builder.AddU8((byte)(projectileId - 1)); // projectile id - 1 because the client adds 1 to whatever we send
            builder.Send(_player);
            // 3 (4) == HMM projectile id
        }
コード例 #22
0
        //     if (!tile.skip)
        //     {
        //         if (skip >= 0)
        //         {
        //             builder.AddU8((byte) skip);
        //             builder.AddU8(0xFF);
        //         }
        //
        //         skip = 0;
        //         var count = 0;
        //         if (tile.t.GroundId > 0)
        //         {
        //             builder.AddU16(tile.t.GroundId);
        //             count++;
        //         }
        //
        //         if (tile.t.Items?.Count > 0)
        //         {
        //             foreach (var t in tile.t.Items)
        //             {
        //                 if (count > 9)
        //                     break;
        //                 builder.AddItem(t);
        //                 count++;
        //             }
        //         }
        //
        //         var creatures = Game.Instance.GetCreaturesOnTile(currentTile);
        //
        //         if (creatures == null) continue;
        //         foreach (var creature in creatures)
        //         {
        //             if (count > 9)
        //                 break;
        //             builder.AddCreature(_player, creature);
        //             count++;
        //         }
        //     }
        //     else
        //     {
        //         skip++;
        //         if (skip != 0xFF) continue;
        //         builder.AddU8(0xFF);
        //         builder.AddU8(0xFF);
        //         skip = -1;
        //     }
        // }


        public void CreatureMoved(Position oldPos, Position newPos, byte newZIndex)
        {
            var builder = new PacketBuilder();

            builder.AddPacketId(Packets.SendToClient.CreaturePositionUpdate);
            builder.AddPosition(oldPos);
            builder.AddU8(newZIndex); // not 100% sure if it should be new or old z-index
            builder.AddPosition(newPos);
            builder.Send(_player);
        }
コード例 #23
0
        public void Creature(Position pos, string message)
        {
            var builder = new PacketBuilder(Packets.SendToClient.Message);

            builder.AddString("");                      // source player
            builder.AddU8((byte)MessageTypes.Creature); // message type
            builder.AddPosition(pos);
            builder.AddString(message);
            builder.Send(_player);
        }
コード例 #24
0
        public void Yell(Position pos, string fromName, string message)
        {
            var builder = new PacketBuilder(Packets.SendToClient.Message);

            builder.AddString(fromName);            // source player
            builder.AddU8((byte)MessageTypes.Yell); // message type
            builder.AddPosition(pos);
            builder.AddString(message.ToUpper());
            builder.Send(_player);
        }
コード例 #25
0
        public void LocalMessage(Position pos, string fromName, string message, byte speechType)
        {
            var builder = new PacketBuilder(Packets.SendToClient.Message);

            builder.AddString(fromName); // source player
            builder.AddU8(speechType);   // message type
            builder.AddPosition(pos);
            builder.AddString(message);
            builder.Send(_player);
        }
コード例 #26
0
        public void UpdateOutfit(Creature creature)
        {
            var builder = new PacketBuilder(Packets.SendToClient.UpdateCreatureOutfit);

            builder.AddU32(creature.Id);
            builder.AddU8(creature.Outfit.Id);
            if (creature.Outfit.Id != 0)
            {
                builder.AddU8(creature.Outfit.Head);
                builder.AddU8(creature.Outfit.Body);
                builder.AddU8(creature.Outfit.Legs);
                builder.AddU8(creature.Outfit.Feet);
            }
            else
            {
                // invisible
                builder.AddU16(0);
            }
            builder.Send(_player);
        }
コード例 #27
0
        private void AddFloorDescriptionToBuilder(PacketBuilder builder, ushort x, ushort y, byte z, int width,
                                                  int height, short offset, bool isStep, ref int skip)
        {
            /* add floor description */
            for (ushort nx = 0; nx < width; nx++)
            {
                for (ushort ny = 0; ny < height; ny++)
                {
                    // var currentTile = new Position((ushort) (x + nx + offset), (ushort) (y + ny + offset),
                    //     (byte) nz);
                    var tile = IoC.Game.GetTile(
                        (ushort)(x + nx + offset),
                        (ushort)(y + ny + offset),
                        z);
                    if (tile != null)
                    {
                        if (skip >= 0)
                        {
                            builder.AddU8((byte)skip);
                            builder.AddU8(0xFF);
                        }

                        skip = 0;

                        AddTileDescriptionToBuilder(builder, tile, isStep);
                    }
                    else
                    {
                        skip += 1;
                        if (skip == 0xFF)
                        {
                            builder.AddU8(0xFF);
                            builder.AddU8(0xFF);
                            skip = -1;
                        }
                    }
                }
            }
        }
コード例 #28
0
        public void Legs(Item item)
        {
            if (item.Id == 0)
            {
                return;
            }
            var builder = new PacketBuilder(Packets.SendToClient.FillEquipmentSlot);

            builder.AddU8((byte)EquipmentSlots.Legs);
            builder.AddItem(item);
            builder.Send(_player);
            _player.Equipment.Legs = item;
        }
コード例 #29
0
        public void Skills()
        {
            var builder = new PacketBuilder(Packets.SendToClient.PlayerSkills);

            builder.AddU8(_player.Skills.Fist.Get());
            builder.AddU8(_player.Skills.Club.Get());
            builder.AddU8(_player.Skills.Sword.Get());
            builder.AddU8(_player.Skills.Axe.Get());
            builder.AddU8(_player.Skills.Dist.Get());
            builder.AddU8(_player.Skills.Shield.Get());
            builder.AddU8(_player.Skills.Fish.Get());
            builder.Send(_player);
        }
コード例 #30
0
        public void MoveEast()
        {
            var builder   = new PacketBuilder(Packets.SendToClient.CreaturePositionUpdate);
            var oldPos    = _player.Position;
            var oldZIndex = _player.ZIndex;

            builder.AddPosition(oldPos);
            builder.AddU8(oldZIndex); // old stack position (z-index)
            _player.MoveRight();
            var newPos = _player.Position;

            builder.AddPosition(newPos);
            builder.AddPacketId(Packets.SendToClient.MoveRight);
            /* add rest of map description */
            _player.Packets.Map.AddMapDescriptionToBuilder(builder,
                                                           (ushort)(newPos.X + 9),
                                                           (ushort)(newPos.Y - 6),
                                                           newPos.Z, 1, GameClient.Height, true);

            builder.Send(_player);
            IoC.Game.CreatureMoved(_player, oldPos, newPos, oldZIndex);
        }