mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-04 05:45:33 +00:00
e6c626f127
ClientScriptGlobal is a new Worldstate packet that handles short, long and float values for global variables in clientside scripts. Previously, short values were handled by the ScriptGlobalShort packet, while a partially implemented ScriptGlobalFloat packet also existed, but both of those packets were Object packets because they were added near the end of 2016 when only Player and Object packets existed (with the latter actually being called WorldEvent packets at the time). Both ScriptGlobalShort and ScriptGlobalFloat have now been removed. The serverside script functions previously used to interact with ScriptGlobalShort have, however, been kept so they can be adjusted to work with local variables in clientside scripts instead in a future commit.
219 lines
9.1 KiB
C++
219 lines
9.1 KiB
C++
#ifndef SCRIPTFUNCTIONS_HPP
|
|
#define SCRIPTFUNCTIONS_HPP
|
|
|
|
#include <Script/Functions/Actors.hpp>
|
|
#include <Script/Functions/Books.hpp>
|
|
#include <Script/Functions/Cells.hpp>
|
|
#include <Script/Functions/CharClass.hpp>
|
|
#include <Script/Functions/Chat.hpp>
|
|
#include <Script/Functions/Dialogue.hpp>
|
|
#include <Script/Functions/Factions.hpp>
|
|
#include <Script/Functions/GUI.hpp>
|
|
#include <Script/Functions/Items.hpp>
|
|
#include <Script/Functions/Mechanics.hpp>
|
|
#include <Script/Functions/Miscellaneous.hpp>
|
|
#include <Script/Functions/Objects.hpp>
|
|
#include <Script/Functions/Positions.hpp>
|
|
#include <Script/Functions/Quests.hpp>
|
|
#include <Script/Functions/RecordsDynamic.hpp>
|
|
#include <Script/Functions/Shapeshift.hpp>
|
|
#include <Script/Functions/Server.hpp>
|
|
#include <Script/Functions/Settings.hpp>
|
|
#include <Script/Functions/Spells.hpp>
|
|
#include <Script/Functions/Stats.hpp>
|
|
#include <Script/Functions/Worldstate.hpp>
|
|
#include <RakNetTypes.h>
|
|
#include <tuple>
|
|
#include <apps/openmw-mp/Player.hpp>
|
|
#include "ScriptFunction.hpp"
|
|
#include "Types.hpp"
|
|
|
|
#include <components/openmw-mp/TimedLog.hpp>
|
|
|
|
#ifndef __PRETTY_FUNCTION__
|
|
#define __PRETTY_FUNCTION__ __FUNCTION__
|
|
#endif
|
|
|
|
#define GET_PLAYER(pid, pl, retvalue) \
|
|
pl = Players::getPlayer(pid); \
|
|
if (player == 0) {\
|
|
LOG_MESSAGE_SIMPLE(TimedLog::LOG_ERROR, "%s: Player with pid \'%d\' not found\n", __PRETTY_FUNCTION__, pid);\
|
|
/*ScriptFunctions::StopServer(1);*/ \
|
|
return retvalue;\
|
|
}
|
|
|
|
|
|
class ScriptFunctions
|
|
{
|
|
public:
|
|
|
|
static void MakePublic(ScriptFunc _public, const char *name, char ret_type, const char *def) noexcept;
|
|
static boost::any CallPublic(const char *name, va_list args) noexcept;
|
|
|
|
/**
|
|
* \brief Create a timer that will run a script function after a certain interval.
|
|
*
|
|
* \param callback The Lua script function.
|
|
* \param msec The interval in miliseconds.
|
|
* \return The ID of the timer thus created.
|
|
*/
|
|
static int CreateTimer(ScriptFunc callback, int msec) noexcept;
|
|
|
|
/**
|
|
* \brief Create a timer that will run a script function after a certain interval and pass
|
|
* certain arguments to it.
|
|
*
|
|
* Example usage:
|
|
* - tes3mp.CreateTimerEx("OnTimerTest1", 250, "i", 90)
|
|
* - tes3mp.CreateTimerEx("OnTimerTest2", 500, "sif", "Test string", 60, 77.321)
|
|
*
|
|
* \param callback The Lua script function.
|
|
* \param msec The interval in miliseconds.
|
|
* \param types The argument types.
|
|
* \param args The arguments.
|
|
* \return The ID of the timer thus created.
|
|
*/
|
|
static int CreateTimerEx(ScriptFunc callback, int msec, const char *types, va_list args) noexcept;
|
|
|
|
/**
|
|
* \brief Start the timer with a certain ID.
|
|
*
|
|
* \param timerId The timer ID.
|
|
* \return void
|
|
*/
|
|
static void StartTimer(int timerId) noexcept;
|
|
|
|
/**
|
|
* \brief Stop the timer with a certain ID.
|
|
*
|
|
* \param timerId The timer ID.
|
|
* \return void
|
|
*/
|
|
static void StopTimer(int timerId) noexcept;
|
|
|
|
/**
|
|
* \brief Restart the timer with a certain ID for a certain interval.
|
|
*
|
|
* \param timerId The timer ID.
|
|
* \param msec The interval in miliseconds.
|
|
* \return void
|
|
*/
|
|
static void RestartTimer(int timerId, int msec) noexcept;
|
|
|
|
/**
|
|
* \brief Free the timer with a certain ID.
|
|
*
|
|
* \param timerId The timer ID.
|
|
* \return void
|
|
*/
|
|
static void FreeTimer(int timerId) noexcept;
|
|
|
|
/**
|
|
* \brief Check whether a timer is elapsed.
|
|
*
|
|
* \param timerId The timer ID.
|
|
* \return Whether the timer is elapsed.
|
|
*/
|
|
static bool IsTimerElapsed(int timerId) noexcept;
|
|
|
|
|
|
static constexpr ScriptFunctionData functions[]{
|
|
{"CreateTimer", ScriptFunctions::CreateTimer},
|
|
{"CreateTimerEx", ScriptFunctions::CreateTimerEx},
|
|
{"MakePublic", ScriptFunctions::MakePublic},
|
|
{"CallPublic", ScriptFunctions::CallPublic},
|
|
|
|
{"StartTimer", ScriptFunctions::StartTimer},
|
|
{"StopTimer", ScriptFunctions::StopTimer},
|
|
{"RestartTimer", ScriptFunctions::RestartTimer},
|
|
{"FreeTimer", ScriptFunctions::FreeTimer},
|
|
{"IsTimerElapsed", ScriptFunctions::IsTimerElapsed},
|
|
|
|
ACTORAPI,
|
|
BOOKAPI,
|
|
CELLAPI,
|
|
CHARCLASSAPI,
|
|
CHATAPI,
|
|
DIALOGUEAPI,
|
|
FACTIONAPI,
|
|
GUIAPI,
|
|
ITEMAPI,
|
|
MECHANICSAPI,
|
|
MISCELLANEOUSAPI,
|
|
POSITIONAPI,
|
|
QUESTAPI,
|
|
RECORDSDYNAMICAPI,
|
|
SHAPESHIFTAPI,
|
|
SERVERAPI,
|
|
SETTINGSAPI,
|
|
SPELLAPI,
|
|
STATAPI,
|
|
OBJECTAPI,
|
|
WORLDSTATEAPI
|
|
};
|
|
|
|
static constexpr ScriptCallbackData callbacks[]{
|
|
{"OnServerInit", Callback<>()},
|
|
{"OnServerPostInit", Callback<>()},
|
|
{"OnServerExit", Callback<bool>()},
|
|
{"OnServerScriptCrash", Callback<const char*>()},
|
|
{"OnPlayerConnect", Callback<unsigned short>()},
|
|
{"OnPlayerDisconnect", Callback<unsigned short>()},
|
|
{"OnPlayerDeath", Callback<unsigned short>()},
|
|
{"OnPlayerResurrect", Callback<unsigned short>()},
|
|
{"OnPlayerCellChange", Callback<unsigned short>()},
|
|
{"OnPlayerAttribute", Callback<unsigned short>()},
|
|
{"OnPlayerSkill", Callback<unsigned short>()},
|
|
{"OnPlayerLevel", Callback<unsigned short>()},
|
|
{"OnPlayerBounty", Callback<unsigned short>()},
|
|
{"OnPlayerReputation", Callback<unsigned short>()},
|
|
{"OnPlayerEquipment", Callback<unsigned short>()},
|
|
{"OnPlayerInventory", Callback<unsigned short>()},
|
|
{"OnPlayerJournal", Callback<unsigned short>()},
|
|
{"OnPlayerFaction", Callback<unsigned short>()},
|
|
{"OnPlayerShapeshift", Callback<unsigned short>()},
|
|
{"OnPlayerSpellbook", Callback<unsigned short>()},
|
|
{"OnPlayerQuickKeys", Callback<unsigned short>()},
|
|
{"OnPlayerTopic", Callback<unsigned short>()},
|
|
{"OnPlayerDisposition", Callback<unsigned short>()},
|
|
{"OnPlayerBook", Callback<unsigned short>()},
|
|
{"OnPlayerItemUse", Callback<unsigned short>()},
|
|
{"OnPlayerMiscellaneous", Callback<unsigned short>()},
|
|
{"OnPlayerInput", Callback<unsigned short>()},
|
|
{"OnPlayerRest", Callback<unsigned short>()},
|
|
{"OnRecordDynamic", Callback<unsigned short>()},
|
|
{"OnCellLoad", Callback<unsigned short, const char*>()},
|
|
{"OnCellUnload", Callback<unsigned short, const char*>()},
|
|
{"OnCellDeletion", Callback<const char*>()},
|
|
{"OnConsoleCommand", Callback<unsigned short, const char*>()},
|
|
{"OnContainer", Callback<unsigned short, const char*>()},
|
|
{"OnDoorState", Callback<unsigned short, const char*>()},
|
|
{"OnObjectActivate", Callback<unsigned short, const char*>()},
|
|
{"OnObjectHit", Callback<unsigned short, const char*>()},
|
|
{"OnObjectPlace", Callback<unsigned short, const char*>()},
|
|
{"OnObjectState", Callback<unsigned short, const char*>()},
|
|
{"OnObjectSpawn", Callback<unsigned short, const char*>()},
|
|
{"OnObjectDelete", Callback<unsigned short, const char*>()},
|
|
{"OnObjectLock", Callback<unsigned short, const char*>()},
|
|
{"OnObjectScale", Callback<unsigned short, const char*>()},
|
|
{"OnObjectTrap", Callback<unsigned short, const char*>()},
|
|
{"OnVideoPlay", Callback<unsigned short, const char*>()},
|
|
{"OnActorList", Callback<unsigned short, const char*>()},
|
|
{"OnActorEquipment", Callback<unsigned short, const char*>()},
|
|
{"OnActorAI", Callback<unsigned short, const char*>()},
|
|
{"OnActorDeath", Callback<unsigned short, const char*>()},
|
|
{"OnActorCellChange", Callback<unsigned short, const char*>()},
|
|
{"OnActorTest", Callback<unsigned short, const char*>()},
|
|
{"OnPlayerSendMessage", Callback<unsigned short, const char*>()},
|
|
{"OnPlayerEndCharGen", Callback<unsigned short>()},
|
|
{"OnGUIAction", Callback<unsigned short, int, const char*>()},
|
|
{"OnWorldKillCount", Callback<unsigned short>()},
|
|
{"OnWorldMap", Callback<unsigned short>()},
|
|
{"OnWorldWeather", Callback<unsigned short>()},
|
|
{"OnClientScriptGlobal", Callback<unsigned short>()},
|
|
{"OnMpNumIncrement", Callback<int>()},
|
|
{"OnRequestDataFileList", Callback<>()}
|
|
};
|
|
};
|
|
|
|
#endif //SCRIPTFUNCTIONS_HPP
|