Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи

Важная информация

Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.

Если кто-то хочет задать вопрос по патчу - велкам.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.07.2011, 03:18   #1
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию (DEV)AURA_284

Оригинальная тема http://getmangos.com/community/topic...hspellaura284/
Автор laise
Автор Источника для последней ревизии : RSA
Косяки:
Не обрабатывает все значения , хотя как думаю я ,проблема далеко не в этой ауре ,а в других .

В Поиске Всех упущенных моментов и попытка допилить до конца.

Код:
diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h
index 6f88c7d..4557ab4 100644
--- a/src/game/SpellAuraDefines.h
+++ b/src/game/SpellAuraDefines.h
@@ -319,7 +319,7 @@ enum AuraType
     SPELL_AURA_MOD_HONOR_GAIN = 281,
     SPELL_AURA_MOD_BASE_HEALTH_PCT = 282,
     SPELL_AURA_MOD_HEALING_RECEIVED = 283,                  // Possibly only for some spell family class spells
-    SPELL_AURA_284,
+    SPELL_AURA_TRIGGERED = 284,
     SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR = 285,
     SPELL_AURA_ABILITY_PERIODIC_CRIT = 286,
     SPELL_AURA_DEFLECT_SPELLS = 287,
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index b227526..d3fcdd0 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -334,7 +334,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
     &Aura::HandleNoImmediateEffect,                         //281 SPELL_AURA_MOD_HONOR_GAIN             implemented in Player::RewardHonor
     &Aura::HandleAuraIncreaseBaseHealthPercent,             //282 SPELL_AURA_INCREASE_BASE_HEALTH_PERCENT
     &Aura::HandleNoImmediateEffect,                         //283 SPELL_AURA_MOD_HEALING_RECEIVED       implemented in Unit::SpellHealingBonusTaken
-    &Aura::HandleNULL,                                      //284 51 spells
+    &Aura::HandleAuraTriggered,                               //284 SPELL_AURA_TRIGGERED
     &Aura::HandleAuraModAttackPowerOfArmor,                 //285 SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR  implemented in Player::UpdateAttackPowerAndDamage
     &Aura::HandleNoImmediateEffect,                         //286 SPELL_AURA_ABILITY_PERIODIC_CRIT      implemented in Aura::IsCritFromAbilityAura called from Aura::PeriodicTick
     &Aura::HandleNoImmediateEffect,                         //287 SPELL_AURA_DEFLECT_SPELLS             implemented in Unit::MagicSpellHitResult and Unit::MeleeSpellHitResult
@@ -9765,3 +9765,49 @@ void SpellAuraHolder::UnregisterSingleCastHolder()
         m_isSingleTarget = false;
     }
 }
+
+void Aura::HandleAuraTriggered(bool apply, bool Real)
+{
+    if (!Real)
+        return;
+
+    uint32 TriggerSpell = GetSpellProto()->EffectTriggerSpell[m_effIndex];
+    SpellEntry const *spellInfo = sSpellStore.LookupEntry(TriggerSpell);
+    if (!spellInfo)
+    {
+        sLog.outError("TriggerSpell for spell %u effect %u: triggering unknown spell %u", +GetSpellProto()->Id, m_effIndex, TriggerSpell);
+        return;
+    }
+
+    if (apply)
+    {
+        if (GetCaster() &&
+            GetCaster()->GetTypeId() == TYPEID_PLAYER &&
+            GetTarget() &&
+            GetTarget()->GetTypeId() != TYPEID_PLAYER &&
+            spellInfo->AttributesEx  &  SPELL_ATTR_EX_UNK28 &&
+            spellInfo->Attributes &  SPELL_ATTR_UNK8)
+        {
+            float healBonus   = +float(GetCaster()->GetTotalAuraModifier(SPELL_AURA_MOD_HEALING_PCT))/100.0;
+            if (healBonus < 0.0)
+                healBonus = 0.0;
+            float damageBonus = float(GetCaster()->CalculateDamage(BASE_ATTACK, +false)/GetCaster()->GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE)) - 1.0;
+            if (damageBonus < 0.0)
+                damageBonus = 0.0;
+            float healthBonus = +float(GetCaster()->GetMaxHealth()/(GetCaster()->GetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE) + +GetCaster()->GetCreateHealth())) - 1.0;
+            if (healthBonus < 0)
+                healthBonus = 0.0;
+
+            int32 bp0 = int32((spellInfo->EffectBasePoints[EFFECT_INDEX_0] + healBonus)   * 100);
+            int32 bp1 = int32((spellInfo->EffectBasePoints[EFFECT_INDEX_1] + damageBonus) * 100);
+            int32 bp2 = int32((spellInfo->EffectBasePoints[EFFECT_INDEX_2] + healthBonus) * 100);
+
+            GetTarget()->CastCustomSpell(GetTarget(), spellInfo, &bp0, &bp1, &bp2, +GetCasterGuid());
+            GetTarget()->SetHealth(GetTarget()->GetMaxHealth());
+        }
+        else
+            GetTarget()->CastSpell(GetTarget(), spellInfo, true, NULL, this);
+    }
+    else
+       GetTarget()->RemoveAurasByCasterSpell(TriggerSpell, GetCasterGuid());
+}
\ No newline at end of file
diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h
index 51c553a..ffc5af4 100644
--- a/src/game/SpellAuras.h
+++ b/src/game/SpellAuras.h
@@ -373,6 +373,7 @@ class MANGOS_DLL_SPEC Aura
         void HandleAuraOpenStable(bool apply, bool Real);
         void HandleAuraAddMechanicAbilities(bool apply, bool Real);
         void HandleAuraStopNaturalManaRegen(bool apply, bool real);
+        void HandleAuraTriggered(bool Apply, bool Real);
 
         virtual ~Aura();
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 10.07.2011, 07:54   #2
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Это ваша идея так ауру обозвать? В оригинале оно другое. Бонусы вычисляются совершенно неверно (уж поверьте, этот код я сам писал).
Для того, чтобы этот вариант ауры вообще был востребован, в ядре должно быть еще ой как дофига всего заимплеменчено на вехиклы. А в таком состоянии - оно просто не может использоваться...
rsa вне форума   Ответить с цитированием
Старый 10.07.2011, 12:42   #3
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

вехиклы вехиклами ,а данная аура используется не только в них,данный код выполняет определенные функции и вопрос лишь в том что бы довести до ума,а пока еще примут вехиклы сто лет пройдет.

Да и вообщем то спелов использующих данную ауру не так уж много
и некторая часть из них используется только нпс ,еще кусочек с реализацией "духов и одеколонов" и соответственно "передача статов вехиклам".

по поводу обозвать, похожее название как в вашем репозитории у меня уже есть,поэтому пришлось обозвать по другом,если вы против то переименую по вашему усмотрению

да и собственно "А в таком состоянии - оно просто не может использоваться... " ,очень даже хорошо используется и начинают работать некоторые спеллы из списка ,да и на глаз работают правильно ,логи пока не разбирал - хотя в debuge значения вроде соответствующие.

например http://ru.wowhead.com/spell=26662
используеться 25 нпс и некоторые из них боссы ,без этой ауры работать не будет. и тд
__________________
Когда-нибудь на оффе поставят Mangos...

Последний раз редактировалось partizanes; 10.07.2011 в 12:52.
partizanes вне форума   Ответить с цитированием
Старый 11.07.2011, 08:36   #4
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от partizanes Посмотреть сообщение
по поводу обозвать, похожее название как в вашем репозитории у меня уже есть,поэтому пришлось обозвать по другом,если вы против то переименую по вашему усмотрению
автор не я, поэтому вопрос к автору. за мной тут только кусочек кода на вычисление и наложение транспарирующих спеллов. так вот, его выкиньте - он хотя и верный в принципе, но коэффициенты должны вычисляться другим методом, и формулу уже долго подобрать не можем (охрипли уже). а текущий метод - временная затычка (хотя даже он лучше хака в ТС )
а за вычетом этого кусочка, эта аура неоднократно публиковалась как тут так и на гетмангосе.
rsa вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 03:47. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot