public override ByteWriter Save(ByteWriter bw) { base.Save(bw); bw.UINT(ItemKind); bw.UINT((uint)Items.Count - 1); for (int i = 0; i < Items.Count; i++) { var item = Items[i]; if (item == null) { for (int j = 0; j < 84; j++) { bw.BYTE(0); } continue; } bw.UINT(item.ID.Kind); bw.UINT(item.ImageIndex); SaveVariableFields(bw, item); bw.UINT(item.HP); bw.UINT(item.MP); bw.UINT(item.Attack); bw.UINT(item.Defense); bw.UINT(item.Strength); bw.UINT(item.Spirit); bw.UINT(item.Dexterity); bw.UINT(item.Power); bw.UINT(item.RequiredLevel); bw.UINT(item.RequiredStrength); bw.UINT(item.RequiredSpirit); bw.UINT(item.RequiredDexterity); bw.UINT(item.RequiredPower); bw.UINT(item.Unused0); bw.USHORT(item.Characters); bw.USHORT(item.Weight); bw.USHORT(item.Unused1); bw.USHORT(item.Slot); bw.USHORT(item.Unused2); bw.BYTE(item.Formula); bw.BYTE(item.Range); bw.BYTE(item.ScatterRange); bw.BYTE(item.Animation); bw.UINT(item.Price); } return(bw); }
public void Save(string filename = null) { var bw = new ByteWriter(); bw.STRING(FileID); bw.UINT((uint)Skills.Count); foreach (var s in Skills) { // Handle empty entries if (s == null) { for (int i = 0; i < 41; i++) { bw.BYTE(0); } continue; } bw.BYTE((byte)s.Type); bw.STRING(s.Message.ID.ToString()); bw.STRING(s.Message.SubCategory.ID.ToString()); bw.UINT(s.IconIndex); bw.USHORT(s.ProjectileAnimation); bw.UINT(s.CharacterAnimation); bw.INT(s.Honor); bw.UINT(s.Level); bw.BYTE(s.CharacterType); uint mana = s.ManaUsage; if (s.ManaUsageStyle == ManaUsageStyle.Percentage) { mana += 1000000000; } bw.UINT(mana); short range = s.Range; if (s.IsAOE) { range += 10000; } bw.SHORT(range); bw.BYTE(s.NeedsTarget); bw.BYTE(s.Unused1); bw.BYTE(s.Unused2); bw.BYTE(s.Unused3); bw.BYTE(s.EffectType); bw.UINT(s.Multiplier); bw.UINT(s.Unknown5); } File.WriteAllBytes(filename ?? FileName, bw.ToByteArray()); }