Add ServerActiveObject::removingFromEnvironment()
authorPerttu Ahola <celeron55@gmail.com>
Thu, 1 Dec 2011 11:22:33 +0000 (13:22 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Thu, 1 Dec 2011 11:22:33 +0000 (13:22 +0200)
src/environment.cpp
src/serverobject.cpp
src/serverobject.h

index 9748f6b71d00c77487554b4c7f395696ee3eac94..81021ad83a677b41861b64da3a06606314e76be7 100644 (file)
@@ -741,8 +741,12 @@ void ServerEnvironment::clearAllObjects()
                        obj->m_removed = true;
                        continue;
                }
+
+               // Tell the object about removal
+               obj->removingFromEnvironment();
                // Deregister in scripting api
                scriptapi_rm_object_reference(m_lua, obj);
+
                // Delete active object
                delete obj;
                // Id to be removed from m_active_objects
@@ -1395,6 +1399,8 @@ void ServerEnvironment::removeRemovedObjects()
                if(obj->m_known_by_count > 0)
                        continue;
                
+               // Tell the object about removal
+               obj->removingFromEnvironment();
                // Deregister in scripting api
                scriptapi_rm_object_reference(m_lua, obj);
 
@@ -1680,6 +1686,8 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete)
                                <<"object id="<<id<<" is not known by clients"
                                <<"; deleting"<<std::endl;
 
+               // Tell the object about removal
+               obj->removingFromEnvironment();
                // Deregister in scripting api
                scriptapi_rm_object_reference(m_lua, obj);
 
index 428ad6484e320928be91a9f2111cb2e46c735ff7..344ae406aedd61c3f3329746ae716e7f881e3758 100644 (file)
@@ -37,10 +37,6 @@ ServerActiveObject::~ServerActiveObject()
 {
 }
 
-void ServerActiveObject::addedToEnvironment()
-{
-}
-
 ServerActiveObject* ServerActiveObject::create(u8 type,
                ServerEnvironment *env, u16 id, v3f pos,
                const std::string &data)
index 9e9513a7c2a4e2ca7877d41d4025cd5c906e14b2..b901cbf4d122404ce141baf11e6d026932c14f73 100644 (file)
@@ -54,8 +54,10 @@ public:
        ServerActiveObject(ServerEnvironment *env, v3f pos);
        virtual ~ServerActiveObject();
 
-       // Call after id has been set and has been inserted in environment
-       virtual void addedToEnvironment();
+       // Called after id has been set and has been inserted in environment
+       virtual void addedToEnvironment(){};
+       // Called before removing from environment
+       virtual void removingFromEnvironment(){};
        
        // Create a certain type of ServerActiveObject
        static ServerActiveObject* create(u8 type,
@@ -111,6 +113,11 @@ public:
                the data is the static form)
        */
        virtual std::string getStaticData(){return "";}
+       /*
+               Return false in here to never save and instead remove object
+               on unload. getStaticData() will not be called in that case.
+       */
+       virtual bool isStaticAllowed(){return true;}
        
        virtual void punch(ServerActiveObject *puncher){}
        virtual void rightClick(ServerActiveObject *clicker){}