Перезарядить отдельную абилу (втч геройскую) можно так: запомнить ее уровень и равкод в переменные, сремувить ее (геройская ремувится, только она там, по-моему, остаётся в списке возможных для выучивания и попадает в невыученные, но это никто заметить не успеет), немедленно вернуть, задать бывший уровень. Работает отлично.
А как перезарядить отдельный предмет, не перезаряжая всего остального?

 function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
        local integer pAbility = 0

        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 ReadRealMemory( pAbility+0x134 ) != 0 or ReadRealMemory( pAbility+0x138 ) != 0 then
                call WriteRealMemory( pAbility+0x134,0 )
                call WriteRealMemory( pAbility+0x138,0 )
            endif
            
            set Memory[pReserverdIntArg1 / 4] = SetRealIntoMemory(cd)
            call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
            return IsAbilityOnCooldown( pAbility )
        endif
        return false
    endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
очень просто - StartAbilityCooldown ( unit, id, -1.00 ), функцию я прикладывал в теме про мемхак, как и проверку на фатал блинка.
21
Тогда если не лень, кинь плз сюда ссылку на пост с рабочим не фаталящим втч на блинках StartAbilityCooldown, чтобы мне по всей теме там не искать
32
Принятый ответ
 function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
        local integer pAbility = 0

        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 ReadRealMemory( pAbility+0x134 ) != 0 or ReadRealMemory( pAbility+0x138 ) != 0 then
                call WriteRealMemory( pAbility+0x134,0 )
                call WriteRealMemory( pAbility+0x138,0 )
            endif
            
            set Memory[pReserverdIntArg1 / 4] = SetRealIntoMemory(cd)
            call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
            return IsAbilityOnCooldown( pAbility )
        endif
        return false
    endfunction
Чтобы оставить комментарий, пожалуйста, войдите на сайт.