Добавлен respect_gg
Патч естественно 1.26, частично пользуюсь мемхаком. И добрался до такого вопроса.
А возможно ли с помощью мемхака каким то образом сделать так, чтобы игрок не мог контролировать своей боевой единицей, но при этом полностью была бы видна панель управления приказами и способностями, а так же, чтобы не пропадала возможность отдавать приказы триггерно?
А возможно ли с помощью мемхака каким то образом сделать так, чтобы игрок не мог контролировать своей боевой единицей, но при этом полностью была бы видна панель управления приказами и способностями, а так же, чтобы не пропадала возможность отдавать приказы триггерно?
Принятый ответ
Тут нужно работать с динамическими триггерами и следить за юнитом очень тщательно.
Почти все дизейблы в игре построены на приказе стана и особом флаге - неприрываемый, собственно так и работает функция стана внутри движка игры, устанавливает счетчик станов ( текущее кол-во +1) больше, и принудительно записывает в начало очереди приказов - приказ стоять и смотреть на источник стана ( прикол да? Приказ стана это приказ типа цель-обьект), Но если мемхаком повысить счетчик станов на 1 и не отдавать никаких других приказов то юнит будет выполнять первый отданный приказ во что бы то нистало. При этом сломаются все стандартные дизейблы.
Что нам нужно - отслеживать смерть юнита, причем событием EVENT_WIDGET_DEATH (TriggerRegisterDeathEvent). Отлавливать приказы которые получает юнит, если это стан - то снимать счетчик на 0, а потом после окончания стана (событие на 0.00 едениц урона) повышать счетчик. Приказы триггерно отдавать точно так же, снял счетчик до нуля, приказ чето делать, поставил на то кол-во столько было.
Важно - это поле юзают многие дебаффы и абилки, к примеру морфы, поэтому не тупо ставим 0 или 1, а читаем сколько было, записываем 0, отдаем приказ, потом ставим сколько было, обязательно проверяя чтобы счетчик был выше 0 или равен нулю.
Счетчик станов (Он же флаг неприрываемости) находится по оффсету 0x198/
Почти все дизейблы в игре построены на приказе стана и особом флаге - неприрываемый, собственно так и работает функция стана внутри движка игры, устанавливает счетчик станов ( текущее кол-во +1) больше, и принудительно записывает в начало очереди приказов - приказ стоять и смотреть на источник стана ( прикол да? Приказ стана это приказ типа цель-обьект), Но если мемхаком повысить счетчик станов на 1 и не отдавать никаких других приказов то юнит будет выполнять первый отданный приказ во что бы то нистало. При этом сломаются все стандартные дизейблы.
Что нам нужно - отслеживать смерть юнита, причем событием EVENT_WIDGET_DEATH (TriggerRegisterDeathEvent). Отлавливать приказы которые получает юнит, если это стан - то снимать счетчик на 0, а потом после окончания стана (событие на 0.00 едениц урона) повышать счетчик. Приказы триггерно отдавать точно так же, снял счетчик до нуля, приказ чето делать, поставил на то кол-во столько было.
Важно - это поле юзают многие дебаффы и абилки, к примеру морфы, поэтому не тупо ставим 0 или 1, а читаем сколько было, записываем 0, отдаем приказ, потом ставим сколько было, обязательно проверяя чтобы счетчик был выше 0 или равен нулю.
Счетчик станов (Он же флаг неприрываемости) находится по оффсету 0x198/
ReadRealMemory( pHandle + 0x198 )
Где p Handle это адресс юнита.
Важное НО, получение адресса юнита сравнительно тяжелая операция (ConvertHandle), поэтому имеет смысл записать адресс куда-нибудь, чтобы потом работать с ним, адресса у юнитов остаются не изменными всю игру, как и у абилок (даже если их удалять и добавлять).
Важное НО, получение адресса юнита сравнительно тяжелая операция (ConvertHandle), поэтому имеет смысл записать адресс куда-нибудь, чтобы потом работать с ним, адресса у юнитов остаются не изменными всю игру, как и у абилок (даже если их удалять и добавлять).
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Почти все дизейблы в игре построены на приказе стана и особом флаге - неприрываемый, собственно так и работает функция стана внутри движка игры, устанавливает счетчик станов ( текущее кол-во +1) больше, и принудительно записывает в начало очереди приказов - приказ стоять и смотреть на источник стана ( прикол да? Приказ стана это приказ типа цель-обьект), Но если мемхаком повысить счетчик станов на 1 и не отдавать никаких других приказов то юнит будет выполнять первый отданный приказ во что бы то нистало. При этом сломаются все стандартные дизейблы.
Что нам нужно - отслеживать смерть юнита, причем событием EVENT_WIDGET_DEATH (TriggerRegisterDeathEvent). Отлавливать приказы которые получает юнит, если это стан - то снимать счетчик на 0, а потом после окончания стана (событие на 0.00 едениц урона) повышать счетчик. Приказы триггерно отдавать точно так же, снял счетчик до нуля, приказ чето делать, поставил на то кол-во столько было.
Важно - это поле юзают многие дебаффы и абилки, к примеру морфы, поэтому не тупо ставим 0 или 1, а читаем сколько было, записываем 0, отдаем приказ, потом ставим сколько было, обязательно проверяя чтобы счетчик был выше 0 или равен нулю.
Счетчик станов (Он же флаг неприрываемости) находится по оффсету 0x198/
Важное НО, получение адресса юнита сравнительно тяжелая операция (ConvertHandle), поэтому имеет смысл записать адресс куда-нибудь, чтобы потом работать с ним, адресса у юнитов остаются не изменными всю игру, как и у абилок (даже если их удалять и добавлять).
В целом мне бы хватило вообще показа скилл-панели союзных войск. Но тут приходится подключать DotaHelper, в котором я пока не разобрался как отключать конкретный функционал, а точнее alt+click... Вроде все остальное, что в нем есть отключать получается, а вот именно эту опцию с кликами отключить не получается.