public static byte[] RankListsDonateHunter() { Systems.MsSQL ms = new Systems.MsSQL("SELECT TOP 50 * FROM rank_job_donate WHERE job_type='2'"); PacketWriter Writer = new PacketWriter(); int countinfo = ms.Count(); int i = 0; Writer.Create(Systems.SERVER_RANK_LISTS); Writer.Byte(1); Writer.Byte(3); Writer.Byte(1); Writer.Byte(Convert.ToByte(countinfo)); using (SqlDataReader reader = ms.Read()) { for (i = 0; i < countinfo;) { while (reader.Read()) { byte rank = reader.GetByte(2); string name = reader.GetString(3); byte level = reader.GetByte(4); int donate = reader.GetInt32(5); Writer.Byte(rank); Writer.Text(name); Writer.Byte(level); Writer.DWord(donate); i++; } } ms.Close(); } return(Writer.GetBytes()); }
public static byte[] SendFriendList(byte count, character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_SEND_FRIEND_LIST); //Groups Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM friends_groups WHERE playerid='"+ c.Information.CharacterID +"'"); int groupcount = ms.Count(); groupcount = groupcount + 1; Writer.Byte((byte)groupcount); Writer.Word(0); Writer.Text("NonClassified"); int groupid = 0; using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { string groupname = reader.GetString(2); groupid = groupid +1; Writer.Word((short)groupid); Writer.Text(groupname); } } //Friends Writer.Byte(count); ms = new Systems.MsSQL("SELECT * FROM friends WHERE owner='"+ c.Information.CharacterID +"'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { int model = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "chartype"); int status = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "Online"); int charid = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "id"); string charname = Systems.MsSQL.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "name"); string groupname = reader.GetString(4); Writer.DWord(charid); // Friend CharID Writer.Text(charname); // Friend Name Writer.DWord(model); // Friend Model Type if (groupname == "none") Writer.Word(0); else Writer.Word(groupid); if (status != 0) { Writer.Byte(0); // Friend is online } else { Writer.Byte(1); // Inverted, Friend is offline } } reader.Close(); } ms.Close(); return Writer.GetBytes(); }
/////////////////////////////////////////////////////////////////////////// // Grab pet information packet /////////////////////////////////////////////////////////////////////////// public static byte[] Pet_Information_grab(pet_obj o, byte slot) { PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_PET_INFORMATION); try { ////////////////////////////////////////////////////////////////////////////////////// // Grabpet structure ////////////////////////////////////////////////////////////////////////////////////// Writer.DWord(o.UniqueID); //Unique ID Writer.DWord(o.Model); //Pet Model Writer.DWord(0x00006D); //Settings Writer.DWord(0x00006D); //Settings Writer.DWord(0x000047); //Settings 0x47 grab pet active 0 disabled if (o.Petname != "No name") //############### { Writer.Text(o.Petname); // Name region } else // { Writer.Word(0); //############### } Writer.Byte(o.Slots); //Slots count inventory pet ////////////////////////////////////////////////////////////////////////////////////// // Grabpet item inventory ////////////////////////////////////////////////////////////////////////////////////// Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + o.OwnerID + "' AND pet_storage_id='" + o.UniqueID + "'"); Writer.Byte(ms.Count()); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30)); } } ms.Close(); ////////////////////////////////////////////////////////////////////////////////////// // Other ////////////////////////////////////////////////////////////////////////////////////// Writer.DWord(o.OwnerID); //Character ID Writer.Byte(slot); //Slot location of the pet ////////////////////////////////////////////////////////////////////////////////////// } catch (Exception ex) { Console.WriteLine("Pet load error: " + ex); } return(Writer.GetBytes()); }
public static byte[] OpenWarehouse2(byte storageslots, player c) { PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_OPEN_WAREPROB); Writer.Byte(storageslots); Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE storageacc='" + c.ID + "' AND storagetype='1'"); Writer.Byte(ms.Count()); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9),reader.GetInt32(30)); } ms.Close(); return Writer.GetBytes(); }
public static byte[] HonorRank(character c) { Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM rank_honor"); PacketWriter Writer = new PacketWriter(); int countinfo = ms.Count(); Writer.Create(Systems.SERVER_HONOR_RANK); Writer.Byte(1); int i = 0; Writer.Byte(Convert.ToByte(countinfo)); using (SqlDataReader reader = ms.Read()) { while (reader.Read()) { byte rankicon = reader.GetByte(1); string rankname = reader.GetString(2); byte ranklevel = reader.GetByte(3); byte ranklevelc = reader.GetByte(4); int graduatesc = reader.GetInt32(5); int rankposc = reader.GetInt32(6); Writer.DWord(i + 1); Writer.Byte(rankicon); Writer.Text(rankname); Writer.Byte(ranklevel); Writer.Byte(ranklevelc); Writer.DWord(graduatesc); //If player has no guild, we write a 0 word value if (c.Network.Guild.Name == null) { Writer.Word(0); } //If player has a guild we write the guild name. else { Writer.Text(c.Network.Guild.Name); } i++; } ms.Close(); } return(Writer.GetBytes()); }
public static byte[] HonorRank(character c) { Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM rank_honor"); PacketWriter Writer = new PacketWriter(); int countinfo = ms.Count(); Writer.Create(Systems.SERVER_HONOR_RANK); Writer.Byte(1); int i = 0; Writer.Byte(Convert.ToByte(countinfo)); using (SqlDataReader reader = ms.Read()) { while (reader.Read()) { byte rankicon = reader.GetByte(1); string rankname = reader.GetString(2); byte ranklevel = reader.GetByte(3); byte ranklevelc = reader.GetByte(4); int graduatesc = reader.GetInt32(5); int rankposc = reader.GetInt32(6); Writer.DWord(i + 1); Writer.Byte(rankicon); Writer.Text(rankname); Writer.Byte(ranklevel); Writer.Byte(ranklevelc); Writer.DWord(graduatesc); //If player has no guild, we write a 0 word value if (c.Network.Guild.Name == null) { Writer.Word(0); } //If player has a guild we write the guild name. else { Writer.Text(c.Network.Guild.Name); } i++; } ms.Close(); } return Writer.GetBytes(); }
public static byte[] OpenWarehouse2(byte storageslots, player c) { PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_OPEN_WAREPROB); Writer.Byte(storageslots); Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE storageacc='" + c.ID + "' AND storagetype='1'"); Writer.Byte(ms.Count()); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30)); } } ms.Close(); return(Writer.GetBytes()); }
public static byte[] GuildStorageData(character c) { Systems.MsSQL getstorage = new Systems.MsSQL("SELECT * FROM char_items WHERE guild_storage_id='" + c.Network.Guild.Guildid + "' AND storagetype='3'"); int itemcount = getstorage.Count(); PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_GUILD_STORAGE3); Writer.Byte(c.Network.Guild.StorageSlots); Writer.Byte(itemcount); if (itemcount != 0) { using (System.Data.SqlClient.SqlDataReader reader = getstorage.Read()) { while (reader.Read()) { Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30)); } } } getstorage.Close(); return(Writer.GetBytes()); }
public static byte[] RankListsActivityHunter() { Systems.MsSQL ms = new Systems.MsSQL("SELECT TOP 50 * FROM rank_job_activity WHERE job_type='3'"); PacketWriter Writer = new PacketWriter(); int countinfo = ms.Count(); int i = 0; Writer.Create(Systems.SERVER_RANK_LISTS); Writer.Byte(1); Writer.Byte(1); Writer.Byte(0); Writer.Byte(Convert.ToByte(countinfo)); using (SqlDataReader reader = ms.Read()) { for (i = 0; i < countinfo; ) { while (reader.Read()) { byte rank = reader.GetByte(2); string name = reader.GetString(3); byte level = reader.GetByte(4); int exp = reader.GetInt32(5); byte title = reader.GetByte(6); Writer.Byte(rank); Writer.Text(name); Writer.Byte(level); Writer.DWord(exp); Writer.Byte(title); i++; } } ms.Close(); } return Writer.GetBytes(); }
public void IngameLogin() { //Wrap our function inside a catcher try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read character name from packet string CharacterName = Reader.Text(); //Close reader Reader.Close(); //Anti hack checking sql query Systems.MsSQL ms = new Systems.MsSQL("SELECT name FROM character WHERE account='" + Player.AccountName + "' AND name='" + CharacterName + "'"); //Check if the player account and character belongs together (count row). int checkinfo = ms.Count(); //If there's no result if (checkinfo == 0) { //Optional ban user here for hacking. //Disconnect the user if hack attempt client.Disconnect(this.client.clientSocket); return; } //If there's a result we continue loading else { //Create new character definition details Character = new character(); //Set character name Character.Information.Name = CharacterName; //Set player id Character.Account.ID = Player.ID; //Load player data PlayerDataLoad(); //Load job data LoadJobData(); //Check same character checkSameChar(CharacterName, Character.Information.UniqueID); //Check character stats CheckCharStats(Character); //Lock while we add new client lock (Systems.clients) { //Add new client Systems.clients.Add(this); } //Send login screen packet client.Send(Packet.LoginScreen()); //Send player data load start packet client.Send(Packet.StartPlayerLoad()); //Send player data load data client.Send(Packet.Load(Character)); //Send end load for player data client.Send(Packet.EndPlayerLoad()); //Update online status in database MsSQL.UpdateData("UPDATE character SET online='1' WHERE id='" + Character.Information.CharacterID + "'"); //Set PVP State MsSQL.UpdateData("UPDATE character SET Pvpstate='0' WHERE id='" + Character.Information.CharacterID + "'"); //Update server information (Players online). UpdateServerInfo(); //Open our timers for spawn checks etc. OpenTimer(); //Load blue data for character LoadBlues(Character); //Create new list for equiped items List<Global.slotItem> EquipedItems = new List<Global.slotItem>(); //For each equiped item under slot 13 for (byte q = 0; q < 13; q++) { //Add items to the list EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0)); } //Load blues for each item foreach (Global.slotItem sitem in EquipedItems) { //Check if the dictionary contains our blue id on item if (Data.ItemBlue.ContainsKey(sitem.dbID)) { //If exists, load blue for the item LoadBluesid(sitem.dbID); //If blue amount is not 0 if (Data.ItemBlue[sitem.dbID].totalblue != 0) //Add blue to stats and information AddRemoveBlues(this, sitem, true); } } //Default luck (Will be based on tickets increasment etc. this.Character.Blues.Luck = 100; } } //Catch bad exception errors catch (Exception ex) { //Write to debug log Systems.Debugger.Write(ex); } }
//Listening main uses a single packet only so we write our packet here public static byte[] CharacterListing(player p) { //Create new sql query to get all characters except fully deleted Systems.MsSQL ms = new Systems.MsSQL("SELECT TOP 4 * FROM character WHERE account='" + p.AccountName + "' AND deleted='0' OR account='" + p.AccountName + "' AND deleted ='1'"); //Create new packet writer PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_CHARACTERSCREEN); // Select opcode Writer.Byte(2); // Static byte 2 Writer.Byte(1); // Static byte 1 Writer.Byte(ms.Count()); // Byte Character Count //Create new sql data reader using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { //While the reader is reading data from the database while (reader.Read()) { Writer.DWord(reader.GetInt32(3)); // DWord Skin Model Writer.Text(reader.GetString(2)); // String Name Writer.Byte(reader.GetByte(4)); // Byte Skin Volume Writer.Byte(reader.GetByte(5)); // Byte Level Writer.LWord(reader.GetInt64(12)); // Long Experience Writer.Word(reader.GetInt16(6)); // Word STR Writer.Word(reader.GetInt16(7)); // Word INT Writer.Word(reader.GetInt16(8)); // Attribute points Writer.DWord(reader.GetInt32(9)); // HP Writer.DWord(reader.GetInt32(10)); // MP //Set defnition for current time DateTime CurrentTime = DateTime.Now; //Subtract the current time with deletion time information TimeSpan TIMESPAN = reader.GetDateTime(43) - DateTime.Now; //If the character has been deleted but still sitting if (reader.GetByte(42) == 1) { //Write state byte 1 for sitting Writer.Byte(1); //Display deletion time reamining Writer.DWord((double)TIMESPAN.TotalMinutes); //If time has expired delete the character if (TIMESPAN.TotalMinutes <= 0) { //Note: There are more ways like full delete but if someone got deleted by someone else's action //It will be easy to recover the character by changing the deletion byte in the database //0 = Not deleted , 1 = Deletion in progress, 2 = Deleted //Set deletion state so it wont be listed again. Systems.MsSQL.UpdateData("UPDATE character SET deleted='2' Where id='" + reader.GetInt32(0) + "'"); } } //If not deleted else { //State byte = 0 Standing Writer.Byte(0); } //Static Writer.Word(0); Writer.Byte(0); //Get normal equipped items upto slot 8 not in avatar slots Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 8, 0, false); //Get avatar type items Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 5, 1, false); } //Jobtype information int jobinfo = Systems.MsSQL.GetDataInt("SELECT * FROM users WHERE id='" + p.AccountName + "'", "jobtype"); Writer.Byte(Convert.ToByte(jobinfo)); } ms.Close(); //Return all bytes to the client return Writer.GetBytes(); }
void PrivateMessage() { //Wrap our code inside a try / catch to catch bad errors try { //Create a new mssql query to get information from messages table Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM message WHERE receiver='" + Character.Information.Name + "' ORDER BY time DESC"); //Set integer definition for count rows int count = ms.Count(); //If we have more then zero messages if (count > 0) { //Tmp test for desc / asc int Tempdate = 0; //Create a new packet writer PacketWriter Writer = new PacketWriter(); //Add the opcode for messages Writer.Create(Systems.SERVER_PM_MESSAGE); //Write static 1 byte Writer.Byte(1); //Write total messages count Writer.Byte(Convert.ToByte(count)); //Create new sql data reader for reading colums. using (SqlDataReader reader = ms.Read()) { //While our reader is reading information while (reader.Read()) { //Set definition for pm sender string MessageFrom = reader.GetString(1); //Set definition for pm receiver string MessageTo = reader.GetString(2); //Set definition for message string MessageContent = reader.GetString(3); //Set byte definition for status (Read unread) 0 = unread, 1 = read byte pmstatus = reader.GetByte(4); //Get date time when message have been send DateTime MessageDate = Convert.ToDateTime(reader.GetDateTime(5)); //Write text message sender Writer.Text(MessageFrom); //Write time //DateTime Time = reader.GetDateTime(5); //Time = Time..ToString(); Writer.DWord(0); //Write date Writer.DWord(Tempdate += 1); //Write byte status 0 = unread , 1 = read Writer.Byte(pmstatus); } //Send bytes to client client.Send(Writer.GetBytes()); } } //Close mssql query ms.Close(); } //If any error accures catch (Exception ex) { Console.WriteLine("Error reading private messages: {0}",ex); //Write the information to the debug file. Systems.Debugger.Write(ex); } }
//Listening main uses a single packet only so we write our packet here public static byte[] CharacterListing(player p) { //Create new sql query to get all characters except fully deleted Systems.MsSQL ms = new Systems.MsSQL("SELECT TOP 4 * FROM character WHERE account='" + p.AccountName + "' AND deleted='0' OR account='" + p.AccountName + "' AND deleted ='1'"); //Create new packet writer PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_CHARACTERSCREEN); // Select opcode Writer.Byte(2); // Static byte 2 Writer.Byte(1); // Static byte 1 Writer.Byte(ms.Count()); // Byte Character Count //Create new sql data reader using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { //While the reader is reading data from the database while (reader.Read()) { Writer.DWord(reader.GetInt32(3)); // DWord Skin Model Writer.Text(reader.GetString(2)); // String Name Writer.Byte(reader.GetByte(4)); // Byte Skin Volume Writer.Byte(reader.GetByte(5)); // Byte Level Writer.LWord(reader.GetInt64(12)); // Long Experience Writer.Word(reader.GetInt16(6)); // Word STR Writer.Word(reader.GetInt16(7)); // Word INT Writer.Word(reader.GetInt16(8)); // Attribute points Writer.DWord(reader.GetInt32(9)); // HP Writer.DWord(reader.GetInt32(10)); // MP //Set defnition for current time DateTime CurrentTime = DateTime.Now; //Subtract the current time with deletion time information TimeSpan TIMESPAN = reader.GetDateTime(43) - DateTime.Now; //If the character has been deleted but still sitting if (reader.GetByte(42) == 1) { //Write state byte 1 for sitting Writer.Byte(1); //Display deletion time reamining Writer.DWord((double)TIMESPAN.TotalMinutes); //If time has expired delete the character if (TIMESPAN.TotalMinutes <= 0) { //Note: There are more ways like full delete but if someone got deleted by someone else's action //It will be easy to recover the character by changing the deletion byte in the database //0 = Not deleted , 1 = Deletion in progress, 2 = Deleted //Set deletion state so it wont be listed again. Systems.MsSQL.UpdateData("UPDATE character SET deleted='2' Where id='" + reader.GetInt32(0) + "'"); } } //If not deleted else { //State byte = 0 Standing Writer.Byte(0); } //Static Writer.Word(0); Writer.Byte(0); //Get normal equipped items upto slot 8 not in avatar slots Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 8, 0, false); //Get avatar type items Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 5, 1, false); } //Jobtype information int jobinfo = Systems.MsSQL.GetDataInt("SELECT * FROM users WHERE id='" + p.AccountName + "'", "jobtype"); Writer.Byte(Convert.ToByte(jobinfo)); } ms.Close(); //Return all bytes to the client return(Writer.GetBytes()); }
void PrivateMessage() { //Wrap our code inside a try / catch to catch bad errors try { //Create a new mssql query to get information from messages table Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM message WHERE receiver='" + Character.Information.Name + "' ORDER BY time DESC"); //Set integer definition for count rows int count = ms.Count(); //If we have more then zero messages if (count > 0) { //Tmp test for desc / asc int Tempdate = 0; //Create a new packet writer PacketWriter Writer = new PacketWriter(); //Add the opcode for messages Writer.Create(Systems.SERVER_PM_MESSAGE); //Write static 1 byte Writer.Byte(1); //Write total messages count Writer.Byte(Convert.ToByte(count)); //Create new sql data reader for reading colums. using (SqlDataReader reader = ms.Read()) { //While our reader is reading information while (reader.Read()) { //Set definition for pm sender string MessageFrom = reader.GetString(1); //Set definition for pm receiver string MessageTo = reader.GetString(2); //Set definition for message string MessageContent = reader.GetString(3); //Set byte definition for status (Read unread) 0 = unread, 1 = read byte pmstatus = reader.GetByte(4); //Get date time when message have been send DateTime MessageDate = Convert.ToDateTime(reader.GetDateTime(5)); //Write text message sender Writer.Text(MessageFrom); //Write time //DateTime Time = reader.GetDateTime(5); //Time = Time..ToString(); Writer.DWord(0); //Write date Writer.DWord(Tempdate += 1); //Write byte status 0 = unread , 1 = read Writer.Byte(pmstatus); } //Send bytes to client client.Send(Writer.GetBytes()); } } //Close mssql query ms.Close(); } //If any error accures catch (Exception ex) { Console.WriteLine("Error reading private messages: {0}", ex); //Write the information to the debug file. Systems.Debugger.Write(ex); } }
public static byte[] Load(character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_PLAYERDATA); /////////////////////////////////////////////////////// Character basic info #region Basic info Writer.DWord(c.Ids.GetLoginID); Writer.DWord(c.Information.Model); Writer.Byte(c.Information.Volume); Writer.Byte(c.Information.Level); Writer.Byte(c.Information.Level); Writer.LWord(c.Information.XP); Writer.DWord(c.Information.SpBar); Writer.LWord(c.Information.Gold); Writer.DWord(c.Information.SkillPoint); Writer.Word(c.Information.Attributes); Writer.Byte(c.Information.BerserkBar); Writer.DWord(0); Writer.DWord(c.Stat.SecondHp); Writer.DWord(c.Stat.SecondMP); Writer.Bool(c.Information.Level < 20 ? true : false); #endregion /////////////////////////////////////////////////////// Character Player Kill Info #region Pk information //Mssql perfection reading with multiple data adapters... while this one is open i can still read anything else from the database //With no speed reduction... Systems.MsSQL checkpk = new Systems.MsSQL("SELECT * FROM character WHERE name ='" + c.Information.Name + "'"); using (System.Data.SqlClient.SqlDataReader getinfo = checkpk.Read()) { while (getinfo.Read()) { byte dailypk = getinfo.GetByte(48); byte pklevel = getinfo.GetByte(49); byte murderlevel = getinfo.GetByte(50); Writer.Byte(dailypk); Writer.Word(pklevel); Writer.DWord(murderlevel); if (murderlevel != 0) c.Information.Murderer = true; } } #endregion /////////////////////////////////////////////////////// Character Title #region Title Writer.Byte(c.Information.Title); #endregion /////////////////////////////////////////////////////// Character Pvpstate #region Pvp Writer.Byte(c.Information.Pvpstate); if (c.Information.Pvpstate > 0) c.Information.PvP = true; #endregion /////////////////////////////////////////////////////// Character Items #region Item Writer.Byte(c.Information.Slots); Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='0' AND storagetype='0'"); Writer.Byte(ms.Count()); using (System.Data.SqlClient.SqlDataReader msreader = ms.Read()) { while (msreader.Read()) { short amount = msreader.GetInt16(6); if (amount < 1) amount = 1; Systems.MsSQL.InsertData("UPDATE char_items SET quantity='" + amount + "' WHERE owner='" + c.Information.CharacterID + "' AND itemid='" + msreader.GetInt32(2) + "' AND id='" + msreader.GetInt32(0) + "' AND storagetype='0'"); if (msreader.GetByte(5) == 6) c.Information.Item.wID = Convert.ToInt32(msreader.GetInt32(2)); if (msreader.GetByte(5) == 7) { c.Information.Item.sID = msreader.GetInt32(2); c.Information.Item.sAmount = msreader.GetInt16(6); } Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), amount, msreader.GetInt32(7),msreader.GetInt32(0), msreader.GetInt32(9), msreader.GetInt32(30)); } } ms.Close(); //Avatar Writer.Byte(5); ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='1' AND storagetype='0'"); Writer.Byte(ms.Count()); using (System.Data.SqlClient.SqlDataReader msreader = ms.Read()) { while (msreader.Read()) { Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), msreader.GetInt16(6), msreader.GetInt32(7), msreader.GetInt32(0), msreader.GetInt32(9),msreader.GetInt32(30)); } } ms.Close(); Writer.Byte(0); // job mastery Writer.Byte(0x0B); Writer.Byte(0); Writer.Byte(0); #endregion /////////////////////////////////////////////////////// Mastery #region Mastery if (c.Information.Model <= 12000) { for (byte i = 1; i <= 8; i++) { Writer.Byte(1); Writer.DWord(c.Stat.Skill.Mastery[i]); Writer.Byte(c.Stat.Skill.Mastery_Level[i]); } } else { if (c.Information.Model >= 14000) { for (byte i = 1; i < 8; i++) { Writer.Byte(1); Writer.DWord(c.Stat.Skill.Mastery[i]); Writer.Byte(c.Stat.Skill.Mastery_Level[i]); } } } #endregion /////////////////////////////////////////////////////// Skills #region Skill Writer.Byte(2); Writer.Byte(0); for (int i = 1; i <= c.Stat.Skill.AmountSkill; i++) { Writer.Byte(1); Writer.DWord(c.Stat.Skill.Skill[i]); Writer.Byte(1); } Writer.Byte(2); #endregion /////////////////////////////////////////////////////// Quests #region Quest Writer.Word(1); // how many Quest ids completed/aborted Writer.DWord(1);// Quest id Writer.Byte(0);//number of Quests that are live #endregion Writer.Byte(0);//? for now /////////////////////////////////////////////////////// Talisman #region Talisman Writer.DWord(1);//new Writer.DWord(1);//new Writer.DWord(0);//? for now Writer.DWord(0x0C);//new #endregion /////////////////////////////////////////////////////// Position + id + speed #region Character id / Position / Speed Writer.DWord(c.Information.UniqueID); Writer.Byte(c.Position.xSec); Writer.Byte(c.Position.ySec); if (!File.FileLoad.CheckCave(c.Position.xSec, c.Position.ySec)) { Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec)); Writer.Float(c.Position.z); Writer.Float(Formule.packety(c.Position.y, c.Position.ySec)); } else { Writer.Float(Formule.cavepacketx(c.Position.x));// Added for cave Coords Writer.Float(c.Position.z); Writer.Float(Formule.cavepackety(c.Position.y));// Added for cave Coords } Writer.Word(0); // Angle Writer.Byte(0); Writer.Byte(1); Writer.Byte(0); Writer.Word(0); // Angle Writer.Word(0); Writer.Byte(0); Writer.Bool(false); //berserk Writer.Byte(0);//new ? Writer.Float(c.Speed.WalkSpeed); Writer.Float(c.Speed.RunSpeed); Writer.Float(c.Speed.BerserkSpeed); #endregion /////////////////////////////////////////////////////// Premium Tickets #region Premium ticket Writer.Byte(0); //ITEM_MALL_GOLD_TIME_SERVICE_TICKET_4W #endregion /////////////////////////////////////////////////////// GM Check + Name #region GM Check + Name Writer.Text(c.Information.Name); #endregion /////////////////////////////////////////////////////// Character jobs #region Character Job / hunter thief trader ( old job things ) //Writer info with job name when on job /*if (c.Job.state == 1 && c.Job.Jobname != "0") { Writer.Text(c.Job.Jobname); Writer.Byte(3); Writer.Byte(1); Writer.DWord(0); Writer.DWord(0); Writer.DWord(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); } //Write basic info noname if (c.Job.Jobname == "0") { Writer.Word(0); Writer.Byte(3); Writer.Byte(1); Writer.DWord(0); Writer.DWord(0); Writer.DWord(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); } //Write no info else { Writer.Word(0); Writer.Byte(0); Writer.Byte(1); Writer.DWord(0); Writer.DWord(0); Writer.DWord(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); }*/ #endregion #region New job system if (c.Job.state == 1) { Writer.Text(c.Job.Jobname); Writer.Byte(1); Writer.Byte(c.Job.level);//Level job Writer.Byte(c.Information.Level);//Level char Writer.Byte(1); // job level? myb Writer.LWord(0);// job exp probably y Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); } else { Writer.Word(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(2); // job type Writer.Byte(1); // job level? myb Writer.LWord(0);// job exp probably y Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); Writer.Byte(0); } #endregion /////////////////////////////////////////////////////// Pvp / Pk State #region Pvp / Pk State if (c.Information.Pvpstate == 1 || c.Information.Murderer) { Writer.Byte(0x22); } else if (c.Information.Pvpstate == 0 || !c.Information.Murderer) { Writer.Byte(0xFF); } #endregion /////////////////////////////////////////////////////// Guide Data #region Guide Data this data stacks on itself so if guide id is 0400000000000000 and next guide is 0300000000000000 the data to send is 0700000000000000 for (int i = 0; i < 8; ++i)//Main Guide Packet Info { Writer.Byte(c.Guideinfo.G1[i]);//Reads From Int Array } #endregion /////////////////////////////////////////////////////// Account / Gm Check #region Account ID + Gm Check Writer.DWord(c.Account.ID); Writer.Byte(0);//c.Information.GM #endregion /////////////////////////////////////////////////////// Quickbar + Autopotion #region Bar information Writer.Byte(7); PacketReader reader = new PacketReader(System.IO.File.ReadAllBytes(Environment.CurrentDirectory + @"\player\info\quickbar\" + c.Information.Name + ".dat")); PlayerQuickBar(reader, Writer); reader = new PacketReader(System.IO.File.ReadAllBytes(Environment.CurrentDirectory + @"\player\info\autopot\" + c.Information.Name + ".dat")); PlayerAutoPot(reader, Writer); #endregion /////////////////////////////////////////////////////// Academy #region Academy Writer.Byte(0); // number of player in academy /* // if we have players there Writer.Byte(1); Writer.Text("asd"); */ Writer.Byte(0);//added byte today for 1.310 Writer.Byte(0); Writer.Word(1); Writer.Word(1); Writer.Byte(0); Writer.Byte(1); #endregion return Writer.GetBytes(); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////// // Character listening packet //////////////////////////////////////////////////////////////////////////////////////////////////////////// public static byte[] CharacterListing(string name) { Systems.MsSQL ms = new Systems.MsSQL("SELECT TOP 4 * FROM character WHERE account='" + name + "'"); PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_CHARACTERSCREEN); // Select opcode Writer.Byte(2); // Static byte 2 Writer.Byte(1); // Static byte 1 Writer.Byte(ms.Count()); // Byte Character Count using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { Writer.DWord(reader.GetInt32(3)); // DWord Skin Model Writer.Text(reader.GetString(2)); // String Name Writer.Byte(reader.GetByte(4)); // Byte Skin Volume Writer.Byte(reader.GetByte(5)); // Byte Level Writer.LWord(reader.GetInt64(12)); // Long Experience Writer.Word(reader.GetInt16(6)); // Word STR Writer.Word(reader.GetInt16(7)); // Word INT Writer.Word(reader.GetInt16(8)); // Attribute points Writer.DWord(reader.GetInt32(9)); // HP Writer.DWord(reader.GetInt32(10)); // MP TimeSpan ts = Convert.ToDateTime(reader.GetDateTime(43)) - DateTime.Now; double time = ts.TotalMinutes; if (Math.Round(time) > 0) { Writer.Byte(1); Writer.DWord(Math.Round(time)); } else { Writer.Byte(0); } if (Math.Round(time) < 0 && DateTime.Now != reader.GetDateTime(43)) { Systems.MsSQL.UpdateData("UPDATE character SET deleted='1' Where id='" + reader.GetInt32(0) + "'"); } Writer.Word(0); Writer.Byte(0); Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 8, 0,false); Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 5, 1,false); } //Jobtype information int jobinfo = Systems.MsSQL.GetDataInt("SELECT * FROM users WHERE id='"+ name +"'", "jobtype"); Writer.Byte(Convert.ToByte(jobinfo)); } ms.Close(); return Writer.GetBytes(); }
public static byte[] GuildStorageData(character c) { Systems.MsSQL getstorage = new Systems.MsSQL("SELECT * FROM char_items WHERE guild_storage_id='" + c.Network.Guild.Guildid + "' AND storagetype='3'"); int itemcount = getstorage.Count(); PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_GUILD_STORAGE3); Writer.Byte(c.Network.Guild.StorageSlots); Writer.Byte(itemcount); if (itemcount != 0) { using (System.Data.SqlClient.SqlDataReader reader = getstorage.Read()) { while (reader.Read()) { Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30)); } } } getstorage.Close(); return Writer.GetBytes(); }
public void IngameLogin() { //Wrap our function inside a catcher try { //Create new packet reader PacketReader Reader = new PacketReader(PacketInformation.buffer); //Read character name from packet string CharacterName = Reader.Text(); //Close reader Reader.Close(); //Anti hack checking sql query Systems.MsSQL ms = new Systems.MsSQL("SELECT name FROM character WHERE account='" + Player.AccountName + "' AND name='" + CharacterName + "'"); //Check if the player account and character belongs together (count row). int checkinfo = ms.Count(); //If there's no result if (checkinfo == 0) { //Optional ban user here for hacking. //Disconnect the user if hack attempt client.Disconnect(this.client.clientSocket); return; } //If there's a result we continue loading else { //Create new character definition details Character = new character(); //Set character name Character.Information.Name = CharacterName; //Set player id Character.Account.ID = Player.ID; //Load player data PlayerDataLoad(); //Load job data LoadJobData(); //Check same character checkSameChar(CharacterName, Character.Information.UniqueID); //Check character stats CheckCharStats(Character); //Lock while we add new client lock (Systems.clients) { //Add new client Systems.clients.Add(this); } //Send login screen packet client.Send(Packet.LoginScreen()); //Send player data load start packet client.Send(Packet.StartPlayerLoad()); //Send player data load data client.Send(Packet.Load(Character)); //Send end load for player data client.Send(Packet.EndPlayerLoad()); //Update online status in database MsSQL.UpdateData("UPDATE character SET online='1' WHERE id='" + Character.Information.CharacterID + "'"); //Set PVP State MsSQL.UpdateData("UPDATE character SET Pvpstate='0' WHERE id='" + Character.Information.CharacterID + "'"); //Update server information (Players online). UpdateServerInfo(); //Open our timers for spawn checks etc. OpenTimer(); //Load blue data for character LoadBlues(Character); //Create new list for equiped items List <Global.slotItem> EquipedItems = new List <Global.slotItem>(); //For each equiped item under slot 13 for (byte q = 0; q < 13; q++) { //Add items to the list EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0)); } //Load blues for each item foreach (Global.slotItem sitem in EquipedItems) { //Check if the dictionary contains our blue id on item if (Data.ItemBlue.ContainsKey(sitem.dbID)) { //If exists, load blue for the item LoadBluesid(sitem.dbID); //If blue amount is not 0 if (Data.ItemBlue[sitem.dbID].totalblue != 0) { //Add blue to stats and information AddRemoveBlues(this, sitem, true); } } } //Default luck (Will be based on tickets increasment etc. this.Character.Blues.Luck = 100; } } //Catch bad exception errors catch (Exception ex) { //Write to debug log Systems.Debugger.Write(ex); } }
/////////////////////////////////////////////////////////////////////////// // Grab pet information packet /////////////////////////////////////////////////////////////////////////// public static byte[] Pet_Information_grab(pet_obj o, byte slot) { PacketWriter Writer = new PacketWriter(); Writer.Create(Systems.SERVER_PET_INFORMATION); try { ////////////////////////////////////////////////////////////////////////////////////// // Grabpet structure ////////////////////////////////////////////////////////////////////////////////////// Writer.DWord(o.UniqueID); //Unique ID Writer.DWord(o.Model); //Pet Model Writer.DWord(0x00006D); //Settings Writer.DWord(0x00006D); //Settings Writer.DWord(0x000047); //Settings 0x47 grab pet active 0 disabled if (o.Petname != "No name") //############### Writer.Text(o.Petname); // Name region else // Writer.Word(0); //############### Writer.Byte(o.Slots); //Slots count inventory pet ////////////////////////////////////////////////////////////////////////////////////// // Grabpet item inventory ////////////////////////////////////////////////////////////////////////////////////// Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + o.OwnerID + "' AND pet_storage_id='" + o.UniqueID + "'"); Writer.Byte(ms.Count()); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30)); } ms.Close(); ////////////////////////////////////////////////////////////////////////////////////// // Other ////////////////////////////////////////////////////////////////////////////////////// Writer.DWord(o.OwnerID); //Character ID Writer.Byte(slot); //Slot location of the pet ////////////////////////////////////////////////////////////////////////////////////// } catch (Exception ex) { Console.WriteLine("Pet load error: " + ex); } return Writer.GetBytes(); }