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

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

Ответ
Опции темы
Непрочитано 15.06.2013, 19:26   #1
Пользователь

Автор темы (Топик Стартер) Помогите с квестом на питоне

Всем привет. Есть квест на питоне. Мне нужно, чтобы квест запускался, когда игрок заходит в игру.
Часть скрипта:
Код:
# Made by disKret
import sys
from com.l2scoria import Config
from com.l2scoria.util.random import Rnd
from com.l2scoria.gameserver.model import Inventory
from com.l2scoria.gameserver.model.actor.instance import L2ItemInstance
from com.l2scoria.gameserver.model.quest import State
from com.l2scoria.gameserver.model.quest import QuestState
from com.l2scoria.gameserver.model.quest.jython import QuestJython as JQuest

qn = "9990_CraftSystem"

#NPC
NPC_ID = 30086

#QUEST ITEM
PACKAGE = 7263

ONE_TYPE_WEAPON = [1, 2, 3, 4]
ONE_TYPE_DROP_ID = [4037, 57, 4356, 4357, 6673]
ONE_TYPE_DROP_COUNT = 1
ONE_TYPE_DROP_CHANCE = 100
ONE_MOB_ID = [18342, 18341, 18343, 18330, 18331]

TWO_TYPE_WEAPON = [1, 2, 3, 4]
TWO_TYPE_DROP_ID = [1, 2, 3, 4, 5]
TWO_TYPE_DROP_COUNT = 1
TWO_TYPE_DROP_CHANCE = 100
TWO_MOB_ID = [111, 111, 111, 111, 111]

THREE_TYPE_WEAPON = [1, 2, 3, 4]
THREE_TYPE_DROP_ID = [1, 2, 3, 4, 5]
THREE_TYPE_DROP_COUNT = 1
THREE_TYPE_DROP_CHANCE = 100
THREE_MOB_ID = [111, 111, 111, 111, 111]

FO_TYPE_WEAPON = [1, 2, 3, 4]
FO_TYPE_DROP_ID = [1, 2, 3, 4, 5]
FO_TYPE_DROP_COUNT = 1
FO_TYPE_DROP_CHANCE = 100
FO_MOB_ID = [111, 111, 111, 111, 111]

FIVE_TYPE_WEAPON = [1, 2, 3, 4]
FIVE_TYPE_DROP_ID = [1, 2, 3, 4, 5]
FIVE_TYPE_DROP_COUNT = 1
FIVE_TYPE_DROP_CHANCE = 100
FIVE_MOB_ID = [111, 111, 111, 111, 111]


print "E6aTb KoIIaTb 3arpy3uJIocb!"

class Quest (JQuest) :

 def __init__(self,id,name,descr):
     JQuest.__init__(self,id,name,descr)
     self.questItemIds = [PACKAGE]

 def onTalk (self,npc,player):
   htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
   st = player.getQuestState(qn)
   if not st : return
   st.setState(State('Started', QUEST))
   return

 def onAttack (self, npc, player, damage, isPet): 
   st = player.getQuestState(qn)
   if not st : return
   player = st.getPlayer()
   npcId = npc.getNpcId()
   if player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LRHAND) != None:
       type = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LRHAND)
   elif player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) != None:
	   type = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND)
   else :
       return

   itemId = type.getItemId()
   if itemId in ONE_TYPE_WEAPON and npcId in ONE_MOB_ID:
       if itemId == ONE_TYPE_WEAPON[0] :
           if ONE_TYPE_DROP_CHANCE > Rnd.get(1, 100):
               st.giveItems(ONE_TYPE_DROP_ID[0], ONE_TYPE_DROP_COUNT)
           if ONE_TYPE_DROP_CHANCE > Rnd.get(1, 100):
               st.giveItems(ONE_TYPE_DROP_ID[1], ONE_TYPE_DROP_COUNT)
  ........................................
 
   else :
       return
       
   return
   
   
QUEST       = Quest(9990, qn, "Craft System")

for i in ONE_MOB_ID :
    QUEST.addAttackId(i)
for i in TWO_MOB_ID :
    QUEST.addAttackId(i)
for i in THREE_MOB_ID :
    QUEST.addAttackId(i)
for i in FO_MOB_ID :
    QUEST.addAttackId(i)
for i in FIVE_MOB_ID :
    QUEST.addAttackId(i)

QUEST.addStartNpc(NPC_ID)
QUEST.addTalkId(NPC_ID)
Virrilis3 вне форума Ответить с цитированием
Непрочитано 15.06.2013, 19:39   #2
Аватар для Archiel
Пользователь

По умолчанию Re: Помогите с квестом на питоне

А разве это делается через квест? Посмотрите как в ядре реализован 255_Tutorial, думаю, что найдёте ответ на свой вопрос. Самый простой способ что-то запустить при логине в игру, это засунуть это в EnterWorld.java
Archiel вне форума Отправить сообщение для Archiel с помощью ICQ Ответить с цитированием
Сказали спасибо:
Непрочитано 15.06.2013, 19:43   #3
Пользователь

Автор темы (Топик Стартер) Re: Помогите с квестом на питоне

Цитата:
Сообщение от Archiel Посмотреть сообщение
А разве это делается через квест? Посмотрите как в ядре реализован 255_Tutorial, думаю, что найдёте ответ на свой вопрос. Самый простой способ что-то запустить при логине в игру, это засунуть это в EnterWorld.java
Через onAdvEvent?
Virrilis3 вне форума Ответить с цитированием
Непрочитано 15.06.2013, 19:48   #4
Аватар для Archiel
Пользователь

По умолчанию Re: Помогите с квестом на питоне

Цитата:
Сообщение от Virrilis3 Посмотреть сообщение
Через onAdvEvent?
У вас исходники есть сервера, или только компил сборки?
Archiel вне форума Отправить сообщение для Archiel с помощью ICQ Ответить с цитированием
Непрочитано 15.06.2013, 19:49   #5
Пользователь

Автор темы (Топик Стартер) Re: Помогите с квестом на питоне

Цитата:
Сообщение от Archiel Посмотреть сообщение
У вас исходники есть сервера, или только компил сборки?
Исходники имеются.
Virrilis3 вне форума Ответить с цитированием
Непрочитано 15.06.2013, 19:54   #6
Аватар для Archiel
Пользователь

По умолчанию Re: Помогите с квестом на питоне

Цитата:
Сообщение от Virrilis3 Посмотреть сообщение
Исходники имеются.
Отлично. У меня в данный момент нет времени лезть в код, может через часик гляну вариант решения вопроса. А вы пока обычным виндовым поиском найдите EnterWorld.java и реализацию запуска 255_Tutorial в своей сборке. Если найдёте решение, отпишите тут, я не буду париться. Если не найдёте, то на досуге накидаю чего-нибудь.

Добавлено через 4 минуты
О, быстрое решение. В EnterWorld проверяете у игрока статус квеста своего, если его нет, тогда запускаете игроку htm, в котором будет какой-нибудь диалог и кнопка "принять" для запуска квеста через onEvent

event = htmltext
if event = ololo.htm
setQuestState(STARTED)

ну и дальше по тексту

На синтаксис не смотрите, я просто хотел, чтобы вы просто поняли суть.

Добавлено через 1 час 56 минут
Ну как у автора дела?

Последний раз редактировалось Archiel; 15.06.2013 в 21:50. Причина: Добавлено сообщение
Archiel вне форума Отправить сообщение для Archiel с помощью ICQ Ответить с цитированием
Непрочитано 15.06.2013, 22:14   #7
Аватар для Map
Пользователь

По умолчанию Re: Помогите с квестом на питоне

Хотел спросить, пытаюсь переписать данный квест себе под сборку, появилась вот такая ошибка
Код:
Traceback (innermost last):
  File "newsystem.py", line 250, in ?
TypeError: addAttackId(): 1st arg can't be coerced to int[]
Как можно ее решить?
Map вне форума Ответить с цитированием
Непрочитано 15.06.2013, 22:27   #8
Пользователь

Автор темы (Топик Стартер) Re: Помогите с квестом на питоне

Цитата:
Сообщение от Archiel Посмотреть сообщение
Отлично. У меня в данный момент нет времени лезть в код, может через часик гляну вариант решения вопроса. А вы пока обычным виндовым поиском найдите EnterWorld.java и реализацию запуска 255_Tutorial в своей сборке. Если найдёте решение, отпишите тут, я не буду париться. Если не найдёте, то на досуге накидаю чего-нибудь.

Добавлено через 4 минуты
О, быстрое решение. В EnterWorld проверяете у игрока статус квеста своего, если его нет, тогда запускаете игроку htm, в котором будет какой-нибудь диалог и кнопка "принять" для запуска квеста через onEvent

event = htmltext
if event = ololo.htm
setQuestState(STARTED)

ну и дальше по тексту

На синтаксис не смотрите, я просто хотел, чтобы вы просто поняли суть.

Добавлено через 1 час 56 минут
Ну как у автора дела?
Вы не поняли суть. Мне нужно, чтобы игроки не нажимали принять или начать квест, а чтобы квест был постоянно включет. Тоесть игрок зашел в игру и начал фармить.
З.Ы. Суть квеста заключается в фарме с определенных мобов, определенным оружием.

Добавлено через 4 минуты
Цитата:
Сообщение от FireaGe Посмотреть сообщение
Хотел спросить, пытаюсь переписать данный квест себе под сборку, появилась вот такая ошибка
Код:
Traceback (innermost last):
  File "newsystem.py", line 250, in ?
TypeError: addAttackId(): 1st arg can't be coerced to int[]
Как можно ее решить?
Заменить:
Код:
for i in ONE_MOB_ID :
    QUEST.addAttackId(i)
На:
Код:
QUEST.addAttackId(ONE_MOB_ID)

Последний раз редактировалось Virrilis3; 15.06.2013 в 22:32. Причина: Добавлено сообщение
Virrilis3 вне форума Ответить с цитированием
Непрочитано 15.06.2013, 22:49   #9
Аватар для Archiel
Пользователь

По умолчанию Re: Помогите с квестом на питоне

Цитата:
Сообщение от Virrilis3 Посмотреть сообщение
Вы не поняли суть. Мне нужно, чтобы игроки не нажимали принять или начать квест, а чтобы квест был постоянно включет. Тоесть игрок зашел в игру и начал фармить.
З.Ы. Суть квеста заключается в фарме с определенных мобов, определенным оружием.
Ну это почти тоже самое. Проверяем при входе в игру, есть ли квест у игрока, и если его нет, то даём его ему. Вот и всё, собственно.

EnterWorld.java
Код:
QuestState qs = activeChar.getQuestState("9990_CraftSystem");
		Quest q = QuestManager.getInstance().getQuest("9990_CraftSystem");
		if (qs == null)
			q.newQuestState(activeChar).setState(State.STARTED);
Archiel вне форума Отправить сообщение для Archiel с помощью ICQ Ответить с цитированием
Непрочитано 15.06.2013, 22:57   #10
Аватар для Map
Пользователь

По умолчанию Re: Помогите с квестом на питоне

Спасибо за первую ошибку, но появилась новая , буду благодарен!
Traceback (innermost last):
File "newsystem.py", line 255, in ?
TypeError: addStartNpc(): 1st arg can't be coerced to int[]
Map вне форума Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компиляция сборки U3J рев.494. Помогите ! saati Серверная часть 5 15.03.2013 12:19
Помогите, проблемы с Java - не хочет работать Counter Программирование / Programming 24 24.10.2011 19:39
помогите с квестом LineOFWar Lineage II 0 21.05.2010 17:49
Помогите Общими усилиями Сделать кач. Сервак 2MB Lineage II 13 25.08.2008 03:47


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

Вверх