Advertisement
k7host

noplte cps

Apr 26th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.94 KB | None | 0 0
  1. namespace kingdom.Game.ConquerStructures
  2. {
  3. public class Nobility : kingdom.Network.Writer
  4. {
  5. public static SafeDictionary<uint, NobilityInformation> Board = new SafeDictionary<uint, NobilityInformation>(10000);
  6. public static List<NobilityInformation> BoardList = new List<NobilityInformation>(10000);
  7. public static void Handle(NobilityInfo information, Client.GameClient client)
  8. {
  9. switch (information.Type)
  10. {
  11. case NobilityInfo.Donate: //El-Coder
  12. {
  13. if (client.Trade.InTrade) return;
  14. ulong cps = information.dwParam;
  15. bool newDonator = false;
  16. client.NobilityInformation.Gender = (byte)(client.Entity.Body % 10);
  17. if (client.NobilityInformation.Donation == 0)
  18. newDonator = true;
  19. if (information.MoneyType == 2)
  20. {
  21. //ulong cps = silvers / 3000;
  22. if (client.Entity.ConquerPoints >= cps)
  23. {
  24. client.Entity.ConquerPoints -= (uint)cps;
  25. client.NobilityInformation.Donation += cps;
  26. }
  27. }
  28. else if (client.Entity.ConquerPoints >= cps)
  29. {
  30. client.Entity.ConquerPoints -= (uint)cps;
  31. client.NobilityInformation.Donation += cps;
  32. }
  33. if (!Board.ContainsKey(client.Entity.UID) && client.NobilityInformation.Donation == cps && newDonator)
  34. {
  35. Board.Add(client.Entity.UID, client.NobilityInformation);
  36. try
  37. {
  38. Database.NobilityTable.InsertNobilityInformation(client.NobilityInformation);
  39. }
  40. catch
  41. {
  42. Database.NobilityTable.UpdateNobilityInformation(client.NobilityInformation);
  43. }
  44. }
  45. else
  46. {
  47. Database.NobilityTable.UpdateNobilityInformation(client.NobilityInformation);
  48. }
  49. Sort(client.Entity.UID);
  50. break;
  51. }
  52. case NobilityInfo.NextRank:
  53. {
  54. try
  55. {
  56. ulong[] Contributions = new ulong[]
  57. {
  58. 0, 30000000, 0, 100000000,0, 200000000, 0, (byte)client.NobilityInformation.Rank > 7
  59. || !BoardList.Any(x => x.Rank == NobilityRank.Duke) ? 0 : BoardList.Where(x => x.Rank == NobilityRank.Duke
  60. && x.Donation >= client.NobilityInformation.Donation).Last().Donation - client.NobilityInformation.Donation, 0,(byte)client.NobilityInformation.Rank > 9
  61. || !BoardList.Any(x => x.Rank == NobilityRank.Prince) ? 0 : BoardList.Where(x => x.Rank == NobilityRank.Prince
  62. && x.Donation >= client.NobilityInformation.Donation).Last().Donation - client.NobilityInformation.Donation, 0,0, (byte)client.NobilityInformation.Position == 1
  63. || !BoardList.Any(x => x.Rank == NobilityRank.King) ? 0 : BoardList.Where(x => x.Rank == NobilityRank.King
  64. && x.Donation >= client.NobilityInformation.Donation).Last().Donation - client.NobilityInformation.Donation,
  65. };
  66. MemoryStream strm = new MemoryStream();
  67. BinaryWriter wtr = new BinaryWriter(strm);
  68. wtr.Write((ushort)0);
  69. wtr.Write((ushort)2064);
  70. wtr.Write((uint)4);
  71. byte[] Ranks = { 1, 3, 5, 7, 9, 12 };
  72. foreach (var Rank in Ranks)
  73. {
  74. wtr.Write((ulong)Contributions[Rank]);
  75. wtr.Write((uint)4294967295);
  76. wtr.Write((uint)Rank);
  77. }
  78. int packetlength = (int)strm.Length;
  79. strm.Position = 0;
  80. wtr.Write((ushort)packetlength);
  81. strm.Position = strm.Length;
  82. wtr.Write(Server.Encoding.GetBytes("TQServer"));
  83. strm.Position = 0;
  84. byte[] buf = new byte[strm.Length];
  85. strm.Read(buf, 0, buf.Length);
  86. client.Send(buf);
  87. wtr.Close();
  88. strm.Close();
  89. }
  90. catch (Exception e)
  91. {
  92. Console.WriteLine(e);
  93. Server.SaveException(e);
  94. }
  95. break;
  96. }
  97. case NobilityInfo.List:
  98. {
  99. byte[] packet = new byte[600 + 8];
  100. WriteUInt16(600, 0, packet);
  101. WriteUInt16(2064, 2, packet);
  102. WriteUInt16(2, 4, packet);
  103. WriteUInt16((ushort)(BoardList.Count > 50 ? 5 : (BoardList.Count / 10) + 1), 10, packet);
  104. ushort Count = 0;
  105. int offset = 120;
  106. for (int i = (int)(information.wParam1 * 10); i < information.wParam1 * 10 + 10 && i < BoardList.Count; i++)
  107. {
  108. var nob = BoardList[i];
  109. WriteUInt32(nob.EntityUID, offset, packet);
  110. Count++;
  111. offset += 4;
  112. if (Kernel.GamePool.ContainsKey(nob.EntityUID))
  113. {
  114. WriteUInt32(1, offset, packet);
  115. offset += 4;
  116. WriteUInt32(nob.Mesh, offset, packet);
  117. offset += 4;
  118. }
  119. else
  120. {
  121. offset += 8;
  122. }
  123. WriteString(nob.Name, offset, packet);
  124. offset += 20;
  125. WriteUInt64(nob.Donation, offset, packet);
  126. offset += 8;
  127. WriteUInt32((uint)nob.Rank, offset, packet);
  128. offset += 4;
  129. WriteUInt32((uint)i, offset, packet);
  130. offset += 4;
  131. }
  132. WriteUInt16(Count, 12, packet);
  133. client.Send(packet);
  134. break;
  135. }
  136. }
  137. }
  138. public static void Donate(ulong cps, Client.GameClient client) //El-Coder
  139. {
  140. bool newDonator = false;
  141. client.NobilityInformation.Gender = (byte)(client.Entity.Body % 10);
  142. if (client.NobilityInformation.Donation == 0)
  143. newDonator = true;
  144.  
  145. client.NobilityInformation.Donation += cps;
  146. if (!Board.ContainsKey(client.Entity.UID) && client.NobilityInformation.Donation == cps && newDonator)
  147. {
  148. Board.Add(client.Entity.UID, client.NobilityInformation);
  149. try
  150. {
  151. Database.NobilityTable.InsertNobilityInformation(client.NobilityInformation);
  152. }
  153. catch
  154. {
  155. Database.NobilityTable.UpdateNobilityInformation(client.NobilityInformation);
  156. }
  157. }
  158. else
  159. {
  160. Database.NobilityTable.UpdateNobilityInformation(client.NobilityInformation);
  161. }
  162. Sort(client.Entity.UID);
  163. }
  164. public static void Sort(uint updateUID)
  165. {
  166. SafeDictionary<uint, NobilityInformation> sortedBoard = new SafeDictionary<uint, NobilityInformation>();
  167. int Place = 0;
  168. foreach (NobilityInformation entry in Board.Values.OrderByDescending((p) => p.Donation))
  169. {
  170. Client.GameClient client = null;
  171. try
  172. {
  173. int previousPlace = entry.Position;
  174. entry.Position = Place;
  175. NobilityRank Rank = NobilityRank.Serf;
  176.  
  177. if (Place >= 50)
  178. {
  179. if (entry.Donation >= 200000000)
  180. {
  181. Rank = NobilityRank.Earl;
  182. }
  183. else if (entry.Donation >= 100000000)
  184. {
  185. Rank = NobilityRank.Baron;
  186. }
  187. else if (entry.Donation >= 30000000)
  188. {
  189. Rank = NobilityRank.Knight;
  190. }
  191. }
  192. else
  193. {
  194. if (Place < 5)
  195. {
  196. Rank = NobilityRank.King;
  197. }
  198. else if (Place < 17)
  199. {
  200. Rank = NobilityRank.Prince;
  201. }
  202. else
  203. {
  204. Rank = NobilityRank.Duke;
  205. }
  206. }
  207. var oldRank = entry.Rank;
  208. entry.Rank = Rank;
  209. if (Kernel.GamePool.TryGetValue(entry.EntityUID, out client)) //El-Coder
  210. {
  211. bool updateTheClient = false;
  212. if (oldRank != Rank)
  213. {
  214. updateTheClient = true;
  215. if (Rank == NobilityRank.Baron)
  216. {
  217. Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " has the Baron title.", Color.White, Message.TopLeft), Server.GamePool);
  218. }
  219. if (Rank == NobilityRank.Earl)
  220. {
  221. Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " has the Earl title.", Color.White, Message.TopLeft), Server.GamePool);
  222. }
  223. if (Rank == NobilityRank.Duke)
  224. {
  225. Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " has the Duke title.", Color.White, Message.Center), Server.GamePool);
  226. }
  227. if (Rank == NobilityRank.Prince)
  228. {
  229. Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " has the Prince title.", Color.White, Message.Center), Server.GamePool);
  230. }
  231. if (Rank == NobilityRank.King)
  232. {
  233. Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " has become the new King/Queen in " + Constants.ServerName + ".", Color.White, Message.Center), Server.GamePool);
  234. }
  235. if (Rank == NobilityRank.Knight)
  236. {
  237. Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " has become a Knight.", Color.White, Message.TopLeft), Server.GamePool);
  238. }
  239. }
  240. else
  241. {
  242. if (previousPlace != Place)
  243. {
  244. updateTheClient = true;
  245. }
  246. }
  247. if (updateTheClient || client.Entity.UID == updateUID)
  248. {
  249. NobilityInfo update = new NobilityInfo(true);
  250. update.Type = NobilityInfo.Icon;
  251. update.dwParam = entry.EntityUID;
  252. update.UpdateString(entry);
  253. client.SendScreen(update, true);
  254. client.Entity.NobilityRank = entry.Rank;
  255. }
  256. }
  257. sortedBoard.Add(entry.EntityUID, entry);
  258. Place++;
  259. }
  260. catch
  261. {
  262. }
  263. }
  264. Board = sortedBoard;
  265. lock (BoardList)
  266. BoardList = Board.Values.ToList();
  267. }
  268. public static ulong GetMinimumDonation(Network.GamePackets.Nobility.NobilityIcon.NobilityRanks Rank)
  269. {
  270. switch (Rank)
  271. {
  272. case Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Knight:
  273. case Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Lady:
  274. return 0x1c9c380L;
  275.  
  276. case Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Baron:
  277. case Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Baroness:
  278. return 0x5f5e100L;
  279.  
  280. case Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Earl:
  281. case Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Countess:
  282. return 0xbebc200L;
  283. }
  284. return MinimumDonationFor(Rank);
  285. }
  286. public static ulong MinimumDonationFor(Network.GamePackets.Nobility.NobilityIcon.NobilityRanks Rank)
  287. {
  288. ulong num = 0L;
  289. for (int c = 0; c < BoardList.Count; c++)
  290. {
  291.  
  292.  
  293. sbyte place = 0;
  294. Network.GamePackets.Nobility.NobilityIcon.NobilityRanks commoner = Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Commoner;
  295. uint identifier = BoardList[c].EntityUID;
  296. ulong donation = BoardList[c].Donation;
  297. GetNobilityStats(identifier, donation, ref place, ref commoner);
  298. if ((commoner == Rank) && ((donation < num) || (num == 0L)))
  299. {
  300. num = donation;
  301. }
  302.  
  303. }
  304. return (num + ((ulong)1L));
  305. }
  306. public static void GetNobilityStats(uint Identifier, ulong Donation, ref sbyte Place, ref Network.GamePackets.Nobility.NobilityIcon.NobilityRanks Rank)
  307. {
  308. sbyte place = 0;
  309. Network.GamePackets.Nobility.NobilityIcon.NobilityRanks commoner = Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Commoner;
  310. for (int c = 0; c < 50; c++)
  311. {
  312.  
  313. if (BoardList[c].EntityUID == Identifier)
  314. {
  315. break;
  316. }
  317. if (place < 50)
  318. {
  319. place = (sbyte)(place + 1);
  320. }
  321. }
  322.  
  323. Place = (place < 50) ? place : ((sbyte)(-1));
  324. if (Donation == 0L)
  325. {
  326. Place = -1;
  327. }
  328. commoner = GetRanking(Donation, place);
  329. Rank = commoner;
  330. }
  331. public static Network.GamePackets.Nobility.NobilityIcon.NobilityRanks GetRanking(ulong Donation, sbyte Place)
  332. {
  333. if ((Donation != 0L) && (Place >= 0))
  334. {
  335. if ((Place < 3) && (Donation > 0L))
  336. {
  337. return Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.King;
  338. }
  339. if ((Place < 0x12) && (Donation > 0L))
  340. {
  341. return Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Prince;
  342. }
  343. if ((Place < 0x35) && (Donation > 0L))
  344. {
  345. return Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Duke;
  346. }
  347. if (Donation >= 0xbebc200L)
  348. {
  349. return Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Earl;
  350. }
  351. if (Donation >= 0x5f5e100L)
  352. {
  353. return Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Baron;
  354. }
  355. if (Donation >= 0x1c9c380L)
  356. {
  357. return Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Knight;
  358. }
  359. }
  360. return Network.GamePackets.Nobility.NobilityIcon.NobilityRanks.Commoner;
  361. }
  362. }
  363. public class NobilityInformation
  364. {
  365. public string Name;
  366. public uint EntityUID;
  367. public uint Mesh;
  368. public ulong Donation;
  369. public byte Gender;
  370. public int Position;
  371. public NobilityRank Rank;
  372. public bool Prince;
  373. public bool Duck;
  374. public bool king;
  375. public DateTime KingDays;
  376. }
  377. public enum NobilityRank : byte
  378. {
  379. Serf = 0,
  380. Knight = 1,
  381. Baron = 3,
  382. Earl = 5,
  383. Duke = 7,
  384. Prince = 9,
  385. King = 12
  386. }
  387. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement