/** * @brief Checks to see if the player has an event active. * * @usage if player.evtActive( "Shipwreck" ) then -- The shipwreck event is active * * @luaparam name Name of the mission to check. * @luareturn true if the mission is active, false if it isn't. * @luafunc evtActive( name ) */ static int playerL_evtActive( lua_State *L ) { int evtid; const char *str; str = luaL_checkstring(L,1); evtid = event_dataID( str ); if (evtid < 0) { NLUA_ERROR(L, "Event '%s' not found in stack", str); return 0; } lua_pushboolean( L, event_alreadyRunning( evtid ) ); return 1; }
/** * @brief Removes an NPC. * * @usage evt.npcRm( npc_id ) * * @luaparam id ID of the NPC to remove. * @luafunc npcRm( id ) */ static int evt_npcRm( lua_State *L ) { unsigned int id; int ret; Event_t *cur_event; id = luaL_checklong(L, 1); cur_event = event_getFromLua(L); ret = npc_rm_event( id, cur_event->id ); if (ret != 0) NLUA_ERROR(L, "Invalid NPC ID!"); return 0; }
/** * @brief Checks to see if the player has a mission active. * * @usage if player.misnActive( "The Space Family" ) then -- Player is doing space family mission * * @luaparam name Name of the mission to check. * @luareturn true if the mission is active, false if it isn't. * @luafunc misnActive( name ) */ static int playerL_misnActive( lua_State *L ) { MissionData *misn; const char *str; str = luaL_checkstring(L,1); misn = mission_getFromName( str ); if (misn == NULL) { NLUA_ERROR(L, "Mission '%s' not found in stack", str); return 0; } lua_pushboolean( L, mission_alreadyRunning( misn ) ); return 1; }
/** * @brief Makes sure the outfit is valid or raises a Lua error. * * @param L State currently running. * @param ind Index of the outfit to validate. * @return The outfit (doesn't return if fails - raises Lua error ). */ Outfit* luaL_validoutfit( lua_State *L, int ind ) { LuaOutfit *lo; Outfit *o; /* Get the outfit. */ lo = luaL_checkoutfit(L,ind); o = lo->outfit; if (o==NULL) { NLUA_ERROR(L,"Outfit is invalid."); return NULL; } return o; }
/** * @brief Back-end for luaL_validjump. * * @param L Lua state to get jump from. * @param ind Index to check. * @param[out] offset How many Lua arguments were passed. * @param[out] sys System the jump exists in. * @return Jump found at the index in the state. * * @sa luaL_validjump */ static JumpPoint* luaL_validjumpSystem( lua_State *L, int ind, int *offset, StarSystem **outsys ) { LuaJump *lj; JumpPoint *jp; StarSystem *a, *b; /* Defaults. */ jp = NULL; a = NULL; b = NULL; if (lua_isjump(L, ind)) { lj = luaL_checkjump(L, ind); a = system_getIndex( lj->srcid ); b = system_getIndex( lj->destid ); if (offset != NULL) *offset = 1; } else if (lua_gettop(L) > 1) { if (lua_isstring(L, ind)) a = system_get( lua_tostring( L, ind )); else if (lua_issystem(L, ind)) a = system_getIndex( lua_tosystem(L, ind) ); if (lua_isstring(L, ind+1)) b = system_get( lua_tostring( L, ind+1 )); else if (lua_issystem(L, ind+1)) b = system_getIndex( lua_tosystem(L, ind+1) ); if (offset != NULL) *offset = 2; } else { luaL_typerror(L, ind, JUMP_METATABLE); return NULL; } if (b != NULL && a != NULL) jp = jump_getTarget( b, a ); if (jp == NULL) NLUA_ERROR(L, "Jump is invalid"); if (outsys != NULL) *outsys = a; return jp; }
/** * @brief Checks to see if player has done an event. * * @usage if player.evtDone( "Shipwreck" ) then -- Player finished event * * @luaparam name Name of the event to check. * @luareturn true if event was finished, false if it wasn't. * @luafunc evtDone( name ) */ static int playerL_evtDone( lua_State *L ) { const char *str; int id; /* Handle parameters. */ str = luaL_checkstring(L, 1); /* Get event ID. */ id = event_dataID( str ); if (id == -1) { NLUA_ERROR(L, "Event '%s' not found in stack", str); return 0; } return player_eventAlreadyDone( id ); }
/** * @brief Checks to see if player has done a mission. * * @usage if player.misnDone( "The Space Family" ) then -- Player finished mission * * @luaparam name Name of the mission to check. * @luareturn true if mission was finished, false if it wasn't. * @luafunc misnDone( name ) */ static int playerL_misnDone( lua_State *L ) { const char *str; int id; /* Handle parameters. */ str = luaL_checkstring(L, 1); /* Get mission ID. */ id = mission_getID( str ); if (id == -1) { NLUA_ERROR(L, "Mission '%s' not found in stack", str); return 0; } return player_missionAlreadyDone( id ); }
/** * @brief Tries to claim systems. * * Claiming systems is a way to avoid mission/event collisions preemptively. * * Note it does not actually claim the systems if it fails to claim. It also * does not work more then once. * * @usage if not evt.claim( { system.get("Gamma Polaris") } ) then evt.finish( false ) end * @usage if not evt.claim( system.get("Gamma Polaris") ) then evt.finish( false ) end * * @luaparam systems Table of systems to claim or a single system. * @luareturn true if was able to claim, false otherwise. * @luafunc claim( systems ) */ static int evt_claim( lua_State *L ) { SysClaim_t *claim; Event_t *cur_event; /* Get current event. */ cur_event = event_getFromLua(L); /* Check to see if already claimed. */ if (cur_event->claims != NULL) { NLUA_ERROR(L, "Event trying to claim but already has."); return 0; } /* Create the claim. */ claim = claim_create(); /* Handle parameters. */ if (lua_istable(L,1)) { /* Iterate over table. */ lua_pushnil(L); while (lua_next(L, 1) != 0) { if (lua_issystem(L,-1)) claim_add( claim, lua_tosystem( L, -1 ) ); lua_pop(L,1); } } else if (lua_issystem(L, 1)) claim_add( claim, lua_tosystem( L, 1 ) ); else NLUA_INVALID_PARAMETER(L); /* Test claim. */ if (claim_test( claim )) { claim_destroy( claim ); lua_pushboolean(L,0); return 1; } /* Set the claim. */ cur_event->claims = claim; claim_activate( claim ); lua_pushboolean(L,1); return 1; }
/** * @brief Sets the pilot as friendly to player. * * @usage p:setFriendly() * * @luaparam p Pilot to set as friendly. * @luafunc setFriendly( p ) */ static int pilotL_setFriendly( lua_State *L ) { LuaPilot *lp; Pilot *p; /* Get the pilot. */ lp = luaL_checkpilot(L,1); p = pilot_get(lp->pilot); if (p==NULL) { NLUA_ERROR(L,"Pilot is invalid."); return 0; } /* Remove hostile and mark as friendly. */ pilot_setFriendly(p); return 0; }
/** * @brief Gets faction (or faction name) at index, raising an error if type isn't a valid faction. * * @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. */ int luaL_validfaction( lua_State *L, int ind ) { int id; if (lua_isfaction(L,ind)) id = lua_tofaction(L,ind)->f; else if (lua_isstring(L,ind)) id = faction_get( lua_tostring(L, ind) ); else { luaL_typerror(L, ind, FACTION_METATABLE); return 0; } if (id == -1) NLUA_ERROR(L,"Faction '%s' not found in stack.", lua_tostring(L,ind) ); return id; }
/** * @brief Sets the pilot as hostile to player. * * @usage p:setHostile() * * @luaparam p Pilot to set as hostile. * @luafunc setHostile( p ) */ static int pilotL_setHostile( lua_State *L ) { LuaPilot *lp; Pilot *p; /* Get the pilot. */ lp = luaL_checkpilot(L,1); p = pilot_get(lp->pilot); if (p==NULL) { NLUA_ERROR(L,"Pilot is invalid."); return 0; } /* Set as hostile. */ pilot_setHostile(p); return 0; }
/** * @brief Makes sure the commodity is valid or raises a Lua error. * * @param L State currently running. * @param ind Index of the commodity to validate. * @return The commodity (doesn't return if fails - raises Lua error ). */ Commodity* luaL_validcommodity( lua_State *L, int ind ) { Commodity *o; if (lua_iscommodity(L, ind)) o = luaL_checkcommodity(L, ind); else if (lua_isstring(L, ind)) o = commodity_get( lua_tostring(L, ind) ); else { luaL_typerror(L, ind, COMMODITY_METATABLE); return NULL; } if (o == NULL) NLUA_ERROR(L, "Commodity is invalid."); return o; }
/** * @brief Makes sure the outfit is valid or raises a Lua error. * * @param L State currently running. * @param ind Index of the outfit to validate. * @return The outfit (doesn't return if fails - raises Lua error ). */ Outfit* luaL_validoutfit( lua_State *L, int ind ) { Outfit *o; if (lua_isoutfit(L, ind)) o = luaL_checkoutfit(L,ind); else if (lua_isstring(L, ind)) o = outfit_get( lua_tostring(L, ind) ); else { luaL_typerror(L, ind, OUTFIT_METATABLE); return NULL; } if (o == NULL) NLUA_ERROR(L, "Outfit is invalid."); return o; }
/** * @brief Gets a commodity. * * @usage s = commodity.get( "Food" ) -- Gets the food commodity * * @luaparam s Name of the commodity to get. * @luareturn The commodity matching name or nil if error. * @luafunc get( s ) */ static int commodityL_get( lua_State *L ) { const char *name; Commodity *commodity; /* Handle parameters. */ name = luaL_checkstring(L,1); /* Get commodity. */ commodity = commodity_get( name ); if (commodity == NULL) { NLUA_ERROR(L,"Commodity '%s' not found!", name); return 0; } /* Push. */ lua_pushcommodity(L, commodity); return 1; }
/** * @brief Gets a outfit. * * @usage s = outfit.get( "Heavy Laser" ) -- Gets the heavy laser * * @luaparam s Name of the outfit to get. * @luareturn The outfit matching name or nil if error. * @luafunc get( s ) */ static int outfitL_get( lua_State *L ) { const char *name; Outfit *lo; /* Handle parameters. */ name = luaL_checkstring(L,1); /* Get outfit. */ lo = outfit_get( name ); if (lo == NULL) { NLUA_ERROR(L,"Outfit '%s' not found!", name); return 0; } /* Push. */ lua_pushoutfit(L, lo); return 1; }
/** * @brief Gets the pilot's current name. * * @usage name = p:name() * * @luaparam p Pilot to get the name of. * @luareturn The current name of the pilot. * @luafunc name( p ) */ static int pilotL_name( lua_State *L ) { LuaPilot *p1; Pilot *p; /* Parse parameters. */ p1 = luaL_checkpilot(L,1); p = pilot_get( p1->pilot ); /* Pilot must exist. */ if (p == NULL) { NLUA_ERROR(L,"Pilot is invalid."); return 0; } /* Get name. */ lua_pushstring(L, p->name); return 1; }
/** * @brief Gets a jump. * * Possible values of params: <br/> * - string : Gets the jump by system name. <br/> * - system : Gets the jump by system. <br/> * * @usage j,r = jump.get( "Ogat", "Goddard" ) -- Returns the Ogat to Goddard and Goddard to Ogat jumps. * @luaparam param See description. * @luareturn Returns the jump and the inverse (where it exits). * @luafunc get( param ) */ static int jumpL_get( lua_State *L ) { LuaJump lj; StarSystem *a, *b; /* Defaults. */ a = NULL; b = NULL; if (lua_gettop(L) > 1) { if (lua_isstring(L, 1)) a = system_get( lua_tostring(L, 1)); else if (lua_issystem(L, 1)) a = system_getIndex( lua_tosystem(L, 1) ); if (lua_isstring(L, 2)) b = system_get( lua_tostring(L, 2)); else if (lua_issystem(L, 2)) b = system_getIndex( lua_tosystem(L, 2) ); if ((a == NULL) || (b == NULL)) { NLUA_ERROR(L, "No matching jump points found."); return 0; } if (jump_getTarget(b, a) != NULL) { lj.srcid = a->id; lj.destid = b->id; lua_pushjump(L, lj); /* The inverse. If it doesn't exist, there are bigger problems. */ lj.srcid = b->id; lj.destid = a->id; lua_pushjump(L, lj); return 2; } } else NLUA_INVALID_PARAMETER(L); return 0; }
/** * @brief Disables a pilot. * * @usage p:disable() * * @luaparam p Pilot to disable. * @luafunc disable( p ) */ static int pilotL_disable( lua_State *L ) { LuaPilot *lp; Pilot *p; /* Get the pilot. */ lp = luaL_checkpilot(L,1); p = pilot_get(lp->pilot); if (p==NULL) { NLUA_ERROR(L,"Pilot is invalid."); return 0; } /* Disable the pilot. */ p->shield = 0.; p->armour = PILOT_DISABLED_ARMOR * p->armour_max; pilot_setFlag( p, PILOT_DISABLED ); return 0; }
/** * @brief Gives the player a new ship. * * @note Should be given when landed, ideally on a planet with a shipyard. * * @usage player.addShip( "Pirate Kestrel", "Seiryuu" ) -- Gives the player a Pirate Kestrel named Seiryuu if player cancels the naming. * * @luaparam ship Name of the ship to add. * @luaparam name Name to give the ship if player refuses to name it. * @luafunc addShip( ship, name ) */ static int playerL_addShip( lua_State *L ) { const char *str, *name; Ship *s; /* Handle parameters. */ str = luaL_checkstring(L, 1); name = luaL_checkstring(L, 2); /* Get ship. */ s = ship_get(str); if (s==NULL) { NLUA_ERROR(L, "Ship '%s' not found.", str); return 0; } /* Add the ship. */ player_newShip( s, 0., 0, 0., 0., 0., name ); return 0; }
/** * @brief Gets the pilot's velocity. * * @usage vel = p:vel() * * @luaparam p Pilot to get the velocity of. * @luareturn The pilot's current velocity as a vec2. * @luafunc vel( p ) */ static int pilotL_velocity( lua_State *L ) { LuaPilot *p1; Pilot *p; LuaVector v; /* Parse parameters */ p1 = luaL_checkpilot(L,1); p = pilot_get( p1->pilot ); /* Pilot must exist. */ if (p == NULL) { NLUA_ERROR(L,"Pilot is invalid."); return 0; } /* Push velocity. */ vectcpy( &v.vec, &p->solid->vel ); lua_pushvector(L, v); return 1; }
/** * @brief Gets a planet directly. * * @param L Lua state to get planet from. * @param ind Index position to find the planet. * @return Planet found at the index in the state. */ Planet* luaL_validplanet( lua_State *L, int ind ) { LuaPlanet *lp; Planet *p; if (lua_isplanet(L, ind)) { lp = luaL_checkplanet(L, ind); p = planet_getIndex(*lp); } else if (lua_isstring(L, ind)) p = planet_get( lua_tostring(L, ind) ); else { luaL_typerror(L, ind, PLANET_METATABLE); return NULL; } if (p == NULL) NLUA_ERROR(L, _("Planet is invalid")); return p; }
/** * @brief Gets system (or system name) at index raising an error if type doesn't match. * * @param L Lua state to get system from. * @param ind Index position of system. * @return The System at ind. */ StarSystem* luaL_validsystem( lua_State *L, int ind ) { LuaSystem *ls; StarSystem *s; if (lua_issystem(L, ind)) { ls = luaL_checksystem(L, ind); s = system_getIndex( ls->id ); } else if (lua_isstring(L, ind)) s = system_get( lua_tostring(L, ind) ); else { luaL_typerror(L, ind, FACTION_METATABLE); return NULL; } if (s == NULL) NLUA_ERROR(L, "System is invalid"); return s; }
/** * @brief Sets the pilot's position. * * @usage p:warp( vec2.new( 300, 200 ) ) * * @luaparam p Pilot to set the position of. * @luaparam pos Position to set. * @luafunc warp( p, pos ) */ static int pilotL_warp( lua_State *L ) { LuaPilot *p1; Pilot *p; LuaVector *v; /* Parse parameters */ p1 = luaL_checkpilot(L,1); p = pilot_get( p1->pilot ); v = luaL_checkvector(L,2); /* Pilot must exist. */ if (p == NULL) { NLUA_ERROR(L,"Pilot is invalid."); return 0; } /* Warp pilot to new position. */ vectcpy( &p->solid->pos, &v->vec ); vectnull( &p->solid->vel ); /* Clear velocity otherwise it's a bit weird. */ return 0; }
/** * @brief Gets the number of outfits the player owns in their list (excludes equipped on ships). * * @usage q = player.numOutfit( "Laser Cannon" ) -- Number of 'Laser Cannons' the player owns (unequipped) * * @luaparam name Name of the outfit to give. * @luareturn The quantity the player owns. * @luafunc numOutfit( name ) */ static int playerL_numOutfit( lua_State *L ) { const char *str; Outfit *o; int q; /* Handle parameters. */ str = luaL_checkstring(L, 1); /* Get outfit. */ o = outfit_get( str ); if (o==NULL) { NLUA_ERROR(L, "Outfit '%s' not found.", str); return 0; } /* Count the outfit. */ q = player_outfitOwned( o ); lua_pushnumber( L, q ); return 1; }
/** * @brief Opens the info menu window. * * Possible window targets are: <br /> * - "main" : Main window.<br /> * - "ship" : Ship info window.<br /> * - "weapons" : Weapon configuration window.<br /> * - "cargo" : Cargo view window.<br /> * - "missions" : Mission view window.<br /> * - "standings" : Standings view window.<br /> * * @usage gui.menuInfo( "ship" ) -- Opens ship tab * * @luaparam window Optional window parameter indicating the tab to open at. * @luafunc menuInfo( window ) */ static int guiL_menuInfo( lua_State *L ) { const char *str; int window; if (menu_open) return 0; if (lua_gettop(L) > 0) str = luaL_checkstring(L,1); else { /* No parameter. */ menu_info( INFO_MAIN ); return 0; } /* Parse string. */ if (strcasecmp( str, "main" )==0) window = INFO_MAIN; else if (strcasecmp( str, "ship" )==0) window = INFO_SHIP; else if (strcasecmp( str, "weapons" )==0) window = INFO_WEAPONS; else if (strcasecmp( str, "cargo" )==0) window = INFO_CARGO; else if (strcasecmp( str, "missions" )==0) window = INFO_MISSIONS; else if (strcasecmp( str, "standings" )==0) window = INFO_STANDINGS; else { NLUA_ERROR(L,"Invalid window info name '%s'.", str); return 0; } /* Open window. */ menu_info( window ); return 0; }
/** * @brief Gets a system. * * Behaves differently depending on what you pass as param: * - nil : -OBSOLETE- Gets the current system. Use system.cur() instead. * - string : Gets the system by name. * - planet : Gets the system by planet. * * @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; /* Get current system with no parameters */ if (lua_gettop(L) == 0) { sys.id = system_index( cur_system ); } /* Passing a string (systemname) */ else 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 Adds a new marker. * * @usage my_marker = misn.markerAdd( system.get("Gamma Polaris"), "low" ) * * Valid marker types are:<br/> * - "plot": Important plot marker.<br/> * - "high": High importance mission marker (lower than plot).<br/> * - "low": Low importance mission marker (lower than high).<br/> * - "computer": Mission computer marker.<br/> * * @luaparam sys System to mark. * @luaparam type Colouring scheme to use. * @luareturn A marker ID to be used with markerMove and markerRm. * @luafunc markerAdd( sys, type ) */ static int misn_markerAdd( lua_State *L ) { int id; LuaSystem *sys; const char *stype; SysMarker type; Mission *cur_mission; /* Check parameters. */ sys = luaL_checksystem( L, 1 ); stype = luaL_checkstring( L, 2 ); /* Handle types. */ if (strcmp(stype, "computer")==0) type = SYSMARKER_COMPUTER; else if (strcmp(stype, "low")==0) type = SYSMARKER_LOW; else if (strcmp(stype, "high")==0) type = SYSMARKER_HIGH; else if (strcmp(stype, "plot")==0) type = SYSMARKER_PLOT; else { NLUA_ERROR(L, "Unknown marker type: %s", stype); return 0; } cur_mission = misn_getFromLua(L); /* Add the marker. */ id = mission_addMarker( cur_mission, -1, sys->id, type ); /* Update system markers. */ mission_sysMark(); /* Return the ID. */ lua_pushnumber( L, id ); return 1; }
/** * @brief Makes the pilot broadcast a message. * * @usage p:broadcast( "Mayday! Requesting assistance!" ) * @usage p:broadcast( "Help!", true ) -- Will ignore interference * * @luaparam p Pilot to broadcast the message. * @luaparam msg Message to broadcast. * @luaparam ignore_int Whether or not it should ignore interference. * @luafunc broadcast( p, msg, ignore_int ) */ static int pilotL_broadcast( lua_State *L ) { Pilot *p; LuaPilot *lp; const char *msg; int ignore_int; /* Parse parameters. */ lp = luaL_checkpilot(L,1); msg = luaL_checkstring(L,2); ignore_int = lua_toboolean(L,3); /* Check to see if pilot is valid. */ p = pilot_get(lp->pilot); if (p == NULL) { NLUA_ERROR(L,"Pilot is invalid."); return 0; } /* Broadcast message. */ pilot_broadcast( p, msg, ignore_int ); return 0; }
/** * @brief Changes the pilot's name. * * @usage p:rename( "Black Beard" ) * * @luaparam p Pilot to change name of. * @luaparam name Name to change to. * @luafunc rename( p, name ) */ static int pilotL_rename( lua_State *L ) { LuaPilot *p1; const char *name; Pilot *p; /* Parse parameters */ p1 = luaL_checkpilot(L,1); p = pilot_get( p1->pilot ); name = luaL_checkstring(L,2); /* Pilot must exist. */ if (p == NULL) { NLUA_ERROR(L,"Pilot is invalid."); return 0; } /* Change name. */ if (p->name != NULL) free(p->name); p->name = strdup(name); return 0; }
/** * @brief Teleports the player to a new system (only if not landed). * * Does not change the position nor velocity of the player.p, which will probably be wrong in the new system. * * @usage player.teleport( system.get("Arcanis") ) -- Teleports the player to arcanis. * @usage player.teleport( "Arcanis" ) -- Teleports the player to arcanis. * * @luaparam sys System or name of a system to teleport the player to. * @luafunc teleport( sys ) */ static int playerL_teleport( lua_State *L ) { LuaSystem *sys; const char *name; /* 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!"); /* Get a system. */ if (lua_issystem(L,1)) { sys = lua_tosystem(L,1); name = system_getIndex(sys->id)->name; } else if (lua_isstring(L,1)) name = lua_tostring(L,1); 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 ); /* Reset targets when teleporting */ player_targetPlanetSet( -1 ); player_targetHyperspaceSet( -1 ); gui_setNav(); return 0; }