This is a draft of a new quest builder system. At this point it is only a first idea that needs further refinement.
Example for Kill Creatures Quest
/** * QUEST: CleanStorageSpace * <p> * PARTICIPANTS: * <li> Eonna * <p> * STEPS: * <li> Eonna asks you to clean her storage space. * <li> You go kill at least a rat, a cave rat and a cobra. * <li> Eonna checks your kills and then thanks you. * <p> * REWARD: * <li> 100 XP, karma * <p> * REPETITIONS: * <li> None. */ KillCreaturesQuestBuilder quest = new KillCreatureQuestBuilder(); quest.info() .name("Clean the Storage Space") .description("Eonna is too scared to go into her underground storage space, as it is filled with rats and snakes.") .internalName("CleanStorageSpace") .repeatable(false); .minLevel(0) .region(Region.SEMOS_CITY) .questGiverNpc("Eonna") quest.history() .whenNpcWasMet("I have met Eonna at her house in Semos next to the bakery.") .whenQuestWasRejected("I do not want to clear her storage space of creatures."); .whenQuestWasAccepted("I promised Eonna to kill the rats and snakes in her basement."); .whenTaskWasCompleted("I have cleaned out Eonna's storage space.") .whenQuestWasCompleted("Wow, Eonna thinks I am her hero. *blush*") quest.offer() //.when(new SomeCondition()) .respondToRequest("My #basement is absolutely crawling with rats. Will you help me?") .respondToRepeatedRequest("Thanks again! I think it's still clear down there.") .respondToAccept("Oh, thank you! I'll wait up here, and if any try to escape I'll hit them with the broom!") .respondToReject("*sigh* Oh well, maybe someone else will be my hero...") .respondTo("basement", "storage space").saying("Yes, it's just down the stairs, over there. A whole bunch of nasty-looking rats; I think I saw a snake as well! You should be careful... still want to help me?") .remind("Don't you remember promising to clean out the rats from my #basement?") quest.task() .requestKill(1, "rat") .requestKill(1, "caverat"); .requestKill(1, "snake"); quest.complete() .greet("A hero at last! Thank you!") .rewardWith(new IncreaseKarmaAction(5.0) .rewardWith(new IncreaseXPAction(100));
Example for Request Item Quest
/** * QUEST: Armor for Dagobert * * PARTICIPANTS: * <ul> * <li>Dagobert, the consultant at the bank of Semos</li> * </ul> * * STEPS: * <ul> * <li>Dagobert asks you to find a leather cuirass.</li> * <li>You get a leather cuirass, e.g. by killing a cyclops.</li> * <li>Dagobert sees your leather cuirass and asks for it and then thanks you.</li> * </ul> * * REWARD: * <ul> * <li>50 XP</li> * <li>80 gold</li> * <li>Karma: 10</li> * <li>Access to vault</li> * </ul> * * REPETITIONS: * <ul> * <li>None</li> * </ul> */ ProvideItemQuestBuilder quest = new ProvideItemQuestBuilder(); quest.info() .name("Armor for Dagobert") .description("Dagobert, the consultant at the bank of Semos, needs protection.") .internalName("ArmorForDagobert") .repeatable(false); .minLevel(0) .region(Region.SEMOS_CITY) .questGiverNpc("Dagobert") quest.history() .whenNpcWasMet("I have met Dagobert. He is the consultant at the bank in Semos.") .whenQuestWasRejected("He asked me to find a leather cuirass but I rejected his request.") .whenQuestWasAccepted("I promised to find a leather cuirass for him because he has been robbed.") .whenTaskWasDone("I found a leather cuirass and will take it to Dagobert.") .whenQuestWasCompleted("I took the leather cuirass to Dagobert. As a little thank you, he will allow me to use a private vault."); quest.offer() .respondToRequest("I'm so afraid of being robbed. I don't have any protection. Do you think you can help me?") .respondToRepeatedRequest("Thank you very much for the armor, but I don't have any other task for you.") .respondToAccept("Once I had a nice #'leather cuirass', but it was destroyed during the last robbery. If you find a new one, I'll give you a reward.") .respondToReject("Well, then I guess I'll just duck and cover.") .remind("Luckily I haven't been robbed while you were away. I would be glad to receive a leather cuirass. Anyway, how can I #help you?") npc.addReply(Arrays.toList("leather cuirass", "leather", "cuirass"), "A leather cuirass is the traditional cyclops armor. Some cyclopes are living in the dungeon deep under the city."); quest.task() .requestItem(1, "leather cuirass") .alternativeItem(1, "pauldroned leather cuirass") quest.complete() .greet("Excuse me, please! I have noticed the leather cuirass you're carrying. Is it for me?") .respondToReject("Well then, I hope you find another one which you can give to me before I get robbed again.") .respondToAccept("Oh, I am so thankful! Here is some gold I found ... ehm ... somewhere. Now that you have proven yourself a trusted customer, you may have access to your own private banking #vault any time you like.") .rewardWith(new EquipItemAction("money", 80)); .rewardWith(new IncreaseXPAction(50)); .rewardWith(new IncreaseKarmaAction(10));