diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 8 | ||||
| -rw-r--r-- | src/server/game/Battlegrounds/Battleground.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Reputation/ReputationMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 4 | ||||
| -rw-r--r-- | src/server/scripts/World/achievement_scripts.cpp | 18 | ||||
| -rw-r--r-- | src/server/scripts/World/go_scripts.cpp | 20 |
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(); |
