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

Принятый ответ

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
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
7
7 лет назад
Отредактирован Ige
2
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
Принятый ответ
0
16
7 лет назад
0
pro100master, а у меня в примерах не то же самое?
Ige, а у меня в примерах не то же самое?
2
7
7 лет назад
2
avuremybe, в смысле "то же самое"?
У тебя в примере в таблицу сохраняется только код предмета
	call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(1)), 'U000')
    call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(2)), 'U001')
    call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(3)), 'U002')
я же (да и не только я) предлагаю тебе дополнительно сохранить пометку, что данный предмет добавлен в магазин
	call SaveInteger(ht, GetUnitUserData(shop), lastItem, itemid) 	// сохраняем код предмета
	call SaveBoolean(ht, GetUnitUserData(shop), itemid, true)		// пометка, что предмет добавлен в этот магазин
а затем с помощью всего 1 функции проверять, есть ли такой-то предмет в таком-то магазине
	function HaveItem takes unit shop, integer itemid returns boolean
		return LoadBoolean(ht, GetUnitUserData(shop), itemid)
	endfunction
0
16
7 лет назад
Отредактирован avuremybe
0
Ige, сорян, не проснулся еще.
Проморгал, что ты в качестве childKey использовал ID предмета.
Действительно, я могу на этой основе построить решение моей проблемы.
Спасибо!
0
21
7 лет назад
0
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
0
30
7 лет назад
0
ScopteRectuS, более тяжёлые проверки, в остальном без разницы.
0
28
7 лет назад
0
ScopteRectuS, и какой смысл сохранять itemid по ключу itemid
доставать мы потом его как будем?
0
21
7 лет назад
Отредактирован scopterectus
0
nvc123,
Ой, сори. тупанул. ))
0
16
7 лет назад
Отредактирован avuremybe
0
Да все, спасибо за помощь, ребята! Я на основе идеи Ige построил все, что мне было нужно. Просто забыл закрыть вопрос (:
Clamp, я вспомнил, почему мне не подходят структуры.
У меня инвентарь бесконечный.
0
28
7 лет назад
0
avuremybe, у тебя оперативки на бесконечный инвентарь не хватит
+ хэштейбл тоже не бесконечный
0
30
7 лет назад
0
У меня инвентарь бесконечный.
Тебя это может сильно удивить, но при определённом подходе количество экземпляров одной структуры может оказаться сильно больше 8190 (что и так само по себе гигантское количество).
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.