• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Форум » TrinityCore » [TrinityCore] Help » [Проблемы с Берсерком]Подробности в нутри (123)
[Проблемы с Берсерком]Подробности в нутри
qwerty000111
Скаут
Извините за такую активность на форуме просто реально не понимаю что к чем : Вешаю на себя берсерк на 500% , Соответсвенно в уроне должно показывать 500% у меня показывает 600% Вешаю ещё 1 берсерк на 500% так же должно показывать 1000% У меня показывает 3600% . В чем проблема подскажите и можно ли её исправить опишите как с меня ОГРОМНЫЙ +
Сообщение # 1 написано 06.04.2016 в 18:09
dimakpro
Центурион
Продажа сервера wow blood-fire (WoW 3.3.5a + Lua engine) 6500 руб
---->https://vk.com/jimteck<----
Сообщение # 2 отредактировано dimakpro - Среда, 06.04.2016, 18:37
zenonWoW
Скаут
1 вариант решения ( если есть исходники ):
Идём значит в папку game/spell/aura/spellauraeffects.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;

   Player* target = aurApp->GetTarget()->ToPlayer();
   if (!target)
      return;

   if (target->HasItemFitToSpellRequirements(GetSpellInfo()))
   {
      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->ApplyModSignedFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, GetAmount() / 100.0f, apply);
чтобы писалось правильно в игре

Для того чтобы пересчитывалось более точнее нужно 

Код
TOTAL_PCT, float (GetAmount()
заменить на 

Код
TOTAL_PCT, float(GetAmount() / 7.0f)
Здесь мы видим что я добавил деление на 7 ( то есть всё то что нам добавляется делится на 7 ) 
это сделанно для серверов где берсов будет более чем 1500%, такой пересчёт более-менее точен
если у вас меньше % берсерков то соответственно и цифра должна быть больше
от 7 - 15 ( на калькуляторе считал:))
Приглашаем Всех на новый сервер WoW Zenon-WoW.ru
Сайт: http://zenon-wow.ru
Группа в вк: https://vk.com/zenon_wow
Собственное ядро, собстенные наработки
Никакого чужого контента, всё свое
Сообщение # 3 написано 06.04.2016 в 18:40
dimakpro
Центурион
Не пашет,а даже я тебе скажу  раньше было 3600%,а сейчас 25 000%)

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->ApplyModSignedFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, GetAmount() / 100.0f, apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(GetAmount() / 7.0f), apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND,  TOTAL_PCT, float(GetAmount() / 7.0f), apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED,   TOTAL_PCT, float(GetAmount() / 7.0f), 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;

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->ApplyModSignedFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT, GetAmount() / 100.0f, apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, float(GetAmount() / 7.0f), apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount() / 7.0f), apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount() / 7.0f), 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<----
Сообщение # 4 отредактировано dimakpro - Среда, 06.04.2016, 22:09
zenonWoW
Скаут
Цитата dimakpro ()
Не пашет,а даже я тебе скажу  раньше было 3600%,а сейчас 25 000%)

странно у меня всё работает
Цитата dimakpro ()
spellGroupVal

это из нового ядра, с ним ещё не разбирался
У меня в ядре работает это, вот мой код:
Код
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() / 7.0f), apply);
      target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount() / 7.0f), apply);
      target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount() / 7.0f), apply);
   }

а был:
Код
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
    }
}
Приглашаем Всех на новый сервер WoW Zenon-WoW.ru
Сайт: http://zenon-wow.ru
Группа в вк: https://vk.com/zenon_wow
Собственное ядро, собстенные наработки
Никакого чужого контента, всё свое
Сообщение # 5 написано 07.04.2016 в 11:14
dimakpro
Центурион
zenonWoW, "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() / 7.0f), apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_OFFHAND, TOTAL_PCT, float(GetAmount() / 7.0f), apply);
target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount() / 7.0f), apply);
}"тестил,запахал) в ядре кое какие правки нужны были)))
Продажа сервера wow blood-fire (WoW 3.3.5a + Lua engine) 6500 руб
---->https://vk.com/jimteck<----
Сообщение # 6 отредактировано dimakpro - Четверг, 07.04.2016, 18:18
m0oncat
Скаут
Если кто разобрался с данной проблемой отпишите в ЛС или сюда, буду брагодарен!
Интересует как убрать это со свежих ревизий офф трини
Сообщение # 7 написано 15.05.2020 в 16:30
Форум » TrinityCore » [TrinityCore] Help » [Проблемы с Берсерком]Подробности в нутри (123)
  • Страница 1 из 1
  • 1
Поиск: