Jump to content
  • 0

Event Instance


Question

Posted

Hey pals, i have a problem whit this event's Code, the same throws a error when the player teleport into the event.

 

#Instance Engine

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                            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 = "Bloodshed2"

#Items
B_Eva	= 30000
G_Bar	= 57
STONE	= 14008
Codex	= 6622

#NPCs
ROSE	= 40014
CHEST	= 40015

#Monsters
NAGLFAR	= 40019
SENTRY1	= 40016
SENTRY2	= 40017
HOUND	= 40018

#Timelimit
TIMELIMIT = 2700000

#Instance Id
INSTANCEID = 500000

#Doors
DOOR1	= 17130043
DOOR2	= 17130045
DOOR3	= 17130046

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 openDoor(doorId,instanceId):
for door in InstanceManager.getInstance().getInstance(instanceId).getDoors():
	if door.getDoorId() == doorId:
		door.openMe()			

def checkConditions(player, new):
st = player.getQuestState(qn)
reentertime = InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID);
party = player.getParty()
if party:
	player.sendPacket(SystemMessage.sendString("You may not enter with a party."))
	return False
if player.getLevel() >= 21:
	player.sendPacket(SystemMessage.sendString("Tiene que ser 20 para poder entrar"))
	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
		world.templateId = INSTANCEID
		self.worlds[instanceId]=world
		self.world_ids.append(instanceId)
		print "Instance Bloodshed.xml Started: " +str(instanceId) + " Lineage 2 " + str(player.getName())
	st = player.getQuestState(qn)
	InstanceManager.getInstance().setInstanceTime(player.getObjectId(), INSTANCEID, ((System.currentTimeMillis() + TIMELIMIT)))
	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 Bloodshed2(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 = -87926
		tele.y = -143042
		tele.z = -9172
		enterInstance(self, player, "Bloodshed2.xml", tele)
		st.playSound("ItemSound.quest_middle")
	elif npcId == CHEST :
		npc.decayMe()
		tele = PyObject()
		tele.x = -47124
		tele.y = 58932
		tele.z = -3360
		exitInstance(player,tele)
		st.giveItems(B_Eva,1000)
		st.giveItems(G_Bar,100000)
		st.giveItems(STONE,0)
		st.giveItems(Codex,0)
		st.playSound("ItemSound.quest_finish")
		player.sendPacket(ExShowScreenMessage("Felicitaciones", 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(), "Me Has Derrotado Puedes Pasar!"))
			st.giveItems(B_Eva,4)
			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(), "Me Has Derrotado Puedes Pasar!"))
			st.giveItems(B_Eva,4)
			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(B_Eva,5)
			openDoor(DOOR3,npc.instanceId)
			player.sendPacket(ExShowScreenMessage("Death Whisper a Aparecido Ten Cuidado!", 8000))
			newNpc = self.addSpawn(NAGLFAR,-87785,-153302,-9179,337,False,0,False,npc.instanceId)
			player.sendPacket(Earthquake(154323,144443,-12585,20,10))
	elif npcId == NAGLFAR :
		if npc.getInstanceId() in self.worlds:
			world = self.worlds[npc.getInstanceId()]
			player.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Como eh sido Derrotado!?"))
			player.sendPacket(ExShowScreenMessage("Felicitaciones! Tu Has Vencido a Death Whisper.", 12000))
			st.playSound("ItemSound.quest_middle")
			st.giveItems(B_Eva,6)
			newNpc = self.addSpawn(CHEST,-87785,-153302,-9179,337,False,0,False,npc.instanceId)
	return

QUEST = Bloodshed2(-1, qn, "Bloodshed2")
QUEST.addStartNpc(ROSE)
QUEST.addTalkId(ROSE)
QUEST.addTalkId(CHEST)

QUEST.addKillId(NAGLFAR)
QUEST.addKillId(HOUND)
QUEST.addKillId(SENTRY1)
QUEST.addKillId(SENTRY2)

 

thump_8188048dibujo.jpg

 

Thanks all for the help. 

 

4 answers to this question

Recommended Posts

  • 0
Posted

From what I know of teleToLocation, it should teleport your summon aswell. teleToLocation normally got an extended version with instanceid included on Freya++.

 

So basically teleportplayer method is useless, lol.

  • 0
Posted

Dunno what pack you're using, not the chronicle, anyway I don't get why getPet() would be null, you made a null check about it. To be honest I hate Python, the error report you posted is self explanatory you got almost nothing, except it is about getPet and isn't supposed to be null.

 

Check your sources to see if you got a method teleToLocation with 4 parameters : x, y, z, instanceid. If yes use it instead of your teleportplayer method and see if it got any differences.

 

I must add openDoor, closeDoor are probably core methods aswell, you don't need them. Finally exitInstance also can be dropped. I invite you to check how others instances work on your pack. I never worked with instances, but there are probably shared methods which fit with your needs.

 

Overall you probably can drop 1/4 of your script lol.

  • 0
Posted

Solutions already, Achieve Adapt.  :troll:  :dat:

 

Tryskell, Good the information, though it uses other methods.

 

Close the Topic  ;)

Guest
This topic is now closed to further replies.


×
×
  • Create New...