» канал
Как известно, в варкрафте новые способности можно создавать либо триггерно, либо на основе имеющихся. Второй вариант ничего интересного собой не представляет, а первый был уже описан на этом форуме не раз. Однако я хочу остановится на одном аспекте триггерных заклятий, а именно - на абилке, по которой будет кликать юзер.
В варкрафте есть замечательная абилка - канал. Сама по себе она ничего не делает и является "Бланковой".
Найти эту абилку можно здесь: Редактор обьектов - способности - нейтрально-врадждебные - герой - канал
Рассмотрим данные у этой абилки:
Базовый ID приказа
Это одна из основных возможностей абилки - которая делает ее уникальной. Дело в том, что в ВарКрафте у каждой способности есть ID приказа. И если у героя две способности с одним ID, то при касте любой из них будет срабатывать одна из них (то есть все равно на какую абилку кликать, сработает все равно одно и то же). Например мы сделали 2 абилки на основе благословления - одна быстро перезаряжается, но мало лечит, другая наоборот. И если попытаться всучить обе абилки одному юниту то работать не будет, так как у них одинаковый ID - "Holybolt"
С абилкой "Канал" все по другому. У нее можно менять ID приказа, и если сделать две абилки на основе "Канала", с разными ID, то всучив их одному юниту работать будут обе.
ID приказа может быть любым, но не должен совпадать с имеющимися. То есть если у вас и так есть заклинание "благословление", то добавление к этому герою абилки на основе "канала" с ID приказа "Holybolt" ничего делать не будет.
На самом деле ID приказов много, поэтому даже выбрав случайный, мало шансов, что он совпадет с имеющимися у этого героя заклятиями. Просто если какая-нибудь абилка глючит, поменяйте у нее ID на другой.

Параметры. Всего 5 штук:

Изображение
Изображение указателя цели
Материальное заклинание
Универсальное заклинание
Только ручное применение
Что они означают:
Изображение: Если галка стоит, то в игре у юнита появится изображение, по которому можно кликать. Для абилок, которые нужно активировать этот параметр - обязателен. Местоположение иконки можно настроить в параметре "Графика: Положение кнопки: Используется (Х)" и "Графика: Положение кнопки: Используется (Y)", а иконку можно настроить в "Графика - Пиктограмма: Используется". Если галка не стоит, иконки абилки у юнита не будет, но ее можно колдовать триггерно. Если изображение есть, то его можно активировать щелчком на "Горячую клавишу", настраиваемую в "Текст - горячая клавиша используется"
Изображение указателя цели. Если установить эту галку, то сам еще понадобится установить "Характеристики: Область воздействия" на не-нулевую величину. (например, 200). Когда вы будете прицеливаться заклинанием, на карте будет круг такого радиуса, которого вы установили в "Характеристики: Область воздействия". Круг будет выглядеть, как например при заклинании "Огненный столб": Когда целишся им, видна область воздействия. Если этой галки нет, то прицеливать заклинание нужно будет обычным варкрафтским курсором (как например когда целишся заклинанием "Волна силы")
Материальное заклинание: Что делает эта галка до конца не изучил, но по-моему если ее поставить, то заклинание не будет работать на существа в мире духов (т.е. те, которые находятся под воздействием заклинания "Изгнание в астрал", "Бегство в астрал" или "Мир духов")
Универсальное заклинание: Если эта галка стоит, то заклинание будет действовать на существ, невосприимчивых к магии, если не стоит, то при касте на неуязвимого к магии юнита (например, голема) вы получите сообщение типа "Этот воин невосприимчив к магии"
Только ручное применение. Этот параметр определяет как будет использоватся заклинание если отдать приказ сразу группе юнитов с этой способностью. Если эта галка стоит, то способность использует только один из группы, если нет - то сразу вся группа.
Спасибо Cosmos'у за разъяснение.
» остальные характеристики

Данные: Тип цели.

Если тип цели - "Нет" то эта абилка будет срабатывать сразу при щелчке на ней, (например "Божественный щит"), если тип цели - другой, то заклинанием нужно будет прицелится. Если тип цели - "Боевая единица", то целится можно только в любого юнита (Например, похищение маны), ести тип - "Точка", то целится можно куда угодно, но целью будет считаться точка (например - "Скачок"), а если тип - "Точка или боевая единица", то если целишься в боевую единицу, то будет считатся каст на нее, если нет - считатся каст в точку. Пример - способность "Точка сбора", определяющая куда побежит юнит, родившийся в бараках. Если указать на точку то бегать будет в точку, а если на юнита - то за юнитом. Или скилы "волна силы", "темная стая" можно кастовать так в юнита, так и в точку
На какие цели можно колдовать, можно выбрать в "Харкатеристики - разрешенные цели"

Данные: Следовать в течении времени.

Это для создания способностей типа "channelling-анимации". Когда абилка кастуется, то она будет длиться не больше чем указанное время. Channelling-анимации есть в таких скиллах как например: буран, заговор неуязвимости, покой, туман, землетрясение, звездопад и другие. В чем разница этих между остальными? В том, что юнит при нажатий на абилку начинает производить анимацию (махания руками, типа заклинания произносит). Все это время кастер будет стоять, ничего не делая, и махая руками, произносить заклинание. Казалось бы, этот параметр ничего не значит, зачем он нужен? Он нужен, чтобы создать например: триггерный буран: мы может отследить начало применения и завершение применения.
Когда юнит юзает абилку (начало) - отслеживаем событием "юнит приводит способность в действие"
завершение абилки (конец) - отслеживаем событием "юнит завершает применение способности"
отмена абилки (отмена) - отслеживаем событием "юнит прекращает применение способности"

Данные: Отключить прочие способности

Отвечает за разрыв заклинания. Может ли юнит прервать заклинание во время каста. Возьмем, пример буран. Когда архимаг кастует, он без конца произносит заклинание. В стандартном скиле это заклинание можно прервать (достаточно отдать ему любой другой приказ, и заклинание прервется). Но, мы можем сделать такой триггерный буран, чтоб архимага нельзя было прервать с этой настройкой.
Если стоит "Да", то пока идет время, указанное в предыдущем параметре (следовать в течений времени), юнит ничего не может сделать (даже отменить заклинание). Если стоит "Нет", то во время использования способности юниту можно отдать приказ делать что-либо, но это будет считаться отменой использования этой способности. Пример - "Похищение жизни" - пока похищаешь двигаться не можешь, любое движение - разрыв заклинания.

Данные: Длительность графики

Когда колдуете заклинание, на цель будет периодически накладываться спецэффект. Установите этот параметр, чтобы указать, как часто он будет накладываться. Например если вы установите спецэффект - какой-нибудь взрыв и этот параметр на 3, то пока вы колдуете заклинание, каждые 3 секунды на цель накладывается взрыв. Цели, конечное, ничего от этого не будет, что это будет делать, нужно писать триггерами.
Теперь немного насчет эффектов.
При касте способности на мага будет 1 раз наложен эффект, обозначеный в "Графика - Маг".
На цель эффект накладывается периодически, с периодом обозначеным в "Данные: Длительность графики". Установите значение 0, чтобы эффект наложился 1 раз (при касте).
Если ваша цель - юнит, то наложеный спецэффект берется из "Графика - цель", если точка - то берется из "Графика - Эффект". Куда будет приложен эффект для мага (над головой, к руке и.т.п), настраивается в "Графика - точки приложения заклинания 1" (и "точки приложения заклинания 2"). Куда будет приложен эффект для цели выбирается в "Графика - воздействие на цель 1" (и до 6)
Теперь схема действия этой абилки (как это все работает):
» объяснение автором: как работает любая абилка (это очень важно понимать на каком этапе срабатывают события)
Герой щелкает на абилку.
Если параметр "Тип Цели" не равен "Нет", то герой выбирает куда кастовать
Если параметр "Изображение указателя цели" включен, то будет отображен круг каста, радиусом, установленном в "Характеристики - область воздействия"
Герой бежит к цели, на расстояние, указанное в "Характеристики - радиус действия"
Вызывается триггер "Юнит начинает направлять способность
Проходит время, указанное в "Характеристики - время подготовки заклинания"
У героя тратится мана, указанная в "Характеристики - Затрачиваемая мана"
Вызывается триггер "Юнит начинает применять способность
Проходит малый промежуток времени
Начинается перезарядка, указанная в "Характеристики - перезарядка"
(Примечание: Да-да, перезарядка начинается именно здесь. То есть пока способность будет "Доколдовываться", перезарядка уже идет.
Вызывается триггер "Юнит приводит способность в действие
На кастере отображается спецэффект, указанный в "Графика - Маг"
Если цель - точка, то на ней каждые "Данные - длительность графики" секунд отображается спецэффект "Графика - Эффект"
Если цель - юнит, то на ней каждые "Данные - длительность графики" секунд отображается спецэффект "Графика - Цель"
ЛИБО проходит время, указанное в "Данные - Следовать в течении времени", ЛИБО игрок отменяет заклинание до того, как пройдет время
Вызывается триггер "Юнит прекращает применение способности"
ЕСЛИ игрок не отменял заклинания (то есть прошло время), то:
Вызывается триггер "Юнит завершает применение способности"
(в противном случае триггер не вызывается)
Юнит получает возможность двигаться
Аминь...
канал - идеальная абилка. Но бывают случаи когда нужен особый скилл (то что дальше пойдет это мечты):
  • с авто-кастом (по цели/без цели = берем автокастовую и делаем из нее пустышку, еще нужны настройки когда и на кого работает автокаст)
  • мгновенный (кастуется без задержек, юнит не останавливается для произношения заклинания и абила не сбивает приказ. Пример безумие, стремительность. Или мгновенно-целевая абилка, мгновенных целевых абил практически не припомнить. Лучше было вызывать прицелы других абил. Есть у тебя 2 абилы - одна пустышка, другая это прицел. При нажатии на пустышку вызывается прицел другой абилки. Так не хватает возможностей вызывать прицел. Не каст и не приказ, заметьте!!! Обычно у целевых абил происходит в 2 клика: 1 клик по кнопке - вызов прицела, 2 - на цель. Скажу так прицельные абилы все равно получаются не мгновенными, тк в последствии им надо поближе к цели подбежать)
  • кэширование приказов. Способности на одной основе могли бы иметь разные приказы. Возможность менять приказ, как у канала. (есть у нас мгновенные абилы, и скажу, их не много. Это очень помогло бы наделать дубликаты)
  • требование маны и возможность нацепить баффы (при чем разные баффы)
  • возможность дать ресурсы (абилка типа "поставка ресурсов", например за определенную сумму можно сделать триггерный каст) или заряды (возможность манипулировать ими, желательно триггерно, а то бесполезны так)
  • переключаемый (возможность изменять форму или часть, или добавлять атаку)
  • либо вообще пассивка
» техника
Техника 'ANeg' - пассивка, которая заменяет способность на другую, с улучшенными характеристиками (в характеристиках указано несколько полей-слотов. Сколько слотов, столько и способностей, которые будут заменены. Максимум 4 абилки могут быть усовершенствованы. в одном слоте можно указать две абилки: первая эта та, которую хотят заменить, вторая эта та, которой заменяют. Вторая абилка, как правило, имеет улучшенные характеристики (например: больше урона, меньше перезарядки, меньше расхода маны и др). Также увеличивает силу атаки и скорость перемещения
Факты:
  1. Если удалить технику, то вернется все на место.
  2. КД можно изменить, снизить. Делаешь два бурана. У одного перезарядка: 30 секунд, у другого 10 секунд. Если запустить кулдаун первой абилки, и потом сразу же дать технику, то абилка заменяется на вторую. Но кулдаун в 30 секунд не сбрасывает. После перезарядки у вас будет меньше кулдауна - 10 секунд.
  3. Раньше думал, что техника сбрасывает кд у абил с разными ID (например, буран и огненный столб - это две разные абилки, и разные ID). Так как абилы с одинаковым ID имеют общую перезарядку. На деле, после смены кд остается висеть на второй абилке. Пробовал активную способность с запущенным кд заменить на пассивку, в результате получал пассивку с кд. Что если использовать безумие + техника = пассивка с кд. безумие не сбивает приказы.
  4. Если менять с пасивки на активку, то невозможно запустить активную способность. Она будто бы превратилась в пассивку, не кликается.
  5. Если дать скилл "Техника" обычному юниту (не герою), то будет фатал...
Работая с данной способностью я заметил несколько интересных фактов.
Предупреждение: данная способность очень нестабильная и на нее влияет практически все, так что прежде чем говорить что я не прав, самостоятельно попробуйте разные варианты.
1)Если стандартная способность на основе "Канал" - то заменить можно только на канал, но при этом стартовая способность может быть например без цели, а новая как угодно настроенная.
2)Если заставить героя выучить пустышки и давать ему разные "Техники" то мы будем менять способности героя без потери кд, но кд и id приказа у этих способностей будет равно кд и id пустышки, у "Канала" немного по другому: id приказа берется не пустышки, а первой заменной способности , то есть у юнита был канал с id приказа "громовая поступь" мы заменили на "волну силы" и дальше везде будет волна силы.
3)Также с помощью "техники" возможно делать поочередную смену моделей героя: допустим у героя есть "перевоплощение" без времени действия и произношения, то мы можем превратить юнита A в юнита B и заменить техникой способность где, юнит B меняется на юнита C, при следующем юзе мы даем способность где, C меняем на A. И мы получаем трансформ с 3 последовательно меняющимися моделями, но ведь 3 это не предел, так можно менять хоть 6, хоть 10. Вся фишка в том, нужно указать в перевоплощений нормальную форму - ту, в которую хотите превратиться
4)Технику нельзя добавлять обычным юнитам, т.е только героям. (с) quq_CCCP
5)Если вы химичите со стандартными способностями, очень важную роль играет, что вы выучите первым, сам скил или технику
6)Если первая техника превращает скил в пассивку, то все следующие замененые скилы будут пассивными (например был скил "Волна силы" активный после замены, стал пассивный и любой другой который мы заменяем).
7)С помощью техники можно менять спелбуки.
Неудачи:
1)Попытка менять способность "Темный", с помощью "техники" провалилась.
Я понимаю, что тут очень мало информации, но это пока все, что я успел обнаружить. Vadik29
» книга заклинаний
Книга заклинаний (spellbook) 'Aspb'
Всё о спеллбуке(книга заклинаний)
Описание
Абилка спеллбук представляет собой абилку, содержащую в себе от 0 до 11 абилок,
Spellbook находится в Special\Items (Особые\Итемы). Имеет код 'Aspb'.
Имеет 5 полей:
Базовый ID приказа (Base Order ID) - приказ спеллбука (не верьте ему, спеллбук вы этим приказом не откроете. Никак триггерно не вызывается, не отслеживается), существует для того, что бы при создании 2ух или более спеллбуков, спеллбуки не склеивались, если Base Order ID одинаковый, то они склеются, если разный, то нет.
» Что значит склеиваются?
Объясню: у вас есть два спелбука: в одном спелбуке-1 заложен скилл "Гнев деревьев", в другом спелбуке-2 прописаны "Рассеять чары", "Рев". Если у юнита есть спелбук-1, и добавить ему спелбук-2. Эти два спелбука не склеиваются в один буквально, на панеле юнита появится вторая иконка от спелбука-2. Короче на панеле будет две кнопки. Склеивается их содержимое - скилы в книге. Если заглянуть в спелбук-1 или спелбук-2, то можно увидеть три скила: "Гнев деревьев", "Рассеять чары", "Рев". Если нужно скрыть иконку одного из спелбука, можно заблокировать этот спелбук, тогда иконки от спелбука видно не будет. Это не значит, что и содержимое спелбука недоступно, просто содержимого не увидишь (нет кнопки - невозможно открыть, но эффекты со вторым спелбуком склеиваются). Эту особую фишку можно использовать для добавления в книгу скилов. Безграничное множество невидимых спелбуков можно надобавлять (правда скилов вместиться может 11). Для удаления из книги некоторых скилов можно удалить сам спелбук, тогда и содержимое с ним удаляется. Или можно удалить триггерно в спелбуке какой-то скилл.
Максимум заклинаний (Maximum Spells) - Максимальное количество спеллов в спеллбуке.
Минимум заклинаний (Minimum Spells) - Минисальное количество спеллов в спеллбуке.
Внимание: максимальное и минимальное количество спеллов должно быть одинаковое, иначе некоторые спеллы могут не появится! Если вы конечно намеренно не делаете рандомные спеллы с спеллбуке.
Перезарядка общего заклинания (Shared Spell Cooldown) - общий кулдаун спеллов в спеллбуке (но это не совсем так - кулдаун у одного спелла, но ещё кулдаунится спеллбук, но если у вас есть ещё один спеллбук с таким же Base Order ID, то вы увидите, что перезаряжается только один спелл и спеллбук).
Список заклинаний(Spell List) - собственно лист спеллов, в том случае, если вы хотите фиксированное количество спеллов, количество спеллов должно быть равно Maximum и Minimum Spells, но и может быть не равно, если вы хотите рандом.
Применение
Ну применяется спеллбук по разному:
Стандартный метод применения - собственно книжка с заклинаниями, которая содержит от 1 до 11 заклинаний.
Спеллбук с добавлением спеллов в него - ну впринципе похоже на 1ый способ, но различие в том, что можно спеллы добаляются по желанию во время игры (спеллбуки с одинаковыми Base Order ID).
Спеллбук с мультилевелными спеллами - используется первый или 2ой способ + увеличение левелов абилок, используется чаще всего в расширенных инвенторях (бонус типа +3 к Storm Bolt)
Можете через триггеры повышать/понижать уровень способности, которая лежит в книге. Триггерно также можно и удалить.
Скрывание пассивных абилок - используется в том случае если надо, что бы пассивка давала бонус, но иконки не было видно. Метод: добавляется спеллбук с пассивкой и спеллбук запрещается для игрока. В этом случае спеллбука видно не будет, но пассивка будет давать бонус. Пассивка может быть и мультилевелная.
Используется как меню - используется в системах типа Attributes Menu, в спеллбук добавляются дамми абилки,при касте которых прокачиваются аттрибуты или совершаются другие какие-либо действия.

Баги

Как не прискорбно,но в каждой хорошей абилке есть свои баги,но в этом случае почти все связаны с загрузкой сэйвов:
При загрузке абилка в спеллбуке удаляется и добавляется - Ну самый главный баг спеллбука,остальные баги вытекают из него.
Сброс левела мультилевелных абилок - Ну собственно при загрузке левел абилок сбрасывается,так как они удаляются и добавляются 1 левела.
Этот баг лечится записью в кэш левелов абилок и созданием триггера, который при загрузке ставит левел абилок на нужный.
Сброс кулдаунов абилок - лечится только тем, что вы делаете кулдаун абилок через таймеры или триггеры.
Привязанные суммоны и иллюзии умирают - ну абилки типа feral spirit и mirror image создают привязанных суммонов и иллюзий, которые при удалении абилки исчезают. Лечится дамми кастом.
Спеллы в спеллбуке(если спеллбуков несколько и с одинковым ID) при загрузке выстраиваются в обратном порядке - лечится удалением спеллбуков и добавлением их в нужном порядке (имхо лучше не фиксить).
Ну и напоследок пара багов не связанных с загрузкой:
Спеллбук нельзя открыть приказом и нельзя отследить его нажатие - не лечится. Пишут, что можно открыть спеллбук кодом можно с помощью мемхака или ForceUIkey с помощью хоткея спеллбука (для этого нужно выделить юнита), потом отдать приказ на каст скилла (см ссылку). Лечится созданием точно такой же абилки но с 0 параметрами. Добавляем её юниту и запрещаем, а когда надо вызвать триггерно - разрешаем,приказ,запрещаем.
Интересный факт: проверял наличие способности у юнита, которая заложена в спелбуке (level of ability >= 1). И заметил, когда даем спелбук, нам показывают, что эта способность есть в наличии. Только, вот приказом заюзать не можем (например, хотим чтобы бот заюзал скилл из книжки, отдаем приказ ему. Но он не может применить (видимо нужно открыть спелбук), поэтому советую давать скилл отдельно и юзать приказом или другими нестандартными способами). А вот когда убираем спелбук, то и содержимое пропадает.
Кстати, я пробовал как-то однажды, для теста отключить атаку (чтобы не бил моих подчиненных), и случайно забыл убрать spellbook от прошлого теста. И бот постоянно юзал корни из spellbook на тех, кто его бил. Где-то в модели поведения ИИ прописано это
» повторка
Aspb (Книга заклинаний (спеллбук))
“Книга заклинаний” является вместилищем 11 других способностей. Она может содержать активные способности наравне с автокаст- и пассивными способностями, и даже способности героев.
Главная особенность способности заключается в том, что она сохраняет эффект пассивных способностей, находящихся в спеллбуке даже в том случае, когда 'Aspb' отключена для игрока. Спеллбук может использоваться для скрытия иконок любой пассивной способности и, таким образом, экономить ячейки на карте команд.
Второй особенностью является то, что Вы можете добавить и удалить способности в спеллбук в любой момент игры. Это осуществляется путем добавления боевой единице второго спеллбука со способностью, которую необходимо добавить, и отключением этого второго спеллбука. После выполнения этого действия способность отобразится в первом спеллбуке, в то время как второй будут невидим. Чтобы это подействовало, оба спеллбука должны иметь один и тот же базовый ID приказа. Для каждой способности, которую нужно добавить в процессе игры, Вам необходим такой дополнительный спеллбук.
Еще одна отличительная особенность: геройские способности в спеллбуках доступны для улучшения! Проблема лишь в том, что их начальный уровень – 1, а не нулевой (если они изначально находились в спеллбуке). Но это легко решается триггерно. Просто-напросто вначале добавьте эти способности герою (в редакторе объектов). Затем отлавливайте изучение героем способности, удаляйте эту способность и добавляйте ее в спеллбук.
Activate Ability в мем хаке
function Learn_Actions takes nothing returns nothing
if GetLearnedSkillLevel() == 1 and GetLearnedSkill() == 'AHwe' then к примеру, изучим "Дух воды"
call UnitRemoveAbility(GetTriggerUnit(), GetLearnedSkill())
call UnitAddAbility(GetLearningUnit(), 'Aspb') 'Aspb' - равкод спеллбука с заклинанием "Дух воды"
call UnitMakeAbilityPermanent(u, 'Aspb') сделаем способности постоянными
call UnitMakeAbilityPermanent(u, 'AHwe')
endif
endfunction
function Learn takes nothing returns nothing
local trigger t = CreateTrigger() создание динамического триггера
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_HERO_SKILL) событие - боевая единица приобретает способность
call TriggerAddAction(t, function Learn_Actions) создание действия для динамического триггера
endfunction
» случайный итем
Случайный Предмет 'AIri' - создает вместо указанного итема новый случайный итем (короче подмена итема на случайный). Правда, заметил, что не на всех итемах это работает. Работает это с высокоуровневыми итемами, иначе пишет: "не удается заменить" (хотя там по другому пишет, не по русски. но смысл передал). Также как вижу создается не случайные итемы почему-то у меня. Тестил на 10 итемах, все время заменяется на свиток омоложения.
» строительство
Строительство 'AHbu'/'AObu'/'AUbu'/'AEbu'/'AGbu'/'ANbu' - иконку кнопки строительства можно поменять, изменив в одной из указанных абилок иконку. Это абсолютно разные способности от каждой расы. Может показаться пустышками, но имеют реальные настройки (в мемхаке это что-то вроде контейнеров, или спелбуков). Открывают меню строительства. Также после того, как выбрали здание, и определились куда ставить, у каждой этой рассовой способности есть своя особенность строительства. Человечки строят своими руками, могут даже бросить и убежать от постройки. У нежити само строится, как поставится (будто призраки строят, но это можно отменить). У орков и эльфов рабочие находятся внутри стройки. Только у эльфов светлячки могут превращаться в древа, если у здание указано классификация "древо".
Описание кнопок и горячие клавиши (hot keys) находятся в Units/CommandStrings.txt
Изменить также можно в "дополнительно"->"игровой интерфейс"
сайт xgm.guru/p/wc3/27713
order_build = 851994
order_humanbuild = 851995
order_orcbuild = 851996
order_nightelfbuild = 851997
order_undeadbuild = 851998
order_resumebuild = 851999
851994-851999 (buildmenu): Приказ (без указания цели), открывающий меню строительства воина, способного возводить здания. Этот приказ не ловится триггером, нужен для того, чтобы открыть меню.

ремонт (автокаст работает, если хп у зданий и древ мало):

Ремонтировать 'Ahrp'/'Arep' - у рабов орков, людей разные автокасты, но действуют одинаково
Обновление 'Arst' - короче типа ремонт у нежити
Обновление 'Aren' - ремонт у эльфов
Эти все способности одинаково работают, но с разными настройками. У них указан дальность ремонта корабля (между берегом и кораблем), % ускорения ремонта и строительства (у здании в РО указано время восстановления и время строительства), и % стоимости за ремонт и строительство. вроде коэффициенты строительства работают, если помогает строить второй (могу ошибаться, но один раб не мог увеличить скорость строительства этими коэффициентами. только со вторым.)
Примечание: как-то делал так, чтобы dummy-юнит достраивал с помощью ремонтных абил здание (как у нежити само строится). Но не мог. Оказалось, что для того, чтобы здание строилось, нужно в поле "Технологии - здание построено" указать хотя бы 1 здание. Варкрафт видимо считает, что раз не указано в меню строительства ни одного здания, то раб не может строить (не путать стройку с ремонтом).
» время строительства можно увеличить, так и снизить:
"Боевая единица - Set Building Construction Progress"
или
native  UnitSetConstructionProgress  takes unit which, integer percentage  returns nothing
если задавать % строительства во время начала стройки здания (событие "юнит начинает строительство"), то это не работает. Возможно здание не успевает создаться или еще не создано, поэтому нужно задавать задержку
Еще я выяснил, когда создается здание, у него вначале хп 1/10 от maxHp.
Чтобы узнать текущий процент, то его нельзя узнать. Нам близарды не предоставили такой возможности.

Можно попробовать узнать % постройки по % здоровья юнита, но это не точно. Если здание начнут бить, то случится фэйл. Здесь % времени стройки, а не % от запаса хп.
текущий процент % = отношению текущего времени к заданному времени. То есть этот процент % - время строительства. Можно ловить начало/отмена/завершение таймером, узнавать текущее время таймера. Это легко делается. Однако, у хуманов рабы могут бросить стройку, и тогда время собьется. Сложнее отследить то, что раб бросает дело. Но к счастью, сделал костыль через приказы
вот карта
его правда надо доработать: накрутить триггер на рабов хуманов, еще так как нужно записывать сколько рабов хуманов строит здание. Так как несколько рабов строить могут. И если один убежит, то система засчитает это как "стройка временно приостановлена". Поэтому нужно запоминать. И да, проверять приказы, это не точно. Еще нужно отсеять некоторые приказы, такие как атаковать и др. И что юнит и цель относятся к одной стороне
» расовые строительства
Принадлежность к одной из рас определяет какая будет кнопочка, и как будет строить.

Строительство людей

Рабочие хуманов ставят постройку в нужную точку, и потом с помощью ремонтных способностей достраивают. Например, у раба хумана "Ремонтировать" 'Ahrp'. Рабочий строит здание не внутри, а снаружи. Он может временно оставить стройку, бросив ее. Очень часто это полезно, когда нужно не достраивать, а временно перекрыть ходы (узкие проходы), и только потом достраивать. Рабочий хуманов строит лишь здания с классификацией "механический (техника)", как указано в абилке "Ремонтировать" 'Ahrp' (пробовал строить древо жизни, он лишь ставит ее в точку, но не может достроить, поэтому нужно настраивать цели). Наверное это можно использовать как фишку, что достраивать не-механические здания его будет другой раб, рабом через клавишу shift ставите дохера здании не достроенных. Также можно убрать ремонтную способность, и тогда строить не сможет раб
Один из главных плюсов хуманов - несколько рабочих могут строить одну ратушу, ускоряя строительство. Это фишка может работать и у орков, эльфов, и нежити. Просто у них отключена эта функция в ремонтных способностях (там все на ноль стоит в строительстве). Есть еще одна особенность, бывают некоторые здания не хотят строить. Обычно могут помогают строить здания из одной расы (например, раб хуманов не будет помогать строить хату орка).

Строительство орков, эльфов

Рабочие строят здание внутри. Чтобы выйти рабочему из здания, ему нужно прервать стройку. В результате стройка отменяется. Это есть из недостатков, зато рабочего не смогут убить, так как внутри стройки находится. Могут строить, несмотря на указанные цели в способностях. Например, при постройке орком древа жизни игнорит, что "механическое" здание или "не механическое" здание.

Насчет строительства эльфийских древ

Существует такая классификация "Древо", что оно делает? Когда древо достраивается, светлячок превращается в "древо", исчезая. Если такой классификации не стоит, светлячок не исчезнет (например, алтарь эльфов, колодцы, гнезда химер).

Строительство нежити

Ставит в точку, и здание само строится. Это доступно расе нежити. Читерская возможность. Иногда хочется, чтобы строитель строил сам. Можно использовать игрушечную ферму, там автоматически строится. Или как-то даймиком застроить пример

Как сделать второе меню строительства

ссылка система сделано немного кривовато. в системе есть задержка при нажатии на кнопку "строить", еще бывают трудности с определением "способности какого юнита отображены на экране". Можете несколько рабов выделить, и тогда будет сложнее определить, кто из них нажал.
другой способ есть недостаток - приказ открыть меню строительства сбивает все текущие orders. Здесь искусственно вызывают меню строителя. Обычно когда жмете на кнопку строить, просматривая список, у вас не сбивается приказ или очередь приказов.
» продажа или отмена строительства, грабеж
константы:
Компенсация при отмене: строительство здания - Определяет, сколько процентов золота получит игрок при отмене строительства здания от его стоимости. По умолчанию константа равна 0.75 (75%).
Компенсация при отмене: улучшение здания - Определяет, сколько процентов золота получит игрок при отмене улучшения здания от его стоимости. По умолчанию константа равна 0.75 (75%).
Строительство или улучшение здания можно отменить. Правда может не все 100% ресурсов вернуть. Есть константа: "Компенсация при отмене: строительство здания = 0.75" или "Компенсация при отмене: улучшение здания = 0.75"
рассеять здание 'Auns' - это типа продать здание. При рассеиваний наносится урон зданию (ловится дебагом это в качестве урона от лица кастера). Урон относится к типу атаки "Заклинание", не понижается защитой. Время действия заклинания не указано, это значит, оно действует до сих пор, пока здание не уничтожится. Урон наносится каждую секунду.
» Формула вычисления прибавленного ресурса за 1 секунду:
Ресурс=Cost/(hp/damage)*p
где cost - цена здания
p - коэффициент стоимости спасения - указывают процент от стоимости здания (дерево и золото, указанных в ро здания), типа возвращает какой-то процент затраченных ресурсов на создание здания.
damage - указан в поле "шаг накопления".
Грабеж 'Asal' - атакуя здания, воин также похищает ресурсы (как-будто разбирает дом на части на доски, камни и прочее).
» формула вычисления грабежа
характеристики здания:
hp - текущее здоровье здание.
max hp - максимальный запас здоровья здания. Эта штука влияет на вычисления числа ударов.
p hp - условный процент здоровья здания. Эта тоже не нужная штука, пробовал где-то применить, да не пригодилась. p hp = hp/max hp
cost - цена, или ресурс здания. Это влияет на интервал. Чем меньше cost, но больше число a, тем длинее интервал между кражами.

характеристики противника:
damage - чистый урон. Чистым является то, что выходит после всех резистов и понижения защиты. Также стоит учитывать, что от каждого удара число урона может меняться из-за рандома выпада костей. Мне очень сложно понять, что с происходит с интервалом между кражами. Поэтому эта характеристика все время разная. Поэтому для теста пришлось обнулить резисты и защиты, и выравнять кости.

характеристики абилы:
a - шаг накопления - указывается в абиле, это даваемое число золота при грабеже. Иногда это число может меняться, связано это прежде всего с числом k.
k - коэффициент стоимости спасения - коэффициент, указанный в абиле. Этв штука увеличивает или уменьшает интервал между кражами. правда, работает эта штука не как множитель, учавствует в некой формуле. вот эта формула => c = c * (k+(1-k)). к примеру k = 0.5 увеличивает в 2 раза интервал, а вот k = 1.5 наоборот уменьшает интервал.

условные характеристики:
b max - общее число ударов, требуемое для полного уничтожения. Это число зависит от max hp (макс запаса здоровья здания) и от damage (урона противника). это условное число нужное для дальнейшего подсчета, значение может время от времени отличаться. ведь для каждого удара у противника будет разный урон). c = max hp/damage
b - число успешных ударов. это тоже условная единица ничего не говорит. b = (hp/damage)/c
p_price - коэф-т получения золота, получаем будущий множитель. p_price = a/cost
c - интервал между кражами - промежуток (число) ударов, после которых происходит кража. это условная переменная, тк интервал часто меняется из-за урона. тк в каждой атаке разное значение урона выпадает. c=b max*p_price
» пример 1
hp здания = 3000
max hp здания = 4000
p hp (процент хп) = 0.75
cost (стоимость здания) = 77

damage (чистый урон) = 15
a (шаг накопления) = 8
k (коэффициент стоимости спасения) = 1.00
p_price = a/cost = 8/77 = 0.103 <= с 3 знаками после запятой
b max = max hp/damage = 4000/15=266,6 = 267 <= округляем до целых в большую сторону
c = b max*p_price = 267*0.103=27.5
b = (hp/damage)/c = (3000/15)/27.5=200/27.5=7
» пример 2
hp здания = 5000
max hp здания = 6666
p hp (процент хп) = 0.75
cost (стоимость здания) = 255

damage (чистый урон) = 15
a (шаг накопления) = 8
k (коэффициент стоимости спасения) = 1.00
p_price = a/cost = 8/255=0,031 <= с 3 знаками после запятой
b max = max hp/damage = 6666/15=444,4 = 444 <= округляем до целых в большую сторон
c = b max*p_price = 444*0.031=13,764
b = (hp/damage)/c = (5000/15)/13,764=333/13,764=24 <= отсекаем дробную часть
» пример 3
hp здания = 5000
max hp здания = 6666
p hp (процент хп) = 0.75
cost (стоимость здания) = 354

damage (чистый урон) = 15
a (шаг накопления) = 8
k (коэффициент стоимости спасения) = 1.00
p_price = a/cost = 8/354=0,022 <= с 3 знаками после запятой
b max = max hp/damage = 6666/15=444,4 = 444 <= округляем до целых в большую сторон
c = b max*p_price = 444*0.022=9,768
b = (hp/damage)/c = (5000/15)/10=333/10=33.3 = 33 <= отсекаем дробную часть
» пример 4
hp здания = 1041
max hp здания = 2312
b (процент хп) = 0.45
cost (стоимость здания) = 522

damage (чистый урон) = 15
a (шаг накопления) = 8
k (коэффициент стоимости спасения) = 1.00
p_price = a/cost = 8/522=0,015 <= с 3 знаками после запятой
b max = max hp/damage = 2312/15=154,13 = 154 <= округляем до целых в большую сторон
c = b max*p_price = 154*0.015=2,31
b = (hp/damage)/c = (1041/15)/2=69.4/2=30
возможно я в чем-то ошибаюсь в расчетах. Но проверял уже 20 тестов. Вроде нет никаких погрешностей. для разбора есть карта-пример
как узнать стоимость здания? можно попробовать сделать две вещи:
  1. сделать базу данных, на каждый тип здания забиваешь его стоимость
  2. левым игроком попробовать через даймика построить здание где-нибудь в невидимом уголке, и проверять разницу между "было золота" и "стало золота". И удалить здание с дамми.
  3. использовать трансмутацию. За уничтожение юнита дает деньги за стоимость. Правда, целевая.
» Как дать воину способность строить определенный тип зданий без изменения параметров этого воина в редакторе объектов?
AIbt (Игрушечная башня)
AIbb (Игрушечная кузница)
AIbr (Игрушечная лесопилка)
AIbf (Игрушечная ферма)
AIbs (Игрушечные казармы)
AIbh (Игрушечный алтарь)
AIbl (Игрушечный замок)
AIbg (Штукатурка Вождей)
Добавление этой способности позволяет боевым единицам возводить определенное здание, регулируя время его построения в параметрах способности. Недостаток этих всех игрушечных абилок в том, что у них одинаковый приказ (даже с помощью добавления spellbok-а с одинаковым Id-приказом не помогло). У предметов нет с этим проблем, так как приказ в итеме работает отдельно от приказа способности, не наследуется (можно дать абилку юниту AIbh и дать итем с абилкой AIbh, и попробовать запустить по очереди: тут увидите, что абилка запустилась, но кулдаун идет отдельно: если абилку запустили - кулдаун идет у нее; если предмет - кулдаун идет только у предмета). Тоже самое будет с двумя разными предметами с разными игрушечными абилками

Как сделать второе меню строительства

ссылка система сделано немного кривовато. в системе есть задержка при нажатии на кнопку "строить", еще бывают трудности с определением "способности какого юнита отображены на экране". Можете несколько рабов выделить, и тогда будет сложнее определить, кто из них нажал.
другой способ есть недостаток - приказ открыть меню строительства сбивает все текущие orders. Здесь искусственно вызывают меню строителя. Обычно когда жмете на кнопку строить, просматривая список, у вас не сбивается приказ или очередь приказов.
» Влияют на перемещение нейтральных крипов:
Перемещение (торнадо) 'Atwa' - торнадо не стоит на одном месте, и постоянно двигается.
Бродячий (нейтральный) 'Awan' - нейтральные мелкие зверушки (типа свиньи, птицы и др) не стоят на одном месте, и постоянно перемещаются.
» способности связанные с ресурсами и добычей ресурсов, а также за прием ресурсов

РУДНИК

Рудник 'Agld' - открывает в свойствах рудника "количество", где можно указать/отредактировать количество золота. Сильно связана с добычей золота (с такими способностями как "добывать ресурсы", можно нацеливать ПКМ на рудник). Можно триггерно добавить золото (Нейтральный - Add Gold To Gold Mine)

Здания принимает ресурсы

короче юниты с этой абилкой принимают данный ресурс. Например, рабочий рубит лес, он отнесет либо в ратушу или в лесопилку. А у ратуши или лесопилки есть абилка, благодаря которой принимается ресурс:
Вернуть древесину 'Arlm' - принимается лесопилками, некрополями и древами жизни (у некрополя и древа жизни своя система добычи золота)
Вернуть золото 'Argd' - неизвестно где используется. Наверное, предполагалось, как в качестве заготовки.
Вернуть древесину и золото 'Argl' - принимается ратушей Альянса, и ратушей
Эти три поля похожи. Просто галочки "Принимает золото" и "Принимает древесина" по=другому отмечаны.
Здания имеющие абилки Рудник и Вернуть золото автоматически расталкиваются друг от друга (рудник остаётся на месте). А так же не даёт построить его рядом.

Добыча ресурсов

добыча дерева и золота рабами
Добывать ресурсы (золото и древесина) 'Ahar'
Добывать ресурсы (нейтральный) 'ANha'
добыча дерева лесорубами
Добывать ресурсы (древесина вурдалаков) 'Ahrl'
добывать ресурсы (древесина вурдалаков Архимонда) 'Ahr2'
добывать ресурсы (древесина гоблинского резака) 'Ahr3'
пробовал сделать нестандартный ресурс (камень, железо). Просто задать другой класс цели (например в целях задать вместо "деревья" на "декорации". По декору теперь бьет, но этими ударами юнит не добывает дерева. Добыть можно только с типа цели "деревья". как только убираешь с цели "деревья", то все, бесконечно лупит по декору.
добыча золота и дерева светлячками
добывать ресурсы (светлячок в руднике или около дерева) 'Awha' - в характеристиках указано только добыча дерева
добывать ресурсы (золото и древесина светлячков - древние духи) 'Awh2'
добыча золота
Добывать ресурсы (послушник у рудника) 'Aaha' особенность: здесь не указано кол-во добываемое, и еще послушникам не нужно бегать туда-туда. зато указано время в длительность (норм), длительность (герой)
Проклятие рудника 'Abgm' - пассивная способность без иконки. На рудник накладывается эффект круга, куда садятся послушники. Здесь можно указать радиус круга, кол-во послушников, и кол-во добываемого золота.
Оплетение рудника 'Aegm' - пассивная способность без иконки. Указано кол-во добываемого золота и интервал добычи. По стандарту там стоит 10. Но иногда бывает 7, или иногда 4. С чем связано неизвестно. Вот в классическом сражении там в основном руднике дают +10, на доп. руднике +7. А вот на тестовой карте +4.
» Может быть использована для определения, является ли разрушаемый объект деревом.
Здесь создается дамми-юнит (можно невидимым сделать), которого приказом отправляют добывать ресурс. Приказы возвращают логику (если приказ не удался = вернет ложь, если удался истину). И тут же удаляем даймика. Этот код позволяет определить является ли декорация добываемой.
function IsDestructableTree takes destructable d returns boolean
  local boolean i = IsDestructableInvulnerable(d)
  local unit u = CreateUnit(Player(15), ‘ugho’,GetDestructableX(d), GetDestructableY(d), 0)
  local boolean result = false
  call UnitAddAbility(u, 'Aloc')
     if i then
       call SetDestructableInvulnerable(d, false)
     endif
  set result = IssueTargetOrder(u, "harvest", d)
  call RemoveUnit(u)
     if i then
       call SetDestructableInvulnerable(d, true)
     endif
  set u  = null
  return result
endfunction
» Интерфейс = комманды-приказы.
Изменяем CommandStrings.txt Редактирование приказов
Описание кнопок и горячие клавиши (hot keys) находятся в Units/CommandStrings.txt
Изменить также можно в "дополнительно"->"игровой интерфейс"
Атака 'Aatk' - эта способность есть у всех юнитов, вшита в движок (просто эта абилка не отображается в слотах скиллов у юнитов). Связано с кнопкой "атаковать" и с кнопкой "стрелять по местности", если удалить эту способность, то пропадает атака из интерфейса, иконки этих кнопок комманд "Атаковать" и "стрелять по местности" пропадают. Влияют на приказы "attack (атаковать)" = 851983, "attackground (стрелять по местности)" = "851984", и взоможно на "attackonce" = 851985. Удаление этой абилки приводит, как писал, к исчезновению кнопок, и к сожалению, обратно не добавляется эта абилка 'Aatk', и кнопки то же. Можно только морфнуть или заменить триггерно (удалить и добавить заново). Кстати, морф в темного приводит к фаталу
Перемещение 'Amov' - эта способность есть у всех юнитов, вшита в движок (просто эта абилка не отображается в слотах скиллов у юнитов). Связано с кнопками "Двигаться", "Патрулировать", "Удерживать позицию". Влияют на приказы "move (двигаться)" = 851986, "AImove" (двигается АИ, наверное крипы), "patrol (патрулировать)" = 851990, "holdposition (удерживать позицию)" = 851993. Если удалить эту способность, то пропадает надписи о скорости (у юнитов над иконкой щита есть описания, так вот обычно пишут: "скорость перемещения низкая/средняя/высокая", но тут этой записи нет. Юнит перестает двигаться после удаления 'Amov', у него скорость движение равна 0 (обычно такое можно добиться и без удаления скила. В редакторе объектов устанавливаете скорость движения на 0, запускаете карту). У юнита пропадают все три кнопки "Двигаться", "Патрулировать", "Удерживать позицию". к сожалению, обратно не добавляется эта абилка 'Amov', и кнопки то же. Даже, абилка, увеличивающая скорость передвижение, не возвращает на место. Можно только морфнуть или заменить триггерно (удалить и добавить заново).
Патруль 'Apat' - такой способности нет даже в РО. Вообще-то патруль - это часть 'Amov'. Отдельно 'Apat' нельзя использовать.
Удерживать позицию 'Ahld' - такой способности нет даже в РО. Вообще-то удерживать позицию - это часть 'Amov'. Отдельно 'Ahld' нельзя использовать.
Оставить 'Astp' - такой способности нет даже в РО. Связана с кнопкой "Оставить (стоп)". Влияет на приказ "stop". Удаление этой абилки заставляет исчезнуть кнопке "Оставить".
Сборный пункт (в РО называется "сбор") 'ARal' - указывает место сбора барака. После обучения юниты скапливаются в этой точке. Приказ "setrally"=851980. Смена точки отслеживается приказом в точку (событие "юнит отдал приказ (цель - точка)"). Также Rally-точку бараков можно отследить триггерной командой "Точка - Боевая единица Rally-point of (TriggeringUnit) as a point" (jass GetUnitRallyPoint). Эта абилка не указана в слотах юнита, но она появляется обычно у бараков, где обучаются юниты. Есть исключения, например мини-завод Тинкера, у которого спавнятся гоблины (у него указан сбор).
тема <= как скрыть эти кнопки, дело в том что не все можно скрыть
» порталы:
Перемещение через портал 'Awrp' - эта способность может быть добавлена в любой момент любой боевой единице. Затем при помощи функций WaygateSetDestination и WaygateActivate настраивается перемещение.
call WaygateSetDestination(u, GetUnitX(target), GetUnitY(target)) - указывается точка отправки, куда будет телепортироваться
call WaygateActivate(u, true) - вкл/выкл портал (при включений портала сам портал светится, типа говорит войдите в меня. При выключенном портале не работает телепорт)
В абилке "Перемещение через портал" 'Awrp' указывают ширину и длину прямоугольника. Если юнит встанет на этот прямоугольник, то телепортируется в точку.
Портал - нейтральное здание. Обычно через юнитов или здания нельзя проходить. У портала есть классификация "может ходить", предполагалось что может ходить сквозь, но что-то не то. Видимо это что-то другое. У портала есть текстура пути ("Пути - Карта путей"), она вот и позволяет ходить сквозь портала. Однако, эта текстура не везде работает (работают на зданиях).
  1. На юнитах лучше указать "Движение - Тип движения" - "Нет". Тогда юниты через этот портал (если он является юнитом) свободно перемещаются.
  2. На зданиях лучше указать "Движение - Тип движения" - "Нет" и "Пути - Карта путей" - Портал или Нет (какая-либо другая текстура может блокировать проход). Тогда юниты через этот портал свободно перемещаются.
  3. дать способность на проходимость
Способность Ghost (Visible) 'Aeth' - проходимость через него самого, сам юнит видим.
Способность Ghost 'Agho' - проходимость через него самого, сам юнит невидим.
Моя тень не может проходить насквозь юнитов, а вот другие юниты могут через мою тень ходить. если всем дать, то тогда они через друг друга проходят. Я просто думал юнит сможет ходить через всех, но это не так, через тех, у кого нет этой абилы, не пройдешь
  1. дают проходимость москиты 'Aloc', делая портал невиделяемым
Блокираторы пути могут использоваться для запрета перемещения летающих боевых единиц.
Преимущество этого телепорта от триггерного телепорта (когда ловят вход в область и перемещают триггерами куда-то) в том, что у юнитов заложена карта путей. Вы можете указать юниту двигаться в какую-то часть карты. Юниты заранее прокладывают кратчайшие пути, и если будет возможность - проложит через портал. А вот у триггерного телепорта нет такой возможности (нужно мышкой подводить к области), и он сам не пойдет туда, где ничего не существует.
Можно ставить невидимые порталы. Например, вход в пещеру, где у пещеры 5-6 развилок, следовательно, 5-6 телепортов.
Есть другой способ работы портала - не через триггеры. а через редактор:
  1. создаем на карте портал
  2. создаем область (маленький квадратик) - куда будет телепортироваться (телепортирует в центр прямоугольной области)
  3. выбирает созданный на карте портал (кликнете на него два раза, и появится окошко "свойство боевой единицы")
  4. в этом окошке включаете галочку "Работающий порт" (эта галочка появилась благодаря 'Awrp')
  5. напротив этой галочки, справа стоит "Пункт" - выбирает область
  6. все готово
» Для магазинов (как создать магазин, и как использовать способности другого игрока, т.е. способности магазина):
Выбор воина 'Ane2' - обычно используется в лагере наемников, тавернах
Выбрать героя 'Aneu' - в нейтральных магазинах (выборка присутствует).
Общие магазины 'Aall' - чаще всего в рассовых магазинах (выборка присутствует). В некоторых источниках пишут, что выборка не работает на враждебных игроку юнитах (чтобы сделать нейтральным удалите способность "Общие магазины"). Если магазин принадлежит вражескому игроку, то купить не сможете. Даже у нейтрального игрока. Тесно связано с полем магазина: "предметов сделано"
поле магазина "предметов сделано" - указаны итемы, которые можно продать своим войскам или войскам союзника, это поле не доступно скилам "Выбор воина" и "Выбрать героя"
поле магазина "предметов продано" - указаны итемы, которые можно продавать всем, не работает со скилом "общие магазины"
Побочным эффектом способности ‘Aneu’ (Выбрать героя) или ‘Ane2’ (Выбор воина) является доступ к другим заклинаниям боевой единицы. Даже, вражеский воин может использовать способности обладателя выборки. Это же очевидно, помните, есть способность "разведка" в мастерской гоблинов, чтобы обследовать территорию, нужно подойти и кликнуть. Или способность "поставка ресурсов" - производит обмен. Точно, также происходит и с наймом юнитов, игре нужно знать какой игрок нажал, затем продает ему юнита. Есть даже нативки с приказами, иммитирующие действия магазина от другого игрока. Даже атакующие абилки срабатывают.
Эти три способности являются переключателями, они выбирают кому продавать предмет, или юнита. Если рядом встанут два героя, то вы сможете продать только одному герою. Над героем будет висеть стрелка.
Характеристики:
Показать Индикатор боевой единицы (да/нет) - над героем будет появляться стрелка (что означает юнит выбран). Обычно стрелка показывает локальному игроку, то есть над юнитами, подконтрольному этому игроку, он видит.
Показать Кнопку выбора боевой единицы (да/нет) - на панеле отображается иконка кнопки (этой кнопкой может переключить на другого юнита). Эту икону можно спрятать. В магазинах мб мало мест (12 слотов - максимум, а эта кнопка может мешать и занять одну ячейку, лучше освободить ее)
Радиус запуска - радиус действия (автоматически выбирает юнитов по типу взаимодействия. Кстати, в абилке можно настроить цели, но это бесполезно для автопоиска и автовыборки. Настройка цели в абилке не дает ничего).
Тип взаимодействия - с кем взаимодействует (можно включить 4 галочки одновременно, но лучше мудро решите:
» 4 галочки
"Нет" (никакая галочка не стоит) - действует только на героев (и не важно есть ли у него инвентарь или нету);
"Любая боевая единица с предметами" - юниты с наличием инвентаря (не важно герой или не герой, здание или не здание. Важно чтобы был у него инвентарь);
"Любое не здание" - действует на любых юнитов, кроме здания (и не важно есть ли у юнитов инвентарь или нету);
"Не важно" - действует на всех (здание в том числе)

помогает покупать магазину

Лавка: купить предмет 'Apit' - пассивка магазина. В этот магазин, имеющий пассивку 'Apit', можно заложить (продать) предмет. Без нее невозможно продать предмет в лавку. Чтобы найти магазин, способный продать итем, ищите юнитов с этой абилкой (уровень скила 'Apit' > 0)

эти два скила помогают удалять/добавлять предметы или юнитов

Продажа предметов 'Asid'
Продажа войск 'Asud'
» 2.9 Можно ли сделать так, чтобы при покупке в магазине предмета или юнита, он исчезал совсем? Т.е. не перезаряжался и со временем снова появлялся, а совсем исчезал: купил - и всё, он твой, и ни у кого другого его не будет.
Да, есть целый набор триггеров для этих целей:
Нейтральное здание - remove item-type (*) убирает предмет RemoveItemFromStock
Нейтральное здание - add item-type (*) добавляет предмет AddItemToStock
Нейтральное здание - remove unit-type (*) убирает юнита RemoveUnitFromStock
Нейтральное здание - add unit-type (*) добавляет юнита AddUnitToStock
Функция RemoveItemFromStock срабатывает только для предметов, добавленных с использованием триггеров, поэтому Вам необходимо удалить все продаваемые и сделанные предметы в соответствующих полях магазина, а вместо этого добавить их триггерно при инициализации карты.
Функция RemoveUnitFromStock срабатывает только для юнитов, добавленных с использованием триггеров, поэтому Вам необходимо удалить все продаваемые и нанимаемые войска в соответствующих полях магазина, а вместо этого добавить их триггерно при инициализации карты.
*в скобках там написано:
(from marketplace) из одного магазина
(from all marketplace) из всех магазинов.
Есть некоторые особенности устройства механизма продажи - чтобы свободно манипулировать юнитами/предметами - добавлять или убирать их по желанию во время игры, необходимо выполнить ряд действий-требований:
Магазину, в котором будут размещаться предметы, необходимо добавить способность "Продажа предметов" (она находится в редакторе способностей, в папке Особые\Войска\... ; её равкод - 'Asid' а иконка похожа на шахматную доску с зелеными клетками вместо белых)
Все предметы, которые вы будете убирать во время игры, должны быть добавлены в магазин триггерно, действием описанным выше. Таким образом, изначально в редакторе объектов имеет смысл оставлять только те предметы, которые будут все время неизменно присутствовать в магазине на протяжении всей игры.
Аналогично нужно поступить и с продаваемыми войсками, с той лишь разницей, что добавлять нужно способность "Продажа войск", она расположена рядом со способностью "Продажа предметов".
» Связано с инвентарем:
Предметы (герой) 'AInv' геройский инвентарь (Не имеют никаких ограничений. Не дропаются предметы, даже после смерти героя - это главное отличие)
Вьючное животное 'Apak' Кодои могут носить инвентарь, но не могут его использовать (макс = 4 слота), доступен инвентарь после изучения технологии "Рюкзак"

рабочие и некоторые воины могут носить инвентарь, но не могут его использовать (макс = 2 слота), доступен инвентарь после изучения технологии "Рюкзак"
Носильщик (человек) 'Aihn'
Носильщик (орк) 'Aion'
Носильщик (нежить) 'Aiun'
Носильщик (ночной эльф) 'Aien'

настройки

"Бросить предметы после смерти" - (да/нет)
"Кол-во предметов" - кол-во слотов (максимум 6)
"Может бросить предметы" (да/нет) - можно ли выкидывать из инвентаря (если "нет", то не сможет выкинуть ничего подобранное).
"Может использовать предметы" (да/нет)
"Может подобрать предметы" (да/нет) - может подбирать предметы с земли
Если удалить способность инвентаря, то все итемы дропаются на землю.
В некоторых случаях, нужно проверять есть ли у этих юнитов инвентарь (проверять уровень > 0 или кол-во ячеек > 0)
Условие - целочисленное (size of inventory, на jass UnitInventorySize)
» раскрыть
native UnitInventorySize takes unit whichUnit returns integer
» москиты
Москиты 'Aloc' - не отображается на панеле иконка (ее нет). Боевая единица, которая обладает способностью “Москиты”, становится невыделяемой, на нее нельзя указать в качестве цели (так как невыделяема для игрока, и значит, невозможно нацелиться. Это не значит, что для вражеских юнитов этот юнит неосязаем и не смогут прикоснуться. Смогут!!! То, что игрок не может, то юниты могут сами подойди и атаковать). Это означает, что контролировать и отдавать приказы этой боевой единице можно исключительно при помощи триггеров. Также не отображается полоса жизни игрового персонажа над его головой. Еще юнит не отображается на мини-карте. Основная фишка москитов - игнорирует любые пределы пафинга *(pathing)* (юниты, декор, ландшафт), это значит, может проходить сквозь юнитов. Эта способность не имеет никаких настроек, да, и способностью трудно назвать. Когда получает "москиты" у юнита включается в настройках флажок.
не сработает, если Вы захотите избавить боевую единицу от способности “Москиты”. Следовательно, нужно превратить боевую единицу в другую, временную, форму, а затем мгновенно превратить назад. Однако если боевая единица превратиться, используя способность “Темный” (о ней - чуть позже, - прим. alexkill), перед дальнейшим добавлением “Москитов”, она станет невыделяемой, но все еще останется целью для врагов, а также будет подчиняться правилам пафинга.
Другой способ отобрать “Москитов”:
спрятать боевую единицу;
удалить способность “Москиты”;
сделать боевую единицу снова видимой.
function UnitRemoveLocust takes unit u returns nothing
    local boolean backup = not IsUnitHidden(u)
    call ShowUnit(u, false)
    call UnitRemoveAbility(u, 'Aloc')
    call ShowUnit(u, backup)
endfunction
Это решение имеет и побочные эффекты:
Полоса жизни над боевой единицей, как и имя игрока при наведении мышью на боевую единицу, больше не будут видны никогда. Это своеобразная уловка, если Вам необходимо сокрыть эти данные.
Пропадет возможность указать боевую единицу в качестве цели заклинания (проблема решается триггерно).
Выбирать боевую единицу станет возможно только рамкой.
» связано с опытом, уровнем, skill-points

Как забыть все выученные заклинания?

книга забвения 'Aret' - активная способность, позволяет забыть все выученные способности героем. И также возвращает обратно герою очки навыков, за каждое очко навыков можешь прокачать 1 навык. Можно попробовать удалять навык, и возвращать очки навыков. Из недостатков триггерного способа - нужно знать, какие абилки выучены. В принципе можно отслеживать какие навыки выучены и запоминать. Но нет гарантии, что мапмейкер применит нестандартное решение. Просто книга реагирует только на героев с прокаченной магией через "плюсик". На обычных юнитов со способностями не действует (это нужно добавлять в поле "Способности - герой", но у обычных юнитов это поле отсутствует. И добавляет только геройские). Не сбивает приказ
Ну есть условие и без мемхака (так мы узнаем выучена ли абила):
Сравнение Целочисленного> Уровень способности (какой-то) юнита триггера больше или равно 1.-
ну это проверка определенной абилки. А если скажем, у меня 1000 скилов, как это проверить? неизвестно какую получит или выучит. все что ли перебирать массивом (походу так и будет. придется базу данных всего делать, запоминать при изучении и так далее. жалко что нет события - какие абилки получаю, как с итемом)?
точно, могу запоминать в массив сразу те, которые даю юниту
удаляем абилку, даем абилку, изучаем (действие "герой - Learn Skill")
852000 (skillmenu): Приказ (без указания цели), при выполнении которого открывается меню навыков героев. Если же триггерно заставить выполнить этот приказ обычную боевую единицу, то исчезнет ее карта команд, которая возвратится, если выбрать боевую единицу.

Как добавить опыта?

Предмет: дополнительный опыт 'AIem' - работает в руне
Предмет: дополнительный опыт (большой) 'AIe2' - работает в руне
Можно триггерно давать значение опыта: "Герой - Set Experience" и "Герой - Add Experience"

Как повысить уровень героя?

Предмет: повышение уровня героя 'AIlm' - работает в руне
Можно триггерно повышать/устанавливать/изменять уровень героя: "Герой - Set Level"
» ХАРАКТЕРИСТИКИ ГЕРОЯ
Повышение характеристик 'Aamk' (способность героев имеет иконку, галочкой "Скрыть кнопку" помогает скрыть иконку)
**Пассивки итемов с бонусом характеристик (изначально без иконки, даже "Скрыть кнопку" ничего не решает):
Предмет: повышение характеристик героя (+1 ко всем характеристикам) 'AIx1'
Предмет: повышение характеристик героя (+2 ко всем характеристикам) 'AIx2'
Предмет: повышение характеристик героя (+3 ко всем характеристикам) 'AIx3'
Предмет: повышение характеристик героя (+4 ко всем характеристикам) 'AIx4'
Предмет: повышение характеристик героя (+5 ко всем характеристикам) 'AIx5'
Предмет: повышение характеристик героя (ловкость +1) 'AIa1'
Предмет: повышение характеристик героя (ловкость +3) 'AIa3'
Предмет: повышение характеристик героя (ловкость +4) 'AIa4'
Предмет: повышение характеристик героя (ловкость +6) 'AIa6'
Предмет: повышение характеристик героя (ловкость +10) 'AIaz'
Предмет: повышение характеристик героя (разум +1) 'AIi1'
Предмет: повышение характеристик героя (разум +3) 'AIi3'
Предмет: повышение характеристик героя (разум +4) 'AIi4'
Предмет: повышение характеристик героя (разум +6) 'AIi6'
Предмет: повышение характеристик героя (сила +1) 'AIs1'
Предмет: повышение характеристик героя (сила +3) 'AIs3'
Предмет: повышение характеристик героя (сила +4) 'AIs4'
Предмет: повышение характеристик героя (сила +6) 'AIs6'

прибавляет к текущей характеристики с помощью рун

У этих абилок нет иконок, работают только через руну. У них разные эффекты рун появляются над головой (говорят, что эти спецэффекты не удаляются, если удалить предмет или не заменить на импортный спецэффект).
Предмет: повышение силы, ловкости и разума 'AIxm'
Предмет: повышение ловкости 'AIam'
Предмет: повышение ловкости (+2) 'AIgm'
Предмет: повышение интеллекта 'AIim'
Предмет: повышение интеллекта (+2) 'AItm'
Предмет: повышение силы 'AIsm'
Предмет: повышение силы (+2) 'AInm'
Можно триггерно изменять характеристики (силу, ловкость, интеллект), для каждой характеристики своя нативка. Однако, функция не добавляет к текущей, а изменяет, устанавливая новое значение. Для добавления используйте GetHeroStr, GetHeroAgi, GetHeroInt - каждая из трех нативок дает узнать сколько у героя силы, или ловкости, либо разума. Например, я хочу добавить к текущей силе +10 силы:
local integer k = GetHeroStr(GetTriggerUnit(), false) + 10
call SetHeroStr(GetTriggerUnit(), k, true)
эти нативки изменяют не бонусную (зеленую), а белую характеристику (текущая). boolean permanent - делает постоянным значение, короче при не постоянном при морфе это значение может пропасть.
Короче, нет нативки в версии 1.26 для изменения/добавления бонусной (зеленой). Чаще всего бонус дают пассивки. Есть только взлом.
native SetHeroStr takes unit whichHero, integer newStr, boolean permanent returns nothing
native SetHeroAgi takes unit whichHero, integer newAgi, boolean permanent returns nothing
native SetHeroInt takes unit whichHero, integer newInt, boolean permanent returns nothing
эти три нативки дают узнать значение характеристики (силы, ловкости, разума). boolean includeBonuses - можно узначение значение с бонусом (true) и без бонуса (false). При разности значений можно узнать сколько бонуса дает.
native GetHeroStr takes unit whichHero, boolean includeBonuses returns integer
native GetHeroAgi takes unit whichHero, boolean includeBonuses returns integer
native GetHeroInt takes unit whichHero, boolean includeBonuses returns integer
» Связано с улучшением:
Знак Неприступности 'AIgu'/'AIgf' - способности, которые активируются при получений способностей. Думаю, при активации автоматом апгрейдит исследование. Таким образом можно улучшить все, что угодно. Исследование действует на все войска. Изучать не стал.
» Как изменить время суток:
Изменить время суток 'AIct' - единственная необычная способность, которая имеется у предмета "Камень затмения". Его можно купить в эльфийской лавке. У способности есть иконка и может быть описание, если отдать воину. В характеристиках можно задать игровое время: секунды и минуты. Это время не соотвествует реальному времени.
Это время настраивается в константах:
Время закат: 18.00
Время рассвет: 6.00
Время реальных секунд на игровой день: 480.00 (это сколько реальных секунд, получается реально игровой день идет 8 минут: 4 минуты ночь и 4 минуты день)
Время часов в секунду: 24
Время с 6.00 до 18.00 часов считается игровым днем, а время с 18.00 до 6.00 ночью. Ночью освещение становится намного темнее, чем днем.
Есть триггерные нативки:
Игра - Set the time of day to 0.00 - задает время игры.
Игра - Turn the day/night cycle (Откл/Вкл) - отключает смену дня и ночи, но так по мне часики больше не тикают, короче время запаузено. При включений время снова продолжает тикать.
Игра - Set time of day speed to 0.00% of the default speed - устанавливает скорость времени. При больших значениях время течет быстро. При низких медленно. При нуле время запаузено. просто меняет скорость смены времени. Смена дня может происходит быстро, поэтому можно замедлить время. Или наоборот. ускорить, например чтобы затестить.
Если нужно чтобы время шло, но всегда было темно, то редактируешь модель освещения через War3ModelEditor
По поводу абилки AIct: в характеристиках можно устанавливать время: секунды и минуты. Изменяет время суток на заданное время, и на это время будет запаузено в течении длительности заклинания. По стандарту там стоит 0.00. Ночь. В течении длительности заклинания будет 0.00, то есть время запаузено и не изменяется. Абилка вызывает искусственную ночь, изменяет в интерфейсе на фиолетовые часики. Ночные эльфы ночью видят лучше, дальше. У них ночью регенерация здоровья повышена. Еще работают ночью некоторые способности типа "невидимость по ночам". Конечно, можно делать усиление триггерных способностей. Можно конечно ослаблять эльфов этой же абилкой, но фиолетовые часики в интерфейсе портят. Не сбивает приказ


Views: 2 411