PDA

Просмотр полной версии : small fixes


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...

Если я не туплю, то нужно обрабатывать этот кусок совсем в другом месте ? :(

LordJZ
21.02.2011, 18:04
...
3) В трансформах нельзя садится на маунта и такси, за исключением нескольких, (близав не понять...) которые попались под руку.
...Ну почему не понять. В плееровских формах (warrior stance, druid form) можно, в остальных нельзя.

Vladimir
03.03.2011, 20:41
- if (m_caster->IsInWater())
- return SPELL_FAILED_ONLY_ABOVEWATER;
-
Скорее необходимо заменить underwater - так как под водой всеравно нельзя плавать вроде. Но тут необходимо проверять creature_template - так как на черепахе можно.

+ !(HasAura(71484) || HasAura(71561) || HasAura(71486) || HasAura(71558)))
Ну это точно не правильный путь.

virusav
03.03.2011, 22:15
У этих 4 спеллов SpellIconID = 3290.

Йоха
04.03.2011, 08:18
Скорее необходимо заменить underwater - так как под водой всеравно нельзя плавать вроде. Но тут необходимо проверять creature_template - так как на черепахе можно.


в 3.3.5 мне тоже кажется нельзя было плавать на маунтах под водой (кроме черепахи). А сейчас под водой очень мило плавают все наземные маунты, а вот летающие не плавают

Lordronn
04.03.2011, 09:35
Скалирующиеся маунты прекрасно плавают под водой(к примеру ракета за приглашения друга)

Йоха
04.03.2011, 11:35
Скалирующиеся маунты прекрасно плавают под водой(к примеру ракета за приглашения друга)

я сейчас слетал своим паладином к замерзшему озеру возле стальгорна, на паладинской лошади плавает, а на обычном грифоне - нет.
Возможно зависит от самого маунта, а не от его типа

tempura
04.03.2011, 11:38
я сейчас слетал своим паладином к замерзшему озеру возле стальгорна, на паладинской лошади плавает, а на обычном грифоне - нет.
Возможно зависит от самого маунта, а не от его типа

Пока расхождений с цитатой не нашел - грифон не является скалирующимся маунтом, а палский конь - не летающий. Наземные и скалирующиеся плавают, летающие не плавают - так?

Йоха
04.03.2011, 12:12
Пока расхождений с цитатой не нашел - грифон не является скалирующимся маунтом, а палский конь - не летающий. Наземные и скалирующиеся плавают, летающие не плавают - так?

Скалирующийся это что значит ?
А вспомнил, есть места где нельзя летать, и там нельзя сесть на грифона, но можно сесть на, допустим, непобедимого.

З.Ы. проверил еще свою конягу "Непобедимый" тоже плавает.

Значит верно "Наземные и скалирующиеся плавают, летающие не плавают"

virusav
04.03.2011, 12:22
На летающих маунтах плавать нельзя, только на наземных.

LordJZ
04.03.2011, 12:31
На скалирующихся маунтах плавать можно. Даже со скиллом летания.
.:: Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 20 сообщение(ий)) ::.

virusav
04.03.2011, 13:52
На фото наземный маунт, поэтому и можно.
Или на нем можно летать?

LordJZ
04.03.2011, 15:24
Я же говорю, это скалирующийся маунт.
.:: Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 20 сообщение(ий)) ::.

tempura
04.03.2011, 16:27
имелась ввиду разница "наземных" и "летающих" скалирующихся маунтов.

LordJZ
04.03.2011, 16:41
Правый верхний угол скрина :)

Den
04.03.2011, 21:58
+ !(HasAura(71484) || HasAura(71561) || HasAura(71486) || HasAura(71558)))
Ну это точно не правильный путь.

У этих 4 спеллов SpellIconID = 3290.

Вот так правильно будет ?
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 80af040..c91c3a5 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -18503,6 +18503,18 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
return false;
}

+ Unit::AuraList const& someTransforms = GetAurasByType(SPELL_AURA_TRANSFORM);
+ for (Unit::AuraList::const_iterator transform = someTransforms.begin(); transform != someTransforms.end(); ++transform)
+ {
+ if ((*transform)->GetSpellProto()->SpellIconID != 3290)
+ {
+ WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4);
+ data << uint32(ERR_TAXIPLAYERSHAPESHIFTED);
+ GetSession()->SendPacket(&data);
+ return false;
+ }
+ }
+
// not let cheating with start flight in time of logout process || if casting not finished || while in combat || if not use Spell's with EffectSendTaxi
if(IsNonMeleeSpellCasted(false))
{
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 972bb93..c4d6214 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -5469,6 +5473,14 @@ 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;
}
+
+ Unit::AuraList const& someTransforms = m_caster->GetAurasByType(SPELL_AURA_TRANSFORM);
+ for (Unit::AuraList::const_iterator transform = someTransforms.begin(); transform != someTransforms.end(); ++transform)
+ {
+ if ((*transform)->GetSpellProto()->SpellIconID == 3290)
+ return SPELL_CAST_OK;
+ }
+
break;
}
case SPELL_AURA_PERIODIC_MANA_LEECH: