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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
5
Всем привет. Обновил хак, теперь при сохранении показывает 4 ошибки: Index missing for array variable l__bytecode, как лечить?
set i=RMem((l__bytecode)) INLINED!!
32
pjass какой? Вначале темы прикреплен нужный.
32
Ну не знаю, у меня все сохраняется и работает. Попробуйте дважды сохранить карту и запустить, мб баг.
20
Я тут добрался до
function AddUnitMovespeedBonus takes unit u, real r returns nothing
И обнаружил что этот бонус подвержен погрешности как и прочие вычисления с флоатом. Операции нужно производить с числами определенной точности(хотя мне кажется что 0.0900000 будет воспринято как 0.09) или где-то прячется нативная функция округления MS'а?
32
Diaboliko, там же тупо ресстояние за тик таймера, лич его правил на прямую, но тогда юнит начинает бегать во круг точки т.к расстояние за тик таймера слишком большое, юниту кажется что он не может дойти до точки. Там и стоит проверка, до миллионных же никто не будет рассчитывать дистанцию.
20
quq_CCCP:
Diaboliko, там же тупо ресстояние за тик таймера, лич его правил на прямую, но тогда юнит начинает бегать во круг точки т.к расстояние за тик таймера слишком большое, юниту кажется что он не может дойти до точки. Там и стоит проверка, до миллионных же никто не будет рассчитывать дистанцию.
Ты путаешь с
function SetUnitCurrentMSper32 takes integer convertedHandle, real r returns nothing
32
Diaboliko, ну а бонус это тоже дистанция. Там наверняка деление на тик таймера и проверка на мин. значение
20
quq_CCCP:
Diaboliko, ну а бонус это тоже дистанция. Там наверняка деление на тик таймера и проверка на мин. значение
Я не понимаю куда ты клонишь. Бонус - аддитивно стакающаяся величина, даваемая тем же Безумием или Аурой Выносливости.
Код, которым пытался вычислить число знаков после запятой самого бонуса
globals
    constant real arginc = 0.10001
    constant real argexit = 0.90009
endglobals

function xxx takes nothing returns boolean
    local real r
        set  r = arginc
        loop
            exitwhen r == argexit
            call AddUnitMSBonus(gg_unit_uaco_0002, r)
            set  r = r + arginc
        endloop
        set  r = -arginc
        loop
            exitwhen r == -argexit
            call AddUnitMSBonus(gg_unit_uaco_0002, r)
            set  r = r -arginc
        endloop
    return false
endfunction

function Trig_zxcxc_Actions takes nothing returns nothing
    local real r
    local integer i = 0
    local trigger t = CreateTrigger()
        call TriggerAddCondition( t, Condition(function xxx))
        call BJDebugMsg(R2S(GetUnitMoveSpeed(gg_unit_uaco_0002)))
        loop
            call TriggerEvaluate(t)
        exitwhen i == 1000
        set  i = i + 1
        endloop
        call BJDebugMsg(R2S(GetUnitMoveSpeed(gg_unit_uaco_0002)))
    set  t = null
    return
endfunction

//===========================================================================
function InitTrig_zxcxc takes nothing returns nothing
    set gg_trg_zxcxc = CreateTrigger()
    call TriggerRegisterTimerEvent( gg_trg_zxcxc, 3., false )
    call TriggerAddAction( gg_trg_zxcxc, function Trig_zxcxc_Actions )
endfunction
Для чисел с N числом знаков после запятой выдал следующие значения конечного MS(начальный = 220)
8 (0.10000001) - 219.475
7 (0.1000001) - 219.685
6 (0.100001) - 219.685
5 (0.10001) - 219.475
Как к этому относиться - не представляю.
А протестив на 0.111... и 0.999... получилось
8 - 219.685
7 - 219.685
6 - 219.580
5 - 219.475
4 - 219.475
3 - 219.685
2 - 219.475
1 - 219.475
Так что без округления, по-видимому, не обойтись.
Я ведь верно понимаю что
I2R(R2I(currentBonus * 10^x))*10^-x
корректно "округляет" число до знака x после запятой?
20
Предыдущий вопрос решился формулой
	I2R( R2I( current_speed_taken_from_memory_and_converted_into_real + speed_bonus + 0.5 ) ) * 0.0001
Новый трабл:
Что возвращает GetUnitAbility(whichUnit, abilityId)? Логично предположить что адрес, но в ближайшие 24 часа протестить руки не дойдут.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.