Welcome Guest ( Log In | Register )

6 Pages V < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> Renee's Modding Thread
Renee
post Dec 29 2018, 04:04 PM
Post #41


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland




Repeatable Bounty Quests II (innkeeper involvement). Game: TES IV: Oblivion


This post shall deal with Respawning Bounty Quests, but it's different from the process I detailed earlier in this thread. Again, the quest-giver won't give us this bounty quest just once. It can potentially happen over and over, as the game respawns every 3 days.

The main difference between this process and the previous bounty quest is: the request to take care of some baddie shows up occasionally when speaking to particular NPCs. We go to speak to this person (to rent a room, usually) and sometimes he or she will want the PC to do something about the boss of some local lair. Once we have done what this NPC wants us to do, it's then possible to go back for a reward from that NPC, or some other NPC. Like the previous method, this one can potentially happen every 3 days. Again, this adds to the roleplaying side of things just like the previous method, but the involved process is more random.

Since the NPC's request shows up randomly, the player never knows when the NPC will give the option to start things. Because of this, when the quest finally shows up it feels more natural, as it becomes a part of conversation only occasionally. I have gotten this to work with numerous NPCs, mostly innkeepers.

The subject of my first respawning quest is the most difficult to work with, but I didn't know this at the time. I got the inspiration for this idea after visiting Malene of Roxey Inn, and she's more complicated to work with than some others. The idea: Malene already knows my character (Renee Gade III), since Renee has helped Malene in the past during the Gravefinder's Repose quest. So the idea was: those pesky necromancers have returned, and Malene needs RG3's help again! emot-ninja1.gif But Malene will ONLY ask for this help AFTER The Gravefinder's Repose is done.

Since Malene has a pre-written Bethesda quest associated with her, she required some extra steps be taken to make my idea work. Other NPC innkeepers (Foroch, owner of Gottshaw Inn, for instance) did not require as much help to get similar quests running. In this post I will be trying to provide details for the different methods followed for several different innkeepers.


1). Open Construction Set, bla bla bla.

Innkeepers who aren't in walled towns make perfect quest-givers, because their places of business are not as protected. Whether it's Malene, Diram Sirethi, Candice Corgine, Foroch, and so on, these people have an interest in keeping the area near their establishments safe. But the thing is, using each of these innkeepers as quest-givers will make things different every time. Each one requires a unique approach.


OBJECT window > Actors > NPC
First thing to do is perform some research on the innkeeper / quest-giver. Double left-click on one of the names listed (Corgine, Malene, Diram, etc.), and click on their Dialogue button. The Dialogue panel takes forever to open. Once it does, look at the NPC's GREETINGs.

On the top right-hand side of the Dialogue panel is a large window, listing all the quests these NPCs will have for greetings. There is dialog which deals with Crime, as well as some Generic greetings. In some cases, they will also have greetings which deal with quests, such as SQ05, which is The Gravefinder's Repose.

It's time to determine if the chosen NPC is already involved with any other quests. Are any of these quests current in our character's game? Have they already been done? Or have any not been started yet? If there are any quests, will they be ignored by the character? Or will they eventually get tackled?

Some innkeepers are involved in quests, and some are not. Either way, look at all the GREETINGs the NPC has. If our character is in the middle of some quest (or eventually will be) an innkeeper deals with, you need to then look at these individually, and find their Priorities. In some cases, there might not be any quests being done any time soon. If there aren't, look at the innkeeper's Generic greetings. Generic greetings often have lower Priorities than quest greetings.

For instance, I am going to tackle Candice Corgine first. Candice Corgine of Pell's Gate's inn has a bunch of Crime greetings (which can be ignored, unless your character is some sort of constant criminal). She also has DAClavicusVile, aka the Clavicus Vile quest, which has a Priority of 60. She will give her innocuous Clavicus Vile greeting when spoken to ("Welcome to Pells Gate, friend."), but only if this quest has not been started yet, or we're in the middle of it. She also has Vampire greetings, one Thieves Guild greeting, and several dealing with the MQEndgame. MQEndgame greetings only show up once the Main Quest is done.

Rule out which quests you've done, and ones which you're in the middle of. If your character is not a vampire for instance, you don't have to worry about Vampire greetings. If your character has done the Main Quest, look at the Priority for MQEndgame's GREETINGs (Priority is 12). Once all these are ruled out, this leaves DAClavicusVile. If the character meets Candice before DAClavicusVile is done (Priority is 60), there are three choices, assuming you want your greetings to show up in-game.

1). Simply lower DAClavicusVile's Priority to 5 or below, ONLY if you're positive you're never going to do this quest. Maybe your current character could care less about daedric quests.

2). Finish the quest in-game, or

3). SetStage the entire thing with the console. Again, this works if your character never intends to do this quest.


Once those greetings get ironed out, this leaves the greetings for Bethesda's "Generic" quest (literally, it is called "Generic" in the Quest window), which mostly dispenses random dialog such as "Good day" and "Well met."

As I said before, for each innkeeper that gets looked at, approaching their Greetings goes differently.

> For instance, Foroch, the wood elf who runs Gottshaw Inn, is not involved with any quests. So, just look at any Generic greetings he has. The Generic quest has a Priority of 5. Since Foroch hasn't got any quests associated with him, this means there are no other quests that introduce dialog with Priorities higher than 5.

Therefore, a revolving bounty quest that only involves Foroch can also have a Priority of 5. This Priority rating can get raised, for those who want to see their GREETINGs showing up more often. These greetings will still be competing with Generic though, so moving Priority higher than 5 won't automatically make any added greeting trump those of the Generic quest 100% of the time.

>>Candice Corgine has a bunch of generics she can randomly say, once the DAClavicusVile quest is out of the way. Again, the Priority for Generic is 5. Assuming no other quests are being involved with Candice, 5 can be chosen for her revolving bounty quest. Or, choose a number higher than 5. Maybe 7 or 9 or 15.


In some cases, the NPC will give GREETINGs which are Generic, but specific to a certain race.

>>> Diram Serethi is like this. Assuming MS47 (the Aleswell Invisibility quest) is done, he will begin giving Greetings which are from the GenericDarkElf quest, which has a Priority of 6. Therefore, a bounty quest which involves him should also have a Priority of 6 at the very least.


So, as can be seen from the list above, Foroch is the least demanding, Candice has some issues which need to be addressed, and Malene and Diram are the ones who will require the most tweaking, since both of them are the most-directly involved.

QUEST window, Quest Data tab
2a). Start a new quest. For this lesson I am calling its ID aaaBountyQuest, though in-game I've got names which are more elaborate, such as aaaMossRockCavernQuest. Whatever you name it, this quest won't require a Name in its Name slot, but you can add one for reference. And add the appropriate Priority. GetIsPlayableRace == 1 goes into the Quest Conditions window, as usual.

2b). Start a script which looks like this...

----------------------
scriptname aaaBountyQuestScript

short DoOnce

-----------------

Save using the Save icon, close script. Click OK (closing the quest window) and reopen the quest. Find the script in the scroll-bar, and click OK again.

Substitute the name 'aaaBountyQuestScript' with something more specific, if desired. In my game I've got several of these bounty quests going, each with a name pertaining to its location.


If you're working with Malene, keep reading. If working with any of the others, skip to step 5a.

2c). For Malene, find SQFN in the Editor window (the long, vertical scroll-down box on the left side of the Quest window). SQFN stands for Side Quest FiNished, and it deals with NPCs who greet us after some official Beth quests have been done. ..... So, once Gravefinder's Repose is done, that's when Malene will begin to use Topics and dialog found in SQFN.

2d) Topics Tab
Look at Malene's GREETING, and she only has one GREETING in this window, which is "What can I do for you today?" ... Note the Conditions for this GREETING. One of them is GetStage SQ05 >= 100, meaning she will only say this once SQ05 (Gravefinder's Repose) is done. Malene will say this GREETING randomly, along with about a dozen other Beth-added GREETINGS, such as "What?" and "Good to see you."

We're going to include our own GREETING mixed in with all these others, so that she will only greet with any material we write once in a while. However, there's a small problem. If we include "What can I do for you today?" with our own GREETING, the game will only recognize the official GREETING from Bethesda, ignoring ours entirely.

2e). So Step #2e might seem rather controversial. I'm going to give this GREETING to somebody else, preferably somebody who will never be spoken to in-game, and/or is preferably not involved with any other quests. Just go to the Conditions box, click on the GetIsID function, and change its NPC to some other NPC. I chose Malintus Ancrus, which is the person right below Malene. Although Malintus is involved with some Thieves Guild stuff, my current character is not into TG, so this works for her.

3). Click OK, closing the quest window, and save.

4).

5a). Open up the bounty quest started earlier, starting with the Topics tab. Now to add your own GREETING. I made one which says "You're back, and I've got a problem."

5b). In the Conditions window, add a GetIsId for whomever this pertains to (Malene, Diram, or whomever).

6). Click OK, exiting the Quest window and SAVE.


OBJECT window > Actors > NPC
7a). Time to make an NPC enemy. If you are working with Malene / Moss Rock Cave, quickest method is to edit a generic necromancer, such as NecromancerBossMaleBreton, saving this NPC as a New Form. Likewise, if you're adding this NPC into some lair full of bandits, you can edit an actual bandit, and so on. Edit generic enemies though, not named ones. And do not edit anybody associated with Shivering Isles. SI NPCs will have SE at the front of their ID names.

7b). For the purposes of this lesson, I'm going to call the edited enemy boss aaaNPCBoss as a Base ID. In my actual game, they've got names which are more specific, such as aaaMossRockWitch or aaaHomesteadWarlord, etc.

7c). If this generic enemy has any sort of script, make sure to change the Script scroll-bar to NONE.

8). Make sure 'Respawn' is toggled on, but 'No Low Level Processing' is toggled off.


9a). Go to the Factions tab and double-check the enemy is in the correct faction(s). Necromancers for instance are usually going to be part of two: the NecromancerDungeon and NecromancerFaction factions. If you edited an actual necromancer, these factions will probably, already be chosen. Same goes for bandits, marauders, conjurers, and so on.

In many cases, there's no need to mess with the enemy's AI, but have a look at it anyway. Most of the time, their AI will include two Wander packages, maybe a Sleep or an Eat package. As long as there's a wander package for IsInInterior (rather than some specific dungeon) this is good. As long as the NPC enemy is placed in an interior, he or she will wander around a bit, but won't just leave.

9b). Also, delve into the Stats tab. I prefer to make my NPC a boss-type with lots of health, or I'll offset him / her several levels above my character using the PC Multi toggle.

9c). The Inventory tab can be important too. Usually for generics, this tab will be packed with armor, clothing, weapons, and other items drawn from Leveled Lists. It's a good idea to keep these lists intact. Doing so will ensure the boss will be wearing / carrying different gear every time he/she is encountered.


10). CELL / RENDER windows
Go into the cell where this enemy shall be placed. So for Malene / Moss Rock, the NPC enemy is placed into MossRockCavern. For Candice Corgine, she wants my toon to do something about either Fort Homestead, or Horn Cave. Diram Serethi wants us to do something about Fort Caractacus again, and so on.

Drop the NPC somewhere in this dungeon, preferably somewhere toward the end of it (so that he/she gets encountered near the place's end, or in a boss room). This will ensure that most, if not all, of the location's enemies will have been dealt with, by the time the hand-placed boss gets encountered.

11a).
Give the NPC a Reference ID. I am using aaaNPCBossRef for this lesson, but the actual names in-game can vary according to location. For instance, the necromancer of Moss Rock is called aaaMossRockBossRef. Whichever Ref ID gets chosen, copy this name so it can be conveniently pasted into scripts later.

11b). Click OK, closing all the NPC's panels, and save all work.


OBJECT window > Actors
11c). Find the NPC and right-click > Edit. Open up the NPC's script window. Type the following...
-------------------

scriptname aaaNPCBossScript

short Dead


--------------------------------

Substitute aaaNPCBossScript with whatever name is more desirable. Again, I tend to choose names which match the location of where the boss was placed.

Save the script (click on its Save icon) and close it. Click OK on the NPC's window, closing him or her. SAVE goshdarnit.

11d). Reopen the NPC's info from the Object window again. Find the script just saved in the scroll-bar. Select it, and click OK. Re-open the NPC again.

Now, add to the script, so (in total) it will look like this...

-----------------

scriptname aaaNPCBossScript

short Dead

Begin OnDeath

If (aaaNPCBossRef.Dead == 1)
Set aaaNPCBossRef.Dead to 2

Message "The leader of X has been killed", 36

EndIf
End


-----------------------------------------------------

Where the X is, substitute the name of the cell where the enemy has been placed, and of course, substitute the script's name and/or NPC's reference ID name with whatever was used
.

11e). Use the Save icon to save the script, before closing it.

Note: There are no quest stages being used for this process, which means no pop-up messages will pause the game. So, that on-screen message in the NPC's script is important. It lets the player know the proper NPC has been defeated, and now we have the option to collect a reward. You can opt for a MessageBox instead of a message (just substitute MessageBox instead of Message in the script), but this will pause the game, killing action until OK gets clicked.

Note 2: Technically, we won't need to kill any other NPCs once the one we added is pwned, but this is why it's a good idea to put him or her somewhere near the end of the dungeon.

11f). Click OK, closing the NPC's panel. Save.


12a). QUEST window > Topics tab
Open up the bounty quest again. Find the GREETING made earlier, the one which says "You're back and we've got a problem" or whatever.

Here are the needed Conditions IF working with Malene.

GetIsId NPC: Malene == 1
GetStage SQ05 >= 100
GetQuestVariable Quest: aaaBountyQuest DoOnce == 0.00
GetScriptVariable Reference: aaaNPCBossRef Dead == 0.00


Note that the conditions above specify: (1) Malene is the one who will say "You're back ...", (2) the bounty quest won't begin until SQ05 (Gravefinder's Repose) is basically done. And there are also a couple of variables being thrown into the mix, which will make more sense later.

Here are the needed Conditions if working with Diram Serethi.

GetIsId NPC: DiramSerethi == 1
GetStage MS47 >= 100
GetQuestVariable Quest: aaaBountyQuest DoOnce == 0.00
GetScriptVariable Reference: aaaNPCBossRef Dead == 0.00


MS47 is, of course, the Aleswell Invisibility quest.

If NOT working with either of them (in effect, you're writing your own quest without worrying if some other Bethesda-written quest is involved) here are the conditions which typically go...

GetIsId NPC: X == 1
GetQuestVariable Quest: X DoOnce == 0.00
GetScriptVariable Reference: X, Dead == 0.00


As always, substitute X for the NPC innkeeper's name, the name of the quest, and the Reference ID of the enemy
.

In any case, the innkeeper will only say "You're back, and we've got a problem" if everything is ready to go, and the enemy boss is theoretically alive. I am not including conditions which specify IF that enemy is actually alive, but it's certainly possible to do so. I fear that this can lead to occasional CTDs though, as the game's engine tries to figure whether some enemy who is in some faraway cell is alive or dead. So I did not write my quests this way.

For those who want to experiment, add a GetDead condition into that GREETING, specifying whether the enemy boss is alive or dead.

12b). In the Result Script box type Set aaaNPCBossRef.Dead to 1, substituting the actual Reference ID of the added enemy. This changes the ScriptVariable for that enemy from 0 to 1. Why is this important? It's important because this change ensures that Malene, Diram, Foroch, Candice, or anybody else will potentially give us this GREETING only once per 3 days. As soon as they greet us in this way, they won't do so again, not for 3 days. After 3 days, the variable will reset back to 0, meaning the NPC can potentially say "You're back...." once again.

In a minute, more dialog is going to get added which will allow the quest to move forward. It would be weird if (let's say) every time we speak to them, they try to goad us into going into that same lair, even though we've already accepted, or turned down, their proposal. So this issue is going to be addressed.

12c). Toggle Random on, and click OK, closing the Quest window. Save.

Quest-givers will now say this GREETING sometimes. Not all the time. As said before in this tutorial, they will also give other random GREETINGS like "What?" and "How are you?" .. Therefore, they won't always try to dispense this quest. You can add a second GREETING (or a third, or however many you'd like) if you want to increase the chances of them giving this mission. Just make sure to add all the respective Conditions, Result Scripts, and check "Random" for any additional greetings.

> Conversely, if you do not want there to be any randomness with this quest showing up, only one GREETING is required. Random can stay toggled off, in this case. In my opinion this is not as fun though. wink.gif It also feels a bit forced.

>> For testing purposes, once you're back in-game, it is possible to enter and exit dialog with the quest-giving NPCs over and over, until they say what we've added.

12d). In the Add Topics box, add a new topic which deals further with Malene's wish to have us kill the necromancers of Moss Rock Cavern, or if you're working with Diram, Foroch, or Candice, add dialog which explains that they want us to go into whichever lair is pertinent. I am calling it aaaBountyTopic. Find this topic in the Editor ID box as well, and add it there also.


13). Exit the Quest window by clicking OK, and use the main toolbar to SAVE.


14a). QUEST window > Topics tab > Topic Text slot
Go back to the topic just added (aaaBountyTopic) and add some dialog in which the innkeeper further explains his or her plight. "Yes, they have returned, those rascals, and we need to rid them once again, lest this local business suffers!"

14b). The Topic Text slot can be changed from aaaBountyTopic to "Enemies" or "Have they returned?" or whatever.

14c). Copy all the Conditions from the GREETING added earlier, and paste them into this new topic. So for Malene's quest it'll have the GetStage SQ05 >= 100, the GetIsID, GetQuestVariable SQFN DoOnce == 0, and the GetScriptVariable aaaNPCBossRef == 0.

Diram will have GetStage MS47 >= 100, the GetIsID, and so on.

For any of the others, there'll just be a GetIsID, GetQuestVariable X, DoOnce == 0, and the GetScriptVariable. Paste these into the conditions for the new topic

14d). Change GetScriptVariable aaaNPCBossRef.Dead == 0 to GetScriptVariable aaaNPCBossRef.Dead == 1.

From this moment, the quest can be written so that the innkeeper will simply give the quest to the PC without choice (the player is basically railroaded) or the quest can be written so there is a choice involved. Yes or no.

16). To railroad the player (maybe your character is somebody who always goes for quests) use the Add Topics box to add the next topic. To provide a choice, use the Choices box.

Continue to step 17a if choice is involved.
Continue to step 17b if no choice is involved.


17a). Add a Yes and a No choice into the Choices box, and also into the Editor ID window. If you've already got Yes and No choice topics from other quests, these can be reused. Add dialog and Topic Texts for each choice. Now, if the player chooses Yes, this will obviously lead to the innkeeper giving the quest. "Ah, I knew I could count on you." If No gets chosen, the innkeeper will say something appropriate, maybe even be angry or fearful.

For the Yes choice here are the needed Conditions...

GetIsId NPC: NPC Name == 1.00
GetScriptVariable Reference: aaaNPCBossRef Dead == 1.00


For the No choice, all that's needed is a GetIsId. Also add a Result Script which says Set aaaNPCBossRef.Dead to 0 for the No choice, so the entire quest can potentially get started again.

17b). (Skip this step if you opted for choices instead of railroading). Use the Add Topic box to start a second topic, and also add this into the tall, vertical Editor ID window. Add dialog to this second topic ("They're located deep within X location, and there's a reward of X if you rid them....") and add something into the Topic Text slot. "Enemies" or whatever.

Conditions are similar to what's above....

GetIsId NPC: NPC Name == 1.00
GetScriptVariable Reference: aaaNPCBossRef Dead == 1.00


From this moment, the player has either accepted, turned down, or been forced to take on the quest. Off he or she goes, to rid the enemy boss (or not).


18a). QUEST DATA tab
Time to continue the main script now, and it's going to be yet another timer script. How it'll work: when the timer runs out after 3 days, the entire quest resets itself silently, along with the chosen dungeon itself. The NPC boss also respawns, since his or her Respawns toggle is turned on. Here is what the timer script looks like in total.

------------------------------------
scriptname aaaBountyQuestScript

short DoOnce
short Timer
short StartDay

Begin GameMode

if (Timer == 0)
If (aaaNPCBossRef.Dead >= 2)
Set StartDay to GameDaysPassed
Set Timer to 1
EndIf
Endif

If (Timer == 1)
If ((GameDaysPassed - StartDay) >=3)
Set Timer to 0
set aaaNPCBossRef.Dead to 0

If (aaaNPCBossRef.Dead == 3)
aaaNPCBossRef.MoveTo aaaMarkerRef (edit)


EndIf
EndIf

End

---------------------------

Substitute aaaNPCBossRef with whatever name was chosen for the boss, yadda yadda.

18b). Click the save icon, and if everything saves okay, close the script. Click OK, closing the Quest window.

.... Again, when the NPC boss gets pwned, this causes the timer to begin. Once 3 days have passed, the dungeon respawns all its enemies (including the boss), and the quest will reset. We'll be able to go back to our quest-giver, and potentially receive this entire quest over again! From this moment on, the player has three days to collect the reward (which has not been added yet). If the player does not do so within 3 days, oh well that's tough, because by then the entire quest will have reset itself, including any Reward dialog. blink.gif There are probably ways to avoid this problem (for instance, the timer can get started only after collecting the reward, via dialog). But in most cases, the above process will be sufficient.


19). Open the Quest window. Go back into the Topics tab > GREETING. Give the innkeeper a GREETING which deals with her or him being happy we have killed the enemy boss. "Oh glory, you have done it, and we are saved!"

Do NOT make this GREETING random. We want the innkeeper to just dispense a reward, not beat around the bush with "Hello" or "Good to see you!", when we return from our endeavor.

And here are the needed conditions.

GetScriptVariable Reference: aaaNPCBossRef.Dead == 2.00
GetIsID NPCname == 1.00


20a). Use the Add Topic box to give the innkeeper a topic which will lead to a reward (I usually just call this topic "Reward" in the Topic Text slot). If you already have a Reward topic from other quests, this can be reused.

20b). As always, add this reward topic in the Editor ID box. Once some dialog has been typed for this reward, use its Result Script box to make the innkeeper reward whatever is desired. For this lesson, I've chosen three bottles of beer, 100 gold, and some mutton. laugh.gif I'm also going to add another script which involves the main script's DoOnce (which causes dialog to change during future encounters with that same innkeeper), and bumps the ScriptVariable forward as well, so that there's no chance the NPC will keep giving this lame reward over and over.

Player.AddItem DrinkBeer 3
Player.AddItem Gold001 100
Player.AddItem Mutton 1
Set aaaBountyQuest.DoOnce to 1
Set aaaNPCBossRef.Dead to 3


Make sure to copy the Conditions from the reward GREETING just added....

GetScriptVariable Reference: aaaNPCBossRef Dead == 2
GetIsId NPC: NPCname == 1



21). Click OK, closing the Quest window, and SAVE.


22). QUEST WINDOW > Topics tab
Make another GREETING, and this one can be sort of generic. "So glad you have saved us from those bastards!" or whatever. Conditions for this GREETING will be

GetIsID NPCname == 1.00
GetScriptVariable aaaNPCBossRef.Dead == 3.00


It is also possible to put a GetInFaction condition up there, replacing the GetIsId, and then add the faction of an entire town (such as LeyawiinFaction == 1.00) so that this entire location gets excited when they recognize our toon. Make sure Random is toggled on, so that people will only say this GREETING (mixed along with others Bethesda added) once the quest is done, its reward is given out, but 3 days have not passed yet.

Again, you can test to make sure the quest is still "working" by entering and exiting dialog with the innkeeper (or any other NPCs who are grateful for our character's success) over and over, until the "So glad you have saved us..." greeting shows up. Since the GetScritptVariable is now 3 instead of 2, the innkeeper won't keep rewarding the PC over and over, as dialog gets entered and exited.


23). Make one more GREETING, this one will be the final one. It is optional, and only to add realism. In this GREETing, the innkeeper will be greeting as though he or she's familiar with our past actions (we've basically helped the NPC once or twice by now), but those pesky enemies have returned one more time. "I know you've done so much for us in the past, but can I bend your ear one more time?"

GetIsID NPC: NPCname == 1.00
GetQuestVariable Quesname DoOnce == 1.00
GetScriptVariable aaaNPCBossRef.Dead == 0.00


Again, Set aaaNPCBossRef.Dead to 1 goes n the Result Script box, and make sure Random gets toggled.


24). The same secondary topic which was used just after that very first GREETING (aaaBountyTopic aka "Enemies") can be added into the Add Topic box, but the quest-giver (whether it's Malene or somebody else) won't need to explain in as much detail what comes next.

Copy all the Conditions from the final GREETING, and paste them into this topic. Make sure to change the ScriptVariable to 1 though. So now, it'll look like....

GetIsID NPC: NPCname == 1.00
GetQuestVariable Quest: Questname DoOnce == 1.00
GetScriptVariable aaaNPCBossRef.Dead == 1.00


25). Add the same Topic or Choices which got added before, starting from step 16. No additional dialog needs to get added, and Conditions can be exactly the same for all this dialog, and also for the Reward part too.

26). Exit the Construction Set, saving all work. Make sure to make a backup copy of the .esp too, since it involved so much detail. goodjob.gif

---------------

Once this respawning bounty quest is set up, we can potentially add other NPCs who give out quests, not just Foroch or Candice or Malene or Diram. If you're trying to use the same quest for multiple people, it's also possible to add to the main script. Follow the same steps found on Page 2, post 30 of this thread. Not every step in that post will get repeated of course, so you'll need to use some judgement to get this all working properly, and also do lots of playtesting.

This post has been edited by Renee: Mar 31 2019, 02:18 AM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
mALX
post Jan 14 2019, 07:56 PM
Post #42


Ancient
Group Icon
Joined: 14-March 10
From: Cyrodiil, the Wastelands, and BFE TN




This is an Awesome thread, Renee!!!


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Jan 19 2019, 08:25 PM
Post #43


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Awesome, thanks so much. smile.gif

------------------------------------------------

Respawning Bounty Quests, Game: TES V: Skyrim

Note: Currently the first 11 steps deal with my learning process. I wanted to make a repeatable bounty quest for Skyrim, but my version works differently than what Beth wrote. The way I've got it, certain people will occasionally want us to go kill some bandit boss who's been terrorizing locally, but they won't ALWAYS want us to do this. It's not the same as going into Bannered Mare, where Hulda always gives us a flier, advertising some local menace.

Anyway, to skip the "research" part of this lesson, go to step 12.



1). First step is open up the Creation Kit. Like, duh.

I am going to be focusing on Lucan Valerian, proprietor of Riverwood Trader. The idea behind this quest is that Lucan is fed up with the lowlifes of Embershard Mine ekeing out a living right beside the respectable town of Riverwood. Lucan recognizes my character for being an adventurer, especially after we help him get his stupid Golden Claw back. In fact, this bounty quest won't even begin until the Golden Claw is done. This is the way I decided to write what's below. With different NPCs (innkeepers, smiths, etc.) the process will be a little different every time. It all starts with figuring out what quests (if any) get associated with each one.

As I did in Oblivion, I must first have a look at all the quests involved with Lucan, so I can see all the dialog he can possibly say, especially Hellos and Greetings. I want to make sure that the dialog will match up to these quests and their Priority ratings, so that Lucan won't just start this quest every time his shop gets entered, and dialog is initiated.


2). OBJECT window > Actors > Imperial Race > Male.
Find LucanValerius. Now right-click on him and left-click "Use Info." The Use Report panel shows up, and it includes two windows. The top one is the one I'm interested in.

At first glance, this top window seems to include everything Lucan is involved in, quest-wise. It actually does not include everything though, as I'll explain in a minute. Still, even though everything can't be seen here, the Use Report panel is still a good place to start. Immediately, I can see a slew of INFO topics that get associated with Lucan.

Go ahead and left-click on a few of these INFOs, just to see what shows up. Mostly, these are just fragments of the actual quests.


3). Scroll the top window down until you see QUST. Obviously, this stands for Quest. Look at every quest Lucan's got listed in this window. Here they all are:

MS13Intro
DialogueRiverwood_Revised
MS13LucanCamillaScene
MS13
DialogueRiverwoodDryGoodsScene1


Note that MS13 pops up several times, and this is Lucan Valerian's shining moment in the game, since it is the Golden Claw quest.

Double left-click on each QUST topic, and see what pops* up. Every time we double-click on one of these topics, a quest panel will open up, which is mighty convenient.

Since I will be writing the bounty quest so that it doesn't begin until MS13 is done, I'm not going to worry about MS13's Priority. But I will go through those five quests. It is important to research each of these, so that my own quest will work with the same randomness that the Oblivion version did.


a}. Double-left click on MS13Intro, and look at its Player Dialog tab. This quest deals with starting the Golden Claw, and its Priority is 0. Not only that, but Lucan doesn't have any dialog yet. Nothing to worry about, since I'm not going to write my quest for pre-MS13, or during any portion of MS13.

Close the MS13Intro panel.

b}. DialogueRiverwood_Revised is the first quest I might be dealing with, since it stays active after MS13 is done. Its Priority is 30. This quest, and all its dialog, remains active throughout the game. A lot of the dialog in DialogueRiverwood_Revised has to do with generic things Riverwood residents say, so it's definitely important to check further.

c}. MS13DialogueLucanCamillaScene: open it up, and look at its Player Dialogue tab. This is a short quest which causes Lucan and his wife to begin arguing about their claw, when we first walk in their shop. Its Priority is 60, and there's nothing under the Player Diaglogue tab, (everything is in the Scenes tab). Let's move on.

d}. Open up MS13 itself. This one deals with the rest of the Golden Claw quest: going up to Bleak Falls, retrieving the claw, returning it to Lucan (or not), etc. Its Priority is also 60. Keep moving along.

e}. DialogueRiverwoodDryGoodsScene1 also has a Priority of 30. However, it doesn't have any dialog at all. It only includes a "Scene", which can be found under the Scenes tab. Scenes involve two NPCs, when they speak to each other back and forth. This quest has nothing clickable under Player Dialogue, so I'm closing this panel out.


... Hmm. So far, I haven't found any of Lucan's more famous post-MS13 GREETINGs. Where, for instance, is "Thanks so much for taking care of those thieves...." ? I haven't seen this dialog yet, and I must find it. Because the dialog in my quest is going to work alongside the dialog of "Thanks so much for taking care of those thieves...."


4).
Close the Use Report panel. It seems like a bunch of time just got wasted, but not really. It's important to find everything an NPC says, if he/she is to be included in the bounty quest. If you don't find the things you'd normally expect, this just means it's important to keep digging, until these things are found.


5). OBJECT window > Characters > Quest.
Scroll down to the MS13 area. Ah-ha! There's an additional quest involving MS13, which is called MS13Fin. MS13Fin deals with the aftermath of the Golden Claw quest.

Double left-click on MS13Fin. I'm going to click from tab to tab, across the top of this quest's window. Start with the Quest Data tab, which should be open by default. Notice that it's got a Priority of 60.


6a). Now go to Quest Stages tab. Notice there no Quest Stages.

6b). Skip Quest Objectives because it does not handle dialog at all. Same goes with Quest Aliases, skip that one too.

6c). The two tabs which often handle dialog: Dialogue Views and Player Dialogue, also have nothing.

You can keep clicking other tabs, just to see if there's anything under there, but it's not until I got to the Misc tab that something shows up. Finally! All the more prominent post-MS13 Greetings are right here, and there are four of them, though they aren't called GREETINGs anymore, like we'd see in the Construction Set or the GECK, they are now called Hellos. Two of these Hellos are said by Lucan, and two are said by Camilla, therefore we can immediately rule Camilla's Hellos out.

7).
Double left-click on one of Lucan's Hellos. Note that 'Random' is not toggled. Oddly, once we're back in the game, he will say his Hellos in a random fashion, when greeted several times in a row (as I did when playtesting respawning bounty quests for TES IV: Oblivion). Why is this?

>>> From this point, if you'd like to know how everything works in detail (how the game involves Lucan in various dialogue Hellos), click the Spoiler tag below, and go to Step 8. If you'd just like to continue writing the quest, go to Step 12.




12).
Open up MS13Fin > Misc tab again (if it's not already open). Now, open up Lucan's "Thank you" greeting, and toggle Random on. Click OK. Now open up the topic just below it, which is "Thank you for bringing the claw back." Toggle random on for this one, too.

13). Change Hours until reset from 0.50 to 0.00 for both these Hellos. This is not 100% necessary, but it increases the chance of my own Hello, which will get written soon, appearing.

From this point on, you can either write your quest into MS13Fin, or start your own quest. Although I prefer to start my own, right now I'm not good enough yet with the CK to link multiple quests, so I'll hitchhike my material onto MS13Fin.


14). In the big Info window, right-click > New. Write up Lucan's Response Text, which will be something like "Hey, you're that guy who helped us before. We've got a small problem now. Care to have a listen?"

15a). Click OK. The Topic Info panel will show up, and it should include the "Hey, you're that guy..." text just typed.

15b). Toggle Random on. Leave Hours until reset at 0.00.

15c). In the Conditions box, right-click > New. GetIsID is what shows up by default, so choose LucanValerius for this condition.

15d). Toggle Force Subtitle on.

Time to make some voice files, as was done for the Skyrim Quest Tutorial. Again, an actual voice is not needed in-game. If you already know how to do this from that previous lesson, skip to Step 16.

15e). Double left-click the dialog just added in the Response Text window, so the Edit Response panel shows up again. There should be a Voice Type listed in the bottom window which corresponds to the NPC who says this dialog (MaleNord, for instance).

15f). Highlight this Voice Type. Now click the Record button. If you have a microphone and want to record your, or someone else's voice, now's the time. If not, just press Record and read the text which just got written. Press Done.

15g). Toggle the From WAV ON, and press Generate Lip File.

15h). Click the Save button. If a warning shows up saying this file already exists, it's because there is already a MaleNord (or whatever) file saved. There is a choice to overwrite any previous recording made, basically.


16). Click OK, OK, and OK, closing all the quest windows. SAVE by pushing the main toolbar's save button. Reopen the Quest now.

The new Hello is now in the game, and if I were to go back into Riverwood to greet Lucan, there's now a 50/50 chance he'll say "Thanks for taking care of those thieves," or whatever just got written. Thing is, he will only greet in these two ways, and he won't give any other Hellos he was formerly using. If you are fine with this, move on to Step 18. If you want to further reduce the chances of the new Hello showing up (so that he may only give this quest much more rarely, maybe once or twice a year), go to 17.


17a). To decrease the chance of Lucan saying the new Hello, simply lower MS13Fin's Priority to 30. This will cause Lucan to have five extra Hellos in his arsenal from the DialogueRiverwood_Revised quest. An occasional generic Hello from DialogueGeneric may also sneak in there. To increase our Hello showing up from this point (while keeping all the vanilla Hellos), simply add another greeting into MS13Fin's Misc tab.

17b). Optional: Go into DialogueRiverwood's Hellos, and make these random too. Hours Until Reset can stay off, or you can turn them on for each Hello.

** Now, the main difference between the respawning bounty quests for Oblivion, compared to these ones in Skyrim, is that the Oblivion versions worked solely with script and quest variables. In Skyrim, I will be using quest stages, along with some of the other things the CK likes to see, such as Properties and Aliases. There probably is a way to avoid using stages, instead using variables like Oblivion does (EDIT, 2024: certainly there is! But back in 2019 I didn't know how). Bethesda themselves prefer stages for their own bounty quests though, so that's the way I learned.


18). OBJECT window > Actors .
Right-click > New. I made an NPC enemy, and put him somewhere in the center of Embershard Mine. I prefer to put the guy near where those jail cells are, this way he gets encountered roughly half-way through the cave. When you make your enemy, you can follow any steps you've found in other tutorials. Template Data can get used for instance, to make things more convenient. Just make sure the enemy winds up in the BanditFaction.

19). Toggle "Respawn" and "Unique" on for this enemy. Click OK. SAVE.


20a). Open MS13Fin again > Quest Data tab. Toggle "Allow repeated stages" on.

20b). Also, where the "Type" scroll-bar is, change this to Miscellaneous.

20c). Object Window Filter: type Misc\Riverwood\


21). Quest Stages tab.
Go ahead and make seven stages here. Bethesda only uses three, and you don't have to use seven, but seven is what I wound up with. My stages are 0, 10, 15, 20, 30, 50, and 100. For convenience, I recommend you use these numbers too.

21a). The first stage, of course, is 0. It is more like a pre-stage, actually. Toggle "Start Up Stage" on. Now, right-click > New into the Log Entry area, but don't add any text. It should say EMPTY in this box. In the Papyrus Fragment tab's box, you can type a comment saying ;Pre-quest, just for reference. Make sure that semi-colon goes before any comment added into this box, this'll prevent the CK from trying to read these comments, then screaming errors at us!

21b). Do the same things for Stage 10, so EMPTY shows up in the Log Entry box. Stage 10 shall deal with Lucan greeting the PC, pitching his idea. Another comment can be added into the Papyrus Fragment box, such as ;Lucan greets player.

21c). Repeat all of this for the next stage. I'm up to 15, by now. 15 shall be an intermediate stage, during which Lucan has spoken about his concern, and we've got a choice to say "yes" or "no" to the idea of invading Embershard. Stage 15 is optional, though. If your own character always takes on quests, never turns them down, don't worry about making a "no" choice here.

21d). Stage 20 now. If "yes" is chosen, the quest will bump to 20. If not, it'll just stay at 15 if you want it that way. The neat thing is, this quest won't even appear in the journal if "no" gets chosen. Do all the same things for this stage (EMPTY, and a semi-colon comment).

21e). Stage 30 is the first stage which adds some scripts, but for now, just do the same as what's been done for those four other stages, so that there's EMPTY and comment. I am putting ;NPC Boss gets pwned!


22a). RENDER window.
Go find the Embershard Enemy, and give him or her a Reference ID.

22b). Click Edit Base from the NPC's reference panel. In the Papyrus Scripts box, right-click > Add Script. Now double-click on [New Script]. Give the script a unique name (I named it aaaEmbershardEnemyScript), and leave Extends: ObjectReference alone. Click OK. A blue + symbol should show up in the Script Name box.

22b). Right-click on the script, and then left-click Edit Source. You should be seeing this....

Scriptname aaaEmbershardEnemyScript extends ObjectReference

22c). Close the script. Now highlight it, and press Properties. Press Add Property. Use the Type scroll bar to find Quest.

For "Name", just put the name of the quest. It doesn't have to be called MS13Fin, although if MS13Fin is typed here, this will cause the Property Name to be the same as the quest's actual name. But I began calling it aaaEmbershardBountyQuest for convenience, since anything starting with "aaa" will usually show up at or near the top of any list.

22d). Click OK. Wait a moment until a symbol shows up. You have just made a Property! It should have the quest's name, and under Type it should say Quest. If MS13Fin is the name which was used, this will auto-fill. Go to step 22f, if so. If the property was named anything else, continue to 22e.

22e). Highlight the Property and press.the Edit Value button. Since this property is a quest, all of the quests listed in the game show up. To link this new Property with MS13Fin, go ahead and find MS13Fin in the Pick Object scroll-bar.

Note: It really helps to read about Skyrim's use of Properties, Aliases, and Fragments, if you haven't done so already. Here is a good place to start. If you've already done some modding in the CS or GECK (which don't use properties or aliases, and don't use script fragments in the same was as the CK does) using them in the CK may seem like extra, unnecessary steps. But these things are really here to make our lives easier in the long run, especially when it comes to writing some really complicated scripts.

Click OK, closing the Add Script Properties panel.

22f). Now right-click on the blue & yellow icon and select Edit Source. This opens up the Script panel (just like the script panel for earlier programs), and here is what should show up...

-----------------
Scriptname aaaEmbershardEnemyScript extends ObjectReference

Quest Property aaaEmbershardBountyQuest Auto


--------------------

Note: The Quest Property will be MS13Fin for those who wrote it that way).

---------------

22g). Write the rest of this script manually, so in total it'll look like this....

----------------
Scriptname aaaEmbershardEnemyScript extends ObjectReference

Quest Property aaaEmbershardBountyQuest Auto

Event OnDeath (Actor Killer)
aaaEmbershardBountyQuest.SetStage (30)

EndEvent

------------------------------------

22h). From the script panel's tool-bar, click on File > Save (or just ctrl + s) to see if everything got typed okay. Close the script window, and click OK on the enemy NPC's window, closing him or her out as well.


23). Open MS13Fin > Misc tab again. Find the Hello added earlier.

23a). There should already be a GetIsID == Lucan there. Now add the following conditions....

GetStage Quest: MS13Fin < 10.00
IsDead aaaEmbershardEnemy == 0.00


That second condition is obviously a check to make sure the enemy added to Embershard is alive. If he/she is not (if he/she has not respawned along with Embershard itself), Lucan won't be able to say the Hello we've added at all. To find the enemy, click on the scroll-bar next to where it says "Run on" and find him or her in this list. Click the Select button, find the Cell and the enemy's Reference ID, and click OK. Result should look like this...

S GetStage Quest: MS13Fin < 10.00 AND
R IsDead aaaEmbershardEnemy == 0.00


R = Reference.

23b). In the "End: Papyrus Fragments" box (located bottom-middle) type GetOwningQuest().SetStage (10). This way, Lucan will keep saying random Hellos until he says the one we wrote. Once he says our material, the quest bumps forward to 10, and he won't say this Hello anymore, not until the entire quest resets itself.


24). Dialogue Views or Player Dialogue tab.
Go ahead and write up all the rest of the dialog . Five different branches are needed, which shall include topics and infos as follows....

> Lucan informs the player about the menaces inside Embershard Mine {Stage 10. Type GetOwningQuest().SetStage (15) into the End: Papyrus Fragment box}.

>> We answer Yes or No to Lucan's proposal (Stage 15. Type GetOwningQuest().SetStage (20) into the End : Papyrus Fragment box for a "Yes" response. If "No" gets chosen, simply leave the quest at 15, and toggle Goodbye on, if desired).

>>> Lucan says some follow-up info: where Embershard can be found, how we'll get paid, and so on. (Stage 20, a SetStage does not occur here, since killing the enemy will do this).

>>>> We return to Lucan, after Embershard has been cleared, (its top enemy is dead. Stage 30.)

>>>>> Lucan gives a note, which can be taken to Proventus Avenicci, Whiterun Jarl's steward, to get paid. (Stage 30. Don't worry about adding scripts yet, these get added in a few). Another option is to add your own steward, in fact this might be the better option for those who are doing the Civil War on the Stormcloaks' side, since I'm pretty sure Proventius disappears after the sack of Whiterun.

>>>>>> We get our money! (Stage 50. Type GetOwningQuest().SetStage (100) into the End: Papyrus Fragment box).


I won't go into detail here, but write up your own dialog for each of those five branches.


25). Quest Objectives tab.
By now, all dialog has been written, and quest stages should all be set up. Time to add some quest objectives. Just like in Fallout 3, Objectives are what cause onscreen messages to be displayed when important moments get passed during the quest.

I'm not going into full detail here, since this info is already in the Skyrim Quest Tutorial found on Page 2 of this thread, but I wound up with three Objectives: one which tells the player to "Kill the leader of Fort Embershard", one for "Return to Lucan" and one for "Head to Dragonsreach for a reward." These Objectives get displayed and completed as follows....

"Kill..." (Stage 20, Stage 30)
"Return.." (Stage 30, Stage 50)
"Head to.." (Stg 50, Stage 100)


26a). OBJECT window > Items > Books.
Find a note, and Duplicate it. I am calling this note aaaRewardNote. Erase this duplicate's text, and type something pertinent. "Ye, bearer of this note, who has't defeated the abominable enemies of Embershard Mine, shalt become dispenseda 100 gold...." etc.

My idea here: Lucan is pleased that we've killed the leader of Embershard, but he can't afford to pay us. He's got a business after all, and cannot (in roleplay terms) afford the downfall paying our character hundreds of gold would cause. See? So what he does is gives a note, explaining that we've taken care of Embershard Mine. This note gets taken to Dragonsreach, just like we'd do during any of Bethesda's bounty quests. Difference is, we're going to NEED this note if we want to get paid!

26b). Click OK, closing the note.

And now, we're going to use the Quest Aliases tab to add three different aliases: one for the Player, one for the quest-giver (Lucan), and one for the note.


27a). Aliases tab.
Always start with the Player. Right-click into the giant Alias window, and select New Reference Alias . This opens up the Reference Alias tab. Alias Name shall simply be Player (type Player in this slot). Now click on the Unique Actor toggle, and find Player in the scroll-bar. Click OK.

Note: Chances are the page is too big, and the OK button cannot be seen! If this is the case, just click into the Alias Name slot (where Player was typed earlier), and press Enter or Return on your keyboard.

27b). Next, to tackle Lucan, who is the one who gives the note. ALWAYS add the giver of any item first into the Quest Alias window, before the item itself gets added. Type QuestStarter into the Alias Name slot. Click the Unique Actor toggle on, and find LucanValerius in the scroll-bar.

27c). Click OK, or do the Alias Name slot thing, and press Enter.

27d). Do the same for the note. Type Note into the Alias Name slot.

27e). Toggle "Create Reference to Object" on. Find aaaRewardNote (or whatever you called it) in the scroll-bar. Leave "Level" as Easy (always leave it on Easy). Now, for Create, leave the toggle on "At". And find QuestStarter in the scroll-bar. Altogether, this should read "Create Reference to Object: aaaRewardNote, Level: Easy At QuestStarter.

Tip: Toggle Quest Object on to make absolutely sure this note will never get misplaced. Quest Object is on the top-right of this panel. Because remember: if we don't have the note, we won't get paid!

27f). Click OK.... or Enter.


28a). Dialogue Views or Player Dialogue tab.
Go back to whatever dialog got written for Lucan after the boss of Embershard was dealt with.

28b). In the Begin: Papyrus Fragment box, type SetObjectiveCompleted (30).

28c). In the End: Papyrus Fragment box, type GetOwningQuest().SetStage(50)

28d). Now find whatever dialog got written for Stage 50, when Proventus Avenicci or whomever is supposed to dispense payment. Here are the Conditions for Stage 50...

GetItemCount 'aaaRewardNote' == 1 And
GetStage Quest: 'MS13Fin' == 50 And
GetIsID Actor: 'ProventusAvenicci' == 1


Make sure that "Target" is selected for GetItemCount, rather than Subject.

28e). In the End: Papyrus Fragment box, type GetOwningQuest().SetStage (100) if this hasn't been added yet.


29a). Quest Stages tab > Stage 50 > Papyrus Fragment box. Click on the Properties button.

29b). After the panel pops up, click the Add Property button.

29c). In the Type scroll-bar, look for Book.

29d). In the Name slot, type the name of the note. Click OK.

29e). Click on the Property for the book. In the Pick Object scroll-down, look for aaaRewardNote.

29f). Click OK, closing the Properties for script panel.

29g). In the Papyrus Fragment box, type Game.GetPlayer().AddItem (aaaRewardNote, 1) .

30a). Now for the final stage, which I called 100 up above. In the Papyrus Fragment box, type Game.GetPlayer().RemoveItem (Note, 1)

Now to get paid.

30b). Click the Properties button. Click the Add Property button. For the Type scroll-bar, look for MiscObject. In the Name slot, type Gold001. Click OK, and click OK.

30c). In the Papyrus Fragment box, type Game.GetPlayer().AddItem (Gold001, X) , with "X" being whatever you think is fair. Also type...

stop()

..........That is it! "Stop()" is what shuts down the quest, after payment is received. Do NOT toggle Complete Quest on though. We want this quest to never get completed, right? We want it to possibly return; that's the whole idea here.

So now the quest is good as a one-time affair. Here's how to make sure the entire thing respawns.


31). Quest Data tab
Find the Event scroll-bar, and choose Change Location Event. Make sure "Allow Repeated Stages" is on, if it's not already toggled.

Notice how "Start Game Enabled" is now grayed-out, and there is no longer an option to toggle this on or off. This is fine. Click OK, closing the Quest window.

32). OBJECT window > Character > SM Event Node.
Right-click on "Change Location Event" in the the right window, and select Edit. SM stands for Story Manager, by the way.

33). You might see several nodes made for other quests, or you might just see a large panel which is mostly empty. Right-click on the very top choice, which is "Stacked Event Node: Change Location Event". Select New Quest Node. A new choice called "Stacked Quest Node" should be at the very bottom of this window. Scroll down (if needed) and find it.

34). Right-click on Stacked Quest Node and choose Add Quests. Find MS13Fin. Click OK.

Now comes the tricky part. The SM Event Node page is similar to the Quest Aliases page, in the sense that it's too big for some screens. Bethesda actually put OK in the top-right corner this time, yet you might not be able to see the bottom of the panel. rolleyes.gif And we'll need to be working down there. If you can't see the bottom, you'll possibly need to minimize the entire Creation Kit from its tool bar. Now right-click on your desktop, and change your Screen Resolution setting to something smaller, or rotate the entire screen to Portrait instead of Landscape. You will need to adapt to working sideways for a few minutes!

35). Highlight the Node which just got created (not the quest below it). Now look down the page (or to the right, if you had to rotate). In the ID slot, type in aaaMS13FinQuestNode. Toggle "Do all before repeating" on. And toggle "Shares Event" on.

Once all this is done, the screen can be rotated back to Landscape.

36a). Right-click > New in the Node Conditions box, and add the two conditions...

GetInCurrentLoc Location: "RiverwoodLucanDryGoodsLocation" == 1.00 And
GetDead NONE == 0.00


36b). For the first condition, change Subject to Player, meaning that the Player/character needs to be in Riverwood Trader for the quest to begin.

36 c). For the second condition it says NONE, but there is some hidden information within this one that cannot be seen. Double left-click on this condition, and in its scroll-bar (where it says Subject) change this to Reference. Now push the Select button, and use the Cell scroll-bar to find EmbershardMine01. Find the enemy's Reference ID, and click OK.

37) Click OK, closing the SM Event Node panel.

38). Close Creation Kit, saving all work. Don't forget to create or update the SEQ file (see SEQ File Creation tutorail on Page 2 of this thread).


And that should be all. If you have Wrye Bash (or some mod which modifies cell resets) use a minimal number of days when playtesting this quest, to make sure it begins, runs through all its stages, shuts down, and starts all over again. When the quest shuts down, we can test to make sure it's shut down by spam-greeting Lucan several times. The opening Hello which begins the entire quest should not be showing up for X number of days.

This post has been edited by Renee: Mar 4 2024, 07:14 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post May 15 2019, 12:53 AM
Post #44


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Setting up a gamepad controller Game: Elder Scrolls Online

This is for those gamers who prefer gamepad controllers, like myself. I am going to teach how to do some rather basic things, such as change what each button does, how to invert X and Y axises, and so on. Figuring this stuff out is a cinch in many other games. ESO on the other hand requires some background knowledge.

In some games (like Skyrim or Fallout 3) getting a controller to work is as easy as going into the menu, then toggling a button on. Elder Scrolls Online is trickier, and more difficult to figure out. But overall, the experience is more rewarding because there are SO MANY options we can configure for ESO.

So this assumes that you've got a mouse and keyboard, but also a controller which is specifically made for PC gaming. This controller can apparently be Xbox or Playstation styled, or it can be something which is more customized. I myself only use Xbox-style controllers, and Microsoft models at that, but I also use mouse & keys for some tasks.

Required: Elder Scrolls Online Plus. Buying this upgrade will open up some new areas of the menus. ESO+ is therefore necessary for the rest of these steps to work properly.


1). Get into the game, so that you are not in its opening menu, you are in the actual game. This way, everything can get tested in real-time.

2). Controller should be on. Now, press the Esc key on the keyboard. Press Settings. And press Gameplay. About three-quarters down the menu page is the GAMEPAD section. Turn this on.

Once the gamepad is on, notice the menu changes to one which is more 'consolized.' wink.gif

Another feature: there are now TWO main menus which can be pulled up -- one can be gotten from the keyboard, the other from the controller itself. These are the sort of menus that allow us to change options, look for Help, and so on. Though these two menu sets might seem like they're the same at first, they actually have quite a lot of differences between them.

Now. If you are like me, you'll want the option to switch the X/Y Axis, which affects the "look around" feature normally assigned to the right mushroom stick. Normally, if the right stick is pushed forward (away from the player), the character looks upward. If the stick is pushed back (toward the player), the character looks down. For those who want to invert this, go to step 3. If not, go to step 4.

3). Press the Start button on the controller. Use the left mushroom stick to scroll down to OPTIONS. Select Camera, and INVERT Y is the very top option.


4). Zenimax gives us a total of three templates, each featuring a different set button assignments. But if you'd like to make your OWN button assignments, here is how to do that.

Press the ESC key. Again, this key works in a similar way as the START key on a controller, except ESC opens up different options.

5). Select CONTROLS. This opens up a menu with four columns, which Zenimax calls Binds.

The First Bind deals with the keyboard itself. All the selections in this column deal with keyboard and mouse assignments.

The Second Bind
deals with a lot of the in-game button assignments which get used during gameplay moments, such as pulling levers, choosing to accept another player into your party, and so on. For the most part I do not mess with the Second Bind at all.

The Third Bind handles the bulk of controller button assignments, most of which correspond to keyboard and mouse buttons / functions. This is the Bind which most changes can get made which affect the actual sandbox gameplay, outside of menu surfing. Attack, Jump, Sheathe/Unsheathe Weapon, and so on.

The Fourth Bind never gets used, at least in my game. I assume it's there for some sort of unknown function.


So, since the keyboard stuff should already be set up, I am going to show how to assign stuff to the controller.

Tip: Use the mouse-wheel to scroll the Binds menu up and down, it just works more efficiently than the controller does. In general, Mouse + Keys should be used at all times, except when actually choosing which buttons, bumpers, toggles, and analog sticks are going to correspond to keyboard / mouse buttons.


6). Start with the very top, which deals with Movement. By default, Move Forward is already set as "Left Stick Up," which is how most gamers prefer it to be set. Suppose you want to change this though? Doing so is easy as using the mouse to left-click on this selection, and then moving the left stick (or right stick, for southpaws) in the direction you'd prefer. In the BINDINGS window, it then shows whatever key, or button, or bumper, or trigger, has been selected.

Frequently, you may notice that some function has already been assigned to a button, bumper, trigger, or stick. If this is true, you'll be erasing this function if you choose to Accept, and the menu will ask to confirm if you really want to make this choice, or not.

7). Use the mouse to left-click on Bind.

From here, literally just scroll down the entire page, selecting whatever feature (such as Jump) with whatever button, trigger, stick (etc.) is preferred.

Elder Scrolls Online allows us to select "While Held" commands, too. So for instance, I've got my game set so that if I hold my right analog stick down (instead of briefly pressing it) this will cause the HUD to vanish. smile.gif If I press this stick briefly, this is what changes from First to Third Person.

We can even sometimes select a combination of buttons. For instance, I just clicked on Autorun, pressed & held the B button, and then pressed the right bumper. Binded this selection. So now my character will run automatically (and keep running) if I press B + RB back in game mode.

8). When done making assignments, always press ESC on the keyboard. This will lock these assignments in.


Troubleshooting: For me, the Bind menu has a tendency to not register certain buttons. For instance, I'd try to set A for Attack, but the selection onscreen would merely flash very quickly, without the key getting set. To fix this, I used Xpadder. Made a New profile, but did not set any buttons, bumpers, triggers, or sticks at all. Selected Save As, and then named the profile Blank. Literally, the Xpadder has not had anything changed, and everything is blank. This, for some reason, worked for me.

This post has been edited by Renee: Mar 8 2024, 06:18 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
mALX
post May 15 2019, 01:55 AM
Post #45


Ancient
Group Icon
Joined: 14-March 10
From: Cyrodiil, the Wastelands, and BFE TN



Awesome! You got it working!

By the way; you can set a key on your keyboard to toggle your character to always run; or always walk when toggled. I use the "7" key on my NumPad on the right side of my keyboard as a "walk or run" toggle. That frees up those two keys on your controller for something else.

That run is a kind of "Jogging" run; not a high speed run you might do if you are running for your life. If your character needs to get out of danger; you will want to sprint as fast as you can to get away:

To sprint (no matter which way that toggle is set, run or walk) = just hold down the LEFT shift key while walking or jogging; and your character will sprint as long as your stamina lasts.

Sprinting can't be toggled on or off; you have to actually hold it down = so if you want sprinting set to your controller; find it in the "Controls" list for the controller and set it where you want it.








This post has been edited by mALX: May 15 2019, 02:06 AM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post May 15 2019, 01:05 PM
Post #46


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Awesome, thanks. I have noticed there's TONS of stuff which can be set up. Options, options, options. I like the way there are separate HUDs for PC and consolized versions. Everyone is happy, in theory. smile.gif

I think I'll let the controller handle most "immediate" functions (such as action / combat / hotkeys) but the keyboard will handle all the background functions, such as the quest window, Crown Store and so on.



--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Jun 19 2019, 02:28 AM
Post #47


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Game: Fallout 3, How to use Zone Triggers to set quest stages.

Video example: https://www.youtube.com/watch?v=QaMtpvrEG9E

TES IV: Oblivion uses X-markers to bump stages, set variables, and so on. Fallout 3 does use X-markers for some functions, but it also uses what are called zone triggers, or simply "triggers," to setstage quests and perform other functions, as we pass through them. "Pass THROUGH them" is the actual idea here. For an X-marker to work, the character (or NPC) must walk near the X-marker for it to do its job. With Fallout's triggers, we are going to walk through these areas instead.

A quick example from Oblivion's day was during the Unfriendly Competition quest, when the player is supposed to be sneaking a listen to a conversation between Agamir and Thoronir. If we weren't close enough to the X-marker which activates during this quest, the conversation would simply not happen, leading to dozens of "Broken" accusations from various gamers. If a giant trigger zone were used instead, chances are there wouldn't be as many problems.

Zone triggers appear red in the GECK but invisible in the game, and are also used in Skyrim.

CELL window

1). Go into the cell or wilderness area where the trigger is to be added. An example is right outside of Megaton.

2). On the main toolbar, find the T button. It looks like a child's block with a T in it, and is located to the right of the NavMesh button (the button with red scribbles in it). Click the T button. Sometimes it takes a couple of clicks before the button gets pushed inward.

3). In the Render window, left-click somewhere on the ground, and drag upon it. It helps if the area being clicked does not have a bunch of stuff on it (items, Markers, etc.). Try not to click on anything else but the ground, or (if inside a cell) the floor itself.

4). At first, nothing might happen. Maybe a red 2-dimensional rectangle will show up, but maybe not.

Let go of the mouse button. Now move the mouse upwards (away from you) without touching or holding any buttons. If done correctly, there should be a transparent red cube which morphs from two dimensions to three. The mouse can be moved away or toward you, to make the cube shorter or taller. It should be tall enough for a person to walk through though, for best results. If the cube is placed in front of a door for instance, it should be made so that it's taller than a person. It should also be placed across the entire door, which ensures the character will definitely walk through it.

This red cube will be what activates the next stage of the quest. Or it can be used to toggle an objective, set a variable, and so on. Again, the character is going to need to walk THROUGH this cube, so if it's not big enough, or if it's not in the right area, chances are it might need to be redrawn or dragged. These red cubes can be tricky to draw, so it can take some messing around.

5). Anyway, double left-click on the red cube. If done right, the Activator panel will pop up. Note that the game calls the cube "Gas Valve" for some reason. Note that the ID is part of a scroll-bar too. Every trigger zone in the game will be include in this ID slot.

Tips: Sometimes it's difficult not to select some other object (or a wall) which is right behind the cube. Simply click OK when this happens, and try again to position the Render window so that the cube gets selected. It might help to hold the left Shift key while moving the mouse around (don't press or hold any mouse buttons down while doing this). And if things really get aggravating, Hold Z while pulling the entire cube down! Once the cube is below the ground (or floor) it's now in the void, where it's easier to select the cube itself.

6). Click on the New toggle (next to the ID panel). This closes the scroll-bar, so a new ID can be typed in. "Name" is not important, and can be deleted, even.

7). If there is any Script on this Activator, get rid of it by moving the scroll-bar to NONE. Click OK. And Save.

Note: After closing the Activator panel, notice there are a bunch of colored lines & arrows in the cube. Now it can be moved, and also manipulated larger or smaller, with greater ease. If the cube was moved out into the void, time to move it back in place, back to where a character will definitely walk through it.

An easier way to change the cube's dimensions than trying to drag upon it is to double left-click on it, select the Primitive tab. From here, its X, Y, and Z Bounds can be changed. Click OK when done.

8). Double left-click on the red cube > Edit Base. Now it's time to add a script, which can be left as an Object. It should look like this..

scriptname aaaTriggerScript

Begin OnTriggerEnter Player

If (GetStage == X)
SetStage X
EndIf

End


Save the script, click OK on the Activator panel, and reopen it. Find the script in the scroll-bar area and select it. Click OK again.

9). When the Reference panel is reopened, click Persistent Reference ON. An actual Reference ID is not needed, unless there are plans for some quest or script to "know" that the cube/trigger zone is there. Usually this is not needed though.

10). Click OK and as always, save.

11). Open up the Quest window. Open the Target Ref tab, and add a target (vamp).

12).
In the Quest Objectives tab's Cell scroll-down bar, locate the area where the red cube has been added, and select its Ref.

Note: If this cube has been placed outside (especially somewhere in Wilderness) it may not show up in the scroll-bar. If this is so, click on the "Select Reference in Render Window" button. Make sure that the Render window is still displaying the area where the red cube has been created. Double-click on the cube, and it should automatically get selected as the Ref.

This post has been edited by Renee: Jun 23 2019, 02:50 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Jun 26 2019, 12:10 PM
Post #48


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



How to transfer saves from Xbox to PC, Games: Oblivion, Fallout 3, Skyrim

Although all the info here can be found online, here is a helpful step-by-step version. I am also including the YouTube video I found....

https://www.youtube.com/watch?v=rjvPrHoeIzY

To make save transfers happen, Modio 5.3 must be downloaded. It can be found from several sites, but here's one I found.

https://modio.en.lo4d.com/windows

Download Modio from the big green Download for Windows button (and then choose either the US or UK versions) and save the program somewhere on the computer's hard drive. Make a desktop icon to make using this program even more convenient.


1). Insert a USB stick into the the Xbox 360. Some sticks go in the rear of this box, some might go in the front. Since the USB area is poorly-designed on my model, you may need an extension cord to plug into the box, if you have the same model I have.

2). Go into the Xbox's storage area like; Settings > Storage > Hard Drive > Games & Apps and then find the game, and the save you want to transfer. Copy this save from the hard drive to the USB stick.

3). On the PC, the USB stick will have a new folder in there, and each game will get its own folder.

> For Oblivion, this folder is called "Content." And inside of Content should be two more folders. One of these is called 00000000000000000, and this one will not be used at all, but keep it around anyway. The other folder will have its own, more complicated name. Go into this one, and keep diving into it until you find the Xbox save.

> For Fallout 3, there will be only one folder, and buried within this folder will be the save which just got transferred.

> Skyrim is like Oblivion, with two folders. Ignore the folder with all the zeros, instead delve into the second folder.

4). Copy/paste this save from the USB to the PC, in whichever area you like to keep saves.

5). Now, open Modio from wherever it got downloaded to.

6). On the bottom of the program, left-click on Open a Save.

7). Select the "Browse" button.

8). Now find the save just placed on the PC which got derived from step 3. Double-click on it.

9). On the left side of the program, select "Advanced."

10). Press the Edit Package Contents button (on the bottom of the window).

Now it's time to modify the file that's buried within the Xbox save. If this save was made in Oblivion, the file will be called gamedata.dat. If it was made in Fallout 3 or Skyrim, it will be called savegame.dat

11). Right-click on this file, and right-click "Save as...." and save it to the same area where the Xbox save was transferred to. Do NOT rename it.

12). Close Modio.

13). Now find the file just converted (which will be called gamedata.dat or savegame.dat). The game will not be able to read either of these as .dat files, so right-click on the file > Rename, and change the .dat extension to .ess for an Elder Scrolls game, or .fos for a Fallout game. So in other words, the file will now be called gamedata.ess, savegame.fos, or savegame.ess, depending if it's going to be used for Oblivion, FO3, or Skyrim.

.. It is possible change the file's name further if desired, but this is not 100% necessary.

...If the name gets changed, there will be a warning (after renaming the file) which can be ignored. Just click Yes.

14). Now, move the .ess or .fos file into Documents > My Games > *GAME* > Saves. There you go.

(*GAME* == Oblivion, Fallout 3, or Skyrim).

This post has been edited by Renee: Mar 8 2024, 05:45 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Oct 29 2019, 10:53 PM
Post #49


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Making a generic NPC Enemy, Game: TES V: Skyrim

Please refer to Making an NPC Actor for all the basics. The main diff with making a generic enemy is the Template Data area of the NPC page can get used, which makes spamming several different enemy-types much easier.

1). ActorBase: scroll this down to the Lvl area, and look for the type of enemy you want (bandit, necromancer, etc.). What this is, is a quick method of rolling up a new NPC.

2). Note there are 6 stages to every Class type. So for instance there will be LvlBandit01MissleWoodElf, but there will also be an 02, 03, 04, 05, and 06 version of this same NPC. This system goes from easiest (basic bandit archer) to hardest (Highwayman archer, perhaps).

3). Once we put the NPC into the game, he/she will not appear as an NPC, he/she will appear as a giant M. The CK cannot show this NPC yet, this will be handled once we're gaming.

4).
And this M will be colored. Note that the color goes from easiest to hardest. Double-click on the M, and then select the Leveled Actor tab. There is a scroll bar right in the middle of this page, which goes from Easy to Very Hard, and as we change this scroll, the color of the M also changes.

This post has been edited by Renee: Jan 6 2020, 06:47 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Jan 5 2020, 05:47 AM
Post #50


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Repeatable Bounty Quests Game: TESV: Skyrim

This module shall teach how to make an agent give out quests for multiple locations. Again, these will be bounty-type quests which are repeatable. And I have found they are also bullet proof (as in, stuff only goes wrong if I make a mistake somewhere, otherwise they are solid). As time goes on, I will add more and more to this idea, hopefully.

1). Open Creation Kit, find the mod you've been working with lately, bla bla.

Firstly, let's make the NPC quest-giver.


2a). OBJECT window > Actors
Give the quest-giver an ID, Name, and Short Name. I am naming him aaaQuestSteward for the rest of this tutorial. I am also suggesting "Steward" for his or her Short Name.

The most important thing about the NPC quest-giver is to make sure he or she is Unique. Toggle this on, and click OK.

2b). Follow the tutorial found here if you are unfamiliar with setting up an NPC. with these features being most important.

Traits tab: Voice Type. Make sure the NPC's Voice Type is one which is supported by the game.

Stats tab: The Class scroll-bar can be set to Citizen in most cases, especially if he or she is going to be put into proper society (not enemy territory).


Everything else about the Quest Steward (Factions, AI Packages, etc.) can be customized to your liking.

2c). Place the NPC into a Cell somewhere. WhiterunDragonsreach01 for instance. Make sure to remember which cell you put the NPC into, this is going to become important later.


3). OBJECT window > Character > Quest
Right-click > New into the main window.

3a). Give the quest an ID and Quest Name. For this tutorial I am naming the ID aaaBountyQuests (though in my game, its ID is more specific) Priority can stay at 50. Toggle Run Once off.

3b). Click OK, save from the main toolbar, and reopen the quest.

3c). Put the Type scroll-bar to Miscellaneous.

3d). In the Object Window Filter slot, type Bounty Quests\ and make sure that backwards slash gets typed in. Now, your quest will appear in the Character > Quests > Bounty Quests section of the Creation Kit, making it even easier to find.

4). Quest Stages tab
Six stages in total will be used. I am numbering them 0, 10, 15, 20, 30, and 50.


Stage 0: Left-click on 0. Now right-click > New into the top Log Entry window, and leave it alone, so it says EMPTY. Stage 0 is a pre-quest stage, so type ;Pre-quest into the Papyrus Fragment box.

Toggle Start Up Stage on.

Stage 10: During this stage the Quest Agent tells the player all the places there are to delve. These places will get added later, of course. Do all the same with the Log Entry window, so it says EMPTY. In the Papyrus Fragment box, some notes to self (aka documentation string....) can be added with a semicolon, such as ;Quest Agent greets player, offers locations.


Stage 15: Do all the same with the Log Entry window. During this stage there's going to be a crucial moment when the player-character inquires about the first location to go to. Or not. Documentation can be added into the Papyrus Fragment box.

Stage 20: This stage gets triggered after the PC chooses the first place to go. In my game, this is Morvunskar. Do all the same with the top Log Entry window and Papyrus Fragment box.


Stage 30 This stage gets triggered after the enemy gets pwned.


Stage 50 And here is the final stage, which gets bumped to after the PC returns to the quest agent, and gets a reward for pwning whichever enemy boss. Though this is technically the final stage, do NOT toggle Shut Down Stage on.


The Creation Kit often has two ways of doing the same things, and this is true with dialog. Modders can use the Dialogue Views window (example) or Player Dialogue (example). I prefer Dialogue Views, so that's what's described below. Those who prefer Player Dialogue can still figure out what's below, as this latter method is similar to what's found in the editors of earlier games.


5a). Dialogue Views tab
Right-click > New into the tall Dialog Views window. Type whatever unique ID you'd like. For this module I am typing aaaDialogIntro.

5b). Click OK. Click OK again (closing the Quest window) and save from the main toolbar.


Now. Repeat after me: Branch > Topic > Info > Response. This is the typical way conversations between PC and NPCs are structured in the Creation Kit.

A new dialog Branch gets started whenever a new instance of dialog is begun. And each Branch can have one or more Topics (which are what we click on after an NPC has greeted). Each Topic leads to an Info, and each Info can hold one or more Responses (which are spoken by NPCs during conversations).

Again: Branch > Topic > Info > Response.


5c). Reopen the quest. Its Dialogue Views page should open by default.

5d). Left-click on the initial ID (in the tall, vertical window). Now right-click > Create Branch into the larger window. The name for this branch can be aaaBountyQuestStartBranch, though it can be named whatever is desired. Click OK. The CK will automatically put the word "Topic" at the end of the ID's name.


5e). In the larger window, there should now be a yellow box (representing the quest's opening Branch) and a smaller box within the Branch box. This smaller box has a horizontal yellow area (representing the branch's opening Topic, which has not been written yet) and a white area, (representing the Topic's Info + Response, which have not been written yet).

Note: If that yellow box doesn't show up, go to another tab (such as Quest Data) and come back to Dialog Views.

5f). Double left-click into the white area inside the yellow box. The Topic panel opens. Type an opening topic into the Topic Text slot. For now I'll type Adventures into this slot. Click OK. Click OK again.

Note: During the first OK click, the CK does a quick spellcheck, making sure the opening Topic is spelled correctly. If it is, nothing happens, so OK gets clicked again.

From here on, it's possible to continue using the Dialogue Views tab. If not, switch to the older-fashioned Player Dialogue tab. Since I am trying to learn Dialogue Views, that's what most of this shall discuss.

5g). Double left-click into the white Topic Info area.

5h). Right-click > New into the gigantic Info window. The New Response panel pops up.

5i). Type some Response Text. "Yes we have a few problem areas which need addressing. Bandits, necromancers, witches, they must be STOPPED!" Click OK.

The larger, more detailed Topic Info panel pops up. Fill in the Prompt slot "I have heard the Jarl wishes to see some areas eradicated?" This is the first dialog topic which gets seen in-game. If the Prompt slot is left empty, I'll see Adventures (the actual Topic name) instead.

5j). Right-click > New into the Conditions window. Conditions go like this...

GetIsID aaaQuestSteward == 1.00 AND
GetStageDone QuestName, 10 == 0


That second condition obviously tells the quest agent to say this opening bit of dialog if Stage 10 has not been done yet. This is a nifty new feature not found in Oblivion's Construction Set, and it works better with these repeatable quests of Skyrim.

Make sure to right-click > Copy All Conditions, so both of these conditions can get added into later portions of the quest.

5k). Type GetOwningQuest().SetStage (10) into the End: Papyrus Fragment box. A blue cross should show up in the Script Name window. Copy this command, so it can be conveniently pasted later on.

5l). Click OK. Click OK again, and save.

6). Quest Data tab
Make sure Start Game Enabled is toggled on. Later on, it's going to automatically get toggled off, but for now leave it on so the dialog written so far can be tested.

Tip: It's a good idea now to open up TES5Edit and make an SEQ file (or update it) for the mod, as detailed in this post. Next, go into the game itself, and speak to the Quest Steward. Make sure that opening Topic (and its Response) both show up. Obviously if that Topic and its resulting Response are not in the game, this needs to get addressed.


Close the game, and return to the CK. It's a good idea to keep following this process when making Skyrim quests, just to confirm everything is showing up in the game.

7a). QUEST window > Dialogue Views tab
Left-click on the initial ID in the tall left window, so the yellow box shows up again in the right window.

7b). Toggle Show All Text on (this is at the bottom of the panel) to see all the text typed so far. Sometimes the Branch's Topic won't show for some reason, but the first Response should be seen in the Info's white area.

7c). Right-click into the Branch area, which is the outer yellow part of the box. Choose Add Topic.

7d). Make a unique ID. In my game, since my first location is going to be Morvunskar, I typed aaaMorvunskarTopic for this ID.

This quest is eventually going to assume several locations are going to get added, just like the repeatable Oblivion Bounty Quests in this thread. So...

7e). Type the name of the first location into the Topic Text slot. For my game, I just typed Morvunskar. Click OK.

So let's recap. So far within this Branch (which I called aaaBoutyQuestStartBranch in my own game) are two Topics: the opening topic, and what shall become the first locational topic. In my Creation Kit, I seldom see the opening topic, but the locational topic often shows up, in the Topic (upper white) area of the yellow box.

7f). Double left-click into the lower white area.. Now right-click > New into the large, lower window.

7g). Type the Quest Steward's first locational response. "Aye, Morvunskar, retched place...." The steward then explains whatever details seem pertinent. "Was once a glorious fort filled with Nords, and now, it's nothing inside but nefarious necromancers! Have ye any interest?"

7h). Click OK. The Topic Info panel pops up.

7i). Add some text into the Prompt slot, if desired. As mentioned before, whatever goes into this slot is the topic we click in the game. If nothing gets added into the Prompt slot, we'll merely see the Topic Text typed earlier.

7j). Paste the two previous conditions into the Conditions area, but make sure to change the GetStageDone gets changed to ...

GetStage aaaBountyQuest == 10.

Right-click > Copy All Conditions these two conditions.

7k). In the Papyrus Fragment box, paste the command copied during step 5k, but change 10 to 15. Overall it'll say GetOwningQuest().SetStage (15)

7l). Click OK, and Click OK again.


So now we've got two topics located in one branch. But they are not "linked" together yet. If you were to go into the game now, the NPC steward is going to start by presenting his/her initial Topic ("Yes we have a few problem areas") but the following, locational topic may or may not show up properly.

First I am going to teach how to link them together using the Dialogue Views window, then I'm going to teach Player Dialogue. For those who wish to learn the Player Dialogue way, skip to Step 8a.

7p). Single left-click on the opening topic's upper (white or yellow) area. Now move the cursor down into the Info/Response (lower white) area. The cursor should change into a hand.

7q). Click and drag the hand from the opening Info/Topic are to the locational Info/Topic. It is now very obvious these two topics are connected. Easy as pie.

For those who prefer to use Player Dialogue, here's how to link those topics. (I'm going to pretend I didn't just link them).

-------------------------------

8a). Player Dialogue tab
The opening Topic should be at the top of the middle section. Left-click on this, and double left-click on the Topic Info.

8b). At the far right side of the panel is the Link To section. Right-click > Add Link into this window. The locational topic should show up in the Select Topic panel.

8c). Select this topic (duh), and press OK.

---------------------------------------

By the way, don't forget to make recordings (or mock recordings) of all the dialog typed so far. Follow step 11p of this post if reminders are needed. Or just Google "Creation Kit recording voices," and hope to find something on YouTube.

Now it's time to make the NPC enemy, heh heh! viking.gif

9a). OBJECT window > Actors > Actor
Right-click > New into the Editor ID window.

9b). Give the enemy an ID, Name, and Short Name. Toggle Respawn on. Toggle Unique on. Click OK.

Note that there are two ways to make an enemy:

a ). we can make him or her Unique (toggling Unique on) and then clicking OK. Using this section will create an enemy who is pretty much the same every time.

b ). ... Or we can go into the Template Data area, which is in the lower-left corner. Change ActorBase to whichever selection is appropriate. Using this section will create an enemy which is different every time (similar to using enemies created from Leveled Lists).


Only Method A (static enemy) reliably works, though. Using Templates will not work, the script which gets added later can be attached to what is essentially a random enemy, but the script itself won'd be able to trigger the quest to Stage 30. So ignore Method B.

It will be necessary to go into every pertinent tab (Traits, Stats, Factions, etc.) and fill in all those blanks. This allows the modder to create a very specific enemy, who will be more similar every time. The enemy's level can be varied a bit, if PC Mult is toggled on, and his/her Inventory can also be varied if Leveled List items are thrown in there. Otherwise, this enemy's always going to be the same, look the same and so on.

Make sure to go into the enemy's AI Data tab. Make this guy Very Aggressive if we want him or her to attack on sight!

Another method is to use Bethesda's method, which is to make it so that Stage 30 gets set once an entire lair gets cleared. I don't know how to do this yet, but even if I did, I prefer the specific enemy OnDeath method (described below) anyway. It's just more predictable. The game won't try to consider any enemies which get stuck in walls, or fall through the cell's floor.

9c). CELL + Render windows
Place the enemy into its appropriate lair and give him or her a Reference ID.

Tip:It's a good idea to put this enemy deep into the lair, so it'll feel like he or she is the actual leader, who must be clawed and searched before he/she gets found! On the other hand, for those who are just testing this quest (to make sure all its stages get updated without traveling all that way) the enemy can temporarily get dumped into one of the Creation Kit's testing cells. A full list of these cells can be found in this link.


9d). Time to write the enemy's death script. Open the enemy's info from the Object or Render windows. Right-click > Add script into the Papyrus Scripts box.

9e). Double left-click on [New Script]. Give the script a unique name, like aaaEnemyDeathScript. Although I'm going for something more specific, so aaaMorvunskarDeathScript for my enemy orc. Click OK. A blue + with the script's name shows up in the Papyrus Scripts window.

9f). Left-click on the script, and press the Properties button. Press Add Properties. Time to give this script a Property. Change the Type scroll-bar to Quest.

9g). Change the Name to something unique. Since I am adding the first enemy into Morvunskar, I typed aaaMorvunskarDeathProperty.

9h). Click Ok, and wait for the Property to show up in the left window.

9i). Left-click on the Property, and press the Edit Value button. Now the Property should have a blue and yellow symbol next to its name.

9k).
Find the parent quest in the Pck Object scroll-bar. Click OK.

9l). Right-click on the script and select Edit Source. The script has a heading and its property has been named and created, so right now in my game looks like this...

--------------------------------------

Scriptname aaaMorvunskarDeathScript extends ObjectReference

Quest Property aaaMorvunskarDeathProperty Auto


-----------------------------------

The rest of the script will need to get typed in by hand. Altogether it's going to look like this....

----------------------------------

Scriptname aaaMorvunskarDeathScript extends ObjectReference

Quest Property aaaMorvunskarDeathProperty Auto

Event OnDeath (Actor Killer)
aaaMorvunskarDeathProperty.SetStage (30)
EndEvent


-------------------------------------

Phew. Notice the fourth line of the script: "aaaMorvunskarDeathProperty" is what is setting the stage to 30, when the NPC enemy gets pwned. This is important to notice! ... Oblivion's Construction Set and Fallout 3's GECK both would use the actual quest name in scripts, when setting stages. Skyrim uses the Properties instead, because the Creation Kit does lots of things ass-backwards. It does them ass-backwards though, so that the game's resources run with more efficiency!

9m). Close the script editor, or select File > Save if merely checking to see if the script will save.

9n). Click OK, closing the NPC's panel(s).


10a). OBJECT window > Character > Quest
Select the Dialogue Views or Player Dialogue tab. Add a new Topic.

I won't go into as much detail now, but this topic continues the dialog choices which started during Stage 10. So now, there's an option to say "Yes, we shalt plunder X lair..." Follow steps 5f through 5i to create dialog, add voice, and so on.

10b). Conditions are as follows...

GetIsID aaaQuestSteward == 1.00 AND
GetStage aaaQuestName == 15


10c). Type GetOwningQuest().SetStage (20) into the End: Papyrus Fragment box. Click OK.

10d). Link the first locational topic to the follow-up topic just made (in which we agree to plunder that lair).

Tip: Eventually as more and more topics get added, the Dialogue Views window gets messier and messier. Toggle Show All Topics off. Now, it's easier to move these topics around to your liking. Single left-click on one of the Topics (the upper-yellow area, or sometimes it'll appear white) and literally drag the topic to wherever is desired. Its location in the window will not matter.


10e). Click OK, closing the Quest window. Save.

Again, it's a good idea to go into the game, speak to the steward NPC, and just make sure all those Topics and Responses are showing up.

So, all the dialog for starting the quest has been written, the NPC enemy has been created, now it's time to make the reward phase.


11a). OBJECT window > Character > Quest
We're going to use Player Dialogue or Dialogue Views to make a final branch (NOT topic, not yet anyway), this one dealing with getting paid. We return to the steward, he or she is able to confirm somehow that the lair's leader has been pwned, and now it's time for that reward.

Right-click > New into the leftmost (vertical) window, and for this lesson I'm naming this ID aaaBountyQuestsReward. Follow steps 5E through 5I to make the Reward topic, dialog, and so on.

11b). Conditions go like....

GetIsID aaaQuestSteward == 1.00 AND
GetStage aaaQuestName == 30


11c). In the Papyrus Fragment End box, type GetOwningQuest().SetStage (50)

11d). Click OK. And Click OK again. Save.

Time to put some messages into this quest, which will show onscreen as certain stages get fulfilled. This is done with the Objectives page, and there'll be a total of two objectives for this quest.


12a). QUEST window > Quest Objectives tab
Right-click > New into the topmost window.

12b). Type 20 into the Index slot, and type "Kill X leader of X location."

12c). Perform steps 12a and 12b again, this time adding 30 into the Index slot. Type "Return to Quest Steward" in the Display Text slot.


13a). Quest Stages tab
Left-click on Stage 20. In the Papyrus Fragment box, type SetObjectiveDisplayed (20)

13b). Click on Stage 30. In the Papyrus Fragment box, type SetObjectiveCompleted (20). Also type SetObjectiveDisplayed (30) in the same box.

13c). Click on Stage 50. In the Papyrus Fragment box, type SetObjectiveCompleted (30).

Click OK. Save.


14a). OBJECT Window > Items > Book
Edit a note which has the certain "look" that is desired (such as one of Bethesda's own bounty quest notes), and give this item fresh ID. Click OK, and click Yes, saving the Note as a New Form. Highlight this ID, and select Copy.

14b). Reopen the edited note, and type up a writ stating where to go, how much the party will get paid, and so on. Click OK.

Making this note a Quest Object is optional. Unlike the Construction Set, for which I made notes into Quest Items (necessary, since the actual Quest Journal was not used) the Creation Kit does not need to have this stipulation. The Objectives typed for Stages 20 and 30 will show up in the PC's Quest Journal, in its Miscellaneous section.



16a). QUEST window > Quest Stages tab
Click on Stage 20.

16b). Click on the Properties button. After the panel pops up, click Add Property.

16c). Look for Book in the Type scroll-bar.

16d). Add the book's ID into the Name slot. If this ID was copied earlier, a simple paste will suffice. Click OK.

16e). Left-click on the Property for the book. In the Pick Object scroll-bar, find the book's ID (a lot of times, this ID will already be selected). Click OK.

16f). In the Papyrus Fragment box, type Game.GetPlayer().AddItem (aaaBookName, 1)

Click OK, closing the Quest window. And save, and reopen the quest.

Tip: During step 16f other items can get added. For instance, in my game, I'll use the Properties button to make properties for potions. Select Potion in the Type scroll-bar, and add the potion's actual name from the Object window, such as HealingPotion01 or whatever. This way, the NPC quest giver gives us that note, but also gives us a bunch of helpful potions (and whatever other items) as well.

Troubleshooting: Sometimes the Papyrus Fragment box will scream error messages for all sorts of reasons, as Properties are trying to get made. A common error has to do with "Reference already created" or something such, like this...

C:\Program Files\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\ Startingquest.psc (19,13): script property NewProperty already defined

Arrgh!!! If this happens, click on the Scripts tab of the Quest window, select the ID (it'll be the only item which is selectable on this page) right-click then select Edit Source. This will open up a page full of script fragments. Scroll down until you find any script which has to do with the error(s) seen earlier, and erase these. For instance, if too many properties have been made for a particular potion, erase any script fragments which have been made for that potion's name, and then select File > Save to make sure the Script editor saves everything successfully.

More info can be found here..
http://tesalliance.org/forums/index.php?/t...ompile-scripts/



17a). Quest Stages tab
Click on Stage 50 again. Click the Properties button, and click on Add Property.

17b). Look for MiscObject in the Type scroll-down. Type Gold001 into Name. Click OK, and click OK.

17c). In the Papyrus Fragment box, type Game.GetPlayer().AddItem (Gold001, X) with "X" being whatever you think is fair. Also type...

stop()

Stop() is what causes the quest to stop running, but do NOT toggle Shut Down Stage on. This quest is now good as a one-time affair. Here's how to make sure the entire thing respawns.


18a). QUEST window > Quest Data tab
Toggle Start Game Enabled off, then toggle Allow Repeated Stages on.

18b). Change the Event scroll-bar to Change Location Event. Click OK.


19a). OBJECT window > Character > SM Event Node
Right-click > Edit on Change Location Event.

19b). You might see several nodes made for other quests, or you might just see a large window which is mostly empty. Right-click on the very top choice, which is "Stacked Event Node: Change Location Event".

19d). Select New Quest Node. A new choice called "Stacked Quest Node" should be at the very bottom of this window. Scroll down (if needed) and find it.

19e). Right-click on Stacked Quest Node and choose Add Quest. Find the quest being worked on, and lcick OK.

This page is similar to the Quest Aliases page, which is too big to fit entirely on most computer screens. So in most cases, it's time to work sideways. What I'm about to describe is from my Windows 8.1 computer, so maybe other operating systems do this differently.

19f). Minimize the Creation kit. Right-click onto the desktop and choose Screen Resolution.

19g). Change the Orientation scroll-bar to Portrait. Click Apply, and click Keep Changes. Everything is pointed to the left now! Also, note that everything I'm describing is for a Windows 8.1 system, so i have no idea how Window 7 or 10 does this.

19h). Return the CK to its full size. Highlight the Node which just got created (not its quest, which is to its right).

19i). Type aaaQuestNameQuestNode into the ID slot, changing "Quest Name" to whatever the name of the quest is.

19j). Toggle "Do all before repeating" and "Shares Event" on.

Minimize the CK (if needed), and change Screen Orientation back to Landscape.

19k). Right-click > New into the Node Conditions window and make these conditions.

GetInCurrentLoc Location: X == 1.00 AND
GetDead None == 0.00


For the first condition, change the Run on scroll-bar from Subject to Player. Click on the INVALID button, and find the location where the quest agent works. Click OK.

For the GetDead condition, change the Run on scroll-bar from Subject to Reference. Press the Select button, and find the enemy's cell. If the enemy is still in the Reference window, it's easy to simply click Select Reference In Render Window and double left-click on the referenced enemy. Click OK.

19l). Click OK at the top of the SM Event Node panel.


Finally, there needs to be some "no" dialog, so the character will have a choice to pick a location to plunder, or not. Saying "No" is actually important, because it can reset the entire quest back to its pre-stage 10 again.

20). Go into Quest Stages and add Stage 29. Add some ;notes to self in the Papyrus Fragment box, and type Stop() into this box. Click OK.


21a). QUEST window > Dialogue Views or Player Dialogue tab
Make sure the enemy is still in the Render Window. Open the locational topic (this is the one which goes from Stage 10 to Stage 15). In my game, this is Morvunskar.

21b). Add a GetDead condition to this topic. Run On: Reference, and double-click on the referenced enemy in the Render window. Change the value to 0.00. Altogether this condition will read GetDead NONE == 0.00. There should be three conditions for this topic now: GetIsId, GetStage, and GetDead. All three are needed just so the agent's information stays efficient. He or she won't blab about a location if its top leader has already been taken care of.

21c). Click OK.



22a). Reopen the Quest window (I swear this will be the last time!) Go into Dialogue Views or Player Dialogue. Right-click > Add Topic into the branch.

22b). Make a topic dealing with the PC saying "no!" Add dialog, bla bla bla.

22c). For this topic to work, all that's needed is the same GetIsID condition.

GetOwningQuest().SetStage (29) goes into the Papyrus: End box.

22d). Now it's possible to link the No topic from the quest's initial dialog ("So, you have come to assist us...") or at any point between Stages 10 and 20. This will ultimately cancel the quest's progress, sending it back to Stage 0. The only catch is, you'll need to exit and re-enter the same cell where the quest agent works. This way, the quest's GetInCurrentLoc node triggers.

23). Save everything, and test in the game. Make sure the update that SEQ file.

Note that this quest will start only if that NPC enemy is alive. Once the enemy has been killed, the quest will remain dormant until the enemy respawns (along with the entire cell he or she is in).

Note 2: After a quest is done, the character rewarded, it can sometimes take awhile for the quest to reset back to the beginning. Usually after several hours / going into different cells, the quest will then reset back to the beginning.

This post has been edited by Renee: Mar 8 2024, 06:12 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
mALX
post Jan 5 2020, 06:26 PM
Post #51


Ancient
Group Icon
Joined: 14-March 10
From: Cyrodiil, the Wastelands, and BFE TN




These are awesome tips! Thanks Renee!










--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
SubRosa
post Jan 5 2020, 07:54 PM
Post #52


Ancient
Group Icon
Joined: 14-March 10
From: Between The Worlds



Wow. That is amazing.


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Jan 5 2020, 10:48 PM
Post #53


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



aw, well thanks.
I appreciate your encouragement, because even a simple quest like this takes a lot of learning. I feel like I'm getting the hang of it though. I really, finally am!


http://chorrol.com/forums/index.php?s=&...st&p=225359

http://img.photobucket.com/albums/v90/subr...Oblivion203.jpg

https://i1113.photobucket.com/albums/k505/m...21-05-51-44.jpg

https://web.archive.org/web/20200220053831/...ou-now-4/page-1

https://hosting.photobucket.com/albums/ad20...zpseff92113.jpg

This post has been edited by Renee: May 5 2020, 01:13 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Jan 29 2020, 01:46 AM
Post #54


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Repeatable Bounty Quests, How to add new locations. Game: TESV: Skyrim

Here's how to add extra locations for plundering, and it assumes the previous lesson has already been completed and tested. Ultimately a total of FIVE locations can get added per quest, and that's as far as I prefer to go. Perhaps more than five can be added in the long run, but I prefer five for my own sanity.

1). Open up the mod and quest which have been built. The steward or agent who dispenses quests has already been made, and I am assuming the same person is going to be used.


2a). OBJECT window > Character > Quests > Bounty Quests\
Click on the Quest Stages tab. There should already be six stages here: stages 0, 10, 15, 20, 30, and 50. Add four more stages: 16, 21, 31, and 51.

Stage 16: Stage 16 is similar to Stage 15. Since a second location is getting added, stage 16 gets selected if the Player chooses to inquire about this second location. In my game, this is going to be Uttering Hills Cave. Right-click > New into the top Log Entry window. It'll say EMPTY in this window, and this is how we're going to leave it. In the Papyrus Fragment box, type ; X Location inquired, with X equaling whichever second lair you'd like to plunder.

Stage 21: This stage gets chosen if the player chooses to go to a second location. Again, right-click New, and type ; X Location chosen.

Stage 31: This gets triggered if the leader of the second location gets pwned. Right-click > New again, and type ; Leader of X location has been killed.

Stage 51: This is the reward stage. It is possible to simply use Stage 50 as an all-purpose reward to simplify things, but I like having different final stages, because each job should pay a little differently in my opinion. Final dialog can also vary. The steward might say a different set of congratulations after we take down Uttering Hills Cave, compared to the less remote Morvunskar, right?


For each new location which gets added, simply add four extra stages. My next location will include Stage 17, 22, 32, and 52, for instance.

2b). Click OK and save. Reopen the quest.


3a). Dialogue Views or Player Dialogue tab
There should be two branches of dialog already. The first branch deals with starting the quest and choosing a location (or not). The second branch deals with our reward phase. Click on the first branch.

I am going to describe what to do using the Dialogue Views tab. I am starting to get the hang of using this tab's windows, after all.

3b)
. Right-click into the large yellow box and select Add Topic.

3c). Change ID to something locational. So for instance, I am changing the ID of this topic to aaaUtteringHillsTopic. Topic Text can simply be the name of the location, so Uttering Hills Cave goes here in my game. Click OK.

3d). Find the first locational topic. This topic already corresponds to Stage 10 going into Stage 15. Open this topic up, and Copy All three of its conditions (GetIsID, GetStage, and GetDead).

3e). Now, back to the new topic just made. Double left-click into the blank white space (under the new topic's name). The Topic panel pops up again. Right-click > New into the giant lower window, and type the steward's response text. "Uttering Hills Cave, located somewhat on the edges of the Jarl's region..." and so on.

When the larger Topic Info panel pops up, Paste the three conditions into the Conditions window. Get rid of the GetDead condition, so only GetIsId and GetStage remain.

Don't forget to Record some voice, or simply record silence if no voice or microphone is available. Toggle 'Force Dialogue' (actual name?) on, and keep 'Has LIP File toggled' on.

3f). In the Papyrus Fragment: End box, type GetOwningQuest().SetStage (16). Copy this line of script so it can be pasted into other Papyrus Fragment boxes. Click OK. Click OK again, and save.

3g). Reopen the quest, and open its initial branch.

3h). Left-click on the very first Topic made for this entire quest. This should basically be its initial dialog.

3i). Move the cursor downwards into this topic's white area, so that it changes from a pointer to a hand. Now click and drag this hand from this initial topic to the topic which was just made. Voila, now the initial topic is linked to both locational topics.

Click OK, and save.


4a). Reopen the quest. Right-click > Add Topic into the initial branch's yellow area. This topic gets chosen if the player chooses to plunder the second location. So, ID can be aaaLocationYes, with "Location" being whichever location has been chosen for plundering.

4b). Click OK twice. By now, the Dialogue Views page might be quite a mess. Go ahead and rearrange all these topics to your liking, toggling Show All Text off if desired.

4c). Double left-click into the new topic's white area, then right-click > New into its main (lower) window. Type some dialog: "Oh blessed, we have been waiting for somebody to rid the scum of Uttering Hills Cave for months now..." Additional dialog can be typed: how to get to this location, how much it'll pay, and so on.

4d). Paste the two conditions (GetIsID and GetStage) into the Conditions window. The GetStage should be changed from 10 to 16.

4e). Paste GetOwningQuest().SetStage (10) from the quest's initial topic, changing 10 to 21.So it's going to say GetOwningQuest().SetStage (21).

4f). Click OK. Now link the previous inquiry topic to this new locational "Yes" topic. Click OK. Save.


5a). OBJECT window > Actors > Actor
Time to make the enemy leader. viking.gif Right-click > New into the window. Give the enemy an ID, Name and Short Name. I always use Boss for Short Name, which makes these enemies easier to find in the Object window.

5b). Toggle Unique and Respawns on. Click OK.

5c). Reopen the enemy, going through all the different tabs. Make sure, for instance, that this enemy winds up in the same faction as all the others he or she will be living with. Make sure the enemy's AI Data is Very Aggressive and either Brave or Foolhardy, otherwise they'll just stand there looking at us as we rush into their lair. Click OK.


6a). CELL + RENDER windows
Put the enemy into the proper cell, and give this enemy a Reference ID.

6b). Open up the enemy's Actor panel. Right-click > Add Script into the Papyrus Scripts window.

6c). Double left-click on [New Script]. Type something pertinent into the Name slot, such as aaaUtteringHillsChieftainScript. Click OK.

6d). Click the Properties button. Click Add Property. Change the Type scroll-bar to Quest.

6e). Name can be something unique, dealing with the enemy's ID name + property. aaaUtteringHillsChieftainProperty, for instance. Click OK, and wait for the Property to show up in the left window.

6f). Highlight (left-click) on the property. Press the Edit Value button. Find the quest's name in the Pick Object scroll-bar. Click OK.

6g). Right-click > Edit Source on the script. The first two lines of script have automatically been generated. The rest will need to be typed in mostly by hand. It is possible to simply Ctrl + C the property's name (located in the second line of text) and Ctrl + V (paste) it into the fourth line of text.

-------------------------------------

Scriptname aaaUtteringHillsChieftainScript extends ObjectReference

Quest Property aaaUtteringHillsChieftainProperty Auto

Event OnDeath (Actor Killer)
aaaUtteringHillsChieftainProperty.SetStage (31)
EndEvent


-------------------------------------------

6h). Click OK. If the script saves successfully, great. Go ahead and save.


7a). OBJECT window > Character > Quests
Open the Dialogue Views or Player Dialogue tab, and select the Reward branch.

7b). I am not going into full detail here, but follow steps above in the previous Skyrim lesson (if needed) to make a new topic, and add Reward dialog. "You've done us a great service, here is your reward...yadda yadda."

7c). Paste the same GetOwningQuest line of script (copied earlier during step 3f) and change its stage bump, so overall it says GetOwningQuest().SetStage (51). Click OK.


8). Quest Objectives tab.
Make two objectives: one for Stage 21, and one for Stage 31. Stage 21's text will say something like "Pwn the leader of X location." Stage 31's text will say something like "Return to X for your reward."


9a). Quest Stages tab
Open Stage 21, and type SetObjectiveDisplayed (21) into its Papyrus Fragment box. Copy this line of script.

9b): Open Stage 31. Paste the line of text just copied, and change 21 to 31, so now it says SetObjectiveDisplayed (31).

9c). Paste the same line of text, changing "Displayed" to Completed, so overall it'll say SetObjectiveCompleted (21). Copy this line of script.

9d). Open Stage 51. Paste the line of text from step 9c, changing 21 to 31, so overall it'll say SetObjectiveCompleted (31). Voila. All the quest's messages are in the game. Click OK.


10). OBJECT window > Items > Book
Edit the previously-made note or scroll, changing its ID (duh) and Book Text. Copy the ID of this note or scroll so it can be easily pasted in a few moments.


11a). QUEST window > Quest Stages tab
Select Stage 21. Click on the Properties button. After the panel pops up, click Add Property.

11b). Look for Book in the Type scroll-bar.

11c). Add the book's ID into the Name slot. If this ID was copied earlier, a simple paste will suffice. Click OK.

11d). Left-click on the Property for the book. In the Pick Object scroll-bar, find the book's ID (a lot of times, this ID will already be selected). Click OK.

11e). In the Papyrus Fragment box, type Game.GetPlayer().AddItem (aaaBookName, 1)

11f). Optional: add any other items which seem pertinent into Stage 21's Papyrus Fragment box. I like to add potions, mostly. Adding items via this Properties method can get dicey. One little mistake, and the game will scream error messages. Follow the Tip and Troubleshooting portions of the previous Skyrim Bounty Quests Lesson / Step 16f, if things go wrong.

After screwing up a few items in the past, then having to erase script fragments several times, it really makes one realize how much easier the Construction Set and Fallout 3's GECK are. Player.AddItem X X and it's done! I can literally add items via script in my sleep. sleep.gif mad.gif Grrr....

Click OK


Quest Stages tab
Time for our reward money. A script property has already been made for this stage.

12a). Click on Stage 50. Copy the line of text from the Papyrus Fragment box (Game.GetPlayer).AddItem Gold001, X).

12b). Click on Stage 51. Paste that line of text into its box, changing the amount of reward money, if desired.

Also type stop() into Stage 51's box. Click OK.

Stop() is what causes the quest to stop running, but do NOT toggle Shut Down Stage on.

For the next phase, make sure the new enemy is onscreen in the Render window.


13a). OBJECT window > Character > SM Event Node
Right-click > Edit on Change Location Event.

13b). Sometimes this page is a huge expanse of white, other times it's got a bunch of nodes in its main window. If nothing is showing, double left-click onto Stacked Event Node. At the very bottom (or near it) should be the quest node which already deals with the first location.

13c). Left-click onto the Stacked Quest Node which deals with the quest.

13d). Right-click onto the GetDead condition, and select Copy Condition.

13e). Paste this condition right back into the Conditions window. And open it.

13f). Press the Select button. Click on Select Reference from Reference Window. And double left-click on this fearsome predator. Click OK.

13g). Toggle the OR selection on, and click OK. Here is what the final result in the Node Conditions area should look like.

R GetDead NONE == 0.00 OR
R GetDead NONE == 0.00 AND
PL GetInCurrentLoc LOCATION == 1.00


Note: If those are out of order (AND, OR, for instance) it is possible to reorder them. Hopefully this won't need to be done, because it'll involve making you work in Portrait mode instead of Landscape. rolleyes.gif


Basically, the quest will only start from the beginning, with the agent's opening greeting, if the Player is in location, and if either enemy is alive.

-- If both enemies are dead, the quest will not start, and the agent will stand there saying "Yaah?" "Hmm?" It is possible to give the agent some dialog for this scenario, but first make sure the quest dialog actually works as-is.


13h). Click OK. Save


14a). QUEST window > Dialogue Views or Player Dialogue tab
Open the second locational topic (this is the one which goes from Stage 10 to Stage 16).

14b). Add a GetDead condition to this topic. Run On: Reference, and double-click on the referenced enemy in the Render window. Change the value to 0.00. Altogether this condition will read GetDead NONE == 0.00. Click OK.


15). Make sure to update the mod's SEQ file.

Have a glass of wine if you're of legal age. Or partake in some other form of celebration of your choosing.

This post has been edited by Renee: Mar 12 2020, 02:14 AM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Apr 1 2020, 11:43 PM
Post #55


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



SetActorOwner

https://www.creationkit.com/index.php?title...ObjectReference

Patrolling the Mojave almost makes for a nuclear winter. (NPC man says this)

This post has been edited by Renee: May 10 2020, 04:36 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
SubRosa
post Apr 2 2020, 12:28 AM
Post #56


Ancient
Group Icon
Joined: 14-March 10
From: Between The Worlds



You can use this at the console. It is a great way of making beds sleepable. Or items in dungeons that would otherwise count as being stolen, able to be picked up with no repercussions.


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Apr 2 2020, 12:33 AM
Post #57


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



QUOTE(SubRosa @ Apr 1 2020, 07:28 PM) *

You can use this at the console. It is a great way of making beds sleepable. Or items in dungeons that would otherwise count as being stolen, able to be picked up with no repercussions.

Oh yes! Well I am trying to learn how to do this via quest. So in Vyvoor's game he'll be able to speak to somebody and they say "Oh you great Dragonborn, bla bla ...." and somebody gives him a horse for free. So up above that's just to remind myself where I found the correct scripting.



--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post May 31 2020, 05:11 PM
Post #58


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



USE THIS idea for Fallout3_Jail.esp. We're going to work with Miss Vicious Delicious' game

Here is the GECK page describing how crime works.

https://geckwiki.com/index.php?title=Category:Crime

---------------------------------

Compiling ideas to make a Megaton Jail Cell. The condition below should begin the crime process IF the player murders somebody.

If (IsPlayerKiller == 1)

So if the PC is the one who murdered some NPC, this causes a variable to switch on. Which causes Lucas Simms to seek the PC when he/she returns to Megaton.

Only question is, how do we attach this script to peaceful NPCs? It can probably get attached to an entire faction, somehow.

----------------------------------------





----------------------------------


This post has been edited by Renee: Jul 26 2020, 06:08 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Jun 4 2020, 08:25 PM
Post #59


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Adding a Jail and enhancing Fallout's Crime System. Game: Fallout 3

In the year 2017 a character I rolled, Janet Telia, wound up going to jail. This was a real event, something which actually happened in her game. But this event was a one-time thing, quest-driven with one-time stages.

What if this were something which can happen at any time? Assuming the player-character commits a crime, of course, and is caught!

Fallout 3 does have a crime system, which is broken into Minor and Major crimes. Minor Crime includes stealing, trespassing, and pickpocketing. Major Crime includes assaults and murder. In the vanilla game, committing enough of either crime will cause a single NPC, or an entire faction of NPCs, to try killing our character at worst. If the NPC's AI Data is set to Unaggressive and Cowardly, this NPC will flee instead, but he or she will still record the PC's crime as Minor or Major. But this is all. Nobody will ever try to arrest us for random crimes. nono.gif

My idea is similar to Elder Scrolls games. This idea will include the usual three choices: Go to Jail, Pay Caps, or Resist Arrest. But, there is a difference too: the way I'm going to describe this below, our player-character can only get arrested in Megaton. Maybe in the future I'll also add Rivet City. But no psychic guards shall roam the Capitol Wasteland, unless you want them to.

The main difference between the way crime works in Fallout (as opposed to any Elder Scrolls game except Arena) is Fallout's Crime Counts never go away, whereas in Elder Scrolls it is possible to get Crime Gold to 0. If your character is caught stealing from somebody in Elder Scrolls IV: Oblivion for instance, it is possible to pay some money or go to jail. This will clear any crimes, returning the game's crime count to zero.

In Fallout, crime counts always remain. If your character is caught stealing in this game, and let's say MinorCrimeCount rises to 5.00, this is where the count shall stay forever. As far as I know, there is no way to get this count back to 0.00.

...And this creates some problems, of course. GetMinorCrimeCount and GetMajorCrimeCount exist, but there is no such thing as SetMinorCrimeCount or SetMajorCrimeCount, or anything equivalent with a different set of names. Because of this, the scripts for this jail idea get longer and longer, in an effort to make sure the officer keeps registering how much crime has been committed. The end result? Eventually the criminal essentially becomes 'banned' from Megaton. It has to happen this way, unless somebody out there figures how to script better than i can!

I don't know if the FOSE team has done anything here for resetting crime; my search of a Fallout Script Extender site did not return any results for crime at all.


Good news is, any NPCs who have been angered by crimes (causing them to fight) eventually will mellow. Bethesda hardcoded Fallout 3 this way, probably because they had to so gamers could progress with some of the game's quests. After 72 hours, even the most fearsome NPC will regain his or her temper, and it's possible to reenter the cell in which this NPC can be found.

Basically, they forgive, but they never forget.

-----------------------------------------------------

MAKING THE JAIL


1a). First step is to duplicate a cell, or create one from scratch. I am not very good at making cells from scratch, so instead I'll simply duplicate MegatonJerichosHouse. I like this cell because it is like a mobile home: everything is on one story. Easier to work with. Jericho's house is also separated conveniently into a larger immediate area + a smaller alcove which has a bed. The smaller area is going to be the actual prisoner's cell, while the larger area will include a bot who eventually will patrol around.

I found one small problem with duplicating Jericho's pad. In the Test character save I used, a second Jericho showed up in my game, despite the fact that I deleted Jericho from the duplicated cell. Once I realized this anomaly, I used the console to Mark For Delete the duplicated Jericho, once I was back in the game. This did not happen in any of my main characters game I've loaded so far, only the test character.

1b). Back to the GECK. In the Cell window's left panel, select the duplicated cell and press F2. Change the cell's name. I am calling it aaaMegatonJail.

1c). Right-click > Edit the duplicated cell. Click on the Interior Data tab and change its Name. I am calling it Megaton Jail. Also, change the Owner NPC scroll-bar from whomever is its current owner (if there is one) to NONE. If the cell is owned by a faction, set this to NONE. There is going to be an NPC who does own this place, but he or she has not been made yet. And it's better to use somebody new, rather than one of the vanilla NPCs already in the game.

Click Apply, click OK.

1d). Now comes the fun part. Time to remove whatever items you'd like. Or, you can keep any items you are unsure about, moving them out into the void.

Turns out, Jericho's place is not large enough. So I toggled Snap to Grid and Snap to Angle on. Then I selected a portion of its middle section, duplicated it, moved the area where the jail cell shall be (extending the cell's middle), and then moved the duplicated area into the initial area.

Here is what the jail looks like so far, with NavMesh turned on.

I did not mess with the area on the left side of the cell. This is where a robot is eventually going to patrol. Note the red stuff on the floor. This is navmesh. Navmesh tells NPCs where they can walk, and where they cannot. Since the robot is never going to travel into the area where the prisoner stays (which is on the right side of the cell) it's not important that there's no navmesh there.

> If there is an owned bed already inside the cell, change its Ownership to Player.

> I also added a sink into the jail. Since I use Realistic Needs, my character will need to drink occasionally, and water is one thing which is always free in jails. But what about food? Don't worry. Food gets handled, too.

Time to deal with NavMesh. Although I am not messing with navmesh in the cell I just duplicated, I left some instructions below for those who want (or need) to change this. Note that working with navmesh takes practice. And practice takes time. Those who don't need to mess with this can skip to step 1f.

1e). From the main toolbar, select NavMesh and then select Remove Cell NavMeshes, which is roughly halfway down the list.

New NavMesh must now be generated, and this gets complicated, but is very important. NavMesh is what allows NPCs to walk over specific areas, it is also supposed to keep them from walking into inanimate objects such as walls and rocks (though sometimes they still do this). If new NavMesh is not added, any NPCs who enter this cell, or are placed into it, won't be able to move. embarrased.gif Yes, this happened to me!

Describing how to add NavMesh requires some visual aids, so watch the video below, following the Anonymous Dev's instructions.

https://www.youtube.com/watch?v=RYJAj-63FR4

Note that in most cases (esp. with duplicated cells), new navmesh is not 100% necessary, for those who wish to skip this step and save time.

Tip: Turn Snap to Grid and Snap to Angle back on, if these have been turned off for NavMeshing.


1f). OBJECT window
Now to add the jail's cell door. This is going to be a sliding door, which can lock and unlock. In the Object window's left panel, select All, and then type Jail in the Filter slot. Find and select JailDoor01. Drag the jail's door into your cell. Obviously it's important to make sure this door will block the area where the prisoner will stay. Since one door was not enough to block the way out, I duplicated the first door, and moved the duplicated door over.

1g) Give the door a Reference ID. I named it aaaMegatonCellDoorRef. Copy this Reference ID and paste it onto a Notepad page. In fact, it helps to copy/paste any referenced names like this, since they will later get used in scripts.

Toggle Persistent Reference on. Click OK.


1h). Get JailDoor01 out of the filter and select Items > Key. Edit a key. Doesn't matter which one, but try to select keys which don't already have scripts attached.

Edit the jail door so that only this key will open it.

1i). In the CELL window, there are some choices. It is possible to put a door on an empty space of building, anywhere in Megaton, therefore, the prisoner is in Megaton when he/she gets out of jail. I decided to take this several steps further. Used the Render window and went out into the Wilderness, somewhat west of Vault 101. Then I went into the Object window > World Objects > Static, and dragged MegatonMisterBurkesHouse out into the wasteland.

Next I found MetalScrapDoor01 and dragged this door into the Render window. Connected this door to the cell's entrance door. The reason I made the jail way out yonder is because spending time in jail won't clear one's bounty (or crime count, as the GECK likes to call it) and I originally had problems with the main officer (who has not been made yet) still trying to arrest us after we get out of jail. Later on, I fixed this problem. But in roleplay terms, it just makes more sense that the player-character is temporarily removed from Megaton society. This is not 100% necessary, so those who wish to put the jail in Megaton itself, this is fine.

Here is what the final Megaton Jail looks like in my game. Again, the right side of the cell (roughly 2/5 of the space) is where the PC gets locked up.


1j). Make sure the interior of the jail is in the Render window. Go into the Object window > World Objects > Container and drag any non-scripted container into the Render window. I dragged LockerVault01Empty in there.

1k). Double left-click on the container, and choose the Edit Base button. Rename its ID and Name. I am calling it aaaEvidenceLocker and Evidence Locker. It helps to make sure this container is completely empty, for this is where the player's stuff will get stored after being locked up. ph34r.gif

1l). Make sure Respawns is not toggled on. Click OK, and save as a New Form.

1m). Go into the Ownership tab and choose Player. Give the container a Reference Editor ID (aaaEvidenceLockerRef), and toggle Persistent Reference on (if it's not already toggled).

1n). Two more steps. Go into the Object window > WorldObjects > Static and drag an XMarkerHeading into the jail. Put it the area where the prisoner shall stay. Essentially, put this marker behind bars. ph34r.gif Give this XMarkerHeading a Reference ID. I named it aaaMegatonJailPlayerXMarker. Copy / paste this onto a Notepad page.

1o). Drag a second XMarkerHeading into the jail, but this time do not put it behind bars. This second marker is where the PC will get teleported, assuming greater crime has been noted. Essentially, the PC gets temporarily banned from Megaton, and will need to stay out of town for 3 days! I named this second marker aaaMegatonJailBookingMarker. Copy/paste this also, so it can be copy/pasted into scripts later.

Click OK. Save.


MAKING THE OFFICERS

One or two officers are needed. I am opting for two. The first one will perform initial arrests, and the second assists in beating down the criminal, if he or she resists arrest. First I'll make the arresting officer. This gal will handle all the dialog, and she's much more complex than the second officer.

OBJECT window > Actors > NPC
2a). Follow all the usual steps for making an NPC: choose Race, Voice Type, ID, and Name. Click OK. My officer will be a lady with the ID name of aaaMegatonOfficer. I toggled Respawns on, so that if one of my characters wants to try to pwn her (and succeeds somehow), another officer will eventually take her place. Essential can also be chosen, of course.

Traits tab
2b). Change Class to SecurityOfficer. This arranges the officer's stats and attributes in a particular way, making him or her ready and capable for the job. Change Alignment from Neutral to Good.

Stats tab
2c). I wanted to make a tough, but not impossible-to-beat officer. So I selected PC Level Mult and put 3.00 into the Level Mult slot. AutoCalc Stats can be used as well, to make the officer stay truest to the SecurityOfficer class.

Factions Tab
2d). The officer gets added into the MegatonResidentFaction, causing her to become part of the citizenry, occasionally making small talk with other Megatonites. Also add him or her into the MegatonCrimeFaction. This will cause the officer to recognize Minor or Major crimes committed against residents of Megaton. Both of these factions are necessary for the arrest process to function.


AI Data tab
2e). Set the scroll-bars like so. It's important to make somebody who remains peaceful by default, but will not back down from combat if the need arises.

Aggression: Aggressive
Confidence: Brave
Assistance: Helps Nobody
Responsibility: 90

Assistance is set to Helps Nobody, which normally means the NPC won't care if Friends and Allies are getting into trouble, but this is not a problem, because we're going to want the officer to focus on arresting the player only. Not getting into combat with him or her. This part (combat) gets handled later on by scripts, if Resist Arrest gets chosen.

AI Packages tab
AI does not need to get specifically added to the officer. I have tried to add a DefaultSandbox package, but this messes everything up later on. Instead...go to the ....

Main toolbar > Character > Packages

2f). Start a Find package. Give it an ID and copy this ID. Paste the ID onto a Notepad page, because it's going to be needed later on. I just named it aaaArrestPlayerPackage

2g). Specific Reference is toggled on by default. In the Ref scroll-bar, scroll down to PlayerRef.

2h). Toggle Allow Search on. 'Near editor location' can stay toggled, Type 1024 into the Radius slot. This is roughly 48 feet (14.6 meters) which is not nearly the total diameter of Megaton. Technically it is possible for a criminal to avoid the officer after being witnessed committing some crime, but in my game, this is always a dice-roll. I put the officer in the middle of Megaton, but since she sandboxes around a little bit, my character and I will never know exactly where she is, assuming we're trying to avoid her somehow.

2i). Flags tab: Toggle Always Run on. Toggle Fallout Behavior off.

2j). Make a second package, this time selecting Sandbox. Simply pull up DefaultSandboxEditorLocation1024, rename its ID, and Save as a New Form. Nothing else needs to be changed, although some may wish to mess around with the Flags tab. I am calling this package aaaMegatonOfficerSandbox. Copy this script and paste it onto that same Notepad page.

Click OK, close the Packages window, and save.

2k). Put the officer somewhere into the world (I chose ground zero of MegatonPlaza, right next to the Brass Lantern and bomb). Give him or her a Reference ID. I am calling her aaaMegatonOfficerRef.

The rest of the officer's tabs can be changed around however you'd like. I added ArmorTenpennySecurity and HatPoliceAdult to give her an appropriate look. I also gave her WeapPoliceBaton, a 10 mm handgun, and some 10 mm rounds.

Optional: add the jail door's key into his or her Inventory. This can now be stolen by a really good thief! It is possible to break out of jail if one has the key. It is also possible to write the upcoming quest so that breaking out of jail will cause more problems for the PC. This gets complicated though, and what's about to follow (the quest) is complicated enough. Getting everything to work right is complicated enough!

Click OK and save.


2l). Go back into the officer's NPC panel. Start a script like so...

scriptname aaaMegatonOfficerScript

short Status


2l). Close and save. Click OK, closing all officer's panels. Save, and reopen the officer. Find that script in the scroll-bar, bla bla. Reopen it.

Here is what it's going to look like...

scriptname aaaMegatonOfficerScript

; Status 0 -- No or low crime committed. Megaton officers sandbox. Most “good” PCs will remain at Status 0 forever.

; Status 1 -- Triggers during first arrest process. PC has been caught with their first crime, Major or Minor.

short Status

Begin GameMode

;----------------------------
;The scripts below deal specifically with the arrest process.

If (Player.GetInWorldspace MegatonWorld == 1) && (Status == 0)
If (GetMinorCrimeCount >= 3) || (GetMajorCrimeCount >= 1)
Set Status to 1

EndIf
EndIf

If (Status == 1)
aaaMegatonOfficerRef.AddScriptPackage aaaArrestPlayerPackage

EndIf
;--------------------------------
;The scripts below cause the officers to sandbox in Megaton, if the PC has not committed any crime yet.

If (Status == 0)
aaaMegatonOfficerRef.AddScriptPackage aaaMegatonOfficerSandbox

EndIf

End



> To summarize. The first two scripts, when Status gets set to 1, cause the main officer to arrest our toon IF our toon has committed a certain number of Minor or Major crimes. The third script is used to make sure the officer does NOT rush up to the PC if no crimes have been committed. She should not do this even without the script, but the Status 0 script confirms things.

> Status always starts at 0, assuming this is a new game without any criminal catches, or if one has a character who has never been caught doing any crimes, yet.

For those who add this Jail mod idea to your game. If the main officer comes rushing up once your character enters Megaton, you may think there's an error here. But try toggling the console on, and then click on the arresting officer. Type GetMinorCrimeCount and press Enter. Do the same with GetMajorCrimeCount. Chances are, one or both of these will be high enough to cause the officer's behavior. And this is because your character has already committed some crime(s) in the past. Yes, this happened to me. biggrin.gif

Like I said before, Fallout NPCs may forgive past crimes, but they never forget.

> Notice there is some leeway for minor crimes. The officer will do nothing if minor is below 3. This allows the PC to make a mistake. If trying to speak to an NPC for instance, but accidentally wind up stealing an owned object, the officer won't automatically come after the PC, assuming this happens just once. Stealing just one item can tally 1.00 or 2.00, so let's make 3.00 the official number of confrontation.

> Major crimes, on the other hand, will be regarded more quickly. If somebody slaps, slams, or shoots someone else, chances are they did so deliberately. Feel free to nudge either of these numbers to your liking.

> Major Crime works in a different manner than Minor Crime. If we are witnessed stealing our first item, Minor moves from 0.00 to 1.00 or 2.00. If we steal a second item and are witnessed, that number moves upward again. Major Crime is not as predictable. Sometimes it moves upward, and sometimes it does not. My test character assaulted and killed the Mercenary who stays in Craterside Supply for instance, causing Moira Brown to flee her shop. Major Crime jumped from 0.00 to 2.00. In an Elder Scrolls game, Crimegold would get much higher than this for a full-blown murder. Because of this, Major Crime's counts (in scripts below) is set up differently than the more-predictable Minor Crime.

A second NPC was killed by my Test guy, this time right in Megaton's central area. This time, Major Crime jumped from 2.00 to 6.00. I think the greater number resulted because there were more witnesses. ... So, it's hard to find an apt punishment which fits the major crime. Pwning that Mercenary resulted a Major of 2.00, which means somebody can get off lightly...200 caps paid, the way I've got this set up below, if nobody witnesses this pwning. This doesn't seem enough, right? But there's not much I can do about this; Beth hardcoded the way crime works in this game. Anyway, we'll get to all that later.

> Finally, note that there are rare times when the officer will have a different crime count than ordinary Megaton NPCs. ...Maybe clicking a Megaton Settler, and then checking for crimes with the console will yield a result of 0.00 or 2.00, whereas the officer will register 4.00. So always click on the arresting officer when trying to check for crime.

All of that is rather complicated, right? wacko.gif Fortunately, the second officer is much simpler...


2m). Make a second NPC. This is going to be the officer who assists the main (arresting) officer, smacking our character around if Resist Arrest is chosen. In my game, this is a man with aaaComplianceOfficer as an ID.

2n). Toggle Respawns on, click OK, and reopen the officer.

The rest of those tabs can be arranged however you'd like, but make sure the second officer goes into the same MegatonResidentFaction and MegatonCrimeFaction as the arresting officer.

Place him or her into the same worldspace as the arresting officer and type a Reference ID. I called him aaaComplianceOfficerRef.



MAKING THE QUEST

OBJECT window > Actor Data > Quest

3a). Start a new quest (duh). ID is necessary, but Name is not. I am calling it aaaJailFallout3Quest.

Priority can be 90, just like it is in Elder Scrolls games when Legions try to arrest us. In theory, getting arrested takes precedence over everything, including the Main Quest, possibly.

3b). Start Game Enabled can stay on. Also, toggle Allow Repeated Conversation Topics on. Script Processing Delay can also be toggled.


3c). Start a script, like so...

scriptname aaaJailScript

short Arrest

short Timer1
short Timer2
short Timer3
short Timer4
short Timer5

short StartDay1
short StartDay2
short StartDay3
short StartDay4
short StartDay5



3d) Set the Script Type scroll-bar to Quest and close the editor window. Click OK, closing the Quest window. Reopen it, and find the quest in the scroll-bar. Click OK, and reopen.

Now we're going to add some more.

scriptname aaaJailScript

short Arrest

short Timer1
short Timer2
short Timer3
short Timer4
short Timer5

short StartDay1
short StartDay2
short StartDay3
short StartDay4
short StartDay5

Begin GameMode

;------------------------------------
;The script below deals with stopping combat against he PC, once the PC has paid for crimes.
;NPCs will sometimes try to fight the PC after crime has been committed. This script stops these fights.

If (Player.GetInWorldspace MegatonWorld == 1) && (aaaMegatonOfficerRef.Status != 8)
PlayerRef.StopCombatAlarmOnActor

EndIf

End


As noted, the StopCombatOnActor script will cause any angry NPCs (who are trying to kill our PC after too many crimes committed) to STOP combat once the PC is in Megaton's plaza area, assuming the Officer's Status is not 8 (meaning the PC has not been banned from Megaton, yet). This will allow the officer to attempt arresting the PC without hassle. If this script is not used, and NPCs are actively trying to fight our character, this causes the officer to get confused, unable to deliver any dialog.

Note that this is OPTIONAL. For those who want to have NPCs fighting their characters in Megaton's plaza area at any time after crime, this script can be omitted. Again, the officer won't be able to do his/her job if this script is not present.


3e). Close and save the script. Click OK, closing the quest window. Save from the main toolbar. Reopen the quest. More is going to get added to this main script, but for now let's move on.

Topics Tab
3f). Make a GREETING. This first greeting is going to be a generic sort which the officer says if the PC is not wanted for any crimes. "Lovely day, isn't it?" or whatever. Toggle Goodbye on. Conditions go like this...

GetMinorCrimeCount < 3.00 AND
GetMajorCrimeCount < 1.00 AND
GetIsID aaaMegatonOfficer == 1.00


And that is all. Since Goodbye is toggled on, the officer will say this if we speak to her or him, without any dialog menus popping up, just like speaking to a Megaton Settler.

3g). Make a second GREETING. This one is much going to be much more interesting. The officer will say this one when first confronting the PC, during the arrest process. "STOP!!! You violated the law!"... Make some dialog which explains that pickpocketing, stealing, trespassing, assaults, and murder are all against the law. "You can pay me caps, go to jail, or resist arrest..."

Three conditions are needed...

GetMajorCrimeCount >= 1.00 OR
GetMinorCrimeCount>= 3.00 AND
GetScriptVariable aaaMegatonOfficerRef.Status == 1.00 OR
GetScriptVariable aaaMegatonOfficerRef.Status == 6.00
GetIsID aaaMegatonOfficer == 1.00


3h). In this greeting's Choices window, add three topics: aaaPayCaps, aaaGoToJail, and aaaResistArrest. Add these into the Editor ID window, as well.


3i). Let's start with the least threatening of those three choices: Pay Caps can go into the Topic Text slot. "You're being arrested for committing one or more crimes against the citizens and settlers of Megaton.... you really need to watch yourself...." and so on. Type some text explaining how much will need to be paid. In my game, lesser minor crimes start at 50 caps, while a full-on repeated assault or murder can rate as high as a thousand. I went into some detail, making sure the officer explained all the rules in her dialog.

Overall, I wound up with four scenarios: lesser Minor Crimes, greater Minor Crimes, lesser Major Crimes, and greater Major Crimes. If a character commits just one assault, or steals a couple items (and is caught) lesser Major or Minor crime gets registered. It is possible for a well-meaning character to simply pay for this one crime, never commit another one, and "lesser" crime where his or her crime counts shall stay.

If more crime gets committed, more than one or two incidents, this causes a greater scenario of Minor and/or Major crimes. Here we have somebody who is more of a dedicated criminal, so here is where their reputation shall stay: paying more money if caught, and going to jail for longer periods, as well.

Basically, lesser crime is only committed once. If the character continues to commit more crime, all subsequent arrests will be considered greater.


Conditions: only one is needed, the same GetIsID aaaMegatonOfficer == 1.00 as before.

3j). In the Add Topics window, add aaaPayCapsTopic2. Conversely, this can be added into the Choices window, along with aaaGoToJail and aaaResistArrest, for those who wish to retain maximum options.

3k). Add aaaPayCapsTopic2 into the Editor ID, and change Topic Text to "I am paying for my crimes. Here are your caps."

Dialog should be written in a way which warns the PC. If NPCs have started combat, they will have ceased due to that StopCombat script added into the main script IF the PC is in Megaton's plaza area. But they might resume fighting our character once the PC is back in some other cell. So her dialog goes:"If you have enough caps to pay for your crimes, you will be free to go, but it might be a good idea to get out of town for awhile. I'd recommend 3 days or more..."


I have noted four scenarios for crime above. Overall, eight dialogs can be written for this topic; four for Minor Crime, and four for Major Crime. Let's start with Minor Crimes. Here are the four scenarios for lesser and greater Minor Crimes.

1). the PC has enough caps, and needs to clear less than 5.00 of minor crimes
2). the PC has enough caps and needs to clear 5.00 or more .. ." .. " .... "
3). the PC does not have 50 caps, for situation 1.
4). the PC does not have 100 caps, for situation 2.

Selections 1 and 2 require conditions as follows...

GetIsID aaaMegatonOfficer == 1.00 AND
GetMinorCrimeCount >= 2.00 AND
GetMinorCrimeCount < 5.00 AND
GetGold Reference: Player >= 50.00


or

GetIsID aaaMegatonOfficer == 1.00 AND
GetMinorCrimeCount >= 5.00 AND
GetGold Reference: Player >= 100.00


3l). In the Result Script (Begin) box, type Player.RemoveItem Caps001 50 or Player.RemoveItem Caps001 100 respectively.

3m). In the Result Script (End) box for lesser Minor Crime type Set aaaMegatonOfficerRef.Status to 2.

3n).In the Result Script (Begin) box for greater Minor Crime, add Set aaaJailFallout3Quest.Arrest to 5 below the Remove Caps script.

3o). In the Result Script (End) box for greater Minor Crime, add

Player.MoveTo aaaJailBookingXMarkerHeading
If (aaaMegatonOfficerRef.Status == 1)
Set aaaMegatonOfficerRef.Status to 4
EndIF



3p). The final two situations, in which there aren't enough caps, can use the same GetIsIDs and GetMinorCrimeCounts, all of those can literally be CopyAll/pasted. But change GetGold to less than 50 caps, or less than 100 caps, depending on the amount of Minor Crimes allotted.

For either of these situations, add aaaGoToJail and aaaResistArrest into their Choice windows.

Click OK and save.

Steps 3i through 3p can be followed for Major Crime as well, making whatever changes you'd prefer. Obviously, paying caps for an assault or murder will be much more serious. In my game, committing one or two assaults (less than 5.00 of Major Crime) will require 200 caps of payment. Committing more than two assaults indicates that somebody was aggressive enough to try killing somebody, or seriously maiming him or her. The officer is going want a thousand caps to clear one's name.

This may sound harsh, but consider the fact that no NPC in Megaton is ever going to assault one of our characters. Only the Player (us) can commit crimes in Fallout 3. We are always the instigators. In TES IV: Oblivion, some NPCs could commit crimes and pay for them with their lives, Tilmo the Stablehand and City Swimmer are two perfect examples. Since food was not added into their inventories, they'd occasionally try to fill their bellies, which meant they'd steal whatever they could. Beth made sure to "fix" this for Fallout 3, which means NPCs can never commit true crimes in this latter game.

Note that pwning Mister Burke should be okay, since he is not part of any Megaton factions. I have not tested this personally though
.

Conditions for the lesser Major Crime look like this...

GetIsID aaaMegatonOfficer == 1.00 AND
GetMajorCrimeCount >= 1.00 AND
GetMajorCrimeCount < 5.00 AND
GetGold Reference: Player >= 200


Conditions for greater Major Crime ...

GetIsID aaaMegatonOfficer == 1.00 AND
GetMajorCrimeCount >= 5.00 AND
GetGold Reference: Player >= 1000


And don't forget to add the appropriate amount of caps removed in the Result Script (Begin) box.

Add Set aaaMegatonOfficerRef.Status to 2 into the Result Script (End) for lesser Major Crime.

Add Set aaaJailFallout3Quest.Arrest to 5 in the Result Script (Begin) box for greater Major Crime.

Add ...

Player.MoveTo aaaJailBookingXMarkerHeading
If (aaaMegatonOfficerRef.Status == 1)
Set aaaMegatonOfficerRef.Status to 4
EndIF


...in the Result Script (End) box for greater Major Crime.

3q). Toggle Goodbye on for both. Click OK and save.

Unfortunately, the game does not separate assaults and murders into two separate categories; both of these are considered Major Crime. So at this writing, I do not know how to make murders much more serious (more time, more caps needed) from assaults. The game does include several functions which include Murder and Killer (such as IsKiller) but all of these require reference IDs on NPCs to work, instead of simply working globally. I'm not adding a reference to every NPC in Megaton, that's silly.

The answer for now is to set a higher level of Major Crime, which breaks down into lots of assaults or one (or more than one) murder, at least as far as dialog is concerned.


3u). Make a third GREETING for the officer. This will be the final one, which she says if spoken to, after an arrest process has been completed (caps paid, time spent in jail). In my game, she simply says "I've got my eye on you..."

3v).. Toggle Goodbye on. Conditions go like this...

GetIsID aaaMegatonOfficer == 1.00 AND
GetScriptVariable aaaMegatonOfficerRef.Status == 2.00 OR
GetScriptVariable aaaMegatonOfficerRef.Status == 5.00 OR
GetScriptVariable aaaMegatonOfficerRef.Status == 7.00



RENDER window
4a). Go into the jail's cell. In the Object window edit a note.

4b). Describe some rules about how crime works in Megaton, and what is expected of the prisoner upon release. Basically, this is a list of rules. Something which explains how long each sentence shall last, corresponding to what sort of crime has been processed. Anything which the character possessed before arrest has now been put into that Evidence Locker, so explain this in the note's text as well.

Since a robot is going to get added into the jail, add some text explaining that the robot is who we'll speak to for food, cigarettes, and also to get out of jail when the sentence is over. There will eventually be an actual game message which explains how to get out of jail, too. All of that is coming.

4c). Drag this note into the jail's cell, behind bars.


OBJECT window > Actor Data > Quest
5a). Go into the Topics tab and find aaaGoToJail. This topic is somewhat simpler than paying caps, fortunately. Four Infos will need to be written up instead of eight. Each of these four Infos correspond to lesser or greater Minor Crime, or lesser / greater Major Crime.

Go To Jail can be added into the Topic Text slot.

The first Info is going to be used for Minor Crime less than 5. For most characters who aren't full criminals, but have made a slip-up, this is going to be the jail term for a first offense. "You've made some mistakes, it happens. Just make sure it doesn't happen again." In my game, the penalty for this is just one day. "I hereby sentence you to the term of one day..." the officer says.

GetIsId aaaMegatonOfficer == 1.00 AND
GetMinorCrimeCount >= 2.00 AND
GetMinorCrimeCount < 5.00


Toggle Goodbye on.

5b). In the Result Script (Begin) type or paste

Set aaaFallout3Quest.Arrest to 1
aaaMegatonCellDoorRef.Lock 100
aaaMegatonCellDoorRef.SetOpenState 0
.

5c). In the Result Script (End) box type

Player.RemoveAllItems aaaEvidenceLockerRef
Player.AddItem OutfitWasteland01 1
Player.MoveTo aaaMegatonJailPlayerXMarker
Set aaaMegatonOfficerRef.Status to 2


All the PC's items are removed and stored into that locker. Any stolen items should have also been removed by this point, and erased entirely from the game, however, sometimes they might slip by the officer or any NPCs who initially witnessed any crime(s).

OutfitWasteland01 is what the PC wears while in jail. It is important to make sure RemoveAllItems comes before the player gets that jail outfit, otherwise the game will remove these clothes as well.



5d) Three more Infos can get added: one for Minor Crimes of 5.00 or more, one for Major Crimes of less than 5.00, and one for Major Crime of 5 or more. Technically, these greater major crimes can equate to attempted murder or actual murder. These three infos will tally three days, ten days, and one month in jail respectively.

5e). Let's start with Minor Crimes greater than 4.00. Dialog can be more menacing. Our toon has stolen or pickpocketed multiple items, or trespassed for an extreme amount of time, ignoring somebody's warnings about this. So the officer isn't so nice. "You dirty thief. You mongrel of a trespasser. You have committed several minor crimes against the residents of Megaton. You are going to be incarcerated for three whole days.... "

GetIsID aaaMegatonOfficer == 1.00 AND
GetMinorCrimeCount >= 5.00


5f). Now, Set aaaJailFallout3Quest.Arrest to 2 goes into the Result Script (Begin) box instead of aaaJailFallout3Quest.Arrest to 1. Make sure aaaMegatonCellDoorRef.Lock 100 goes into this box, as well.

5g). Three of the four scripts which went into the lesser Minor Crime Result Script (End) box can simply be copy/pasted. Do not copy/paste the aaaMegatonOfficerRef.Status script.

5h). Follow the same process for Major Crime, making sure to change Set aaaJailFallout3Quest.Arrest to 3 and 4 respectively, for lesser and greater. Everything else gets copy/pasted, but again, leave the officer's Status script out of greater Major Crime's (End) box.


Click OK and save. Now, to make the officers fight our character, if Resist Arrest is chosen.

Main toolbar > Character > Packages
6a). Start a new package. I'm going to name its ID aaaResistArrestPackage.

6b). Change Package Type to Use Weapon.

6c). Toggle Any Object on, and find whichever weapon the officer shall use in the Object ID scroll-bar. I put WeapPoliceBaton in there. The weapon used in this bar MUST also be a weapon in the officer's inventory, otherwise the officer will simply try to use their fists. Note that if the officer has a second weapon (such as a gun) the officer may switch to this weapon type, especially if the first weapon is a melee piece, and some distance is involved.

6d). Toggle Target on, and find PlayerRef in the Ref scrollbar.

6e). In the Fire Count area there are two choices: Repeat Fire will cause the officer to keep using that weapon indefinitely, as long as the package is running. Number of blows will cause them to stop after X number of weapon swings, or rounds have been fired.

6f). Flags tab: toggle Always Run, and Weapon Drawn on. Enable Fallout Behaviour gets toggled completely off.

6g). Click OK. This package should not be attached to the officer, it will (instead) be triggered through a script.

Reopen the Quest window.

7a). aaaResistArrest is the final topic, and it's the easiest of all; we only need one Info. Type some menacing dialog. Since a second officer is going to join beating down the PC, this dialog should include that information. "You want to resist? Fine. But now my deputy is going to assist!"

GetIsID aaaMegatonOfficer == 1.00 AND
GetMajorCrimeCount >= 1.00 OR
GetMinorCrimeCount >= 1.00


7b). In the Result Script (End) box type Set aaaMegatonOfficerRef.Status to 3

7c). Toggle Goodbye on, Click OK. save.


Note: If other Megaton NPCs have also begun to attack before the arrest, they will continue to do so, unless the main script gets modified to include Status 3 as well as Status 2! However, they generally will not follow us out into the Wasteland.

I and an online friend have experimented with Resist Arrest quite a lot, going in and out of various cells and whatnot, just to see how far the officers will keep following our characters, continuing pursuit. Since NPCs don't follow the PC very well into different cells in this game, it is possible to run into (let's say) Moriarty's and get a breather, maybe use a Stimpack, assuming no other NPCs are attacking. It is also possible to leave this portion of the quest as-is. Yes, the officers have trouble following, but the problem is, eventually they WILL follow. And they'll follow everywhere, including the wasteland.

This will get fixed later on via scripts. Or you can just leave it this way, for those who want to try to pwn the officers outside of society. If they happen to follow us outside of Megaton, and encounter some enemy. Let's say, a radscorp. They will focus then on fighting this radscorp instead of us. Eventually it'll be their doom, if this doesn't get fixed later on.

Another possibility is to make other referenced NPCs (such as Jericho and Lucas Simms) join in the fight while our toon resists arrest! I have not added this into my game, but for those who want to make a real hardcore option, this is possible too.

But first, here's how to get the officers to do their beat-down.


7d). Open up the main (arresting) officer's script. Some of what's below has already been written, if you've been following this guide so far. But some new material also gets added...

scriptname aaaEnforcementOfficerScript

; Status 0 -- Not enough crime witnessed. Officers sandbox. Most “good” PCs remain Status 0 forever.
; Status 1 -- The PC has possibly been caught committing their first crime, Major or Minor.
; Status 2 -- Caps paid or jail chosen for 'lesser' Minor or Major crime. PC stays in Megaton if caps paid.
; Status 3 -- Resist Arrest chosen. 3-day timer starts, officers fight PC if Megaton's plaza entered.
; Status 4 -- Caps paid for 'greater' Minor or Major crime. PC teleported to "booking" area of jail.
; Officers will revert to Status 3 if PC re enters Megaton, while Status is 4.

; Status 5 -- Timer concludes after 3 days, causing officers to sandbox. 5 Can result from Status 3 or 4.
; Status 6 -- Next-to-last arrest process. Works in similar way as Status 1.
; Status 7 -- Last strike. If PC is arrested during 7, cannot reenter Megaton without getting attacked.
; Status 8 -- PC is 'banned' from Megaton. :-(


short Status

Begin GameMode

;------------------------------------------------------------
; Status 1 handles the first "lesser" arrest process
; if PC is caught committing at least two Minor, or one Major crime.
; PC remains in Megaton

If (Status == 0) && (Player.GetInWorldspace MegatonWorld == 1)
If (GetMinorCrimeCount >= 3) || (GetMajorCrimeCount >= 1)
Set Status to 1

EndIf
EndIf

If (Status == 1)
aaaMegatonOfficerRef.AddScriptPackage aaaArrestPlayerPackage

EndIf

;---------------------------------
; Status 2 causes the main officer to sandbox after arrest has taken place from Status 0 to 1.
; Triggers from lesser crime.
; PC remains in Megaton, unless he/she also went to jail.

If (Status == 2)
If (GetMinorCrimeCount < 5) || (GetMajorCrimeCount < 4)
aaaMegatonOfficerRef.AddScriptPackage aaaMegatonOfficerSandbox

EndIf
EndIf

;---------------------------------
; This script causes main officer to arrest PC a first time (potentially) for greater crime / Status 0.
; Or a second time (potentially) if lesser crime already been processed.
; PC is teleported outside of Megaton to the jail's 'booking' area, and must stay out of town 3 days.

If (Status <= 2) && (Player.GetInWorldspace MegatonWorld == 1)
If (GetMinorCrimeCount >= 5) || (GetMajorCrimeCount >= 4)
Set Status to 1

EndIf
EndIf

;---------------------------------------

; Status 3 makes both officers beat down the PC after Resist Arrest is chosen
; The quest's main script starts a timer which ends after 3 days.
; Officers will cease attacking after 3 days

; The officers will only fight if the PC enters Megaton's plaza area.

If (Status == 3) && (Player.GetInWorldspace MegatonWorld == 1)
aaaMegatonOfficerRef.AddScriptPackage aaaResistArrestPackage
aaaComplianceOfficerRef.AddScriptPackage aaaResistArrestPackage
Set aaaJailFallout3Quest.Arrest to 5

EndIf

;--------------------------------------------------

; Status 4 causes officers to attack if PC enters Megaton before main script timer has reset Arrest 5.
; Arrest == 5 and Status 4 trigger through dialog, from Resist Arrest and/or greater Pay Caps.

If (Status == 4) && (Player.GetInWorldspace MegatonWorld == 1)
Set Status to 3

EndIF

;--------------------------------------------------

; Status 5 is similar to Status 2. Both remain "neutral" if PC commits no more crimes.
; IF PC gets caught during 5, will be wanted for arrest two or three times by now.

If (Status == 5) && (Player.GetInWorldspace MegatonWorld == 1)
If (GetMinorCrimeCount < 7) || (GetMajorCrimeCount < 8)
aaaMegatonOfficerRef.AddScriptPackage aaaMegatonOfficerSandbox
aaaComplianceOfficerRef.AddScriptPackage aaaMegatonOfficerSandbox

EndIf
EndIf

If (Status == 5) && (Player.GetInWorldspace MegatonWorld == 1)
If (GetMinorCrimeCount >= 7) || (GetMajorCrimeCount >= 8)
Set Status to 6

EndIf
EndIf

;-------------------------------------------------------
; Status 6 is the next-to-last stage of arrest. Three or four strikes, by now.
; Works similar to Status 1.

If (Status == 6)
aaaMegatonOfficerRef.AddScriptPackage aaaArrestPlayerPackage

EndIf

;--------------------------------------------------
; Status 7 could mean final arrest, and last straw.
; If PC gets arrested during this phase, he or she is essentially BANNED from Megaton.
; Similar to Status 5

If (Status == 7) && (Player.GetInWorldspace MegatonWorld == 1)
If (GetMinorCrimeCount <=9) || (GetMajorCrimeCount <= 12)
aaaMegatonOfficerRef.AddScriptPackage aaaMegatonOfficerSandbox
aaaComplianceOfficerRef.AddScriptPackage aaaMegatonOfficerSandbox

EndIf
EndIf

If (Status == 7) && (Player.GetInWorldspace MegatonWorld == 1)
If (GetMinorCrimeCount > 10) || (GetMajorCrimeCount > 12)
Set Status to 8

EndIf
EndIf

;--------------------------------------------
; Status 8 means PC cannot enter town w/o being attacked

If (Status == 8) && (Player.GetInWorldspace MegatonWorld == 1)
aaaMegatonOfficerRef.AddScriptPackage aaaResistArrestPackage
aaaComplianceOfficerRef.AddScriptPackage aaaResistArrestPackage
LucasSimmsRef.AddScriptPackage aaaResistArrestPackage

EndIF

; ----------------------------------------------------------------------
;The scripts below deal with keeping the officer from running up like a maniac when not under arrest.
;Status is 0 by default, assuming the PC hasn’t got a Crime Count when the jail mod is activated.

If (Status == 0)

aaaMegatonOfficerRef.AddScriptPackage aaaMegatonOfficerSandbox
aaaComplianceOfficerRef.AddScriptPackage aaaMegatonOfficerSandbox

EndIf

End



> Some may notice it is possible to 'break' the way these arrests progress from Status 0 to Status 8, especially with Minor Crime. If somebody is witnessed stealing something, and the witness, or witnesses, starts beating the crap out of our character, I am assuming our character will be like most thieves. Most thieves in this situation will be upset that they've been caught. They'll get the heck out of that cell.

However, it is possible for somebody to stay in that one cell and keep stealing stuff while being witnessed, causing Minor Crime to rise and rise and rise to the maximum level of 8. I am assuming most gamers aren't going to do this. This sort of criminal is going to be withstanding some sort of beating or shooting while he/she is stealing all these items.

IF somebody is going to take this route, so that the maximum level of crime is recorded right away, what'll happen is the officer will arrest the player-character once this character is done stealing, and walks back into MegatonWorld. The PC goes to jail or pays caps. Gets teleported out of town. Once the timer resets, and the PC reenters town, guess what? He / she will immediately be arrested again, since MinorCrimeCount is past where the scripts above can record. Maybe there will be a third and fourth arrest as well.

It is possible to fix this somehow, of course. Anything is possible with scripts. But I am not going to do this in my own game, because it's too much work, and I've already been working on this project for over 5 months! For me, the answer is simple. Any thief I roll won't want to stick around if he or she has been caught stealing.



MAKING THE JAILBOT


OBJECT window > Actors > Creature > Robot > Protectron

8a). Right-click > Edit CProtectron, and select an ID and Name. I am calling it aaaJailbot and Jail Bot. Get it?

8b). Toggle...
No low level processing off.
Respawn on.
Allow PC Dialogue on.

8c). Traits tab: All the scroll-bars have already been set, so leave these alone. Change Alignment to Good.

8d). Stats tab: The robot is set to Level 3 by default, so it's an easy one to beat, for those who wish to do so. Problem is, if it's been destroyed before the PC gets thrown in jail... I am setting it up so that this is a bad idea. Reason is, the jailbot is going to be the one who eventually unlocks the jail's cell door, through dialog. It will also dispense food, for those who use mods which require eating. So for those modders who wish to keep all of that intact, set the Jail Bot to Essential.

8e). Factions tab: Remove from RobotFaction and add into MegatonResidentFaction and MegatonCrimeFaction.

8f). AI Data tab: Unaggressive, Average, Helps Nobody, and Neutral are fine.

8g). AI Packages tab: Remove any AI packages. These are going to be added in a later tutorial.

Everything else (Inventory, etc.) can be kept as-is.

8h). Click OK, then drag the Jail Bot into the jail cell.

8i). Double left-click on the bot. Toggle Persistent Reference on. Click OK. Save.


FINISHING THE JAIL QUEST

OBJECT window > Miscellaneous > Message
9a). Right-click > New into the Editor ID window. The MESG panel pops up.

9b). ID can be aaaMinorCrimeOneDay. This is going to be used for minor crime less than 5.00. Copy that ID so it can be pasted into the main script later.

9c). Title can be Go To Jail. And for Message Text I just typed "I have been thrown in jail for one day."

Toggle Message Box off.

9d). The Time Displayed slot has been set to 2 by default, meaning that the message gets shown for 2 seconds. This ain't enough for my sorry eyes, so I boosted this to 20, just so I have enough time to read each message.

Click OK. Three more MESGs can be made, corresponding obviously to minor crime more than 4.00, Major Crime less than 5.00, or attempted murder.

9e). A final MESG can be made to indicate the jail term has ended. ID in my game is aaaFreeFromJail. Follow steps 7b through 7c to make a "My jail term has now ended" message.

9f). Hmm, one more message. I made aaaCrimeClearedMessage, which is going to show if the criminal resists arrest, or is moved out of town after paying caps. This message says "Three days have passed. It may be safe for me to reenter Megaton by now."


OBJECT window > Actor Data > Quest > Quest Data
10a). Reopen the main script. Here is what it'll look like in total.

scriptname aaaJailScript

short Arrest

short Timer1
short Timer2
short Timer3
short Timer4
short Timer5

short StartDay1
short StartDay2
short StartDay3
short StartDay4
short StartDay5

Begin GameMode

;------------------------------------
;Script below deals with stopping combat against PC, once PC has stepped into Megaton's plaza.
;NPCs will sometimes try to fight PC after crime has been committed. This script stops these fights.

If (Player.GetInWorldspace MegatonWorld == 1)
PlayerRef.StopCombatAlarmOnActor

EndIf

;------------------------------------------------------
;The script below deals with Minor Crimes of 4.00 or less
;This causes the PC to get locked in jail for 24 hours
; Officer's Status remains at 2.

If (Arrest == 1) && (Timer1 == 0)
Set Timer1 to 1
Set StartDay1 to GameDaysPassed
ShowMessage aaaMinorCrimeOneDay

EndIf
EndIf

If (Timer1 == 1)
If ((GameDaysPassed - StartDay1) >= 1)
Set Timer1 to 0
Set Arrest to 0

ShowMessage aaaFreeFromJail

EndIf
EndIf

;------------------------------------------------------
;The script below deals with Minor Crimes of 5.00 or more
;This causes the PC to get locked in jail for 3 days

If (Arrest == 2) && (Timer2 == 0)
Set Timer2 to 1
Set StartDay2 to GameDaysPassed
ShowMessage aaaMinorCrimeThreeDays

EndIf
EndIf

If (Timer2 == 1) && (aaaMegatonOfficerRef.Status == 1)
If ((GameDaysPassed - StartDay2) >= 3)
Set Timer2 to 0
Set Arrest to 0
Set aaaMegatonOfficerRef.Status to 5

ShowMessage aaaFreeFromJail

EndIf
EndIf

If (Timer2 == 1) && (aaaMegatonOfficerRef.Status == 6)
If ((GameDaysPassed - StartDay2) >= 3)
Set Timer2 to 0
Set Arrest to 0
Set aaaMegatonOfficerRef.Status to 7

ShowMessage aaaFreeFromJail

EndIf
EndIf

;------------------------------------------------------
;The script below deals with Major Crimes of 4.00 or less, namely assaults
;This causes the PC to get locked in jail for seven days.
; Officer's status remains at 2

If (Arrest == 3) && (Timer3 == 0)
Set Timer3 to 1
Set StartDay3 to GameDaysPassed
ShowMessage aaaMajorCrimeOneWeek

EndIf
EndIf

If (Timer3 == 1)
If ((GameDaysPassed - StartDay3) >= 7)
Set Timer3 to 0
Set Arrest to 0

ShowMessage aaaFreeFromJail

EndIf
EndIf

;------------------------------------------------------
;The script below deals with Major Crimes of 5.00 or more, namely excessive assaults and murders
;This causes the PC to get locked in jail for one month

If (Arrest == 4) && (Timer4 == 0)
Set Timer4 to 1
Set StartDay4 to GameDaysPassed
ShowMessage aaaMajorCrimeOneMonth

EndIf
EndIf

If (Timer4 == 1) && (aaaMegatonOfficerRef.Status == 1)
If ((GameDaysPassed - StartDay4) >= 29)
Set Timer4 to 0
Set Arrest to 0
Set aaaMegatonOfficerRef.Status to 5

ShowRaceMenu
ShowMessage aaaFreeFromJail

EndIf
EndIf


If (Timer4 == 1) && (aaaMegatonOfficerRef.Status == 6)
If ((GameDaysPassed - StartDay4) >= 29)
Set Timer4 to 0
Set Arrest to 0
Set aaaMegatonOfficerRef.Status to 7

ShowRaceMenu
ShowMessage aaaFreeFromJail

EndIf
EndIf

;-------------------------------
;The script below is what cancels the Officers' Resist Arrest AI, causing them to mellow.
;This allows us to reenter Megaton.

If (Arrest == 5) && (Timer5 == 0)
Set Timer5 to 1
Set StartDay5 to GameDaysPassed

EndIf
EndIf

If (Timer5 == 1) && (aaaMegatonOfficerRef.Status <= 4)
If ((GameDaysPassed - StartDay5) >= 3)
Set Timer5 to 0
Set Arrest to 0
Set aaaMegatonOfficerRef.Status to 5

ShowMessage aaaCrimeClearedMessage

EndIf
EndIf

If (Timer5 == 1) && (aaaMegatonOfficerRef.Status == 6)
If ((GameDaysPassed - StartDay5) >= 3)
Set Timer5 to 0
Set Arrest to 0
Set aaaMegatonOfficerRef.Status to 7

ShowMessage aaaCrimeClearedMessage

EndIf
EndIf


End



Note Arrest 4. When its timer concludes, ShowRaceMenu allows us to change our character's hairstyle / looks. After a month in jail, hair probably won't look the same.


10b). Save, Click OK (closing the Quest window) and save.

The final touch is to give the Jail Bot some dialog and responsibilities. This bot will be in charge of feeding the PC, dispensing cigarettes, and finally, unlocking the jail. I am also going to give the Jail Bot a Patrol package. Patrols get described in the post directly below this one.

OBJECT window > Actor Data > Quest > Topics tab

Start a new quest. This quest needs to be separate from the Jail quest already written. Keep in mind that the way I am writing this will make the PC stay in jail in REAL TIME. ph34r.gif This idea is hardcore, of course. Those who want to spend all their time at once can simply sleep in the bed over and over, or come up with a way to move time forward more quickly, somehow.

11a). Three GREETINGs are needed. First one will deal with dinner. The PC is going to have a choice of eating, not eating, or getting a pack of cigarettes. "You ... look ... starved. Want .... some .. grub?" goes the dialog.

11b). Toggle Say Once a Day on.

11c). Conditions are as follows...

GetCurrentTime > 17.000 AND
GetCurrentTime <= 22.000 AND
GetIsID aaaJailBot == 1.00


Note that the Jail Bot will dispense food or ciggies even if the PC is not in jail. To fix this, add another short variable into the main script. Call it Incarceration. You'll then need to go through the rest of the main script, adding Set aaaJailFallout3Quest.Incarceration to 1 for each of the four timers. A GetQuestVariable can then be added to the topic for food & cigs. Make sure to turn this off once the PC gets out.

11d). In the Choices window, add aaaFoodYes, aaaFoodNo, and aaaSmokingTopic. Or any other topics desired.

11e). Let's start with aaaFoodYes. "Yes I am hungry" can go into the Topic Text slot. "We have an .... excellent. Selection of .... all kinds of grub," says the Jail Bot.

Toggle Say Once a Day and Goodbye on.

11f). The same conditions can be copy-pasted from the bot's initial GREETING.

11g). In the Result Script (End) box, type whatever is desired. I am adding. Player.AddItem JunkFood 1, Player.AddItem BrahminSteak 1, and Player.AddItem NukaCola 1.

11h). "No I am not hungry," can go into the Topic Text slot for aaaFoodNo. This is for roleplaying only, for those who have a toon who is some sort of hunger strike.

Only the bot's GetIsID is needed here. Toggle Goodbye on. Toggle Say Once a Day on.

This post has been edited by Renee: Jun 19 2022, 05:53 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Jun 20 2020, 04:55 PM
Post #60


Councilor
Group Icon
Joined: 19-March 13
From: Ellicott City, Maryland



Making a Patrol package. Game: Fallout 3


Good day. Today I am going to discuss how to make an NPC patrol a fixed area, without just having them Wander or Sandbox aimlessly. This sort of package comes in handy when we want this NPC to do anything more specific than just move aimlessly.

When trying to add a patrol to a new cell (or any sort of area where an NPC will walk in an area without navmesh), it is important to add navmeshes to this cell. This sort of thing is rather complicated to describe, but this tutorial can help. Here is Beth's official tutorial on navmesh.

-------------------------------

Now, for the Patrol AI part.

Firstly, there are two types of NPC patrols. Generic NPCs (such as raiders) have a different method than named NPCs. To see a well-detailed video on generic patrols, click here.


And here is the video link for named NPCs, narrated by a modder with a British accent.

https://www.youtube.com/watch?v=VRzPxjeW750

But I am also going to describe how these work step-by-step.

--------------------------------

1). Create or edit an NPC, unless an NPC who's going to patrol has already been added into the game. It is possible to make vanilla Bethesda NPCs patrol as well, though this can get risky of course.

Note: for best results with named NPCs, where it says Template Data, make sure that ActorBase's scroll-down menu is set to NONE.

2). OBJECT window
Go into World Objects > Static, find Xmarker. Drag an Xmarker into the same cell as the NPC. Put this Xmarker onto the FIRST point you'd like the NPC to walk to.

3). RENDER window
Ctrl + D to duplicate this X-marker, and move it to some other area which will be the second point of the NPC's patrol. We can keep duplicating as many patrol points as we'd like.

4). Give each Xmarker its own Ref ID. Though this is not fully necessary (Beth sometimes uses generic markers with no references) it helps to know where the NPC is going to go more specifically, by naming these references and numbering them (aaaPoint1, aaaPoint2, aaaPoint3... etc.). Later on when the patrol package is being made, we can view these Xmarker points in a window.

5). Double left-click on the first X-marker. Go to its Linked Ref tab (this tab might be hidden in the row which starts with 3D Data, so use the < arrow to move to the left until the Linked Ref tab can be seen).

6). Click the "Select Reference in Render Window" button. Now the cursor gets moved into the Render window again, it will turn into a red circle with a + in its middle. Move the cursor until it is over the second patrol point, and it should turn white. Once it is white, click (maybe double-click) on the X-marker which will become the second patrol point.

7). Click OK. There should now be a green colored line going from the first patrol point to the second.

8). Repeat steps 5 through 7 with any other X-marker patrol points. If the patrol path is to go around and around in a loop, click the final X-marker and link it to the first one.

9). Double left-click on the NPC who will patrol, opening up its Reference panel, and click Edit Base. Go into the AI Packages tab. Right-click > New in the Editor ID box.

10). Give this package a unique ID.

Package Type: Patrol

11a)
. Starting Location: there is a button under these words which says "[none] n [none]". Click on this and choose Near Reference, and then specifically find the first Xmarker by selecting Select Reference in Render Window. Notice how in the Patrol Point List it will actually list all the different points of the patrol.

Click OK.

11b). Make sure Radius stays at 0, and "Repeatable" stays toggled on if the NPC is supposed to repeat this patrol.

11c). Flags tab-- Toggle Must Complete on. "Continue if PC is near" can also be toggled on if the Patrol is not working for some reason. I also like toggling Enable Fallout Behavior off, but Hellos to Player, Reactions to Player Actions, and Allow Idle Chatter on.

Click OK and close everything. SAVE all work.

12). Double left-click the NPC again, Find the Linked Ref tab. Click on the "Select Reference in Render Window" button, and link the NPC to the first X-marker patrol point. Click OK. There should now be a yellowish-green line going from the NPC to the first Xmarker.

That is the basic patrol path. Once we're back in-game, the NPC will move from point to point in a rather nervous fashion. Thankfully this can be slowed down. It is possible to modify how long the NPC stays at various patrol points, and other fun stuff.

13). RENDER window
Click on one of the X-markers which has been linked. Let's say we want the NPC to stay here for awhile. Click on the Patrol Data tab.

Idle Time defaults to 0.000, with that first digit being minutes. Change this to whatever is desired. It is not exactly accurate, but if 10.000 goes in this slot, the NPC will move after roughly 10 in-game minutes. 60 = an hour, 360 = 6 hours, and so on.

Topic scroll-bar: if we've already created a specific dialog topic in the Topics tab, and wish to use this topic AT this particular patrol point, scroll down and find it. The NPC will say this when standing at this point. This can also be triggered via quest topics too, of course.
....


This post has been edited by Renee: Aug 20 2020, 02:40 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

6 Pages V < 1 2 3 4 5 > » 
Reply to this topicStart new topic
9 User(s) are reading this topic (9 Guests and 0 Anonymous Users)
0 Members:

 

- Lo-Fi Version Time is now: 19th March 2024 - 11:10 AM