Initial Level Setup
Before you even get started on your map there are some things that require setting up. First of all, your map needs CWTO2 Map Info, found in the world properties window (view > world properties) under world info. Create a new CMWTO2MapInfo (if you aren't starting from the example map).
The most important piece of info to put in here are custom classes. Horde Mod is built to assume that all Horde maps will exclusively use Mason for players, so plug custom Mason family infos into the relevant slots. To create a custom family info, go into the actor classes tab in the content browser, expand info, expand AOCFamilyInfo, then expand archer, knight, manatarms, and vanguard and place the mason versions in your level. Set the health of each one to 200. You should disable sprint attacks for vanguards since most weapons in the game don't actually support sprint attacks and cause the camera to bug when the player sprints. There are also other settings to play with, such as lowering stamina cost for kicks. It's important to plug mason family infos into the agatha slots in order to make sure all players will be playing on the same team, since the aim of Horde is to be a cooperative experience.
You should also add a custom scoring modifier (Info > Mutator > UTMutator > CMWMutator > CMWMutator_CustomScoring) (or just search for it). Horde uses player score as currency, you will be giving the player options to spend their "money" on weapons, armor, and unlocking new areas. You can scale the prices to match the scoring, but in the example map we use 10 points per kill to keep numbers reasonable looking, compared to the default 100.
And create a custom team setup. (do we really need this though?)
Now to put together the level setup in kismet. You need a level loaded event to start. In your 'Initialize Game Variables' set the round time to 60 minutes, this is the maximum time allowed. Horde mod gets around this, but that's for later. The mutators here are mode complicated than they need to be because we have a toggle between hard and normal mode, and hard mode gives the player more points per kill, so we check a bool to see if hard mode is activated or not and that decides which custom scoring modifier we will use. Also we have a version / welcome message.
And finally, set the player's starting weapons. You can set it to whatever you want, we find that people usually refuse to buy even the cheapest weapons so we upgraded from originally only giving players a broad dagger to now starting them with a saber.
For every playable area you have, you need an AOCTriggerVolume (set to detect Masons to only look for players) to detect if there are players in the area (checks every 3 seconds) and to spawn enemies there if there are any players present. You put all the AISpawns in the relevant area into the object list for that area. The kismet repeats for each area, only using different AOCTriggerVolumes and sets of spawn points.