maint: rebrand
This commit is contained in:
parent
5f8c9e540f
commit
cdf12853c6
18
.github/workflows/build.yml
vendored
18
.github/workflows/build.yml
vendored
@ -42,7 +42,7 @@ jobs:
|
|||||||
uses: ammaraskar/msvc-problem-matcher@master
|
uses: ammaraskar/msvc-problem-matcher@master
|
||||||
|
|
||||||
- name: Build ${{matrix.configuration}}
|
- name: Build ${{matrix.configuration}}
|
||||||
run: msbuild /m /v:minimal /p:Configuration=${{matrix.configuration}} /p:Platform=x64 build/boiii.sln
|
run: msbuild /m /v:minimal /p:Configuration=${{matrix.configuration}} /p:Platform=x64 build/t7x.sln
|
||||||
|
|
||||||
- name: Upload ${{matrix.configuration}} symbols
|
- name: Upload ${{matrix.configuration}} symbols
|
||||||
if: matrix.configuration == 'Release' && github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop')
|
if: matrix.configuration == 'Release' && github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop')
|
||||||
@ -50,7 +50,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ${{matrix.configuration}} Symbols
|
name: ${{matrix.configuration}} Symbols
|
||||||
path: |
|
path: |
|
||||||
build/bin/x64/${{matrix.configuration}}/boiii.pdb
|
build/bin/x64/${{matrix.configuration}}/t7x.pdb
|
||||||
|
|
||||||
- name: Upload ${{matrix.configuration}} binary
|
- name: Upload ${{matrix.configuration}} binary
|
||||||
if: matrix.configuration == 'Release' && github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop')
|
if: matrix.configuration == 'Release' && github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop')
|
||||||
@ -58,7 +58,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ${{matrix.configuration}} Binary
|
name: ${{matrix.configuration}} Binary
|
||||||
path: |
|
path: |
|
||||||
build/bin/x64/${{matrix.configuration}}/boiii.exe
|
build/bin/x64/${{matrix.configuration}}/t7x.exe
|
||||||
|
|
||||||
- name: Upload ${{matrix.configuration}} data artifacts
|
- name: Upload ${{matrix.configuration}} data artifacts
|
||||||
if: matrix.configuration == 'Release' && github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop')
|
if: matrix.configuration == 'Release' && github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop')
|
||||||
@ -98,19 +98,19 @@ jobs:
|
|||||||
run: ssh-keyscan -H ${{ secrets.BOIII_MASTER_SSH_ADDRESS }} >> ~/.ssh/known_hosts
|
run: ssh-keyscan -H ${{ secrets.BOIII_MASTER_SSH_ADDRESS }} >> ~/.ssh/known_hosts
|
||||||
|
|
||||||
- name: Remove old data files
|
- name: Remove old data files
|
||||||
run: ssh ${{ secrets.BOIII_MASTER_SSH_USER }}@${{ secrets.BOIII_MASTER_SSH_ADDRESS }} rm -rf ${{ env.BOIII_MASTER_PATH }}/boiii/data/*
|
run: ssh ${{ secrets.BOIII_MASTER_SSH_USER }}@${{ secrets.BOIII_MASTER_SSH_ADDRESS }} rm -rf ${{ env.BOIII_MASTER_PATH }}/t7x/data/*
|
||||||
|
|
||||||
- name: Upload BOIII binary
|
- name: Upload T7x binary
|
||||||
run: rsync -avz boiii.exe ${{ secrets.BOIII_MASTER_SSH_USER }}@${{ secrets.BOIII_MASTER_SSH_ADDRESS }}:${{ env.BOIII_MASTER_PATH }}/boiii/
|
run: rsync -avz t7x.exe ${{ secrets.BOIII_MASTER_SSH_USER }}@${{ secrets.BOIII_MASTER_SSH_ADDRESS }}:${{ env.BOIII_MASTER_PATH }}/t7x/
|
||||||
|
|
||||||
- name: Upload data files
|
- name: Upload data files
|
||||||
run: rsync -avz ./data/ ${{ secrets.BOIII_MASTER_SSH_USER }}@${{ secrets.BOIII_MASTER_SSH_ADDRESS }}:${{ env.BOIII_MASTER_PATH }}/boiii/data/
|
run: rsync -avz ./data/ ${{ secrets.BOIII_MASTER_SSH_USER }}@${{ secrets.BOIII_MASTER_SSH_ADDRESS }}:${{ env.BOIII_MASTER_PATH }}/t7x/data/
|
||||||
|
|
||||||
- name: Publish changes
|
- name: Publish changes
|
||||||
run: ssh ${{ secrets.BOIII_MASTER_SSH_USER }}@${{ secrets.BOIII_MASTER_SSH_ADDRESS }} ${{ secrets.BOIII_MASTER_SSH_CHANGE_PUBLISH_COMMAND }}
|
run: ssh ${{ secrets.BOIII_MASTER_SSH_USER }}@${{ secrets.BOIII_MASTER_SSH_ADDRESS }} ${{ secrets.BOIII_MASTER_SSH_CHANGE_PUBLISH_COMMAND }}
|
||||||
|
|
||||||
- name: Prepare cleanup
|
- name: Prepare cleanup
|
||||||
run: echo "" > boiii.exe
|
run: echo "" > t7x.exe
|
||||||
|
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
uses: actions/upload-artifact@v3.1.3
|
uses: actions/upload-artifact@v3.1.3
|
||||||
@ -118,4 +118,4 @@ jobs:
|
|||||||
name: Release Binary
|
name: Release Binary
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
path: |
|
path: |
|
||||||
boiii.exe
|
t7x.exe
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# What is BOIII ☄️
|
# What is T7x ☄️
|
||||||
|
|
||||||
BOIII is a game modification for Call of Duty: Black Ops 3.
|
T7x is a game modification for Call of Duty: Black Ops 3.
|
||||||
The Steam version of Black Ops 3 is required to be owned and installed for BOIII to work. You can get it from <a href="https://store.steampowered.com/app/311210/Call_of_Duty_Black_Ops_III/">here</a>.
|
The Steam version of Black Ops 3 is required to be owned and installed for T7x to work. You can get it from <a href="https://store.steampowered.com/app/311210/Call_of_Duty_Black_Ops_III/">here</a>.
|
||||||
|
|
||||||
## Writeups & Articles
|
## Writeups & Articles
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
|
|
||||||
<title>BOIII</title>
|
<title>T7x</title>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
* {
|
* {
|
||||||
@ -124,7 +124,7 @@
|
|||||||
><span style="color: #dc2626">I</span>
|
><span style="color: #dc2626">I</span>
|
||||||
</h1>
|
</h1>
|
||||||
<div class="button" onclick="window.external.runGame()">Play</div>
|
<div class="button" onclick="window.external.runGame()">Play</div>
|
||||||
<div class="button" onclick="window.external.openUrl('https://boiii.re')">
|
<div class="button" onclick="window.external.openUrl('https://bo3.eu')">
|
||||||
About
|
About
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -27,7 +27,7 @@ CoD.LobbyButtons.STATS = {
|
|||||||
stringRef = "STATS",
|
stringRef = "STATS",
|
||||||
action = function(self, element, controller, param, menu)
|
action = function(self, element, controller, param, menu)
|
||||||
SetPerControllerTableProperty(controller, "disableGameSettingsOptions", true)
|
SetPerControllerTableProperty(controller, "disableGameSettingsOptions", true)
|
||||||
OpenPopup(menu, "BoiiiStatsMenu", controller)
|
OpenPopup(menu, "T7xStatsMenu", controller)
|
||||||
end,
|
end,
|
||||||
customId = "btnMPStats"
|
customId = "btnMPStats"
|
||||||
}
|
}
|
||||||
|
@ -345,8 +345,8 @@ if Dvar.cg_unlockall_loot:get() == true then
|
|||||||
Engine.SetDvar("ui_enableAllHeroes", 1)
|
Engine.SetDvar("ui_enableAllHeroes", 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
LUI.createMenu.BoiiiStatsMenu = function(controller)
|
LUI.createMenu.T7xStatsMenu = function(controller)
|
||||||
local self = CoD.Menu.NewForUIEditor("BoiiiStatsMenu")
|
local self = CoD.Menu.NewForUIEditor("T7xStatsMenu")
|
||||||
if PreLoadFunc then
|
if PreLoadFunc then
|
||||||
PreLoadFunc(self, controller)
|
PreLoadFunc(self, controller)
|
||||||
end
|
end
|
||||||
@ -355,7 +355,7 @@ LUI.createMenu.BoiiiStatsMenu = function(controller)
|
|||||||
self:setLeftRight(true, true, 0, 0)
|
self:setLeftRight(true, true, 0, 0)
|
||||||
self:setTopBottom(true, true, 0, 0)
|
self:setTopBottom(true, true, 0, 0)
|
||||||
self:playSound("menu_open", controller)
|
self:playSound("menu_open", controller)
|
||||||
self.buttonModel = Engine.CreateModel(Engine.GetModelForController(controller), "BoiiiStatsMenu.buttonPrompts")
|
self.buttonModel = Engine.CreateModel(Engine.GetModelForController(controller), "T7xStatsMenu.buttonPrompts")
|
||||||
self.anyChildUsesUpdateState = true
|
self.anyChildUsesUpdateState = true
|
||||||
|
|
||||||
local GameSettingsBackground = CoD.GameSettings_Background.new(self, controller)
|
local GameSettingsBackground = CoD.GameSettings_Background.new(self, controller)
|
||||||
@ -410,7 +410,7 @@ LUI.createMenu.BoiiiStatsMenu = function(controller)
|
|||||||
element.GameSettingsBackground:close()
|
element.GameSettingsBackground:close()
|
||||||
element.Options:close()
|
element.Options:close()
|
||||||
Engine.UnsubscribeAndFreeModel(Engine.GetModel(Engine.GetModelForController(controller),
|
Engine.UnsubscribeAndFreeModel(Engine.GetModel(Engine.GetModelForController(controller),
|
||||||
"BoiiiStatsMenu.buttonPrompts"))
|
"T7xStatsMenu.buttonPrompts"))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if PostLoadFunc then
|
if PostLoadFunc then
|
||||||
|
@ -220,7 +220,7 @@ newaction {
|
|||||||
|
|
||||||
dependencies.load()
|
dependencies.load()
|
||||||
|
|
||||||
workspace "boiii"
|
workspace "t7x"
|
||||||
startproject "client"
|
startproject "client"
|
||||||
location "./build"
|
location "./build"
|
||||||
objdir "%{wks.location}/obj"
|
objdir "%{wks.location}/obj"
|
||||||
@ -284,7 +284,7 @@ project "client"
|
|||||||
kind "WindowedApp"
|
kind "WindowedApp"
|
||||||
language "C++"
|
language "C++"
|
||||||
|
|
||||||
targetname "boiii"
|
targetname "t7x"
|
||||||
|
|
||||||
pchheader "std_include.hpp"
|
pchheader "std_include.hpp"
|
||||||
pchsource "src/client/std_include.cpp"
|
pchsource "src/client/std_include.cpp"
|
||||||
|
@ -752,7 +752,7 @@ namespace arxan
|
|||||||
std::string cmd_line = GetCommandLineA();
|
std::string cmd_line = GetCommandLineA();
|
||||||
if (!strstr(cmd_line.data(), "fs_game"))
|
if (!strstr(cmd_line.data(), "fs_game"))
|
||||||
{
|
{
|
||||||
cmd_line += " +set fs_game \"boiii\"";
|
cmd_line += " +set fs_game \"t7x\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
return cmd_line;
|
return cmd_line;
|
||||||
|
@ -53,7 +53,7 @@ namespace auth
|
|||||||
|
|
||||||
std::string get_protected_data()
|
std::string get_protected_data()
|
||||||
{
|
{
|
||||||
std::string input = "momo5502-boiii-auth";
|
std::string input = "momo5502-t7x-auth";
|
||||||
|
|
||||||
DATA_BLOB data_in{}, data_out{};
|
DATA_BLOB data_in{}, data_out{};
|
||||||
data_in.pbData = reinterpret_cast<uint8_t*>(input.data());
|
data_in.pbData = reinterpret_cast<uint8_t*>(input.data());
|
||||||
@ -98,7 +98,7 @@ namespace auth
|
|||||||
{
|
{
|
||||||
static const auto is_first = []
|
static const auto is_first = []
|
||||||
{
|
{
|
||||||
static utils::nt::handle mutex = CreateMutexA(nullptr, FALSE, "boiii_mutex");
|
static utils::nt::handle mutex = CreateMutexA(nullptr, FALSE, "t7x_mutex");
|
||||||
return mutex && GetLastError() != ERROR_ALREADY_EXISTS;
|
return mutex && GetLastError() != ERROR_ALREADY_EXISTS;
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ namespace bots
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::string buffer;
|
std::string buffer;
|
||||||
if (!utils::io::read_file("boiii/bots.txt", &buffer) || buffer.empty())
|
if (!utils::io::read_file("bots.txt", &buffer) || buffer.empty())
|
||||||
{
|
{
|
||||||
return bot_names;
|
return bot_names;
|
||||||
}
|
}
|
||||||
|
@ -21,14 +21,14 @@ namespace branding
|
|||||||
const auto* font = reinterpret_cast<uint32_t*(*)()>(0x141CAC8E0_g)();
|
const auto* font = reinterpret_cast<uint32_t*(*)()>(0x141CAC8E0_g)();
|
||||||
if (!font) return;
|
if (!font) return;
|
||||||
|
|
||||||
game::R_AddCmdDrawText("BOIII: " VERSION, std::numeric_limits<int>::max(), font, static_cast<float>(x),
|
game::R_AddCmdDrawText("T7x: " VERSION, std::numeric_limits<int>::max(), font, static_cast<float>(x),
|
||||||
y + static_cast<float>(font[2]) * scale,
|
y + static_cast<float>(font[2]) * scale,
|
||||||
scale, scale, 0.0f, color, game::ITEM_TEXTSTYLE_NORMAL);
|
scale, scale, 0.0f, color, game::ITEM_TEXTSTYLE_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* get_ingame_console_prefix_stub()
|
const char* get_ingame_console_prefix_stub()
|
||||||
{
|
{
|
||||||
return "BOIII> ";
|
return "T7x> ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ namespace branding
|
|||||||
scheduler::loop(draw_branding, scheduler::renderer);
|
scheduler::loop(draw_branding, scheduler::renderer);
|
||||||
|
|
||||||
// Change window title prefix
|
// Change window title prefix
|
||||||
utils::hook::copy_string(0x14303F3D8_g, "BOIII");
|
utils::hook::copy_string(0x14303F3D8_g, "T7x");
|
||||||
|
|
||||||
// Change ingame console prefix
|
// Change ingame console prefix
|
||||||
utils::hook::call(0x141339970_g, get_ingame_console_prefix_stub);
|
utils::hook::call(0x141339970_g, get_ingame_console_prefix_stub);
|
||||||
|
@ -127,45 +127,23 @@ namespace client_patches
|
|||||||
game::fileHandle_t fs_f_open_file_write_to_dir_stub(const char* filename, [[maybe_unused]] const char* dir,
|
game::fileHandle_t fs_f_open_file_write_to_dir_stub(const char* filename, [[maybe_unused]] const char* dir,
|
||||||
const char* os_base_path)
|
const char* os_base_path)
|
||||||
{
|
{
|
||||||
return game::FS_FOpenFileWriteToDir(filename, "boiii_players", os_base_path);
|
return game::FS_FOpenFileWriteToDir(filename, "t7x_players", os_base_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
game::fileHandle_t fs_f_open_file_read_from_dir_stub(const char* filename, [[maybe_unused]] const char* dir,
|
game::fileHandle_t fs_f_open_file_read_from_dir_stub(const char* filename, [[maybe_unused]] const char* dir,
|
||||||
const char* os_base_path)
|
const char* os_base_path)
|
||||||
{
|
{
|
||||||
return game::FS_FOpenFileReadFromDir(filename, "boiii_players", os_base_path);
|
return game::FS_FOpenFileReadFromDir(filename, "t7x_players", os_base_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
int i_stricmp_stub(const char* s0, [[maybe_unused]] const char* s1)
|
int i_stricmp_stub(const char* s0, [[maybe_unused]] const char* s1)
|
||||||
{
|
{
|
||||||
return game::I_stricmp(s0, "boiii_players");
|
return game::I_stricmp(s0, "t7x_players");
|
||||||
}
|
}
|
||||||
|
|
||||||
void fs_add_game_directory_stub(const char* path, [[maybe_unused]] const char* dir)
|
void fs_add_game_directory_stub(const char* path, [[maybe_unused]] const char* dir)
|
||||||
{
|
{
|
||||||
utils::hook::invoke<void>(0x1422A2AF0_g, path, "boiii_players");
|
utils::hook::invoke<void>(0x1422A2AF0_g, path, "t7x_players");
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Remove me after some time
|
|
||||||
extern "C" void migrate_if_needed()
|
|
||||||
{
|
|
||||||
std::error_code e;
|
|
||||||
|
|
||||||
// Folder does not exist. Nothing to migrate
|
|
||||||
if (!std::filesystem::is_directory("players", e))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Folder does exist. Already migrated
|
|
||||||
if (std::filesystem::is_directory("boiii_players", e))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
utils::io::create_directory("boiii_players");
|
|
||||||
|
|
||||||
std::filesystem::copy("players", "boiii_players", std::filesystem::copy_options::recursive, e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void patch_players_folder_name()
|
void patch_players_folder_name()
|
||||||
@ -199,11 +177,6 @@ namespace client_patches
|
|||||||
public:
|
public:
|
||||||
static_assert(offsetof(game::clientActive_t, viewangles) == 0xB8C8);
|
static_assert(offsetof(game::clientActive_t, viewangles) == 0xB8C8);
|
||||||
|
|
||||||
component()
|
|
||||||
{
|
|
||||||
migrate_if_needed(); // TODO: Remove me after some time
|
|
||||||
}
|
|
||||||
|
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
fix_amd_cpu_stuttering();
|
fix_amd_cpu_stuttering();
|
||||||
|
@ -133,8 +133,8 @@ namespace console
|
|||||||
|
|
||||||
char text[CONSOLE_BUFFER_SIZE]{0};
|
char text[CONSOLE_BUFFER_SIZE]{0};
|
||||||
|
|
||||||
const auto* class_name = "BOIII WinConsole";
|
const auto* class_name = "T7x WinConsole";
|
||||||
const auto* window_name = game::is_server() ? "BOIII Server" : "BOIII Console";
|
const auto* window_name = game::is_server() ? "T7x Server" : "T7x Console";
|
||||||
|
|
||||||
WNDCLASSA wnd_class{};
|
WNDCLASSA wnd_class{};
|
||||||
wnd_class.style = 0;
|
wnd_class.style = 0;
|
||||||
|
@ -104,7 +104,7 @@ namespace dvars
|
|||||||
|
|
||||||
std::string get_config_file_path()
|
std::string get_config_file_path()
|
||||||
{
|
{
|
||||||
return "boiii_players/user/config.cfg";
|
return "t7x_players/user/config.cfg";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_archive_dvar(const game::dvar_t* dvar)
|
bool is_archive_dvar(const game::dvar_t* dvar)
|
||||||
|
@ -76,7 +76,7 @@ namespace exception
|
|||||||
utils::thread::suspend_other_threads();
|
utils::thread::suspend_other_threads();
|
||||||
show_mouse_cursor();
|
show_mouse_cursor();
|
||||||
|
|
||||||
game::show_error(error_str.data(), "BOIII ERROR");
|
game::show_error(error_str.data(), "T7x ERROR");
|
||||||
TerminateProcess(GetCurrentProcess(), exception_data.code);
|
TerminateProcess(GetCurrentProcess(), exception_data.code);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ namespace exception
|
|||||||
++recovery_data.recovery_counts;
|
++recovery_data.recovery_counts;
|
||||||
|
|
||||||
game::Com_Error(game::ERR_DROP, "Fatal error (0x%08X) at 0x%p (0x%p).\nA minidump has been written.\n\n"
|
game::Com_Error(game::ERR_DROP, "Fatal error (0x%08X) at 0x%p (0x%p).\nA minidump has been written.\n\n"
|
||||||
"BOIII has tried to recover your game, but it might not run stable anymore.\n\n"
|
"T7x has tried to recover your game, but it might not run stable anymore.\n\n"
|
||||||
"Make sure to update your graphics card drivers and install operating system updates!\n"
|
"Make sure to update your graphics card drivers and install operating system updates!\n"
|
||||||
"Closing or restarting Steam might also help.",
|
"Closing or restarting Steam might also help.",
|
||||||
exception_data.code, exception_data.address,
|
exception_data.code, exception_data.address,
|
||||||
@ -133,8 +133,8 @@ namespace exception
|
|||||||
info.append("\r\n");
|
info.append("\r\n");
|
||||||
};
|
};
|
||||||
|
|
||||||
line("BOIII Crash Dump");
|
line("T7x Crash Dump");
|
||||||
line("");
|
line(std::string{});
|
||||||
line("Version: "s + VERSION);
|
line("Version: "s + VERSION);
|
||||||
line("Timestamp: "s + get_timestamp());
|
line("Timestamp: "s + get_timestamp());
|
||||||
line(utils::string::va("Exception: 0x%08X", exceptioninfo->ExceptionRecord->ExceptionCode));
|
line(utils::string::va("Exception: 0x%08X", exceptioninfo->ExceptionRecord->ExceptionCode));
|
||||||
@ -156,13 +156,13 @@ namespace exception
|
|||||||
|
|
||||||
void write_minidump(const LPEXCEPTION_POINTERS exceptioninfo)
|
void write_minidump(const LPEXCEPTION_POINTERS exceptioninfo)
|
||||||
{
|
{
|
||||||
const std::string crash_name = utils::string::va("minidumps/boiii-crash-%s.zip",
|
const std::string crash_name = utils::string::va("minidumps/t7x-crash-%s.zip",
|
||||||
get_timestamp().data());
|
get_timestamp().data());
|
||||||
|
|
||||||
utils::compression::zip::archive zip_file{};
|
utils::compression::zip::archive zip_file{};
|
||||||
zip_file.add("crash.dmp", create_minidump(exceptioninfo));
|
zip_file.add("crash.dmp", create_minidump(exceptioninfo));
|
||||||
zip_file.add("info.txt", generate_crash_info(exceptioninfo));
|
zip_file.add("info.txt", generate_crash_info(exceptioninfo));
|
||||||
zip_file.write(crash_name, "BOIII Crash Dump");
|
zip_file.write(crash_name, "T7x Crash Dump");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_harmless_error(const LPEXCEPTION_POINTERS exceptioninfo)
|
bool is_harmless_error(const LPEXCEPTION_POINTERS exceptioninfo)
|
||||||
|
@ -114,7 +114,7 @@ namespace gamesettings
|
|||||||
const utils::nt::library host{};
|
const utils::nt::library host{};
|
||||||
|
|
||||||
search_game_settings_folder((game::get_appdata_path() / "data/gamesettings").string());
|
search_game_settings_folder((game::get_appdata_path() / "data/gamesettings").string());
|
||||||
search_game_settings_folder((host.get_folder() / "boiii/gamesettings").string());
|
search_game_settings_folder((host.get_folder() / "t7x/gamesettings").string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ namespace profile_infos
|
|||||||
std::optional<profile_info> load_profile_info()
|
std::optional<profile_info> load_profile_info()
|
||||||
{
|
{
|
||||||
std::string data{};
|
std::string data{};
|
||||||
if (!utils::io::read_file("boiii_players/user/profile_info", &data))
|
if (!utils::io::read_file("t7x_players/user/profile_info", &data))
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@ -237,7 +237,7 @@ namespace profile_infos
|
|||||||
data.append(reinterpret_cast<const char*>(&info.version), sizeof(info.version));
|
data.append(reinterpret_cast<const char*>(&info.version), sizeof(info.version));
|
||||||
data.append(info.ddl);
|
data.append(info.ddl);
|
||||||
|
|
||||||
utils::io::write_file("boiii_players/user/profile_info", data);
|
utils::io::write_file("t7x_players/user/profile_info", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct component final : generic_component
|
struct component final : generic_component
|
||||||
|
@ -34,7 +34,7 @@ namespace script
|
|||||||
void load_script(std::string& name, const std::string& data, const bool is_custom)
|
void load_script(std::string& name, const std::string& data, const bool is_custom)
|
||||||
{
|
{
|
||||||
const auto appdata_path = (game::get_appdata_path() / "data/").generic_string();
|
const auto appdata_path = (game::get_appdata_path() / "data/").generic_string();
|
||||||
const auto host_path = (utils::nt::library{}.get_folder() / "boiii/").generic_string();
|
const auto host_path = (utils::nt::library{}.get_folder() / "t7x/").generic_string();
|
||||||
|
|
||||||
auto i = name.find(appdata_path);
|
auto i = name.find(appdata_path);
|
||||||
if (i != std::string::npos)
|
if (i != std::string::npos)
|
||||||
@ -133,12 +133,12 @@ namespace script
|
|||||||
const utils::nt::library host{};
|
const utils::nt::library host{};
|
||||||
|
|
||||||
const auto data_folder = game::get_appdata_path() / "data";
|
const auto data_folder = game::get_appdata_path() / "data";
|
||||||
const auto boiii_folder = host.get_folder() / "boiii";
|
const auto t7x_folder = host.get_folder() / "t7x";
|
||||||
|
|
||||||
const auto load = [&data_folder, &boiii_folder](const std::filesystem::path& folder, const bool is_custom)
|
const auto load = [&data_folder, &t7x_folder](const std::filesystem::path& folder, const bool is_custom)
|
||||||
{
|
{
|
||||||
load_scripts_folder((data_folder / folder).string(), is_custom);
|
load_scripts_folder((data_folder / folder).string(), is_custom);
|
||||||
load_scripts_folder((boiii_folder / folder).string(), is_custom);
|
load_scripts_folder((t7x_folder / folder).string(), is_custom);
|
||||||
};
|
};
|
||||||
|
|
||||||
// scripts folder is for overriding stock scripts the game uses
|
// scripts folder is for overriding stock scripts the game uses
|
||||||
|
@ -93,7 +93,7 @@ namespace server_list
|
|||||||
|
|
||||||
std::string get_favorite_servers_file_path()
|
std::string get_favorite_servers_file_path()
|
||||||
{
|
{
|
||||||
return "boiii_players/user/favorite_servers.txt";
|
return "t7x_players/user/favorite_servers.txt";
|
||||||
}
|
}
|
||||||
|
|
||||||
void write_favorite_servers()
|
void write_favorite_servers()
|
||||||
|
@ -70,7 +70,7 @@ namespace splash
|
|||||||
|
|
||||||
if (image)
|
if (image)
|
||||||
{
|
{
|
||||||
window = CreateWindowExA(WS_EX_APPWINDOW, "Black Ops III Splash Screen", "BOIII",
|
window = CreateWindowExA(WS_EX_APPWINDOW, "Black Ops III Splash Screen", "T7x",
|
||||||
WS_POPUP | WS_SYSMENU,
|
WS_POPUP | WS_SYSMENU,
|
||||||
(x_pixels - 320) / 2, (y_pixels - 100) / 2, 320, 100, nullptr,
|
(x_pixels - 320) / 2, (y_pixels - 100) / 2, 320, 100, nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
@ -222,7 +222,7 @@ namespace steam_proxy
|
|||||||
|
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
{
|
{
|
||||||
const auto res = start_mod("\xF0\x9F\x92\x8E" " BOIII"s, steam::SteamUtils()->GetAppID());
|
const auto res = start_mod("\xF0\x9F\x92\x8E" " T7x"s, steam::SteamUtils()->GetAppID());
|
||||||
evaluate_ownership_state(res);
|
evaluate_ownership_state(res);
|
||||||
clean_up_on_error();
|
clean_up_on_error();
|
||||||
}
|
}
|
||||||
|
@ -205,7 +205,7 @@ namespace ui_scripting
|
|||||||
lua["print"] = function(reinterpret_cast<game::hks::lua_function>(0x141D30290_g)); // hks::base_print
|
lua["print"] = function(reinterpret_cast<game::hks::lua_function>(0x141D30290_g)); // hks::base_print
|
||||||
lua["table"]["unpack"] = lua["unpack"];
|
lua["table"]["unpack"] = lua["unpack"];
|
||||||
lua["luiglobals"] = lua;
|
lua["luiglobals"] = lua;
|
||||||
lua["Engine"]["IsBOIII"] = true;
|
lua["Engine"]["is_t7x"] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void start()
|
void start()
|
||||||
@ -215,7 +215,7 @@ namespace ui_scripting
|
|||||||
const utils::nt::library host{};
|
const utils::nt::library host{};
|
||||||
const auto folder = game::is_server() ? "lobby_scripts/" : "ui_scripts/";
|
const auto folder = game::is_server() ? "lobby_scripts/" : "ui_scripts/";
|
||||||
load_scripts((game::get_appdata_path() / "data" / folder).string());
|
load_scripts((game::get_appdata_path() / "data" / folder).string());
|
||||||
load_scripts((host.get_folder() / "boiii" / folder).string());
|
load_scripts((host.get_folder() / "t7x" / folder).string());
|
||||||
}
|
}
|
||||||
|
|
||||||
void try_start()
|
void try_start()
|
||||||
@ -251,7 +251,7 @@ namespace ui_scripting
|
|||||||
doneFirstSnapshot = false;
|
doneFirstSnapshot = false;
|
||||||
|
|
||||||
load_local_script_files((game::get_appdata_path() / "data/ui_scripts/").string());
|
load_local_script_files((game::get_appdata_path() / "data/ui_scripts/").string());
|
||||||
load_local_script_files((host.get_folder() / "boiii/ui_scripts/").string());
|
load_local_script_files((host.get_folder() / "t7x/ui_scripts/").string());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try_start();
|
try_start();
|
||||||
|
@ -173,7 +173,7 @@ namespace demonware
|
|||||||
|
|
||||||
std::string bdStorage::get_user_file_path(const std::string& name)
|
std::string bdStorage::get_user_file_path(const std::string& name)
|
||||||
{
|
{
|
||||||
return "boiii_players/user/" + name;
|
return "t7x_players/user/" + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bdStorage::upload_files(service_server* server, byte_buffer* buffer) const
|
void bdStorage::upload_files(service_server* server, byte_buffer* buffer) const
|
||||||
|
@ -83,7 +83,7 @@ namespace game
|
|||||||
CoTaskMemFree(path);
|
CoTaskMemFree(path);
|
||||||
});
|
});
|
||||||
|
|
||||||
static auto appdata = std::filesystem::path(path) / "boiii";
|
static auto appdata = std::filesystem::path(path) / "t7x";
|
||||||
return appdata;
|
return appdata;
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ namespace launcher
|
|||||||
bool run()
|
bool run()
|
||||||
{
|
{
|
||||||
bool run_game = false;
|
bool run_game = false;
|
||||||
html_window window("BOIII", 550, 320);
|
html_window window("T7x", 550, 320);
|
||||||
|
|
||||||
window.get_html_frame()->register_callback(
|
window.get_html_frame()->register_callback(
|
||||||
"openUrl", [](const std::vector<html_argument>& params) -> CComVariant
|
"openUrl", [](const std::vector<html_argument>& params) -> CComVariant
|
||||||
|
@ -10,7 +10,7 @@ namespace tls
|
|||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
utils::binary_resource tls_dll_file(TLS_DLL, "boiii-tlsdll.dll");
|
utils::binary_resource tls_dll_file(TLS_DLL, "t7x-tlsdll.dll");
|
||||||
}
|
}
|
||||||
|
|
||||||
PIMAGE_TLS_DIRECTORY allocate_tls_index()
|
PIMAGE_TLS_DIRECTORY allocate_tls_index()
|
||||||
|
@ -281,7 +281,7 @@ int main()
|
|||||||
|
|
||||||
if (!utils::io::file_exists(launcher::get_launcher_ui_file().generic_wstring()))
|
if (!utils::io::file_exists(launcher::get_launcher_ui_file().generic_wstring()))
|
||||||
{
|
{
|
||||||
throw std::runtime_error("BOIII needs an active internet connection for the first time you launch it.");
|
throw std::runtime_error("T7x needs an active internet connection for the first time you launch it.");
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto client_binary = "BlackOps3.exe"s;
|
const auto client_binary = "BlackOps3.exe"s;
|
||||||
@ -295,7 +295,7 @@ int main()
|
|||||||
if (!has_client && !has_server)
|
if (!has_client && !has_server)
|
||||||
{
|
{
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"Can't find a valid BlackOps3.exe or BlackOps3_UnrankedDedicatedServer.exe. Make sure you put boiii.exe in your Black Ops 3 installation folder.");
|
"Can't find a valid BlackOps3.exe or BlackOps3_UnrankedDedicatedServer.exe. Make sure you put T7x.exe in your Black Ops 3 installation folder.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_server)
|
if (!is_server)
|
||||||
|
@ -70,13 +70,13 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "040904b0"
|
BLOCK "040904b0"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "momo5502"
|
VALUE "CompanyName", "AlterWare"
|
||||||
VALUE "FileDescription", "BOIII"
|
VALUE "FileDescription", "T7x"
|
||||||
VALUE "FileVersion", VERSION_FILE
|
VALUE "FileVersion", VERSION_FILE
|
||||||
VALUE "InternalName", "something"
|
VALUE "InternalName", "T7x"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2022 momo5502. All rights reserved."
|
VALUE "LegalCopyright", "Copyright (C) 2022 momo5502. All rights reserved."
|
||||||
VALUE "OriginalFilename", "boiii.exe"
|
VALUE "OriginalFilename", "T7x.exe"
|
||||||
VALUE "ProductName", "BOIII"
|
VALUE "ProductName", "T7x"
|
||||||
VALUE "ProductVersion", VERSION_PRODUCT
|
VALUE "ProductVersion", VERSION_PRODUCT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -133,7 +133,7 @@ namespace steam
|
|||||||
{
|
{
|
||||||
const auto id = this->GetSteamID();
|
const auto id = this->GetSteamID();
|
||||||
|
|
||||||
auth_ticket = "BOIII";
|
auth_ticket = "T7x";
|
||||||
auth_ticket.resize(32);
|
auth_ticket.resize(32);
|
||||||
auth_ticket.append(static_cast<char*>(pUserData), 24); // key
|
auth_ticket.append(static_cast<char*>(pUserData), 24); // key
|
||||||
auth_ticket.append(reinterpret_cast<const char*>(&id.bits), sizeof(id.bits)); // user id
|
auth_ticket.append(reinterpret_cast<const char*>(&id.bits), sizeof(id.bits)); // user id
|
||||||
|
@ -12,10 +12,10 @@
|
|||||||
|
|
||||||
#define UPDATE_SERVER "https://master.bo3.eu/"
|
#define UPDATE_SERVER "https://master.bo3.eu/"
|
||||||
|
|
||||||
#define UPDATE_FILE_MAIN UPDATE_SERVER "boiii.json"
|
#define UPDATE_FILE_MAIN UPDATE_SERVER "files.json"
|
||||||
#define UPDATE_FOLDER_MAIN UPDATE_SERVER "boiii/"
|
#define UPDATE_FOLDER_MAIN UPDATE_SERVER "t7x/"
|
||||||
|
|
||||||
#define UPDATE_HOST_BINARY "boiii.exe"
|
#define UPDATE_HOST_BINARY "t7x.exe"
|
||||||
|
|
||||||
namespace updater
|
namespace updater
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@ namespace updater
|
|||||||
this->downloading_files_.clear();
|
this->downloading_files_.clear();
|
||||||
|
|
||||||
this->progress_ui_ = {game::is_headless()};
|
this->progress_ui_ = {game::is_headless()};
|
||||||
this->progress_ui_.set_title("BOIII Updater");
|
this->progress_ui_.set_title("T7x Updater");
|
||||||
this->progress_ui_.show(false);
|
this->progress_ui_.show(false);
|
||||||
|
|
||||||
// Is it good to add artificial sleeps?
|
// Is it good to add artificial sleeps?
|
||||||
|
@ -26,7 +26,7 @@ namespace exception
|
|||||||
char pathname[MAX_PATH] = {0};
|
char pathname[MAX_PATH] = {0};
|
||||||
|
|
||||||
GetTempPathA(sizeof(pathname), pathname);
|
GetTempPathA(sizeof(pathname), pathname);
|
||||||
GetTempFileNameA(pathname, "boiii-", 0, filename);
|
GetTempFileNameA(pathname, "t7x-", 0, filename);
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,8 +16,6 @@ namespace utils::properties
|
|||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
extern "C" void migrate_if_needed();
|
|
||||||
|
|
||||||
typedef rapidjson::EncodedOutputStream<rapidjson::UTF8<>, rapidjson::FileWriteStream> OutputStream;
|
typedef rapidjson::EncodedOutputStream<rapidjson::UTF8<>, rapidjson::FileWriteStream> OutputStream;
|
||||||
typedef rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::FileReadStream> InputStream;
|
typedef rapidjson::EncodedInputStream<rapidjson::UTF8<>, rapidjson::FileReadStream> InputStream;
|
||||||
|
|
||||||
@ -31,11 +29,9 @@ namespace utils::properties
|
|||||||
{
|
{
|
||||||
static auto props = []
|
static auto props = []
|
||||||
{
|
{
|
||||||
auto path = std::filesystem::path("boiii_players/properties.json");
|
auto path = std::filesystem::path("t7x_players/properties.json");
|
||||||
const auto legacy_path = get_properties_folder() / "properties.json";
|
const auto legacy_path = get_properties_folder() / "properties.json";
|
||||||
|
|
||||||
migrate_if_needed();
|
|
||||||
|
|
||||||
if (io::file_exists(legacy_path) && !io::file_exists(path))
|
if (io::file_exists(legacy_path) && !io::file_exists(path))
|
||||||
{
|
{
|
||||||
std::error_code e;
|
std::error_code e;
|
||||||
@ -129,13 +125,13 @@ namespace utils::properties
|
|||||||
CoTaskMemFree(path);
|
CoTaskMemFree(path);
|
||||||
});
|
});
|
||||||
|
|
||||||
static auto appdata = std::filesystem::path(path) / "boiii";
|
static auto appdata = std::filesystem::path(path) / "t7x";
|
||||||
return appdata;
|
return appdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_lock<named_mutex> lock()
|
std::unique_lock<named_mutex> lock()
|
||||||
{
|
{
|
||||||
static named_mutex mutex{"boiii-properties-lock"};
|
static named_mutex mutex{"t7x-properties-lock"};
|
||||||
return std::unique_lock{mutex};
|
return std::unique_lock{mutex};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user