Well if that problem hasnt been solved yet, stoplights are created roughly
this exact manner, except size, that can vary.
Once the zone itself is set, you'll need to add passable transparant structures of some kind most likely to support the stop/trafficlights so they dont just float mid-air and look weird;
as displayed here on how they can look for example. The traffic lights always seem to spawn on 4.0 or something, or perhaps 3 full z blocks up from the road itself, never tried on a lower or higher road really.
Edit: I also forgot, if you see peds crossing the street when the light is red (which does not always happen, depends on road formation), you'll need to add a crossing, those tiles with white lines that serve as a save way to cross the road, ussually.
If you need more examples i suggest you check out the official districts DMA made for different road and traffic light structures.
A note on Traffic light zones, they dont need to be that exact size, they can be larger or smaller as long as they stay in the exact center and dont go into any streets, just stay and fill up the entire center. They can also be used for other road formations then crossroads, such as a road that goes forward but also either left or right, the traffic lights will then only show up on those appropiate roads. You still need to add that structure to support the stoplights visually though, on each side with a road. Havent tested them on a road with no turns though.
As for the map zone command to control what spawns where, it works, but only if done right.
The command itself and how you're supposed to use it:
[mis]MAP_ZONE zonename = ( cars , goodcars, badcars , policecars , peds , muggers , carthieves , elvislines , gangmembers , copsonfoot , gangcars )[/mis]
zonename is the name of the zone you're using, it HAS to be an Information Zone.
cars = is the general ratio of cars. Apply a number to it that will act as a total. An example later.
goodcars = ratio of good quality (aka fast and shiney looking) cars.
badcars = the opposite of good cars, they're all slow and crap.
policecars = self-explanatory, allows more or only police cars to spawn. They seem to spawn regardless if this is 0 though, along with every other emergency vehicle.
peds = the ratio of peds in general, needs a number to act as an total as well.
muggers = red shirt guys who try to take your money.
carthieves = green shirt guys who steal cars at random.
elvislines = lines of people dressed like elvis who give "ELVIS HAS LEFT THE BUILDING" bonus after all are killed in short time.
gangmembers = the amount of gang members that will spawn. Put on 0 if not a gang zone.
copsonfoot = the amount of patrolling officers on foot. They are always alone, never grouped.
gangcars = the amount of gang cars to roam the streets. Set to 0 if no gang area.
Now here's a short instruction on how to use the command:
You replace each keyword, like cars, goodcars, and so on, with numbers. Cars is a general ratio of cars, if this is 0 you need to put any other car-relate settings to 0. So set this to something like 1000.
Then comes goodcars, this isnt a general ratio, instead, this will try to override goodcars. Set this to something like 200 and it will override 200 of the 1000 leaving 800 left for cars in general to spawn, giving goodcars 200.
Then comes badcars. Add say, 150 to this one, and cars in general will become 650, making almost half of the spawned traffic so far good or bad cars and the others average.
And so on with police cars and gangcars. You can completely override the cars number to ensure no average cars spawn, but its probaly a good idea to keep a doable number left for cars to retain, so average cars spawn as well, i think.
Same deal with peds. Peds is the general ratio as well, every other thing like muggers, carthieves and even gang members deduct from the amount of generic peds that will show up. Allowing for say, an area where nothing but muggers or gang members spawn. Again 1000 is a good number for that to spread around with.
If it helps this is what i used for the 'slums' area, where cars are supposed to be worse and all:
[mis]MAP_ZONE Slums = (1000/*cars*/, 100/*goodcars*/, 400/*badcars*/, 100/*policecars*/, 1000/*peds*/, 250/*muggers*/, 250/*carthieves*/, 100/*elvislines*/, 0/*gangmembers*/, 100/*copsonfoot*/, 0/*gangcars*/)[/mis]The /**/ things are used to comment a specific thing in the script line without commenting the rest or the entire line, so it should still function in script, if need be.