Эвент пекло
14 ответов283 просмотровСейчас просматривают: 1
· 29.01.2010, 17:07
Сборка Open
Скрипт:
Раскрывающийся текст
import sys
from com.l2open.gameserver.model.quest import State
from com.l2open.gameserver.model.quest import QuestState
from com.l2open.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2open.gameserver import Announcements
from com.l2open import L2DatabaseFactory
from com.l2open.gameserver.ai import CtrlIntention
from com.l2open.util import Rnd
from java.lang import System
from com.l2open.gameserver.model import L2World
qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=1
ATTAKERS = []
tek = 0
nyj = 1
closed = 1
# =======================================
# КОНФИГ
# =======================================
# Название (только английские символы)
NAME = "IIeklo"
LOC = "Town of Goddard" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [[147560,-56291,-2781]] # Соответственно координаты, где будет появляться НПЦ. Сколько угодно различных точек
PENI = 4037 # Итем, необходимый для участия
PENI_KOL = 1 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 62 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 5 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 75 # Время между ивентами в минутах
TIME_FOR_REG = 11 # Время на регистрацию в минутах
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [-179513,209550,-15506] # Соответственно координаты, где будет появляться 1 моб
locfp = [-179580,210916,-15487] # Соответственно координаты, куда телепортируются игроки. Здесь же и ресаются.
RADIUS = 1 # Радиус появления мобов относительно 1 моба
MOB_R = 55555 # Моб, при помощи которого выдаётся награда. Здесь должен быть прописан дроп.
YCH_MIN = 1 # Минимальное количество участников
YCH_MAX = 80 # Максимальное количество участников.
MOBS_TO_CHEL = 150 # Количество мобов на человека.
CANCEL_TIME = 2 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
REWARD =[[4037,1,111,100]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,countMIN1,countMAX1,chance1],[itemId2,countMIN2,countMAX2,chanceN],...
[itemIdN,countMINN,countMAXN,chanceN]]
TIM = [] # Часы, в течение которых ивент не начнётся. Т.е если написано 20, то в период с 20:00:00 до 20:59:59 ивент не стартует.
RAD = 9000 # Если в момент выдачи награды игрок находится вне этого радиуса, то награда не выдаётся.
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:
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)
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 ) + " 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.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.")
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 onKill(self,npc,player,isPet):
global tek,nyj,kolych
mobcount=(MOBS_TO_CHEL * 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 = 5*Rnd.get(20)
randy = 5*Rnd.get(20)
elif rand in [1,5] :
randx = -5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [2,6] :
randx = 5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [3,7] :
randx = -5*Rnd.get(20)
randy = 5*Rnd.get(20)
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]+10,30000,False,CANCEL_TIME*6000
0)
Announcements.getInstance().announceToAll("You kill event monster, go next!!")
elif tek==nyj and (2*nyj) > mobcount:
for i in range(0,mobcount) :
rand = Rnd.get(7)
if rand in [0,4] :
randx = 5*Rnd.get(20)
randy = 5*Rnd.get(20)
elif rand in [1,5] :
randx = -5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [2,6] :
randx = 5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [3,7] :
randx = -5*Rnd.get(20)
randy = 5*Rnd.get(20)
mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
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]+10,30000,False,CANCEL_TIME*6000
0)
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))
from com.l2open.gameserver.model.quest import State
from com.l2open.gameserver.model.quest import QuestState
from com.l2open.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2open.gameserver import Announcements
from com.l2open import L2DatabaseFactory
from com.l2open.gameserver.ai import CtrlIntention
from com.l2open.util import Rnd
from java.lang import System
from com.l2open.gameserver.model import L2World
qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=1
ATTAKERS = []
tek = 0
nyj = 1
closed = 1
# =======================================
# КОНФИГ
# =======================================
# Название (только английские символы)
NAME = "IIeklo"
LOC = "Town of Goddard" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [[147560,-56291,-2781]] # Соответственно координаты, где будет появляться НПЦ. Сколько угодно различных точек
PENI = 4037 # Итем, необходимый для участия
PENI_KOL = 1 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 62 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 5 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 75 # Время между ивентами в минутах
TIME_FOR_REG = 11 # Время на регистрацию в минутах
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [-179513,209550,-15506] # Соответственно координаты, где будет появляться 1 моб
locfp = [-179580,210916,-15487] # Соответственно координаты, куда телепортируются игроки. Здесь же и ресаются.
RADIUS = 1 # Радиус появления мобов относительно 1 моба
MOB_R = 55555 # Моб, при помощи которого выдаётся награда. Здесь должен быть прописан дроп.
YCH_MIN = 1 # Минимальное количество участников
YCH_MAX = 80 # Максимальное количество участников.
MOBS_TO_CHEL = 150 # Количество мобов на человека.
CANCEL_TIME = 2 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
REWARD =[[4037,1,111,100]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,countMIN1,countMAX1,chance1],[itemId2,countMIN2,countMAX2,chanceN],...
[itemIdN,countMINN,countMAXN,chanceN]]
TIM = [] # Часы, в течение которых ивент не начнётся. Т.е если написано 20, то в период с 20:00:00 до 20:59:59 ивент не стартует.
RAD = 9000 # Если в момент выдачи награды игрок находится вне этого радиуса, то награда не выдаётся.
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:
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)
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 ) + " 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.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.")
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 onKill(self,npc,player,isPet):
global tek,nyj,kolych
mobcount=(MOBS_TO_CHEL * 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 = 5*Rnd.get(20)
randy = 5*Rnd.get(20)
elif rand in [1,5] :
randx = -5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [2,6] :
randx = 5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [3,7] :
randx = -5*Rnd.get(20)
randy = 5*Rnd.get(20)
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]+10,30000,False,CANCEL_TIME*6000
0)
Announcements.getInstance().announceToAll("You kill event monster, go next!!")
elif tek==nyj and (2*nyj) > mobcount:
for i in range(0,mobcount) :
rand = Rnd.get(7)
if rand in [0,4] :
randx = 5*Rnd.get(20)
randy = 5*Rnd.get(20)
elif rand in [1,5] :
randx = -5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [2,6] :
randx = 5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [3,7] :
randx = -5*Rnd.get(20)
randy = 5*Rnd.get(20)
mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
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]+10,30000,False,CANCEL_TIME*6000
0)
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.У меня получилось сделать чтоб писало когда следующая волна
Код
Announcements.getInstance().announceToAll("You kill event monster, go next!!")
Как сделать чтоб моб просто это говорил...?
2.Почему примерно после 6ой волны мобы перестают появлятся?
Помогите дописать скрипт.
3.Почему когда всех мобов убиваешь пишет, что монстры победили?
Помогите дописать скрипт.
4.Как сделать чтоб дохлых игроков воскрешало через определенное время?
Код
self.startQuestTimer("res", RES_TIME*1000, None, None)
Знаю что чет типа того.
И помогите вставить это в скрипт, я не знаю на какое место.
0
· 31.01.2010, 09:53
Phozik: Сборка Open
Скрипт:Раскрывающийся текстimport sys
from com.l2open.gameserver.model.quest import State
from com.l2open.gameserver.model.quest import QuestState
from com.l2open.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2open.gameserver import Announcements
from com.l2open import L2DatabaseFactory
from com.l2open.gameserver.ai import CtrlIntention
from com.l2open.util import Rnd
from java.lang import System
from com.l2open.gameserver.model import L2World
qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=1
ATTAKERS = []
tek = 0
nyj = 1
closed = 1
# =======================================
# КОНФИГ
# =======================================
# Название (только английские символы)
NAME = "IIeklo"
LOC = "Town of Goddard" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [[147560,-56291,-2781]] # Соответственно координаты, где будет появляться НПЦ. Сколько угодно различных точек
PENI = 4037 # Итем, необходимый для участия
PENI_KOL = 1 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 62 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 5 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 75 # Время между ивентами в минутах
TIME_FOR_REG = 11 # Время на регистрацию в минутах
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [-179513,209550,-15506] # Соответственно координаты, где будет появляться 1 моб
locfp = [-179580,210916,-15487] # Соответственно координаты, куда телепортируются игроки. Здесь же и ресаются.
RADIUS = 1 # Радиус появления мобов относительно 1 моба
MOB_R = 55555 # Моб, при помощи которого выдаётся награда. Здесь должен быть прописан дроп.
YCH_MIN = 1 # Минимальное количество участников
YCH_MAX = 80 # Максимальное количество участников.
MOBS_TO_CHEL = 150 # Количество мобов на человека.
CANCEL_TIME = 2 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
REWARD =[[4037,1,111,100]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,countMIN1,countMAX1,chance1],[itemId2,countMIN2,countMAX2,chanceN],...
[itemIdN,countMINN,countMAXN,chanceN]]
TIM = [] # Часы, в течение которых ивент не начнётся. Т.е если написано 20, то в период с 20:00:00 до 20:59:59 ивент не стартует.
RAD = 9000 # Если в момент выдачи награды игрок находится вне этого радиуса, то награда не выдаётся.
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:
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)
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 ) + " 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.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.")
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 onKill(self,npc,player,isPet):
global tek,nyj,kolych
mobcount=(MOBS_TO_CHEL * 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 = 5*Rnd.get(20)
randy = 5*Rnd.get(20)
elif rand in [1,5] :
randx = -5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [2,6] :
randx = 5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [3,7] :
randx = -5*Rnd.get(20)
randy = 5*Rnd.get(20)
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]+10,30000,False,CANCEL_TIME*6000
0)
Announcements.getInstance().announceToAll("You kill event monster, go next!!")
elif tek==nyj and (2*nyj) > mobcount:
for i in range(0,mobcount) :
rand = Rnd.get(7)
if rand in [0,4] :
randx = 5*Rnd.get(20)
randy = 5*Rnd.get(20)
elif rand in [1,5] :
randx = -5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [2,6] :
randx = 5*Rnd.get(20)
randy = -5*Rnd.get(20)
elif rand in [3,7] :
randx = -5*Rnd.get(20)
randy = 5*Rnd.get(20)
mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
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]+10,30000,False,CANCEL_TIME*6000
0)
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.У меня получилось сделать чтоб писало когда следующая волнаКодAnnouncements.getInstance().announceToAll("You kill event monster, go next!!")
Как сделать чтоб моб просто это говорил...?
2.Почему примерно после 6ой волны мобы перестают появлятся?
Помогите дописать скрипт.
3.Почему когда всех мобов убиваешь пишет, что монстры победили?
Помогите дописать скрипт.
4.Как сделать чтоб дохлых игроков воскрешало через определенное время?Кодself.startQuestTimer("res", RES_TIME*1000, None, None)
Знаю что чет типа того.
И помогите вставить это в скрипт, я не знаю на какое место.
У меня тоже не работает прошу когонибуть поправить
0
· 04.02.2010, 07:22
:^UP
============================
Я изменю мир,но бог не даровал исходников...
============================
0
· 07.02.2010, 00:43
Вот.... частично подправленный:
Раскрывающийся текст
Код
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 import CreatureSay
from java.util import Date
qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=0
ATTAKERS = []
tek = 0
nyj = 1
closed = 1
# =======================================
# КОНФИГ
# =======================================
# Название (только английские символы)
NAME = "IIeklo"
LOC = "Town of Giran" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [[82448,149424,-3468]] # Соответственно координаты, где будет появляться НПЦ. Сколько угодно различных точек
PENI = 57 # Итем, необходимый для участия
PENI_KOL = 1 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 78 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 3 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 10 # Время между ивентами в минутах
TIME_FOR_REG = 5 # Время на регистрацию в минутах
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
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 = 8 # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
CANCEL_TIME = 5 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
REWARD =[[4037,1,150,100],[8762,1,3,20],[8761,1,3,20],[8760,1,3,20]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,countMIN1,countMAX1,chance1],[itemId2,countMIN2,countMAX2,chanceN],...[itemIdN,countMINN,countMAXN,chanceN]]
TIM = [] # Часы, в течение которых ивент не начнётся. Т.е если написано 20, то в период с 20:00:00 до 20:59:59 ивент не стартует.
RAD = 500 # Если в момент выдачи награды игрок находится вне этого радиуса, то награда не выдаётся.
RES_TIME = 7 # Время через которое мертвый персонаж будет оживлен.
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,res_timer
if event == "open" :
ATTAKERS=[]
closed=0
annom=0
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(LOC)+".")
if event == "close":
res_timer = 1
self.startQuestTimer("res", RES_TIME*1000, None, None)
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("Мясорубка не состоялась.Недостаточно учасников.")
else:
closed=1
Announcements.getInstance().announceToAll("Мясорубка началась!!!")
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:
Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL - annom ) + " минут до начала мясорубки. Регистрация в "+str(LOC)+".")
annom = annom+1
self.startQuestTimer("announce2", ANNOUNCE_INTERVAL*60000, None, None)
if event == "announce2" and closed==0:
Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL - annom ) + " минут до начала мясорубки. Регистрация в "+str(LOC)+".")
annom = annom+1
self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
if event == "return" :
res_timer=0
annom = 0
Announcements.getInstance().announceToAll("Мясорубка окончена: Игроки выиграли!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
try :
if i.isOnline() :
i.teleToLocation(83456,148208,-3406)
except : pass
if event == "return_l" :
res_timer=0
annom = 0
Announcements.getInstance().announceToAll("Мясорубка окончена: Монстры выиграли!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
try :
if i.isOnline() :
i.teleToLocation(83456,148208,-3406)
except : pass
if event == "res" and res_timer==1:
self.startQuestTimer("res2", RES_TIME*1000, None, None)
for nm in ATTAKERS:
r=L2World.getInstance().getPlayer(nm)
if r<>None:
if abs(abs(r.getX())-abs(locf[0]))<RAD or abs(abs(r.getY())-abs(locf[1]))<RAD :
if r.isOnline() :
if r.isDead():
r.doRevive()
r.setCurrentCp(r.getMaxCp())
r.setCurrentHp(r.getMaxHp())
r.setCurrentMp(r.getMaxMp())
r.stopAllEffects()
r.broadcastStatusUpdate()
r.broadcastUserInfo()
if event == "res2" and res_timer==1:
self.startQuestTimer("res", RES_TIME*1000, None, None)
for nm in ATTAKERS:
r=L2World.getInstance().getPlayer(nm)
if r<>None:
if abs(abs(r.getX())-abs(locf[0]))<RAD or abs(abs(r.getY())-abs(locf[1]))<RAD :
if r.isOnline() :
if r.isDead():
r.doRevive()
r.setCurrentCp(r.getMaxCp())
r.setCurrentHp(r.getMaxHp())
r.setCurrentMp(r.getMaxMp())
r.stopAllEffects()
r.broadcastStatusUpdate()
r.broadcastUserInfo()
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)
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, "Ивент "+str(NAME)+": ","У вас "+str(CANCEL_TIME)+" минут что-бы уничтожить всех монстров!"))
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, "Ивент "+str(NAME)+": ","У вас "+str(CANCEL_TIME)+" минут что-бы уничтожить всех монстров!"))
npcppc.deleteMe()
elif tek>=mobcount:
self.cancelQuestTimer("return_l",None,None)
self.startQuestTimer("return", 30000, None, None)
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:
try:
for id, countmin, countmax, chance in REWARD :
if Rnd.get(100)<=chance :
count=Rnd.get(countmin,countmax)
player.getQuestState(qn).giveItems(id,count)
except : pass
else:
ATTAKERS.remove(nm)
return
QUEST = Quest(5555, qn, "Peklo")
CREATED = State('Start', QUEST)
QUEST.setInitialState(CREATED)
QUEST.addKillId(int(MOB))
QUEST.addAttackId(int(MOB))
QUEST.addStartNpc(int(REGISTER))
QUEST.addTalkId(int(REGISTER))
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 import CreatureSay
from java.util import Date
qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=0
ATTAKERS = []
tek = 0
nyj = 1
closed = 1
# =======================================
# КОНФИГ
# =======================================
# Название (только английские символы)
NAME = "IIeklo"
LOC = "Town of Giran" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [[82448,149424,-3468]] # Соответственно координаты, где будет появляться НПЦ. Сколько угодно различных точек
PENI = 57 # Итем, необходимый для участия
PENI_KOL = 1 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 78 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 3 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 10 # Время между ивентами в минутах
TIME_FOR_REG = 5 # Время на регистрацию в минутах
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
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 = 8 # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
CANCEL_TIME = 5 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
REWARD =[[4037,1,150,100],[8762,1,3,20],[8761,1,3,20],[8760,1,3,20]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,countMIN1,countMAX1,chance1],[itemId2,countMIN2,countMAX2,chanceN],...[itemIdN,countMINN,countMAXN,chanceN]]
TIM = [] # Часы, в течение которых ивент не начнётся. Т.е если написано 20, то в период с 20:00:00 до 20:59:59 ивент не стартует.
RAD = 500 # Если в момент выдачи награды игрок находится вне этого радиуса, то награда не выдаётся.
RES_TIME = 7 # Время через которое мертвый персонаж будет оживлен.
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,res_timer
if event == "open" :
ATTAKERS=[]
closed=0
annom=0
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(LOC)+".")
if event == "close":
res_timer = 1
self.startQuestTimer("res", RES_TIME*1000, None, None)
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("Мясорубка не состоялась.Недостаточно учасников.")
else:
closed=1
Announcements.getInstance().announceToAll("Мясорубка началась!!!")
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:
Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL - annom ) + " минут до начала мясорубки. Регистрация в "+str(LOC)+".")
annom = annom+1
self.startQuestTimer("announce2", ANNOUNCE_INTERVAL*60000, None, None)
if event == "announce2" and closed==0:
Announcements.getInstance().announceToAll(str(TIME_FOR_REG - ANNOUNCE_INTERVAL - annom ) + " минут до начала мясорубки. Регистрация в "+str(LOC)+".")
annom = annom+1
self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
if event == "return" :
res_timer=0
annom = 0
Announcements.getInstance().announceToAll("Мясорубка окончена: Игроки выиграли!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
try :
if i.isOnline() :
i.teleToLocation(83456,148208,-3406)
except : pass
if event == "return_l" :
res_timer=0
annom = 0
Announcements.getInstance().announceToAll("Мясорубка окончена: Монстры выиграли!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
try :
if i.isOnline() :
i.teleToLocation(83456,148208,-3406)
except : pass
if event == "res" and res_timer==1:
self.startQuestTimer("res2", RES_TIME*1000, None, None)
for nm in ATTAKERS:
r=L2World.getInstance().getPlayer(nm)
if r<>None:
if abs(abs(r.getX())-abs(locf[0]))<RAD or abs(abs(r.getY())-abs(locf[1]))<RAD :
if r.isOnline() :
if r.isDead():
r.doRevive()
r.setCurrentCp(r.getMaxCp())
r.setCurrentHp(r.getMaxHp())
r.setCurrentMp(r.getMaxMp())
r.stopAllEffects()
r.broadcastStatusUpdate()
r.broadcastUserInfo()
if event == "res2" and res_timer==1:
self.startQuestTimer("res", RES_TIME*1000, None, None)
for nm in ATTAKERS:
r=L2World.getInstance().getPlayer(nm)
if r<>None:
if abs(abs(r.getX())-abs(locf[0]))<RAD or abs(abs(r.getY())-abs(locf[1]))<RAD :
if r.isOnline() :
if r.isDead():
r.doRevive()
r.setCurrentCp(r.getMaxCp())
r.setCurrentHp(r.getMaxHp())
r.setCurrentMp(r.getMaxMp())
r.stopAllEffects()
r.broadcastStatusUpdate()
r.broadcastUserInfo()
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)
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, "Ивент "+str(NAME)+": ","У вас "+str(CANCEL_TIME)+" минут что-бы уничтожить всех монстров!"))
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, "Ивент "+str(NAME)+": ","У вас "+str(CANCEL_TIME)+" минут что-бы уничтожить всех монстров!"))
npcppc.deleteMe()
elif tek>=mobcount:
self.cancelQuestTimer("return_l",None,None)
self.startQuestTimer("return", 30000, None, None)
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:
try:
for id, countmin, countmax, chance in REWARD :
if Rnd.get(100)<=chance :
count=Rnd.get(countmin,countmax)
player.getQuestState(qn).giveItems(id,count)
except : pass
else:
ATTAKERS.remove(nm)
return
QUEST = Quest(5555, qn, "Peklo")
CREATED = State('Start', QUEST)
QUEST.setInitialState(CREATED)
QUEST.addKillId(int(MOB))
QUEST.addAttackId(int(MOB))
QUEST.addStartNpc(int(REGISTER))
QUEST.addTalkId(int(REGISTER))
Реализован рес погибших (если в зоне) , телепорт "левых" , о новой волне пишут мобы а не в админсообщения.
Но вопрос "мобы выиграли" не решен :( причем при проверке админом всё гуд - игроки выиграли. А игроки жалуються, что мобы часто выигрывают
опять -же по причине, что при очередной "волне" мобы просто не появляються....
Сам не могу разобраться в чем дело....
Ждем ответа тех, кто что-то знает:)
Спасибо!
0
· 07.02.2010, 02:53
Может причина в геодате ? (мобы в текстурах)
Может проблема в игроках ?? им делать нечего или они слепые)) как у меня было))
0
· 08.02.2010, 16:35
В строках
Код
mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
из этого
Код
locf[2]+100
сделайте Код
locf[2]
.P.S. не по теме filmotechnic, как ты умудрился анонсы русскими через питон сделать?
0
· 08.02.2010, 21:23
snake1: Может причина в геодате ? (мобы в текстурах)
Может проблема в игроках ?? им делать нечего или они слепые)) как у меня было))
да нет .... похоже так и проблема в спавне следующей волны! нераз наблюдал со стороны действительно проблемма на лицо!
2Vo1N :
Думаю врят-ли в этом проблема... это какраз и есть защита от появления моба в текстуре, они появляются немного выше земли....
Как русский на питоне? легко!!! Юзай ядро от RT1.4.1.6 или RT1.4.1.8 !!! сохраняем файл со скриптом.py в UTF без BOM и будет тебе счастье....
!!! кстати и ядро само по себе очень даже неплохое....
(Простите за оффтоп)
0
· 09.02.2010, 07:07
У меня например на сборке опенов, появляется один моб, его игроки убивают и новой волны нет, у админа окно зашкаливающее ошибками а игроки не могут уйти с ивента, я их тп к себе в годарт а их портует обратно в колизей и смог исправить только, когда квесты у игроков с пекло удалил.
============================
Я изменю мир,но бог не даровал исходников...
============================
0
· 09.02.2010, 20:48
glebko: У меня например на сборке опенов, появляется один моб, его игроки убивают и новой волны нет, у админа окно зашкаливающее ошибками а игроки не могут уйти с ивента, я их тп к себе в годарт а их портует обратно в колизей и смог исправить только, когда квесты у игроков с пекло удалил.
Да просто наплодили версий "умельцы" разные ... и каждый под себя. ХЗ у меня иногда до конца проходит эвент, а иногда где-то на 3-4ой волне "захлебывается" в коллизей никого не портует - тобищ хочеш - уходи. Без проблем ресает если находишся в зоне колизея...
Кстати и ошибок у меня в ГС никаких нет при работе скрипта...
Если никто не растолкует почему всё так происходит - придется самому сесть и разобраться или даже переписать...
просто времени счас нету...
0
· 09.02.2010, 20:58
Цитата
Если никто не растолкует почему всё так происходит - придется самому сесть и разобраться или даже переписать...
Лично я так и сделал, изменил условия и все на ура работает, только у меня вместо волн мобов, идут волны РБ... чем больше людей тем больше РБ...
Прикрипите ваш файлик евента, я попробую похимичить для вас...
Но сразу скажу моя идея заключается в том, что во время евента изменяется значение mobcount... можете сами проверить мою догадку...
Пускай на евенте будет участвовать несколько человек, желатьно не меньше 4, затем после убийства 1 моба, и убийства следующий волны один из участников выйдет из игры, оставшиеся участники продолжат евент... и посмотрите если волн больше не будет и евент выиграют мобы, значит дело именно в mobcount.
0
· 09.02.2010, 21:09
Вот посмотрите:
event
import sys
from com.l2emu.gameserver.model.quest import State
from com.l2emu.gameserver.model.quest import QuestState
from com.l2emu.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2emu.gameserver import Announcements
from com.l2emu import L2DatabaseFactory
from com.l2emu.gameserver.ai import CtrlIntention
from com.l2emu.util import Rnd
from java.lang import System
from com.l2emu.gameserver.model import L2World
qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=1
ATTAKERS = []
tek = 0
nyj = 1
res_timer = 0
closed = 1
# =======================================
# КОНФИГ
# =======================================
NAME = "Peklo" # Название (только английские символы)
LOC = "Giran" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [83510,148831,-3405] # Соответственно координаты, где будет появляться НПЦ
PENI = 57 # Итем, необходимый для участия
PENI_KOL = 10000000 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 40 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 1 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 5 # Время между ивентами в минутах
TIME_FOR_REG = 3 # Время на регистрацию в минутах
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [149511,46714,-3410] # Соответственно координаты, где будет появляться 1 моб
locfp = [149511,46714,-3410] # Соответственно координаты, куда телепортируются игроки. Здесь же и ресаются.
RESAEM = 0 # Ресать игроков или нет. 0/1
RADIUS = 25 # Радиус появления мобов относительно 1 моба
YCH_MIN = 1 # Минимальное количество участников
YCH_MAX = 60 # Максимальное количество участников.
MOBS_TO_CHEL = 25 # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
CANCEL_TIME = 1 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
RES_TIME = 1 # Время, через которое проверяется наличие дохлых игроков и если таковые находятся - их ТПшит в RES_ZONE
REWARD =[[6392,400,100]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,count1,chance1],[itemId2,count2,chanceN],...[itemIdN,countN,chanceN]]
# Данные координаты ограничивают прямоугольник, в котором располагается ваша зона. При выходе из данной зоны игрок попадает к своей базе.
X_MIN = 79000 # Минимальный Х
X_MAX = 86000 # Максимальный Х
Y_MIN = -19000 # Минимальный У
Y_MAX = -14500 # Максимальный У
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:
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 res_timer,tek,nyj,ATTAKERS,kolych,annom,closed,RESAEM
if event == "res" and res_timer==1 and RESAEM==1:
self.startQuestTimer("res", RES_TIME*1000, None, None)
for nm in ATTAKERS:
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline():
if i.getX() not in range(X_MIN,X_MAX) or i.getY() not in range(Y_MIN,Y_MAX):
i.teleToLocation(locfp[0],locfp[1],locfp[2])
if i.isDead():
i.doRevive()
i.setCurrentCp(i.getMaxCp())
i.setCurrentHp(i.getMaxHp())
i.setCurrentMp(i.getMaxMp())
i.teleToLocation(locfp[0],locfp[1],locfp[2])
if event == "open" :
ATTAKERS=[]
closed=0
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! You can register in "+str(LOC)+".")
if event == "close":
res_timer = 1
tek=0
nyj=1
self.startQuestTimer("res", RES_TIME*1000, None, None)
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)
if i<>None:
if i.isOnline() :
i.teleToLocation(locfp[0],locfp[1],locfp[2])
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)+". There are "+str(len(ATTAKERS))+" players in Event.")
annom=annom+1
self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
if event == "return" :
res_timer = 0
Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Players win!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline() :
i.teleToLocation(locr[0],locr[1],locr[2])
if event == "return_l" :
res_timer = 0
Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Monsters win!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline() :
i.teleToLocation(locr[0],locr[1],locr[2])
if event == "exit" :
ATTAKERS.remove(player.getName())
return "exit.htm"
return
def onAttack (self,npc,player,damage,isPet):
if player.getName() not in ATTAKERS :
player.teleToLocation(147725,-56517,9999)
return
def onKill(self,npc,player,isPet):
global tek,nyj,kolych
mobcount=(MOBS_TO_CHEL * 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)
elif rand in [4,8] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [5,9] :
randx = 25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [6,10] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [7,11] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [8,12] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [9,13] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [10,14] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
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)
Announcements.getInstance().announceToAll("Event "+str(NAME)+": You have "+str(CANCEL_TIME)+" minutes for kill this monsters!")
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)
elif rand in [4,8] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [5,9] :
randx = 25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [6,10] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [7,11] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [8,12] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [9,13] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [10,14] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
nyj=mobcount+1
tek=0
self.cancelQuestTimer("return_l",None,None)
self.startQuestTimer("return_l", (CANCEL_TIME)*60000, None, None)
Announcements.getInstance().announceToAll("Event "+str(NAME)+": You have "+str(CANCEL_TIME)+" minutes for kill this monsters!")
elif tek==mobcount:
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
for id, count, chance in REWARD :
if Rnd.get(100)<=chance :
i.getQuestState(qn).giveItems(id,count)
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))
у меня Евент работает нормально!
from com.l2emu.gameserver.model.quest import State
from com.l2emu.gameserver.model.quest import QuestState
from com.l2emu.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2emu.gameserver import Announcements
from com.l2emu import L2DatabaseFactory
from com.l2emu.gameserver.ai import CtrlIntention
from com.l2emu.util import Rnd
from java.lang import System
from com.l2emu.gameserver.model import L2World
qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=1
ATTAKERS = []
tek = 0
nyj = 1
res_timer = 0
closed = 1
# =======================================
# КОНФИГ
# =======================================
NAME = "Peklo" # Название (только английские символы)
LOC = "Giran" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [83510,148831,-3405] # Соответственно координаты, где будет появляться НПЦ
PENI = 57 # Итем, необходимый для участия
PENI_KOL = 10000000 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 40 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 1 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 5 # Время между ивентами в минутах
TIME_FOR_REG = 3 # Время на регистрацию в минутах
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [149511,46714,-3410] # Соответственно координаты, где будет появляться 1 моб
locfp = [149511,46714,-3410] # Соответственно координаты, куда телепортируются игроки. Здесь же и ресаются.
RESAEM = 0 # Ресать игроков или нет. 0/1
RADIUS = 25 # Радиус появления мобов относительно 1 моба
YCH_MIN = 1 # Минимальное количество участников
YCH_MAX = 60 # Максимальное количество участников.
MOBS_TO_CHEL = 25 # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
CANCEL_TIME = 1 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
RES_TIME = 1 # Время, через которое проверяется наличие дохлых игроков и если таковые находятся - их ТПшит в RES_ZONE
REWARD =[[6392,400,100]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,count1,chance1],[itemId2,count2,chanceN],...[itemIdN,countN,chanceN]]
# Данные координаты ограничивают прямоугольник, в котором располагается ваша зона. При выходе из данной зоны игрок попадает к своей базе.
X_MIN = 79000 # Минимальный Х
X_MAX = 86000 # Максимальный Х
Y_MIN = -19000 # Минимальный У
Y_MAX = -14500 # Максимальный У
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:
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 res_timer,tek,nyj,ATTAKERS,kolych,annom,closed,RESAEM
if event == "res" and res_timer==1 and RESAEM==1:
self.startQuestTimer("res", RES_TIME*1000, None, None)
for nm in ATTAKERS:
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline():
if i.getX() not in range(X_MIN,X_MAX) or i.getY() not in range(Y_MIN,Y_MAX):
i.teleToLocation(locfp[0],locfp[1],locfp[2])
if i.isDead():
i.doRevive()
i.setCurrentCp(i.getMaxCp())
i.setCurrentHp(i.getMaxHp())
i.setCurrentMp(i.getMaxMp())
i.teleToLocation(locfp[0],locfp[1],locfp[2])
if event == "open" :
ATTAKERS=[]
closed=0
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! You can register in "+str(LOC)+".")
if event == "close":
res_timer = 1
tek=0
nyj=1
self.startQuestTimer("res", RES_TIME*1000, None, None)
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)
if i<>None:
if i.isOnline() :
i.teleToLocation(locfp[0],locfp[1],locfp[2])
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)+". There are "+str(len(ATTAKERS))+" players in Event.")
annom=annom+1
self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
if event == "return" :
res_timer = 0
Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Players win!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline() :
i.teleToLocation(locr[0],locr[1],locr[2])
if event == "return_l" :
res_timer = 0
Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Monsters win!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline() :
i.teleToLocation(locr[0],locr[1],locr[2])
if event == "exit" :
ATTAKERS.remove(player.getName())
return "exit.htm"
return
def onAttack (self,npc,player,damage,isPet):
if player.getName() not in ATTAKERS :
player.teleToLocation(147725,-56517,9999)
return
def onKill(self,npc,player,isPet):
global tek,nyj,kolych
mobcount=(MOBS_TO_CHEL * 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)
elif rand in [4,8] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [5,9] :
randx = 25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [6,10] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [7,11] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [8,12] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [9,13] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [10,14] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
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)
Announcements.getInstance().announceToAll("Event "+str(NAME)+": You have "+str(CANCEL_TIME)+" minutes for kill this monsters!")
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)
elif rand in [4,8] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [5,9] :
randx = 25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [6,10] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [7,11] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [8,12] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [9,13] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [10,14] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
nyj=mobcount+1
tek=0
self.cancelQuestTimer("return_l",None,None)
self.startQuestTimer("return_l", (CANCEL_TIME)*60000, None, None)
Announcements.getInstance().announceToAll("Event "+str(NAME)+": You have "+str(CANCEL_TIME)+" minutes for kill this monsters!")
elif tek==mobcount:
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
for id, count, chance in REWARD :
if Rnd.get(100)<=chance :
i.getQuestState(qn).giveItems(id,count)
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))
у меня Евент работает нормально!
//Dead4iK
0
· 10.02.2010, 13:02
Wrangler: Вот посмотрите:eventimport sys
from com.l2emu.gameserver.model.quest import State
from com.l2emu.gameserver.model.quest import QuestState
from com.l2emu.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2emu.gameserver import Announcements
from com.l2emu import L2DatabaseFactory
from com.l2emu.gameserver.ai import CtrlIntention
from com.l2emu.util import Rnd
from java.lang import System
from com.l2emu.gameserver.model import L2World
qn = "5555_Peklo"
# =======================================
# НЕ ТРОГАЕМ
# =======================================
annom=1
ATTAKERS = []
tek = 0
nyj = 1
res_timer = 0
closed = 1
# =======================================
# КОНФИГ
# =======================================
NAME = "Peklo" # Название (только английские символы)
LOC = "Giran" # Место, где вы поставили регистрирующего НПЦ.
REGISTER = 55557 # Регистрирующий нпц. НЕ ЗАБЫВАЕМ ДЕЛАТЬ ЕГО БЕССМЕРТНЫМ.
locr = [83510,148831,-3405] # Соответственно координаты, где будет появляться НПЦ
PENI = 57 # Итем, необходимый для участия
PENI_KOL = 10000000 # Сколько итемов необходимо для участия. Если хотите чтобы участие было бесплатным - поставте 0
LEVEL = 40 # Минимальный уровень, на котором игрок сможет принять участие в ивенте.
AFTER_RESTART = 1 # Время, которое пройдёт от запуска сервера(перезагрузки скрипта) до начала ивента.
TIME_FOR_WAIT = 5 # Время между ивентами в минутах
TIME_FOR_REG = 3 # Время на регистрацию в минутах
ANNOUNCE_INTERVAL = 1 # Как часто аннонсить о регистрации на ивент в минутах.
MOB = 55556 # Моб, которого надо убивать. С него ничего не должно дропаться. Желательно не менять, т.к. есть защита от незарегистрированных игроков.
locf = [149511,46714,-3410] # Соответственно координаты, где будет появляться 1 моб
locfp = [149511,46714,-3410] # Соответственно координаты, куда телепортируются игроки. Здесь же и ресаются.
RESAEM = 0 # Ресать игроков или нет. 0/1
RADIUS = 25 # Радиус появления мобов относительно 1 моба
YCH_MIN = 1 # Минимальное количество участников
YCH_MAX = 60 # Максимальное количество участников.
MOBS_TO_CHEL = 25 # Количество мобов на человека. Максимальное количество мобов, которое придётся убить участникам за последний заход= кл-во участников * на MOBS_TO_CHEL.
CANCEL_TIME = 1 # Если в течение этого времени (минуты) мобы не атакуются - ивент считается проигранным. Пишется, что мобы выиграли и все они исчезают.
RES_TIME = 1 # Время, через которое проверяется наличие дохлых игроков и если таковые находятся - их ТПшит в RES_ZONE
REWARD =[[6392,400,100]] # Список наград. Выдайтся каждому участнику. Формат записи: [[itemId1,count1,chance1],[itemId2,count2,chanceN],...[itemIdN,countN,chanceN]]
# Данные координаты ограничивают прямоугольник, в котором располагается ваша зона. При выходе из данной зоны игрок попадает к своей базе.
X_MIN = 79000 # Минимальный Х
X_MAX = 86000 # Максимальный Х
Y_MIN = -19000 # Минимальный У
Y_MAX = -14500 # Максимальный У
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:
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 res_timer,tek,nyj,ATTAKERS,kolych,annom,closed,RESAEM
if event == "res" and res_timer==1 and RESAEM==1:
self.startQuestTimer("res", RES_TIME*1000, None, None)
for nm in ATTAKERS:
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline():
if i.getX() not in range(X_MIN,X_MAX) or i.getY() not in range(Y_MIN,Y_MAX):
i.teleToLocation(locfp[0],locfp[1],locfp[2])
if i.isDead():
i.doRevive()
i.setCurrentCp(i.getMaxCp())
i.setCurrentHp(i.getMaxHp())
i.setCurrentMp(i.getMaxMp())
i.teleToLocation(locfp[0],locfp[1],locfp[2])
if event == "open" :
ATTAKERS=[]
closed=0
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! You can register in "+str(LOC)+".")
if event == "close":
res_timer = 1
tek=0
nyj=1
self.startQuestTimer("res", RES_TIME*1000, None, None)
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)
if i<>None:
if i.isOnline() :
i.teleToLocation(locfp[0],locfp[1],locfp[2])
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)+". There are "+str(len(ATTAKERS))+" players in Event.")
annom=annom+1
self.startQuestTimer("announce", ANNOUNCE_INTERVAL*60000, None, None)
if event == "return" :
res_timer = 0
Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Players win!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline() :
i.teleToLocation(locr[0],locr[1],locr[2])
if event == "return_l" :
res_timer = 0
Announcements.getInstance().announceToAll("Event "+str(NAME)+" has ended. Monsters win!")
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
if i.isOnline() :
i.teleToLocation(locr[0],locr[1],locr[2])
if event == "exit" :
ATTAKERS.remove(player.getName())
return "exit.htm"
return
def onAttack (self,npc,player,damage,isPet):
if player.getName() not in ATTAKERS :
player.teleToLocation(147725,-56517,9999)
return
def onKill(self,npc,player,isPet):
global tek,nyj,kolych
mobcount=(MOBS_TO_CHEL * 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)
elif rand in [4,8] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [5,9] :
randx = 25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [6,10] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [7,11] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [8,12] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [9,13] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [10,14] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
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)
Announcements.getInstance().announceToAll("Event "+str(NAME)+": You have "+str(CANCEL_TIME)+" minutes for kill this monsters!")
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)
elif rand in [4,8] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [5,9] :
randx = 25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [6,10] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [7,11] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
elif rand in [8,12] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [9,13] :
randx = 25*Rnd.get(20)
randy = -25*Rnd.get(20)
elif rand in [10,14] :
randx = -25*Rnd.get(20)
randy = 25*Rnd.get(20)
mobb=self.addSpawn(MOB,locf[0] + randx, locf[1] + randy, locf[2]+100,30000,False,CANCEL_TIME*60000)
nyj=mobcount+1
tek=0
self.cancelQuestTimer("return_l",None,None)
self.startQuestTimer("return_l", (CANCEL_TIME)*60000, None, None)
Announcements.getInstance().announceToAll("Event "+str(NAME)+": You have "+str(CANCEL_TIME)+" minutes for kill this monsters!")
elif tek==mobcount:
for nm in ATTAKERS :
i=L2World.getInstance().getPlayer(nm)
if i<>None:
for id, count, chance in REWARD :
if Rnd.get(100)<=chance :
i.getQuestState(qn).giveItems(id,count)
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))
у меня Евент работает нормально!
//Dead4iK
Error on: D:\server\Game\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', 54, 1, 'def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)'))
0
· 11.02.2010, 01:13
хм.... незнаю, у меня всё норма=))
0
· 11.02.2010, 11:32
Wrangler: хм.... незнаю, у меня всё норма=))
Прикрепи файл __init__.py а не код выкладывай, темболе выложил без тегов code из-за чего квест становится не читабельным.
0
Войдите или зарегистрируйтесь чтобы ответить





