Jump to content
  • 0

Question

Posted

Hi all !
i have a problem i was trying to make a custom quest  i want a npc teleport to a raidboss ,when char is there i want to spawn 4 bosses 1 by one with cinematic ,so i copied and adapt sailren .py but i have a problem that i cant understand.i am getting error at line 48 "getObjectId"  the python code is below.i use l2jfrozen.

import sys
from com.l2jfrozen.gameserver.ai import CtrlIntention
from com.l2jfrozen.gameserver.managers import GrandBossManager
from com.l2jfrozen.gameserver.model.actor.position import L2CharPosition
from com.l2jfrozen.gameserver.model.quest import State
from com.l2jfrozen.gameserver.model.quest import QuestState
from com.l2jfrozen.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2jfrozen.gameserver.network.serverpackets import SocialAction
from com.l2jfrozen.gameserver.network.serverpackets import SpecialCamera
from com.l2jfrozen.util.random import Rnd
from java.lang import System

STATUE = 50000
SAILREN = 35646
VELO = 35647
PTERO = 90000
TREX = 35648

STONE = 6673

class Grandmaster (JQuest) :

 def __init__(self,id,name,descr):
   self.vlc = []
   self.ptr = []
   self.trx = []
   self.slrn = []
   JQuest.__init__(self,id,name,descr)

 def onAdvEvent (self,event,npc,player):
   if event == "start" :
     self.vlc = self.addSpawn(VELO,96452,159940,-3275,45000,False,0)
     self.startQuestTimer("camera",2000, self.vlc, player)
     self.cancelQuestTimer("start",npc,None)
   if event == "round2" :
     self.ptr = self.addSpawn(PTERO,96409,160011,-3261,45000,False,0)
     self.startQuestTimer("camera",2000, self.ptr, player)
     self.cancelQuestTimer("round2",npc,None)
   if event == "round3" :
     self.trx = self.addSpawn(TREX,96500,159998,-3275,45000,False,0)
     self.startQuestTimer("camera",2000, self.trx, player)
     self.cancelQuestTimer("round3",npc,None)
   if event == "grandmaster" :
     self.slrn = self.addSpawn(SAILREN,96403,160011,-3299,45000,False,0)
     self.startQuestTimer("camera",2000, self.slrn, player)
     self.startQuestTimer("vkrovatku",1200000, self.slrn, None)
     self.cancelQuestTimer("round4",npc,None)
   elif event == "camera" :
     player.broadcastPacket(SpecialCamera(npc.getObjectId(),400,-75,3,-150,5000))
     npc.broadcastPacket(SocialAction(npc.getObjectId(),1))
   elif event == "open" :
     self.deleteGlobalQuestVar("close")  
     self.cancelQuestTimer("open",npc,None)
   elif event == "vkrovatku" :
     npc.deleteMe()
     self.deleteGlobalQuestVar("close")
     self.cancelQuestTimer("open",npc,None)
     self.cancelQuestTimer("vkrovatku",npc,None)
   return
        
 def onTalk (self,npc,player):
   st = player.getQuestState("grandmaster")  
   npcId = npc.getNpcId()
   close = self.loadGlobalQuestVar("close")
   time = self.loadGlobalQuestVar("time")
   party = player.getParty()
   if npcId == STATUE :
     if st.getQuestItemsCount(STONE) >= 1 :
       if close == "" :
         if party:
           for player in party.getPartyMembers() :
             st.takeItems(STONE,1)
             self.saveGlobalQuestVar("close", "1")
             zone = GrandBossManager.getInstance().getZone(97235,160539,-3312)
             if zone:
               zone.allowPlayerEntry(player, 3600)
             player.teleToLocation(97235,160539,-3312)
             self.startQuestTimer("start",30000,npc,player)
             self.startQuestTimer("open",1800000,npc,None)
         else :
           return "<html><body><font color=LEVEL>Only with party...</font></body></html>"
       else :
         return "<html><body><font color=LEVEL>Some one else is inside...</font></body></html>"
     else :
       return "<html><body>You need quest item: <font color=LEVEL>Gazkh...</font></body></html>"
   return

 def onKill(self,npc,player,isPet):
   if npc == self.vlc :
     self.startQuestTimer("round2",30000,npc,player)
   if npc == self.ptr :
     self.startQuestTimer("round3",60000,npc,player)
   if npc == self.trx :
     self.startQuestTimer("grandmaster",180000,npc,player)
   if npc == self.slrn :
     self.deleteGlobalQuestVar("close")
     self.cancelQuestTimer("open",npc,None)
   return

QUEST = Grandmaster(-1,"grandmaster","ai")
CREATED = State('Start',QUEST)

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(STATUE)
QUEST.addTalkId(STATUE)
QUEST.addKillId(VELO)
QUEST.addKillId(PTERO)
QUEST.addKillId(TREX)
QUEST.addKillId(SAILREN)



2 answers to this question

Recommended Posts

  • 0
Posted (edited)

I just fastchecked, but most probably your npc is null at a line. Be sure all events "camera" refer to a real, existing object.

 

As you cancel the timer "start" inside "start", most probably references are lost time the next event is fired. All in one, as an event, it's idiot to cancel yourself (cancel got a meaning when regular behavior must be aborted, otherwise nope). And "grandmaster" cancels "round4" which isn't existing.

 

Following variables got no uses, you can simply check via npcId (since you already store the npcId and don't use the variables to despawn NPCs).

  self.vlc = []
   self.ptr = []
   self.trx = []
   self.slrn = []

"vkrovatku" timer use is probably wrong, until you want your boss to be killed before a specific time (and even if it's the case, there is no cancel of that timer anywhere except by itself - see my second paragraph -, so it will be fired anyway).

Edited by Tryskell
  • 0
Posted

I just fastchecked, but most probably your npc is null at a line. Be sure all events "camera" refer to a real, existing object.

 

As you cancel the timer "start" inside "start", most probably references are lost time the next event is fired. All in one, as an event, it's idiot to cancel yourself (cancel got a meaning when regular behavior must be aborted, otherwise nope). And "grandmaster" cancels "round4" which isn't existing.

 

Following variables got no uses, you can simply check via npcId (since you already store the npcId and don't use the variables to despawn NPCs).

  self.vlc = []
   self.ptr = []
   self.trx = []
   self.slrn = []

"vkrovatku" timer use is probably wrong, until you want your boss to be killed before a specific time (and even if it's the case, there is no cancel of that timer anywhere except by itself - see my second paragraph -, so it will be fired anyway).

problem solved thank for your help mate, someone close topic

Guest
This topic is now closed to further replies.


  • Posts

    • Looking a datapack developer for 'Essence' - needs to be good with Mobius structure,  Project is using old fork (I think base from crusader). Write Discord to PM.
    • We are not back on 2005, life in our days is harder than before, in complection with other things yes, L2 has not the same look.
    • ⚔️ L2 Nexus — Full-Stack Development for Lineage 2 Servers   One team for everything. Website, admin panel, launcher, server development, hosting, protection — built together, working together.   ━━━━━━━━━━━━━━━━━━━━━   SERVICES:   🌐 Server Website Registration, player cabinet, donate shop, statistics, voting, news. Integrated with your server — live data from game DB.   🛡️ Admin Panel (CMS) — 60 Modules Web panel for GM team: bans, kicks, item management, payments, analytics. Battle Pass, marketplace, anti-bot, churn prediction, Discord/Telegram bots.   🚀 Custom Launcher Electron launcher with delta patcher, CDN delivery, news feed, integrity check, multi-server support. Fully branded.   ⚔️ Java Development Custom modules for L2J / aCis / Lucera / L2Off (PTS). Events, NPCs, instances, balance, quests, skills — any complexity.   🛡️ Hosting & DDoS Protection Server setup, OVH Game DDoS, Cloudflare, monitoring 24/7.   ━━━━━━━━━━━━━━━━━━━━━   PRICING (Website + CMS):   Core — €1,000 (one-time) Website + player cabinet + tickets + live status. 30 days support.   Business — €2,500 (one-time) ⭐ + Donate shop, payment systems, admin panel, RBAC, analytics, bots. Custom design. 90 days priority support.   Enterprise — €5,000+ (custom) + Battle Pass, marketplace, anti-bot, churn, economy, backups, Wiki, API. Managed hosting, SLA 99.9%. 12 months support.   ━━━━━━━━━━━━━━━━━━━━━   JAVA DEVELOPMENT:   • PvP Events .............. from €200 • Custom NPCs ............. from €80 • Donate & Economy ........ from €150 • Instance Zones .......... from €300 • Balance & Skills ........ from €100 • Quests .................. from €250 • Olympiad & Sieges ....... from €200 • PTS Extenders ........... from €150 • Bug Fixes ............... from €50/hr • Custom Systems .......... from €500   ━━━━━━━━━━━━━━━━━━━━━   Platforms: L2J · aCis · Lucera · L2Off/PTS Chronicles: Interlude · High Five · Classic · Essence 📍 Live CMS demo available — message us on Telegram   Telegram: @l2nexus Website: https://l2-nexus.com
  • 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..