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)
L2 ArenaWar: Low Rate PvP Server with Free Buffs & Autofarm [PVP]⚔️ [Free]🆓
Classic Interlude with 3x XP rates!
Free starter pack(no grade) to kickstart your adventure!
Autofarm for convenient grinding!
Free buffs to keep you fighting fit! (2 job buffs)
No experience loss on death! (Except with Karma)
Clear Karma system to keep things fair! ⚖️
Active community of 800-1k players!
Join our Discord to learn more!
>> Discord <<
Server website: https://l2arenawar.com/en/
You indeed have to save player position over Enterworld to properly clean it up later (if you don't, even trying to delete packet content would eventually keep it up), that's what we do with debug packet (which is a reusable Map of ExServerPrimitive packets) on aCis.
It doesn't solve the FPS stuttering - more you draw/delete lines, more your client becomes laggy. It's like if client wasn't deleting drawn points/lines properly, but instead simply hide them and redrawn content above.
If you got a solution, I would happy to integrate it.
You should check aCis#Player _debug packet integration, it allows very big amount of lines/points to be drawn, it is also reusable.
https://gitlab.com/Tryskell/acis_public/-/blob/master/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java?ref_type=heads
https://gitlab.com/Tryskell/acis_public/-/blob/master/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java?ref_type=heads
we sell website templates, make websites to order. Great selection at very good prices.
My contacts
discord : advert1231
telegram : https://t.me/ggwpins
Question
Enoc
Hey pals, i have a problem whit this event's Code, the same throws a error when the player teleport into the event.
Thanks all for the help.
Link to comment
Share on other sites
4 answers to this question
Recommended Posts