Exemplo n.º 1
0
        public static byte[] RankListsDonateHunter()
        {
            Systems.MsSQL ms        = new Systems.MsSQL("SELECT TOP 50 * FROM rank_job_donate WHERE job_type='2'");
            PacketWriter  Writer    = new PacketWriter();
            int           countinfo = ms.Count();
            int           i         = 0;

            Writer.Create(Systems.SERVER_RANK_LISTS);
            Writer.Byte(1);
            Writer.Byte(3);
            Writer.Byte(1);
            Writer.Byte(Convert.ToByte(countinfo));

            using (SqlDataReader reader = ms.Read())
            {
                for (i = 0; i < countinfo;)
                {
                    while (reader.Read())
                    {
                        byte   rank   = reader.GetByte(2);
                        string name   = reader.GetString(3);
                        byte   level  = reader.GetByte(4);
                        int    donate = reader.GetInt32(5);

                        Writer.Byte(rank);
                        Writer.Text(name);
                        Writer.Byte(level);
                        Writer.DWord(donate);
                        i++;
                    }
                }
                ms.Close();
            }
            return(Writer.GetBytes());
        }
Exemplo n.º 2
0
        public static byte[] SendFriendList(byte count, character c)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(Systems.SERVER_SEND_FRIEND_LIST);
            //Groups
            Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM friends_groups WHERE playerid='"+ c.Information.CharacterID  +"'");
            int groupcount = ms.Count();
            groupcount = groupcount + 1;
            Writer.Byte((byte)groupcount);
            
            Writer.Word(0);
            Writer.Text("NonClassified");
            int groupid = 0;
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    string groupname = reader.GetString(2);
                    groupid = groupid +1;
                    Writer.Word((short)groupid);
                    Writer.Text(groupname);
                }
            }
            //Friends
            Writer.Byte(count);
            ms = new Systems.MsSQL("SELECT * FROM friends WHERE owner='"+ c.Information.CharacterID  +"'");
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    int model       = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "chartype");
                    int status      = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "Online");
                    int charid      = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "id");
                    string charname = Systems.MsSQL.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "name");
                    string groupname = reader.GetString(4);
                    
                    Writer.DWord(charid);               // Friend CharID
                    Writer.Text(charname);              // Friend Name
                    Writer.DWord(model);                // Friend Model Type
                    if (groupname == "none")
                        Writer.Word(0);
                    else
                        Writer.Word(groupid);

                    if (status != 0)
                    {
                        Writer.Byte(0);                 // Friend is online
                    }
                    else
                    {
                        Writer.Byte(1);                 // Inverted, Friend is offline
                    }
                }
                reader.Close();
            }
            ms.Close();
            return Writer.GetBytes();
        }
Exemplo n.º 3
0
 void PrivateMessageOpen()
 {
     try
     {
         //Create new packet reader for reading packet information
         PacketReader Reader = new PacketReader(PacketInformation.buffer);
         //Create new packetwriter for writing our packet
         PacketWriter Writer = new PacketWriter();
         //Read selected message id from packet
         byte SelectedMessageID = Reader.Byte();
         //Close packet reader
         Reader.Close();
         //Create new mssql query for getting the messages
         Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM message WHERE receiver='" + Character.Information.Name + "' ORDER BY time DESC");
         //Create new integer for calculating what message must be selected.
         int Messageid = -1;
         //Create new sql data reader for reading column information
         using (SqlDataReader reader = ms.Read())
         {
             //While our sql data reader is reading
             while (reader.Read())
             {
                 //Read message content
                 string MessageContent = reader.GetString(3);
                 //Increase our message id integer
                 Messageid += 1;
                 //Check if the messageid equals to our selected message
                 if (Messageid == SelectedMessageID)
                 {
                     //Add opcode to packet
                     Writer.Create(Systems.SERVER_PM_OPEN);
                     //Write static byte
                     Writer.Byte(1);
                     //Write byte selected message id
                     Writer.Byte(SelectedMessageID);
                     //Write text message content
                     Writer.Text(MessageContent);
                     //Send packet to client
                     client.Send(Writer.GetBytes());
                     //Update message state to read in database
                     MsSQL.UpdateData("UPDATE message SET status='1' WHERE receiver='" + Character.Information.Name + "' AND message ='" + MessageContent + "'");
                 }
             }
         }
         //Close mssql
         ms.Close();
     }
     //If an error accures we catch it here
     catch (Exception ex)
     {
         //Write information to the console
         Console.WriteLine("Error PrivateMessages.cs : {0}" + ex);
         //Write information to the debug logger
         Systems.Debugger.Write(ex);
     }
 }
Exemplo n.º 4
0
        ///////////////////////////////////////////////////////////////////////////
        // Grab pet information packet
        ///////////////////////////////////////////////////////////////////////////
        public static byte[] Pet_Information_grab(pet_obj o, byte slot)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(Systems.SERVER_PET_INFORMATION);
            try
            {
                //////////////////////////////////////////////////////////////////////////////////////
                // Grabpet structure
                //////////////////////////////////////////////////////////////////////////////////////
                Writer.DWord(o.UniqueID);                   //Unique ID
                Writer.DWord(o.Model);                      //Pet Model
                Writer.DWord(0x00006D);                     //Settings
                Writer.DWord(0x00006D);                     //Settings
                Writer.DWord(0x000047);                     //Settings 0x47 grab pet active 0 disabled
                if (o.Petname != "No name")                 //###############
                {
                    Writer.Text(o.Petname);                 // Name region
                }
                else                                        //
                {
                    Writer.Word(0);                         //###############
                }
                Writer.Byte(o.Slots);                       //Slots count inventory pet
                //////////////////////////////////////////////////////////////////////////////////////
                // Grabpet item inventory
                //////////////////////////////////////////////////////////////////////////////////////
                Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + o.OwnerID + "' AND pet_storage_id='" + o.UniqueID + "'");
                Writer.Byte(ms.Count());
                using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
                {
                    while (reader.Read())
                    {
                        Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30));
                    }
                }
                ms.Close();
                //////////////////////////////////////////////////////////////////////////////////////
                // Other
                //////////////////////////////////////////////////////////////////////////////////////
                Writer.DWord(o.OwnerID);                    //Character ID
                Writer.Byte(slot);                          //Slot location of the pet
                //////////////////////////////////////////////////////////////////////////////////////
            }
            catch (Exception ex)
            {
                Console.WriteLine("Pet load error: " + ex);
            }
            return(Writer.GetBytes());
        }
Exemplo n.º 5
0
        public static byte[] OpenWarehouse2(byte storageslots, player c)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(Systems.SERVER_OPEN_WAREPROB);
            Writer.Byte(storageslots);

            Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE storageacc='" + c.ID + "' AND storagetype='1'");

            Writer.Byte(ms.Count());
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())

                    Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9),reader.GetInt32(30));
            }
            ms.Close();
            return Writer.GetBytes();
        }
Exemplo n.º 6
0
        public static byte[] HonorRank(character c)
        {
            Systems.MsSQL ms        = new Systems.MsSQL("SELECT * FROM rank_honor");
            PacketWriter  Writer    = new PacketWriter();
            int           countinfo = ms.Count();

            Writer.Create(Systems.SERVER_HONOR_RANK);
            Writer.Byte(1);
            int i = 0;

            Writer.Byte(Convert.ToByte(countinfo));
            using (SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    byte   rankicon   = reader.GetByte(1);
                    string rankname   = reader.GetString(2);
                    byte   ranklevel  = reader.GetByte(3);
                    byte   ranklevelc = reader.GetByte(4);
                    int    graduatesc = reader.GetInt32(5);
                    int    rankposc   = reader.GetInt32(6);

                    Writer.DWord(i + 1);
                    Writer.Byte(rankicon);
                    Writer.Text(rankname);
                    Writer.Byte(ranklevel);
                    Writer.Byte(ranklevelc);
                    Writer.DWord(graduatesc);
                    //If player has no guild, we write a 0 word value
                    if (c.Network.Guild.Name == null)
                    {
                        Writer.Word(0);
                    }
                    //If player has a guild we write the guild name.
                    else
                    {
                        Writer.Text(c.Network.Guild.Name);
                    }
                    i++;
                }
                ms.Close();
            }
            return(Writer.GetBytes());
        }
Exemplo n.º 7
0
        public static byte[] HonorRank(character c)
        {
            Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM rank_honor");
            PacketWriter Writer = new PacketWriter();
            int countinfo = ms.Count();

            Writer.Create(Systems.SERVER_HONOR_RANK);
            Writer.Byte(1);
            int i = 0;
            Writer.Byte(Convert.ToByte(countinfo));
            using (SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    byte rankicon = reader.GetByte(1);
                    string rankname = reader.GetString(2);
                    byte ranklevel = reader.GetByte(3);
                    byte ranklevelc = reader.GetByte(4);
                    int graduatesc = reader.GetInt32(5);
                    int rankposc = reader.GetInt32(6);

                    Writer.DWord(i + 1);
                    Writer.Byte(rankicon);
                    Writer.Text(rankname);
                    Writer.Byte(ranklevel);
                    Writer.Byte(ranklevelc);
                    Writer.DWord(graduatesc);
                    //If player has no guild, we write a 0 word value
                    if (c.Network.Guild.Name == null)
                    {
                        Writer.Word(0);
                    }
                    //If player has a guild we write the guild name.
                    else
                    {
                        Writer.Text(c.Network.Guild.Name);
                    }
                    i++;
                }
                ms.Close();
            }
            return Writer.GetBytes();
        }
Exemplo n.º 8
0
        public static byte[] OpenWarehouse2(byte storageslots, player c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(Systems.SERVER_OPEN_WAREPROB);
            Writer.Byte(storageslots);

            Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE storageacc='" + c.ID + "' AND storagetype='1'");

            Writer.Byte(ms.Count());
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30));
                }
            }
            ms.Close();
            return(Writer.GetBytes());
        }
Exemplo n.º 9
0
        public static byte[] GuildStorageData(character c)
        {
            Systems.MsSQL getstorage = new Systems.MsSQL("SELECT * FROM char_items WHERE guild_storage_id='" + c.Network.Guild.Guildid + "' AND storagetype='3'");
            int           itemcount  = getstorage.Count();
            PacketWriter  Writer     = new PacketWriter();

            Writer.Create(Systems.SERVER_GUILD_STORAGE3);
            Writer.Byte(c.Network.Guild.StorageSlots);
            Writer.Byte(itemcount);
            if (itemcount != 0)
            {
                using (System.Data.SqlClient.SqlDataReader reader = getstorage.Read())
                {
                    while (reader.Read())
                    {
                        Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30));
                    }
                }
            }
            getstorage.Close();
            return(Writer.GetBytes());
        }
Exemplo n.º 10
0
        public static byte[] RankListsActivityHunter()
        {
            Systems.MsSQL ms = new Systems.MsSQL("SELECT TOP 50 * FROM rank_job_activity WHERE job_type='3'");
            PacketWriter Writer = new PacketWriter();
            int countinfo = ms.Count();
            int i = 0;

            Writer.Create(Systems.SERVER_RANK_LISTS);
            Writer.Byte(1);
            Writer.Byte(1);
            Writer.Byte(0);
            Writer.Byte(Convert.ToByte(countinfo));

            using (SqlDataReader reader = ms.Read())
            {
                for (i = 0; i < countinfo; )
                {
                    while (reader.Read())
                    {
                        byte rank = reader.GetByte(2);
                        string name = reader.GetString(3);
                        byte level = reader.GetByte(4);
                        int exp = reader.GetInt32(5);
                        byte title = reader.GetByte(6);

                        Writer.Byte(rank);
                        Writer.Text(name);
                        Writer.Byte(level);
                        Writer.DWord(exp);
                        Writer.Byte(title);
                        i++;
                    }
                }
                ms.Close();
            }
            return Writer.GetBytes();
        }
Exemplo n.º 11
0
 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
             Global.guild_player PlayerGuild = new Global.guild_player();
             //Set guildmember id
             PlayerGuild.MemberID = Guildmember;
             //Create new mssql query to get player information
             Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM character WHERE id='" + Guildmember + "'");
             //Create mssql 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
                         Systems sys = GetPlayerMainid(Guildmember);
                         //Make sure sys is not null
                         if (sys != null)
                         {
                             //Add the character client to the client list
                             this.Character.Network.Guild.MembersClient.Add(sys.client);
                         }
                     }
                 }
             }
             //Create new query to select from table guild_members
             ms = new Systems.MsSQL("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 mssql
             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
         Systems.Debugger.Write(ex);
     }
 }
Exemplo n.º 12
0
        public static byte[] UnionInfo(Systems c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(Systems.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
                Systems.MsSQL guild_data = new Systems.MsSQL("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  = Systems.MsSQL.GetData("SELECT name FROM character WHERE id='" + Ownerid + "'", "name").ToString();
                        int    Charmodel = Convert.ToInt32(Systems.MsSQL.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
                        Systems Guildmembers = Systems.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
                                    Systems getmember = Systems.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());
        }
Exemplo n.º 13
0
 void PrivateMessage()
 {
     //Wrap our code inside a try / catch to catch bad errors
     try
     {
         //Create a new mssql query to get information from messages table
         Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM message WHERE receiver='" + Character.Information.Name + "' ORDER BY time DESC");
         //Set integer definition for count rows
         int count = ms.Count();
         //If we have more then zero messages
         if (count > 0)
         {
             //Tmp test for desc / asc
             int Tempdate = 0;
             //Create a new packet writer
             PacketWriter Writer = new PacketWriter();
             //Add the opcode for messages
             Writer.Create(Systems.SERVER_PM_MESSAGE);
             //Write static 1 byte
             Writer.Byte(1);
             //Write total messages count
             Writer.Byte(Convert.ToByte(count));
             //Create new sql data reader for reading colums.
             using (SqlDataReader reader = ms.Read())
             {
                 //While our reader is reading information
                 while (reader.Read())
                 {
                     //Set definition for pm sender
                     string MessageFrom = reader.GetString(1);
                     //Set definition for pm receiver
                     string MessageTo = reader.GetString(2);
                     //Set definition for message
                     string MessageContent = reader.GetString(3);
                     //Set byte definition for status (Read unread) 0 = unread, 1 = read
                     byte pmstatus = reader.GetByte(4);
                     //Get date time when message have been send
                     DateTime MessageDate = Convert.ToDateTime(reader.GetDateTime(5));
                     //Write text message sender
                     Writer.Text(MessageFrom);
                     //Write time
                     //DateTime Time = reader.GetDateTime(5);
                     //Time = Time..ToString();
                     Writer.DWord(0);
                     //Write date
                     Writer.DWord(Tempdate += 1);
                     //Write byte status 0 = unread , 1 = read
                     Writer.Byte(pmstatus);
                 }
                 //Send bytes to client
                 client.Send(Writer.GetBytes());
             }
         }
         //Close mssql query
         ms.Close();
     }
     //If any error accures
     catch (Exception ex)
     {
         Console.WriteLine("Error reading private messages: {0}",ex);
         //Write the information to the debug file.
         Systems.Debugger.Write(ex);
     }
 }
Exemplo n.º 14
0
 void PrivateMessageOpen()
 {
     try
     {
         //Create new packet reader for reading packet information
         PacketReader Reader = new PacketReader(PacketInformation.buffer);
         //Create new packetwriter for writing our packet
         PacketWriter Writer = new PacketWriter();
         //Read selected message id from packet
         byte SelectedMessageID = Reader.Byte();
         //Close packet reader
         Reader.Close();
         //Create new mssql query for getting the messages
         Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM message WHERE receiver='" + Character.Information.Name + "' ORDER BY time DESC");
         //Create new integer for calculating what message must be selected.
         int Messageid = -1;
         //Create new sql data reader for reading column information
         using (SqlDataReader reader = ms.Read())
         {
             //While our sql data reader is reading
             while (reader.Read())
             {
                 //Read message content
                 string MessageContent = reader.GetString(3);
                 //Increase our message id integer
                 Messageid += 1;
                 //Check if the messageid equals to our selected message
                 if (Messageid == SelectedMessageID)
                 {
                     //Add opcode to packet
                     Writer.Create(Systems.SERVER_PM_OPEN);
                     //Write static byte
                     Writer.Byte(1);
                     //Write byte selected message id
                     Writer.Byte(SelectedMessageID);
                     //Write text message content
                     Writer.Text(MessageContent);
                     //Send packet to client
                     client.Send(Writer.GetBytes());
                     //Update message state to read in database
                     MsSQL.UpdateData("UPDATE message SET status='1' WHERE receiver='" + Character.Information.Name + "' AND message ='" + MessageContent + "'");
                 }
             }
         }
         //Close mssql
         ms.Close();
     }
     //If an error accures we catch it here
     catch (Exception ex)
     {
         //Write information to the console
         Console.WriteLine("Error PrivateMessages.cs : {0}" + ex);
         //Write information to the debug logger
         Systems.Debugger.Write(ex);
     }
 }
Exemplo n.º 15
0
 void PrivateMessage()
 {
     //Wrap our code inside a try / catch to catch bad errors
     try
     {
         //Create a new mssql query to get information from messages table
         Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM message WHERE receiver='" + Character.Information.Name + "' ORDER BY time DESC");
         //Set integer definition for count rows
         int count = ms.Count();
         //If we have more then zero messages
         if (count > 0)
         {
             //Tmp test for desc / asc
             int Tempdate = 0;
             //Create a new packet writer
             PacketWriter Writer = new PacketWriter();
             //Add the opcode for messages
             Writer.Create(Systems.SERVER_PM_MESSAGE);
             //Write static 1 byte
             Writer.Byte(1);
             //Write total messages count
             Writer.Byte(Convert.ToByte(count));
             //Create new sql data reader for reading colums.
             using (SqlDataReader reader = ms.Read())
             {
                 //While our reader is reading information
                 while (reader.Read())
                 {
                     //Set definition for pm sender
                     string MessageFrom = reader.GetString(1);
                     //Set definition for pm receiver
                     string MessageTo = reader.GetString(2);
                     //Set definition for message
                     string MessageContent = reader.GetString(3);
                     //Set byte definition for status (Read unread) 0 = unread, 1 = read
                     byte pmstatus = reader.GetByte(4);
                     //Get date time when message have been send
                     DateTime MessageDate = Convert.ToDateTime(reader.GetDateTime(5));
                     //Write text message sender
                     Writer.Text(MessageFrom);
                     //Write time
                     //DateTime Time = reader.GetDateTime(5);
                     //Time = Time..ToString();
                     Writer.DWord(0);
                     //Write date
                     Writer.DWord(Tempdate += 1);
                     //Write byte status 0 = unread , 1 = read
                     Writer.Byte(pmstatus);
                 }
                 //Send bytes to client
                 client.Send(Writer.GetBytes());
             }
         }
         //Close mssql query
         ms.Close();
     }
     //If any error accures
     catch (Exception ex)
     {
         Console.WriteLine("Error reading private messages: {0}", ex);
         //Write the information to the debug file.
         Systems.Debugger.Write(ex);
     }
 }
Exemplo n.º 16
0
        public static byte[] SendFriendList(byte count, character c)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(Systems.SERVER_SEND_FRIEND_LIST);
            //Groups
            Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM friends_groups WHERE playerid='"+ c.Information.CharacterID  +"'");
            int groupcount = ms.Count();
            groupcount = groupcount + 1;
            Writer.Byte((byte)groupcount);

            Writer.Word(0);
            Writer.Text("NonClassified");
            int groupid = 0;
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    string groupname = reader.GetString(2);
                    groupid = groupid +1;
                    Writer.Word((short)groupid);
                    Writer.Text(groupname);
                }
            }
            //Friends
            Writer.Byte(count);
            ms = new Systems.MsSQL("SELECT * FROM friends WHERE owner='"+ c.Information.CharacterID  +"'");
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    int model       = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "chartype");
                    int status      = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "Online");
                    int charid      = Systems.MsSQL.GetDataInt("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "id");
                    string charname = Systems.MsSQL.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "name");
                    string groupname = reader.GetString(4);

                    Writer.DWord(charid);               // Friend CharID
                    Writer.Text(charname);              // Friend Name
                    Writer.DWord(model);                // Friend Model Type
                    if (groupname == "none")
                        Writer.Word(0);
                    else
                        Writer.Word(groupid);

                    if (status != 0)
                    {
                        Writer.Byte(0);                 // Friend is online
                    }
                    else
                    {
                        Writer.Byte(1);                 // Inverted, Friend is offline
                    }
                }
                reader.Close();
            }
            ms.Close();
            return Writer.GetBytes();
        }
Exemplo n.º 17
0
        public static byte[] Load(character c)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(Systems.SERVER_PLAYERDATA);
            /////////////////////////////////////////////////////// Character basic info
            #region Basic info
            Writer.DWord(c.Ids.GetLoginID);
            Writer.DWord(c.Information.Model);
            Writer.Byte(c.Information.Volume);
            Writer.Byte(c.Information.Level);
            Writer.Byte(c.Information.Level);
            Writer.LWord(c.Information.XP);
            Writer.DWord(c.Information.SpBar);
            Writer.LWord(c.Information.Gold);
            Writer.DWord(c.Information.SkillPoint);
            Writer.Word(c.Information.Attributes);
            Writer.Byte(c.Information.BerserkBar);
            Writer.DWord(0);
            Writer.DWord(c.Stat.SecondHp);
            Writer.DWord(c.Stat.SecondMP);
            Writer.Bool(c.Information.Level < 20 ? true : false);
            #endregion
            /////////////////////////////////////////////////////// Character Player Kill Info
            #region Pk information
            //Mssql perfection reading with multiple data adapters... while this one is open i can still read anything else from the database
            //With no speed reduction...
            Systems.MsSQL checkpk = new Systems.MsSQL("SELECT * FROM character WHERE name ='" + c.Information.Name + "'");
            using (System.Data.SqlClient.SqlDataReader getinfo = checkpk.Read())
            {
                while (getinfo.Read())
                {
                    byte dailypk = getinfo.GetByte(48);
                    byte pklevel = getinfo.GetByte(49);
                    byte murderlevel = getinfo.GetByte(50);

                    Writer.Byte(dailypk);
                    Writer.Word(pklevel);
                    Writer.DWord(murderlevel);
                    if (murderlevel != 0) c.Information.Murderer = true;
                }
            }
            #endregion
            /////////////////////////////////////////////////////// Character Title
            #region Title
            Writer.Byte(c.Information.Title);
            #endregion
            /////////////////////////////////////////////////////// Character Pvpstate
            #region Pvp
            Writer.Byte(c.Information.Pvpstate);
            if (c.Information.Pvpstate > 0)
                c.Information.PvP = true;
            #endregion
            /////////////////////////////////////////////////////// Character Items
            #region Item

            Writer.Byte(c.Information.Slots);

            Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='0' AND storagetype='0'");
            Writer.Byte(ms.Count());
            using (System.Data.SqlClient.SqlDataReader msreader = ms.Read())
            {

                while (msreader.Read())
                {

                    short amount = msreader.GetInt16(6);

                    if (amount < 1) amount = 1;
                    Systems.MsSQL.InsertData("UPDATE char_items SET quantity='" + amount + "' WHERE owner='" + c.Information.CharacterID + "' AND itemid='" + msreader.GetInt32(2) + "' AND id='" + msreader.GetInt32(0) + "' AND storagetype='0'");

                    if (msreader.GetByte(5) == 6)
                        c.Information.Item.wID = Convert.ToInt32(msreader.GetInt32(2));
                    if (msreader.GetByte(5) == 7)
                    {
                        c.Information.Item.sID = msreader.GetInt32(2);
                        c.Information.Item.sAmount = msreader.GetInt16(6);
                    }

                    Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), amount, msreader.GetInt32(7),msreader.GetInt32(0), msreader.GetInt32(9), msreader.GetInt32(30));
                }
            }
            ms.Close();

            //Avatar
            Writer.Byte(5);

            ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='1' AND storagetype='0'");

            Writer.Byte(ms.Count());
            using (System.Data.SqlClient.SqlDataReader msreader = ms.Read())
            {
                while (msreader.Read())
                {
                    Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), msreader.GetInt16(6), msreader.GetInt32(7), msreader.GetInt32(0), msreader.GetInt32(9),msreader.GetInt32(30));
                }
            }
            ms.Close();

            Writer.Byte(0);

            // job mastery
            Writer.Byte(0x0B);
            Writer.Byte(0);
            Writer.Byte(0);

            #endregion
            ///////////////////////////////////////////////////////  Mastery
            #region Mastery
            if (c.Information.Model <= 12000)
            {
                for (byte i = 1; i <= 8; i++)
                {
                    Writer.Byte(1);
                    Writer.DWord(c.Stat.Skill.Mastery[i]);
                    Writer.Byte(c.Stat.Skill.Mastery_Level[i]);
                }
            }
            else
            {
                if (c.Information.Model >= 14000)
                {
                    for (byte i = 1; i < 8; i++)
                    {
                        Writer.Byte(1);
                        Writer.DWord(c.Stat.Skill.Mastery[i]);
                        Writer.Byte(c.Stat.Skill.Mastery_Level[i]);
                    }
                }
            }
            #endregion
            /////////////////////////////////////////////////////// Skills
            #region Skill
            Writer.Byte(2);
            Writer.Byte(0);
                for (int i = 1; i <= c.Stat.Skill.AmountSkill; i++)
                {
                    Writer.Byte(1);
                    Writer.DWord(c.Stat.Skill.Skill[i]);
                    Writer.Byte(1);
                }
            Writer.Byte(2);
            #endregion
            /////////////////////////////////////////////////////// Quests
            #region Quest
            Writer.Word(1); // how many Quest ids completed/aborted
            Writer.DWord(1);// Quest id
            Writer.Byte(0);//number of Quests that are live
            #endregion
            Writer.Byte(0);//? for now
            /////////////////////////////////////////////////////// Talisman
            #region Talisman
            Writer.DWord(1);//new
            Writer.DWord(1);//new
            Writer.DWord(0);//? for now
            Writer.DWord(0x0C);//new
            #endregion
            /////////////////////////////////////////////////////// Position + id + speed
            #region Character id / Position / Speed
            Writer.DWord(c.Information.UniqueID);
            Writer.Byte(c.Position.xSec);
            Writer.Byte(c.Position.ySec);
            if (!File.FileLoad.CheckCave(c.Position.xSec, c.Position.ySec))
            {
                Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec));
                Writer.Float(c.Position.z);
                Writer.Float(Formule.packety(c.Position.y, c.Position.ySec));
            }
            else
            {
                Writer.Float(Formule.cavepacketx(c.Position.x));// Added for cave Coords
                Writer.Float(c.Position.z);
                Writer.Float(Formule.cavepackety(c.Position.y));// Added for cave Coords

            }
            Writer.Word(0);							// Angle
            Writer.Byte(0);
            Writer.Byte(1);
            Writer.Byte(0);
            Writer.Word(0);							// Angle
            Writer.Word(0);
            Writer.Byte(0);
            Writer.Bool(false); //berserk

            Writer.Byte(0);//new ?

            Writer.Float(c.Speed.WalkSpeed);
            Writer.Float(c.Speed.RunSpeed);
            Writer.Float(c.Speed.BerserkSpeed);
            #endregion
            /////////////////////////////////////////////////////// Premium Tickets
            #region Premium ticket
            Writer.Byte(0); //ITEM_MALL_GOLD_TIME_SERVICE_TICKET_4W
            #endregion
            /////////////////////////////////////////////////////// GM Check + Name
            #region GM Check + Name
            Writer.Text(c.Information.Name);
            #endregion
            /////////////////////////////////////////////////////// Character jobs
            #region Character Job / hunter thief trader ( old job things )
                //Writer info with job name when on job
                /*if (c.Job.state == 1 && c.Job.Jobname != "0")
                {
                    Writer.Text(c.Job.Jobname);
                    Writer.Byte(3);
                    Writer.Byte(1);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                }
                //Write basic info noname
                if (c.Job.Jobname == "0")
                {
                    Writer.Word(0);
                    Writer.Byte(3);
                    Writer.Byte(1);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                }
                //Write no info
                else
                {
                    Writer.Word(0);
                    Writer.Byte(0);
                    Writer.Byte(1);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                }*/
            #endregion
            #region New job system
            if (c.Job.state == 1)
            {
                Writer.Text(c.Job.Jobname);
                Writer.Byte(1);
                Writer.Byte(c.Job.level);//Level job
                Writer.Byte(c.Information.Level);//Level char
                Writer.Byte(1); // job level? myb
                Writer.LWord(0);// job exp probably y
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
            }
            else
            {

                Writer.Word(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(2); // job type
                Writer.Byte(1); // job level? myb
                Writer.LWord(0);// job exp probably y
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
            }

            #endregion
                /////////////////////////////////////////////////////// Pvp / Pk State
            #region Pvp / Pk State
            if (c.Information.Pvpstate == 1 || c.Information.Murderer)
            {
                Writer.Byte(0x22);
            }
            else if (c.Information.Pvpstate == 0 || !c.Information.Murderer)
            {
                Writer.Byte(0xFF);
            }
            #endregion
            /////////////////////////////////////////////////////// Guide Data
            #region Guide Data this data stacks on itself so if guide id is 0400000000000000 and next guide is 0300000000000000 the data to send is 0700000000000000

            for (int i = 0; i < 8; ++i)//Main Guide Packet Info
            {
                Writer.Byte(c.Guideinfo.G1[i]);//Reads From Int Array
            }
            #endregion
            /////////////////////////////////////////////////////// Account / Gm Check
            #region Account ID + Gm Check
            Writer.DWord(c.Account.ID);
            Writer.Byte(0);//c.Information.GM
            #endregion
            /////////////////////////////////////////////////////// Quickbar + Autopotion
            #region Bar information
            Writer.Byte(7);
            PacketReader reader = new PacketReader(System.IO.File.ReadAllBytes(Environment.CurrentDirectory + @"\player\info\quickbar\" + c.Information.Name + ".dat"));
            PlayerQuickBar(reader, Writer);
            reader = new PacketReader(System.IO.File.ReadAllBytes(Environment.CurrentDirectory + @"\player\info\autopot\" + c.Information.Name + ".dat"));
            PlayerAutoPot(reader, Writer);
            #endregion
            /////////////////////////////////////////////////////// Academy
            #region Academy
            Writer.Byte(0); // number of player in academy
            /* // if we have players there
             Writer.Byte(1);
             Writer.Text("asd");
             */
            Writer.Byte(0);//added byte today for 1.310
            Writer.Byte(0);
            Writer.Word(1);
            Writer.Word(1);
            Writer.Byte(0);
            Writer.Byte(1);
            #endregion
            return Writer.GetBytes();
        }
Exemplo n.º 18
0
        //Listening main uses a single packet only so we write our packet here
        public static byte[] CharacterListing(player p)
        {
            //Create new sql query to get all characters except fully deleted
            Systems.MsSQL ms = new Systems.MsSQL("SELECT TOP 4 * FROM character WHERE account='" + p.AccountName + "' AND deleted='0' OR account='" + p.AccountName + "' AND deleted ='1'");
            //Create new packet writer
            PacketWriter Writer = new PacketWriter();
            Writer.Create(Systems.SERVER_CHARACTERSCREEN);      // Select opcode
            Writer.Byte(2);                                     // Static byte 2
            Writer.Byte(1);                                     // Static byte 1
            Writer.Byte(ms.Count());                            // Byte Character Count
            //Create new sql data reader
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                //While the reader is reading data from the database
                while (reader.Read())
                {
                    Writer.DWord(reader.GetInt32(3));           // DWord Skin Model
                    Writer.Text(reader.GetString(2));           // String Name
                    Writer.Byte(reader.GetByte(4));             // Byte Skin Volume
                    Writer.Byte(reader.GetByte(5));             // Byte Level
                    Writer.LWord(reader.GetInt64(12));          // Long Experience
                    Writer.Word(reader.GetInt16(6));            // Word STR
                    Writer.Word(reader.GetInt16(7));            // Word INT
                    Writer.Word(reader.GetInt16(8));            // Attribute points
                    Writer.DWord(reader.GetInt32(9));           // HP
                    Writer.DWord(reader.GetInt32(10));          // MP
                    //Set defnition for current time
                    DateTime CurrentTime = DateTime.Now;
                    //Subtract the current time with deletion time information
                    TimeSpan TIMESPAN = reader.GetDateTime(43) - DateTime.Now;
                    //If the character has been deleted but still sitting
                    if (reader.GetByte(42) == 1)
                    {
                        //Write state byte 1 for sitting
                        Writer.Byte(1);
                        //Display deletion time reamining
                        Writer.DWord((double)TIMESPAN.TotalMinutes);
                        //If time has expired delete the character
                        if (TIMESPAN.TotalMinutes <= 0)
                        {
                            //Note: There are more ways like full delete but if someone got deleted by someone else's action
                            //It will be easy to recover the character by changing the deletion byte in the database
                            //0 = Not deleted , 1 = Deletion in progress, 2 = Deleted

                            //Set deletion state so it wont be listed again.
                            Systems.MsSQL.UpdateData("UPDATE character SET deleted='2' Where id='" + reader.GetInt32(0) + "'");
                        }
                    }
                    //If not deleted
                    else
                    {
                        //State byte = 0 Standing
                        Writer.Byte(0);
                    }
                    //Static
                    Writer.Word(0);
                    Writer.Byte(0);
                    //Get normal equipped items upto slot 8 not in avatar slots
                    Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 8, 0, false);
                    //Get avatar type items
                    Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 5, 1, false);
                }
                //Jobtype information
                int jobinfo = Systems.MsSQL.GetDataInt("SELECT * FROM users WHERE id='" + p.AccountName + "'", "jobtype");
                Writer.Byte(Convert.ToByte(jobinfo));
            }
            ms.Close();
            //Return all bytes to the client
            return Writer.GetBytes();
        }
Exemplo n.º 19
0
 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
             Global.guild_player PlayerGuild = new Global.guild_player();
             //Set guildmember id
             PlayerGuild.MemberID = Guildmember;
             //Create new mssql query to get player information
             Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM character WHERE id='" + Guildmember + "'");
             //Create mssql 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
                         Systems sys = GetPlayerMainid(Guildmember);
                         //Make sure sys is not null
                         if (sys != null)
                             //Add the character client to the client list
                             this.Character.Network.Guild.MembersClient.Add(sys.client);
                     }
                 }
             }
             //Create new query to select from table guild_members
             ms = new Systems.MsSQL("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 mssql
             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
         Systems.Debugger.Write(ex);
     }
 }
Exemplo n.º 20
0
        public static byte[] Load(character c)
        {

            PacketWriter Writer = new PacketWriter();
            Writer.Create(Systems.SERVER_PLAYERDATA);
            /////////////////////////////////////////////////////// Character basic info
            #region Basic info   
            Writer.DWord(c.Ids.GetLoginID);
            Writer.DWord(c.Information.Model);
            Writer.Byte(c.Information.Volume);
            Writer.Byte(c.Information.Level);
            Writer.Byte(c.Information.Level);
            Writer.LWord(c.Information.XP);
            Writer.DWord(c.Information.SpBar);
            Writer.LWord(c.Information.Gold);
            Writer.DWord(c.Information.SkillPoint);
            Writer.Word(c.Information.Attributes);
            Writer.Byte(c.Information.BerserkBar);
            Writer.DWord(0);
            Writer.DWord(c.Stat.SecondHp);
            Writer.DWord(c.Stat.SecondMP);
            Writer.Bool(c.Information.Level < 20 ? true : false);
            #endregion
            /////////////////////////////////////////////////////// Character Player Kill Info
            #region Pk information
            //Mssql perfection reading with multiple data adapters... while this one is open i can still read anything else from the database
            //With no speed reduction...
            Systems.MsSQL checkpk = new Systems.MsSQL("SELECT * FROM character WHERE name ='" + c.Information.Name + "'");
            using (System.Data.SqlClient.SqlDataReader getinfo = checkpk.Read())
            {
                while (getinfo.Read())
                {
                    byte dailypk = getinfo.GetByte(48);
                    byte pklevel = getinfo.GetByte(49);
                    byte murderlevel = getinfo.GetByte(50);

                    Writer.Byte(dailypk);
                    Writer.Word(pklevel);
                    Writer.DWord(murderlevel);
                    if (murderlevel != 0) c.Information.Murderer = true;
                }
            }
            #endregion
            /////////////////////////////////////////////////////// Character Title
            #region Title
            Writer.Byte(c.Information.Title);
            #endregion
            /////////////////////////////////////////////////////// Character Pvpstate
            #region Pvp
            Writer.Byte(c.Information.Pvpstate);
            if (c.Information.Pvpstate > 0) 
                c.Information.PvP = true;
            #endregion
            /////////////////////////////////////////////////////// Character Items
            #region Item
            
            Writer.Byte(c.Information.Slots);

            Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='0' AND storagetype='0'");
            Writer.Byte(ms.Count());
            using (System.Data.SqlClient.SqlDataReader msreader = ms.Read())
            {

                while (msreader.Read())
                {

                    short amount = msreader.GetInt16(6);

                    if (amount < 1) amount = 1;
                    Systems.MsSQL.InsertData("UPDATE char_items SET quantity='" + amount + "' WHERE owner='" + c.Information.CharacterID + "' AND itemid='" + msreader.GetInt32(2) + "' AND id='" + msreader.GetInt32(0) + "' AND storagetype='0'");

                    if (msreader.GetByte(5) == 6)
                        c.Information.Item.wID = Convert.ToInt32(msreader.GetInt32(2));
                    if (msreader.GetByte(5) == 7)
                    {
                        c.Information.Item.sID = msreader.GetInt32(2);
                        c.Information.Item.sAmount = msreader.GetInt16(6);
                    }
                    
                    Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), amount, msreader.GetInt32(7),msreader.GetInt32(0), msreader.GetInt32(9), msreader.GetInt32(30));
                }
            }
            ms.Close();

            //Avatar
            Writer.Byte(5);

            ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='1' AND storagetype='0'");

            Writer.Byte(ms.Count());
            using (System.Data.SqlClient.SqlDataReader msreader = ms.Read())
            {
                while (msreader.Read())
                {
                    Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), msreader.GetInt16(6), msreader.GetInt32(7), msreader.GetInt32(0), msreader.GetInt32(9),msreader.GetInt32(30));
                }
            }
            ms.Close();

            Writer.Byte(0);

            // job mastery 
            Writer.Byte(0x0B);
            Writer.Byte(0);
            Writer.Byte(0);

            #endregion
            ///////////////////////////////////////////////////////  Mastery
            #region Mastery
            if (c.Information.Model <= 12000)
            {
                for (byte i = 1; i <= 8; i++)
                {
                    Writer.Byte(1);
                    Writer.DWord(c.Stat.Skill.Mastery[i]);
                    Writer.Byte(c.Stat.Skill.Mastery_Level[i]);
                }
            }
            else
            {
                if (c.Information.Model >= 14000)
                {
                    for (byte i = 1; i < 8; i++)
                    {
                        Writer.Byte(1);
                        Writer.DWord(c.Stat.Skill.Mastery[i]);
                        Writer.Byte(c.Stat.Skill.Mastery_Level[i]);
                    }
                }
            }
            #endregion
            /////////////////////////////////////////////////////// Skills
            #region Skill
            Writer.Byte(2);
            Writer.Byte(0);
                for (int i = 1; i <= c.Stat.Skill.AmountSkill; i++)
                {
                    Writer.Byte(1);
                    Writer.DWord(c.Stat.Skill.Skill[i]);
                    Writer.Byte(1);
                }
            Writer.Byte(2);
            #endregion
            /////////////////////////////////////////////////////// Quests
            #region Quest
            Writer.Word(1); // how many Quest ids completed/aborted
            Writer.DWord(1);// Quest id
            Writer.Byte(0);//number of Quests that are live
            #endregion
            Writer.Byte(0);//? for now
            /////////////////////////////////////////////////////// Talisman
            #region Talisman
            Writer.DWord(1);//new
            Writer.DWord(1);//new
            Writer.DWord(0);//? for now
            Writer.DWord(0x0C);//new
            #endregion
            /////////////////////////////////////////////////////// Position + id + speed
            #region Character id / Position / Speed
            Writer.DWord(c.Information.UniqueID);
            Writer.Byte(c.Position.xSec);
            Writer.Byte(c.Position.ySec);
            if (!File.FileLoad.CheckCave(c.Position.xSec, c.Position.ySec))
            {
                Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec));
                Writer.Float(c.Position.z);
                Writer.Float(Formule.packety(c.Position.y, c.Position.ySec));
            }
            else
            {
                Writer.Float(Formule.cavepacketx(c.Position.x));// Added for cave Coords
                Writer.Float(c.Position.z);
                Writer.Float(Formule.cavepackety(c.Position.y));// Added for cave Coords

            }
            Writer.Word(0);							// Angle
            Writer.Byte(0);
            Writer.Byte(1);
            Writer.Byte(0);
            Writer.Word(0);							// Angle
            Writer.Word(0);
            Writer.Byte(0);
            Writer.Bool(false); //berserk

            Writer.Byte(0);//new ?

            Writer.Float(c.Speed.WalkSpeed);
            Writer.Float(c.Speed.RunSpeed);
            Writer.Float(c.Speed.BerserkSpeed);
            #endregion
            /////////////////////////////////////////////////////// Premium Tickets
            #region Premium ticket
            Writer.Byte(0); //ITEM_MALL_GOLD_TIME_SERVICE_TICKET_4W
            #endregion
            /////////////////////////////////////////////////////// GM Check + Name
            #region GM Check + Name
            Writer.Text(c.Information.Name);
            #endregion
            /////////////////////////////////////////////////////// Character jobs
            #region Character Job / hunter thief trader ( old job things )
                //Writer info with job name when on job
                /*if (c.Job.state == 1 && c.Job.Jobname != "0")
                {
                    Writer.Text(c.Job.Jobname);
                    Writer.Byte(3);
                    Writer.Byte(1);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                }
                //Write basic info noname
                if (c.Job.Jobname == "0")
                {
                    Writer.Word(0);
                    Writer.Byte(3);
                    Writer.Byte(1);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                }
                //Write no info
                else
                {
                    Writer.Word(0);
                    Writer.Byte(0);
                    Writer.Byte(1);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.DWord(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                    Writer.Byte(0);
                }*/
            #endregion
            #region New job system
            if (c.Job.state == 1)
            {
                Writer.Text(c.Job.Jobname);
                Writer.Byte(1);
                Writer.Byte(c.Job.level);//Level job
                Writer.Byte(c.Information.Level);//Level char
                Writer.Byte(1); // job level? myb
                Writer.LWord(0);// job exp probably y
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
            }
            else
            {

                Writer.Word(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(2); // job type
                Writer.Byte(1); // job level? myb
                Writer.LWord(0);// job exp probably y
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
            }

            #endregion
                /////////////////////////////////////////////////////// Pvp / Pk State
            #region Pvp / Pk State
            if (c.Information.Pvpstate == 1 || c.Information.Murderer)
            {
                Writer.Byte(0x22);
            }
            else if (c.Information.Pvpstate == 0 || !c.Information.Murderer)
            {
                Writer.Byte(0xFF);
            }
            #endregion
            /////////////////////////////////////////////////////// Guide Data 
            #region Guide Data this data stacks on itself so if guide id is 0400000000000000 and next guide is 0300000000000000 the data to send is 0700000000000000

            for (int i = 0; i < 8; ++i)//Main Guide Packet Info
            {
                Writer.Byte(c.Guideinfo.G1[i]);//Reads From Int Array
            }
            #endregion
            /////////////////////////////////////////////////////// Account / Gm Check
            #region Account ID + Gm Check
            Writer.DWord(c.Account.ID);
            Writer.Byte(0);//c.Information.GM
            #endregion
            /////////////////////////////////////////////////////// Quickbar + Autopotion
            #region Bar information
            Writer.Byte(7);
            PacketReader reader = new PacketReader(System.IO.File.ReadAllBytes(Environment.CurrentDirectory + @"\player\info\quickbar\" + c.Information.Name + ".dat"));
            PlayerQuickBar(reader, Writer);
            reader = new PacketReader(System.IO.File.ReadAllBytes(Environment.CurrentDirectory + @"\player\info\autopot\" + c.Information.Name + ".dat"));
            PlayerAutoPot(reader, Writer);
            #endregion
            /////////////////////////////////////////////////////// Academy
            #region Academy
            Writer.Byte(0); // number of player in academy
            /* // if we have players there 
             Writer.Byte(1);
             Writer.Text("asd"); 
             */
            Writer.Byte(0);//added byte today for 1.310
            Writer.Byte(0);
            Writer.Word(1); 
            Writer.Word(1);
            Writer.Byte(0);
            Writer.Byte(1);
            #endregion
            return Writer.GetBytes();
        }
Exemplo n.º 21
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // Character listening packet
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public static byte[] CharacterListing(string name)
        {
            
            Systems.MsSQL ms    = new Systems.MsSQL("SELECT TOP 4 * FROM character WHERE account='" + name + "'");
            PacketWriter Writer = new PacketWriter();

            Writer.Create(Systems.SERVER_CHARACTERSCREEN);      // Select opcode
            Writer.Byte(2);                                     // Static byte 2
            Writer.Byte(1);                                     // Static byte 1
            Writer.Byte(ms.Count());                            // Byte Character Count

            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    Writer.DWord(reader.GetInt32(3));           // DWord Skin Model
                    Writer.Text(reader.GetString(2));           // String Name
 
                    Writer.Byte(reader.GetByte(4));             // Byte Skin Volume
                    Writer.Byte(reader.GetByte(5));             // Byte Level

                    Writer.LWord(reader.GetInt64(12));          // Long Experience

                    Writer.Word(reader.GetInt16(6));            // Word STR
                    Writer.Word(reader.GetInt16(7));            // Word INT
                    Writer.Word(reader.GetInt16(8));            // Attribute points
                    
                    Writer.DWord(reader.GetInt32(9));           // HP
                    Writer.DWord(reader.GetInt32(10));          // MP

                    TimeSpan ts = Convert.ToDateTime(reader.GetDateTime(43)) - DateTime.Now;
                    double time = ts.TotalMinutes;

                    if (Math.Round(time) > 0)
                    {
                        Writer.Byte(1);
                        Writer.DWord(Math.Round(time));
                    }
                    else
                    {
                        Writer.Byte(0);
                    }

                    if (Math.Round(time) < 0 && DateTime.Now != reader.GetDateTime(43))
                    {
                        Systems.MsSQL.UpdateData("UPDATE character SET deleted='1' Where id='" + reader.GetInt32(0) + "'");
                    }

                    Writer.Word(0);
                    Writer.Byte(0);

                    Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 8, 0,false);
                    Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 5, 1,false);
                }
                //Jobtype information
                int jobinfo = Systems.MsSQL.GetDataInt("SELECT * FROM users WHERE id='"+ name +"'", "jobtype");
                Writer.Byte(Convert.ToByte(jobinfo));
            }
            ms.Close();

            return Writer.GetBytes();
        }
Exemplo n.º 22
0
        public static void ExecuteCommand(string aCommand, Socket aSocket)
        {
            try
            {
                if (aCommand != null)
                {
                    string[] command = aCommand.Split(' ');
                    if (command[0] == "/help")
                    {

                        if (aSocket == null)
                        {
                            Console.ForegroundColor = ConsoleColor.Cyan;
                            Console.WriteLine("                     Ingame notice: Type 1 space then message.");
                            Console.WriteLine("                     //clear");
                            Console.WriteLine("                     //repairitems");
                            Console.WriteLine("                     //respawn_unique");
                            Console.WriteLine("                     //event");
                            Console.WriteLine("                     //shutdown");
                            Console.WriteLine("                     //manager");

                            Console.ForegroundColor = ConsoleColor.Yellow;
                        }
                        else
                        {
                            sendSocket(aSocket, "Ingame notice: Type 1 space then message." + Environment.NewLine);
                            sendSocket(aSocket, "  //clear = cleanup unused memory" + Environment.NewLine);
                            sendSocket(aSocket, "  //repairitems" + Environment.NewLine);
                            sendSocket(aSocket, "  //respawn_unique" + Environment.NewLine);
                            sendSocket(aSocket, "  //event" + Environment.NewLine);
                            sendSocket(aSocket, "  //shutdown" + Environment.NewLine);
                        }
                    }
                    else if (command[0] == "//clear")
                    {
                        System.GC.Collect();
                        GC.Collect(0, GCCollectionMode.Forced);
                        sendSocket(aSocket, "done memory cleanup" + Environment.NewLine);
                    }
                    else if (command[0] == "//shutdown")
                    {
                        byte waitTime = 5;
                        if (command.Length > 1)
                        {
                            waitTime = System.Convert.ToByte(command[1]);
                        }
                        if (aSocket != null)
                        {
                            aSocket.Send(Encoding.ASCII.GetBytes("SHUTDOWN_START" + Environment.NewLine));
                        }

                        lock (Systems.clients)
                        {
                            Console.WriteLine("{0}stopping server and sending notice to clients ...", DarkEmu_GameServer.Global.Product.Prefix);
                            sendSocket(aSocket, "SHUTDOWN: stopping server and sending notice to clients ..." + Environment.NewLine);
                            net.ServerCheck(true);
                            net.Stop();  // disable any new connection
                            try
                            {
                                Systems.SendAll(Packet.ChatPacket(7, 0, "The server is stopping, your information will be saved.", ""));
                                Systems.SendAll(Packet.StartingLeaveGame(waitTime, 0));
                            }
                            catch { }
                            Thread.Sleep(waitTime);
                            Console.WriteLine("@SHUTDOWN: logoff clients ...");
                            sendSocket(aSocket, "@SHUTDOWN: logoff clients ..." + Environment.NewLine);
                            while (Systems.clients.Count > 0)
                            {
                                try
                                {
                                    try
                                    {
                                        Systems.clients[0].Send(Packet.EndLeaveGame());
                                    }
                                    catch { }
                                    //Ignore new character case (used for disconnect kick).
                                    Systems c = new Systems();
                                    Systems.clients[0].Disconnect("normal");
                                }
                                catch { }
                            }
                        }
                        sendSocket(aSocket, "SHUTDOWN_END" + Environment.NewLine);
                        cancelServer = true;
                        Systems.UpdateServerInfo(0);
                        //Environment.Exit(0);
                    }
                    else if (command[0] == "//repairitems")
                    {
                        int fixeditem = 0;
                        Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items");
                        using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
                        {
                            while (reader.Read())
                            {
                                short amount = reader.GetInt16(7);
                                if (amount < 1)
                                {
                                    fixeditem++;
                                    amount = 1;
                                    Systems.MsSQL.InsertData("UPDATE char_items SET quantity='" + amount + "' WHERE itemnumber='" + "item" + reader.GetByte(5) + "' AND owner='" + reader.GetInt32(3) + "' AND itemid='" + reader.GetInt32(2) + "'");
                                }
                            }
                        }
                        Console.ForegroundColor = ConsoleColor.Magenta;
                        Console.WriteLine("@Gameserver:         Items Repaired:           {0}", fixeditem);
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        sendSocket(aSocket, String.Format("@Gameserver: Items Repaired: {0}", fixeditem) + Environment.NewLine);
                    }
                    else if (command[0] == "//respawn_unique")
                    {
                        DarkEmu_GameServer.GlobalUnique.StartTGUnique(6000 * 10, 6000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartUriUnique(7000 * 10, 7000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartIsyUnique(8000 * 10, 8000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartLordUnique(9000 * 10, 9000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartDemonUnique(10000 * 10, 10000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartCerbUnique(11000 * 10, 11000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartIvyUnique(11000 * 10, 11000 * 10);
                        //Game.GlobalUnique.StartRoc(11000 * 10, 11000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartMedusa(11000 * 10, 11000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartNeith(11000 * 10, 11000 * 10);
                        //Game.GlobalUnique.StartSphinx(11000 * 10, 11000 * 10);
                        DarkEmu_GameServer.GlobalUnique.StartIsis(11000 * 10, 11000 * 10);
                        sendSocket(aSocket, "done respawn" + Environment.NewLine);
                    }
                    else if (command[0] == "//event")
                    {
                        EventMain eventnew = new EventMain(System.IO.Directory.GetCurrentDirectory() + "/data/event.txt");
                        eventnew.Start();
                        sendSocket(aSocket, "Event Started" + Environment.NewLine);
                    }
                    else if (command[0] == "")
                    {
                        string information = aCommand;
                        DarkEmu_GameServer.Systems c = new DarkEmu_GameServer.Systems();
                        DarkEmu_GameServer.Systems.SendAll(c.sendnoticecon(7, 0, information, ""));

                        Console.WriteLine("Notice: " + information);
                        sendSocket(aSocket, "Sent Notice: " + information + Environment.NewLine);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Program.Main {0}", ex);
            }
        }
Exemplo n.º 23
0
        public static byte[] UnionInfo(Systems c)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(Systems.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
                Systems.MsSQL guild_data = new Systems.MsSQL("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 = Systems.MsSQL.GetData("SELECT name FROM character WHERE id='" + Ownerid + "'", "name").ToString();
                        int Charmodel   = Convert.ToInt32(Systems.MsSQL.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
                        Systems Guildmembers = Systems.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
                                    Systems getmember = Systems.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();
        }
Exemplo n.º 24
0
        public void IngameLogin()
        {
            //Wrap our function inside a catcher
            try
            {
                //Create new packet reader
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                //Read character name from packet
                string CharacterName = Reader.Text();
                //Close reader
                Reader.Close();
                //Anti hack checking sql query
                Systems.MsSQL ms = new Systems.MsSQL("SELECT name FROM character WHERE account='" + Player.AccountName + "' AND name='" + CharacterName + "'");
                //Check if the player account and character belongs together (count row).
                int checkinfo = ms.Count();
                //If there's no result
                if (checkinfo == 0)
                {
                    //Optional ban user here for hacking.

                    //Disconnect the user if hack attempt
                    client.Disconnect(this.client.clientSocket);
                    return;
                }
                //If there's a result we continue loading
                else
                {

                    //Create new character definition details
                    Character = new character();
                    //Set character name
                    Character.Information.Name = CharacterName;
                    //Set player id
                    Character.Account.ID = Player.ID;
                    //Load player data
                    PlayerDataLoad();
                    //Load job data
                    LoadJobData();
                    //Check same character
                    checkSameChar(CharacterName, Character.Information.UniqueID);
                    //Check character stats
                    CheckCharStats(Character);
                    //Lock while we add new client
                    lock (Systems.clients)
                    {
                        //Add new client
                        Systems.clients.Add(this);
                    }
                    //Send login screen packet
                    client.Send(Packet.LoginScreen());
                    //Send player data load start packet
                    client.Send(Packet.StartPlayerLoad());
                    //Send player data load data
                    client.Send(Packet.Load(Character));
                    //Send end load for player data
                    client.Send(Packet.EndPlayerLoad());
                    //Update online status in database
                    MsSQL.UpdateData("UPDATE character SET online='1' WHERE id='" + Character.Information.CharacterID + "'");
                    //Set PVP State
                    MsSQL.UpdateData("UPDATE character SET Pvpstate='0' WHERE id='" + Character.Information.CharacterID + "'");
                    //Update server information (Players online).
                    UpdateServerInfo();
                    //Open our timers for spawn checks etc.
                    OpenTimer();
                    //Load blue data for character
                    LoadBlues(Character);
                    //Create new list for equiped items
                    List<Global.slotItem> EquipedItems = new List<Global.slotItem>();
                    //For each equiped item under slot 13
                    for (byte q = 0; q < 13; q++)
                    {
                        //Add items to the list
                        EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0));
                    }
                    //Load blues for each item
                    foreach (Global.slotItem sitem in EquipedItems)
                    {
                        //Check if the dictionary contains our blue id on item
                        if (Data.ItemBlue.ContainsKey(sitem.dbID))
                        {
                            //If exists, load blue for the item
                            LoadBluesid(sitem.dbID);
                            //If blue amount is not 0
                            if (Data.ItemBlue[sitem.dbID].totalblue != 0)
                                //Add blue to stats and information
                                AddRemoveBlues(this, sitem, true);
                        }
                    }
                    //Default luck (Will be based on tickets increasment etc.
                    this.Character.Blues.Luck = 100;
                }
            }
            //Catch bad exception errors
            catch (Exception ex)
            {
                //Write to debug log
                Systems.Debugger.Write(ex);
            }
        }
Exemplo n.º 25
0
 public static byte[] GuildStorageData(character c)
 {
     Systems.MsSQL getstorage = new Systems.MsSQL("SELECT * FROM char_items WHERE guild_storage_id='" + c.Network.Guild.Guildid + "' AND storagetype='3'");
     int itemcount = getstorage.Count();
     PacketWriter Writer = new PacketWriter();
     Writer.Create(Systems.SERVER_GUILD_STORAGE3);
     Writer.Byte(c.Network.Guild.StorageSlots);
     Writer.Byte(itemcount);
     if (itemcount != 0)
     {
         using (System.Data.SqlClient.SqlDataReader reader = getstorage.Read())
         {
             while (reader.Read())
             {
                 Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30));
             }
         }
     }
     getstorage.Close();
     return Writer.GetBytes();
 }
Exemplo n.º 26
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // Character listening packet
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public static byte[] CharacterListing(string name)
        {
            Systems.MsSQL ms    = new Systems.MsSQL("SELECT TOP 4 * FROM character WHERE account='" + name + "'");
            PacketWriter Writer = new PacketWriter();

            Writer.Create(Systems.SERVER_CHARACTERSCREEN);      // Select opcode
            Writer.Byte(2);                                     // Static byte 2
            Writer.Byte(1);                                     // Static byte 1
            Writer.Byte(ms.Count());                            // Byte Character Count

            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    Writer.DWord(reader.GetInt32(3));           // DWord Skin Model
                    Writer.Text(reader.GetString(2));           // String Name

                    Writer.Byte(reader.GetByte(4));             // Byte Skin Volume
                    Writer.Byte(reader.GetByte(5));             // Byte Level

                    Writer.LWord(reader.GetInt64(12));          // Long Experience

                    Writer.Word(reader.GetInt16(6));            // Word STR
                    Writer.Word(reader.GetInt16(7));            // Word INT
                    Writer.Word(reader.GetInt16(8));            // Attribute points

                    Writer.DWord(reader.GetInt32(9));           // HP
                    Writer.DWord(reader.GetInt32(10));          // MP

                    TimeSpan ts = Convert.ToDateTime(reader.GetDateTime(43)) - DateTime.Now;
                    double time = ts.TotalMinutes;

                    if (Math.Round(time) > 0)
                    {
                        Writer.Byte(1);
                        Writer.DWord(Math.Round(time));
                    }
                    else
                    {
                        Writer.Byte(0);
                    }

                    if (Math.Round(time) < 0 && DateTime.Now != reader.GetDateTime(43))
                    {
                        Systems.MsSQL.UpdateData("UPDATE character SET deleted='1' Where id='" + reader.GetInt32(0) + "'");
                    }

                    Writer.Word(0);
                    Writer.Byte(0);

                    Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 8, 0,false);
                    Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 5, 1,false);
                }
                //Jobtype information
                int jobinfo = Systems.MsSQL.GetDataInt("SELECT * FROM users WHERE id='"+ name +"'", "jobtype");
                Writer.Byte(Convert.ToByte(jobinfo));
            }
            ms.Close();

            return Writer.GetBytes();
        }
Exemplo n.º 27
0
        //Listening main uses a single packet only so we write our packet here
        public static byte[] CharacterListing(player p)
        {
            //Create new sql query to get all characters except fully deleted
            Systems.MsSQL ms = new Systems.MsSQL("SELECT TOP 4 * FROM character WHERE account='" + p.AccountName + "' AND deleted='0' OR account='" + p.AccountName + "' AND deleted ='1'");
            //Create new packet writer
            PacketWriter Writer = new PacketWriter();

            Writer.Create(Systems.SERVER_CHARACTERSCREEN);      // Select opcode
            Writer.Byte(2);                                     // Static byte 2
            Writer.Byte(1);                                     // Static byte 1
            Writer.Byte(ms.Count());                            // Byte Character Count
            //Create new sql data reader
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                //While the reader is reading data from the database
                while (reader.Read())
                {
                    Writer.DWord(reader.GetInt32(3));           // DWord Skin Model
                    Writer.Text(reader.GetString(2));           // String Name
                    Writer.Byte(reader.GetByte(4));             // Byte Skin Volume
                    Writer.Byte(reader.GetByte(5));             // Byte Level
                    Writer.LWord(reader.GetInt64(12));          // Long Experience
                    Writer.Word(reader.GetInt16(6));            // Word STR
                    Writer.Word(reader.GetInt16(7));            // Word INT
                    Writer.Word(reader.GetInt16(8));            // Attribute points
                    Writer.DWord(reader.GetInt32(9));           // HP
                    Writer.DWord(reader.GetInt32(10));          // MP
                    //Set defnition for current time
                    DateTime CurrentTime = DateTime.Now;
                    //Subtract the current time with deletion time information
                    TimeSpan TIMESPAN = reader.GetDateTime(43) - DateTime.Now;
                    //If the character has been deleted but still sitting
                    if (reader.GetByte(42) == 1)
                    {
                        //Write state byte 1 for sitting
                        Writer.Byte(1);
                        //Display deletion time reamining
                        Writer.DWord((double)TIMESPAN.TotalMinutes);
                        //If time has expired delete the character
                        if (TIMESPAN.TotalMinutes <= 0)
                        {
                            //Note: There are more ways like full delete but if someone got deleted by someone else's action
                            //It will be easy to recover the character by changing the deletion byte in the database
                            //0 = Not deleted , 1 = Deletion in progress, 2 = Deleted

                            //Set deletion state so it wont be listed again.
                            Systems.MsSQL.UpdateData("UPDATE character SET deleted='2' Where id='" + reader.GetInt32(0) + "'");
                        }
                    }
                    //If not deleted
                    else
                    {
                        //State byte = 0 Standing
                        Writer.Byte(0);
                    }
                    //Static
                    Writer.Word(0);
                    Writer.Byte(0);
                    //Get normal equipped items upto slot 8 not in avatar slots
                    Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 8, 0, false);
                    //Get avatar type items
                    Function.Items.PrivateItemPacket(Writer, reader.GetInt32(0), 5, 1, false);
                }
                //Jobtype information
                int jobinfo = Systems.MsSQL.GetDataInt("SELECT * FROM users WHERE id='" + p.AccountName + "'", "jobtype");
                Writer.Byte(Convert.ToByte(jobinfo));
            }
            ms.Close();
            //Return all bytes to the client
            return(Writer.GetBytes());
        }
Exemplo n.º 28
0
        public void IngameLogin()
        {
            //Wrap our function inside a catcher
            try
            {
                //Create new packet reader
                PacketReader Reader = new PacketReader(PacketInformation.buffer);
                //Read character name from packet
                string CharacterName = Reader.Text();
                //Close reader
                Reader.Close();
                //Anti hack checking sql query
                Systems.MsSQL ms = new Systems.MsSQL("SELECT name FROM character WHERE account='" + Player.AccountName + "' AND name='" + CharacterName + "'");
                //Check if the player account and character belongs together (count row).
                int checkinfo = ms.Count();
                //If there's no result
                if (checkinfo == 0)
                {
                    //Optional ban user here for hacking.

                    //Disconnect the user if hack attempt
                    client.Disconnect(this.client.clientSocket);
                    return;
                }
                //If there's a result we continue loading
                else
                {
                    //Create new character definition details
                    Character = new character();
                    //Set character name
                    Character.Information.Name = CharacterName;
                    //Set player id
                    Character.Account.ID = Player.ID;
                    //Load player data
                    PlayerDataLoad();
                    //Load job data
                    LoadJobData();
                    //Check same character
                    checkSameChar(CharacterName, Character.Information.UniqueID);
                    //Check character stats
                    CheckCharStats(Character);
                    //Lock while we add new client
                    lock (Systems.clients)
                    {
                        //Add new client
                        Systems.clients.Add(this);
                    }
                    //Send login screen packet
                    client.Send(Packet.LoginScreen());
                    //Send player data load start packet
                    client.Send(Packet.StartPlayerLoad());
                    //Send player data load data
                    client.Send(Packet.Load(Character));
                    //Send end load for player data
                    client.Send(Packet.EndPlayerLoad());
                    //Update online status in database
                    MsSQL.UpdateData("UPDATE character SET online='1' WHERE id='" + Character.Information.CharacterID + "'");
                    //Set PVP State
                    MsSQL.UpdateData("UPDATE character SET Pvpstate='0' WHERE id='" + Character.Information.CharacterID + "'");
                    //Update server information (Players online).
                    UpdateServerInfo();
                    //Open our timers for spawn checks etc.
                    OpenTimer();
                    //Load blue data for character
                    LoadBlues(Character);
                    //Create new list for equiped items
                    List <Global.slotItem> EquipedItems = new List <Global.slotItem>();
                    //For each equiped item under slot 13
                    for (byte q = 0; q < 13; q++)
                    {
                        //Add items to the list
                        EquipedItems.Add(GetItem((uint)Character.Information.CharacterID, q, 0));
                    }
                    //Load blues for each item
                    foreach (Global.slotItem sitem in EquipedItems)
                    {
                        //Check if the dictionary contains our blue id on item
                        if (Data.ItemBlue.ContainsKey(sitem.dbID))
                        {
                            //If exists, load blue for the item
                            LoadBluesid(sitem.dbID);
                            //If blue amount is not 0
                            if (Data.ItemBlue[sitem.dbID].totalblue != 0)
                            {
                                //Add blue to stats and information
                                AddRemoveBlues(this, sitem, true);
                            }
                        }
                    }
                    //Default luck (Will be based on tickets increasment etc.
                    this.Character.Blues.Luck = 100;
                }
            }
            //Catch bad exception errors
            catch (Exception ex)
            {
                //Write to debug log
                Systems.Debugger.Write(ex);
            }
        }
Exemplo n.º 29
0
 ///////////////////////////////////////////////////////////////////////////
 // Grab pet information packet
 ///////////////////////////////////////////////////////////////////////////
 public static byte[] Pet_Information_grab(pet_obj o, byte slot)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(Systems.SERVER_PET_INFORMATION);
     try
     {
         //////////////////////////////////////////////////////////////////////////////////////
         // Grabpet structure
         //////////////////////////////////////////////////////////////////////////////////////
         Writer.DWord(o.UniqueID);                   //Unique ID
         Writer.DWord(o.Model);                      //Pet Model
         Writer.DWord(0x00006D);                     //Settings
         Writer.DWord(0x00006D);                     //Settings
         Writer.DWord(0x000047);                     //Settings 0x47 grab pet active 0 disabled
         if (o.Petname != "No name")                 //###############
             Writer.Text(o.Petname);                 // Name region
         else                                        //
             Writer.Word(0);                         //###############
         Writer.Byte(o.Slots);                       //Slots count inventory pet
         //////////////////////////////////////////////////////////////////////////////////////
         // Grabpet item inventory
         //////////////////////////////////////////////////////////////////////////////////////
         Systems.MsSQL ms = new Systems.MsSQL("SELECT * FROM char_items WHERE owner='" + o.OwnerID + "' AND pet_storage_id='" + o.UniqueID + "'");
         Writer.Byte(ms.Count());
         using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
         {
             while (reader.Read())
                 Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30));
         }
         ms.Close();
         //////////////////////////////////////////////////////////////////////////////////////
         // Other
         //////////////////////////////////////////////////////////////////////////////////////
         Writer.DWord(o.OwnerID);                    //Character ID
         Writer.Byte(slot);                          //Slot location of the pet
         //////////////////////////////////////////////////////////////////////////////////////
     }
     catch (Exception ex)
     {
         Console.WriteLine("Pet load error: " + ex);
     }
     return Writer.GetBytes();
 }