# Made by Vice [L2JOneo]
import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
from net.sf.l2j.gameserver.ai import CtrlIntention
from net.sf.l2j.gameserver.model import L2CharPosition
#NPC
STATUE = 32109
VELOCIRAPTOR = 22196
PTEROSAUR = 22199
TYRANNOSAURUS = 22217
SAILREN = 29065
#ITEM
GAZKH = 8784
#POSITIONS
STARTX = 27852
STARTY = -5536
STARTZ = -1983
STARTHDG = 44732
GOTOX = 27628
GOTOY = -6109
GOTOZ = -1982
GOTOHDG = 44732
#TIMERS
TIMER1 = 30000
TIMER2 = 3600000
#HTML
htmlerror = """<html><body>Stone Statue of Shilen:<br>
<br>
Shilen's protection is not with you -- go away! You are not
qualified to fight against Sailren...<br>
If you want to enter Sailren's nest, then you should find a
party leader who can fight against Sailren and join his
party. Or you can complete my quest to become a party
leader, form your own party, and then return here.<br>
</body>
</html>
"""
# Boss: sailren
def spawnMob(self,idMob) :
self.vlk = self.addSpawn(idMob,STARTX,STARTY,STARTZ,STARTHDG,False,0)
updateKnownList(self)
self.vlk.setRunning()
self.vlk.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO,self.pos)
self.vlk.setSpawn(None);
#updateKnownList(self)
def updateKnownList(self) :
self.vlk.getKnownList().getKnownPlayers().clear()
party = self.partyLeader.getParty()
if party :
for partyMember in party.getPartyMembers().toArray() :
self.vlk.getKnownList().getKnownPlayers().put(partyMember.getObjectId(), partyMember);
class sailren (JQuest):
def __init__(self,id,name,descr):
JQuest.__init__(self,id,name,descr)
self.isRaidStarted = 0
self.pos = L2CharPosition(GOTOX,GOTOY,GOTOZ,GOTOHDG);
self.vlk = None
self.partyLeader = None
def onAdvEvent (self,event,npc,player):
objId=0
if event == "sailren_timer1" :
spawnMob(self,VELOCIRAPTOR)
self.startQuestTimer("sailren_timer2",TIMER2, self.vlk,player)
elif event == "sailren_timer2" :
if self.isRaidStarted == 1 :
self.vlk.reduceCurrentHp(16660000,self.vlk)
self.isRaidStarted = 0
self.vlk = None
self.partyLeader = None
if player :
if not player.isInParty() :
st = player.getQuestState("sailren")
if st : st.exitQuest(1)
return
party = player.getParty()
if party :
for partyMember in party.getPartyMembers().toArray() :
st = partyMember.getQuestState("sailren")
if st : st.exitQuest(1)
partyMember.teleToLocation(23677,-7673,-1241)
return
def onTalk (self,npc,player):
st = player.getQuestState("sailren")
if not st : return "<html><body>You are either not carrying out your quest or don't meet the criteria.</body></html>"
npcId = npc.getNpcId()
if npcId == STATUE :
if st.getQuestItemsCount(GAZKH) < 1 :
st.exitQuest(1)
return htmlerror
if not player.isInParty() :
st.exitQuest(1)
return htmlerror
if player.getParty().getPartyLeaderOID() != player.getObjectId() :
st.exitQuest(1)
return htmlerror
if self.isRaidStarted == 1 :
st.exitQuest(1)
return "<html><body>Shilen's Stone Statue:<br>Another party is fighting with Sailren. You must wait.</body></html>"
party = player.getParty()
if party :
for partyMember in party.getPartyMembers().toArray() :
partyMember.teleToLocation(27291,-6899,-1974)
if self.isRaidStarted == 0 :
self.startQuestTimer("sailren_timer1",TIMER1, npc, player)
self.isRaidStarted = 1
st.takeItems(GAZKH,1)
self.partyLeader = player
return "<html><body>Shilen's Stone Statue:<br>Please seal the sailren by your ability.</body></html>"
def onKill (self,npc,player,isPet):
if not player.isInParty() :
return
if player.getParty().getPartyLeaderOID() != self.partyLeader.getObjectId() :
return
st = self.partyLeader.getQuestState("sailren")
if not st: return
st = player.getQuestState("sailren")
npcId = npc.getNpcId()
xx = int(player.getX())
yy = int(player.getY())
zz = int(player.getZ())
if xx >= 26095 and xx <= 28987 and yy >=-8084 and yy <= -5295 :
if npcId == VELOCIRAPTOR :
spawnMob(self,PTEROSAUR)
elif npcId == PTEROSAUR :
spawnMob(self,TYRANNOSAURUS)
elif npcId == TYRANNOSAURUS :
spawnMob(self,SAILREN)
elif npcId == SAILREN :
party = player.getParty()
if party :
for partyMember in party.getPartyMembers().toArray() :
partyMember.teleToLocation(23677,-7673,-1241)
self.isRaidStarted = 0
st.exitQuest(1)
self.vlk = None
self.partyLeader = None
return
# Quest class and state definition
QUEST = sailren(-1, "sailren", "ai")
CREATED = State('Start', QUEST)
# Quest initialization
QUEST.setInitialState(CREATED)
# Quest NPC starter initialization
QUEST.addStartNpc(STATUE)
QUEST.addTalkId(STATUE)
QUEST.addKillId(VELOCIRAPTOR)
QUEST.addKillId(PTEROSAUR)
QUEST.addKillId(TYRANNOSAURUS)
QUEST.addKillId(SAILREN)