public LoadCharacter ( Account acc, int charId ) : Char | ||
acc | Account | |
charId | int | |
Результат | Char |
public Char LoadCharacter(Account acc, int charId)
{
MySqlCommand cmd = CreateQuery();
cmd.CommandText = "SELECT * FROM characters WHERE accId=@accId AND charId=@charId;";
cmd.Parameters.AddWithValue("@accId", acc.AccountId);
cmd.Parameters.AddWithValue("@charId", charId);
Char ret;
using (MySqlDataReader rdr = cmd.ExecuteReader())
{
if (!rdr.HasRows) return null;
rdr.Read();
int[] stats = Utils.FromCommaSepString32(rdr.GetString("stats"));
ret = new Char
{
ObjectType = (short)rdr.GetInt32("charType"),
CharacterId = rdr.GetInt32("charId"),
Level = rdr.GetInt32("level"),
Exp = rdr.GetInt32("exp"),
CurrentFame = rdr.GetInt32("fame"),
_Equipment = rdr.GetString("items"),
Backpack = 1,
MaxHitPoints = stats[0],
HitPoints = rdr.GetInt32("hp"),
MaxMagicPoints = stats[1],
MagicPoints = rdr.GetInt32("mp"),
Attack = stats[2],
Defense = stats[3],
Speed = stats[4],
HpRegen = stats[5],
MpRegen = stats[6],
Dexterity = stats[7],
Tex1 = rdr.GetInt32("tex1"),
Tex2 = rdr.GetInt32("tex2"),
Dead = rdr.GetBoolean("dead"),
Pet = rdr.GetInt32("pet"),
PCStats = rdr.GetString("fameStats"),
FameStats = new FameStats()
};
if (!string.IsNullOrEmpty(ret.PCStats) && ret.PCStats != "FameStats")
try
{
ret.FameStats.Read(
ZlibStream.UncompressBuffer(
Convert.FromBase64String(ret.PCStats.Replace('-', '+').Replace('_', '/'))));
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
ret.Backpacks = GetBackpacks(ret, acc);
ret._Equipment += ", " + Utils.GetCommaSepString(ret.Backpacks[1]);
return ret;
}
protected override void HandleRequest() { using (Database db = new Database()) { Account acc = db.GetAccount(Query["accountId"], Program.GameData); Char chr = db.LoadCharacter(acc, int.Parse(Query["charId"])); MySqlCommand cmd = db.CreateQuery(); cmd.CommandText = @"SELECT time, killer, firstBorn FROM death WHERE accId=@accId AND chrId=@charId;"; cmd.Parameters.AddWithValue("@accId", Query["accountId"]); cmd.Parameters.AddWithValue("@charId", Query["charId"]); int time; string killer; bool firstBorn; using (MySqlDataReader rdr = cmd.ExecuteReader()) { rdr.Read(); time = Database.DateTimeToUnixTimestamp(rdr.GetDateTime("time")); killer = rdr.GetString("killer"); firstBorn = rdr.GetBoolean("firstBorn"); } using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream)) wtr.Write(chr.FameStats.Serialize(Program.GameData, acc, chr, time, killer, firstBorn)); } }