[help]скрипты
вот решил написать скрипт телепортера, который проверяет на наличие определенных предмтов, что-то пока не выходит(не силен я в этом языке) если кто может помочь, то я буду очень благодарен!!!
вот код:
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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
qn = "1100_teleport_with_charm"
#ORC_GATEKEEPER_CHARM = 1658
#DWARF_GATEKEEPER_TOKEN = 1659
#4355 = 4355
#4357 = 4357
ORC_GATEKEEPER_CHARM = 4355
DWARF_GATEKEEPER_TOKEN = 4357
ITEMS_CHECK = [7860,7861,7862,7863,7864,7865,7866,7867,7868,7869]
WHIRPY = 99998
TAMIL = 99998
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onTalk (Self,npc,player):
st = player.getQuestState(qn)
npcId = npc.getNpcId()
if npcId == TAMIL:
if st.getQuestItemsCount(ITEMS_CHECK) >= 1:
# st.getPlayer().teleToLocation(1,1,1)
# else:
st.exitQuest(1)
if st.getQuestItemsCount(ORC_GATEKEEPER_CHARM) >= 1:
st.takeItems(ORC_GATEKEEPER_CHARM,1)
st.getPlayer().teleToLocation(139795,-176778,-1541)
if st.getQuestItemsCount(DWARF_GATEKEEPER_TOKEN) >= 1:
st.takeItems(DWARF_GATEKEEPER_TOKEN,1)
st.getPlayer().teleToLocation(152391,-177983,842)
st.exitQuest(1)
return
else:
st.exitQuest(1)
return "30576-01.htm"
QUEST = Quest(1100,qn,"Teleports")
for i in [ WHIRPY, TAMIL ] :
QUEST.addStartNpc(i)
QUEST.addTalkId(i)
кто знает, что тут не так, отпишитесь в коментах
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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
qn = "1100_teleport_with_charm"
#ORC_GATEKEEPER_CHARM = 1658
#DWARF_GATEKEEPER_TOKEN = 1659
#4355 = 4355
#4357 = 4357
ORC_GATEKEEPER_CHARM = 4355
DWARF_GATEKEEPER_TOKEN = 4357
WHIRPY = 99998
TAMIL = 99998
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onTalk (Self,npc,player):
st = player.getQuestState(qn)
npcId = npc.getNpcId()
if npcId == TAMIL:
if st.getQuestItemsCount(ORC_GATEKEEPER_CHARM) >= 1:
st.takeItems(ORC_GATEKEEPER_CHARM,1)
st.getPlayer().teleToLocation(139795,-176778,-1541)
if st.getQuestItemsCount(DWARF_GATEKEEPER_TOKEN) >= 1:
st.takeItems(DWARF_GATEKEEPER_TOKEN,1)
st.getPlayer().teleToLocation(152391,-177983,842)
st.exitQuest(1)
return
else:
st.exitQuest(1)
return "30576-01.htm"
QUEST = Quest(1100,qn,"Teleports")
for i in [ WHIRPY, TAMIL ] :
QUEST.addStartNpc(i)
QUEST.addTalkId(i)
вот такой скрипт работает хорошо, тоесть он просматривает наличие монетки в инвентаре - если 1 монетка, то 1 комнда, если другая, то вторая, а вот как быть с проверкой вещей в твоем инвентаре(как на олимп)
я уже перепробовал 1000 вариантов(( везде пишет Script error.....
Смотри за логикой скрипта:
Если НПЦ тот и ты нажимаешь в его штмл на ссылку твоего квеста есть 4 варианта:
1) Есть только 1 итем - мы ТПшимся в 1 место, мы рады
2) Есть только 2 итем - мы ТПшимся во 2 место, мы рады
3) Есть оба итема - Сначала нас начнёт ТПшить в 1 место, а потом сразу во 2, так как выполняются оба условия. Причём заберёт оба итема. Тут могут быть ошибки.
4) Нет ни одного итема - вернёт текст.
Как исправить?
Сделать на каждую точку ТП свой скрипт или реализовать в классе OnEvent..
Как сделать чтобы проверяло на наличие итемов?
if st.getQuestItemsCount(ORC_GATEKEEPER_CHARM) and not st.getQuestItemsCount(BAD_ITEM1) and not st.getQuestItemsCount(BAD_ITEM2).... :
— 30
что мешает сделать банальную проверку 1 итем тп в 1 зону если нет то проверяем итем №2 если есть тп во вторую и тд. иначе
если ты хочешь чтоб в зависимости от количества монет было тп то тут только с меню выбора одной проверкой количества не обойдешься
— Бойтесь
saracin: что мешает сделать банальную проверку 1 итем тп в 1 зону если нет то проверяем итем №2 если есть тп во вторую и тд. иначе
если ты хочешь чтоб в зависимости от количества монет было тп то тут только с меню выбора одной проверкой количества не обойдешься
А если оба?
— 30
вот как раз при if st.getQuestItemsCount(ORC_GATEKEEPER_CHARM) and not st.getQuestItemsCount(BAD_ITEM1) and not st.getQuestItemsCount(BAD_ITEM2).... : выдает следующую ошибку (на проверку в ГС проходит) Script error, если ставлю иначе, то пишет синтаксис еррор((( если кто может написать без ошибок, прям напишите, как это должно выглядеть!
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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
qn = "1100_teleport_with_charm"
#ORC_GATEKEEPER_CHARM = 1658
#DWARF_GATEKEEPER_TOKEN = 1659
#4355 = 4355
#4357 = 4357
ORC_GATEKEEPER_CHARM = 4355
DWARF_GATEKEEPER_TOKEN = 4357
WHIRPY = 99998
TAMIL = 99998
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onTalk (Self,npc,player):
st = player.getQuestState(qn)
npcId = npc.getNpcId()
if npcId == TAMIL:
if st.getQuestItemsCount(ITEMS_CHECK) >= 1:
st.exitQuest(1)
else:
if st.getQuestItemsCount(ORC_GATEKEEPER_CHARM) >= 1:
st.takeItems(ORC_GATEKEEPER_CHARM,1)
st.getPlayer().teleToLocation(139795,-176778,-1541)
if st.getQuestItemsCount(DWARF_GATEKEEPER_TOKEN) >= 1:
st.takeItems(DWARF_GATEKEEPER_TOKEN,1)
st.getPlayer().teleToLocation(152391,-177983,842)
st.exitQuest(1)
return
else:
st.exitQuest(1)
return "30576-01.htm"
QUEST = Quest(1100,qn,"Teleports")
for i in [ WHIRPY, TAMIL ] :
QUEST.addStartNpc(i)
QUEST.addTalkId(i)
А вот такой вариант как оформить (я написал чисто логически) сорри я этого языка не знаю....помогите грамотно это офрмить, а насчет 2-х итемов, для меня это не столь важно!!!!!!потому как эти итемы служат только лишь идентификаторами команд, 1 монетка = 1 команда, 2 монетка = 2 команда, и еще как присвоить тем, кто телепортируется в 1 зону //setteam 1 а в другую, соответственно, //setteam 2 и чтобы потом (через определенное время) телепортировало назад, а проще говоря мне нужены исходники ТВТ, если знаете где их взять, или как это выглядит, выложите пожалуйста сюда!!
заранее большое спасибо!!!
#
# Created by DraX on 2005.07.20
#
import sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
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
qn = "1100_teleport_with_charm"
#ORC_GATEKEEPER_CHARM = 1658
#DWARF_GATEKEEPER_TOKEN = 1659
#4355 = 4355
#4357 = 4357
ORC_GATEKEEPER_CHARM = 4355
DWARF_GATEKEEPER_TOKEN = 4357
ITEMS_CHECK = [12971,12972]
WHIRPY = 99998
TAMIL = 99998
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onTalk (Self,npc,player):
st = player.getQuestState(qn)
npcId = npc.getNpcId()
if npcId == TAMIL:
if st.getQuestItemsCount(ORC_GATEKEEPER_CHARM) >= 1 and not st.getQuestItemsCount(ITEMS_CHECK):
st.takeItems(ORC_GATEKEEPER_CHARM,1)
st.getPlayer().teleToLocation(139795,-176778,-1541)
return
if st.getQuestItemsCount(DWARF_GATEKEEPER_TOKEN) >= 1 and not st.getQuestItemsCount(ITEMS_CHECK):
st.takeItems(DWARF_GATEKEEPER_TOKEN,1)
st.getPlayer().teleToLocation(152391,-177983,842)
st.exitQuest(1)
return
else:
st.exitQuest(1)
return "30576-01.htm"
QUEST = Quest(1100,qn,"Teleports")
for i in [ WHIRPY, TAMIL ] :
QUEST.addStartNpc(i)
QUEST.addTalkId(i)
вот с этим скриптом он если у тебя нету предмета ORC_GATEKEEPER_CHARM или DWARF_GATEKEEPER_TOKEN он пускает в меню эвентера, а когда ты их уже купил, и опять входишь в меню эвентера, то он выдает Script Error


