diff --git a/apps/openmw-mp/CMakeLists.txt b/apps/openmw-mp/CMakeLists.txt index af955e271..d75f6abbb 100644 --- a/apps/openmw-mp/CMakeLists.txt +++ b/apps/openmw-mp/CMakeLists.txt @@ -64,9 +64,9 @@ set(SERVER Script/Functions/Books.cpp Script/Functions/Cells.cpp Script/Functions/CharClass.cpp Script/Functions/Chat.cpp Script/Functions/Dialogue.cpp Script/Functions/Factions.cpp Script/Functions/GUI.cpp Script/Functions/Items.cpp Script/Functions/Mechanics.cpp - Script/Functions/Positions.cpp Script/Functions/Quests.cpp Script/Functions/Settings.cpp - Script/Functions/Shapeshift.cpp Script/Functions/Spells.cpp Script/Functions/Stats.cpp - Script/Functions/Timer.cpp + Script/Functions/Positions.cpp Script/Functions/Quests.cpp Script/Functions/Server.cpp + Script/Functions/Settings.cpp Script/Functions/Shapeshift.cpp Script/Functions/Spells.cpp + Script/Functions/Stats.cpp Script/Functions/Timer.cpp Script/API/TimerAPI.cpp Script/API/PublicFnAPI.cpp ${LuaScript_Sources} diff --git a/apps/openmw-mp/Script/Functions/Server.cpp b/apps/openmw-mp/Script/Functions/Server.cpp new file mode 100644 index 000000000..cb5ef5616 --- /dev/null +++ b/apps/openmw-mp/Script/Functions/Server.cpp @@ -0,0 +1,89 @@ +#include "Server.hpp" + +#include +#include +#include + +#include +#include +#include + + +void ServerFunctions::StopServer(int code) noexcept +{ + mwmp::Networking::getPtr()->stopServer(code); +} + +void ServerFunctions::Kick(unsigned short pid) noexcept +{ + Player *player; + GET_PLAYER(pid, player,); + mwmp::Networking::getPtr()->kickPlayer(player->guid); +} + +void ServerFunctions::BanAddress(const char *ipAddress) noexcept +{ + mwmp::Networking::getPtr()->banAddress(ipAddress); +} + +void ServerFunctions::UnbanAddress(const char *ipAddress) noexcept +{ + mwmp::Networking::getPtr()->unbanAddress(ipAddress); +} + +const char *ServerFunctions::GetServerVersion() noexcept +{ + return TES3MP_VERSION; +} + +const char *ServerFunctions::GetProtocolVersion() noexcept +{ + static std::string version = std::to_string(TES3MP_PROTO_VERSION); + return version.c_str(); +} + +int ServerFunctions::GetAvgPing(unsigned short pid) noexcept +{ + Player *player; + GET_PLAYER(pid, player, -1); + return mwmp::Networking::get().getAvgPing(player->guid); +} + +const char *ServerFunctions::GetIP(unsigned short pid) noexcept +{ + Player *player; + GET_PLAYER(pid, player, ""); + RakNet::SystemAddress addr = mwmp::Networking::getPtr()->getSystemAddress(player->guid); + return addr.ToString(false); +} + +void ServerFunctions::SetGameMode(const char *gameMode) noexcept +{ + if (mwmp::Networking::getPtr()->getMasterClient()) + mwmp::Networking::getPtr()->getMasterClient()->SetModname(gameMode); +} + +void ServerFunctions::SetHostname(const char *name) noexcept +{ + if (mwmp::Networking::getPtr()->getMasterClient()) + mwmp::Networking::getPtr()->getMasterClient()->SetHostname(name); +} + +void ServerFunctions::SetServerPassword(const char *password) noexcept +{ + mwmp::Networking::getPtr()->setServerPassword(password); +} + +void ServerFunctions::SetRuleString(const char *key, const char *value) noexcept +{ + auto mc = mwmp::Networking::getPtr()->getMasterClient(); + if (mc) + mc->SetRuleString(key, value); +} + +void ServerFunctions::SetRuleValue(const char *key, double value) noexcept +{ + auto mc = mwmp::Networking::getPtr()->getMasterClient(); + if (mc) + mc->SetRuleValue(key, value); +} diff --git a/apps/openmw-mp/Script/Functions/Server.hpp b/apps/openmw-mp/Script/Functions/Server.hpp new file mode 100644 index 000000000..595dfb2af --- /dev/null +++ b/apps/openmw-mp/Script/Functions/Server.hpp @@ -0,0 +1,133 @@ +#ifndef OPENMW_SERVERAPI_HPP +#define OPENMW_SERVERAPI_HPP + +#include "../Types.hpp" + +#define SERVERAPI \ + {"StopServer", ServerFunctions::StopServer},\ + \ + {"Kick", ServerFunctions::Kick},\ + {"BanAddress", ServerFunctions::BanAddress},\ + {"UnbanAddress", ServerFunctions::UnbanAddress},\ + \ + {"GetServerVersion", ServerFunctions::GetServerVersion},\ + {"GetProtocolVersion", ServerFunctions::GetProtocolVersion},\ + {"GetAvgPing", ServerFunctions::GetAvgPing},\ + {"GetIP", ServerFunctions::GetIP},\ + \ + {"SetGameMode", ServerFunctions::SetGameMode},\ + {"SetHostname", ServerFunctions::SetHostname},\ + {"SetServerPassword", ServerFunctions::SetServerPassword},\ + {"SetRuleString", ServerFunctions::SetRuleString},\ + {"SetRuleValue", ServerFunctions::SetRuleValue} + +class ServerFunctions +{ +public: + + /** + * \brief Shut down the server. + * + * \param code The shutdown code. + * \return void + */ + static void StopServer(int code) noexcept; + + /** + * \brief Kick a certain player from the server. + * + * \param pid The player ID. + * \return void + */ + static void Kick(unsigned short pid) noexcept; + + /** + * \brief Ban a certain IP address from the server. + * + * \param ipAddress The IP address. + * \return void + */ + static void BanAddress(const char *ipAddress) noexcept; + + /** + * \brief Unban a certain IP address from the server. + * + * \param ipAddress The IP address. + * \return void + */ + static void UnbanAddress(const char *ipAddress) noexcept; + + /** + * \brief Get the TES3MP version of the server. + * + * \return The server version. + */ + static const char *GetServerVersion() noexcept; + + /** + * \brief Get the protocol version of the server. + * + * \return The protocol version. + */ + static const char *GetProtocolVersion() noexcept; + + /** + * \brief Get the average ping of a certain player. + * + * \param pid The player ID. + * \return The average ping. + */ + static int GetAvgPing(unsigned short pid) noexcept; + + /** + * \brief Get the IP address of a certain player. + * + * \param pid The player ID. + * \return The IP address. + */ + static const char* GetIP(unsigned short pid) noexcept; + + /** + * \brief Set the game mode of the server, as displayed in the server browser. + * + * \param name The new game mode. + * \return void + */ + static void SetGameMode(const char* gameMode) noexcept; + + /** + * \brief Set the name of the server, as displayed in the server browser. + * + * \param name The new name. + * \return void + */ + static void SetHostname(const char* name) noexcept; + + /** + * \brief Set the password required to join the server. + * + * \param password The password. + * \return void + */ + static void SetServerPassword(const char *passw) noexcept; + + /** + * \brief Set a rule string for the server details displayed in the server browser. + * + * \param key The name of the rule. + * \param value The string value of the rule. + * \return void + */ + static void SetRuleString(const char *key, const char *value) noexcept; + + /** + * \brief Set a rule value for the server details displayed in the server browser. + * + * \param key The name of the rule. + * \param value The numerical value of the rule. + * \return void + */ + static void SetRuleValue(const char *key, double value) noexcept; +}; + +#endif //OPENMW_SERVERAPI_HPP diff --git a/apps/openmw-mp/Script/ScriptFunctions.cpp b/apps/openmw-mp/Script/ScriptFunctions.cpp index 033447fae..1053a10d3 100644 --- a/apps/openmw-mp/Script/ScriptFunctions.cpp +++ b/apps/openmw-mp/Script/ScriptFunctions.cpp @@ -1,7 +1,3 @@ -// -// Created by koncord on 24.01.16. -// - #include "ScriptFunctions.hpp" #include "API/PublicFnAPI.hpp" #include @@ -10,7 +6,6 @@ #include #include #include -#include "MasterClient.hpp" template constexpr char TypeString::value[]; @@ -95,82 +90,3 @@ boost::any ScriptFunctions::CallPublic(const char *name, va_list args) noexcept return 0; } - -void ScriptFunctions::StopServer(int code) noexcept -{ - mwmp::Networking::getPtr()->stopServer(code); -} - -void ScriptFunctions::Kick(unsigned short pid) noexcept -{ - Player *player; - GET_PLAYER(pid, player,); - mwmp::Networking::getPtr()->kickPlayer(player->guid); -} - -void ScriptFunctions::BanAddress(const char *ipAddress) noexcept -{ - mwmp::Networking::getPtr()->banAddress(ipAddress); -} - -void ScriptFunctions::UnbanAddress(const char *ipAddress) noexcept -{ - mwmp::Networking::getPtr()->unbanAddress(ipAddress); -} - -const char *ScriptFunctions::GetServerVersion() noexcept -{ - return TES3MP_VERSION; -} - -const char *ScriptFunctions::GetProtocolVersion() noexcept -{ - static string version = to_string(TES3MP_PROTO_VERSION); - return version.c_str(); -} - -int ScriptFunctions::GetAvgPing(unsigned short pid) noexcept -{ - Player *player; - GET_PLAYER(pid, player, -1); - return mwmp::Networking::get().getAvgPing(player->guid); -} - -const char *ScriptFunctions::GetIP(unsigned short pid) noexcept -{ - Player *player; - GET_PLAYER(pid, player, ""); - RakNet::SystemAddress addr = mwmp::Networking::getPtr()->getSystemAddress(player->guid); - return addr.ToString(false); -} - -void ScriptFunctions::SetGameMode(const char *gameMode) noexcept -{ - if (mwmp::Networking::getPtr()->getMasterClient()) - mwmp::Networking::getPtr()->getMasterClient()->SetModname(gameMode); -} - -void ScriptFunctions::SetHostname(const char *name) noexcept -{ - if (mwmp::Networking::getPtr()->getMasterClient()) - mwmp::Networking::getPtr()->getMasterClient()->SetHostname(name); -} - -void ScriptFunctions::SetServerPassword(const char *password) noexcept -{ - mwmp::Networking::getPtr()->setServerPassword(password); -} - -void ScriptFunctions::SetRuleString(const char *key, const char *value) noexcept -{ - auto mc = mwmp::Networking::getPtr()->getMasterClient(); - if (mc) - mc->SetRuleString(key, value); -} - -void ScriptFunctions::SetRuleValue(const char *key, double value) noexcept -{ - auto mc = mwmp::Networking::getPtr()->getMasterClient(); - if (mc) - mc->SetRuleValue(key, value); -} diff --git a/apps/openmw-mp/Script/ScriptFunctions.hpp b/apps/openmw-mp/Script/ScriptFunctions.hpp index e494cf7b5..5a1da5a44 100644 --- a/apps/openmw-mp/Script/ScriptFunctions.hpp +++ b/apps/openmw-mp/Script/ScriptFunctions.hpp @@ -16,6 +16,7 @@ #include