I have this party instace (bloodshed) Work fine but only the party leader gett instnce cooldown now.
How can I fix it to get reeanter time for all party member?
#Instance Event by Bloodshed
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 = 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 = 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 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
if System.currentTimeMillis() < reentertime :
InstanceManager.getInstance().getInstanceTime(player.getObjectId(), INSTANCEID)
player.sendPacket(SystemMessage.sendString("Solo Instance: You may not re-enter yet."))
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
world.templateId = 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.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)
Hello. You may encounter the Push item fail error when trying to pick up an item dropped on the ground by a mob.
or
You can throw something out of your inventory and pick it up again, several times.
Probably this is a quantum dependency) I don't understand at what point this happens, sometimes two items one after another experience push item errors, and sometimes I don't have enough thousands of attempts to repeat this trick)
In any case, this is just a visual error and after the relog, the item appears in the inventory. I think first i need to disconnect the extender and check it on a bare server. I still need time to check this, maybe it's not even about the autoloot function.
https://youtu.be/6mcfmdImofE
-----------
In general, I would like to thank our wonderful Emca Eressea for her deep knowledge in programming and reverse engineering. And for the fact that her work is open to everyone, this is very amazing, and incredibly valuable.
Question
Chemotox
Pls help
I have this party instace (bloodshed) Work fine but only the party leader gett instnce cooldown now.
How can I fix it to get reeanter time for all party member?
2 answers to this question
Recommended Posts