Раньше использовал перезарядку способностей на второй версии и всё работало прекрасно
Старый рабочий код
function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
        local integer pAbility = 0
        local integer offset1
        local integer offset2
        local boolean bRes = false
        
        if GetUnitAbilityLevel( whichUnit, abilityId ) == 0 or cd == 0.00 then
            return bRes
        endif
        
        set pAbility = GetUnitAbility( whichUnit, abilityId )
        
        if pAbility < 1 then
            return bRes
        else
            set offset1 = RMem( pAbility + 0x134 )
            set offset2 = RMem( pAbility + 0x138 )
          
            if offset1 > 0 or offset1 < 0 or offset2 > 0 or offset2 < 0 then
                call WMem( pAbility + 0x134, mR2I( cd ) )
                call WMem( pAbility + 0x138, mR2I( 10.00 ) )
                if not InGame then
                    call BJDebugMsg( "Start Cooldown WARNING!" )
                    call BJDebugMsg( "ADRESS-VAL1-VAL2" )
                    call BJDebugMsg( Int2Hex(pAbility)+" - "+Int2Hex(offset1)+" - "+Int2Hex(offset2))
                    call BJDebugMsg( "abil-"+Id2String(abilityId) +" owner-"+ Int2Hex(pAbility)  )
                endif
            endif
            set Memory[pReserverdIntArg1 / 4] = mR2I( cd )
            call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
            set bRes =  IsAbilityOnCooldown( pAbility )
            call WMem( pAbility + 0x134, offset1 )
            call WMem( pAbility + 0x138, offset2 )
        endif
        return bRes
    endfunction
Теперь же последние 2 месяца работаю только на первой версии и вот мне понадобилась функция StartAbilityCD кинулся а она то не работает как нужно использую так:
local integer abil=GetUnitAbility(unit, 'A010')
call StartAbilityCD(abil,4)
Только вместо запуска перезарядки с указанным интервалом, кд способности просто сбрасывается в 0 вместо 4х секундной, я уже не смогу перейти на второй мемхак где всё работало и извращаться с экзумацией снова не хочу, довольно

Принятый ответ

Мб переписать нужный тебе функционал под мх второй версии?
Я перенес минимум функций, т.к их вопервых овер дохрена, вовторых переносил самые популярные и простые, надо дллок тогда было.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
16
5 лет назад
0
конвертация во float потеряна? я хз
0
32
5 лет назад
0
оффсет на функцию запуска кд верный?
set pStartAbilityCD = (GameDLL + 0x050B70) GameDLL + 0x126990
Вот тут две версии, первая от IceFog вторая от DracoL1ch, обе работают, 1.26а
То в старой версии часть абилок баговали...
1
32
5 лет назад
1
Set pStartAbilityCD = GameDLL + 0x62D4C0 27
set pStartAbilityCD = GameDLL + 0x126990 26
Для Init 26 ффсет совпадает, если это так работает, а что это такое эти Иниты?
0
32
5 лет назад
0
Ну перепиши функцию старта абилки, 0х126990 Адресс функции restore mana are, от абилки восстановление маны, оно требует структуру и кол-во маны, поэтому стоят проверки на оферты 0х134 и 0х138, другой оффсет не требует ничего, и ненужны в теории эти проверки.
1
32
5 лет назад
1
quq_CCCP, понимаешь в первом мемхаке она вообще по другому выглядит
	function StartAbilityCD takes integer pAbility, real cd returns nothing
		set Memory[pReserverdIntArg1/4] = cleanInt(realToIndex(cd))
		call CallThisCallWith2Args(pStartAbilityCD,pAbility, pReserverdIntArg1)
	endfunction
0
32
5 лет назад
0
Ну потому что для второго мемхака, я ее писал, и тестировал черт знает сколько раз...
1
32
5 лет назад
1
quq_CCCP, ладно попробую переписать под первый
0
32
5 лет назад
0
Мб переписать нужный тебе функционал под мх второй версии?
Я перенес минимум функций, т.к их вопервых овер дохрена, вовторых переносил самые популярные и простые, надо дллок тогда было.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.