diff options
author | Jesusaves <cpntb1@ymail.com> | 2018-12-31 19:09:49 -0200 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2018-12-31 19:09:49 -0200 |
commit | 2f16d8b8c34257733180058c82415d395ea27474 (patch) | |
tree | 09a7e0b77ba01cfade269593ee88c02122fd5976 /npc/008-1 | |
parent | f4ac215d94dc2c5eb58675f79e0be87932f78cc3 (diff) | |
parent | 28fdcc18ff9c80fea20414482ecc7c74fd0bf9cf (diff) | |
download | serverdata-jesusalva/GuidedTour.tar.gz serverdata-jesusalva/GuidedTour.tar.bz2 serverdata-jesusalva/GuidedTour.tar.xz serverdata-jesusalva/GuidedTour.zip |
Merge branch 'master' into jesusalva/GuidedTourjesusalva/GuidedTour
Diffstat (limited to 'npc/008-1')
-rw-r--r-- | npc/008-1/_import.txt | 14 | ||||
-rw-r--r-- | npc/008-1/_warps.txt | 1 | ||||
-rw-r--r-- | npc/008-1/auldsbel.txt | 20 | ||||
-rw-r--r-- | npc/008-1/banu.txt | 21 | ||||
-rw-r--r-- | npc/008-1/doors.txt | 6 | ||||
-rw-r--r-- | npc/008-1/hinnak.txt | 354 | ||||
-rw-r--r-- | npc/008-1/jack.txt | 314 | ||||
-rw-r--r-- | npc/008-1/mikhail.txt | 131 | ||||
-rw-r--r-- | npc/008-1/milly.txt | 109 | ||||
-rw-r--r-- | npc/008-1/old-man.txt | 90 | ||||
-rw-r--r-- | npc/008-1/old-woman.txt | 137 | ||||
-rw-r--r-- | npc/008-1/oscar.txt | 20 | ||||
-rw-r--r-- | npc/008-1/sabine.txt | 64 | ||||
-rw-r--r-- | npc/008-1/snarfles.txt | 20 | ||||
-rw-r--r-- | npc/008-1/soul-menhir.txt | 58 | ||||
-rw-r--r-- | npc/008-1/voltain.txt | 19 | ||||
-rw-r--r-- | npc/008-1/wateranimation.txt | 4 |
17 files changed, 1373 insertions, 9 deletions
diff --git a/npc/008-1/_import.txt b/npc/008-1/_import.txt index b7797bf0..31bb5966 100644 --- a/npc/008-1/_import.txt +++ b/npc/008-1/_import.txt @@ -2,7 +2,19 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/008-1/_mobs.txt", "npc/008-1/_warps.txt", +"npc/008-1/auldsbel.txt", +"npc/008-1/banu.txt", "npc/008-1/confused-tree.txt", -"npc/008-1/doors.txt", +"npc/008-1/hinnak.txt", +"npc/008-1/jack.txt", "npc/008-1/mapflags.txt", +"npc/008-1/mikhail.txt", +"npc/008-1/milly.txt", +"npc/008-1/old-man.txt", +"npc/008-1/old-woman.txt", +"npc/008-1/oscar.txt", +"npc/008-1/sabine.txt", +"npc/008-1/snarfles.txt", +"npc/008-1/soul-menhir.txt", +"npc/008-1/voltain.txt", "npc/008-1/wateranimation.txt", diff --git a/npc/008-1/_warps.txt b/npc/008-1/_warps.txt index ab1728ed..46e9891d 100644 --- a/npc/008-1/_warps.txt +++ b/npc/008-1/_warps.txt @@ -24,3 +24,4 @@ 008-1,257,130,0 warp #008-1_257_130 0,0,008-2-28,25,31 008-1,233,131,0 warp #008-1_233_131 0,0,008-2-29,36,24 008-1,287,133,0 warp #008-1_287_133 0,0,008-2-30,52,39 +008-1,20,85,0 warp #008-1_20_85 0,1,008-1-1,246,85 diff --git a/npc/008-1/auldsbel.txt b/npc/008-1/auldsbel.txt new file mode 100644 index 00000000..cf4cd16e --- /dev/null +++ b/npc/008-1/auldsbel.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Auldsbel the Magician. +// THIS IS A PLACEHOLDER! + +008-1,119,114,0 script Auldsbel#008-1 NPC_WIZARD,{ + speech + l("Hello."), + l("Oh, you look more interested in magic.. the brotherhood did forbid most of the interesting paths of magic, but boring baby spells are still allowed."), + lg("If you come back later, I may teach you something. But psst, practising magic is quite dangerous these days."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/banu.txt b/npc/008-1/banu.txt new file mode 100644 index 00000000..d8040153 --- /dev/null +++ b/npc/008-1/banu.txt @@ -0,0 +1,21 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Banu, the old lady. +// THIS IS A PLACEHOLDER! + +008-1,244,88,0 script Banu#008-1 NPC_OLD_LADY,{ + speech + l("Hello."), + l("You don't have a scythe, by chance? I am too old to mew this field all alone."), + l("I asked Hinnak, but he wants at least a beer in exchange for his scythe."), + lg("But I hate alcohol, so thats not an option for me."); + + close; + +OnInit: + .sex = G_FEMALE; + .distance = 2; + end; +} diff --git a/npc/008-1/doors.txt b/npc/008-1/doors.txt deleted file mode 100644 index de8ed1d8..00000000 --- a/npc/008-1/doors.txt +++ /dev/null @@ -1,6 +0,0 @@ -008-1,104,27,0 script CottageDoor NPC_WARP,0,0,{ - end; - -OnTouch: - dispbottom(l("Locked.")); -} diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt new file mode 100644 index 00000000..08b6242a --- /dev/null +++ b/npc/008-1/hinnak.txt @@ -0,0 +1,354 @@ +// Evol scripts. +// Author: +// gumi, Micksha +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - hinnak asked for help +// [1] 3 - helped hinnak +// [2] kill counter +// Description: + +// Hinnak needs help to get rid of the same stuff than ever. + +008-1,270,74,0 script Hinnak#008-1 NPC_HINNAK,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(1 | 16 | 64); + end; + } + + function hinn_new_player + { + if(getequipid(EQI_HEAD_TOP) == .bad_hat) + { + narrator 4, + l("The farmer lunges at you with a farming implement."); + heal -50, 0; + + selectd + l("I'm out of here."), + l("Whoa, what are you doing?"); + + if (@menu == 1) + { + return; + } + + speech 4 | 1, + l("Sorry, you look like a pinkie."), + l("They've been destroying my fields, and I guess I got a bit worked up."); + } + + else + { + speech 4, + l("Argh!"), + l("I hate them!"), + l("I @#$% hate them!"), + l("I @#$% hate these @#$% pinkies!"); + + selectd + l("You need some anger control therapy."), + l("Why do you hate them?"); + + if (@menu == 1) + { + return; + } + + speech 4 | 1, + l("These @#$% beasts are jumping around in my fields destroying all my harvest."), + l("But they are too fast."), + l("I can't catch them."); + } + + selectd + l("Want me to help you?"); + + speech 4 | 1, + l("Yes, you look quite fast."), + l("Maybe you can catch some of them."), + l("That will pay them a lesson."), + l("Slay some of them and bring me %d of their antennae.", .drop_count); + + setq .quest, 2, 0; + + selectd + l("How much is this worth to you?"); + + speech 1, + l("Well, I can't offer you much."), + l("But I got an old scythe laying around."), + l("Maybe you can use it as a weapon."); + + close; + } + + function hinn_help + { + if (getequipid(EQI_HEAD_TOP) == .bad_hat) + { + narrator 4, + l("The farmer glares at your hat."); + } + + speech 4, + l("Have you got the %d antennae?", .drop_count); + + selectd + l("Not yet, but I am working on it."), + rif(countitem(.monster_drop) >= .drop_count, l("Sure, here they are!")); + + if (@menu == 1) + { + return; + } + + if (getq2(.quest) < .kill_count) + { + speech 1, + l("Don't try to fool me!"), + l("I know you didn't kill them yourself!"), + l("Kill at least %d pinkies and come back.", .kill_count); + close; + } + + speech 1, + l("Thank you very much"), + l("As promised, here's my old scythe."), + l("Maybe you can use it as a weapon."), + l("It is a bit cumbersome but its strikes are deadly."); + + if (countitem(.monster_drop) >= .drop_count) + { + delitem .monster_drop, .drop_count; + getitem .reward_item, 1; + Zeny += .reward_money; + //getexp .reward_exp, 0; + setq .quest, 3; + } + close; + } + + function hinn_thanks + { + if (getequipid(EQI_HEAD_TOP) == .bad_hat) + { + speech 4, + l("That better be a trophy on your head."); + + selectd + l("It is."); + + speech 4 | 1, + l("Good then."), + l("Thanks for your help with the pinkies."); + } + + else + { + speech 4, + l("Good to see you again."), + l("Thanks again for helping me with the pinkies!"); + } + + selectd + l("Sure, any time!"), + l("Anything else you want me to do?"), + l("You're welcome. Bye!"); + + if (@menu == 3) + { + return; + } + + speech 4 | 1, + l("Actually, it's been a long day."), + l("If it's no trouble, could you get me a %s?", + getitemlink(.drink_item)); + + selectd + rif(countitem(.drink_item) >= 1, l("Here you are.")), + l("Sure, I'll go get one. Bye!"), + l("You shouldn't drink while working!"); + + do + { + switch (@menu) + { + case 2: return; + case 3: + speech 1, + l("Well, I'm done for the day, and I'm quite old enough to decide when I can have a %s, thank you!", + getitemname(.drink_item)); + selectd + rif(countitem(.drink_item) >= 1, l("Sorry... here you are.")), + l("I don't have any."); + break; + default: + if (countitem(.drink_item) < 1) + { + return; + } + delitem .drink_item, 1; + + narrator 4 | 8 | 2 | 1, + l("%s takes a sip.", .name$); + + speech 4, + l("Aaah!"), + l("Nothing like a well-deserved %s after a long day of tending the crops!", + getitemname(.drink_item)), + l("Thanks, that was very kind of you!"); + + narrator 4 | 8 | 1 | 2, + l("He takes another sip."); + + speech 4, + l("Thanks!"), + l("You know, I had the strangest thing happen to me."), + l("I had this patch of ground that was really clumpy; lots of clay, you see."), + l("Right over there."), + // TODO: move cam to the spot + l("Looks much better now, doesn't it?"), + // TODO: restore cam + l("But how I got there is kind of scary..."), + l("I'd been trying to break it up for a while, but that kind of work is a pain."), + l("So my wife said that I should go and see the witch, just in case she knows something."), + l("And sure enough I ask the witch, and she has a look at it."), + l("“Nothing I can do”, she says, “but I can ask a friend”."), + l("So the next day another witch shows up."), + l("Gorgeous woman, but when she looked at me, the scares went scuttling down my spine..."), + l("First thing she asked was if I'm a farmer."), + l("Said her friend had told her that I needed help."), + l("I show her what the problem is, and she tells me to go inside and wait."); + + narrator 4 | 8 | 1 | 2, + l("%s drains his mug in one long sip, then hesitates.", .name$); + + speech 4, + l("So I go inside."), + l("I'm barely in when it starts raining outside, pouring cats and mouboos!"), + l("Not so weird, perhaps, except that it was been bright and sunny just a second before!"), + l("So I rush out, my wife telling me to leave the witch alone, and I see her standing there in the middle of the rain..."), + l("None of the raindrops touched her, as if they were afraid!"), + l("Then she yells out some gobbledygook word, and out of the ground there comes a swarm of maggots, crawling and digging and climbing over each other's backs..."), + // XXX: maybe here insert a reference to SUSAN? + l("And then she turns to me!"), + l("Seeing her gaze, for a moment there I thought she would turn me into a pinkie, for sure..."), + l("But all she says is, “had you stayed inside, you wouldn't be wet now”."); + + selectd + l("Hahaha!"), + l("Whoah, scary..."), + l("What was that gobbledygook word?"), + l("I better go now. Bye."); + + switch (@menu) + { + case 1: + speech 1, + l("Yeah, funny now..."), + l("But you should've seen that gaze!"), + l("Ah, well, never mind."); + close; + case 2: + speech 1, + l("Yeah, you could say that..."); + close; + case 3: + speech 1, + l("Oh, I can't be sure..."), + l("But something like “Nanaj princino”, I think."); // this is "Dwarven Princess" translated to Esperanto + close; + } + return; + } + } while(true); + } + + // OnTalk: + + if (getq(.quest_inspector) == 11) + { + selectd + l("Did you see anyone in a mask come by here at night?"), + l("Did you see anyone with a large satchel come by here at night?"), + l("Hello."); + + switch (@menu) + { + case 1: + speech + l("No."), + l("It tends to be too dark to see a mask."); + close; + + case 2: + speech + l("Yes, I saw someone with a large sack on their back go to the mining camp."); + close; + } + } + + switch (getq(.quest)) + { + case 0: + case 1: hinn_new_player; break; + case 2: hinn_help; break; + default: hinn_thanks; + } + + closeclientdialog(); + close; + +OnNPCKillEvent: + // XXX: maybe have a OnTakeScript on the pinky antena item so we count pickups instead of kills + if (killedrid == .monster_id && getq(.quest) == 2 && + getq2(.quest) < .kill_count && strcharinfo(PC_MAP) == .map$) + { + setq .quest, 2, getq2(.quest) + 1; + } + end; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 15; // min level to do the quest + .monster_id = Pinkie; // monster to kill + .monster_drop = PinkAntennae; // monster drop to collect + .drop_count = 10; // amount of that drop needed + .kill_count = 10; // min number of kills + .reward_item = Scythe; // reward item + .reward_money = 0; // reward money + .reward_exp = 0; // reward exp + .bad_hat = PinkieHat; // hinnak attacks you when you wear this hat + .drink_item = Beer; // the item hinnak asks to drink + + .quest = HurnscaldQuests_Hinnak; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} + diff --git a/npc/008-1/jack.txt b/npc/008-1/jack.txt new file mode 100644 index 00000000..d8f1ff2d --- /dev/null +++ b/npc/008-1/jack.txt @@ -0,0 +1,314 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (forest bow): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - alan wants to ask jack +// [1] 3 - jack explained problem +// [1] 4 - alan asks to find wood +// [1] 5 - found perfect wood +// [1] 6 - got the bow +// [2] unused +// [3] unused +// [t] unused +// Quest states (wooden shield): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - jack proposes shield +// [1] 3 - player accepted quest +// [1] 4 - got the shield +// [2] unused +// [3] unused +// [t] unused +// Description: +// Jack Lumber, the handsome lumberjack + + +008-1,241,116,0 script Jack NPC_LUMBERJACK,{ + + function bow_intro { + speech(4, + l("Why not?!"), + l("I value my life, that's why!")); + + selectd(l("What do you mean?")); + + speech(4, + l("A week ago, I was going to chop down one of those twigleaf trees in the forest to the southwest."), + l("These twigleafs are the trees that give me the living wood you speak of."), // XXX: were Log Heads named "Twigleaf" at some point in the past? + l("I was just chopping away with my axe, and guess what happened?"), + l("One of its branches hit me!"), + l("At first, I thought it fell down or the wind blew it, but it hurt!"), + l("After I shook it off and struck the tree again with my axe, another branch hit me!"), + l("I got angry and started to chop off all the low-hanging branches so this couldn't happen anymore."), + l("Even after all that though, I still can't believe what happened next.")); + + selectd(l("What happened?")); + + speech(4, + l("You'll think I'm insane if I tell you...")); + + selectd(l("I won't. I promise.")); + + speech(4, + l("Alright, well..."), + l("After I chopped off a few branches, the whole tree started to move!"), + l("Its roots tore out of the earth, all the branches started to wave around, and a face appeared on the trunk."), + l("The whole tree CAME TO LIFE! It was mad!")); + + selectd(l("Did you run away?"), l("Did you fight it?")); + + speech(4, + l("I fought it, of course!"), + l("I took my axe and attacked the beast!"), + l("It hit me here *points at a bruise on his shoulder*, here *lifts his trouser leg to show another bruise*, and here *lifts his shirt and reveals even worse bruises*."), // XXX: that's kinda dirty imho... maybe we could use the narrator? + l("But I didn't give up!"), + l("I chopped away at it, branch after branch, and in the end I chopped off its roots, and it fell to the ground, motionless.")); + + selectd(l("So you beat the monster? Then why are you so scared?")); + + speech(4, + l("Well, I was exhausted and had to rest."), + l("A few minutes passed, and suddenly I was practically surrounded by a dozen or more of these living trees!")); + + selectd(l("Did you fight them too?")); + + speech(4, + l("Are you crazy?"), + l("I barely destroyed one of those beasts."), + l("I was in no shape to fight again!"), + l("I ran away as fast as I could, and lucky for me the monsters aren't that fast on their tiny root legs, Ha!")); + + selectd(l("So, I guess you aren't chopping down trees anymore?")); + + speech(4, + l("I still do; it's my job."), + l("But I'll no longer chop those twigleafs, I'll tell you that."), + l("I know the bow master wants some twigleaf wood, but I don't care."), + l("I won't risk MY life for a few gold pieces!"), + l("If you really want to, just go to the southwest, but I can't help you."), + l("I won't go there ever again.")); + + selectd(l("Southwest you say? OK, thank you.")); + + speech(l("Don't say I didn't warn you!")); + + // What a huge text wall, I feel sorry for the players + + close2; + setq(.quest_bow, 3); + end; + } + + function bow_good_luck { + if (getq(.quest_inspector) == 2) + { + speech(4, + l("Good luck hunting those tree monsters – you'll need it.")); + + selectd(l("Have you seen anything that might be connected to the recent robberies in town?")); + + speech(l("Sorry, no.")); + close; + } + + npctalk3(l("Good luck hunting those tree monsters – you'll need it.")); + end; + } + + function shield_intro { + speech(4, + l("I have an idea."), + l("What would you say about a new shield?")); + + setq(.quest_shield, 2); + + selectd( + l("No thanks."), + l("Yes, please!"), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 1: closeclientdialog(); close; + case 2: + speech( + l("All I need is %d %s.", .logs_amount, getitemlink(.logs_item)), + l("This needn't be high quality wood; pretty much any log you can find should work."), + l("Oh, and I'll also need %s E for other materials.", format_number(.shield_cost))); + + close2; + setq(.quest_shield, 3); + end; + case 3: speech(l("Sorry, no.")); close; + } + } + + function bow_congrats { + speech(4, + l("You've finally found that perfect piece of living wood that Alan needs to make a Forest Bow, haven't you?")); + + selectd( + l("I couldn't afford the bow, though..."), + l("No, I'm still looking."), + l("Yes, I've got the Forest bow now."), + l("I'm a melee warrior, I don't need bows."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 3: + if (getq(.quest_bow) <= 5) + { + speech(4, + l("Hrmph."), + l("I'm someone who respects those speaking the truth.")); + } + // fallthrough + case 1: + case 4: + speech(4, + l("You no doubt remember how I struggled with those beasts, fighting for my life."), + l("Scared me, those seven-branched little stumps did!"), + l("Never since that day have I strayed near them, and yet there you are, cutting them down one by one."), + l("I'm proud of you – to dare to fight those trunks is admirable indeed."), + l("You're as strong as if you were my own child!")); + + shield_intro; + break; + case 2: speech(l("You should go talk to Alan again.")); close; + case 5: speech(l("Sorry, no.")); close; + } + } + + function shield_make { + speech(4, + l("Do you have the %d %s and %s E for the shield?", + .logs_amount, getitemlink(.logs_item), format_number(.shield_cost))); + + selectd( + rif(countitem(.logs_item) >= .logs_amount && Zeny >= .shield_cost, + l("Here it is.")), + l("I'll come back later.")); + + if (@menu != 1) { + closeclientdialog(); + close; + } + + speech(4, + l("Have a seat.")); + + narrator(4, + l("Jack saws the logs into pieces and then sands them until they are smooth to the touch."), + l("Applying some strong-smelling liquid, he tans them to a darker hue."), + l("Grabbing one of two leftover pieces, he begins to carve it into a round shape, then repeats this with the second piece – shield handles from what you can tell."), + l("Meanwhile, the sun has dried the other pieces."), + l("Jack places them next to each other, adds a frame, and nails everything together."), + l("The resulting shield looks usable already, but Jack applies another liquid to it and leaves it to dry for a few moments."), + l("Finally, he hands the shield to you.")); + + if (checkweight(.shield_item, 1) != true) + { + speech( + l("It seems you can't carry the %s.", getitemlink(.shield_item)), + l("Come back when you do.")); + close; + } + + if (Zeny < .shield_cost || countitem(.logs_item) < .logs_amount) + close; // double-check + + setq(.quest_shield, 4); + delitem(.logs_item, .logs_amount); + getitem(.shield_item, 1); + Zeny -= .shield_cost; + getexp(.shield_exp, 0); + + speech( + l("Enjoy your new shield!")); + + close; + } + + function wood_daily { + speech(4, + l("I hope that my shield will serve you well!")); + + selectd( + l("Me too."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + } + + closeclientdialog(); // TODO: daily quest (needs the generic daily quest script) + close; + } + + // OnTalk: + switch (getq(.quest_shield)) + { + case 2: shield_intro; break; + case 3: shield_make; break; + case 4: wood_daily; break; + } + + switch (getq(.quest_bow)) + { + case 3: + case 4: bow_good_luck; break; + case 5: + case 6: bow_congrats; break; + } + + // initial intro + { + speech(4, + l("Hello there!"), + l("My name is Jack Lumber, the enemy of all trees."), + l("If you need some firewood, just let me know.")); + + selectd( + l("I'll keep that in mind."), + rif(getq(.quest_inspector) == 2, l("Have you seen anything that might be connected to the recent robberies in town?")), + rif(getq(.quest_bow) == 2, l("I heard you aren't delivering any more living wood. Why not?"))); + + switch (@menu) + { + case 2: speech(l("Sorry, no.")); close; + case 3: bow_intro; break; + } + + } + + closeclientdialog(); + close; + +OnInit: + .logs_item = RawLog; + .logs_amount = 40; // XXX: maybe nlogn? + .shield_cost = 5000; // XXX: maybe nlogn? + .shield_exp = 2500; + .shield_item = WoodenShield; + + .quest_bow = HurnscaldQuests_ForestBow; + .quest_shield = HurnscaldQuests_WoodenShield; + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_bow; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/mikhail.txt b/npc/008-1/mikhail.txt new file mode 100644 index 00000000..3e442499 --- /dev/null +++ b/npc/008-1/mikhail.txt @@ -0,0 +1,131 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// takes part in the slime soup quest (Bernard) + +008-1,298,95,0 script Mikhail NPC_MIKHAIL,{ + + function soup_scared { + speech 4, + l("Hello..."), + l("I'm supposed to be helping Bernard from the Inn but..."); + + narrator 4, + l("His eyes grow wide"); + + speech 4, + l("Eeekkk another one."); + + narrator + l("It seems that the boy would like to say more, but seems too terrified at the moment."), + l("Maybe you should help someone else first, so that he sees your intentions are good."); + + close; + } + + function soup_intro2 { + speech 4, + l("Bernard sent me to get %d %s from the %s in the fields, but they scare me so bad!", + .third_item_qty, getitemlink(.third_item), getmonsterlink(.third_item_mob)), + l("You look like a nice person."), + l("Would you go get them for me?"); + + selectd + l("Of course, I'll go get them for you."); + + speech + l("Thank you so much!"), + l("I'll wait for you here."); + + setq .quest, 6; + close; + } + + function soup_reminder_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("It doesn't look like you have them all..."); + close; + } + + function soup_reward_slime2 { + speech + l("Did you bring me the %d %s I need?", + .third_item_qty, getitemlink(.third_item)), + l("Ooh!"), + l("Thank you so much!"), + l("I can get back to Bernard now!"); + + if (countitem(.third_item) < .third_item_qty) + close; // double-check + + delitem .third_item, .third_item_qty; + setq .quest, 7; + getexp .third_reward_exp, 0; + close; + } + + function soup_thanks_slime2 { + speech + l("Thanks again for helping me!") + " %%Q"; + + close; + } + + switch(getq(.quest)) + { + + case 0: + case 1: + case 2: + case 3: + case 4: soup_scared; break; + case 5: soup_intro2; break; + case 6: + if (countitem(.third_item) < .third_item_qty) + soup_reminder_slime2; + else + soup_reward_slime2; + break; + default: soup_thanks_slime2; + } + + closeclientdialog(); + close; + +OnInit: + .third_item = MaggotSlime; + .third_item_qty = 5; + .third_item_mob = Maggot; + + .third_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .sex = G_MALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/milly.txt b/npc/008-1/milly.txt new file mode 100644 index 00000000..0ea17a1c --- /dev/null +++ b/npc/008-1/milly.txt @@ -0,0 +1,109 @@ +// Evol scripts. +// Author: +// gumi +// Quest states (inspector): +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,282,114,0 script Milly NPC_GIRL_MILLY,{ + + // TODO: make the actual beanie copter quest after those are finished: + // [X] Inspector quest + // [ ] Bone knife quest + // [ ] Setzer quest + // [ ] Rossy quest + // [ ] Cindy quest + + .@q_inspector = getq(.quest_inspector); + + speech(4, + l("Hello traveler, welcome to Hurnscald."), + l("Have you met Kfahr yet?"), + l("He is the greatest hero that ever walked the land of Hurnscald!")); + + selectd( + l("Hi! No, I haven't seen him yet."), + l("Where can I find him?"), + l("Mh, I don't care for heroes."), + l("Hello, yes I have met him."), + rif(.@q_inspector == 2, l("Have you seen anything strange lately?")), + rif(.@q_inspector == 2, l("Do you know anything about the recent robberies?"))); + + switch (@menu) + { + case 3: + speech(4, + l("What?"), + l("Surely you do not appreciate what a hero he is!"), + l("Mh, or perhaps honor is dead in you; for you to be so slow to comprehend the good that his exploits have wrought for us."), // XXX: this sentence seems too complicated to come from a child's mouth + l("Put on your thinking cap and be propelled into high adventure!"), + l("Go to Kfahr, and listen to his stories."), + l("You can't have met him."), + l("No one who has met him would say such silly things.")); + // fallthrough + + case 1: + speech(4, + l("I highly recommend you seek him out!")); + // fallthrough + + case 2: + speech( + l("He is a regular at the inn, located in the north-west part of town."), + l("If you are lucky he might tell you a story about his adventures.")); + break; + + case 4: + speech( + l("Oh, I hope you stayed and listened to his stories about his adventures.")); + break; + + case 5: + speech( + l("I haven't seen anything strange.")); + break; + + case 6: + speech( + l("No, sorry.")); + break; + } + + close; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; // TODO: change this to the milly quest debug when it exists + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/old-man.txt b/npc/008-1/old-man.txt new file mode 100644 index 00000000..c2004a7d --- /dev/null +++ b/npc/008-1/old-man.txt @@ -0,0 +1,90 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,290,139,0 script Old Man NPC_OLD_MAN_HURNS,{ + + function oldman_ask { + speech(4, + l("Hi there, need something?")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("I'm sorry, but I didn't see anything."), + l("You should ask my old woman.")); + close; + } + + function oldman_accuse { + speech(4, + l("Found anything new?")); + + selectd( + l("The leader of the troupe said you hung around them a lot while they were in town.")); + + speech( + l("Yes, I hung around the theater a lot."), + l("I was an actor when I was younger."), + l("But I wasn't there that night."), + l("Me and the wife were at home all night.")); + + close2; + setq(.quest_inspector, 8); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: oldman_ask; break; + case 7: oldman_accuse; break; + } + + // initial intro + npctalk3(l("Don't let those monsters get to you.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_MALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/old-woman.txt b/npc/008-1/old-woman.txt new file mode 100644 index 00000000..c6ca467b --- /dev/null +++ b/npc/008-1/old-woman.txt @@ -0,0 +1,137 @@ +/// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// Old Lady in the flower field, Robberies in Hurnscald. + +008-1,231,114,0 script Old Woman NPC_OLD_LADY,{ + + function is_inspector { + return (getequipcardid(EQI_HEAD_MID, 0) == NavyBlueCottonDye /*&& + getequipcardid(EQI_HEAD_LOW, 0) == NavyBlueCottonDye*/); // TODO / FIXME: remove the /* */ whenever we have cotton pants + } + + function oldwoman_ask { + speech(4, + l("Hello deary.")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + .@q = getq(.quest_inspector); + + if (!is_inspector()) + { + speech(l("Yes, but I'm only talking to the inspector himself!")); + + close2; + if (.@q < 3) + setq(.quest_inspector, 3); + end; + } + + if (.@q == 2 || .@q == 3) + { + speech( + l("I saw someone sneaking around town wearing a theater mask."), + l("It looked like one of the masks used by the troupe that was in town recently.")); + + close2; + setq(.quest_inspector, 4); + } + + else if (.@q == 10) + { + speech( + l("I've remembered something else."), + l("The night the troupe left, I saw someone with a theater mask take a large satchel out of town."), + l("He was heading north.")); + + close2; + setq(.quest_inspector, 11); + } + + end; + } + + function oldwoman_alibi { + speech(4, + l("Hello deary.")); + + selectd( + l("Was your husband with you at home all night the last night that the troupe was in town?")); + + speech( + l("Yes, we were both at home all night.")); + + close2; + setq(.quest_inspector, 9); + end; + } + + function oldwoman_filler { + npctalk3(l("I hope you catch that naughty person!")); + end; + } + + // OnTalk: + switch (getq(.quest_inspector)) + { + case 2: + case 3: oldwoman_ask; break; + case 4: + case 5: + case 6: + case 7: oldwoman_filler; break; + case 8: + case 9: oldwoman_alibi; break; + case 10: oldwoman_ask; break; + } + + // initial intro + if (BaseLevel < 40) + npctalk3(l("Watch out for these flowers. They don't like to be messed with.")); + else + npctalk3(l("Hello deary.")); + end; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 1; // this npc has bad hearing + .speed = 2000; // this npc is very old + // TODO: move graph (after the Hurnscald map is finalized) + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/oscar.txt b/npc/008-1/oscar.txt new file mode 100644 index 00000000..9541da7b --- /dev/null +++ b/npc/008-1/oscar.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Oscar the farmer. +// THIS IS A PLACEHOLDER! + +008-1,160,77,0 script Oscar#008-1 NPC_CAUL,{ + speech + l("Hi, my name is Oscar."), + l("I used to be a farmer, but my magic attempts were banned by the gouvernment."), + lg("Now I remain poor and unemployed."); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/sabine.txt b/npc/008-1/sabine.txt new file mode 100644 index 00000000..87026efb --- /dev/null +++ b/npc/008-1/sabine.txt @@ -0,0 +1,64 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - talked to inspector (1) <= start +// [1] 3 - talked to old woman (1) +// [1] 4 - talked to old woman (2) +// [1] 5 - talked to inspector (2) +// [1] 6 - talked to troupe leader (1) +// [1] 7 - talked to inspector (3) +// [1] 8 - talked to old man +// [1] 9 - talked to old woman (3) +// [1] 10 - talked to inspector (4) +// [1] 11 - talked to old woman (4) +// [1] 12 - talked to malek +// [1] 13 - searched the bookcase +// [1] 14 - talked to inspector (5) +// [1] 15 - talked to troupe leader (2) <= reward +// [1] 16 - talked to inspector (6) <= reward, end +// [2] unused +// [3] unused +// [t] unused +// Description: +// robberies in hurnscald + +008-1,291,97,0 script Sabine NPC_SABINE,{ + + if (getq(.quest_inspector) != 2) + { + npctalk3(generic(1 | 16)); + end; + } + + speech(4, + l("Isn't this place pretty?"), + l("I love hanging out here!")); + + selectd( + l("Have you seen anything strange lately?"), + l("Do you know anything about the recent robberies?")); + + speech( + l("No, sorry.")); + + close; + +OnInit: + .quest_inspector = HurnscaldQuests_Inspector; + .quest_debug = .quest_inspector; + .sex = G_FEMALE; + .distance = 3; + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/snarfles.txt b/npc/008-1/snarfles.txt new file mode 100644 index 00000000..6ad08867 --- /dev/null +++ b/npc/008-1/snarfles.txt @@ -0,0 +1,20 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Snarfles the mouboo farmer. +// THIS IS A PLACEHOLDER! + +008-1,79,118,0 script Snarfles#008-1 NPC_SNARFLES,{ + speech + l("My Mouboos, my beloved Mouboos!"), + l("Oh, hi, isn't it cool to live among all those Mouboos? I don't understand how some people can eat Mouboo steak."), + lg("Murderers!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/soul-menhir.txt b/npc/008-1/soul-menhir.txt new file mode 100644 index 00000000..3c295c92 --- /dev/null +++ b/npc/008-1/soul-menhir.txt @@ -0,0 +1,58 @@ +// Evol scripts. +// Author: +// gumi +// Description: +// place of power, mana refills faster when sitting nearby + +008-1,252,111,0 script Soul Menhir#hurnscald NPC_NO_SPRITE,{ + + end; + +OnRefill: + @menhir_lock = false; + getmapxy(.@map$, .@x, .@y, UNITTYPE_PC); + + if (.@map$ != .map$ || distance(.x, .y, .@x, .@y) > .refill_distance || + !(issit())) + end; + + heal(0, .refill_rate); + end; + + +OnTimer500: + .@count = getunits(BL_PC, .@units[0], false, .map$, (.x - .refill_distance), + (.y - .refill_distance), (.x + .refill_distance), (.y + .refill_distance)); + + for (.@i = 0; .@i < .@count; ++.@i) + { + if (.@units[.@i] < 0) continue; // pre-check, just in case + deltimer(.name$ + "::OnRefill", .@units[.@i]); + if (gettimer(TIMER_COUNT, .@units[.@i], .name$ + "::OnRefill") > 0 || + getvariableofpc(@menhir_lock, .@units[.@i])) { + continue; + } + set(getvariableofpc(@menhir_lock, .@units[.@i]), true); + addtimer(rand(.refill_timer), .name$ + "::OnRefill", .@units[.@i]); + } + + initnpctimer(); + end; + +OnInit: + + .refill_rate = 1; // number of SP to give every refill + .refill_distance = 7; // max distance + .refill_timer = 200; // wait rand(X) ms before refill + initnpctimer(); + +////////// UNFINISHED ////////// +//////////////////////////////// +// REMOVE THIS CODE WHEN THIS // +// NPC IS NO LONGER A WIP ////// +//////////////////////////////// +//if (!debug) disablenpc(.name$); +///////// UNFINISHED /////////// + + end; +} diff --git a/npc/008-1/voltain.txt b/npc/008-1/voltain.txt new file mode 100644 index 00000000..b5f82db0 --- /dev/null +++ b/npc/008-1/voltain.txt @@ -0,0 +1,19 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Voltain the dark druid. +// THIS IS A PLACEHOLDER! + +008-1,182,155,0 script Voltain#008-1 NPC_DARK_DRUID,{ + speech + l("Go away, I have to think about new evil doings."), + lg("GO AWAY, I SAID!"); + + close; + +OnInit: + .sex = G_MALE; + .distance = 2; + end; +} diff --git a/npc/008-1/wateranimation.txt b/npc/008-1/wateranimation.txt index 8b66f637..74ff5fd9 100644 --- a/npc/008-1/wateranimation.txt +++ b/npc/008-1/wateranimation.txt @@ -5,5 +5,5 @@ // Description: // Water animations, splash, fishes, etc... -008-1,139,32,0 duplicate(#water_animation0) #water_animation16 NPC_WATER_SPLASH -008-1,140,40,0 duplicate(#water_animation0) #water_animation17 NPC_WATER_SPLASH +008-1,311,97,0 duplicate(#water_animation0) #water_animation16 NPC_WATER_SPLASH +008-1,314,139,0 duplicate(#water_animation0) #water_animation17 NPC_WATER_SPLASH |