[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: lua scripting implementation
- From: Sean Conner <sean@...>
- Date: Fri, 6 Jun 2014 19:51:56 -0400
It was thus said that the Great Littlefield, Tyler once stated:
> Hello all:
> I've stepped away from this project for a while in terms of the
> scripting portion because I was getting a bit lost in implementation.
> What I wish to do is expose some APIs to the scripting engine so that
> content can be added through my game engine. This is essentially a mud,
> so the APIs exposed are for adding and modifying rooms, etc.
> I was hoping that perhaps someone could take a look at my code and just
> provide some pointers, or let me know if there's a better way to do what
> exists already. Most importantly, I'm curious if there are any good
> sandbox implementations using lua5.2, as setenv in 5.1 seems to be
> Most of my lua specific code can be found here, in scr_*.cpp:
> I'm sorry for the direct link--I did not want to provide a couple
> thousand lines of code as an example. Any information would be greatly
I'm looking at scr_entity.cpp. I see that you create a metatable for
entities, but you don't seem to be using it to full effect. If you go to
the trouble, then your code can be simplified quite a bit:
#define GAME_ENTITY "entity"
int SCR_NewEntity(lua_State *L)
entity = lua_newuserdata(L,1,sizeof(Entity));
/* initialize entity */
int SCR_GetName(lua_State *L)
entity = luaL_checkudata(L,1,GAME_ENTITY);
name = entity->GetName();
int SCR_SetName(lua_state *L)
Entity *entity = luaL_checkudata(L,1,GAME_ENTITY);
const char *name = luaL_checkstring(L,2);
int SCR_MoveTo(lua_State *L)
Entity *src = luaL_checkudata(L,1,GAME_ENTITY);
Entity *target = luaL_checkudata(L,2,GAME_ENTITY);
The luaL_check*() functions do the appropriate error checking, so you
don't have to.
Another thing to look out for---duplicating functions that already exist
in Lua. I noticed SCR_TypeToStr(), which does the same thing as
As for sandboxing, there are two ways---one way is to only include in the
global scope only those functions you want. Sections 2.2, 3.2 and 3.3 of
the Lua 5.2 manual cover this.