Core/Spells: implement SMSG_MOUNT_RESULT and use it for transformed mounting cases
Port From (https://github.com/TrinityCore/TrinityCore/commit/fb0d2ed2b96c314ea144b3524195ae96878e0079)
This commit is contained in:
@@ -2557,4 +2557,19 @@ namespace Framework.Constants
|
|||||||
WhiteHit = 0x01, // enchant shall only proc off white hits (not abilities)
|
WhiteHit = 0x01, // enchant shall only proc off white hits (not abilities)
|
||||||
Limit60 = 0x02 // enchant effects shall be reduced past lvl 60
|
Limit60 = 0x02 // enchant effects shall be reduced past lvl 60
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum MountResult
|
||||||
|
{
|
||||||
|
InvalidMountee = 0,
|
||||||
|
TooFarAway = 1,
|
||||||
|
AlreadyMounted = 2,
|
||||||
|
NotMountable = 3,
|
||||||
|
NotYourPet = 4,
|
||||||
|
Other = 5,
|
||||||
|
Looting = 6,
|
||||||
|
RaceCantMount = 7,
|
||||||
|
Shapeshifted = 8,
|
||||||
|
ForcedDismount = 9,
|
||||||
|
Ok = 10 // never sent
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1107,6 +1107,18 @@ namespace Game.Network.Packets
|
|||||||
uint LoadingScreenID;
|
uint LoadingScreenID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MountResultPacket : ServerPacket
|
||||||
|
{
|
||||||
|
public MountResult() : base(ServerOpcodes.MountResult, ConnectionType.Instance) { }
|
||||||
|
|
||||||
|
public override void Write()
|
||||||
|
{
|
||||||
|
_worldPacket.WriteUInt32(Result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public uint Result;
|
||||||
|
}
|
||||||
|
|
||||||
//Structs
|
//Structs
|
||||||
public struct SpellLogPowerData
|
public struct SpellLogPowerData
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3465,6 +3465,23 @@ namespace Game.Spells
|
|||||||
caster.SendPacket(packet);
|
caster.SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SendMountResult(MountResult result)
|
||||||
|
{
|
||||||
|
if (result == MountResult.Ok)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!m_caster.IsPlayer())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Player caster = m_caster.ToPlayer();
|
||||||
|
if (caster.IsLoading()) // don't send mount results at loading time
|
||||||
|
return;
|
||||||
|
|
||||||
|
MountResultPacket packet = new MountResultPacket();
|
||||||
|
packet.Result = (uint)result;
|
||||||
|
caster.SendPacket(packet);
|
||||||
|
}
|
||||||
|
|
||||||
void SendSpellStart()
|
void SendSpellStart()
|
||||||
{
|
{
|
||||||
if (!IsNeedSendToClient())
|
if (!IsNeedSendToClient())
|
||||||
@@ -5264,7 +5281,10 @@ namespace Game.Spells
|
|||||||
return SpellCastResult.NoMountsAllowed;
|
return SpellCastResult.NoMountsAllowed;
|
||||||
|
|
||||||
if (m_caster.IsInDisallowedMountForm())
|
if (m_caster.IsInDisallowedMountForm())
|
||||||
return SpellCastResult.NotShapeshift;
|
{
|
||||||
|
SendMountResult(MountResult.Shapeshifted); // mount result gets sent before the cast result
|
||||||
|
return SpellCastResult.DontReport;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user