summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp7
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp8
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h8
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp27
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp2
-rw-r--r--src/server/game/Spells/SpellMgr.cpp2
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp4
-rw-r--r--src/server/scripts/World/achievement_scripts.cpp18
-rw-r--r--src/server/scripts/World/go_scripts.cpp20
10 files changed, 73 insertions, 25 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 2d18bd7503..24bfbf5d7b 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -3289,6 +3289,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
}
break;
}
+ case SMART_ACTION_SET_ANIM_TIER:
+ {
+ for (WorldObject* target : targets)
+ if (IsUnit(target))
+ target->ToUnit()->SetAnimTier(AnimTier(e.action.animTier.animTier));
+ break;
+ }
default:
LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry {} SourceType {}, Event {}, Unhandled Action type {}", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
break;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index c4dab89b91..aef9617812 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -884,6 +884,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_MOVEMENT_RESUME: return sizeof(SmartAction::move);
case SMART_ACTION_WORLD_SCRIPT: return sizeof(SmartAction::worldStateScript);
case SMART_ACTION_DISABLE_REWARD: return sizeof(SmartAction::reward);
+ case SMART_ACTION_SET_ANIM_TIER: return sizeof(SmartAction::animTier);
case SMART_ACTION_DISMOUNT: return NO_PARAMS;
default:
LOG_WARN("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} is using an action with no unused params specified in SmartAIMgr::CheckUnusedActionParams(), please report this.",
@@ -1897,6 +1898,13 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
}
break;
}
+ case SMART_ACTION_SET_ANIM_TIER:
+ if (e.action.animTier.animTier >= uint32(AnimTier::Max))
+ {
+ LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses invalid animtier %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.animTier.animTier);
+ return false;
+ }
+ break;
case SMART_ACTION_AUTO_ATTACK:
return IsSAIBoolValid(e, e.action.autoAttack.attack);
case SMART_ACTION_ALLOW_COMBAT_MOVEMENT:
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 8dd177dfa6..bb9af87ac4 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -721,8 +721,9 @@ enum SMART_ACTION
SMART_ACTION_MOVEMENT_RESUME = 236, // timerOverride
SMART_ACTION_WORLD_SCRIPT = 237, // eventId, param
SMART_ACTION_DISABLE_REWARD = 238, // reputation 0/1, loot 0/1
+ SMART_ACTION_SET_ANIM_TIER = 239, // animtier
- SMART_ACTION_AC_END = 239, // placeholder
+ SMART_ACTION_AC_END = 240, // placeholder
};
enum class SmartActionSummonCreatureFlags
@@ -1502,6 +1503,11 @@ struct SmartAction
SAIBool reputation;
SAIBool loot;
} reward;
+
+ struct
+ {
+ uint32 animTier;
+ } animTier;
};
};
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 70b8a90670..326caf426f 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -920,6 +920,33 @@ void Battleground::EndBattleground(PvPTeamId winnerTeamId)
if (!player->GetRandomWinner())
player->SetRandomWinner(true);
+
+ // Achievement 908 / 909 "Call to Arms!"
+ switch (GetBgTypeID(true))
+ {
+ case BATTLEGROUND_AB:
+ // Call to Arms: Arathi Basin
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11335);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11339);
+ break;
+ case BATTLEGROUND_AV:
+ // Call to Arms: Alterac Valley
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11336);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11340);
+ break;
+ case BATTLEGROUND_EY:
+ // Call to Arms: Eye of the Storm
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11337);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11341);
+ break;
+ case BATTLEGROUND_WS:
+ // Call to Arms: Warsong Gulch
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11338);
+ player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST, 11342);
+ break;
+ default:
+ break;
+ }
}
player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_BG, player->GetMapId());
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index c9061158cd..a02c3b604a 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -432,7 +432,7 @@ bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, fl
if (new_rank <= REP_HOSTILE)
SetAtWar(&itr->second, true);
- if (old_rank == REP_HOSTILE && new_rank >= REP_UNFRIENDLY && factionEntry->CanBeSetAtWar())
+ if (old_rank <= REP_HOSTILE && new_rank >= REP_UNFRIENDLY && factionEntry->CanBeSetAtWar())
SetAtWar(&itr->second, false);
if (new_rank > old_rank)
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 7ffb4065f8..f0d54d7e0d 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -6351,7 +6351,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster)
case 27808:
if (caster)
{
- caster->CastCustomSpell(29879, SPELLVALUE_BASE_POINT0, int32(target->CountPctFromMaxHealth(21)), target, true, nullptr, this);
+ caster->CastSpell(target, 29879, true, nullptr, this);
if (GetTickNumber() == 1)
caster->CastSpell(target, 27808, true);
}
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index ba297d4588..4940d2350e 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -193,7 +193,7 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto,
{
// Storm, Earth and Fire - Earthgrab
if (spellproto->SpellFamilyFlags[2] & 0x4000)
- return DIMINISHING_NONE;
+ return DIMINISHING_CONTROLLED_ROOT;
break;
}
case SPELLFAMILY_DEATHKNIGHT:
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 38f669693f..8a1a963570 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -2028,7 +2028,8 @@ class spell_gen_animal_blood : public AuraScript
return;
if (Unit* owner = GetUnitOwner())
- owner->CastSpell(owner, SPELL_SPAWN_BLOOD_POOL, true);
+ if (owner->IsInWater())
+ owner->CastSpell(owner, SPELL_SPAWN_BLOOD_POOL, true);
}
void Register() override
@@ -5800,6 +5801,7 @@ void AddSC_generic_spell_scripts()
RegisterSpellScriptWithArgs(spell_gen_count_pct_from_max_hp, "spell_gen_default_count_pct_from_max_hp");
RegisterSpellScriptWithArgs(spell_gen_count_pct_from_max_hp, "spell_gen_10pct_count_pct_from_max_hp", 10);
RegisterSpellScriptWithArgs(spell_gen_count_pct_from_max_hp, "spell_gen_50pct_count_pct_from_max_hp", 50);
+ RegisterSpellScriptWithArgs(spell_gen_count_pct_from_max_hp, "spell_gen_26pct_count_pct_from_max_hp", 26);
RegisterSpellScript(spell_gen_despawn_self);
RegisterSpellScript(spell_gen_bandage);
RegisterSpellScript(spell_gen_paralytic_poison);
diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp
index eebd7cac89..2d7eed6cdb 100644
--- a/src/server/scripts/World/achievement_scripts.cpp
+++ b/src/server/scripts/World/achievement_scripts.cpp
@@ -265,6 +265,23 @@ class achievement_flirt_with_disaster_perf_check : public AchievementCriteriaScr
}
};
+enum FaLaLaLaOgrila
+{
+ SPELL_FRESH_HOLLY = 44824,
+ SPELL_PRESERVED_HOLLY = 62061,
+};
+
+class achievement_fa_la_la_la_ogrila : public AchievementCriteriaScript
+{
+public:
+ achievement_fa_la_la_la_ogrila() : AchievementCriteriaScript("achievement_fa_la_la_la_ogrila") {}
+
+ bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override
+ {
+ return player->HasAura(SPELL_FRESH_HOLLY) || player->HasAura(SPELL_PRESERVED_HOLLY);
+ }
+};
+
void AddSC_achievement_scripts()
{
new achievement_resilient_victory();
@@ -285,4 +302,5 @@ void AddSC_achievement_scripts()
new achievement_not_even_a_scratch();
new achievement_killed_exp_or_honor_target();
new achievement_flirt_with_disaster_perf_check();
+ new achievement_fa_la_la_la_ogrila();
}
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp
index fa258e37bd..9242761b43 100644
--- a/src/server/scripts/World/go_scripts.cpp
+++ b/src/server/scripts/World/go_scripts.cpp
@@ -41,25 +41,6 @@ public:
}
};
-class go_mistwhisper_treasure : public GameObjectScript
-{
-public:
- go_mistwhisper_treasure() : GameObjectScript("go_mistwhisper_treasure") { }
-
- bool OnGossipHello(Player* pPlayer, GameObject* go) override
- {
- if (!go->FindNearestCreature(28105, 30.0f)) // Tartek
- {
- if (Creature* cr = go->SummonCreature(28105, 6708.7f, 5115.45f, -18.3f, 0.7f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
- {
- cr->Yell("My treasure! You no steal from Tartek, dumb big-tongue traitor thing. Tartek and nasty dragon going to kill you! You so dumb.", LANG_UNIVERSAL);
- cr->AI()->AttackStart(pPlayer);
- }
- }
- return false;
- }
-};
-
class go_witherbark_totem_bundle : public GameObjectScript
{
public:
@@ -1896,7 +1877,6 @@ public:
void AddSC_go_scripts()
{
new go_seer_of_zebhalak();
- new go_mistwhisper_treasure();
new go_witherbark_totem_bundle();
new go_arena_ready_marker();
new go_ethereum_prison();