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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
32
7 лет назад
Отредактирован quq_CCCP
0
Насколько помню, записть листа абилок была нестабильна, норм работает только чтение...
 function GetHeroAbilityFromList takes unit uHero, integer list returns integer
        set LastConvertedHandle = ConvertHandle( uHero )
    
        if IsUnitType( uHero, UNIT_TYPE_HERO ) and LastConvertedHandle > 1 and list > 0 then
            return ReadMemory( ReadMemory( LastConvertedHandle + 496 ) + 240 + 4 * list )
        endif

        return 0
    endfunction
LastConvertedHandle - адресс героя, 496 адрес абилки 'Aher' -герой, в её полях лежат способности для изучения, ну а 240 + каждые 4 байта это адреса абилок. т.е 244 это первая абилка в списке, 248 вторая и так далее....
0
21
7 лет назад
0
quq_CCCP, так, жопа. Почему-то при попытке воспользоваться возникает фатал.
Задаю рандомной переменной, например
set i = GetHeroAbilityFromList(u6,1)
и сразу фатал еррор.
Пробовалось и через функцию под "старый" мемхак, и через новый (RMem и WMem вроде уже импортированы).
Кстати, когда u6 - НЕ герой, всё равно фатал, хотя по идее должен был бы быть ноль...
0
32
7 лет назад
0
ClotPh, Еще можно проверить ReadRealMemory вместо ReadMemory
Ну а фатал при выборе негероя - навреное ConvertHandle Кривая... там больше и фаталить нечему...
0
21
7 лет назад
0
quq_CCCP, так-так, а, конверты хэндла в мемхаках же разные, один для функций другого не подходит? Мб именно сейчас дело в этом...
Я пока для начала просто уже прочесть абилку пытаюсь и вывести результат на экран...
0
32
7 лет назад
0
Еще одно но, адреса абилок в оригинале записываются как F8/FC/100/104
0
21
7 лет назад
0
quq_CCCP, это мне не понятно
У меня там в какой-то момент вроде выводилось целочисленной в текст на экране что-то, но вместо равкода абилки какая-то хня из многих цифр, я хочу равкод выкопать
0
32
7 лет назад
0
ClotPh, ро код и есть много цифр на экране
Чтобы был ро код как в редакторе - Id2String()
0
21
7 лет назад
0
quq_CCCP, так, минутку, то есть равкод я не откопаю?
Ок, сейчас хоть цифры попробую снова... жопа =/
А, во, понятно, ок
0
16
7 лет назад
0
Ни в коем случае не используйте записывание строки через мемхак
Речь о том, чтобы заменить ссылку на строку где-либо своей ссылкой
Хотя смысл и не теряется, но у сборщика мусора явно едет крыша, и без рестарта вк будут рандомно выпадать краши. Так что пока без обновлений строк где-либо вообще
0
21
7 лет назад
Отредактирован Кет
0
DracoL1ch, ну песец, а на что я тогда трачу сегодняшний день =/
Может мне кто-нить тогда хоть посоветовать, как правдами и неправдами с мемхаком и без словить абилу и пропихнуть ее выучивание герою??? Мне нужно, чтобы он чужие абилы мог тырить и обязательно через выучивание, иначе будет ппц геморройная бд
просто у меня другие скиллы многие регают свои триггеры только через выучивание конкретно для выучившего
для оптимизации
т. е. если абилу просто дать, она ниче делать не будет
//////
так, тем временем у меня уже строка ловится и не фаталит (по "классическому" мемхаку уже, не люблю слово "старый", да, у меня там небольшая путаница с конвертхэндл функцией была, они ж для старого и нового мх разные, откат сделан).
1095263859
так, id2string все равно достает не понятно что, не равкод, а какие-то
\x00000041...
sic!!! Ну так или иначе прорыв.
ТАК. Ну вот для начала. Вот ДЕЙСТВУЮЩИЕ (!!!) функции для "классического" мемхака. Все-таки это какая-никакая, а победа ))) Равкод не отловить, но меняют абилу исправно.

function GetHeroAbilityFromList takes unit uHero, integer list returns integer
set LastConvertedHandle = ConvertHandle( uHero )
    
if IsUnitType( uHero, UNIT_TYPE_HERO ) and LastConvertedHandle > 1 and list > 0 then
return ReadMemory( ReadMemory( LastConvertedHandle + 496 ) + 240 + 4 * list )
endif

return 0
endfunction

function SetHeroAbilityFromList takes unit uHero, integer list, integer abi returns nothing
set LastConvertedHandle = ConvertHandle( uHero )
    
if IsUnitType( uHero, UNIT_TYPE_HERO ) and LastConvertedHandle > 1 and list > 0 then
 call WriteMemory( ReadMemory( LastConvertedHandle + 496 ) + 240 + 4 * list, abi )
endif

endfunction
//////////////
Теперь чо там про фаталы... Лично потестирую... Фаталы ведь ловились в "новом" мемхаке? Тупость, но может быть, это влияет?
А если я быстренько махну поле выучиваемых абил, сразу выучу одну и сразу обратно перепишу поле?
2
7
7 лет назад
2
ClotPh:
quq_CCCP, так, минутку, то есть равкод я не откопаю?
Ок, сейчас хоть цифры попробую снова... жопа =/
если я тебя правильно понял, то тебе нужна библиотека Ascii
пример использования
local integer id = 'hfoo'
local string raw = A2S(id) // raw == "hfoo" (строка)
id = S2A(raw) // id == 'hfoo' (число)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.