1)Если известен адрес по которому хранится тот или иной тип данных, то как можно по адресу получить этот тип даных? Допустим по адресу P записан юнит - как получить этого юнита, зная P?
2)Можно ли во время игры сменить позицию кнопки на панели кнопок?

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

а, я думал, ты хочешь узнать тип объекта по его адресу. конвертировать в джасс сложно, не минуту доставать, позже
globals
integer l__Int2Unit
integer pGetHandleIDStackCounter=GameDLL+0x3A8060//26
integer pConvertAddressToHandleId=GameDLL+0x430C80//26
endglobals
function setInt2Unit takes integer i returns nothing
set l__Int2Unit=i
return Prevents JassHelper from inlining this function
endfunction
function ConvertUnitAddressToHandleID takes integer address returns integer
local integer a=CallThisCallWith1Args(pGetHandleIDStackCounter,RMem(GameState))
return CallThisCallWith3Args(pConvertAddressToHandleId,a,address,0)
endfunction
function Typecast4 takes nothing returns nothing
local unit l__Int2Unit
endfunction
# +nosemanticerror
function I2Unit takes integer i returns unit
call setInt2Unit(ConvertUnitAddressToHandleID(i))
return l__Int2Unit
endfunction
не забудь уточнить, что ВСЕ используемые здесь адреса НЕ делены на 4, или умножай их сам, если делились. GameState вроде был разделен в паблике.
0
16
7 лет назад
0
  1. можно, но сложно
тип данных пишется в vtable объекта
function GetAgentType takes handle h returns integer
returns code of the handle's type
+w3u for unit, +tmr for timer, +trg for trigger, +arg for region, etc
check the type you may need yourself, Im not gonna write down all of those
local integer func = RMem(RMem(ConvertHandle(h))+0x1C)
return RMem(func)/0x100+RMem(func+4)*0x1000000
endfunction
конвертация адреса в хендл, который затем конвертируется в объект - сложнее
  1. есть в публичном же, SetAbilityButtonX/Y
0
5
7 лет назад
Отредактирован Lenivex
0
DracoL1ch:
  1. можно, но сложно
тип данных пишется в vtable объекта
function GetAgentType takes handle h returns integer
returns code of the handle's type
+w3u for unit, +tmr for timer, +trg for trigger, +arg for region, etc
check the type you may need yourself, Im not gonna write down all of those
local integer func = RMem(RMem(ConvertHandle(h))+0x1C)
return RMem(func)/0x100+RMem(func+4)*0x1000000
endfunction
конвертация адреса в хендл, который затем конвертируется в объект - сложнее
  1. есть в публичном же, SetAbilityButtonX/Y
1)Чёт сложно, что возвращает предложенная функция? Она возвращает число - тип? Как я это смогу использовать чтобы получить тип (получить как тип данных зная только адрес)
2)У меня только SetAbilityButtonX и она что то не работает (большинство функций не работает), где можно скачать последнюю версию Memory Hack?
1
16
7 лет назад
1
а, я думал, ты хочешь узнать тип объекта по его адресу. конвертировать в джасс сложно, не минуту доставать, позже
globals
integer l__Int2Unit
integer pGetHandleIDStackCounter=GameDLL+0x3A8060//26
integer pConvertAddressToHandleId=GameDLL+0x430C80//26
endglobals
function setInt2Unit takes integer i returns nothing
set l__Int2Unit=i
return Prevents JassHelper from inlining this function
endfunction
function ConvertUnitAddressToHandleID takes integer address returns integer
local integer a=CallThisCallWith1Args(pGetHandleIDStackCounter,RMem(GameState))
return CallThisCallWith3Args(pConvertAddressToHandleId,a,address,0)
endfunction
function Typecast4 takes nothing returns nothing
local unit l__Int2Unit
endfunction
# +nosemanticerror
function I2Unit takes integer i returns unit
call setInt2Unit(ConvertUnitAddressToHandleID(i))
return l__Int2Unit
endfunction
не забудь уточнить, что ВСЕ используемые здесь адреса НЕ делены на 4, или умножай их сам, если делились. GameState вроде был разделен в паблике.
Принятый ответ
0
5
7 лет назад
0
DracoL1ch:
а, я думал, ты хочешь узнать тип объекта по его адресу. конвертировать в джасс сложно, не минуту доставать, позже
globals
integer l__Int2Unit
integer pGetHandleIDStackCounter=GameDLL+0x3A8060//26
integer pConvertAddressToHandleId=GameDLL+0x430C80//26
endglobals
function setInt2Unit takes integer i returns nothing
set l__Int2Unit=i
return Prevents JassHelper from inlining this function
endfunction
function ConvertUnitAddressToHandleID takes integer address returns integer
local integer a=CallThisCallWith1Args(pGetHandleIDStackCounter,RMem(GameState))
return CallThisCallWith3Args(pConvertAddressToHandleId,a,address,0)
endfunction
function Typecast4 takes nothing returns nothing
local unit l__Int2Unit
endfunction
# +nosemanticerror
function I2Unit takes integer i returns unit
call setInt2Unit(ConvertUnitAddressToHandleID(i))
return l__Int2Unit
endfunction
не забудь уточнить, что ВСЕ используемые здесь адреса НЕ делены на 4, или умножай их сам, если делились. GameState вроде был разделен в паблике.
1)Выкидывает из игры. При включенном cJass говорит проблема в выводе l__Int2Unit - функция должна возвращать юнита пишет он.
2)Где можно скачать последнюю версию Memory Hack'а?
0
32
7 лет назад
0
Мемхак один, новые могут только оформленные функции, с cjass н еработает, дело в пасере, есть спец тема для этого так что все там.
xgm.guru/p/wc3/179535 вот тема на мемхак, готовый для импорта а функции лежать на хайве, самые новые ну или пишутся конкретными людьми и выкладываются в паблик.
0
5
7 лет назад
0
quq_CCCP:
Мемхак один, новые могут только оформленные функции, с cjass н еработает, дело в пасере, есть спец тема для этого так что все там.
xgm.guru/p/wc3/179535 вот тема на мемхак, готовый для импорта а функции лежать на хайве, самые новые ну или пишутся конкретными людьми и выкладываются в паблик.
Я знаю, что с cjass он не ладит. DracoL1ch писал, что перешёл от деления на 4, теперь использует другое. Также роясь по hive'ву набрёл на инструкцию к Memory Hack:
большинство функций отсутствует на гитхабе или же вообще не работают. Так вот та информация уже устарела как я понимаю. Поэтому и спрашиваю про последнюю версию, т.к. сам никак другую найти не могу
0
32
7 лет назад
0
Просто многие функции требуют доработок и внимания, в той теме что я скинул к примеру поправлен кд чаннелингов и кое чего другого.
Мемхак везде один, не тупите - разный только набор функций, вот и ищите нужные вам функции. Все что нужно сломанный масиив и ретурнбаг все остальное это функции для чего либо, увы у всех авторов свои представления об API мемхака и своя реализация тех или иных вещей, все и сразу вам никто не даст.
Lenivex, Что конкретно вас интересует и что не работает в тему о РБ задавайте вопросы.
Ну и самое главное не ко всем функциям есть комментарии касательно их ограничений, разобраны только самые популярные.
0
5
7 лет назад
0
quq_CCCP:
Просто многие функции требуют доработок и внимания, в той теме что я скинул к примеру поправлен кд чаннелингов и кое чего другого.
Мемхак везде один, не тупите - разный только набор функций, вот и ищите нужные вам функции. Все что нужно сломанный масиив и ретурнбаг все остальное это функции для чего либо, увы у всех авторов свои представления об API мемхака и своя реализация тех или иных вещей, все и сразу вам никто не даст.
Lenivex, Что конкретно вас интересует и что не работает в тему о РБ задавайте вопросы.
Ну и самое главное не ко всем функциям есть комментарии касательно их ограничений, разобраны только самые популярные.
говорю не только об Utils'ах, но и о самом Memory Hack, скорее всего большинство его функций тоже обновили. Сложно находить функции, да так чтобы они работали. Видел какие то новые с картами, но они включают в себя также новые функции. Так что найти новую (не говоря уже о том что даже не все на гидхабе работают) нужно найти все включающие её компоненты.
0
16
7 лет назад
0
всё, что лежит на гите, хотя бы тестировалось и как минимум работало в прошлом
0
29
7 лет назад
0
разве нельзя //!nocjass заюзать?
0
32
7 лет назад
Отредактирован quq_CCCP
0
Lenivex, Сам memory hack это I2C и Сломманый массив, все.
Остальное это реализация API тех функций которые есть в варкравте а так же новые, которые будут релизованы по средстам импорта библиотек.
Что конкретно вам нужно? Опишие.~Doc:
разве нельзя !nocjass заюзать?
Увы не помогает, cjass что то не то делает с мемхаком, да у меня вовсе с ним были одни проблемы, поэтому memhack == no cjass, уже лень было разбиратся что к чему, если у вас есть желания найти и исправить все конфликты пожалуйста, остальные пусть пишут на jass\vjass там все работает исправно, без вылетов на ровном месте (кое как разобрались)...
Ах да, совсем забыл -pjass.exe прикреплен не просто так в теме с мемхаком, с прочими версиями будут баги или карта вовсе не запустится, не забываем про это плз.
0
5
7 лет назад
0
Doc:
разве нельзя //!nocjass заюзать?
им то токо и пользуюсь
0
5
7 лет назад
0
quq_CCCP:
Lenivex, Сам memory hack это I2C и Сломманый массив, все.
Остальное это реализация API тех функций которые есть в варкравте а так же новые, которые будут релизованы по средстам импорта библиотек.
Что конкретно вам нужно? Опишие.~Doc:
разве нельзя !nocjass заюзать?
Увы не помогает, cjass что то не то делает с мемхаком, да у меня вовсе с ним были одни проблемы, поэтому memhack == no cjass, уже лень было разбиратся что к чему, если у вас есть желания найти и исправить все конфликты пожалуйста, остальные пусть пишут на jass\vjass там все работает исправно, без вылетов на ровном месте (кое как разобрались)...
Ах да, совсем забыл -pjass.exe прикреплен не просто так в теме с мемхаком, с прочими версиями будут баги или карта вовсе не запустится, не забываем про это плз.
На данный момент, нужно хотя бы чтобы работала функция, предложенная DracoL1ch'ем. У меня просто из игры выкидывает, если использовать в коде функцию I2Unit()
DracoL1ch:
а, я думал, ты хочешь узнать тип объекта по его адресу. конвертировать в джасс сложно, не минуту доставать, позже
globals
integer l__Int2Unit
integer pGetHandleIDStackCounter=GameDLL+0x3A8060//26
integer pConvertAddressToHandleId=GameDLL+0x430C80//26
endglobals
function setInt2Unit takes integer i returns nothing
set l__Int2Unit=i
return Prevents JassHelper from inlining this function
endfunction
function ConvertUnitAddressToHandleID takes integer address returns integer
local integer a=CallThisCallWith1Args(pGetHandleIDStackCounter,RMem(GameState))
return CallThisCallWith3Args(pConvertAddressToHandleId,a,address,0)
endfunction
function Typecast4 takes nothing returns nothing
local unit l__Int2Unit
endfunction
# +nosemanticerror
function I2Unit takes integer i returns unit
call setInt2Unit(ConvertUnitAddressToHandleID(i))
return l__Int2Unit
endfunction
не забудь уточнить, что ВСЕ используемые здесь адреса НЕ делены на 4, или умножай их сам, если делились. GameState вроде был разделен в паблике.
Выкидывает из игры при использовании I2Unit() в коде. Если я убираю эту функцию (всмысле не использую) то карту компилирует
Чтобы оставить комментарий, пожалуйста, войдите на сайт.