Exemple #1
0
static void JPLua_LoadPlugin( const char *pluginName, const char *fileName ) {
	if ( !JPLua.plugins ) {
		// first plugin
		JPLua.plugins = (jplua_plugin_t *)malloc( sizeof(jplua_plugin_t) );
		JPLua.currentPlugin = JPLua.plugins;
	}
	else {
		JPLua.currentPlugin->next = (jplua_plugin_t *)malloc( sizeof(jplua_plugin_t) );
		JPLua.currentPlugin = JPLua.currentPlugin->next;
	}

	memset( JPLua.currentPlugin, 0, sizeof(jplua_plugin_t) );
	Q_strncpyz( JPLua.currentPlugin->longname, "<null>", sizeof(JPLua.currentPlugin->longname) );
	Q_strncpyz( JPLua.currentPlugin->name, pluginName, sizeof(JPLua.currentPlugin->name) );
	JPLua_LoadFile( JPLua.state, va( "%s%s/%s", pluginDir, pluginName, fileName ) );

	if ( JPLua.currentPlugin->requiredJPLuaVersion > JPLUA_VERSION ) {
		jplua_plugin_t *nextPlugin = JPLua.currentPlugin->next;
		trap->Print( "%s requires JPLua version %i\n", pluginName, JPLua.currentPlugin->requiredJPLuaVersion );
		luaL_unref( JPLua.state, LUA_REGISTRYINDEX, JPLua.currentPlugin->handle );
		free( JPLua.currentPlugin );
		if ( JPLua.plugins == JPLua.currentPlugin )
			JPLua.plugins = nextPlugin;
		JPLua.currentPlugin = nextPlugin;
	}
	else {
		trap->Print( "%-15s%-32s%-8s0x%" PRIxPTR "\n", "Loaded plugin:", JPLua.currentPlugin->longname,
			JPLua.currentPlugin->version, (void*)JPLua.currentPlugin->UID );
	}
}
Exemple #2
0
static void JPLua_LoadPlugin( const char *pluginName, const char *fileName )
{
	if ( !JPLua.plugins )
	{//First plugin
		JPLua.plugins = (jplua_plugin_t *)malloc( sizeof( jplua_plugin_t ) );
		JPLua.currentPlugin = JPLua.plugins;
	}
	else
	{
		JPLua.currentPlugin->next = (jplua_plugin_t *)malloc( sizeof( jplua_plugin_t ) );
		JPLua.currentPlugin = JPLua.currentPlugin->next;
	}

	memset( JPLua.currentPlugin, 0, sizeof( jplua_plugin_t ) );
	Q_strncpyz( JPLua.currentPlugin->name, "<null>", sizeof( JPLua.currentPlugin->name ) );
	JPLua_LoadFile( JPLua.state, va( JPLUA_DIRECTORY"%s/%s", pluginName, fileName ) );

	if ( JPLua.currentPlugin->requiredJPLuaVersion > JPLua.version )
	{
		jplua_plugin_t *nextPlugin = JPLua.currentPlugin->next;
		Com_Printf( "%s requires JPLua version %i\n", pluginName, JPLua.currentPlugin->requiredJPLuaVersion );
		luaL_unref( JPLua.state, LUA_REGISTRYINDEX, JPLua.currentPlugin->handle );
		free( JPLua.currentPlugin );
		if ( JPLua.plugins == JPLua.currentPlugin )
			JPLua.plugins = nextPlugin;
		JPLua.currentPlugin = nextPlugin;
	}
	else
		Com_Printf( "%-15s%-32s%-8s%X\n", "Loaded plugin:", JPLua.currentPlugin->name, JPLua.currentPlugin->version, JPLua.currentPlugin->UID );
}
Exemple #3
0
static void JPLua_PostInit( lua_State *L )
{
	char folderList[16384] = {0}, *folderName = NULL;
	int i=0, numFolders=0, folderLen=0;

	trap->Print( "^5**************** ^3JA++ Lua (SV) is initialising ^5****************\n" );
	
	JPLua_LoadFile( L, JPLUA_DIRECTORY"init"JPLUA_EXTENSION );
	lua_getfield( L, LUA_GLOBALSINDEX, "JPLua" );
	lua_getfield( L, -1, "version" );
	JPLua.version = lua_tointeger( L, -1 );
	lua_pop( L, 1 );

	trap->Print( "%-15s%-32s%-8s%s\n", "               ", "Name", "Version", "Unique ID" );

	numFolders = trap->FS_GetFileList( JPLUA_DIRECTORY, "/", folderList, sizeof( folderList ) );
	folderName = folderList;
	for ( i=0; i<numFolders; i++ )
	{
		Q_strstrip( folderName, "/\\", NULL );
		folderLen = strlen( folderName );
		//folderName[folderLen] = '\0'; // not necessary?
		if ( Q_stricmp( folderName, "." ) && Q_stricmp( folderName, ".." ) )
		{
			char fileList[16384] = {0}, *fileName = NULL;
			int j=0, numFiles=0, fileLen=0;
			
			numFiles = trap->FS_GetFileList( va( JPLUA_DIRECTORY"%s", folderName ), JPLUA_EXTENSION, fileList, sizeof( fileList ) );
			fileName = fileList;

			for ( j=0; j<numFiles; j++ )
			{
				Q_strstrip( fileName, "/\\", NULL );
				fileLen = strlen( fileName );
			//	fileName[fileLen] = '\0'; // not necessary?
				if ( !Q_stricmp( fileName, "plugin"JPLUA_EXTENSION ) )
				{
					JPLua_LoadPlugin( folderName, fileName );
					break;
				}
				fileName += fileLen+1;
			}
		}
		folderName += folderLen+1;
	}

	trap->Print( "^5**************** ^2JA++ Lua (SV) is initialised ^5****************\n" );

	return;
}
Exemple #4
0
static void JPLua_PostInit( lua_State *L ) {
#if defined(PROJECT_GAME)
	trap->Print( S_COLOR_CYAN "**************** " S_COLOR_YELLOW "JA++ Lua (SV) is initialising " S_COLOR_CYAN "****************\n" );
#elif defined(PROJECT_CGAME)
	trap->Print( S_COLOR_CYAN "**************** " S_COLOR_YELLOW "JA++ Lua (CL) is initialising " S_COLOR_CYAN "****************\n" );
#endif

	JPLua_Register_System( L );
	JPLua_LoadFile( L, va( "%sinit" JPLUA_EXTENSION, baseDir ) );
	JPLua.initialised = qtrue;

	trap->Print( "%-15s%-32s%-8s%s\n", "               ", "Name", "Version", "Unique ID" );
	//TODO: handle duplicates, i.e. one in pk3, one out of pk3
	JPLua_LoadPluginDir( qtrue );
	JPLua_LoadPluginDir( qfalse );

#if defined(PROJECT_GAME)
	trap->Print( S_COLOR_CYAN "**************** " S_COLOR_GREEN "JA++ Lua (SV) is initialised " S_COLOR_GREEN "****************\n" );
#elif defined(PROJECT_CGAME)
	trap->Print( S_COLOR_CYAN "**************** " S_COLOR_GREEN "JA++ Lua (CL) is initialised " S_COLOR_GREEN "****************\n" );
#endif
}
Exemple #5
0
static int JPLua_Export_Require( lua_State *L ) {
	const char *path = va( "%s%s", JPLua.initialised ? pluginDir : baseDir, lua_tostring( L, 1 ) );
	JPLua_LoadFile( L, path );
	return 0;
}
Exemple #6
0
static int JPLua_Export_Require( lua_State *L )
{
	const char *path = va( "lua/sv/%s", lua_tostring( L, 1 ) );
	JPLua_LoadFile( L, path );
	return 0;
}