public byte[] Write() { Tuple<byte, int>[] dat = new[] { new Tuple<byte, int>(0, Shots), new Tuple<byte, int>(1, ShotsThatDamage), new Tuple<byte, int>(2, SpecialAbilityUses), new Tuple<byte, int>(3, TilesUncovered), new Tuple<byte, int>(4, Teleports), new Tuple<byte, int>(5, PotionsDrunk), new Tuple<byte, int>(6, MonsterKills), new Tuple<byte, int>(7, MonsterAssists), new Tuple<byte, int>(8, GodKills), new Tuple<byte, int>(9, GodAssists), new Tuple<byte, int>(10, CubeKills), new Tuple<byte, int>(11, OryxKills), new Tuple<byte, int>(12, QuestsCompleted), new Tuple<byte, int>(13, PirateCavesCompleted), new Tuple<byte, int>(14, UndeadLairsCompleted), new Tuple<byte, int>(15, AbyssOfDemonsCompleted), new Tuple<byte, int>(16, SnakePitsCompleted), new Tuple<byte, int>(17, SpiderDensCompleted), new Tuple<byte, int>(18, SpriteWorldsCompleted), new Tuple<byte, int>(19, LevelUpAssists), new Tuple<byte, int>(20, MinutesActive), new Tuple<byte, int>(21, TombsCompleted), new Tuple<byte, int>(22, TrenchesCompleted), new Tuple<byte, int>(23, JunglesCompleted), new Tuple<byte, int>(24, ManorsCompleted) }; MemoryStream ret = new MemoryStream(); using (NWriter wtr = new NWriter(ret)) { foreach (Tuple<byte, int> i in dat) { wtr.Write(i.Item1); wtr.Write(i.Item2); } } return ret.ToArray(); }
public bool SaveChars(string oldAccId, Chars oldChars, Chars chrs, XmlData data) { try { chrs.Account.AccountId = oldAccId; var cmd = CreateQuery(); cmd.CommandText = "UPDATE accounts SET prodAcc=1, name=@name, namechosen=@nameChoosen, vaultCount=@vaults, maxCharSlot=@maxChars, ownedSkins=@skins, gifts=@gifts, line1=@empty, line2=@empty, line3=@empty WHERE id=@oldAccId;"; cmd.Parameters.AddWithValue("@name", chrs.Account.Name); cmd.Parameters.AddWithValue("@nameChoosen", chrs.Account.NameChosen ? 1 : 0); cmd.Parameters.AddWithValue("@vaults", chrs.Account.Vault.Chests.Count); cmd.Parameters.AddWithValue("@maxChars", chrs.MaxNumChars); cmd.Parameters.AddWithValue("@oldAccId", oldAccId); cmd.Parameters.AddWithValue("@gifts", chrs.Account._Gifts); cmd.Parameters.AddWithValue("@skins", chrs.OwnedSkins); cmd.Parameters.AddWithValue("@empty", string.Empty); cmd.ExecuteNonQuery(); cmd = CreateQuery(); cmd.CommandText = "DELETE FROM characters WHERE accId=@accId;"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.ExecuteNonQuery(); cmd = CreateQuery(); cmd.CommandText = "DELETE FROM vaults WHERE accId=@accId;"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.ExecuteNonQuery(); cmd = CreateQuery(); cmd.CommandText = "DELETE FROM classstats WHERE accId=@accId"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.ExecuteNonQuery(); cmd = CreateQuery(); cmd.CommandText = "DELETE FROM arenalb WHERE accId=@accId"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.ExecuteNonQuery(); cmd = CreateQuery(); cmd.CommandText = "DELETE FROM backpacks WHERE accId=@accId"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.ExecuteNonQuery(); cmd = CreateQuery(); cmd.CommandText = "DELETE FROM pets WHERE accId=@accId;"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.ExecuteNonQuery(); cmd = CreateQuery(); cmd.CommandText = "DELETE FROM stats WHERE accId=@accId"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.ExecuteNonQuery(); cmd = CreateQuery(); cmd.CommandText = "DELETE FROM realmeye WHERE accId=@accId"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.ExecuteNonQuery(); foreach (var stat in chrs.Account.Stats.ClassStates) { cmd = CreateQuery(); cmd.CommandText = @"INSERT INTO classstats(accId, objType, bestLv, bestFame) VALUES(@accId, @objType, @bestLv, @bestFame) ON DUPLICATE KEY UPDATE bestLv = GREATEST(bestLv, @bestLv), bestFame = GREATEST(bestFame, @bestFame);"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.Parameters.AddWithValue("@objType", Utils.FromString(stat.ObjectType.ToString())); cmd.Parameters.AddWithValue("@bestLv", stat.BestLevel); cmd.Parameters.AddWithValue("@bestFame", stat.BestFame); cmd.ExecuteNonQuery(); } cmd = CreateQuery(); cmd.CommandText = "INSERT INTO stats (accId, fame, totalFame, credits, totalCredits, fortuneTokens, totalFortuneTokens) VALUES(@accId, @fame, @fame, @gold, @gold, @tokens, @tokens)"; cmd.Parameters.AddWithValue("@accId", oldAccId); cmd.Parameters.AddWithValue("@fame", chrs.Account.Stats.Fame); cmd.Parameters.AddWithValue("@totalFame", chrs.Account.Stats.TotalFame); cmd.Parameters.AddWithValue("@gold", chrs.Account.Credits); cmd.Parameters.AddWithValue("@tokens", chrs.Account.FortuneTokens); cmd.ExecuteNonQuery(); foreach (var @char in chrs.Characters) { var chr = CreateCharacter(data, (ushort)@char.ObjectType, @char.CharacterId); int[] stats = new[] { @char.MaxHitPoints, @char.MaxMagicPoints, @char.Attack, @char.Defense, @char.Speed, @char.Dexterity, @char.HpRegen, @char.MpRegen }; cmd = CreateQuery(); cmd.CommandText = "INSERT INTO characters (accId, charId, charType, level, exp, fame, items, hp, mp, stats, dead, pet, fameStats, skin, createTime, lastSeen, lastLocation) VALUES (@accId, @charId, @charType, 1, 0, 0, @items, 100, 100, @stats, FALSE, -1, @fameStats, @skin, @time, @time, @location);"; cmd.Parameters.AddWithValue("@accId", chrs.Account.AccountId); cmd.Parameters.AddWithValue("@charId", @char.CharacterId); cmd.Parameters.AddWithValue("@charType", @char.ObjectType); cmd.Parameters.AddWithValue("@items", Utils.GetCommaSepString(@char.EquipSlots())); cmd.Parameters.AddWithValue("@stats", Utils.GetCommaSepString(stats)); cmd.Parameters.AddWithValue("@fameStats", @char.PCStats); cmd.Parameters.AddWithValue("@skin", @char.Skin); cmd.Parameters.AddWithValue("@time", DateTime.UtcNow.ToString("yyyy-MM-dd:HH-mm-ss")); cmd.Parameters.AddWithValue("@location", "Transfer Centre"); cmd.ExecuteNonQuery(); if (@char.Pet != null) CreatePet(chrs.Account, @char.Pet); @char.FameStats = new FameStats(); @char.FameStats.Read( Convert.FromBase64String(@char.PCStats.Replace('-', '+').Replace('_', '/'))); if (@char.Equipment.Length > 12) { try { @char.Backpack = new int[8]; Array.Copy(@char.Equipment, 12, @char.Backpack, 0, 8); var eq = @char.Equipment; Array.Resize(ref eq, 12); @char.Equipment = eq; @char.HasBackpack = 1; } catch (Exception e) { Console.WriteLine(e); } } chr = @char; SaveCharacter(chrs.Account, chr, GameData); } foreach (var chest in chrs.Account.Vault.Chests) { chest.ChestId = CreateChest(chrs.Account).ChestId; if (chest.Items.Length < 8) { var inv = chest.Items; Array.Resize(ref inv, 8); for (int i = 0; i < inv.Length; i++) if (inv[i] == 0) inv[i] = -1; chest.Items = inv; } SaveChest(chrs.Account.AccountId, chest); } } catch (Exception ex) { Console.WriteLine(ex); return false; } return true; }