009-2,123,71,0 script Airlia NPC108,{ // Subquest 1a: Caretaker's daughter (initial, once) @LETTER_REWARD_GOLD_INITIAL = 1000; @LETTER_REWARD_EXP_INITIAL = 2000; @Q_STATUS_RECIEVED_FIRST_LETTER = 2; @Q_STATUS_DELIVERED_FIRST_LETTER = 3; // Subquest 1b: Continued delivery of letters (unlimited) @LETTER_REWARD_GOLD = 42; @LETTER_REWARD_EXP = 500; @Q_STATUS_HAS_NO_NEW_LETTER = 4; @Q_STATUS_HAS_NEW_LETTER = 5; // Subquest 2a: Fetch those undead drops (initial, once) // TODO: Set sane values below @FETCH_AMOUNT_INITIAL = 50; @FETCH_LABEL_INITIAL$ = "Bone"; @FETCH_REWARD_GOLD_INITIAL = 5000; @FETCH_REWARD_EXP_INITIAL = 50000; @Q_STATUS_HELP_AIRLIA = 1; @Q_STATUS_INITIAL_FETCH_REWARDED = 2; // Subquest 2b: Fetch those undead drops (unlimited) // TODO: Set sane values below @FETCH_AMOUNT = 10; @FETCH_LABEL$ = "DiseasedHeart"; @FETCH_REWARD_GOLD = 6000; @FETCH_REWARD_EXP = 40000; if (QUEST_Airlia == @Q_STATUS_INITIAL_FETCH_REWARDED) goto L_Rewarded; if (QUEST_Airlia == @Q_STATUS_HELP_AIRLIA) goto L_Fetch; if (QUEST_Graveyard_Caretaker > @Q_STATUS_RECIEVED_FIRST_LETTER) goto L_Intro; goto L_Caretaker; L_Caretaker: mes "[Airlia]"; mes "\"Greetings. Do you need a housing permit, or to license your mount?\""; next; if (QUEST_Graveyard_Caretaker < @Q_STATUS_RECIEVED_FIRST_LETTER) menu "Sorry, no.", L_Next, "My what?", L_mount; if (QUEST_Graveyard_Caretaker == @Q_STATUS_RECIEVED_FIRST_LETTER) menu "Sorry, no.", L_Next, "I have a letter from your father.", L_first_reward, "My what?", L_mount; goto L_Next; L_Next: mes "[Airlia]"; mes "\"Nobody ever does...\""; close; L_mount: // The mention of mounts will certainly gather some interest from players, // this section may be extended. close; L_first_reward: mes "[Airlia]"; mes "\"Oh! Thank you very, very much! Please take this for your trouble.\""; if (@LETTER_REWARD_GOLD_INITIAL > 0) mes "[" + @LETTER_REWARD_GOLD_INITIAL + " GP]"; if (@LETTER_REWARD_EXP_INITIAL > 0) mes "[" + @LETTER_REWARD_EXP_INITIAL + " experience points]"; Zeny = Zeny + @LETTER_REWARD_GOLD_INITIAL; getexp @LETTER_REWARD_EXP_INITIAL, 0; QUEST_Graveyard_Caretaker = @Q_STATUS_DELIVERED_FIRST_LETTER; close; L_later_rewards: mes "[Airlia]"; mes "\"Oh! Thank you very, very much! Please take this for your trouble.\""; if (@LETTER_REWARD_GOLD > 0) mes "[" + @LETTER_REWARD_GOLD + " GP]"; if (@LETTER_REWARD_EXP > 0) mes "[" + @LETTER_REWARD_EXP + " experience points]"; Zeny = Zeny + @LETTER_REWARD_GOLD; getexp @LETTER_REWARD_EXP, 0; QUEST_Graveyard_Caretaker = @Q_STATUS_HAS_NO_NEW_LETTER; close; L_Intro: mes "[Airlia]"; mes "\"My poor father, doomed to that awful cemetery.\""; next; // CASE REMOVED: // This step is pointless and just forces the player to make a selection that doesn't effect anything. // ALSO it misses the case where QUEST_Graveyard_Caretaker == 3, in this case it proceeds to the message without wasting player clicks // Removing this check will make execution the same for QUEST_Graveyard_Caretaker == 3 and QUEST_Graveyard_Caretaker == 4 // If for some reason this is desireable, uncomment it and make sure to catch the extra case mentioned // //if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NO_NEW_LETTER) // menu // "...", -; if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NEW_LETTER) menu "...", L_Next3, "Oh, I have a letter from him.", L_later_rewards; goto L_Next3; L_Next3: mes "[Airlia]"; mes "\"You know, there are many who believe that each time the undead rise after being killed, they lose mana."; mes "Eventually, there will not be enough mana for them to rise again and they can be at rest. Do you believe this is true?\""; next; menu "I believe so, yes.", L_Intro_mana_loss, "Maybe...", L_Intro_mana_loss, "No, that is not proven.", L_Next1; L_Next1: mes "[Airlia]"; mes "\"Oh...\""; close; L_Intro_mana_loss: mes "[Airlia]"; mes "\"When I am not working, I recruit help for the esteemed Fighters of the Undead, or FoU."; mes "They are an official group effort of the Warriors' Guild and Magicians, you know, a very prestigious group.\""; next; menu "...", L_Intro_fou, "I have heard of them.", L_Intro_fou, "Keep up the good work. I have to go now, bye.", L_close; L_Intro_fou: mes "[Airlia]"; mes "\"If we drain those evil creatures of their mana, I can get my father back. He is getting very old. Will you help us?\""; next; menu "Of course I will.", L_Intro_fight, "Sure, I guess.", L_Intro_fight, "Thanks, but no thanks. I have other business to attend to.", L_close; L_Intro_fight: mes "[Airlia]"; mes "\"Great, just kill any of the undead creatures you can and bring me proof of your work, and I will put in a word for you with the guild.\""; next; menu "I'm on it.", L_Next2, "What sort of proof?", L_Intro_proof; L_Next2: QUEST_Airlia = @Q_STATUS_HELP_AIRLIA; goto L_close; L_Intro_proof: mes "[Airlia]"; mes "\"Let's say " + @FETCH_AMOUNT_INITIAL + " " + getitemlink(@FETCH_LABEL_INITIAL$) + "s. You don't know how much this means to me, thank you.\""; QUEST_Airlia = @Q_STATUS_HELP_AIRLIA; close; L_Fetch: mes "[Airlia]"; mes "\"Thank you for helping my father.\""; next; mes "\"Have you collected the " + @FETCH_AMOUNT_INITIAL + " " + getitemlink(@FETCH_LABEL_INITIAL$) + "?\""; // Make sure to check if the player has a letter to deliver. // If the check is not made then there is a bug, where the player // has a letter but has not completed the initial fetch // and is prevented from turing in the letter until the fetch is completed. if (QUEST_Graveyard_Caretaker < @Q_STATUS_HAS_NEW_LETTER) menu "Yes.", L_Fetch_initial_reward, "No.", L_close; if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NEW_LETTER) menu "I have another letter from your father.", L_later_rewards, "Yes.", L_Fetch_initial_reward, "No.", L_close; goto L_close; L_Fetch_initial_reward: if (countitem(@FETCH_LABEL_INITIAL$) < @FETCH_AMOUNT_INITIAL) goto L_Fetch_not_enough; mes "[Airlia]"; mes "\"Excellent work. You are definitely a great warrior. I will tell the guild of your deeds.\""; if (@FETCH_REWARD_GOLD_INITIAL > 0) mes "[" + @FETCH_REWARD_GOLD_INITIAL + " GP]"; if (@FETCH_REWARD_EXP_INITIAL > 0) mes "[" + @FETCH_REWARD_EXP_INITIAL + " experience points]"; delitem @FETCH_LABEL_INITIAL$, @FETCH_AMOUNT_INITIAL; Zeny = Zeny + @FETCH_REWARD_GOLD_INITIAL; getexp @FETCH_REWARD_EXP_INITIAL, 0; QUEST_Airlia = @Q_STATUS_INITIAL_FETCH_REWARDED; next; mes "[Airlia]"; // TODO: Write the dialogue when I'm not tired... mes "\"Oh, before you leave. We all must do what we can to stop this tragedy."; mes "If you are willing to keep draining the undead of mana, I will give you what gold I can afford as a token of my gratitude.\""; close; L_Fetch_later_rewards: if (countitem(@FETCH_LABEL$) < @FETCH_AMOUNT) goto L_Fetch_not_enough; mes "[Airlia]"; mes "\"Excellent work. You are definitely a great warrior.\""; if (@FETCH_REWARD_GOLD > 0) mes "[" + @FETCH_REWARD_GOLD + " GP]"; if (@FETCH_REWARD_EXP > 0) mes "[" + @FETCH_REWARD_EXP + " experience points]"; delitem @FETCH_LABEL$, @FETCH_AMOUNT; Zeny = Zeny + @FETCH_REWARD_GOLD; getexp @FETCH_REWARD_EXP, 0; close; L_Fetch_not_enough: mes "[Airlia]"; mes "\"I'm sorry, I didn't realize you couldn't count. Perhaps when I have some free time, I can help you learn if you'd like.\""; close; L_Rewarded: mes "[Airlia]"; mes "\"Thank you for your help.\""; next; mes "\"Have you collected the " + @FETCH_AMOUNT + " " + getitemlink(@FETCH_LABEL$) + "s?\""; if (QUEST_Graveyard_Caretaker < @Q_STATUS_HAS_NEW_LETTER) menu "Yes.", L_Fetch_later_rewards, "No.", L_close; if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NEW_LETTER) menu "I have another letter from your father.", L_later_rewards, "Yes.", L_Fetch_later_rewards, "No.", L_close; goto L_close; L_close: close; }