aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/plugins/plugin_abi.h
diff options
context:
space:
mode:
Diffstat (limited to 'NorthstarDLL/plugins/plugin_abi.h')
-rw-r--r--NorthstarDLL/plugins/plugin_abi.h192
1 files changed, 48 insertions, 144 deletions
diff --git a/NorthstarDLL/plugins/plugin_abi.h b/NorthstarDLL/plugins/plugin_abi.h
index c9fa9d25..4b176a32 100644
--- a/NorthstarDLL/plugins/plugin_abi.h
+++ b/NorthstarDLL/plugins/plugin_abi.h
@@ -1,164 +1,68 @@
#pragma once
#include <string>
-#include "squirrel/squirrelclasstypes.h"
-#define ABI_VERSION 2
-
-enum GameState
+#define ABI_VERSION 1
+/// <summary>
+/// This enum is used for referencing the different types of objects we can pass to a plugin
+/// Anything exposed to a plugin must not a be C++ type, as they could break when compiling with a different compiler.
+/// Any ABI incompatible change must increment the version number.
+/// Nothing must be removed from this enum, only appended. When it absolutely necessary to deprecate an object, it should return UNSUPPORTED
+/// when retrieved
+/// </summary>
+enum PluginObject
{
- LOADING = 0,
- MAINMENU = 1,
- LOBBY = 2,
- INGAME = 3
+ UNSUPPORTED = 0,
+ GAMESTATE = 1,
+ SERVERINFO = 2,
+ PLAYERINFO = 3,
+ DUMMY = 0xFFFF
};
-enum PluginLoadDLL
+enum GameStateInfoType
{
- ENGINE = 0,
- CLIENT,
- SERVER
+ ourScore = 0,
+ secondHighestScore = 1,
+ highestScore = 2,
+ connected = 3,
+ loading = 4,
+ map = 5,
+ mapDisplayName = 6,
+ playlist = 7,
+ playlistDisplayName = 8,
+ players = 9
};
-
-enum ObjectType
+struct GameState
{
- CONCOMMANDS = 0,
- CONVAR = 1,
+ int (*getGameStateChar)(char* out_buf, size_t out_buf_len, GameStateInfoType var);
+ int (*getGameStateInt)(int* out_ptr, GameStateInfoType var);
+ int (*getGameStateBool)(bool* out_ptr, GameStateInfoType var);
};
-struct SquirrelFunctions
+enum ServerInfoType
{
- RegisterSquirrelFuncType RegisterSquirrelFunc;
- sq_defconstType __sq_defconst;
-
- sq_compilebufferType __sq_compilebuffer;
- sq_callType __sq_call;
- sq_raiseerrorType __sq_raiseerror;
-
- sq_newarrayType __sq_newarray;
- sq_arrayappendType __sq_arrayappend;
-
- sq_newtableType __sq_newtable;
- sq_newslotType __sq_newslot;
-
- sq_pushroottableType __sq_pushroottable;
- sq_pushstringType __sq_pushstring;
- sq_pushintegerType __sq_pushinteger;
- sq_pushfloatType __sq_pushfloat;
- sq_pushboolType __sq_pushbool;
- sq_pushassetType __sq_pushasset;
- sq_pushvectorType __sq_pushvector;
- sq_pushobjectType __sq_pushobject;
- sq_getthisentityType __sq_getthisentity;
- sq_getobjectType __sq_getobject;
-
- sq_stackinfosType __sq_stackinfos;
-
- sq_getstringType __sq_getstring;
- sq_getintegerType __sq_getinteger;
- sq_getfloatType __sq_getfloat;
- sq_getboolType __sq_getbool;
- sq_getType __sq_get;
- sq_getassetType __sq_getasset;
- sq_getuserdataType __sq_getuserdata;
- sq_getvectorType __sq_getvector;
-
- sq_createuserdataType __sq_createuserdata;
- sq_setuserdatatypeidType __sq_setuserdatatypeid;
- sq_getfunctionType __sq_getfunction;
-
- sq_schedule_call_externalType __sq_schedule_call_external;
- sq_getentityfrominstanceType __sq_getentityfrominstance;
- sq_GetEntityConstantType __sq_GetEntityConstant_CBaseEntity;
-};
-
-struct MessageSource
-{
- const char* file;
- const char* func;
- int line;
+ id = 0,
+ name = 1,
+ description = 2,
+ password = 3,
+ maxPlayers = 4,
+ roundBased = 5,
+ scoreLimit = 6,
+ endTime = 7
};
-
-// This is a modified version of spdlog::details::log_msg
-// This is so that we can make it cross DLL boundaries
-struct LogMsg
+struct ServerInfo
{
- int level;
- uint64_t timestamp;
- const char* msg;
- MessageSource source;
- int pluginHandle;
+ int (*getServerInfoChar)(char* out_buf, size_t out_buf_len, ServerInfoType var);
+ int (*getServerInfoInt)(int* out_ptr, ServerInfoType var);
+ int (*getServerInfoBool)(bool* out_ptr, ServerInfoType var);
};
-typedef void (*loggerfunc_t)(LogMsg* msg);
-typedef void (*PLUGIN_RELAY_INVITE_TYPE)(const char* invite);
-typedef void* (*CreateObjectFunc)(ObjectType type);
-
-struct PluginNorthstarData
+enum PlayerInfoType
{
- const char* version;
- HMODULE northstarModule;
- int pluginHandle;
+ uid = 0
};
-
-struct PluginInitFuncs
+struct PlayerInfo
{
- loggerfunc_t logger;
- PLUGIN_RELAY_INVITE_TYPE relayInviteFunc;
- CreateObjectFunc createObject;
+ int (*getPlayerInfoChar)(char* out_buf, size_t out_buf_len, PlayerInfoType var);
+ int (*getPlayerInfoInt)(int* out_ptr, PlayerInfoType var);
+ int (*getPlayerInfoBool)(bool* out_ptr, PlayerInfoType var);
};
-
-struct PluginEngineData
-{
- void* ConCommandConstructor;
- void* conVarMalloc;
- void* conVarRegister;
- void* ConVar_Vtable;
- void* IConVar_Vtable;
-};
-
-struct PluginGameStatePresence
-{
- const char* id;
- const char* name;
- const char* description;
- const char* password;
-
- bool isServer;
- bool isLocal;
- GameState state;
-
- const char* map;
- const char* mapDisplayname;
- const char* playlist;
- const char* playlistDisplayname;
-
- int currentPlayers;
- int maxPlayers;
-
- int ownScore;
- int otherHighestScore; // NOTE: The highest score OR the second highest score if we have the highest
- int maxScore;
-
- int timestampEnd;
-};
-
-/// <summary> Async communication within the plugin system
-/// Due to the asynchronous nature of plugins, combined with the limitations of multi-compiler support
-/// and the custom memory allocator used by r2, is it difficult to safely get data across DLL boundaries
-/// from Northstar to plugin unless Northstar can own that memory.
-/// This means that plugins should manage their own memory and can only receive data from northstar using one of the functions below.
-/// These should be exports of the plugin DLL. If they are not exported, they will not be called.
-/// Note that it is not required to have these exports if you do not use them.
-/// </summary>
-
-// Northstar -> Plugin
-typedef void (*PLUGIN_INIT_TYPE)(PluginInitFuncs* funcs, PluginNorthstarData* data);
-typedef void (*PLUGIN_INIT_SQVM_TYPE)(SquirrelFunctions* funcs);
-typedef void (*PLUGIN_INFORM_SQVM_CREATED_TYPE)(ScriptContext context, CSquirrelVM* sqvm);
-typedef void (*PLUGIN_INFORM_SQVM_DESTROYED_TYPE)(ScriptContext context);
-
-// Async Communication types
-
-// Northstar -> Plugin
-typedef void (*PLUGIN_PUSH_PRESENCE_TYPE)(PluginGameStatePresence* data);
-typedef void (*PLUGIN_INFORM_DLL_LOAD_TYPE)(PluginLoadDLL dll, void* data);