Jump to content
  • 0

[Help]Need Help for instance event


Question

Posted

#Instance Event by Bloodshed
from com.l2jserver.gameserver.instancemanager        import InstanceManager
from com.l2jserver.gameserver.model                  import L2ItemInstance
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
SCROLL	= 960

#NPCs
ROSE	= 2009001
CHEST	= 2009002

#Monsters
NAGLFAR	= 2009010
SENTRY1	= 2009011
SENTRY2	= 2009012
HOUND	= 2009013

#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):
party = player.getParty()
if party:
	player.sendPacket(SystemMessage.sendString("You may not enter with a party."))
	return False
if not player.getLevel() >= 78:
	player.sendPacket(SystemMessage.sendString("You must be level 78 or higher to enter."))
	return False
if not party:
	return True
return False

def teleportplayer(self,player,teleto):
player.setInstanceId(teleto.instanceId)
player.teleToLocation(teleto.x, teleto.y, teleto.z)
pet = player.getPet()
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.getPartyMembers().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
		self.worlds[instanceId]=world
		self.world_ids.append(instanceId)
		print "Instance: Started " + template + " Instance: " +str(instanceId) + " created by " + str(player.getName())
	teleto.instanceId = instanceId
	teleportplayer(self,player,teleto)
	return instanceId
return instanceId

def exitInstance(player,tele):
player.setInstanceId(0)
player.teleToLocation(tele.x, tele.y, tele.z)
pet = player.getPet()
if pet != None :
	pet.setInstanceId(0)
	pet.teleToLocation(tele.x, tele.y, tele.z)

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
		exitInstance(player,tele)
		st.giveItems(ADENA,2750000)
		st.giveItems(STONE,1)
		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_fanfare_2")
			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)

 

hello mxc and good morning i need help i want to add to this event somethings i want event request something any item for can be joined but i can't make it i have try 5-6 things no one from them not work please help me how to make it to request any item :S :S

1 answer to this question

Recommended Posts

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.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  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.



×
×
  • Create New...