summaryrefslogtreecommitdiff
path: root/npc/024-1
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
committerJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
commita7c45a192268da2601cef47a4cdba987ae2327ca (patch)
treec5fb5b97db109fe7106496dd96498c475881046b /npc/024-1
downloadserverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/024-1')
-rw-r--r--npc/024-1/_import.txt14
-rw-r--r--npc/024-1/_mobs.txt6
-rw-r--r--npc/024-1/_warps.txt23
-rw-r--r--npc/024-1/erlan.txt118
-rw-r--r--npc/024-1/guard.txt116
-rw-r--r--npc/024-1/john.txt321
-rw-r--r--npc/024-1/mapflags.txt17
-rw-r--r--npc/024-1/meriel.txt113
-rw-r--r--npc/024-1/rydel.txt115
-rw-r--r--npc/024-1/soul-menhir.txt20
-rw-r--r--npc/024-1/taenya.txt123
-rw-r--r--npc/024-1/teleporter.txt23
-rw-r--r--npc/024-1/town.txt12
13 files changed, 1021 insertions, 0 deletions
diff --git a/npc/024-1/_import.txt b/npc/024-1/_import.txt
new file mode 100644
index 0000000..8b4f2df
--- /dev/null
+++ b/npc/024-1/_import.txt
@@ -0,0 +1,14 @@
+// Map 024-1: Frostia
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/024-1/_mobs.txt",
+"npc/024-1/_warps.txt",
+"npc/024-1/erlan.txt",
+"npc/024-1/guard.txt",
+"npc/024-1/john.txt",
+"npc/024-1/mapflags.txt",
+"npc/024-1/meriel.txt",
+"npc/024-1/rydel.txt",
+"npc/024-1/soul-menhir.txt",
+"npc/024-1/taenya.txt",
+"npc/024-1/teleporter.txt",
+"npc/024-1/town.txt",
diff --git a/npc/024-1/_mobs.txt b/npc/024-1/_mobs.txt
new file mode 100644
index 0000000..07c198b
--- /dev/null
+++ b/npc/024-1/_mobs.txt
@@ -0,0 +1,6 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 024-1: Frostia mobs
+024-1,98,43,76,22 monster Pollet 1219,16,90000,30000
+024-1,96,77,78,21 monster Iced Fluffy 1041,7,60000,30000
+024-1,89,120,21,22 monster Azul Slime 1095,3,30000,30000
+024-1,145,70,25,36 monster Rudolph Slime 1086,2,30000,30000
diff --git a/npc/024-1/_warps.txt b/npc/024-1/_warps.txt
new file mode 100644
index 0000000..6732a87
--- /dev/null
+++ b/npc/024-1/_warps.txt
@@ -0,0 +1,23 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 024-1: Frostia warps
+024-1,75,134,0 warp #024-1_75_134 0,0,023-1,42,32
+024-1,94,70,0 script #024-1_94_70 NPC_HIDDEN,3,0,{
+ end;
+OnTouch:
+ slide 93,72; end;
+}
+024-1,32,54,0 warp #024-1_32_54 0,0,024-2,41,29
+024-1,126,28,0 warp #024-1_126_28 0,0,024-3,35,34
+024-1,154,40,0 warp #024-1_154_40 0,0,024-4,28,28
+024-1,160,40,0 warp #024-1_160_40 0,0,024-4,39,28
+024-1,155,55,0 warp #024-1_155_55 0,0,024-5,34,28
+024-1,143,40,0 warp #024-1_143_40 0,0,024-6,34,27
+024-1,160,49,0 warp #024-1_160_49 0,0,024-7,40,28
+024-1,136,28,0 warp #024-1_136_28 0,0,024-8,71,31
+024-1,134,48,0 warp #024-1_134_48 0,0,024-9,41,37
+024-1,77,59,0 warp #024-1_77_59 0,0,024-10,24,36
+024-1,83,59,0 warp #024-1_83_59 0,0,024-10,34,36
+024-1,105,34,0 warp #024-1_105_34 0,0,024-11,24,34
+024-1,76,45,0 warp #024-1_76_45 0,0,024-12,31,34
+024-1,50,54,0 warp #024-1_50_54 0,0,024-13,30,36
+024-1,64,30,0 warp #024-1_64_30 0,0,024-15,25,38
diff --git a/npc/024-1/erlan.txt b/npc/024-1/erlan.txt
new file mode 100644
index 0000000..b6cc4dd
--- /dev/null
+++ b/npc/024-1/erlan.txt
@@ -0,0 +1,118 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Questmaker Handbook 14.0 (F = Favorable)
+
+024-1,73,48,0 script Erlan NPC_ELF,{
+ .@q = getq(FrostiaQuest_Erlan);
+ if (BaseLevel < 40) {
+ mesc l("The elf seems busy. He ignores you.");
+ close;
+ }
+ if (.@q == 0) {
+ if (frally()) goto L_Start_F;
+ else goto L_Start_U;
+ }
+ else if (.@q == 1) {
+ if (frally()) goto L_Submit_F;
+ else goto L_Submit_U;
+ }
+ else if (.@q == 2) {
+ if (frally()) goto L_Done_F;
+ else goto L_Done_U;
+ }
+ Exception("Invalid quest state - "+str(.@q));
+ end;
+
+L_Start_F:
+ mesn;
+ mesq lg("Hey gal, could you do me a little favor?", "Hey pal, could you do me a little favor?");
+ next;
+ mesn;
+ mesq l("You see, I am Erlan, a researcher. I'm currently developing strong poison to rival with the legendary %s. For that end, I need raw, untreated sewerage, but there is no such thing here. Could you bring me %d %s? Thanks!", getitemlink(NymphPoison), 7, getitemlink(BottleOfSewerWater));
+ setq FrostiaQuest_Erlan, 1;
+ close;
+
+L_Submit_F:
+ mesn;
+ mesq l("Did you got the %d %s I've asked?", 7, getitemlink(BottleOfSewerWater));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (countitem(BottleOfSewerWater) < 7) {
+ mesn;
+ mesq l("You've been spending too much time with humans. You are picking up bad habits from them like lying. Be careful.");
+ close;
+ }
+ delitem BottleOfSewerWater, 7;
+ getexp 10000, 0;
+ Zeny+=5700;
+ setq FrostiaQuest_Erlan, 2;
+ mesn;
+ mesq lg("Thanks, my friend. Here's some money.");
+ }
+ close;
+
+L_Done_F:
+ mesn;
+ mesq l("Thanks for the help earlier. Unfortunately, I had no luck yet.");
+ next;
+ mesn;
+ mesq l("There are rumors about a sacred elf land, where our antecessors lived in peacefully somewhere close to here, but the path was lost. That's why we now live with dwarves.");
+ close;
+/////////////////////////////////////////////////////////////////////////////////
+L_Start_U:
+ mesn;
+ mesq l("Uh, a %s? How odd.", get_race());
+ next;
+ mesn;
+ mesq l("You see, I am Erlan, a researcher. I'm currently developing strong poison to rival with the legendary %s. For that end, I need raw, untreated sewerage, but there is no such thing in a civilized town like ours.", getitemlink(NymphPoison));
+ next;
+ mesn;
+ mesq l("But you seem to have come from more savage and barbaric towns, so if you could bring me %d %s, that would be truly helpful.", 7, getitemlink(BottleOfSewerWater));
+ setq FrostiaQuest_Erlan, 1;
+ close;
+
+L_Submit_U:
+ mesn;
+ mesq l("Did you got the %d %s I've asked?", 7, getitemlink(BottleOfSewerWater));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (countitem(BottleOfSewerWater) < 7) {
+ mesn;
+ mesq l("You think you can fool me and lie? I'll teach you a lesson you won't forget!");
+ mesc l("%s slaps you!", .name$);
+ percentheal -30, 0;
+ close;
+ }
+ delitem BottleOfSewerWater, 7;
+ getexp 10000, 0;
+ Zeny+=5700;
+ setq FrostiaQuest_Erlan, 2;
+ mesn;
+ mesq l("Heh, thanks %s. Here's some money.", get_race());
+ }
+ close;
+
+L_Done_U:
+ mesn;
+ mesq l("No, I don't have any poison for your sampling yet.");
+ next;
+ mesn;
+ mesq l("Our antecessors used to live peacefully in a sanctuary somewhere close to here, but the path was lost. That's why we now live with dwarves.");
+ close;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, CottonTrousers);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, LeatherShirt);
+ setunitdata(.@npcId, UDT_HEADTOP, Beard);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 6);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 20);
+ npcsit;
+
+ .sex = G_MALE;
+ .distance = 5;
+ end;
+}
+
diff --git a/npc/024-1/guard.txt b/npc/024-1/guard.txt
new file mode 100644
index 0000000..cefc16a
--- /dev/null
+++ b/npc/024-1/guard.txt
@@ -0,0 +1,116 @@
+// TMW2 Script
+// Author:
+// Jesusalva
+// Description:
+// Controls access to Frostia.
+
+024-1,93,73,0 script Frostia Guard NPC_ELF,{
+ // Main Quest Have Precedence
+ if (getq(General_Narrator) == 11)
+ goto L_MainQuest;
+ if (getq(General_Narrator) == 12)
+ goto L_MainQuest2;
+
+L_MainLogic:
+ if (BaseLevel < 40)
+ goto L_Unallowed;
+ if (Class == Elven)
+ {
+ slide 93, 69;
+ npctalk3 l("Elves are always allowed inside.");
+ end;
+ }
+ // You have a house inside
+ if (ESTATE_RENTTIME >= gettimetick(2)) {
+ slide 93, 69;
+ npctalk3 l("I don't trust @@s.", get_race());
+ end;
+ }
+
+ //.@tax=1001-min(1000, reputation("Frostia")*10);
+ .@tax=501-min(500, reputation("Frostia")*5);
+ mesn;
+ mesc l("The guard eyes you with suspcion.");
+ mesq l("You should not be here. Get moving.");
+ if (Zeny < .@tax)
+ close;
+ next;
+ mesc l("Bribe the guard for @@ GP?", .@tax);
+ if (askyesno() == ASK_YES) {
+ Zeny-=.@tax;
+ closeclientdialog;
+ slide 93, 69;
+ npctalk3 l("Behave yourself.");
+ }
+ close;
+
+L_Unallowed:
+ mesn;
+ mesq l("You're not welcome here. Get moving.");
+ close;
+
+
+L_MainQuest:
+ mesc b(l(".:: Main Quest 6-1 ::.")), 3;
+ msObjective(BaseLevel >= 40, l("* @@/@@ Base Level", BaseLevel, 40));
+ mesc l("* Deliver Nikolai's Letter to Frostia Mayor"), 9;
+ if (BaseLevel < 40)
+ close;
+ next;
+ mesn strcharinfo(0);
+ select
+ l("I have a letter for the Mayor.");
+ mes "";
+ mesn;
+ mesq l("We don't have a mayor. The independent city-state of Frostia is ruled by a King.");
+ next;
+ mesn;
+ mesq l("King Gelid Frozenheart II rules over all elves and dwarves who live here peacefully, and he also presides the city council.");
+ next;
+ mesn;
+ mesq l("I hate foreigners. They know nothing about us and want to impose their \"ideals\" about democracy and whatever.");
+ next;
+ mesn;
+ mesq l("Anyway, you had a letter to our @@, you meant? Sure thing, I'll let him know at once.", b(l("king")));
+ setq General_Narrator, 12;
+ close;
+
+L_MainQuest2:
+ mesn;
+ mesq l("King Gelid Frozenheart II will have you.");
+ next;
+ mesn;
+ mesq l("His policy is to never read a letter without the sender being present. Of course we checked for poison and traps.");
+ next;
+ mesn;
+ mesq l("Behave yourself, or you'll be executed in the town square mercilessly. You have been warned.");
+ next;
+ closeclientdialog;
+ // Maybe an instance instead?
+ warp "024-16", 30, 52;
+ end;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADTOP, WarlordHelmet);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, WarlordPlate);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, NPCEyes);
+ setunitdata(.@npcId, UDT_WEAPON, JeansChaps);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 2);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 4);
+
+ .sex = G_MALE;
+ .distance = 5;
+ end;
+}
+
+// This small script controls if you can visit King Gelid II or not
+024-1,97,20,0 script #FrostiaCastle NPC_HIDDEN,1,0,{
+end;
+OnTouch:
+ if (getq(General_Narrator) >= 12)
+ warp "024-16", 30, 52;
+ end;
+}
+
+
diff --git a/npc/024-1/john.txt b/npc/024-1/john.txt
new file mode 100644
index 0000000..e1662d1
--- /dev/null
+++ b/npc/024-1/john.txt
@@ -0,0 +1,321 @@
+// TMW2 scripts.
+// Author:
+// Jesusalva
+// Description:
+// John H
+
+024-1,154,45,0 script Jhon Henryfield NPC_PLAYER,{
+ if (BaseLevel < 42) {
+ asleep();
+ end;
+ }
+ .@q=getq(FrostiaQuest_JhonH);
+
+ // Quest failed
+ if (.@q == 8) {
+ mesn;
+ mesq l("Go away creep, I HATE YOU!");
+ close;
+ }
+
+ if (!.@q) {
+ mesn;
+ mesc l("ZZZzzzz...");
+ mesc l("%s seems to be asleep... Maybe we can wake him up somehow?", .name$);
+ next;
+ do
+ {
+ select
+ l("Poke him"),
+ l("Attack him"),
+ l("Give him an item");
+ mes "";
+ if (@menu == 1) {
+ mesc l("No reply. We should try something else.");
+ next;
+ } else if (@menu == 2) {
+ mesn;
+ mesc l("*Opening eyes in a shock*");
+ mesq l("AAAAaaahhhhh!!!");
+ setq FrostiaQuest_JhonH, 8; // Quest failed
+ close;
+ } else {
+ mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
+
+ .@give = requestitem();
+ if (.@give < 1) continue;
+ if (!countitem(.@give)) continue;
+ if (checkbound(.@give)) continue;
+ if (getiteminfo(.@give, ITEMINFO_TYPE) != IT_HEALING &&
+ getiteminfo(.@give, ITEMINFO_TYPE) != IT_USABLE) continue;
+ mesc l("Really give a %s to Jhon?", getitemlink(.@give));
+ mesc l("The item will be lost forever."), 1;
+ next;
+ if (askyesno() == ASK_NO) continue;
+ mes "";
+ delitem .@give, 1;
+ if (.@give == Coffee) {
+ setq FrostiaQuest_JhonH, 1;
+ .@q = 1;
+ getexp 250, 25;
+ mesn;
+ mesq l("Coffee! I'm awake now!");
+ next;
+ break;
+ } else {
+ mesc l("...No reaction...");
+ next;
+ }
+ }
+ } while (true);
+ }
+ ///////////////////////////
+ if (!.@q) close;
+ do
+ {
+ mesn;
+ mesq l("How can I help you, my friend?");
+ next;
+ select
+ l("Who are you?"),
+ rif(.@q >= 2 && countitem(Coffee), l("Do you want more coffee?")),
+ l("Nothing, thanks anyway.");
+ mes "";
+ switch (@menu) {
+ case 1:
+ mesn;
+ mesq l("Name is Jhon, and that's not a typo! I am an absolute coffee lover, and I travel to exotic places in search of the perfect brew.");
+ next;
+ mesn;
+ mesq l("Unfortunately, elves doesn't like to share coffee, so I thought in leaving but fell asleep. Oops!");
+ next;
+ mesn;
+ mesq l("If you have some coffee to me, I'll buy it of your hands.");
+ compareandsetq FrostiaQuest_JhonH, 1, 2;
+ .@q = max(.@q, 2);
+ next;
+ break;
+ case 2:
+ mesc l("How much coffee you'll give Jhon?");
+ input .@c, 0, countitem(Coffee);
+ mes "";
+ .@c = min(.@c, countitem(Coffee));
+ if (.@c < 1) break;
+ delitem Coffee, .@c;
+ .@q2 = getq2(FrostiaQuest_JhonH) + rand2(.@c);
+ .@q3 = getq3(FrostiaQuest_JhonH);
+ setq2 FrostiaQuest_JhonH, .@q2;
+ .@xp = 250 + rand2(getiteminfo(Coffee, ITEMINFO_SELLPRICE) / 3);
+ .@gp = getiteminfo(Coffee, ITEMINFO_SELLPRICE) * 2 / 3; // 67% GP
+ Zeny += .@c * .@gp;
+ getexp .@c * .@xp, .@c * 25; // ~33% EXP + bonus
+ mesn;
+ mesq lg("Thanks, gal!", "Thanks, pal!");
+ next;
+ switch (.@q3) {
+ case 0:
+ if (.@q2 >= 1) {
+ inventoryplace Potatoz, 1;
+ getitem Potatoz, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 1:
+ if (.@q2 >= 5) {
+ inventoryplace IcedBottle, 1;
+ getitem IcedBottle, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 2:
+ if (.@q2 >= 10) {
+ inventoryplace ScrollBattlePlansA, 1;
+ getitem ScrollBattlePlansA, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 3:
+ if (.@q2 >= 15) {
+ inventoryplace ScrollDefenseBlessA, 1;
+ getitem ScrollDefenseBlessA, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 4:
+ if (.@q2 >= 20) {
+ inventoryplace ScrollSYeti, 1;
+ getitem ScrollSYeti, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 5:
+ if (.@q2 >= 25) {
+ inventoryplace AlchemyBlueprintA, 1;
+ getitem AlchemyBlueprintA, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 6:
+ if (.@q2 >= 30) {
+ inventoryplace AlchemyBlueprintB, 1;
+ getitem AlchemyBlueprintB, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 7:
+ if (.@q2 >= 40) {
+ .@i = any(LukPotionA, DexPotionA, IntPotionA, VitPotionA, AgiPotionA);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 8:
+ if (.@q2 >= 50) {
+ inventoryplace AlchemyBlueprintC, 1;
+ getitem AlchemyBlueprintC, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 9:
+ if (.@q2 >= 60) {
+ .@i = any(LukPotionC, DexPotionC, IntPotionC, VitPotionC, AgiPotionC, SacredLifePotion, SacredManaPotion);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 10:
+ if (.@q2 >= 75) {
+ inventoryplace AlchemyBlueprintD, 1;
+ getitem AlchemyBlueprintD, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 11:
+ if (.@q2 >= 90) {
+ inventoryplace AncientBlueprint, 1;
+ getitem AncientBlueprint, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 12:
+ if (.@q2 >= 100) {
+ .@i = any(LukPotionB, DexPotionB, IntPotionB, VitPotionB, AgiPotionB, SacredLifePotion, SacredManaPotion, DodgePotion, PrecisionPotion, MoveSpeedPotion, StatusResetPotion, DeathPotion, PurificationPotion, NymphPoison, ElixirOfLife);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 13:
+ if (.@q2 >= 120) {
+ .@i = any(LukPotionC, DexPotionC, IntPotionC, VitPotionC, AgiPotionC, SacredLifePotion, SacredManaPotion, DodgePotion, PrecisionPotion, MoveSpeedPotion, StatusResetPotion, DeathPotion, PurificationPotion, NymphPoison, ElixirOfLife);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 14:
+ if (.@q2 >= 140) {
+ .@i = any(LukPotionC, DexPotionC, IntPotionC, VitPotionC, AgiPotionC, SacredLifePotion, SacredManaPotion, DodgePotion, PrecisionPotion, MoveSpeedPotion, StatusResetPotion, DeathPotion, PurificationPotion, NymphPoison, ElixirOfLife, SacredImmortalityPotion, Manapple);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 15:
+ if (.@q2 >= 150) {
+ .@i = any(LukPotionC, DexPotionC, IntPotionC, VitPotionC, AgiPotionC, SacredLifePotion, SacredManaPotion, DodgePotion, PrecisionPotion, MoveSpeedPotion, StatusResetPotion, DeathPotion, PurificationPotion, NymphPoison, ElixirOfLife, SacredImmortalityPotion, AncientBlueprint, FrostiaWarpCrystal);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 16:
+ if (.@q2 >= 175) {
+ .@i = any(LukPotionC, DexPotionC, IntPotionC, VitPotionC, AgiPotionC, SacredLifePotion, SacredManaPotion, DodgePotion, PrecisionPotion, MoveSpeedPotion, StatusResetPotion, NymphPoison, ElixirOfLife, SacredImmortalityPotion, AncientBlueprint, FrostiaWarpCrystal, ScrollCriticalFortuneA);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 17:
+ if (.@q2 >= 200) {
+ .@i = any(LukPotionC, DexPotionC, IntPotionC, VitPotionC, AgiPotionC, SacredLifePotion, SacredManaPotion, ElixirOfLife, SacredImmortalityPotion, AncientBlueprint, FrostiaWarpCrystal, ScrollCriticalFortuneA, ScrollMagnusHealA, ScrollSWolvern);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 18:
+ if (.@q2 >= 250) {
+ .@i = any(LukPotionC, DexPotionC, IntPotionC, VitPotionC, AgiPotionC, SacredLifePotion, SacredManaPotion, ElixirOfLife, SacredImmortalityPotion, AncientBlueprint, FrostiaWarpCrystal, ScrollCriticalFortuneA, ScrollMagnusHealA, ScrollSWolvern);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 19:
+ if (.@q2 >= 300) {
+ .@i = any(LukPotionC, DexPotionC, IntPotionC, VitPotionC, AgiPotionC, SacredLifePotion, SacredManaPotion, SacredImmortalityPotion, AncientBlueprint, FrostiaWarpCrystal, ScrollCriticalFortuneA, ScrollMagnusHealA, ScrollSWolvern, GoldenApple);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 20:
+ if (.@q2 >= 400) {
+ .@i = any(SacredImmortalityPotion, AncientBlueprint, FrostiaWarpCrystal, ScrollCriticalFortuneA, ScrollMagnusHealA, ScrollSWolvern, PirateTreasureMap, TimeFlask);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 21:
+ if (.@q2 >= 450) {
+ .@i = any(ScrollCriticalFortuneB, ScrollBattlePlansB, ScrollDefenseBlessB, ScrollMagnusHealB, ScrollSDragon, GoldenApple);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ }
+ break;
+ case 22:
+ if (.@q2 >= 500) {
+ .@i = any(ScrollCriticalFortuneB, ScrollBattlePlansB, ScrollDefenseBlessB, ScrollMagnusHealB, ScrollSDragon, DivineApple);
+ inventoryplace .@i, 1;
+ getitem .@i, 1;
+ setq3 FrostiaQuest_JhonH, .@q3 + 1;
+ mesc l("You have reached the current reward limit for Jhon."), 1;
+ mesc l("Futurely, Mylarin Dust and a Sunny Crystal will also be available."); // And a Mysterious Fruit + Platinum, just like Ryan
+ }
+ break;
+ }
+ // Item acquired?
+ if (getq3(FrostiaQuest_JhonH) != .@q3) {
+ mesn;
+ mesq l("Here, you can have this, token of my appreciation.");
+ next;
+ }
+ break;
+ default:
+ .@q = 12; break;
+ }
+ } while (.@q < 8);
+
+ closeclientdialog;
+ goodbye;
+ close;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADTOP, AFKCap);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, SilkRobe); // TODO
+ setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 22);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 5);
+ npcsit;
+
+ .sex = G_MALE;
+ .distance = 4;
+ end;
+}
diff --git a/npc/024-1/mapflags.txt b/npc/024-1/mapflags.txt
new file mode 100644
index 0000000..a58d5d8
--- /dev/null
+++ b/npc/024-1/mapflags.txt
@@ -0,0 +1,17 @@
+024-1 mapflag town
+024-1 mapflag nopenalty
+024-2 mapflag zone indoors
+024-3 mapflag zone indoors
+024-4 mapflag zone indoors
+024-5 mapflag zone indoors
+024-6 mapflag zone indoors
+024-7 mapflag zone indoors
+024-8 mapflag zone indoors
+024-9 mapflag zone indoors
+024-10 mapflag zone indoors
+024-11 mapflag zone indoors
+024-12 mapflag zone indoors
+024-13 mapflag zone indoors
+024-14 mapflag zone indoors
+024-15 mapflag zone indoors
+024-16 mapflag zone indoors
diff --git a/npc/024-1/meriel.txt b/npc/024-1/meriel.txt
new file mode 100644
index 0000000..109131e
--- /dev/null
+++ b/npc/024-1/meriel.txt
@@ -0,0 +1,113 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Questmaker Handbook 14.0 (F = Favorable)
+
+024-1,114,45,0 script Meriel NPC_ELF_F,{
+ .@q = getq(FrostiaQuest_Meriel);
+ if (BaseLevel < 42) {
+ mesc l("The elf seems busy. She ignores you.");
+ close;
+ }
+ if (.@q == 0) {
+ if (frally()) goto L_Start_F;
+ else goto L_Start_U;
+ }
+ else if (.@q == 1) {
+ if (frally()) goto L_Submit_F;
+ else goto L_Submit_U;
+ }
+ else if (.@q == 2) {
+ if (frally()) goto L_Done_F;
+ else goto L_Done_U;
+ }
+ Exception("Invalid quest state - "+str(.@q));
+ end;
+
+L_Start_F:
+ mesn;
+ mesq lg("Hey gal, could you do me a little favor?", "Hey pal, could you do me a little favor?");
+ next;
+ mesn;
+ mesc l("*blushes*");
+ mesq l("Bring me %d %s. I cannot tell you what for, though!", 18, getitemlink(PurpleBlobime));
+ setq FrostiaQuest_Meriel, 1;
+ close;
+
+L_Submit_F:
+ mesn;
+ mesq l("Did you got the %d %s I've asked?", 18, getitemlink(PurpleBlobime));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (countitem(PurpleBlobime) < 18) {
+ mesn;
+ mesq l("You've been spending too much time with humans. You are picking up bad habits from them like lying. Be careful.");
+ close;
+ }
+ inventoryplace EquipmentBlueprintC, 1;
+ delitem PurpleBlobime, 18;
+ getitem EquipmentBlueprintC, 1;
+ getexp 4210, 0;
+ setq FrostiaQuest_Meriel, 2;
+ mesn;
+ mesq l("Ahh, he'll be so happy! Thanks! You can keep this.");
+ }
+ close;
+
+L_Done_F:
+ mesn;
+ mesq l("I've heard some elves, when they abandoned our original town, founded Aethyr somewhere up northwest. But all contact with it has since been lost.");
+ close;
+/////////////////////////////////////////////////////////////////////////////////
+L_Start_U:
+ mesn;
+ mesq l("Hey, can you spare me a moment?");
+ next;
+ mesn;
+ mesc l("*blushes*");
+ mesq l("I want %d %s! Don't worry, I can pay.", 18, getitemlink(PurpleBlobime));
+ setq FrostiaQuest_Meriel, 1;
+ close;
+
+L_Submit_U:
+ mesn;
+ mesq l("Did you got the %d %s I've asked?", 18, getitemlink(PurpleBlobime));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (countitem(PurpleBlobime) < 18) {
+ mesn;
+ mesq l("You liar, I'll show you to respect woman!");
+ mesc l("%s slaps you!", .name$);
+ percentheal -30, 0;
+ close;
+ }
+ inventoryplace EquipmentBlueprintC, 1;
+ delitem PurpleBlobime, 18;
+ getitem EquipmentBlueprintC, 1;
+ getexp 4210, 0;
+ setq FrostiaQuest_Meriel, 2;
+ mesn;
+ mesq l("Hihihi... Thanks! Here, you can keep this.");
+ }
+ close;
+
+L_Done_U:
+ mesn;
+ mesq l("I've heard some elves, when they abandoned our original town, founded Aethyr somewhere up northwest. But all contact with it has since been lost.");
+ close;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, CottonSkirt);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, LeatherShirt);
+ setunitdata(.@npcId, UDT_HEADTOP, TrapperHat);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 8);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 11);
+ npcsit;
+
+ .sex = G_FEMALE;
+ .distance = 5;
+ end;
+}
+
diff --git a/npc/024-1/rydel.txt b/npc/024-1/rydel.txt
new file mode 100644
index 0000000..1c1648d
--- /dev/null
+++ b/npc/024-1/rydel.txt
@@ -0,0 +1,115 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Questmaker Handbook 14.0 (F = Favorable)
+
+024-1,32,26,0 script Rydel NPC_ELF,{
+ .@q = getq(FrostiaQuest_Rydel);
+ if (BaseLevel < 50) {
+ mesc l("The elf seems busy. He ignores you.");
+ close;
+ }
+ if (.@q == 0) {
+ if (frally()) goto L_Start_F;
+ else goto L_Start_U;
+ }
+ else if (.@q == 1) {
+ if (frally()) goto L_Submit_F;
+ else goto L_Submit_U;
+ }
+ else if (.@q == 2) {
+ if (frally()) goto L_Done_F;
+ else goto L_Done_U;
+ }
+ Exception("Invalid quest state - "+str(.@q));
+ end;
+
+L_Start_F:
+ mesn;
+ mesq lg("Hey gal, could you do me a little favor?", "Hey pal, could you do me a little favor?");
+ next;
+ mesn;
+ mesq l("Bring me %d %s so I may study its properties and improve our town water quality!", 3, getitemlink(BottleOfDivineWater));
+ setq FrostiaQuest_Rydel, 1;
+ close;
+
+L_Submit_F:
+ mesn;
+ mesq l("Did you got the %d %s I've asked?", 3, getitemlink(BottleOfDivineWater));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (countitem(BottleOfDivineWater) < 3) {
+ mesn;
+ mesq l("You've been spending too much time with humans. You are picking up bad habits from them like lying. Be careful.");
+ close;
+ }
+ delitem BottleOfDivineWater, 3;
+ getexp 24000, 0;
+ setq FrostiaQuest_Rydel, 2;
+ mesn;
+ mesq lg("Thanks to you, my friend, we will soon have good water to drink.");
+ }
+ close;
+
+L_Done_F:
+ mesn;
+ mesq l("I am not done purifying the water yet. This may take years, but it'll be worth it.");
+ next;
+ mesn;
+ mesq l("By the way, I've heard that the name of the wizard of Aethyr is the key to open its gates. But I don't know neither where the gates are, nor who is the \"wizard of Aethyr\".");
+ close;
+/////////////////////////////////////////////////////////////////////////////////
+L_Start_U:
+ mesn;
+ mesq l("Hey silly %s, I need a favor from you.", get_race());
+ next;
+ mesn;
+ mesq l("I am not content with our water supply. It gives us common water, but we of the superior race deserve better water.");
+ next;
+ mesn;
+ mesq l("So! Bring me %d %s so I may study its properties and make a purifier or enhancer for our well.", 3, getitemlink(BottleOfDivineWater));
+ setq FrostiaQuest_Rydel, 1;
+ close;
+
+L_Submit_U:
+ mesn;
+ mesq l("Did you got the %d %s I've asked?", 3, getitemlink(BottleOfDivineWater));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (countitem(BottleOfDivineWater) < 3) {
+ mesn;
+ mesq l("You liar, I'll teach you a lesson you won't forget!");
+ mesc l("%s slaps you!", .name$);
+ percentheal -30, 0;
+ close;
+ }
+ delitem BottleOfDivineWater, 3;
+ getexp 24000, 0;
+ setq FrostiaQuest_Rydel, 2;
+ mesn;
+ mesq l("Thanks to you, lowly %s, we will soon have water we deserve!", get_race());
+ }
+ close;
+
+L_Done_U:
+ mesn;
+ mesq l("I won't share our water with you!");
+ next;
+ mesn;
+ mesq l("The name of the wizard of Aethyr is the key to open its gates. I've heard it'll open for a lowly %s as you, as long that you know both. But I don't think anyone here would share that with you!", get_race());
+ close;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, CottonTrousers);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, LeatherShirt);
+ setunitdata(.@npcId, UDT_HEADTOP, Beard);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 4);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 1);
+
+ .sex = G_MALE;
+ .distance = 5;
+ end;
+}
+
diff --git a/npc/024-1/soul-menhir.txt b/npc/024-1/soul-menhir.txt
new file mode 100644
index 0000000..2820399
--- /dev/null
+++ b/npc/024-1/soul-menhir.txt
@@ -0,0 +1,20 @@
+// TMW2 scripts.
+// Author:
+// Jesusalva
+// Description:
+// Soul Menhir
+
+024-1,94,41,0 script Soul Menhir#frost NPC_SOUL_SNOW,{
+ @map$ = "024-1";
+ setarray @Xs, 93, 94, 95, 93, 95, 93, 94, 95;
+ setarray @Ys, 40, 40, 40, 41, 41, 42, 42, 42;
+ @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/024-1/taenya.txt b/npc/024-1/taenya.txt
new file mode 100644
index 0000000..fcf9c23
--- /dev/null
+++ b/npc/024-1/taenya.txt
@@ -0,0 +1,123 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Questmaker Handbook 14.0 (F = Favorable)
+
+024-1,58,28,0 script Taenya NPC_ELF_F,{
+ .@q = getq(FrostiaQuest_Taenya);
+ if (BaseLevel < 52) {
+ mesc l("The elf seems busy. She ignores you.");
+ close;
+ }
+ if (.@q == 0) {
+ if (frally()) goto L_Start_F;
+ else goto L_Start_U;
+ }
+ else if (.@q == 1) {
+ if (frally()) goto L_Submit_F;
+ else goto L_Submit_U;
+ }
+ else if (.@q == 2) {
+ if (frally()) goto L_Done_F;
+ else goto L_Done_U;
+ }
+ Exception("Invalid quest state - "+str(.@q));
+ end;
+
+L_Start_F:
+ mesn;
+ mesq lg("Hey friend, could you do me a little favor?");
+ next;
+ mesn;
+ mesq l("I always wanted to taste a %s! But they don't grow anywhere, and I've heard the only way to obtain one is from %s. Unfortunately, I do not favor violence, so... Could you get one for me?", getitemlink(Manapple), getitemlink(BronzeBossGift));
+ next;
+ mesn;
+ mesq l("Thanks, I owe you one!");
+ setq FrostiaQuest_Taenya, 1;
+ close;
+
+L_Submit_F:
+ mesn;
+ mesq l("Did you got the %d %s I've asked?", 1, getitemlink(Manapple));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (countitem(Manapple) < 1) {
+ mesn;
+ mesq l("You've been spending too much time with humans. You are picking up bad habits from them like lying. Be careful.");
+ close;
+ }
+ inventoryplace EquipmentBlueprintC, 1;
+ delitem Manapple, 1;
+ getitem EquipmentBlueprintC, 1;
+ getexp 12000, 0;
+ setq FrostiaQuest_Taenya, 2;
+ mesn;
+ mesq l("Yay! Many thanks! I'll enjoy it! Here, you can keep this.");
+ }
+ close;
+
+L_Done_F:
+ mesn;
+ mesq l("Hey, the %s you gave me was quite tasty, thanks!", getitemlink(Manapple));
+ next;
+ mesn;
+ mesq l("%s is known as the Wizard of Aethyr. They say the elves which lived in Aethyr have became fairies, but contact has been lost long ago... I've heard it was a very pretty town north of here, though.", b("Tametomo"));
+ close;
+/////////////////////////////////////////////////////////////////////////////////
+L_Start_U:
+ mesn;
+ mesq l("Hey %s, could you do me a little favor?", get_race());
+ next;
+ mesn;
+ mesq l("I always wanted to taste a %s! But they don't grow anywhere, and I've heard the only way to obtain one is from %s. Unfortunately, I do not favor violence, so... Could you get one for me?", getitemlink(Manapple), getitemlink(BronzeBossGift));
+ next;
+ mesn;
+ mesq l("I'll be waiting!");
+ setq FrostiaQuest_Taenya, 1;
+ close;
+
+L_Submit_U:
+ mesn;
+ mesq l("Did you got the %d %s I've asked?", 1, getitemlink(Manapple));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (countitem(Manapple) < 1) {
+ mesn;
+ mesq l("You liar, I'll teach you a lesson you won't forget!");
+ mesc l("%s stabs you with a dagger!", .name$);
+ percentheal -55, 0;
+ close;
+ }
+ inventoryplace EquipmentBlueprintC, 1;
+ delitem Manapple, 1;
+ getitem EquipmentBlueprintC, 1;
+ getexp 12000, 0;
+ setq FrostiaQuest_Taenya, 2;
+ mesn;
+ mesq l("Thanks! I'll enjoy it! Here, you can keep this.");
+ }
+ close;
+
+L_Done_U:
+ mesn;
+ mesq l("Sorry, but I already ate the %s you gave me!", getitemlink(Manapple));
+ next;
+ mesn;
+ mesq l("%s is known as the Wizard of Aethyr. They say the elves which lived in Aethyr have became fairies, but contact has been lost long ago... I've heard it was a very pretty town north of here, though.", b("Tametomo"));
+ close;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, CottonSkirt);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, LeatherShirt);
+ setunitdata(.@npcId, UDT_HEADTOP, TrapperHat);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 9);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 18);
+ npcsit;
+
+ .sex = G_FEMALE;
+ .distance = 5;
+ end;
+}
+
diff --git a/npc/024-1/teleporter.txt b/npc/024-1/teleporter.txt
new file mode 100644
index 0000000..2bed0ae
--- /dev/null
+++ b/npc/024-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
+
+
+024-1,155,80,0 script #WarpGateFrost NPC_NO_SPRITE,1,0,{
+ end;
+
+OnTouch:
+ TeleporterGate(TP_FROST);
+ close;
+
+
+OnInit:
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+
diff --git a/npc/024-1/town.txt b/npc/024-1/town.txt
new file mode 100644
index 0000000..3e21e4f
--- /dev/null
+++ b/npc/024-1/town.txt
@@ -0,0 +1,12 @@
+// TMW-2 Script
+// Author:
+// Jesusalva
+// Description:
+// Reset LOCATION$ when entering a town
+
+024-1,93,69,0 script #LocFrostia NPC_HIDDEN,2,0,{
+OnTouch:
+ EnterTown("Frostia");
+ end;
+}
+