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;
        }