Jump to content
  • 0

[Help] Instance Script !


Question

Posted

Hello Guys

I have that instance script. is for a party of 2 players that can enter here. kill some monsters and take a reward from a chest.

 

Here is the script code:

 

#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
STONE82	= 10486
STONE84	= 14169
SCROLL	= 960
SCROLLB	= 6577

#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 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.getPartyMembers().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
return True

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
	for partyMember in party.getPartyMembers().toArray():
		teleportplayer(self,partyMember,teleto)
	return instanceId
return instanceId

def exitInstance(player,tele):
party = player.getParty()
if party :
	for partyMember in party.getPartyMembers().toArray():
		partyMember.setInstanceId(0)
		partyMember.teleToLocation(tele.x, tele.y, tele.z)
		pet = partyMember.getPet()
		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.getPet()
	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.getPartyMembers().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)

 

I want To Edit that script and make that changes:

1) Any player can enter withount 2nd player or party..(Solo instance)

2) A cooldown at the enter of the instance. ( if someone enter he cant enter again today. 24hours Re-use)

 

If someone can help me.. Thanks in advance!!!

1 answer to this question

Recommended Posts

  • 0
Posted

 

1) Any player can enter withount 2nd player or party..(Solo instance)

def checkConditions(player, new):
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.getPartyMembers().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
return True

change that to only check if (player.getLevel < 78)

 

for the second one i have no idea of how to do that, search for some other instances (if you find any in python) and just c/p that

 

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...