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

««†KENVOOD†»»

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

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

  • Посещение

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

    1
  • Отзывы

    0%

Весь контент ««†KENVOOD†»»

  1. шмот и без статов может работать проверено))
  2. Ухты а ссылку можно плиииз)))
  3. я те говорю пара пива ну на крайняк мне бывает сервак нравицо шмот на нем и я тебе сделаю эксклюзив))) Кстате вондер прав я так же как и кфан начинал именно с этого форума_) только маленький нюанс я чужие вещи за свои не выдаю теперь)
  4. Можеш в аську написать все сделаем)))
  5. застрелите меня зачем я мануалы пишу=((
  6. Ну предполагаеться что с тебя 50р на яндекс с меня нпс под твои запросы)
  7. Всегда можно попросить написать персонально под твой сервер)))я с тебя за каждого только на пиво возьму)))бесплатно делать никто не станет))
  8. ««†KENVOOD†»»

    Форум

    через админку)
  9. а еще проще логин ставить на другой порт и не заморачиваться потому что брут косячный только в шаре)))
  10. ну тогда защита базы от взлома)))и если чесно бесполезно это пароль пожоще и никто незайдет)))) простите уж за привередливость)))
  11. ««†KENVOOD†»»

    Сайт

    la2dash.xclan.ru могу этот тебе подогнать)))
  12. под скорию если делаеш смотри чтобы в импортах пробелов небыло она привиредливая зараза)))
  13. ««†KENVOOD†»»

    Файл Клиента

    Смотри скрипты класс мастера если он на скриптах)))можеш мне заодно скинуть))))штука походу классная))
  14. честно не знаю я корею поставил квадраты пропали))))
  15. та в эпилоге это по связкам файлов заморочка в основном потому что клиент берут у оффа а патч с левой стороны написаный немного под другую версию и по привязкам выходят косяки))) короч проще клиент другой качать если скорость позволяет)))
  16. А причем тут брут???? насколько я знаю брут это перебор методом акк пасс пасс пасс и т.д. причем происходит это так же как сидел бы человек и в поле ввода логин пасс в клиенте перебирал пароли и аккаунты))) только прогой la2brut и форсом быстрее все)))
  17. ой блин потом еще сохранить и кодировать вылетит окошко с версией протокола выбериш 413 и ок нажмеш все готово)
  18. Гыыыыыы l2.ini лежит в папке system игрового клиента т.е. в той которой игра установлена))))качаеш фаил едит запучкаеш жмеш открыть и декодировать ищеш папку с игрой в ней папку системс в папке l2.ini открываеш ищеш строку ServerAddr= меняеш на ServerAddr=127.0.0.1
  19. ««†KENVOOD†»»

    Webstress 10

    Гггг довольно распространенная проблема напиши мне я чем нить помогу возможно))))
  20. ««†KENVOOD†»»

    Проблемы

    1) ОТКРЫВАЕШ \GameServer\data\zones zones.xml ищеш </zone> <zone id="11028" type="Town" shape="NPoly" minZ="-3250" maxZ="-2600"> <!-- Dion Castle Town --> <stat name="townId" val="8" /> <stat name="taxById" val="2" /> <spawn X="19025" Y="145245" Z="-3107" /> <spawn X="18576" Y="145136" Z="-3104" /> <spawn X="18717" Y="145711" Z="-3097" /> <spawn X="18512" Y="145536" Z="-3100" /> <spawn X="18954" Y="144428" Z="-3000" /> <spawn X="19150" Y="143941" Z="-3020" /> <spawn X="19134" Y="144847" Z="-3020" /> <spawn X="19613" Y="145607" Z="-3020" /> <spawn X="18078" Y="145925" Z="-3020" /> <spawn X="17398" Y="145456" Z="-3000" /> <spawn X="17144" Y="145055" Z="-3000" /> <spawn X="19012" Y="145140" Z="-3020" /> <spawn X="17555" Y="170393" Z="-3400" isChaotic="true" /> <spawn X="17699" Y="170153" Z="-3400" isChaotic="true" /> <spawn X="17315" Y="170041" Z="-3400" isChaotic="true" /> <spawn X="17283" Y="170329" Z="-3400" isChaotic="true" /> <spawn X="17536" Y="170505" Z="-3400" isChaotic="true" /> <spawn X="17299" Y="170341" Z="-3400" isChaotic="true" /> <spawn X="17085" Y="170170" Z="-3400" isChaotic="true" /> <spawn X="17421" Y="169993" Z="-3400" isChaotic="true" /> <spawn X="17820" Y="170054" Z="-3400" isChaotic="true" /> <spawn X="18054" Y="170263" Z="-3400" isChaotic="true" /> <spawn X="17931" Y="170381" Z="-3400" isChaotic="true" /> Меняеш type="Town" на type="MotherTree" 2)фаил едитор говно либо ты по строчкам непопадаеш) 3)За спасибо писать тебе никто не будет))))))
  21. попробуй клиент в девелопер режиме запустить посмотри появяться ли они там и будут ли одеваться если нет то ошибка в дат файлах если да то в сервере))
  22. ««†KENVOOD†»»

    Квесты

    там в этой папке лог ошибки должен быть его бы увидеть)
  23. Обратите внимание: в файле htm стартового NCP обязательно должна быть ссылка на квест: STARTED.addQuestDrop(KELTIR_NPC_ID,FANGS_ITEM_ID,DROP_RATE) Для этого квеста больше ничего не надо. Все необходимое для корректной работы квеста уже добавили. Вот полный текст квеста: import sys from net.sf.l2j.gameserver.model.quest import State from net.sf.l2j.gameserver.model.quest import QuestState from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest KELTIR_NPC_ID = 12082 FANGS_ITEM_ID = 1859 DROP_RATE = 500000 WORLD_MAP_ITEM_ID = 1665 def getCount(st) : return st.getQuestItemsCount(FANGS_ITEM_ID) def completed(st) : st.setState(COMPLETED) st.clearQuestDrops() st.takeItems(FANGS_ITEM_ID,-1) st.giveItems(WORLD_MAP_ITEM_ID,1) st.exitQuest(False) return def check(st) : if getCount(st) >= 4 : completed(st) return class Quest (JQuest): def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def onEvent (self,event,st): id = st.getState() if id == CREATED : st.setState(STARTED) elif id == COMPLETED: pass elif id == STARTED : check(st) return QUEST = Quest(201,"Tutorial", "Tutorial quest") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(7056) STARTED.addQuestDrop(KELTIR_NPC_ID,FANGS_ITEM_ID,DROP_RATE) Теперь рассмотрим, как это работает. Игрок подходит к начальному 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: STARTED.addKillId(KELTIR_NPC_ID) и метод onKill в классе Quest: class Quest (JQuest): ... def onKill (self,npcId,st): if npcId == KELTIR_NPC_ID: n = getCount(st) if n == 0: return "Chat0.htm" elif n == 1: return "Chat1.htm" elif n >= 4: return "Chat4.htm" return "Collected "+str(n)+" of 4 fangs" return Метод 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>", то будет показана страничка html с текстом, который стоит далее. Так вместо: return "Chat4.htm" можно поставить: return "<html><body>Return to your trainer to complete the quest</body></html>" Так же если строка заканчивается без .htm или в начале нет <html>, то текст будет выведен, как системное сообщение в окне чата. В нашем случае мы сделаем так, что бы при каждом убийстве keltik выводилось системное сообщение: «Собрано N из 4-х клыков». Наш код для onKill имеет один недостаток. Он будет постоянно показывать Chat0.htm, Chat1.htm и Chat4.htm, нам же необходимо, что бы Chat0.htm и Chat1.htm показывались только один раз. Как нам это сделать? С помощью переменных. В каждом квесте строки могут храниться с помощью переменных. Эти переменные сохраняются в Вашей БД. В каждом методе мы можем назначить, прочитать и удалить переменные. Давайте изменим метод onKill, так что бы каждый диалог вызывался только один раз. def onKill (self,npcId,st): if npcId == KELTIR_NPC_ID: n = getCount(st) if n == 0: if st.get('chat0') == None : st.set("chat0", "true") return "Chat0.htm" elif n == 1: if st.get('chat1') == None : st.set("chat1", "true") return "Chat1.htm" elif n >= 4: return "Chat4.htm" return "Collected "+str(n)+" of 4 fangs" return Если у игрока нет клыков (n=0), то мы получаем занчение переменной 'chat0'. Когда метод onKill вызван в первый раз, то пока ни каких переменных не имеется и python возвращает значение None. В этом случае объявляется переменная и показывается диалог Chat0.htm. Когда мы убиваем keltir, но не получаем с него клык, функция st.get('chat0') возвращает строку true, а не None. И во второй раз окно с Chat0.htm не появится, но в окне чата появится строчка «Collected 0 of 4 fangs». По тому же принципу сделано и с Chat1.htm. Вот конечный рабочий вариант квеста: import sys from net.sf.l2j.gameserver.model.quest import State from net.sf.l2j.gameserver.model.quest import QuestState from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest KELTIR_NPC_ID = 12082 FANGS_ITEM_ID = 1859 DROP_RATE = 500000 WORLD_MAP_ITEM_ID = 1665 def getCount(st) : return st.getQuestItemsCount(FANGS_ITEM_ID) def completed(st) : st.setState(COMPLETED) st.clearQuestDrops() st.takeItems(FANGS_ITEM_ID,-1) st.giveItems(WORLD_MAP_ITEM_ID,1) st.exitQuest(False) return def check(st) : if getCount(st) >= 4 : completed(st) return class Quest (JQuest): def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def onEvent (self,event,st): id = st.getState() if id == CREATED : st.setState(STARTED) elif id == COMPLETED: pass elif id == STARTED : check(st) return def onKill (self,npcId,st): if npcId == KELTIR_NPC_ID: n = getCount(st) if n == 0: if st.get('chat0') == None : st.set("chat0", "true") return "Chat0.htm" elif n == 1: if st.get('chat1') == None : st.set("chat1", "true") return "Chat1.htm" elif n >= 4: return "Chat4.htm" return "Collect "+str(n)+" of 4 fangs" return QUEST = Quest(201, "Tutorial", "Tutorial quest") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(7056) QUEST.addStartNpc(7012) QUEST.addStartNpc(7009) QUEST.addStartNpc(7011) STARTED.addQuestDrop(KELTIR_NPC_ID,FANGS_ITEM_ID,DROP_RATE) STARTED.addKillId(KELTIR_NPC_ID) STARTED.addTalkId(7056) STARTED.addTalkI d(7012) STARTED.addTalkId(7009) STARTED.addTalkId(7011)
×
×
  • Создать...