]> git.lizzy.rs Git - minetest.git/blobdiff - src/serverenvironment.h
Translated using Weblate (Estonian)
[minetest.git] / src / serverenvironment.h
index b883e0dc54ce88cc3a40d5f1d9fd2f5b1e79444f..4b453d39a35bda885a7ca68e9fdd8335f9d6898d 100644 (file)
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "server/activeobjectmgr.h"
 #include "util/numeric.h"
 #include <set>
+#include <random>
 
 class IGameDef;
 class ServerMap;
@@ -221,7 +222,7 @@ class ServerEnvironment : public Environment
        void kickAllPlayers(AccessDeniedCode reason,
                const std::string &str_reason, bool reconnect);
        // Save players
-       void saveLoadedPlayers();
+       void saveLoadedPlayers(bool force = false);
        void savePlayer(RemotePlayer *player);
        PlayerSAO *loadPlayer(RemotePlayer *player, bool *new_player, session_t peer_id,
                bool is_singleplayer);
@@ -288,9 +289,9 @@ class ServerEnvironment : public Environment
 
        /*
                Get the next message emitted by some active object.
-               Returns a message with id=0 if no messages are available.
+               Returns false if no messages are available, true otherwise.
        */
-       ActiveObjectMessage getActiveObjectMessage();
+       bool getActiveObjectMessage(ActiveObjectMessage *dest);
 
        virtual void getSelectedActiveObjects(
                const core::line3d<f32> &shootline_on_map,
@@ -322,9 +323,10 @@ class ServerEnvironment : public Environment
        bool swapNode(v3s16 p, const MapNode &n);
 
        // Find all active objects inside a radius around a point
-       void getObjectsInsideRadius(std::vector<u16> &objects, const v3f &pos, float radius)
+       void getObjectsInsideRadius(std::vector<ServerActiveObject *> &objects, const v3f &pos, float radius,
+                       std::function<bool(ServerActiveObject *obj)> include_obj_cb)
        {
-               return m_ao_manager.getObjectsInsideRadius(pos, radius, objects);
+               return m_ao_manager.getObjectsInsideRadius(pos, radius, objects, include_obj_cb);
        }
 
        // Clear objects, loading and going through every MapBlock
@@ -333,16 +335,6 @@ class ServerEnvironment : public Environment
        // This makes stuff happen
        void step(f32 dtime);
 
-       /*!
-        * Returns false if the given line intersects with a
-        * non-air node, true otherwise.
-        * \param pos1 start of the line
-        * \param pos2 end of the line
-        * \param p output, position of the first non-air node
-        * the line intersects
-        */
-       bool line_of_sight(v3f pos1, v3f pos2, v3s16 *p = NULL);
-
        u32 getGameTime() const { return m_game_time; }
 
        void reportMaxLagEstimate(float f) { m_max_lag_estimate = f; }
@@ -357,6 +349,7 @@ class ServerEnvironment : public Environment
 
        RemotePlayer *getPlayer(const session_t peer_id);
        RemotePlayer *getPlayer(const char* name);
+       const std::vector<RemotePlayer *> getPlayers() const { return m_players; }
        u32 getPlayerCount() const { return m_players.size(); }
 
        static bool migratePlayersDatabase(const GameParams &game_params,
@@ -443,10 +436,12 @@ class ServerEnvironment : public Environment
        IntervalLimiter m_object_management_interval;
        // List of active blocks
        ActiveBlockList m_active_blocks;
+       IntervalLimiter m_database_check_interval;
        IntervalLimiter m_active_blocks_management_interval;
        IntervalLimiter m_active_block_modifier_interval;
        IntervalLimiter m_active_blocks_nodemetadata_interval;
-       int m_active_block_interval_overload_skip = 0;
+       // Whether the variables below have been read from file yet
+       bool m_meta_loaded = false;
        // Time from the beginning of the game in seconds.
        // Incremented in step().
        u32 m_game_time = 0;
@@ -470,8 +465,13 @@ class ServerEnvironment : public Environment
        PlayerDatabase *m_player_database = nullptr;
        AuthDatabase *m_auth_database = nullptr;
 
+       // Pseudo random generator for shuffling, etc.
+       std::mt19937 m_rgen;
+
        // Particles
        IntervalLimiter m_particle_management_interval;
        std::unordered_map<u32, float> m_particle_spawners;
        std::unordered_map<u32, u16> m_particle_spawner_attachments;
+
+       ServerActiveObject* createSAO(ActiveObjectType type, v3f pos, const std::string &data);
 };