public static byte[] NewsPacket()
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(Opcodes.SERVER.SERVER_MAIN);
            Writer.Byte(0);
            Writer.Byte((byte)Definitions.Serverdef.News_List.Count);

            foreach (Definitions.Serverdef.NewsList n in Definitions.Serverdef.News_List)
            {
                Writer.Text(n.Title);
                Writer.Text(n.Article);
                Writer.Word(n.Year);
                Writer.Word(n.Month);
                Writer.Word(n.Day);
                Writer.Word(0); // Hour
                Writer.Word(0); // Minute
                Writer.Word(0); // Second
                Writer.Word(0); // MiliSecond
            }

            Writer.Word(0);

            return Writer.GetBytes();
        }
 public static byte[] FriendData(int target, byte type, string name, WorldMgr.character c, bool state)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_FRIEND_DATA);
     switch (type)
     {
         case 2:
             //Friend invite accepted
             Writer.Byte(2);
             Writer.DWord(target); //Id
             Writer.Text(c.Information.Name);  //Name
             Writer.DWord(c.Information.Model); //Model
             break;
         case 3:
             //Remove friend from own list
             Writer.Byte(3);
             Writer.DWord(target);
             break;
         case 4:
             //Fried online / offline update
             Writer.Byte(4);
             Writer.DWord(target);
             Writer.Byte(state);
             break;
         case 5:
             //Send private message..
             Writer.Byte(8);
             Writer.Text(name);
             Writer.DWord(0);
             Writer.DWord(0);//time info
             break;
     }
     return Writer.GetBytes();
 }
 public static byte[] ServerListPacket(int cliVersion)
 {
     //Create a new packet writer to create our packet
     PacketWriter W = new PacketWriter();
     //Write the opcode from server to client
     W.Create(Opcodes.SERVER.SERVER_SERVERLIST);
     //Structure of packet below
     W.Word(0x0201);
     W.Text("CLOWEN_DEV_PROJECT");
     W.Byte(0);
     //Repeat the following packet data below for each server in the list
     foreach (KeyValuePair<int, Definitions.Serverdef.ServerDetails> Gameservers in Definitions.Serverdef.Serverlist)
     {
         if (cliVersion == Definitions.Serverdef.SilkroadClientVersion)
         {
             W.Bool(true);
             W.Word(Gameservers.Value.id);
             W.Text(Gameservers.Value.name);
             W.Word(Gameservers.Value.usedSlots);
             W.Word(Gameservers.Value.maxSlots);
             W.Byte(Gameservers.Value.status);
         }
     }
     //Static 0 byte
     W.Byte(0);
     //Send the created packet back to the request (client).
     return W.GetBytes();
 }
 public static byte[] GuildSetTitle(int charid, string charname, string title)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_GUILD_SET_TITLE);
     Writer.DWord(charid);
     Writer.Text(charname);
     Writer.Text(title);
     return Writer.GetBytes();
 }
 public static byte[] JoinFormedRequest(WorldMgr.character requesting, WorldMgr.character owner)
 {
     //Create new packet writer
     PacketWriter Writer = new PacketWriter();
     //Add opcode for packet
     Writer.Create(OperationCode.SERVER_PARTY_JOIN_FORMED);
     //Character model information (Req).
     Writer.DWord(requesting.Information.Model);
     //Leader id
     Writer.DWord(requesting.Information.UniqueID);
     //Party id
     Writer.DWord(owner.Network.Party.ptid);
     //Static
     Writer.DWord(0);
     Writer.DWord(0);
     Writer.Byte(0);
     Writer.Byte(0xFF);
     //Write character unique id
     Writer.DWord(requesting.Information.UniqueID);
     //Write character name
     Writer.Text(requesting.Information.Name);
     //Write model information
     Writer.DWord(requesting.Information.Model);
     //Write level information
     Writer.Byte(requesting.Information.Level);
     //Static
     Writer.Byte(0xAA);
     //X and Y Sector
     Writer.Byte(requesting.Position.xSec);
     Writer.Byte(requesting.Position.ySec);
     //Static
     Writer.Word(0);
     Writer.Word(0);
     Writer.Word(0);
     Writer.Word(1);
     Writer.Word(1);
     //If character is in a guild
     if (requesting.Network.Guild != null)
         //Write guild name
         Writer.Text(requesting.Network.Guild.Name);
     //If character is not in a guild
     else
         //Write word value 0
         Writer.Word(0);
     //Static
     Writer.Byte(0);
     Writer.DWord(0);
     Writer.DWord(0);
     //Return all bytes to send
     return Writer.GetBytes();
 }
        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();
        }
 ///////////////////////////////////////////////////////////////////////////
 // Despawn Pet
 ///////////////////////////////////////////////////////////////////////////
 public static byte[] PetSpawn(int petid, byte type, CLGameServer.WorldMgr.pet_obj o)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_PLAYER_SPAWN_PET);   //Select Opcode
     Writer.DWord(petid);                              //Pet ID
     switch (type)
     {
         case 1:
             //Despawn pet
             Writer.Byte(1);
             break;
         case 2:
             //Rename pet respawn
             Writer.Byte(5);
             Writer.Text(o.Petname);
             break;
         case 3:
             //Attack pet respawn for exp info
             Writer.Byte(3);//Static
             Writer.LWord(o.exp);//New exp
             Writer.DWord(o.OwnerID);//Owner id
             break;
     }
     return Writer.GetBytes();
 }
 public static byte[] FriendGroupManage(string type,string groupname, short groupid, int targetid)
 {
     PacketWriter Writer = new PacketWriter();
     switch (type)
     {
         case "ADD":
             Writer.Create(OperationCode.SERVER_FRIEND_GROUP);
             Writer.Byte(1);
             Writer.Text(groupname);
             Writer.Word(groupid);
             break;
         case "REMOVE":
             Writer.Create(OperationCode.SERVER_FRIEND_GROUP_REMOVE);
             Writer.Byte(1);
             Writer.Word(groupid);
             break;
         case "MOVE":
             Writer.Create(OperationCode.SERVER_FRIEND_GROUP_MANAGE_FRIEND);
             Writer.Byte(1);
             Writer.DWord(targetid);
             Writer.Word(groupid);
             break;
     }
     return Writer.GetBytes();
 }
 public static byte[] AgentServer()
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_AGENTSERVER);
     Writer.Text("AgentServer");
     Writer.Bool(true);
     return Writer.GetBytes();
 }
 public static byte[] GateWayPacket()
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(Opcodes.SERVER.SERVER_INFO);
     Writer.Text("GatewayServer");
     Writer.Byte(0);
     return Writer.GetBytes();
 }
 public static byte[] PrivateMessageOpen(byte type, string Messageinfo)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_PM_OPEN);
     Writer.Byte(0x01);
     Writer.Byte(type);
     Writer.Text(Messageinfo);
     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();
        }
 public static byte[] MakeAliasError(string name, byte switchinfo)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_MAKE_ALIAS);
     Writer.Byte(2);
     Writer.Word(0);
     Writer.Byte(0);
     Writer.Text(name);
     return Writer.GetBytes();
 }
 public static byte[] FriendDecline(string name)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_FRIEND_INVITE);
     Writer.Byte(2);
     Writer.Word(0x640B);
     Writer.Byte(0);
     Writer.Word(0x000B);
     Writer.Text(name);
     return Writer.GetBytes();
 }
 public static byte[] ConnectSucces(string ip, short port, byte type)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(Opcodes.SERVER.SERVER_GATEWAY_LOGIN_RESPONSE);
     Writer.Byte(1);
     Writer.Byte(type);
     Writer.Byte(0);
     Writer.Word(0);
     Writer.Text(ip);
     Writer.Word(port);
     Writer.Byte(3);
     return Writer.GetBytes();
 }
        public static byte[] MakeAlias(string name, byte switchinfo)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(OperationCode.SERVER_MAKE_ALIAS);
            Writer.Byte(1);
            switch (switchinfo)
            {
                case 0:
                    Writer.Byte(0);
                    Writer.Text(name);
                    break;
                case 1:
                    Writer.Byte(1);
                    Writer.Text(name);
                    break;

                default:
                    Console.WriteLine("Alias Case: " + switchinfo);
                    break;
            }
            return Writer.GetBytes();
        }
 public static byte[] GuildSetOnline(WorldMgr.guild c, int memberid)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_GUILD_ONLINE);
     Writer.DWord(memberid);
     Writer.DWord(c.Guildid);
     Writer.Text(c.Name);
     Writer.Word(0);
     Writer.DWord(0);
     Writer.DWord(0);
     Writer.DWord(0);
     Writer.Byte(0);
     Writer.Byte(1);
     return Writer.GetBytes();
 }
 public void ListPartyMatching(List<WorldMgr.party> pt)
 {
     //Create new packet writer
     PacketWriter Writer = new PacketWriter();
     //Add opcode
     Writer.Create(OperationCode.SERVER_SEND_PARTYLIST);
     //Write static bytes
     Writer.Byte(1);
     Writer.Byte(4);
     Writer.Byte(0);
     //Write total count of partys
     Writer.Byte(pt.Count);
     //If party count higher is then zero
     if (pt.Count > 0)
     {
         //Repeat for each party in list of party's
         foreach (WorldMgr.party currpt in pt)
         {
             //Get player information using leaderid
             PlayerMgr s = Helpers.GetInformation.GetPlayer(currpt.LeaderID);
             //Write party id
             Writer.DWord(currpt.ptid);
             //Write leader id
             Writer.DWord(currpt.LeaderID);
             //Write charactername
             Writer.Text(s.Character.Information.Name);
             //Write static byte 1
             Writer.Byte(currpt.Race);
             //Write current party players count
             Writer.Byte(currpt.Members.Count);
             //Write party type
             Writer.Byte(currpt.Type);
             //Write party purpose
             Writer.Byte(currpt.ptpurpose);
             //Write min level required
             Writer.Byte(currpt.minlevel);
             //Write max level to join the party
             Writer.Byte(currpt.maxlevel);
             //Write party name
             Writer.Text3(currpt.partyname);
         }
     }
     //Send bytes to the client
     client.Send(Writer.GetBytes());
 }
        public static byte[] AccountBanned(string BanReason)
        {
            PacketWriter Write = new PacketWriter();
            Write.Create(Opcodes.SERVER.SERVER_GATEWAY_LOGIN_RESPONSE);

            Write.Byte(2);                  // ResultType
            Write.Byte(2);                  // ErrorType
            Write.Byte(1);                  // BannedType:[1 = block login, 2 = block login for inspection, 3 = block p2p trade, 4 = block chat]
            Write.Text(BanReason);
            Write.Word((short)DateTime.Now.Year);
            Write.Word((short)DateTime.Now.Month);
            Write.Word((short)DateTime.Now.Day);
            Write.Word((short)DateTime.Now.Hour);
            Write.Word((short)DateTime.Now.Minute);
            Write.Word((short)DateTime.Now.Second);
            Write.Word((short)DateTime.Now.Millisecond);
            return Write.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 byte[] Unique_Data(byte type, int mobid, string name)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(OperationCode.SERVER_UNIQUE_ANNOUNCE);
            Writer.Byte(type);
            switch (type)
            {
                case 5:
                    Writer.Byte(0x0C);
                    Writer.DWord(mobid);
                    break;
                case 6:
                    Writer.Byte(0x0C);
                    Writer.DWord(mobid);
                    Writer.Text(name);
                    break;
            }

            return Writer.GetBytes();
        }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // Chat Packet
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////
 public static byte[] ChatPacket(byte type, int id, string text, string name)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_CHAT);
     Writer.Byte(type);
     switch (type)
     {
         case 1:
             Writer.DWord(id);
             Writer.Text3(text);
             break;
         case 3:
             Writer.DWord(id);
             Writer.Text3(text);
             break;
         case 2:
             Writer.Text(name);
             Writer.Text3(text);
             break;
         case 4:
             Writer.Text(name);
             Writer.Text3(text);
             break;
         case 5:
             Writer.Text(name);
             Writer.Text3(text);
             break;
         case 6:
             Writer.Text(name);
             Writer.Text3(text);
             break;
         case 7:
             Writer.Text3(text);
             break;
         case 9:
             Writer.Text(name);
             Writer.Text3(text);
             break;
         case 11:
             Writer.Text(name);
             Writer.Text3(text);
             break;
     }
     return Writer.GetBytes();
 }
        public static byte[] RankListsActivityHunter()
        {
            DB ms = new DB("SELECT TOP 50 * FROM rank_job_activity WHERE job_type='3'");
            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();
        }
 public static byte[] SendWebMall(int Myid)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_ITEM_MALL_WEB);
     Writer.Byte(1);
     Writer.DWord(Myid);//Account ID for silk check
     Writer.Text("http://xcoding.net");//url need to check
     return Writer.GetBytes();
 }
        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();
        }
        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();
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // 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 static byte[] UnionInfo(PlayerMgr c)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(OperationCode.SERVER_GUILD_UNIONS);
            Writer.DWord(c.Character.Information.CharacterID);                // Union owner id
            Writer.DWord(7);                                                  // ??Need to check
            Writer.DWord(c.Character.Network.Guild.Guildid);                  // Union leader guild id
            Writer.Byte(c.Character.Network.Guild.Unions.Count);              // Count guilds in union
            //Get all guilds details
            foreach (int guild in c.Character.Network.Guild.Unions)
            {
                //Load other guild data
                DB guild_data = new DB("SELECT * FROM guild WHERE id='" + guild + "'");

                using (System.Data.SqlClient.SqlDataReader reader = guild_data.Read())
                {
                    while (reader.Read())
                    {
                        string Guildname = reader.GetString(1);
                        byte Guildlevel = reader.GetByte(2);
                        byte Guildmembercount = reader.GetByte(6);
                        int Ownerid = reader.GetInt32(9);

                        string Charname = DB.GetData("SELECT name FROM character WHERE id='" + Ownerid + "'", "name").ToString();
                        int Charmodel = Convert.ToInt32(DB.GetData("SELECT chartype FROM character WHERE id='" + Ownerid + "'", "chartype"));

                        Writer.DWord(guild);                        //Guild ID
                        Writer.Text(reader.GetString(1));           //Guildname
                        Writer.Byte(reader.GetByte(2));             //Guildlevel
                        Writer.Text(Charname);                      //Ownername
                        Writer.DWord(Charmodel);                    //Owner model
                        Writer.Byte(reader.GetByte(6));             //Guild member count

                        //Get guild details
                        PlayerMgr Guildmembers =Helpers.GetInformation.GetGuildPlayer(guild);
                        //Add clients that are online to union list
                        //Null check
                        if (Guildmembers != null)
                        {
                            foreach (int member in Guildmembers.Character.Network.Guild.Members)
                            {
                                //make sure member isnt 0
                                if (member != 0)
                                {
                                    //Get player details
                                    PlayerMgr getmember = Helpers.GetInformation.GetPlayerMainid(member);
                                    //Make sure that the player is there
                                    if (getmember != null)
                                    {
                                        //Add client to union list
                                        c.Character.Network.Guild.UnionMembers.Add(getmember.Character.Information.CharacterID);
                                        //Add to member
                                        if (c.Character.Information.CharacterID != getmember.Character.Information.CharacterID)
                                        {
                                            getmember.Character.Network.Guild.UnionMembers.Add(c.Character.Information.CharacterID);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return Writer.GetBytes();
        }
 public static byte[] WriteMessage(string Message)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(Opcodes.SERVER.SERVER_GATEWAY_LOGIN_RESPONSE);
     Writer.Byte(3);
     Writer.Byte(0x0F);
     Writer.Byte(2);
     Writer.Text(Message);
     Writer.Word(0);
     return Writer.GetBytes();
 }
 public static byte[] GameMaster(short FlagType, int Player = 0, int NPC_Mob = 0, int DroppedItem = 0, string Text = "")
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_GM);
     Writer.Bool(true);
     Writer.Word(FlagType);
     if (FlagType == 4)
     {
         // WorldStatus
         Writer.DWord(Player); // Player Count
         Writer.DWord(NPC_Mob); // NPC_Mob
         Writer.DWord(DroppedItem); // DroppedItem
     }
     else if (FlagType == 1)
     {
         Writer.Text(Text);
     }
     return Writer.GetBytes();
 }