Den
21.02.2011, 17:25
1) В невидимости можно садится на маунта и такси, она сама сбрасывается.
2) В жидкостях можно плавать на маунте (только наземные маунты).
3) В трансформах нельзя садится на маунта и такси, за исключением нескольких, (близав не понять...) которые попались под руку.
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 83e8256..28bfb8b 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -18434,7 +18434,8 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
return false;
}
- if (IsInDisallowedMountForm())
+ if (IsInDisallowedMountForm() || HasAuraType(SPELL_AURA_TRANSFORM) &&
+ !(HasAura(71484) || HasAura(71561) || HasAura(71486) || HasAura(71558)))
{
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
data << uint32(ERR_TAXIPLAYERSHAPESHIFTED);
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 39e87fc..cea82c0 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -5424,9 +5424,6 @@ SpellCastResult Spell::CheckCast(bool strict)
}
case SPELL_AURA_MOUNTED:
{
- if (m_caster->IsInWater())
- return SPELL_FAILED_ONLY_ABOVEWATER;
-
if (m_caster->GetTypeId() == TYPEID_PLAYER && ((Player*)m_caster)->GetTransport())
return SPELL_FAILED_NO_MOUNTS_ALLOWED;
@@ -5439,6 +5436,13 @@ SpellCastResult Spell::CheckCast(bool strict)
break;
}
+ case SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED:
+ {
+ if (m_caster->HasAuraType(SPELL_AURA_TRANSFORM))
+ return ???;
+
+ break;
+ }
case SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS:
{
if(!m_targets.getUnitTarget())
@@ -5460,6 +5464,10 @@ SpellCastResult Spell::CheckCast(bool strict)
if (!((Player*)m_caster)->CanStartFlyInArea(m_caster->GetMapId(), zone, area))
return m_IsTriggeredSpell ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_NOT_HERE;
}
+
+ if (m_caster->HasAura(71484) || m_caster->HasAura(71561) || m_caster->HasAura(71486) || m_caster->HasAura(71558))
+ return SPELL_CAST_OK;
+
break;
}
case SPELL_AURA_PERIODIC_MANA_LEECH:
diff --git a/src/game/Unit.h b/src/game/Unit.h
index c745c9e..6b6f74e 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -1666,7 +1666,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
{
ShapeshiftForm form = GetShapeshiftForm();
return form != FORM_NONE && form != FORM_BATTLESTANCE && form != FORM_BERSERKERSTANCE && form != FORM_DEFENSIVESTANCE &&
- form != FORM_SHADOW;
+ form != FORM_SHADOW && form != FORM_STEALTH;
}
float m_modMeleeHitChance;
Непонять, вот тут return ???; что отсылать ? в spellcastresult нет нужного енума.
ERR_MOUNT_SHAPESHIFTED = "You can't mount while shapeshifted.";
другой опкод используется... MOUNT_RESULT или MOUNT_ERROR...
Если я не туплю, то нужно обрабатывать этот кусок совсем в другом месте ? :(
2) В жидкостях можно плавать на маунте (только наземные маунты).
3) В трансформах нельзя садится на маунта и такси, за исключением нескольких, (близав не понять...) которые попались под руку.
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 83e8256..28bfb8b 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -18434,7 +18434,8 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
return false;
}
- if (IsInDisallowedMountForm())
+ if (IsInDisallowedMountForm() || HasAuraType(SPELL_AURA_TRANSFORM) &&
+ !(HasAura(71484) || HasAura(71561) || HasAura(71486) || HasAura(71558)))
{
WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
data << uint32(ERR_TAXIPLAYERSHAPESHIFTED);
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 39e87fc..cea82c0 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -5424,9 +5424,6 @@ SpellCastResult Spell::CheckCast(bool strict)
}
case SPELL_AURA_MOUNTED:
{
- if (m_caster->IsInWater())
- return SPELL_FAILED_ONLY_ABOVEWATER;
-
if (m_caster->GetTypeId() == TYPEID_PLAYER && ((Player*)m_caster)->GetTransport())
return SPELL_FAILED_NO_MOUNTS_ALLOWED;
@@ -5439,6 +5436,13 @@ SpellCastResult Spell::CheckCast(bool strict)
break;
}
+ case SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED:
+ {
+ if (m_caster->HasAuraType(SPELL_AURA_TRANSFORM))
+ return ???;
+
+ break;
+ }
case SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS:
{
if(!m_targets.getUnitTarget())
@@ -5460,6 +5464,10 @@ SpellCastResult Spell::CheckCast(bool strict)
if (!((Player*)m_caster)->CanStartFlyInArea(m_caster->GetMapId(), zone, area))
return m_IsTriggeredSpell ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_NOT_HERE;
}
+
+ if (m_caster->HasAura(71484) || m_caster->HasAura(71561) || m_caster->HasAura(71486) || m_caster->HasAura(71558))
+ return SPELL_CAST_OK;
+
break;
}
case SPELL_AURA_PERIODIC_MANA_LEECH:
diff --git a/src/game/Unit.h b/src/game/Unit.h
index c745c9e..6b6f74e 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -1666,7 +1666,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
{
ShapeshiftForm form = GetShapeshiftForm();
return form != FORM_NONE && form != FORM_BATTLESTANCE && form != FORM_BERSERKERSTANCE && form != FORM_DEFENSIVESTANCE &&
- form != FORM_SHADOW;
+ form != FORM_SHADOW && form != FORM_STEALTH;
}
float m_modMeleeHitChance;
Непонять, вот тут return ???; что отсылать ? в spellcastresult нет нужного енума.
ERR_MOUNT_SHAPESHIFTED = "You can't mount while shapeshifted.";
другой опкод используется... MOUNT_RESULT или MOUNT_ERROR...
Если я не туплю, то нужно обрабатывать этот кусок совсем в другом месте ? :(