jython и тд.

Теги:
 
1 2 3 4

-=dc=-
-dc-2

новичок
mk2, 09.05.05 02:50:50:
А ты в build.xml поменяй, и оно скомпилится :)

По поводу професий, расс и прочего.
Ты заметил, что мы вначале импортировали явовские классы, и затем с ними работали? Ну вот в том-же духе и получать к ним доступ. Для примера, расса -

st.getPlayer().getRace()

получить имя рассы -

st.getPlayer().getRace().toString()

а может сработает и питоновское

str(st.getPlayer().getRace())

Или можешь выдать набор необходимых тебе для квестов параметров, и я их пропишу в доке, чтоб все остальные видели тоже.
[»]
 

ok
я постараюсь набросать список всего что может понадобится.
Мыши плакали, кололись, но все равно жрали кактус.  
+
-
edit
 

-=dc=-
-dc-2

новичок
2 мк2

addQuestDrop(npc_id,item_id,DROP_RATE) --желательно добавить MAX_COUNT
и былобы очень гуд иметь возможность вывести хтмл не только ретурном из onEvent и дт. а и из самописаных процедурок тоже. (покрайней мере у меня не получилось )
Мыши плакали, кололись, но все равно жрали кактус.  

mk2

втянувшийся
-=dc=-, 09.05.05 13:52:01:
2 мк2

addQuestDrop(npc_id,item_id,DROP_RATE) --желательно добавить MAX_COUNT
и былобы очень гуд иметь возможность вывести хтмл не только ретурном из onEvent и дт. а и из самописаных процедурок тоже. (покрайней мере у меня не получилось )
 


Как это не получилось?
А как ты пробовал?
Вот так пробовал?
code text
  1. def foo() :
  2.   return "Hello.htm"
  3.  
  4. ...
  5. class Quest(JQuest):
  6.   def onEvent(self,event,st):
  7.     return foo()

 
+
-
edit
 

-=dc=-
-dc-2

новичок
mk2, 09.05.05 17:42:30:
Как это не получилось?
А как ты пробовал?
Вот так пробовал?
code text
  1. def foo() :
  2.   return "Hello.htm"
  3.  
  4. ...
  5. class Quest(JQuest):
  6.   def onEvent(self,event,st):
  7.     return foo()

snap: 18367
 

так то получилось :)
а вот чтобы без return foo()
нет :)
З.Ы. кстати письмецо мое с готовым квестом получил ?
выложиш к остальному ?
Мыши плакали, кололись, но все равно жрали кактус.  

mk2

втянувшийся
-=dc=-, 09.05.05 16:00:20:
так то получилось :)
а вот чтобы без return foo()
нет :)
З.Ы. кстати письмецо мое с готовым квестом получил ?
выложиш к остальному ?
snap: 18371
 


Я его немного подправил.
1. Это repeatable квест, его надо закрывать по exitQuest(True)
2. Убрал лишний код и обозвал красивше :)

code text
  1. print "importing quests: TradeIvoryTower"
  2.  
  3. import sys
  4. from net.sf.l2j.gameserver.model.quest import State
  5. from net.sf.l2j.gameserver.model.quest import QuestState
  6. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
  7.  
  8. #  Done by dc
  9.  
  10. fungus_sac_id                = 707
  11. npc_blood_fungus_id          = 400
  12. npc_forest_walking_fungus_id = 7
  13. DROP_RATE                    = 500000
  14. adnen_id                     = 57
  15. REWARD_ADENA                 = 2000
  16.  
  17.  
  18. def getCount(st) :
  19.   return st.getQuestItemsCount(fungus_sac_id)
  20.  
  21. def completed(st) :
  22.   st.setState(COMPLETED)
  23.   st.clearQuestDrops()
  24.   st.takeItems(fungus_sac_id,-1)
  25.   st.giveItems(adnen_id,REWARD_ADENA)
  26.   st.exitQuest(True)
  27.   return
  28.  
  29. def check(st) :
  30.   if getCount(st) >= 10 :
  31.     completed(st)
  32.     return "7137_05.htm"
  33.   return "7137_04.htm"
  34.  
  35. def st_check(st) :
  36.   if st.getPlayer().getLevel() < 8:
  37.     st.exitQuest(True)
  38.     return "7137_01.htm"
  39.   return "7137_02.htm"
  40.  
  41.  
  42. class Quest (JQuest):
  43.  
  44.   def __init__(self,id,name,descr): JQuest.__init__(self,id, name, descr)
  45.  
  46.  
  47.   def onEvent (self,event,st):
  48.     id = st.getState()
  49.     if   id == CREATED  :
  50.   if event == "agree" :
  51.    st.setState(STARTED)
  52.    st.set("cnt","0")
  53.    return "7137_03.htm"
  54.   return st_check(st)
  55.     elif id == COMPLETED: pass
  56.     elif id == STARTED  :
  57.   return check(st)
  58.     return
  59.  
  60.  
  61.   def onKill (self,npcId,st):
  62.     if npcId == npc_blood_fungus_id or npcId == npc_forest_walking_fungus_id :
  63.       n = getCount(st)
  64.       if   n > int(st.get('cnt')) :
  65.            st.set("cnt", str(n))
  66.            return "Collected "+str(n)+" of 10 spore"
  67.     return
  68.  
  69. QUEST     = Quest(262,"TradeIvoryTower", "Trade with the Ivory Tower")
  70. CREATED   = State('Start',     QUEST)
  71. STARTED   = State('Started',   QUEST)
  72. COMPLETED = State('Completed', QUEST)
  73. #
  74. QUEST.setInitialState(CREATED)
  75. QUEST.addStartNpc(7137)
  76.  
  77.  
  78. STARTED.addQuestDrop(npc_blood_fungus_id,fungus_sac_id,DROP_RATE)
  79. STARTED.addQuestDrop(npc_forest_walking_fungus_id,fungus_sac_id,DROP_RATE)
  80. STARTED.addKillId(npc_forest_walking_fungus_id)
  81. STARTED.addKillId(npc_blood_fungus_id)
  82. STARTED.addTalkId(7137)
 
+
-
edit
 

-=dc=-
-dc-2

новичок
mk2, 09.05.05 20:33:01:
Я его немного подправил.
1. Это repeatable квест, его надо закрывать по exitQuest(True)
2. Убрал лишний код и обозвал красивше :)
 

а по моим данным он одноразовый :)
Мыши плакали, кололись, но все равно жрали кактус.  

mk2

втянувшийся
Да я его на офе раз 20 проходил, как легальный способ удвоить заработок DE файтера.
 
+
-
edit
 

-=dc=-
-dc-2

новичок
mk2, 10.05.05 10:09:34:
Да я его на офе раз 20 проходил, как легальный способ удвоить заработок DE файтера.
snap: 18423
 

закончил еще оди квест и в процессе его настройки
нашел пару багов.

1) неочень серьезный: если у чара отобрать квеститемы то в квестовых итемах (в квестовом меню) продолжает показыватся прежнее или просто неправельное количество до вызова Инвентари, после его вызова все нормально.

2) посерьезнее после завершения квеста через
code text
  1.   st.setState(COMPLETED)
  2.   st.clearQuestDrops()
  3.   st.giveItems(adnen_id,getCount(st) * price)
  4.   st.takeItems(wind_shard_id,-1)
  5.   st.exitQuest(True)

и повторного получения этогоже квеста
дропа квестовых итемов больше не происходит.
большие подозрения что после st.clearQuestDrops()
дроп не востанавливается при повторном получении квеста.


З.Ы. по поводу первого я сервак на котором тестил не обновлял уже сутки такшто я могу незнать и это поправили.
Мыши плакали, кололись, но все равно жрали кактус.  

mk2

втянувшийся
-=dc=-, 10.05.05 21:21:27:
закончил еще оди квест и в процессе его настройки
нашел пару багов.
2) посерьезнее после завершения квеста через
code text
  1.   st.setState(COMPLETED)
  2.   st.clearQuestDrops()
  3.   st.giveItems(adnen_id,getCount(st) * price)
  4.   st.takeItems(wind_shard_id,-1)
  5.   st.exitQuest(True)

и повторного получения этогоже квеста
дропа квестовых итемов больше не происходит.
большие подозрения что после st.clearQuestDrops()
дроп не востанавливается при повторном получении квеста.
З.Ы. по поводу первого я сервак на котором тестил не обновлял уже сутки такшто я могу незнать и это поправили.
 


Давай квест, посмотрим.
Да st.clearQuestDrops() обнуляет дропы, для данного игрока.
Если ты переходишь в новое состояние, для которого дропы определены - дропы добавятся.
В любом случае, st.exitQuest обнуляет дропы, так что тут st.clearQuestDrops() не нужен.

Короче. Можно объявлять дропы не для состояния, а вообще. Они будут жить пока ты не сделаешь st.clearQuestDrops(). Ещё его можно сделать когда тебе больше не нужно (в данном состоянии) собирать вещи.
 

mk2

втянувшийся
Diz, для начала.
Убери всё табуляции из файла.
python-у нужен indent, он по нему определяет где начинается блок, и где он заканчивается.
Ты можешь пользовать или табуляции, или пробелы. Но нельзя смешивать их. Или то, или другое.
Я тебе рекомендую заменить все табуляторы на пробел. Ну, можешь наоборот.
Замени, поправь код, и проверь - работает или нет. Если не работает - положи файл опять.
 

Diz

новичок
Ох и морока с этими пробелами :huh:
 
+
-
edit
 

-=dc=-
-dc-2

новичок
Diz, 12.05.05 23:31:33:
Ох и морока с этими пробелами :huh:
snap: 18616
 

в чем пишеш ?
пиши в фаре предварительно включив в нем (заменять табуляцию пробелами)
Мыши плакали, кололись, но все равно жрали кактус.  

mk2

втянувшийся
Вообще-то, в программистских редакторах поголовно есть функция заменять (в начале строки или вообще все) табуляторы на пробелы или обратно. Потому как жизненная необходимость (и не только для питона).
 

Diz

новичок
-=dc=-, 13.05.05 10:39:35:
в чем пишеш ?
пиши в фаре предварительно включив в нем (заменять табуляцию пробелами)
snap: 18641
 

В нем то и пишу
 
+
-
edit
 

-=dc=-
-dc-2

новичок
2 mk2
такой вопрос.

чем отличаются onEvent и onTalk ?
кто когда вызыватся будет если описаны оба ?
Мыши плакали, кололись, но все равно жрали кактус.  

xaka

новичок
-=dc=-
Что там с 1-й проблемой? Ты уверен, что она имеет место или все уже ок? Если нет, то поясни как она появляется, а то сложно как-то представить, чтобы у персонажа что-то оставалось - ты ведь вещи забираешь? и принцин отбора вещей такой же, как и в Tutorial квесте и там все ОК. Как мне сказали - 3-е хроники показывают квестовые вещи, даже если у тебя их 0, поэтому если проблема осталась, то давай обсудим.
 

Diz

новичок
Никак диалог не могу реализовать(
Уже запутался.
 
+
-
edit
 

-=dc=-
-dc-2

новичок
xaka, 13.05.05 16:33:53:
-=dc=-
Что там с 1-й проблемой? Ты уверен, что она имеет место или все уже ок? Если нет, то поясни как она появляется, а то сложно как-то представить, чтобы у персонажа что-то оставалось - ты ведь вещи забираешь? и принцин отбора вещей такой же, как и в Tutorial квесте и там все ОК. Как мне сказали - 3-е хроники показывают квестовые вещи, даже если у тебя их 0, поэтому если проблема осталась, то давай обсудим.
snap: 18661
 

Я несмотрел с того времени (на работе завал)
затра посмотрю опишу подробно или можеш пройти квест CatchTheWind насобирай пару итемов потом подойди к НПС и когда он спросит разорвать контракт или продолжить нажми продолжить он заберет итем и даст денег но квест не удалит и посмотри что будет отображатся.
Мыши плакали, кололись, но все равно жрали кактус.  

mk2

втянувшийся
<a action="bypass -h Quest agree">Say you will help</a>

должно быть

<a action="bypass -h Quest WhatWomenWant agree">Say you will help</a>
 
+
-
edit
 

-=dc=-
-dc-2

новичок
2 мк2
если из квеста сделать например
return "tralala.htm"
а tralala.htm будет иметь в себе ссылку на чат .
например
code text
  1. <a action="bypass -h npc_%objectId%_Chat 2">

то вывалит ошибка
так как tralala.htm небыл обработан и в нем не заменен %objectId% на реальный айди.

З.Ы. и еще как из квеста вывести текст в консоль сервака или чат клиента, для дебуга нужно.
Мыши плакали, кололись, но все равно жрали кактус.  

mk2

втянувшийся
-=dc=-, 21.05.05 19:09:57:
2 мк2
если из квеста сделать например
return "tralala.htm"
а tralala.htm будет иметь в себе ссылку на чат .
например
code text
  1. <a action="bypass -h npc_%objectId%_Chat 2">

то вывалит ошибка
так как tralala.htm небыл обработан и в нем не заменен %objectId% на реальный айди.

З.Ы. и еще как из квеста вывести текст в консоль сервака или чат клиента, для дебуга нужно.
 


Ну как же я тебе заменю %objectId% если событие в квест попадает не
только от разговоров с NPC? Нету у меня %objectId%, разве что только
для onTalk событий.

По поводу вывода в консоль - пока только через return...
Если для отладки... могу сделать. Типа st.trace("test") - покатит?
 
+
-
edit
 

-=dc=-
-dc-2

новичок
mk2, 22.05.05 01:01:24:
Ну как же я тебе заменю %objectId% если событие в квест попадает не
только от разговоров с NPC? Нету у меня %objectId%, разве что только
для onTalk событий.

По поводу вывода в консоль - пока только через return...
Если для отладки... могу сделать. Типа st.trace("test") - покатит?
[»]
 

вот я и говорю в onEven нужно сделать npcId :)

но с чатами нужно чтото думать
если они не работают то
может сделаеш чтото в альтернативу типа [html_a action=" show tralala.htm "]


З.Ы st.trace("test") покатит. былобы гуд.
Мыши плакали, кололись, но все равно жрали кактус.  
+
-
edit
 

Balancer

администратор
★★★★★
Хых. Я сейчас провёл простенький вычислительный бенч Jython'а. На коде
code python
  1. def fib(n):
  2.     if n < 2:
  3.         return 1
  4.  
  5.     return fib(n-1) + fib(n-2)
  6.  
  7. print fib(33)


он работает на треть медленнее... чистого Питона!
code text
  1. time python fib.py
  2. user 0m13.931s
  3.  
  4. time jython fib.py
  5. user 0m18.917s
  6.  
  7. time java -cp /usr/share/jython/lib/jython-2.1.jar:/usr/share/libreadline-java/lib/libreadline-java.jar:.:./jpywork::/usr/share/jython/tools/jythonc:/home/balancer/programming/python/.:/usr/share/jython/Lib fib
  8. user  0m18.857s


Справедливости ради, скорость работы Питона сильно выросла за последние пару лет :) Вот Perl:
code text
  1. time perl fib.pl
  2. user 0m22.480s


Ну и для сопоставления.

Вот чистый Си:
code text
  1. time ./a.out
  2. user 0m0.215s


Java:
code text
  1. time java fib
  2. user 0m0.368s
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
AD Реклама Google — средство выживания форумов :)
+
-
edit
 

-=dc=-
-dc-2

новичок
Balancer, 09.06.05 18:30:30:
Хых. Я сейчас провёл простенький вычислительный бенч Jython'а. На коде
code text
  1. def fib(n):
  2.     if n < 2:
  3.         return 1
  4.  
  5.     return fib(n-1) + fib(n-2)
  6.  
  7. print fib(33)


он работает на треть медленнее... чистого Питона!
code text
  1. time python fib.py
  2. user    0m13.931s
  3.  
  4. time jython fib.py
  5. user    0m18.917s
  6.  
  7. time java -cp /usr/share/jython/lib/jython-2.1.jar:/usr/share/libreadline-java/lib/libreadline-java.jar:.:./jpywork::/usr/share/jython/tools/jythonc:/home/balancer/programming/python/.:/usr/share/jython/Lib fib
  8. user    0m18.857s


Справедливости ради, скорость работы Питона сильно выросла за последние пару лет :) Вот Perl:
code text
  1. time perl fib.pl
  2. user    0m22.480s


Ну и для сопоставления.

Вот чистый Си:
code text
  1. time ./a.out
  2. user    0m0.215s


Java:
code text
  1. time java fib
  2. user    0m0.368s

[»]
 

а я давно говорил на яве писать квесты нужно
а все сложно сложно :)
Мыши плакали, кололись, но все равно жрали кактус.  
1 2 3 4

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru