[Add] Added faction metatable to Lua API.
This commit is contained in:
		
							parent
							
								
									751bbbefe8
								
							
						
					
					
						commit
						571b801a49
					
				
							
								
								
									
										358
									
								
								src/llua_faction.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										358
									
								
								src/llua_faction.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,358 @@ | |||||||
|  | /**
 | ||||||
|  |  * @file llua_faction.c | ||||||
|  |  * | ||||||
|  |  * @breif Handle the Lua faction bindings. | ||||||
|  |  * | ||||||
|  |  * These bindings control the faction. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include "lauxlib.h" | ||||||
|  | 
 | ||||||
|  | #include "log.h" | ||||||
|  | #include "lephisto.h" | ||||||
|  | #include "llua.h" | ||||||
|  | #include "lluadef.h" | ||||||
|  | #include "faction.h" | ||||||
|  | #include "llua_faction.h" | ||||||
|  | 
 | ||||||
|  | static int factionL_createmetatable(lua_State* L, int readonly); | ||||||
|  | 
 | ||||||
|  | /* Faction metatable methods. */ | ||||||
|  | static int factionL_eq(lua_State* L); | ||||||
|  | static int factionL_name(lua_State* L); | ||||||
|  | static int factionL_longname(lua_State* L); | ||||||
|  | static int factionL_areenemies(lua_State* L); | ||||||
|  | static int factionL_areallies(lua_State* L); | ||||||
|  | static int factionL_modplayer(lua_State* L); | ||||||
|  | static int factionL_modplayerraw(lua_State* L); | ||||||
|  | static int factionL_playerstanding(lua_State* L); | ||||||
|  | static const luaL_reg faction_methods[] = { | ||||||
|  |   { "__eq",             factionL_eq             }, | ||||||
|  |   { "name",             factionL_name           }, | ||||||
|  |   { "longname",         factionL_longname       }, | ||||||
|  |   { "areEnemeies",      factionL_areenemies     }, | ||||||
|  |   { "areAllies",        factionL_areallies      }, | ||||||
|  |   { "modPlayer",        factionL_modplayer      }, | ||||||
|  |   { "modPlayerRaw",     factionL_modplayerraw   }, | ||||||
|  |   { "playerStanding",   factionL_playerstanding }, | ||||||
|  |   { 0, 0 } | ||||||
|  | }; /**< Faction metatable methods. */ | ||||||
|  | 
 | ||||||
|  | static const luaL_reg faction_methods_cond[] = { | ||||||
|  |   { "__eq",             factionL_eq             }, | ||||||
|  |   { "name",             factionL_name           }, | ||||||
|  |   { "longname",         factionL_longname       }, | ||||||
|  |   { "areEnemeies",      factionL_areenemies     }, | ||||||
|  |   { "areAllies",        factionL_areallies      }, | ||||||
|  |   { "playerStanding",   factionL_playerstanding }, | ||||||
|  |   { 0, 0 } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /* Global faction functions. */ | ||||||
|  | static int factionL_get(lua_State* L); | ||||||
|  | static const luaL_reg factionL_methods[] = { | ||||||
|  |   { "get", faction_get }, | ||||||
|  |   { 0, 0 } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn int lua_loadFaction(lua_State* L, int readonly) | ||||||
|  |  * | ||||||
|  |  * @brief Load the faction library. | ||||||
|  |  *    @param L State to load faction library into. | ||||||
|  |  *    @return 0 on success. | ||||||
|  |  */ | ||||||
|  | int lua_loadFaction(lua_State* L, int readonly) { | ||||||
|  |   /* Register the faction functions. */ | ||||||
|  |   luaL_register(L, "faction", factionL_methods); | ||||||
|  | 
 | ||||||
|  |   /* Register the metatables. */ | ||||||
|  |   factionL_createmetatable(L, readonly); | ||||||
|  | 
 | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_createmetatable(lua_State* L, int readonly) | ||||||
|  |  * | ||||||
|  |  * @brief Register the faction metatable. | ||||||
|  |  *    @param L Lua state to register metatable into. | ||||||
|  |  *    @param readonly Whether table should be readonly. | ||||||
|  |  *    @return 0 on success. | ||||||
|  |  */ | ||||||
|  | static int factionL_createmetatable(lua_State* L, int readonly) { | ||||||
|  |   /* Create metatable. */ | ||||||
|  |   luaL_newmetatable(L, FACTION_METATABLE); | ||||||
|  | 
 | ||||||
|  |   /* Create the access table. */ | ||||||
|  |   lua_pushvalue(L, -1); | ||||||
|  |   lua_setfield(L, -2, "__index"); | ||||||
|  | 
 | ||||||
|  |   /* Register the values. */ | ||||||
|  |   luaL_register(L, NULL, (readonly) ? faction_methods_cond : faction_methods); | ||||||
|  | 
 | ||||||
|  |   return 0; /* No error. */ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @defgroup FACTION Faction Lua bindings. | ||||||
|  |  * | ||||||
|  |  * @brief Lua bindings to deal with factions. | ||||||
|  |  * | ||||||
|  |  * Use with: | ||||||
|  |  * @code | ||||||
|  |  * faction.func(params) | ||||||
|  |  * @endcode | ||||||
|  |  * | ||||||
|  |  * @{ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_get(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief faction get(string name) | ||||||
|  |  * | ||||||
|  |  * Get the faction based on its name. | ||||||
|  |  *    @param name Name of the faction to get. | ||||||
|  |  *    @return The faction matching name. | ||||||
|  |  */ | ||||||
|  | static int factionL_get(lua_State* L) { | ||||||
|  |   LuaFaction f; | ||||||
|  |   char* name; | ||||||
|  | 
 | ||||||
|  |   if(lua_isstring(L, 1)) name = (char*) lua_tostring(L, 1); | ||||||
|  |   else LLUA_INVALID_PARAMETER(); | ||||||
|  | 
 | ||||||
|  |   f.f = faction_get(name); | ||||||
|  |   lua_pushfaction(L, f); | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @} | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  *  @defgroup META_FACTION Faction Metatable. | ||||||
|  |  * | ||||||
|  |  *  @brief The faction metatable is a way to represent a faction in Lua. | ||||||
|  |  * | ||||||
|  |  *  It allows all sorts of operators making it much more natural to use. | ||||||
|  |  * | ||||||
|  |  *  To call members of the metatable always use: | ||||||
|  |  * | ||||||
|  |  *  @code | ||||||
|  |  *  faction:function(param) | ||||||
|  |  *  @endcode | ||||||
|  |  * | ||||||
|  |  *  @{ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn LuaFaction* lua_tofaction(lua_State* L, int ind) | ||||||
|  |  * | ||||||
|  |  * @brief Get faction at index. | ||||||
|  |  *    @param L Lua state to get faction from. | ||||||
|  |  *    @param ind Index position to find the faction. | ||||||
|  |  *    @return Faction found at the index in the state. | ||||||
|  |  */ | ||||||
|  | LuaFaction* lua_tofaction(lua_State* L, int ind) { | ||||||
|  |   if(lua_isuserdata(L, ind)) { | ||||||
|  |     return (LuaFaction*) lua_touserdata(L, ind); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   luaL_typerror(L, ind, FACTION_METATABLE); | ||||||
|  |   return NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn LuaFaction* lua_pushfaction(lua_State* L, LuaFaction faction) | ||||||
|  |  * | ||||||
|  |  * @brief Pushes a faction on the stack. | ||||||
|  |  *    @param L lua state to push faction into. | ||||||
|  |  *    @param faction Faction to push. | ||||||
|  |  *    @return Newly pushed faction. | ||||||
|  |  */ | ||||||
|  | LuaFaction* lua_pushfaction(lua_State* L, LuaFaction faction) { | ||||||
|  |   LuaFaction* f; | ||||||
|  |   f = (LuaFaction*) lua_newuserdata(L, sizeof(LuaFaction)); | ||||||
|  |   *f = faction; | ||||||
|  |   luaL_getmetatable(L, FACTION_METATABLE); | ||||||
|  |   lua_setmetatable(L, -2); | ||||||
|  |   return f; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn int lua_isfaction(lua_State* L, int ind) | ||||||
|  |  * | ||||||
|  |  * @brief Check to see if ind is a faction. | ||||||
|  |  *    @param L Lua state to check. | ||||||
|  |  *    @param ind Index position to check. | ||||||
|  |  *    @return 1 if ind is a faction. | ||||||
|  |  */ | ||||||
|  | int lua_isfaction(lua_State* L, int ind) { | ||||||
|  |   int ret; | ||||||
|  | 
 | ||||||
|  |   if(lua_getmetatable(L, ind)==0) | ||||||
|  |     return 0; | ||||||
|  |   lua_getfield(L, LUA_REGISTRYINDEX, FACTION_METATABLE); | ||||||
|  | 
 | ||||||
|  |   ret = 0; | ||||||
|  |   if(lua_rawequal(L, -1, -2)) /* Does it have the correct mt? */ | ||||||
|  |     ret = 1; | ||||||
|  | 
 | ||||||
|  |   lua_pop(L, 2); /* Remove both metatables. */ | ||||||
|  |   return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_eq(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief bool __eq(faction comp) | ||||||
|  |  * | ||||||
|  |  * __eq (equality) metamethod for factions. | ||||||
|  |  * | ||||||
|  |  * You can use the '=' operator within Lua to compare factions with this. | ||||||
|  |  *    @param comp faction to compare against. | ||||||
|  |  *    @return true if both factions are the same. | ||||||
|  |  */ | ||||||
|  | static int factionL_eq(lua_State* L) { | ||||||
|  |   LuaFaction* a, *b; | ||||||
|  |   a = lua_tofaction(L, 1); | ||||||
|  |   b = lua_tofaction(L, 2); | ||||||
|  |   lua_pushboolean(L, a->f == b->f); | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_name(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief string name(nil) | ||||||
|  |  * | ||||||
|  |  * Get the faction's name. | ||||||
|  |  *    @return The name of the faction. | ||||||
|  |  */ | ||||||
|  | static int factionL_name(lua_State* L) { | ||||||
|  |   LuaFaction* f; | ||||||
|  |   f = lua_tofaction(L, 1); | ||||||
|  |   lua_pushstring(L, faction_name(f->f)); | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_longname(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief string longname(nil) | ||||||
|  |  * | ||||||
|  |  * Get the factions long name. | ||||||
|  |  *    @return The long name of the faction. | ||||||
|  |  */ | ||||||
|  | static int factionL_longname(lua_State* L) { | ||||||
|  |   LuaFaction* f; | ||||||
|  |   f = lua_tofaction(L, 1); | ||||||
|  |   lua_pushstring(L, faction_longname(f->f)); | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_areenemeies(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief bool areenemies(faction f) | ||||||
|  |  * | ||||||
|  |  * Check to see if f is an enemy. | ||||||
|  |  *    @param f Faction to check if is an enemy. | ||||||
|  |  *    @return true if they are enemeies, false if they aren't. | ||||||
|  |  */ | ||||||
|  | static int factionL_areenemies(lua_State* L) { | ||||||
|  |   LuaFaction* f, *ff; | ||||||
|  |   f = lua_tofaction(L, 1); | ||||||
|  |   if(lua_isfaction(L, 2)) ff = lua_tofaction(L, 2); | ||||||
|  |   else LLUA_INVALID_PARAMETER(); | ||||||
|  | 
 | ||||||
|  |   lua_pushboolean(L, areEnemies(f->f, ff->f)); | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_areallies(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief bool areEnemies(faction f) | ||||||
|  |  * | ||||||
|  |  * Check to see if f is an enemy. | ||||||
|  |  *    @param f Faction to check if is an enemy. | ||||||
|  |  *    @return true if they are enemies, false if they aren't. | ||||||
|  |  */ | ||||||
|  | static int factionL_areallies(lua_State* L) { | ||||||
|  |   LuaFaction* f, *ff; | ||||||
|  |   f = lua_tofaction(L, 1); | ||||||
|  |   if(lua_isfaction(L, 2)) ff = lua_tofaction(L, 2); | ||||||
|  |   else LLUA_INVALID_PARAMETER(); | ||||||
|  | 
 | ||||||
|  |   lua_pushboolean(L, areAllies(f->f, ff->f)); | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_modplayer(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief modPlayer(number mod) | ||||||
|  |  * | ||||||
|  |  * Modifies the players standing with the faction. | ||||||
|  |  *    @param mod The modifier to modify faction by. | ||||||
|  |  */ | ||||||
|  | static int factionL_modplayer(lua_State* L) { | ||||||
|  |   LuaFaction* f; | ||||||
|  |   int n; | ||||||
|  |   f = lua_tofaction(L, 1); | ||||||
|  | 
 | ||||||
|  |   if(lua_isnumber(L, 2)) n = lua_tonumber(L, 2); | ||||||
|  |   else LLUA_INVALID_PARAMETER(); | ||||||
|  | 
 | ||||||
|  |   faction_modPlayer(f->f, n); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_modplayerraw(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief modPlayerRaw(number mod) | ||||||
|  |  * | ||||||
|  |  * Modifies the players standing with the faction. | ||||||
|  |  * | ||||||
|  |  * Does not affect other faction standings. | ||||||
|  |  *    @param mod The modifier to modify faction by. | ||||||
|  |  */ | ||||||
|  | static int factionL_modplayerraw(lua_State* L) { | ||||||
|  |   LuaFaction* f; | ||||||
|  |   int n; | ||||||
|  |   f = lua_tofaction(L, 1); | ||||||
|  | 
 | ||||||
|  |   if(lua_isnumber(L, 2)) n = lua_tonumber(L, 2); | ||||||
|  |   else LLUA_INVALID_PARAMETER(); | ||||||
|  | 
 | ||||||
|  |   faction_modPlayerRaw(f->f, n); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @fn static int factionL_playerstanding(lua_State* L) | ||||||
|  |  * | ||||||
|  |  * @brief number, string playerStanding(nil) | ||||||
|  |  * | ||||||
|  |  * Get the players standing with the faction. | ||||||
|  |  *    @return The value of the standing and the human readable string. | ||||||
|  |  */ | ||||||
|  | static int factionL_playerstanding(lua_State* L) { | ||||||
|  |   LuaFaction* f; | ||||||
|  |   int n; | ||||||
|  |   f = lua_tofaction(L, 1); | ||||||
|  |   n = faction_getPlayer(f->f); | ||||||
|  |   lua_pushnumber(L, n); | ||||||
|  |   lua_pushstring(L, faction_getStanding(n)); | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * @} | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
							
								
								
									
										17
									
								
								src/llua_faction.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/llua_faction.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #define FACTION_METATABLE "Faction" | ||||||
|  | 
 | ||||||
|  | /* Lua wrappers. */ | ||||||
|  | typedef struct LuaFaction_s { | ||||||
|  |   int f; | ||||||
|  | } LuaFaction; | ||||||
|  | 
 | ||||||
|  | /* Load the space library. */ | ||||||
|  | int lua_loadFaction(lua_State* L, int readonly); | ||||||
|  | 
 | ||||||
|  | /* Faction operations. */ | ||||||
|  | LuaFaction* lua_tofaction(lua_State* L, int ind); | ||||||
|  | LuaFaction* lua_pushfaction(lua_State* L, LuaFaction faction); | ||||||
|  | int lua_isfaction(lua_State* L, int ind); | ||||||
|  | 
 | ||||||
| @ -8,8 +8,10 @@ | |||||||
| 
 | 
 | ||||||
| #include "lauxlib.h" | #include "lauxlib.h" | ||||||
| #include "lephisto.h" | #include "lephisto.h" | ||||||
| #include "llua_space.h" | #include "llua.h" | ||||||
| #include "lluadef.h" | #include "lluadef.h" | ||||||
|  | #include "llua_space.h" | ||||||
|  | #include "llua_faction.h" | ||||||
| #include "rng.h" | #include "rng.h" | ||||||
| #include "pilot.h" | #include "pilot.h" | ||||||
| #include "player.h" | #include "player.h" | ||||||
| @ -518,19 +520,25 @@ static int pilotL_setFaction(lua_State* L) { | |||||||
|   LLUA_MIN_ARGS(2); |   LLUA_MIN_ARGS(2); | ||||||
|   Pilot* p; |   Pilot* p; | ||||||
|   LuaPilot* lp; |   LuaPilot* lp; | ||||||
|  |   LuaFaction* f; | ||||||
|   int fid; |   int fid; | ||||||
|   char* faction; |   char* faction; | ||||||
| 
 | 
 | ||||||
|   /* Parse parameters. */ |   /* Parse parameters. */ | ||||||
|   lp = lua_topilot(L, 1); |   lp = lua_topilot(L, 1); | ||||||
|   if(lua_isstring(L, 2)) |   if(lua_isstring(L, 2)) { | ||||||
|     faction = (char*)lua_tostring(L,2); |     faction = (char*)lua_tostring(L,2); | ||||||
|  |     fid = faction_get(faction); | ||||||
|  |   } | ||||||
|  |   else if(lua_isfaction(L, 2)) { | ||||||
|  |     f = lua_tofaction(L, 2); | ||||||
|  |     fid = f->f; | ||||||
|  |   } | ||||||
|   else LLUA_INVALID_PARAMETER(); |   else LLUA_INVALID_PARAMETER(); | ||||||
| 
 | 
 | ||||||
|   /* Get pilot/faction. */ |   /* Get pilot/faction. */ | ||||||
|   p = pilot_get(lp->pilot); |   p = pilot_get(lp->pilot); | ||||||
|   if(p == NULL) return 0; |   if(p == NULL) return 0; | ||||||
|   fid = faction_get(faction); |  | ||||||
| 
 | 
 | ||||||
|   /* Set the new faction. */ |   /* Set the new faction. */ | ||||||
|   p->faction = fid; |   p->faction = fid; | ||||||
|  | |||||||
| @ -4,7 +4,9 @@ | |||||||
| #include "lephisto.h" | #include "lephisto.h" | ||||||
| #include "rng.h" | #include "rng.h" | ||||||
| #include "land.h" | #include "land.h" | ||||||
|  | #include "llua.h" | ||||||
| #include "lluadef.h" | #include "lluadef.h" | ||||||
|  | #include "llua_faction.h" | ||||||
| #include "map.h" | #include "map.h" | ||||||
| #include "llua_space.h" | #include "llua_space.h" | ||||||
| 
 | 
 | ||||||
| @ -203,6 +205,7 @@ static int planetL_get(lua_State* L) { | |||||||
|   char*     rndplanet; |   char*     rndplanet; | ||||||
|   LuaPlanet planet; |   LuaPlanet planet; | ||||||
|   LuaSystem sys; |   LuaSystem sys; | ||||||
|  |   LuaFaction* f; | ||||||
| 
 | 
 | ||||||
|   rndplanet = NULL; |   rndplanet = NULL; | ||||||
|   nplanets = 0; |   nplanets = 0; | ||||||
| @ -220,9 +223,9 @@ static int planetL_get(lua_State* L) { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /* Get a planet by faction */ |   /* Get a planet by faction */ | ||||||
|   else if(lua_isnumber(L, 1)) { |   else if(lua_isfaction(L, 1)) { | ||||||
|     i = lua_tonumber(L, 1); |     f = lua_tofaction(L, 1); | ||||||
|     planets = space_getFactionPlanet(&nplanets, &i, 1); |     planets = space_getFactionPlanet(&nplanets, &f->f, 1); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /* Get a planet by name. */ |   /* Get a planet by name. */ | ||||||
| @ -237,9 +240,9 @@ static int planetL_get(lua_State* L) { | |||||||
|     nfactions = (int)lua_gettop(L); |     nfactions = (int)lua_gettop(L); | ||||||
|     factions = malloc(sizeof(int) * nfactions); |     factions = malloc(sizeof(int) * nfactions); | ||||||
|     i = 0; |     i = 0; | ||||||
|      |  | ||||||
|     while(lua_next(L, -2) != 0) { |     while(lua_next(L, -2) != 0) { | ||||||
|       factions[i++] = (int)lua_tonumber(L, -1); |       f = lua_tofaction(L, -1); | ||||||
|  |       factions[i++] = f->f; | ||||||
|       lua_pop(L,1); |       lua_pop(L,1); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -292,8 +295,10 @@ static int planetL_name(lua_State* L) { | |||||||
| /* Get the planets faction. */ | /* Get the planets faction. */ | ||||||
| static int planetL_faction(lua_State* L) { | static int planetL_faction(lua_State* L) { | ||||||
|   LuaPlanet* p; |   LuaPlanet* p; | ||||||
|  |   LuaFaction f; | ||||||
|   p = lua_toplanet(L, 1); |   p = lua_toplanet(L, 1); | ||||||
|   lua_pushstring(L, faction_name(p->p->faction)); |   f.f = p->p->faction; | ||||||
|  |   lua_pushfaction(L, f); | ||||||
|   return 1; |   return 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -9,6 +9,7 @@ | |||||||
| #include "llua.h" | #include "llua.h" | ||||||
| #include "llua_space.h" | #include "llua_space.h" | ||||||
| #include "llua_pilot.h" | #include "llua_pilot.h" | ||||||
|  | #include "llua_faction.h" | ||||||
| #include "lluadef.h" | #include "lluadef.h" | ||||||
| #include "hook.h" | #include "hook.h" | ||||||
| #include "mission.h" | #include "mission.h" | ||||||
| @ -187,6 +188,7 @@ int misn_loadLibs(lua_State* L) { | |||||||
|   lua_loadPilot(L, 0); |   lua_loadPilot(L, 0); | ||||||
|   lua_loadMusic(L, 0); |   lua_loadMusic(L, 0); | ||||||
|   lua_loadDiff(L, 0); |   lua_loadDiff(L, 0); | ||||||
|  |   lua_loadFaction(L, 0); | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -443,6 +445,7 @@ static int misn_setMarker(lua_State* L) { | |||||||
| static int misn_factions(lua_State* L) { | static int misn_factions(lua_State* L) { | ||||||
|   int i; |   int i; | ||||||
|   MissionData* dat; |   MissionData* dat; | ||||||
|  |   LuaFaction f; | ||||||
| 
 | 
 | ||||||
|   dat = cur_mission->data; |   dat = cur_mission->data; | ||||||
| 
 | 
 | ||||||
| @ -450,7 +453,8 @@ static int misn_factions(lua_State* L) { | |||||||
|   lua_newtable(L); |   lua_newtable(L); | ||||||
|   for(i = 0; i < dat->avail.nfactions; i++) { |   for(i = 0; i < dat->avail.nfactions; i++) { | ||||||
|     lua_pushnumber(L, i+1);   /* Index, starts with 1. */ |     lua_pushnumber(L, i+1);   /* Index, starts with 1. */ | ||||||
|     lua_pushnumber(L, dat->avail.factions[i]); /* Value. */ |     f.f = dat->avail.factions[i]; | ||||||
|  |     lua_pushfaction(L, f); /* Value. */ | ||||||
|     lua_rawset(L, -3);  /* Store the value in the table. */ |     lua_rawset(L, -3);  /* Store the value in the table. */ | ||||||
|   } |   } | ||||||
|   return 1; |   return 1; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Allanis
						Allanis