# Engine written by Advi # Data input NewAge (if u have questions about why some SA's are on the list and some aren't -> C3 changes 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 import ItemTable ############################## Feel Free to add more Weapons ##########################################################################################################3 # Weapon enhancement definition WeaponID:[Icon, [Enhancement, newWeaponID, CrystalID, MaterialID, MaterialQuant], ...] EnhanceList={ #Bows' 288:["weapon_carnium_bow_i01", [["Light", 5608, 5577, 2133, 147], ["Critical Bleed", 5609, 5578, 2133, 147], ["Mana Up", 5610, 5579, 2133, 147]]], 289:["weapon_soul_bow_i01", [["Cheap Shot", 5611, 5580, 2133, 147], ["Quick Recovery", 5612, 5581, 2133, 147], ["Critical Poison", 5613, 5582, 2133, 147]]], # Swords' 150:["weapon_elemental_sword_i01", [["Magic Power", 5638, 5577, 2133, 147], ["Magic Paralyze", 5639, 5578, 2133, 147], ["Empower", 5640, 5579, 2133, 147]]], 80:["weapon_tallum_blade_i01", [["Critical Poison", 5635, 5577, 2133, 147], ["Haste", 5636, 5578, 2133, 147], ["Anger", 5637, 5579, 2133, 147]]], 151:["weapon_sword_of_miracle_i01", [["Magic Power", 5641, 5580, 2133, 147], ["Magic Silence", 5642, 5581, 2133, 147], ["Acumen", 5643, 5582, 2133, 147]]], 2500:["weapon_dark_legions_edge_i01", [["Critical Damage", 5647, 5580, 2133, 147], ["Health", 5648, 5581, 2133, 147], ["Rsk. Focus", 5649, 5582, 2133, 147]]], 81:["weapon_dragon_slayer_i01", [["Health", 5644, 5580, 2133, 147], ["Critical Bleed", 5645, 5581, 2133, 147], ["Critical Drain", 5646, 5582, 2133, 147]]], # Blunts' 2504:["weapon_meteor_shower_i01", [["Focus", 5599, 5577, 2133, 147], ["Critical Bleed", 5600, 5578, 2133, 147], ["Rsk. Haste", 5601, 5579, 2133, 147]]], 212:["weapon_dasparions_staff_i01", [["Mana Up", 5596, 5577, 2133, 147], ["Conversion", 5597, 5578, 2133, 147], ["Acumen", 5598, 5579, 2133, 147]]], 213:["weapon_worldtrees_branch_i01", [["Conversion", 5605, 5580, 2133, 147], ["Magic Damage", 5606, 5581, 2133, 147], ["Acumen", 5607, 5582, 2133, 147]]], 164:["weapon_elysian_i01", [["Health", 5602, 5580, 2133, 147], ["Anger", 5603, 5581, 2133, 147], ["Critical Drain", 5604, 5582, 2133, 147]]], # Dagger' 235:["weapon_bloody_orchid_i01", [["Focus", 5614, 5577, 2133, 147], ["Back Blow", 5615, 5578, 2133, 147], ["Critical Bleed", 5616, 5579, 2133, 147]]], 236:["weapon_soul_separator_i01", [["Guidance", 5617, 5580, 2133, 147], ["Critical Damage", 5618, 5581, 2133, 147], ["Rsk. Haste", 5619, 5582, 2133, 147]]], # Poleaxe' 98:["weapon_halbard_i01", [["Haste", 5626, 5577, 2133, 147], ["Critical Stun", 5627, 5578, 2133, 147], ["Wide Blow", 5628, 5579, 2133, 147]]], 305:["weapon_tallum_glaive_i01", [["Guidance", 5632, 5580, 2133, 147], ["Health", 5633, 5581, 2133, 147], ["Wide Blow", 5634, 5582, 2133, 147]]], # Fist' 269:["weapon_blood_tornado_i01", [["Haste", 5620, 5577, 2133, 147], ["Focus", 5621, 5578, 2133, 147], ["Anger", 5622, 5579, 2133, 147]]], 270:["weapon_dragon_grinder_i01", [["Rsk. Evasion", 5623, 5580, 2133, 147], ["Guidance", 5624, 5581, 2133, 147], ["Health", 5625, 5582, 2133, 147]]], } ############################################################## 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 in range(2131, 2134): return "Gemstone " + chr(ord('A') + 2133 - MaterialID) Stage = "" if MaterialID in range(2157, 2180): Stage = "11" if MaterialID in range(2160, 2183): Stage = "12" if MaterialID in [5557, 5580]: return "Red Soul Crystal - Stage " + Stage if MaterialID in [5558, 5581]: return "Green Soul Crystal - Stage " + Stage if MaterialID in [5559, 5582]: return "Blue Soul Crystal - Stage " + Stage return "Unknown material" def getMaterialIcon(MaterialID): if MaterialID in range(2131, 2134): return "etc_crystal_ball_green_i00" if MaterialID in [5557, 5580]: return "etc_crystal_red_i00" if MaterialID in [5558, 5581]: return "etc_crystal_green_i00" if MaterialID in [5559, 5582]: return "etc_crystal_blue_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 a weapon 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, WeaponID, CrystalID, MaterialID, MaterialQuant in Enhancements: htmltext += "\n\n" \ "\n\n" \ "
" + getItemName(Item) + ": " + Name + "
Enhance
\n" EnhancID += 1 if htmltext == "": htmltext = "You have no enhancable weapon 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, WeaponID, CrystalID, MaterialID, MaterialQuant = Enhancements[EnhancID] htmltext = st.showHtmlFile("2.htm") return htmltext.replace("", getItemName(Item) + ": " + Name)\ .replace("", Icon)\ .replace("", getMaterialName(CrystalID))\ .replace("", getMaterialIcon(CrystalID))\ .replace("", getMaterialName(MaterialID))\ .replace("", getMaterialIcon(MaterialID))\ .replace("", str(MaterialQuant))\ .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, WeaponID, CrystalID, MaterialID, MaterialQuant = Enhancements[EnhancID] if st.getQuestItemsCount(CrystalID) >= 1 and st.getQuestItemsCount(MaterialID) >= MaterialQuant : EnchantLevel = Item.getEnchantLevel() st.getPlayer().getInventory().destroyItem(ObjectID, 1) NewItem = ItemTable.getInstance().createItem(WeaponID) NewItem.setEnchantLevel(EnchantLevel) st.getPlayer().getInventory().addItem(NewItem) st.takeItems(CrystalID, 1) st.takeItems(MaterialID, MaterialQuant) 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(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,st): npcId = npc.getNpcId() htmltext = "I have nothing to say to you." st.set("cond","0") st.setState(STARTED) return "1.htm" QUEST = Quest(1007,"1007_enhance_mammon","Blacksmith") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) # init all npc to the correct stats for npcId in [8126]: QUEST.addStartNpc(npcId) STARTED.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 blacksmith data: 1007_enhance_mammon"