Add rotation to .gob info
Port From (https://github.com/TrinityCore/TrinityCore/commit/afac2b174290c871d845e37f88c6f0c874d15fd6)
This commit is contained in:
@@ -1105,7 +1105,7 @@ namespace Framework.Constants
|
|||||||
SpawninfoCompatibilityMode = 5071,
|
SpawninfoCompatibilityMode = 5071,
|
||||||
SpawninfoGuidinfo = 5072,
|
SpawninfoGuidinfo = 5072,
|
||||||
SpawninfoSpawnidLocation = 5073,
|
SpawninfoSpawnidLocation = 5073,
|
||||||
SpawninfoDistancefromplayer = 5074,
|
SpawninfoRotation = 5074,
|
||||||
SpawngroupBadgroup = 5075,
|
SpawngroupBadgroup = 5075,
|
||||||
SpawngroupSpawncount = 5076,
|
SpawngroupSpawncount = 5076,
|
||||||
ListRespawnsRange = 5077,
|
ListRespawnsRange = 5077,
|
||||||
|
|||||||
@@ -258,6 +258,38 @@ namespace System
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void toEulerAnglesZYX(this Quaternion quaternion, out float z, out float y, out float x)
|
||||||
|
{
|
||||||
|
// rot = cy*cz cz*sx*sy-cx*sz cx*cz*sy+sx*sz
|
||||||
|
// cy*sz cx*cz+sx*sy*sz -cz*sx+cx*sy*sz
|
||||||
|
// -sy cy*sx cx*cy
|
||||||
|
|
||||||
|
var matrix = Matrix4x4.CreateFromQuaternion(quaternion);
|
||||||
|
if (matrix.M31 < 1.0)
|
||||||
|
{
|
||||||
|
if (matrix.M31 > -1.0)
|
||||||
|
{
|
||||||
|
z = MathF.Atan2(matrix.M21, matrix.M11);
|
||||||
|
y = MathF.Asin(-matrix.M31);
|
||||||
|
x = MathF.Atan2(matrix.M31, matrix.M33);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// WARNING. Not unique. ZA - XA = -atan2(r01,r02)
|
||||||
|
z = -(float)MathF.Atan2(matrix.M12, matrix.M13);
|
||||||
|
y = MathFunctions.PiOver2;
|
||||||
|
x = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// WARNING. Not unique. ZA + XA = atan2(-r01,-r02)
|
||||||
|
z = (float)MathF.Atan2(-matrix.M12, -matrix.M13);
|
||||||
|
y = -MathFunctions.PiOver2;
|
||||||
|
x = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Matrix4x4 fromEulerAnglesZYX(float fYAngle, float fPAngle, float fRAngle)
|
public static Matrix4x4 fromEulerAnglesZYX(float fYAngle, float fPAngle, float fRAngle)
|
||||||
{
|
{
|
||||||
float fCos = (float)Math.Cos(fYAngle);
|
float fCos = (float)Math.Cos(fYAngle);
|
||||||
|
|||||||
@@ -149,6 +149,9 @@ namespace Game.Chat
|
|||||||
if (param1.IsEmpty())
|
if (param1.IsEmpty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
GameObject thisGO = null;
|
||||||
|
GameObjectData data = null;
|
||||||
|
|
||||||
uint entry;
|
uint entry;
|
||||||
ulong spawnId = 0;
|
ulong spawnId = 0;
|
||||||
if (param1.Equals("guid"))
|
if (param1.Equals("guid"))
|
||||||
@@ -160,10 +163,15 @@ namespace Game.Chat
|
|||||||
if (!ulong.TryParse(cValue, out spawnId))
|
if (!ulong.TryParse(cValue, out spawnId))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
GameObjectData data = Global.ObjectMgr.GetGameObjectData(spawnId);
|
data = Global.ObjectMgr.GetGameObjectData(spawnId);
|
||||||
if (data == null)
|
if (data == null)
|
||||||
|
{
|
||||||
|
handler.SendSysMessage(CypherStrings.CommandObjnotfound, spawnId);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
entry = data.Id;
|
entry = data.Id;
|
||||||
|
thisGO = handler.GetObjectFromPlayerMapByDbGuid(spawnId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -173,13 +181,10 @@ namespace Game.Chat
|
|||||||
|
|
||||||
GameObjectTemplate gameObjectInfo = Global.ObjectMgr.GetGameObjectTemplate(entry);
|
GameObjectTemplate gameObjectInfo = Global.ObjectMgr.GetGameObjectTemplate(entry);
|
||||||
if (gameObjectInfo == null)
|
if (gameObjectInfo == null)
|
||||||
|
{
|
||||||
|
handler.SendSysMessage(CypherStrings.GameobjectNotExist, entry);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
GameObject thisGO = null;
|
|
||||||
if (handler.GetSession().GetPlayer())
|
|
||||||
thisGO = handler.GetSession().GetPlayer().FindNearestGameObject(entry, 30);
|
|
||||||
else if (handler.GetSelectedObject() != null && handler.GetSelectedObject().IsTypeId(TypeId.GameObject))
|
|
||||||
thisGO = handler.GetSelectedObject().ToGameObject();
|
|
||||||
|
|
||||||
GameObjectTypes type = gameObjectInfo.type;
|
GameObjectTypes type = gameObjectInfo.type;
|
||||||
uint displayId = gameObjectInfo.displayId;
|
uint displayId = gameObjectInfo.displayId;
|
||||||
@@ -190,47 +195,35 @@ namespace Game.Chat
|
|||||||
if (thisGO != null)
|
if (thisGO != null)
|
||||||
{
|
{
|
||||||
handler.SendSysMessage(CypherStrings.SpawninfoGuidinfo, thisGO.GetGUID().ToString());
|
handler.SendSysMessage(CypherStrings.SpawninfoGuidinfo, thisGO.GetGUID().ToString());
|
||||||
handler.SendSysMessage(CypherStrings.SpawninfoSpawnidLocation, thisGO.GetSpawnId(), thisGO.GetPositionX(), thisGO.GetPositionY(), thisGO.GetPositionZ());
|
handler.SendSysMessage(CypherStrings.SpawninfoCompatibilityMode, thisGO.GetRespawnCompatibilityMode());
|
||||||
Player player = handler.GetSession().GetPlayer();
|
|
||||||
if (player != null)
|
|
||||||
{
|
|
||||||
Position playerPos = player.GetPosition();
|
|
||||||
float dist = thisGO.GetExactDist(playerPos);
|
|
||||||
handler.SendSysMessage(CypherStrings.SpawninfoDistancefromplayer, dist);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
handler.SendSysMessage(CypherStrings.GoinfoEntry, entry);
|
|
||||||
handler.SendSysMessage(CypherStrings.GoinfoType, type);
|
|
||||||
handler.SendSysMessage(CypherStrings.GoinfoLootid, lootId);
|
|
||||||
handler.SendSysMessage(CypherStrings.GoinfoDisplayid, displayId);
|
|
||||||
|
|
||||||
if (thisGO != null)
|
|
||||||
{
|
|
||||||
if (thisGO.GetGameObjectData() != null && thisGO.GetGameObjectData().spawnGroupData.groupId != 0)
|
if (thisGO.GetGameObjectData() != null && thisGO.GetGameObjectData().spawnGroupData.groupId != 0)
|
||||||
{
|
{
|
||||||
SpawnGroupTemplateData groupData = thisGO.ToGameObject().GetGameObjectData().spawnGroupData;
|
SpawnGroupTemplateData groupData = thisGO.ToGameObject().GetGameObjectData().spawnGroupData;
|
||||||
handler.SendSysMessage(CypherStrings.SpawninfoGroupId, groupData.name, groupData.groupId, groupData.flags, thisGO.GetMap().IsSpawnGroupActive(groupData.groupId));
|
handler.SendSysMessage(CypherStrings.SpawninfoGroupId, groupData.name, groupData.groupId, groupData.flags, thisGO.GetMap().IsSpawnGroupActive(groupData.groupId));
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.SendSysMessage(CypherStrings.SpawninfoCompatibilityMode, thisGO.GetRespawnCompatibilityMode());
|
GameObjectOverride goOverride = Global.ObjectMgr.GetGameObjectOverride(spawnId);
|
||||||
|
if (goOverride == null)
|
||||||
|
goOverride = Global.ObjectMgr.GetGameObjectTemplateAddon(entry);
|
||||||
|
if (goOverride != null)
|
||||||
|
handler.SendSysMessage(CypherStrings.GoinfoAddon, goOverride.Faction, goOverride.Flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data != null)
|
||||||
|
{
|
||||||
|
data.rotation.toEulerAnglesZYX(out float yaw, out float pitch, out float roll);
|
||||||
|
handler.SendSysMessage(CypherStrings.SpawninfoSpawnidLocation, data.spawnId, data.spawnPoint.GetPositionX(), data.spawnPoint.GetPositionY(), data.spawnPoint.GetPositionZ());
|
||||||
|
handler.SendSysMessage(CypherStrings.SpawninfoRotation, yaw, pitch, roll);
|
||||||
|
}
|
||||||
|
|
||||||
|
handler.SendSysMessage(CypherStrings.GoinfoEntry, entry);
|
||||||
|
handler.SendSysMessage(CypherStrings.GoinfoType, type);
|
||||||
|
handler.SendSysMessage(CypherStrings.GoinfoLootid, lootId);
|
||||||
|
handler.SendSysMessage(CypherStrings.GoinfoDisplayid, displayId);
|
||||||
handler.SendSysMessage(CypherStrings.GoinfoName, name);
|
handler.SendSysMessage(CypherStrings.GoinfoName, name);
|
||||||
handler.SendSysMessage(CypherStrings.GoinfoSize, gameObjectInfo.size);
|
handler.SendSysMessage(CypherStrings.GoinfoSize, gameObjectInfo.size);
|
||||||
|
|
||||||
GameObjectOverride goOverride = null;
|
|
||||||
if (spawnId != 0)
|
|
||||||
{
|
|
||||||
GameObjectOverride ovr = Global.ObjectMgr.GetGameObjectOverride(spawnId);
|
|
||||||
if (ovr != null)
|
|
||||||
goOverride = ovr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (goOverride == null)
|
|
||||||
goOverride = Global.ObjectMgr.GetGameObjectTemplateAddon(entry);
|
|
||||||
|
|
||||||
if (goOverride != null)
|
|
||||||
handler.SendSysMessage(CypherStrings.GoinfoAddon, goOverride.Faction, goOverride.Flags);
|
|
||||||
|
|
||||||
handler.SendSysMessage(CypherStrings.ObjectInfoAIInfo, gameObjectInfo.AIName, Global.ObjectMgr.GetScriptName(gameObjectInfo.ScriptId));
|
handler.SendSysMessage(CypherStrings.ObjectInfoAIInfo, gameObjectInfo.AIName, Global.ObjectMgr.GetScriptName(gameObjectInfo.ScriptId));
|
||||||
var ai = thisGO != null ? thisGO.GetAI() : null;
|
var ai = thisGO != null ? thisGO.GetAI() : null;
|
||||||
if (ai != null)
|
if (ai != null)
|
||||||
|
|||||||
Reference in New Issue
Block a user