Пользователь
-
Автор темы
- #1
Иногда (на сервере почти всегда) багается коллизия игрока, и TraceRay как будто его игнорирует, игра думает что игрок прозрачный, из-за этого подсаживаться нереально. Однако баг возникает в основном с противниками, на рейджбот это не влияет, но ломает зевсбот. Подозреваю что проблема в том что я что то не бекаплю в лагкомпе.
Подскажите пожалуйста в чем может быть проблема, возможно кто то сталкивался с такой.
Пожалуйста, авторизуйтесь для просмотра ссылки.
LagComp.cpp (не полный):
LagRecord* CLagCompensation::BackupData(CBasePlayer* player) {
LagRecord* record = new LagRecord;
record->player = player;
record->m_vecAbsOrigin = player->GetAbsOrigin();
RecordDataIntoTrack(player, record);
return record;
}
void CLagCompensation::RecordDataIntoTrack(CBasePlayer* player, LagRecord* record) {
record->player = player;
record->m_angEyeAngles = player->m_angEyeAngles();
record->m_flSimulationTime = player->m_flSimulationTime();
record->m_vecOrigin = player->m_vecOrigin();
record->m_fFlags = player->m_fFlags();
record->m_flCycle = player->m_flCycle();
record->m_nSequence = player->m_nSequence();
record->m_flDuckAmout = player->m_flDuckAmount();
record->m_flDuckSpeed = player->m_flDuckSpeed();
record->m_vecMaxs = player->GetCollideable()->OBBMaxs();
record->m_vecMins = player->GetCollideable()->OBBMins();
record->m_vecVelocity = player->m_vecVelocity();
record->m_vecAbsAngles = player->GetAbsAngles();
if (!record->bone_matrix_filled) {
memcpy(record->bone_matrix, player->GetCachedBoneData().Base(), sizeof(matrix3x4_t) * player->GetCachedBoneData().Count());
record->bone_matrix_filled = true;
}
if (player->GetActiveWeapon())
if (player->GetActiveWeapon()->m_fLastShotTime() <= player->m_flSimulationTime())
if (player->GetActiveWeapon()->m_fLastShotTime() > player->m_flOldSimulationTime())
record->shooting = true;
memcpy(record->animlayers, player->GetAnimlayers(), sizeof(AnimationLayer) * 13);
}
void CLagCompensation::BacktrackEntity(LagRecord* record, bool copy_matrix, bool use_aim_matrix) {
CBasePlayer* player = record->player;
player->m_flSimulationTime() = record->m_flSimulationTime;
player->m_vecOrigin() = record->m_vecOrigin;
player->SetAbsOrigin(record->m_vecAbsOrigin);
player->m_fFlags() = record->m_fFlags;
player->m_flCycle() = record->m_flCycle;
player->m_nSequence() = record->m_nSequence;
player->m_flDuckAmount() = record->m_flDuckAmout;
player->m_flDuckSpeed() = record->m_flDuckSpeed;
player->m_vecVelocity() = record->m_vecVelocity;
player->SetAbsAngles(record->m_vecAbsAngles);
player->ForceBoneCache();
player->SetCollisionBounds(record->m_vecMins, record->m_vecMaxs);
if (copy_matrix) {
if (use_aim_matrix) {
memcpy(player->GetCachedBoneData().Base(), record->clamped_matrix, player->GetCachedBoneData().Count() * sizeof(matrix3x4_t));
}
else {
memcpy(player->GetCachedBoneData().Base(), record->bone_matrix, player->GetCachedBoneData().Count() * sizeof(matrix3x4_t));
}
}
}