Есть бовые когти, нужно сделать крафт из 2х таких предметов, боевые когти + боевые когти = n
я сделал 2 условия одинаковых но получаеться так, что при получениее 1х боевых когтей у игрока появляеться придмет n. Как сделать так что, при наличии только 2х когтей и рецепта герой получал предмет ?

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

В чем проблема написать функцию подсчета итемов по их Id (циклом делается), а уже там делать условие. Не знаю уровень автора, поэтому напишу псевдокодом
Если КоличествоПредметов(u,'I000') >= 2 Тогда
	УдалитьИтем(u,'I000')
	УдалитьИтем(u,'I000')
	ДатьИтемЮниту(u,'I001')
КонецЕсли
u - юнит, с которым работаешь
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
4 года назад
0
Всё придумано до нас - юзается цикл для перебора слотов.
Можно высечь булку из функции обнаружения предмета в инвентвре юнита, и подселить тудой интейджер. Тем самым сразу получая число и сравнивать его с необходимым количеством.
0
32
4 года назад
0
В любом случае, это уже простимулировало меня запустить редактор, дабы сделать какую-нить наработку, позволящую подбирать при полном инвентаре... Как по мне это проще, чем помещение в рюкзак, а если карта не подразумевает рюкзак?
Нужны функции:
Определение перегруза, есть ли 7 предмет
Подсчет количества предметов при перегрузе
Функция дропа из фантомного рюкзака
Система будет хороша, для карт, где используются рецепты или предметы стакаются в заряда
Не нужно делать рунный дубликат
Не нужно париться в совобождении при выкладывании
Можно сделать рюкзак, для статных пассивных предметов , свойства из которого будут без триггеров влиять на самого героя
0
27
4 года назад
Отредактирован MpW
0
prog:
Я вот помню древний баг, когда при определенных манипуляциях "лишние" предметы проваливались в никуда при подборе, но "никуда" там получалось бесконечное, а не в виде фантомного инвентаря на сколько-то слотов...
только я вот тоже помню такое делал. на бесконечный инвентарь это была идея. только не помню какое это действие, наверн на приказ поместить в другой слот

вроде если дать приказ итем переместить в 1-ый слот инвентаря. То итем в 1-ом слоте инвентаря пропадал (его короче запоминаем), а другой займет это место. короче можно было листать страницы инвентаря. А все ячейки запоминал в переменные, где каждый номер массива - номер страницы. Вроде как то так работало
2
16
4 года назад
Отредактирован DracoL1ch
2
В игре часть функций проверяет внешний (отображемый) инвентарь, а часть - последний добавленный. Поэтому добавление двух и более инветарей создаёт undefined behaviour, который может меняться от версии к версии. На мемхаке такое делать я ещё пойму, там стабильно 26,а вот для свежих проектов это такое себе
1
28
4 года назад
1
А если одному инвентарю сделать несколько уровней, с 0..7 предметов, на последнем уровне будет 7 слотов или всё же 6?
0
11
4 года назад
0
Проверять хэндлы айтемов? Они же разные будут
0
32
4 года назад
0
respect_gg, нет, там вешается на хендл юнита количество предметов определённого типа в ячейку StringHash("Kogti"), которая равна числу, но этот способ не рекомендуется использовать
0
11
4 года назад
0
Bergi_Bear, а че нет? Я всегда так делал, проверял по Хэндлу Айтема и все работало
0
7
4 года назад
Отредактирован PornoMishka
0
В чем проблема написать функцию подсчета итемов по их Id (циклом делается), а уже там делать условие. Не знаю уровень автора, поэтому напишу псевдокодом
Если КоличествоПредметов(u,'I000') >= 2 Тогда
	УдалитьИтем(u,'I000')
	УдалитьИтем(u,'I000')
	ДатьИтемЮниту(u,'I001')
КонецЕсли
u - юнит, с которым работаешь
Принятый ответ
0
4
4 года назад
0
| Добавляешь функцию в шапку
| Принимает : юнита, id предмета который надо посчитать, требуемое кол-во этого предмета, id сборного предмета
function CheckItemCount takes unit u,integer id,integer count,integer add returns nothing
local integer i = 0
local integer s = 0
local item it
loop
exitwhen (i > 5 or s >= count)
if (GetItemTypeId(UnitItemInSlot(u,i)) == id) then
set s = s + 1
endif
set i = i + 1
endloop
if (s >= count) then
set i = 0
loop
set it = UnitItemInSlot(u,i)
if (GetItemTypeId(it) == id) then
call RemoveItem(it)
set s = s - 1
exitwhen (s <= 0)
endif
set i = i + 1
endloop
call UnitAddItem(u,CreateItem(add,GetUnitX(u),GetUnitY(u)))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl",u,"origin"))
endif
set it = null
endfunction
ну и так проверяешь
Загруженные файлы
1
26
4 года назад
1
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.