,

Хак на память Warcraft3

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


Просмотров: 49 941



» Лучшие комментарии


quq_CCCP #351 - 2 года назад 2
Такс небольшое дополнение к функционалу мемхака
SomnusUltima #352 - 2 года назад 0
Обязятельно ли мемхак инизиализировать после 1 сек ??? или можно сразу инизиализация???
а его инициализировать надо? я просто нуб полный. Я ниче такого не делал и функции работают и так. Ну там установка урона,хп, армора. Может поэтому у меня после потимизера карта не хостится в мультиплеере?
quq_CCCP #353 - 2 года назад 0
Daniil18, в этой наработке вам ненужно ломать себе голову, скопировали папку из тестовой карты и все работает. Там авто инииализация, таймером.
Чтобы не убить маин после оптимизаторов.
Diaboliko #354 - 2 года назад 0
Никто не интересовался, часом, разницей между 'Absk' и другими способностями по части инстант каста без остановки движения? Особенно по части таргетных абилок(хотя можно ловить приказ и эмулировать каст абилки, но тогда релевантным становится вопрос о продвижении по списку команд в очереди приказов)
DracoL1ch #355 - 2 года назад 2
работа скиллов и все их фиши записаны в виртуальной таблице, там около доxyz обработчиков, которые еще и не знаешь, что делают вообще. это никто не разберет, думаю
ClotPh #356 - 2 года назад (отредактировано ) 0
Что по редактированию и считыванию полей абилок "Длительность воздействия: герой" и "Длительность воздействия: нормальная"?
Просто DracoL1ch же как-то cdn.dota2.com/apps/dota2/images/items/combo_breaker_lg.png делать надо?
DracoL1ch #357 - 2 года назад 0
да любое поле можно редактировать, проблем не вижу
но здесь явно не так решается
ClotPh #358 - 2 года назад (отредактировано ) 0
DracoL1ch, а как?
но редактирование и считывание поля в любом случае было бы интересным
просто я самостоятельно все еще адреса не определяю
ClotPh #359 - 2 года назад 0
С гитхаба
function SetUnitGreenBonusDamage takes unit u, integer i returns nothing
set Memory[GetUnitAttackAbility(u)/4 + 0xAC/4]=i
endfunction
У меня изменения почему-то происходят не с зеленым уроном, а с белым
/////////
Upd: ну перепроверено - благо хоть считается бонусный урон нормально, а вот при попытке задать зеленый у меня почему-то меняется белый на заданное значение зеленого
DracoL1ch #360 - 2 года назад 0
есть такое, зеленые цифры нельзя задавать, они пересчитываются постоянно, и при несовпадении переливают недостачу в белое
ScorpioT1000 #361 - 2 года назад 0
Они ведь вычисляются в режиме реального времени. Я уж не говорю про то, что по сети всё сломается.
ClotPh #362 - 2 года назад 0
ScorpioT1000, что сломается? Мной использована, допустим, функция SetUnitGreenBonusDamage - присчитать текущий бонусный урон и добавить, скажем, 20. В синглплеере эти 20 добавляются к белому. Что будет в сетевой?
Десинк? Но почему? Ведь юнит-то изменяется глобально.
Лаги? Но ведь операция одноразовая...
/
крч, ладно, ппц, выпилена эта функция, раз она все равно норм не действует и фактически белый меняет, можно не отвечать
по старинке зеленый многлвльными абилами на прелоаде буду и/или там еще систему по идее можно запилить как с увеличением макс хп через предметную, мб будет пахать
quq_CCCP #363 - 2 года назад (отредактировано ) 0
Ну только по старинке, абилками на урон.
а абилкам когтей мы вроде пока не умеем динамически менять бонусы, что тоже жаль.
ClotPh #364 - 2 года назад 0
Ладно, зел дамаг проехали, подскажите плз адреса полей для абилок длительность воздействия герой и длительность воздействия нормальная, желательно в формате старого мемхака
DracoL1ch #365 - 2 года назад 2
синхронизация здесь отличная
таблица верна для любого скилла с 4 или меньше уровнями, иначе нужно брать ссылками
офсеты вон, dur = 0x60/4 будут
ClotPh #366 - 2 года назад 0
function GetUnitHPRegen takes unit u returns real
return GetUnitHPRegenForAddress(ConvertHandle(u))
endfunction
все давно хотелось спросить, что точно это считает
что поле из РО хп регена и что в него аналогичная функция пишет - это ок, давно понятно
а если там реген апгрейдом добавлен?
а если с ауры идет?
а если баффом каким-то?
а если какое-нить омоложение мишек лечит?
DracoL1ch #367 - 2 года назад 0
всё, что в игре идет как реген, пишется в регенерацию (капитан очевидность)
ClotPh #368 - 2 года назад 0
DracoL1ch, ну апгрейдом понятно, идет.
А хил с заклинания? Если вот накинули омоложение, то его хил будет считаться хп регеном этого юнита на время действия омоложения?
DracoL1ch #369 - 2 года назад 0
понятия не имею, легко же тестится)
ClotPh #370 - 2 года назад 0
Эксплуататоры хреновы )
pro100master #371 - 2 года назад 2
Тестировал просто его прибавяет значение регена а потом отнимут регена
ClotPh #372 - 2 года назад 0
pro100master, ну то есть омоложение реген дает.
ClotPh #373 - 2 года назад 0
Блин, вечно у меня кэш в мозгах очищается... вроде задавался уже вопрос... Что по поводу gold cost'а предметов?
DracoL1ch #374 - 2 года назад 0
ClotPh #375 - 2 года назад 0
так это ж не мх, а система, и, по-моему, точки утекают (да, можно отфиксить, это понятно)
по мх поля нет?
quq_CCCP #376 - 2 года назад 0
ClotPh, насколько помню для дефолтных итемов работают нативки из common AI.
ClotPh #377 - 2 года назад 0
quq_CCCP, а дефолтные мне зачем
вообще в крайнем случае та система подойдет после убирания утечек точек, но все-таки если чтение с поля голдкоста шмотки есть, это в разы удобнее
ClotPh #378 - 1 год назад 0
Это зафаталило:
call SetUnitBaseDamage ( u5, GetUnitBaseDamage(GetTriggerUnit()) + GetUnitGreenBonusDamage(GetTriggerUnit()) )
call SetUnitAttackSpeed ( u5, GetUnitAttackSpeed(GetTriggerUnit()) )
u5 в данном случае - даммик, у которого в РО стоит, что атаки вообще нет.
Из-за этого?
Просто нужно было силу и скорость атаки задать не для того, чтобы он атаковал, а чтобы с нее числа посчитать именно как от него...
quq_CCCP #379 - 1 год назад 0
Аатака и перемещение это такие способности а не просто настройки в РО. не удивительно что фаталило, код ищет абилку атаки у юнита чтобы сменить урон (а атаки то нету), по этому проверяй есть ли 'Aatk' у юнита или 'Amov' если собрался что то менять в перемещении юнита.
DracoL1ch #380 - 1 год назад 0
Ну надо думать, если там проверки не стоит на существование абилки атаки, то конечно же вылетит)
ClotPh #381 - 1 год назад 0
DracoL1ch, вообще такие проверки неплохо бы в новейшие версии мемхака сразу в функции впилить, если они еще не
ScorpioT1000 #382 - 1 год назад 0
ClotPh, DracoL1ch, это может повлиять на производительность. Я бы лучше обернул в новые функции. С постфиксом "Safe" =)
quq_CCCP #383 - 1 год назад 0
ScorpioT1000, Эх ждем третью версию мемхака, значительно доработанную.
ClotPh #384 - 1 год назад 0
Появилась упоротая идея создать героя-художника с атакой, рассчитывающейся не по обычным правилам, а от манарегена. Если юниту 100 раз в секунду переписывать силу атаки, ничего же не взорвется? =)
Steal nerves #385 - 1 год назад 0
quq_CCCP, ждем
quq_CCCP #386 - 1 год назад 0
ClotPh, ну фпс раза в два просядет..
раз 5 в сек более чем достаточно...
Maniac_91 #387 - 1 год назад 0
ClotPh, думаю, достаточно будет обновлять немного быстрее, чем идёт перезарядка атаки. Ну или в соотношении 2 к 3 (обновление по времени как 2/3 КД). Пока идёт КД, он же атаковать не будет.
ClotPh #388 - 1 год назад 0
Maniac_91, quq_CCCP, спс за идеи, подумаю
но таймер там на подсчет мана регена все равно будет не менее, чем 0.1 сек., потому что оно же там будет считать разницу между тем, что было, и тем, что стало, просто getmpregen с мемхака не тянет, т. к. есть же триггерные всякие замуты и т. п., и в такой системе НАДО, чтобы атака часто обновлялась, потому что, допустим, реснет он с абилы предмета или от помощи союзника несколько сот маны - система приплюсует это в мп реген и сделает ему атаку ненормальную, чем чаще обновления, тем меньше вероятность, что он с этим проатаковать успеет
Maniac_91 #389 - 1 год назад 0
ClotPh, когда мана прибавляется не от регена (от зелий, например), можно же триггерно это прибавление вычесть из переменной (или прибавить, смотря какая система используется).
ClotPh #390 - 1 год назад 0
Maniac_91, ты предлагаешь для всех триггерных и нетриггерных добавлений маны бд писать?
Проще уж просто подсчитывать периодом
В принципе там еще можно продумать, что, н-р, +400 маны за 0.1 секунды это явно с 99% вероятностью НЕ реген был, особенно если он не повторился такой в следующие 0.1 секунды, но это уже опять свои заморочки, пока что выходит, что проще каждые доли секунды сверять значения и разницу рассчитывать
Бтв так-то само по себе на производительность это офк влияет, но не так уж сильно, 4-5 таких способностей одновременно варкрафт даже с 0.01 держит спокойно, а пропорционально увеличению периода и больше держать может, вопрос был больше про конкретно функцию, сильно ли она ресурсотребовательная относительно большинства других и само по себе не страшно ли так часто в память лезть
Maniac_91 #391 - 1 год назад (отредактировано ) 0
ClotPh, да не, БД тут не нужна. Достаточно 1-й переменной и отлов прибавления маны. Например, переменная М (реальная). Периодический триггер рассчитывает реген, как (мана юнита минус М), после чего устанавливает М = мана юнита.
А когда мана юнита меняется (применение заклинания или зелья маны), нужно менять М на такое же значение, чтобы разница рассчитывались от изменённого количества, а не просто маны юнита.
Компа с редактором под рукой нет, не проверял на практике.
ClotPh #392 - 1 год назад 0
Maniac_91, так про периодический переподсчет и перезапись переменной это понятно, я так в подобных ситуациях и делаю. Мне вот все равно непонятно, как ты собираешься отлавливать "применение заклинания или зелья маны"? Ладно, допустим, изменение маны при всех своих кастах смотреть еще можно. А если там союзник на тебя восстановление маны кастанул?
Короче, тема не туда пошла, ответ получен, спасибо
Maniac_91 #393 - 1 год назад 0
ClotPh, ты прав насчёт базы данных - с базой легче. А где-то же была возможность узнать манакост применяемой способности? Тогда всё проще. Но отлавливать всё же придётся, иначе пострадает точность расчёта.
Отлов: применение зелья: юнит использует предмет; применение заклинания - юнит завершает (или начинает - не помню, когда ману снимают); если союзник прибавляет ману - добавить к М количество прибавляемой маны (считать по уровню способности).
Извиняюсь за оффтоп, но мне нужно было ответить - возможно, кому-то это пригодится =)
ClotPh #394 - 1 год назад 0
Maniac_91, манакост узнается мемхаком
но конкретно здесь впутывать еще касты и манакосты уже слишком сложно = истины в этом нет
////
а без мемхака узнать можно тем же замером маны до и после каста, но по понятным причинам будут некоторые погрешности
Maniac_91 #395 - 1 год назад 0
ClotPh, хорошо, не будем усложнять систему ради незначительных изменений =)
pro100master #396 - 1 год назад 0
пф а не проше ли узнать значение регена маны если значение добавить к основному мп то есть
герой имеет 50 мп + 3 мп итог 53 потом расчитиваем за время если зелье дал больше чем 53 который в скором не регенрнули то ловите события что было восполнено мп зельями а не реген
ClotPh #397 - 1 год назад 0
pro100master, да это что в лоб, что по лбу по отношению к тому, что обсуждалось выше
дополнительные проверки ежесекундно че было и че стало... а вдруг это ему не зелье на несколько секунд далось, а просто навсегда какая-то абилка ему повысила мп реген на +2 в секунду? Или он вообще как-то сразу 3 уровня получил и мп реген от инты стал резко выше?
вообще на самом деле по-хорошему теперь, когда мемхак считает мп реген, имеет смысл вообще все триггерные и нетриггерные добавки восстановления маны сделать только на изменение этого значения, то же и с хп регеном - тогда проблем не будет - но это долго и много переписывать - но в перспективе возможно
ClotPh #398 - 1 год назад (отредактировано ) 0
O_O
А как вообще проверить, на перезарядке ли конкретная способность конкретного юнита? Казалось, что это давно есть - а нихрена.
Мне понадобилось при определенных условиях сымитировать каст способности: запустить кулдаун абилы по ее кулдауну, отнять ману у кастера по манакосту, применить ее эффект (ну тупо триггерная часть перекопирована). Это все можно, а как проверить, в кд она или нет?! Ведь без такой проверки абила будет всегда имитировать каст при необходимых условиях = да. Хоть 10 раз подряд!
function IsAbilityOnCooldown takes integer z returns boolean
return IsFlagBitSet(Memory[(z+0x20)/4],512)
endfunction
Вот это я вообще не понимаю, что это. Юнит-то где?
По подсказкам мемхака смутно понятно, что проверяется последняя такая скастованная способность, что ли... Но мне так не подходит, будут баги при одинаковых героях с этой способностью.
quq_CCCP #399 - 1 год назад 2
Она берет адресс абилки у юнита, т.е GetUnitAbility( unit, abilid) вернет число, смотрим что оно выше 1, тогда проверяем этой функцией в кд ли абилка, отмечу что данная функция возвращает буль а не кол-во сек. до конца кулдауна, если вам нужно время оставшегося до готовности абилки, есть другая функция GetAbilityCurrentCooldown или как то так.
А кстати есть новый мх на 1.28+
Разбираем его принципы работы...
ClotPh #400 - 1 год назад 0
//////
Возможно ли поменять иконку у конкретной абилы конкретного юнита, чтобы у всех остальных иконка осталась той же, а rawcodes способностей были одинаковые?
Дело в том, что неплохо было бы для геройских аватаров иметь иконки способностей, окрашенные в другие цвета или вообще изменённые, но ради этого делать копии способностей и заносить их во все системы (триггеры, автоматические изучения и т. д.) явно слишком много, да и РО окончательно треснет от этих копий.