Thanks a lot Jacob. We all hope this gets fully completed this time. Keep up the awesome work!
P.S. : Could you please make it MSSQL compatible after the whole emulator is done?
Printable View
Thanks a lot Jacob. We all hope this gets fully completed this time. Keep up the awesome work!
P.S. : Could you please make it MSSQL compatible after the whole emulator is done?
What database file does this stuff use? I've just set-up a mysql database with phpmyadmin.
Im doing it wrong?Code:<Database>
<Host>127.0.0.1</Host>
<DatabaseName>gunzdb</DatabaseName>
<WindowsAuth>1</WindowsAuth>
<User>root</User>
<Pass></Pass>
</Database>
http://forum.ragezone.com/attachment...1&d=1286726166
Filebeam - Beam up that File Scottie!
Download that and put it in the folder .
Lambda is already done with his emu, just saying...
That's awesome, thanks.
Phail can you make it work with mssql?
Edit:
Lol connection with MySqlClient is almost the same as SqlClient.
So I think I'am able to convert it my self.
Edit:
I struggled.
http://imgur.com/mO03w.png
This is what I have so far.
EDIT:Code:using System;
using System.Collections;
using System.Collections.Generic;
using Bunny.Enums;
using Bunny.Items;
using Bunny.Players;
using Bunny.Utility;
using System.Data.SqlClient;
namespace Bunny.Core
{
class Database
{
//private static MySqlConnection _mysqlConnection;
private static SqlConnection _sqlConnection;
public static bool Initialize()
{
try
{
var connectionString = (string.Format("User ID={0};Password={1};Server={2};Trusted_Connection={3};Database={4};Connection Timeout = 1; Pooling=True;MultipleActiveResultSets=True", new object[] { Globals.Config.Database.User, Globals.Config.Database.Pass, Globals.Config.Database.Host, Globals.Config.Database.WindowsAuth, Globals.Config.Database.DatabaseName }));
_sqlConnection = new SqlConnection(connectionString);
_sqlConnection.Open();
return true;
}
catch (Exception e)
{
Log.Write("Error Initializing DB: {0}", e.Message);
return false;
}
}
private static void Execute(string szQuery)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand(szQuery, _sqlConnection))
command.ExecuteNonQuery();
}
}
private static void Execute(string szQuery, ArrayList pArray)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand(szQuery, _sqlConnection))
{
using (var reader = command.ExecuteReader())
{
if (reader == null)
return;
while (reader.Read())
for (int i = 0; i < reader.FieldCount; ++i)
pArray.Add(reader.IsDBNull(i) ? 0 : reader[i]);
}
}
}
}
private static int GetQuery(string szQuery)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand(szQuery, _sqlConnection))
return Convert.ToInt32(command.ExecuteScalar());
}
}
private static object GetQueryScalar(string szQuery)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand(szQuery, _sqlConnection))
return command.ExecuteScalar();
}
}
private static int GetIdentity(string szQuery)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand(szQuery, _sqlConnection))
using (var reader = command.ExecuteReader())
{
if (reader == null)
return 0;
reader.Read();
return Convert.ToInt32(reader[0]);
}
}
}
#region Modules
public static void GetAccount(string szUser, string szPassword, ref AccountInfo accountInfo)
{
if (accountInfo == null)
accountInfo = new AccountInfo();
lock (_sqlConnection)
{
using (var command = new SqlCommand("SELECT AID,UGradeID,PGradeID from Account WHERE UserID=@user AND password=@pass ", _sqlConnection))
{
command.Parameters.AddWithValue("@user", szUser);
command.Parameters.AddWithValue("@pass", szPassword);
using (var reader = command.ExecuteReader())
{
if (reader == null)
{
accountInfo.UserId = "INVALID";
accountInfo.Access = UGradeId.Guest;
accountInfo.Premium = 0;
return;
}
if (reader.Read())
{
accountInfo.AccountId = Convert.ToInt32(reader["AID"]);
accountInfo.Access = (UGradeId)Convert.ToByte(reader["UGradeID"]);
accountInfo.Premium = (PGradeId)Convert.ToByte(reader["premium"]);
accountInfo.UserId = szUser;
}
else
{
accountInfo.UserId = "INVALID";
accountInfo.Access = UGradeId.Guest;
accountInfo.Premium = 0;
}
}
}
}
}
public static List<Pair<string, byte>> GetCharacterList(Int32 aid)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand("SELECT Name,Level FROM `Character` WHERE AID=@aid ORDER BY CharNum ASC LIMIT 4", _sqlConnection))
{
command.Parameters.AddWithValue("@aid", aid);
var characters =new List<Pair<string, byte>>();
using (var reader = command.ExecuteReader())
{
if (reader == null)
return characters;
for (byte b = 0; reader.Read(); b++)
{
var name = Convert.ToString(reader["Name"]);
var level = Convert.ToByte(reader["Level"]);
characters.Add(new Pair<string, byte>(name,level));
}
}
return characters;
}
}
}
public static bool CreateCharacter(Int32 aid, byte nCharNumber, string szName, Int32 nSex, Int32 nHair, Int32 nFace, Int32 nCostume)
{
var melee = new int[] { 1, 2, 1, 2, 2, 1 };
var primary = new int[] { 5001, 5002, 4005, 4001, 4002, 4006 };
var secondary = new int[] { 4001, 0, 5001, 4006, 0, 4006 };
var custom1 = new int[] { 30301, 30301, 30401, 30401, 30401, 30101 };
var custom2 = new int[] { 0, 0, 0, 0, 30001, 30001 };
var malechest = new int[] { 21001, 21001, 21001, 21001, 21001, 21001 };
var malelegs = new int[] { 23001, 23001, 23001, 23001, 23001, 23001 };
var femalechest = new int[] { 21501, 21501, 21501, 21501, 21501, 21501 };
var femalelegs = new int[] { 23501, 23501, 23501, 23501, 23501, 23501 };
lock (_sqlConnection)
{
using (var command = new SqlCommand("insert into `Character` (AID,CharNum,Name,Sex,Hair,Face) values (@AID,@CharNum,@Name,@Sex,@hair,@face)", _sqlConnection))
{
command.Parameters.AddWithValue("@AID", aid);
command.Parameters.AddWithValue("@CharNum", nCharNumber);
command.Parameters.AddWithValue("@Name", szName);
command.Parameters.AddWithValue("@Sex", nSex);
command.Parameters.AddWithValue("@Hair", nHair);
command.Parameters.AddWithValue("@Face", nFace);
command.ExecuteNonQuery();
var charId = GetIdentity("select @@identity");
var id = AddItem(charId, melee[nCostume]);
UpdateSlot(charId, ItemSlotType.melee_slot, id);
id = AddItem(charId, primary[nCostume]);
UpdateSlot(charId, ItemSlotType.primary_slot, id);
id = AddItem(charId, secondary[nCostume]);
UpdateSlot(charId, ItemSlotType.secondary_slot, id);
id = AddItem(charId, custom1[nCostume]);
UpdateSlot(charId, ItemSlotType.custom1_slot, id);
id = AddItem(charId, custom2[nCostume]);
UpdateSlot(charId, ItemSlotType.custom2_slot, id);
if (nSex == 0)
{
id = AddItem(charId, malechest[nCostume]);
UpdateSlot(charId, ItemSlotType.chest_slot, id);
id = AddItem(charId, malelegs[nCostume]);
UpdateSlot(charId, ItemSlotType.legs_slot, id);
}
else
{
id = AddItem(charId, femalechest[nCostume]);
UpdateSlot(charId, ItemSlotType.chest_slot, id);
id = AddItem(charId, femalelegs[nCostume]);
UpdateSlot(charId, ItemSlotType.legs_slot, id);
}
return true;
}
}
}
public static void UpdateIndexes(Int32 aid)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand("SELECT CID FROM `Character` WHERE AID=@aid LIMIT 4", _sqlConnection))
{
command.Parameters.AddWithValue("@aid", aid);
using (var reader = command.ExecuteReader())
{
if (reader == null)
return;
var ii = new List<int>();
for (var i = 0; reader.Read(); ++i)
ii.Add(Convert.ToInt32(reader[0]));
reader.Close();
for (var i = 0; i < ii.Count; ++i)
Execute(string.Format("update `Character` set CharNum={0} where cid={1}", i, ii[i]));
}
}
}
}
public static void UpdateBp(Int32 cid, Int32 newBounty)
{
Execute(string.Format("UPDATE `Character` SET BP={0} WHERE CID={1}", newBounty, cid));
}
public static bool GetCharacter(Int32 aid, byte nIndex, CharacterInfo charInfo)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand("SELECT * FROM `Character` WHERE AID=@aid AND CharNum=@index", _sqlConnection))
{
command.Parameters.AddWithValue("@aid", aid);
command.Parameters.AddWithValue("@index", nIndex);
using (var reader = command.ExecuteReader())
{
if (reader == null || !reader.Read())
return false;
charInfo.CharacterId = Convert.ToInt32(reader["CID"]);
charInfo.ClanId = 0;
charInfo.Name = Convert.ToString(reader["Name"]);
charInfo.Level = Convert.ToByte(reader["Level"]);
charInfo.Sex = Convert.ToByte(reader["Sex"]);
charInfo.Hair = Convert.ToByte(reader["Hair"]);
charInfo.Face = Convert.ToByte(reader["Face"]);
charInfo.Xp = Convert.ToUInt32(reader["XP"]);
charInfo.Bp = Convert.ToInt32(reader["BP"]);
charInfo.BonusRate = 0.0f;
charInfo.Prize = 0;
charInfo.Fr = 0;
charInfo.Er = 0;
charInfo.Cr = 0;
charInfo.Wr = 0;
charInfo.SafeFalls = 0;
charInfo.Kills = Convert.ToInt32(reader["KillCount"]);
charInfo.Deaths = Convert.ToInt32(reader["DeathCount"]);
reader.Close();
var items = new ArrayList();
Execute("SELECT head_slot,chest_slot,hands_slot,legs_slot,Feet_slot,fingerl_slot,fingerr_slot,melee_slot,primary_slot,secondary_slot,custom1_slot,custom2_slot FROM `character` WHERE CID=" + charInfo.CharacterId, items);
for (int i = 0; i < 12; i++)
{
charInfo.EquippedItems[i] = new Item();
charInfo.EquippedItems[i].ItemCid = Convert.ToInt32(items[i]);
}
var clanInfo = new ArrayList();
Execute("SELECT CLID,Grade,ContPoint FROM ClanMember WHERE CID=" + charInfo.CharacterId, clanInfo);
if (clanInfo.Count > 0)
{
charInfo.ClanId = (Int32)clanInfo[0] < 0 ? 0 : (Int32)clanInfo[0];
charInfo.ClanGrade = (ClanGrade)Convert.ToInt32(clanInfo[1]);
charInfo.ClanPoint = Convert.ToInt16(clanInfo[2]);
charInfo.ClanName = Convert.ToString(GetQueryScalar("SELECT Name FROM Clan WHERE CLID=" + charInfo.ClanId));
}
command.CommandText = "SELECT ItemID,CIID,RentHourPeriod FROM CharacterItem WHERE CID=" + charInfo.CharacterId;
reader.Close();
using (var dataReader = command.ExecuteReader())
{
if (dataReader != null)
{
while (dataReader.Read())
{
Item nItem = new Item();
nItem.ItemId = Convert.ToInt32(dataReader["itemid"]);
nItem.ItemCid = Convert.ToInt32(dataReader["CIID"]);
nItem.RentHour =
Convert.ToInt32(dataReader.IsDBNull(2) ? 0 : dataReader["RentHourPeriod"]);
charInfo.Items.Add(nItem);
}
}
}
for (var i = 0; i < 12; i++)
{
var item = charInfo.Items.Find(ii => ii.ItemCid == charInfo.EquippedItems[i].ItemCid);
charInfo.EquippedItems[i].ItemId = item == null ? 0 : item.ItemId;
}
return true;
}
}
}
}
public static int GetCid(Int32 aid, int marker)
{
return GetQuery(string.Format("SELECT CID FROM `character` WHERE CharNum={0} AND AID={1}", marker, aid));
}
public static int GetCharacterCount(Int32 aid)
{
return GetQuery(string.Format("SELECT COUNT(AID) FROM `character` WHERE AID={0}", aid));
}
public static bool CharacterExists(string name)
{
return GetQuery("SELECT COUNT(Name) FROM `character` WHERE Name='" + name + "'") > 0;
}
public static void DeleteCharacter(Int32 aid, Int32 cid)
{
Execute("DELETE FROM `character` WHERE CID=" + cid);
UpdateIndexes(aid);
}
public static int AddItem(Int32 cid, Int32 itemid)
{
Execute(string.Format("INSERT INTO CharacterItem (CID,ItemID,RegDate) VALUES ({0},{1},NOW())", cid, itemid));
return GetIdentity(string.Format("select @@identity"));
}
public static void Deletetem(Int32 ciid)
{
Execute(string.Format("DELETE FROM CharacterItem WHERE CIID={0}", ciid));
}
public static void UpdateSlot(Int32 cid, ItemSlotType slot, Int32 itemid)
{
Execute(string.Format("UPDATE `character` SET {0}={1} WHERE CID={2}", slot, itemid, cid));
}
public static void UpdateLevel(Int32 cid, UInt32 xp, Int32 level)
{
Execute(string.Format("UPDATE `character` SET XP={0},Level={1} WHERE CID={2}", xp, level, cid));
}
public static bool IsInClan(Client client)
{
return GetQuery("SELECT COUNT(CID) FROM ClanMember WHERE CID=" + client.ClientPlayer.PlayerCharacter.CharacterId) > 0;
}
public static bool ClanExists(string clanName)
{
return (GetQuery("SELECT COUNT(Name) FROM Clan WHERE Name='" + clanName + "'") > 0);
}
public static int CreateClan(string clanName, Client master, Client member1, Client member2, Client member3, Client member4)
{
Execute(string.Format("INSERT INTO Clan (Name,MasterCID,RegDate) VALUES ('{0}',{1},NOW())", clanName, master.ClientPlayer.PlayerCharacter.CharacterId));
var clanId = GetIdentity(string.Format("select @@identity"));
Execute(string.Format("INSERT INTO ClanMember (CLID,CID,Grade,RegDate) VALUES ({0},{1}, 1, NOW())", clanId, master.ClientPlayer.PlayerCharacter.CharacterId));
Execute(string.Format("INSERT INTO ClanMember (CLID,CID,Grade,RegDate) VALUES ({0},{1}, 9, NOW())", clanId, member1.ClientPlayer.PlayerCharacter.CharacterId));
Execute(string.Format("INSERT INTO ClanMember (CLID,CID,Grade,RegDate) VALUES ({0},{1}, 9, NOW())", clanId, member2.ClientPlayer.PlayerCharacter.CharacterId));
Execute(string.Format("INSERT INTO ClanMember (CLID,CID,Grade,RegDate) VALUES ({0},{1}, 9, NOW())", clanId, member3.ClientPlayer.PlayerCharacter.CharacterId));
Execute(string.Format("INSERT INTO ClanMember (CLID,CID,Grade,RegDate) VALUES ({0},{1}, 9, NOW())", clanId, member4.ClientPlayer.PlayerCharacter.CharacterId));
return clanId;
}
public static void JoinClan(Int32 cid, Int32 clid)
{
Execute(string.Format("INSERT INTO ClanMember (CLID,CID,Grade,RegDate) VALUES ({0},{1}, 9, NOW())", clid, cid));
}
public static void ExpelMember(Int32 cid)
{
Execute("DELETE FROM ClanMember WHERE CID=" + cid);
}
public static void UpdateMember(Int32 cid, Int32 rank)
{
Execute("UPDATE ClanMember SET Grade=" + rank + " WHERE CID=" + cid);
}
public static Int32 GetClanId (string clanName)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand("SELECT CLID FROM Clan where Name=@name", _sqlConnection))
{
command.Parameters.AddWithValue("@name", clanName);
return (Int32)command.ExecuteScalar();
}
}
}
public static string GetCharacterName (Int32 cid)
{
lock (_sqlConnection)
{
using (var command = new SqlCommand("SELECT name FROM `character` where cid=@cid", _sqlConnection))
{
command.Parameters.AddWithValue("@cid", cid);
using (var reader = command.ExecuteReader())
{
if (!reader.Read())
return string.Empty;
return Convert.ToString(reader["name"]);
}
}
}
}
public static void GetClanInfo (Int32 clanId, ref ClanInfo clanInfo)
{
lock (_sqlConnection)
{
using (
var command = new SqlCommand("SELECT * FROM clan WHERE CLID=@clid",
_sqlConnection))
{
command.Parameters.AddWithValue("@clid", clanId);
using (var reader = command.ExecuteReader())
{
if (reader == null || !reader.Read())
{
clanInfo = null;
return;
}
clanInfo.ClanId = clanId;
clanInfo.Name = Convert.ToString(reader["name"]);
clanInfo.Points = (Int32) reader["exp"];
clanInfo.Level = (Int32) reader["level"];
clanInfo.TotalPoints = (Int32) reader["point"];
clanInfo.Wins = (Int32) reader["wins"];
clanInfo.Losses = (Int32)reader["losses"];
clanInfo.Ranking = (Int32)reader["totalranking"];
clanInfo.EmblemChecksum = reader["emblemurl"] == null ? 0 : 1;
var cid = (Int32) reader["mastercid"];
reader.Close();
clanInfo.Master = GetCharacterName(cid);
clanInfo.MemberCount = GetQuery("SELECT COUNT(CID) FROM ClanMember WHERE CLID=" + clanId);
}
}
}
}
#endregion
}
}
Stupid me, I've to fix the queries of course.
Anyone got a link to a proper client for use with this? Mine seems to crash
EDIT: It shouldn't be hard to convert to MSSQL, I can attempt that if I get mine working.
From the looks of it, it looks pretty similar.
Code:/*
Bunny & Hare GunZDB V2.1
Updated: 9/9/2010 6:23:13 AM
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for account
-- ----------------------------
CREATE TABLE `account` (
`aid` int(11) NOT NULL AUTO_INCREMENT,
`userid` varchar(25) NOT NULL,
`password` varchar(64) NOT NULL,
`regdate` date DEFAULT NULL,
`name` varchar(25) NOT NULL,
`email` varchar(128) NOT NULL,
`access` smallint(6) DEFAULT '0',
`premium` smallint(6) DEFAULT '0',
`registerip` varchar(25) DEFAULT NULL,
`lastloginip` varchar(25) DEFAULT NULL,
`lastconndate` datetime DEFAULT NULL,
`age` smallint(6) DEFAULT NULL,
`sex` tinyint(4) DEFAULT NULL,
`address` varchar(64) DEFAULT NULL,
`zip` int(11) DEFAULT NULL,
`online` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`aid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Table structure for character
-- ----------------------------
CREATE TABLE `character` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`aid` int(11) NOT NULL,
`name` varchar(24) NOT NULL,
`level` int(11) NOT NULL DEFAULT '1',
`sex` tinyint(4) NOT NULL,
`charnum` tinyint(4) NOT NULL DEFAULT '0',
`hair` tinyint(4) NOT NULL,
`face` tinyint(4) NOT NULL,
`XP` int(11) NOT NULL DEFAULT '0',
`BP` int(11) NOT NULL DEFAULT '0',
`head_slot` int(11) DEFAULT NULL,
`chest_slot` int(11) DEFAULT NULL,
`hands_slot` int(11) DEFAULT NULL,
`legs_slot` int(11) DEFAULT NULL,
`feet_slot` int(11) DEFAULT NULL,
`fingerl_slot` int(11) DEFAULT NULL,
`fingerr_slot` int(11) DEFAULT NULL,
`melee_slot` int(11) DEFAULT NULL,
`primary_slot` int(11) DEFAULT NULL,
`secondary_slot` int(11) DEFAULT NULL,
`custom1_slot` int(11) DEFAULT NULL,
`custom2_slot` int(11) DEFAULT NULL,
`regdate` datetime DEFAULT NULL,
`playtime` int(11) DEFAULT NULL,
`killcount` int(11) DEFAULT '0',
`deathcount` int(11) DEFAULT '0',
`online` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`cid`),
KEY `ChFkeyaccount` (`aid`),
CONSTRAINT `ChFkeyaccount` FOREIGN KEY (`aid`) REFERENCES `account` (`aid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Table structure for characteritem
-- ----------------------------
CREATE TABLE `characteritem` (
`ciid` int(11) NOT NULL AUTO_INCREMENT,
`cid` int(11) NOT NULL,
`itemid` int(11) NOT NULL,
`regdate` datetime NOT NULL,
`rentdate` datetime DEFAULT NULL,
`renthourperiod` int(11) DEFAULT NULL,
`cnt` int(11) DEFAULT NULL,
PRIMARY KEY (`ciid`),
KEY `cid` (`cid`),
CONSTRAINT `FKLOL` FOREIGN KEY (`cid`) REFERENCES `character` (`cid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Table structure for clan
-- ----------------------------
CREATE TABLE `clan` (
`clid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(24) NOT NULL,
`exp` int(11) DEFAULT '0',
`level` int(11) DEFAULT '0',
`point` int(11) DEFAULT '0',
`mastercid` int(11) NOT NULL,
`wins` int(11) DEFAULT '0',
`losses` int(11) DEFAULT '0',
`draws` int(11) DEFAULT '0',
`totalranking` int(11) DEFAULT '0',
`lastmonthrank` int(11) DEFAULT NULL,
`emblemurl` varchar(256) DEFAULT NULL,
PRIMARY KEY (`clid`),
KEY `CTFKey` (`mastercid`),
CONSTRAINT `CTFKey` FOREIGN KEY (`mastercid`) REFERENCES `character` (`cid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Table structure for clanmember
-- ----------------------------
CREATE TABLE `clanmember` (
`cmid` int(11) NOT NULL AUTO_INCREMENT,
`clid` int(11) NOT NULL,
`cid` int(11) NOT NULL,
`grade` tinyint(4) NOT NULL DEFAULT '9',
`regdate` datetime NOT NULL,
`contpoint` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`cmid`),
KEY `CFkeymember` (`cid`),
KEY `CFkeymemberclan` (`clid`),
CONSTRAINT `CFkeymember` FOREIGN KEY (`cid`) REFERENCES `character` (`cid`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `CFkeymemberclan` FOREIGN KEY (`clid`) REFERENCES `clan` (`clid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;