| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- using Server.MirEnvir;
- namespace Server.MirDatabase
- {
- public class HeroInfo : CharacterInfo
- {
- public bool AutoPot;
- public byte Grade;
- public int HPItemIndex;
- public int MPItemIndex;
- public byte AutoHPPercent;
- public byte AutoMPPercent;
- public ushort SealCount;
- public HeroInfo(ClientPackets.NewHero p)
- {
- Name = p.Name;
- Class = p.Class;
- Gender = p.Gender;
- HP = -1;
- Inventory = new UserItem[10];
- CreationDate = Envir.Now;
- }
- public HeroInfo(BinaryReader reader, int version, int customVersion) : base(reader, version, customVersion) { }
- public override void Load(BinaryReader reader, int version, int customVersion)
- {
- Index = reader.ReadInt32();
- Name = reader.ReadString();
- Level = reader.ReadUInt16();
- Class = (MirClass) reader.ReadByte();
- Gender = (MirGender) reader.ReadByte();
- Hair = reader.ReadByte();
- CreationDate = DateTime.FromBinary(reader.ReadInt64());
- Deleted = reader.ReadBoolean();
- DeleteDate = DateTime.FromBinary(reader.ReadInt64());
- HP = reader.ReadInt32();
- MP = reader.ReadInt32();
- Experience = reader.ReadInt64();
- int count = reader.ReadInt32();
- Array.Resize(ref Inventory, count);
- for (int i = 0; i < count; i++)
- {
- if (!reader.ReadBoolean()) continue;
- UserItem item = new UserItem(reader, version, customVersion);
- if (Envir.BindItem(item) && i < Inventory.Length)
- {
- Inventory[i] = item;
- }
- }
- count = reader.ReadInt32();
- for (int i = 0; i < count; i++)
- {
- if (!reader.ReadBoolean()) continue;
- UserItem item = new UserItem(reader, version, customVersion);
- if (Envir.BindItem(item) && i < Equipment.Length)
- {
- Equipment[i] = item;
- }
- }
- count = reader.ReadInt32();
- for (int i = 0; i < count; i++)
- {
- UserMagic magic = new UserMagic(reader, version, customVersion);
- if (magic.Info == null) continue;
- magic.CastTime = int.MinValue;
- Magics.Add(magic);
- }
-
- if (version > 99)
- {
- AutoPot = reader.ReadBoolean();
- Grade = reader.ReadByte();
- HPItemIndex = reader.ReadInt32();
- MPItemIndex = reader.ReadInt32();
- AutoHPPercent = reader.ReadByte();
- AutoMPPercent = reader.ReadByte();
- }
- if (version > 101)
- SealCount = reader.ReadUInt16();
- }
- public override void Save(BinaryWriter writer)
- {
- writer.Write(Index);
- writer.Write(Name);
- writer.Write(Level);
- writer.Write((byte) Class);
- writer.Write((byte) Gender);
- writer.Write(Hair);
- writer.Write(CreationDate.ToBinary());
- writer.Write(Deleted);
- writer.Write(DeleteDate.ToBinary());
- writer.Write(HP);
- writer.Write(MP);
- writer.Write(Experience);
- writer.Write(Inventory.Length);
- for (int i = 0; i < Inventory.Length; i++)
- {
- writer.Write(Inventory[i] != null);
- if (Inventory[i] == null) continue;
- Inventory[i].Save(writer);
- }
- writer.Write(Equipment.Length);
- for (int i = 0; i < Equipment.Length; i++)
- {
- writer.Write(Equipment[i] != null);
- if (Equipment[i] == null) continue;
- Equipment[i].Save(writer);
- }
- writer.Write(Magics.Count);
- for (int i = 0; i < Magics.Count; i++)
- {
- Magics[i].Save(writer);
- }
- writer.Write(AutoPot);
- writer.Write(Grade);
- writer.Write(HPItemIndex);
- writer.Write(MPItemIndex);
- writer.Write(AutoHPPercent);
- writer.Write(AutoMPPercent);
- writer.Write(SealCount);
- }
- public override int ResizeInventory()
- {
- if (Inventory.Length >= 42) return Inventory.Length;
- Array.Resize(ref Inventory, Inventory.Length + 8);
- return Inventory.Length;
- }
- public ClientHeroInformation ClientInformation
- {
- get
- {
- return new ClientHeroInformation()
- {
- Index = Index,
- Name = Name,
- Level = Math.Max((ushort)1, Level),
- Class = Class,
- Gender = Gender
- };
- }
- }
- }
- }
|