well i have a "Solo Instance Event" and this work perfect with Check for Rojin Time. So other guy modify this same code for make this a "Instance Party Event" but without Rejoining Time, so since the code is very similar i try to copy the Time Part from the Solo Event and put this on the Party Event, but give me error.
Solo Event: (Working Perfect With Rejoin 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.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
E_APIGA = 14720
ADENA = 57
STONE = 9576
SCROLL = 960
#NPCs
ROSE = 40000
CHEST = 40001
#Monsters
NAGLFAR = 40002
SENTRY1 = 40003
BRAVERY = 40005
#Timelimit
TIMELIMIT = 2400000
#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() >= 80:
player.sendPacket(SystemMessage.sendString("You must be level 80 or higher to enter."))
return False
if System.currentTimeMillis() < reentertime :
InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID)
hours = (reentertime-System.currentTimeMillis())/3600000
minutes = ((reentertime-System.currentTimeMillis())%3600000)/60000
seconds = ((reentertime-System.currentTimeMillis())%60000)/1000
player.sendPacket(SystemMessage.sendString("Solo Instance will be available to re-use in " + str(hours) + " hours " + str(minutes) + " minutes and " + str(seconds) + " seconds."))
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) + " 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.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 = 83279
tele.y = 148011
tele.z = -3404
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 (80+): 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)
openDoor(DOOR2,npc.instanceId)
elif npcId == BRAVERY :
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,10)
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(BRAVERY)
QUEST.addKillId(SENTRY1)
Party Event, (Trying to put a Rejoin Time taking like a example the Code of Solo Event but i get Error.)
#Instance Event by Bloodshedparty
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 = "Bloodshedparty"
#Items
E_APIGA = 14720
ADENA = 57
STONE = 9576
STONE82 = 10486
STONE84 = 14169
SCROLL = 960
SCROLLB = 6577
#NPCs
ROSE = 50000
CHEST = 50001
#Monsters
NAGLFAR = 50002
SENTRY1 = 50003
SENTRY2 = 50004
HOUND = 50005
#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 not enough people in your party. Minimum is 2 people."))
return False
if System.currentTimeMillis() < reentertime :
InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID)
hours = (reentertime-System.currentTimeMillis())/3600000
minutes = ((reentertime-System.currentTimeMillis())%3600000)/60000
seconds = ((reentertime-System.currentTimeMillis())%60000)/1000
player.sendPacket(SystemMessage.sendString("Solo Instance will be available to re-use in " + str(hours) + " hours " + str(minutes) + " minutes and " + str(seconds) + " seconds."))
return False
if party and party.getLeader() != player:
player.sendPacket(SystemMessage.sendString("Only the party leader can begin the Event."))
return False
for partyMember in party.getPartyMembers().toArray():
if partyMember.getLevel() < 78:
player.sendPacket(SystemMessage.sendString(partyMember.getName()+"s level is below 78 and cannot enter."))
return False
if not Util.checkIfInRange(1000, player, partyMember, True) and new:
player.sendPacket(SystemMessage.sendString(partyMember.getName()+" is too far away, ask them 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)
#added
for partyMember in party.getPartyMembers().toArray():
partyMember.stopAllEffects()
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())
st = player.getQuestState(qn)
InstanceManager.getInstance().setInstanceTime(player.getObjectId(), INSTANCEID, ((System.currentTimeMillis() + TIMELIMIT)))
teleto.instanceId = instanceId
for partyMember in party.getPartyMembers().toArray():
teleportplayer(self,partyMember,teleto)
#added
for partyMember in party.getPartyMembers().toArray():
partyMember.stopAllEffects()
return instanceId
return instanceId
def exitInstance(player,tele):
party = player.getParty()
instanceId = player.getInstanceId()
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)
InstanceManager.getInstance().destroyInstance(instanceId)
return
class Bloodshedparty(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, "Bloodshedparty.xml", tele)
elif npcId == CHEST :
party = player.getParty()
if not party:
player.sendPacket(SystemMessage.sendString("Get out of here you noob!"))
return
if party and party.getLeader() != player:
player.sendPacket(SystemMessage.sendString("Your party leader must claim the treasure!"))
return
npc.decayMe()
tele = PyObject()
tele.x = 82200
tele.y = 148347
tele.z = -3467
for partyMember in party.getPartyMembers().toArray():
st1 = partyMember.getQuestState("Bloodshedparty")
if not st1:
st1 = self.newQuestState(partyMember)
st1.giveItems(ADENA,10000)
st1.giveItems(STONE84,1)
st1.giveItems(STONE82,1)
st1.giveItems(STONE,1)
st1.giveItems(SCROLLB,1)
st1.giveItems(SCROLL,1)
exitInstance(partyMember,tele)
st1.playSound("ItemSound.quest_finish")
partyMember.sendPacket(ExShowScreenMessage("You have Completed the Party Event!", 8000))
return
def onKill(self,npc,player,isPet):
party = player.getParty()
st = player.getQuestState(qn)
npcId = npc.getNpcId()
if npcId == SENTRY1 :
if npc.getInstanceId() in self.worlds:
world = self.worlds[npc.getInstanceId()]
for partyMember in party.getPartyMembers().toArray():
st1 = partyMember.getQuestState("Bloodshedparty")
if not st1:
st1 = self.newQuestState(partyMember)
st1.playSound("ItemSound.quest_middle")
partyMember.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Beginners luck..."))
st.giveItems(E_APIGA,1)
openDoor(DOOR1,npc.instanceId)
elif npcId == SENTRY2 :
if npc.getInstanceId() in self.worlds:
world = self.worlds[npc.getInstanceId()]
for partyMember in party.getPartyMembers().toArray():
st1 = partyMember.getQuestState("Bloodshedparty")
if not st1:
st1 = self.newQuestState(partyMember)
st1.playSound("ItemSound.quest_middle")
partyMember.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "I'll get you next time, Noob!!"))
st.giveItems(E_APIGA,1)
openDoor(DOOR2,npc.instanceId)
elif npcId == HOUND :
if npc.getInstanceId() in self.worlds:
world = self.worlds[npc.getInstanceId()]
for partyMember in party.getPartyMembers().toArray():
st1 = partyMember.getQuestState("Bloodshedparty")
if not st1:
st1 = self.newQuestState(partyMember)
st1.playSound("ItemSound.quest_middle")
partyMember.sendPacket(ExShowScreenMessage("Demonic Lord Naglfar Has Appeared!", 8000))
partyMember.sendPacket(Earthquake(240826,219982,-9985,20,10))
newNpc = self.addSpawn(NAGLFAR,-242754,219982,-9985,306,False,0,False,npc.instanceId)
st.giveItems(E_APIGA,2)
elif npcId == NAGLFAR :
if npc.getInstanceId() in self.worlds:
world = self.worlds[npc.getInstanceId()]
for partyMember in party.getPartyMembers().toArray():
st1 = partyMember.getQuestState("Bloodshedparty")
if not st1:
st1 = self.newQuestState(partyMember)
partyMember.sendPacket(CreatureSay(npc.getObjectId(), 0, npc.getName(), "Hax!! GM GM GM!! WtF!?"))
partyMember.sendPacket(ExShowScreenMessage("Congratulations! You Have Defeated Demonic Lord Naglfar.", 12000))
st1.playSound("ItemSound.quest_finish")
st.giveItems(E_APIGA,4)
newNpc = self.addSpawn(CHEST,-242754,219982,-9985,306,False,0,False,npc.instanceId)
return
QUEST = Bloodshedparty(-1, qn, "Bloodshedparty")
QUEST.addStartNpc(ROSE)
QUEST.addTalkId(ROSE)
QUEST.addTalkId(CHEST)
QUEST.addKillId(NAGLFAR)
QUEST.addKillId(HOUND)
QUEST.addKillId(SENTRY1)
QUEST.addKillId(SENTRY2)
player.sendPacket(SystemMessage.sendString("Solo Instance will be available to re-use in " + str(hours) + " hours " + str(minutes) + " minutes and " + str(seconds) + " seconds."))
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.
I have a system where Accounts are saved on login screen for fast login. I am playing a server where this feature is not on the logic screen. How I can try to add this feature to the system?
I don't know what files I would have to touch.
Thanks!!
Hello everyone,
Given that he has lots of different projects but no concrete opinions..
I pose my request here.
Which serious Lineage2 HighFive project is the best choice?
For a server that can be custom and which can be suitable for a classic x10 server and an x1000 server for example?
L2J
Or we ideally have the source, in order to be able to add the farming systems, weapons and armor, npc...
Free or paid, it doesn't matter.
THANKS
Hello everyone,
Given that he has lots of different projects
but no concrete opinions..
I pose my request here.
Which serious Lineage2 HighFive project/emulator
is the best choice?
For a server that can be custom and
which can be suitable for a classic x10 server
and an x1000 server for example?
L2Java ideally
Or we ideally have the source,
in order to be able to add the farming systems,
weapons and armor, npc...
Free or paid, it doesn't matter.
THANKS
Question
Chakl22
well i have a "Solo Instance Event" and this work perfect with Check for Rojin Time. So other guy modify this same code for make this a "Instance Party Event" but without Rejoining Time, so since the code is very similar i try to copy the Time Part from the Solo Event and put this on the Party Event, but give me error.
Solo Event: (Working Perfect With Rejoin Timer).
Party Event, (Trying to put a Rejoin Time taking like a example the Code of Solo Event but i get Error.)
if System.currentTimeMillis() < reentertime :
InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID)
hours = (reentertime-System.currentTimeMillis())/3600000
minutes = ((reentertime-System.currentTimeMillis())%3600000)/60000
seconds = ((reentertime-System.currentTimeMillis())%60000)/1000
player.sendPacket(SystemMessage.sendString("Solo Instance will be available to re-use in " + str(hours) + " hours " + str(minutes) + " minutes and " + str(seconds) + " seconds."))
return False
st = player.getQuestState(qn)
InstanceManager.getInstance().setInstanceTime(player.getObjectId(), INSTANCEID, ((System.currentTimeMillis() + TIMELIMIT)))
This the Code i added to Party Event for try to get Rejoin Time but get this error:
Error on: C:\server\gameserver\data\scripts\instances\Bloodshedparty\__init__.py.error.log
Line: -1 - Column: -1
Traceback (innermost last):
(no code object) at line 0
SyntaxError: ('invalid syntax', ('__init__.py', 262, 17, '\t\tInstanceManager.getInstance().setInstanceTime(player.getObjectId(), INSTANCEID, ((System.currentTimeMillis() + TIMELIMIT)))'))
I hope someone can help with this, ty.
2 answers 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.