Ну хорошо. Протестировал - конечно работа не ювелирная (на визуальном уровне) - но сносно. Залез в триггеры и поперхнулся. Да, несомненно - на этот раз в разы лучше, однако есть ряд грубых ошибок, начиная с события. Первое - вместо "Unit owned by player[xx] event" лучше использовать "A unit event", второе - не "Начинает применение способности" а "Приводит способность в действие"
На счет условия: логическое действие "AND" тут неуместно и создает лишнюю нагрузку на карту. Далее по пунктикам:
Опять же - это не наработка, это пример системы. Сейчас поясню почему это наработка как и предыдущая - не жизнеспособна за пределами твоей карты:
Для каждого предмета требуется сделать десяток лишних ифзенов. Тоесть, на боевые когти у тебя 3 if\then\else. И, в случае если выпадает 1 - ты делаешь один набор действий. Если выпадает 2 - ты делаешь другой набор действие. На будущее - если действия из массива в массив повторяются - их можно сделать вне массива а внутри массивов делать лишь те действия которые различны для каждого из случаев. НО(!!!) - в твоей наработке иф\зен массив должен быть один и универсальный.
Объясняю как сделать:
Делаешь переменную типа "Тип-предмета" , конечно массив и переменную "целочисленная" и одну "Хэш-таблица". Назовем их
Item \ Int \ Data
Делаешь триггер с созданием базы из предметов. ну допустим:
set Item[1] = Blades of Attack [unid]
set Item[2] = Blades of Attack +4
set Item[3] = Blades of Attack +5
set Item[4] = Blades of Attack +6
set Int = Количество предметов в базе (в данном случае 4)
В другом триггере инитиш хэш-таблицу и заносишь данные в таблицу:
[custom script] set udg_Data = InitHasthable()
SaveInteger (3, 1, Data)
SaveInteger (2,1, Data)
SaveInteger (3,1,Data)
SaveInteger(4,1,Data)
В этом триггере ты инициализируешь по хэш-таблице все предметы которые у тебя будут "узнаваться". В примере под числом X скрывается индекс предмета на который мы произнесли заклинание: (Y, Z,X, Data). Под Y при Z равном 1 ставится число - количество предметов которые можно получить из данного предмета. Далее, как ты, пожалуй, должен догадываться - под Y идут индексы предметов которые игрок может получить при идентификации предмета.
В триггере который является "ядром" системе ты будешь лишь делать проверку предмета и его распознавание.
Собственно в таком простом случае как идентификация предметов можно обойтись всего одним циклом и 1 ифзеном.
"бла-бла-бла, юнит приводит способность в действие",
Условие:
Ability Being Cast == Идентификация Предмета
Действие:
For Loop [X] from 1 to [Int]:
If\then\else:
Itemtype of TargetItem of AbilityBeingCast == Item[X]
then
Remove TargetItemOfAbilityBeingCast
Create item for hero: Item[LoadInteger( GetRandomInteger(from 2 to LoadInteger(1, X, Data)+1), X, Data)]
CreateEffect
DestroyEffect(LastCreatedEffect)
Massage
else
вот и вся система. В последствии вместо копания в ядре ты просто подгоняешь ядро под свою базу предметов (в 90% карт она есть) и работаешь уже только с базой по идентификации а не с самим ядром. В этом проблема обеих твоих систем.