Пользователь
- Статус
- Оффлайн
- Регистрация
- 4 Июл 2018
- Сообщения
- 630
- Реакции
- 91
How to play with Panorama on Community servers
If you ever try connect to some servers you will see this error in console:
First i thought that i can just hook IVEngineClient::GetClientVersion, but no results. Then i reversed and saw that game use stored value, not that method.
So i wrote this code and it works!
Code:
But since i've worked with network messages before it was easy for me.
We should hook SendNetMsg(40 index in INetChannel), compare INetMessage name to "CCLCMsg_ClientInfo", and replace
Code:
Code:
Code:
If you ever try connect to some servers you will see this error in console:

First i thought that i can just hook IVEngineClient::GetClientVersion, but no results. Then i reversed and saw that game use stored value, not that method.
So i wrote this code and it works!
Code:
- auto engine_dll = (DWORD)GetModuleHandleA("engine.dll");
- auto& g_iClientVersion = *(int*)(*(DWORD*)(engine_dll + 0x1B2FA9));
- g_iClientVersion = 13638;

But since i've worked with network messages before it was easy for me.
We should hook SendNetMsg(40 index in INetChannel), compare INetMessage name to "CCLCMsg_ClientInfo", and replace
Пожалуйста, авторизуйтесь для просмотра ссылки.
to 0x6DB42B5(dumped value in default cs:go)Code:
- class INetMessage
- {
- public:
- virtual ~INetMessage() {};
- virtual void SetNetChannel(void* netchan) = 0;
- virtual void SetReliable(bool state) = 0;
- virtual bool Process(void) = 0;
- virtual bool ReadFromBuffer(bf_read &buffer) = 0;
- virtual bool WriteToBuffer(bf_write &buffer) = 0;
- virtual bool IsReliable(void) const = 0;
- virtual int GetType(void) const = 0;
- virtual int GetGroup(void) const = 0;
- virtual const char *GetName(void) const = 0;
- virtual void *GetNetChannel(void) const = 0;
- virtual const char *ToString(void) const = 0;
- };
- class cnetmsg_clientinfo {
- private:
- char __PAD0[0x8];
- public:
- uint32_t send_table_crc;
- uint32_t server_count;
- bool is_hltv;
- bool is_replay;
- uint32_t friends_id;
- };
- class CNetMessagePB : public INetMessage, public T {};
- using cclcmsg_clientinfo_t = CNetMessagePB<cnetmsg_clientinfo>;
Code:
- if (strcmp(name, "CCLCMsg_ClientInfo") == 0)
- {
- auto clientinfo_msg = (cclcmsg_clientinfo_t*)msg;
- clientinfo_msg->send_table_crc = 0x6DB42B5;
- }
Code:
- if (strcmp(name, "CCLCMsg_FileCRCCheck") == 0)
- {
- return false;
- }