public void Connect() { //Wrap our function inside a catcher try { //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); byte type = Reader.Byte(); Reader.Skip(3); string ID = Reader.Text(); string PW = Reader.Text(); Reader.Close(); //Set login result information int LoginResult = LoginUser(ID, ref PW, ref Player, true); //If the login is succesfull if (LoginResult == 4) { //Send succes packet client.Send(Packet.ConnectSuccess()); } //If the login is wrong else { //Disconnect the user client.Disconnect(PacketInformation.Client); } } catch (Exception ex) { Log.Exception(ex); } }
void HandleRegisterIcon() { try { PacketReader reader = new PacketReader(PacketInformation.buffer); byte type = reader.Byte(); int iconlenght = reader.Int32(); string icon = reader.Text(); reader.Close(); string convertedicon = ConvertToHex(icon); //Save output to .dat file in hex formatting. } catch (Exception ex) { Console.WriteLine("Guild icon register error {0}", ex); } }
void CharacterDelete() { //Wrap our function in a catcher try { //Open our reader PacketReader Reader = new PacketReader(PacketInformation.buffer); byte unused = Reader.Byte(); string name = Reader.Text(); Reader.Close(); //Update character deletion information DB.query("UPDATE character SET deletedtime=dateadd(dd,7,getdate()) WHERE name='" + name + "'"); //Update character visual screen client.Send(Packet.ScreenSuccess(3)); } catch (Exception ex) { Log.Exception(ex); } }
public void CharacterCheck(byte[] buff) { //Wrap our function into a catcher try { //Open our reader PacketReader Reader = new PacketReader(buff); byte ignored = Reader.Byte(); string name = Reader.Text(); Reader.Close(); if (CharacterCheck(name)) client.Send(Packet.CharacterName(4)); else client.Send(Packet.ScreenSuccess(4)); } catch (Exception ex) { Log.Exception(ex); } }
//Public void select opcode public static void Opcode_List(Decode information) { //Set definition for detailed information Definitions.Clientdefinition Control = (Definitions.Clientdefinition)information.Packet; //Set Packetinformation as information (short). Control.PacketInformation = information; //Create a new packet reader to view incoming packet data PacketReader R = new PacketReader(Control.PacketInformation.buffer); //Create switch code based on the opcode the client sends. switch (information.opcode) { case Opcodes.CLIENT.CLIENT_PING_CHECK: break; case Opcodes.CLIENT.CLIENT_INFO: //If the client connecting is silkroad if (R.Text() == "SR_Client") Control.client.Send(Connect.GateWayPacket()); break; case Opcodes.CLIENT.CLIENT_GATEWAY_PATCH_REQUEST: Functions.Connect.ClientCheck(Control); break; case Opcodes.CLIENT.CLIENT_GATEWAY_SERVERLIST_REQUEST: Control.client.Send(Serverlist.ServerListPacket(0)); break; case Opcodes.CLIENT.CLIENT_GATEWAY_LOGIN_REQUEST: Functions.Auth.Connect(Control); break; case Opcodes.CLIENT.CLIENT_GATEWAY_NOTICE_REQUEST: Control.client.Send(Connect._6()); Control.client.Send(News.NewsPacket()); break; case 1905: byte[] buffer = information.buffer; Definitions.Clientdefinition.Connected_Users = BitConverter.ToInt16(buffer, 0); break; default: break; } }
public static void ClientCheck(Definitions.Clientdefinition sys) { PacketReader Reader = new PacketReader(sys.PacketInformation.buffer); byte Locale = Reader.Byte(); string Name = Reader.Text(); int Version = Reader.Int32(); Reader.Close(); try { if (Name == "SR_Client") { sys.client.Send(Core.Packets.Connect._1()); sys.client.Send(Core.Packets.Connect._2()); sys.client.Send(Core.Packets.Connect._3()); sys.client.Send(Core.Packets.Connect._4()); sys.client.Send(Core.Packets.Connect._5()); if (Version == Definitions.Serverdef.SilkroadClientVersion)// { sys.client.Send(Core.Packets.Connect.ActualVersion()); } else if (Version < Definitions.Serverdef.SilkroadClientVersion - 1)// { sys.client.Send(Core.Packets.Connect.ClientIsToOld()); } else if (Version > Definitions.Serverdef.SilkroadClientVersion)// { sys.client.Send(Core.Packets.Connect.ClientIsToNew()); } else { //sys.client.Send(Patch.SendPatchFiles()); } } } catch (Exception error) { Console.WriteLine("Connect.cs Error: {0}", error); } }
void CharacterCreate() { //Start wrapper for catching errors try { //Check the amount of characters created (If 4 then we return). Todo: Check if any message shows up. if (DB.GetRowsCount("SELECT * FROM character WHERE account='" + Player.AccountName + "'") == 4) return; //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); byte tocheck = Reader.Byte(); string name = Reader.Text(); int model = Reader.Int32(); byte volume = Reader.Byte(); int[] Item = new int[4]; Item[0] = Reader.Int32(); Item[1] = Reader.Int32(); Item[2] = Reader.Int32(); Item[3] = Reader.Int32(); Reader.Close(); //Check player name #region Check Name //Check the character name before creation if (CharacterCheck(name)) { //If bad send informational packet client.Send(Packet.CharacterName(4)); //Finally return. return; } //Set and disable special characters if (name.Contains("[")) return; else if (name.Contains("GM")) return; else if (name.Contains("]")) return; else if (name.Contains("-")) return; #endregion //Begin creation for EU characters #region European characters //Check by model type to see what race we have. if (model >= 14715 && model <= 14745) { //Insert the basic information into the database DB.query("INSERT INTO character (account, name, chartype, volume, xsect, ysect, xpos, zpos, ypos, savearea,GuideData) VALUES ('" + Player.AccountName + "','" + name + "', '" + model + "', '" + volume + "','79','105','387','1000','1279','20','0000000000000000')"); //Insert reverse scroll data into the database DB.query("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + name + "','79','105','1000','22','83')"); //Set definition for the character id information Player.CreatingCharID = Convert.ToInt32(DB.GetData("Select * from character Where name='" + name + "'", "id")); //Set default information (TODO: Check if all chars have same base). double MagDef = 3; double PhyDef = 6; double Parry = 11; double Hit = 11; double MinPhyA = 6; double MaxPhyA = 9; double MinMagA = 6; double MaxMagA = 10; //Open new framework ini reading Ini ini; //Open settings information for start items ini = new Ini(Environment.CurrentDirectory + @"\Settings\Settings.ini"); //5 Items max for starting characters string Item1 = ini.GetValue("European.Start", "Item1", "").ToString(); string Item2 = ini.GetValue("European.Start", "Item2", "").ToString(); string Item3 = ini.GetValue("European.Start", "Item3", "").ToString(); string Item4 = ini.GetValue("European.Start", "Item4", "").ToString(); string Item5 = ini.GetValue("European.Start", "Item5", "").ToString(); //The amount related information string Amount1 = ini.GetValue("European.Start", "Amount1", "").ToString(); string Amount2 = ini.GetValue("European.Start", "Amount2", "").ToString(); string Amount3 = ini.GetValue("European.Start", "Amount3", "").ToString(); string Amount4 = ini.GetValue("European.Start", "Amount4", "").ToString(); string Amount5 = ini.GetValue("European.Start", "Amount5", "").ToString(); //Add the custom items try { AddItem(Convert.ToInt32(Item1), Convert.ToByte(Amount1), 13, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item2), Convert.ToByte(Amount2), 14, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item3), Convert.ToByte(Amount3), 15, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item4), Convert.ToByte(Amount4), 16, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item5), Convert.ToByte(Amount5), 17, Player.CreatingCharID, 0); } catch (Exception) { } //Add the base items AddItem(Item[0], 0, 1, Player.CreatingCharID, 0); AddItem(Item[1], 0, 4, Player.CreatingCharID, 0); AddItem(Item[2], 0, 5, Player.CreatingCharID, 0); AddItem(Item[3], 0, 6, Player.CreatingCharID, 0); //Set mag defense MagDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinMagDef; MagDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinMagDef; MagDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinMagDef; //Set phy defence PhyDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinPhyDef; PhyDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinPhyDef; PhyDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinPhyDef; //Set parry information Parry += ObjData.Manager.ItemBase[Item[0]].Defans.Parry; Parry += ObjData.Manager.ItemBase[Item[1]].Defans.Parry; Parry += ObjData.Manager.ItemBase[Item[2]].Defans.Parry; //Set hit ratio Hit += ObjData.Manager.ItemBase[Item[3]].Attack.MinAttackRating; //Set phy attack MinPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LPhyAttack; MaxPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HPhyAttack; //Set mag attack MinMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LMagAttack; MaxMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HMagAttack; //If the 3rd item is a sword or a dark staff if (Item[3] == 10730 || Item[3] == 10734) { //Add the mag def information MagDef += ObjData.Manager.ItemBase[251].Defans.MinMagDef; //Add the phy def information PhyDef += ObjData.Manager.ItemBase[251].Defans.MinPhyDef; //Add parry ration Parry += ObjData.Manager.ItemBase[251].Defans.Parry; //Add shield item AddItem(10738, 0, 7, Player.CreatingCharID, 0); } //If the 3rd item is a crossbow if (Item[3] == 10733) { //We add our base bolts 250 AddItem(10376, 250, 7, Player.CreatingCharID, 0); } //Update database information for stats DB.query("update character set min_phyatk='" + (int)Math.Round(MinPhyA) + "', max_phyatk='" + Math.Round(MaxPhyA) + "', min_magatk='" + Math.Round(MinMagA) + "', max_magatk='" + Math.Round(MaxMagA) + "', phydef='" + Math.Round(PhyDef) + "', magdef='" + Math.Round(PhyDef) + "', parry='" + Math.Round(Parry) + "', hit='" + Math.Round(Hit) + "' where name='" + name + "'"); //Add base mastery's for europe characters AddMastery(513, Player.CreatingCharID); //Warrior AddMastery(515, Player.CreatingCharID); //Rogue AddMastery(514, Player.CreatingCharID); //Wizard AddMastery(516, Player.CreatingCharID); //Warlock AddMastery(517, Player.CreatingCharID); //Bard AddMastery(518, Player.CreatingCharID); //Cleric client.Send(Packet.ScreenSuccess(1)); #endregion } //If the character model is an chinese character else { #region Chinese characters DB.query("INSERT INTO character (account, name, chartype, volume,GuideData) VALUES ('" + Player.AccountName + "','" + name + "', '" + model + "', '" + volume + "','0000000000000000')"); DB.query("INSERT INTO character_rev (charname, revxsec, revysec, revx, revy, revz) VALUES ('" + name + "','168','79','911','1083','-32')"); Player.CreatingCharID = Convert.ToInt32(DB.GetData("Select * from character Where name='" + name + "'", "id")); #region Item double MagDef = 3; double PhyDef = 6; double Parry = 11; double Hit = 11; double MinPhyA = 6; double MaxPhyA = 9; double MinMagA = 6; double MaxMagA = 10; CLFramework.Ini ini; ini = new CLFramework.Ini(Environment.CurrentDirectory + @"\Settings\Settings.ini"); string Item1 = ini.GetValue("Chinese.Start", "Item1", "").ToString(); string Item2 = ini.GetValue("Chinese.Start", "Item2", "").ToString(); string Item3 = ini.GetValue("Chinese.Start", "Item3", "").ToString(); string Item4 = ini.GetValue("Chinese.Start", "Item4", "").ToString(); string Item5 = ini.GetValue("Chinese.Start", "Item5", "").ToString(); string Amount1 = ini.GetValue("Chinese.Start", "Amount1", "").ToString(); string Amount2 = ini.GetValue("Chinese.Start", "Amount2", "").ToString(); string Amount3 = ini.GetValue("Chinese.Start", "Amount3", "").ToString(); string Amount4 = ini.GetValue("Chinese.Start", "Amount4", "").ToString(); string Amount5 = ini.GetValue("Chinese.Start", "Amount5", "").ToString(); try { AddItem(Convert.ToInt32(Item1), Convert.ToByte(Amount1), 13, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item2), Convert.ToByte(Amount2), 14, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item3), Convert.ToByte(Amount3), 15, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item4), Convert.ToByte(Amount4), 16, Player.CreatingCharID, 0); AddItem(Convert.ToInt32(Item5), Convert.ToByte(Amount5), 17, Player.CreatingCharID, 0); } catch (Exception) { } AddItem(Item[0], 0, 1, Player.CreatingCharID, 0); AddItem(Item[1], 0, 4, Player.CreatingCharID, 0); AddItem(Item[2], 0, 5, Player.CreatingCharID, 0); AddItem(Item[3], 0, 6, Player.CreatingCharID, 0); MagDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinMagDef; MagDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinMagDef; MagDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinMagDef; PhyDef += ObjData.Manager.ItemBase[Item[0]].Defans.MinPhyDef; PhyDef += ObjData.Manager.ItemBase[Item[1]].Defans.MinPhyDef; PhyDef += ObjData.Manager.ItemBase[Item[2]].Defans.MinPhyDef; Parry += ObjData.Manager.ItemBase[Item[0]].Defans.Parry; Parry += ObjData.Manager.ItemBase[Item[1]].Defans.Parry; Parry += ObjData.Manager.ItemBase[Item[2]].Defans.Parry; Hit += ObjData.Manager.ItemBase[Item[3]].Attack.MinAttackRating; MinPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LPhyAttack; MaxPhyA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HPhyAttack; MinMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_LMagAttack; MaxMagA += ObjData.Manager.ItemBase[Item[3]].Attack.Min_HMagAttack; if (Item[3] == 3632 || Item[3] == 3633) { MagDef += ObjData.Manager.ItemBase[251].Defans.MinMagDef; PhyDef += ObjData.Manager.ItemBase[251].Defans.MinPhyDef; Parry += ObjData.Manager.ItemBase[251].Defans.Parry; AddItem(251, 0, 7, Player.CreatingCharID, 0); } if (Item[3] == 3636) { AddItem(62, 250, 7, Player.CreatingCharID, 0); } #endregion DB.query("update character set min_phyatk='" + (int)Math.Round(MinPhyA) + "', max_phyatk='" + Math.Round(MaxPhyA) + "', min_magatk='" + Math.Round(MinMagA) + "', max_magatk='" + Math.Round(MaxMagA) + "', phydef='" + Math.Round(PhyDef) + "', magdef='" + Math.Round(PhyDef) + "', parry='" + Math.Round(Parry) + "', hit='" + Math.Round(Hit) + "' where name='" + name + "'"); AddMastery(257, Player.CreatingCharID); //blade AddMastery(258, Player.CreatingCharID); //heuksal AddMastery(259, Player.CreatingCharID); //bow AddMastery(273, Player.CreatingCharID); //cold AddMastery(274, Player.CreatingCharID); //light AddMastery(275, Player.CreatingCharID); //fire AddMastery(276, Player.CreatingCharID); //force client.Send(Packet.ScreenSuccess(1)); #endregion } } catch (Exception ex) { Log.Exception(ex); } }
public void LoginScreen() { //Wrap our function inside a catcher try { //Open our packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); string name = Reader.Text(); Reader.Close(); //Anti hack checking sql query DB ms = new DB("SELECT name FROM character WHERE account='" + Player.AccountName + "' AND name='" + name + "'"); //Check if the player account and character belongs together (count row). int checkinfo = ms.Count(); //If there's no result if (checkinfo == 0) { //Disconnect the user if hack attempt client.Disconnect(client.clientSocket); return; } //If there's a result we continue loading else { //Create new character definition details Character = new WorldMgr.character(); //Set character name Character.Information.Name = name; //Set player id Character.Account.ID = Player.ID; //Load player data PlayerDataLoad(); Character.Ids = new GenerateUniqueID(Character.Information.CharacterID, GenerateUniqueID.IDS.Player); Character.Information.UniqueID = Character.Ids.GetUniqueID; //Load job data LoadJobData(); //Check same character checkSameChar(name, Character.Information.UniqueID); //Check character stats CheckCharStats(Character); //Add new cient lock (Helpers.Manager.clients) { Helpers.Manager.clients.Add(this); } //Send packets required client.Send(Packet.LoginScreen()); client.Send(Packet.StartPlayerLoad()); client.Send(Packet.CharacterDataLoad(Character)); client.Send(Packet.EndPlayerLoad()); client.Send(Packet.PlayerUnknowPack(Character.Information.UniqueID)); //client.Send(Packet.UnknownPacket()); //need to research this packet. //Update online status DB.query("UPDATE character SET online='1' WHERE id='" + Character.Information.CharacterID + "'"); //Update server information Brain.ServerMgr.UpdateServerInfo(); //Open our timer OpenTimer(); Character.InitializeCharacter(); //Load blue data LoadBlues(Character); #region equipped items List<ObjData.slotItem> EquipedItems = new List<ObjData.slotItem>(); //For each equiped item add for (byte q = 0; q < 13; q++) { EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0)); } /* //Load default values for resistance #region Load Resistance default values Character.Blues.Luck = 100; Character.Blues.Resist_All = 100; Character.Blues.Resist_Burn = 100; Character.Blues.Resist_CSMP = 100; Character.Blues.Resist_Disease = 100; Character.Blues.Resist_Eshock = 100; Character.Blues.Resist_Fear = 100; Character.Blues.Resist_Frostbite = 100; Character.Blues.Resist_Poison = 100; Character.Blues.Resist_Sleep = 100; Character.Blues.Resist_Stun = 100; Character.Blues.Resist_Zombie = 100; Character.Blues.MonsterIgnorance = 100; Character.Blues.UniqueDMGInc = 100; #endregion */ //Load blues for each item foreach (ObjData.slotItem sitem in EquipedItems) { if (ObjData.Manager.ItemBlue.ContainsKey(sitem.dbID)) { LoadBluesid(sitem.dbID); if (ObjData.Manager.ItemBlue[sitem.dbID].totalblue != 0) AddRemoveBlues(this, sitem, true); } } #endregion } } catch (Exception ex) { Log.Exception(ex); } }
public void Chat() { try { List<int> lis = Character.Spawn; //Main getinfo = new Main(); PacketReader Reader = new PacketReader(PacketInformation.buffer); byte chatType = Reader.Byte(); byte chatIndex = Reader.Byte(); byte linkCount = Reader.Byte(); // added in 295 client switch (chatType) { case 1://town chat string Text = Reader.Text3(); Reader.Close(); Send(lis, Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, null)); client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; case 3://town chat pink if (Character.Information.GM == 1) { Text = Reader.Text3(); Reader.Close(); Send(lis, Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, null)); client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; } else { Disconnect("ban"); } break; case 2://Pm chat string toName = Reader.Text(); PlayerMgr sys = null; sys = Helpers.GetInformation.GetPlayerName(toName); if (sys != null || sys.Character.InGame) { Text = Reader.Text3(); Reader.Close(); sys.client.Send(Packet.ChatPacket(chatType, 0, Text, Character.Information.Name)); client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); } break; case 4://Party chat if (Character.Network.Party != null) { Text = Reader.Text3(); Reader.Close(); Character.Network.Party.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name)); client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); } break; case 5://Guild Chat Text = Reader.Text3(); Reader.Close(); foreach (int member in Character.Network.Guild.Members) { //Make sure the member is there if (member != 0) { //If the user is not the newly invited member get player info PlayerMgr tomember = Helpers.GetInformation.GetPlayerMainid(member); //Send guild update packet if (tomember != null) { tomember.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name)); } } } client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; case 6://Global chat string FromName = Reader.Text(); Text = Reader.Text3(); Console.WriteLine(Text); Helpers.SendToClient.SendAll(Packet.ChatPacket(chatType, Character.Information.UniqueID, " " + Text, FromName)); break; case 7://Notice chat if (Character.Information.GM == 1) { Text = Reader.Text3(); Reader.Close(); Helpers.SendToClient.SendAll(sendnoticecon(chatType, Character.Information.UniqueID, Text, null)); } else { Disconnect("ban"); } break; case 9://Stall chat Text = Reader.Text3(); Reader.Close(); Character.Network.Stall.Send(Packet.ChatPacket(chatType, Character.Network.Stall.ownerID, Text, Character.Information.Name)); client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; case 10://Academy chat Text = Reader.Text3(); Send(lis, Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name)); break; case 11://Union chat Text = Reader.Text3(); Reader.Close(); if (!Character.Network.Guild.UnionActive) return; foreach (int member in Character.Network.Guild.UnionMembers) { //Make sure the member is there if (member != 0) { //If the user is not the newly invited member get player info PlayerMgr tomember = Helpers.GetInformation.GetPlayerMainid(member); //Send guild update packet if (tomember != null) { if (!tomember.Character.Network.Guild.SingleSend) { tomember.Character.Network.Guild.SingleSend = true; tomember.client.Send(Packet.ChatPacket(chatType, Character.Information.UniqueID, Text, Character.Information.Name)); } } } } foreach (int member in Character.Network.Guild.UnionMembers) { //Make sure the member is there if (member != 0) { //If the user is not the newly invited member get player info PlayerMgr tomember = Helpers.GetInformation.GetPlayerMainid(member); //Disable bool single send if (tomember != null) { tomember.Character.Network.Guild.SingleSend = false; } } } client.Send(Packet.ChatIndexPacket(chatType, chatIndex)); break; } } catch (Exception ex) { Console.WriteLine("Chat error {0}", ex); Log.Exception(ex); } }
void CharacterRestore() { //Wrap our function in a catcher try { //Open packet readers PacketReader Reader = new PacketReader(PacketInformation.buffer); byte unused = Reader.Byte(); string name = Reader.Text(); Reader.Close(); //Update database information set delete time to 0 DB.query("UPDATE character SET deletedtime=0 WHERE name='" + name + "'"); //Update visually screen with packet client.Send(Packet.ScreenSuccess(5)); } catch (Exception ex) { Log.Exception(ex); } }
public static void Connect(Definitions.Clientdefinition sys) { //Wrap our code in a try / catch to catch bad exception errors try { //Create a new packet reader to read packet data PacketReader Reader = new PacketReader(sys.PacketInformation.buffer); //If the first byte = 18 we continue if (Reader.Byte() == 18) { //First string packet data is for the username string ID = Reader.Text(); //Second string packet data is for the password string PW = Reader.Text(); byte ReaderBy = Reader.Byte(); //Unknown byte not needed:0xff ?? Country? //Check what server id is requested ushort ShardID = Reader.UInt16(); //Set login result ushort lResult = 99; //Set new details for the server in the serverlist Definitions.Serverdef.ServerDetails SSI = Definitions.Serverdef.Serverlist[ShardID]; //If the server chosen is not null if (SSI != null) { //TODO: Continue commenting code here ushort myKey = 0; string sReason = ""; lock (Definitions.Serverdef.IPCResultList) { myKey = Definitions.Serverdef.IPCNewId++; } byte[] rqp = Definitions.Serverdef.IPCServer.PacketRequestLogin(Definitions.Serverdef.IPCPort, ID, PW, myKey); Servers.IPCenCode(ref rqp, SSI.code); lock (Definitions.Serverdef.IPCResultList) { Definitions.Serverdef.IPCResultList.Add(myKey, new Definitions.Serverdef.IPCItem()); Definitions.Serverdef.IPCResultList[myKey].ResultCode = 0x8000; } Definitions.Serverdef.IPCServer.Send(SSI.ip, SSI.ipcport, rqp); DateTime tOut = DateTime.Now.AddSeconds(30); while ((tOut >= DateTime.Now) && (Definitions.Serverdef.IPCResultList[myKey].ResultCode == 0x8000) && (sys.client.clientSocket.Connected)) { System.Threading.Thread.Sleep(10); } lResult = Definitions.Serverdef.IPCResultList[myKey].ResultCode; sReason = Definitions.Serverdef.IPCResultList[myKey].BanReason; lock (Definitions.Serverdef.IPCResultList) { Definitions.Serverdef.IPCResultList[myKey] = null; Definitions.Serverdef.IPCResultList.Remove(myKey); } rqp = null; switch ((LOGIN_RESULT_TYPES)lResult) { case LOGIN_RESULT_TYPES.SERVER_CROWDED: sys.client.Send(Core.Packets.Login.ServerIsFull()); sys.client.Disconnect(sys.PacketInformation.Client); return; case LOGIN_RESULT_TYPES.ACCOUNT_NOT_FOUND: sys.client.Send(Core.Packets.Login.WriteMessage("Account ID Not Found.Please register new account www.clowenonline.com")); break; case LOGIN_RESULT_TYPES.ACCOUNT_ALREADY_ONLINE: sys.client.Send(Core.Packets.Login.AllreadyConnected()); sys.client.Disconnect(sys.PacketInformation.Client); return; case LOGIN_RESULT_TYPES.ACCOUNT_BANNED: sys.client.Send(Core.Packets.Login.AccountBanned(sReason/*,BannedTime*/)); sys.client.Disconnect(sys.PacketInformation.Client); return; case LOGIN_RESULT_TYPES.ACCOUNT_CONNECT_SUCCESSFULY: sys.client.Send(Core.Packets.Login.ConnectSucces(SSI.extip != "" ? SSI.extip : SSI.ip, (Int16)SSI.port, 1)); return; case LOGIN_RESULT_TYPES.ACCOUNT_INFORMATION_FAILED: sys.client.Send( Core.Packets.Login.WriteMessage("You have typed wrong ID or PW.Please re-enter your ID or PW.")); //sys.client.Send(Core.Packets.Login.PasswordFailed(new Random().Next(1, 16), 16)); return; default: sys.client.Send(Core.Packets.Login.WriteMessage("Connection Failed.")); sys.client.Disconnect(sys.PacketInformation.Client); if (lResult == 0x8000) { //timeout sys.client.Send(Core.Packets.Login.WriteMessage("Connection Time out.Disconnecting.")); sys.client.Disconnect(sys.PacketInformation.Client); } return; } } } } catch (Exception ex) { Log.Exception(ex); } }
public void GameMaster() { if (Character.Information.GM == 1) { PacketReader Reader = new PacketReader(PacketInformation.buffer); if (Reader == null) { Disconnect("normal"); return; } ushort CommandType = Reader.UInt16(); Console.WriteLine("GM_COMMAND::{0} USED.BY:{1} ", (GM_COMMAND)CommandType, Character.Information.Name); switch ((GM_COMMAND)CommandType) { case GM_COMMAND.FINDUSER: GMfinduser(Reader.Text()); break; case GM_COMMAND.GOTOWN: GMgotown(); break; case GM_COMMAND.TOTOWN: GMtotown(Reader.Text()); break; case GM_COMMAND.WORLDSTATUS: GMworldstatus(); break; case GM_COMMAND.LOADMONSTER: GMloadmonster(Reader.Int32(), Reader.Byte(), Reader.Byte()); break; case GM_COMMAND.MAKEITEM: case GM_COMMAND.MAKERENTITEM: GMmakeitem(Reader.Int32(), Reader.Byte()); break; case GM_COMMAND.MOVETOUSER: GMmovetouser(Reader.Text()); break; case GM_COMMAND.ZOE: GMzoe(Reader.Int32(), Reader.Byte()); break; case GM_COMMAND.BAN: GMban(Reader.Text()); break; case GM_COMMAND.INVISIBLE: GMinvisible(); break; case GM_COMMAND.INVINCIBLE: GMinvincible(); break; case GM_COMMAND.WARP: if (PacketInformation.buffer.Length > 4) GM_WP(Reader.Byte(), Reader.Byte(), Reader.Single(), Reader.Single(), Reader.Single()); break; case GM_COMMAND.RECALLUSER: GMrecalluser(Reader.Text()); break; case GM_COMMAND.MOBKILL: GMmobkill(Reader.Int32(), Reader.UInt16()); break; case GM_COMMAND.BLOCKLOGOUT: GMblocklogout(Reader.Text(), Reader.Byte()); break; case GM_COMMAND.LIENAME: GM_LIENAME(Reader.Text()); GM_TRANSFORM(Reader.Text()); break; case GM_COMMAND.INITQ: GMinitq(); break; case GM_COMMAND.MOVETONPC: GMmovetonpc(Reader.Text()); break; case GM_COMMAND.ROTIME: // Kontrol Edilecek //GMspawnuniques(); break; case GM_COMMAND.CLEARINVENTORY: GMclearinventory(); break; case GM_COMMAND.ENTERGMM: GMentergmm(); break; case GM_COMMAND.WEATHER_RAIN: Helpers.SendToClient.SendAll(Packet.Weather(2, Reader.Int32())); break; case GM_COMMAND.WEATHER_SNOW: Helpers.SendToClient.SendAll(Packet.Weather(3, Reader.Int32())); break; case GM_COMMAND.WEATHER_CLEAR: Helpers.SendToClient.SendAll(Packet.Weather(1, Reader.Int32())); break; default: Print.Format("Non Coded GM Command:{0} -> {1}", CommandType, Decode.StringToPack(PacketInformation.buffer)); break; } Reader.Close(); } else { Disconnect("ban"); } }
///////////////////////////////////////////////////////////////////////////////// // Friend groups ///////////////////////////////////////////////////////////////////////////////// public void FriendGroup(string type) { try { //We use string type for switch statement. switch (type) { //Add new group case "ADD": //First check if the user has friends int friendcount = DB.GetRowsCount("SELECT * FROM FRIENDS WHERE owner='" + Character.Information.CharacterID + "'"); //If the user has no friends return if (friendcount == 0) return; //Create our packet reader PacketReader reader = new PacketReader(PacketInformation.buffer); //Start reading information string groupname = reader.Text(); //Close the reader reader.Close(); //Update database information DB.query("INSERT INTO friends_groups (playerid,groupname) VALUES ('" + Character.Information.CharacterID + "','" + groupname + "')"); //Get group id from count short groupid = GetGroupId(Character.Information.CharacterID); //Send packet to client client.Send(Packet.FriendGroupManage("ADD", groupname, groupid, 0)); break; //Remove group case "REMOVE": //Create our packet reader reader = new PacketReader(PacketInformation.buffer); //Start reading information groupid = reader.Int16(); //Close the reader reader.Close(); //Get group name string groupnameinfo = GetGroupName(Character.Information.CharacterID, groupid); //Update database information DB.query("DELETE FROM friends_groups WHERE groupname='" + groupnameinfo + "'"); //Send packet to client client.Send(Packet.FriendGroupManage("REMOVE", groupnameinfo, groupid, 0)); break; //Move to group case "MOVE": //Create our packet reader reader = new PacketReader(PacketInformation.buffer); //Start reading information int targetid = reader.Int32(); groupid = reader.Int16(); //Close the reader reader.Close(); //Get groupname groupnameinfo = GetGroupName(Character.Information.CharacterID, groupid); //Update database information DB.query("UPDATE friends SET group_name='" + groupnameinfo + "' WHERE owner='" + Character.Information.CharacterID + "' AND friend_name='" + targetid + "'"); //Send packet to client client.Send(Packet.FriendGroupManage("MOVE", groupnameinfo, groupid, targetid)); break; } } catch (Exception ex) { Log.Exception(ex); } }