One of the new builders was mentioning to me that he didn't think that 100 triggers would be enough. What many builders don't realize is that, due to the flexibility of the system, triggers can be consolidated. It's a bit like what Humpty Dumpty in Alice in Wonderland calls a portmanteau: 'You see it's like a portmanteau — there are two meanings packed up into one word.'
To start, if you've ever popped into room 3 (and who hasn't?), you've probably seen Socrates greeting people with pithy comments: tstat 183. This is an example of how to make a mob say random statements, making a more interesting trigger than having him say the same things all the time. tstat 6 -
Obj Command Magic Eight Ball - O47
uses a switch and cases to do the same thing. It generates a random number to output a random line. This is the format I'll be talking about.
Now, let's expand this a bit. tstat 153 - Angel Follows Masters Commands - 207. This one, instead of just randomly sending out lines, needs the player to input commands. But which commands? A basic builder might make a trigger for each command like so:
Trigger type: speech, Numeric arg: 100, Arg list: speak
Trigger type: speech, Numeric arg: 100, Arg list: sit
and so on. However, this particular trigger takes 10 different commands and stuffs them all in the portmanteau. Instantly, instead of using 10% of the available triggers, you're only using 1%! If you've met the conditions of tstat 152, you can give Angel various commands for various reactions.
So now I'm going to move on to one of my own triggers.
Code:
Name: 'Zoo, Day, Movement Out', VNum: [56013], RNum: [ 4156]
Trigger Intended Assignment: Rooms
Trigger Type: Leave , Numeric Arg: 100, Arg list: None
Commands:
*This trigger is just to give the park creatures a more
* interesting description of moving out of rooms.
*It also prevents them from moving out of their sections.
*This is the petting zoo and daytime version.
if %actor.is_pc%
else
if %self.vnum% == 56006 && %direction% == east
return 0
else
if %self.vnum% == 56010 && %direction% == west
return 0
else
if %self.vnum% == 56020 && %direction% == north
return 0
else
if %self.vnum% == 56040 && %direction% == south
return 0
else
switch %actor.vnum%
case 56002
set walk bounces
break
case 56003
case 56020
case 56024
set walk bounds
break
case 56004
case 56013
case 56022
set walk scurries
break
case 56005
set walk wanders
break
case 56006
case 56014
case 56023
set walk hops
break
case 56007
set walk trots
break
case 56008
case 56021
set walk burrows
break
case 56009
set walk swings
break
case 56010
set walk pounces
break
case 56011
set walk lumbers
break
case 56012
set walk slithers
break
case 56015
case 56016
set walk flutters
break
case 56017
set walk swoops
break
case 56018
case 56019
case 56025
set walk flies
break
done
if %actor.vnum% > 56001 && %actor.vnum% < 56026
set msg %actor.name% %walk% %direction%.
%echo% %msg%
end
end
end
end
end
end
This code is doing two things. First, it's keeping mobs from going places they shouldn't and second, it's giving the mobs a more interesting movement message. This works because the mobs are flagged as sneaking so they have no movement messages of their own. There is a barely noticeable oddity where the mobs seem to 'ghost', moving when they aren't really there.
I feel this is a nice portmanteau because, not only does it do these two tasks, it covers over 20 mobs and over 30 rooms. Doesn't this seem efficient? There are a lot of builders even more efficient than this. Fizban is an excellent example of trigger efficiency.
If you can get the hang of this, you may find that that 100 trigger limit isn't nearly as limited as it seems.
Good luck with the building.