Хотел кд запустить, но эта функция даёт Fatalку, что делать???
	function StartAbilityCD takes integer pAbility, real cd returns nothing
		set Memory[ pReserverdIntArg1 / 4 ] = CleanInt( RealToIndex( cd ) )
		call CallThisCallWith2Args( GameDLL + 0x126990, pAbility, pReserverdIntArg1 ) // pStartAbilityCD
	endfunction

Как насчет юзать её нормальную версию из новых сборок мемхака?

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 ) )
        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

Либо
function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
local integer pAbility = 0
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
    call WMem(pReservedIntArg1 , SetRealIntoMemory(cd))
    call this_call_2(pStartAbilityCD , pAbility , pReservedIntArg1)
    set bRes = IsAbilityOnCooldown(pAbility)
endif
return bRes
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
Как насчет юзать её нормальную версию из новых сборок мемхака?

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 ) )
        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

Либо
function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
local integer pAbility = 0
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
    call WMem(pReservedIntArg1 , SetRealIntoMemory(cd))
    call this_call_2(pStartAbilityCD , pAbility , pReservedIntArg1)
    set bRes = IsAbilityOnCooldown(pAbility)
endif
return bRes
Принятый ответ
Ответы (7)
15
quq_CCCP, Проблема в том, что карту редактирую через war3map.j и там уже есть мемхак) А как правильно поменять его в таком случае я не знаю. А в старой версии мемхака функции по тиму RMem, WMem называются по другому и некоторых не хватает.
32
LastUchiha, это не проблема а чепуха какая то, все одно и то же, просто думаем головой.
15
quq_CCCP, Удалить старые глобалки и функции и поставить новые? Это всё?
32
LastUchiha, я бы взял мемхак 1.6 к примеру и перенес, хз правда для чего именно он вам нужен. но откуда код функции выше?
Во первых нет определения версии игры, во вторых проверки входных аргументов, в теме с мемхаком обсуждалось раз 10.
Не все выложенные функции - рабочие, многие демонстрационные и не годятся для игровых карт из за изьянов.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.