Перейти к содержанию

Gaikotsu

Постоялец
  • Публикаций

    1567
  • Зарегистрирован

  • Посещение

  • Победитель дней

    61
  • Отзывы

    0%

Весь контент Gaikotsu

  1. Gaikotsu

    Диалог С Нпс

    кажется пакет ExRotation за это отвечает
  2. сборка на основе чего? овер или l2jserver? если первое, то там вобще всю систему генерации аугментаций надо выкидывать нафиг и писать по тому принципу, по которому это все генерится в птс, где легко можно играться с шансами получения нужных скиллов и т.д. а во втором случае хз, как-то ни разу не интересовался как в л2ж это реализовано, но есть подозрения что и там тот же механизм что и в овере... в птс же все сделано хоть и достаточно туповато, но зато просто - корейцы просто перечислили для каждого из лсов все возможные варианты ид для 1 и 2 частей аугментаций с шансами. вот например для лс 46 уровня, при вставке в не магическое оружие (это уже распарсинг из птс-скриптов под наш серв): так что если хочешь сделать "красиво", то берешь те же птс-скрипты фрейи (для хф в данном случае это подходит нормально - ибо новых ауг по сравению с фреей в хф не добавили), парсишь из них variationdata.txt, и на основе этих данных делаешь то что тебе нужно, тем более что все достаточно примитивно и реализовывается буквально за несколько часов неторопливого кодинга.
  3. было бы там что реализовывать то - всего по несколько строк в пару пакетов.
  4. смотришь что за аи используют споры, находишь его класс в дп и дальше по цепочке.
  5. Gaikotsu

    скилы из палок

    копать условия срабатывания триггеров
  6. Gaikotsu

    Дроп 0%

    все не так для начала пойми как описываются шансы в группах дропа дроп разделенный на группы всегда должен придерживаться одного единственного правила - сумма шансов предметов в группе обязательно должна быть равна 100%. показываю на примере <!-- Rose [Raid Boss] / Ирис [Рейдовый Босс] --> <npc id="25870" name="Rose" title="Raid Boss"> <rewardlist type="RATED_GROUPED"> <group id="1" chance="50.00000"> <reward item_id="2463" min="1" max="1" chance="33.33334" /> <!-- [16.66667%] Divine Gloves / Перчатки Святости --> <reward item_id="2437" min="1" max="1" chance="33.33333" /> <!-- [16.66667%] Drake Leather Boots / Кожаные Сапоги Дрейка --> <reward item_id="2462" min="4" max="4" chance="33.33333" /> <!-- [16.66667%] Full Plate Gauntlets / Полные Латные Рукавицы --> </group> <group id="2" chance="75.00000"> <reward item_id="6574" min="1" max="1" chance="100.00000" /> <!-- [75.00000%] Blessed Scroll: Enchant Armor (C-grade) / Благословенный Свиток: Модифицировать Доспех (C) --> </group> </rewardlist> </npc> как видишь в описании в обеих группах суммы шансов предметов равны ровно 100%, а конечный шанс получения того или иного предмета получается вычислением по простой формуле: (шанс_предмета_из_группы * шанс_группы) / 100.и да, еще - одновременно из каждой группы может выпасть не более одного предмета из списка. есл хочешь чтобы была вероятность выпадения хоть всех перечисленных в дропе предметов - не группируй дроп, а описывай его при помощи NOT_RATED_NOT_GROUPED, аналогично спойлу. только учти что до кучи еще и рейты не будут дейтсовать на такой дроп. З.Ы. а для не рейтированного группового дропа используй NOT_RATED_GROUPED.
  7. не трать зря время, лучше потрать его на просмотр нормальной порнухи на ту же тематику
  8. дык в надежде на халявный плюсик
  9. в импортах то вобще указал подключение класса GeoData? З.Ы. использовать javolution в наше время? фи... З.З.Ы. и к чему работать с исходниками так примитивно - компиляция чреез командную строку и т.п. - почему бы не пользоваться нормальными IDE, которые еще в процессе редактирования укажут все возможные предупреждения и ошибки. конечно если их корректно настроить.
  10. Gaikotsu

    Как открыть HB

    сборка то вроде на основе овера? тогда прописать в таблице server_variables переменной HellboundConfidence нужное для необходимого уровня количество очков. если переменной нет - создать
  11. ты б хоть немного английский подучил что ли, чтобы не советовать глупостей... по названию параметра же ясно для чего он и уж точно не для выставления реюза
  12. это отдельная карта из maps и все что к ней относится - меши, текстуры и т.д.
  13. не в l2text, а в Voice озвучка обучения файлы tutorial_voice_XXX-e.ogg
  14. Gaikotsu

    L2j-dev.ru шара

    что за странные сборки в последнее время пошли, так чувствительные к версии явы? я еще понимаю если бы к мажорной версии (6/7/8 ява), но чтобы к минорной...
  15. что еще за точки фильтрации?
  16. а что я такого сказал? по моему именно VariationEffectGrp-e определяет, при каких конкретно комбинациях option id в ид аугментации необходимо показывать свечение от аугментации.
  17. свечение появляется если клиент встречает в аугментации опредленные подид ее частей. хочешь это изменить - копай VariationEffectGrp-e
  18. хорошие сборки все пилят для себя, под продажу никто не делает
  19. Gaikotsu

    АнтиВампирик

    если компил, то забудь - изменения придется делать в ядре
  20. корее всего, если сами классы так же называются и все нужные методы в них имеются
  21. а в чем проблема то? там банально меняется 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); } } }
  22. лучше брось это гиблое дело я еще понимаю если бы ты исходники старался переделать под другой сервер, но декомпил... ты уже декомпилом можешь внести кучу неочевидных ошибок, котрые в итоге компилить будут позволять, но саму работу скриптов испортят. З.Ы. DJ Java Decompiler декомпилит не ахти. лучший по идее из доступных ща Fernflower. вот, чисто ради интереса пропустил через него эту самую jar'ку. З.З.Ы. на Fernflower, который в инете можно так просто найти кстати особо не надейтесь - там есть ошибочка, из-за которой не всегда декомпилятся вложенные классы. но исправление опять же в инете найти не проблема - там всего-то надо им самого себя декомпильнуть (ага, Fernflower сам на яве написан), поправить одну строчку в одном из классов, обратно скомпилить этот класс javac'ом и заменить. ro0tt.jar.src.zip
  23. сэмпл того, как примерно должно быть. /** * Выдача дуал-класса */ 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; }
  24. ах да, еще забыл - при получении новой профы на основе еще придется обновлять инфу о профе в таблице ноблов, т.к. она должна быть актуальной для корректного участия в олимпийских боях по классам и т.п.
×
×
  • Создать...