/// <summary>
        /// Quest Complete
        /// </summary>
        /// <remarks>
        /// Completes the current QuestBase. This should invoke our lua file, just as origional
        /// kRO2 does. This information is distracted from a leaked QuestBase file posted on some
        /// forum a while ago.
        /// </remarks>
        /// <param name="cpkt"></param>
        private void CM_QUESTCOMPLETE(CMSG_QUESTCOMPLETE cpkt)
        {
            QuestBase myQuestBase = this.character.QuestObjectives[cpkt.QuestID];
            if (myQuestBase != null)
            {
                SMSG_QUESTREMOVE spkt = new SMSG_QUESTREMOVE();
                spkt.QuestID = cpkt.QuestID;
                spkt.SessionId = this.character.id;
                this.character.Tag = spkt;

                if (myQuestBase.OnFinish(this.character.id) > -1)
                {
                    //Removes the quest
                    this.character.QuestObjectives[cpkt.QuestID] = null;

                    //Invalidates all stepinfo
                    QuestBase.InvalidateQuest(myQuestBase, this.character);

                    //Logs into the quest history
                    Singleton.Database.QuestComplete(this.character.ModelId, cpkt.QuestID);

                    //Refresh personal reqeusts table
                    CommonFunctions.RefreshPersonalRequests(this.character);

                    //Refresh all our npc icons
                    CommonFunctions.UpdateNpcIcons(this.character);

                    if (this.character.Tag is SMSG_QUESTREMOVE)
                    {
                        this.character.Tag = null;
                        this.Send((byte[])spkt);
                    }
                }
            }
        }