EOSERV Forum > EOSERV > Monkey Island Quest
Page: << 1 >>
Monkey Island Quest
Author Message
Post #202600 Monkey Island Quest

So my friend and I had a question, we were working on the monkey island quest and the baru supplies quest when we realized the baru supplies quest at some point needs to let you go back to monkey island, but in the monkey island quest you can't go back to monkey island if the quest ends. We thought about how to get around this and came up with a solution of creating a new npc (which is the same npc) and attaching the text to the young pirate that will only activate after the monkey island quest is done and made the (other npc) invisible off onto the side of the map.... (I think I explained that right)

Was wondering what other methods people have used to make this work? its not a very clean method so anyone else got ideas?

---
Graphics Designer.
"I'll keep believing in the future, not caring if anyone laughs at me"
Hi : D I am me!
7 years, 8 weeks ago
Post #202601 Re: Monkey Island Quest

Any alternative solution would be appreciated.

Here is our scripts:

"Monkey Island" on reward:

State Reward

{

        action GiveExp( 10800 );

        action          ShowHint("You earned 10,800 experience.");

        action PlaySound(17);

        action          StartQuest(504, "ReturnMonkeyIsland")

        action          SetQuestState(504, "ReturnMonkeyIsland")

        action          End();

}


"Return to Monkey Island" quest #504:

Main

{

    questname   "Return to Monkey Island"

    version     1.0

    hidden

}


State Begin

{

    //Leave empty

}

 

State ReturnMonkeyIsland

{

    action  AddNpcText(21, "Do you want to sail back to Monkey Island?");

    action  AddNpcInput(21, 1, "Yes, lets go");

    action  AddNpcInput(21, 2, "No, maybe later");

    rule    InputNpc(1) goto GoMonkeyIsland

}


State GoMonkeyIsland

{

    action  SetCoord(271, 25, 54);

    rule    Always() goto ReturnMonkeyIsland

}

------

Alternatively, we thought of another solution, which would be to just create a new state (the last state) and have it allow the player to return to the island, but it would also mean that the quest is never endable. We would then be forced to either have the quest hidden and not show the progress of the quest, or have it visible and it would always be in the progress window.

---
Just your friendly neighborhood Programmer-Man!
7 years, 8 weeks ago
Post #202602 Re: Monkey Island Quest

A quest NPC can have dialog in two separate quests. You shouldn't be using a quest to actively destroy another quest progress flow, but try giving the same pirate npc dialog in a separate quest.

7 years, 8 weeks ago
Post #202603 Re: Monkey Island Quest

...Not quite what we meant : ) in the original game after the completion of the monkey island quest their was "always a way to monkey island" So adding more dialogue to another quest to get you to and from doesn't exactly "solve" our issue since it would require you to have that quest to get too and from so for example even if we were to add said dialogue to the baru supplies quest once we complete that quests we would have to wait till a day later to get back to monkey island again.... while in the original after you completed the monkey island quests you could go back and forth so we were wondering how that was done.

---
Graphics Designer.
"I'll keep believing in the future, not caring if anyone laughs at me"
Hi : D I am me!
7 years, 8 weeks ago
Post #202604 Re: Monkey Island Quest

To rephrase our needs: We would like to allow players to travel to a map via an NPC only after a certain quest is completed.

---
Just your friendly neighborhood Programmer-Man!
7 years, 8 weeks ago
Post #202605 Re: Monkey Island Quest

There's isn't an existing rule for that, you could use the original NPC but you'd have to create a new rule that only allows the player to travel to the island once a day and to only travel once the Monkey Island quest has been completed. 

Something along the lines of:


Main

{

questname "Return To Monkey Island"
version 1.0
hidden

}

State Begin

{

action AddNpcText("Ahoy there! What can I do for you?");
action AddNpcInput(1, 1, "I'd like to travel to Monkey Island");
action AddNpcInput(1, 2, "Nothing, nevermind);

rule InputNpc(1) goto Return

}

State Return

{

action AddNpcText("Arrggh! Have you completed the requirements to travel there, matey?");
action AddNpcInput(1, 3, "Yes, I have");
action AddNpcInput(1, 4, "What requirements?");
action AddNpcInput(1, 5, "No, I haven't");

rule InputNpc(3) goto ReturnMonkeyIsland
rule InputNpc(4) goto MonkeyIsland //this brings you to the start of the Monkey Island quest

}

State CheckQuest

{

if QuestComplete(00021) goto TravelCheck
else goto Fail

}

State TravelCheck

{

if DoneDaily() goto ReturnMonkeyIsland
else goto Fail

}

State Fail

{

action AddNpcText("Sorry matey, looks like your requirements aren't up to date.");

rule Reset()

}

State ReturnMonkeyIsland

{

action AddNpcText("All aboard, matey!");
action SetCoord(271, 25, 54);

rule Always() goto Begin

}


Obviously a lot of these rules would have to be custom created and added to the same NPC as the Monkey Island quest. You can learn to create new rules here.


Note: I never use ifelse in quests so I don't know if that's done right, but you get the idea.

---
"Nurd, you're like a fucking swiss army knife" - Necrosis
7 years, 8 weeks ago
Post #202606 Re: Monkey Island Quest

Yeah this was the current solution we were using we created a rule for it and everything, but we were hoping for a cleaner method, I guess their might not be :(

---
Graphics Designer.
"I'll keep believing in the future, not caring if anyone laughs at me"
Hi : D I am me!
7 years, 8 weeks ago
Post #202607 Re: Monkey Island Quest

The lazy, easier method is to make a brand new NPC for a brand new quest, but that looks terrible and messy in the in-game experience.

---
"Nurd, you're like a fucking swiss army knife" - Necrosis
7 years, 8 weeks ago
Post #202608 Re: Monkey Island Quest

Thank you guys for the suggestions. I decided to take a different approach, and the solution was a lot more simple then I assumed.

I added special handing for when a quest's current state is named "Finished", which will tell the quest log that the quest has been completed. It also allows the quest to remain active while appearing that it has finished. I don't believe there is any drawbacks with this, although I haven't fully looked into how Context::Finished() is handled.

Code:

bool Context::Finished() const

{

return (this->finished || this->state_name == "finished");

}


Quest:

State Reward

{

        action GiveExp( 10800 );

        action          ShowHint("You earned 10,800 experience.");

        action PlaySound(17);

        action          StartQuest(504, "ReturnMonkeyIsland")

        action          SetQuestState(504, "ReturnMonkeyIsland")

        rule            Always() goto Finished

}


State Finished // A special state that will mark the quest as "Completed" in the quest log.

{

    action  AddNpcText(21, "Do you want to sail back to Monkey Island?");

    action  AddNpcInput(21, 1, "Yes, lets go");

    action  AddNpcInput(21, 2, "No, maybe later");

    rule    InputNpc(1) goto GoMonkeyIsland

}


State GoMonkeyIsland

{

    action  SetCoord(271, 25, 54);

    rule    Always() goto Finished

}

---
Just your friendly neighborhood Programmer-Man!
7 years, 8 weeks ago
Post #202609 Re: Monkey Island Quest

You're making this more complicated than it needs to, this can be done without editing the source or adding an additional NPC. All you have to do is edit the monkey island quest. Add this state. You would replace "#" with the quest ID for Young Pirate or whoever is in charge of the boat to Monkey Island. You would also need to fill in the appropriate coordinates for monkey island. 

state End {

action AddNpcText(#, "Would you like to visit Monkey Island again?");

action AddNpcInput(#, 1, "Yes, please.");

action AddNpcInput(#, 2, "No thanks.");

rule InputNpc(1) goto Teleport

}

state Teleport

{

action SetCoord(m,x,y);

action End();

}

Edit:

A little bit about how the above and action End(); works. When you use this action it sets the quest state to End and the quest no longer appears on the quest log. So by creating the state End you can add npc interaction after the quest is technically "over". Although you won't be able to see any of it in quest log, you should still be able to talk to the NPC.

7 years, 8 weeks ago
Post #202610 Re: Monkey Island Quest

@Deaven

Thank you. That indeed is exactly what we need!

Strangely, one of the first things I tried, was the "End" and "Done" state and had no luck. So I just assumed that calling "action End()" set the quest to be inactive. But I must have done something wrong (even though it's very straight forward).

I removed my "Finished" support and went with the "End" state. :)

---
Just your friendly neighborhood Programmer-Man!
7 years, 8 weeks ago
Post #203039 Re: Monkey Island Quest

Sorry for later reply, not sure if EOServ comes with EO+ support for IsQuestState, but if so, you can have a quest check that you have finished another quest before starting with

if IsQuestState(QUESTID,end) goto BeginQuest

else goto NotFinishedPrevious

As a completed quest leaves the state as end in your database.

---
Host of a blacklisted server...
7 years, 4 weeks ago
Page: << 1 >>

EOSERV Forum > EOSERV > Monkey Island Quest