From e72fa2486d4f17ffc7b6ee5f7003bc7f33dd568e Mon Sep 17 00:00:00 2001 From: Jessica James Date: Thu, 23 Jan 2020 12:50:53 -0600 Subject: [PATCH] Added RenX.KickDupes Updated Jupiter version --- src/Jupiter | 2 +- src/Plugins/RenX/CMakeLists.txt | 1 + .../RenX/RenX.KickDupes/CMakeLists.txt | 3 + .../RenX/RenX.KickDupes/RenX_KickDupes.cpp | 58 +++++++++++++++++++ .../RenX/RenX.KickDupes/RenX_KickDupes.h | 35 +++++++++++ 5 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 src/Plugins/RenX/RenX.KickDupes/CMakeLists.txt create mode 100644 src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp create mode 100644 src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.h diff --git a/src/Jupiter b/src/Jupiter index d552a20..916d58e 160000 --- a/src/Jupiter +++ b/src/Jupiter @@ -1 +1 @@ -Subproject commit d552a20869c1a8a1b7840405325cb420d9f86ff0 +Subproject commit 916d58ea1628c56e7d660c8bb711eb77dd443a30 diff --git a/src/Plugins/RenX/CMakeLists.txt b/src/Plugins/RenX/CMakeLists.txt index 6e3e04e..9a88f0c 100644 --- a/src/Plugins/RenX/CMakeLists.txt +++ b/src/Plugins/RenX/CMakeLists.txt @@ -19,6 +19,7 @@ add_subdirectory(RenX.ExtraLogging) add_subdirectory(RenX.Greetings) add_subdirectory(RenX.HybridUUID) add_subdirectory(RenX.IRCJoin) +add_subdirectory(RenX.KickDupes) add_subdirectory(RenX.Ladder) add_subdirectory(RenX.Ladder.All-Time) add_subdirectory(RenX.Ladder.Daily) diff --git a/src/Plugins/RenX/RenX.KickDupes/CMakeLists.txt b/src/Plugins/RenX/RenX.KickDupes/CMakeLists.txt new file mode 100644 index 0000000..7a9ab5a --- /dev/null +++ b/src/Plugins/RenX/RenX.KickDupes/CMakeLists.txt @@ -0,0 +1,3 @@ +add_renx_plugin(RenX.KickDupes + RenX_KickDupes.cpp + RenX_KickDupes.h) diff --git a/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp b/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp new file mode 100644 index 0000000..1464560 --- /dev/null +++ b/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2020 Jessica James. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Written by Jessica James + */ + +#include "RenX_Core.h" +#include "RenX_Server.h" +#include "RenX_Functions.h" +#include "RenX_PlayerInfo.h" +#include "RenX_KickDupes.h" + +using namespace Jupiter::literals; + +bool RenX_KickDupesPlugin::initialize() { + return true; +} + +void RenX_KickDupesPlugin::RenX_OnPlayerIdentify(RenX::Server &in_server, const RenX::PlayerInfo &in_player) { + // Safety checks + if (in_player.hwid.isEmpty()) { + // Somehow, the player's identified without any HWID. TODO: log this + return; + } + + // Exempt development servers from this check + if (in_server.getGameVersion().findi("-DEV"_jrs) != Jupiter::INVALID_INDEX) { + return; + } + + // Check to see if any other players on the server have the same HWID + for (auto& player : in_server.players) { + if (player.hwid == in_player.hwid && player.id != in_player.id) { + // Two players have the same HWID, but separate player IDs; kick the pre-existing player. + in_server.forceKickPlayer(player, "Ghost client detected"_jrs); + } + } +} + +// Plugin instantiation and entry point. +RenX_KickDupesPlugin pluginInstance; + +extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() +{ + return &pluginInstance; +} diff --git a/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.h b/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.h new file mode 100644 index 0000000..d535bae --- /dev/null +++ b/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.h @@ -0,0 +1,35 @@ +/** + * Copyright (C) 2020 Jessica James. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Written by Jessica James + */ + +#if !defined _RENX_KICKDUPES_H_HEADER +#define _RENX_KICKDUPES_H_HEADER + +#include "Jupiter/Plugin.h" +#include "Jupiter/Reference_String.h" +#include "RenX_Plugin.h" + +class RenX_KickDupesPlugin : public RenX::Plugin +{ +public: // RenX_KickDupesPlugin + virtual bool initialize() override; + +public: // RenX::Plugin + void RenX_OnPlayerIdentify(RenX::Server &server, const RenX::PlayerInfo &player) override; +}; + +#endif // _RENX_KICKDUPES_H_HEADER