Merge pull request #756 from diamante0018/develop

[General]: Cleanup some code
This commit is contained in:
Edo 2023-02-06 19:51:53 +00:00 committed by GitHub
commit 4bf0e67638
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 74 additions and 67 deletions

View File

@ -384,15 +384,15 @@ namespace Components
auto delta = Game::Sys_Milliseconds() - fDownload->download->lastTimeStamp;
if (delta > 300)
{
bool doFormat = fDownload->download->lastTimeStamp != 0;
const auto doFormat = fDownload->download->lastTimeStamp != 0;
fDownload->download->lastTimeStamp = Game::Sys_Milliseconds();
auto dataLeft = fDownload->download->totalBytes - fDownload->download->downBytes;
const auto dataLeft = fDownload->download->totalBytes - fDownload->download->downBytes;
int timeLeft = 0;
if (fDownload->download->timeStampBytes)
{
double timeLeftD = ((1.0 * dataLeft) / fDownload->download->timeStampBytes) * delta;
const double timeLeftD = ((1.0 * dataLeft) / fDownload->download->timeStampBytes) * delta;
timeLeft = static_cast<int>(timeLeftD);
}
@ -509,7 +509,7 @@ namespace Components
static std::string mapNamePre;
static nlohmann::json jsonList;
const auto mapName = (Party::IsInUserMapLobby() ? Dvar::Var("ui_mapname").get<std::string>() : Maps::GetUserMap()->getName());
const std::string mapName = Party::IsInUserMapLobby() ? (*Game::ui_mapname)->current.string : Maps::GetUserMap()->getName();
if (!Maps::GetUserMap()->isValid() && !Party::IsInUserMapLobby())
{
mapNamePre.clear();
@ -554,17 +554,16 @@ namespace Components
Utils::String::Replace(url, "\\", "/");
// Strip /file
url = url.substr(6);
url = url.substr(6); // Strip /file
Utils::String::Replace(url, "%20", " ");
auto isMap = false;
if (url.starts_with("map/"))
{
isMap = true;
url = url.substr(4);
url = url.substr(4); // Strip map/
auto mapName = (Party::IsInUserMapLobby() ? Dvar::Var("ui_mapname").get<std::string>() : Maps::GetUserMap()->getName());
std::string mapName = (Party::IsInUserMapLobby() ? (*Game::ui_mapname)->current.string : Maps::GetUserMap()->getName());
auto isValidFile = false;
for (std::size_t i = 0; i < ARRAYSIZE(Maps::UserMapFiles); ++i)
{
@ -592,9 +591,10 @@ namespace Components
}
}
std::string file;
const std::string fsGame = (*Game::fs_gameDirVar)->current.string;
const auto path = std::format("{}\\{}{}", (*Game::fs_basepath)->current.string, isMap ? ""s : (fsGame + "\\"s), url);
std::string file;
if ((!isMap && fsGame.empty()) || !Utils::IO::ReadFile(path, &file))
{
mg_http_reply(c, 404, "Content-Type: text/html\r\n", "404 - Not Found %s", path.data());

View File

@ -91,7 +91,7 @@ namespace Components
return {this->getCString()};
}
bool Network::Address::isLocal()
bool Network::Address::isLocal() const noexcept
{
// According to: https://en.wikipedia.org/wiki/Private_network
@ -112,7 +112,7 @@ namespace Components
return false;
}
bool Network::Address::isSelf()
bool Network::Address::isSelf() const noexcept
{
if (Game::NET_IsLocalAddress(this->address)) return true; // Loopback
if (this->getPort() != GetPort()) return false; // Port not equal
@ -128,7 +128,7 @@ namespace Components
return false;
}
bool Network::Address::isLoopback() const
bool Network::Address::isLoopback() const noexcept
{
if (this->getIP().full == 0x100007f) // 127.0.0.1
{
@ -138,7 +138,7 @@ namespace Components
return Game::NET_IsLocalAddress(this->address);
}
bool Network::Address::isValid() const
bool Network::Address::isValid() const noexcept
{
return (this->getType() != Game::NA_BAD && this->getType() >= Game::NA_BOT && this->getType() <= Game::NA_IP);
}
@ -225,9 +225,11 @@ namespace Components
StartupSignal.clear();
}
unsigned short Network::GetPort()
std::uint16_t Network::GetPort()
{
return static_cast<unsigned short>(Dvar::Var(0x64A3004).get<unsigned int>());
assert((*Game::port));
assert((*Game::port)->current.unsignedInt <= std::numeric_limits<std::uint16_t>::max());
return static_cast<std::uint16_t>((*Game::port)->current.unsignedInt);
}
__declspec(naked) void Network::NetworkStartStub()

View File

@ -37,10 +37,10 @@ namespace Components
[[nodiscard]] const char* getCString() const;
[[nodiscard]] std::string getString() const;
[[nodiscard]] bool isLocal();
[[nodiscard]] bool isSelf();
[[nodiscard]] bool isValid() const;
[[nodiscard]] bool isLoopback() const;
[[nodiscard]] bool isLocal() const noexcept;
[[nodiscard]] bool isSelf() const noexcept;
[[nodiscard]] bool isValid() const noexcept;
[[nodiscard]] bool isLoopback() const noexcept;
private:
Game::netadr_t address;
@ -52,7 +52,7 @@ namespace Components
Network();
static unsigned short GetPort();
static std::uint16_t GetPort();
static void OnStart(const Utils::Slot<CallbackRaw>& callback);

View File

@ -166,7 +166,7 @@ namespace Components
bool Party::IsInUserMapLobby()
{
return (IsInLobby() && Maps::IsUserMap(Dvar::Var("ui_mapname").get<const char*>()));
return (IsInLobby() && Maps::IsUserMap((*Game::ui_mapname)->current.string));
}
bool Party::IsEnabled()

View File

@ -3032,12 +3032,13 @@ namespace Components
{
__asm
{
sub esp, 0x33C;
sub esp, 0x33C
push 0x643276;
retn;
push 0x643276
ret
}
}
int Zones::FS_FOpenFileReadForThreadHook(const char* file, int* filePointer, int thread)
{
const auto retval = FS_FOpenFileReadForThreadOriginal(file, filePointer, thread);
@ -3051,11 +3052,11 @@ namespace Components
// check if file should be skipped
auto skipFile = false;
if (strlen(file) > 5 && ((strncmp(&file[strlen(file) - 4], ".iwi", 4) != 0)))
if (std::strlen(file) > 5 && ((std::strncmp(&file[strlen(file) - 4], ".iwi", 4) != 0)))
{
skipFile = true;
}
else if (readSize >= 3 && (!memcmp(&fileBuffer[0], "IWi", 3)))
else if (readSize >= 3 && (std::memcmp(&fileBuffer[0], "IWi", 3) == 0))
{
skipFile = true;
}
@ -3086,8 +3087,8 @@ namespace Components
// attempt to decrypt the IWI
symmetric_CTR ctr_state;
memset(&ctr_state, 0, sizeof(symmetric_CTR));
ZeroMemory(&ctr_state, sizeof(symmetric_CTR));
// decryption keys
std::uint8_t aesKey[24] = { 0x15, 0x9a, 0x03, 0x25, 0xe0, 0x75, 0x2e, 0x80, 0xc6, 0xc0, 0x94, 0x2a, 0x50, 0x5c, 0x1c, 0x68, 0x8c, 0x17, 0xef, 0x53, 0x99, 0xf8, 0x68, 0x3c };
std::uint32_t aesIV[4] = { 0x1010101, 0x1010101, 0x1010101, 0x1010101 };
@ -3096,9 +3097,9 @@ namespace Components
auto nonce = HashCRC32StringInt(strippedFileName, strippedFileName.size());
std::uint8_t iv[16];
memset(iv, 0, sizeof iv);
memcpy(iv, &nonce, 4);
memcpy(iv + 4, &unpackedSize, 4);
std::memset(iv, 0, sizeof iv);
std::memcpy(iv, &nonce, 4);
std::memcpy(iv + 4, &unpackedSize, 4);
ctr_start(aes, reinterpret_cast<unsigned char*>(&aesIV[0]), &aesKey[0], sizeof aesKey, 0, CTR_COUNTER_BIG_ENDIAN, &ctr_state);
@ -3109,8 +3110,8 @@ namespace Components
auto left = (packedSize - readDataSize);
auto blockSize = (left > 0x8000) ? 0x8000 : left;
memcpy(iv + 8, &readDataSize, 4);
memcpy(iv + 12, &blockSize, 4);
std::memcpy(iv + 8, &readDataSize, 4);
std::memcpy(iv + 12, &blockSize, 4);
ctr_setiv(iv, sizeof iv, &ctr_state);
ctr_decrypt(reinterpret_cast<uint8_t*>(&encryptedData[readDataSize]), reinterpret_cast<uint8_t*>(&decryptedData[readDataSize]), blockSize, &ctr_state);
@ -3134,7 +3135,7 @@ namespace Components
// insert file data
if (result == Z_OK)
{
std::lock_guard<std::mutex> $(fileDataMutex);
std::lock_guard _(fileDataMutex);
fileDataMap[*filePointer] = data;
return unpackedSize;
}
@ -3152,50 +3153,51 @@ namespace Components
{
__asm
{
push ecx;
mov eax, [esp + 0x10];
push ecx
mov eax, [esp + 0x10]
push 0x4A04C5;
retn;
push 0x4A04C5
ret
}
}
int Zones::FS_ReadHook(void* buffer, size_t size, int filePointer)
{
std::lock_guard<std::mutex> $(fileDataMutex);
auto itr = fileDataMap.find(filePointer);
if (itr != fileDataMap.end())
std::lock_guard _(fileDataMutex);
if (auto itr = fileDataMap.find(filePointer); itr != fileDataMap.end())
{
if (!itr->second.fileContents.empty())
{
const auto readSize = std::min(size, itr->second.fileContents.size() - itr->second.readPos);
memcpy(buffer, &itr->second.fileContents[itr->second.readPos], readSize);
std::memcpy(buffer, &itr->second.fileContents[itr->second.readPos], readSize);
itr->second.readPos += readSize;
return readSize;
return static_cast<int>(readSize);
}
}
return FS_ReadOriginal(buffer, size, filePointer);
}
__declspec(naked) void Zones::FS_FCloseFileOriginal(int)
{
__asm
{
mov eax, [esp + 4];
push esi;
mov eax, [esp + 4]
push esi
push 0x462005;
retn;
push 0x462005
ret
}
}
void Zones::FS_FCloseFileHook(int filePointer)
{
std::lock_guard<std::mutex> $(fileDataMutex);
std::lock_guard _(fileDataMutex);
FS_FCloseFileOriginal(filePointer);
const auto itr = fileDataMap.find(filePointer);
if (itr != fileDataMap.end())
if (const auto itr = fileDataMap.find(filePointer); itr != fileDataMap.end())
{
fileDataMap.erase(itr);
}
@ -3204,19 +3206,18 @@ namespace Components
{
__asm
{
push esi;
mov esi, [esp + 8];
push esi
mov esi, [esp + 8]
push 0x4A63D5;
retn;
push 0x4A63D5
ret
}
}
std::uint32_t Zones::FS_SeekHook(int fileHandle, int seekPosition, int seekOrigin)
{
std::lock_guard<std::mutex> $(fileDataMutex);
std::lock_guard _(fileDataMutex);
const auto itr = fileDataMap.find(fileHandle);
if (itr != fileDataMap.end())
if (const auto itr = fileDataMap.find(fileHandle); itr != fileDataMap.end())
{
if (seekOrigin == Game::FS_SEEK_SET)
{
@ -3233,10 +3234,8 @@ namespace Components
return itr->second.readPos;
}
else
{
return FS_SeekOriginal(fileHandle, seekPosition, seekOrigin);
}
return FS_SeekOriginal(fileHandle, seekPosition, seekOrigin);
}
__declspec(naked) void Zones::LoadMapTriggersModelPointer()

View File

@ -21,15 +21,17 @@ namespace Components
static void SetVersion(int version);
static int Version() { return Zones::ZoneVersion; }
static int Version() { return ZoneVersion; }
private:
static int ZoneVersion;
static int FxEffectIndex;
static char* FxEffectStrings[64];
static std::unordered_map<int, FileData> fileDataMap;
static std::mutex fileDataMutex;
static bool CheckGameMapSp(int type);
static void GameMapSpPatchStub();
@ -82,8 +84,6 @@ namespace Components
static void Load_ClipInfo(bool atStreamStart);
static int LoadClipMap(bool atStreamStart);
static uint32_t HashCRC32StringInt(const std::string& Value, uint32_t Initial);
static std::unordered_map<int, Zones::FileData> fileDataMap;
static std::mutex fileDataMutex;
static int FS_FOpenFileReadForThreadOriginal(const char*, int*, int);
static int FS_FOpenFileReadForThreadHook(const char* file, int* filePointer, int thread);
static int FS_ReadOriginal(void*, size_t, int);

View File

@ -90,6 +90,9 @@ namespace Game
const dvar_t** party_minplayers = reinterpret_cast<const dvar_t**>(0x1081BFC);
const dvar_t** party_maxplayers = reinterpret_cast<const dvar_t**>(0x1080998);
const dvar_t** ip = reinterpret_cast<const dvar_t**>(0x64A1DF8);
const dvar_t** port = reinterpret_cast<const dvar_t**>(0x64A3004);
__declspec(naked) void Dvar_SetVariant(dvar_t*, DvarValue, DvarSetSource)
{
static DWORD Dvar_SetVariant_t = 0x647400;

View File

@ -142,6 +142,9 @@ namespace Game
extern const dvar_t** party_minplayers;
extern const dvar_t** party_maxplayers;
extern const dvar_t** ip;
extern const dvar_t** port;
extern void Dvar_SetVariant(dvar_t* var, DvarValue value, DvarSetSource source);
extern void Dvar_SetFromStringFromSource(const dvar_t* dvar, const char* string, DvarSetSource source);
}