PT153, я посмотрел интересно.
кстати, смотри. я тестил. вот с "move" в позицию юнита золото не возвращает за несколько здании. а вот выше способ с паузой - все норм возвращает.
Не могу найти в списке функций GetConstructingUnit или что нибудь такое.
ApaxHoqpuJL, как не можешь. там в гуи есть такие только без Get. эта переменная на jass.
ApaxHoqpuJL, еще можно запретить строить на начальном этапе - проверить приказ стройки. проверяешь какое здание строит. id приказ => id здание.
во время события приказа в точку можно отдать приказ стоп, однако, "stop" не может сбить приказ в точку (даже стоп не помогает, не знаю почему. юнит просто бежит выполнять приказ в точку. замечал два раза такое).
Он просто не сбивает. Решение находил такое: я отдавал приказ двигаться в тек позицию юнита, и юнит останавливался и не бежал туда. Единственное, что замечано - что статические повороты делает, хотя не так существенно.
вот карта нужно делать задержку таймером или вэйтом, походу здание еще не успевает создаться. Поэтому невозможно дать приказ, ускорить строительство через триг и прочее в этом момент. не первый случай. пробовал убрать вэйт, тк не хочет отменять
да походу они курят. кстати, я один раз играл игру, там юниты в ускоренном темпе игры дышали как ненормальные, словно в конвульсии. они так дышат и тело изменяется: расширяется/сжимается живот, когда воздух вдыхает/выдыхает. Шея руки туловище ноги двигают немного вверх/вниз при вдохах/выдохах, приподнимают/опускают немного голову и шею.
как у вас в гифке. только сильнее
единственный минус - что они все одинаково дышат вроде. как будто бы пачка юнитов одновременно выдыхает. от чего зависит что они так выдыхают в одно и тоже время?
EHP_Sequence, видимо статью не читал про руны. можно триггерно при использовании канала создавать руну. При подборе руны юнит сам на себя применяет. Или в точку, где находится этот герой (это в случае с абилами, нацеливающие в точку. Руна сразу нацеливается в точку юнита). При чем не сбивает приказ (как пишут).
пример
есть пример - это "руна защиты". Защита (руна) 'ANse' - это АОЕ-шная способность, которая указывается в указанную область. Но используется в руне. При подборе руны на всех окружающих, в том числе и на себя, накидывается защита с баффом.
"руна воскрешение" - тут используют абилу паладина
знаешь еще можно целевой предмет (который с абилой в точку) кликом нацелиться в итем, тогда система целится почему-то в точку, где находится сам герой. Например, спавнится вард около него. когда-то делал double-click для челика. Думаю здесь тоже самое происходит с рунами.
//Перерисовывает коммандную панель юнита
//Использует, если нужно обновить что-то. Например, обновить число зарядов абилки, сменить описание текста и прочее
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? так оно же работает только у совы и осветительного заряда
вручную руками. берете таблицы slk открываете. смотрите на основе какой абилы сделаны, и какие параметры. Описания находятся в текстах. Все. просто больше нет такой жн программы
ну ты и написал. так не поймешь. как карта называется?
числовой показатель хп? он над головой героя? возможно там текстаг (наверняка плавающий текст двигают таймером следом за героем и цвет текста меняют). сперва подумал про полоску hp-bar, но ты вспомнил числа. других вариантов пока нет.
меня другой вопрос волнует, что там такого особенного и красивого? цвет меняет?
UrsaBoss, регионы можно использовать много для чего. там не только вешают события входа/выхода.
Но еще есть в условии нативка, которая проверяет находится ли юнит в регионе. Можно еще и ректы использовать. Регион вмещает в себя множество ректов, и поэтому как-то предпочтительнее как-то использовать регион. в своей карте использую регионы для возможности строить. Проверяю область на посадку растении/на покупку земли (чекаем можно ли строить, не принадлежит ли земля другим игрокам) и прочее.
Регион использую как запоминалку, метку. Жаль что точки нельзя добавлять в регион (походу туда добавляют инфу ректов minx,maxx,many,maxy)
для этого нужно иметь копию - открытую версию с гуи-менюшками при себе. а лучше изучить jass, там легко. первое время будет не понятно, но быстро научишься.
можешь дать ссылку на пример, где один таймер отвечает за все ?
думаю имеет в виду таймером каждый раз выбирать в группу вокруг здания (функции есть такие, где выбираются в группу всех юнитов в опред радиусе от точки. Где точка - позиция нашего здания)
сначала выбираешь группу здании (просто на карте выбираешь)
затем вокруг каждого здания выбирает всех в еще одну группу
Ред. MpW
» WarCraft 3 / Приказ отмены постройки орков
тфу нежить тут не при чем. тоже самое будет
» WarCraft 3 / Приказ отмены постройки орков
» WarCraft 3 / Приказ отмены постройки орков
кстати, смотри. я тестил. вот с "move" в позицию юнита золото не возвращает за несколько здании. а вот выше способ с паузой - все норм возвращает.
Ред. MpW
» WarCraft 3 / Приказ отмены постройки орков
» WarCraft 3 / Приказ отмены постройки орков
Ред. MpW
» WarCraft 3 / Приказ отмены постройки орков
во время события приказа в точку можно отдать приказ стоп, однако, "stop" не может сбить приказ в точку (даже стоп не помогает, не знаю почему. юнит просто бежит выполнять приказ в точку. замечал два раза такое).
Ред. MpW
» WarCraft 3 / Приказ отмены постройки орков
» WarCraft 3 / Приказ отмены постройки орков
Ред. MpW
» WarCraft 3 / Дыхание
как у вас в гифке. только сильнее
единственный минус - что они все одинаково дышат вроде. как будто бы пачка юнитов одновременно выдыхает. от чего зависит что они так выдыхают в одно и тоже время?
Ред. MpW
» WarCraft 3 / В чем ошибка?
Ред. MpW
» WarCraft 3 / Свиток регенерации с отрицательным восстановлением
Защита (руна) 'ANse' - это АОЕ-шная способность, которая указывается в указанную область. Но используется в руне. При подборе руны на всех окружающих, в том числе и на себя, накидывается защита с баффом.
"руна воскрешение" - тут используют абилу паладина
Ред. MpW
» WarCraft 3 / Ещё раз про заряды способностей на мемхаке, не получается
» WarCraft 3 / Ещё раз про заряды способностей на мемхаке, не получается
я эту фишку тестил. там по факту, значение меняется. Но визуально нет (не отрисовывается).
» WarCraft 3 / Свиток регенерации с отрицательным восстановлением
» WarCraft 3 / После слк оптимизации ошибка
Ред. MpW
» WarCraft 3 / Частота смены показателей здоровья и маны
меня другой вопрос волнует, что там такого особенного и красивого? цвет меняет?
Ред. MpW
» WarCraft 3 / Выбрать рельеф
Но еще есть в условии нативка, которая проверяет находится ли юнит в регионе. Можно еще и ректы использовать. Регион вмещает в себя множество ректов, и поэтому как-то предпочтительнее как-то использовать регион. в своей карте использую регионы для возможности строить. Проверяю область на посадку растении/на покупку земли (чекаем можно ли строить, не принадлежит ли земля другим игрокам) и прочее.
Регион использую как запоминалку, метку. Жаль что точки нельзя добавлять в регион (походу туда добавляют инфу ректов minx,maxx,many,maxy)
» WarCraft 3 / Реально вернуть инициализацию в нормальный вид
» WarCraft 3 / Объединение телепортов в кластеры?
так трудно самому проверить и сравнить? эта штука отряд в плотную кучку собирает или наоборот
» WarCraft 3 / Реалистичная вода
» WarCraft 3 / Как сделать возраждение?
Ред. MpW
» WarCraft 3 / Как делать проверку на...
» WarCraft 3 / Динамический триггер ?!
Ред. MpW
» WarCraft 3 / Динамический триггер ?!
» WarCraft 3 / Как сделать возраждение?