ConquestInfo.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. using System.Drawing;
  2. using Server.MirEnvir;
  3. namespace Server.MirDatabase
  4. {
  5. public class ConquestInfo
  6. {
  7. public int Index;
  8. public bool FullMap;
  9. public Point Location;
  10. public ushort Size;
  11. public string Name;
  12. public int MapIndex;
  13. public int PalaceIndex;
  14. public List<int> ExtraMaps = new List<int>();
  15. public List<ConquestArcherInfo> ConquestGuards = new List<ConquestArcherInfo>();
  16. public List<ConquestGateInfo> ConquestGates = new List<ConquestGateInfo>();
  17. public List<ConquestWallInfo> ConquestWalls = new List<ConquestWallInfo>();
  18. public List<ConquestSiegeInfo> ConquestSieges = new List<ConquestSiegeInfo>();
  19. public List<ConquestFlagInfo> ConquestFlags = new List<ConquestFlagInfo>();
  20. public int GuardIndex;
  21. public int GateIndex;
  22. public int WallIndex;
  23. public int SiegeIndex;
  24. public int FlagIndex;
  25. public byte StartHour = 0;
  26. public int WarLength = 60;
  27. public ConquestType Type = ConquestType.Request;
  28. public ConquestGame Game = ConquestGame.CapturePalace;
  29. public bool Monday;
  30. public bool Tuesday;
  31. public bool Wednesday;
  32. public bool Thursday;
  33. public bool Friday;
  34. public bool Saturday;
  35. public bool Sunday;
  36. //King of the hill
  37. public Point KingLocation;
  38. public ushort KingSize;
  39. //Control points
  40. public List<ConquestFlagInfo> ControlPoints = new List<ConquestFlagInfo>();
  41. public int ControlPointIndex;
  42. public ConquestInfo() { }
  43. public ConquestInfo(BinaryReader reader)
  44. {
  45. Index = reader.ReadInt32();
  46. if (Envir.LoadVersion > 73)
  47. {
  48. FullMap = reader.ReadBoolean();
  49. }
  50. Location = new Point(reader.ReadInt32(), reader.ReadInt32());
  51. Size = reader.ReadUInt16();
  52. Name = reader.ReadString();
  53. MapIndex = reader.ReadInt32();
  54. PalaceIndex = reader.ReadInt32();
  55. GuardIndex = reader.ReadInt32();
  56. GateIndex = reader.ReadInt32();
  57. WallIndex = reader.ReadInt32();
  58. SiegeIndex = reader.ReadInt32();
  59. if (Envir.LoadVersion > 72)
  60. {
  61. FlagIndex = reader.ReadInt32();
  62. }
  63. var counter = reader.ReadInt32();
  64. for (int i = 0; i < counter; i++)
  65. {
  66. ConquestGuards.Add(new ConquestArcherInfo(reader));
  67. }
  68. counter = reader.ReadInt32();
  69. for (int i = 0; i < counter; i++)
  70. {
  71. ExtraMaps.Add(reader.ReadInt32());
  72. }
  73. counter = reader.ReadInt32();
  74. for (int i = 0; i < counter; i++)
  75. {
  76. ConquestGates.Add(new ConquestGateInfo(reader));
  77. }
  78. counter = reader.ReadInt32();
  79. for (int i = 0; i < counter; i++)
  80. {
  81. ConquestWalls.Add(new ConquestWallInfo(reader));
  82. }
  83. counter = reader.ReadInt32();
  84. for (int i = 0; i < counter; i++)
  85. {
  86. ConquestSieges.Add(new ConquestSiegeInfo(reader));
  87. }
  88. if (Envir.LoadVersion > 72)
  89. {
  90. counter = reader.ReadInt32();
  91. for (int i = 0; i < counter; i++)
  92. {
  93. ConquestFlags.Add(new ConquestFlagInfo(reader));
  94. }
  95. }
  96. StartHour = reader.ReadByte();
  97. WarLength = reader.ReadInt32();
  98. Type = (ConquestType)reader.ReadByte();
  99. Game = (ConquestGame)reader.ReadByte();
  100. Monday = reader.ReadBoolean();
  101. Tuesday = reader.ReadBoolean();
  102. Wednesday = reader.ReadBoolean();
  103. Thursday = reader.ReadBoolean();
  104. Friday = reader.ReadBoolean();
  105. Saturday = reader.ReadBoolean();
  106. Sunday = reader.ReadBoolean();
  107. KingLocation = new Point(reader.ReadInt32(), reader.ReadInt32());
  108. KingSize = reader.ReadUInt16();
  109. if (Envir.LoadVersion > 74)
  110. {
  111. ControlPointIndex = reader.ReadInt32();
  112. counter = reader.ReadInt32();
  113. for (int i = 0; i < counter; i++)
  114. {
  115. ControlPoints.Add(new ConquestFlagInfo(reader));
  116. }
  117. }
  118. }
  119. public void Save(BinaryWriter writer)
  120. {
  121. writer.Write(Index);
  122. writer.Write(FullMap);
  123. writer.Write(Location.X);
  124. writer.Write(Location.Y);
  125. writer.Write(Size);
  126. writer.Write(Name);
  127. writer.Write(MapIndex);
  128. writer.Write(PalaceIndex);
  129. writer.Write(GuardIndex);
  130. writer.Write(GateIndex);
  131. writer.Write(WallIndex);
  132. writer.Write(SiegeIndex);
  133. writer.Write(FlagIndex);
  134. writer.Write(ConquestGuards.Count);
  135. for (int i = 0; i < ConquestGuards.Count; i++)
  136. {
  137. ConquestGuards[i].Save(writer);
  138. }
  139. writer.Write(ExtraMaps.Count);
  140. for (int i = 0; i < ExtraMaps.Count; i++)
  141. {
  142. writer.Write(ExtraMaps[i]);
  143. }
  144. writer.Write(ConquestGates.Count);
  145. for (int i = 0; i < ConquestGates.Count; i++)
  146. {
  147. ConquestGates[i].Save(writer);
  148. }
  149. writer.Write(ConquestWalls.Count);
  150. for (int i = 0; i < ConquestWalls.Count; i++)
  151. {
  152. ConquestWalls[i].Save(writer);
  153. }
  154. writer.Write(ConquestSieges.Count);
  155. for (int i = 0; i < ConquestSieges.Count; i++)
  156. {
  157. ConquestSieges[i].Save(writer);
  158. }
  159. writer.Write(ConquestFlags.Count);
  160. for (int i = 0; i < ConquestFlags.Count; i++)
  161. {
  162. ConquestFlags[i].Save(writer);
  163. }
  164. writer.Write(StartHour);
  165. writer.Write(WarLength);
  166. writer.Write((byte)Type);
  167. writer.Write((byte)Game);
  168. writer.Write(Monday);
  169. writer.Write(Tuesday);
  170. writer.Write(Wednesday);
  171. writer.Write(Thursday);
  172. writer.Write(Friday);
  173. writer.Write(Saturday);
  174. writer.Write(Sunday);
  175. writer.Write(KingLocation.X);
  176. writer.Write(KingLocation.Y);
  177. writer.Write(KingSize);
  178. writer.Write(ControlPointIndex);
  179. writer.Write(ControlPoints.Count);
  180. for (int i = 0; i < ControlPoints.Count; i++)
  181. {
  182. ControlPoints[i].Save(writer);
  183. }
  184. }
  185. public override string ToString()
  186. {
  187. return string.Format("{0}- {1}", Index, Name);
  188. }
  189. }
  190. public class ConquestSiegeInfo
  191. {
  192. public int Index;
  193. public Point Location;
  194. public int MobIndex;
  195. public string Name;
  196. public int RepairCost;
  197. public ConquestSiegeInfo() { }
  198. public ConquestSiegeInfo(BinaryReader reader)
  199. {
  200. Index = reader.ReadInt32();
  201. Location = new Point(reader.ReadInt32(), reader.ReadInt32());
  202. MobIndex = reader.ReadInt32();
  203. Name = reader.ReadString();
  204. if (Envir.LoadVersion <= 84)
  205. {
  206. RepairCost = (int)reader.ReadUInt32();
  207. }
  208. else
  209. {
  210. RepairCost = reader.ReadInt32();
  211. }
  212. }
  213. public void Save(BinaryWriter writer)
  214. {
  215. writer.Write(Index);
  216. writer.Write(Location.X);
  217. writer.Write(Location.Y);
  218. writer.Write(MobIndex);
  219. writer.Write(Name);
  220. writer.Write(RepairCost);
  221. }
  222. public override string ToString()
  223. {
  224. return string.Format("{0} - {1} ({2})", Index, Name, Location);
  225. }
  226. }
  227. public class ConquestWallInfo
  228. {
  229. public int Index;
  230. public Point Location;
  231. public int MobIndex;
  232. public string Name;
  233. public int RepairCost;
  234. public ConquestWallInfo() { }
  235. public ConquestWallInfo(BinaryReader reader)
  236. {
  237. Index = reader.ReadInt32();
  238. Location = new Point(reader.ReadInt32(), reader.ReadInt32());
  239. MobIndex = reader.ReadInt32();
  240. Name = reader.ReadString();
  241. if (Envir.LoadVersion <= 84)
  242. {
  243. RepairCost = (int)reader.ReadUInt32();
  244. }
  245. else
  246. {
  247. RepairCost = reader.ReadInt32();
  248. }
  249. }
  250. public void Save(BinaryWriter writer)
  251. {
  252. writer.Write(Index);
  253. writer.Write(Location.X);
  254. writer.Write(Location.Y);
  255. writer.Write(MobIndex);
  256. writer.Write(Name);
  257. writer.Write(RepairCost);
  258. }
  259. public override string ToString()
  260. {
  261. return string.Format("{0} - {1} ({2})", Index, Name, Location);
  262. }
  263. }
  264. public class ConquestGateInfo
  265. {
  266. public int Index;
  267. public Point Location;
  268. public int MobIndex;
  269. public string Name;
  270. public int RepairCost;
  271. public ConquestGateInfo() { }
  272. public ConquestGateInfo(BinaryReader reader)
  273. {
  274. Index = reader.ReadInt32();
  275. Location = new Point(reader.ReadInt32(), reader.ReadInt32());
  276. MobIndex = reader.ReadInt32();
  277. Name = reader.ReadString();
  278. if (Envir.LoadVersion <= 84)
  279. {
  280. RepairCost = (int)reader.ReadUInt32();
  281. }
  282. else
  283. {
  284. RepairCost = reader.ReadInt32();
  285. }
  286. }
  287. public void Save(BinaryWriter writer)
  288. {
  289. writer.Write(Index);
  290. writer.Write(Location.X);
  291. writer.Write(Location.Y);
  292. writer.Write(MobIndex);
  293. writer.Write(Name);
  294. writer.Write(RepairCost);
  295. }
  296. public override string ToString()
  297. {
  298. return string.Format("{0} - {1} ({2})", Index, Name, Location);
  299. }
  300. }
  301. public class ConquestArcherInfo
  302. {
  303. public int Index;
  304. public Point Location;
  305. public int MobIndex;
  306. public string Name;
  307. public uint RepairCost;
  308. public ConquestArcherInfo() { }
  309. public ConquestArcherInfo(BinaryReader reader)
  310. {
  311. Index = reader.ReadInt32();
  312. Location = new Point(reader.ReadInt32(), reader.ReadInt32());
  313. MobIndex = reader.ReadInt32();
  314. Name = reader.ReadString();
  315. RepairCost = reader.ReadUInt32();
  316. }
  317. public void Save(BinaryWriter writer)
  318. {
  319. writer.Write(Index);
  320. writer.Write(Location.X);
  321. writer.Write(Location.Y);
  322. writer.Write(MobIndex);
  323. writer.Write(Name);
  324. writer.Write(RepairCost);
  325. }
  326. public override string ToString()
  327. {
  328. return string.Format("{0} - {1} ({2})", Index, Name, Location);
  329. }
  330. }
  331. public class ConquestFlagInfo
  332. {
  333. public int Index;
  334. public Point Location;
  335. public string Name;
  336. public string FileName = string.Empty;
  337. public ConquestFlagInfo() { }
  338. public ConquestFlagInfo(BinaryReader reader)
  339. {
  340. Index = reader.ReadInt32();
  341. Location = new Point(reader.ReadInt32(), reader.ReadInt32());
  342. Name = reader.ReadString();
  343. FileName = reader.ReadString();
  344. }
  345. public void Save(BinaryWriter writer)
  346. {
  347. writer.Write(Index);
  348. writer.Write(Location.X);
  349. writer.Write(Location.Y);
  350. writer.Write(Name);
  351. writer.Write(FileName);
  352. }
  353. public override string ToString()
  354. {
  355. return string.Format("{0} - {1} ({2})", Index, Name, Location);
  356. }
  357. }
  358. }