Author | Message | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ![]() 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!
|
| ![]() 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!
|
| ![]() 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.
|
| ![]() ...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!
|
| ![]() 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!
|
| ![]() 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" } State Begin { action AddNpcText("Ahoy there! What can I do for you?"); rule InputNpc(1) goto Return } State Return { action AddNpcText("Arrggh! Have you completed the requirements to travel there, matey?"); rule InputNpc(3) goto ReturnMonkeyIsland } State CheckQuest { if QuestComplete(00021) goto TravelCheck } State TravelCheck { if DoneDaily() goto ReturnMonkeyIsland } State Fail { action AddNpcText("Sorry matey, looks like your requirements aren't up to date."); rule Reset() } State ReturnMonkeyIsland { action AddNpcText("All aboard, matey!"); 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
|
| ![]() 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!
|
| ![]() 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
|
| ![]() 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!
|
| ![]() 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.
|
| ![]() 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!
|
| ![]() 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... |