27

» WarCraft 3 / Многоточечное патрулирование

Я пробовал каналом с заданным приказом patrol. Когда отдаем приказ patrol, то получается что юнит не патрулирует, а бежит кастовать в точку, игноря всех. Я забил на этот способ. Потом пришла новая идея, а вдруг можно абузить этим способом. Представьте, сначала бежит патрулировать в одну точку, а когда дойдет, он же побежит обратно - получит другой приказ, и тут канал срабатывает, и мы узнаем завершение. Короче, не работает. Канал тоже не видит приказы patrol, только в начале
SomeFire, ну это понятно. Но мне хочется свою систему патрулирования иметь. Но чекать поиском весь маршрут на наличие противников и прочее, не хочется. Проще отловить начальные приказы patrol, далее ловим завершение приказа, и в завершении готовый patrol отдать в точку, дошел - отдаем новый patrol в точку. дело - отследить.
пока самый оптимальный вариант - это таймером чекать изменилось ли положение маршрута, там нужно интервал таймера сделать больше. И пока работает хорошо, но насколько хорошо - неизвестно. Но я еще забываю, что юниты могут драться, и в патруле могут остановиться и подраться. Ну придется заигнорить патрулирование.
patrol => заменить на attack - тут визуальные эффекты портят все. рамку как найти. можно кое-что сделать))
27

» WarCraft 3 / Как правильно пользоваться mdlvis?

biridius, у меня пишет чо нет какой то библиотеки. скинул бы давно скрин с ошибкой: "Библиотека ijl15.dll не найдена. загрузка blp-текстур невозможна", только лимит уже закончился. я хотел видеть текстуры натянутые на модель. А я этого не вижу. редактор должен как то с архивом игры иметь, а именно с текстурами?
так я извлек папку паладоса со всем содержимым. модель, текстуры, звуки на рабочий стол

Hate, понятно. щас закину

надо было кинуть mdlvis в папку с игрой. и тогда норм работает
27

» WarCraft 3 / Как правильно пользоваться mdlvis?

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

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

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

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

спрятать можно 3 способами:
  1. есть специальная нативка сокрытия фрейма. не все фреймы можно скрыть, тк есть такие фреймы, которые постоянно обновляются. ты скрываешь, а они снова показывают. еще можешь задеть какой то игровой процесс, и привести может еще и к фаталу. поэтому лучше сокрыть их другим способом
  2. изменить размер BlzFrameSetScale(frame, 0.001) мы можем такой малюсенький размер указать, что его совсем не видно. Так у вас не будет вылетать от закрытия какого процесса. Но может вылететь, если фрейм не имеет размеров или не приспособлен к этому
  3. фрейм за пределы экрана сдвинуть - самый безопасный. Однако, это делать нужно с фреймами которые существуют. Обычно с невидимыми-не существуемыми фреймами лучше не работать - игра вылетакет
BlzFrameSetAbsPoint(frame, FRAMEPOINT_BOTTOM, 0.4, -0.18)

KaneThaumaturge:
В render edge мемхаке нет функции GetFrameByName
она есть в мемхаке анрайза тут
27

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

KaneThaumaturge, спроси у этого человека он у нас специалист. он кучу наработок с фреймами недавно выложил с мемхаком. я мемхак не понимаю. я в рефорджете сижу. и мне нужно мемхаковские настройки применять, сбрасывать регистр с рефорджа, качать p/jass и прочкк =(
у офериста в ресурсах смотри. и он там описал. там нуен мемхак анрайза. я вот его скачал, но мне его не запустить
27

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

точно работает золото? какие проблемы с атакой и защитой? подсказать названия фреймов?

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

BottomCenterUI инфу смотреть тут
"SimpleInfoPanelUnitDetail",0 - панель юнита
SimpleInfoPanelIconDamage,0-1 - информация об атаке и уроне. Тут показан тип атаки, урон. Тут два index = 0 и 1, дело в том, что могут быть показаны две атаки, как у ледяных змеи или химер. Атака мб выключена, и тогда фреймы не отображают инфу.
SimpleInfoPanelIconArmor,2 - информация об защите юнита. Тут показан тип брони и кол-во защиты. Эта броня есть у любого юнита.
У этих фреймов есть дочерние фреймы с одинаковыми именами, отличается только createContext.
"InfoPanelIconBackdrop" the image
"InfoPanelIconLevel" the shown techLevel (text)
"InfoPanelIconLabel" Damage/Armor..
"InfoPanelIconValue" the amount
типа для 1 атаки и 2 атаки context 0-1
"InfoPanelIconBackdrop", 0-1
"InfoPanelIconLevel", 0-1
"InfoPanelIconLabel",0-1
"InfoPanelIconValue", 0-1
а для защиты
"InfoPanelIconBackdrop", 2
"InfoPanelIconLevel", 2
"InfoPanelIconLabel", 2
"InfoPanelIconValue", 2
Перемещение этих фреймов лучше всего выполнять путем перемещения IconFrame «InfoPanelIconBackdrop», поскольку тексты позиционируются относительно IconFrame, а фреймы-родители контейнера, такие как «SimpleInfoPanelIconDamage», часто меняют положение в зависимости от выбранного юнита (если у него нет атаки, то атака выключена, и фрейм атаки тоже).
Можно разрушить положение всех фреймов. К примеру, хотел спрятать атаку, ибо BlzFrameSetVisible скрывает частично, моргает, поэтому спрятал так:
BlzFrameSetScale(BlzGetFrameByName("SimpleInfoPanelIconDamage",0), 0.001)
Фрейм атаки спрятал, но таким образом другие фреймы потеряли прежние позиции, и магнитом прилипли в одной точке
27

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

KaneThaumaturge, загружаем в указанном toc-file fdf-files. Все написано в разделе UI: Reading a FDF и UI: toc-Files
пояснения LoadTOCFile
Файл TOC - это файл со списком одного или нескольких файлов fdf (расширение фрейма, можете блокнотом открыть). Каждая строка - это путь к одному файлу fdf. Каждый fdf - это отдельный файл. В Warcraft 3 эти TOC-файлы используются для загрузки перечисленных файлов fdfs.
В варкрафте много fdf-files. В них записаны параметры фреймов: размеры, привязка,границы, фон или изображение, шрифт/техт и многое чего другое. Все фреймы поделены на типы. И иеще они могут иметь связи родитель-потомки. главный фрейм - родитель. внутри тела - потомки. Часто просто чтобы не прописывать одни и те же параметры, есть шаблоны. Очень много шаблонов. fdf-files очень много. В игре не все fdf-files могут быть включены игрой, разработчиками они могут быть выключены. Чтобы заимствовать параметры из fdf-files, нужно подключить/загрузить в игру. А помогает нам этот toc-file. Достаточно один раз загрузить при инициализации, и всю игру работает.
При создании фреймов мы часто указываем в триггерах шаблон из fdf-file. его можно указать, или можно не указывать, тогда у вас станд фрейм. В fdf-files часто используют наследования

KaneThaumaturge, может быть стоит обращаться к фрейму не при инициализации, а спустя какое то время со старта. Обычно может быть фрейм не инициализирован. Такое тоже бывает. Так у меня больше нет идеи почему не работает, надо самому смотреть =((
27

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

мб инфы много навалил в один док. стоило разбить на части. источник
тфу попробуй ResourceBarFrame?

у вас была
	function GetCFrameByName takes string name, integer id returns integer
        if pGetCFrameByName > 0 then
            if name != "" then
                return fast_call_2( pGetCFrameByName, GetStringAddress( name ), id )
            endif
        endif

        return 0
	endfunction
попробуй еще другие функции. в мемхаке кучу функции.
	function GetFrameByName takes string name, integer id returns integer
        return GetCFrameByName( name, id )
	endfunction
тут оферист кучу примеров выкладывал. надо там в примерах заглянуть. если что
27

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

framepoints
constant integer ANCHOR_TOPLEFT = 0
constant integer ANCHOR_TOP = 1
constant integer ANCHOR_TOPRIGHT = 2
constant integer ANCHOR_LEFT = 3
constant integer ANCHOR_CENTER = 4
constant integer ANCHOR_RIGHT = 5
constant integer ANCHOR_BOTTOMLEFT = 6
constant integer ANCHOR_BOTTOM = 7
constant integer ANCHOR_BOTTOMRIGHT = 8
set gold = GetCFrameByName("ResourceBarGoldText",0)
call ClearFrameAllPoints(gold)
call SetFrameAbsolutePoint(gold,ANCHOR_CENTER,0.4,0.3)
чтобы сдвинуть фрейм необходимо чистить точки сначала. просто фреймы привязаны друг другом framepoints. Если пытаешься сдвинуть, то у вас не получится или фрейм растягивается. короче статьи не читаем и лень
27

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

пример <= первая карта. возможна там есть другие версии
статьи
все функции даны. А тех, что нет, можно покопаться в fdf-files. И найти имя, чтобы обратиться к этому фрейму
пример <= рефорджете. но все константы в фрейме вроде есть, они выведены в виде отдельных функции. даже больше функции в мемхаке.

ResourceBarFrame - полоса ресурсов
ResourceBarFrame, 0
ResourceBarGoldText, 0
ResourceBarLumberText, 0
ResourceBarSupplyText, 0
ResourceBarUpkeepText, 0

теперь надо найти именную функцию в мемхаке. мы могли использовать в рефорджете такую функцию
BlzGetFrameByName("name",argument)
В мемхаке это может быть
GetCFrameByName?
типа если нужно изменить значение золота, то мы обращаемся к текстовому фрейму ResourceBarGoldText
GetCFrameByName("ResourceBarGoldText",0)
можем спрятать, изменить текст. и даже удалить или передвинуть

если что я в мемхаке не знаю как это должно быть. это надо тестить. так ли функция и прочее. Но так по идее работает.
27

» WarCraft 3 / [RenderEdge] Memory Hack: Помогите найти фрейм золота

в мемхаке анрайза нет этого? вроде должно быть. оферист выкладывал

раскрыть
1 = BackdropFrame
2 = ButtonFrame
3 = ChatMode
4 = CommandButton
5 = CursorFrame
6 = EditBox
7 = Frame
8 = FloatingFrame
9 = GameUI
10 = HeroBarButton
11 = HighlightFrame
12 = LayoutFrame
13 = MessageFrame
14 = Minimap
15 = ModelFrame
16 = PortraitButton
17 = ScreenFrame
18 = SimpleButton
19 = SimpleFontString
20 = SimpleFrame
21 = SimpleGlueFrame
22 = ???
23 = SimpleMessageFrame
24 = Slider
25 = SpriteFrame
26 = StatBar
27 = TextArea
28 = TextButtonFrame
29 = TextFrame
30 = UberToolTipWar3
31 = WorldFrameWar3
32 = GlueButtonWar3
33 = GlueTextButtonWar3
34 = GlueCheckBoxWar3
35 = GluePopupMenuWar3
36 = GlueEditBoxWar3
37 = SlashChatBox
38 = TimerTextFrame
39 = SimpleStatusBar
40 = StatusBar
41 = UpperButtonBar
42 = ResourceBar
43 = SimpleConsole
44 = PeonBar
45 = HeroBar
46 = TimeOfDayIndicator
47 = InfoBar
48 = TimeCover
49 = ProgressIndicator
50 = HeroLevelBar
51 = BuildTimeIndicator
52 = InfoPanelDestructableDetail
53 = InfoPanelItemDetail
54 = InfoPanelIconAlly
55 = InfoPanelIconHero
56 = InfoPanelIconGold
57 = InfoPanelIconFood
58 = InfoPanelIconRank
59 = InfoPanelIconArmor
60 = InfoPanelIconDamage
61 = InfoPanelCargoDetail
62 = InfoPanelBuildingDetail
63 = InfoPanelUnitDetail
64 = SimpleTexture
типы есть. как к ним обратиться в мемхаке =(
27

» WarCraft 3 / точные расчеты в lua

Короче, ошибок сделал глупых. Ладно, невнимательность. Вместо BOTTOMLEFT двигал CENTER. Зато систему придумал.
пояснения
У нас существует мини-карта (все размеры и координаты выдрал из fdf-file):
--размеры мини-карты 
MiniMap_Width = BlzFrameGetWidth(BlzGetOriginFrame ( ORIGIN_FRAME_MINIMAP , 0 )) --0.139375
MiniMap_Height = BlzFrameGetHeight(BlzGetOriginFrame ( ORIGIN_FRAME_MINIMAP , 0 )) --0.138125
--соотношение сторон мини-карты
AspectRatio_MiniMap=MiniMap_Width/MiniMap_Height=1.009049774

--точка отсчета мини-карты (0,0) pos framepoint_bottomleft миникарты
MiniMap_x0=0.009375
MiniMap_y0=0.006875

--центр мини-карты pos framepoint_center миникарты
MiniMap_cx=MiniMap_x0+(MiniMap_Width/2)
MiniMap_cy=MiniMap_y0+(MiniMap_Height/2)
игровая карта или границы камеры. Я еще до сих пор не знаю, что лучше. Начинал с границ камер bj_mapInitialCameraBounds, там столько ошибок было изначально в системе. Решил попробовать игровую карту bj_mapInitialPlayableArea. Это не значит, что границы камеры хуже. Но пока не знаю. Но в редакторе границы камеры не в 1:1, когда мне надо были размеры в 1:1. Сейчас я решил эту проблему.
--размеры границ камеры bj_mapInitialPlayableArea
PlayableArea_Width = GetRectWidthBJ(bj_mapInitialPlayableArea)
PlayableArea_Height = GetRectHeightBJ(bj_mapInitialPlayableArea)
--соотношение размеров игровой карты
AspectRatio_PlayableArea=PlayableArea_Width/PlayableArea_Height
игровая карта может быть разных соотношении
игровая карта соотношение 1.08:1
w=6912 (54)
h=6400 (50)
AspectRatio_PlayableArea=w/h=1.08
игровая карта соотношение 0.92:1
w=6400 (50)
h=6912 (54)
AspectRatio_PlayableArea=w/h=0.92
игровая карта соотношение 1:1
w = 6656 (52)
h = 6656 (52)
AspectRatio_PlayableArea=w/h=1
теоретически размер мини-карты не изменяется, он остается таким же. Но обрезается границами, если расширяется или сужается размерами. BlzFrameGetWidth(frame) и BlzFrameGetHeight(frame) не показывают изменении, а значит от размеров фреймов не зависят. Но зависимость идет от размеров карты. ниже код, но в некоторых моментах работает с погрешностями при растягивании размеров границ. Пример соотношения 1:1, 1.08:1 работает ниже, а 0.92:1 с погрешностями, ладно лень уже
--игровая карта становится шире, а значит, и положение точки отсчета меняет тоже.
if AspectRatio_PlayableArea > 1.00 then
	new_h=MiniMap_Height/AspectRatio_PlayableArea=0.138125/1.08=0.12789
	MiniMap_y0=MiniMap_y0+( (MiniMap_Height-new_h)/2 )=0.006875+(0.138125-0.12789)/2=0.006875+0.0051175=0.0119925
	
	MiniMap_Height = new_h
	
	--Если хотите двигать центр фрейма framepoint_center то умножить лучше на 2.5. Как-то случайно нашел коэффициент. Потом понял, что он не нужен, тк я попутал framepoint_center с framepoint_bottomleft.
	--умножаем тело отсчета на 2.5
	--MiniMap_x0=MiniMap_x0*2.5
	--MiniMap_y0=MiniMap_y0*2.5
	
--игровая карта становится растянутой, а значит, и точка отсчета меняет положение. Тут просто размеры поменяли.
elseif AspectRatio_PlayableArea < 1.00 then
	new_w=MiniMap_Width*AspectRatio_PlayableArea=0.139375*0.92=0.128225
	MiniMap_x0=MiniMap_x0+( (MiniMap_Width-new_w)/2 )=0.009375+(0.139375-0.128225)/2=0.009375+0.00893568=0.018
	MiniMap_Width = new_w
	
	--Если хотите двигать центр фрейма framepoint_center то умножить лучше на 2.5. Как-то случайно нашел коэффициент. Потом понял, что он не нужен, тк я попутал framepoint_center с framepoint_bottomleft.
	--умножаем тело отсчета на 2.5
	--MiniMap_x0=MiniMap_x0*2.5
	--MiniMap_y0=MiniMap_y0*2.5
	
--если соотношение игровой карты 1:1, то точку отсчета не нужно менять
elseif PlayableArea_Width == PlayableArea_Height then
	--умножаем тело отсчета на 2.5
	--MiniMap_x0=MiniMap_x0*2.5
	--MiniMap_y0=MiniMap_y0*2.5
end
оффсеты. тут есть небольшие отклонения. и они зависят от соотношения размеров миникарты.
раскрыть
if AspectRatio_MiniMap > 1.00 then
offsetx = 0.00
offsety = MiniMap_x0 / AspectRatio_MiniMap = 0.009375 / 1.009049774 = 0.009
elseif AspectRatio_MiniMap < 1.00 then
offsetx = MiniMap_y0 * AspectRatio_MiniMap = 0.006875 * 1.009049774 = 0.0069
offsety = 0.00
end
ну и код определения положения спрайта. Вводим мировые координаты, получаем экранные координаты. Точнее координаты миникарты
function GetScreenPosAtMiniMap(x,y)
    local procent_X = (((PlayableArea_Width/2)+x)/PlayableArea_Width) --*100.00
    local procent_Y = (((PlayableArea_Height/2)+y)/PlayableArea_Height) --*100.00

    local ScreenX = (procent_X*MiniMap_Width) --/100.00
    local ScreenY = (procent_Y*MiniMap_Height) --/100.00
    print(ScreenX..","..ScreenY)
                  
    return (ScreenX),(ScreenY)
end

--пример вызова-создаем фрейм
QueueOrders.WayPointAtMiniMap[h][NumberOrder] = BlzCreateFrameByType("SPRITE", "MinimapWaypoint", gameUI, "MinimapWaypoint", 0)
local Sx, Sy = GetScreenPosAtMiniMap(GetOrderPointX(),GetOrderPointY())
BlzFrameSetAbsPoint(QueueOrders.WayPointAtMiniMap[h][NumberOrder], FRAMEPOINT_BOTTOMLEFT, MiniMap_x0+Sx, MiniMap_y0+Sy)							
вот сама карта <= система добавления приказов в очередь. пока сырая. много чего дорабатывать надо. Суть в чем? когда мы выбираем мышью с помощью прицела цель, жмем на кнопку мыши. Тут нужно сбить очередь. Юнит получает приказ стоп при клике кнопки мыши, и тут же системой получает приказ следовать новому приказу. Новый запоминаем, и выполняем старый.
Загруженные файлы
27

» WarCraft 3 / Отлов QWER с помощью jass

jasonrus96,
смотри. С мышью там все понятно, событие нажатия и отпускания кнопки мыши. С клавиатурой такого нету. Я еще и сам не вкурил окончательно. Но тут можно записать состояния. Когда вы держите кнопку, у вас постоянно всплывает один и тот же key. Если его отпустить, то у вас перестанет показывать.
Есть еще
BlzGetTriggerPlayerMetaKey() == 1 (жмут/держат) <= если держите кнопку, периодически у вас дебаг будет выводить о том, что кнопка зажата.
BlzGetTriggerPlayerMetaKey() == 0 (опускают) <= при опускании кнопки вам покажут ноль.
плюс нужно учитывать эти комбинации клавиш, числа будут разные. пока не знаю как работает это, но понял что несколько значении суммируются. Пример A = 1, B = 2. комбинация A+B=3. Хотя я сам не до конца понимаю работу. А что если у вас 1+3 или 2+2 - сумма одинаковая? так что не буду лезть вперед паровозом. ладно я на отдых
код с Shift
        --чекаем pressed Shift
            --https://www.hiveworkshop.com/threads/oskey-player-key-event.319903/
            local ShiftOn = 0
            TimerStart(CreateTimer(),0,false, function()
                print("Create Keys")
                for index = 8,255 do
                    local trigger = CreateTrigger()
                            
                    TriggerAddAction(trigger, function()
                        if index == 160 and ShiftOn ~= BlzGetTriggerPlayerMetaKey() then
                            if BlzGetTriggerPlayerMetaKey() == 1 then
                                ShiftOn = 1
                                print("Shift нажат")
                            elseif BlzGetTriggerPlayerMetaKey() == 0 then
                                ShiftOn = 0
                                print("Shift отпущен")
                            end
                            --if GetLocalPlayer() ~= nil then
                            --    ShiftOn = BlzGetTriggerPlayerMetaKey()
                            --end
                        end
                                
                        --print("OsKey:",index, "meta",BlzGetTriggerPlayerMetaKey())
                    end)
                    local key = ConvertOsKeyType(index)
                        for metaKey = 0,15,1 do
                            BlzTriggerRegisterPlayerKeyEvent(trigger, Player(0), key, metaKey, true)
                            BlzTriggerRegisterPlayerKeyEvent(trigger, Player(0), key, metaKey, false)
                        end

                end
                        
                print("Done")
                print("Press Keys to show the index of that oskey and its metakey")
            end)

тут еще помни, что события клавиш и мыши нужно регистрировать после инициализации, то есть после 0.00 сек. А то во время загрузки могут нажать и сфаталит игра
27

» WarCraft 3 / Отлов QWER с помощью jass



так у всех кнопок, фреймов и прочее есть приставка к переменной Down - нажимание, и UP - отпускание. Посмотри. Но я сам еще не пробовал. Только с Shift-ом. И то по причине не работы события с Shift.
27

» WarCraft 3 / Отлов QWER с помощью jass

на каком патче сидите?
плохо искали. я уже таких много находил в последнее время. на движение WASD не скажу. но можно найти примеры. поиск со словами WASD
пример
27

» WarCraft 3 / Bars

И какую задачу вы хотите исполнить? просто немного странно хп/ману показывать таким способом =) я даже могу хп/ману противника видеть.
Ты должен таймером обновлять информацию. Каждую 0.03 сек чекаем информацию. А так у вас не обновляется информация, триггер trig обновляет при выделении игроком юнита / при клике по юниту. А нужно каждую секунду обновлять информацию юнита.
Отслеживаем GetMainSelectedUnit и показываем его хп/ману
27

» WarCraft 3 / Как дать способности перезарядку?

rsfghd,
Техника 'ANeg' - пассивка, которая заменяет способность на другую, с улучшенными характеристиками (в характеристиках указано несколько полей-слотов. Сколько слотов, столько и способностей, которые будут заменены. Максимум 4 абилки могут быть усовершенствованы. в одном слоте можно указать две абилки: первая эта та, которую хотят заменить, вторая эта та, которой заменяют. Вторая абилка, как правило, имеет улучшенные характеристики (например: больше урона, меньше перезарядки, меньше расхода маны и др). Также увеличивает силу атаки и скорость перемещения
Факты:
Если удалить технику, то вернется все на место.
КД можно изменить, снизить. Делаешь два бурана. У одного перезарядка: 30 секунд, у другого 10 секунд. Если запустить кулдаун первой абилки, и потом сразу же дать технику, то абилка заменяется на вторую. Но кулдаун в 30 секунд не сбрасывает. После перезарядки у вас будет меньше кулдауна - 10 секунд.
Раньше думал, что техника сбрасывает кд у абил с разными ID (например, буран и огненный столб - это две разные абилки, и разные ID). Так как абилы с одинаковым ID имеют общую перезарядку. На деле, после смены кд остается висеть на второй абилке. Пробовал активную способность с запущенным кд заменить на пассивку, в результате получал пассивку с кд. Что если использовать безумие + техника = пассивка с кд. безумие не сбивает приказы.
Если менять с пасивки на активку, то невозможно запустить активную способность. Она будто бы превратилась в пассивку, не кликается.
Если дать скилл "Техника" обычному юниту (не герою), то будет фатал...
Работая с данной способностью я заметил несколько интересных фактов.
Предупреждение: данная способность очень нестабильная и на нее влияет практически все, так что прежде чем говорить что я не прав, самостоятельно попробуйте разные варианты.
1)Если стандартная способность на основе "Канал" - то заменить можно только на канал, но при этом стартовая способность может быть например без цели, а новая как угодно настроенная.
2)Если заставить героя выучить пустышки и давать ему разные "Техники" то мы будем менять способности героя без потери кд, но кд и id приказа у этих способностей будет равно кд и id пустышки, у "Канала" немного по другому: id приказа берется не пустышки, а первой заменной способности , то есть у юнита был канал с id приказа "громовая поступь" мы заменили на "волну силы" и дальше везде будет волна силы.
3)Также с помощью "техники" возможно делать поочередную смену моделей героя: допустим у героя есть "перевоплощение" без времени действия и произношения, то мы можем превратить юнита A в юнита B и заменить техникой способность где, юнит B меняется на юнита C, при следующем юзе мы даем способность где, C меняем на A. И мы получаем трансформ с 3 последовательно меняющимися моделями, но ведь 3 это не предел, так можно менять хоть 6, хоть 10. Вся фишка в том, нужно указать в перевоплощений нормальную форму - ту, в которую хотите превратиться
4)Технику нельзя добавлять обычным юнитам, т.е только героям. (с) quq_CCCP
5)Если вы химичите со стандартными способностями, очень важную роль играет, что вы выучите первым, сам скил или технику
6)Если первая техника превращает скил в пассивку, то все следующие замененые скилы будут пассивными (например был скил "Волна силы" активный после замены, стал пассивный и любой другой который мы заменяем).
7)С помощью техники можно менять спелбуки.
Неудачи:
1)Попытка менять способность "Темный", с помощью "техники" провалилась.
Я понимаю, что тут очень мало информации, но это пока все, что я успел обнаружить. Vadik29
27

» WarCraft 3 / Как дать способности перезарядку?

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

» WarCraft 3 / Нативки

нельзя менять положение хб бар
можно попробовать. ты либо что-то не так делаешь, или действительно никак. что за хб бар, может быть полоса героя?
--чистим точки фрейм, таким образом разрушая связь с другими фреймами. просто обычно привязаны фреймы точками, и ты не может двигать фрейм.
BlzFrameClearAllPoints(frame)
--двигаем фрейм
BlzFrameSetAbsPoint(frame, FRAMEPOINT_CENTER, 3, 0)
--привязываем фрейм frameA к другому фрейму frameB точками 
BlzFrameSetPoint(frameA, FRAMEPOINT_BOTTOM, frameB, FRAMEPOINT_BOTTOM, offset_x, pffset_y)
27

» WarCraft 3 / Нативки

еще тут <= см раздел BottomCenter UI parent (unit info- Inventory). тут названия всех фреймов и констант центральной панели
или тут

Survivalist, понял, что ты ищешь. это не нативки, а названия фреймов или константы. названия можно посмотреть в fdf-files. все что ты просишь, их очень много. И тем более они поделены на панели (панель транспорта, инфа юнита, панель группы, инфа панель итема, декора и пр).
27

» WarCraft 3 / Нативки

Можно =)) Но это надо поподробнее изучить фреймы

там все статы связаны друг с другом. И проще сломать и разместить самому все. Тут статы разбиты на панели.
пример
27

» WarCraft 3 / Убрать с панели или скрыть.

Survivalist, что ты хочешь убрать?
кнопки приказов (атака 'Aatk', стоп 'Astp', патруль 'Apat, двигать 'Amov', удерживать Ahld', точка сбора 'ARal', изучить навыки 'AHer')? Их можно скрыть. Там в рефордже есть два способа: заблочить абилу у самого игрока, спрятать (hide) абилу у самого юнита. Можно еще попробовать удалить (может привести к ущербу. помню в старом варе удалив абилку Amov, он перестал фактически двигаться. Или совсем фаталило. Надеюсь в рефорджете все в норм). А еще можно задать положение x,y абилам
а если вам нужно просто панель убрать, то кнопки можно скрыть.
Но скрыв/заблочив кнопки, у вас не будут работать горячие клавиши. Можно просто CommandBarFrame за пределы экрана передвинуть. Так кнопки будут видимы игрой, но находится за пределами экрана.
код
Если хотите навсегда выключить, вот код (мне пригодился, когда нужно было скрыть показ кнопок) Недостаток: но с этим же способом вы скрываете родителей кнопок на панеле, и у вас не будут отображаться все кнопки способностей, предметы в магазине, исследования и пр. :
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,0)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,1)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,2)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,3)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,4)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,5)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,6)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,7)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,8)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,9)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,10)), FALSE)
call BlzFrameSetVisible(BlzFrameGetParent(BlzGetOriginFrame(ORIGIN_FRAME_COMMAND_BUTTON,11)), FALSE)
или можете переместить коммандную панель. Какие то кнопки можно было бы выдрать из коммандной панели, пример 4-5 кнопок. Но мне лень объяснять.
function ReposMenuButtons1 takes nothing returns nothing
   local framehandle fh = BlzGetFrameByName("CommandBarFrame",0)
   call BlzFrameSetAbsPoint(fh, FRAMEPOINT_RIGHT, 0.5, 0.5)
endfunction
27

» WarCraft 3 / Положение спрайта на мини-карте

формула оказалась верной. Но с жуткими погрешностями. Нужно будет offsets править.
Оказывается дело было в fdf-file, не нужно было размеры указывать там. Странно, надо исправить
Frame "SPRITE" "MinimapWaypoint" {
    //Width 0.362,
    //Height 0.037,
    BackgroundArt "UI\Minimap\Minimap-Waypoint.mdx",
}