public void SendCompleted()
        {
            var completedQuests = CompletedQuests.Values.ToArray();

            if (completedQuests.Length <= 200)
            {
                Owner.SendPacket(new SCCompletedQuestsPacket(completedQuests));
                return;
            }

            for (var i = 0; i < completedQuests.Length; i += 20)
            {
                var size   = completedQuests.Length - i >= 200 ? 200 : completedQuests.Length - i;
                var result = new CompletedQuest[size];
                Array.Copy(completedQuests, i, result, 0, size);
                Owner.SendPacket(new SCCompletedQuestsPacket(result));
            }
        }
        public override void Read(PacketStream stream)
        {
            var id = stream.ReadUInt32();

            _log.Debug("SaveTutorial, Id: {0}", id);

            var completeId = (ushort)(id / 64);
            var quest      = Connection.ActiveChar.Quests.GetCompletedQuest(completeId);

            if (quest == null)
            {
                quest = new CompletedQuest(completeId);
                Connection.ActiveChar.Quests.AddCompletedQuest(quest);
            }

            quest.Body.Set((int)id - completeId * 64, true);
            var body = new byte[8];

            quest.Body.CopyTo(body, 0);
            Connection.SendPacket(new SCTutorialSavedPacket(id, body));
        }
        public void Load(MySqlConnection connection)
        {
            using (var command = connection.CreateCommand())
            {
                command.CommandText = "SELECT * FROM completed_quests WHERE `owner` = @owner";
                command.Parameters.AddWithValue("@owner", Owner.Id);
                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var quest = new CompletedQuest();
                        quest.Id   = reader.GetUInt16("id");
                        quest.Body = new BitArray((byte[])reader.GetValue("data"));
                        CompletedQuests.Add(quest.Id, quest);
                    }
                }
            }

            using (var command = connection.CreateCommand())
            {
                command.CommandText = "SELECT * FROM quests WHERE `owner` = @owner";
                command.Parameters.AddWithValue("@owner", Owner.Id);
                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var quest = new Quest();
                        quest.Id         = reader.GetUInt32("id");
                        quest.TemplateId = reader.GetUInt32("template_id");
                        quest.Status     = (QuestStatus)reader.GetByte("status");
                        quest.ReadData((byte[])reader.GetValue("data"));
                        quest.Owner    = Owner;
                        quest.Template = QuestManager.Instance.GetTemplate(quest.TemplateId);
                        quest.RecalcObjectives(false);
                        Quests.Add(quest.TemplateId, quest);
                    }
                }
            }
        }
 public void AddCompletedQuest(CompletedQuest quest)
 {
     CompletedQuests.Add(quest.Id, quest);
 }