# Engine written by Advi (and what a lovely engine it is ^^) # changes to Upgrade weapon for AA by: Morrow/Worrom # chopped to retail by DrLecter 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 exchangeable definition WeaponID:[Name, Icon]] ExchangeList={ # Bows D grade 274:["Strengthened Bow", "weapon_strengthening_bow_i0"], 275:["Long Bow", "weapon_strengthening_bow_i0"], 276:["Elven Bow", "weapon_elven_bow_i0"], 277:["Dark Elven Bow", "weapon_dark_elven_bow_i0"], 278:["Gastraphetes", "weapon_gastraphetes_i0"], 279:["Strengthened Long Bow", "weapon_strengthening_long_bow_i0"], 280:["Light Crossbow", "weapon_cyclone_bow_i0"], # Bows C grade 281:["Crystallized Ice Bow", "weapon_crystallized_ice_bow_i0"], 282:["Elemental Bow", "weapon_elemental_bow_i0"], 283:["Akat Long Bow", "weapon_akat_long_bow_i0"], 285:["Noble Elven Bow", "weapon_noble_elven_bow_i0"], 286:["Eminence Bow", "weapon_eminence_bow_i0"], # Swords D grade 69:["Bastard Sword", "weapon_bastard_sword_i0"], 70:["Claymore", "weapon_claymore_i0"], 83:["Sword of Magic", "weapon_sword_of_magic_i0"], 123:["Saber", "weapon_saber_i0"], 124:["Two-Handed Sword", "weapon_two_handed_sword_i0"], 125:["Spinebone Sword", "weapon_spinebone_sword_i0"], 126:["Artisan's Sword", "weapon_artisans_sword_i0"], 127:["Crimson Sword", "weapon_crimson_sword_i0"], 128:["Knight's Sword", "weapon_knights_sword_i0"], 129:["Sword of Revolution", "weapon_sword_of_revolution_i0"], 130:["Elven Sword", "weapon_elven_sword_i0"], 143:["Sword of Mystic", "weapon_sword_of_mystic_i0"], 144:["Sword of Occult", "weapon_sword_of_occult_i0"], 2499:["Elven Long Sword", "weapon_elven_long_sword_i0"], 5285:["Heavy Sword", "weapon_heavy_sword_i0"], # Swords C grade 71:["Flamberge", "weapon_flamberge_i0"], 72:["Stormbringer", "weapon_stormbringer_i0"], 73:["Shamshir", "weapon_shamshir_i0"], 74:["Katana", "weapon_katana_i0"], 75:["Caliburs", "weapon_caliburs_i0"], 76:["Sword of Delusion", "weapon_sword_of_delusion_i0"], 77: ["Tsurugi", "weapon_tsurugi_i0"], 84:["Homunkulus's Sword", "weapon_homunkuluss_sword_i0"], 131:["Spirit Sword", "weapon_spirits_sword_i0"], 132:["Sword of Limit", "weapon_sword_of_limit_i0"], 133:["Raid Sword", "weapon_raid_sword_i0"], 134:["Sword of Nightmare", "weapon_sword_of_nightmare_i0"], 135:["Samurai Longsword", "weapon_samurai_longsword_i0"], 145:["Sword of Whispering Death", "weapon_deathbreath_sword_i0"], 5286:["Berserker Blade", "weapon_berserker_blade_i0"], # Blunts D grade 86:["Tomahawk", "weapon_tomahawk_i0"], 88:["Morning Star", "weapon_morning_star_i0"], 90:["Goat Head Staff", "weapon_goathead_staff_i0"], 156:["Hand Axe", "weapon_hand_axe_i0"], 157:["Spiked Club", "weapon_spike_club_i0"], 158:["Tarbar", "weapon_tarbar_i0"], 159:["Bonebreaker", "weapon_bonebreaker_i0"], 166:["Heavy Mace", "weapon_heavy_mace_i0"], 167:["Scalpel", "weapon_scalpel_i0"], 168:["Work Hammer", "weapon_work_hammer_i0"], 169:["Skull Breaker", "weapon_skull_breaker_i0"], 172:["Heavy Bone Club", "weapon_heavy_bone_club_i0"], 178:["Bone Staff", "weapon_apprentices_staff_i0"], 179:["Mace of Prayer", "weapon_mace_of_prayer_i0"], 180:["Mace of Judgment", "weapon_mace_of_judgment_i0"], 181:["Mace of Miracle", "weapon_mace_of_miracle_i0"], 182:["Doom Hammer", "weapon_doom_hammer_i0"], 183:["Mystic Staff", "weapon_apprentices_staff_i0"], 184:["Conjuror's Staff", "weapon_conjure_staff_i0"], 185:["Staff of Mana", "weapon_staff_of_mana_i0"], 186:["Staff of Magic", "weapon_staff_of_magicpower_i0"], 187:["Atuba Hammer", "weapon_atuba_hammer_i0"], 188:["Ghost Staff", "weapon_goathead_staff_i0"], 189:["Staff of Life", "weapon_life_stick_i0"], 190:["Atuba Mace", "weapon_atuba_mace_i0"], # Blunts C grade 89:["Big Hammer", "weapon_big_hammer_i0"], 160:["Battle Axe", "weapon_battle_axe_i0"], 161:["Silver Axe", "weapon_war_pick_i0"], 162:["War Axe", "weapon_war_axe_i0"], 173:["Skull Graver", "weapon_skull_graver_i0"], 174:["Nirvana Axe", "weapon_nirvana_axe_i0"], 191:["Heavy Doom Hammer", "weapon_heavy_doom_hammer_i0"], 192:["Crystal Staff", "weapon_crystal_staff_i0"], 193:["Stick of Faith", "weapon_stick_of_faith_i0"], 194:["Heavy Doom Axe", "weapon_heavy_doom_axe_i0"], 195:["Cursed Staff", "weapon_cursed_staff_i0"], 196:["Stick of Eternity", "weapon_stick_of_eternity_i0"], 197:["Paradia Staff", "weapon_paradia_staff_i0"], 198:["Inferno Staff", "weapon_inferno_staff_i0"], 199:["Paagrio Hammer", "weapon_paagrio_hammer_i0"], 200:["Sage's Staff", "weapon_sages_staff_i0"], 201:["Club of Nature", "weapon_club_of_nature_i0"], 202:["Mace of The Underworld", "weapon_mace_of_underworld_i0"], 203:["Paagrio Axe", "weapon_paagrio_axe_i0"], 204:["Deadman's Staff", "weapon_deadmans_staff_i0"], 205:["Ghoul's Staff", "weapon_ghouls_staff_i0"], 206:["Demon's Staff", "weapon_demons_staff_i0"], 2502:["Dwarven War Hammer", "weapon_dwarven_warhammer_i0"], 2503:["Yaksa Mace", "weapon_yaksa_mace_i0"], # Pole D grade 93:["Winged Spear", "weapon_winged_spear_i0"], 291:["Trident", "weapon_trident_i0"], 292:["Pike", "weapon_long_spear_i0"], 293:["War Hammer", "weapon_war_hammer_i0"], 294:["War Pick", "weapon_hammer_in_flames_i0"], 295:["Dwarven Trident", "weapon_trident_i0"], 296:["Dwarven Pike", "weapon_winged_spear_i0"], 297:["Glaive", "weapon_glaive_i0"], # Pole C grade 94:["Bec de Corbin", "weapon_bech_de_corbin_i0"], 95:["Poleaxe", "weapon_poleaxe_i0"], 96:["Scythe", "weapon_scythe_i0"], 298:["Orcish Glaive", "weapon_orcish_glaive_i0"], 299:["Orcish Poleaxe", "weapon_orcish_poleaxe_i0"], 301:["Scorpion", "weapon_scorpion_i0"], 302:["Body Slasher", "weapon_body_slasher_i0"], 303:["Widow Maker", "weapon_widow_maker_i0"], # Dagger D grade 220:["Crafted Dagger", "weapon_handiwork_dagger_i0"], 221:["Assassin Knife", "weapon_assassin_knife_i0"], 222:["Poniard Dagger", "weapon_dirk_i0"], 223:["Kukuri", "weapon_kukuri_i0"], 224:["Maingauche", "weapon_maingauche_i0"], 225:["Mithril Dagger", "weapon_mithril_dagger_i0"], 238:["Dagger of Mana", "weapon_dagger_of_mana_i0"], 239:["Mystic Knife", "weapon_mystic_knife_i0"], 240:["Conjurer's Knife", "weapon_conjure_knife_i0"], 241:["Shillien Knife", "weapon_conjure_knife_i0"], 1660:["Cursed Maingauche", "weapon_maingauche_i0"], # Dagger C 226:["Cursed Dagger", "weapon_cursed_dagger_i0"], 227:["Stiletto", "weapon_stiletto_i0"], 228:["Crystal Dagger", "weapon_crystal_dagger_i0"], 230:["Wolverine Needle", "weapon_cursed_dagger_i0"], 231:["Grace Dagger", "weapon_grace_dagger_i0"], 232:["Dark Elven Dagger", "weapon_darkelven_dagger_i0"], 233:["Dark Screamer", "weapon_dark_screamer_i0"], 242:["Soulfire Dirk", "weapon_dagger_of_magicflame_i0"], # Fist D grade 258:["Bagh-Nakh", "weapon_baghnakh_i0"], 259:["Single-Edged Jamadhr", "weapon_baghnakh_i0"], 260:["Triple-Edged Jamadhr", "weapon_baghnakh_i0"], 261:["Bich'Hwa", "weapon_bichhwa_i0"], 262:["Scallop Jamadhr", "weapon_scallop_jamadhr_i0"], # Fist C grade 263:["Chakram", "weapon_chakram_i0"], 265:["Fist Blade", "weapon_fist_blade_i0"], 266:["Great Pata", "weapon_great_pata_i0"], 4233:["Knuckle Duster", "weapon_knuckle_dust_i0"], # Etc D grade 101:["Scroll of Wisdom", "weapon_scroll_of_wisdom_i0"], 312:["Branch of Life", "weapon_apprentices_spellbook_i0"], 313:["Temptation of Abyss", "weapon_apprentices_spellbook_i0"], 314:["Proof of Revenge", "weapon_apprentices_spellbook_i0"], 315:["Divine Tome", "weapon_divine_tome_i0"], 316:["Blood of Saints", "weapon_blood_of_saints_i0"], 317:["Tome of Blood", "weapon_blood_of_saints_i0"], 318:["Crucifix of Blood", "weapon_crucifix_of_blood_i0"], 319:["Eye of Infinity", "weapon_apprentices_spellbook_i0"], 320:["Blue Crystal Skull", "weapon_apprentices_spellbook_i0"], 321:["Demon Fangs", "weapon_demon_fangs_i0"], 322:["Vajra Wands", "weapon_apprentices_spellbook_i0"], 323:["Ancient Reagent", "weapon_apprentices_spellbook_i0"], # Etc C grade 324:["Tears of Fairy", "weapon_apprentices_spellbook_i0"], 325:["Horn of Glory", "weapon_horn_of_glory_i0"], 326:["Heathen's Book", "weapon_heathens_book_i0"], 327:["Hex Doll", "weapon_apprentices_spellbook_i0"], 328:["Candle of Wisdom", "weapon_apprentices_spellbook_i0"], 329:["Blessed Branch", "weapon_apprentices_spellbook_i0"], 330:["Phoenix Feather", "weapon_apprentices_spellbook_i0"], 331:["Cerberus Eye", "weapon_apprentices_spellbook_i0"], 332:["Scroll of Destruction", "weapon_apprentices_spellbook_i0"], 333:["Claws of Black Dragon", "weapon_apprentices_spellbook_i0"], 334:["Three Eyed Crow's Feather", "weapon_apprentices_spellbook_i0"], #Dual D grade 2516:["Saber*Saber", "weapon_dual_sword_i0"], 2517:["Saber*Bastard Sword", "weapon_dual_sword_i0"], 2518:["Saber*Spinebone Sword", "weapon_dual_sword_i0"], 2519:["Saber*Artisan's Sword", "weapon_dual_sword_i0"], 2520:["Saber*Knight's Sword", "weapon_dual_sword_i0"], 2521:["Saber*Crimson Sword", "weapon_dual_sword_i0"], 2522:["Saber*Elven Sword", "weapon_dual_sword_i0"], 2525:["Bastard Sword*Bastard Sword", "weapon_dual_sword_i0"], 2526:["Bastard Sword*Spinebone Sword", "weapon_dual_sword_i0"], 2527:["Bastard Sword*Artisan's Sword", "weapon_dual_sword_i0"], 2528:["Bastard Sword*Knight's Sword", "weapon_dual_sword_i0"], 2529:["Bastard Sword*Crimson Sword", "weapon_dual_sword_i0"], 2530:["Bastard Sword*Elven Sword", "weapon_dual_sword_i0"], 2533:["Spinebone Sword*Spinebone Sword", "weapon_dual_sword_i0"], 2534:["Spinebone Sword*Artisan's Sword", "weapon_dual_sword_i0"], 2535:["Spinebone Sword*Knight's Sword", "weapon_dual_sword_i0"], 2536:["Spinebone Sword*Crimson Sword", "weapon_dual_sword_i0"], 2537:["Spinebone Sword*Elven Sword", "weapon_dual_sword_i0"], 2540:["Artisan's Sword*Artisan's Sword", "weapon_dual_sword_i0"], 2541:["Artisan's Sword*Knight's Sword", "weapon_dual_sword_i0"], 2542:["Artisan's Sword*Crimson Sword", "weapon_dual_sword_i0"], 2543:["Artisan's Sword*Elven Sword", "weapon_dual_sword_i0"], 2546:["Knight's Sword*Knight's Sword", "weapon_dual_sword_i0"], 2547:["Knight's Sword*Crimson Sword", "weapon_dual_sword_i0"], 2548:["Knight's Sword*Elven Sword", "weapon_dual_sword_i0"], #Dual C grade 2523:["Saber*Sword of Revolution", "weapon_dual_sword_i0"], 2524:["Saber*Elven Long Sword", "weapon_dual_sword_i0"], 2531:["Bastard Sword*Sword of Revolution", "weapon_dual_sword_i0"], 2532:["Bastard Sword*Elven Long Sword", "weapon_dual_sword_i0"], 2538:["Spinebone Sword*Sword of Revolution", "weapon_dual_sword_i0"], 2539:["Spinebone Sword*Elven Long Sword", "weapon_dual_sword_i0"], 2544:["Artisan's Sword*Sword of Revolution", "weapon_dual_sword_i0"], 2545:["Artisan's Sword*Elven Long Sword", "weapon_dual_sword_i0"], 2549:["Knight's Sword*Sword of Revolution", "weapon_dual_sword_i0"], 2550:["Knight's Sword*Elven Long Sword", "weapon_dual_sword_i0"], 2551:["Crimson Sword*Crimson Sword", "weapon_dual_sword_i0"], 2552:["Crimson Sword*Elven Sword", "weapon_dual_sword_i0"], 2553:["Crimson Sword*Sword of Revolution", "weapon_dual_sword_i0"], 2554:["Crimson Sword*Elven Long Sword", "weapon_dual_sword_i0"], 2555:["Elven Sword*Elven Sword", "weapon_dual_sword_i0"], 2556:["Elven Sword*Sword Of Revolution", "weapon_dual_sword_i0"], 2557:["Elven Sword*Elven Long Sword", "weapon_dual_sword_i0"], 2558:["Sword of Revolution*Sword of Revolution", "weapon_dual_sword_i0"], 2559:["Sword of Revolution*Elven Long Sword", "weapon_dual_sword_i0"], 2560:["Elven Long Sword*Elven Long Sword", "weapon_dual_sword_i0"], 2561:["Stormbringer*Stormbringer", "weapon_dual_sword_i0"], 2562:["Stormbringer*Shamshir", "weapon_dual_sword_i0"], 2563:["Stormbringer*Katana", "weapon_dual_sword_i0"], 2564:["Stormbringer*Spirit Sword", "weapon_dual_sword_i0"], 2565:["Stormbringer*Raid Sword", "weapon_dual_sword_i0"], 2572:["Shamshir*Shamshir", "weapon_dual_sword_i0"], 2573:["Shamshir*Katana", "weapon_dual_sword_i0"], 2574:["Shamshir*Spirit Sword", "weapon_dual_sword_i0"], 2575:["Shamshir*Raid Sword", "weapon_dual_sword_i0"], 2582:["Katana*Katana", "weapon_dual_sword_i0"], 2583:["Katana*Spirit Sword", "weapon_dual_sword_i0"], 2584:["Katana*Raid Sword", "weapon_dual_sword_i0"], 2591:["Spirit Sword*Spirit Sword", "weapon_dual_sword_i0"], 2592:["Spirit Sword*Raid Sword", "weapon_dual_sword_i0"], 2599:["Raid Sword*Raid Sword", "weapon_dual_sword_i0"], } ############################################################## 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 getItemIcon(ItemName): Icon = "" Name = "" for TestID in ExchangeList: Name, IconTemp = ExchangeList[TestID] if ItemName.startswith(Name): Icon = IconTemp break if Icon != "": if ItemName == Name: Icon += "0" else: Icon += "1" return Icon def getSystemIcon(Item): icon="" return icon # Main Code class Quest (JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def onEvent (self,event,st) : htmltext = event # shows the weapons available for exchange that you can trade from if event.startswith("1_"): for ItemInst in st.getPlayer().getInventory().getItems(): Item = ItemInst.getItem() if Item.getType1() != 0 or Item.getType2() != 0 or ItemInst.isEquipped(): continue if Item.getItemGrade() == 1 or Item.getItemGrade() == 2 : htmltext += "" \ "" \ "
" + getItemName(ItemInst) + "
Upgrade
" if htmltext == "": htmltext = "You have no weapon in your inventory that can be upgraded." htmltext = "Choose the weapon you want upgrade:
List:" + htmltext + "

" return htmltext # shows you the available weapons for exchange that you can trade for elif event.startswith("2_"): reqExch = event.replace("2_", "") ObjectID = int(reqExch) ItemInst = st.getPlayer().getInventory().getItemByObjectId(ObjectID) htmltext = "" Item = ItemInst.getItem() if Item.getType1() != 0 or Item.getType2() != 0 or ItemInst.isEquipped(): return htmltext if Item.getItemGrade() != 1 and Item.getItemGrade() != 2: return htmltext if Item.getCrystalCount() == 743 and (Item.getItemType().toString() != "Dual Sword"): WeaponCrystals = 1170 WeaponGrade = 1 elif Item.getCrystalCount() == 1170 and (Item.getItemType().toString() != "Dual Sword"): WeaponCrystals = 1758 WeaponGrade = 1 elif Item.getCrystalCount() == 1758 and (Item.getItemType().toString() != "Dual Sword"): WeaponCrystals = 2545 WeaponGrade = 1 elif Item.getCrystalCount() == 2545 and (Item.getItemType().toString() != "Dual Sword"): WeaponCrystals = 3272 WeaponGrade = 1 elif Item.getCrystalCount() == 3272 and (Item.getItemType().toString() != "Dual Sword"): WeaponCrystals = 916 WeaponGrade = 2 elif Item.getCrystalCount() == 916 and (Item.getItemType().toString() != "Dual Sword"): WeaponCrystals = 1148 WeaponGrade = 2 elif Item.getCrystalCount() == 1148 and (Item.getItemType().toString() != "Dual Sword"): WeaponCrystals = 1720 WeaponGrade = 2 elif Item.getCrystalCount() == 1720 and (Item.getItemType().toString() != "Dual Sword"): WeaponCrystals = 2452 WeaponGrade = 2 elif Item.getCrystalCount() == 1594 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 1927 WeaponGrade = 1 elif Item.getCrystalCount() == 1927 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 2545 WeaponGrade = 1 elif Item.getCrystalCount() == 2545 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 3018 WeaponGrade = 1 elif Item.getCrystalCount() == 3018 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 784 WeaponGrade = 2 elif Item.getCrystalCount() == 784 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 848 WeaponGrade = 2 elif Item.getCrystalCount() == 848 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 988 WeaponGrade = 2 elif Item.getCrystalCount() == 916 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 988 WeaponGrade = 2 elif Item.getCrystalCount() == 988 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 1148 WeaponGrade = 2 elif Item.getCrystalCount() == 1148 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 1336 WeaponGrade = 2 elif Item.getCrystalCount() == 1336 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 1528 WeaponGrade = 2 elif Item.getCrystalCount() == 1528 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 1912 WeaponGrade = 2 elif Item.getCrystalCount() == 1912 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 2112 WeaponGrade = 2 elif Item.getCrystalCount() == 2112 and (Item.getItemType().toString() == "Dual Sword"): WeaponCrystals = 2452 WeaponGrade = 2 else: htmltext = "This weapon is not suitable for exchange." return htmltext WeaponName = Item.getName() for NewItemID in ExchangeList: NewItem = ItemTable.getInstance().getTemplate(NewItemID) NewItemName = NewItem.getName() if NewItem.getItemGrade() == WeaponGrade and NewItem.getCrystalCount() == WeaponCrystals and WeaponCrystals != 1726 and Item.getItemType() == NewItem.getItemType() and not WeaponName.startswith(NewItemName): if (NewItem.getItemType().toString() == "Dual Sword") ^ (Item.getItemType().toString() == "Dual Sword"): continue htmltext += "" \ "" \ "
" + NewItemName + "
Upgrade
" if htmltext == "": htmltext = "This weapon is not suitable for upgrade." else: htmltext = "Choose the weapon you want to upgrade for:
List:" + htmltext + "

" return htmltext # displays the recipe elif event.startswith("3_"): TradeItems = event.replace("3_", "").split(".") OldItemID = int(TradeItems[0]) NewItemID = int(TradeItems[1]) OldItemInst = st.getPlayer().getInventory().getItemByObjectId(OldItemID) OldWeaponName = getItemName(OldItemInst) NewItem = ItemTable.getInstance().getTemplate(NewItemID) NewItemName = NewItem.getName() NewItemGrade= getSystemIcon(NewItem) OldItemGrade= getSystemIcon(OldItemInst.getItem()) AncientAdenaNum = str(int((NewItem.getReferencePrice()-OldItemInst.getReferencePrice())*1.2)) htmltext = st.showHtmlFile("2.htm") return htmltext.replace("", NewItemName)\ .replace("", OldWeaponName)\ .replace("", AncientAdenaNum)\ .replace("", NewItemGrade)\ .replace("", OldItemGrade)\ .replace("", getItemIcon(NewItem.getName()))\ .replace("", getItemIcon(OldItemInst.getItem().getName()))\ .replace("", "4_" + str(OldItemID) + "." + str(NewItemID) + "." + str(AncientAdenaNum)) # this handles the whole exchange stuff with objectIds... no html shows up.. just work and socket return elif event.startswith("4_"): TradeItems = event.replace("4_", "").split(".") OldItemID = int(TradeItems[0]) NewItemID = int(TradeItems[1]) OldItemInst = st.getPlayer().getInventory().getItemByObjectId(OldItemID) NewItem = ItemTable.getInstance().getTemplate(NewItemID) if NewItem.getItemGrade() == 1: NewItemGrade = "D" elif NewItem.getItemGrade() == 2: NewItemGrade = "C" AncientAdenaNum = int((NewItem.getReferencePrice()-OldItemInst.getReferencePrice())*1.2) if not OldItemInst or OldItemInst.isEquipped(): return "Player is trying to dupe!" #check to see if player has enough AA if st.getQuestItemsCount(5575) >= AncientAdenaNum: st.takeItems(5575,AncientAdenaNum) else : return "Not enough Ancient Adena!" Serial = OldItemInst.getSerial() st.getPlayer().destroyItem("exchange",OldItemID, 1, st.getPlayer(), 0) NewItem = ItemTable.getInstance().createItem("exchange:"+Serial, NewItemID, 1, st.getPlayer()) st.getPlayer().addItem("exchange", NewItem, st.getPlayer(), 0) htmltext = "Upgrade has been successfully done!" else : htmltext = "Trade has been cancelled." st.setState(COMPLETED) st.exitQuest(1) return htmltext def onTalk (self,npc,st) : npcId = npc.getNpcId() st.set("cond","0") st.setState(STARTED) return "1.htm" QUEST = Quest(1012,"1012_upgrade","Blacksmith") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(31126) STARTED.addTalkId(31126) print "importing blacksmith data: 1012_upgrade"