summaryrefslogtreecommitdiff
path: root/npc/020-4
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-4
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-4')
-rw-r--r--npc/020-4/_import.txt6
-rw-r--r--npc/020-4/_warps.txt3
-rw-r--r--npc/020-4/baktar.txt183
-rw-r--r--npc/020-4/gambler.txt153
-rw-r--r--npc/020-4/henry.txt159
5 files changed, 504 insertions, 0 deletions
diff --git a/npc/020-4/_import.txt b/npc/020-4/_import.txt
new file mode 100644
index 0000000..aef7c44
--- /dev/null
+++ b/npc/020-4/_import.txt
@@ -0,0 +1,6 @@
+// Map 020-4: Nivalis Indoors
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/020-4/_warps.txt",
+"npc/020-4/baktar.txt",
+"npc/020-4/gambler.txt",
+"npc/020-4/henry.txt",
diff --git a/npc/020-4/_warps.txt b/npc/020-4/_warps.txt
new file mode 100644
index 0000000..b0326b0
--- /dev/null
+++ b/npc/020-4/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 020-4: Nivalis Indoors warps
+020-4,64,54,0 warp #020-4_64_54 2,0,020-1,64,83
diff --git a/npc/020-4/baktar.txt b/npc/020-4/baktar.txt
new file mode 100644
index 0000000..4472c53
--- /dev/null
+++ b/npc/020-4/baktar.txt
@@ -0,0 +1,183 @@
+// TMW2 Script.
+// Author:
+// Jesusalva
+// Description:
+// Baktar
+// Quests:
+// NivalisQuest_Baktar
+// .@q1 = Controls Braknar Shield
+// (0= Not met, 1= Khafar, 2= Baktar, 3= Complete)
+// .@q2 = bitmask with Tulimshar items given
+
+020-4,64,39,6 script Baktar NPC_RAIJIN,{
+ .@q=getq(NivalisQuest_Baktar);
+ if (!.@q)
+ goto L_Start;
+ if (.@q == 2)
+ goto L_Braknar;
+ goto L_Collector;
+
+L_Start:
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("Hello, did you come from Tulimshar? Because you have a nice tan.");
+ next;
+ select
+ l("Yes, I'm coming from Tulimshar."),
+ l("Well, I just like sunbathing."),
+ l("Good bye.");
+ mes "";
+ switch (@menu) {
+ case 2:
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("Bah! Don't try to fool me! The sun can't burn in Nivalis.");
+ // Don't stop now
+ case 3:
+ if (rand2(1,5) == 4)
+ mesc l("*cough cough*");
+ close;
+ break;
+ }
+
+ setq NivalisQuest_Baktar, 1, 0;
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("All my parents, grandparents, until the world was born, are from Tulimshar.");
+ next;
+ mesn;
+ mesc l("*cough cough*");
+ mesq l("Thus, I like to collect small memetos from Tulimshar.");
+ next;
+ mesn;
+ mesq l("The doctor told me to move here after I got tuberculosis... But I like Tulimshar so much! Please bring me Tulimshar souvenirs, I'll pay you well!");
+ close;
+
+
+L_Collector:
+ .@q2=getq2(NivalisQuest_Baktar);
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("Did you brought me an souvenir from Tulimshar?");
+ mes "";
+ mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
+
+ .@id = requestitem();
+
+ if (.@id < 1) close;
+ if (countitem(.@id) < 1 || checkbound(.@id))
+ close;
+
+ // Special exception
+ if (.@id == Croconut || .@id == HalfCroconut) {
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("Ooh, this definitely is a Tulimshar item! But I would prefer a box full of these, please.");
+ close;
+ }
+
+ // No item
+ .@m = htget(.TULIMITEM, str(.@id), 0);
+ if (!.@m) {
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("What crap is that?! This is not from Tulimshar!");
+ next;
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("I won't accept stuff from Halinarzo!");
+ mesc l("Baktar can be picky with Tulimshar stuff, too.");
+ close;
+ }
+ // Already given
+ if (.@q2 & .@m) {
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("I already have that...");
+ close;
+ }
+
+ // Gives 4.5× more
+ .@sp=getiteminfo(.@id, ITEMINFO_SELLPRICE);
+ mesc l("Really give your @@ to Baktar?", getitemlink(.@id)), 1;
+ mesc l("The item will be lost forever.");
+ next;
+ if (askyesno() == ASK_YES) {
+ delitem .@id, 1;
+ Zeny+=(.@sp*45/10);
+ getexp (BaseLevel/4)*.@sp, .@sp;
+ setq2 NivalisQuest_Baktar, .@q2|.@m;
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("Thanks.");
+ }
+
+ close;
+
+L_Braknar:
+ .@q2=getq2(NivalisQuest_Baktar);
+ mesn;
+ if (rand2(1,5) == 4)
+ mesc l("*cough cough*");
+ mesq l("Welcome back.");
+ select
+ l("I brought a souvenir for you."),
+ l("Do you know someone called Braknar?"),
+ l("Er, uhm, hi!");
+ mes "";
+ switch (@menu) {
+ case 1: goto L_Collector;
+ case 2:
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("Yeah, it was my grand-grand-grandfather.");
+ next;
+ mesn strcharinfo(0);
+ mes l("'-' \"Could you give me his shield? Pretty please? I need it to survive and bring Tulimshar goodies!\"");
+ next;
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ mesq l("No, it is a family heirloom. But I do have the shield blueprints. A skilled craftsman could forge one.");
+ next;
+ mesn strcharinfo(0);
+ mes l("*-* \"Could you share those blueprints with me? Please?\"");
+ next;
+ mesn;
+ if (rand2(1,5) == 4) mesc l("*cough cough*");
+ if (bitmask_count(.@q2) < 2) {
+ mesq l("Why should I? Go away. %%n");
+ close;
+ }
+ mesq l("Sure. Here, take it.");
+ setq1 NivalisQuest_Baktar, 3;
+ RECIPES_EQUIPMENT[CraftBraknarShield]=true;
+ break;
+ case 3: close;
+ }
+ close;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADTOP, KnitHat);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, LeatherShirt);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, CottonShorts);
+ setunitdata(.@npcId, UDT_WEAPON, LousyMoccasins);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 24);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 1);
+
+ .sex = G_MALE;
+ .distance = 5;
+ npcsit;
+
+ // Constants
+ .TULIMITEM = htnew;
+ htput(.TULIMITEM, str(DesertHat), 1);
+ htput(.TULIMITEM, str(SerfHat), 2);
+ htput(.TULIMITEM, str(IronShovel), 4);
+ htput(.TULIMITEM, str(SilkRobe), 8);
+ htput(.TULIMITEM, str(FishBox), 16);
+ htput(.TULIMITEM, str(CroconutBox), 32);
+ htput(.TULIMITEM, str(PlushroomBox), 64);
+ end;
+}
+
diff --git a/npc/020-4/gambler.txt b/npc/020-4/gambler.txt
new file mode 100644
index 0000000..1384aa5
--- /dev/null
+++ b/npc/020-4/gambler.txt
@@ -0,0 +1,153 @@
+// TMW2 Scripts
+// Author:
+// Jesusalva
+// Description:
+// Gambler: Will next card be better or worse?
+// $XAN_BETS: How many victories all players already had (for propaganda :3)
+
+020-4,69,35,0 script Gambler#020-4 NPC_FLOPPED_NOBLEMAN,{
+ function cardname{
+ switch (getarg(0)) {
+ case 0:
+ return "A"; break;
+ case 10:
+ return "J"; break;
+ case 11:
+ return "Q"; break;
+ case 12:
+ return "K"; break;
+ case 13:
+ return l("Joker"); break;
+ default:
+ return getarg(0)+1;
+ }
+ }
+
+ goto L_Menu;
+
+L_Menu:
+ showavatar;
+ mesn;
+ mesc l("Hey, I am flopped. Do you want to gamble?");
+ mesc l("You need a @@. I'll flip one card, and you'll need to decide if next draw will be HIGHER or LOWER.", getitemlink(CasinoCoins));
+ mesc l("If a tie happens, I'll give your coin back.");
+ next;
+ menu
+ rif(countitem(CasinoCoins) >= 1, l("Let's play!")), L_Spin,
+ l("Information"), L_Info,
+ l("Leave"), L_Quit;
+
+L_Info:
+ mes "";
+ mesc l("Rules:");
+ mesc l("A card will be flipped, you'll need to decide if next flip will be HIGHER or LOWER.");
+ mesc l("Cards are ranked on this priority: A - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - J - Q - K - Joker");
+ next;
+ mesc l("Prizes:");
+ mesc l("If you're right, you'll get at least 80 GP!");
+ mesc l("You'll also get half of the GP as Monster Points!");
+ mesc l("If a tie happens, you'll get your coin back.");
+ mesc l("If you're wrong, your winning streak is reset.");
+ mesc l("Winning Streak is also reset on logout or when you leave the Inn.");
+ next;
+ mesc l("Winning Strike Prizes:");
+ mesc l("Every seven successive right guesses, you'll get a %s!", getitemlink(BronzeGift)); // 7.14%
+ mesc l("Every fifteen successive right guesses, you'll get a @@!", getitemlink(SilverGift)); // 3.33%
+ mesc l("Every fifty successive right guesses, you'll get a @@!", getitemlink(GoldenGift)); // 1.00%
+ mesc l("Every 101 successive right guesses, you'll get a @@!", getitemlink(PrismGift)); // 0.50%
+ next;
+ goto L_Menu;
+
+
+L_Spin:
+ showavatar AVATAR_CARD_COVER;
+ mesc l("I'll draw a card now!");
+ next;
+ delitem CasinoCoins, 1;
+ // First card will never be an edge card (Ace or Joker), so you can ALWAYS guess wrong.
+ .@card1=rand(1, 12);
+ showavatar 1000+.@card1;
+ mesn;
+ mesc l("It's a @@!", cardname(.@card1));
+ mesc l("Will next draw be HIGHER or LOWER?!");
+ next;
+ mesc l("Cards are ranked on this priority: A - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - J - Q - K - Joker");
+ select
+ l("HIGHER!"),
+ l("LOWER!");
+ mes "";
+
+ // Flip Flop!
+ .@card2=rand(0, 13);
+ showavatar 1000+.@card2;
+ mesn;
+ mesc l("It's a @@!", cardname(.@card2));
+
+ if (.@card1 == .@card2) {
+ mesc l("It's a tie!");
+ getitem CasinoCoins, 1;
+ .@bypass=1;
+ } else if (.@card2 < .@card1 && @menu == 2) {
+ mesc l("It's lower! That's right!");
+ Zeny=Zeny+80;
+ @gambler_winstreak=@gambler_winstreak+1;
+ } else if (.@card2 > .@card1 && @menu == 1) {
+ mesc l("It's higher! That's right!");
+ Zeny=Zeny+80;
+ @gambler_winstreak=@gambler_winstreak+1;
+ } else {
+ mesc l("You were wrong!");
+ @gambler_winstreak=0;
+ }
+
+ // Winning Streak
+ if (!.@bypass && @gambler_winstreak) {
+ if (@gambler_winstreak % 7 == 0)
+ getitem BronzeGift, 1;
+ if (@gambler_winstreak % 15 == 0)
+ getitem SilverGift, 1;
+ if (@gambler_winstreak % 50 == 0)
+ getitem GoldenGift, 1;
+ if (@gambler_winstreak % 101 == 0)
+ getitem PrismGift, 1;
+ mesc l("Your current win streak is @@!", @gambler_winstreak);
+ $XAN_BETS=$XAN_BETS+1;
+ Zeny+=min((@gambler_winstreak*2), 40);
+ Mobpt+=40+min(@gambler_winstreak, 20);
+ } else {
+ .@bypass=0;
+ }
+ next;
+ goto L_Menu;
+
+L_Quit:
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 4;
+ end;
+
+}
+
+
+// Random NPC
+020-4,70,36,4 script Gambling Xan NPC_PLAYER,{
+ mesn;
+ mesq l("Argh... I can never get it right! If only he drew an Ace or a Joker on the first draw... But he never does that!");
+ next;
+ mesn;
+ mesq l("That rat... I already spent @@ @@ with him!!", $XAN_BETS, getitemlink(CasinoCoins));
+ mes l("If I weren't tempted to try again everytime someone gets it right...");
+ close;
+
+OnInit:
+ .@npcId = getnpcid(.name$);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, CreasedShirt);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, JeansShorts);
+
+ .sex = G_MALE;
+ .distance = 4;
+ npcsit;
+ end;
+}
diff --git a/npc/020-4/henry.txt b/npc/020-4/henry.txt
new file mode 100644
index 0000000..a88a12a
--- /dev/null
+++ b/npc/020-4/henry.txt
@@ -0,0 +1,159 @@
+// TMW2 Script.
+// Author:
+// Jesusalva
+// Description:
+// Questmaker Handbook 14.0
+
+020-4,24,38,0 script Henry NPC_HENRY,{
+ function newQuest;
+ function checkQuest;
+
+ // The EPISODE
+ if (getq(LoFQuest_EPISODE) == 8 &&
+ countitem(DeathPotion)) {
+ mesc l("Should we give this shady looking 'fella a %s?", getitemlink(DeathPotion));
+ select
+ l("No, who knows what they might do with it!"),
+ l("Sure, what could go wrong?");
+ mes "";
+ if (@menu != 2) {
+ clear;
+ mesc l("*whistles*");
+ } else {
+ mesn strcharinfo(0);
+ mesq l("The Shadow Tortuga won the race against the Panthom Lord.");
+ next;
+ mesn;
+ mesq l("Oooh, I see, I see! So you're working with ##Bthem##b... This is most appreciated.");
+ next;
+ mesn;
+ mesq l("So, you have fulfilled this part of the misssion. Bring %d %s and a %s to Pachua in the Desert Canyon, and say the same thing to him so he knows you're with us.", 10, getitemlink(Honey), getitemlink(ElixirOfLife));
+ next;
+ mesn;
+ mesq l("Once you done so, come back and report the new passcode... Then I'll disclose to you the real mission.");
+ delitem DeathPotion, 1;
+ getexp 35000, 0;
+ setq LoFQuest_EPISODE, 9, 0;
+ close;
+ }
+ }
+ // Also part of The EPISODE
+ if (getq(LoFQuest_EPISODE) == 10) {
+ mesn strcharinfo(0);
+ mesq l("The crow took off to his last flight.");
+ next;
+ mesn;
+ mesq "...";
+ next;
+ if (BaseLevel < 55) {
+ mesn;
+ mesq l("Alright. Now to give your quest. But not now, you're still weak. Come back later, will you.");
+ close; // Next quest is Level 70 so.
+ } else {
+ mesn;
+ mesq l("West of here, north of here, is a cabin. Investigate. That's all.");
+ next;
+ mesn;
+ mesq l("...Oh, right! We locked it. Uhm, we'll open it for you. Be careful.");
+ setq LoFQuest_EPISODE, 11;
+ close;
+ }
+ }
+ // Also part of The EPISODE
+ if (getq(LoFQuest_EPISODE) == 12) {
+ if (BaseLevel < 57) {
+ mesn;
+ mesq l("Before you give me your report, acquire level %d.", 57);
+ close; // Next quest is Level 70 so.
+ } else {
+ mesn;
+ mesq l("Hm, thanks for your report. This is most useful. Here, drink this.");
+ next;
+ mesc l("You start feeling dizzy.");
+ mesn;
+ mesq l("%s? You don't look so well. You should see a doctor immediately!", strcharinfo(0));
+ setq LoFQuest_EPISODE, 13, 0, 0;
+ SC_Bonus(86400, SC_POISON, 1);
+ close;
+ }
+ }
+
+ // Level requeriment
+ if (BaseLevel < 70) {
+ npctalk3 l("*whistles*");
+ close;
+ }
+
+ // Main Quest
+ .@q=getq(NivalisQuest_Henry);
+ switch (.@q) {
+ case 0:
+ newQuest(); break;
+ case 1:
+ checkQuest(); break;
+ default:
+ npctalk3 l("*whistles*");
+ }
+ close;
+
+function newQuest {
+ mesn;
+ mesq l("Hey, psst! Come over here!");
+ next;
+ mesn;
+ mesq l("I need a favor! For certain... reasons... I ran out of poison! And For certain... reasons... I am in dire need of them!");
+ next;
+ mesn;
+ mesq l("So if you bring me %d %s, I'll pay you awesomely! Whaddaya say?!", 24, getitemlink(NymphPoison));
+ next;
+ select
+ l("Sure, I'll be right back."),
+ l("Erm, for certain... reasons... I cannot help you right now!");
+ mes "";
+ if (@menu == 2) {
+ closeclientdialog;
+ return;
+ }
+ mesn;
+ mesq l("Thanks, I knew I could count on you!");
+ setq NivalisQuest_Henry, 1;
+ return;
+}
+
+function checkQuest {
+ mesn;
+ mesq l("Did you brought me the %d/%d %s?", countitem(NymphPoison), 24, getitemlink(NymphPoison));
+ select
+ l("Yes, here!"),
+ l("Sorry, I'll be back.");
+ mes "";
+ if (@menu == 2) {
+ closeclientdialog;
+ return;
+ }
+ if (countitem(NymphPoison) < 24) {
+ mesn;
+ mesq l("Ooh, many thanks! Lemme just grab something for you...");
+ next;
+ mesc l("%s stabs you to the chest!", l("Henry")), 1;
+ mesn;
+ mesq l("Foolish kid, thinking they can fool me, Henry S., from all the people...!");
+ die();
+ return;
+ }
+ delitem NymphPoison, 24;
+ Mobpt+=10000;
+ getexp 100000, 0;
+ setq NivalisQuest_Henry, 2;
+ mesn;
+ mesq l("Hehehe... Thanks. Here, take these %s Monster Points... This exchange has never happened.", fnum(10000));
+ return;
+}
+
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 5;
+ end;
+}
+