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

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

 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
0
32
7 лет назад
0
очень просто - StartAbilityCooldown ( unit, id, -1.00 ), функцию я прикладывал в теме про мемхак, как и проверку на фатал блинка.
0
21
7 лет назад
0
Тогда если не лень, кинь плз сюда ссылку на пост с рабочим не фаталящим втч на блинках StartAbilityCooldown, чтобы мне по всей теме там не искать
4
32
7 лет назад
4
 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
Принятый ответ
0
21
7 лет назад
0
Благодарю. Можно закрывать.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.