13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Имел ввиду переписать нативки через мемхак, есть хотя бы теоретическая возможность?
13

» RenderEdge / [RenderEdge] Графическая модификация для WarCraft III

Возможно ли встроить весь GUI API внутрь карты? То есть без отдельной библиотеки или с распаковкой из самой карты
13

» WarCraft 3 / [Мемхак] прошу простую готовую функцию

DracoL1ch, я правильно понимаю, что можно сделать 1 ауру (self) на основе торнадо и меняя ее поле через мемхак, добавлять нужный баф?
Поковыряюсь на досуге, должно сильно ускорить прелоад моей системки бафов на основе торнадо. Не знаешь, в поле абилки хранится ссылка на список бафов или сложнее?
13

» WarCraft 3 / [Мемхак] прошу простую готовую функцию

А если потом захочется сделать не 4сек а 5?
Как-то нагляднее код становится на мой взгляд, и балансить удобнее если все параметры сразу вынести из функций
а по поводу нескольких уровней, все равно нужно несколько, хотя и намного меньше
Предположим игрок использовал этот навык, в способность пишется число, но через 1 сек другой персонаж тоже использовал ту же способность, при одном лвле получим что у всех юнитов попавших под первое применение будет замедление по цифрам как у 2го
13

» WarCraft 3 / [Мемхак] прошу простую готовую функцию

Я бы сделал так если для рпг:
Аура 16 уровней, цель - self
Выбираем всех юнитов в группу, считаю коэф-т замедления от брони использовавшего, раздал всей группе ауру с лвлом равным номеру использовавшего способность игрока, через фунцию мемхака редактирую соответствующее (по уровню) поле ауры, по прошествию таймера (TimerEx) с группы записанной в структуру удается аура и ее эффект (так удаление иконки баффа мгновенно)
Есть фукции на редактирование полей абилок, но сейчас не смогу выложить
Here
function SetAbilityRealParam takes unit u, integer id, integer off, real newVal, integer lvl returns nothing
local integer k=GetUnitAbility(u,id)
if Memory[k/4+0x54/4]>0 then
call WMem(RMem(RMem(k+0x54)+0x54)+(lvl-1)*26*4+(8+off)*4,cleanInt(realToIndex(newVal)))
endif
endfunction
function GetAbilityRealParam takes unit u, integer id, integer off, integer lvl returns real
local integer k=GetUnitAbility(u,id)
if RMem(k+0x54)>0 then
return cleanReal(mI2R(RMem(RMem(RMem(k+0x54)+0x54)+(lvl-1)*26*4 + (8+off)*4)))
endif
return .0
endfunction
DataA - off=0, DataB - off=1 etc.
13

» WarCraft 3 / Канал

Принятый ответ
Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
13

» WarCraft 3 / Канал

до 0x700 не нашел, кроме первого десятка адресов - одни нули
искал так
set j = GetAbilityDataDefById('A006')
set i = 0
loop
exitwhen i>=400
call BJDebugMsg(R2S(cleanReal(mI2R(RMem(j+4*i))))+" "+I2S(i))
set i = i+1
endloop
function GetAbilityDataDefById takes integer id returns integer
local integer a=CallThisCallWith1Args(pGetAbilityDataDefAddr,id)
if a>0 then
return a
endif
return 0
endfunction
может имеет значение кол-во лвлов?
Складывается впечатление что там нужна многоуровневая ссылка, если у канала отличная от осальных абилок структура
Да, однозначно идет перемещение данных. При 1 уровне все нормально работало (0x6c - 0x88 примерно)
Попробовал поискать по ссылкам, ничего дельного не нашел
13

» WarCraft 3 / StartAbilityCD (MemHack)

Принятый ответ
Возможно "канал" так же имеет отличную от остальных абилок структуру
Рабочий вариант
function StartAbilityCD takes unit whichUnit, integer abilityId returns boolean
local integer pAbility = 0
local real cd = GetAbilityCD(abilityId, GetPlayerId(GetOwningPlayer(whichUnit))+1)
if whichUnit == null or GetUnitAbilityLevel( whichUnit, abilityId ) < 1 or cd == 0.00 then
return false
endif

set pAbility = GetUnitAbility(whichUnit, abilityId)
if pAbility < 1 then
return false
else
if RMem(pAbility+0x134)==-1 and RMem(pAbility+0x138)==-1 then
call WMem(pAbility+0x134,0)
call WMem(pAbility+0x138,0)
endif
set Memory[pReserverdIntArg1 / 4] = mR2I(cd)
call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
return IsAbilityOnCooldown( pAbility )
endif
return false
endfunction
13

» WarCraft 3 / Text File (Memhack)

Хм... видимо начитался старых постов про то что они по дефолту выключены...
13

» WarCraft 3 / Text File (Memhack)

Без локальных файлов, в плане не трогая regedit
чтобы все работало в стандартом комплекте
13

» WarCraft 3 / Формирование пакетов с мемхаком

Допустим уговорили не придумывать велосипед. Как определить, что синхрон корректно завершился?
13

» WarCraft 3 / Формирование пакетов с мемхаком

Вот для сокращения времени синхронизации и спрашиваю, нужно передавать массив в примерно 30integer + 200 real
От КАЖДОГО игрока
И это если брать по минимуму
Статью читал
13

» WarCraft 3 / Формирование пакетов с мемхаком

И что если у каждого игрока вытащатся данные из preload а потом я на основе этих данных начну делать юнитов для игроков не будет десинка?
13

» WarCraft 3 / Формирование пакетов с мемхаком

Clamp:
Идея в отправке локально сохраненного сейва пакетом всем игрокам для избежания рассинхрона
При каждой синхронизации будет лаг не меньше половины секунды. Сейв сетевой игры помнит имена и позиции игроков, это может привести к неопределённому поведению игры при его загрузке. Ты учитывал эти моменты?
Имел ввиду сейв код в текстовом файле, пролаг - не проблема
Чтобы в орпг при загрузке карты загружать героя без участия игрока
13

» WarCraft 3 / Смена атаки через Мемхак

И лучше брать хак из последнего коммента в той теме. без деления на 4 который
13

» WarCraft 3 / Баловство с мемхаком

Ага, спасибо, вот рабочий вариант:
Code
function SetUnitUIIcon takes integer id, string s returns nothing
local integer a=GetUnitUIDefByIdCaching(id)
if a>0 then
set a=RMem(a+0x248)
if a>0 then
call WMem(a,GetStringAddress(s))
endif
endif
endfunction
13

» WarCraft 3 / Memory Hack

Есть какие идеи по полям "Name" и "Description"?
Это то описание что отображается вне инвентаря, не критично, но хотелось бы)
13

» WarCraft 3 / Memory Hack

Менять параметры способностей, например, DataA
Проверил деление на 4, сделал через WMem/RMem - заработало как надо, хотел шанс уворота задавать
UnitUbertip и UnitTip так же работает, теперь бы с полями "Description" и "Name" разобраться
13

» WarCraft 3 / Memory Hack

Ага инициализацию пофиксил
Вернулся к этой проблеме xgm.guru/p/100/189998
Как это сделать адекватно? SetAbilityRealParam не дает эффекта
Вот
function SetAbilityReal takes unit u, integer id, integer off, real newVal, integer lvl returns nothing
local integer k=GetUnitAbility(u,id)
if Memory[k/4+0x54/4]>0 then
set Memory[ Memory[Memory[k/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 8 + off] = cleanInt(realToIndex(newVal))
endif
endfunction
function GetAbilityReal takes unit u, integer id, integer off, integer lvl returns real
local integer k=GetUnitAbility(u,id)
if Memory[k/4+0x54/4]>0 then
return cleanReal(indexToReal( Memory[ Memory[Memory[k/4+0x54/4]/4+0x54/4]/4 + (lvl-1)*26 + 8+off] ))
endif
return .0
endfunction
Set нормально работает с Evasion, а Get выдает фатал
Только Set высталяет что-то не то
13

» WarCraft 3 / Memory Hack

Да, сижу, обновляю версию
Потом отпишусь о результатах
Как ни странно, перестал работать всё. Даже базовый урон на атаках не могу сменить
Скопировал все из карты, добавил нужные функции и ничего, теперь где-то в зкромах мемхака поток прерывается
13

» WarCraft 3 / Memory Hack

Это нашел, вот пытаюсь впихнуть нужные функции в NewGen
GetUnitUbertip - фатал
на юнита тоже...
13

» WarCraft 3 / Memory Hack

Попробуемс)
Переписал GetAbilityStringParam, заменив GetAbilityUIDefAddr на GetUnitUIDefAddr, получил фатал
GetUnitUIDefAddr дает не 0
Перебором выяснит что некоторые оффсеты дают фатал, пробую искать дальше