Jump to content

Recommended Posts

  • 2 weeks later...
  • 1 month later...
Posted

To dleogr:

The error line when i put your code in my freya is

 

SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);

 

The contruction SystemMessage(SystemMessageId) is not visible.

 

What is mean?

Posted

This add on event is not what we need... Is allow the event to running only one time per day.

And is not codded well also.

So here is the correct one for Freya !

 

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)

 

 

Credits go to Sakretsu !

 

thx for set timer to instance.

Posted

To dleogr:

The error line when i put your code in my freya is

 

SystemMessage sm = new SystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);

 

The contruction SystemMessage(SystemMessageId) is not visible.

 

What is mean?

 

Change that line with this one:

 

SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);

Posted

Change that line with this one:

 

SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);

Thanks so much. It's work fine now.

Guest
This topic is now closed to further replies.



  • Posts

    • If you want to make your thread stand out a bit more, adding quick proof pics or a small stock update usually helps buyers feel safer. I’ve had smoother chats with traders after doing that. On a side note, when I’m taking a break from trading, I mess around with the security puzzles in ModsCraft, which has been a fun way to clear my head between deals.
    • ━━━━━━━━━━━━━━━━━━━━━━ L2-SCRIPTS UPDATE ━━━━━━━━━━━━━━━━━━━━━━ Dear MaxCheaters users, We have updated the prices in the first post. Specially for the MaxCheaters community, we significantly reduced prices on many of our old developments, archived projects and source packs. Most of our older Lineage 2 sources are now much more affordable than before, including many Classic and Essence projects. This is a great opportunity for smaller teams, startup servers and developers who always wanted to work with our projects but previously could not afford them. ━━━━━━━━━━━━━━━━━━━━━━ For the past years we were mostly absent from the public scene because our team was working privately on large projects and contract-based development. During this time we accumulated a huge amount of private materials, systems, source codes, client modifications, website solutions and infrastructure developments that were never publicly released. Now, according to completed agreements and partnerships, we finally have the ability to publish and offer part of these materials as our private services and developments. In the upcoming weeks we will also publish a list of our works and services from the last 5 years of private development. ━━━━━━━━━━━━━━━━━━━━━━ Upcoming publications will include: • Private server development • Custom gameplay systems • Client modifications • Websites & ACP systems • Protection solutions • Infrastructure solutions • MMO / Web projects ━━━━━━━━━━━━━━━━━━━━━━ Thank you to everyone who stayed with us all these years.   Telegram:  @L2scripts Websites:  L2-scripts.com    L2-scripts.ru    Mmore.dev Sguard site:  Sguard   Best Regards! ━━━━━━━━━━━━━━━━━━━━━━
    • Tightening the timer to fifteen minutes sounds spot on, especially for players who don’t want to sit around waiting. I’ve had a few hosting hiccups on past projects, and sorting out configs felt a lot like the headaches I solved after dealing with armadiofashion.com for a separate issue where a server kept failing to connect. Little tweaks like that usually smooth things out fast.
    • Could you please re-upload the files 😞
    • We are back on MaxCheaters.   After a long break, we are officially returning to public activity and support for our projects. During this time, SGuard has been heavily reworked: some outdated features were removed, the architecture was simplified and optimized, and the protection itself became more stable, faster, and easier to use. Our goal has always been simple — to provide a protection system that actually works, does not create unnecessary problems for administrators, and does not turn server maintenance into a constant battle with bugs and configuration issues.   What we offer now: • Updated version of SGuard • Simple and fast installation • Stable operation without constant crashes • Support for old and latest chronicles • Java and PTS support • Regular updates and technical support • Private solutions for large projects   We continue to improve our products and are once again open for new clients and partnerships. Thank you to everyone who stayed with us all these years.   ---------------------------------------------------------- Telegram: @l2scripts   L2S Guard: http://guard.l2-scripts.com L2-Scripts Studio: https://l2-scripts.com Private Development: https://mmore.dev
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..