Давно хотел создать тему, но думал сам найду нужную инфу и не создавал. Увы пока так и не нашел ничего конкретного, решил все же спросить здесь.
1. Дебаффы.
Использую исходы L2brick (на Лыже), хроники Freya.
Как и во всех сборках в ядре имеются формулы на шансы прохождения дебафов, а в датапаке уже подробно в каждом скилле находятся базовый шанс/длительность и другие параметры.
Дак вот меня давно интересует вопрос по длительности дебафов, а именно ее зависимость от резистов цели. К примеру берем скилл Shield Stun, изначально его длительность 9 секунд (если не сбивать его при этом с застуненной цели атакой), при заточке на +30 становится 20 секунд.
Шанс наложения зависит от эпиков, сетов и бафов и лежит в границе (5%-95%). Но насколько я помню - в грации финал была зависимость длительности от резиста, т.е. на цели с хорошими бафами стан не висел все 9 секунд.
Дак вот вопрос к знающим людям - должна ли быть во Фрее такая зависимость и если да, то как ее реализовать (у меня в сборке такого нет). Может быть кто-то поделится формулами или хотябы подскажет куда добавить хотябы простуйший рассчет (к примеру в место где рассчитывается #abnormaltime добавить коэффициент, зависящий от шанса, напрмиер #abnormaltime=#abnormaltime*(корень из Rate), тогда получится что если шанс (rate) равен 50%, то длительность будет time*(корень из 0.5), т.е. 9*0.7=6.3 секунды, если резист максимальный и шанс 5%, то время соответственно 9*0.22=2 секунды, вместо стандартных 9 . (вариант самый простейший и вполне неплохой, но если есть реальные формулы, то буду рад)
2. Проблема с воротами на олимпиаде.
Когда остается 10 секунд до боя - должны открываться ворота стадиона, но у меня почему-то они не открываются, пока не выделишь их мышкой. В чем может быть ошибка? Не верно отображает клиент, или сервер не посылает визуальный пакет на открытие (ведь если смотреть олимп через просмотр у менеджера, то двери там открыты, зритель все видит как положено, а вот участники нет).
Если кто сталкивался - подскажите где косяк.
Вот куски кода из скрипта олимпа:
Свернуть ↑
Код:
case BATTLE_COUNTDOWN_FIRST:
{
if (_countDown > 0)
{
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_GAME_WILL_START_IN_S1_SECOND_S);
sm.addNumber(_countDown);
_zone.broadcastPacket(sm);
}
delay = getDelay(BATTLE_START_TIME_FIRST);
if (_countDown <= 0)
{
openDoors(); <= вот открытие дверей
_state = GameState.BATTLE_COUNTDOWN_SECOND;
_countDown = BATTLE_START_TIME_SECOND[0];
delay = getDelay(BATTLE_START_TIME_SECOND);
}
break;
}
// Battle start countdown, second part (10-0)
case BATTLE_COUNTDOWN_SECOND:
{
if (_countDown > 0)
{
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_GAME_WILL_START_IN_S1_SECOND_S);
sm.addNumber(_countDown);
_zone.broadcastPacket(sm);
}
delay = getDelay(BATTLE_START_TIME_SECOND);
if (_countDown <= 0)
_state = GameState.BATTLE_STARTED;
break;
}
private final void openDoors()
{
try
{
_game.resetDamage();
_zone.openDoors();
}
catch (Exception e)
{
_log.log(Level.WARNING, e.getMessage(), e);
}
}
Свернуть ↑Развернуть ↓
Вроде все расписал подробно, надеюсь на помощь.
(тему по ошибке создал в раздел клиента игры, перенесите в общий по Л2 если не сложно).
Добавлено через 7 часов 58 минут
ап чтоли ) чтобы не потеряться