summaryrefslogtreecommitdiff
path: root/npc/020-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/020-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/020-1')
-rw-r--r--npc/020-1/_import.txt13
-rw-r--r--npc/020-1/_mobs.txt5
-rw-r--r--npc/020-1/_warps.txt10
-rw-r--r--npc/020-1/guards.txt104
-rw-r--r--npc/020-1/mapflags.txt8
-rw-r--r--npc/020-1/misc.txt197
-rw-r--r--npc/020-1/serge.txt103
-rw-r--r--npc/020-1/siege.txt60
-rw-r--r--npc/020-1/town.txt12
-rw-r--r--npc/020-1/trainer.txt167
-rw-r--r--npc/020-1/wateranimation.txt24
-rw-r--r--npc/020-1/well.txt14
12 files changed, 717 insertions, 0 deletions
diff --git a/npc/020-1/_import.txt b/npc/020-1/_import.txt
new file mode 100644
index 0000000..2eb1208
--- /dev/null
+++ b/npc/020-1/_import.txt
@@ -0,0 +1,13 @@
+// Map 020-1: Nivalis
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/020-1/_mobs.txt",
+"npc/020-1/_warps.txt",
+"npc/020-1/guards.txt",
+"npc/020-1/mapflags.txt",
+"npc/020-1/misc.txt",
+"npc/020-1/serge.txt",
+"npc/020-1/siege.txt",
+"npc/020-1/town.txt",
+"npc/020-1/trainer.txt",
+"npc/020-1/wateranimation.txt",
+"npc/020-1/well.txt",
diff --git a/npc/020-1/_mobs.txt b/npc/020-1/_mobs.txt
new file mode 100644
index 0000000..9bafbea
--- /dev/null
+++ b/npc/020-1/_mobs.txt
@@ -0,0 +1,5 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 020-1: Nivalis mobs
+020-1,62,75,50,51 monster Fluffy 1022,20,60000,30000
+020-1,66,76,48,49 monster Squirrel 1054,5,100000,30000
+020-1,68,79,48,49 monster Pollet 1219,16,90000,30000
diff --git a/npc/020-1/_warps.txt b/npc/020-1/_warps.txt
new file mode 100644
index 0000000..d8018a1
--- /dev/null
+++ b/npc/020-1/_warps.txt
@@ -0,0 +1,10 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 020-1: Nivalis warps
+020-1,47,48,0 warp #020-1_47_48 0,0,020-2,30,36
+020-1,66,52,0 warp #020-1_66_52 0,0,020-7,40,49
+020-1,64,82,0 warp #020-1_64_82 0,0,020-4,64,53
+020-1,86,46,0 warp #020-1_86_46 0,0,020-5,33,30
+020-1,57,91,0 warp #020-1_57_91 0,0,020-3,20,28
+020-1,70,128,0 warp #020-1_70_128 3,0,019-1,70,22
+020-1,107,55,0 warp #020-1_107_55 0,0,019-2,38,55
+020-1,33,94,0 warp #020-1_33_94 0,0,020-6,30,32
diff --git a/npc/020-1/guards.txt b/npc/020-1/guards.txt
new file mode 100644
index 0000000..4d33bee
--- /dev/null
+++ b/npc/020-1/guards.txt
@@ -0,0 +1,104 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Protect Nivalis
+
+020-1,49,48,0 script Lieutenant Joshua NPC_PLAYER,{
+ // The Monster King guild have a special menu
+ if (strcharinfo(2) == "Monster King") goto L_MKControl;
+
+ if ($NIVALIS_LIBDATE) {
+ mesn;
+ mesq l("Nivalis was liberated @@ ago.", FuzzyTime($NIVALIS_LIBDATE));
+ close;
+ } else {
+ legiontalk; end;
+ }
+
+L_MKControl:
+ mesn;
+ mes "Oh noes! You've found the Nivalis control panel!";
+ next;
+ select
+ l("Abort"),
+ l("Initiate a siege");
+ mes "";
+ if (@menu == 2) {
+ doevent "Lieutenant Joshua::OnStartSiege";
+ closedialog;
+ }
+ close;
+
+
+OnMKSiege:
+ $@SIEGE_ABORTED = false;
+OnStartSiege:
+ kamibroadcast(col("WARNING! WARNING! Monster Army is moving towards Nivalis!!",1));
+ do_siege("020-1", "019-2", "NIVAL", TP_NIVAL, .name$, .siegetime);
+ initnpctimer;
+ end;
+
+// Timers
+OnTimer5000:
+ .siegetime+=5;
+ do_siege("020-1", "019-2", "NIVAL", TP_NIVAL, .name$, .siegetime);
+ switch (.siegetime) {
+ // Monster Army arrives in town
+ case 60:
+ disablenpc "Serge";
+ disablenpc "Knox The Traveler";
+ disablenpc "Camilot";
+ disablenpc "Mede";
+ disablenpc "Gambler#020-4";
+ disablenpc "Gambling Xan";
+ disablenpc "Baktar";
+ disablenpc "Bracco";
+ disablenpc "Agostine";
+ break;
+ // Monster Army deployed in town
+ case 90:
+ disablenpc "Ben#NivBanker";
+ break;
+ // Monster army have withdrawn completly
+ case MK_SIEGE_DURATION:
+ .siegetime=0;
+ announce(("Nivalis siege is over!"), bc_all);
+ enablenpc "Serge";
+ enablenpc "Knox The Traveler";
+ enablenpc "Camilot";
+ enablenpc "Mede";
+ enablenpc "Gambler#020-4";
+ enablenpc "Gambling Xan";
+ enablenpc "Baktar";
+ enablenpc "Bracco";
+ enablenpc "Agostine";
+ enablenpc "Ben#NivBanker";
+ 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;
+
+
+}
+
diff --git a/npc/020-1/mapflags.txt b/npc/020-1/mapflags.txt
new file mode 100644
index 0000000..838cbfa
--- /dev/null
+++ b/npc/020-1/mapflags.txt
@@ -0,0 +1,8 @@
+020-1 mapflag town
+020-2 mapflag town
+020-3 mapflag town
+020-4 mapflag town
+020-5 mapflag town
+020-6 mapflag town
+020-7 mapflag town
+020-7-1 mapflag town
diff --git a/npc/020-1/misc.txt b/npc/020-1/misc.txt
new file mode 100644
index 0000000..f3b24ee
--- /dev/null
+++ b/npc/020-1/misc.txt
@@ -0,0 +1,197 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Essential scripts any city must have
+
+// Description:
+// The Travelers travel around the world telling stories.
+020-1,44,67,0 script Knox 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 Tulimshar."), L_Tulim,
+ l("Tell me about Nivalis."), L_Nival,
+ l("Tell me about Frostia."), L_Frost,
+ l("Tell me about Thermin."), L_Therm,
+ 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_Nival:
+ mes "";
+ mesn;
+ mesq l("Nivalis was the last human settlement built during the First Era.");
+ next;
+ mesq l("It's cold, harsh climate makes difficult to live there. It was founded by people thrown away from Tulimshar and Hunrscald for political reasons.");
+ next;
+ mesq l("The cold climate is ideal for slimes, penguins, and other icy creatures. You can find lots of... ice, of course!");
+ next;
+ mesq l("Some items are only produced in Nivalis. After all, it is hard to work properly with ice in a desert!");
+ next;
+ goto L_Menu;
+
+L_Frost:
+ mes "";
+ mesn;
+ mesq l("Frostia is the only city known that was not founded by humans.");
+ next;
+ mesq l("They are strict with who is allowed inside, so you'll need either elf or ukar friends to pass.");
+ next;
+ mesq l("It is on a huge, icy mountain peak. Rumors about dragons and legendary items to be found.");
+ next;
+ mesq l("Some of finest elven craftmanship can be found there, like bows, for example.");
+ next;
+ goto L_Menu;
+
+L_Therm:
+ mes "";
+ mesn;
+ mesq l("Thermin is also known as the lost city. It was once founded to mine ores, and export to everyone.");
+ next;
+ mesq l("I think it was the Orcs and Raijins town. It was laid to waste by Yetis.");
+ next;
+ mesq l("Most Orcs become nomads and Raijins moved to Hurnscald, but they say Thermin might have been rebuilt somewhere else.");
+ next;
+ mesq l("On the ruins you may find free loot... And on the new town, you may find the sturdiest stuff of all.");
+ next;
+ goto L_Menu;
+
+L_Trade:
+ mesn;
+ mesq l("Use your @@ as currency!", getitemlink(StrangeCoin));
+ tutmes l("%s is obtained during events, daily logins, heroic deeds, gifts, etc. But cannot be bought with real money.", getitemlink(StrangeCoin));
+ next;
+ 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, DeepBlackBoots); // Boots
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 22);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 8);
+ npcsit;
+
+ .sex = G_MALE;
+ .distance = 5;
+ end;
+}
+
+// Description:
+// Banker.
+020-2,30,25,0 script Ben#NivBanker NPC_LLOYD,{
+ Banker(.name$, "Nivalis", 10000);
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 5;
+ end;
+}
+
+// Description:
+// Barber.
+020-1,88,76,0 script Camilot NPC_ELVEN_FEMALE_ARMOR_SHOP,{
+ function setRace {
+ clear;
+ setnpcdialogtitle l("Debug - Modify Race");
+ mes l("Race") + ": " + $@allraces$[Class];
+ next;
+ mes l("Please select the desired race.");
+ select("Human:Ukar:Redy:Elf:Orc:Raijin:Tritan");
+ jobchange max(0, @menu-1);
+ return;
+ }
+
+
+ mesn;
+ mesq l("Hi! Do you want a hair cut?");
+
+ do
+ {
+ select
+ l("What is my current hairstyle and hair color?"),
+ l("I'd like to get a different style."),
+ l("Can you do something with my color?"),
+ rif(is_staff(), l("I am a GM, and I want to change my Race!")),
+ l("I'm fine for now, thank you.");
+
+ switch (@menu)
+ {
+ case 1:
+ BarberSayStyle 3;
+ break;
+ case 2:
+ BarberChangeStyle;
+ speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
+ l("Enjoy your new style.");
+ l("Anything else?");
+ break;
+ case 3:
+ BarberChangeColor;
+ speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
+ l("I hope you like this color.");
+ l("Anything else?");
+ break;
+ case 4:
+ setRace;
+ break;
+ case 5:
+ speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
+ l("Feel free to come visit me another time.");
+
+ goodbye;
+ }
+ } while (1);
+ close;
+
+
+OnInit:
+ .sex = G_FEMALE;
+ .distance = 5;
+ end;
+}
+
+// Description:
+// Soul Menhir
+020-1,57,63,0 script Soul Menhir#niv NPC_SOUL_SNOW,{
+ @map$ = "020-1";
+ setarray @Xs, 56, 57, 58, 56, 58, 56, 57, 58;
+ setarray @Ys, 62, 62, 62, 63, 63, 64, 64, 64;
+ @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/020-1/serge.txt b/npc/020-1/serge.txt
new file mode 100644
index 0000000..5414591
--- /dev/null
+++ b/npc/020-1/serge.txt
@@ -0,0 +1,103 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Hunt Fluffies, and Winter Quest, based on Luffyx. Disabled during Christmas.
+//
+// SQuest_Winter
+// SergeQuest;
+
+020-1,77,78,0 script Serge NPC_ELF,{
+ if (season() != WINTER)
+ goto L_OutOfSeason;
+ if ($EVENT$ == "Christmas")
+ goto L_QuestDisabled;
+
+ .@q=getq(SQuest_Winter);
+ mesn;
+ mesq l("Brrrr... I'm freezing! The winter at Nivalis is so harsh!!");
+ if (.@q < 1)
+ goto L_WinterQuest;
+
+L_Main:
+ if (GHQUEST)
+ GHQ_Assign(Fluffy, "Nivalis");
+ close;
+
+L_OutOfSeason:
+ mesn;
+ mesq l("Hmm, Nivalis is a wonderful place to live in! Although it is a tad too cold on Winter...");
+ goto L_Main;
+
+L_QuestDisabled:
+ mesn;
+ mesq l("Merry Christmas!");
+ mesc l("The @@ quest is disabled during Christmas event.", getitemlink(KnitHat));
+ next;
+ goto L_Main;
+
+L_WinterQuest:
+ next;
+ mesn;
+ mesq l("Hey, do you know what is good on this harsh winter? A @@!", getitemlink(KnitHat));
+ next;
+ mesn;
+ mes l("What about you bring me:");
+ mes l("@@/120 @@", countitem(Snowflake), getitemlink(Snowflake));
+ mes l("@@/80 @@", countitem(CaramelCandy), getitemlink(CaramelCandy));
+ mes l("@@/40 @@", countitem(GingerBreadMan), getitemlink(GingerBreadMan));
+ mes l("@@/10 @@", countitem(ChocolateBiscuit), getitemlink(ChocolateBiscuit)); // Found at Chocolate Slime: 4.00%
+ next;
+ select
+ l("Not now, thanks"),
+ l("To be honest, I have that with me!");
+
+ mes "";
+ if (@menu == 1)
+ goto L_Main;
+ if (@menu == 2) {
+ if (
+ countitem(Snowflake) < 120 ||
+ countitem(CaramelCandy) < 80 ||
+ countitem(GingerBreadMan) < 40 ||
+ countitem(ChocolateBiscuit) < 10
+ ) goto L_Lying;
+
+ inventoryplace KnitHat, 1;
+ delitem Snowflake, 120;
+ delitem CaramelCandy, 80;
+ delitem GingerBreadMan, 40;
+ delitem ChocolateBiscuit, 10;
+ getitem KnitHat, 1;
+ getexp BaseLevel*267, JobLevel*80; // Level 30/20 ABSOLUTE CAP
+ setq1 SQuest_Winter, 1;
+ mesn;
+ mesq l("Yay yay! Many thanks! Here, take the reward as promised!");
+ next;
+ mesn;
+ mesq l("We can do this again on next winter!");
+ goto L_Main;
+ }
+
+ close;
+
+L_Lying:
+ mesn;
+ mesq l("Please don't lie to me...");
+ goto L_Main;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADTOP, CommunityShirt);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, JeansChaps);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, DeepBlackBoots);
+ setunitdata(.@npcId, UDT_WEAPON, KnitHat);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 13);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 7);
+
+ .distance=4;
+ .sex=G_MALE;
+ npcsit;
+ end;
+
+}
diff --git a/npc/020-1/siege.txt b/npc/020-1/siege.txt
new file mode 100644
index 0000000..49b7c41
--- /dev/null
+++ b/npc/020-1/siege.txt
@@ -0,0 +1,60 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Nivalis Siege for Liberation Day
+// Each player process its own share of monsters. There are 10 waves.
+//
+// Q_NivalisLibday
+// Day, Score, Temporary Time;
+
+020-1,0,0,0 script #NLib_Siege NPC_HIDDEN,{
+
+OnLoop:
+ @nlib_time+=5; // This is looped every 5 s
+
+ // Victory conditions: All monsters dead & number of waves filled. (Or if you reach level 40)
+ if (BaseLevel >= 30 || (@nlib_wave >= 10 && mobcount("020-1", "#NLib_Siege::OnPetDeath") <= 0))
+ goto L_CleanUp;
+
+ // New wave condition: Waves pending and A- All Mobs Dead B- 4 minutes spent
+ if (@nlib_wave < 10 && (mobcount("020-1", "#NLib_Siege::OnPetDeath") <= 0 || @nlib_time >= 240))
+ goto L_NextRound;
+
+ // reset timer
+ addtimer(5000, "#NLib_Siege::OnLoop");
+ end;
+
+L_NextRound:
+ @nlib_time=0;
+ @nlib_wave = @nlib_wave + 1;
+ // Prepare next round
+ dispbottom l("Wave @@/10", @nlib_wave);
+ .@amount=@nlib_wave+rand(1,2);
+ freeloop(true);
+ for (.@i = 0; .@i < .@amount; ++.@i) {
+ .@monsterId=any(CaveMaggot, WhiteSlime, MagicGoblin, Bandit, GreenSlime,
+ CaveSnake, LavaSlime, DesertBandit, AngryRedScorpion,
+ Scorpion, RedScorpion, BlackSlime, Piousse, CandiedSlime,
+ AzulSlime, BlueSlime, SlimeBlast, RedSlime, AngryScorpion);
+ areamonster "020-1", 20, 20, 100, 100, strmobinfo(1, .@monsterId), .@monsterId, 1, "#NLib_Siege::OnPetDeath";
+ }
+ freeloop(false);
+
+ // reset timer
+ addtimer(5000, "#NLib_Siege::OnLoop");
+ end;
+
+// Warp you back, and give you a random small score.
+L_CleanUp:
+ .@q2=getq2(Q_NivalisLibday);
+ setq2 Q_NivalisLibday, .@q2+rand(1,5);
+ warp "019-2", 43, 55;
+ end;
+
+OnPetDeath:
+ .@lf=mobcount("020-1", "#NLib_Siege::OnPetDeath");
+ dispbottom l("Mobs remaining: @@", .@lf);
+ end;
+
+}
diff --git a/npc/020-1/town.txt b/npc/020-1/town.txt
new file mode 100644
index 0000000..4d957ce
--- /dev/null
+++ b/npc/020-1/town.txt
@@ -0,0 +1,12 @@
+// TMW-2 Script
+// Author:
+// Jesusalva
+// Description:
+// Reset LOCATION$ when entering a town
+
+020-1,71,102,0 script #LocNival NPC_HIDDEN,2,0,{
+OnTouch:
+ EnterTown("Nival");
+ end;
+}
+020-1,106,55,0 duplicate(#LocNival) #LocNivalB NPC_HIDDEN,1,1
diff --git a/npc/020-1/trainer.txt b/npc/020-1/trainer.txt
new file mode 100644
index 0000000..1fb4774
--- /dev/null
+++ b/npc/020-1/trainer.txt
@@ -0,0 +1,167 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Mercenary Trainer
+
+020-1,39,89,0 script Mercenary Trainer NPC_REDY_MALE_SWORD,{
+ mesn;
+ mesq l("Hello, I am a sword to hire, a Mercenary Trainer and Chief.");
+ next;
+ mesn;
+ mesq l("Do you want to hire a mercenary? Or perhaps get a card so you can invoke them later? I can even make them stronger if you wish.");
+ next;
+ goto L_Main;
+
+L_Main:
+ select
+ l("Hire a mercenary"),
+ l("Buy a mercenary card"),
+ l("Evolve mercenaries"),
+ l("Bye.");
+ mes "";
+ switch (@menu) {
+ // Hire Card
+ case 1:
+ menuint
+ l("[%d GP] [Lv 1~25] Hire for one hour", 2500), 1,
+ l("[%d GP] [Lv 26~40] Hire for one hour", 7500), 2,
+ l("[%d GP] [Lv 41~60] Hire for one hour", 15000), 3,
+ l("[%d GP] [Lv 61~79] Hire for one hour", 30000), 4,
+ l("[%d GP] [Lv 80~100] Hire for one hour", 50000), 5,
+ l("I've changed my mind"), 0;
+ switch (@menuret) {
+ case 1:
+ .@gp=max(2000, POL_AdjustPrice(2500));
+ if (Zeny < .@gp) {
+ mesc l("You cannot pay."), 1;
+ next;
+ } else {
+ .@mid=merc_randid(0, 0, 0, 0, 1000);
+ mercenary_create(.@mid, 3600000);
+ POL_PlayerMoney(.@gp);
+ }
+ break;
+ case 2:
+ .@gp=max(7000, POL_AdjustPrice(7500));
+ if (Zeny < .@gp) {
+ mesc l("You cannot pay."), 1;
+ next;
+ } else {
+ .@mid=merc_randid(0, 0, 0, 1000, 0);
+ mercenary_create(.@mid, 3600000);
+ POL_PlayerMoney(.@gp);
+ }
+ break;
+ case 3:
+ .@gp=max(14000, POL_AdjustPrice(15000));
+ if (Zeny < .@gp) {
+ mesc l("You cannot pay."), 1;
+ next;
+ } else {
+ mercenary_create merc_randid(0, 0, 1000, 0, 0), 3600000;
+ POL_PlayerMoney(.@gp);
+ }
+ break;
+ case 4:
+ .@gp=max(27000, POL_AdjustPrice(30000));
+ if (Zeny < .@gp) {
+ mesc l("You cannot pay."), 1;
+ next;
+ } else {
+ mercenary_create merc_randid(0, 1000, 0, 0, 0), 3600000;
+ POL_PlayerMoney(.@gp);
+ }
+ break;
+ case 5:
+ .@gp=max(45000, POL_AdjustPrice(50000));
+ if (Zeny < .@gp) {
+ mesc l("You cannot pay."), 1;
+ next;
+ } else {
+ mercenary_create merc_randid(1000, 0, 0, 0, 0), 3600000;
+ POL_PlayerMoney(.@gp);
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ // Buy Card
+ case 2:
+ npcshopattach(.name$);
+ openshop;
+ closedialog;
+ close;
+ break;
+ // Evolve Card
+ case 3:
+ mesn;
+ mesq l("Give me %s cards of the same type, and I'll give you one card of a higher rarity. There is no cost, but the card is random.", b(l("three")));
+ next;
+ mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
+
+ .@card = requestitem();
+ if (.@card <= 1) break;
+ if (countitem(.@card) < 3) {
+ mesc l("You need at least %d cards of same kind.", 3), 1;
+ break;
+ }
+ .@st = merc_getstar(.@card);
+ if (.@st < 1 || .@st >= 5) {
+ mesc l("This cannot be evolved."), 1;
+ break;
+ }
+ delitem .@card, 3;
+ merc_boxset(
+ (.@st == 4 ? 1000 : 0),
+ (.@st == 3 ? 1000 : 0),
+ (.@st == 2 ? 1000 : 0),
+ (.@st == 1 ? 1000 : 0),
+ 0);
+ mesn;
+ mesq l("Here you go! Wasn't this a sweet deal?");
+ break;
+ // Leave
+ default:
+ closeclientdialog;
+ goodbye;
+ close;
+ break;
+ }
+ goto L_Main;
+
+OnInit:
+ tradertype(NST_MARKET);
+ sellitem MercBoxEE, 25000, 1;
+ sellitem MercBoxDD, 15000, 2;
+ sellitem MercBoxCC, 7500, 3;
+ sellitem MercBoxBB, 3750, 4;
+ sellitem MercBoxAA, 1250, 5;
+
+ .distance=5;
+ .sex=G_MALE;
+ end;
+
+OnClock0001:
+OnClock1201:
+ restoreshopitem MercBoxEE, 25000, 1;
+ restoreshopitem MercBoxDD, 15000, 2;
+ restoreshopitem MercBoxCC, 7500, 3;
+ restoreshopitem MercBoxBB, 3750, 4;
+ restoreshopitem MercBoxAA, 1250, 5;
+ end;
+
+// Pay your taxes!
+OnBuyItem:
+ debugmes("Purchase confirmed");
+ PurchaseTaxes("Nival");
+ end;
+
+OnSellItem:
+ debugmes("Sale confirmed");
+ PurchaseTaxes("Nival");
+ end;
+
+}
+
diff --git a/npc/020-1/wateranimation.txt b/npc/020-1/wateranimation.txt
new file mode 100644
index 0000000..9876cf6
--- /dev/null
+++ b/npc/020-1/wateranimation.txt
@@ -0,0 +1,24 @@
+// TMW2 scripts.
+// Author:
+// Saulc
+// Jesusalva
+// Description:
+// Water animations, splash, fishes, etc...
+
+020-1,82,73,0 script #fishing_nivalis0 NPC_WATER_SPLASH,{
+
+ fishing(1, CommonCarp,
+ IceCube, GrassCarp); // begin or continue fishing
+ close;
+
+OnInit:
+ .sex = G_OTHER;
+ .distance = 4;
+ end;
+}
+
+020-1,87,73,0 duplicate(#fishing_nivalis0) #fishing_nivalis1 NPC_WATER_SPLASH
+020-1,31,52,0 duplicate(#fishing_nivalis0) #fishing_nivalis2 NPC_WATER_SPLASH
+020-1,30,63,0 duplicate(#fishing_nivalis0) #fishing_nivalis3 NPC_WATER_SPLASH
+020-1,64,127,0 duplicate(#fishing_nivalis0) #fishing_nivalis4 NPC_WATER_SPLASH
+
diff --git a/npc/020-1/well.txt b/npc/020-1/well.txt
new file mode 100644
index 0000000..94265f0
--- /dev/null
+++ b/npc/020-1/well.txt
@@ -0,0 +1,14 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Annoy players
+
+020-1,99,83,0 script #NivalisWell NPC_NO_SPRITE,{
+ npctalkonce l("This well is sealed. They must take water outside the town.");
+ end;
+
+OnInit:
+ .distance=3;
+ end;
+}