public Skill(Skills owner, SkillInfo info, GenericReader reader) { m_Owner = owner; m_Info = info; int version = reader.ReadByte(); switch (version) { case 0: { m_Base = reader.ReadUShort(); m_Cap = reader.ReadUShort(); m_Lock = (SkillLock)reader.ReadByte(); break; } case 0xFF: { m_Base = 0; m_Cap = 1000; m_Lock = SkillLock.Up; break; } default: { if ((version & 0xC0) == 0x00) { if ((version & 0x1) != 0) { m_Base = reader.ReadUShort(); } if ((version & 0x2) != 0) { m_Cap = reader.ReadUShort(); } else { m_Cap = 1000; } if ((version & 0x4) != 0) { m_Lock = (SkillLock)reader.ReadByte(); } } break; } } }
public static Skill Deserialize(Skills owner, SkillInfo info, GenericReader reader) { int version = reader.ReadByte(); ushort m_Base = 0; ushort m_Cap = 0; SkillLock m_Lock = SkillLock.Up; switch (version) { case 0: { m_Base = reader.ReadUShort(); m_Cap = reader.ReadUShort(); m_Lock = (SkillLock)reader.ReadByte(); break; } case 0xFF: return(null); default: { if ((version & 0xC0) == 0x00) { if ((version & 0x1) != 0) { m_Base = reader.ReadUShort(); } if ((version & 0x2) != 0) { m_Cap = reader.ReadUShort(); } else { m_Cap = 1000; } if ((version & 0x4) != 0) { m_Lock = (SkillLock)reader.ReadByte(); } } break; } } return(new Skill(owner, info, m_Base, m_Cap, m_Lock)); }
// Methods public Skill(Skills owner, SkillInfo info, GenericReader reader) { this.m_Owner = owner; this.m_Info = info; int num1 = reader.ReadByte(); int num2 = num1; if (num2 != 0) { if (num2 == 255) { goto Label_0050; } goto Label_006A; } this.m_Base = reader.ReadUShort(); this.m_Cap = reader.ReadUShort(); this.m_Lock = ((SkillLock)reader.ReadByte()); return; Label_0050: this.m_Base = 0; this.m_Cap = 1000; this.m_Lock = SkillLock.Up; return; Label_006A: if ((num1 & 192) != 0) { return; } if ((num1 & 1) != 0) { this.m_Base = reader.ReadUShort(); } if ((num1 & 2) != 0) { this.m_Cap = reader.ReadUShort(); } else { this.m_Cap = 1000; } if ((num1 & 4) != 0) { this.m_Lock = ((SkillLock)reader.ReadByte()); } }
public MultiComponentList(GenericReader reader) { _ = reader.ReadInt(); m_Min = reader.ReadPoint2D(); m_Max = reader.ReadPoint2D(); m_Center = reader.ReadPoint2D(); Width = reader.ReadInt(); Height = reader.ReadInt(); int length = reader.ReadInt(); MultiTileEntry[] allTiles = List = new MultiTileEntry[length]; for (int i = 0; i < length; ++i) { allTiles[i].m_ItemID = reader.ReadUShort(); allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = reader.ReadInt(); } TileList[][] tiles = new TileList[Width][]; Tiles = new StaticTile[Width][][]; for (int x = 0; x < Width; ++x) { tiles[x] = new TileList[Height]; Tiles[x] = new StaticTile[Height][]; for (int y = 0; y < Height; ++y) { tiles[x][y] = new TileList(); } } for (int i = 0; i < allTiles.Length; ++i) { if (i == 0 || allTiles[i].m_Flags != 0) { int xOffset = allTiles[i].m_OffsetX + m_Center.m_X; int yOffset = allTiles[i].m_OffsetY + m_Center.m_Y; tiles[xOffset][yOffset].Add(allTiles[i].m_ItemID, (sbyte)allTiles[i].m_OffsetZ); } } for (int x = 0; x < Width; ++x) { for (int y = 0; y < Height; ++y) { Tiles[x][y] = tiles[x][y].ToArray(); } } }
public static TEnum ReadFlag <TEnum>(this GenericReader reader) where TEnum : struct, IComparable, IFormattable, IConvertible { var type = typeof(TEnum); var flag = default(TEnum); if (!type.IsEnum) { return(flag); } switch (reader.ReadByte()) { case 0x01: flag = ToEnum <TEnum>(reader.ReadByte()); break; case 0x02: flag = ToEnum <TEnum>(reader.ReadShort()); break; case 0x03: flag = ToEnum <TEnum>(reader.ReadUShort()); break; case 0x04: flag = ToEnum <TEnum>(reader.ReadInt()); break; case 0x05: flag = ToEnum <TEnum>(reader.ReadUInt()); break; case 0x06: flag = ToEnum <TEnum>(reader.ReadLong()); break; case 0x07: flag = ToEnum <TEnum>(reader.ReadULong()); break; } return(flag); }
public static TEnum ReadFlag <TEnum>(this GenericReader reader) where TEnum : struct { TEnum flag = default(TEnum); if (!typeof(TEnum).IsEnum) { return(flag); } switch (reader.ReadByte()) { case 0x01: flag = ToEnum <TEnum>(reader.ReadByte()); break; case 0x02: flag = ToEnum <TEnum>(reader.ReadShort()); break; case 0x03: flag = ToEnum <TEnum>(reader.ReadUShort()); break; case 0x04: flag = ToEnum <TEnum>(reader.ReadInt()); break; case 0x05: flag = ToEnum <TEnum>(reader.ReadUInt()); break; case 0x06: flag = ToEnum <TEnum>(reader.ReadLong()); break; case 0x07: flag = ToEnum <TEnum>(reader.ReadULong()); break; } return(flag); }
public DesignState( HouseFoundation foundation, GenericReader reader ) { m_Foundation = foundation; int version = reader.ReadInt(); switch( version ) { case 0: { m_Components = new MultiComponentList( reader ); int length = reader.ReadInt(); m_Fixtures = new MultiTileEntry[length]; for( int i = 0; i < length; ++i ) { m_Fixtures[i].m_ItemID = reader.ReadUShort(); m_Fixtures[i].m_OffsetX = reader.ReadShort(); m_Fixtures[i].m_OffsetY = reader.ReadShort(); m_Fixtures[i].m_OffsetZ = reader.ReadShort(); m_Fixtures[i].m_Flags = reader.ReadInt(); } m_Revision = reader.ReadInt(); break; } } }
public Skill( Skills owner, SkillInfo info, GenericReader reader ) { m_Owner = owner; m_Info = info; int version = reader.ReadByte(); switch ( version ) { case 0: { m_Base = reader.ReadUShort(); m_Cap = reader.ReadUShort(); m_Lock = (SkillLock)reader.ReadByte(); break; } case 0xFF: { m_Base = 0; m_Cap = 1000; m_Lock = SkillLock.Up; break; } default: { if ( (version & 0xC0) == 0x00 ) { if ( (version & 0x1) != 0 ) m_Base = reader.ReadUShort(); if ( (version & 0x2) != 0 ) m_Cap = reader.ReadUShort(); else m_Cap = 1000; if ( (version & 0x4) != 0 ) m_Lock = (SkillLock)reader.ReadByte(); } break; } } if ( m_Lock < SkillLock.Up || m_Lock > SkillLock.Locked ) { Console.WriteLine( "Bad skill lock -> {0}.{1}", owner.Owner, m_Lock ); m_Lock = SkillLock.Up; } }
public MultiComponentList(GenericReader reader) { int version = reader.ReadInt(); switch (version) { case 1: case 0: { m_Min = reader.ReadPoint2D(); m_Max = reader.ReadPoint2D(); Center = reader.ReadPoint2D(); Width = reader.ReadInt(); Height = reader.ReadInt(); int length = reader.ReadInt(); MultiTileEntry[] allTiles = List = new MultiTileEntry[length]; for (int i = 0; i < length; ++i) { ushort id = reader.ReadUShort(); if (version == 0 && id >= 0x8000) { id -= 0x8000; } allTiles[i].m_ItemID = id; allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = reader.ReadInt(); } TileList[][] tiles = new TileList[Width][]; Tiles = new Tile[Width][][]; for (int x = 0; x < Width; ++x) { tiles[x] = new TileList[Height]; Tiles[x] = new Tile[Height][]; for (int y = 0; y < Height; ++y) { tiles[x][y] = new TileList(); } } for (int i = 0; i < allTiles.Length; ++i) { if (i == 0 || allTiles[i].m_Flags != 0) { int xOffset = allTiles[i].m_OffsetX + Center.X; int yOffset = allTiles[i].m_OffsetY + Center.Y; tiles[xOffset][yOffset].Add((ushort)allTiles[i].m_ItemID, (sbyte)allTiles[i].m_OffsetZ); } } for (int x = 0; x < Width; ++x) { for (int y = 0; y < Height; ++y) { Tiles[x][y] = tiles[x][y].ToArray(); } } break; } } }
public Skill(Skills owner, SkillInfo info, GenericReader reader) { m_Owner = owner; m_Info = info; int version = reader.ReadByte(); switch (version) { case 0: { m_Base = reader.ReadUShort(); m_Cap = reader.ReadUShort(); m_Lock = (SkillLock)reader.ReadByte(); break; } case 0xFF: { m_Base = 0; m_Cap = 1000; m_Lock = SkillLock.Up; break; } default: { if ((version & 0xC0) == 0x00) { if ((version & 0x1) != 0) { m_Base = reader.ReadUShort(); } if ((version & 0x2) != 0) { m_Cap = reader.ReadUShort(); } else { m_Cap = 1000; } if ((version & 0x4) != 0) { m_Lock = (SkillLock)reader.ReadByte(); } } break; } } if (m_Lock < SkillLock.Up || m_Lock > SkillLock.Locked) { Console.WriteLine("Bad skill lock -> {0}.{1}", owner.Owner, m_Lock); m_Lock = SkillLock.Up; } }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); m_Code = reader.ReadUShort(); m_Controller = reader.ReadItem() as LeverPuzzleController; }
public static Skill Deserialize( Skills owner, SkillInfo info, GenericReader reader ) { int version = reader.ReadByte(); ushort m_Base = 0; ushort m_Cap = 0; SkillLock m_Lock = SkillLock.Up; switch ( version ) { case 0: { m_Base = reader.ReadUShort(); m_Cap = reader.ReadUShort(); m_Lock = (SkillLock)reader.ReadByte(); break; } case 0xFF: return null; default: { if ( (version & 0xC0) == 0x00 ) { if ( (version & 0x1) != 0 ) m_Base = reader.ReadUShort(); if ( (version & 0x2) != 0 ) m_Cap = reader.ReadUShort(); else m_Cap = 1000; if ( (version & 0x4) != 0 ) m_Lock = (SkillLock)reader.ReadByte(); } break; } } return new Skill(owner, info, m_Base, m_Cap, m_Lock); }
public MultiComponentList( GenericReader reader ) { int version = reader.ReadInt(); m_Min = reader.ReadPoint2D(); m_Max = reader.ReadPoint2D(); m_Center = reader.ReadPoint2D(); m_Width = reader.ReadInt(); m_Height = reader.ReadInt(); int length = reader.ReadInt(); MultiTileEntry[] allTiles = m_List = new MultiTileEntry[length]; if ( version == 0 ) { for ( int i = 0; i < length; ++i ) { int id = reader.ReadShort(); if ( id >= 0x4000 ) id -= 0x4000; allTiles[i].m_ItemID = (ushort)id; allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = reader.ReadInt(); } } else { for ( int i = 0; i < length; ++i ) { allTiles[i].m_ItemID = reader.ReadUShort(); allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = reader.ReadInt(); } } TileList[][] tiles = new TileList[m_Width][]; m_Tiles = new StaticTile[m_Width][][]; for ( int x = 0; x < m_Width; ++x ) { tiles[x] = new TileList[m_Height]; m_Tiles[x] = new StaticTile[m_Height][]; for ( int y = 0; y < m_Height; ++y ) tiles[x][y] = new TileList(); } for ( int i = 0; i < allTiles.Length; ++i ) { if ( i == 0 || allTiles[i].m_Flags != 0 ) { int xOffset = allTiles[i].m_OffsetX + m_Center.m_X; int yOffset = allTiles[i].m_OffsetY + m_Center.m_Y; tiles[xOffset][yOffset].Add( (ushort)allTiles[i].m_ItemID, (sbyte)allTiles[i].m_OffsetZ ); } } for ( int x = 0; x < m_Width; ++x ) for ( int y = 0; y < m_Height; ++y ) m_Tiles[x][y] = tiles[x][y].ToArray(); }
public MultiComponentList(GenericReader reader) { int version = reader.ReadInt(); this.m_Min = reader.ReadPoint2D(); this.m_Max = reader.ReadPoint2D(); this.m_Center = reader.ReadPoint2D(); this.m_Width = reader.ReadInt(); this.m_Height = reader.ReadInt(); int length = reader.ReadInt(); MultiTileEntry[] allTiles = this.m_List = new MultiTileEntry[length]; if (version == 0) { for (int i = 0; i < length; ++i) { int id = reader.ReadShort(); if (id >= 0x4000) { id -= 0x4000; } allTiles[i].m_ItemID = (ushort)id; allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = reader.ReadInt(); } } else { for (int i = 0; i < length; ++i) { allTiles[i].m_ItemID = reader.ReadUShort(); allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = reader.ReadInt(); } } TileList[][] tiles = new TileList[this.m_Width][]; this.m_Tiles = new StaticTile[this.m_Width][][]; for (int x = 0; x < this.m_Width; ++x) { tiles[x] = new TileList[this.m_Height]; this.m_Tiles[x] = new StaticTile[this.m_Height][]; for (int y = 0; y < this.m_Height; ++y) { tiles[x][y] = new TileList(); } } for (int i = 0; i < allTiles.Length; ++i) { if (i == 0 || allTiles[i].m_Flags != 0) { int xOffset = allTiles[i].m_OffsetX + this.m_Center.m_X; int yOffset = allTiles[i].m_OffsetY + this.m_Center.m_Y; tiles[xOffset][yOffset].Add((ushort)allTiles[i].m_ItemID, (sbyte)allTiles[i].m_OffsetZ); } } for (int x = 0; x < this.m_Width; ++x) { for (int y = 0; y < this.m_Height; ++y) { this.m_Tiles[x][y] = tiles[x][y].ToArray(); } } }
public MultiComponentList(GenericReader reader) { var version = reader.ReadInt(); m_Min = reader.ReadPoint2D(); m_Max = reader.ReadPoint2D(); m_Center = reader.ReadPoint2D(); Width = reader.ReadInt(); Height = reader.ReadInt(); var length = reader.ReadInt(); var allTiles = m_List = new MultiTileEntry[length]; if (version == 0) { for (var i = 0; i < length; ++i) { int id = reader.ReadShort(); if (id >= 0x4000) { id -= 0x4000; } allTiles[i].m_ItemID = (ushort)id; allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = (TileFlag)reader.ReadUInt(); } } else { for (var i = 0; i < length; ++i) { allTiles[i].m_ItemID = reader.ReadUShort(); allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); if (version > 1) { allTiles[i].m_Flags = (TileFlag)reader.ReadULong(); } else { allTiles[i].m_Flags = (TileFlag)reader.ReadUInt(); } } } var tiles = new TileList[Width][]; Tiles = new StaticTile[Width][][]; for (var x = 0; x < Width; ++x) { tiles[x] = new TileList[Height]; Tiles[x] = new StaticTile[Height][]; for (var y = 0; y < Height; ++y) { tiles[x][y] = new TileList(); } } for (var i = 0; i < allTiles.Length; ++i) { if (i == 0 || allTiles[i].m_Flags != 0) { var xOffset = allTiles[i].m_OffsetX + m_Center.m_X; var yOffset = allTiles[i].m_OffsetY + m_Center.m_Y; var itemID = (allTiles[i].m_ItemID & TileData.MaxItemValue) | 0x10000; tiles[xOffset][yOffset].Add((ushort)itemID, (sbyte)allTiles[i].m_OffsetZ); } } for (var x = 0; x < Width; ++x) { for (var y = 0; y < Height; ++y) { Tiles[x][y] = tiles[x][y].ToArray(); } } }
public MultiComponentList(GenericReader reader) { int version = reader.ReadInt(); m_Min = reader.ReadPoint2D(); m_Max = reader.ReadPoint2D(); m_Center = reader.ReadPoint2D(); m_Width = reader.ReadInt(); m_Height = reader.ReadInt(); int length = reader.ReadInt(); var allTiles = m_List = new MultiTileEntry[length]; if (version == 0) { for (int i = 0; i < length; ++i) { int id = reader.ReadShort(); if (id >= 0x4000) { id -= 0x4000; } allTiles[i].m_ItemID = (ushort)id; allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = reader.ReadInt(); } } else { for (int i = 0; i < length; ++i) { allTiles[i].m_ItemID = reader.ReadUShort(); allTiles[i].m_OffsetX = reader.ReadShort(); allTiles[i].m_OffsetY = reader.ReadShort(); allTiles[i].m_OffsetZ = reader.ReadShort(); allTiles[i].m_Flags = reader.ReadInt(); } } var tiles = new TileList[m_Width][]; m_Tiles = new StaticTile[m_Width][][]; for (int x = 0; x < m_Width; ++x) { tiles[x] = new TileList[m_Height]; m_Tiles[x] = new StaticTile[m_Height][]; for (int y = 0; y < m_Height; ++y) { tiles[x][y] = new TileList(); } } for (int i = 0; i < allTiles.Length; ++i) { if (i == 0 || allTiles[i].m_Flags != 0) { int xOffset = allTiles[i].m_OffsetX + m_Center.m_X; int yOffset = allTiles[i].m_OffsetY + m_Center.m_Y; #region Stygian Abyss //tiles[xOffset][yOffset].Add( (ushort)allTiles[i].m_ItemID, (sbyte)allTiles[i].m_OffsetZ ); tiles[xOffset][yOffset].Add( (ushort)((allTiles[i].m_ItemID & TileData.MaxItemValue) | 0x10000), (sbyte)allTiles[i].m_OffsetZ); #endregion } } for (int x = 0; x < m_Width; ++x) { for (int y = 0; y < m_Height; ++y) { m_Tiles[x][y] = tiles[x][y].ToArray(); } } }
public Skill( Skills owner, SkillInfo info, GenericReader reader ) { m_Owner = owner; m_Info = info; int version = reader.ReadByte(); switch ( version ) { case 0: { m_Base = reader.ReadUShort(); m_Cap = reader.ReadUShort(); m_Lock = (SkillLock)reader.ReadByte(); break; } case 0xFF: { m_Base = 0; m_Cap = 1000; m_Lock = SkillLock.Up; break; } default: { if ( (version & 0xC0) == 0x00 ) { if ( (version & 0x1) != 0 ) m_Base = reader.ReadUShort(); if ( (version & 0x2) != 0 ) m_Cap = reader.ReadUShort(); else m_Cap = 1000; if ( (version & 0x4) != 0 ) m_Lock = (SkillLock)reader.ReadByte(); } break; } } }
public Skill(Skills owner, SkillInfo info, GenericReader reader) { Owner = owner; Info = info; int version = reader.ReadByte(); switch (version) { case 0: { m_Base = reader.ReadUShort(); m_Cap = reader.ReadUShort(); Lock = (SkillLock)reader.ReadByte(); break; } case 0xFF: { m_Base = 0; m_Cap = 1000; Lock = SkillLock.Up; break; } default: { if ((version & 0xC0) == 0x00) { if ((version & 0x1) != 0) { m_Base = reader.ReadUShort(); } if ((version & 0x2) != 0) { m_Cap = reader.ReadUShort(); } else { m_Cap = 1000; } if ((version & 0x4) != 0) { Lock = (SkillLock)reader.ReadByte(); } if ((version & 0x8) != 0) { VolumeLearned = reader.ReadInt(); } if ((version & 0x10) != 0) { NextGGSGain = reader.ReadDateTime(); } } break; } } if (Lock < SkillLock.Up || Lock > SkillLock.Locked) { Console.WriteLine("Bad skill lock -> {0}.{1}", owner.Owner, Lock); Lock = SkillLock.Up; } }