|
Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.
Повод для гордости. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
15.11.2010, 19:49 | #1 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
[10743][patch] Новое поле для spell_bonus_data
Суть проблемы:
1) в функции void Aura::HandlePeriodicDamage(bool apply, bool Real) захардкодено множество спеллов, таких как Rip, Garrote, Lock Jaw и Pounce Bleed. 2) т.к. мы переносим в БД и способности Охотников, появилась и надобность в расчётах RAP (Силы атаки дальнего боя) Дабы избавиться от лишнего кода, появилась надобность добавить новую колонку для этого дела... но т.к. кому-то лень написать своё, ведь проще уже скопировать сделанное и протестированное - копируем. Оригинальный автор: QAston с TrinityCore Это портированная под мангос версия с небольшими изменениями от меня патч Код:
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index ef3be00..0732846 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1346,7 +1346,7 @@ void SpellMgr::LoadSpellBonuses() mSpellBonusMap.clear(); // need for reload case uint32 count = 0; // 0 1 2 3 - QueryResult *result = WorldDatabase.Query("SELECT entry, direct_bonus, dot_bonus, ap_bonus FROM spell_bonus_data"); + QueryResult *result = WorldDatabase.Query("SELECT entry, direct_bonus, dot_bonus, ap_bonus, ap_dot_bonus FROM spell_bonus_data"); if( !result ) { barGoLink bar( 1 ); @@ -1384,6 +1384,7 @@ void SpellMgr::LoadSpellBonuses() sbe.direct_damage = fields[1].GetFloat(); sbe.dot_damage = fields[2].GetFloat(); sbe.ap_bonus = fields[3].GetFloat(); + sbe.ap_dot_bonus = fields[4].GetFloat(); bool need_dot = false; bool need_direct = false; diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index c69905a..ea741d0 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -453,6 +453,11 @@ inline bool IsAutoRepeatRangedSpell(SpellEntry const* spellInfo) return (spellInfo->Attributes & SPELL_ATTR_RANGED) && (spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG); } +inline bool IsSpellRequiresRangedAP(SpellEntry const* spellInfo) +{ + return (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && spellInfo->DmgClass != SPELL_DAMAGE_CLASS_MELEE); +} + SpellCastResult GetErrorAtShapeshiftedCast (SpellEntry const *spellInfo, uint32 form); inline bool IsChanneledSpell(SpellEntry const* spellInfo) @@ -616,6 +621,7 @@ struct SpellBonusEntry float direct_damage; float dot_damage; float ap_bonus; + float ap_dot_bonus; }; typedef UNORDERED_MAP<uint32, SpellProcEventEntry> SpellProcEventMap; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 1a6853f..80f9f3a 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -6196,9 +6196,13 @@ int32 Unit::SpellBonusWithCoeffs(SpellEntry const *spellProto, int32 total, int3 coeff = damagetype == DOT ? bonus->dot_damage : bonus->direct_damage; // apply ap bonus at done part calculation only (it flat total mod so common with taken) - if (donePart && bonus->ap_bonus) + if (donePart && (bonus->ap_bonus || bonus->ap_dot_bonus)) { - float ap_bonus = bonus->ap_bonus; + float ap_bonus = 0; + if (damagetype == DOT) + ap_bonus = bonus->ap_dot_bonus; + else + ap_bonus = bonus->ap_bonus; // Impurity if (GetTypeId() == TYPEID_PLAYER && spellProto->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT) @@ -6207,7 +6211,7 @@ int32 Unit::SpellBonusWithCoeffs(SpellEntry const *spellProto, int32 total, int3 ap_bonus += ((spell->CalculateSimpleValue(EFFECT_INDEX_0) * ap_bonus) / 100.0f); } - total += int32(ap_bonus * (GetTotalAttackPowerValue(BASE_ATTACK) + ap_benefit)); + total += int32(ap_bonus * (GetTotalAttackPowerValue(IsSpellRequiresRangedAP(spellProto) ? RANGED_ATTACK : BASE_ATTACK) + ap_benefit)); } } // Default calculation база Код:
ALTER TABLE `spell_bonus_data` ADD COLUMN `ap_dot_bonus` float NOT NULL default '0' AFTER `ap_bonus`; патч протестирован и выполняет требуемую от него задачу
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо" Последний раз редактировалось Insider42; 17.11.2010 в 10:20. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поле боя | Onfus | Баг-репорты | 1 | 08.12.2010 16:33 |
[10743] Add AP/RAP bonus data to `spell_bonus_data`. | newsbot | CMaNGOS Commits | 0 | 19.11.2010 05:10 |
[10742] Add `spell_bonus_data`.`spell_bonus_data` field and support for RAP bonuses use for spells d | newsbot | CMaNGOS Commits | 0 | 19.11.2010 04:30 |
В каком поле передается SpellPower пета? | rsa | Опкоды, Формулы, Клиент | 14 | 17.09.2010 12:15 |
[9898] Implement redundent values check in `spell_bonus_data` | newsbot | CMaNGOS Commits | 0 | 15.05.2010 11:00 |