Core/Spells: Use orientation given in destTarget instead of always taking casters orientation for all effect types
This commit is contained in:
1 parent
28f79765ca
commit
adfc991f02
1 file changed
+23
-12
@@ -2937,9 +2937,12 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex)
|
|||||||
|
|
||||||
float x, y, z, o;
|
float x, y, z, o;
|
||||||
if (m_targets.HasDst())
|
if (m_targets.HasDst())
|
||||||
destTarget->GetPosition(x, y, z);
|
destTarget->GetPosition(x, y, z, o);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
|
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
|
||||||
|
o = target->GetOrientation();
|
||||||
|
}
|
||||||
|
|
||||||
o = frand(0, float(M_PI * 2));
|
o = frand(0, float(M_PI * 2));
|
||||||
QuaternionData rot = QuaternionData::fromEulerAnglesZYX(o, 0.f, 0.f);
|
QuaternionData rot = QuaternionData::fromEulerAnglesZYX(o, 0.f, 0.f);
|
||||||
@@ -2947,7 +2950,7 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex)
|
|||||||
Map* map = target->GetMap();
|
Map* map = target->GetMap();
|
||||||
|
|
||||||
if (!pGameObj->Create(map->GenerateLowGuid<HighGuid::GameObject>(), gameobject_id, map,
|
if (!pGameObj->Create(map->GenerateLowGuid<HighGuid::GameObject>(), gameobject_id, map,
|
||||||
Position(x, y, z, target->GetOrientation()), rot, 255, GO_STATE_READY))
|
Position(x, y, z, o), rot, 255, GO_STATE_READY))
|
||||||
{
|
{
|
||||||
delete pGameObj;
|
delete pGameObj;
|
||||||
return;
|
return;
|
||||||
@@ -3992,16 +3995,19 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex)
|
|||||||
else
|
else
|
||||||
go = new GameObject();
|
go = new GameObject();
|
||||||
|
|
||||||
float x, y, z;
|
float x, y, z, o;
|
||||||
// If dest location if present
|
// If dest location if present
|
||||||
if (m_targets.HasDst())
|
if (m_targets.HasDst())
|
||||||
destTarget->GetPosition(x, y, z);
|
destTarget->GetPosition(x, y, z, o);
|
||||||
// Summon in random point all other units if location present
|
// Summon in random point all other units if location present
|
||||||
else
|
else
|
||||||
|
{
|
||||||
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
|
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
|
||||||
|
o = m_caster->GetOrientation();
|
||||||
|
}
|
||||||
|
|
||||||
Map* map = m_caster->GetMap();
|
Map* map = m_caster->GetMap();
|
||||||
if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), go_id, map, Position(x, y, z, m_caster->GetOrientation()), QuaternionData(), 255, GO_STATE_READY))
|
if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), go_id, map, Position(x, y, z, o), QuaternionData(), 255, GO_STATE_READY))
|
||||||
{
|
{
|
||||||
delete go;
|
delete go;
|
||||||
return;
|
return;
|
||||||
@@ -4778,6 +4784,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
|
|||||||
{
|
{
|
||||||
float dis = m_spellInfo->Effects[effIndex].CalcRadius(m_originalCaster);
|
float dis = m_spellInfo->Effects[effIndex].CalcRadius(m_originalCaster);
|
||||||
m_caster->GetClosePoint(fx, fy, fz, DEFAULT_WORLD_OBJECT_SIZE, dis);
|
m_caster->GetClosePoint(fx, fy, fz, DEFAULT_WORLD_OBJECT_SIZE, dis);
|
||||||
|
fo = m_caster->GetOrientation();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -4787,12 +4794,13 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
|
|||||||
float dis = (float)rand_norm() * (max_dis - min_dis) + min_dis;
|
float dis = (float)rand_norm() * (max_dis - min_dis) + min_dis;
|
||||||
|
|
||||||
m_caster->GetClosePoint(fx, fy, fz, DEFAULT_WORLD_OBJECT_SIZE, dis);
|
m_caster->GetClosePoint(fx, fy, fz, DEFAULT_WORLD_OBJECT_SIZE, dis);
|
||||||
|
fo = m_caster->GetOrientation();
|
||||||
}
|
}
|
||||||
|
|
||||||
Map* cMap = m_caster->GetMap();
|
Map* cMap = m_caster->GetMap();
|
||||||
// if gameobject is summoning object, it should be spawned right on caster's position
|
// if gameobject is summoning object, it should be spawned right on caster's position
|
||||||
if (goinfo->type == GAMEOBJECT_TYPE_SUMMONING_RITUAL)
|
if (goinfo->type == GAMEOBJECT_TYPE_SUMMONING_RITUAL)
|
||||||
m_caster->GetPosition(fx, fy, fz);
|
m_caster->GetPosition(fx, fy, fz, fo);
|
||||||
|
|
||||||
QuaternionData rot = QuaternionData::fromEulerAnglesZYX(fo, 0.f, 0.f);
|
QuaternionData rot = QuaternionData::fromEulerAnglesZYX(fo, 0.f, 0.f);
|
||||||
|
|
||||||
@@ -4800,7 +4808,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
|
|||||||
if (goinfo->type == GAMEOBJECT_TYPE_TRANSPORT)
|
if (goinfo->type == GAMEOBJECT_TYPE_TRANSPORT)
|
||||||
{
|
{
|
||||||
pGameObj = new Transport();
|
pGameObj = new Transport();
|
||||||
if (!pGameObj->Create(cMap->GenerateLowGuid<HighGuid::Transport>(), name_id, cMap, Position(fx, fy, fz, m_caster->GetOrientation()), rot, 255, GO_STATE_READY))
|
if (!pGameObj->Create(cMap->GenerateLowGuid<HighGuid::Transport>(), name_id, cMap, Position(fx, fy, fz, fo), rot, 255, GO_STATE_READY))
|
||||||
{
|
{
|
||||||
delete pGameObj;
|
delete pGameObj;
|
||||||
return;
|
return;
|
||||||
@@ -4809,7 +4817,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
pGameObj = new GameObject();
|
pGameObj = new GameObject();
|
||||||
if (!pGameObj->Create(cMap->GenerateLowGuid<HighGuid::GameObject>(), name_id, cMap, Position(fx, fy, fz, m_caster->GetOrientation()), rot, 255, GO_STATE_READY))
|
if (!pGameObj->Create(cMap->GenerateLowGuid<HighGuid::GameObject>(), name_id, cMap, Position(fx, fy, fz, fo), rot, 255, GO_STATE_READY))
|
||||||
{
|
{
|
||||||
delete pGameObj;
|
delete pGameObj;
|
||||||
return;
|
return;
|
||||||
@@ -5570,15 +5578,18 @@ void Spell::EffectSummonPersonalGameObject(SpellEffIndex effIndex)
|
|||||||
if (!goId)
|
if (!goId)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
float x, y, z;
|
float x, y, z, o;
|
||||||
if (m_targets.HasDst())
|
if (m_targets.HasDst())
|
||||||
destTarget->GetPosition(x, y, z);
|
destTarget->GetPosition(x, y, z, o);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
|
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
|
||||||
|
o = m_caster->GetOrientation();
|
||||||
|
}
|
||||||
|
|
||||||
Map* map = m_caster->GetMap();
|
Map* map = m_caster->GetMap();
|
||||||
Position pos = Position(x, y, z, m_caster->GetOrientation());
|
Position pos = Position(x, y, z, o);
|
||||||
QuaternionData rot = QuaternionData::fromEulerAnglesZYX(m_caster->GetOrientation(), 0.f, 0.f);
|
QuaternionData rot = QuaternionData::fromEulerAnglesZYX(o, 0.f, 0.f);
|
||||||
GameObject* go = new GameObject();
|
GameObject* go = new GameObject();
|
||||||
|
|
||||||
if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), goId, map, pos, rot, 255, GO_STATE_READY))
|
if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), goId, map, pos, rot, 255, GO_STATE_READY))
|
||||||
|
|||||||
Reference in new issue
Block a user