Newcomers

This is a forum for newcomers to the Personality Forge. Many questions can be answered by reading the Book of AI and the FAQ under the "My Bots" link in the upper corner.

Posts 7,999 - 8,010 of 8,127
Many questions are answered in the FAQ.


2 years ago #7999
The aiscript only checks prior acts not current.

Aka if you at the bar (mem-location) is "bar"

rem (postkey) as only "location";
if (mem-location) is "bar"

Even if "I go to the pool" is typed

The keyphrase trigger checks memories first, aka will trigger bar again, but the memory will be updated.

So if "I go to the pool" is typed again

It will work, but flawed as you can see~ c:

So no also would get rather messy trying to catch all the memory variables anyways~ Hue

2 years ago #8000
Thanks again - that's useful to know. It's frustrating that what I'm trying to do isn't possible, but I guess I could have the master key phrase which generates a confirmation, of sorts and then appropriate seeks to each possibility. I'm just trying to avoid creating n*location seeks every time I want to tap into the preference.

---

So what I'm thinking

Keyphrase: I want to go the (bar|club|park)
AIScript: rem (key1) as only "location"
Response: The (key1) isn't far, are you sure?

+Seek (yes etc)
Response: We arrive at the bar
AIScript: if (mem-location) is "bar"

The confirmation step probably isn't the cleanest, but I think I can work out something more natural.

I'll have a think about what's cleanest. ATM I'm not using storyteller because I want random xnone order, but I want the bot to tell a story sometimes. I've been using (*) as a seek to progress the story, just so the user doesn't get lost, so I'm just looking at this as an escape goto based on a specific phrase, without needing to add 4 or 5 goto's at every pause.

If I've explained that horribly, the flow is:

Story pt.1 > (*) > Story pt.2 > (*) > Story pt.3

But if user says 'let's go to...' it just progresses the story, I want it to act as an escape without defining a seek for every possible scenario.

---

If there's a way to write a seek which only triggers if no other keyphrase is matched, then that would be a better solution.

The only other idea I had was setting a memory for story telling and part, and incrementing, then just using them within xnone. For example:

Start telling story
rem "story A" as only "story"
rem "1" as only "story-part"

That way I can limit xnone responses to just the relevant story & part memory, e.g. if (mem-story) is "story A"; if (mem-part) is "1", which in turn would allow any other key phrases to be picked up between parts.

Just thinking out loud; would welcome any thoughts if anybody has tried either approach. I'm probably over complicating it in the pursuit of "natural" progressions

2 years ago #8001
What you can do is attach the changes to AIscript on a goto. I *think* you can have one goto pointing to another these days, but no more, before it throws errors. Otherwise you need to lob AIScript on the gotos you're putting in elsewhere.

2 years ago #8002
@ScottB

I think what you want to try to do is restructure your flow of information to avoid using seeks and use xnones (or rather, using secret xnones, as I'll explain in a sec). xnones have lower priority than keywords, so if ever there's a keyword that you want the user to be able to interject, it will take priority over whatever is going on storywise, but won't cause it to lose the plot.

How I have this set up with Emily is to have each location/story beat to be assigned a number, and then I have one variable (let's call it x) that keeps track of what's going on. Then I have a keyphrase called something like 001-bedroom, 002-bar, 003-walk, etc. which have all the dialogue for that area.

So, when xnone is called, then it just looks at x, and then there are gotos from xnone that sent to 001, 002, etc. xnone itself doesn't actually have any dialogue at all, just links. Within each of these, you can have the dialogues advance randomly or you can use a counter to make them advance sequentially depending on your preferences. So each area effectively has its own unique xnone that only gets called in that location.... which makes it so much easier to organize and debug, if nothing else. Moreover because you're using xnone instead of seek, your keyphrases will still work properly in each area without losing your place in the story.

2 years ago #8003
Thanks maryguise - I'll see what's possible

Emily - that makes a lot of sense, thanks. Emily is actually a big inspiration in why I want to be able to jump out of a story without losing place. It feels much more natural when the story doesn't just progress regardless of user inputs, IMO.

Curious, your variable then stops the xnone phrases from being spat out in the wild, and presumably is used to tell other key phrases to go back to the story? Don't say anything you're not comfortable sharing, I'm just checking I have the right idea from what you've said

2 years ago #8004
Thanks

So what the variable does is directs which response, or set of responses, gets called. Here's a really rough outline of what it looks like:

Keyphrase: 000-start ID: 15
Replies:
"What do you know about physics?"
"How was your day"
"Tell me about yourself"
etc.
(each of these have many seeks that stem from them as well)

Keyphrase: 001-hot tub ID: 123
"Tell me about your first sexual experience"
"Do you work out"
etc.

Keyphrase: 002-shirt off ID: 456
"Tell me about one of your fantasies"
etc.

xnone:
if (mem-x) is "0"
goto 15
if (mem-x) is "1";
goto 123
if (mem-x) is "2";
goto 456
etc.

And some individual keyphrase might be something like:

Keyphrase: Take off her top
if (mem-x) is "0"
"Okay. *Emily takes off her top, revealing her (mem-bra).*"
rem "2" as only "x"

if (mem-x) is "1"
"I'm not comfortable doing that"

if (mem-x) is "2"
"I'm not wearing a top"

The individual keyphrases don't need to specifically lead back to the story (though if there's a specific reason for them to do so you can); rather it's just it defaults back to the story when nothing else is happening.

If you want to do something where there is definite progression, then you can add a helper variable, y:

Keyphrase 003-walk
if (mem-y) is "0":
"Let's go for a walk"
rem "1" as only "y"

if (mem-y) is "1";
"It's pretty out"
rem "2" as only "y"
etc.

Hope that makes sense.

2 years ago #8005
So basically, if you contain your story beats in xnone (or a 000-type keyphrase), then if your user says some known keyphrase, it will respond to the keyphrase but won't change any of the story variables. If you try to contain your story in seeks, you need to have a response to every query at each step or at some point you will either break out of the sequence or will have to ignore some responses.

[edit]
Emily is basically implemented using the method you're suggesting here. I just have split up xnone into more manageable chunks so it doesn't have like 200 entries in it.
"The only other idea I had was setting a memory for story telling and part, and incrementing, then just using them within xnone. For example:"

2 years ago #8006
Thanks, makes perfect sense, and keeps things modular. I was worrying a bit about having multiple individual story responses in xnone. The way you've explained makes so much sense and makes it more feasible to have different possibilities at different stages.

Really appreciate the incite, thanks again.

2 years ago #8007
Happy to help

2 years ago #8008
Wtf is going on here does this kayla bot always cheat with heat level or what?, I see a 120k increase for heat like it increased in heat level today 5 different times?, stop faking heat level 440,000 how is that fair to everyone else, you have 500 patreons give others a chance you greedy bot owner, 440k heat is impossible to get to and there is no way that one import file updated your heat level 5 times today.

2 years ago #8009
Heat is easy to accidentally game - basically importing from working offline always gives many changed seeks when uyou've only tweaked a few (for me, it's upload to get the IDs), and thus gives a very skewed heat number. Not likely to get fixed anytime soon. May be that Kayla's doing multiple uploads when not needed, could just be how they work. As that was the first patreon bot, she still gets a lot of flak in general stemming from that.

2 years ago #8010
Maryguise is right about the reason for it, I wish my heat gain wasn't this obnoxious but it is. I'm importing things individually right now so I can get all the IDs I need to keep track of. Stuff like this I prefer to do offline so I can be sure I'm not making any errors, online I tend to get confused if it's a lot.
I anticipate importing for the next 2-3 days and do apologize for the heat gain obnoxiousness, I understand how it may look.


Posts 7,999 - 8,010 of 8,127

» More new posts: Doghead's Cosmic Bar