27

» WarCraft 3 / Кокон разрушает, но не выполняет функции

Принятый ответ
да действительно, есть лимит 64, связано с событием. но вряд ли у тебя там свыше 64 кокона.
вот так вот выглядит наше событие
TriggerRegisterDestDeathInRegionEvent - функция регистрирует события в регионе с помощью нативки EnumDestructablesInRect. EnumDestructablesInRect - типа что-то пика декора
RegisterDestDeathInRegionEnum - функция перебирает каждую декорацию.
function RegisterDestDeathInRegionEnum takes nothing returns nothing
    set bj_destInRegionDiesCount = bj_destInRegionDiesCount + 1
    if (bj_destInRegionDiesCount <= bj_MAX_DEST_IN_REGION_EVENTS) then
        call TriggerRegisterDeathEvent(bj_destInRegionDiesTrig, GetEnumDestructable())
    endif
endfunction

function TriggerRegisterDestDeathInRegionEvent takes trigger trig, rect r returns nothing
    set bj_destInRegionDiesTrig = trig
    set bj_destInRegionDiesCount = 0 //обнуляем
    call EnumDestructablesInRect(r, null, function RegisterDestDeathInRegionEnum)
endfunction
bj_destInRegionDiesCount и bj_MAX_DEST_IN_REGION_EVENTS - целочисленные переменные
bj_destInRegionDiesCount - что-то типа счетчика
bj_MAX_DEST_IN_REGION_EVENTS = 64 максимум 64 декора
RegisterDestDeathInRegionEnum - можно переделать, чтобы снять ограничение. Еще можно при пике декора, в самой EnumDestructablesInRect в фильтр добавлять нужные декорации, но это все исключительно от привычки
Загруженные файлы
27

» WarCraft 3 / Кокон разрушает, но не выполняет функции

not_name, не дичь. знаю что работает, я о другом. какой смысл проверять то какая эта декорация, если ты сам же ее указал? не хочу с тобой спорить, у тебя повышенное ЧСВ, знаю таких
27

» WarCraft 3 / Кокон разрушает, но не выполняет функции

Viktor19, ну так как у тебя на скрине, то смысла не было в условии. Так как ссылаешься на одну декорацию. Короче посмотрел, и понял, что ошибся: GetTriggerDestructable и GetDyingDestructable - одна и та же переменная (GetDyingDestructable можно раскрыть и увидеть). Просто думал, что это как с юнитами GetTriggerUnit и GetDyingUnit
бреее
Есть два события: общее и единичное. Единичное ссылается на одну декорацию, общее действует в регионе. Если общее раскрыть, то можно увидеть, что оно выделяет все декорации и регистрирует (создает) событие на каждую выделенную декорацию. Если создашь триггерно новую декорацию, то надо на нее тоже надо регистрировать событие.
Загруженные файлы
27

» WarCraft 3 / Кокон разрушает, но не выполняет функции

выводи дебагом на экран для проверки
попробуй ссылаться на эту переменную
constant native GetTriggerDestructable takes nothing returns destructable
так как GetDyingDestructable не точно (для этого тогда другое событие нужно, общее, то которое "декорация умирает" без ссылки на одну единственную декорацию)
не проще ли сделать изменить одно ли событие на общее "декорация умирает". И точку удали.
27

» WarCraft 3 / Как использовать способность "Канал" тригерно?

посмотри статьи, юзай поиск
по факту ловят применение скила:
событие - юнит применяет способность
условие - применяемая способность == твоя способность
действия - действия твои (много чего можно написать в триггерах, зависиит от фантазии)
не забудь настроить канал
Загруженные файлы
27

» WarCraft 3 / Карты, в которых есть триггеры на джассе не запускаются.

Прикрепил бы картинку к вопросу
Информации мало! Скинул бы пример этого спела. Случаем cjass или vjass не используешь? Есть предположение, что не сохраняется что-то правильно. Нужен jngp и сохранять два раза. Проверяешь карту. Потом закидываешь в архив кампании
мб не видит, ибо код не скомпилировался норм, а если и видит, то мб и не запустит. Хотя чего гадать-то
27

» WarCraft 3 / Можно ли убрать "сбор" и как это сделать?

равкод способности — 'ARal'. Удали эту способность
Rally-point of unit сборный пункт юнита (точку) можно указывать с помощью триггеров
27

» WarCraft 3 / Как проверить есть ли в области ратуша?

классификацию проверить? выбираешь всех и фильтром отсеиваешь по классификацией
эм а как я проверю?
там проверяешь уровни, если больше нуля, то у него она есть. У обычных юнитов она изначально есть (задано в РО), равна единице вроде
27

» WarCraft 3 / Переменные (практика)

Grafinya2, что там у тебя не получается то?
  1. выводи значения переменных на экран, есть такая замечательная функция дебаг BJDebugMsg. хотя это на jass. Попроще на гуи можно просто выводить на экран, в разделе игра там есть эта команда
  2. на ноль делить нельзя (и делитель тоже нулем не должен быть)
  3. может быть так, что переменная не содержит никаких значении. Короче ты не присвоил -ла переменных никаких значении.
  4. у целочисленных переменных значения округляются в меньшую сторону при делении. "6 / 5 = 1,2" или "8 / 5 = 1.6" или "9 / 5 = 1,8", но округляется до 1. Засомневался что-то я в своих словах, поэтому проверил 1-ым способом. Вывел дебагом. В большую сторону не хочет округляться. Покопался по хгм, нашел норм функции округления
  5. и др. неизвестные обстоятельства
все вопросы надо задавать на сайте. не стесняемся и не боимся
Загруженные файлы
27

» Он вам не клоун! / Брейншторм по контентной стратегии XGM

Действительно, нужно собрать всех на форуме, кто шарит в программировании, в дизайне и прочее. Кламп, Док, Адольф, Скорп и Диод, Злая Тыща и пусть пилят игру с мощным редактором) оплата 100 рублей в месяц, и это на всю команду. Ну что поддержка. Если каждый школьник вложится в это, мощная финансовая поддержка. Вот почему не объединятся то? таланта много
27

» WarCraft 3 / Объясните функцию(Строчку)

была тема о том что нативки которые начинают с GroupEnum....могут не выделять москитов в группу xgm.guru/p/wc3/187447#lastpost
правда не все
с помощью нативок GroupEnum... фильтр отсеивает не нужных. Короче берет всех кто попал, и фильтром отсеивает. Если вернет true, то юнита зачисляют в группу, иначе отсеивают
у вас фильтр странный. Владелец GetFilterUnit враг владельца GetEnumUnit. Мне кажется лучше GetEnumUnit в переменную засунуть. Ведь варкрафтоская переменная мб не надежной, так как GetEnumUnit работает только в ForGroup. Неизвестно существует ли ссылка, пуста ли переменная. На кого ты ссылаешься? Существует ли этот юнит? мб его и не сущестует
27

» WarCraft 3 / DGUI и альтернативы.

alexprey, как эта тула работает? вот код сгенерировал, а куда вставлять то?
27

» WarCraft 3 / Не работает триггер выбора

Принятый ответ
  1. посмотри в РО у абилок прописаны приказы
  2. попробуй выводить на экран (см. внизу ссылку). Тыкни этой абилкой на юнита и проверь
  3. поищи в текстовике cj_order.j (находится в архиве игры). Кстати можно этот текстовик на сайте найти, Скорп 1000 выставлял
  4. поищи на сайте, такой вопрос был. Кому-то я на такой вопрос отвечал
ратуша самой себе может продавать? попробуй настроить способность, и потыкает на себя пусть. Мб нельзя
Загруженные файлы
27

» WarCraft 3 / Конфликт нескольких таймеров для юнита

что бы определять какие таймеры запущены, тебе их нужно где то запоминать, естественно.
  1. Можно запоминать логическую переменную (true), ее можно сохранить по хэндлу кастера. Если будешь юзать скилл, проверяй сначала логическую. Иначе, если ничего не сохранял, выдаст false.
код
	local unit u = GetSpellTargetUnit()
	local integer id = GetHandleId(u)
	local boolean b = LoadBoolean(hash,id,1)
	if not b then
		call UnitAddAbility( u, 'A06B' )
		call SaveBoolean(hash,id,1,true)
	endif
  1. Необязательно сохранять логическую. Можно проверять наличие абилки (уровень абилки > 0)
  2. Сохранить таймер по хэндлу кастера, чтобы ссылаться на таймер (когда будешь юзать скилл). Чтобы перезапустить и прочее. Также можно выгружать из хэша в локалку, и проверять локалку пуста ли она и прочее
код
function MyAbility takes nothing returns nothing
	local unit u = GetSpellTargetUnit()
	local integer id = GetHandleId(u)
	local timer t = LoadHandleTimer(hash,id,1)
	local integer h = GetHandleId(t)
	local real timerX = TimerGetRemaining(t)
	if t == null then //если таймер пуст, то ...
		set t = CreateTimer() //создаем таймер
		set h = GetHandleId(t)
		call UnitAddAbility( u, 'A06B' ) //добавляем абилку
	    call SaveHandleTimer(hash,id,1,t)
		call SaveUnitHandle(hash,h,1,u) //запоминаем таймер
		call TimerStart(t, 25.00, false, function TimerFunc) //запускаем таймер
	elseif t != null then //тут еще уровень абилки можно проверить
		call PauseTimer(t)
		call TimerStart(t, 25.00 + timerX, false, function TimerFunc)
	endif

	call SaveUnitHandle(hash,h,1,u) //сохраняем юнита
set u = null
set t = null
endfunction
TimerGetElapsed:- сколько прошло (увеличивается до заданного значения)
TimerGetRemaining - сколько осталось (уменьшается до нуля)
TimerGetTimeout - на сколько запущен таймер (заданное значение не меняется короче)
27

» Он вам не клоун! / По ux/usability сайта / дизайн

ZlaYa1000, то что ты скинул, открылось))
я имею в виду тему xgm.guru/p/wc3/189638 (это как к примеру) здесь скрин как открыть? сорри, блин туплю конечно, можно через "открыть изображение" и браузер покажет изображение
не знал, что есть такая кнопочка, если тыкнуть правой кнопкой мыши. все время скачивал
27

» Он вам не клоун! / По ux/usability сайта / дизайн

А можно увеличить изображение картинки? Просто пользователи часто скидывают скрины, тем более с широкими размерами. И иногда не видно что там изображено (мелкий текст, например скрин триггеров), поэтому часто приходится скачивать изображение, чтобы у себя на компе рассмотреть. Потом мусор надоедает удалять. Мб сделать так, тыкнул и изображение увеличилось, еще раз тыкнул еще раз увеличил, не скачивая ничего
27

» WarCraft 3 / Нужны движения юнита через клавиши w,a,s,d

Есть карта близзардская "Гран-При Азерота", ее можно открыть
xgm.guru/p/wc3/181574 маньяк вот молодец, норм скрины
27

» WarCraft 3 / "Игрушечный замок"

mishanka122, забыл уже, только сейчас вспомнил. Ты не можешь отследить застройщика по событиям юнит начинает/завершает строительство, не предусмотрено. совсем запутался
а так да можно и через каст отследить, но тебе же нужно здание отловить верно? вот подходит события "юнит начинает/завершает строительства" (описал выше, скинул карту с примером и с отладкой). Но тут надо связать как-то это с кастом (все продумать итд).
27

» WarCraft 3 / "Игрушечный замок"

дебагом
У игрушечного замка, точнее способность очень похожа на обычную стройку.
приказ, как только получил и побежал строить
событие - юнит получиил приказ в точку
условие - твой ид приказ (обычно четырех-значный равкод здания, а в случае с игрушечным замком, наверное ид-абилки)
начало строительство, как только здание начинает строится
Событие - "юнит начинает строительство" или "юнит входит в рект"
И тут находишь юнита с помощью переменных:
GetTriggerUnit()
GetConstructingStructure() юнит входит в рект на эту переменную не работает
завершает строительство, здание готово
Событие - "юнит завершает строительство"
И тут находишь юнита с помощью переменных:
GetTriggerUnit()
GetConstructedStructure() юнит входит в рект на эту переменную не работает
строителя не реально отследить в конце постройки, ведь нет ссылки. Можно вначале узнать, когда приказ получает на строительство или начинает строительство.
Загруженные файлы
27

» Hanabishi's Blog / Jass New Gen Pack - Rebuild

Hanabishi, спасибо. короче скачивал exe-шник и обычный архив Rebuild - не сработало, что-то не запускает USM и не сохраняет норм. скачал архив в режиме совместимости (Rebuild Combat), заработало. У меня семерка.
27

» Hanabishi's Blog / Jass New Gen Pack - Rebuild

Использую Jass New Gen Pack 5d Exp2
пробовал использовать xgm.guru/p/wc3/data-manager
сохраняю мапу, выдает кучу ошибок при компиляции, то cjass то vjass
h