проблема с фпс, и слоу мо

VitoScaletta

Новичок
Автор темы
2
0
Версия SA-MP
  1. 0.3.7 (R1)
всем привет, столкнулся с такой проблемой, захожу в игру, бегу секунд 10, и резко персонаж идет медленно будто в слоу мо каком-то, а на счетчике ФПС красуется от 90 до 120 кадров в секунду, ниже будет что я сделал..

- Удалил все клео (не помогло)
- Переустанавливал сампфункс и клео (не помогло)
- Ставил gta sa 1.0 (не помогло)
У меня стоит новая зимняя сборка браззерса, и стоит crashes.asi, ниже видео с тем самым пиздецом, прошу помогите мужики, не могу спокойно поиграть

 

libsamp.so

Активный
259
94
всем привет, столкнулся с такой проблемой, захожу в игру, бегу секунд 10, и резко персонаж идет медленно будто в слоу мо каком-то, а на счетчике ФПС красуется от 90 до 120 кадров в секунду, ниже будет что я сделал..

- Удалил все клео (не помогло)
- Переустанавливал сампфункс и клео (не помогло)
- Ставил gta sa 1.0 (не помогло)
У меня стоит новая зимняя сборка браззерса, и стоит crashes.asi, ниже видео с тем самым пиздецом, прошу помогите мужики, не могу спокойно поиграть

Недавно столкнулся с такой же проблемой, и решил провести анализ, из за чего подобное происходит.

Когда игра начинает замедляться(в первый раз после входа в игру), выскакивает вот такой вот варнинг:
1770816247014.png

Видим, что опкод у него 0x107, заходим на wiki.blast.hk и ищем опкод 107(вот он), как мы видим он "Создает объект с указанными параметрами(модель и позиция)", далее смотрим на Exception 0xC0000005 at 0x59F8B4, это обозначает что при попытке что то сделать, возникла ошибка Access violation по адресу 0x59F8B4, перемещаемся в иду.

Снимок экрана 2026-02-11 163629.png

Как мы видим, мы находимся в функции CObject::Init, в которой вызывается тот самый оффсет 0x59F8B4(подсвечено фиолетовым), у нас тут происходит проверка отвечающая за флаги коллизии обьектов, чуть выше данной проверки идет получение pColModel = CModelInfo::ms_modelInfoPtrs[modelId->physical.entity.m_wModelIndex]->clump.base.pColModel;. Как мы видим, тут инициализируется обращение к глобальному массиву указателей на данные моделей, в качестве индекса тут используется m_wModelIndex, это и есть айди модели который присылается сервером.

Сервер присылает на клиент айди модели(того же педа), из за чего происходит обращение к глобальному массиву указателей на данные моделей, и если клиент не находит индекс на модель, то он просто отдает в ответ NULL 0x0, дальше происходит сама проверка отвечающая за флаги коллизии обьектов, и при попытке прочитать данные колллизии модели происходит чтение данных по неверному(тому самому NULL) адресу. Проверка берет pColModel и прибавляет к нему оффсет в котором лежат флаги коллизии(pColModel + offset), но так как у pColModel адрес нулевой, происходит Access Violation 0xC0000005.

Самый простейший фикс данной проблемы(в моем случае была моделька у скина больше 311) это обработчик пакетов WorldPlayerAdd и SetPlayerSkin:

Lua:
function sampev.onWorldPlayerAdd(playerId, modelId, position, rotation, color, fightingStyle)
    if modelId < 0 or modelId > 311 then
        return {playerId, 74, position, rotation, color, fightingStyle}
    end
end

function sampev.onSetPlayerSkin(playerId, modelId)
    if modelId < 0 or modelId > 311 then
        return {playerId, 74}
    end
end
(если проблема допустим в типе транспорта а не в модельке скина, под свою проблему дорабатывайте, если мне будет не лень сделаю фикс всех возможных причин этого слоу-мо в формате аси)
 
  • Нравится
  • Вау
Реакции: HypoSha и БеzликиЙ