This is an instance made for Zombie Escape, but it can in theory be used for other game modes, like mini games or surf.
You can download the instance's vmf from here.
If you are going to use it, be sure to read the instructions bellow. It might seem too clustered with relays and entities, but they are there to work as one and to keep your outputs organized. Also, if you use it in your map, try to give me credit for it. Thanks!
Also, don't steal my instance and release it as yours! Not cool! You can ONLY re-post the instance in other websites if you redirect them HERE somewhere noticiable in the body of the description.
How to use
Place the vmf under /counter strike global offensive/sdk_content/maps/instances. Then load the v
mf by placing an entity in the level and choosing func_instance. Load the vmf in it's corresponding property. (NOTE, for instances to work, you need to have saved your level first.)
Once it is loaded, you will see something like in the picture below (For clearing purposes, I removed the back wall)
(Click on the image to make it big)
The very first thing you want to do, is to collapse the instance into the map. You should not modify the instance's vmf, because then you cannot use it for other maps, or in case you need the original. If you do not collapse it into the map, you are gonna have a bad time adding outputs to the proper relays.
Before I can explain how to use it, i thin kit is better to understand how it works. Each cilinder represents a difficulty. and on the bottom is a trigger_once that triggers out a relay for its corresponding difficulty. To stop all sphere from falling down and causing an output mess, I put a func_brush between the cylinders and the triggers.
Func_brushes have a special property in CSS and CSGO. Their enable/disable property maintains between rounds. Some people hate that "bug" because it requires manual reseting, but in this case, it is glorious. Because it means at the end of a zombie escape vechicle/bunker, I can activate an output to the brush to be disable, which will stay disable for the next round, thus changing the difficulty in the next round.
So now, I can go on and explain by the numbers.
When the map is loaded, (1) disables 1 brush, which in this case is for the easy difficulty. Each difficulty has a number from 0 to 3. (0 = easy, 1 = normal, 2 = hard, 3 = suicide). Once the brush is disable, the sphere (2) falls down into the trigger (3). The trigger has an output to trigger a relay(4), which in turns triggers 3 relays (5). Relay (4) also kills all cylinders, to avoid any weird outputs when humans win, or an admin changes the difficulty.
It might sound silly to trigger 3 relays, but they are divided in trigger entities (So, any outputs that target entities, like sounds, music, sprites, go there), in brushes that get turned on (Boxes, walls, etc. It is nice to tag them with brush_on_easy_hard, this way, you know where you have to enable them) and brushes that get turned off (brush_on_hard_normal_suicide would be here for example, for the easy difficulty relays). You need to have off and on said explicitly, to avoid any gaps when an admin no clips and presses a button via (8).
When humans win reach the exit, you create an output to a relay (6). This will enable the corresponding brush for the following difficulty and it will also write in the chat if you have a point_servercommand with a targetname of @command somewhere in the level. Relay (7) is similar to (6), exepct that it does not changes difficulty and it triggers a say command that informs players they won the map.
There are 4 computers. When you press their buttons, it will change the difficulty into the corresponding one. It also leaves a message of what diffuclty and the time until the map restarts. For the map restarts you will need a trigger_hurt named @kill_all. Do not use the nuke, as the final nuke usually does not cover the whole map and leaves a space for the bunker/rescue vehicle.
Relay 9 does nothing. It is there for you to write and keep track of all the brush outputs. If you create a brush_on_easy, add an output there. Then at the end, copy and paste them into the respective relays.
I hope this instance helps you out and I hope you can achieve great levels with it!