Ir para conteúdo
  • Cadastre-se
  • 0

Gracia Freya


StrongA

Pergunta

Estou Procurando um evento de Raid Boss Spawn, tipo ter varios RB só para esse efeito e x em x tempo serem spawnados aleatoriamente mostrando aos players em annoucement.

 

Obrigado.

 

 

Encontrei este script:

 

 

Pasta eventmanager, criar dentro um ficheiro __init__.py

 

 

import math

import sys

from com.l2jserver.gameserver import Announcements

from com.l2jserver.util import Rnd

from java.lang import System

from com.l2jserver.gameserver.model.actor.appearance import PcAppearance

from com.l2jserver.gameserver import GameTimeController

from com.l2jserver.gameserver.model.quest import State

from com.l2jserver.gameserver.model.quest import QuestState

from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest

from com.l2jserver.gameserver.model.actor.instance import L2PcInstance

from com.l2jserver.gameserver.model.actor.instance import L2NpcInstance

 

 

MANAGER = 100400

TOPNPC = 100401

Raids = [ 290990,290280,290190,290200,291030 ]

 

#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':"Baylor" , 'id':290990},

1: {'name':"Valakas" , 'id':290280},

2: {'name':"Antharas" , 'id':290190},

3: {'name':"Baium" , 'id':290200},

4: {'name':"Baylor" , 'id':291030},

}

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':6577 , 'number':2}, #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().announceToAll("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")

if 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.Registration.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("eventmanager").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!!!"

 

 

 

 

==============================================================

 

Criar dois NPCs

 

html:100400

 

 

 

<html>

<body>

<center>

<img src="L2UI_CH3.herotower_deco" width=256 height=32>

<br>So... you want to participate in the event?

<br><br>

<button value="Yes!" action="bypass -h npc_%objectId%_Quest eventmanager" width=75 height=21 back="L2UI_CT1.Windows_DF_Drawer_Bg_Darker" fore="L2UI_CT1.Windows_DF_Drawer_Bg_Darker">

<img src=Sek.start_logo width=256 height=256 align=center>

</center></body>

</html>

 

=======================================================================================

 

html: 100401

 

 

<html>

<body>

<center>

<img src="L2UI_CH3.herotower_deco" width=256 height=32>

<br>hmmm... it seems you have defeted my defenders... So, you want your reward then?

<br><br>

<button value="Yes we do!" action="bypass -h npc_%objectId%_Quest eventmanager" width=75 height=21 back="L2UI_CT1.Windows_DF_Drawer_Bg_Darker" fore="L2UI_CT1.Windows_DF_Drawer_Bg_Darker">

<img src=Sek.start_logo width=256 height=256 align=center>

</center></body>

</html>

 

 

===========================================================

 

Custom_npcs.SQL

 

 

INSERT INTO `custom_npc` VALUES ('100400', '32130', 'Atome', '1', 'Event L2NeWorld', '1', 'LineageMonster3.king_of_cat', '6.00', '16.01', '80', 'male', 'L2Npc', '40', '6053', '2143', '13.43', '3.09', '40', '43', '30', '21', '20', '25', '0', '0', '2646', '633', '2006', '593', '278', '0', '0', '333', '0', '0', '0', '58', '198', '0', '0', '0', '0');

INSERT INTO `custom_npc` VALUES ('100401', '32130', 'Atome', '1', 'Event L2NeWorld', '1', 'LineageMonster3.king_of_cat', '6.00', '16.01', '80', 'male', 'L2Npc', '40', '6053', '2143', '13.43', '3.09', '40', '43', '30', '21', '20', '25', '0', '0', '2646', '633', '2006', '593', '278', '0', '0', '333', '0', '0', '0', '58', '198', '0', '0', '0', '0');

 

 

========================================================================

zone_vertices.sql

 

 

 

insert into zone_vertices values

('25100', '0', '143314', '164544'),

('25100', '1', '144215', '160270'),

('25100', '2', '145877', '159158'),

('25100', '3', '145397', '158735'),

('25100', '4', '142822', '155102'),

('25100', '5', '140831', '158004'),

('25100', '6', '141794', '160570');

 

 

=================================================

 

E adicionar esta linha em Scripts

 

quests/eventmanager/__init__.py

 

==============================================================

 

 

Testei e funcina rev Freya l2jserver.

 

Alguem consegue alterar só para spawn de Raid Boss???

 

Obrigado.

Editado por StrongA
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts recomendados

Cara, muito legal esse comando. Agora eu não entendi o começo, tem que adicionar uma pasta com o nome de __init.py ou é um arquivo com esse nome? Valeu. :biggrin:

Artigo 5º, Constituição Federal:

IV - é livre a manifestação do pensamento, sendo vedado o anonimato;

V - é assegurado o direito de resposta, proporcional ao agravo, além da indenização por dano material, moral ou à imagem;

IX - é livre a expressão da atividade intelectual, artística, científica e de comunicação, independentemente de censura ou licença;

Link para o comentário
Compartilhar em outros sites


Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Processando...




×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.