ты наркоман? я тебе в другом треде писал. https://yougame.biz/threads/245552/#post-2543567Там в ИДЕ адрес сделали зелёным. Есть ещё способы посмотреть на функу?
а почему у меня account_id лежит не там где надо?(на скрине на 0x40)можно на рантайме в любой момент лочить/анлочить
(сурсы ксго и тф2 в помощь для реверса:
Пожалуйста, авторизуйтесь для просмотра ссылки.Пожалуйста, авторизуйтесь для просмотра ссылки.)
C++:export void UnlockDotaPlus()//invoke from main thread { const auto* SOCachePtr = GCClient::GetInstance()->GetInventorySOCache(); if (SOCachePtr) { auto PlusCache = SOCachePtr->GetPlusAccountCache(); Logger::LogInfo("SOTypeCache GameAccountPlus Cache 0x%p\n", PlusCache); if (PlusCache) { for (const auto& objs = PlusCache->GetObjects(); const auto & obj : objs) { if (obj->IsGameAccountPlus()) { Logger::LogInfo("SOTypeCache GameAccountPlus 0x%p\n", obj); auto& accountProto = static_cast<CDOTAGameAccountPlus*>(obj)->GetProto(); accountProto.set_plus_flags(0); accountProto.set_plus_status(1);//0 = lock, 1 = unlock GCClient::GetInstance()-> DispatchSOUpdate( SOCachePtr->GetOwner(), obj, ESOCacheEvent::eSOCacheEvent_Incremental ); return; } } Logger::LogError("UnlockDotaPlus: Could not get GameAccountPlus from cache"); } else Logger::LogError("UnlockDotaPlus: PlusCache is nullptr"); } else Logger::LogError("UnlockDotaPlus: SOCache is nullptr"); throw std::runtime_error{"UnlockDotaPlus -> failed to unlock dota plus."}; }
class CDOTAGameAccountPlus : public CGCClientSharedObject
{
public:
auto GetPlusAccountCache( ) {
return (CSODOTAGameAccountPlus*)(this + 0x8);
}
};
///
auto plusc = g_pLocalInventory->m_pSharedObjectCache->m_pAccountPlus->GetPlusAccountCache();
std::cout << plusc->account_id( ) << std::endl;
plusc->set_plus_flags( 0 );
plusc->set_plus_status( 1 );
g_pLocalInventory->SOUpdated( g_pLocalInventory->m_pSOID, g_pLocalInventory->m_pSharedObjectCache->m_pAccountPlus, eSOCacheEvent_Incremental );
ну во-первых к this нельзя прибавлять(точнее оно работает не так как тебе бы хотелось), можно прибавлять только к (std::uintptr_t)this. хуйней не занимайся и юзай Memberа почему у меня account_id лежит не там где надо?(на скрине на 0x40)
Посмотреть вложение 223345
а тут он вообще next_payment_date, вместо account_id поля (протобаф файлы новые)
Посмотреть вложение 223346
на скрине - plusc переменная из кода ниже
(account_id( ) - 0 выводит)C++:class CDOTAGameAccountPlus : public CGCClientSharedObject { public: auto GetPlusAccountCache( ) { return (CSODOTAGameAccountPlus*)(this + 0x8); } }; /// auto plusc = g_pLocalInventory->m_pSharedObjectCache->m_pAccountPlus->GetPlusAccountCache(); std::cout << plusc->account_id( ) << std::endl; plusc->set_plus_flags( 0 ); plusc->set_plus_status( 1 ); g_pLocalInventory->SOUpdated( g_pLocalInventory->m_pSOID, g_pLocalInventory->m_pSharedObjectCache->m_pAccountPlus, eSOCacheEvent_Incremental );
и вообще правильно ли я делаю вот так? не крашит но и ничего не происходит
class NormalClass
{
public:
template<class T>
auto& Member(std::ptrdiff_t offset) noexcept
{
return *reinterpret_cast<T*>(reinterpret_cast<std::uintptr_t>(this) + offset);
}
template<class T>
const auto& Member(std::ptrdiff_t offset) const noexcept
{
return *reinterpret_cast<const T*>(reinterpret_cast<std::uintptr_t>(this) + offset);
}
};
...
(uslovno) auto& shit: return Member<CSODOTAGameAccountPlus>(0x8);
/*c++23 P0847R7 imba ficha
partial support(modules support missing) poka chto v MSVC, a drugie kompilatori voobshe xuy sosut kak obichno
class NormalClass
{
public:
template<class T, class Self>
auto& Member(this Self&& self, std::ptrdiff_t offset) noexcept
{
return *reinterpret_cast<std::conditional_t<std::is_const_v<std::remove_reference_t<Self>>, const T, T>*>
(reinterpret_cast<std::uintptr_t>(&self) + offset);
}
};
class CDOTAGameAccountPlus : NormalClass
{
public:
auto& GetPlusAccountCache(this auto&& self)
{
return self.Member<int>(0x8);
}
};
*/
а какие ещё листенеры есть?ну во-первых к this нельзя прибавлять(точнее оно работает не так как тебе бы хотелось), можно прибавлять только к (std::uintptr_t)this. хуйней не занимайся и юзай Member
во-вторых попробуй не онли инвентарь оповещать а все листенеры в гсклиентеC++:class NormalClass { public: template<class T> auto& Member(std::ptrdiff_t offset) noexcept { return *reinterpret_cast<T*>(reinterpret_cast<std::uintptr_t>(this) + offset); } template<class T> const auto& Member(std::ptrdiff_t offset) const noexcept { return *reinterpret_cast<const T*>(reinterpret_cast<std::uintptr_t>(this) + offset); } }; ... (uslovno) auto& shit: return Member<CSODOTAGameAccountPlus>(0x8); /*c++23 P0847R7 imba ficha partial support(modules support missing) poka chto v MSVC, a drugie kompilatori voobshe xuy sosut kak obichno class NormalClass { public: template<class T, class Self> auto& Member(this Self&& self, std::ptrdiff_t offset) noexcept { return *reinterpret_cast<std::conditional_t<std::is_const_v<std::remove_reference_t<Self>>, const T, T>*> (reinterpret_cast<std::uintptr_t>(&self) + offset); } }; class CDOTAGameAccountPlus : NormalClass { public: auto& GetPlusAccountCache(this auto&& self) { return self.Member<int>(0x8); } }; */
class CDOTAGCClientSystem : public CSharedObjectListener {
public:
char pad_0000[192]; // 0x0
uint64_t m_pSteamUser; // 0xC0
};
auto plus_cache = g_pLocalInventory->m_pSharedObjectCache->m_pAccountPlus->GetCache();
plus_cache->set_plus_flags( 0 );
plus_cache->set_plus_status( 1 );
g_pLocalInventory->SOUpdated( g_pLocalInventory->m_pSOID, g_pLocalInventory->m_pSharedObjectCache->m_pAccountPlus, eSOCacheEvent_Incremental );
g_pGCClientSystem->SOUpdated( g_pLocalInventory->m_pSOID, g_pLocalInventory->m_pSharedObjectCache->m_pAccountPlus, eSOCacheEvent_Incremental );
WARNING: Local content might be corrupt or missing files
C:\buildworker\source2_dota_rel_2019_win64\build\src\filesystem\basefilesystem.cpp (6656) : Assertion Failed in function CBaseFileSystem::MarkContentCorrupt():
false
Content being marked corrupt. bMissingFilesOnly = false, pFile specified as 'NULL', reason: 'NULL'
Sending Steam API content notification
Failed to initialize periodic resource schema. Duplicate periodic resource name 'ti6_arcana_vote'
Инструкция точки останова (оператор __debugbreak() или аналогичный вызов) выполнена в dota2.exe.
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz