Начал играть за бабу с ребёнком, так жанр заявлен интерактивное кино, одел наушники, вырубил свет и приготовился погружаться в мозг шизофреников. Экран замельтешил буквами, пока пытался что-то прочитать, уже ненароком сделал несколько выборов. Потом появились непонятные круги, на которые кто-то должен стать, я попытался тыкнуть во что-то навыком взаимодействие, а он оказался для мебели. Потом какойто мужик начал меня лупить, попытался тыкнуть его в пах, но на это нехватило маны (интересно откуда шизофреники знают о концепции маны в играх). Потом откуда нивозьмись у меня появился ещё один герой мужик, которым я попытался дать отпор или нахудой конец драпнуть в кусты оставив на растерзание ребёнка (всёравно он не мой), но дверь оказалась закрытой...
Говоришь "при смерти декорации типа Клетка" (что не сработает, так как такого события нет)
Имелось в виду, что в отличии от юнита, у декорации нет Generic события Декорация умирает, чтобы в условии проверить тип декорации. Как обычно делают с юнитами. Да и реализовал я впринципе тоже самое, что вы предлагали: SurDno:
Можно создать один триггер с 10 Specific Decoration Dies, в каждом из которых выбираешь свою клетку на карте. В действиях плюсуешь целочисленную, и, как только она достигнет десяти, делаешь, что там тебе надо.
Тут согласен, если не понимать, какой джас будет после обёртки и как этот джас будет работать, то будет печально. А с другой стороны бросать новичка в омут чистого джаса, если есть более удобные интсрументы тоже не хочется.
Со строительством это работает, но с юнитама к сожалению нет. Я создаю юнитов и по триггеру они должны патрулировать область, но вместо этого они идут к исходной позиции.
Это не в ИИ дело. Юниты всегда идут к исходной позиции, если не отдавать им нужных приказов. Чтоб ответить более точно, подробней опишите что вам нужно, желательно с картой.
Вместо создания точки Location из Position of Unit в JNGP удобно координаты юнита указать.
В коде я только с координатами и работаю, а вот на GUI сильно не забалуешь. Благо в JNGP добавили RemoveLocation, чтоб гуишников Custom Code не пугать.
NazarPunk, смысл в том, что с простреленным коленом не особо-то бегают)
А про нанесение урона указал.
Тогда берём system-physical-damage-detection, создаём пустышку вместо яда, и при получении урона, проверяем уровень/наличие пустышки. При срабатывании умножаем урон и кидаем бесконечное замедление даммиком.
можешь сделать Простреленное колено через наложение даммиком Замедления
При наложении замедления урон от юнита ненаносится, человеку ещё придётся систему отлова урона делать/ставить.
Хотя эта система позволяет делать кучу полезного, а урон можно и не наносить.
на эту переменную завязать диалог, то при уничтожении диалога от него отвязывается событие
По логике в переменной лежит только ссылка на диалог, и при уничтожении диалога логично уничтожаются его события, а в переменной остаётся null, у уоторого событий в принципе быть не может. может и не null остаться, а ссылка намертво повиснуть в памяти
"ForceLine*" есть 2 варианта развития, один это сделать поиск необходимого региона по которому он будет выбирать как реагировать на то или иное событие, либо сделать 6 триггеров, каждый из которых отдельно вызывается. Конечно, если бы я понимал, что у меня возможно будет какое-то изменение в будущем в плане количество спаунов, то лучше было бы сделать один триггер обрабатывающий все, тут согласен.
"Line*" однозначно нужно разделить на 3 части, поскольку нужно передавать массив, либо писать дикий костыль на определение массивов, что я не люблю делать. Если писать, то сразу основательно. Там логика может отличаться. Поэтому нужно сохранить 3 линии для удобства изменения условий для каждой линии.
Держите, убрал лишние триггеры, чтоб не мешались, и прикрутил нормальную наработку для путей. Притом без всяких динамических триггеров, костылей и на одномерных массивах.
"OrderBackToLine*" желательно передавать структуру, чтобы он нормально все обрабатывал, что тут невозможно сделать.
Зачем так сложно, можно просто использовать двумерные массивы. Вот вам библиотека Spawn, которая совместима с вашим кодом и не создаёт Location. По необходимости методов можно добавить
zinc
//! zinc
library Spawn {
rect SpawnRect[2][10];
public {
function IsUnitAlive(unit u) -> boolean {
return GetUnitState(u, UNIT_STATE_LIFE) > 0.45; // именно при этом значении наступает смерть
}
function OrderBackToLine(unit u, integer diff) {
integer data = GetUnitUserData(u);
integer data10 = data / 10;
integer modulus = data - (data / 10) * 10;
rect rct;
if (IsUnitAlive(u)){
if (data10 >=1 && data10 <= 3){
rct = SpawnRect[data10+diff][modulus];
} else {
if (udg_isTurnedOnDebug){
rct = SpawnRect[data10+diff][2];
// MakeTextTagAboveUnit нужно объявить до библиотеки Spawn
//MakeTextTagAboveUnit( u, "|c000000FFBack to Home!|r", 1.0, 1.0, 2.0, 0.5, 255, 255, 255, 255);
BJDebugMsg("Юнит побежал домой!");
}
}
IssuePointOrder(u, "attack", GetRectCenterX(rct), GetRectCenterY(rct));
}
rct = null;
}
function OrderBackToLineB(unit u) { OrderBackToLine(u, 0); }
function OrderBackToLineR(unit u) { OrderBackToLine(u, 3); }
}
function onInit(){
//B - Линия 1
SpawnRect[0][1] = gg_rct_WayP_1x1;
SpawnRect[0][2] = gg_rct_WayP_1x2;
SpawnRect[0][3] = gg_rct_WayP_1x3;
SpawnRect[0][4] = gg_rct_WayP_1x4;
SpawnRect[0][5] = gg_rct_WayP_1x5;
SpawnRect[0][6] = gg_rct_WayP_1x6;
SpawnRect[0][7] = gg_rct_RedMainBase;
//B - Линия 2
SpawnRect[1][1] = gg_rct_WayP_2x1;
SpawnRect[1][2] = gg_rct_WayP_2x2;
SpawnRect[1][3] = gg_rct_WayP_2x3;
SpawnRect[1][4] = gg_rct_WayP_2x4;
SpawnRect[1][5] = gg_rct_RedMainBase;
//B - Линия 3
SpawnRect[2][1] = gg_rct_WayP_3x1;
SpawnRect[2][2] = gg_rct_WayP_3x2;
SpawnRect[2][3] = gg_rct_WayP_3x3;
SpawnRect[2][4] = gg_rct_WayP_3x4;
SpawnRect[2][5] = gg_rct_WayP_3x5;
SpawnRect[2][6] = gg_rct_WayP_3x6;
SpawnRect[2][7] = gg_rct_RedMainBase;
//R - Линия 1
SpawnRect[3][1] = gg_rct_WayP_1x6;
SpawnRect[3][2] = gg_rct_WayP_1x5;
SpawnRect[3][3] = gg_rct_WayP_1x4;
SpawnRect[3][4] = gg_rct_WayP_1x3;
SpawnRect[3][5] = gg_rct_WayP_1x2;
SpawnRect[3][6] = gg_rct_WayP_1x1;
SpawnRect[3][7] = gg_rct_BlueMainBase;
//R - Линия 2
SpawnRect[4][1] = gg_rct_WayP_2x4;
SpawnRect[4][2] = gg_rct_WayP_2x3;
SpawnRect[4][3] = gg_rct_WayP_2x2;
SpawnRect[4][4] = gg_rct_WayP_2x1;
SpawnRect[4][5] = gg_rct_BlueMainBase;
//R - Линия 3
SpawnRect[5][1] = gg_rct_WayP_3x6;
SpawnRect[5][2] = gg_rct_WayP_3x5;
SpawnRect[5][3] = gg_rct_WayP_3x4;
SpawnRect[5][4] = gg_rct_WayP_3x3;
SpawnRect[5][5] = gg_rct_WayP_3x2;
SpawnRect[5][6] = gg_rct_WayP_3x1;
SpawnRect[5][7] = gg_rct_BlueMainBase;
}
}
//! endzinc
» WarCraft 3 / Шизофрения 1.23.21с
» WarCraft 3 / Отсутствие активации гоблинской мины
» WarCraft 3 / Шизофрения 1.23.21с
» WarCraft 3 / [Триггеры] Посчитать триггеру конкретные Разр. Объекты
SurDno:
» WarCraft 3 / Отсутствие активации гоблинской мины
Отредактирован nazarpunk
» WarCraft 3 / [Триггеры] Посчитать триггеру конкретные Разр. Объекты
» WarCraft 3 / [Триггеры] Посчитать триггеру конкретные Разр. Объекты
» WarCraft 3 / От GUI к препроцессорам.
» WarCraft 3 / От GUI к препроцессорам.
» WarCraft 3 / Вопрос по инициализации
» WarCraft 3 / От GUI к препроцессорам.
» WarCraft 3 / Реализация огня условной башни
» WarCraft 3 / Вопрос по инициализации
» WarCraft 3 / Вопрос по инициализации
» WarCraft 3 / Яд и рассеять чары
Отредактирован nazarpunk
» WarCraft 3 / Яд и рассеять чары
Хотя эта система позволяет делать кучу полезного, а урон можно и не наносить.
» WarCraft 3 / Яд и рассеять чары
Отредактирован nazarpunk
» WarCraft 3 / Баг через 6000 сек
может и не null остаться, а ссылка намертво повиснуть в памяти
Отредактирован nazarpunk
» WarCraft 3 / Баг через 6000 сек
» WarCraft 3 / Баг через 6000 сек
Отредактирован nazarpunk
» WarCraft 3 / Баг через 6000 сек
Отредактирован nazarpunk
» WarCraft 3 / Баг через 6000 сек
local are only supported at the top function
» WarCraft 3 / Инвентарь персонажа
» WarCraft 3 / Инвентарь персонажа
» WarCraft 3 / Триггерное увеличение запаса маны.