public static ushort LoginUser(string aID, ref string aPass, ref WorldMgr.player aPlayer, bool localConnect) { if (Helpers.Manager.clients.Count >= Helpers.Manager.maxSlots) { return 0; // crowded } DB ms = new DB("SELECT * FROM users WHERE id = '" + aID + "'"); if (ms.Count() == 0) { ms.Close(); return 1; } ms = new DB("SELECT * FROM users WHERE id = '" + aID + "' AND password='******'"); if (ms.Count() == 0) { ms.Close(); return 5; } using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { if (reader.GetString(1).ToLower() == aID.ToLower()) // id { if (reader.GetByte(3) == 1) // online { ms.Close(); return 2; // already online } if (reader.GetInt32(5) == 1) // banned { aPass = reader.GetString(4); ms.Close(); return 3; // banned } if (aPlayer == null && localConnect) DB.query("UPDATE users SET online=1 WHERE userid='" + reader.GetInt32(0) + "'"); aPlayer = new WorldMgr.player(); aPlayer.AccountName = aID; aPlayer.Password = aPass; // Nukei: ?? whats the reason for saving password in memory ? aPlayer.ID = reader.GetInt32(0); aPlayer.pGold = reader.GetInt64(7); aPlayer.Silk = reader.GetInt32(6); aPlayer.SilkPrem = reader.GetInt32(9); aPlayer.wSlots = reader.GetByte(11); ms.Close(); return 4; } } } ms.Close(); return 6; // Bilinmeyen geri dönüş:Özel bir durum oluşmadı. (Mecburi Gönderim) }
public void JoinMerc() { try { DB ms = new DB("SELECT * FROM character_jobs WHERE character_name='" + Character.Information.Name + "'"); int checkjob = ms.Count(); if (checkjob == 0) { ///////////////////////////////////////////////////////////////////////////////////// PacketReader Reader = new PacketReader(PacketInformation.buffer); int id = Reader.Int32(); byte type = Reader.Byte(); ///////////////////////////////////////////////////////////////////////////////////// client.Send(Packet.InfoUpdate(1, Character.Information.CharacterID, 0)); client.Send(Packet.JoinMerchant(id, type)); ///////////////////////////////////////////////////////////////////////////////////// DB.query("INSERT INTO character_jobs (character_name, job_type) VALUES ('" + Character.Information.Name + "','2')"); ms.Close(); } else { // Not needed cant join job because excist } } catch (Exception ex) { Log.Exception(ex); } }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Private Message Open /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void PrivateMessageOpen() { try { PacketReader Reader = new PacketReader(PacketInformation.buffer); ///////////////////////////////////////////////////////////////////////////////////// byte type = Reader.Byte(); short typeget = (short)type; Reader.Close(); DB ms = new DB("SELECT * FROM message WHERE receiver='" + Character.Information.Name + "' AND idinfo ='" + typeget + "'"); using (SqlDataReader reader = ms.Read()) { while (reader.Read()) { string messageinfo = reader.GetString(3); client.Send(Packet.PrivateMessageOpen(type, messageinfo)); DB.query("UPDATE message SET status='1' WHERE receiver='" + Character.Information.Name + "' AND idinfo ='" + type + "'"); } } ms.Close(); } catch (Exception ex) { Log.Exception(ex); } }
public static byte[] PrivateMessageCheck(WorldMgr.character c) { DB ms = new DB("SELECT * FROM message WHERE receiver='" + c.Information.Name + "'"); PacketWriter Writer = new PacketWriter(); int count = ms.Count(); Writer.Create(OperationCode.SERVER_PM_MESSAGE); Writer.Byte(1);//Static Writer.Byte(Convert.ToByte(count));//Total count using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { string pmfrom = reader.GetString(1); string pmto = reader.GetString(2); string pmmessage = reader.GetString(3); byte pmstatus = reader.GetByte(4); DateTime pmdate = Convert.ToDateTime(reader.GetDateTime(5)); Writer.Text(pmfrom); // Message From Writer.DWord(0x8A070000); // date Writer.DWord(0xC7058401); // date Writer.Byte(pmstatus); // Status (0 = Unread) (1 = Read) } ms.Close(); } return Writer.GetBytes(); }
public static byte[] OpenWarehouse2(byte storageslots, WorldMgr.player c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_OPEN_WAREPROB); Writer.Byte(storageslots); DB ms = new DB("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(WorldMgr.character c) { DB ms = new DB("SELECT * FROM rank_honor"); PacketWriter Writer = new PacketWriter(); int countinfo = ms.Count(); Writer.Create(OperationCode.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(); }
/////////////////////////////////////////////////////////////////////////// // Grab pet information packet /////////////////////////////////////////////////////////////////////////// public static byte[] Pet_Information_grab(CLGameServer.WorldMgr.pet_obj o, byte slot) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.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 ////////////////////////////////////////////////////////////////////////////////////// DB ms = new DB("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) { Log.Exception(ex); } return Writer.GetBytes(); }
public static void PrivateItemPacket(PacketWriter Writer, int id, byte max, byte avatar, bool mspawn) { try { List<byte> slots = new List<byte>(); DB ms = new DB("SELECT * FROM char_items WHERE owner='" + id + "' AND slot >= '0' AND slot <= '" + max + "' AND inavatar='" + avatar + "' AND storagetype='0' AND quantity='1'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { int count = ms.Count(); Writer.Byte(count); while (reader.Read()) { byte slot = reader.GetByte(5); byte plusvalue = reader.GetByte(4); int itemid = reader.GetInt32(2); if (itemid != 0) { if (!slots.Exists(delegate (byte bk) { return bk == slot; })) { slots.Add(slot); } Writer.DWord(itemid); Writer.Byte(plusvalue); } } } ms.Close(); } catch (Exception ex) { Log.Exception(ex); } }
//########################################################################################### // Reverse scrolls //########################################################################################### void HandleReverse(int itemid ,byte select, int objectlocationid) { try { //Remove loc // add loc to case 7 if (Character.Position.Walking) return; if (Character.Action.PickUping) return; if (Character.Stall.Stallactive) return; Character.Information.Scroll = true; switch (select) { //Move to return point case 2: Send(Packet.StatePack(Character.Information.UniqueID, 0x0B, 0x01, false)); StartScrollTimer(1000); SavePlayerReturn(); break; //Move to last recall point case 3: DB ms = new DB("SELECT * FROM character_rev WHERE charname='" + Character.Information.Name + "'"); using (SqlDataReader reader = ms.Read()) { while (reader.Read()) { byte xSec = reader.GetByte(2); byte ySec = reader.GetByte(3); float x = reader.GetInt32(4); float z = reader.GetInt32(6); float y = reader.GetInt32(5); BuffAllClose(); DeSpawnMe(); ObjectDeSpawnCheck(); client.Send(Packet.TeleportOtherStart()); Character.Position.xSec = xSec; Character.Position.ySec = ySec; Character.Position.x = x; Character.Position.z = z; Character.Position.y = y; UpdateXY(); client.Send(Packet.TeleportImage(xSec, ySec)); Character.Teleport = true; Timer.Scroll = null; Character.Information.Scroll = false; } } ms.Close(); break; //Teleport to map location case 7: BuffAllClose(); DeSpawnMe(); ObjectDeSpawnCheck(); client.Send(Packet.TeleportOtherStart()); //TODO: Check formula coords are a bit off Character.Position.xSec = ObjData.Manager.ReverseData[objectlocationid].xSec; Character.Position.ySec = ObjData.Manager.ReverseData[objectlocationid].ySec; Character.Position.x = (float)ObjData.Manager.ReverseData[objectlocationid].x; Character.Position.z = (float)ObjData.Manager.ReverseData[objectlocationid].z; Character.Position.y = (float)ObjData.Manager.ReverseData[objectlocationid].y; UpdateXY(); client.Send(Packet.TeleportImage(ObjData.Manager.ReverseData[objectlocationid].xSec, ObjData.Manager.ReverseData[objectlocationid].ySec)); Character.Teleport = true; Timer.Scroll = null; Character.Information.Scroll = false; break; } } catch (Exception ex) { Log.Exception(ex); } }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Repair Items /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void HandleRepair(byte slot, int itemid) { try { //Here we use 2nd check for item durability to be sure the item repair is needed. //Check max durability on items < Need to check later for stats double checkdurability = ObjData.Manager.ItemBase[itemid].Defans.Durability; //Load our items DB ms = new DB("SELECT * FROM char_items WHERE owner='" + Character.Information.CharacterID + "'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { //Read durability from db int currentdurability = reader.GetInt32(7); //If durability is lower then item durability if (currentdurability < checkdurability) { //Send repair packet to client client.Send(Packet.RepairItems(slot, checkdurability)); //Update database information DB.query("UPDATE char_items SET durability='" + checkdurability + "' WHERE id='" + itemid + "' AND owner='" + Character.Information.CharacterID + "' AND storagetype='0'"); } } } ms.Close(); } catch (Exception ex) { Console.WriteLine("Repair item error {0}", ex); Log.Exception(ex); } }
public void LoadGuildMembers() { //Wrap our code in a try to catch bad exception errors try { //Load guild member id's LoadGuildMemberIds(Character.Network.Guild.Guildid, ref Character.Network.Guild.Members); //Repeat for each member in the guild member list foreach (int Guildmember in Character.Network.Guild.Members) { //Set new guild player information ObjData.guild_player PlayerGuild = new ObjData.guild_player(); //Set guildmember id PlayerGuild.MemberID = Guildmember; //Create new DB query to get player information DB ms = new DB("SELECT * FROM character WHERE id='" + Guildmember + "'"); //Create DB data reader using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { //While the reader is reading while (reader.Read()) { //Get player model PlayerGuild.Model = reader.GetInt32(3); //Get player xsector PlayerGuild.Xsector = reader.GetByte(16); //Get player ysector PlayerGuild.Ysector = reader.GetByte(17); //Get player level PlayerGuild.Level = reader.GetByte(5); //Get player name PlayerGuild.Name = reader.GetString(2); //Get player online state PlayerGuild.Online = (reader.GetInt32(47) == 1); //If player is online if (PlayerGuild.Online) { //Get detailed player information PlayerMgr sys = Helpers.GetInformation.GetPlayerMainid(Guildmember); //Make sure sys is not null if (sys != null) //Add the character client to the client list if (!this.Character.Network.Guild.MembersClient.Contains(sys.client)) Character.Network.Guild.MembersClient.Add(sys.client); } } } //Create new query to select from table guild_members ms = new DB("SELECT * FROM guild_members WHERE guild_member_id='" + Guildmember + "'"); //Create new sql data reader using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { //While the sql data reader is reading while (reader.Read()) { //Get player rights PlayerGuild.joinRight = (reader.GetByte(7) == 1); PlayerGuild.withdrawRight = (reader.GetByte(8) == 1); PlayerGuild.unionRight = (reader.GetByte(9) == 1); PlayerGuild.guildstorageRight = (reader.GetByte(10) == 1); PlayerGuild.noticeeditRight = (reader.GetByte(11) == 1); PlayerGuild.FWrank = reader.GetByte(6); //Get player donated gp PlayerGuild.DonateGP = reader.GetInt32(4); //Get player rank PlayerGuild.Rank = reader.GetByte(3); } } //Close DB ms.Close(); //Add our character to the guild member info Character.Network.Guild.MembersInfo.Add(PlayerGuild); } } //Catch bad exceptions catch (Exception ex) { //Write error to the console Console.WriteLine(ex); //Write error to the debug log file } }
public void LoadPlayerGuildInfo(bool logon) { try { DB ms = new DB("SELECT * FROM guild_members WHERE guild_member_id='" + Character.Information.CharacterID + "'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { Character.Network.Guild.Guildid = reader.GetInt32(1); Character.Network.Guild.GrantName = reader.GetString(5); Character.Network.Guild.FWrank = reader.GetByte(6); Character.Network.Guild.DonateGP = reader.GetInt32(4); Character.Network.Guild.LastDonate = Character.Network.Guild.DonateGP; Character.Network.Guild.joinRight = (reader.GetByte(7) == 1); Character.Network.Guild.withdrawRight = (reader.GetByte(8) == 1); Character.Network.Guild.unionRight = (reader.GetByte(9) == 1); Character.Network.Guild.guildstorageRight = (reader.GetByte(10) == 1); Character.Network.Guild.noticeeditRight = (reader.GetByte(11) == 1); } } ms = new DB("SELECT * FROM guild WHERE id='" + Character.Network.Guild.Guildid + "'"); using (System.Data.SqlClient.SqlDataReader reader2 = ms.Read()) { while (reader2.Read()) { Character.Network.Guild.Name = reader2.GetString(1); Character.Network.Guild.Level = reader2.GetByte(2); Character.Network.Guild.PointsTotal = reader2.GetInt32(3); Character.Network.Guild.NewsTitle = reader2.GetString(4); Character.Network.Guild.NewsMessage = reader2.GetString(5); Character.Network.Guild.StorageSlots = reader2.GetInt32(7); Character.Network.Guild.Wargold = reader2.GetInt32(8); Character.Network.Guild.StorageGold = reader2.GetInt64(11); Character.Network.Guild.GuildOwner = reader2.GetInt32(9); } } ms = new DB("SELECT * FROM guild_members WHERE guild_id='" + Character.Network.Guild.Guildid + "'"); Character.Network.Guild.TotalMembers = Convert.ToByte(ms.Count()); ms.Close(); //Set max players allowed in guild switch (Character.Network.Guild.Level) { case 1: Character.Network.Guild.MaxMembers = 20; break; case 2: Character.Network.Guild.MaxMembers = 25; break; case 3: Character.Network.Guild.MaxMembers = 30; break; case 4: Character.Network.Guild.MaxMembers = 35; break; case 5: Character.Network.Guild.MaxMembers = 50; break; } //Only load on player login if (logon) { LoadGuildMembers(); } } catch (Exception ex) { Console.WriteLine("LoadPlayerGuildInfo error {0}", ex); } }
///////////////////////////////////////////////////////////////////////////////// // Avatar Equiped ///////////////////////////////////////////////////////////////////////////////// void ItemAvatarEquip(byte fromSlot, byte toSlot) { #region Avatar equiped try { GetFreeSlot(); ObjData.slotItem toItem = new ObjData.slotItem(); ObjData.slotItem fromItem = GetItem((uint)Character.Information.CharacterID, fromSlot, 0); DB ms = new DB("SELECT * FROM char_items WHERE itemnumber='avatar" + toSlot + "' AND owner='" + Character.Information.CharacterID + "'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { toItem.ID = reader.GetInt32(2); toItem.dbID = reader.GetInt32(0); } } ms.Close(); if (toItem.ID != 0) return; if (fromItem.ID == 0) return; if (!CheckGender(Character.Information.Model, fromItem.ID)) { return; } else { string nonquery = "UPDATE char_items SET itemnumber='avatar" + toSlot + "',inAvatar='1',slot='" + toSlot + "' WHERE owner='" + Character.Information.CharacterID + "' AND itemnumber='item" + fromSlot + "' AND id='" + fromItem.dbID + "'"; DB.query(nonquery); } Send(Packet.MoveItemEnquipEffect(Character.Information.UniqueID, toSlot, fromItem.ID, 0)); client.Send(Packet.MoveItem(36, fromSlot, toSlot, 1, 0, "MOVE_INSIDE_INVENTORY")); } catch (Exception ex) { Log.Exception(ex); } #endregion }
void HandleAttackPet(byte slot, int ItemID) { try { //Check if player level is high enough to spawn. if (!CheckItemLevel(Character.Information.Level, ItemID)) { client.Send(Packet.MoveItemError(0x6C, 0x18)); } //If ok we continue to spawn the attack pet. else { //Our sql query DB ms = new DB("SELECT * FROM pets WHERE pet_itemid='" + ItemID + "' AND playerid='" + Character.Information.CharacterID + "'"); //Create new pet object. WorldMgr.pet_obj o = new WorldMgr.pet_obj(); //Open our data reader using (SqlDataReader reader = ms.Read()) { //Start reading data from the query above. while (reader.Read()) { Character.Attackpet.Uniqueid = reader.GetInt32(11); Character.Attackpet.Spawned = true; o.UniqueID = Character.Attackpet.Uniqueid; o.Model = ObjData.objectdata.GetItem(ObjData.Manager.ItemBase[ItemID].ObjectName); o.Level = reader.GetByte(13); o.exp = reader.GetInt64(14); o.x = Character.Position.x + Rnd.Next(1, 3); o.z = Character.Position.z; o.y = Character.Position.y + Rnd.Next(1, 3); o.xSec = Character.Position.xSec; o.ySec = Character.Position.ySec; o.OwnerID = Character.Information.CharacterID; o.OwnerName = Character.Information.Name; o.Walking = Character.Position.Walking; o.Petname = reader.GetString(3); o.Named = 3; o.Run = Character.Speed.RunSpeed; o.Walk = Character.Speed.WalkSpeed; o.Zerk = Character.Speed.BerserkSpeed; } ms.Close(); } //We set our pet active bool, so user cannot spawn multiple. Character.Attackpet.Active = true; o.Information = true; //Set all details above to definitions Character.Attackpet.Details = o; //Global spawn the pet Helpers.Manager.HelperObject.Add(o); //Spawn ourselfs o.SpawnMe(); //Send then packet required (Pet information block). client.Send(Packet.AttackPetStats(o, slot)); client.Send(Packet.AttackPetHGP(o)); //Update pet status to active (For relog purposes). DB.query("UPDATE pets SET pet_active='1' WHERE pet_unique='" + Character.Grabpet.Grabpetid + "' AND playerid='" + Character.Information.CharacterID + "'"); } } catch (Exception ex) { Log.Exception(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Get player inventory items (We will use this for stacking and checking). // So herer's the simple one ive made we can use to check player inventory ///////////////////////////////////////////////////////////////////////////////// public static List<byte> GetPlayerItems(WorldMgr.character c) { List<byte> items = new List<byte>(); DB ms = new DB("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { items.Add(reader.GetByte(5)); } } ms.Close(); return items; }
///////////////////////////////////////////////////////////////////////////////// // Avatar Unequiped ///////////////////////////////////////////////////////////////////////////////// void ItemAvatarUnEquip(byte fromSlot, byte toSlot) { #region Avatar unequiped try { GetFreeSlot(); ObjData.slotItem toItem = GetItem((uint)Character.Information.CharacterID, toSlot, 0); int avatarid = 0; int dbID = 0; if (toItem.ID != 0) toSlot = GetFreeSlot(); if (toSlot <= 12) return; DB ms = new DB("SELECT * FROM char_items WHERE itemnumber='avatar" + fromSlot + "' AND owner='" + Character.Information.CharacterID + "' AND inAvatar='1'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { avatarid = reader.GetInt32(2); dbID = reader.GetInt32(0); } } ms.Close(); client.Send(Packet.MoveItem(35, fromSlot, toSlot, 1,0,"MOVE_INSIDE_INVENTORY")); Send(Packet.MoveItemUnequipEffect(Character.Information.UniqueID, fromSlot, avatarid)); string nonquery = "UPDATE char_items SET itemnumber='item" + toSlot + "',slot='" + toSlot + "',inAvatar='0' WHERE owner='" + Character.Information.CharacterID + "' AND itemnumber='avatar" + fromSlot + "' AND id='" + dbID + "'"; DB.query(nonquery); } catch (Exception ex) { Log.Exception(ex); } #endregion }
public static byte[] CharacterDataLoad(WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.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(988); 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 //DB perfection reading with multiple data adapters... while this one is open i can still read anything else from the database //With no speed reduction... DB checkpk = new DB("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); DB ms = new DB("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; DB.query("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 DB("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 <= 7; 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 < 7; 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 (!FileDB.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(c.Information.GM); #endregion /////////////////////////////////////////////////////// Quickbar + Autopotion #region Bar information Writer.Byte(7); PlayerQuickBar(Writer, c.Information.CharacterID); PlayerAutoPot(Writer, c.Information.CharacterID); #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(); }
public static byte[] GuildStorageData(WorldMgr.character c) { DB getstorage = new DB("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(OperationCode.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[] RankListsActivityThief() { DB ms = new DB("SELECT TOP 50 * FROM rank_job_activity WHERE job_type='2'"); PacketWriter Writer = new PacketWriter(); int countinfo = ms.Count(); int i = 0; Writer.Create(OperationCode.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(); }
/////////////////////////////////////////////////////////////////////////// // Load grabpet /////////////////////////////////////////////////////////////////////////// public void HandleGrabPet(byte slot, int ItemID) { try { //Checks before we continue (Level check). if (!CheckItemLevel(Character.Information.Level, ItemID)) { client.Send(Packet.MoveItemError(0x6C, 0x18)); } //Else we continue else { //Our database query for loading pet information. DB ms = new DB("SELECT * FROM pets WHERE pet_itemid='" + ItemID + "' AND playerid='" + Character.Information.CharacterID + "'"); //Get detailed item information. ObjData.slotItem item = GetItem((uint)Character.Information.CharacterID, slot, 0); //Get item model information int model = ObjData.objectdata.GetItem(ObjData.Manager.ItemBase[ItemID].ObjectName); //Create new pet object WorldMgr.pet_obj o = new WorldMgr.pet_obj(); //Our sql data reader using (SqlDataReader reader = ms.Read()) { //While our reader is open we read all info below. while (reader.Read()) { int itemid = reader.GetInt32(7); Character.Grabpet.Grabpetid = item.dbID; o.UniqueID = Character.Grabpet.Grabpetid; o.Model = model; o.Slots = reader.GetByte(8); o.x = Character.Position.x + Rnd.Next(1, 3); o.z = Character.Position.z; o.y = Character.Position.y + Rnd.Next(1, 3); o.xSec = Character.Position.xSec; o.ySec = Character.Position.ySec; o.OwnerID = Character.Information.CharacterID; o.OwnerName = Character.Information.Name; o.Walking = Character.Position.Walking; o.Petname = reader.GetString(3); o.Named = 2; o.Run = Character.Speed.RunSpeed; o.Walk = Character.Speed.WalkSpeed; o.Zerk = Character.Speed.BerserkSpeed; } ms.Close(); } //We set our pet active bool, so user cannot spawn multiple. Character.Grabpet.Active = true; o.Information = true; //Set all details above to definitions Character.Grabpet.Details = o; //Global spawn the pet Helpers.Manager.HelperObject.Add(o); //Spawn ourselfs o.SpawnMe(); //Send then packet required (Pet information block). client.Send(Packet.Pet_Information_grab(o, slot)); //Update pet status to active (For relog purposes). DB.query("UPDATE pets SET pet_active='1' WHERE pet_unique='" + Character.Grabpet.Grabpetid + "' AND playerid='" + Character.Information.CharacterID + "'"); } } catch (Exception ex) { Log.Exception(ex); } }
//////////////////////////////////////////////////////////////////////////////////////////////////////////// // Character listening packet //////////////////////////////////////////////////////////////////////////////////////////////////////////// public static byte[] CharacterListing(string name) { DB ms = new DB("SELECT TOP 4 * FROM character WHERE account='" + name + "'"); PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_CHARACTERSCREEN); // Select opcode Writer.Byte(2); // Static byte 2 Writer.Byte(1); // Static byte 1 Writer.Byte(ms.Count()); // Byte WorldMgr.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)) { DB.query("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 byte jobinfo = Convert.ToByte(DB.GetData("SELECT * FROM users WHERE id='"+ name +"'", "jobtype")); Writer.Byte(jobinfo); } ms.Close(); return Writer.GetBytes(); }
public void PlayerDataLoad() { //Wrap our function inside a catcher try { ////////////////////////////////////////////////////////////////////////////////////// // Load Character Data ////////////////////////////////////////////////////////////////////////////////////// #region Character Data //If Character is null we return if (Character == null) return; //Set new sql query for character information DB ms = new DB("SELECT * FROM character WHERE name='" + Character.Information.Name + "'"); //Open new sql data reader using (SqlDataReader reader = ms.Read()) { //While our reader is reading the information while (reader.Read()) { // Character id information Character.Information.CharacterID = reader.GetInt32(0); Character.Account.ID = Player.ID; // Character model information Character.Information.Model = reader.GetInt32(3); Character.Information.Race = ObjData.Manager.ObjectBase[Character.Information.Model].Race; Character.Information.Volume = reader.GetByte(4); // Character base stats Character.Information.Level = reader.GetByte(5); Character.Stat.Strength = reader.GetInt16(6); Character.Stat.Intelligence = reader.GetInt16(7); Character.Information.Attributes = reader.GetInt16(8); Character.Stat.Hp = reader.GetInt32(9); Character.Stat.Mp = reader.GetInt32(10); // Character gold information Character.Information.Gold = reader.GetInt64(11); // Character Points Character.Information.XP = reader.GetInt64(12); Character.Information.SpBar = reader.GetInt32(13); Character.Information.SkillPoint = reader.GetInt32(14); // Character GM information Character.Information.GM = reader.GetByte(15); // Character Location Character.Position.xSec = reader.GetByte(16); Character.Position.ySec = reader.GetByte(17); Character.Position.x = reader.GetInt32(19); Character.Position.y = reader.GetInt32(20); Character.Position.z = reader.GetInt32(21); Character.Information.Place = reader.GetByte(40); // Character Main Stats Character.Stat.SecondHp = reader.GetInt32(22); Character.Stat.SecondMP = reader.GetInt32(23); Character.Stat.MinPhyAttack = reader.GetInt32(24); Character.Stat.MaxPhyAttack = reader.GetInt32(25); Character.Stat.MinMagAttack = reader.GetInt32(26); Character.Stat.MaxMagAttack = reader.GetInt32(27); Character.Stat.PhyDef = reader.GetInt16(28); Character.Stat.MagDef = reader.GetInt16(29); Character.Stat.Hit = reader.GetInt16(30); Character.Stat.Parry = reader.GetInt16(31); Character.Speed.WalkSpeed = reader.GetInt32(33); Character.Speed.RunSpeed = reader.GetInt32(34); Character.Speed.BerserkSpeed = reader.GetInt32(35); Character.Information.BerserkBar = reader.GetByte(36); Character.Stat.mag_Absorb = reader.GetInt16(38); Character.Stat.phy_Absorb = reader.GetInt16(39); // Character Other information Character.Information.Pvpstate = reader.GetByte(45); Character.Account.StorageGold = Player.pGold; Character.Account.StorageSlots = Player.wSlots; Character.Information.ExpandedStorage = reader.GetByte(53); Character.Information.Slots = reader.GetInt32(44); Character.Information.Title = reader.GetByte(41); Character.Information.Online = reader.GetInt32(47); Character.Information.StallModel = reader.GetInt32(52); // Character Guide Info Character.Guideinfo.G1 = new int[8];//Main Int Array Fro Guide Packet Character.Guideinfo.Gchk = new int[8];//Main Guide Check Packet Array //Read guide information string Guideread = reader.GetString(51); int t = 0; for (int g = 0; g < 8; ++g) { Character.Guideinfo.G1[g] = int.Parse(Guideread.Substring(t, 2), System.Globalization.NumberStyles.HexNumber, null); t = t + 2; } for (int gc = 0; gc < 8; ++gc) { Character.Guideinfo.Gchk[gc] = 0; } } } //Close our sql data reader ms.Close(); #endregion ////////////////////////////////////////////////////////////////////////////////////// // Set Skill And Mastery Information Max ////////////////////////////////////////////////////////////////////////////////////// #region Set Skill / Mastery Character.Stat.Skill.Mastery = new int[8]; Character.Stat.Skill.Mastery_Level = new byte[8]; Character.Stat.Skill.Skill = new int[20000]; #endregion ////////////////////////////////////////////////////////////////////////////////////// // Load Mastery Data ////////////////////////////////////////////////////////////////////////////////////// #region Load Mastery Data //New sql query to get mastery information ms = new DB("SELECT * FROM mastery WHERE owner='" + Character.Information.CharacterID + "'"); //Open new sql data reader using (SqlDataReader reader = ms.Read()) { //Set byte to 1 default byte c = 1; //While sql data reader is reading while (reader.Read()) { //We add the mastery information and level Character.Stat.Skill.Mastery[c] = reader.GetInt32(1); Character.Stat.Skill.Mastery_Level[c] = reader.GetByte(2); c++; } } //Close our sql data reader ms.Close(); #endregion ////////////////////////////////////////////////////////////////////////////////////// // Load Skill Data ////////////////////////////////////////////////////////////////////////////////////// #region Load Skill Data //Create new query to get skill data ms = new DB("SELECT * FROM saved_skills WHERE owner='" + Character.Information.CharacterID + "'"); //Get skill count from reader using (SqlDataReader reader = ms.Read()) Character.Stat.Skill.AmountSkill = ms.Count(); //Set default i to 1 int i = 1; //Open new sql data reder using (SqlDataReader reader = ms.Read()) { //While the reader is reading while (reader.Read()) { //Add the skill id Character.Stat.Skill.Skill[i] = reader.GetInt32(2); i++; } } //Close the sql data reader ms.Close(); #endregion ////////////////////////////////////////////////////////////////////////////////////// // Load Remaining information ////////////////////////////////////////////////////////////////////////////////////// #region Load Remaining Data //Update x / y UpdateXY(); //If character's current hp is lower then 1 if (Character.Stat.SecondHp < 1) { //Reset player location to return point, and fill the hp half of the max. Character.Stat.SecondHp = (Character.Stat.Hp / 2); Teleport_UpdateXYZ(Character.Information.Place); } //Set balande for player SetBalance(); //Check our file information CheckFile(); //Set stats for player SetStat(); #endregion } catch (Exception ex) { Log.Exception(ex); } }
public static byte[] SendFriendList(byte count, WorldMgr.character c) { PacketWriter Writer = new PacketWriter(); Writer.Create(OperationCode.SERVER_SEND_FRIEND_LIST); //Groups DB ms = new DB("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 DB("SELECT * FROM friends WHERE owner='"+ c.Information.CharacterID +"'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { int model = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "chartype")); int status = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "Online")); int charid = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "id")); string charname = DB.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(); }
void GetFriendsList() { //Wrap our function inside a catcher try { //Set new sql query to get friend information DB ms = new DB("SELECT * FROM friends WHERE owner='" + Character.Information.CharacterID + "'"); //Count our friends int count = ms.Count(); //If we have a friend in the list if (count > 0) { //Send our packet client.Send(Packet.SendFriendList(Convert.ToByte(count), Character)); //Open new sql data reader using (SqlDataReader reader = ms.Read()) { //While our sql data reader is reading while (reader.Read()) { //Get player id information of friend int getid = reader.GetInt32(2); //Get detailed information for our friend PlayerMgr sys = Helpers.GetInformation.GetPlayerid(getid); //If the character is online if (sys != null) { //We send online state change packet sys.client.Send(Packet.FriendData(Character.Information.CharacterID, 4, Character.Information.Name, Character, false)); } } } //Close our sql reader ms.Close(); } } catch (Exception ex) { Log.Exception(ex); } }
public static byte GetAmmoSlot(WorldMgr.character ch) { DB ms = new DB("SELECT * FROM char_items WHERE owner='" + ch.Information.CharacterID + "' AND (itemid='62' OR itemid='3655' OR itemid='10376' OR itemid='10727')"); byte ammo = 0; using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { ammo = reader.GetByte(5); } ms.Close(); return Convert.ToByte(ammo); } }
void LoadGrabPet() { //Wrap our function inside a catcher try { //Query check DB ms = new DB("SELECT * FROM pets WHERE playerid='" + Character.Information.CharacterID + "' AND pet_active='1'"); //Get active pet count int checkactive = ms.Count(); //If the player has an active grabpet if (checkactive > 0) { //Set new pet object WorldMgr.pet_obj o = new WorldMgr.pet_obj(); //Create new data reader for DB using (SqlDataReader reader = ms.Read()) { //While the sql data reader is reading while (reader.Read()) { //Get pet location inside the player inventory string slot = reader.GetString(12); //Check our slot inside the database int slotcheck = Convert.ToInt32(DB.GetData("SELECT * FROM char_items WHERE itemnumber='" + slot + "' AND owner='" + Character.Information.CharacterID + "' AND storagetype='0'", "slot")); //Set slot item information (item). ObjData.slotItem item = GetItem((uint)Character.Information.CharacterID, Convert.ToByte(slotcheck), 0); //Set model information of the pet int model = ObjData.item_database.GetItem(ObjData.Manager.ItemBase[item.ID].ObjectName); //Set id for the pet (First database value is always unique). Character.Grabpet.Grabpetid = item.dbID; //Set unique id o.UniqueID = Character.Grabpet.Grabpetid; //Pet object model o.Model = model; //Spawning location of the pet o.x = Character.Position.x + Rnd.Next(1, 3); o.z = Character.Position.z; o.y = Character.Position.y + Rnd.Next(1, 3); o.xSec = Character.Position.xSec; o.ySec = Character.Position.ySec; //Owner id information o.OwnerID = Character.Information.CharacterID; //Owner name information o.OwnerName = Character.Information.Name; //Set walking state o.Walking = Character.Position.Walking; //Set petname o.Petname = reader.GetString(3); //Set our switch case o.Named = 2; //Set speed of pet (Need to check speed on official). o.Run = Character.Speed.RunSpeed - 3; o.Walk = Character.Speed.WalkSpeed - 3; o.Zerk = Character.Speed.BerserkSpeed - 3; //Set grabpet as active so there cant be double spawns Character.Grabpet.Active = true; //Set object information to true o.Information = true; //Spawn the pet Helpers.Manager.HelperObject.Add(o); //Set global information for the pet Character.Grabpet.Details = o; //Send the visual packet for details of the pet management client.Send(Packet.Pet_Information_grab(o, Convert.ToByte(slotcheck))); //Spawn o.SpawnMe(); //Update state into database DB.query("UPDATE pets SET pet_active='1' WHERE pet_unique='" + Character.Grabpet.Grabpetid + "' AND playerid='" + Character.Information.CharacterID + "'"); } //Close sql reader ms.Close(); } //Set state Character.Grabpet.Active = true; } } catch (Exception ex) { Log.Exception(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Get Max Slots ///////////////////////////////////////////////////////////////////////////////// public byte GetFreeSlotMax() { #region Get Max Slots Available List<byte> ListSlot = new List<byte>(Character.Information.Slots); DB ms = new DB("SELECT * FROM char_items WHERE owner='" + Character.Information.CharacterID + "' AND slot >= '13' AND slot <= '" + Character.Information.Slots + "' AND inavatar='0'"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { ListSlot.Add(reader.GetByte(5)); } } ms.Close(); byte add = 0; for (byte i = 13; i < Character.Information.Slots; i++) { if (!GetCheckFreeSlot(ListSlot, i)) add++; } return add; #endregion }
void LoadJobData() { //Wrap our function inside a catcher try { //Get jobtype information from database int jobtype = Convert.ToInt32(DB.GetData("SELECT * FROM users WHERE id='" + Player.AccountName + "'", "jobtype")); //If we have a job so not 0 value if (jobtype > 0) { //Create our query to get all job information DB ms = new DB("SELECT * FROM character_jobs WHERE character_name='" + Character.Information.Name + "'"); //Open new sql data reader using (SqlDataReader reader = ms.Read()) { //While sql data reader is reading while (reader.Read()) { //Set global job name Character.Job.Jobname = reader.GetString(2); //Set global job type Character.Job.type = reader.GetByte(3); //Set global job exp Character.Job.exp = reader.GetInt32(4); //Set global job rank Character.Job.rank = reader.GetByte(5); //Set global job state Character.Job.state = reader.GetInt32(6); //Set global job level Character.Job.level = reader.GetByte(7); } } //Close our sql data reader. ms.Close(); } } catch (Exception ex) { Log.Exception(ex); } }
///////////////////////////////////////////////////////////////////////////////// // Add items to database ///////////////////////////////////////////////////////////////////////////////// public void AddItem(int itemid, short prob, byte slot, int id, int modelid) { #region Add item to db try { if (ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.BLADE || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.CH_SHIELD || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_SHIELD || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.BOW || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_AXE || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_CROSSBOW || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_DAGGER || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_DARKSTAFF || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_HARP || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_STAFF || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_SWORD || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_TSTAFF || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EU_TSWORD || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.GLAVIE || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.SPEAR || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.SWORD || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.EARRING || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.RING || ObjData.Manager.ItemBase[itemid].Itemtype == ObjData.item_database.ItemType.NECKLACE || ObjData.Manager.ItemBase[itemid].Type == ObjData.item_database.ArmorType.ARMOR || ObjData.Manager.ItemBase[itemid].Type == ObjData.item_database.ArmorType.GARMENT || ObjData.Manager.ItemBase[itemid].Type == ObjData.item_database.ArmorType.GM || ObjData.Manager.ItemBase[itemid].Type == ObjData.item_database.ArmorType.HEAVY || ObjData.Manager.ItemBase[itemid].Type == ObjData.item_database.ArmorType.LIGHT || ObjData.Manager.ItemBase[itemid].Type == ObjData.item_database.ArmorType.PROTECTOR || ObjData.Manager.ItemBase[itemid].Type == ObjData.item_database.ArmorType.AVATAR || ObjData.Manager.ItemBase[itemid].Type == ObjData.item_database.ArmorType.ROBE) { DB.query("Insert Into char_items (itemid,plusvalue,durability,owner,itemnumber,slot,storageacc,inavatar,storagetype,charbound) VALUES ('" + itemid + "','" + prob + "','" + ObjData.Manager.ItemBase[itemid].Defans.Durability + "','" + id + "','item" + slot + "','" + slot + "','" + Player.ID + "','0','0','" + ObjData.Manager.ItemBase[itemid].SoulBound + "' )"); } else if (ObjData.Manager.ItemBase[itemid].Pettype == ObjData.item_database.PetType.GRABPET) { DB.query("Insert Into char_items (itemid,plusvalue,durability,owner,itemnumber,slot,storageacc,charbound) VALUES ('" + itemid + "','" + 0 + "','" + ObjData.Manager.ItemBase[itemid].Defans.Durability + "','" + id + "','item" + slot + "','" + slot + "','" + Player.ID + "','" + ObjData.Manager.ItemBase[itemid].SoulBound + "')"); DB ms = new DB("SELECT TOP 1 * FROM char_items WHERE owner='" + Character.Information.CharacterID + "' ORDER BY id DESC"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { int idinfo = reader.GetInt32(0); DB.query("Insert Into pets (playerid, pet_type, pet_name, pet_state, pet_itemid, pet_active, pet_check, pet_unique) VALUES ('" + Character.Information.CharacterID + "','4','No name','1','" + itemid + "','0','item" + slot + "','" + idinfo + "')"); } } ms.Close(); } else if (ObjData.Manager.ItemBase[itemid].Pettype == ObjData.item_database.PetType.ATTACKPET) { DB.query("Insert Into char_items (itemid,plusvalue,durability,owner,itemnumber,slot,storageacc,charbound) VALUES ('" + itemid + "','" + 0 + "','" + ObjData.Manager.ItemBase[itemid].Defans.Durability + "','" + id + "','item" + slot + "','" + slot + "','" + Player.ID + "','" + ObjData.Manager.ItemBase[itemid].SoulBound + "')"); DB ms = new DB("SELECT TOP 1 * FROM char_items WHERE owner='" + Character.Information.CharacterID + "' ORDER BY id DESC"); using (System.Data.SqlClient.SqlDataReader reader = ms.Read()) { while (reader.Read()) { int idinfo = reader.GetInt32(0); DB.query("Insert Into pets (playerid, pet_type, pet_name, pet_state, pet_itemid, pet_active, pet_check, pet_unique) VALUES ('" + Character.Information.CharacterID + "','2','No name','1','" + itemid + "','0','item" + slot + "','" + idinfo + "')"); } } ms.Close(); } else if (ObjData.Manager.ItemBase[itemid].Etctype == ObjData.item_database.EtcType.STONES) { DB.query("Insert Into char_items (itemid,plusvalue,durability,owner,itemnumber,slot,storageacc,inavatar,storagetype,charbound) VALUES ('" + itemid + "','" + 0 + "','" + 0 + "','" + id + "','item" + slot + "','" + slot + "','" + Player.ID + "','0','0','" + ObjData.Manager.ItemBase[itemid].SoulBound + "' )"); } else if (ObjData.Manager.ItemBase[itemid].Etctype == ObjData.item_database.EtcType.MONSTERMASK) { DB.query("Insert Into char_items (itemid,plusvalue,durability,owner,itemnumber,slot,storageacc,modelid,charbound) VALUES ('" + itemid + "','" + 0 + "','" + 0 + "','" + id + "','item" + slot + "','" + slot + "','" + Player.ID + "','" + modelid + "','" + ObjData.Manager.ItemBase[itemid].SoulBound + "' )"); } else { if (prob < 2) prob = 1; DB.query("Insert Into char_items (itemid,quantity,owner,itemnumber,slot,storageacc,charbound) VALUES ('" + itemid + "','" + prob + "','" + id + "','item" + slot + "','" + slot + "','" + Player.ID + "','" + ObjData.Manager.ItemBase[itemid].SoulBound + "' )"); } } catch (Exception ex) { Console.WriteLine("DB Item add error: ", ex); } #endregion }
void LoadTicket(WorldMgr.character c) { //We wrap our function inside a catcher try { //First we get our data from the database. DB ms = new DB("SELECT * FROM character_tickets WHERE owner ='" + c.Information.CharacterID + "' AND active='1'"); //Check if we have a active ticket int CheckActive = ms.Count(); //Now if we have one active we continue if (CheckActive == 1) { //Open new sql data reader using (SqlDataReader reader = ms.Read()) { //While sql data reader is reading while (reader.Read()) { //Set our ticket to active so they cannot use double premium tickets Character.Premium.Active = true; //We can use Character.Information.CharacterID but on safe side we read from db to make sure. Character.Premium.OwnerID = reader.GetInt32(1); //Get the id information to calculate the % gaining and type etc etc.. Character.Premium.TicketItemID = reader.GetInt32(2); //Get unique id (incase we need it). Character.Premium.TicketID = reader.GetInt32(0); //Get the start time of the ticket Character.Premium.StartTime = reader.GetDateTime(3); } } //Close our data reader ms.Close(); //Calculate remaining time left. TimeSpan Timecheck = Convert.ToDateTime(Character.Premium.StartTime) - DateTime.Now; double TimeRemaining = Timecheck.TotalMinutes; //Finally we send our packet to the user (Icon). client.Send(Packet.PremiumTicketData(Character.Premium.TicketItemID, Convert.ToInt32(TimeRemaining))); } } catch (Exception ex) { Log.Exception(ex); } }