- 1,507
- 475
- Версия SA-MP
-
- 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 выделяется память для хранения байтов региона программы, но после она то ли не до конца очищается, то ли вовсе этого не делает. Попробовал разные решения, по итогу помогло каждый раз удалять эту переменную и вручную запускать сборщик мусора.
2) Последнее время начал замечать 1 краш, который очень редко происходил при загадочных обстоятельствах. Это началось примерно в тот же момент как обновился антиафк от AIR. Он обновился из-за каких-то изменений в лаунчере Аризоны. После этого у меня также появился другой краш. По итогу выяснилось, что другой патч памяти, который замечательно работал несколько месяцев, при каких-то извращённых обстоятельствах параллельной работы сетевого соединения, вызванных с определённой вероятностью микрофризом от вообще другого asi скрипта, начинал конфликтовать с новым антиафк. Я потратил 4 дня, чтобы раскопать это говно и понять как гарантированно воспроизводить эту ошибку хотя бы за пару минут, а не часов.
Оказалось мои варианты решений, которые не давали обработчикам в core.asi выполняться начали вызывать эти проблемы. Это также навело меня на решение проблемы с этим скриптом и я переделал его. Изучил поподробнее как работает 1 лицо в лаунчере Аризоны. Теперь просто не будет проходить условие, которые переключает камеру на вид от 1 лица. Для состояния на ногах и в машине отдельно
Вот код:
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')
Оказалось мои варианты решений, которые не давали обработчикам в 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
Вложения
Последнее редактирование: