From dcbf03cc5a20edb77142eb6df12e3c70615c0c2e Mon Sep 17 00:00:00 2001 From: luis Date: Thu, 28 May 2026 03:01:53 -0300 Subject: [PATCH] fix --- .../world/master/2026_05_28_00_world.sql | 13 +++++++++ src/server/game/Housing/HousingMgr.cpp | 1 + src/server/game/Spells/Spell.h | 1 + src/server/game/Spells/SpellEffects.cpp | 27 ++++++++++++++++++- 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/master/2026_05_28_00_world.sql diff --git a/sql/updates/world/master/2026_05_28_00_world.sql b/sql/updates/world/master/2026_05_28_00_world.sql new file mode 100644 index 000000000..4a70147d6 --- /dev/null +++ b/sql/updates/world/master/2026_05_28_00_world.sql @@ -0,0 +1,13 @@ +-- +-- Bind the go_housing_door GameObjectScript to housing front-door GO templates +-- so OnGossipHello fires on click and performs the interior teleport. +-- Dynamic templates created by HousingMgr::EnsureDoorGameObjectTemplates already +-- set ScriptId programmatically; these are the known static entries from DB. +-- +UPDATE `gameobject_template` SET `ScriptName` = 'go_housing_door' WHERE `entry` IN ( + 575017, -- Interior Front Door + 586576, -- Front Door (Founder's Point) + 587318, -- Razorwind Shores Front Door + 602702, -- Front Door + 602705 -- Front Door +); diff --git a/src/server/game/Housing/HousingMgr.cpp b/src/server/game/Housing/HousingMgr.cpp index d2be30c3b..f02bbdbf2 100644 --- a/src/server/game/Housing/HousingMgr.cpp +++ b/src/server/game/Housing/HousingMgr.cpp @@ -1456,6 +1456,7 @@ void HousingMgr::EnsureDoorGameObjectTemplates() goTemplate.goober.autoClose = 3000; // 3 seconds auto-close goTemplate.goober.startOpen = 1; // start in open state goTemplate.goober.spell = 1271876; // Housing Door Open spell used by retail client + goTemplate.ScriptId = sObjectMgr->GetScriptId("go_housing_door"); goTemplate.InitializeQueryData(); ++created; diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 48844c818..e6e34b531 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -492,6 +492,7 @@ class TC_GAME_API Spell void EffectRemovePhase(); void EffectIncreaseSkill(); void EffectForceEquipItem(); + void EffectCraftItem(); typedef std::unordered_set UsedSpellMods; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 9ae73c5d0..52f770671 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -94,6 +94,9 @@ #include "World.h" #include "WorldPacket.h" #include "WorldSession.h" +//WowCommunity +#include "Crafting.h" +//WowCommunity NonDefaultConstructible SpellEffectHandlers[TOTAL_SPELL_EFFECTS] = { @@ -385,7 +388,7 @@ NonDefaultConstructible SpellEffectHandlers[TOTAL_SPELL_EF &Spell::EffectNULL, //285 SPELL_EFFECT_MODIFY_KEYSTONE_2 &Spell::EffectGrantBattlePetExperience, //286 SPELL_EFFECT_GRANT_BATTLEPET_EXPERIENCE &Spell::EffectNULL, //287 SPELL_EFFECT_SET_GARRISON_FOLLOWER_LEVEL - &Spell::EffectNULL, //288 SPELL_EFFECT_CRAFT_ITEM + &Spell::EffectCraftItem, //288 SPELL_EFFECT_CRAFT_ITEM &Spell::EffectModifyAuraStacks, //289 SPELL_EFFECT_MODIFY_AURA_STACKS &Spell::EffectModifyCooldown, //290 SPELL_EFFECT_MODIFY_COOLDOWN &Spell::EffectModifyCooldowns, //291 SPELL_EFFECT_MODIFY_COOLDOWNS @@ -7362,3 +7365,25 @@ void Spell::EffectForceEquipItem() player->AutoUnequipOffhandIfNeed(); } } + +void Spell::EffectCraftItem() +{ + if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) + return; + + Player* playerCaster = m_caster->ToPlayer(); + if (!playerCaster) + return; + + if (m_targets.ModifiedCraftingReagents.empty()) + { + SendCastResult(SpellCastResult::SPELL_FAILED_NEED_MORE_ITEMS); + return; + } + + Crafting craftingInstance = Crafting(playerCaster, this); + SpellCastResult result = craftingInstance.DoCraft(effectInfo->MiscValue); + + if (result != SpellCastResult::SPELL_CAST_OK) + SendCastResult(result); +}