garrisons work

This commit is contained in:
luis
2026-07-16 21:17:28 -03:00
parent 2a96bfda67
commit f55eccdb63
3 changed files with 68 additions and 3 deletions
@@ -14181,6 +14181,9 @@ void Player::OnGossipSelect(WorldObject* source, int32 gossipOptionId, uint32 me
case GossipOptionNpc::BarbersChoice: case GossipOptionNpc::BarbersChoice:
handled = false; handled = false;
break; break;
case GossipOptionNpc::GarrisonMissionNpc:
handled = false;
break;
default: default:
handled = false; handled = false;
break; break;
+2 -2
View File
@@ -462,7 +462,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_GARRISON_ADD_FOLLOWER_HEALTH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_ADD_FOLLOWER_HEALTH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GARRISON_CANCEL_CONSTRUCTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGarrisonCancelConstruction); DEFINE_HANDLER(CMSG_GARRISON_CANCEL_CONSTRUCTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGarrisonCancelConstruction);
DEFINE_HANDLER(CMSG_GARRISON_CHECK_UPGRADEABLE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_CHECK_UPGRADEABLE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGarrisonCheckUpgradeable);
DEFINE_HANDLER(CMSG_GARRISON_COMPLETE_MISSION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_COMPLETE_MISSION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GARRISON_GENERATE_RECRUITS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_GENERATE_RECRUITS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -484,7 +484,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_GARRISON_SET_FOLLOWER_INACTIVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_SET_FOLLOWER_INACTIVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GARRISON_SOCKET_TALENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGarrisonSocketTalent); DEFINE_HANDLER(CMSG_GARRISON_SOCKET_TALENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGarrisonSocketTalent);
DEFINE_HANDLER(CMSG_GARRISON_START_MISSION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_START_MISSION, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGarrisonStartMission);
DEFINE_HANDLER(CMSG_GARRISON_SWAP_BUILDINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_SWAP_BUILDINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GENERATE_RANDOM_CHARACTER_NAME, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomizeCharNameOpcode); DEFINE_HANDLER(CMSG_GENERATE_RANDOM_CHARACTER_NAME, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomizeCharNameOpcode);
DEFINE_HANDLER(CMSG_GET_ACCOUNT_CHARACTER_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GET_ACCOUNT_CHARACTER_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -38,7 +38,19 @@ enum BarosAlexstonMisc
// Spells // Spells
SPELL_QUEST_34586_KILLCREDIT = 161033, SPELL_QUEST_34586_KILLCREDIT = 161033,
SPELL_CREATE_GARRISON_SHADOWMOON_VALLEY_ALLIANCE = 156020, SPELL_CREATE_GARRISON_SHADOWMOON_VALLEY_ALLIANCE = 156020,
SPELL_DESPAWN_ALL_SUMMONS_GARRISON_INTRO_ONLY = 160938 SPELL_DESPAWN_ALL_SUMMONS_GARRISON_INTRO_ONLY = 160938,
};
enum PingCrystalMisc
{
KILL_CREDIT_PING_CRYSTAL = 81506,
SPELL_PING_CRYSTAL_DEACTIVATE = 163732
};
enum Shadowmoonvalleynpcs
{
NPC_FOR_THE_ALLIANCE_PORTAL_KILL_CREDIT = 79433,
}; };
Position const GarrisonLevelOneCreationPlayerPosition = { 1904.58f, 312.906f, 88.9542f, 4.303615f }; Position const GarrisonLevelOneCreationPlayerPosition = { 1904.58f, 312.906f, 88.9542f, 4.303615f };
@@ -70,7 +82,57 @@ struct npc_baros_alexston : public ScriptedAI
} }
}; };
// 163732 - Ping Crystal Deactivate (Internal Only)
class spell_ping_crystal_deactivate : public SpellScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return true;
}
void HandleCast()
{
Unit* caster = GetCaster();
if (!caster || !caster->IsPlayer())
return;
Player* player = caster->ToPlayer();
// Give kill credit
player->KilledMonsterCredit(KILL_CREDIT_PING_CRYSTAL);
}
void Register() override
{
OnCast += SpellCastFn(spell_ping_crystal_deactivate::HandleCast);
}
};
// Revendication 169455
class spell_shadowmoon_claiming : public SpellScript
{
void HandleDummy(SpellEffIndex /*effIndex*/)
{
if (!GetCaster())
return;
Player* player = GetCaster()->ToPlayer();
if (!player)
return;
player->KilledMonsterCredit(NPC_FOR_THE_ALLIANCE_PORTAL_KILL_CREDIT);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_shadowmoon_claiming::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
void AddSC_draenor_shadowmoon_valley() void AddSC_draenor_shadowmoon_valley()
{ {
RegisterCreatureAI(npc_baros_alexston); RegisterCreatureAI(npc_baros_alexston);
RegisterSpellScript(spell_ping_crystal_deactivate);
RegisterSpellScript(spell_shadowmoon_claiming);
} }