-
Публикаций
1572 -
Зарегистрирован
-
Посещение
-
Победитель дней
62 -
Отзывы
0%
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент Gaikotsu
-
а в чем проблема то? там банально меняется npc state у жаровен при юзании на них скилла с определенным ид т.е. тупо 9059 скиллом с таргетом TARGET_ONE и типом BUFF (ну и еще активным, т.е. OP_ACTIVE). а в аи жаровен проверяем что за скилл на них кастуется, если 9059 и все остальные условия тоже подходят - меняем у данной жаровни стейт - setNpcState(x). вот тебе офовское поведение жаровен - по ним можешь и на яве аи для них написать /*************************************************************************** * Script Decompiled by SauDecompiler build 102306.2 ***************************************************************************/ class ai_monastery_minigame_burner : citizen { parameter: int POT_NUMBER = 0; int OFF_TIMER = 5567; int off_time = 2; handler: EventHandler CREATED() { myself::ChangeStatus(2); } EventHandler ATTACKED(attacker, skill_name_id) { if( skill_name_id == 593690625 ) { myself::ChangeNPCState(myself.sm, 1); myself::ChangeStatus(2); myself::AddUseSkillDesire(attacker, 337117185, 0, 0, 1000000); myself::BroadcastScriptEvent(2114005, POT_NUMBER, 1000); myself::AddTimerEx(OFF_TIMER, off_time * 1000); myself::ChangeStatus(3); } } EventHandler SCRIPT_EVENT(script_event_arg1, script_event_arg2) { if( script_event_arg1 == 2114001 ) { myself::ChangeStatus(2); if( script_event_arg2 == POT_NUMBER ) { myself::ChangeNPCState(myself.sm, 1); myself::AddTimerEx(OFF_TIMER, off_time * 1000); } } else if( script_event_arg1 == 2114002 ) { myself::ChangeStatus(2); myself::ChangeNPCState(myself.sm, 1); myself::AddTimerEx(OFF_TIMER, off_time * 1000); } else if( script_event_arg1 == 2114003 ) { myself::ChangeNPCState(myself.sm, 1); myself::AddTimerEx(OFF_TIMER, off_time * 1000); myself::ChangeStatus(2); } else if( script_event_arg1 == 2114004 ) { myself::ChangeStatus(2); myself::ChangeNPCState(myself.sm, 1); myself::AddTimerEx(OFF_TIMER, off_time * 1000); } else if( script_event_arg1 == 21140015 ) { myself::ChangeNPCState(myself.sm, 1); myself::AddTimerEx(OFF_TIMER, off_time * 1000); myself::ChangeStatus(3); } } EventHandler TIMER_FIRED_EX(timer_id) { if( timer_id == OFF_TIMER ) { myself::ChangeNPCState(myself.sm, 2); } } }
-
нужна помощь Редактируем моды от ro0TT под lateam на основании lucera
тема ответил Gaikotsu в теме Ядро сервера
лучше брось это гиблое дело я еще понимаю если бы ты исходники старался переделать под другой сервер, но декомпил... ты уже декомпилом можешь внести кучу неочевидных ошибок, котрые в итоге компилить будут позволять, но саму работу скриптов испортят. З.Ы. DJ Java Decompiler декомпилит не ахти. лучший по идее из доступных ща Fernflower. вот, чисто ради интереса пропустил через него эту самую jar'ку. З.З.Ы. на Fernflower, который в инете можно так просто найти кстати особо не надейтесь - там есть ошибочка, из-за которой не всегда декомпилятся вложенные классы. но исправление опять же в инете найти не проблема - там всего-то надо им самого себя декомпильнуть (ага, Fernflower сам на яве написан), поправить одну строчку в одном из классов, обратно скомпилить этот класс javac'ом и заменить. ro0tt.jar.src.zip -
сэмпл того, как примерно должно быть. /** * Выдача дуал-класса */ private final static boolean getDualClass(final Player player) { if (!checkConditions(player, Service.GET_DUAL_CLASS)) return true; if (player.getActiveSubClass().isBase()) { player.sendMessage("Для получения дуал-класса вы должны быть на субклассе."); return false; } if (player.getLevel() < 80) { player.sendMessage("Для получения дуал-класса ваш уровень должен быть не меньше 80."); return false; } if (player.getClassId() == ClassId.INSPECTOR || player.getClassId() == ClassId.JUDICATOR) { player.sendMessage("Этот субкласс не может быть дуал-классом."); return false; } if (player.getDualClass() != null) { player.sendMessage("У вас уже есть дуал-класс."); return false; } if (!ItemFunctions.checkRequiredItems(player, Config.CB_GET_DUAL_CLASS_ITEM, Config.CB_GET_DUAL_CLASS_PRICE)) return false; ItemFunctions.removeItem(player, Config.CB_GET_DUAL_CLASS_ITEM, Config.CB_GET_DUAL_CLASS_PRICE, true); Quest quest = QuestManager.getQuest(_177_SplitDestiny.class); QuestState state = player.getQuestState(quest.getClass()); if (state != null) state.exitCurrentQuest(false); else quest.newQuestState(player, Quest.COMPLETED); player.getActiveSubClass().setType(SubClassType.DUAL_CLASS); AwakingManager.getInstance().sendReqToStartQuest(player); player.sendPacket(new ExSubjobInfo(player, true)); player.sendPopupMessage("Вы получили дуал-класс.", true); Log.logService("get_dual_class|Character " + player.getName() + " acquired dual class."); return true; }
-
ах да, еще забыл - при получении новой профы на основе еще придется обновлять инфу о профе в таблице ноблов, т.к. она должна быть актуальной для корректного участия в олимпийских боях по классам и т.п.
-
пример, набросаный буквально за минуту package listeners.players; import l2p.gameserver.listener.actor.player.OnPlayerEnterListener; import l2p.gameserver.model.Player; import l2p.gameserver.model.actor.listener.PlayerListenerList; import l2p.gameserver.model.entity.olympiad.Olympiad; import l2p.gameserver.network.serverpackets.SkillList; import l2p.gameserver.scripts.ScriptFile; public class AddNobleStatus implements ScriptFile { private static PlayerEnterListener _playerEnterListener; @Override public void onLoad() { _playerEnterListener = new PlayerEnterListener(); PlayerListenerList.addGlobal(_playerEnterListener); } @Override public void onReload() { PlayerListenerList.removeGlobal(_playerEnterListener); } @Override public void onShutdown() {} public class PlayerEnterListener implements OnPlayerEnterListener { @Override public void onPlayerEnter(Player player) { if (!player.isNoble()) { Olympiad.addNoble(player); player.setNoble(true); player.updatePledgeClass(); player.updateNobleSkills(); player.sendPacket(new SkillList(player)); player.broadcastUserInfo(true); } } } } P.S. и это не в ядре, а в датапаке
-
листенер на вход в игру, в нем проверяем - если у игрока нет статуса дворянина, то делаем все действия по его выдаче. дел на пару минут, если конечно есть хоть какие-то познания в яве. и конечно если сборка имеет поддержку листенера входа в игру.
-
in shirt skill with trigger trigger activates on shirt equip/unequip and replaces item ids for equipped armor in packets UserInfo/CharInfo.
-
2) чо мешает то задать реюз самого предмета (банки) в этом самом хэндлере к примеру? по моему ничего не должно мешать этому? конечно если такое поддерживается.
-
пакета RequestDispel нет? значит никак.
-
Скорее всего идет расчет увертки на лету, по значению DEX'а у нпс. пример
-
ну значит тебе ща пересейвить надо все файлы в кодировке 1251, в которых есть русский текст в utf8 без bom. я про то что если в нем выбрано utf8, то он всегда сохраняет файлы в нем без bom.
-
ну сам эклипс без bom всегда вроде как сохранять должен. и параметры для javac ты вроде корректно указываешь...
-
сами классы то хоть без BOM сохранены?
-
division by zero ^^^ если тебе и такой прямой намек на причину не поможет, то лучше бросай это дело и забудь вобще про работу с серверами.
-
его то на кой хрен?
-
в самом тексте ошибки же ясно и понятно написано что не так у тебя в этой строке и для понимания хватит даже самых начальных знаний английского языка.
-
правильно, лучше вырезать, чем пытаться его таки реализовать - так же проще всего и напрягаться с реализацией не придется. интерестно, хотя бы одна из периодически вылазящих "команд" все же его реализует? или так и продолжат просто заниматься копипастингом существующего из других сборок + делать разные микроскопические правки
-
такие вещи обычно люди пишут себе сами, именно под свою сборку. я обычно так и делаю, по необходимости набрасываю простые скрипты на пхп, которые мне генерят/правят хмлки в датапаке сервера, выдирая данные из клиентских данных или из данных птс, если они есть.
-
вот что мешает отследить где вызвается переменная, cчитанная из конфига и сделать везде нужные правки? в нормальном IDE (эклипс, идеа) это делается за считанные минуты.
-
зачем отлавливать? исходники ядра есть? если есть то изучаешь как эти пакеты написаны и как вызываются для замков и аналогично из вызваешь с данными для фортов
-
это названия пакетов из ядра с помощью них и показываются в клиенте эти самые окна с информацией об осаде резиденции - общая инфа, списки атакующих и защитников
-
может быть потому-что надо хоть сколько-то подумать, а не тупо копировать... вместо x ты число должен ставить
-
CastleSiegeInfo CastleSiegeAttackerList CastleSiegeDefenderList
-
ну дак выставляй правильно время окончания