Начинающий
- Статус
- Оффлайн
- Регистрация
- 19 Окт 2025
- Сообщения
- 95
- Реакции
- 4
Друзья, нужна помощь. Столкнулся с очень странной проблемой. Оффсет Projectile::thickness после обновления съехал с 0x1C0 на 0x1C8. Я его поправил. Но теперь он ведёт себя как ёжик - колючий, не подступиться, не потрогать.
Смотрите код:
Вроде читается нормально. Значение 0.5. Но когда я пытаюсь изменить толщину:
Игра сразу вылетает. Access violation. Получается читать можно, а писать нельзя. С каких это пор Facepunch делает оффсеты только для чтения?
Ладно, думаю, обойдусь без изменения толщины. Но игра крашится даже когда я просто пытаюсь прочитать этот оффсет после спавна стрелы! Не всегда, но через раз. Я уже и проверки на валидность указателей добавил, и IsValid проверяю перед чтением - всё равно краш.
В чём магия? Почему оффсет Projectile::thickness ведёт себя так странно? К нему будто не подобраться. Может там теперь не простой float, а какая-то виртуальная функция? Или Facepunch зашифровали толщину снаряда?
Может быть этот оффсет теперь живёт своей жизнью и появляется только в определённые моменты? Пробовал читать его в разных местах: в OnWeaponFired, в FireProjection, в Update. Результат один - либо краш, либо значение 0.0, которое явно не правильное.
Кто сталкивался с таким поведением? Буду благодарен за любую помощь. Снаряды сейчас летают сквозь стены, потому что толщину прочитать нормально не получается.
Смотрите код:
C++:
uintptr_t baseProjectile = read<uintptr_t>(localPlayer + 0x5A0);
uintptr_t projectile = read<uintptr_t>(baseProjectile + 0x178);
float thickness = read<float>(projectile + 0x1C8);
Вроде читается нормально. Значение 0.5. Но когда я пытаюсь изменить толщину:
C++:
write<float>(projectile + 0x1C8, 10.0f);
Игра сразу вылетает. Access violation. Получается читать можно, а писать нельзя. С каких это пор Facepunch делает оффсеты только для чтения?
Ладно, думаю, обойдусь без изменения толщины. Но игра крашится даже когда я просто пытаюсь прочитать этот оффсет после спавна стрелы! Не всегда, но через раз. Я уже и проверки на валидность указателей добавил, и IsValid проверяю перед чтением - всё равно краш.
C++:
uintptr_t projectile = read<uintptr_t>(baseProjectile + 0x178);
if (IsValidPtr(projectile)) {
float thickness = read<float>(projectile + 0x1C8);
}
В чём магия? Почему оффсет Projectile::thickness ведёт себя так странно? К нему будто не подобраться. Может там теперь не простой float, а какая-то виртуальная функция? Или Facepunch зашифровали толщину снаряда?
Может быть этот оффсет теперь живёт своей жизнью и появляется только в определённые моменты? Пробовал читать его в разных местах: в OnWeaponFired, в FireProjection, в Update. Результат один - либо краш, либо значение 0.0, которое явно не правильное.
Кто сталкивался с таким поведением? Буду благодарен за любую помощь. Снаряды сейчас летают сквозь стены, потому что толщину прочитать нормально не получается.