23

» WarCraft 3 / Вопрос по Таймерам и JASS

Принятый ответ
Похожие вопросы:

ответ
Во-первых, что есть "локальный таймер" ? Это таймер записанный в локальную переменную?
Во-вторых, зачем тебе точка, если ты используешь XY ? Работай с ними
В-третьих, да. Использование в течении всей игры одной заранее созданной точки вызывает меньше нагрузки чем постоянно создание и удаление новых (кто-то там доказывал на примере и цифрами что от ремувнутых точке всё равно остаётся шлак в памяти...)
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
ответ
8gabriel8,
Если что, скидывай карту.
Беда в том, что эта карта из кампании, там всё очень много весит, потому не буду.
PT153,
ну как там дела?
Пока никак, ибо из-за сессии отложил редактор в сторону (собственно, даже сюда времени зайти не было, к сожалению)
Рад, что ты предложил выход, но я, боюсь, твой код себе никак не перенесу, ибо, как писал в вопросе, лишь на GUI могу работать.
8gabriel8,
мне кажется, проблема не в этом триггере, а в другом, который запускает триггеры и таймеры.
Триггер, запускающий таймер, вряд ли многое испортить может
Мдаааа... Я свою ошибку таки нашёл. Она была в самом тупом месте из всех возможных.
Я действительно не понимаю, это у меня голова не работает совершенно, или в редакторе какие-то баги
Цитата из вопроса, у меня не работает голова.
Так вот, это я дурак полный.
Запихнул обнуление своей переменной ВНИМАНИЕ! в триггер, который игрокам-компьютерам каждые 2 секунды обновляет ресурсы. А вместе с этим и обнуляет снова и снова мою переменную. Обнаружил ли я это через дебаги? Нет, просто от скуки и безнадёжности положения начал прокручивать и листать все триггеры.
Спасибо всем, кто пытался помочь, это было очень приятно) Мне жаль, что вы ломали голову и тратили время впустую по моей глупости и невнимательности.
ответ
проверил, все работает, всем спасибо)
в коде будет примерно такой вид:
function getTrajectoryRadius takes real speed, real rotationSpeed returns real
	local real  N = 360 / rotationSpeed		// количество сторон вписанного многоугольника
		return speed / (2 * (Sin (PI / N)))
endfunction

23

» WarCraft 3 / Помогите с триггером

Похожие вопросы:

ответ
Для начала создаешь способность вампиризма, например с 4 уровнями.
1 уровень - 25%
2 уровень - 50%
3 уровень - 75%
4 уровень - 100% вампиризма.
Если нынешнее здоровье героя деленное на максимальное здоровье этого же героя < 0,25 - делаем четвертый уровень способности.
Если нынешнее здоровье героя деленное на максимальное здоровье этого же героя < 0,50 - даем третий уровень способности
И т.д.
ответ
Каст тайм у посоза иллюзий не нулевой как не крути, лучше уж вручать юнитам руны, это быстрее чем использование дамика.
ответ
Ладно, я решил проблему)
ответ
Добавляешь в триггер действие на отдачу конкретного приказа для конкретного юнита:
Новое действие (Ctrl+R)
Боевая единица / Unit
Отдать приказ без указания цели / Issue Order With No Target
Указываешь своего рабочего и выбираешь 3 или 4 приказ предлагаемого списка
  1. Добывать золото из ближайшего рудника / "autoharvestgold"
  2. Рубить ближайшие деревья / "autoharvestlumber"

23

» WarCraft 3 / рестарт карты

Похожие вопросы:

ответ
Это баг варика. Когда ты используешь несколько диалогов и показываешь их подряд, название Title надо каждый раз заново создавать. Если бы у тебя был один диалог и ты бы его показывал несколько раз подряд - заголовок сохраниться.
Могу посоветовать при пересоздании запускать триггер dialog повторно.
ответ
Roy Mustang:
Camby:
При попытке открыть карту, редактор закрывается с ошибкой
В мультиплеере вроде не как
В Сингле вот так
ответ
~8gabriel8:
Файл - Параметры - Проверка карты - "Фиксированный случайный разброс"

23

» WarCraft 3 / Помогите с триггером

Похожие вопросы:

ответ
тему нормально бы назвали бы
что такое Переключающий юнит??
В русских триггерах переключающий юнит (в англ. триггерах triggering unit) - это юнит, на которого ссылается триггер. Эти все переменные зависят от событии. Вот в событий - юнит умирает, две переменные - это умирающий юнит (Dying unit), и убийца (Kiling unit). Конкретно триггер ссылается на умирающего юнита, то есть здесь
умирающий юнит = переключающий
Есть много похожих событий, где встречается переключающий.
Например, в событий "юнит применяет способность" выделяются две переменные "кастер" (англ. Casting unit) и "юнит-цель" (Target unit of ability being cast). Конкретно триггер ссылается на кастера.
кастер = переключающий
или например в событий юнит - получил приказ
выделяется переменная "юнит-получил приказ" (ordered unit) и цель (если есть, а то есть приказы без цели)
юнит, получивший приказ = переключающий
часто удобно еще владельца переключающего юнита находить
обычно пишут владелец переключающего юнита, а надо бы trigger player (переключающий игрок)
юзай дебаг (см. карту дебаг)
как называется юнит который начал строительство?
я хочу убить юнита который начал строительство
в событии - юнит начинает строительство
есть переменная : строящее здание (Consrtucting structure)
в событии - юнит завершает строительство
переменная завершенная постройка (Consrtuctied structure).
Конкретно события ссылаются на строящее здание, то есть переключающий юнит = здание. А вот строителя нельзя найти.
и мне нужно чтобы здание, строительство которого было начало мгновенно построилось!
но когда я ставлю триггерно
Боевая единица- Определить [Сооружает структуру] процесс строительства [100%]
у меня действительно ставиться полоса строительства как 100% но само строительство не заканчивается. :(
получается стоит стройка здания которое построилось на 100%
Ты про ту функцию
native UnitSetConstructionProgress takes unit whichUnit, integer constructionPercentage returns nothing
Боевая единица - Set Building Construction Progress
чего-то тоже у меня не работает эта функция совсем, может не правильно юзаю, на форуме мало что нашел.
чего-то тоже у меня не работает эта функция совсем, может не правильно юзаю, на форуме мало что нашел.
Короче заработало.
Если рабочий будет строить, а ты в это время воспользуешься этой функции по "событию - юнит начинает строительство" ничего не сработает. Странно как-то. Нужно добавлять 100% после некоторого времени. Спустя 0,01 секунду.
Убрать рабочего после того как в начале возведет фундамент, так да, полоска в 100% то останется =(( Полоска убирается, если рабочий придет и достроит (хотя уже достраивать нечего =( , полное хп )
У рабочего есть способность "ремонтировать". Там надо смотреть.
Советую так:
Юнит - начинает строительство
действие - ждать 0,01 секунд
действие - Боевая единица- Определить [Сооружает структуру] процесс строительства [100%]
следующий момент
юнит - завершает строительство
действие - удалить или убить строителя
Кстати в событий "юнит завершает строительство" и "юнит завершает строительство" нет ссылки на строителя. Только на построенное только что здание. Но эта проблема решаема. Нужно отслеживать приказ строителя, только на форуме одному делал наработку найти не могу, не пойму как делал
как отследить строителя, это делается по приказу
851994 (buildmenu): Приказ (без указания цели), открывающий меню строительства воина, способного возводить здания.
событие - юнит отдал приказ без цели
условие - целочисленное (id приказ) = 851994
приказ 851994 почему-то не отслеживается, он лишь позволяет открыть меню строительства. не катит. пробую тогда потом другое выбираем постройку в меню строительства, и строитель бежит строить.
событие - юнит отдал приказ цель
условие - классификация цели = здание или дерево
казалось бы все так, но недостаток в том, что он может за это время, пока бежит к точке строительства, передумать по желанию игрока. Поэтому надо смотреть, заранее там кучу событий и условии, короче проверок что если там пойдет не так
событие - юнит отдал приказ цель
условие - приказ = repair
можно использовать приказ repair. Короче от способности "ремонтировать" При строительстве и ремонте у орков и людей есть такая фишка. А вот у эльфов нет. Недостаток конечно. И еще рабочий может пойти ремонтировать здание, однако тут срабатывает приказ "smart", который равнозначен "repair". Когда строит/ремонтирует работник можно выяснить текущий приказ. У работника в этот может приказ repair а у светлячка при строительстве id здания, а при ремонте у светлячка id от "обновление".
ответ
Для начала создаешь способность вампиризма, например с 4 уровнями.
1 уровень - 25%
2 уровень - 50%
3 уровень - 75%
4 уровень - 100% вампиризма.
Если нынешнее здоровье героя деленное на максимальное здоровье этого же героя < 0,25 - делаем четвертый уровень способности.
Если нынешнее здоровье героя деленное на максимальное здоровье этого же героя < 0,50 - даем третий уровень способности
И т.д.
ответ
Каст тайм у посоза иллюзий не нулевой как не крути, лучше уж вручать юнитам руны, это быстрее чем использование дамика.
ответ
Ладно, я решил проблему)

23

» WarCraft 3 / Вылетает карта

Похожие вопросы:

ответ
Было создано 22 366 679 экземпляров класса CUnitListNode, которые заняли 255.9 МБ памяти.
При очередной попытке выделения, игра упала.
Виной всему утечки памяти: за 21 минуту набралось 80 тысяч групп и 20 тысяч точек.
Также, из-за выполнения большого количества кода, сильно лагает.
На стадии выбора героя (первые две минуты), выполняется 550 000 операций в секунду, а далее — 1 200 000.
Для сравнения: лимит потока — 300 000 операций.
Хорошо, что ты приложил карту, так как в логе маловато информации.
ответ
nvc123, увы там дефолт ИИ, недаст особо управлять мобами.
Щяс скину пример из доты но более понятный, как заставить нейтралов ходить и атаковать.
Вот вам пример контроля нейтралами.

23

» WarCraft 3 / Приоритет атаки

Похожие вопросы:

ответ
В редакторе объектов: Характеристики - Приоритет (число).
Юнитов с высоким приоритетом атакуют в первую очередь.
ответ
~2Serious4Die:
avuremybe, я уже впринципе нормально их знаю, но не знаю как лучше реализовать подобное.
Нашел решение. На событие боевая единица умирает выбирать врагов в диапазоне откидывая тех кого невидно и атаковать случайного из них.
ответ
~8gabriel8:
Попробуй ещё оставить крипов Нейтрально-враждебными или поставить под контроль назначенного игрока и триггерно в категории действий ИИ убрать у них контроль ИИ.
Вот тут Steal nerves кое-что потестировал:
ответ
XGM Bot:
Похожие вопросы:

ответ
В редакторе объектов: Характеристики - Приоритет (число).
Юнитов с высоким приоритетом атакуют в первую очередь.
ответ
8gabriel8, приоритет менять нельзя
стандартный ии использует это поле для контроля юнитов
пишем свой ии в котором вместо приоритета юзаем свою переменную которой можем задавать любое значение
8gabriel8:
Но для меня это путь в Москву через Владивосток
ну если между тобой и Москвой находится Владивосток то иначе никак(а вар3 как раз расположен за Владивостоком)
ответ
Так ты дай юниту 2 атаки и глянь, какие он использует на какой дистанции.


23

» WarCraft 3 / Маленькая сборка карт (Рп, редактор)

Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Число вставленных изображений: 0, а требуется не менее 3
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
Count of inserted images is: 0, but required not less than 3
// CID3
23

» WarCraft 3 / Проблема с order

Похожие вопросы:

ответ
Где код таймера который должен двигать снаряд?
ответ
Ну не у всех приказов есть строковые названия приказа, пример итемы не имеют. Но у всех может быть свой идишник, короче номер приказа. Его можно вывести на экран дебагом, если вы конечно, не знали. Посмотреть можно список всех приказов строковые и их идишники. Дабы отдавать приказы, есть нативки отдачи приказов так строковым, так и по ид. Правда, в гуи я точно помню, что близзард не ввели команды по работе с идишниками. Поэтому вводим код. Через custom script пишете текст, и вводите id-приказ. Вбей в поиск жезл иллюзии id приказ.


Еще можно руну иллюзий дать юниту


23

» WarCraft 3 / World Of Hero

Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Типы файлов: png, mp4 и не содержат один из: w3m, w3x, scm, scx, sc2map, sc2ma, pud, w3n, sc2mod, zip, 7z, rar, tar, gz, apk, gzip, jar, lzip, tgz, tbz2, bz2, zipx, zz, dmg, ipg, z, iso
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
File types are: png, mp4 and don't contain one of: w3m, w3x, scm, scx, sc2map, sc2ma, pud, w3n, sc2mod, zip, 7z, rar, tar, gz, apk, gzip, jar, lzip, tgz, tbz2, bz2, zipx, zz, dmg, ipg, z, iso
// CID2
23

» WarCraft 3 / Захват точек

Похожие вопросы:

ответ
периодическим таймером проверяем есть ли рядом юниты враждебные к точке
если есть то уменьшаем значение переменной
как только значение стало равно 0 точка стала нейтральной
как только значение достигло минимума (например -10) то меняем владельца на того кто захватил и устанавливаем значение на максимальное (например 10)
а ну ещё сделай проверку чтобы все юниты возле точки принадлежали к 1 клану
а вообще подобное кучу раз спрашивали
гугл в помощь
ответ
Вы смотрели тут, тут и тут?
Там всё через gui
ответ
Nik_It, с таким событием есть только тот юнит, у которого уменьшилась жизнь.
Нужен триггер с событием получения урона.
С: Юнит X получает урон
У:
  (Жизнь Triggering Unit - Получаемый урон) <= 500
  И
  Жизнь Triggering Unit > 500
Д:
  Сменить владельца Triggering Unit на Владелец (Damage Source)
  Установить Жизнь Triggering Unit на 100%.
ответ
мб отслеживать приказы, какие приказы будут у работника по 100% хп здания?
Или дамиком построить здание, и отказатся строить, у всех игроков - работники альянса (иначе это не пашет) при ремонте здания союзника, если больше никтот не чинит, здание делать за того кто чинит, если бросил чинить (работник отдал любой другой приказ или умер) вернуть в нейтрала, ну и так далее.

23

» WarCraft 3 / Mechanic

Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Длина текста: 8, а требуется не менее 20
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
Text length is: 8, but required not less than 20
// CID4
23

» WarCraft 3 / AI помогите

Похожие вопросы:

ответ
Щас бы в 2018 делать Melee карты)))))
В гуи сделай обычный ИИ (если карта не совсем стандартная)
А ещё лучше: xgm.guru/p/wc3/aieditor
ответ
Пока для тестирования оставил вариант с маленькой атакой, так как для нее не требуется писать дополнительных скриптов. Я не знаю, как работают функции отбора групп (отрядов) по условиям и как это оптимизировано внутри игры, но есть подозрение, что если в таймере выбирать все стенки на карте и потом искать боевые единицы врага вокруг каждой из них, это может быть долго. Для такого варианта хорошо кэшировать стены при постройке, но я на время тестирования не стал над этим заморачиваться. Всем спасибо за помощь.
ответ
После применения способности, игра просто доходит до ожидания, вызывает его и все. Можно ждать бесконечно, остальной код не будет исполнен.
TriggerSleepAction нельзя вызвать в кондишенах, только в действиях. Либо юзай экзекют, либо не юзай вейт

Результат тот же, до кода, следующего после цикла, исполнение не доходит.
Ты таким образом себе оп лимит сломал, ведь в первую же долю секунды цикл обрабатывает 25к+ действий

Дредлорда как колбасило при касте, так и колбасит, анимацию он отказывается адекватно
Таймером создаёшь нулевую задержку, устанавливаешь нужную анимацию, а дальше уже либо периодиком проверяешь приказ и отменяешь анимацию, либо через время просто отменяешь анимацию. Это основы гуи, не то что джасс)

вот так решается первый вариант
function InitTrig_Annihilation_Conditions takes nothing returns boolean
    if (GetUnitAbilityLevel(GetSpellAbilityUnit(), udg_Annihilation) > 0) then
        call ExecuteFunc( "AnnihilationActions" )
    endif

    return false
endfunction
и так второй
function ExecuteCast takes nothing returns nothing
    local timer spellDurationTimer = GetExpiredTimer()
    local integer timerHandle = GetHandleId(spellDurationTimer)
    local unit target = LoadUnitHandle(udg_Hash, timerHandle, 0)
    local unit caster = LoadUnitHandle(udg_Hash, timerHandle, 1)

    call ResetUnitAnimation(caster)
    call SetUnitExploded(target, true)
    call KillUnit(target)
    call DestroyTimer(spellDurationTimer)
    set spellDurationTimer = null
endfunction

function SetAnim takes nothing returns nothing
    local timer t = GetExpiredTimer( )
    
    call SetUnitAnimation( LoadUnitHandle( H, GetHandleId( t ), 1 ), "channel" )
    call TimerStart(t, 5, false, function ExecuteCast)
    
    set t = null
endfunction

function AnnihilationActions takes nothing returns nothing
    local unit target = GetSpellTargetUnit()
    local unit caster = GetSpellAbilityUnit()
    local timer spellDurationTimer = CreateTimer()
    local integer timerHandle = GetHandleId(spellDurationTimer)

    call SaveUnitHandle(udg_Hash, timerHandle, 0, target)
    call SaveUnitHandle(udg_Hash, timerHandle, 1, caster)
    call SetUnitAnimationByIndex(caster, 11)
    call SetUnitZ(target, 400)
    
	call TimerStart(spellDurationTimer, 0.00, false, function SetAnim)
	
    set target = null
    set caster = null
    set spellDurationTimer = null
endfunction

23

» WarCraft 3 / Интерфейс в режиме кинематики

Похожие вопросы:

ответ
Странно, попробуй тогда еще нестандартные кланы и фиксированные параметры игрока. Рамка в синематике (леттербокс режиме) должна быть та же, что и игровой интерфейс.

23

» WarCraft 3 / Помогите (ошибка)

Похожие вопросы:

ответ
Честно, такого говна в триггерах я давно не видел. Пиши мне в дискорде (izobretatel__), объясню большинство ошибок. Возможно неправильный дс дал, напишешь свой.
ответ
Нашел ответ МУЖИКИ!
Кароче
кидаю скрин на ответ и продублирую текстом. ПРОБЛЕМА РЕШИЛАСЬ!!!
Мне в Дискорде Team OZE помогли, по английский понимаешь? я Просто оставлю это здесь:
Hey Legion TD - small update regarding the game-crash fake 12.0 incident from yesterday. I looked into it today and while there are many small changes made, meant to “corrupt” the savefile, only one of them is actually relevant . You can apply the following fix: Inside your CustomMapData folder (C:\Users\USERNAME\Documents\Warcraft III\CustomMapData\Legion_TD_TeamOZE) and inside your folder, there is a "Data.pld " and "Data.txt " file. Open them and delete the "\\t ". Save the files aaaaaaaand that should be it!
Между com и /channels пробел удали, и точку перед com поставь, и ссылка тебя выведет на их дискорд с этой проблемой, только надо пройти регистрацию если нет дискорда.

23

» WarCraft 3 / Warcraft of heroes and magic 3

Ваш ресурс не прошёл автомодерацию. Пожалуйста, внесите исправления или ожидайте проверки модератором.
Причина
Число вставленных изображений: 0, а требуется не менее 3
Your resource has not passed automoderation. Please make corrections or wait for the moderator to check.
Reason
Count of inserted images is: 0, but required not less than 3
// CID3
23

» WarCraft 3 / Использование кастомного кода

Похожие вопросы:

ответ
Событие EventUnitSummon
GetUnitX\Y от GetSummonedUnit()
ответ
goodlyhero, ну уже вроде делали с перехватом кастом функций или хештаблицу, wenhao же видел? Там китайская сборка мемхака и 4 библиотеки.

Но вариант фога постабильнее, во первых микс файл в папке с варом позволит создавать карту в обычном режиме и тестировать, + встроенная защита спасёт от ошибок и фаталов на ровном месте, указывая где проблема.

Простые R\W функции то можно не трогать, там все норм. А вот конверты, хуки, вызовы из game.dll - это вот как раз требует нативного решения, ибо довольно медленное.

Ну и думаю ивенты без норм декларации нативок для триггеров не добавить...

23

» WarCraft 3 / Где утечки

Похожие вопросы:

ответ
Функция GetUnitLoc порождает новую точку, поэтому и счетчик хендлов увеличивается.
ответ
quq_CCCP, Ну я на хайве видел полуджассовый вампиризм. Так мне и нужно вручать при замахе, чтоб если героя диспелят он вампиризм при атаке вернул. А утечку показывает, как я атакую, сразу хендл на один повышается. Может руна не удаляется?
ClotPh, Вообще не понял о чём ты.
Решил проблему, утечка возникала из -за не удаления руны, она почему-то не удаляется изнутри триггера, создал отдельный для удаления и нет утечки.
ответ
Alexey103, утекает функция проверки есть ли у юнита предмет
это бж функция которая использует локалку типа итем и не обнуляет её
ответ
Ну set bj_wantDestroyGroup не спасает полностью, потому что после уничтожения группы не объявляется set g = null, а решение - использовать глобалки или переходить на джасс

А "ничего не делать" выкинь нафиг из головы, эта функция делает только хуже

Условие первое на втором скрине вообще как-то криво построено, зачем там или если только одно условие?
ответ