дополнение к прошлому сообщению и несколько новых ф-ций:
// *ВАЖНО* перед манипулированием фреймом здоровья/маны нужно обязательно создать эти фреймы, просто триггерно выделив 1 раз любую боевую единицу и обязательно всем живым игрокам.
function GetHealthPointsFrame takes nothing returns integer // возвращает адрес фрейма очков здоровья
function GetManaPointsFrame takes nothing returns integer // возвращает адрес фрейма очков маны
function GetBuffBarButton takes integer id returns integer // возвращает адрес фрейма заклинания (баффа); id принимает значения 0..7
// готовые ф-ции
function EditHealthPointsFrame takes integer anchor, real offsetX, real offsetY returns nothing
function EditManaPointsFrame takes integer anchor, real offsetX, real offsetY returns nothing
function EditBuffBarButton takes integer buttonId, integer anchor, real offsetX, real offsetY, real width, real height returns nothing
сам код
function GetHealthPointsFrame takes nothing returns integer
return Memory[ReadGameUIStruct(FRAME_Portrait)/4 + 144]
endfunction
function GetManaPointsFrame takes nothing returns integer
return Memory[ReadGameUIStruct(FRAME_Portrait)/4 + 145]
endfunction
function GetBuffBarButton takes integer id returns integer
return Memory[Memory[Memory[ReadGameUIStruct(FRAME_CommandBar)/4 + 85]/4 + 20]/4 + id]
endfunction
// =================================================
function EditHealthPointsFrame takes integer anchor, real offsetX, real offsetY returns nothing
local integer pHealthPointsFrame = GetHealthPointsFrame()
local integer pRootFrame = GetRootFrame()
call SetFramePoint(pHealthPointsFrame, ANCHOR_TOPLEFT, pRootFrame, anchor, offsetX, offsetY)
endfunction
function EditManaPointsFrame takes integer anchor, real offsetX, real offsetY returns nothing
local integer pManaPointsFrame = GetManaPointsFrame()
local integer pRootFrame = GetRootFrame()
call SetFramePoint(pManaPointsFrame, ANCHOR_TOPLEFT, pRootFrame, anchor, offsetX, offsetY)
endfunction
function EditBuffBarButton takes integer buttonId, integer anchor, real offsetX, real offsetY, real width, real height returns nothing
local integer pButtonFrame = GetBuffBarButton(buttonId)
local integer pRootFrame = GetRootFrame()
if (width >= 0) then
call SetFrameWidth(pButtonFrame, width)
endif
if (height >= 0) then
call SetFrameHeight(pButtonFrame, height)
endif
call SetFramePoint(pButtonFrame, ANCHOR_TOPLEFT, pRootFrame, anchor, offsetX, offsetY)
endfunction
пример
local real healthPointsX = FromPixelX(5)
local real healthPointsY = FromPixelY(-175)
local real manaPointsX = FromPixelX(5)
local real manaPointsY = FromPixelY(-195)
local real buffBarButtonStartX = FromPixelX(160)
local real buffBarButtonStartY = FromPixelX(240)
local real buffBarButtonDeltaX = FromPixelX(-40)
call EditHealthPointsFrame(ANCHOR_TOPLEFT, healthPointsX, healthPointsY)
call EditManaPointsFrame(ANCHOR_TOPLEFT, manaPointsX, manaPointsY)
call EditBuffBarButton(0, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*0, buffBarButtonStartY, -1, -1) //дабы избежать изменения ширины/высоты, нужно указать отрицательное значение
call EditBuffBarButton(1, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*1, buffBarButtonStartY, -1, -1)
call EditBuffBarButton(2, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*2, buffBarButtonStartY, -1, -1)
call EditBuffBarButton(3, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*3, buffBarButtonStartY, -1, -1)
call EditBuffBarButton(4, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*4, buffBarButtonStartY, -1, -1)
call EditBuffBarButton(5, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*5, buffBarButtonStartY, -1, -1)
call EditBuffBarButton(6, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*6, buffBarButtonStartY, -1, -1)
call EditBuffBarButton(7, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*0, buffBarButtonStartY, -1, -1)
function Int2Unit takes integer id returns unit
function Int2Effect takes integer id returns effect
function Int2Trigger takes integer id returns trigger
и т.д
и простой пример кода, меняющий показатели местами:
local integer pHealthPointsFrame = GetHealthPointsFrame()
local integer pManaPointsFrame = GetManaPointsFrame()
local integer pManaPointsParent = GetFramePointParent(pManaPointsFrame, ANCHOR_TOPLEFT)
local integer pHealthPointsParent = GetFramePointParent(pHealthPointsFrame, ANCHOR_TOPLEFT)
local real pHealthPointsX = GetFramePointX(pHealthPointsFrame, ANCHOR_TOPLEFT)
local real pHealthPointsY = GetFramePointY(pHealthPointsFrame, ANCHOR_TOPLEFT)
local real pManaPointsX = GetFramePointX(pManaPointsFrame, ANCHOR_TOPLEFT)
local real pManaPointsY = GetFramePointY(pManaPointsFrame, ANCHOR_TOPLEFT)
call SetFramePoint(pHealthPointsFrame, ANCHOR_TOPLEFT, pHealthPointsParent, ANCHOR_BOTTOMLEFT, pHealthPointsX, pManaPointsY)
call SetFramePoint(pManaPointsFrame, ANCHOR_TOPLEFT, pManaPointsParent, ANCHOR_BOTTOMLEFT, pManaPointsX, pHealthPointsY)
Plague Doctor, версия варика какая? в карте используются фишки мемхака => версия не должна быть новее 1.27, хотя скорее всего карта поддерживает только 1.26
в карте русская озвучка?*_*
на втором скриншоте указано, что необходимо 21 стойкость, хотя я прошел проверку при хар-ках 16 стойкости / 23 ловкости / 14 мудрости
Name Legion, игрок вводит -Arch, триггер проверяет, какой сейчас у игрока герой "тип боевой единицы Heroes[номер игрока] не равно Архимонд", если не Архимонд, то запускаются последующие действия
Arctide, выглядит прикольно, хотя и непривычно)
мб стоит заменить надписи "Атака" и пр. на иконки?
не поделишься адресом значений хп/мп?(их вроде бы нет в примере render edge)
ScopteRectuS, как делаю я
Когда креплю данные к юниту через хт, добавляю его в группу. По группе периодически пробегаюсь, ищу несуществующих юнитов (GetUnitTypeId() вернет 0, если юнита больше нет на карте) и если нахожу, то очищаю данные в хт.
» WarCraft 3 / Как играть в старый варик?
» RenderEdge / [RenderEdge] Memory Hack
Держи
Отредактирован Ige
» RenderEdge / [RenderEdge] Memory Hack
Отредактирован Ige
» WarCraft 3 / Хендл
» WarCraft 3 / I2H как сконвертировать
» RenderEdge / [RenderEdge] Memory Hack
вот нашел адреса очков здоровья и маны (те что под портретом персонажа):
Отредактирован Ige
» WarCraft 3 / Откуда они берутся эти утечки...
» Edemium / Скачать Edemium
» WarCraft 3 / Быстрый импорт
» WarCraft 3 / Версии war3 и нововведения
» WarCraft 3 / Поиск элемента БД
У тебя в примере в таблицу сохраняется только код предмета
Отредактирован Ige
» WarCraft 3 / Поиск элемента БД
» WarCraft 3 / common.ai
» WarCraft 3 / Как добавляются нативки?
Отредактирован Ige
» WarCraft 3 / Иногда хеш таблица запаздывает???
» Edemium / Главная страница
» Edemium / Главная страница
Arctide: как вариант сделать свою систему сохранений с помощью кэша или прелоада
» WarCraft 3 / Ограничение для героев
» WarCraft 3 / Ограничение для героев
» WarCraft 3 / Ограничение для героев
» WarCraft 3 / не отображается иконка добавленной триггерно способности
avuremybe, лучше сразу предоставлять скрины
Отредактирован Ige
» Edemium / Главная страница
мб стоит заменить надписи "Атака" и пр. на иконки?
не поделишься адресом значений хп/мп?(их вроде бы нет в примере render edge)
» RenderEdge / [RenderEdge] Memory Hack
» WarCraft 3 / Освобождение хендла
Когда креплю данные к юниту через хт, добавляю его в группу. По группе периодически пробегаюсь, ищу несуществующих юнитов (GetUnitTypeId() вернет 0, если юнита больше нет на карте) и если нахожу, то очищаю данные в хт.
» WarCraft 3 / Освобождение хендла