]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mutators/base.qc
Make most server includes order insensitive
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / base.qc
index 9be5745cb5e4ec24afbde80bee85c4e58bf94097..81f759c8bebc53f5f38e1d18b99dd0222e7f0124 100644 (file)
@@ -1,3 +1,6 @@
+#include "base.qh"
+#include "../_.qh"
+
 .float() cbc_func;
 .entity cbc_next;
 .float cbc_order;
@@ -91,17 +94,17 @@ float CallbackChain_Call(entity cb)
        return r; // callbacks return an error status, so 0 is default return value
 }
 
-#define MAX_MUTATORS 8
+const float MAX_MUTATORS = 15;
 string loaded_mutators[MAX_MUTATORS];
 float Mutator_Add(mutatorfunc_t func, string name)
 {
-       float i, j;
+       int i, j;
        j = -1;
        for(i = 0; i < MAX_MUTATORS; ++i)
        {
                if(name == loaded_mutators[i])
                        return 1; // already added
-               if(!loaded_mutators[i])
+               if (!(loaded_mutators[i]))
                        j = i;
        }
        if(j < 0)
@@ -116,13 +119,19 @@ float Mutator_Add(mutatorfunc_t func, string name)
                // good
                return 1;
        }
-       backtrace("WARNING: when adding mutator: adding failed\n");
-       Mutator_Remove(func, name);
+
+       backtrace("WARNING: when adding mutator: adding failed, rolling back\n");
+
+       if(func(MUTATOR_ROLLING_BACK) != 0)
+       {
+               // baaaaad
+               error("WARNING: when adding mutator: rolling back failed");
+       }
        return 0;
 }
 void Mutator_Remove(float(float) func, string name)
 {
-       float i;
+       int i;
        for(i = 0; i < MAX_MUTATORS; ++i)
                if(name == loaded_mutators[i])
                        break;