]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mutators/base.qc
More documentation and some minor changes for drag code
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / base.qc
index 0b1bea45edc46983f5f555db12eb3c9d0c56e043..fdf24edb75a399a526e085a7f28c11b6791c349c 100644 (file)
@@ -83,23 +83,55 @@ float CallbackChain_Call(entity cb)
        entity e;
        r = 0;
        for(e = cb; e.cbc_next; e = e.cbc_next)
+       {
+               CallbackChain_ReturnValue = r;
                r |= e.cbc_next.cbc_func();
+       }
        return r; // callbacks return an error status, so 0 is default return value
 }
 
-float Mutator_Add(float(float) func)
+#define MAX_MUTATORS 8
+string loaded_mutators[MAX_MUTATORS];
+float Mutator_Add(mutatorfunc_t func, string name)
 {
+       float i, j;
+       j = -1;
+       for(i = 0; i < MAX_MUTATORS; ++i)
+       {
+               if(name == loaded_mutators[i])
+                       return 1; // already added
+               if(!loaded_mutators[i])
+                       j = i;
+       }
+       if(j < 0)
+       {
+               backtrace("WARNING: too many mutators, cannot add any more\n");
+               return 0;
+       }
+       loaded_mutators[j] = name;
+
        if(func(MUTATOR_ADDING) == 0)
        {
                // good
                return 1;
        }
        backtrace("WARNING: when adding mutator: adding failed\n");
-       Mutator_Remove(func);
+       Mutator_Remove(func, name);
        return 0;
 }
-void Mutator_Remove(float(float) func)
+void Mutator_Remove(float(float) func, string name)
 {
+       float i;
+       for(i = 0; i < MAX_MUTATORS; ++i)
+               if(name == loaded_mutators[i])
+                       break;
+       if(i >= MAX_MUTATORS)
+       {
+               backtrace("WARNING: removing not-added mutator\n");
+               return;
+       }
+       loaded_mutators[i] = string_null;
+
        if(func(MUTATOR_REMOVING) != 0)
        {
                // baaaaad