Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Помогите с квестом на питоне
#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)
Ответ
#2
А разве это делается через квест? Посмотрите как в ядре реализован 255_Tutorial, думаю, что найдёте ответ на свой вопрос. Самый простой способ что-то запустить при логине в игру, это засунуть это в EnterWorld.java
Ответ
#3
Archiel Написал:А разве это делается через квест? Посмотрите как в ядре реализован 255_Tutorial, думаю, что найдёте ответ на свой вопрос. Самый простой способ что-то запустить при логине в игру, это засунуть это в EnterWorld.java
Через onAdvEvent?
Ответ
#4
Virrilis3 Написал:Через onAdvEvent?

У вас исходники есть сервера, или только компил сборки?
Ответ
#5
Archiel Написал:У вас исходники есть сервера, или только компил сборки?
Исходники имеются.
Ответ
#6
Virrilis3 Написал:Исходники имеются.

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

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

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

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

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

Добавлено через 1 час 56 минут
Ну как у автора дела?
Ответ
#7
Хотел спросить, пытаюсь переписать данный квест себе под сборку, появилась вот такая ошибка
Код:
Traceback (innermost last):
  File "newsystem.py", line 250, in ?
TypeError: addAttackId(): 1st arg can't be coerced to int[]
Как можно ее решить?
Ответ
#8
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)
Ответ
#9
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);
Ответ
#10
Спасибо за первую ошибку, но появилась новая Smile, буду благодарен!
Traceback (innermost last):
File "newsystem.py", line 255, in ?
TypeError: addStartNpc(): 1st arg can't be coerced to int[]
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Ребята помогите с логин и геймом Lackyjack 4 1,862 04-04-2018, 05:46 PM
Последний пост: MasVild
  Помогите переписать скрипт с Python на Java Virrilis3 0 1,464 03-29-2018, 10:55 PM
Последний пост: Virrilis3
  Помогите со сборкой lostworld HF voland3 1 2,124 03-22-2018, 12:54 AM
Последний пост: Kampina
  Скрипты на питоне flopix 1 1,740 12-10-2017, 01:56 PM
Последний пост: n3k0nation
  Проблема с квестом взросление дракончика nemoruss 3 1,761 01-29-2016, 01:35 AM
Последний пост: nemoruss
  Проблема с квестом Elrokian Hunter's Proof Goffa 1 1,472 01-26-2016, 12:04 PM
Последний пост: GenCloud
  Помогите со скриптом Mazahacka 0 1,126 07-29-2015, 10:26 PM
Последний пост: Mazahacka
  Сервер RusTeam rev1269 Хроники C5 [Помогите найти] s4nders 0 1,031 03-13-2015, 09:21 AM
Последний пост: s4nders
  Помогите скомпилить cool235 1 1,412 01-04-2015, 09:03 PM
Последний пост: Rolfer
  Оверлорд докаст скилов - помогите настроить Munhgauzen 15 3,793 01-11-2014, 08:04 AM
Последний пост: DiagoD

Перейти к форуму:


Пользователи, просматривающие эту тему: 4 Гость(ей)