Core/PacketIO: Implemented CMSG_UPDATE_AREA_TRIGGER_VISUAL

Port From (https://github.com/TrinityCore/TrinityCore/commit/b88f4b7f4f8744b7cd455c07d3b94a704c373dfe)
This commit is contained in:
Hondacrx
2025-08-18 09:46:54 -04:00
parent 9fad3e7752
commit ddfc5c7484
4 changed files with 45 additions and 6 deletions
@@ -136,14 +136,12 @@ namespace Game.Entities
spellForVisuals = Global.SpellMgr.GetSpellInfo(GetCreateProperties().SpellForVisuals.Value, Difficulty.None);
if (spellForVisuals != null)
spellVisual.SpellXSpellVisualID = spellForVisuals.GetSpellXSpellVisualId();
spellVisual.SpellXSpellVisualID = caster != null ? caster.GetCastSpellXSpellVisualId(spellForVisuals) : spellForVisuals.GetSpellXSpellVisualId();
}
if (spellForVisuals != null)
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.SpellForVisuals), spellForVisuals.Id);
SpellCastVisualField spellCastVisual = areaTriggerData.ModifyValue(m_areaTriggerData.SpellVisual);
SetUpdateFieldValue(ref spellCastVisual.SpellXSpellVisualID, spellVisual.SpellXSpellVisualID);
SetUpdateFieldValue(ref spellCastVisual.ScriptVisualID, spellVisual.ScriptVisualID);
SetSpellVisual(spellVisual);
if (!IsStaticSpawn())
SetUpdateFieldValue(areaTriggerData.ModifyValue(m_areaTriggerData.TimeToTargetScale), GetCreateProperties().TimeToTargetScale != 0 ? GetCreateProperties().TimeToTargetScale : m_areaTriggerData.Duration);
@@ -404,6 +402,13 @@ namespace Game.Entities
ClearScaleCurve(m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.OverrideMoveCurveZ));
}
public void SetSpellVisual(SpellCastVisual visual)
{
SpellCastVisualField spellCastVisual = m_values.ModifyValue(m_areaTriggerData).ModifyValue(m_areaTriggerData.SpellVisual);
SetUpdateFieldValue(ref spellCastVisual.SpellXSpellVisualID, visual.SpellXSpellVisualID);
SetUpdateFieldValue(ref spellCastVisual.ScriptVisualID, visual.ScriptVisualID);
}
public void SetDuration(int newDuration)
{
_duration = newDuration;
@@ -1449,7 +1454,7 @@ namespace Game.Entities
public AreaTriggerOrbitInfo GetOrbit() { return _orbitInfo; }
AreaTriggerFieldData m_areaTriggerData;
public AreaTriggerFieldData m_areaTriggerData;
ulong _spawnId;
+1 -1
View File
@@ -116,7 +116,7 @@ public class ObjectAccessor : Singleton<ObjectAccessor>
return u.GetMap().GetDynamicObject(guid);
}
static AreaTrigger GetAreaTrigger(WorldObject u, ObjectGuid guid)
public static AreaTrigger GetAreaTrigger(WorldObject u, ObjectGuid guid)
{
return u.GetMap().GetAreaTrigger(guid);
}
+17
View File
@@ -623,6 +623,23 @@ namespace Game
_player.SetChannelVisual(new SpellCastVisualField() { SpellXSpellVisualID = spellXspellVisualId });
}
[WorldPacketHandler(ClientOpcodes.UpdateAreaTriggerVisual, Processing = PacketProcessing.Inplace)]
void HandleUpdateAreaTriggerVisual(UpdateAreaTriggerVisual updateAreaTriggerVisual)
{
AreaTrigger target = ObjectAccessor.GetAreaTrigger(_player, updateAreaTriggerVisual.TargetGUID);
if (target == null)
return;
if (target.GetCasterGuid() != _player.GetGUID())
return;
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(target.m_areaTriggerData.SpellForVisuals, _player.GetMap().GetDifficultyID());
if (spellInfo == null)
return;
target.SetSpellVisual(new SpellCastVisual(_player.GetCastSpellXSpellVisualId(spellInfo), 0));
}
[WorldPacketHandler(ClientOpcodes.KeyboundOverride, Processing = PacketProcessing.ThreadSafe)]
void HandleKeyboundOverride(KeyboundOverride keyboundOverride)
{
@@ -93,6 +93,23 @@ namespace Game.Networking.Packets
}
}
class UpdateAreaTriggerVisual : ClientPacket
{
public int SpellID;
public SpellCastVisual Visual;
public ObjectGuid TargetGUID;
public UpdateAreaTriggerVisual(WorldPacket packet) : base(packet) { }
public override void Read()
{
SpellID = _worldPacket.ReadInt32();
Visual.Read(_worldPacket);
TargetGUID = _worldPacket.ReadPackedGuid();
}
}
//Structs
class AreaTriggerSplineInfo
{