public static void CheckQuestCreatureKill(this Player p, ulong guid) { foreach (Quest quest in p.Quests.Values) { QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId); Creature creature = Database.Creatures.TryGet(guid); if (template == null || creature == null || quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE) { continue; } for (int i = 0; i < 4; i++) { if (template.ReqCreatureOrGOId[i] <= 0 || template.ReqSpell[i] != 0) { continue; } uint reqkill = (uint)template.ReqCreatureOrGOId[i]; if (reqkill == creature.Entry) { uint curcount = quest.ReqCreatureGo.ContainsKey(reqkill) ? quest.ReqCreatureGo[reqkill] : 0; uint reqcount = template.ReqCreatureOrGOCount[i]; if (curcount < reqcount) { p.Quests[quest.QuestId].AddCreatureGO(creature.Entry, 1); //Quest update PacketWriter response = new PacketWriter(Opcodes.SMSG_QUESTUPDATE_ADD_KILL); response.WriteUInt32(quest.QuestId); response.WriteUInt32(creature.Entry); response.WriteUInt32(curcount + 1); response.WriteUInt32(reqcount); response.WriteUInt64(guid); p.Client.Send(response); } if (p.CanCompleteQuest(quest.QuestId)) { p.Quests[quest.QuestId].Status = QuestStatuses.QUEST_STATUS_COMPLETE; p.UpdateSurroundingQuestStatus(); } } } } }
public static void CheckQuestItemAdded(this Player p, uint entry, uint count) { foreach (Quest quest in p.Quests.Values) { QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId); if (template == null || quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE) { continue; } for (int i = 0; i < 4; i++) { if (template.ReqItemId[i] == 0) { continue; } uint reqitem = template.ReqItemId[i]; if (reqitem == entry) { uint curcount = (uint)(quest.ReqItems.ContainsKey(reqitem) ? quest.ReqItems[reqitem] : 0); uint reqcount = template.ReqItemCount[i]; if (curcount < reqcount) { p.Quests[quest.QuestId].AddItem(entry, count); //Quest update PacketWriter response = new PacketWriter(Opcodes.SMSG_QUESTUPDATE_ADD_ITEM); response.WriteUInt32(entry); response.WriteUInt32(count); p.Client.Send(response); } if (p.CanCompleteQuest(quest.QuestId)) { p.Quests[quest.QuestId].Status = QuestStatuses.QUEST_STATUS_COMPLETE; p.UpdateSurroundingQuestStatus(); } } } } }
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 override void Process(CmdTrigger <RealmServerCmdArgs> trigger) { var target = trigger.Args.Target; if (!(target is Character)) { trigger.Reply("Invalid target: {0} - Character-target required.", target); } else { var chr = (Character)target; var id = trigger.Text.NextUInt(0); QuestTemplate templ = null; if (id > 0) { templ = QuestMgr.GetTemplate(id); } if (templ == null) { trigger.Reply("Invalid QuestId: {0}", id); } else { if (!chr.QuestLog.RemoveFinishedQuest(id)) { // if its not already been finished, maybe it's still in progress? chr.QuestLog.Cancel(id); } var quest = chr.QuestLog.AddQuest(templ); if (quest == null) { trigger.Reply("Could not add Quest: " + templ); } else { trigger.Reply("Quest added: " + templ); } } } }
public bool CheckQuestConstraints(Character looter) { if (!this.HasQuestRequirements) { return(true); } if (looter == null || this.QuestHolderInfo != null && this.QuestHolderInfo.QuestStarts.Any <QuestTemplate>( (Func <QuestTemplate, bool>)(quest => looter.QuestLog.HasActiveQuest(quest))) || this.CollectQuests == null) { return(false); } for (int index1 = 0; index1 < this.CollectQuests.Length; ++index1) { QuestTemplate collectQuest = this.CollectQuests[index1]; if (collectQuest != null && looter.QuestLog.HasActiveQuest(collectQuest.Id)) { for (int index2 = 0; index2 < collectQuest.CollectableItems.Length; ++index2) { if (collectQuest.CollectableItems[index2].ItemId == this.ItemId && collectQuest.CollectableItems[index2].Amount > looter.QuestLog.GetActiveQuest(collectQuest.Id).CollectedItems[index2]) { return(true); } } for (int index2 = 0; index2 < collectQuest.CollectableSourceItems.Length; ++index2) { if (collectQuest.CollectableSourceItems[index2].ItemId == this.ItemId && collectQuest.CollectableSourceItems[index2].Amount > looter.QuestLog .GetActiveQuest(collectQuest.Id).CollectedSourceItems[index2]) { return(true); } } } } return(false); }
public static void HandleQuestgiverCompleteQuest(ref PacketReader packet, ref WorldManager manager) { ulong guid = packet.ReadUInt64(); uint questid = packet.ReadUInt32(); if (Database.QuestTemplates.ContainsKey(questid)) { QuestTemplate quest = Database.QuestTemplates.TryGet(questid); if (manager.Character.Quests.ContainsKey(questid)) { Quest pQuest = manager.Character.Quests[questid]; manager.Character.SendQuestGiverRequestItems(quest, pQuest.Status, guid, false); } else { manager.Character.SendQuestGiverQuestDetails(quest, guid, true); } } }
/// <summary> /// Sends the quest giver quest complete. /// </summary> /// <param name="qt">The quest id.</param> /// <param name="chr">The client.</param> public static void SendComplete(QuestTemplate qt, Character chr) { using (var pckt = new RealmPacketOut(RealmServerOpCode.SMSG_QUESTGIVER_QUEST_COMPLETE)) { pckt.Write(qt.Id); if (chr.Level >= RealmServerConfiguration.MaxCharacterLevel) { pckt.Write(0u); pckt.Write(qt.MoneyAtMaxLevel); } else { pckt.Write(qt.CalcRewardXp(chr)); pckt.Write(qt.RewMoney); } pckt.Write(qt.CalcRewardHonor(chr)); pckt.Write(qt.RewardTalents); pckt.Write(0); // since 3.3: Arena reward chr.Client.Send(pckt); /*if (chr.Level >= LevelMgr.MaxCharacterLevel) * { * pckt.Write(qt.MoneyAtMaxLevel); * } * else * { * pckt.Write(qt.RewMoney); * } * pckt.Write((uint)0); // unknown value * * pckt.Write(qt.RewardItems.Length); * * foreach (var reward in qt.RewardItems) * { * pckt.Write(reward.ItemId); * pckt.Write(reward.Amount); * }*/ } }
public static void CheckQuestItemRemove(this Player p, uint entry, uint count) { foreach (Quest quest in p.Quests.Values) { QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId); if (template == null || quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE) { continue; } for (int i = 0; i < 4; i++) { if (template.ReqItemId[i] == 0) { continue; } uint reqitem = template.ReqItemId[i]; if (reqitem == entry) { uint curcount = (uint)(quest.ReqItems.ContainsKey(reqitem) ? quest.ReqItems[reqitem] : 0); uint reqcount = template.ReqItemCount[i]; if (curcount < reqcount) { if (p.Quests[quest.QuestId].ReqItems.ContainsKey(entry)) { p.Quests[quest.QuestId].ReqItems[entry] -= (count > curcount ? 0 : count); } if (p.Quests[quest.QuestId].Status == QuestStatuses.QUEST_STATUS_COMPLETE) { p.Quests[quest.QuestId].Status = QuestStatuses.QUEST_STATUS_INCOMPLETE; } } return; } } } }
public static bool CheckIsRequiredQuestItem(this Player p, uint entry) { foreach (Quest quest in p.Quests.Values) { QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId); if (template == null || quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE) { continue; } for (int i = 0; i < 4; i++) { if (template.ReqItemId[i] == entry) { return(true); } } } return(false); }
/// <summary>Sends the quest giver quest complete.</summary> /// <param name="qt">The quest id.</param> /// <param name="chr">The client.</param> public static void SendComplete(QuestTemplate qt, Character chr) { using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUESTGIVER_QUEST_COMPLETE)) { packet.Write(qt.Id); if (chr.Level >= RealmServerConfiguration.MaxCharacterLevel) { packet.Write(0U); packet.Write(qt.MoneyAtMaxLevel); } else { packet.Write(qt.CalcRewardXp(chr)); packet.Write(qt.RewMoney); } packet.Write(qt.CalcRewardHonor(chr)); packet.Write(qt.RewardTalents); packet.Write(0); chr.Client.Send(packet, false); } }
public static void BuildQuestUpdate(this Player p, ref UpdateClass uc) { int i = 0; foreach (Quest quest in p.Quests.Values) { if (quest.Status == QuestStatuses.QUEST_STATUS_COMPLETE && quest.Rewarded) { continue; } QuestTemplate template = Database.QuestTemplates.TryGet(quest.QuestId); uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, quest.QuestId, i * 6); uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, 0, (i * 6) + 1); uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, 0, (i * 6) + 2); uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, quest.GetProgress(), (i * 6) + 3); uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, 0, (i * 6) + 4); //m_questFailureTime uc.UpdateValue <uint>(PlayerFields.PLAYER_QUEST_LOG_1_1, 0, (i * 6) + 5); //m_qtyMonsterToKill i++; } }
public override void Process(CmdTrigger <RealmServerCmdArgs> trigger) { Unit target = trigger.Args.Target; if (!(target is Character)) { trigger.Reply("Invalid target: {0} - Character-target required.", (object)target); } else { Character character = (Character)target; uint id = trigger.Text.NextUInt(0U); QuestTemplate qt = null; if (id > 0U) { qt = QuestMgr.GetTemplate(id); } if (qt == null) { trigger.Reply("Invalid QuestId: {0}", (object)id); } else { if (!character.QuestLog.RemoveFinishedQuest(id)) { character.QuestLog.Cancel(id); } if (character.QuestLog.AddQuest(qt) == null) { trigger.Reply("Could not add Quest: " + qt); } else { trigger.Reply("Quest added: " + qt); } } } }
public static void SendQuestGiverOfferReward(this Player p, QuestTemplate quest, ulong guid, bool enablenext) { PacketWriter packet = new PacketWriter(Opcodes.SMSG_QUESTGIVER_OFFER_REWARD); packet.WriteUInt64(guid); packet.WriteUInt32(quest.QuestId); packet.WriteString(quest.Title); packet.WriteString(quest.OfferRewardText); packet.WriteUInt32(enablenext ? (uint)0x1 : 0x0); packet.WriteUInt32(0); //Emote count for (int i = 0; i < 4; i++) { packet.WriteUInt32(0); packet.WriteUInt32(0); } packet.WriteUInt32(quest.GetRewChoiceItemCount); for (int i = 0; i < quest.GetRewChoiceItemCount; i++) { packet.WriteUInt32(quest.RewChoiceItemId[i]); packet.WriteUInt32(quest.RewChoiceItemCount[i]); packet.WriteUInt32(Database.ItemTemplates.TryGet(quest.RewChoiceItemId[i])?.DisplayID ?? 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(quest.RewOrReqMoney < 0 ? (uint)-quest.RewOrReqMoney : 0); packet.WriteUInt32(quest.RewSpell); packet.WriteUInt32(quest.RewSpellCast); p.Client.Send(packet); }
public static void HandleQuestgiverQueryQuestOpcode(ref PacketReader packet, ref WorldManager manager) { ulong guid = packet.ReadUInt64(); uint questid = packet.ReadUInt32(); QuestTemplate quest = Database.QuestTemplates.TryGet(questid); WorldObject obj = null; //TODO add gameobject check obj = Database.Creatures.TryGet <WorldObject>(guid) ?? Database.Items.TryGet <WorldObject>(guid); //Try to find the object if (obj == null || quest == null || obj?.HasQuest(questid) == false) //Check the quest/giver exists { return; } if (obj.IsTypeOf(ObjectTypes.TYPE_UNIT) && (((Creature)obj).IsEnemyTo(manager.Character))) { return; } manager.Character.SendQuestGiverQuestDetails(quest, guid, true); }
/// <summary> /// 임무 추가 /// </summary> /// <param name="data"></param> public void Add(QuestTemplate data) { Dispatcher.Invoke(() => { if (data.id >= 300) { this.researchList.Add(data); this.ResearchCount.Text = this.researchList.Count().ToString(); } else if (data.id >= 200) { this.weeklyList.Add(data); this.WeeklyCount.Text = this.weeklyList.Count().ToString(); } else if (data.id >= 100) { this.questList.Add(data); this.QuestCount.Text = this.questList.Count().ToString(); } Sort(); CheckAll(); }); }
public void FullQuestCompleted(GameObject UniqueObject, bool failed = false) { int temp_loc = 0; foreach (GameObject iter in ActiveQuests) { if (iter == UniqueObject) { QuestTemplate QuestiterScript = UniqueObject.GetComponent <QuestTemplate>(); CompletedQuests.Add(iter); ActiveQuests.Remove(iter); QuestiterScript.questCategory = QuestCategory.Completed; if (FocusedQuestReference == UniqueObject) { FocusedQuestReference = null; QHud.DisableDisplay(); } if (failed) { tempEvent.Setup(EventTypeEnum.QuestFailed, QuestiterScript.QuestName); eventQueue.AddEvent(tempEvent); } else { playerStats.AddEXP(QuestiterScript.xp_reward); tempEvent.Setup(EventTypeEnum.QuestCompleted, QuestiterScript.QuestName); eventQueue.AddEvent(tempEvent); } break; } temp_loc += 1; } }
public static void HandleQuestQueryResponse(Packet packet) { var id = packet.ReadEntry("Quest ID"); // +4 if (id.Value) // entry is masked { return; } //sub_6B9CD3 quest failed 0x0B70 //sub_6B575B -> 0x0F59 bool questIsntAutoComplete = packet.ReadBit("Quest Isn't AutoComplete"); // +20 if (questIsntAutoComplete) { var questTurnTextWindowLen = packet.ReadBits(10); // +2113 var questTitleLen = packet.ReadBits(9); // +30 var questCompletedTextLen = packet.ReadBits(11); // +2433 var questDetailsLen = packet.ReadBits(12); // +908 var questTurnTargetNameLen = packet.ReadBits(8); // +2369 var questGiverTargetNameLen = packet.ReadBits(8); // +2049 var questGiverTextWindowLen = packet.ReadBits(10); // +1793 var questEndTextLen = packet.ReadBits(9); // +1658 var questObjectivesCount = packet.ReadBits("Objectives Count", 19); var questObjectivesLen = packet.ReadBits(12); // +158 uint[,] objectivesCounts = new uint[questObjectivesCount, 2]; for (var i = 0; i < questObjectivesCount; ++i) { objectivesCounts[i, 1] = packet.ReadBits(8); // +2949 + 20 objectives texts objectivesCounts[i, 0] = packet.ReadBits(22); // +2949 + 0 objectives visuals } packet.ResetBitReader(); for (var i = 0; i < questObjectivesCount; ++i) { packet.ReadUInt32("Requirement Count ", i); // +2949 + 12 packet.ReadUInt32("Objective ID", i); // +2949 + 0 packet.ReadWoWString("Objective Text", objectivesCounts[i, 1], i); // +2949 + 20 packet.ReadUInt32("Unk2 UInt32", i); // +2949 + 16 packet.ReadByte("Objective", i); // +2949 + 5 var reqType = packet.ReadByteE <QuestRequirementType>("Requirement Type", i); // +2949 + 4 // +2949 + 8 switch (reqType) { case QuestRequirementType.CreatureKill: case QuestRequirementType.CreatureInteract: case QuestRequirementType.PetBattleDefeatCreature: packet.ReadInt32 <UnitId>("Required Creature ID", i); break; case QuestRequirementType.Item: packet.ReadInt32 <ItemId>("Required Item ID", i); break; case QuestRequirementType.GameObject: packet.ReadInt32 <GOId>("Required GameObject ID", i); break; case QuestRequirementType.Currency: packet.ReadUInt32("Required Currency ID", i); break; case QuestRequirementType.Spell: packet.ReadInt32 <SpellId>("Required Spell ID", i); break; case QuestRequirementType.FactionRepHigher: case QuestRequirementType.FactionRepLower: packet.ReadUInt32("Required Faction ID", i); break; case QuestRequirementType.PetBattleDefeatSpecies: packet.ReadUInt32("Required Species ID", i); break; default: packet.ReadInt32("Required ID", i); break; } for (var j = 0; j < objectivesCounts[i, 0]; j++) { packet.ReadUInt32("Objective Visual ID", i, j); } } packet.ReadUInt32("Required Source Item ID 1"); // +2960 packet.ReadUInt32("Reward Choice ItemID 2"); // +2980 packet.ReadUInt32("Reward ItemID 3"); // +2955 packet.ReadUInt32("Reward ItemID Count2"); // +2957 packet.ReadUInt32("int2973"); // +2975 QuestTemplate quest = new QuestTemplate { QuestType = QuestType.Normal }; quest.RewardCurrencyID = new uint?[4]; quest.RewardCurrencyCount = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardCurrencyID[i] = packet.ReadUInt32("Reward Currency ID", i); // +3001 + 16 quest.RewardCurrencyCount[i] = packet.ReadUInt32("Reward Currency Count", i); // +3001 + 0 } packet.ReadUInt32("CharTittleID"); // +1787 packet.ReadSingle("Point Y"); // +28 quest.SoundTurnIn = packet.ReadUInt32("Sound TurnIn"); // +2947 const int repCount = 5; quest.RewardFactionID = new uint?[repCount]; quest.RewardFactionValue = new int?[repCount]; quest.RewardFactionOverride = new int?[repCount]; for (var i = 0; i < repCount; i++) { quest.RewardFactionValue[i] = packet.ReadInt32("Reward Reputation ID", i); // +2986 + 20 quest.RewardFactionOverride[i] = (int)packet.ReadUInt32("Reward Reputation ID Override", i); // +2986 + 0 quest.RewardFactionID[i] = packet.ReadUInt32("Reward Faction ID", i); // +2986 + 400 } quest.RewardMoney = packet.ReadInt32("Reward Money"); // +16 packet.ReadUInt32("EmoteOnComplete"); // +2981 packet.ReadUInt32("Reward Choice ItemID Count5"); // +2972 packet.ReadUInt32("MinimapTargetMask"); // +25 quest.AreaDescription = packet.ReadWoWString("QuestEndText", questEndTextLen); // +1658 packet.ReadUInt32("Reward Choice ItemID 2"); // +2971 quest.RewardBonusMoney = packet.ReadUInt32("Reward Money Max Level"); // +18 packet.ReadUInt32("Reward Item1 ID"); // +2952 quest.QuestCompletionLog = packet.ReadWoWString("QuestCompletedText", questCompletedTextLen); // +2433 packet.ReadInt32("Reward Choice ItemID 4"); // +2977 packet.ReadUInt32("RewardHonorAddition"); // +21 quest.QuestGiverTextWindow = packet.ReadWoWString("QuestGiverTextWindow", questGiverTextWindowLen); // +1793 quest.LogDescription = packet.ReadWoWString("QuestObjectives", questObjectivesLen); // +158 packet.ReadUInt32("RewArenaPoints"); // +1790 packet.ReadUInt32("Reward Choice ItemID 6"); // +2983 quest.SuggestedGroupNum = packet.ReadUInt32("Suggested Players"); // +13 packet.ReadUInt32("RepObjectiveFaction"); // +6 packet.ReadUInt32("Required Source Item ID 2"); // +2961 packet.ReadUInt32("Reward ItemID 2"); // +2953 packet.ReadUInt32("MinLevel"); // +10 packet.ReadUInt32("Reward Choice ItemID Count3"); // +2945 packet.ReadUInt32("PointOpt"); // +29 // +8 quest.QuestLevel = packet.ReadInt32("Level"); // +8 packet.ReadUInt32("RepObjectiveFaction2"); // +7 packet.ReadUInt32("Required Source Item ID Count 3"); // +2966 packet.ReadUInt32("XPId"); // +17 quest.QuestDescription = packet.ReadWoWString("QuestDetails", questDetailsLen); // +908 packet.ReadUInt32("Reward ItemID Count1"); // +2956 packet.ReadUInt32("Reward Choice ItemID Count6"); // +2984 packet.ReadUInt32("Reward ItemID Count3"); // +2958 packet.ReadUInt32("RewardSpellCasted"); // +20 packet.ReadUInt32("dword2E80"); // +2976 quest.QuestTurnTargetName = packet.ReadWoWString("QuestTurnTargetName", questTurnTargetNameLen); // +2369 packet.ReadUInt32("dword2E74"); // +2973 packet.ReadUInt32("Required Source Item ID Count 2"); // +2965 packet.ReadUInt32("Required Source Item ID 3"); // +2962 packet.ReadUInt32("RewSkillPoints"); // +1792 quest.LogTitle = packet.ReadWoWString("QuestTitle", questTitleLen); // +30 quest.QuestInfoID = packet.ReadInt32E <QuestInfo>("Type"); // +12 packet.ReadUInt32("RepObjectiveValue2"); // +15 packet.ReadUInt32("unk11"); // +2982 packet.ReadUInt32("PlayersSlain"); // +1788 packet.ReadUInt32("PointMapId"); // +26 packet.ReadUInt32("NextQuestInChain"); // +14 packet.ReadUInt32("Reward Choice ItemID 1"); // +2968 quest.QuestGiverTargetName = packet.ReadWoWString("QuestGiverTargetName", questGiverTargetNameLen); // +2049 packet.ReadUInt32("dword2E8C"); // +2979 packet.ReadUInt32("Required Source Item ID 4"); // +2963 packet.ReadSingle("Point X"); // +27 packet.ReadUInt32("Reward Choice ItemID 3"); // +2974 packet.ReadUInt32("unk"); // +2970 packet.ReadUInt32("Reward ItemID Count4"); // +2959 quest.SoundAccept = packet.ReadUInt32("Sound Accept"); // +2946 packet.ReadUInt32("Reward ItemID 3"); // +2954 packet.ReadSingle("RewardHonorMultiplier"); // +22 packet.ReadUInt32("RequiredSpellID"); // +1786 packet.ReadWoWString("QuestTurnTextWindow", questTurnTextWindowLen); // +2113 packet.ReadUInt32("Reward Choice ItemID Count4"); // +2978 packet.ReadUInt32("Required Source Item ID Count 1"); // +2964 quest.QuestSortID = packet.ReadInt32E <QuestSort>("Sort"); // +11 packet.ReadUInt32("BonusTalents"); // +1789 packet.ReadUInt32("Reward Choice ItemID Count1"); // +2969 packet.ReadUInt32("Rewarded Spell"); // +19 packet.ReadUInt32("RewSkillID"); // +1791 packet.ReadUInt32("unk9"); // +2985 packet.ReadUInt32("unk10"); // +2967 quest.Flags = packet.ReadUInt32E <QuestFlags>("Flags"); // +24 packet.ReadUInt32("Suggested Players"); // +9 packet.ReadUInt32("SourceItemID"); // +23 packet.AddSniffData(StoreNameType.Quest, id.Key, "QUERY_RESPONSE"); Storage.QuestTemplates.Add(quest, packet.TimeSpan); } }
public Quest(QuestTemplate template) { TemplateId = template.Id; Template = template; Objectives = new int[5]; }
public static void HandleQuestQueryResponse(Packet packet) { var hasData = packet.ReadBit(); if (!hasData) { packet.ReadUInt32("Entry"); return; // nothing to do } var quest = new QuestTemplate(); var bits907 = packet.ReadBits(12); var count = packet.ReadBits(19); var len2949_20 = new uint[count]; var counter = new uint[count]; for (var i = 0; i < count; ++i) { len2949_20[i] = packet.ReadBits(8); counter[i] = packet.ReadBits(22); } var bits2432 = packet.ReadBits(11); var bits2048 = packet.ReadBits(8); var bits2112 = packet.ReadBits(10); var bits157 = packet.ReadBits(12); var bits1657 = packet.ReadBits(9); var bits2368 = packet.ReadBits(8); var bits1792 = packet.ReadBits(10); var bits29 = packet.ReadBits(9); packet.ReadInt32("Int2E34"); packet.ReadInt32("Int4C"); packet.ReadSingle("Float54"); for (var i = 0; i < count; ++i) { packet.ReadInt32("Int2E10", i); packet.ReadInt32("IntED", i); packet.ReadInt32("IntED", i); packet.ReadInt32("IntEA", i); packet.ReadWoWString("StringEA", len2949_20[i], i); packet.ReadByte("ByteED", i); packet.ReadByte("ByteEA", i); for (var j = 0; j < counter[i]; ++j) { packet.ReadInt32("Int118", i, j); } } packet.ReadInt32("Int58"); packet.ReadInt32("Int2E54"); packet.ReadSingle("Float6C"); packet.ReadWoWString("String2500", bits2368); packet.ReadInt32("Int34"); packet.ReadWoWString("String19E4", bits1657); packet.ReadInt32("Int2E74"); for (var i = 0; i < 4; ++i) { packet.ReadInt32("int3001+16", i); packet.ReadInt32("int3001+0", i); } packet.ReadInt32("Int1C"); packet.ReadSingle("Float68"); packet.ReadInt32("Int2E28"); for (var i = 0; i < 5; ++i) { packet.ReadInt32("int2986+40", i); packet.ReadInt32("int2986+0", i); packet.ReadInt32("int2986+20", i); } packet.ReadInt32("Int1BE8"); packet.ReadInt32("Int2E7C"); packet.ReadInt32("Int1BF8"); packet.ReadInt32("Int1BFC"); packet.ReadInt32("Int2E90"); packet.ReadInt32("Int2E48"); packet.ReadWoWString("String74", bits29); packet.ReadInt32("Int2E2C"); packet.ReadInt32("Int2E50"); packet.ReadInt32("Int2E64"); packet.ReadInt32("Int1BEC"); packet.ReadInt32("Int60"); packet.ReadInt32("Int2E88"); packet.ReadInt32("Int2E94"); packet.ReadInt32("Int2E6C"); packet.ReadInt32("Int14"); packet.ReadInt32("Int2E20"); packet.ReadInt32("Int2E30"); packet.ReadInt32("Int2E24"); packet.ReadInt32("Int1BF0"); packet.ReadInt32("Int2E4C"); packet.ReadInt32("Int2E68"); packet.ReadInt32("Int20"); packet.ReadInt32("Int1BF4"); packet.ReadWoWString("String2100", bits2112); packet.ReadInt32("Int2E08"); packet.ReadInt32("Int38"); packet.ReadInt32("Int5C"); packet.ReadWoWString("String2600", bits2432); packet.ReadInt32("Int24"); packet.ReadInt32("Int2E58"); packet.ReadInt32("Int30"); packet.ReadInt32("Int64"); packet.ReadInt32("Int44"); packet.ReadInt32("Int2E00"); packet.ReadInt32("Int2E44"); packet.ReadInt32("Int2EA0"); packet.ReadInt32("Int28"); packet.ReadInt32("Int2E1C"); packet.ReadInt32("Int40"); packet.ReadWoWString("StringE2C", bits907); packet.ReadInt32("Int2E60"); packet.ReadWoWString("String2000", bits2048); packet.ReadInt32("Int2E70"); packet.ReadInt32("Int2E5C"); packet.ReadInt32("Int18"); packet.ReadInt32("Int50"); packet.ReadInt32("Int1BE4"); packet.ReadWoWString("String1C00", bits1792); packet.ReadInt32("Int3C"); packet.ReadInt32("Int2C"); packet.ReadWoWString("String274", bits157); packet.ReadInt32("Int48"); packet.ReadInt32("Int2E80"); packet.ReadInt32("Int2E40"); packet.ReadInt32("Int2E9C"); packet.ReadInt32("Int2E84"); packet.ReadInt32("Int2E38"); packet.ReadInt32("Int2E04"); packet.ReadInt32("Int2E98"); packet.ReadInt32("Int2E3C"); packet.ReadInt32("Int2E78"); packet.ReadInt32("Int70"); packet.ReadInt32("Int2E8C"); var id = packet.ReadInt32("Int2F00"); //packet.AddSniffData(StoreNameType.Quest, id.Key, "QUERY_RESPONSE"); //Storage.QuestTemplates.Add((uint)id.Key, quest, packet.TimeSpan); }
public override void Process(CmdTrigger <RealmServerCmdArgs> trigger) { Unit target = trigger.Args.Target; if (target == null) { trigger.Reply("No target given."); } else { QuestTemplate template = GetTemplate(trigger); if (template == null) { return; } List <IQuestHolderEntry> starters = template.Starters; if (starters.Count == 0) { trigger.Reply("Quest {0} has no Starters.", (object)template); } else { trigger.Reply("Found {0} Starters: " + starters.ToString(", "), (object)starters.Count); int index1; if (trigger.Text.HasNext) { index1 = trigger.Text.NextInt(-1); if (index1 < 0 || index1 >= starters.Count) { trigger.Reply("Invalid starter-index."); return; } } else { index1 = 0; } IQuestHolderEntry questHolderEntry = starters[index1]; IWorldLocation[] inWorldTemplates = questHolderEntry.GetInWorldTemplates(); if (inWorldTemplates == null) { trigger.Reply("Quest starters are not accessible."); } else { trigger.Reply( "Found {0} templates: " + inWorldTemplates .ToString(", "), (object)inWorldTemplates.Length); int index2; if (trigger.Text.HasNext) { index2 = trigger.Text.NextInt(-1); if (index2 < 0 || index2 >= inWorldTemplates.Length) { trigger.Reply("Invalid template-index."); return; } } else { index2 = 0; } IWorldLocation location = inWorldTemplates[index2]; if (target.TeleportTo(location)) { if (inWorldTemplates.Length <= 1 && starters.Count <= 1) { return; } trigger.Reply("Going to {0} ({1})", (object)questHolderEntry, (object)location); } else { trigger.Reply("Template is located in {0} ({1}) and not accessible.", (object)location.MapId, (object)location.Position); } } } } }
public static bool CanCompleteQuest(this Player p, uint questid) { QuestTemplate template = Database.QuestTemplates.TryGet(questid); if (template == null || !p.Quests.ContainsKey(questid)) { return(false); } Quest quest = p.Quests[questid]; if (template.IsAutoComplete) { return(true); } //Item check for (int i = 0; i < 4; i++) { uint reqcount = template.ReqItemCount[i]; uint reqitem = template.ReqItemId[i]; if (reqitem == 0 || reqcount == 0) { continue; } if (!quest.ReqItems.ContainsKey(reqitem)) { return(false); } if (quest.ReqItems[reqitem] < reqcount) { return(false); } } //GO check for (int i = 0; i < 4; i++) { uint reqcount = template.ReqCreatureOrGOCount[i]; uint reqobj = (uint)template.ReqCreatureOrGOId[i]; if (reqcount == 0 || reqobj == 0) { continue; } if (!quest.ReqCreatureGo.ContainsKey(reqobj)) { return(false); } if (quest.ReqCreatureGo[reqobj] < reqcount) { return(false); } } //Money check if (template.RewOrReqMoney < 0 && p.Money < (template.RewOrReqMoney * -1)) { return(false); } return(true); }
/// <summary>Sends SMSG_QUESTGIVER_REQUEST_ITEMS</summary> /// <param name="qg">The qg.</param> /// <param name="qt">The qt.</param> /// <param name="chr">The client.</param> public static void SendRequestItems(IQuestHolder qg, QuestTemplate qt, Character chr, bool closeOnCancel) { }
public static void HandleQuestQueryResponse(Packet packet) { packet.ReadInt32("Entry"); Bit hasData = packet.ReadBit("Has Data"); if (!hasData) { return; // nothing to do } var id = packet.ReadEntry("Quest ID"); QuestTemplate quest = new QuestTemplate { ID = (uint)id.Key }; quest.QuestType = packet.ReadInt32E <QuestType>("QuestType"); quest.QuestLevel = packet.ReadInt32("QuestLevel"); quest.QuestPackageID = packet.ReadUInt32("QuestPackageID"); quest.MinLevel = packet.ReadInt32("QuestMinLevel"); quest.QuestSortID = (QuestSort)packet.ReadUInt32("QuestSortID"); quest.QuestInfoID = packet.ReadInt32E <QuestInfo>("QuestInfoID"); quest.SuggestedGroupNum = packet.ReadUInt32("SuggestedGroupNum"); quest.RewardNextQuest = packet.ReadUInt32("RewardNextQuest"); quest.RewardXPDifficulty = packet.ReadUInt32("RewardXPDifficulty"); quest.RewardXPMultiplier = packet.ReadSingle("RewardXPMultiplier"); quest.RewardMoney = packet.ReadInt32("RewardMoney"); quest.RewardMoneyDifficulty = packet.ReadUInt32("RewardMoneyDifficulty"); quest.RewardMoneyMultiplier = packet.ReadSingle("RewardMoneyMultiplier"); quest.RewardBonusMoney = packet.ReadUInt32("RewardBonusMoney"); quest.RewardDisplaySpell = packet.ReadUInt32("RewardDisplaySpell"); quest.RewardSpellWod = packet.ReadUInt32("RewardSpell"); quest.RewardHonorWod = packet.ReadUInt32("RewardHonor"); quest.RewardKillHonor = packet.ReadSingle("RewardKillHonor"); quest.StartItem = packet.ReadUInt32("StartItem"); quest.Flags = packet.ReadUInt32E <QuestFlags>("Flags"); quest.FlagsEx = packet.ReadUInt32E <QuestFlags2>("FlagsEx"); quest.RewardItem = new uint?[4]; quest.RewardAmount = new uint?[4]; quest.ItemDrop = new uint?[4]; quest.ItemDropQuantity = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardItem[i] = packet.ReadUInt32("RewardItems", i); quest.RewardAmount[i] = packet.ReadUInt32("RewardAmount", i); quest.ItemDrop[i] = packet.ReadUInt32("ItemDrop", i); quest.ItemDropQuantity[i] = packet.ReadUInt32("ItemDropQuantity", i); } quest.RewardChoiceItemID = new uint?[6]; quest.RewardChoiceItemQuantity = new uint?[6]; quest.RewardChoiceItemDisplayID = new uint?[6]; for (int i = 0; i < 6; ++i) // CliQuestInfoChoiceItem { quest.RewardChoiceItemID[i] = packet.ReadUInt32("RewardChoiceItemID", i); quest.RewardChoiceItemQuantity[i] = packet.ReadUInt32("RewardChoiceItemQuantity", i); quest.RewardChoiceItemDisplayID[i] = packet.ReadUInt32("RewardChoiceItemDisplayID", i); } quest.POIContinent = packet.ReadUInt32("POIContinent"); quest.POIx = packet.ReadSingle("POIx"); quest.POIy = packet.ReadSingle("POIy"); quest.POIPriorityWod = packet.ReadInt32("POIPriority"); quest.RewardTitle = packet.ReadUInt32("RewardTitle"); quest.RewardTalents = packet.ReadUInt32("RewardTalents"); quest.RewardArenaPoints = packet.ReadUInt32("RewardArenaPoints"); quest.RewardSkillLineID = packet.ReadUInt32("RewardSkillLineID"); quest.RewardNumSkillUps = packet.ReadUInt32("RewardNumSkillUps"); quest.QuestGiverPortrait = packet.ReadUInt32("PortraitGiver"); quest.QuestTurnInPortrait = packet.ReadUInt32("PortraitTurnIn"); quest.RewardFactionID = new uint?[5]; quest.RewardFactionValue = new int?[5]; quest.RewardFactionOverride = new int?[5]; for (int i = 0; i < 5; ++i) { quest.RewardFactionID[i] = packet.ReadUInt32("RewardFactionID", i); quest.RewardFactionValue[i] = packet.ReadInt32("RewardFactionValue", i); quest.RewardFactionOverride[i] = packet.ReadInt32("RewardFactionOverride", i); } quest.RewardFactionFlags = packet.ReadUInt32("RewardFactionFlags"); quest.RewardCurrencyID = new uint?[4]; quest.RewardCurrencyCount = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardCurrencyID[i] = packet.ReadUInt32("RewardCurrencyID"); quest.RewardCurrencyCount[i] = packet.ReadUInt32("RewardCurrencyQty"); } quest.SoundAccept = packet.ReadUInt32("AcceptedSoundKitID"); quest.SoundTurnIn = packet.ReadUInt32("CompleteSoundKitID"); quest.AreaGroupID = packet.ReadUInt32("AreaGroupID"); quest.TimeAllowed = packet.ReadUInt32("TimeAllowed"); uint int2946 = packet.ReadUInt32("CliQuestInfoObjective"); quest.AllowableRacesWod = packet.ReadInt32("AllowableRaces"); for (int i = 0; i < int2946; ++i) { var objectiveId = packet.ReadEntry("Id", i); QuestObjective questInfoObjective = new QuestObjective { ID = (uint)objectiveId.Key, QuestID = (uint)id.Key }; questInfoObjective.Type = packet.ReadByteE <QuestRequirementType>("Quest Requirement Type", i); questInfoObjective.StorageIndex = packet.ReadSByte("StorageIndex", i); questInfoObjective.ObjectID = packet.ReadInt32("ObjectID", i); questInfoObjective.Amount = packet.ReadInt32("Amount", i); questInfoObjective.Flags = packet.ReadUInt32("Flags", i); questInfoObjective.UnkFloat = packet.ReadSingle("Float5", i); int int280 = packet.ReadInt32("VisualEffects", i); for (int j = 0; j < int280; ++j) { QuestVisualEffect questVisualEffect = new QuestVisualEffect { ID = questInfoObjective.ID, Index = (uint)j, VisualEffect = packet.ReadInt32("VisualEffectId", i, j) }; Storage.QuestVisualEffects.Add(questVisualEffect, packet.TimeSpan); } packet.ResetBitReader(); uint bits6 = packet.ReadBits(8); questInfoObjective.Description = packet.ReadWoWString("Description", bits6, i); if (BinaryPacketReader.GetLocale() != LocaleConstant.enUS && questInfoObjective.Description != string.Empty) { QuestObjectivesLocale localesQuestObjectives = new QuestObjectivesLocale { ID = (uint)objectiveId.Key, QuestId = (uint)id.Key, StorageIndex = questInfoObjective.StorageIndex, Description = questInfoObjective.Description }; Storage.LocalesQuestObjectives.Add(localesQuestObjectives, packet.TimeSpan); } Storage.QuestObjectives.Add(questInfoObjective, packet.TimeSpan); } packet.ResetBitReader(); uint bits26 = packet.ReadBits(9); uint bits154 = packet.ReadBits(12); uint bits904 = packet.ReadBits(12); uint bits1654 = packet.ReadBits(9); uint bits1789 = packet.ReadBits(10); uint bits2045 = packet.ReadBits(8); uint bits2109 = packet.ReadBits(10); uint bits2365 = packet.ReadBits(8); uint bits2429 = packet.ReadBits(11); quest.LogTitle = packet.ReadWoWString("LogTitle", bits26); quest.LogDescription = packet.ReadWoWString("LogDescription", bits154); quest.QuestDescription = packet.ReadWoWString("QuestDescription", bits904); quest.AreaDescription = packet.ReadWoWString("AreaDescription", bits1654); quest.QuestGiverTextWindow = packet.ReadWoWString("PortraitGiverText", bits1789); quest.QuestGiverTargetName = packet.ReadWoWString("PortraitGiverName", bits2045); quest.QuestTurnTextWindow = packet.ReadWoWString("PortraitTurnInText", bits2109); quest.QuestTurnTargetName = packet.ReadWoWString("PortraitTurnInName", bits2365); quest.QuestCompletionLog = packet.ReadWoWString("QuestCompletionLog", bits2429); if (BinaryPacketReader.GetLocale() != LocaleConstant.enUS) { LocalesQuest localesQuest = new LocalesQuest { ID = (uint)id.Key, Locale = BinaryPacketReader.GetClientLocale(), LogTitle = quest.LogTitle, LogDescription = quest.LogDescription, QuestDescription = quest.QuestDescription, AreaDescription = quest.AreaDescription, PortraitGiverText = quest.QuestGiverTextWindow, PortraitGiverName = quest.QuestGiverTargetName, PortraitTurnInText = quest.QuestTurnTextWindow, PortraitTurnInName = quest.QuestTurnTargetName, QuestCompletionLog = quest.QuestCompletionLog }; Storage.LocalesQuests.Add(localesQuest, packet.TimeSpan); } Storage.QuestTemplates.Add(quest, packet.TimeSpan); }
/// <summary> /// Offers the reward of the given Quest to the given Character. /// When replying the Quest will be complete. /// </summary> /// <param name="questGiver">The qg.</param> /// <param name="qt">The quest id.</param> /// <param name="chr">The client.</param> public static void SendQuestGiverOfferReward(IEntity questGiver, QuestTemplate qt, Character chr) { ClientLocale locale = chr.Locale; using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUESTGIVER_OFFER_REWARD)) { packet.Write(questGiver.EntityId); packet.WriteUInt(qt.Id); packet.WriteCString(qt.Titles.Localize(locale)); packet.WriteCString(qt.OfferRewardTexts.Localize(locale)); packet.WriteByte(qt.FollowupQuestId > 0U ? (byte)1 : (byte)0); packet.WriteUInt((uint)qt.Flags); packet.WriteUInt(qt.SuggestedPlayers); packet.Write(qt.OfferRewardEmotes.Length); for (uint index = 0; (long)index < (long)qt.OfferRewardEmotes.Length; ++index) { packet.Write(qt.OfferRewardEmotes[index].Delay); packet.Write((uint)qt.OfferRewardEmotes[index].Type); } packet.Write(qt.RewardChoiceItems.Length); for (int index = 0; index < qt.RewardChoiceItems.Length; ++index) { packet.Write((uint)qt.RewardChoiceItems[index].ItemId); packet.Write(qt.RewardChoiceItems[index].Amount); ItemTemplate template = qt.RewardChoiceItems[index].Template; if (template != null) { packet.Write(template.DisplayId); } else { packet.Write(0); } } packet.Write(qt.RewardItems.Length); for (int index = 0; index < qt.RewardItems.Length; ++index) { packet.Write((uint)qt.RewardItems[index].ItemId); packet.Write(qt.RewardItems[index].Amount); ItemTemplate template = qt.RewardItems[index].Template; if (template != null) { packet.WriteUInt(template.DisplayId); } else { packet.Write(0); } } if (chr.Level >= RealmServerConfiguration.MaxCharacterLevel) { packet.Write(qt.MoneyAtMaxLevel); } else { packet.Write(qt.RewMoney); } packet.Write(qt.CalcRewardXp(chr)); packet.Write(qt.CalcRewardHonor(chr)); packet.Write(qt.RewHonorMultiplier); packet.Write(8U); packet.Write((uint)qt.RewSpell); packet.Write((uint)qt.CastSpell); packet.Write((uint)qt.RewardTitleId); packet.Write(qt.RewardTalents); packet.Write(0); packet.Write(0); for (uint index = 0; index < 5U; ++index) { packet.Write((uint)qt.RewardReputations[index].Faction); } for (uint index = 0; index < 5U; ++index) { packet.Write(qt.RewardReputations[index].ValueId); } for (uint index = 0; index < 5U; ++index) { packet.Write(qt.RewardReputations[index].Value); } chr.Client.Send(packet, false); } }
/// <summary>Sends the quest giver quest detail.</summary> /// <param name="questGiver">The qg.</param> /// <param name="qt">The quest id.</param> /// <param name="chr">The client.</param> /// <param name="acceptable">if set to <c>true</c> [acceptable].</param> public static void SendDetails(IEntity questGiver, QuestTemplate qt, Character chr, bool acceptable) { ClientLocale locale = chr.Locale; using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUESTGIVER_QUEST_DETAILS)) { packet.Write(questGiver != null ? questGiver.EntityId : EntityId.Zero); packet.Write(EntityId.Zero); packet.Write(qt.Id); packet.WriteCString(qt.Titles.Localize(locale)); packet.WriteCString(qt.Details.Localize(locale)); packet.WriteCString(qt.Instructions.Localize(locale)); packet.Write(acceptable ? (byte)1 : (byte)0); packet.WriteUInt((uint)qt.Flags); packet.WriteUInt(qt.SuggestedPlayers); packet.Write((byte)0); if (qt.Flags.HasFlag(QuestFlags.HiddenRewards)) { packet.WriteUInt(0U); packet.WriteUInt(0U); packet.WriteUInt(0U); packet.WriteUInt(0U); } else { packet.Write(qt.RewardChoiceItems.Length); for (uint index = 0; (long)index < (long)qt.RewardChoiceItems.Length; ++index) { packet.Write((uint)qt.RewardChoiceItems[index].ItemId); packet.Write(qt.RewardChoiceItems[index].Amount); ItemTemplate template = qt.RewardChoiceItems[index].Template; if (template != null) { packet.Write(template.DisplayId); } else { packet.Write(0); } } packet.Write(qt.RewardItems.Length); for (uint index = 0; (long)index < (long)qt.RewardItems.Length; ++index) { packet.Write((uint)qt.RewardItems[index].ItemId); packet.Write(qt.RewardItems[index].Amount); ItemTemplate template = qt.RewardItems[index].Template; if (template != null) { packet.Write(template.DisplayId); } else { packet.Write(0); } } if (chr.Level >= RealmServerConfiguration.MaxCharacterLevel) { packet.Write(qt.MoneyAtMaxLevel); } else { packet.Write(qt.RewMoney); } packet.Write(qt.CalcRewardXp(chr)); } packet.Write(qt.RewHonorAddition); packet.Write(qt.RewHonorMultiplier); packet.Write((uint)qt.RewSpell); packet.Write((uint)qt.CastSpell); packet.Write((uint)qt.RewardTitleId); packet.Write(qt.RewardTalents); packet.Write(0); packet.Write(0); for (uint index = 0; index < 5U; ++index) { packet.Write((uint)qt.RewardReputations[index].Faction); } for (uint index = 0; index < 5U; ++index) { packet.Write(qt.RewardReputations[index].ValueId); } for (uint index = 0; index < 5U; ++index) { packet.Write(qt.RewardReputations[index].Value); } packet.Write(4); for (int index = 0; index < 4; ++index) { EmoteTemplate questDetailedEmote = qt.QuestDetailedEmotes[index]; packet.Write((int)questDetailedEmote.Type); packet.Write(questDetailedEmote.Delay); } chr.Client.Send(packet, false); } }
/// <summary>Sends the quest query response.</summary> /// <param name="qt">The quest id.</param> /// <param name="chr">The client.</param> public static void SendQuestQueryResponse(QuestTemplate qt, Character chr) { ClientLocale locale = chr.Client.Info.Locale; using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_QUEST_QUERY_RESPONSE)) { packet.Write(qt.Id); packet.Write((uint)qt.IsActive); packet.Write(qt.Level); packet.Write(qt.MinLevel); packet.Write(qt.Category); packet.Write((uint)qt.QuestType); packet.Write(qt.SuggestedPlayers); packet.Write((uint)qt.ObjectiveMinReputation.ReputationIndex); packet.Write(qt.ObjectiveMinReputation.Value); packet.Write((uint)qt.ObjectiveMaxReputation.ReputationIndex); packet.Write(qt.ObjectiveMaxReputation.Value); packet.Write(qt.FollowupQuestId); packet.Write(qt.CalcRewardXp(chr)); if (qt.Flags.HasFlag(QuestFlags.HiddenRewards)) { packet.Write(0); } else { packet.Write(qt.RewMoney); } packet.Write(qt.MoneyAtMaxLevel); packet.Write((uint)qt.CastSpell); packet.Write((uint)qt.RewSpell); packet.Write(qt.RewHonorAddition); packet.WriteFloat(qt.RewHonorMultiplier); packet.Write((uint)qt.SrcItemId); packet.Write((uint)qt.Flags); packet.Write((uint)qt.RewardTitleId); packet.Write(qt.PlayersSlain); packet.Write(qt.RewardTalents); packet.Write(0); packet.Write(0); if (qt.Flags.HasFlag(QuestFlags.HiddenRewards)) { for (int index = 0; index < 4; ++index) { packet.WriteUInt(0U); packet.WriteUInt(0U); } for (int index = 0; index < 6; ++index) { packet.WriteUInt(0U); packet.WriteUInt(0U); } } else { for (int index = 0; index < 4; ++index) { if (index < qt.RewardItems.Length) { packet.Write((uint)qt.RewardItems[index].ItemId); packet.Write(qt.RewardItems[index].Amount); } else { packet.WriteUInt(0U); packet.WriteUInt(0U); } } for (int index = 0; index < 6; ++index) { if (index < qt.RewardChoiceItems.Length) { packet.Write((uint)qt.RewardChoiceItems[index].ItemId); packet.Write(qt.RewardChoiceItems[index].Amount); } else { packet.WriteUInt(0U); packet.WriteUInt(0U); } } } for (int index = 0; index < 5; ++index) { packet.Write((uint)qt.RewardReputations[index].Faction); } for (int index = 0; index < 5; ++index) { packet.Write(qt.RewardReputations[index].ValueId); } for (int index = 0; index < 5; ++index) { packet.Write(qt.RewardReputations[index].Value); } packet.Write((uint)qt.MapId); packet.Write(qt.PointX); packet.Write(qt.PointY); packet.Write(qt.PointOpt); packet.WriteCString(qt.Titles.Localize(locale)); packet.WriteCString(qt.Instructions.Localize(locale)); packet.WriteCString(qt.Details.Localize(locale)); packet.WriteCString(qt.EndTexts.Localize(locale)); packet.WriteCString(qt.CompletedTexts.Localize(locale)); for (int index = 0; index < 4; ++index) { packet.Write(qt.ObjectOrSpellInteractions[index].RawId); packet.Write(qt.ObjectOrSpellInteractions[index].Amount); packet.Write((uint)qt.CollectableSourceItems[index].ItemId); packet.Write(qt.CollectableSourceItems[index].Amount); } for (int index = 0; index < 6; ++index) { if (index < qt.CollectableItems.Length) { packet.Write((uint)qt.CollectableItems[index].ItemId); packet.Write(qt.CollectableItems[index].Amount); } else { packet.WriteUInt(0U); packet.WriteUInt(0U); } } for (int index = 0; index < 4; ++index) { QuestObjectiveSet objectiveText = qt.ObjectiveTexts[(int)locale]; if (objectiveText != null) { packet.Write(objectiveText.Texts[index]); } else { packet.Write(""); } } chr.Client.Send(packet, false); } }
/// <summary> /// 임무 제거 /// </summary> /// <param name="data"></param> public void Remove(QuestTemplate data) { Remove(data.id); }
public static void HandleQuestQueryResponse510(Packet packet) { var hasData = packet.ReadBit(); if (!hasData) { packet.ReadUInt32("Entry"); return; // nothing to do } var quest = new QuestTemplate(); var questTurnTextWindow = (int)packet.ReadBits(10); var details = (int)packet.ReadBits(12); var questGiverTextWindow = (int)packet.ReadBits(10); var len1658 = (int)packet.ReadBits(9); var completedText = (int)packet.ReadBits(11); var len158 = (int)packet.ReadBits(12); var questGiverTargetName = (int)packet.ReadBits(8); var title = (int)packet.ReadBits(9); var questTurnTargetName = (int)packet.ReadBits(8); var count = (int)packet.ReadBits("Requirement Count", 19); var len2949_20 = new int[count]; var counter = new int[count]; for (var i = 0; i < count; ++i) { len2949_20[i] = (int)packet.ReadBits(8); counter[i] = (int)packet.ReadBits(22); } packet.ResetBitReader(); for (var i = 0; i < count; ++i) { packet.ReadWoWString("string2949+20", len2949_20[i], i); packet.ReadInt32("int2949+16", i); packet.ReadByte("byte2949+5", i); packet.ReadByte("byte2949+4", i); packet.ReadInt32("int2949+12", i); for (var j = 0; j < counter[i]; ++j) { packet.ReadInt32("Unk UInt32", i, j); } packet.ReadInt32("Unk UInt32", i); packet.ReadInt32("int2949+8", i); } packet.ReadWoWString("string158", len158); quest.NextQuestIdChain = (uint)packet.ReadEntry <Int32>(StoreNameType.Quest, "Next Chain Quest"); packet.ReadInt32("int2971"); quest.RewardSpellCast = packet.ReadEntry <Int32>(StoreNameType.Spell, "Reward Spell Cast"); packet.ReadInt32("int2955"); quest.RewardHonorMultiplier = packet.ReadSingle("Reward Honor Multiplier"); packet.ReadInt32("int2970"); packet.ReadInt32("int2984"); packet.ReadInt32("int2979"); quest.MinLevel = packet.ReadInt32("Min Level"); quest.RewardSkillPoints = packet.ReadUInt32("RewSkillPoints"); quest.QuestGiverPortrait = packet.ReadUInt32("QuestGiverPortrait"); packet.ReadInt32("int21"); quest.Type = packet.ReadEnum <QuestType>("Type", TypeCode.Int32); for (var i = 0; i < 5; ++i) { packet.ReadInt32("int2986+40"); packet.ReadInt32("int2986+0"); packet.ReadInt32("int2986+20"); } packet.ReadInt32("int2960"); for (var i = 0; i < 4; ++i) { packet.ReadInt32("int3001+16"); packet.ReadInt32("int3001+0"); } quest.SuggestedPlayers = packet.ReadUInt32("Suggested Players"); packet.ReadInt32("int2972"); packet.ReadInt32("int2959"); quest.Title = packet.ReadWoWString("Title", title); packet.ReadInt32("int2965"); packet.ReadInt32("int2978"); quest.RewardSkillId = packet.ReadUInt32("RewSkillId"); packet.ReadInt32("int2982"); packet.ReadInt32("int2968"); packet.ReadInt32("int2964"); packet.ReadInt32("int2957"); packet.ReadInt32("int2969"); packet.ReadInt32("int1786"); quest.SoundAccept = packet.ReadUInt32("Sound Accept"); packet.ReadInt32("int2981"); packet.ReadInt32("int2961"); packet.ReadInt32("int15"); packet.ReadInt32("int2967"); quest.CompletedText = packet.ReadWoWString("Completed Text", completedText); packet.ReadInt32("int25"); packet.ReadInt32("Quest Id"); quest.PointY = packet.ReadSingle("Point Y"); packet.ReadInt32("int2974"); packet.ReadInt32("int2952"); quest.Details = packet.ReadWoWString("Details", details); quest.Level = packet.ReadInt32("Level"); quest.PointMapId = packet.ReadUInt32("Point Map ID"); packet.ReadWoWString("string1658", len1658); quest.PointX = packet.ReadSingle("Point X"); packet.ReadInt32("int17"); packet.ReadInt32("int2962"); quest.QuestGiverTextWindow = packet.ReadWoWString("QuestGiver Text Window", questGiverTextWindow); packet.ReadInt32("int2963"); packet.ReadInt32("int2985"); quest.Method = packet.ReadEnum <QuestMethod>("Method", TypeCode.Int32); quest.RewardReputationMask = packet.ReadUInt32("RewRepMask"); packet.ReadInt32("int2953"); packet.ReadInt32("int2983"); packet.ReadInt32("int9"); quest.QuestGiverTargetName = packet.ReadWoWString("QuestGiver Target Name", questGiverTargetName); quest.ZoneOrSort = packet.ReadEnum <QuestSort>("Sort", TypeCode.Int32); packet.ReadInt32("int1788"); quest.SoundTurnIn = packet.ReadUInt32("Sound TurnIn"); quest.SourceItemId = (uint)packet.ReadEntry <UInt32>(StoreNameType.Item, "Source Item ID"); quest.QuestTurnTargetName = packet.ReadWoWString("QuestTurn Target Name", questTurnTargetName); quest.QuestTurnInPortrait = packet.ReadUInt32("QuestTurnInPortrait"); quest.Flags = packet.ReadEnum <QuestFlags>("Flags", TypeCode.UInt32); packet.ReadInt32("int2954"); packet.ReadInt32("int2958"); quest.RewardMoneyMaxLevel = packet.ReadUInt32("Reward Money Max Level"); packet.ReadInt32("int1787"); quest.QuestTurnTextWindow = packet.ReadWoWString("QuestTurn Text Window", questTurnTextWindow); packet.ReadInt32("int2977"); packet.ReadInt32("int2980"); packet.ReadInt32("int2975"); quest.RewardSpell = (uint)packet.ReadEntry <Int32>(StoreNameType.Spell, "Reward Spell"); quest.RewardOrRequiredMoney = packet.ReadInt32("Reward Money"); packet.ReadInt32("int2973"); packet.ReadInt32("int2966"); packet.ReadInt32("int2976"); quest.PointOption = packet.ReadUInt32("Point Opt"); packet.ReadInt32("int2956"); var id = packet.ReadEntry("Quest ID"); packet.AddSniffData(StoreNameType.Quest, id.Key, "QUERY_RESPONSE"); Storage.QuestTemplates.Add((uint)id.Key, quest, packet.TimeSpan); }
public static void HandleQuestQueryResponse(Packet packet) { packet.ReadInt32("Entry"); Bit hasData = packet.ReadBit("Has Data"); if (!hasData) { return; // nothing to do } var id = packet.ReadEntry("Quest ID"); QuestTemplate quest = new QuestTemplate { ID = (uint)id.Key }; quest.QuestType = packet.ReadInt32E <QuestType>("QuestType"); quest.QuestLevel = packet.ReadInt32("QuestLevel"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_3_5_25848)) { quest.QuestMaxScalingLevel = packet.ReadInt32("QuestMaxScalingLevel"); } quest.QuestPackageID = packet.ReadUInt32("QuestPackageID"); quest.MinLevel = packet.ReadInt32("QuestMinLevel"); quest.QuestSortID = (QuestSort)packet.ReadUInt32("QuestSortID"); quest.QuestInfoID = packet.ReadInt32E <QuestInfo>("QuestInfoID"); quest.SuggestedGroupNum = packet.ReadUInt32("SuggestedGroupNum"); quest.RewardNextQuest = packet.ReadUInt32("RewardNextQuest"); quest.RewardXPDifficulty = packet.ReadUInt32("RewardXPDifficulty"); quest.RewardXPMultiplier = packet.ReadSingle("RewardXPMultiplier"); quest.RewardMoney = packet.ReadInt32("RewardMoney"); quest.RewardMoneyDifficulty = packet.ReadUInt32("RewardMoneyDifficulty"); quest.RewardMoneyMultiplier = packet.ReadSingle("RewardMoneyMultiplier"); quest.RewardBonusMoney = packet.ReadUInt32("RewardBonusMoney"); quest.RewardDisplaySpellLegion = new uint?[3]; for (int i = 0; i < 3; ++i) { quest.RewardDisplaySpellLegion[i] = packet.ReadUInt32("RewardDisplaySpell", i); } quest.RewardSpellWod = packet.ReadUInt32("RewardSpell"); quest.RewardHonorWod = packet.ReadUInt32("RewardHonor"); quest.RewardKillHonor = packet.ReadSingle("RewardKillHonor"); quest.RewardArtifactXPDifficulty = packet.ReadUInt32("RewardArtifactXPDifficulty"); quest.RewardArtifactXPMultiplier = packet.ReadSingle("RewardArtifactXPMultiplier"); quest.RewardArtifactCategoryID = packet.ReadUInt32("RewardArtifactCategoryID"); quest.StartItem = packet.ReadUInt32("StartItem"); quest.Flags = packet.ReadUInt32E <QuestFlags>("Flags"); quest.FlagsEx = packet.ReadUInt32E <QuestFlagsEx>("FlagsEx"); quest.RewardItem = new uint?[4]; quest.RewardAmount = new uint?[4]; quest.ItemDrop = new uint?[4]; quest.ItemDropQuantity = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardItem[i] = packet.ReadUInt32("RewardItems", i); quest.RewardAmount[i] = packet.ReadUInt32("RewardAmount", i); quest.ItemDrop[i] = packet.ReadUInt32("ItemDrop", i); quest.ItemDropQuantity[i] = packet.ReadUInt32("ItemDropQuantity", i); } quest.RewardChoiceItemID = new uint?[6]; quest.RewardChoiceItemQuantity = new uint?[6]; quest.RewardChoiceItemDisplayID = new uint?[6]; for (int i = 0; i < 6; ++i) // CliQuestInfoChoiceItem { quest.RewardChoiceItemID[i] = packet.ReadUInt32("RewardChoiceItemID", i); quest.RewardChoiceItemQuantity[i] = packet.ReadUInt32("RewardChoiceItemQuantity", i); quest.RewardChoiceItemDisplayID[i] = packet.ReadUInt32("RewardChoiceItemDisplayID", i); } quest.POIContinent = packet.ReadUInt32("POIContinent"); quest.POIx = packet.ReadSingle("POIx"); quest.POIy = packet.ReadSingle("POIy"); quest.POIPriorityWod = packet.ReadInt32("POIPriority"); quest.RewardTitle = packet.ReadUInt32("RewardTitle"); quest.RewardArenaPoints = packet.ReadUInt32("RewardArenaPoints"); quest.RewardSkillLineID = packet.ReadUInt32("RewardSkillLineID"); quest.RewardNumSkillUps = packet.ReadUInt32("RewardNumSkillUps"); quest.QuestGiverPortrait = packet.ReadUInt32("PortraitGiver"); quest.QuestTurnInPortrait = packet.ReadUInt32("PortraitTurnIn"); quest.RewardFactionID = new uint?[5]; quest.RewardFactionOverride = new int?[5]; quest.RewardFactionValue = new int?[5]; quest.RewardFactionCapIn = new int?[5]; for (int i = 0; i < 5; ++i) { quest.RewardFactionID[i] = packet.ReadUInt32("RewardFactionID", i); quest.RewardFactionValue[i] = packet.ReadInt32("RewardFactionValue", i); quest.RewardFactionOverride[i] = packet.ReadInt32("RewardFactionOverride", i); quest.RewardFactionCapIn[i] = packet.ReadInt32("RewardFactionCapIn", i); } quest.RewardFactionFlags = packet.ReadUInt32("RewardFactionFlags"); quest.RewardCurrencyID = new uint?[4]; quest.RewardCurrencyCount = new uint?[4]; for (int i = 0; i < 4; ++i) { quest.RewardCurrencyID[i] = packet.ReadUInt32("RewardCurrencyID"); quest.RewardCurrencyCount[i] = packet.ReadUInt32("RewardCurrencyQty"); } quest.SoundAccept = packet.ReadUInt32("AcceptedSoundKitID"); quest.SoundTurnIn = packet.ReadUInt32("CompleteSoundKitID"); quest.AreaGroupID = packet.ReadUInt32("AreaGroupID"); quest.TimeAllowed = packet.ReadUInt32("TimeAllowed"); uint cliQuestInfoObjective = packet.ReadUInt32("CliQuestInfoObjective"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_3_5_25848)) { quest.AllowableRacesWod = packet.ReadUInt64("AllowableRaces"); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_0_3_22248) && ClientVersion.RemovedInVersion(ClientVersionBuild.V7_3_5_25848)) { quest.AllowableRacesWod = (uint)packet.ReadInt32("AllowableRaces"); } quest.QuestRewardID = packet.ReadInt32("QuestRewardID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_2_0_23826)) { quest.Expansion = packet.ReadInt32("Expansion"); } packet.ResetBitReader(); uint logTitleLen = packet.ReadBits(9); uint logDescriptionLen = packet.ReadBits(12); uint questDescriptionLen = packet.ReadBits(12); uint areaDescriptionLen = packet.ReadBits(9); uint questGiverTextWindowLen = packet.ReadBits(10); uint questGiverTargetNameLen = packet.ReadBits(8); uint questTurnTextWindowLen = packet.ReadBits(10); uint questTurnTargetNameLen = packet.ReadBits(8); uint questCompletionLogLen = packet.ReadBits(11); for (uint i = 0; i < cliQuestInfoObjective; ++i) { var objectiveId = packet.ReadEntry("Id", i); QuestObjective questInfoObjective = new QuestObjective { ID = (uint)objectiveId.Key, QuestID = (uint)id.Key }; questInfoObjective.Type = packet.ReadByteE <QuestRequirementType>("Quest Requirement Type", i); questInfoObjective.StorageIndex = packet.ReadSByte("StorageIndex", i); questInfoObjective.Order = i; questInfoObjective.ObjectID = packet.ReadInt32("ObjectID", i); questInfoObjective.Amount = packet.ReadInt32("Amount", i); questInfoObjective.Flags = packet.ReadUInt32("Flags", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V7_1_0_22900)) { questInfoObjective.Flags2 = packet.ReadUInt32("Flags2", i); } questInfoObjective.ProgressBarWeight = packet.ReadSingle("ProgressBarWeight", i); int visualEffectsCount = packet.ReadInt32("VisualEffects", i); for (uint j = 0; j < visualEffectsCount; ++j) { QuestVisualEffect questVisualEffect = new QuestVisualEffect { ID = questInfoObjective.ID, Index = j, VisualEffect = packet.ReadInt32("VisualEffectId", i, j) }; Storage.QuestVisualEffects.Add(questVisualEffect, packet.TimeSpan); } packet.ResetBitReader(); uint bits6 = packet.ReadBits(8); questInfoObjective.Description = packet.ReadWoWString("Description", bits6, i); if (ClientLocale.PacketLocale != LocaleConstant.enUS && questInfoObjective.Description != string.Empty) { QuestObjectivesLocale localesQuestObjectives = new QuestObjectivesLocale { ID = (uint)objectiveId.Key, QuestId = (uint)id.Key, StorageIndex = questInfoObjective.StorageIndex, Description = questInfoObjective.Description }; Storage.LocalesQuestObjectives.Add(localesQuestObjectives, packet.TimeSpan); } Storage.QuestObjectives.Add(questInfoObjective, packet.TimeSpan); } quest.LogTitle = packet.ReadWoWString("LogTitle", logTitleLen); quest.LogDescription = packet.ReadWoWString("LogDescription", logDescriptionLen); quest.QuestDescription = packet.ReadWoWString("QuestDescription", questDescriptionLen); quest.AreaDescription = packet.ReadWoWString("AreaDescription", areaDescriptionLen); quest.QuestGiverTextWindow = packet.ReadWoWString("PortraitGiverText", questGiverTextWindowLen); quest.QuestGiverTargetName = packet.ReadWoWString("PortraitGiverName", questGiverTargetNameLen); quest.QuestTurnTextWindow = packet.ReadWoWString("PortraitTurnInText", questTurnTextWindowLen); quest.QuestTurnTargetName = packet.ReadWoWString("PortraitTurnInName", questTurnTargetNameLen); quest.QuestCompletionLog = packet.ReadWoWString("QuestCompletionLog", questCompletionLogLen); if (ClientLocale.PacketLocale != LocaleConstant.enUS) { LocalesQuest localesQuest = new LocalesQuest { ID = (uint)id.Key, LogTitle = quest.LogTitle, LogDescription = quest.LogDescription, QuestDescription = quest.QuestDescription, AreaDescription = quest.AreaDescription, PortraitGiverText = quest.QuestGiverTextWindow, PortraitGiverName = quest.QuestGiverTargetName, PortraitTurnInText = quest.QuestTurnTextWindow, PortraitTurnInName = quest.QuestTurnTargetName, QuestCompletionLog = quest.QuestCompletionLog }; Storage.LocalesQuests.Add(localesQuest, packet.TimeSpan); } Storage.QuestTemplates.Add(quest, packet.TimeSpan); }
internal static void EnsureItemQuestRelations() { foreach (QuestTemplate template1 in QuestMgr.Templates) { if (template1 != null && template1.CollectableItems != null) { foreach (Asda2ItemStackDescription collectableItem in template1.CollectableItems) { ItemTemplate template2 = GetTemplate(collectableItem.ItemId); if (template2 == null) { ContentMgr.OnInvalidDBData("QuestTemplate \"{0}\" refered to non-existing Item: {1}", (object)template1, (object)collectableItem); } else if (template2.CollectQuests == null) { template2.CollectQuests = new QuestTemplate[1] { template1 }; } else { int num = (int)ArrayUtil.AddOnlyOne(ref template2.CollectQuests, template1); } } foreach (Asda2ItemStackDescription collectableSourceItem in template1.CollectableSourceItems) { ItemTemplate template2 = GetTemplate(collectableSourceItem.ItemId); if (template2 == null) { ContentMgr.OnInvalidDBData("QuestTemplate \"{0}\" refered to non-existing Item: {1}", (object)template1, (object)collectableSourceItem); } else if (template2.CollectQuests == null) { template2.CollectQuests = new QuestTemplate[1] { template1 }; } else { int num = (int)ArrayUtil.AddOnlyOne(ref template2.CollectQuests, template1); } } } } foreach (ItemTemplate template1 in Templates) { if (template1 != null && template1.QuestId != 0U) { QuestTemplate template2 = QuestMgr.GetTemplate(template1.QuestId); if (template2 == null) { ContentMgr.OnInvalidDBData("Item {0} had invalid QuestId: {1}", (object)template1, (object)template1.QuestId); } else { template2.Starters.Add(template1); } } } }
public void HandleQuestTemplateUpdate(Dictionary<string, object> props) { questTemplates.Clear (); int numTemplates = (int)props ["numTemplates"]; for (int i = 0; i < numTemplates; i++) { QuestTemplate template = new QuestTemplate (); template.title = (string)props ["quest_" + i + "Title"]; template.questID = (int)props ["quest_" + i + "Id"]; questTemplates.Add (template); } ClientAPI.Write ("Number of quest templates added: " + questTemplates.Count); }
public int SetData(QusetMsgInfo theinfo, OnSelectedCallback selectfunc = null) { if (BgSprite == null) { BgSprite = transform.FindChild("Sprite bg").gameObject; TitleLabel = transform.FindChild("Label title").gameObject; GetLabel = transform.FindChild("Label gift").gameObject; RewardItem = transform.FindChild("SignItem").gameObject; GetButton = transform.FindChild("Button").gameObject; BtnBgScript = transform.FindChild("Button/Background").gameObject; BtnLabel = transform.FindChild("Button/Label").gameObject; ButtonUIEventListener = UIEventListener.Get(GetButton); ButtonUIEventListener.onClick += ClickBtnHandler; GotoUIEventListener = UIEventListener.Get(TitleLabel); GotoUIEventListener.onClick += GotoBtnHandler; } OnSelected = selectfunc; questInfo = theinfo; questTemp = SystemModelLocator.Instance.QuestTemplates.QuestTmpls[questInfo.Id]; var lb = TitleLabel.GetComponent<UILabel>(); lb.text = questTemp.Desc; //0未完成 1已完成未领取 2 已领取 if (questInfo.Status == 0) { BgSprite.SetActive(true); GetLabel.SetActive(true); RewardItem.SetActive(true); var item = RewardItem.GetComponent<SignItemControl>(); item.SetData(questTemp.RewardId, false, false, SelectHandler); RewardTemplate = item.RewardTemplate; GetButton.SetActive(false); return 0; } else if (questInfo.Status == 1) { BgSprite.SetActive(true); GetLabel.SetActive(false); RewardItem.SetActive(false); GetButton.SetActive(true); lb = BtnLabel.GetComponent<UILabel>(); lb.text = "领取"; lb.color = new Color(250,230,0); var btn = GetButton.GetComponent<UIButton>(); btn.enabled = true; BtnBgScript.SetActive(true); // var sp = BtnBgScript.GetComponent<UISprite>(); // sp.color = new Color(255, 255, 255); return 0; } else { BgSprite.SetActive(false); GetLabel.SetActive(false); RewardItem.SetActive(false); GetButton.SetActive(true); lb = BtnLabel.GetComponent<UILabel>(); lb.text = "已领取"; lb.color = new Color(100, 100, 100); var btn = GetButton.GetComponent<UIButton>(); btn.enabled = false; BtnBgScript.SetActive(false); return 1; } }