]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/server.h
Add function to get server info.
[dragonfireclient.git] / src / server.h
index a86f75f1d4d95c7a79797a719ae253683d917bf4..2e735e77c62abeded92d77f5f6f30a4fe3618a0c 100644 (file)
@@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "mods.h"
 #include "inventorymanager.h"
 #include "subgame.h"
+#include "tileanimation.h" // struct TileAnimationParams
 #include "util/numeric.h"
 #include "util/thread.h"
 #include "util/basic_macros.h"
@@ -52,7 +53,7 @@ class PlayerSAO;
 class IRollbackManager;
 struct RollbackAction;
 class EmergeManager;
-class GameScripting;
+class ServerScripting;
 class ServerEnvironment;
 struct SimpleSoundSpec;
 class ServerThread;
@@ -114,6 +115,7 @@ struct ServerSoundParams
        u16 object;
        float max_hear_distance;
        bool loop;
+       float fade;
 
        ServerSoundParams():
                gain(1.0),
@@ -122,7 +124,8 @@ struct ServerSoundParams
                pos(0,0,0),
                object(0),
                max_hear_distance(32*BS),
-               loop(false)
+               loop(false),
+               fade(0)
        {}
 
        v3f getPos(ServerEnvironment *env, bool *pos_exists) const;
@@ -131,6 +134,7 @@ struct ServerSoundParams
 struct ServerPlayingSound
 {
        ServerSoundParams params;
+       SimpleSoundSpec spec;
        UNORDERED_SET<u16> clients; // peer ids
 };
 
@@ -147,6 +151,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                const SubgameSpec &gamespec,
                bool simple_singleplayer_mode,
                bool ipv6,
+               bool dedicated,
                ChatInterface *iface = NULL
        );
        ~Server();
@@ -172,7 +177,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void handleCommand_Init_Legacy(NetworkPacket* pkt);
        void handleCommand_Init2(NetworkPacket* pkt);
        void handleCommand_RequestMedia(NetworkPacket* pkt);
-       void handleCommand_ReceivedMedia(NetworkPacket* pkt);
        void handleCommand_ClientReady(NetworkPacket* pkt);
        void handleCommand_GotBlocks(NetworkPacket* pkt);
        void handleCommand_PlayerPos(NetworkPacket* pkt);
@@ -224,17 +228,13 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        inline bool getShutdownRequested() const { return m_shutdown_requested; }
 
        // request server to shutdown
-       void requestShutdown(const std::string &msg, bool reconnect)
-       {
-               m_shutdown_requested = true;
-               m_shutdown_msg = msg;
-               m_shutdown_ask_reconnect = reconnect;
-       }
+       void requestShutdown(const std::string &msg, bool reconnect, float delay = 0.0f);
 
        // Returns -1 if failed, sound handle on success
        // Envlock
        s32 playSound(const SimpleSoundSpec &spec, const ServerSoundParams &params);
        void stopSound(s32 handle);
+       void fadeSound(s32 handle, float step, float gain);
 
        // Envlock
        std::set<std::string> getPlayerEffectivePrivs(const std::string &name);
@@ -252,7 +252,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                v3f pos, v3f velocity, v3f acceleration,
                float expirationtime, float size,
                bool collisiondetection, bool collision_removal,
-               bool vertical, const std::string &texture);
+               bool vertical, const std::string &texture,
+               const struct TileAnimationParams &animation, u8 glow);
 
        u32 addParticleSpawner(u16 amount, float spawntime,
                v3f minpos, v3f maxpos,
@@ -263,7 +264,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                bool collisiondetection, bool collision_removal,
                ServerActiveObject *attached,
                bool vertical, const std::string &texture,
-               const std::string &playername);
+               const std::string &playername, const struct TileAnimationParams &animation,
+               u8 glow);
 
        void deleteParticleSpawner(const std::string &playername, u32 id);
 
@@ -271,7 +273,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        Inventory* createDetachedInventory(const std::string &name, const std::string &player="");
 
        // Envlock and conlock should be locked when using scriptapi
-       GameScripting *getScriptIface(){ return m_script; }
+       ServerScripting *getScriptIface(){ return m_script; }
 
        // actions: time-reversed list
        // Return value: success/failure
@@ -292,11 +294,12 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        IWritableNodeDefManager* getWritableNodeDefManager();
        IWritableCraftDefManager* getWritableCraftDefManager();
 
-       const std::vector<ModSpec> &getMods() const { return m_mods; }
-       const ModSpec* getModSpec(const std::string &modname) const;
+       virtual const std::vector<ModSpec> &getMods() const { return m_mods; }
+       virtual const ModSpec* getModSpec(const std::string &modname) const;
        void getModNames(std::vector<std::string> &modlist);
        std::string getBuiltinLuaPath();
-       inline std::string getWorldPath() const { return m_path_world; }
+       virtual std::string getWorldPath() const { return m_path_world; }
+       virtual std::string getModStoragePath() const;
 
        inline bool isSingleplayer()
                        { return m_simple_singleplayer_mode; }
@@ -307,6 +310,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        bool showFormspec(const char *name, const std::string &formspec, const std::string &formname);
        Map & getMap() { return m_env->getMap(); }
        ServerEnvironment & getEnv() { return *m_env; }
+       v3f findSpawnPos();
 
        u32 hudAdd(RemotePlayer *player, HudElement *element);
        bool hudRemove(RemotePlayer *player, u32 id);
@@ -331,7 +335,14 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        bool setPlayerEyeOffset(RemotePlayer *player, v3f first, v3f third);
 
        bool setSky(RemotePlayer *player, const video::SColor &bgcolor,
-                       const std::string &type, const std::vector<std::string> &params);
+                       const std::string &type, const std::vector<std::string> &params,
+                       bool &clouds);
+       bool setClouds(RemotePlayer *player, float density,
+                       const video::SColor &color_bright,
+                       const video::SColor &color_ambient,
+                       float height,
+                       float thickness,
+                       const v2f &speed);
 
        bool overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness);
 
@@ -357,6 +368,9 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void SendInventory(PlayerSAO* playerSAO);
        void SendMovePlayer(u16 peer_id);
 
+       virtual bool registerModStorage(ModMetadata *storage);
+       virtual void unregisterModStorage(const std::string &name);
+
        // Bind address
        Address m_bind_addr;
 
@@ -397,7 +411,14 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void SendHUDSetFlags(u16 peer_id, u32 flags, u32 mask);
        void SendHUDSetParam(u16 peer_id, u16 param, const std::string &value);
        void SendSetSky(u16 peer_id, const video::SColor &bgcolor,
-                       const std::string &type, const std::vector<std::string> &params);
+                       const std::string &type, const std::vector<std::string> &params,
+                       bool &clouds);
+       void SendCloudParams(u16 peer_id, float density,
+                       const video::SColor &color_bright,
+                       const video::SColor &color_ambient,
+                       float height,
+                       float thickness,
+                       const v2f &speed);
        void SendOverrideDayNightRatio(u16 peer_id, bool do_override, float ratio);
 
        /*
@@ -428,7 +449,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void sendDetachedInventories(u16 peer_id);
 
        // Adds a ParticleSpawner on peer with peer_id (PEER_ID_INEXISTENT == all)
-       void SendAddParticleSpawner(u16 peer_id, u16 amount, float spawntime,
+       void SendAddParticleSpawner(u16 peer_id, u16 protocol_version,
+               u16 amount, float spawntime,
                v3f minpos, v3f maxpos,
                v3f minvel, v3f maxvel,
                v3f minacc, v3f maxacc,
@@ -436,16 +458,18 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                float minsize, float maxsize,
                bool collisiondetection, bool collision_removal,
                u16 attached_id,
-               bool vertical, const std::string &texture, u32 id);
+               bool vertical, const std::string &texture, u32 id,
+               const struct TileAnimationParams &animation, u8 glow);
 
        void SendDeleteParticleSpawner(u16 peer_id, u32 id);
 
        // Spawns particle on peer with peer_id (PEER_ID_INEXISTENT == all)
-       void SendSpawnParticle(u16 peer_id,
+       void SendSpawnParticle(u16 peer_id, u16 protocol_version,
                v3f pos, v3f velocity, v3f acceleration,
                float expirationtime, float size,
                bool collisiondetection, bool collision_removal,
-               bool vertical, const std::string &texture);
+               bool vertical, const std::string &texture,
+               const struct TileAnimationParams &animation, u8 glow);
 
        u32 SendActiveObjectRemoveAdd(u16 peer_id, const std::string &datas);
        void SendActiveObjectMessages(u16 peer_id, const std::string &datas, bool reliable = true);
@@ -467,8 +491,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                RemotePlayer *player = NULL);
        void handleAdminChat(const ChatEventChat *evt);
 
-       v3f findSpawnPos();
-
        // When called, connection mutex should be locked
        RemoteClient* getClient(u16 peer_id,ClientState state_min=CS_Active);
        RemoteClient* getClientNoEx(u16 peer_id,ClientState state_min=CS_Active);
@@ -500,6 +522,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        // functionality
        bool m_simple_singleplayer_mode;
        u16 m_max_chatmessage_length;
+       // For "dedicated" server list flag
+       bool m_dedicated;
 
        // Thread can set; step() will throw as ServerError
        MutexedVariable<std::string> m_async_fatal_error;
@@ -530,7 +554,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
 
        // Scripting
        // Envlock and conlock should be locked when using Lua
-       GameScripting *m_script;
+       ServerScripting *m_script;
 
        // Item definition manager
        IWritableItemDefManager *m_itemdef;
@@ -570,7 +594,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        float m_time_of_day_send_timer;
        // Uptime of server in seconds
        MutexedVariable<double> m_uptime;
-
        /*
         Client interface
         */
@@ -590,6 +613,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        bool m_shutdown_requested;
        std::string m_shutdown_msg;
        bool m_shutdown_ask_reconnect;
+       float m_shutdown_timer;
 
        ChatInterface *m_admin_chat;
        std::string m_admin_nick;
@@ -645,6 +669,9 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        // value = "" (visible to all players) or player name
        std::map<std::string, std::string> m_detached_inventories_player;
 
+       UNORDERED_MAP<std::string, ModMetadata *> m_mod_storages;
+       float m_mod_storage_save_timer;
+
        DISABLE_CLASS_COPY(Server);
 };