Нужна помощь - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 08.11.2011, 17:52   #1
Пользователь

Автор темы (Топик Стартер) Нужна помощь

Скачал 'вент Sweet Box Lottery
http://la2-strike.ru/la2_interlude/l...x-lottery.html
адаптировал под l2jserver, но есть небольшая проблема

PHP код:
# Config
SWEETMANAGER=10020
CHANCE
=50.0 # Шанс успешного выигрыша в процентах.
ShowChance=# Показать(1)/Скрыть(0) шанс на экране.
RATIO=1.50 # Коэффициент выигрыша.
ShowRatio=0  # Показать(1)/Скрыть(0) коэффициент на экрае.

# ОСТОРОЖНО: не указывайте нестопковые предметы, т.к. при высоком коэффициенте
# вы "положете" свою базу данных.
MoneyTypes=[57,4037# Список ID предметов меню. Не более 5-ти стопковых предметов.
                     # 57 - Adena
                     # 4037 - Coin of Luck


class Display :

 
def createItemList(selfexchangeData):
    
bypassText ""
    
for i in exchangeData :
        
bypassText += i[1]+";"
    
return bypassText

 def CheatMsg
(self): return "wcheat.htm"

 
def EmptyCountMsg(self):
    return 
u"\u0412\u044B \u043D\u0435 \u0432\u0432\u0435\u043B\u0438 \u0441\u0432\u043E\u044E \u0441\u0442\u0430\u0432\u043A\u0443. \u041F\u043E\u0436\u0430\u043B\
\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0442\u0430\u0432\u043A\u0443 (\u043A\u0430\u043F\u0438\u0442\u0430\u043B)."

 
def InvalidCountMsg(self) :
    return 
u"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 \u0441\u0442\u0440\u043E\u043A\u0435. \
\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0447\u0438\u0441\u043B\u043E 1-900000000."

 
def InvalidInputMsg(self) :
    return 
u"\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0432 \u0441\u0442\u0440\
\u043E\u043A\u0435, \u0432\u0432\u043E\u0434\u0438\u0442\u044C \u043C\u043E\u0436\u043D\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u0446\u0438\u0444\u0440\u044B."
 
 
def WinningMsg(self) :
    return 
"win.htm"

 
def LossMsg(self) :
    return 
"loss.htm"

 
def NotEnoughItemsMsg(selfitemName) :
    return 
u"\u0414\u043B\u044F \u0442\u0430\u043A\u043E\u0439 \u0441\u0442\u0430\u0432\u043A\u0438 \u0432 \u0432\u0430\u0448\u0435\u043C \u0440\u044E\u043A\u0437\u0430\u043A\u0435 \
\u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 "
+itemName+"."

 
def MainWindow(selfexchangeDatachanceratio):
    
textChance textRatio ""
    
ratio "%2.2f" ratio
    chance 
"%-.d" chance
    textHeader 
u"<html><title>\u042D\u0432\u0435\u043D\u0442 Sweet Lottery</title><body><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\
<tr><td width=32><img src=\"Icon.Item_CanUse04\" width=32 height=32></td><td width=206 align=\"center\"><font color=\"FF9966\">SWEET Lottery</font></td>\
<td width=32><img src=\"Icon.Item_CanUse04\" width=32 height=32></td></tr></table><br>\u0427\u0442\u043E\u0431\u044B \u0441\u044B\u0433\u0440\u0430\u0442\
\u044C \u0432 \u043B\u043E\u0442\u0435\u0440\u0435\u044E Sweet Box, \u0432\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u043B\u044E\u0442\u0443 \
\u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430 \u043D\u0438\u0436\u0435 \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0435\u0435 \u043A\u043E\
\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E. \u0412\u0430\u0448 \u043A\u0430\u043F\u0438\u0442\u0430\u043B \u0432 \u0441\u043B\u0443\u0447\u0430\u0435 \
\u0432\u044B\u0438\u0433\u0440\u044B\u0448\u0430 \u043E\u043D \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043B\u0438\u0447\u0435\u043D.<br>\
<img src=\"L2UI.SquareWhite\" width=270 height=1><br><table cellpadding=\"8\" cellspacing=\"0\" border=\"0\">"
    
if ShowChance textRatio u"<tr><td width=150>\u041A\u043E\u044D\u0444\u0444\u0438\u0446\u0438\u0435\u043D\u0442 \u0432\u044B\u0438\u0433\u0440\u044B\u0448\u0430:\
</td><td width=100><font color=\"00CCCC\">"
+ratio+u"</font></td></tr>"
    
if ShowRatio textChance u"<tr><td width=150>\u0428\u0430\u043D\u0441:</td><td width=100><font color=\"00CCCC\">"+chance+u"%</font></td></tr>"
    
textFooter u"<tr><td width=150><font color=\"LEVEL\">\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u043B\u044E\u0442\u0443:</font></td>\
<td width=100><combobox width=\"100\" var=\"cytype\" list="
+self.createItemList(exchangeData)+u"></td></tr><tr><td width=150><font color=\"LEVEL\">\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \
\u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E:</font></td><td width=100><edit var=\"count\" width=\"100\" length=\"10\"></td></tr></table><br><br>\
<center><button action=\"bypass -h Quest "
+qn+u$cytype $count\" value=\"\u0421\u044B\u0433\u0440\u0430\u0442\u044C\" width=76 height=21 back=\"L2UI_ch3.Btn1_normalOn\" \
fore=\"L2UI_ch3.Btn1_normal\"></center><br><br><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr><td width=\"100\"></td><td width=\"170\">\
<img src=\"L2UI.SquareGray\" width=\"170\" height=\"1\"><br></td></tr><tr><td width=\"100\"></td><td width=\"170\" align=\"right\">\
<font color=\"3b3b3b\">Powered by Hlorka Dev. Group</font></td></tr></table></body></html>"
    
return textHeader+textRatio+textChance+textFooter


class Quest (JQuest) :

 
def __init__(self,id,name,descr):
   
JQuest.__init__(self,id,name,descr)
   
self.Exchange = []
   
itemTable ItemTable.getInstance()
   for 
i in MoneyTypes :
        
ItemName=itemTable.getTemplate(i).getName()
        
tempItem = (iItemName.replace(" ","_"))
        
self.Exchange.append(tempItem)

 
def onEvent (self,event,st) :
   
disp Display()
   
bypass event.split(" ")
   if 
len(bypass) != :
        
st.playSound("ItemSound3.sys_shortage")
        return 
disp.EmptyCountMsg()
   if 
not Pattern.matches('^\d{1,10}$',bypass[1]) :
        
st.playSound("ItemSound3.sys_shortage")
        return 
disp.InvalidInputMsg()
   
bypassItemName bypass[0]
   
bypassItemCount int(bypass[1])
   if 
not (bypassItemCount and bypassItemCount 900000000) :
        
st.playSound("ItemSound3.sys_shortage")
        return 
disp.InvalidCountMsg()
   
htmltext disp.CheatMsg()
   for 
i in self.Exchange :
        if 
bypassItemName == i[1] :
            if 
st.getQuestItemsCount(i[0]) >= bypassItemCount :
                if 
Rnd.get(1000) < CHANCE*10 :
                    
st.giveItems(i[0],int(bypassItemCount*RATIO))
                    
st.playSound("ItemSound3.sys_make_success")
                    
htmltext disp.WinningMsg()
                    break
                else :
                    
st.takeItems(i[0],bypassItemCount)
                    
st.playSound("ItemSound3.sys_make_fail")
                    
htmltext disp.LossMsg()
                    break
            
st.playSound("ItemSound3.sys_shortage")
            
htmltext disp.NotEnoughItemsMsg(i[1])
            break
   
st.exitQuest(1)
   return 
htmltext

 def onTalk 
(self,npc,player):
   
st player.getQuestState(qn)
   
htmltext "Internal Error. Please Contact your admin." 
   
if not st: return htmltext
   dsp 
Display()
   
htmltext dsp.MainWindow(self.Exchange,CHANCE,RATIO)
   return 
htmltext

QUEST 
Quest(4090,qn,"custom"

QUEST.addStartNpc(SWEETMANAGER
QUEST.addTalkId(SWEETMANAGER
когда щелкаю по нпс, открывается стандартный диалог

Цитата:
I have nothing to say to you
Quest
и только когда щелкаю по Quest открывается окошко эвента.
Как можно сделать, чтобы сразу открывалось это окошко?
Fozan вне форума Ответить с цитированием
Непрочитано 08.11.2011, 18:01   #2
Аватар для Azagthtot
Эксперт

По умолчанию Re: Нужна помощь

Можно
QUEST.addFirstTalkId(SWEETMANAGER)
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Непрочитано 08.11.2011, 18:32   #3
Пользователь

Автор темы (Топик Стартер) Re: Нужна помощь

Цитата:
Сообщение от Azagthtot Посмотреть сообщение
Можно
QUEST.addFirstTalkId(SWEETMANAGER)
заменил
QUEST.addTalkId(SWEETMANAGER)
на
QUEST.addFirstTalkId(SWEETMANAGER)

и писал так

QUEST.addStartNpc(SWEETMANAGER)
QUEST.addTalkId(SWEETMANAGER)
QUEST.addFirstTalkId(SWEETMANAGER)

стандартный диалог вообще не открывается
Fozan вне форума Ответить с цитированием
Непрочитано 08.11.2011, 19:31   #4
Аватар для Azagthtot
Эксперт

По умолчанию Re: Нужна помощь

Я написал "менять"?
Я сказал "добваить". И естественно обработчик onFirstTalk
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 08.11.2011, 19:57   #5
Пользователь

Автор темы (Топик Стартер) Re: Нужна помощь

Цитата:
Сообщение от Azagthtot Посмотреть сообщение
Я написал "менять"?
Я сказал "добваить". И естественно обработчик onFirstTalk
Вобщем разобраслся на вторые сутки блин..

Последний раз редактировалось Fozan; 09.11.2011 в 18:59. Причина: Добавлено сообщение
Fozan вне форума Ответить с цитированием
Непрочитано 10.11.2011, 20:47   #6
Пользователь

Автор темы (Топик Стартер) Re: Нужна помощь

С одной проблемой разделался.

Появился вопрос, как сделать проверку лвла игрока перед использованием эвента??
Пытался вставлять разные комбинации с кодом if st.getPlayer.getLevel() >= 60,
но все время ругается, то на htmltext, то на эту строку, то на ELSE
Fozan вне форума Ответить с цитированием
Непрочитано 10.11.2011, 23:18   #7
Аватар для [STIGMATED]
Супергерой

По умолчанию Re: Нужна помощь

if (st.getPlayer.getLevel() >= 60)
__________________
Web программист\разработчик

— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
[STIGMATED] вне форума Отправить сообщение для [STIGMATED] с помощью Skype™ Ответить с цитированием
Непрочитано 11.11.2011, 09:15   #8
Олдфаг

По умолчанию Re: Нужна помощь

Цитата:
Сообщение от [STIGMATED] Посмотреть сообщение
if (st.getPlayer.getLevel() >= 60)
if st.getPlayer().getLevel() >= 60
Smiler вне форума Ответить с цитированием
Непрочитано 11.11.2011, 17:27   #9
Пользователь

Автор темы (Топик Стартер) Re: Нужна помощь

Вот так выглядит код

PHP код:
if npcId == SWEETMANAGER:
      if 
cond == and  onlyone == :
         if (
st.getPlayer.getLevel() >= 60) :      # Ограничение по уровню игроков. Т.е. не ниже 60 лвл
           
dsp Display()
           
htmltext dsp.MainWindow(self.Exchange,CHANCE,RATIO)   # Если с уровнем все впорядке - можно проджолжать квест
         
else :
            
htmltext "No lvl"              # Если игрок слишком "молод"
            
st.exitQuest(1)                  # Выход из состояния квеста с удалением всех данных о нем из таблицы `character_quests` 

и вот ошибка

PHP код:
 File "__init__.py"line 141in onFirstTalk
NameError
npcId

    at org
.python.core.Py.NameError(Unknown Source)
    
at org.python.core.PyFrame.getglobal(Unknown Source)
    
at org.python.pycode.serializable._pyx1321020596917.onFirstTalk$14(__init__.py:141)
    
at org.python.pycode.serializable._pyx1321020596917.call_function(__init__.py)
    
at org.python.core.PyTableCode.call(Unknown Source)
    
at org.python.core.PyTableCode.call(Unknown Source)
    
at org.python.core.PyTableCode.call(Unknown Source)
    
at org.python.core.PyFunction.__call__(Unknown Source)
    
at org.python.core.PyMethod.__call__(Unknown Source)
    
at org.python.core.PyObject.__call__(Unknown Source)
    
at org.python.core.PyObject._jcallexc(Unknown Source)
    
at org.python.core.PyObject._jcall(Unknown Source)
    
at org.python.proxies.main$Quest$387.onFirstTalk(Unknown Source)
    
at com.l2jserver.gameserver.model.quest.Quest.notifyFirstTalk(Quest.java:523)
    
at handlers.actionhandlers.L2NpcAction.action(L2NpcAction.java:140)
    
at com.l2jserver.gameserver.model.L2Object.onAction(L2Object.java:277)
    
at com.l2jserver.gameserver.model.L2Object.onAction(L2Object.java:270)
    
at com.l2jserver.gameserver.network.clientpackets.Action.runImpl(Action.java:122)
    
at com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:62)
    
at com.l2jserver.gameserver.network.L2GameClient.run(L2GameClient.java:1097)
    
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    
at java.lang.Thread.run(Unknown Source
Fozan вне форума Ответить с цитированием
Непрочитано 11.11.2011, 17:30   #10
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: Нужна помощь

Код:
if npc.getNpcId() == SWEETMANAGER:
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь по НПС licei Lineage II 0 08.01.2011 01:44
Нужна помощь Kabanitos Курилка / Yak floor 9 07.01.2011 01:28
нужна помощь Соник™ Игровой клиент 2 20.12.2010 17:29


© 2007–2022 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 18:22. Часовой пояс GMT +3.

Вверх