Добавлен , опубликован
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
ClotPh, насколько помню для дефолтных итемов работают нативки из common AI.
21
quq_CCCP, а дефолтные мне зачем
вообще в крайнем случае та система подойдет после убирания утечек точек, но все-таки если чтение с поля голдкоста шмотки есть, это в разы удобнее
21
Это зафаталило:
call SetUnitBaseDamage ( u5, GetUnitBaseDamage(GetTriggerUnit()) + GetUnitGreenBonusDamage(GetTriggerUnit()) )
call SetUnitAttackSpeed ( u5, GetUnitAttackSpeed(GetTriggerUnit()) )
u5 в данном случае - даммик, у которого в РО стоит, что атаки вообще нет.
Из-за этого?
Просто нужно было силу и скорость атаки задать не для того, чтобы он атаковал, а чтобы с нее числа посчитать именно как от него...
32
Аатака и перемещение это такие способности а не просто настройки в РО. не удивительно что фаталило, код ищет абилку атаки у юнита чтобы сменить урон (а атаки то нету), по этому проверяй есть ли 'Aatk' у юнита или 'Amov' если собрался что то менять в перемещении юнита.
16
Ну надо думать, если там проверки не стоит на существование абилки атаки, то конечно же вылетит)
21
DracoL1ch, вообще такие проверки неплохо бы в новейшие версии мемхака сразу в функции впилить, если они еще не
38
ClotPh, DracoL1ch, это может повлиять на производительность. Я бы лучше обернул в новые функции. С постфиксом "Safe" =)
32
ScorpioT1000, Эх ждем третью версию мемхака, значительно доработанную.
21
Появилась упоротая идея создать героя-художника с атакой, рассчитывающейся не по обычным правилам, а от манарегена. Если юниту 100 раз в секунду переписывать силу атаки, ничего же не взорвется? =)
32
ClotPh, ну фпс раза в два просядет..
раз 5 в сек более чем достаточно...
18
ClotPh, думаю, достаточно будет обновлять немного быстрее, чем идёт перезарядка атаки. Ну или в соотношении 2 к 3 (обновление по времени как 2/3 КД). Пока идёт КД, он же атаковать не будет.
21
Maniac_91, quq_CCCP, спс за идеи, подумаю
но таймер там на подсчет мана регена все равно будет не менее, чем 0.1 сек., потому что оно же там будет считать разницу между тем, что было, и тем, что стало, просто getmpregen с мемхака не тянет, т. к. есть же триггерные всякие замуты и т. п., и в такой системе НАДО, чтобы атака часто обновлялась, потому что, допустим, реснет он с абилы предмета или от помощи союзника несколько сот маны - система приплюсует это в мп реген и сделает ему атаку ненормальную, чем чаще обновления, тем меньше вероятность, что он с этим проатаковать успеет
18
ClotPh, когда мана прибавляется не от регена (от зелий, например), можно же триггерно это прибавление вычесть из переменной (или прибавить, смотря какая система используется).
21
Maniac_91, ты предлагаешь для всех триггерных и нетриггерных добавлений маны бд писать?
Проще уж просто подсчитывать периодом
В принципе там еще можно продумать, что, н-р, +400 маны за 0.1 секунды это явно с 99% вероятностью НЕ реген был, особенно если он не повторился такой в следующие 0.1 секунды, но это уже опять свои заморочки, пока что выходит, что проще каждые доли секунды сверять значения и разницу рассчитывать
Бтв так-то само по себе на производительность это офк влияет, но не так уж сильно, 4-5 таких способностей одновременно варкрафт даже с 0.01 держит спокойно, а пропорционально увеличению периода и больше держать может, вопрос был больше про конкретно функцию, сильно ли она ресурсотребовательная относительно большинства других и само по себе не страшно ли так часто в память лезть
18
ClotPh, да не, БД тут не нужна. Достаточно 1-й переменной и отлов прибавления маны. Например, переменная М (реальная). Периодический триггер рассчитывает реген, как (мана юнита минус М), после чего устанавливает М = мана юнита.
А когда мана юнита меняется (применение заклинания или зелья маны), нужно менять М на такое же значение, чтобы разница рассчитывались от изменённого количества, а не просто маны юнита.
Компа с редактором под рукой нет, не проверял на практике.
21
Maniac_91, так про периодический переподсчет и перезапись переменной это понятно, я так в подобных ситуациях и делаю. Мне вот все равно непонятно, как ты собираешься отлавливать "применение заклинания или зелья маны"? Ладно, допустим, изменение маны при всех своих кастах смотреть еще можно. А если там союзник на тебя восстановление маны кастанул?
Короче, тема не туда пошла, ответ получен, спасибо
18
ClotPh, ты прав насчёт базы данных - с базой легче. А где-то же была возможность узнать манакост применяемой способности? Тогда всё проще. Но отлавливать всё же придётся, иначе пострадает точность расчёта.
Отлов: применение зелья: юнит использует предмет; применение заклинания - юнит завершает (или начинает - не помню, когда ману снимают); если союзник прибавляет ману - добавить к М количество прибавляемой маны (считать по уровню способности).
Извиняюсь за оффтоп, но мне нужно было ответить - возможно, кому-то это пригодится =)
21
Maniac_91, манакост узнается мемхаком
но конкретно здесь впутывать еще касты и манакосты уже слишком сложно = истины в этом нет
////
а без мемхака узнать можно тем же замером маны до и после каста, но по понятным причинам будут некоторые погрешности
18
ClotPh, хорошо, не будем усложнять систему ради незначительных изменений =)
22
пф а не проше ли узнать значение регена маны если значение добавить к основному мп то есть
герой имеет 50 мп + 3 мп итог 53 потом расчитиваем за время если зелье дал больше чем 53 который в скором не регенрнули то ловите события что было восполнено мп зельями а не реген
21
pro100master, да это что в лоб, что по лбу по отношению к тому, что обсуждалось выше
дополнительные проверки ежесекундно че было и че стало... а вдруг это ему не зелье на несколько секунд далось, а просто навсегда какая-то абилка ему повысила мп реген на +2 в секунду? Или он вообще как-то сразу 3 уровня получил и мп реген от инты стал резко выше?
вообще на самом деле по-хорошему теперь, когда мемхак считает мп реген, имеет смысл вообще все триггерные и нетриггерные добавки восстановления маны сделать только на изменение этого значения, то же и с хп регеном - тогда проблем не будет - но это долго и много переписывать - но в перспективе возможно
21
O_O
А как вообще проверить, на перезарядке ли конкретная способность конкретного юнита? Казалось, что это давно есть - а нихрена.
Мне понадобилось при определенных условиях сымитировать каст способности: запустить кулдаун абилы по ее кулдауну, отнять ману у кастера по манакосту, применить ее эффект (ну тупо триггерная часть перекопирована). Это все можно, а как проверить, в кд она или нет?! Ведь без такой проверки абила будет всегда имитировать каст при необходимых условиях = да. Хоть 10 раз подряд!
function IsAbilityOnCooldown takes integer z returns boolean
return IsFlagBitSet(Memory[(z+0x20)/4],512)
endfunction
Вот это я вообще не понимаю, что это. Юнит-то где?
По подсказкам мемхака смутно понятно, что проверяется последняя такая скастованная способность, что ли... Но мне так не подходит, будут баги при одинаковых героях с этой способностью.
32
Она берет адресс абилки у юнита, т.е GetUnitAbility( unit, abilid) вернет число, смотрим что оно выше 1, тогда проверяем этой функцией в кд ли абилка, отмечу что данная функция возвращает буль а не кол-во сек. до конца кулдауна, если вам нужно время оставшегося до готовности абилки, есть другая функция GetAbilityCurrentCooldown или как то так.
А кстати есть новый мх на 1.28+
Разбираем его принципы работы...
21
//////
Возможно ли поменять иконку у конкретной абилы конкретного юнита, чтобы у всех остальных иконка осталась той же, а rawcodes способностей были одинаковые?
Дело в том, что неплохо было бы для геройских аватаров иметь иконки способностей, окрашенные в другие цвета или вообще изменённые, но ради этого делать копии способностей и заносить их во все системы (триггеры, автоматические изучения и т. д.) явно слишком много, да и РО окончательно треснет от этих копий.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.