L2J_Mobius_12.3_Superion Критшанс скиллов

Americano

Путник
Пользователь
Сообщения
6
Розыгрыши
0
Репутация
0
Реакции
1
Баллы
75
Хроники
  1. Master Class
Исходники
Присутствуют
Сборка
L2J_Mobius_12.3_Superion
Доброго времени суток!
Суть вопроса:
У скиллов в xml файлах есть модификатор "criticalChance" отвечающий за шанс крита скиллом. Возьмем для примера скилл Стража Лунного Света Эура "Туча Стрел" skill id = 10771:
XML:
            <effect name="PhysicalDamage">
                <power>
                    <value level="1">23391</value>
                    <value level="2">25018</value>
                    <value level="3">26645</value>
                    <value level="4">28272</value>
                    <value level="5">29900</value>
                    <value level="6">31527</value>
                    <value level="7">33154</value>
                    <value level="8">34781</value>
                    <value level="9">35966</value>
                    <value level="10">37720</value>
                    <value level="11">39474</value>
                    <value level="12">41333</value>
                    <value level="13">43192</value>
                    <value level="14">47511</value>
                    <value level="15">52262</value>
                    <value fromLevel="7" toLevel="15" fromSubLevel="1001" toSubLevel="1020">{base + (base / 100 * subIndex)}</value>
                </power>
                <overHit>true</overHit>
                <criticalChance>
                    <value fromLevel="1" toLevel="15">10</value>
                    <value fromLevel="7" toLevel="15" fromSubLevel="2001" toSubLevel="2020">{base + (base / 100 * subIndex)}</value>
                </criticalChance>
                <pDefMod>
                    <value fromLevel="1" toLevel="15">1</value>
                    <value fromLevel="7" toLevel="15" fromSubLevel="3001" toSubLevel="3020">{0.99 - 0.006 * (subIndex - 1)}</value>
                </pDefMod>
            </effect>
в Superion'e этот модификатор, по какой-то причине, перестал работать.
Сравнивал с L2J_Mobius_Path of Rogue 12.1. Если изменить значение модификатора с базовых 10 на 100
XML:
<criticalChance>

    <value fromLevel="1" toLevel="15">100</value>

    <value fromLevel="7" toLevel="15" fromSubLevel="2001" toSubLevel="2020">{base + (base / 100 * subIndex)}</value>

</criticalChance>
В Path of Rogue - скилл критует почти всегда, за редкими исключениями.
В Superion'e - изменения модификатора на скилл никак не влияют.
И следующая проблема, скорее всего, вытекает из этой же.
Пробовал разгонять в Superion'e крит шанс игровым способом при помощи итемизации. Брал все того же Стража Лунного Света Эура 110 уровня в комплекте Почета с луком Почета в руках и не заточенным скиллом. Бил 99-ых мобов без пассивки на срез крит шанса Тучей Стрел.
Потом заточил скилл до +20 на крит шанс, одел бижу с ЛСами на крит шанс скиллов, брал артефакт в книжку на крит шанс, Улучшенный брелок Агатиона Рак, лук Дракона 4-го уровня, бафал на себя Пророчество Могущества и включал Инстинкт Охотника. Снова бил тех же мобов Тучей Стрел.
Крит шанс у скилла никак не изменился.
Сталкивался ли кто-то, и можете ли подсказать куда копать/что исправлять?🙏
 
Решение
Доброго времени суток!
Суть вопроса:
У скиллов в xml файлах есть модификатор "criticalChance" отвечающий за шанс крита скиллом. Возьмем для примера скилл Стража Лунного Света Эура "Туча Стрел" skill id = 10771:
XML:
            <effect name="PhysicalDamage">
                <power>
                    <value level="1">23391</value>
                    <value level="2">25018</value>
                    <value level="3">26645</value>
                    <value level="4">28272</value>
                    <value level="5">29900</value>
                    <value level="6">31527</value>
                    <value level="7">33154</value>
                    <value level="8">34781</value>
                    <value level="9">35966</value>...
Доброго времени суток!
Суть вопроса:
У скиллов в xml файлах есть модификатор "criticalChance" отвечающий за шанс крита скиллом. Возьмем для примера скилл Стража Лунного Света Эура "Туча Стрел" skill id = 10771:
XML:
            <effect name="PhysicalDamage">
                <power>
                    <value level="1">23391</value>
                    <value level="2">25018</value>
                    <value level="3">26645</value>
                    <value level="4">28272</value>
                    <value level="5">29900</value>
                    <value level="6">31527</value>
                    <value level="7">33154</value>
                    <value level="8">34781</value>
                    <value level="9">35966</value>
                    <value level="10">37720</value>
                    <value level="11">39474</value>
                    <value level="12">41333</value>
                    <value level="13">43192</value>
                    <value level="14">47511</value>
                    <value level="15">52262</value>
                    <value fromLevel="7" toLevel="15" fromSubLevel="1001" toSubLevel="1020">{base + (base / 100 * subIndex)}</value>
                </power>
                <overHit>true</overHit>
                <criticalChance>
                    <value fromLevel="1" toLevel="15">10</value>
                    <value fromLevel="7" toLevel="15" fromSubLevel="2001" toSubLevel="2020">{base + (base / 100 * subIndex)}</value>
                </criticalChance>
                <pDefMod>
                    <value fromLevel="1" toLevel="15">1</value>
                    <value fromLevel="7" toLevel="15" fromSubLevel="3001" toSubLevel="3020">{0.99 - 0.006 * (subIndex - 1)}</value>
                </pDefMod>
            </effect>
в Superion'e этот модификатор, по какой-то причине, перестал работать.
Сравнивал с L2J_Mobius_Path of Rogue 12.1. Если изменить значение модификатора с базовых 10 на 100
XML:
<criticalChance>

    <value fromLevel="1" toLevel="15">100</value>

    <value fromLevel="7" toLevel="15" fromSubLevel="2001" toSubLevel="2020">{base + (base / 100 * subIndex)}</value>

</criticalChance>
В Path of Rogue - скилл критует почти всегда, за редкими исключениями.
В Superion'e - изменения модификатора на скилл никак не влияют.
И следующая проблема, скорее всего, вытекает из этой же.
Пробовал разгонять в Superion'e крит шанс игровым способом при помощи итемизации. Брал все того же Стража Лунного Света Эура 110 уровня в комплекте Почета с луком Почета в руках и не заточенным скиллом. Бил 99-ых мобов без пассивки на срез крит шанса Тучей Стрел.
Потом заточил скилл до +20 на крит шанс, одел бижу с ЛСами на крит шанс скиллов, брал артефакт в книжку на крит шанс, Улучшенный брелок Агатиона Рак, лук Дракона 4-го уровня, бафал на себя Пророчество Могущества и включал Инстинкт Охотника. Снова бил тех же мобов Тучей Стрел.
Крит шанс у скилла никак не изменился.
Сталкивался ли кто-то, и можете ли подсказать куда копать/что исправлять?🙏
Дак смотри:
- Берешь название "стата".
- Ищешь его в исходнике, а точнее формулу (найдешь, там будет описание расчетов).
- Сравниваешь до и после (те версии патчей что было указано в сообщении).

- Не забываем найти все что может этот стат блокировать/минусовать и т.д., это все поиск в ИДе или Вс поможет.

И с увереностю в 1 триллион "мобиусов" будет найдена проблема (п.с. а там есть очень коварные реализации).

А еще лучше, найти формулу в ПТС-ке ГОД что слита (пофуй какого она прота), и хотя бы на том уровне сравнить что есть.
или в dll лезть и искать.
И инфу в патчах офф обновы нужно читать, может спецом так порезали!
 
Решение
Дак смотри:
- Берешь название "стата".
- Ищешь его в исходнике, а точнее формулу (найдешь, там будет описание расчетов).
- Сравниваешь до и после (те версии патчей что было указано в сообщении).

- Не забываем найти все что может этот стат блокировать/минусовать и т.д., это все поиск в ИДе или Вс поможет.

И с увереностю в 1 триллион "мобиусов" будет найдена проблема (п.с. а там есть очень коварные реализации).

А еще лучше, найти формулу в ПТС-ке ГОД что слита (пофуй какого она прота), и хотя бы на том уровне сравнить что есть.
или в dll лезть и искать.
И инфу в патчах офф обновы нужно читать, может спецом так порезали!
Формулы действительно отличаются, и проблема кроется действительно в новой формуле. Перенес формулу расчета крит шанса для скиллов из Path of Rogue в Superion - крит шанс скиллов начал реагировать на настройки в xml и/или на итемизацию. Попробую поковырять новую формулу, мб получится найти где косяк "на ощупь".
Спасибо за наводку, моя нубская голова не дошла сразу, что можно залезть в исходы и сравнить формулы:oops:
 
Формулы действительно отличаются, и проблема кроется действительно в новой формуле. Перенес формулу расчета крит шанса для скиллов из Path of Rogue в Superion - крит шанс скиллов начал реагировать на настройки в xml и/или на итемизацию. Попробую поковырять новую формулу, мб получится найти где косяк "на ощупь".
Спасибо за наводку, моя нубская голова не дошла сразу, что можно залезть в исходы и сравнить формулы:oops:
п.с. отправь 2 формулы в чат гпт (или любой другой), и напиши верный запрос - что хочешь понять, получишь ответ.
 
Формулы действительно отличаются, и проблема кроется действительно в новой формуле. Перенес формулу расчета крит шанса для скиллов из Path of Rogue в Superion - крит шанс скиллов начал реагировать на настройки в xml и/или на итемизацию. Попробую поковырять новую формулу, мб получится найти где косяк "на ощупь".
Спасибо за наводку, моя нубская голова не дошла сразу, что можно залезть в исходы и сравнить формулы:oops:
как выглядит новая формула расчета в суперионе ? можешь скинуть
 
как выглядит новая формула расчета в суперионе ? можешь скинуть
Она же в свободном доступе.
Java:
// Physical skill critical rate.
            final double statBonus;
            
            // There is a chance that activeChar has altered base stat for skill critical.
            final byte skillCritRateStat = (byte) creature.getStat().getValue(Stat.STAT_BONUS_SKILL_CRITICAL);
            if ((skillCritRateStat >= 0) && (skillCritRateStat < BaseStat.values().length))
            {
                // Best tested.
                statBonus = BaseStat.values()[skillCritRateStat].calcBonus(creature);
            }
            else
            {
                // Default base stat used for skill critical formula is STR.
                statBonus = BaseStat.STR.calcBonus(creature);
            }
            
            final double physicalSkillRate = creature.getStat().getValue(Stat.CRITICAL_RATE_SKILL);
            final double defencePhysicalSkillCriticalRate = target.getStat().getValue(Stat.DEFENCE_PHYSICAL_SKILL_CRITICAL_RATE, 1) - 1;
            final double physicalSkillRateFinal = ((physicalSkillRate - target.getStat().getValue(Stat.DEFENCE_PHYSICAL_SKILL_CRITICAL_RATE_ADD, 0)) * statBonus) * (1 - Math.min(0.8, defencePhysicalSkillCriticalRate));
            
            double balanceMod = 1;
            if (creature.isPlayable())
            {
                balanceMod = target.isPlayable() ? Config.PVP_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS[creature.asPlayer().getPlayerClass().getId()] : Config.PVE_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS[creature.asPlayer().getPlayerClass().getId()];
            }
            
            return MathUtil.clamp((((baseRate / 100) + 1) * physicalSkillRateFinal) * balanceMod, 30, Config.MAX_PSKILLCRIT_RATE) > Rnd.get(1000);
        }
Проблема была тут:
Java:
return MathUtil.clamp((((baseRate / 100) + 1) * physicalSkillRateFinal) * balanceMod, 30, Config.MAX_PSKILLCRIT_RATE) > Rnd.get(1000);
оно базовый шанс крита скиллом делило на 100, и из-за этого, что бы со скиллами не делалось - они практически не критовали. Я вообще не прогер от слова совсем, но костыльно переделал вот так
Java:
return MathUtil.clamp(baseRate * physicalSkillRateFinal * balanceMod, 30, Config.MAX_PSKILLCRIT_RATE) > Rnd.get(1000);
и вроде нормально стало.
Мне для себя на локалке в соло погонять, так что за правильность формулы совсем(!) не ручаюсь. Это кого-то шарящего нужно за правильную спрашивать.:)
 
можно еще так попробовать поправить
Код:
return CommonUtil.constrain(rate * statBonus * rateBonus * rateDefenceBonus * balanceMod, 5, 90) > Rnd.get(100);
 
можно еще так попробовать поправить
Код:
return CommonUtil.constrain(rate * statBonus * rateBonus * rateDefenceBonus * balanceMod, 5, 90) > Rnd.get(100);
Так это же старая формула, в Path of Rogue как раз она
Java:
// Physical skill critical rate.
            final double statBonus;
            
            // There is a chance that activeChar has altered base stat for skill critical.
            final byte skillCritRateStat = (byte) creature.getStat().getValue(Stat.STAT_BONUS_SKILL_CRITICAL);
            if ((skillCritRateStat >= 0) && (skillCritRateStat < BaseStat.values().length))
            {
                // Best tested.
                statBonus = BaseStat.values()[skillCritRateStat].calcBonus(creature);
            }
            else
            {
                // Default base stat used for skill critical formula is STR.
                statBonus = BaseStat.STR.calcBonus(creature);
            }
            
            final double rateBonus = creature.getStat().getMul(Stat.CRITICAL_RATE_SKILL, 1);
            final double rateDefenceBonus = target.getStat().getValue(Stat.DEFENCE_PHYSICAL_SKILL_CRITICAL_RATE, 1) + (target.getStat().getValue(Stat.DEFENCE_PHYSICAL_SKILL_CRITICAL_RATE_ADD, 0) / 100);
            
            double balanceMod = 1;
            if (creature.isPlayable())
            {
                balanceMod = target.isPlayable() ? Config.PVP_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS[creature.getActingPlayer().getClassId().getId()] : Config.PVE_PHYSICAL_SKILL_CRITICAL_CHANCE_MULTIPLIERS[creature.getActingPlayer().getClassId().getId()];
            }
            
            return CommonUtil.constrain(rate * statBonus * rateBonus * rateDefenceBonus * balanceMod, 5, 90) > Rnd.get(100);
        }
Как будто бы смысла нет, раз новая нормально работает с небольшим изменением:unsure:
 
Назад
Сверху Снизу