[IW4MVM] Include IW4MVM

This commit is contained in:
momo5502 2017-07-05 17:57:52 +02:00
parent 33d15d96cc
commit bbc28a0a8b
10 changed files with 109 additions and 7 deletions

3
.gitmodules vendored
View File

@ -29,3 +29,6 @@
[submodule "deps/udis86"]
path = deps/udis86
url = ../udis86.git
[submodule "deps/iw4mvm"]
path = deps/iw4mvm
url = ../../luckyy/IW4MVM_IW4X.git

1
deps/iw4mvm vendored Submodule

@ -0,0 +1 @@
Subproject commit b46e28f4cf044699433ff2dff459f498e418a430

54
premake/iw4mvm.lua Normal file
View File

@ -0,0 +1,54 @@
iw4mvm = {
settings = nil
}
function iw4mvm.setup(settings)
if not settings.source then error("Missing source.") end
iw4mvm.settings = settings
if not iw4mvm.settings.defines then iw4mvm.settings.defines = {} end
end
function iw4mvm.import()
if not iw4mvm.settings then error("You need to call iw4mvm.setup first") end
links { "iw4mvm" }
iw4mvm.includes()
end
function iw4mvm.includes()
if not iw4mvm.settings then error("You need to call iw4mvm.setup first") end
includedirs { iw4mvm.settings.source }
libdirs { path.join(iw4mvm.settings.source, "IW4MVM") }
defines(iw4mvm.settings.defines)
end
function iw4mvm.project()
if not iw4mvm.settings then error("You need to call iw4mvm.setup first") end
project "iw4mvm"
language "C++"
characterset ("MBCS")
defines("_CRT_SECURE_NO_WARNINGS")
iw4mvm.includes()
files
{
path.join(iw4mvm.settings.source, "IW4MVM/*.h"),
path.join(iw4mvm.settings.source, "IW4MVM/*.cpp"),
}
removefiles
{
--path.join(iw4mvm.settings.source, "IW4MVM/detours.cpp"),
path.join(iw4mvm.settings.source, "IW4MVM/DllMain.cpp"),
}
-- not our code, ignore POSIX usage warnings for now
warnings "Off"
kind "StaticLib"
end

View File

@ -21,7 +21,6 @@ function zlib.includes()
if not zlib.settings then error("You need to call zlib.setup first") end
includedirs { zlib.settings.source }
defines { "ssize_t=int" }
defines(zlib.settings.defines)
end
@ -46,9 +45,5 @@ function zlib.project()
-- not our code, ignore POSIX usage warnings for now
warnings "Off"
kind "SharedLib"
--configuration "*Static"
defines { "_LIB" }
removedefines { "_USRDLL", "_DLL", "ZLIB_DLL" }
kind "StaticLib"
kind "StaticLib"
end

View File

@ -181,6 +181,7 @@ require "premake/pdcurses"
require "premake/protobuf"
require "premake/zlib"
require "premake/udis86"
require "premake/iw4mvm"
json11.setup
{
@ -218,6 +219,7 @@ zlib.setup
{
defines = {
"ZLIB_CONST",
"ssize_t=int"
},
source = path.join(depsBasePath, "zlib"),
}
@ -225,6 +227,15 @@ udis86.setup
{
source = path.join(depsBasePath, "udis86"),
}
iw4mvm.setup
{
defines = {
"IW4X",
"DETOURS_X86",
"DETOURS_32BIT",
},
source = path.join(depsBasePath, "iw4mvm"),
}
workspace "iw4x"
location "./build"
@ -312,6 +323,7 @@ workspace "iw4x"
protobuf.import()
zlib.import()
udis86.import()
iw4mvm.import()
-- fix vpaths for protobuf sources
vpaths
@ -424,6 +436,7 @@ workspace "iw4x"
protobuf.project()
zlib.project()
udis86.project()
iw4mvm.project()
rule "ProtobufCompiler"
display "Protobuf compiler"

View File

@ -49,6 +49,9 @@ namespace Components
Loader::Register(new Zones());
Loader::Register(new Colors());
Loader::Register(new D3D9Ex());
#if !defined(VLD_RPTHOOK_INSTALL) || defined(VLDEnable) // IW4MVM uses detours which produces memory leaks, but those are not really relevant
Loader::Register(new IW4MVM());
#endif
Loader::Register(new Logger());
Loader::Register(new Script());
Loader::Register(new Weapon());

View File

@ -89,6 +89,7 @@ namespace Components
#include "Modules/Node.hpp"
#include "Modules/RCon.hpp"
#include "Modules/Party.hpp" // Destroys the order, but requires network classes :D
#include "Modules/IW4MVM.hpp"
#include "Modules/Logger.hpp"
#include "Modules/Friends.hpp"
#include "Modules/IPCPipe.hpp"

View File

@ -0,0 +1,22 @@
#include "STDInclude.hpp"
#include <IW4MVM/client_main.h>
namespace Components
{
IW4MVM::IW4MVM()
{
DWORD oldProtect;
std::uint8_t* module = reinterpret_cast<std::uint8_t*>(GetModuleHandle(nullptr));
VirtualProtect(module + 0x1000, 0x2D6000, PAGE_EXECUTE_READWRITE, &oldProtect);
client_main::Init();
Scheduler::Once(client_main::PostInit);
VirtualProtect(module + 0x1000, 0x2D6000, PAGE_EXECUTE_READ, &oldProtect);
}
IW4MVM::~IW4MVM()
{
}
}

View File

@ -0,0 +1,11 @@
#pragma once
namespace Components
{
class IW4MVM : public Component
{
public:
IW4MVM();
~IW4MVM();
};
}

View File

@ -70,7 +70,6 @@ BOOL APIENTRY DllMain(HMODULE /*hModule*/, DWORD ul_reason_for_call, LPVOID /*l
DWORD oldProtect;
std::uint8_t* module = reinterpret_cast<std::uint8_t*>(GetModuleHandle(nullptr));
//VirtualProtect(module, 0x6C73000, PAGE_EXECUTE_READWRITE, &oldProtect); // Unprotect the entire process
VirtualProtect(module + 0x1000, 0x2D6000, PAGE_EXECUTE_READ, &oldProtect); // Protect the .text segment
// Install entry point hook