Добавлен , опубликован
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
ClotPh, знаю точно что у лича есть функция свапа абилок, (механика взята от 'ANeg' - техника, пассивка механика,) она позволяет сменить одну абилку, другой. Про иконки хз, третья версия мх так и не опубликована, в текущей версии подобного не видел.
21
GetTriggerPlayerMouseX; takes nothing returns real
GetTriggerPlayerMouseY; takes nothing returns real
в 1.29 уже есть, прям по моему заказу, хорошо бы и в мх
21
quq_CCCP:
ClotPh, знаю точно что у лича есть функция свапа абилок, (механика взята от 'ANeg' - техника, пассивка механика,) она позволяет сменить одну абилку, другой. Про иконки хз, третья версия мх так и не опубликована, в текущей версии подобного не видел.
Т.е. на гитхабе выложена не текущая? Почему нет? Контрибюторов нет вообще? Почему? Слишком высокий уровень входа?
32
awesomesk1ll, на гитхабе первый мх, второй приложен в теме с детектом урона, функции пока особо не обновлялись, кроме отдельных случаев.
Мемхак тоже, третью версию пока никто не выложил, есть желаение перебрать все и протестить + выложить все с подробным описанием, пожалуйста.
Разработчиков мх и функций для оного мало интересует распространение сей наработки...
16
Я единственный активный контрибутор
Китайцы подрубили ЛУА и ничего через варик больше не делают, используют лишь код для инжекта либы
Остальные не осилили или делают втихую
Времени нет обновлять, но изменений множество
21
прям заставляете самостоятельно хакером становиться =)
21
/////////
Чет все не могу понять, казалось, что это давно было, но нихрена
Патч 1.29 пока еще не поставлю, хочу именно через мх
Есть урон, нужно именно увеличить/уменьшить/аннулировать его, хоть на значение, хоть в процентах
Через инвул, отхил, еще один дамаг я могу, но это все "не православно" и каждый способ имеет некоторые недостатки, и не применим будет т. к. речь о идее героя, который постоянно будет переназначать величины получаемого и наносимого урона остальным героям на абсолютно любой получаемый ими урон, так что там ну никак не катит постоянно инвул давать и отхил делать с таймерами и доп. дамагами и т. п.
как через мх именно действительно увеличить/уменьшить/аннулировать значение урона
я вижу, что функции типа есть
но че они делают и как ими пользоваться - вот именно в их случае НИХРЕНА не понятно!
30
ну никак не катит постоянно инвул давать и отхил делать с таймерами
С чего бы? Сделай универсальный метод и применяй, благо событие получения урона любым юнитом легко реализуемо.

Китайцы подрубили ЛУА и ничего через варик больше не делают
Можно поподробнее на этот счёт?
21
Clamp, ну даже если на производительность критично не повлияет, все равно это не оч правильно, там будет не один усиленный урон, а один большой и еще один маленький, и это все надо везде учитывать
В идеале должно быть все-таки, чтобы именно урон менялся
30
Урон можно отменять вообще всегда, после чего наносить нужное количество.
32
ClotPh, Там есть пару детектов урона на мемхаке, но первый ресурсоемкий, это присоска на глобальное событие виджит получил урон внутри движка и работа со всеми параметрами пока не сработали триггерны на урон, второй вариант - попроще но там только чтение всех параметро а не запись ну и пошустрее будет.
16
function SetGetEventDamage takes real r returns nothing
	local integer a=CallThisCallWith1Args(GameDLL+0x3C1D40,0)
	if a!=0 then
		set a=CallThisCallWith1Args(GameDLL+0x3C1D60,0)
		if a!=0 then
			call WMem(a+0x30,mR2I(r))
		endif
	endif
endfunction
21
DracoL1ch, огромное спасибо, если что - отпишусь, но вроде все понятно
32
Clamp:
ну никак не катит постоянно инвул давать и отхил делать с таймерами
С чего бы? Сделай универсальный метод и применяй, благо событие получения урона любым юнитом легко реализуемо.

Китайцы подрубили ЛУА и ничего через варик больше не делают
Можно поподробнее на этот счёт?
Ну есть китайская версия мемхака, она работает на всех патчей в отличии от нашей, но там сам хак запускается в потоке ИИ и подгружает дллку, все остальные функции мемхака реализованы через пару АИ нативок котрые берут строку, в строку пишется имя функции, через глобалку или другие аркументы передаются параметры, дллка перехватывает некоторые функции и делает некоторые действия, в самом китайском редакторе все это дело зашито так как в jngp v или c JASS, т.е выглядит как нативка, а потом интерпритируется при сохранении..
32
функции для работы с сайленсом, позволяют задать разные типы сайленса (от обычного безмолвия, то паузы, когда способности скрываются с карты комманд)

    set pAddSilenceOnAbility=GameDLL+0x052B60 // оффсет для 1.26
    set pRemoveSilenceFromAbility=GameDLL+0x052BC0 // оффсет для 1.26

	set pAddSilenceOnAbility = GameDLL + 0x3E9FA0 // оффсет для 1.27
    set pRemoveSilenceFromAbility = GameDLL + 0x3EE3C0 // оффсет для 1.27


    function AddSilenceToAbility takes integer a returns nothing
        if a > 0 then
            call CallThisCallWith3Args( pAddSilenceOnAbility, a, 0, 1 )
 //0 for hide, 1 for silence 
        endif
    endfunction
    
    function RemoveSilenceFromAbility takes integer a returns nothing
        if a > 0 then
            call CallThisCallWith3Args( pRemoveSilenceFromAbility, a, 0, 1 )
        endif
    endfunction
 
    function AddSilenceHideToAbility takes integer a returns nothing
        if a > 0 then
            call CallThisCallWith3Args( pAddSilenceOnAbility, a, 1, 1 )
        endif
    endfunction
 
    function RemoveSilenceHideFromAbility takes integer a returns nothing
        if a > 0 then
            call CallThisCallWith3Args( pRemoveSilenceFromAbility, a, 1, 1 )
        endif
    endfunction
21
quq_CCCP, смертью, диспелами, морфами такие сайленсы сбрасываются?
32
ClotPh, нет, для этого нужно пилить триггер который за этим всем следит, у способностей за этим следит бафф - который и есть триггер, но внутригровой + имеющий доступ ко всем событиям движка.
16
любое событие имеет колбек, у способностей есть колбеки практически на всё, так и обеспечивается диспел при смерти, например. А тут всё вручную, но это и не для простого тыканья.
21
quq_CCCP, ну так это и хорошо, что нет, ок.
А способности патруля, атаки, движения и т. п. так можно "засайленсить"?
И если да, то при засайленсивании движения что будет и что вернет при запросе к скорости юнита?
32
ClotPh, можно, что бывает при паузе? Ну там сало, текущий приказ будет выполнятся новый не отдать. Кнопки заблочены.
21
Так-так-так! А пассивную способность засайленсить можно, чтобы она действовать перестала?
Просто думаю про сильвер эдж... офк все равно триггерно придется кое-что с триг пассивками делать, но все же
16
каждая абилка реализует реакцию на сайленс индивидуально
21
DracoL1ch, хм, ладно, тогда лучше, как и планировалось буду по полю выучивания определять пассивки атакованного через то, что у них кд = 0 и все дизейблить для игрока, по истечению действия эджа енейблить обратно
только еще для триггерных оговорки в их триггерах сделать
16

function GetAbilityBaseID takes integer a returns integer
	return RMem(RMem(a+0x54)+0x30)
endfunction

function IsAbilityUsable takes integer a returns boolean
	return CallThisCallWith1Args(RMem(RMem(a)+0x1D8),a)==1 or (RMem(a+0x6C)!=0 and GetAbilityBaseID(a)=='ANcl')
	//always false for ANcl
endfunction
Чтобы оставить комментарий, пожалуйста, войдите на сайт.