|
Lineage II
Описание темы:срочно! |
Ссылки сообщества |
Изображения и альбомы |
Пользователи |
К странице... |
Опции темы |
04.09.2010, 22:36 | #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')) как исправить ошибку? |
05.09.2010, 09:32 | #2 |
Супергерой
|
Re: Ошибка с ивентом пекло
Либо ошибка в синтаксисе, либо в импортах.
Код _init_.py покажи. И какая сборка? |
05.09.2010, 11:17 | #3 |
Пользователь
|
Re: Ошибка с ивентом пекло
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.getObjec tId(), 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.getObjec tId(), 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 Последний раз редактировалось OkoPwnz; 05.09.2010 в 11:19. Причина: Добавлено сообщение |
05.09.2010, 13:35 | #4 |
Супергерой
|
Re: Ошибка с ивентом пекло
Вроде бы ошибок нет.
Может стоит попробовать др. вариант пекла : Код:
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)) |
06.09.2010, 02:43 | #5 |
Герой
|
Re: Ошибка с ивентом пекло
from net.sf.l2j.gameserver.serverpackets
вот и ошибка импорт неверно задан надо from net.sf.l2j.gameserver.serverpackets заменить на from net.sf.l2j.gameserver.serverpackets import CreatureSay |
30.01.2011, 21:54 | #6 |
Пользователь
|
Re: Ошибка с ивентом пекло
Похожая ошибка, токо аж в 3 эвентах, 2 из них встроеные, сборка la2 brasil
текст ошибки: Error on: C:\l2brasil\L2JBrasil_GameServer\data\jscript\ques ts\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 - 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 (пользователей: 0 , гостей: 1) | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ошибка с пекло | OkoPwnz | Работа со скриптами | 0 | 04.09.2010 17:31 |
ивент пекло | OkoPwnz | Lineage II | 0 | 06.08.2010 15:12 |
пекло! | OkoPwnz | Lineage II | 7 | 04.08.2010 13:31 |