public Quest(uint questid, ulong guid) { this.QuestId = questid; this.PlayerGuid = guid; Status = QuestStatuses.QUEST_STATUS_INCOMPLETE; }
public Quest(uint questid) { this.QuestId = questid; Status = QuestStatuses.QUEST_STATUS_INCOMPLETE; }
public static uint GetDialogStatus(this Player p, WorldObject obj, uint defStatus) { QuestStatuses status = QuestStatuses.QUEST_STATUS_NONE; HashSet <QuestTemplate> rbounds = new HashSet <QuestTemplate>(); HashSet <QuestTemplate> ibounds = new HashSet <QuestTemplate>(); if (obj.IsTypeOf(ObjectTypes.TYPE_UNIT) && !obj.IsTypeOf(ObjectTypes.TYPE_PLAYER)) { uint entry = ((Creature)obj).Entry; rbounds = new HashSet <QuestTemplate>(Database.CreatureQuests.TryGet(entry).Select(x => Database.QuestTemplates.TryGet(x.QuestEntry))); ibounds = new HashSet <QuestTemplate>(Database.CreatureInvolvedQuests.TryGet(entry).Select(x => Database.QuestTemplates.TryGet(x.QuestEntry))); if (((Creature)obj).IsEnemyTo(p)) { return((uint)QuestGiverStatuses.QUEST_GIVER_NONE); } } else if (obj.IsTypeOf(ObjectTypes.TYPE_GAMEOBJECT)) { rbounds = new HashSet <QuestTemplate>(); //TODO gameobject quests } else { return((uint)QuestGiverStatuses.QUEST_GIVER_NONE); } //Quest Finish foreach (QuestTemplate qt in ibounds) { QuestGiverStatuses dialogStatusNew = QuestGiverStatuses.QUEST_GIVER_NONE; status = p.GetQuestStatus(qt.QuestId); Quest quest = null; if (p.Quests.ContainsKey(qt.QuestId)) { quest = p.Quests[qt.QuestId]; } if ((status == QuestStatuses.QUEST_STATUS_COMPLETE && quest?.Rewarded != true) || qt.IsAutoComplete) { return((uint)QuestGiverStatuses.QUEST_GIVER_REWARD); //Turn in is priority } else if (status == QuestStatuses.QUEST_STATUS_INCOMPLETE) { dialogStatusNew = QuestGiverStatuses.QUEST_GIVER_NONE; } if ((uint)dialogStatusNew > defStatus) { defStatus = (uint)dialogStatusNew; } } //Quest start foreach (QuestTemplate qt in rbounds) { if (qt == null) { continue; } QuestGiverStatuses dialogStatusNew = QuestGiverStatuses.QUEST_GIVER_NONE; status = p.GetQuestStatus(qt.QuestId); if (status == QuestStatuses.QUEST_STATUS_NONE) //QUEST_STATUS_NONE aka New Quest { if (!p.CheckQuestRequirements(qt, false) || !p.CheckQuestLevel(qt, false)) { continue; } if (qt.IsAutoComplete) { dialogStatusNew = QuestGiverStatuses.QUEST_GIVER_REWARD; //Autocomplete just show icon } else if (p.Level < qt.MinLevel && p.Level >= qt.MinLevel - 4) { dialogStatusNew = QuestGiverStatuses.QUEST_GIVER_FUTURE; //Player is in level range of accepting soon (silver icon) } else if (p.Level >= qt.MinLevel && p.Level < qt.QuestLevel + 7) { dialogStatusNew = QuestGiverStatuses.QUEST_GIVER_QUEST; //Player in level range (yellow icon) } else if (p.Level > qt.QuestLevel + 7) { dialogStatusNew = QuestGiverStatuses.QUEST_GIVER_TRIVIAL; //Trivial for player (grey icon hovered) } } if ((uint)dialogStatusNew > defStatus) { defStatus = (uint)dialogStatusNew; } } return(defStatus); }
public static void SendQuestGiverRequestItems(this Player p, QuestTemplate quest, QuestStatuses status, ulong guid, bool CloseOnCancel) { bool completeable = p.CanCompleteQuest(quest.QuestId); if (!quest.IsAutoComplete && status != QuestStatuses.QUEST_STATUS_COMPLETE) //Check if it is complete { completeable = false; } if (p.Quests.ContainsKey(quest.QuestId)) { if (p.Quests[quest.QuestId]?.Rewarded == true) { completeable = false; } } PacketWriter packet = new PacketWriter(Opcodes.SMSG_QUESTGIVER_REQUEST_ITEMS); packet.WriteUInt64(guid); packet.WriteUInt32(quest.QuestId); packet.WriteString(quest.Title); packet.WriteString(quest.RequestItemsText); packet.WriteUInt32(0); packet.WriteUInt32(0); packet.WriteUInt32(CloseOnCancel ? (uint)1 : 0); packet.WriteUInt32(quest.RewOrReqMoney < 0 ? (uint)-quest.RewOrReqMoney : 0); packet.WriteUInt32((uint)quest.GetReqItemCount); for (int i = 0; i < 4; i++) { packet.WriteUInt32(quest.ReqItemId[i]); packet.WriteUInt32(quest.ReqItemCount[i]); packet.WriteUInt32(Database.ItemTemplates.TryGet(quest.ReqItemId[i])?.DisplayID ?? 0); } packet.WriteUInt32(2); packet.WriteUInt32(completeable ? (uint)3 : 0); packet.WriteUInt32(4); packet.WriteUInt32(8); packet.WriteUInt32(0x10); p.Client.Send(packet); }
public static void SendPreparedQuest(this Player p, WorldObject obj) { QuestStatuses status = QuestStatuses.QUEST_STATUS_NONE; QuestMenu menu = new QuestMenu(); HashSet <QuestTemplate> rbounds = new HashSet <QuestTemplate>(); HashSet <QuestTemplate> ibounds = new HashSet <QuestTemplate>(); if (obj.IsTypeOf(ObjectTypes.TYPE_UNIT) && !obj.IsTypeOf(ObjectTypes.TYPE_PLAYER)) { uint entry = ((Creature)obj).Entry; rbounds = new HashSet <QuestTemplate>(Database.CreatureQuests.TryGet(entry).Select(x => Database.QuestTemplates.TryGet(x.QuestEntry))); ibounds = new HashSet <QuestTemplate>(Database.CreatureInvolvedQuests.TryGet(entry).Select(x => Database.QuestTemplates.TryGet(x.QuestEntry))); } else if (obj.IsTypeOf(ObjectTypes.TYPE_GAMEOBJECT)) { rbounds = new HashSet <QuestTemplate>(); //TODO gameobject quests } //Finish quest foreach (QuestTemplate qt in ibounds) { if (qt == null) { continue; } Quest quest = null; if (p.Quests.ContainsKey(qt.QuestId)) { quest = p.Quests[qt.QuestId]; } status = p.GetQuestStatus(qt.QuestId); if (status == QuestStatuses.QUEST_STATUS_COMPLETE && quest?.Rewarded == false) { menu.AddItem(qt, QuestStatuses.QUEST_STATUS_COMPLETE); } else if (status == QuestStatuses.QUEST_STATUS_INCOMPLETE) //Incomplete { menu.AddItem(qt, QuestStatuses.QUEST_STATUS_INCOMPLETE); } else if (status == QuestStatuses.QUEST_STATUS_AVAILABLE) { menu.AddItem(qt, QuestStatuses.QUEST_STATUS_AVAILABLE); } } //Check all object's quests foreach (QuestTemplate qt in rbounds) { if (qt == null) { continue; } if (p.GetQuestStatus(qt.QuestId) == QuestStatuses.QUEST_STATUS_NONE) //QUEST_STATUS_NONE aka New Quest { if (!p.CheckQuestRequirements(qt, false) || !p.CheckQuestLevel(qt, false)) { continue; } if (qt.IsAutoComplete) { menu.AddItem(qt, QuestStatuses.QUEST_STATUS_COMPLETE); //Autocomplete just show icon } else { menu.AddItem(qt, QuestStatuses.QUEST_STATUS_AVAILABLE); } } } if (menu.Count == 1) { var quest = menu.MenuItems.First(); if (quest.Value == QuestStatuses.QUEST_STATUS_COMPLETE) { if (quest.Key.GetRewItemCount > 0) { p.SendQuestGiverRequestItems(quest.Key, quest.Value, obj.Guid, true); //Send complete } else { p.SendQuestGiverOfferReward(quest.Key, obj.Guid, true); //Send complete } } else if (quest.Value == QuestStatuses.QUEST_STATUS_INCOMPLETE) { p.SendQuestGiverRequestItems(quest.Key, quest.Value, obj.Guid, true); } else { p.SendQuestGiverQuestDetails(quest.Key, obj.Guid, true); //Send details } } else { //Todo gossip text & emotes p.SendQuestGiverQuestList("Greetings $N", obj.Guid, menu.MenuItems); } p.UpdateSurroundingQuestStatus(); }
public void AddItem(QuestTemplate quest, QuestStatuses status) { this.MenuItems.Add(quest, status); }