|
|
Модератор форума: Dimitro |
Форум TrinityCore [TrinityCore] Help Проблема % |
Проблема % |
Собственно вот сам вопрос
в HandleModDamagePercentDone не правильный пересчёт идёт, он вместо того чтобы складывать проценты перемножает их ( и не совсем правильно ) Вот код из SpellAuraEffect.cpp Код void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) return; Unit* target = aurApp->GetTarget(); if (!target) return; if (target->GetTypeId() == TYPEID_PLAYER) { for (int i = 0; i < MAX_ATTACK; ++i) if (Item* item = target->ToPlayer()->GetWeaponForAttack(WeaponAttackType(i), false)) target->ToPlayer()->_ApplyWeaponDependentAuraDamageMod(item, WeaponAttackType(i), this, apply); } if ((GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL) && (GetSpellInfo()->EquippedItemClass == -1 || target->GetTypeId() != TYPEID_PLAYER)) { target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float (GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float (GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float (GetAmount()), apply); if (target->GetTypeId() == TYPEID_PLAYER) target->ToPlayer()->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float (GetAmount()), apply); } else { // done in Player::_ApplyWeaponDependentAuraMods for SPELL_SCHOOL_MASK_NORMAL && EquippedItemClass != -1 and also for wand case } } Потом я поменял это на: Код void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) return; Player* target = aurApp->GetTarget()->ToPlayer(); if (!target) return; if (target->HasItemFitToSpellRequirements(GetSpellInfo())) { target->ApplyModSignedFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, GetAmount() / 100.0f, apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount()), apply); } } Писать стало правильно, пересчёт был, но вот всё равно урона прибавляет больше чем надо. То есть сейчас он правильное кол-во % пишет, но вот урона добавляет точно так же как и было раньше потом я понял что проблема в Код target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount()), apply); И заменил на: Код target->UpdateDamagePhysical(BASE_ATTACK); target->UpdateDamagePhysical(OFF_ATTACK); target->UpdateDamagePhysical(RANGED_ATTACK); Теперь он просто не добавляет ничего, но правильно пишет( Кто может, помогите:) Добавлено (16.03.2016, 15:31) --------------------------------------------- Так же ещё интересно что означает: TOTAL_PCT?
и TOTAL_VALUE? |
Странно,а в тех ядрах (старых) вроде уже есть этот фикс( кто занимался фан сборками)
void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) return; Unit* target = aurApp->GetTarget(); int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); if (abs(spellGroupVal) >= abs(GetAmount())) return; if (target->GetTypeId() == TYPEID_PLAYER) { for (int i = 0; i < MAX_ATTACK; ++i) if (Item* item = target->ToPlayer()->GetWeaponForAttack(WeaponAttackType(i), false)) target->ToPlayer()->_ApplyWeaponDependentAuraDamageMod(item, WeaponAttackType(i), this, apply); } if ((GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL) && (GetSpellInfo()->EquippedItemClass == -1 || target->GetTypeId() != TYPEID_PLAYER)) { if (spellGroupVal) { target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(spellGroupVal), !apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(spellGroupVal), !apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(spellGroupVal), !apply); } target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount()), apply); if (Player* player = target->ToPlayer()) { if (spellGroupVal) player->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float(spellGroupVal), !apply); player->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float(GetAmount()), apply); } } else { // done in Player::_ApplyWeaponDependentAuraMods for SPELL_SCHOOL_MASK_NORMAL && EquippedItemClass != -1 and also for wand case } }
Продажа сервера wow blood-fire (WoW 3.3.5a + Lua engine) 6500 руб
---->https://vk.com/jimteck<---- |
void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 mode, bool apply) const{ if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) return; Unit* target = aurApp->GetTarget(); int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); if (abs(spellGroupVal) >= abs(GetAmount())) return; if (target->GetTypeId() == TYPEID_PLAYER) { for (int i = 0; i < MAX_ATTACK; ++i) if (Item* item = target->ToPlayer()->GetWeaponForAttack(WeaponAttackType(i), false)) target->ToPlayer()->_ApplyWeaponDependentAuraDamageMod(item, WeaponAttackType(i), this, apply); } if ((GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL) && (GetSpellInfo()->EquippedItemClass == -1 || target->GetTypeId() != TYPEID_PLAYER)) { if (spellGroupVal) { target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(spellGroupVal), !apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(spellGroupVal), !apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(spellGroupVal), !apply); } target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount()), apply); target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount()), apply); if (Player* player = target->ToPlayer()) { if (spellGroupVal) player->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float(spellGroupVal), !apply); player->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, float(GetAmount()), apply); } } else { // done in Player::_ApplyWeaponDependentAuraMods for SPELL_SCHOOL_MASK_NORMAL && EquippedItemClass != -1 and also for wand case } }
Сообщение # 3 написано 18.03.2016 в 20:00
|
Ну конечно,если столько времени потратил на своё ядро,то понятное дело,подобная тема есть на Github "zwisus commented 8 days ago
Description: if a player cast a spell that has a EffectWeaponDmg effect,and the spell school isn't NORMAL,at the same time, the player has a SPELL_AURA_MOD_DAMAGE_PERCENT_DONE aura, the spell damge is wrong. Current behaviour: Caster hasaura(72221) Luck of the Draw Stacks up to 3 times Increases damage done by 5%, healing done by 5%, and health by 5% whenever you use the Dungeon tool to find other players for your group. castspell(20375) trigger spell id 20424 Seal Of Command the Seal Of Command damage should increase to 105%,but it increased to 105% x 105%. Branch(es): 335/6x 335 TC hash/commit: a41bd8e TDB version: TDB 335.60" пока ещё некто не ответил) Та же проблема)
Продажа сервера wow blood-fire (WoW 3.3.5a + Lua engine) 6500 руб
---->https://vk.com/jimteck<----
Сообщение # 8 написано 18.03.2016 в 21:41
|
Ну конечно,если столько времени потратил на своё ядро,то понятное дело,подобная тема есть на Github "zwisus commented 8 days agoDescription: if a player cast a spell that has a EffectWeaponDmg effect,and the spell school isn't NORMAL,at the same time, the player has a SPELL_AURA_MOD_DAMAGE_PERCENT_DONE aura, the spell damge is wrong. Current behaviour: Caster hasaura(72221) Luck of the Draw Stacks up to 3 times Increases damage done by 5%, healing done by 5%, and health by 5% whenever you use the Dungeon tool to find other players for your group. castspell(20375) trigger spell id 20424 Seal Of Command the Seal Of Command damage should increase to 105%,but it increased to 105% x 105%. Branch(es): 335/6x 335 TC hash/commit: a41bd8e TDB version: TDB 335.60" пока ещё некто не ответил) Та же проблема)
Сообщение # 9 написано 19.03.2016 в 01:27
|
rkild511,уважающий себя админ не будет делать крейзи,так как крейзи только для школьников и онлайн макс 15-20 тел будет)Большие статы и берсы,это сейчас не актуально) Даже в xtreame top 100 серверов,я не видел среди топовых крейзи)
Продажа сервера wow blood-fire (WoW 3.3.5a + Lua engine) 6500 руб
---->https://vk.com/jimteck<----
Сообщение # 10 написано 19.03.2016 в 09:20
|
Сообщение # 11 написано 19.03.2016 в 12:35
|
rkild511,по твоей проблеме написал на git hub trinitycore и на паре форумов американских) думаю за пару дней дадут решение данной проблемы)
Продажа сервера wow blood-fire (WoW 3.3.5a + Lua engine) 6500 руб
---->https://vk.com/jimteck<----
Сообщение # 12 написано 19.03.2016 в 20:48
|
| |||
| |||