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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
18
6 лет назад
0
ClotPh, когда мана прибавляется не от регена (от зелий, например), можно же триггерно это прибавление вычесть из переменной (или прибавить, смотря какая система используется).
0
21
6 лет назад
0
Maniac_91, ты предлагаешь для всех триггерных и нетриггерных добавлений маны бд писать?
Проще уж просто подсчитывать периодом
В принципе там еще можно продумать, что, н-р, +400 маны за 0.1 секунды это явно с 99% вероятностью НЕ реген был, особенно если он не повторился такой в следующие 0.1 секунды, но это уже опять свои заморочки, пока что выходит, что проще каждые доли секунды сверять значения и разницу рассчитывать
Бтв так-то само по себе на производительность это офк влияет, но не так уж сильно, 4-5 таких способностей одновременно варкрафт даже с 0.01 держит спокойно, а пропорционально увеличению периода и больше держать может, вопрос был больше про конкретно функцию, сильно ли она ресурсотребовательная относительно большинства других и само по себе не страшно ли так часто в память лезть
0
18
6 лет назад
Отредактирован Maniac_91
0
ClotPh, да не, БД тут не нужна. Достаточно 1-й переменной и отлов прибавления маны. Например, переменная М (реальная). Периодический триггер рассчитывает реген, как (мана юнита минус М), после чего устанавливает М = мана юнита.
А когда мана юнита меняется (применение заклинания или зелья маны), нужно менять М на такое же значение, чтобы разница рассчитывались от изменённого количества, а не просто маны юнита.
Компа с редактором под рукой нет, не проверял на практике.
0
21
6 лет назад
0
Maniac_91, так про периодический переподсчет и перезапись переменной это понятно, я так в подобных ситуациях и делаю. Мне вот все равно непонятно, как ты собираешься отлавливать "применение заклинания или зелья маны"? Ладно, допустим, изменение маны при всех своих кастах смотреть еще можно. А если там союзник на тебя восстановление маны кастанул?
Короче, тема не туда пошла, ответ получен, спасибо
0
18
6 лет назад
0
ClotPh, ты прав насчёт базы данных - с базой легче. А где-то же была возможность узнать манакост применяемой способности? Тогда всё проще. Но отлавливать всё же придётся, иначе пострадает точность расчёта.
Отлов: применение зелья: юнит использует предмет; применение заклинания - юнит завершает (или начинает - не помню, когда ману снимают); если союзник прибавляет ману - добавить к М количество прибавляемой маны (считать по уровню способности).
Извиняюсь за оффтоп, но мне нужно было ответить - возможно, кому-то это пригодится =)
0
21
6 лет назад
0
Maniac_91, манакост узнается мемхаком
но конкретно здесь впутывать еще касты и манакосты уже слишком сложно = истины в этом нет
////
а без мемхака узнать можно тем же замером маны до и после каста, но по понятным причинам будут некоторые погрешности
0
18
6 лет назад
0
ClotPh, хорошо, не будем усложнять систему ради незначительных изменений =)
0
23
6 лет назад
0
пф а не проше ли узнать значение регена маны если значение добавить к основному мп то есть
герой имеет 50 мп + 3 мп итог 53 потом расчитиваем за время если зелье дал больше чем 53 который в скором не регенрнули то ловите события что было восполнено мп зельями а не реген
0
21
6 лет назад
0
pro100master, да это что в лоб, что по лбу по отношению к тому, что обсуждалось выше
дополнительные проверки ежесекундно че было и че стало... а вдруг это ему не зелье на несколько секунд далось, а просто навсегда какая-то абилка ему повысила мп реген на +2 в секунду? Или он вообще как-то сразу 3 уровня получил и мп реген от инты стал резко выше?
вообще на самом деле по-хорошему теперь, когда мемхак считает мп реген, имеет смысл вообще все триггерные и нетриггерные добавки восстановления маны сделать только на изменение этого значения, то же и с хп регеном - тогда проблем не будет - но это долго и много переписывать - но в перспективе возможно
0
21
6 лет назад
Отредактирован ClotPh
0
O_O
А как вообще проверить, на перезарядке ли конкретная способность конкретного юнита? Казалось, что это давно есть - а нихрена.
Мне понадобилось при определенных условиях сымитировать каст способности: запустить кулдаун абилы по ее кулдауну, отнять ману у кастера по манакосту, применить ее эффект (ну тупо триггерная часть перекопирована). Это все можно, а как проверить, в кд она или нет?! Ведь без такой проверки абила будет всегда имитировать каст при необходимых условиях = да. Хоть 10 раз подряд!
function IsAbilityOnCooldown takes integer z returns boolean
return IsFlagBitSet(Memory[(z+0x20)/4],512)
endfunction
Вот это я вообще не понимаю, что это. Юнит-то где?
По подсказкам мемхака смутно понятно, что проверяется последняя такая скастованная способность, что ли... Но мне так не подходит, будут баги при одинаковых героях с этой способностью.
2
32
6 лет назад
2
Она берет адресс абилки у юнита, т.е GetUnitAbility( unit, abilid) вернет число, смотрим что оно выше 1, тогда проверяем этой функцией в кд ли абилка, отмечу что данная функция возвращает буль а не кол-во сек. до конца кулдауна, если вам нужно время оставшегося до готовности абилки, есть другая функция GetAbilityCurrentCooldown или как то так.
А кстати есть новый мх на 1.28+
Разбираем его принципы работы...
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.