27

» WarCraft 3 / Приказ отмены постройки орков

PT153, это не потому что у вас раб принадлежит к расе нежити. строительство там автоматом идет.
тфу нежить тут не при чем. тоже самое будет
27

» WarCraft 3 / Приказ отмены постройки орков

PT153, я посмотрел интересно.
кстати, смотри. я тестил. вот с "move" в позицию юнита золото не возвращает за несколько здании. а вот выше способ с паузой - все норм возвращает.
27

» WarCraft 3 / Приказ отмены постройки орков

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

» WarCraft 3 / Приказ отмены постройки орков

ApaxHoqpuJL, конечно лучше. отмена строительства возвращает 75% от цены. можно конечно настроить в константах
27

» WarCraft 3 / Приказ отмены постройки орков

Принятый ответ
Не могу найти в списке функций GetConstructingUnit или что нибудь такое.
ApaxHoqpuJL, как не можешь. там в гуи есть такие только без Get. эта переменная на jass.

ApaxHoqpuJL, еще можно запретить строить на начальном этапе - проверить приказ стройки. проверяешь какое здание строит. id приказ => id здание.
во время события приказа в точку можно отдать приказ стоп, однако, "stop" не может сбить приказ в точку (даже стоп не помогает, не знаю почему. юнит просто бежит выполнять приказ в точку. замечал два раза такое).
Он просто не сбивает. Решение находил такое: я отдавал приказ двигаться в тек позицию юнита, и юнит останавливался и не бежал туда. Единственное, что замечано - что статические повороты делает, хотя не так существенно.
call IssuePointOrder(GetTriggerUnit(), "move", GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()) )
позже нашел другой способ у СССР-а - пауза. не делает развороты не нужные
сall PauseUnit(GetTriggerUnit(), true) //<= вкл паузу
call IssueImmediateOrder(GetTriggerUnit(), "stop")
сall PauseUnit(GetTriggerUnit(), false) //<= выкл паузу
и одновременно выдать текстовое оповещение игроку: "вы это здание не можете строить"
27

» WarCraft 3 / Приказ отмены постройки орков

вот карта нужно делать задержку таймером или вэйтом, походу здание еще не успевает создаться. Поэтому невозможно дать приказ, ускорить строительство через триг и прочее в этом момент. не первый случай. пробовал убрать вэйт, тк не хочет отменять
Загруженные файлы
27

» WarCraft 3 / Приказ отмены постройки орков

ApaxHoqpuJL, а проверь дебаг на юните. выводи имя юнита. что за событие используешь?
код
function Trig_D_Actions takes nothing returns nothing
    call TriggerSleepAction(0) // <= надо делать задержку
    call IssueImmediateOrderById(GetTriggerUnit(), 851976)
endfunction

//===========================================================================
function InitTrig_D takes nothing returns nothing
    set gg_trg_D = CreateTrigger(  )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_D, Player(0), EVENT_PLAYER_UNIT_CONSTRUCT_START )
    call TriggerAddAction( gg_trg_D, function Trig_D_Actions )
endfunction
27

» WarCraft 3 / Дыхание

да походу они курят. кстати, я один раз играл игру, там юниты в ускоренном темпе игры дышали как ненормальные, словно в конвульсии. они так дышат и тело изменяется: расширяется/сжимается живот, когда воздух вдыхает/выдыхает. Шея руки туловище ноги двигают немного вверх/вниз при вдохах/выдохах, приподнимают/опускают немного голову и шею.
как у вас в гифке. только сильнее
единственный минус - что они все одинаково дышат вроде. как будто бы пачка юнитов одновременно выдыхает. от чего зависит что они так выдыхают в одно и тоже время?
27

» WarCraft 3 / В чем ошибка?

что-то зачастились темы "в чем дело?", "где ошибка?", "В чем ошибка?" и так далее. тут тебе бот выслал в помощь 5 тем с похожим названием.
27

» WarCraft 3 / Свиток регенерации с отрицательным восстановлением

EHP_Sequence, видимо статью не читал про руны. можно триггерно при использовании канала создавать руну. При подборе руны юнит сам на себя применяет. Или в точку, где находится этот герой (это в случае с абилами, нацеливающие в точку. Руна сразу нацеливается в точку юнита). При чем не сбивает приказ (как пишут).
пример
есть пример - это "руна защиты".
Защита (руна) 'ANse' - это АОЕ-шная способность, которая указывается в указанную область. Но используется в руне. При подборе руны на всех окружающих, в том числе и на себя, накидывается защита с баффом.
"руна воскрешение" - тут используют абилу паладина
знаешь еще можно целевой предмет (который с абилой в точку) кликом нацелиться в итем, тогда система целится почему-то в точку, где находится сам герой. Например, спавнится вард около него. когда-то делал double-click для челика. Думаю здесь тоже самое происходит с рунами.
27

» WarCraft 3 / Ещё раз про заряды способностей на мемхаке, не получается

код 1
    //Перерисовывает коммандную панель юнита
    //Использует, если нужно обновить что-то. Например, обновить число зарядов абилки, сменить описание текста и прочее
    function RefreshUnitsCommandPanel takes unit u returns nothing
        set LastConvertedHandle = ConvertHandle( u )
        if LastConvertedHandle > 0 then
            call CallThisCallWith2Args( pRefreshUnitsCommandPanel, LastConvertedHandle, 852290 )
        endif
    endfunction
    //==========

//заряды к способности
//Работает это у таких способностей как осветительный снаряд Afla, сторожевая сова Aesn 
//у остальных абил не работает, просто не замечаем. Т.к. отключено отображение зарядов, и отсутствуют другие штрафы (не убавляются при юзе; когда кончаются, абила не пропадает)
//ячейка адреса "GetUnitAbility( u, id ) + 0x124" является просто счетчиком у абил, даже у обычных абил есть такой счетчик, просто не юзается нигде.
    //добавить к текущему количеству
    function AddAbilityCharges takes unit u, integer id, integer c returns nothing
        local integer a = GetUnitAbility( u, id )
        if a > 0 then
            call WMem( a + 0x124, RMem( a + 0x124 ) + c )
        endif
        call RefreshUnitsCommandPanel( u )//else changes will be visible only at next redraw
    endfunction
    //изменить текущее число зарядов на нужное число
    function SetCountAbilityCharges takes unit u, integer id, integer c returns nothing
        local integer a = GetUnitAbility( u, id )
        if a > 0 then
            call WMem( a + 0x124, c )
        endif
        call RefreshUnitsCommandPanel( u )//else changes will be visible only at next redraw
    endfunction
    //узнать текущее число зарядов
    function GetCountAbilityCharges takes unit u, integer id returns integer
        local integer a = GetUnitAbility( u, id )
        if a > 0 then
            return RMem( a + 0x124 )
        endif
        return 0
    endfunction
//======================
код 2 (код не полный)
//Редактирование зарядов способности (универсальный метод для всех)
//Некоторые переменные и данные инициируются в триггере Init Return Bug
//Можно редактировать не только активные способности, но и пассивки (по-крайне мере большая часть пассивок)
    function SaveUnlockWriteMemory takes integer a, integer val, boolean save, boolean unlock returns nothing
        local integer oldprotection 
        if unlock then
            set oldprotection = ChangeOffsetProtection(a,4,0x40)
        endif
        if save and unlock==false then
            call AddNewOffsetToRestore(a,RMem(a))
        endif
        call WMem(a,val)
        if unlock then
            call ChangeOffsetProtection(a,4,oldprotection)
        endif
    endfunction
//включает хук на эту абилку (основу) для отображения (короче обновляет, прорисовывает изменения)
//Это обязательная часть. После того, как установили настройки (задали число зарядов, включить/выключить отображение зарядов), у вас прорисовывают изменения (изменяются числа, и будут ли показываться числа в углу).
    function VisualChargesSystem_InitHookOnAbility takes unit u, integer id returns nothing
        local integer a
        local integer b
        set a=GetUnitAbility(u,id)
        if a!=0 then
            if RMem(RMem(a)+0x1C4)==GameDLL+0x378A0 then
                call SaveUnlockWriteMemory(RMem(a)+0x1C4,pCustomChargesDisplayer,true,true)
            elseif RMem(RMem(a)+0x1C4)==GameDLL+0x20AF0 then
                call SaveUnlockWriteMemory(RMem(a)+0x1C4,pCustomChargesDisplayer+40*4,true,true)
            else
                call BJDebugMsg("Unknown base ability, hook is not possible")
            endif
        endif
    endfunction
    
//отвечает за отображение зарядов
//с помощью хитросплетении, которых я не понимаю, эта хэш-таблица и пару переменных как-то влияют на отображение. с помощью хука InitHookOnAbility включает отображение каким-то образом. при чем не вижу связи
    //активирует отображение зарядов на этом id на этом юните (короче даже у обычной способности появляются заряды)
    function VisualChargesSystem_Init takes unit u, integer id returns nothing
        call SaveBoolean(ChargesIndicatorData,GetHandleId(u),id,true)
    endfunction
    //выключаем отображение зарядов (если были до этого заряды, их больше не отображают)
    function VisualChargesSystem_InitRemove takes unit u, integer id returns nothing
        call SaveBoolean(ChargesIndicatorData,GetHandleId(u),id,false) 
    endfunction
//редактирует кол-во зарядов (можно отредактировать выше AddAbilityCharges, подмять под себе. 
//Т.к. в этой функции можно напрямую узнать адрес зарядов абилы, не прибегая к хэш-таблицы)
    //записывает (изменяем) юниту в абилку кол-во зарядов
    function VisualChargesSystem_SetCharges takes unit u, integer id, integer charges returns nothing
        call SaveInteger(ChargesIndicatorData,GetHandleId(u),id,charges)
    endfunction
    //загружает кол-во зарядов
    function VisualChargesSystem_GetCharges takes unit u, integer id returns integer
        return LoadInteger(ChargesIndicatorData,GetHandleId(u),id)
    endfunction
//==========
можно вместо запоминания зарядов хэш-таблицы использовать функции из кода 1. запоминаешь туда, достаешь.
DracoL1ch, ты про RefreshUnitsCommandPanel? так оно же работает только у совы и осветительного заряда
27

» WarCraft 3 / Ещё раз про заряды способностей на мемхаке, не получается

Принятый ответ
тема абилки с зарядами. что-то код с мем хаком плодят разный
я эту фишку тестил. там по факту, значение меняется. Но визуально нет (не отрисовывается).
27

» WarCraft 3 / После слк оптимизации ошибка

вручную руками. берете таблицы slk открываете. смотрите на основе какой абилы сделаны, и какие параметры. Описания находятся в текстах. Все. просто больше нет такой жн программы
27

» WarCraft 3 / Частота смены показателей здоровья и маны

ну ты и написал. так не поймешь. как карта называется?

числовой показатель хп? он над головой героя? возможно там текстаг (наверняка плавающий текст двигают таймером следом за героем и цвет текста меняют). сперва подумал про полоску hp-bar, но ты вспомнил числа. других вариантов пока нет.
меня другой вопрос волнует, что там такого особенного и красивого? цвет меняет?
27

» WarCraft 3 / Выбрать рельеф

UrsaBoss, регионы можно использовать много для чего. там не только вешают события входа/выхода.
Но еще есть в условии нативка, которая проверяет находится ли юнит в регионе. Можно еще и ректы использовать. Регион вмещает в себя множество ректов, и поэтому как-то предпочтительнее как-то использовать регион. в своей карте использую регионы для возможности строить. Проверяю область на посадку растении/на покупку земли (чекаем можно ли строить, не принадлежит ли земля другим игрокам) и прочее.
Регион использую как запоминалку, метку. Жаль что точки нельзя добавлять в регион (походу туда добавляют инфу ректов minx,maxx,many,maxy)
27

» WarCraft 3 / Реально вернуть инициализацию в нормальный вид

для этого нужно иметь копию - открытую версию с гуи-менюшками при себе. а лучше изучить jass, там легко. первое время будет не понятно, но быстро научишься.
27

» WarCraft 3 / Объединение телепортов в кластеры?

Принятый ответ
вот смотри тут раздел телепортация
так трудно самому проверить и сравнить? эта штука отряд в плотную кучку собирает или наоборот
Загруженные файлы
27

» WarCraft 3 / Как сделать возраждение?

PT153, не понимаю, почему это без локи можно? и почему не затирается новым юнитом. это получается на поток приписывают
27

» WarCraft 3 / Как делать проверку на...

Принятый ответ
смотри в разделе boolean
тфу перепутал, тебе надо смотреть что игрок является врагом, а не юнит. ищи похожий подраздел "игрок" в boolean. там в точь точь
Загруженные файлы
27

» WarCraft 3 / Динамический триггер ?!

Принятый ответ
таймер я так понимаю глобальный делать ?
да. смотри чтоб менее утечный был, на гуи все действия мб утечны с группами
27

» WarCraft 3 / Динамический триггер ?!

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