# Ignore monsters when going to shop.
# 0 = don't ignore, 1 = ignore.
ignore_monsters = 1
# Display kill count.
# 0 = disabled, 1 = enabled.
display_kill_count = 1
# 0 = don't drop anything, 1 = drop picked up/added to backpack items not in autoloot list.
# Warning! If enabled, bot will drop stuff when retrieving from depot, buying from shop.
# Just use it when hunting.
drop_items = 0

# Variables
spot = (32729, 32419, 9) # Spot where path changes to hunt or shop. 'Shop' path starts from it and 'Back' ends in it.
shop = (32719, 32337, 7) # Spot near shop, player enters shop from it
shop_name = 'The Cauldron' # Change to your shop name which you will be using
sell_option_id = 2 # In shops like Scrapyard it's only possible to sell items, so in Scrapyard set it to 1.

# Paths
# Make hunting path in set 0.
# Make to shop path in set 1.
# Make back to hunt place path in set 2.
hunt = 0
to_shop = 1
back = 2

# Keep this as it is. (Must be 0)
ignore_menu = 0
last_time_shop = 0

def onTick():
	global last_time_shop

	if not script.IsInShop():
		last_time_shop = 0
		return

	if last_time_shop > 0:
		cur_time = script.GetCurrentTime()
		if (cur_time - last_time_shop) > 60:
			last_time_shop = 0
			script.StatusMessage('I was stuck in shop for 60s.')
			script.LeaveShopEx()
			
def onScriptActivation():
	global last_time_shop
	
	script.IgnoreMonsters(0)
	last_time_shop = 0
	script.EnableTickEvent(10000)

def onConnect():
	script.IgnoreMonsters(0)

def changePath(path):
	if ignore_monsters == 1 and (path == to_shop or path == back):
		script.IgnoreMonsters(1)
	else:
		script.IgnoreMonsters(0)

	script.SetWay(path, 2)

def onReceiveEnteredMenu(shopPacket, menuId, title):
	global ignore_menu, last_time_shop
	
	if title == shop_name:
		ignore_menu = 0
		last_time_shop = script.GetCurrentTime()
		script.StatusMessage('Shop: ' + title)
		if shopPacket == 1:
			script.ChooseShopOption(menuId, sell_option_id) # Sell
	elif title == 'Sell':
		ignore_menu = 0
		last_time_shop = script.GetCurrentTime()
		if script.GetWay() != back:
			changePath(back)
		script.StatusMessage('Selling items...')
	else:
		ignore_menu = 1

def onReceiveMenuRows(rows):
	global last_time_shop

	if ignore_menu == 1:
		return

	found = 0

	for row in rows:
		list = row.split()
		menuId = int(list[0])
		rowId = int(list[1])
		title = list[2]
		looktype = int(list[-1])

		if script.IsInLoot(looktype):
			script.ChooseMenuOption(menuId, 1, rowId) # Sell item
			last_time_shop = script.GetCurrentTime()
			found = 1
			break # break to avoid flood
	if found == 0:
		script.StatusMessage('Done.')
		script.LeaveShop() # didn't find items to sell.

def onReceiveMenuText(menuId, title, text):
	if 'No entry in the list' in text:
		script.StatusMessage('Done.')
		script.LeaveShop() # didn't find items to sell.

def onChangeLocation(x, y, z):
	if x == spot[0] and y == spot[1] and z == spot[2]:
		if script.IsStorageFull() == 1:
			if script.GetWay() != to_shop:
				script.StatusMessage('Going to shop to sell items...')
				changePath(to_shop)
		elif script.GetWay() != hunt:
			script.StatusMessage('Hunt started!')
			changePath(hunt)
	elif x == shop[0] and y == shop[1] and z == shop[2]:
		if script.GetWay() == to_shop:
			if script.EnterShop():
				script.StatusMessage('Entering shop.')
			else:
				script.Alarm('Can\'t find the shop.')
		
def onReceiveAddItemToBackpack(slot, itemId):
	if drop_items == 1:
		if not script.IsInLoot(itemId):
			script.DropItem(slot, 1)

def onKilledEnemy(name, templateId):
	if display_kill_count == 0:
		return
	varname = 'killed_' + name
	mobs = script.GetVar(varname) + 1
	script.SetVar(varname, mobs)
	txt = str(mobs)
	script.StatusMessage('Killed: ' + name + ' \nTotal: ~' + txt)
