GTA SAMP: Поиск адреса, Driveby

Akatosh

Известный
Автор темы
21
0
Народ, кто тут опытнее, помогите, пожалуйста!
Интересует процесс DriveBy (когда на пассажирке стреляешь, высунувшись из окна), а точнее момент, который сажает игрока обратно в авто, когда во время стрельбы с пассажирки у него закончились патроны.
Я второй день уже ищу место, где это происходит.
Самое близкое, что мне удалось найти:
Код:
gta_sa.exe+0x2218C0 - функция, где срабатывает брейкпоинт, когда игрок или активирует режим Driveby (нажимает H и вылезает из окна), или залезает обратно, когда кончились патроны.
samp.dll+0x7825 - место, которое проверяет статус нажатия клавиши H, когда игрок сидит в авто. В этом месте брейкпоинт срабатывает только когда DriveBy не активирован.
samp.dll+0x784A   test al, al - место, где после вызова какой-то функции проверяется, равно ли al нулю, и если равно - то сбросить режим DriveBy
samp.dll+0x7859 - место начала деактивации (сброса) режима DriveBy. Строками ниже будет инструкция mov [esi+0x1A7], 0. Единица и нолик, я так понял, означают можно ли использовать DriveBy повторно. Такое бывает, если стрелять с пассажирки в сампе и багом засунуться обратно в авто на ходу, нажав F. Но обратно высунуться нельзя, как раз из-за того, что в esi+0x1A7 всё ещё стоит единичка.

Но проблема вот в чём!
Я пробовал искусственно убирать оружие во время активного DriveBy, и брейкпоинт на samp.dll+0x7859 срабатывает - движется камера, убирается прицел и действительно, всё выглядит, как будто мы вышли из режима DriveBy. Но! Моделька игрока "фризится" в одном положении как на стороне клиента, так и сервера - другие игроки тоже видят что я не залез обратно в авто и перестал двигаться (голова при этом двигается).
Что интересно - если убирать оружие при зажатой клавише стрельбы, то все происходит удачно - моделька засовывается обратно и камера сбрасывается, прицел убирается (другие тоже это видят).
И вот тут я запутался, не знаю за что ухватиться..! Получается что я нашел - это только хвост. Нужно определенно найти место, где проверяется, кончились ли у игрока патроны, и если кончились - сажает его обратно и сбрасывает режим DriveBy..
P.S. Опкод 0687: clear_actor $PLAYER_ACTOR task я так понял, работает только визуально на стороне клиента - другие игроки не видят, что я засунулся обратно.
 
Последнее редактирование: