import sys
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 = "BloodEmpires"
#Items
E_APIGA = 14720
ADENA = 57
STONE = 9576
SCROLL = 960
#NPCs
ROSE = 65051
CHEST = 65052
#Monsters
NAGLFAR = 65053
SENTRY1 = 65054
SENTRY2 = 65055
HOUND = 65056
#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 party:
player.sendPacket(SystemMessage.sendString("You may not enter with a party."))
return False
if not player.getLevel() >= 84:
player.sendPacket(SystemMessage.sendString("You must be level 84 or higher to enter."))
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
self.worlds[instanceId]=world
self.world_ids.append(instanceId)
print "Instance: Started " + template + " Instance: " +str(instanceId) + " created by " + str(player.getName())
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 TrueFight(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, "BloodEmpires.xml", tele)
st.playSound("ItemSound.quest_middle")
elif npcId == CHEST :
npc.decayMe()
tele = PyObject()
tele.x = 82200
tele.y = 148347
tele.z = -3467
exitInstance(player,tele)
st.giveItems(ADENA,27500000)
st.giveItems(STONE,2)
st.giveItems(SCROLL,2)
st.playSound("ItemSound.quest_finish")
player.sendPacket(ExShowScreenMessage("Solo Instance Event (84+): 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, Fight or Die!!!"))
st.giveItems(E_APIGA,2)
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, Fight or Die!!!"))
st.giveItems(E_APIGA,2)
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,3)
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(), "-beep-!-beep-!-beep-!!!... Defeated... How!???"))
player.sendPacket(ExShowScreenMessage("Congratulations Adventurer! You Have Defeated Demonic Lord Naglfar.", 12000))
st.playSound("ItemSound.quest_fanfare_2")
st.giveItems(E_APIGA,6)
newNpc = self.addSpawn(CHEST,-242754,219982,-9985,306,False,0,False,npc.instanceId)
return
QUEST = BloodEmpires(-1, qn, "BloodEmpires")
QUEST.addStartNpc(65051)
QUEST.addTalkId(65051)
QUEST.addTalkId(65052)
QUEST.addKillId(65053)
QUEST.addKillId(65056)
QUEST.addKillId(65054)
QUEST.addKillId(65054)
and I caused the error below
Error on: C:\Users\Jimmat0s\Desktop\sever1\gameserver\data\scripts\instances\BloodEmpires\__init__.py.error.log
Line: -1 - Column: -1
Traceback (innermost last):
File "__init__.py", line 189, in ?
NameError: BloodEmpires
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.
just with this extender that I have shared it is not possible to start with c4 client, you have to make some changes to the extender and it works with c4 client perfectly.
regarding the updates in this last revision
🔹dll is not packaged with vmprotect
New custom zone types have been added:
🔹 NO_NOBLESS
begin MinX=84638 MaxX=92616 MinY=-87170 MaxY=-82018 MinZ=-6000 MaxZ=0 Type=NO_NOBLESS KickOutPos=83007/148057/-3464 end
▶️ This zone checks if the character is noble.
If it does not meet the condition, it will be automatically kicked to the indicated position (KickOutPos).
🔹 CUSTOM_SPAWN_ZONE
begin MinX=77275 MaxX=85704 MinY=10122 MaxY=18066 MinZ=-8000 MaxZ=5000 Type=CUSTOM_SPAWN_ZONE OutPos=83007/148057/-3464 Spawns={{82984/18066/-5256}};{{79275/15147/-5248}};{{82922/14263/-5256}};{{83704/10122/-5288}} end
▶️ This zone allows characters, upon death, to respawn with full buff, CP, HP and MP if they press “Fixed”.
They will only be able to revive in one of the positions defined in Spawns.
🔧 Both zones are fully configurable from territorydata.txt
🔧 Development Repository (SVN)
GX-EXT supports open, collaborative, and professional development. That’s why we provide access to our public SVN repository where you can:
✅ Compile your own version of the project
✅ Optimize and extend its features
✅ Learn from real production-quality source code
🔒 Delayed access: The repository is always 2 months behind the latest commercial release to prevent unauthorized reselling.
🔗 SVN URL: https://svn.l2servers.com.ar/!/#GX-EXT_INTERLUDE
Username: gx
Password: gx
You can use tools like TortoiseSVN to download and work with the code.
Could you tell me what changed in this update?
more one question:
Is it possible to log in through the c4 client instead of interlude? That would be great
Question
kokkinidisjim
I spent the following script in freya server
and I caused the error below
plz help me...
5 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.