From: Mario 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 66ac0b20b..d7ecf5fd8 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 f69b13321..b9c1475d4 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 000000000..85354bf4d --- /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 3f9f020af..e150bddbb 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 df5623f05..5b6825e8d 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