14

» WarCraft 3 / Изменение типа доступности, замена зданий при строительстве

Принятый ответ
Я нашел такую функцию в гуи за 15 секунд, хотя не пользовался ей никогда. В чем проблема просто поискать?
Если даже это не помогло тебе, и ты не допетрил, что нужно делать то вот:
  1. добавляешь в РО рабочим оба здания и А, и Б
  2. в инициализации запрещаешь строить Б для всех игроков
  3. триггер "игрок сделал улучшение" -> сделанное улучшение == (твое улучшение) -> разблокировать строительство Б для (игрок триггера) и заблокировать строительство здания А для (игрок триггера)
  4. Бинго!
Загруженные файлы
14

» WarCraft 3 / Как сделать триггерный поджог?

Я не знаю как условить, что урон был нанесен именно заклинанием. У меня получилось поджигать юнита при любом нанесении урона. В событие добавил только паладина, чтобы работало на всех нужно сделать отдельный триггер "юнит вошел в область (вся карта) -> добавить событие триггеру (gg_trg_DetectFireDamage). В триггере сообщения для дебага есть, можешь удалить. Если есть вопросы, помощь в освоении жасса - контакты в профиле, пиши.
Вот код, карту также прикрепил ниже
function Trig_DetectFireDamage_Conditions takes nothing returns boolean
    return GetUnitTypeId(GetEventDamageSource()) == 'Hblm' //наш огненный... как там его... А, точно - еврей
endfunction

function TimerFire takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit u = LoadUnitHandle(udg_HASH, GetHandleId(t),StringHash("fireUnit"))
    local unit u2 = LoadUnitHandle(udg_HASH, GetHandleId(t),StringHash("fireSource"))
    local trigger trig = LoadTriggerHandle(udg_HASH, GetHandleId(t),StringHash("fireTrigger"))
    local integer count = LoadInteger(udg_HASH, GetHandleId(t),StringHash("fireСount"))
    local real damage = LoadReal(udg_HASH, GetHandleId(t),StringHash("fireDamage"))
    
    call DisplayTextToForce( GetPlayersAll(), "count" + I2S(count) )
    
    call DisableTrigger( gg_trg_DetectFireDamage ) //выключаем триггер, чтоб опять не сработал и горение не зациклилось
    //наносим урон. использую БЖ функцию, т.к. в нативке много непонятных страшных аргументов я не буду лезть в это дерьмо
    call UnitDamageTargetBJ( u2, u, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE )
    call EnableTrigger( gg_trg_DetectFireDamage ) //вкл триггер
    
    //какой нибудь эффект бахнуть к юниту
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIfb\\AIfbSpecialArt.mdl",u, "head" ))
    
    call SaveInteger(udg_HASH, GetHandleId(t),StringHash("fireСount"),count-1) //уменьшаем количество срабатываний
    if count <= 1 then
        call DisplayTextToForce( GetPlayersAll(), "destroy" )
        call FlushChildHashtable(udg_HASH, GetHandleId(t))//очищаем хеш
        call PauseTimer(t)
        call DestroyTimer(t) //удаляем наш таймер, мол все, гореть больше не будет
    endif
    set t = null
    set trig = null
    set u = null
    set u2 = null
endfunction

function Trig_DetectFireDamage_Actions takes nothing returns nothing
    local timer t = LoadTimerHandle(udg_HASH, GetHandleId(GetTriggerUnit()),StringHash("fireTimer")) //загружаем таймер который будет переодически бить поджегом
    call DisplayTextToForce( GetPlayersAll(), "1" )
    
    if t == null then //если такого таймера нет, то создадим его
        set t = CreateTimer()
        call SaveTimerHandle(udg_HASH, GetHandleId(GetTriggerUnit()),StringHash("fireTimer"),t)
    endif
    
    call SaveReal(udg_HASH, GetHandleId(t),StringHash("fireDamage"),20) //урон
    call SaveInteger(udg_HASH, GetHandleId(t),StringHash("fireСount"),3) //количество срабатываний
    call SaveUnitHandle(udg_HASH, GetHandleId(t),StringHash("fireUnit"),GetTriggerUnit()) //юнит которому наносим урон
    call SaveUnitHandle(udg_HASH, GetHandleId(t),StringHash("fireSource"),GetEventDamageSource()) //юнит от которого наносим урон
    call SaveTriggerHandle(udg_HASH, GetHandleId(t),StringHash("fireTrigger"),GetTriggeringTrigger())
    
    call TimerStart(t,1, true,function TimerFire) //переодический таймер в котором мы будем наносить урон
    
    set t = null
endfunction

//===========================================================================
function InitTrig_DetectFireDamage takes nothing returns nothing
    set gg_trg_DetectFireDamage = CreateTrigger(  )
    call TriggerRegisterUnitEvent( gg_trg_DetectFireDamage, gg_unit_Hpal_0001, EVENT_UNIT_DAMAGED )
    call TriggerAddCondition( gg_trg_DetectFireDamage, Condition( function Trig_DetectFireDamage_Conditions ) )
    call TriggerAddAction( gg_trg_DetectFireDamage, function Trig_DetectFireDamage_Actions )
endfunction
Загруженные файлы
14

» WarCraft 3 / Проседает фпс. Как лечить?

FDG89K, у тебя какой то странный варик, ты пробовал православный 1.26? Рефордж вроде у всех лагает, так как разрабы дауны
14

» WarCraft 3 / Проседает фпс. Как лечить?

Для проверки фпс есть команда /fps - немного сверху в центре экрана будет надпись.
Лагает на каких картах? Если непонятные неоптимизированные кастомки, то естественно будет лагать.
14

» WarCraft 3 / Простой атаки приказ для всех юнитов

Пуньк-сруньк, какии та англисикие букавы ничиво нипонятна.
Выбрать всех юнитов игрока (твой игрок) при условии (соответствующий юнит != рабочий) -> приказать (выбранный юнит) идти в (точка твоя) атакуя. Капец как сложно 2 строчки в ГУИ натыкать.
14

» WarCraft 3 / Cruiser Command

Drakemor_888, Если прям в списке карт выбрать нельзя, то скорее всего у тебя не та версия варика. У меня стоит 1.26, в рефе вроде тоже работает
14

» WarCraft 3 / Cruiser Command

Drakemor_888, Сейчас проверил - карта работает. Скорее всего у тебя варик не патченный и имеет ограничение 8мб на карты. В интернете есть много способов его обойти, у меня кастомный гейм.длл. Кинуть в папку с вариком с заменой. Также можно использовать функционал коннектора Урины бот.
Загруженные файлы
14

» WarCraft 3 / Cruiser Command

Drakemor_888, Одному нельзя, но есть ИИ если поставить бота на слот. Кеп и инж будут выполнять функции роботов-помощников, а пилоты копать руду.
14

» WarCraft 3 / Как начать писать свой код ИИ?

Если варик выдал тебе ошибку, то в чем проблема ее прочесть? Тебе черным по белому написано - нет такой функции Sleep(). В джассе есть функция TriggerSleepAction(), которая триггер на паузу ставит, скорее всего ее имеет ввиду автор. Такое могло произойти если автор на другой версии варкрафта сделал гайд.
14

» WarCraft 3 / Не запускает карты свыше 8мб. по локальной сети.

Установите кастомный гейм длл для снятия лимита, в чем проблема? А карты некоторые не видит скорее всего потому что они для других версий вара.
14

» WarCraft 3 / Как сделать полоску хп у юнита/здания невидимой?

Самым простым способом будет в РО в "графика - шкала выбора" поставить минусовое значение. это делается через шифт, может кто не знал. Хпбары будут скрыты у всех юнитов выбранного типа, поэтому он не подходит, если надо удалить хпбар только отдельного юнита.
14

» WarCraft 3 / Запрос актуальной информация по моддингу warcraft 3 TFT

Svintus, Создавай отдельные вопросы, чо ты все в один пихаешь. Тем более ты этот вопрос уже закрыл
14

» WarCraft 3 / Запрос актуальной информация по моддингу warcraft 3 TFT

Используй JNGP, там есть список всех функции с поиском, подсветка кода ну и много других плюх для кодинга. Также доступны всякие дополнения типо vJass'a для еретиков.
Лучше всего делать на 1.26, а еще лучше на ужапи. Почему именно эти версии? - это самые популярные версии на урина бот.
14

» WarCraft 3 / ИИ

Принятый ответ
Arturyq, Периодически сравниваешь условия, например:
  • если скилл наносит урон (молоток гнома например) - в радиусе от юнита есть враг, то применить к врагу скилл
  • если скилл лечит (свет палыча) - в радиусе есть союзник и у союзника меньше 50%хп - применить способность к союзнику.
Ну и так далее к другим скиллам прописывать
14

» WarCraft 3 / Создать крипов около армии и зданий!

Нормально вопрос сначала составь, но я попытаюсь понять твою логику.
Событие: С начала игры прошло 60 сек //ты не написал при каких условиях должен срабатывать триггер, поэтому так
Условие: -
Действия:
Выбрать всех юнитов игрока (твой игрок) и сделать действия: //тут можно также установить условия выбора, например "соответсвующий юнит == пехотинец"
	установить TempPoint == позиция(выбранный юнит)
	Создать юнита (крип) в позиции (TempPoin)
	call RemoveLocation(TempPoint)
Теперь около всех юнитов игрока будут спавниться крипы.
14

» WarCraft 3 / Можно ли отлавливать исключения в vjass/jass/cjass?

Некоторые функции возвращают булеан, сработали они или нет, например:
native UnitAddAbility takes unit whichUnit, integer abilityId returns boolean
14

» WarCraft 3 / Рабочие не относят дерево (как сделать)

У любой ратуши есть способность "вернуть золото и древесину". Добавляешь работнику эту способность и все - он сам в себя возвращает ресурс.
Покопавшись в РО(способности "особые", в самом верху) можно найти еще 2 идентичные способности, но только для дерева и золота по отдельности.
14

» WarCraft 3 / Где найти русифицированный Jass new gen pack.

  1. Открой свой браузер (думаю затруднений не вызовет, так как ты как-то смог зайти на хгм)
  2. Перейди в любой поисковик, например ya.ru или www.google.ru
  3. В поисковую строку(она находится по середине экрана) впиши свой вопрос, в данный момент это "русификатор триггеров варкрафт 3"
  4. Переходим по любой понравившейся ссылке (желательно на проверенных сайтах), у меня вот это xgm.guru/p/wc3/russifier-triggers-for-jngp
  5. Внимательно читаем содержание ресурса. Там сказано как его установить
  6. Нажимаем большую зеленую кнопку "Скачать" и после загрузки выполняем действия по утановке, написанные в ресурсе.
  1. Запускаем JNGP и проверяем русифицировались ли три горы. Если не сработало, то возможно у тебя несколько экземпляров варкрафта и нужно закинуть именно в тот, который привязан к JNGP (у меня такое было).
  2. Наслаждаемся великим и могучим в тригорах!
Если ты выполнили все шаги инструкции - поздравляю, ты идиот, который не может пользоваться банальным поиском, и ему надо было писать инструкцию как это делать.
Загруженные файлы
замечание от Ydav: 2.1 Прямое оскорбление пользователя. Не даем оценки умственным способностям других юзеров
14

» WarCraft 3 / Немогу поиграть в allstars

Проверь настройки графики(в главном меню игры) и поставь там все на максимум
14

» WarCraft 3 / Удаление области

Как и сказал rsfghd, в событиях используется РЕГИОН, а не область. Регион - таже область, только может быть неправильной формы.
Вот пример триггера "юнит вошел в область":
Глянем что внутри события:
Как мы видим создается новый регион(а не рект), в который добавляется наша область и вызывается нативное событие.
Загруженные файлы