diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
commit | a7c45a192268da2601cef47a4cdba987ae2327ca (patch) | |
tree | c5fb5b97db109fe7106496dd96498c475881046b /npc/009-1 | |
download | serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2 serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip |
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/009-1')
-rw-r--r-- | npc/009-1/_import.txt | 14 | ||||
-rw-r--r-- | npc/009-1/_mobs.txt | 11 | ||||
-rw-r--r-- | npc/009-1/_warps.txt | 9 | ||||
-rw-r--r-- | npc/009-1/charles.txt | 199 | ||||
-rw-r--r-- | npc/009-1/estate.txt | 171 | ||||
-rw-r--r-- | npc/009-1/fisherman.txt | 153 | ||||
-rw-r--r-- | npc/009-1/foxhound.txt | 197 | ||||
-rw-r--r-- | npc/009-1/guards.txt | 202 | ||||
-rw-r--r-- | npc/009-1/lynnthetraveler.txt | 93 | ||||
-rw-r--r-- | npc/009-1/mapflags.txt | 2 | ||||
-rw-r--r-- | npc/009-1/soul-menhir.txt | 20 | ||||
-rw-r--r-- | npc/009-1/teleporter.txt | 23 | ||||
-rw-r--r-- | npc/009-1/town.txt | 11 |
13 files changed, 1105 insertions, 0 deletions
diff --git a/npc/009-1/_import.txt b/npc/009-1/_import.txt new file mode 100644 index 0000000..36577f2 --- /dev/null +++ b/npc/009-1/_import.txt @@ -0,0 +1,14 @@ +// Map 009-1: Halinarzo +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/009-1/_mobs.txt", +"npc/009-1/_warps.txt", +"npc/009-1/charles.txt", +"npc/009-1/estate.txt", +"npc/009-1/fisherman.txt", +"npc/009-1/foxhound.txt", +"npc/009-1/guards.txt", +"npc/009-1/lynnthetraveler.txt", +"npc/009-1/mapflags.txt", +"npc/009-1/soul-menhir.txt", +"npc/009-1/teleporter.txt", +"npc/009-1/town.txt", diff --git a/npc/009-1/_mobs.txt b/npc/009-1/_mobs.txt new file mode 100644 index 0000000..7c0859b --- /dev/null +++ b/npc/009-1/_mobs.txt @@ -0,0 +1,11 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 009-1: Halinarzo mobs +009-1,76,35,49,10 monster Giant Maggot 1031,6,30000,90000 +009-1,27,29,7,8 monster Piou 1002,1,60000,60000 +009-1,73,51,49,14 monster Fire Goblin 1067,12,45000,45000,Fisherman::OnKillFireGoblin +009-1,70,98,47,6 monster Scorpion 1071,3,30000,20000 +009-1,70,83,47,6 monster Red Scorpion 1072,1,30000,20000 +009-1,27,96,7,9 monster Duck 1029,2,60000,60000 +009-1,0,0,0,0 monster Desert Maggot 1083,45,35000,150000 +009-1,76,105,1,0 monster Chagashroom Field 1128,1,70000,60000 +009-1,113,88,0,0 monster Chagashroom Field 1128,1,60000,60000 diff --git a/npc/009-1/_warps.txt b/npc/009-1/_warps.txt new file mode 100644 index 0000000..82d16fb --- /dev/null +++ b/npc/009-1/_warps.txt @@ -0,0 +1,9 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 009-1: Halinarzo warps +009-1,56,109,0 warp #009-1_56_109 2,0,010-2,169,20 +009-1,119,40,0 warp #009-1_119_40 0,0,011-1,177,177 +009-1,84,63,0 warp #009-1_84_63 0,0,009-2,62,66 +009-1,73,63,0 warp #009-1_73_63 0,0,009-2,28,65 +009-1,86,34,0 warp #009-1_86_34 0,0,009-3,44,56 +009-1,33,62,0 warp #009-1_33_62 0,0,009-4,48,53 +009-1,64,38,0 warp #009-1_64_38 1,0,009-5,32,41 diff --git a/npc/009-1/charles.txt b/npc/009-1/charles.txt new file mode 100644 index 0000000..d3cdf3e --- /dev/null +++ b/npc/009-1/charles.txt @@ -0,0 +1,199 @@ +// TMW-2 Script +// Original Creator: Adson Renato <adson25@gmail.com> +// Date: 2010-11-19 2:31 AM BRT +// Review: +// * 2013-09-03: ernando2000 <ernando.quirino@hotmail.com> +// * 2013-09-04: Lunovox Heavenfinder <rui.gravata@gmail.com> +// * 2016-06-14: Jesusalva <tmwbr@jesussalva.com> +// * 2017-06-17: Jesusalva <cpntb1@ymail.com> +// * 2018-05-24: Jesusalva <admin@tmw2.org> +// * Adapted from TMW-BR to TMW2 +// Minimum Req.: LVL 30 +// Consumables: Bandits drops: CoinBag, Dagger, Leather Shield, Empty Bottle +// Prize: 1 BurglarMask +// Description: +// A contrabandist which feeds Halinarzo's black market. +// Will later teach the Steal skill. (maybe) +// Notes: +// Blame Saulc. + + + + +009-1,24,105,0 script Charles, Trader King NPC_ORC,{ + .@q=getq(HalinarzoQuest_TraderKing); + if (BaseLevel < 30) goto L_Weak; + if (.@q == 1) goto L_Return; + if (.@q == 2) goto L_End; + goto L_Start; + +L_Weak: + mesn; + mesq lg("Get out of here, weakling. You'll be killed by bandits."); + close; + +L_Start: + mesn; + mes lg(":> \"Hello, youngling...\""); + next; + mesn strcharinfo(0); + menu + l("This character person is strange I better get away..."), L_Distrust, + l("Hmm, who are you?") , L_WhoAmI; + +L_WhoAmI: + mes ""; + mesn; + mesq l("I am the Trader King, because I supply a market!"); // the Black Market + close; + +L_Distrust: + mes ""; + mesn strcharinfo(0); + mes l("¬.¬ \"Hmm, to me, you look like a thief or bandit...\""); + next; + mesn; + mes l(":D \"HAHAHAHAH! Me?! a thief? only during free time...\""); + next; + mesn strcharinfo(0); + mes l("¬.¬ \"I knew it! I'll report you at once.\""); + next; + mesn; + mes l("0.0 \"No no, please no! I can propose you a great deal for your silence!\""); + next; + menu + l("Which deal?"), L_Deal, + l("No, justice must be done.") , L_Die; + +L_Deal: + mes ""; + mesn; + mesq l(":/ \"Hmm... let me see... Aha, I know! I can make you a great bandit with a simple burglar mask!\""); + next; + mesn strcharinfo(0); + mes l(":o \"What? I'm not a bandit! But it looks SO COOL! Do you need anything while you're here?\""); + next; + mesn; + mes l(":D \"Ah! Yes, that would help a lot! I don't need anything a bandit couldn't give you: 25 @@, 5 @@, 2 @@ and a @@. And 6000 GP.\"", getitemlink(CoinBag), getitemlink(EmptyBottle), getitemlink(Dagger), getitemlink(LeatherShield)); + mesq l("What do you say?"); + next; + mesn strcharinfo(0); + menu + l("No way! That's absurd!"), L_Close, + l("That's a lot, but we have a deal!"), L_Accept; + +L_Accept: + mes ""; + mesn; + mes l(">:| \"Go take the items and remember: Not even a single word about me!\""); + next; + mesn strcharinfo(0); + mes l(";-) \"Don't worry! Leave to me!\""); + next; + mesn; + mes l("Here's what I need:"); + mes l("@@/25 @@", countitem(CoinBag), getitemlink(CoinBag)); + mes l("@@/5 @@", countitem(EmptyBottle), getitemlink(EmptyBottle)); + mes l("@@/2 @@", countitem(Dagger), getitemlink(Dagger)); + mes l("@@/1 @@", countitem(LeatherShield), getitemlink(LeatherShield)); + mes l("@@/6000 GP", Zeny); + + setq HalinarzoQuest_TraderKing, 1; + close; + +L_Return: + mesn; + mes "\"Do you have what I asked for?\""; + next; + menu + l("Yes, of course."), L_Finish, + l("I forgot what you need."), L_Review, + l("Not yet, I'll be right back."), L_Wait; + +L_Wait: + mes ""; + mesn; + mesq l("I'll be waiting for you! And trading some items of questionable origins..."); + close; + +L_Finish: + if (countitem(CoinBag) < 25 || + countitem(EmptyBottle) < 5 || + countitem(Dagger) < 2 || + countitem(LeatherShield) < 1) + goto L_Missing; + if (Zeny < 6000) goto L_Poor; + + inventoryplace BurglarMask, 1; + delitem CoinBag, 25; + delitem EmptyBottle, 5; + delitem Dagger, 2; + delitem LeatherShield, 1; + Zeny = Zeny - 6000; + getitem BurglarMask, 1; // Bragging Rights + getexp 5840, 25; + setq HalinarzoQuest_TraderKing, 2; + mes ""; + mesn; + mes l(":D \"Excellent! You've kept your end on the bargain!\""); + next; + mesn; + mesq l("I always keep my end on the bargain, so here you go."); + next; + mesn; + mes l(":) \"A pleasure to trade if you. Don't get caught if you're doing something wrong!\""); + close; + +L_Poor: + mes ""; + mesn; + mes l(":< \"Hey hey! Where's the money?\""); + close; + +L_Missing: + percentheal -15, 0; + mes ""; + mesn; + mes l(":< \"Never lie to me. Keep your end on the bargain! Give me everything I asked for!\""); + close; + +L_End: + mesn; + mes l(":P \"I am busy, leave me alone.\""); + close; + +L_Review: + mes ""; + mesn; + mes l("Here's what I need:"); + mes l("@@/30 @@", countitem(CoinBag), getitemlink(CoinBag)); + mes l("@@/5 @@", countitem(EmptyBottle), getitemlink(EmptyBottle)); + mes l("@@/2 @@", countitem(Dagger), getitemlink(Dagger)); + mes l("@@/1 @@", countitem(LeatherShield), getitemlink(LeatherShield)); + mes l("@@/6000 GP", Zeny); + close; + +L_Die: + mesn; + mesq l("Then I'll be sure you can't talk again."); + die(); + close; + +L_Close: + close; + +OnInit: + .@npcId = getnpcid(.name$); + setunitdata(.@npcId, UDT_HEADTOP, BurglarMask); + setunitdata(.@npcId, UDT_HEADMIDDLE, Chainmail); + setunitdata(.@npcId, UDT_HEADBOTTOM, RaidTrousers); + setunitdata(.@npcId, UDT_WEAPON, LeatherBoots); // Boots + setunitdata(.@npcId, UDT_HAIRSTYLE, 7); + setunitdata(.@npcId, UDT_HAIRCOLOR, 1); + + .sex = G_MALE; + .distance = 5; + end; + + +} diff --git a/npc/009-1/estate.txt b/npc/009-1/estate.txt new file mode 100644 index 0000000..f530de1 --- /dev/null +++ b/npc/009-1/estate.txt @@ -0,0 +1,171 @@ +// TMW2: Moubootaur Legends scripts. +// Author: +// Jesusalva +// Description: +// Real Estate System + +// ID: 4 +// $ESTATE_OWNER[.id] → Account ID owner of the Real Estate +// $ESTATE_OWNERNAME$[.id] → Human readable name of Real Estate owner +// $ESTATE_RENTTIME[.id] → When the rent will expire +// $ESTATE_MOBILIA_2[.id] → Bitmask of mobilia currently purchased on Monster Collision (6) (Use on walls only) +// $ESTATE_MOBILIA_4[.id] → Bitmask of mobilia currently purchased on Air Collision (2) +// $ESTATE_MOBILIA_8[.id] → Bitmask of mobilia currently purchased on Water Collision (3) +// $ESTATE_MOBILIA_32[.id] → Bitmask of mobilia currently purchased on Yellow Collision (4) +// $ESTATE_MOBILIA_64[.id] → Bitmask of mobilia currently purchased on Normal Collision (1) +// $ESTATE_MOBILIA_128[.id] → Bitmask of mobilia currently purchased on Player Collision (5) +// $ESTATE_PASSWORD$[.id] → Password to enter the estate. If it is "", then no password required +// Note: GMs and Administrators can always use super password "mouboo" to enter a locked estate +// $ESTATE_DOORBELL[.id] → If doorbell is disabled (enabled by default) + +// REAL_ESTATE_CREDITS → Credits equivalent to GP the player have. Will be used first. + +// The sign is the main controller +009-1,42,48,0 script Sign#RES_0096 NPC_SWORDS_SIGN,{ + if ($ESTATE_RENTTIME[.id] < gettimetick(2)) + goto L_RentAvailable; + + if ($ESTATE_OWNER[.id] == getcharid(3)) + goto L_Manage; + + if (is_admin() && $@GM_OVERRIDE) + goto L_Manage; + + mesc l("This estate currently belongs to @@.", $ESTATE_OWNERNAME$[.id]); + mesc l("Press the doorbell?"); + next; + if (askyesno() == ASK_YES) + doevent "Doorbell#RES_0096::OnDoorbell"; + close; + +L_RentAvailable: + realestate_rent(.id, .price); + close; + +L_Manage: + realestate_manage(.id, (.price*7/10)); + close; + +OnInit: + .sex = G_OTHER; + .distance = 3; + + // Estate Settings + .id=4; // Estate ID + .price=20000; // Monthly rent price + end; + +} + +// Door entrance +009-1,43,47,0 script #RES_0096 NPC_HIDDEN,0,0,{ + end; +OnTouch: + if ($ESTATE_RENTTIME[.id] < gettimetick(2)) + goto L_RentAvailable; + + if ($ESTATE_OWNER[.id] == getcharid(3) || $ESTATE_PASSWORD$[.id] == "") + goto L_Warp; + + mesc l("The door is locked"); + next; + mesc l("However, it can be unlocked if you know the password:"); + if (is_gm()) mesc l("You can use super password \"mouboo\" to unlock the door."), 1; + input .@password$; + // GMs can use super password "mouboo" + if (.@password$ == $ESTATE_PASSWORD$[.id] || (is_gm() && .@password$ == "mouboo")) + goto L_Warp; + close; + +L_Warp: + warp "009-6", 33, 33; + closeclientdialog; + close; + +L_RentAvailable: + dispbottom l("This estate is available for rent, talk to the sign to rent it."); + close; + +OnInit: + // Estate Settings + .id=4; // Estate ID + end; + +} + +////////////////////////////////////////////////////////////////////////////// +// ID: 5 + +// The sign is the main controller +009-1,108,46,0 script Sign#RES_0097 NPC_SWORDS_SIGN,{ + if ($ESTATE_RENTTIME[.id] < gettimetick(2)) + goto L_RentAvailable; + + if ($ESTATE_OWNER[.id] == getcharid(3)) + goto L_Manage; + + if (is_admin() && $@GM_OVERRIDE) + goto L_Manage; + + mesc l("This estate currently belongs to @@.", $ESTATE_OWNERNAME$[.id]); + mesc l("Press the doorbell?"); + next; + if (askyesno() == ASK_YES) + doevent "Doorbell#RES_0097::OnDoorbell"; + close; + +L_RentAvailable: + realestate_rent(.id, .price); + close; + +L_Manage: + realestate_manage(.id, (.price*7/10)); + close; + +OnInit: + .sex = G_OTHER; + .distance = 3; + + // Estate Settings + .id=5; // Estate ID + .price=20000; // Monthly rent price + end; + +} + +// Door entrance +009-1,109,45,0 script #RES_0097 NPC_HIDDEN,0,0,{ + end; +OnTouch: + if ($ESTATE_RENTTIME[.id] < gettimetick(2)) + goto L_RentAvailable; + + if ($ESTATE_OWNER[.id] == getcharid(3) || $ESTATE_PASSWORD$[.id] == "") + goto L_Warp; + + mesc l("The door is locked"); + next; + mesc l("However, it can be unlocked if you know the password:"); + if (is_gm()) mesc l("You can use super password \"mouboo\" to unlock the door."), 1; + input .@password$; + // GMs can use super password "mouboo" + if (.@password$ == $ESTATE_PASSWORD$[.id] || (is_gm() && .@password$ == "mouboo")) + goto L_Warp; + close; + +L_Warp: + warp "009-7", 33, 33; + closeclientdialog; + close; + +L_RentAvailable: + dispbottom l("This estate is available for rent, talk to the sign to rent it."); + close; + +OnInit: + // Estate Settings + .id=5; // Estate ID + end; + +} + diff --git a/npc/009-1/fisherman.txt b/npc/009-1/fisherman.txt new file mode 100644 index 0000000..4caa86b --- /dev/null +++ b/npc/009-1/fisherman.txt @@ -0,0 +1,153 @@ +// TMW-2 Script +// Originals: TMW BR +// +// Author: +// Jesusalva +// Description: +// Forest Bow Quest. DO NOT RENAME THE NPC. + +009-1,116,106,0 script Fisherman NPC_FISHERMAN_HALI,{ + .@q=getq(HurnscaldQuest_ForestBow); + if (BaseLevel < 30) goto L_Weak; + mesn; + mesq l("Hello. Ah, bad luck. I am three days without fishing a single carp."); + next; + mesn strcharinfo(0); + menu + l("Any fishing tips for me?"),-, + rif(.@q == 1 && getq3(HurnscaldQuest_ForestBow) < 99, l("I need a string, but not just any string, a really good string.")), L_String; + + mes ""; + mesn; + mesq l("Well, yes. Look this river. The water is not moving."); + next; + mesn; + mesq l("If the water doesn't moves, you will never fish anything. Ah, fat luck..."); + close; + +L_Weak: + mesn; + mesq l("..."); + next; + mesn; + mesq l("I am trying to fish here without success. You're weak, do not bother me."); + close; + +L_String: + .@k=getq3(HurnscaldQuest_ForestBow); + mes ""; + switch (.@k) { + case 0: + mesn; + mesq l("Well, that's easy to do. For starters, I need 1.000 GP as payment, and 10 @@ to make the string.", getitemlink(Root)); + next; + mesn; + mesq l("That's not everything, though. I am having a bad time fishing. Bring me a @@. I know, it is rare. Good luck with it.", getitemlink(GrassCarp)); + next; + mesn; + mesq l("And one last thing I'll want. See these @@? I don't like them, so I'll have you to kill 40 of them for me.", getmonsterlink(FireGoblin)); + next; + mesn strcharinfo(0); + mes l("o.o \"You're being unreasonable. That's way too much!\""); + next; + mesn; + mesq l("To make the string you want, I need a special oil, which I make myself. It's hard to do, so I'll spend time I could be using to fish or help the city guard."); + next; + mesn; + mesq l("I'll make your life easier, I'm also accepting 20 @@ or @@ instead the Grass Carp. Go now, pal.", getitemlink(CommonCarp), getitemlink(Roach)); + setq3 HurnscaldQuest_ForestBow, 10; + close; + break; + case 50: + mesn; + mesq l("Yo, good joob killing the Fire Goblins. Do you have everything I've asked for?"); + next; + goto L_Finish; + default: + mesn; + mesq l("You have:"); + if (countitem(GrassCarp) > 0) + mes l("@@/1 @@", countitem(GrassCarp), getitemlink(GrassCarp)); + else if (countitem(Roach) > countitem(CommonCarp)) + mes l("@@/20 @@ (or @@)", countitem(Roach), getitemlink(Roach), getitemlink(CommonCarp)); + else + mes l("@@/20 @@ (or @@)", countitem(CommonCarp), getitemlink(CommonCarp), getitemlink(Roach)); + + mes l("@@/10 @@", countitem(Root), getitemlink(Root)); + mes l("@@/40 slayed @@", .@k-10, getmonsterlink(FireGoblin)); + mes l("@@/1000 GP", Zeny); + close; + } + close; + +L_Finish: + mesq l("You need:"); + if (countitem(GrassCarp) > 0) + mes l("@@/1 @@", countitem(GrassCarp), getitemlink(GrassCarp)); + else if (countitem(Roach) > countitem(CommonCarp)) + mes l("@@/20 @@ (or @@)", countitem(Roach), getitemlink(Roach), getitemlink(CommonCarp)); + else + mes l("@@/20 @@ (or @@)", countitem(CommonCarp), getitemlink(CommonCarp), getitemlink(Roach)); + + mes l("@@/10 @@", countitem(Root), getitemlink(Root)); + mes l("40/40 slayed @@", getmonsterlink(FireGoblin)); + mes l("@@/1000 GP", Zeny); + mes ""; + select + l("Not yet."), + rif(countitem(GrassCarp) >= 1, l("Yes, I'll pay with Grass Carp.")), + rif(countitem(CommonCarp) >= 20, l("Yes, I'll pay with Common Carp.")), + rif(countitem(Roach) >= 20, l("Yes, I'll pay with Roach.")); + if (@menu == 1) + close; + + if (countitem(Root) < 10 || Zeny < 1000) { + mesn; + mesq l("Well, you forgot the most important: The material I need to do the string."); + next; + mesn; + mesq l("I am not a half-word man, so I won't take your fish. Come back with the money and the Roots, and I'll make the string for you."); + close; + } + + switch (@menu) { + case 2: + delitem GrassCarp, 1; break; + case 3: + delitem CommonCarp, 20; break; + case 4: + delitem Roach, 20; break; + default: + dispbottom l("Script Error: \"Tux didn't found his fish! Blame Saulc at once!\""); close; end; + } + delitem Root, 10; + Zeny=Zeny-1000; + setq3 HurnscaldQuest_ForestBow, 99; + getexp 800, 0; // 10% of max exp + mes ""; + mesn; + mesc l("With a knife, the fisherman makes the roots as thin as he can. You wonder if he knows what he is doing."); + next; + mesn; + mesc l("Once the roots are of a desired thickness, he ties them to make a string, and applies an oil on it."); + next; + mesn; + mesc l("After waiting for the oil to dry, he hands you the string."); + mesq l("Here, thanks to the oil, this string is very sturdy. You better not keep it on your inventory. Good luck!"); + close; + +OnKillFireGoblin: + if (getq(HurnscaldQuest_ForestBow) == 1 && getq3(HurnscaldQuest_ForestBow) >= 10 && getq3(HurnscaldQuest_ForestBow) < 50) { + setq3 HurnscaldQuest_ForestBow, getq3(HurnscaldQuest_ForestBow)+1; + dispbottom l("@@/40 Fire Goblins killed", getq3(HurnscaldQuest_ForestBow)-10); + } + fix_mobkill(FireGoblin); + end; + +OnInit: + .sex = G_MALE; + .distance = 5; + end; + +} + diff --git a/npc/009-1/foxhound.txt b/npc/009-1/foxhound.txt new file mode 100644 index 0000000..fa6040d --- /dev/null +++ b/npc/009-1/foxhound.txt @@ -0,0 +1,197 @@ +// TMW2 Script +// Author: +// Jesusalva +// Description: +// Begs for food. Lots of it. And in the end, an armor piece awaits you. +// Enliven Reva Foxhound is an anagram of Lunovox Heavenfinder + +009-1,89,57,0 script Enliven Reva Foxhound NPC_IVAN,{ + .@q=getq(HalinarzoQuest_Foxhound); + if (BaseLevel < .@q+30) { + mesn; + mesq l("Ah, living in Halinarzo is so difficult..."); + next; + mesn; + mesq l("If there were strong people to give us food, ah, how that would be good..."); + next; + mesn; + mesq l("Sorry for making you listen my rambles. I need someone strong, you see..."); + close; + } + mesn; + mesq l("Please traveler, help my starving family!"); + next; + mesn; + mesq l("We from Halinarzo are very poor, and in constant need of food. You have to help us!"); + mes ""; + menu + l("I'll help you."), -, + l("Sorry, I am so hungry as you."), L_Close; + + switch (.@q) { + + case 0: + mesn; + mesq l("There's a long time we don't eat anything. Bring us @@! Five should do it.", getitemlink(Bread)); + select + rif(countitem(Bread) >= 5, l("I have it right here. You can take it!")), + l("I'm sorry... I can't help you either..."); + if (@menu == 1) { + delitem Bread, 5; + getexp 20, 0; + Zeny=Zeny+25*5; + mes ""; + mesn; + mesq lg("Thank you! Thank you! Savior!"); + setq(HalinarzoQuest_Foxhound, 1); + next; + } + break; + + + case 1: + mesn; + mesq l("Bread is fine, but it would taste better with @@. Could you bring us three?", getitemlink(Cheese)); + select + rif(countitem(Cheese) >= 3, l("I have it right here. You can take it!")), + l("I'm sorry... I can't help you either..."); + if (@menu == 1) { + delitem Cheese, 3; + getexp 25, 0; + Zeny=Zeny+25*3; + mes ""; + mesn; + mesq lg("Thank you! Thank you! Savior!"); + setq(HalinarzoQuest_Foxhound, .@q+1); + next; + } + break; + + case 2: + mesn; + mesq l("Do you know @@? It's a poisonous food you can't find around here. It can be made edible with special prepare.", getitemlink(PinkBlobime)); + select + rif(countitem(PinkBlobime) >= 1, l("I have it right here. You can take it!")), + l("I'm sorry... I can't help you either..."); + if (@menu == 1) { + delitem PinkBlobime, 1; + getexp 30, 0; + Zeny=Zeny+10*1; + mes ""; + mesn; + mesq lg("Thank you! Thank you! Savior!"); + setq(HalinarzoQuest_Foxhound, .@q+1); + next; + } + break; + + case 3: + mesn; + mesq l("I saw Purple the other day... Ah, now I want to eat @@... A dozen should do...", getitemlink(Plushroom)); + select + rif(countitem(Plushroom) >= 12, l("I have it right here. You can take it!")), + l("I'm sorry... I can't help you either..."); + if (@menu == 1) { + delitem Plushroom, 12; + getexp 35, 0; + Zeny=Zeny+15*12; + mes ""; + mesn; + mesq lg("Thank you! Thank you! Savior!"); + setq(HalinarzoQuest_Foxhound, .@q+1); + next; + } + break; + + case 4: + mesn; + mesq l("There exist more food than you know. But this time I don't want anything extravagant, just 6 @@ should be fine.", getitemlink(CaveSnakeEgg)); + select + rif(countitem(CaveSnakeEgg) >= 6, l("I have it right here. You can take it!")), + l("I'm sorry... I can't help you either..."); + if (@menu == 1) { + delitem CaveSnakeEgg, 6; + getexp 40, 0; + Zeny=Zeny+27*6; + mes ""; + mesn; + mesq lg("Thank you! Thank you! Savior!"); + setq(HalinarzoQuest_Foxhound, .@q+1); + next; + } + break; + + case 5: + mesn; + mes l("Thanks for feeding us earlier. I wanted to give a great dinner to my family, even if just once."); + mes l("Could you please give us a full meal, with 5 @@, 5 @@, 5@@, 5 @@ and 5 @@?", getitemlink(SnakeEgg), getitemlink(Bread), getitemlink(Cheese), getitemlink(Aquada), getitemlink(Manana)); + select + rif(countitem(SnakeEgg) >= 5 && countitem(Bread) >= 5 && countitem(Cheese) >= 5 && countitem(Aquada) >= 5 && countitem(Manana) >= 5, l("I have it right here. You can take it!")), + l("I'm sorry... I can't help you either..."); + if (@menu == 1) { + mes ""; + mesn; + mesq l("Thanks for attending even this selfish request of mine."); + next; + delitem SnakeEgg, 5; + delitem Bread, 5; + delitem Cheese, 5; + delitem Aquada, 5; + delitem Manana, 5; + getexp 11500, 15; + getitem Bucket, 1; + mesn; + mesq l("This is just a bucket, but I did some cuts on it so you can see though it. It protects your whole face."); + next; + mesn; + mesq l("This is the least I could do for you. Many thanks. And if you have more food, you can keep feeding my family."); + setq(HalinarzoQuest_Foxhound, .@q+1); + setq2(HalinarzoQuest_Foxhound, .@q+1); + next; + } + break; + + default: + .@q=getq2(HalinarzoQuest_Foxhound); + // Manana (Death Penalty) or Aquadas (Hard to get item)? + mesn; + mesq l("I only need @@ @@. Please! You have to help me!", .@q, getitemlink(Manana)); + select + rif(countitem(Manana) >= .@q, l("I have it right here. You can take it!")), + l("I'm sorry... I can't help you either..."); + if (@menu == 1) { + delitem Manana, .@q; + Zeny=Zeny+(60*.@q); + getexp 0, .@q; + mes ""; + mesn; + mesq lg("Thank you! Thank you! Savior!"); + setq(HalinarzoQuest_Foxhound, .@q+1); + next; + } + + } + + goto L_Close; + +L_Close: + closedialog; + goodbye; + close; + +OnInit: + //.@npcId = getnpcid(.name$); + //setunitdata(.@npcId, UDT_HEADTOP, NPCEyes); + //setunitdata(.@npcId, UDT_HEADMIDDLE, VneckJumper); + //setunitdata(.@npcId, UDT_HEADBOTTOM, RaidTrousers); + //setunitdata(.@npcId, UDT_WEAPON, LousyMoccasins); // Boots + //setunitdata(.@npcId, UDT_HAIRSTYLE, 6); + //setunitdata(.@npcId, UDT_HAIRCOLOR, 3); + + .sex = G_MALE; + .distance = 5; + end; + + + +} diff --git a/npc/009-1/guards.txt b/npc/009-1/guards.txt new file mode 100644 index 0000000..43bbcbd --- /dev/null +++ b/npc/009-1/guards.txt @@ -0,0 +1,202 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// Description: +// Protect Halinarzo + +009-1,71,24,0 script Lieutenant Jacob NPC_PLAYER,{ + // The Monster King guild have a special menu + if (strcharinfo(2) == "Monster King") goto L_MKControl; + mesn; + mesq l("Halt! Beyond this gate, is the Great River and the Eternal Swamps."); + next; + mesn; + mesq l("Was not it only flooded constantly, the graveyard is not too far. If you stray away from the path, you'll get lost."); + next; + .@fd=!(getmapmask("011-3")&1024); // .@fd - is flooded? + if (!.@fd && $GAME_STORYLINE >= 1) { + mesn; + // There's a limit on how much info I can send with @@ + mesq l("Various people already went missing, including GMs. This is why if you plan to cross, ") + b(l("You won't be allowed to walk sideways, except to avoid a monster or two.")); + mesc l("If you try to walk west or east too much, you'll hit an \"invisible wall\" to prevent you from getting lost."); + next; + select + l("I'm fine, thanks."), + l("My equipment is good, let me through!"); + mes ""; + if (@menu == 2 && $HURNS_LIBDATE) { + .@palgal$=lg("gal", "pal"); + if (BaseLevel < 20) { + mesn; + mesq l("It might be, but your level isn't. Sorry @@. No going to Hurnscald before level 20.", .@palgal$); + close; + } + if (reputation("Halin") < 1) { + mesn; + mesq l("It might be, but I never heard of you before. Sorry @@, I can't let just anyone go through. It would be a disservice to see you get stuck and die.", .@palgal$); + close; + } + warp "011-3", 37, 219; + closedialog; + close; + } else if (!$HURNS_LIBDATE) { + mesn; + mesq l("No. Hurnscald is besieged and it would be too dangerous to let you go alone. You should talk to %s, instead.", b("Saulc GM")); + } + } else { + mesn; + mesq l("In fact, it is flooded at the moment. Come back later."); + next; + } + + if (GHQUEST) + GHQ_Assign(Snake, "Halinarzo"); + close; + +L_MKControl: + mesn; + mes l("Oh noes! You've found the Halinarzo control panel!"); + next; + select + l("Abort"), + l("Initiate a siege"); + mes ""; + if (@menu == 2) { + doevent "Lieutenant Jacob::OnStartSiege"; + closedialog; + } + close; + +OnMKSiege: + $@SIEGE_ABORTED = false; +OnStartSiege: + kamibroadcast(col("WARNING! WARNING! Monster Army is moving towards Halinarzo!!",1)); + do_siege("009-1", "010-2", "HALIN", TP_TULIM, .name$, .siegetime); + initnpctimer; + end; + +// Timers +OnTimer5000: + .siegetime+=5; + do_siege("009-1", "010-2", "HALIN", TP_TULIM, .name$, .siegetime); + switch (.siegetime) { + case 0: + disablenpc "Sawis"; + break; + // Monster Army arrives in town + case 60: + disablenpc "Fisherman"; + disablenpc "Charles, Trader King"; + disablenpc "Lynn The Traveler"; + disablenpc "Enliven Reva Foxhound"; + disablenpc "Ryan"; + disablenpc "Bella, the Scholar"; + disablenpc "Book Keeper"; + disablenpc "Yumi"; + disablenpc "Halinarzo's Nurse"; + disablenpc "Joaquim"; + disablenpc "Alvasus"; + disablenpc "Luanna"; + break; + // Monster Army deployed in town + case 90: + disablenpc "Dang Rostra"; + disablenpc "Kevin"; + disablenpc "Barzil"; + break; + // Monster army have withdrawn completly + case MK_SIEGE_DURATION: + .siegetime=0; + announce(("Halinarzo siege is over!"), bc_all); + enablenpc "Sawis"; + enablenpc "Fisherman"; + enablenpc "Charles, Trader King"; + enablenpc "Lynn The Traveler"; + enablenpc "Enliven Reva Foxhound"; + enablenpc "Ryan"; + enablenpc "Bella, the Scholar"; + enablenpc "Book Keeper"; + enablenpc "Yumi"; + enablenpc "Halinarzo's Nurse"; + enablenpc "Joaquim"; + enablenpc "Alvasus"; + enablenpc "Luanna"; + enablenpc "Dang Rostra"; + enablenpc "Kevin"; + enablenpc "Barzil"; + stopnpctimer; + end; + break; + } + + // Loop again + initnpctimer; + end; + +OnInit: + .siegetime=0; + .sex = G_MALE; + .distance = 4; + + // Check items.xml for info about this. + .@npcId = getnpcid(); + setunitdata(.@npcId, UDT_HEADTOP, BullHelmet); + setunitdata(.@npcId, UDT_HEADMIDDLE, LieutenantArmor); + setunitdata(.@npcId, UDT_HEADBOTTOM, RaidTrousers); + setunitdata(.@npcId, UDT_SHIELD, LousyMoccasins); // TODO FIXME: Display Boots + setunitdata(.@npcId, UDT_WEAPON, Backsword); + setunitdata(.@npcId, UDT_HAIRSTYLE, 12); + setunitdata(.@npcId, UDT_HAIRCOLOR, 15); + + end; +} + +// Handle Guard's logic +function script HaliGuardHandler { + legiontalk; + + return; +} + +009-1,100,30,0 script Guard Corina NPC_GUARD2,{ + HaliGuardHandler(); + end; + +OnInit: + .sex = G_OTHER; + .distance = 5; + end; +} + + +009-1,111,48,0 script Guard Jhon NPC_GUARD1,{ + HaliGuardHandler(); + end; + +OnInit: + .sex = G_OTHER; + .distance = 5; + end; +} + +009-1,41,56,0 script Guard Laurie NPC_GUARD2,{ + HaliGuardHandler(); + end; + +OnInit: + .sex = G_OTHER; + .distance = 5; + end; +} + + +009-1,62,74,0 script Guard Amy NPC_GUARD2,{ + HaliGuardHandler(); + end; + +OnInit: + .sex = G_OTHER; + .distance = 5; + end; +} + diff --git a/npc/009-1/lynnthetraveler.txt b/npc/009-1/lynnthetraveler.txt new file mode 100644 index 0000000..58ab3f3 --- /dev/null +++ b/npc/009-1/lynnthetraveler.txt @@ -0,0 +1,93 @@ +// TMW2 Script +// Author: +// Jesusalva +// Description: +// The Travelers travel around the world telling stories. + +009-1,30,26,0 script Lynn The Traveler NPC_F_COINKEEPER,{ + + mesn; + if (strcharinfo(0) == $MOST_HEROIC$) mesq l("Wow! Are you @@? Everyone, in every city, talks about you!", $MOST_HEROIC$); + if (strcharinfo(0) == $MOST_HEROIC$) next; + + mesq l("Hello. I am @@, and I am from a family of travellers. We travel though the whole world, looking for exotic goods.", .name$); + next; + mesq l("You can buy rare items with me, or I can tell you about different cities in our world."); + +L_Menu: + mes ""; + menu + l("I want to trade with you."), L_Trade, + l("Tell me about Halinarzo."), L_Halin, + l("Tell me about Tulimshar."), L_Tulim, + l("Tell me about Hurnscald."), L_Hurns, + l("Sorry, I'll pass."), L_Close; + +L_Tulim: + mes ""; + mesn; + mesq l("Tulimshar is the oldest human city, and its foundation is the year zero of our calendar."); + next; + mesq l("The city only flourished because Janett Platinum had the idea to build city walls surrounding this city."); + next; + mesq l("The desert climate means you'll find mostly maggots and scorpions. Their drops include cactus drinks, cake, knifes, black pearls, gold, and other common things."); + next; + mesq l("You can find for a good price desert equipment and some kind of dyes. You find all sort of crafters, artisans and warriors here."); + next; + goto L_Menu; + +L_Hurns: + mes ""; + mesn; + mesq l("Hurnscald was founded after Tulimshar, in more fertile lands. Their walls are not so sturdy as the ones of Tulimshar."); + next; + mesq l("Under the leadership of King Wusher, they were the first to accept immigrants from other races. You will find humans and non-humans there."); + next; + mesq l("The fertile climate is ideal for mushrooms. You can also find lots of wood."); + next; + mesq l("Their economy provide many edible items and potions."); + next; + goto L_Menu; + +L_Halin: + mes ""; + mesn; + mesq l("Halinarzo was founded to explore Mana Stones."); + next; + mesq l("You can find both huge swamps, as huge desertic areas near and on it."); + next; + mesq l("Lizards are the main monster found, and they steal gold from innocent bypassers."); + next; + mesq l("Without any mana stone left, and because the walls were not very strong, most of the city was destroyed."); + next; + mesq l("Unlike many other cities, if you want people in eternal need of items, there is a good place to look."); + next; + goto L_Menu; + + +L_Trade: + mesn; + mesq l("Use your @@ as currency!", getitemlink(StrangeCoin)); + next; + tutmes l("%s is obtained during events, daily logins, heroic deeds, gifts, etc. But cannot be bought with real money.", getitemlink(StrangeCoin)); + openshop "Aeros Trader"; + closedialog; + +L_Close: + close; + +OnInit: + .@npcId = getnpcid(.name$); + setunitdata(.@npcId, UDT_HEADTOP, NPCEyes); + setunitdata(.@npcId, UDT_HEADMIDDLE, UglyChristmasSweater); + setunitdata(.@npcId, UDT_HEADBOTTOM, JeansShorts); + setunitdata(.@npcId, UDT_WEAPON, CandorBoots); // Boots + setunitdata(.@npcId, UDT_HAIRSTYLE, 18); + setunitdata(.@npcId, UDT_HAIRCOLOR, 8); + npcsit; + + .sex = G_FEMALE; + .distance = 5; + end; +} + diff --git a/npc/009-1/mapflags.txt b/npc/009-1/mapflags.txt new file mode 100644 index 0000000..e6436cf --- /dev/null +++ b/npc/009-1/mapflags.txt @@ -0,0 +1,2 @@ +009-1 mapflag town +009-1 mapflag nopenalty diff --git a/npc/009-1/soul-menhir.txt b/npc/009-1/soul-menhir.txt new file mode 100644 index 0000000..172f933 --- /dev/null +++ b/npc/009-1/soul-menhir.txt @@ -0,0 +1,20 @@ +// TMW2 scripts. +// Author: +// Jesusalva +// Description: +// Soul Menhir + +009-1,28,29,0 script Soul Menhir#hali NPC_SOUL_MOSS,{ + @map$ = "009-1"; + setarray @Xs, 26, 27, 28, 28, 29, 30; + setarray @Ys, 30, 31, 30, 31, 30, 30; + @x = 0; + @y = 0; + callfunc "SoulMenhir"; + @map$ = ""; + cleararray @Xs[0], 0, getarraysize(@Xs); + cleararray @Ys[0], 0, getarraysize(@Ys); + @x = 0; + @y = 0; + close; +} diff --git a/npc/009-1/teleporter.txt b/npc/009-1/teleporter.txt new file mode 100644 index 0000000..85d85ef --- /dev/null +++ b/npc/009-1/teleporter.txt @@ -0,0 +1,23 @@ +// TMW2 Script +// Authors: +// Jesusalva +// Description: +// Link portals to soul menhirs like the teleporters from old +// The price is temporary. This feature got in because no ship in Nivalis Port +// PS. Anise => “Aisen” Anagram + + +009-1,113,89,0 script #WarpGateHalin NPC_NO_SPRITE,1,0,{ + end; + +OnTouch: + TeleporterGate(TP_HALIN); + close; + + +OnInit: + .sex = G_OTHER; + .distance = 1; + end; +} + diff --git a/npc/009-1/town.txt b/npc/009-1/town.txt new file mode 100644 index 0000000..bef1fa1 --- /dev/null +++ b/npc/009-1/town.txt @@ -0,0 +1,11 @@ +// TMW-2 Script +// Author: +// Jesusalva +// Description: +// Reset LOCATION$ when entering a town + +009-1,71,24,0 script #LocHalin NPC_HIDDEN,4,1,{ +OnTouch: + EnterTown("Halin"); end; +} +009-1,55,72,0 duplicate(#LocHalin) #LocHalinB NPC_HIDDEN,3,1 |