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; } }
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); }
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); }
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); }
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); }
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(); }
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 }; } }
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)); } }
/// <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); }
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(); }
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); }
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 }); }
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)); }
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); }