gmod vtables or dylibs
hey whats up gamers,
anyone got gmod's latest vtables, or just dylibs?
anyone got gmod's latest vtables, or just dylibs?
typedef unsigned long VPANEL;
class KeyValues;
class SurfacePlat;
class IClientPanel;
//!! must be removed
class Panel;
//-----------------------------------------------------------------------------
// Purpose: interface from Client panels -> vgui panels
//-----------------------------------------------------------------------------
class IPanel
{
public:
virtual void Init(VPANEL vguiPanel, IClientPanel *panel) = 0;
// methods
virtual void SetPos(VPANEL vguiPanel, int x, int y) = 0;
virtual void GetPos(VPANEL vguiPanel, int &x, int &y) = 0;
virtual void SetSize(VPANEL vguiPanel, int wide, int tall) = 0;
virtual void GetSize(VPANEL vguiPanel, int &wide, int &tall) = 0;
virtual void SetMinimumSize(VPANEL vguiPanel, int wide, int tall) = 0;
virtual void GetMinimumSize(VPANEL vguiPanel, int &wide, int &tall) = 0;
virtual void SetZPos(VPANEL vguiPanel, int z) = 0;
virtual int GetZPos(VPANEL vguiPanel) = 0;
virtual void GetAbsPos(VPANEL vguiPanel, int &x, int &y) = 0;
virtual void GetClipRect(VPANEL vguiPanel, int &x0, int &y0, int &x1, int &y1) = 0;
virtual void SetInset(VPANEL vguiPanel, int left, int top, int right, int bottom) = 0;
virtual void GetInset(VPANEL vguiPanel, int &left, int &top, int &right, int &bottom) = 0;
virtual void SetVisible(VPANEL vguiPanel, bool state) = 0;
virtual bool IsVisible(VPANEL vguiPanel) = 0;
virtual void SetParent(VPANEL vguiPanel, VPANEL newParent) = 0;
virtual int GetChildCount(VPANEL vguiPanel) = 0;
virtual VPANEL GetChild(VPANEL vguiPanel, int index) = 0;
virtual void* &GetChildren(VPANEL vguiPanel) = 0; // CUtlVector< VPANEL >
virtual VPANEL GetParent(VPANEL vguiPanel) = 0;
virtual void MoveToFront(VPANEL vguiPanel) = 0;
virtual void MoveToBack(VPANEL vguiPanel) = 0;
virtual bool HasParent(VPANEL vguiPanel, VPANEL potentialParent) = 0;
virtual bool IsPopup(VPANEL vguiPanel) = 0;
virtual void SetPopup(VPANEL vguiPanel, bool state) = 0;
virtual bool IsFullyVisible(VPANEL vguiPanel) = 0;
// gets the scheme this panel uses
virtual void* GetScheme(VPANEL vguiPanel) = 0; // hscheme
// gets whether or not this panel should scale with screen resolution
virtual bool IsProportional(VPANEL vguiPanel) = 0;
// returns true if auto-deletion flag is set
virtual bool IsAutoDeleteSet(VPANEL vguiPanel) = 0;
// deletes the Panel * associated with the vpanel
virtual void DeletePanel(VPANEL vguiPanel) = 0;
// input interest
virtual void SetKeyBoardInputEnabled(VPANEL vguiPanel, bool state) = 0;
virtual void SetMouseInputEnabled(VPANEL vguiPanel, bool state) = 0;
virtual bool IsKeyBoardInputEnabled(VPANEL vguiPanel) = 0;
virtual bool IsMouseInputEnabled(VPANEL vguiPanel) = 0;
// calculates the panels current position within the hierarchy
virtual void Solve(VPANEL vguiPanel) = 0;
// gets names of the object (for debugging purposes)
virtual const char *GetName(VPANEL vguiPanel) = 0;
virtual const char *GetClassName(VPANEL vguiPanel) = 0;
// delivers a message to the panel
virtual void SendMessage(VPANEL vguiPanel, KeyValues *params, VPANEL ifromPanel) = 0;
// these pass through to the IClientPanel
virtual void Think(VPANEL vguiPanel) = 0;
virtual void PerformApplySchemeSettings(VPANEL vguiPanel) = 0;
virtual void PaintTraverse(VPANEL vguiPanel, bool forceRepaint, bool allowForce = true) = 0;
virtual void Repaint(VPANEL vguiPanel) = 0;
virtual VPANEL IsWithinTraverse(VPANEL vguiPanel, int x, int y, bool traversePopups) = 0;
virtual void OnChildAdded(VPANEL vguiPanel, VPANEL child) = 0;
virtual void OnSizeChanged(VPANEL vguiPanel, int newWide, int newTall) = 0;
virtual void InternalFocusChanged(VPANEL vguiPanel, bool lost) = 0;
virtual bool RequestInfo(VPANEL vguiPanel, KeyValues *outputData) = 0;
virtual void RequestFocus(VPANEL vguiPanel, int direction = 0) = 0;
virtual bool RequestFocusPrev(VPANEL vguiPanel, VPANEL existingPanel) = 0;
virtual bool RequestFocusNext(VPANEL vguiPanel, VPANEL existingPanel) = 0;
virtual VPANEL GetCurrentKeyFocus(VPANEL vguiPanel) = 0;
virtual int GetTabPosition(VPANEL vguiPanel) = 0;
// used by ISurface to store platform-specific data
virtual SurfacePlat *Plat(VPANEL vguiPanel) = 0;
virtual void SetPlat(VPANEL vguiPanel, SurfacePlat *Plat) = 0;
// returns a pointer to the vgui controls baseclass Panel *
// destinationModule needs to be passed in to verify that the returned Panel * is from the same module
// it must be from the same module since Panel * vtbl may be different in each module
virtual Panel *GetPanel(VPANEL vguiPanel, const char *destinationModule) = 0;
virtual bool IsEnabled(VPANEL vguiPanel) = 0;
virtual void SetEnabled(VPANEL vguiPanel, bool state) = 0;
// Used by the drag/drop manager to always draw on top
virtual bool IsTopmostPopup(VPANEL vguiPanel) = 0;
virtual void SetTopmostPopup(VPANEL vguiPanel, bool state) = 0;
virtual void SetMessageContextId(VPANEL vguiPanel, int nContextId) = 0;
virtual int GetMessageContextId(VPANEL vguiPanel) = 0;
virtual const void* *GetUnpackStructure(VPANEL vguiPanel) const = 0; // DmxElementUnpackStructure_t
virtual void OnUnserialized(VPANEL vguiPanel, void* *pElement) = 0; // CDmxElemen
// sibling pins
virtual void SetSiblingPin(VPANEL vguiPanel, VPANEL newSibling, void* iMyCornerToPin = 0, void* iSiblingCornerToPinTo = 0) = 0; // bytes
};
CVMTHookManager *panel_vmt;
if (panel_vmt = new CVMTHookManager((DWORD**)ipanel_ptr))
print(COLOR_GREEN, "IPanel VMT Hooked!\n");
else
Warning("Failed to hook IPanel VMT!\n");
if (oPaintTraverse = (PaintTraverseFn)panel_vmt->dwHookMethod((DWORD)hooked_PaintTraverse, 41))
print(COLOR_GREEN, "PaintTraverse hooked!\n");
else
Warning("Failed to hook PaintTraverse!\n");
void __stdcall hooked_PaintTraverse(VPANEL panel, bool forceRepaint, bool allowForce) {
oPaintTraverse(panel, forceRepaint, allowForce);
const char *pszPanel = ipanel_ptr->GetName( panel );
if(!strcmp(pszPanel, "MatSystemTopPanel") ) {
//isurface_ptr->DrawLine(20,20,400,400);
Msg("mstp\n");
}
}
IPanel *ipanel_ptr;
CreateInterfaceFn vInterface = (CreateInterfaceFn)GetProcAddress(GetModuleHandleA("vgui2.dll"), "CreateInterface");
ipanel_ptr = (IPanel*)vInterface("VGUI_Panel009", 0);
if (!ipanel_ptr)
Warning("ERROR: Failed to get IPanel!\n");
else
print(COLOR_GREEN, "IPanel found! 0x%p\n", ipanel_ptr);