/** * @brief Sets a system's known state. * * @usage s:setKnown( false ) -- Makes system unknown. * @luaparam s System to set known. * @luaparam b Whether or not to set as known (defaults to false). * @luaparam r Whether or not to iterate over the system's assets and jump points (defaults to false). * @luafunc setKnown( s, b ) */ static int systemL_setknown( lua_State *L ) { int b, r, i; StarSystem *sys; r = 0; sys = luaL_validsystem(L, 1); b = lua_toboolean(L, 2); if (lua_gettop(L) > 2) r = lua_toboolean(L, 3); if (b) sys_setFlag( sys, SYSTEM_KNOWN ); else sys_rmFlag( sys, SYSTEM_KNOWN ); if (r) { if (b) { for (i=0; i < sys->nplanets; i++) planet_setKnown( sys->planets[i] ); for (i=0; i < sys->njumps; i++) jp_setFlag( &sys->jumps[i], JP_KNOWN ); } else { for (i=0; i < sys->nplanets; i++) planet_rmFlag( sys->planets[i], PLANET_KNOWN ); for (i=0; i < sys->njumps; i++) jp_rmFlag( &sys->jumps[i], JP_KNOWN ); } } return 0; }
/** * @brief Applies a hunk and adds it to the diff. * * @param diff Diff to which the hunk belongs. * @param hunk Hunk to apply. * @return 0 on success. */ static int diff_patchHunk( UniHunk_t *hunk ) { Planet *p; switch (hunk->type) { /* Adding an asset. */ case HUNK_TYPE_ASSET_ADD: planet_updateLand( planet_get(hunk->u.name) ); return system_addPlanet( system_get(hunk->target.u.name), hunk->u.name ); /* Removing an asset. */ case HUNK_TYPE_ASSET_REMOVE: return system_rmPlanet( system_get(hunk->target.u.name), hunk->u.name ); /* Making an asset a black market. */ case HUNK_TYPE_ASSET_BLACKMARKET: planet_setBlackMarket( planet_get(hunk->u.name) ); return 0; /* Making an asset a legal market. */ case HUNK_TYPE_ASSET_LEGALMARKET: planet_rmFlag( planet_get(hunk->u.name), PLANET_BLACKMARKET ); return 0; /* Adding a Jump. */ case HUNK_TYPE_JUMP_ADD: return system_addJumpDiff( system_get(hunk->target.u.name), hunk->node ); /* Removing a jump. */ case HUNK_TYPE_JUMP_REMOVE: return system_rmJump( system_get(hunk->target.u.name), hunk->u.name ); /* Adding a tech. */ case HUNK_TYPE_TECH_ADD: return tech_addItem( hunk->target.u.name, hunk->u.name ); /* Removing a tech. */ case HUNK_TYPE_TECH_REMOVE: return tech_rmItem( hunk->target.u.name, hunk->u.name ); /* Changing asset faction. */ case HUNK_TYPE_ASSET_FACTION: p = planet_get( hunk->target.u.name ); if (p==NULL) return -1; hunk->o.name = faction_name( p->faction ); return planet_setFaction( p, faction_get(hunk->u.name) ); case HUNK_TYPE_ASSET_FACTION_REMOVE: return planet_setFaction( planet_get(hunk->target.u.name), faction_get(hunk->o.name) ); default: WARN("Unknown hunk type '%d'.", hunk->type); break; } return -1; }
/** * @brief Sets a system's known state. * * @usage s:setKnown( false ) -- Makes system unknown. * @luatparam System s System to set known. * @luatparam[opt=false] boolean b Whether or not to set as known. * @luatparam[opt=false] boolean r Whether or not to iterate over the system's assets and jump points. * @luafunc setKnown( s, b, r ) */ static int systemL_setknown( lua_State *L ) { int b, r, i; StarSystem *sys; NLUA_CHECKRW(L); r = 0; sys = luaL_validsystem(L, 1); b = lua_toboolean(L, 2); if (lua_gettop(L) > 2) r = lua_toboolean(L, 3); if (b) sys_setFlag( sys, SYSTEM_KNOWN ); else sys_rmFlag( sys, SYSTEM_KNOWN ); if (r) { if (b) { for (i=0; i < sys->nplanets; i++) planet_setKnown( sys->planets[i] ); for (i=0; i < sys->njumps; i++) jp_setFlag( &sys->jumps[i], JP_KNOWN ); } else { for (i=0; i < sys->nplanets; i++) planet_rmFlag( sys->planets[i], PLANET_KNOWN ); for (i=0; i < sys->njumps; i++) jp_rmFlag( &sys->jumps[i], JP_KNOWN ); } } /* Update outfits image array. */ outfits_updateEquipmentOutfits(); return 0; }
/** * @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; }