diff options
author | nmaligec <wouldnot@hotmail.com> | 2011-01-05 00:34:26 -0500 |
---|---|---|
committer | nmaligec <wouldnot@hotmail.com> | 2011-01-05 00:34:26 -0500 |
commit | ed8cac19500c515cae40c1fd4b2d87abd96ae3ba (patch) | |
tree | 3136c4b4bac4db3a432384390efcc22f88ff2790 /npc | |
parent | 21156bed9c3d6eb3cf66a1e1557f4fc8c87a4194 (diff) | |
parent | 1e1e26e1255a487a14ca99c60c3ab51ad3988f9b (diff) | |
download | serverdata-ed8cac19500c515cae40c1fd4b2d87abd96ae3ba.tar.gz serverdata-ed8cac19500c515cae40c1fd4b2d87abd96ae3ba.tar.bz2 serverdata-ed8cac19500c515cae40c1fd4b2d87abd96ae3ba.tar.xz serverdata-ed8cac19500c515cae40c1fd4b2d87abd96ae3ba.zip |
merging updates from previous test repo ta-testing.
Diffstat (limited to 'npc')
123 files changed, 8298 insertions, 636 deletions
diff --git a/npc/001-1_Tulimshar/bard.txt b/npc/001-1_Tulimshar/bard.txt index e7fdd883..9de957e1 100644 --- a/npc/001-1_Tulimshar/bard.txt +++ b/npc/001-1_Tulimshar/bard.txt @@ -52,7 +52,7 @@ L_News: L_Question: callfunc "MagicTalkOptionsSetup"; - set @ignore, 0; + set @ignore, @QQ_ASTRALSOUL; callfunc "MagicTalkMenu"; if (@c == 0) goto L_Main; diff --git a/npc/001-1_Tulimshar/children.txt b/npc/001-1_Tulimshar/children.txt index 701fe2b6..c8941563 100644 --- a/npc/001-1_Tulimshar/children.txt +++ b/npc/001-1_Tulimshar/children.txt @@ -1,4 +1,4 @@ -// +// Aisha and Nina 001-1.gat,95,29,0 script Aisha 108,{ set @TEMP,rand(9); @@ -44,7 +44,7 @@ L_6: L_7: mes "[Aisha]"; - mes "\"I want to be a Doctor when i grow up!\""; + mes "\"I want to be a Doctor when I grow up!\""; close; L_8: @@ -85,7 +85,7 @@ L_4: close; L_5: - mes "\"I always take some spare Cactus Juices with me on the field. They are heavy, though.\""; + mes "\"I always take some spare [Cactus Juice]s with me on the field. They are heavy, though.\""; close; L_6: @@ -101,7 +101,7 @@ L_8: close; L_9: - mes "\"I know a very bad word. But I must not say it, because monsters will come and get me if I do!\""; + mes "\"I know a very bad word. But I must not say it, because monsters will come and get me if I do!\""; next; menu "A bad word?", L_tell, @@ -110,10 +110,10 @@ L_9: L_tell: mes "[Nina]"; - mes "\"Yes, I heard my mother say it once. And she made me promise her to never say it. Never.\""; + mes "\"Yes, I heard my mother say it once. And she made me promise her to never say it. Never.\""; next; menu "If I promise to never tell anyone, can you tell me the word?", L_keepword, - "I understand, you do not need to tell...", L_giveword, + "I understand, you do not need to tell me...", L_giveword, "Goodbye!", -; close; @@ -124,8 +124,8 @@ L_keepword: L_giveword: mes "[Nina]"; - mes "Nina looks around as she hushes you to silence. After a few seconds she whispers to you."; - mes "\"I like you! So I will tell you the bad word. But you can't tell anyone else about it! The bad word is '" + getspellinvocation("aggravate") + "'.\""; + mes "Nina looks around as she hushes you to silence. After a few seconds, she whispers to you."; + mes "\"I like you! So I will tell you the bad word. But you can't tell anyone else about it! The bad word is '" + getspellinvocation("aggravate") + "'.\""; next; mes "[Nina]"; diff --git a/npc/001-1_Tulimshar/elanore.txt b/npc/001-1_Tulimshar/elanore.txt index 7dea2a32..22f3611e 100644 --- a/npc/001-1_Tulimshar/elanore.txt +++ b/npc/001-1_Tulimshar/elanore.txt @@ -125,7 +125,7 @@ Heal_4: mes "\"Much better, right?!\""; heal 10000,10000; close; - + L_NoHeal: if (MAGIC_FLAGS) goto L_Chat; @@ -135,7 +135,7 @@ L_NoHealMessage: mes "\"I'm sorry but unless you are young and in need, I can't help you, and your level is already higher than ten."; mes "With so many people still injured from the earthquake, I really have no time to help."; mes "You can get some rest in the inn near here.\""; - + close; L_Chat: @@ -454,7 +454,7 @@ L_3_where: mes "\"Kadiya and Omar live relatively close by. See this corner in the inner city wall east of here? Turn past it, then go north. It's the second house.\""; next; goto L_3_menu; - + L_Teach_Explain3_abort: mes "[Elanore the Healer]"; mes "\"I'm sorry, but you lack the magical power to advance.\""; @@ -571,6 +571,7 @@ L_Question: if (@c == @QQ_SAGATHA) goto L_Q_sagatha; if (@c == @QQ_AULDSBEL) goto L_Q_auldsbel; if (@c == @QQ_OLDWIZ) goto L_Q_oldwiz; + if (@c == @QQ_ASTRALSOUL)goto L_Q_astralsoul; mes "[Elanore the Healer]"; mes "Elanore shakes her head."; @@ -578,6 +579,12 @@ L_Question: next; goto L_Main; +L_Q_astralsoul: + mes "[Elanore the Healer]"; + mes "\"The astral soul skill is one of the most important skills for mages. I learned this focus long time ago. Without that skill your magic is quite useless, isn't it? If the rumors are really true, there is an experienced mage in the Woodlands around Hurnscald.\""; + next; + goto L_Main; + L_Q_oldwiz: mes "[Elanore the Healer]"; mes "\"He is a kind old man. He stays mostly with his books and his apprentice, though we have chatted a few times.\""; diff --git a/npc/001-1_Tulimshar/luca.txt b/npc/001-1_Tulimshar/luca.txt index bc048e65..f019cd7c 100644 --- a/npc/001-1_Tulimshar/luca.txt +++ b/npc/001-1_Tulimshar/luca.txt @@ -2,11 +2,13 @@ 001-1.gat,108,55,0 script Luca 102,{ -// if (BaseLevel >= 45) -// goto L_teach_soon; + set @EXP_BRAWLING, 2000; -// if (BaseLevel >= 50) -// goto L_teach; + if (BaseLevel >= 35) + goto L_teach; + + if (BaseLevel >= 25) + goto L_teach_soon; mes "[Luca the Hunter]"; mes "\"Ouch! It hurts, this wound I got from battle.\""; @@ -15,10 +17,10 @@ L_Exp: mes "[Luca the Hunter]"; - mes "\"I was just coming back from a long journey. I ran into a group of scorpions and started fighting them for experience.\""; - next; + mes "\"I was just coming back from a long journey. I ran into a group of scorpions and started fighting them for experience.\""; + next; mes "[Luca the Hunter]"; - mes "\"Then, out of a cave came a BLACK one! I had NEVER seen it before!\""; + mes "\"Then, out of a cave came a BLACK one! I had NEVER seen it before!\""; next; mes "[Luca the Hunter]"; mes "\"Luckily i had a camera with me! Here's a picture of it... Let me find it, I put it in my pocket somewhere...\""; @@ -35,32 +37,32 @@ L_Nev: L_teach_soon: mes "[Luca the Hunter]"; - mes "\"You've grown quite a bit stronger since I first saw you, strolling around town like that! You know, if you train a little more, maybe we can help each other out a little?\""; - close; + mes "\"You've grown quite a bit stronger since I first saw you, strolling around town like that! You know, if you train a little more, maybe we can help each other out a little?\""; + close; L_teach: if (getskilllv(SKILL_POOL)) goto L_teachmore; mes "[Luca the Hunter]"; - mes "\"Hey there! You've become quite the adventurer, haven't you? I think it's time that someone taught you some basic skills.\""; - next; + mes "\"Hey there! You've become quite the adventurer, haven't you? I think it's time that someone taught you some basic skills.\""; + next; mes "[Luca the Hunter]"; mes "\"If you want, I can help with that!\""; - next; - menu + next; + menu "Sure, that sounds fun!", -, "I'm not interested.", L_Nev; mes "[Luca the Hunter]"; - mes "\"All right! It's not all that easy, though. First you have to learn how to focus. That's because you can learn many skills, but you can't focus on all of them all the time.\""; - next; + mes "\"All right! It's not all that easy, though. First you have to learn how to focus. That's because you can learn many skills, but you can't focus on all of them all the time.\""; + next; mes "[Luca the Hunter]"; - mes "\"When you can do that, you can learn some real skills, and when you know them, you can come back to me to tell me which ones you want to focus on. Deal?\""; - next; + mes "\"When you can do that, you can learn some real skills, and when you know them, you can come back to me to tell me which ones you want to focus on. Deal?\""; + next; - menu + menu "Yeah!", L_teach0_follow, "Certainly!", L_teach0_follow, "Wait... what do you mean?", -, @@ -71,191 +73,344 @@ L_teach: L_teach0_follow: mes "[Luca the Hunter]"; - mes "\"Great! Now, before I can give you that skill, I have to make sure that those stories about you are all true and that you really are experienced enough.\""; - next; + mes "\"Great! Now, before I can give you that skill, I have to make sure that those stories about you are all true and that you really are experienced enough.\""; + next; mes "[Luca the Hunter]"; - mes "\"So I'm going to ask you some easy questions.\""; - next; + mes "\"So I'm going to ask you some easy questions.\""; + next; mes "[Luca the Hunter]"; - mes "\"First, who is the man who guards the entrance to the old Tulimshar underground arena?\""; - next; - input @anser$; - if (@answer$ != "Phaet" && @answer$ != "phaet") - goto L_wronganser; + mes "\"First, who is the man who guards the entrance to the old Tulimshar underground arena?\""; + next; + input @answer$; + if (@answer$ != "Phaet" && @answer$ != "phaet") + goto L_wronganswer; mes "[Luca the Hunter]"; - mes "\"Good. Next, what's the name of the pipe-smoker who lives on top of Lore Mountain and makes leathery goods there?\""; - next; - input @anser$; - if (@answer$ != "Pachua" && @answer$ != "pachua") - goto L_wronganser; + mes "\"Good. Next, what's the name of the pipe-smoker who lives on top of Lore Mountain and makes leathery goods there?\""; + next; + input @answer$; + if (@answer$ != "Pachua" && @answer$ != "pachua") + goto L_wronganswer; mes "[Luca the Hunter]"; - mes "\"Great! One more: Who was the adventurer who built Dimond's Cove for Dimond?\""; - next; - input @anser$; - if (@answer$ != "Merlin" && @answer$ != "merlin") - goto L_wronganser; + mes "\"Great! One more: Who was the adventurer who built Dimond's Cove for Dimond?\""; + next; + input @answer$; + if (@answer$ != "Merlin" && @answer$ != "merlin") + goto L_wronganswer; mes "[Luca the Hunter]"; - mes "Luca laughs in excitement."; - mes "\"All right! You're the real thing, my friend!\""; - next; + mes "Luca laughs in excitement."; + mes "\"All right! You're the real thing, my friend!\""; + next; mes "[Luca the Hunter]"; - mes "\"Now stand over there. This should only take a second...\""; - mes "He takes of a pendant he is wearing and holds it up."; - next; + mes "\"Now stand over there. This should only take a second...\""; + mes "He takes of a pendant he is wearing and holds it up."; + next; mes "[Luca the Hunter]"; - mes "\"See that fang at the end of the chain? Keep staring at it at it.\""; - next; + mes "\"See that fang at the end of the chain? Keep staring at it at it.\""; + next; mes "[Luca the Hunter]"; - mes "He starts swinging the pendant back and forth."; - mes "\"And whatever you do, don't blink. Don't look away, and don't blink.\""; - next; + mes "He starts swinging the pendant back and forth."; + mes "\"And whatever you do, don't blink. Don't look away, and don't blink.\""; + next; mes "[Luca the Hunter]"; - mes "The world slows down around you as you focus on the pendant going back..."; - next; + mes "The world slows down around you as you focus on the pendant going back..."; + next; - mes "and forth..."; - next; + mes "and forth..."; + next; - mes "and back..."; - next; + mes "and back..."; + next; - mes "and forth..."; - next; + mes "and forth..."; + next; - mes "and back..."; - next; + mes "and back..."; + next; - mes "and..."; - next; + mes "and..."; + next; - mes "You feel relaxed."; - next; + mes "You feel relaxed."; + next; mes "[Luca the Hunter]"; - mes "\"... still there?\""; - mes "You hear the sound of fingers snapping. Why would someone do that on such a calm day?"; - next; + mes "\"... still there?\""; + mes "You hear the sound of fingers snapping. Why would someone do that on such a calm day?"; + next; mes "[Luca the Hunter]"; - mes "\"Oh, good... I think it worked. Nice job!\""; - mes "He grins."; - mes "[You gain 10,000 experience points]"; - mes "[You learned Skill Focus]"; - setskill SKILL_POOL, 1; - getexp 10000, 0; - next; + mes "\"Oh, good... I think it worked. Nice job!\""; + mes "He grins."; + mes "[You gain 10,000 experience points]"; + mes "[You learned Skill Focus]"; + setskill SKILL_POOL, 1; + getexp 10000, 0; + next; - goto L_teachmore2; + goto L_teachmore2; -L_wronganser: + L_wronganswer: mes "[Luca the Hunter]"; - mes "\"No, that was wrong. I suppose you're not as experienced as I thought you'd be.\""; - close; + mes "\"No, that was wrong. I suppose you're not as experienced as I thought you'd be.\""; + close; S_explain: - mes "[Luca the Hunter]"; - mes "\"Alright, what do you want to know?\""; - next; + mes "[Luca the Hunter]"; + mes "\"Alright, what do you want to know?\""; + next; S_explain_loop: menu - "What's skill focus?", L_explain_focus, - "What skills are there?", L_explain_skills, - "How do skills work?", L_explain_work, - "Thanks, I think I got it!", -; + "What's skill focus?", L_explain_focus, + "What skills are there?", L_explain_skills, + "How do skills work?", L_explain_work, + "Thanks, I think I got it!", -; return; L_explain_focus: - mes "[Luca the Hunter]"; - mes "\"Well, you can learn many, many skills. But you can't really use all of them at once, not even old Aulsbels' head is big enough for that! So you have to focus.\""; - next; - mes "[Luca the Hunter]"; - mes "\"But you can change that focus whenever you want. It works like this: You come to me, you tell me what you want to focus on, and we do exercises until it's stuck in your head.\""; - next; - mes "[Luca the Hunter]"; - mes "\"If there's not enough space in your head, you'll first have to stop thinking about some other thing. There's an exercise I learned to do that, so when you talk to me you can just let me know what you want to forget.\""; - next; - mes "[Luca the Hunter]"; - if (getskilllv(SKILL_POOL) == 0) - mes "\"Right now you can't focus on anything yet, so I'll first have to teach you a simple skill to keep your focus.\""; - if (getskilllv(SKILL_POOL) == 1) - mes "\"Right now you can only focus on one thing at a time. So if you want to change, you have to forget whatever else you've focused on.\""; - if (getskilllv(SKILL_POOL) > 1) - mes "\"You can focus on " + getskilllv(SKILL_POOL) + " skills right now.\""; - next; - mes "[Luca the Hunter]"; - mes "\"You can come back to me to focus or unfocus whenever you want, I'm here all day.\""; - next; - goto S_explain_loop; + mes "[Luca the Hunter]"; + mes "\"Well, you can learn many, many skills. But you can't really use all of them at once, not even old Aulsbels' head is big enough for that! So you have to focus.\""; + next; + mes "[Luca the Hunter]"; + mes "\"But you can change that focus whenever you want. It works like this: You come to me, you tell me what you want to focus on, and we do exercises until it's stuck in your head.\""; + next; + mes "[Luca the Hunter]"; + mes "\"If there's not enough space in your head, you'll first have to stop thinking about some other thing. There's an exercise I learned to do that, so when you talk to me you can just let me know what you want to forget.\""; + next; + mes "[Luca the Hunter]"; + if (getskilllv(SKILL_POOL) == 0) + mes "\"Right now you can't focus on anything yet, so I'll first have to teach you a simple skill to keep your focus.\""; + if (getskilllv(SKILL_POOL) == 1) + mes "\"Right now you can only focus on one thing at a time. So if you want to change, you have to forget whatever else you've focused on.\""; + if (getskilllv(SKILL_POOL) > 1) + mes "\"You can focus on " + getskilllv(SKILL_POOL) + " skills right now.\""; + next; + mes "[Luca the Hunter]"; + mes "\"You can come back to me to focus or unfocus whenever you want, I'm here all day.\""; + next; + goto S_explain_loop; L_explain_skills: - mes "[Luca the Hunter]"; - mes "\"Well, I don't really know... lots, I think. I can teach you brawling, which is good when you've run out of arrows or don't have a weapon around.\""; - next; - mes "[Luca the Hunter]"; - mes "\"But there's other skills around. Some mages need special skills to concentrate, so ask around in that crowd, if that's your thing.\""; - next; - mes "[Luca the Hunter]"; - mes "\"I've also heard that there is someone in Hurnscald who can help you make your body more resistant against some things. But body and mind belong together, so you probably have to focus for that, too.\""; - next; - mes "[Luca the Hunter]"; - mes "\"Other than that, just ask around! There have to be some people who can teach you something...\""; - next; - goto S_explain_loop; + mes "[Luca the Hunter]"; + mes "\"Well, I don't really know... lots, I think. I can teach you brawling, which is good when you've run out of arrows or don't have a weapon around.\""; + next; + mes "[Luca the Hunter]"; + mes "\"But there's other skills around. Some mages need special skills to concentrate, so ask around in that crowd, if that's your thing.\""; + next; + mes "[Luca the Hunter]"; + mes "\"I've also heard that there is someone in Hurnscald who can help you make your body more resistant against some things. But body and mind belong together, so you probably have to focus for that, too.\""; + next; + mes "[Luca the Hunter]"; + mes "\"Other than that, just ask around! There have to be some people who can teach you something...\""; + next; + goto S_explain_loop; L_explain_work: - mes "[Luca the Hunter]"; - mes "\"Well, skills allow you to be better in some things, or just to do what you couldn't do without them. When you've learned a skill and are focussing on it, then it affects what you do.\""; - next; - mes "[Luca the Hunter]"; - mes "\"Now, when you start out with a skill, you won't be very good at it yet. But if you keep practicing you'll learn how to get better.\""; - next; - mes "[Luca the Hunter]"; - mes "\"My old teacher always called that getting `skill points' and that you can see them with [F5], whoever that is.\""; - next; - mes "[Luca the Hunter]"; - mes "\"She also said that with this [F5] thing you can get better at those skills, and that it costs you as many skill points as the level you want to go to.\""; - next; - mes "[Luca the Hunter]"; - mes "\"She always would have one cactus poition too many... but she was an amazing teacher.\""; - mes "He nods emphatically."; - next; - goto S_explain_loop; + mes "[Luca the Hunter]"; + mes "\"Well, skills allow you to be better in some things, or just to do what you couldn't do without them. When you've learned a skill and are focussing on it, then it affects what you do.\""; + next; + mes "[Luca the Hunter]"; + mes "\"Now, when you start out with a skill, you won't be very good at it yet. But if you keep practicing you'll learn how to get better.\""; + next; + mes "[Luca the Hunter]"; + mes "\"My old teacher always called that getting `skill points' and that you can see them with [F5], whoever that is.\""; + next; + //TODO: + //mes "[Luca the Hunter]"; + //mes "\"She also said that with this [F5] thing you can get better at those skills, and that it costs you as many skill points as the level you want to go to.\""; + //next; + mes "[Luca the Hunter]"; + mes "\"She always would have one cactus poition too many... but she was an amazing teacher.\""; + mes "He nods emphatically."; + next; + goto S_explain_loop; L_teachmore: - mes "[Luca the Hunter]"; - mes "\"Good to see you again!\""; - next; + mes "[Luca the Hunter]"; + mes "\"Good to see you again!\""; + next; L_teachmore2: - menu - "I would like to focus.", L_focus, - "I would like to unfocus.", L_unfocus, - "Can you teach me a skill?", L_teach_brawling, - "Can you explain skills again?", L_teachmore_explain, - "I'm done for now, thanks!"; - close; + setarray @choices, 0,0,0,0,0; + setarray @choice$, "", "", "", "", ""; + set @choice_nr, 0; + + set @C_focus, 1; + set @C_unfocus, 2; + set @C_teachbrawling, 3; + set @C_teachnothing, 4; + set @C_explainagain, 5; + set @C_nvm, 6; + + getactivatedpoolskilllist; + if (!((getskilllv(SKILL_POOL) - @skilllist_count) > 0)) goto L_teachmore2_nof; + getunactivatedpoolskilllist; + if (@skilllist_count == 0) goto L_teachmore2_nof; + set @choices[@choice_nr], @C_focus; + set @choice$[@choice_nr], "I would like to focus."; + set @choice_nr, @choice_nr + 1; +L_teachmore2_nof: + + getactivatedpoolskilllist; + if (@skilllist_count == 0) goto L_teachmore2_nounf; + set @choices[@choice_nr], @C_unfocus; + set @choice$[@choice_nr], "I would like to unfocus."; + set @choice_nr, @choice_nr + 1; +L_teachmore2_nounf: + + if (!(getskilllv(SKILL_BRAWLING))) + set @choices[@choice_nr], @C_teachbrawling; + if (getskilllv(SKILL_BRAWLING)) + set @choices[@choice_nr], @C_teachnothing; + set @choice$[@choice_nr], "Can you teach me a skill?"; + set @choice_nr, @choice_nr + 1; + + set @choices[@choice_nr], @C_explainagain; + set @choice$[@choice_nr], "Can you explain skills again?"; + set @choice_nr, @choice_nr + 1; + + set @choices[@choice_nr], @C_nvm; + set @choice$[@choice_nr], "I'm done for now, thanks!"; + set @choice_nr, @choice_nr + 1; + + menu + @choice$[0],-, + @choice$[1],-, + @choice$[2],-, + @choice$[3],-, + @choice$[4],-; + + set @menu, @menu - 1; + if (@choices[@menu] == 0) close; + if (@choices[@menu] == @C_focus) goto L_focus; + if (@choices[@menu] == @C_unfocus) goto L_unfocus; + if (@choices[@menu] == @C_teachbrawling) goto L_teach_brawling; + if (@choices[@menu] == @C_teachnothing) goto L_teach_nothing; + if (@choices[@menu] == @C_explainagain) goto L_teachmore_explain; + if (@choices[@menu] == @C_nvm) close; + close; L_teachmore_explain: callsub S_explain; - goto L_teachmore2; + goto L_teachmore2; L_focus: -//FIXME + getunactivatedpoolskilllist; + set @skilllist_id[@skilllist_count], 0; + set @skilllist_name$[@skilllist_count], "Nevermind"; + menu + @skilllist_name$[0], -, + @skilllist_name$[1], -, + @skilllist_name$[2], -, + @skilllist_name$[3], -, + @skilllist_name$[4], -, + @skilllist_name$[5], -, + @skilllist_name$[6], -, + @skilllist_name$[7], -; + + set @menu, @menu - 1; + if (@skilllist_id[@menu] == 0) + goto L_teachmore2; + + poolskill @skilllist_id[@menu]; + goto L_teachmore2; L_unfocus: -//FIXME + if (countitem("DementiaPotion") > 0) + goto L_unfocus_menu; + + if (MAGIG_FLAGS & MFLAG_KNOWS_UNFOCUS_RECIPE) + goto L_nopotion; + + mes "[Luca the Hunter]"; + mes "\"Unfocussing is one of the harder parts though, because it is sunk in. You see?\""; + next; + mes "\"So to remove that mental focus we will need a special potion.\""; + next; + mes "\"Maybe you should consult some very skilled alchemists.\""; + next; + mes "\"Ah yes, of course you will need a recipe. Although the alchemist usually knows it.\""; + next; + mes "\"The potion is called grimace of dementia. So the alchemist will know for sure.\""; + set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_KNOWS_UNFOCUS_RECIPE; + menu + "Ok, I will get a grimace of dementia potion", -, + "Alright, be right back!", -; + close; + +L_nopotion: + mes "[Luca the Hunter]"; + mes "\"Hey, You really need that dementia potion for unfocussing.\""; + next; + mes "\"Come back, when you found a suitable alchemist, who can mix such a potion.\""; + next; + goto L_teachmore2; + +L_unfocus_menu: + mes "[Luca the Hunter]"; + mes "\"Ahh, I see you have a dementia potion.\""; + next; + mes "\"What focus would you like to unfocus?\""; + + if (countitem("DementiaPotion") == 0) goto L_nopotion; + delitem "DementiaPotion", 1; + + getactivatedpoolskilllist; + + set @skilllist_id[@skilllist_count], 0; + set @skilllist_name$[@skilllist_count], "Nevermind"; + menu + @skilllist_name$[0], -, + @skilllist_name$[1], -, + @skilllist_name$[2], -, + @skilllist_name$[3], -, + @skilllist_name$[4], -, + @skilllist_name$[5], -, + @skilllist_name$[6], -, + @skilllist_name$[7], -; + + set @menu, @menu - 1; + if (@skilllist_id[@menu] == 0) + goto L_teachmore2; -L_teach_brawling: -//FIXME - close; + unpoolskill @skilllist_id[@menu]; + close; +L_teach_brawling: + mes "[Luca the Hunter]"; + mes "\"Well, yes, I can teach you brawling. It's a nice thing, if you have nothing left but your hands to defend yourself.\""; + next; + mes "He is laughing."; + mes "\"And is handy, if some sapling starts getting naughty.\""; + next; + mes "He rises his hand in front of his face and clenches his fists."; + mes "\"Ok, let's go! Hold your hands like this.\""; + next; + mes "......."; + next; + mes "Some bruises later."; + mes "\"Great! I think, you got it.\""; + next; + set @SUP_id, SKILL_BRAWLING; + set @SUP_lvl, 1; + set @SUP_name$, "Brawling"; + set @SUP_xp, @EXP_BRAWLING; + callfunc "SkillUp"; + close; + +L_teach_nothing: + mes "[Luca the Hunter]"; + mes "\"I was able to teach you brawling. For other professions you should visit someone else.\""; + next; + mes "\"You see, I am an adventurer. Everybody has his tricks. But you really should visit someone, who is a teacher, not an adventurer now.\""; + next; + goto L_teachmore2; } diff --git a/npc/001-1_Tulimshar/mikhail.txt b/npc/001-1_Tulimshar/mikhail.txt index 76a1ad59..6514c07d 100644 --- a/npc/001-1_Tulimshar/mikhail.txt +++ b/npc/001-1_Tulimshar/mikhail.txt @@ -1,60 +1,68 @@ // -001-1.gat,50,46,0 script Mikhail 120,{ - if (TMW_Quest == 6) goto L_Done; - if (TMW_Quest == 5) goto L_Progress; - if (TMW_Quest == 4) goto L_Start; - - mes "[Mikhail]"; - mes "\"Hello...\""; - close; - -L_Start: - mes "[Mikhail]"; - mes "\"My grandma sent me to get five [Maggot Slime]s from the maggots in the desert, but they scare me so bad!\""; - next; - mes "\"You look like a nice person. Would you go get them for me?\""; - menu - "Of course, I'll go get them for you.", L_accept, - "I've got other things to do right now.", L_close; - close; - +001-1.gat,50,46,0 script Mikhail 120, { + if (TMW_Quest >= 6) goto L_Done; + if (TMW_Quest == 5) goto L_Progress; + if (TMW_Quest == 4) goto L_Start; + if (TMW_Quest < 4) goto L_Convince_Mikhail_First; + + // If this happens, something is wrong with the above case handling. + mes "Mikhail looks confused."; + close; + +L_Convince_Mikhail_First: + mes "[Mikhail]"; + mes "\"Hello...\""; + mes ""; + mes "It seems that the boy would like to say more, but does not dare to open up to you. Maybe you should help someone else first, so that he sees your intentions are good."; + close; + +L_Start: + mes "[Mikhail]"; + mes "\"My grandma sent me to get five [Maggot Slime]s from the maggots in the desert, but they scare me so bad!\""; + next; + mes "\"You look like a nice person. Would you go get them for me?\""; + menu + "Of course, I'll go get them for you.", L_accept, + "I've got other things to do right now.", L_close; + close; + L_close: - close; - + close; + L_accept: - mes "[Mikhail]"; - mes "\"Thank you so much! I'll wait for you here.\""; - set TMW_Quest, 5; - close; - + mes "[Mikhail]"; + mes "\"Thank you so much! I'll wait for you here.\""; + set TMW_Quest, 5; + close; + L_Progress: - mes "[Mikhail]"; - mes "\"Did you bring me the five [Maggot Slime]s i need?\""; - next; - menu - "Yes, here they are, kiddo!", L_try, - "Not yet, but I'll be back soon.", L_close; - close; - + mes "[Mikhail]"; + mes "\"Did you bring me the five [Maggot Slime]s i need?\""; + next; + menu + "Yes, here they are, kiddo!", L_try, + "Not yet, but I'll be back soon.", L_close; + close; + L_try: - if countitem("MaggotSlime") >= 5 goto L_get; - mes "[Mikhail]"; - mes "\"It doesn't look like you have them all...\""; - close; - + if countitem("MaggotSlime") >= 5 goto L_get; + mes "[Mikhail]"; + mes "\"It doesn't look like you have them all...\""; + close; + L_get: - delitem "MaggotSlime", 5; - set TMW_Quest, 6; - mes "[Mikhail]"; - mes "\"Ooh! Thank you so much! I can get back to my grandma now!\""; - next; - getexp 100, 0; - mes "You get 100 xp."; - close; - + delitem "MaggotSlime", 5; + set TMW_Quest, 6; + mes "[Mikhail]"; + mes "\"Ooh! Thank you so much! I can get back to my grandma now!\""; + next; + getexp 100, 0; + mes "You get 100 xp."; + close; + L_Done: - mes "[Mikhail]"; - mes "\"Thanks again for helping me get those [Maggot Slime]s!\""; - close; - + mes "[Mikhail]"; + mes "\"Thanks again for helping me get those [Maggot Slime]s!\""; + close; +} diff --git a/npc/001-1_Tulimshar/rewards_master.txt b/npc/001-1_Tulimshar/rewards_master.txt index 571fe1c8..bd55b0ae 100644 --- a/npc/001-1_Tulimshar/rewards_master.txt +++ b/npc/001-1_Tulimshar/rewards_master.txt @@ -5,16 +5,16 @@ if (tvis == 0) set tvis, 1; if (Mobpt < tvis) goto L_NotEnough; - setarray @Items$, "AppleCake", "Arrow", "Beer", "Boots", "BugLeg", "CactusDrink", "CactusPotion", "Cake", "Candy", "CasinoCoins", "CherryCake", "ChickenLeg", "ChocolateBar", "ChocolateCake", "CottonBoots", "CottonCloth", "CottonShirt", "CottonShorts", "FancyHat", "GreenApple", "HardSpike", "IronOre", "Lifestone", "LightBlueDye", "MaggotSlime", "Milk", "Orange", "OrangeCake", "OrangeCupcake", "PinkPetal", "PileOfAsh", "PinkAntenna", "PoltergeistPowder", "RawLog", "RedApple", "RedDye", "ScorpionStinger", "SerfHat", "SmallHealingPotion", "SmallMushroom", "SnakeSkin", "SpectrePowder", "Steak", "TinyHealingPotion", "WhiteCake", "WhiteFur", "WispPowder", "YellowDye"; + setarray @Items$, "AppleCake", "Arrow", "Beer", "Boots", "BugLeg", "CactusDrink", "CactusPotion", "Cake", "Candy", "CasinoCoins", "CherryCake", "ChickenLeg", "ChocolateBar", "ChocolateCake", "CottonBoots", "CottonCloth", "CottonShirt", "CottonShorts", "FancyHat", "GreenApple", "HardSpike", "IronOre", "Lifestone", "LightBlueDye", "MaggotSlime", "Milk", "Orange", "OrangeCake", "OrangeCupcake", "PinkPetal", "PileOfAsh", "PinkAntenna", "PoltergeistPowder", "RawLog", "RedApple", "RedDye", "ScorpionStinger", "SerfHat", "SmallHealingPotion", "SmallMushroom", "SnakeSkin", "SpectrePowder", "Steak", "TinyHealingPotion", "WhiteCake", "WhiteFur", "WispPowder", "YellowDye", "Coal"; mes "[Ishi the Rewards Master]"; mes "\"Welcome! I see you have " + Mobpt + " Monster Points. Would you like to exchange some of those for items?\""; next; - + set @i, 0; setarray @Menu$, "", "", "", "", "", "", "", "", "", "", ""; callsub SUB_prep_menu; - + menu @Menu$[0], -, @Menu$[1], -, @@ -26,20 +26,24 @@ @Menu$[7], -, @Menu$[8], -, @Menu$[9], -, - @Menu$[10], -; + @Menu$[10], -, + @Menu$[11], -; + // this is for the last entry "No thanks": if (@menu > @i) close; - + // this is for the "Give all" entry: + if (@menu == @i) goto L_Give_all; + set @req, @menu; set @rec, 0; - + L_Item_Loop: if (@rec == @req || Mobpt < tvis) goto L_Item_Done; - + callsub SUB_give_item; set @rec, @rec + 1; goto L_Item_Loop; - + L_Item_Done: if (@rec < @req) mes "It looks like your Monster Points were over estimated."; close; @@ -54,6 +58,34 @@ L_NotEnough: mes "\"You don't have enough Monster Points for a reward. You'll need to kill some more monsters first.\""; close; + + +L_Give_all: + // we need to count how many loop iterations are done there, + // since the server complains about more than 250 (70 according to Jaxad0127) + // gotos without interrupting next statement. + set @gotocounter, 50; + +L_Give_all_loop: + set @gotocounter, @gotocounter - 1; + if (@gotocounter < 1) goto L_Give_all_next; + set @itemgiveerror, 0; + callsub SUB_give_item; + if (@itemgiveerror != 0) goto L_Give_all_done; + goto L_Give_all_loop; + +L_Give_all_next: + next; + mes "[Ishi the Rewards Master]"; + mes "\"You have brought lots of items now. You have still " + Mobpt + " monster points. Shall we continue?\""; + menu + "yes", L_Give_all, + "no", L_Give_all_done; + close; + +L_Give_all_done: + close; + ////////////////////////////////////////////////// // Subroutines ////////////////////////////////////////////////// @@ -61,29 +93,49 @@ L_NotEnough: SUB_prep_menu: set @pts, Mobpt; set @dif, tvis; - + L_Menu_Loop: - if (@pts < @dif || @i == 10) goto L_Menu_Done; - + if (@pts < @dif || @i == 10) goto L_Menu_Check; + set @Menu$[@i], @i + 1; - + set @i, @i + 1; set @pts, @pts - @dif; set @dif, @dif + 1; - + goto L_Menu_Loop; + +L_Menu_Check: + // if we are able to give 10, we can enable the option to give all we can have + if (@i != 10) goto L_Menu_Done; + set @Menu$[@i], "Please give me as many as I deserve!"; + set @i, @i + 1; + L_Menu_Done: set @Menu$[@i], "No thanks"; return; SUB_give_item: + set @itemgiveerror, 0; + getinventorylist; + if (@inventorylist_count == 100) goto SUB_give_noinv; + if (Mobpt < tvis) goto SUB_give_nomobpts; set Mobpt, Mobpt - tvis; set tvis, tvis + 1; set @item$, @Items$[rand(getarraysize(@Items$))]; - + getitem @item$, 1; - + mes "You received one " + getitemname(@item$) + "!"; - + return; + +SUB_give_noinv: + mes "Your inventory is full!"; + set @itemgiveerror, 1; + return; + +SUB_give_nomobpts: + mes "It looks like your Monster Points were over estimated."; + set @itemgiveerror, 1; return; } diff --git a/npc/001-1_Tulimshar/sandra.txt b/npc/001-1_Tulimshar/sandra.txt index 49d47a8a..45b91ab3 100644 --- a/npc/001-1_Tulimshar/sandra.txt +++ b/npc/001-1_Tulimshar/sandra.txt @@ -6,7 +6,7 @@ if (TMW_Quest == 10) goto L_Start; mes "[Sandra]"; - mes "\"Hunting monsters for potion ingredients can sometimes be a difficult task.\""; + mes "\"Hunting monsters for potion ingredients can sometimes be a difficult task. Maybe you could help me at some point.\""; close; L_Start: @@ -19,19 +19,19 @@ L_Start: L_Opening0: mes "[Sandra]"; - mes "\"In the outskirts of Tulimshar, there are some scorpions. I need a favor, please help me. Will you?\""; + mes "\"In the outskirts of Tulimshar, there are some scorpions... I need a favor, please help me! Will you?\""; next; goto L_Ask; L_Opening1: mes "[Sandra]"; - mes "\"When you venture in the outskirts of Tulimshar, you can spot scorpions. Will you help me kill some?\""; + mes "\"When you venture to the outskirts of Tulimshar, you can spot scorpions. Will you help me kill some?\""; next; goto L_Ask; L_Opening2: mes "[Sandra]"; - mes "\"The scorpion stinger carries many properties used in potions. Will you get some for me?\""; + mes "\"The [Scorpion Stinger] carries many properties used in potions. Would you get some for me?\""; next; goto L_Ask; @@ -43,8 +43,8 @@ L_Opening3: L_Ask: menu - "Yes", L_Yes, - "No", L_No; + "Yes.", L_Yes, + "No.", L_No; L_Yes: set @TEMP, rand(3); @@ -60,27 +60,26 @@ L_Req0: L_Req1: mes "[Sandra]"; - mes "\"I heard a while ago that scorpion stingers can be used for medical purposes. I need you to help me get 5 [Scorpion Stinger]s.\""; + mes "\"I heard a while ago that stingers from scorpions can be used for medical purposes. I need you to help me get 5 [Scorpion Stinger]s.\""; next; goto L_Set; L_Req2: mes "[Sandra]"; - mes "\"Bring me 5 [Scorpion Stinger]s. I'll give you something if you do.\""; + mes "\"Bring me 5 [Scorpion Stinger]s. I'll give you something if you do!\""; next; goto L_Set; L_Set: set TMW_Quest,11; mes "[Sandra]"; - mes "\"Please bring me them!\""; + mes "\"Please get them for me!\""; close; L_Progress: if (countitem("ScorpionStinger") < 5) goto L_NotEnough; mes "[Sandra]"; - mes "\"Excellent!"; - mes "You brought me 5 [Scorpion Stinger]s!\""; + mes "\"Excellent! You brought me 5 [Scorpion Stinger]s!\""; getinventorylist; if (@inventorylist_count + (countitem("ScorpionStinger") == 5) - (countitem("Arrow") == 0) > 99) goto L_TooMany; delitem "ScorpionStinger", 5; @@ -105,6 +104,6 @@ L_No: L_TooMany: next; mes "[Sandra]"; - mes "\"You don't have room for my reward. I'll wait until you do.\""; + mes "\"You don't have room for my reward. I'll wait until you do.\""; close; } diff --git a/npc/001-1_Tulimshar/sarah.txt b/npc/001-1_Tulimshar/sarah.txt index bc02bef4..7a109fa6 100644 --- a/npc/001-1_Tulimshar/sarah.txt +++ b/npc/001-1_Tulimshar/sarah.txt @@ -4,9 +4,19 @@ if (TMW_Quest >= 8) goto L_Done; if (TMW_Quest == 7) goto L_Progress; if (TMW_Quest == 6) goto L_Start; + if (TMW_Quest < 6) goto L_Convince_Sarah_First; + // If this is shown, something is wrong with the above case handling. + mes "Sarah looks confused."; + close; + +L_Convince_Sarah_First: mes "[Sarah]"; mes "\"Boy, am I hungry or what!\""; + next; + mes "\"The girl suddenly looks at you suspiciously.\""; + next; + mes "\"My mommy says not to talk to strangers!\""; close; L_Start: diff --git a/npc/001-1_Tulimshar/vincent.txt b/npc/001-1_Tulimshar/vincent.txt index b2f2e98b..ffd05162 100644 --- a/npc/001-1_Tulimshar/vincent.txt +++ b/npc/001-1_Tulimshar/vincent.txt @@ -4,10 +4,19 @@ if (TMW_Quest >= 10) goto L_Done; if (TMW_Quest == 9) goto L_Progress; if (TMW_Quest == 8) goto L_Start; + if (TMW_Quest < 8) goto L_Convince_Vincent_First; + // If this happens, something is wrong with the above code. + mes "Vincent looks confused."; + close; + +L_Convince_Vincent_First: mes "[Vincent]"; mes "\"I'm making an action figure. I'm almost done with it.\""; + mes ""; + mes "Vincent seems distracted with his near-completed figurine for now."; close; + L_Start: diff --git a/npc/002-1_Sandstorm/nickos.txt b/npc/002-1_Sandstorm/nickos.txt index a6a12926..04713ccf 100644 --- a/npc/002-1_Sandstorm/nickos.txt +++ b/npc/002-1_Sandstorm/nickos.txt @@ -17,7 +17,7 @@ mes "\"I'm watching this mine to make sure the monsters don't harm the miners.\""; close; -L_See_Dausen_First: +L_Nickos_See_Dausen_First: mes "[Nickos]"; mes "\"I'm watching this mine to make sure the monsters don't harm the miners.\""; next; diff --git a/npc/006-1_Desert_mountains/_warps.txt b/npc/006-1_Desert_mountains/_warps.txt index 823e937e..32d267e7 100644 --- a/npc/006-1_Desert_mountains/_warps.txt +++ b/npc/006-1_Desert_mountains/_warps.txt @@ -32,3 +32,4 @@ 006-1.gat,38,121 warp ToCave -1,-1,006-3.gat,38,122 006-1.gat,74,90 warp ToCave -1,-1,006-3.gat,74,91 006-1.gat,51,90 warp ToCave -1,-1,006-3.gat,51,91 +006-1.gat,30,123 warp ToCave -1,-1,032-3.gat,128,31 diff --git a/npc/006-1_Desert_mountains/pachua.txt b/npc/006-1_Desert_mountains/pachua.txt index f4d2a653..b59de60d 100644 --- a/npc/006-1_Desert_mountains/pachua.txt +++ b/npc/006-1_Desert_mountains/pachua.txt @@ -4,10 +4,12 @@ set @wants_leather_patch, QUEST_Forestbow_state & NIBBLE_4_MASK; + if (QUEST_MIRIAM_start != 0) goto L_smoke; + mes "[Chief Pachua]"; mes "\"How!\""; next; - + if (getequipid(equip_head) == 643 || getequipid(equip_head) == 644) goto L_WearingCowboy; if (getequipid(equip_legs) == 642) goto L_WearingChaps; @@ -195,4 +197,10 @@ L_TooMany: mes "[Chief Pachua]"; mes "\"You don't have room for a leather patch. Come back later.\""; close; + +L_smoke: + message strcharinfo(0), "Parua quickly inhales from his pipe and releases a ring of smoke towards the sky!"; + set QUEST_MIRIAM_run, gettimetick(1) - QUEST_MIRIAM_start; + set QUEST_MIRIAM_start, 0; + end; } diff --git a/npc/007-1_Woodland/_import.txt b/npc/007-1_Woodland/_import.txt index 0b239a93..717c476b 100644 --- a/npc/007-1_Woodland/_import.txt +++ b/npc/007-1_Woodland/_import.txt @@ -1,3 +1,4 @@ map: 007-1.gat npc: npc/007-1_Woodland/_mobs.txt npc: npc/007-1_Woodland/_warps.txt +npc: npc/007-1_Woodland/voltain.txt diff --git a/npc/007-1_Woodland/voltain.txt b/npc/007-1_Woodland/voltain.txt new file mode 100644 index 00000000..1359ada8 --- /dev/null +++ b/npc/007-1_Woodland/voltain.txt @@ -0,0 +1,363 @@ +// # NPC Name: Voltain +// # LEAD AUTHOR: Pjotr Orial +// # AUTHORS: MrDudle, tarq, Salmondine, Jenalya, Pjotr Orial +// # REVIEWERS: Jenalya +// # +// # Basic Idea: A Person with lots of dark minds requires different stuff. +// # Basically he tries to figure out, how to poison moobous, since he doesn't like the nature at all +// # +// # The variables are not attached to a player but to an npc variable, so it is more or less random, which +// # quest comes up, when a player asks him. +// # +// # used Variables: global variable $state +// # $state = 0: bring bottles +// # $state = 1: bring black scorpion stinger +// # $state = 2: bring bug legs +// # $state = 3: bring another black scorpion stinger +// # $state = 4: bring mauve herbs +// # $state = 5: bring raw logs +// # $state = 6: bring red apples +// # $state = 7: bring cobalt herbs +// # $state = 8: bring snake tongues +// # $state = 9: bring alizarin herbs +// # $state = 10:bring steak +// # $state = 11: bring arrows +// # $state = 12: bring gamboge herbs +// # $state = 13 bring chocolate cake + +007-1.gat,37,21,0 script Voltain 103, { + +set @BOTTLE_NEEDED, 3; +set @BOTTLE_REWARD_XP, 100; +set @BOTTLE_REWARD_GOLD, 450; + +set @BLACK_SC_ST_NEEDED, 5; +set @BLACK_SC_ST_REWARD_XP, 500; +set @BLACK_SC_ST_REWARD_GOLD, 250; + +set @BUGLEG_NEEDED, 10; +set @BUGLEG_REWARD_XP, 200; +set @BUGLEG_REWARD_GOLD, 150; + +set @HERBS_NEEDED, 7; +set @HERBS_REWARD_XP, 200; +set @HERBS_REWARD_GOLD, 250; + +set @RAWLOG_NEEDED, 5; +set @RAWLOG_REWARD_XP, 330; +set @RAWLOG_REWARD_GOLD, 300; + +set @REDAPPLE_NEEDED, 7; +set @REDAPPLE_REWARD_XP, 330; +set @REDAPPLE_REWARD_GOLD, 300; + +set @STEAK_NEEDED, 2; +set @STEAK_REWARD_XP, 330; +set @STEAK_REWARD_GOLD, 280; + +set @ARROW_NEEDED, 25; +set @ARROW_REWARD_XP, 330; +set @ARROW_REWARD_GOLD, 100; + +set @SNAKETONGUE_NEEDED, 3; +set @SNAKETONGUE_REWARD_XP, 330; +set @SNAKETONGUE_REWARD_GOLD, 100; + +set @CHOCOLATECAKE_NEEDED, 3; +set @CHOCOLATECAKE_REWARD_XP, 330; +set @CHOCOLATECAKE_REWARD_GOLD, 180; + +if ($state == 1) goto state1; +if ($state == 2) goto state2; +if ($state == 3) goto state3; +if ($state == 4) goto state4; +if ($state == 5) goto state5; +if ($state == 6) goto state6; +if ($state == 7) goto state7; +if ($state == 8) goto state8; +if ($state == 9) goto state9; +if ($state == 10) goto state10; +if ($state == 11) goto state11; +if ($state == 12) goto state12; +if ($state == 13) goto state13; +// default: trap through to state0! + +state0: +mes "[Voltain]"; +mes "\"What are you doing bothering me? Can't you see I'm busy! Oh, I'm sorry, I thought you were my assistant. Never mind that... would you care to help me?\""; +next; + +menu + "Sure I do!", -, + "No, you creep me out.", L_NOHELP; + +mes "[Voltain]"; +mes "\"I'm working on a very special potion. I need some empty bottles to keep the ingredients in. Care to go find me " + @BOTTLE_NEEDED + " empty bottles?!\""; +next; + +menu + "I've got the bottles.", -, + "I don't feel like helping you get garbage...", L_CLOSE; + +if (countitem("EmptyBottle") < @BOTTLE_NEEDED) goto L_NOT_ENOUGH; + delitem "EmptyBottle", @BOTTLE_NEEDED; + set zeny, zeny + @BOTTLE_REWARD_GOLD; + getexp @BOTTLE_REWARD_XP, 0; + set $state, 1; + mes "\"Thanks for the bottles. Much easier to carry liquid in them.\""; + close; + +state1: +mes "[Voltain]"; +mes "\"I'm making a potion that requires lots of venom. I'm in need of " + @BLACK_SC_ST_NEEDED + " black scorpion stingers.\""; +next; + +menu + "I've got the stingers!", -, + "I'll go search for the them.", L_CLOSE; + +mes "[Voltain]"; + if (countitem("BlackScorpionStinger") < @BLACK_SC_ST_NEEDED) goto L_NOT_ENOUGH; + delitem "BlackScorpionStinger", @BLACK_SC_ST_NEEDED; + set zeny, zeny + @BLACK_SC_ST_REWARD_GOLD; + getexp @BLACK_SC_ST_REWARD_XP, 0; + set $state, 2; + mes "\"Well, since you went to the trouble of getting me these here's a little something for your time...\""; + close; + + +state2: +mes "[Voltain]"; +mes "\"Care to to help me with my potion? I need " + @BUGLEG_NEEDED + " bug legs so that I can thicken the potion.\""; +next; + +menu + "I've got the bug legs.", -, + "I'd rather not carry around dead bugs for you.", L_NOHELP ; + +mes "[Voltain]"; + if (countitem("BugLeg") < @BUGLEG_NEEDED) goto L_NOT_ENOUGH; + delitem "BugLeg", @BUGLEG_NEEDED; + set zeny, zeny + @BUGLEG_REWARD_GOLD; + getexp @BUGLEG_REWARD_XP, 0; + set $state, 3; + mes "\"Great! My potion is ready to poison the moub...I mean cure scorpion stings. \""; + close; + +state3: +mes "[Voltain]"; +mes "\"I find myself in need of a black scorpion stinger... Damn mouboo are hard to kill...forget you heard that.\""; +next; + +menu + "Here's the stinger.", -, + "I DID HEAR THAT! I will not help you KILL mouboo!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("BlackScorpionStinger") < 1) goto L_NOT_ENOUGH; + delitem "BlackScorpionStinger", 1; + getexp @BLACK_SC_ST_REWARD_XP, 0; + set $state, 4; + mes "\"Great! Now I can really kill that monster!\""; + close; + +state4: +mes "[Voltain]"; +mes "\"I need to thicken a veno.. Oh a potion actually. I want to try mauve herbs for that, so can you bring me " + @HERBS_NEEDED + ", please?\""; +next; + +menu + "Here are the herbs.", -, + "So you want to do a venom? I will not help you!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("MauveHerb") < @HERBS_NEEDED) goto L_NOT_ENOUGH; + delitem "MauveHerb", @HERBS_NEEDED; + getexp @HERBS_REWARD_XP, 0; + set zeny, zeny + @HERBS_REWARD_GOLD; + set $state, 5; + mes "\"Great! Now I can thicken the potion! I will try directly.\""; + close; + + +state5: +mes "[Voltain]"; +mes "\"Hello I am looking for " + @RAWLOG_NEEDED + " raw logs, maybe you could help me, getting some? I want to try if i can build a mouboo trap.. Uhm actually no! I want to build a device to destroy these traps. So can you help me?\""; +next; + +menu + "Here are the raw logs.", -, + "So you want build traps for mouboos? NO WAY!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("RawLog") < @RAWLOG_NEEDED) goto L_NOT_ENOUGH; + delitem "RawLog", @RAWLOG_NEEDED; + getexp @RAWLOG_REWARD_XP, 0; + set zeny, zeny + @RAWLOG_REWARD_GOLD; + set $state, 6; + mes "\"Great! Now I can thicken the potion! I will try directly.\""; + close; + +state6: +mes "[Voltain]"; +mes "\"Hello I am looking for " + @REDAPPLE_NEEDED + " red apples, maybe I can inject some venoms.. DOH not this again! Of course I meant a strength potion. Did you hear about the new potions from Caul? He is a pretty good alchimist. He can do strength potions, can't he?\""; +next; + +menu + "Here are the red apples.", -, + "I am not sure...", L_CLOSE; + +mes "[Voltain]"; + if (countitem("RedApple") < @REDAPPLE_NEEDED) goto L_NOT_ENOUGH; + delitem "RedApple", @REDAPPLE_NEEDED; + getexp @REDAPPLE_REWARD_XP, 0; + set zeny, zeny + @REDAPPLE_REWARD_GOLD; + set $state,7; + mes "\"Very well, this will be useful.\""; + close; + +state7: +mes "[Voltain]"; +mes "\"I need to thicken a veno.. Oh a potion actually. Cobalt herbs might be good for that, so can you bring me " + @HERBS_NEEDED + ", please?\""; +next; + +menu + "Here are the herbs.", -, + "So you want to do a venom? I will not help you!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("CobaltHerb") < @HERBS_NEEDED) goto L_NOT_ENOUGH; + delitem "CobaltHerb", @HERBS_NEEDED; + getexp @HERBS_REWARD_XP, 0; + set zeny, zeny + @HERBS_REWARD_GOLD; + set $state, 8; + mes "\"Great! Now I can go on with the ven- the experiments for the welfare of humanity, i mean.\""; + close; + +state8: +mes "[Voltain]"; +mes "\"I am in need of snake tongues. They can help me getting very strong venom extracts. So I would like you to bring me " + @SNAKETONGUE_NEEDED + " snake tongues.\""; +next; + +menu + "Sure, here you go!", -, + "Maybe you will find someone else, I got stuff to do on my own!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("SnakeTounge") < @SNAKETONGUE_NEEDED) goto L_NOT_ENOUGH; + delitem "SnakeTounge", @SNAKETONGUE_NEEDED; + getexp @SNAKETONGUE_REWARD_XP, 0; + set zeny, zeny + @SNAKETONGUE_REWARD_GOLD; + set $state, 9; + mes "\"Excellent, now I can extract the venom to- uhm, nevermind, thanks for your help.\""; + close; + +state9: +mes "[Voltain]"; +mes "\"I need to thicken a veno.. Oh a potion actually. I want to try alizarin herbs for that, so can you bring me " + @HERBS_NEEDED + ", please?\""; +next; + +menu + "Here are the herbs.", -, + "So you want to do a venom? I will not help you!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("AlizarinHerb") < @HERBS_NEEDED) goto L_NOT_ENOUGH; + delitem "AlizarinHerb", @HERBS_NEEDED; + getexp @HERBS_REWARD_XP, 0; + set zeny, zeny + @HERBS_REWARD_GOLD; + set $state, 10; + mes "\"Great! Now I can thicken the potion! I will try directly.\""; + close; + +state10: +mes "[Voltain]"; +mes "\"Oh I am hungry. Maybe I can eat some steaks. Could you bring me a steak, please?\""; +next; +mes "\"Oh, I just wonder, if i can inject some ven... Forget about that! Bring me " + @STEAK_NEEDED + "steaks!\""; +next; + +menu + "Here you go.", -, + "Help yourself! In the Hurnscald Inn you get some meal for sure!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("Steak") < @STEAK_NEEDED) goto L_NOT_ENOUGH; + delitem "Steak", @STEAK_NEEDED; + getexp @STEAK_REWARD_XP, 0; + set zeny, zeny + @STEAK_REWARD_GOLD; + set $state, 11; + mes "\"Thanks a lot. I will really enjoy my meal.\""; + close; + +state11: +mes "[Voltain]"; +mes "\"Could I have some arrows please? I have lost my hunting equipment when I was in the caves. Some dark creatures were chasing me!\""; +next; +mes "\"Acually I wonder if I can use these arrows for building a mouboo trap.... Oh wait! I need some" + @ARROW_NEEDED + " arrows for my self defence right? So do not talk about it!\""; + +menu + "Here you go.", -, + "Sorry I don't have arrows here!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("Arrow") < @ARROW_NEEDED) goto L_NOT_ENOUGH; + delitem "Arrow", @ARROW_NEEDED; + getexp @ARROW_REWARD_XP, 0; + set zeny, zeny + @ARROW_REWARD_GOLD; + set $state, 12; + mes "\"Thanks a lot. Now I feel more secure here in outdoors.\""; + close; + +state12: +mes "[Voltain]"; +mes "\"I need to thicken a veno.. Oh a potion actually. I want to try gamboge herbs for that, so can you bring me " + @HERBS_NEEDED + ", please?\""; +next; + +menu + "Here are the herbs.", -, + "So you want to do a venom? I will not help you!", L_CLOSE; + +mes "[Voltain]"; + if (countitem("GambogeHerb") < @HERBS_NEEDED) goto L_NOT_ENOUGH; + delitem "GambogeHerb", @HERBS_NEEDED; + getexp @HERBS_REWARD_XP, 0; + set zeny, zeny + @HERBS_REWARD_GOLD; + set $state, 13; + mes "\"Great! Now I can thicken the potion! I will try directly.\""; + close; + +state13: +mes "[Voltain]"; +mes "\"Doing so many ev- good things makes me hungry. I feel in the mood for a Chocolate Cake. Can you bring me " + @CHOCOLATECAKE_NEEDED + " , please? \""; +next; + +menu + "Here it is.", -, + "I don't feel in the mood to bring you a cake.", L_CLOSE; + +mes "[Voltain]"; + if (countitem("ChocolateCake") < @CHOCOLATECAKE_NEEDED) goto L_NOT_ENOUGH; + delitem "ChocolateCake", @CHOCOLATECAKE_NEEDED; + getexp @CHOCOLATECAKE_REWARD_XP, 0; + set zeny, zeny + @CHOCOLATECAKE_REWARD_GOLD; + set $state, 0; + mes "\"I love chocolate cakes. I wonder, if I can use my ven- \""; + emotion 5; + close; + +L_NOHELP: +mes "\"If you don't want to help me, then away with you. Bothering me won't help me get my work done.\""; +mes "Voltain than mumbles something under his breath that you cannot quite make out"; +mes "\"... These damn kids. \""; +close; + +L_CLOSE: +close; + +L_NOT_ENOUGH: +mes "\"Can't you count!? I need more. \""; +close; +} + + diff --git a/npc/008-1_Hurnscald_outskirts/_import.txt b/npc/008-1_Hurnscald_outskirts/_import.txt index 2bdd6303..312d7fbf 100644 --- a/npc/008-1_Hurnscald_outskirts/_import.txt +++ b/npc/008-1_Hurnscald_outskirts/_import.txt @@ -2,6 +2,7 @@ map: 008-1.gat npc: npc/008-1_Hurnscald_outskirts/_mobs.txt npc: npc/008-1_Hurnscald_outskirts/_warps.txt npc: npc/008-1_Hurnscald_outskirts/andra.txt +npc: npc/008-1_Hurnscald_outskirts/diryn.txt npc: npc/008-1_Hurnscald_outskirts/dock.txt npc: npc/008-1_Hurnscald_outskirts/george.txt npc: npc/008-1_Hurnscald_outskirts/hinnak.txt diff --git a/npc/009-1_Hurnscald/diryn.txt b/npc/008-1_Hurnscald_outskirts/diryn.txt index 70d646d4..64d75676 100644 --- a/npc/009-1_Hurnscald/diryn.txt +++ b/npc/008-1_Hurnscald_outskirts/diryn.txt @@ -1,6 +1,6 @@ //This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world. -009-1.gat,51,38,0 script Diryn the Traveler 103,{ +008-1.gat,81,82,0 script Diryn the Traveler 103,{ mes "[Diryn]"; mes "\"Greetings. I am Diryn the Traveler, Assistant Councilor of Tulimshar and teleportation extraordinaire. Tulimshar is expanding our influence throughout the world, so I was sent here to aid all who are willing and able to take on the threats to our interests.\""; next; @@ -14,45 +14,63 @@ L_Diryn_Yes: mes "[Diryn]"; mes "\"Excellent. I can send you to many places, but again, the fees are large. Where shall I send you?\""; menu - "Druid Tree (5000 GP)", L_Diryn_Druid_Tree, - "Graveyard (10000 GP)", L_Diryn_Graveyard, - "Magic House (5000 GP)", L_Diryn_Magic_House, - "Tulimshar Town Square (2000 GP)", L_Diryn_Tulimshar, + "Druid Tree (1500 GP)", L_Diryn_Druid_Tree, + "Graveyard (1500 GP)", L_Diryn_Graveyard, + "Magic House (1000 GP)", L_Diryn_Magic_House, + "Terranite Cave (1500 GP)", L_Diryn_Terranite, + "Tulimshar Town Square (1000 GP)", L_Diryn_Tulimshar, + "Nivalis (1000 GP)", L_Diryn_Nivalis, "Not Interested", L_Diryn_No; close; L_Diryn_Druid_Tree: - if (zeny < 10000) goto L_NoMoney; + if (zeny < 1500) goto L_NoMoney; mes "[Diryn]"; mes "\"Be fearless!\""; - set zeny, zeny-10000; + set zeny, zeny-1500; warp "005-1.gat",73,36; close; L_Diryn_Graveyard: - if (zeny < 15000) goto L_NoMoney; + if (zeny < 1500) goto L_NoMoney; mes "[Diryn]"; mes "\"Be fearless!\""; - set zeny, zeny-15000; + set zeny, zeny-1500; warp "027-1.gat",70,85; close; L_Diryn_Magic_House: - if (zeny < 10000) goto L_NoMoney; + if (zeny < 1000) goto L_NoMoney; mes "[Diryn]"; mes "\"Be fearless!\""; - set zeny, zeny-10000; + set zeny, zeny-1000; warp "013-1.gat",45,92; close; +L_Diryn_Terranite: + if (zeny < 1500) goto L_NoMoney; + mes "[Diryn]"; + mes "\"Be fearless!\""; + set zeny, zeny-1500; + warp "012-3.gat",445,65; + close; + L_Diryn_Tulimshar: - if (zeny < 5000) goto L_NoMoney; + if (zeny < 1000) goto L_NoMoney; mes "[Diryn]"; mes "\"Be fearless!\""; - set zeny, zeny-5000; + set zeny, zeny-1000; warp "001-1.gat",44,70; close; +L_Diryn_Nivalis: + if (zeny < 1000) goto L_NoMoney; + mes "[Diryn]"; + mes "\"Be fearless!\""; + set zeny, zeny-1000; + warp "020-1.gat",71,100; + close; + L_Diryn_No: mes "[Diryn]"; mes "\"Perhaps some day you will have the courage to help us. Enjoy your stay here in Hurnscald.\""; diff --git a/npc/009-1_Hurnscald/_import.txt b/npc/009-1_Hurnscald/_import.txt index 07c60602..ff08fce7 100644 --- a/npc/009-1_Hurnscald/_import.txt +++ b/npc/009-1_Hurnscald/_import.txt @@ -1,7 +1,6 @@ map: 009-1.gat npc: npc/009-1_Hurnscald/_mobs.txt npc: npc/009-1_Hurnscald/_warps.txt -npc: npc/009-1_Hurnscald/diryn.txt npc: npc/009-1_Hurnscald/jack.txt npc: npc/009-1_Hurnscald/mapflags.txt npc: npc/009-1_Hurnscald/milly.txt diff --git a/npc/009-2_Hurnscald/_import.txt b/npc/009-2_Hurnscald/_import.txt index 25d4868d..1ee969c2 100644 --- a/npc/009-2_Hurnscald/_import.txt +++ b/npc/009-2_Hurnscald/_import.txt @@ -7,6 +7,7 @@ npc: npc/009-2_Hurnscald/doctor.txt npc: npc/009-2_Hurnscald/drunks.txt npc: npc/009-2_Hurnscald/inspector.txt npc: npc/009-2_Hurnscald/kfahr.txt +npc: npc/009-2_Hurnscald/lena.txt npc: npc/009-2_Hurnscald/mapflags.txt npc: npc/009-2_Hurnscald/misc.txt npc: npc/009-2_Hurnscald/nicholas.txt diff --git a/npc/009-2_Hurnscald/lena.txt b/npc/009-2_Hurnscald/lena.txt new file mode 100644 index 00000000..52144a35 --- /dev/null +++ b/npc/009-2_Hurnscald/lena.txt @@ -0,0 +1,105 @@ +// Quest for Fairy Hat and Forest Armor + +009-2.gat,146,43,0 script Lena 182,{ + + if (TMW_Quest >= 46) goto L_Lena_Done; + if (TMW_Quest == 45) goto L_Lena_Success; + if (TMW_Quest == 44) goto L_Lena_Bandit_Leader_Fail; + if (TMW_Quest == 43) goto L_Lena_Bandit_Leader_Fail; + if (TMW_Quest == 42) goto L_Lena_Bandit_Leader; + if (TMW_Quest == 41) goto L_Lena_Fairy_Hat; + if (TMW_Quest == 40) && (baselevel >= 30) goto L_Lena_Start; + + mes "[Lena]"; + mes "\"I got ambushed by a group of bandits and one of them stabbed me pretty good. Hopefully I heal up soon so I can fight this menace.\""; + close; + +L_Lena_Start: + mes "[Lena]"; + mes "\"While wandering through the forest, I was ambushed by bandits. Though I got them all, one of them stabbed me pretty good. I'm still healing from that encounter. I'm worried that the bandit threat may spread.\""; + menu + "Don't worry, I can take out some of these scumbags.", L_Lena_Approves, + "I think I left my courage in another pair of pants. See you later!", L_Lena_No_Fan; + close; + +L_Lena_Approves: + set TMW_Quest, 41; + mes "[Lena]"; + mes "\"You look like you can handle yourself in a fight. If you can take on this scourge I'll reward you with a hat like mine. In order to prove your mettle, bring me 10 [Bandit Hood]s so I know they've met their match.\""; + areamonster "008-1.gat",25,60,40,65,"Bandit",1064,3, "::"; + areamonster "011-1.gat",35,40,65,60,"Bandit",1064,3, "::"; + close; + +L_Lena_No_Fan: + mes "[Lena]"; + mes "\"What will Hurnscald do if these bandits overrun the town? I hope you reconsider.\""; + close; + +L_Lena_Fairy_Hat: + if (countitem("BanditHood") < 10) goto L_Lena_NotEnough; + getinventorylist; + if (@inventorylist_count - (countitem("BanditHood")== 10) > 99) goto L_TooMany; + set TMW_Quest, 42; + delitem "BanditHood", 10; + getitem "FairyHat", 1; + mes "[Lena]"; + mes "\"Ah, you've brought me the [Bandit Hood]s. As promised, here is a hat like mine.\""; + next; + mes "\"Unfortunately, I feel this bandit threat may of grown. Perhaps they are being lead? I noticed many of them seem to hang around a cave just west of Hurnscald. If you could defeat their leader I know they will become less of a threat to Hurnscald. I'll reward you with armor like mine if you do. Sound like something you could do?\""; + menu + "Consider it done!", L_Lena_Bandit_Leader_Yes, + "Woah there, that sounds a bit harder than what I can suceed at.", L_Lena_NoWay; + close; + +L_Lena_NotEnough: + mes "[Lena]"; + mes "\"You don't have enough [Bandit Hood]s to prove you are taking care of this threat. Please come back with 10 [Bandit Hood]s to show you are taking care of these bandits.\""; + close; + +L_Lena_Bandit_Leader: + mes "[Lena]"; + mes "\"I feel this bandit threat may of grown. Perhaps they are being lead? I noticed many of them seem to hang around a cave just west of Hurnscald. If you could defeat their leader I know they will become less of a threat to Hurnscald. I'll reward you with armor like mine if you do. Sound like something you could do?\""; + menu + "Consider it done!", L_Lena_Bandit_Leader_Yes, + "Woah there, that sounds a bit harder than what I can succeed at.", L_Lena_NoWay; + close; + +L_Lena_Bandit_Leader_Yes: + set TMW_Quest, 43; + areamonster "008-1.gat",25,60,40,65,"Bandit",1064,3, "::"; + areamonster "011-1.gat",35,40,65,60,"Bandit",1064,3, "::"; + mes "[Lena]"; + mes "\"You have a brave heart. Though I know you can suceed on your own, I recommend finding others to help you defeat the bandit leader. I believe he could pose a significant threat to solitary individuals seeking to challenge him. Good luck!\""; + close; + +L_Lena_NoWay: + mes "[Lena]"; + mes "\"That is too bad. Feel free to return at any time. This bandit threat needs to be pushed back.\""; + close; + +L_Lena_Bandit_Leader_Fail: + set TMW_Quest, 43; + mes "[Lena]"; + mes "\"You haven't killed the bandit leader yet. This is a big problem. Please be careful.\""; + close; + +L_Lena_Success: + getinventorylist; + if (@inventorylist_count == 100) goto L_TooMany; + set TMW_Quest, 46; + getitem "ForestArmor", 1; + mes "[Lena]"; + mes "\"Excellent! You killed the bandit leader. Here is the armor as I promised you. Safe journeys!\""; + close; + +L_Lena_Done: + mes "[Lena]"; + mes "\"Thank you for all your help. With your efforts, we can only hope this scourge doesn't see a resurgence.\""; + close; + +L_TooMany: + mes "[Lena]"; + mes "\"You have too many items in your inventory. Please get rid of something so I can reward you.\""; + close; + +} diff --git a/npc/009-2_Hurnscald/nicholas.txt b/npc/009-2_Hurnscald/nicholas.txt index 8c820849..d3767a97 100644 --- a/npc/009-2_Hurnscald/nicholas.txt +++ b/npc/009-2_Hurnscald/nicholas.txt @@ -36,54 +36,44 @@ set @Q_SHIELD_status, (QUEST_Forestbow_state & @Q_SHIELD_MASK) >> @Q_SHIELD_SHIFT; mes "[Nicholas]"; - mes "\"Hello there,"; - mes "I'm an expert blacksmith."; - mes "If you get me some coal and iron ingots"; - mes "I could make you a very valuable shield"; - mes "or helmet.\""; + mes "\"Hello, there! I'm an expert blacksmith. If you get me some [Coal] and [Iron Ingot]s, I could make you a very valuable shield or helmet.\""; next; menu - "I have iron ingots!", L_Check, - "Where can I get coal and iron Ingots?", L_Info, + "I have Iron Ingots!", L_Check, + "Where can I get Coal and Iron Ingots?", L_Info, "I'm okay, thanks.", L_Pass; L_Check: mes "[Nicholas]"; - mes "\"Let me take at look at how much you have...\""; + mes "\"Let me take a look at how much you have...\""; next; - if ( (countitem("IngotIron")<3) | (countitem("Coal") < 6) ) goto L_NoItem; - if ( (countitem("IngotIron")<6) | (countitem("Coal") < 12) ) goto L_StageA; - if ( (countitem("IngotIron")<9) | (countitem("Coal") < 18) ) goto L_StageB; + if ( (countitem("IngotIron")<3) || (countitem("Coal") < 6) ) goto L_NoItem; + if ( (countitem("IngotIron")<6) || (countitem("Coal") < 12) ) goto L_StageA; + if ( (countitem("IngotIron")<9) || (countitem("Coal") < 18) ) goto L_StageB; goto L_StageC; L_Info: mes "[Nicholas]"; - mes "\"You can find coal and iron ore in mines."; - mes "\"Once you have coal and iron ore, find a smith that will smelt the iron ore and cast them into iron ingots."; - mes "\"Come back here with more coal and the iron ingots and I'll make something nice for you.\""; + mes "\"You can find [Coal] and [Iron Ore] in mines. Once you have [Coal] and [Iron Ore], find a smith that will smelt the [Iron Ore] and cast them into [Iron Ingot]s.\""; + next; + mes "[Nicholas]"; + mes "\"Come back here with some [Coal] and [Iron Ingot]s, and I'll make something nice for you.\""; close; L_Pass: mes "[Nicholas]"; - mes "\"Oh, okay"; - mes "Come back any time.\""; + mes "\"Oh, okay. Come back any time.\""; close; L_StageA: mes "[Nicholas]"; - mes "\"That's just enough for me to make you"; - mes "a winged Knight's Helmet."; - mes "But it'll cost you 10,000GP,"; - mes "6 Coal and 3 Iron Ingots.\""; + mes "\"That's just enough for me to make you a winged [Knight's Helmet], but it'll cost you 10,000GP, 6 [Coal] and 3 [Iron Ingot]s.\""; next; goto L_main_menu; L_StageB: mes "[Nicholas]"; - mes "\"Ahh, with that much coal and iron ingots I can"; - mes "make you one of two helmets,"; - mes "for only 10,000GP, or I can"; - mes "make you a shield, for 20,000GP.\""; + mes "\"Ahh, with that much [Coal] and [Iron Ingot]s I can make you one of two helmets, for only 10,000GP, or I can make you a shield, for 20,000GP.\""; mes ""; mes "\"What would you like?\""; next; @@ -91,13 +81,9 @@ L_StageB: L_StageC: mes "[Nicholas]"; - mes "\"Excellent, that's enough to make"; - mes "three different types of helmet."; - mes "My fee is 10,000GP."; - mes "I can also make a shield, but that"; - mes "that will cost you 20,000 GP.\""; + mes "\"Excellent, that's enough to make three different types of helmet. My fee is 10,000GP. I can also make a shield, but that will cost you 20,000 GP.\""; mes ""; - mes "\"Which helmet or shield will it be?\""; + mes "\"Which will it be?\""; next; goto L_main_menu; @@ -115,30 +101,30 @@ L_main_menu: setarray @choice_idx, 0, 0, 0, 0, 0, 0; if (countitem("ShortSword") < 1) goto L_main_menu_post_setzer; - set @choice$[@choices_nr], "Can you make my short sword better?"; + set @choice$[@choices_nr], "Can you make my Short Sword better?"; set @choice_idx[@choices_nr], @CHOICE_SETZER; set @choices_nr, 1 + @choices_nr; L_main_menu_post_setzer: - if ( (countitem("IngotIron")<3) | (countitem("Coal") <6) ) goto L_no_more_helmets; - set @choice$[@choices_nr], "Knight's Helmet. (3 Iron Ingots & 6 Coal)"; + if ( (countitem("IngotIron")<3) || (countitem("Coal") <6) ) goto L_no_more_helmets; + set @choice$[@choices_nr], "Knight's Helmet (3 Iron Ingots & 6 Coal)."; set @choice_idx[@choices_nr], @CHOICE_KNIGHT; set @choices_nr, 1 + @choices_nr; - if ( (countitem("IngotIron")<6) | (countitem("Coal") < 12) ) goto L_no_more_helmets; + if ( (countitem("IngotIron")<6) || (countitem("Coal") < 12) ) goto L_no_more_helmets; - set @choice$[@choices_nr], "Crusade Helmet. (6 Iron Ingots & 12 Coal)"; + set @choice$[@choices_nr], "Crusade Helmet (6 Iron Ingots & 12 Coal)."; set @choice_idx[@choices_nr], @CHOICE_CRUSADE; set @choices_nr, 1 + @choices_nr; - set @choice$[@choices_nr], "Steel Shield. (6 Iron Ingots)"; + set @choice$[@choices_nr], "Steel Shield (6 Iron Ingots & 12 Coal)."; set @choice_idx[@choices_nr], @CHOICE_SHIELD; set @choices_nr, 1 + @choices_nr; - if ( (countitem("IngotIron")<9) | (countitem("Coal") < 18) ) goto L_no_more_helmets; + if ( (countitem("IngotIron")<9) || (countitem("Coal") < 18) ) goto L_no_more_helmets; - set @choice$[@choices_nr], "Warlord Helmet. (9 Iron Ingots & 18 Coal)"; + set @choice$[@choices_nr], "Warlord Helmet (9 Iron Ingots & 18 Coal)."; set @choice_idx[@choices_nr], @CHOICE_WARLORD; set @choices_nr, 1 + @choices_nr; L_no_more_helmets: @@ -172,8 +158,7 @@ L_no_more_helmets: L_NoItem: mes "[Nicholas]"; - mes "\"It appears you don't have enough Coal and Iron Ingots for me to work with."; - mes "Please do come back when you have more though.\""; + mes "\"It appears you don't have enough [Coal] and [Iron Ingot]s for me to work with. Please do come back when you have more, though.\""; close; L_ComeBack: @@ -188,6 +173,7 @@ L_NoMoney: L_YesKnight: if (zeny < 10000) goto L_NoMoney; + if ( (countitem("IngotIron")<3) || (countitem("Coal") < 6) ) goto L_NoItem; getinventorylist; if (@inventorylist_count == 100) goto L_TooMany; set zeny, zeny - 10000; @@ -198,6 +184,7 @@ L_YesKnight: L_YesCrusade: if (zeny < 10000) goto L_NoMoney; + if ( (countitem("IngotIron")<6) || (countitem("Coal") < 12) ) goto L_NoItem; getinventorylist; if (@inventorylist_count == 100) goto L_TooMany; set zeny, zeny-10000; @@ -208,6 +195,7 @@ L_YesCrusade: L_YesWarlord: if (zeny < 10000) goto L_NoMoney; + if ( (countitem("IngotIron")<9) || (countitem("Coal") < 18) ) goto L_NoItem; getinventorylist; if (@inventorylist_count == 100) goto L_TooMany; set zeny, zeny-10000; @@ -218,7 +206,7 @@ L_YesWarlord: L_YesShield: mes "[Nicholas]"; - mes "Nicholas examines your Iron Ingots."; + mes "Nicholas examines your [Iron Ingot]s."; mes "\"No, this iron is too brittle; for something as large as a shield I need to mix in softer iron. Can I see if you have anything suitable?\""; next; @@ -229,8 +217,8 @@ L_YesShield: if (countitem("InfantryHelmet") == 0) goto L_NoInfantry; mes "[Nicholas]"; - mes "Nicholas pulls out two of your infantry helmets."; - mes "\"I can use those... yes, that should work. Now all I need is a leather patch for the handle, and 20,000 GP.\""; + mes "Nicholas pulls out two of your [Infantry Helmet]s."; + mes "\"I can use those... yes, that should work. Now all I need is a [Leather Patch] for the handle, and 20,000 GP.\""; if (@Q_SHIELD_status < @SHIELD_KNOWS_PATCH) set @Q_SHIELD_status, @SHIELD_KNOWS_PATCH; @@ -238,8 +226,8 @@ L_YesShield: next; - menu "Here you are.", -, - "Where can I get a leather patch?", L_WhereLeather, + menu "Here you are!", -, + "Where can I get a Leather Patch?", L_WhereLeather, "No way.", L_Pass; if (zeny < 20000) goto L_ShieldNoZeny; @@ -251,7 +239,7 @@ L_YesShield: mes "[Nicholas]"; mes "\"Yes, it looks as if you have all that is needed!\""; - mes "You watch Nicholas melt the ingots and helmets and form a shield out of the resulting iron. He then cuts your leather patch apart and adds it to the handles."; + mes "You watch Nicholas melt the ingots and helmets and form a shield out of the resulting iron. He then cuts your [Leather Patch] apart and adds it to the handles."; mes "\"Here is your shield!\""; delitem "InfantryHelmet", 1; @@ -279,34 +267,34 @@ L_ShieldNoZeny: L_ShieldNoInfantry: mes "[Nicholas]"; - mes "\"Now this is strange... I could have sworn that you had two infantry helmets right here. Well, come back if you have some more!\""; + mes "\"Now this is strange... I could have sworn that you had two [Infantry Helmet]s right here. Well, come back if you have some more!\""; close; L_ShieldNoIngot: mes "[Nicholas]"; - mes "\"How odd... didn't I put your iron ingots on the table right here? Well, I will need it back to make the shield.\""; + mes "\"How odd... didn't I put your [Iron Ingot]s on the table right here? Well, I will need them back to make the shield.\""; close; L_ShieldNoCoal: mes "[Nicholas]"; - mes "\"How odd... didn't I put your coal on the table right here? Well, I will need it back to make the shield.\""; + mes "\"How odd... didn't I put your [Coal] on the table right here? Well, I will need it back to make the shield.\""; close; L_ShieldNoLeatherPatch: mes "[Nicholas]"; - mes "\"You don't have a suitable leather patch. I'm sorry, but a shield without one would chafe terribly.\""; + mes "\"You don't have a suitable [Leather Patch]. I'm sorry, but a shield without one would chafe terribly.\""; close; L_MoreInfantry: mes "[Nicholas]"; - mes "Nicholas takes your infantry helmet and examines it."; + mes "Nicholas takes your [Infantry Helmet] and examines it."; mes "\"Yes, this is perfect! If you can bring me another one of those, I can make your shield.\""; close; L_NoInfantry: mes "[Nicholas]"; mes "Nicholas shakes his head."; - mes "\"No, none of these items are suitable. Try looking for somewhat large metal things.\""; + mes "\"No, none of these items are suitable. Try looking for somewhat large metal items.\""; close; L_WhereLeather: @@ -319,8 +307,8 @@ L_SetzerQuest: mes "[Nicholas]"; if (@Q_SETZER_status & @SETZER_FLAG_MADE_SETZER) mes "\"Another one? Sure, why not.\""; - mes "Nicholas examines your short sword, then nods."; - mes "\"This is good quality. I can make something special out of it, with three ingot bars of iron and 50,000 GP-- but I will also need a potion of monster oil.\""; + mes "Nicholas examines your [Short Sword], then nods."; + mes "\"This is good quality. I can make something special out of it, with three ingot bars of iron, six lumps of coal and 50,000 GP -- but I will also need a potion of monster oil.\""; if (@Q_SETZER_status < @SETZER_KNOWS_OIL) set @Q_SETZER_status, @SETZER_KNOWS_OIL; callsub L_Update_Var; @@ -328,16 +316,16 @@ L_SetzerQuest: menu "Here you are.", -, "Monster oil? What's that?", L_ExplainMonsterOil, - "HOW much? Never mind.", L_Pass; + "HOW much? Nevermind then!", L_Pass; if (zeny < 50000) goto L_SetzerNoZeny; - if ( (countitem("IngotIron") < 3) | (countitem("Coal") < 6) ) goto L_SetzerNoIngot; + if ( (countitem("IngotIron") < 3) || (countitem("Coal") < 6) ) goto L_SetzerNoIngot; if (countitem("MonsterOilPotion") < 1) goto L_SetzerNoMonsterOil; if (countitem("ShortSword") < 1) goto L_SetzerNoSword; // No inventory check needed, as the short sword is removed, opening a slot mes "[Nicholas]"; - mes "Nicholas takes the items, heats up your sword and pounds it with a heavy hammer. Before your eyes it turns thinner and flatter. Finally he pours the monster oil over it, heats it up again and douses it in water."; + mes "Nicholas takes the items, heats up your sword and pounds it with a heavy hammer. As you watch, it turns thinner and flatter. Finally he pours the monster oil over it, heats the metal up again and douses it in water."; set zeny, zeny - 50000; delitem "IngotIron", 3; @@ -356,16 +344,16 @@ L_SetzerQuest: mes "[Nicholas]"; mes "Nicholas hands you the completed sword. It feels strangely light in your hands."; - mes "\"I made it lighter and faster, it should also cut a little better now. This kind of sword is called a Setzer, after a famous gambler who invented it as a weapon in between a knife and a sword.\""; + mes "\"I made it lighter and faster, it should also cut a little better now. This kind of sword is called a [Setzer], after a famous gambler who invented it as a weapon in between a knife and a sword.\""; next; mes "[Nicholas]"; - mes "\"I'm quite happy with this one. Be careful around the edge, though, it is quite sharp.\""; + mes "\"I'm quite happy with this one. Be careful around the edge, though, it is quite sharp!\""; close; L_ExplainMonsterOil: mes "[Nicholas]"; - mes "\"Monster oil is a special oil that can be used to harden thin sheets of metal, if used properly. Unfortunately it is very hard to get. Perhaps one of our local alchemists can help you with it?\""; + mes "\"Monster oil is a special oil that can be used to harden thin sheets of metal, if used properly. Unfortunately, it is very hard to get. Perhaps one of our local alchemists can help you with it?\""; close; L_SetzerNoZeny: @@ -375,7 +363,7 @@ L_SetzerNoZeny: L_SetzerNoIngot: mes "[Nicholas]"; - mes "\"Without 3 ingots of iron, I can't improve your sword.\""; + mes "\"Without 3 ingots of iron, and six lumps of coal, I can't improve your sword.\""; close; L_SetzerNoMonsterOil: @@ -385,7 +373,7 @@ L_SetzerNoMonsterOil: L_SetzerNoSword: mes "[Nicholas]"; - mes "\"I will need your old short sword as a basis. Please bring it to me first.\""; + mes "\"I will need your old [Short Sword] as a basis. Please bring it to me first.\""; close; L_end: @@ -400,7 +388,7 @@ L_Done: L_Update_Var: set QUEST_Forestbow_state, - (QUEST_Forestbow_state & ~(@Q_SHIELD_MASK | Q_SETZER_MASK) + (QUEST_Forestbow_state & ~(@Q_SHIELD_MASK | @Q_SETZER_MASK) | (@Q_SHIELD_status << @Q_SHIELD_SHIFT) | (@Q_SETZER_status << @Q_SETZER_SHIFT)); return; diff --git a/npc/009-2_Hurnscald/nurse.txt b/npc/009-2_Hurnscald/nurse.txt index 9fd759c8..f4d5df40 100644 --- a/npc/009-2_Hurnscald/nurse.txt +++ b/npc/009-2_Hurnscald/nurse.txt @@ -1,48 +1,521 @@ -// Nurse - -// heals player below level 10 for free and tells players about the doctor on the 3rd floor. -009-2.gat,147,65,0 script Nurse 119,{ - mes "[Nurse]"; - mes "\"Can I help you?\""; - next; - - if (Inspector == 1) - menu - "Oooh, these wounds! They hurts so much!", L_Heal, - "I don't feel so well, I might be sick.", L_Doctor, - "Have you seen anything out of the ordinary?", L_NohMask, - "No, I'm fine.", -; - if (Inspector != 1) - menu - "Oooh, these wounds! They hurts so much!", L_Heal, - "I don't feel so well, I might be sick.", L_Doctor, - "No, I'm fine.", -; - mes "[Nurse]"; - mes "\"Then I would ask you to leave. There are people who really need our help.\""; - close; + //###################################################################################### +//# Nurse +//# AUTHORS: Jenalya and Pjotr Orial +//# REVIEWED BY: +//# heals player below level 20 for free and tells players about the doctor on the 3rd floor. +//# +//# gives the resist-poison skill, used global (!) variable: "$NPC_NURSE", split up in 4 bytes: +//# byte0 (bit 0-7) = healing_needed, byte1 (bit 8-15) = venum_needed, byte2 (bit 16-23) = stabilizer_needed +//# byte3 (bit 24-31) still unused +//# used player-variable: QUEST_Forestbow, nibble7 +//# states: +//# 0 if skills are available, she tells you about her plans of doing the antidote, +//# need black scorpion stingers and snake tongues +//# 1 waits for ingredients: black scorpion stingers and snake tongues +//# 2 waits for ingredients: acorns, apples, orange, healing potion, when these ingreds are there, +//# she mixes the stuff (modify global variable!) +//# 3 you can start the minigame, 3 tries remaining +//# 4 you can start the minigame, 2 tries remaining +//# 5 you can start the minigame, 1 try remaining +//# 6 not enough stuff remaining, jump to state 1 +//# 7 yay! you made it! + + +//###################################################################################### +009-2.gat,147,65,0 script Nurse 119, { + set @SNAKET_AMOUNT, 5; + set @BSCORPIONST_AMOUNT, 10; + // This quest can be done very often: so give less xp + set @QUEST1_EXP, 300; + set @ACORNS_AMOUNT, 10; + set @GREENAPPLE_AMOUNT, 5; + set @REDAPPLE_AMOUNT, 5; + set @ORANGE_AMOUNT, 5; + set @HEALING_AMOUNT, 3; + // This quest can be done very often: so give less xp + set @QUEST2_EXP, 700; + set @ANTIDOTE_EXP, 10000; + + set @Q_poison_MASK, NIBBLE_7_MASK; + set @Q_poison_SHIFT, NIBBLE_7_SHIFT; + set @Q_poison, (QUEST_Forestbow_state & @Q_poison_MASK) >> @Q_poison_SHIFT; + + if (@Q_poison == 7) goto state7; + if (@Q_poison == 6) goto state6; + if (@Q_poison == 5) goto state5; + if (@Q_poison == 4) goto state4; + if (@Q_poison == 3) goto state3; + if (@Q_poison == 2) goto state2; + if (@Q_poison == 1) goto state1; + if (getskilllv(SKILL_POOL)) goto state0; + +L_Usual: + mes "[Nurse]"; + mes "\"How can I help you?\""; + next; + + if (Inspector == 1) + menu + "Oooh, these wounds! They hurts so much!", L_Heal, + "I don't feel so well, I might be sick.", L_Doctor, + "Have you seen anything out of the ordinary?", L_NohMask, + "No, I'm fine.", -; + if (Inspector != 1) + menu + "Oooh, these wounds! They hurts so much!", L_Heal, + "I don't feel so well, I might be sick.", L_Doctor, + "No, I'm fine.", -; + mes "[Nurse]"; + mes "\"Then I would ask you to leave. There are people who really need our help.\""; + close; L_Doctor: - mes "[Nurse]"; - mes "\"Then you should better see the doctor. He is usually in his office on the 3rd floor.\""; - close; + mes "[Nurse]"; + mes "\"Then you should better see the doctor. He is usually in his office on the 3rd floor.\""; + close; L_Heal: - if (baselevel > 10) goto L_NoHeal; - mes "[Nurse]"; - mes "\"Here, let me heal you.\""; - next; - heal 10000, 10000; - close; + if (baselevel > 20) goto L_NoHeal; + mes "[Nurse]"; + mes "\"Here, let me heal you.\""; + next; + heal 10000, 10000; + close; L_NoHeal: - mes "[Nurse]"; - mes "\"I'm sorry but I'm here only to help young people."; - mes "Your level is already higher than 10."; - mes "You can get some rest in the inn near here.\""; - close; + mes "[Nurse]"; + mes "\"I'm sorry but I'm here only to help young people."; + mes "Your level is already higher than 20."; + mes "You can get some rest in the inn near here.\""; + close; L_NohMask: - mes "[Nurse]"; - mes "\"I'm to busy here to observe the town.\""; - close; + mes "[Nurse]"; + mes "\"I'm to busy here to observe the town.\""; + close; + +state0: + mes "[Nurse]"; + mes "\"Welcome! You really look like a competent person. Maybe you can help to deal with a problem we have.\""; + next; + mes "\"We recently had some accidents in the mines. It seems, that the creatures in the mines become more aggressive.\""; + next; + mes "\"Unfortunaly, some of them are poisonous and it is very difficult for us to help the miners.\""; + next; + mes "\"For that reason, I want to do some research on this subject, to create an anitdote. But I need help to get some ingredients, someone who is able to deal with the dangerous creatures in the mines.\""; + next; + menu + "I will do what I can. What do you need?", L_firstquest, + "I'm really sorry, but I don't think, I can help you.", -; + + mes "\"That is disagreeable to hear. Maybe I can find another person to take this task.\""; + next; + goto L_Usual; + +L_firstquest: + set @Q_poison, 1; + callsub S_Update_Var; + + mes "\"That's great! First, I need some parts of the creatures, that cause the poison.\""; + next; +L_ExplainAgain1: + mes "\"Please bring me five tongues of snakes and ten stingers of black scorpions.\""; + close; + +state1: + mes "[Nurse]"; + mes "\"You are back, wonderful! Did you get, what we need for the antidote?\""; + next; + menu + "Actually, I have another question.", L_Usual, + "Sorry, I forgot. What shall I bring you?", L_ExplainAgain1, + "I have what you asked for.", -, + "I'm still working on that.", quit; + + if (countitem("SnakeTongue") < @SNAKET_AMOUNT || countitem("BlackScorpionStinger") < @BSCORPIONST_AMOUNT) goto L_NotEnough; + delitem "SnakeTongue", @SNAKET_AMOUNT; + delitem "BlackScorpionStinger", @BSCORPIONST_AMOUNT; + getexp @QUEST1_EXP, 0; + + set @Q_poison, 2; + callsub S_Update_Var; + + mes "[Nurse]"; + mes "\"Very good. Now I have to extract the poison from this, it will take some time.\""; + next; + mes "\"But there are some other things we will need in any case. It would be courteous, if you could get them meanwhile.\""; + next; +L_ExplainAgain2: + mes "\"Please bring me ten acorns, five red apples and five green apples, also five oranges. And we need some small healing potions. They will be useful to hold off the baneful effects. I guess, three of them will be enough.\""; + close; + +state2: + mes "You look at the nurse, who seems to be really tired with shadows under her eyes. When she regocnize you, she smiles."; + mes "[Nurse]"; + mes "\"I managed to extract the poisonous components. We should be able to create an anitidote, if you have anything else we need.\""; + next; + menu + "Actually, I have another question.", L_Usual, + "I have a bad memory. Can you tell me again, what we need?", L_ExplainAgain2, + "I managed to get everything we need.", -, + "I will go and get it.", quit; + + if (countitem("Acorn") < @ACORNS_AMOUNT || countitem("GreenApple") < @GREENAPPLE_AMOUNT || countitem("RedApple") < @REDAPPLE_AMOUNT || countitem("Orange") < @ORANGE_AMOUNT || countitem("SmallHealingPotion") < @HEALING_AMOUNT) goto L_NotEnough; + delitem "Acorn", @ACORNS_AMOUNT; + delitem "GreenApple", @GREENAPPLE_AMOUNT; + delitem "RedApple", @REDAPPLE_AMOUNT; + delitem "Orange", @ORANGE_AMOUNT; + delitem "SmallHealingPotion", @HEALING_AMOUNT; + getexp @QUEST2_EXP, 0; + + set @Q_poison, 3; + callsub S_Update_Var; + +L_Chemistry: + callsub L_Shuffle_Need; + mes "The nurse takes the ingredients you brought and starts to squeeze the fruits and to crush the acorns. Then she put the fruit juices in some complicated looking chemical device."; + next; + mes "After some minutes, it is blubbering and steaming and some liquidity is dropping in a pot under the device."; + next; + mes "Then she takes the acorn flour and the liquidity and goes to a place back in the room, where she does something you don't see."; + next; + mes "After just a few moments, she comes back with a smiling face, holding two different bottles in her hand."; + next; + mes "[Nurse]"; + mes "\"That was easy compared to the things to be done with the stingers and snake tongues.\""; + next; + mes "Then her facial expression gets more serious."; + next; + mes "\"When we try to find the right mixture for the antidote, we need to test it.\""; + next; + mes "\"For that purpose, I will poison you. Then you drink the antidote to see, if it works.\""; + next; + mes "\"If we make a mistake, this might be exhausting and painful, so you should rest a while and prepare yourself.\""; + next; + mes "\"Come back, when you feel ready for that task.\""; + close; + +state3: + mes "[Nurse]"; + mes "\"Hello my friend. You feel prepared to test the antidote?\""; + next; + menu + "Actually, I have another question.", L_Usual, + "Yes, let us begin.",-; + +L_Exp_Game: + mes "[Nurse]"; + mes "\"Listen carefully! I will explain, what you need to do.\""; + next; + mes "\"I have here two different distillates. One is the venom extract, the other one a stabilizer.\""; + next; + mes "\"We also have the healing potion.\""; + next; + mes "\"The problem is, that I can only guess the concentration of the venom and the stabilizer. My equipment isn't good enough to determine it precise.\""; + next; + mes "\"You need to find the right amount of each ingredient. I will tell you, what I can know with my analysis methods.\""; + next; + mes "\"Shall we start?\""; + next; + menu + "Please explain it again.", L_Exp_Game, + "Alright.", -; +L_Game: + set @Q_poison, @Q_poison + 1; + callsub S_Update_Var; + // healing, venom, stabilizer + callsub L_Load_Need; + //descriptions + set @desc_length, 6; + + setarray @desc$,"very little","only a little", "little","much", "a lot", "very much", "a huge amount"; + + set @divisor, @count / @desc_length; + + set @hlIndex, (@hlNeed-@offset) /@divisor; + set @vnIndex, (@vnNeed-@offset) /@divisor; + set @stIndex, (@stNeed-@offset) /@divisor; + + mes "[Nurse]"; + mes "\"I guess you need " + @desc$[@hlIndex] + " of the healing potion.\""; + next; + mes "\"You need " + @desc$[@vnIndex] + " of the venom extracts, I suppose.\""; + next; + mes "\"As far as I can tell you will need " + @desc$[@stIndex] + " of the stabilizer.\""; + next; + + if(@hlNeed/@vnNeed > 1 ) mes "\"I see that the healing potions are needed at least " + @hlNeed/@vnNeed + " times as much as the venom.\""; + if(@vnNeed/@hlNeed > 1 ) mes "\"I see that the venom extracts are needed at least " + @vnNeed/@hlNeed + " times as much as the healing potions.\""; + if ( (@hlNeed/@vnNeed > 1 ) || (@vnNeed/@hlNeed > 1 )) next; + + if(@stNeed/@vnNeed > 1 ) mes "\"I see that the stabilizer is needed at least " + @stNeed/@vnNeed + " times as much as the venom extracts.\""; + if(@vnNeed/@stNeed > 1 ) mes "\"I see that the venom extracts are needed at least " + @vnNeed/@stNeed + " times as much as the stabilizer.\""; + if ((@vnNeed/@stNeed > 1 ) || (@stNeed/@vnNeed > 1 )) next; + + if(@stNeed/@hlNeed > 1 ) mes "\"I see that the stabilizer is needed at least " + @stNeed/@hlNeed + " times as much as the healing potions.\""; + if(@hlNeed/@stNeed > 1 ) mes "\"I see that the healing potions are needed at least " + @hlNeed/@stNeed + " times as much as the stabilizer.\""; + if ((@hlNeed/@stNeed > 1 ) || (@stNeed/@hlNeed > 1 )) next; + +L_choosePut: + set @max, @count+@offset-1; + set @min, @offset; + mes "\"My scale goes up to " + @max + ". I suggest to put at least " + @min +" drops on the scale.\""; + next; + + mes "\"How many drops of the healing potion should we use?\""; + input @hlPut; + if (@hlPut < @offset) goto L_Game_tooless; + if (@hlPut > @max) goto L_Game_toomuch; + + mes "\"How many drops of the venom extract potion should we use? \""; + input @vnPut; + if (@vnPut < @offset) goto L_Game_tooless; + if (@vnPut > @max) goto L_Game_toomuch; + + mes "\"How many drops of the stabilizer potion should we use? \""; + input @stPut; + if (@stPut < @offset) goto L_Game_tooless; + if (@stPut > @max) goto L_Game_toomuch; + + mes "The nurse puts the potions together according to your instructions. Then she takes a spoon and stirs it."; + next; + mes "You take the glass and look suspiciously at the liquid, which has changed to an odd colour."; + next; + mes "[Nurse]"; + mes "\"Allright, now I will inject the venom into you, then you should drink the antidote immidiatly. Are you ready?\""; + next; + mes "You take a deep breath and nod."; + next; + mes "The nurse take a scary looking syringe out of a drawer and swabs your arm with disinfection dabber."; + next; + mes "Then she stings the syringe in your vein and pushs it down. After a few seconds, your heart starts pounding quicker and you began to sweat all over your body."; + next; + mes "[Nurse]"; + mes "\"Drink the antidote!\""; + next; + mes "You lift the glass to your lips and drink it all at once."; + next; + + if ( (@hlPut > @hlNeed) && (@vnPut > @vnNeed) ) goto m_hl_m_vn; + if ( (@hlPut > @hlNeed) && (@vnPut <= @vnNeed) ) goto m_hl_l_vn; + if ( (@hlPut <= @hlNeed) && (@vnPut > @vnNeed) ) goto l_hl_m_vn; + if ( (@hlPut < @hlNeed) && (@vnPut < @vnNeed) ) goto l_hl_l_vn; + + mes "You feel quite normal."; + mes "[Nurse]"; + mes "\"Oh yes, the concentration of the healing potions and the venom extracts seem to be right.\""; + next; + set @hl_vn_ok, 1; + goto check_st; + +m_hl_m_vn: + //poison for 3 minutes + sc_start sc_poison, 1, 20; + mes "You began to feel really dizzy. And you feel so light - you can't help yourself and burst out with laughter. What a strange feeling!"; + next; + mes "The nurse looks at you with a really worried look in her face. As you open your mouth to tell her, that you feel allright, the content of your stomache finds its way out through your throat and on the floor."; + next; + mes "The feeling of happieness disappears, but you seems to be still poisoned."; + goto check_st; + +m_hl_l_vn: + //poison for 1 minute + sc_start sc_poison, 1, 20; + mes "You feel the pain of the poison weaken. This seems promising. The thought, you might have been succesful makes you feel enormously happy."; + next; + mes "But a few seconds later, you wonder, what the reason for your happiness was."; + next; + mes "Anyway, what are you doing here? Actually, where are you?"; + next; + mes "You don't care, you feel so great. You start to giggle and laugh uncontrollable. What a wonderful feeling. "; + next; + mes "Suddenly, the world has some really strange colors. As you watch this women in front of you chaning her color from dark green to a light purple, you become really tired."; + next; + mes "You lay down on the floor and fall asleep."; + next; + mes "As you open your eyes again, the nurse shines in your face with a lamp and pulls your eyelids open. Then she nodds."; + next; + mes "\"Very well, you are sober again.\""; + next; + + goto check_st; + +l_hl_m_vn: + // first poison for 10 minutes, player will die anyway + sc_start sc_poison, 1, 20; + mes "You feel a sting in your stomach and your heart starts pounding loudly."; + next; + mes "The room is getting dark."; + next; + mes "...and darker..."; + next; + mes "......."; + // bye bye player! + heal -Hp, 0; + // close instead of telling how much stabilizer is needed + close; + // goto check_st; + +l_hl_l_vn: + //poison for 1 minute + sc_start sc_poison, 1, 20; + mes "The antidote seems to have no effect."; + goto check_st; + +check_st: + if ( (@stPut < @stNeed) ) goto l_st; + if ( (@stPut > @stNeed) ) goto m_st; + if (@hl_vn_ok == 1) goto allcorrect; + + mes "[Nurse]"; + mes "\"The amount of the stabilizer seems alright, but we have to think again about the other ingredients.\""; + next; + goto notallcorrect; + +l_st: + mes "[Nurse]"; + mes "\"It seems, as if we took not enough of the stabilizer, the antidote would loose its effect after some time.\""; + next; + goto notallcorrect; +m_st: + mes "[Nurse]"; + mes "\"It seems, as if we took too much of the stabilizer. The antidote would turn into venom again after some time.\""; + next; + goto notallcorrect; +allcorrect: + mes "You feel totally normal again."; + next; + mes "[Nurse]"; + mes "\"Wonderfull! You made it! Now I will be able to help all the people, who get poisoned in the mines!\""; + next; + mes "\"Thank you so much! Oh, and it seems, as if you have gained the skill to resist posion someway. This is great.\""; + next; + mes "\"You should talk to someone, who can help you to focus on your skills.\""; + next; + getexp @ANTIDOTE, 0; + setskill TMW_POISON_RESISTANCE, 1; + set @Q_poison, 7; + callsub S_Update_Var; + close; + +notallcorrect: + mes "[Nurse]"; + mes "\"It didn't work. You are a really brave person. Now you should rest and recover. I hope, you won't give up now. Please come back later, so we can try it again.\""; + next; + + close; +state4: + mes "The nurse has a worried look in her face."; + mes "[Nurse]"; + mes "\"Hello. I hope you recovered well?\""; + next; + mes "\"There is enough of the distillates left to have another try.\""; + next; + mes "\"Oh no, with all that trouble, I forgot to label your distillate.\""; + next; + mes "She holds up two ampullas."; + next; + mes "\"I hope, this one are yours. I'm sorry.\""; + next; + mes "\"If you feel ok, we could try it again.\""; + next; + + menu + "I still feel a bit dizzy, so I don't want to do it now.", L_Usual, + "I'm ok. We can try, but please explain again.", L_Exp_Game, + "Let's start right now.", L_Game; + +state5: + mes "The nurse looks at you pitiful."; + mes "[Nurse]"; + mes "\"Hello. I'm really sorry for causing you so much pain.\""; + next; + mes "\"But if we can suceed, you are a hero! I will be able to help a lot of people.\""; + next; + mes "\"Next time you might remember me to label the distillates right. I am sorry that it is screwed up again.\""; + next; + mes "\"There is enough stuff left for one last try.\""; + next; + mes "\"If we don't get it this time, you will have to get new ingredients.\""; + next; + mes "\"Do you want to have another try?\""; + next; + + menu + "I still feel a bit dizzy, so I don't want to do it now.", L_Usual, + "I'm ok. We can try, but please explain again.", L_Exp_Game, + "Let's start right now.", L_Game; + +state6: + mes "The nurse looks at you pitiful."; + mes "[Nurse]"; + mes "\"There is not enough stuff left for another try.\""; + next; + mes "\"We should try again, right?\""; + set @Q_poison, 1; + callsub S_Update_Var; + + goto L_ExplainAgain1; + +state7: // geschafft + mes "[Nurse]"; + mes "\"Thanks a lot, you can call yourself a true hero now!\""; + next; + mes "\"I am able to help the poisoned miners quite well now.\""; + next; + goto L_Usual; + +L_NotEnough: + mes "[Nurse]"; + mes "\"This must be a missunderstanding. You don't have all the things I asked you for.\""; + if (@Q_poison == 1) goto L_ExplainAgain1; + if (@Q_poison == 2) goto L_ExplainAgain2; + // the following close *should* never be reached, but who knows, whoever will mess this script up! + close; + +quit: + close; + +S_Update_Var: + set QUEST_Forestbow_state, + (QUEST_Forestbow_state & ~(@Q_poison_MASK) + | (@Q_poison << @Q_poison_SHIFT)); + return; + +L_Game_init_vars: + set @count, 24; + set @offset, 1; + return; + +L_Shuffle_Need: + callsub L_Game_init_vars; + set @hlNeed, @offset + rand(@count); + set @vnNeed, @offset + rand(@count); + set @stNeed, @offset + rand(@count); + + set $NPC_NURSE, + ($NPC_NURSE & ~(BYTE_0_MASK | BYTE_1_MASK | BYTE_2_MASK) + | (@hlNeed << BYTE_0_SHIFT) + | (@vnNeed << BYTE_1_SHIFT) + | (@stNeed << BYTE_2_SHIFT)); + return; + +L_Load_Need: + callsub L_Game_init_vars; + set @hlNeed, ($NPC_NURSE & BYTE_0_MASK) >> BYTE_0_SHIFT; + set @vnNeed, ($NPC_NURSE & BYTE_1_MASK) >> BYTE_1_SHIFT; + set @stNeed, ($NPC_NURSE & BYTE_2_MASK) >> BYTE_2_SHIFT; + return; + +L_Game_tooless: + mes "[Nurse]"; + mes "\"That is nothing! So you need to put in there at least a small amount."; + goto L_choosePut; + +L_Game_toomuch: + mes "[Nurse]"; + mes "\"This would be way too much for my scale. I don't want to break it.\""; + goto L_choosePut; } + + diff --git a/npc/009-2_Hurnscald/peter.txt b/npc/009-2_Hurnscald/peter.txt index 1fcea250..995bfc31 100644 --- a/npc/009-2_Hurnscald/peter.txt +++ b/npc/009-2_Hurnscald/peter.txt @@ -3,14 +3,17 @@ 009-2.gat,183,57,0 script Peter 157,{ mes "[Peter]"; - mes "\"Hello, I am Nicholas' apprentice, Peter.\""; + mes "\"Hello, I am Peter, apprentice to Nicholas.\""; next; - mes "\"I can make you some sturdy armor if you give me iron ingots to craft with and gold pieces for my efforts. What would you like me to make?\""; + mes "\"I can make you some sturdy armor: you must give me [Iron Ingot]s to craft with and some gold pieces for my efforts.\""; + next; + mes "[Peter]"; + mes "\"What would you like me to make?\""; menu - "Chain Mail (10 coal, 5 ingots and 20000 GP)", L_Peter_Chain_Mail, - "Light Plate (20 coal, 10 ingots and 50000 GP)", L_Peter_Light_Plate, - "Warlord Plate (30 coal, 15 ingots and 100000 GP)", L_Peter_Warlord_Plate, - "nevermind", -; + "Chain Mail (10 coal, 5 ingots and 20000 GP).", L_Peter_Chain_Mail, + "Light Plate (20 coal, 10 ingots and 50000 GP).", L_Peter_Light_Plate, + "Warlord Plate (30 coal, 15 ingots and 100000 GP).", L_Peter_Warlord_Plate, + "Nevermind.", -; close; L_Peter_Chain_Mail: @@ -27,26 +30,28 @@ L_Peter_Chain_Mail: close; L_Peter_Light_Plate: - if (zeny < 20000) goto L_Peter_NotEnough_Zeny; + if (zeny < 50000) goto L_Peter_NotEnough_Zeny; if (countitem("IngotIron") < 10) goto L_Peter_NotEnough_Ingot; if (countitem("Coal") < 20) goto L_Peter_NotEnough_Coal; getinventorylist; if (@inventorylist_count == 100) goto L_Peter_TooMany; set zeny, zeny - 50000; delitem "IngotIron", 10; + delitem "Coal", 20; getitem "LightPlatemail", 1; mes "[Peter]"; mes "\"Here you go!\""; close; L_Peter_Warlord_Plate: - if (zeny < 20000) goto L_Peter_NotEnough_Zeny; + if (zeny < 100000) goto L_Peter_NotEnough_Zeny; if (countitem("IngotIron") < 15) goto L_Peter_NotEnough_Ingot; if (countitem("Coal") < 30) goto L_Peter_NotEnough_Coal; getinventorylist; if (@inventorylist_count == 100) goto L_Peter_TooMany; set zeny, zeny - 100000; delitem "IngotIron", 15; + delitem "Coal", 30; getitem "WarlordPlate", 1; mes "[Peter]"; mes "\"Here you go!\""; @@ -64,7 +69,7 @@ L_Peter_NotEnough_Ingot: L_Peter_NotEnough_Coal: mes "[Peter]"; - mes "\"You don't have enough coal.\""; + mes "\"You don't have enough [Coal].\""; close; L_Peter_TooMany: diff --git a/npc/009-2_Hurnscald/wyara.txt b/npc/009-2_Hurnscald/wyara.txt index 256c036c..fc80798c 100644 --- a/npc/009-2_Hurnscald/wyara.txt +++ b/npc/009-2_Hurnscald/wyara.txt @@ -30,7 +30,7 @@ goto L_Magic_purify_once; if (@Q_status == @STATUS_PURIFY_TWICE) goto L_Magic_purify_done; - + mes "[Wyara the witch]"; if (!Sex) mes "\"Greetings, fair traveller! What can I do for you?\""; @@ -71,6 +71,7 @@ L_Question: if (@c == @QQ_AULDSBEL) goto L_Q_auldsbel; if (@c == @QQ_IMP) goto L_Q_imp; if (@c == @QQ_OLDWIZ) goto L_Q_old_wizard; + if (@c == @QQ_ASTRALSOUL)goto L_Q_astralsoul; mes "[Wyara the Witch]"; mes "\"I fear that I can't help you with that.\""; @@ -78,6 +79,15 @@ L_Question: goto L_Main; +L_Q_astralsoul: + mes "[Wyara the Witch]"; + mes "\"The astral soul skill? Yes, I have heard about that. It can be taught by old and wise mages usually.\""; + next; + mes "\"You need lots of practise until you can handle the ability, and even more practises until you have the powers to teach it to someone else.\""; + next; + goto L_Main; + + L_Q_old_wizard: mes "[Wyara the Witch]"; mes "\"I don't know his name, but I do know that he has been living in the mountains since I first came here. He is a master of many schools of magic, I believe.\""; @@ -340,7 +350,7 @@ L_Magic_purify_explained: goto L_Magic_purify_lacking; if (countitem("MaggotSlime") < 20) goto L_Magic_purify_lacking; - + delitem "MauveHerb", 20; delitem "MaggotSlime", 20; getitem "PurificationPotion", 1; @@ -390,7 +400,7 @@ L_Magic_purify_once: goto L_Magic_purify_lacking; if (countitem("MaggotSlime") < 20) goto L_Magic_purify_lacking; - + delitem "MauveHerb", 20; delitem "MaggotSlime", 20; getitem "PurificationPotion", 1; diff --git a/npc/009-4/_import.txt b/npc/009-4/_import.txt new file mode 100644 index 00000000..0af62468 --- /dev/null +++ b/npc/009-4/_import.txt @@ -0,0 +1,7 @@ +map: 009-4.gat +npc: npc/009-4/_mobs.txt +npc: npc/009-4/_warps.txt +npc: npc/009-4/barriers.txt +npc: npc/009-4/orum.txt +npc: npc/009-4/torches.txt +npc: npc/009-4/waric.txt diff --git a/npc/009-4/_mobs.txt b/npc/009-4/_mobs.txt new file mode 100644 index 00000000..b4f88c00 --- /dev/null +++ b/npc/009-4/_mobs.txt @@ -0,0 +1,28 @@ +// 009-4 Cave mobs +// # see detailed description at orum.txt +// Cavern +009-4.gat,107,88,19,28 monster Silkworm 1035,3,20000,14000,Mob009-4::OnSilkworm +009-4.gat,107,88,19,28 monster Cave Snake 1021,5,20000,14000,Mob009-4::OnCaveSnake + +009-4.gat,119,45,5,3 monster Silkworm 1035,3,20000,14000,Mob009-4::OnSilkworm +009-4.gat,103,28,6,4 monster Cave Snake 1021,3,20000,14000,Mob009-4::OnCaveSnake +009-4.gat,103,28,6,4 monster Silkworm 1035,2,20000,14000,Mob009-4::OnSilkworm + +009-4.gat,36,117,4,4 monster Maggot 1002,3,20000,14000,Mob009-4::OnMaggot +009-4.gat,71,130,4,4 monster Maggot 1002,3,20000,14000,Mob009-4::OnMaggot + +009-4.gat,0,0,0 script Mob009-4 -1,{ +OnCaveSnake: + set @mobID, 1021; + callfunc "MobPoints"; + break; +OnMaggot: + set @mobID, 1002; + callfunc "MobPoints"; + break; +OnSilkworm: + set @mobID, 1035; + callfunc "MobPoints"; + break; + end; +} diff --git a/npc/009-4/_warps.txt b/npc/009-4/_warps.txt new file mode 100644 index 00000000..842de637 --- /dev/null +++ b/npc/009-4/_warps.txt @@ -0,0 +1,46 @@ +// 009-4 Cave Warps + +// Entrances +009-4.gat,37,112 warp to Outside -1,-1,009-3.gat,162,114 +009-4.gat,37,123 warp to Lair -1,-1,009-4.gat,36,27 + +009-4.gat,72,125 warp to Outside -1,-1,009-3.gat,162,114 +009-4.gat,72,136 warp to Lair -1,-1,009-4.gat,36,27 + +// Caverns +009-4.gat,103,22 warp to Lair -1,-1,009-4.gat,51,46 +009-4.gat,103,76 warp to Lair -1,-1,009-4.gat,51,46 + +//009-3.gat,162,113,0 script #OrumQuestEnter 0,0,0,{ + if (OrumQuest >= 12) goto L_Second_Entrance; + warp "009-4.gat", 37, 113; + close; + +L_Second_Entrance: + warp "009-4.gat", 72, 126; + close; +} +009-4.gat,36,26,0 script #LairExit 0,0,0,{ + if (OrumQuest >= 12) goto L_Second_Entrance; + warp "009-4.gat", 37, 122; + close; + +L_Second_Entrance: + warp "009-4.gat", 72, 135; + close; +} + +009-4.gat,51,47,0 script #CavernEnter 0,0,0,{ + if (OrumQuest >= 14) goto L_Second_Cavern; + if (OrumQuest < 12) goto L_See_Orum; + warp "009-4.gat", 103, 23; + close; + +L_Second_Cavern: + warp "009-4.gat", 103, 77; + close; + +L_See_Orum: + mes "Right as you are entering you hear Orum call out for you.. Perhaps you should see what he wants first.."; + close; +} diff --git a/npc/009-4/barriers.txt b/npc/009-4/barriers.txt new file mode 100644 index 00000000..0185a2fd --- /dev/null +++ b/npc/009-4/barriers.txt @@ -0,0 +1,229 @@ +//# see detailed description at orum.txt
+function script GetBarrierColor {
+ if (@Barrier < 0 || @Barrier > 2) goto L_Error;
+
+ set @Mask, 15;
+ set @Shift, 4 * @Barrier;
+ set @BarrierColor, (OrumQuestBarrier >> @Shift) & @Mask;
+ return;
+
+L_Error:
+ mes "Barrier number is out of range.";
+ close;
+}
+
+function script SetBarrierColor {
+ if (@Barrier < 0 || @Barrier > 2) goto L_Error;
+ if (@Color < 0 || @Color > 12) goto L_Error2;
+
+ set @Mask, (15 << (4 * @Barrier));
+ set OrumQuestBarrier, (OrumQuestBarrier & (~(@Mask))) | @Color << (4 * @Barrier);
+ return;
+
+L_Error:
+ mes "Barrier number is out of range.";
+ close;
+
+L_Error2:
+ mes "Barrier color is out of range.";
+ close;
+}
+
+
+// Starting Barrier / Quest Entrance
+009-4.gat,37,120,0 script #OrumCaveStartBarrier 0,1,0,{
+
+ if (OrumQuest >= 3) close;
+ if (OrumQuest == 2) goto L_Started;
+
+ warp "009-4.gat", 37, 118;
+ mes "As you try to pass, two torches begin to flare and push you back. They seem to form some kind of barrier..";
+ close;
+
+L_Started:
+ message strcharinfo(0), "The torches dim as you approach, granting you passage.";
+ set OrumQuest, 3;
+ close;
+}
+
+// First Barrier
+009-4.gat,57,29,0 script #OrumCaveFirstBarrier 0,1,0,{
+
+ if (OrumQuest >= 5) close;
+
+ message strcharinfo(0), "Nothing seems to happen as you enter this room.. The barrier must need both of its torches to function properly..";
+ set OrumQuest, 5;
+ close;
+}
+
+// Second Barrier
+009-4.gat,61,54,0 script #OrumCaveSecondBarrier 0,1,0,{
+
+ if (OrumQuest == 3) set OrumQuest, 4;
+
+ set @Barrier, 0;
+ callfunc("GetBarrierColor");
+ set @Torch, 0;
+ callfunc("GetTorchColor");
+ if (OrumQuest > 7 && @TorchColor == @BarrierColor) goto L_Allow_Second_Passage;
+
+ warp "009-4.gat", 61, 56;
+ mes "As you try to pass, the torches begin to flare and push you back. Perhaps there's a way to get past it..";
+ mes "";
+ setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
+ mes "Looking closely between the two torches you can see the barrier has a " + @colors$[@BarrierColor] + " tint to it..";
+ close;
+
+L_Allow_Second_Passage:
+ if (OrumQuest < 9) goto L_Advance_Quest;
+ close;
+
+L_Advance_Quest:
+ message strcharinfo(0), "The torches dim as you enter like the first. You must be on the right trail..";
+ set OrumQuest, 9;
+ close;
+}
+
+// Third Barrier
+009-4.gat,24,66,0 script #OrumCaveThirdBarrier 0,1,0,{
+
+ if (OrumQuest == 3) set OrumQuest, 4;
+
+ set @Barrier, 1;
+ callfunc("GetBarrierColor");
+
+ set @Torch, 0;
+ callfunc("GetTorchColor");
+ set @Torch1Color, @TorchColor;
+
+ set @Torch, 1;
+ callfunc("GetTorchColor");
+ set @Torch2Color, @TorchColor;
+
+ set @firstColor, @BarrierColor - 2;
+ set @secondColor, @BarrierColor + 2;
+ if (@firstColor < 1) set @firstColor, 12;
+ if (@secondColor > 12) set @secondColor, 1;
+
+ if (OrumQuest > 8 && @Torch1Color == @firstColor && @Torch2Color == @secondColor)
+ goto L_Allow_Third_Passage;
+ if (OrumQuest > 8 && @Torch2Color == @firstColor && @Torch1Color == @secondColor)
+ goto L_Allow_Third_Passage;
+
+ warp "009-4.gat", 24, 64;
+ mes "As you try to pass, the torches begin to flare and push you back. Perhaps there is a way to get past it..";
+ mes "";
+ setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
+ mes "Looking closely between the two torches you can see the barrier has a " + @colors$[@BarrierColor] + " tint to it..";
+ close;
+
+L_Allow_Third_Passage:
+if (OrumQuest < 10) goto L_Advance_Quest;
+ close;
+
+L_Advance_Quest:
+ set OrumQuest, 10;
+ close;
+}
+
+// Ending Barrier
+009-4.gat,48,38,0 script #OrumCaveEndBarrier 0,1,0,{
+
+ if (OrumQuest >= 11) close;
+ if (OrumQuest == 3) set OrumQuest, 4;
+
+ set @Barrier, 2;
+ callfunc("GetBarrierColor");
+
+ if (OrumQuest < 10) goto L_Deny_Final_Passage;
+
+ set @Torch, 0;
+ callfunc("GetTorchColor");
+ set @Torch1Color, @TorchColor;
+
+ set @Torch, 1;
+ callfunc("GetTorchColor");
+ set @Torch2Color, @TorchColor;
+
+ set @Torch, 2;
+ callfunc("GetTorchColor");
+ set @Torch3Color, @TorchColor;
+
+ // Extract the secondary color
+ set @secondary, @BarrierColor - 1;
+ if (@secondary != 3 && @secondary != 7 && @secondary != 11)
+ set @secondary, @BarrierColor + 1;
+
+ // Make sure it's in bounds
+ if (@secondary > 12) set @secondary, @secondary - 12;
+ if (@secondary < 1) set @secondary, @secondary + 12;
+
+ // Extract first 2 required colors
+ set @firstColor, @secondary - 2;
+ set @secondColor, @secondary + 2;
+ if (@firstColor > 12) set @firstColor, @firstColor - 12;
+ if (@firstColor < 1) set @firstColor, @firstColor + 12;
+ if (@secondColor > 12) set @secondColor, @secondColor - 12;
+ if (@secondColor < 1) set @secondColor, @secondColor + 12;
+
+ set @thirdColor, 12;
+ set @offsetOne, @BarrierColor + 1;
+ set @offsetTwo, @BarrierColor - 1;
+
+ // Make sure they in bounds
+ if (@offsetOne > 12) set @offsetOne, @offsetOne - 12;
+ if (@offsetOne < 1) set @offsetOne, @offsetOne + 12;
+ if (@offsetTwo > 12) set @offsetTwo, @offsetTwo - 12;
+ if (@offsetTwo < 1) set @offsetTwo, @offsetTwo + 12;
+
+ // Extract third needed color
+ if (@secondary == @offsetOne)
+ set @thirdColor, @firstColor;
+ if (@secondary == @offsetTwo)
+ set @thirdColor, @secondColor;
+
+ set @firstDone, 0;
+ set @secondDone, 0;
+ set @thirdDone, 0;
+
+ if (@firstDone == 0 && @secondDone != 1 && @thirdDone != 1 && @Torch1Color == @firstColor)
+ set @firstDone, 1;
+ if (@firstDone != 1 && @secondDone == 0 && @thirdDone != 1 && @Torch1Color == @secondColor)
+ set @secondDone, 1;
+ if (@firstDone != 1 && @secondDone != 1 && @thirdDone == 0 && @Torch1Color == @thirdColor)
+ set @thirdDone, 1;
+
+ if (@firstDone == 0 && @secondDone != 2 && @thirdDone != 2 && @Torch2Color == @firstColor)
+ set @firstDone, 2;
+ if (@firstDone != 2 && @secondDone == 0 && @thirdDone != 2 && @Torch2Color == @secondColor)
+ set @secondDone, 2;
+ if (@firstDone != 2 && @secondDone != 2 && @thirdDone == 0 && @Torch2Color == @thirdColor)
+ set @thirdDone, 2;
+
+ if (@firstDone == 0 && @secondDone != 3 && @thirdDone != 3 && @Torch3Color == @firstColor)
+ set @firstDone, 3;
+ if (@firstDone != 3 && @secondDone == 0 && @thirdDone != 3 && @Torch3Color == @secondColor)
+ set @secondDone, 3;
+ if (@firstDone != 3 && @secondDone != 3 && @thirdDone == 0 && @Torch3Color == @thirdColor)
+ set @thirdDone, 3;
+
+ if (@firstDone != 0 && @secondDone != 0 && @thirdDone != 0) goto L_Allow_Final_Passage;
+ goto L_Deny_Final_Passage;
+
+L_Deny_Final_Passage:
+ warp "009-4.gat", 48, 36;
+ mes "As you try to pass, the torches begin to flare and push you back. Perhaps there is a way to get past it..";
+ mes "";
+ setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
+ mes "Looking closely between the two torches you can see the barrier has a " + @colors$[@BarrierColor] + " tint to it..";
+ close;
+
+L_Allow_Final_Passage:
+ if (OrumQuest < 11) goto L_Advance_Quest;
+ close;
+
+L_Advance_Quest:
+ message strcharinfo(0), "The torches dim as you enter. At last you finally have access!";
+ set OrumQuest, 11;
+ close;
+}
diff --git a/npc/009-4/orum.txt b/npc/009-4/orum.txt new file mode 100644 index 00000000..927fc939 --- /dev/null +++ b/npc/009-4/orum.txt @@ -0,0 +1,651 @@ +//#################################################################################
+//# Orum/Waric Quest Part 1 - By Liana, reviewed by Stefan Beller #
+//# GPL v.2 #
+//# #
+//# The first quest is to find Waric in the Caves with lots of torches. #
+//# These torches must be set in the right color to have access to the next #
+//# room, guarded by a magical barrier of other torches. #
+//# #
+//# The second quest is an easy, but background-story telling quest. #
+//# Just visit the cave again, find what is really in there. #
+//# #
+//# #
+//# Used variables: #
+//# #
+//# OrumQuest stores the progress of the quest #
+//# OrumQuestTorch In nibble (0,1,2) the color of the torches is stored #
+//# In nibble (3,4,5) the intensity of the torches is stored #
+//# OrumQuestBarrier nibble (0,1,2) stores the color of the barriers #
+//#################################################################################
+
+009-4.gat,37,115,0 script Orum 158,{
+ // needed to pass the very first barrier
+ set @B0_WISPPOWDER, 4;
+ set @B0_POLTERGEISTPOWDER, 2;
+ set @B0_SPECTREPOWDER, 1;
+ set @B0_HARDSPIKES, 1;
+
+ // needed stuff to get colorful powders
+ set @BT_IRONPOWDER, 10;
+ set @BT_PILESOFASH, 10;
+ set @BT_HERBS, 15;
+
+ // how many colorful powders each do you get as reward?
+ set @BT_REWARDCOUNT, 10;
+
+ // no exp for breaking the barrier ?
+ set @EXP_BREAK_BARRIERS, 0;
+
+ if (OrumQuest > 0) goto L_Started;
+
+ mes "[Orum]";
+ mes "\"It's not wise to venture around this place! Well hmm.. I guess since you're here, maybe you can lend a little help?\"";
+ next;
+
+ menu
+ "What exactly is 'this place'?", L_Explain,
+ "Umm.. what kind of help?", L_Explain,
+ "You're right, I'll be on my way.", -;
+
+ mes "[Orum]";
+ mes "\"Very smart thinking!\"";
+ close;
+
+L_Explain:
+ mes "[Orum]";
+ mes "\"Recently a woman claiming to be a witch came to my village seeking help from my mentor Woric, who is a very powerful wizard, but he refused and she left. But..\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"The next day he went missing! I'm no wizard yet, but from what I overheard.. I think that witch is attempting some very foul magic and has kidnapped him for some reason!\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"I traveled in the direction she left until I came accross this cave, but it appears to be protected by some type of magical barrier and I haven't been able to get further than this room.\"";
+ next;
+
+ menu
+ "So where would I come in?", L_Explain_Barriers,
+ "I'd like to help but I have to go..", -;
+
+ mes "[Orum]";
+ mes "\"Thats too bad.. well if you ever have some free time I probably won't figure this out any time soon.\"";
+ close;
+
+L_Explain_Barriers:
+ mes "[Orum]";
+ mes "\"I've examined this room and it appears that the barrier is made up of two torches on each side. The flame on them has a strange glow.. They must be inbued with magical properties.\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"I've never come across anything like this barrier before.. It must be drawing it's power from the torches. I tried putting them out with conventional means but I had no luck..\"";
+ next;
+
+ menu
+ "Have any other ideas on how we get past it?", L_Explain_Note,
+ "I think its meant to keep us out.. bye.", -;
+
+ mes "[Orum]";
+ mes "\"You may be right.. but she kidnapped Woric. I know it! So I must do something! If you ever change your mind I could sure use the help.\"";
+ close;
+
+L_Explain_Note:
+ mes "[Orum]";
+ mes "\"Actually! After Woric went missing I looked around at his house a bit and came across a note the witch must have dropped. I skimmed over it and didn't pay much attention but I think it mentioned something about this barrier!\"";
+ next;
+
+ mes "He pulls it out of his pocket and begins examining it..";
+ next;
+
+ mes "[Orum]";
+ mes "\"Ah! Here it is! If I'm reading this right we may have found a way past it after all.. I guess she would need a way to come and go unaffected while everyone else is kept from entering.\"";
+ next;
+
+ menu
+ "What does it say??", L_Explain_Aura,
+ "Looks like you can do this without me.", -;
+
+ mes "[Orum]";
+ mes "\"Eh... well I guess I can't force you to stay..\"";
+ close;
+
+L_Explain_Aura:
+ mes "[Orum]";
+ mes "\"Appears to be some kind of spell to place a magical aura around someone... Hmm, with these materials listed on here I'm going to guess this aura makes the wearer partly incorporeal..\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"It looks like the barrier requires substances from 3 different incorporeal creatures.. I've heard of Wisps, Poltergeists, and Spectres before but I've never seen such a thing.\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"Luckily I happen to be skilled in this field of magic! I'm pretty sure if I can get my hands on the materials listed on here I'll be able to cast this aura on us, and hopefully then we can get past this barrier!\"";
+ next;
+
+ menu
+ "Let me guess.. that is my job?", L_Offer_Quest,
+ "I think someone is calling me.. Bye", -;
+ close;
+
+L_Offer_Quest:
+ mes "[Orum]";
+ mes "\"Well you would probably do better than me since I don't know this area very well.. It's not too much stuff so I'm sure you won't have any trouble at all.\"";
+ next;
+
+ menu
+ "Alright alright, just give me a list.", L_Start_Quest,
+ "I'm not your servant! Bye.", -;
+
+ mes "[Orum]";
+ mes "\"Everyone answers to someone.. that's just how the world is. If you ever change your mind I'll probably be here forever gathering these materials on my own..\"";
+ close;
+
+L_Start_Quest:
+ mes "He pulls a crumpled piece of paper from his pocket, smooths it out and writes a list on it before handing it to you..";
+ next;
+
+ mes "" + @B0_WISPPOWDER + " Wisp Powders,";
+ mes "" + @B0_POLTERGEISTPOWDER + " Poltergeist Powders,";
+ mes "" + @B0_SPECTREPOWDER + " Spectre Powders,";
+ mes "" + @B0_HARDSPIKES + " Hard Spikes";
+ next;
+
+ menu
+ "Alright, I'll go get these.", L_Start_Gathering,
+ "You can forget it! I quit!", -;
+
+ mes "[Orum]";
+ mes "\"I know you'll be back... they always come back!\"";
+ close;
+
+L_Start_Gathering:
+ mes "[Orum]";
+ mes "\"That's the spirit! But try not to take too long.\"";
+ set OrumQuest, 1;
+ close;
+
+L_Started:
+ if (OrumQuest == 1) goto L_Gathering;
+ if (OrumQuest == 2) goto L_Use_First_Barrier;
+ if (OrumQuest == 3) goto L_Explore;
+ if (OrumQuest == 4) goto L_Found_Barriers;
+ if (OrumQuest == 5) goto L_Found_Barriers;
+ if (OrumQuest == 6) goto L_Found_Torches;
+ if (OrumQuest == 7) goto L_Still_Gathering;
+ if (OrumQuest == 8) goto L_Finish_Up;
+ if (OrumQuest >= 9) goto L_Finished_Up;
+ close;
+
+L_Gathering:
+ mes "[Orum]";
+ mes "\"Got all the things I asked for yet?\"";
+ next;
+
+ menu
+ "Yep I have every last one of them!", L_Check_Materials,
+ "Can I get another list?", L_List_Materials,
+ "I still need a few things..", -;
+
+ mes "Orum shakes his head in frustration..";
+ next;
+
+ mes "[Orum]";
+ mes "\"You'd better get that stuff soon!\"";
+ close;
+
+L_List_Materials:
+ mes "He scavenges around in his pocket for another piece of paper then writes a new list..";
+ next;
+
+ mes @B0_WISPPOWDER + " Wisp Powders,";
+ mes @B0_POLTERGEISTPOWDER + " Poltergeist Powders,";
+ mes @B0_SPECTREPOWDER + " Spectre Powders,";
+ mes @B0_HARDSPIKES + " Hard Spikes";
+ next;
+
+ mes "[Orum]";
+ mes "\"And try not to lose this one.. I'm running out of stuff to write on!\"";
+ close;
+
+L_Check_Materials:
+ if (countitem("WispPowder") < @B0_WISPPOWDER ||
+ countitem("PoltergeistPowder") < @B0_POLTERGEISTPOWDER ||
+ countitem("SpectrePowder") < @B0_SPECTREPOWDER ||
+ countitem("HardSpike") < @B0_HARDSPIKES) goto L_Missing_Materials;
+
+ // check directly before deleting the objects.
+ delitem "WispPowder", @B0_WISPPOWDER;
+ delitem "PoltergeistPowder", @B0_POLTERGEISTPOWDER;
+ delitem "SpectrePowder", @B0_SPECTREPOWDER;
+ delitem "HardSpike", @B0_HARDSPIKES;
+
+ mes "Orum carefully looks over all of the items then grins..";
+ next;
+
+ mes "[Orum]";
+ mes "\"Well done! And you did not even take as long as I thought you would!\"";
+ next;
+
+ mes "Orum takes the hard spikes in his hand and begins chanting some words..";
+ next;
+
+ mes "You watch as they begin mold together glowing brightly. He sprinkles in the powder you gathered and presses his hands together.";
+
+ misceffect sfx_magic_transmute;
+ next;
+
+ mes "Suddenly a feeling of dizzyness hits you and you begin to feel weightless.. It passes after a moment..";
+ misceffect sfx_magic_nature;
+ misceffect 11, strcharinfo(0);
+ next;
+
+ mes "[Orum]";
+ mes "\"Well we are both still in one piece so that is a good sign! Now we'll have to see if I did it right.. mind going first?\"";
+ goto L_Setup_Lair;
+ close;
+
+L_Missing_Materials:
+ mes "Orum carefully looks over all of the items then squints his eyes at you..";
+ next;
+
+ mes "[Orum]";
+ mes "\"I'm not going to attempt this spell until I have ALL the items on this note.. Go gather the missing materials!\"";
+ close;
+
+L_Setup_Lair:
+ set OrumQuest, 2;
+
+ // Second Barrier
+ set @temp, rand(1,6);
+ set @Color, 1;
+ if (@temp == 1 || @temp == 4) set @Color, 1;
+ if (@temp == 2 || @temp == 5) set @Color, 5;
+ if (@temp == 3 || @temp == 6) set @Color, 9;
+ set @Barrier, 0;
+ callfunc("SetBarrierColor");
+
+ set @Torch, 0;
+ set @Color, rand(1, 12);
+ set @Intensity, 0;
+ callfunc("SetTorchColor");
+ callfunc("SetTorchIntensity");
+
+ // Third Barrier
+ set @temp, rand(1,6);
+ set @Color, 3;
+ if (@temp == 1 || @temp == 4) set @Color, 3;
+ if (@temp == 2 || @temp == 5) set @Color, 7;
+ if (@temp == 3 || @temp == 6) set @Color, 11;
+ set @Barrier, 1;
+ callfunc("SetBarrierColor");
+
+ set @Torch, 1;
+ set @Color, rand(1, 12);
+ callfunc("SetTorchColor");
+ callfunc("SetTorchIntensity");
+
+ // End Barrier
+ set @temp, rand(1,12);
+ set @Color, 2;
+ if (@temp == 1 || @temp == 7) set @Color, 2;
+ if (@temp == 2 || @temp == 8) set @Color, 4;
+ if (@temp == 3 || @temp == 9) set @Color, 6;
+ if (@temp == 4 || @temp == 10) set @Color, 8;
+ if (@temp == 5 || @temp == 11) set @Color, 10;
+ if (@temp == 6 || @temp == 12) set @Color, 12;
+ set @Barrier, 2;
+ callfunc("SetBarrierColor");
+
+ set @Torch, 2;
+ set @Color, rand(1, 12);
+ callfunc("SetTorchColor");
+ callfunc("SetTorchIntensity");
+ close;
+
+L_Use_First_Barrier:
+ mes "[Orum]";
+ mes "\"Casting that aura took a lot out of me.. Why don't you go explore the cave a bit while I rest?\"";
+ close;
+
+L_Explore:
+ mes "Orum looks up as you approach..";
+ next;
+
+ mes "[Orum]";
+ mes "\"Find anything interesting in this place?\"";
+ next;
+
+ menu
+ "Yep.. a whole mess of torches!", L_Explain_Objective,
+ "I'm not sure what to look for..", L_Explain_Objective,
+ "Going to explore more, bye.", -;
+
+ mes "[Orum]";
+ mes "\"Be sure to let me know if you find anything. I've almost gained my energy back.\"";
+ close;
+
+L_Explain_Objective:
+ mes "[Orum]";
+ mes "\"I'm positive this is where that witch took Woric, so this cave must lead to somewhere. Try looking around for another exit. I've almost gained my energy back and then I can help.\"";
+ close;
+
+L_Found_Barriers:
+ mes "Orum looks up as you approach..";
+ next;
+
+ mes "[Orum]";
+ mes "\"Find anything interesting in this place?\"";
+ next;
+
+ menu
+ "Yep.. a whole mess of torches!", L_Explain_Objective,
+ "I'm not sure what to look for..", L_Explain_Objective,
+ "I found more barriers.. but..", L_Explain_Barriers_More,
+ "Going to explore more, bye.", -;
+
+ mes "[Orum]";
+ mes "\"Be sure to let me know if you find anything. I'm still gaining my energy back.\"";
+ close;
+
+L_Explain_Barriers_More:
+ mes "[Orum]";
+ mes "\"Hm let me guess.. the aura is ineffective on the rest of the barriers here?\"";
+ next;
+
+ menu
+ "How did you know..?", L_Explain_Note_More,
+ "I'm not sure, I'll go try again.", -;
+
+ mes "[Orum]";
+ mes "\"Always a good idea to double check things!\"";
+ close;
+
+L_Explain_Note_More:
+ mes "[Orum]";
+ mes "\"Well while I was resting I spent more time looking over the note that witch dropped.. And I think the aura is only to get past the entrance..\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"It mentions some sort of security system to keep people from entering the actual lair but it doesn't explain in great detail. Try exploring more maybe we will find some answers.\"";
+ next;
+
+ mes "Orum continues examining the note..";
+ close;
+
+L_Found_Torches:
+ mes "Orum looks up as you approach..";
+ next;
+
+ mes "[Orum]";
+ mes "\"Find something interesting?\"";
+ next;
+
+ menu
+ "Yep.. a whole mess of torches!", L_Explain_Objective,
+ "I'm not sure what to look for..", L_Explain_Objective,
+ "I found more barriers.. but..", L_Explain_Barriers_More,
+ "I found a strange torch by itself.", L_Explain_Torches,
+ "Going to explore more, bye.", -;
+
+ mes "[Orum]";
+ mes "\"Be sure to let me know if you find anything new.\"";
+ close;
+
+L_Explain_Torches:
+ mes "Orum has you direct him to the torch and he walks off to examine it before returning shortly after..";
+ next;
+
+ mes "[Orum]";
+ mes "\"Ah yes! I was hoping we would find something like this!\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"While examining the note I found another set of spells to create some type of powder and with them was a few notes on using it with some type of torch..\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"I'll bet this torch has something to do with the rest of these barriers which are probably the security system this note mentions.\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"We will probably need to transmute this powder before we can get any further past these barriers.. Would you mind gathering a few more materials?\"";
+ next;
+
+ menu
+ "It better be the last time.", L_Gather_More,
+ "I'm done doing stuff for you!", -;
+
+ mes "[Orum]";
+ mes "\"I'm surprised you give up after we've gotten so far.. Shame.\"";
+ close;
+
+L_Gather_More:
+ mes "Orum begins writing down another list of materials..";
+ next;
+
+ mes @BT_IRONPOWDER + " Piles of Iron Powder,";
+ mes @BT_PILESOFASH + " Piles of Sand or Ash,";
+ mes @BT_HERBS + " Gamboge Herbs,";
+ mes @BT_HERBS + " Alizarin Herbs,";
+ mes @BT_HERBS + " Cobalt herbs";
+ next;
+
+ menu
+ "Yikes! I'll try..", L_Gathering_More,
+ "No way! Too much stuff!", -;
+
+ mes "[Orum]";
+ mes "\"The note says to get these and I'm not going to attempt this spell until I have what the note says.\"";
+ close;
+
+L_Gathering_More:
+ set OrumQuest, 7;
+ mes "[Orum]";
+ mes "\"Wonderful! Try to make it quick, we must save Waric!\"";
+ close;
+
+L_Still_Gathering:
+ mes "[Orum]";
+ mes "\"Have you finished gathering those things yet?\"";
+ next;
+
+ menu
+ "I believe I have!", L_Finished_Gathering_More,
+ "I lost my list.. again..", L_List_Materials_More,
+ "I've almost got them all..", -;
+
+ mes "[Orum]";
+ mes "\"Don't make me remind you again! Waric's life is on the line here! Hurry up!\"";
+ close;
+
+L_List_Materials_More:
+ mes "He scavenges around in his pocket for another piece of paper then writes a new list..";
+ next;
+
+ mes @BT_IRONPOWDER + " Piles of Iron Powder,";
+ mes @BT_PILESOFASH + " Piles of Sand or Ash,";
+ mes @BT_HERBS + " Gamboge Herbs,";
+ mes @BT_HERBS + " Alizarin Herbs,";
+ mes @BT_HERBS + " Cobalt herbs";
+ next;
+
+ mes "[Orum]";
+ mes "\"And try not to lose this one.. I don't have much more to write on!\"";
+ close;
+
+L_Finished_Gathering_More:
+ if (countitem("IronPowder") < @BT_IRONPOWDER ||
+ countitem("PileOfAsh") < @BT_PILESOFASH ||
+ countitem("GambogeHerb") < @BT_HERBS ||
+ countitem("AlizarinHerb") < @BT_HERBS ||
+ countitem("CobaltHerb") < @BT_HERBS) goto L_Missing_Materials_More;
+
+ delitem "IronPowder", @BT_IRONPOWDER;
+ delitem "PileOfAsh", @BT_PILESOFASH;
+ delitem "GambogeHerb", @BT_HERBS;
+ delitem "AlizarinHerb", @BT_HERBS;
+ delitem "CobaltHerb", @BT_HERBS;
+
+ mes "[Orum]";
+ mes "\"Excellent work! And once again you did not take as long as I was expecting. I guess I will get started..\"";
+ next;
+
+ mes "You watch as Orum takes the iron powder and ash and begins chanting some words.. The two start to glow and mold together turning into a light metalic looking powder..";
+ next;
+ misceffect sfx_magic_transmute;
+
+ mes "He then splits the powder into three piles and performs separate spells on each using the herbs. After he finishes you see 3 piles of colored metalic powder that appear to be red, yellow, and blue..";
+ next;
+ misceffect sfx_magic_transmute;
+
+ mes "[Orum]";
+ mes "\"Well if I did it right.. These three powders are hopefully the key to getting past these barriers!\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"I'm weary, I must take some time to rest. Why don't you go ahead and experiment with these powders on that torch and let me know if you figure what they have to do with it.\"";
+
+ getitem "RedPowder", @BT_REWARDCOUNT;
+ getitem "YellowPowder", @BT_REWARDCOUNT;
+ getitem "BluePowder", @BT_REWARDCOUNT;
+ set OrumQuest, 8;
+ close;
+
+L_Missing_Materials_More:
+ mes "Orum carefully looks over all of the items then squints his eyes at you..";
+ next;
+
+ mes "[Orum]";
+ mes "\"You really enjoy playing games with Warics' life don't you! Come back when you have ALL of the items I told you.\"";
+ close;
+
+L_Finish_Up:
+ mes "Orum seems to be sitting around doing nothing as you approach.";
+ next;
+
+ mes "[Orum]";
+ mes "\"Did you find a way past any of the barriers yet?\"";
+ next;
+
+ menu
+ "No I'm still not sure how..", L_Explain_Torches_More,
+ "I need more of that powder.", L_More_Powder,
+ "I'm still trying..", -;
+
+ mes "[Orum]";
+ mes "\"Excellent! Let me know when you've made any progress.\"";
+ close;
+
+L_Explain_Torches_More:
+ mes "[Orum]";
+ mes "\"Most of the barriers here have a certain color radiating from them and so do the torches. The torches seem to react with this powder so maybe we have to make these torches turn a certain color in order to lower the barriers.\"";
+ next;
+
+ mes "[Orum]";
+ mes "\"Also while looking around I saw that behind one of the barriers was a cave. Maybe Waric is in there.. we should try to get that barrier dropped\"";
+ close;
+
+L_More_Powder:
+ mes "[Orum]";
+ mes "\"You really used up that powder fast.. Luckily I can make more as long as you can bring me those materials again.\"";
+ next;
+
+ menu
+ "I have them right here!", L_More_Powder_Make,
+ "Hmmm.. what are they again?", L_List_Materials_More,
+ "I'll go get those for you..", -;
+
+ mes "[Orum]";
+ mes "\"You better not waste any time gathering those materials!\"";
+ close;
+
+L_More_Powder_Make:
+ if (countitem("IronPowder") < @BT_IRONPOWDER ||
+ countitem("PileOfAsh") < @BT_PILESOFASH ||
+ countitem("GambogeHerb") < @BT_HERBS ||
+ countitem("AlizarinHerb") < @BT_HERBS ||
+ countitem("CobaltHerb") < @BT_HERBS) goto L_Missing_Materials_More;
+
+ delitem "IronPowder", @BT_IRONPOWDER;
+ delitem "PileOfAsh", @BT_PILESOFASH;
+ delitem "GambogeHerb", @BT_HERBS;
+ delitem "AlizarinHerb", @BT_HERBS;
+ delitem "CobaltHerb", @BT_HERBS;
+
+ mes "[Orum]";
+ mes "\"Hmm all of the items appear to be here.. Give me a moment to make that powder for you.\"";
+ next;
+
+ mes "Orum begins chanting the same words as he did when he made the powder before.. He seems to be quicker at it this time..";
+ misceffect sfx_magic_transmute;
+ next;
+
+ mes "[Orum]";
+ mes "\"Here you are. And try to conserve this time! The more powder I have to make the more time and resources we use up that we could be using to save Waric!\"";
+
+ getitem "RedPowder", @BT_REWARDCOUNT;
+ getitem "YellowPowder", @BT_REWARDCOUNT;
+ getitem "BluePowder", @BT_REWARDCOUNT;
+ close;
+
+L_Finished_Up:
+ mes "As you approch you think you see Orum rolling his eyes.. maybe your imagining it..";
+ next;
+
+ mes "[Orum]";
+ mes "\"I hope you finally dropped that barrier we need to get past!\"";
+ next;
+
+ menu
+ "Actually.. I have!", L_Enter_Cavern,
+ "I need more of that powder.", L_More_Powder,
+ "Cut me some slack! I'm working on it!", -;
+
+ mes "[Orum]";
+ mes "\"Just hurry it up! Warics life is on the line here!\"";
+ close;
+
+L_Enter_Cavern:
+ if (OrumQuest >= 10) goto L_Ready_Cavern;
+
+ mes "Orum heads to the barrier then gives you a look as if he does not believe you before walking forward..";
+ next;
+
+ mes "He is suddently thrown againt the wall behind him! Angered, he gets up, brushes himself off, and heads back to the entrance without speaking.";
+ close;
+
+L_Ready_Cavern:
+ // you should not get that twice ;)
+ if (OrumQuest == 12) goto L_Got_Reward;
+
+ mes "Orum heads to the barrier then gives you a look as if he does not believe you before walking forward..";
+ next;
+
+ mes "He makes it through without any problems and grins.";
+ next;
+
+ mes "[Orum]";
+ mes "\"Very good work you have done! Please take this for your efforts. It has helped me in a bind.\"";
+ next;
+
+ getexp @EXP_BREAK_BARRIERS, 0;
+ getitem "CandleHelmet", 1;
+ mes "You receive the [Candle Helmet]";
+ next;
+
+ mes "\"You've done enough here to help. I will go the rest of the way alone so that your life is not endangered.. You must promise me not to go any further!\"";
+ next;
+
+ menu
+ "Sure, I promise!", -,
+ "I thought this would never be over!", -;
+
+ mes "[Orum]";
+ mes "\"Well I guess this is farewell!\"";
+ set OrumQuest, 12;
+ close;
+
+L_Got_Reward:
+ mes "\"You've done enough here to help. I will go the rest of the way alone so that your life is not endangered..\"";
+ close;
+}
diff --git a/npc/009-4/torches.txt b/npc/009-4/torches.txt new file mode 100644 index 00000000..d1ea73be --- /dev/null +++ b/npc/009-4/torches.txt @@ -0,0 +1,358 @@ +//# see detailed description at orum.txt
+function script GetTorchColor {
+ if (@Torch < 0 || @Torch > 2) goto L_Error;
+
+ set @Mask, 15;
+ set @Shift, 4 * @Torch;
+ set @TorchColor, (OrumQuestTorch >> @Shift) & @Mask;
+ return;
+
+L_Error:
+ mes "Torch number is out of range.";
+ close;
+}
+
+function script SetTorchColor {
+ if (@Torch < 0 || @Torch > 2) goto L_Error;
+ if (@Color < 0 || @Color > 12) goto L_Error2;
+
+ set @Mask, (15 << (4 * @Torch));
+ set OrumQuestTorch, (OrumQuestTorch & (~(@Mask))) | @Color << (4 * @Torch);
+ return;
+
+L_Error:
+ mes "Torch number is out of range.";
+ close;
+
+L_Error2:
+ mes "Torch color is out of range.";
+ close;
+}
+
+function script GetTorchIntensity {
+ if (@Torch < 0 || @Torch > 2) goto L_Error;
+
+ set @Mask, 15;
+ set @Shift, 4 * (@Torch + 3);
+ set @TorchIntensity, (OrumQuestTorch >> @Shift) & @Mask;
+ return;
+
+L_Error:
+ mes "Torch number is out of range.";
+ close;
+}
+
+function script SetTorchIntensity {
+ if (@Torch < 0 || @Torch > 2) goto L_Error;
+ if (@Intensity < 0 || @Intensity > 2) goto L_Error2;
+
+ set @Mask, (15 << (4 * (@Torch + 3)));
+ set OrumQuestTorch, (OrumQuestTorch & (~(@Mask))) | @Intensity << (4 * (@Torch + 3));
+ return;
+
+L_Error:
+ mes "Torch number is out of range.";
+ close;
+
+L_Error2:
+ mes "Torch intensity is out of range.";
+ close;
+}
+
+function script DoneWithTorches {
+ if (OrumQuest < 11 && OrumQuest >= 8)
+ return;
+
+ if (OrumQuest < 7) goto L_Different;
+
+ if (OrumQuest >= 11)
+ mes "The flame on the torch looks ordinary.. Lowering the final barrier seems to have drained them of their magic.";
+
+ if (OrumQuest < 8)
+ mes "Without that powder the note mentions there isn't much you can do with this torch..";
+
+ close;
+
+L_Different:
+ mes "The flame on this torch looks different than the rest.. You better tell Orum about it before doing anything.";
+ set OrumQuest, 6;
+ close;
+}
+
+// To make sure in range of torches
+function script InRangeTorch1 {
+ if (isin("009-4.gat",67,20,69,25))
+ return;
+
+ mes "Your too far away to do anything with that torch.";
+ close;
+}
+function script InRangeTorch2 {
+ if (isin("009-4.gat",65,41,69,46))
+ return;
+
+ mes "Your too far away to do anything with that torch.";
+ close;
+}
+function script InRangeTorch3 {
+ if (isin("009-4.gat",33,84,37,88))
+ return;
+
+ mes "Your too far away to do anything with that torch.";
+ close;
+}
+
+// First Torch
+009-4.gat,68,21,0 script Torch 127,{
+ callfunc "InRangeTorch1";
+ callfunc "DoneWithTorches";
+
+ set @Torch, 0;
+ callfunc("GetTorchColor");
+ callfunc("GetTorchIntensity");
+
+ set @lastColor, @TorchColor;
+ setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
+ setarray @intensities$,"calm","bright","blinding";
+ mes "Looking closely you notice that this torch is not like the others.. This one has a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + " tint to it.";
+ goto L_Color_Loop;
+
+L_Color_Loop:
+ callfunc("GetTorchColor");
+ menu
+ "Add Red Powder", L_Use_Red,
+ "Add Yellow Powder", L_Use_Yellow,
+ "Add Blue Powder", L_Use_Blue,
+ "Leave it alone.", -;
+
+ mes "The flame flickers as if it's laughing at you..";
+ close;
+
+L_Use_Red:
+ if (countitem("RedPowder") < 1) goto L_No_Powder;
+ if (@TorchColor > 6 && @TorchColor < 12) set @Color, @TorchColor + 1;
+ if (@TorchColor < 6 && @TorchColor > 1) set @Color, @TorchColor - 1;
+ if (@TorchColor == 12) set @Color, 1;
+ callfunc("SetTorchColor");
+ delitem "RedPowder", 1;
+ goto L_Show_Color;
+
+L_Use_Yellow:
+ if (countitem("YellowPowder") < 1) goto L_No_Powder;
+ if (@TorchColor < 10 && @TorchColor > 5) set @Color, @TorchColor - 1;
+ if (@TorchColor >= 1 && @TorchColor < 5) set @Color, @TorchColor + 1;
+ callfunc("SetTorchColor");
+ delitem "YellowPowder", 1;
+ goto L_Show_Color;
+
+L_Use_Blue:
+ if (countitem("BluePowder") < 1) goto L_No_Powder;
+ if (@TorchColor > 4 && @TorchColor < 9) set @Color, @TorchColor + 1;
+ if (@TorchColor <= 12 && @TorchColor > 9) set @Color, @TorchColor - 1;
+ if (@TorchColor == 1) set @Color, 12;
+ callfunc("SetTorchColor");
+ delitem "BluePowder", 1;
+ goto L_Show_Color;
+
+L_No_Powder:
+ mes "You notice your all out of that color of powder.. Perhaps Orum can make you some more.";
+ close;
+
+L_Show_Color:
+ callfunc("GetTorchColor");
+ callfunc("GetTorchIntensity");
+ if (@TorchColor == @lastColor) goto L_Wrong_Color;
+ misceffect 5;
+ set @lastColor, @TorchColor;
+ mes "As your pour the powder into the flame you can see it's tint transform to a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "..";
+ goto L_Color_Loop;
+
+L_Wrong_Color:
+ set @Intensity, @TorchIntensity + 1;
+ if (@Intensity > 2) goto L_Failed;
+ callfunc("SetTorchIntensity");
+ callfunc("GetTorchIntensity");
+ misceffect 5;
+ mes "As you pour the powder into the flame it flares violently for a moment and then turns into a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "..";
+ goto L_Color_Loop;
+
+L_Failed:
+ mes "As you pour the powder into the flame it flares violently before bursting into your face!";
+ misceffect 5;
+ misceffect 16;
+ set @Intensity, 0;
+ callfunc("SetTorchIntensity");
+ heal -Hp, 0;
+ close;
+}
+
+// Second Torch
+009-4.gat,67,42,0 script Torch 127,{
+ callfunc "InRangeTorch2";
+ callfunc "DoneWithTorches";
+
+ set @Torch, 1;
+ callfunc("GetTorchColor");
+ callfunc("GetTorchIntensity");
+
+ set @lastColor, @TorchColor;
+ setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
+ mes "Looking closely you notice that this torch is not like the others.. This one has a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + " tint to it.";
+ goto L_Color_Loop;
+
+L_Color_Loop:
+ callfunc("GetTorchColor");
+ menu
+ "Add Red Powder", L_Use_Red,
+ "Add Yellow Powder", L_Use_Yellow,
+ "Add Blue Powder", L_Use_Blue,
+ "Leave it alone.", -;
+
+ mes "The flame flickers as if it's laughing at you..";
+ close;
+
+L_Use_Red:
+ if (countitem("RedPowder") < 1) goto L_No_Powder;
+ if (@TorchColor > 6 && @TorchColor < 12) set @Color, @TorchColor + 1;
+ if (@TorchColor < 6 && @TorchColor > 1) set @Color, @TorchColor - 1;
+ if (@TorchColor == 12) set @Color, 1;
+ callfunc("SetTorchColor");
+ delitem "RedPowder", 1;
+ goto L_Show_Color;
+
+L_Use_Yellow:
+ if (countitem("YellowPowder") < 1) goto L_No_Powder;
+ if (@TorchColor < 10 && @TorchColor > 5) set @Color, @TorchColor - 1;
+ if (@TorchColor >= 1 && @TorchColor < 5) set @Color, @TorchColor + 1;
+ callfunc("SetTorchColor");
+ delitem "YellowPowder", 1;
+ goto L_Show_Color;
+
+L_Use_Blue:
+ if (countitem("BluePowder") < 1) goto L_No_Powder;
+ if (@TorchColor > 4 && @TorchColor < 9) set @Color, @TorchColor + 1;
+ if (@TorchColor <= 12 && @TorchColor > 9) set @Color, @TorchColor - 1;
+ if (@TorchColor == 1) set @Color, 12;
+ callfunc("SetTorchColor");
+ delitem "BluePowder", 1;
+ goto L_Show_Color;
+
+L_No_Powder:
+ mes "You notice your all out of that color powder.. Perhaps Orum can make you some more.";
+ close;
+
+L_Show_Color:
+ callfunc("GetTorchColor");
+ callfunc("GetTorchIntensity");
+ if (@TorchColor == @lastColor) goto L_Wrong_Color;
+ misceffect 5;
+ set @lastColor, @TorchColor;
+ mes "As your pour the powder into the flame you can see it's tint transform to a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "..";
+ goto L_Color_Loop;
+
+L_Wrong_Color:
+ set @Intensity, @TorchIntensity + 1;
+ if (@Intensity > 2) goto L_Failed;
+ callfunc("SetTorchIntensity");
+ callfunc("GetTorchIntensity");
+ misceffect 5;
+ mes "As you pour the powder into the flame it flares violently for a moment and then turns into a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "..";
+ goto L_Color_Loop;
+
+L_Failed:
+ mes "As you pour the powder into the flame it flares violently before bursting into your face!";
+ misceffect 5;
+ misceffect 16;
+ set @Intensity, 0;
+ callfunc("SetTorchIntensity");
+ heal -Hp, 0;
+ close;
+}
+
+// Third Torch
+009-4.gat,33,86,0 script Torch 127,{
+ callfunc "InRangeTorch3";
+ callfunc "DoneWithTorches";
+
+ set @Torch, 2;
+ callfunc("GetTorchColor");
+ callfunc("GetTorchIntensity");
+
+ set @lastColor, @TorchColor;
+ setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
+ setarray @intensities$,"calm","bright","blinding";
+ mes "Looking closely you notice that this torch is not like the others.. This one has a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + " tint to it.";
+ goto L_Color_Loop;
+
+L_Too_Far:
+ mes "Your too far away to do anything with that torch.";
+ close;
+
+L_Color_Loop:
+ callfunc("GetTorchColor");
+ menu
+ "Add Red Powder", L_Use_Red,
+ "Add Yellow Powder", L_Use_Yellow,
+ "Add Blue Powder", L_Use_Blue,
+ "Leave it alone.", -;
+
+ mes "The flame flickers as if it's laughing at you..";
+ close;
+
+L_Use_Red:
+ if (countitem("RedPowder") < 1) goto L_No_Powder;
+ if (@TorchColor > 6 && @TorchColor < 12) set @Color, @TorchColor + 1;
+ if (@TorchColor < 6 && @TorchColor > 1) set @Color, @TorchColor - 1;
+ if (@TorchColor == 12) set @Color, 1;
+ callfunc("SetTorchColor");
+ delitem "RedPowder", 1;
+ goto L_Show_Color;
+
+L_Use_Yellow:
+ if (countitem("YellowPowder") < 1) goto L_No_Powder;
+ if (@TorchColor < 10 && @TorchColor > 5) set @Color, @TorchColor - 1;
+ if (@TorchColor >= 1 && @TorchColor < 5) set @Color, @TorchColor + 1;
+ callfunc("SetTorchColor");
+ delitem "YellowPowder", 1;
+ goto L_Show_Color;
+
+L_Use_Blue:
+ if (countitem("BluePowder") < 1) goto L_No_Powder;
+ if (@TorchColor > 4 && @TorchColor < 9) set @Color, @TorchColor + 1;
+ if (@TorchColor <= 12 && @TorchColor > 9) set @Color, @TorchColor - 1;
+ if (@TorchColor == 1) set @Color, 12;
+ callfunc("SetTorchColor");
+ delitem "BluePowder", 1;
+ goto L_Show_Color;
+
+L_No_Powder:
+ mes "You notice your all out of that color powder.. Perhaps Orum can make you some more.";
+ close;
+
+L_Show_Color:
+ callfunc("GetTorchColor");
+ callfunc("GetTorchIntensity");
+ if (@TorchColor == @lastColor) goto L_Wrong_Color;
+ misceffect 5;
+ set @lastColor, @TorchColor;
+ mes "As your pour the powder into the flame you can see it's tint transform to a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "..";
+ goto L_Color_Loop;
+
+L_Wrong_Color:
+ set @Intensity, @TorchIntensity + 1;
+ if (@Intensity > 2) goto L_Failed;
+ callfunc("SetTorchIntensity");
+ callfunc("GetTorchIntensity");
+ misceffect 5;
+ mes "As you pour the powder into the flame it flares violently for a moment and then turns into a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "..";
+ goto L_Color_Loop;
+
+L_Failed:
+ mes "As you pour the powder into the flame it flares violently before bursting into your face!";
+ misceffect 5;
+ misceffect 16;
+ set @Intensity, 0;
+ callfunc("SetTorchIntensity");
+ heal -Hp, 0;
+ close;
+}
diff --git a/npc/009-4/waric.txt b/npc/009-4/waric.txt new file mode 100644 index 00000000..b160dfbb --- /dev/null +++ b/npc/009-4/waric.txt @@ -0,0 +1,95 @@ +//# see detailed description at orum.txt
+
+009-4.gat,99,33,0 script #WizardTrap 0,2,1,{
+ set @gender$, "They're";
+ if (Sex == 0) set @gender$, "She's";
+ if (Sex == 1) set @gender$, "He's";
+
+ mes "As you explore further into the cave you see a figure looking at you who appears angry.. but as you begin to speak, he quickly chants some words and you start to lose conciousness!";
+ next;
+ warp "009-4.gat", 117, 40;
+ mes "When you awake you find yourself unable to move.. You seem to be held in place by something.. As your eyes regain focus you see Orum talking with the figure you saw earlier.. Orum looks over at you and mumbles";
+ mes "";
+ mes "[Orum]";
+ mes "\"Be quiet Waric.. " + @gender$ + " awake..\"";
+ close;
+}
+
+009-4.gat,120,43,0 script Orum 158,{
+ mes "[Orum]";
+ mes "\"I told you to forget about this place but you did not heed my advice!\"";
+ next;
+ mes "[Orum]";
+ mes "\"Your fate is up to Waric now.. don't expect me to do anything else for you.\"";
+ close;
+}
+
+009-4.gat,118,42,0 script Waric 153,{
+ set @EXP_LEARNED_ALOT, 10000;
+ if (OrumQuest >= 13) goto L_Behave;
+ mes "Waric looks toward you rubbing his chin..";
+ next;
+ mes "[Waric]";
+ mes "\"So... Orum tells me your the one that helped him break me out of this dreadful place, so I guess I must thank you for that.\"";
+ next;
+ menu
+ "My pleasure! Mind letting me out of here?", L_Explain,
+ "This doesn't look like a thank you!", L_Explain,
+ "Let me out of here at once!", -;
+
+ mes "Waric turns toward Orum..";
+ next;
+ mes "[Waric]";
+ mes "\"We've got a feisty one here Orum!\"";
+ next;
+ mes "They begin discussing plans of some sort..";
+ set OrumQuest, 13;
+ close;
+
+L_Behave:
+ mes "Waric looks toward you shaking his finger..";
+ next;
+ mes "[Waric]";
+ mes "\"So... are you ready to behave yourself now?\"";
+ next;
+ menu
+ "Yes mister..", L_Explain,
+ "No I'm not ready yet!", -;
+
+ mes "[Waric]";
+ mes "\"Having fun I take it?\"";
+ next;
+ mes "They continue discussing their plans..";
+ close;
+
+L_Explain:
+ mes "[Waric]";
+ mes "\"I'm not sure what Orum told you but I was not kidnapped and brought here.. I was in fact imprisoned here very long ago by a witch for practicing spells on the insignificant forest life.\"";
+ next;
+ mes "[Waric]";
+ mes "\"She cared about the forest and all of that stuff you see. Now this cave is not bad.. I actually enjoyed it the first nights, but after a few years...\"";
+ next;
+ mes "Waric gets a bitter look and his face and pauses for a moment..";
+ next;
+ mes "[Waric]";
+ mes "\"So now you can see my motive to get out of here. The only air and water I get is what's given to me through that cave over there. And as for food.. theres only so many recipes for cave snakes and silk worms...\"";
+ next;
+ mes "Waric shivers in disgust..";
+ next;
+ mes "[Woric]";
+ mes "\"I'm sorry I had to constrain you like this but now that I'm free, I'm not about to let anyone stand in my way!\"";
+ next;
+ mes "[Waric]";
+ mes "\"Now if you'll excuse us, Orum and I have some things to attend to.. And don't bother coming back to stop us because we'll be long gone.\"";
+ next;
+ mes "Waric raises his hands and begins chanting some words.. You watch as streams of energy begin swirling around you..";
+ next;
+ mes "Once more you start to lose conciousness as your surroundings begin to fade..";
+ next;
+ set OrumQuest, 14;
+ misceffect 10;
+ warp "008-1.gat", 65, 90;
+ mes "You awake on your back with a squrrel sitting on top of you arranging it's acorns.. It quickly gathers them up and runs off as it sees you looking at it them..";
+ getexp @EXP_LEARNED_ALOT, 0;
+ close;
+}
diff --git a/npc/010-2_Dimonds_Cove/loratay.txt b/npc/010-2_Dimonds_Cove/loratay.txt index 47d5ea1d..c336de32 100644 --- a/npc/010-2_Dimonds_Cove/loratay.txt +++ b/npc/010-2_Dimonds_Cove/loratay.txt @@ -315,6 +315,9 @@ L_trim: if (@item >= 2100 && @item <= 2109) set @genitem, @item + 70; if (@genitem == 0) goto L_trim_impossible; if (zeny < 100) goto L_trim_nozeny; + + if (countitem(@delitem) < 1) + goto L_main_menu; delitem @delitem, 1; getitem @genitem, 1; @@ -368,6 +371,9 @@ L_lengthen: if (@genitem == 0) goto L_lengthen_impossible; if (zeny < 500) goto L_lengthen_nozeny; if (countitem ("CottonCloth") < 1) goto L_lengthen_nocotton; + + if (countitem(@delitem) < 1) + goto L_main_menu; delitem @delitem, 1; delitem "CottonCloth", 1; diff --git a/npc/011-1_Woodland/_warps.txt b/npc/011-1_Woodland/_warps.txt index 2cb1fd80..5a700e22 100644 --- a/npc/011-1_Woodland/_warps.txt +++ b/npc/011-1_Woodland/_warps.txt @@ -5,3 +5,4 @@ 011-1.gat,49,104 warp ToWoodland 0,-1,010-1.gat,50,25 011-1.gat,125,62 warp ToWoodland -1,2,008-1.gat,27,61 011-1.gat,73,11 warp ToWoodlandHills 0,-1,012-1.gat,131,162 +011-1.gat,38,36 warp affenpeter -1,-1,011-6.gat,49,99 diff --git a/npc/011-1_Woodland/auldsbel.txt b/npc/011-1_Woodland/auldsbel.txt index 595c1a9f..1c6487c0 100644 --- a/npc/011-1_Woodland/auldsbel.txt +++ b/npc/011-1_Woodland/auldsbel.txt @@ -20,7 +20,7 @@ set @Q_STATUS_STUDENT4, 8; set @Q_STATUS_STUDENT5, 9; set @Q_STATUS_STUDENT6, 10; - + set @wants_sulphur, (QUEST_MAGIC & (NIBBLE_6_MASK | NIBBLE_7_MASK)) // war quest || (((QUEST_MAGIC2 & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT) >= 4); // Elanore's heal-Kadiya quest @@ -508,12 +508,70 @@ L_question: if (@c == @QQ_SAGATHA) goto L_Q_sagatha; if (@c == @QQ_IMP) goto L_Q_imp; if (@c == @QQ_OLDWIZ) goto L_Q_old_wizard; + if (@c == @QQ_ASTRALSOUL)goto L_Q_astralsoul; mes "[Auldsbel the Wizard]"; mes "\"Let us talk about something else.\""; next; goto L_main_menu; +L_Q_astralsoul: + if (!(getskilllv(SKILL_ASTRAL_SOUL))) + goto L_Q_astralsoul_L; + next; + mes "[Auldsbel the Wizard]"; + mes "\"Oh that is a really useful focus. It will help you doing magic of all kinds.\""; + next; + mes "\"...uhm...\""; + next; + mes "\"Didn't I teach you the ability to focus on magic, did I?\""; + goto L_main_menu; + +L_Q_astralsoul_L: + mes "[Auldsbel the Wizard]"; + mes "\"Oh that is a really useful focus. It will help you doing magic of all kinds.\""; + next; + mes "\"I can try to teach you this ability.\""; + next; + mes "\"But I will need some very expensive magical substances to focus your brain onto magic.\""; + next; + mes "\"It is about... erm 11300 GP. Do you have so much money?\""; + menu "Here you are", L_Q_astralsoul_L1, + "I will get it.", -; + goto L_main_menu; + +L_Q_astralsoul_L1: + if (zeny < 11300) + goto L_Q_astralsoul_nz; + set zeny, zeny - 11300; + mes "[Auldsbel the Wizard]"; + mes "\"Okay, listen:\""; + next; + mes "\"Some parts of your brain is still unused. These parts will now get the ability to get focused to magic.\""; + next; + mes "\"To do so, think of a magic spell!\""; + next; + mes "Auldsbel mumbles some invocations"; + next; + set @SUP_lvl, 1; + set @SUP_id, SKILL_ASTRAL_SOUL; + set @SUP_name$, "Astral Soul"; + set @SUP_xp, 2500; + callfunc "SkillUp"; + next; + mes "[Auldsbel the Wizard]"; + mes "\"Now go and try to find someone, who can actually activate that focus.\""; + next; + mes "\"You have the powers to focus on magic, but you need to get magic focussed now.\""; + goto L_main_menu; + +L_Q_astralsoul_nz: + mes "[Auldsbel the Wizard]"; + mes "\"When learning powerful stuff, you should try to make not so many jokes.\""; + next; + mes "\"Come back, when you have the money.\""; + goto L_main_menu; + L_Q_old_wizard: mes "[Auldsbel the Wizard]"; mes "\"I'm still not sure what exactly to make of him. At first appearance, he seems like a senile old man, but there can be no doubt that he has-- or at least had, at some point-- a very deep understanding of magic.\""; @@ -955,7 +1013,7 @@ L_learn_spell: mes "\"Oh, actually, make sure to write that down. You should keep track of all spells and spell fragments, really. I always keep a notebook handy, in fact.\""; next; set @Q_main_status, @Q_STATUS_INITIATION; - callsub S_update_var; + callsub S_update_var; goto L_main_menu; LL_repeat_spell: @@ -1219,7 +1277,7 @@ LL_student_4: menu "What was the invocation again?", LL_student_3_repeat, "No, still working on it...", L_main_menu, - "Yes.", -; + "Yes.", -; if (countitem("ConcentrationPotion") < 1) goto LL_student_4_no_potion; diff --git a/npc/011-3_Hermits_cave/hermit.txt b/npc/011-3_Hermits_cave/hermit.txt index 6dccccf4..4b582cc4 100644 --- a/npc/011-3_Hermits_cave/hermit.txt +++ b/npc/011-3_Hermits_cave/hermit.txt @@ -4,8 +4,8 @@ mes "[Arkim the Hermit]"; mes "\"Do you want to go back outside?\""; menu - "Yes please", L_Sure, - "Not yet", -, + "Yes, please!", L_Sure, + "Not yet.", -, "Actually... Why do you live here?", L_Interested; close; @@ -15,32 +15,32 @@ L_Sure: L_Interested: mes "[Arkim the Hermit]"; - mes "\"Oh my, never really thought about it\""; + mes "\"Oh my, never really thought about it!\""; next; mes "[Arkim the Hermit]"; - mes "\"I guess mostly I enjoy experimenting with bats here\""; + mes "\"I guess mostly I enjoy experimenting with the bats here.\""; menu - "I see", -, + "I see...", -, "What type of experimenting?", L_Experiment; close; L_Experiment: mes "[Arkim the Hermit]"; - mes "\"Never really thought about it...\""; + mes "\"Never really thought about it either...\""; next; - mes "*You watch as his old, lazy eyes open wide. And the old man comes alive with engery*"; + mes "You watch as the hermit's old, lazy eyes open wide, and the old man comes alive with energy."; next; mes "[Arkim the Hermit]"; - mes "\"I GUESS I REALLY LIKE CUTTING THEM UP TO SEE HOW THEY WORK!! HAHAHA!\""; + mes "\"I GUESS I REALLY LIKE CUTTING THEM UP TO SEE HOW THEY WORK!! HAHAHA!\""; menu "YOU'RE CRAZY!", -, - "Right... me too. Can I help?", L_Quest; + "Right... me too! Can I help?", L_Quest; close; L_Quest: @@ -57,6 +57,6 @@ L_Quest: next; mes "[Arkim the Hermit]"; - mes "\"And remember never lend your tooth brush to a slime!\""; + mes "\"And remember: never lend your toothbrush to a slime!\""; close; } diff --git a/npc/011-4_Lake_cave/_import.txt b/npc/011-4_Lake_cave/_import.txt index f2cfbc87..fe6c5cfd 100644 --- a/npc/011-4_Lake_cave/_import.txt +++ b/npc/011-4_Lake_cave/_import.txt @@ -1,4 +1,5 @@ map: 011-4.gat npc: npc/011-4_Lake_cave/_mobs.txt npc: npc/011-4_Lake_cave/_warps.txt +npc: npc/011-4_Lake_cave/bl_barrier.txt npc: npc/011-4_Lake_cave/monsters.txt diff --git a/npc/011-4_Lake_cave/_warps.txt b/npc/011-4_Lake_cave/_warps.txt index 6d255a4d..a6df0623 100644 --- a/npc/011-4_Lake_cave/_warps.txt +++ b/npc/011-4_Lake_cave/_warps.txt @@ -1,4 +1,20 @@ +<<<<<<< HEAD // 011-4 Lake cave warps
011-4.gat,73,8 warp ToHermitsCave 0,-1,011-3.gat,31,23
011-4.gat,129,86 warp ToCaveBeneathHurnscald -1,-1,009-3.gat,21,55
+======= +// 011-4 Lake cave warps + +011-4.gat,73,8 warp ToHermitsCave 0,-1,011-3.gat,31,24 +011-4.gat,129,86 warp ToCaveBeneathHurnscald -1,-1,009-3.gat,21,55 +011-4.gat,39,35 warp warp -1,-1,011-6.gat,47,183 +011-4.gat,16,57 warp warp -1,-1,011-6.gat,24,204 +011-4.gat,89,20 warp warp -1,-1,011-6.gat,97,168 +011-4.gat,105,32 warp warp -1,-1,011-6.gat,113,184 +011-4.gat,114,61 warp warp -1,-1,011-6.gat,122,213 +011-4.gat,86,75 warp warp -1,-1,011-6.gat,94,227 +011-4.gat,62,86 warp warp -1,-1,011-6.gat,68,233 +011-4.gat,32,5 warp warp 0,-1,011-6.gat,186,180 +011-4.gat,45,118 warp warp -1,-1,011-6.gat,266,180 +>>>>>>> 1e1e26e1255a487a14ca99c60c3ab51ad3988f9b diff --git a/npc/011-4_Lake_cave/bl_barrier.txt b/npc/011-4_Lake_cave/bl_barrier.txt new file mode 100644 index 00000000..07b44999 --- /dev/null +++ b/npc/011-4_Lake_cave/bl_barrier.txt @@ -0,0 +1,16 @@ +//bandit lord barrier + +011-4.gat,111,121,0 script #BL_Barrier 127,0,0,{ + + if (TMW_Quest >= 44) goto L_Bandit_Lord_Barrier_Open; + + message strcharinfo(0), "This entrance appears to be locked."; + end; + + +L_Bandit_Lord_Barrier_Open: + message strcharinfo(0), "You insert the silver arrow key and unlock the entrance."; + warp "011-6.gat",251,275; + end; + +} diff --git a/npc/011-6/_import.txt b/npc/011-6/_import.txt new file mode 100644 index 00000000..ae38662c --- /dev/null +++ b/npc/011-6/_import.txt @@ -0,0 +1,4 @@ +map: 011-6.gat +npc: npc/011-6/_mobs.txt +npc: npc/011-6/_warps.txt +npc: npc/011-6/bryant.txt diff --git a/npc/011-6/_mobs.txt b/npc/011-6/_mobs.txt new file mode 100644 index 00000000..9f42488c --- /dev/null +++ b/npc/011-6/_mobs.txt @@ -0,0 +1,94 @@ +// 011-6 mobs + +011-6.gat,152,72,283,127 monster Silk Worm 1035,9,30000,100000,Mob011-6::On1035 +011-6.gat,263,38,30,34 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,262,114,38,38 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,132,119,17,21 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,170,66,17,21 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,67,70,17,21 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,196,107,17,21 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,196,29,17,21 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,36,37,17,21 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,112,40,45,48 monster Bandit 1064,2,30000,60000,Mob011-6::On1064 +011-6.gat,31,99,17,21 monster Bandit 1064,1,30000,30000,Mob011-6::On1064 +011-6.gat,223,250,123,65 monster Bat 1017,5,30000,100000,Mob011-6::On1017 +011-6.gat,224,175,118,25 monster Bat 1017,3,30000,100000,Mob011-6::On1017 +011-6.gat,257,77,4,126 monster Bat 1017,6,30000,100000,Mob011-6::On1017 +011-6.gat,192,77,4,126 monster Bat 1017,9,30000,100000,Mob011-6::On1017 +011-6.gat,167,110,87,13 monster Bat 1017,9,30000,100000,Mob011-6::On1017 +011-6.gat,75,70,104,96 monster Bat 1017,23,30000,100000,Mob011-6::On1017 +011-6.gat,78,195,129,97 monster Bat 1017,9,30000,100000,Mob011-6::On1017 +011-6.gat,168,109,36,37 monster Spiky Mushroom 1019,5,30000,100000,Mob011-6::On1019 +011-6.gat,199,76,36,37 monster Spiky Mushroom 1019,5,30000,100000,Mob011-6::On1019 +011-6.gat,88,163,29,27 monster Spiky Mushroom 1019,5,30000,100000,Mob011-6::On1019 +011-6.gat,48,113,35,19 monster Spiky Mushroom 1019,5,30000,100000,Mob011-6::On1019 +011-6.gat,177,94,20,28 monster Evil Mushroom 1013,4,30000,100000,Mob011-6::On1013 +011-6.gat,194,49,20,28 monster Evil Mushroom 1013,2,30000,100000,Mob011-6::On1013 +011-6.gat,51,115,47,24 monster Evil Mushroom 1013,2,30000,100000,Mob011-6::On1013 +011-6.gat,63,169,13,17 monster Evil Mushroom 1013,2,30000,100000,Mob011-6::On1013 +011-6.gat,100,226,29,14 monster Spiky Mushroom 1019,3,30000,100000,Mob011-6::On1019 +011-6.gat,260,44,53,16 monster Spiky Mushroom 1019,3,30000,100000,Mob011-6::On1019 +011-6.gat,272,48,21,28 monster Evil Mushroom 1013,2,30000,100000,Mob011-6::On1013 +011-6.gat,95,78,31,25 monster Yellow Slime 1007,5,30000,100000,Mob011-6::On1007 +011-6.gat,59,36,19,25 monster Yellow Slime 1007,5,30000,100000,Mob011-6::On1007 +011-6.gat,26,69,19,25 monster Yellow Slime 1007,5,30000,100000,Mob011-6::On1007 +011-6.gat,61,101,14,10 monster Yellow Slime 1007,3,30000,100000,Mob011-6::On1007 +011-6.gat,50,61,9,12 monster Yellow Slime 1007,3,30000,100000,Mob011-6::On1007 +011-6.gat,128,39,9,12 monster Yellow Slime 1007,3,30000,100000,Mob011-6::On1007 +011-6.gat,41,178,9,12 monster Yellow Slime 1007,1,30000,100000,Mob011-6::On1007 +011-6.gat,70,229,9,12 monster Yellow Slime 1007,1,30000,100000,Mob011-6::On1007 +011-6.gat,20,204,9,12 monster Yellow Slime 1007,1,30000,100000,Mob011-6::On1007 +011-6.gat,114,190,9,12 monster Yellow Slime 1007,4,30000,100000,Mob011-6::On1007 +011-6.gat,137,205,9,12 monster Yellow Slime 1007,2,30000,100000,Mob011-6::On1007 +011-6.gat,79,220,29,14 monster Cave Snake 1021,3,30000,100000,Mob011-6::On1021 +011-6.gat,115,210,29,14 monster Cave Snake 1021,3,30000,100000,Mob011-6::On1021 +011-6.gat,41,193,31,31 monster Cave Snake 1021,3,30000,100000,Mob011-6::On1021 +011-6.gat,70,143,31,31 monster Cave Snake 1021,3,30000,100000,Mob011-6::On1021 +011-6.gat,97,183,29,14 monster Cave Snake 1021,3,30000,100000,Mob011-6::On1021 +011-6.gat,172,252,9,12 monster Cave Maggot 1056,4,30000,100000,Mob011-6::On1056 +011-6.gat,263,236,16,5 monster Cave Maggot 1056,3,30000,100000,Mob011-6::On1056 + + +011-6.gat,0,0,0 script Mob011-6 -1,{ +On1007: + set @mobID, 1007; + callfunc "MobPoints"; + break; + +On1013: + set @mobID, 1013; + callfunc "MobPoints"; + break; + +On1017: + set @mobID, 1017; + callfunc "MobPoints"; + break; + +On1019: + set @mobID, 1019; + callfunc "MobPoints"; + break; + +On1021: + set @mobID, 1021; + callfunc "MobPoints"; + break; + +On1035: + set @mobID, 1035; + callfunc "MobPoints"; + break; + +On1056: + set @mobID, 1056; + callfunc "MobPoints"; + break; + +On1064: + set @mobID, 1064; + callfunc "MobPoints"; + break; + + end; +} diff --git a/npc/011-6/_warps.txt b/npc/011-6/_warps.txt new file mode 100644 index 00000000..545bc386 --- /dev/null +++ b/npc/011-6/_warps.txt @@ -0,0 +1,25 @@ +// 011-6 warps + +011-6.gat,51,75 warp toMiddleCave1 -1,-1,011-6.gat,260,125 +011-6.gat,61,71 warp toMiddleCave2 -1,-1,011-6.gat,270,122 +011-6.gat,270,125 warp toMainCave -1,-1,011-6.gat,61,73 +011-6.gat,260,128 warp toMiddleCave2 -1,-1,011-6.gat,51,77 +011-6.gat,145,118 warp ToMainCave3 -1,-1,011-6.gat,47,119 +011-6.gat,196,26 warp toSmallCave1 -1,-1,011-6.gat,261,44 +011-6.gat,261,47 warp toPassage1 -1,-1,011-6.gat,196,28 +011-6.gat,271,52 warp toMainCave4 -1,-1,011-6.gat,98,32 +011-6.gat,98,30 warp toSmallCave -1,-1,011-6.gat,271,50 +011-6.gat,47,120 warp toPassage -1,-1,011-6.gat,145,115 +011-6.gat,49,101 warp toOutside -1,-1,011-1.gat,38,37 +011-6.gat,24,206 warp warp -1,-1,011-4.gat,17,59 +011-6.gat,47,185 warp warp -1,-1,011-4.gat,39,38 +011-6.gat,97,170 warp warp -1,-1,011-4.gat,89,21 +011-6.gat,113,182 warp warp -1,-1,011-4.gat,105,34 +011-6.gat,122,211 warp warp -1,-1,011-4.gat,114,63 +011-6.gat,94,225 warp warp -1,-1,011-4.gat,86,77 +011-6.gat,68,235 warp warp -1,-1,011-4.gat,62,87 +011-6.gat,251,278 warp warp -1,-1,011-4.gat,111,123 +011-6.gat,186,182 warp warp -1,-1,011-4.gat,31,7 +011-6.gat,266,182 warp warp -1,-1,011-4.gat,45,120 +011-6.gat,174,256 warp warp -1,-1,011-6.gat,264,238 +011-6.gat,264,236 warp warp -1,-1,011-6.gat,174,252 diff --git a/npc/011-6/bryant.txt b/npc/011-6/bryant.txt new file mode 100644 index 00000000..7e7041d1 --- /dev/null +++ b/npc/011-6/bryant.txt @@ -0,0 +1,53 @@ +//NPC to set the state for killing the bandit lord. + +011-6.gat,27,200,0 script Bryant 126,{ + + if (TMW_Quest >= 45) goto L_Bryant_Quiet; + if (TMW_Quest == 44) goto L_Bryant_Waits; + if (TMW_Quest == 43) goto L_Bryant_Summon; + + mes "[Bryant]"; + mes "\"I'm looking everywhere for the bandit leader. I can't seem to find him.\""; + close; + +L_Bryant_Summon: + mes "[Bryant]"; + mes "\"I ran into that bandit lord and he got me good. I'm going to stay here for a while and heal. He dropped this key. Take it. You might be able to handle him better than I could.\""; + next; + mes "Bryant gives you a key, shaped to look like a small silver arrow."; + next; + mes "\"I believe I saw him run into a cave south and east of here. There is a red carpet in front of the cave entrance. Be careful and good luck.\""; + set TMW_Quest, 44; + monster "011-6.gat",260,250,"BanditLord",1065,1, "Bryant::onBanditLordDead"; + close; + +onBanditLordDead: + set TMW_Quest, 45; + message strcharinfo(0), "You killed the bandit lord."; + end; + +L_Bryant_Waits: + mes "[Bryant]"; + mes "\"I think the bandit lord is still around. I fear this could be dangerous for the people of Hurnscald. When you went to the cave with the red carpet in front of it, did you find him and kill him?\""; + menu + "No.", L_Bryant_No, + "Yes.", L_Bryant_Yes; + close; + +L_Bryant_No: + mes "[Bryant]"; + mes "\"Well, maybe he ran off. I'm pretty sure he should be there now.\""; + killmonster "011-6.gat", "Bryant::onBanditLordDead"; + monster "011-6.gat",260,250,"BanditLord",1065,1, "Bryant::onBanditLordDead"; + close; + +L_Bryant_Yes: + mes "[Bryant]"; + mes "\"I don't think you killed him. Please try to find and kill him. He should be in the cave south and east of here with the red carpet in front of it.\""; + close; + +L_Bryant_Quiet: + mes "[Bryant]"; + mes "\"Glad that bandit leader got what was coming to him.\""; + close; +} diff --git a/npc/012-3_Cave/_import.txt b/npc/012-3_Cave/_import.txt index 7d427ad8..09310f6e 100644 --- a/npc/012-3_Cave/_import.txt +++ b/npc/012-3_Cave/_import.txt @@ -3,3 +3,4 @@ npc: npc/012-3_Cave/_mobs.txt npc: npc/012-3_Cave/_warps.txt npc: npc/012-3_Cave/mana-seed.txt npc: npc/012-3_Cave/monsters.txt +npc: npc/012-3_Cave/warningsigns.txt diff --git a/npc/012-3_Cave/warningsigns.txt b/npc/012-3_Cave/warningsigns.txt new file mode 100644 index 00000000..6a71ad7e --- /dev/null +++ b/npc/012-3_Cave/warningsigns.txt @@ -0,0 +1,18 @@ +//warning signs at pvp entrance! + + +012-3.gat,445,61,0 script sign 187, { + mes "Your are about to enter a dangerous area!"; + next; + mes "This area has a great distance to town. So the protection spell of the town is not active in that cave!"; + mes "That is why other players are able to attack you."; + close; +} + +012-3.gat,451,61,0 script sign 186, { + mes "Your are about to enter a dangerous area!"; + next; + mes "This area has a great distance to town. So the protection spell of the town is not active in that cave!"; + mes "That is why other players are able to attack you."; + close; +} diff --git a/npc/012-4_Cave/_import.txt b/npc/012-4_Cave/_import.txt index 70e118bc..59703ed9 100644 --- a/npc/012-4_Cave/_import.txt +++ b/npc/012-4_Cave/_import.txt @@ -1,3 +1,4 @@ map: 012-4.gat npc: npc/012-4_Cave/_mobs.txt npc: npc/012-4_Cave/_warps.txt +npc: npc/012-4_Cave/pvpflag.txt diff --git a/npc/012-4_Cave/pvpflag.txt b/npc/012-4_Cave/pvpflag.txt new file mode 100644 index 00000000..b796cefa --- /dev/null +++ b/npc/012-4_Cave/pvpflag.txt @@ -0,0 +1 @@ +012-4.gat mapflag pvp diff --git a/npc/013-1_Woodland_hills/sagatha.txt b/npc/013-1_Woodland_hills/sagatha.txt index f5e2f606..84df4fe6 100644 --- a/npc/013-1_Woodland_hills/sagatha.txt +++ b/npc/013-1_Woodland_hills/sagatha.txt @@ -260,7 +260,7 @@ L_teach: mes "[Sagatha the Witch]"; mes "\"Not yet. You have to ask the mana seed to give you more power.\""; next; - goto L_main; + goto L_main; L_practice: mes "[1000 experience points]"; @@ -347,12 +347,27 @@ L_Question: if (@c == @QQ_AULDSBEL) goto L_Q_auldsbel; if (@c == @QQ_IMP) goto L_Q_imp; if (@c == @QQ_OLDWIZ) goto L_Q_old_wizard; + if (@c == @QQ_ASTRALSOUL)goto L_Q_astralsoul; mes "[Sagatha the Witch]"; mes "\"That doesn't concern you.\""; next; goto L_main; +L_Q_astralsoul: + mes "[Sagatha the Witch]"; + mes "\"Yes, there is a way to improve your magic.\""; + next; + mes "\"Did you ever hear about focusing?\""; + next; + mes "\"It is a mental ability, which improves you at a certain focused skill.\""; + next; + mes "\"Yes, I am focused on nature magic, but I cannot teach focusing. That is another realm of magic. Just a few people can really focus your brain to a specific art of magic.\""; + next; + mes "\"Maybe you should ask some other people experienced in magic.\""; + next; + goto L_main; + L_Q_old_wizard: mes "[Sagatha the Witch]"; mes "\"A kind and wise wizard.\""; diff --git a/npc/013-2_Magic_house/wizard.txt b/npc/013-2_Magic_house/wizard.txt index e74b15ec..f3964cc0 100644 --- a/npc/013-2_Magic_house/wizard.txt +++ b/npc/013-2_Magic_house/wizard.txt @@ -44,10 +44,19 @@ L_new_student: mes "\"Studying is always an excellent use of one's mind! I fear that I can't offer too much assistance to you, however. But if you are interested, I could perhaps teach you a simple spell?\""; next; - menu - "That would be very kind of you!", -, + // check if the player has the knowledge of any skill + if (!(getskilllv(SKILL_POOL))) + menu + "That would be very kind of you!", L_teachspell, + "No, but thank you!", nothx; + + if (getskilllv(SKILL_POOL)) + menu + "That would be very kind of you!", L_teachspell, + "Actually I am looking for someone teaching me some more magic skills.", L_astralsoul, "No, but thank you!", nothx; +L_teachspell: mes "[Old Wizard]"; mes "\"This one may not seem too powerful, but it can be quite handy; it's the 'hide' spell. It will shield you from some forms of detection magic.\""; next; @@ -71,6 +80,46 @@ L_new_student: mes "\"I'm not sure if you are experienced enough to cast it yet, though. You may need to first learn astral magic.\""; close; +L_astralsoul: + mes "[Old Wizard]"; + mes "\"Oh yes, there are lots of ways to improve your magic. Skills -some people say mental focus for that- are another way to improve your magic. Of course learning more and more spells is also a need for good mages.\""; + next; + mes "\"I can teach you the ability to focus on magical stuff.\""; + next; + mes "\"To do so, I am in need of a pearl and about 100 acorns.\""; + + menu "Here we go.", -, + "Ok be right back. I'll get them", nothx; + + if (countitem("Pearl") < 1 || countitem("Acorn") < 100) goto L_NotEnough; + delitem "Pearl", 1; + delitem "Acorn", 100; + + mes "[Old Wizard]"; + mes "\"Okay, listen:\""; + next; + mes "\"Some parts of your brain is still unused. These parts will now get the ability to get focused to magic.\""; + next; + mes "\"To do so, think of a magic spell!\""; + next; + mes "The old wizard mumbles some invocations"; + next; + set @SUP_lvl, 1; + set @SUP_id, SKILL_ASTRAL_SOUL; + set @SUP_name$, "Astral Soul"; + set @SUP_xp, 2500; + callfunc "SkillUp"; + mes "\"Now go and try to find someone, who can actually activate that focus.\""; + next; + mes "\"You have the powers to focus on magic, but you need to get magic focussed now.\""; + close; + +L_NotEnough: + mes "[Old Wizard]"; + mes "\"Please learn to count.\""; + next; + mes "\"When you are done with that, come back again.\""; + close; ok: mes "[Old Wizard]"; mes "\"Beware the flying notes though, some of them are really dangerous. I haven't been able to persuade them to get back into their book. And avoid the mirror, it's been acting strange lately.\""; diff --git a/npc/014-1_Woodland/_import.txt b/npc/014-1_Woodland/_import.txt index b84a9892..3c67f38f 100644 --- a/npc/014-1_Woodland/_import.txt +++ b/npc/014-1_Woodland/_import.txt @@ -1,4 +1,5 @@ map: 014-1.gat npc: npc/014-1_Woodland/_mobs.txt npc: npc/014-1_Woodland/_warps.txt +npc: npc/014-1_Woodland/taro.txt npc: npc/014-1_Woodland/wedding-officiator.txt diff --git a/npc/020-2_Nivalis/taro.txt b/npc/014-1_Woodland/taro.txt index a9418f80..d2f1091e 100644 --- a/npc/020-2_Nivalis/taro.txt +++ b/npc/014-1_Woodland/taro.txt @@ -1,7 +1,7 @@ // Woodland Taro -020-2.gat,104,28,0 script Taro 114,{ +//014-1.gat,54,43,0 script Taro 114,{ if (getequipid(equip_head) == 511 || getequipid(equip_head) == 1206) goto L_Santa; if (getequipid(equip_head) == 633) goto L_Elf; if (getequipid(equip_head) == 628) goto L_NearElf; diff --git a/npc/016-1_Woodland/_import.txt b/npc/016-1_Woodland/_import.txt index 6d6c7bc9..cab6a4ac 100644 --- a/npc/016-1_Woodland/_import.txt +++ b/npc/016-1_Woodland/_import.txt @@ -1,4 +1,5 @@ map: 016-1.gat npc: npc/016-1_Woodland/_mobs.txt npc: npc/016-1_Woodland/_warps.txt +npc: npc/016-1_Woodland/gwendolyn.txt npc: npc/016-1_Woodland/monsters.txt diff --git a/npc/016-1_Woodland/gwendolyn.txt b/npc/016-1_Woodland/gwendolyn.txt new file mode 100644 index 00000000..c81fefd1 --- /dev/null +++ b/npc/016-1_Woodland/gwendolyn.txt @@ -0,0 +1,530 @@ +//################################################################################# +//# +//# This script is for gaining the skill "Hawk's Eye" +//# +//# Needed: Forest Bow Quest +//# +//# Quest1: Proving Dexterity +//# Needed: 10 cave snake eggs, 10 snake eggs, 10 mountain snake eggs, 10 grass snake eggs +//# Reward: 10000 Exp +//# Quest2: Hitting the Target +//# Needed: win the minigame and hit the target depending on the wind, dex and agi +//# Reward: Skill Hawk's Eye +//# +//# Variables used: @QUEST_Forestbow_state, nibble 6 +//# +//# This nibble will have these values: +//# 0, state0: never talked to Gwendolyn +//# 1, state1: talked with her, but not a student yet +//# 2, state2: student, but no bow (from alan of course) +//# 3, state3: heard first lesson, she is waiting for the snake eggs +//# 4, state4: quest done, but too young, or having the ability for skills not learned +//# 5, state5: you are ready to do the targeting minigame +//# 6, state6: you did the minigame +//################################################################################# + +016-1.gat,33,45,0 script Gwendolyn 182, { + // schoolfee in gp + set @SCHOOLFEE, 25000; + // how many eggs do you need of each kind? + set @EGGS_AMOUNT, 10; + // experience for eggs + set @QUEST_EGG_EXP, 10000; + // The needed level for the minigame: + set @BASELEVEL_GAME, 50; + // experience gained for hitting the bullseye: + set @QUEST_HAWK_EXP, 10000; + + set @Q_hawkseye_MASK, NIBBLE_6_MASK; + set @Q_hawkseye_SHIFT, NIBBLE_6_SHIFT; + + set @Q_hawkseye, (QUEST_Forestbow_state & @Q_hawkseye_MASK) >> @Q_hawkseye_SHIFT; + + set @Q_forestbow_MASK, NIBBLE_0_MASK; + set @Q_forestbow_SHIFT, NIBBLE_0_SHIFT; + + set @FORESTBOW, ((QUEST_Forestbow_state) & @Q_forestbow_MASK) >> @Q_forestbow_SHIFT; + + if (@Q_hawkseye == 6) goto state6; + if (@Q_hawkseye == 5) goto state5; + if (@Q_hawkseye == 4) goto state4; + if (@Q_hawkseye == 3) goto state3; + if (@Q_hawkseye == 2) goto state2; + if (@Q_hawkseye == 1) goto state1; + +state0: + mes "[Gwendolyn Bowmaker]"; + mes "\"Hello, and welcome to my reopened School of Archery. My name is Gwendolyn Bowmaker; I'm the granddaughter of the famous Gwendolyn Bowmaker.\""; + next; + mes "\"As you surely know, she was the greatest archer this world had ever seen and opened this School of Archery together with her husband Simon Bowmaker. He was able to make the most well-balanced and the finest bows.\""; + next; + mes "\"I am now back from my training journey and want to continue with my family's tradition, to teach the Way of Archery.\""; + next; + mes "\"Are you interested in becoming a student of Archery?\""; + next; + menu + "I want to become an archer!", -, + "I'm not interested right now.", no_student; +fee: + mes "[Gwendolyn Bowmaker]"; + mes "\"Wonderful! The school's fee is " + @SCHOOLFEE + ".\""; + next; + menu + "That's a lot, but I think it will be worth it.", -, + "I'm not sure I want to spend that much.", no_student; + + if (zeny < @SCHOOLFEE) goto no_money; + + set zeny, zeny - @SCHOOLFEE; + set @Q_hawkseye, 2; + callsub S_Update_Var; + + mes "[Gwendolyn Bowmaker]"; + mes "\"The first thing you need is, obviously, a bow. You should not use any you come across, but a high quality one. I think it would be best to go to Alan in Hurnscald. He is my cousin, and knows how to make Forest Bows of exquisite quality. \""; + + if (countitem("ForestBow") < 1) close; + next; + menu + "I already have a Forest Bow.", -; + +state2: + mes "[Gwendolyn Bowmaker]"; + mes "\"Let me see your bow.\""; + next; + + if (countitem("ForestBow") < 1) goto no_bow; + + if (@FORESTBOW < 5) goto bow_bought; + + set @Q_hawkseye, 3; + callsub S_Update_Var; + mes "[Gwendolyn Bowmaker]"; + mes "\"Very well, this looks fine. It is time for your first lesson. \""; + next; + +lesson: + mes "[Gwendolyn Bowmaker]"; + mes "\"The advantage of fighting with a ranged weapon is that you can stay out of the enemy's range. So there is no need to spend training on your resistibility.\""; + next; + mes "\"But remember: this makes you much more vulnerable, so watch your step and don't stumble into your enemy's attack.\""; + next; + mes "\"Also your strength doesn't matter much. You might be able to shoot a little harder, but not so much as to make it important.\""; + next; + mes "\"The most important thing to improve is your dexterity. When you use a bow, it is your dexterity that determines if you are able to hit your enemy where it hurts most.\""; + next; + mes "\"Also worth mentioning is how to improve your ability to shoot fast. You need to be agile to grab a new arrow from your quiver and aim for the next shot before your enemy has recoverd from your last.\""; + next; + +state3: + mes "[Gwendolyn Bowmaker]"; + mes "\"To demonstrate that you understood what I'm trying to teach you, you should go and fight against some snakes. To prove me your results, bring me ten each of cave snake eggs, snake eggs, mountain snake eggs and grass snake eggs.\""; + next; + + menu + "Can you please repeat your lesson?", lesson, + "I will go and hunt some snakes.", quit, + "I have what you want.", -; + + if (countitem("CaveSnakeEgg") < @EGGS_AMOUNT ||countitem("SnakeEgg") < @EGGS_AMOUNT ||countitem("MountainSnakeEgg") < @EGGS_AMOUNT ||countitem("GrassSnakeEgg") < @EGGS_AMOUNT) goto not_enough_eggs; + + delitem "CaveSnakeEgg", @EGGS_AMOUNT; + delitem "SnakeEgg", @EGGS_AMOUNT; + delitem "MountainSnakeEgg", @EGGS_AMOUNT; + delitem "GrassSnakeEgg", @EGGS_AMOUNT; + + getexp @QUEST_EGG_EXP, 0; + + set @Q_hawkseye, 4; + callsub S_Update_Var; + + mes "[Gwendolyn Bowmaker]"; + mes "\"Very well. That will make a great meal.\""; + next; + +state4: + if (baselevel < @BASELEVEL_GAME) goto not_ready; + if (!(getskilllv(SKILL_POOL))) goto not_ready; + mes "Gwendolyn takes an analyzing look at you. Then she noods."; + next; + + set @Q_hawkseye, 5; + callsub S_Update_Var; + mes "[Gwendolyn Bowmaker]"; + mes "\"Ok. You have made a great progress. I think you are ready for further tasks.\""; + next; + +game_explain: + mes "[Gwendolyn Bowmaker]"; + mes "\"As you might have noticed, it depends on many circumstances if your arrow finds its target. Your shot may be too powerful or too weak, so the arrow goes far beyond your target or hits the ground before it reaches its destination.\""; + next; + mes "\"The greater the distance to your target is, the more important is the strength and direction of the wind. Even if you are exploring a cave, there might be air flow caused by the corners in the cave.\""; + next; + mes "\"Ok, you can see that target over there? I will tell you how strong the wind blows and from which direction. Then you will try to hit the target by moving right or left and decide how powerful you want to shoot.\""; + next; + +state5: + // needed for the minigame: + set @wdX, 0; // wind direction x-coordinate, rand + set @wdY, 0; // wind direction y-coordinate, rand + // set @wp, 0; // windpower + set @spX, 0; // start position x-coordinate, player decision + // set @spY, 0; // start position y-coordinate, const + set @sp, 0; // shotpower, player decision + //set @targetX, 0; // target position, const + //set @targetY, 20; // target position, const + set @pointX, 0; // point the player hits, x-coordinate + set @pointY, 0; // point the player hits, y-coordinate + set @wdIndex, 0; + // + mes "[Gwendolyn Bowmaker]"; + mes "\"Show me what you can!\""; + next; + + menu + "Can you please explain the task again?", game_explain, + "I'm ready, let's start!", -, + "I'm sorry, I will come back later.", quit; + +game: + if (countitem("ForestBow") < 1) goto no_bow; + if (countitem("Arrow") < 1) goto no_arrows; + delitem "Arrow", 1; + mes "You go to the training field and stand exactly on the same level with the target. The target is located about 43 feet north of you.You take one arrow and look at Gwendolyn."; + next; + + // possibility for wdX and wdY to become zero is reduced, so windless status is less often + set @wdX, rand(9) - 4; + if (@wdX != 2 && @wdX !=-2) set @wdX, rand(9) - 4; + if (@wdX == 0) set @wdX, rand(9) - 4; + + set @wdY, rand(9) - 4; + if (@wdY != 2 && @wdY !=-2) set @wdY, rand(9) - 4; + if (@wdY == 0) set @wdY, rand(9) - 4; + + // wind direction array, where the wind blows to: + // 123 + // 456 + // 789 + //here is where the wind comes from, that's why it is the opposite. + setarray @wd$,"error1, please report", "southeast", "south", "southwest", "east", "error2, please report", "west", "northeast", "north", "northwest" ; + set @paramX, @wdX; + set @paramY, @wdY; + callsub S_getDirection; + set @wdIndex, @returnIndex; + + set @wp_sq, (@wdX * @wdX) + (@wdY * @wdY); + + if (@wp_sq == 0) goto wp0; + if (@wp_sq < 3) goto wp1; + if (@wp_sq < 9) goto wp2; + if (@wp_sq < 19) goto wp3; + goto wp4; + + +wp0: + mes "[Gwendolyn Bowmaker]"; + mes "\"You're lucky. It is windless now.\""; + next; + goto choose_start_pos; +wp1: + mes "[Gwendolyn Bowmaker]"; + mes "\"There is a slight breeze coming from "+ @wd$[@wdIndex] + ".\""; + next; + goto choose_start_pos; +wp2: + mes "[Gwendolyn Bowmaker]"; + mes "\"The wind is blowing from "+ @wd$[@wdIndex] + ".\""; + next; + goto choose_start_pos; +wp3: + mes "[Gwendolyn Bowmaker]"; + mes "\"Right now, there is a strong wind blowing from " + @wd$[@wdIndex] + ".\""; + next; + goto choose_start_pos; +wp4: + mes "[Gwendolyn Bowmaker]"; + mes "\"Here we have a squall from "+ @wd$[@wdIndex] + ".\""; + next; + goto choose_start_pos; + +choose_start_pos: + mes "Do you want to go to the left, the right or stay where you are?"; + next; + + menu + "I want to move left.", step_left, + "I go right.", step_right, + "I stay.", step_no, + "I will try it later.", quit; + +step_no: + set @spX, -1; + mes "You stay where you are.."; + next; + goto choose_shotpower; + +step_left: + mes "How many steps?"; + next; + menu + "1", step_left1, + "2", step_left2, + "3", step_left3, + "4", step_left4; +step_left1: + set @spX, -1; + mes "You take one step to the left."; + next; + goto choose_shotpower; +step_left2: + set @spX, -2; + mes "You take two steps to the left."; + next; + goto choose_shotpower; +step_left3: + set @spX, -3; + mes "You take three steps to the left."; + next; + goto choose_shotpower; +step_left4: + set @spX, -4; + mes "You take four steps to the left."; + next; + goto choose_shotpower; + +step_right: + mes "How many steps?"; + next; + menu + "1", step_right1, + "2", step_right2, + "3", step_right3, + "4", step_right4; +step_right1: + set @spX, 1; + mes "You take one step to the right."; + next; + goto choose_shotpower; +step_right2: + set @spX, 2; + mes "You take two steps to the right."; + next; + goto choose_shotpower; +step_right3: + set @spX, 3; + mes "You take three steps to the right."; + next; + goto choose_shotpower; +step_right4: + set @spX, 4; + mes "You take four steps to the right."; + next; + goto choose_shotpower; + +choose_shotpower: + mes "How powerfully do you want to shoot?"; + next; + + menu + "very weak shot", -, + "rather weak shot", -, + "weak shot", -, + "somewhat weak shot", -, + "medium shot", -, + "somewhat powerful shot", -, + "powerful shot", -, + "rather powerful shot", -, + "very powerful shot", -; + + // we have 9 menu entries, so scale @menu, which is in range 1-9, to a scale in -4 to +4 + set @sp, @menu - 5; + // calculate where you hit. You range is in [-8, 8] in X and Y as well + set @pointX, @wdX + @spX; + set @pointY, @wdY + @sp; + + if( @pointX==0 && @pointY==0 ) goto target_hit; + + //set @targethit to these numbers: + //1,2,3 for left above, above, right above, + //4,5,6 for left, hit, right + //7,8,9 for lower left, below, lower right; + setarray @target_direction$, "error3, please report", "left above", "above", "right above","left","error4, please report","right","lower left","below","lower right"; + + set @paramX , @pointX; + set @paramY , @pointY; + callsub S_getDirection; + set @targethit, @returnIndex; + + //now check how close + //get the distance squared: + // so it is in range 0 - 64: + // 0 is hit + // < 5 is very close + // <17 is close + // rest is a quite fucking shot + set @target_dist_sq, (@pointX * @pointX) + (@pointY*@pointY); + + if (@target_dist_sq < 5) goto target_veryclose; + if (@target_dist_sq < 17) goto target_close; + + //here are bad shots: + mes "[Gwendolyn Bowmaker]"; + mes "\"D'oh, what a terrible shot!\""; + next; + mes "\"Do you even know what a bow is?\""; + next; + mes "\"That was far "+@target_direction$[@targethit]+".\""; + next; + goto game; + +target_close: + mes "[Gwendolyn Bowmaker]"; + mes "\"That was "+@target_direction$[@targethit]+".\""; + next; + mes "\"I suggest some training.\""; + next; + goto game; + +target_veryclose: + mes "[Gwendolyn Bowmaker]"; + mes "\"That was quite close. Impressive!\""; + next; + mes "\"It was a little "+@target_direction$[@targethit]+".\""; + next; + mes "\"But you did not hit... have another try.\""; + next; + //like a coin toss: 2 possibilites, the same chance for both: + //if(0 == rand(2)) goto game; + mes "\"Hurry up, before the wind changes.\""; + next; + goto choose_start_pos; + +target_hit: + mes "[Gwendolyn Bowmaker]"; + mes "\"Wonderful! That was great! Directly hit the bull's eye!\""; + next; + mes "\"Seems like you did it!\""; + next; + mes "\"Let me inspect it...\" She walks to the target."; + next; + if( rand(500) > (2*readparam(bDex) + readparam(bAgi))) goto target_nohit; + set @Q_hawkseye, 6; + callsub S_Update_Var; + + setskill SKILL_MALLARDS_EYE, 1; + getexp @QUEST_HAWK_EXP, 0; + + mes "\"You proved that you are worthy to call yourself a graduate of the School of Archery.\""; + next; + mes "\"But remember, there is always something new to learn. And you should not let your training down in order to keep and improve your abilities.\""; + close; + +target_nohit: + mes "\"Ohh! Half a fingerbreadth aside.\""; + next; + mes "\"That is quite impressive, but you can perform better with more training.\""; + next; + goto game; + +state6: + mes "[Gwendolyn Bowmaker]"; + mes "\"You really have a reason to be proud.\""; + close; + +state1: + mes "[Gwendoly Bowmaker]"; + mes "\"Welcome back. Did you decide to follow the Way of Archery?\""; + next; + menu + "I want to become an archer!", fee, + "I am not interested", -; + +no_student: + mes "\"That's a pity. Well, if you change your mind, come back any time.\""; + set @Q_hawkseye, 1; + callsub S_Update_Var; + close; + +no_money: + mes "\"I am sorry, but it seems, that you don't have enough money. Come back, when you have reorganized your finances.\""; + set @Q_hawkseye, 1; + callsub S_Update_Var; + close; + +no_bow: + mes "\"As an archer, you should carry your bow always with you. Go and get it.\""; + close; + +bow_bought: + mes "\"You just bought it? You won't learn anything from that. To understand the nature of this bow, you have to collect the needed material by yourself. Only this way you will get a feeling of what it means to use such a weapon. \""; + next; + mes "\"The best thing would be to let you make the bow by yourself. But I guess, that would go to far. And it would take ages to get a high quality bow.\""; + next; + mes "\"Ok, go to Alan and come back with a bow made out of the logs you collected.\""; + close; + +not_enough_eggs: + mes "\"Maybe I should also give you a lesson in how to count? You haven't enough.\""; + close; + +not_ready: + mes "\"I am pleased about your progrees, but you are not ready for the next step yet. Go and do some more training, before you come back. Remember also: It is wise to speak with people you meet on your journey, there is always something new to learn.\""; + close; + +no_arrows: + mes "Gwendolyn sighs and shake her head."; + next; + mes "\"Another lecture: Take always enough arrows with you. Go and come back, when you are equipped adequately.\""; + close; + +quit: + close; + +S_Update_Var: + set QUEST_Forestbow_state, + (QUEST_Forestbow_state & ~(@Q_hawkseye_MASK) + | (@Q_hawkseye << @Q_hawkseye_SHIFT)); + return; + +S_getDirection: + // get @paramX @paramY as parameters + // returns an index where these parameters are in relation to origin + // 123 + // 456 whereas 5 is the origin. (3,6,9 there is paramX>0); (1,2,3 there is paramY>0) + // 789 + //first check the quadrants and after check more precisely + if(@paramX>0 && @paramY>0) set @returnIndex, 3; + if(@paramX>0 && @paramY<0) set @returnIndex, 9; + if(@paramX<0 && @paramY>0) set @returnIndex, 1; + if(@paramX<0 && @paramY<0) set @returnIndex, 7; + + //straight left + if ( (@paramX < 0) && (@paramY >= @paramX/2) && (-@paramY >= @paramX/2) ) set @returnIndex, 4; + + //straight right + if ( (@paramX > 0) && (@paramY <= @paramX/2) && (-@paramY <= @paramX/2) ) set @returnIndex, 6; + + //straight above + if ( (@paramY > 0) && (@paramX <= @paramY/2) && (-@paramX <= @paramY/2) ) set @returnIndex, 2; + + //straight below + if ( (@paramY < 0) && (@paramX >= @paramY/2) && (-@paramX >= @paramY/2) ) set @returnIndex, 8; + + //check the origin, because the origin is found by the "straight" lines as well. (should not, but is.. maybe a bug?) + if( @paramX==0 && @paramY==0 ) set @returnIndex, 5; + return; +} + +//////////////////////////////////// +// rand(X) returns a random number uniformly distributed between in range [0; X-1] +// +// A=rand(2) => (0,1) 50% for 0 50% for 1 +// B=rand(2) => (0,1) 50% for 0 50% for 1 +// C=rand(2) => (0,1) 50% for 0 50% for 1 +// D=rand(2) => (0,1) 50% for 0 50% for 1 +// +// A+B => 0+0, 1+0, 0+1, 1+1 => [0,1,2] 25% for 0 50 % for 1 25 % for 2 +// +// rand(3) => [0,1,2] 33% for 0 33% for 1 33% for 2 + + diff --git a/npc/018-1_Woodland_mining_camp/_import.txt b/npc/018-1_Woodland_mining_camp/_import.txt index 06c8a307..f682ead9 100644 --- a/npc/018-1_Woodland_mining_camp/_import.txt +++ b/npc/018-1_Woodland_mining_camp/_import.txt @@ -1,5 +1,6 @@ map: 018-1.gat npc: npc/018-1_Woodland_mining_camp/_mobs.txt npc: npc/018-1_Woodland_mining_camp/_warps.txt +npc: npc/018-1_Woodland_mining_camp/mike.txt npc: npc/018-1_Woodland_mining_camp/miners.txt npc: npc/018-1_Woodland_mining_camp/sword.txt diff --git a/npc/018-1_Woodland_mining_camp/mike.txt b/npc/018-1_Woodland_mining_camp/mike.txt new file mode 100644 index 00000000..7e0d296c --- /dev/null +++ b/npc/018-1_Woodland_mining_camp/mike.txt @@ -0,0 +1,22 @@ +018-1.gat,77,60,0 script Mike 113,{ + + mes "[Mike]"; + mes "\"I need black stingers to make some medicine to cure my sister.\""; + next; + + set @dq_level, 40; + set @dq_cost, 16; + set @dq_count, 4; + set @dq_name$, "BlackScorpionStinger"; + set @dq_friendly_name$, "black stingers"; + set @dq_money, 2500; + set @dq_exp, 500; + + callfunc "DailyQuest"; + + next; + + mes "\"Hopefully I'll have enough soon.\""; + close; + +} diff --git a/npc/018-2_Woodland_mining_camp/caul.txt b/npc/018-2_Woodland_mining_camp/caul.txt index cd166796..c0b84544 100644 --- a/npc/018-2_Woodland_mining_camp/caul.txt +++ b/npc/018-2_Woodland_mining_camp/caul.txt @@ -35,10 +35,11 @@ set @C_monster_oil, 20; set @C_mopox_cure, 21; set @C_nohmask, 22; - set @C_bye, 23; + set @C_dementiapotion, 23; + set @C_bye, 24; - setarray @choice$, "One", "Five", "Ten", "Fifty", "", "", "", ""; - setarray @choice_idx, 1, 5, 10, 50, 0, 0, 0, 0; + setarray @choice$, "One", "Five", "Ten", "Fifty", "", "", "", "", ""; + setarray @choice_idx, 1, 5, 10, 50, 0, 0, 0, 0, 0; set @choices_nr, 4; @@ -69,6 +70,15 @@ L_M_no_mopox_cure: L_M_no_inspector: + if (!(MAGIC_FLAGS & MFLAG_KNOWS_UNFOCUS_RECIPE)) + goto L_M_no_dempo; + + set @choice_idx[@choices_nr], @C_dementiapotion; + set @choice$[@choices_nr], "I would like to brew Dementia Potion"; + set @choices_nr, @choices_nr + 1; + +L_M_no_dempo: + set @choice_idx[@choices_nr], @C_bye; set @choice$[@choices_nr], "Never mind"; set @choices_nr, @choices_nr + 1; @@ -91,6 +101,8 @@ L_M_no_inspector: goto L_mopox_cure_start; if (@choice == @C_nohmask) goto L_NohMask; + if (@choice == @C_dementiapotion) + goto L_DemPotion; if (@choice == @C_bye) goto L_close; @@ -121,12 +133,12 @@ L_CraftLoop: if (@throw >= 5) set @result, 2; if (@throw >= 15) set @result, 3; if (@throw >= 35) set @result, 4; - + if (@result == 1) set @result1, @result1 + 1; if (@result == 2) set @result2, @result2 + 1; if (@result == 3) set @result3, @result3 + 1; if (@result == 4) set @result4, @result4 + 1; - + set @a, @a - 1; if (@a > 0) goto L_CraftLoop; @@ -259,7 +271,7 @@ L_monster_oil_start_brew: "blue", "purple", "green", - "gray"; + "gray"; set @intensity, 1; setarray @intensities$, @@ -691,6 +703,314 @@ L_mopox_cure_win: L_mopox_cure_win_quick: close; +L_DemPotion: + mes "[Caul]"; + mes "\"Ok, you do know this potion is one of the most dangerous potions brewed? My cauldron is empty, you can try it yourself.\""; + next; + mes "Caul goes three steps away and watches your actions carefully."; + menu + "Please explain me what you know about that potion.", L_explain_dempo, + "Ok, I will start brewing.", L_brew_dempo_init, + "Nevermind", -; + close; +L_explain_dempo: + mes "[Caul]"; + mes "\"Hrrm. I have heard of that potion. I hope I can remember all the stuff needed.\""; + next; + mes "\"Basically this potion is a balancing between death and life. You see a balance between knowlegde and forgetting.\""; + next; + mes "\"So to get it balanced, we need ingredients for both sides.\""; + next; + mes "\"For the death and forgetting side we can use bones. Although bones do not work good. Best results we would get with a diseased heart of zombies. Of course we can use undead ears and skulls as well.\""; + next; + mes "\"For the life side we can use fresh mauve herbs. But life stones would be even better. Roots will do as well. Although these must be really fresh to show effect.\""; + next; + mes "\"Brewing such a powerful potion is dangerous. That is why you will need to do it yourself. I will try to assist you as best as I can.\""; + next; + mes "\"I don't know exactly, but there is a slight chance of exploding all time.\""; + next; + mes "\"The color of the mixture will give you a quite good impression what you need to do.\""; + mes "\"And to get that potion working, we need to stabilize it with a pearl at the end\""; + next; + mes "\"Ah yes the color will be in a range of really dark black to bright shining white. In between it is grey in different nuances.\""; + mes "\"When it is calm grey, the finalisation with a pearl will work best, so I have heard.\""; + next; + goto L_DemPotion; + +L_brew_dempo_init: + if ((countitem("BottleOfWater") == 0) || (countitem("Bone") == 0) || (countitem("Lifestone") == 0) || (countitem("Pearl") == 0)) + goto L_dempo_noinit; + delitem "BottleOfWater", 1; + delitem "Bone", 1; + delitem "Lifestone", 1; + + set @finish_dempo, 0; + // color can be either black or white at the beginning. + // with a slight randomness in there. + set @dempo_color, rand(10); + if (rand(2)==0) + set @dempo_color, @dempo_color + 90 ; + mes "To start with that potion you put in the cauldron a bone, a bottle of water and a lifestone."; + next; + goto L_brew_dempo; + +L_dempo_noinit: + mes "[Caul]"; + mes "\"Hrrm. Usually you start that potion with a bone, a bottle of water and a lifestone.\""; + mes "\"I'd propose you do it exactly that way. You see maybe it would even work with a skull and a healing potion, but since we don't know, and I don't want to repair my cauldron again, please don't try other solutions.\""; + next; + mes "\"Please use only this way to start the recipe: a bone, a bottle of water and a lifestone. In this order!\""; + mes "\"Ah, and of course you will need at least one pearl with you. This pearl is needed to finalize the potion.\""; + close; + +L_brew_dempo: + callsub L_check_explosion; + + callsub L_calc_dempo_color; + mes "After a little while of cooking you see its color turning into " + @dempo_color_S$+ "."; + next; + + setarray @choice_idx, 0,0,0,0,0,0,0,0,0,0,0; + setarray @choice$, "","","","","","","","","","",""; + + set @C_root, 12; + set @C_mauve, 13; + set @C_lifestone, 14; + set @C_diseasedheart, 15; + set @C_bone, 16; + set @C_skull, 17; + set @C_undeadear, 18; + set @C_pearl, 19; + set @C_nevermind, 20; + + // counter of avalable answers + set @choices_nr, 0; + + if (countitem("Root") == 0) goto L_noroots; + set @choice_idx[@choices_nr], @C_root; + set @choice$[@choices_nr], "Add a root"; + set @choices_nr, @choices_nr + 1; +L_noroots: + if (countitem("MauveHerb") == 0) goto L_nomauve; + set @choice_idx[@choices_nr], @C_mauve; + set @choice$[@choices_nr], "Add a mauve herb"; + set @choices_nr, @choices_nr + 1; +L_nomauve: + if (countitem("Lifestone") == 0) goto L_nolifestone; + set @choice_idx[@choices_nr], @C_lifestone; + set @choice$[@choices_nr], "Add a lifestone"; + set @choices_nr, @choices_nr + 1; +L_nolifestone: + if (countitem("DiseasedHeart") == 0) goto L_noheart; + set @choice_idx[@choices_nr], @C_diseasedheart; + set @choice$[@choices_nr], "Add a diseased heart"; + set @choices_nr, @choices_nr + 1; +L_noheart: + if (countitem("Bone") == 0) goto L_nobone; + set @choice_idx[@choices_nr], @C_bone; + set @choice$[@choices_nr], "Add a bone"; + set @choices_nr, @choices_nr + 1; +L_nobone: + if (countitem("DiseasedHeart") == 0) goto L_noskull; + set @choice_idx[@choices_nr], @C_skull; + set @choice$[@choices_nr], "Add a skull"; + set @choices_nr, @choices_nr + 1; +L_noskull: + if (countitem("UndeadEar") == 0) goto L_noear; + set @choice_idx[@choices_nr], @C_undeadear; + set @choice$[@choices_nr], "Add an undead ear"; + set @choices_nr, @choices_nr + 1; +L_noear: + if (countitem("Pearl") == 0) goto L_nopearl; + set @choice_idx[@choices_nr], @C_pearl; + set @choice$[@choices_nr], "Finalize with a pearl."; + set @choices_nr, @choices_nr + 1; +L_nopearl: + set @choice_idx[@choices_nr], @C_nevermind; + set @choice$[@choices_nr], "Nevermind and leave"; + + menu + @choice$[0],-, + @choice$[1],-, + @choice$[2],-, + @choice$[3],-, + @choice$[4],-, + @choice$[5],-, + @choice$[6],-, + @choice$[7],-, + @choice$[8],-, + @choice$[9],-, + @choice$[10],-; + + set @menu, @menu - 1; + if (@choice_idx[@menu] == 0) + goto L_brew_dempo; + if ((countitem("Root") != 0) && (@choice_idx[@menu] == @C_root)) + goto L_useroot; + if ((countitem("MauveHerb") != 0) && (@choice_idx[@menu] == @C_mauve)) + goto L_usemauve; + if ((countitem("Lifestone") != 0) && (@choice_idx[@menu] == @C_lifestone)) + goto L_uselifestone; + if ((countitem("DiseasedHeart") != 0) && (@choice_idx[@menu] == @C_diseasedheart)) + goto L_usediseasedheart; + if ((countitem("Bone") != 0) && (@choice_idx[@menu] == @C_bone)) + goto L_usebone; + if ((countitem("Skull") != 0) && (@choice_idx[@menu] == @C_skull)) + goto L_useskull; + if ((countitem("UndeadEar") != 0) && (@choice_idx[@menu] == @C_undeadear)) + goto L_useear; + if ((countitem("Pearl") != 0) && (@choice_idx[@menu] == @C_pearl)) + goto L_usepearl; + if ((@choice_idx[@menu] == @C_nevermind)) + goto L_ask_quit; + + // fallthrough only when player remove the items while in menu, trying to cheat + // the potion will be lost then + mes "\"Do not try to betray me. Come back when you have a better morale.\""; + close; + +L_useroot: + delitem "Root", 1; + set @dempo_color, @dempo_color + 9 + rand(9); + goto L_brew_dempo; + +L_usemauve: + delitem "MauveHerb", 1; + set @dempo_color, @dempo_color + 1 + rand(2); + goto L_brew_dempo; + +L_uselifestone: + delitem "Lifestone", 1; + set @dempo_color, @dempo_color + 3 + rand(4); + goto L_brew_dempo; + +L_usediseasedheart: + delitem "DiseasedHeart", 1; + set @dempo_color, @dempo_color - 35 - rand(25); + goto L_brew_dempo; + +L_usebone: + delitem "Bone", 1; + set @dempo_color, @dempo_color - 3 - rand(3); + goto L_brew_dempo; + +L_useskull: + delitem "Skull", 1; + set @dempo_color, @dempo_color - 9 - rand(9); + goto L_brew_dempo; + +L_useear: + delitem "UndeadEar", 1; + set @dempo_color, @dempo_color - 15 - rand(13); + goto L_brew_dempo; + +L_usepearl: + delitem "Pearl", 1; + //ending it is a little dangerous as well, + // stay calm, when it smashes your fine tuned well done potion. + set @finish_dempo, 1; + callsub L_check_explosion; + // ok now you really did it. Here is your potion: + getitem "DementiaPotion",1; + + mes "[Caul]"; + mes "\"The potion is now ready. It seems as if it worked fine.\""; + next; + mes "\"Ok here is a flask of that potion. I'll care for the rest.\""; + mes "\"I mean it is a very dangerous fluid.\""; + next; + mes "\"See you later, alligator!\""; + close; + +L_ask_quit: + mes "[Caul]"; + mes "\"The potion is not ready. You can't just leave now!\""; + menu + "Please throw away that stupid potion, I'm in a hurry!", -, + "Oh you are right, let me finish it.", L_brew_dempo; + close; + +L_check_explosion: + // set to range [-50 50]; + set @prob, @dempo_color - 50; + + set @prob, ((@prob * @prob) / 80) + 4; + if (@finish_dempo == 0) + goto L_check_exp_nof; + + // square again, so you must be in the middle to get it work there; + // and multiply with 3 so there is definitly no chance to get it directly after starting + set @prob, (@prob * @prob) * 2; +L_check_exp_nof: + + //TODO remove next message: + mes "check explosion: + " +@prob +" / 1000"; + + // in about 95% of the cases anything is fine, so return. + if (rand(1000) > @prob) return; + // in some cases it is not: + // kabooom! + close2; + heal -(Hp/2), 0; + misceffect 5; + misceffect 16; + heal -Hp, 0; + end; + +L_calc_dempo_color: + // @dempo_color_S$ is set in here: + + //really dark black 0-11 + if (@dempo_color < 12) + set @dempo_color_S$, "really dark black"; + + //dark black 12-23 + if ((@dempo_color > 11) && (@dempo_color < 24)) + set @dempo_color_S$, "dark black"; + + //black 24-34 + if ((@dempo_color > 23) && (@dempo_color < 35)) + set @dempo_color_S$, "black"; + + //dark grey with little dark spots 35-41 + if ((@dempo_color > 34) && (@dempo_color < 42)) + set @dempo_color_S$, "dark grey with little dark spots"; + + //dark grey 42-47 + if ((@dempo_color > 41) && (@dempo_color < 48)) + set @dempo_color_S$, "dark grey"; + + //calm grey 48-52 + if ((@dempo_color > 47) && (@dempo_color < 53)) + set @dempo_color_S$, "calm grey"; + + //light grey 53-58 + if ((@dempo_color > 52) && (@dempo_color < 59)) + set @dempo_color_S$, "light grey"; + + //light grey with little light spots 59-65 + if ((@dempo_color > 58) && (@dempo_color < 66)) + set @dempo_color_S$, "light grey with little light spots"; + + //white 66-76 + if ((@dempo_color > 65) && (@dempo_color < 77)) + set @dempo_color_S$, "white"; + + //shining white 77-88 + if ((@dempo_color > 76) && (@dempo_color < 89)) + set @dempo_color_S$, "shining white"; + + //bright shining white 77-100 + if (@dempo_color > 88) + set @dempo_color_S$, "bright shining white"; + + return; + +L_NohMask: + mes "[Caul]"; + mes "\"I'm sorry, but I didn't. I'm staying in town. Try asking one of the miners.\""; + close; + L_close: close; @@ -699,9 +1019,4 @@ S_Update_Var: (QUEST_Forestbow_state & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; - -L_NohMask: - mes "[Caul]"; - mes "\"I'm sorry, but I didn't. I'm staying in town. Try asking one of the miners.\""; - close; } diff --git a/npc/019-1_Snow_field/_warps.txt b/npc/019-1_Snow_field/_warps.txt index 63b04561..1cc4b7ae 100644 --- a/npc/019-1_Snow_field/_warps.txt +++ b/npc/019-1_Snow_field/_warps.txt @@ -1,3 +1,6 @@ // 019-1 Snow field warps 019-1.gat,70,21 warp ToVillage 2,-1,020-1.gat,70,126 +019-1.gat,61,102 warp toRomanticPlace 2,-1,030-1.gat,60,29 +019-1.gat,96,40 warp toCave -1,-1,019-3.gat,98,27 +019-1.gat,38,75 warp toCave2 -1,-1,019-3.gat,40,97 diff --git a/npc/019-1_Snow_field/taro.txt b/npc/019-1_Snow_field/taro.txt index 3d1b4b03..f57e75e9 100644 --- a/npc/019-1_Snow_field/taro.txt +++ b/npc/019-1_Snow_field/taro.txt @@ -1,6 +1,6 @@ // Snow Taro -019-1.gat,57,61,0 script Taro 114,{ +//019-1.gat,57,61,0 script Taro 114,{ if (getequipid(equip_head) == 511 || getequipid(equip_head) == 1206) goto L_Santa; if (getequipid(equip_head) == 633) goto L_Elf; if (getequipid(equip_head) == 628) goto L_NearElf; diff --git a/npc/019-3_Snow_Cave/_import.txt b/npc/019-3_Snow_Cave/_import.txt new file mode 100644 index 00000000..728b994b --- /dev/null +++ b/npc/019-3_Snow_Cave/_import.txt @@ -0,0 +1,3 @@ +map: 019-3.gat +npc: npc/019-3_Snow_Cave/_mobs.txt +npc: npc/019-3_Snow_Cave/_warps.txt diff --git a/npc/019-3_Snow_Cave/_mobs.txt b/npc/019-3_Snow_Cave/_mobs.txt new file mode 100644 index 00000000..8d4e5d7c --- /dev/null +++ b/npc/019-3_Snow_Cave/_mobs.txt @@ -0,0 +1,19 @@ +// 019-3 Snow Cave mobs + +019-3.gat,0,0,0,0 monster Moggun 1061,10,100000,30000,Mob019-3::On1061 +019-3.gat,0,0,0,0 monster Bats 1017,50,100000,30000,Mob019-3::On1017 + + +019-3.gat,0,0,0 script Mob019-3 -1,{ +On1017: + set @mobID, 1017; + callfunc "MobPoints"; + break; + +On1061: + set @mobID, 1061; + callfunc "MobPoints"; + break; + + end; +} diff --git a/npc/019-3_Snow_Cave/_warps.txt b/npc/019-3_Snow_Cave/_warps.txt new file mode 100644 index 00000000..65c5dadc --- /dev/null +++ b/npc/019-3_Snow_Cave/_warps.txt @@ -0,0 +1,4 @@ +// 019-3 Snow Cave warps + +019-3.gat,40,99 warp WarpOutside1 -1,-1,019-1.gat,38,73 +019-3.gat,98,25 warp warpOutside2 -1,-1,019-1.gat,96,38 diff --git a/npc/020-1_Nivalis/KrickKrackKrock.txt b/npc/020-1_Nivalis/KrickKrackKrock.txt new file mode 100755 index 00000000..b3cc3dd8 --- /dev/null +++ b/npc/020-1_Nivalis/KrickKrackKrock.txt @@ -0,0 +1,121 @@ +// author: Lien +// reviewed by Pjotr Orial and Jenalya +//020-1.gat,82,82,0 script Criker 192, { + +L_Main: +//Var + + set @NPC_NAME$, "[Criker]"; + set @BET, 50; +//lots of array ;( + setarray @KRICK$, "Krick", "Krack", "Krock"; + setarray @ITEM_RAND, 613, 537, 631, 775, 703, 640, 641, 4006, 700; + setarray @ITEM_HEALTH, 684, 685, 686, 687; + +//ends of var + + mes @NPC_NAME$; + mes "\"Hello " + strcharinfo(0) + ", do you want to play Krick-Krack-Krock?\""; +L_Menu: + menu + "Let's start!", L_Start, + "What's this?", L_info, + "Well, not for the moment.", -; + close; +L_Start: + mes @NPC_NAME$; + mes "\"Well, how many do you want to bet?\""; + input @BET; + if(@BET < 50 ) goto L_poor; + if(@BET > 2000) goto L_Too_rich; + if(zeny < @BET) goto L_No_Money; + set zeny, zeny - @BET; + + + + set @NPC_KRICK, rand(2); + mes "\"Choose Krick, Krack or Krock.\""; + menu + @KRICK$[0], -, + @KRICK$[1], -, + @KRICK$[2], -; + + //menu = min 1 & not 0 so I change it + set @menu, @menu - 1; + + mes @NPC_NAME$; + mes "\" "+ @KRICK$[@NPC_KRICK] +"!\""; + if( @menu == @NPC_KRICK ) goto L_Work; + mes @NPC_NAME$; + mes "\"Too bad! You were not lucky!\""; + close; +L_Work: + mes @NPC_NAME$; + mes "\"Wow amazing... What kind of present do you want?\""; + menu + "Money!", L_Money, + "An item!", L_Item, + "Some healing potions would be cool!", L_Health_item; + close; + +L_Money: + mes @NPC_NAME$; + mes "\"Here is your money.\""; + set zeny, zeny + (@BET*2); + close; +L_Item: +//item +getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inv; + + if( @BET > 50) getitem @ITEM_RAND[rand(1)], 1; + if( @BET > 200) getitem @ITEM_RAND[1 + rand(1)], 1; + if( @BET > 500) getitem @ITEM_RAND[2 + rand(1)], 1; + if( @BET > 1000) getitem @ITEM_RAND[3 + rand(1)], 1; + if( @BET > 1200) getitem @ITEM_RAND[4 + rand(1)], 1; + if( @BET > 1500) getitem @ITEM_RAND[5 + rand(1)], 1; + if( @BET == 2000) getitem @ITEM_RAND[6 + rand(1)], 1; + mes @NPC_NAME$; + mes "\"Here it is !\""; + close; + +L_Health_item: +// health item +getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inv; + +if( @BET > 50) getitem @ITEM_HEALTH[rand(1)], 1; +if( @BET > 200) getitem @ITEM_HEALTH[ 1 +rand(1)], 1 + rand(1); +if( @BET > 500) getitem @ITEM_HEALTH[2 + rand(1)], 1 + rand(3); +if( @BET > 1000) getitem @ITEM_HEALTH[3], 2 + rand(1); +if( @BET > 1500) getitem @ITEM_HEALTH[3], 3 + rand(2); +if( @BET == 2000) getitem @ITEM_HEALTH[3], 5 + rand(10); + mes @NPC_NAME$; + mes "\"Here it is !\""; + close; + +L_Full_Inv: + mes @NPC_NAME$; + mes "\"What are you doing? You have so many stuff with you, you can't carry what you won. Ha, well, then I will keep it!\""; + close; + +L_poor: + mes @NPC_NAME$; + mes "\"Erm... if you want to play you HAVE to bet, and you can't bet "+ @BET +" gold pieces. You need at least 50gp.\""; + close; +L_Too_rich: + mes @NPC_NAME$; + mes "\"Mh... I have to bet too. How I'll get a present which is "+ @BET +"? No, that's too much.\""; + close; +L_No_Money: + mes @NPC_NAME$; + mes "\"Oh? You don't have "+ @BET +" gold pieces.\""; + close; +L_info: + mes @NPC_NAME$; + mes "\"Well, if you want to play Krick Krack Krock with me, you need to bet some money. We will both say a word (Krack, Krick or Krock). If we say the same, you can win the double of your money or an item worth of what you bet. \""; + next; + mes "\"So, do you want to play? \""; + goto L_Menu; +} + diff --git a/npc/020-1_Nivalis/_import.txt b/npc/020-1_Nivalis/_import.txt index 4b64cf8d..3937f4ff 100644 --- a/npc/020-1_Nivalis/_import.txt +++ b/npc/020-1_Nivalis/_import.txt @@ -1,6 +1,8 @@ map: 020-1.gat +npc: npc/020-1_Nivalis/KrickKrackKrock.txt npc: npc/020-1_Nivalis/_mobs.txt npc: npc/020-1_Nivalis/_warps.txt npc: npc/020-1_Nivalis/mapflags.txt +npc: npc/020-1_Nivalis/rockscissor.txt npc: npc/020-1_Nivalis/soul-menhir.txt -npc: npc/020-1_Nivalis/startrek.txt +npc: npc/020-1_Nivalis/well.txt diff --git a/npc/020-1_Nivalis/_warps.txt b/npc/020-1_Nivalis/_warps.txt index c9578dfc..a8e5b772 100644 --- a/npc/020-1_Nivalis/_warps.txt +++ b/npc/020-1_Nivalis/_warps.txt @@ -7,3 +7,5 @@ 020-1.gat,64,82 warp toInn -1,-1,020-2.gat,111,31 020-1.gat,86,46 warp toWeaponShop -1,-1,020-2.gat,32,72 020-1.gat,56,90 warp ToPotionsShop -1,-1,020-2.gat,66,25 +020-1.gat,70,127 warp toSnowField 2,-1,019-1.gat,70,22 +020-1.gat,107,55 warp toPort -1,-1,031-1.gat,38,55 diff --git a/npc/020-1_Nivalis/mapflags.txt b/npc/020-1_Nivalis/mapflags.txt index b96ea2f6..203cf649 100644 --- a/npc/020-1_Nivalis/mapflags.txt +++ b/npc/020-1_Nivalis/mapflags.txt @@ -1,7 +1,2 @@ -// - -019-1.gat mapflag nosave 009-1,54,39; -020-1.gat mapflag nosave 009-1,54,39; -020-2.gat mapflag nosave 009-1,54,39; -020-3.gat mapflag nosave 009-1,54,39; -020-4.gat mapflag nosave 009-1,54,39; +020-1.gat mapflag no_player_drops +020-1.gat mapflag town diff --git a/npc/020-1_Nivalis/rockscissor.txt b/npc/020-1_Nivalis/rockscissor.txt new file mode 100755 index 00000000..d4a9d6f6 --- /dev/null +++ b/npc/020-1_Nivalis/rockscissor.txt @@ -0,0 +1,96 @@ +// author: Lien +// reviewed by Pjotr Orial and Jenalya +//##################################### +//== NPC [Player] # +// anyone want to do a funny bet # +// ------------------------ # +// Rock-Paper-Scissors can be playing # +// I hope that'll make fun # +// ------------------------ # +//##################################### + +//020-1.gat,74,78,0 script Gobmel 189, { + //var + set @NPC_name$, "[Gobmel]"; + set @NPC_point, 0; + set @PC_point, 0; + set @gamblerun, 0; + setarray @CHOOSE_PC$, "Scissors", "Paper", "Rock"; + setarray @CHOSE_ID, 0, 1, 2; + //0 : scissors; 1: Paper; 2: Rock; + // 0 cut 1 and 1 cover 3 and break 0 ... + //var ends + + mes @NPC_name$; + mes "\"Hello " + strcharinfo(0) + "! Do you want to do a little party of Rock-Paper-Scissors and bet some gold?\""; + menu + "Yes, I want.", L_RPS, + "Well, maybe later.", -; + close; + +L_RPS: + + mes @NPC_name$; + mes "\"How much money do you want to bet?\""; + input @MONEY_BET; + if(zeny < @MONEY_BET) goto L_poor; + set zeny, zeny - @MONEY_BET; + +L_Start: + if(@gamblerun == 3) goto L_finish; + //what chose the NPC ? + + set @CHOOSE_NPCID, rand(2); + + mes @NPC_name$; + mes "[ " + @gamblerun + "/3 ]"; + mes "\"1... 2... 3...\""; + mes ""; + mes"[chose what sign you do]"; + mes ""; + menu + @CHOOSE_PC$[0], -, + @CHOOSE_PC$[1], -, + @CHOOSE_PC$[2], -; + + set @CHOSEN, @menu -1; + mes "Gobmal: " + @CHOOSE_PC$[@CHOOSE_NPCID]; + mes strcharinfo(0)+" " + strcharinfo(0)+ ": " +@CHOOSE_PC$[@CHOSEN]; + mes ""; + if(@CHOSEN == @CHOOSE_NPCID) goto L_Start; + if(@CHOSEN == 0 && @CHOOSE_NPCID == 2) goto L_Lost; + if(@CHOSEN == 1 && @CHOOSE_NPCID == 0) goto L_Lost; + if(@CHOSEN == 2 && @CHOOSE_NPCID == 1) goto L_Lost; +L_Win: + set @PC_point, @PC_point + 1; + set @gamblerun, @gamblerun + 1; + mes "Oh no! I have lost."; + mes ""; + next; + goto L_Start; + +L_poor: + mes @NPC_name$; + mes "\"Go away from me...\""; + close; + +L_Lost: + set @NPC_point, @NPC_point + 1; + set @gamblerun, @gamblerun + 1; + mes "I have won!"; + mes ""; + next; + goto L_Start; + +L_finish: + if(@PC_point > @NPC_point ) goto L_Won; + mes @NPC_name$; + mes "\"Nice! I have won, give me your gp!\""; + close; +L_Won: + mes @NPC_name$; + mes "\"Here is my money.\""; + set zeny, zeny + @MONEY_BET*2; + close; +} + diff --git a/npc/020-1_Nivalis/soul-menhir.txt b/npc/020-1_Nivalis/soul-menhir.txt index 1569d0d6..ee973170 100644 --- a/npc/020-1_Nivalis/soul-menhir.txt +++ b/npc/020-1_Nivalis/soul-menhir.txt @@ -2,9 +2,9 @@ 020-1.gat,64,89,0 script Soul Menhir 144, { callfunc "ClearVariables"; - set @map$, "009-1.gat"; - setarray @Xs, 52, 53, 54, 52, 54, 52, 54; - setarray @Ys, 39, 39, 39, 40, 40, 41, 41; + set @map$, "020-1.gat"; + setarray @Xs, 63, 64, 65, 63, 65, 63, 65; + setarray @Ys, 88, 88, 88, 89, 89, 90, 90; set @x, 0; set @y, 0; callfunc "SoulMenhir"; diff --git a/npc/020-1_Nivalis/startrek.txt b/npc/020-1_Nivalis/startrek.txt deleted file mode 100644 index 5c8847ad..00000000 --- a/npc/020-1_Nivalis/startrek.txt +++ /dev/null @@ -1,20 +0,0 @@ -// - -020-1.gat,79,77,0 script Kirk 133,{ - mes "[Capt. Kirk]"; - mes "\"Spock: We're breaking the prime directive."; - mes "This is not the right way to have the first contact.\""; - close; -} - -020-1.gat,81,77,0 script Spock 134,{ - mes "[Spock]"; - mes "\"Live long and prosper captain.\""; - next; - - mes "[Spock]"; - mes "\"trr...Spock to Scotty..."; - mes "Beam me to the elves village..."; - mes "I will hide there.\""; - close; -} diff --git a/npc/020-1_Nivalis/well.txt b/npc/020-1_Nivalis/well.txt new file mode 100755 index 00000000..ed025a0f --- /dev/null +++ b/npc/020-1_Nivalis/well.txt @@ -0,0 +1,119 @@ +//############################################ +//# NPC Well & Miler +//# Authors: Lien, PjotrOrial +//# Review: +//# +//# There is someone in the well. This can be found out by throwing some stuff +//# in there. +//# +//# When the npc in the well is detected they can be rescued by asking Miler +//# for help. +//# +//# The experience reward given by Miler is 111 * Baselevel +//# +//# used variables: QUEST_Nivalis_state Nibble4 +//############################################ + +020-1.gat,99,83,0 script #Well 127, { + + set @Q_MASK, NIBBLE_4_MASK; + set @Q_SHIFT, NIBBLE_4_SHIFT; + set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT; + +if(@Q_status == 2) goto L_Finished; + set @item_ID, 0; + setarray @quote_item$, "Yuck! Who has thrown that on me?","Ouch! Who hurts me?","White powder!? What's going on up there?","Ahw! It's raining ","","",""; + + mes "..."; + menu "Throw something in the well.", L_trew, + "Leave it alone.", -; + close; + +L_trew: + mes "What do you want to throw?"; + menu "Maggot slime", -, + "A raw log", -, + "Pile of ash", -, + "Bottle of water", -, + "Leave it alone", L_Close; + + set @menu, @menu - 1; + + // little IF to do @quote$ & @Item_ID + set @quote$, @quote_item$[@menu]; + if(@menu == 0) set @item_ID, 505; + if(@menu == 1) set @item_ID, 569; + if(@menu == 2) set @item_ID, 701; + if(@menu == 3) set @item_ID, 541; + + if(countitem(@item_ID) < 1) goto L_NO_ITEM; + if(@menu == 3) getitem 540, 1; + delitem @item_ID, 1; + + mes "[Mysterious voice inside the well]"; + mes "\" "+ @quote$ +"\""; + next; + menu + "Who are you?", -, + "How did you get there?", -, + "Do you need help?", -; + + set @menu, @menu - 1; + if(@menu == 0) set @quote$, "I'll talk about who I am after leaving the well."; + if(@menu == 1) set @quote$, "Well, someone has pushed me in the well, I don't know who did that."; + if(@menu == 2) set @quote$, ""; + mes "[Mysterious voice inside the well]"; + mes "\" "+ @quote$ +". So if you can call help for me... please do so!\""; + set @Q_status, 1; + callsub S_Update_Var; + close; + +L_NO_ITEM: + mes "You don't have such an item... Come back when you have it."; + close; + +L_Finished: + mes "This is a well."; + close; + +L_Close: + close; + +S_Update_Var: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_MASK) + | (@Q_status << @Q_SHIFT)); + return; +} + +020-2.gat,100,28,0 script Miler 100, { + set @Q_MASK, NIBBLE_4_MASK; + set @Q_SHIFT, NIBBLE_4_SHIFT; + set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT; + + mes "[Miler]"; + mes "\"Hello!\""; + if(@Q_status == 2) close; + if(@Q_status == 1) + menu + "Hello.", -, + "Hello, Can you help me?", L_HELP; + close; +L_HELP: + mes "[Miler]"; + mes "\"What's the problem?\""; + menu "Someone has fallen in the well.", -; + mes "[Miler]"; + mes "\"Ho! I'll help him!\""; + getexp (BaseLevel * 111), 0; + set @Q_status, 2; + callsub S_Update_Var; + close; + +S_Update_Var: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_MASK) + | (@Q_status << @Q_SHIFT)); + return; +} + diff --git a/npc/020-2_Nivalis/_import.txt b/npc/020-2_Nivalis/_import.txt index 807bc1a0..04feb1ae 100644 --- a/npc/020-2_Nivalis/_import.txt +++ b/npc/020-2_Nivalis/_import.txt @@ -1,6 +1,6 @@ map: 020-2.gat npc: npc/020-2_Nivalis/_mobs.txt npc: npc/020-2_Nivalis/_warps.txt +npc: npc/020-2_Nivalis/baktar.txt npc: npc/020-2_Nivalis/mapflags.txt npc: npc/020-2_Nivalis/shops.txt -npc: npc/020-2_Nivalis/taro.txt diff --git a/npc/020-2_Nivalis/baktar.txt b/npc/020-2_Nivalis/baktar.txt new file mode 100755 index 00000000..410e4c33 --- /dev/null +++ b/npc/020-2_Nivalis/baktar.txt @@ -0,0 +1,388 @@ +//#========================= +//#== NPC Baktar +//# Authors: Lien, PjotrOrial +//# Review: BigCrunch, Mistakes, Jenalya +//# This NPC has two stages: +//# +//# In the first stage you need to bring 7 different items, but only one of each kind. +//# +//# In the second stage he tells you what hard life he is living. He will be very aggressive telling you some stuff. +//# He will send you to kill Scroticular. That npc will be located in the labyrinth caves. +//# (its a mob actually, to be spawned only, if the players knows his name and his location) +//# +//# variables used: +//# @QUEST_Nivalis_state: NIBBLE0, NIBBLE1, NIBBLE2, NIBBLE3: +//# BYTE0 ( == NIBBLE0 | NIBBLE1) stores in each bit information if that item was already brought. +//# bits: +//# bit 0 if you have met the npc already +//# bit 1 Desert Hat +//# bit 2 Desert Shirt +//# bit 3 Serf Hat +//# bit 4 tongue_Item +//# bit 5 eggs_Item +//# bit 6 skin_Item +//# bit 7 bugleg +//# NIBBLE2 store the progress after the item collecting stage: +//# =0 he will thank you for bringing all stuff. +//# =1 talking about his youth +//# =2 talking, you get the mission to hunt down Scroticular +//# =3 you get information where Scroticular can be found. +//# NIBBLE3 a bitmasking nibble for stage 2 again +//# bit 0 knows the name/location of the opponent +//# bit 1 killed the ugly opponent +//#========================= +020-2.gat,70,61,0 script Baktar 191,{ + set @npcname$, "[Baktar]"; + + set @Q_MASK, BYTE_0_MASK; + set @Q_SHIFT, BYTE_0_SHIFT; + set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT; + + set @Q_MASK2, NIBBLE_2_MASK; + set @Q_SHIFT2, NIBBLE_2_SHIFT; + set @Q_status2, ((QUEST_Nivalis_state) & @Q_MASK2) >> @Q_SHIFT2; + + set @Q_MASK2_BITS, NIBBLE_3_MASK; + set @Q_SHIFT2_BITS, NIBBLE_3_SHIFT; + set @Q_status2_bits, ((QUEST_Nivalis_state) & @Q_MASK2_BITS) >> @Q_SHIFT2_BITS; + + // if all bits are set, you brought him everything! Now we continue in Phase 2 of this npc. + // this is not ready yet, so do not enable that stage + // if(@Q_status == @Q_MASK) goto L_2_init; + + set @BIT_KNOWHIM, 0; + + set @BIT_DESERTHAT,1; + set @MONEY_DESERTHAT, 1500; + set @XP_DESERTHAT, 500; + + set @BIT_DESERTSHIRT,2; + set @MONEY_DESERTSHIRT, 1500; + set @XP_DESERTSHIRT, 600; + + set @BIT_SERFHAT,3; + set @MONEY_SERFHAT, 800; + set @XP_SERFHAT, 350; + + set @BIT_MS_TONGUE,4; + set @MONEY_MS_TONGUE, 800; + set @XP_MS_TONGUE, 350; + + set @BIT_MS_EGG,5; + set @MONEY_MS_EGG, 800; + set @XP_MS_EGG, 350; + + set @BIT_SNAKESKIN,6; + set @MONEY_SNAKESKIN, 800; + set @XP_SNAKESKIN, 350; + + set @BIT_BUGLEG,7; + set @MONEY_BUGLEG, 20; + set @XP_BUGLEG, 130; + + if(sex) + set @type$, "man"; + if(!sex) + set @type$, "woman"; + + if(@Q_status & (1<<@BIT_KNOWHIM)) goto L_KnowAlready; + mes @npcname$; + mes "\"Hello, " + @type$ + ", did you come from Tulimshar? Because you have a nice tan. \""; + menu + "Yes, I'm from Tulimshar", L_exotic, + "Well, I just like sunbathing", -, + "Good bye", -; + close; + +L_KnowAlready: + mes @npcname$; + mes "\"I love Tulimshar's stuff. I'm collecting souvenirs from Tulimshar to help remind me of all the great times I had there. If you give me an interesting item from the area, I'll give you a nice reward. So, you have a new item?\""; + goto L_startitem; +close; + +L_exotic: + mes @npcname$; + mes "\"I said that because I love Tulimshar's stuff...I'm collecting souvenirs from Tulimshar to help remind me of all the great times I had there. If you give me an interesting item maybe I can give you a nice reward. But I don't need a lot, I just need one of each item.\""; + menu "I have some items on me maybe you'll like them ", L_startitem, + "Don't touch my stuff!", -, + "I'll get them. Bye.", -; + close; + +L_startitem: + setarray @exotic_item$, "", "", "", "", "", "", ""; + set @c, 0; + set @Q_status, @Q_status | (1<<@BIT_KNOWHIM); + callsub S_Update_Var; + if (countitem("DesertHat") < 1 || @Q_status & (1<<@BIT_DESERTHAT) ) goto L_DesertShirt; + set @exotic_item$[@c], "a Desert Hat ?"; + set @menuid[@c], 0; + set @c, @c + 1; + +L_DesertShirt: + if (countitem("DesertShirt") < 1 || @Q_status & (1<<@BIT_DESERTSHIRT) ) goto L_SerfHat; + set @exotic_item$[@c], "a Desert Shirt ?"; + set @menuid[@c], 1; + set @c, @c + 1; + +L_SerfHat: + if (countitem("SerfHat") < 1 || @Q_status & (1<<@BIT_SERFHAT) ) goto L_tongue; + set @exotic_item$[@c], "a Serf Hat ?"; + set @menuid[@c], 2; + set @c, @c + 1; + +L_tongue: + if (countitem("MountainSnakeTongue") < 1 || @Q_status & (1<<@BIT_MS_TONGUE)) goto L_egg; + set @exotic_item$[@c], "a Mountain Snake Tongue ?"; + set @menuid[@c], 3; + set @c, @c + 1; + +L_egg: + if (countitem("MountainSnakeEgg") < 1 || @Q_status & (1<<@BIT_MS_EGG)) goto L_Skin; + set @exotic_item$[@c], "a Mountain Snake Egg?"; + set @menuid[@c], 4; + set @c, @c + 1; + +L_Skin: + if (countitem("SnakeSkin") < 1 || @Q_status & (1<<@BIT_SNAKESKIN)) goto L_bugleg; + set @exotic_item$[@c], "a Snake Skin?"; + set @menuid[@c], 5; + set @c, @c + 1; + +L_bugleg: + if (countitem("BugLeg") < 1 || @Q_status & (1<<@BIT_BUGLEG)) goto L_NeverMind; + set @exotic_item$[@c], "a Bug Leg?"; + set @menuid[@c], 6; + set @c, @c + 1; + +L_NeverMind: + set @exotic_item$[@c], "Nevermind"; + set @menuid[@c], 6; +//menu for the item + menu + @exotic_item$[0], -, + @exotic_item$[1], -, + @exotic_item$[2], -, + @exotic_item$[3], -, + @exotic_item$[4], -, + @exotic_item$[5], -, + @exotic_item$[6], -; + + set @menu, @menu -1; + + if (@menuid[@menu] == 0) goto L_DesertHat_Item; + if (@menuid[@menu] == 1) goto L_DesertShirt_Item; + if (@menuid[@menu] == 2) goto L_SerfHat_Item; + if (@menuid[@menu] == 3) goto L_tongue_Item; + if (@menuid[@menu] == 4) goto L_egg_Item; + if (@menuid[@menu] == 5) goto L_skin_Item; + if (@menuid[@menu] == 6) goto L_BugLegItem; +//if Never mind + mes @npcname$; + mes "\"Ok, goodbye then.\""; + close; +L_DesertHat_Item: + if(@Q_status & (1<<@BIT_DESERTHAT)) goto L_havealready; + if (countitem("DesertHat") < 1) goto L_Noitem; + delitem "DesertHat", 1; + set zeny, zeny + @MONEY_DESERTHAT; + getexp @XP_DESERTHAT,0; + set @Q_status, @Q_status | (1<<@BIT_DESERTHAT); + callsub S_Update_Var; + close; +L_DesertShirt_Item: + if(@Q_status & (1<<@BIT_DESERTSHIRT)) goto L_havealready; + if (countitem("DesertShirt") < 1) goto L_Noitem; + delitem "DesertShirt", 1; + set zeny, zeny + @MONEY_DESERTSHIRT; + getexp @XP_DESERTSHIRT,0; + set @Q_status, @Q_status | (1<<@BIT_DESERTSHIRT); + callsub S_Update_Var; + close; +L_SerfHat_Item: + if(@Q_status & (1<<@BIT_SERFHAT)) goto L_havealready; + if (countitem("SerfHat") < 1) goto L_Noitem; + delitem "SerfHat", 1; + set zeny, zeny + @MONEY_SERFHAT; + getexp @XP_SERFHAT,0; + set @Q_status, @Q_status | (1<<@BIT_SERFHAT); + callsub S_Update_Var; + close; +L_tongue_Item: + if(@Q_status & (1<<@BIT_MS_TONGUE)) goto L_havealready; + if (countitem("MountainSnakeTongue") < 1) goto L_Noitem; + delitem "MountainSnakeTongue", 1; + set zeny, zeny + @MONEY_MS_TONGUE; + getexp @XP_MS_TONGUE,0; + set @Q_status, @Q_status | (1<<@BIT_MS_TONGUE); + callsub S_Update_Var; +close; +L_egg_Item: + if(@Q_status & (1<<@BIT_MS_EGG)) goto L_havealready; + if (countitem("MountainSnakeEgg") < 1) goto L_Noitem; + delitem "MountainSnakeEgg", 1; + set zeny, zeny + @MONEY_MS_EGG; + getexp @XP_MS_EGG,0; + set @Q_status, @Q_status | (1<<@BIT_MS_EGG); + callsub S_Update_Var; +close; +L_skin_Item: + if(@Q_status & (1<<@BIT_SNAKESKIN)) goto L_havealready; + if (countitem("SnakeSkin") < 1) goto L_Noitem; + delitem "SnakeSkin", 1; + set zeny, zeny + @MONEY_SNAKESKIN; + getexp @XP_SNAKESKIN,0; + set @Q_status, @Q_status | (1<<@BIT_SNAKESKIN); + callsub S_Update_Var; +close; +L_BugLegItem: + if(@Q_status & (1<<@BIT_BUGLEG)) goto L_havealready; + if (countitem("BugLeg") < 1) goto L_Noitem; + delitem "BugLeg", 1; + set zeny, zeny + @MONEY_BUGLEG; + getexp @XP_BUGLEG,0; + set @Q_status, @Q_status | (1<<@BIT_BUGLEG); + callsub S_Update_Var; +close; + +L_Noitem: + mes @npcname$; + mes "\"Well, if you happen to get items from Tulimshar, see me first before you sell anything.\""; + close; + +L_havealready: + mes @npcname$; + mes "\"I already collected what you can offer me.\""; + close; + +S_Update_Var: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_MASK) + | (@Q_status << @Q_SHIFT)); + return; + + + +//# The following stage is completely cutoff the first. +//# So there is no linking between the upper and lower part, except for one goto at the very beginning +// + +L_2_init: + +//# NIBBLE3 a bitmasking nibble for stage 2 again +//# bit 0 knows the name of the opponent +//# bit 1 killed the ugly opponent + set @BIT_KNOWS_NAME, 0; + set @BIT_KILLED_HIM, 1; + + if (@Q_status2 == 1) goto L_2_talk1; + if (@Q_status2 == 2) goto L_2_talk2; + if (@Q_status2 == 3) goto L_2_talk3; + if (@Q_status2 == 4) goto L_2_talk4; + // fall through @Q_status2==0: + // need to thank for bringing all stuff. + mes @npcname$; + mes "\"Thanks a lot for bringing me all this nice stuff!\""; + next; + mes "\"That helps me a lot. You see over there is already another set I collected: There are some pieces of the Hurnscald town. That sign there has been stolen from the inn.\""; + next; + mes "\"But do not tell anyone, please! I really like collecting things. And that sign is one of the first things I organized.\""; + next; + mes "\"So thank you for bringing me that stuff for my desert collection\""; + next; + mes "\"Do you have an idea how to arrange that to make it cool looking for my admirers?\""; + next; + set @Q_status2, 1; + callsub S_Update_Var2; + close; + +L_2_talk1: + mes @npcname$; + mes "\"In my childhood I was called a packrat, because I collected old cans.\""; + next; + mes "\"But everybody does collect things right?\""; + next; + mes "\"So after I had collected way over 1000 cans, I started collecting snail-shells. Nice? Do you like that?\""; + next; + mes "\"Not many people like me. And I don't know why. It is nice to talk about such nice things. What did you collect in your childhood?\""; + next; + mes "He picks in his nose"; + next; + mes @npcname$; + mes "\"Ok erm, talk to you later.\""; + next; + mes "\"Ok.\""; + set @Q_status2, 2; + callsub S_Update_Var2; + close; + +L_2_talk2: + mes @npcname$; + mes "\"Could you do me a favor? This ugly guy, who always attacked me....\""; + next; + mes "\"*sob*\""; + next; + mes "\"I was always bullied by him. You know in the early childhood we were very nice friends. We played some roleplaying. He was the captain, and I was the soldier."; + next; + mes "\"Or another day he was the chieftain and I was the redskin.\""; + next; + mes "\"but to tell you the truth, HE was ALWAYS the one who directed me.\""; + next; + mes "\"I DO NOT LIKE THAT!\""; + next; + mes "\"I WANT TO BE THE LEADER!\""; + next; + mes "\"STOP HIM DOING NASTY THINGS\""; + next; + mes "\"I WANT YOU TO KILL THAT BASTARD!!\""; + set @Q_status2, 3; + callsub S_Update_Var2; + close; + +L_2_talk3: + menu "Ok, I am a professional in doing such things", L_2_professional, + "Hey do you really mean it? ", L_2_professional, + "You calmed down again?", -, + "Oh a packrat! By the way, is that trash over there yours?", L_2_name, + "Nevermind", -; + mes @npcname$; + mes "\"Get out of my way, prank!\""; + close; + +L_2_professional: + mes @npcname$; + mes "\"What are you talking about?\""; + goto L_2_talk3; + +L_2_name: + mes @npcname$; + mes "\"ONE DAY I WILL GET A HUGE REVENGE!\""; + next; + mes "\"AND I MEAN IT!\""; + next; + mes "\"You see I am a dangerous killer. Last week I killed five slimes and a pinkie!\""; + next; + mes "He takes out a piece of paper... mumbling"; + mes "\"Ok Scroticular first, and then ...\""; + set @Q_status2, 4; + set @Q_status2_bits, @Q_status2_bits | (1<<@BIT_KNOWS_NAME); + callsub S_Update_Var2; + + mes @npcname$; + mes "\"What is your name again?\""; + + menu "I am sorry for the joke... Please forgive me", -, + "They call me Mistakes. I am a professional killer as well. You heard about that business in the terranite cave?", -; + mes @npcname$; + mes "\"Alright, I see. Ok maybe I really need to calm down. Please let me alone... I will try to calm down, ok?\""; + close; + +S_Update_Var2: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_MASK2) + | (@Q_status2 << @Q_SHIFT2)); + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_MASK2_BITS) + | (@Q_status2_bits << @Q_SHIFT2_BITS)); + return; +} + diff --git a/npc/020-2_Nivalis/shops.txt b/npc/020-2_Nivalis/shops.txt index f1b452b5..1d863a00 100644 --- a/npc/020-2_Nivalis/shops.txt +++ b/npc/020-2_Nivalis/shops.txt @@ -3,7 +3,7 @@ // Clothes shop 020-2.gat,27,26,0 shop Taylor 137,523:2000,524:1600,543:800,544:5000,546:10000,586:1000,741:-1 // Weapons shop -020-2.gat,25,65,0 shop Bracco 135,1201:50,521:1000,522:100,545:20000,529:5 +020-2.gat,25,65,0 shop Bracco 135,1201:50,521:1000,522:100,529:5,530:-1 // Potions shop 020-2.gat,75,26,0 shop Mede 103,501:50,502:70,567:500,568:500 @@ -13,9 +13,9 @@ set @cost, 100; mes "[" + @npcName$ + "]"; - mes "\"Welcome strangers."; - mes "What? You've already seen an INN like mine?"; - mes "That's impossible!\""; + mes "\"Welcome stranger!\""; + mes "\"What? You've already seen an INN like mine?\""; + mes "\"That's impossible!\""; next; callfunc "Inn"; close; diff --git a/npc/020-3_Ice_cave/_warps.txt b/npc/020-3_Ice_cave/_warps.txt index 51539391..3b4babf7 100644 --- a/npc/020-3_Ice_cave/_warps.txt +++ b/npc/020-3_Ice_cave/_warps.txt @@ -1,4 +1,9 @@ // 020-3 Ice cave warps 020-3.gat,31,25 warp toOutside -1,-1,020-1.gat,76,37 -020-3.gat,25,22 warp toIceCave2 -1,-1,020-4.gat,36,34 +020-3.gat,25,22 warp toRightLowerCave -1,-1,020-3.gat,97,101 +020-3.gat,97,99 warp toLeftUpperCave -1,-1,020-3.gat,25,24 +020-3.gat,28,57 warp toLeftLowerCave -1,-1,020-3.gat,33,100 +020-3.gat,49,33 warp ToRightUpperCave -1,-1,020-3.gat,110,55 +020-3.gat,33,98 warp toLeftUpperCave -1,-1,020-3.gat,28,54 +020-3.gat,110,57 warp ToLeftUpperCave -1,-1,020-3.gat,49,35 diff --git a/npc/021-2_Tulimshar/bakery.txt b/npc/021-2_Tulimshar/bakery.txt index 2fb5d110..18219a82 100644 --- a/npc/021-2_Tulimshar/bakery.txt +++ b/npc/021-2_Tulimshar/bakery.txt @@ -18,19 +18,19 @@ L_lace_chococake: menu "Thanks! Let me have a look around...", L_end, - "Can you put this potion into a chocolate cake?", -, + "Can you put this potion into a [Chocolate Cake]?", -, "Goodbye!", L_end; mes "[Riskim]"; - mes "As you show him the potion, Riskim leans back, away from it."; + mes "As you show Riskim the potion, he leans back, away from it."; mes "\"Ooooh, I remember that smell...\""; mes "\"Elanore's Mopox potion, right? She made me drink that, too...\""; mes "He chuckles."; - mes "\"Yes, well, you do want to hide that.\""; + mes "\"Yes, well, you do want to hide that somehow.\""; next; mes "[Riskim]"; - mes "\"We'll need extra chocolate for that one. If you can give me ten pieces of chocolate and that potion, plus 400 GP, I will bake you a special chocolate cake that hides the taste.\""; + mes "\"We'll need extra chocolate for that one. If you can give me ten pieces of chocolate and that potion, plus 400 GP, I will bake you a special [Chocolate Cake] that hides the taste.\""; next; menu @@ -50,9 +50,9 @@ L_lace_chococake: set zeny, zeny - 400; mes "[Riskim]"; - mes "\"Please have a seat.\""; - mes "You watch at Riskim melts the chocolate and stirs in the potion, then glazes a cake with it."; - mes "\"It's a bit more chocolaty than your average chocolate cake, of course...\""; + mes "\"Please have a seat!\""; + mes "You watch at Riskim melts the chocolate and stirs in the potion, then glazes a cake with the mixture."; + mes "\"It's a bit more chocolatey than your average chocolate cake, of course...\""; next; mes "[Riskim]"; @@ -67,7 +67,7 @@ L_lacking_zeny: L_lacking_ingredients: mes "[Riskim]"; - mes "\"Sorry, but I need ten chocolate bars AND your cure potion for this. Please come back later when you have everything.\""; + mes "\"Sorry, but I need ten [Chocolate Bar]s AND your cure potion for this. Please come back later when you have everything.\""; close; L_lace_cupcake: @@ -75,11 +75,11 @@ L_lace_cupcake: menu "Thanks! Let me have a look around...", L_end, - "Can you put this potion into an orange cupcake?", -, + "Can you put this potion into an [Orange Cupcake]?", -, "Goodbye!", L_end; mes "[Riskim]"; - mes "\"Orange cupcakes? Oh dear... I'm sorry, but I have a very bad orange allergy.\""; + mes "\"[Orange Cupcake]s? Oh dear... I'm sorry, but I have a very bad orange allergy.\""; next; mes "[Riskim]"; mes "\"Perhaps the Chef at Dimond's Cove can help you? We get all our cupcakes from him.\""; @@ -110,12 +110,12 @@ L_end: // An old couple eating at the bakery 021-2.gat,71,22,0 script Rynoh 159,{ mes "[Rynoh]"; - mes "\"It may be expensive, but it sure is good.\""; + mes "\"The cakes may be expensive, but they sure are delicious!\""; close; } 021-2.gat,73,22,0 script Ontas 154,{ mes "[Ontas]"; - mes "\"We come here every week. They have some of the best bread I've ever eaten.\""; + mes "\"We come here every week. This place has some of the best bread I've ever eaten!\""; close; } diff --git a/npc/021-2_Tulimshar/heathin.txt b/npc/021-2_Tulimshar/heathin.txt index 5559614e..556a7141 100644 --- a/npc/021-2_Tulimshar/heathin.txt +++ b/npc/021-2_Tulimshar/heathin.txt @@ -20,45 +20,45 @@ if (baselevel >= 60) goto L_Heathin_Start; mes "[Heathin]"; - mes "\"Hello friend. I am Heathin, a smith of exotic metals. \""; + mes "\"Hello, friend. I am Heathin, a smith of exotic metals. \""; close; L_Heathin_Start: mes "[Heathin]"; - mes "\"Hello friend. I am Heathin, a smith of exotic metals. \""; + mes "\"Hello, friend. I am Heathin, a smith of exotic metals. \""; next; - mes "\"By the order of the Wizard's Council, I've been commissioned to forge gold ingots from gold pieces. I need to collect as many gold pieces as I can manage, forge them and give the ingots to the Council. However, I am but a simple smith and can't do this effort by myself.\""; + mes "\"By the order of the Wizard's Council, I've been commissioned to forge gold ingots from gold pieces. I need to collect as many gold pieces as I can manage, forge them and give the ingots to the Council. However, I am but a simple smith and cannot complete this effort by myself.\""; next; - mes "\"Forging gold ingots is not just a simple matter of gold falling from the sky. I need individuals that can gather not just the gold, but also help collect coal to heat my forge.\""; + mes "\"Forging gold ingots is not just a simple matter of gold falling from the sky! I need individuals that can gather not just the gold, but also help collect [Coal] to heat my forge.\""; next; - mes "\"Of course it would make little sense for me to gather gold pieces, just to pass them back out, but I am willing to create an award for any who would put an effort in towards completing my goal.\""; + mes "\"Of course it would make little sense for me to gather gold pieces from helpers just to pass them back out. However, I am willing to smith an award for any who would put an effort in towards completing my goal.\""; next; - mes "\"Perhaps you would be interested in helping me out? Would you be willing to help me gather coal and gold to fulfill my commission? I'm asking any and all willing souls to get me 50 coal and 100,000 gold pieces as that would put a significant dint in my goal.\""; + mes "\"Perhaps you would be interested in helping me out? Would you be willing to help me gather [Coal] and gold to fulfill my commission? I am asking any and all willing souls to get me 50 coal and 100,000 gold pieces, as that would put a significant dint in my goal.\""; menu - "Sure, I'll help.", L_Heathin_Help, - "I'd rather keep my gold for my own purposes, thank you very much", L_Heathin_No, + "Sure, I'll help!", L_Heathin_Help, + "I'd rather keep my gold for my own purposes, thank you very much.", L_Heathin_No, "Wait, what kind of award are we talking about?", L_Heathin_Interested; L_Heathin_Help: set HEATHIN_QUEST, 1; mes "[Heathin]"; - mes "\"Excellent! I'm always glad some one can be of service not just to me, but to Tulimshar. Please get me 50 coal and 100,000 gold pieces and you will be compensated for your efforts.\""; + mes "\"Excellent! I am always glad when someone can be of service not just to me, but to all of Tulimshar. Please get me 50 [Coal] and 100,000 gold pieces, and you will be compensated for your efforts.\""; close; L_Heathin_No: mes "[Heathin]"; - mes "\"That is too bad. If you change your mind, I'll still be here attempting to get my commission done.\""; + mes "\"That is too bad. If you change your mind, I shall still be here, attempting to get my commission done.\""; close; L_Heathin_Interested: mes "[Heathin]"; - mes "\"Well, when I am crafting these ingots, there are always stray metals left over. Surely I could forge them into ingots again, but I'd rather ensure that my commission be done. I am willing to forge a simple ring for you, which could be made more beautiful by a skilled jeweler.\""; + mes "\"Well, when I am crafting these ingots, there are always stray metals left over. Surely I could forge them into ingots again, but I'd rather ensure that my commission be completed. I am willing to forge a [Simple Ring] for you, which could be made more beautiful by a skilled jeweler.\""; next; - mes "\"What you do with the ring after I'm done forging it is your own business, but it could come in handy.\""; + mes "\"What you do with the ring after I am done forging it is your own business, but it could come in handy.\""; next; mes "\"Does this sound like something you might be interested in?\""; menu - "Sure, I'll help.", L_Heathin_Help, + "Sure, I'll help!", L_Heathin_Help, "I'd rather keep my gold.", L_Heathin_No, "Can you repeat that again?", L_Heathin_Interested; close; @@ -70,41 +70,41 @@ L_Heathin_Ring_Award: delitem "Coal", 50; getitem "RingSimple", 1; mes "[Heathin]"; - mes "\"You brought the coal and gold pieces. Most excellent! As promised, I have crafted a ring for you. Hopefully you will find it useful.\""; + mes "\"You have brought the [Coal] and gold pieces. This is most excellent! As promised, I have crafted a ring for you. Hopefully you will find it useful.\""; next; mes "\"Time to smelt these gold pieces into ingots. The Council will be pleased. Thank you for your efforts!\""; close; L_Heathin_Ring_Wait: mes "[Heathin]"; - mes "\"Hello again, making golden ingots has got me pretty busy. I sure hope I can fulfil my commission soon so I can move on to bigger and better things.\""; + mes "\"Hello again. Making golden ingots keeps me pretty busy. I certainly hope I can fulfill my commission soon so that I can move on to bigger and better things.\""; next; - mes "\"Sure the pay is good, but I'm a far better smith than this. If you can bring me 100,000 gold pieces and 50 coal, it would surely get me to my goal faster.\""; + mes "\"The pay is good, certainly, but I am a far better smith than this. If you can bring me 100,000 gold pieces and 50 [Coal], it would surely get me to my goal faster.\""; next; - mes "\"I'll be sure to provide an apt award once you are done.\""; + mes "\"I will be sure to provide an apt award once you are done.\""; close; L_Heathin_Ring_Thanks: mes "[Heathin]"; - mes "\"Thank you again for helping me fulfil my commission. It has made a signficant dint in what the Council requires of me. Perhaps I may be of service to you again one day\""; + mes "\"Thank you again for helping me fulfil my commission. It has made a signficant dint in what the Council requires of me. Perhaps I may be of service to you again one day!\""; close; L_Heathin_Terranite_Hood: mes "[Heathin]"; - mes "\"Hello again friend, I just found out about this great metal, called terranite.\""; + mes "\"Hello again friend, I just found out about this great metal called terranite.\""; next; mes "\"This metal is almost as strong as steel, but is also very ductile.\""; next; - mes "\"With some effort, I can make this metal form rings tighter than any chain mail. It isn't the prettiest, but its uses can be many.\""; + mes "\"With some effort, I can make this metal form rings tighter than any chain mail. It isn't the prettiest in hue, but its uses can be many.\""; next; - mes "\"Unfortunately, it seems to be difficult to gather. Most that have searched for terranite ore either can't find it or they have never returned.\""; + mes "\"Unfortunately, it seems to be difficult to gather. Most that have searched for [Terranite Ore] either cannot find it or have never returned...\""; next; - mes "\"I may be an excellent smith, but I'm no combatant. However, I would enjoy turning this ore into some useful, perhaps some type of armor to help those that may be.\""; + mes "\"I may be an excellent smith, but I certainly am no combatant. However, I would enjoy turning this ore into something useful, perhaps some type of armor to help those that may be braver.\""; next; - mes "\"So what do you say? Are you interested?\""; + mes "\"So, what do you say? Are you interested?\""; menu - "No thank you. Maybe later", L_Heathin_Terranite_No, - "Armor you say? Definitely!", L_Heathin_Terranite_Yes; + "No, thank you. Maybe later.", L_Heathin_Terranite_No, + "Armor, you say? Definitely!", L_Heathin_Terranite_Yes; close; L_Heathin_Terranite_No: @@ -115,13 +115,13 @@ L_Heathin_Terranite_No: L_Heathin_Terranite_Yes: set HEATHIN_QUEST, 3; mes "[Heathin]"; - mes "\"Great, this is going to be fun. Because I haven't had much practice with this armor, I'd like to get started soon.\""; + mes "\"Great, this is going to be fun! As I have not had much practice with this armor, I'd like to get started soon.\""; next; - mes "\"*Thinks for a moment*\""; + mes "Heathin thinks for a moment."; next; - mes "\"Ah, I know. I'll make a helm..well more like a hood, since it will woven.\""; + mes "\"Ah, I know! I will make a helm... Well, more like a hood, since it will woven.\""; next; - mes "\"It will require a great amount of heat, or so the rumor goes. For this I will need 100 coal to keep my forge burning hot. I will also need 10 terranite ore to make the armor. Of course, doing such work doesn't come cheap. While I may enjoy my work, my time and effort is very valuable. To compensate my efforts I will need 200,000 gold pieces. Please come back with the gold, coal and ore and I'll make this hood for you.\""; + mes "\"It will require a great amount of heat, if the rumors are to be believed. For this, I will need 100 [Coal] to keep my forge burning hot. I will also need 10 [Terranite Ore] to make the armor. Of course, such work does not come cheap. While I may enjoy my work, my time and effort is very valuable. To compensate my efforts I will need 200,000 gold pieces. Please come back with the gold, [Coal] and ore and I'll make this hood for you.\""; close; L_Heathin_Terranite_Hood_Forge: @@ -136,22 +136,22 @@ L_Heathin_Terranite_Hood_Forge: L_Heathin_Terranite_Hood_Wait: mes "[Heathin]"; - mes "\"I'm very busy right now. If you could bring me 10 terranite ore, 100 coal and 200,000 gold pieces, I'll make that terranite hood for you.\""; + mes "\"I am very busy right now. If you could bring me 10 [Terranite Ore], 100 [Coal] and 200,000 gold pieces, I will make that terranite hood for you.\""; close; L_Heathin_Terranite_Hood_Ready: set HEATHIN_QUEST, 5; getitem "TerraniteHelmet", 1; mes "[Heathin]"; - mes "\"All done with your terranite hood. Hope you enjoy it. I've got some work to wrap up for the Council, but come back later and I might be able to assist you again.\""; + mes "\"I am all done with your terranite hood. I hope you enjoy it! I have some work to wrap up for the Council, but come back later and I might be able to assist you again.\""; close; L_Heathin_Terranite_Legs: set HEATHIN_QUEST, 6; mes "[Heathin]"; - mes "\"Glad you are back. Just finished up some more of my commission. Now I can get back to making terranite armor for you. This time I'll make some pants, but they need more ore, more coal to heat my forge and of course, more gold for my efforts.\""; + mes "\"I am glad you are back! I've just finished up some more of my commission. Now I can get back to making terranite armor for you. This time I will make some pants, but they need more ore, more [Coal] to heat my forge and of course, more gold for my efforts.\""; next; - mes "\"To make terranite pants, I need 200 coal, 30 terranite ore and 400,000 gold pieces. The faster you bring this to me, the faster I can have your terranite pants ready.\""; + mes "\"To make terranite pants, I need 200 [Coal], 30 [Terranite Ore] and 400,000 gold pieces. The faster you bring this to me, the faster I can have your terranite pants ready.\""; close; L_Heathin_Terranite_Legs_Forge: @@ -161,27 +161,27 @@ L_Heathin_Terranite_Legs_Forge: delitem "TerraniteOre", 30; set zeny, zeny - 400000; mes "[Heathin]"; - mes "\"Great, you brought everything! Come back later and I'll have those terranite pants ready for you.\""; + mes "\"Great, you have brought everything! Come back later and I will have those terranite pants ready for you.\""; close; L_Heathin_Terranite_Legs_Wait: mes "[Heathin]"; - mes "\"I'm very busy right now. If you could bring me 30 terranite ore, 200 coal and 400,000 gold pieces, I'll make those terranite pants for you.\""; + mes "\"I am very busy right now. If you could bring me 30 [Terranite Ore], 200 [Coal] and 400,000 gold pieces, I will make those terranite pants for you.\""; close; L_Heathin_Terranite_Legs_Ready: set HEATHIN_QUEST, 8; getitem "TerraniteLegsArmor", 1; mes "[Heathin]"; - mes "\"All done with your terranite pants. Hope you enjoy it. I've got some work to wrap up for the Council. Come back later and I might be able to assist you again.\""; + mes "\"I am all done with your terranite pants. Hope you enjoy them! I have some more work to complete for the Council. Come back later and I might be able to assist you again.\""; close; L_Heathin_Terranite_Chest_Armor: set HEATHIN_QUEST, 9; mes "[Heathin]"; - mes "\"Glad you are back. Just finished up some more of my commission. Now I can get back to making terranite armor for you. This time I'll make some terranite chest armor, but they need more ore, more coal to heat my forge and of course, more gold for my efforts.\""; + mes "\"Good to see you again. I have just finished up some more of my commission. Now I can get back to making terranite armor for you. This time, I will make some terranite chest armor, but it needs more ore, more [Coal] for my forge and of course, more gold to compensate for my efforts.\""; next; - mes "\"To make terranite chest armor, I need 250 coal, 40 terranite ore and 500,000 gold pieces. The faster you bring this to me, the faster I can have your terranite pants ready.\""; + mes "\"To make terranite chest armor, I need 250 [Coal], 40 [Terranite Ore] and 500,000 gold pieces. The faster you bring this to me, the faster I can have your terranite armor ready.\""; close; L_Heathin_Terranite_Chest_Armor_Forge: @@ -191,28 +191,28 @@ L_Heathin_Terranite_Chest_Armor_Forge: delitem "TerraniteOre", 40; set zeny, zeny - 500000; mes "[Heathin]"; - mes "\"Great, you brought everything! Come back later and I'll have the terranite chest armor ready for you.\""; + mes "\"Splendid, you have brought everything! Come back later and I will have the terranite chest armor ready for you.\""; close; L_Heathin_Terranite_Chest_Armor_Wait: mes "[Heathin]"; - mes "\"I'm very busy right now. If you could bring me 40 terranite ore, 250 coal and 500,000 gold pieces, I'll make that chest armor for you.\""; + mes "\"I am very busy right now. If you could bring me 40 [Terranite Ore], 250 [Coal] and 500,000 gold pieces, I will make that chest armor for you.\""; close; L_Heathin_Terranite_Chest_Armor_Ready: set HEATHIN_QUEST, 11; getitem "TerraniteChestArmor", 1; mes "[Heathin]"; - mes "\"All done with your terranite chest armor. Hope you enjoy it. I've got some work to wrap up for the Council, but come back later and I might be able to assist you again.\""; + mes "\"I have completed your terranite chest armor. I hope you enjoy it! I have some work to wrap up for the Council again, but come back later and I might be able to assist you once more.\""; close; L_Heathin_Terranite_Arrows: mes "[Heathin]"; - mes "\"Glad you are back. I've experimented a little with terranite ore to see what else can be done with it. It seems to have some weapon qualities, but I've only tested it with arrows. If you'd like, I can make terranite arrows, but as as with the armor, I need coal, terranite ore and payment for my efforts.\""; + mes "\"How good to see you. I have experimented a little with [Terranite Ore] to see what else can be done with it. It seems to have some qualities suitable for weapons, but I have only tested it with arrows. If you would like, I can make [Terranite Arrow]s, but as as with the armor, I need [Coal], [Terranite Ore] and payment for my efforts.\""; next; - mes "\"Also, it might be a while until I have time to see what else I can make with terranite other than arrows, the Council is keeping me rather busy with my commission. So would you like some terranite arrows?\""; + mes "\"Also, it might be a while until I have time to see what else I can make with terranite other than arrows, as right now the Council is keeping me rather busy with my commission. So, would you like some [Terranite Arrow]s?\""; menu - "No thank you.", L_Heathin_Terranite_Arrows_No, + "No, thank you.", L_Heathin_Terranite_Arrows_No, "Sure, I could use some arrows.", L_Heathin_Terranite_Arrows_Yes; close; @@ -224,7 +224,7 @@ L_Heathin_Terranite_Arrows_No: L_Heathin_Terranite_Arrows_Yes: set HEATHIN_QUEST, 12; mes "[Heathin]"; - mes "\"Good, good. I'll begin crafting these arrows as soon as you come back. However, I don't just make small handfuls because it isn't worth my time and effort to have my concentration interrupted for small tasks. I'll make 1,000 terranite arrows per request, but I'll need 10 terranite ore, 20 coal and 10,000 gold pieces to begin.\""; + mes "\"Good, good. I shall begin crafting these arrows as soon as you come back. However, I cannot just make small handfuls as it would not be worth my time and effort to have my concentration interrupted for small tasks. I will make 1,000 [Terranite Arrow]s per request, for which I will need 10 [Terranite Ore], 20 [Coal] and 10,000 gold pieces.\""; next; mes "\"See you soon!\""; close; @@ -236,24 +236,24 @@ L_Heathin_Terranite_Arrows_Forge: delitem "TerraniteOre", 10; set zeny, zeny - 10000; mes "[Heathin]"; - mes "\"All right! You got everything I asked for. I'll start working on them right away.\""; + mes "\"Wonderful! You have everything I asked for. I will start working on the arrows right away.\""; close; L_Heathin_Terranite_Arrows_Wait: mes "[Heathin]"; - mes "\"If you want terranite arrows, please get me 10 terranite ore, 20 coal and 10,000 gold pieces.\""; + mes "\"If you want [Terranite Arrow]s, please get me 10 [Terranite Ore], 20 [Coal] and 10,000 gold pieces.\""; close; L_Heathin_Terranite_Arrows_Ready: getitem "TerraniteArrow", 1000; set HEATHIN_QUEST, 14; mes "[Heathin]"; - mes "\"All done. Here you go. Hope you like them. I am still working on my commission, but if you ever need anymore terranite arrows, just come on by with 20 coal, 10 terranite ore and 10,000 gold pieces and I'll make another 1,000 arrows for you. I have enough terranite ore in reserve that you can just trade me my requirements to keep my resources up. Thank you for all your efforts.\""; + mes "\"All done, here you go! I hope you like them. I am still working on my commission, but if you ever need any more [Terranite Arrow]s, just come on by with 20 [Coal], 10 [Terranite Ore] and 10,000 gold pieces and I will make another 1,000 arrows for you. By now I have enough [Terranite Ore] in reserve that you can just trade me my requirements to keep my resources up. Thank you for all your efforts!\""; close; L_Heathin_Terranite_Arrows_Trade: mes "[Heathin]"; - mes "\"Hi there. If you have 20 coal, 10 terranite ore and 10,000 gold pieces I'll trade you 1,000 terranite arrows. Would you like some terranite arrows?\""; + mes "\"Hello, there. If you have 20 [Coal], 10 [Terranite Ore] and 10,000 gold pieces, I will trade you 1,000 [Terranite Arrow]s. Would you like some [Terranite Arrow]s?\""; menu "No.", L_Heathin_Terranite_Arrows_Trade_No, "Yes.", L_Heathin_Terranite_Arrows_Trade_Yes; @@ -261,7 +261,7 @@ L_Heathin_Terranite_Arrows_Trade: L_Heathin_Terranite_Arrows_Trade_No: mes "[Heathin]"; - mes "\"Come back again if you'd like to get terranite arrows.\""; + mes "\"Come back again if you would like to get [Terranite Arrow]s.\""; close; L_Heathin_Terranite_Arrows_Trade_Yes: @@ -271,12 +271,12 @@ L_Heathin_Terranite_Arrows_Trade_Yes: set zeny, zeny - 10000; getitem "TerraniteArrow", 1000; mes "[Heathin]"; - mes "\"Here you go. Come back again if you want more terranite arrows\""; + mes "\"Here you go! Come back again if you want more [Terranite Arrow]s.\""; close; L_Heathin_Terranite_Arrows_Trade_Wait: mes "[Heathin]"; - mes "\"Doesn't seem like you have enough for me to trade you. Please come back with 20 coal, 10 terranite ore and 10,000 gold pieces if you want another 1,000 terranite arrows.\""; + mes "\"It seems that you do not have the necessary resources for me to trade you. Please come back with 20 [Coal], 10 [Terranite Ore] and 10,000 gold pieces if you want another 1,000 [Terranite Arrow]s.\""; close; } diff --git a/npc/021-2_Tulimshar/inya.txt b/npc/021-2_Tulimshar/inya.txt index 7f4964ec..4d95bfb0 100644 --- a/npc/021-2_Tulimshar/inya.txt +++ b/npc/021-2_Tulimshar/inya.txt @@ -4,47 +4,47 @@ 021-2.gat,43,62,0 script Inya 106,{ mes "[Inya]"; - mes "\"I'm Inya, a jeweler of fine rings. If you have a simple ring and a gem, I can make a nice ring for you for 1,000,000 gold pieces.\""; + mes "\"I am Inya, a jeweler of fine rings. If you have a [Simple Ring] and a gem, I can make a nice ring for you for 1,000,000 gold pieces.\""; next; - mes "\"Also, if you have a ring with gems on it, I can remove the gems and return the simple ring to you for 500,000 gold pieces.\""; + mes "\"Also, if you have a ring with gems on it, I can remove the gems and return the [Simple Ring] to you for 500,000 gold pieces.\""; next; - mes "\"So how can I help you?\""; + mes "\"So, how can I help you?\""; menu "I have a wedding ring, will that do?", L_Inya_Wedding_Ring, - "I'd like to remove a gem (500000 GP)", L_Inya_Remove_RingGem, - "I'd like to add a gem (1000000 GP)", L_Inya_Add_RingGem, - "Not interested", L_Inya_NotInterested; + "I'd like to remove a gem (500000 GP).", L_Inya_Remove_RingGem, + "I'd like to add a gem (1000000 GP).", L_Inya_Add_RingGem, + "Not interested.", L_Inya_NotInterested; close; L_Inya_Wedding_Ring: mes "[Inya]"; - mes "\"No, I'm sorry. I don't alter wedding rings at this time.\""; + mes "\"No, sorry. I do not alter wedding rings at this time.\""; close; L_Inya_Remove_RingGem: mes "[Inya]"; mes "\"What kind of gem would you like to have removed?\""; menu - "Diamond", L_Inya_Remove_Diamond, - "Ruby", L_Inya_Remove_Ruby, - "Emerald", L_Inya_Remove_Emerald, - "Sapphire", L_Inya_Remove_Sapphire, - "Topaz", L_Inya_Remove_Topaz, - "Amethyst", L_Inya_Remove_Amethyst, - "Not interested", L_Inya_NotInterested; + "Diamond.", L_Inya_Remove_Diamond, + "Ruby.", L_Inya_Remove_Ruby, + "Emerald.", L_Inya_Remove_Emerald, + "Sapphire.", L_Inya_Remove_Sapphire, + "Topaz.", L_Inya_Remove_Topaz, + "Amethyst.", L_Inya_Remove_Amethyst, + "I've changed my mind.", L_Inya_NotInterested; close; L_Inya_Add_RingGem: mes "[Inya]"; mes "\"What kind of gem would you like to add?\""; menu - "Diamond", L_Inya_Add_Diamond, - "Ruby", L_Inya_Add_Ruby, - "Emerald", L_Inya_Add_Emerald, - "Sapphire", L_Inya_Add_Sapphire, - "Topaz", L_Inya_Add_Topaz, - "Amethyst", L_Inya_Add_Amethyst, - "Not interested", L_Inya_NotInterested; + "Diamond.", L_Inya_Add_Diamond, + "Ruby.", L_Inya_Add_Ruby, + "Emerald.", L_Inya_Add_Emerald, + "Sapphire.", L_Inya_Add_Sapphire, + "Topaz.", L_Inya_Add_Topaz, + "Amethyst.", L_Inya_Add_Amethyst, + "I've changed my mind.", L_Inya_NotInterested; close; L_Inya_Remove_Diamond: @@ -163,12 +163,12 @@ L_Inya_Add_Amethyst: L_Inya_NotInterested: mes "[Inya]"; - mes "\"Come back later and I'll try to be of assistance.\""; + mes "\"Come back later and I will try to be of assistance.\""; close; L_Inya_Not_Enough: mes "[Inya]"; - mes "\"I'm sorry, you just don't seem to have enough for me to help you. Please come back when you do and I'll be more than happy to help you out.\""; + mes "\"I am sorry, you simply do not seem to have the necessary items for me to help you. Please come back when you do, and I would be more than happy to help you out.\""; close; } diff --git a/npc/021-2_Tulimshar/jhedia.txt b/npc/021-2_Tulimshar/jhedia.txt index 096f4932..2677a099 100644 --- a/npc/021-2_Tulimshar/jhedia.txt +++ b/npc/021-2_Tulimshar/jhedia.txt @@ -7,7 +7,10 @@ set @Coal_Per, 10; mes "[Jhedia]"; - mes "\"I forge iron ore into ingots. Ingots are more useful for skilled smiths, like armorers, because the ore is refined and made into useful units which can be worked with. To make ingots I need " + @Iron_Ore_Per + " iron ore and " + @Cost_Per_Ingot + " gp per ingot. I also need " + @Coal_Per + " coal for my forgeHow many ingots would you like?\""; + mes "\"I forge [Iron Ore] into ingots. Ingots are more useful for skilled smiths, like armorers, because the ore is refined and made into useful units which can be worked with. To make ingots, I need " + @Iron_Ore_Per + " [Iron Ore] and " + @Cost_Per_Ingot + " gp per ingot. I also need " + @Coal_Per + " [Coal] for my forge.\""; + next; + mes "[Jhedia]"; + mes "\"How many ingots would you like?\""; input @ingot_count; if (@ingot_count == 0) goto L_Jhedia_Bye; @@ -25,27 +28,27 @@ L_Jhedia_Bye: mes "[Jhedia]"; - mes "\"Good Bye.\""; + mes "\"Goodbye then.\""; close; L_Jhedia_NotEnough_Ore: mes "[Jhedia]"; - mes "\"You don't seem to have enough iron ore.\""; + mes "\"You do not seem to have enough [Iron Ore].\""; close; L_Jhedia_NotEnough_Coal: mes "[Jhedia]"; - mes "\"You don't seem to have enough coal.\""; + mes "\"You do not seem to have enough [Coal].\""; close; L_Jhedia_NotEnough_Zeny: mes "[Jhedia]"; - mes "\"You don't seem to have enough gold pieces.\""; + mes "\"You do not seem to have enough gold pieces.\""; close; L_Jhedia_NotEnoughSlots: mes "[Jhedia]"; - mes "You don't seem to have enough room to carry this many ingots."; + mes "\"You do not seem to have enough room to carry this many ingots.\""; close; } diff --git a/npc/027-1_Graveyard/_import.txt b/npc/027-1_Graveyard/_import.txt index 4c8b65ab..6923d517 100644 --- a/npc/027-1_Graveyard/_import.txt +++ b/npc/027-1_Graveyard/_import.txt @@ -1,5 +1,4 @@ map: 027-1.gat npc: npc/027-1_Graveyard/_mobs.txt npc: npc/027-1_Graveyard/_warps.txt -npc: npc/027-1_Graveyard/golbenez.txt npc: npc/027-1_Graveyard/graves.txt diff --git a/npc/027-1_Graveyard/golbenez.txt b/npc/027-1_Graveyard/golbenez.txt deleted file mode 100644 index 3e46494b..00000000 --- a/npc/027-1_Graveyard/golbenez.txt +++ /dev/null @@ -1,51 +0,0 @@ -//
-
-027-1.gat,68,89,0 script #Golbenez#_M 307,{
- if ($Golbenez_Inn_Cost >= 500000000) goto Golbenez_Inn_Enough;
-
- mes "[Voice]";
- mes "\"Mortal! I am Golbenez! I have broken through the barriers of space and time!\"";
- next;
- mes "\"For eons I've traveled through existence, tapping powers the living shall never touch. I now offer my powers for your enjoyment. In your world, places of leisure bring a desirable break from the threats of life. I shall create such a place. This place will be free from the threats found on your world as well as mine.\"";
- next;
- mes "\"It is difficult to create portals from my realm to yours. It is also difficult to create dimensions isolated from the threats that may seek to do you harm. For this reason I demand a hefty fee. For 500 million of your gold pieces I will create this place. This need not come just from you, but it must be delivered from the people of your world to me.\"";
- next;
- mes "\"So far, you have brought me " + Golbenez_Inn_Cost + " gold pieces. The people of your world have brought me " + $Golbenez_Inn_Cost + " gold pieces. How much would you like to give?\"";
-
- set @mult, 1;
- menu
- "I'd like to give a little.", Golbenez_Little,
- "I'd like to give thousands.", Golbenez_Thousands,
- "Nevermind.", Golbenez_Nevermind;
-
-
-Golbenez_Thousands:
- set @mult, 1000;
-
-Golbenez_Little:
- input @Give;
-
- set @Give, @Give * @mult;
-
- if (@Give <= 0) close;
- if (zeny < @Give) goto Golbenez_Inn_NotEnoughZeny;
- set Golbenez_Inn_Cost, Golbenez_Inn_Cost + @Give;
- set $Golbenez_Inn_Cost, $Golbenez_Inn_Cost + @Give;
- set zeny, zeny - @Give;
- close;
-
-Golbenez_Inn_NotEnoughZeny:
- mes "[Voice]";
- mes "\"You don't have as much as you say you do. Come back when you can give the gold pieces you say you can.\"";
- close;
-
-Golbenez_Nevermind:
- mes "[Voice]";
- mes "\"That's too bad.\"";
- close;
-
-Golbenez_Inn_Enough:
- mes "[Voice]";
- mes "\"I now have enough to create the place of leisure. Once I have anchored it to this world, you will know.\"";
- close;
-}
diff --git a/npc/027-2_Caretakers_House/_warps.txt b/npc/027-2_Caretakers_House/_warps.txt index c1bfeb92..160e4dae 100644 --- a/npc/027-2_Caretakers_House/_warps.txt +++ b/npc/027-2_Caretakers_House/_warps.txt @@ -1,5 +1,6 @@ // 027-2 Caretaker's House warps +<<<<<<< HEAD 027-2.gat,25,32 warp toGraveyard -1,-1,027-1.gat,88,85 @@ -18,3 +19,6 @@ 027-2.gat,75,93,0 warp ToInnFirstFloorL -1,-1,027-2.gat,127,36 027-2.gat,76,93,0 warp ToInnFirstFloorR -1,-1,027-2.gat,128,36 +======= +027-2.gat,26,33 warp toGraveyard -1,-1,027-1.gat,88,85 +>>>>>>> 1e1e26e1255a487a14ca99c60c3ab51ad3988f9b diff --git a/npc/027-3/_import.txt b/npc/027-3/_import.txt new file mode 100644 index 00000000..0d6c8819 --- /dev/null +++ b/npc/027-3/_import.txt @@ -0,0 +1,3 @@ +map: 027-3.gat +npc: npc/027-3/_mobs.txt +npc: npc/027-3/_warps.txt diff --git a/npc/027-3/_mobs.txt b/npc/027-3/_mobs.txt new file mode 100644 index 00000000..dcf52c02 --- /dev/null +++ b/npc/027-3/_mobs.txt @@ -0,0 +1,7 @@ +// 027-3 mobs + + + +027-3.gat,0,0,0 script Mob027-3 -1,{ + end; +} diff --git a/npc/027-3/_warps.txt b/npc/027-3/_warps.txt new file mode 100644 index 00000000..650f6e5a --- /dev/null +++ b/npc/027-3/_warps.txt @@ -0,0 +1,4 @@ +// 027-3 warps + +027-3.gat,127,44 warp toCryptLevel2 1,-1,027-4.gat,37,21 +027-3.gat,41,75 warp toGraveyard 2,-1,027-1.gat,28,69 diff --git a/npc/029-3_Fight_Cave/parua.txt b/npc/029-3_Fight_Cave/parua.txt index cdbfe064..bec4a055 100644 --- a/npc/029-3_Fight_Cave/parua.txt +++ b/npc/029-3_Fight_Cave/parua.txt @@ -75,8 +75,11 @@ L_CaveLogic: L_NextRound: set $@FIGHT_CAVE_ROUND_TIMER, 0; - set $@FIGHT_CAVE_LEVEL, $@FIGHT_CAVE_LEVEL + $@FIGHT_CAVE_PLAYER_COUNT + ($@FIGHT_CAVE_LEVEL / 40); - if ($@FIGHT_CAVE_LEVEL >= 3000) goto L_CleanUp; + set $@FIGHT_CAVE_TEMP_UP, ($@FIGHT_CAVE_LEVEL / 10); + if ($@FIGHT_CAVE_TEMP_UP > 100) set $@FIGHT_CAVE_TEMP_UP, 100; + + set $@FIGHT_CAVE_LEVEL, $@FIGHT_CAVE_LEVEL + $@FIGHT_CAVE_PLAYER_COUNT + $@FIGHT_CAVE_TEMP_UP; + if ($@FIGHT_CAVE_LEVEL >= 2200) goto L_CleanUp; set $@FIGHT_CAVE_POINTS, $@FIGHT_CAVE_LEVEL; if ($@FIGHT_CAVE_LAST + 30 < $@FIGHT_CAVE_LEVEL) goto L_Announce; @@ -90,12 +93,12 @@ L_Return_2: set $@MOB_5_SUMMON, 0; set $@MOB_6_SUMMON, 0; L_Summon: - if ($@FIGHT_CAVE_POINTS >= 243 && $@MOB_1_SUMMON < 3) goto L_MOB1; - if ($@FIGHT_CAVE_POINTS >= 81 && $@MOB_2_SUMMON < 10) goto L_MOB2; - if ($@FIGHT_CAVE_POINTS >= 27 && $@MOB_3_SUMMON < 10) goto L_MOB3; - if ($@FIGHT_CAVE_POINTS >= 9 && $@MOB_4_SUMMON < 10) goto L_MOB4; - if ($@FIGHT_CAVE_POINTS >= 3 && $@MOB_5_SUMMON < 20) goto L_MOB5; - if ($@FIGHT_CAVE_POINTS >= 1 && $@MOB_6_SUMMON < 25) goto L_MOB6; + if ($@FIGHT_CAVE_POINTS >= 243 && $@MOB_1_SUMMON < 2) goto L_MOB1; + if ($@FIGHT_CAVE_POINTS >= 81 && $@MOB_2_SUMMON < 6) goto L_MOB2; + if ($@FIGHT_CAVE_POINTS >= 27 && $@MOB_3_SUMMON < 5) goto L_MOB3; + if ($@FIGHT_CAVE_POINTS >= 9 && $@MOB_4_SUMMON < 7) goto L_MOB4; + if ($@FIGHT_CAVE_POINTS >= 3 && $@MOB_5_SUMMON < 10) goto L_MOB5; + if ($@FIGHT_CAVE_POINTS >= 1 && $@MOB_6_SUMMON < 12) goto L_MOB6; goto L_Return_1; L_Announce: @@ -154,6 +157,7 @@ onInit: L_CleanUp: npctalk "Game Over"; mapannounce "029-1.gat", "Parua: The dungeon is now ready for its next victims.", 0; + areatimer "029-3.gat", 20, 20, 70, 60, 10, "Parua::onReward"; set $@FIGHT_CAVE_STATUS, 0; set $@FIGHT_CAVE_PLAYER_COUNT, 0; set $@FIGHT_CAVE_LEVEL, 1; @@ -163,4 +167,10 @@ L_CleanUp: setnpctimer 0; end; +onReward: + if (isdead(0)) end; + set BOSS_POINTS, BOSS_POINTS + 100; + message strcharinfo(0), "You gain 100 Boss Points giving you a total of " + BOSS_POINTS; + end; + } diff --git a/npc/030-1_Snow_field/_import.txt b/npc/030-1_Snow_field/_import.txt new file mode 100644 index 00000000..97064443 --- /dev/null +++ b/npc/030-1_Snow_field/_import.txt @@ -0,0 +1,3 @@ +map: 030-1.gat +npc: npc/030-1_Snow_field/_mobs.txt +npc: npc/030-1_Snow_field/_warps.txt diff --git a/npc/030-1_Snow_field/_mobs.txt b/npc/030-1_Snow_field/_mobs.txt new file mode 100644 index 00000000..ade0e354 --- /dev/null +++ b/npc/030-1_Snow_field/_mobs.txt @@ -0,0 +1,25 @@ +// 030-1 Snow field mobs + +030-1.gat,78,55,66,70 monster Santa Slime 1015,5,100000,30000,Mob030-1::On1015 +030-1.gat,84,57,66,70 monster Squirrel 1038,10,100000,30000,Mob030-1::On1038 +030-1.gat,84,57,66,70 monster Fluffy 1020,15,100000,30000,Mob030-1::On1020 + + +030-1.gat,0,0,0 script Mob030-1 -1,{ +On1015: + set @mobID, 1015; + callfunc "MobPoints"; + break; + +On1020: + set @mobID, 1020; + callfunc "MobPoints"; + break; + +On1038: + set @mobID, 1038; + callfunc "MobPoints"; + break; + + end; +} diff --git a/npc/030-1_Snow_field/_warps.txt b/npc/030-1_Snow_field/_warps.txt new file mode 100644 index 00000000..73106d6d --- /dev/null +++ b/npc/030-1_Snow_field/_warps.txt @@ -0,0 +1,3 @@ +// 030-1 Snow field warps + +030-1.gat,61,28 warp toSnowfield 0,-1,019-1.gat,61,100 diff --git a/npc/031-1_NivalisPort/_import.txt b/npc/031-1_NivalisPort/_import.txt new file mode 100644 index 00000000..03490d66 --- /dev/null +++ b/npc/031-1_NivalisPort/_import.txt @@ -0,0 +1,6 @@ +map: 031-1.gat +npc: npc/031-1_NivalisPort/_mobs.txt +npc: npc/031-1_NivalisPort/_warps.txt +npc: npc/031-1_NivalisPort/angelaOutside.txt +npc: npc/031-1_NivalisPort/frozenbeard.txt +npc: npc/031-1_NivalisPort/house.txt diff --git a/npc/031-1_NivalisPort/_mobs.txt b/npc/031-1_NivalisPort/_mobs.txt new file mode 100644 index 00000000..431da4f1 --- /dev/null +++ b/npc/031-1_NivalisPort/_mobs.txt @@ -0,0 +1,25 @@ +// 031-1 NivalisPort mobs + +031-1.gat,75,72,86,110 monster Santa Slime 1015,5,100000,30000,Mob031-1::On1015 +031-1.gat,89,74,86,110 monster Squirrel 1038,10,100000,30000,Mob031-1::On1038 +031-1.gat,89,74,86,110 monster Fluffy 1020,15,100000,30000,Mob031-1::On1020 + + +031-1.gat,0,0,0 script Mob031-1 -1,{ +On1015: + set @mobID, 1015; + callfunc "MobPoints"; + break; + +On1020: + set @mobID, 1020; + callfunc "MobPoints"; + break; + +On1038: + set @mobID, 1038; + callfunc "MobPoints"; + break; + + end; +} diff --git a/npc/031-1_NivalisPort/_warps.txt b/npc/031-1_NivalisPort/_warps.txt new file mode 100644 index 00000000..ca2bdc30 --- /dev/null +++ b/npc/031-1_NivalisPort/_warps.txt @@ -0,0 +1,4 @@ +// 031-1 NivalisPort warps + +031-1.gat,37,55 warp toNivalis -1,-1,020-1.gat,106,55 +031-1.gat,76,24 warp toLabyrinth -1,-1,031-3.gat,212,298 diff --git a/npc/031-1_NivalisPort/angelaOutside.txt b/npc/031-1_NivalisPort/angelaOutside.txt new file mode 100644 index 00000000..ae5b6bfa --- /dev/null +++ b/npc/031-1_NivalisPort/angelaOutside.txt @@ -0,0 +1,194 @@ +// author: Jenalya +// reviewed by: +// state0: Angela is to upset to tell you anything, needs a concentration potion +// state1: got the mission to save Cindy +// state2 and state3: Cindy is saved Angela invites you to visit them for giving a reward +// state greater than 3: Angela invites and asks you to bring present boxes + +//TODO: picture +031-1.gat,79,24,0 script Angela 154, { + + set @Q_Nivalis_state_MASK, NIBBLE_5_MASK; + set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT; + + set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); + + if (@rescue_Cindy > 3) goto L_Please_Visit_Again; + if (@rescue_Cindy > 1) goto L_Please_Visit; + if (@rescue_Cindy == 1) goto L_Please_Help; + + mes "[Angela]"; + mes "\"Please, I need help! My little daugther!\""; + next; + mes "\"It's terrible, oh my dear child!\""; + next; + + if (countitem("ConcentrationPotion") > 0) goto L_Menu_Potion; + + menu + "\"Please calm down and tell me what happened.\"", L_Whining, + "Leave", -; + close; + +L_Whining: + mes "[Angela]"; + mes "\"My poor little daugther, please! Oh no, oh no...\""; + next; + mes "\"We need to do something! My poor little Cindy! My cute little girl!\""; + next; + mes "\"It's so terrible, how could that happen? Please, I need help, it's so terrible.\""; + next; + mes "\"That awful filthy monsters - terrible!\""; + next; + mes "\"Oh Cindy, my little Cindy - oh no...\""; + next; + mes "\"Please help, we need to do something!\""; + next; + mes "\"It's so terrible, my poor cute little Cindy...\""; + next; + mes "\"Oh, when I think, what might happen to her right now!\""; + next; + mes "\"She is crying and sobbing.\""; + next; + mes "\"It seems, she is too upset to tell you anything helpful. If she would just calm down and concentrate a bit...\""; + close; + +L_Menu_Potion: + menu + "\"Please calm down and tell me what happened.\"", L_Whining, + "Give her a concentration potion.", L_Calm_Down, + "Leave", -; + close; + +L_Calm_Down: + if (countitem("ConcentrationPotion") == 0) goto L_No_Potion; + delitem "ConcentrationPotion", 1; + mes "She drinks the concentration potions and calms down."; + mes "[Angela]"; + mes "\"Thank you, this was helpful.\""; + next; + mes "\"My daughter Cindy and me were on our way to Santa, to bring him some presents. Many people here in Nivalis are helping Santa with his business.\""; + next; + mes "\"When we passed the entrance of this cave, a pack of Yetis came out there. It's disturbing, usually, they are very shy.\""; + next; + mes "\"We tried to run away, but there were to many of them. They took my poor little Cindy and all the presents with them.\""; + next; + mes "\"Oh my poor little girl. I'm so worried - what might they do with her? Oh no!\""; + next; + mes "\"You look like an adventurer! Please, can you go in that cave and rescue my little Cindy? I beg you for help!\""; + set @rescue_Cindy, 1; + callsub S_Update_Mask; + close; + +L_No_Potion: + mes "You don't have a concentration potion."; + close; + +L_Please_Help: + mes "[Angela]"; + mes "\"Please rescue my daughter!\""; + close; + +L_Please_Visit: + mes "[Angela]"; + mes "\"Thank you so much for rescueing my beloved Cindy. Please come to visit us in our house at the beach.\""; + next; + mes "\"My husband is an adventurer like you, and I want to give you something he got on his travels to show my gratitude.\""; + close; + +L_Please_Visit_Again: + mes "[Angela]"; + mes "\"Hello! You are welcome to visit us in our house at the beach everytime. Cindy loves to see you!\""; + next; + mes "\"If you have found any present boxes, the Yetis took away, please bring them to our house. Usually, the Yetis are very shy... their behavior is a bit odd.\""; + close; + +S_Update_Mask: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK)) + | (@rescue_Cindy << @Q_Nivalis_state_SHIFT); + return; +} + +031-1.gat,80,25,0 script Debug 154, { + +//TODO: remove DEBUG + + set @Q_Nivalis_state_MASK, NIBBLE_5_MASK; + set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT; + + set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); + + mes "This menu is for debugging and will be removed"; + menu + "close", L_close, + "reset quest", -, + "skip yeti battle", yeti, + "magic", magic; + set @rescue_Cindy, 0; + callsub S_Update_Mask; + mes "quest variable is now " + @rescue_Cindy; + close; + +yeti: + set @rescue_Cindy, 2; + callsub S_Update_Mask; + mes "quest variable is now " + @rescue_Cindy; + close; + +L_close: + close; + +magic: + // Set up SkillUp function general magic + set @SUP_id, SKILL_MAGIC; + set @SUP_name$, "Magic"; + + set @SUP_xp, 5000; + set @SUP_lvl, 2; + callfunc "SkillUp"; + + // Set up SkillUp function war magic + set @SUP_id, SKILL_MAGIC_WAR; + set @SUP_name$, "War Magic"; + + set @SUP_xp, 5000; + set @SUP_lvl, 2; + callfunc "SkillUp"; + + // Set up SkillUp function life magic + set @SUP_id, SKILL_MAGIC_LIFE; + set @SUP_name$, "Life Magic"; + + set @SUP_xp, 5000; + set @SUP_lvl, 2; + callfunc "SkillUp"; + + // Set up SkillUp function life magic + set @SUP_id, SKILL_MAGIC_NATURE; + set @SUP_name$, "Nature Magic"; + + set @SUP_xp, 5000; + set @SUP_lvl, 2; + callfunc "SkillUp"; + + mes "Lightning invocation: " + getspellinvocation("lightning-strike"); + mes "Flare-dart invocation: " + getspellinvocation("flare-dart"); + mes "Lesser-heal invocation: " + getspellinvocation("lesser-heal"); + mes "Lay-on-hands invocation: " + getspellinvocation("lay-on-hands"); + mes "protect: " + getspellinvocation("protect"); + close; + +S_Update_Mask: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK)) + | (@rescue_Cindy << @Q_Nivalis_state_SHIFT); + return; +} + + + + + + + diff --git a/npc/031-1_NivalisPort/frozenbeard.txt b/npc/031-1_NivalisPort/frozenbeard.txt new file mode 100644 index 00000000..9be863b0 --- /dev/null +++ b/npc/031-1_NivalisPort/frozenbeard.txt @@ -0,0 +1,29 @@ +// + +031-1.gat,97,115,0 script Frozenbeard 138,{ + + mes "[Frozenbeard]"; + mes "\"Arrr mate! There is no dock here, so I had to use my row boat! I am pioneering and mapping the trade route between here and Argaes, around the Hurnscald area. I'll hail my shipmates to send a boat and we'll ship out to Argaes, be there in no time, but it will cost you a fee. 500 gold pieces. What do you say?"; + menu + "Sure. (500 GP)", L_Frozenbeard_Argaes, + "Not right now.", L_Frozenbeard_Stay; + close; + +L_Frozenbeard_Argaes: + if (zeny < 500) goto L_NoMoney; + mes "[Frozenbeard]"; + mes "\"Pleasant Journeys!\""; + set zeny, zeny-500; + warp "008-1.gat",137,64; + close; + +L_Frozenbeard_Stay: + mes "[Frozenbeard]"; + mes "\"Suit yourself. Feel free to come out here anytime, I am really busy making sure these routes are accurate.\""; + close; + +L_NoMoney: + mes "[Frozenbeard]"; + mes "\"You need more money. I'll wait here while you get some.\""; + close; +} diff --git a/npc/031-1_NivalisPort/house.txt b/npc/031-1_NivalisPort/house.txt new file mode 100644 index 00000000..d9714ef5 --- /dev/null +++ b/npc/031-1_NivalisPort/house.txt @@ -0,0 +1,18 @@ +// here is based on the queststatus for the rescue Cindy quest, if the player can enter +// player can enter, if Cindy is already saved and the player has been invited, quest status > 2 +// author: Jenalya + +031-1.gat,95,80,0 script #Door 127,1,1,{ + set @Q_Nivalis_state_MASK, NIBBLE_5_MASK; + set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT; + + set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); + + if (@rescue_Cindy > 2) goto L_Warp; + message strcharinfo(0), "The door is locked."; + close; + +L_Warp: + warp "031-2.gat", 23, 28; + end; +} diff --git a/npc/031-2_Angelas_House/_import.txt b/npc/031-2_Angelas_House/_import.txt new file mode 100644 index 00000000..05585ce4 --- /dev/null +++ b/npc/031-2_Angelas_House/_import.txt @@ -0,0 +1,5 @@ +map: 031-2.gat +npc: npc/031-2_Angelas_House/_mobs.txt +npc: npc/031-2_Angelas_House/_warps.txt +npc: npc/031-2_Angelas_House/angelaHouse.txt +npc: npc/031-2_Angelas_House/cindyHouse.txt diff --git a/npc/031-2_Angelas_House/_mobs.txt b/npc/031-2_Angelas_House/_mobs.txt new file mode 100644 index 00000000..fadd5d5c --- /dev/null +++ b/npc/031-2_Angelas_House/_mobs.txt @@ -0,0 +1,7 @@ +// 031-2 Angela's House mobs + + + +031-2.gat,0,0,0 script Mob031-2 -1,{ + end; +} diff --git a/npc/031-2_Angelas_House/_warps.txt b/npc/031-2_Angelas_House/_warps.txt new file mode 100644 index 00000000..82dfa41c --- /dev/null +++ b/npc/031-2_Angelas_House/_warps.txt @@ -0,0 +1,3 @@ +// 031-2 Angela's House warps + +031-2.gat,23,30 warp door -1,-1,031-1.gat,95,82 diff --git a/npc/031-2_Angelas_House/angelaHouse.txt b/npc/031-2_Angelas_House/angelaHouse.txt new file mode 100644 index 00000000..5ec66a83 --- /dev/null +++ b/npc/031-2_Angelas_House/angelaHouse.txt @@ -0,0 +1,114 @@ +// author: Jenalya +// reviewed by: +// state0, 1, 2: you shouldn't be able to come here +// state3: it's your first visit, you can choose a reward +// state4: you can do daily quests with white and yellow presents boxes +// + +//TODO: coordinates and picture +031-2.gat,24,26,0 script Angela 154, { + + set @Q_Nivalis_state_MASK, NIBBLE_5_MASK; + set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT; + + set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); + + if (@rescue_Cindy == 4) goto L_Hello_Again; + if (@rescue_Cindy == 3) goto L_Reward; + + mes "..."; + close; + +L_Reward: + mes "[Angela]"; + mes "\"Hello " + strcharinfo(0) + ", thank you again. I'm so glad, Cindy is back home safe.\""; + next; + mes "\"As I told you, my husband is an adventurer. He is at one of his travels, so he couldn't rescue Cindy himself.\""; + next; + mes "\"I want to give you one of his treasures. Beside of all the junk he brings, there are some very valuable things.\""; + next; + mes "\"This item is called the Rock Knife. When you wield it, you feel as robust as a rock.\""; + + getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inv; + + getitem "RockKnife", 1; + + set @rescue_Cindy, 4; + callsub S_Update_Mask; + + next; + mes "\"I hope, this will be useful for you.\""; + next; + mes "\"I's so glad, Cindy is save now. But there is still another problem. The Yetis took away all the white and yellow present boxes we wanted to bring to Santa!\""; + next; + mes "\"Usually, Yetis are very shy - I wonder why they do that. There is something strange going on.\""; + next; + mes "\"May I ask you for help again? I'll give you a small reward for every 3 boxes of one color you bring me.\""; + close; + +L_Full_Inv: + mes "\"Oh, it seems you carry so much stuff - I will keep it for you until you can take it.\""; + close; + +L_Hello_Again: + mes "[Angela]"; + mes "\"Hello! Good to see you again. Please warm yourself.\""; + next; + menu + "I just wanted to say hello.",-, + "I have some yellow present boxes.",L_Yellow, + "I have some white present boxes.",L_White; + close; + +L_Yellow: + set @dq_level, 70; + set @dq_cost, 32; + set @dq_count, 3; + set @dq_name$, "YellowPresentBox"; + set @dq_friendly_name$, "yellow present box"; + set @dq_money, 5300; + set @dq_exp, 1300; + + callfunc "DailyQuest"; + + next; + + if (@dq_return ==4) mes "\"Santa will be glad to have them back.\""; + close; + +L_White: + set @dq_level, 80; + set @dq_cost, 64; + set @dq_count, 3; + set @dq_name$, "WhitePresentBox"; + set @dq_friendly_name$, "white present box"; + set @dq_money, 10800; + set @dq_exp, 2800; + + callfunc "DailyQuest"; + + next; + + if (@dq_return ==4) mes "\"You are a great help!\""; + close; + +S_Update_Mask: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK)) + | (@rescue_Cindy << @Q_Nivalis_state_SHIFT); + return; +} + + + + + + + + + + + + + diff --git a/npc/031-2_Angelas_House/cindyHouse.txt b/npc/031-2_Angelas_House/cindyHouse.txt new file mode 100644 index 00000000..4dc6b595 --- /dev/null +++ b/npc/031-2_Angelas_House/cindyHouse.txt @@ -0,0 +1,64 @@ +// author: Jenalya +// reviewed by: +// state0,1,2: you shouldn't be able to reach this place +// state3 and greater: Cindy is saved, she says one of some random phrases +// + +//TODO: picture +031-2.gat,22,25,0 script Cindy 114, { + + set @Q_Nivalis_state_MASK, NIBBLE_5_MASK; + set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT; + + set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); + + if (@rescue_Cindy > 2) goto L_Happy_Random; + + mes "..."; + close; + +L_Happy_Random: + getinventorylist; + set @candy, rand(50); + if (@inventorylist_count < 100 && @candy == 42) goto L_Candy; + + setarray @quote_Cindy$, "Thank you so much for rescueing me!", + "My mother made really tasty cookies yesterday. But I already ate them all...", + "I want to go ice skating tomorrow. That will be fun!", + "I wonder, when Daddy will come home next time. He always brings exciting stuff!", + strcharinfo(0) + "! You're my hero!", + "My mother is so upset about the Yetis - they are very very shy usually. You have to be lucky to see one. I wonder, what's wrong with them.", + "When I'm a little older, I want to travel like you do and my father. I want to see every place on the world!", + "Did you ever meet Santa? He's very kind! He always gives me some candy, when we go to see him.", + strcharinfo(0) + ", you are sooo strong! Amazing! But my dad is strong too!"; + set @random, rand(9); + set @quote$, "\"" + @quote_Cindy$[@random] + "\""; + mes "[Cindy]"; + mes @quote$; + close; + +L_Candy: + mes "[Cindy]"; + mes "\"Santa gave me some candy! Please, take that!\""; + getitem "Candy", 1; + close; + +S_Update_Mask: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK)) + | (@rescue_Cindy << @Q_Nivalis_state_SHIFT); + return; +} + + + + + + + + + + + + + diff --git a/npc/031-3_Cave/_import.txt b/npc/031-3_Cave/_import.txt new file mode 100644 index 00000000..44ec9310 --- /dev/null +++ b/npc/031-3_Cave/_import.txt @@ -0,0 +1,5 @@ +map: 031-3.gat +npc: npc/031-3_Cave/_mobs.txt +npc: npc/031-3_Cave/_warps.txt +npc: npc/031-3_Cave/cindyCave.txt +npc: npc/031-3_Cave/labyrinth.txt diff --git a/npc/031-3_Cave/_mobs.txt b/npc/031-3_Cave/_mobs.txt new file mode 100644 index 00000000..d82ae5ed --- /dev/null +++ b/npc/031-3_Cave/_mobs.txt @@ -0,0 +1,65 @@ +// 031-3 Cave mobs + +031-3.gat,38,50,52,75 monster Moggun 1061,5,100000,30000,Mob031-3::On1061 +031-3.gat,213,57,66,59 monster Santa Slime 1015,5,100000,30000,Mob031-3::On1015 +031-3.gat,39,144,52,75 monster Moggun 1061,5,100000,30000,Mob031-3::On1061 +031-3.gat,39,212,52,75 monster Moggun 1061,5,100000,30000,Mob031-3::On1061 +031-3.gat,282,142,52,75 monster Moggun 1061,5,100000,30000,Mob031-3::On1061 +031-3.gat,284,222,52,75 monster Moggun 1061,5,100000,30000,Mob031-3::On1061 +031-3.gat,99,271,52,75 monster Moggun 1061,5,100000,30000,Mob031-3::On1061 +031-3.gat,281,58,52,75 monster Moggun 1061,5,100000,30000,Mob031-3::On1061 +031-3.gat,37,47,61,62 monster Ice Goblin 1058,5,100000,30000,Mob031-3::On1058 +031-3.gat,117,140,83,61 monster Ice Goblin 1058,5,100000,30000,Mob031-3::On1058 +031-3.gat,212,142,83,61 monster Ice Goblin 1058,5,100000,30000,Mob031-3::On1058 +031-3.gat,211,276,83,61 monster Ice Goblin 1058,5,100000,30000,Mob031-3::On1058 +031-3.gat,117,207,83,61 monster Ice Goblin 1058,5,100000,30000,Mob031-3::On1058 +031-3.gat,231,213,83,61 monster Ice Goblin 1058,5,100000,30000,Mob031-3::On1058 +031-3.gat,261,265,83,61 monster Ice Goblin 1058,5,100000,30000,Mob031-3::On1058 +031-3.gat,280,56,66,59 monster Santa Slime 1015,5,100000,30000,Mob031-3::On1015 +031-3.gat,120,143,66,59 monster Santa Slime 1015,5,100000,30000,Mob031-3::On1015 +031-3.gat,218,215,66,59 monster Santa Slime 1015,5,100000,30000,Mob031-3::On1015 +031-3.gat,285,216,66,59 monster Santa Slime 1015,5,100000,30000,Mob031-3::On1015 +031-3.gat,128,272,66,59 monster Santa Slime 1015,5,100000,30000,Mob031-3::On1015 +031-3.gat,212,279,66,59 monster Santa Slime 1015,5,100000,30000,Mob031-3::On1015 +031-3.gat,141,229,40,9 monster yeti 1072,3,100000,30000,Mob031-3::On1072 +031-3.gat,34,288,10,13 monster yeti 1072,3,100000,30000,Mob031-3::On1072 +031-3.gat,25,166,10,13 monster yeti 1072,3,100000,30000,Mob031-3::On1072 +031-3.gat,132,160,10,13 monster yeti 1072,3,100000,30000,Mob031-3::On1072 +031-3.gat,228,37,10,13 monster yeti 1072,3,100000,30000,Mob031-3::On1072 +031-3.gat,44,73,33,11 monster yeti 1072,1,100000,30000,Mob031-3::On1072 +031-3.gat,37,277,66,59 monster Bat 1017,10,100000,30000,Mob031-3::On1017 +031-3.gat,85,176,154,95 monster Bat 1017,10,100000,30000,Mob031-3::On1017 +031-3.gat,121,279,66,59 monster Bat 1017,10,100000,30000,Mob031-3::On1017 +031-3.gat,242,245,144,131 monster Bat 1017,10,100000,30000,Mob031-3::On1017 +031-3.gat,242,87,144,131 monster Bat 1017,10,100000,30000,Mob031-3::On1017 +031-3.gat,40,50,66,59 monster Bat 1017,10,100000,30000,Mob031-3::On1017 + + +031-3.gat,0,0,0 script Mob031-3 -1,{ +On1015: + set @mobID, 1015; + callfunc "MobPoints"; + break; + +On1017: + set @mobID, 1017; + callfunc "MobPoints"; + break; + +On1058: + set @mobID, 1058; + callfunc "MobPoints"; + break; + +On1061: + set @mobID, 1061; + callfunc "MobPoints"; + break; + +On1072: + set @mobID, 1072; + callfunc "MobPoints"; + break; + + end; +} diff --git a/npc/031-3_Cave/_warps.txt b/npc/031-3_Cave/_warps.txt new file mode 100644 index 00000000..13bb0b34 --- /dev/null +++ b/npc/031-3_Cave/_warps.txt @@ -0,0 +1,3 @@ +// 031-3 Cave warps + +031-3.gat,212,300 warp toOutside -1,-1,031-1.gat,76,26 diff --git a/npc/031-3_Cave/cindyCave.txt b/npc/031-3_Cave/cindyCave.txt new file mode 100644 index 00000000..131db3c8 --- /dev/null +++ b/npc/031-3_Cave/cindyCave.txt @@ -0,0 +1,209 @@ +// author: Jenalya +// reviewed by: +// state0: Cindy is totally scared and does nothing helpful +// state1: you are able to open the cage +// state2 and greater: Cindy is saved, she asks you to visit them +// + +//TODO: picture +031-3.gat,122,51,0 script Cindy 114, { + if ($@FIGHT_YETI_STATUS != 0) goto L_Yeti; + + set @KEYS_AMOUNT, 10; + + set @Q_Nivalis_state_MASK, NIBBLE_5_MASK; + set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT; + + set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT); + + if (Sex == 0) set @title$, "Misses"; + if (Sex == 1) set @title$, "Mister"; + + if (@rescue_Cindy >= 3) goto L_Please_Visit; + if (@rescue_Cindy == 2) goto L_Reward; + if (@rescue_Cindy == 1) goto L_Please_Help; + + mes "There is a little girl in a cage. As you come near, she starts to shiver and back off from you as far as she can in that small cage."; + next; + mes "You don't know, what to do."; + close; + +L_Please_Help: + mes "There is a little girl in a cage. As you come near, she starts to shiver and back off from you as far as she can in that small cage."; + next; + menu + "Hello Cindy, I'm here to save you.", - ; + mes "Cindy doesn't look so scared anymore."; + next; + mes "[Cindy]"; + mes "\"Hello, dear " + @title$ + " adventurer. Did my mother send you?\""; + next; + mes "\"It's so cold in here! Can you please open the cage?\""; + next; + mes "\"But be careful, if the Yetis hear you, they will come!\""; + menu + "Try to open the cage", L_Try_Cage, + "Leave", -; + close; + +L_Try_Cage: + if (baselevel < 65) goto L_To_Weak; + if (countitem("TreasureKey") < @KEYS_AMOUNT) goto L_Not_Enough_Keys; + delitem "TreasureKey", @KEYS_AMOUNT; + mes "As you try to open the door of the cage, there is a loudly squeaking noise."; + next; + mes "You get an uncomfortable feeling and Cindy starts to shiver."; + next; + mes "\"Oh no, the Yetis...\""; + if ($@FIGHT_YETI_STATUS != 0) goto L_Yeti; + + // initialize fight + set $@FIGHT_YETI_STATUS, 1; + set $@FIGHT_YETI_WAVE, 0; + set $@YETI_COUNT, 0; + set $@FIGHT_YETI_PLAYER_COUNT, getareausers("031-3.gat", 80, 20, 160, 90); + + startnpctimer; + goto L_Exit; + +L_Exit: + close; + +L_Yeti: + mes "[Cindy]"; + mes "\"Watch out, the Yetis!\""; + close; + +L_Reward: + mes "[Cindy]"; + mes "\"You are a hero! All this strong monsters!\""; + next; + mes "\"I've found this thing in the cave - it looks valuable. I want you to have it.\""; + next; + getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inv; + + set @reward, rand(15); + if (@reward < 10) goto L_Wizard_Hat; + getitem "WoodenStaff", 1; + set @rescue_Cindy, 3; + callsub S_Update_Mask; + goto L_Visit; + +L_Wizard_Hat: + // get a wizard hat in one of the ten colors - no white + setarray @wizardhats[0], 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209; + getitem @wizardhats[@reward], 1; + set @rescue_Cindy, 3; + callsub S_Update_Mask; + +L_Visit: + mes "\"Thank you so much, please come to my home. It's the house at the beach.\""; + next; + mes "\"I'm sure, my mother want to thank you as well.\""; + close; + +L_Please_Visit: + mes "[Cindy]"; + mes "\"Thank you, thank you! You're a hero! Please come home with me to our house at the beach!\""; + close; + +L_To_Weak: + mes "You try to open the cage, but it's stuck. It seems, you're too weak!"; + close; + +L_Not_Enough_Keys: + mes "You don't have enough keys to open the cage."; + close; + +L_Full_Inv: + mes "\"Oh, it seems you carry so much stuff - I will keep it for you until you can take it.\""; + close; + +// Fight logic attached to npc +OnTimer5000: + setnpctimer 0; + if ($@FIGHT_YETI_STATUS != 0) goto L_CaveLogic; +L_Return_1: + set $@FIGHT_YETI_PLAYER_COUNT, 0; + areatimer "031-3.gat", 80, 20, 160, 90, 10, "Cindy::onTick"; + end; + +L_CaveLogic: + set $@FIGHT_YETI_ROUND_PEN, $@FIGHT_YETI_PLAYER_COUNT; + if ($@FIGHT_YETI_ROUND_PEN > 60) set $@FIGHT_YETI_ROUND_PEN, 60; + if ($@FIGHT_YETI_PLAYER_COUNT <= 0) goto L_CleanUp; + set $@FIGHT_YETI_ROUND_TIMER, $@FIGHT_YETI_ROUND_TIMER + 5; // Advance 5 seconds + if (mobcount("031-3.gat", "Cindy::onPetDeath") <= 0) goto L_NextWave; + if ($@FIGHT_YETI_ROUND_TIMER + $@FIGHT_YETI_ROUND_PEN >= 120) goto L_NextWave; + goto L_Return_1; + +L_NextWave: + set $@FIGHT_YETI_ROUND_TIMER, 0; + + set $@FIGHT_YETI_WAVE, $@FIGHT_YETI_WAVE + 1; + if ($@FIGHT_YETI_WAVE > 10 && $@YETI_COUNT == 0) goto L_CleanUp; + if ($@FIGHT_YETI_WAVE > 10) goto L_Return_1; + set $@FIGHT_YETI_NUMBER, (1 + (1 * $@FIGHT_YETI_WAVE) + (2 * $@FIGHT_YETI_PLAYER_COUNT))/4; + set $@YETI_COUNT, $@YETI_COUNT + $@FIGHT_YETI_NUMBER; + + areamonster "031-3.gat", 80, 20, 160, 90, "", 1072, $@FIGHT_YETI_NUMBER, "Cindy::onPetDeath"; +// mapannounce "031-3.gat", "WAVE: " + $@FIGHT_YETI_WAVE + " NUMBER OF YETIS SPAWNED: " + $@FIGHT_YETI_NUMBER + " TOTAL YETIS: " + $@YETI_COUNT, 0; + goto L_Return_1; + +// Called on each player once every 5 seconds +onTick: + if (isdead(0)) end; + set $@FIGHT_YETI_PLAYER_COUNT, $@FIGHT_YETI_PLAYER_COUNT + 1; + end; + +onPetDeath: + set $@YETI_COUNT, $@YETI_COUNT - 1; + end; + +onInit: + initnpctimer; + stopnpctimer; +L_CleanUp: + areatimer "031-3.gat", 80, 20, 160, 90, 10, "Cindy::onReward"; + set $@FIGHT_YETI_STATUS, 0; + set $@FIGHT_YETI_PLAYER_COUNT, 0; + set $@FIGHT_YETI_WAVE, 1; + set $@FIGHT_YETI_ROUND_TIMER, 0; + killmonster "031-3.gat", "Cindy::onPetDeath"; + stopnpctimer; + setnpctimer 0; + end; + +onReward: + if (isdead(0)) end; +//TODO: determine, if and how many boss points should be added + set BOSS_POINTS, BOSS_POINTS + 10; + message strcharinfo(0), "You gain 10 Boss Points giving you a total of " + BOSS_POINTS; + if (@rescue_Cindy < 1) goto L_No_Progress; + set @rescue_Cindy, 2; + callsub S_Update_Mask; + message strcharinfo(0), "Cindy looks relieved and as if she wants to talk with you."; +L_No_Progress: + end; + +///////// +S_Update_Mask: + set QUEST_Nivalis_state, + (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK)) + | (@rescue_Cindy << @Q_Nivalis_state_SHIFT); + return; +} + + + + + + + + + + + + + diff --git a/npc/031-3_Cave/labyrinth.txt b/npc/031-3_Cave/labyrinth.txt new file mode 100755 index 00000000..a73085e3 --- /dev/null +++ b/npc/031-3_Cave/labyrinth.txt @@ -0,0 +1,281 @@ +//################################################################################# +//# +//# Warps for the labyrinth on christmas 2010 +//# +//# Authors: alastrim, PjotrOrial +//# +//# reviewed by: +//# +//# This is a labyrinth, having lots of warps in there. +//# These warps are activated on different days. +//# For each way there are 2 warps: one way and its way back. +//# +//################################################################################# + + +031-3.gat,205,264,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 149, 261; + end; +} + +031-3.gat,149,259,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 205, 266; + end; +} + +// If Donated > 1M < 1.5M - Maze=2 + +031-3.gat,225,282,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 274, 299; + end; +} + +031-3.gat,274,300,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 225, 283; + end; +} + +// Second Warp + +031-3.gat,283,271,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 269, 244; + end; +} + +031-3.gat,269,245,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 283, 272; + end; +} + +031-3.gat,148,150,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 128, 134; + end; +} + +// Third Warp +031-3.gat,139,258,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 155, 196; + end; +} + +031-3.gat,155,195,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 139, 259; + end; +} + +// First Warp +031-3.gat,142,301,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 97, 298; + end; +} + +031-3.gat,97,301,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 142, 298; + end; +} + +// Second Warp +031-3.gat,135,196,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 106, 231; + end; +} + +031-3.gat,106,232,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 135, 197; + end; +} + +// Third Warp +031-3.gat,286,190,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 227, 241; + end; +} + +031-3.gat,227,242,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 286, 191; + end; +} + +// Fourth Warp + +031-3.gat,236,211,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 187, 227; + end; +} + +031-3.gat,187,228,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 236, 212; + end; +} + + + +// First Warp +031-3.gat,94,254,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 54, 253; + end; +} + +031-3.gat,54,250,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 94, 257; + end; +} + +// Second Warp + +031-3.gat,103,199,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 52, 175; + end; +} + +031-3.gat,52,177,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 103, 201; + end; +} + +// Third Warp + +031-3.gat,212,193,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 207, 165; + end; +} + +031-3.gat,207,168,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 212, 195; + end; +} + +// Fourth Warp + +031-3.gat,235,167,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 195, 124; + end; +} + +031-3.gat,195,122,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 235, 165; + end; +} + +// If Donated > 2.5M < 3M - Maze=5 +// first warp + +031-3.gat,296,97,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 292, 125; + end; +} +031-3.gat,292,123,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 296, 95; + end; +} +// second warp +031-3.gat,289,164,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 228, 123; + end; +} +031-3.gat,228,121,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 289, 162; + end; +} +// third warp +031-3.gat,24,157,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 31, 142; + end; +} +031-3.gat,31,144,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 24, 159; + end; +} +// forth warp +031-3.gat,36,249,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 35, 224; + end; +} + +031-3.gat,35,226,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 36, 251; + end; +} + +// first warp +031-3.gat,34,25,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 281, 25; + end; +} +031-3.gat,281,22,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 34, 28; + end; +} +// # second warp +031-3.gat,283,48,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 275, 74; + end; +} +031-3.gat,275,73,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 283, 47; + end; +} +// # third warp +031-3.gat,26,178,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 36, 202; + end; +} +031-3.gat,36,200,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 26, 176; + end; +} + +// first warp +031-3.gat,91,125,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 36, 78; + end; +} +031-3.gat,36,80,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 91, 127; + end; +} +// # second warp +031-3.gat,52,78,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 192, 72; + end; +} + +031-3.gat,192,70,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 52, 76; + end; +} + + +// If Donated > 4M < 5M - Maze=8 +// first warp +031-3.gat,128,135,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 148, 152; + end; +} + +// # second warp +031-3.gat,232,93,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 200, 47; + end; +} +031-3.gat,200,50,0 script #ChristmasBarrier 127,1,1,{ + warp "031-3.gat", 232, 90; + end; +} + +031-3.gat,120,81,0 script #ChristmasBarrier 127,1,1,{ + if ($@FIGHT_YETI_STATUS == 1) goto L_Block; + warp "031-3.gat", 46, 27; + end; +L_Block: + message strcharinfo(0), "Some force seems to be blocking you from exiting."; + end; +} +031-3.gat,46,24,0 script #ChristmasBarrier 127,1,1,{ +if ($@FIGHT_YETI_STATUS == 1) goto L_Blocked; + warp "031-3.gat", 120, 79; + end; +L_Blocked: + message strcharinfo(0), "Some force seems to be blocking you from entering."; + end; +} diff --git a/npc/032-1_Outback/_import.txt b/npc/032-1_Outback/_import.txt new file mode 100644 index 00000000..ee0758e4 --- /dev/null +++ b/npc/032-1_Outback/_import.txt @@ -0,0 +1,4 @@ +map: 032-1.gat +npc: npc/032-1_Outback/_mobs.txt +npc: npc/032-1_Outback/_warps.txt +npc: npc/032-1_Outback/miriam.txt diff --git a/npc/032-1_Outback/_mobs.txt b/npc/032-1_Outback/_mobs.txt new file mode 100644 index 00000000..e24c0fde --- /dev/null +++ b/npc/032-1_Outback/_mobs.txt @@ -0,0 +1,7 @@ +// 032-1 Outback mobs + + + +032-1.gat,0,0,0 script Mob032-1 -1,{ + end; +} diff --git a/npc/032-1_Outback/_warps.txt b/npc/032-1_Outback/_warps.txt new file mode 100644 index 00000000..ca0183a2 --- /dev/null +++ b/npc/032-1_Outback/_warps.txt @@ -0,0 +1,3 @@ +// 032-1 Outback warps + +032-1.gat,64,52 warp ToCave -1,-1,032-3.gat,56,59 diff --git a/npc/032-1_Outback/miriam.txt b/npc/032-1_Outback/miriam.txt new file mode 100644 index 00000000..5f67bea4 --- /dev/null +++ b/npc/032-1_Outback/miriam.txt @@ -0,0 +1,142 @@ +// NPC place is provisory +032-1.gat,55,20,0 script Miriam 175,{ + + if (getskilllv(SKILL_SPEED)) goto L_fast; + if (getequipid(equip_torso) < 0) goto L_naked; + if (QUEST_MIRIAM_run != 0) goto L_checktime; + if (QUEST_MIRIAM_start != 0) goto L_wasting; + +L_teach: + mes "[Miriam]"; + mes "\"Hey, what is your problem? Why were you running like that? Are you hurt? Why so slow? I have seen slimes way faster than this!\""; + next; + menu + "What? Slow down! One question per time...", -, + "It seems like you need a rest.", L_rest; + + set @agi, readparam(bAgi); + set @torso$, getitemname(getequipid(equip_torso)); + set @weight, MaxWeight/Weight; + if (@weight < 3) goto L_heavyweight; + if (@agi < 90) goto L_slow; + if (countitem("SteelShield") > 0 || countitem("WarlordHelmet") > 0 || countitem("CrusadeHelmet") > 0 || countitem("WarlordPlate") > 0 || countitem("KnightsHelmet") > 0 || countitem("InfantryHelmet") > 0 || countitem("ChainmailShirt") > 0) goto L_heavymetal; + goto L_offer; + +L_heavyweight: + mes "[Miriam]"; + mes "\"Wow... Why do you carry so many things with you? You must be carrying more than one third of your own weight! I can't understand it... \""; + close; + +L_heavymetal: + mes "[Miriam]"; + mes "\"Hmm... I see... Another lazy slow warrior wasting his strenght carrying kilos of metal clothes... You people are very popular these days... \""; + next; + mes "\"Why no one sees the great advantages of a beautiful, flexible, lightweight armor nowadays? \""; + close; + +L_slow: + mes "[Miriam]"; + mes "Oh, wait, wait... " +@agi+ " Agility? Are you serious? What do you do with all your Character points? Put them all to 'Strenght'? Really... I dont even want to know... \""; + close; + +L_offer: + mes "[Miriam]"; + mes "\"Hmm! Even though you move like a snail, you look great on these clothes! They look very comfortable too... And it seems like you are not carrying too much weight.\""; + next; + if (!(getskilllv(SKILL_POOL))) goto L_noskill; + menu + "Yes, I really like this " +@torso$+ ".",-; + next; + mes "[Miriam]"; + mes "\"I see. I like the way you distributed your Character Points... " +@agi+ " points to Agility! You really know how to prepare yourself to a good fight!\""; + next; + mes "\"Well... I do not do this very often, but you really have a potential to be a good fighter and moving the way you do will not help! \""; + next; + mes "\"So, if you pass a small test I can teach you a skill! It will be very useful for you, since it can increase your running speed.\""; + next; + menu + "I'm in! What kind of test is it?",-, + "I dont think I need more speed right now",L_giveup; + next; + mes "[Miriam]"; + mes "\"Great! The test is simple. You need to run as fast as you can from the place where I am sitting to the mountains and talk to Pachua, the chief. When you get there and talk to Pachua, he will send a special smoke signal to me, so I can know how much time it took for you to go there.\""; + next; + mes "\"If you make it in a good time, I will teach you the special speeding skill, if not, you can always try again. So, are you ready?\""; + next; + menu + "Yes, let's do it!",-, + "No, I need to stretch my muscles first!",L_stretch; + + close2; + message strcharinfo(0), "Miriam quickly grabs your arm and pull you to the place where she is sitting."; + // Warp the player to the place where the NPC is defined, so he can't cheat. + warp "032-1.gat",55,21; + npctalk "Run " +strcharinfo(0)+ ", run!"; + set QUEST_MIRIAM_start, gettimetick(1); + end; + +L_naked: + mes "[Miriam]"; + mes "\"Hmmm?! Please put on some clothes before talking to me.\""; + close; + +L_rest: + mes "[Miriam]"; + mes "\"I don't need to rest. In fact, it seems like you need some serious workout sessions to improve your physical skills!\""; + close; + +L_noskill: + mes "[Miriam]"; + mes "\"For a person like you, I could even teach a useful skill! Too bad you don't have the basic abillities to learn it...\""; + close; + +L_giveup: + mes "[Miriam]"; + mes "\"Oh, that is bad... But if you change your mind, come back!\""; + close; + +L_stretch: + mes "[Miriam]"; + mes "\"Ok. Good idea... Stretching exercises can increase your flexibility and even prevent injuries!\""; + close; + +L_wasting: + mes "[Miriam]"; + mes "\"Don't waste your time talking to me! RUN and talk to Pachua!\""; + close; + +L_checktime: + if (QUEST_MIRIAM_run > 60) goto L_tryagain; + if (QUEST_MIRIAM_run <= 60) goto L_goodjob; + +L_tryagain: + mes "[Miriam]"; + mes "\"You needed " + QUEST_MIRIAM_run + " seconds to reach Pachua. It is not enough.\""; + set QUEST_MIRIAM_run, 0; + close; + +L_goodjob: + mes "[Miriam]"; + mes "\"Great job! You needed " + QUEST_MIRIAM_run + " seconds to reach Pachua. Very impressive for a person like you.\""; + next; + mes "\"Now I need you to relax. Do NOT move. This teaching process can be painful sometimes.\""; + next; + mes "Miriam stares into your eyes and starts to scream some strange words very close to your ears."; + next; + mes "You feel dizzy and as soon as you move your head and look to the ground, Miriam pushes you hard, sending you meters away from her."; + close2; +// warp player a few tiles back - Write it when the NPC place is defined + warp "032-1.gat",55,22; + set QUEST_MIRIAM_run, 0; + message strcharinfo(0), "[You gain 2500 experience points]"; + message strcharinfo(0), "[You learned Speed Skill]"; + setskill SKILL_SPEED, 1; + getexp 2500, 0; + close; + +L_fast: + mes "[Miriam]"; + mes "\"I hope you make a good use of your new skill... Take care!\""; + close; + +} diff --git a/npc/032-3_Cave/_import.txt b/npc/032-3_Cave/_import.txt new file mode 100644 index 00000000..de6feea0 --- /dev/null +++ b/npc/032-3_Cave/_import.txt @@ -0,0 +1,3 @@ +map: 032-3.gat +npc: npc/032-3_Cave/_mobs.txt +npc: npc/032-3_Cave/_warps.txt diff --git a/npc/032-3_Cave/_mobs.txt b/npc/032-3_Cave/_mobs.txt new file mode 100644 index 00000000..ea5bb75a --- /dev/null +++ b/npc/032-3_Cave/_mobs.txt @@ -0,0 +1,7 @@ +// 032-3 Cave mobs + + + +032-3.gat,0,0,0 script Mob032-3 -1,{ + end; +} diff --git a/npc/032-3_Cave/_warps.txt b/npc/032-3_Cave/_warps.txt new file mode 100644 index 00000000..d27b4bc2 --- /dev/null +++ b/npc/032-3_Cave/_warps.txt @@ -0,0 +1,4 @@ +// 032-3 Cave warps + +032-3.gat,128,33 warp ToDesert -1,-1,006-1.gat,30,124 +032-3.gat,56,61 warp toDesert -1,-1,032-1.gat,64,53 diff --git a/npc/_import.txt b/npc/_import.txt index 083e2fbe..be7341a3 100644 --- a/npc/_import.txt +++ b/npc/_import.txt @@ -1,3 +1,4 @@ +<<<<<<< HEAD import: npc/001-1_Tulimshar/_import.txt
import: npc/001-2_Tulimshar/_import.txt
import: npc/001-3_Tulimshar_arena/_import.txt
@@ -63,3 +64,76 @@ import: npc/029-1_Candor/_import.txt import: npc/029-3_Fight_Cave/_import.txt
import: npc/botcheck/_import.txt
import: npc/debugroom/_import.txt
+======= +import: npc/001-1_Tulimshar/_import.txt +import: npc/001-2_Tulimshar/_import.txt +import: npc/001-3_Tulimshar_arena/_import.txt +import: npc/001-4_Omars_house/_import.txt +import: npc/002-1_Sandstorm/_import.txt +import: npc/002-3_Desert_mines/_import.txt +import: npc/002-4_Desert_mines/_import.txt +import: npc/003-1_Beach/_import.txt +import: npc/003-2_Beach_House/_import.txt +import: npc/004-1_Beach/_import.txt +import: npc/004-2_Beach_House/_import.txt +import: npc/005-1_Snake_desert/_import.txt +import: npc/005-3_Snake_pit/_import.txt +import: npc/006-1_Desert_mountains/_import.txt +import: npc/006-3_Desert_mountain_caves/_import.txt +import: npc/007-1_Woodland/_import.txt +import: npc/008-1_Hurnscald_outskirts/_import.txt +import: npc/009-1_Hurnscald/_import.txt +import: npc/009-2_Hurnscald/_import.txt +import: npc/009-3_Cave_beneath_Hurnscald/_import.txt +import: npc/009-4/_import.txt +import: npc/010-1_Woodland/_import.txt +import: npc/010-2_Dimonds_Cove/_import.txt +import: npc/011-1_Woodland/_import.txt +import: npc/011-3_Hermits_cave/_import.txt +import: npc/011-4_Lake_cave/_import.txt +import: npc/011-5/_import.txt +import: npc/011-6/_import.txt +import: npc/012-1_Woodland_Hills/_import.txt +import: npc/012-3_Cave/_import.txt +import: npc/012-4_Cave/_import.txt +import: npc/013-1_Woodland_hills/_import.txt +import: npc/013-2_Magic_house/_import.txt +import: npc/013-3_Cave/_import.txt +import: npc/014-1_Woodland/_import.txt +import: npc/014-3_Cave/_import.txt +import: npc/015-1_Woodland/_import.txt +import: npc/015-3_Cave/_import.txt +import: npc/016-1_Woodland/_import.txt +import: npc/017-1_Woodland_hills/_import.txt +import: npc/017-2_Theater/_import.txt +import: npc/017-9_Backstage/_import.txt +import: npc/018-1_Woodland_mining_camp/_import.txt +import: npc/018-2_Woodland_mining_camp/_import.txt +import: npc/018-3_Cave/_import.txt +import: npc/019-1_Snow_field/_import.txt +import: npc/019-3_Snow_Cave/_import.txt +import: npc/020-1_Nivalis/_import.txt +import: npc/020-2_Nivalis/_import.txt +import: npc/020-3_Ice_cave/_import.txt +import: npc/021-1_Tulimshar/_import.txt +import: npc/021-2_Tulimshar/_import.txt +import: npc/022-1_Tulimshar/_import.txt +import: npc/024-1_Tulimshar_Canyon/_import.txt +import: npc/024-2_Tulimshar_Magic_School/_import.txt +import: npc/025-1_Woodland_Swamp/_import.txt +import: npc/026-1_Swamp/_import.txt +import: npc/027-1_Graveyard/_import.txt +import: npc/027-2_Caretakers_House/_import.txt +import: npc/027-3/_import.txt +import: npc/028-1/_import.txt +import: npc/028-3/_import.txt +import: npc/029-1_Candor/_import.txt +import: npc/029-3_Fight_Cave/_import.txt +import: npc/030-1_Snow_field/_import.txt +import: npc/031-1_NivalisPort/_import.txt +import: npc/031-2_Angelas_House/_import.txt +import: npc/031-3_Cave/_import.txt +import: npc/032-1_Outback/_import.txt +import: npc/032-3_Cave/_import.txt +import: npc/botcheck/_import.txt +>>>>>>> 1e1e26e1255a487a14ca99c60c3ab51ad3988f9b diff --git a/npc/functions/banker.txt b/npc/functions/banker.txt index 08b67229..2f738478 100644 --- a/npc/functions/banker.txt +++ b/npc/functions/banker.txt @@ -50,7 +50,7 @@ L_Dep_Input: "Go back", L_Start, "Try again", L_Dep_Input, "Deposit all", L_Dep_All, - "Quit", -; + "Nevermind", -; goto L_Nev; L_Dep_5k: @@ -119,7 +119,7 @@ L_With: "All of my money", L_With_All, "I've changed my mind", L_Start, "Quit", -; - next; + return; L_With_Input: input @Amount; @@ -130,7 +130,7 @@ L_With_Input: "Go back", L_Start, "Try again", L_With_Input, "Withdraw all", L_With_All, - "Quit", -; + "Nevermind", -; goto L_Nev; L_With_5k: diff --git a/npc/functions/clear_vars.txt b/npc/functions/clear_vars.txt index 07f05247..a4c24ae5 100644 --- a/npc/functions/clear_vars.txt +++ b/npc/functions/clear_vars.txt @@ -23,7 +23,7 @@ function script ClearVariables { set HWQUEST18, 0; set HWQUEST19, 0; set HWQUEST20, 0; - + // Christmas 2006 set XMASQUEST1, 0; set XMASQUEST2, 0; @@ -45,26 +45,62 @@ function script ClearVariables { set XMASQUEST18, 0; set XMASQUEST19, 0; set XMASQUEST20, 0; - + set QUEST_xmas07_state, 0; set QUEST_xmas07_milk, 0; set QUEST_xmas07_cookies, 0; set QUEST_xmas07_presents, 0; - + set QUEST_Easter08_state, 0; - + set Halloween08, 0; - + set QUEST_xmas08_state, 0; - + set QUEST_Easter09, 0; - + set Candyman, 0; // Halloween 2009 - + set QUEST_Christmas09_state, 0; - + + set QUEST_Easter09_slots, 0; + + // easter 2010 + // This must not be cleared: since some people would like to go to the easter island! + // set Easter_2010_QuestState, 0; + set Easter_2010_EggState1, 0; + set Easter_2010_EggState2, 0; + set Easter_2010_EggState3, 0; + set Easter_2010_EggState4, 0; + set Easter_2010_EggState5, 0; + + // halloween 2010 + set hween10, 0; + set hween10_collect_canpump, 0; + set hween10_credits, 0; + set hween10_collect, 0; + set hween10_collect_mmallow, 0; + set hween10_collect_jelskul, 0; + set hween10_bonecount, 0; + set hween10_collect_tondel, 0; + set hween10_paid, 0; + + // Xmas 2010: + set Count_Yellow, 0; + set Count_White, 0; + set Maze, 0; + set Yellow, 0; + set White, 0; + set Xmas2010, 0; + set Golbenez_Inn_Cost, 0; + + // these two vars are only used for time measurement. + // so it won't be needed after your run through the deserts. + set QUEST_MIRIAM_run, 0; + set QUEST_MIRIAM_start, 0; + if (#BankAccount < 0) goto FixBank; - + return; FixBank: @@ -81,7 +117,7 @@ L_Fix_Full: return; //Tulimshar and Mine Variables set Scorp, 0; - set Bugleg, 0; + set Bugleg, 0; set ChestQuest, 0; - + } diff --git a/npc/functions/dailyquest.txt b/npc/functions/dailyquest.txt index e62c604f..820516d6 100644 --- a/npc/functions/dailyquest.txt +++ b/npc/functions/dailyquest.txt @@ -34,10 +34,10 @@ L_Start: if (BaseLevel < @dq_level) goto L_Low_Level; if (DailyQuestPoints < @dq_cost) goto L_Not_Enough_Points; - mes "\"If you bring me " + @dq_count + " " + @dq_friendly_name$ + " I will give you a reward\""; - menu "I have them for you", L_Trade, - "Ok, Ill get them", -, - "I'm not going to help you", -; + mes "\"If you bring me " + @dq_count + " " + @dq_friendly_name$ + ", I will give you a reward.\""; + menu "I have what you want.", L_Trade, + "Ok, I'll get to work.", -, + "Nah, I'm not going to help you.", -; set @dq_return, 1; goto L_Exit; @@ -63,17 +63,17 @@ L_Exit_Good: goto L_Exit; L_Not_Enough: - if (!@dq_handle_return) mes "\"I said " + @dq_count + " " + @dq_friendly_name$ + ", learn to count\""; + if (!@dq_handle_return) mes "\"I said " + @dq_count + " " + @dq_friendly_name$ + "; you should learn to count.\""; set @dq_return, 3; goto L_Exit; L_Low_Level: - if (!@dq_handle_return) mes "\"Hey, you should go kill some things to get stronger\""; + if (!@dq_handle_return) mes "\"Hey, you should go kill some things to get stronger first.\""; set @dq_return, 0; goto L_Exit; L_Not_Enough_Points: - if (!@dq_handle_return) mes "\"You look exhausted, maybe you should rest some.\""; + if (!@dq_handle_return) mes "\"You look exhausted, maybe you should rest a bit.\""; set @dq_return, 2; goto L_Exit; diff --git a/npc/functions/ferry.txt b/npc/functions/ferry.txt index b9c0e320..95a176ec 100644 --- a/npc/functions/ferry.txt +++ b/npc/functions/ferry.txt @@ -2,11 +2,11 @@ function script Ferry { if (BaseLevel < 20) goto L_LowerCost; - set @cost_tulimshar, 1000; - set @cost_hurnscald, 1000; + set @cost_tulimshar, 500; + set @cost_hurnscald, 500; L_Start: - set @cost_candor, 3000; + set @cost_candor, 1500; mes "Where would you like to go?"; next; if (BaseLevel < 40) goto L_PlainMenu; @@ -67,7 +67,7 @@ L_NotEnoughGP: close; L_LowerCost: - set @cost_tulimshar, 500; - set @cost_hurnscald, 500; + set @cost_tulimshar, 250; + set @cost_hurnscald, 250; goto L_Start; } diff --git a/npc/functions/game_rules.txt b/npc/functions/game_rules.txt index 2870a46d..05fe2922 100644 --- a/npc/functions/game_rules.txt +++ b/npc/functions/game_rules.txt @@ -24,6 +24,7 @@ L_English: mes "4. No begging"; mes "5. Speak English on public chat"; mes "6. Treat others the same way you would like to be treated"; + mes "7. Do not use more than one character at the same time during battle"; next; mes "Botting will be determined by talking to players who are moving and/or attacking."; next; @@ -31,12 +32,13 @@ L_English: L_German: mes "Wir bitten um das Einhalten der folgenden Regeln:"; - mes "1. Keine Beleidigungen, Schimpfwoerter, Schmaehungen oder Rufmord"; + mes "1. Keine Beleidigungen, Schimpfwoerter, Schmaehungen oder Rufmord."; mes "2. Keine 'bots' (automatisierte Spieler). Dies beinhaltet JEGLICHE Teilnahme am Spiel waehrend der Abwesenheit des Spielers."; mes "3. Kein 'spamming' oder 'flooding' (schnelles Wiederholen von Nachrichten oder Aufforderungen zum Warenhandel)."; mes "4. Kein Betteln."; mes "5. Englisch ist die einzige zulaessige Sprache im oeffentlichen Raum."; mes "6. Behandelt andere so, wie Ihr behandelt werden wollt."; + mes "7. Kein Kaempfen mit mehr als einem Charakter."; mes "Jegliche Regelverstoesse koennen bestraft werden, entweder durch ein Zuruecksetzen der Charaktereigenschaften und -besitztuemer auf den Ausgangszustand, oder durch einen temporaeren oder permanenten Ausschluss aus dem Spiel."; next; mes "Automatisiertes Spielverhalten liegt vor, wenn ein sich bewegender/kaempfender Spieler nicht intelligent auf Gespraechsaufforderungen reagiert."; @@ -51,6 +53,7 @@ L_Dutch: mes "4. Verboden te bedelen"; mes "5. Spreek Engels op de publieke chat"; mes "6. Behandel andere zoals ook jij behandeld wilt worden"; + mes "7. Gebruik niet meer dan 1 karakter tegelijkertijd tijdens het vechten"; next; mes "Botten word bepaald door te praten tegen spelers die aan het bewegen en/of aanvallen zijn."; next; @@ -64,6 +67,7 @@ L_Danish: mes "4. Det er forbudt at tigge (for eksempel: Maa jeg ikke nok faa dit svaerd, kom nu, vaer nu soed... og saa videre)"; mes "5. Det er forbudt at snakke andre sprog end Engelsk, i den aabne chat. (Dog er det lovligt ved at bruge foelgende kommandoen /whisper)"; mes "6. Husk at goere mod andre, som du vil have de skal goere imod dig (opfoer dig ordenligt!)"; + mes "7. Brug ikke mere end et tegn pa samme tidspunkt i lobet af kampen"; next; mes "Botting bliver fastlagt paa grundlag af, at man snakker til andre spillere, der gaar rundt og/eller der angriber og de ikke svare igen."; next; @@ -77,6 +81,7 @@ L_French: mes "4. Ne demandez pas d'items ou d'argent (les echanges doivent se faire de preference sur forums.themanaworld.org)"; mes "5. Parlez anglais dans les salons de discussions publics (principalement en ville)"; mes "6. Traitez les autres de la meme maniere que vous voudriez etre traite(e)"; + mes "7. N'utilisez pas plus d'un personnage a la fois pendant les combats"; next; mes "L'utilisation de \"bot\" sera determinee en parlant aux joueurs(ses) en train de bouger et/ou d'attaquer."; next; @@ -90,6 +95,7 @@ L_Spanish: mes "4. Esta prohibida cualquier forma de mendicidad"; mes "5. Hable solamente en Ingles en el chat publico"; mes "6. Trata a los demas de la misma manera que te gustaria ser tratado"; + mes "7. No usar mas de un personaje al mismo tiempo durante batalla"; next; mes "El uso de programas automaticos se investigara hablando con jugadores que esten moviendose y/o atacando."; next; @@ -103,6 +109,7 @@ L_Swedish: mes "4. Tigg inte"; mes "5. Prata bara engelska i den offentliga chatten"; mes "6. Behandla andra som du vill bli behandlad"; + mes "7. Anvand inte flera karaktarer samtidigt under strid"; next; mes "Hysta misstankar om bottande kontrolleras genom att prata med spelaren under dess kringvandrande eller attackerande."; next; @@ -116,6 +123,7 @@ L_Portuguese: mes "4. Pedintes serao ignorados, ou banidos."; mes "5. Fale ingles em lugares publicos."; mes "6. Trate os outros da mesma maneira que quer ser tratado(a)."; + mes "7. Nao use mais de um character durante uma luta"; next; mes "O \"botting\" sera determinado, falando com os jogadores que se movem e/ou atacam."; next; @@ -129,6 +137,7 @@ L_Polish: mes "4. Zabrania sie zebrania"; mes "5. Na publicznym kanale rozmawiamy po angielsku"; mes "6. Traktuj innych tak jak sam chcesz byc traktowany"; + mes "7. Nie stosowac wiecej niz jeden znak w tym samym czasie bitwy"; next; mes "Uzywanie botow zostanie okreslone na podstawie rozmow z innymi graczami podczas aktywnosci gracza."; next; @@ -142,6 +151,7 @@ L_Italian: mes "4. Vietato implorare"; mes "5. Parlare solo inglese nella chat pubblica"; mes "6. Tratta gli altri giocatori come vuoi che gli altri trattino te."; + mes "7. Non usare piu di un personaggio allo stesso temp durante un combattimento"; next; mes "I bot saranno determinati in base alle risposte e ai movimenti dei giocatori esaminati."; next; diff --git a/npc/functions/magic.txt b/npc/functions/magic.txt index 2bf8ef64..4dadb2a9 100644 --- a/npc/functions/magic.txt +++ b/npc/functions/magic.txt @@ -23,12 +23,13 @@ function script MagicGainBasic { function script MagicTalkOptionsSetup { set @QQ_ELANORE, 1; set @QQ_MANASEED, 2; - set @QQ_MANAPOTION, 3; - set @QQ_WYARA, 4; - set @QQ_SAGATHA, 5; - set @QQ_AULDSBEL, 6; - set @QQ_IMP, 7; - set @QQ_OLDWIZ, 8; + set @QQ_MANAPOTION, 4; + set @QQ_WYARA, 8; + set @QQ_SAGATHA, 16; + set @QQ_AULDSBEL, 32; + set @QQ_IMP, 64; + set @QQ_OLDWIZ, 128; + set @QQ_ASTRALSOUL, 256; return; } @@ -40,11 +41,11 @@ function script MagicTalkOptionsSetup { function script MagicTalkMenu { - setarray @choice$, "", "", "", "", "", "", "", "", ""; + setarray @choice$, "", "", "", "", "", "", "", "", "", ""; set @choices_nr, 0; - setarray @choice_idx, 0, 0, 0, 0, 0, 0, 0, 0, 0; + setarray @choice_idx, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; - if (@ignore == @QQ_ELANORE) + if (@ignore & @QQ_ELANORE) goto L_Q_post_elanore; set @choice$[@choices_nr], "...Elanore the Healer?"; set @choice_idx[@choices_nr], @QQ_ELANORE; @@ -60,7 +61,7 @@ L_Q_post_elanore: set @choices_nr, @choices_nr + 1; L_Q_post_manaseed: - if (@ignore == @QQ_MANAPOTION) + if (@ignore & @QQ_MANAPOTION) goto L_Q_post_manapotion; if (!(MAGIC_FLAGS & MFLAG_KNOWS_MANAPOTION)) goto L_Q_post_manapotion; @@ -69,7 +70,7 @@ L_Q_post_manaseed: set @choices_nr, @choices_nr + 1; L_Q_post_manapotion: - if (@ignore == @QQ_WYARA) + if (@ignore & @QQ_WYARA) goto L_Q_post_wyara; if (!(MAGIC_FLAGS & MFLAG_KNOWS_WYARA)) goto L_Q_post_wyara; @@ -78,7 +79,7 @@ L_Q_post_manapotion: set @choices_nr, @choices_nr + 1; L_Q_post_wyara: - if (@ignore == @QQ_SAGATHA) + if (@ignore & @QQ_SAGATHA) goto L_Q_post_sagatha; if (!(MAGIC_FLAGS & MFLAG_KNOWS_SAGATHA)) goto L_Q_post_sagatha; @@ -87,7 +88,7 @@ L_Q_post_wyara: set @choices_nr, @choices_nr + 1; L_Q_post_sagatha: - if (@ignore == @QQ_AULDSBEL) + if (@ignore & @QQ_AULDSBEL) goto L_Q_post_auldsbel; if (!(MAGIC_FLAGS & MFLAG_KNOWS_AULDSBEL)) goto L_Q_post_auldsbel; @@ -96,7 +97,7 @@ L_Q_post_sagatha: set @choices_nr, @choices_nr + 1; L_Q_post_auldsbel: - if (@ignore == @QQ_OLDWIZ) + if (@ignore & @QQ_OLDWIZ) goto L_Q_post_oldwiz; if (!(MAGIC_FLAGS & MFLAG_KNOWS_OLD_WIZARD)) goto L_Q_post_oldwiz; @@ -105,7 +106,7 @@ L_Q_post_auldsbel: set @choices_nr, @choices_nr + 1; L_Q_post_oldwiz: - if (@ignore == @QQ_IMP) + if (@ignore & @QQ_IMP) goto L_Q_post_imp; if (!(MAGIC_FLAGS & MFLAG_KNOWS_IMP)) goto L_Q_post_imp; @@ -114,6 +115,17 @@ L_Q_post_oldwiz: set @choices_nr, @choices_nr + 1; L_Q_post_imp: + if (@ignore & @QQ_ASTRALSOUL) + goto L_Q_post_astralsoul; + if (!(getskilllv(SKILL_MAGIC))) + goto L_Q_post_astralsoul; + if (!(getskilllv(SKILL_POOL))) + goto L_Q_post_astralsoul; + set @choice$[@choices_nr], "...ways to improve my magic?"; + set @choice_idx[@choices_nr], @QQ_IMP; + set @choices_nr, @choices_nr + 1; +L_Q_post_astralsoul: + set @choice$[@choices_nr], "...never mind."; set @choice_idx[@choices_nr], 0; set @choices_nr, @choices_nr + 1; @@ -126,13 +138,14 @@ L_Q_post_imp: @choice$[5], -, @choice$[6], -, @choice$[7], -, - @choice$[8], -; + @choice$[8], -, + @choice$[9], -; set @menu, @menu - 1; if (@menu >= @choices_nr) set @menu, 0; - + set @c, @choice_idx[@menu]; return @c; } diff --git a/npc/functions/mob_points.txt b/npc/functions/mob_points.txt index 768b874d..8c53e36f 100644 --- a/npc/functions/mob_points.txt +++ b/npc/functions/mob_points.txt @@ -64,6 +64,16 @@ function script MobPoints { 36, // Giant Cave Maggot 40, // Moggun 100, // Terranite + 10, // Pumpkin + 10, // Bandit + 20, // Bandit Lord + 50, // Vampire Bat + 100, // The Lost + 200, // Reaper + 20, // Scythe + 20, // Ball Lightning + 30, // Ice Element + 40, // Yeti // Add more here 0; // END diff --git a/npc/halloween/2010/gak.txt b/npc/halloween/2010/gak.txt new file mode 100644 index 00000000..92d559d8 --- /dev/null +++ b/npc/halloween/2010/gak.txt @@ -0,0 +1,1256 @@ +010-1.gat,29,48,0 script Gak 188, { + + if ($hween10 == 2) goto L_Event_Over; + + if (hween10 > 4 && hween10 < 9) goto L_Collecting_Sweets; + if (hween10 == 9) goto L_Hunger_Sated; + if (hween10 == 10) goto L_Reward_Returning; + if (hween10 == 11) goto L_Miscount_Bugfix; + if (hween10 == 12) goto L_Gaks_Little_Shop; + + if ($hween10 == 1) goto L_Event_Over_2; + + if (hween10 == 1) goto L_Knows_Gak; + if (hween10 == 2) goto L_Gak_Has_Tongue; + if (hween10 == 3) goto L_Bones_Check; + if (hween10 == 4) goto L_Request_Sweets; + + mes "[Broken Skeleton]"; + set hween10, 1; + mes ""; + mes "\"Gak... gak, gak! Gak gak gak gak!\""; + close; + +L_Knows_Gak: + if (countitem("Tongue") > 0) goto L_Has_Tongue; + mes "[Gak]"; + mes ""; + mes "\"Gak gak! Gak gak, gak gak gak!\""; + close; + +L_Has_Tongue: + mes "[Gak]"; + mes ""; + mes "The skeleton notices a slimy, dead tongue you have with you, and eyes it eagerly."; + next; + mes "[Gak]"; + mes ""; + mes "At least, you assume he is eager. \"Gak gak gak! Gak gak gak gak GAK GAK!\""; + next; + menu + "Give the tongue to him", L_Give_Tongue, + "Taunt him by showing him the tongue, but not giving it", L_Give_Tongue_Die, + "Walk away", -; + close; + +L_Give_Tongue: + if (countitem("Tongue") < 1) goto L_Tongue_Gone_Die; + delitem "Tongue", 1; + set hween10, 2; + mes "[Gak]"; + mes ""; + mes "The skeleton grabs the tongue from you and shoves it into his mouth. After stretching his jaw for some moments, he grins at you unpleasantly."; + next; + mes "[Gak]"; + mes ""; + mes "\"Ssso! What bringsss you here, mortal?\""; + next; + menu + "I just chanced upon you here, and figured you could use a tongue.", L_Thanks, + "The Hallowe'en event is FINALLY here, of course I'm going to play it.", L_Whut, + "Nothing.", -; + close; + +L_Tongue_Gone_Die: + mes "[Gak]"; + mes ""; + mes "He reaches out for the tongue, but then realises you don't have it. With an angry a look on his face as a skeleton can have, he slashes at you with his remaining arm."; + goto L_Die; + +L_Give_Tongue_Die: + mes "[Gak]"; + mes ""; + mes "Angrily, the skeleton reaches out and claws you with his remaining arm."; + if (countitem("Tongue") < 1) goto L_Die; + next; + delitem "Tongue", 1; + mes "[Gak]"; + mes ""; + mes "As you fall, he takes the tongue from you anyway."; + set hween10, 2; + goto L_Die; + +L_Die: + close2; + itemheal -Hp -1, 0; + end; + +L_Thanks: + mes "[Gak]"; + mes ""; + mes "\"Well, that wasss mighty thoughtful of you, friend... I wonder if perhapsss you could do me another favour?\""; + next; + menu + "Sure! Anything you want.", L_Sure, + "I'll be right, thanks.", -; + close; + +L_Whut: + mes "[Gak]"; + mes ""; + mes "\"What?\""; + close; + +L_Gak_Has_Tongue: + mes "[Gak]"; + mes ""; + mes "\"Hello again, little friend. Could you posssibly do me another favour?\""; + next; + menu + "I sure can, what is it?", L_Sure, + "Uh, no thanks.", -; + close; + +L_Sure: + mes "[Gak]"; + mes ""; + mes "\"It wasss nice if you to bring me thisss tongue, but asss you can sssee I still have a few things missing.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Maybe you could bring me a few bonesss so I could patch myssself up?\""; + next; + menu + "I'm on it!", L_Bones, + "Nah, that sounds a bit boring.", -; + close; + +L_Bones: + set hween10, 3; + mes "[Gak]"; + mes ""; + mes "\"Wonderful! I can't wait until I can properly walk around attacking thingsss again.\""; + close; + +L_Bones_Check: + mes "[Gak]"; + mes ""; + mes "\"Hallo again. Have you brought me any bonesss?\""; + next; + setarray @menuitems$, "", "", "", "", ""; + set @c, 0; + + if (countitem("Bone") < 5) goto L_bones_four; + set @menuitems$[@c], "Take five bones."; + set @menuid[@c], 0; + set @c, @c + 1; + +L_bones_four: + if (countitem("Bone") < 4) goto L_bones_three; + set @menuitems$[@c], "Take four bones."; + set @menuid[@c], 1; + set @c, @c + 1; + +L_bones_three: + if (countitem("Bone") < 3) goto L_bones_two; + set @menuitems$[@c], "Take three bones."; + set @menuid[@c], 2; + set @c, @c + 1; + +L_bones_two: + if (countitem("Bone") < 2) goto L_bones_one; + set @menuitems$[@c], "Take two bones."; + set @menuid[@c], 3; + set @c, @c + 1; + +L_bones_one: + if (countitem("Bone") < 1) goto L_bones_menu; + set @menuitems$[@c], "Take one bone."; + set @menuid[@c], 4; + set @c, @c + 1; + +L_bones_menu: + set @menuitems$[@c], "I don't have any bones."; + set @menuid[@c], 5; + set @c, @c + 1; + menu + @menuitems$[0], -, + @menuitems$[1], -, + @menuitems$[2], -, + @menuitems$[3], -, + @menuitems$[4], -, + @menuitems$[5], -, + @menuitems$[6], -; + set @menu, @menu -1; + if (@menu >= @c) close; + if (@menuid[@menu] == 5) goto L_offer_no_items; + mes "[Gak]"; + mes ""; + mes "Ssso many? Jussst what I needed. Let me sssee if they are sssuitable..."; + next; + + if (@menuid[@menu] == 0) set @bonecount, 5; + if (@menuid[@menu] == 1) set @bonecount, 4; + if (@menuid[@menu] == 2) set @bonecount, 3; + if (@menuid[@menu] == 3) set @bonecount, 2; + if (@menuid[@menu] == 4) set @bonecount, 1; + if (countitem("Bone") < @bonecount) goto L_Not_Enough_Bones; + + delitem "Bone", @bonecount; + set @bonecount, @bonecount + 1; + set @hween10_givebones, 0; + +// in a rush, raising and then lowering is the best thing I can think of to make the loop work properly. + +L_Bone_Loop: + set @bonecount, @bonecount - 1; + if @bonecount < 1 goto L_Bones_Feedback; + set @temp1, rand(@bonecount + 5); + if @temp1 > @bonecount goto L_Bone_Loop; + set @hween10_givebones, @hween10_givebones + 1; + goto L_Bone_Loop; + +L_Not_Enough_Bones: + mes "[Gak]"; + mes ""; + mes "\"Hey... you don't have that many bonesss!\""; + close; + +L_offer_no_items: + mes "[Gak]"; + mes ""; + mes "\"Sssucch a pity...\""; + close; + +L_Bones_Feedback: + if (@hween10_givebones == 0) goto L_Bones_Feedback_None; + mes "[Gak]"; + mes ""; + mes "\"Hmm... I think I can ussse " + @hween10_givebones + " of thessse bonesss.\""; + next; + set hween10_bonecount, hween10_bonecount + @hween10_givebones; + if (hween10_bonecount > 7) goto L_Enough_Bones; + mes "[Gak]"; + mes ""; + mes "\"But I ssstill need more! Pleassse bring them to me.\""; + close; + +L_Bones_Feedback_None: + mes "[Gak]"; + mes ""; + mes "\"I can't ussse any of theesse boness. I need more!\""; + close; + +L_Enough_Bones: + set hween10, 4; + mes "[Gak]"; + mes ""; + mes "\"And that should be enough for my dark purposssesss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Now... I wonder...\" He flicks his tongue around his dry and ancient teeth. \"I wonder if you could get me sssomething to eat?\""; + next; + mes "[Gak]"; + mes ""; + mes "\"All thisss hard work gathering bonesss hasss made me...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"HUNGRY!\""; + next; + menu + "Uh, what would you like to eat?", L_Request_Sweets, + "This is a burial site, I'm sure there are plenty of worms around.", L_Worms, + "Me too, actually. I gotta eat. Bye!", -; + close; + +L_Worms: + mes "[Gak]"; + mes ""; + mes "\"True... but they are sssmall, and not asss sssweet asss what I'd like!\""; + next; + +L_Request_Sweets: + mes "[Gak]"; + mes ""; + mes "\"Asss I'm sssure you know, it wasss Hallowe'en recently. I'll bet you had great time collecting sssweetsss with your friendsss, hm?\""; + next; + menu + "The guy organising that was too lazy - it never happened.", L_Time_Management, + "Well, what's it to you?", L_Leftover_Sweets, + "You're creeping me out.", -; + close; + +L_Time_Management: + mes "[Gak]"; + mes ""; + mes "\"That'sss jussst too bad. People with poor time management shouldn't be put in charge of important thingsss like that.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But never mind. Even if you didn't get to go trick-or-treating, there will ssstill be plenty of dropped sssweets lying around.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"People are ssso carelesss! To my benefit, of courssse. Ssso what do you sssay? Can you bring me asss many sssweetsss as you can find?\""; + menu + "I guess so.", L_Confirm_Sweethunting, + "No, I'd rather eat 'em myself.", -; + close; + +L_Leftover_Sweets: + mes "[Gak]"; + mes ""; + mes "\"Each year at Hallowe'en, all you little girlsss and boysss run about begging for candy. And each year, ssso much of it is dropped, and wasssted!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But I don't mind eating sssweetsss just becaussse they're a couple of weeksss old! Bring me lotsss, and you shall have a reward.\""; + next; + menu + "Well, okay then.", L_Confirm_Sweethunting, + "Wait, free sweets!? Why did no one tell me?", -; + close; + +L_Confirm_Sweethunting: + set hween10, 5; + mes "[Gak]"; + mes ""; + mes "\"My ssstomach groansss with anticipa - uh, well, my bonesss creak with anticipation. Tell all your little friendsss to bring my any sssweetsss they find, too: I really am VERY hungry!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Remember, though, and thisss isss important: the more sssweetsss YOU PERSSSONALLY bring me, the better YOUR reward will be!\""; + close; + +L_Collecting_Sweets: + mes "[Gak]"; + mes ""; + mes "\"Ssso, do you have any sssweetsss for me?\""; + next; + setarray @menuitems$, "", "", "", "", ""; + set @c, 0; + + if (countitem("TonoriDelight") < 1) goto L_Sweets_Marshmallow; + set @menuitems$[@c], "Tonori Delight."; + set @menuid[@c], 0; + set @c, @c + 1; + +L_Sweets_Marshmallow: + if (countitem("Marshmallow") < 1) goto L_Sweets_JellySkull; + set @menuitems$[@c], "Marshmallow."; + set @menuid[@c], 1; + set @c, @c + 1; + +L_Sweets_JellySkull: + if (countitem("JellySkull") < 1) goto L_Sweets_CandyPumpkin; + set @menuitems$[@c], "Jelly Skull."; + set @menuid[@c], 2; + set @c, @c + 1; + +L_Sweets_CandyPumpkin: + if (countitem("CandyPumpkin") < 1) goto L_Sweets_Menu; + set @menuitems$[@c], "Candy Pumpkin."; + set @menuid[@c], 3; + set @c, @c + 1; + +L_Sweets_Menu: + set @menuitems$[@c], "I don't have any sweets."; + set @menuid[@c], 4; + set @c, @c + 1; + menu + @menuitems$[0], -, + @menuitems$[1], -, + @menuitems$[2], -, + @menuitems$[3], -, + @menuitems$[4], -, + @menuitems$[5], -; + set @menu, @menu -1; + if (@menu >= @c) close; + + if (@menuid[@menu] == 0) set @giveitem$, "TonoriDelight"; + if (@menuid[@menu] == 1) set @giveitem$, "Marshmallow"; + if (@menuid[@menu] == 2) set @giveitem$, "JellySkull"; + if (@menuid[@menu] == 3) set @giveitem$, "CandyPumpkin"; + // We need something to handle what happens when we select that the character does not have any sweets + if (@menuid[@menu] == 4) goto L_offer_no_items; + + mes "[Gak]"; + mes ""; + mes "\"How many of those do you have for me?\""; + next; + menu + "Take all of them.", -, + "One hundred of them.", -, + "Fifty of them.", -, + "Ten of them.", -, + "Five of them.", -, + "One of them.", -, + "This many...", -; + set @menu, @menu - 1; + + if (@menu == 0) set @givecounter, countitem(@giveitem$); + if (@menu == 1) set @givecounter, 100; + if (@menu == 2) set @givecounter, 50; + if (@menu == 3) set @givecounter, 10; + if (@menu == 4) set @givecounter, 5; + if (@menu == 5) set @givecounter, 1; + if (@menu == 6) input @givecounter; + if (@menu > 6) close; + if (countitem(@giveitem$) < @givecounter) goto L_Not_Enough_Sweeties; + delitem @giveitem$, @givecounter; + if ($hween10 == 1) set hween10, hween10 + 1; + if (@giveitem$ == "TonoriDelight") set $hween10_tondel, $hween10_tondel + @givecounter; + if (@giveitem$ == "Marshmallow") set $hween10_mmallow, $hween10_mmallow + @givecounter; + if (@giveitem$ == "JellySkull") set $hween10_jelskul, $hween10_jelskul + @givecounter; + if (@giveitem$ == "CandyPumpkin") set $hween10_canpump, $hween10_canpump + @givecounter; + if (@giveitem$ == "TonoriDelight") set hween10_collect_tondel, hween10_collect_tondel + @givecounter; + if (@giveitem$ == "Marshmallow") set hween10_collect_mmallow, hween10_collect_mmallow + @givecounter; + if (@giveitem$ == "JellySkull") set hween10_collect_jelskul, hween10_collect_jelskul + @givecounter; + if (@giveitem$ == "CandyPumpkin") set hween10_collect_canpump, hween10_collect_canpump + @givecounter; + + set hween10_collect, hween10_collect + @givecounter; + + mes "[Gak]"; + mes ""; + mes "\"Thank you for your generousss donation to my caussse. Ssso far, you and your friendsss have brought me " + $hween10_tondel + " Tonori Delightsss, " + $hween10_mmallow + " Marshmallowsss, " + $hween10_jelskul + " Jelly Ssskullsss, and " + $hween10_canpump + " Candy Pumpkinsss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"You persssonally have brought me " + hween10_collect + " sssweetsss.\""; + next; + if (hween10 > 8) goto L_Hunger_Sated; + mes "[Gak]"; + mes ""; + if (hween10 == 5) mes "\"But I ssstill need more! I'm ssstill HUNGRY!\""; + if (hween10 == 6) mes "\"I ssstill need a few more, however... I'm ssstill HUNGRY!\""; + if (hween10 == 7) mes "\"I'd like more, though. I'm ssstill hungry.\""; + if (hween10 == 8) mes "\"Hmm... what a meal! Although, jussst a couple more sssweetsss wouldn't hurt. I'm ssstill a bit peckish.\""; + close; + +L_Not_Enough_Sweeties: + mes "[Gak]"; + mes ""; + mes "\"Hey! Don't teassse me; you know very well that you don't have that many sssweetsss.\""; + close; + +L_Hunger_Sated: + set hween10, 10; + mes "[Gak]"; + mes ""; + mes "The last of the sweets falls out the bottom of the skeleton's skull, bouncing down between his ribs before tumbling out to join the countless thousands that lie in a vast mound of them beside him."; + next; + mes "[Gak]"; + mes ""; + mes "\"Buuurp!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Now that, my friend, was a DELICIOUSSS meal, if I do sssay ssso myssself. It'sss not every day I get to feassst upon sssuch delectable treatsss.\""; + next; + menu + "Okay, whatever. Now how about my reward?", L_Reward, + "I'm pleased to hear it. Now... a reward, perhaps?", L_Polite_Request, + "It was my pleasure.", L_My_Pleasure; + close; + +L_Reward_Returning: + mes "[Gak]"; + mes ""; + mes "\"Hello again, friend.\""; + next; + menu + "Can I have a reward now?", L_Reward, + "Hello.", -; + close; + +L_Polite_Request: + mes "[Gak]"; + mes "\"Of courssse a reward! Jussst who do you think I am, not to giving rewardsss to people who were kind enough to give me a bit of a hand?\""; + next; + goto L_Reward; + +L_My_Pleasure: + mes "[Gak]"; + mes ""; + mes "\"Good, good!\""; + close; + +L_Reward: + mes "[Gak]"; + mes ""; + // took out here a lot + mes "\"Well, you DID bring me an awful lot of sssweetsss. I have with me a sssmall collection of preciousss itemsss, thingsss I've acquired in variousss waysss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I can let you have sssome thingsss out of thisss collection. You brought me " + hween10_collect + " sssweetsss, ssso I will give you itemsss worth twice that amount of gold piecesss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"For example, if you had given me 1,000 sssweetsss I would give you 2,000GP worth of itemsss. Except actually, I don't like marshmallowsss that much. Thossse are equivalent to jussst 1GP each.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Not to say that I'm sure of your currencccy here... but it sssshould give you an idea, yessss?\""; + next; + set hween10, 12; + set hween10_credits, hween10_collect_tondel + hween10_collect_jelskul + hween10_collect_canpump; + set hween10_credits, hween10_credits * 2; + set hween10_credits, hween10_credits + hween10_collect_mmallow; + mes "[Gak]"; + mes ""; + mes "\"Looksss like you have " + hween10_credits + " ... 'creditsss', shall we call them? Now, let'ss have a look at my waresss.\""; + next; + goto L_Shop_Inventory; + +L_Gaks_Little_Shop: + mes "[Gak]"; + mes ""; + mes "\"You have " + hween10_credits + " creditsss. Tell me what you'd like to buy - or asssk me about it. Sssome of thessse itemsss have very interesssting ssstories attached to them.\""; + next; + +L_Shop_Inventory: + menu + "Opera Mask (9,000 credits)", L_Buy_OperaMask, + "Tell me about the Opera Mask.", L_Info_OperaMask, + "Jester Mask (7,000 credits)", L_Buy_JesterMask, + "Tell me about the Jester Mask.", L_Info_JesterMask, + "Witch's Hat (4,500 credits)", L_Buy_WitchsHat, + "Tell me about the Witch's Hat.", L_Info_WitchsHat, + "Goblin Mask (2,500 credits)", L_Buy_GoblinMask, + "Tell me about the Goblin Mask.", L_Info_GoblinMask, + "Guy Fawkes Mask (800 credits)", L_Buy_GuyFawkesMask, + "Tell me about the Guy Fawkes Mask.", L_Info_GuyFawkesMask, + "Scissors (500 credits)", L_Buy_Scissors, + "Tell me about the Scissors.", L_Info_Scissors, + "Shock Sweet (200 credits)", L_Buy_ShockSweet, + "Tell me about Shock Sweets.", L_Info_ShockSweet, + "Bone Arrow (1 credit)", L_Buy_BoneArrow, + "Tell me about Bone Arrows.", L_Info_BoneArrow, + "Nothing today, thanks.", -; + close; + +L_Buy_OperaMask: + if (hween10_credits < 9000) goto L_Too_Few_Credits; + mes "[Gak]"; + mes ""; + mes "\"Ah, yesss! A friend of mine usssed to wear that masssk. He wasss very famousss in hisss time - had quite a fandom.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Are you sssure you want to buy the Opera Masssk?\""; + next; + menu + "Yes.", -, + "No.", L_Gaks_Little_Shop; + getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inventory; + if (hween10_credits < 9000) goto L_Too_Few_Credits; + set hween10_credits, hween10_credits - 9000; + set hween10_paid, hween10_paid + 9000; + getitem "OperaMask", 1; + mes "[Gak]"; + mes ""; + mes "\"Enjoy it!\""; + next; + goto L_Gaks_Little_Shop; + +L_Buy_JesterMask: + if (hween10_credits < 7000) goto L_Too_Few_Credits; + mes "[Gak]"; + mes ""; + mes "\"I'm sssure you'll have fun with thisss masssk. 'Fun', get it?\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Are you sssure you want to buy the Jessster Masssk?\""; + next; + menu + "Yes.", -, + "No.", L_Gaks_Little_Shop; + getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inventory; + if (hween10_credits < 7000) goto L_Too_Few_Credits; + set hween10_credits, hween10_credits - 7000; + set hween10_paid, hween10_paid + 7000; + getitem "JesterMask", 1; + mes "[Gak]"; + mes ""; + mes "\"Enjoy it!\""; + next; + goto L_Gaks_Little_Shop; + +L_Buy_WitchsHat: + if (hween10_credits < 4500) goto L_Too_Few_Credits; + mes "[Gak]"; + mes ""; + mes "\"I was wondering witch one you would take.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Are you sssure you want to buy the Witch'sss Hat?\""; + next; + menu + "Yes.", -, + "No.", L_Gaks_Little_Shop; + getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inventory; + if (hween10_credits < 4500) goto L_Too_Few_Credits; + set hween10_credits, hween10_credits - 4500; + set hween10_paid, hween10_paid + 4500; + getitem "WitchHat", 1; + mes "[Gak]"; + mes ""; + mes "\"Enjoy it!\""; + next; + goto L_Gaks_Little_Shop; + +L_Buy_GoblinMask: + if (hween10_credits < 2500) goto L_Too_Few_Credits; + mes "[Gak]"; + mes ""; + mes "\"Hmm, I never much liked that one myssself.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Are you sssure you want to buy the Goblin Masssk?\""; + next; + menu + "Yes.", -, + "No.", L_Gaks_Little_Shop; + getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inventory; + if (hween10_credits < 2500) goto L_Too_Few_Credits; + set hween10_credits, hween10_credits - 2500; + set hween10_paid, hween10_paid + 2500; + getitem "GoblinMask", 1; + mes "[Gak]"; + mes ""; + mes "\"Enjoy it!\""; + next; + goto L_Gaks_Little_Shop; + +L_Buy_GuyFawkesMask: + if (hween10_credits < 800) goto L_Too_Few_Credits; + mes "[Gak]"; + mes ""; + mes "\"Cheap, huh? Barely more than a penny for thisss guy.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Are you sssure you want to buy the Guy Fawkesss Masssk?\""; + next; + menu + "Yes.", -, + "No.", L_Gaks_Little_Shop; + getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inventory; + if (hween10_credits < 800) goto L_Too_Few_Credits; + set hween10_credits, hween10_credits - 800; + set hween10_paid, hween10_paid + 800; + getitem "GuyFawkesMask", 1; + mes "[Gak]"; + mes ""; + mes "\"Enjoy it!\""; + next; + goto L_Gaks_Little_Shop; + +L_Buy_Scissors: + if (hween10_credits < 500) goto L_Too_Few_Credits; + mes "[Gak]"; + mes ""; + mes "\"My own pair of ssscissssorsss! But I haven't been needing them lately asss much asss I usssed to.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Are you sssure you want to buy the Scissors?\""; + next; + menu + "Yes.", -, + "No.", L_Gaks_Little_Shop; + getinventorylist; + if (@inventorylist_count == 100) goto L_Full_Inventory; + if (hween10_credits < 500) goto L_Too_Few_Credits; + set hween10_credits, hween10_credits - 500; + set hween10_paid, hween10_paid + 500; + getitem "Scissors", 1; + mes "[Gak]"; + mes ""; + mes "\"Enjoy it!\""; + next; + goto L_Gaks_Little_Shop; + +L_Buy_ShockSweet: + if (hween10_credits < 200) goto L_Too_Few_Credits; + mes "[Gak]"; + mes ""; + mes "\"I'll be glad to be rid of sssome of thessse terrifying sssweetsss...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"How many would you like to buy?\""; + next; + menu + "1", -, + "2", -, + "3", -, + "4", -, + "5", -, + "None", -; + + if (@menu < 0 || @menu > 6) close; + if (@menu == 6) goto L_Gaks_Little_Shop; + set @shocksweets, @menu; + set @cost, @shocksweets * 200; + if (hween10_credits < @cost) goto L_Too_Few_Credits; + getinventorylist; + if (@inventorylist_count == 100 && countitem("ShockSweet") < 1) goto L_Full_Inventory; + set hween10_credits, hween10_credits - @cost; + set hween10_paid, hween10_paid + @cost; + getitem "ShockSweet", @shocksweets; + mes "[Gak]"; + mes ""; + mes "\"I would sssay 'enjoy them', but I doubt you will.\""; + next; + goto L_Gaks_Little_Shop; + +L_Buy_BoneArrow: + if (hween10_credits < 1) goto L_Too_Few_Credits; + mes "[Gak]"; + mes ""; + mes "\"Deadly, but nearly weightlessss. A good choice!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"How many would you like to buy?\""; + next; + menu + "1", -, + "5", -, + "10", -, + "50", -, + "100", -, + "500", -, + "1000", -, + "None", -; + + if (@menu < 1 || @menu > 8) close; + if (@menu == 1) set @bonearrows, 1; + if (@menu == 2) set @bonearrows, 5; + if (@menu == 3) set @bonearrows, 10; + if (@menu == 4) set @bonearrows, 50; + if (@menu == 5) set @bonearrows, 100; + if (@menu == 6) set @bonearrows, 500; + if (@menu == 7) set @bonearrows, 1000; + if (@menu == 8) goto L_Gaks_Little_Shop; + if (hween10_credits < @bonearrows) goto L_Too_Few_Credits; + getinventorylist; + if (@inventorylist_count == 100 && countitem("BoneArrows") < 1) goto L_Full_Inventory; + set hween10_credits, hween10_credits - @bonearrows; + set hween10_paid, hween10_paid + @bonearrows; + getitem "BoneArrows", @bonearrows; + mes "[Gak]"; + mes ""; + mes "\"Usse them wisssely. They're hard to come by.\""; + next; + goto L_Gaks_Little_Shop; + +L_Too_Few_Credits: + mes "[Gak]"; + mes ""; + mes "\"Are you trying to kid me? You haven't enough creditsss for that!\""; + next; + goto L_Gaks_Little_Shop; + +L_Info_OperaMask: + mes "[Gak]"; + mes ""; + mes "\"Ah, yesss. My Opera Masssk. There'sss quite a ssstory sssurrounding thisss one...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"One day in Tonori, many yearsss ago, the Princessss Azura mysssteriousssly vanished. The King'sss men sssearched high and low, but found no trace of her.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"It wasss assssumed - correctly - that she mussst have been kidnapped. Ssso the King put a hefty reward on her safe return - a hundred thousssand gold piecesss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"However, the Princessss wasss not returned. One year after she had disssappeared, the King raisssed the reward by fifty thousssand gold - and each year after, too, for ssstill the Princessss wasss not returned.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Asss time went by, the King became more and more sssure that hisss daughter mussst be dead. He wasss, however, wrong...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"At that very moment, a pirate galleon wasss sssailing merrily along the Rivalry Coassst. Itsss crew sssang ssea-shantiesss and bounced around the rigging.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Sssuddenly, though, the pirate captain ssspied sssomething terrible ahead of them. Water ssswirled around and around like a giant bathtub being emptied....\""; + next; + mes "[Gak]"; + mes ""; + mes "\"A maelssstrom!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The captain tried to tell hisss crew to turn the ship around, but they couldn't hear him over their sssinging. They were ssswept, ssspiraling, into the cavernousss hole in the sssea.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The piratesss realisssed, then, what was happening, and ssstopped sssinging at once. The captain ordered them to remove the sssailsss and tie them down like parachutesss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The plan worked. Asss they fell, the air caught under the sssailsss and ssslowed the falling of the ship. Sssoon they landed gently on the bottom of the ocean.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Peering around in the gloom, the pirate captain sssaw a prone figure on a rock nearby. He climbed out of the ship and hurried over.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But before he could reach them, a jet of flame ssstreaked passst above him, and a great ssslimy creature emerged from the sssea in front of him...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"A dragon!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The captain jumped out of the way asss the dragon once again breathed fire. The captain turned to sssee hisss ship in flamesss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The dragon sssmiled evilly and opened itsss mouth to eat the captain. But when it had ssset the ship on fire it had accidentally lit the fusssesss of the cannonsss, and at thisss moment they fired.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Cannonball after cannonball thudded into the dragon, sssending it reeling back into the sssea. The captain picked up the figure from the rock, and looked about to sssee how he might essscape.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"And asss he did, it grew very dark; looking above him, he sssaw that the maelssstorm wasss collapsssing. He held the figure tightly to keep them sssafe, and braced himssself.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The water hit them from either ssside asss though Triton, the god of the sssea, had clapped hisss handsss upon them. They were lifted from the bottom and carried with great ssspeed to the sssurface.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"They rossse bessside a ship of the King'sss navy, aboard it a mage - who had closssed the maelssstorm - and the King himssself, who had come to watch.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"And asss both he and the pirate captain looked down to the figure whom the latter had found on the bottom of the sssea, they gasssped at who it wasss...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The Princessss!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"In return for finding her, the pirate captain was given sssix hundred thousssand gold piecesss, a Royal Pardon for Piracy, a Pirate Permit and the Princessss'sss hand in marriage.\""; + next; + mes "[Gak]"; + mes ""; + mes "The skeleton pausssesss for a moment to sssigh in rememberance. \"It wasss a very good opera,\" he continues."; + next; + mes "[Gak]"; + mes ""; + mes "\"After it had ended, I went backssstage and bought an opera masssk sssigned by the lead actor, and alssso a nice cossstume that I needed for work.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Thisss isss, of courssse, that very masssk. It'sss worth a lot becausssse of the autograph.\""; + next; + goto L_Gaks_Little_Shop; + +L_Info_JesterMask: + next; + mes "[Gak]"; + mes ""; + mes "\"Ah, yesss. Quite a ssscary little thing, isssn't it? And it hasss quite a hissstory, too.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Back in the lassst daysss of the Tonorian King Efeniunkanduiti Khan there were many plotsss to remove him from the throne, and the biggessst sssource of thessse plotsss wasss the Bell Sssociety.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The King wasss quite worried about all thisss, asss you would imagine, ssso he hired a jessster to make light of any misssfortune.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The jessster wasss undoubtedly funny, and the ssscary yet sssilly cossstume he wore ssseemed to emphasssissse the hilarity of him. The King cheered consssiderably with the jessster juggling, doing sssomersssaults and telling punsss in hisss court.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But there wasss one man who didn't like the jessster at all: Prince Akhendo-Al Mosssesssmuchasssdad Khan. The jessster'sss masssk concealed hisss experessssion, which disssconcerted Akhendo-Al greatly.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"He tried to explain hisss feelingsss to hisss father, but the King wasssn't paying attention. He wasss too busssy laughing at the joke the jessster had jussst made about Akhendo-Al'sss sssour face.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But the King should have lissstened before it wasss too late. One night a piercing ssscream woke the palace, and ssservants came hurrying to the King'sss chamber: but he wasss already dead. A long, wicked knife had been thrussst into hisss heart.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Akhendo-Al looked around at the gathered ssservantsss and guardsss, and ssaw what he had sssussspected from the firssst: the jessster wasss gone!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"He raced back the way he had come, and down to the entrance hall. Asss he reached the main doorsss, a voice behind him laughed. He turned to sssee the jessster at the top of the ssstairsss he had jussst dessscended!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The chassse wasss on. Akhendo-Al ran asss fassst asss he could back up the ssstairsss, and down a passssage which the jessster had disssappeared down. Laughter echoed around him asss he ran through the palace, occassssionally catching a glimpssse of the jessster ahead.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Sssoon, Akhendo-Al found himssself at the top of the palace'sss bell tower. On the other ssside of the great bellsss he sssaw the jessster, sssilhouetted againssst the moon, and sssmiling cruelly.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"'There's no escape for you now,' Akhendo-Al told him, and drew hisss sssabre. 'Try to run, and I shall cut you down.'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But the jessster sssmiled, and turned to ssstand at the edge of the tower, looking down at the moat that lay far below.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Akhendo-Al ssstared asss the jessster opened hisss armsss wide...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Then the jessster turned, and shrugged. 'But I've already accomplished my tasssk. The tyrant king isss dead.'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The Prince tied the jessster'sss handsss with sssome ssspare bell-rope, and took him down to a group of palace guards. Together, they led the jessster to the dungeonsss and sssecured him. Angrily, the Prince removed the man'sss masssk. Then he and the guardsss gasssped in sssurprissse.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The man wasss Gorrik, captain of the palace guard!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Gorrik gave a mossst long-winded explanation of why he wasss dressssed asss a jessster, and assssurred Akhendo-Al that he had certainly not killed the king. But the prince wasss now king, and he knew that Gorrik wasss the murderer. He sssentenced the man to execution.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"To hisss disssapointment, the old guard captain essscaped and fled the country. He came here, and thisss isss the very jessster masssk he wore.\""; + next; + goto L_Gaks_Little_Shop; + +L_Info_WitchsHat: + next; + mes "[Gak]"; + mes ""; + mes "\"Which? Ah, yesss, that one. Hmm. Well, many yearsss ago thessse foressstsss usssed to be home to witchesss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I came upon one myssself sssoon after I arrived in Argaes, many yearsss ago, while I wasss alive. I had recently been forced to leave my mother country, where we had not many treesss - the vassst foressstsss were very ssstrange to me.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I wasss ssstranded far to the Sssouth of here - that area isss ssstill wildernesss today. For daysss I travelled through the thick foressstsss, looking for civilation or - at leassst - sssomething to eat.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Eventually I came upon a sssmall cottage in a clearing. Overcome with hunger, I thought I might knock and asssk if they had anything to eat. But asss I approached, I noticed sssomething very ssstrange...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The entire houssse wasss made of sssweeetsss! The walls were bricksss of tonori delight, the wallsss were translucent jelly ssskullsss sssquished into a pane, the roof wasss thatched with marshmallow and the ground wasss paved with flattened candy pumpkinsss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I quickly forgot about asssking for food and ssset about eating the houssse. I took great handfulsss from the wallsss and jammed them into my mouth. It lessss than a minute my face wasss sssmeared all over, and my handsss ssso covered in sssticky sssweetsss that you couldn't sssee any ssskin.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Then the door sssuddenly opened, and out ssstepped what I knew at once wasss a witch. The long black cloak, the pointy black hat, and the broomssstick she clutched in one hand aided me in thisss deduction.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Well, there'sss really only one thing you can do when a witch catchesss you eating her wallsss. You run for it. But I barely had time to move before she cassst an evil ssspell. I fell forward on my face, and felt myssself being dragged back toward her by invisssible forcesss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Thessse sssame forcesss then flipped me over onto my back. The witch looked furiousssly angry. 'Why,' she sssaid, 'are you eating my wall?'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The anssswer 'Becaussse I wasss hungry' ssseemed a fairly obviousss one to me, but you don't act sssmart to a witch. I told her I had been unaware that the cottage wasss inhabited.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Well, that ssset her glaring even more. 'You didn't see the smoke coming from the chimney? You didn't stop to consider that sweets left lying around in a wood are hardly likely to be so clean and fresh and... well... there?'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I complimented her on how fine her sssweetsss were. She sssighed wearily.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"'But you've no idea,' she told me, 'how tiresome it is to keep them looking like that. I'm always cooking up more sweets for repairs, which I need to do constantly because my walls are always getting eaten by vermin.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"'I have a large store of sweets underneath my house, to which I add and from which I take every morning. Patching holes, shaving away layers of sweets that have grown mouldy and replacing with a thin layer of new sweets... and when it rains! You wouldn't believe!'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"She glanced up at the roof of her houssse. 'I have a huge big sheet of waterproof canvas,' she went on. 'And as soon as it looks like rain I have to rush out here and tie it over my roof - if this house gets rained on, that's the end of it, I tell you. I'd have to rebuild from scratch.'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I hadn't realisssed what hard work the upkeep for a houssse made from sssweetsss wasss. I wasss now very sssorry for eating ssso much of her houssse without even asssking, and I told her ssso. But she glared again.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"'Never you mind MY worries,' she told me. 'You should be more concerned about your own!'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I remember ssswallowing nervousssly. 'My worriesss?'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"'I hope you don't think you're leaving here,' sssaid the witch. 'You're staying and working for me until you've repaid what you ate.'\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Thisss wasssn't ssso bad asss I'd firssst thought it would be. I had three mealssss a day of the witch'sss cooking - not sssweetsss, but real mealsss and they were ever ssso much nicer. The work wasss hard, but I had many interesssting conversssationsss with the witch.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"It took sssome time to repay my debt, but finally I had worked enough. The witch - whossse name wasss Alissssa - gave me a bag of sssweetsss to take with me when I left. But I didn't want to go - what wasss there for me in the North?\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Ssso I ssstayed, in fact. We ate that bag of sssweetsss together, and from then on we did half the choresss each. Thossse were great daysss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But it wasss dangerousss, living down there in the Sssouth, back then. One night were were attacked by a tribe of goblinsss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I tried to protect Alissssa, but I wasss killed. I don't know what happened to her, becaussse it wasss many yearsss before I returned from the dead.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"When I did, I found myssself lying in a clearing in the foressst. The bracken wasss thickly growing and there were many young treesss, but sssearching around I dissscovered a trapdoor leading into a cellar. I wasss in the remainsss of our houssse.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"When I returned from the cellar, I ssspotted sssomething black lying in the grassss. It wasss Alissssa's pointy hat - unharmed by the yearsss becaussse of itsss magic.\""; + next; + mes "[Gak]"; + mes ""; + mes "The skeleton sighs as well as he can without lungs. \"Thisss witch'sss hat isss, of courssse, that very one. I've hung on to it for sssuch a long time - you couldn't imagine how long. I think it'sss time to let it go. If you truly want it, you can have it.\""; + next; + goto L_Gaks_Little_Shop; + +L_Info_GoblinMask: + mes "[Gak]"; + mes ""; + mes "\"Aha, yesss. There usssed to be a village far to the Sssouth where they wore thossse.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"In thossse daysss there were many goblin tribesss down there, who would regularly attack human villagesss. No one really knew why, it wasss jussst what goblinsss did.\" He looks sad for a moment. \"Well, in thisss village - which wasss called Turnap - they devisssed a clever ssscheme to protect themssselvesss from the goblinsss...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"They made themssselvesss masssksss, like thisss one, to look like goblinsss. They figured the goblinsss wouldn't attack them if they did thisss.\" He grins like only a skeleton can. "; + next; + mes "[Gak]"; + mes ""; + mes "\"Of courssse, thossse goblinsss jussst thought the people of Turnap were another tribe that wasss invading there territory. They attacked and killed everyone.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I had lived nearby for sssome time, and had been given thisss masssk to protect myssself on one of my visssitsss there. It did me asss much good asss it did them...\""; + next; + mes "[Gak]"; + mes ""; + mes "\"You can have it, if you want, but jussst remember: it won't protect you from the goblinsss!\""; + next; + goto L_Gaks_Little_Shop; + +L_Info_GuyFawkesMask: + mes "[Gak]"; + mes ""; + mes "\"Over in Tonori there isss a traditional celebration known asss 'Guy Fawkesss Day'. Sssee, many yearsss ago there wasss a guy named Fawkesss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"He wasss a member of a sssecret sssociety. The Bell Sssociety, it wasss called. Their aim wasss to rid Tonori of itsss king, Efeniunkanduiti Khan.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Now, Fawkesss was a pretty exciteable guy. He had thessse visssionsss of blowing up the entire palace. The other membersss of the sssociety thought thisss wasss unnecessssary, but would neverthelessss be pretty cool.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Ssso, over time, they acquired enough explosssivesss to put Fawkesss' plansss into action. One dark night in late Autumn they gained entry to the palace, and placed great barrelsss of explosssivesss in ssstrategic locationsss.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Then came the time to light the fussse. The othersss went outssside to watch the show, and Fawkesss crept back down the cellarsss, where the ten-minute fussse lay waiting to be lit.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Unfortunately, it wasss at that moment that sssome of the Palace Guard showed up. They were a disssobient pair - they rarely lissstened to the commandsss of their ssseniorsss, and were currently sssneaking down to the cellarsss to sssteal themssselves sssome wine.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Of courssse, when they sssaw Fawkesss about to light the fussse they quickly ssseized him and tied him to a possst. After they had poured themssselvesss a drink, they ssstarted to interrogate him.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But dessspite their tauntsss and no matter how many timesss they hit him, Fawkesss sssaid nothing. He wasss a brave guy.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Eventually, the guardsss told him that even if he didn't ssspeak, they could sssee that he had been trying to blow up the palace. They were completely drunk by thisss time, and sssaid that once they had gone to relieve themssselvesss they would hang him right there in the cellar.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Asss it isss tradional to do before executing sssomeone, the guardsss gave Fawkesss a pipe for hisss lassst sssmoke. They then left to ussse the toilet.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"It'sss rather obviousss what happened next. Once he wasss sssure they had gone, Fawkesss rolled himssself over in hisss bondsss and pressssed the sssmoking pipe againssst the fussse.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The ressst of the Bell Sssociety, ssstanding outssside the palace, had a magnificent view asss the centre of the palace was blown into the sssky and the wallsss crumpled outwardsss. Asss Fawkesss had not returned, they guessssed that he mussst not have been able to essscape.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The two palace guardsss, unfortunately, sssurvived. Asss the wall collapsssed they crashed into the moat along with the ressst of the rubble, but managed to free themssselves.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The Bell Sssociety essscaped, sssad for their lossss of Fawkesss but jubilant that they had sssuccesssfully killed the King. Unfortunately, the newssspaper next day revealed that he had not even been in the palace at the time! He wasss not even hurt!\""; + next; + mes "[Gak]"; + mes ""; + mes "\"The people of Tulimshar thought it very funny that sssuch a lot of effort had come to nothing. The palace was of courssse dessstroyed, but the Bell Sssociety had failed. Now we celebrate Guy Fawkesss day, in a lasssting jessst at the wasssted effort of the Bell Society.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Thisss masssk is meant to look like Fawkesss, but it doesssn't really. He wasssn't sssuch a smiley guy.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"I don't like Guy Fawkesss Day myssself, ssso I'm ssselling it cheaply.\""; + next; + goto L_Gaks_Little_Shop; + +L_Info_Scissors: + mes "[Gak]"; + mes ""; + mes "\"Yesss, my old ssscissssorsss. I had to cut my own hair with them once, to disssguissse myssself - which I had to do to essscape the country unnoticed.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"It'sss rather a long ssstory, but... well, I wasss in fact running from my execution. I came to Argaesss ssso that I didn't have to lossse my head.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"But that'sss long in the passst. Here and now, they're very good for changing your hairssstyle without bothering to go all the way to the barber.\""; + next; + goto L_Gaks_Little_Shop; + +L_Info_ShockSweet: + mes "[Gak]"; + mes ""; + mes "\"Thossse? Shocking thingsss...\""; + next; + goto L_Gaks_Little_Shop; + + +L_Info_BoneArrow: + mes "[Gak]"; + mes ""; + mes "\"Ahh, yessss. I happen to have sssso many leftover bonesss from what people have been giving me. I couldn't take them all, of courssse... there were very few that were responsssive enough for I needed, and now, I have the bessst.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Would be ssssssuch a pity to wassste the leftoverss though... I've been enchanting the ressst for usse as weaponssss. Nothing too ssspecial, but they are verry light.\""; + next; + goto L_Gaks_Little_Shop; + +L_Event_Over: + if (hween10 < 5) goto L_Event_Over_1; + if (hween10 < 13) goto L_Event_Over_2; + mes "[Gak]"; + mes ""; + mes "\"Well, it'sss been very nice meeting you, friend, but I think I'll be heading off sssoon. I hear the Northern farmsss are pleasssant at this time of year.\""; + close; + +L_Event_Over_1: + mes "[Gak]"; + mes ""; + mes "\"Hmm, hello. And goodbye.\""; + close; + +L_Event_Over_2: + mes "[Gak]"; + mes ""; + mes "\"Thank you for thossse sssweetsss, they were quite deliciousss. But I think I'll be leaving sssoon.\""; + close; + +L_Full_Inventory: + mes "[Gak]"; + mes ""; + mes "\"Ssseems you don't have room for thisss.\""; + close; + +L_Miscount_Bugfix: + if (hween10_collect_canpump != 0) goto L_Do_Miscount_Bugfix; + set hween10, 12; + goto L_Gaks_Little_Shop; + +L_Do_Miscount_Bugfix: + + mes "[Gak]"; + mes ""; + mes "\"Er.\" While his expression is as stony as ever, he sounds quite embarrassed."; + next; + mes "[Gak]"; + mes ""; + mes "\"Seems I forgot some thingsss earlier... you should actually have " + (hween10_collect_canpump << 1) + " more creditsss than I calculated before.\""; + next; + mes "[Gak]"; + mes ""; + mes "\"Sssorry.\""; + next; + + menu + "\"Hmph. Well, you can correct that now, right?", -; + + mes "[Gak]"; + mes ""; + mes "\"Of courssse. It is done. Sssorry about that\""; + set hween10_credits, hween10_credits + (hween10_collect_canpump << 1); + set hween10, 12; + next; + goto L_Gaks_Little_Shop; + +} + diff --git a/npc/items/scissors.txt b/npc/items/scissors.txt new file mode 100644 index 00000000..6fc01cb5 --- /dev/null +++ b/npc/items/scissors.txt @@ -0,0 +1,13 @@ +function script useScissors { + if (rand(3)) + goto L_Change; + message strcharinfo(0), "Whoops!"; + itemheal -20 - rand(Hp >> 1), 0; + getitem "Scissors", 1; + end; + +L_Change: + setlook 1, rand(17); + getitem "Scissors", 1; + end; +} diff --git a/npc/items/shock_sweet.txt b/npc/items/shock_sweet.txt new file mode 100644 index 00000000..3fc6d8e0 --- /dev/null +++ b/npc/items/shock_sweet.txt @@ -0,0 +1,14 @@ +function script useShockSweet { + if (rand(5)) + goto L_Change; + message strcharinfo(0), "Yuck, this tastes like earwax!"; + itemheal -20 - (Hp >> 2), 0; + end; + +L_Change: + setlook 6, 127; + message strcharinfo(0), "Gah! That was some strong stuff!"; + sc_start sc_poison, 1, 20; + misceffect 15, strcharinfo(0); + end; +} diff --git a/npc/scripts.conf b/npc/scripts.conf index acda50a6..42622c1b 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -18,6 +18,8 @@ npc: npc/functions/evil_obelisk.txt // Item Functions npc: npc/items/purification_potion.txt +npc: npc/items/scissors.txt +npc: npc/items/shock_sweet.txt npc: npc/items/unreleased_item.txt npc: npc/items/restricted_item.txt @@ -73,3 +75,8 @@ import: npc/_import.txt // Easter 2010 // When enabling, some entries in 028-1 would also need to be uncommented, the warp from 028-1 would need to be commented out. The changes to the old woman and some other NPCs weren't able to be preserved, but are recorded in the git repository. //import: npc/easter/2010/_import.txt + +// Halloween 2010 +// npc: npc/halloween/2010/gak.txt + +// import: npc/xmas/2010/_import.txt diff --git a/npc/xmas/2010/_import.txt b/npc/xmas/2010/_import.txt new file mode 100644 index 00000000..e68c6992 --- /dev/null +++ b/npc/xmas/2010/_import.txt @@ -0,0 +1,2 @@ +npc: npc/xmas/2010/santa.txt +npc: npc/xmas/2010/golbanez.txt diff --git a/npc/xmas/2010/golbanez.txt b/npc/xmas/2010/golbanez.txt new file mode 100755 index 00000000..0b145ca9 --- /dev/null +++ b/npc/xmas/2010/golbanez.txt @@ -0,0 +1,320 @@ +//################################################################################# +//# +//# Golbanez for Christmas 2010 +//# +//# Authors: alastrim, PjotrOrial +//# +//# reviewed by: +//# +//# This is Golbanez, he took Santa Claus as a hostage. +//# Santa will be accessible only if players give what golbenez want. +//# if the player reach santa, he will donate some stuff to the players. +//# +//################################################################################# + +// Please, remove the debug script bofore releasing the quest. + +//031-3.gat,215,294,0 script Debug 204,{ + +// mes "What you want to do?"; +// menu +// "Change 'Maze'",-, +// "Change Golbenez_Inn_Cost(Your Donations)",_cost, +// "Change Xmas2010",_xmas, +// "Clean all variables.",_clean, +// "Nothing",_end; + +// mes "Old Value: " + Maze; +// input Maze; +// mes "New Value: " + Maze; +// close; + +//_xmas: +// mes "Old Value: " + Xmas2010; +// input Xmas2010; +// mes "New Value: " + Xmas2010; +// close; + +//_cost: +// mes "Old Value: " + Golbenez_Inn_Cost; +// input Golbenez_Inn_Cost; +// mes "New Value: " + Golbenez_Inn_Cost; +// close; + +//_clean: +// mes "Golbenez_Inn_Cost Old Value: " + Golbenez_Inn_Cost; +// set Golbenez_Inn_Cost, 0; +// mes "Golbenez_Inn_Cost New Value: " + Golbenez_Inn_Cost; +// mes "Maze Old Value: " + Maze; +// set Maze, 0; +// mes "Maze New Value: " + Maze; +// mes "Xmas2010 old value: " + Xmas2010; +// set Xmas2010, 0; +// mes "Xmas2010 New Value: " + Xmas2010; +// mes "Yellow Old Value: " + Yellow; +// set Silver, 0; +// mes "Yellow New Value: " + Yellow; +// mes "White Old Value: " + White; +// set Golden, 0; +// mes "White New Value: " + White; +// mes "Count_White Old Value: " + Count_White; +// set Count_White, 0; +// mes "Count_White New Value: " + Count_White; +// mes "Count_Yellow Old Value: " + Count_Yellow; +// set Count_Yellow, 0; +// mes "Count_Yellow New Value: " + Count_Yellow; + + +// close; + +//_end: +// close; + +//} + +031-3.gat,215,296,0 script #Golbenez#_M 204,{ + + if (Golbenez_Inn_Cost >= 5000000) goto Glb_Inn_Enough; + if (Xmas2010 > 0) goto L_Intro; + if (BaseLevel < 40) goto L_Young; + + mes "[Golbenez]"; + mes "\"Mortal! I am Golbenez! I have broken through the barriers of space and time!\""; + next; + mes "\"Well to let you know, I have taken Santa Claus hostage.\""; + next; + mes "\"This may sound hard to you... But I need lots of stuff for building the way to place of leisure."; + next; + mes "\"So if you want to have gifts at Christmas... we should make a deal: Bring me money."; + next; + menu + "But I am broke!",L_Broke, + "Ok, but how much do you need?",-; + mes "[Golbenez]"; + mes "\"Not much. A few millions would do!\""; + next; + menu + "WHAT! But no one has so much money!",-, + "Ehh... I dont like Christmas anyway... Bye!",L_Close; + + mes "[Golbenez]"; + mes "\"Hey, you think I dont know about your inflation problems? Dont try to fool me, you must be filthy rich!\""; + next; + menu + "Ok, you got me. Im rich!",-, + "Im not rich! But is there any other way to help you?",-; + + mes "[Golbenez]"; + mes "\"Well... What I really want is money, but I can propose a different way to help Santa. When I took Santa as hostage he tried to resist and, in the process of submitting him by force, a lot of present boxes were dropped in the ground.\""; + next; + mes "\"I was intrigued by those boxes... They were Yellow and White. When I finally took control of the situation, I noticed that the monsters in the cave stole all the Boxes! Now, here is my idea: if you get ALL the boxes back to me, I can release santa.\""; + next; + mes "\"Im willing to consider a conversion of each Present Box donated to an amount in Gold Pieces. So, a Yellow Present is equivalent to 50.000 Gold Pieces and a White Present, 100.000 Gold Pieces. I am pretty sure he dropped 40 Yellow and 30 White boxes. So, if you bring me all of them, it would be equivalent to 5 million Gold Pieces, exactly what I was going to ask you.\""; + next; + mes "\"But don't be a fool. You will find these presents only with the monsters in the Ice Cave where Santa is hidden.\""; + next; + mes "\"So, bring me Money and/or Present Boxes and Santa can be released. Now, there is one more thing. Santa is in a very complicated Ice Cave in nivalis. I can control all the entrances in this cave. And I will only let you reach Santa after you pay me what I want.\""; + next; + mes "\"If you choose to find the present boxes, instead of paying in Gold Pieces, it is going to be easier for you if you bring them in small lots. Don't wait until you have everything. Remember: The more you give me, the closer you can get to santa.\""; + next; + +L_Intro: + if (Xmas2010 == 0) set Xmas2010, 1; + mes "\"So far, you have brought presents and money in a total value of " + Golbenez_Inn_Cost + " gold pieces. The people of your world have brought me " + $Golbenez_Inn_Cost + " gold pieces. What would you like to give?\""; + +L_Menu: + + menu + "I'd like to spend some money.", Glb_money, + "I'd like to give some Yellow presents.", -, + "I'd like to give some White presents.", -, + "Why do you want present boxes?",Glb_whypresents, + "Can I bring other items?", Glb_otheritems, + "Nevermind.", Glb_nvm; + + // in this array the items should be filled in. Remember to change the ID when the boxes are added to item_db. + setarray @menuitem[2], "4021", "4022"; + setarray @menuvalue[2], 50000, 100000; + + mes "\"How many presents do you want to give?\""; + + input @count; + + if (countitem(@menuitem[@menu]) < @count ) goto Glb_noitems; + if (@menuitem[@menu] == 4021) goto L_Check_Yellow; + if (@menuitem[@menu] == 4022) goto L_Check_White; + +L_Check_Yellow: + // If you have already donated more than you have collected in the right way (Via script), + // then whatever you have donated so far will remain, but if you have some spare boxes, + // it will be not possible to give it. + if (Count_Yellow > Yellow) set Yellow, Count_Yellow; + if (Count_Yellow + @count > Yellow) goto L_Fail_Box; + + if (Count_Yellow >= 40) goto L_Done_Yellow; + if (@count > Yellow) goto L_Fail_Box; + delitem @menuitem[@menu], @count; + set Count_Yellow, Count_Yellow + @count; + set @Give, (@count * @menuvalue[@menu]); + goto Golbenez_pay_presents; + +L_Check_White: + // If you have already donated more than you have collected in the right way (Via script), + // then whatever you have donated so far will remain, but if you have some spare boxes, + // it will be not possible to give it. + if (Count_White > White) set White, Count_White; + if (Count_White + @count > White) goto L_Fail_Box; + + if (Count_White >= 30) goto L_Done_White; + if (@count > White) goto L_Fail_Box; + delitem @menuitem[@menu], @count; + set Count_White, Count_White + @count; + set @Give, (@count * @menuvalue[@menu]); + goto Golbenez_pay_presents; + +L_Fail_Box: + mes "[Golbenez]"; + mes "\"How did you get those present boxes? I am monitoring the cave and I do not remember to see you getting this by yourself. I do not like this.\""; + close; + +L_Done_Yellow: + mes "[Golbenez]"; + mes "\"You already gave me all the Yellow Boxes that I wanted. I don't even want to know how you got these boxes.\""; + close; + +L_Done_White: + mes "[Golbenez]"; + mes "\"You already gave me all the White Boxes that I wanted. I don't even want to know how you got these boxes.\""; + close; + +Glb_money: + input @Give; + if (@Give <= 0) close; + if (zeny < @Give) goto Glb_Inn_NotEnoughZeny; + goto Golbenez_pay; + +Glb_checkGlAn: + set @glob_an$ , "Golbenez: " + strcharinfo(0) + " accounted to free santa"; + + // depending on the absolute amount setup another global announcement. + if( @Give >3000000 ) goto Golbenez_an_5; + if( @Give > 2000000 ) goto Golbenez_an_4; + if( @Give > 1000000 ) goto Golbenez_an_3; + if( @Give > 700000 ) goto Golbenez_an_2; + if( @Give > 350000 ) goto Golbenez_an_1; + if (Golbenez_Inn_Cost < 5000000) goto L_Needmore; + if (Golbenez_Inn_Cost >= 5000000) goto Glb_Inn_Enough; + close; + +Golbenez_an_1: + set @glob_an$, @glob_an$ + " with a great effort."; + goto Golbenez_an; + +Golbenez_an_2: + set @glob_an$, @glob_an$ + " with an honest contribution."; + goto Golbenez_an; + +Golbenez_an_3: + set @glob_an$, @glob_an$ + " with a great effort. Such a generous person."; + goto Golbenez_an; + +Golbenez_an_4: + set @glob_an$, @glob_an$ + " with a remarkable effort. Impressive!"; + goto Golbenez_an; + +Golbenez_an_5: + set @glob_an$, @glob_an$ + " with a huge effort. What a honorable donation!"; + goto Golbenez_an; + +Golbenez_an: + announce @glob_an$, 0; + if (Golbenez_Inn_Cost < 5000000) goto L_Needmore; + if (Golbenez_Inn_Cost >= 5000000) goto Glb_Inn_Enough; + close; + +Golbenez_pay: + set Golbenez_Inn_Cost, Golbenez_Inn_Cost + @Give; + set $Golbenez_Inn_Cost, $Golbenez_Inn_Cost + @Give; + set zeny, zeny - @Give; + goto Glb_checkGlAn; + +Golbenez_pay_presents: + set Golbenez_Inn_Cost, Golbenez_Inn_Cost + @Give; + set $Golbenez_Inn_Cost, $Golbenez_Inn_Cost + @Give; + if (Golbenez_Inn_Cost < 5000000) goto L_Needmore; + if (Golbenez_Inn_Cost >= 5000000) goto Glb_Inn_Enough; + close; + + +Glb_Inn_NotEnoughZeny: + mes "[Golbenez]"; + mes "\"You don't have as much as you say you do. Come back when you can give the gold pieces you say you can.\""; + close; + +Glb_noitems: + mes "[Golbenez]"; + mes "\"You don't have as many as you say you do. Come back when you have enough.\""; + close; + +Glb_nvm: + mes "[Golbenez]"; + mes "\"That's too bad.\""; + close; + +Glb_whypresents: + mes "[Golbenez]"; + mes "\"The presents contain some sort of spiritual attachment that aids in the creation of dimensional connections to this plane of existence. The white ones contain the stronger spiritual attachment, followed by the yellow and then green, blue and purple present boxes. But I am not interested in the last three kinds.\""; + close; + +Glb_otheritems: + mes "[Golbenez]"; + mes "\"No you cannot!\""; + next; + mes "\"I will not discuss any further, mortal!\""; + close; + + +L_Needmore: + mes "[Golbenez]"; + mes "\"You brought me the equivalent to " +Golbenez_Inn_Cost+ " Gold Pieces. This is not enough.\""; + next; + mes "\"Keep working. The closer you get to the amount of money I need, the closer you can get to Santa on that big Ice cave.\""; + + if (Golbenez_Inn_Cost >= 500000 && Golbenez_Inn_Cost < 1000000) set Maze, 1; + if (Golbenez_Inn_Cost >= 1000000 && Golbenez_Inn_Cost < 1500000) set Maze, 2; + if (Golbenez_Inn_Cost >= 1500000 && Golbenez_Inn_Cost < 2000000) set Maze, 3; + if (Golbenez_Inn_Cost >= 2000000 && Golbenez_Inn_Cost < 2500000) set Maze, 4; + if (Golbenez_Inn_Cost >= 2500000 && Golbenez_Inn_Cost < 3000000) set Maze, 5; + if (Golbenez_Inn_Cost >= 3000000 && Golbenez_Inn_Cost < 3500000) set Maze, 6; + if (Golbenez_Inn_Cost >= 3500000 && Golbenez_Inn_Cost < 4000000) set Maze, 7; + if (Golbenez_Inn_Cost >= 4000000 && Golbenez_Inn_Cost < 5000000) set Maze, 8; + + close; + +L_Broke: + mes "[Golbenez]"; + mes "\"Then say goodbye to christmas.\""; + close; + +L_Close: + close; + +L_Young: + mes "[Golbenez]"; + mes "\"You are too young, even for mortal standards. You can't do anything to save santa.\""; + close; + +Glb_Inn_Enough: + set Maze, 9; + mes "[Golbenez]"; + mes "\"Ok mortal!\""; + next; + mes "\"I have collected enough for now. You are now able to reach Santa.\""; + next; + mes "\"This will definitely help me finish the place of leisure.\""; + next; + mes "\"Have fun trying to save Santa from that cold maze!\""; + close; +} + + diff --git a/npc/xmas/2010/santa.txt b/npc/xmas/2010/santa.txt new file mode 100755 index 00000000..3ef9257d --- /dev/null +++ b/npc/xmas/2010/santa.txt @@ -0,0 +1,102 @@ +//################################################################################# +//# +//# Santa for Christmas 2010 +//# +//# Authors: alastrim, PjotrOrial +//# +//# reviewed by: +//# +//# This is Santa Claus. +//# He was taken as hostage by golbanez, and now that he is free, he would like to +//# give a reward for those who helped him. +//# +//################################################################################# + + +031-3.gat,122,51,0 script Santa 105,{ + + if (Sex) set @honorific$, "young hero"; + if (Sex) set @gender$, "boy"; + if (!Sex) set @honorific$, "young heroine"; + if (!Sex) set @gender$, "girl"; + if (Xmas2010 == 2) goto L_Returning; + if (Xmas2010 == 3) goto L_Stocking_Prize; + if (Xmas2010 == 4) goto L_Event_Done; + +L_start: + mes "The old man's eyes open wide as he sees you."; + next; + mes "[Santa Claus]"; + mes "\"Ho-Ho-ho! It is so good to see you here " +@honorific$+ "!\""; + next; + menu + "Im " + strcharinfo(0) + " and I am here to save you from Golbenez.",-; + mes "\"I cant believe it... are you really " +strcharinfo(0)+ "? I remember all the comments that... 'Thing' was making about building his way to a 'Leisure Place' and how your donations would really help him.\""; + next; + mes "\"What is his name again? Erh... Golbinos? Galvanis? Ho-hum... All I know is that it was keeping me hostage in this cold labyrinth. And you proved yourself a good " +@gender$+ " by helping me with all those donations!\""; + next; + if (gettime(6) != 12 || gettime(5) >= 25) goto L_Skip_Dialogue; + mes "\"Well, I am really late! In a few hours I have to start my usual present giving routine... But not before I give you a special gift for all you did.\""; + next; +L_Skip_Dialogue: + mes "\"Let me see... From what I can remember, Galvenio said that the only way someone could enter this cave is by giving him at least 5 Million Gold Pieces! It means you really did a good job!\""; + next; + +L_Calculate_Prizes: + getinventorylist; + if (@inventorylist_count == 100) goto L_full; + setarray @prizes[0], 1216, 629, 630, 634, 1214, 633, 628, 627, 621; + mes "\"You are so generous! I believe I can give you one of the hats from this bag. I know you like these silly hats. Yes, Santa knows this kind of thing... Ho-Ho-Ho! Put your hand here and pick one hat... No, you cant look, it MUST be a surprise...\""; + getitem @prizes[rand(8)], 1; + set Xmas2010, 2; + set Golbenez_Inn_Cost, 0; + next; + +L_Returning: + mes "[Santa Claus]"; + mes "\"I hope you liked your gift.\""; + next; + menu + "Yes Santa, you are the best!",L_Close, + "Ehh, it is not what I expected.",L_Bad, + "I loved it!",-; + +L_Stocking_Prize: + set Xmas2010, 3; + getinventorylist; + if (@inventorylist_count == 100) goto L_full; + mes "[Santa Claus]"; + mes "\"Good to know you liked it! Now I would like to give you a personal item. It is not a hat, but something that will always make you remember how grateful I am.\""; + next; + menu + "Wonderful! Santa, You are great! Is it another hat?",-; + next; + mes "\"No, not a hat. Here, take this. I have been using it for the last three months... It is my favorite and it means a lot to me.\""; + getitem 1207, 1; + set Xmas2010, 4; + close2; + percentheal -20, 0; + message strcharinfo(0), "You suddenly get dizzy... Something is not right with you. Maybe you shouldnt have put the Red Stocking so close to your face!"; + end; + +L_full: + mes "[Santa Claus]"; + mes "\"Your backpack seems to be full. You should get rid of some unused stuff before you get my gifts, or maybe try one super resistant red bag, my personal favorite! Hoh-hoh!\""; + close; + +L_Close: + mes "[Santa Claus]"; + mes "\"Ho, Ho... Ok, see you later " +@honorific$+ "!\""; + close; + +L_Bad: + mes "[Santa Claus]"; + mes "\"Hmm... and I was thinking you were a good " +@gender$+ "! Dont be ungrateful and next time, think before you get a gift.\""; + close; + +L_Event_Done: + mes "[Santa Claus]"; + mes "\"Hello again " +strcharinfo(0)+ "! I cant chat with you right now, because we are really late for Christmas, but, when it is over, you will always be welcome in my house for a hot chocolate.\""; + close; + +} |