09-25-2009, 05:28 PM
Подскажите нашел мануал по эвенту все сделал, кроме 1го скрипта т.к написано впишите скрипт, а куда именно не понятно, сборка L2gold Gracia final
Код:
import math
import sys
from net.sf.l2j.gameserver import Announcements
from net.sf.l2j.util import Rnd
from java.lang import System
from net.sf.l2j.gameserver.model.actor.appearance import PcAppearance
from net.sf.l2j.gameserver import GameTimeController
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.model.actor.instance import L2PcInstance
from net.sf.l2j.gameserver.model.actor.instance import L2NpcInstance
MANAGER = 100400
TOPNPC = 100401
Raids = [ 25514,22216,25286,25283,25319 ]
#Mountain protected zone
MX = 55312
MY = 219168
MZ = -3223
#Mountain top NPC coords
MNPCX = 144291
MNPCY = 157446
MNPCZ = -466
#Mountain bottom and giran NPC coords
MBX1 = 82698
MBY1 = 148638
MBZ1 = -3468
MBX = 143370
MBY = 161135
MBZ = -1925
#number of participants
MountainMinPlayers = 6
MountainMaxPlayers = 30
EventNpcs = [ 100400, 100401 ]
#time between events in milliseconds
eventInterval = 7200000 # 2 hours after the first event there is the second one and the others after are 2 hours too
FirstStart = 2700000 #45 minutes after each restart there is the first event
class eventmanager (JQuest):
def __init__(self,id,name,descr):
JQuest.__init__(self,id,name,descr)
self.RaidBosses ={
0: {'name':"Queen Shyeed" , 'id':25514},
1: {'name':"Tyrannosaurus" , 'id':22216},
2: {'name':"Anakim" , 'id':25286},
3: {'name':"Lilith" , 'id':25283},
4: {'name':"Ember" , 'id':25319},
}
self.RbCoords ={
0: {'name':"in the colliseum" , 'X':150086 , 'Y':46733 , 'Z':-3407},
1: {'name':"near the entrance of the Garden of Eva" , 'X':84805 , 'Y':233832 , 'Z':-3669},
2: {'name':"close to the western entrance of the Cemetary" , 'X':161385 , 'Y':21032 , 'Z':-3671},
3: {'name':"at Gludin's Harbor" , 'X':89199 , 'Y':149962 , 'Z':-3581},
}
self.startQuestTimer("EventTrigger", FirstStart, None, None)
self.RbSpawn = []
self.rewards ={
0: {'prize':4357 , 'number':1}, #King of the hill event, dont forget to change the reward
}
self.Teams = []
self.Event = []
self.True = True
self.False = False
self.Group = []
self.EventManager1 = []
self.EventManager = []
self.Registration = []
self.numberPlayers = []
self.One = 1
self.Team1 = []
self.Team2 = []
self.numberOfTeams = []
self.Trigger = 1
self.Count = 2
self.Add = 1
self.Full = False
self.TopNpc = []
self.EventNames = {0:"King of the hill", 1:"kill the Raidboss"}
def onAdvEvent (self,event,npc,player):
if event == "EventTrigger" :
rr = int(Rnd.get(2))
Announcestart = "The " + self.EventNames[rr] + " event is about to start!!!"
Announcements.getInstance().announceToAll(Announcestart)
if rr == 0:
self.Event = 0
eventmanager1 = self.addSpawn(MANAGER,MBX1,MBY1,MBZ1,0,False,0)
self.EventManager1 = eventmanager1
topnpc = self.addSpawn(TOPNPC,MNPCX,MNPCY,MNPCZ,0,False,0)
self.TopNpc = topnpc
Announcements.getInstance().announceToAll("All those who wish to participate should come to meet me in Giran town")
Announcements.getInstance().announceToAll("Registration will last 15 minutes")
self.startQuestTimer("MountainSelect", 900000, npc, player)
self.startQuestTimer("10minutes", 300000, npc, player)
self.startQuestTimer("5minutes", 600000, npc, player)
self.startQuestTimer("2minutes", 780000, npc, player)
self.startQuestTimer("1minute", 840000, npc, player)
if rr == 1:
self.Event = 1
#the spawn coords and which raidboss are both random and
#independant from each other
ra = int(Rnd.get(5))
rb = int(Rnd.get(4))
self.RbSpawn = []
raidboss = self.RaidBosses[ra]['name']
location = self.RbCoords[rb]['name']
Announcements.getInstance().announceToAll(raidboss + " has just been spawned " + location + " and will disappear in 2 hours, hurry!")
self.RbSpawn = self.addSpawn(self.RaidBosses[ra]['id'],self.RbCoords[rb]['X'],self.RbCoords[rb]['Y'],self.RbCoords[rb]['Z'],0,False,0)
self.startQuestTimer("RbDespawn", 7150000, npc, player)
self.startQuestTimer("EventTrigger", eventInterval, npc, player)
if event == "10minutes":
Announcements.getInstance().announceToAll("10 minutes left for event registration in Giran")
if event == "5minutes":
Announcements.getInstance().announceToAll("5 minutes left for event registration in Giran")
if event == "2minutes":
Announcements.getInstance().announceToAll("2 minutes left for event registration in Giran")
if event == "1minutes":
Announcements.getInstance().announceToAll("1 minute left for event registration in Giran")
if event == "MountainSelect" :
self.EventManager1.deleteMe()
self.startQuestTimer("MountainStart", 60000, npc, player)
totalplayers = len(self.Registration)
if totalplayers >= MountainMinPlayers:
#5 players per team, max 6 teams can participate
self.numberOfTeams = int((len(self.Registration))/2)
numberOfTeams = int((len(self.Registration))/2)
playerList = list(self.Registration)
Team1 = []
Team2 = []
for i in range(len(playerList)/2) :
Team1.append(playerList.pop(Rnd.get(len(playerList))))
Team2 = playerList
for i in Team1:
i.teleToLocation(MNPCX,MNPCY,MNPCZ)#tele to top of mountain
i.getAppearance().setNameColor(0x005de2) #orange
i.getAppearance().setTitleColor(0x005de2) #orange
i.getQuestState("eventmanager").set("cond","3")
for i in Team2:
i.teleToLocation(144428,161151,-2460)#tele to location A
i.getAppearance().setNameColor(0xd5e200) #yellow
i.getAppearance().setTitleColor(0xd5e200) #yellow
i.getQuestState("eventmanager").set("cond","4")
Announcements.getInstance().announce ToAll("Team 1 - blue - has 20 minutes to take control of the mountain and talk to the Flag NPC to win this event.")
Announcements.getInstance().announceToAll("Team 2 - orange - has to defend the mountain to win. Event starts in 1 minute, wait for the signal.")
self.Team1 = Team1
self.Team2 = Team2
self.numberOfTeams = numberOfTeams
else:
Announcements.getInstance().announceToAll("Event cancelled due to lack of participation.")
self.EventManager1.deleteMe()
self.TopNpc.deleteMe()
self .cancelQuestTimer("round_finish", None, None)
self.cancelQuestTimer("15Tofinish", None, None)
self.cancelQuestTimer("10Tofinish", None, None)
self.cancelQuestTimer("5Tofinish", None, None)
self.cancelQuestTimer("1Tofinish", None, None)
if event == "MountainStart":
for i in self.Team2:
i.teleToLocation(MBX,MBY,MBZ)#tele to location A
Announcements.getInstance().announceToAll("Start the event!!! Team 2, ATTACK!!! Good luck to both teams!")
self.Attacker = self.Team2
self.Defender = self.Team1
self.startQuestTimer("round_finish", 1200000, npc, player) #sera 1200000
self.startQuestTimer("15Tofinish", 300000, npc, player)
self.startQuestTimer("10Tofinish", 600000, npc, player)
self.startQuestTimer("5Tofinish", 900000, npc, player)
self.startQuestTimer("1Tofinish", 1140000, npc, player)
if event == "15Tofinish":
Announcements.getInstance().announceToAll("15 minutes until the end of the event")
if event == "10Tofinish":
Announcements.getInstance().announceToAll("10 minutes until the end of the event")
if event == "5Tofinish":
Announcements.getInstance().announceToAll("5 minutes until the end of the event")
if event == "1Tofinish":
Announcements.getInstance().announceToAll("1 minute until the end of the event")
if event == "round_finish" and npc and player:
self.TopNpc.deleteMe()
self.startQuestTimer("EventTrigger", eventInterval, npc, player)
self.cancelQuestTimer("15Tofinish", None, None)
self.cancelQuestTimer("10Tofinish", None, None)
self.cancelQuestTimer("5Tofinish", None, None)
self.cancelQuestTimer("1Tofinish", None, None)
Announcements.getInstance().announceToAll("Orange team wins!")
rr = self.Event
reward = self.rewards
for i in self.Team2:
i.teleToLocation(MBX1,MBY1,MBZ1)#tele back to town
i.getAppearance().setNameColor(0xffffff)
i.getAppearance().setTitleColor(0xffffff)
i .getQuestState("eventmanager").set("cond","0")
for i in self.Team1:
i.teleToLocation(MBX1,MBY1,MBZ1)#tele back to town
i.getQuestState("eventmanager").giveItems(reward[rr]['prize'],reward[rr]['number'])
i.getQuestState("eventmanager").playSound("ItemSound.quest_fanfare_1")
i.getAppearance().setNameColor( 0xffffff)
i.getAppearance().setTitleColor(0xffffff)
i.getQuestState("eventmanager").set("cond","0")
i f event == "RbDespawn":
self.RbSpawn.deleteMe()
def onTalk (self,npc,player) :
npcId = npc.getNpcId()
cond = player.getQuestState("eventmanager").getInt("cond")
if npcId == MANAGER :
if not cond == 2:
if self.Event == 0:
if len(self.Registration) < MountainMaxPlayers:
player.getQuestState("eventmanager").set("cond","2")
self.Registrati on.append(player)
Reg = list(self.Registration)
return "<html><body>You have been added to the event list, teams will be made randomly 1 minute before the start of the event</body></html>"
else:
Announcements.getInstance().announceToAll("Event is now full, no more registration accepted.")
self.Full = True
return "<html><body>Event is full, try again next time</body></html>"
else:
return "<html><body>You are already registered</body></html>"
if npcId == TOPNPC :
if not cond == 3:
self.TopNpc.deleteMe()
self.cancelQuestTimer("round_finish", None, None)
self.cancelQuestTimer("15Tofinish", None, None)
self.cancelQuestTimer("10Tofinish", None, None)
self.cancelQuestTimer("5Tofinish", None, None)
self.cancelQuestTimer("1Tofinish", None, None)
Announcements.getInstance().announceToAll("Blue team wins!")
rr = self.Event
reward = self.rewards
self.startQuestTimer("EventTrigger", eventInterval, npc, player)
for i in self.Team1:
i.teleToLocation(MBX1,MBY1,MBZ1)#tele back to town
i.getAppearance().setNameColor(0xffffff)
i.getAppearance().setTitleColor(0xffffff)
i .getQuestState("eventmanager").set("cond","0")
for i in self.Team2:
i.teleToLocation(MBX1,MBY1,MBZ1)#tele back to town
i.getQuestState("eventmanager").playSound("ItemSound.quest_fanfare_1")
i.getQuestState("eve ntmanager").giveItems(reward[rr]['prize'],reward[rr]['number'])
i.getAppearance().setNameColor(0xffffff)
i.getAppearance().setTitleColor(0xffffff)
i .getQuestState("eventmanager").set("cond","0")
else:
return "<html><body>You are on the defending team!!! defend me, stop talking!</body></html>"
def onKill (self,npc,player,isPet):
if npc in self.RbSpawn:
self.cancelQuestTimer("RbDespawn", None, None)
# Quest class and state definition
QUEST = eventmanager(-1, "eventmanager", "ai")
for i in Raids:
QUEST.addKillId(i)
for i in EventNpcs:
QUEST.addTalkId(i)
QUEST.addStartNpc(i)
print "Event Manager loaded!!!"