L2J_Mobius_Essence_6.3_Crusader - 388

ynsjsoft

Пляшущий с бубном
Пользователь
Сообщения
18
Розыгрыши
0
Репутация
0
Реакции
2
Баллы
225
L2J_Mobius_Essence_6.3_Crusader - 388
id=96694 name=[Package: Antharas' Earring]
The multi-enchantment system does not work on this item.
Anyone know how to fix it?
 
нашел баг в данной сборке, по мере проверки движения по квестам и проверки НПС, особенно телепорты в зоны без ГЕО присутсвует баг в зону ХЕЛБОУНД ( отрицательное значение уровней телепорта, косяк в скрипте явы на телепорт, полет проходит в бездну по всем 1-3 уроня )))
проблема с вычислением задержки для ThreadPool.scheduleAtFixedRate()
Основная проблема по <span>ThreadPool.scheduleAtFixedRate(this::checkCondition, calendar.getTimeInMillis() - System.currentTimeMillis(), HOURS_24 * 7);</span>

Добавил:
  1. Проверка на отрицательное значение задержки с помощью <span>Math.max(0, value)</span>
  2. Исправлен расчет времени в методе <span>closeZones()</span>
  3. Улучшена логика работы с календарными данными
  4. Добавлены дополнительные проверки в условиях
Код:
public class IvoryTowerTeleportZones extends AbstractNpcAI {
    private static final int HOURS_24 = 86400000;
   
    private static final String[] ZONE_NAMES = {
        "hellbound_tp_1",
        "hellbound_tp_2",
        "hellbound_tp_3",
        "hellbound_tp_4"
    };
   
    private IvoryTowerTeleportZones() {
        final Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
       
        // Current day check.
        if ((calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) &&
            (calendar.get(Calendar.HOUR_OF_DAY) >= 10) &&
            (calendar.get(Calendar.HOUR_OF_DAY) < 22)) {
            enableZones();
            calendar.add(Calendar.DAY_OF_WEEK, 7);
            calendar.set(Calendar.HOUR_OF_DAY, 10);
            closeZones();
        } else {
            disableZones();
            calendar.add(Calendar.DAY_OF_WEEK, Calendar.SATURDAY - calendar.get(Calendar.DAY_OF_WEEK));
            calendar.set(Calendar.HOUR_OF_DAY, 10);
        }
       
        // Безопасное вычисление задержки
        long delay = Math.max(0, calendar.getTimeInMillis() - System.currentTimeMillis());
       
        // Schedule task to check if it is Saturday.
        ThreadPool.scheduleAtFixedRate(this::checkCondition, delay, HOURS_24 * 7); // Check every week.
    }
   
    private void checkCondition() {
        final Calendar calendar = Calendar.getInstance();
        if ((calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) &&
            (calendar.get(Calendar.HOUR_OF_DAY) >= 10) &&
            (calendar.get(Calendar.HOUR_OF_DAY) < 22)) {
            enableZones();
            closeZones();
        }
    }
   
    private void closeZones() {
        final Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 22);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
       
        long delay = Math.max(0, calendar.getTimeInMillis() - System.currentTimeMillis());
        ThreadPool.schedule(this::disableZones, delay);
    }
   
    private void enableZones() {
        for (String name : ZONE_NAMES) {
            final ZoneType zone = ZoneManager.getInstance().getZoneByName(name);
            if (zone != null) {
                zone.setEnabled(true);
            }
        }
    }
   
    private void disableZones() {
        for (String name : ZONE_NAMES) {
            final ZoneType zone = ZoneManager.getInstance().getZoneByName(name);
            if (zone != null) {
                zone.setEnabled(false);
            }
        }
    }
   
    public static void main(String[] args) {
        new IvoryTowerTeleportZones();
    }
}
 
Назад
Сверху