Добавлен , опубликован
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
ClotPh, нужно пилить быструю синхронизацию данных, но на jass через GameChache скорость синхронизации непредсказуема...
30
Эмм, если это единственное, что, по-вашему, делает отлов мыши бесполезным в мультиплеере, то намекну, что это не проблема =)
Но, если честно, куда больше хочется что-то типа такого иметь возможность делать:
ForceUIKeyBJ(Player(0), "Mouse_1");
21
Clamp, ну запили function GetMouseXOfPlayer takes player returns real, если не проблема и не жалко
30
если не проблема и не жалко
Как доберусь до этого у себя - запилю.
Алсо, я так понимаю, что через хак узнаются screen-координаты. Это, конечно, здорово для всяких интерфейсов, но что насчёт world-координат?
32
Clamp, клик курсора или что под курсором уже выложили, есть функции..
30
клик курсора или что под курсором уже выложили, есть функции..
В посте не вижу, листать 6 страниц комментов с кусками кода без форматирования - то ещё удовольствие. Не мог бы ты просто скопипастить сюда функцию с адресами актуальными?
32
Clamp, xgm.guru/p/100/183738 - это че под курсором за виджет, а про перемещение было на хайве...
30
quq_CCCP, если только такое работает, то проще трекейблы использовать =/
Но спасибо энивей.
32
Clamp, кстати вот обновленный мемхак а так же новые и обновленные функции:
Пока что все не разобрал и не заставил работать все в куче, нужно будет довырезать мусор и dota only код.
Тестмап с основными либами работает исправно.
Загруженные файлы
4
Делал карту с этими мышками, отловом кнопок всех. Задержка есть где-то в 0.2-0.3 сек в мультиплеере
32
Daniil18, ну без задержки никак, синхронизация занимает время, хорошо если немного, но задержка между игроками это вещь такая непостоянная...
21
Не пойму, уже есть мышка для мультиплеера? Обновленный мемхак мной пока не скачивался, но если она там есть, то мб стоит посмотреть... Даже с задержкой...
32
Новый баг, нельзя запускать в кулдаун стандартные блинки "AEbl' (скачек), вылетит с фаталом. Ждем фикса.
20
Не припоминаю чтобы кто-то говорил об этом, но дабы AdicParser не крашился, попутно удаляя все комментарии (что приводит к удалению директив pjass) и конфликту с хаком, после "//! nocjass" должна быть хотя бы одна пустая строчка(возможно одна пустая строчка в конце всего юзерского кода, я без понятия.).
Для приложения следующая версия компилится нормально (см. приложение)
Загруженные файлы
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 часа протестить руки не дойдут.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.