Scripts/Spells: Rewrite warlock Soulwell using spells that summon different object ids (that create different item ids) instead of scripting soulwell object to do the selection

(cherry picked from commit b77cc28acb17ba02f1cb43bbedc1ea0d294d175b)
This commit is contained in:
Shauren
2026-06-30 19:16:20 +02:00
parent bbba6c1f99
commit f85a3f3c16
3 changed files with 41 additions and 51 deletions
@@ -0,0 +1,17 @@
DELETE FROM `serverside_spell` WHERE `Id` IN (34147,34148,58892,58899);
INSERT INTO `serverside_spell` (`Id`, `Attributes`, `AttributesEx`, `CastingTimeIndex`, `ProcChance`, `BaseLevel`, `SpellLevel`, `DurationIndex`, `RangeIndex`, `SpellName`, `SchoolMask`) VALUES
(34147, 256, 268435456, 16, 101, 60, 60, 25, 7, 'Create Soulwell R1 (Improved Healthstone R1)', 1),
(34148, 256, 268435456, 16, 101, 60, 60, 25, 7, 'Create Soulwell R1 (Improved Healthstone R2)', 1),
(58892, 256, 268435456, 16, 101, 60, 60, 25, 7, 'Create Soulwell R2 (Improved Healthstone R1)', 1),
(58899, 256, 268435456, 16, 101, 60, 60, 25, 7, 'Create Soulwell R2 (Improved Healthstone R2)', 1);
DELETE FROM `serverside_spell_effect` WHERE `SpellID` IN (34147,34148,58892,58899);
INSERT INTO `serverside_spell_effect` (`SpellID`, `EffectIndex`, `Effect`, `ImplicitTarget1`, `EffectRadiusIndex1`, `EffectMiscValue1`) VALUES
(34147, 0, 50, 47, 8, 183510),
(34148, 0, 50, 47, 8, 183511),
(58892, 0, 50, 47, 8, 193170),
(58899, 0, 50, 47, 8, 193171);
UPDATE `serverside_spell_effect` SET `Effect`=77 WHERE `SpellID` IN (34145,58888) AND `EffectIndex`=0;
UPDATE `gameobject_template` SET `ScriptName`='' WHERE `entry` IN (181621,183510,183511,193169,193170,193171);
@@ -2625,6 +2625,7 @@ void GameObject::Use(Unit* user, bool ignoreCastInProgress /*= false*/)
CastSpellExtraArgs spellArgs;
if (ignoreCastInProgress)
spellArgs.TriggerFlags |= TRIGGERED_IGNORE_CAST_IN_PROGRESS;
bool addUse = false;
if (Player* playerUser = user->ToPlayer())
{
@@ -3181,7 +3182,7 @@ void GameObject::Use(Unit* user, bool ignoreCastInProgress /*= false*/)
user->RemoveAurasByType(SPELL_AURA_MOUNTED);
spellId = info->spellCaster.spell;
AddUse();
addUse = true;
break;
}
case GAMEOBJECT_TYPE_MEETINGSTONE: //23
@@ -3558,28 +3559,31 @@ void GameObject::Use(Unit* user, bool ignoreCastInProgress /*= false*/)
if (Player* player = user->ToPlayer())
sOutdoorPvPMgr->HandleCustomSpell(player, spellId, this);
SpellCastResult castResult;
if (spellCaster)
spellCaster->CastSpell(user, spellId, spellArgs);
castResult = spellCaster->CastSpell(user, spellId, spellArgs);
else
{
SpellCastResult castResult = CastSpell(user, spellId, spellArgs);
if (castResult == SPELL_FAILED_SUCCESS)
{
switch (GetGoType())
{
case GAMEOBJECT_TYPE_NEW_FLAG:
HandleCustomTypeCommand(GameObjectType::SetNewFlagState(FlagState::Taken, user->ToPlayer()));
break;
case GAMEOBJECT_TYPE_FLAGSTAND:
SetFlag(GO_FLAG_IN_USE);
if (ZoneScript* zonescript = GetZoneScript())
zonescript->OnFlagTaken(this, Object::ToPlayer(user));
castResult = CastSpell(user, spellId, spellArgs);
Delete();
break;
default:
break;
}
if (castResult == SPELL_FAILED_SUCCESS)
{
if (addUse)
AddUse();
switch (GetGoType())
{
case GAMEOBJECT_TYPE_NEW_FLAG:
HandleCustomTypeCommand(GameObjectType::SetNewFlagState(FlagState::Taken, user->ToPlayer()));
break;
case GAMEOBJECT_TYPE_FLAGSTAND:
SetFlag(GO_FLAG_IN_USE);
if (ZoneScript* zonescript = GetZoneScript())
zonescript->OnFlagTaken(this, Object::ToPlayer(user));
Delete();
break;
default:
break;
}
}
}
-31
View File
@@ -391,36 +391,6 @@ public:
}
};
/*######
## go_soulwell
######*/
class go_soulwell : public GameObjectScript
{
public:
go_soulwell() : GameObjectScript("go_soulwell") { }
struct go_soulwellAI : public GameObjectAI
{
go_soulwellAI(GameObject* go) : GameObjectAI(go)
{
}
bool OnGossipHello(Player* player) override
{
Unit* owner = me->GetOwner();
if (!owner || owner->GetTypeId() != TYPEID_PLAYER || !player->IsInSameRaidWith(owner->ToPlayer()))
return true;
return false;
}
};
GameObjectAI* GetAI(GameObject* go) const override
{
return new go_soulwellAI(go);
}
};
/*######
## go_amberpine_outhouse
######*/
@@ -1155,7 +1125,6 @@ void AddSC_go_scripts()
new go_tele_to_dalaran_crystal();
new go_tele_to_violet_stand();
new go_blood_filled_orb();
new go_soulwell();
new go_amberpine_outhouse();
new go_massive_seaforium_charge();
new go_veil_skith_cage();