예제 #1
0
qboolean G_LuaInit()
{
	int             i, num_vm = 0;
	char            buff[128]; 

	int             numdirs;
	int             numFiles;
	char            filename[128];
	char            dirlist[1024];
	char           *dirptr;
	int             dirlen;

	G_Printf("------- G_LuaInit -------\n");

	numFiles = 0;
	trap_Cvar_VariableStringBuffer("mapname", buff, sizeof(buff));
	sprintf(filename, "scripts/lua/%s/", buff);
	numdirs = trap_FS_GetFileList(filename, ".lua", dirlist, 1024);
	dirptr = dirlist;
	for(i = 0; i < numdirs; i++, dirptr += dirlen + 1)
	{
		dirlen = strlen(dirptr);
		strcpy(filename, "scripts/lua/");
		strcat(filename, buff);
		strcat(filename, "/");
		strcat(filename, dirptr);
		numFiles++;

		if(LoadLuaFile(filename, num_vm))
		{
			num_vm++;
			G_Printf("  %s Loaded\n", filename);
		}
		else
		{
			G_Printf("  %s Failed\n", filename);
		}

		if(num_vm >= NUM_VMS)
		{
			LUA_LOG("Lua: too many lua files specified, only the first %d have been loaded\n", NUM_VMS);
			G_Printf(S_COLOR_YELLOW "Lua: too many lua files specified, only the first %d have been loaded\n", NUM_VMS);
			break;
		}
	}

	Com_Printf("%i map files parsed\n", numFiles);

	G_Printf("------- G_LuaInit Finish -------\n");

	return qtrue;
}
예제 #2
0
/** G_LuaInit()
* Initialises the Lua API interface 
*/
qboolean G_LuaInit()
{
	//load from cvar
	int             i, len, num_vm = 0;
	char            buff[MAX_CVAR_VALUE_STRING], *crt;

	//load from files
	int             numdirs;
	int             numFiles;
	char            filename[128];
	char            dirlist[1024];
	char           *dirptr;
	int             dirlen;

	G_Printf("------- G_LuaInit -------\n");

	if(lua_modules.string[0])
	{
		//Load lua modules from the cvar
		Q_strncpyz(buff, lua_modules.string, sizeof(buff));
		len = strlen(buff);
		crt = buff;

		for(i = 0; i < LUA_NUM_VM; i++)
			lVM[i] = NULL;

		for(i = 0; i <= len; i++)
		{
			if(buff[i] == ' ' || buff[i] == '\0' || buff[i] == ',' || buff[i] == ';')
			{
				buff[i] = '\0';
				if(LoadLuaFile(crt, num_vm, VMT_GAMESCRIPT))
				{
					num_vm++;
					G_Printf("  %s Loaded\n", crt);
				}
				else
				{
					G_Printf("  %s Failed\n", crt);
				}

				// prepare for next iteration
				if(i + 1 < len)
					crt = buff + i + 1;
				else
					crt = NULL;
				if(num_vm >= LUA_NUM_VM)
				{
					LOG("Lua API: too many lua files specified, only the first %d have been loaded\n", LUA_NUM_VM);
					break;
				}
			}
		}
	}

	//Load lua modules in global folder
	numFiles = 0;
	numdirs = trap_FS_GetFileList("scripts/lua/global/", ".lua", dirlist, 1024);
	dirptr = dirlist;
	for(i = 0; i < numdirs; i++, dirptr += dirlen + 1)
	{
		dirlen = strlen(dirptr);
		strcpy(filename, "scripts/lua/global/");
		strcat(filename, dirptr);
		numFiles++;

		// load the file
		//G_LoadLuaScript(NULL, filename);
		if(LoadLuaFile(filename, num_vm, VMT_GAMESCRIPT))
		{
			num_vm++;
			G_Printf("  %s Loaded\n", filename);
		}
		else
		{
			G_Printf("  %s Failed\n", filename);
		}

		if(num_vm >= LUA_NUM_VM)
		{
			LOG("Lua API: too many lua files specified, only the first %d have been loaded\n", LUA_NUM_VM);
			break;
		}
	}

	Com_Printf("%i global files parsed\n", numFiles);

	//*
	numFiles = 0;
	trap_Cvar_VariableStringBuffer("mapname", buff, sizeof(buff));
	sprintf(filename, "scripts/lua/%s/", buff);
	numdirs = trap_FS_GetFileList(filename, ".lua", dirlist, 1024);
	dirptr = dirlist;
	for(i = 0; i < numdirs; i++, dirptr += dirlen + 1)
	{
		dirlen = strlen(dirptr);
		strcpy(filename, "scripts/lua/");
		strcat(filename, buff);
		strcat(filename, "/");
		strcat(filename, dirptr);
		numFiles++;

		// load the file
		//G_LoadLuaScript(NULL, filename);
		if(LoadLuaFile(filename, num_vm, VMT_MAPSCRIPT))
		{
			num_vm++;
			G_Printf("  %s Loaded\n", filename);
		}
		else
		{
			G_Printf("  %s Failed\n", filename);
		}

		if(num_vm >= LUA_NUM_VM)
		{
			LOG("Lua API: too many lua files specified, only the first %d have been loaded\n", LUA_NUM_VM);
			break;
		}
	}

	Com_Printf("%i map files parsed\n", numFiles);
	//*/

	G_Printf("------- G_LuaInit Finish -------\n");

	return qtrue;
}