Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос Как работает гранат предикшн

  • Автор темы Автор темы abbc
  • Дата начала Дата начала
чит определяет куда и от кого был брошен нейд, потом рисует линию куда будет брошен нейд
но тогда, если это объясняет, как большинство читов предсказывают, где взорвется гранат, при этом нужно ли вам использовать трассировку?
Я кодирую способы, которыми игра имитирует место взрыва гранаты, к сожалению, это не работает
 
Последнее редактирование:
когда враг гранату кидает
Суть предсказания гранаты в том чтобы симулировать ее полет, и по мере этой симуляции запоминать точки где она находилась, а уже после по ним отрисовать линию.
Код симуляции раньше вырезали реверсив из server.dll,теперь есть исходники игры и можно наиболее точно предсказывать гранаты вырезав оттуда все что нужно.
Первым делом при смене карты тебе нужно загружать список разрушаемых сущностей, затем вести их учет, какие из них разрушены, чтобы предикт работал сквозь уже разрушенные объекты, это делается через парсинг BSP.
Затем есть два варианта:
- Когда гранату бросили (см CBaseCSGrenade::ThrowGrenade), там рассчитывается угол блоска, его скорость и уже из них вектор броска, и затем вызывается отпускание гранаты (см ниже).
- Когда гранату отпустили (см C<Name>Grenade::EmitGrenade, C<Name>Projectile::Create), там выставляется начальное состояние полета (сбрасывается), выставляются параметры на основе типа гранаты.
Дальше начинается код симуляции полета гранаты, ее суть заключается в том, что ты симулируешь кадры полета как бы это делал сервер в реальном времени, но только той части что нужно и при этом периодически запоминаешь координаты гранаты.
У сущности есть метод PhysicsSimulate, он выполняется каждый кадр на сервере для всех сущностей, сам метод определяет поведение физики сущности за один кадр.
В одном тике PhysicsSimulate будет вызываться:
- CBaseEntity::PhysicsRunThink, там для гранаты решается когда она будет взорвана (см. C<Name>Projectile::Think_Detonate) смок/декой раскрывается когда почти остановились, флешка/обычная/молотов/зажигательная как вышло время, причем они замедляются в два раза когда в воде, обновляется раз в 0.2 секунды.
- CBaseEntity::PhysicsAddGravityMove, там рассчитывается влияние гравитации на гранату
- CBaseEntity::PhysicsPushEntity, там рассчитается движение гранаты, а так же столкновения
- если столкновение произошло то в PerformFlyCollisionResolution обрабатывается отскок (после 20 граната в любом случае взрывается), там же нужно сделать проверку на ломаемые объекты
- CBaseEntity::PhysicsCheckWaterTransition, там обрабатывается взаимодействие с водой.
Так ты крутишь симуляцию кадр за кадром до определенных условий остановки (взорвалась или слишком долго крутится).
В общем, все это можно посмотреть в сорсах игры, и надеюсь текст выше поможет тебе понять что именно там происходит.
 
Суть предсказания гранаты в том чтобы симулировать ее полет, и по мере этой симуляции запоминать точки где она находилась, а уже после по ним отрисовать линию.
Код симуляции раньше вырезали реверсив из server.dll,теперь есть исходники игры и можно наиболее точно предсказывать гранаты вырезав оттуда все что нужно.
Первым делом при смене карты тебе нужно загружать список разрушаемых сущностей, затем вести их учет, какие из них разрушены, чтобы предикт работал сквозь уже разрушенные объекты, это делается через парсинг BSP.
Затем есть два варианта:
- Когда гранату бросили (см CBaseCSGrenade::ThrowGrenade), там рассчитывается угол блоска, его скорость и уже из них вектор броска, и затем вызывается отпускание гранаты (см ниже).
- Когда гранату отпустили (см C<Name>Grenade::EmitGrenade, C<Name>Projectile::Create), там выставляется начальное состояние полета (сбрасывается), выставляются параметры на основе типа гранаты.
Дальше начинается код симуляции полета гранаты, ее суть заключается в том, что ты симулируешь кадры полета как бы это делал сервер в реальном времени, но только той части что нужно и при этом периодически запоминаешь координаты гранаты.
У сущности есть метод PhysicsSimulate, он выполняется каждый кадр на сервере для всех сущностей, сам метод определяет поведение физики сущности за один кадр.
В одном тике PhysicsSimulate будет вызываться:
- CBaseEntity::PhysicsRunThink, там для гранаты решается когда она будет взорвана (см. C<Name>Projectile::Think_Detonate) смок/декой раскрывается когда почти остановились, флешка/обычная/молотов/зажигательная как вышло время, причем они замедляются в два раза когда в воде, обновляется раз в 0.2 секунды.
- CBaseEntity::PhysicsAddGravityMove, там рассчитывается влияние гравитации на гранату
- CBaseEntity::PhysicsPushEntity, там рассчитается движение гранаты, а так же столкновения
- если столкновение произошло то в PerformFlyCollisionResolution обрабатывается отскок (после 20 граната в любом случае взрывается), там же нужно сделать проверку на ломаемые объекты
- CBaseEntity::PhysicsCheckWaterTransition, там обрабатывается взаимодействие с водой.
Так ты крутишь симуляцию кадр за кадром до определенных условий остановки (взорвалась или слишком долго крутится).
В общем, все это можно посмотреть в сорсах игры, и надеюсь текст выше поможет тебе понять что именно там происходит.
код, который вы имеете в виду, уже находится в lv grenadeprediction
 
уже находится в lv grenadeprediction
Если вы про легендвар мне вообще не нравится как он написан, это что-то с чем-то.
Поэтому при написании своего предикта лучше обратиться к сорсам игры нежели к сорсу какого-то чита.
Там нет учета препятствий, и вообще никаких комментариев, какое-то напасченное месиво, имхо.
 
Если вы про легендвар мне вообще не нравится как он написан, это что-то с чем-то.
Поэтому при написании своего предикта лучше обратиться к сорсам игры нежели к сорсу какого-то чита.
я согласен.
весь код, о котором он говорит, находится в утечке исходного кода csgo, physics_main.cpp
 
Вообще-то в:
/game/shared/physics_main_shared.cpp
/game/shared/collisionproperty.cpp
/game/shared/cstrike15/basecsgrenade_projectile.cpp
/game/server/physics_main.cpp
/game/client/physics_main_client.cpp
/game/shared/baseentity_shared.cpp
/game/shared/cstrike15/<name>_projectile.cpp
/game/shared/cstrike15/weapon_basecsgrenade.cpp
/game/shared/cstrike15/weapon_<name>.cpp
/game/shared/props_shared.cpp
Но да, почти...
 
Назад
Сверху Снизу