Hints and Tips Part 2: (Continued from Part 1) 8) For the longest time I was using the On Activate Player block to try and get something to do an action when the player activates it. The problem? It doesn't cause an error, but it doesn't actually work as intended. When you set this, everyone can still activate the script. Which makes an interesting bug when you NPCs start firing off your player scripts! Use the condition statement "isActionRef player == 1" instead. ------------------------------------------------------------------------------------ 9) Make sure to take into account NPC schedules. I had a script that was waiting for Phintias to say something to the player. The problem was that I forgot about his schedules. The whole thing broke when he went to the inn after closing time. A player went to an inn and Phintias gave him the object at the inn... thus breaking the entire script. ------------------------------------------------------------------------------------ 10) Here's a tip that could save you time. Always have characters who want to talk to the player use Greeting, not anything else. Why? because they can get interrupted in their startconversation, which means the player needs to be able to talk to them to get the info. For example, say your NPC needs to talk to the player about something. If you use "startconversation player 01Talk" where 01Talk is a specific topic he cannot get to otherwise, if the NPC gets distracted, he'll never say to the player. And because the topic is not a Greeting, the player will never get it out of him either. So usually I have him use "startconversation Player Greeting" and have the Greeting be the thing he wants to tell the player. ------------------------------------------------------------------------------------ 11) ALWAYS disable your NPCS before you want them to show up. You might think they will stay in their own dungeon... but it's not a done deal. I had one guy that decided to go on a walkabout for no reason, and the player found him before he should have. ------------------------------------------------------------------------------------ 12) ALWAYS use a single variable to launch major scenes that advance the quest. For example: You need to trigger a cinematic in order to advance the quest. Make sure that the cinematic is triggered in the script by a single variable, be it a quest variable or whatever. Why would you want to do this? Because scripts break and there's no way around that. What might work perfectly for 99% of your players will break with the remaining 1%. If you have a single variable launch a major event, you can simply tell that 1% "Open the console and type set to ". I have a major scene in Heart of the Dead that relies on all the participants of an important cinematic to teleport in and take their places in a circle. So I thought I was being smart by having the entrance condition for that be this big long string where it checks all the participants and their location. And when it broke for someone suddenly I didn't have a quick work around. This could have been solved by having the big long check set a single variable. And then the big event could simply check the single variable. I know it seems redundant, but it helps in the long run. ------------------------------------------------------------------------------------ 13) If an NPC MUST do an action, make sure to have a loop going that tells her to keep doing it until it is done. No matter what you do, they still can get interrupted in their behaviors. Mostly used for "startconversation". For example, there was one part where an NPC had to talk to the player. He did this to advance the quest, but there were times where he would get distracted (oooo, shiny object!) and would stop his "startconversation" command. So I had to have a loop in the Quest script that kept telling him to "startconversation" over and over again until he did it. Oh, and never assume that "Must reach location" and "Must Complete" work all the time in AI packages. They don't. If you find your NPCs are being stupid and not doing what they are supposed to, try having a loop going that simply does an "evp". To be Continued...