using system; using system.linq; using system.collections.generic; using mr_panda.network.gamepackets; using system.io; namespace mr_panda.game.conquerstructures { public class nobility : Mr_panda.network.writer { public static ulong maxdonation = 0; public static ulong maxdonation1 = 0; public static ulong maxdonation2 = 0; public static safedictionary<uint, nobilityinformation> board = new safedictionary<uint, nobilityinformation>(10000); public static list<nobilityinformation> boardlist = new list<nobilityinformation>(10000); public static void handle(nobilityinfo information, client.gamestate client) { if (information.type == nobilityinfo.donate) return; switch (information.type) { case nobilityinfo.donate: { if (client.trade.intrade) return; if (client.player.donatetime) return; ulong silvers = information.dwparam; bool newdonator = false; client.nobilityinformation.gender = (byte)(client.player.body % 10); if (client.nobilityinformation.donation == 0) newdonator = true; if (information.moneytype == 1) { ulong cps = silvers / 50000; if (client.player.conquerpoints >= 10000) { client.player.conquerpoints -= 10000; client.nobilityinformation.donation += silvers; } } else { if (client.player.money >= silvers) { client.player.money -= (uint)silvers; client.nobilityinformation.donation += silvers; } } if (!board.containskey(client.player.uid) && client.nobilityinformation.donation == silvers && newdonator) { board.add(client.player.uid, client.nobilityinformation); try { database.nobilitytable.insertnobilityinformation(client.nobilityinformation); } catch { database.nobilitytable.updatenobilityinformation(client.nobilityinformation); } } else { database.nobilitytable.updatenobilityinformation(client.nobilityinformation); } sort(client.player.uid); break; } case nobilityinfo.list: { byte[] packet = new byte[600 + 8]; network.writer.writeuint16(600, 0, packet); network.writer.writeuint16(2064, 2, packet); network.writer.writeuint16(2, 4, packet); network.writer.writeuint16(5, 10, packet); network.writer.writeuint16(20, 12, packet); int offset = 120; for (int i = (int)(information.wparam1 * 10); i < information.wparam1 * 10 + 10 && i < boardlist.count; i++) { var nob = boardlist[i]; network.writer.writeuint32(nob.entityuid, offset, packet); offset += 4; if (kernel.gamepool.containskey(nob.entityuid)) { network.writer.writeuint32(1, offset, packet); offset += 4; network.writer.writeuint32(nob.mesh, offset, packet); offset += 4; } else { offset += 8; } network.writer.writestring(nob.name, offset, packet); offset += 20; network.writer.writeuint64(nob.donation, offset, packet); offset += 8; network.writer.writeuint32((uint)nob.rank, offset, packet); offset += 4; network.writer.writeuint32((uint)i, offset, packet); offset += 4; } client.send(packet); break; } } } public static void donate(ulong silvers, client.gamestate client, bool npc = false) { if (npc == false) return; bool newdonator = false; client.nobilityinformation.gender = (byte)(client.player.body % 10); if (client.nobilityinformation.donation == 0) newdonator = true; client.nobilityinformation.donation += silvers; if (!board.containskey(client.player.uid) && client.nobilityinformation.donation == silvers && newdonator) { board.add(client.player.uid, client.nobilityinformation); try { database.nobilitytable.insertnobilityinformation(client.nobilityinformation); } catch { database.nobilitytable.updatenobilityinformation(client.nobilityinformation); } } else { database.nobilitytable.updatenobilityinformation(client.nobilityinformation); } sort(client.player.uid); } public static void sort(uint updateuid) { safedictionary<uint, nobilityinformation> sortedboard = new safedictionary<uint, nobilityinformation>(); int place = 0; foreach (nobilityinformation entry in board.values.orderbydescending((p) => p.donation)) { client.gamestate client = null; try { int previousplace = entry.position; entry.position = place; nobilityrank rank = nobilityrank.serf; if (place >= 10000) { if (entry.donation >= 200000) { rank = nobilityrank.earl; } else if (entry.donation >= 100000) { rank = nobilityrank.baron; } else if (entry.donation >= 300000) { rank = nobilityrank.knight; } } else { if (place < 10) { rank = nobilityrank.king; if (place < (10)) { maxdonation = entry.donation; } } else if (place < 20) { rank = nobilityrank.prince; if (place < 20) { maxdonation1 = entry.donation; } } else { if (place < 9999) { } rank = nobilityrank.duke; if (place < (9999)) { maxdonation2 = entry.donation; } } } var oldrank = entry.rank; entry.rank = rank; if (kernel.gamepool.trygetvalue(entry.entityuid, out client)) { bool updatetheclient = false; if (oldrank != rank) { updatetheclient = true; if (rank == nobilityrank.baron) { kernel.sendworldmessage(new message(" congratulation " + client.player.name + " has the baron in pharaohs-eu ", system.drawing.color.white, message.topleft), program.values); } if (rank == nobilityrank.earl) { kernel.sendworldmessage(new message(" congratulation " + client.player.name + " has the earl in pharaohs-eu ", system.drawing.color.white, message.topleft), program.values); } if (rank == nobilityrank.duke) { kernel.sendworldmessage(new message(" congratulation " + client.player.name + " has the duke in pharaohs-eu ", system.drawing.color.white, message.center), program.values); } if (rank == nobilityrank.prince) { kernel.sendworldmessage(new message(" congratulation " + client.player.name + " has the prince in pharaohs-eu ", system.drawing.color.white, message.center), program.values); } if (rank == nobilityrank.king) { kernel.sendworldmessage(new message(" congratulation " + client.player.name + " has become the new king/queen in pharaohs-eu ", system.drawing.color.white, message.center), program.values); } if (rank == nobilityrank.knight) { kernel.sendworldmessage(new message(" congratulation " + client.player.name + " has become a knight by in pharaohs-eu ", system.drawing.color.white, message.topleft), program.values); } } else { if (previousplace != place) { updatetheclient = true; } } if (updatetheclient || client.player.uid == updateuid) { nobilityinfo update = new nobilityinfo(true); update.type = nobilityinfo.icon; update.dwparam = entry.entityuid; update.updatestring(entry); client.sendscreen(update, true); client.player.nobilityrank = entry.rank; } } sortedboard.add(entry.entityuid, entry); place++; } catch { } } board = sortedboard; lock (boardlist) boardlist = board.values.tolist(); } } public class nobilityinformation { public string name; public uint entityuid; public uint mesh; public ulong donation; public byte gender; public int position; public nobilityrank rank; public bool king; public datetime kingdays; } public enum nobilityrank : Byte { serf = 0, knight = 1, baron = 3, earl = 5, duke = 7, prince = 9, king = 12 } }