mirror of
https://github.com/ytsodacan/Faucet.git
synced 2026-04-23 07:28:07 +00:00
idrk
This commit is contained in:
parent
6c101a6b1b
commit
40aea3e780
|
|
@ -4,6 +4,7 @@
|
|||
#include <chrono>
|
||||
#include <ctime>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <windows.h>
|
||||
#include <thread>
|
||||
#include <gdiplus.h>
|
||||
|
|
@ -14,30 +15,28 @@ static HWND g_SplashWnd = NULL;
|
|||
static HWND g_StatusWnd = NULL;
|
||||
static HWND g_CountWnd = NULL;
|
||||
static HWND g_FailWnd = NULL;
|
||||
static int g_TotalModsFound = 0;
|
||||
static int g_ModsLoadedCount = 0;
|
||||
static int g_ModsFailedCount = 0;
|
||||
static int g_TotalMods = 0;
|
||||
static int g_LoadedMods = 0;
|
||||
static int g_FailedMods = 0;
|
||||
|
||||
static ULONG_PTR g_gdiplusToken;
|
||||
|
||||
LRESULT CALLBACK SplashWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
||||
switch (msg) {
|
||||
case WM_PAINT: {
|
||||
if (msg == WM_PAINT) {
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc = BeginPaint(hwnd, &ps);
|
||||
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
|
||||
EndPaint(hwnd, &ps);
|
||||
} return 0;
|
||||
return 0;
|
||||
}
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
void CreateSplash() {
|
||||
|
||||
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
|
||||
Gdiplus::GdiplusStartup(&g_gdiplusToken, &gdiplusStartupInput, NULL);
|
||||
|
||||
WNDCLASSW wc = { 0 };
|
||||
WNDCLASSW wc = {};
|
||||
wc.lpfnWndProc = SplashWndProc;
|
||||
wc.hInstance = GetModuleHandle(NULL);
|
||||
wc.lpszClassName = L"ModLoaderSplash";
|
||||
|
|
@ -45,74 +44,70 @@ void CreateSplash() {
|
|||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
RegisterClassW(&wc);
|
||||
|
||||
int w = 600;
|
||||
int h = 400;
|
||||
int x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
|
||||
int y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
|
||||
const int w = 600, h = 400;
|
||||
const int x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
|
||||
const int y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
|
||||
|
||||
g_SplashWnd = CreateWindowExW(WS_EX_TOPMOST, wc.lpszClassName, L"Faucet",
|
||||
WS_POPUP | WS_BORDER | WS_VISIBLE, x, y, w, h, NULL, NULL, wc.hInstance, NULL);
|
||||
|
||||
CreateWindowW(L"STATIC", L"FAUCET", WS_CHILD | WS_VISIBLE | SS_CENTER,
|
||||
CreateWindowW(L"STATIC", L"FAUCET",
|
||||
WS_CHILD | WS_VISIBLE | SS_CENTER,
|
||||
0, 20, w, 40, g_SplashWnd, NULL, wc.hInstance, NULL);
|
||||
|
||||
HWND hLogo = CreateWindowW(L"STATIC", NULL,
|
||||
WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE,
|
||||
100, 70, 400, 150,
|
||||
g_SplashWnd, NULL, wc.hInstance, NULL);
|
||||
100, 70, 400, 150, g_SplashWnd, NULL, wc.hInstance, NULL);
|
||||
|
||||
wchar_t buffer[MAX_PATH];
|
||||
GetModuleFileNameW(NULL, buffer, MAX_PATH);
|
||||
std::wstring exePath = buffer;
|
||||
std::wstring exeDir = exePath.substr(0, exePath.find_last_of(L"\\/"));
|
||||
std::wstring fullPath = exeDir + L"\\Common\\Media\\Faucet.png";
|
||||
std::wstring exeDir = std::wstring(buffer);
|
||||
exeDir = exeDir.substr(0, exeDir.find_last_of(L"\\/"));
|
||||
std::wstring imagePath = exeDir + L"\\Common\\Media\\Faucet.png";
|
||||
|
||||
DWORD dwAttrib = GetFileAttributesW(fullPath.c_str());
|
||||
if (dwAttrib == INVALID_FILE_ATTRIBUTES) {
|
||||
std::wstring errorMsg = L"Image not found at:\n" + fullPath;
|
||||
MessageBoxW(g_SplashWnd, errorMsg.c_str(), L"File Error", MB_ICONERROR);
|
||||
}
|
||||
|
||||
Gdiplus::Bitmap* bitmap = Gdiplus::Bitmap::FromFile(fullPath.c_str());
|
||||
Gdiplus::Bitmap* bitmap = Gdiplus::Bitmap::FromFile(imagePath.c_str());
|
||||
if (bitmap && bitmap->GetLastStatus() == Gdiplus::Ok) {
|
||||
HBITMAP hBmp = NULL;
|
||||
Gdiplus::Status status = bitmap->GetHBITMAP(Gdiplus::Color(255, 255, 255, 255), &hBmp);
|
||||
|
||||
if (status == Gdiplus::Ok && hBmp != NULL) {
|
||||
SendMessage(hLogo, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp);
|
||||
if (bitmap->GetHBITMAP(Gdiplus::Color(255, 255, 255, 255), &hBmp) == Gdiplus::Ok && hBmp) {
|
||||
HBITMAP hOld = (HBITMAP)SendMessage(hLogo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBmp);
|
||||
if (hOld) DeleteObject(hOld);
|
||||
}
|
||||
delete bitmap;
|
||||
}
|
||||
delete bitmap;
|
||||
|
||||
g_StatusWnd = CreateWindowW(L"STATIC", L"Preparing...", WS_CHILD | WS_VISIBLE | SS_CENTER,
|
||||
g_StatusWnd = CreateWindowW(L"STATIC", L"Preparing...",
|
||||
WS_CHILD | WS_VISIBLE | SS_CENTER,
|
||||
10, 240, 580, 40, g_SplashWnd, NULL, wc.hInstance, NULL);
|
||||
|
||||
g_CountWnd = CreateWindowW(L"STATIC", L"0/0 MODS LOADED", WS_CHILD | WS_VISIBLE | SS_LEFT,
|
||||
g_CountWnd = CreateWindowW(L"STATIC", L"0/0 MODS LOADED",
|
||||
WS_CHILD | WS_VISIBLE | SS_LEFT,
|
||||
20, 350, 200, 20, g_SplashWnd, NULL, wc.hInstance, NULL);
|
||||
|
||||
g_FailWnd = CreateWindowW(L"STATIC", L"", WS_CHILD | WS_VISIBLE | SS_RIGHT,
|
||||
g_FailWnd = CreateWindowW(L"STATIC", L"",
|
||||
WS_CHILD | WS_VISIBLE | SS_RIGHT,
|
||||
380, 350, 200, 20, g_SplashWnd, NULL, wc.hInstance, NULL);
|
||||
|
||||
UpdateWindow(g_SplashWnd);
|
||||
}
|
||||
|
||||
void UpdateSplashStatus(const std::wstring& text) {
|
||||
if (g_StatusWnd) {
|
||||
SendMessageW(g_StatusWnd, WM_SETTEXT, 0, (LPARAM)text.c_str());
|
||||
if (!g_StatusWnd) return;
|
||||
|
||||
std::wstring countText = std::to_wstring(g_ModsLoadedCount) + L"/" + std::to_wstring(g_TotalModsFound) + L" MODS LOADED";
|
||||
SendMessageW(g_CountWnd, WM_SETTEXT, 0, (LPARAM)countText.c_str());
|
||||
SendMessageW(g_StatusWnd, WM_SETTEXT, 0, (LPARAM)text.c_str());
|
||||
|
||||
if (g_ModsFailedCount > 0) {
|
||||
std::wstring failText = std::to_wstring(g_ModsFailedCount) + L" HAVE FAILED TO LOAD";
|
||||
SendMessageW(g_FailWnd, WM_SETTEXT, 0, (LPARAM)failText.c_str());
|
||||
}
|
||||
std::wstring countText = std::to_wstring(g_LoadedMods) + L"/"
|
||||
+ std::to_wstring(g_TotalMods) + L" MODS LOADED";
|
||||
SendMessageW(g_CountWnd, WM_SETTEXT, 0, (LPARAM)countText.c_str());
|
||||
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
if (g_FailedMods > 0) {
|
||||
std::wstring failText = std::to_wstring(g_FailedMods) + L" FAILED TO LOAD";
|
||||
SendMessageW(g_FailWnd, WM_SETTEXT, 0, (LPARAM)failText.c_str());
|
||||
}
|
||||
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -127,15 +122,19 @@ void ModLoader::Initialize() {
|
|||
|
||||
auto startTime = std::chrono::steady_clock::now();
|
||||
CreateSplash();
|
||||
|
||||
OpenLogFile();
|
||||
Log(L"Faucet ModLoader initializing");
|
||||
|
||||
Log("=== Faucet ModLoader starting ===");
|
||||
|
||||
std::wstring modsDir = GetModsDirectory();
|
||||
ScanAndLoadMods(modsDir);
|
||||
|
||||
auto endTime = std::chrono::steady_clock::now();
|
||||
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
|
||||
long long elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
|
||||
|
||||
Log("Initialization complete — " + std::to_string(g_LoadedMods) + " loaded, "
|
||||
+ std::to_string(g_FailedMods) + " failed, "
|
||||
+ std::to_string(elapsed) + "ms total");
|
||||
|
||||
if (elapsed < 1000) {
|
||||
UpdateSplashStatus(L"Finalizing...");
|
||||
|
|
@ -144,8 +143,8 @@ void ModLoader::Initialize() {
|
|||
|
||||
if (g_SplashWnd) {
|
||||
DestroyWindow(g_SplashWnd);
|
||||
g_SplashWnd = NULL;
|
||||
UnregisterClassW(L"ModLoaderSplash", GetModuleHandle(NULL));
|
||||
|
||||
Gdiplus::GdiplusShutdown(g_gdiplusToken);
|
||||
}
|
||||
}
|
||||
|
|
@ -153,39 +152,42 @@ void ModLoader::Initialize() {
|
|||
void ModLoader::NotifyInit() {
|
||||
for (auto& mod : m_mods) {
|
||||
if (!mod.healthy) continue;
|
||||
const char* id = mod.instance->GetInfo()->id;
|
||||
try {
|
||||
if (!mod.instance->OnInit()) {
|
||||
Log("OnInit() returned false for: " + std::string(mod.instance->GetInfo()->id));
|
||||
mod.healthy = false;
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
Log("OnInit() threw for: " + std::string(mod.instance->GetInfo()->id));
|
||||
mod.healthy = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ModLoader::OnLevelLoad() {
|
||||
Log(L"Level has loaded");
|
||||
Log("Level loaded");
|
||||
for (auto& mod : m_mods) {
|
||||
if (!mod.healthy) continue;
|
||||
try {
|
||||
mod.instance->OnLevelLoad();
|
||||
}
|
||||
catch (...) {
|
||||
Log("OnLevelLoad() threw for: " + std::string(mod.instance->GetInfo()->id));
|
||||
mod.healthy = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ModLoader::OnLevelUnload() {
|
||||
Log(L"Level has unloaded");
|
||||
Log("Level unloaded");
|
||||
for (auto& mod : m_mods) {
|
||||
if (!mod.healthy) continue;
|
||||
try {
|
||||
mod.instance->OnLevelUnload();
|
||||
}
|
||||
catch (...) {
|
||||
Log("OnLevelUnload() threw for: " + std::string(mod.instance->GetInfo()->id));
|
||||
mod.healthy = false;
|
||||
}
|
||||
}
|
||||
|
|
@ -194,26 +196,29 @@ void ModLoader::OnLevelUnload() {
|
|||
void ModLoader::NotifyUpdate(float deltaTime) {
|
||||
for (auto& mod : m_mods) {
|
||||
if (!mod.healthy) continue;
|
||||
if (mod.instance == nullptr) {
|
||||
if (!mod.instance) {
|
||||
mod.healthy = false;
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
if (!mod.instance->OnUpdate(deltaTime)) {
|
||||
Log("OnUpdate() returned false for: " + std::string(mod.instance->GetInfo()->id));
|
||||
mod.healthy = false;
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
Log("OnUpdate() threw for: " + std::string(mod.instance->GetInfo()->id));
|
||||
mod.healthy = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ModLoader::Shutdown() {
|
||||
for (int i = static_cast<int>(m_mods.size()) - 1; i >= 0; --i) {
|
||||
Log("Shutting down ModLoader");
|
||||
for (int i = static_cast<int>(m_mods.size()) - 1; i >= 0; --i)
|
||||
UnloadOneMod(m_mods[i]);
|
||||
}
|
||||
m_mods.clear();
|
||||
|
||||
if (m_logFile != INVALID_HANDLE_VALUE) {
|
||||
CloseHandle(m_logFile);
|
||||
m_logFile = INVALID_HANDLE_VALUE;
|
||||
|
|
@ -223,9 +228,8 @@ void ModLoader::Shutdown() {
|
|||
IMod* ModLoader::FindMod(const std::string& id) const {
|
||||
for (const auto& mod : m_mods) {
|
||||
if (mod.healthy && mod.instance &&
|
||||
std::string(mod.instance->GetInfo()->id) == id) {
|
||||
std::string(mod.instance->GetInfo()->id) == id)
|
||||
return mod.instance;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
|
@ -234,34 +238,51 @@ void ModLoader::ScanAndLoadMods(const std::wstring& modsDir) {
|
|||
DWORD dwAttrib = GetFileAttributesW(modsDir.c_str());
|
||||
if (dwAttrib == INVALID_FILE_ATTRIBUTES || !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) {
|
||||
CreateDirectoryW(modsDir.c_str(), NULL);
|
||||
Log("Mods directory not found — created it");
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<std::wstring> dllPaths;
|
||||
std::wstring searchPath = modsDir + L"\\*.dll";
|
||||
WIN32_FIND_DATAW fd;
|
||||
HANDLE hFind = FindFirstFileW(searchPath.c_str(), &fd);
|
||||
|
||||
if (hFind != INVALID_HANDLE_VALUE) {
|
||||
do {
|
||||
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
|
||||
std::wstring fullPath = modsDir + L"\\" + fd.cFileName;
|
||||
UpdateSplashStatus(L"Loading: " + std::wstring(fd.cFileName));
|
||||
LoadOneMod(fullPath);
|
||||
}
|
||||
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||
dllPaths.push_back(modsDir + L"\\" + fd.cFileName);
|
||||
} while (FindNextFileW(hFind, &fd));
|
||||
FindClose(hFind);
|
||||
}
|
||||
|
||||
g_TotalMods = static_cast<int>(dllPaths.size());
|
||||
Log("Found " + std::to_string(g_TotalMods) + " mod(s) to load");
|
||||
|
||||
for (const auto& path : dllPaths) {
|
||||
std::wstring filename = path.substr(path.find_last_of(L"\\/") + 1);
|
||||
UpdateSplashStatus(L"Loading: " + filename);
|
||||
LoadOneMod(path);
|
||||
}
|
||||
}
|
||||
|
||||
bool ModLoader::LoadOneMod(const std::wstring& dllPath) {
|
||||
std::string narrowPath(dllPath.begin(), dllPath.end());
|
||||
std::string filename = narrowPath.substr(narrowPath.find_last_of("\\/") + 1);
|
||||
|
||||
auto t0 = std::chrono::steady_clock::now();
|
||||
|
||||
HMODULE hMod = LoadLibraryW(dllPath.c_str());
|
||||
if (!hMod) return false;
|
||||
if (!hMod) {
|
||||
Log("FAIL [" + filename + "] LoadLibrary failed (error " + std::to_string(GetLastError()) + ")");
|
||||
++g_FailedMods;
|
||||
return false;
|
||||
}
|
||||
|
||||
using CreateModFn = IMod * (*)();
|
||||
auto createFn = reinterpret_cast<CreateModFn>(GetProcAddress(hMod, "CreateMod"));
|
||||
|
||||
if (!createFn) {
|
||||
Log("FAIL [" + filename + "] missing CreateMod export");
|
||||
FreeLibrary(hMod);
|
||||
++g_FailedMods;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -270,37 +291,67 @@ bool ModLoader::LoadOneMod(const std::wstring& dllPath) {
|
|||
instance = createFn();
|
||||
}
|
||||
catch (...) {
|
||||
Log("FAIL [" + filename + "] CreateMod() threw");
|
||||
FreeLibrary(hMod);
|
||||
++g_FailedMods;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!instance) {
|
||||
Log("FAIL [" + filename + "] CreateMod() returned null");
|
||||
FreeLibrary(hMod);
|
||||
++g_FailedMods;
|
||||
return false;
|
||||
}
|
||||
|
||||
const ModInfo* info = instance->GetInfo();
|
||||
std::string modId = info ? info->id : "(unknown)";
|
||||
std::string modVer = info
|
||||
? std::to_string(info->version.major) + "."
|
||||
+ std::to_string(info->version.minor) + "."
|
||||
+ std::to_string(info->version.patch)
|
||||
: "(unknown)";
|
||||
|
||||
LoadedMod record;
|
||||
record.module = hMod;
|
||||
record.instance = instance;
|
||||
record.path = std::string(dllPath.begin(), dllPath.end());
|
||||
record.path = narrowPath;
|
||||
|
||||
try {
|
||||
if (!instance->OnLoad()) {
|
||||
Log("WARN [" + modId + " " + modVer + "] OnLoad() returned false — marking unhealthy");
|
||||
record.healthy = false;
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
Log("FAIL [" + modId + " " + modVer + "] OnLoad() threw — marking unhealthy");
|
||||
record.healthy = false;
|
||||
}
|
||||
|
||||
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
std::chrono::steady_clock::now() - t0).count();
|
||||
|
||||
if (record.healthy) {
|
||||
Log("OK [" + modId + " " + modVer + "] loaded in " + std::to_string(elapsed) + "ms");
|
||||
++g_LoadedMods;
|
||||
}
|
||||
else {
|
||||
++g_FailedMods;
|
||||
}
|
||||
|
||||
m_mods.push_back(std::move(record));
|
||||
return true;
|
||||
return record.healthy;
|
||||
}
|
||||
|
||||
void ModLoader::UnloadOneMod(LoadedMod& mod) {
|
||||
if (!mod.instance) return;
|
||||
|
||||
if (mod.instance->GetInfo())
|
||||
Log("Unloading: " + std::string(mod.instance->GetInfo()->id));
|
||||
|
||||
delete mod.instance;
|
||||
mod.instance = nullptr;
|
||||
|
||||
if (mod.module) {
|
||||
FreeLibrary(mod.module);
|
||||
mod.module = nullptr;
|
||||
|
|
@ -308,30 +359,38 @@ void ModLoader::UnloadOneMod(LoadedMod& mod) {
|
|||
}
|
||||
|
||||
void ModLoader::OpenLogFile() {
|
||||
std::wstring dir = GetModsDirectory();
|
||||
std::wstring logPath = dir + L"\\modloader.log";
|
||||
CreateDirectoryW(dir.c_str(), NULL);
|
||||
std::wstring logPath = GetModsDirectory() + L"\\modloader.log";
|
||||
CreateDirectoryW(GetModsDirectory().c_str(), NULL);
|
||||
m_logFile = CreateFileW(logPath.c_str(), GENERIC_WRITE, FILE_SHARE_READ,
|
||||
nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
|
||||
|
||||
if (m_logFile != INVALID_HANDLE_VALUE) {
|
||||
BYTE bom[3] = { 0xEF, 0xBB, 0xBF };
|
||||
DWORD written;
|
||||
WriteFile(m_logFile, bom, 3, &written, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void ModLoader::Log(const std::wstring& msg) {
|
||||
void ModLoader::Log(const std::string& msg) {
|
||||
auto now = std::chrono::system_clock::now();
|
||||
std::time_t t = std::chrono::system_clock::to_time_t(now);
|
||||
struct tm buf;
|
||||
localtime_s(&buf, &t);
|
||||
char ts[16];
|
||||
std::strftime(ts, sizeof(ts), "[%H:%M:%S] ", &buf);
|
||||
std::wstring line = std::wstring(ts, ts + strlen(ts)) + msg + L"\r\n";
|
||||
|
||||
std::string line = std::string(ts) + msg + "\r\n";
|
||||
|
||||
if (m_logFile != INVALID_HANDLE_VALUE) {
|
||||
DWORD written;
|
||||
WriteFile(m_logFile, line.c_str(), static_cast<DWORD>(line.size() * sizeof(wchar_t)), &written, nullptr);
|
||||
WriteFile(m_logFile, line.c_str(), static_cast<DWORD>(line.size()), &written, nullptr);
|
||||
}
|
||||
OutputDebugStringW(line.c_str());
|
||||
|
||||
OutputDebugStringA(line.c_str());
|
||||
}
|
||||
|
||||
void ModLoader::Log(const std::string& msg) {
|
||||
Log(std::wstring(msg.begin(), msg.end()));
|
||||
void ModLoader::Log(const std::wstring& msg) {
|
||||
Log(std::string(msg.begin(), msg.end()));
|
||||
}
|
||||
|
||||
std::wstring ModLoader::GetModsDirectory() const {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,37 @@
|
|||
SDK.cpp
|
||||
ModLoader.cpp
|
||||
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\xutility(4813,18): warning C4244: '=': conversion from 'const wchar_t' to 'char', possible loss of data
|
||||
(compiling source file '/ModLoader.cpp')
|
||||
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\xutility(4813,18):
|
||||
the template instantiation context (the oldest one first) is
|
||||
S:\GitHub\Faucet\Minecraft.Client\ModLoader.cpp(285,30):
|
||||
see reference to function template instantiation 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string<std::_String_const_iterator<std::_String_val<std::_Simple_types<_Elem>>>,0>(_Iter,_Iter,const _Alloc &)' being compiled
|
||||
with
|
||||
[
|
||||
_Elem=wchar_t,
|
||||
_Iter=std::_String_const_iterator<std::_String_val<std::_Simple_types<wchar_t>>>,
|
||||
_Alloc=std::allocator<char>
|
||||
]
|
||||
S:\GitHub\Faucet\Minecraft.Client\ModLoader.cpp(285,17):
|
||||
see the first reference to 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string' in 'ModLoader::LoadOneMod'
|
||||
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\xstring(812,17):
|
||||
see reference to function template instantiation 'void std::basic_string<char,std::char_traits<char>,std::allocator<char>>::_Construct_from_iter<const wchar_t*,const wchar_t*,_Size_type>(_Iter,const _Sent,_Size)' being compiled
|
||||
with
|
||||
[
|
||||
_Size_type=unsigned __int64,
|
||||
_Iter=const wchar_t *,
|
||||
_Sent=const wchar_t *,
|
||||
_Size=unsigned __int64
|
||||
]
|
||||
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\xstring(968,18):
|
||||
see reference to function template instantiation '_OutIt *std::_Copy_n_unchecked4<const wchar_t*,_Size,char*>(_InIt,_SizeTy,_OutIt)' being compiled
|
||||
with
|
||||
[
|
||||
_OutIt=char *,
|
||||
_Size=unsigned __int64,
|
||||
_InIt=const wchar_t *,
|
||||
_SizeTy=unsigned __int64
|
||||
]
|
||||
|
||||
Microsoft (R) Incremental Linker Version 14.44.35222.0
|
||||
Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
"/OUT:S:\GitHub\Faucet\x64\Debug\Faucet.exe" /INCREMENTAL "/ILK:x64\Debug\Faucet.ilk" d3d11.lib ..\Minecraft.World\x64_Debug\Minecraft.World.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib XInput9_1_0.lib ..\Minecraft.Client\Windows64\Miles\Lib\mss64.lib wsock32.lib /MANIFEST "/MANIFESTUAC:level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG "/PDB:S:\GitHub\Faucet\x64\Debug\Minecraft.Client.pdb" /TLBID:1 /DYNAMICBASE /NXCOMPAT "/IMPLIB:S:\GitHub\Faucet\x64\Debug\Faucet.lib" /MACHINE:X64 x64\Debug\MinecraftWindows.res
|
||||
|
|
@ -506,40 +539,6 @@
|
|||
Windows64\Iggy\lib\iggy_w64.lib
|
||||
Windows64\Miles\lib\mss64.lib
|
||||
x64\Debug\iob_shim.obj
|
||||
4J_Input_d.lib(4J_Input.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Input_d.lib(4J_Input.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Input_d.lib(INP_Keyboard.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Input_d.lib(INP_Keyboard.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Input_d.lib(INP_Main.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Input_d.lib(INP_Main.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Input_d.lib(stdafx.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Input_d.lib(stdafx.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Input_d.lib(LinkedList.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Input_d.lib(LinkedList.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Input_d.lib(INP_ForceFeedback.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Input_d.lib(INP_ForceFeedback.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(4J_Render.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(4J_Render.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(RendererMatrix.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(RendererMatrix.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(RendererCore.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(RendererCore.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(RendererVertex.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(RendererVertex.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(RendererCBuff.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(RendererCBuff.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(RendererTexture.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(RendererTexture.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(RendererState.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(RendererState.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(stdafx.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(stdafx.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngread.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngread.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngwrite.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngwrite.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(png.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(png.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngrtran.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngrtran.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngtrans.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngtrans.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngrio.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngrio.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngmem.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngmem.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngerror.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngerror.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngset.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngset.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngget.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngget.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngrutil.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngrutil.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngwutil.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngwutil.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngwio.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngwio.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Render_PC_d.lib(pngwtran.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Render_PC_d.lib(pngwtran.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Storage_d.lib(4J_Storage.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Storage_d.lib(4J_Storage.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Storage_d.lib(STO_SaveGame.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Storage_d.lib(STO_SaveGame.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Storage_d.lib(STO_DLC.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Storage_d.lib(STO_DLC.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Storage_d.lib(STO_Main.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Storage_d.lib(STO_Main.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
4J_Storage_d.lib(stdafx.obj) : warning LNK4099: PDB 'vc110.pdb' was not found with '4J_Storage_d.lib(stdafx.obj)' or at 'S:\GitHub\Faucet\x64\Debug\vc110.pdb'; linking object as if no debug info
|
||||
Creating library S:\GitHub\Faucet\x64\Debug\Faucet.lib and object S:\GitHub\Faucet\x64\Debug\Faucet.exp
|
||||
Minecraft.Client.vcxproj -> S:\GitHub\Faucet\x64\Debug\Faucet.exe
|
||||
Run post-build script
|
||||
Post-build script started. Output Directory: S:\GitHub\Faucet\x64\Debug\/, Project Directory: S:\GitHub\Faucet\Minecraft.Client\/
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in a new issue