I hope somebody can help on my problem. (H5 with .py files)
I have a party instance (bloodshed). I want to put a boss to end of instance. Everything work fine. But the players not get reenter time to instance.
I have a solo instance and there work fine the reenter timer. I tried copy the code from that instance but i got many error.
This is the code of party instance (without reenter timer):
#Instance Event by Bloodshed
from com.l2jserver.gameserver.instancemanager import InstanceManager
from com.l2jserver.gameserver.model.items.instance 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 = 40000
CHEST = 40001
#Monsters
NAGLFAR = 40002
SENTRY1 = 40003
SENTRY2 = 40004
HOUND = 40005
#Timelimit
TIMELIMIT = 86400000
#Instance Id
INSTANCEID = 161
#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.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
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
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.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)
This is the solo instance with working timer:
#Instance Engine by Bloodshed, Fixed by Sakretsu
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 = 14721
ADENA = 57
STONE = 16167
SCROLL = 960
#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 party:
player.sendPacket(SystemMessage.sendString("You may not enter with a party."))
return False
if not player.getLevel() >= 83:
player.sendPacket(SystemMessage.sendString("You must be level 83 or higher to enter."))
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
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.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.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) + " created by " + 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.getSummon()
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 = 83279
tele.y = 148011
tele.z = -3404
exitInstance(player,tele)
st.giveItems(ADENA,5000000)
st.giveItems(STONE,1)
st.giveItems(SCROLL,2)
st.playSound("ItemSound.quest_finish")
player.sendPacket(ExShowScreenMessage("Solo Instance Event (83+): 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,2)
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,2)
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,3)
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)
A New Chapter Begins
We're Rebuilding – Join Our Staff Team
After many years of activity, growth, and challenges, it’s finally time for our community to restructure and move forward. We’re ready to turn a new page and evolve into something greater — but we can’t do it without the help of passionate and committed people.
That’s why we’re now opening up staff applications for those who want to actively shape the future of our community.
If you have the motivation, time, and patience to contribute to something meaningful, this is your chance to step in and make a real impact.
What We're Looking For
We’re building a fresh and dedicated team of individuals who are ready to support and grow this project. Open roles include:
Moderators – to keep the forum clean, safe, and organized
Gaming Moderators – to help manage gaming boards (e.g., Lineage, GTA FiveM)
Content Creators – to post updates, guides, and articles
Community Managers – to engage users and drive activity
Technical Staff – for development, backend, and server work
We’re not focusing only on Lineage anymore. Our vision is expanding to new areas — including GTA FiveM and other multiplayer games you might have expertise in.
If you have a good idea, a server plan, or something new to suggest — we’re open to it. Now’s the time to bring it forward.
Requirements
We’re looking for individuals who have:
A history of activity on the forum (preferred)
Available time to contribute consistently
A sense of teamwork and responsibility
A genuine interest in gaming and community building
If you're interested, just send a private message to me or Celestine. (or just reply here)
Tell us a few things about yourself and how you’d like to contribute.
Let’s bring this community back to life.
Let’s rebuild something great — together.
M M G A
Question
Chemotox
Hi!
I hope somebody can help on my problem. (H5 with .py files)
I have a party instance (bloodshed). I want to put a boss to end of instance. Everything work fine. But the players not get reenter time to instance.
I have a solo instance and there work fine the reenter timer. I tried copy the code from that instance but i got many error.
This is the code of party instance (without reenter timer):
This is the solo instance with working timer:
Please somebody help on me.
17 answers to this question
Recommended Posts