Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace Database
{
public class Database
{
private string DBPath = "";
public Database(string AccountName)
{
this.DBPath = "Accounts/" + AccountName;
if (!Directory.Exists(this.DBPath))
{
Directory.CreateDirectory(this.DBPath);
Directory.CreateDirectory(this.DBPath + "/Items");
Directory.CreateDirectory(this.DBPath + "/Friends");
Directory.CreateDirectory(this.DBPath + "/Enemies");
Directory.CreateDirectory(this.DBPath + "/Logs");
Directory.CreateDirectory(this.DBPath + "/Skills");
Directory.CreateDirectory(this.DBPath + "/Profs");
}
}
public IDictionary<uint, ConquerItem> LoadItems()
{
IDictionary<uint, ConquerItem> Items = new Dictionary<uint, ConquerItem>();
foreach (string FileName in Directory.GetFiles(this.DBPath + "/Items"))
{
uint ItemUID;
if (uint.TryParse(FileName, out ItemUID))
{
BinaryReader BR = new BinaryReader(new FileStream(this.DBPath + "/Items/" + FileName, FileMode.Open));
ConquerItem Item = new ConquerItem();
Item.UID = ItemUID;
Item.ItemID = BR.ReadUInt32(); //0-4
Item.Durability = BR.ReadUInt16(); //4-6
Item.Position = BR.ReadByte(); //6-7
Item.SocketOne = BR.ReadByte(); //7-8
Item.SocketTwo = BR.ReadByte(); //8-9
Item.Plus = BR.ReadByte(); //9-10
Item.Bless = BR.ReadByte(); //10-11
Item.Locked = BR.ReadByte(); //11-12
Item.Enchant = BR.ReadByte(); //12-13
Item.Color = BR.ReadByte(); //13-14
Item.ExtraAttribute = BR.ReadByte(); //14-15
int OwnerLen = BR.ReadByte(); //15-16
Item.Owner = ASCIIEncoding.ASCII.GetString(BR.ReadBytes(OwnerLen)); //16-32 max (16 digit account length)
BR.BaseStream.Close();
BR.Close();
}
}
return Items;
}
public void AddItem(ConquerItem Item)
{
BinaryWriter BW = new BinaryWriter(new FileStream(this.DBPath + "/Items/" + Item.UID, FileMode.Create));
BW.Write(Item.UID);
BW.Write(Item.ItemID);
BW.Write(Item.Durability);
BW.Write(Item.Position);
BW.Write(Item.SocketOne);
BW.Write(Item.SocketTwo);
BW.Write(Item.Plus);
BW.Write(Item.Bless);
BW.Write(Item.Locked);
BW.Write(Item.Enchant);
BW.Write(Item.Color);
BW.Write(Item.ExtraAttribute);
BW.Write((byte)Item.Owner.Length);
BW.Write(Item.Owner);
BW.BaseStream.Close();
BW.Close();
}
public void UpdateItem(uint ItemUID, Enums.ItemUpdateType UpdateType, uint Value)
{
BinaryWriter BW = new BinaryWriter(new FileStream(this.DBPath + "/Items/" + ItemUID, FileMode.Open));
byte Position = 0;
switch (UpdateType)
{
case Enums.ItemUpdateType.UID:
case Enums.ItemUpdateType.Owner:
{
BW.BaseStream.Close();
BW.Close();
return;
}
case Enums.ItemUpdateType.ID: Position = 0; break;
case Enums.ItemUpdateType.Durability: Position = 4; break;
case Enums.ItemUpdateType.Position: Position = 6; break;
case Enums.ItemUpdateType.SocketOne: Position = 7; break;
case Enums.ItemUpdateType.SocketTwo: Position = 8; break;
case Enums.ItemUpdateType.Plus: Position = 9; break;
case Enums.ItemUpdateType.Bless: Position = 10; break;
case Enums.ItemUpdateType.Locked: Position = 11; break;
case Enums.ItemUpdateType.Enchant: Position = 12; break;
case Enums.ItemUpdateType.Color: Position = 13; break;
case Enums.ItemUpdateType.ExtraAttribute: Position = 14; break;
default: break;
}
BW.Seek(Position, SeekOrigin.Begin);
BW.Write(Value);
BW.BaseStream.Close();
BW.Close();
}
public void UpdateItem(uint ItemUID, Enums.ItemUpdateType UpdateType, ushort Value)
{
BinaryWriter BW = new BinaryWriter(new FileStream(this.DBPath + "/Items/" + ItemUID, FileMode.Open));
byte Position = 0;
switch (UpdateType)
{
case Enums.ItemUpdateType.UID:
case Enums.ItemUpdateType.Owner:
{
BW.BaseStream.Close();
BW.Close();
return;
}
case Enums.ItemUpdateType.ID: Position = 0; break;
case Enums.ItemUpdateType.Durability: Position = 4; break;
case Enums.ItemUpdateType.Position: Position = 6; break;
case Enums.ItemUpdateType.SocketOne: Position = 7; break;
case Enums.ItemUpdateType.SocketTwo: Position = 8; break;
case Enums.ItemUpdateType.Plus: Position = 9; break;
case Enums.ItemUpdateType.Bless: Position = 10; break;
case Enums.ItemUpdateType.Locked: Position = 11; break;
case Enums.ItemUpdateType.Enchant: Position = 12; break;
case Enums.ItemUpdateType.Color: Position = 13; break;
case Enums.ItemUpdateType.ExtraAttribute: Position = 14; break;
default: break;
}
BW.Seek(Position, SeekOrigin.Begin);
BW.Write(Value);
BW.BaseStream.Close();
BW.Close();
}
public void UpdateItem(uint ItemUID, Enums.ItemUpdateType UpdateType, byte Value)
{
BinaryWriter BW = new BinaryWriter(new FileStream(this.DBPath + "/Items/" + ItemUID, FileMode.Open));
byte Position = 0;
switch (UpdateType)
{
case Enums.ItemUpdateType.UID:
case Enums.ItemUpdateType.Owner:
{
BW.BaseStream.Close();
BW.Close();
return;
}
case Enums.ItemUpdateType.ID: Position = 0; break;
case Enums.ItemUpdateType.Durability: Position = 4; break;
case Enums.ItemUpdateType.Position: Position = 6; break;
case Enums.ItemUpdateType.SocketOne: Position = 7; break;
case Enums.ItemUpdateType.SocketTwo: Position = 8; break;
case Enums.ItemUpdateType.Plus: Position = 9; break;
case Enums.ItemUpdateType.Bless: Position = 10; break;
case Enums.ItemUpdateType.Locked: Position = 11; break;
case Enums.ItemUpdateType.Enchant: Position = 12; break;
case Enums.ItemUpdateType.Color: Position = 13; break;
case Enums.ItemUpdateType.ExtraAttribute: Position = 14; break;
default: break;
}
BW.Seek(Position, SeekOrigin.Begin);
BW.Write(Value);
BW.BaseStream.Close();
BW.Close();
}
public void UpdateItem(uint ItemUID, Enums.ItemUpdateType UpdateType, string Value)
{
BinaryWriter BW = new BinaryWriter(new FileStream(this.DBPath + "/Items/" + ItemUID, FileMode.Open));
BW.Seek(15, SeekOrigin.Begin);
BW.Write((byte)Value.Length);
BW.Write(Value);
BW.BaseStream.Close();
BW.Close();
}
public void RemoveItem(uint ItemUID)
{
File.Delete(this.DBPath + "/Items/" + ItemUID);
}
public IList<string> LoadFriends()
{
IList<string> Friends = new List<string>();
foreach (string FileName in Directory.GetFiles(this.DBPath + "/Friends"))
Friends.Add(FileName);
return Friends;
}
public void AddFriend(string FriendName)
{
File.Create(this.DBPath + "/Friends/" + FriendName);
}
public void RemoveFriend(string FriendName)
{
File.Delete(this.DBPath + "/Friends/" + FriendName);
}
public IList<string> LoadEnemies()
{
IList<string> Enemies = new List<string>();
foreach (string FileName in Directory.GetFiles(this.DBPath + "/Enemies"))
Enemies.Add(FileName);
return Enemies;
}
public void AddEnemy(string EnemyName)
{
File.Create(this.DBPath + "/Enemies/" + EnemyName);
}
public void RemoveEnemy(string EnemyName)
{
File.Delete(this.DBPath + "/Enemies/" + EnemyName);
}
public IDictionary<ushort, byte> LoadSkills()
{
IDictionary<ushort, byte> Skills = new Dictionary<ushort, byte>();
foreach (string FileName in Directory.GetFiles(this.DBPath + "/Skills"))
{
ushort SkillID;
if (ushort.TryParse(FileName, out SkillID))
{
BinaryReader BR = new BinaryReader(new FileStream(this.DBPath + "/Skills/" + FileName, FileMode.Open));
Skills.Add(SkillID, BR.ReadByte());
BR.BaseStream.Close();
BR.Close();
}
}
return Skills;
}
public void AddSkill(ushort SkillID, byte Level)
{
BinaryWriter BW = new BinaryWriter(new FileStream(this.DBPath + "/Skills/" + SkillID, FileMode.Create));
BW.Write(Level);
BW.BaseStream.Close();
BW.Close();
}
public void RemoveSkill(ushort SkillID)
{
File.Delete(this.DBPath + "/Skills/" + SkillID);
}
public IDictionary<ushort, byte> LoadProfs()
{
IDictionary<ushort, byte> Profs = new Dictionary<ushort, byte>();
foreach (string FileName in Directory.GetFiles(this.DBPath + "/Profs"))
{
ushort ProfID;
if (ushort.TryParse(FileName, out ProfID))
{
BinaryReader BR = new BinaryReader(new FileStream(this.DBPath + "/Profs/" + FileName, FileMode.Open));
Profs.Add(ProfID, BR.ReadByte());
BR.BaseStream.Close();
BR.Close();
}
}
return Profs;
}
public void AddProf(ushort ProfID, byte Level)
{
BinaryWriter BW = new BinaryWriter(new FileStream(this.DBPath + "/Profs/" + ProfID, FileMode.Create));
BW.Write(Level);
BW.BaseStream.Close();
BW.Close();
}
public void RemoveProf(ushort ProfID)
{
File.Delete(this.DBPath + "/Profs/" + ProfID);
}
}
}






