/** * @brief Gets the position of the planet in the system. * * @usage v = p:pos() * @luatparam Planet p Planet to get the position of. * @luatreturn Vec2 The position of the planet in the system. * @luafunc pos( p ) */ static int planetL_position( lua_State *L ) { Planet *p; p = luaL_validplanet(L,1); lua_pushvector(L, p->pos); return 1; }
/** * @brief Gets the planet's class. * * Usually classes are characters for planets and numbers * for stations. * * @usage c = p:class() * @luatparam Planet p Planet to get the class of. * @luatreturn string The class of the planet in a one char identifier. * @luafunc class( p ) */ static int planetL_class(lua_State *L ) { Planet *p; p = luaL_validplanet(L,1); lua_pushstring(L,p->class); return 1; }
/** * @brief Gets the planet's radius. * * @usage radius = p:radius() * @luatparam Planet p Planet to get the radius of. * @luatreturn number The planet's graphics radius. * @luafunc name( p ) */ static int planetL_radius( lua_State *L ) { Planet *p; p = luaL_validplanet(L,1); lua_pushnumber(L,p->radius); return 1; }
/** * @brief Gets the texture of the planet in exterior. * * @uasge gfx = p:gfxExterior() * @luatparam Planet p Planet Planet to get texture of. * @luatreturn Tex The exterior texture of the planet. * @luafunc gfxExterior( p ) */ static int planetL_gfxExterior( lua_State *L ) { Planet *p; p = luaL_validplanet(L,1); lua_pushtex( L, gl_newImage( p->gfx_exterior, 0 ) ); return 1; }
/** * @brief Gets a system. * * Behaves differently depending on what you pass as param: <br/> * - string : Gets the system by name. <br/> * - planet : Gets the system by planet. <br/> * * @usage sys = system.get( p ) -- Gets system where planet 'p' is located. * @usage sys = system.get( "Gamma Polaris" ) -- Gets the system by name. * * @luaparam param Read description for details. * @luareturn System metatable matching param. * @luafunc get( param ) */ static int systemL_get( lua_State *L ) { LuaSystem sys; StarSystem *ss; Planet *pnt; /* Invalid by default. */ sys.id = -1; /* Passing a string (systemname) */ if (lua_isstring(L,1)) { ss = system_get( lua_tostring(L,1) ); if (ss != NULL) sys.id = system_index( ss ); } /* Passing a planet */ else if (lua_isplanet(L,1)) { pnt = luaL_validplanet(L,1); ss = system_get( planet_getSystem( pnt->name ) ); if (ss != NULL) sys.id = system_index( ss ); } else NLUA_INVALID_PARAMETER(L); /* Error checking. */ if (sys.id < 0) { NLUA_ERROR(L, "No matching systems found."); return 0; } /* return the system */ lua_pushsystem(L,sys); return 1; }
/** * @brief Gets the planet's name. * * @usage name = p:name() * @luaparam p Planet to get the name of. * @luareturn The name of the planet. * @luafunc name( p ) */ static int planetL_name( lua_State *L ) { Planet *p; p = luaL_validplanet(L,1); lua_pushstring(L,p->name); return 1; }
/** * @brief Gets the texture of the planet in exterior. * * @uasge gfx = p:gfxExterior() * @luaparam p Planet to get texture of. * @luareturn The exterior texture of the planet. * @luafunc gfxExterior( p ) */ static int planetL_gfxExterior( lua_State *L ) { Planet *p; LuaTex lt; p = luaL_validplanet(L,1); lt.tex = gl_newImage( p->gfx_exterior, 0 ); lua_pushtex( L, lt ); return 1; }
/** * @brief Gets the planet's faction. * * @usage f = p:faction() * @luatparam Planet p Planet to get the faction of. * @luatreturn Faction The planet's faction. * @luafunc faction( p ) */ static int planetL_faction( lua_State *L ) { Planet *p; p = luaL_validplanet(L,1); if (p->faction < 0) return 0; lua_pushfaction(L, p->faction); return 1; }
/** * @brief Gets whether or not the player can land on the planet (or bribe it). * * @usage can_land, can_bribe = p:canLand() * @luatparam Planet p Planet to get land and bribe status of. * @luatreturn boolean The land status of the planet. * @luatreturn boolean The bribability status of the planet. * @luafunc canLand( p ) */ static int planetL_canland( lua_State *L ) { Planet *p; p = luaL_validplanet(L,1); planet_updateLand( p ); lua_pushboolean( L, p->can_land ); lua_pushboolean( L, p->bribe_price > 0 ); return 2; }
/** * @brief Gets the position of the planet in the system. * * @usage v = p:pos() * @luaparam p Planet to get the position of. * @luareturn The position of the planet in the system as a vec2. * @luafunc pos( p ) */ static int planetL_position( lua_State *L ) { Planet *p; LuaVector v; p = luaL_validplanet(L,1); vectcpy(&v.vec, &p->pos); lua_pushvector(L, v); return 1; }
/** * @brief Gets the planet's class. * * Usually classes are characters for planets (see space.h) and numbers * for stations. * * @usage c = p:class() * @luaparam p Planet to get the class of. * @luareturn The class of the planet in a one char identifier. * @luafunc class( p ) */ static int planetL_class(lua_State *L ) { char buf[2]; Planet *p; p = luaL_validplanet(L,1); buf[0] = planet_getClass(p); buf[1] = '\0'; lua_pushstring(L,buf); return 1; }
/** * @brief Gets the planet's faction. * * @usage f = p:faction() * @luaparam p Planet to get the faction of. * @luareturn The planet's faction. * @luafunc faction( p ) */ static int planetL_faction( lua_State *L ) { Planet *p; LuaFaction f; p = luaL_validplanet(L,1); if (p->faction < 0) return 0; f.f = p->faction; lua_pushfaction(L, f); return 1; }
/** * @brief Gets a planet's colour based on its friendliness or hostility to the player. * * @usage col = p:colour() * * @luatparam Pilot p Planet to get the colour of. * @luatreturn Colour The planet's colour. * @luafunc colour( p ) */ static int planetL_colour( lua_State *L ) { Planet *p; const glColour *col; p = luaL_validplanet(L,1); col = planet_getColour( p ); lua_pushcolour( L, *col ); return 1; }
/** * @brief Gets the texture of the planet in space. * * @uasge gfx = p:gfxSpace() * @luaparam p Planet to get texture of. * @luareturn The space texture of the planet. * @luafunc gfxSpace( p ) */ static int planetL_gfxSpace( lua_State *L ) { Planet *p; LuaTex lt; p = luaL_validplanet(L,1); if (p->gfx_space == NULL) /* Not loaded. */ lt.tex = gl_newImage( p->gfx_spaceName, OPENGL_TEX_MIPMAPS ); else lt.tex = gl_dupTexture( p->gfx_space ); lua_pushtex( L, lt ); return 1; }
/** * @brief Gets a planet's colour based on its friendliness or hostility to the player. * * @usage col = p:colour() * * @luaparam p Planet to get the colour of. * @luareturn The planet's colour. * @luafunc colour( p ) */ static int planetL_colour( lua_State *L ) { Planet *p; glColour *col; LuaColour lc; p = luaL_validplanet(L,1); col = planet_getColour( p ); memcpy( &lc.col, col, sizeof(glColour) ); lua_pushcolour( L, lc ); return 1; }
/** * @brief Gets the system corresponding to a planet. * @luatparam Planet p Planet to get system of. * @luatreturn System|nil The system to which the planet belongs or nil if it has none. * @luafunc system( p ) */ static int planetL_system( lua_State *L ) { LuaSystem sys; Planet *p; const char *sysname; /* Arguments. */ p = luaL_validplanet(L,1); sysname = planet_getSystem( p->name ); if (sysname == NULL) return 0; sys = system_index( system_get( sysname ) ); lua_pushsystem( L, sys ); return 1; }
/** * @brief Lets player land on a planet no matter what. The override lasts until the player jumps or lands. * * @usage p:landOverride( true ) -- Planet can land on p now. * @luatparam Planet p Planet to forcibly allow the player to land on. * @luatparam[opt=false] boolean b Whether or not the player should be allowed to land, true enables, false disables override. * @luafunc landOverride( p, b ) */ static int planetL_landOverride( lua_State *L ) { Planet *p; int old; NLUA_CHECKRW(L); p = luaL_validplanet(L,1); old = p->land_override; p->land_override = !!lua_toboolean(L,2); /* If the value has changed, re-run the landing Lua next frame. */ if (p->land_override != old) space_factionChange(); return 0; }
/** * @brief Gets the commodities sold at a planet. * * @luatparam Pilot p Planet to get commodities sold at. * @luatreturn {Commodity,...} An ordered table containing all the commodities sold (empty if none sold). * @luafunc commoditiesSold( p ) */ static int planetL_commoditiesSold( lua_State *L ) { Planet *p; int i; /* Get result and tech. */ p = luaL_validplanet(L,1); /* Push results in a table. */ lua_newtable(L); for (i=0; i<p->ncommodities; i++) { lua_pushnumber(L,i+1); /* index, starts with 1 */ lua_pushcommodity(L,p->commodities[i]); /* value = LuaCommodity */ lua_rawset(L,-3); /* store the value in the table */ } return 1; }
/** * @brief Checks for planet services. * * Possible services are:<br /> * - "land"<br /> * - "inhabited"<br /> * - "refuel"<br /> * - "bar"<br /> * - "missions"<br /> * - "commodity"<br /> * - "outfits"<br /> * - "shipyard"<br /> * * @usage if p:serivces()["refuel"] then -- PLanet has refuel service. * #usage if p:services()["shipyard"] then -- Planet has shipyard service. * @luaparam p Planet to get the services of. * @luareturn Table containing all the services. * @luafunc services( p ) */ static int planetL_services( lua_State *L ) { Planet *p; p = luaL_validplanet(L,1); /* Return result in table */ lua_newtable(L); /* allows syntax foo = space.faction("foo"); if foo["bar"] then ... end */ if (planet_hasService(p, PLANET_SERVICE_LAND)) { lua_pushboolean(L,1); /* value */ lua_setfield(L,-2,"land"); /* key */ } if (planet_hasService(p, PLANET_SERVICE_INHABITED)) { lua_pushboolean(L,1); /* value */ lua_setfield(L,-2,"inhabited"); /* key */ } if (planet_hasService(p, PLANET_SERVICE_REFUEL)) { lua_pushboolean(L,1); /* value */ lua_setfield(L,-2,"refuel"); /* key */ } if (planet_hasService(p, PLANET_SERVICE_BAR)) { lua_pushboolean(L,1); /* value */ lua_setfield(L,-2,"bar"); /* key */ } if (planet_hasService(p, PLANET_SERVICE_MISSIONS)) { lua_pushboolean(L,1); /* value */ lua_setfield(L,-2,"missions"); /* key */ } if (planet_hasService(p, PLANET_SERVICE_COMMODITY)) { lua_pushboolean(L,1); /* value */ lua_setfield(L,-2,"commodity"); /* key */ } if (planet_hasService(p, PLANET_SERVICE_OUTFITS)) { lua_pushboolean(L,1); /* value */ lua_setfield(L,-2,"outfits"); /* key */ } if (planet_hasService(p, PLANET_SERVICE_SHIPYARD)) { lua_pushboolean(L,1); /* value */ lua_setfield(L,-2,"shipyard"); /* key */ } return 1; }
/** * @brief Gets the ships sold at a planet. * * @luatparam Planet p Planet to get ships sold at. * @luatreturn {Ship,...} An ordered table containing all the ships sold (empty if none sold). * @luafunc shipsSold( p ) */ static int planetL_shipsSold( lua_State *L ) { Planet *p; int i, n; Ship **s; /* Get result and tech. */ p = luaL_validplanet(L,1); s = tech_getShip( p->tech, &n ); /* Push results in a table. */ lua_newtable(L); for (i=0; i<n; i++) { lua_pushnumber(L,i+1); /* index, starts with 1 */ lua_pushship(L,s[i]); /* value = LuaShip */ lua_rawset(L,-3); /* store the value in the table */ } return 1; }
/** * @brief Gets the outfits sold at a planet. * * @luatparam Planet p Planet to get outfits sold at. * @luatreturn {Outfit,...} An ordered table containing all the outfits sold (empty if none sold). * @luafunc outfitsSold( p ) */ static int planetL_outfitsSold( lua_State *L ) { Planet *p; int i, n; Outfit **o; /* Get result and tech. */ p = luaL_validplanet(L,1); o = tech_getOutfit( p->tech, &n ); /* Push results in a table. */ lua_newtable(L); for (i=0; i<n; i++) { lua_pushnumber(L,i+1); /* index, starts with 1 */ lua_pushoutfit(L,o[i]); /* value = LuaOutfit */ lua_rawset(L,-3); /* store the value in the table */ } return 1; }
/** * @brief Gets the commodities sold at a planet. * * @luaparam p Planet to get commodities sold at. * @luareturn An ordered table containing all the commodities sold (empty if none sold). * @luafunc commoditiesSold( p ) */ static int planetL_commoditiesSold( lua_State *L ) { Planet *p; int i, n; LuaCommodity lc; Commodity **c; /* Get result and tech. */ p = luaL_validplanet(L,1); c = tech_getCommodity( p->tech, &n ); /* Push results in a table. */ lua_newtable(L); for (i=0; i<n; i++) { lua_pushnumber(L,i+1); /* index, starts with 1 */ lc.commodity = c[i]; lua_pushcommodity(L,lc); /* value = LuaCommodity */ lua_rawset(L,-3); /* store the value in the table */ } return 1; }
/** * @brief Gets the base price of an commodity at a certain planet. * * @usage if o:priceAt( planet.get("Polaris Prime") ) > 100 then -- Checks price of an outfit at polaris prime * * @luaparam o Commodity to get information of. * @luaparam p Planet to get price at. * @luareturn The price of the commodity at the planet. * @luafunc priceAt( o, p ) */ static int commodityL_priceAt( lua_State *L ) { Commodity *c; Planet *p; StarSystem *sys; char *sysname; c = luaL_validcommodity(L,1); p = luaL_validplanet(L,2); sysname = planet_getSystem( p->name ); if (sysname == NULL) { NLUA_ERROR( L, "Planet '%s' does not belong to a system", p->name ); return 0; } sys = system_get( sysname ); if (sys == NULL) { NLUA_ERROR( L, "Planet '%s' can not find its system '%s'", p->name, sysname ); return 0; } lua_pushnumber( L, planet_commodityPrice( p, c ) ); return 1; }
/** * @brief Sets a planets's known state. * * @usage p:setKnown( false ) -- Makes planet unknown. * @luatparam Planet p Planet to set known. * @luatparam[opt=false] boolean b Whether or not to set as known. * @luafunc setKnown( p, b ) */ static int planetL_setKnown( lua_State *L ) { int b, changed; Planet *p; NLUA_CHECKRW(L); p = luaL_validplanet(L,1); b = lua_toboolean(L, 2); changed = (b != (int)planet_isKnown(p)); if (b) planet_setKnown( p ); else planet_rmFlag( p, PLANET_KNOWN ); /* Update outfits image array. */ if (changed) outfits_updateEquipmentOutfits(); return 0; }
/** * @brief Checks for planet services. * * Possible services are:<br /> * - "land"<br /> * - "inhabited"<br /> * - "refuel"<br /> * - "bar"<br /> * - "missions"<br /> * - "commodity"<br /> * - "outfits"<br /> * - "shipyard"<br /> * - "blackmarket"<br /> * * @usage if p:services()["refuel"] then -- Planet has refuel service. * @usage if p:services()["shipyard"] then -- Planet has shipyard service. * @luatparam Planet p Planet to get the services of. * @luatreturn table Table containing all the services. * @luafunc services( p ) */ static int planetL_services( lua_State *L ) { int i; size_t len; Planet *p; char *name, lower[256]; p = luaL_validplanet(L,1); /* Return result in table */ lua_newtable(L); /* allows syntax like foo = planet.get("foo"); if foo["bar"] then ... end */ for (i=1; i<PLANET_SERVICES_MAX; i<<=1) { if (planet_hasService(p, i)) { name = planet_getServiceName(i); len = strlen(name) + 1; nsnprintf( lower, MIN(len,sizeof(lower)), "%c%s", tolower(name[0]), &name[1] ); lua_pushstring(L, name); lua_setfield(L, -2, lower ); } } return 1; }
/** * @brief Teleports the player to a new planet or system (only if not landed). * * If the destination is a system, the coordinates of the player will not change. * If the destination is a planet, the player will be placed over that planet. * * @usage player.teleport( system.get("Arcanis") ) -- Teleports the player to Arcanis. * @usage player.teleport( "Arcanis" ) -- Teleports the player to Arcanis. * @usage player.teleport( "Dvaer Prime" ) -- Teleports the player to Dvaer, and relocates him to Dvaer Prime. * * @luaparam dest System or name of a system or planet or name of a planet to teleport the player to. * @luafunc teleport( dest ) */ static int playerL_teleport( lua_State *L ) { Planet *pnt; StarSystem *sys; const char *name, *pntname; /* Must not be landed. */ if (landed) NLUA_ERROR(L,"Can not teleport the player while landed!"); if (comm_isOpen()) NLUA_ERROR(L,"Can not teleport the player while the comm is open!"); if (player_isBoarded()) NLUA_ERROR(L,"Can not teleport the player while he is boarded!"); pnt = NULL; /* Get a system. */ if (lua_issystem(L,1)) { sys = luaL_validsystem(L,1); name = system_getIndex(sys->id)->name; } /* Get a planet. */ else if (lua_isplanet(L,1)) { pnt = luaL_validplanet(L,1); name = planet_getSystem( pnt->name ); if (name == NULL) { NLUA_ERROR( L, "Planet '%s' does not belong to a system..", pnt->name ); return 0; } } /* Get destination from string. */ else if (lua_isstring(L,1)) { name = lua_tostring(L,1); if (!system_exists( name )) { if (!planet_exists( name )) { NLUA_ERROR( L, "'%s' is not a valid teleportation target.", name ); return 0; } /* No system found, assume destination string is the name of a planet. */ pntname = name; name = planet_getSystem( name ); pnt = planet_get( pntname ); if (name == NULL) { NLUA_ERROR( L, "Planet '%s' does not belong to a system..", pntname ); return 0; } } } else NLUA_INVALID_PARAMETER(L); /* Check if system exists. */ if (!system_exists( name )) { NLUA_ERROR( L, "System '%s' does not exist.", name ); return 0; } /* Jump out hook is run first. */ hooks_run( "jumpout" ); /* Just in case remove hyperspace flags. */ pilot_rmFlag( player.p, PILOT_HYPERSPACE ); pilot_rmFlag( player.p, PILOT_HYP_BEGIN ); pilot_rmFlag( player.p, PILOT_HYP_BRAKE ); pilot_rmFlag( player.p, PILOT_HYP_PREP ); /* Free graphics. */ space_gfxUnload( cur_system ); /* Go to the new system. */ space_init( name ); /* Map gets deformed when jumping this way. */ map_clear(); /* Add the escorts. */ player_addEscorts(); /* Run hooks - order is important. */ hooks_run( "jumpin" ); hooks_run( "enter" ); events_trigger( EVENT_TRIGGER_ENTER ); missions_run( MIS_AVAIL_SPACE, -1, NULL, NULL ); /* Reset targets when teleporting */ player_targetPlanetSet( -1 ); player_targetHyperspaceSet( -1 ); gui_setNav(); /* Move to planet. */ if (pnt != NULL) vectcpy( &player.p->solid->pos, &pnt->pos ); return 0; }
/** * @brief Gets the land override status for a planet. * * @usage if p:getLandOverride() then -- Player can definitely land. * @luatparam Planet p Planet to check. * @luatreturn b Whether or not the player is always allowed to land. * @luafunc getLandOverride( p ) */ static int planetL_getLandOverride( lua_State *L ) { Planet *p = luaL_validplanet(L,1); lua_pushboolean(L, p->land_override); return 1; }
/** * @brief Lets player land on a planet no matter what. * * @usage p:landOverride( true ) -- Planet can land on p now. * @luaparam p Planet to forcibly allow the player to land on. * @luaparam b Whether or not the player should be allowed to land, true enables, false disables override. * @luafunc landOverride( p, b ) */ static int planetL_landOverride( lua_State *L ) { Planet *p = luaL_validplanet(L,1); p->land_override = !!lua_toboolean(L,2); return 0; }
/** * @brief Checks to see if a planet is a black market. * * @usage b = p:blackmarket() * * @luatparam Planet p Planet to check if it's a black market. * @luatreturn boolean true if the planet is a black market. * @luafunc blackmarket( p ) */ static int planetL_isBlackMarket( lua_State *L ) { Planet *p = luaL_validplanet(L,1); lua_pushboolean(L, planet_hasService(p, PLANET_SERVICE_BLACKMARKET)); return 1; }
/** * @brief Checks to see if a planet is known by the player. * * @usage b = p:known() * * @luatparam Planet p Planet to check if the player knows. * @luatreturn boolean true if the player knows the planet. * @luafunc known( p ) */ static int planetL_isKnown( lua_State *L ) { Planet *p = luaL_validplanet(L,1); lua_pushboolean(L, planet_isKnown(p)); return 1; }