コード例 #1
0
ファイル: ACCEPT_LOGIN3.cs プロジェクト: guilhermelhr/unityro
        public void Read(MemoryStreamReader br, int size)
        {
            LoginID1  = br.ReadInt();
            AccountID = br.ReadInt();
            LoginID2  = br.ReadInt();

            br.Seek(30, SeekOrigin.Current);

            Sex = (byte)br.ReadByte();

            br.Seek(17, SeekOrigin.Current);

            long serverCount = (br.Length - br.Position) / BLOCK_SIZE;

            Servers = new CharServerInfo[serverCount];
            for (int i = 0; i < serverCount; i++)
            {
                CharServerInfo csi = new CharServerInfo();
                csi.IP        = new IPAddress(br.ReadUInt());
                csi.Port      = br.ReadUShort();
                csi.Name      = br.ReadBinaryString(20);
                csi.UserCount = br.ReadUShort();
                csi.State     = br.ReadShort();
                csi.Property  = br.ReadUShort();

                Servers[i] = csi;
            }
        }
コード例 #2
0
        public static SPR Load(MemoryStreamReader data)
        {
            var header = data.ReadBinaryString(2);

            if (!header.Equals(SPR.Header))
            {
                throw new Exception("SpriteLoader.Load: Header (" + header + ") is not \"SP\"");
            }

            SPR spr = new SPR();

            string subversion = Convert.ToString(data.ReadByte());
            string version    = Convert.ToString(data.ReadByte());

            version += "." + subversion;

            spr.version       = version;
            spr.indexedCount  = data.ReadUShort();
            spr._indexedCount = spr.indexedCount;

            var dversion = double.Parse(version, CultureInfo.InvariantCulture);

            if (dversion > 1.1)
            {
                spr.rgbaCount = data.ReadUShort();
            }

            spr.frames    = new SPR.Frame[spr.indexedCount + spr.rgbaCount];
            spr.rgbaIndex = spr.indexedCount;

            if (dversion < 2.1)
            {
                ReadIndexedImage(spr, data);
            }
            else
            {
                ReadIndexedImageRLE(spr, data);
            }

            ReadRgbaImage(spr, data);

            if (dversion > 1.0)
            {
                long position = data.Position;
                data.Seek(-1024, System.IO.SeekOrigin.End);
                spr.palette = data.ReadBytes(1024);
                data.Seek(position, System.IO.SeekOrigin.Begin);
            }

            return(spr);
        }
コード例 #3
0
 public void Read(MemoryStreamReader br, int size)
 {
     GID     = br.ReadInt();
     Mapname = br.ReadBinaryString(16);
     IP      = new IPAddress(br.ReadBytes(4));
     Port    = br.ReadShort();
     br.Seek(128, System.IO.SeekOrigin.Current);
 }
コード例 #4
0
ファイル: ACCEPT_ENTER2.cs プロジェクト: guilhermelhr/unityro
        public void Read(MemoryStreamReader br, int Size)
        {
            var size            = br.ReadShort();
            var normal_slot     = br.ReadByte(); //MIN_CHARS 15
            var premium_slot    = br.ReadByte(); //chars_vip;
            var billing_slot    = br.ReadByte();
            var producible_slot = br.ReadByte();
            var valid_slot      = br.ReadByte(); //MAX_CHARS 15

            br.Seek(9, SeekOrigin.Current);
        }
コード例 #5
0
ファイル: ActionLoader.cs プロジェクト: guilhermelhr/unityro
        private static ACT.Frame[] ReadMotions(ACT act, MemoryStreamReader data)
        {
            var count   = data.ReadUInt();
            var motions = new ACT.Frame[count];

            for (int i = 0; i < count; i++)
            {
                data.Seek(32, System.IO.SeekOrigin.Current);
                motions[i] = ReadLayers(act, data);
            }

            return(motions);
        }
コード例 #6
0
        public void Read(MemoryStreamReader br, int size)
        {
            Tick = br.ReadInt();
            var posDir = br.ReadPos();

            PosX = posDir[0];
            PosY = posDir[1];
            Dir  = posDir[2];

            br.Seek(2, SeekOrigin.Current);

            Font = br.ReadShort();
            Sex  = br.ReadByte();
        }
コード例 #7
0
ファイル: ActionLoader.cs プロジェクト: guilhermelhr/unityro
        private static void ReadActions(ACT act, MemoryStreamReader data)
        {
            var count = data.ReadUShort();

            data.Seek(10, System.IO.SeekOrigin.Current);

            act.actions = new ACT.Action[count];
            for (int i = 0; i < count; i++)
            {
                act.actions[i] = new ACT.Action()
                {
                    frames = ReadMotions(act, data),
                    delay  = 150f
                };
            }
        }
コード例 #8
0
        public void Read(MemoryStreamReader br, int size)
        {
            int numChars = (int)((br.Length - 23) / 144);

            MaxSlots       = br.ReadByte();
            PremiumSlots   = br.ReadByte();
            AvailableSlots = br.ReadByte();

            br.Seek(20, SeekOrigin.Current);

            Chars = new List <CharacterData>();
            for (int i = 0; i < numChars; i++)
            {
                Chars.Add(CharacterData.parse(br));
            }
        }
コード例 #9
0
ファイル: FileManager.cs プロジェクト: guilhermelhr/unityro
        /// <summary>
        /// Asyncronously read a file
        /// </summary>
        /// <param name="path">file path</param>
        /// <returns>BinaryReader containing file or null</returns>
        /// <seealso cref="BinaryReader"/>
        public static async Task <MemoryStreamReader> ReadAsync(string path)
        {
            MemoryStreamReader result = new MemoryStreamReader();

            using (FileStream sourceStream = new FileStream(path,
                                                            FileMode.Open, FileAccess.Read, FileShare.Read,
                                                            bufferSize: 4096, useAsync: true)) {
                byte[] buffer = new byte[4096];
                int    numRead;
                while ((numRead = await sourceStream.ReadAsync(buffer, 0, buffer.Length)) != 0)
                {
                    result.Write(buffer, 0, numRead);
                }
            }

            result.Seek(0, SeekOrigin.Begin);
            return(result);
        }
コード例 #10
0
ファイル: NOTIFY_ACT3.cs プロジェクト: guilhermelhr/unityro
        public void Read(MemoryStreamReader br, int size)
        {
            ActionRequest = new EntityActionRequest()
            {
                GID         = br.ReadUInt(),
                targetGID   = br.ReadUInt(),
                startTime   = br.ReadUInt(),
                sourceSpeed = (ushort)br.ReadInt(),
                targetSpeed = (ushort)br.ReadInt(),
                damage      = br.ReadInt()
            };

            br.Seek(1, SeekOrigin.Current);

            ActionRequest.count      = br.ReadShort();
            ActionRequest.action     = (ActionRequestType)br.ReadByte();
            ActionRequest.leftDamage = br.ReadInt();
        }
コード例 #11
0
ファイル: CharacterData.cs プロジェクト: guilhermelhr/unityro
    public static CharacterData parse(MemoryStreamReader br)
    {
        CharacterData cd = new CharacterData();

        cd.GID = br.ReadInt();
        cd.Exp = br.ReadInt();
        br.Seek(4, SeekOrigin.Current);
        cd.Zeny   = br.ReadInt();
        cd.JobExp = br.ReadInt();
        br.Seek(4, SeekOrigin.Current);
        cd.JobLevel    = br.ReadInt();
        cd.BodyState   = br.ReadInt();
        cd.HealthState = br.ReadInt();
        cd.Option      = br.ReadInt();
        cd.Karma       = br.ReadInt();
        cd.Manner      = br.ReadInt();

        cd.StatusPoint = br.ReadShort();

        cd.HP    = br.ReadInt();
        cd.MaxHP = br.ReadInt();

        cd.SP           = br.ReadShort();
        cd.MaxSP        = br.ReadShort();
        cd.Speed        = br.ReadShort();
        cd.Job          = br.ReadShort();
        cd.Hair         = br.ReadShort();
        cd.Body         = br.ReadShort();
        cd.Weapon       = br.ReadShort();
        cd.BaseLevel    = br.ReadShort();
        cd.SkillPoint   = br.ReadShort();
        cd.Accessory    = br.ReadShort();
        cd.Shield       = br.ReadShort();
        cd.Accessory2   = br.ReadShort();
        cd.Accessory3   = br.ReadShort();
        cd.HairColor    = br.ReadShort();
        cd.ClothesColor = br.ReadShort();

        cd.Name = br.ReadBinaryString(24);

        cd.Str = (byte)br.ReadByte();
        cd.Agi = (byte)br.ReadByte();
        cd.Vit = (byte)br.ReadByte();
        cd.Int = (byte)br.ReadByte();
        cd.Dex = (byte)br.ReadByte();
        cd.Luk = (byte)br.ReadByte();

        cd.Slot   = br.ReadShort();
        cd.Rename = br.ReadShort();

        cd.MapName = br.ReadBinaryString(16);

        cd.DeleteDate = br.ReadInt();
        cd.Robe       = br.ReadInt();
        cd.Moves      = br.ReadInt();
        cd.AddOns     = br.ReadInt();

        cd.Sex = br.ReadByte();

        return(cd);
    }
コード例 #12
0
ファイル: ActionLoader.cs プロジェクト: guilhermelhr/unityro
        private static ACT.Frame ReadLayers(ACT act, MemoryStreamReader data)
        {
            var count   = data.ReadUInt();
            var layers  = new ACT.Layer[count];
            var version = double.Parse(act.version, CultureInfo.InvariantCulture);

            for (int i = 0; i < count; i++)
            {
                var layer = layers[i] = new ACT.Layer()
                {
                    pos      = new Vector2Int(data.ReadInt(), data.ReadInt()),
                    index    = data.ReadInt(),
                    isMirror = data.ReadInt() != 0,
                    scale    = Vector2.one,
                    color    = Color.white
                };

                // RoRebuild checks if only if it's greater
                if (version > 2.0)
                {
                    layer.color[0] = data.ReadByte() / 255f; //r
                    layer.color[1] = data.ReadByte() / 255f; //g
                    layer.color[2] = data.ReadByte() / 255f; //b
                    layer.color[3] = data.ReadByte() / 255f; //a

                    layer.scale[0] = data.ReadFloat();
                    layer.scale[1] = version <= 2.3 ? layer.scale[0] : data.ReadFloat();

                    layer.angle   = data.ReadInt();
                    layer.sprType = data.ReadInt();

                    if (version >= 2.5)
                    {
                        layer.width  = data.ReadInt();
                        layer.height = data.ReadInt();
                    }
                }
            }

            var soundId = version >= 2.0 ? data.ReadInt() : -1;

            Vector2Int[] pos = null;

            if (version >= 2.3)
            {
                pos = new Vector2Int[data.ReadInt()];
                for (int i = 0; i < pos.Length; i++)
                {
                    data.Seek(4, System.IO.SeekOrigin.Current);
                    pos[i] = new Vector2Int(data.ReadInt(), data.ReadInt());
                    data.Seek(4, System.IO.SeekOrigin.Current);
                }
            }

            return(new ACT.Frame()
            {
                layers = layers.Where(t => t.index >= 0).ToArray(),
                soundId = soundId,
                pos = pos
            });
        }
コード例 #13
0
        public static STR Load(MemoryStreamReader data, string path)
        {
            var header = data.ReadBinaryString(4);

            if (!header.Equals(STR.Header))
            {
                throw new Exception("EffectLoader.Load: Header (" + header + ") is not \"STRM\"");
            }

            var version = data.ReadUInt();

            if (version != 0x94)
            {
                throw new Exception("EffectLoader.Load: Unsupported STR version (v" + version + ")");
            }

            STR str = new STR();

            str.version = version;
            str.fps     = data.ReadUInt();
            str.maxKey  = data.ReadUInt();
            var layerCount = data.ReadUInt();

            data.Seek(16, System.IO.SeekOrigin.Current);


            //read layers
            str.layers = new STR.Layer[layerCount];
            for (uint i = 0; i < layerCount; i++)
            {
                STR.Layer layer = str.layers[i] = new STR.Layer();

                //read texture filenames
                var textureCount = data.ReadInt();
                layer.textures    = new Texture2D[textureCount];
                layer.texturesIds = new List <int>();
                for (int j = 0; j < textureCount; j++)
                {
                    var tex     = data.ReadBinaryString(128);
                    var texture = FileManager.Load(path + "/" + tex) as Texture2D;
                    layer.textures[j] = texture;

                    if (!textureNames.Contains(tex))
                    {
                        layer.texturesIds.Add(textureNames.Count);
                        textureIdLookup.Add(tex, textureNames.Count);
                        textureNames.Add(tex);
                        textures.Add(texture);
                    }
                    else
                    {
                        layer.texturesIds.Add(textureIdLookup[tex]);
                    }
                }

                //read animations
                var animCount = data.ReadInt();
                layer.animations = new STR.Animation[animCount];
                for (int j = 0; j < animCount; j++)
                {
                    var entry = new STR.Animation()
                    {
                        frame    = data.ReadInt(),
                        type     = data.ReadUInt(),
                        position = new Vector2(data.ReadFloat(), data.ReadFloat())
                    };

                    var uv = new float[] {
                        data.ReadFloat(), data.ReadFloat(), data.ReadFloat(), data.ReadFloat(),
                        data.ReadFloat(), data.ReadFloat(), data.ReadFloat(), data.ReadFloat()
                    };
                    var xy = new float[] {
                        data.ReadFloat(), data.ReadFloat(), data.ReadFloat(), data.ReadFloat(),
                        data.ReadFloat(), data.ReadFloat(), data.ReadFloat(), data.ReadFloat()
                    };

                    entry.uv    = new Vector2[4];
                    entry.uv[0] = new Vector2(0, 0);
                    entry.uv[1] = new Vector2(1, 0);
                    entry.uv[2] = new Vector2(0, 1);
                    entry.uv[3] = new Vector2(1, 1);

                    entry.xy    = new Vector2[4];
                    entry.xy[0] = new Vector2(xy[0], -xy[4]);
                    entry.xy[1] = new Vector2(xy[1], -xy[5]);
                    entry.xy[2] = new Vector2(xy[3], -xy[7]);
                    entry.xy[3] = new Vector2(xy[2], -xy[6]);

                    entry.animFrame = data.ReadFloat();
                    entry.animType  = data.ReadUInt();
                    entry.delay     = data.ReadFloat();
                    entry.angle     = data.ReadFloat() / (1024f / 360f);
                    entry.color     = new Color(data.ReadFloat() / 255, data.ReadFloat() / 255, data.ReadFloat() / 255, data.ReadFloat() / 255);
                    entry.srcAlpha  = data.ReadUInt();
                    entry.destAlpha = data.ReadUInt();
                    entry.mtPreset  = data.ReadUInt();

                    layer.animations[j] = entry;
                }
            }

            return(MakeAtlas(str, path));
        }
コード例 #14
0
        public static RSM Load(MemoryStreamReader data)
        {
            var header = data.ReadBinaryString(4);

            if (header != RSM.Header)
            {
                throw new Exception("ModelLoader.Load: Header (" + header + ") is not \"GRSM\"");
            }

            RSM rsm = new RSM();

            //read infos
            string version    = Convert.ToString(data.ReadByte());
            string subversion = Convert.ToString(data.ReadByte());

            version += "." + subversion;
            double dversion = double.Parse(version, CultureInfo.InvariantCulture);

            rsm.version   = version;
            rsm.animLen   = data.ReadInt();
            rsm.shadeType = (RSM.SHADING)data.ReadInt();

            rsm.alpha = dversion >= 1.4 ? data.ReadByte() / 255f : 1;
            data.Seek(16, System.IO.SeekOrigin.Current);

            //read textures
            int textureCount = data.ReadInt();

            rsm.textures = new string[textureCount];
            for (int i = 0; i < textureCount; ++i)
            {
                rsm.textures[i] = data.ReadBinaryString(40);
            }

            //read nodes (meshes)
            rsm.name = data.ReadBinaryString(40);
            int nodeCount = data.ReadInt();

            rsm.nodes = new RSM.Node[nodeCount];

            for (int i = 0; i < nodeCount; ++i)
            {
                var node = rsm.nodes[i] = LoadNode(rsm, data, dversion);
                if (string.Equals(node.name, rsm.name))
                {
                    rsm.mainNode = node;
                }
            }

            //fallback for non defined main node
            if (rsm.mainNode == null)
            {
                rsm.mainNode = rsm.nodes[0];
            }

            //read poskeyframes
            if (dversion < 1.5)
            {
                int count = data.ReadInt();
                rsm.posKeyframes = new RSM.PositionKeyframe[count];
                for (int i = 0; i < count; ++i)
                {
                    rsm.posKeyframes[i] = new RSM.PositionKeyframe()
                    {
                        frame = data.ReadInt(),
                        p     = new Vector3(data.ReadFloat(), data.ReadFloat(), data.ReadFloat())
                    };
                }
            }
            else
            {
                rsm.posKeyframes = new RSM.PositionKeyframe[0];
            }

            //read volume box
            short vbCount = (short)data.ReadInt();

            rsm.volumeBoxes = new RSM.VolumeBox[vbCount];

            for (int i = 0; i < vbCount; ++i)
            {
                rsm.volumeBoxes[i] = new RSM.VolumeBox()
                {
                    size = new Vector3(data.ReadFloat(), data.ReadFloat(), data.ReadFloat()),
                    pos  = new Vector3(data.ReadFloat(), data.ReadFloat(), data.ReadFloat()),
                    rot  = new Vector3(data.ReadFloat(), data.ReadFloat(), data.ReadFloat()),
                    flag = dversion >= 1.3 ? data.ReadInt() : 0
                };
            }

            rsm.instances = new List <RSW.ModelDescriptor>();
            rsm.box       = new RSM.Box();

            CalcBoundingBox(rsm);

            return(rsm);
        }