diff options
m--------- | client-data | 0 | ||||
-rw-r--r-- | world/map/db/item_db.txt | 8 | ||||
-rw-r--r-- | world/map/npc/016-1/gwendolyn.txt | 361 |
3 files changed, 204 insertions, 165 deletions
diff --git a/client-data b/client-data -Subproject d1a427d19d6afe9fbf111c76fc0a6a785c30de9 +Subproject 7971bc85e00268b37105eefdd9a2d6a5f557b29 diff --git a/world/map/db/item_db.txt b/world/map/db/item_db.txt index cd7229de..a45606d7 100644 --- a/world/map/db/item_db.txt +++ b/world/map/db/item_db.txt @@ -354,6 +354,14 @@ 838, CranberryLollipop, Cranberry Lollipop, 0, 20, 50, 1, , , , , , 2, , , 0, , {itemheal 750, 0;}, {} 839, GrapeLollipop, Grape Lollipop, 0, 20, 50, 1, , , , , , 2, , , 0, , {itemheal 750, 0;}, {} 840, OrangeLollipop, Orange Lollipop, 0, 20, 50, 1, , , , , , 2, , , 0, , {itemheal 750, 0;}, {} +841, RedDottedWrappingPaper, Red Dotted Wrapping Paper, 3, 50, 25, 500, , , , , , , , , , , {}, {} +842, YellowDottedWrappingPaper, Yellow Dotted Wrapping Paper, 3, 50, 25, 500, , , , , , , , , , , {}, {} +843, BlueDottedWrappingPaper, Blue Dotted Wrapping Paper, 3, 50, 25, 500, , , , , , , , , , , {}, {} +844, PurpleStripedWrappingPaper, Purple Striped Wrapping Paper, 3, 50, 25, 500, , , , , , , , , , , {}, {} +845, RedGoldenStripedWrappingPaper, Red Golden Wrapping Paper, 3, 50, 25, 500, , , , , , , , , , , {}, {} +846, GreenRedStripedWrappingPaper, Green Red Wrapping Paper, 3, 50, 25, 500, , , , , , , , , , , {}, {} +847, PlushMouboo, Plush Mouboo, 3, 50, 25, 200, , , , , , , , , , , {}, {} +848, Earmuffs, Earmuffs, 5, 1000, 500, 20, , 2, , -1, 0, 2, 256, , 0, 0, {}, {} // Add new entries above here. For dyed entries,add to the bottom of the 2000s. diff --git a/world/map/npc/016-1/gwendolyn.txt b/world/map/npc/016-1/gwendolyn.txt index 6e11e5ac..f3ae3f7e 100644 --- a/world/map/npc/016-1/gwendolyn.txt +++ b/world/map/npc/016-1/gwendolyn.txt @@ -1,33 +1,34 @@ -//################################################################################# -//# -//# 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 -//################################################################################# +// Authors: PjotrOrial, Jenalya +// This script is for gaining the skill "Hawk's Eye" +// +// Needed: Forest Bow Quest +// +// Quest1: Proving Dexterity +// Needed: 18 cave snake eggs, 15 snake eggs, 5 mountain snake eggs, 2 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; + set @CAVE_EGGS_AMOUNT, 18; + set @SNAKE_EGGS_AMOUNT, 15; + set @MOUNTAIN_EGGS_AMOUNT, 5; + set @GRASS_EGGS_AMOUNT, 2; // experience for eggs set @QUEST_EGG_EXP, 10000; // The needed level for the minigame: @@ -45,14 +46,13 @@ 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; + if (@Q_hawkseye == 6) goto L_state6; + if (@Q_hawkseye == 5) goto L_state5; + if (@Q_hawkseye == 4) goto L_state4; + if (@Q_hawkseye == 3) goto L_state3; + if (@Q_hawkseye == 2) goto L_state2; + if (@Q_hawkseye == 1) goto L_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; @@ -63,21 +63,21 @@ state0: 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; + "I want to become an archer!",-, + "I'm not interested right now.",L_no_student; -fee: +L_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; + "That's a lot, but I think it will be worth it.",-, + "I'm not sure I want to spend that much.",L_no_student; - if (zeny < @SCHOOLFEE) - goto no_money; + if (Zeny < @SCHOOLFEE) + goto L_no_money; - set zeny, zeny - @SCHOOLFEE; + set Zeny, Zeny - @SCHOOLFEE; set @Q_hawkseye, 2; callsub S_Update_Var; @@ -85,20 +85,20 @@ fee: 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; + goto L_Close; next; menu - "I already have a Forest Bow.", -; + "I already have a Forest Bow.",-; -state2: +L_state2: mes "[Gwendolyn Bowmaker]"; mes "\"Let me see your bow.\""; next; if (countitem("ForestBow") < 1) - goto no_bow; + goto L_no_bow; if (@FORESTBOW < 5) - goto bow_bought; + goto L_bow_bought; set @Q_hawkseye, 3; callsub S_Update_Var; @@ -106,7 +106,7 @@ state2: mes "\"Very well, this looks fine. It is time for your first lesson. \""; next; -lesson: +L_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; @@ -119,25 +119,25 @@ lesson: 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 recovered from your last.\""; next; -state3: +L_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.\""; + 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 " + @CAVE_EGGS_AMOUNT + " cave snake eggs, " + @SNAKE_EGGS_AMOUNT + " snake eggs, " + @MOUNTAIN_EGGS_AMOUNT + " mountain snake eggs and " + @GRASS_EGGS_AMOUNT + " 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.", -; + "Can you please repeat your lesson?",L_lesson, + "I will go and hunt some snakes.",L_Close, + "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; + if (countitem("CaveSnakeEgg") < @CAVE_EGGS_AMOUNT + ||countitem("SnakeEgg") < @SNAKE_EGGS_AMOUNT + ||countitem("MountainSnakeEgg") < @MOUNTAIN_EGGS_AMOUNT + ||countitem("GrassSnakeEgg") < @GRASS_EGGS_AMOUNT) + goto L_not_enough_eggs; - delitem "CaveSnakeEgg", @EGGS_AMOUNT; - delitem "SnakeEgg", @EGGS_AMOUNT; - delitem "MountainSnakeEgg", @EGGS_AMOUNT; - delitem "GrassSnakeEgg", @EGGS_AMOUNT; + delitem "CaveSnakeEgg", @CAVE_EGGS_AMOUNT; + delitem "SnakeEgg", @SNAKE_EGGS_AMOUNT; + delitem "MountainSnakeEgg", @MOUNTAIN_EGGS_AMOUNT; + delitem "GrassSnakeEgg", @GRASS_EGGS_AMOUNT; getexp @QUEST_EGG_EXP, 0; @@ -148,11 +148,11 @@ state3: mes "\"Very well. That will make a great meal.\""; next; -state4: - if (baselevel < @BASELEVEL_GAME) - goto not_ready; +L_state4: + if (BaseLevel < @BASELEVEL_GAME) + goto L_not_ready; if (!(getskilllv(SKILL_POOL))) - goto not_ready; + goto L_not_ready; mes "Gwendolyn takes an analyzing look at you. Then she nods."; next; @@ -162,7 +162,7 @@ state4: mes "\"Ok. You have made great progress. I think you are ready for further tasks.\""; next; -game_explain: +L_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; @@ -171,7 +171,7 @@ game_explain: 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: +L_state5: // needed for the minigame: set @wdX, 0; // wind direction x-coordinate, rand set @wdY, 0; // wind direction y-coordinate, rand @@ -189,15 +189,15 @@ state5: 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; + "Can you please explain the task again?",L_game_explain, + "I'm ready, let's start!",-, + "I'm sorry, I will come back later.",L_Close; -game: +L_game: if (countitem("ForestBow") < 1) - goto no_bow; + goto L_no_bow; if (countitem("Arrow") < 1) - goto no_arrows; + goto L_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; @@ -225,136 +225,136 @@ game: set @wp_sq, (@wdX * @wdX) + (@wdY * @wdY); if (@wp_sq == 0) - goto wp0; + goto L_wp0; if (@wp_sq < 3) - goto wp1; + goto L_wp1; if (@wp_sq < 9) - goto wp2; + goto L_wp2; if (@wp_sq < 19) - goto wp3; - goto wp4; + goto L_wp3; + goto L_wp4; -wp0: +L_wp0: mes "[Gwendolyn Bowmaker]"; mes "\"You're lucky. It is windless now.\""; next; - goto choose_start_pos; -wp1: + goto L_choose_start_pos; +L_wp1: mes "[Gwendolyn Bowmaker]"; mes "\"There is a slight breeze coming from "+ @wd$[@wdIndex] + ".\""; next; - goto choose_start_pos; -wp2: + goto L_choose_start_pos; +L_wp2: mes "[Gwendolyn Bowmaker]"; mes "\"The wind is blowing from "+ @wd$[@wdIndex] + ".\""; next; - goto choose_start_pos; -wp3: + goto L_choose_start_pos; +L_wp3: mes "[Gwendolyn Bowmaker]"; mes "\"Right now, there is a strong wind blowing from " + @wd$[@wdIndex] + ".\""; next; - goto choose_start_pos; -wp4: + goto L_choose_start_pos; +L_wp4: mes "[Gwendolyn Bowmaker]"; mes "\"Here we have a squall from "+ @wd$[@wdIndex] + ".\""; next; - goto choose_start_pos; + goto L_choose_start_pos; -choose_start_pos: +L_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; + "I want to move left.",L_step_left, + "I go right.",L_step_right, + "I stay.",L_step_no, + "I will try it later.",L_Close; -step_no: +L_step_no: set @spX, 0; mes "You stay where you are.."; next; - goto choose_shotpower; + goto L_choose_shotpower; -step_left: +L_step_left: mes "How many steps?"; next; menu - "1", step_left1, - "2", step_left2, - "3", step_left3, - "4", step_left4; + "1",L_step_left1, + "2",L_step_left2, + "3",L_step_left3, + "4",L_step_left4; -step_left1: +L_step_left1: set @spX, -1; mes "You take one step to the left."; next; - goto choose_shotpower; + goto L_choose_shotpower; -step_left2: +L_step_left2: set @spX, -2; mes "You take two steps to the left."; next; - goto choose_shotpower; + goto L_choose_shotpower; -step_left3: +L_step_left3: set @spX, -3; mes "You take three steps to the left."; next; - goto choose_shotpower; + goto L_choose_shotpower; -step_left4: +L_step_left4: set @spX, -4; mes "You take four steps to the left."; next; - goto choose_shotpower; + goto L_choose_shotpower; -step_right: +L_step_right: mes "How many steps?"; next; menu - "1", step_right1, - "2", step_right2, - "3", step_right3, - "4", step_right4; + "1",L_step_right1, + "2",L_step_right2, + "3",L_step_right3, + "4",L_step_right4; -step_right1: +L_step_right1: set @spX, 1; mes "You take one step to the right."; next; - goto choose_shotpower; + goto L_choose_shotpower; -step_right2: +L_step_right2: set @spX, 2; mes "You take two steps to the right."; next; - goto choose_shotpower; + goto L_choose_shotpower; -step_right3: +L_step_right3: set @spX, 3; mes "You take three steps to the right."; next; - goto choose_shotpower; + goto L_choose_shotpower; -step_right4: +L_step_right4: set @spX, 4; mes "You take four steps to the right."; next; - goto choose_shotpower; + goto L_choose_shotpower; -choose_shotpower: +L_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", -; + "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; @@ -362,7 +362,8 @@ choose_shotpower: set @pointX, @wdX + @spX; set @pointY, @wdY + @sp; - if( @pointX==0 && @pointY==0 ) goto target_hit; + if( @pointX==0 && @pointY==0 ) + goto L_target_hit; //set @targethit to these numbers: //1,2,3 for left above, above, right above, @@ -385,9 +386,9 @@ choose_shotpower: set @target_dist_sq, (@pointX * @pointX) + (@pointY*@pointY); if (@target_dist_sq < 5) - goto target_veryclose; + goto L_target_veryclose; if (@target_dist_sq < 17) - goto target_close; + goto L_target_close; //here are bad shots: mes "[Gwendolyn Bowmaker]"; @@ -397,17 +398,17 @@ choose_shotpower: next; mes "\"That was far "+@target_direction$[@targethit]+".\""; next; - goto game; + goto L_game; -target_close: +L_target_close: mes "[Gwendolyn Bowmaker]"; mes "\"That was "+@target_direction$[@targethit]+".\""; next; mes "\"I suggest some training.\""; next; - goto game; + goto L_game; -target_veryclose: +L_target_veryclose: mes "[Gwendolyn Bowmaker]"; mes "\"That was quite close. Impressive!\""; next; @@ -416,12 +417,11 @@ target_veryclose: 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; + //if(0 == rand(2)) goto L_game; mes "\"Hurry up, before the wind changes.\""; next; - goto choose_start_pos; - -target_hit: + goto L_choose_start_pos; +L_target_hit: mes "[Gwendolyn Bowmaker]"; mes "\"Wonderful! That was great! Directly hit the bull's eye!\""; next; @@ -430,7 +430,7 @@ target_hit: mes "\"Let me inspect it...\" She walks to the target."; next; if( rand(500) > (2*readparam(bDex) + readparam(bAgi))) - goto target_nohit; + goto L_target_nohit; set @Q_hawkseye, 6; callsub S_Update_Var; @@ -440,67 +440,98 @@ target_hit: 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; + goto L_Close; -target_nohit: +L_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; + goto L_game; -state6: +L_state6: mes "[Gwendolyn Bowmaker]"; mes "\"You really have a reason to be proud.\""; - close; + goto L_Close; -state1: +L_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", -; + "I want to become an archer!",L_fee, + "I am not interested.",-; -no_student: +L_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; + goto L_Close; -no_money: +L_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; + goto L_Close; -no_bow: +L_no_bow: mes "\"As an archer, you should always carry your bow with you. Go and get it.\""; - close; + goto L_Close; -bow_bought: +L_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 will you 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; + goto L_Close; -not_enough_eggs: +L_not_enough_eggs: mes "\"Maybe I should also give you a lesson in how to count? You haven't enough.\""; - close; + goto L_Close; -not_ready: +L_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; + goto L_Close; -no_arrows: +L_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; + goto L_Close; + +L_Close: + set @SCHOOLFEE, 0; + set @CAVE_EGGS_AMOUNT, 0; + set @SNAKE_EGGS_AMOUNT, 0; + set @MOUNTAIN_EGGS_AMOUNT, 0; + set @GRASS_EGGS_AMOUNT, 0; + set @QUEST_EGG_EXP, 0; + set @BASELEVEL_GAME, 0; + set @QUEST_HAWK_EXP, 0; + set @Q_hawkseye_MASK, 0; + set @Q_hawkseye_SHIFT, 0; + set @Q_hawkseye, 0; + set @Q_forestbow_MASK, 0; + set @Q_forestbow_SHIFT, 0; + set @FORESTBOW, 0; + + set @wdX, 0; + set @wdY, 0; + set @spX, 0; + set @sp, 0; + set @pointX, 0; + set @pointY, 0; + set @wdIndex, 0; + set @paramX, 0; + set @paramY, 0; + set @returnIndex,0; + set @wp_sq, 0; + set @targethit, 0; + set @target_dist_sq, 0; + cleararray @target_direction, 0, 10; + cleararray @wd, 0, 10; -quit: close; S_Update_Var: |