SA:MP Lua Arizona Убираем первое лицо от лаунчера Аризоны (FirstPersonHandler_class_destroyer_t.lua)

Tema05

Известный
Автор темы
1,561
511
Версия SA-MP
  1. 0.3.7-R3
Так как я просто обожаю все щикарные иновации, что нам предлагает лаунчер Аризоны, представляю вашему внимаю простенький стрипт, который полностью отрубает первое лицо, добавленное в последнем обновлении.

P.S. Возможно вызывает какие-то побочки, лично я не заметил их. UPD: На практике активного использования долгое время побочек не было замечено.
P.P.S. По идеи при обновлении лаунчера скрипт не должен сломаться, но такая вероятность есть, если что обновлю.
P.P.P.S. Знаю, что ты, читатель, сумеешь сделать это в 30 символов и без костылей, сделал как сумел, мне главное результат.

UPD 16.04.2025:
При длительном использовании мне удалось наткнуть, отследить и решить 2 проблемы.
1) Так как я пишу скрипты, то постоянно их перезагружаю. А у меня при каждом запуске выполняется порядка 9 поисков по сигнатуре через функцию findSignatureInModule. Так вот спустя несколько сотен перезапусков lua скрипты не могут запустить из-за нехватки памяти. Вызвано это утечкой памяти в данной функции. Для переменной buffer выделяется память для хранения байтов региона программы, но после она то ли не до конца очищается, то ли вовсе этого не делает. Попробовал разные решения, по итогу помогло каждый раз удалять эту переменную и вручную запускать сборщик мусора.
Lua:
buffer = nil
collectgarbage('collect')
2) Последнее время начал замечать 1 краш, который очень редко происходил при загадочных обстоятельствах. Это началось примерно в тот же момент как обновился антиафк от AIR. Он обновился из-за каких-то изменений в лаунчере Аризоны. После этого у меня также появился другой краш. По итогу выяснилось, что другой патч памяти, который замечательно работал несколько месяцев, при каких-то извращённых обстоятельствах параллельной работы сетевого соединения, вызванных с определённой вероятностью микрофризом от вообще другого asi скрипта, начинал конфликтовать с новым антиафк. Я потратил 4 дня, чтобы раскопать это говно и понять как гарантированно воспроизводить эту ошибку хотя бы за пару минут, а не часов.

Оказалось мои варианты решений, которые не давали обработчикам в core.asi выполняться начали вызывать эти проблемы. Это также навело меня на решение проблемы с этим скриптом и я переделал его. Изучил поподробнее как работает 1 лицо в лаунчере Аризоны. Теперь просто не будет проходить условие, которые переключает камеру на вид от 1 лица. Для состояния на ногах и в машине отдельно

Вот код:
Lua:
-- Паблик функция, не помню откуда взял
local ffi = require 'ffi'
ffi.cdef [[ ... ]]
function findSignatureInModule(signature, moduleName) ... end

local address, error = findSignatureInModule(
    '83 F8 03 75 ?? 83 3D ?? ?? ?? ?? 01',
    'core.asi'
)
if address then
    writeMemory(tonumber(address + 3), 1, 0xEB, true)
else
    print(error)
end
local address, error = findSignatureInModule(
    '39 98 B4 00 00 00 75',
    'core.asi'
)
if address then
    writeMemory(tonumber(address + 6), 1, 0xEB, true)
else
    print(error)
end
 

Вложения

  • FirstPersonHandler_class_destroyer_t.lua
    2.8 KB · Просмотры: 59
Последнее редактирование:

вайега52

Налуашил состояние
Модератор
2,913
2,978
-- Паблик функция, не помню откуда взял
 
  • Нравится
Реакции: Tema05

Орк

Известный
364
311
А есть простой адрес на проверку состояния первого лица? Хочу для cam_set сделать проверку

@chapo ? @ARMOR ?
 

вайега52

Налуашил состояние
Модератор
2,913
2,978
А есть простой адрес на проверку состояния первого лица?
Открой в иде кор аризоны, в нем alt + b и введи FF 61 04, если сигнатура правильная, то первый (а в идале единственный) будет нужный адрес
 

Орк

Известный
364
311
Открой в иде кор аризоны, в нем alt + b и введи FF 61 04, если сигнатура правильная, то первый (а в идале единственный) будет нужный адрес
а вариант для тупых, которые использую cheat engine или сразу адрес?

Lua:
-- core.asi+1765F6
-- core.asi+1765EB
-- core.asi+1765EA
-- core.asi+176498
-- core.asi+1765E8

    writeMemory(getModuleHandle('core.asi') + 0x1765E8, 1, 1 --[[ 0 ]], true)
какой-то из этих адресов.
Последний на переключение вида от первого и стандарт

А вообще, вид от первого лица у них неиграбельный, для красоты норм, но постоянно с ним не поиграть.
 
Последнее редактирование:

Tema05

Известный
Автор темы
1,561
511
Открой в иде кор аризоны, в нем alt + b и введи FF 61 04, если сигнатура правильная, то первый (а в идале единственный) будет нужный адрес
Нет, эта сигнатура ведёт на место, где идёт "jmp" на обработчик изменения режима камеры, который перехватывает это событие и переключает на свой дополнительный режим 1 лица. Инструкция заменяется на 0xC3 "retn", чтобы завершить функцию. Возвращяемого значения там нет. Эта функция не имеет прямого отношения к состоянию камеры.

а вариант для тупых, которые использую cheat engine или сразу адрес?

Lua:
-- core.asi+1765F6
-- core.asi+1765EB
-- core.asi+1765EA
-- core.asi+176498
-- core.asi+1765E8

    writeMemory(getModuleHandle('core.asi') + 0x1765E8, 1, 1 --[[ 0 ]], true)
какой-то из этих адресов.
Последний на переключение вида от первого и стандарт

А вообще, вид от первого лица у них неиграбельный, для красоты норм, но постоянно с ним не поиграть.
Походу из всех присутствующих я единственный кто реально открыл этот кор в иде) @whyega52
Потому что функцию, возвращающую состояние камеры 1 лица они любезно закинули в экспорты
Lua:
-- Выполнить 1 раз где-то в начале
ffi.cdef [[
    bool IsFirstPerson();
]]
local core = ffi.load('core.asi')

-- Получаем состояние 1 лица
print(core.IsFirstPerson())
И в отличии от твоего решения оно не сломается при обновлении кора, когда этот адрес памяти сместится
 
Последнее редактирование:

svcrew

Участник
59
19
С последней обновой на Аризоне перестал работать скрипт по неизвестной причине. Если требуется, то могу скинуть лог
 

Tema05

Известный
Автор темы
1,561
511
С последней обновой на Аризоне перестал работать скрипт по неизвестной причине. Если требуется, то могу скинуть лог
Отвечаю тебе и всем остальным. Всё работает и до сих пор актуально. Проблема в том, что я обновлял реализацию 16 апреля 2025, т.е. 3 месяца назад и спустя 5 месяцев после создания темы. Обновлял я не потому что она перестала работать, а потому что я вычислил 1 очень редкий краш с ней и пофиксил его. Но из-за того, что старая реализация всё ещё функционировала до этой обновы вы не обновляли скрипт. У новой версии в недавней обновой проблем нет, поэтому я сам лично ошибку не заметил.

Просто перекачайте файл
 

SR_team

like pancake
BH Team
4,883
6,556
Отвечаю тебе и всем остальным. Всё работает и до сих пор актуально. Проблема в том, что я обновлял реализацию 16 апреля 2025, т.е. 3 месяца назад и спустя 5 месяцев после создания темы. Обновлял я не потому что она перестала работать, а потому что я вычислил 1 очень редкий краш с ней и пофиксил его. Но из-за того, что старая реализация всё ещё функционировала до этой обновы вы не обновляли скрипт. У новой версии в недавней обновой проблем нет, поэтому я сам лично ошибку не заметил.

Просто перекачайте файл
А зачем его вырезать? Лаунчер сейвит режим камеры между перезаходами - будет та камера, с которой вышел из игры
 

Tema05

Известный
Автор темы
1,561
511
А зачем его вырезать? Лаунчер сейвит режим камеры между перезаходами - будет та камера, с которой вышел из игры
Спасибо за вопрос. Разработчики лаунчера Аризоны лучшие, вы делаете самые ахуенно качественные реализации с технической точки зрения.

Около года назад, на момент написания скрипта, при входе в игру всегда была средняя камера. Я фанат дальней камеры и клянусь каждый раз её включал пролистывая 1 лицо. Я в этом уверен так как делал себе скрипт переключающий её. Сейчас проверил и да, на данный момент сохраняется. Люди хотят её отключить потому что иногда требуется переключиться на ближнюю камеру, в тесных пространствах, при застревании в объектах, или просто ради получения иного ракурса, камера 1 лица не может дать больше видимости, но каждый раз бесит тех кто ей не пользуется ради рп/погружения и пролистывает. Меня лично укачивает при использовании 1 лица, возможно других тоже.

Пользуясь случаем можно пожалуйста на уровне лаунчера исправить очень частый краш с скейтом. Я обожаю эту систему, но она не популярная, поэтому вы вероятно не в курсе. Я уже чуть подразобрался в чём проблема и хочу помочь с решением. При спрыгивания с скейта (когда срабатывает гташное состояние спрыгивания с любого велосипеда) могут начать лететь варнинги, которые морозят всё окружение и это решается только перезаходом.
1752518811958.png

Варнинг(0x418646) происходит внутри CCollision::ProcessColModels(0x4185C5) из-за того что 2 передаваемый указатель на CColModel равен 0. Метод с проблемным аргументом вызывается внутри CPed::ProcessControl(0x5E8CD0) по адресу 0x5E8F26.
Screenshot_151.png

Как я понял проблема в том, что тут CColModel в отличие от остальных мест получается напрямую из списка указателей, а не через метод CEntity::GetColModel(0x535300), на который видимо лаунчер ставит хук с целью расширения лимита. По модели скейта как транспорта
15882 указателя на CColModel в этом "пуле моделей" нет. Я пока не нашёл нормальное решение кроме как загружать модель 15882 через опкод 0247 REQUEST_MODEL. Тогда указатель CColModel появляется, но моделька постоянно выгружается

Готов содействовать любым образом. Предоставить видео или дополнительную информацию. Также если будет возможность хотел бы указать на другие проблемы или готов ответить на другие вопросы, касаемо настроения пользователей по поводу функционала лаунчера, с точки зрения активного игрока, активно использующего самые разные системы
 
Последнее редактирование:
  • Нравится
Реакции: SR_team и SummerSouL

Улиточка

Известный
479
154
Есть скрипт на бх чтобы у камеры всегда было фиксированное отдаление? ибо пешком одно в магине другое на велике третье перекючишь в тс на нормальное после этого на затылок себе пыришься я уже привык шо деб тыкать кнопку камеры но может ест ькакойнеть скрипт для фиксации камеры на равном удалении как в тс так и пешком чтобы дальность не менялась?
 
  • Клоун
Реакции: CastelloFAM

Tema05

Известный
Автор темы
1,561
511
Есть скрипт на бх чтобы у камеры всегда было фиксированное отдаление? ибо пешком одно в магине другое на велике третье перекючишь в тс на нормальное после этого на затылок себе пыришься я уже привык шо деб тыкать кнопку камеры но может ест ькакойнеть скрипт для фиксации камеры на равном удалении как в тс так и пешком чтобы дальность не менялась?
Ты какую-то проблему выдумал. Вид в машине и на ногах настраиваются отдельно. Автоматически применяются при посадке/выходе из тс. Они сохраняются после перезахода. Настраиваешь желаемый вид отдельно в машине, на ногах и всё, профит