From d681f73f54652a7f0b2c1acbe68f78f93bcda811 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Mon, 7 Sep 2026 10:34:22 +0200 Subject: [PATCH] Fief WoD : aucun moyen de rentrer dans un fief deja fonde Les deux points d entree ne se declenchent que si le joueur n a PAS encore de fief : l objet Master Surveyor (233664, Horde) et Baros Alexston (79243, Alliance). Une fois le fief fonde, plus rien n y ramenait. Les trois joueurs du royaume qui en possedent un ne sont jamais alles dessus : aucun personnage n a jamais ete sur les cartes 1152, 1153, 1158, 1159, 1330 ni 1331. Gazlowe (78466) et Baros proposent desormais "Emmenez-moi a mon fief" aux proprietaires. L option est masquee quand on est deja sur une carte de fief, Gazlowe y etant aussi spawne. Le declencheur de proximite cote Horde n est pas touche : il aurait teleporte tout passant. TeleportOwnerAndPlayMovie renomme TeleportOwnerToGarrison, l ancien nom mentait depuis le retrait du film. --- .../2026_09_07_00_world_retour_au_fief.sql | 13 ++++++ .../game/Garrison/WodGarrison/WodGarrison.cpp | 4 +- .../game/Garrison/WodGarrison/WodGarrison.h | 2 +- .../Zones/zone_draenor_frostfire_ridge.cpp | 42 ++++++++++++++++++- .../Zones/zone_draenor_shadowmoon_dreanor.cpp | 13 +++++- 5 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 sql/updates/world/2026_09_07_00_world_retour_au_fief.sql diff --git a/sql/updates/world/2026_09_07_00_world_retour_au_fief.sql b/sql/updates/world/2026_09_07_00_world_retour_au_fief.sql new file mode 100644 index 0000000..112be10 --- /dev/null +++ b/sql/updates/world/2026_09_07_00_world_retour_au_fief.sql @@ -0,0 +1,13 @@ +-- Retour dans un fief deja fonde. +-- +-- Les deux points d'entree du fief WoD ne se declenchent que si le joueur n'a +-- PAS encore de fief : l'objet Master Surveyor (233664, Horde) et Baros +-- Alexston (79243, Alliance). Une fois le fief fonde, plus rien ne permettait +-- d'y entrer. Les trois joueurs du royaume qui possedent un fief ne sont +-- jamais alles dessus (aucun personnage n'a jamais ete sur les cartes 1152, +-- 1153, 1158, 1159, 1330 ni 1331). +-- +-- Gazlowe (78466) recoit donc un script qui propose "Emmenez-moi a mon fief" +-- aux proprietaires. Il est aussi spawne DANS les fiefs (cartes 1152, 1153, +-- 1330) : le script n'y propose rien, il teste Map::IsGarrison(). +UPDATE `creature_template` SET `ScriptName` = 'npc_gazlowe_garrison' WHERE `entry` = 78466; diff --git a/src/server/game/Garrison/WodGarrison/WodGarrison.cpp b/src/server/game/Garrison/WodGarrison/WodGarrison.cpp index fc347a2..a6a31e4 100644 --- a/src/server/game/Garrison/WodGarrison/WodGarrison.cpp +++ b/src/server/game/Garrison/WodGarrison/WodGarrison.cpp @@ -169,12 +169,12 @@ bool WodGarrison::Upgrade() _owner->SendGarrisonRemoteInfo(); PhasingHandler::OnConditionChange(_owner); - TeleportOwnerAndPlayMovie(); + TeleportOwnerToGarrison(); return true; } -void WodGarrison::TeleportOwnerAndPlayMovie() const +void WodGarrison::TeleportOwnerToGarrison() const { Position WodGarrisonEntrancePositions[2][3] = { diff --git a/src/server/game/Garrison/WodGarrison/WodGarrison.h b/src/server/game/Garrison/WodGarrison/WodGarrison.h index 10f0d38..c2fab6c 100644 --- a/src/server/game/Garrison/WodGarrison/WodGarrison.h +++ b/src/server/game/Garrison/WodGarrison/WodGarrison.h @@ -84,7 +84,7 @@ public: bool Create(uint32 garrSiteId) override; bool CanUpgrade(bool checkCost = true); bool Upgrade(); - void TeleportOwnerAndPlayMovie() const; + void TeleportOwnerToGarrison() const; void Delete() override; void Enter() override; diff --git a/src/server/scripts/Draenor/Zones/zone_draenor_frostfire_ridge.cpp b/src/server/scripts/Draenor/Zones/zone_draenor_frostfire_ridge.cpp index 22a59df..43b666c 100644 --- a/src/server/scripts/Draenor/Zones/zone_draenor_frostfire_ridge.cpp +++ b/src/server/scripts/Draenor/Zones/zone_draenor_frostfire_ridge.cpp @@ -252,7 +252,7 @@ public: if (Garrison* garr = player->GetGarrison(GARRISON_TYPE_GARRISON)) { - garr->ToWodGarrison()->TeleportOwnerAndPlayMovie(); + garr->ToWodGarrison()->TeleportOwnerToGarrison(); player->KilledMonsterCredit(NPC_ESTABLISH_YOUR_GARRISON_KILL_CREDIT); } } @@ -366,6 +366,45 @@ class spell_groog_rampage : public SpellScriptLoader } }; +/// 78466 - Gazlowe : retour dans un fief deja fonde. +/// Les deux points d'entree existants (l'objet Master Surveyor cote Horde, +/// Baros Alexston cote Alliance) ne se declenchent que si le joueur n'a PAS +/// encore de fief. Une fois celui-ci fonde, plus rien ne permettait d'y entrer. +class npc_gazlowe_garrison : public CreatureScript +{ +public: + npc_gazlowe_garrison() : CreatureScript("npc_gazlowe_garrison") { } + + enum + { + GOSSIP_ACTION_ENTER_GARRISON = 1000 + }; + + bool OnGossipHello(Player* player, Creature* creature) override + { + if (creature->IsQuestGiver()) + player->PrepareQuestMenu(creature->GetGUID()); + + /// Gazlowe est aussi spawne a l'interieur des fiefs : on n'y propose rien. + if (player->GetGarrison(GARRISON_TYPE_GARRISON) && !player->GetMap()->IsGarrison()) + AddGossipItemFor(player, 0, "Emmenez-moi à mon fief.", 0, GOSSIP_ACTION_ENTER_GARRISON); + + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); + return true; + } + + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override + { + CloseGossipMenuFor(player); + + if (action == GOSSIP_ACTION_ENTER_GARRISON) + if (Garrison* garrison = player->GetGarrison(GARRISON_TYPE_GARRISON)) + garrison->ToWodGarrison()->TeleportOwnerToGarrison(); + + return true; + } +}; + void AddSC_frostfire_ridge() { /* BEGIN */ @@ -376,6 +415,7 @@ void AddSC_frostfire_ridge() new npc_durotan_frostridge_begin(); new go_frostridge_master_surveyor(); + new npc_gazlowe_garrison(); new spell_frostridge_claiming(); diff --git a/src/server/scripts/Draenor/Zones/zone_draenor_shadowmoon_dreanor.cpp b/src/server/scripts/Draenor/Zones/zone_draenor_shadowmoon_dreanor.cpp index 3ccd5f0..380c5f3 100644 --- a/src/server/scripts/Draenor/Zones/zone_draenor_shadowmoon_dreanor.cpp +++ b/src/server/scripts/Draenor/Zones/zone_draenor_shadowmoon_dreanor.cpp @@ -180,20 +180,29 @@ public: if (player->GetQuestStatus(QUEST_ESTABLISH_YOUR_GARRISON) == QUEST_STATUS_INCOMPLETE) AddGossipItemFor(player, 60002, 1, 0, 0); + /// Retour dans un fief deja fonde : sans cela plus rien n'y ramene. + if (player->GetGarrison(GARRISON_TYPE_GARRISON) && !player->GetMap()->IsGarrison()) + AddGossipItemFor(player, 0, "Emmenez-moi à mon fief.", 0, 1000); + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) override + bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override { Garrison* garrison = player->GetGarrison(GARRISON_TYPE_GARRISON); if (!garrison) { CloseGossipMenuFor(player); player->CreateGarrison(player->IsInAlliance() ? GARRISON_SITE_WOD_ALLIANCE : GARRISON_SITE_WOD_HORDE); - player->GetGarrison(GARRISON_TYPE_GARRISON)->ToWodGarrison()->TeleportOwnerAndPlayMovie(); + player->GetGarrison(GARRISON_TYPE_GARRISON)->ToWodGarrison()->TeleportOwnerToGarrison(); player->KilledMonsterCredit(NPC_ESTABLISH_YOUR_GARRISON_KILL_CREDIT); } + else if (action == 1000) + { + CloseGossipMenuFor(player); + garrison->ToWodGarrison()->TeleportOwnerToGarrison(); + } return true; }