/** * @brief Registers all the mission libraries. * * @param L Lua state. * @return 0 on success. */ int misn_loadLibs( lua_State *L ) { nlua_loadStandard(L,0); nlua_loadMisn(L); nlua_loadTk(L); nlua_loadHook(L); nlua_loadMusic(L,0); nlua_loadTex(L,0); nlua_loadBackground(L,0); nlua_loadCamera(L,0); if (player_isTut()) nlua_loadTut(L); return 0; }
/** * @brief Creates an event. * * @param data Data to base event off of. */ static int event_create( int dataid ) { lua_State *L; uint32_t bufsize; char *buf; Event_t *ev; EventData_t *data; /* Create the event. */ event_nactive++; if (event_nactive > event_mactive) { event_mactive += EVENT_CHUNK; event_active = realloc( event_active, sizeof(Event_t) * event_mactive ); } ev = &event_active[ event_nactive-1 ]; memset( ev, 0, sizeof(Event_t) ); ev->id = ++event_genid; /* Create unique ID. */ /* Add the data. */ ev->data = dataid; data = &event_data[dataid]; /* Open the new state. */ ev->L = nlua_newState(); L = ev->L; nlua_loadStandard(L,0); nlua_loadEvt(L); nlua_loadHook(L); nlua_loadTk(L); /* Load file. */ buf = ndata_read( data->lua, &bufsize ); if (buf == NULL) { WARN("Event '%s' Lua script not found.", data->lua ); return -1; } if (luaL_dobuffer(L, buf, bufsize, data->lua) != 0) { WARN("Error loading event file: %s\n" "%s\n" "Most likely Lua file has improper syntax, please check", data->lua, lua_tostring(L,-1)); return -1; } free(buf); /* Run Lua. */ event_runLua( ev, "create" ); return 0; }
/** * @brief Creates an event. * * @param data Data to base event off of. * @param id ID to use (0 to generate). * @return 0 on success. */ static int event_create( int dataid, unsigned int *id ) { size_t bufsize; char *buf; Event_t *ev; EventData_t *data; /* Create the event. */ event_nactive++; if (event_nactive > event_mactive) { event_mactive += EVENT_CHUNK; event_active = realloc( event_active, sizeof(Event_t) * event_mactive ); } ev = &event_active[ event_nactive-1 ]; memset( ev, 0, sizeof(Event_t) ); if ((id != NULL) && (*id != 0)) ev->id = *id; else ev->id = event_genID(); /* Add the data. */ ev->data = dataid; data = &event_data[dataid]; /* Open the new state. */ ev->env = nlua_newEnv(1); nlua_loadStandard(ev->env); nlua_loadEvt(ev->env); nlua_loadHook(ev->env); nlua_loadCamera(ev->env); nlua_loadTex(ev->env); nlua_loadBackground(ev->env); nlua_loadMusic(ev->env); nlua_loadTk(ev->env); if (player_isTut()) nlua_loadTut(ev->env); /* Load file. */ buf = ndata_read( data->lua, &bufsize ); if (buf == NULL) { WARN(_("Event '%s' Lua script not found."), data->lua ); return -1; } if (nlua_dobufenv(ev->env, buf, bufsize, data->lua) != 0) { WARN(_("Error loading event file: %s\n" "%s\n" "Most likely Lua file has improper syntax, please check"), data->lua, lua_tostring(naevL,-1)); free(buf); return -1; } free(buf); /* Run Lua. */ if ((id==NULL) || (*id==0)) event_runLua( ev, "create" ); if (id != NULL) *id = ev->id; return 0; }