=====================================================================================================
== How to get medToggle to add Mutators and Actors, exclude Mutators/Actors, and swap Weapons/Ammo ==
=====================================================================================================
First, if you are starting any mutators with a ServerActor in your UnrealTournament.ini, I
recommend you move them out of there and put them into the medToggle.ini. This will centralize
your management of your Actors and Mutators.
(NOTE, you must still leave any custom ServerPackages lines in your unrealTournament.ini!)
-------------------------------------------------------
| default mutators and Actors |
-------------------------------------------------------
Ok let's say you have a default server actor you want running all the time, for example UT Pure.
So we need to add it to our mDefaults line. Here is what our mDefaults line would look like after
adding it. Note that you can put it anywhere in the line, so I took the blank Actors="" that
currently appears after the settings, and moved it to the beginning of the line):
mDefaults=(Actors="UTPureRC7G.UTPureSA",Settings="FragLimit=22,WeaponStay=false,Gravity=600",ActorsToExclude="",mutators="",mutatorsToExclude="",WeaponSwap="",AmmoSwap="")
That's it. medToggle will now start UT Pure for you. If you want more than one server actor, they
are separated with commas within the double quotes, like this:
mDefaults=(Actors="UTPureRC7G.UTPureSA,CCProtector420.CCProtectorActor",Settings="FragLimit=22,WeaponStay=false,Gravity=600",ActorsToExclude="",mutators="",mutatorsToExclude="",WeaponSwap="",AmmoSwap="")
Getting mutators to start up is basically the same thing. An example:
mDefaults=(mutators="KickIdlersV2b.KickIdlers",Actors="UTPureRC7G.UTPureSA,CCProtector420.CCProtectorActor",Settings="FragLimit=22,WeaponStay=false,Gravity=600",ActorsToExclude="",mutatorsToExclude="",WeaponSwap="",AmmoSwap="")
For multiple mutators, just separate them with commas.
---------------------------------------------------------
| game class mutators and Actors |
---------------------------------------------------------
So now you have set up the actors and mutators you want to run all the time (in the defaults).
Now you can use the game classes to pile on more mutators and Actors to start per game class.
And, by default, the mutators and Actors you start adding at the game class level are going
to be ADDED to what was started at the default level. So let's say we have this for mDefaults
and the DeathMatch game class:
mDefaults=(mutators="KickIdlersV2b.KickIdlers",Actors="UTPureRC7G.UTPureSA,CCProtector420.CCProtectorActor",Settings="FragLimit=22,WeaponStay=false,Gravity=600",ActorsToExclude="",mutatorsToExclude="",WeaponSwap="",AmmoSwap="")
mGame[0]=(GameClass="Botpack.DeathMatchPlus",prefix="DM",mutators="medScoreBoard100.medScoreBoard",Actors="medWeaponAmplifier110.medWAActor")
Notice in the mGame[0] line we have just added mutators and Actors in the same fashion as
we did for the defaults. So the mutators and Actors from the defaults and the game class
will be combined, resulting in these items getting started:
mutators="KickIdlersV2b.KickIdlers,medScoreBoard100.medScoreBoard"
Actors="UTPureRC7G.UTPureSA,medWeaponAmplifier110.medWAActor"
So again, by default, the lists are ADDED together.
---------------------------------------------------------
| Map mutators and Actors |
---------------------------------------------------------
Same idea here. If you want mutators/Actors started for a single map, add them to one
of your mMap lines. Similarly, the mutators/Actors you specify here will be ADDED to
the default and game class ones. Let's say we have these three lines:
mDefaults=(mutators="KickIdlersV2b.KickIdlers",Actors="UTPureRC7G.UTPureSA,CCProtector420.CCProtectorActor",Settings="FragLimit=22,WeaponStay=false,Gravity=600",ActorsToExclude="",mutatorsToExclude="",WeaponSwap="",AmmoSwap="")
mGame[0]=(GameClass="Botpack.DeathMatchPlus",prefix="DM",mutators="medScoreBoard100.medScoreBoard",Actors="medWeaponAmplifier110.medWAActor")
mMap[0]=(MapName="DM-ArcaneTemple",mutators="Botpack.Fatboy",Actors="medUtil105.medUtilActor")
The resulting mutators/Actors to start will be:
mutators="KickIdlersV2b.KickIdlers,medScoreBoard100.medScoreBoard,Botpack.Fatboy"
Actors="UTPureRC7G.UTPureSA,medWeaponAmplifier110.medWAActor,medUtil105.medUtilActor"
So you could start up the Fatboy mutator for a single map. Kewl.
---------------------------------------------------------
| Excluding mutators and Actors |
---------------------------------------------------------
In the mDefaults line you can find these two variables:
ActorsToExclude=""
mutatorsToExclude=""
Obviously, this allows you to specify Actors and mutators that you don't want to
get started. There are two main uses for this (as well as others). I'll start with
an example at the game class level.
The first handy thing about exclusion is that some mutators/actors are not compatible
with each other. So let's say you were including UT PURE at the defaults level. But then
for one particular class, it is not compatible with PURE, so you wouldn't want it to run.
So here is an example of three new game classes, that don't want UT PURE running:
mGame[6]=(GameClass="EUT_1D.EUTDeathMatchPlus",prefix="EDM",Actors="EUT_1D.PureCRCLogger",ActorsToExclude="UTPureRC7G.UTPureSA")
mGame[7]=(GameClass="EUT_1D.EUTTeamGamePlus",prefix="ETDM",Actors="EUT_1D.PureCRCLogger",ActorsToExclude="UTPureRC7G.UTPureSA")
mGame[8]=(GameClass="EUT_1D.SmartCTFGame",prefix="ECTF",Actors="EUT_1D.PureCRCLogger",ActorsToExclude="UTPureRC7G.UTPureSA")
mutatorsToExclude works the same way.
Here is the second awesome use of exclusion. This one is very powerful. Besides using
this to exclude an Actor that you yourself have added at the default level, well, you
can also use it to exclude almost any actor you want! A couple of common ones that
people don't want are Invisibility and UDamage. There are a couple of mutators out
there to exclude them, but why have to bother with a couple of mutators when you can
just do this?
ActorsToExclude="Botpack.UT_Invisibility,Botpack.UDamage"
And you can specify ActorsToExclude at the default level, game level, or map level!
How about no health for one map?
mMap[0]=(MapName="DM-Codex",ActorsToExclude="Botpack.HealthPack,Botpack.HealthVial,Botpack.MedBox")
How about never seeing that enhanced shock rifle?
mDefaults=(ActorsToExclude="Botpack.SuperShockRifle")
And on and on. As long as you know the name of the name of the package and class,
most actors can be excluded.
(There ARE exceptions though. 'PathNode' I know to be one of them).
--------------------------------------------------------------------
| Excluding a literal INSTANCE of an Actor (advanced) |
--------------------------------------------------------------------
This is advanced stuff, but if you are a control freak who has oodles of time to
spend on your server, then read on :)
The next variable available: InstanceActorsToExclude
This variable is only available at the map level. This deals with literal instances of actors. This allows
you to remove a single instance of an actor at a time. An example. Let's imagine the map Deck16][. This
map has TWO flak cannons. Let's say we want to remove the one down by the goo. First I need to know its
unique name, so I do this:
- I open UnrealEd2
- I find that flak cannon
- I right-click on it, and select Properties
- I expand the 'Object' node.
- I can now see the value for 'Name'. In this case the value is "UT_FlakCannon1".
I now know this flak cannon is uniquely identified with the name "UT_FlakCannon1". So in my map line
I would do this:
mMap[0]=(MapName="DM-Deck16][",InstanceActorsToExclude="UT_FlakCannon1")
There you have it, the flak cannon by the goo would be removed, and ONLY this flak cannon would be removed.
You can specify multiple items of course, separated by commas.
-----------------------------------------------
| Swapping Weapons and Ammo |
-----------------------------------------------
Next two variables available are WeaponSwap and AmmoSwap. This allows you to swap weapons and ammo.
These two variables can be set at all levels.
A couple of uses for this. Let's say you hate a particular weapon and don't want it to appear in any
of the maps. But instead of using the exclude options above, it may be better to swap in a different
weapon. This is because the map may have been designed to make the weapon's location a focal point.
so if there was no longer anything there, there would be no reason to go to that section of the map.
Another use is to replace all types of weapons with a single weapon, sort of making it into an Arena.
(there is a quick way to do this, as I'll show you).
Ok, the basic way to swap - the format is first the class that exists, then a colon, then the class you
want to replace it with. So for this example we are replacing the sniper rifle with a pulse gun:
WeaponSwap="Botpack.SniperRifle:Botpack.PulseGun"
AmmoSwap="Botpack.BulletBox:Botpack.PAmmo"
Maybe you could add this to Deck16][ and stop the camping from above :)
To easily replace ALL weapons/ammo with a particular weapon/ammo, we introduce the keyword of [all],
used like this:
WeaponSwap="[all]:Botpack.ShockRifle"
AmmoSwap="[all]:Botpack.ShockCore"
There are a couple of individual flags you can set when you are replacing all weapons. These should be self-explanatory:
bReplaceAllWeaponsIncludesHammer=false
bReplaceAllWeaponsIncludesEnforcer=true
These two settings go by themselves directly under the [medToggle315.medToggle] section. That's it.
Note - Weapons/Ammo that you are trying to add to the map do not respect the ActorsToExclude list.
So if you have specified a weapon/ammo to go in, then it's going in!