From 8d1d30fea5155c60d97a4d61fc5240777342a010 Mon Sep 17 00:00:00 2001 From: Mircea Kitsune Date: Thu, 27 Oct 2011 20:00:56 +0300 Subject: [PATCH] Add a maximum number of objects each player can place at a time. By default, players may have up to 100 objects --- defaultXonotic.cfg | 1 + qcsrc/server/autocvars.qh | 1 + qcsrc/server/mutators/sandbox.qc | 25 ++++++++++++++++++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index adeb6d31b..db1766ae0 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -543,6 +543,7 @@ seta g_balance_cloaked_alpha 0.25 set g_sandbox 0 "allow players to spawn and edit objects around the map" set g_sandbox_info 1 "print non-critical information to the server" +set g_sandbox_maxplayerobjects 100 "maximum number of objects a player can have at a time" set g_sandbox_editor_distance_spawn 200 "distance at which objects spawn in front of the player" set g_sandbox_editor_distance_edit 350 "distance at which players can edit or remove objects they are looking at" set g_sandbox_object_scale_min 0.1 "minimum scale that objects can be set to" diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index f764502b4..47a7bac29 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -1200,6 +1200,7 @@ float autocvar_g_trueaim_minrange; float autocvar_g_debug_defaultsounds; float autocvar_g_loituma; float autocvar_g_sandbox_info; +float autocvar_g_sandbox_maxplayerobjects; float autocvar_g_sandbox_editor_distance_spawn; float autocvar_g_sandbox_editor_distance_edit; float autocvar_g_sandbox_object_scale_min; diff --git a/qcsrc/server/mutators/sandbox.qc b/qcsrc/server/mutators/sandbox.qc index 557e58f18..6a9a7ed58 100644 --- a/qcsrc/server/mutators/sandbox.qc +++ b/qcsrc/server/mutators/sandbox.qc @@ -1,5 +1,6 @@ .string object_clipboard; .entity object_attach; +.float object_count; .float material; const float MATERIAL_NONE = 0; @@ -136,9 +137,19 @@ entity sandbox_SpawnObject() setorigin(e, trace_endpos); e.angles_y = self.v_angle_y; + self.object_count += 1; + return e; } +void sandbox_RemoveObject(entity e) +{ + remove(e); + e = world; + + self.object_count -= 1; +} + string sandbox_Storage_Save(entity e) { // save object properties @@ -250,7 +261,11 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand) // ---------------- COMMAND: SPAWN OBJECT ---------------- case "spawn_object": - // don't allow spawning objects without a model + if(self.object_count >= autocvar_g_sandbox_maxplayerobjects) + { + print_to(self, strcat("WARNING: Cannot spawn any more objects. Each player may have up to ^3", ftos(autocvar_g_sandbox_maxplayerobjects), " ^7objects at a time")); + return TRUE; + } if(cmd_argc < 3) { print_to(self, "WARNING: Attempted to spawn an object without specifying a model. Please specify the path to your model file after the 'spawn_object' command"); @@ -277,8 +292,7 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand) { if(autocvar_g_sandbox_info) print(strcat(self.netname, " removed an object at origin ", vtos(e.origin), "\n")); - remove(e); - e = world; + sandbox_RemoveObject(e); return TRUE; } @@ -312,6 +326,11 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand) print_to(self, "WARNING: No object in clipboard. You must copy an object before you can paste it"); return TRUE; } + if(self.object_count >= autocvar_g_sandbox_maxplayerobjects) + { + print_to(self, strcat("WARNING: Cannot spawn any more objects. Each player may have up to ^3", ftos(autocvar_g_sandbox_maxplayerobjects), " ^7objects at a time")); + return TRUE; + } e = sandbox_SpawnObject(); sandbox_Storage_Load(e, self.object_clipboard); -- 2.39.2