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

Maiden7

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

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

  • Посещение

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

    2
  • Отзывы

    0%

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

  1. Сервер Lrserv последний (пока для эксперемента)
  2. Пробовали, все так же. А вообще по идее все правильно? Должно же работать?
  3. Пока тока тело пробовали менять.
  4. И так всем привет. Возникла тут у нас с коллегой идея, сделать у себя на сервере шмот нескольких левлов, дополнений подобных не нашли, начали переделывать сами . На примере тела Dracinic: D:\Serv\L2J\GameServer\data\xml\items\6300-6399.xml Копируем его в файл 24000-24100.xml и меняем на свободный ID меняем название на Дальше, то же самое проделываем с пассивкой которую дает сет Дублируем скилл, меняем название на х1 и повышаем статы, что дает скилл Все бы хорошо, новая шмотка появилась на сервере и в клиенте, она имеет св-ва сета, все хорошо, но пассивка, не смотря на повышение статов, дает эффект по дефолту! Что не так? Подскажите!
  5. Maiden7

    GHTWEb или StressWeb ?

    GHTWEb современее, новее, функциональнее, проще! SW ерунда!!
  6. Maiden7

    Хочу заказать шаблон!

    Спасибо, я нашел исполнителя!
  7. Maiden7

    Хочу заказать шаблон!

    Хочу заказать шаблон для GHTWEB 5, хотел узнать что по чем? Подскажете?
  8. Maiden7

    L2j-dev.ru шара

    Кстати, в сборке есть в конфигах мульта, а не работает! Может сталкивался кто? Мастера посылают куда подальше, а должны скиллы учить!
  9. За 1500 подумать готов!
  10. Maiden7

    Open Team (High Five)

    А поподробнее о сборке можно?
  11. На сколько ломается?
  12. Maiden7

    мультипрофа

    Мульта, изначально функция ядра, если нет, то нет, может и есть умельцы которые допишут!!
  13. Большенство сборок с этой функцией, отлично настраиваются, сервера коннектятся, на моем IP или Localhost, и так и так, при входе в игру "Не удалось соедениться с сервером"! Проверял не я один, теже сборки раньше у меня работали, а ща не хочет!
  14. Maiden7

    L2j-dev.ru шара

    Я уже исправил, спасибо за подсказки!
  15. Maiden7

    L2j-dev.ru шара

    3 268438816 CHARACTER BAN 1425704250228 Бан за нелегальное использование Админа qqqq Я ж защиту включил, защита от нелегальных админов, не корректно работает!
  16. Maiden7

    L2j-dev.ru шара

    Отключил, не помогло, все та же история, да и какая переточка, я ток первый вход в игру!
  17. Maiden7

    L2j-dev.ru шара

    Простите, а что значит accesslevel -100 и персонаж мертвый на выборе перса, это когда права админа даю!???
  18. Maiden7

    L2j-dev.ru шара

    Спасибо, как +сы откатятся, с меня причетается=)
  19. Maiden7

    L2j-dev.ru шара

    Как не странно, в конфигах включены и коммунити баффер и телепорты, классмастер, сервисы, а нажимая альт+б я вижу базовый вариант коммунити, пустой!! А где сами файлы?
  20. Maiden7

    L2j-dev.ru шара

    Спасибо, помогло!
  21. Maiden7

    Банки невидимости!!

    Находим: target.onAction(activeChar); } После добавляем: //Invisible Character can't attack if (activeChar.getAppearance().getInvisible() && !activeChar.isGM()) return; Создаем файл: /java/sf/net/l2j/gameserver/handler/itemhandlers/InvisiblePotion.java Открываем: /java/net/sf/l2j/gameserver/handler/ItemHandler.java Добавляем импорты: import net.sf.l2j.gameserver.handler.itemhandlers.InvisiblePotion; Ниже добавим: registerItemHandler(new InvisiblePotion()) Открываем: /java/net/sf/l2j/Config.java Добавляем: // Invisible Potions public static boolean CTF_ALLOW_POTIONS; public static int CTF_EFFECT_DURATION_POTIONS; Найдем: Properties altSettings = new Properties(); InputStream is = new FileInputStream(new File(ALT_SETTINGS_FILE)); altSettings.load(is); is.close(); И добавим: // Invisible Potions CTF_ALLOW_POTIONS = Boolean.parseBoolean(l2jmodsSettings.getProperty("CTFAllowPotions", "False")); CTF_EFFECT_DURATION_POTIONS = Integer.parseInt(l2jmodsSettings.getProperty("CTFAllowPotionsDuration", "1200000"));//Defaults 20 Min. Откроем конфиг altsettings и добавим туда: # Invisible potions. Defaults FalseCTFAllowPotions = False # EFFECTDURATION Default 1200000 / 20 min. 20 * 60 * 1000 = 1200000 millisecondsCTFAllowPotionsDuration = 1200000 Добавим скил: <skill id="9007" levels="1" name="Invisible Potion"> <set name="target" val="TARGET_NONE"/> <set name="skillType" val="NOTDONE"/> <set name="operateType" val="OP_ACTIVE"/> <set name="castRange" val="-1"/> <for> </for></skill> Добавить предмет в базу: INSERT INTO `etcitem` (`item_id`,`name`,`crystallizable`,`item_type`,`weight`,`consume_type`,`material`,`crystal_type`,`duration`,`price`,`crystal_count`,`sellable`,`dropable`,`destroyable`,`tradeable`,`oldname`,`oldtype`)VALUES ('9996','Invisible Potion','false','potion','180','stackable','liquid','none','-1','80','0','true','true','true','true','InterludeItem','potion'); Ну и естественно добавить нужные записи в клиент, для отображения банок, ну и на юзание скила. Вроде не чего не упустил, скомпилиться должно без проблем. Compiele Log Buildfile: D:\workspace\l2j_pp\l2jpp_core\build.xmlcompile: [javac] Compiling 2 source files to D:\workspace\l2j_pp\l2jpp_core\build\classes jar: [jar] Building jar: D:\workspace\l2j_pp\l2jpp_core\build\l2jpp.jar [copy] Copying 1 file to D:\workspace\l2j_pp\l2jpp_core\build\dist\libraries dist: [zip] Building zip: D:\workspace\l2j_pp\l2jpp_core\build\L2J_PP.zip BUILD SUCCESSFUL Total time: 4 second
  22. Я потел, копипастил, украшал, выравнивал, ппц. А ты так..... фу таким быть! Такие обьемные цитаты, корректнее было бы в спойлер ныкать!
  23. Думаю етот гайд пригодится многим нашим пользователям Теперь каждый пользователь может попробовать создайть свой собственный квест для своего сервера.Удачи вам!! Первое что нужно сделать, это добавить необходимые Java классы в квест. (net.sf.l2j.gameserver.model.quest). Код: Затем необходимо добавить несколько констант, что сделает квест удобочитаемым. Если этого не сделать, то могут возникнуть сложности с редактированием квеста в будущем. Константы нашего квеста – это ID NCP и итемов. Код: Функция для получения количества квестовых предметов (keltir fangs) у игрока. (st должна быть в QuestState): Код: Функция для завершения квеста (st должна быть в QuestState): Код: Тут объявляем квест выполненным, сбрасываем квестовый дроп, забираем все клыки у игрока и даем ему награду. Затем сообщаем серверу, что квест завершен и больше не повторяется. (st.exitQuest(False)) И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState): Код: Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJyth on. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал. Код: Метод init – это конструктор Jython класса, который вызывает конструктор Java класса. Конструктор имеет параметры: • self – ссылка на себя. • id – численный идентификатор квеста для клиента. • name – имя квеста, которое будет опубликовано непосредственно с самом сервере. • descr – имя описания квеста, показываемое игроку, когда берет квест у NCP, у которого можно взять, кроме этого квеста, еще и другой. Метод onEvent вызывается от Явы. Осуществляет начало квеста. Имеет параметры: • self – ссылка непосредственно на Tutorial Quest • event – строка для идентификации эвента для Явы. • st – ссылка на QuestState, для отслеживания текущего состояния игрока. В первой строке идет проверка на текущее состояние квеста непосредственно для игрока и состояние запивается в переменную ‘id’. Если квест только взят, то объявляем начало квеста (if id == CREATED : st.setState(STARTED)). Если квест уже выполнен, то ничего не делаем elif id == COMPLETED: pass) Если квест уже начат (STARTED), то вызывается функция проверки (check(), определенная выше) количества клыков у персонажа для завершения квеста. Мы не проверяем переменную ‘event’, т.к. в нашем примере (Tutorial quest) все события происходят от разговоров с NCP. Метод onEvent вызывается, если поговорить с NCP. И наконец, когда скелет квеста определен, мы создаем сам квест (и определяем его в самом сервере) и объявляем его. Код: Квест будет иметь id клиента – 201, идентификатор «Tutorial» и описание «Tutorial quest». Так же будет иметь 3 состояния: CREATED, STARTED, COMPLETED. Имена состояний могут использоваться для автоматического поиска необходимых .htm. Например для CREATED будет соответствовать 'Start.htm', для STARTED – ‘Started.htm’ и для COMPLETED будет показана 'Completed.htm'. Имена состояний используются так же для хранения состояния выполнения квеста в БД, когда игрок выходит из игры, так что имена не должны повторятся в пределах одного квеста. Так же мы должны определить начальное состояние квеста, когда игрок его только взял, и так же стартового NCP. Код: Обратите внимание: в файле htm стартового NCP обязательно должна быть ссылка на квест: Код: Теперь необходимо добавить дроп для этого квеста при состоянии STARTED, для того, что бы получить необходимые вещи. Код: Для этого квеста больше ничего не надо. Все необходимое для корректной работы квеста уже добавили. Вот полный текст квеста: Код: Теперь рассмотрим, как это работает. Игрок подходит к начальному NCP (в данном случае 7056), нажимает на «Quest». Квест будет создан и состояние квеста перейдет к CREATED и игроку будет показана страничка Start.htm с описанием квеста. Тогда метод onEvent, поле открытия странички Start.htm переведет состояние квеста в STARTED и игроку будет показана страничка Started.htm, где будет опсание того, как найти keltirs и .т.д. При состоянии STARTED будет зарегистрирован дроп «fangs» при убийстве keltirs. Игрок может вернуться к стартовому NCP и спросить о квесте – метод onEvent будет вызван снова. Если у игрока не хватает необходимого количества предметов, то метод check() не переведет квест в следующее состояние и Started.htm будет показана снова. Но если игрок собрал необходимее количество предметов (в данном случае 4 клыка), то метод check() вызовет метод completed() который переведет квест в новое состояние COMPLETED, заберет все клыки, даст карту мира, т.к. это награда за квест, покажет Completed.htm и завершит квест. Теперь давайте сделаем наш квест более похожим на то, что он должен из себя представлять. Прежде всего у нас есть 3 метода для объявления их в Яве – onTalk, onKill и onEvent. Если методы onTalk и onKill не объявлены, то за них все будет делать метод onEvent, т.е. определять квестовых монстров и вызывать диалоги NCP. Есть примечание, методы onTalk и onKill будут вызывать только диалоги с NCP в зависимости от текущего состояния квеста. Метод onKill будет вызываться только тогда, когда мы убиваем квестового монстра. Давайте рассмотрим как вызывается метод onKill при убийстве keltir в состоянии квеста STARTED: Код: и метод onKill в классе Quest: Код: Метод onKill (а так же метод onTalk) имеет следующие параметры: • self – квест • npcId – ID NCP, которого мы должны убивать (если это метод onTalk, то ID того NCP, с которым мы должны поговорить). • st – текущее состояние игрока. В этом методе мы проверяем и отмечаем, является ли убитый NCP keltir’ом. В основном эта проверка не нужна, т.к. у нас только KELTIR_NPC_ID. Затем проверяем количество предметов (в данном случае количество клыков), и если их вообще нет, то возвращаем строку "Chat0.htm", если только один предмет, то возвращаем строку "Chat1.htm", если же предметов 4 или больше, то "Chat4.htm". Если строка возвращена из методов onEvent, onKill или onTalk, то сервер покажет соответствующие htm. В Chat0.htm может иметь следующий текст: «Вы не имеете ни одного клыка, возвращайтесь позже, когда соберете 4 штуки и бла, бла, бла…», в Chat1.htm может быть следующий текст: «У Вас всего 1 клык, по этому соберите еще…». В Chat4.htm – «Вы собрали необходимое количество предметов, возвращайтесь к вашему тренеру, что бы завершить квест…» Примечание: если в строка return начинается с "", то будет показана страничка html с текстом, который стоит далее. Так вместо: Код: можно поставить: Код: Так же если строка заканчивается без .htm или в начале нет , то текст будет выведен, как системное сообщение в окне чата. В нашем случае мы сделаем так, что бы при каждом убийстве keltik выводилось системное сообщение: «Собрано N из 4-х клыков». Наш код для onKill имеет один недостаток. Он будет постоянно показывать Chat0.htm, Chat1.htm и Chat4.htm, нам же необходимо, что бы Chat0.htm и Chat1.htm показывались только один раз. Как нам это сделать? С помощью переменных. В каждом квесте строки могут храниться с помощью переменных. Эти переменные сохраняются в Вашей БД. В каждом методе мы можем назначить, прочитать и удалить переменные. Давайте изменим метод onKill, так что бы каждый диалог вызывался только один раз. Код: Если у игрока нет клыков (n=0), то мы получаем занчение переменной 'chat0'. Когда метод onKill вызван в первый раз, то пока ни каких переменных не имеется и python возвращает значение None. В этом случае объявляется переменная и показывается диалог Chat0.htm. Когда мы убиваем keltir, но не получаем с него клык, функция st.get('chat0') возвращает строку true, а не None. И во второй раз окно с Chat0.htm не появится, но в окне чата появится строчка «Collected 0 of 4 fangs». По тому же принципу сделано и с Chat1.htm. Вот конечный рабочий вариант квеста: Код: Удачи в работе! Источник - l2maxi
×
×
  • Создать...