WarCraft 3: Апающийся предмет

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

Пример №1: Предмет апается с героем.

Вариант А

Самый простой пример из возможных:

> ??Событие:??
> -Боевая единица - A unit Повышает уровень
> ??Условие:??
> -((Triggering unit) has an item of type "предмет1") равно Да
> ??Действие:??
> -Боевая единица - Increase level of "способность предмета1" for (Triggering unit)

Минус же такой "фичи" в том что если вы выбросите предмет, а потом подымите то потеряете все прибавки за уровень. Следовательно:

Вариант Б

Дополнительно используемые объекты:
"предмет2" - следующий по уровню предмет .
нам нужно заменять предмет низкого уровня на следующий по рангу.

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

Теперь предмет даже если выпадет то при поднятии оного все бонусы сохранятся.

Пример №2: Предмет апается сам (замена предмета).

Дополнительно используемые объекты:
"предмет2" - следующий по уровню предмет после "предмет1".
"предмет3" - следующий по уровню предмет после "предмет2".
"ItemExp" - переменная "Целочисленная" массив. Она будет играть роль опыта у предмета. Номер массива это предмет.
Тут мы уже используем переменную чтобы опыт копился у конкретного предмета. и создаем предметы, так как повышение уровня у нас будет через замену предмета. Получение опыта будет через убийство монстров.

> ??Событие:??
> -Боевая единица - A unit Умирает
> ??Условие:??
> -Multiple ConditionsOr - Any (Conditions) are true
> --Условие:
> ---((Killing unit) has an item of type "предмет1") равно Да
> ---((Killing unit) has an item of type "предмет2") равно Да
> ??Действие:??
> -Set "ItemExp"[1] равно ("ItemExp"[1] + 1)
> -If\Then\Else, multiple function
> --Если - условие:
> ---"ItemExp"[1] Больше или равно 50
> ---((Killing unit) has an item of type "Предмет1") равно Да
> --То - Действие:
> ---Set "ItemExp"[1] равно 0
> ---Предмет - Remove (Item carried by ((Killing unit) of type "предмет1")
> ---Герой Create "предмет2" and give it to ((Killing unit)
> --Иначе - Действие:
> ---If\Then\Else, multiple function
> ----Если - условие:
> -----"ItemExp"[1] Больше или равно 100
> -----((Killing unit) has an item of type "Предмет2") равно Да
> ----То - Действие:
> -----Set "ItemExp"[1] равно 0
> -----Предмет - Remove (Item carried by ((Killing unit) of type "предмет2")
> -----Герой Create "предмет3" and give it to ((Killing unit)
> ----Иначе - Действие:

И так что у нас получилось, при убийстве когда у героя есть предмет "предмет1" у нас набирается опыт в переменную "ItemExp"[1] и при достижении 50 предмет "предмет1" меняется на "предмет2" и обнуляется "ItemExp"[1]. Позже когда "ItemExp"[1] станет 100 предмет "предмет2" меняется на "предмет3".

Пример №3: Предмет апается сам (количество зарядов).

Дополнительно используемые объекты:
"ItemExp" - переменная "Целочисленная" массив. Она будет играть роль опыта у предмета. Номер массива это предмет.
И еще один способ, Предмет будет расти так же как и в Примере №2: но не будет заменятся на другой предмет, а уровень предмета будет измеряться в зарядах. Что избавит нас от создания лишних предметов и способностей. Надо будет всего лишь в способности предмета установить что она в моем случае имеет 10 уровней ну и соответственно проставить характеристики.

> ??Событие:??
> -Боевая единица - A unit Умирает
> ??Условие:??
> -((Killing unit) has an item of type "предмет1") равно Да
> -(Charges remaining in (Item carried by (Killing unit) of type "предмет1")) меньше или равно 10
> ??Действие:??
> -Set "ItemExp"[1] равно ("ItemExp"[1] + 1)
> -If\Then\Else, multiple function
> --Если - условие:
> ---"ItemExp"[1] Больше или равно (10 х (Charges remaining in (Item carried by (Killing unit) of type "предмет1")
> --То - Действие:
> ---Set "ItemExp"[1] равно 0
> ---Предмет - Set Charges remaining in (Item carried by (Killing unit) of type "предмет1") to ((Charges remaining in (Item carried by (Killing unit) of type "предмет1") + 1)
> ---Боевая единица - Set level of "способность1"  for (Killing unit) to (Charges remaining in (Item carried by (Killing unit) of type "предмет1")
> --Иначе - Действие:

Расшифровываю выше написанное. При убийстве юнита если у героя, есть предмет "предмет1" и добавляем в условие что зарядов в предмете "предмет1" не более 10 тем самым ограничив рост зарядов предмета. Мы увеличиваем "ItemExp"[1] на 1 и при каждом достижении 10 убитых умноженных на количество зарядов в предмете в предмет добавляется заряд и способность принадлежащая предмету становится уровнем равная количеству зарядов.
но теперь у нас тоже ерунда как и с Примером №1 Вариант А. Мы бросили предмет а при поднятии никаких бонусов по уровню. Для исправления оного нам потребуется триггер на поднятие.

Событие
> -Боевая единица - A unit Получает предмет
Условие
> -(Item-type of (Item being manipulated)) равно "предмет1"
Действие
> -Set "ItemExp"[1] равно ("ItemExp"[1] + 1)
> -Боевая единица - Set level of "способность1"  for (Triggering unit) to charges remaining in (Item being manipulated)
> --Иначе - Действие:

Вот так вот. Пример-карте содержит все выше описанные примеры.


Космети.

Теперь не хватает какого-нибудь спец эффекта, и тут все поправимо:
-Спецэффект - Create a special effect attach to the original\head\chest of (Triggering unit) using Abilities\Spells\Human\ReviveHuman\ReviveHuman.mdl
Неплохо добавить в тригер когда апается предмет "Плавающий текст" который будет отображать сие действие, для этого добавим:
-Плавающий текст - Create floating text that reads "|c0000FFFFItem Level Up.|r" at (Position of (Triggering unit)) with offset 0.00, using font size 10.00 color (100.00%, 100.00%, 100.00%) and 0.00% transparency
-Плавающий текст - Set the velocity of (Last created floating text) to 42.00 towards 90.00 degrees
-Плавающий текст - Скрыть (Last created floating text) for (All enemies of (Owner of (Triggering unit)))
-Плавающий текст - Change (Last created floating text): Заблокировать permanence
-Плавающий текст - Change the lifespan of (Last created floating text) to 2.00 seconds

Просмотров: 3 624

» Лучшие комментарии


PhysCraft #1 - 5 лет назад 3
Неплохая идея развития предмета самого по себе, что то наподобие фростморна, поглощяющего души убитих воинов.
Sergant1000 #2 - 5 лет назад (отредактировано ) 1
да да, тут фантазию есть куда развернуть)
Zahanc #3 - 5 лет назад 0
Назвали бы грамотно статью-то. Кому придет в голову ввести такое словосочетание в поиск?
Darkew #4 - 3 года назад 0
А если у нескольких героев есть этот предмет? У всех будет набираться опыт отдельно? Или будет баг?
SomeFire #5 - 3 года назад 0
Darkew, как ты мог заметить, экспа сохраняется в массив, а не отдельную переменную, значит у каждого предмета/героя экспа своя. Это раз. Во-вторых, посмотри на действия. Видишь там слова "for (Triggering unit)"? Они означают, что действие происходит для одного конкретного юнита.
Ты не с того начал изучать триггеры. Начни не с примеров, а со статей, которые описывают азы.