Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   htm bypass -h (https://forum.zone-game.info/showthread.php?t=16332)

NiddHoggUA 15.10.2011 23:23

htm bypass -h
 
Помогите разобраться...
у меня есть npc, его id 40002
есть htm для него, то есть та, которая показывается когда нажимаешь на нпц. (40002.htm)

в этом файле есть такая кнопка и в ней такой екшн:

Код:

bypass -h npc_%objectId%_Quest 912_buffer
что оно делает.... оно переносит меня на на другую страницу...

и что же мне надо? Мне надо что бы при нажатие кнопки происходило какое то действие.

Что то вроде :
Код:

bypass -h npc_%objectId%_Quest 912_buffer fullbuff
или же
Код:

bypass -h Quest 912_buffer fullbuff
где fullbuff - event в скрипте который отвечает за баф,
а 912_buffer - имя квеста.

только это не работает...
подскажите как сделать это правильно

Dеmon 16.10.2011 03:20

Re: htm bypass -h
 
Неплохо бы выложить скриптец, а то как-то не очень удобно гадать.

NiddHoggUA 16.10.2011 11:03

Re: htm bypass -h
 
скрипт чего именно?

mazillka 16.10.2011 11:15

Re: htm bypass -h
 
Цитата:

Сообщение от NiddHoggUA (Сообщение 143639)
скрипт чего именно?


наверное бафера?

NiddHoggUA 16.10.2011 12:12

Re: htm bypass -h
 
пф не знаю зачем но ок скину
Код:

import sys
from l2jlionna.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from l2jlionna.gameserver.datatables import SkillTable
from l2jlionna                              import L2DatabaseFactory
from l2jlionna.gameserver.model.quest import State
from l2jlionna.gameserver.model.quest import QuestState
from l2jlionna.gameserver.model.quest.jython import QuestJython as JQuest

qn = "912_buffer"

#Включение\выключение разделов. Для выключения замените ON на OFF
attack                = "ON"
defence        = "ON"
resist                = "ON"
support        = "ON"
warcryer          = "ON"
overlord        = "ON"
song                = "ON"
dance                = "ON"
noble                = "ON"
summon                = "ON"
cubic                = "ON"

NPC          = [40002]
prise_ID        = 57
QuestId      = 912
vip_ID        = 1166
QuestName    = "buffer"
QuestDesc    = "custom"
InitialHtml  = "buff.htm"

#Выставление цен на бафы
min_level                        = 1
max_level                        = 90
min_prise                        = 1
buff_prise                  = 0
Chant_prise                  = 0
song_prise                        = 0
Dance_prise                        = 0
Hero_prise                        = 0
Noble_prise                        = 0
Summon_prise                = 0
Prophecy_prise                = 0
cubic_prise                  = 0
Full_buff_f1_prise        = 0
Full_buff_f2_prise        = 0
Full_buff_f3_prise        = 0
Full_buff_m1_prise        = 0
Full_buff_m2_prise        = 0
Full_buff_m3_prise        = 0
all_song_prise                = 0
all_dance_prise        = 0

print "importing custom: 912_buffer    OK"

class Quest (JQuest) :

        def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)


        def onEvent(self,event,st):
                htmltext = event
                count=st.getQuestItemsCount(prise_ID)
                if count < min_prise :
                        htmltext = "<html><head><body>У вас не достаточно денег.</body></html>"
                        if st.getPlayer().getLevel() < min_level :
                                htmltext = "<html><head><body>У вас слишком маленький уровень.</body></html>"
                                if st.getPlayer().getLevel() < max_level :
                                        htmltext = "<html><head><body>У вас слишком высокий уровень.</body></html>"
                else:
                        st.takeItems(prise_ID,0)
                        st.getPlayer().setTarget(st.getPlayer())
                       
                        if event == "30100":
                            amount=st.getQuestItemsCount(vip_ID)
                            if amount < min_prise :
                                        return "no_vip.htm"
                                        st.setState(State.COMPLETED)
                            else:
                                        return "vip.htm"
                                        st.setState(State.COMPLETED)
                                       
                        if event == "fullbuff":
                                st.getPlayer().setTarget(st.getPlayer().getPet())
                                if st.getPlayer().getPet() == None :
                                        return "no_pet.htm"               
                                        st.setState(State.COMPLETED)
                                else:
                                        st.getPlayer().getPet().stopAllEffects()
                                        SkillTable.getInstance().getInfo(1068,3).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1040,3).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1086,2).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1204,2).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1077,3).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1242,2).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1268,4).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1035,4).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1036,2).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1045,6).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1388,3).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1363,1).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(271,1).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(275,1).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(274,1).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(269,1).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(264,1).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(304,1).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(364,1).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(4699,13).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())       
                                        SkillTable.getInstance().getInfo(1085,3).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1059,3).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1078,6).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1204,2).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1048,6).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1397,3).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1303,2).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                       
                                        SkillTable.getInstance().getInfo(1040,3).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())                                               
                                       
                               
                        if htmltext != event:
                                st.setState(COMPLETED)
                                st.exitQuest(1)
                return htmltext


        def onTalk (self,npc,player):
          st = player.getQuestState(qn)
          htmltext = "<html><head><body>I have nothing to say to you</body></html>"
          st.setState(State.STARTED)
          return InitialHtml
         

QUEST      = Quest(912,qn,"custom")


for npcId in NPC:
 QUEST.addStartNpc(npcId)
 QUEST.addTalkId(npcId)

Добавлено через 38 секунд
то есть мне надо что бы при нажатие на кнопку сразу кидало на Event "fullbuff"

Azagthtot 16.10.2011 12:15

Re: htm bypass -h
 
Давайте поймем разницу между
npc_%objectId%_Quest
и просто Quest
в первом случае беретеся квест из привязанных к NPC (т.е. для тех NpcId,Ю для которых в квесте вызван addStartId и addTalkId)
во втором, квест будет искаться в списке квестов (для которых создан QuestState) у игрока.
Поэтому, если вы не уверены, взят ли квест у пользователя используйте вызов
npc_%objectId%_Quest и естественно, убедитесь что квест привязан к этому NPC

NiddHoggUA 16.10.2011 12:23

Re: htm bypass -h
 
спасибо за ответ

хорошо, допустим я буду использовать
npc_%objectId%_Quest 912_buffer

как мне сделать что бы оно переходило не на onFirstTalk а на мой Event(fullbuff) при нажатие на ту кнопку?

Azagthtot 16.10.2011 12:34

Re: htm bypass -h
 
написать имя эвента после имени квеста :)

NiddHoggUA 16.10.2011 18:13

Re: htm bypass -h
 
:D

npc_%objectId%_Quest 912_buffer fullbuff

и всё? правильно? оО

mazillka 16.10.2011 18:16

Re: htm bypass -h
 
Цитата:

Сообщение от NiddHoggUA (Сообщение 143700)
:D

npc_%objectId%_Quest 912_buffer fullbuff

и всё? правильно? оО

а почему бы вам самостоятельно не проверить? делов то на 2 минуты

NiddHoggUA 16.10.2011 18:29

Re: htm bypass -h
 
просто я вроде так уже делал и не работало. Окей сейчас отпишу...

Добавлено через 13 минут
как сделать так, что бы как только нажимаешь на нпц тебя сразу телепортело.(как сделано в Паган Темпл)?

Azagthtot 16.10.2011 18:44

Re: htm bypass -h
 
Повесить на npc событие onFirstTalk и телепортить в нем

NiddHoggUA 16.10.2011 18:46

Re: htm bypass -h
 
npc_%objectId%_Quest 912_buffer fullbuff

не работает. Пишет что у меня нету квеста

а даже после того как я "возьму этот квест" всё равно не работает.



но он ферст толк это же вроде когда нажимаешь на какую то кнопку... или я не прав?
или он вызывается когда нажимаешь на нпц?
почему тогда появлеться 40002.htm а не тот который у меня в скрипте на onfirsttalk?

Azagthtot 16.10.2011 18:54

Re: htm bypass -h
 
Хотя бы потому что у вас событие onFirstTalk не подключено к NPC.
Не работает? Значит ваша сборка автоматически не формирует QuestState для вызова bypass Quest name event

NiddHoggUA 16.10.2011 18:57

Re: htm bypass -h
 
всё всё я продуплил =) сейчас буду тестить onFirstTalk и отпишу...

окей я переделал ...
Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                st.setState(State.STARTED)
                return InitialHtml

теперь когда я нажимаю на моба, вызывается окошко InitialHtml
но... в этом htm есть другие кнопки. И когда нажимаешь на них нечего не происходит.

когда я использовал onTalk то всё работало без проблем...

Azagthtot 16.10.2011 21:16

Re: htm bypass -h
 
Потому что ерунду пишите.
Во-первых, уже года 2 минимум нет необходимости вручную проставлять состояние квеста,
во-вторых, как у вас выглядат байпасы для этих кнопок? Помните, что после вызова onFirstTalk QuestEvent уже создан.
Ну и самой главное, правило ID. Как вам наверное известно, ИД 1-999 предназначены для "родных" квестов L2. Поэтому дать кастомному квесту ИД 912 мягко говоря не лучшая затея, многие сборки обрабатывают квесты с указанными ИД немного по-другому.

NiddHoggUA 16.10.2011 21:24

Re: htm bypass -h
 
bypass -h Quest 912_buffer fullbuff
bypass -h Quest 912_buffer 1
bypass -h Quest 912_buffer 15

вот так выглядят байпасы...
не правильно?

Azagthtot 16.10.2011 21:46

Re: htm bypass -h
 
Нормально. Я бы еще проверку добавил
Код:

st = player.getQuestState(qn)
if not st: st = newQuestState(palyer)


NiddHoggUA 16.10.2011 21:48

Re: htm bypass -h
 
так почему же тогда нечего не происходит когда на кнопку нажимаю Оо

и даёт ошибку(в StartGameServer)

Код:

                st = player.getQuestState(qn)
                st.setState(State.STARTED)

на пункте
Код:

st.setState(State.STARTED)

Azagthtot 16.10.2011 21:54

Re: htm bypass -h
 
потому что QuestState в вашей сборке не определен. см. мой комментарий выше.
Было бы удивительно, если после ошибки что-то работало...

NiddHoggUA 16.10.2011 21:58

Re: htm bypass -h
 
Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                if not st: st = newQuestState(player)
                st.setState(State.STARTED)
                return InitialHtml

кнопки всё так же не работают....

попробовал так же так
Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                if not st: st = player.newQuestState(qn)
                st.setState(State.STARTED)
                return InitialHtml

не работает тоже


и последний вариант
Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                if not st: st = newQuestState(qn)
                st.setState(State.STARTED)
                return InitialHtml

тоже кпопки не работают, но эррор не даёт

так же нашел вот эту тему
http://forum.zone-game.info/showthread.php?t=15101

в последнем посту похожая проблема с моей
AttributeError: 'NoneType' object has no attribute 'setState'

Добавлено через 32 минуты
сейчас буду тестить
st = self.newQuestState(player)

Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                if not st: st = self.newQuestState(player)
                st.setState(State.STARTED)
                return InitialHtml

тоже не работает. Кнопки бездействующие.


HELP :/

Azagthtot 16.10.2011 23:05

Re: htm bypass -h
 
Проще убить, чем научить :)
Цитата:

Потому что ерунду пишите.
Во-первых, уже года 2 минимум нет необходимости вручную проставлять состояние квеста,


NiddHoggUA 16.10.2011 23:08

Re: htm bypass -h
 
ну ок почему тогда не работает?)
что сделать что бы работало? оО
Код:

        def onFirstTalk (self,npc,player):
                return InitialHtml


Azagthtot 16.10.2011 23:22

Re: htm bypass -h
 
УБИТЬ УПРЯМОЕ ЖЫВОТНАЕ! (с) М.А. Булгаков, орфография моя.
QuestState за вас Грэм Кайн создавать будет игроку?

NiddHoggUA 16.10.2011 23:49

Re: htm bypass -h
 
ахах)
сорри туплю)

Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                if not st: st = newQuestState(player)
                return InitialHtml


Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                if not st: st = self.newQuestState(player)
                return InitialHtml

и это не правильно :censored:

кнопки бездействуют

или же надо вообще так?

Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                if not st: st = player.newQuestState(qn)
                return InitialHtml


Z3oM 28.10.2011 15:15

Re: htm bypass -h
 
Код:

        def onFirstTalk (self,npc,player):
                st = player.getQuestState(qn)
                if not st: st = player.newQuestState(qn)
                return InitialHtml

Мб у тебя просто сборка чего та не понимает?


Текущее время: 03:43. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot