Епа-копа!
Вам не нужен новый скилтип. Данная способность работает эффектом.
<effect name="Buff" time="5" val="0">
<mul order="0x30" stat="pAtk" val="1.5"/>
</effect>
Однако дополнение механики эффекта например effectEvent="REMOVE_ON_ATTACK;REMOVE_ON_EVADE;etc. .." и обработка её в ядре, позволит вам реализовать свою задумку.
для начала понадобится enum EffectEvents {
REMOVE_ON_ATTACK,
REMOVE_AFTER_ATTACK,
// и т.д.
}
потом нужно будет бомбануть обработчик для этого добра в тех местах, где они будут использоваться. Например метод reduceCurrentHp может обрабатывать на получение урона ;D! Круто да? КОроче пуляем логическую цепочку:
REMOVE_AFTER_ATTACK - снимаем когда нас атаковали (не важно, попали или нет, главнео что атака нас - произошла).
REMOVE_AFTER_ATTACK_HIT - снимаем эффект когда нас атаковали но при этом атака не была промахом. (она может быть чем угодно главное чтобы мы получили урон)
REMOVE_AFTER_ATTACK_HIT_CRIT - аналог предъидущего но только критом.
Короче, во фрозенах есть чанс скилл триггер. Найдите эту хрень, там есть большинство вариантов всех енумов. Эти енумы можно вполне реально использовать, чтобы не плодить другие.
Когда найшли енумы, нужно нестись в DocumentBase (нам же надо парсануть внутри эффекта новую строчку
<effect name="Buff" time="5" val="0"
removeAfter="ATTACK,CAST,EVADE">
<mul order="0x30" stat="pAtk" val="1.5"/>
</effect>
Чтобы писать туда наши енум значения из chanceskilltrigger
.
Там увидите на примере любой переменной (пропарсенной) как это делать.
И всё.
1. Обработка.
Примерно будет выглядеть как:
for(L2Effect chaEff : cha.getAllEffects())
if(chaEff.isRemovedOn(ATTACK)) {
chaEff.exit();
}
Это обобщённый вариант, я хз как там что устроено внутри фрозенов.
2. Парс.
может быть похожим на это:
Код HTML:
L2EffectEvents[] effectEvent = null;
if (attrs.getNamedItem("effectEvent") != null) {
String str = getValue(attrs.getNamedItem("effectEvent").getNodeValue(), template);
if (str.isEmpty()) {
effectEvent = new L2EffectEvents[0];
} else {
String[] stats = str.split(";");
L2EffectEvents[] array = new L2EffectEvents[stats.length];
for (int i = 0; i < stats.length; i++) {
L2EffectEvents events = null;
try {
events = Enum.valueOf(L2EffectEvents.class, stats[i]);
} catch (Exception e) {
throw new IllegalArgumentException("EffectEvent: " + events + "Enum value of type " + L2EffectEvents.class.getName() + " required, but found: " + stats[i]);
}
array[i] = events;
}
effectEvent = array;
}
}
3. Профит.
Это не должно быть созданием скилл типа, а должно быть
доработкой механизма эффектов .