X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fbase.qc;h=1ba8f2663e730b8796da2e6fb8cd3b1592d61eb0;hb=06953d7d1a40e2ee6dd389ae50b20ef9c7f75557;hp=fdf24edb75a399a526e085a7f28c11b6791c349c;hpb=60f1e3301beae3dac0765d8ee8eb350ee21c8f30;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/base.qc b/qcsrc/server/mutators/base.qc index fdf24edb7..1ba8f2663 100644 --- a/qcsrc/server/mutators/base.qc +++ b/qcsrc/server/mutators/base.qc @@ -59,6 +59,7 @@ float CallbackChain_Remove(entity cb, float() func) entity e; float n; n = 0; + order = 0; for(e = cb; e.cbc_next; e = e.cbc_next) { while(e.cbc_next.cbc_func == func) @@ -90,7 +91,7 @@ float CallbackChain_Call(entity cb) return r; // callbacks return an error status, so 0 is default return value } -#define MAX_MUTATORS 8 +#define MAX_MUTATORS 15 string loaded_mutators[MAX_MUTATORS]; float Mutator_Add(mutatorfunc_t func, string name) { @@ -100,7 +101,7 @@ float Mutator_Add(mutatorfunc_t func, string name) { if(name == loaded_mutators[i]) return 1; // already added - if(!loaded_mutators[i]) + if (!(loaded_mutators[i])) j = i; } if(j < 0) @@ -115,8 +116,14 @@ 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)