From: Mircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Date: Thu, 27 Oct 2011 17:00:56 +0000 (+0300)
Subject: Add a maximum number of objects each player can place at a time. By default, players... 
X-Git-Tag: xonotic-v0.6.0~35^2~18^2~112
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=8d1d30fea5155c60d97a4d61fc5240777342a010;p=xonotic%2Fxonotic-data.pk3dir.git

Add a maximum number of objects each player can place at a time. By default, players may have up to 100 objects
---

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);