class MapBlock;
class RemotePlayer;
class PlayerDatabase;
+class AuthDatabase;
class PlayerSAO;
class ServerEnvironment;
class ActiveBlockModifier;
*/
void saveMeta();
void loadMeta();
- // to be called instead of loadMeta if
- // env_meta.txt doesn't exist (e.g. new world)
- void loadDefaultMeta();
u32 addParticleSpawner(float exptime);
u32 addParticleSpawner(float exptime, u16 attached_id);
*/
u16 addActiveObject(ServerActiveObject *object);
+ /**
+ * Verify if id is a free active object id
+ * @param id
+ * @return true if slot is free
+ */
+ bool isFreeServerActiveObjectId(u16 id) const;
+
+ /**
+ * Retrieve the first free ActiveObject ID
+ * @return free activeobject ID or 0 if none was found
+ */
+ u16 getFreeServerActiveObjectId();
+
/*
Add an active object as a static object to the corresponding
MapBlock.
static bool migratePlayersDatabase(const GameParams &game_params,
const Settings &cmd_args);
+
+ AuthDatabase *getAuthDatabase() { return m_auth_database; }
+ static bool migrateAuthDatabase(const GameParams &game_params,
+ const Settings &cmd_args);
private:
+ /**
+ * called if env_meta.txt doesn't exist (e.g. new world)
+ */
+ void loadDefaultMeta();
+
static PlayerDatabase *openPlayerDatabase(const std::string &name,
const std::string &savedir, const Settings &conf);
+ static AuthDatabase *openAuthDatabase(const std::string &name,
+ const std::string &savedir, const Settings &conf);
/*
Internal ActiveObject interface
-------------------------------------------
ActiveBlockList m_active_blocks;
IntervalLimiter m_active_blocks_management_interval;
IntervalLimiter m_active_block_modifier_interval;
- IntervalLimiter m_active_object_interval;
IntervalLimiter m_active_blocks_nodemetadata_interval;
- float m_active_block_interval_overload_skip = 1.0f;
- float m_active_object_interval_overload_skip = 1.0f;
- float m_avg_ao_time = 0.0f;
+ int m_active_block_interval_overload_skip = 0;
// Time from the beginning of the game in seconds.
// Incremented in step().
u32 m_game_time = 0;
std::vector<RemotePlayer*> m_players;
PlayerDatabase *m_player_database = nullptr;
+ AuthDatabase *m_auth_database = nullptr;
// Particles
IntervalLimiter m_particle_management_interval;