Iskuss's Questing Showcase (Gotta get Licenced)

Interested in joining? Show off your skills here
Post Reply
User avatar
Iskuss1418
PT Modder
Posts: 177
Joined: Tue Nov 29, 2016 1:57 am

Iskuss's Questing Showcase (Gotta get Licenced)

Post by Iskuss1418 » Thu Aug 23, 2018 6:18 pm

This is my questing showcase, I made a quest involving leading a beggar's friend back to him.

Scripts:
Quest_Showcase_Beggar
Quest_Showcase_Halvir

NPCs (ID -> Name):
beggar -> Bjorlan
halvir -> Halvir

Journal:
"A Beggar in Need"

Topics:
Background
get in contact with Halvir
Attachments
Quest.ESP
Showcase 1: 2018_08_23
(14.69 KiB) Downloaded 267 times

User avatar
Iskuss1418
PT Modder
Posts: 177
Joined: Tue Nov 29, 2016 1:57 am

Post by Iskuss1418 » Thu Aug 23, 2018 8:25 pm

Edit: Still first attempt, but I just wanted to complicate it a little. Instead of saying which tavern the friend is in, I just said he was in one of the taverns in the city, and gave people in those taverns dialogue to help player find right one. Also added an entry to latest rumors, and misc fixes.

New Topic:
Halvir
Attachments
Quest.ESP
First Attempt Edited
(18.58 KiB) Downloaded 272 times

User avatar
Texafornian
PT Modder
Posts: 164
Joined: Thu Sep 15, 2016 9:16 pm

Post by Texafornian » Fri Aug 24, 2018 5:23 pm

Looks very good so far. It's fine mechanically except for the missing gold check and adding a journal entry to allow the player to decide whether to accept the quest.

- ESP was already cleaned
- Dialogue was already cleaned
- autocalc was already checked then unchecked

- There's no condition on Bjorlan's Greeting 5 "Choice 1" entry to ensure that the player actually has 1 gold to give
- ^ Adding that will require another "Choice 1" entry in the event that the player doesn't have 1 gold

- GetAiPackageDone doesn't need to be declared in a script as a variable; it's a hardcoded function
- I'd change the GetAIPackageDone check in Halvir's script to something like GetDistance "beggar" < 300 in the event that the beggar moved. GetDistance is apparently OK to use every frame
- ^ Requires changing Halvir's AIFollow command, too (in dialogue results of an entry), and adding an AIWander line in Halvir's script when the GetDistance check is finished

- Additional entries filtered for "Karthwasten, Dancing Saber: Tavern, Den" aren't needed when you're already filtering for "Karthwasten, Dancing Saber: Tavern" because cell filters are treated as string matches. The former ID contains the latter. Same reason why we have empty cells called "Mournhold" and "Solstheim" -- they're used to filter dialogue to all cells that start with those strings

- Add additional Greeting 5 entry to Halvir in the event that you kill the beggar
- Add a journal entry (15) between IDs 10 and 20 that serves as a "player accepted the quest" entry
- Check journal entry ID 10 as "finished" to prevent it from appearing in the "quests" tab
- Check journal new entry ID 15 as "restart" to add the quest to the player's "quests" tab

- Add a copy of Halvir's first 70-disposition entry in "get in contact with Halvir" filtered for players with higher speechcraft (an alternative to high disposition)

I'd also like to see a solution for an edge case: killing Halvir prior to taking the quest from the beggar. The easiest way to do this would be to add a line to Halvir's OnDeath block in his script that fires when GetJournalIndex == 0. You could:

set "beggar".Sky_ControlQ to 1

And then add an initial entry to the beggar that overrides the default 3-option prompt when Sky_ControlQ == 1. Something like a copy of the "I don't want to talk to you" entry.
CharGen Revamped: Expanded Lands | Alternate starts in PC, SHOTN, TR, and Solstheim

User avatar
Iskuss1418
PT Modder
Posts: 177
Joined: Tue Nov 29, 2016 1:57 am

Post by Iskuss1418 » Sat Aug 25, 2018 1:59 am

I did all the things you pointed out above. Also instead of using a variable for the edge case of Halvir being dead at the start, I filtered the greeting for choice 1 to also be: Dead "Halvir" = 0, and I had another one filtered to 1, for if Halvir was dead. I still let the player give a coin, but the beggar doesn't bring up the friend.
Attachments
Clean Quest.7z
Second attempt
(5.2 KiB) Downloaded 235 times

User avatar
Texafornian
PT Modder
Posts: 164
Joined: Thu Sep 15, 2016 9:16 pm

Post by Texafornian » Sun Aug 26, 2018 9:40 pm

Almost there.

- It looks like the beggar's Greetings now break when the player gives 1 gold then refuses to help him out. Could be solved by just changing some conditions around to account for journal state 10 and/or 15.

- The words "get in contact with Halvir" should be included in the acceptance journal entry (state 15) for topic linking.

- The "dead" condition check you added is discouraged since it can be extremely slow in larger save files, same goes for GetDeadCount in scripts.

- Good job identifying the case where the player could kill the beggar while Halvir was following. The only issue with the new solution is that Halvir will constantly run that AIWander command if the player hits that journal state. This can be solved by declaring short doOnce and then running a "if ( doOnce == 0 )" check on that AIWander line. An efficient approach would be doing something like this, which would account for quest completion too:

Code: Select all

if ( doOnce == 0 )

    if ( GetJournalIndex "A Beggar in Need" == 40 )
    elseif ( GetJournalIndex "A Beggar in Need" == 45 )
        AiWander 0 0 0 0 60 20 10 10 0 0 0 0
    else
        Return
    endif

    set doOnce to 1
endif
That block would have to be the lowest block in the script, else the Return would block everything below it from being checked and/or firing.
CharGen Revamped: Expanded Lands | Alternate starts in PC, SHOTN, TR, and Solstheim

Post Reply

Return to “Modder Showcase”