Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Наработка
Версия Warcraft:
1.26 и ниже
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
0
21
7 лет назад
0
Как-то не так пересохраняю.
До пересохранения все работает.
После пересохранения (без изменений) - только эта функция и отрубается.
Экспериментирую со включением/выключением галок в JNGP, пока уже нашелся вариант, при котором при пересохранении вообще карта перестает работать =)
Можно, конечно, реально тупо файл вшивать не через WE, как драколич делает. Но это пока жестковато для меня... Хотя в не столь далеком будущем вполне возможно...
0
32
7 лет назад
0
Из новостей:
Способности: Буран, Целительная волна имеют нестандартную структуру и их нельзя запустить в кулдаун функцией StartAbilityCooldown.
Ибо им нужно занести кд, функцией SetAbilityCD.
Возможно существуют еще такие способности.
0
21
7 лет назад
0
Вообще порно с Еленой Берковой.
Короче, попробовалось сделать так: вынуть из карты darkowlom'а файл war3map.j через mpqeditor и переимпортировать его на его же место. Не знаю, что в итоге произошло, но карта и запустилась снова без проблем, и стала пересохраняться нормально. В процессе галочки JNGP включались/выключались разные, так и не знаю, то повлияло, или это.
Всем спасибо.
*****************
В общем, "для чайников" мой обновленный вариант ниже. Строка кода нормальная была. Просто не работала, теперь точно такая же работает.
Для импорта моего варианта по идее хватает следующего:
  • Иметь последний JNGP
  • Просто скопировать в свою карту кастом код и единственный триггер из моей в папке Return Bug.
В сабже уже протестировано (с подсказками):
  • Изменение белой и зеленой атаки и их подсчет
  • Изменения манакоста способностей и их подсчет (изменения на конкретный лвл конкретной абилы)
  • Изменения перезарядок способностей и их подсчет (изменения на конкретный лвл конкретной абилы)
PS Ятп верно, что отрицательная перезарядка = фатал? После этого геморроя чекать уже ппц неохота.
Загруженные файлы
0
16
7 лет назад
Отредактирован DracoL1ch
0
зачем тебе вообще может понадобиться отрицательная перезарядка? но нет, отрицательный кд просто сбросит текущий кд, как и 0.
>>Способности: Буран, Целительная волна имеют нестандартную структуру и их нельзя запустить в кулдаун функцией StartAbilityCooldown.
>>Ибо им нужно занести кд, функцией SetAbilityCD.
пофиксил
0
21
7 лет назад
0
Еще раз спс. Про перезарядку - просто узнать, не стоит ли беспокоиться при ее уменьшении о проверке, не получится ли меньше 0 фатал.
С такими функциями, кстати, -wtf мод пилится значительно проще и правильнее, ведь, строго говоря, на самом деле (хз как сейчас, раньше в оффдоте было так) попросту при применении любого спелла или способности сбрасывались все перезарядки и обновлялась мана через 0.01 сек., а не "все спеллы не имели перезарядки и мановой стоимости".
При таком подходе тот же антимаг сосет и т. п.
А с таким все просто: при применении любой способности задать ей манакост 0, перезарядку 0. И зшбс. (Это уже ПОЧТИ правильно. В идеале сразу через бд обнулить их у всех способностей, но польза будет незначительная, а геморроя много)
А уж героев-то сколько можно придумать на манакостах и перезарядках абил - не перечесть. Так, будем играться дальше...
1
32
7 лет назад
1
  function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
        local integer pAbility = 0
        if whichUnit == null or GetUnitAbilityLevel( whichUnit, abilityId  ) < 1 or cd == 0.00  then
            return false
        endif
        set pAbility = GetUnitAbility(whichUnit, abilityId)
        if pAbility < 1 then
            return false
        else
            if ReadRealMemory(pAbility+0x134)==-1 and ReadRealMemory(pAbility+0x138)==-1 then
                call WriteRealMemory(pAbility+0x134,0)
                call WriteRealMemory(pAbility+0x138,0)
            endif
            set Memory[pReserverdIntArg1 / 4] = SetRealIntoMemory(cd)
            call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
            return IsAbilityOnCooldown( pAbility )
        endif
        return false
    endfunction
Вот пофикшенная функция кулдауна, теперь она может запускать в кулдаун буран и цепи молний. (по прежнему фаталит если попытаться запустить в кулдаун пассивку)
Отрец. кулдаун кстати сбрасывает перезарядку.
11
16
7 лет назад
11
На хайве вшили функционал хака в редактор
1
21
7 лет назад
1
Круто, но что-то у меня опять все ошибки начинают с начала вылезать, которые были.

Пока сделан бэкап до своего JNGP + своей тест-карты с кастом кодом + 1 триггером, это уже не сложно импортировать, все там у меня уже точно норм работает и норм пересохраняется.
Но все равно +, т. к. склоняюсь к тому, что это на моей стороне наркомания.
1
21
7 лет назад
Отредактирован awesomesk1ll
1
Подгруз своих .dll из mpq карты уже сделали для чайников?
п.с. Что мертво - умереть не может.
1
29
7 лет назад
1
awesomesk1ll, ну смотри, функцию распаковки из mpq я видел, функцию загрузки dll я тоже видел, так что вперед)
1
13
7 лет назад
Отредактирован ENAleksey
1
awesomesk1ll, да, здесь нет ничего сложного, для начала экспортируем dll из карты, а потом загружаем её с помощью LoadLibraryA. Сейчас скину карту с загрузкой моей библиотеки, в которой реализован Widescreen Fix.

Скачать (поддерживаются версии 1.26a и 1.27а).
Правда, я сделал инициализацию библиотеки с помощью вызова экспортируемой функции из dll, чтобы передать в неё версию варкрафта, но это можно делать и внутри библиотеки: вызывать только LoadLibraryA, а всё остальное делать в теле функции DllMain.
Загруженные файлы
0
4
7 лет назад
0
Возможно ли с помощью хака сделать что-то типо Preloader'а?
0
32
7 лет назад
0
abidin:
Возможно ли с помощью хака сделать что-то типо Preloader'а?
Возможно и уже реализовано, создавай хоть тхт, хоть exe, хоть dll. Правда их сначала нужно написать... Но тем не менее создавать файлы можно, хотя можно было и раньше, правда не так удобно.
0
4
7 лет назад
0
quq_CCCP, можно уточнить твои контакты , чтобы отдельно поговорить на эту тему?
0
32
7 лет назад
0
abidin, Нет, я своими контактами не торгую!
Пиши лс.
2
4
7 лет назад
2
Мне не нравится организация связи на XGM.
1
32
7 лет назад
Отредактирован quq_CCCP
1
Функции для смены уровня баффов:
function GetBuffLevel takes integer pBuff returns integer 
    if pBuff < 1 then
        return 0
    endif
    return Memory[(pBuff+0xb0)/4] + 1
endfunction

function SetBuffLevel takes integer pBuff, integer level returns nothing
     if pBuff < 1 or level < 1 then
        return 
    endif
    set Memory[(pBuff+0xb0)/4] = level -1
endfunction
Меняет уровень баффа, влияет только на визуальный эффект баффа (уровень в описании баффа), уровень будет отображаться только у многоуровневых баффов.
Можно узнать уровень баффа, будет несомненно полезно для триггерных баффов, которые дают ауры.
А вот функци которые задают длительность баффа.
    local integer  pBuff = GetUnitAbility( u, 'B00A' ) + 0x90  

    call WriteRealMemory(ReadRealMemory(pBuff)+0x4,SetRealIntoMemory(текущее время + 15.00)) // задаёт длительность
    call WriteRealMemory(ReadRealMemory(pBuff)+0x8,SetRealIntoMemory(текущее время  + 10.408)) // Задает время после которого бафф начнёт мигать
Жаль что нормально выудить игровое время не получается, поэтому юзаем таймер который мы запускаем при старте карты на 99999999999.00 сек., и по нему мы будем узнавать текущее время, который кстати будет отставать относительно игрового примерно на 0.408 сек.
0
20
7 лет назад
0
quq_CCCP, а как по дефолту обстоит дело с миганием, не смотрел? Просто зачем менять, если оно и по дефолту адекватное :>
0
32
7 лет назад
0
Diaboliko:
quq_CCCP, а как по дефолту обстоит дело с миганием, не смотрел? Просто зачем менять, если оно и по дефолту адекватное :>
У ауры как ты сделаешь мигание? Речь о баффах аур, а не тогоч то и так работает....
По дефолту мигает если длительность больше 10 и осталось до конца меньше 10.
0
16
7 лет назад
0
ты задаешь не время мигания, а длительность бафа (псевдо). если она больше константы, которая по-умолчанию 10, то если до окончания действия меньше 10 секунд, баф начнет мигать. разные вещи как бы
0
32
7 лет назад
0
DracoL1ch:
ты задаешь не время мигания, а длительность бафа (псевдо). если она больше константы, которая по-умолчанию 10, то если до окончания действия меньше 10 секунд, баф начнет мигать. разные вещи как бы
Спецом проверил, если не задавать время - мигать бафф ауры не будет, так что время мигания.
0
6
7 лет назад
Отредактирован Tumart
0
А что насчет тулов векса? После прогона мапы с использованием сжатия имен варик ее больше не воспринимает. Поковырялся в коде скорее все это из-за: 1. Удаляет функции типа
function Test takes nothing returns nothing
local integer l__test
endfunction
  1. Также переносит строку после кавычек " где должно быть "\n" "\r" возможно где-то еще есть ошибки.
Можно ли что-то с этим сделать?
И еще один вопрос: Для наличия таких функций как отлов событий мыши(нажатие/отпускание кнопок), скрытие стандартного интерфейса необходимо запускать отдельный пакет или это можно как то сделать при помощи РБ?
И есть ли где то информация по списку функций из WarcraftMemHackHelper.dll
0
32
7 лет назад
0
Ау, там низя переименовывать stand
а как не удалять функции и переменные я выкладывал
достаточно их вызвать с помощью таймера который никогда не истечёт.
0
6
7 лет назад
0
quq_CCCP, спасибо помогло :). По поводу остальных вопросов можешь что-то сказать?
0
32
7 лет назад
0
Там через ретурн баг все, хз функции мыши есть в списке на гитхабе или хайве. Создавать и подгружать свои библиотеки тоже можно, недавно выкладывали пример, сам это не юзаел ничего сказать не могу...
А что ты делаешь?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.