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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
6 лет назад
0
Clamp, ну даже если на производительность критично не повлияет, все равно это не оч правильно, там будет не один усиленный урон, а один большой и еще один маленький, и это все надо везде учитывать
В идеале должно быть все-таки, чтобы именно урон менялся
0
30
6 лет назад
0
Урон можно отменять вообще всегда, после чего наносить нужное количество.
0
32
6 лет назад
0
ClotPh, Там есть пару детектов урона на мемхаке, но первый ресурсоемкий, это присоска на глобальное событие виджит получил урон внутри движка и работа со всеми параметрами пока не сработали триггерны на урон, второй вариант - попроще но там только чтение всех параметро а не запись ну и пошустрее будет.
2
16
6 лет назад
Отредактирован DracoL1ch
2
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
0
21
6 лет назад
0
DracoL1ch, огромное спасибо, если что - отпишусь, но вроде все понятно
0
32
6 лет назад
0
Clamp:
ну никак не катит постоянно инвул давать и отхил делать с таймерами
С чего бы? Сделай универсальный метод и применяй, благо событие получения урона любым юнитом легко реализуемо.

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

    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
0
21
6 лет назад
0
quq_CCCP, смертью, диспелами, морфами такие сайленсы сбрасываются?
2
32
6 лет назад
2
ClotPh, нет, для этого нужно пилить триггер который за этим всем следит, у способностей за этим следит бафф - который и есть триггер, но внутригровой + имеющий доступ ко всем событиям движка.
2
16
6 лет назад
2
любое событие имеет колбек, у способностей есть колбеки практически на всё, так и обеспечивается диспел при смерти, например. А тут всё вручную, но это и не для простого тыканья.
0
21
6 лет назад
0
quq_CCCP, ну так это и хорошо, что нет, ок.
А способности патруля, атаки, движения и т. п. так можно "засайленсить"?
И если да, то при засайленсивании движения что будет и что вернет при запросе к скорости юнита?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.