summaryrefslogtreecommitdiff
path: root/npc/017-10
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/017-10
downloadserverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/017-10')
-rw-r--r--npc/017-10/_import.txt8
-rw-r--r--npc/017-10/_warps.txt6
-rw-r--r--npc/017-10/airship.txt68
-rw-r--r--npc/017-10/dispatcher.txt411
-rw-r--r--npc/017-10/kenton.txt204
-rw-r--r--npc/017-10/politics.txt58
-rw-r--r--npc/017-10/vault.txt20
7 files changed, 775 insertions, 0 deletions
diff --git a/npc/017-10/_import.txt b/npc/017-10/_import.txt
new file mode 100644
index 0000000..a17ef5e
--- /dev/null
+++ b/npc/017-10/_import.txt
@@ -0,0 +1,8 @@
+// Map 017-10: LoF Townhall
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/017-10/_warps.txt",
+"npc/017-10/airship.txt",
+"npc/017-10/dispatcher.txt",
+"npc/017-10/kenton.txt",
+"npc/017-10/politics.txt",
+"npc/017-10/vault.txt",
diff --git a/npc/017-10/_warps.txt b/npc/017-10/_warps.txt
new file mode 100644
index 0000000..b4d6087
--- /dev/null
+++ b/npc/017-10/_warps.txt
@@ -0,0 +1,6 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 017-10: LoF Townhall warps
+017-10,36,79,0 warp #017-10_36_79 0,0,017-1,171,21
+017-10,56,79,0 warp #017-10_56_79 0,0,017-1,180,21
+017-10,60,79,0 warp #017-10_60_79 0,0,017-1,182,21
+017-10,80,79,0 warp #017-10_80_79 0,0,017-1,190,21
diff --git a/npc/017-10/airship.txt b/npc/017-10/airship.txt
new file mode 100644
index 0000000..48851f4
--- /dev/null
+++ b/npc/017-10/airship.txt
@@ -0,0 +1,68 @@
+// TMW-2 Script.
+// Author:
+// Jesusalva
+// Notes:
+// Fortress Island South (Lv 70~150 Area)
+
+017-10,63,22,0 script #ToFortress NPC_NO_SPRITE,1,0,{
+ end;
+OnTouch:
+ .@q=getq(General_Narrator);
+ if (.@q < 20)
+ end;
+
+ mesc l(".:: Fortress Island ::."), 1;
+ mes "";
+ if ($GAME_STORYLINE < 3) {
+ mesc l("Travel to this area is impossible, due to the hordes of Monster Armies."), 1;
+ mes "";
+ mesc l("If only we defeated their generals and put the army in disarray... It would be possible to visit there.");
+ close;
+ }
+ if (BaseLevel < 70) {
+ mesc l("This area is only for level 70 upwards."), 1;
+ close;
+ }
+ mesc l("Do you want to go to Fortress Island, where the Monster King lives?!"), 1;
+ removespecialeffect(FX_CIRCLE, SELF, getcharid(3)); // FIXME :(
+ next;
+ mesc l("WARNING: HIGH LEVEL AREA. COME PREPARED."), 1;
+ mesc l("Note: This travel takes a whole minute to complete!!");
+ mesc l("Note 2: If you leave this plataform, it'll reset!");
+ mesc l("Note 3: All maps in Fortress Island have penalty, even towns!");
+ next;
+ mesc l("BEGIN WARP PROCEDURES?"), 1;
+ if (askyesno() == ASK_YES) {
+ specialeffect FX_CIRCLE, SELF, getcharid(3);
+ addtimer2 70000, "#ToFortress::OnWarper";
+ addtimer2 60000, "#ToFortress::OnNotif";
+ }
+ close;
+
+OnNotif:
+ specialeffect FX_MAGIC, SELF, getcharid(3);
+ dispbottom l("WARPING IN 10 SECONDS");
+ end;
+
+OnWarper:
+ removespecialeffect(FX_CIRCLE, SELF, getcharid(3));
+ if (getmap() != "017-10")
+ end;
+ if (!FORT_1ST_VISIT)
+ FORT_1ST_VISIT = gettimetick(2);
+ warp "025-2", 97, 119;
+ specialeffect FX_SUCCESS, SELF, getcharid(3);
+ dispbottom l("You have arrived at Fortress Island.");
+ end;
+}
+
+017-10,63,28,0 script #ToFortressAbort NPC_NO_SPRITE,5,0,{
+ end;
+OnTouch:
+ removespecialeffect(FX_CIRCLE, SELF, getcharid(3));
+ atcommand("@refresh"); // FIXME :(
+ deltimer "#ToFortress::OnWarper";
+ deltimer "#ToFortress::OnNotif";
+ end;
+}
+
diff --git a/npc/017-10/dispatcher.txt b/npc/017-10/dispatcher.txt
new file mode 100644
index 0000000..b47060d
--- /dev/null
+++ b/npc/017-10/dispatcher.txt
@@ -0,0 +1,411 @@
+// TMW2/LoF scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Deploys an Homunculus in a mission during your offline time
+// Variables
+// HOMUN_DEPLOYDATE
+// When the Homunculus is scheduled to arrive
+// HOMUN_DEPLOYFIELD
+// ID of the field which Homunculus was deployed
+
+017-10,61,34,0 script Erik NPC_JOURNALMAN,{
+ function lootField;
+ mesn;
+ mesq l("Hello. My name is Erik, and I have Homunculus go out in errands in my stead.");
+
+ // If you haven't summoned yet, or killed it...
+ if (!gethominfo(0)) {
+ mesc l("You do not own an Homunculus."), 1;
+ close;
+ }
+
+ // Check what your homunculus is up to
+ switch (homstatus()) {
+ case 0:
+ mesc l("Your homunculus is ready!"), 2;
+ break;
+ case 1:
+ mesc l("Your homunculus is sleeping! Wake them up!"), 3;
+ close;
+ break;
+ case 2:
+ mesc l("Your homunculus is already on a mission!"), 1;
+
+ // Homunculus should return from mission
+ if (gettimetick(2) > HOMUN_DEPLOYDATE) {
+ select
+ l("Recall");
+ .@xp=lootField(HOMUN_DEPLOYFIELD);
+ recallhomunculus();
+ gethomunexp(.@xp);
+ .@lv=gethominfo(6);
+ getexp 0, (.@lv*min(10000, gethominfo(3))/10000)*5;
+ close;
+ }
+ mesc l("It should be back in @@", FuzzyTime(HOMUN_DEPLOYDATE)), 1;
+ close;
+ break;
+ default:
+ Exception("ERROR! homstatus code "+homstatus(), RB_DEFAULT|RB_SPEECH|RB_ISFATAL);
+ break;
+ }
+
+ // This is a bug: They are ready but shouldn't be.
+ if (gettimetick(2) < HOMUN_DEPLOYDATE) {
+ Exception("ERROR: YOU WERE BANNED FROM USING ERIK SERVICES. (might be a bug).", RB_SPEECH|RB_ISFATAL);
+ close;
+ }
+
+L_Main:
+ select
+ l("Deploy to Piou Fields [1h]"),
+ l("Deploy to Herb Fields [1h]"),
+ rif(gethominfo(6) >= 10, l("Deploy to Ore Mines [2h]")),
+ rif(gethominfo(6) >= 10, l("Deploy to Rare Mines [2h]")),
+ rif(gethominfo(6) >= 15, l("Deploy to Slime Nest [2h]")),
+ rif(gethominfo(6) >= 30, l("Deploy to Snake Pit [3h]")),
+ rif(gethominfo(6) >= 55 && $GAME_STORYLINE >= 3, l("Deploy to Dangerous Area [6h]")),
+ rif(gethominfo(6) >= 70 && $GAME_STORYLINE >= 4, l("Deploy to Monster King Basement [8h]")),
+ "",
+ l("Deploy to The Market [1h]"),
+ l("Don't deploy");
+ mes "";
+ // Common drops: At least 90% drop
+ // Rare drops: 5% or less drop rate
+ switch (@menu) {
+ case 1:
+ mesc ".:: " + l("Piou Fields") + " ::.";
+ mesc l("The most basic grinding camp for your homunculus.");
+ mesc l("Average EXP: "+200), 3;
+ mesc l("Common Drops: "+
+ getitemlink(PiouFeathers));
+ mesc l("Regular Drops: "+
+ getitemlink(PiouLegs)+
+ getitemlink(HalfEggshell));
+ mesc l("Rare Drops: "+
+ getitemlink(GoldenApple));
+ next;
+ .@dest=HCD_PIOUFIELDS;
+ .@hours=1;
+ break;
+ case 2:
+ mesc ".:: " + l("Herb Fields") + " ::.";
+ mesc l("If you need more herbs, the best place to look.");
+ mesc l("Average EXP: "+10), 3;
+ mesc l("Common Drops: "+
+ getitemlink(ArtichokeHerb));
+ mesc l("Regular Drops: "+
+ getitemlink(CobaltHerb)+
+ getitemlink(GambogeHerb)+
+ getitemlink(MauveHerb)+
+ getitemlink(AlizarinHerb));
+ mesc l("Rare Drops: "+
+ getitemlink(ReedBundle));
+ next;
+ .@dest=HCD_HERBFIELDS;
+ .@hours=1;
+ break;
+ case 3:
+ mesc ".:: " + l("Ore Mines") + " ::.";
+ mesc l("Send your Homunculus to mineration!");
+ mesc l("Average EXP: "+24), 3;
+ mesc l("Common Drops: "+
+ getitemlink(Coal));
+ mesc l("Regular Drops: "+
+ getitemlink(IronOre)+
+ getitemlink(CopperOre)+
+ getitemlink(SilverOre)+
+ getitemlink(GoldOre));
+ mesc l("Rare Drops: "+
+ getitemlink(TinOre)+
+ getitemlink(LeadOre)+
+ getitemlink(TitaniumOre)+
+ getitemlink(IridiumOre)+
+ getitemlink(PlatinumOre));
+ next;
+ .@dest=HCD_OREMINES;
+ .@hours=2;
+ break;
+ case 4:
+ mesc ".:: " + l("Rare Mines") + " ::.";
+ mesc l("Send your Homunculus to mineration!");
+ mesc l("Average EXP: "+30), 3;
+ mesc l("Common Drops: "+
+ getitemlink(Pearl));
+ mesc l("Regular Drops: "+
+ getitemlink(Diamond)+
+ getitemlink(Ruby)+
+ getitemlink(Emerald)+
+ getitemlink(Sapphire)+
+ getitemlink(Topaz)+
+ getitemlink(Amethyst));
+ mesc l("Rare Drops: "+
+ getitemlink(LightGreenDiamond)+
+ getitemlink(BlackPearl)+
+ getitemlink(BlueManaPearl));
+ next;
+ .@dest=HCD_RAREMINES;
+ .@hours=2;
+ break;
+ case 5:
+ mesc ".:: " + l("Slime Nest") + " ::.";
+ mesc l("Send your Homunculus to a slime nest!");
+ mesc l("Average EXP: "+1600), 3;
+ mesc l("Common Drops: "+
+ getitemlink(MaggotSlime)+
+ getitemlink(Arrow));
+ mesc l("Regular Drops: "+
+ getitemlink(IronArrow)+
+ getitemlink(TreasureKey)+
+ getitemlink(CactusDrink)+
+ getitemlink(CoinBag)+
+ getitemlink(CasinoCoins)+
+ getitemlink(Coal)+
+ getitemlink(Dagger)+
+ getitemlink(Candy)+
+ getitemlink(ChocolateBar));
+ mesc l("Rare Drops: "+
+ getitemlink(Milk)+
+ getitemlink(IcedBottle));
+ next;
+ .@dest=HCD_SLIMENEST;
+ .@hours=2;
+ break;
+ case 6:
+ mesc ".:: " + l("Snake Pit") + " ::.";
+ mesc l("Send your Homunculus to hold off snakes!");
+ mesc l("Average EXP: "+format_number(4500)), 3;
+ mesc l("Common Drops: "+
+ getitemlink(SnakeEgg)+
+ getitemlink(SnakeTongue));
+ mesc l("Regular Drops: "+
+ getitemlink(SnakeSkin));
+ mesc l("Rare Drops: "+
+ getitemlink(JeansShorts)+
+ getitemlink(DivineApple)+
+ getitemlink(Kanabo));
+ next;
+ .@dest=HCD_SNAKEPIT;
+ .@hours=3;
+ break;
+ case 7:
+ mesc ".:: " + l("Dangerous Area") + " ::.";
+ mesc l("Send your Homunculus to loot the Impregnable Fortress!");
+ mesc l("Average EXP: "+format_number(140000)), 3;
+ mesc l("Common Drops: None");
+ mesc l("Regular Drops: "+
+ getitemlink(MoubooSteak)+
+ getitemlink(HastePotion)+
+ getitemlink(StrengthPotion)+
+ getitemlink(SmokeGrenade)+
+ getitemlink(Grenade)+
+ getitemlink(MercBoxA)+
+ getitemlink(AncientBlueprint)+
+ getitemlink(Lockpicks)+
+ getitemlink(StatusResetPotion)+
+ getitemlink(DungeonMap)+
+ getitemlink(TreasureMap));
+ mesc l("Rare Drops: "+
+ getitemlink(MagicApple));
+ next;
+ .@dest=HCD_DANGERAREA;
+ .@hours=6;
+ break;
+ case 8:
+ mesc ".:: " + l("Monster King Basement") + " ::.";
+ mesc l("Send your Homunculus to one of the most dangerous...!");
+ mesc l("Average EXP: "+format_number(1000000)), 3;
+ mesc l("Common Drops: None");
+ mesc l("Regular Drops: "+
+ getitemlink(Curshroom)+
+ getitemlink(HastePotion)+
+ getitemlink(StrengthPotion)+
+ getitemlink(SmokeGrenade)+
+ getitemlink(Grenade)+
+ getitemlink(AncientBlueprint)+
+ getitemlink(DungeonMap)+
+ getitemlink(TreasureMap)+
+ getitemlink(CrazyRum)+
+ getitemlink(MercBoxB));
+ mesc l("Rare Drops: "+
+ getitemlink(WhiskeyAle)+
+ getitemlink(GoldenApple)+
+ getitemlink(DivineApple)+
+ getitemlink(MagicApple));
+ next;
+ .@dest=HCD_MKBASEMENT;
+ .@hours=8;
+ break;
+ case 10:
+ mesc ".:: " + l("The Market") + " ::.";
+ mesc l("Send your Homunculus to make money!");
+ mesc l("Average EXP: "+16), 3;
+ mesc l("Maximum Profit: @@ GP", format_number(.zenycap)), 3;
+ mesc l("Common Drops: "+
+ getitemlink(Piberries));
+ mesc l("Regular Drops: "+
+ getitemlink(Bread)+
+ getitemlink(Cheese)+
+ getitemlink(Beer));
+ mesc l("Rare Drops: "+
+ getitemlink(TreasureMap));
+ next;
+ .@dest=HCD_MARKET;
+ .@hours=1;
+ break;
+ default:
+ close;
+ }
+
+ // Confirmation
+ mesc l("Really deploy your homunculus?"), 1;
+ if (askyesno() == ASK_NO)
+ goto L_Main;
+
+ // Deploy Homunculus (if possible)
+ if (!homstatus() && gethominfo(0)) {
+ deployhomunculus();
+ mesc l("Deployed!"), 2;
+ HOMUN_DEPLOYFIELD=.@dest;
+ HOMUN_DEPLOYDATE=gettimetick(2)+(60*60*.@hours);
+ }
+ close;
+
+// lootField (Field ID)
+// Returns amount of Homunculus EXP to get
+function lootField {
+ // Ensure you have free space
+ inventoryplace Iten, 3, NPCEyes, 9;
+ .@lv=gethominfo(6);
+
+ // Base EXP is based on Homunculus level and intimacy
+ .@val=.@lv*min(10000, gethominfo(3))/10000;
+
+ switch (getarg(0)) {
+ case HCD_PIOUFIELDS:
+ .@val+=200;
+ anyloot(PiouFeathers, .@lv, 10000,
+ PiouLegs, max(1, .@lv/2), 8000,
+ HalfEggshell, .@lv, 6000,
+ GoldenApple, 1, 100);
+ break;
+ case HCD_HERBFIELDS:
+ .@val+=10;
+ anyloot(ArtichokeHerb, .@lv, 10000,
+ CobaltHerb, max(1, .@lv/2), 6000,
+ GambogeHerb, max(1, .@lv/2), 6000,
+ MauveHerb, max(1, .@lv/2), 6000,
+ AlizarinHerb, max(1, .@lv/2), 6000,
+ ShadowHerb, max(1, .@lv/3), 4000,
+ ReedBundle, 2, 800);
+ break;
+ case HCD_OREMINES:
+ .@val+=24;
+ anyloot(Coal, .@lv, 9999,
+ IronOre, max(1, .@lv/2), 2000,
+ CopperOre, max(1, .@lv/2), 1000,
+ SilverOre, max(1, .@lv/3), 700,
+ GoldOre, max(1, .@lv/4), 450,
+ TinOre, max(1, .@lv/5), 350,
+ LeadOre, max(1, .@lv/6), 300,
+ TitaniumOre, max(1, .@lv/8), 100,
+ (REBIRTH ? IridiumOre : TitaniumOre), max(1, .@lv/10), 80,
+ (REBIRTH ? PlatinumOre : IridiumOre), 1, 20);
+ break;
+ case HCD_RAREMINES:
+ .@val+=30;
+ anyloot(Pearl, 1, 9999,
+ Diamond, limit(1, .@lv/2, 3), 2000,
+ Ruby, limit(1, .@lv/2, 3), 1700,
+ Emerald, limit(1, .@lv/2, 3), 1400,
+ Sapphire, limit(1, .@lv/2, 3), 1100,
+ Topaz, limit(1, .@lv/2, 3), 800,
+ Amethyst, limit(1, .@lv/2, 3), 500,
+ LightGreenDiamond, 1, 100,
+ BlackPearl, 1, 10,
+ BlueManaPearl, 1, 1);
+ break;
+ case HCD_SLIMENEST:
+ .@val+=1600;
+ anyloot(MaggotSlime, .@lv, 10000,
+ Arrow, .@lv, 9000,
+ IronArrow, .@lv, 4000,
+ TreasureKey, max(1, .@lv/10), 6000,
+ CactusDrink, limit(1, .@lv/10, 3), 4000,
+ CoinBag, limit(1, .@lv/8, 5), 4000,
+ CasinoCoins, limit(1, .@lv/6, 10), 3200,
+ Coal, limit(1, .@lv/10, 3), 3000,
+ Dagger, limit(1, .@lv/15, 3), 3000,
+ Candy, limit(1, .@lv/5, 6), 2000,
+ ChocolateBar, limit(1, .@lv/20, 3), 1000,
+ Milk, 1, 200,
+ IcedBottle, 1, 60);
+ break;
+ case HCD_SNAKEPIT:
+ .@val+=4500;
+ anyloot(SnakeEgg, limit(1, .@lv/8, 10), 9600,
+ SnakeTongue, limit(1, .@lv/16, 5), 9500,
+ SnakeSkin, limit(1, .@lv/20, 3), 7000,
+ JeansShorts, 1, 300,
+ DivineApple, 1, 10,
+ Kanabo, 1, 1); // Teasing Xanthem for mapping here
+ break;
+ case HCD_DANGERAREA:
+ .@val+=140000;
+ anyloot(HastePotion, limit(1, .@lv/20, 10), 4000,
+ StrengthPotion, limit(1, .@lv/20, 10), 4000,
+ SmokeGrenade, limit(1, .@lv/18, 8), 4000,
+ Grenade, limit(1, .@lv/28, 6), 3000,
+ MoubooSteak, limit(1, .@lv/28, 6), 2500,
+ MercBoxA, 1, 2000,
+ AncientBlueprint, 1, 1500,
+ Lockpicks, limit(1, .@lv/30, 4), 1000,
+ StatusResetPotion, 1, 1000,
+ DungeonMap, 1, 700,
+ TreasureMap, 1, 700,
+ MagicApple, 1, 40);
+ break;
+ case HCD_MKBASEMENT:
+ .@val+=1000000;
+ anyloot(HastePotion, limit(1, .@lv/20, 10), 6000,
+ StrengthPotion, limit(1, .@lv/20, 10), 6000,
+ Curshroom, limit(1, .@lv/28, 6), 4500,
+ SmokeGrenade, limit(1, .@lv/18, 8), 4500,
+ Grenade, limit(1, .@lv/28, 6), 3500,
+ AncientBlueprint, 1, 2500,
+ DungeonMap, 1, 2000,
+ TreasureMap, 1, 2000,
+ CrazyRum, 1, 1500,
+ MercBoxB, 1, 1000,
+ WhiskeyAle, 1, 400,
+ GoldenApple, 1, 80,
+ DivineApple, 1, 60,
+ MagicApple, 1, 45);
+ break;
+ case HCD_MARKET:
+ .@val+=16;
+ // Sending a fresh homun in market may yield no GP.
+ Zeny+=min(.zenycap, 1000*.@lv*min(10000, gethominfo(3))/100000);
+ anyloot(Piberries, .@lv, 9000,
+ Bread, limit(1, .@lv/3, 12), 7000,
+ Cheese, .@lv, 5000,
+ Beer, limit(1, .@lv/10, 10), 1200,
+ TreasureMap, 1, 420);
+ break;
+ }
+ // A final boost for sake of randomness
+ .@val+=rand2(0, 10);
+ return .@val;
+}
+
+OnInit:
+ .sex=G_MALE;
+ .distance=5;
+ // Old Maximum Profit: 10,000 GP
+ // Coin Bag farming: 180 mobs, at 5% drop rate: 5,000 GP max
+ .zenycap=7500;
+ end;
+
+}
+
diff --git a/npc/017-10/kenton.txt b/npc/017-10/kenton.txt
new file mode 100644
index 0000000..3ffc2fa
--- /dev/null
+++ b/npc/017-10/kenton.txt
@@ -0,0 +1,204 @@
+// TMW2/LoF scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Part of player story
+
+017-10,57,34,0 script Kenton NPC_KENTON,{
+ .@q=getq(General_Narrator);
+ mesn;
+ mesq l("Hello! My name is Kenton, and I'm in charge of Public Affairs of Land Of Fire.");
+ next;
+ mesn;
+ mesq l("You see, Pihro and Pyndragon, the mayors, are really busy people. They're developing a game or something as we speak.");
+ next;
+ mesn;
+ mesq l("So if you have any issue which would require the Mayor to see it, you'll need me first.");
+ switch (.@q) {
+ case 0:
+ Exception("ERROR", RB_SPEECH|RB_ISFATAL);
+ case 17:
+ next;
+ mesc l("@@ raise an eyebrow as you hand him Gelid's letter.", .name$);
+ next;
+ mesn;
+ mesq l("That's a really strange letter from Mr. Frozenheart.");
+ next;
+ mesn;
+ mesq l("But also very amusing. I'm sure Pihro and Pyndragon, the town mayors, will fancy this request of yours.");
+ next;
+ mesn;
+ mesq l("Anyway, as you might be aware, Land Of Fire came here in an incident after the Monster King took all Mana Stones... So, we have a good magical affinity.");
+ next;
+ mesn;
+ mesq l("Most of our professors moved on to the Academy Island, and are with Tulimshar's and Frostia's professors working right now. But...");
+ next;
+ mesn;
+ mesq l("...Lalica, the witch, is still with us. And she came to complain that a petty thief stolen a very precious item of hers.");
+ next;
+ mesn;
+ mesq l("I don't know what, but it is ")+b(l("small, red, round and shiny."))+l("And we know who the thief is.");
+ next;
+ mesn;
+ mesq l("I've dispatched Benjamin and some other city guards after her flew to Elenium Mines, but thus far, they haven't returned.");
+ next;
+ mesn;
+ mesq l("I need you to find her to and bring her back there, along whatever she stole. Then I'll honor your request.");
+ next;
+ mesn;
+ mesq l("After all, that was two nights ago, and none of them returned...");
+ mesc b(l("WARNING: "))+l("Minimum advised level 72 to do this quest."), 1;
+ mesc b(l("WARNING: "))+l("You would do well as come prepared, as failing in the last stage will RESET current progress on the quest."), 1;
+ setq LoFQuest_Barbara, 1;
+ setq General_Narrator, 18;
+ break;
+ // Barbara Quest in progress
+ case 18:
+ .@s=getq(LoFQuest_Barbara);
+ .@s3=getq3(LoFQuest_Barbara);
+ switch (.@s) {
+ case 5:
+ // No apple - you fail
+ if (!.@s3) {
+ mesn;
+ mesq l("Good luck arresting the criminal!");
+ mesc l("You need both the stolen item as the thief to complete the quest."), 1;
+ close;
+ }
+
+ // Good reporting
+ mesn;
+ if (!BARBARA_STATE)
+ mesq l("I see you've brought Barbara here, excellent. She seems pretty beat up.");
+ else
+ mesq l("...Where's Barbara, the thief?");
+ next;
+ mesn;
+ mesq l("Also, do you have the stolen item?");
+ // You fail
+ if (!(askyesno() == ASK_YES && countitem(MagicApple))) {
+ mes "";
+ mesn;
+ mesq l("Bring me the stolen item, pretty please.");
+ close;
+ }
+ mes "";
+ mesn;
+ mesq l("Good, there they are.");
+ next;
+ if (BARBARA_STATE) {
+ mesn strcharinfo(0);
+ mesq l("I regret to inform Barbara was killed in battle before I could find her. I burried her in the mines.");
+ next;
+ mesn;
+ mesq l("Oh... What a bummer. But you've brought the item back, so we're OK.");
+ next;
+ // Barbara is alive
+ } else {
+ mesc l("Pledge for Barbara's innocence?");
+ // Pledge menu
+ if (askyesno() == ASK_YES) {
+ BARBARA_STATE=3;
+ mesn;
+ mesq lg("...That's a surprise, the noble @@ defending a criminal like her.", strcharinfo(0));
+ next;
+ mesn;
+ mesq l("I will let Lalica, Pihro and Pyndragon know that you find her not guilty, but...");
+ next;
+ mesn;
+ mesq l("The final sentence still belongs to LoF Admins.");
+ next;
+ } else {
+ BARBARA_STATE=2;
+ }
+ // EOF: Pledge Menu
+ mesn;
+ mesq l("I'll have her hospitalized now.");
+ next;
+ }
+ mesn;
+ mesq l("Anyway, here is your reward.");
+ delitem MagicApple, 1;
+ setq General_Narrator, 19;
+ setq LoFQuest_Barbara, 0, 0, 0;
+ getexp 400000, 15000; // Needed: 1,148,484
+ Zeny+=3300; // You get a reward in cash
+ getvaultexp(10);
+ next;
+ mesn;
+ mesq l("Please come back later to know how things are going.");
+ break;
+ // Bad reporting
+ case 4:
+ mesn;
+ mesq l("Good luck arresting the criminal!");
+ mesc l("You need both the stolen item as the thief to complete the quest."), 1;
+ break;
+ // Cutscene not seen
+ case 1:
+ mesn;
+ mesq l("Good luck arresting the criminal!");
+ break;
+ // Default message
+ default:
+ mesn;
+ mesq l("Benjamin reported in. Good luck arresting the criminal!");
+ break;
+ }
+ break;
+ // Barbara Quest was complete and solution was marked in BARBARA_STATE
+ case 19:
+ next;
+ mesn;
+ mesq l("So, where we were again... Oh right, travel to world edge, look for family or whatever, right?");
+ next;
+ mesn;
+ mesq l("Yes. I mean, yes, Pihro and Pyndragon will fancy you an airship.");
+ next;
+ select
+ l("What is an airship? O.o"),
+ l("Cool, an airship!");
+ mes "";
+ if (@menu == 1) {
+ mesn;
+ mesq l("An Airship? It is just a ship. Which flies.");
+ next;
+ }
+ mesn;
+ mesq l("Now, crafting an airship requires a lot of efforts, resources, money and specially time. Fourteen months, to be exact.");
+ next;
+ mesn;
+ mesq l("By the way , it is done already. You took a long time, you know? Also, we're talking about Pihro and Pyndragon.");
+ next;
+ mesn;
+ mesq l("Besides, the Alliance High Council had plans for an expedition on the Fortress Island, but had no personel to do it.");
+ next;
+ mesn;
+ mesq l("Yes, you are now personel! Doesn't it feels exciting? Please tell me it does, I have nothing else to convince you to go otherwise.");
+ next;
+ mesn;
+ mesq l("The Fortress Island is a terribly dangerous place, so the Alliance sent a scout party beforehand, and set up a tower in front of an... erm... Very disturbing walled place we found.");
+ next;
+ mesn;
+ mesq l("Now go and save the world or something like that. I mean, it is not like I really cared with the world, anyway... With luck you'll even find what you are looking for.");
+ setq General_Narrator, 20;
+ // FALLTHROUGH
+ case 20:
+ case 21:
+ next;
+ setcamnpc "#ToFortress";
+ mesn;
+ mesq l("Just go over there and you'll be able to board the Airship. The travel takes a while so please be patient and good luck!");
+ restorecam;
+ // TODO: Maybe investigate & report to Tulimshar Magic Council?
+ break;
+ }
+ close;
+
+OnInit:
+ .sex=G_MALE;
+ .distance=5;
+ end;
+
+}
+
diff --git a/npc/017-10/politics.txt b/npc/017-10/politics.txt
new file mode 100644
index 0000000..8bcd243
--- /dev/null
+++ b/npc/017-10/politics.txt
@@ -0,0 +1,58 @@
+// TMW2 Scripts
+// Author:
+// Jesusalva
+// Description:
+// Town Administrator file, see npc/functions/politics.txt
+// User variables:
+// #POL_APPLYWEEK = Week of last application
+// #POL_VOTEDAY = Day of last vote
+
+017-10,54,35,0 script Land Of Fire Office NPC_POLITICS,{
+do
+{
+ mesc ".:: "+l("Land Of Fire Townhall")+" ::.", 2;
+ mesc l("Current Town Administrator: ")+$LOF_MAYOR$, 3;
+ POL_TownInfo("LOF");
+ mesc l("Application fee: @@ GP", .applytax);
+ next;
+ select
+ l("Information"),
+ rif(strcharinfo(0) == $LOF_MAYOR$, l("Manage Town")),
+ rif(#POL_APPLYWEEK != gettimeparam(GETTIME_WEEKDAY), l("Apply for the office!")),
+ l("View Candidate List and cast a vote"),
+ l("[Quit]");
+
+ switch (@menu) {
+ case 1:
+ POL_Information();
+ break;
+ case 2:
+ POL_Manage("LOF");
+ break;
+ case 3:
+ // array_push might be too sensible for getd/setd
+ if (Zeny < .applytax)
+ break;
+ Zeny-=.applytax;
+ $LOF_MONEY+=.applytax;
+ #POL_APPLYWEEK=gettimeparam(GETTIME_WEEKDAY);
+ array_push($LOF_CANDIDATE$, strcharinfo(0));
+ array_push($LOF_VOTES, 0);
+ mesc l("Application successful!"), 3;
+ next;
+ break;
+ case 4:
+ POL_Candidate("LOF");
+ break;
+ default:
+ close;
+ }
+} while (true);
+end;
+
+OnInit:
+ .applytax=100;
+ .distance=4;
+ end;
+}
+
diff --git a/npc/017-10/vault.txt b/npc/017-10/vault.txt
new file mode 100644
index 0000000..86bfeff
--- /dev/null
+++ b/npc/017-10/vault.txt
@@ -0,0 +1,20 @@
+// TMW2/LoF Script.
+// Author:
+// Jesusalva
+// Notes:
+// Based on BenB idea.
+
+017-10,20,41,0 script Vault#01710 NPC_NO_SPRITE,{
+ LootableVault(3, 5, "01710");
+ close;
+
+OnInit:
+ .distance=3;
+ end;
+
+OnClock0202:
+OnClock1419:
+ $VAULT_01710+=rand2(50,100);
+ end;
+}
+