X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fserver%2Fmutators%2Fsandbox.qc;h=264aa83a7d9e62c9a827431e9e47f4fcfe556716;hb=a0b81c8a4bac14f23744b8fa2d3e0fd3ecd0730d;hp=2f33f841c5647bed235c7f84338bf7e003e3d981;hpb=49c00884eac6fe9626b8875038d0095d10692d1f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/sandbox.qc b/qcsrc/server/mutators/sandbox.qc index 2f33f841c..264aa83a7 100644 --- a/qcsrc/server/mutators/sandbox.qc +++ b/qcsrc/server/mutators/sandbox.qc @@ -1,5 +1,6 @@ const float MAX_STORAGE_ATTACHMENTS = 16; float object_count; +.float object_flood; .entity object_attach; .string material; @@ -34,10 +35,12 @@ void sandbox_ObjectFunction_Think() entity e; // decide if and how this object can be grabbed - if(autocvar_g_sandbox_editor_free < 2 && self.crypto_idfp) - self.grab = 1; + if(autocvar_g_sandbox_readonly) + self.grab = 0; // no grabbing + else if(autocvar_g_sandbox_editor_free < 2 && self.crypto_idfp) + self.grab = 1; // owner only else - self.grab = 3; + self.grab = 3; // anyone // Object owner is stored via player UID, but we also need the owner as an entity (if the player is available on the server). // Therefore, scan for all players, and update the owner as long as the player is present. We must always do this, @@ -399,9 +402,14 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand) return FALSE; if(cmd_name == "g_sandbox") { + if(autocvar_g_sandbox_readonly) + { + print_to(self, "^2SANDBOX - INFO: ^7Sandbox mode is active, but in read-only mode. Sandbox commands cannot be used"); + return TRUE; + } if(cmd_argc < 2) { - print_to(self, "Sandbox mode is active. For usage information, type 'sandbox help'"); + print_to(self, "^2SANDBOX - INFO: ^7Sandbox mode is active. For usage information, type 'sandbox help'"); return TRUE; } @@ -443,6 +451,12 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand) // ---------------- COMMAND: OBJECT, SPAWN ---------------- case "object_spawn": + if(time < self.object_flood) + { + print_to(self, strcat("^1SANDBOX - WARNING: ^7Flood protection active. Please wait ^3", ftos(self.object_flood - time), " ^7seconds beofore spawning another object")); + return TRUE; + } + self.object_flood = time + autocvar_g_sandbox_editor_flood; if(object_count >= autocvar_g_sandbox_editor_maxobjects) { print_to(self, strcat("^1SANDBOX - WARNING: ^7Cannot spawn any more objects. Up to ^3", ftos(autocvar_g_sandbox_editor_maxobjects), " ^7objects may exist at a time")); @@ -453,7 +467,7 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand) print_to(self, "^1SANDBOX - WARNING: ^7Attempted to spawn an object without specifying a model. Please specify the path to your model file after the 'object_spawn' command"); return TRUE; } - else if not(fexists(argv(2))) + if not(fexists(argv(2))) { print_to(self, "^1SANDBOX - WARNING: ^7Attempted to spawn an object with a non-existent model. Make sure the path to your model file is correct"); return TRUE; @@ -501,6 +515,12 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand) case "paste": // spawns a new object using the properties in the player's clipboard cvar + if(time < self.object_flood) + { + print_to(self, strcat("^1SANDBOX - WARNING: ^7Flood protection active. Please wait ^3", ftos(self.object_flood - time), " ^7seconds beofore spawning another object")); + return TRUE; + } + self.object_flood = time + autocvar_g_sandbox_editor_flood; if(!argv(3)) // no object in clipboard { print_to(self, "^1SANDBOX - WARNING: ^7No object in clipboard. You must copy an object before you can paste it");