У меня нет под рукой фафуриона, но есть хомункулус.
Класс: org.l2jmobius.gameserver.model.actor.stat.PlayerStat, метод updateVitalityPoints(int value, boolean useRates, boolean quiet)
Java:
public synchronized void updateVitalityPoints(int value, boolean useRates, boolean quiet) {
if ((value == 0) || !Config.ENABLE_VITALITY) {
return;
}
int points = value;
if (useRates) {
if (getActiveChar().isLucky()) {
return;
}
if (points < 0) // vitality consumed
{
double consumeRate = getMul(Stat.VITALITY_CONSUME_RATE, 1); //Тут у вас при подвешивании эффекта происходит инвертирование знака.
if (consumeRate <= 0) { //А вот тут просто прерывается действие эффекта, если значение отрицательное.
return;
}
points *= consumeRate;
}
if (points > 0) {
// vitality increased
points *= Config.RATE_VITALITY_GAIN;
} else {
// vitality decreased
points *= Config.RATE_VITALITY_LOST;
}
}
if (points > 0) {
points = Math.min(getVitalityPoints() + points, MAX_VITALITY_POINTS);
} else {
points = Math.max(getVitalityPoints() + points, MIN_VITALITY_POINTS);
}
if (Math.abs(points - getVitalityPoints()) <= 1e-6) {
return;
}
setVitalityPoints(points);
}
Нужно дописать эффект так, чтобы он учитывал отрицательные значения стата и корректно его отрабатывал.