# Upgrade your Hatchling to Strider version 0.3
# by DrLecter & DraX_
# last modify by Kerberos
import sys
from java.sql import PreparedStatement
from java.sql import ResultSet
from java.sql import SQLException
from com.l2open import L2DatabaseFactory
from com.l2open.gameserver.datatables import SkillTable
from com.l2open.gameserver.model.quest import State
from com.l2open.gameserver.model.quest import QuestState
from com.l2open.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2open.gameserver.network import SystemMessageId
from com.l2open.gameserver.network.serverpackets import ItemList;
from com.l2open.gameserver.network.serverpackets import NpcSay
from com.l2open.gameserver.network.serverpackets import SystemMessage
qn = "421_LittleWingAdventures"
#Quest items
FT_LEAF = 4325
#NPCs
CRONOS = 30610
MIMYU = 30747
#kinda bugged, missing refresh, works only when player relog so far
def EvolvePet(player, item, striderControlItem) :
con = L2DatabaseFactory.getInstance().getConnection()
statement = con.prepareStatement("UPDATE items SET item_id =? WHERE object_id=? AND owner_id=?")
statement.setInt(1, striderControlItem)
statement.setInt(2, item.getObjectId())
statement.setInt(3, player.getObjectId())
statement.execute()
statement.close()
con.close()
sm1 = SystemMessage(SystemMessageId.S2_S1_DISAPPEARED)
sm1.addItemName(item.getItemId())
sm1.addNumber(1)
sm2 = SystemMessage(SystemMessageId.YOU_PICKED_UP_A_S1_S2)
sm2.addNumber(item.getEnchantLevel())
sm2.addItemName(striderControlItem)
player.sendPacket(sm1)
player.sendPacket(sm2)
player.sendPacket(ItemList(player, False))
return
class Quest (JQuest) :
def __init__(self, id, name, descr):
JQuest.__init__(self, id, name, descr)
self.questItemIds = [FT_LEAF]
self.killedTrees = []
def onAdvEvent (self, event, npc, player):
htmltext = event
st = player.getQuestState(qn)
if not st: return
if event == "30610-05.htm" :
if ((st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) == 1) :
if st.getQuestItemsCount(3500) == 1 :
item = player.getInventory().getItemByItemId(3500)
if item.getEnchantLevel() < 55 :
st.exitQuest(1)
htmltext = "30610-06.htm"
else :
st.setState(State.STARTED)
st.set("summonOid", str(item.getObjectId()))
st.set("cond", "1")
st.set("id", "1")
st.playSound("ItemSound.quest_accept")
elif st.getQuestItemsCount(3501) == 1 :
item = player.getInventory().getItemByItemId(3501)
if item.getEnchantLevel() < 55 :
st.exitQuest(1)
htmltext = "30610-06.htm"
else :
st.setState(State.STARTED)
st.set("summonOid", str(item.getObjectId()))
st.set("cond", "1")
st.set("id", "1")
st.playSound("ItemSound.quest_accept")
elif st.getQuestItemsCount(3502) == 1 :
item = player.getInventory().getItemByItemId(3502)
if item.getEnchantLevel() < 55 :
st.exitQuest(1)
htmltext = "30610-06.htm"
else :
st.setState(State.STARTED)
st.set("summonOid", str(item.getObjectId()))
st.set("cond", "1")
st.set("id", "1")
st.playSound("ItemSound.quest_accept")
else :
st.exitQuest(1)
htmltext = "30610-06.htm"
elif event == "30747-02.htm" :
summon = player.getPet()
if summon :
if summon.getControlItem().getObjectId() == st.getInt("summonOid"):
htmltext = "30747-04.htm"
else :
htmltext = "30747-03.htm"
elif event == "30747-05.htm" :
summon = player.getPet()
if summon :
if summon.getControlItem().getObjectId() == st.getInt("summonOid"):
htmltext = "30747-05.htm"
st.giveItems(FT_LEAF, 4)
st.set("cond", "2")
st.set("id", "0")
st.playSound("ItemSound.quest_middle")
else :
htmltext = "30747-06.htm"
else :
htmltext = "30747-06.htm"
return htmltext
def onTalk (self, npc, player):
htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
st = player.getQuestState(qn)
if not st: return htmltext
id = st.getState()
cond = st.getInt("cond")
npcId = npc.getNpcId()
if id == State.CREATED and npcId == CRONOS :
if player.getLevel() < 45 and (st.getQuestItemsCount(3500) or st.getQuestItemsCount(3501) or st.getQuestItemsCount(3502)) :
st.exitQuest(1)
htmltext = "30610-01.htm"
elif player.getLevel() >= 45 and ((st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) >= 2) :
st.exitQuest(1)
htmltext = "30610-02.htm"
elif player.getLevel() >= 45 and ((st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) == 1) :
if st.getQuestItemsCount(3500) == 1 :
item = player.getInventory().getItemByItemId(3500)
if item.getEnchantLevel() < 55 :
htmltext = "30610-03.htm"
else :
htmltext = "30610-04.htm"
elif st.getQuestItemsCount(3501) == 1 :
item = player.getInventory().getItemByItemId(3501)
if item.getEnchantLevel() < 55 :
htmltext = "30610-03.htm"
else :
htmltext = "30610-04.htm"
elif st.getQuestItemsCount(3502) == 1 :
item = player.getInventory().getItemByItemId(3502)
if item.getEnchantLevel() < 55 :
htmltext = "30610-03.htm"
else :
htmltext = "30610-04.htm"
elif id == State.STARTED :
if npcId == CRONOS :
htmltext = "30610-07.htm"
if npcId == MIMYU :
if st.getInt("id") == 1 :
st.set("id", "2")
htmltext = "30747-01.htm"
elif st.getInt("id") == 2 :
summon = player.getPet()
if summon :
if summon.getControlItem().getObjectId() == st.getInt("summonOid"):
htmltext = "30747-04.htm"
else :
htmltext = "30747-03.htm"
else :
htmltext = "30747-02.htm"
elif st.getInt("id") == 0 :
htmltext = "30747-07.htm"
elif st.getInt("id") > 0 and st.getInt("id") < 15 and st.getQuestItemsCount(FT_LEAF) >= 1 :
htmltext = "30747-11.htm"
elif st.getInt("id") == 15 and st.getQuestItemsCount(FT_LEAF) == 0 :
summon = player.getPet()
if summon :
if summon.getControlItem().getObjectId() == st.getInt("summonOid"):
st.set("id", "16")
htmltext = "30747-13.htm"
else :
htmltext = "30747-14.htm"
else :
htmltext = "30747-12.htm"
elif st.getInt("id") == 16:
summon = player.getPet()
if summon :
htmltext = "30747-15.htm"
elif (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) == 1 :
if st.getQuestItemsCount(3500) == 1 :
item = player.getInventory().getItemByItemId(3500)
if item.getObjectId() == st.getInt("summonOid"):
#EvolvePet(player,item,4422)
st.takeItems(3500, 1)
st.giveItems(4422, 1)
htmltext = "30747-16.htm"
st.exitQuest(1)
st.playSound("ItemSound.quest_finish")
else :
npc.setTarget(player)
skill = SkillTable.getInstance().getInfo(4167, 1)
if skill != None:
skill.getEffects(npc, player)
htmltext = "30747-18.htm"
elif st.getQuestItemsCount(3501) == 1 :
item = player.getInventory().getItemByItemId(3501)
if item.getObjectId() == st.getInt("summonOid"):
#EvolvePet(player,item,4423)
st.takeItems(3501, 1)
st.giveItems(4423, 1)
htmltext = "30747-16.htm"
st.exitQuest(1)
st.playSound("ItemSound.quest_finish")
else :
npc.setTarget(player)
skill = SkillTable.getInstance().getInfo(4167, 1)
if skill != None:
skill.getEffects(npc, player)
htmltext = "30747-18.htm"
elif st.getQuestItemsCount(3502) == 1 :
item = player.getInventory().getItemByItemId(3502)
if item.getObjectId() == st.getInt("summonOid"):
#EvolvePet(player,item,4424)
st.takeItems(3502, 1)
st.giveItems(4424, 1)
htmltext = "30747-16.htm"
st.exitQuest(1)
st.playSound("ItemSound.quest_finish")
else :
npc.setTarget(player)
skill = SkillTable.getInstance().getInfo(4167, 1)
if skill != None:
skill.getEffects(npc, player)
htmltext = "30747-18.htm"
else :
htmltext = "30747-18.htm"
elif (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) >= 2 :
htmltext = "30747-17.htm"
return htmltext
def onAttack(self, npc, player, damage, isPet, skill) :
st = player.getQuestState(qn)
if not st:
return
npcId = npc.getNpcId()
for pc, mobId, in self.killedTrees:
if pc == player and mobId == npcId:
return
if isPet and st.getInt("id") < 16:
pet = player.getPet()
if st.getRandom(100) <= 2 and st.getQuestItemsCount(FT_LEAF) >= 0:
st.takeItems(FT_LEAF, 1)
st.playSound("ItemSound.quest_middle")
npc.broadcastPacket(NpcSay(npc.getNpcId(), 0, npcId, "gives me spirit leaf...!"))
self.killedTrees.append([player, npcId])
if st.getQuestItemsCount(FT_LEAF) == 0 :
st.set("id", "15")
st.set("cond", "3")
return
# Quest class and state definition
QUEST = Quest(421, qn, "Little Wing's Big Adventures")
# Quest NPC starter initialization
QUEST.addStartNpc(CRONOS)
# Quest initialization
QUEST.addTalkId(CRONOS)
QUEST.addTalkId(MIMYU)
for i in range(27185, 27189):
QUEST.addAttackId(i)