Welcome Guest ( Log In | Register )

> Renee's Modding Thread
Renee
post Feb 25 2018, 01:30 PM
Post #1


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



Mod-making thread basically, which focuses heavily on quest-making. The first two tutorials (How to make a fetch quest and how to make a kill quest) are very hand-holdy. They are designed for those who are just starting to learn the art of quest-making. Other tutorials get more advanced, as my wacky ideas have pushed their boundaries.

Just click on any of the links in the post below this one. smile.gif


Bethesda Units. (How distance compares in-game to real-life).

Xpadder Walkthrough page. Xpadder is a site which allows gaming controllers to mimic the key & mouse functions. Xpadder, or similar programs such as Joy to Keys, are absolutely crucial to get the most out of older games such as Arena, Daggerfall, Morrowind, and Oblivion, for those who prefer controllers. They can also be used for newer games (Fallout 3/NV or Skyrim) to provide alternate controlling scenarios during times when a game's native D-pad arrangement needs to be shut off.




This post has been edited by Renee: Apr 16 2024, 06:27 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Replies
Renee
post Dec 11 2022, 11:41 PM
Post #2


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



Get a Job! Game: TES V: Skyrim

I wanted to make one of my characters in this game get a job working for Corpulus Vinius of the Winking Skeever in Solitude. The idea is going to be that my lady becomes a barmaid. She shows up looking for work, speaks briefly to Corpulus, who gives her a job. Once she's officially hired my barmaid then goes from patron to patron, asking if they'd like anything. Each patron either declines her service or accepts.

This does seem like a pretty useless idea for a mod, I'll admit. But I wanted to use this scenario to learn how variables work in the Creation Kit. Others out there might want to use some of these ideas for something more adventurous: maybe collecting pelts for a skinner, maybe collecting ores for a smith, and so on.

When I was involved more with TES 4: Oblivion, Sarah Phimm became a 'bar wench' as well, toiling for Mog gra-Mogak in Skingrad. She would make food, give it to Mograk several times during her shift, and make a menial amount of money. I was able to make this happen after installing Oblivion Jobs, but I also enhanced this mod with my own quest and dialog, so that Sarah could wait tables, making occasional tips (or not). Some customers were grateful, others were rude, and so on. All of this was easy to do. So easy, I didn't even bother writing a homemade tutorial for myself at the time, explaining how this was accomplished.

For Skyrim things are tougher, of course. I installed a jobs mod for Skyrim a few years back, but it required the USLEEP patch, which broke my game. CTDs between cells and worldspaces. rolleyes.gif Obviously we can't have that. So it's time to make our own content.

Now, there are a myriad of ways this can be made to work. For instance, there could possibly be a barrel full of supplies. Every time somebody asks for, let's say, a beer, she'll go to that barrel and see if there's a beer there. If there is, she returns to the table and delivers the beer, and there'd obviously be dialog for this. If not, there'd be dialog for that.

We can also make it so Corpulus gives a bunch of alcohol right at the beginning of her shift. Every time a sale is made this causes a tally to count. Perhaps we can use GetItemCount for this scenario.

Finally, another way to do this is every time somebody wants a drink, she returns to Corpulus, who gives her one. Then she returns to the alcoholic patron. -- That's the way I'm going to do this: one at a time. Also, I'm going to make this quest so that there's an end possibility of either quitting, or getting fired. laugh.gif

1). Open the Creation Kit and start a quest. Give it an ID (I'm going with aaaBarmaidJob), give it a name, make Priority 40.

I like 40 because what'll happen is the game will put some dialog up top, bumping the "service" dialog I'm about to write down a few notches. This makes many other topics available through that NPC seem more important. And isn't this true of real bars? People get drunk, then they want to tell us their whole life story. wacko.gif Finally, the bartender needs to ask "Can I get you anything?"

Click OK (so other quest tabs open up). Save.

FYI: To figure out how to make something like this operate I found a quest in the Creation Kit called FavorJobsBeggars. I wanted to study how this quest works because of its simplicity. Beggar asks for a coin, we give him/her a coin. For this, we get The Gift of Charity, short-lived magical effect which fortifies Persuasion. Simple enough, or so it would seem. Turns out, I had to come up with some other ways to make my idea work, which has zero similarity to that beggar quest.

OBJECT WINDOW > Character > Quest
2). Reopen the quest. On the Quest Data page, choose Side Quests for the Type scroll-bar.

3). Start Game Enabled should be toggled on by default. But toggle Run Once off.


4a). Click on the Quest Stages Tab. Five stages are needed: I'm going with 0, 10, 50, 99, and 100.

Stage 0: Toggle Start Up Stage on. Right-click > New into the top Log Entry box so it says EMPTY.

Stage 10: Right-click > New into the Log Entry box and do nothing else. During this stage we're going to speak to the innkeeper, the shopkeeper, whomever. Dialog will be added, during which we'll ask if there are any jobs. And of course there are.

Stage 50: We're hired on the spot! cake.gif Right-click > new into Log Entry. In the lower Log Entry box type "I have found a job", or whatever.

Stage 99: Right-click > New, etc. Toggle Shut Down Stage and Fail Quest on. During this stage we can possibly get fired. In real life, we can get terminated for all sorts of reasons: insubordination, not showing up, showing up late, and so on. For the purposes of this tutorial, I'm keeping it simple. The only way we can get fired is if we don't sell any drinks at all. Of course, the possibility of losing our job is near-impossible for obvious reasons. I.e., IT'S A BAR!!!

> Type "I have not made enough money, so I have been let go from my job", or whatever.
> In the Papyrus Fragment box, type Stop()

Stage 100: In this case, we "beat" the quest by quitting. laugh.gif Wouldn't that be nice. Right-click > New into the Log Entry box and type "I have quit my job........"

> Toggle Shut Down Stage and Complete Quest ON.
> In the Papyrus Fragment box, type Stop()


4b). Click OK and save.

Reopen the quest, and click on Dialogue Views or Player Dialog. I'm more comfortable with Dialogue Views so that's what I'm using for the rest of this lesson.

5a). Right-click > New into the vertical left window of the Dialog Views page and type an ID. I'm typing aaaJobQuestHiringBranch. Click OK.

5b). Highlight the ID just created and right-click > Create Branch into the large window on the right. Give this Branch a unique ID and click OK.

5c). Right-click > Edit Topic into the gray box within the yellow box. The Topic panel pops up. Give this topic an ID and type some Topic Text. I've got aaaJobQuestYoureHired for an ID. For Topic Text I've got "I'd like a job. Are you hiring right now?"

5d). Click OK twice, closing the Topic panel. Probably a good idea to also click OK on the Quest window as well, so we can save.

5e). Reopen the quest. The same page should open, so right-click > Edit Topic into the gray box, and right-click > New into the large Info window.

5f). Type the proprietor's Response Text. "Sure, we could use somebody here. Have you ever worked as an X before?" ... X being woodchopper, bar wench, hunter / gatherer, whatever.

5g). Here are the conditions I put into the Conditions tab.


GetStage Quest: aaaBarmaidJob < 10.00 AND
GetIsID Actor: 'CorpulusVinius' == 1.00


Right-click on either of these and choose Copy All Conditions.

5h). In the End: Papyrus Fragment box type GetOwningQuest().SetStage(10)

5i). Left-click on the Response text written a moment ago and click Record. Record your own voice, have someone else do it, or simply record silence. Once that's done, click Stop. Click Save. Toggle From WAV on, and click Generate Lip File.

5j). Click OK, closing the Response Text panel. Make sure Has LIP File and Force Subtitle are both toggled on (those who recorded actual voice might not need Force toggled on) and click OK.

That's the opening text. Now the PC's going to ask for a job.

6a). Return to steps 5c through 5f, except right-click > Add Topic into the yellow box, so some follow-up dialog can be made. For Topic Text I've got "I've never held a job before, is that okay?" since this answer follows the question asked during 5f.

The bartender's Response Text is "Sure I could use a second barmaid...Shift hours range from 11 in the morning until 6 at night, but you don't have to be here for all seven of those hours..."

Basically, the idea I've got is that my character will need to sell at least 1 bottle of ale to keep her job, and also get paid. She works anywhere between 11:00 and 18:00, but can only get paid after 18:00, because that's when the shift ends, and Corpulus has a dialog change. This is absolutely silly, of course. In real-life we'd need to show up near 11 AM, or else. But this is a game. So I'm trying not to be so strict. 🕥

6b). Right-click > Paste Conditions into the Conditions window, but change GetStage to 10. Altogether now I've got....

GetStage Quest: aaaBarmaidJob == 10.00 AND
GetIsID Actor: 'CorpulusVinius' == 1.00


6c). Type GetOwningQuest().SetStage (50) into the End: Papyrus Fragment box, or simply copy it from the Topic Info panel created before. If you copy/paste, make sure to change the 10 to 50. Stage 50 is where the quest shall live as long as we're working at this job.

Click OK, closing the Topic Info panel.

6d). Left-click on the first topic's middle area, so that a hand icon shows onscren. Drag the hand over to the second topic. (Those who use Player Dialog will need to use the Link To window to link the first topic to the second.)

Click OK. There we go. Our character's got a job, thanks to that nifty speech process. Next, we're going to create our own variable. In the CS or GECK, many quest and script variables coincided with whichever quest or script the variable was associated with. For the Creation Kit (as usual) this is often done differently. We can literally declare a variable (actually, they're called global variables) which has nothing directly to do with any particular quest, or a script within that quest. Is this also how it's sometimes done in the old editors? Probably so, but I've never utilized variables in such a way in those older programs.

7a).. OBJECT window > Miscellaneous > Global
All the game's global variables are listed in the larger Object window. Right-click > New and give the new variable an ID. I am typing aaaDrinksBought into the ID slot. COPY this name and put it on a Notepad page, so it can be pasted later.

7b). Variable type can be Short if we want the game to count whole numbers (such as 1.00 and 4.00) or Float if we want a decimal point to float back and forth (0.75, 1.50, etc.). In most cases Long is not used. And I'm keeping my variable on Short.

7c). Leave the Value at 0 and do NOT toggle Constant on. Apparently, Constant means the game won't be able to count or change the value for whatever items we're dealing with. Whichever value the variable starts at is where it will constantly stay, see?

7d). Click OK and save.


8a). OBJECT Window > Character > Quest
Select the Quest Data tab. Now, right-click into the Text Display Globals window (which is the lower right) and choose New. Find the global just created. Click OK.

Apparently we don't have to do this 100%. Bethesda never seems to use this window. But it's an option, which makes things organized a bit nicer.

8b). Click OK (closing the Quest window) and save.


9a). Reopen the quest, and select the Misc tab. Let's give the boss a greeting. Right-click > New into the middle window and select Hello. Highlight this and right-click into the right window and follow the typical process for making dialog. "Ah, look who's here." Follow all the processes for recording (even if it's just silence), and so on.

9b). Conditions are...

S GetGlobalValue Global: 'GameHour' > 11.00 AND
S GetGlobalValue Gloval: 'GameHour' < 15.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


Note that it is possible to make a tardiness factor at this point. For those who really want to be strict just change the second GameHour from 15.00 to 12.00. Make a second Hello which says "You're late! This better not happen again." A variable can then be used to make it so the boss only gives one chance. Once that variable climbs from 0 to 1 to 2 (as we're late twice), we're 86'd! ⌚

A final hello can be added, which states "Sorry, but gonna have to let you go..." which setstages to Stage 99. verysad.gif


9c). Locate the Hours Until Repeat slot, which is to the right of the other flags. Normally this is set at 0.00. Change this to 12.00. This is done so the bar owner won't keep greeting us with the same greeting. Basically, the shift lasts from 11:00 until 18:00, which is 7 hours. But we want to give a bit of extra time just so he doesn't keep delivering the same Hello on the same day.

Note: There is no Say Once a Day flag like there was in Fallout 3's/NV's GECK, so what just happened in 9c can simulate this.

9d). Now switch to Dialogue Views or Player Dialog. I am right-clicking > New into the Dialog Views window again, then following the steps above for making a new branch, and adding a topic to this branch. 5a through 5j. This phase of the quest is about us showing up for work, and speaking to whoever runs the place. In my game I've got...

ID: aaaJobStartWork

Branch: aaaJobStartWorkBranchTopic

Topic Text: "I'm here! What's going on at the Skeever today?"

Response Text: "Ah, glad you have arrived. Let's see if we can make some sales today."

Conditions:
S GetGlobalVariable Global: 'aaaDrinksBought' == 0.00 AND
S GetGlobalValue Global: 'GameHour' > 11.00 AND
S GetGlobalValue Gloval: 'GameHour' < 18.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


The way I've got this set up, the hire will need to speak to his/her boss first, before selling any drinks. This is not 100% necessary, it's simply the way I prefer things. `=

9e). Change the Hours Until Repeat slot from 0.00 to 12.00.

For those who are not making a job in which we're constantly interacting with the boss; let's say the boss is spoken to once, and then we're off to go hunting animals or whatever for the next day or however long, Hours Until Reset might not be needed at all.

9f). Select either of the Papyrus Fragment boxes: Begin or End. Type a semicolon and follow it with any text at all. Doesn't matter what it is, but perhaps it's best to put a description of what we want to happen at this moment.

So for instance I am typing ; Here is where the first variable gets set into the End: Papyrus Fragment box. This actually doesn't do anything in the game at all, but it's important to get a simple script into the Script Name window. We cannot add properties here unless there's a script already present.

9g). Click OK, and click OK again. Reopen the quest.

9h). Highlight the script so it turns blue. Click the Properties button. And select Add Property.

9i). Find Global Variable in the Type scroll-bar. For Name, we can just put the ID name of the variable created earlier. So I am putting aaaDrinksBought into the Name slot. This can simply be copy/pasted from that Notepad page started earlier.

>> Thing is, if we're constantly typing the variable name into this slot and in other areas of the quest's windows, and let's say we get it wrong. This can cause error messages if we consistently get it wrong!

9j). Click OK. Left-click on the property so it turns blue. If you gave the property the same name as the variable, it should automatically appear in the Pick Object scroll-bar. If not, find the variable.

Click OK, and OK again, closing the Quest panel. Note that it's important to keep OK-ing and re-opening the Quest panel, because this saves any actions just performed. If this is not done; if the modder just skips to the next step that is, have fun dealing with a litany of errors. mad.gif

9k). Reopen the quest window. Now type ; aaaDrinksBought.SetValue(1) into the End: Papyrus Fragment box. Compile that bit of code WITH the semi-colon in front. Now remove the semicolon and compile again. Voila. No error messages? Go ahead and close the Quest window and save.

On the other hand, if there ARE error messages do NOT press OK. Instead, click on the red X in the top right corner of the Topic Info panel and try again. The worst thing we can do in Skyrim's Creation Kit is introduce faulty script fragments into the game.

The next bit of dialog in my game is going to come from any customers who dwell within Winking Skeever.


10a). In the Dialogue Views or Player Dialog tabs once again. Here's what I've got in my game.

ID: aaaBarWenchServiceID

Branch: aaaBarWenchPatronServiceBranch

Topic Text: "Can I get you anything?"

Response Text: "Yeah, gimme an ale."

Conditions:
S GetIsID Actor: 'CorpulusVinius' != 1.00 AND
S GetIsID Actor: 'Lisette' != 1.00 AND
S GetGlobalVariable Global: 'aaaDrinksBought' == 1.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetInCell Cell: 'SolitudeWinkingSkeever' == 1.00


> As we can see, anyone can get asked this question "Can I get you anything?" except the bar's owner, or Lisette. Lisette is the lady who plays music. Um, she's the bard.

>> Do not use the Prompt slot for this topic. We're going to want just ONE topic to click on, but two or more infos as a result.

10b) Has LIP File and Force Subtitle should both be toggled after recording is done. Toggle Random as well. This is done so the patron can refuse service, which we'll write up in a moment. Goodbye can be toggled, though this is optional.

10c). Change the Hours Until Reset slot to some small amount, such as 0.25. This allows a little time, so the same "Can I get you anything?" topic theoretically doesn't immediately show up (from the same NPC) after we've retrieved money, gotten a drink from Corpulus. Keep in mind I've got my timescale set to 30. Those with slower timescales, or even Skyrim's default of 20, might want less time than a quarter-hour.

0.25 (a quarter hour in-game) translates to roughly 15 seconds in our time with timescale of 30. I think..

10d). Type a semicolon and follow it with some text into either Papyrus Fragment box and compile. I just typed ; Patron gives barmaid money. Click OK twice. Reopen the same quest windows.

Now we need to make two properties: one for money, and one for the global variable. Let's start with the variable.

10e). Highlight the TIF script so it turns blue. Click the Properties button. And select Add Property.

10f). Find Global Variable in the Type scroll-bar. For Name, we can just put the ID name of the variable created earlier. So I am pasting aaaDrinksBought into the Name slot.

10g). Click OK. Left-click on the property so it turns blue. If you gave the property the same name as the variable, it should automatically appear in the Pick Object scroll-bar. If not, find the variable.

Click OK, and OK again, closing the Quest panel.

10g). Reopen the quest window. Now type ; aaaDrinksBought.SetValue(2) into the End: Papyrus Fragment box. Compile that bit of code WITH the semi-colon in front. Now remove the semicolon and compile again.

10h). Highlight the script and press the Properties button. Click Add Property.

10i). Find MiscObject in the scroll-bar and type Gold001 into the Name slot. Click OK. Click Edit Value. Again, Gold001 should automatically be in the Pick Object scroll-bar. Click OK.

Click OK twice more (closing the Topic Info and Quest panels) and reopen.

10j). Type Game.GetPlayer().AddItem(Gold001, 5) into the Begin: Papyrus Fragment box. Click OK twice more.

OPTIONAL: A sixth condition can be added to the stack above in 10a, which'll check to make sure the NPC has enough money in his/her pocket. Add GetItemCount MiscItem: 'Gold001' >= 5.00, and make sure the Run On scroll-bar has Target selected. Another script/property can be used to remove gold from the NPC.

This gets complicated though. It's beyond my capabilities as a modder, but let's also consider that eventually the NPC will run out of money! And once this happens, will that money ever respawn in their inventory? There's a bard mod which was used by Lopov a couple years back which did consider how much money was in the pockets of various NPCs, and somehow it also removed this money as they requested songs. Guess what? Eventually those NPCs would run out of money! blink.gif

Up to you, folks.


11a). Now let's add some dialog which'll allow the patron to refuse service. Go back to the same branch which was just made for serving drinks. Right-click into its center (which should either be white or grey) and select New Info.


Topic Text: "Can I get you anything?" -- essentially this is the same text which is used for "Yes, gimme an ale."

Response Text: "No, I'm good."

Conditions:
S GetIsID Actor: 'CorpulusVinius' != 1.00 AND
S GetIsID Actor: 'Lisette' != 1.00 AND
S GetGlobalVariable Global: 'aaaDrinksBought' == 1.00 AND
S GetStage Quest: aaaJob == 50.00 AND
S GetInCell Cell: 'SolitudeWinkingSkeever' == 1.00 AND


11b). After recording is done Toggle Has LIP File, Force Subtitle, and Random. Goodbye should also be selected. Make sure a small number is in the Hours Until Reset slot. This time I've got 0.50. Click OK.

Notice that Random is selected for either service choice: Yes or No. As my character moves from patron to patron, some will want a drink, others will not.

Now to make the innkeeper hand over some drinks.

12a). Yet another branch is needed. I think we're up to four of these so far. I've got something like this...

ID: aaaBartenderFetchDrinks

Branch: aaaBartenderFetchDrinksBranch

Topic Text: "Someone over there wants a drink."

Response Text: "Here ya go!"

Conditions:
PL GetItemCount: MiscObject: 'Gold001' >=5.00 AND
S GetGlobalVariable Global: 'aaaDrinksBought' == 2.00 AND
S GetGlobalValue Global: 'GameHour' > 11.00 AND
S GetGlobalValue Gloval: 'GameHour' < 18.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


12b). After writing up the Response Text I toggled Use Emoticon Animation off, selecting IdleGive in the Idle Animations/Speaker scroll-bar. This is obviously to make it seems like the bartender's giving a bottle to my toon.

12c). After recording, toggle Has LIP File, Force Subtitle, and Goodbye on.

12d).. Follow steps 10d through 10j to make a simple semicolon script, and a property for the money. Here is how to utilize them...

; Player gives money to boss
Game.GetPlayer().RemoveItem(Gold001, 5)


This time I put the gold removal script into the Papyrus: Begin Fragment box, as my character's supposed to be handing the money just paid over to the barkeep right away.

Click OK twice.

12e). Reopen. Make a second property following the steps above, except this time choose Potion in the Type scroll-bar. I've chosen aaaAleProperty as the property name, as for some reason just typing Ale caused problems. Once that was done I clicked Edit Value and manually found Ale in the scroll-bar.

12f). Click OK twice and reopen. In the Papyrus: End Fragment box type Game.GetPlayer().AddItem(aaaPropertyName, 1), with "aaaPropertyName" whatever you really named that property. Click OK 2x. Save.

12g). A third property can be made which bumps aaaDrinksBought.Setvalue(3), though this is optional. Without this addition, if we speak to the boss he or she will still have the "Someone over there wants a drink" and "Here you go" Topic Text and Response, meaning the player can just keep hitting the boss up for endless drinks!

But otherwise, there we go. Now my lady's got a drink she can serve.


13a). Start another branch, and this time ...

ID: aaaBarmaidServeDrinks

Branch: aaaBarmaidServeDrinksBranch

Topic Text: "Here you are."

Response Text: "Why thank you!"

Conditions:
PL GetItemCount Potion: 'Ale' >= 1.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetInCell Cell: 'SolitudeWinkingSkeever' == 1.00 AND
S GetIsID Actor: 'CorpulusVinius' != 1.00 AND
S GetIsID Actor 'Lisette' != 1.00


Flags: Has LIP File, Force Subtitle, Goodbye.

Script: ; Barmaid serves drink.

13b). In the Begin: Papyrus Fragment box create the same property as before using the steps above, but change the value: aaaDrinksBought.SetValue(1). This is done so the quest returns back to where it was before, and we can ask someone else if they'd like a drink. 🍷

13c). The same property for the drink can also be used: Game.GetPlayer().RemoveItem(aaaPropertyName, 1). I put this into the End: Papyrus Fragment box.

Click OK 2x. Next step is to make it so that the boss can pay us when the shift ends. We will also have the option to quit during this phase of the quest, or get fired (although as stated, my lady would really have to suck to get fired).

14a). Start yet another new branch.

ID: aaaBarmaidEndOfShiftID

Branch: aaaEndOFShiftBranch

Topic Text: "Looks as though my day is done."

Response Text: "Wonderful! Excellent service, today."

Conditions:
S GetGlobalVariable Global: 'aaaDrinksBought' == 1.00 AND
S GetGlobalValue Global: 'GameHour' > 18.00 AND
S GetGlobalValue Global: 'GameHour' < 23.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


Flags: Has LIP File, Force Subtitle, Goodbye.

Script: ; End of shift begins now

14b). Make a property for Gold001 and also the same variable (which I called aaaDrinksBought earlier).

Game.GetPlayer().AddItem(Gold001, 40)
aaaDrinksBought.SetValue(0)


Now that the global variable is set to 0 if we try to speak to the boss he won't have anything to say regarding the day's job. There'll only be the usual topics he normally offers (Have you heard any rumors?, etc.) before we barged in with our own content. And this is how it'll stay until 11:00 the next day, unless some after-hours dialog gets added.

But the quest is not over yet. We still need to have some dialog regarding getting fired, or quitting. tongue.gif An optional step is going into the Misc tab and making another Hello. "Ah, whatta day," says the boss.


S GetGlobalValue Global: 'GameHour' > 18.00 AND
S GetGlobalValue Global: 'GameHour' < 22.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


I gave 4 hours of leeway there just in case of emergency. tongue.gif


15a). Object Window > Miscellaneous > Global
Make a new global. I'm calling this one aaaFiredGlobal. Leave it on Short, and leave Value at 0. Copy this name and paste it onto the Notepad page.

15b). Reopen the quest, and click on its Quest Data tab. In the Text Display Globals window find the new global just added.

15c). Go to Dialogue Views or Player Dialog. Find the Topic/Info panel which deals with making the first sale. "Yeah, gimme an ale" says the NPC in my game.

15d). Follow the process above for making a Global property (left-click the TIF script so it turns blue, click Properties, Add Property, GlobalVariable in the scroll-bar, paste or type the name of the global in the Name slot, click OK (if the name already shows in the Pick Object scroll-bar, that is), OK, OK...

15e). Put aaaFiredGlobal.SetValue(1) into the Begin: Papyrus Fragment box. Compile. OK. OK.

15f). Reopen the quest and find the "end of shift" topic/info. Add a fifth condition which is GetGlobalValue Global: 'aaaFiredGlobal' == 1.00. And yes, I know it appears that Fired == 1, yet we're not being fired.

Altogether now we've got...

S GetGlobalVariable Global: 'aaaFiredGlobal == 1.00 AND
S GetGlobalVariable Global: 'aaaDrinksBought' == 1.00 AND
S GetGlobalValue Global: 'GameHour' > 18.00 AND
S GetGlobalValue Global: 'GameHour' < 23.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


15g). Finally, go to the "beginning of shift" dialog started in step 9a. Follow the process above for making a Global property (left-click the TIF script so it turns blue, click Properties, Add Property, GlobalVariable in the scroll-bar, paste or type the aaaFiredGlobal into the Pick Object scroll-bar. Click OK, click ok...

15i). Reopen the Quest window. Put aaaFiredGlobal.SetValue(0) into the Begin: Papyrus Fragment box. Compile. OK. OK.

That's the happy shift ending. Now for the sad one.


16a). Reopen the same quest/branch which was used for "end of shift", right-click into its center, and select New Info. Follow all the usual steps for making new dialog...

Topic Text: "Looks as though my day is done." (THIS won't need to be changed).

Response Text: "I'm afraid it is. Looks like you've bottomed out with sales today.
I'm afraid I'm gonna have to let you go..."

Conditions:
S GetGlobalVariable Global: aaaFiredGlobal == 0.00 AND
S GetGlobalValue Global: 'GameHour' > 18.00 AND
S GetGlobalValue Global: 'GameHour' < 23.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


Flags: Has LIP File, Force Subtitle, Goodbye.

Script: GetOwningQuest().SetStage(99) can go into the Begin or End Papyrus Frag boxes.


17a). Finally, let's take this job and shove it! There are three ways this can be done. Quit dialog can be made to (1) be an option at any time (2) be an option only after the shift is done or (3) be an option while we're working.

Start a new branch, and this should be the very last one.

ID: aaaBarmaidJobQuit

Branch: aaaBarmaidJobQuitBranch

Topic Text: "I'm taking this job and shoving it!"

Response Text: "But...but why? What am I going to do without you?" (I believe there is a Emotion Animation which makes the NPC cry or at least bow down in sadness.)

Flags: Has LIP File, Force Subtitle, Goodbye.

Script: GetOwningQuest().SetStage(100)

17b). Conditions vary. If we want the option to be able to quit at any time, thereby ending the quest entirely, all that are needed is something like...

S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


If we want to quit during work hours...


S GetGlobalValue Global: 'GameHour' > 11.00 AND
S GetGlobalValue Global: 'GameHour' < 18.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


And if we're doing this strictly after hours (effectively getting paid before we quit)...


S GetGlobalValue Global: 'GameHour' > 18.00 AND
S GetGlobalValue Global: 'GameHour' < 23.00 AND
S GetStage Quest: aaaBarmaidJob == 50.00 AND
S GetIsID Actor: 'CorpulusVinius' == 1.00


Thing is, for those who choose the anytime-quit scenario, the boss is always going to have that Topic Text we can click on at all times, which can be rather awkward. I think I prefer the after-hours scenario.


18). Don't forget to update your mod's SEQ file after all dialog is written up, or while it's being written, for those who are in the habit of testing along the way. This is especially true when going into the game, trying to speak to the boss or whomever, and none of our dialog is showing up. Here's how to do it (Click Here), in case a quick reminder is needed.

This post has been edited by Renee: Mar 8 2024, 07:15 PM


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Posts in this topic
Renee   Renee's Modding Thread   Feb 25 2018, 01:30 PM
Lady Saga   Tip: For Oblivion, Always use [url=https://www.nex...   Feb 25 2018, 01:35 PM
Renee   The Fetch Quest, Game: TES IV: Oblivion. So this...   Feb 25 2018, 01:51 PM
ghastley   The problem with the YouTube tutorials is that the...   Feb 25 2018, 04:25 PM
Renee   Awesome, ghastley. The problem with the YouTube...   Feb 25 2018, 05:18 PM
SubRosa   Excellent fetch tutorial Renee! I will probabl...   Feb 25 2018, 05:41 PM
Renee   Thank you. I tend to write up everything I do step...   Feb 25 2018, 11:40 PM
Renee   [color=green]The Kill Quest, Map Markers, and X ma...   Mar 2 2018, 11:16 PM
Turija   Great thread. I will have to think about what I c...   Mar 7 2018, 11:58 PM
Renee   Sweet Turija! See, I just learned a few new th...   Mar 8 2018, 02:53 AM
Renee   [b]How to repair Hair, Game: TES IV: Oblivion Thi...   Mar 13 2018, 02:27 AM
Renee   [color=#FF6600]How to make an NPC Vendor & Mec...   Mar 18 2018, 06:29 PM
Renee   [color=white]How to fix "Missing flowchartx32...   Mar 25 2018, 05:20 PM
ghastley   FWIW, you CAN paste into the command prompt window...   Mar 26 2018, 03:06 PM
Renee   Okay thanks, ghastley. I'll see if this works ...   Mar 29 2018, 05:18 PM
Renee   How to make a Fetch Quest (with multiple items). G...   Mar 31 2018, 11:36 PM
Renee   Each exterior cell is 4096 units by 4096 units or ...   Apr 3 2018, 02:56 PM
ghastley   At some time in the past I did a tutorial on how t...   Apr 10 2018, 07:33 PM
Renee   That'd be great. :)   Apr 10 2018, 08:15 PM
Renee   [color=#009900]Making a weather-changing item. Gam...   Apr 24 2018, 12:19 AM
Renee   [color=#996633]Faction-changing Armor and Clothing...   May 13 2018, 07:53 PM
Renee   Making an NPC Follower Game: Fallout 3 Note: this...   May 29 2018, 01:25 AM
Renee   Timer Scripts. Game: TES IV: Oblivion or Fallout 3...   Jun 10 2018, 11:53 PM
Renee   [b]Making a house for sale or rent. Game: TES IV: ...   Jun 24 2018, 03:37 AM
Renee   Cripes, it's been since JUNE since I've ad...   Aug 12 2018, 04:13 PM
Renee   [color=#CC9933]Gun Tutorial Game: Fallout 3 This ...   Aug 26 2018, 08:52 PM
SubRosa   Ignores Normal Weapon Resistance is a holdover fro...   Aug 26 2018, 08:59 PM
Renee   Thanks. I changed the info in my previous post. ...   Sep 2 2018, 12:55 PM
Renee   Another tip for making these bounty quests: I like...   Sep 29 2018, 06:50 PM
Renee   This post goes with the one above, and is going to...   Oct 12 2018, 02:41 AM
Renee   [color=green]Lizard Men! -- Game: TES IV: Obli...   Oct 25 2018, 10:59 PM
Lopov   Nice! :goodjob: I'll be using this mod whe...   Oct 25 2018, 11:25 PM
Renee   So it's possible to encounter them in Lake Ru...   Oct 26 2018, 12:04 AM
Renee   Making an NPC Vendor / Repairist. Game: TES IV: Ob...   Oct 28 2018, 02:08 AM
Renee   [b]SEQ Files, Game: TES V: Skyrim Requires the TE...   Oct 29 2018, 12:17 AM
Renee   [color=#996633]Making FOMODs through Fallout Mod M...   Nov 11 2018, 04:32 PM
Renee   ` Making an NPC follower Game: TES V: Skyrim ...   Dec 1 2018, 06:40 PM
Renee   [b]Making an NPC Vendor Game: TES V: Skyrim [b]1...   Dec 5 2018, 02:59 AM
Renee   Making a Book bump a quest stage Game: TESV: Skyri...   Dec 15 2018, 02:39 AM
Renee   [b]Skyrim Quest Tutorial (WORK IN PROGRESS, do no...   Dec 17 2018, 12:02 AM
Renee   Repeatable Bounty Quests II (innkeeper involvemen...   Dec 29 2018, 04:04 PM
mALX   This is an Awesome thread, Renee!!!   Jan 14 2019, 07:56 PM
Renee   Awesome, thanks so much. :) --------------------...   Jan 19 2019, 08:25 PM
Renee   Setting up a gamepad controller Game: Elder Scroll...   May 15 2019, 12:53 AM
mALX   Awesome! You got it working! By the wa...   May 15 2019, 01:55 AM
Renee   Awesome, thanks. I have noticed there's TONS o...   May 15 2019, 01:05 PM
Renee   Game: Fallout 3, How to use Zone Triggers to set q...   Jun 19 2019, 02:28 AM
Renee   How to transfer saves from Xbox to PC, Games: Obli...   Jun 26 2019, 12:10 PM
Renee   Making a generic NPC Enemy, [color=white] Game: TE...   Oct 29 2019, 10:53 PM
Renee   Repeatable Bounty Quests Game: [color=white]TESV: ...   Jan 5 2020, 05:47 AM
Renee   Repeatable Bounty Quests, How to add new locations...   Jan 29 2020, 01:46 AM
mALX   These are awesome tips! Thanks Renee!   Jan 5 2020, 06:26 PM
SubRosa   Wow. That is amazing.   Jan 5 2020, 07:54 PM
Renee   aw, well thanks. I appreciate your encouragement,...   Jan 5 2020, 10:48 PM
Renee   SetActorOwner https://www.creationkit.com/index.p...   Apr 1 2020, 11:43 PM
SubRosa   You can use this at the console. It is a great way...   Apr 2 2020, 12:28 AM
Renee   You can use this at the console. It is a great wa...   Apr 2 2020, 12:33 AM
Renee   USE THIS idea for Fallout3_Jail.esp. We're goi...   May 31 2020, 05:11 PM
Renee   Adding a Jail and enhancing Fallout's Crime Sy...   Jun 4 2020, 08:25 PM
Renee   Making a Patrol package. [color=#993300]Game: Fall...   Jun 20 2020, 04:55 PM
Renee   Horse Rentals. Game: [color=#006600]TES IV: Oblivi...   Jul 26 2020, 06:07 PM
Renee   Getting an Xbox controller to work on PC. Game: [c...   Jun 11 2021, 12:47 AM
Renee   [color=#996633]Trigger Zones, Game: Fallout 3 Fal...   Sep 27 2020, 12:47 AM
Renee   https://www.youtube.com/watch?v=wj6qGCT4isg...nnel...   Sep 28 2020, 02:55 PM
Renee   https://web.archive.org/web/20130429160307/...Obje...   Oct 29 2020, 11:17 PM
Renee   I have found a really good Daggerfall tutorial whi...   Nov 28 2020, 03:00 AM
Renee   More Dynamic NPCs! Game: [color=#663366]TES II...   Jun 24 2021, 02:36 AM
Renee   Getting the Take All button to work, Game: [color=...   Aug 20 2021, 06:40 PM
Renee   Setting fallback cell (instead of Tiber Septim) h...   Sep 1 2021, 01:12 PM
Pseron Wyrd   https://web.archive.org/web/20200218144220/...a-s...   Sep 1 2021, 04:32 PM
Renee   I agree, Wyrd. Now that I know why random stuff sh...   Sep 2 2021, 01:58 AM
Renee   Random Console Commands, Game: TES V: Skyrim This...   Jan 23 2022, 03:36 PM
Renee   How to make a ForceGreet. Game: [color=white]TES V...   Jan 23 2022, 07:24 PM
Lena Wolf   I thought this thread was for Oblivion? ;) Never m...   Jan 25 2022, 03:57 PM
Acadian   I thought this thread was for Oblivion? ;) ... P...   Jan 25 2022, 05:30 PM
Lena Wolf   Well, there are of course a lot of similarities be...   Jan 25 2022, 05:41 PM
Renee   Lena has a point. Maybe this thread can be moved t...   Jan 25 2022, 06:12 PM
Acadian   Okay, the mod projects forum is simply a collectio...   Jan 25 2022, 07:22 PM
Renee   Thanks, paladin!   Jan 25 2022, 08:44 PM
Renee   How to use the PC's face for an NPC. [color=wh...   Mar 13 2022, 10:11 PM
Renee   How to add a bounty to the Player via script. Gam...   Apr 1 2022, 01:21 AM
Renee   How to add the Player or NPC into a Faction via sc...   Apr 3 2022, 02:39 AM
Renee   How to fix "failed to load snowflake: Meshes...   Nov 27 2022, 04:20 PM
Renee   Installing Morrowind from Scratch Recently I had ...   Dec 3 2022, 02:53 AM
macole   Those Intervention scrolls sure come in handy. I ...   Dec 3 2022, 07:59 AM
Renee   Oops, I screwed up. :whistle: Was cleaning the nex...   Dec 3 2022, 02:26 PM
Renee   Traveling with an NPC. Game: TES V: Skyrim Here...   Jan 21 2023, 07:32 PM
Renee   Traveling with an NPC, Additional Locations. Game:...   Feb 10 2023, 03:07 PM
Renee   Traveling with an NPC, Additional NPCs. Game: [col...   Feb 13 2023, 01:58 AM
Renee   Dialog Speech Checks Game: [color=#FFFFFF]TES V: S...   Mar 3 2023, 03:58 AM
Renee   Map Marker Tutorial, Game: Fallout 3 Firstly, wit...   Mar 19 2023, 05:52 PM
Renee   Repeatable Enemy Raids, Game: Fallout 3 I love ge...   Mar 26 2023, 07:31 PM
Renee   Repeatable Enemy Raids, Additional Locations. Game...   Apr 2 2023, 06:36 PM
Renee   Gray Face bug. Game: [color=#FFFFFF]TES V: Skyrim ...   Apr 23 2023, 01:50 AM
Renee   Script Fragments. Game: [color=white]TES V: Skyrim...   May 19 2023, 06:54 PM
Renee   Fixing the Sideways Glasses Bug, Game: [color=#663...   May 26 2023, 10:29 PM
Renee   Nexus Mod Manager - installing and uninstalling Y...   Jun 8 2023, 08:02 PM
Renee   Breton Magic Resistance Tweak, Game: [color=#66333...   Jun 21 2023, 12:03 PM
Renee   Manipulating Leveled Lists Here is how to change ...   Jun 24 2023, 07:29 PM
2 Pages V  1 2 >


Reply to this topicStart new topic
4 User(s) are reading this topic (4 Guests and 0 Anonymous Users)
0 Members:

 

- Lo-Fi Version Time is now: 29th April 2024 - 04:55 AM