GuildInfo.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. using System.Drawing;
  2. using Server.MirEnvir;
  3. using Server.MirObjects;
  4. namespace Server.MirDatabase
  5. {
  6. public class GuildInfo
  7. {
  8. public int GuildIndex = 0;
  9. public string Name = "";
  10. public byte Level = 0;
  11. public byte SparePoints = 0;
  12. public long Experience = 0;
  13. public uint Gold = 0;
  14. public Int32 Votes = 0;
  15. public DateTime LastVoteAttempt;
  16. public bool Voting = false;
  17. public int Membercount = 0;
  18. public List<GuildRank> Ranks = new List<GuildRank>();
  19. public GuildStorageItem[] StoredItems = new GuildStorageItem[112];
  20. public List<GuildBuff> BuffList = new List<GuildBuff>();
  21. public List<string> Notice = new List<string>();
  22. public long MaxExperience = 0;
  23. public int MemberCap = 0;
  24. public ushort FlagImage = 1000;
  25. public Color FlagColour = Color.White;
  26. public bool NeedSave = false;
  27. public DateTime GTRent = DateTime.MinValue;
  28. public DateTime GTBegin = DateTime.MinValue;
  29. public int GTIndex = -1;
  30. public int GTKey = 0;
  31. public int GTPrice;
  32. protected static Envir Envir
  33. {
  34. get { return Envir.Main; }
  35. }
  36. public bool HasGT
  37. {
  38. get
  39. {
  40. return GTRent > DateTime.Now;
  41. }
  42. }
  43. public GuildInfo(PlayerObject owner, string name)
  44. {
  45. Name = name;
  46. var ownerRank = new GuildRank { Name = "Leader", Options = (GuildRankOptions)255, Index = 0 };
  47. var leader = new GuildMember { Name = owner.Info.Name, Player = owner, Id = owner.Info.Index, LastLogin = Envir.Now, Online = true };
  48. ownerRank.Members.Add(leader);
  49. Ranks.Add(ownerRank);
  50. Membercount++;
  51. NeedSave = true;
  52. if (Level < Settings.Guild_ExperienceList.Count)
  53. {
  54. MaxExperience = Settings.Guild_ExperienceList[Level];
  55. }
  56. if (Name == Settings.NewbieGuild)
  57. {
  58. MemberCap = Settings.NewbieGuildMaxSize;
  59. Level = 21;
  60. }
  61. else if(Level < Settings.Guild_MembercapList.Count)
  62. {
  63. MemberCap = Settings.Guild_MembercapList[Level];
  64. }
  65. FlagColour = Color.FromArgb(255, Envir.Random.Next(255), Envir.Random.Next(255), Envir.Random.Next(255));
  66. }
  67. public GuildInfo(BinaryReader reader)
  68. {
  69. int customversion = Envir.LoadCustomVersion;
  70. int version = reader.ReadInt32();
  71. GuildIndex = version;
  72. if (version == int.MaxValue)
  73. {
  74. version = reader.ReadInt32();
  75. customversion = reader.ReadInt32();
  76. GuildIndex = reader.ReadInt32();
  77. }
  78. else
  79. {
  80. version = Envir.LoadVersion;
  81. NeedSave = true;
  82. }
  83. Name = reader.ReadString();
  84. Level = reader.ReadByte();
  85. SparePoints = reader.ReadByte();
  86. Experience = reader.ReadInt64();
  87. Gold = reader.ReadUInt32();
  88. Votes = reader.ReadInt32();
  89. LastVoteAttempt = DateTime.FromBinary(reader.ReadInt64());
  90. Voting = reader.ReadBoolean();
  91. int rankCount = reader.ReadInt32();
  92. Membercount = 0;
  93. for (int i = 0; i < rankCount; i++)
  94. {
  95. int index = i;
  96. Ranks.Add(new GuildRank(reader, true) { Index = index });
  97. Membercount += Ranks[i].Members.Count;
  98. }
  99. int itemCount = reader.ReadInt32();
  100. for (int j = 0; j < itemCount; j++)
  101. {
  102. if (!reader.ReadBoolean()) continue;
  103. GuildStorageItem Guilditem = new GuildStorageItem()
  104. {
  105. Item = new UserItem(reader, version, customversion),
  106. UserId = reader.ReadInt64()
  107. };
  108. if (Envir.BindItem(Guilditem.Item) && j < StoredItems.Length)
  109. StoredItems[j] = Guilditem;
  110. }
  111. int buffCount = reader.ReadInt32();
  112. if (version < 61)
  113. {
  114. for (int j = 0; j < buffCount; j++)
  115. new GuildBuffOld(reader);
  116. }
  117. else
  118. {
  119. for (int j = 0; j < buffCount; j++)
  120. {
  121. //new GuildBuff(reader);
  122. BuffList.Add(new GuildBuff(reader));
  123. }
  124. }
  125. for (int j = 0; j < BuffList.Count; j++)
  126. {
  127. BuffList[j].Info = Envir.FindGuildBuffInfo(BuffList[j].Id);
  128. }
  129. int noticeCount = reader.ReadInt32();
  130. for (int j = 0; j < noticeCount; j++)
  131. {
  132. Notice.Add(reader.ReadString());
  133. }
  134. if (Level < Settings.Guild_ExperienceList.Count)
  135. {
  136. MaxExperience = Settings.Guild_ExperienceList[Level];
  137. }
  138. if (Name == Settings.NewbieGuild)
  139. {
  140. MemberCap = Settings.NewbieGuildMaxSize;
  141. }
  142. else if (Level < Settings.Guild_MembercapList.Count)
  143. {
  144. MemberCap = Settings.Guild_MembercapList[Level];
  145. }
  146. if (version > 72)
  147. {
  148. FlagImage = reader.ReadUInt16();
  149. FlagColour = Color.FromArgb(reader.ReadInt32());
  150. }
  151. if (version > 110)
  152. {
  153. GTRent = DateTime.FromBinary(reader.ReadInt64());
  154. GTIndex = reader.ReadInt32();
  155. GTKey = reader.ReadInt32();
  156. GTPrice = reader.ReadInt32();
  157. GTBegin = DateTime.FromBinary(reader.ReadInt64());
  158. }
  159. }
  160. public void Save(BinaryWriter writer)
  161. {
  162. int temp = int.MaxValue;
  163. writer.Write(temp);
  164. writer.Write(Envir.Version);
  165. writer.Write(Envir.CustomVersion);
  166. int rankCount = 0;
  167. for (int i = Ranks.Count - 1; i >= 0; i--)
  168. {
  169. if (Ranks[i].Members.Count > 0)
  170. {
  171. rankCount++;
  172. }
  173. }
  174. writer.Write(GuildIndex);
  175. writer.Write(Name);
  176. writer.Write(Level);
  177. writer.Write(SparePoints);
  178. writer.Write(Experience);
  179. writer.Write(Gold);
  180. writer.Write(Votes);
  181. writer.Write(LastVoteAttempt.ToBinary());
  182. writer.Write(Voting);
  183. writer.Write(rankCount);
  184. for (int i = 0; i < Ranks.Count; i++)
  185. {
  186. if (Ranks[i].Members.Count > 0)
  187. {
  188. Ranks[i].Save(writer, true);
  189. }
  190. }
  191. writer.Write(StoredItems.Length);
  192. for (int i = 0; i < StoredItems.Length; i++)
  193. {
  194. writer.Write(StoredItems[i] != null);
  195. if (StoredItems[i] != null)
  196. {
  197. StoredItems[i].Item.Save(writer);
  198. writer.Write(StoredItems[i].UserId);
  199. }
  200. }
  201. writer.Write(BuffList.Count);
  202. for (int i = 0; i < BuffList.Count; i++)
  203. {
  204. BuffList[i].Save(writer);
  205. }
  206. writer.Write(Notice.Count);
  207. for (int i = 0; i < Notice.Count; i++)
  208. {
  209. writer.Write(Notice[i]);
  210. }
  211. writer.Write(FlagImage);
  212. writer.Write(FlagColour.ToArgb());
  213. writer.Write(GTRent.ToBinary());
  214. writer.Write(GTIndex);
  215. writer.Write(GTKey);
  216. writer.Write(GTPrice);
  217. writer.Write(GTBegin.ToBinary());
  218. }
  219. }
  220. }