Skip to content

Commit

Permalink
Fix #504
Browse files Browse the repository at this point in the history
Fix #505
Fix incorrect extra_player_info_t struct in CZDS
Fix potential crash inside BulletPhysics.dll!CViewport::ActivateClientUI
  • Loading branch information
hzqst committed Oct 14, 2024
1 parent 775e0d0 commit 9320b00
Show file tree
Hide file tree
Showing 13 changed files with 465 additions and 126 deletions.
32 changes: 29 additions & 3 deletions Plugins/BulletPhysics/CounterStrike.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ cvar_t* cl_min_t = NULL;
cvar_t* cl_min_ct = NULL;

extra_player_info_t(*g_PlayerExtraInfo)[65] = NULL;
extra_player_info_czds_t(*g_PlayerExtraInfo_CZDS)[65] = NULL;

bool BIsValidTModelIndex(int i)
{
Expand Down Expand Up @@ -42,6 +43,31 @@ const char* sPlayerModelFiles[] = {
"models/player/militia/militia.mdl",
};

bool CounterStrike_IsVIP(int PlayerID)
{
if (g_PlayerExtraInfo)
{
return (*g_PlayerExtraInfo)[PlayerID].vip ? true : false;
}

return false;
}

int CounterStrike_GetTeamNumber(int PlayerID)
{
if (g_PlayerExtraInfo_CZDS)
{
return (*g_PlayerExtraInfo_CZDS)[PlayerID].teamnumber;
}

if (g_PlayerExtraInfo)
{
return (*g_PlayerExtraInfo)[PlayerID].teamnumber;
}

return 0;
}

void CounterStrike_RedirectPlayerModelPath(const char* name, int PlayerID, int TeamID, char* pszModel, size_t cbModel)
{
if (cl_minmodels && cl_minmodels->value && PlayerID > 0 && PlayerID < 65)
Expand All @@ -61,7 +87,7 @@ void CounterStrike_RedirectPlayerModelPath(const char* name, int PlayerID, int T
}
else if (TeamID == 2)
{
if (!(*g_PlayerExtraInfo)[PlayerID].vip)
if (!CounterStrike_IsVIP(PlayerID))
{
if (!cl_min_ct || !BIsValidCTModelIndex((int)cl_min_ct->value))
{
Expand Down Expand Up @@ -102,7 +128,7 @@ model_t* CounterStrike_RedirectPlayerModel(model_t* original_model, int PlayerNu
{
if (cl_minmodels && cl_minmodels->value && PlayerNumber > 0 && PlayerNumber < 65)
{
int TeamID = (*g_PlayerExtraInfo)[PlayerNumber].teamnumber;
int TeamID = CounterStrike_GetTeamNumber(PlayerNumber);

if (TeamID == 1)
{
Expand All @@ -117,7 +143,7 @@ model_t* CounterStrike_RedirectPlayerModel(model_t* original_model, int PlayerNu
}
else if (TeamID == 2)
{
if (!(*g_PlayerExtraInfo)[PlayerNumber].vip)
if (!CounterStrike_IsVIP(PlayerNumber))
{
if (!cl_min_ct || !BIsValidCTModelIndex((int)cl_min_ct->value))
{
Expand Down
2 changes: 1 addition & 1 deletion Plugins/BulletPhysics/VGUI2ExtensionImport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ void VGUI2Extension_Init()

if (!hVGUI2Extension)
{
//Sys_Error("VGUI2Extension.dll is required!");
Sys_Error("VGUI2Extension.dll is required!");
return;
}

Expand Down
12 changes: 7 additions & 5 deletions Plugins/BulletPhysics/Viewport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,17 +122,19 @@ void CViewport::ActivateClientUI(void)
{
SetVisible(true);

if (m_hOldFocus)
auto pPreviousPanel = m_hOldFocus.Get();

if (pPreviousPanel)
{
vgui::input()->SetAppModalSurface(m_hOldFocus);
vgui::input()->SetMouseFocus(m_hOldFocus);
m_hOldFocus = NULL;
vgui::input()->SetAppModalSurface(pPreviousPanel->GetVPanel());
vgui::input()->SetMouseFocus(pPreviousPanel->GetVPanel());
m_hOldFocus.Set(nullptr);
}
}

void CViewport::HideClientUI(void)
{
m_hOldFocus = vgui::input()->GetAppModalSurface();
m_hOldFocus.Set(vgui::input()->GetAppModalSurface());

SetVisible(false);
}
Expand Down
2 changes: 1 addition & 1 deletion Plugins/BulletPhysics/Viewport.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class CViewport : public vgui::Panel

private:
CPhysicDebugGUI* m_pPhysicDebugViewGUI{};
vgui::VPANEL m_hOldFocus{};
vgui::PHandle m_hOldFocus{};
};

extern CViewport *g_pViewPort;
1 change: 0 additions & 1 deletion Plugins/BulletPhysics/exportfuncs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1028,7 +1028,6 @@ void EngineStudio_FillAddress(int version, struct r_studio_interface_s** ppinter

if (gPrivateFuncs.GameStudioRenderer__StudioDrawPlayer_vftable_index == 0)
gPrivateFuncs.GameStudioRenderer__StudioDrawPlayer_vftable_index = 100 / 4;

}

if (gPrivateFuncs.GameStudioRenderer_StudioDrawModel_vftable_index)
Expand Down
Loading

0 comments on commit 9320b00

Please sign in to comment.