Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Ошибка с ивентом пекло
#1
Error on: C:\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', 11, 46, 'from net.sf.l2j.gameserver.serverpackets'))

как исправить ошибку?
Ответ
#2
Либо ошибка в синтаксисе, либо в импортах.
Код _init_.py покажи. И какая сборка?
Ответ
#3
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 net.sf.l2j.gameserver.serverpackets
from java.util import Date

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 - 1) + " 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*60000)
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*60000)
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))

Добавлено через 1 минуту
сборка La2Base_1.1.7
Ответ
#4
Вроде бы ошибок нет.
Может стоит попробовать др. вариант пекла :
Код:
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.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

qn = "5555_Peklo"
ATTAKERS = []
tek = 0
nyj = 1
NAME = "peklo" # Название (только английские символы)
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [82698,148638,-3473] # Соответственно координаты, где будет появляться НПЦ
PENI = 4037 # Итем, необходимый для участия
PENI_KOL = 0 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
TIME_FOR_WAIT = 90 # Время между ивентами в минутах
TIME_FOR_REG = 14 # Время на регистрацию в минутах
TEST_AFTER_RESTART = 10 # Время, через которое начнётся ивент после рестарта в минутах.
ANNOUNCE_INTERVAL = 2 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [98992,149040,-3240] # Соответственно координаты, где будет появляться 1 моб
RADIUS = 400 # Радиус появления мобов относительно 1 моба
MOB_R = 55555 #  Моб, при помощи которого выдаётся награда. Здесь должен быть прописан дроп.
YCH_MIN = 1 # Минимальное количество участников
YCH_MAX = 20 # Максимальное количество участников.
MOBS_TO_CHEL = 5 # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
DOORS = [] # Пишем сюда список DoorId дверей через запятую, которые необходимо закрывать/открывать по началу/окончанию ивента. Или оставляем пустым.

class Quest (JQuest) :
tek=0
nyj=1
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

def init_LoadGlobalData(self) :
   self.saveGlobalQuestVar("annom", "1")
   closed = self.loadGlobalQuestVar("closed")
   self.saveGlobalQuestVar("count", "0")
   self.startQuestTimer("open", TEST_AFTER_RESTART *60000, None, None)
   return

def onTalk (Self,npc,player):
   npcId = npc.getNpcId()
   if npcId == REGISTER:
        if player not in ATTAKERS :
         kolych = 0
         for i in ATTAKERS :
          kolych = kolych + 1
         if kolych <= YCH_MAX :
          if PENI_KOL<>0:  
           if st.getQuestItemsCount(PENI)>PENI_KOL:
                 st.takeItems(PENI,PENI_KOL)
                 ATTAKERS.append(player)
                 Self.saveGlobalQuestVar(str(player.getObjectId()), "in")
                 return "reg.htm"
           else:
                 st.exitQuest(1)
                 return "nopeni.htm"
          else:
                 ATTAKERS.append(player)
                 Self.saveGlobalQuestVar(str(player.getObjectId()), "in")
                 return "reg.htm"
         else:          
           return "max.htm"
        else:
         return "yje.htm"
   return

def onAdvEvent (self,event,npc,player):
   global tek
   global nyj
   global ATTAKERS
   closed = self.loadGlobalQuestVar("closed")
   annom = int(self.loadGlobalQuestVar("annom"))
   if event == "open" :
         self.saveGlobalQuestVar("closed", "0")
         self.saveGlobalQuestVar("annom", "1")
         npc=self.addSpawn(REGISTER,locr[0],locr[1],locr[2],30000,False,0)
         self.startQuestTimer("close", TIME_FOR_REG*60000, npc, None)
         self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
         Announcements.getInstance().announceToAll("Opened registration for "+str(NAME)+" event!")
   if event == "close":
        tek=0
        nyj=1
        self.startQuestTimer("open", TIME_FOR_WAIT*60000, None, None)
        kolych = 0
        for i in ATTAKERS :
          kolych = kolych + 1
        if kolych < YCH_MIN :
          npc.deleteMe()
          self.saveGlobalQuestVar("closed", "1")
          Announcements.getInstance().announceToAll("Event "+str(NAME)+" was canceled.")
        else:
          self.saveGlobalQuestVar("kolych", str(kolych))
          self.saveGlobalQuestVar("closed", "1")
          if DOORS<>[]:
           for i in DOORS:
                DoorTable.getInstance().getDoor(int(i)).closeMe()
          Announcements.getInstance().announceToAll("Event "+str(NAME)+" has started!")
          npc.deleteMe()
          self.addSpawn(MOB,locf[0],locf[1],locf[2],30000,False,600000)
          for i in ATTAKERS :
           if i.isOnline() :
                i.teleToLocation(98992,149040,-3240)
   if event == "announce" and closed=="0" and (TIME_FOR_REG - ANNOUNCE_INTERVAL * int(annom))<>0:
         Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL * int(annom) ) + " minutes until event "+str(NAME)+" start!")
         self.saveGlobalQuestVar("annom", str(annom+1))
         self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
   if event == "return" :
         if DOORS<>[]:
           for i in DOORS:
                DoorTable.getInstance().getDoor(int(i)).openMe()
         self.saveGlobalQuestVar("count", "0")
         con=L2DatabaseFactory.getInstance().getConnection()
         delchars=con.prepareStatement("DELETE FROM `quest_global_data` WHERE quest_name='5555_Peklo' AND value='in'")
         try :
                delchars.executeUpdate()
                delchars.close()
                con.close()
         except :
                try : con.close()
                except : pass
         Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended!")
         for i in ATTAKERS :
           if i.isOnline() :
                i.teleToLocation(locr[0],locr[1],locr[2])
         ATTAKERS=[]
   if event == "exit" :
         ATTAKERS.remove(player)
         con=L2DatabaseFactory.getInstance().getConnection()
         delchars=con.prepareStatement("DELETE FROM `quest_global_data` WHERE quest_name='5555_Peklo' AND var=?")
         delchars.setString(1, str(player.getObjectId()))
         try :
                delchars.executeUpdate()
                delchars.close()
                con.close()
         except :
                try : con.close()
                except : pass
         return "exit.htm"
   return

def onAttack (self,npc,player,damage,isPet):
  if player not in ATTAKERS :
   if self.loadGlobalQuestVar(str(player.getObjectId())) == "in" :
         ATTAKERS.append(player)
   else:
         player.teleToLocation(147725,-56517,9999)
  return

def onKill(self,npc,player,isPet):
  global tek
  global nyj
  mobcount=(MOBS_TO_CHEL * int(self.loadGlobalQuestVar("kolych")))
  tek=tek+1
  if tek==nyj and (2*nyj) < mobcount:
   for i in range(0,2*tek) :
          rand = Rnd.get(7)
          if rand in [0,4] :
                randx = 25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          elif rand in [1,5] :
                randx = -25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [2,6] :
                randx = 25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [3,7] :
                randx = -25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,600000)
   nyj=2*tek
   tek=0
  elif tek==nyj and (2*nyj) > mobcount:
   for i in range(0,mobcount) :
          rand = Rnd.get(7)
          if rand in [0,4] :
                randx = 25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          elif rand in [1,5] :
                randx = -25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [2,6] :
                randx = 25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [3,7] :
                randx = -25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,600000)
   nyj=mobcount+1
   tek=0
  elif tek==mobcount:
   for i in range(0,mobcount) :
          rand = Rnd.get(7)
          if rand in [0,4] :
                randx = 25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          elif rand in [1,5] :
                randx = -25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [2,6] :
                randx = 25*Rnd.get(20)
                randy = -25*Rnd.get(20)
          elif rand in [3,7] :
                randx = -25*Rnd.get(20)
                randy = 25*Rnd.get(20)
          npc = self.addSpawn(MOB_R,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,600000)
          npc.reduceCurrentHp(9999999,player)
          npc.deleteMe()
   self.startQuestTimer("return", 120000, None, None)  
  return
        
QUEST = Quest(5555, qn, "Peklo")

QUEST.addKillId(int(MOB))
QUEST.addAttackId(int(MOB))
QUEST.addStartNpc(int(REGISTER))
QUEST.addTalkId(int(REGISTER))
Ответ
#5
from net.sf.l2j.gameserver.serverpackets
вот и ошибка импорт неверно задан
надо
from net.sf.l2j.gameserver.serverpackets
заменить на
from net.sf.l2j.gameserver.serverpackets import CreatureSay
Ответ
#6
Похожая ошибка, токо аж в 3 эвентах, 2 из них встроеные, сборка la2 brasil
текст ошибки:

Error on: C:\l2brasil\L2JBrasil_GameServer\data\jscript\quests\5555_Peklo\__init__.py.error.log
Line: -1 - Column: -1

Traceback (innermost last):
(no code object) at line 0
ValueError: Strings added to sha hashes must not contain characters with value > 255

как дальше видно я изменил импорты но к сожалению это не помогло

Код:
import sys
from com.it.br.gameserver.model.quest import State
from com.it.br.gameserver.model.quest import QuestState
from com.it.br.gameserver.model.quest.jython import QuestJython as JQuest
from com.it.br.gameserver import Announcements
from com.it.br import L2DatabaseFactory
from com.it.br.gameserver.ai import CtrlIntention
from com.it.br.util import Rnd
from java.lang import System
from com.it.br.gameserver.model import L2World
from com.it.br.gameserver.network.serverpackets import CreatureSay
from java.util import Date

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*60000)
   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*60000)
   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))
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Что за ошибка? serg5777 22 9,169 07-11-2023, 09:49 PM
Последний пост: ntking
  Ошибка Cannot read field "race" valdemart123 0 1,073 12-04-2021, 04:44 AM
Последний пост: valdemart123
  При запуске game server на сайте (sw13) ошибка mysql 0 AndreDeiu 1 1,357 09-27-2020, 11:32 PM
Последний пост: Lord_Gothic
  Ошибка геймсервера zane 9 2,587 04-27-2018, 12:28 PM
Последний пост: DmnC
  Ошибка загрузки гейм сервера zane 5 2,050 04-17-2018, 08:03 PM
Последний пост: zane
  Ошибка телепорта Rork 1 1,288 03-02-2018, 03:05 PM
Последний пост: Gaikotsu
  Ошибка с ГМ шопом silok 1 1,330 01-11-2018, 07:36 AM
Последний пост: Narsell
  Ошибка PWSOFT Ananim 0 1,386 07-07-2017, 11:42 AM
Последний пост: Ananim
  Ошибка _aveList; knaif 1 1,415 06-22-2017, 03:07 PM
Последний пост: Trimius
  Ошибка KastaMeN 1 1,833 06-16-2017, 11:32 PM
Последний пост: Mangol

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


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