From: <ar...@us...> - 2003-02-22 04:25:37
|
Update of /cvsroot/decaldev/source/Decal In directory sc8-pr-cvs1:/tmp/cvs-serv2660/Decal Modified Files: ACHooks.cpp ACHooks.h Log Message: GetSkillInfo, GetAttributeInfo. GetVitalInfo Hook Code Commited For Cynica_L Index: ACHooks.cpp =================================================================== RCS file: /cvsroot/decaldev/source/Decal/ACHooks.cpp,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** ACHooks.cpp 11 Feb 2003 22:19:29 -0000 1.38 --- ACHooks.cpp 22 Feb 2003 04:25:34 -0000 1.39 *************** *** 82,88 **** m_bGetSkill = false; m_bLogout = false; ! m_bSecureTrade_Add = false; ! m_bSecureTrade_Add_Off1 = false; ! m_bSecureTrade_Add_Off2 = false; m_Hooks = 0; memset(m_HooksEx, 0, sizeof(m_HooksEx)); --- 82,92 ---- m_bGetSkill = false; m_bLogout = false; ! m_bSecureTrade_Add = false; ! m_bSecureTrade_Add_Off1 = false; ! m_bSecureTrade_Add_Off2 = false; ! m_bGetSkillInfo = false; ! m_bGetAttributeInfo = false; ! m_bGetVitalInfo = false; ! m_Hooks = 0; memset(m_HooksEx, 0, sizeof(m_HooksEx)); *************** *** 549,552 **** --- 553,617 ---- + if (QueryMemLoc(BSTRT( "GetSkillInfo" ), &Val) == S_OK) + { + m_lGetSkillInfo = Val; + m_bGetSkillInfo = true; + } + + if (QueryMemLoc(BSTRT( "GetVitalInfo" ), &Val) == S_OK) + { + m_lGetVitalInfo = Val; + m_bGetVitalInfo = true; + } + + if (QueryMemLoc(BSTRT( "GetAttributeInfo" ), &Val) == S_OK) + { + m_lGetAttributeInfo = Val; + m_bGetAttributeInfo = true; + } + + + /* I don't believe the vTable is used for any of these, however, if it becomes necessary + the functionality is here to a) detect the problem (crash at 0xFF......), and fix it + without requiring a complete update to Decal */ + if (QueryMemLoc(BSTRT( "GetSkillInfo_vT" ), &Val) == S_OK) + { + m_lGetSkillInfo_vT = Val; + } + else + { + m_lGetSkillInfo_vT = 0xFF111111; + } + + if (QueryMemLoc(BSTRT( "GetVitalInfo_vT" ), &Val) == S_OK) + { + m_lGetVitalInfo_vT = Val; + } + else + { + m_lGetVitalInfo_vT = 0xFF222222; + } + + if (QueryMemLoc(BSTRT( "GetAttributeInfo_vT" ), &Val) == S_OK) + { + m_lGetAttributeInfo_vT = Val; + } + else + { + m_lGetAttributeInfo_vT = 0xFF333333; + } + + if (m_lVitalBase) { + if (m_bGetSkillInfo) { + SetHookEx(eSkillInfo); + } + if (m_bGetVitalInfo) { + SetHookEx(eVitalInfo); + } + if (m_bGetAttributeInfo) { + SetHookEx(eAttributeInfo); + } + } + DWORD dwOldProtect; if( QueryMemLoc( BSTRT( "OnChatText" ), &Val ) == S_OK ) *************** *** 1013,1018 **** if( m_bDecalRef ) { ! CComPtr< IPSite > pSite; ! if( m_pDecal->get_Object( _bstr_t( "services\\DecalPlugins.InjectService\\site" ), __uuidof( IPSite ), reinterpret_cast< void ** >( &pSite ) ) == S_OK ) { if( pSite->get_Focus( pVal ) != S_OK ) --- 1078,1083 ---- if( m_bDecalRef ) { ! CComPtr< IPluginSite > pSite; ! if( m_pDecal->get_Object( _bstr_t( "services\\DecalPlugins.InjectService\\site" ), __uuidof( IPluginSite ), reinterpret_cast< void ** >( &pSite ) ) == S_OK ) { if( pSite->get_Focus( pVal ) != S_OK ) *************** *** 1644,1647 **** --- 1709,1928 ---- return S_FALSE; } + + + HRESULT cACHooks::GetSkillInfo(eSkill SkillID, struct qSkill *Skill) { + int ( __fastcall *Internal_GetSkillInfo )( void *, int, int, struct qSkill * ); + + if (!m_bGetSkillInfo) { + return E_FAIL; + } + + if (SkillID > 50) { + SkillID = (eSkill)(SkillID - 50); + } + if ((SkillID < 1) || (SkillID > 50)) { + return E_INVALIDARG; + } + + + Skill->vTable = m_lGetSkillInfo_vT; + + Internal_GetSkillInfo = reinterpret_cast< int (__fastcall*)(void *, int, int, struct qSkill *) >(m_lGetSkillInfo); + if (Internal_GetSkillInfo(*(void **)m_lVitalBase, 0, SkillID, Skill)) { + return S_OK; + } + return E_FAIL; + } + + HRESULT cACHooks::GetAttributeInfo(eAttribute AttributeID, struct qAttribute *Attribute) { + int (__fastcall *Internal_GetAttributeInfo)(void *, int, int, struct qAttribute *); + + if (!m_bGetAttributeInfo) { + return E_FAIL; + } + + if (AttributeID > 6) { + AttributeID = (eAttribute)(AttributeID - 6); + } + if ((AttributeID < 1) || (AttributeID > 6)) { + return E_INVALIDARG; + } + + Attribute->vTable = m_lGetAttributeInfo_vT; + + Internal_GetAttributeInfo = reinterpret_cast< int (__fastcall*)(void *, int, int, struct qAttribute *) >(m_lGetAttributeInfo); + if (Internal_GetAttributeInfo(*(void **)m_lVitalBase, 0, AttributeID, Attribute)) { + return S_OK; + } + return E_FAIL; + } + + HRESULT cACHooks::GetVitalInfo(eVital VitalID, struct qVital *Vital) { + int (__fastcall *Internal_GetVitalInfo)(void *, int, int, struct qVital *); + + if (!m_bGetVitalInfo) { + return E_FAIL; + } + + switch (VitalID) { + case eCurrentHealth: + case eMaximumHealth: + case eBaseHealth: + VitalID = eCurrentHealth; + break; + case eCurrentStamina: + case eMaximumStamina: + case eBaseStamina: + VitalID = eCurrentStamina; + break; + case eCurrentMana: + case eMaximumMana: + case eBaseMana: + VitalID = eCurrentMana; + break; + default: + return E_INVALIDARG; + } + + + Vital->vTable = m_lGetVitalInfo_vT; + + Internal_GetVitalInfo = reinterpret_cast< int (__fastcall*)(void *, int, int, struct qVital *) >(m_lGetVitalInfo); + if (Internal_GetVitalInfo(*(void **)m_lVitalBase, 0, VitalID, Vital)) { + return S_OK; + } + return E_FAIL; + } + + + STDMETHODIMP cACHooks::get_SkillTrainLevel( eSkill SkillID, eTrainLevel *pVal ) + { + struct qSkill Skill; + HRESULT hr; + hr = GetSkillInfo(SkillID, &Skill); + if (FAILED(hr)) { + return hr; + } + + *pVal = Skill.Trained; + + return S_OK; + } + + STDMETHODIMP cACHooks::get_SkillTotalXP( eSkill SkillID, int *pVal ) + { + struct qSkill Skill; + HRESULT hr; + hr = GetSkillInfo(SkillID, &Skill); + if (FAILED(hr)) { + return hr; + } + + *pVal = Skill.TotalXP; + + return S_OK; + } + + STDMETHODIMP cACHooks::get_SkillFreePoints( eSkill SkillID, int *pVal ) + { + struct qSkill Skill; + HRESULT hr; + hr = GetSkillInfo(SkillID, &Skill); + if (FAILED(hr)) { + return hr; + } + + *pVal = Skill.FreePoints; + + return S_OK; + } + + + STDMETHODIMP cACHooks::get_SkillClicks( eSkill SkillID, int *pVal ) + { + struct qSkill Skill; + HRESULT hr; + hr = GetSkillInfo(SkillID, &Skill); + if (FAILED(hr)) { + return hr; + } + + *pVal = Skill.Clicks; + + return S_OK; + } + + STDMETHODIMP cACHooks::get_AttributeClicks( eAttribute AttributeID, int *pVal ) + { + struct qAttribute Attribute; + HRESULT hr; + hr = GetAttributeInfo(AttributeID, &Attribute); + if (FAILED(hr)) { + return hr; + } + + *pVal = Attribute.Clicks; + + return S_OK; + } + + STDMETHODIMP cACHooks::get_AttributeTotalXP( eAttribute AttributeID, int *pVal ) + { + struct qAttribute Attribute; + HRESULT hr; + hr = GetAttributeInfo(AttributeID, &Attribute); + if (FAILED(hr)) { + return hr; + } + + *pVal = Attribute.TotalXP; + + return S_OK; + } + + + STDMETHODIMP cACHooks::get_AttributeStart( eAttribute AttributeID, int *pVal ) + { + struct qAttribute Attribute; + HRESULT hr; + hr = GetAttributeInfo(AttributeID, &Attribute); + if (FAILED(hr)) { + return hr; + } + + *pVal = Attribute.Start; + + return S_OK; + } + + STDMETHODIMP cACHooks::get_VitalClicks( eVital VitalID, int *pVal ) + { + struct qVital Vital; + HRESULT hr; + hr = GetVitalInfo(VitalID, &Vital); + if (FAILED(hr)) { + return hr; + } + + *pVal = Vital.Clicks; + + return S_OK; + } + + STDMETHODIMP cACHooks::get_VitalTotalXP( eVital VitalID, int *pVal ) + { + struct qVital Vital; + HRESULT hr; + hr = GetVitalInfo(VitalID, &Vital); + if (FAILED(hr)) { + return hr; + } + + *pVal = Vital.TotalXP; + + return S_OK; + } + + void cACHooks::SetHookEx( eAvailableHooksEx HookID ) Index: ACHooks.h =================================================================== RCS file: /cvsroot/decaldev/source/Decal/ACHooks.h,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** ACHooks.h 11 Feb 2003 22:19:28 -0000 1.32 --- ACHooks.h 22 Feb 2003 04:25:34 -0000 1.33 *************** *** 5,16 **** #include "DecalManager.h" #include "DecalCP.h" - // .NET vs VC6.0 Compiler Config - #if _MSC_VER > 1200 // .NET - #import "..\Include\Inject.tlb" - #define IPSite DecalPlugins::IPluginSite - #else // Not .Net #include "..\inject\Inject.h" - #define IPSite IPluginSite - #endif struct sMemoryLocation --- 5,9 ---- *************** *** 28,31 **** --- 21,51 ---- }; + struct qSkill { + long vTable; + enum eTrainLevel Trained; + int TotalXP; + int FreePoints; + int Clicks; + int unk1; + int unk2; /* float? percent of total? */ + float unk3; + }; + + struct qVital { + long vTable; + int Clicks; + int unk1; + int TotalXP; + int unk2; + }; + + struct qAttribute { + long vTable; + int Clicks; + int Start; + int TotalXP; + }; + + struct qPointerList { *************** *** 64,67 **** --- 84,91 ---- private: + HRESULT GetSkillInfo(eSkill SkillID, struct qSkill *Skill); + HRESULT GetAttributeInfo(eAttribute AttributeID, struct qAttribute *Attribute); + HRESULT GetVitalInfo(eVital VitalID, struct qVital *Vital); + long* GetCs(long offs=0) ; *************** *** 182,185 **** --- 206,216 ---- long m_lSecureTrade_Add_Off2; + bool m_bGetSkillInfo; + long m_lGetSkillInfo, m_lGetSkillInfo_vT; + bool m_bGetAttributeInfo; + long m_lGetAttributeInfo, m_lGetAttributeInfo_vT; + bool m_bGetVitalInfo; + long m_lGetVitalInfo, m_lGetVitalInfo_vT; + bool m_bChatColor; long m_lChatColor; *************** *** 244,246 **** --- 275,289 ---- STDMETHOD(SetDecal)(IUnknown *pDecal); STDMETHOD(SecureTrade_Add)(long ItemID, VARIANT_BOOL *pVal); + + STDMETHOD(get_SkillTrainLevel)( eSkill SkillID, eTrainLevel *pVal ); + STDMETHOD(get_SkillTotalXP)( eSkill SkillID, int *pVal ); + STDMETHOD(get_SkillFreePoints)( eSkill SkillID, int *pVal ); + STDMETHOD(get_SkillClicks)( eSkill SkillID, int *pVal ); + + STDMETHOD(get_AttributeClicks)( eAttribute AttributeID, int *pVal ); + STDMETHOD(get_AttributeTotalXP)( eAttribute AttributeID, int *pVal ); + STDMETHOD(get_AttributeStart)( eAttribute AttributeID, int *pVal ); + + STDMETHOD(get_VitalClicks)( eVital VitalID, int *pVal ); + STDMETHOD(get_VitalTotalXP)( eVital VitalID, int *pVal ); }; |