xMaylox Posted November 1, 2008 Share Posted November 1, 2008 Here is a script i found: [move][glow=red,2,300]CREDITS GOES TO THEONE[/glow][/move] This is a simple automatic events manager to give your players something to do when they get bored. This one only has 1 event: It spawns 1 raidboss(random) in a location(random) and announces to all the players which raidboss has been spawned where. If it's not killed within 2 hours, it erases that raidboss. Automatic events are set for every 2 hours but can be set differently. Also, I made the script so it's expandable. I use with 5 different random events on my servers, a timed collect the drop, raidboss spawn, a few PvP events, etc... You only need some imagination. So here it is: 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().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!!!" 100400.htm <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_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"> <img src=Sek.start_logo width=256 height=256 align=center> </center></body> </html> 100401.htm <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_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"> <img src=Sek.start_logo width=256 height=256 align=center> </center></body> </html> Do not forget to create 2 NPCs with IDs 100400 and 100401 as they are needed for the King of the Hill event! ** note: DO NOT spawn these NPCs, the script will spawn them when needed ** Also you need this(to prevent karma during the event): 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'); this part goes in zone.xml: <zone id='25100' type='Arena' shape='Npoly' minZ='-2100' maxZ='-100'> <stat name='name' val='Special Mountain Arena'/> <stat name='spawnX' val='-59858'/> <stat name='spawnY' val='-57495'/> <stat name='spawnZ' val='-2039'/> </zone> Link to comment Share on other sites More sharing options...
Versus Posted November 1, 2008 Share Posted November 1, 2008 Well i suppose that's nice,but it's only for L2J as in L2JFree table zone_vertices do not exist and zone.xml do not exist.Or i am wrong? Link to comment Share on other sites More sharing options...
Th3On3 Posted January 3, 2009 Share Posted January 3, 2009 Thanks for the credits Maylo Link to comment Share on other sites More sharing options...
luciusvlm Posted January 3, 2009 Share Posted January 3, 2009 yes , i test the raid boss events and work ,but no tested koth yet Link to comment Share on other sites More sharing options...
xtrollx1 Posted January 4, 2009 Share Posted January 4, 2009 ty for share man i was lookin for it...:) Link to comment Share on other sites More sharing options...
rayza Posted January 7, 2009 Share Posted January 7, 2009 thx man for share :D it works and it's usefull Link to comment Share on other sites More sharing options...
mgbhard Posted January 9, 2009 Share Posted January 9, 2009 Thx 4 share I've got a question: In KOTH , when u die u have to go to the city (fantasy island), is there any way to res a dead char an teleport it to his team spot? I try this but it didn't worked: def onDeath(self, npc, pc, st) : if rr == 0: if st.getPlayer() in self.Team1: SkillTable.getInstance().getInfo(1016,9).getEffects(st.getPlayer(),st.getPlayer()) st.getPlayer.teleToLocation(MNPCX,MNPCY,MNPCZ)#tele to top of mountain else: SkillTable.getInstance().getInfo(1016,9).getEffects(st.getPlayer(),st.getPlayer()) st.getPlayer.teleToLocation(144428,161151,-2460)#tele to location A I've never did something like this so i'm a newby. Any clues? Thx Marcelo Link to comment Share on other sites More sharing options...
livogro Posted January 22, 2009 Share Posted January 22, 2009 Thx man. i use it :) Very nice idea ;] Keep up man, And give us new like that ideas ;D rep+ ;]p Link to comment Share on other sites More sharing options...
ninja123321 Posted February 18, 2009 Share Posted February 18, 2009 Does anyone have the working code for l2jfree? Link to comment Share on other sites More sharing options...
ashendor Posted February 19, 2009 Share Posted February 19, 2009 thx man for share it works and it's usefull Link to comment Share on other sites More sharing options...
LauQ Posted February 25, 2009 Share Posted February 25, 2009 Does anyone have the working code for l2jfree? In the python script replace all the "net.sf.l2j." for "com.l2jfree." and replace this line: from net.sf.l2j.util import Rnd for this one: from com.l2jfree.tools.random import Rnd Add this to data/zone/arena.xml <zone id="25100" name="Special Mountain Arena"> <settings pvp="Arena" /> <shape type="Poly" ZMin="-2100" ZMax="-100"> <point x="144215" y="160270" /> <point x="145877" y="159158" /> <point x="145397" y="158735" /> <point x="142822" y="155102" /> <point x="140831" y="158004" /> <point x="141794" y="160570" /> </shape> </zone> And you dont need to put the zone_verticles.sql and the zone.xml stuff, bcause l2jfree simply doesnt have it ^^ The NPC's is the same (in html/default/...) Hope it works Link to comment Share on other sites More sharing options...
StarChild Posted February 25, 2009 Share Posted February 25, 2009 Thank you lauq :) PS: lauq, look your PMs :P Link to comment Share on other sites More sharing options...
fdLP. Posted February 28, 2009 Share Posted February 28, 2009 Fix this please Disk:\serverdir\gameserver\data\scripts\quests\eventmanager\__init__.py Traceback (innermost last): File "__init__.py", line 258, in onKill TypeError: iteration over non-sequence at org.python.core.Py.TypeError(Unknown Source) at org.python.core.PyObject.__iter__(Unknown Source) at org.python.core.PyInstance.__iter__(Unknown Source) at org.python.core.PyObject.object___contains__(Unknown Source) at org.python.core.PyObject.__contains__(Unknown Source) at org.python.core.PyInstance.__contains__(Unknown Source) at org.python.core.PyObject._in(Unknown Source) at org.python.pycode.serializable._pyx1235839395481.onKill$5(__init__.py :258) at org.python.pycode.serializable._pyx1235839395481.call_function(__init __.py) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyObject._jcallexc(Unknown Source) at org.python.core.PyObject._jcall(Unknown Source) at org.python.proxies.main$eventmanager$368.onKill(Unknown Source) at net.sf.l2j.gameserver.model.quest.Quest.notifyKill(Quest.java:412) at net.sf.l2j.gameserver.model.L2Attackable$OnKillNotifyTask.run(L2Attac kable.java:498) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask. access$301(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask. run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source ) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Running L2J , latest rev Link to comment Share on other sites More sharing options...
carman777 Posted March 3, 2009 Share Posted March 3, 2009 i got the same error like Mafia_007 and i'm using l2jfree latest rev. you could come up with a fix? ;;) thanks P.S. it happened right after i killed the rb. Link to comment Share on other sites More sharing options...
ninja123321 Posted March 7, 2009 Share Posted March 7, 2009 Same error here aswell. Link to comment Share on other sites More sharing options...
Recommended Posts