For the DB, here are some examples...don't use them (like copy+paste, change shit around, or take parts from it), just use them as a guide...as this was when I was playing around and using the way CoEmu v2 did the DB:
LoadChar Example
Code:
public static bool LoadChar(GameClient Client)//new character load (mysql)
{
bool res = false;
try
{
MySqlCommand cmd = new MySqlCommand("SELECT * FROM `characters` WHERE `UID` = \"" + Client.Identifier + "\"", DBConnect.Connection());
MySqlDataReader DaRe = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (DaRe.Read())
{
Client.Entity.UID = Convert.ToUInt32(DaRe["UID"]);
if (Client.Entity.UID == Client.Identifier)
{
res = true;
Client.Entity.Name = Convert.ToString(DaRe["Name"]);
Client.Spouse = Convert.ToString(DaRe["Spouse"]);
Client.Entity.MapID = Convert.ToUInt16(DaRe["MapID"]);
Client.Entity.X = Convert.ToUInt16(DaRe["MapX"]);
Client.Entity.Y = Convert.ToUInt16(DaRe["MapY"]);
Client.Entity.Model = Convert.ToUInt16(DaRe["Model"]);
Client.Job = Convert.ToByte(DaRe["Job"]);
Client.Entity.Reborn = Convert.ToUInt16(DaRe["Reborn"]);
if (Client.Entity.Reborn > 0)
{
Client.StatPoints = Convert.ToUInt16(DaRe["StatPoints"]);
Client.Spirit = Convert.ToUInt16(DaRe["Spirit"]);
Client.Strength = Convert.ToUInt16(DaRe["Strength"]);
Client.Vitality = Convert.ToUInt16(DaRe["Vitality"]);
Client.Agility = Convert.ToUInt16(DaRe["Agility"]);
}
else
{
GetStats(Client);
}
Client.Entity.Level = Convert.ToByte(DaRe["Level"]);
Client.Silvers = Convert.ToInt32(DaRe["Silvers"]);
Client.ConquerPoints = Convert.ToInt32(DaRe["CPs"]);
Client.Experience = Convert.ToUInt16(DaRe["Experience"]);
Client.Entity.HairStyle = Convert.ToUInt16(DaRe["Hairstyle"]);
Client.Entity.Hitpoints = Convert.ToInt32(DaRe["HitPoints"]);
Client.Staff = Convert.ToInt16(DaRe["Staff"]);
Client.NewChar = Convert.ToInt16(DaRe["NewChar"]);
}
//LoadItems(Client);
//LoadInventory(Client);
}
DaRe.Close();
cmd.Dispose();
}
catch (Exception exc)
{
Console.WriteLine(exc.ToString());
}
return res;
}
LoadPortals
Code:
public static void LoadPortals()//new way to load portals (mysql)
{
MySqlCommand cmd = new MySqlCommand("SELECT * FROM `portals`", DBConnect.Connection());
MySqlDataReader DaRe = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (DaRe.Read())
{
IPortal portal = new Portal();
portal.CurrentX = Convert.ToUInt16(DaRe["StartX"]);
portal.CurrentY = Convert.ToUInt16(DaRe["StartY"]);
portal.CurrentMapID = Convert.ToUInt16(DaRe["StartMap"]);
portal.DestinationX = Convert.ToUInt16(DaRe["EndX"]);
portal.DestinationY = Convert.ToUInt16(DaRe["EndY"]);
portal.DestinationMapID = Convert.ToUInt16(DaRe["EndMap"]);
if (!Kernel.Portals.ContainsKey(portal.CurrentX.ToString() + portal.CurrentY.ToString() + portal.CurrentMapID.ToString()))
Kernel.Portals.Add(portal.CurrentX.ToString() + portal.CurrentY.ToString() + portal.CurrentMapID.ToString(), portal);
}
DaRe.Close();
Console.WriteLine("[Game] Database - Portals loaded.");
}
LoadNPCs
Code:
public static void LoadNPCs()
{
MySqlCommand cmd = new MySqlCommand("SELECT * FROM `cq_npc`", DBConnect.Connection());
MySqlDataReader DaRe = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (DaRe.Read())
{
INpc npc = new NpcSpawnPacket();
npc.UID = Convert.ToUInt32(DaRe["id"]);
npc.X = Convert.ToUInt16(DaRe["cellx"]);
npc.Y = Convert.ToUInt16(DaRe["celly"]);
npc.MapID = Convert.ToUInt16(DaRe["mapid"]);
npc.Type = Convert.ToUInt16(DaRe["lookface"]);
npc.Facing = (ConquerAngle)Convert.ToUInt16(DaRe["type"]);
npc.StatusFlag = Convert.ToUInt16(DaRe["sort"]);
GetNpcDictionary:
Dictionary<uint, INpc> npcs;
if (Kernel.Npcs.TryGetValue(npc.MapID, out npcs))
{
npcs.Add(npc.UID, npc);
}
else
{
npcs = new Dictionary<uint, INpc>();
Kernel.Npcs.Add(npc.MapID, npcs);
goto GetNpcDictionary;
}
}
DaRe.Close();
//FOR CONSOLE DISPLAY
Console.WriteLine("[Game] Database - NPCs Loaded.");
}
Account Password Check
Code:
public static bool AccountValid(AuthClient Client, ref uint UID)//NEW Auth Login (using MySQL)
{
string Password;
UID = 0;
MySqlCommand cmd = new MySqlCommand("SELECT * FROM `accounts` WHERE `AccountID` = \"" + Client.Username + "\"", DBConnect.Connection());
MySqlDataReader DaRe = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (DaRe.Read())
{
Password = (DaRe["Password"].ToString());
Console.WriteLine("[Auth] Incoming acc: \"{0}\" w/ the pass: \"{1}\" has connected.", Client.Username, Client.Password);
//Above is only useful IF server has the password decryption on it (and is using it).
if (Password.Equals(Client.Password, StringComparison.CurrentCultureIgnoreCase))
{
UID = Convert.ToUInt32(DaRe["UID"]);
}
}
DaRe.Close();
return (UID != 0);
}
edit: Ye, this was from a while ago...looks so nooby nao compared to what I prefer to do D: