Steal nerves #1 - 3 часа назад 0

» WarCraft 3 / Как убрать время баффа "лечение"

Taurenus, а задержку делал?
С - приводит в действие
У - Абила - лечение
Д: ждать 0.00 (еще попробуй 0.01)
Д: удалить бафф
Steal nerves #2 - 3 часа назад (отредактировано ) 4

» WarCraft 3 / Как убрать время баффа "лечение"

8gabriel8, может не удалиться. Помню щит паладина на неуязвимость делал, пробовал бафф удалить сразу. Не помню зачем. Применил такой способ, как у тебя на примере. А как оказалось, триггер не работал, бафф успешно накидывается. Дело было вот в чем, надо было задержку в 0.00 сек давать. Баффа нету просто, не успевал накинуть. Мало ли инфа пригодится
Как понять убрать время баффа?
Steal nerves #3 - 3 часа назад (отредактировано ) 1

» WarCraft 3 / Передача данных в другую функцию для группы

ScopteRectuS, не вижу в коде того, что может перезаписать. Раз работает в доте, значит норм. Потоки не могут быть параллельными, только последовательно идут (мне надоело это говорить) А в тех наработках что ты видел, это наверное для удобства. Вот на работе чертежи разбираю ищу ошибки и составляют тех. процесс, а я все время подправляю чертежи конструктора, просто для красоты, для читабельности и прочее
Steal nerves #4 - 4 часа назад (отредактировано ) 1

» WarCraft 3 / Передача данных в другую функцию для группы

Ну это мгновенное действие. Так тоже можно. В гуи ты тоже устанавливаешь варкрафтовские переменные, там как раз действия и условия в отдельные функции записано, и работают. Не вижу ничего такого. Просто я на джазе 'свои' глобалки для надежности и удобства юзаю (не помню, был ли когда нибудь баг, не знаю есть ли такие узкие места где GetTriggerUnit не работает, никогда не встречал такое. МБ я был глуп, и мне стоит пересмотреть это, хотя мне это не мешает, я не юзаю тысячи переменные на каждый триггер. У меня несколько темповых глобалок на все). Понимаешь, была бы какая-нибудь задержка, и в отрывке времени сработало бы другое событие, твой GetTriggerUnit может быть другого юнита давал бы.
Steal nerves #5 - 1 день назад (отредактировано ) 1

» WarCraft 3 / GetTriggerPlayer( )

Вообще-то смотря по регистру. Там в джазе, есть нативки на кого регистрируют события (могут и на игрока, так и на юнита, может и на другие объекты типа декора). Большинство событий регистрируют на игрока + обращают на юнита (GetTriggerUnit. Например, юнит умер - умирающий юнит. Это событие возвращает две переменные KillingUnit и DyingUnit. Особое внимание событие обращает на умирающего, то есть он и будет GetTriggerUnit). Регистр можно и на юнита накинуть (например получил урон, там по-моему GetTriggerPlayer нельзя вытащить? С только с помощью нативки владелец GetTriggerUnit)
Например, событие игрок ввёл в чат. Тут не выведет тебе GetTriggerUnit
Steal nerves #6 - 2 дня назад (отредактировано ) 6

» WarCraft 3 / Тип оружия - Нет

8gabriel8, ну здесь кто-то спрашивад про снаряды, и кто-то скидывал видео с ютуба про диабло. Там в карте была эта задумка. Там снаряды полностью триггерами управляются. Но вот как они ещё сделали пока неизвестно
Я вот этот тип оружия ''нет'' мог бы использовать в качестве видео-заставок в кампании, когда нужно чтобы дрались без конца (махали мечом)
Steal nerves #7 - 3 дня назад (отредактировано ) 0

» WarCraft 3 / Counter Helix Axe'a из DotA

» раскрыть
8gabriel8, не-нее. Я имею в виду полную имитацию атаки с уроном. Чтоб в ро у юнита убрать анимацию атаки (полёты снарядов), и желательно урон. Можно тип оружия поставить нет, не будет урона, не показывает атаку. Юнит как дурачок будет махать руками. Зато, агрит монстров. Желательно, чтобы не было видно, полётов снарядов, мы туда свои всунем (даймиков). При событий юнит атакован, запускаем снаряд с такой-то скоростью, по такой то дуге. Из минусов обычно фаервол пускают с руки, а у вас летит с головы. При приближений к цели наносим урон. При событий юнит получает урон - уничтожаем снаряд. Много чего нужно учесть, тем более, видел такую вещь, как например, снаряд летает за юнитом по всей карте. Пульнул в него, снаряд почти долетел, а он телепортнул в другую часть, и снаряд за ним полетел. За это отвечает автонаведение кажись? А что, цель удрала как бы, как можно было бы убежать от снаряда? Как там осуществить естественные промахи, там на клифах и др ? Об этом давно как-то думаю
Steal nerves #8 - 3 дня назад (отредактировано ) 0

» WarCraft 3 / Counter Helix Axe'a из DotA

pro100master, можно.
8gabriel8, можно, трудность в том, что движение снарядов тогда полностью надо делать триггерными. Полёт стрел, лучи и прочее. Лень такое делать, имею представлению, но не до конца. Видел такое в карте диабло
Steal nerves #9 - 3 дня назад (отредактировано ) 3

» WarCraft 3 / Выбор боевой единицы

Не за что.
» раскрыть
Name Legion, ну там в последнем скриншоте, где ты цикл с группой прозиводишь, сравни игрока. По идее GetTriggerPlayer() это тот кто кликнул на клавишу диалога, если не сработает, пробуй через GetLocalPlayer(). Если вообще в варкрафте можно определить того, кто нажал на кнопку. В условии ставишь GetTriggerPlayer() == владелец пикнутого юнита. Можно даже не сравнивать, а сразу пикнуть всех юнитов игрока. Или в массив загнал всех 'выбирайте юнита', и номеру индекса достаешь своего юнита
Steal nerves #10 - 3 дня назад 0

» WarCraft 3 / Counter Helix Axe'a из DotA

Вы мне подали идею. Защиту от ренжей, от стрел. В него выстреливают, он крутится, отбивает стрелы. Все. Жвль что нельзя отобразить, что снаряды разрезает и они эффектно отлетают, и затем падают. И жвль, что снаряды нельзя перенаправить обратно. только если пользоваться скилом укрыться за щитом. Можно было юы сделать так чтобы работало на определённом расстоянии
Steal nerves #11 - 4 дня назад (отредактировано ) 5

» WarCraft 3 / Выбор боевой единицы

Name Legion, тоже не понимаю, что ты хочешь сделать. И не понятные триггеры
» раскрыть
первый и второй скрины - ты создаешь юнита "Выбирайте героя" для каждого игрока, потом накидываешь игроку-владельцу выборку. Так понял?
третий и четвертый скрины - это один триггер? при создании (входе в игровую карту) юнита ты показываешь диалог одному игроку. Это скорее всего красный, ему ведь раньше создадут юнита. Так как триггер ты отключаешь навсегда. Еще одно замечание: если этот входящий юнит не герой, то ты триггер тоже отключаешь навсегда.
пятый скрин - здесь при нажатий диалоговой кнопки ты что-то делаешь. Скорее всего проблема в пике. Когда ты выделяешь в группу (ты добавляешь в нее всех созданных: твой юнит, юнит другого игрока и др). И скорее из-за этого выбор и накидывает на твоего красного игрока. Хотя не понятно. Где фильтр? Ты хотя бы условием отсеивал, или проверял бы. Сделал бы так, что на каждого пикнутого юнита накидывать на него выбор владельца. где дебаг?
Steal nerves #12 - 1 неделю назад (отредактировано ) 1

» WarCraft 3 / Ограничение для предметов2

Name Legion, ты в цикле сразу же проводишь проверку (что итемов больше 2), и сразу уничтожаешь. Цикл - повторение действий. То, что внутри блока он будет повторять несколько раз.
Не лучше ли сначало проверить все слоты, и только после цикла провести проверку? И в блоке if then endif уничтожаешь не поднятый (манипулирующий итем), а то что попадется с таким же типом (зведолист). Он может быть какой-нибудь первый попавшийся уничтожить.
И где ты проверяешь ячейки (тут нет условия, что тип итема в слоте x == звездолисту, но есть условие (хоть и трудно читаемо из-за переменных), что тип манипулирующего итема == звездолисту - он всегда будет истинным, условие тебе 6 раз вернет истину)? Проверяй дебагом.
Еще ты не складываешь кол-во, ты прибавляешь к индексу переменной. Пример.
» Пример
Integer[0] = 0
integer[1] = 0 //вроде не существует
k=0
цикл
integer[k]=integer[k+1] //после первого действия 0=0
integer[k]=integer[k+1] //после второго действия 0=0
integer[k]=integer[k+1]
integer[k]=integer[k+1]
integer[k]=integer[k+1]
integer[k]=integer[k+1]

integer[k+1] = 0 //integer[k+1] - integer[1], но сама переменная k - нифига не изменилась, в ней записан ноль
Steal nerves #13 - 1 неделю назад (отредактировано ) 0

» WarCraft 3 / Движение снарядов

я там выше с кодом немного ошибся
set x = x + dist * Cos(angle * bj_DEGTORAD)
set y = y + dist * Sin(angle * bj_DEGTORAD)
нужно вместо dist вставить на сколько ты смещаешь, короче вместо dist на speed. Можно вообще не писать dist или speed, если движение по спирали
еще не помню, atan2 возвращает в градусах или в радианах.
Если что xgm.guru/p/100/193756?postid=355523#comment1
Steal nerves #14 - 1 неделю назад (отредактировано ) 0

» WarCraft 3 / Движение снарядов

» раскрыть
local unit u= //кастер
local real x1=GetUnitX(u) //координаты кастера
local real y1=GetUnitY(u)

local unit t= //дайми
local real x2=GetUnitX(t)
local real y2=GetUnitY(t)

//определение расстояния
local real dx=x2-x1 //разница между концом на началом координаты
local real dy=y2-y1
local real dist = SquareRoot(dx * dx + dy * dy) //расстояние, где SquareRoot - математический корень, dx * dx - это dx в степени 2

local real angle = Atan2(dy,dx) //текущий угол между двумя точками (юнитами) в градусах

//если вы хотите текущий угол изменить, то можно изменить angle прибавив или убавив значение на несколько градусов
set angle = angle + 30. //например прибавляешь 30 градусов

set x = x + dist * Cos(angle * bj_DEGTORAD)
set y = y + dist * Sin(angle * bj_DEGTORAD)
Steal nerves #15 - 1 неделю назад (отредактировано ) 0

» WarCraft 3 / Как поставить в условие триггера защиту от магии?

А попробуй базу данных вести. Вводи всех, кто обладает этими абилками. Юнит получил способность, или предмет, вводим такую то такую. Хотя все это неудобно будет
8gabriel8, я карту скинул. Там все блоки и резисторы. Ну для подробного, а решай сам.
думаю, что способ бородача верный.
Steal nerves #16 - 1 неделю назад (отредактировано ) 2

» WarCraft 3 / Как поставить в условие триггера защиту от магии?

Я бы посоветовал бы. Но ничего не помню. Попробуй скачать старую наработку и посмотреть
Можно было бы все триггерно сделать, такой вариант мне больше нравится
Steal nerves #17 - 1 неделю назад (отредактировано ) 0

» WarCraft 3 / Не работает триггер на мультиплеер

Arr_Index может перезаписать значение. Юзнет красный и это значение станет 0 (1), юзнет синий 1 (2). Я так думаю. Для мультиплеерности не подходит
xgm.guru/p/wc3/196334 не давно похожий вопрос задавали
Steal nerves #18 - 2 недели назад (отредактировано ) 4

» WarCraft 3 / Требования для изготовления предметов

смотри как устроена магическая лавка альянса, там требуется апнутая ратуша чтобы купить сферу огня, по тому же прицнипу требуйте игрока получить апгрейд или юнита.
просто вместо ратуши нужно указать dummy-юнитов в требовании. Когда ты выполняешь требование, создаешь на карте невидимого dummy-юнита. И ограничение в требовании снимается. Если удалить этого dummy-юнита с карты, то ограничение опять появится в требовании
Steal nerves #19 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Как сделать проверку Дальний/Ближний бой?

quq_CCCP, а зависит ли от настроенной атаки? типа когда поменял на вторую атаку, ты включил дальнюю атаку. кажись классификация зависит от типа оружия (проверял задумку) не типа атаки
там еще есть классификация может атаковать наземную, воздушную цели?
Steal nerves #20 - 2 недели назад (отредактировано ) 1

» WarCraft 3 / Перезапись глобальных переменных

ScopteRectuS, нет, не должно быть никакой перезаписи (смотря что ты там в функции ForGroup напишешь). ForGroup и фильтры запускаются сразу. Как я помню, использовал часто темповые глобалки для переноса инфы, например юнита или игрока в фильтр. Брал переменную типа юнит, и потом делал манипуляции типа юнит-кастер не враг GetFilterUnit(), то брать в группу (а остальных не подходящих условии фильтр отсеивал)
ForGroup - своего рода тоже цикл, он берет одного юнита GetEnumUnit, обрабатываем функцию. Берем второго, обрабатываем. И так далее.
Steal nerves #21 - 2 недели назад (отредактировано ) 1

» WarCraft 3 / Перезапись глобальных переменных

» пример
Если действие мгновенное, то глобалки не перезапишут. И локалки не нужны.
set bj_lastCreatedUnit = GetTriggerUnit()
..... //что-то делаем с юнитом bj_lastCreatedUnit
Если есть работы с задержкой, короче со временем (с тем же вэйтом или таймером). То тут может переписаться инфа.
set bj_lastCreatedUnit = GetTriggerUnit()
..... //что-то делаем с юнитом bj_lastCreatedUnit
//вэйт
..... //что-то продолжаем делать с юнитом bj_lastCreatedUnit (но где гарантия, что его не перезаписали).
У тебя допустим есть триггерная способность, там накидывающая эффект отравления (дамаг триггером наносишь bj_lastCreatedUnit). Есть триггер, ловящий каст, он вещает в bj_lastCreatedUnit юнита-цель. Допустим эффект длится 50 сек. (там вэйт стоит). Когда ты каждый раз запускаешь триггер, он запускает поток. А вот вэйт, он паузит поток. Допустим ты кликнул на одного юнита, повесил эффект на 50 сек. Потом на другого юнита. А эффект на первом не снимется (точнее частично снимется, не будет дамага), так как ты перезаписал bj_lastCreatedUnit (там уже второй юнит.). Надеюсь понял? похожее описывалось в xgm.guru/p/wc3/jass_local_vars В статье предлагают использовать локи, лично ничего страшного не вижу в использований локи. Можно сделать так чтобы нельзя было перезаписать ненароком, например юзнуть хэш, только локалки не нужны были бы. Хотя вот в работе с GetLocalPlayer() нужна ли локалка? (например имя или число (равкод) изменить)
Если у тебя в двух триггерах используется одна и та же глобалка, например используется bj_lastCreatedUnit в качестве темповой глобалки (но только задержки чтобы не было, а то перезапишет), то ничего страшного, не перезапишут, так как действие мгновенно. В варкрафте два триггера одновременно не могут выполнить работу. Варкрафт мгновенно выполняет поочередно, в доле микросекунд. Возбмет один обработает, а потом переключается на второй триггер.
Steal nerves #22 - 2 недели назад 0
Steal nerves #23 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Есть ли утечка?

» когда уже можно удалить (код)
//в функции Example1 запускаем таймер. прошла 1 секунда, и запускается Example2

function Example2 takes nothing returns nothing
local timer t=GetExpiredTimer() // Истекший ( запущенный ) таймер 
.....//делаем что-то, может быть по номеру хэндла таймера достаем из хэша что-то
call DestroyTimer(t) //тогда можно уже удалить
set t = null
endfunction

function Example1 takes nothing returns nothing
local timer t
If udg_example == 1 then
set t = CreateTimer()
call TimerStart(t,1.0,false, function Example2)
set t = null
endif
endfunction
У тебя должна быть библиотека в JNGP. Мне пришлось вспоминать нативку GetExpiredTimer() jass.wikia.com/wiki/Functions
avuremybe, ну ошибся, не существенно
Steal nerves #24 - 2 недели назад (отредактировано ) 1

» WarCraft 3 / Есть ли утечка?

Можно его и не создавать
local timer t //объявляем локалку
If udg_example == 1 then //если условие прокатывает
set t = CreateTimer() //создаём таймер
call TimerStart(t,1.0,false, function Example2) //запускаем его
endif
set t = null //обнуляем
Steal nerves #25 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Есть ли утечка?

В данный момент нет утечек. В памяти остаётся таймер. Но удалять его сейчас не нужно, удаляют после завершения работы таймера, например в функции Example2 (короче как у тебя написано через 1 минуту). Если мы удалили бы сейчас, то запуск таймера не пройзошел бы (ибо таймера больше нет).
Steal nerves #26 - 3 недели назад (отредактировано ) 4

» WarCraft 3 / Нажатие на предмете и действие

Манипулирующий предмет - переменная предмета, срабатывает при событий "юнит получает", "юнит использует предмет", "юнит теряет предмет". Ссылается на этот итем
Событие - Юнит использует предмет
Условие - Тип манипулирующего предмета = .....
Ваше действие
Предмет напрямую связан со способностью. Короче с активной способностью предмета. Смотришь, какая способность стоит в предмете
Событие - юнит применяет смпособность
Условие - применяемая абилка = .....
Ваши действия
Если в предмете никакой активной способности нет, а в предмете, отмечен как итем на которого можно прожать, то сами события выше не запускаются. Проверял дебагом когда-то давно
xgm.guru/p/wc3/180041 где-то здесь пример можно посмотреть
Steal nerves #27 - 4 недели назад (отредактировано ) 5

» WarCraft 3 / Как создать пожар и тушение?

Можно будет использовать огненный столб, который кастует дамми, и когда нужно прервать, то дамми удаляешь. Огненный столб - абилка, которая прерывается, если юнит прекращает каставать. Идея бредовая. Хотя, мне кажется триггерно полностью нужно все делать (поджигающую абилу) нужно будет, только тогда можно будет потушить или прервать.
» не по теме
Помню, у орков у катапульты есть пассивка (жидкое пламя или горючая смесь). Там она еще и запрещает ремонтировать подожённое здание, если не ошибаюсь (посмотрите описание. У меня нет возможности посмотреть сейчас. Давно нашел ту интересную фишку). Только она бьет по области, наверное можно будет перенастроить. Там все что нужно - это удалить бафф с здания
xgm.guru/forum/showthread.php?t=52170 или триггерно временно классификацию убрать, тогда рабочий не сможет ремонтировать этого юнита. Потом не забудьте вернуть эту классификацию ему, иначе его не смогут починить
Steal nerves #28 - 4 недели назад (отредактировано ) 2

» WarCraft 3 / Добыча ресурсов

Во втором триггере переменная "Атакующий" может 10 раз успеть переписаться, пока ваш юнит делает замах и наносит урон. Для передачи аргументов используй CustomValue (целочисленная, на русском обычное значение или как-то как, короче юнит может хранить целое число). Есть другие способы передачи. А так что-то не вижу почему у других игроков не работает, то над в карту смотреть
Steal nerves #29 - 4 недели назад 2

» WarCraft 3 / Ошибка базы данных триггеров

Andrey33, скрины лучше скидывать на сайт.
а если создать новую карту, и попробовать сохранить, затем открыть? норм ведь откроет? если так, значит дело в редакторе (нужен JNGP и его настроить надо)
Steal nerves #30 - 1 месяц назад (отредактировано ) 2

» WarCraft 3 / Удаление работника если он построил сторожевую башню

Попробуй дебагом выводить на экран. Выводи имя юнитов (там triggerUnit, ConstructedStructure). По-моему, ConstructedStructure - переменная ссылается на здание, и работает при событий "юнит завершает строительство". ConstructedStructure в этом событий (юнит завершает строительство) равен TriggerUnit. А у вас указано на скрине событие, которое срабатывает при нажиманий кнопки строительства (Build structure). Существует ли при клике кнопки triggerUnit, скорее всего triggerunit подразумеваешь строителя (если событие ссылается на него, иначе, мб triggerunit пуст), и условие с переменной ConstructedStructure работает?
Посмотри как работает триггер без условии.
Строителя сложнее найти, так как при событиях юнит начинает строить и юнит завершает переменные ссылаются на здание, но не на строителя. Поэтому нужно ловить приказ на строительство, и дальше ссылаемся на юнита, получивший приказ. Но сам как-то делать пытался, но не доходил до этого
xgm.guru/p/100/179956?postid=336559#comment7 когда-то тоже задавал вопрос, ответа не нашёл четкого. Но можно схитрить
Steal nerves #31 - 1 месяц назад (отредактировано ) 9

» WarCraft 3 / Как увеличить урон боевой единице с помощью триггера?

как сказал quq_CCCP, добавляете классификации. Классификации в варкрафте не много, но можно добавить свои искусственно. Вот есть классификации самоубийцы, древо и механика
xgm.guru/p/wc3/wc3targets есть статья, эксперементируйте
» Если кто не понял, пример
древо и не самоубийцы и не механика -1 класс
самоубийцы и не древо и не механика - 2 класс
механика и не древо и не самоубийцы - 3 класс
древо и самоубийцы и не механика - 4 класс
древо и механика и не самоубийцы - 5 класс
самоубийцы и механика и не древо - 6 класс
древо и самоубийцы и механика - 7 класс
не древо и не самоубийцы и не механика - 8 класс
и так далее (сколько классов максимум наплодить я не знаю, не проверял), похоже что 8 классов.
Если поставить просто древо, то будет действовать на тех у кого та классификация установлена. Если поставить древо и самоубийцы, то будет то же самое делать (это не 4 или 7 класс, ибо в целях не указано механика или не механика, срабатывает только на то есть дреао и самоубийцы).
подправьте меня, если ошибаюсь
Steal nerves #32 - 1 месяц назад (отредактировано ) 1

» WarCraft 3 / TriggerEvaluate(trig)

» пояснения
Эта функция запускает условие триггера (точнее функцию, которая приписана в регистре) и эта функция может возвращать boolean. если TriggerEvaluate возвращает истину, значит условие триггера истино.
» пример для понимания
function ConditionalTriggerExecute takes trigger trig returns nothing
    if TriggerEvaluate(trig) then //если условие истино
        call TriggerExecute(trig) //то запускаем действие
    endif
endfunction
» тонкости jass
Хитрецы используют TriggerEvaluate в других способах. Например, урезают действие (action), а сами действия прописывают в условиях. Эта функция то же самое что и TriggerExecute, только здесь пишут в конце return boolean (условие). То есть вместо TriggerExecute используют TriggerEvaluate, а на конце прописывают return false.
function CCC takes nothing returns boolean
...... //действия
return false //по идее если триггер возвращает истину, то запускает действие (action). Но TriggerEvaluate не запускает действие, просто запускает функцию (проверяет условие) и возвращает boolean
endfunction

function DD takes nothing returns nothing
call TriggerEvaluate(trig) //вызываете условие триггера
endfunction
Часто условие может не срабатывать (возвращает ложь), возможно (мое предположение, так как не изучал TriggerEvaluate подробно, все особенности, как сработает ли условие с варкрафтовскими переменными) потому что потому что стоят варкрафтоские переменные (точно не знаю, проверь), ибо переменные пусты или заполнены другим чем-то. По идее переменные эти срабатывают по событию, а значит запускать TriggerEvaluate в момент срабатывания события
Steal nerves #33 - 1 месяц назад (отредактировано ) 2

» WarCraft 3 / Канал

Может быть он изначально скрыт? У меня тоже скрыт, нужно в настройках включить изображение
xgm.guru/p/100/190231?postid=348072#comment4 в ссылке есть текстовик, там написаны как настраивать канал, за что отвечают пункты
Steal nerves #34 - 1 месяц назад (отредактировано ) 0

» WarCraft 3 / Предметы

Нужно в способностях предмета цели настроить. xgm.guru/p/100/180041 Не помню точно в этом ли примере, там есть настройки клика на предмет. У меня компа просто нет уже =((
А в триггерах проверяешь условием - является ли предмет такой-то такой (в зависимости от события переменные разные, если то каст то цель каста, если то приказ, то цель приказа). то если обязательно нужно условие какое-то
Steal nerves #35 - 2 месяца назад 0
Steal nerves #36 - 2 месяца назад 2

» WarCraft 3 / Раптор Хаоса

А я подумал что хгм обновляет парк динозавров)) жаль пауков и жуков мало
Steal nerves #37 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Multiboard игроков

Либо создавать для каждого отдельную доску и показывать каждому нужную, как заполомили этим ответом сайт и форум. Бывает очень глупо плодить мультиборды, можно было бы попробовать использовать одну доску, изменяя лишь локально. Второй вариант - локально, то есть через GetLocalPlayer()
» пример
//при инициализации записываешь какие-то значения или в других ситуации изменяешь значения
set B[0]="красный" //переменная типа строка
set B[1]="синий"
local integer id = GetPlayerId(GetLocalPlayer())
call MultiboardSetTitleText(B[id]) //красный игрок будет видеть надпись "красный", а синий "синий". Похожему методу можно сделать с ячейками. Если ты понял хитрость
Попробуй это. Не знаю сработает ли эта теория. Лично сам это не пробовал
xgm.guru/p/wc3/bpe посмотри есть ли тут.
Пробовал через MultiboardDispley(MB,GetLocalPlayer() == Player(нужный игрок)) но что-то не то .
Допустим игрок 1 при нажатии ArrowUp открывает Multiboard при отпускании кнопки Multiboard закрывается , но с другими игроками начинает некорректно работать .
Некорректно это как?
Steal nerves #38 - 2 месяца назад (отредактировано ) 2

» WarCraft 3 / Как разделить предметы по классам?

Ну что там сложного? всем предметам в Редакторе объектов проставляете уровень.
» раскрыть
Событие - юнит подбирает предмет
Если уровень итема ==1 это условие смотри в разделе целочисленное
То делать действия
Иначе, если уровень итема == 2
То делать действия
Иначе дропнуть итем
сколько макс. уровень можно ввести ?
Можно использовать базу данных, например хэш-таблица. Там два ключа, удобно тебе базу делать. Там первый ключ - тип предмета (функция типа возвращает целое число), а второе просто можно пермаментный ноль (если придумаешь куда второй ключ давать.). Ты бужешь подзагружать из хэша нужные данные
Steal nerves #39 - 2 месяца назад (отредактировано ) 2

» WarCraft 3 / нужна помощь с тригерром(тригерами)

» раскрыть
При инициализации создаешь базу, есть функция генерирующее случайное число.
Забиваешь базу данных
UT[0] = пехотинец
UT[1] = бугай
UT[2] = лучница
Count = 2 это кол-во макс. типов, нумерация идёт с нуля у меня
CountU = 20 макс. возможное кол-во юнитов. Здесь можете сами указать . а вообще можно отказаться от этой переменной, проставляете сразу в цикл
Теперь как сделать рандом
set RandomCount = от 1 до CountU генерирует случайное кол-во юнитов
Цикл A от 1 до RandomCount надеюсь знаете как работает цикл? А то многие новички неизнают
-set RandomType = от 0 до Count генерируем случайный тип
-создать юнита с типом UT[RandomType]
Конец цикла
Вообще можно раскрыть BJ функцию и посмотреть как там генерируют кол-во циклом
тему то переименуйте
Steal nerves #40 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Юниты самовольно убегают

Юзай поиск. Нейтральный игроки не дают полноценной возможности управлять ихними юнитами, и поэтому приходится в константах рыться либо костыли (с приказами). Кроме возврата там у них есть много чего другого: например крип игнорит башню, идет мимо нее и др.
Steal nerves #41 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Не работает триггерный спелл.

Проверяй дебагом.
» раскрыть
Кстати, то что написал в коде работает?
  1. ты в в качестве фильтра написал функцию SpellGolemFireStone, короче вставил в функцию GroupEnumUnitsInRangeOfLoc. Исправь на SpellGroupForCreepConditionEnemy.
  2. Зачем ты ее удаляешь фильтр? во-первых, нужно было в переменную засунуть, и потом удалить. а так бесполезно создаешь. во-вторых, она не утекает, и удалять не нужно.
  3. Используй глобалку вместо GetTriggerUnit() в функции SpellGroupForCreepConditionEnemy (использую для переноса в фильтр, так как надежнее).
  4. ну и точки. неудобно же. взял бы функции GetUnitX и GetUnitY, GroupEnumUnitsInRange, IssuePointOrder

  1. Потом проверяй кол-во пикнутых юнитов в группу. Может быть фильтр не работает и прочее.
  2. Если группа норм выделяет, проверяй SpellGolemFireStone, почему не работает. Там приказы не может юзнуть или что-то еще. Может быть дело в самих даймиках, там радиус у них маленький, и им нужно подбежать ближе, а они не могут так как скорость движения на нуле и др
Steal nerves #42 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Автоподбор / Автопродажа предметов

Пока не в каких проектах. Просто потянуло создать систему подбора и продажи. Изначально, я посмотрел видео Вадима, где играл в карту под названием Весёлая ферма. Механика карты понравилась, но все было сыровато. Там нужно было без конца кликать, и практически не было возможности что-либо сделать (осмотрется, и др.), если в поле вырастало кучу овощей, нужно было собрать. Сумка у героя не резиновая, и много не положишь, поэтому нужно было потом собранное отнести куда-то. Если нужно было продать или занести куда-то, то выискивать магазин и положить. На это время теряется, так и ещё нужно было поляну обрабатывать, сорняки выдергивать и др. Жалко, что кнопочки не было. Я вспомнил одну замечательную свою наработку в первоначальном виде xgm.guru/forum/showthread.php?t=59707 И предложил автору карты PUver, пообещал доработать. Походу дела автор просил много чего переделать и доработать. Puver был внимателен (где я зачастую не разглядел ошибки), и помогал тестировать. За что спасибо ему. Мы вдвоём создали наработку. Пока карта Весёлая ферма не обновляется =((. Странно, что мало отписавшихся и не отображается в ресурсах. Просто не хочу, что наработка не пропала, МБ пригодится кому-то
Steal nerves #43 - 2 месяца назад 0

» WarCraft 3 / Создать в РО способность

quq_CCCP, чаннелинг спелы это какие спелы?
Steal nerves #44 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / способности

В ИИ я часто в качестве основы беру какие абилки, рабочие абилки. Например, хочешь сделать аое дамаг, берём либо буран или аое-шную абилку короля-гнома. И делаем что-то. Это только как пример. Не знаю, вот в указанных абилках можно там дамаг, эффекты и прочее убрать. И дай ещё юниту, и в скрипте укажи . Нужно знать какие абилки и когда применяются ИИ (буран бьёт по врагам, скил гнома когда рядом враги, культа кенариуса, когда все ранены и др). Можно самому триггерами отслеживать и приказами делать. Но часто бывает не работает, убрал все и параметры обнулил, и ИИ не хочет работать
Вот не знаю, как будет с негеройскими скилами.
А так только через приказы, триггеры. Вроде ИИ не трудно написать на одного юнита. Но сложно написать на расстрой, исследования и покупки и др
Steal nerves #45 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Создать в РО способность

Микростан может приказ сбивать (если куда-то бежал, потом остановится), позицию, сбрасывает цель атаки и может направитт на кого-то другого свою агрессию и прочее. Короче тупит. Разве не так? МБ кислотную бомбу и др абилки юзать как советовали
Steal nerves #46 - 2 месяца назад (отредактировано ) 2

» WarCraft 3 / как взять угол от угла поворота юнита в полярных каардинатах

» перевод градусы в радианы, радианы в градусы
Ну чтобы перевести, из градусов в радианы
180° = pi радиан = 3,14...
Если знаешь расположение градусов в окружности (там 2pi = 360°, или pi/2 = 90°)
60° = pi/3 радиан = 3,14/3 = 1,0466
30° = pi/6 радиан = 3,14/6 = 0,5233
Или использовать готовую формулу
Angle to Radians => Angle *pi / 180 (формула)
pi/180 = 3,14/180 = 0,01744 (коэффициент, записан в варе в переменную-множитель bj_DEGTORAD)
_________________
Чтобы перевести из радиан в градусы
Использую формулу
Radians to Angle => Radians * 180 / pi
1 радиан = 57,32°
0,5 радиан = 0,5 * 180/3,14 = 28,6°
Используют точно также переменную-множитель bj_RADTODEG, но с другим названием. Там было Deg to Rad (перевести в радианы), здесь Rad to Deg (в градусы)
тут есть погрешности до десятичных, до сотых и более. Поэтому может не соответствовать. Это как пример. Считал сам. А вообще юзайте готовые переменные и не морочьте голову
» код
local unit u = GetTriggerUnit()
local real a = GetUnitFacing(u) * bj_DEGTORAD //GetUitFacing возвращает параметры в градусы, поэтому нужно перевести в радианы
local real x = GetUnitX(u) + 100. * Cos(a)
local real y = GetUnitY(u) + 100. * Sin(a)
//потом то-то делаешь. x, y
xgm.guru/p/wc3/179127 тут есть пример карта, на гуи там, но переделать можно и на jass (там кастер двигается в ту сторону, куда смотрит). И пример в качестве кода, если нужно двигать относительно двух точек (сделал пример движение снаряда от Кастера к цели)
Steal nerves #47 - 2 месяца назад (отредактировано ) 2

» WarCraft 3 / Воскрешение не героев на алтаре

xgm.guru/p/wc3/182728?postid=341504 можно лимит создать, тогда юнита надо будет тренировать. Допустим, вы сделали лимит для игрока в 1 пехотинца. Как только вы наймете одного пехотинца, он тут же пропадает из всех зданий (лимит же). Если умрёт, то обратно появится в покупках в магазинах, точнее тренировать можно заново
Steal nerves #48 - 2 месяца назад 0

» WarCraft 3 / Проблема с редактором

ssbbssc, не через CustomScript, а через гуи. Через CS обычно ничего не будет
Steal nerves #49 - 2 месяца назад (отредактировано ) 0

» WarCraft 3 / Проблема с редактором

ssbbssc, ну почему дичь? Все ошибки относят к названиям функции и нативкам. Вообще то bj функции часто в гуи отображены, а их нужно раскрывать. Понимаю, что возникают вопросы, почему GetLastCreatedEffectBJ() сюда приплетен, мне неизвестно.
» раскрыть
Мне кажется это напрямую связано с гуи окошками. Возьми, вот в jngp новую команду (отключить реплеи), и в триггер вставь. И в старой версии редактора не откроется, будет писать, то что у автора
Steal nerves #50 - 2 месяца назад (отредактировано ) 2

» WarCraft 3 / Проблема с редактором

Автор, у вас на скрине пишет, что отсутствуют какие-то функции. там, в расширенной версии плагин наверное не работает.
недавно задавали вопрос