Esempio n. 1
0
        public void DeclineQuest(UInt16 QuestID)
        {
            Character_quest_inprogress Quest = GetQuestInProgress(QuestID);

            CharMgr.Database.DeleteObject(Quest);

            SendQuestState(Quest.Quest, QuestCompletion.QUESTCOMPLETION_ABANDONED);
        }
Esempio n. 2
0
        public bool AcceptQuest(Quest Quest)
        {
            if (Quest == null)
            {
                return(false);
            }

            if (!CanStartQuest(Quest))
            {
                return(false);
            }

            Character_quest CQuest = new Character_quest();

            CQuest.QuestID     = Quest.Entry;
            CQuest.Done        = false;
            CQuest.CharacterID = GetPlayer().CharacterId;
            CQuest.Quest       = Quest;

            // F_QUEST_LIST Quests not done
            Character_quest_inprogress IQuest = new Character_quest_inprogress();

            IQuest.QuestID     = Quest.Entry;
            IQuest.CharacterID = GetPlayer().CharacterId;
            IQuest.Quest       = Quest;

            foreach (Quest_Objectives QObj in Quest.Objectives)
            {
                Character_Objectives CObj = new Character_Objectives();
                CObj.Count       = 0;
                CObj.Objective   = QObj;
                CObj.ObjectiveID = QObj.Guid;
                CQuest._Objectives.Add(CObj);

                // F_QUEST_LIST Quests not done.
                Character_InProgressObjectives IObj = new Character_InProgressObjectives();
                IObj.Count       = 0;
                IObj.Objective   = QObj;
                IObj.ObjectiveID = QObj.Guid;
                IQuest._InProgressObjectives.Add(IObj);
            }

            _Quests.Add(Quest.Entry, CQuest);
            CharMgr.Database.AddObject(CQuest);

            // Add Quests into character_quest_inprogress Table.
            _InProgressQuests.Add(Quest.Entry, IQuest);
            CharMgr.Database.AddObject(IQuest);

            SendQuestState(Quest, QuestCompletion.QUESTCOMPLETION_OFFER);
            return(true);
        }
Esempio n. 3
0
        public bool DoneQuest(UInt16 QuestID)
        {
            Character_quest            Quest  = GetQuest(QuestID);
            Character_quest_inprogress IQuest = GetQuestInProgress(QuestID);

            if (Quest == null || !Quest.IsDone())
            {
                return(false);
            }

            Player Plr = GetPlayer();

            Dictionary <Item_Info, uint> Choices = GenerateRewards(Quest.Quest, Plr);

            UInt16 FreeSlots = Plr.ItmInterface.GetTotalFreeInventorySlot();

            if (FreeSlots < Quest.SelectedRewards.Count)
            {
                Plr.SendLocalizeString("", Localized_text.TEXT_OVERAGE_CANT_SALVAGE);
                return(false);
            }

            byte num = 0;

            foreach (KeyValuePair <Item_Info, uint> Kp in Choices)
            {
                if (Quest.SelectedRewards.Contains(num))
                {
                    Plr.ItmInterface.CreateItem(Kp.Key, (ushort)Kp.Value);
                }
                ++num;
            }

            Plr.AddXp(Quest.Quest.Xp);
            Plr.AddMoney(Quest.Quest.Gold);

            Quest.Done  = true;
            Quest.Dirty = true;
            Quest.SelectedRewards.Clear();

            SendQuestState(Quest.Quest, QuestCompletion.QUESTCOMPLETION_DONE);

            CharMgr.Database.SaveObject(Quest);

            // When you done the quest, delete the entry, to not display in the list (F_QUEST_LIST)
            CharMgr.Database.DeleteObject(IQuest);

            return(true);
        }
Esempio n. 4
0
        public void SendQuest(Character_quest_inprogress CQuest)
        {
            if (CQuest == null)
            {
                Log.Error("QuestsInterface", "SendQuest CQuest == null");
                return;
            }

            PacketOut Packet = new PacketOut((byte)Opcodes.F_QUEST_INFO);

            Packet.WriteUInt16(CQuest.QuestID);
            Packet.WriteByte(0);
            BuildQuestHeader(Packet, CQuest.Quest, true);

            Dictionary <Item_Info, uint> Rewards = GenerateRewards(CQuest.Quest, GetPlayer());

            Packet.WriteByte(CQuest.Quest.ChoiceCount);
            Packet.WriteByte(0);
            Packet.WriteByte((byte)Rewards.Count);

            foreach (KeyValuePair <Item_Info, uint> Kp in Rewards)
            {
                Item.BuildItem(ref Packet, null, Kp.Key, 0, (ushort)Kp.Value);
            }

            Packet.WriteByte(0);

            BuildObjectives(Packet, CQuest._InProgressObjectives);

            Packet.WriteByte(1);

            Packet.WritePascalString(CQuest.Quest.Name);
            Packet.WritePascalString("Return to your giver");

            Packet.WriteUInt16(0x006A);
            Packet.WriteUInt16(0x046D);
            Packet.WriteUInt16(0x4D9E);
            Packet.WriteUInt16(0xCB65);

            Packet.Fill(0, 18);

            GetPlayer().SendPacket(Packet);
        }
Esempio n. 5
0
        public void SendQuest(ushort QuestID)
        {
            Character_quest_inprogress CQuest = GetQuestInProgress(QuestID);

            SendQuest(CQuest);
        }