Ejemplo n.º 1
0
        public static byte[] CreateSpawnPacket(uint monsterid, uint uniqueid, _Position pos, byte monstertype)
        {
            PacketWriter writer = new PacketWriter();
            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SPAWN);
            writer.AppendDword(monsterid);
            writer.AppendDword(uniqueid);

            writer.AppendByte(pos.XSector);
            writer.AppendByte(pos.YSector);
            writer.AppendFloat(pos.X);
            writer.AppendFloat(pos.Z);
            writer.AppendFloat(pos.Y);

            writer.AppendWord(0);
            writer.AppendByte(0);
            writer.AppendByte(1);
            writer.AppendByte(0);
            writer.AppendWord(0);
            writer.AppendWord(1);
            writer.AppendByte(0);

            writer.AppendFloat(16f);
            writer.AppendFloat(16f);
            writer.AppendFloat(16f);

            writer.AppendByte(0);
            writer.AppendByte(0);

            writer.AppendByte(monstertype);
            writer.AppendByte(1);
            return writer.getWorkspace();
        }
Ejemplo n.º 2
0
        public static byte[] CreateSpawnPacket(uint monsterid, uint uniqueid, _Position pos, byte monstertype)
        {
            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SPAWN);
            writer.AppendDword(monsterid);
            writer.AppendDword(uniqueid);

            writer.AppendByte(pos.XSector);
            writer.AppendByte(pos.YSector);
            writer.AppendFloat(pos.X);
            writer.AppendFloat(pos.Z);
            writer.AppendFloat(pos.Y);

            writer.AppendWord(0);
            writer.AppendByte(0);
            writer.AppendByte(1);
            writer.AppendByte(0);
            writer.AppendWord(0);
            writer.AppendWord(1);
            writer.AppendByte(0);

            writer.AppendFloat(16f);
            writer.AppendFloat(16f);
            writer.AppendFloat(16f);

            writer.AppendByte(0);
            writer.AppendByte(0);

            writer.AppendByte(monstertype);
            writer.AppendByte(1);
            return(writer.getWorkspace());
        }
Ejemplo n.º 3
0
        public static void CreateSpawnPacket(ref PacketWriter writer, uint monsterid, uint uniqueid, _Position pos, byte monstertype)
        {
            writer.AppendDword(monsterid);
            writer.AppendDword(uniqueid);

            writer.AppendByte(pos.XSector);
            writer.AppendByte(pos.YSector);
            writer.AppendFloat(pos.X);
            writer.AppendFloat(pos.Z);
            writer.AppendFloat(pos.Y);

            writer.AppendWord(0);
            writer.AppendByte(0);
            writer.AppendByte(1);
            writer.AppendByte(0);
            writer.AppendWord(0);
            writer.AppendWord(1);
            writer.AppendByte(0);

            writer.AppendFloat(16f);
            writer.AppendFloat(16f);
            writer.AppendFloat(16f);

            writer.AppendByte(0);
            writer.AppendByte(0);

            writer.AppendByte(monstertype);
            writer.AppendByte(1);
        }
Ejemplo n.º 4
0
        public static double CalculateDistance(_Position Object_1, _Position Object_2)
        {
            double distance_x = Object_1.X - Object_2.X;
            double distance_y = Object_1.Y - Object_2.Y;

            double x = 0;
            if (distance_x < 0 && distance_x != 0)
                x = distance_x * -1;
            else
                x = distance_x;
            if (distance_y < 0 && distance_y != 0)
                return ((distance_y * -1) + x);
            return x + distance_y;
        }
Ejemplo n.º 5
0
        public static bool MoveToObject(int Index_, ref _Position obj_1, _Position obj_2, uint uniqueid, uint characterid, double weapondistance, byte weapontype, bool Monster)
        {
            double distance_x = obj_1.X - obj_2.X;
            double distance_y = obj_1.Y - obj_2.Y;
            double distance   = Formula.CalculateDistance(distance_x, distance_y);

            if (weapontype == 6 || weapontype == 12)
            {
                weapondistance = 250;
                distance_y    -= 100;
                distance_x    -= 150;
            }

            if (distance > weapondistance)
            {
                distance_x = (distance_x - ((distance_x * 10) / distance));
                distance_y = (distance_y - ((distance_y * 10) / distance));

                obj_1.X -= (float)distance_x;
                obj_1.Y -= (float)distance_y;

                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_MOVEMENT);
                writer.AppendDword(uniqueid);
                writer.AppendByte(1);
                writer.AppendByte(obj_1.XSector);
                writer.AppendByte(obj_1.YSector);
                writer.AppendWord((ushort)obj_1.X);
                writer.AppendWord((ushort)obj_1.Z);
                writer.AppendWord((ushort)obj_1.Y);
                writer.AppendByte(0);
                if (Monster)
                {
                    ServerSocket.SendPacketIfMonsterIsSpawned(writer.getWorkspace(), Index_);
                }
                else
                {
                    ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);
                }

                if (characterid != 0)
                {
                    DatabaseCore.WriteQuery("UPDATE characters SET xpos='{0}',ypos='{1}' WHERE id='{2}'", (int)obj_1.X, (int)obj_2.Y, characterid);
                }

                return(false);
            }
            return(true);
        }
Ejemplo n.º 6
0
        public static byte[] CreateSpawnPacket(Item._General general, _Position pos)
        {
            PacketWriter writer = new PacketWriter();

            Silkroad.Item_ tmpItem = Silkroad.GetItemById(general.Pk2ID);
            if (tmpItem.ITEM_TYPE_NAME.Contains("CH") || tmpItem.ITEM_TYPE_NAME.Contains("EU"))
            {
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SPAWN);
                writer.AppendDword(general.Pk2ID);
                writer.AppendByte(general.Plus);
                writer.AppendDword(general.UniqueID);
                writer.AppendByte(pos.XSector);
                writer.AppendByte(pos.YSector);
                writer.AppendFloat(pos.X);
                writer.AppendFloat(pos.X);
                writer.AppendFloat(pos.Y);
                writer.AppendWord(0xAAA6);
                writer.AppendByte(0);
                writer.AppendByte(0);
                writer.AppendByte(6);
                writer.AppendDword(general.DroppedByUniqueId);
            }
            else if (tmpItem.ITEM_TYPE_NAME.Contains("ETC"))
            {
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SPAWN);
                writer.AppendDword(general.Pk2ID);
                if (general.Pk2ID == 1 || general.Pk2ID == 2 || general.Pk2ID == 3)
                {
                    writer.AppendDword(general.Quantity);
                }
                writer.AppendDword(general.UniqueID);
                writer.AppendByte(pos.XSector);
                writer.AppendByte(pos.YSector);
                writer.AppendFloat(pos.X);
                writer.AppendFloat(pos.X);
                writer.AppendFloat(pos.Y);
                writer.AppendWord(0xAAA6);
                writer.AppendByte(0);
                writer.AppendByte(0);
                writer.AppendByte(6);
                writer.AppendDword(general.DroppedByUniqueId);
            }
            return(writer.getWorkspace());
        }
Ejemplo n.º 7
0
        public static bool MoveToObject(int Index_, ref _Position obj_1, _Position obj_2, uint uniqueid, uint characterid, double weapondistance, byte weapontype, bool Monster)
        {
            double distance_x = obj_1.X - obj_2.X;
            double distance_y = obj_1.Y - obj_2.Y;
            double distance = Formula.CalculateDistance(distance_x, distance_y);

            if (weapontype == 6 || weapontype == 12)
            {
                weapondistance = 250;
                distance_y -= 100;
                distance_x -= 150;
            }

            if (distance > weapondistance)
            {
                distance_x = (distance_x - ((distance_x * 10) / distance));
                distance_y = (distance_y - ((distance_y * 10) / distance));

                obj_1.X -= (float)distance_x;
                obj_1.Y -= (float)distance_y;

                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_MOVEMENT);
                writer.AppendDword(uniqueid);
                writer.AppendByte(1);
                writer.AppendByte(obj_1.XSector);
                writer.AppendByte(obj_1.YSector);
                writer.AppendWord((ushort)obj_1.X);
                writer.AppendWord((ushort)obj_1.Z);
                writer.AppendWord((ushort)obj_1.Y);
                writer.AppendByte(0);
                if (Monster)
                    ServerSocket.SendPacketIfMonsterIsSpawned(writer.getWorkspace(), Index_);
                else
                    ServerSocket.SendPacketIfPlayerIsSpawned(writer.getWorkspace(), Index_);

                if (characterid != 0)
                    DatabaseCore.WriteQuery("UPDATE characters SET xpos='{0}',ypos='{1}' WHERE id='{2}'", (int)obj_1.X, (int)obj_2.Y, characterid);

                return false;
            }
            return true;
        }
Ejemplo n.º 8
0
        public static double CalculateDistance(_Position Object_1, _Position Object_2)
        {
            double distance_x = Object_1.X - Object_2.X;
            double distance_y = Object_1.Y - Object_2.Y;

            double x = 0;

            if (distance_x < 0 && distance_x != 0)
            {
                x = distance_x * -1;
            }
            else
            {
                x = distance_x;
            }
            if (distance_y < 0 && distance_y != 0)
            {
                return((distance_y * -1) + x);
            }
            return(x + distance_y);
        }
Ejemplo n.º 9
0
        public static byte[] CreateSpawnPacket(Item._General general,_Position pos)
        {
            PacketWriter writer = new PacketWriter();
            Silkroad.Item_ tmpItem = Silkroad.GetItemById(general.Pk2ID);
            if (tmpItem.ITEM_TYPE_NAME.Contains("CH") || tmpItem.ITEM_TYPE_NAME.Contains("EU"))
            {
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SPAWN);
                writer.AppendDword(general.Pk2ID);
                writer.AppendByte(general.Plus);
                writer.AppendDword(general.UniqueID);
                writer.AppendByte(pos.XSector);
                writer.AppendByte(pos.YSector);
                writer.AppendFloat(pos.X);
                writer.AppendFloat(pos.X);
                writer.AppendFloat(pos.Y);
                writer.AppendWord(0xAAA6);
                writer.AppendByte(0);
                writer.AppendByte(0);
                writer.AppendByte(6);
                writer.AppendDword(general.DroppedByUniqueId);

            }
            else if (tmpItem.ITEM_TYPE_NAME.Contains("ETC"))
            {
                writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SPAWN);
                writer.AppendDword(general.Pk2ID);
                if (general.Pk2ID == 1 || general.Pk2ID == 2 || general.Pk2ID == 3)
                    writer.AppendDword(general.Quantity);
                writer.AppendDword(general.UniqueID);
                writer.AppendByte(pos.XSector);
                writer.AppendByte(pos.YSector);
                writer.AppendFloat(pos.X);
                writer.AppendFloat(pos.X);
                writer.AppendFloat(pos.Y);
                writer.AppendWord(0xAAA6);
                writer.AppendByte(0);
                writer.AppendByte(0);
                writer.AppendByte(6);
                writer.AppendDword(general.DroppedByUniqueId);

            }
            return writer.getWorkspace();
        }
Ejemplo n.º 10
0
        public static byte[] CreateSpawnPacket(Player._General general, Player._Flags flags, _Position position, Player._Stats stats, Player._Speeds speeds)
        {
            PacketWriter writer = new PacketWriter();
            writer.SetOpcode(SERVER_OPCODES.GAME_SERVER_SPAWN);
            writer.AppendDword(stats.Model);
            writer.AppendByte(stats.Volume);
            if (flags.GM == 1)
                writer.AppendByte(1);

            else
                writer.AppendByte((byte)(stats.Level < 20 ? 1 : 0));

            writer.AppendByte(1);
            writer.AppendByte(general.MaxSlots);

            int tmpCharacterIndex = DatabaseCore.Character.GetIndexByName(general.CharacterName);
            int[] CharacterItemIndex = DatabaseCore.Item.GetIndexByName(general.CharacterName);

            byte PlayerItemCount = 0;
            for (byte j = 0; j < 10; j++)
            {
                if (DatabaseCore.Item.ItemId[CharacterItemIndex[j]] != 0)
                    PlayerItemCount++;
            }
            writer.AppendByte(PlayerItemCount);

            for (int j = 0; j < 10; j++)
            {
                if (DatabaseCore.Item.ItemId[CharacterItemIndex[j]] != 0)
                {
                    writer.AppendDword(DatabaseCore.Item.ItemId[CharacterItemIndex[j]]);
                    writer.AppendByte(DatabaseCore.Item.PlusValue[CharacterItemIndex[j]]);
                }
            }

            writer.AppendByte(4);
            writer.AppendByte(0);
            writer.AppendByte(0);
            writer.AppendDword((uint)general.UniqueID);

            writer.AppendByte(position.XSector);
            writer.AppendByte(position.YSector);
            writer.AppendFloat(position.X);
            writer.AppendFloat(position.Z);
            writer.AppendFloat(position.Y);

            writer.AppendWord(0);
            writer.AppendByte(0);
            writer.AppendByte(1);
            writer.AppendByte(0);
            writer.AppendWord(0);

            writer.AppendWord(1);

            writer.AppendByte(flags.Berserk);
            writer.AppendFloat(speeds.WalkSpeed);
            writer.AppendFloat(speeds.RunSpeed);
            writer.AppendFloat(speeds.BerserkSpeed);

            writer.AppendByte(0);

            if (flags.GM == 1)
            {
                string gmname = string.Format("[GM]{0}", general.CharacterName);
                writer.AppendWord((ushort)gmname.Length);
                writer.AppendString(false, gmname);
            }
            else
            {
                writer.AppendWord((ushort)general.CharacterName.Length);
                writer.AppendString(false, general.CharacterName);
            }

            writer.AppendByte(0);
            writer.AppendByte(1);
            writer.AppendDword(0);
            writer.AppendDword(0);
            writer.AppendDword(0);
            writer.AppendDword(0);
            writer.AppendDword(0);
            writer.AppendDword(0);
            writer.AppendDword(0);
            writer.AppendByte(1);
            writer.AppendByte((byte)flags.PvP);
            return writer.getWorkspace();
        }
Ejemplo n.º 11
0
 public static bool MoveToObject(int Index_, ref _Position obj_1, _Position obj_2, Player._General general, bool Monster)
 {
     return(MoveToObject(Index_, ref obj_1, obj_2, general.UniqueID, general.CharacterID, 28, general.WeaponType, Monster));
 }
Ejemplo n.º 12
0
 public static bool MoveToObject(int Index_, ref _Position obj_1, _Position obj_2, uint uniqueid, bool Monster)
 {
     return(MoveToObject(Index_, ref obj_1, obj_2, uniqueid, 0, 28, 0, Monster));
 }
Ejemplo n.º 13
0
        public static void CreateSpawnPacket(ref PacketWriter writer, uint monsterid, uint uniqueid, _Position pos, byte monstertype)
        {
            writer.AppendDword(monsterid);
            writer.AppendDword(uniqueid);

            writer.AppendByte(pos.XSector);
            writer.AppendByte(pos.YSector);
            writer.AppendFloat(pos.X);
            writer.AppendFloat(pos.Z);
            writer.AppendFloat(pos.Y);

            writer.AppendWord(0);
            writer.AppendByte(0);
            writer.AppendByte(1);
            writer.AppendByte(0);
            writer.AppendWord(0);
            writer.AppendWord(1);
            writer.AppendByte(0);

            writer.AppendFloat(16f);
            writer.AppendFloat(16f);
            writer.AppendFloat(16f);

            writer.AppendByte(0);
            writer.AppendByte(0);

            writer.AppendByte(monstertype);
            writer.AppendByte(1);
        }
Ejemplo n.º 14
0
 public static bool MoveToObject(int Index_, ref _Position obj_1, _Position obj_2, Player._General general, bool Monster)
 {
     return MoveToObject(Index_, ref obj_1, obj_2, general.UniqueID, general.CharacterID, 28, general.WeaponType, Monster);
 }
Ejemplo n.º 15
0
 public static bool MoveToObject(int Index_, ref _Position obj_1, _Position obj_2, uint uniqueid, bool Monster)
 {
     return MoveToObject(Index_, ref obj_1, obj_2, uniqueid, 0, 28, 0, Monster);
 }