Перейти к содержанию
Авторизация  
Саня

Ошибка Ивента

Рекомендуемые сообщения

Помогите пожалуйста исправить ошибку в ивенте "peklo"..

 

Лог ошибки

 

Error on: C:\Documents and Settings\Admin\serv\data\scripts\quests\5555_Peklo\__init__.py.error.log
Line: -1 - Column: -1
Traceback (innermost last):
 (no code object) at line 0
SyntaxError: ('invalid syntax', ('__init__.py', 103, 7, '      Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom [u][b]- 1[/b][/u]) + " minutes until event "+str(NAME)+" will start! You can register in "+str(LOC)+".")'))

 

 

Сам ивент

 

import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.datatables import DoorTable
from net.sf.l2j.gameserver.datatables import        SkillTable
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
from net.sf.l2j.gameserver import Announcements
from net.sf.l2j import L2DatabaseFactory
from net.sf.l2j.gameserver.ai import CtrlIntention
from net.sf.l2j.util import Rnd
from java.lang import System
from net.sf.l2j.gameserver.model import L2World
qn = "5555_Peklo"
# =======================================
#                НЕ ТРОГАЕМ
# =======================================
annom=1
ATTAKERS = []
tek = 0
nyj = 1
closed = 1
# =======================================
#                КОНФИГ
# =======================================
# Название (только английские символы)
NAME = "IIeklo"
LOC = "Town of Giran"                     # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557                  # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [[82448,149424,-3468]] # Соответственно координаты, где будет появляться НПЦ. Сколько угодно различных точек
PENI = 1164                       # Итем, необходимый для участия
PENI_KOL = 5                      # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 80                        # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 25                # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 50                # Время между ивентами в минутах
TIME_FOR_REG = 20                 # Время на регистрацию в минутах 
ANNOUNCE_INTERVAL = 2             # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556                       # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [-88957,136220,-3085]     # Соответственно координаты, где будет появляться 1 моб
locfp = [-88651,136535,-3118]    # Соответственно координаты, куда телепортируются игроки. Здесь же и ресаются.
RADIUS = 10                       # Радиус появления мобов относительно 1 моба
MOB_R = 55555                     # Моб, при помощи которого выдаётся награда. Здесь должен быть прописан дроп.
YCH_MIN = 1                       # Минимальное количество участников 
YCH_MAX = 35                      # Максимальное количество участников.
MOBS_TO_CHEL = 1                  # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
CANCEL_TIME = 10                   # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
REWARD =[[9840,20,25,100]]            # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,countMIN1,countMAX1,chance1],[itemId2,countMIN2,countMAX2,chanceN],...
[itemIdN,countMINN,countMAXN,chanceN]]
TIM = []      # Часы, в течение которых ивент не начнётся. Т.е если написано 20, то в период с 20:00:00 до 20:59:59 ивент не стартует.
RAD = 5000                        # Если в момент выдачи награды игрок находится вне этого радиуса, то награда не выдаётся.

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

def init_LoadGlobalData(self) :
  self.startQuestTimer("open", AFTER_RESTART *60000, None, None)
  return

def onTalk (Self,npc,player):
 global closed
 st = player.getQuestState(qn)
 global ATTAKERS
 npcId = npc.getNpcId()
 if npcId == REGISTER:
  if closed<>1 and int(Date().getHours()) not in TIM :
   if not player.isInOlympiadMode() :
    if player.getLevel() >= LEVEL:
     if player.getName() not in ATTAKERS :
      kolych = len(ATTAKERS)
      if kolych <= YCH_MAX :
       if PENI_KOL<>0:   
        if st.getQuestItemsCount(PENI)>PENI_KOL:
          st.takeItems(PENI,PENI_KOL)
          ATTAKERS.append(player.getName())
          return "reg.htm"
        else:
          st.exitQuest(1)
          return "nopeni.htm"
       else:
          ATTAKERS.append(player.getName())
          return "reg.htm"
      else:		 
        return "max.htm"
     else:
      return "yje.htm"
    else:
     return "lvl.htm"
   else:
    return "You register in olympiad games now"
  else:
   return "noreg.htm"  
 return

def onAdvEvent (self,event,npc,player):
  global tek,nyj,ATTAKERS,kolych,annom,closed
  if event == "open" :
    ATTAKERS=[]
    closed=0
    annom=1
    spawncoord=locr[Rnd.get(len(locr))]
    npc=self.addSpawn(REGISTER,spawncoord[0],spawncoord[1],spawncoord[2],30000,False
,0)
    npc.startAbnormalEffect(8192)
    self.startQuestTimer("close", TIME_FOR_REG*60000, npc, None)
    self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
     Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom [u][b]- 1[/b][/u]) + " minutes until event "+str(NAME)+" will start! You can register in "+str(LOC)+".")
    annom=annom+1
  if event == "close":
   tek=0
   nyj=1
   self.startQuestTimer("open", TIME_FOR_WAIT*60000, None, None)
   kolych = len(ATTAKERS)
   if kolych < YCH_MIN :
     npc.deleteMe()
     closed=1
     Announcements.getInstance().announceToAll("Event "+str(NAME)+" was canceled due lack of participation.") 
   else:
     closed=1
     Announcements.getInstance().announceToAll("Event "+str(NAME)+" has started!")
     npc.deleteMe()
     self.addSpawn(MOB,locf[0],locf[1],locf[2],30000,False,CANCEL_TIME*60000)
     self.startQuestTimer("return_l", CANCEL_TIME*60000, None, None)
     for nm in ATTAKERS :
      i=L2World.getInstance().getPlayer(nm)
      try :
       if i.isOnline() :
        i.stopAllEffects()
        i.teleToLocation(locfp[0],locfp[1],locfp[2]) 
      except : pass
  if event == "announce" and closed==0 and (TIME_FOR_REG - ANNOUNCE_INTERVAL * annom)<>0: 
    Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom ) + " minutes until event "+str(NAME)+" will start! You can register in "+str(LOC)+".")
    annom=annom+1
    self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
  if event == "return" :
    Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Players win!")
    for nm in ATTAKERS :
     i=L2World.getInstance().getPlayer(nm)
     try :
      if i.isOnline() :
       i.teleToLocation(83456,148208,-3406)
     except : pass
  if event == "return_l" :
    Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Monsters win!")
    for nm in ATTAKERS :
     i=L2World.getInstance().getPlayer(nm)
     try :
      if i.isOnline() :
       i.teleToLocation(83456,148208,-3406)
     except : pass
  if event == "exit" :
    ATTAKERS.remove(player.getName())
    return "exit.htm"
  return 

def onAttack (self,npc,player,damage,isPet):
 if player.getName() not in ATTAKERS :
   try:
    player.teleToLocation(147725,-56517,9999)
   except : pass
 return

def onKill(self,npc,player,isPet):
 global tek,nyj,kolych
 mobcount=(MOBS_TO_CHEL * kolych)+15
 tek=tek+1
 if tek==nyj and (2*nyj) < mobcount:
  for i in range(0,2*tek) :
     randx = 25*(20-Rnd.get(40))
     randy = 25*(20-Rnd.get(40))
     self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
  nyj=2*tek
  tek=0
  self.cancelQuestTimer("return_l",None,None)
  self.startQuestTimer("return_l", CANCEL_TIME*60000, None, None)
  npcppc=self.addSpawn(MOB,locf[0],locf[1],locf[2]+100,30000,False,CANCEL_TIME*600
00)
  npcppc.broadcastPacket(CreatureSay(npcppc.getObjectId(), 1, "Event "+str(NAME)+": ","You have "+str(CANCEL_TIME)+" minutes for kill this monsters!"))
  npcppc.deleteMe()
 elif tek==nyj and (2*nyj) >= mobcount:
  for i in range(0,mobcount) :
     randx = 25*(20-Rnd.get(40))
     randy = 25*(20-Rnd.get(40))
     mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
     mobb.startAbnormalEffect(8192)
  nyj=mobcount+1
  tek=0
  self.cancelQuestTimer("return_l",None,None)
  self.startQuestTimer("return_l", (CANCEL_TIME)*60000, None, None)
  npcppc=self.addSpawn(MOB,locf[0],locf[1],locf[2]+100,30000,False,CANCEL_TIME*600
00)
  npcppc.broadcastPacket(CreatureSay(npcppc.getObjectId(), 1, "Event "+str(NAME)+": ","You have "+str(CANCEL_TIME)+" minutes for kill this monsters!"))
  npcppc.deleteMe()
 elif tek==mobcount:
  for nm in ATTAKERS :
   player=L2World.getInstance().getPlayer(nm)
   if player<>None:
    if abs(abs(player.getX())-abs(locf[0]))>RAD or abs(abs(player.getY())-abs(locf[1]))>RAD :
     ATTAKERS.remove(nm)
   else:
     ATTAKERS.remove(nm)
  for nm in ATTAKERS :
   i=L2World.getInstance().getPlayer(nm)
   try:
    for id, countmin, countmax, chance in REWARD :
     if Rnd.get(100)<=chance :
      count=Rnd.get(countmin,countmax)
      i.getQuestState(qn).giveItems(id,count)
   except : pass
  self.startQuestTimer("return", 30000, None, None)  
  self.cancelQuestTimer("return_l",None,None)     
 return

QUEST = Quest(5555, qn, "Peklo")

QUEST.addKillId(int(MOB))
QUEST.addAttackId(int(MOB))
QUEST.addStartNpc(int(REGISTER))
QUEST.addTalkId(int(REGISTER))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вобще скрипт у тя ругается на строку:

Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom - 1) + " minutes until event "+str(NAME)+" will start! You can register in "+str(LOC)+".")

Попробуй в этой строке (TIME_FOR_REG - ANNOUNCE_INTERVAL * annom - 1) сменить на (TIME_FOR_REG - ANNOUNCE_INTERVAL * annom), если после этого скрипт нормально загрузится, будем выяснять что именно ты хотел видеть в анонсе)).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ну вобще скрипт у тя ругается на строку:

Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom - 1) + " minutes until event "+str(NAME)+" will start! You can register in "+str(LOC)+".")

Попробуй в этой строке (TIME_FOR_REG - ANNOUNCE_INTERVAL * annom - 1) сменить на (TIME_FOR_REG - ANNOUNCE_INTERVAL * annom), если после этого скрипт нормально загрузится, будем выяснять что именно ты хотел видеть в анонсе)).

 

 

 

нет, не помогло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну тогда попробуй этот скрипт, просто влом перебирать и смотреть, где там не соответствия.

этот скрипт себя отлично показывал на сборках сказки и л2 опен (исходы l2j)

__init__.py.txt

 

Если выдаст ошибку, обязательно выложи её сюда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь такая ошибка..

 

Traceback (innermost last):

(no code object) at line 0

SyntaxError: ('invalid syntax', ('__init__.py', 52, 1, 'def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)'))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хм.... оба скрипта там апсолютно идентичны по коду, по крайней мере до строки с этой ошибкой, тока импортами немного различаются.

тока если еще попробовать дописать импорты, хотя уже сам ничё не понимаю (

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за помощь, адмиралио) Исправил ошибку.

 

1. Дописал имопорты

2. и была ошибка, там где в логе указывалась. Вот как должно выглядить)

class Quest (JQuest) :

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понимаю тему можно закрыть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Admiralio, ошибки теперь нет, но ивент в игре всё ровно не пускается, в базу всё хорошо залито, проверил spawn. В чем может быть проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в самой сборке (

На сборке L2WT например скрипт ошибок не выдаёт, ивент запускается, но мобы перестают спавнится если хотя бы один из участников умирает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
в самой сборке (

На сборке L2WT например скрипт ошибок не выдаёт, ивент запускается, но мобы перестают спавнится если хотя бы один из участников умирает.

 

не, на ней он работает, я сам проверял, просто у меня сборка была на флешке, аа флэшка сгорела, я вытащил сервер по частям, собрал основу, базу, слава богу, вытащил полностью. А вот ивент этот не вытащился вовсе, но раньше он работал, мне администратор этого портала помогал с ним через аську, вот только аську и ник его я забыл... Поэтому в сборке ивент работал, а так же мобы, появлялись, работал ивент полноценно.

 

Саня, какая сборка у тебя?

 

La2Base 1.1.8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел ошибку в твоём родном скрипте (вроде как)! у тебя там в команде анонса не хватает одного плюсика.

 

(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom - 1) +

 

попробуй сменить на:

(+str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom - 1)+

 

если я не прав - можете и пнуть, я не обижусь)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Нашел ошибку в твоём родном скрипте (вроде как)! у тебя там в команде анонса не хватает одного плюсика.

 

(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom - 1) +

 

попробуй сменить на:

(+str(TIME_FOR_REG - ANNOUNCE_INTERVAL * annom - 1)+

 

если я не прав - можете и пнуть, я не обижусь)

 

Пинать не буду)) но ты помог обратить внимание снова на ту строку, родного скрипта и я решил убрать код по бокам цифры -1 [-u-][-b-] -1 [-/-b-][-/-u-] (минусы я поставил, чтобы он тут как код не показался). Ну вообщем код этот я убрал, оставив только цифру -1, после чего скрипт загрузился, без ошибок, а также и появился регистратор NPC. Но это оказалось ещё пол дела.. После того как я подхожу к NPC и пытаюсь зарегистрироваться, выдаётся "script error".

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

Вот как выглядит у меня

import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.datatables import DoorTable
from net.sf.l2j.gameserver.datatables import SkillTable
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
from net.sf.l2j.gameserver import Announcements
from net.sf.l2j import L2DatabaseFactory
from net.sf.l2j.gameserver.ai import CtrlIntention
from net.sf.l2j.util import Rnd
from java.lang import System
from net.sf.l2j.gameserver.model import L2World  

Вот как выгляит в оригинале

net.la2base.gameserver.model.quest import State
from net.la2base.gameserver.model.quest import QuestState
from net.la2base.gameserver.datatables import DoorTable
from net.la2base.gameserver.datatables import SkillTable
from la2base.gameserver.model.quest.jython import QuestJython as JQuest
from la2base.gameserver import Announcements
from net.la2base import L2DatabaseFactory
from net.la2base.gameserver.ai import CtrlIntention
from la2base.util import Rnd
from la2base.java.lang import System
from net.la2basegameserver.model import L2World

 

Из этого видно, что я "from net.la2base" заменил на "from net.sf.l2j.", но "from la2base" я заменил также как и "from net.la2base", т.е. на "from net.sf.l2j.".

я пробовал заменять на "sf.l2j", "l2j", но даёт ошибку import name

Я думаю, что нужно что-то другое...

 

P.S. + перед str, как ты говорил, не значит ничего, даже ошибки не даёт, что с ним, что без него)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прописал импорты так:

import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
from net.sf.l2j.gameserver import Announcements
from net.sf.l2j import L2DatabaseFactory
from net.sf.l2j.gameserver.ai import CtrlIntention
from net.sf.l2j.util import Rnd
from java.lang import System
from net.sf.l2j.gameserver.model import L2World
from java.util import Date

 

Зарегистрироваться смог. Проверю полностью напишу)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну ивент полностью работает. Всё нормально. Но приз всё ровно не выдаётся за победу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь всё работает!)

Спасибо за помощь, Admiralio.

Тему можно закрыть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...