Advertisement
Guest User

CrossServer by Throne Developer/Pezzi

a guest
Jan 25th, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 69.71 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using COServer.Network.Sockets;
  6. using COServer.Database;
  7. using System.Net.Sockets;
  8. using System.Net;
  9. using System.Collections.Concurrent;
  10. using COServer.Network;
  11. using COServer.Game;
  12. using COServer.Game.ConquerStructures.Society;
  13. using COServer.Client;
  14. using COServer.Network.GamePackets;
  15. using System.IO;
  16. using COServer.Game.ConquerStructures;
  17. using MYSQLCOMMAND = MySql.Data.MySqlClient.MySqlCommand;
  18. using MYSQLREADER = MySql.Data.MySqlClient.MySqlDataReader;
  19. using MYSQLCONNECTION = MySql.Data.MySqlClient.MySqlConnection;
  20. namespace COServer
  21. {
  22.     public class CrossServer
  23.     {
  24.         public static Dictionary<string, Server> Scores = new Dictionary<string, Server>(20);
  25.         public static SafeDictionary<string, uint> ConnectedServer = new SafeDictionary<string, uint>(20);
  26.         public static SafeDictionary<string, ConcurrentDictionary<uint, IJiangHu>> JiangHuClients = new SafeDictionary<string, ConcurrentDictionary<uint, IJiangHu>>();
  27.         public static SafeDictionary<string, SafeDictionary<uint, NobilityInformation>> Board = new SafeDictionary<string, SafeDictionary<uint, NobilityInformation>>(20);
  28.         public static ConcurrentDictionary<uint, Client.GameState> CrossPool = new ConcurrentDictionary<uint, Client.GameState>();
  29.         public static SafeDictionary<string, SafeDictionary<uint, Game.ConquerStructures.Society.Guild>> Guilds = new SafeDictionary<string, SafeDictionary<uint, Game.ConquerStructures.Society.Guild>>(20);
  30.         public static ServerSocket Socket;
  31.         public static ushort Port;
  32.         public static bool Mode = false;
  33.         public static DateTime StartTime;
  34.         public static MyServerInfo Connection = new MyServerInfo();
  35.         public static bool Loading = false;
  36.         public static Map map;
  37.         public static Server winner;
  38.         private static bool changed = false;
  39.         private static string[] scoreMessages;
  40.         public static Time32 ScoreSendStamp;
  41.         public static void AddScore(uint addScore, string name)
  42.         {
  43.  
  44.             if (Scores.ContainsKey(name))
  45.             {
  46.                 addScore += Scores[name].score;
  47.                 var server = new Server();
  48.                 server.score = addScore;
  49.                 server.name = name;
  50.                 Scores.Remove(server.name);
  51.                 Scores.Add(server.name, server);
  52.             }
  53.             else
  54.             {
  55.                 var server = new Server();
  56.                 server.score = addScore;
  57.                 server.name = name;
  58.                 Scores.Add(server.name, server);
  59.             }
  60.             changed = true;
  61.         }
  62.         static string GetString(byte[] bytes)
  63.         {
  64.             char[] chars = new char[bytes.Length / sizeof(char)];
  65.             System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
  66.             return new string(chars);
  67.         }
  68.         public struct Server
  69.         {
  70.             public string name;
  71.             public uint score;
  72.         }
  73.         public static void SendScores()
  74.         {
  75.             if (scoreMessages == null)
  76.                 scoreMessages = new string[0];
  77.             if (Scores.Count == 0)
  78.                 return;
  79.             if (changed)
  80.                 SortScores(out winner);
  81.  
  82.             for (int c = 0; c < scoreMessages.Length; c++)
  83.             {
  84.                 Message msg = new Message(scoreMessages[c], System.Drawing.Color.Red, c == 0 ? Message.FirstRightCorner : Message.ContinueRightCorner);
  85.                 Kernel.SendWorldMessage(msg, Server.Values, (ushort)map.ID);
  86.             }
  87.         }
  88.         private static void SortScores(out Server winner)
  89.         {
  90.             winner = new Server();
  91.             List<string> ret = new List<string>();
  92.  
  93.             int Place = 0;
  94.             foreach (Server server in Scores.Values.OrderByDescending((p) => p.score))
  95.             {
  96.                 if (Place == 0)
  97.                     winner = server;
  98.                 string str = "No  " + (Place + 1).ToString() + ": " + server.name + "(" + server.score + ")";
  99.                 ret.Add(str);
  100.                 Place++;
  101.                 if (Place == 4)
  102.                     break;
  103.             }
  104.  
  105.             changed = false;
  106.             scoreMessages = ret.ToArray();
  107.         }
  108.         public static void Receive(byte[] buffer, int length, ClientWrapper obj)
  109.         {
  110.             if (Mode == false)
  111.             {
  112.                 Mode = true;
  113.                 StartTime = DateTime.Now;
  114.                 map = Kernel.Maps[1038].MakeDynamicMap();
  115.                 Constants.PKFreeMaps.Add(map.ID);
  116.                 Scores = new Dictionary<string, Server>();
  117.                 COServer.Interfaces.INpc npc = new Network.GamePackets.NpcSpawn();
  118.                 npc.UID = 3;
  119.                 npc.Name = "CrossServer";
  120.                 npc.Mesh = 30;
  121.                 npc.Type = Enums.NpcType.Shop;
  122.                 npc.X = 51;
  123.                 npc.Y = 54;
  124.                 npc.MapID = map.ID;
  125.                 map.AddNpc(npc);
  126.                 foreach (var client in Server.Values)
  127.                     client.MessageBox("CrossServer War start would you like to join",
  128.                         p => { p.Player.Teleport(1002, 423, 291); }, null);
  129.             }
  130.             var Database = new DatabasePacket(0);
  131.             Database.Deserialize(buffer);
  132.             if (Database.ID == 8001)
  133.             {
  134.                 Client.GameState client = new Client.GameState();
  135.                 client.Server = new MyServerInfo();
  136.                 client.Server.CreateConnection(Database);
  137.                 client.Account = new AccountTable(null);
  138.                 client.Account.OriginalPlayerID = Database.Identifier;
  139.                 client.Account = CrossDatabase.LoadAccount(client.Account, client.Server.MySqlConnection);
  140.                 if (!CrossPool.ContainsKey(client.Account.OriginalPlayerID))
  141.                 {
  142.                     CrossPool.Add(client.Account.OriginalPlayerID, client);
  143.                 }
  144.                 else
  145.                 {
  146.                     CrossPool.Clear();
  147.                     CrossPool.Add(client.Account.OriginalPlayerID, client);
  148.                 }
  149.  
  150.             }
  151.             else if (Database.ID == 8000)
  152.             {
  153.                 Connection.CreateConnection(Database);
  154.                 CrossDatabase.NobilityLoad(Connection.MySqlConnection, Connection.ServerName);
  155.                 CrossDatabase.LoadGuild(Connection.MySqlConnection, Connection.ServerName);
  156.             }
  157.             else if (Database.ID == 8002)
  158.             {
  159.                 System.Console.WriteLine("Server {0} load done", Database.ServerName);
  160.                 ConnectedServer.Add(Database.ServerName, Database.Identifier);
  161.  
  162.             }
  163.             else if (Database.ID == 8003)
  164.             {
  165.                 System.Console.WriteLine("CrossServer Has been finshed");
  166.             }
  167.  
  168.         }
  169.         public static void AppendConnect(MsgConnect appendConnect, Client.GameState client)
  170.         {
  171.             bool doLogin = false;
  172.             client.Account = CrossPool[appendConnect.Identifier].Account;
  173.             client.Server = CrossPool[appendConnect.Identifier].Server;
  174.             VariableVault variables;
  175.             CrossDatabase.Loadvariables(client.Account.OriginalPlayerID, out variables, client.Server.MySqlConnection);
  176.             client.Variables = variables;
  177.             if (client["banhours"] == 0)
  178.             {
  179.                 client["banhours"] = -1;
  180.                 client["banreason"] = "Infinite time.";
  181.                 client["banstamp"] = DateTime.Now.AddYears(100);
  182.             }
  183.             if (client.Account.State == Database.AccountTable.AccountState.Banned)
  184.             {
  185.                 if (client["banhours"] != -1)
  186.                 {
  187.                     DateTime banStamp = client["banstamp"];
  188.                     if (DateTime.Now > banStamp.AddDays(((int)client["banhours"]) / 24).AddHours(((int)client["banhours"]) % 24))
  189.                         client.Account.State = Database.AccountTable.AccountState.Player;
  190.                 }
  191.             }
  192.             string Message = "";
  193.             if (client.Account.State == Database.AccountTable.AccountState.Banned)
  194.             {
  195.                 DateTime banStamp = client["banstamp"];
  196.                 banStamp = banStamp.AddHours(client["banhours"]);
  197.                 Message = "You are banned for " + client["banhours"] + " hours [until " + banStamp.ToString("HH:mm MM/dd/yyyy") + "]. Reason: " + client["banreason"];
  198.             }
  199.             else if (!ConnectedServer.ContainsKey(client.Server.ServerName))
  200.             {
  201.                 Message = "Game Server is offline";
  202.             }
  203.             else if (client.Account.State == Database.AccountTable.AccountState.NotActivated)
  204.                 Message = "You cannot login until your account is activated.";
  205.             if (Message == string.Empty)
  206.             {
  207.                 Client.GameState aclient;
  208.                 if (CrossPool.TryGetValue(client.Account.OriginalPlayerID, out aclient))
  209.                 {
  210.                     if (aclient.LoggedIn == true)
  211.                         aclient.Disconnect();
  212.                 }
  213.                 CrossPool.Remove(client.Account.OriginalPlayerID);
  214.                 client.Player = new Player(PlayerFlag.Monster, false);
  215.                 CrossPool.Add(client.Account.OriginalPlayerID, client);
  216.                 doLogin = true;
  217.             }
  218.             else
  219.             {
  220.                 client.Send(new Message(Message, "ALLUSERS", System.Drawing.Color.Orange, COServer.Network.GamePackets.Message.Dialog));
  221.             }
  222.             if (doLogin)
  223.             {
  224.                 client.GetLanguages(appendConnect.Language);
  225.                 client.ReadyToPlay();
  226.                 if (CrossDatabase.LoadPlayer(client, 0, client.Server.MySqlConnection))
  227.                 {
  228.                     if (client.Player.FullyLoaded)
  229.                     {
  230.                         CrossDatabase.LoadItems(client, client.Server.MySqlConnection);
  231.                         CrossDatabase.SubclassLoad(client.Player, client.Server.MySqlConnection);
  232.                         CrossDatabase.LoadProficiencies(client, client.Server.MySqlConnection);
  233.                         CrossDatabase.LoadSpells(client, client.Server.MySqlConnection);
  234.                         client.ClaimableItem = new SafeDictionary<uint, DetainedItem>();
  235.                         client.DeatinedItem = new SafeDictionary<uint, DetainedItem>();
  236.                         client.Partners = new SafeDictionary<uint, Game.ConquerStructures.Society.TradePartner>();
  237.                         client.Enemy = new SafeDictionary<uint, Game.ConquerStructures.Society.Enemy>();
  238.                         client.Friends = new SafeDictionary<uint, Game.ConquerStructures.Society.Friend>();
  239.                         client.Apprentices = new SafeDictionary<uint, Game.ConquerStructures.Society.Apprentice>();
  240.                         CrossDatabase.ChiLoad(client, client.Server.MySqlConnection);
  241.                         CrossDatabase.RewardLoad(client, client.Server.MySqlConnection);
  242.                         CrossDatabase.Way2HeroesLoad(client, client.Server.MySqlConnection);
  243.                         if (client.BackupArmorLook != 0) client.SetNewArmorLook(client.BackupArmorLook);
  244.                         else client.SetNewArmorLook(client.ArmorLook);
  245.                         client.SetNewHeadgearLook(client.HeadgearLook);
  246.                         client.BackupArmorLook = 0;
  247.                         client.SetNewWeaponLook(client.WeaponLook);
  248.                         client.SetNewWeaponLook2(client.WeaponLook2);
  249.  
  250.                         if (client.Player.GuildID != 0)
  251.                         {
  252.                             client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(client.Player.GuildRank);
  253.                         }
  254.                         client.Send(new Message("ANSWER_OK", "ALLUSERS", System.Drawing.Color.Orange, Network.GamePackets.Message.Dialog));
  255.                         Server.World.CrossRegister(client);
  256.                         CrossPool[client.Account.PlayerID] = client;
  257.                         client.Send(new MsgUserInfo(client));
  258.                         string IP = client.IP;
  259.                         client.Account.SetCurrentIP(IP);
  260.                         client.Account.Save();
  261.                         if (!client.LoggedIn)
  262.                             System.Console.WriteLine(client.Player.Name + " from " + client.Server.ServerName + " has logged on! Ip:[" + client.Account.IP + "]", ConsoleColor.Green);
  263.                         client.LoggedIn = true;
  264.                         client.Action = 2;
  265.                         if (client.Server.ServerName.ToLower() == "zirox")
  266.                         {
  267.                             client.Player.ServerID = 1;
  268.                             client.SendScreenSpawn(client.Player, true);
  269.                         }
  270.                         else if (client.Server.ServerName.ToLower() == "scorpoin")
  271.                         {
  272.                             client.Player.ServerID = 2;
  273.                             client.SendScreenSpawn(client.Player, true);
  274.                         }
  275.                         else if (client.Server.ServerName.ToLower() == "mega")
  276.                         {
  277.                             client.Player.ServerID = 4;
  278.                             client.SendScreenSpawn(client.Player, true);
  279.                         }
  280.                     }
  281.                 }
  282.             }
  283.         }
  284.         public static void LoginMessages(GameState client, MYSQLCONNECTION mySqlConnection)
  285.         {
  286.             var coords = map.RandomCoordinates();
  287.             client.Player.Teleport(map.ID, coords.Item1, coords.Item2);
  288.             client.Filtering = true;
  289.             if (!(client.Player.VIPLevel == 6 || client.Account.State >= Database.AccountTable.AccountState.ProjectManager))
  290.                 client.Send(new Message("" + Database.helpdesk.Register + "", System.Drawing.Color.Red, Network.GamePackets.Message.Website));
  291.             if (client.WentToComplete)
  292.                 return;
  293.             for (ushort i = 1415; i <= 1423; i++)
  294.                 if (!client.Spells.ContainsKey(i))
  295.                     client.AddSpell(new Spell(true) { ID = i });
  296.  
  297.             if (!client.TransferedPlayer)
  298.                 Network.PacketHandler.RemoveBadSkills(client);
  299.             DateTime now = DateTime.Now;
  300.             Network.GamePackets.AutoHunt AutoHunting = new Network.GamePackets.AutoHunt(true) { Show = 341 }; AutoHunting.Send(client);
  301.             if (client.WarehousePW != 0)
  302.             {
  303.                 WareHousePassword whp = new WareHousePassword(true);
  304.                 whp.type = WareHousePassword.PasswordCorrect;
  305.                 whp.OldPassword = 0x1;
  306.                 client.Send(whp);
  307.             }
  308.             if (client.Player.Class >= 40 && client.Player.Class <= 45)
  309.             {
  310.                 client.RemoveSpell(new Spell(true) { ID = 1025 });//SuperMan
  311.             }
  312.             if (client.Player.Class >= 60 && client.Player.Class <= 65)
  313.             {
  314.                 client.RemoveSpell(new Spell(true) { ID = 1025 });//Superman
  315.             }
  316.             if (client.Player.Class >= 132 && client.Player.Class <= 135)
  317.             {
  318.                 client.RemoveSpell(new Spell(true) { ID = 10425 });//tranq
  319.             }
  320.             if (client.Player.Class >= 50 && client.Player.Class <= 55)
  321.             {
  322.                 client.RemoveSpell(new Spell(true) { ID = 1025 });//Superman
  323.             }
  324.             if (client.Player.Class >= 10 && client.Player.Class <= 15)
  325.             {
  326.                 client.RemoveSpell(new Spell(true) { ID = 1025 });//Superman
  327.             }
  328.             if (client.Player.Class >= 142 && client.Player.Class <= 145)
  329.             {
  330.                 client.RemoveSpell(new Spell(true) { ID = 11180 });//MortalDrag
  331.             }
  332.             if (client.Player.Class >= 142 && client.Player.Class <= 145)
  333.             {
  334.                 client.RemoveSpell(new Spell(true) { ID = 11190 });//MortalDrag
  335.             }
  336.             if (client.Player.Class >= 142 && client.Player.Class <= 145)
  337.             {
  338.                 client.RemoveSpell(new Spell(true) { ID = 11200 });//MortalDrag
  339.             }
  340.             if (client.Player.Class >= 42 && client.Player.Class <= 45)
  341.             {
  342.                 client.RemoveSpell(new Spell(true) { ID = 10425 });//Tranquality
  343.             }
  344.             client.WentToComplete = true;
  345.             client.Player.SendUpdates = true;
  346.  
  347.             if (client.Player.MyJiang != null)
  348.                 client.Player.MyJiang.OnloginClient(client);
  349.             else if (client.Player.Reborn == 2)
  350.             {
  351.                 Network.GamePackets.JiangHu jiang = new Network.GamePackets.JiangHu();
  352.                 jiang.Texts.Add("0");
  353.                 jiang.CreateArray();
  354.                 jiang.Send(client);
  355.             }
  356.             if (CrossServer.Guilds[client.Server.ServerName] != null)
  357.             {
  358.                 foreach (var Guild in CrossServer.Guilds[client.Server.ServerName].Values)
  359.                 {
  360.                     Guild.SendName(client);
  361.                 }
  362.             }
  363.             ServerTime time = new ServerTime();
  364.             time.Year = (uint)DateTime.Now.Year;
  365.             time.Month = (uint)DateTime.Now.Month;
  366.             time.DayOfYear = (uint)DateTime.Now.DayOfYear;
  367.             time.DayOfMonth = (uint)DateTime.Now.Day;
  368.             time.Hour = (uint)DateTime.Now.Hour;
  369.             time.Minute = (uint)DateTime.Now.Minute;
  370.             time.Second = (uint)DateTime.Now.Second;
  371.             client.Send(time);
  372.             client.Player.DoubleExperienceTime = (ushort)(client.Player.DoubleExperienceTime + (1 - 1));
  373.             client.SuperPotion = (ushort)(client.SuperPotion + (1 - 1));
  374.             client.Player.HeavenBlessing = (ushort)(client.Player.HeavenBlessing + (1 - 1));
  375.             client.OnlineTrainingPoints = (ushort)(client.OnlineTrainingPoints + (1 - 1));
  376.             if (Kernel.QuizShow.Open)
  377.                 Kernel.QuizShow.AddPlayer(client);
  378.  
  379.             client.Player.Update(Network.GamePackets.Update.QuizPoints, client.Player.QuizPoints, true);
  380.             NobilityInfo update = new NobilityInfo(true);
  381.             update.Type = NobilityInfo.Icon;
  382.             update.dwParam = client.NobilityInformation.PlayerUID;
  383.             update.UpdateString(client.NobilityInformation);
  384.             client.Send(update);
  385.             foreach (ConquerItem item in client.Inventory.Objects)
  386.                 item.Send(client);
  387.             foreach (ConquerItem item in client.Equipment.Objects)
  388.             {
  389.                 if (item != null)
  390.                 {
  391.                     if (Database.ConquerItemInformation.BaseInformations.ContainsKey(item.ID))
  392.                     {
  393.                         item.Send(client);
  394.                     }
  395.                 }
  396.             }
  397.             client.Player.Update(0x80, 0x27b1, false);
  398.             client.Player.Update(Update.Merchant, 255, false);
  399.             client.LoadItemStats();
  400.             if (!client.Equipment.Free(5))
  401.             {
  402.                 if (Network.PacketHandler.IsArrow(client.Equipment.TryGetItem(5).ID))
  403.                 {
  404.                     if (client.Equipment.Free(4))
  405.                         client.Equipment.DestroyArrow(5);
  406.                     else
  407.                     {
  408.                         if (client.Equipment.TryGetItem(4).ID / 1000 != 500)
  409.                             client.Equipment.DestroyArrow(5);
  410.                     }
  411.                 }
  412.             }
  413.             client.GemAlgorithm();
  414.             client.CalculateStatBonus();
  415.             client.CalculateHPBonus();
  416.             client.Player.Stamina = 100;
  417.  
  418.  
  419.             DateTime lastLogin = client["lastlogin"];
  420.             string prevLoc = client["lastlocation"];
  421.  
  422.             client.Send(new LastLogin()
  423.             {
  424.                 TotalSeconds = (uint)(lastLogin - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds,
  425.                 DifferentCity = prevLoc == client.Account.IP,
  426.                 DifferentPlace = prevLoc != client.Account.IP
  427.             });
  428.             client["lastlogin"] = DateTime.Now;
  429.             client["lastlocation"] = prevLoc;
  430.  
  431.             string[] wm = File.ReadAllLines(Constants.WelcomeMessages);
  432.             foreach (string line in wm)
  433.             {
  434.                 if (line.Length == 0)
  435.                     continue;
  436.                 if (line[0] == ';')
  437.                     continue;
  438.                 client.Send(new Message(line, System.Drawing.Color.Red, Message.Talk));
  439.             }
  440.  
  441.             #region New Titles
  442.             if (client.Player.Titles.Count > 0)
  443.             {
  444.                 TitlePacket tpacket = new TitlePacket(true);
  445.                 tpacket.Identifier = client.Player.UID;
  446.                 tpacket.Title = client.Player.MyTitle;
  447.                 tpacket.Type = TitlePacket.Types.Switch;
  448.                 tpacket.Count = 1;
  449.                 tpacket.Add((byte)client.Player.MyTitle);
  450.                 client.Player.MyTitle = tpacket.Title;
  451.                 client.Send(tpacket);
  452.             }
  453.             #endregion
  454.             if (Server.Today == DayOfWeek.Saturday || Server.Today == DayOfWeek.Sunday || Server.Today == DayOfWeek.Monday || Server.Today == DayOfWeek.Thursday || Server.Today == DayOfWeek.Tuesday || Server.Today == DayOfWeek.Wednesday || Server.Today == DayOfWeek.Friday)
  455.                 client.Send(new Message("Double experience is on.", System.Drawing.Color.Red, Message.World));
  456.             if (client.Player.VIPLevel > 0)
  457.             {
  458.                 Network.GamePackets.VipStatus vip = new Network.GamePackets.VipStatus();
  459.                 client.Send(vip.ToArray());
  460.             }
  461.             client.Send(new MapStatus() { BaseID = client.Map.BaseID, ID = client.Map.ID, Status = Database.MapsTable.MapInformations[client.Map.ID].Status, Weather = Database.MapsTable.MapInformations[client.Map.ID].Weather });
  462.  
  463.             if (client.Player.Hitpoints == 0)
  464.                 client.Player.Hitpoints = 1;
  465.             client.Player.HandleTiming = true;
  466.             if (client.Player.MentorBattlePower != 0)
  467.                 client.Player.Update(Network.GamePackets.Update.MentorBattlePower, client.Player.MentorBattlePower, false);
  468.             if (client.Guild != null)
  469.             {
  470.                 client.Guild.SendAllyAndEnemy(client);
  471.                 client.Player.GuildBattlePower = client.Guild.GetSharedBattlepower(client.AsMember.Rank);
  472.             }
  473.             if (Game.ConquerStructures.Broadcast.CurrentBroadcast.PlayerID > 2)
  474.                 client.Send(new Network.GamePackets.Message(Game.ConquerStructures.Broadcast.CurrentBroadcast.Message, "ALLUSERS", Game.ConquerStructures.Broadcast.CurrentBroadcast.PlayerName, System.Drawing.Color.Red, Network.GamePackets.Message.BroadcastMessage));
  475.             client.Player.Update(Update.RaceShopPoints, client.RacePoints, false);
  476.             client.Player.Update(Network.GamePackets.Update.LuckyTimeTimer, client.BlessTime, false);
  477.             if (client.Player.HeavenBlessing != 0)
  478.             {
  479.                 client.Player.AddFlag(Network.GamePackets.Update.Flags.HeavenBlessing);
  480.                 client.Player.Update(Network.GamePackets.Update.HeavensBlessing, client.Player.HeavenBlessing, false);
  481.                 client.Player.Update(Network.GamePackets._String.Effect, "bless", true);
  482.                 client.Player.Update(Network.GamePackets.Update.OnlineTraining, client.OnlineTrainingPoints, false);
  483.             }
  484.             client.Equipment.UpdatePlayerPacket();
  485.             client.Send(new ChiPowers(true).Query(client));
  486.             DateTime Now64 = DateTime.Now;
  487.             Network.PacketHandler.ChangeAppearance(client, (AppearanceType)client.Appearance);
  488.             client.Challenge = null;
  489.             if (client.Prizes.Count > 0)
  490.                 client.GetArsenalDonation();
  491.             client.Player.UpdateEffects(true);
  492.             if (client.Player.VIPLevel != 0)
  493.                 client.Player.VipBattlePower = 5;
  494.         }
  495.         public static void ShutDown(GameState client)
  496.         {
  497.             if (client.Socket.Connector == null) return;
  498.             client.Socket.Connector = null;
  499.             using (var conn = client.Server.MySqlConnection)
  500.             {
  501.                 conn.Open();
  502.                 CrossDatabase.SaveVariables(client, conn);
  503.  
  504.             }
  505.             client.RemoveScreenSpawn(client.Player, false);
  506.             if (CrossPool.ContainsKey(client.Player.OriginalUID))
  507.             {
  508.                 CrossPool.Remove(client.Player.UID);
  509.             }
  510.             if (client.Booth != null)
  511.                 client.Booth.Remove();
  512.  
  513.             if (client.Player.MyClones.Count > 0)
  514.             {
  515.                 foreach (var item in client.Player.MyClones.Values)
  516.                 {
  517.                     Data data = new Data(true);
  518.                     data.UID = item.UID;
  519.                     data.ID = Network.GamePackets.Data.RemovePlayer;
  520.                     item.MonsterInfo.SendScreen(data);
  521.                 }
  522.                 client.Player.MyClones.Clear();
  523.             }
  524.             if (client.Pet != null)
  525.                 client.Pet.ClearAll();
  526.             if (client.Team != null)
  527.             {
  528.                 client.Team.Remove(client, true);
  529.             }
  530.             Console.WriteLine(client.Player.Name + " form server " + client.Server.ServerName + " has logged off! Ip:[" + client.Account.IP + "]", ConsoleColor.Green);
  531.         }
  532.     }
  533.     public class MyServerInfo
  534.     {
  535.         private string ConnectionString;
  536.         public void CreateConnection(DatabasePacket Database)
  537.         {
  538.             ConnectionString = "Server=" + Database.Host + ";Port=3306;Database=" + Database.Database + ";Uid=" + Database.Username + ";Password=" + Database.Password + ";Persist Security Info=True;Pooling=true; Min Pool Size = 32;  Max Pool Size = 300;";
  539.             ServerName = Database.ServerName;
  540.         }
  541.  
  542.         public MYSQLCONNECTION MySqlConnection
  543.         {
  544.             get
  545.             {
  546.                 MYSQLCONNECTION conn = new MYSQLCONNECTION();
  547.                 conn.ConnectionString = ConnectionString;
  548.                 return conn;
  549.             }
  550.         }
  551.         public string ServerName = "";
  552.     }
  553.     public class CrossDatabase
  554.     {
  555.         public static void SaveVariables(Client.GameState GameState, MYSQLCONNECTION conn)
  556.         {
  557.  
  558.             var vars = GameState.Variables;
  559.             if (vars == null) return;
  560.             if (!vars.Changed) return;
  561.             vars.Changed = false;
  562.             string SQL = "UPDATE `variablevault` set data=@Data where Playerid=@PlayerID;";
  563.             byte[] rawData = vars.Serialize();
  564.  
  565.             using (var cmd = new MySql.Data.MySqlClient.MySqlCommand(SQL, conn))
  566.             {
  567.                 cmd.Parameters.AddWithValue("@PlayerID", GameState.Player.OriginalUID);
  568.                 cmd.Parameters.AddWithValue("@Data", rawData);
  569.                 cmd.ExecuteNonQuery();
  570.             }
  571.         }
  572.         public static void NobilityLoad(MYSQLCONNECTION Connection, string name)
  573.         {
  574.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("nobility"))
  575.             using (var reader = cmd.CreateReader(Connection))
  576.             {
  577.                 while (reader.Read())
  578.                 {
  579.                     NobilityInformation nobilityinfo = new NobilityInformation();
  580.                     nobilityinfo.PlayerUID = reader.ReadUInt32("PlayerUID");
  581.                     nobilityinfo.Name = reader.ReadString("PlayerName");
  582.                     nobilityinfo.Donation = reader.ReadUInt64("Donation");
  583.                     nobilityinfo.Gender = reader.ReadByte("Gender");
  584.                     nobilityinfo.Mesh = reader.ReadUInt32("Mesh");
  585.                     if (CrossServer.Board.ContainsKey(name))
  586.                     {
  587.                         CrossServer.Board[name].Add(nobilityinfo.PlayerUID, nobilityinfo);
  588.                     }
  589.                     else
  590.                     {
  591.                         CrossServer.Board.Add(name, new SafeDictionary<uint, NobilityInformation>(10000));
  592.                         CrossServer.Board[name].Add(nobilityinfo.PlayerUID, nobilityinfo);
  593.                     }
  594.                 }
  595.             }
  596.             Console.WriteLine("Server " + name + " Nobility information loaded.");
  597.         }
  598.         public static void LoadGuild(MYSQLCONNECTION Connection, string name)
  599.         {
  600.             Dictionary<uint, SafeDictionary<uint, Game.ConquerStructures.Society.Guild.Member>> dict = new Dictionary<uint, SafeDictionary<uint, Game.ConquerStructures.Society.Guild.Member>>();
  601.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("entities").Where("guildid", 0, true))
  602.             using (var reader = new MySqlReader(cmd, Connection))
  603.             {
  604.                 while (reader.Read())
  605.                 {
  606.                     Game.ConquerStructures.Society.Guild.Member member = new Game.ConquerStructures.Society.Guild.Member(reader.ReadUInt16("guildid"));
  607.                     member.ID = reader.ReadUInt32("uid");
  608.                     member.Name = reader.ReadString("name");
  609.                     member.Level = reader.ReadByte("level");
  610.                     member.Spouse = reader.ReadString("Spouse");
  611.                     if (CrossServer.Board[name] != null)
  612.                     {
  613.                         if (CrossServer.Board[name].ContainsKey(member.ID))
  614.                         {
  615.                             member.NobilityRank = CrossServer.Board[name][member.ID].Rank;
  616.                             member.Gender = CrossServer.Board[name][member.ID].Gender;
  617.                         }
  618.                     }
  619.                     member.Rank = (Game.Enums.GuildMemberRank)reader.ReadUInt16("guildrank");
  620.                     member.SilverDonation = reader.ReadUInt64("GuildSilverDonation");
  621.                     member.ConquerPointDonation = reader.ReadUInt64("GuildConquerPointDonation");
  622.                     member.ArsenalDonation = reader.ReadUInt32("GuildArsenalDonation");
  623.                     member.Class = reader.ReadByte("Class");
  624.                     member.VirtutePointes = reader.ReadUInt32("VirtuePoints");
  625.  
  626.                     member.Lilies = reader.ReadUInt32("GuildLilies");
  627.                     member.Rouses = reader.ReadUInt32("GuildRouses");
  628.                     member.Orchids = reader.ReadUInt32("GuildOrchids");
  629.                     member.Tulips = reader.ReadUInt32("GuildTulips");
  630.                     member.PkDonation = reader.ReadUInt32("GuildPkDonation");
  631.                     member.LastLogin = reader.ReadUInt64("GuildLastlod");
  632.  
  633.                     member.Exploits = reader.ReadUInt32("Exploits");
  634.                     member.CTFCpsReward = reader.ReadUInt32("CTFCpsReward");
  635.                     member.CTFSilverReward = reader.ReadUInt32("CTFSilverReward");
  636.  
  637.                     member.Mesh = uint.Parse(reader.ReadUInt16("Face").ToString() + reader.ReadUInt16("Body").ToString());
  638.                     if (!dict.ContainsKey(member.GuildID)) dict.Add(member.GuildID, new SafeDictionary<uint, Game.ConquerStructures.Society.Guild.Member>());
  639.                     dict[member.GuildID].Add(member.ID, member);
  640.                 }
  641.             }
  642.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("guilds"))
  643.             using (var reader = new MySqlReader(cmd, Connection))
  644.             {
  645.                 while (reader.Read())
  646.                 {
  647.                     Game.ConquerStructures.Society.Guild guild = new Game.ConquerStructures.Society.Guild(reader.ReadString("LeaderName"));
  648.                     guild.ID = reader.ReadUInt32("Id");
  649.                     guild.Name = reader.ReadString("Name");
  650.                     guild.Wins = reader.ReadUInt32("Wins");
  651.                     guild.Losts = reader.ReadUInt32("Losts");
  652.                     guild.Bulletin = reader.ReadString("Bulletin");
  653.                     guild.SilverFund = reader.ReadUInt64("SilverFund");
  654.                     guild.CTFPoints = reader.ReadUInt32("CTFPoints");
  655.                     guild.CTFReward = reader.ReadUInt32("CTFReward");
  656.                     guild.ConquerPointFund = reader.ReadUInt32("ConquerPointFund");
  657.                     guild.LevelRequirement = reader.ReadUInt32("LevelRequirement");
  658.                     guild.RebornRequirement = reader.ReadUInt32("RebornRequirement");
  659.                     guild.ClassRequirement = reader.ReadUInt32("ClassRequirement");
  660.                     guild.AdvertiseRecruit.Load(reader.ReadString("Advertise"));
  661.                     guild.GuildEnrole = reader.ReadUInt32("GuildEnrole");
  662.                     guild.CreateTime(guild.GuildEnrole);
  663.                     guild.BuletinEnrole = reader.ReadUInt32("BuletinEnrole");
  664.                     guild.CTFdonationCPs = reader.ReadUInt32("CTFdonationCPs");
  665.                     guild.CTFdonationSilver = reader.ReadUInt32("CTFdonationSilver");
  666.                     guild.CTFdonationSilverold = reader.ReadUInt32("CTFdonationSilverold");
  667.                     guild.CTFdonationCPsold = reader.ReadUInt32("CTFdonationCPsold");
  668.  
  669.                     guild.CreateTime(guild.BuletinEnrole);
  670.                     if (dict.ContainsKey(guild.ID))
  671.                     {
  672.                         guild.Members = dict[guild.ID];
  673.                         guild.MemberCount = (uint)guild.Members.Count;
  674.                     }
  675.                     else
  676.                         guild.Members = new SafeDictionary<uint, Game.ConquerStructures.Society.Guild.Member>();
  677.                     if (CrossServer.Guilds.ContainsKey(name))
  678.                     {
  679.                         CrossServer.Guilds[name].Add(guild.ID, guild);
  680.                     }
  681.                     else
  682.                     {
  683.                         CrossServer.Guilds.Add(name, new SafeDictionary<uint, Game.ConquerStructures.Society.Guild>(100000));
  684.                         CrossServer.Guilds[name].Add(guild.ID, guild);
  685.                     }
  686.                     foreach (var member in guild.Members.Values)
  687.                     {
  688.                         if (member.Rank == Game.Enums.GuildMemberRank.GuildLeader)
  689.                             guild.Leader = member;
  690.  
  691.                         guild.RanksCounts[(ushort)member.Rank]++;
  692.                     }
  693.                     LoadArsenal(guild, Connection);
  694.                 }
  695.             }
  696.             Console.WriteLine("Server " + name + " guild information loaded.");
  697.         }
  698.         public static void LoadArsenal(Guild guild, MYSQLCONNECTION Connection)
  699.         {
  700.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("guildarsenal").Where("ID", guild.ID))
  701.             using (var rdr = new MySqlReader(cmd, Connection))
  702.             {
  703.                 if (rdr.Read())
  704.                 {
  705.                     var array = rdr.ReadBlob("Data");
  706.                     if (array == null) return;
  707.                     MemoryStream stream = new MemoryStream(rdr.ReadBlob("Data"));
  708.                     BinaryReader reader = new BinaryReader(stream);
  709.                     for (int i = 0; i < 8; i++)
  710.                         guild.Arsenals[i].Load(reader);
  711.                     guild.ArsenalBPChanged = true;
  712.                     guild.GetMaxSharedBattlepower();
  713.                 }
  714.             }
  715.         }
  716.         public static void Way2HeroesLoad(Client.GameState client, MYSQLCONNECTION Connection)
  717.         {
  718.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT))
  719.             {
  720.                 cmd.Select("rewards").Where("UID", client.Player.OriginalUID);
  721.                 using (MySqlReader rdr = new MySqlReader(cmd, Connection))
  722.                 {
  723.                     if (rdr.Read())
  724.                     {
  725.                         byte[] data = rdr.ReadBlob("Rewards");
  726.                         if (data.Length > 0)
  727.                         {
  728.                             using (var stream = new MemoryStream(data))
  729.                             using (var reader = new BinaryReader(stream))
  730.                             {
  731.                                 int count = reader.ReadByte();
  732.                                 for (uint x = 0; x < count; x++)
  733.                                 {
  734.                                     MaTrix.Reward.RewardInfo item = new MaTrix.Reward.RewardInfo();
  735.                                     item = item.ReadItem(reader);
  736.                                     client.Rewards.Add(item.ID, item);
  737.                                 }
  738.                             }
  739.                         }
  740.                     }
  741.                     else
  742.                     {
  743.                         using (var command = new MySqlCommand(MySqlCommandType.INSERT))
  744.                         {
  745.                             command.Insert("rewards").Insert("UID", client.Player.OriginalUID).Insert("Name", client.Player.Name);
  746.                             command.Execute();
  747.                         }
  748.                     }
  749.                 }
  750.             }
  751.             foreach (var re in MaTrix.Reward.Rewards.Keys)
  752.             {
  753.                 if (!client.Rewards.ContainsKey(re))
  754.                 {
  755.                     MaTrix.Reward.RewardInfo info = new MaTrix.Reward.RewardInfo()
  756.                     {
  757.                         ID = re
  758.                     };
  759.                     client.Rewards.Add(info.ID, info);
  760.                 }
  761.             }
  762.         }
  763.         public static void RewardLoad(Client.GameState client, MYSQLCONNECTION Connection)
  764.         {
  765.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT))
  766.             {
  767.                 cmd.Select("Way2Heroes").Where("UID", client.Player.OriginalUID);
  768.                 using (MySqlReader rdr = new MySqlReader(cmd, Connection))
  769.                 {
  770.                     if (rdr.Read())
  771.                     {
  772.                         byte[] data = rdr.ReadBlob("Way2Heroes");
  773.                         if (data.Length > 0)
  774.                         {
  775.                             using (var stream = new MemoryStream(data))
  776.                             using (var reader = new BinaryReader(stream))
  777.                             {
  778.                                 int count = reader.ReadByte();
  779.                                 for (uint x = 0; x < count; x++)
  780.                                 {
  781.                                     MaTrix.Way2Heroes.StageInfo item = new MaTrix.Way2Heroes.StageInfo();
  782.                                     item = item.ReadItem(reader);
  783.                                     client.Way2Heroes.Add(item.UID, item);
  784.                                 }
  785.                             }
  786.                         }
  787.                     }
  788.                     else
  789.                     {
  790.                         using (var command = new MySqlCommand(MySqlCommandType.INSERT))
  791.                         {
  792.                             command.Insert("Way2Heroes").Insert("UID", client.Player.OriginalUID).Insert("Name", client.Player.Name);
  793.                             command.Execute();
  794.                         }
  795.                     }
  796.                 }
  797.             }
  798.         }
  799.         public static void ChiLoad(Client.GameState client, MYSQLCONNECTION Connection)
  800.         {
  801.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT))
  802.             {
  803.                 cmd.Select("chi").Where("uid", client.Player.OriginalUID);
  804.                 using (MySqlReader rdr = new MySqlReader(cmd, Connection))
  805.                 {
  806.                     if (rdr.Read())
  807.                     {
  808.                         client.ChiPoints = rdr.ReadUInt32("points");
  809.                         byte[] data = rdr.ReadBlob("chipowers");
  810.                         if (data.Length > 0)
  811.                         {
  812.                             using (var stream = new MemoryStream(data))
  813.                             using (var reader = new BinaryReader(stream))
  814.                             {
  815.                                 int count = reader.ReadByte();
  816.                                 for (int i = 0; i < count; i++)
  817.                                 {
  818.                                     var power = new Game.ConquerStructures.ChiPowerStructure().Deserialize(reader);
  819.                                     if (power.Power == (Enums.ChiPowerType)(i + 1))
  820.                                         client.ChiPowers.Add(power);
  821.                                 }
  822.                             }
  823.                         }
  824.                         data = rdr.ReadBlob("rchipowers");
  825.                         if (data.Length > 0)
  826.                         {
  827.                             using (var stream = new MemoryStream(data))
  828.                             using (var reader = new BinaryReader(stream))
  829.                             {
  830.                                 int count = reader.ReadByte();
  831.                                 for (int i = 0; i < count; i++)
  832.                                 {
  833.                                     var power = new Game.ConquerStructures.ChiPowerStructure().Deserialize(reader, true);
  834.                                     //  if (power.Power == (Enums.ChiPowerType)(i + 1))
  835.                                     client.Retretead_ChiPowers[i] = power;
  836.                                 }
  837.                             }
  838.                         }
  839.                     }
  840.                     else
  841.                     {
  842.                         using (var command = new MySqlCommand(MySqlCommandType.INSERT))
  843.                         {
  844.                             command.Insert("chi").Insert("uid", client.Player.OriginalUID).Insert("name", client.Player.Name);
  845.                             command.Execute();
  846.                         }
  847.                     }
  848.                     client.ChiData = new ChiTable.ChiData() { UID = client.Player.UID, Name = client.Player.Name, Powers = client.ChiPowers };
  849.                 }
  850.             }
  851.         }
  852.         public static void LoadSpells(GameState client, MySql.Data.MySqlClient.MySqlConnection Connection)
  853.         {
  854.             if (client.Fake) return;
  855.             if (client.TransferedPlayer) return;
  856.             if (client.Player != null)
  857.             {
  858.                 client.Spells = new SafeDictionary<ushort, Interfaces.ISkill>(100);
  859.                 MySqlReader reader = new MySqlReader(new COServer.Database.MySqlCommand(MySqlCommandType.SELECT).Select("cq_skills").Where("PlayerID", (long)client.Player.OriginalUID), Connection);
  860.                 while (reader.Read())
  861.                 {
  862.                     Interfaces.ISkill skill = new Spell(true)
  863.                     {
  864.                         ID = reader.ReadUInt16("ID"),
  865.                         Level = reader.ReadByte("Level"),
  866.                         PreviousLevel = reader.ReadByte("PreviousLevel"),
  867.                         Experience = reader.ReadUInt32("Experience"),
  868.                         Souls = (Spell.Soul_Level)reader.ReadByte("LevelJH"),
  869.                         LevelJH2 = reader.ReadByte("LevelJH2"),
  870.                         Available = true
  871.                     };
  872.                     if (!client.Spells.ContainsKey(skill.ID))
  873.                     {
  874.                         client.Spells.Add(skill.ID, skill);
  875.                     }
  876.                 }
  877.             }
  878.         }
  879.         public static void LoadProficiencies(GameState client, MySql.Data.MySqlClient.MySqlConnection Connection)
  880.         {
  881.             if (client.Fake) return;
  882.             if (client.TransferedPlayer) return;
  883.             if (client.Player != null)
  884.             {
  885.                 client.Proficiencies = new SafeDictionary<ushort, Interfaces.IProf>(100);
  886.                 MySqlReader reader = new MySqlReader(new COServer.Database.MySqlCommand(MySqlCommandType.SELECT).Select("cq_profs").Where("PlayerID", (long)client.Player.OriginalUID), Connection);
  887.                 while (reader.Read())
  888.                 {
  889.                     Interfaces.IProf prof = new Proficiency(true)
  890.                     {
  891.                         ID = reader.ReadUInt16("ID"),
  892.                         Level = reader.ReadByte("Level"),
  893.                         PreviousLevel = reader.ReadByte("PreviousLevel"),
  894.                         Experience = reader.ReadUInt32("Experience"),
  895.                         Available = true
  896.                     };
  897.                     if (!client.Proficiencies.ContainsKey(prof.ID))
  898.                     {
  899.                         client.Proficiencies.Add(prof.ID, prof);
  900.                     }
  901.                 }
  902.             }
  903.         }
  904.         public static void SubclassLoad(Player Player, MySql.Data.MySqlClient.MySqlConnection Connection)
  905.         {
  906.             using (MySqlCommand mySqlCommand = new MySqlCommand(MySqlCommandType.SELECT).Select("subclasses").Where("id", (long)((ulong)Player.OriginalUID)))
  907.             {
  908.                 using (MySqlReader mySqlReader = mySqlCommand.CreateReader(Connection))
  909.                 {
  910.                     while (mySqlReader.Read())
  911.                     {
  912.                         Game.SubClass subClass = new Game.SubClass();
  913.                         subClass.ID = mySqlReader.ReadByte("Uid");
  914.                         subClass.Level = mySqlReader.ReadByte("Level");
  915.                         subClass.Phase = mySqlReader.ReadByte("Phase");
  916.                         Player.SubClasses.Classes.Add(subClass.ID, subClass);
  917.                         // Player.SubClasses.SendLearn((ID)subClass.ID, subClass.Level, Player.Owner);
  918.                     }
  919.                 }
  920.             }
  921.         }
  922.         public static void LoadItems(Client.GameState client, MySql.Data.MySqlClient.MySqlConnection Connection)
  923.         {
  924.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("items").Where("PlayerID", client.Player.OriginalUID))
  925.             using (var reader = new MySqlReader(cmd, Connection))//htsht8al kda el 3eeb kont nasy dh bs :D b2olk m3ak program item type?el byfok itemtype 3lshan a3ml file el client?
  926.             {
  927.                 while (reader.Read())
  928.                 {
  929.                     var item = deserialzeItem(reader);
  930.                     if (!ConquerItemInformation.BaseInformations.ContainsKey(item.ID))
  931.                         continue;
  932.                     HandleInscribing(item, client);
  933.                     ItemAddingTable.GetAddingsForItem(item);
  934.                     #region WareHouse
  935.                     if (item.Warehouse == 0)
  936.                     {
  937.                         switch (item.Position)
  938.                         {
  939.                             case 0: client.Inventory.Add(item, Game.Enums.ItemUse.None); break;
  940.                             default:
  941.                                 if (item.Position > 29) continue;
  942.                                 if (client.Equipment.Free((byte)item.Position))
  943.                                     client.Equipment.Add(item, Game.Enums.ItemUse.None);
  944.                                 else
  945.                                 {
  946.                                     if (client.Inventory.Count < 40)
  947.                                     {
  948.                                         item.Position = 0;
  949.                                         client.Inventory.Add(item, Game.Enums.ItemUse.None);
  950.                                         if (client.Warehouses[COServer.Game.ConquerStructures.Warehouse.WarehouseID.Market].Count < 20)
  951.                                             client.Warehouses[COServer.Game.ConquerStructures.Warehouse.WarehouseID.Market].Add(item);
  952.                                     }
  953.                                 }
  954.                                 break;
  955.                         }
  956.                     }
  957.                     else
  958.                     {
  959.                         if (item != null)
  960.                         {
  961.                             COServer.Game.ConquerStructures.Warehouse.WarehouseID whID = (Game.ConquerStructures.Warehouse.WarehouseID)item.Warehouse;
  962.                             if (client.Warehouses.ContainsKey(whID))
  963.                             {
  964.                                 client.Warehouses[whID].Add(item);
  965.                             }
  966.                             else
  967.                             {
  968.                                 using (var cmdx = new MySqlCommand(MySqlCommandType.SELECT).Select("items").Where("Uid", (uint)item.Warehouse))
  969.                                 using (var readerx = new MySqlReader(cmdx))
  970.                                     if (readerx.Read())
  971.                                     {
  972.                                         client.Warehouses.Add((COServer.Game.ConquerStructures.Warehouse.WarehouseID)(uint)item.Warehouse, new COServer.Game.ConquerStructures.Warehouse(client, (COServer.Game.ConquerStructures.Warehouse.WarehouseID)(uint)item.Warehouse));
  973.                                         client.Warehouses[(COServer.Game.ConquerStructures.Warehouse.WarehouseID)(uint)whID].Add(item);
  974.                                     }
  975.                             }
  976.                         }
  977.                     }
  978.                     #endregion WareHouse
  979.                     if (item.ID == 720828)
  980.                     {
  981.                         string str = reader.ReadString("agate");
  982.                         uint key = 0;
  983.                         string[] strArray = str.Split(new char[] { '#' });
  984.                         foreach (string str2 in strArray)
  985.                         {
  986.                             if (str2.Length > 6)
  987.                             {
  988.                                 item.Agate_map.Add(key, str2);
  989.                                 key++;
  990.                             }
  991.                         }
  992.                     }
  993.                 }
  994.             }
  995.         }
  996.         public static ConquerItem deserialzeItem(MySqlReader reader)
  997.         {
  998.             ConquerItem item = new Network.GamePackets.ConquerItem(true);
  999.             item.ID = reader.ReadUInt32("Id");
  1000.             item.UID = ConquerItem.ItemUID.Next;
  1001.             item.OriginalUID = reader.ReadUInt32("Uid");
  1002.             item.Durability = reader.ReadUInt16("Durability");
  1003.             item.MaximDurability = reader.ReadUInt16("MaximDurability");
  1004.             item.Position = reader.ReadUInt16("Position");
  1005.             item.Agate = reader.ReadString("Agate");
  1006.             item.SocketProgress = reader.ReadUInt32("SocketProgress");
  1007.             item.PlusProgress = reader.ReadUInt32("PlusProgress");
  1008.             item.SocketOne = (Game.Enums.Gem)reader.ReadUInt16("SocketOne");
  1009.             item.SocketTwo = (Game.Enums.Gem)reader.ReadUInt16("SocketTwo");
  1010.             item.Effect = (Game.Enums.ItemEffect)reader.ReadUInt16("Effect");
  1011.             item.Mode = Game.Enums.ItemMode.Default;
  1012.             item.Plus = reader.ReadByte("Plus");
  1013.             item.Bless = reader.ReadByte("Bless");
  1014.             item.Bound = reader.ReadBoolean("Bound");
  1015.             item.Enchant = reader.ReadByte("Enchant");
  1016.             item.Lock = reader.ReadByte("Locked");
  1017.             item.UnlockEnd = DateTime.FromBinary(reader.ReadInt64("UnlockEnd"));
  1018.             item.Suspicious = reader.ReadBoolean("Suspicious");
  1019.             item.SuspiciousStart = DateTime.FromBinary(reader.ReadInt64("SuspiciousStart"));
  1020.             item.Color = (Game.Enums.Color)reader.ReadUInt32("Color");
  1021.             item.Warehouse = reader.ReadUInt32("Warehouse");
  1022.             item.StackSize = reader.ReadUInt16("StackSize");
  1023.             item.RefineItem = reader.ReadUInt32("RefineryItem");
  1024.             Int64 rTime = reader.ReadInt64("RefineryTime");
  1025.  
  1026.             if (item.ID == 300000)
  1027.             {
  1028.                 uint NextSteedColor = reader.ReadUInt32("NextSteedColor");
  1029.                 item.NextGreen = (byte)(NextSteedColor & 0xFF);
  1030.                 item.NextBlue = (byte)((NextSteedColor >> 8) & 0xFF);
  1031.                 item.NextRed = (byte)((NextSteedColor >> 16) & 0xFF);
  1032.             }
  1033.             if (item.RefineItem > 0 && rTime != 0)
  1034.             {
  1035.                 item.RefineryTime = DateTime.FromBinary(rTime);
  1036.                 if (DateTime.Now > item.RefineryTime)
  1037.                 {
  1038.                     item.RefineryTime = new DateTime(0);
  1039.                     item.RefineItem = 0;
  1040.                 }
  1041.             }
  1042.             if (item.Lock == 2)
  1043.                 if (DateTime.Now >= item.UnlockEnd)
  1044.                     item.Lock = 0;
  1045.  
  1046.             item.DayStamp = DateTime.FromBinary(reader.ReadInt64("DayStamp"));
  1047.             item.Days = reader.ReadByte("Days");
  1048.             return item;
  1049.         }
  1050.         public static void GetAddingsForItem(ConquerItem item, MySql.Data.MySqlClient.MySqlConnection Connection)
  1051.         {
  1052.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("itemadding").Where("UID", item.OriginalUID))
  1053.             using (var reader = cmd.CreateReader(Connection))
  1054.             {
  1055.                 while (reader.Read())
  1056.                 {
  1057.                     if (reader.ReadInt32("Addingtype") == 0)
  1058.                     {
  1059.                         ItemAdding.Purification_ purification = new ItemAdding.Purification_();
  1060.                         purification.ItemUID = item.UID;
  1061.                         purification.Available = true;
  1062.                         purification.PurificationItemID = reader.ReadUInt32("Addingid");
  1063.                         purification.PurificationDuration = reader.ReadUInt32("Duration");
  1064.                         purification.PurificationLevel = reader.ReadUInt32("Addinglevel");
  1065.                         purification.AddedOn = DateTime.FromBinary(reader.ReadInt64("Addedon"));
  1066.                         item.Purification = purification;
  1067.                     }
  1068.                     else
  1069.                     {
  1070.                         ItemAdding.Refinery_ extraeffect = new ItemAdding.Refinery_();
  1071.                         extraeffect.ItemUID = item.UID;
  1072.                         extraeffect.Available = true;
  1073.                         extraeffect.EffectID = reader.ReadUInt32("Addingid");
  1074.                         extraeffect.EffectLevel = reader.ReadUInt32("Addinglevel");
  1075.                         extraeffect.EffectPercent = reader.ReadUInt32("Addingpercent");
  1076.                         extraeffect.EffectDuration = reader.ReadUInt32("Duration");
  1077.                         extraeffect.AddedOn = DateTime.FromBinary(reader.ReadInt64("Addedon"));
  1078.                         item.ExtraEffect = extraeffect;
  1079.                     }
  1080.                 }
  1081.             }
  1082.         }
  1083.         public static void HandleInscribing(ConquerItem item, Client.GameState client, bool detained = false)
  1084.         {
  1085.             if (client.Player.GuildID != 0)
  1086.             {
  1087.                 if (client.Guild != null)
  1088.                 {
  1089.                     int itemPosition = Network.PacketHandler.ArsenalPosition(item.ID);
  1090.                     if (itemPosition != -1)
  1091.                     {
  1092.                         var arsenal = client.Guild.Arsenals[itemPosition];
  1093.                         if (arsenal.Unlocked)
  1094.                         {
  1095.                             if (arsenal.ItemDictionary.ContainsKey(item.OriginalUID))
  1096.                             {
  1097.                                 var arsenalItem = arsenal.ItemDictionary[item.OriginalUID];
  1098.                                 arsenalItem.Update(item, client);
  1099.                                 item.Inscribed = true;
  1100.                                 client.ArsenalDonations[itemPosition] += arsenalItem.DonationWorth;
  1101.                             }
  1102.                         }
  1103.                     }
  1104.                 }
  1105.             }
  1106.         }
  1107.         public static bool LoadPlayer(Client.GameState client, uint uid = 0, MySql.Data.MySqlClient.MySqlConnection Connection = null)
  1108.         {
  1109.             if (uid == 0)
  1110.                 uid = client.Account.OriginalPlayerID;
  1111.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("entities").Where("UID", uid))
  1112.             using (var reader = new MySqlReader(cmd, Connection))
  1113.             {
  1114.                 if (reader.Read())
  1115.                 {
  1116.                     client.WarehousePW = reader.ReadUInt32("WarehousePW");
  1117.                     client.Player = new Game.Player(Game.PlayerFlag.Player, false);
  1118.                     client.Player.Name = reader.ReadString("Name");
  1119.                     client.Player.NobalityDonation = reader.ReadUInt64("Donation");
  1120.                     if (client.Player.Name.Length > 15)
  1121.                         client.Player.Name = client.Player.Name.Substring(0, 15);
  1122.                     client.HeadgearClaim = reader.ReadBoolean("HeadgearClaim");
  1123.                     client.Player.Spouse = reader.ReadString("Spouse");
  1124.                     client.Player.Owner = client;
  1125.                     client.Voted = reader.ReadBoolean("VotePoint");
  1126.                     client.Player.MonstersPoints = reader.ReadUInt32("MonstersPoints");
  1127.  
  1128.                     client.Player.AddFlower = reader.ReadUInt32("Flower");
  1129.                     client.MoneySave = reader.ReadUInt32("MoneySave");
  1130.                     client.Player.Experience = reader.ReadUInt64("Experience");
  1131.                     client.Player.Money = reader.ReadUInt32("Money");
  1132.                     client.Player.ConquerPoints = reader.ReadUInt32("ConquerPoints");
  1133.                     client.Player.TreasuerPoints = reader.ReadUInt32("TreasuerPoints");
  1134.                     client.Player.OriginalUID = reader.ReadUInt32("UID");
  1135.                     client.Player.UID = client.Account.PlayerID;
  1136.                     client.Player.MyAchievement = new Game.Achievement(client.Player);
  1137.                     client.Player.MyAchievement.Load(reader.ReadString("Achievement"));
  1138.                     client.Player.Hitpoints = reader.ReadUInt32("Hitpoints");
  1139.                     client.Player.QuizPoints = reader.ReadUInt32("QuizPoints");
  1140.                     client.Player.Body = reader.ReadUInt16("Body");
  1141.                     client.Player.Face = reader.ReadUInt16("Face");
  1142.                     client.Player.Strength = reader.ReadUInt16("Strength");
  1143.                     client.Player.Titles = new ConcurrentDictionary<TitlePacket.Titles, DateTime>();
  1144.                     client.Player.MyTitle = (TitlePacket.Titles)reader.ReadUInt32("My_Title");
  1145.                     client.Player.Agility = reader.ReadUInt16("Agility");
  1146.                     client.Player.Spirit = reader.ReadUInt16("Spirit");
  1147.                     client.Player.Vitality = reader.ReadUInt16("Vitality");
  1148.                     client.Player.Atributes = reader.ReadUInt16("Atributes");
  1149.                     PlayerTable.SetFlowers(client);
  1150.                     client.ElitePKStats = new ElitePK.FighterStats(client.Player.UID, client.Player.Name, client.Player.Mesh);
  1151.                     client.Player.SubClass = reader.ReadByte("SubClass");
  1152.                     client.Player.SubClassLevel = reader.ReadByte("SubClassLevel");
  1153.                     client.Player.SubClasses.Active = client.Player.SubClass;
  1154.                     client.Player.SubClassesActive = client.Player.SubClass;
  1155.                     client.Player.SubClasses.StudyPoints = reader.ReadUInt16("StudyPoints");
  1156.                     client.VirtuePoints = (uint)reader.ReadUInt32("VirtuePoints");
  1157.                     client.Player.Mana = reader.ReadUInt16("Mana");
  1158.                     client.Player.HairStyle = reader.ReadUInt16("HairStyle");
  1159.                     client.Player.OnlinePoints = reader.ReadUInt32("OnlinePoints");
  1160.                     client.Player.OnlinePointStamp = Time32.Now;
  1161.                     client.Player.MapID = reader.ReadUInt16("MapID");
  1162.                     client.VendingDisguise = reader.ReadUInt16("VendingDisguise");
  1163.                     client.SpiritBeadQ.CanAccept = !Convert.ToBoolean(reader.ReadUInt32("CanAcceptSpiritBead"));
  1164.                     client.SpiritBeadQ.Bead = (uint)reader.ReadUInt32("SpiritQuestBead");
  1165.                     client.SpiritBeadQ.CollectedSpirits = (uint)reader.ReadUInt32("CollectedSpirits");
  1166.                     client.Player.CountryID = (Game.Enums.CountryID)reader.ReadUInt32("CountryID");
  1167.                     if (client.VendingDisguise == 0)
  1168.                         client.VendingDisguise = 223;
  1169.                     client.Player.X = reader.ReadUInt16("X");
  1170.                     client.Player.Y = reader.ReadUInt16("Y");
  1171.                     client.NecklaceClaim = reader.ReadBoolean("NecklaceClaim");
  1172.                     client.ArmorClaim = reader.ReadBoolean("ArmorClaim");
  1173.                     client.WeaponClaim = reader.ReadBoolean("WeaponClaim");
  1174.                     client.RingClaim = reader.ReadBoolean("RingClaim");
  1175.                     client.BootsClaim = reader.ReadBoolean("BootsClaim");
  1176.                     client.FanClaim = reader.ReadBoolean("FanClaim");
  1177.                     client.TowerClaim = reader.ReadBoolean("TowerClaim");
  1178.                     client.HeadgearClaim = reader.ReadBoolean("HeadgearClaim");
  1179.                     client.InLottery = reader.ReadBoolean("InLottery");
  1180.                     client.LotteryEntries = reader.ReadByte("LotteryEntries");
  1181.                     client.LastLotteryEntry = DateTime.FromBinary(reader.ReadInt64("LastLotteryEntry"));
  1182.                     client.Player.PreviousMapID = reader.ReadUInt16("PreviousMapID");
  1183.                     client.Player.PKPoints = reader.ReadUInt16("PKPoints");
  1184.                     client.Player.Class = reader.ReadByte("Class");
  1185.                     client.Player.Reborn = reader.ReadByte("Reborn");
  1186.                     client.Player.Level = reader.ReadByte("Level");
  1187.                     client.Player.FirstRebornClass = reader.ReadByte("FirstRebornClass");
  1188.                     client.Player.SecondRebornClass = reader.ReadByte("SecondRebornClass");
  1189.                     client.Player.FirstRebornLevel = reader.ReadByte("FirstRebornLevel");
  1190.                     client.Player.SecondRebornLevel = reader.ReadByte("SecondRebornLevel");
  1191.                     client.LastDragonBallUse = DateTime.FromBinary(reader.ReadInt64("LastDragonBallUse"));
  1192.                     client.LastResetTime = DateTime.FromBinary(reader.ReadInt64("LastResetTime"));
  1193.                     client.Player.EnlightenPoints = reader.ReadUInt16("EnlightenPoints");
  1194.                     client.Player.EnlightmentTime = reader.ReadUInt16("EnlightmentWait");
  1195.                     client.Player.ReceivedEnlightenPoints = reader.ReadByte("EnlightsReceived");
  1196.                     client.Player.DoubleExperienceTime = reader.ReadUInt16("DoubleExpTime");
  1197.                     client.DoubleExpToday = reader.ReadBoolean("DoubleExpToday");
  1198.                     client.Player.HeavenBlessing = reader.ReadUInt32("HeavenBlessingTime");
  1199.                     client.Player.VIPLevel = reader.ReadByte("VIPLevel");
  1200.                     client.Player.PrevX = reader.ReadUInt16("PreviousX");
  1201.                     client.Player.PrevY = reader.ReadUInt16("PreviousY");
  1202.                     client.ExpBalls = reader.ReadByte("ExpBalls");
  1203.  
  1204.                     client.Player.ClanId = reader.ReadUInt32("ClanId");
  1205.                     client.Player.ClanRank = (Clan.Ranks)reader.ReadUInt32("ClanRank");
  1206.  
  1207.                     UInt64 lastLoginInt = reader.ReadUInt32("LastLogin");
  1208.                     if (lastLoginInt != 0)
  1209.                         client.Player.LastLogin = Kernel.FromDateTimeInt(lastLoginInt);
  1210.                     else
  1211.                         client.Player.LastLogin = DateTime.Now;
  1212.                     Game.ConquerStructures.Nobility.Sort(client.Player.OriginalUID);
  1213.                     if (CrossServer.Guilds[client.Server.ServerName] != null)
  1214.                     {
  1215.                         if (CrossServer.Guilds[client.Server.ServerName].ContainsKey(reader.ReadUInt32("GuildID")))
  1216.                         {
  1217.                             client.Guild = CrossServer.Guilds[client.Server.ServerName][reader.ReadUInt32("GuildID")];
  1218.                             if (client.Guild.Members.ContainsKey(client.Player.OriginalUID))
  1219.                             {
  1220.                                 client.AsMember = client.Guild.Members[client.Player.OriginalUID];
  1221.                                 client.AsMember.ArsenalDonation = client.GetArsenalDonation();
  1222.                                 client.AsMember.LastLogin = reader.ReadUInt32("GuildLastLogin");
  1223.                                 if (client.AsMember.GuildID == 0)
  1224.                                 {
  1225.                                     client.AsMember = null;
  1226.                                     client.Guild = null;
  1227.                                 }
  1228.                                 else
  1229.                                 {
  1230.                                     client.Player.GuildID = (ushort)client.Guild.ID;
  1231.                                     client.Player.GuildRank = (ushort)client.AsMember.Rank;
  1232.                                 }
  1233.                             }
  1234.                         }
  1235.                     }
  1236.                     else
  1237.                         client.Guild = null;
  1238.                     if (CrossServer.Board[client.Server.ServerName] != null)
  1239.                     {
  1240.                         if (!CrossServer.Board[client.Server.ServerName].TryGetValue(client.Player.OriginalUID, out client.NobilityInformation))
  1241.                         {
  1242.                             client.NobilityInformation = new COServer.Game.ConquerStructures.NobilityInformation();
  1243.                             client.NobilityInformation.PlayerUID = client.Player.UID;
  1244.                             client.NobilityInformation.Name = client.Player.Name;
  1245.                             client.NobilityInformation.Donation = 0;
  1246.                             client.NobilityInformation.Rank = COServer.Game.ConquerStructures.NobilityRank.Serf;
  1247.                             client.NobilityInformation.Position = -1;
  1248.                             client.NobilityInformation.Gender = 1;
  1249.                             client.NobilityInformation.Mesh = client.Player.Mesh;
  1250.                             if (client.Player.Body % 10 >= 3)
  1251.                                 client.NobilityInformation.Gender = 0;
  1252.                         }
  1253.                         else
  1254.                         {
  1255.                             client.Player.NobilityRank = client.NobilityInformation.Rank;
  1256.                         }
  1257.                     }
  1258.  
  1259.  
  1260.                     Game.IJiangHu Jiang;
  1261.                     if (CrossServer.JiangHuClients[client.Server.ServerName] != null)
  1262.                     {
  1263.                         if (CrossServer.JiangHuClients[client.Server.ServerName].TryGetValue(client.Player.OriginalUID, out Jiang))
  1264.                         {
  1265.                             client.Player.MyJiang = Jiang as Game.JiangHu;
  1266.                             client.Player.MyJiang.TimerStamp = DateTime.Now;
  1267.                             client.Player.MyJiang.Level = client.Player.Level;
  1268.                         }
  1269.                     }
  1270.                     LoadTopStatus(client.Player, client.Server.MySqlConnection);
  1271.                     client.Player.FullyLoaded = true;
  1272.                     return true;
  1273.                 }
  1274.                 else
  1275.                     return false;
  1276.             }
  1277.         }
  1278.         public static void LoadTopStatus(Player client, MySql.Data.MySqlClient.MySqlConnection Connection)
  1279.         {
  1280.             using (MySqlCommand Command = new MySqlCommand(MySqlCommandType.SELECT))
  1281.             {
  1282.                 Command.Select("status").Where("Playerid", client.OriginalUID).Execute();
  1283.                 using (MySqlReader Reader = new MySqlReader(Command, Connection))
  1284.                 {
  1285.                     while (Reader.Read())
  1286.                     {
  1287.                         UInt64 Title = Reader.ReadUInt64("status");
  1288.                         DateTime Time = Kernel.FromDateTimeInt(Reader.ReadUInt64("time"));
  1289.                         if (DateTime.Now > Time)
  1290.                             client.RemoveTopStatus(Title);
  1291.                         else
  1292.                         {
  1293.                             client.AddTopStatus(Title, Time, false);
  1294.                         }
  1295.                     }
  1296.                 }
  1297.             }
  1298.         }
  1299.         public static void Loadvariables(uint uid, out Game.VariableVault vars, MySql.Data.MySqlClient.MySqlConnection Connection)
  1300.         {
  1301.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("variablevault").Where("Playerid", uid))
  1302.             using (var reader = cmd.CreateReader(Connection))
  1303.             {
  1304.                 vars = new Game.VariableVault();
  1305.                 if (reader.Read())
  1306.                 {
  1307.                     vars.Deserialize(reader.ReadBlob("data"));
  1308.                 }
  1309.                 else
  1310.                 {
  1311.                     string SQL = "INSERT INTO `variablevault` (Playerid, data) VALUES (@PlayerID, @Data)";
  1312.                     byte[] rawData = vars.Serialize();
  1313.                     using (var conn = Connection)
  1314.                     {
  1315.                         conn.Open();
  1316.                         using (var cmd2 = new MySql.Data.MySqlClient.MySqlCommand(SQL, conn))
  1317.                         {
  1318.                             cmd2.Parameters.AddWithValue("@PlayerID", uid);
  1319.                             cmd2.Parameters.AddWithValue("@Data", rawData);
  1320.                             cmd2.ExecuteNonQuery();
  1321.                         }
  1322.                     }
  1323.                 }
  1324.             }
  1325.         }
  1326.         public static AccountTable LoadAccount(AccountTable Account, MySql.Data.MySqlClient.MySqlConnection Connection)
  1327.         {
  1328.             if (Account.OriginalPlayerID == 0) return null;
  1329.             Account.Username = "";
  1330.             Account.Password = "";
  1331.             Account.IP = "";
  1332.             Account.LastCheck = DateTime.Now;
  1333.             using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("accounts").Where("PlayerID", Account.OriginalPlayerID))
  1334.             using (var reader = new MySqlReader(cmd, Connection))
  1335.             {
  1336.                 if (reader.Read())
  1337.                 {
  1338.                     Account.Password = reader.ReadString("Password");
  1339.                     Account.MasterPassword = reader.ReadString("MasterPassword");
  1340.                     Account.IP = reader.ReadString("Ip");
  1341.                     Account.PlayerID = Server.PlayerUID.Next;
  1342.                     Account.LastCheck = DateTime.FromBinary(reader.ReadInt64("LastCheck"));
  1343.                     Account.State = (AccountTable.AccountState)reader.ReadInt32("State");
  1344.                     Account.Email = reader.ReadString("Email");
  1345.                 }
  1346.             }
  1347.             return Account;
  1348.         }
  1349.     }
  1350. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement