0
29
6 лет назад
0

» WarCraft 3 / Шизофрения 1.23.21с

В описании (трижды даже) написано ударь круг.Но, kак правильно заметил 8gabriel8, надо бы технически попроще сделать карту
Я вообще непонимаю концепцию с кругами. Зачем моему персонажу его бить?
0
29
6 лет назад
0

» WarCraft 3 / Отсутствие активации гоблинской мины

Не проверял, но читал, что тип движения Парящий не активирует мины
Как я сразу об этом не подумал. Проверил, не активирует.
Загруженные файлы
0
29
6 лет назад
0

» WarCraft 3 / Шизофрения 1.23.21с

Начал играть за бабу с ребёнком, так жанр заявлен интерактивное кино, одел наушники, вырубил свет и приготовился погружаться в мозг шизофреников. Экран замельтешил буквами, пока пытался что-то прочитать, уже ненароком сделал несколько выборов. Потом появились непонятные круги, на которые кто-то должен стать, я попытался тыкнуть во что-то навыком взаимодействие, а он оказался для мебели. Потом какойто мужик начал меня лупить, попытался тыкнуть его в пах, но на это нехватило маны (интересно откуда шизофреники знают о концепции маны в играх). Потом откуда нивозьмись у меня появился ещё один герой мужик, которым я попытался дать отпор или нахудой конец драпнуть в кусты оставив на растерзание ребёнка (всёравно он не мой), но дверь оказалась закрытой...
0
29
6 лет назад
0

» WarCraft 3 / [Триггеры] Посчитать триггеру конкретные Разр. Объекты

Говоришь "при смерти декорации типа Клетка" (что не сработает, так как такого события нет)
Имелось в виду, что в отличии от юнита, у декорации нет Generic события Декорация умирает, чтобы в условии проверить тип декорации. Как обычно делают с юнитами. Да и реализовал я впринципе тоже самое, что вы предлагали:
SurDno:
Можно создать один триггер с 10 Specific Decoration Dies, в каждом из которых выбираешь свою клетку на карте. В действиях плюсуешь целочисленную, и, как только она достигнет десяти, делаешь, что там тебе надо.
только переменную я минусую.
0
29
6 лет назад
0

» WarCraft 3 / Отсутствие активации гоблинской мины

Поиграться с классификацией юнита и разрешёнными целями в способности мины или взрывать её триггерно.
1
29
6 лет назад
Отредактирован nazarpunk
1

» WarCraft 3 / [Триггеры] Посчитать триггеру конкретные Разр. Объекты

Сделал для трёх декораций, думаю для десяти сами разберётесь.
Загруженные файлы
0
29
6 лет назад
0

» WarCraft 3 / [Триггеры] Посчитать триггеру конкретные Разр. Объекты

Занести их в массив, и при смерти юнита/декорации типа "клетка", проверять сколько ещё осталось живых.
1
29
6 лет назад
1

» WarCraft 3 / От GUI к препроцессорам.

но понимание приходит быстрее с чистого кода, имо
Тут согласен, если не понимать, какой джас будет после обёртки и как этот джас будет работать, то будет печально. А с другой стороны бросать новичка в омут чистого джаса, если есть более удобные интсрументы тоже не хочется.
5
29
6 лет назад
5

» WarCraft 3 / От GUI к препроцессорам.

Пфф, новички от жасса-то бегут, а тут и vjass, и ZINC
Я и сам от джасса бегу. А новички впервые видят джас в стандартном WorldEdit.
После чего у них развивается комплекс неполнценности, а опытных программистов они представляют ходячими компиляторами с прямым подключением к матрице.
Загруженные файлы
0
29
6 лет назад
0

» WarCraft 3 / Вопрос по инициализации

Со строительством это работает, но с юнитама к сожалению нет. Я создаю юнитов и по триггеру они должны патрулировать область, но вместо этого они идут к исходной позиции.
Это не в ИИ дело. Юниты всегда идут к исходной позиции, если не отдавать им нужных приказов. Чтоб ответить более точно, подробней опишите что вам нужно, желательно с картой.
0
29
6 лет назад
0

» WarCraft 3 / От GUI к препроцессорам.

Вместо создания точки Location из Position of Unit в JNGP удобно координаты юнита указать.
В коде я только с координатами и работаю, а вот на GUI сильно не забалуешь. Благо в JNGP добавили RemoveLocation, чтоб гуишников Custom Code не пугать.
2
29
6 лет назад
2

» WarCraft 3 / Реализация огня условной башни

смотри, юнит обходит условную башню с фланга и башня не стреляет по нему, а стрелять может только тех, кто стоит перед ней.
Ну так ловим замах башни, сверяем угол. Если юнит с фланга, отменяем приказ.
0
29
6 лет назад
0

» WarCraft 3 / Вопрос по инициализации

указываешь цифру на единичку меньше номера игрока
Загруженные файлы
4
29
6 лет назад
4

» WarCraft 3 / Вопрос по инициализации

native PauseCompAI takes player p, boolean pause returns nothing
Так можно его вручную отключить.
0
29
6 лет назад
0

» WarCraft 3 / Яд и рассеять чары

8gabriel8:
NazarPunk, смысл в том, что с простреленным коленом не особо-то бегают)
А про нанесение урона указал.
Тогда берём system-physical-damage-detection, создаём пустышку вместо яда, и при получении урона, проверяем уровень/наличие пустышки. При срабатывании умножаем урон и кидаем бесконечное замедление даммиком.
0
29
6 лет назад
Отредактирован nazarpunk
0

» WarCraft 3 / Яд и рассеять чары

можешь сделать Простреленное колено через наложение даммиком Замедления
При наложении замедления урон от юнита ненаносится, человеку ещё придётся систему отлова урона делать/ставить.
Хотя эта система позволяет делать кучу полезного, а урон можно и не наносить.
0
29
6 лет назад
0

» WarCraft 3 / Яд и рассеять чары

Яд, заморозку и бафы аур не снять рассеиванием. Придётся придумывать чтото другое.
0
29
6 лет назад
Отредактирован nazarpunk
0

» WarCraft 3 / Баг через 6000 сек

на эту переменную завязать диалог, то при уничтожении диалога от него отвязывается событие
По логике в переменной лежит только ссылка на диалог, и при уничтожении диалога логично уничтожаются его события, а в переменной остаётся null, у уоторого событий в принципе быть не может.
может и не null остаться, а ссылка намертво повиснуть в памяти
0
29
6 лет назад
Отредактирован nazarpunk
0

» WarCraft 3 / Баг через 6000 сек

"ForceLine*" есть 2 варианта развития, один это сделать поиск необходимого региона по которому он будет выбирать как реагировать на то или иное событие, либо сделать 6 триггеров, каждый из которых отдельно вызывается. Конечно, если бы я понимал, что у меня возможно будет какое-то изменение в будущем в плане количество спаунов, то лучше было бы сделать один триггер обрабатывающий все, тут согласен.
"Line*" однозначно нужно разделить на 3 части, поскольку нужно передавать массив, либо писать дикий костыль на определение массивов, что я не люблю делать. Если писать, то сразу основательно. Там логика может отличаться. Поэтому нужно сохранить 3 линии для удобства изменения условий для каждой линии.
Держите, убрал лишние триггеры, чтоб не мешались, и прикрутил нормальную наработку для путей. Притом без всяких динамических триггеров, костылей и на одномерных массивах.
Загруженные файлы
1
29
6 лет назад
1

» WarCraft 3 / Баг через 6000 сек

Пробовал этот вариант, но это в этом случае будет постоянный рост событий в триггере
Уже на сайте не раз обсуждалось, если юнит удалён из карты, триггером или после смерти->разложения, то и событие удаляется.
0
29
6 лет назад
Отредактирован nazarpunk
0

» WarCraft 3 / Баг через 6000 сек

"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
В глобальных переменных объявить двумерный массив нельзя.
В JASS нет двумерных массивов, просто препроцессоры zinc,vJass,cJass добавляют синтаксический сахар и используют одномерные.
поскольку нужно передавать массив, либо писать дикий костыль на определение массивов, что я не люблю делать.
Можно и двумерным справиться без костылей.
0
29
6 лет назад
Отредактирован nazarpunk
0

» WarCraft 3 / Баг через 6000 сек

OrderBackToLineB, OrderBackToLineR
ForceLineBlue1, ForceLineBlue2, ForceLineBlue3
ForceLineRed1, ForceLineRed2, ForceLineRed3
Line1, Line2, Line3
Триггеры Types * где в каждом событие Map Initalization что-бы задать несколько переменных.
Притом, что я карту даже сохранить не смог ибо JGNP ругается
local are only supported at the top function
но хочу работать только с нативными инструментами
если нативные инструменты замедляют разработку, то почему бы не использовать нормальные, где такую кашу можно написать проще
раскрыть
if ( ( GetUnitUserData(pickedUnit) / 10 ) == 1 ) then
            local location orderLoc = Location(GetRectCenterX(udg_arrRRegions_WayP1[modulus]), GetRectCenterY(udg_arrRRegions_WayP1[modulus]))
            call IssuePointOrderLoc( pickedUnit, "attack", orderLoc )
            call RemoveLocation( orderLoc )
        
        elseif ( ( GetUnitUserData(pickedUnit) / 10 ) == 2 ) then
            local location orderLoc = Location(GetRectCenterX(udg_arrRRegions_WayP2[modulus]), GetRectCenterY(udg_arrRRegions_WayP2[modulus]))
            call IssuePointOrderLoc( pickedUnit, "attack", orderLoc )
            call RemoveLocation( orderLoc )
            
        elseif ( ( GetUnitUserData(pickedUnit) / 10 ) == 3 ) then
            local location orderLoc = Location(GetRectCenterX(udg_arrRRegions_WayP3[modulus]), GetRectCenterY(udg_arrRRegions_WayP3[modulus]))
            call IssuePointOrderLoc( pickedUnit, "attack", orderLoc )
            call RemoveLocation( orderLoc )
// Гдето в при инициализации
real SpawnRectR[][];
real SpawnRectB[][];

SpawnRectB[0][0] = udg_rct_SpawnRectB_0_0;
SpawnRectB[0][1] = udg_rct_SpawnRectB_0_1;
SpawnRectR[1][0] = udg_rct_SpawnRectR_1_0;
SpawnRectR[1][1] = udg_rct_SpawnRectR_1_1;

// и.т.д
function SpawnRectGet(boolean isB, integer r1, integer r2){
 	if (isB) {
		return SpawnRectB[r1][r2];
	}
	return SpawnRectR[r1][r2];
}

function SpawnOrder(unit u, boolean isB, integer r1, integer r2) {
	rect rct = SpawnRectGet(isB, r1, r2);

	IssuePointOrder( pickedUnit, "attack", GetRectCenterX(rct), GetRectCenterY(rct) );
	rct = null;
}

// где-то в событиях

integer data = GetUnitUserData(pickedUnit) ;
integer modulus = data - (data / 10) * 10
integer data10 = data / 10;

if (data10 >= 1 || data10 <=3){
	SpawnOrder(pickedUnit, data10, modulus);
}

0
29
6 лет назад
0

» WarCraft 3 / Инвентарь персонажа

Вау, реально крутая
Правда при использовании нельзя двигать камеру, если вам это критично, можете использовать попроще
0
29
6 лет назад
0

» WarCraft 3 / Инвентарь персонажа

вот , на мой взгляд самаю лучшая, только вот нужно JASS знать, что разобраться.
0
29
6 лет назад
0

» WarCraft 3 / Триггерное увеличение запаса маны.

system-bonus-mod-setunitmaxstate там можно любые параметры увеличивать.