Даровка народ, в общем две траблы у меня... Решить самому неполучилось, запрашиваю поддержку! Трабла первая: Хотел сделать квест, нашел нужное ПО здесь, и на всякий случий гайд, для ручного написания, тоже здесь, но проблемма в том что программа не хочет конектится к базе, поэтому не работает, а гайд для другой сборки... Помогите народ разобраться с квестом?
С меня не только баф будет, я квест посвящу тому кто поможет вылезти из проблеммы.
Трабла вторая: Чат! Хотел сделать НПЦ который будет ходить и орать, хотябы в окресности, в мир уж я не загадываю... Гайда не нашел, поэтому написал...
По поводу квеста:
Суть проста... Дан NPC (Sentinel (31033)) от него квест, убить 200 (Kaboo Orc Grunt (20470)) после выполнения получить награду 3 коина, только вот я непойму как реализовать в код это моя сборка 3.1 Hellbound ... Пожалуйста помогите! НПЦ вашим ником назову, и баф конечно же с меня! Могу в анонсы благодарность повесить!
Трабла вторая: Чат! Хотел сделать НПЦ который будет ходить и орать, хотябы в окресности, в мир уж я не загадываю... Гайда не нашел, поэтому написал...
Насколько я помню, есть в БД такая таблица walker routes. Там можно забить id npc, точки, через которые он ходит, и сообщение в чат, которое он говорит на каждой точке.
Сообщение отредактировал WIZZARD - Пятница, 01 Июня 2012, 07:55
Ну просто проблемма в том что я тут нашол тему, где описывалось создание квеста, но я так понял, там вообще не про мою сборку говорилось... Сейчас попробую чтонибудь подобное написать, скину... просто трудновато первый раз на незнакомом скрипте писать...
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
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)
Добавлено (01.06.2012, 17:45) --------------------------------------------- А вот то что я думаю по этому поводу:
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 =============================================================================
Потом идет функция говорящяя что после удачной сдачи квеста, квест не повторяется
st.exitQuest(False)
Но мне нужно чтобы было как ежедневка, и квест можно было делать постоянно!
def check(st) : if getCount(st) >= 4 : completed(st) return
То что выше: вспомогательная функция для проверки необходимого количества предметов у игрока для завершения квеста. (st должна быть в QuestState)
Далее... Затем мы объявляем непосредственно сам класс quest. Quest – класс python, который расширяет java класс net.sf.l2j.gameserver.model.quest.jython.QuestJyth on. Затем мы объявляем метод onEvent, который вызывается Явой, если квест кто то начал. (Вообще непонял этого комента....)
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)
Смотрел в своей сборке, ни в одном квесте нечего подобного не видел!
Обратите внимание: в файле htm стартового NCP обязательно должна быть ссылка на квест: <a action="bypass -h npc_%objectId%_Quest">
Теперь необходимо добавить дроп для этого квеста при состоянии STARTED, для того, что бы получить необходимые вещи. Куда добавлять я хз....
Добавлено (01.06.2012, 17:48) --------------------------------------------- Прошу поддержки... Квест очень нужен, но разобрав скрипт данного гайда, думаю не под мою сборку.... Вот пример с моей сборки:
# Made by Mr. Have fun! Version 0.2 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
def onTalk (self,npc,player): st = player.getQuestState(qn) htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>" if not st: return htmltext
if npcId == DARIN and cond == 0 and onlyone == 0 : if player.getLevel() >= 2 : if cond < 15 : htmltext = "30048-02.htm" else: htmltext = "30048-01.htm" st.exitQuest(1) else: htmltext = "<html><body>Quest for characters level 2 and above.</body></html>" st.exitQuest(1) elif npcId == DARIN and cond == 0 and onlyone == 1 : htmltext = "<html><body>This quest has already been completed.</body></html>" elif id == State.STARTED : if npcId == ROXXY and cond and onlyone == 0: if ItemsCount_RK == 0 and ItemsCount_DL : htmltext = "30006-01.htm" st.takeItems(DARINGS_LETTER,-1) st.giveItems(RAPUNZELS_KERCHIEF,1) st.set("cond","2") st.set("id","2") st.playSound("ItemSound.quest_middle") elif ItemsCount_BP or ItemsCount_DR : htmltext = "30006-03.htm" elif ItemsCount_RK : htmltext = "30006-02.htm" elif npcId == DARIN and cond and ItemsCount_RK > 0 and onlyone == 0 : htmltext = "30048-08.htm" st.takeItems(RAPUNZELS_KERCHIEF,-1) st.giveItems(DARINGS_RECEIPT,1) st.set("cond","3") st.set("id","3") st.playSound("ItemSound.quest_middle") elif npcId == BAULRO and cond and onlyone == 0 : if ItemsCount_DR > 0 : htmltext = "30033-01.htm" st.takeItems(DARINGS_RECEIPT,-1) st.giveItems(BAULS_POTION,1) st.set("cond","4") st.set("id","4") st.playSound("ItemSound.quest_middle") elif ItemsCount_BP > 0 : htmltext = "30033-02.htm" elif npcId == DARIN and cond and ItemsCount_RK == 0 and onlyone == 0 : if ItemsCount_DR > 0 : htmltext = "30048-09.htm" elif ItemsCount_BP > 0 : htmltext = "30048-10.htm" st.takeItems(BAULS_POTION,-1) st.giveItems(NECKLACE,1) st.set("cond","0") st.set("onlyone","1") st.exitQuest(False) st.playSound("ItemSound.quest_finish") else: htmltext = "30048-07.htm" return htmltext
QUEST = Quest(1,qn,"Letters of Love")
QUEST.addStartNpc(DARIN)
QUEST.addTalkId(DARIN)
QUEST.addTalkId(ROXXY) QUEST.addTalkId(BAULRO)
Добавлено (01.06.2012, 17:57) --------------------------------------------- Суть моего квеста должна быть простой, стоит НПЦ name: Поставлю ник того кто поможет с кв.... Потом скрин выложу даже... Ну так вот стоит нпц, у него берем кв, в кв говорится что этот НПЦ просит убить монстров id: 20470, в количестве 200 шт, и принести с их тушок предмет 111111, по здаче кв в подарок он дас 3 4037.... Кв то простой, а мароки ужас сколько....
Кстати, нет не у кого нормально работающей программы для создания своего щопа, не ГМ, обычного торговца.... Или подскажите где отредактировать игровых НПЦ торговцев, например торговца с оружием?