HeroInfo.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using Server.MirEnvir;
  2. namespace Server.MirDatabase
  3. {
  4. public class HeroInfo : CharacterInfo
  5. {
  6. public bool AutoPot;
  7. public byte Grade;
  8. public int HPItemIndex;
  9. public int MPItemIndex;
  10. public byte AutoHPPercent;
  11. public byte AutoMPPercent;
  12. public ushort SealCount;
  13. public HeroInfo(ClientPackets.NewHero p)
  14. {
  15. Name = p.Name;
  16. Class = p.Class;
  17. Gender = p.Gender;
  18. HP = -1;
  19. Inventory = new UserItem[10];
  20. CreationDate = Envir.Now;
  21. }
  22. public HeroInfo(BinaryReader reader, int version, int customVersion) : base(reader, version, customVersion) { }
  23. public override void Load(BinaryReader reader, int version, int customVersion)
  24. {
  25. Index = reader.ReadInt32();
  26. Name = reader.ReadString();
  27. Level = reader.ReadUInt16();
  28. Class = (MirClass) reader.ReadByte();
  29. Gender = (MirGender) reader.ReadByte();
  30. Hair = reader.ReadByte();
  31. CreationDate = DateTime.FromBinary(reader.ReadInt64());
  32. Deleted = reader.ReadBoolean();
  33. DeleteDate = DateTime.FromBinary(reader.ReadInt64());
  34. HP = reader.ReadInt32();
  35. MP = reader.ReadInt32();
  36. Experience = reader.ReadInt64();
  37. int count = reader.ReadInt32();
  38. Array.Resize(ref Inventory, count);
  39. for (int i = 0; i < count; i++)
  40. {
  41. if (!reader.ReadBoolean()) continue;
  42. UserItem item = new UserItem(reader, version, customVersion);
  43. if (Envir.BindItem(item) && i < Inventory.Length)
  44. {
  45. Inventory[i] = item;
  46. }
  47. }
  48. count = reader.ReadInt32();
  49. for (int i = 0; i < count; i++)
  50. {
  51. if (!reader.ReadBoolean()) continue;
  52. UserItem item = new UserItem(reader, version, customVersion);
  53. if (Envir.BindItem(item) && i < Equipment.Length)
  54. {
  55. Equipment[i] = item;
  56. }
  57. }
  58. count = reader.ReadInt32();
  59. for (int i = 0; i < count; i++)
  60. {
  61. UserMagic magic = new UserMagic(reader, version, customVersion);
  62. if (magic.Info == null) continue;
  63. magic.CastTime = int.MinValue;
  64. Magics.Add(magic);
  65. }
  66. if (version > 99)
  67. {
  68. AutoPot = reader.ReadBoolean();
  69. Grade = reader.ReadByte();
  70. HPItemIndex = reader.ReadInt32();
  71. MPItemIndex = reader.ReadInt32();
  72. AutoHPPercent = reader.ReadByte();
  73. AutoMPPercent = reader.ReadByte();
  74. }
  75. if (version > 101)
  76. SealCount = reader.ReadUInt16();
  77. }
  78. public override void Save(BinaryWriter writer)
  79. {
  80. writer.Write(Index);
  81. writer.Write(Name);
  82. writer.Write(Level);
  83. writer.Write((byte) Class);
  84. writer.Write((byte) Gender);
  85. writer.Write(Hair);
  86. writer.Write(CreationDate.ToBinary());
  87. writer.Write(Deleted);
  88. writer.Write(DeleteDate.ToBinary());
  89. writer.Write(HP);
  90. writer.Write(MP);
  91. writer.Write(Experience);
  92. writer.Write(Inventory.Length);
  93. for (int i = 0; i < Inventory.Length; i++)
  94. {
  95. writer.Write(Inventory[i] != null);
  96. if (Inventory[i] == null) continue;
  97. Inventory[i].Save(writer);
  98. }
  99. writer.Write(Equipment.Length);
  100. for (int i = 0; i < Equipment.Length; i++)
  101. {
  102. writer.Write(Equipment[i] != null);
  103. if (Equipment[i] == null) continue;
  104. Equipment[i].Save(writer);
  105. }
  106. writer.Write(Magics.Count);
  107. for (int i = 0; i < Magics.Count; i++)
  108. {
  109. Magics[i].Save(writer);
  110. }
  111. writer.Write(AutoPot);
  112. writer.Write(Grade);
  113. writer.Write(HPItemIndex);
  114. writer.Write(MPItemIndex);
  115. writer.Write(AutoHPPercent);
  116. writer.Write(AutoMPPercent);
  117. writer.Write(SealCount);
  118. }
  119. public override int ResizeInventory()
  120. {
  121. if (Inventory.Length >= 42) return Inventory.Length;
  122. Array.Resize(ref Inventory, Inventory.Length + 8);
  123. return Inventory.Length;
  124. }
  125. public ClientHeroInformation ClientInformation
  126. {
  127. get
  128. {
  129. return new ClientHeroInformation()
  130. {
  131. Index = Index,
  132. Name = Name,
  133. Level = Math.Max((ushort)1, Level),
  134. Class = Class,
  135. Gender = Gender
  136. };
  137. }
  138. }
  139. }
  140. }