diff options
author | +seeds <abby.hulka@gmail.com> | 2023-03-05 00:18:54 +0000 |
---|---|---|
committer | +seeds <abby.hulka@gmail.com> | 2023-03-05 00:18:54 +0000 |
commit | 181de88c329902299082dfb61f8a8e644b8e89bf (patch) | |
tree | 5f71528bfdb5a8859040f6dee43ee0466693acfb | |
parent | 63f4343f835bfe3d403bb9492dab4f6eca79970a (diff) | |
parent | 6abb5c9876dffc03e13a6445c6a61af437e37aa7 (diff) | |
download | serverdata-181de88c329902299082dfb61f8a8e644b8e89bf.tar.gz serverdata-181de88c329902299082dfb61f8a8e644b8e89bf.tar.bz2 serverdata-181de88c329902299082dfb61f8a8e644b8e89bf.tar.xz serverdata-181de88c329902299082dfb61f8a8e644b8e89bf.zip |
Merge branch 'PiouIsles_quests' into 'master'
Update db/constants.conf
See merge request ml/serverdata!94
-rw-r--r-- | db/constants.conf | 2 | ||||
-rw-r--r-- | db/quest_db.conf | 16 | ||||
-rw-r--r-- | db/re/item_db.conf | 29 | ||||
-rw-r--r-- | npc/006-2-1/glim.txt | 69 | ||||
-rw-r--r-- | npc/006-2-1/may.txt | 85 | ||||
-rw-r--r-- | npc/006-2-1/piouchef.txt | 150 | ||||
-rw-r--r-- | npc/006-2-5/dusk.txt | 89 | ||||
-rw-r--r-- | npc/006-2-5/pouf.txt | 151 | ||||
-rw-r--r-- | npc/006-2-5/reed.txt | 93 | ||||
-rw-r--r-- | npc/006-2-6/hatchling.txt | 136 |
10 files changed, 819 insertions, 1 deletions
diff --git a/db/constants.conf b/db/constants.conf index 185f72428..3467360a8 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -1853,7 +1853,7 @@ constants_db: { NPC_PIOU_MAGE: 266 NPC_PIOU_QUEEN: 267 NPC_PIOU_KNIGHT_L: 268 - NPC_PIOU_KNIGHT_R: 260 + NPC_PIOU_KNIGHT_R: 269 NPC_PIOU_ALCHEMIST: 270 NPC_DUCK_ELDER: 271 NPC_GUINEVERE: 272 diff --git a/db/quest_db.conf b/db/quest_db.conf index 565adf2dc..0ae55974c 100644 --- a/db/quest_db.conf +++ b/db/quest_db.conf @@ -565,6 +565,22 @@ quest_db: ( Id: 254 Name: "LilitQuest_Raify" }, +{ + Id: 255 + Name: "LilitQuest_Glim" +}, +{ + Id: 256 + Name: "LilitQuest_PiouChef" +}, +{ + Id: 257 + Name: "LilitQuest_Hatchling" +}, +{ + Id: 258 + Name: "LilitQuest_Pouf" +}, // ID 270 to 299: Land Of Fire Quests { diff --git a/db/re/item_db.conf b/db/re/item_db.conf index e02612173..dfe317e77 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -3170,6 +3170,35 @@ item_db: ( // Mounts (690 to 699, probably there will be extra IDs) { + Id: 695 + AegisName: "BronzePin" + Name: "Bronze Pin" + Type: "IT_ARMOR" + Loc: "EQP_SHADOW_SHOES" + Buy: 45000 + Sell: 15000 + Weight: 300 + Def: 5 + EquipLv: 30 + Refine: false + Trade: { + notrade: true + nodrop: true + noselltonpc: true + nomail: true + noauction: true + } + Script: <" + bonus bFlee,25; + bonus bAtkRate,5; + bonus bSpeedRate,10; + bonus bNoKnockback,1; + bonus bHPRegenRate,-50; + bonus bSPRegenRate,-50; + bonus bMaxHP,-200; + "> +}, +{ Id: 696 AegisName: "RidingMouboo" Name: "Riding Mouboo" diff --git a/npc/006-2-1/glim.txt b/npc/006-2-1/glim.txt new file mode 100644 index 000000000..07e644797 --- /dev/null +++ b/npc/006-2-1/glim.txt @@ -0,0 +1,69 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// +seeds +// Description: +// Daily quest to exchange Tolchi Arrow Boxes for a small amount of gp and exp +// Variables: +// $GLIM_ST +// How many Tolchi Arrow Boxes were given +// q1 +// Controls your own progress helping Glim - Items today +// q2 +// Controls your own progress helping Glim - Your timer + +006-2-1,82,28,0 script Glim NPC_PIOU_VIKING,{ + +L_Loop: + .@q1=getq(LilitQuest_Glim); + .@q2=getq2(LilitQuest_Glim); + mesn; + mesq l("Argh, I've run out o' arrows! Say, ye don't have any I could use, do ye?.", $GLIM_ST); + next; + if (.@q2 < $@GLIM_QTIMER) { + setq1 Lilitquest_Glim, 0; + setq2 Lilitquest_Glim, $@GLIM_QTIMER; + } + + // Daily limit reached + .@q1=getq1(Lilitquest_Glim); + if (.@q1 >= (BaseLevel-17)/3) goto L_Timer; + select + rif(countitem(TolchiAmmoBox) >= 1, l("Give Glim a @@"), getitemlink(TolchiAmmoBox)), + l("Maybe later."); + mes ""; + + switch (@menu) { + case 1: + delitem TolchiAmmoBox, 1; + getexp 64, 0; + Zeny=Zeny+50; + break; + case 2: + close; + break; + } + $GLIM_ST=$GLIM_ST+1; + setq1 Lilitquest_Glim, .@q1+1; + goto L_Loop; + +L_Timer: + if (BaseLevel < 10) + mesq l("Wait a minute! I ain't trustin' a weakling like ye fer good arrows!"); + mesn; + mesq l("Come back when ye've grown sum muscles."); + mesn; + mesq l("I'm all stocked up now, thanks to ye. Come back in @@ and ye might be able to help me again.", FuzzyTime($@GLIM_TIMER+(60*60*24),2,2)); + close; + +OnInit: + .sex=G_OTHER; + .distance=5; + // No end; on purpose + +OnHour00: + $@GLIM_QTIMER=gettimeparam(GETTIME_DAYOFMONTH); + $@GLIM_QTIMER=gettimetick(2); + end; + +} diff --git a/npc/006-2-1/may.txt b/npc/006-2-1/may.txt new file mode 100644 index 000000000..2de362cd2 --- /dev/null +++ b/npc/006-2-1/may.txt @@ -0,0 +1,85 @@ +// TMW-2 scripts. +// Original Authors: Hal9000 & Qwerty Dragon +// TMW-2 Authors: +// +seeds +// dangerduck +// Description: +// Piou nurse who keeps losing one of her charges. + +006-2-1,28,24,0 script Nurse May NPC_PIOU_NURSE,{ + function mayHello; + function mayHelp; + function mayClose; + .@q=getq(LilitQuest_Hatchling); + + if (.@q <= 1) + function mayHello { + mesn; + mesq l("Oh please help me, %s! A hatchling has escaped and I can't leave my charges to retrieve him! Will you fetch him for me?", get_race()); + next; + select + l("Of course, I'd be happy to help!"), + l("I don't do well with kids, sorry."), + mes ""; + switch (@menu) { + case 1: + mayHelp(); + break; + case 2: + mayClose(); + break; + } + return; +} + +function mayHelp { + mesn; + mesq l("My charge Chuck darted through the door when I came in this morning, and escaped!"); + mesn; + mesq l("One of the palace guards came by earlier to pickup her daughter, and she said he's at the castle."); + mesn; + mesq l("Apparently he's been terrorizing the staff, and keeping them out of their quarters!"); + mesn; + mesq l("Nobody's been able to coax him back or catch him, but a %s might be able to.", get_race()); + mesn; + mesq l("Please bring him back, and hurry!"); + close; +} + +function mayClose { + { + .@r = rand2(2); + if (.@r == 0) + { + npctalk3 l("I'm sorry, I simply can't spare any more time to talk with you. Oh, Kendra, don't eat that!"); + } + else + { + npctalk3 l("I must get back to my hatchlings!", get_race()); + } + } + else if (.@q == 1) + { + mesn; + mesq l("Oh, hello again %s! I'm afraid Chuck escaped again. Would you mind retrieving him again, please?", strcharinfo(0)); +next; + select + l("No problem! It's kind of fun chasing after him."), + l("Sorry, I'm too busy to worry about misbehaved chicks. Catch him yourself."), + mes ""; + switch (@menu) { + case 1: + close; + case 2: + mayClose(); + break; + } + return; +} + +OnInit: + .sex = G_OTHER; + .distance = 4; + end; +} + diff --git a/npc/006-2-1/piouchef.txt b/npc/006-2-1/piouchef.txt new file mode 100644 index 000000000..2536053e5 --- /dev/null +++ b/npc/006-2-1/piouchef.txt @@ -0,0 +1,150 @@ +// TMW2 Script +// Author: +// dangerDuck +// +seeds +// Description: +// Piou chef who asks you to check on a missing delivery. + +006-2-1,35,75,0 script Piou Chef NPC_PIOU_COOK,{ + function chefAssign; + function chefWait; + function chefSupplyList; + function chefGiveDelivery; + function chefClose; + .@q=getq(LilitQuest_PiouChef); + mesn; + mesc l("The chef is muttering under his breath while kneading a pile of soft dough."); + next; + select + rif(.@q == 0, l("Do you need help with anything?")), + rif(.@q == 1, l("I have the supplies you asked for.")), + l("I better leave him to his work."); + mes ""; + switch (@menu) { + case 1: + chefAssign(); + break; + case 2: + chefWait(); + break; + case 3: + chefGiveDelivery(); + break; + default: + chefClose(); + break; + } + close; + +function chefAssign { + if (BaseLevel < 50) { + mesn; + mesq l("Unfortunately, a mere fledgling like you is not strong enough to help us."); + next; + elderClose(); + return; + } + mesn; + mesq l("Your information is correct, %s. Pirates have been plaguing our shores and cutting off our supply lines.", get_race()); + next; + mesn; + mesq l("We are in desperate need of food and nesting material, as well as our sacred supply of @@.", getitemlink(CrystallizedMaggot)); + next; + setq LilitQuest_PiouChef, 1; + chefSupplyList(); + chefClose(); + return; +} + +function chefWait { + do + { + mesn; + mesq l("Did you bring the supplies?"); + next; + select + l("Yes, I have them right here."), + l("What did you want? I've forgotten."), + l("Not yet. I've been... delayed."); + mes ""; + switch (@menu) { + case 1: + chefGiveDelivery(); + break; + case 2: + chefSupplyList(); + break; + case 3: + chefClose(); + close; + break; + } + } while (true); + return; +} + +function chefSupplyList { + do + { + mesn; + mesq l("We need @@, @@, and @@ for our regular stores and nesting materials, and @@ for the royal kitchen.", 300, getitemlink(Moss), 250, getitemlink(RoastedMaggot), 20, getitemlink(FishBox), 1, getitemlink(CrystallizedMaggot)); + next; + mesn; + mesq l("Please hurry, our citizens are going hungry, and you do NOT want to find out what a crowd of hungry pious will do!"); + close; + return; +} + +function chefGiveDelivery { + if (countitem(Moss) < 300 || + countitem(RoastedMaggot) < 250 || + countitem(FishBox) < 20 || + countitem(CrystallizedMaggot) < 1) { + mesn; + mesq l("This isn't what I requested!!! Perhaps you should count your items more carefully."); + next; + mesn; + mesq l("If you aren't more careful, we might... accidentally... mistake you for an agent of the Duck Side."); + percentheal -99, 0; + close; + } + + delitem(Moss, 300); + delitem(RoastedMaggot, 250); + delitem(FishBox, 20); + delitem(CrystallizedMaggot, 1); + + getexp(34576, 19226); + setq(LilitQuest_PiouChef, 2); + + mes ""; + next; + mesn; + mesq l("I appreciate the help, %s. Come back anytime for a tasty dish!", get race()); + close; +} + +function chefClose { + mesn; + mesq l("Keep your eye out for pesky ducks, %s. I have a new sauce I want to try out...", strcharinfo(0)); + next; + mesn; + if (BaseLevel < 50) { + mesq l("Perhaps you may be of assistance later."); + } else { + mesq l("Go away, %s! Can't you see I'm busy?", get_race()); + } + close; + return; +} + +OnInit: + .sex = G_OTHER; + .distance = 4; + end; + +OnInstanceInit: + disablenpc instance_npcname(.name$); + end; +} + diff --git a/npc/006-2-5/dusk.txt b/npc/006-2-5/dusk.txt new file mode 100644 index 000000000..9e523ca02 --- /dev/null +++ b/npc/006-2-5/dusk.txt @@ -0,0 +1,89 @@ +// TMW-2 scripts. +// Original Authors: Hal9000 & Qwerty Dragon +// TMW-2 Authors: +// +seeds +// dangerduck +// Description: +// Piou captain who gives information about the war, and the piou queen. + +006-2-5,36,25,0 script Captain Dusk NPC_PIOU_KNIGHT_R,{ + function duskHello; + function duskAboutQueen; + function duskAboutWar; + .@q=getq(LilitQuest_Pouf); + + if (.@q <= 2) + { + .@r = rand2(3); + if (.@r == 0) + { + npctalk3 l("Don't think you'll sneak anything by me. I'm watching you..."); + } + else if (.@r == 1) + { + npctalk3 l("I don't tolerate a piou, or %s, who is afraid of hard work.", get_race()); + } + else + { + npctalk3 l("Best steer clear of the Princess, %s. It won't go well if you upset her.", strcharinfo(0)); + } + } + else if (.@q == 3) + { + duskHello(); + } + close; + +function duskHello { + mesn; + mesq l("Welcome to the Order of the Piou Knights, %s.", strcharinfo(0)); + next; + select + l("Where is the Piou Queen?"), + l("How is the war going?"), + l("I just wanted to say hi."); + mes ""; + switch (@menu) { + case 1: + duskAboutQueen(); + break; + case 2: + duskAboutWar(); + break; + case 3: + break; + } + return; +} + +function duskAboutQueen { + mesn; + mesq l("Queen +seeds of Piou Isles is busy coordinating war efforts at the front."); + mesn; + mesq l("She's a fierce piou, leading our troops into the heart of each battle. I admire her bravery."); + mesn; + mesq l("Princess Pouf has been given leadership until our Queen returns. Should Queen +seeds perish, Princess Pouf will take the crown."); + mesn; + mesq l("Fight bravely and well, %s, and perhaps our Queen will survive to return to her beloved Isles.", strcharinfo(0)); + mesn; + duskHello(); +} + +function duskAboutWar { + mesn; + mesq l("So far neither the Duck Side or the Piou Knights have gained the upper hand in the war."); + mesn; + mesq l("However, our mages have recently sensed something dark stirring."); + mesn; + mesq l("I fear something terrible is rising, and I do not know if we can weather the coming storm."); + mesn; + mesc l("The captain falls quiet, and appears to be lost in thought."); + mesn; + return; +} + +OnInit: + .sex = G_OTHER; + .distance = 4; + end; +} diff --git a/npc/006-2-5/pouf.txt b/npc/006-2-5/pouf.txt new file mode 100644 index 000000000..6b42846c4 --- /dev/null +++ b/npc/006-2-5/pouf.txt @@ -0,0 +1,151 @@ +// TMW-2 scripts. +// Original Authors: Hal9000 & Qwerty Dragon +// TMW-2 Authors: +// dangerDuck +// +seeds +// Description: +// Piou royal who asks players to prove themselves against piou knights. + +function script PoufMobCount { + .@q=getq(LilitQuest_Pouf); + .@t=getq2(LilitQuest_Pouf); + if (.@q == 1 && killedrid == PiouKnight) + { + setq2(LilitQuest_Pouf, .@t+1); + } + if (.@t+1 >= 10) + { + setq(LilitQuest_Pouf, 2); + } + + // Report progress + dispbottom l("@@/@@", .@t+1, 10); + + return; +} + +006-2-5,38,23,0 script Princess Pouf NPC_PIOU_QUEEN,{ + function poufChallenge; + function poufQuest; + function poufQuestReport; + function poufQuestReward; + function poufQuestFinished; + if (BaseLevel < 60) + { + mesn; + mesq l("You are too weak to pass my test."); + next; + mesn; + mesc l("Return when you are stronger."); + } + else + { + poufChallenge(); + } + closedialog; + close; + +function poufChallenge { + .@q=getq(LilitQuest_Pouf); + if (.@q == 0) + { + mesn; + mesq l("Welcome to my Isles, traveller."); + next; + mesc l("To show you are worthy of remaining here, you must prove yourself to me! Do you accept my challenge?"), 1; + if (askyesno() == ASK_NO) + return; + poufQuest(); + } + else if (.@q == 1) + { + poufQuestReport(); + } + else if (.@q == 2) + { + poufQuestReward(); + } + else + { + poufQuestFinished(); + } + return; +} + +function poufQuest { + mes ""; + mesn; + mesq l("Defeat 10 of my bravest @@ to prove yourself a warrior, brave of heart and strong of arm!", getmonsterlink(PiouKnight)); + next; + select + l("Point the way! Little yellow birds can't be that hard."), + l("Scary pious with armor? No thank you!"); + mes ""; + switch (@menu) { + case 1: + mesn; + mesq l("Excellent. You will find them in the training room beneath this chamber."); + next; + setq(LilitQuest_Pouf, 1, 0); + break; + case 2: + next; + mesq l("You are clearly not brave enough for this test. Leave my sight at once, chicken."); + break; + } + return; +} + +function poufQuestReport { + mesn; + mesq l("You've only killed @@/10 @@! You must defeat more to win my favor.", getq2(LilitQuest_Pouf),getmonsterlink(PiouKnight)); + next; + return; +} + +function poufQuestReward { + mesn; + mesq l("You've defeated 10 of my knights without flinching! You are truly a brave warrior."); + next; + mesn; + mesc l("The princess flies off her perch and alights upon your right and left shoulder in succession."); + next; + mesn; + mesq l("I dub thee Honorary Piou Knight @@, with all the rewards and duties of the position.", strcharinfo(0)); + next; + mesn; + mesc l("The princess produces a small, shiny bronze feather and pins it to your lapel, then returns to her perch."); + next; + mesn; + mesq l("Make me proud, knight!"); + inventoryplace BronzePin, 1; + getitem BronzePin, 1; + getexp(91479, 24989); + setq(LilitQuest_Pouf, 3); + next; + return; +} + +function poufQuestFinished { + mesn; + .@r = rand2(3); + if (.@r == 0) + { + npctalk3 l("I bid you a good %s, brave knight.", (is_night() ? l("evening") : l("day"))); + } + else if (.@r == 1) + { + npctalk3 l("Fight bravely for Queen +seeds and our isles, honorable knight!"); + } + else + { + npctalk3 l("I wish you success on your ventures, Knight @@.", strcharinfo(0)); + } + return; +} + +OnInit: + .sex = G_OTHER; + .distance = 3; + end; +} diff --git a/npc/006-2-5/reed.txt b/npc/006-2-5/reed.txt new file mode 100644 index 000000000..03a83bf62 --- /dev/null +++ b/npc/006-2-5/reed.txt @@ -0,0 +1,93 @@ +// TMW-2 scripts. +// Original Authors: Hal9000 & Qwerty Dragon +// TMW-2 Authors: +// +seeds +// dangerduck +// Description: +// Piou captain who gives information about shrewboo mounts and the Piou Knights. + +006-2-5,40,25,0 script Captain Reed NPC_PIOU_KNIGHT_L,{ + function reedHello; + function reedAboutKnights; + function reedAboutShrewboos; + .@q=getq(LilitQuest_Pouf); + + if (.@q <= 2) + { + .@r = rand2(3); + if (.@r == 0) + { + npctalk3 l("This is no place for a weakling like you. I suggest you leave."); + } + else if (.@r == 1) + { + npctalk3 l("Allowing you to remain on our Isles is dangerous. Tread carefully, %s.", get_race()); + } + else + { + npctalk3 l("I'll be keeping an eye on you, %s. Don't make trouble.", strcharinfo(0)); + } + } + else if (.@q == 3) + { + reedHello(); + } + close; + +function reedHello { + mesn; + mesq l("Do you need assistance, Knight %s?", strcharinfo(0)); + next; + select + l("What can you tell me about the Piou Knights?"), + l("Why do Piou Knights need mounts if they can fly?"), + l("I just wanted to say hi."); + mes ""; + switch (@menu) { + case 1: + reedAboutKnights(); + break; + case 2: + reedAboutShrewboos(); + case 3: + // fallthrough + break; + } + return; +} + +function reedAboutKnights { + mesn; + mesq l("The Order of Piou Knights was originally created as a defense against hunters from the humanoid races."); + mesn; + mesc l("Our Order stopped the hunters from harming any piou on Piou Isles, but it could not do anything for the pious who refused to live here."); + mesn; + mesq l("We grew in strength and knowledge over time, and dedicated ourselves to upholding justice and peace on the Isles, and in the world."); + mesn; + mesq l("When the ducks joined the Moubootaur and created the Duck Side, our convictions and oaths to the Order ensured we would oppose them."); + mesn; + mesc l("The humanoid races do not consider ducks or pious to be a threat, thus we are the only line of defense against the Duck Side."); + mesn; + mesq l("Remember that, %s. You dedicated yourself to the Order of Piou Knights, and you are now sworn to oppose the Duck Side.", strcharinfo(0)); + mesn; + reedHello(); +} + +function reedAboutShrewboos { + mesn; + mesq l("Our warriors are burdened with strong, yet heavy, armor."); + mesn; + mesc l("Due to this detriment to our speed and ability to fly, we started training shrewboos as mounts."); + mesn; + mesq l("Over time, we improved our training, and our warboos are now extremely efficient fighting steeds."); + mesn; + mesq l("They also give Piou Knights a much needed speed boost against the ducks, who are naturally fast."); + mesn; + reedHello(); +} + +OnInit: + .sex = G_OTHER; + .distance = 4; + end; +} diff --git a/npc/006-2-6/hatchling.txt b/npc/006-2-6/hatchling.txt new file mode 100644 index 000000000..df06409eb --- /dev/null +++ b/npc/006-2-6/hatchling.txt @@ -0,0 +1,136 @@ +// Evol scripts. +// Author: +// Travolta +// +seeds +// Description: +// A piou hatchling who escaped his nurse and fled to the castle. He's been terrorizing the staff. +// Variables: +// none + +function script ArtisFlyingPiouLogic { + .@tick = gettimetick(1); + .@LastTimeTouched = getvariableofnpc(.LastTimeTouched, strnpcinfo(3)); + if (.@tick > .@LastTimeTouched + 300) + { + .speed = 200; + set getvariableofnpc(.LastPlayerTouched, strnpcinfo(3)), -1; + } + .@rnd = rand(5) - 3; + if (.@rnd > 0) + return execmovecmd("wait " + .@rnd); + return 0; +} + +006-2-6,38,28,0 script #Hatchling NPC_FLYING_PIOU,{ + .@q=getq(LilitQuest_Hatchling); + function TryCatchPiou { + .@agi = readparam(bAgi); + @ArtisQuests_CatchPiouTries += 1; + getmapxy(.@map$, .@x1, .@y1, 1); + getmapxy(.@map$, .@x2, .@y2, 0); + .@distance = distance(.@x1, .@y1, .@x2, .@y2); + .@chance = max(ArtisQuests_CatchPiou_Difficulcy, + 20 + .@distance * 5 - .@agi/10 - + @ArtisQuests_CatchPiouTries); + return rand(.@chance); + } + + .@charid = getcharid(0); + if (.LastPlayerTouched <= 0) + { + .LastPlayerTouched = .@charid; + @ArtisQuests_CatchPiouTries = 0; + } + else if (.LastPlayerTouched != .@charid) + { + message strcharinfo(0), l("Looks like somebody else is looking for Chuck. I better leave them to try."); + end; + } + + .@q = getq(ArtisQuests_CatchPiou); + if (.@q != 1) + { + mesn "Narrator"; + mesc(l("The hatchling looks at you with big, pleading eyes, and you don't have the heart to take it back to May."), 9); + close; + } + + .@tick = gettimetick(1); + if (.@tick < .LastTimeTouched + min(4, ArtisQuests_CatchPiou_Difficulcy + + @ArtisQuests_CatchPiouTries / 3)) + { + mesq l("The hatchling spooked at your attempt to catch it, and zoomed out of sight."); + .LastTimeTouched = .@tick; + end; + } + + .LastTimeTouched = .@tick; + + .@rnd = TryCatchPiou(); + if (!.@rnd) + { + npcstop; + stopnpctimer; + getmapxy(.@map$, .@x, .@y, 1); + npcwalkto .@x, .@y; + .@trader$ = "Salem#001-1"; + mesn "Narrator"; + mesc(l("Finally, you captured the speedy hatchling, but he's trying to squirm away! Hurry back to May before he escapes."), 9); + setq LilitQuest_Hatchling, 1; + getexp(1000, 500); + set getvariableofnpc(.LastPiouHunter$, .@trader$), strcharinfo(0); + set getvariableofnpc(.PiouEscapedMessage$, .@trader$), l("The little pipsqueak gave you the slip! You need to catch him again."); + set getvariableofnpc(.LastPiouHunterID, .@trader$), .@charid; + set getvariableofnpc(.PiouCaught, .@trader$), 1; + donpcevent .@trader$ + "::OnPiouFlee"; + close2; + disablenpc strnpcinfo(3); + close; + } + else + { + setarray .RandomFailureMessages$[0], l("Nearly there!"), l("Like trying to catch a greased shrewboo..."), l("Aw, he got away again!"), l("Slippery little guy!"); + .@r = rand(getarraysize(.RandomFailureMessages$)); + message strcharinfo(0), .RandomFailureMessages$[.@r]; + .speed = max(140, 200 - 10 * (@ArtisQuests_CatchPiouTries + + ArtisQuests_CatchPiou_Difficulcy)); + } + end; + +OnHour00: + .LastTimeTouched = 0; + end; + +OnTimer1000: + dographmovestep; + +OnInit: + .distance = 5; + .walkmask = WALK_WATER; + + initmovegraph "carpet middle", 38, 28, + "upper left", 34, 26, 32, 23, + "lower right", 41, 31, 44, 34, + "upper right", 42, 26, 44, 23, + "lower left", 35, 31, 32, 34, + "passage left", 32, 28, + "passage right", 44, 28, + ; + + setmovegraphcmd "carpet middle", "upper left", 1, "wait 1; call ArtisFlyingPiouLogic", + "upper left", "lower right", 1, "call ArtisFlyingPiouLogic", + "lower right", "upper right", 2, "call ArtisFlyingPiouLogic", + "lower right", "lower_left", 1, "call ArtisFlyingPiouLogic", + "upper right", "lower left", 1, "call ArtisFlyingPiouLogic", + "lower left", "table left", 1, "call ArtisFlyingPiouLogic", + "lower left", "table right", 1, "call ArtisFlyingPiouLogic", + "passage left", "carpet middle", 1, "wait 2; call ArtisFlyingPiouLogic", + "passage right", "carpet middle", 1, "wait 2; call ArtisFlyingPiouLogic", + ; + + firstmove "speed 200", "market_start"; + initnpctimer; + + .LastPlayerTouched = -1; + end; +} |