Similiar to my last update, I've been working again on a tool to generate code for us. This time its shops, and I'm done with it - woohoo!
The tool understands how to differentiate between a general and speciality store, and sets the purchase policy appropriately. It also understands what it means for a shop to have infinite stock - you see this behaviour in certain reward shops and also in the likes of Vanessa's Farming shop beside the farming plots in Catherby.
This update adds 300 shops to the game. 
Here's some example output from the shop generator:
Code:
create_shop("Ali's Discount Wares.", CoinCurrency(), purchasePolicy = PurchasePolicy.BUY_STOCK) {
items[0] = ShopItem(Items.POT, amount = 3, sellPrice = 1, buyPrice = 0)
items[1] = ShopItem(Items.JUG, amount = 2, sellPrice = 1, buyPrice = 0)
items[2] = ShopItem(Items.EMPTY_JUG_PACK, amount = 4, sellPrice = 140, buyPrice = 77)
items[3] = ShopItem(Items.WATERSKIN3, amount = 10, sellPrice = 27, buyPrice = 14)
items[4] = ShopItem(Items.DESERT_SHIRT, amount = 3, sellPrice = 40, buyPrice = 22)
items[5] = ShopItem(Items.DESERT_BOOTS, amount = 2, sellPrice = 20, buyPrice = 11)
items[6] = ShopItem(Items.BUCKET, amount = 19, sellPrice = 2, buyPrice = 1)
items[7] = ShopItem(Items.EMPTY_BUCKET_PACK, amount = 10, sellPrice = 500, buyPrice = 275)
items[8] = ShopItem(Items.FAKE_BEARD, amount = 11, sellPrice = 1, buyPrice = 0)
items[9] = ShopItem(Items.KHARIDIAN_HEADPIECE, amount = 12, sellPrice = 1, buyPrice = 0)
items[10] = ShopItem(Items.PAPYRUS, amount = 50, sellPrice = 10, buyPrice = 5)
items[11] = ShopItem(Items.KNIFE, amount = 5, sellPrice = 6, buyPrice = 3)
items[12] = ShopItem(Items.TINDERBOX, amount = 11, sellPrice = 1, buyPrice = 0)
items[13] = ShopItem(Items.BRONZE_PICKAXE, amount = 23, sellPrice = 1, buyPrice = 0)
items[14] = ShopItem(Items.RAW_CHICKEN, amount = 15, sellPrice = 1, buyPrice = 0)
}
Code:
create_shop("Amlodd's Magical Supplies", CoinCurrency(), purchasePolicy = PurchasePolicy.BUY_STOCK) {
items[0] = ShopItem(Items.AIR_RUNE, amount = 5000, sellPrice = 4, buyPrice = 2)
items[1] = ShopItem(Items.WATER_RUNE, amount = 5000, sellPrice = 4, buyPrice = 2)
items[2] = ShopItem(Items.EARTH_RUNE, amount = 5000, sellPrice = 4, buyPrice = 2)
items[3] = ShopItem(Items.FIRE_RUNE, amount = 5000, sellPrice = 4, buyPrice = 2)
items[4] = ShopItem(Items.MIND_RUNE, amount = 5000, sellPrice = 3, buyPrice = 1)
items[5] = ShopItem(Items.BODY_RUNE, amount = 5000, sellPrice = 3, buyPrice = 1)
items[6] = ShopItem(Items.CHAOS_RUNE, amount = 250, sellPrice = 90, buyPrice = 49)
items[7] = ShopItem(Items.NATURE_RUNE, amount = 250, sellPrice = 180, buyPrice = 99)
items[8] = ShopItem(Items.COSMIC_RUNE, amount = 250, sellPrice = 50, buyPrice = 27)
items[9] = ShopItem(Items.LAW_RUNE, amount = 250, sellPrice = 240, buyPrice = 132)
items[10] = ShopItem(Items.DEATH_RUNE, amount = 250, sellPrice = 180, buyPrice = 99)
items[11] = ShopItem(Items.BLOOD_RUNE, amount = 250, sellPrice = 400, buyPrice = 220)
items[12] = ShopItem(Items.FIRE_RUNE_PACK, amount = 80, sellPrice = 430, buyPrice = 236)
items[13] = ShopItem(Items.WATER_RUNE_PACK, amount = 80, sellPrice = 430, buyPrice = 236)
items[14] = ShopItem(Items.AIR_RUNE_PACK, amount = 80, sellPrice = 430, buyPrice = 236)
items[15] = ShopItem(Items.EARTH_RUNE_PACK, amount = 80, sellPrice = 430, buyPrice = 236)
items[16] = ShopItem(Items.MIND_RUNE_PACK, amount = 40, sellPrice = 330, buyPrice = 181)
items[17] = ShopItem(Items.CHAOS_RUNE_PACK, amount = 35, sellPrice = 9950, buyPrice = 5472)
}
Code:
create_shop("Zanaris General Store", CoinCurrency(), purchasePolicy = PurchasePolicy.BUY_TRADEABLES) {
items[0] = ShopItem(Items.POT, amount = 5, sellPrice = 1, buyPrice = 0)
items[1] = ShopItem(Items.JUG, amount = 2, sellPrice = 1, buyPrice = 0)
items[2] = ShopItem(Items.EMPTY_JUG_PACK, amount = 5, sellPrice = 182, buyPrice = 56)
items[3] = ShopItem(Items.SHEARS, amount = 2, sellPrice = 1, buyPrice = 0)
items[4] = ShopItem(Items.BUCKET, amount = 3, sellPrice = 2, buyPrice = 0)
items[5] = ShopItem(Items.EMPTY_BUCKET_PACK, amount = 15, sellPrice = 650, buyPrice = 200)
items[6] = ShopItem(Items.BOWL, amount = 2, sellPrice = 5, buyPrice = 1)
items[7] = ShopItem(Items.CAKE_TIN, amount = 2, sellPrice = 13, buyPrice = 4)
items[8] = ShopItem(Items.TINDERBOX, amount = 2, sellPrice = 1, buyPrice = 0)
items[9] = ShopItem(Items.CHISEL, amount = 2, sellPrice = 1, buyPrice = 0)
items[10] = ShopItem(Items.HAMMER, amount = 5, sellPrice = 1, buyPrice = 0)
items[11] = ShopItem(Items.NEWCOMER_MAP, amount = 5, sellPrice = 1, buyPrice = 0)
items[12] = ShopItem(Items.SECURITY_BOOK, amount = 5, sellPrice = 2, buyPrice = 0)
}