Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Instance Event by Bloodshed
- from java.lang import System
- from java.sql import Connection
- from java.sql import PreparedStatement
- from java.sql import ResultSet
- from java.util.logging import Level
- from java.util.logging import Logger
- from com.l2jserver import L2DatabaseFactory
- from com.l2jserver.gameserver.instancemanager import InstanceManager
- from com.l2jserver.gameserver.model.instancezone import InstanceWorld
- from com.l2jserver.gameserver.model.items.instance import L2ItemInstance
- from com.l2jserver.gameserver.model import L2Object
- from com.l2jserver.gameserver.model import L2World
- from com.l2jserver.gameserver.model.actor import L2Character
- from com.l2jserver.gameserver.model.actor import L2Summon
- from com.l2jserver.gameserver.model.entity import Instance
- from com.l2jserver.gameserver.model.itemcontainer import PcInventory
- 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.network.serverpackets import CreatureSay
- from com.l2jserver.gameserver.network.serverpackets import InventoryUpdate
- from com.l2jserver.gameserver.network.serverpackets import MagicSkillUse
- from com.l2jserver.gameserver.network.serverpackets import SystemMessage
- from com.l2jserver.gameserver.network.serverpackets import ExShowScreenMessage
- from com.l2jserver.gameserver.network.serverpackets import Earthquake
- from com.l2jserver.gameserver.network import SystemMessageId
- from com.l2jserver.gameserver.util import Util
- from com.l2jserver.util import Rnd
- qn = "Bloodshed"
- #Items
- E_APIGA = 14720
- ADENA = 57
- STONE = 9576
- STONE82 = 10486
- STONE84 = 14169
- SCROLL = 960
- SCROLLB = 6577
- #NPCs
- ROSE = 40000
- CHEST = 40001
- #Monsters
- NAGLFAR = 40002
- SENTRY1 = 40003
- SENTRY2 = 40004
- HOUND = 40005
- #Timelimit
- TIMELIMIT = 86400000
- #Instance Id
- INSTANCEID = 500000
- #Doors
- DOOR1 = 12240001
- DOOR2 = 12240002
- class PyObject:
- pass
- def openDoor(doorId,instanceId):
- for door in InstanceManager.getInstance().getInstance(instanceId).getDoors():
- if door.getDoorId() == doorId:
- door.openMe()
- def closeDoor(doorId,instanceId):
- for door in InstanceManager.getInstance().getInstance(instanceId).getDoors():
- if door.getDoorId() == doorId:
- door.closeMe()
- def checkConditions(player, new):
- st = player.getQuestState(qn)
- reentertime = InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID);
- party = player.getParty()
- if not party:
- player.sendPacket(SystemMessage.sendString("You are not currently in a party, so you cannot enter."))
- return False
- if party and party.getMemberCount() < 2:
- player.sendPacket(SystemMessage.sendString("You cannot enter because there is too less people in your party. Minimum is 4 people."))
- return False
- for partyMember in party.getMembers().toArray():
- if partyMember.getLevel() < 78:
- player.sendPacket(SystemMessage.sendString(partyMember.getName()+"s level is too low and cannot be entered."))
- return False
- if not Util.checkIfInRange(1000, player, partyMember, True) and new:
- player.sendPacket(SystemMessage.sendString(partyMember.getName()+" is too far away ask him to come here."))
- return False
- if System.currentTimeMillis() < reentertime :
- InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID)
- player.sendPacket(SystemMessage.sendString("Solo Instance: You may not re-enter yet."))
- return False
- return True
- def teleportplayer(self,player,teleto):
- player.setInstanceId(teleto.instanceId)
- player.teleToLocation(teleto.x, teleto.y, teleto.z)
- pet = player.getSummon()
- if pet != None :
- pet.setInstanceId(teleto.instanceId)
- pet.teleToLocation(teleto.x, teleto.y, teleto.z)
- return
- def enterInstance(self,player,template,teleto):
- instanceId = 0
- party = player.getParty()
- if party :
- for partyMember in party.getMembers().toArray():
- st = partyMember.getQuestState(qn)
- if not st : st = self.newQuestState(partyMember)
- if partyMember.getInstanceId()!=0:
- instanceId = partyMember.getInstanceId()
- else :
- if player.getInstanceId()!=0:
- instanceId = player.getInstanceId()
- if instanceId != 0:
- if not checkConditions(player,False):
- return 0
- foundworld = False
- for worldid in self.world_ids:
- if worldid == instanceId:
- foundworld = True
- if not foundworld:
- player.sendPacket(SystemMessage.sendString("You have entered another zone, therefore you cannot enter this one."))
- return 0
- teleto.instanceId = instanceId
- teleportplayer(self,player,teleto)
- return instanceId
- else:
- if not checkConditions(player,True):
- return 0
- instanceId = InstanceManager.getInstance().createDynamicInstance(template)
- if not instanceId in self.world_ids:
- world = PyObject()
- world.rewarded=[]
- world.instanceId = instanceId
- world.templateId = INSTANCEID
- self.worlds[instanceId]=world
- self.world_ids.append(instanceId)
- print "Instance: Started " + template + " Instance: " +str(instanceId) + " created by " + str(player.getName())
- st = player.getQuestState(qn)
- InstanceManager.getInstance().setInstanceTime(player.getObjectId(), INSTANCEID, ((System.currentTimeMillis() + TIMELIMIT)))
- teleto.instanceId = instanceId
- for partyMember in party.getMembers().toArray():
- teleportplayer(self,partyMember,teleto)
- return instanceId
- return instanceId
- def exitInstance(player,tele):
- party = player.getParty()
- if party :
- for partyMember in party.getMembers().toArray():
- partyMember.setInstanceId(0)
- partyMember.teleToLocation(tele.x, tele.y, tele.z)
- pet = partyMember.getSummon()
- if pet != None :
- pet.setInstanceId(0)
- pet.teleToLocation(tele.x, tele.y, tele.z)
- else :
- player.setInstanceId(0)
- player.teleToLocation(tele.x, tele.y, tele.z)
- pet = player.getSummon()
- if pet != None :
- pet.setInstanceId(0)
- pet.teleToLocation(tele.x, tele.y, tele.z)
- InstanceManager.getInstance().destroyInstance(player.getInstanceId())
- class Bloodshed(JQuest):
- def __init__(self,id,name,descr):
- JQuest.__init__(self,id,name,descr)
- self.worlds = {}
- self.world_ids = []
- def onTalk (self,npc,player):
- st = player.getQuestState(qn)
- npcId = npc.getNpcId()
- if npcId == ROSE :
- tele = PyObject()
- tele.x = -238599
- tele.y = 219983
- tele.z = -10144
- enterInstance(self, player, "Bloodshed.xml", tele)
- # st.playSound("ItemSound.quest_middle")
- elif npcId == CHEST :
- npc.decayMe()
- tele = PyObject()
- tele.x = 82200
- tele.y = 148347
- tele.z = -3467
- party = player.getParty()
- if party :
- for partyMember in party.getMembers().toArray():
- exitInstance(partyMember,tele)
- else:
- exitInstance(player,tele)
- st.giveItems(ADENA,10000)
- if Rnd.get(100) < 10 :
- st.giveItems(STONE84,1)
- if Rnd.get(100) < 15 :
- st.giveItems(STONE82,1)
- if Rnd.get(100) < 25 :
- st.giveItems(STONE,1)
- if Rnd.get(100) < 25 :
- st.giveItems(SCROLLB,1)
- if Rnd.get(100) < 50 :
- st.giveItems(SCROLL,1)
- st.playSound("ItemSound.quest_finish")
- player.sendPacket(ExShowScreenMessage("Solo Instance Event (78+): Completed", 8000))
- return
- def onKill(self,npc,player,isPet):
- st = player.getQuestState(qn)
- npcId = npc.getNpcId()
- if npcId == SENTRY1 :
- if npc.getInstanceId() in self.worlds:
- world = self.worlds[npc.getInstanceId()]
- st.playSound("ItemSound.quest_middle")
- player.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Master, Forgive Me!"))
- st.giveItems(E_APIGA,1)
- openDoor(DOOR1,npc.instanceId)
- elif npcId == SENTRY2 :
- if npc.getInstanceId() in self.worlds:
- world = self.worlds[npc.getInstanceId()]
- st.playSound("ItemSound.quest_middle")
- player.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Master, Forgive Me!"))
- st.giveItems(E_APIGA,1)
- openDoor(DOOR2,npc.instanceId)
- elif npcId == HOUND :
- if npc.getInstanceId() in self.worlds:
- world = self.worlds[npc.getInstanceId()]
- st.playSound("ItemSound.quest_middle")
- st.giveItems(E_APIGA,2)
- player.sendPacket(ExShowScreenMessage("Demonic Lord Naglfar Has Appeared!", 8000))
- newNpc = self.addSpawn(NAGLFAR,-242754,219982,-9985,306,False,0,False,npc.instanceId)
- player.sendPacket(Earthquake(240826,219982,-9985,20,10))
- elif npcId == NAGLFAR :
- if npc.getInstanceId() in self.worlds:
- world = self.worlds[npc.getInstanceId()]
- player.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Ugh.... Defeated.. How!?"))
- player.sendPacket(ExShowScreenMessage("Congratulations! You Have Defeated Demonic Lord Naglfar.", 12000))
- st.playSound("ItemSound.quest_finish")
- st.giveItems(E_APIGA,4)
- newNpc = self.addSpawn(CHEST,-242754,219982,-9985,306,False,0,False,npc.instanceId)
- return
- QUEST = Bloodshed(-1, qn, "Bloodshed")
- QUEST.addStartNpc(ROSE)
- QUEST.addTalkId(ROSE)
- QUEST.addTalkId(CHEST)
- QUEST.addKillId(NAGLFAR)
- QUEST.addKillId(HOUND)
- QUEST.addKillId(SENTRY1)
- QUEST.addKillId(SENTRY2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement