странно, но в любом случае, я снова дал не ту, эта именно обновляет скин - мороз, оживление, вот это всё пересчитывает. Вот функция смены модели:
function ChangeUnitModelTo takes unit u, string modelpath returns nothing
local integer a
local integer s
set LastConvertedHandle=ConvertHandle(u)
if LastConvertedHandle>0 then
set a=RMem(LastConvertedHandle)+0x88
if a>0 then
set a=RMem(a)
if a>0 then
set s=GetStringAddress(modelpath)
call CallThisCallWith3Args(a,LastConvertedHandle,s,1)
endif
endif
endif
endfunction
минимум создания объектов в циклах
максимальное использование нативок вместо своих велосипедов по возможности
минимум группировок юнитов в частых таймерах или циклах
оптимизация начинается тогда, когда в ней есть необходимость. пока игра не тормозит, забудь об этом слове, ты не ракеты строишь
set pRedrawUnitFunction=GameDLL+0x284830//26
function RedrawUnit takes unit u returns nothing
set LastConvertedHandle=ConvertHandle(u)
if LastConvertedHandle>0 then
call CallThisCallWith1Args(pRedrawUnitFunction,LastConvertedHandle)
endif
endfunction
спутал, эта фунция прячет хендл, а не рисовку обеспечивает
function IsFlagBitSet takes integer flags, integer bit returns boolean
if bit!=0 then
return flags/bit*0x80000000 != 0
endif
return false
endfunction
function RMem takes integer addr returns integer
if addr<0 or addr>0x7FFFFFFF then
return 0
endif
return Memory[addr/4]
endfunction
function AddAlwaysVisibleFlag takes unit u returns nothing
local integer a=ConvertHandle(u)
if a>0 and IsFlagBitSet(RMem(a+0x20),0x10)==false then
call WMem(a+0x20,RMem(a+0x20)+0x10)
endif
endfunction
вместо юнита можно вроде любой виджет, просто смени входящий тип и проверь
''
function SetEffectVisibility takes effect fx, boolean visible returns nothing
local integer a=ConvertHandle(fx)
if a>0 then
if visible then
call WMem(a+0x20,0)
else
call WMem(a+0x20,1)
endif
endif
endfunction
''
адреса целые, без деления на 4
напоминаю о существовании IsUnitInRange(u1,u2,rng) и IsUnitInRangeXY(u,x,y,rng) для проверки расстояний между юнитом и точкой/юнитом. В большинстве случаев проверяют, входит ли юнит в аое, и эта нативка будет в разы быстрее, чем самописцы
класс, предложил два костыля с существенными проблемами и говорит, что это я пихаю костыль. хотя на мемхаке легко выдать видимость любому виджету. о времена, о костыли
а на 5й уровень всё корректно работает? ну т.е. измегнения проходят?
если на выходе фатал, где-то память нечищенная осталась. я вообще б не советовал юзать malloc без ооооччень крайней необходимости
ты вообще не понимаешь, что делаешь. неудивительно, что всё бесит.
function SetSpellRange takes integer a, integer lvl, real r returns nothing
local integer offset = 0
if a>0 then
set offset=ReadMemory(a+0x54)
call WriteMemory(offset+0x74+0x68*lvl,SetRealIntoMemory(r))
endif
endfunction
ты не понял, что реал и интегер - это совершенно разные числа в памяти и используешь I2R, х\отя речь шла о конвертации в памяи, ведь именно в ней ты и работаешь
ты мешаешь "чистые" и "грязные" офсеты - массив Memory[] работает ТОЛЬКО с деленнвыми на 4, Read/WriteMemory - глянь в функции, если нет деления - то тоже надо отправлять туда уже деленные. Если же в последниз есть деление, то моя функция верна.
Ну и от лвл надо отнимать 1, ибо уровни начинаются с 0, а не с 1.
» WarCraft 3 / Кулдаун абилки буквально замораживается
блеать
» WarCraft 3 / Кулдаун абилки буквально замораживается
» WarCraft 3 / Лимит строк кода
» WarCraft 3 / Кулдаун абилки буквально замораживается
» WarCraft 3 / Морф и потом удаление абилы морфа
» WarCraft 3 / Кулдаун абилки буквально замораживается
» WarCraft 3 / Морф и потом удаление абилы морфа
» WarCraft 3 / Об утечках
от них легко избавиться, так что не понимаю вопроса
» WarCraft 3 / (MH) Что с присвоением анимации юниту?
» WarCraft 3 / Интерфейс игрока
» WarCraft 3 / (MH) Что с присвоением анимации юниту?
» WarCraft 3 / Библиотека или что-то типо этого
максимальное использование нативок вместо своих велосипедов по возможности
минимум группировок юнитов в частых таймерах или циклах
оптимизация начинается тогда, когда в ней есть необходимость. пока игра не тормозит, забудь об этом слове, ты не ракеты строишь
Ред. DracoL1ch
» WarCraft 3 / (MH) Что с присвоением анимации юниту?
» WarCraft 3 / Хак на память Warcraft3
» WarCraft 3 / (Memory hack) Visible effect'a в тумане войны
» WarCraft 3 / (Memory hack) Visible effect'a в тумане войны
» WarCraft 3 / (Memory hack) Visible effect'a в тумане войны
function SetEffectVisibility takes effect fx, boolean visible returns nothing
local integer a=ConvertHandle(fx)
if a>0 then
if visible then
call WMem(a+0x20,0)
else
call WMem(a+0x20,1)
endif
endif
endfunction
''
адреса целые, без деления на 4
» WarCraft 3 / SquareRoot
» WarCraft 3 / +2 Вопроса (effect, интерфейс игрока)
» WarCraft 3 / +2 Вопроса (effect, интерфейс игрока)
» WarCraft 3 / Вынесу в отдельный вопрос - возможный фатал при постоянных измен
если на выходе фатал, где-то память нечищенная осталась. я вообще б не советовал юзать malloc без ооооччень крайней необходимости
» WarCraft 3 / Использование SetUnitFlyHeight
» WarCraft 3 / [Мемхак] Функции для способностей.
» WarCraft 3 / [Мемхак] Функции для способностей.
ты мешаешь "чистые" и "грязные" офсеты - массив Memory[] работает ТОЛЬКО с деленнвыми на 4, Read/WriteMemory - глянь в функции, если нет деления - то тоже надо отправлять туда уже деленные. Если же в последниз есть деление, то моя функция верна.
Ну и от лвл надо отнимать 1, ибо уровни начинаются с 0, а не с 1.
» WarCraft 3 / [Мемхак] Функции для способностей.
конвертируй правильно