Добавлен scopterectus
Конкретно для этого вопроса возьмём следующие константы:
constant attacktype ATTACK_TYPE_NORMAL = ConvertAttackType(0)
constant attacktype ATTACK_TYPE_MELEE = ConvertAttackType(1)
constant attacktype ATTACK_TYPE_PIERCE = ConvertAttackType(2)
constant attacktype ATTACK_TYPE_SIEGE = ConvertAttackType(3)
constant attacktype ATTACK_TYPE_MAGIC = ConvertAttackType(4)
constant attacktype ATTACK_TYPE_CHAOS = ConvertAttackType(5)
constant attacktype ATTACK_TYPE_HERO = ConvertAttackType(6)
Функция ConvertAttackType( ) возвращает нам тип атаки в зависимости от того, какой параметр она возьмёт. Так как всего 7 типов атак, то и создано для них 7 глобальных константных переменных.
Я попробовал ввести в качестве параметра для этой функции числа больше, чем 6 и функция вернула мне что-то, что не равно null. То есть, ConvertAttackType(7) != ConvertAttackType(8).
Хотелось бы ещё добавить, что есть ещё и подобные константы:
constant gameevent EVENT_GAME_LOADED = ConvertGameEvent(256)
constant gameevent EVENT_GAME_TOURNAMENT_FINISH_SOON = ConvertGameEvent(257)
constant gameevent EVENT_GAME_TOURNAMENT_FINISH_NOW = ConvertGameEvent(258)
constant gameevent EVENT_GAME_SAVE = ConvertGameEvent(259)
constant playerevent EVENT_PLAYER_ARROW_LEFT_DOWN = ConvertPlayerEvent(261)
constant playerevent EVENT_PLAYER_ARROW_LEFT_UP = ConvertPlayerEvent(262)
constant playerevent EVENT_PLAYER_ARROW_RIGHT_DOWN = ConvertPlayerEvent(263)
И если ввести ConvertPlayerEvent(259) == ConvertGameEvent(259) (почему именно эти цифры смотрите по коду выше), то это вернёт нам true, несмотря на то, что это два разных типа gameevent и playerevent. Да я знаю, что они наследованы от одного типа. Это я к тому, что ConvertAttackType(7) мог вернуть нам совсем не attacktype, а что то другое, поэтому оно и не равно с ConvertAttackType(8).
И тогда я попробовал ввести большие цифры, чтобы мне не возвращали другие типы: ConvertPlayerUnitEvent(309999) - это не вернуло null. Что это значит? Можно создавать свои типы атак? Свои ивенты?
Принятый ответ
эти функции зовутся enum-ераторы, они служат оберткой для жасса и просто представляют собой константу-число. Испольлзуются, чтобы ты не подсунул тупому жассу какой-нибудь мусор вместо разрешенных чисел, т.к. фильтровать числа сложнее, чем такие константы.
У типа атаки нет ограничения сверху в версии 1.26, что позволяет вылезать выше разрешенного кол-ва атак, но тогда и коэф урона по броне будет браться с потолка - памяти, которая содержит ваще другие данные, но всегда одни и те же в плане порядка - макс скорость существ, макс скорость зданий, и т.п. Строить на этом что-то можно, если разведать, к каким данным попадает игра, но смысла мало. В прошлом я видел исследования на эту тему уже.
https://www.hiveworkshop.com/threads/1-28-x-era-versions-break-b...
https://www.hiveworkshop.com/threads/hidden-attack_type-in-the-w...
https://www.hiveworkshop.com/threads/hidden-attack_type-in-the-w...
Ивенты являются просто числами, и обычно не пересекаются, за редким исключением. Поэтому у тебя ConvertPlayerEvent(259) == ConvertGameEvent(259), это 259 == 259 в игре. Типы в игре вообще не имеют значения, если жестко не прописано в условии, а при математическом сравнении тип не проверяется. Скормить триггерам можно любой номер, опять же, но в каждом, куда я заходил, стояли проверки на входе на скормленное число, поэтому пользоваться этим бесполезно. Плюс все триггеры вызываются вследствие того, что их вызывает игра по событию. Те события, к которым невозможно сейчас привязать триггер. всё равно не будут вызывать привязанный каким-либо хак-способом триггер.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован scopterectus
Отредактирован DracoL1ch
Своих событий таким образом не сделать, как и не достучатся до внутриигровых.
Отредактирован scopterectus
Отредактирован scopterectus
Отредактирован PT153
Мемхак это в первую очередь доступ к адресам данных игры, из интерпретатора, очень возможно в луа есть такие уязвимости. Китайцы наверное уже что то мутят, на 1.26+ уже есть мемхак. Другое дело что функционал будет долгое время ограничен, т.к развивать это дело пока особо некому. В игре многое что перелопачено и придется проделать очень много работы с нуля чтобы сделать полноценный мемхак для 1.29 или рефорджа,
Если близзарды нас снова кинут, то наверное появится мемхак для старших патчей...