[Stats] Playerstats reuploading initial commit
This commit is contained in:
parent
1051a0b019
commit
451db1d986
@ -38,6 +38,7 @@ namespace Components
|
|||||||
Loader::Register(new News());
|
Loader::Register(new News());
|
||||||
Loader::Register(new Node());
|
Loader::Register(new Node());
|
||||||
Loader::Register(new RCon());
|
Loader::Register(new RCon());
|
||||||
|
Loader::Register(new Stats());
|
||||||
Loader::Register(new Menus());
|
Loader::Register(new Menus());
|
||||||
Loader::Register(new Toast());
|
Loader::Register(new Toast());
|
||||||
Loader::Register(new Party());
|
Loader::Register(new Party());
|
||||||
|
@ -106,3 +106,4 @@ namespace Components
|
|||||||
#include "Modules/StructuredData.hpp"
|
#include "Modules/StructuredData.hpp"
|
||||||
#include "Modules/ConnectProtocol.hpp"
|
#include "Modules/ConnectProtocol.hpp"
|
||||||
#include "Modules/StartupMessages.hpp"
|
#include "Modules/StartupMessages.hpp"
|
||||||
|
#include "Modules/Stats.hpp"
|
||||||
|
80
src/Components/Modules/Stats.cpp
Normal file
80
src/Components/Modules/Stats.cpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#include "STDInclude.hpp"
|
||||||
|
|
||||||
|
namespace Components
|
||||||
|
{
|
||||||
|
void Stats::SendStats()
|
||||||
|
{
|
||||||
|
// check if we're connected to a server...
|
||||||
|
if (*reinterpret_cast<std::uint32_t*>(0xB2C540) >= 7)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 7; i++)
|
||||||
|
{
|
||||||
|
Game::Com_Printf(0, "Sending stat packet %i to server.\n", i);
|
||||||
|
|
||||||
|
// alloc
|
||||||
|
Game::msg_t msg;
|
||||||
|
memset(&msg, 0, sizeof(Game::msg_t));
|
||||||
|
|
||||||
|
char* buffer = new char[2048];
|
||||||
|
memset(buffer, 0, 2048);
|
||||||
|
|
||||||
|
// init
|
||||||
|
Game::MSG_Init(&msg, buffer, 2048);
|
||||||
|
Game::MSG_WriteString(&msg, "stats");
|
||||||
|
|
||||||
|
// get stat buffer
|
||||||
|
char *statbuffer = nullptr;
|
||||||
|
if (Utils::Hook::Call<int(int)>(0x444CA0)(0))
|
||||||
|
{
|
||||||
|
statbuffer = &Utils::Hook::Call<char *(int)>(0x4C49F0)(0)[1240 * i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Client port?
|
||||||
|
Game::MSG_WriteShort(&msg, *(short*)0xA1E878);
|
||||||
|
|
||||||
|
// Stat packet index
|
||||||
|
Game::MSG_WriteByte(&msg, i);
|
||||||
|
|
||||||
|
// calculate packet size
|
||||||
|
size_t size = 8192 - (i * 1240);
|
||||||
|
if (size > 1240)
|
||||||
|
size = 1240;
|
||||||
|
|
||||||
|
// write stat packet data
|
||||||
|
if (statbuffer)
|
||||||
|
{
|
||||||
|
Game::MSG_WriteData(&msg, statbuffer, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
// send statpacket
|
||||||
|
Game::NET_OutOfBandData(Game::NS_CLIENT, *(Game::netadr_t*)0xA1E888, msg.data, msg.cursize);
|
||||||
|
|
||||||
|
// free memory
|
||||||
|
delete[] buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Stats::UpdateClasses(UIScript::Token token)
|
||||||
|
{
|
||||||
|
SendStats();
|
||||||
|
}
|
||||||
|
|
||||||
|
Stats::Stats()
|
||||||
|
{
|
||||||
|
// This UIScript should be added in the onClose code of the cac_popup menu,
|
||||||
|
// so everytime the create-a-class window is closed, and a client is connected
|
||||||
|
// to a server, the stats data of the client will be reuploaded to the server.
|
||||||
|
// allowing the player to change their classes while connected to a server.
|
||||||
|
UIScript::Add("UpdateClasses", Stats::UpdateClasses);
|
||||||
|
|
||||||
|
// Allow playerdata to be changed while connected to a server
|
||||||
|
Utils::Hook::Set<BYTE>(0x4376FD, 0xEB);
|
||||||
|
|
||||||
|
// ToDo: Allow playerdata changes in setPlayerData UI script.
|
||||||
|
}
|
||||||
|
Stats::~Stats()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
20
src/Components/Modules/Stats.hpp
Normal file
20
src/Components/Modules/Stats.hpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Components
|
||||||
|
{
|
||||||
|
class Stats : public Component
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Stats();
|
||||||
|
~Stats();
|
||||||
|
|
||||||
|
#if defined(DEBUG) || defined(FORCE_UNIT_TESTS)
|
||||||
|
const char* getName() override { return "Stats"; };
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void UpdateClasses(UIScript::Token token);
|
||||||
|
static void SendStats();
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
@ -151,6 +151,8 @@ namespace Game
|
|||||||
MSG_WriteByte_t MSG_WriteByte = MSG_WriteByte_t(0x48C520);
|
MSG_WriteByte_t MSG_WriteByte = MSG_WriteByte_t(0x48C520);
|
||||||
MSG_WriteData_t MSG_WriteData = MSG_WriteData_t(0x4F4120);
|
MSG_WriteData_t MSG_WriteData = MSG_WriteData_t(0x4F4120);
|
||||||
MSG_WriteLong_t MSG_WriteLong = MSG_WriteLong_t(0x41CA20);
|
MSG_WriteLong_t MSG_WriteLong = MSG_WriteLong_t(0x41CA20);
|
||||||
|
MSG_WriteShort_t MSG_WriteShort = MSG_WriteShort_t(0x503B90);
|
||||||
|
MSG_WriteString_t MSG_WriteString = MSG_WriteString_t(0x463820);
|
||||||
MSG_WriteBitsCompress_t MSG_WriteBitsCompress = MSG_WriteBitsCompress_t(0x4319D0);
|
MSG_WriteBitsCompress_t MSG_WriteBitsCompress = MSG_WriteBitsCompress_t(0x4319D0);
|
||||||
MSG_ReadByte_t MSG_ReadByte = MSG_ReadByte_t(0x4C1C20);
|
MSG_ReadByte_t MSG_ReadByte = MSG_ReadByte_t(0x4C1C20);
|
||||||
MSG_ReadBitsCompress_t MSG_ReadBitsCompress = MSG_ReadBitsCompress_t(0x4DCC30);
|
MSG_ReadBitsCompress_t MSG_ReadBitsCompress = MSG_ReadBitsCompress_t(0x4DCC30);
|
||||||
|
@ -394,6 +394,12 @@ namespace Game
|
|||||||
typedef void(__cdecl * MSG_WriteLong_t)(msg_t *msg, int c);
|
typedef void(__cdecl * MSG_WriteLong_t)(msg_t *msg, int c);
|
||||||
extern MSG_WriteLong_t MSG_WriteLong;
|
extern MSG_WriteLong_t MSG_WriteLong;
|
||||||
|
|
||||||
|
typedef void(*MSG_WriteShort_t)(msg_t* msg, short s);
|
||||||
|
extern MSG_WriteShort_t MSG_WriteShort;
|
||||||
|
|
||||||
|
typedef void(*MSG_WriteString_t)(msg_t* msg, const char *str);
|
||||||
|
extern MSG_WriteString_t MSG_WriteString;
|
||||||
|
|
||||||
typedef int(__cdecl * MSG_WriteBitsCompress_t)(bool trainHuffman, const char *from, char *to, int size);
|
typedef int(__cdecl * MSG_WriteBitsCompress_t)(bool trainHuffman, const char *from, char *to, int size);
|
||||||
extern MSG_WriteBitsCompress_t MSG_WriteBitsCompress;
|
extern MSG_WriteBitsCompress_t MSG_WriteBitsCompress;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user