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:
hondacrx
2020-05-06 17:26:03 -04:00
parent 0c0198c483
commit cbc2597adb
3 changed files with 48 additions and 1 deletions
@@ -2557,4 +2557,19 @@ namespace Framework.Constants
WhiteHit = 0x01, // enchant shall only proc off white hits (not abilities)
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;
}
class MountResultPacket : ServerPacket
{
public MountResult() : base(ServerOpcodes.MountResult, ConnectionType.Instance) { }
public override void Write()
{
_worldPacket.WriteUInt32(Result);
}
public uint Result;
}
//Structs
public struct SpellLogPowerData
{
+21 -1
View File
@@ -3465,6 +3465,23 @@ namespace Game.Spells
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()
{
if (!IsNeedSendToClient())
@@ -5264,7 +5281,10 @@ namespace Game.Spells
return SpellCastResult.NoMountsAllowed;
if (m_caster.IsInDisallowedMountForm())
return SpellCastResult.NotShapeshift;
{
SendMountResult(MountResult.Shapeshifted); // mount result gets sent before the cast result
return SpellCastResult.DontReport;
}
break;
}