БД содержит равкоды юнитов, хранится в хэше.
Какие есть варианты проверить содержится ли уже такое значение в БД, кроме перебора?

avuremybe, как тебе такой вариант?
	function HaveItem takes unit shop, integer itemid returns boolean
		return LoadBoolean(ht, GetUnitUserData(shop), itemid)
	endfunction

	function ShopAddItem takes unit shop, integer itemid returns nothing
		if not HaveItem(shop, itemid) then
			//...
			set lastItem = lastItem + 1
			call SaveInteger(ht, GetUnitUserData(shop), lastItem, itemid)
			call SaveBoolean(ht, GetUnitUserData(shop), itemid, true)
			//...
		endif
	endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
26
Ige, сорян, не проснулся еще.
Проморгал, что ты в качестве childKey использовал ID предмета.
Действительно, я могу на этой основе построить решение моей проблемы.
Спасибо!
21
Ige, а если так:
	function HaveItem takes unit shop, integer itemid returns boolean
		return HaveSavedInteger(ht, GetUnitUserData(shop), itemid)
	endfunction

	function ShopAddItem takes unit shop, integer itemid returns nothing
		if not HaveItem(shop, itemid) then
			//...
			call SaveInteger(ht, GetUnitUserData(shop), itemid, itemid)
			//...
		endif
	endfunction
30
ScopteRectuS, более тяжёлые проверки, в остальном без разницы.
28
ScopteRectuS, и какой смысл сохранять itemid по ключу itemid
доставать мы потом его как будем?
26
Да все, спасибо за помощь, ребята! Я на основе идеи Ige построил все, что мне было нужно. Просто забыл закрыть вопрос (:
Clamp, я вспомнил, почему мне не подходят структуры.
У меня инвентарь бесконечный.
28
avuremybe, у тебя оперативки на бесконечный инвентарь не хватит
+ хэштейбл тоже не бесконечный
30
У меня инвентарь бесконечный.
Тебя это может сильно удивить, но при определённом подходе количество экземпляров одной структуры может оказаться сильно больше 8190 (что и так само по себе гигантское количество).
20
8190 предметов? Даже если по 2 с моба собирать, неужто у вас в карте наберется 4000 мобов?
Хотя скорее 8192, но да не важно
26
Я не говорил, что он будет забиваться миллионом предметов. Я сказал что инвентарь сам по себе - бесконечный.
Я понятия не имею, сколько у меня будет предметов, но т.к. карта - рпг, то всякой чепухи типа ингридиентов будет не мало. Поэтому мне нравится идея бесконечного инвентаря.
хэштейбл тоже не бесконечный
Советуешь под инвентарь выделить отдельную хэш-таблицу?
20
Бесконечность - это миф. Динамическая расширяемость имеет высокую цену. Даже если реализовывать списком. Ограничивать сверхбольшими значениями (вроде макс значения uint) тоже не стоит. Просто определите достаточно высокий порог, который будет считаться недостижимым. Если кто-то скажет что этого мало - выпускай фикс.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.