aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Skills/SkillDiscovery.cpp13
-rw-r--r--src/server/game/Skills/SkillDiscovery.h1
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp19
3 files changed, 29 insertions, 4 deletions
diff --git a/src/server/game/Skills/SkillDiscovery.cpp b/src/server/game/Skills/SkillDiscovery.cpp
index f8fd8f6bfbf..cbaa4ff5ffd 100644
--- a/src/server/game/Skills/SkillDiscovery.cpp
+++ b/src/server/game/Skills/SkillDiscovery.cpp
@@ -206,6 +206,19 @@ bool HasDiscoveredAllSpells(uint32 spellId, Player* player)
return true;
}
+bool HasDiscoveredAnySpell(uint32 spellId, Player* player)
+{
+ SkillDiscoveryMap::const_iterator tab = SkillDiscoveryStore.find(int32(spellId));
+ if (tab == SkillDiscoveryStore.end())
+ return false;
+
+ for (SkillDiscoveryList::const_iterator item_iter = tab->second.begin(); item_iter != tab->second.end(); ++item_iter)
+ if (player->HasSpell(item_iter->spellId))
+ return true;
+
+ return false;
+}
+
uint32 GetSkillDiscoverySpell(uint32 skillId, uint32 spellId, Player* player)
{
uint32 skillvalue = skillId ? player->GetSkillValue(skillId) : uint32(0);
diff --git a/src/server/game/Skills/SkillDiscovery.h b/src/server/game/Skills/SkillDiscovery.h
index fa849a5957a..03dcfdbc404 100644
--- a/src/server/game/Skills/SkillDiscovery.h
+++ b/src/server/game/Skills/SkillDiscovery.h
@@ -26,6 +26,7 @@ class Player;
TC_GAME_API void LoadSkillDiscoveryTable();
TC_GAME_API uint32 GetSkillDiscoverySpell(uint32 skillId, uint32 spellId, Player* player);
TC_GAME_API bool HasDiscoveredAllSpells(uint32 spellId, Player* player);
+TC_GAME_API bool HasDiscoveredAnySpell(uint32 spellId, Player* player);
TC_GAME_API uint32 GetExplicitDiscoverySpell(uint32 spellId, Player* player);
#endif
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index e03a43331bb..b7a92c9b3dd 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -2820,6 +2820,11 @@ class spell_gen_pet_summoned : public SpellScript
}
};
+enum ProfessionResearch
+{
+ SPELL_NORTHREND_INSCRIPTION_RESEARCH = 61177
+};
+
class spell_gen_profession_research : public SpellScript
{
PrepareSpellScript(spell_gen_profession_research);
@@ -2831,7 +2836,9 @@ class spell_gen_profession_research : public SpellScript
SpellCastResult CheckRequirement()
{
- if (HasDiscoveredAllSpells(GetSpellInfo()->Id, GetCaster()->ToPlayer()))
+ Player* player = GetCaster()->ToPlayer();
+
+ if (HasDiscoveredAllSpells(GetSpellInfo()->Id, player))
{
SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_NOTHING_TO_DISCOVER);
return SPELL_FAILED_CUSTOM_ERROR;
@@ -2845,11 +2852,15 @@ class spell_gen_profession_research : public SpellScript
Player* caster = GetCaster()->ToPlayer();
uint32 spellId = GetSpellInfo()->Id;
- // learn random explicit discovery recipe (if any)
+ // Learn random explicit discovery recipe (if any)
+ // Players will now learn 3 recipes the very first time they perform Northrend Inscription Research (3.3.0 patch notes)
+ if (spellId == SPELL_NORTHREND_INSCRIPTION_RESEARCH && !HasDiscoveredAnySpell(spellId, caster))
+ for (int i = 0; i < 2; ++i)
+ if (uint32 discoveredSpellId = GetExplicitDiscoverySpell(spellId, caster))
+ caster->LearnSpell(discoveredSpellId, false);
+
if (uint32 discoveredSpellId = GetExplicitDiscoverySpell(spellId, caster))
caster->LearnSpell(discoveredSpellId, false);
-
- caster->UpdateCraftSkill(spellId);
}
void Register() override