emc2 13 Опубликовано 17 ноября, 2017 Всем ещё раз привет. На сборке l2jfrozen (последние исходы с SVN) присутствует баг с исчезновением боссов (а может и не только). Как работает баг? Ставим Lockrange (тп босса когда его уводят) скажем на 1000. Уводим босса раз 10-15, он тпшится и сначала вроде бы всё хорошо. Но потом он просто появляется и через секунду пропадает. В таргет его не возьмешь, в общем просто исчезает с сервера и всё (в гс иногда выводятся сообщения что. Как я пытался исправить его? Добавил в L2MonsterIsntance метод teleToLocation (тк до этого он вызывался с L2Character) - не помогло. Перебрал сам метод spawnMe в L2Object (сделал идентичным с последними сурсами pwsoft), единственное что осталось от фрозенов это onSpawn. Заметил что в PWSoft этот паблик просто пустой, а в фрозенах у меня он такой: public void onSpawn() { fireEvent(EventType.SPAWN.name, (Object[]) null); } собственно , может кто знает как исправить и в какую сторону копать? вот часть кода отвечающая за тп босса если его уводят: [spoiler=code] protected void manageMinions() { _minionList.spawnMinions(); _minionMaintainTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable() { @[member='override'] public void run() { // teleport raid boss home if it's too far from home location L2Spawn bossSpawn = getSpawn(); int rb_lock_range = Config.RBLOCKRAGE; if (Config.RBS_SPECIFIC_LOCK_RAGE.get(bossSpawn.getNpcid()) != null) { rb_lock_range = Config.RBS_SPECIFIC_LOCK_RAGE.get(bossSpawn.getNpcid()); } if (rb_lock_range != -1 && !isInsideRadius(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), rb_lock_range, true, false)) { teleToLocation(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), true); // healFull(); // Prevents minor exploiting with it } /* * if(!isInsideRadius(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), 5000, true, false)) { teleToLocation(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), true); healFull(); // prevents minor exploiting with it } */ _minionList.maintainMinions(); bossSpawn = null; } }, 60000, getMaintenanceInterval()); } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 18 ноября, 2017 Возможно миньен лист нужно очистить Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
emc2 13 Опубликовано 18 ноября, 2017 Возможно миньен лист нужно очистить у боссов что пропадают нет миньенов. Попробую, но врядли это решит проблему. Тут проблема где то в методах спавна босса. Бывает что сначала после возврата на спавн таргет не работает на босса. Ещё раз мы его тпшим (бьём массухой, тащим подальше) -> респавнится и таргет уже на него работает. Ещё сервер писал что то про unknown world region for лока_х, лока_у, лока_z и objectid дописывал. Сейчас от RaidBossInstance до последнего onSpawn я перебрал все паблики и тд по аналогии с пвсофтом - проблемы это не решило. Зачем я это сделал? Ну как минимум, поскольку по ядру фрозена он минуя L2MonsterInstance, L2NPCInstance попадал сразу в teletolocation который лежит в L2Character (что для меня остается странным). Кстати ещё не тестил этот баг на пвсофте, но думаю его там нет... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
emc2 13 Опубликовано 18 ноября, 2017 (изменено) Хм... почему то сейчас натолкнулся на мысль что возможно эта фигня срабатывает 2 раза из за того что время фиксированное 60 секунд. На PWSoft (последние сурсы из шары) это реализовано с рандомным таймером до 5 секунд. Added: а почему методы так похожи?) У ПВСофт основа не фрозен случаем или не скория? @[member='override'] protected void manageMinions() { _minionList.spawnMinions(); _minionMaintainTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable() { public void run() { // teleport raid boss home if it's too far from home location L2Spawn bossSpawn = getSpawn(); if (!isInsideRadius(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), 5000, true, false)) { teleToLocation(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), true); healFull(); // prevents minor exploiting with it } _minionList.maintainMinions(); } }, 60000, getMaintenanceInterval() + Rnd.get(5000)); } Изменено 18 ноября, 2017 пользователем emc2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
emc2 13 Опубликовано 18 ноября, 2017 добавил Rnd.get(5000) вроде полет нормальный. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Evolution 243 Опубликовано 18 ноября, 2017 Хм... почему то сейчас натолкнулся на мысль что возможно эта фигня срабатывает 2 раза из за того что время фиксированное 60 секунд. На PWSoft (последние сурсы из шары) это реализовано с рандомным таймером до 5 секунд. Added: а почему методы так похожи?) У ПВСофт основа не фрозен случаем или не скория? @[member='override'] protected void manageMinions() { _minionList.spawnMinions(); _minionMaintainTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable() { public void run() { // teleport raid boss home if it's too far from home location L2Spawn bossSpawn = getSpawn(); if (!isInsideRadius(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), 5000, true, false)) { teleToLocation(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), true); healFull(); // prevents minor exploiting with it } _minionList.maintainMinions(); } }, 60000, getMaintenanceInterval() + Rnd.get(5000)); } Потому от l2j идет все. Все у всех все берут Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты