X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fbase.qc;h=81f759c8bebc53f5f38e1d18b99dd0222e7f0124;hb=6f37a8f8076a572097afb13de2c367a72717c927;hp=9be5745cb5e4ec24afbde80bee85c4e58bf94097;hpb=8ec332c7d3cffdc6b39c3ada385fa41995630589;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/base.qc b/qcsrc/server/mutators/base.qc index 9be5745cb..81f759c8b 100644 --- a/qcsrc/server/mutators/base.qc +++ b/qcsrc/server/mutators/base.qc @@ -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;