From 80409f1fc39c9fd18392e99032efcb69107b726b Mon Sep 17 00:00:00 2001 From: Tsubasa6848 <116721335+Tsubasa6848@users.noreply.github.com> Date: Tue, 19 Sep 2023 09:10:27 +0800 Subject: [PATCH] new plugin --- .gitignore | 17 +++++++++ CMakeLists.txt | 81 +++++++++++++++++++++++++++++++++++++++++++ prepare_libraries.cmd | 11 ++++++ src/DamageCause.cpp | 0 src/Main.cpp | 7 ++++ src/dllmain.cpp | 53 ++++++++++++++++++++++++++++ src/version.h | 52 +++++++++++++++++++++++++++ 7 files changed, 221 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 prepare_libraries.cmd create mode 100644 src/DamageCause.cpp create mode 100644 src/Main.cpp create mode 100644 src/dllmain.cpp create mode 100644 src/version.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f78b4f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps +CMakeSettings.json +.vscode/ +build/ +SDK-cpp/ +lib/ +include/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..30e84ef --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,81 @@ +cmake_minimum_required(VERSION 3.21) + +project(ZombieSceptor) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_BUILD_TYPE Release) + +file(GLOB_RECURSE SRC_FILES_DIR + ${PROJECT_SOURCE_DIR}/src/*.c + ${PROJECT_SOURCE_DIR}/src/*.cpp + ${PROJECT_SOURCE_DIR}/src/*.h +) + +include_directories( + ${CMAKE_SOURCE_DIR}/SDK-cpp/include + ${CMAKE_SOURCE_DIR}/SDK-cpp/include/llapi + ${CMAKE_SOURCE_DIR}/include +) + +link_directories( + ${CMAKE_SOURCE_DIR}/SDK-cpp/lib +) + +add_definitions( + -D"NDEBUG" + -D"NOMINMAX" + -D"TEMPLATE_EXPORTS" + -D"UNICODE" + -D"WIN32_LEAN_AND_MEAN" + -D"_AMD64_" + -D"_CRT_SECURE_NO_WARNINGS" + -D"_UNICODE" + -D"_USRDLL" + -D"_WINDLL" + -D"_WINDOWS" +) + +add_compile_options( + /diagnostics:column + /EHsc + /FC + /GL + /MD + /nologo + /permissive- + /sdl + /utf-8 + /Zc:inline + /Zi + /MP +) + +add_link_options( + /DEBUG + /DELAYLOAD:"bedrock_server.dll" + /DLL + /IGNORE:4199 + /INCREMENTAL:NO + /LTCG:INCREMENTAL + /MANIFESTUAC:NO + /MACHINE:X64 + /NOLOGO + /OPT:ICF + /OPT:REF + /SUBSYSTEM:CONSOLE +) + +add_library(${CMAKE_PROJECT_NAME} SHARED ${SRC_FILES_DIR}) + +target_link_libraries(${CMAKE_PROJECT_NAME} + "${CMAKE_SOURCE_DIR}/SDK-cpp/lib/LiteLoader.lib" + "${CMAKE_SOURCE_DIR}/SDK-cpp/lib/bedrock_server_api.lib" + "${CMAKE_SOURCE_DIR}/SDK-cpp/lib/bedrock_server_var.lib" + "${CMAKE_SOURCE_DIR}/SDK-cpp/lib/SymDBHelper.lib" + "${CMAKE_SOURCE_DIR}/lib/plhook.lib" + "${CMAKE_SOURCE_DIR}/lib/GMLib.lib" +) + +add_custom_command(TARGET ${CMAKE_PROJECT_NAME} PRE_BUILD + COMMAND cmd /c ${PROJECT_SOURCE_DIR}/prepare_libraries.cmd ${PROJECT_SOURCE_DIR} +) \ No newline at end of file diff --git a/prepare_libraries.cmd b/prepare_libraries.cmd new file mode 100644 index 0000000..e30e1ce --- /dev/null +++ b/prepare_libraries.cmd @@ -0,0 +1,11 @@ +@echo off + +if not exist %1\SDK-cpp\Lib\bedrock_server_api.lib goto process +if not exist %1\SDK-cpp\Lib\bedrock_server_var.lib goto process +goto end + +:process +cd /d %1\SDK-cpp\tools\ +PeEditor.exe -c -l -o ../lib + +:end \ No newline at end of file diff --git a/src/DamageCause.cpp b/src/DamageCause.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/Main.cpp b/src/Main.cpp new file mode 100644 index 0000000..d1728af --- /dev/null +++ b/src/Main.cpp @@ -0,0 +1,7 @@ +#include +#include "version.h" +#include +#include + +extern Logger logger; + diff --git a/src/dllmain.cpp b/src/dllmain.cpp new file mode 100644 index 0000000..8f10315 --- /dev/null +++ b/src/dllmain.cpp @@ -0,0 +1,53 @@ +#include +#include +#include "version.h" + +void PluginInit(); +bool CanLoad = false; + +Logger logger(PLUGIN_NAME); + +void CheckProtocolVersion() { + auto current_protocol = ll::getServerProtocolVersion(); + if (TARGET_BDS_PROTOCOL_VERSION != current_protocol) { + logger.error("Protocol version mismatched! Target version: {}. Current version: {}.", TARGET_BDS_PROTOCOL_VERSION, current_protocol); + logger.error("This may result in crash. Please switch to the version matching the BDS version!"); + } + else { + CanLoad = true; + PluginInit(); + } +} + +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + ll::registerPlugin( + PLUGIN_NAME, + PLUGIN_INTRODUCTION, + ll::Version(PLUGIN_VERSION_MAJOR, PLUGIN_VERSION_MINOR, PLUGIN_VERSION_REVISION, PLUGIN_LLVERSION_STATUS), + std::map{ + {"Author", PLUGIN_AUTHOR}, + }); + break; + + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + _declspec(dllexport) void onPostInit() + { + std::ios::sync_with_stdio(false); + CheckProtocolVersion(); + } +} diff --git a/src/version.h b/src/version.h new file mode 100644 index 0000000..5d9e425 --- /dev/null +++ b/src/version.h @@ -0,0 +1,52 @@ +#pragma once + +#define PLUGIN_VERSION_DEV 0 +#define PLUGIN_VERSION_BETA 1 +#define PLUGIN_VERSION_RELEASE 2 + +#define PLUGIN_NAME "ZombieSceptor" +#define PLUGIN_INTRODUCTION "GMLib Mod Test - ZombieSceptor" +#define PLUGIN_AUTHOR "Tsubasa6848" + +#define PLUGIN_VERSION_MAJOR 1 +#define PLUGIN_VERSION_MINOR 0 +#define PLUGIN_VERSION_REVISION 0 +#define PLUGIN_VERSION_BUILD 0 +#define TARGET_BDS_PROTOCOL_VERSION 594 + +#define PLUGIN_VERSION_STATUS 2 + +#define __TO_VERSION_STRING(ver) #ver +#define TO_VERSION_STRING(ver) __TO_VERSION_STRING(ver) + +#if PLUGIN_VERSION_STATUS == 0 + +#define PLUGIN_FILE_VERSION_FLAG VS_FF_DEBUG +#define PLUGIN_LLVERSION_STATUS ll::Version::Dev +#define PLUGIN_FILE_VERSION_STRING TO_VERSION_STRING(PLUGIN_VERSION_MAJOR.PLUGIN_VERSION_MINOR.PLUGIN_VERSION_REVISION.PLUGIN_VERSION_BUILD DEV) + +#elif PLUGIN_VERSION_STATUS == 1 + +#define PLUGIN_FILE_VERSION_FLAG VS_FF_DEBUG +#define PLUGIN_LLVERSION_STATUS ll::Version::Beta +#define PLUGIN_FILE_VERSION_STRING TO_VERSION_STRING(PLUGIN_VERSION_MAJOR.PLUGIN_VERSION_MINOR.PLUGIN_VERSION_REVISION.PLUGIN_VERSION_BUILD BETA) + +#else + +#define PLUGIN_FILE_VERSION_FLAG 0x0L +#define PLUGIN_LLVERSION_STATUS ll::Version::Release +#define PLUGIN_FILE_VERSION_STRING TO_VERSION_STRING(PLUGIN_VERSION_MAJOR.PLUGIN_VERSION_MINOR.PLUGIN_VERSION_REVISION.PLUGIN_VERSION_BUILD) + +#endif + +#define FILE_VERSION_BLOCK_HEADER 0x04004B0L +#define FILE_VERSION_COMPANY_NAME PLUGIN_AUTHOR +#define FILE_VERSION_LEGAL_COPYRIGHT "Copyright (C) 2022" +#define FILE_VERSION_FILE_DESCRIPTION PLUGIN_INTRODUCTION +#define FILE_VERSION_FILE_VERSION_STRING PLUGIN_FILE_VERSION_STRING +#define FILE_VERSION_INTERNAL_NAME PLUGIN_NAME +#define FILE_VERSION_ORIGINAL_FILENAME PLUGIN_NAME ".dll" +#define FILE_VERSION_PRODUCT_NAME FILE_VERSION_INTERNAL_NAME +#define FILE_VERSION_PRODUCT_VERSION_STRING PLUGIN_FILE_VERSION_STRING +#define FILE_VERSION_FILE_VERSION PLUGIN_VERSION_MAJOR, PLUGIN_VERSION_MINOR, PLUGIN_VERSION_REVISION, PLUGIN_VERSION_BUILD +#define FILE_VERSION_PRODUCT_VERSION FILE_VERSION_FILE_VERSION