From: Mario <mario.mario@y7mail.com>
Date: Thu, 6 Jun 2013 00:07:07 +0000 (+1000)
Subject: Melee only arena mutator
X-Git-Tag: xonotic-v0.8.0~366^2~33^2
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=1522679654f92201855fb6d93934b2c85c84a6e8;p=xonotic%2Fxonotic-data.pk3dir.git

Melee only arena mutator
---

diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg
index 66ac0b20b2..d7ecf5fd8a 100644
--- a/defaultXonotic.cfg
+++ b/defaultXonotic.cfg
@@ -1601,3 +1601,5 @@ set cl_weapon_stay_color "2 0.5 0.5" "Color of picked up weapons when g_weapon_s
 set cl_weapon_stay_alpha 0.75 "Alpha of picked up weapons when g_weapon_stay > 0"
 
 seta g_superspectate 0 "server side, allows extended spectator functions through the cmd interface. followpowerup, followstrength, followstshield or followfc [red|blue] will transfer spectation to the relevent player, if any"
+
+set g_melee_only 0 "enable melee only arena"
diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc
index f69b133213..b9c1475d4d 100644
--- a/qcsrc/server/miscfunctions.qc
+++ b/qcsrc/server/miscfunctions.qc
@@ -919,6 +919,7 @@ void readlevelcvars(void)
 	CHECK_MUTATOR_ADD("g_rocket_flying", mutator_rocketflying, !cvar("g_minstagib"));
 	CHECK_MUTATOR_ADD("g_vampire", mutator_vampire, !cvar("g_minstagib"));
 	CHECK_MUTATOR_ADD("g_superspectate", mutator_superspec, 1);
+	CHECK_MUTATOR_ADD("g_melee_only", mutator_melee_only, !cvar("g_minstagib"));
 	CHECK_MUTATOR_ADD("g_sandbox", sandbox, 1);
 	
 	#undef CHECK_MUTATOR_ADD
@@ -966,7 +967,7 @@ void readlevelcvars(void)
 	g_warmup_allguns = cvar("g_warmup_allguns");
 	g_warmup_allow_timeout = cvar("g_warmup_allow_timeout");
 
-	if ((g_race && g_race_qualifying == 2) || g_arena || g_minstagib || g_assault || cvar("g_campaign"))
+	if ((g_race && g_race_qualifying == 2) || g_arena || g_minstagib || g_assault || cvar("g_campaign") || cvar("g_melee_only"))
 		inWarmupStage = 0; // these modes cannot work together, sorry
 
 	g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon");
diff --git a/qcsrc/server/mutators/mutator_melee_only.qc b/qcsrc/server/mutators/mutator_melee_only.qc
new file mode 100644
index 0000000000..85354bf4da
--- /dev/null
+++ b/qcsrc/server/mutators/mutator_melee_only.qc
@@ -0,0 +1,42 @@
+MUTATOR_HOOKFUNCTION(melee_SetStartItems)
+{
+	start_ammo_shells = 0;
+	
+	WEPSET_COPY_AW(start_weapons, WEP_SHOTGUN);
+		
+	return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(melee_FilterItem)
+{
+	switch (self.items)
+	{
+		case IT_5HP:
+		case IT_ARMOR_SHARD:
+			return FALSE;
+	}
+	
+	return TRUE;
+}
+
+MUTATOR_HOOKFUNCTION(melee_BuildMutatorsString)
+{
+	ret_string = strcat(ret_string, ":MeleeOnly");
+	return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(melee_BuildMutatorsPrettyString)
+{
+	ret_string = strcat(ret_string, ", Melee Only Arena");
+	return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_melee_only)
+{
+	MUTATOR_HOOK(SetStartItems, melee_SetStartItems, CBC_ORDER_ANY);
+	MUTATOR_HOOK(FilterItem, melee_FilterItem, CBC_ORDER_ANY);
+	MUTATOR_HOOK(BuildMutatorsString, melee_BuildMutatorsString, CBC_ORDER_ANY);
+	MUTATOR_HOOK(BuildMutatorsPrettyString, melee_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+
+	return FALSE;
+}
diff --git a/qcsrc/server/mutators/mutators.qh b/qcsrc/server/mutators/mutators.qh
index 3f9f020aff..e150bddbbd 100644
--- a/qcsrc/server/mutators/mutators.qh
+++ b/qcsrc/server/mutators/mutators.qh
@@ -21,5 +21,6 @@ MUTATOR_DECLARATION(mutator_vampire);
 MUTATOR_DECLARATION(mutator_superspec);
 MUTATOR_DECLARATION(mutator_minstagib);
 MUTATOR_DECLARATION(mutator_touchexplode);
+MUTATOR_DECLARATION(mutator_melee_only);
 
 MUTATOR_DECLARATION(sandbox);
diff --git a/qcsrc/server/progs.src b/qcsrc/server/progs.src
index df5623f053..5b6825e8d8 100644
--- a/qcsrc/server/progs.src
+++ b/qcsrc/server/progs.src
@@ -248,6 +248,7 @@ mutators/sandbox.qc
 mutators/mutator_superspec.qc
 mutators/mutator_minstagib.qc
 mutators/mutator_touchexplode.qc
+mutators/mutator_melee_only.qc
 
 ../warpzonelib/anglestransform.qc
 ../warpzonelib/mathlib.qc