Телепорт за определеный итем: EMU-RT 482
В Таблицах SQL сборки 482, в родных ТП указанна только требуемое количество итемов, а не их ID. Мне нужно сделать так, чтобы при наличии определенного итема, НПС телепортировал в определенную точку карты и забирал итем.
Пробовал переделать квест 1104_NewbieTravelToken [SPOILER]# Newbie Travel Token Teleport - by DrLecter import sys from net.l2emuproject.gameserver.model.quest import State from net.l2emuproject.gameserver.model.quest import QuestState from net.l2emuproject.gameserver.model.quest.jython import QuestJython as JQuest qn = "1104_NewbieTravelToken" DATA={ 30600:[ 12111, 16686,-4584], #DE 30601:[115632,-177996, -896], #DW 30599:[ 45475, 48359,-3056], #EV 30602:[-45032,-113598, -192], #OV 30598:[-84081, 243227,-3728], #TI 32135:[-119697, 44532, 360] #KM } class Quest (JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def onEvent (self,event,st): if event.isdigit() : dest = int(event) if dest in DATA.keys() : x,y,z = DATA[dest] if x and y and z : st.getPlayer().teleToLocation(x,y,z) st.exitQuest(1) return def onTalk (Self,npc,player): st = player.getQuestState(qn) npcId = npc.getNpcId() if player.getLevel() >= 20 : htmltext = "1.htm" st.exitQuest(1) else: htmltext = str(npcId)+".htm" return htmltext QUEST = Quest(1104,qn,"Teleports") for i in DATA.keys() : QUEST.addStartNpc(i) QUEST.addTalkId(i)[/SPOILER] , для себя, но неполучилось. НПС просто игнорит. Помогите пожалуйста разобраться как самому сделать ТП за определенные итемы. |
Ответ: Телепорт за определеный итем: EMU-RT 482
Хороший скрипт взяли для "фундамента", но вот одного не понял, куда Вы удалили TOKEN, в котором и был указан ID предмета, который забирают?
[SOURCE="py"]qn = "1104_NewbieTravelToken" TOKEN = 8542 # предмет, который мы наглым образом отберем у бедного персонажа DATA={ 30600:[ 12160, 16554,-4583],# Деревня Темных Эльфов 30601:[115594,-177993, -912],# Деревня Гномов 30599:[ 45470, 48328,-3059],# Деревня Эльфов 30602:[-45067,-113563, -199],# Деревня Орков 30598:[-84053, 243343,-3729],# Деревня Людей 32135:[-119712, 44519, 368] # Деревня Камаель }[/SOURCE] Где указывать нужный предмет, я думаю вам понятно стало. Идем дальше. [SOURCE="py"] def onAdvEvent (self,event,npc, player) : htmltext = event st = player.getQuestState(qn) if not st : return if event.isdigit(): dest=int(event) if dest in DATA.keys(): x,y,z=DATA[dest] if x and y and z: if st.getQuestItemsCount(TOKEN): # проверка, есть ли у персонажа предмет с id 8542 st.takeItems(TOKEN,1) # предмет(ы) с id 8542 найден(ы), отберем 1 шт. st.getPlayer().teleToLocation(x,y,z) # телепортируем на указанные в DATA координаты else: # предмет с id 8542 не найден у персонажа, отсылаем его на... рынок st.exitQuest(1) # выходим из квеста return "Incorrect item count" # выводим сообщение о том, что нехватает предмета st.exitQuest(1) return[/SOURCE] Все расписал, думаю вопросов не будет. И последнее, квест будет работать только у персонажей < 20 уровня, ведь там есть проверка. [SOURCE="py"] def onTalk (Self,npc,player): st = player.getQuestState(qn) npcId = npc.getNpcId() if player.getLevel() >= 20: # проверяем персонажа и если его уровень больше или равен 20, то даем отбой htmltext="1.htm" st.exitQuest(1) else: htmltext=str(npcId)+".htm" return htmltext[/SOURCE] Приводим все в такое состояние и радуемся жизни. [SOURCE="py"] def onTalk (Self,npc,player): st = player.getQuestState(qn) npcId = npc.getNpcId() #if player.getLevel() >= 20: # проверяем персонажа и если его уровень больше или равен 20, то даем отбой # htmltext="1.htm" # st.exitQuest(1) #else: htmltext=str(npcId)+".htm" return htmltext[/SOURCE] |
Ответ: Телепорт за определеный итем: EMU-RT 482
Спасибо Вам за правку скрипта. Сделал как Вы сказали, но скрипт не работает.
1) Итоговый вид моего скрипта: [SPOILER] # Newbie Travel Token Teleport - by DrLecter import sys from net.l2emuproject.gameserver.model.quest import State from net.l2emuproject.gameserver.model.quest import QuestState from net.l2emuproject.gameserver.model.quest.jython import QuestJython as JQuest qn = "997_NewbieTP" TOKEN = 8542 DATA={ 7777:[ -112570, 87174,-12935], #1 7778:[-112381,87177, -12974], #2 7779:[ -112189, 87178,-12974], #3 } class Quest (JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def onAdvEvent (self,event,npc, player) : htmltext = event st = player.getQuestState(qn) if not st : return if event.isdigit(): dest=int(event) if dest in DATA.keys(): x,y,z=DATA[dest] if x and y and z: if st.getQuestItemsCount(TOKEN): st.takeItems(TOKEN,1) else: st.exitQuest(1) return "Incorrect item count" st.exitQuest(1) return def onTalk (Self,npc,player): st = player.getQuestState(qn) npcId = npc.getNpcId() if player.getLevel() >= 20: htmltext = "1.htm" st.exitQuest(1) else: htmltext = str(npcId)+".htm" return htmltext QUEST = Quest(997,qn,"custom") for i in DATA.keys() : QUEST.addStartNpc(i) QUEST.addTalkId(i) [/SPOILER] 2) Файл ошибки __init__.py.error [SPOILER] Error on: D:\Aristo-L2jServer\Work\l2emurt-game\dist\data\scripts\custom\997_NewbieTP\__init_ _.py.error.log Line: -1 - Column: -1 Traceback (innermost last): (no code object) at line 0 ValueError: Strings added to sha hashes must not contain characters with value > 255 ------ Дословно понял, что какое-то значение превышает допустимую длину, но как с этим бороться, не знаю. [/SPOILER] Буду весьма признателен, если Вы поможете мне разобраться в этом скрипте. Также буду очень благодарен, если Вы поделитесь ссылочкой на мануал по этим скриптам(основные Команды, Ввод переменных, привязка к ядру сервера.) |
Ответ: Телепорт за определеный итем: EMU-RT 482
Я вам дал рабочий вариант, проверенный, то что Вы показываете что-то кривое, питон не может работать без правильных переносов\пробелов и т.д. В массиве DATA (последняя строка) ошибка, откуда там появилась запятая?
|
Ответ: Телепорт за определеный итем: EMU-RT 482
Спасибо. Извините, что отнял Ваше время. Буду разбираться.
|
Ответ: Телепорт за определеный итем: EMU-RT 482
Добрые люди подскажите в чем косяк. Пытаюсь сделать квест для новичков, но почему то квест не запускается и никаких ошибок не выдает. Сборка таже, хтмлки все сделаны. Вот сам квест:
[SPOILER] Код:
import sys |
Ответ: Телепорт за определеный итем: EMU-RT 482
всем спасибо. сам все нашел и исправил
[SPOILER] Код:
import sys |
Текущее время: 14:44. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot