test

test
 avatar
unknown
golang
a year ago
3.6 kB
5
Indexable
// returns page, x_pos, y_pos, fitsHere(bool)
func (c *MuleChar) GetAvailablePositionForItem(itemName string, itemWidth, itemHeight, unid int) (int, int, int, bool) {
	allSlots := c.GetMuleSpace()
	fitsHere := true
	page := 1 //we start with stash stab 1 be
	xPos := 1
	yPos := 1
	for i := 0; i <= 9; i++ {
		if isSharedStashOnlyCharm(itemName, unid) {
			//these items only fit in shared stash
			continue
		}

		for y := 0; y <= 9; y++ {
			fitsHere = true
			for addI := 0; addI < itemWidth; addI++ {
				for addY := 0; addY < itemHeight; addY++ {
					if i+addI > 9 || y+addY > 9 {
						fitsHere = false
						continue
					}
					if allSlots.StashTabOne[i+addI][y+addY] == 1 {
						fitsHere = false
						continue
					}
				}
			}
			if fitsHere {
				return page, xPos + i, yPos + y, fitsHere //page=1 is stash tab 1
			}
		}
	}

	if !isSharedStashOnlyCharm(itemName, unid) {
		//shared stashes are reserved for anni/gheed/torch so anything else will be thrown here
		return 0, 0, 0, false
	}

	page = 2
	for i := 0; i <= 9; i++ {
		for y := 0; y <= 9; y++ {
			fitsHere = true
			for addI := 0; addI < itemWidth; addI++ {
				for addY := 0; addY < itemHeight; addY++ {
					if i+addI > 9 || y+addY > 9 {
						fitsHere = false
						continue
					}
					if allSlots.StashTabTwo[i+addI][y+addY] == 1 {
						fitsHere = false
						continue
					}
				}
			}
			if fitsHere {
				return page, xPos + i, yPos + y, fitsHere //page=1 is stash tab 1
			}
		}
	}

	page = 3
	for i := 0; i <= 9; i++ {
		for y := 0; y <= 9; y++ {

			fitsHere = true
			for addI := 0; addI < itemWidth; addI++ {
				for addY := 0; addY < itemHeight; addY++ {
					if i+addI > 9 || y+addY > 9 {
						fitsHere = false
						continue
					}
					if allSlots.StashTabThree[i+addI][y+addY] == 1 {
						fitsHere = false
						continue
					}
				}
			}
			if fitsHere {
				return page, xPos + i, yPos + y, fitsHere //page=1 is stash tab 1
			}
		}
	}

	page = 4
	for i := 0; i <= 9; i++ {
		for y := 0; y <= 9; y++ {

			fitsHere = true
			for addI := 0; addI < itemWidth; addI++ {
				for addY := 0; addY < itemHeight; addY++ {
					if i+addI > 9 || y+addY > 9 {
						fitsHere = false
						continue
					}
					if allSlots.StashTabFour[i+addI][y+addY] == 1 {
						fitsHere = false
						continue
					}
				}
			}
			if fitsHere {
				return page, xPos + i, yPos + y, fitsHere //page=1 is stash tab 1
			}
		}
	}

	return 0, 0, 0, fitsHere
	//TODO: INVENTORY IS TURNED OFF
	//inventory comes last
	//page = 0
	//for i := 0; i <= 9; i++ {
	//	for y := 0; y <= 3; y++ {
	//		if isSharedStashOnlyCharm(itemName, unid) {
	//			//these items only fit in shared stash
	//			continue
	//		}
	//		fitsHere = true
	//		for addI := 0; addI < itemWidth; addI++ {
	//			for addY := 0; addY < itemHeight; addY++ {
	//				if i+addI > 9 || y+addY > 3 {
	//					fitsHere = false
	//					continue
	//				}
	//				if allSlots.Inventory[i+addI][y+addY] == 1 {
	//					fitsHere = false
	//					continue
	//				}
	//			}
	//		}
	//		if fitsHere {
	//			return page, xPos + i, yPos + y, fitsHere //page=0 is inventory
	//		}
	//	}
	//}
	//
	//return 0, 0, 0, fitsHere
}

// checks if the item only fits in shared stashes
func isSharedStashOnlyCharm(itemName string, unid int) bool {
	if strings.ToUpper(itemName) == "ANNIHILUS" || strings.ToUpper(itemName) == "GHEEDS FORTUNE" || strings.ToUpper(itemName) == "HELLFIRE TORCH" {
		return true
	}

	if (strings.ToUpper(itemName) == "SMALL CHARM" || strings.ToUpper(itemName) == "LARGE CHARM" || strings.ToUpper(itemName) == "GRAND CHARM") && unid == 1 {
		return true
	}

	return false
}
Leave a Comment