Hi pals, i have some doubt, how i put this instance were only can enter whit a specific level
i try to fix the part (if not player.getLevel() >= 83)... but if the character is lvl 84 can enter in the same way.
#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.instancemanager.InstanceManager import InstanceWorld
from com.l2jserver.gameserver.model 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
B_Eva = 4355
G_Bar = 3470
STONE = 9576
Codex = 6622
#NPCs
ROSE = 40000
CHEST = 40001
#Monsters
NAGLFAR = 40002
SENTRY1 = 40003
SENTRY2 = 40004
HOUND = 40005
#Timelimit
TIMELIMIT = 2700000
#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("Usted no puede entrar a un partido."))
return False
if not player.getLevel() >= 83:
player.sendPacket(SystemMessage.sendString("Debes tener nivel 83 o superior para entrar en este Event."))
return False
if System.currentTimeMillis() < reentertime :
InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID)
player.sendPacket(SystemMessage.sendString("Instancia en solitario: No puede volver a 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("Has entrado en otra zona, por lo tanto usted no puede entrar en este."))
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 katian" + 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 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 = 81895
tele.y = 149227
tele.z = -3468
exitInstance(player,tele)
st.giveItems(B_Eva,3)
st.giveItems(G_Bar,5)
st.giveItems(STONE,3)
st.giveItems(Codex,3)
st.playSound("ItemSound.quest_finish")
player.sendPacket(ExShowScreenMessage("Solo Instance Event (83+): Finalizado Felicidades", 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(), "Perdoname no fue mi intencion"))
st.giveItems(B_Eva,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(), "Perdoname mi maestro"))
st.giveItems(B_Eva,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(B_Eva,1)
player.sendPacket(ExShowScreenMessage("Demoníaca Naglfar ha aparecido!", 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(), "Como pudiste"))
player.sendPacket(ExShowScreenMessage("Felicidades! Has derrotado a Demoniaca Lord Naglfar.", 12000))
st.playSound("ItemSound.quest_middle")
st.giveItems(B_Eva,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)
Both are in-game bots. I'm looking for an out-of-game bot ((one that doesn’t require the L2 client).
Hmm, never heard about this bot. Will check, thank you
🎉 L2Mid is back!
After a 3-year pause, we’re launching a new Interlude server based on the original Interlude client (old school 😉).
What to expect
• The classic Interlude spirit
• Old friends, rival clans, and returning legends
• A season focused on pure nostalgia
This may be our final Interlude server. (maybe 😉)
🗓️ Opening: December 5, 2025 at 20:00 (GMT+2)
https://l2mid.com
Question
JZZ
Hi pals, i have some doubt, how i put this instance were only can enter whit a specific level
i try to fix the part (if not player.getLevel() >= 83)... but if the character is lvl 84 can enter in the same way.
#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.instancemanager.InstanceManager import InstanceWorld from com.l2jserver.gameserver.model 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 B_Eva = 4355 G_Bar = 3470 STONE = 9576 Codex = 6622 #NPCs ROSE = 40000 CHEST = 40001 #Monsters NAGLFAR = 40002 SENTRY1 = 40003 SENTRY2 = 40004 HOUND = 40005 #Timelimit TIMELIMIT = 2700000 #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("Usted no puede entrar a un partido.")) return False if not player.getLevel() >= 83: player.sendPacket(SystemMessage.sendString("Debes tener nivel 83 o superior para entrar en este Event.")) return False if System.currentTimeMillis() < reentertime : InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID) player.sendPacket(SystemMessage.sendString("Instancia en solitario: No puede volver a 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("Has entrado en otra zona, por lo tanto usted no puede entrar en este.")) 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 katian" + 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 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 = 81895 tele.y = 149227 tele.z = -3468 exitInstance(player,tele) st.giveItems(B_Eva,3) st.giveItems(G_Bar,5) st.giveItems(STONE,3) st.giveItems(Codex,3) st.playSound("ItemSound.quest_finish") player.sendPacket(ExShowScreenMessage("Solo Instance Event (83+): Finalizado Felicidades", 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(), "Perdoname no fue mi intencion")) st.giveItems(B_Eva,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(), "Perdoname mi maestro")) st.giveItems(B_Eva,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(B_Eva,1) player.sendPacket(ExShowScreenMessage("Demoníaca Naglfar ha aparecido!", 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(), "Como pudiste")) player.sendPacket(ExShowScreenMessage("Felicidades! Has derrotado a Demoniaca Lord Naglfar.", 12000)) st.playSound("ItemSound.quest_middle") st.giveItems(B_Eva,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)5 answers to this question
Recommended Posts