Release: No More Login Frozening(My way)!

09/04/2008 08:32 alexbigfoot#1
Only me,keving, and Ultimatum was having this thing on.Idk about the rest....


Ok,because most of p servers are using LOTF versions...it will be for lotf(XD,i used lotf too),if u re using powersource version,i think u cannot change anything to the database.
Anyway....
All u have to do is in database.cs and a bit in general.cs

Good....now search for "public static MySqlConnection Connection;"
after it add
"public static MySqlConnection LoginConnection;"
now search for "public static bool Connect(string user, string pass)"after its end add
Code:
        public static bool Connect2(string user, string pass)
        {
            try
            {
                LoginConnection = new MySqlConnection("Server='localhost';Database='coproj;Username='" + user + "';Password='" + pass + "'");
                LoginConnection.Open();
                return true;
            }
            catch
            {
                return false;
            }
        }
good...now
search for
Code:
 DataAdapter = new MySqlDataAdapter("SELECT * FROM `Accounts` WHERE `AccountID` = '" + UserName + "'", Connection);
make it
Code:
DataAdapter = new MySqlDataAdapter("SELECT * FROM `Accounts` WHERE `AccountID` = '" + UserName + "'", LoginConnection);
also for this one too
Code:
 MySqlCommand Command = new MySqlCommand("UPDATE `Accounts` SET `Password` = '" + Password + "' WHERE `AccountID` = '" + UserName + "'", Connection);
make it
Code:
MySqlCommand Command = new MySqlCommand("UPDATE `Accounts` SET `Password` = '" + Password + "' WHERE `AccountID` = '" + UserName + "'", LoginConnection);
also for this one too
Code:
MySqlCommand Comm = new MySqlCommand("UPDATE `Accounts` SET `LogonCount` = " + LogonCount + " WHERE `AccountID` = '" + UserName + "'", Connection);
make it
Code:
MySqlCommand Comm = new MySqlCommand("UPDATE `Accounts` SET `LogonCount` = " + LogonCount + " WHERE `AccountID` = '" + UserName + "'", LoginConnection);
after this things at "public static void GetCharInfo" u`ll see
Code:
MySqlDataAdapter DataAdapter = new MySqlDataAdapter("SELECT * FROM `Characters` WHERE `Account` = '" + UserName + "'", Connection);
make it
Code:
MySqlDataAdapter DataAdapter = new MySqlDataAdapter("SELECT * FROM `Characters` WHERE `Account` = '" + UserName + "'", LoginConnection);
GOOD!Now open General.cs
search for
Code:
DataBase.Connect(DBUserName, DBUserPass);
after it add
Code:
DataBase.Connect2(DBUserName, DBUserPass);


Well...Korvacs is saying the truth...without a path it wont give any reusults....
So,here it comes:
at public static void GetCharInfo(Character Charr, string UserName)
before DataSet DSet = new DataSet();
add a
Code:
            try
            {
in this statement u can find
Code:
 
              else
                    General.WriteLine("Char not found.");
after it add
Code:
            }
            catch (InvalidOperationException exc)
            {
                General.WriteLine(Convert.ToString(exc));
                LoginConnection.Open();
            }
Now....
at public static byte Authenticate(string UserName, string Password)
before
Code:
            MySqlDataAdapter DataAdapter = null;
            DataAdapter = new MySqlDataAdapter("SELECT * FROM `Accounts` WHERE `AccountID` = '" + UserName + "'", LoginConnection);
add
Code:
            LoginConnection.Close();
            LoginConnection.Open();



Thats all ...
P.S. It can hold a bit more ppl...for a long time.I had my server on with 20 ppl sometime and still no problem with loging for more than 24 hours.Hope You`ll enjoy it.I`ll release more thhings....prob. today the double exp potion,icon,things.


it should look like
GetCharInfo
Code:
        public static void GetCharInfo(Character Charr, string UserName)
        {
            try
            {
            DataSet DSet = new DataSet();
            MySqlDataAdapter DataAdapter = new MySqlDataAdapter("SELECT * FROM `Characters` WHERE `Account` = '" + UserName + "'", LoginConnection);
            DataAdapter.Fill(DSet, "Character");
            if (DSet != null && DSet.Tables["Character"].Rows.Count > 0)
            {
                DataRow DR = DSet.Tables["Character"].Rows[0];


                Charr.UID = (uint)DR["UID"];
                Charr.Name = (string)DR["CharName"];
                Charr.Job = Convert.ToByte((uint)DR["Job"]);
                Charr.Level = Convert.ToByte((uint)DR["Level"]);
                Charr.Exp = (uint)DR["Exp"];
                Charr.Model = Convert.ToUInt16((uint)DR["Model"]);
                Charr.Avatar = Convert.ToUInt16((uint)DR["Avatar"]);
                Charr.Hair = Convert.ToUInt16((uint)DR["Hair"]);
                Charr.LocX = Convert.ToUInt16((uint)DR["LocationX"]);
                Charr.LocY = Convert.ToUInt16((uint)DR["LocationY"]);
                Charr.LocMap = Convert.ToUInt16((uint)DR["LocationMap"]);
                Charr.Str = Convert.ToUInt16((uint)DR["Strength"]);
                Charr.Agi = Convert.ToUInt16((uint)DR["Agility"]);
                Charr.Vit = Convert.ToUInt16((uint)DR["Vitality"]);
                Charr.Spi = Convert.ToUInt16((uint)DR["Spirit"]);
                Charr.Silvers = (uint)DR["Money"];
                Charr.CPs = (uint)DR["CPs"];
                Charr.CurHP = Convert.ToUInt16((uint)DR["CurrentHP"]);
                Charr.PKPoints = Convert.ToUInt16((uint)DR["PKPoints"]);
                Charr.RBCount = Convert.ToByte((uint)DR["RBCount"]);
                Charr.PackedInventory = (string)DR["Inventory"];
                Charr.PackedEquips = (string)DR["Equipment"];
                Charr.PackedSkills = (string)DR["Skills"];
                Charr.PackedProfs = (string)DR["Profs"];
                Charr.WHSilvers = (uint)DR["WHMoney"];
                Charr.PackedWHs = (string)DR["Warehouses"];
                Charr.PackedFriends = (string)DR["Friends"];
                Charr.PackedEnemies = (string)DR["Enemies"];
                Charr.VP = (uint)DR["VP"];
                Charr.GuildDonation = (uint)DR["GuildDonation"];
                Charr.GuildID = Convert.ToUInt16((uint)DR["MyGuild"]);
                Charr.GuildPosition = Convert.ToByte((uint)DR["GuildPos"]);
                Charr.PrevMap = Convert.ToUInt16((uint)DR["PrevMap"]);
                if (Guilds.AllGuilds.Contains(Charr.GuildID))
                    Charr.MyGuild = (Guild)Guilds.AllGuilds[Charr.GuildID];
                Charr.MinAtk = Charr.Str;
                Charr.MaxAtk = Charr.Str;
                Charr.Potency = Charr.Level;
                Charr.RealModel = Charr.Model;
                Charr.RealAvatar = Charr.Avatar;
                Charr.MaxHP = Charr.BaseMaxHP();
                Charr.RealAgi = Charr.Agi;
            }
            else
                General.WriteLine("Char not found.");
        }
        catch (Exception Exc) { General.WriteLine(Convert.ToString(Exc)); }
    }
Autenthicate
Code:
public static byte Authenticate(string UserName, string Password)
        {
            LoginConnection.Close();
            LoginConnection.Open();
            MySqlDataAdapter DataAdapter = null;
            DataAdapter = new MySqlDataAdapter("SELECT * FROM `Accounts` WHERE `AccountID` = '" + UserName + "'", LoginConnection);
            DataSet DSet = new DataSet();
            DataAdapter.Fill(DSet, "Account");

            if (DSet != null && DSet.Tables["Account"].Rows.Count > 0)
            {
                DataRow DR = DSet.Tables["Account"].Rows[0];

                string Pass = (string)DR["Password"];
                if (Pass == Password || Pass == "")
                {
                    if (Pass == "")
                    {
                        MySqlCommand Command = new MySqlCommand("UPDATE `Accounts` SET `Password` = '" + Password + "' WHERE `AccountID` = '" + UserName + "'", LoginConnection);
                        Command.ExecuteNonQuery();
                    }

                    uint LogonCount = (uint)DR["LogonCount"];
                    LogonCount++;

                    MySqlCommand Comm = new MySqlCommand("UPDATE `Accounts` SET `LogonCount` = " + LogonCount + " WHERE `AccountID` = '" + UserName + "'", LoginConnection);
                    Comm.ExecuteNonQuery();

                    return Convert.ToByte((uint)DR["LogonType"]);
                }
                else
                    return 0;
            }
            else
                return 0;
        }
09/04/2008 09:12 ~Yuki~#2
Wohooo Nice!
09/04/2008 09:19 alexbigfoot#3
1 [Only registered and activated users can see links. Click Here To Register...] would be enough.... XD
09/04/2008 09:32 ~Yuki~#4
Did it already :P
09/04/2008 13:42 alexbigfoot#5
#Updated...thanx to Korvacs
09/04/2008 13:46 plasma-hand#6
wow very nice alex
09/04/2008 13:58 alexbigfoot#7
i`m gonna make a lot of releases....XD one of them is how to fix the guilds,and friends , i know u probabily would say whats the problem with them....u`ll see when i`ll post it.
09/04/2008 14:12 plasma-hand#8
ya theres definitley a problem with those.Wait let me put it into better terms there is a problem with everything in lotf source
09/04/2008 14:15 alexbigfoot#9
hehe...true...XD
09/04/2008 14:15 alexbigfoot#10
hehe...true...XD
thats why we are fixing what hadeset did wrong...
09/04/2008 14:29 plasma-hand#11
good job cant wait to see ur other releases
09/04/2008 14:46 ~Yuki~#12
Cant get it work with
Quote:
else
So i removed it i hope it works...
09/04/2008 15:38 alexbigfoot#13
gimme an msn,yahoo , gmail anything so i can help u...
sorry...for that thing....LOOL
delete what u added after
Code:
try
{
this is the right...
Code:
in this statement u can find
[code] 
              else
                    General.WriteLine("Char not found.");
after it add
Code:
            }
            catch (InvalidOperationException exc)
            {
                General.WriteLine(Convert.ToString(exc));
                LoginConnection.Open();
            }
[/code]
09/04/2008 16:17 alexbigfoot#14
#REUPDATED
09/04/2008 17:17 ~Yuki~#15
And u do it great^^