tekno_uttv2/ultimateteknotool.v2/windows_playerspage.cpp
2020-12-31 15:35:46 +03:00

135 lines
4.5 KiB
C++

#include "pch.h"
#include "windows_playerspage.h"
#include "TextConvertors.h"
#include "iw5mp_players_functions.h"
#include "compiletime_XORstring.h"
static CONSTEXPRENCRYPTSTRW(str18, L"18", 0x13FA);
static CONSTEXPRENCRYPTSTRW(str_initial, L"initial", 0x12FA);
static CONSTEXPRENCRYPTSTRW(str_refresh, L"refresh", 0x3031);
static CONSTEXPRENCRYPTSTRW(str_kick, L"kick", 0x5690);
#define DECRYPT_18 DECRYPTCONSTENCSTRW(str18, sizeof(L"18") / sizeof(wchar_t), 0x13FA)
#define DECRYPT_initial DECRYPTCONSTENCSTRW(str_initial, sizeof(L"initial") / sizeof(wchar_t), 0x12FA)
#define DECRYPT_refresh DECRYPTCONSTENCSTRW(str_refresh, sizeof(L"refresh") / sizeof(wchar_t), 0x3031)
#define DECRYPT_kick DECRYPTCONSTENCSTRW(str_kick, sizeof(L"kick") / sizeof(wchar_t), 0x5690)
namespace windows_playerspage
{
CWindow_edit playersDataOutput;
CWindow_button forceRefresh;
CWindow_edit player_index;
CWindow_button kickbutton;
wchar_t ws_index[wstringSzFromSizeof(sizeof(L"18"))] = { 0 };
wchar_t ws_initial[wstringSzFromSizeof(sizeof(L"initial"))] = { 0 };
wchar_t ws_refresh[wstringSzFromSizeof(sizeof(L"refresh"))] = { 0 };
wchar_t ws_kick[wstringSzFromSizeof(sizeof(L"kick"))] = { 0 };
void SetText(const wchar_t* text)
{
::SendMessageW(playersDataOutput.hwnd, WM_SETTEXT, 0 /*not used */, reinterpret_cast<LPARAM>(text));
}
static bool shown = false;
static uint32_t currentPlayerIndex = 20;
};
void windows_playerspage::Build(CWindowsBuilder& builder, int left, int width, int top, int height, HWND hwnd)
{
constexpr DWORD EDITSTYLE = WS_CHILD & ~WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY;
constexpr DWORD FlatButtonStyleInvisble = (WS_CHILD & ~WS_VISIBLE) | BS_PUSHBUTTON | BS_CENTER | BS_FLAT;
constexpr DWORD NewEditStyle_Invisible = WS_CHILD & ~WS_VISIBLE | WS_BORDER;
builder.ChangeParentHWND(hwnd);
builder.ChangeLeftPos(left);
builder.ChangeTopPos(top);
int rwidth = width - width / 8;
int rheight = height - height / 4;
builder.ChangeHeight(rheight);
builder.ChangeWidth(rwidth);
builder.ChangeStyle(EDITSTYLE);
copy_string_w((wchar_t*)ws_initial, wstringSzFromSizeof(sizeof(ws_initial)), DECRYPT_initial, wstringSzFromSizeof(sizeof(L"initial")));
builder.ChangeTextP(ws_initial);
playersDataOutput.Visit(&builder);
builder.ChangeTopPos(builder.build_top_pos + builder.build_height + 5);
rwidth = 70;
rheight = 20;
builder.ChangeHeight(rheight);
builder.ChangeWidth(rwidth);
builder.ChangeStyle(FlatButtonStyleInvisble);
copy_string_w((wchar_t*)ws_refresh, wstringSzFromSizeof(sizeof(ws_refresh)), DECRYPT_refresh, wstringSzFromSizeof(sizeof(L"refresh")));
builder.ChangeTextP(ws_refresh);
forceRefresh.Visit(&builder);
rwidth = 30;
builder.ChangeStyle(NewEditStyle_Invisible);
builder.ChangeLeftPos(builder.build_left_pos + builder.build_width + 5);
copy_string_w((wchar_t*)ws_index, wstringSzFromSizeof(sizeof(ws_index)), DECRYPT_18, wstringSzFromSizeof(sizeof(L"18")));
builder.ChangeTextP(ws_index);
player_index.Visit(&builder);
rwidth = 60;
builder.ChangeStyle(FlatButtonStyleInvisble);
builder.ChangeLeftPos(builder.build_left_pos + builder.build_width + 5);
copy_string_w((wchar_t*)ws_kick, wstringSzFromSizeof(sizeof(ws_kick)), DECRYPT_kick, wstringSzFromSizeof(sizeof(L"kick")));
builder.ChangeTextP(ws_kick);
kickbutton.Visit(&builder);
}
void windows_playerspage::ApplyFonts(CWindowsFontApplier& fontappl)
{
playersDataOutput.Visit(&fontappl);
forceRefresh.Visit(&fontappl);
kickbutton.Visit(&fontappl);
player_index.Visit(&fontappl);
}
void windows_playerspage::ApplyTextLimits()
{
CWindowTextLimiter_LimitText(&playersDataOutput, iw5mp_getdata::players_data::XUIDandNETData_BUFFER_SIZE);
}
void windows_playerspage::Show()
{
playersDataOutput.Show();
forceRefresh.Show();
kickbutton.Show();
player_index.Show();
shown = true;
}
void windows_playerspage::Hide()
{
playersDataOutput.Hide();
forceRefresh.Hide();
kickbutton.Hide();
player_index.Hide();
shown = false;
}
void windows_playerspage::PrintPlayersData()
{
SetText(iw5mp_getdata::players_data::GetPackedData_XUIDandNETData());
}
void windows_playerspage::Handler_ClickButton(WPARAM wparam)
{
if (LOWORD(wparam) == forceRefresh.id)
{
SetText(iw5mp_getdata::players_data::GetPackedData_XUIDandNETData());
}
else if (LOWORD(wparam) == kickbutton.id)
{
currentPlayerIndex = textconvertors::ConvertWTextDecTypeToU16(CWindowTextReader_GetTextW(&player_index, 4));
WCWOUT("Kicking player, index: ", std::dec, currentPlayerIndex);
iw5mp_exploits::KickUserViaND(currentPlayerIndex);
}
else
{
}
}