public void LoadRewardDisplaySpell(SQLFields fields) { uint spellId = fields.Read <uint>(1); uint playerConditionId = fields.Read <uint>(2); if (!Global.SpellMgr.HasSpellInfo(spellId, Difficulty.None)) { Log.outError(LogFilter.Sql, $"Table `quest_reward_display_spell` has non-existing Spell ({spellId}) set for quest {Id}. Skipped."); return; } if (playerConditionId != 0 && !CliDB.PlayerConditionStorage.ContainsKey(playerConditionId)) { Log.outError(LogFilter.Sql, $"Table `quest_reward_display_spell` has non-existing PlayerCondition ({spellId}) set for quest {Id}. Set to 0."); playerConditionId = 0; } RewardDisplaySpell.Add(new QuestRewardDisplaySpell(spellId, playerConditionId)); }
public QuestCache(DataStore ds, int id) { QuestID = ds.GetInt(); QuestType = ds.GetInt(); QuestPackageID = ds.GetInt(); ContentTuningID = ds.GetInt(); QuestSortID = ds.GetInt(); QuestInfoID = ds.GetInt(); SuggestedGroupNum = ds.GetInt(); RewardNextQuest = ds.GetInt(); RewardXPDifficulty = ds.GetInt(); RewardXPMultiplier = ds.GetFloat(); RewardMoney = ds.GetInt(); RewardMoneyDifficulty = ds.GetInt(); RewardMoneyMultiplier = ds.GetFloat(); RewardBonusMoney = ds.GetInt(); NumRewardDisplaySpells = ds.GetInt(); RewardSpell = ds.GetInt(); RewardHonorAddition = ds.GetInt(); RewardHonorMultiplier = ds.GetFloat(); RewardArtifactXPDifficulty = ds.GetInt(); RewardArtifactXPMultiplier = ds.GetFloat(); RewardArtifactCategoryID = ds.GetInt(); ProvidedItem = ds.GetInt(); Flags = new uint[3]; Flags[0] = ds.GetUInt(); Flags[1] = ds.GetUInt(); Flags[2] = ds.GetUInt(); RewardFixedItemID = new int[4]; RewardFixedItemQuantity = new int[4]; RewardFixedItemID[0] = ds.GetInt(); RewardFixedItemQuantity[0] = ds.GetInt(); RewardFixedItemID[1] = ds.GetInt(); RewardFixedItemQuantity[1] = ds.GetInt(); RewardFixedItemID[2] = ds.GetInt(); RewardFixedItemQuantity[2] = ds.GetInt(); RewardFixedItemID[3] = ds.GetInt(); RewardFixedItemQuantity[3] = ds.GetInt(); ItemDropID = new int[4]; ItemDropQuantity = new int[4]; ItemDropID[0] = ds.GetInt(); ItemDropQuantity[0] = ds.GetInt(); ItemDropID[1] = ds.GetInt(); ItemDropQuantity[1] = ds.GetInt(); ItemDropID[2] = ds.GetInt(); ItemDropQuantity[2] = ds.GetInt(); ItemDropID[3] = ds.GetInt(); ItemDropQuantity[3] = ds.GetInt(); RewardChoiceItemID = new int[6]; RewardChoiceItemQuantity = new int[6]; RewardChoiceItemDisplayID = new int[6]; RewardChoiceItemID[0] = ds.GetInt(); RewardChoiceItemQuantity[0] = ds.GetInt(); RewardChoiceItemDisplayID[0] = ds.GetInt(); RewardChoiceItemID[1] = ds.GetInt(); RewardChoiceItemQuantity[1] = ds.GetInt(); RewardChoiceItemDisplayID[1] = ds.GetInt(); RewardChoiceItemID[2] = ds.GetInt(); RewardChoiceItemQuantity[2] = ds.GetInt(); RewardChoiceItemDisplayID[2] = ds.GetInt(); RewardChoiceItemID[3] = ds.GetInt(); RewardChoiceItemQuantity[3] = ds.GetInt(); RewardChoiceItemDisplayID[3] = ds.GetInt(); RewardChoiceItemID[4] = ds.GetInt(); RewardChoiceItemQuantity[4] = ds.GetInt(); RewardChoiceItemDisplayID[4] = ds.GetInt(); RewardChoiceItemID[5] = ds.GetInt(); RewardChoiceItemQuantity[5] = ds.GetInt(); RewardChoiceItemDisplayID[5] = ds.GetInt(); POIContinent = ds.GetInt(); POIx = ds.GetFloat(); POIy = ds.GetFloat(); POIPriority = ds.GetInt(); RewardTitle = ds.GetInt(); //RewardTalents = ds.GetInt(); RewardTalents = -1; RewardArenaPoints = ds.GetInt(); RewardSkillLineID = ds.GetInt(); RewardNumSkillUps = ds.GetInt(); PortraitGiverDisplayID = ds.GetInt(); PortraitGiverMountDisplayID = ds.GetInt(); PortraitTurnInDisplayID = ds.GetInt(); PortraitModelSceneID = ds.GetInt(); RewardFactionID = new int[5]; RewardFactionValue = new int[5]; RewardFactionOverride = new int[5]; RewardFactionGainMaxRank = new int[5]; RewardFactionID[0] = ds.GetInt(); RewardFactionValue[0] = ds.GetInt(); RewardFactionOverride[0] = ds.GetInt(); RewardFactionGainMaxRank[0] = ds.GetInt(); RewardFactionID[1] = ds.GetInt(); RewardFactionValue[1] = ds.GetInt(); RewardFactionOverride[1] = ds.GetInt(); RewardFactionGainMaxRank[1] = ds.GetInt(); RewardFactionID[2] = ds.GetInt(); RewardFactionValue[2] = ds.GetInt(); RewardFactionOverride[2] = ds.GetInt(); RewardFactionGainMaxRank[2] = ds.GetInt(); RewardFactionID[3] = ds.GetInt(); RewardFactionValue[3] = ds.GetInt(); RewardFactionOverride[3] = ds.GetInt(); RewardFactionGainMaxRank[3] = ds.GetInt(); RewardFactionID[4] = ds.GetInt(); RewardFactionValue[4] = ds.GetInt(); RewardFactionOverride[4] = ds.GetInt(); RewardFactionGainMaxRank[4] = ds.GetInt(); RewardFactionFlags = ds.GetUInt(); RewardCurrencyID = new int[4]; RewardCurrencyQuantity = new int[4]; RewardCurrencyID[0] = ds.GetInt(); RewardCurrencyQuantity[0] = ds.GetInt(); RewardCurrencyID[1] = ds.GetInt(); RewardCurrencyQuantity[1] = ds.GetInt(); RewardCurrencyID[2] = ds.GetInt(); RewardCurrencyQuantity[2] = ds.GetInt(); RewardCurrencyID[3] = ds.GetInt(); RewardCurrencyQuantity[3] = ds.GetInt(); AcceptedSoundKitID = ds.GetInt(); CompleteSoundKitID = ds.GetInt(); AreaGroupID = ds.GetInt(); TimeAllowed = ds.GetInt(); NumObjectives = ds.GetInt(); RaceFlags = ds.GetUInt64(); QuestRewardID = ds.GetUInt(); ExpansionID = ds.GetInt(); ManagedWorldStateID = ds.GetInt(); QuestSessionBonus = ds.GetInt(); Int_44649 = ds.GetInt(); NumConditionalFullTexts = ds.GetInt(); NumConditionalCompletionBlurbs = ds.GetInt(); RewardDisplaySpells = new List <RewardDisplaySpell>(); for (var i = 0; i < NumRewardDisplaySpells; ++i) { RewardDisplaySpell rds = new RewardDisplaySpell(); rds.RewardDisplaySpellID = ds.GetInt(); rds.RewardDisplayPlayerConditionID = ds.GetInt(); RewardDisplaySpells.Add(rds); } // String sizes var titleLength = ds.GetIntByBits(9); var summaryLength = ds.GetIntByBits(12); var fullTextLength = ds.GetIntByBits(12); var trackerTextLength = ds.GetIntByBits(9); var portraitGiverTextLength = ds.GetIntByBits(10); var portraitGiverNameLength = ds.GetIntByBits(8); var portraitTurnInTextLength = ds.GetIntByBits(10); var portraitTurnInNameLength = ds.GetIntByBits(8); var completionBlurbLength = ds.GetIntByBits(11); Bool_44649 = ds.GetBool(); ds.Flush(); // Reset bit position and advance stream position to next byte // Populate quest objectives Objectives = new List <QuestObjective>(); for (var i = 0; i < NumObjectives; ++i) { QuestObjective obj = new QuestObjective(); obj.QuestID = QuestID; // Just for convenience obj.ID = ds.GetInt(); obj.Type = ds.GetByte(); obj.StorageIndex = (sbyte)ds.GetByte(); obj.AssetID = ds.GetInt(); obj.Amount = ds.GetInt(); obj.Flags = new uint[2]; obj.Flags[0] = ds.GetUInt(); obj.Flags[1] = ds.GetUInt(); obj.PercentAmount = ds.GetFloat(); // You may not want to use this visual effects data, since lists aren't very SQL-compatible and we use this information for literally nothing at the moment. obj.NumVisualEffects = ds.GetInt(); obj.VisualEffects = new List <int>(); for (var j = 0; j < obj.NumVisualEffects; ++j) { obj.VisualEffects.Add(ds.GetInt()); } byte DescriptionLength = ds.GetByte(); obj.Description = ds.GetString(DescriptionLength); Objectives.Add(obj); } // Strings Title = ds.GetString(titleLength); Summary = ds.GetString(summaryLength); FullText = ds.GetString(fullTextLength); TrackerText = ds.GetString(trackerTextLength); PortraitGiverText = ds.GetString(portraitGiverTextLength); PortraitGiverName = ds.GetString(portraitGiverNameLength); PortraitTurnInText = ds.GetString(portraitTurnInTextLength); PortraitTurnInName = ds.GetString(portraitTurnInNameLength); CompletionBlurb = ds.GetString(completionBlurbLength); // Conditional Text Blocks ConditionalFullTexts = new List <ConditionalText>(); for (var i = 0; i < NumConditionalFullTexts; ++i) { ConditionalText condText = new ConditionalText(); condText.PlayerConditionID = ds.GetInt(); condText.Int_44649 = ds.GetInt(); var textLength = ds.GetIntByBits(12); ds.Flush(); // Reset bit position and advance stream position to next byte condText.Text = ds.GetString(textLength); ConditionalFullTexts.Add(condText); } ConditionalCompletionBlurbs = new List <ConditionalText>(); for (var i = 0; i < NumConditionalCompletionBlurbs; ++i) { ConditionalText condText = new ConditionalText(); condText.PlayerConditionID = ds.GetInt(); condText.Int_44649 = ds.GetInt(); var textLength = ds.GetIntByBits(12); ds.Flush(); // Reset bit position and advance stream position to next byte condText.Text = ds.GetString(textLength); ConditionalCompletionBlurbs.Add(condText); } }