Я вот хз, про карты написано уже все что только можно, описано их устройство и устройство мпк архивов, спазлеры тоже разжёваны.
Если хотите чтобы вам взломали - ну это только за деньги мб кто и согласится..
Trickster, ну так будет 100р?
В карте испоганен заголовок и хешьтаблица и удалены данные об обьектах, поэтому она не открывается ничем кроме зезулы, но зезула не дает возможность редактировать файлы. Ну собственно я это дело снял, могу восстановить открываемость в редакторе..
Trickster, Это защита, чтобы её снять нужны познания в устройстве формата карт.
А так подобная защита очень примитивна, открыть такую карту и восстановить все в ручную не сложно, но долговато...
Trickster, Ну наверное на карте поставлена примитивная защита, снять её можно софтом, если хотите чтобы кто то вам ломанул карту и все восстановил в читабельный вид - вам наверное на сайт читеров, хотя и тут могут помоч...
Нельзя переделать стремительность, как и прочие дефолтные способности! Как она работает, так и будет, можно настроить лишь те параметры которые есть в редакторе обьектов у способности, а именно кулдауны, описания, уровни, стоймость маны, там иконки, урон\скорость\прочее.
Но нельзя сделать из безумия стремительность, а из стремительности стальной вихрь, механика способности и все дозволенные варианты её настроек описаны в движке игры и изменениям не подлежат.
Ige, нетак, фигню написал...
Методом тыка вам тут только фаталы ловить, нужен Cheat Engine и познание структуры триггеров, покуда у вас этого нету, можно не старатся, у драколича ушело на это больше года...
Пишите личу про смену урона, только он колупал и проверял это, возможно что урон вовсе не сменить с уровня jass. pro100master, Нужно еще понимать как там устроена структура и где прилеплен код к событию...
Ige, причем тут броня?
Чего за глупость, ты получаешь начальный урон до брони set DamageValues[DamageIncrementer]=mI2R(Memory[offset/4+0x10/4])//RMem(offset+0x10))
И GetEventDamage после, дальше в потоке триггера работай с юнитами как хочешь, зачем тебе адресса?
Ты дальше работаешь с юнитами в триггере, ненадо никаких конвертов юнитов, не говоря о том что это медленно, CallFastCallWith2Args(pGetUnitForAddress, addr, 0) заставляет игру выполнить внутринний алгоритм и рассчитать нам хендл по адресу + туча паразитных действий, которые ненужны совершенно.
Ige, еще раз, чтобы отловить урон нужен триггер, с событием юнит получает урон.
К нему цепляется функия из мемхака и читает данные в памяти, записывая в глобалки, все
Вот все работает... pro100master, блин, я толкую сударю об одном, он о другом...
Нафиг забудь call TestMissileHandlerWorker( ) и ничего там не пиши, все далай в триггере, в этой функции просто идет записть значений в глобалки, все там больше нечего делать, ок?
Ige, зачем вам конвертор? Вы в кондишине триггера или экшине эти данные возьмете, нах вам лезть в DamageHandler?
Когда триггер сработал в условии триггер берешь GetTriggerUnit(), GetEventDamageSource() и так далее, тип урона берешь из глобалок. в глобалки данные пишутся перед срабатыванием условий и действий триггера.
Ige, смотрим кат Сам хак
Там сама наработка, это хук на событие внутри движка.
Собственно нам потребуется триггер, функцией InitializeDamageHandler мы лезим в структуру триггерна и ставим коверкаем его чтобы мы могли получать нужные нам данные.
Массив - дота код, рассчитан на то что юнитов получающих урон будет овер дофига как и кол-во инстансов урона, таким образом он гарантирует что при срабатывании 1 триггера, во время его потока, данные полученные с помощью функций не перезапишутся. Т.е представь что ты юзаешь GetTriggerUnit() в потоке триггера, первый раз оно вернет одного юнита, второй раз другое? Тебе оно надо, массив это вроде фикс этого эффекта.
В потоке триггера (в кондишине) ты получаешь всех кого хочешь, а значение урона берешь из глобалок, все ок?
Оффсет это офсет, не трогай чего не понимаешь - Barrage missiles always have 0x8 == 0x10000000 call BJDebugMsg("Target" + Int2Hex(RMem(pDamageTarget))) адресс цели, не путать с хендлом и прочим говном, это адресс юнита в памяти игры, нужно для работы с адресом а не с юнитом. call BJDebugMsg(Int2Hex(RMem(RMem(RMem(pDamageEspData)+0x8)+0x0)))source адресс источника урона, тоже самое. call BJDebugMsg(Int2Hex(RMem(RMem(RMem(pDamageEspData)+0x8)+0x8)))proj or link onto something// адрес куда пишут флаги всякие орбы, или что то еще..
call BJDebugMsg(Int2Hex(RMem(RMem(RMem(pDamageEspData)+0x8)+0xC)))0x101 == ranged, 0x100 == melee адресс в котором хранится значение, 0x101, что означет что урон является уроном дальнего боя (UnitDamageTarget(a,b,100, false, true, null,null,null )), 0x100 урон от ближнего боя (UnitDamageTarget(a,b,100, true, false, null,null,null )) call BJDebugMsg("Damage:" + R2S(mI2R(RMem(RMem(RMem(pDamageEspData)+0x8)+0x10))))damage val кол-во урона без учета брони, сколько было на момент успешного завершения снаряда или указанно в настройках способности которая нанесла урон.
» WarCraft 3 / w3map Restorer
Если хотите чтобы вам взломали - ну это только за деньги мб кто и согласится..
» WarCraft 3 / 100р за помощь в вопросе. Не могу открыть карту в редакторе
В карте испоганен заголовок и хешьтаблица и удалены данные об обьектах, поэтому она не открывается ничем кроме зезулы, но зезула не дает возможность редактировать файлы. Ну собственно я это дело снял, могу восстановить открываемость в редакторе..
» WarCraft 3 / world editor при попытке сохранить карту все файлы удаляются
А так подобная защита очень примитивна, открыть такую карту и восстановить все в ручную не сложно, но долговато...
» WarCraft 3 / w3map Restorer
Если что от этой тулы защиту придумали почти сразу после её выхода...
» RenderEdge / [RenderEdge] Memory Hack
» Блог им. nvc123 / оптимизация вызова триггерных заклинаний
» WarCraft 3 / 100р за помощь в вопросе. Не могу открыть карту в редакторе
» WarCraft 3 / Как использовать редактор способностей, в редакторе объектов.
Но нельзя сделать из безумия стремительность, а из стремительности стальной вихрь, механика способности и все дозволенные варианты её настроек описаны в движке игры и изменениям не подлежат.
Ред. quq_CCCP
» WarCraft 3 / memhack utils functions
» WarCraft 3 / memhack utils functions
» WarCraft 3 / Атака (запуск снаряда)
» WarCraft 3 / Отслеживание порчи
» WarCraft 3 / Ловим урон с Мемхаком
Методом тыка вам тут только фаталы ловить, нужен Cheat Engine и познание структуры триггеров, покуда у вас этого нету, можно не старатся, у драколича ушело на это больше года...
Пишите личу про смену урона, только он колупал и проверял это, возможно что урон вовсе не сменить с уровня jass.
pro100master, Нужно еще понимать как там устроена структура и где прилеплен код к событию...
» WarCraft 3 / Ловим урон с Мемхаком
Чего за глупость, ты получаешь начальный урон до брони set DamageValues[DamageIncrementer]=mI2R(Memory[offset/4+0x10/4])//RMem(offset+0x10))
И GetEventDamage после, дальше в потоке триггера работай с юнитами как хочешь, зачем тебе адресса?
» WarCraft 3 / Ловим урон с Мемхаком
» WarCraft 3 / Ловим урон с Мемхаком
» WarCraft 3 / Ловим урон с Мемхаком
» WarCraft 3 / Ловим урон с Мемхаком
К нему цепляется функия из мемхака и читает данные в памяти, записывая в глобалки, все
» WarCraft 3 / Ловим урон с Мемхаком
Все там работает и GetTriggerUnit() и GetEventDamageSource()
» WarCraft 3 / Область сплэш атаки
» WarCraft 3 / Ловим урон с Мемхаком
pro100master, блин, я толкую сударю об одном, он о другом...
Нафиг забудь call TestMissileHandlerWorker( ) и ничего там не пиши, все далай в триггере, в этой функции просто идет записть значений в глобалки, все там больше нечего делать, ок?
» WarCraft 3 / Ловим урон с Мемхаком
» WarCraft 3 / Ловим урон с Мемхаком
Нахрена вам там понадобился юнит?
pro100master, Мб я что то не понимаю, что собрались делать то?
» WarCraft 3 / Ловим урон с Мемхаком
Когда триггер сработал в условии триггер берешь GetTriggerUnit(), GetEventDamageSource() и так далее, тип урона берешь из глобалок. в глобалки данные пишутся перед срабатыванием условий и действий триггера.
» WarCraft 3 / Ловим урон с Мемхаком
Там сама наработка, это хук на событие внутри движка.
Собственно нам потребуется триггер, функцией InitializeDamageHandler мы лезим в структуру триггерна и ставим коверкаем его чтобы мы могли получать нужные нам данные.
Массив - дота код, рассчитан на то что юнитов получающих урон будет овер дофига как и кол-во инстансов урона, таким образом он гарантирует что при срабатывании 1 триггера, во время его потока, данные полученные с помощью функций не перезапишутся. Т.е представь что ты юзаешь GetTriggerUnit() в потоке триггера, первый раз оно вернет одного юнита, второй раз другое? Тебе оно надо, массив это вроде фикс этого эффекта.
Оффсет это офсет, не трогай чего не понимаешь -
Barrage missiles always have 0x8 == 0x10000000
call BJDebugMsg("Target" + Int2Hex(RMem(pDamageTarget))) адресс цели, не путать с хендлом и прочим говном, это адресс юнита в памяти игры, нужно для работы с адресом а не с юнитом.
call BJDebugMsg(Int2Hex(RMem(RMem(RMem(pDamageEspData)+0x8)+0x0)))source адресс источника урона, тоже самое.
call BJDebugMsg(Int2Hex(RMem(RMem(RMem(pDamageEspData)+0x8)+0x8)))proj or link onto something// адрес куда пишут флаги всякие орбы, или что то еще..
call BJDebugMsg(Int2Hex(RMem(RMem(RMem(pDamageEspData)+0x8)+0xC)))0x101 == ranged, 0x100 == melee адресс в котором хранится значение, 0x101, что означет что урон является уроном дальнего боя (UnitDamageTarget(a,b,100, false, true, null,null,null )), 0x100 урон от ближнего боя (UnitDamageTarget(a,b,100, true, false, null,null,null ))
call BJDebugMsg("Damage:" + R2S(mI2R(RMem(RMem(RMem(pDamageEspData)+0x8)+0x10))))damage val кол-во урона без учета брони, сколько было на момент успешного завершения снаряда или указанно в настройках способности которая нанесла урон.