# Written by Vice & Izzy
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.datatables import ItemTable
qn = "1006_armor_enchanter"
SMITHS = [1006]
############################## Feel Free to add more Armors ##########################################################################################################3
# Armor enhancement definition ArmorID:[Icon, [Enhancement, newArmorID, ArmorToken, MaterialID, MaterialQuant, Ancient Adena], ...]
EnhanceList={
9416:["xxxxx_xxxxx_i01", [["Dynasty Breast Plate - Shield Master", 9417,9991,0, 0,25000000],["Dynasty Breast Plate - Weapon Master", 9418,99991,0, 0,25000000],["Dynasty Breast Plate - Force Master", 9419,99991,0, 0,25000000],["Dynasty Breast Plate - Bard", 9420,99991,0, 0,25000000]]],
}
############################################################## DO NOT MODIFY BELOW THIS LINE #####################################################################################
def getItemName(Item):
ItemName = Item.getItem().getName()
if Item.getEnchantLevel() > 0:
ItemName = "+" + str(Item.getEnchantLevel()) + " " + ItemName
return ItemName
def getMaterialName(MaterialID):
if MaterialID == 99991 :
return "xxxxx_xxxxx_i01"
return "Unknown material"
def getMaterialIcon(MaterialID):
if MaterialID == 99991 :
return "xxxxxx_i00"
return "etc_unknown_material_i00"
# Main Code
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent (self,event,st) :
htmltext = event
# Creates a List to chose an armor
if event == "1":
htmltext = ""
for Item in st.getPlayer().getInventory().getItems():
if Item.getItemId() in EnhanceList and not Item.isEquipped():
Icon, Enhancements = EnhanceList[Item.getItemId()]
EnhancID = 0
for Name, ArmorID, ArmorToken, MaterialID, MaterialQuant, Adena in Enhancements:
htmltext += "
\n | \n" \
" | \n
"
EnhancID += 1
if htmltext == "":
htmltext = "| You have no enhancable armor in your inventory |
"
htmltext = "\nList:\n\n\n
"
return htmltext
# shows you how much materials you need to enhance, ok button to go forward, too
elif event.startswith("2_"):
reqEnh = event.replace("2_", "").split(".")
ObjectID = int(reqEnh[0])
EnhancID = int(reqEnh[1])
Item = st.getPlayer().getInventory().getItemByObjectId(ObjectID)
if Item.getItemId() in EnhanceList:
Icon, Enhancements = EnhanceList[Item.getItemId()]
Name, ArmorID, ArmorToken, MaterialID, MaterialQuant, Adena = Enhancements[EnhancID]
htmltext = st.showHtmlFile("2.htm")
return htmltext.replace("", getItemName(Item) + ": " + Name)\
.replace("", Icon)\
.replace("", getMaterialName(ArmorToken))\
.replace("", getMaterialIcon(ArmorToken))\
.replace("", getMaterialName(MaterialID))\
.replace("", getMaterialIcon(MaterialID))\
.replace("", str(MaterialQuant))\
.replace("", str(Adena))\
.replace("", "3_" + str(Item.getObjectId()) + "." + str(EnhancID))
# this handels the whole enhance stuff with objectIds, not ItemIds... no html shows up.. just work and socket return
elif event.startswith("3_"):
reqEnh = event.replace("3_", "").split(".")
ObjectID = int(reqEnh[0])
EnhancID = int(reqEnh[1])
Item = st.getPlayer().getInventory().getItemByObjectId(ObjectID)
if Item.getItemId() in EnhanceList:
Icon, Enhancements = EnhanceList[Item.getItemId()]
Name, ArmorID, ArmorToken, MaterialID, MaterialQuant, Adena = Enhancements[EnhancID]
if st.getQuestItemsCount(ArmorToken) >= 1 and st.getQuestItemsCount(MaterialID) >= MaterialQuant and st.getQuestItemsCount(57) >= Adena :
EnchantLevel = Item.getEnchantLevel()
st.getPlayer().destroyItem("enhance_1007", ObjectID, 1, st.getPlayer(), 0)
NewItem = ItemTable.getInstance().createItem("enhance", ArmorID, 1, st.getPlayer())
NewItem.setEnchantLevel(EnchantLevel)
st.getPlayer().addItem("enhance", NewItem, st.getPlayer(), 0)
st.takeItems(MaterialID, MaterialQuant)
st.takeItems(ArmorToken, 1)
st.takeItems(5575,Adena)
htmltext = "Item has been succesfully enhanced!"
else :
htmltext = "You do not have enough materials."
# if event is 0, or has a bug... trade is canceled
else :
htmltext = "Trade has been cancelled."
st.setState(State.COMPLETED)
st.exitQuest(1)
return htmltext
# this just return new html, if the player can talk with this npc about that enhance stuff
def onTalk (self,npc,player):
htmltext = "I have nothing to say to you."
st = player.getQuestState(qn)
if not st : return htmltext
npcId = npc.getNpcId()
st.set("cond","0")
st.setState(State.STARTED)
return "1.htm"
QUEST = Quest(1006,qn,"custom")
# init all npc to the correct stats
for npcId in SMITHS:
QUEST.addStartNpc(npcId)
QUEST.addTalkId(npcId)
# always at the end, then it shows only up if anything is correct in the code.. no jython error.. because we cant check jython errors with idle
print "importing custom: 1006: armor_enchanter"