# 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 "Armor Token" 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\n" \ "
" + getItemName(Item) + ": " + Name + "
Enhance
\n" EnhancID += 1 if htmltext == "": htmltext = "You have no enhancable armor in your inventory" htmltext = "\nList:\n\n\n" + htmltext + "
\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"