From The Mana World

itemdbtowiki doc

You can run itemdbtowiki to generate the wiki page. The usage is:

itemdbtowiki <item_db> <items.xml> [<mob_db>] [<translation.po>] > wikipage.txt

item_db may be as a single file or folder with files like item_db_*.txt.

items.xml may include link to other xml files. For example: <include name="items/usable/_include.xml"/>

mob_db optional parameter, may be as a single file or folder. If it is not specified, then in column "Rarity" willn't show chance of drop items from monsters. Default uses the file mob_db.txt, if it does not exist then search in the directory "items" splited files mob_db_*.txt.

translation.po special parameter, which can be transmitted regardless of other parameters. For greater efficiency must change "constants for translation" and "language code"


Note:

Download client data from [git]. Copy item_db _ *.txt and mob_db _ *.txt from [server-data] in the folder "items". Then put the script in the directory "tmwa-client-data-master" and run:

itemdbtowiki > wikipage.txt

If you use translation file, put it in the directory "tmwa-client-data-master" too and run script

itemdbtowiki translation_file.po > wikipage.txt

itemdbtowiki

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#Licensed under GNU General Public License

import sys, os, datetime, subprocess, glob, codecs;
import xml.parsers.expat

health_titles = ["Image","Name (ID)","HP Bonus","SP Bonus",
                 "BUY/Sell","Weight","Description", "Rarity"]
status_titles = ["Image","Name (ID)","BUY/Sell","Weight",
                 "Description", "Effect", "Rarity"]
weapon_titles = ["Image","Name (ID)","Damage","Range",
                 "BUY/Sell","Weight","Description", "Rarity"]
ammo_titles = ["Image","Name (ID)","Damage",
                 "BUY/Sell","Weight","Description", "Rarity"] 
armor_titles = ["Image", "Name (ID)", "Defense", 
              "BUY/Sell", "Weight", "Description", "Rarity"]
other_titles = ["Image","Name (ID)","BUY/Sell",
                "Weight","Description","Rarity"]

debug = 0

# print list of items for dyecmd
printdyed = 0

# language code
TCode = 'En:'

# constants for translation
MAtk = 'M. Attack'
MDef = 'M. Defense'
CDmg = 'Critical Damage'
CDef = 'Critical Defense'
SDmg = 'Damage'
SDef = 'Defense'
SRng = 'Range'
SStr = 'Strength'
SAgi = 'Agility'
SVit = 'Vitality'
SDex = 'Dexterity'
SInt = 'Intelligence'
SLuk = 'Luck'

RBuy = 'Buyable'
RCraft = 'Craftable'
RRDrop = 'Rare drop'
RFDrop = 'Frequent drop'
RColor = 'Colored'
RGMEvent = 'GM Event'

RSQuest = 'Special Quest'
RNlobt = 'No longer obtainable'
RUnobt = 'Unobtainable'
RTail = 'Tailorable'
RSpell = 'Spellable'
RQuest = 'Quest'
RIshi = 'Ishi'
RUnrel = 'Unreleased'

# table styles
tableborder = '{| style="width: 100%; border: 2px solid #99ee99; font-size:90%" cellspacing="2" cellpadding="3" align="center"'
tablehead = '! style="background:#99ee99;"'
tableheadf = '! style="background:#99ee99;width:65px"'
tableheadl = '! style="background:#99ee99;width:300px"'
tableroweven = '| style="background:#eeffee;"'
tablerowodd = '| style="background:#eefaff;"'

#custom group of items
custom_status = [1281] #Shock sweet
custom_helms = []
custom_legs = [731] # Assassin pants
custom_armors = []
custom_boots = [735] # Cotton boots
custom_shield = [585] #Scarab armlet
custom_gloves = []
custom_rings = []
custom_charms = []
custom_dyes = [690, 691, 692, 693, 694, 695, 696, 697, 698, 699]
custom_flowers = [661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674]

custom_easter = [1245, 802, 803, 804, 805, 1208, 1209, 1210, 1211, 1212, 1213, 1246, 1249, 1257, 1254, 4034]
custom_halloween = [1197, 3004, 1280, 1233]
custom_christmas = [635, 1234, 1235, 1236, 1237, 1238, 1239, 841, 842, 843, 844, 845, 846, 847, 849, 850, 851, 852, 853, 1207, 4037, 4038, 4039, 4040, 4041, 1240, 1241]

#not shown items
not_show = ["5000-5109"] #Sorcerer robes


#b - Buy
#c - Craft
#d - Dyed by selim
#g - GM event
#G - GM item only
#j - Developer
#n - No longer obtainable
#o - Unobtainable
#t - Tailorable
#s - Spellable
#q - Quest
#i - Ishi
#r - Unreleased
#e - Extend info
custom_rare = {'CottonShorts' : [["b", ""], ["i", ""]],
'JeansShorts' : [],
'CottonSkirt' : [["b", ""], ["t", "Lora Tay The Legendary Seamstress"]],
'JeansChaps' : [["t", "Pachua the Hermit Indian"]],
'CottonTrousers' : [["t", "Lora Tay The Legendary Seamstress"]],
'AssassinPants' : [["r", ""]],
'TerraniteLegs' : [["q", "The Terranite Armor"]],
'Miniskirt' : [["t", "Lora Tay The Legendary Seamstress"]],
'BromenalLegs' : [["r", ""]],
'LeatherTrousers' : [["q", "Raging Skill"]],
'RaggedShorts' : [["e", "Initial item"]],
'SilkPants' : [["b", ""], ["q", "Hetchel The Silk Weaver"]],
'RedCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenCottonSkirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedCottonShorts' : [["d", "Selim The Dyer"]],
'GreenCottonShorts' : [["d", "Selim The Dyer"]],
'DarkBlueCottonShorts' : [["d", "Selim The Dyer"]],
'YellowCottonShorts' : [["d", "Selim The Dyer"]],
'LightBlueCottonShorts' : [["d", "Selim The Dyer"]],
'PinkCottonShorts' : [["d", "Selim The Dyer"]],
'BlackCottonShorts' : [["d", "Selim The Dyer"]],
'OrangeCottonShorts' : [["d", "Selim The Dyer"]],
'PurpleCottonShorts' : [["d", "Selim The Dyer"]],
'DarkGreenCottonShorts' : [["d", "Selim The Dyer"]],
'RedMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenMiniskirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenCottonTrousers' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"], ["q", "Anwar's_Field"]],
'CactusDrink' : [["b", ""], ["i", ""]],
'CactusPotion' : [["b", ""], ["i", ""]],
'CandyCane' : [],
'XmasCake' : [["b", ""]],
'ChocolateBar' : [["i", ""]],
'Candy' : [["i", ""]],
'GingerBreadMan' : [],
'Cake' : [["b", ""], ["i", ""]],
'XmasCandyCane' : [],
'CherryCake' : [["b", ""], ["i", ""], ["q", "Newbie Quests#Fieri"]],
'EasterEgg' : [["n", ""]],
'Milk' : [["b", ""], ["i", ""]],
'RoastedMaggot' : [["b", ""]],
'OrangeCupcake' : [["b", ""], ["i", ""]],
'RedApple' : [["b", ""], ["i", ""]],
'Beer' : [["b", ""], ["i", ""]],
'BottleOfWater' : [["b", ""]],
'ChickenLeg' : [["b", ""], ["i", ""]],
'PinkPetal' : [["i", ""]],
'SmallMushroom' : [["b", ""], ["i", ""]],
'IronPotion' : [["b", ""], ["c", "Rauk The Alchemist#Potion_Making"]],
'ConcentrationPotion' : [["b", ""], ["c", "Rauk The Alchemist#Potion_Making"]],
'Orange' : [["b", ""], ["i", ""]],
'Steak' : [["b", ""], ["i", ""]],
'TinyHealingPotion' : [["c", "Caul The Alchemist"]],
'SmallHealingPotion' : [["c", "Caul The Alchemist"]],
'MediumHealingPotion' : [["c", "Caul The Alchemist"]],
'LargeHealingPotion' : [["c", "Caul The Alchemist"]],
'ManaPotion' : [["q", "Magic Quests#Wyara.27s_Mana_Potion"]],
'SnakeEgg' : [],
'MountainSnakeEgg' : [],
'GrassSnakeEgg' : [],
'CaveSnakeEgg' : [],
'GreenApple' : [["b", ""], ["i", ""]],
'PurificationPotion' : [["q", "Magic Quests#Cure_The_Pond"]],
'WhiteCake' : [["b", ""], ["i", ""]],
'ChocolateCake' : [["b", ""], ["i", ""]],
'OrangeCake' : [["b", ""], ["i", ""]],
'AppleCake' : [["b", ""], ["i", ""]],
'Acorn' : [],
'DilutedConcentrationPot' : [["o", ""]],
'DarkConcentrationPotion' : [["o", ""]],
'LacedChocolateCake' : [["r", ""]],
'LacedOrangeCupcake' : [["r", ""]],
'SlowPoisonPotion' : [["b", ""]],
'ZombieNachos' : [["b", ""]],
'LadyFingers' : [["b", ""]],
'JellAhh' : [["b", ""]],
'Snapple' : [["b", ""]],
'BeetleJuice' : [["b", ""]],
'GutBuster' : [["b", ""]],
'BloodWine' : [["b", ""]],
'HitchhikersTowel' : [["q", "Candor Quests#Sorfina"]],
'WhiteHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'RedHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'GreenHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'BlueHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'YellowHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'PurpleHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'OrangeHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'PinkHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'TealHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'LimeHitchhikersTowel' : [["d", "The Lost Hitchhiker#Dyeing_the_Towel"]],
'TinyManaElixir' : [],
'SmallManaElixir' : [["b", ""]],
'MediumManaElixir' : [["q", "The Illia Sisters"]],
'LargeManaElixir' : [["r", ""]],
'CranberryLollipop' : [["q", "Trick Or Treat"]],
'GrapeLollipop' : [["q", "Trick Or Treat"]],
'OrangeLollipop' : [["q", "Trick Or Treat"]],
'PollettEgg' : [],
'CaramelApple' : [["q", "The Illia Sisters"]],
'LollipopColor1' : [["n", ""]],
'LollipopColor2' : [["n", ""]],
'LollipopColor3' : [["n", ""]],
'Blueberries' : [],
'Pear' : [],
'Plum' : [],
'Cherry' : [],
'GoldenDeliciousApple' : [["q", "Oscar's Pumpkins"]],
'Honey' : [["r", ""]],
'Scissors' : [["n", ""], ["e", "Halloween 2010"]],
'ShockSweet' : [["b", ""]],
'RubberBat' : [],
'TonoriDelight' : [["b", ""], ["q", "Newbie Quests#Fieri"]],
'Marshmallow' : [["q", "Trick Or Treat"]],
'JellySkull' : [["q", "Trick Or Treat"]],
'CandyPumpkin' : [["q", "Oscar's Pumpkins"]],
'PickledBeets' : [["b", ""]],
'RoastedAcorn' : [["c", "Christmas Event"]],
'MTJarofOwnBlood' : [["r", ""]],
'CasinoCoins' : [["b", ""], ["i", ""]],
'DecorCandy' : [],
'MaggotSlime' : [["i", ""]],
'ScorpionStinger' : [],
'PurplePresentBox' : [],
'BluePresentBox' : [],
'RedScorpionStinger' : [],
'BugLeg' : [["b", ""], ["i", ""]],
'CoinBag' : [],
'TreasureKey' : [],
'GreenPresentBox' : [],
'EmptyBottle' : [],
'BottleOfSand' : [["n", ""]],
'AquaHint' : [["n", ""]],
'MagentaHint' : [["n", ""]],
'YellowHint' : [["n", ""]],
'GreenHint' : [["n", ""]],
'TealHint' : [["n", ""]],
'PurpleHint' : [["n", ""]],
'RedHint' : [["n", ""]],
'BlueHint' : [["n", ""]],
'OrangeHint' : [["n", ""]],
'GrayHint' : [["n", ""]],
'RawLog' : [["i", ""]],
'Toothbrush' : [["g", "Game_Masters/Events#Toothbrush_Event"]],
'WhiteFur' : [["i", ""]],
'CaveSnakeLamp' : [],
'HardSpike' : [["b", ""], ["i", ""]],
'PinkAntenna' : [["i", ""]],
'DarkCrystal' : [["b", ""]],
'SantaCookie' : [["o", ""]],
'IronOre' : [["i", ""]],
'SnakeSkin' : [["i", ""]],
'CottonCloth' : [["i", ""]],
'RedRose' : [["b", ""]],
'WhiteRose' : [["b", ""]],
'DarkRedRose' : [["b", ""]],
'PinkRose' : [["b", ""]],
'YellowRose' : [["b", ""]],
'BlackRose' : [["n", ""], ["e", "Easter 2010"]],
'OrangeRose' : [["b", ""]],
'BlueRose' : [["b", ""]],
'YellowTulip' : [["b", ""]],
'PurpleTulip' : [["b", ""]],
'RedTulip' : [["b", ""]],
'WhiteTulip' : [["b", ""]],
'PinkTulip' : [["b", ""]],
'OrangeTulip' : [["b", ""]],
'HeartNecklace' : [["r", ""]],
'MauveHerb' : [],
'CobaltHerb' : [],
'GambogeHerb' : [],
'AlizarinHerb' : [],
'RedDye' : [["c", "Rauk The Alchemist#Dye_Making"], ["i", ""]],
'GreenDye' : [["c", "Rauk The Alchemist#Dye_Making"]],
'DarkBlueDye' : [["c", "Rauk The Alchemist#Dye_Making"]],
'YellowDye' : [["c", "Rauk The Alchemist#Dye_Making"], ["i", ""]],
'LightBlueDye' : [["c", "Rauk The Alchemist#Dye_Making"], ["i", ""]],
'PinkDye' : [["c", "Rauk The Alchemist#Dye_Making"]],
'BlackDye' : [["c", "Rauk The Alchemist#Dye_Making"]],
'OrangeDye' : [["c", "Rauk The Alchemist#Dye_Making"]],
'PurpleDye' : [["c", "Rauk The Alchemist#Dye_Making"]],
'DarkGreenDye' : [["c", "Rauk The Alchemist#Dye_Making"]],
'Pearl' : [],
'PileOfAsh' : [["i", ""]],
'SulphurPowder' : [["c", "Rauk The Alchemist#Powder_Making"], ["s", "#gole"]],
'IronPowder' : [["c", "Rauk The Alchemist#Powder_Making"], ["s", "#zukminbirf"]],
'GoldenScorpionStinger' : [["q", "Setzer Quest#Kfahr"]],
'MonsterOilPotion' : [["q", "Setzer Quest#Make_the_Monster_Oil"]],
'LeatherPatch' : [["c", "Pachua the Hermit Indian"]],
'BlackScorpionStinger' : [],
'SnakeTongue' : [],
'MountainSnakeTongue' : [],
'GrassSnakeTongue' : [],
'CaveSnakeTongue' : [],
'SilkCocoon' : [],
'Iten' : [["q", "Newbie Quests#Miners_Quest"], ["s", ""]],
'MoubooFigurine' : [["s", "#parum boo"]],
'WarpedLog' : [["s", ""]],
'Lifestone' : [["s", "#manpahil"], ["q", "Life Magic Skill#Life_Stones"], ["i", ""]],
'DruidTreeBranch' : [["q", "Magic Quests#Old_Druid_Tree_2"]],
'Root' : [["b", ""]],
'MopoxCurePotion' : [["r", ""]],
'BatWing' : [],
'BatTeeth' : [],
'TerraniteOre' : [],
'WispPowder' : [["b", ""], ["i", ""]],
'SpectrePowder' : [["b", ""], ["i", ""]],
'PoltergeistPowder' : [["b", ""], ["i", ""]],
'Bone' : [],
'Skull' : [],
'RottenRags' : [],
'DiseasedHeart' : [],
'UndeadEar' : [],
'UndeadEye' : [],
'MylarinDust' : [["q", "Love Triangle Quest"]],
'EasterBasket' : [["n" , ""], ["e" , "Easter 2011"]],
'GrassLiner' : [["n", ""], ["e", "Easter 2011"]],
'JellyBeans' : [["n", ""], ["e", "Easter 2011"]],
'ChocolateMouboo' : [["n", ""], ["e", "Easter 2011"]],
'ReedBundle' : [],
'GrassSeed' : [],
'DiamondPowder' : [["c", "The Lost Hitchhiker#The_Gem_Powders"]],
'RubyPowder' : [["c", "The Lost Hitchhiker#The_Gem_Powders"]],
'EmeraldPowder' : [["c", "The Lost Hitchhiker#The_Gem_Powders"]],
'SapphirePowder' : [["c", "The Lost Hitchhiker#The_Gem_Powders"]],
'TopazPowder' : [["c", "The Lost Hitchhiker#The_Gem_Powders"]],
'AmethystPowder' : [["c", "The Lost Hitchhiker#The_Gem_Powders"]],
'BrokenFourLeafAmulet' : [["r", ""]],
'BrokenDoll' : [["q", "Rossy Quest"]],
'HyvernStinger' : [],
'GrubSlime' : [],
'RedDottedWrap' : [["n", ""], ["e", "Christmas 2011"]],
'YellowDottedWrap' : [["n", ""], ["e", "Christmas 2011"]],
'BlueDottedWrap' : [["n", ""], ["e", "Christmas 2011"]],
'PurpleStripedWrap' : [["n", ""], ["e", "Christmas 2011"]],
'RedGoldenStripedWrap' : [["n", ""], ["e", "Christmas 2011"]],
'GreenRedStripedWrap' : [["n", ""], ["e", "Christmas 2011"]],
'PlushMouboo' : [["n", ""], ["e", "Christmas 2011"]],
'OpenPresentBox' : [["q", "Christmas_Event"]],
'ClosedChristmasBox' : [["n", ""], ["e", "Christmas 2011"]],
'StickReinboo' : [["n", ""], ["e", "Christmas 2011"]],
'LeatherBall' : [["n", ""], ["e", "Christmas 2011"]],
'Doll' : [["n", ""], ["e", "Christmas 2011"]],
'WolvernTooth' : [],
'WolvernPelt' : [],
'SquirrelPelt' : [],
'WhiteBellTuber' : [],
'IcedWater' : [],
'SilverMirror' : [],
'BookPage' : [],
'LeatherSuitcase' : [["q", "Kylian the Businessman"]],
'Antlers' : [],
'SealedSoul' : [["q", "The Illia Sisters"]],
'LockPicks' : [["q", "The Illia Sisters"]],
'LazuriteShard' : [["q", "The Illia Sisters"]],
'LazuriteCrystal' : [["q", "The Illia Sisters"]],
'HeartOfLazurite' : [["q", "The Illia Sisters"]],
'SilkSheet' : [["c", "Hetchel The Silk Weaver"]],
'OrangeSummonFlower' : [["q", "Orum and Waric follow-up quest"]],
'PurpleSummonFlower' : [["q", "Orum and Waric follow-up quest"]],
'WhiteSummonFlower' : [["q", "Orum and Waric follow-up quest"]],
'YellowSummonFlower' : [["q", "Orum and Waric follow-up quest"]],
'RedSummonFlower' : [["q", "Orum and Waric follow-up quest"]],
'WhiteWrap' : [["q", "Christmas Event"]],
'YellowWrap' : [["q", "Christmas Event"]],
'BlueWrap' : [["q", "Christmas Event"]],
'PurpleWrap' : [["q", "Christmas Event"]],
'GreenWrap' : [["q", "Christmas Event"]],
'Soul' : [],
'RedChristmasStocking' : [["n", ""], ["e", "Christmas 2010"]],
'RedEasterEgg' : [["q", "Easter Eggs Hunt"], ["e", "Rare"]],
'GreenEasterEgg' : [["q", "Easter Eggs Hunt"], ["e", "Rare"]],
'BlueEasterEgg' : [["q", "Easter Eggs Hunt"], ["e", "Rare"]],
'YellowEasterEgg' : [["q", "Easter Eggs Hunt"], ["e", "Rare"]],
'PinkEasterEgg' : [["q", "Easter Eggs Hunt"], ["e", "Rare"]],
'TealEasterEgg' : [["q", "Easter Eggs Hunt"], ["e", "Rare"]],
'LightCrystal' : [["r", ""]],
'FakeFangs' : [["n", ""]],
'RedOrnament' : [["n", ""]],
'YellowOrnament' : [["n", ""]],
'GreenOrnament' : [["n", ""]],
'AquaOrnament' : [["n", ""]],
'BlueOrnament' : [["n", ""]],
'MagentaOrnament' : [["n", ""]],
'SantaSnowGlobe' : [["n", ""]],
'SnowmanSnowGlobe' : [["n", ""]],
'BentNeedle' : [["n", ""], ["e", "Easter 2010"]],
'DarkEasterEgg' : [["n", ""], ["e", "Easter 2010"]],
'StrangeCoin' : [["n", ""], ["e", "Easter 2010"]],
'DarkPetal' : [["n", ""], ["e", "Easter 2010"]],
'FlawedLens' : [["n", ""], ["e", "Easter 2010"]],
'RedCottonCloth' : [["d", "Selim The Dyer"]],
'GreenCottonCloth' : [["d", "Selim The Dyer"]],
'DarkBlueCottonCloth' : [["d", "Selim The Dyer"]],
'YellowCottonCloth' : [["d", "Selim The Dyer"]],
'LightBlueCottonCloth' : [["d", "Selim The Dyer"]],
'PinkCottonCloth' : [["d", "Selim The Dyer"]],
'BlackCottonCloth' : [["d", "Selim The Dyer"]],
'OrangeCottonCloth' : [["d", "Selim The Dyer"]],
'PurpleCottonCloth' : [["d", "Selim The Dyer"]],
'DarkGreenCottonCloth' : [["d", "Selim The Dyer"]],
'JackOLantern' : [],
'RealisticBrain' : [],
'JarofBlood' : [],
'Tongue' : [["n", ""]],
'PumpkinSeeds' : [],
'AngryScorpionStinger' : [],
'Coal' : [],
'Diamond' : [],
'Ruby' : [],
'Emerald' : [],
'Sapphire' : [],
'Topaz' : [],
'Amethyst' : [],
'IronIngot' : [["c", "Iron Ingot"]],
'BanditHood' : [],
'RedPowder' : [["q", "Orum Quest"]],
'YellowPowder' : [["q", "Orum Quest"]],
'BluePowder' : [["q", "Orum Quest"]],
'YellowPresentBox' : [],
'WhitePresentBox' : [],
'AnimalBones' : [],
'FrozenYetiTear' : [],
'YetiClaw' : [],
'IceCube' : [],
'GrimaceOfDementia' : [["q", "Grimace of Dementia"]],
'BlackPearl' : [["n", ""], ["e", "Easter 2012"]],
'WhiteBlanket' : [["n", ""], ["e", "Christmas 2012"]],
'WhiteSaddleRug' : [["n", ""], ["e", "Christmas 2012"]],
'RedSaddleRug' : [["n", ""], ["e", "Christmas 2012"]],
'RawTalisman' : [["n", ""], ["e", "Christmas 2012"]],
'FlightTalisman' : [["n", ""], ["e", "Christmas 2012"]],
'Bloodstone' : [["o", ""]],
'BrainStem' : [["o", ""]],
'CryptKey' : [["r", ""]],
'Ectoplasm' : [["r", ""]],
'Urn' : [["r", ""]],
'VampireBatWing' : [],
'WraithHorn' : [["r", ""]],
'AstralCube' : [["r", ""]],
'RunestoneA' : [["r", ""]],
'RunestoneL' : [["r", ""]],
'RunestoneN' : [["r", ""]],
'RunestoneT' : [["r", ""]],
'RunestoneW' : [["r", ""]],
'QuillOfBinding' : [["r", ""]],
'BloodInk' : [["r", ""]],
'UnderworldKey' : [["r", ""]],
'JarofOwnBlood' : [["r", ""]],
'SantaHat' : [["q", "Quest Of Snowman"]],
'FancyHat' : [["b", ""], ["i", ""]],
'MinersHat' : [["q", "Newbie Quests#Miners_Quest"]],
'StandardHeadband' : [["b", ""]],
'SilkHeadband' : [["b", ""]],
'PumpkinHelmet' : [],
'AxeHat' : [],
'PirateHat' : [],
'Goggles' : [["n", ""]],
'LeatherGoggles' : [["n", ""]],
'Circlet' : [],
'Eyepatch' : [["n", ""]],
'Bandana' : [],
'TopHat' : [["n", ""], ["e", "Christmas 2010, Easter 2011"]],
'FunkyHat' : [["n", ""], ["e", "Christmas 2010, Easter 2011"]],
'MushHat' : [["n", ""], ["e", "Christmas 2010, Easter 2011"]],
'ShroomHat' : [["n", ""], ["e", "Christmas 2010, Easter 2011"]],
'ChristmasElfHat' : [["n", ""], ["e", "Christmas 2010, Easter 2011"]],
'FaceMask' : [["n", ""]],
'WarlordHelmet' : [["c", "Nicholas the Blacksmith"]],
'KnightsHelmet' : [["c", "Nicholas the Blacksmith"]],
'InfantryHelmet' : [],
'CrusadeHelmet' : [["c", "Nicholas the Blacksmith"]],
'WhiteCowboyHat' : [["c", "Pachua the Hermit Indian"]],
'BlackCowboyHat' : [["c", "Pachua the Hermit Indian"]],
'Crown' : [["o", ""]],
'DevelopersCap' : [["j", ""]],
'Cap' : [["b", ""]],
'SerfHat' : [["b", ""], ["q", "Newbie Quests#Sarah"], ["i", ""]],
'GraduationCap' : [["q", "Newbie Graduation"]],
'NohMask' : [["q", "Robberies In Hurnscald"]],
'DemonMask' : [["q", "Demon Mask"]],
'HighPriestCrown' : [["b", ""]],
'MonsterSkullHelmet' : [["b", ""]],
'DesertHat' : [["b", ""], ["t", "Lora Tay The Legendary Seamstress"]],
'CottonHeadband' : [["b", ""]],
'GMCap' : [["G", ""]],
'PinkieHat' : [],
'FluffyHat' : [],
'PaladinsHelmet' : [["r", ""]],
'OverlordsHelmet' : [["r", ""]],
'DesertHelmet' : [["r", ""]],
'SailorHat' : [["r", ""]],
'CaptainsHat' : [["r", ""]],
'TerraniteHelmet' : [["q", "The Terranite Armor"]],
'GuyFawkesMask' : [["n", ""], ["e", "Halloween 2010"]],
'FairyHat' : [["q", "Bandit Quest"]],
'BromenalHelmet' : [["r", ""]],
'BowlerHatBrown' : [["q", "Love Triangle Quest"]],
'PinkieHelmet' : [["q", "Headless Man's Helmet"]],
'Earmuffs' : [["r", ""]],
'ElfNightcap' : [["n", ""], ["e", "Christmas 2011"]],
'Sunglasses' : [["n", ""], ["e", "Christmas 2011"]],
'KnitCap' : [["q", "Santa's Stolen Presents"]],
'BullHelmet' : [["q", "The Illia Sisters"]],
'RedEggshellHat' : [["q", "Easter Eggs Hunt"]],
'BlueEggshellHat' : [["q", "Easter Eggs Hunt"]],
'YellowEggshellHat' : [["q", "Easter Eggs Hunt"]],
'GreenEggshellHat' : [["q", "Easter Eggs Hunt"]],
'OrangeEggshellHat' : [["q", "Easter Eggs Hunt"]],
'DarkEggshellHat' : [["q", "Easter Eggs Hunt"]],
'MagicGMTopHat' : [["g", "Game Masters/Events#Kill_the_GM"], ["e", "GM Usage only"]],
'MurdererCrown' : [["g", "Game Masters/Events#Kill_the_GM"]],
'BeanieCopter' : [["q", "Milly's Hero"]],
'RedRoseHat' : [["q", "Orum and Waric follow-up quest"]],
'WhiteRoseHat' : [["d", "Blossom"]],
'PinkRoseHat' : [["d", "Blossom"]],
'YellowRoseHat' : [["d", "Blossom"]],
'OrangeRoseHat' : [["d", "Blossom"]],
'BlueRoseHat' : [["d", "Blossom"]],
'BucketHat' : [["q", "Trick Or Treat"]],
'TamOShanter' : [["r", ""]],
'CashiersShade' : [["r", ""]],
'AutumnMask' : [["q", "Trick Or Treat"]],
'NutcrackerHat' : [["q", "Christmas Event"]],
'Beret' : [["n", ""]],
'RangerHat' : [],
'AntlerHat' : [["n", ""]],
'ChristmasTreeHat' : [["n", ""]],
'SantaBeardHat' : [["n", ""]],
'BunnyEars' : [["n", ""], ["e", "Christmas 2010, Easter 2011"]],
'MoubooHead' : [["n", ""]],
'CatEars' : [["q", "Cat Ears Quest"]],
'PaperBag' : [["n", ""]],
'MoubootaurHead' : [["o", ""]],
'BunchOfParsley' : [["n", ""], ["e", "Halloween 2011"]],
'SkullMask' : [],
'SnowGoggles' : [["n", ""]],
'HeartGlasses' : [["n", ""], ["e", "Easter 2010"]],
'RabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'EggshellHat' : [["n", ""], ["e", "Easter 2010"]],
'OperaMask' : [["n", ""], ["e", "Halloween 2010"]],
'JesterMask' : [["n", ""], ["e", "Halloween 2010"]],
'WitchHat' : [["n", ""], ["e", "Halloween 2010"]],
'GoblinMask' : [["n", ""], ["e", "Halloween 2010"]],
'RedDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenDesertHat' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedCottonHeadband' : [["d", "Selim The Dyer"]],
'GreenCottonHeadband' : [["d", "Selim The Dyer"]],
'DarkBlueCottonHeadband' : [["d", "Selim The Dyer"]],
'YellowCottonHeadband' : [["d", "Selim The Dyer"]],
'LightBlueCottonHeadband' : [["d", "Selim The Dyer"]],
'PinkCottonHeadband' : [["d", "Selim The Dyer"]],
'BlackCottonHeadband' : [["d", "Selim The Dyer"]],
'OrangeCottonHeadband' : [["d", "Selim The Dyer"]],
'PurpleCottonHeadband' : [["d", "Selim The Dyer"]],
'DarkGreenCottonHeadband' : [["d", "Selim The Dyer"]],
'RedRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'GreenRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'DarkBlueRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'YellowRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'LightBlueRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'PinkRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'BlackRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'OrangeRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'PurpleRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'DarkGreenRabbitEars' : [["n", ""], ["e", "Easter 2010"]],
'RedWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'GreenWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'DarkBlueWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'YellowWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'LightBlueWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'PinkWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'BlackWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'OrangeWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'PurpleWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'DarkGreenWizardHat' : [["d", "Selim The Dyer"], ["q", "Angela's Daughter"]],
'RedBowlerHat' : [["d", "Selim The Dyer"]],
'GreenBowlerHat' : [["d", "Selim The Dyer"]],
'DarkBlueBowlerHat' : [["d", "Selim The Dyer"]],
'YellowBowlerHat' : [["d", "Selim The Dyer"]],
'LightBlueBowlerHat' : [["d", "Selim The Dyer"]],
'PinkBowlerHat' : [["d", "Selim The Dyer"]],
'BlackBowlerHat' : [["d", "Selim The Dyer"]],
'OrangeBowlerHat' : [["d", "Selim The Dyer"]],
'PurpleBowlerHat' : [["d", "Selim The Dyer"]],
'DarkGreenBowlerHat' : [["d", "Selim The Dyer"]],
'RedBowlerHatBrown' : [["d", "Selim The Dyer"]],
'GreenBowlerHatBrown' : [["d", "Selim The Dyer"]],
'DarkBlueBowlerHatBrown' : [["d", "Selim The Dyer"]],
'YellowBowlerHatBrown' : [["d", "Selim The Dyer"]],
'LightBlueBowlerHatBrown' : [["d", "Selim The Dyer"]],
'PinkBowlerHatBrown' : [["d", "Selim The Dyer"]],
'BlackBowlerHatBrown' : [["d", "Selim The Dyer"]],
'OrangeBowlerHatBrown' : [["d", "Selim The Dyer"]],
'PurpleBowlerHatBrown' : [["d", "Selim The Dyer"]],
'DarkGreenBowlerHatBrown' : [["d", "Selim The Dyer"]],
'RedBeret' : [["n", ""]],
'GreenBeret' : [["n", ""]],
'DarkBlueBeret' : [["n", ""]],
'YellowBeret' : [["n", ""]],
'LightBlueBeret' : [["n", ""]],
'PinkBeret' : [["n", ""]],
'BlackBeret' : [["n", ""]],
'OrangeBeret' : [["n", ""]],
'PurpleBeret' : [["n", ""]],
'DarkGreenBeret' : [["n", ""]],
'CandleHelmet' : [["q", "Orum Quest"]],
'YetiMask' : [],
'WizardHat' : [["q", "Angela's Daughter"]],
'BowlerHat' : [["q", "Shannon's Bowler Hat"]],
'Monocle' : [["r", ""]],
'PanHat' : [["n", ""], ["e", "Easter 2012"]],
'ChefHat' : [["n", ""], ["e", "Easter 2012"]],
'RedNose' : [],
'DarkHelm' : [],
'UnderworldMask' : [["r", ""]],
'Phylactery' : [["r", ""]],
'Dagger' : [["b", ""]],
'SharpKnife' : [["b", ""], ["q", "Candor Quests#Hasan"]],
'IronArrow' : [["b", ""]],
'ShortBow' : [["b", ""], ["q", "Newbie Quests#Miners_Quest"]],
'ShortSword' : [["q", "Short Sword Quest"]],
'ForestBow' : [["b", ""], ["q", "Forest Bow Quest"]],
'Bardiche' : [["r", ""]],
'Halberd' : [["r", ""]],
'Axe' : [["r", ""]],
'BlacksmithsAxe' : [["r", ""]],
'Sabre' : [["r", ""]],
'BoneKnife' : [["q", "Bone Knife Quest"]],
'Setzer' : [["q", "Setzer Quest"]],
'Scimitar' : [["r", ""]],
'Falchion' : [["r", ""]],
'Scorpion' : [["r", ""]],
'DesertBow' : [["r", ""]],
'Beheader' : [["r", ""]],
'BoneDarts' : [["r", ""]],
'SandCutter' : [["r", ""]],
'RockKnife' : [["q", "Angela's Daughter"]],
'StaffOfLife' : [["r", ""]],
'CrescentRod' : [["r", ""]],
'StaffOfFire' : [["r", ""]],
'StaffOfIce' : [["r", ""]],
'Jackal' : [["r", ""]],
'Sword' : [["r", ""]],
'BastardSword' : [["r", ""]],
'LongSword' : [["r", ""]],
'Spear' : [["r", ""]],
'Scythe' : [["q", "Farmer's Scythe"]],
'WoodenStaff' : [["q", "Angela's Daughter"]],
'Wand' : [["q", "Candor Quests#Morgan"]],
'TerraniteArrow' : [["q", "Heathin's Terranite Arrows"]],
'IceGladius' : [["q", "Blue Sage Quest"]],
'BansheeBow' : [["q", "The Illia Sisters"]],
'SlingShot' : [["b", ""], ["q", "Candor Quests#Tanisha"]],
'SlingBullet' : [["b", ""], ["q", "Candor Quests#Tanisha"]],
'KidBook' : [],
'Arrow' : [["b", ""], ["s", "#kularzufrill"], ["q", "Newbie Quests#Sandra"], ["i", ""]],
'Bow' : [["b", ""], ["q", "Newbie Quests#Sandra"]],
'Knife' : [["b", ""], ["q", "Candor Quests#Sorfina"]],
'ToySabre' : [["b", ""]],
'BoneArrows' : [["b", ""]],
'MinerGloves' : [["b", ""], ["q", "Newbie Quests#Miners_Quest"]],
'LeatherGloves' : [],
'WinterGloves' : [["q", "Agostine The Tailor"]],
'CottonGloves' : [["b", ""]],
'AssassinGloves' : [["r", ""]],
'BromenalGloves' : [["r", ""]],
'SilkGloves' : [["q", "Blue Sage Quest"]],
'RedCottonGloves' : [["d", "Selim The Dyer"]],
'GreenCottonGloves' : [["d", "Selim The Dyer"]],
'DarkBlueCottonGloves' : [["d", "Selim The Dyer"]],
'YellowCottonGloves' : [["d", "Selim The Dyer"]],
'LightBlueCottonGloves' : [["d", "Selim The Dyer"]],
'PinkCottonGloves' : [["d", "Selim The Dyer"]],
'BlackCottonGloves' : [["d", "Selim The Dyer"]],
'OrangeCottonGloves' : [["d", "Selim The Dyer"]],
'PurpleCottonGloves' : [["d", "Selim The Dyer"]],
'DarkGreenCottonGloves' : [["d", "Selim The Dyer"]],
'ScarabArmlet' : [["n", ""]],
'SteelShield' : [["c", "Nicholas the Blacksmith"]],
'WoodenShield' : [["q", "Wooden Shield Quest"]],
'LeatherShield' : [["b", ""], ["q", "Newbie Quests#Miners_Quest"]],
'BromenalShield' : [["r", ""]],
'LeatherShirt' : [["b", ""]],
'DesertShirt' : [["b", ""], ["q", "Newbie Quests#Miners_Quest"]],
'Turtleneck' : [["q", "Santa's Stolen Presents"]],
'VNeckSweater' : [["q", "Santa's Stolen Presents"]],
'ChainmailShirt' : [["c", "Nicholas the Blacksmith"]],
'LightPlatemail' : [["c", "Nicholas the Blacksmith"]],
'GoldenPlatemail' : [["r", ""]],
'WhiteEvokersRobeBlue' : [["r", ""]],
'BlackEvokersRobeBlue' : [["r", ""]],
'WhiteWizardRobe' : [["r", ""]],
'BlackWizardRobe' : [["r", ""]],
'ApprenticeRobe' : [["r", ""]],
'WarlordPlate' : [["c", "Nicholas the Blacksmith"]],
'GoldenWarlordPlate' : [["r", ""]],
'TankTop' : [["s", "#patloree"], ["t", "Lora Tay The Legendary Seamstress"]],
'ShortTankTop' : [["s", "#patviloree"], ["t", "Lora Tay The Legendary Seamstress"]],
'SilkRobe' : [["b", ""], ["t", "Lora Tay The Legendary Seamstress"]],
'GMRobe' : [["G", ""]],
'AssassinShirt' : [["r", ""]],
'TerraniteChestArmor' : [["q", "The Terranite Armor"]],
'ForestArmor' : [["q", "Bandit Quest"]],
'PlatynaRedDress' : [["o", ""]],
'YetiSkinShirt' : [["q", "Raging_Skill"]],
'BromenalChest' : [["r", ""]],
'SorcererRed' : [["q", "Love Triangle Quest"]],
'FineDress' : [["q", "Agostine's Dream Dress"]],
'LazuriteRobe' : [["q", "The Illia Sisters"]],
'Contributor' : [],
'AmberChristmasSweater' : [["q", "Christmas Event"]],
'FunkyChristmasSweater' : [["q", "Christmas Event"]],
'PinkChristmasSweater' : [["q", "Christmas Event"]],
'DarkChristmasSweater' : [["q", "Christmas Event"]],
'BlueChristmasSweater' : [["q", "Christmas Event"]],
'CottonShirt' : [["b", ""], ["s", "#patmuploo"], ["i", ""], ["t", "Lora Tay The Legendary Seamstress"], ["q", "Tutorial"]],
'RedCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenCottonShirt' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedVNeckSweater' : [["d", "Selim The Dyer"]],
'GreenVNeckSweater' : [["d", "Selim The Dyer"]],
'DarkBlueVNeckSweater' : [["d", "Selim The Dyer"]],
'YellowVNeckSweater' : [["d", "Selim The Dyer"]],
'LightBlueVNeckSweater' : [["d", "Selim The Dyer"]],
'PinkVNeckSweater' : [["d", "Selim The Dyer"]],
'BlackVNeckSweater' : [["d", "Selim The Dyer"]],
'OrangeVNeckSweater' : [["d", "Selim The Dyer"]],
'PurpleVNeckSweater' : [["d", "Selim The Dyer"]],
'DarkGreenVNeckSweater' : [["d", "Selim The Dyer"]],
'RedTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'GreenTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'DarkBlueTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'YellowTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'LightBlueTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'PinkTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'BlackTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'OrangeTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'PurpleTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'DarkGreenTurtleneck' : [["d", "Selim The Dyer"], ["q", "Santa's Stolen Presents"]],
'RedSilkRobe' : [["d", "Selim The Dyer"]],
'GreenSilkRobe' : [["d", "Selim The Dyer"]],
'DarkBlueSilkRobe' : [["d", "Selim The Dyer"]],
'YellowSilkRobe' : [["d", "Selim The Dyer"]],
'LightBlueSilkRobe' : [["d", "Selim The Dyer"]],
'PinkSilkRobe' : [["d", "Selim The Dyer"]],
'BlackSilkRobe' : [["d", "Selim The Dyer"]],
'OrangeSilkRobe' : [["d", "Selim The Dyer"]],
'PurpleSilkRobe' : [["d", "Selim The Dyer"]],
'DarkGreenSilkRobe' : [["d", "Selim The Dyer"]],
'RedTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenShortTankTop' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererRed' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenFineDress' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererDBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererYellow' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererLBlue' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererPink' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererBlack' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererOrange' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererPurple' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererDGreen' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'GreenSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkBlueSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'YellowSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'LightBlueSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PinkSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'BlackSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'OrangeSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'PurpleSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'DarkGreenSorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'SorcererWhite' : [["d", "Selim The Dyer"], ["t", "Lora Tay The Legendary Seamstress"]],
'RedContributor' : [["d", "Selim The Dyer"]],
'GreenContributor' : [["d", "Selim The Dyer"]],
'DarkBlueContributor' : [["d", "Selim The Dyer"]],
'YellowContributor' : [["d", "Selim The Dyer"]],
'LightBlueContributor' : [["d", "Selim The Dyer"]],
'PinkContributor' : [["d", "Selim The Dyer"]],
'BlackContributor' : [["d", "Selim The Dyer"]],
'OrangeContributor' : [["d", "Selim The Dyer"]],
'PurpleContributor' : [["d", "Selim The Dyer"]],
'DarkGreenContributor' : [["d", "Selim The Dyer"]],
'Boots' : [["b", ""], ["i", ""], ["q", "Newbie Quests#Lieutenant_Dausen"]],
'FurBoots' : [["q", "Agostine The Tailor"]],
'BlackBoots' : [["q", "Rossy Quest"]],
'CottonBoots' : [["b", ""], ["i", ""]],
'AssassinBoots' : [["r", ""]],
'BromenalBoots' : [["r", ""]],
'WarlordBoots' : [["c", "Nicholas the Blacksmith"]],
'RedCottonBoots' : [["d", "Selim The Dyer"]],
'GreenCottonBoots' : [["d", "Selim The Dyer"]],
'DarkBlueCottonBoots' : [["d", "Selim The Dyer"]],
'YellowCottonBoots' : [["d", "Selim The Dyer"]],
'LightBlueCottonBoots' : [["d", "Selim The Dyer"]],
'PinkCottonBoots' : [["d", "Selim The Dyer"]],
'BlackCottonBoots' : [["d", "Selim The Dyer"]],
'OrangeCottonBoots' : [["d", "Selim The Dyer"]],
'PurpleCottonBoots' : [["d", "Selim The Dyer"]],
'DarkGreenCottonBoots' : [["d", "Selim The Dyer"]],
'RedStockings' : [["q", "Christmas Event"]],
'WeddingRing' : [["q", "Wedding Woodland"]],
'FourLeafClover' : [],
'Towel' : [["n", ""]],
'CrozeniteFourLeafAmulet' : [["r", ""]],
'BromenalFourLeafAmulet' : [["r", ""]],
'SilverFourLeafAmulet' : [["r", ""]],
'GoldenFourLeafAmulet' : [["r", ""]],
'Grimoire' : [["q", "Blue Sage Quest"]],
'HeartOfIsis' : [["q", "The Illia Sisters"]],
'SkeletonCharm' : [["q", "Parua's Brother"]],
'DarkTalisman' : [["r", ""]],
'DiamondRing' : [["c", "Inya"]],
'RubyRing' : [["c", "Inya"]],
'EmeraldRing' : [["c", "Inya"]],
'SapphireRing' : [["c", "Inya"]],
'TopazRing' : [["c", "Inya"]],
'AmethystRing' : [["c", "Inya"]],
'SimpleRing' : [["b", ""], ["q" , "Love Triangle Quest"]]
}

imagesused = set()

class whatever: pass

log = []


# parseitems(file)
## Returns list with items from eathena item_db file.

def saveint(string, altval = 0):
    a = 0
    try:
        a = int(string)
    except:
        a = altval
    return a

def parseshowitems(items):
    none = []
    for num in items:
        pos = str(num).find("-")
        if pos != -1:
            start = int(num[0:pos])
            end = int(num[pos+1:])+1
            for i in range(start,end):
                none.append(i)
        else:
            none.append(num)
    return none
			
def parsescript(s):
    # Assumes that there's only one call of each method, otherwise it would need to know
    # how to combine those function calls. In practice, the latter call would prevail.
    script = {}
    scriptentry = ""
    parentry = ""
    mode = 0
    for a in s:

        if mode == 0: # looking for method
            if a.isalpha(): 
                mode = 1
                scriptentry += a
            elif a == '}': mode = 9
        elif mode == 1: # reading method name
            if a in " ;}":
                if a == " ": mode = 2
                elif a == ";": mode = 1
                elif a == "}": mode = 9
                parentry = ""
                script[scriptentry] = []
            else: scriptentry += a
        elif mode == 2: #looking for param
            if a == " ": pass
            elif a == ";": 
                mode = 0
                scriptentry = ""
            else:
                mode = 3
                parentry = a
        elif mode == 3: #reading param
            if a in (" ", ",", ";"):
                script[scriptentry].append(parentry)
                parentry = ""
                if a == ';': 
                    mode = 0
                    scriptentry = ""
                else: mode = 2
            else: 
                parentry += a
        elif mode == 9: #finished
            pass

    # Convert all possible parameters to integers
    for i in script.keys():
        for j in range(len(script[i])):
            try:
                script[i][j] = int(script[i][j])
            except:
                pass
    return script

def parsemonsters(file):
    objects = []
    sfile = file.split(chr(10))
    for line in sfile:
        s = line[:line.find('//')].strip().replace('\t','')
        if s:
            values = s.split(',')            
            numberofvalues = 57
            if len(values) != numberofvalues:
                log.append("mob_db: Warning, monster-line with ID %s has %d values instead of %d" % (values[0], len(values), numberofvalues))
                while len(values) < numberofvalues - 1:
                    values.append('')
                while len(values) > numberofvalues - 1:
                    values.pop()
            if saveint(values[29])!=0:
                o = whatever()
                o.dropid     = saveint(values[29])
                o.dropper    = saveint(values[30])
                objects.append(o)
            if saveint(values[31])!=0:
                o = whatever()
                o.dropid     = saveint(values[31])
                o.dropper    = saveint(values[32])
                objects.append(o)
            if saveint(values[33])!=0:
                o = whatever()
                o.dropid     = saveint(values[33])
                o.dropper    = saveint(values[34])
                objects.append(o)
            if saveint(values[35])!=0:
                o = whatever()
                o.dropid     = saveint(values[35])
                o.dropper    = saveint(values[36])
                objects.append(o)
            if saveint(values[37])!=0:
                o = whatever()
                o.dropid     = saveint(values[37])
                o.dropper    = saveint(values[38])
                objects.append(o)
            if saveint(values[39])!=0:
                o = whatever()
                o.dropid     = saveint(values[39])
                o.dropper    = saveint(values[40])
                objects.append(o)
            if saveint(values[41])!=0:
                o = whatever()
                o.dropid     = saveint(values[41])
                o.dropper    = saveint(values[42])
                objects.append(o)
            if saveint(values[43])!=0:
                o = whatever()
                o.dropid     = saveint(values[43])
                o.dropper    = saveint(values[44])
                objects.append(o)
    objects.sort(key=lambda x: (x.dropid, x.dropper),reverse=True)
    out = []
    param1 = []
    param2 = []
    prev = -1
    for m in objects:
        if prev != m.dropid:
            prev = m.dropid
            param1.append(m.dropid)
            param2.append(m.dropper)
    out.append(param1)
    out.append(param2)
    return out

def parseitems(file):
    objects = []
    sfile = file.split(chr(10))
    for line in sfile:
        s = line[:line.find('//')].strip().replace('\t','')
        if s:
            if s[len(s)-1]!="}":
                s += "}"
            mode = 0
            sout = ""
            for a in s:
                if mode == 0: #Out of {}
                    if a == '{': mode = 1
                    sout += a
                elif mode == 1: #Inside {}
                    if a == ',': sout += '|'
                    else:
                        sout += a
                        if a == '}': mode = 0
            values = sout.split(',')
            if line[0] == '#':
                continue
            if len(values) != 18:
                log.append("item_db: Warning, item-line with ID %s has %d values instead of 18" % (values[0], len(values)))
                while len(values) < 18:
                    values.append('')
                while len(values) > 18:
                    values.pop()
            o = whatever()
            o.id        = int(values[0])
            o.name      = values[1]
            o.type      = saveint(values[2])
            o.price     = saveint(values[3])
            o.sell      = saveint(values[4])
            o.weight    = saveint(values[5])
            o.atk       = saveint(values[6])
            o.defense   = saveint(values[7])
            o.range     = saveint(values[8])
            o.mbonus    = saveint(values[9])
            o.slot      = saveint(values[10],-1)
            o.gender    = saveint(values[11],-1)
            o.loc       = saveint(values[12],-1)
            o.wlv       = saveint(values[13])
            o.elv       = saveint(values[14])
            o.view      = saveint(values[15],-1)
            o.usescript = parsescript(values[16].replace('|',','))
            o.equipscript = parsescript(values[17].replace('|',','))
            objects.append(o)
    return objects

# parsexmlitems(file) parseincludes(file)
## Creates a dictionary containing the values of a client items.xml
## Yeah, there are XML parsers in the standard python libraries, but they're too object
## oriented and thus don't fit the style of this program.
def parseincludes(file):
    s = file.read()
    xmldata = ""
    pre = "<include "
    term = "/>"
    attrs = ["name"]
    index = 0
    if pre not in s[index:] and s.find("type=\"hairsprite")==-1 and s.find("type=\"race")==-1:
        xmldata += s
    while pre in s[index:]:
        index += s[index:].find(pre) + len(pre)
        curitem = {}
        termstart = index + s[index:].find(term) + len(term)
        for attr in attrs:
            found = s[index:].find(attr+'="')
            if found >= 0:
                start = index + found + len(attr+'="')
                end= start + s[start:].find('"')
            else:
                start = termstart
            if start < termstart:
                curitem[attr] = s[start:end]
        finclude = open('./'+curitem["name"])
        xmldata += parseincludes(finclude)
    return xmldata

def parsexmlitems(file):
    s = parseincludes(file)
    items = {}
    pre = "<item "
    term = ">"+chr(10)
    attrs = ["id", "image", "art", "name", "description", "type", "hp", "mp", "str", "agi", "vit", "int", "dex", "luck", "weight", "slot", "effect"]
    intattrs = ["id", "art", "hp", "str", "agi", "vit", "int", "dex", "luck", "mp"," weight", "slot"]
    index = 0
    while pre in s[index:]:
        index += s[index:].find(pre) + len(pre)
        curitem = {}
        termstart = index + s[index:].find(term) + len(term)
        curitem["effect"] = ""
        curitem["hp"] = 0
        curitem["mp"] = 0
        curitem["str"] = 0
        curitem["agi"] = 0
        curitem["vit"] = 0
        curitem["int"] = 0
        curitem["dex"] = 0
        curitem["luck"] = 0
        for attr in attrs:
            found = s[index:].find(attr+'="')
            if found >= 0:
                start = index + found + len(attr+'="')
                end= start + s[start:].find('"')
            else:
                start = termstart

            if start < termstart:
                curitem[attr] = s[start:end]

        for a in intattrs:
            try:
                if a in curitem:
                    curitem[a] = int(curitem[a])
            except:
                log.append("Item-ID %s: Cannot convert integer attribute %s to an integer. Value: '%s'" % (curitem["id"], a, curitem[a]))
        try:
            items[curitem['id']] = curitem
        except:
            if debug:
                log.append("Error, may be empty string: %s" % curitem)
    return items


# addclientinformation(items, citems, mobs, po)
## Entends the item data with the data collected from the client items.xml.

def addclientinformation(items,citems,mobs,po):
    for i in items:
        if i.id in citems:
            i.imagename=citems[i.id]["image"]
            i.itype=citems[i.id]["type"]
            i.imgurl = i.imagename[0].upper() + i.imagename[1:]
            filen = i.imgurl.split('/')
            filen = filen[len(filen)-1]
            url = i.imgurl.replace(filen, i.name.replace(" ","").lower())+".png"
            if printdyed:
                if i.imgurl.find("|")!=-1:
                    log.append ("dyecmd \""+i.imgurl+"\" colored/"+url)
            url=url.replace('/','-')
            i.wikiimg = "[[Image:%s]]" % url
            imagesused.add(citems[i.id]["image"])
            if po and citems[i.id]["description"]!="" and citems[i.id]["description"] in po:
                i.description = po[citems[i.id]["description"]]
            else:
                i.description = citems[i.id]["description"]
            if po and citems[i.id]["name"] in po:
                i.translatename = po[citems[i.id]["name"]]
            else:
                i.translatename = ""
            i.clientname = citems[i.id]["name"]
            if po and citems[i.id]["effect"]!="" and citems[i.id]["effect"] in po:
                i.effect = po[citems[i.id]["effect"]]
            else:
                i.effect = citems[i.id]["effect"]
            i.hp = citems[i.id]["hp"]
            i.mp = citems[i.id]["mp"]
            i.str = citems[i.id]["str"]
            i.agi = citems[i.id]["agi"]
            i.vit = citems[i.id]["vit"]
            i.dex = citems[i.id]["dex"]
            i.int = citems[i.id]["int"]
            i.luck = citems[i.id]["luck"]
            if i.id in mobs[0]:
                i.rare = mobs[1][mobs[0].index(i.id)]
            else:
                i.rare = -1
        else:
            i.itype= ''
            i.imgurl = ''
            i.description = ''
            i.clientname = ''



# gettypedir (items)
## Returns sorted lists of items by itemtype
def gettypedir(items):
    items.sort(key=lambda x: x.price+x.sell)

    typedir = whatever()
    typedir.healthy = []
    typedir.status = []
    typedir.h1weapons = []
    typedir.h2weapons = []
    typedir.ammo = []
    typedir.helms = []
    typedir.legs = []
    typedir.boots = []
    typedir.shield = []
    typedir.gloves = []
    typedir.rings = []
    typedir.charms = []
    typedir.armor = []
    typedir.dye = []
    typedir.flower = []
    typedir.easter = []
    typedir.halloween = []
    typedir.christmas = []
    typedir.other = []
    for item in items:
        if item.imgurl.strip() or item.clientname.strip():
            if item.id in not_show:
                continue
            elif item.id in custom_armors:
                typedir.armor.append(item)
            elif item.id in custom_boots:
                typedir.boots.append(item)
            elif item.id in custom_charms:
                typedir.charms.append(item)
            elif item.id in custom_christmas:
                typedir.christmas.append(item)
            elif item.id in custom_dyes:
                typedir.dye.append(item)
            elif item.id in custom_easter:
                typedir.easter.append(item)
            elif item.id in custom_flowers:
                typedir.flower.append(item)
            elif item.id in custom_gloves:
                typedir.gloves.append(item)
            elif item.id in custom_halloween:
                typedir.halloween.append(item)
            elif item.id in custom_helms:
                typedir.helms.append(item)
            elif item.id in custom_legs:
                typedir.legs.append(item)
            elif item.id in custom_rings:
                typedir.rings.append(item)
            elif item.id in custom_shield:
                typedir.shield.append(item)
            elif item.id in custom_status:
                typedir.status.append(item)
            elif item.atk > 0:
                if item.defense == 0:
                    if item.range == 0:
                        typedir.ammo.append(item)
                    else:
                        if item.itype == "equip-2hand":
                            typedir.h2weapons.append(item)
                        elif item.itype == "equip-1hand":
                            typedir.h1weapons.append(item)
            elif item.defense > 0: 
                if item.itype == "equip-arms": 
                    typedir.gloves.append(item)
                elif item.itype == "equip-feet": 
                    typedir.boots.append(item)
                elif item.itype == "equip-head": 
                    typedir.helms.append(item)
                elif item.itype == "equip-legs": 
                    typedir.legs.append(item)
                elif item.itype == "equip-torso": 
                    typedir.armor.append(item)
                elif item.itype == "equip-shield": 
                    typedir.shield.append(item)
            elif "sc_start" not in item.usescript and (item.hp != 0 or item.mp != 0):
                typedir.healthy.append(item)
            elif "sc_start" in item.usescript:
                typedir.status.append(item)
            elif item.itype == "equip-ring":
                typedir.rings.append(item)
            elif item.itype == "equip-charm":
                typedir.charms.append(item)
            else: typedir.other.append(item)

    typedir.h1weapons.sort(key=lambda x: (x.atk, int(x.price), x.id))
    typedir.h2weapons.sort(key=lambda x: (x.atk, int(x.price), x.id))
    typedir.ammo.sort(key=lambda x: (int(x.price), x.id))
    typedir.armor.sort(key=lambda x: (x.defense, int(x.mbonus), int(x.price), x.id))
    typedir.gloves.sort(key=lambda x: (x.defense, int(x.mbonus), int(x.price), x.id))
    typedir.boots.sort(key=lambda x: (x.defense, int(x.mbonus), int(x.price), x.id))
    typedir.helms.sort(key=lambda x: (x.defense, int(x.mbonus), int(x.price), x.id))
    typedir.legs.sort(key=lambda x: (x.defense, int(x.mbonus), int(x.price), x.id))
    typedir.shield.sort(key=lambda x: (x.defense, int(x.mbonus), int(x.price), x.id))
    typedir.dye.sort(key=lambda x: (int(x.price), x.id))
    typedir.flower.sort(key=lambda x: (x.id))
    typedir.easter.sort(key=lambda x: (int(x.price), x.id))
    typedir.halloween.sort(key=lambda x: (int(x.price), x.id))
    typedir.christmas.sort(key=lambda x: (int(x.price), x.id))
    typedir.healthy.sort(key=lambda x: (int(x.hp), int(x.mp), int(x.price), x.id))
    typedir.rings.sort(key=lambda x: (int(x.price), x.id))
    typedir.charms.sort(key=lambda x: (int(x.price), x.id))
    typedir.status.sort(key=lambda x: x.id)
    typedir.other.sort(key=lambda x: (int(x.price), x.id))

    return typedir
    
# printlog()
## Prints the global variable log to stdout
def printlog():
    global log
    if len(log) > 0:
        print ("\n---------------------------------------")
    for line in log:
        print (line)


# print<>items(items, title)
## Creates the table in wikicode, depending on what kind of item is being printed

def getmoneystring(buy, sell):
    return ""
def getidstring(id):
    return '<span style="color:#969696;">(%d)</span>' % id

def getmstats(eff, stat):
    out = ""
    ff = eff.find(stat)
    if ff!=-1:
        fs = eff.find(' ', ff+len(stat)+1)
        if fs!=-1:
            out = eff[ff:fs]
        else:
            out = eff[ff:]
    return out
def geteffect(item):
    status = "" 
    mstat = ""
    effc = item.effect
    if effc != "":
        mstat = getmstats(effc, MAtk)
        effc = effc.replace(mstat, '')
        s = getmstats(effc, MDef)
        effc = effc.replace(s, '')
        if len(s)>0:
            if len(mstat)>0:
                mstat += " / "+s
            else:
                mstat = s
    if effc != "":
        effc = effc.replace(CDmg, 'CrDa3')
        effc = effc.replace(CDef, 'CrDf3')
        effc = effc.replace(SDmg+' +'+str(item.atk), '')
        effc = effc.replace(SDmg+' +?', '')
        effc = effc.replace(SDef+' +'+str(item.defense), '')
        effc = effc.replace(SRng+' '+str(item.range), '')
        effc = effc.replace('CrDa3', CDmg)
        effc = effc.replace('CrDf3', CDef)
        while effc.find(' /  / ')!=-1:
            effc = effc.replace(' /  / ', ' / ')
        if len(effc)>0:
            while effc[0]==" " or effc[0]=="/" or effc[0]==",":
                effc = effc[1:]
                if len(effc)==0:
                    break
        if len(effc)>0:
            while effc[len(effc)-1]==" " or effc[len(effc)-1]=="/" or effc[len(effc)-1]==",":
                effc = effc[:-1]
                if len(effc)==0:
                    break
    if item.str != 0:
        if item.str < 0:
            stats = SStr+" %d" % item.str
        else:
            stats = SStr+" +%d" % item.str
    else:
        stats = ""
    if item.agi != 0:
        if stats != "":
            stats += " / "
        if item.agi < 0:
            stats += SAgi+" %d" % item.agi
        else:
            stats += SAgi+" +%d" % item.agi
    if item.vit != 0:
        if stats != "":
            stats += " / "
        if item.vit < 0:
            stats += SVit+" %d" % item.vit
        else:
            stats += SVit+" +%d" % item.vit
    if item.dex != 0:
        if stats != "":
            stats += " / "
        if item.dex < 0:
            stats += SDex+" %d" % item.dex
        else:
            stats += SDex+" +%d" % item.dex
    if item.int != 0:
        if stats != "":
            stats += " / "
        if item.int < 0:
            stats += SInt+" %d" % item.int
        else:
            stats += SInt+" +%d" % item.int
    if item.luck != 0:
        if stats != "":
            stats += " / "
        if item.luck < 0:
            stats += SLuk+" %d" % item.luck
        else:
            stats += SLuk+" +%d" % item.luck
    if effc != "" and stats != "":
        effc = stats+' / '+effc
    elif stats != "":
        effc = stats
    if len(mstat) != 0:
        status = '<br /><span style="font-size: smaller; color:#007700;">%s</span>' % mstat
    if len(effc) != 0:
        status += '<br /><span style="font-size:smaller; color:#ad1818;">%s</span>' % effc
    return status

def getrare(item):
    out = ""
    if item.rare!=-1:
        if item.rare>100:
            out = RFDrop
        else:
            out = RRDrop
    id = item.name.replace(" ","")
    if id in custom_rare:
        ar = custom_rare.get(id)
        for i in ar:
            if len(i)>1:
                if out != "":
                    if i[0]=="b" or i[0]=="c" or i[0]=="d":
                        out = ", "+out
                    elif i[0]!="e":
                        out +=", "
                if i[0]=="b":
                    out = RBuy+out
                elif i[0]=="c":
                    out = ("[[%s|%s]]" % (i[1], RCraft))+out
                elif i[0]=="d":
                    out = ("[[%s|%s]]" % (i[1], RColor))+out
                elif i[0]=="g":
                    out += "[[%s|%s]]" % (i[1], RGMEvent)
                elif i[0]=="G":
                    out += "[[Game Masters|Game Master]] only"
                elif i[0]=="j":
                    out += "[[Dev:Joining the project|%s]]" % RSQuest
                elif i[0]=="n":
                    out += RNlobt
                elif i[0]=="o":
                    out += RUnobt
                elif i[0]=="t":
                    out += "[[%s|%s]]" % (i[1], RTail)
                elif i[0]=="s":
                    if i[1]!="":
                        out += "{{H:title|%s|%s}}" % (i[1], RSpell)
                    else:
                        out += RSpell
                elif i[0]=="q":
                    out += "[[%s|%s]]" % (i[1], RQuest)
                elif i[0]=="i":
                    out += "[[Aidan And Ishi's Monster Points|%s]]" % RIshi
                elif i[0]=="r":
                    out += RUnrel
                elif i[0]=="e":
                    out += "<br /><span style=\"font-size: smaller; color:#ad1818;\">%s</span>" % i[1]
    return out

def dategenerate():
    print ("<!-- Page last generated on %s -->\n" % datetime.date.today())

def printhealitems(items,title):
    print ('==%s==' % title)
    print (tableborder)
    # Print labels
    for title in health_titles:
        if health_titles.index(title)==0:
            print ('%s | %s' % (tableheadf,title))
        elif health_titles.index(title)==len(health_titles)-1:
            print ('%s | %s' % (tableheadl,title))
        else:
            print ('%s | %s' % (tablehead,title))
    cnt = 0    
    for i in items:
        if cnt % 2 != 0:
            cellstyle = tablerowodd
        else:
            cellstyle = tableroweven
        print ('|-')
        print ('%s | %s' % (cellstyle,i.wikiimg))
        if i.translatename:
            print ('%s | \'\'\'[[%s%s|{{H:title|%s|%s}}]]\'\'\' %s %s' % (cellstyle,TCode,i.clientname,i.clientname,i.translatename,getidstring(i.id),geteffect(i)))
        else:
            print ('%s | \'\'\'[[%s]]\'\'\' %s %s' % (cellstyle,i.clientname,getidstring(i.id),geteffect(i)))
        print ('%s | %d' % (cellstyle,i.hp))
        print ('%s | %d' % (cellstyle,i.mp))
        print ('%s | %d GP<br>%d gp' % (cellstyle, i.price,i.sell))
        print ('%s | %d' % (cellstyle, i.weight))
        print ('%s | %s' % (cellstyle,i.description))
        print ('%s | %s' % (cellstyle,getrare(i)))
        cnt += 1
    print ('|}\n')
    dategenerate()

def printstatusitems(items,title):
    print ('==%s==\n' % title)
    print (tableborder)
    for title in status_titles:
        if status_titles.index(title)==0:
            print ('%s | %s' % (tableheadf,title))
        elif status_titles.index(title)==len(status_titles)-1:
            print ('%s | %s' % (tableheadl,title))
        else:
            print ('%s | %s' % (tablehead, title))
    cnt = 0
    for i in items:
        if cnt % 2 != 0:
            cellstyle = tablerowodd
        else:
            cellstyle = tableroweven
        print ('|-')
        print ('%s | %s' % (cellstyle,i.wikiimg))
        if i.translatename:
            print ('%s | \'\'\'[[%s%s|{{H:title|%s|%s}}]]\'\'\' %s' % (cellstyle,TCode,i.clientname,i.clientname,i.translatename,getidstring(i.id)))
        else:
            print ('%s | \'\'\'[[%s]]\'\'\' %s' % (cellstyle,i.clientname,getidstring(i.id)))
        print ('%s | %d GP<br>%d gp' % (cellstyle, i.price,i.sell))
        print ('%s | %d' % (cellstyle, i.weight))
        print ('%s | %s' % (cellstyle,i.description))
        print ('%s | %s' % (cellstyle,i.effect))
        print ('%s | %s' % (cellstyle,getrare(i)))
        cnt += 1
    print ('|}\n')
    dategenerate()

def printweaponitems(items, title):
    print ('==%s==\n' % title)
    print (tableborder)
    for title in weapon_titles:
        if weapon_titles.index(title)==0:
            print ('%s | %s' % (tableheadf,title))
        elif weapon_titles.index(title)==len(weapon_titles)-1:
            print ('%s | %s' % (tableheadl,title))
        else:
            print ('%s | %s' % (tablehead, title))
    cnt = 0
    for i in items:
        if cnt % 2 != 0:
            cellstyle = tablerowodd
        else:
            cellstyle = tableroweven
        print ('|-')
        print ('%s | %s' % (cellstyle,i.wikiimg))    
        if i.translatename:
            print ('%s | \'\'\'[[%s%s|{{H:title|%s|%s}}]]\'\'\' %s %s' % (cellstyle,TCode,i.clientname,i.clientname,i.translatename,getidstring(i.id),geteffect(i)))
        else:
            print ('%s | \'\'\'[[%s]]\'\'\' %s %s' % (cellstyle,i.clientname,getidstring(i.id),geteffect(i)))
        print ('%s | %d ' % (cellstyle,i.atk))
        print ('%s | %d ' % (cellstyle,i.range))
        print ('%s | %d GP<br>%d gp' % (cellstyle, i.price,i.sell))
        print ('%s | %d' % (cellstyle,i.weight))
        print ('%s | %s' % (cellstyle,i.description))
        print ('%s | %s' % (cellstyle,getrare(i)))
        cnt += 1
    print ('|}\n')
    dategenerate()

def printammoitems(items, title):
    print ('==%s==\n' % title)
    print (tableborder)
    for title in ammo_titles:
        if ammo_titles.index(title)==0:
            print ('%s | %s' % (tableheadf,title))
        elif ammo_titles.index(title)==len(ammo_titles)-1:
            print ('%s | %s' % (tableheadl,title))
        else:
            print ('%s | %s' % (tablehead, title))
    cnt = 0
    for i in items:
        if cnt % 2 != 0:
            cellstyle = tablerowodd
        else:
            cellstyle = tableroweven
        print ('|-')
        print ('%s | %s' % (cellstyle,i.wikiimg))
        if i.translatename:
            print ('%s | \'\'\'[[%s%s|{{H:title|%s|%s}}]]\'\'\' %s %s' % (cellstyle,TCode,i.clientname,i.clientname,i.translatename,getidstring(i.id),geteffect(i)))
        else:
            print ('%s | \'\'\'[[%s]]\'\'\' %s %s' % (cellstyle,i.clientname,getidstring(i.id),geteffect(i)))
        print ('%s | %d ' % (cellstyle,i.atk))
        print ('%s | %d GP<br>%d gp' % (cellstyle, i.price,i.sell))
        print ('%s | %d' % (cellstyle,i.weight))
        print ('%s | %s' % (cellstyle,i.description))
        print ('%s | %s' % (cellstyle,getrare(i)))
        cnt += 1
    print ('|}\n')
    dategenerate()
    
def printarmoritems(items, title):
    print ('==%s==\n' % title)
    print (tableborder)
    for title in armor_titles:
        if armor_titles.index(title)==0:
            print ('%s | %s' % (tableheadf,title))
        elif armor_titles.index(title)==len(armor_titles)-1:
            print ('%s | %s' % (tableheadl,title))
        else:
            print ('%s | %s' % (tablehead, title))
    cnt = 0
    for i in items:
        if cnt % 2 != 0:
            cellstyle = tablerowodd
        else:
            cellstyle = tableroweven
        print ('|-')
        print ('%s | %s' % (cellstyle,i.wikiimg))    
        if i.translatename:
            print ('%s | \'\'\'[[%s%s|{{H:title|%s|%s}}]]\'\'\' %s %s' % (cellstyle,TCode,i.clientname,i.clientname,i.translatename,getidstring(i.id),geteffect(i)))
        else:
            print ('%s | \'\'\'[[%s]]\'\'\' %s %s' % (cellstyle,i.clientname,getidstring(i.id),geteffect(i)))
        print ('%s | %d ' % (cellstyle,i.defense))
        print ('%s | %d GP<br>%d gp' % (cellstyle, i.price,i.sell))
        print ('%s | %d' % (cellstyle,i.weight))
        print ('%s | %s' % (cellstyle,i.description))
        print ('%s | %s' % (cellstyle,getrare(i)))
        cnt += 1
    print ('|}\n')
    dategenerate()

def printotheritems(items, title):
    print ('==%s==' % title)
    print (tableborder)
    for title in other_titles:
        if other_titles.index(title)==0:
            print ('%s | %s' % (tableheadf,title))
        elif other_titles.index(title)==len(other_titles)-1:
            print ('%s | %s' % (tableheadl,title))
        else:
            print ('%s | %s' % (tablehead,title))
    cnt = 0
    for i in items:
        if cnt % 2 != 0:
            cellstyle = tablerowodd
        else:
            cellstyle = tableroweven
        print ('|-')
        print ('%s | %s' % (cellstyle,i.wikiimg))
        if i.translatename:
            print ('%s | \'\'\'[[%s%s|{{H:title|%s|%s}}]]\'\'\' %s %s' % (cellstyle,TCode,i.clientname,i.clientname,i.translatename,getidstring(i.id),geteffect(i)))
        else:
            print ('%s | \'\'\'[[%s]]\'\'\' %s %s' % (cellstyle,i.clientname,getidstring(i.id),geteffect(i)))
        print ('%s | %d GP<br>%d gp' % (cellstyle, i.price,i.sell))
        print ('%s | %d' % (cellstyle, i.weight))
        print ('%s | %s' % (cellstyle,i.description))
        print ('%s | %s' % (cellstyle,getrare(i)))
        cnt += 1
    print ('|}\n')
    dategenerate()

def parsepo (po):
    ar = {}
    mode = 0
    for line in po:
        if "msgid" in line:
            id = line[line.find("\"")+1:-2]
            mode = 1
        elif "msgstr" in line:
            data = line[line.find("\"")+1:-2]
            mode = 2
        elif mode == 1 and "\"" in line:
            id += line[line.find("\"")+1:-2]
        elif mode == 2 and "\"" in line:
            data+= line[line.find("\"")+1:-2]
        elif mode == 2:
            ar[id] = data
            mode = 0
    return ar

def getfileext(file):
    ext = file.split(".")
    ext = ext[len(ext)-1]
    return ext

#####################################################################
#  MAIN
#####################################################################

try:
    po = ""
    if len(sys.argv) == 1:
        item_db = "item_db.txt"
        item_xml = "items.xml"
        mob_db = "mob_db.txt"
    elif  len(sys.argv) == 2 and getfileext(sys.argv[1])=="po":
        item_db = "item_db.txt"
        item_xml = "items.xml"
        mob_db = "mob_db.txt"
        po = sys.argv[1]
    elif len(sys.argv) == 3:
        item_db = sys.argv[1]
        item_xml = sys.argv[2]
        mob_db = "mob_db.txt"
    elif len(sys.argv) == 4:
        item_db = sys.argv[1]
        item_xml = sys.argv[2]
        if getfileext(sys.argv[3])=="po":
            po = sys.argv[3]
            mob_db = "mob_db.txt"
        else:
            mob_db = sys.argv[3]
    elif len(sys.argv) == 5:
        item_db = sys.argv[1]
        item_xml = sys.argv[2]
        mob_db = sys.argv[3]
        po = sys.argv[4]
    else: 
        item_db = ''
        item_xml = ''
        mod_db = ''
        print ("Wrong number of arguments")

    splitidb = 0
    splitmdb = 0
    if item_db and not os.path.isfile(item_db):
        print ("File does not exist: %s" % item_db)
    if item_xml and not os.path.isfile(item_xml):
        print ("File does not exist: %s" % item_xml)
    if mob_db and not os.path.isfile(mob_db):
        print ("File does not exist: %s" % mob_db)
    wdir = os.getcwd()
    if item_db and os.path.isdir(item_db):
        splitidb = 1
    elif not os.path.isfile(item_db):
        item_db = wdir+"/items"
        splitidb = 1
    if splitidb:
        print ("Search split item_db files in: %s" % item_db)
        os.chdir(item_db)
        item_db = ""
        for fname in glob.glob("item_db_*.txt"):
            item_db += (open(fname).read())
            print ("Found file: %s" % fname)
        os.chdir(wdir)
    elif item_db and item_xml and os.path.isfile(item_db) and os.path.isfile(item_xml):
        item_db = open(item_db).read()
    if mob_db and os.path.isdir(mob_db):
        splitmdb = 1
    elif not os.path.isfile(mob_db):
        mob_db = wdir+"/items"
        splitmdb = 1
    if splitmdb:
        print ("Search split mob_db files in: %s" % mob_db)
        os.chdir(mob_db)
        mob_db = ""
        for fname in glob.glob("mob_db_*.txt"):
            mob_db += (open(fname).read())
            print ("Found file: %s" % fname)
        os.chdir(wdir)
    elif mob_db and os.path.isfile(mob_db):
        mob_db = open(mob_db).read()
    if splitmdb and not mob_db:
        print ("Not found mob_db")
    if os.path.isfile(po):
        po = codecs.open(po, encoding='utf-8')
    else:
        po = ""
    if not (item_db and item_xml):
        print ("\nUSAGE:")
        print ("dbtowiki without any arguments will use item_db.txt or search files \"item_db_*.txt\" in \"items\" directory and items.xml in the current directory.")
        print ("to specify custom files, call: dbtowiki <item_db> <item_xml> [<mob_db>]")
        exit(-1)
    else:
#        log.append("Item-list [item_db] = %s" % item_db)
#        log.append("Item-list [item_xml] = %s" % item_xml)
        not_show = parseshowitems(not_show)
        if po:
            po = parsepo(po)
        mobs = parsemonsters(mob_db)
        items = parseitems(item_db)
        f = open(item_xml)
        citems = parsexmlitems(f)
        addclientinformation(items, citems, mobs, po)
        typedir = gettypedir(items)
        if len(typedir.healthy) > 0: printhealitems(typedir.healthy, "Health")
        if len(typedir.status) > 0: printstatusitems(typedir.status, "Status")
        if len(typedir.h1weapons) > 0: printweaponitems(typedir.h1weapons, "1-Handed Weapons")
        if len(typedir.h2weapons) > 0: printweaponitems(typedir.h2weapons, "2-Handed Weapons")
        if len(typedir.ammo) > 0: printammoitems(typedir.ammo, "Ammo")
        if len(typedir.helms) > 0: printarmoritems(typedir.helms, "Helmets")
        if len(typedir.legs) > 0: printarmoritems(typedir.legs, "Legs")
        if len(typedir.armor) > 0: printarmoritems(typedir.armor, "Armors")
        if len(typedir.boots) > 0: printarmoritems(typedir.boots, "Boots")
        if len(typedir.shield) > 0: printarmoritems(typedir.shield, "Shields")
        if len(typedir.gloves) > 0: printarmoritems(typedir.gloves, "Gloves")
        if len(typedir.rings) > 0: printotheritems(typedir.rings, "Rings")
        if len(typedir.charms) > 0: printotheritems(typedir.charms, "Charms")
        if len(typedir.dye) > 0: printotheritems(typedir.dye, "Dyes")
        if len(typedir.flower) > 0: printotheritems(typedir.flower, "Flowers")
        if len(typedir.easter) > 0: printotheritems(typedir.easter, "Easter")
        if len(typedir.halloween) > 0: printotheritems(typedir.halloween, "Halloween")
        if len(typedir.christmas) > 0: printotheritems(typedir.christmas, "Christmas")
        if len(typedir.other) > 0: printotheritems(typedir.other, "Other")
        print ("\n")
finally:
    printlog()