WarCraft 3: Манипуляции с предметами.

База примеров на GUI
В варкрафте можно манипулировать предметами, по мимо продавать, выкидывать и отдавать. Их еще можно и варить и складывать.
В статье описаны следующие примеры:
  1. Смешивание предметов
  2. Смешивание одинаковых предметов
  3. Складывание предметов
Основные используемые объекты в примере:
"Предмет1" "Предмет2" "Предмет3" - предметы которые мы смешиваем.
"Предмет4" - тот предмет который мы хотим получить.

Пример №1. Смешивание предметов

"Давний способ получения крутого меча это кинуть в котел книгу, добавить плевок лягушки и посыпать снегом"
Примерно так теперь получают в Варкрафте артефакты и опять таки эта информация стала мега популярной после дота. Не будем отвлекаться и перейдем к делу. Для крафта нам понадобится создать предметы которые будем смешивать и предмет который мы после этого получим.
И так простой триггер:

> ??Событие:??
> -Боевая единица - A unit Получает предмет 
> ??Условие:??
> -(Triggering unit) has an item of type "Предмет1" равно Да
> -(Triggering unit) has an item of type "Предмет2" равно Да
> -(Triggering unit) has an item of type "Предмет3" равно Да
> ??Действие:??
> -Предмет - Remove (Item carried by (Triggering unit) of type "Предмет1")
> -Предмет - Remove (Item carried by (Triggering unit) of type "Предмет2")
> -Предмет - Remove (Item carried by (Triggering unit) of type "Предмет3")
> -Герой - Create "Предмет4" and give it to hero (Triggering unit)



Пример №2. Смешивание одинаковых предметов

Тут уже нам потребуется помимо предметов еще и переменная. Сделаем предмет из 3х одинаковых.
Дополнительно используемые объекты:
"переменная Целочисленная" - в нее будет записываться количество предметов у нас в рюкзаке

> ??Событие:??
> -Боевая единица - A unit Получает предмет 
> ??Условие:??
> -(Triggering unit) has an item of type "Предмет1" равно Да
> ??Действие:??
> -Set "переменная Целочисленная" = 0
> -For each (Integer A) from 1 to 6, fo (Actions)
> --Цикл - действия:
> ---If\Then\Else, multiple function
> ----Если - условие:
> -----(Item type of (Item carried by(Hero manipulating item) in slot (Integer A))) равно "Предмет1"
> ----То - Действие:
> -----Set "переменная Целочисленная" = (Set "переменная Целочисленная" + 1)
> -----If\Then\Else, multiple function
> ------Если - условие:
> -------"переменная Целочисленная" равно 3
> ------То - Действие:
> -------For each (Integer A) from 1 to 3, fo (Actions)
> --------Цикл - действия:
> ---------Предмет - Remove (Item carried by (Triggering unit) of type "Предмет1")
> -------Герой - Create "Предмет4" and give it to hero (Triggering unit)
> ------Иначе - Действие:
> ----Иначе - Действие:

Вот такой вот забавный пример)


Пример №3. Складывание предметов

И так складывание:

> ??Событие:??
> -Боевая единица - A unit Получает предмет 
> ??Условие:??
> -(Charges remaining in (Item being manipulated) больше 10
> ??Действие:??
> -Герой - Drop (Item being manipulated) frome (Hero manipulating item)
> -If\Then\Else, multiple function
> --Если - условие:
> ---(Hero manipulating item) has an item of type (Item-type of (Item being manipulated)) равно Нет
> --То - Действие:
> ---Предмет - Create (Item-type of (Item being manipulated)) at (Position of (Hero manipulating item))
> ---Триггер - Turn off (This trigger)
> ---Герой - Give (Last created item) to (Hero manipulating item) 
> ---Триггер - Turn on (This trigger)
> ---Предмет - Set Charges remaining in (Last created item) to ((Charges remaining in(Item being manipulated))
> --Иначе - Действие:
> ---Предмет - Set Charges remaining in (Item carried by (Hero manipulating item)  of type (Item-type of (Item being manipulated))) to (Charges remaining in(Item carried by (Hero manipulating item)  of type (Item-type of (Item being manipulated))) + Charges remaining in (Item being manipulated))
> -Предмет - Remove (Item being manipulated)



Космети.

Теперь не хватает какого-нибудь спецэффекта, и тут все поправимо:
-Спецэффект - Create a special effect attach to the original\head\chest of (Triggering unit) using Abilities\Spells\Human\ReviveHuman\ReviveHuman.mdl

Просмотров: 7 263

Sergant1000 #1 - 4 года назад -2
добавил пример складывания предметов.
map_maiker #2 - 4 года назад -2
yt cjdctv gjyzk
не совсем понял
2 комментария удалено
НЕзаяЦ #5 - 2 месяца назад 0
Привел бы лучше пример, где заряды добавляются при всех шести слотах занятых. В таком примере толк очевиден.
Steal nerves #7 - 2 месяца назад (отредактировано ) 0
НЕзаяЦ, используется руна при занятых слотах. Надо знать, что у тебя будет два разных предмета - руна и настоящий итем, который будет лежать в инвентаре. Короче между ними есть связь.
» раскрыть
вообще-то нужно понимать логику и еще неплохо понимать, что лучше использовать циклы по слотам, так как в гуишном варианте есть утечка - там локалка не обнуляется.
xgm.guru/forum/showpost.php?p=503628&postcount=5 тут показано как отследить получения руны
xgm.guru/p/wc3/powerups про руны
потом циклом пробегаешь по слотам, проверяя есть ли такой предмет. На jass есть функция - "предмет в слоте N", ее вот можно использовать.
В условии сравниваешь Тип предмета (предмет в слоте N) == "Счастливая монетка"
Добавляешь заряды этому предмету и все. Можно прописать условие выхода из цикла. В гуи надо пометить как-то, что мы нашли предмет и выходим из цикла.
Если надо всем предметам, то тогда надо чуть-чуть изменить условие. Уберите это условие выхода, пускай до конца работает.