Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Наработка
Версия Warcraft:
1.26 и ниже
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
4
16
6 лет назад
4
Эм, ну да, на пассивках не тестил, ибо в этом плане сломанные Afla проще
Там просто нет этой функции на пассивках вообще, ясно откуда вылет.
фикс под пассивки
по крайней мере часть пассивок
function InitCustomChargesData takes nothing returns nothing
	set ChargesIndicatorDataHandle=GetHandleId(ChargesIndicatorData)
	set Memory[pCustomChargesDisplayer/4 + 0] = 0x0824448B
	set Memory[pCustomChargesDisplayer/4 + 1] = 0x7C8B5756
	set Memory[pCustomChargesDisplayer/4 + 2] = 0x57500C24
	set Memory[pCustomChargesDisplayer/4 + 3] = 0x8DE8F18B
	set Memory[pCustomChargesDisplayer/4 + 4] = 0x85000372
	call WMem(pCustomChargesDisplayer+4*3 + 3,GameDLL+0x378A0 - (pCustomChargesDisplayer+4*3 + 3) - 4)
	set Memory[pCustomChargesDisplayer/4 + 5] = 0x397C75FF
	set Memory[pCustomChargesDisplayer/4 + 6] = 0x777F407E
	set Memory[pCustomChargesDisplayer/4 + 7] = 0x51605E5F
	set Memory[pCustomChargesDisplayer/4 + 8] = 0x4E8B9090
	set Memory[pCustomChargesDisplayer/4 + 9] = 0xCC40B830
	set Memory[pCustomChargesDisplayer/4 + 10] = 0xD0FF6F2D
	call WMem(pCustomChargesDisplayer+4*9 + 2,GameDLL+0x2DCC40)
	set Memory[pCustomChargesDisplayer/4 + 11] = 0x6974C085
	set Memory[pCustomChargesDisplayer/4 + 12] = 0x8B905159
	set Memory[pCustomChargesDisplayer/4 + 13] = 0x3476FFD8
	set Memory[pCustomChargesDisplayer/4 + 14] = 0x99996850
	set Memory[pCustomChargesDisplayer/4 + 15] = 0x10B89999
	call WMem(pCustomChargesDisplayer+4*14 + 2,ChargesIndicatorDataHandle)
	set Memory[pCustomChargesDisplayer/4 + 16] = 0xFF6F3CAB
	call WMem(pCustomChargesDisplayer+4*15 + 3,GameDLL+0x3CAB10)
	set Memory[pCustomChargesDisplayer/4 + 17] = 0x0CC483D0
	set Memory[pCustomChargesDisplayer/4 + 18] = 0x4C74C085
	set Memory[pCustomChargesDisplayer/4 + 19] = 0x90905990
	set Memory[pCustomChargesDisplayer/4 + 20] = 0x828B168B
	set Memory[pCustomChargesDisplayer/4 + 21] = 0x00000308
	set Memory[pCustomChargesDisplayer/4 + 22] = 0x53347E8B
	set Memory[pCustomChargesDisplayer/4 + 23] = 0xD0FFCE8B
	set Memory[pCustomChargesDisplayer/4 + 24] = 0x533476FF
	set Memory[pCustomChargesDisplayer/4 + 25] = 0x99999968
	set Memory[pCustomChargesDisplayer/4 + 26] = 0xB8D88B99
	call WMem(pCustomChargesDisplayer+4*25 + 1,ChargesIndicatorDataHandle)
	set Memory[pCustomChargesDisplayer/4 + 27] = 0x6F3CAA90
	call WMem(pCustomChargesDisplayer+4*27 + 0,GameDLL+0x3CAA90)
	set Memory[pCustomChargesDisplayer/4 + 28] = 0xC483D0FF
	set Memory[pCustomChargesDisplayer/4 + 29] = 0x51C88B0C
	set Memory[pCustomChargesDisplayer/4 + 30] = 0xCF8BD38B
	set Memory[pCustomChargesDisplayer/4 + 31] = 0x332E10B8
	set Memory[pCustomChargesDisplayer/4 + 32] = 0x6AD0FF6F
	call WMem(pCustomChargesDisplayer+4*31 + 1,GameDLL+0x332E10)
	set Memory[pCustomChargesDisplayer/4 + 33] = 0x8BD38B01
	set Memory[pCustomChargesDisplayer/4 + 34] = 0x2E40B8CF
	set Memory[pCustomChargesDisplayer/4 + 35] = 0xD0FF6F33
	call WMem(pCustomChargesDisplayer+4*34 + 2,GameDLL+0x332E40)
	set Memory[pCustomChargesDisplayer/4 + 36] = 0x5F07EB5B
	set Memory[pCustomChargesDisplayer/4 + 37] = 0x0008C25E
	set Memory[pCustomChargesDisplayer/4 + 38] = 0xC2615990
	set Memory[pCustomChargesDisplayer/4 + 39] = 0x90900008
//	call echo(Int2Hex(pCustomChargesDisplayer))

set Memory[pCustomChargesDisplayer/4 + 40] = 0x0824448B
	set Memory[pCustomChargesDisplayer/4 + 41] = 0x7C8B5756
	set Memory[pCustomChargesDisplayer/4 + 42] = 0x57500C24
	set Memory[pCustomChargesDisplayer/4 + 43] = 0x8390F18B
	set Memory[pCustomChargesDisplayer/4 + 44] = 0x859008C4
	set Memory[pCustomChargesDisplayer/4 + 45] = 0x397C75FF
	set Memory[pCustomChargesDisplayer/4 + 46] = 0x777F407E
	set Memory[pCustomChargesDisplayer/4 + 47] = 0x51605E5F
	set Memory[pCustomChargesDisplayer/4 + 48] = 0x4E8B9090
	set Memory[pCustomChargesDisplayer/4 + 49] = 0xCC40B830
	set Memory[pCustomChargesDisplayer/4 + 50] = 0xD0FF6F2D
	call WMem(pCustomChargesDisplayer+4*49 + 2,GameDLL+0x2DCC40)
	set Memory[pCustomChargesDisplayer/4 + 51] = 0x6974C085
	set Memory[pCustomChargesDisplayer/4 + 52] = 0x8B905159
	set Memory[pCustomChargesDisplayer/4 + 53] = 0x3476FFD8
	set Memory[pCustomChargesDisplayer/4 + 54] = 0x99996850
	set Memory[pCustomChargesDisplayer/4 + 55] = 0x10B89999
	call WMem(pCustomChargesDisplayer+4*54 + 2,ChargesIndicatorDataHandle)
	set Memory[pCustomChargesDisplayer/4 + 56] = 0xFF6F3CAB
	call WMem(pCustomChargesDisplayer+4*55 + 3,GameDLL+0x3CAB10)
	set Memory[pCustomChargesDisplayer/4 + 57] = 0x0CC483D0
	set Memory[pCustomChargesDisplayer/4 + 58] = 0x4C74C085
	set Memory[pCustomChargesDisplayer/4 + 59] = 0x90905990
	set Memory[pCustomChargesDisplayer/4 + 60] = 0x828B168B
	set Memory[pCustomChargesDisplayer/4 + 61] = 0x00000308
	set Memory[pCustomChargesDisplayer/4 + 62] = 0x53347E8B
	set Memory[pCustomChargesDisplayer/4 + 63] = 0xD0FFCE8B
	set Memory[pCustomChargesDisplayer/4 + 64] = 0x533476FF
	set Memory[pCustomChargesDisplayer/4 + 65] = 0x99999968
	set Memory[pCustomChargesDisplayer/4 + 66] = 0xB8D88B99
	call WMem(pCustomChargesDisplayer+4*65 + 1,ChargesIndicatorDataHandle)
	set Memory[pCustomChargesDisplayer/4 + 67] = 0x6F3CAA90
	call WMem(pCustomChargesDisplayer+4*67 + 0,GameDLL+0x3CAA90)
	set Memory[pCustomChargesDisplayer/4 + 68] = 0xC483D0FF
	set Memory[pCustomChargesDisplayer/4 + 69] = 0x51C88B0C
	set Memory[pCustomChargesDisplayer/4 + 70] = 0xCF8BD38B
	set Memory[pCustomChargesDisplayer/4 + 71] = 0x332E10B8
	set Memory[pCustomChargesDisplayer/4 + 72] = 0x6AD0FF6F
	call WMem(pCustomChargesDisplayer+4*71 + 1,GameDLL+0x332E10)
	set Memory[pCustomChargesDisplayer/4 + 73] = 0x8BD38B01
	set Memory[pCustomChargesDisplayer/4 + 74] = 0x2E40B8CF
	set Memory[pCustomChargesDisplayer/4 + 75] = 0xD0FF6F33
	call WMem(pCustomChargesDisplayer+4*74 + 2,GameDLL+0x332E40)
	set Memory[pCustomChargesDisplayer/4 + 76] = 0x5F07EB5B
	set Memory[pCustomChargesDisplayer/4 + 77] = 0x0008C25E
	set Memory[pCustomChargesDisplayer/4 + 78] = 0xC2615990
	set Memory[pCustomChargesDisplayer/4 + 79] = 0x90900008
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
на выжег маны и уклонение работает, в случае чего плюнет ошибку и ниче не сделает.
0
21
5 лет назад
0
там, где AllocateExecutableMemory вызывается, указан объем выделяемой памяти
поставь туда 70000 и вперед, остальное набирай дальше
пример использования
А можно меньше 70000 сделать, если мне столько не нужно.
Внизу set pCustomChargesDisplayer = pCallFastCallWith1Args + 35000.
        set pCallFastCallWith1Args                      = AllocateExecutableMemory( 40000 )
        set pCallFastCallWith2Args                      = pCallFastCallWith1Args + 1000
        set pCallFastCallWith3Args                      = pCallFastCallWith1Args + 2000
        set pCallFastCallWith4Args                      = pCallFastCallWith1Args + 3000
        set pFUCKINGCallWith4Args                       = pCallFastCallWith1Args + 4000
        set pCallFastCallWith5Args                      = pCallFastCallWith1Args + 5000
        set pCallFastCallWith6Args                      = pCallFastCallWith1Args + 6000
        set pCallFastCallWith7Args                      = pCallFastCallWith1Args + 7000
        set pCallFastCallWith8Args                      = pCallFastCallWith1Args + 8000        
        set pCallStdcallWith1Args                       = pCallFastCallWith1Args + 9000
        set pCallStdcallWith2Args                       = pCallFastCallWith1Args + 10000
        set pCallStdcallWith3Args                       = pCallFastCallWith1Args + 11000
        set pCallStdcallWith4Args                       = pCallFastCallWith1Args + 12000
        set pCallStdcallWith5Args                       = pCallFastCallWith1Args + 13000
        set pCallStdcallWith6Args                       = pCallFastCallWith1Args + 14000        
        set pCallCdeclWith1Args                         = pCallFastCallWith1Args + 15000
        set pCallCdeclWith2Args                         = pCallFastCallWith1Args + 16000
        set pCallCdeclWith3Args                         = pCallFastCallWith1Args + 17000
        set pCallCdeclWith4Args                         = pCallFastCallWith1Args + 18000
        set pCallCdeclWith5Args                         = pCallFastCallWith1Args + 19000
        set pCallCdeclWith6Args                         = pCallFastCallWith1Args + 20000
    //  set pReadStack                                  = pCallFastCallWith1Args + 21000
        set pBitwiseOR_ExecutableMemory                 = pCallFastCallWith1Args + 22000
        set pBitwiseXOR_ExecutableMemory                = pCallFastCallWith1Args + 23000
        set pBitwiseAND_ExecutableMemory                = pCallFastCallWith1Args + 24000
        set pReservedMemoryForMissileHandler            = pCallFastCallWith1Args + 25000
    //  set pReservedMemoryForDamageHandler             = pCallFastCallWith1Args + 26000
        set pGetAbilityOrderID                          = pCallFastCallWith1Args + 27000
    //  set pReservedMemoryForPacketHandler             = pCallFastCallWith1Args + 28000
    //  set pReservedMemoryForPacketHandler2            = pCallFastCallWith1Args + 29000
        set pCallFastCallWith11Args                     = pCallFastCallWith1Args + 30000
        set pCallFastCallWith12Args                     = pCallFastCallWith1Args + 31000
    //  set pReservedMemoryForBerserkHook               = pCallFastCallWith1Args + 32000
    //  set pReservedMemoryForAttackPrepareHandler      = pCallFastCallWith1Args + 34000
        set pCustomChargesDisplayer                     = pCallFastCallWith1Args + 35000
0
21
5 лет назад
0
конечно понимаю что уже в который раз спрашиваю, но все-таки еще раз прошу уточнить насчет функции получения золотостоимости предмета
дико нужна для разных систем
ту замуту упоротую с созданием магазинов и продажи в них предметов и сверкой стоимости золота мне НЕ надо, потому что, во-первых, это правой рукой чесать левое ухо через голову, во-вторых, мне там в коде видятся утечки, т. е. еще и утечки править, а в итоге все равно не оптимальный вариант получается
бд это понятно через прочность или еще что у шмота или просто само по себе через переменные, но бд - тоже косой выход
так что очень прошу еще раз что там по функции просто подсчитать голдкост
типа function GetItemGoldCost takes item returns integer
чтобы принимала предмет и возвращала его цену
в этот раз сразу себе в "основной справочник" всю инфу скину, если получу точную информацию, в идеале готовую функцию, а не "наводку"
вот вроде была где-то полезная "наводка" на адрес, что ли, мб у меня получилось бы самостоятельно составить функцию, но ща я и этой "наводки" не могу отыскать, только вот тот изврат с магазинами продажей и сверкой золота а его не хочу, хочу мемхаком голдкост предмета получать
заранее благодарю
0
23
5 лет назад
0
ClotPh, а зачем мемхак если можете узнать сколько потратил например при продаже узнаем текуший монет и записиваем или за убиства записиваем все у игрока, при покупке сверяем данные и текуший монету и узнаете сколько стоит даже бд не надо
0
21
5 лет назад
0
JMCode, это все равно намного менее удобно + при продаже нужно еще "расходы" всякие учитывать
2
8
5 лет назад
2
Вот такой вопрос. Можно ли менять текстуру интерфейса во время игры?
0
16
5 лет назад
0
нет, для этого нужно иметь возможность сбросить кэш и перерисовать весь интерфейс, подобной магией не владею
2
32
5 лет назад
Отредактирован quq_CCCP
2
Хук на событие - Юнит успешно завершает атаку.
код
  unit array GlobalUnitArrayForDataPassing
    integer pGlobalUnitArrayForDataPassing=0
 
function PresetSomeArray takes nothing returns nothing
   
    set GlobalUnitArrayForDataPassing[1]=null
    set GlobalUnitArrayForDataPassing[1099]=null
    return
endfunction
 
function TypecastUnitArray takes nothing returns nothing
    local integer GlobalUnitArrayForDataPassing
endfunction
//# +nosemanticerror
function GetUnitArrayAddress takes nothing returns integer
    return GlobalUnitArrayForDataPassing
endfunction
 
function OnAttackDamageCalculationHook takes nothing returns nothing
    local integer isource=GetDataFromDataArray1(65)
    local integer itarget=GetDataFromDataArray1(66)
    local integer result=GetDataFromDataArray1(68)
    if result==1 or SimulatedAttackCounter>0 then
//  in case if result==0 we forced this attack via trigger, but have to push the target manually then
        set tt_unit1=GetDataFromUnitArray(3)//source
        set tt_unit2=GetDataFromUnitArray(4)//target
        if HaveSavedHandle(MHT,GetHandleId(tt_unit1),GetHandleId(tt_unit2)) then
            call ExecuteFunc("AttackReadyToGoInit")
        else
            if GetDataFromDataArray1(67)=='item' then//targettype
                set tt_widget1=tt_unit2
                call ExecuteFunc("ItemAttackReadyToGoInit")
            endif
        endif
    endif
endfunction
 
function InitAttackDamageCalculationHook takes integer pTriggerHandle returns nothing
    local integer old1=RMem(pMeleeAttackCatcher)
    local integer old2=RMem(pMeleeAttackCatcher+4)
    local integer oldprotection = ChangeOffsetProtection(pMeleeAttackCatcher,8,0x40)
//call echo("jook "+Int2Hex(pReservedMemoryForMeleeAttackHook))
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+0]=0x30498B60
    set Memory[pReservedMemoryForMeleeAttackHook/4+1]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+2]=0xE80B8900
    call WMem(pReservedMemoryForMeleeAttackHook+5,DataArray1Address+260)// source address
    set Memory[pReservedMemoryForMeleeAttackHook/4+3]=(GameDLL+0x2DCC40)-(pReservedMemoryForMeleeAttackHook+12)-4
    set Memory[pReservedMemoryForMeleeAttackHook/4+4]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+5]=0x61038900
    call WMem(pReservedMemoryForMeleeAttackHook+17,pGlobalUnitArrayForDataPassing+12)// source GlobalUnitArrayForDataPassing[3]
    set Memory[pReservedMemoryForMeleeAttackHook/4+6]=0x6C798160
    set Memory[pReservedMemoryForMeleeAttackHook/4+7]=0xFFFFFFFF
    set Memory[pReservedMemoryForMeleeAttackHook/4+8]=0xC1833a74
    set Memory[pReservedMemoryForMeleeAttackHook/4+9]=0x0000E86C
    set Memory[pReservedMemoryForMeleeAttackHook/4+10]=0xC88B0000
    call WMem(pReservedMemoryForMeleeAttackHook+38,(GameDLL+0x4786B0)-(pReservedMemoryForMeleeAttackHook+38)-4)
    set Memory[pReservedMemoryForMeleeAttackHook/4+11]=0x000000B8
    set Memory[pReservedMemoryForMeleeAttackHook/4+12]=0x8B088900
    call WMem(pReservedMemoryForMeleeAttackHook+45,DataArray1Address+264)//66 target address
    set Memory[pReservedMemoryForMeleeAttackHook/4+13]=0x1C5B8B19
    set Memory[pReservedMemoryForMeleeAttackHook/4+14]=0x00BBD3FF
    set Memory[pReservedMemoryForMeleeAttackHook/4+15]=0x89000000
    call WMem(pReservedMemoryForMeleeAttackHook+59,DataArray1Address+268)//67 target type
    set Memory[pReservedMemoryForMeleeAttackHook/4+16]=0x00E89003
    set Memory[pReservedMemoryForMeleeAttackHook/4+17]=0xBB000000
    call WMem(pReservedMemoryForMeleeAttackHook+67,(GameDLL+0x2DCC40)-(pReservedMemoryForMeleeAttackHook+67)-4)
    set Memory[pReservedMemoryForMeleeAttackHook/4+18]=pGlobalUnitArrayForDataPassing+16//4 target handle
    set Memory[pReservedMemoryForMeleeAttackHook/4+19]=0x00BB0389
    set Memory[pReservedMemoryForMeleeAttackHook/4+20]=0xC7000000
    call WMem(pReservedMemoryForMeleeAttackHook+79,DataArray1Address+272)//68 result
    set Memory[pReservedMemoryForMeleeAttackHook/4+21]=0x00000103
    set Memory[pReservedMemoryForMeleeAttackHook/4+22]=0x0BEB9000
    set Memory[pReservedMemoryForMeleeAttackHook/4+23]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+24]=0x0003C700
    call WMem(pReservedMemoryForMeleeAttackHook+93,DataArray1Address+272)//68 result
    set Memory[pReservedMemoryForMeleeAttackHook/4+25]=0x61000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+26]=0x90909060
    set Memory[pReservedMemoryForMeleeAttackHook/4+27]=0x00000068
    set Memory[pReservedMemoryForMeleeAttackHook/4+28]=0x0000B800
    call WMem(pReservedMemoryForMeleeAttackHook+27*4+1,pTriggerHandle)
    set Memory[pReservedMemoryForMeleeAttackHook/4+29]=0xD0FF0000
    call WMem(pReservedMemoryForMeleeAttackHook+28*4+2,pTriggerExecute)
    set Memory[pReservedMemoryForMeleeAttackHook/4+30]=0x6104C483
    set Memory[pReservedMemoryForMeleeAttackHook/4+31]=0x8B575651
    set Memory[pReservedMemoryForMeleeAttackHook/4+32]=0xB8BE8BF1
    set Memory[pReservedMemoryForMeleeAttackHook/4+33]=0x8B000002
    set Memory[pReservedMemoryForMeleeAttackHook/4+34]=0x00ACBE84
    set Memory[pReservedMemoryForMeleeAttackHook/4+35]=0x84030000
    set Memory[pReservedMemoryForMeleeAttackHook/4+36]=0x0000A0BE
    set Memory[pReservedMemoryForMeleeAttackHook/4+37]=0x8C860300
    set Memory[pReservedMemoryForMeleeAttackHook/4+38]=0x8B000000
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+39]=0x00008C8E
    set Memory[pReservedMemoryForMeleeAttackHook/4+40]=0x988E8900
    set Memory[pReservedMemoryForMeleeAttackHook/4+41]=0xC7000000
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+42]=0x00008C86
    set Memory[pReservedMemoryForMeleeAttackHook/4+43]=0x00000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+44]=0xBE8C8B00
    set Memory[pReservedMemoryForMeleeAttackHook/4+45]=0x00000094
    set Memory[pReservedMemoryForMeleeAttackHook/4+46]=0x88BE948B
    set Memory[pReservedMemoryForMeleeAttackHook/4+47]=0xE9000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+48]=GameDLL + 0xC697E - (pReservedMemoryForMeleeAttackHook/4+48)*4 - 4
   
    set Memory[pMeleeAttackCatcher/4]=0xE9E9E9E9
    set Memory[pMeleeAttackCatcher/4+1]=0x90909090
   
    call WMem(pMeleeAttackCatcher + 1, pReservedMemoryForMeleeAttackHook - pMeleeAttackCatcher - 5 )
   
    call ChangeOffsetProtection(pMeleeAttackCatcher,8,oldprotection)
   
   
//  pushad
//mov ecx,[ecx+30]
//mov ebx,13455E1C
//mov [ebx],ecx
//call Game.dll+2DCC40
//mov ebx,1824008C
//mov [ebx],eax
//popad
//pushad
//cmp [ecx+6C],FFFFFFFF
//je 177F8918
//add ecx,6C
//call Game.dll+4786B0
//mov ecx,eax
//mov eax,13455E20
//mov [eax],ecx
//mov ebx,[ecx]
//mov ebx,[ebx+1C]
//call ebx
//mov ebx,13455E24
//mov [ebx],eax
//nop
//call Game.dll+2DCC40
//mov ebx,18240090
//mov [ebx],eax
//mov ebx,13455E28
//mov [ebx],00000001
//nop
//jmp 177F8923
//mov ebx,13455E28
//mov [ebx],00000000
//popad
//pushad
//nop
//nop
//nop
//push 00101D61
//mov eax,Game.dll+3C3F40
//call eax
//add esp,04
//popad
//push ecx
//push esi
//push edi
//mov esi,ecx
//mov edi,[esi+000002B8]
//mov eax,[esi+edi*4+000000AC]
//add eax,[esi+edi*4+000000A0]
//add eax,[esi+000000B0]
 
//mov ecx,[esi+b0]
//mov [esi+bc],ecx
//mov [esi+b0],0
//
//mov ecx,[esi+edi*4+00000094]
//mov edx,[esi+edi*4+00000088]
//jmp Game.dll+C697E
 
endfunction
 
//mmehack init
set pReservedMemoryForMeleeAttackHook = pCallFastCallWith1Args + 35000//+200
 
//main
set pGlobalUnitArrayForDataPassing=RMem(GetUnitArrayAddress() +0xC)
set t=CreateTrigger()
    call TriggerAddAction(t,function OnAttackDamageCalculationHook)
    call InitAttackDamageCalculationHook(GetHandleId(t))
Вдруг кому то еще пригодится.
0
32
5 лет назад
0
так и что нам это даст? мы получим нормальное событие юнит атакован?
0
16
5 лет назад
0
срабатывает в момент подсчета урона с атаки, можно редактировать кол-во урона через стандартные абилки атаки, например. это именно событие "снаряд вот вот ща полетит". У меня используется для подсчета миссов, критов и т.п.
0
1
5 лет назад
0
quq_CCCP, может готовую карту-пример скинешь? потому что некоторых функций которые есть тут в мем хаке нету, по крайней мере которые есть на сайте или на гитхабе
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.