Ok i m using this code for a Instance Event, this work Fine but the part where the players need to know how much time need wait for join again not work
Index: data/scripts/handlers/usercommandhandlers/InstanceZone.java
===================================================================
--- data/scripts/handlers/usercommandhandlers/InstanceZone.java (revision 7669)
+++ data/scripts/handlers/usercommandhandlers/InstanceZone.java (working copy)
@@ -72,13 +72,22 @@
firstMessage = false;
activeChar.sendPacket(new SystemMessage(SystemMessageId.INSTANCE_ZONE_TIME_LIMIT));
}
- int hours = (int) (remainingTime / 3600);
- int minutes = (int) ((remainingTime%3600) / 60);
- SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
- sm.addString(InstanceManager.getInstance().getInstanceIdName(instanceId));
- sm.addNumber(hours);
- sm.addNumber(minutes);
- activeChar.sendPacket(sm);
+ if (instanceId != 500000)
+ {
+ int hours = (int) (remainingTime / 3600);
+ int minutes = (int) ((remainingTime%3600) / 60);
+ SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
+ sm.addString(InstanceManager.getInstance().getInstanceIdName(instanceId));
+ sm.addNumber(hours);
+ sm.addNumber(minutes);
+ activeChar.sendPacket(sm);
+ }
+ else
+ {
+ int hours = (int) (remainingTime / 3600);
+ int minutes = (int) ((remainingTime%3600) / 60);
+ activeChar.sendMessage("Solo Instance will be available to re-use in " + hours + " hours and " + minutes + " minutes.");
+ }
}
else
InstanceManager.getInstance().deleteInstanceTime(activeChar.getObjectId(), instanceId);
Index: data/scripts.cfg
===================================================================
--- data/scripts.cfg (revision 7669)
+++ data/scripts.cfg (working copy)
@@ -207,6 +207,7 @@
village_master/orc_occupation_change_2/__init__.py
# Instance Dungeons Section
+instances/Bloodshed/__init__.py
instances/DarkCloudMansion/DarkCloudMansion.java
instances/CrystalCaverns/CrystalCaverns.java
instances/Kamaloka/Kamaloka.java
And here is the __init__.py
#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
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.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 (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,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_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)
I think the problem is in somewhere here:
+ if (instanceId != 500000)
+ {
+ int hours = (int) (remainingTime / 3600);
+ int minutes = (int) ((remainingTime%3600) / 60);
+ SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
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.
DISCORD :
utchiha_market
telegram :
https://t.me/utchiha_market
SELLIX STORE :
https://utchihamkt.mysellix.io/
Join our server for more products :
https://discord.gg/hood-services
https://campsite.bio/utchihaamkt
Question
Chakl22
Ok i m using this code for a Instance Event, this work Fine but the part where the players need to know how much time need wait for join again not work
And here is the __init__.py
I think the problem is in somewhere here:
+ if (instanceId != 500000)
+ {
+ int hours = (int) (remainingTime / 3600);
+ int minutes = (int) ((remainingTime%3600) / 60);
+ SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
+ sm.addString(InstanceManager.getInstance().getInstanceIdName(instanceId));
+ sm.addNumber(hours);
+ sm.addNumber(minutes);
+ activeChar.sendPacket(sm);
+ }
+ else
+ {
+ int hours = (int) (remainingTime / 3600);
+ int minutes = (int) ((remainingTime%3600) / 60);
+ activeChar.sendMessage("Solo Instance will be available to re-use in " + hours + " hours and " + minutes + " minutes.");
+ }
The only message i get is: player.sendPacket(SystemMessage.sendString("Solo Instance: You may not re-enter yet."))
But i would like player see the time remaining hoursmin/secs. thx in advance.
PD: An other strange thing is the Mobs in the Instace don't move i mean i hit them but they attack me but don't follow me :shock:
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.