Skip to content

Commit

Permalink
Тут что то очень странное [skip ci]
Browse files Browse the repository at this point in the history
  • Loading branch information
xrSimpodin committed Sep 22, 2021
1 parent 6f15135 commit 87ddcb2
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
6 changes: 3 additions & 3 deletions ogsr_engine/xrGame/GameObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -874,9 +874,9 @@ u32 CGameObject::ef_anomaly_type () const
u32 CGameObject::ef_weapon_type () const
{
string16 temp; CLSID2TEXT(CLS_ID,temp);
R_ASSERT3 (false,"Invalid weapon type request, virtual function is not properly overridden!",temp);
return (u32(-1));
// return (u32(0));
//R_ASSERT3 (false,"Invalid weapon type request, virtual function is not properly overridden!",temp);
Msg("!![%s] Invalid weapon type request, virtual function is not properly overridden [%s] ", __FUNCTION__, temp);

This comment has been minimized.

Copy link
@Xottab-DUTY

Xottab-DUTY Sep 22, 2021

Contributor

Такой вылет может произойти только при неправильно написанном коде, геймдата никак не может его вызвать. Поэтому, лучше именно вылет тут кидать, чтобы сразу найти баг, если что, и не дать игроку с ним столкнуться.

This comment has been minimized.

Copy link
@xrSimpodin

xrSimpodin Sep 22, 2021

Author Member

Я выкладывал лог, тут ничего не понятно. ef_weapon_type просто не может там по коду вызываться. Или это стектрейс прям совсем кривой или я хз. Да и краш редкий и рандомный, его не повторишь чтоб под отладчиком это проверить.

[error]File  : g:\repos\ogsr-engine\ogsr_engine\xrgame\gameobject.cpp
[error]Line  : 877
[error]Description  : Invalid weapon type request, virtual function is not properly overridden!
[error]Arguments  : SCRPTCAR

[21.09.21 10:35:11.227] !!stack trace:
! Module: [G:\Games\OGSR Mod\bin_x64\xrCore.dll], AddrPC.Offset: [00007FFB69343E58], Fun: [BuildStackTrace()] + [48 byte(s)], File-->Line: [g:\repos\ogsr-engine\ogsr_engine\xrcore\stacktrace_collector.cpp-->152]
! Module: [G:\Games\OGSR Mod\bin_x64\xrCore.dll], AddrPC.Offset: [00007FFB6936A8B5], Fun: [LogStackTrace()] + [73 byte(s)], File-->Line: [g:\repos\ogsr-engine\ogsr_engine\xrcore\xrdebugnew.cpp-->58] + [13 byte(s)]
! Module: [G:\Games\OGSR Mod\bin_x64\xrCore.dll], AddrPC.Offset: [00007FFB6936A6FA], Fun: [xrDebug::backend()] + [174 byte(s)], File-->Line: [g:\repos\ogsr-engine\ogsr_engine\xrcore\xrdebugnew.cpp-->172]
! Module: [G:\Games\OGSR Mod\bin_x64\xrCore.dll], AddrPC.Offset: [00007FFB6936A4CA], Fun: [xrDebug::fail()] + [46 byte(s)], File-->Line: [g:\repos\ogsr-engine\ogsr_engine\xrcore\xrdebugnew.cpp-->236]
! Module: [G:\Games\OGSR Mod\bin_x64\xrGame.dll], AddrPC.Offset: [00007FFB52D6AF87], Fun: [CGameObject::ef_weapon_type()] + [83 byte(s)], File-->Line: [g:\repos\ogsr-engine\ogsr_engine\xrgame\gameobject.cpp-->878]
! Module: [G:\Games\OGSR Mod\bin_x64\xrGame.dll], AddrPC.Offset: [00007FFB52F1910C], Fun: [CPHShell::applyImpulseTrace()] + [108 byte(s)], File-->Line: [g:\repos\ogsr-engine\ogsr_engine\xrgame\phshell.cpp-->302]
! Module: [G:\Games\OGSR Mod\bin_x64\xrGame.dll], AddrPC.Offset: [00007FFB52F20B10], Fun: [CPHShell::applyHit()] + [64 byte(s)], File-->Line: [g:\repos\ogsr-engine\ogsr_engine\xrgame\shellhit.cpp-->27] + [9 byte(s)]
...

This comment has been minimized.

Copy link
@Xottab-DUTY

Xottab-DUTY Sep 22, 2021

Contributor

Хмм, блинн... Любопытно..

This comment has been minimized.

Copy link
@abramcumner

abramcumner Sep 22, 2021

Contributor

Я выкладывал лог, тут ничего не понятно. ef_weapon_type просто не может там по коду вызываться.

Или же может :) static_cast творит чудеса.

static_cast<CPhysicsElement*>(instance.callback_param())
Похоже что в callback_param лежит CCar*. И когда вызывают виртуальную функцию applyImpulseTrace для CPhysicsElement на самом деле вызывается ef_weapon_type для CCar.

Например, Car.cpp:131 считает, что в callback_param лежит именно CCar*.

Вместо static_cast уместнее был бы dynamic_cast/smart_cast с последующим assert`ом.

This comment has been minimized.

Copy link
@xrSimpodin

xrSimpodin Sep 22, 2021

Author Member

Спс, надо попробовать 🤔

This comment has been minimized.

Copy link
@xrSimpodin

xrSimpodin Sep 29, 2021

Author Member

Вместо static_cast уместнее был бы dynamic_cast/smart_cast с последующим assert`ом.

callback_param() - это void* , смарт_каст отказывается его кастить в что-либо. 😓

This comment has been minimized.

Copy link
@abramcumner

abramcumner Sep 29, 2021

Contributor

smart_cast может и отказывается. Но dynamic_cast точно не должен.

return u32(-1);
}

u32 CGameObject::ef_detector_type () const
Expand Down
2 changes: 1 addition & 1 deletion ogsr_engine/xrGame/PHShell.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ void CPHShell:: applyImpulseTrace (const Fvector& pos, const Fvector& dir, floa
CBoneInstance& instance=m_pKinematics->LL_GetBoneInstance (id);
if(instance.callback_type() != bctPhysics || !instance.callback_param()) return;

((CPhysicsElement*)instance.callback_param())->applyImpulseTrace ( pos, dir, val, id);
static_cast<CPhysicsElement*>(instance.callback_param())->applyImpulseTrace( pos, dir, val, id);
EnableObject(0);
}

Expand Down

0 comments on commit 87ddcb2

Please sign in to comment.