summaryrefslogtreecommitdiff
path: root/world/map
diff options
context:
space:
mode:
authorwushin <pasekei@gmail.com>2014-04-11 12:09:39 -0500
committerwushin <pasekei@gmail.com>2014-04-15 20:26:23 -0500
commit7632f53fd6f0c2accf45983d2885ef596d4bee7e (patch)
tree0e3aaa7c032d15257e82ba2945f7c3b0d0b17b10 /world/map
parent0073a8a833ca6970b678f7d48af154429cc547ae (diff)
downloadclassic-serverdata-7632f53fd6f0c2accf45983d2885ef596d4bee7e.tar.gz
classic-serverdata-7632f53fd6f0c2accf45983d2885ef596d4bee7e.tar.bz2
classic-serverdata-7632f53fd6f0c2accf45983d2885ef596d4bee7e.tar.xz
classic-serverdata-7632f53fd6f0c2accf45983d2885ef596d4bee7e.zip
New Core Function
Travelers to warp about Checks being moved into functions Warp Towel Behavior changed
Diffstat (limited to 'world/map')
-rw-r--r--world/map/db/item_db.txt22
-rw-r--r--world/map/npc/001-1/traveler.txt11
-rw-r--r--world/map/npc/002-2/traveler.txt11
-rw-r--r--world/map/npc/003-1/stranger.txt316
-rw-r--r--world/map/npc/005-1/traveler.txt11
-rw-r--r--world/map/npc/006-1/traveler.txt11
-rw-r--r--world/map/npc/008-1/diryn.txt125
-rw-r--r--world/map/npc/012-3/traveler.txt11
-rw-r--r--world/map/npc/013-1/traveler.txt7
-rw-r--r--world/map/npc/013-2/notes.txt95
-rw-r--r--world/map/npc/020-1/traveler.txt7
-rw-r--r--world/map/npc/027-1/traveler.txt11
-rw-r--r--world/map/npc/029-1/traveler.txt11
-rw-r--r--world/map/npc/033-1/traveler.txt11
-rw-r--r--world/map/npc/044-1/traveler.txt11
-rw-r--r--world/map/npc/048-2/traveler.txt11
-rw-r--r--world/map/npc/055-1/traveler.txt11
-rw-r--r--world/map/npc/functions/default_npc_checks.txt125
-rw-r--r--world/map/npc/functions/soul_menhir.txt8
-rw-r--r--world/map/npc/functions/travelers.txt279
-rw-r--r--world/map/npc/items/warpTowels.txt490
-rw-r--r--world/map/npc/scripts.conf3
22 files changed, 923 insertions, 675 deletions
diff --git a/world/map/db/item_db.txt b/world/map/db/item_db.txt
index dd68a5aa..364ffb8e 100644
--- a/world/map/db/item_db.txt
+++ b/world/map/db/item_db.txt
@@ -322,17 +322,17 @@
806, ReedBundle, Reed Bundle, 3, 20, 10, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
807, GrassSeed, Grass Seed, 3, 20, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-808, HitchhikersTowel, Hitchhiker's Towel, 3, 1000, 500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-809, WhiteHitchhikersTowel, White Hitchhiker's Towe, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useWhiteWarpTowel";}, {}
-810, RedHitchhikersTowel, Red Hitchhiker's Towel, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useRedWarpTowel";}, {}
-811, GreenHitchhikersTowel, Green Hitchhiker's Towe, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useGreenWarpTowel";}, {}
-812, BlueHitchhikersTowel, Blue Hitchhiker's Towel, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useBlueWarpTowel";}, {}
-813, YellowHitchhikersTowel, Yellow Hitchhiker's Tow, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useYellowWarpTowel";}, {}
-814, PurpleHitchhikersTowel, Purple Hitchhiker's Tow, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "usePurpleWarpTowel";}, {}
-815, OrangeHitchhikersTowel, Orange Hitchhiker's Tow, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useOrangeWarpTowel";}, {}
-816, PinkHitchhikersTowel, Pink Hitchhiker's Towel, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "usePinkWarpTowel";}, {}
-817, TealHitchhikersTowel, Teal Hitchhiker's Towel, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useTealWarpTowel";}, {}
-818, LimeHitchhikersTowel, Lime Hitchhiker's Towel, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useLimeWarpTowel";}, {}
+808, HitchhikersTowel, Hitchhiker's Towel, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "HitchhikersTowel"; callfunc "WarpTowel";}, {}
+809, WhiteHitchhikersTowel, White Hitchhiker's Towe, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "WhiteHitchhikersTowel"; callfunc "WarpTowel";}, {}
+810, RedHitchhikersTowel, Red Hitchhiker's Towel, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "RedHitchhikersTowel"; callfunc "WarpTowel";}, {}
+811, GreenHitchhikersTowel, Green Hitchhiker's Towe, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "GreenHitchhikersTowel"; callfunc "WarpTowel";}, {}
+812, BlueHitchhikersTowel, Blue Hitchhiker's Towel, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "BlueHitchhikersTowel"; callfunc "WarpTowel";}, {}
+813, YellowHitchhikersTowel, Yellow Hitchhiker's Tow, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "YellowHitchhikersTowel"; callfunc "WarpTowel";}, {}
+814, PurpleHitchhikersTowel, Purple Hitchhiker's Tow, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "PurpleHitchhikersTowel"; callfunc "WarpTowel";}, {}
+815, OrangeHitchhikersTowel, Orange Hitchhiker's Tow, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "OrangeHitchhikersTowel"; callfunc "WarpTowel";}, {}
+816, PinkHitchhikersTowel, Pink Hitchhiker's Towel, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "PinkHitchhikersTowel"; callfunc "WarpTowel";}, {}
+817, TealHitchhikersTowel, Teal Hitchhiker's Towel, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "TealHitchhikersTowel"; callfunc "WarpTowel";}, {}
+818, LimeHitchhikersTowel, Lime Hitchhiker's Towel, 0, 10, 1, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "LimeHitchhikersTowel"; callfunc "WarpTowel";}, {}
819, DiamondPowder, Diamond Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
820, RubyPowder, Ruby Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
821, EmeraldPowder, Emerald Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
diff --git a/world/map/npc/001-1/traveler.txt b/world/map/npc/001-1/traveler.txt
new file mode 100644
index 00000000..20cc0916
--- /dev/null
+++ b/world/map/npc/001-1/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+001-1.gat,39,67,0|script|Nina the Traveler|103,
+{
+ set @NpcName$, "Nina";
+ set @NpcTravelBit, $@tulimshar_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/002-2/traveler.txt b/world/map/npc/002-2/traveler.txt
new file mode 100644
index 00000000..609d8cee
--- /dev/null
+++ b/world/map/npc/002-2/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+002-2.gat,25,28,0|script|Jena the Traveler|103,
+{
+ set @NpcName$, "Jena";
+ set @NpcTravelBit, $@tul_mine_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/003-1/stranger.txt b/world/map/npc/003-1/stranger.txt
index e264743b..cc1114ff 100644
--- a/world/map/npc/003-1/stranger.txt
+++ b/world/map/npc/003-1/stranger.txt
@@ -1,17 +1,12 @@
003-1.gat,35,25,0|script|Stranger|192,
{
- set @month, 5;
- set @start_day, 18;
- set @end_day, 25;
set @IRONINGOT, 5;
set @PINKANTENNA, 21;
- set @EXP, 20000;
+ set @Exp, 20000;
+ setarray @towelReq$, "WhiteHitchhikersTowel","RedHitchhikersTowel","GreenHitchhikersTowel","BlueHitchhikersTowel","YellowHitchhikersTowel","PurpleHitchhikersTowel","OrangeHitchhikersTowel","PinkHitchhikersTowel","TealHitchhikersTowel","LimeHitchhikersTowel","HitchhikersTowel";
if (FLAGS & FLAG_TOWEL_COMPLETED) goto L_Event_Done;
- if (gettime(6) != @month) goto L_No_Event;
- if (gettime(5) < @start_day) goto L_No_Event;
- if (gettime(5) > @end_day) goto L_No_Event;
- if ((gettimetick(2)-TUT_var < 6*7*86400) || (BaseLevel < 42 )) //player must be created at least 6 weeks ago and at least level 42
+ if ((gettimetick(2)-TUT_var < 6*7*86400) || (BaseLevel < 42)) //player must be created at least 6 weeks ago and at least level 42
goto L_No_Event;
if (FLAGS & FLAG_TOWEL_HELPED) goto L_Towel;
@@ -32,7 +27,7 @@ L_Items:
if (countitem("PinkAntenna") < @PINKANTENNA) goto L_No_Item;
delitem "IronIngot", @IRONINGOT;
delitem "PinkAntenna", @PINKANTENNA;
- getexp @EXP, 0;
+ getexp @Exp, 0;
set FLAGS, FLAGS | FLAG_TOWEL_HELPED;
mes "[Stranger]";
@@ -231,7 +226,6 @@ L_Right_Answer_Hard:
mes "\"There you are! A towel is really the most important item for a hitchhiker to have.\"";
next;
mes "\"Please take this.\""; // no full inventory check, this is done before the game
- getitem "HitchhikersTowel", 1;
set FLAGS, FLAGS | FLAG_TOWEL_COMPLETED;
next;
goto L_Explain;
@@ -254,7 +248,7 @@ L_No_Event:
mes "\"And it really comes in handy that I have my towel with me. A towel is about the most massively useful thing an inte- ahm, a person can have.\"";
next;
mes "\"You can read more about that in my favourite book, 'The Hitchhiker's Guide to the Galaxy'.\"";
- if (countitem("HitchhikersTowel") > 0)
+ if (FLAGS & FLAG_TOWEL_COMPLETED)
menu
"Thanks for the advice.",L_Close,
"I have my towel with me too.",L_Dye;
@@ -270,7 +264,7 @@ L_Dye:
next;
menu
"Oh? Can you explain about it?",L_Explain,
- "I know. Could you dye it for me?",L_Dye_Towel,
+ "I know. Could you dye it for me?",L_StartDyeTowel,
"It's great, isn't it? I have to go now.",L_Close;
L_No_Item:
@@ -289,10 +283,10 @@ L_Event_Done:
next;
mes "\"Shall I dye your towel?\"";
menu
- "That would be great!",L_Dye_Towel,
+ "That would be great!", L_StartDyeTowel,
"No, thanks.", L_Close;
-L_Dye_Towel:
+L_StartDyeTowel:
mes "[Stranger]";
mes "\"Alright, which color do you want?\"";
// the other colors should be added when more places are released
@@ -300,207 +294,135 @@ L_Dye_Towel:
"Red",L_Red,
"Yellow",L_Yellow,
"White",L_White,
-// "Blue",L_Blue,
-// "Green",L_Green,
-// "Purple",L_Purple,
+ "Blue",L_Blue,
+ "Green",L_Green,
+ "Purple",L_Purple,
"Orange",L_Orange,
"Pink",L_Pink,
-// "Lime",L_Lime,
-// "Teal",L_Teal,
+ "Lime",L_Lime,
+ "Teal",L_Teal,
"I changed my mind.", L_Close;
-L_Red:
- mes "[Stranger]";
- mes "\"Ok, I'll need two bags of Ruby Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("RubyPowder") < 2) goto L_No_Powder;
- delitem "RubyPowder", 2;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "RedHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+L_White:
+ // Koga
+ set @warpTowelName$, "WhiteHitchhikersTowel";
+ setarray @towelPowder$, "DiamondPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
-L_Yellow:
- mes "[Stranger]";
- mes "\"Ok, I'll need two bags of Topaz Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("TopazPowder") < 2) goto L_No_Powder;
- delitem "TopazPowder", 2;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "YellowHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+L_Red:
+ // Barbarians
+ set @warpTowelName$, "RedHitchhikersTowel";
+ setarray @towelPowder$, "RubyPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
-L_White:
- mes "[Stranger]";
- mes "\"Ok, I'll need two bags of Diamond Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("DiamondPowder") < 2) goto L_No_Powder;
- delitem "DiamondPowder", 2;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "WhiteHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+L_Green:
+ // Candor
+ set @warpTowelName$, "GreenHitchhikersTowel";
+ setarray @towelPowder$, "EmeraldPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
L_Blue:
- mes "[Stranger]";
- mes "\"Ok, I'll need two bags of Sapphire Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("SapphirePowder") < 2) goto L_No_Powder;
- delitem "SapphirePowder", 2;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "BlueHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+ // Blue Sages
+ set @warpTowelName$, "BlueHitchhikersTowel";
+ setarray @towelPowder$, "SapphirePowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
-L_Green:
- mes "[Stranger]";
- mes "\"Ok, I'll need two bags of Emerald Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("EmeraldPowder") < 2) goto L_No_Powder;
- delitem "EmeraldPowder", 2;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "GreenHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+L_Yellow:
+ // Tulimshar Mines
+ set @warpTowelName$, "YellowHitchhikersTowel";
+ setarray @towelPowder$, "TopazPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
L_Purple:
- mes "[Stranger]";
- mes "\"Ok, I'll need two bags of Amethyst Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("AmethystPowder") < 2) goto L_No_Powder;
- delitem "AmethystPowder", 2;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "PurpleHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+ // Dimonds Inn
+ set @warpTowelName$, "PurpleHitchhikersTowel";
+ setarray @towelPowder$, "AmethystPowder";
+ setarray @towelPowderCnt, 2;
+ goto L_DyeChecks;
L_Orange:
- mes "[Stranger]";
- mes "\"Ok, I'll need one bag of Ruby Powder, one bag of Topaz Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("RubyPowder") < 1) goto L_No_Powder;
- if (countitem("TopazPowder") < 1) goto L_No_Powder;
- delitem "RubyPowder", 1;
- delitem "TopazPowder", 1;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "OrangeHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+ // Graveyard
+ set @warpTowelName$, "OrangeHitchhikersTowel";
+ setarray @towelPowder$, "RubyPowder", "TopazPowder";
+ setarray @towelPowderCnt, 1, 1;
+ goto L_DyeChecks;
L_Pink:
- mes "[Stranger]";
- mes "\"Ok, I'll need one bag of Ruby Powder, one bag of Diamond Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("RubyPowder") < 1) goto L_No_Powder;
- if (countitem("DiamondPowder") < 1) goto L_No_Powder;
- delitem "RubyPowder", 1;
- delitem "DiamondPowder", 1;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "PinkHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+ // Terranite Cave
+ set @warpTowelName$, "PinkHitchhikersTowel";
+ setarray @towelPowder$, "RubyPowder", "DiamondPowder";
+ setarray @towelPowderCnt, 1, 1;
+ goto L_DyeChecks;
+
+L_Teal:
+ // Mana Seed
+ set @warpTowelName$, "TealHitchhikersTowel";
+ setarray @towelPowder$, "EmeraldPowder", "SapphirePowder";
+ setarray @towelPowderCnt, 1, 1;
+ goto L_DyeChecks;
L_Lime:
- mes "[Stranger]";
- mes "\"Ok, I'll need one bag of Emerald Powder, one bag of Topaz Powder and a bottle of water for that.\"";
- next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
- getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
- if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("EmeraldPowder") < 1) goto L_No_Powder;
- if (countitem("TopazPowder") < 1) goto L_No_Powder;
- delitem "EmeraldPowder", 1;
- delitem "TopazPowder", 1;
- delitem "HitchhikersTowel", 1;
- delitem "BottleOfWater", 1;
- getitem "LimeHitchhikersTowel", 1;
- mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
- next;
- mes "[Stranger]";
- mes "\"Done! It'll use its color after being used, but just come back and I can dye it again for you.\"";
- goto L_Close;
+ // Panchua
+ set @warpTowelName$, "LimeHitchhikersTowel";
+ setarray @towelPowder$, "EmeraldPowder", "TopazPowder";
+ setarray @towelPowderCnt, 1, 1;
+ goto L_DyeChecks;
-L_Teal:
+L_DyeChecks:
mes "[Stranger]";
- mes "\"Ok, I'll need one bag of Emerald Powder, one bag of Sapphire Powder and a bottle of water for that.\"";
+ mes "\"Ok, I'll need a bottle of water first.\"";
next;
- if (countitem("HitchhikersTowel") < 1) goto L_No_Towel;
getinventorylist;
- if ((countitem("HitchhikersTowel") > 1) && (@inventorylist_count == 100)) goto L_Full_Inv;
+ if (@inventorylist_count == 100) goto L_Full_Inv;
if (countitem("BottleOfWater") < 1) goto L_No_Water;
- if (countitem("EmeraldPowder") < 1) goto L_No_Powder;
- if (countitem("SapphirePowder") < 1) goto L_No_Powder;
- delitem "EmeraldPowder", 1;
- delitem "SapphirePowder", 1;
- delitem "HitchhikersTowel", 1;
+ set @powderCheckCount, 0;
+ goto L_PowderChecks;
+
+L_PowderCheckAgain:
+ mes "[Stranger]";
+ mes "\"Now I need " + @towelPowderCnt[@powderCheckCount] + " " + @towelPowder$[@powderCheckCount] + ".\"";
+ next;
+ if((@powderCheckCount + 1) == getarraysize(@towelPowder$))
+ goto L_TowelChecks;
+ set @powderCheckCount, (@powderCheckCount + 1);
+ goto L_PowderChecks;
+
+L_PowderChecks:
+ if (countitem(@towelPowder$[@powderCheckCount]) < @towelPowderCnt[@powderCheckCount])
+ goto L_No_Powder;
+ goto L_PowderCheckAgain;
+
+L_TowelCheckAgain:
+ set @towelCheckCount, (@towelCheckCount + 1);
+ if(@towelCheckCount >= getarraysize(@towelReq$))
+ goto L_No_Towel;
+ goto L_TowelChecks;
+
+L_TowelChecks:
+ if (countitem(@towelReq$[@towelCheckCount]) > 0)
+ goto L_DeletePowder;
+ goto L_TowelCheckAgain;
+
+L_DeleteAgain:
+ set @powderCheckCount, (@powderCheckCount - 1);
+ goto L_DeletePowder;
+
+L_DeletePowder:
+ delitem @towelPowder$[@powderCheckCount], @towelPowderCnt[@powderCheckCount];
+ if (@powderCheckCount)
+ goto L_DeleteAgain;
+ goto L_DyeTowel;
+
+L_DyeTowel:
+ callfunc "MultiWarpTowel";
+ delitem @towelReq$[@towelCheckCount], 1;
delitem "BottleOfWater", 1;
- getitem "TealHitchhikersTowel", 1;
+ getitem @warpTowelName$, 1;
mes "He takes your towel, the water and the gem powder, then he turns away and does something you can't see. After a few minutes, he turns to you again.";
next;
mes "[Stranger]";
@@ -528,13 +450,15 @@ L_Full_Inv:
goto L_Close;
L_Close:
- set @month, 0;
- set @start_day, 0;
- set @end_day, 0;
set @IRONINGOT, 0;
set @PINKANTENNA, 0;
- set @EXP, 0;
+ set @Exp, 0;
set @random, 0;
set @quizparam$, "";
+ set @warpTowelName$, "";
+ set @powderCheckCount, 0;
+ set @towelCheckCount, 0;
+ cleararray @towelPowder$, "", getarraysize(@towelPowder$);
+ cleararray @towelPowderCnt, "", getarraysize(@towelPowderCnt);
close;
}
diff --git a/world/map/npc/005-1/traveler.txt b/world/map/npc/005-1/traveler.txt
new file mode 100644
index 00000000..f4c38bb4
--- /dev/null
+++ b/world/map/npc/005-1/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+005-1.gat,73,36,0|script|Kieron the Traveler|103,
+{
+ set @NpcName$, "Kieron";
+ set @NpcTravelBit, $@druid_tree_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/006-1/traveler.txt b/world/map/npc/006-1/traveler.txt
new file mode 100644
index 00000000..f19885c3
--- /dev/null
+++ b/world/map/npc/006-1/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+006-1.gat,25,95,0|script|Rhutan the Traveler|103,
+{
+ set @NpcName$, "Rhutan";
+ set @NpcTravelBit, $@pachua_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/008-1/diryn.txt b/world/map/npc/008-1/diryn.txt
index 5ed6ca02..22985393 100644
--- a/world/map/npc/008-1/diryn.txt
+++ b/world/map/npc/008-1/diryn.txt
@@ -1,128 +1,11 @@
// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
-// Author: Wombat
+// Author: Wombat, wushin
// cost depending on level and adapted to new scripting guidelines: Jenalya
008-1.gat,81,82,0|script|Diryn the Traveler|103,
{
- if (BaseLevel < 45)
- goto L_LowerCost;
-
- set @cost_druidtree, 1500;
- set @cost_graveyard, 1500;
- set @cost_magichouse, 1000;
- set @cost_terranitecave, 1500;
- set @cost_tulimshar, 1000;
- set @cost_nivalis, 1500;
- goto L_Start;
-
-L_Start:
- mes "[Diryn]";
- mes "\"Greetings. I am Diryn the Traveler, Assistant Councilor of Tulimshar and teleporter extraordinaire. Tulimshar is expanding our influence throughout the world, so I was sent here to aid all who are willing and able to take on the threats to our interests.\"";
- next;
- mes "\"The monsters of the world have grown out of control, harming people, trade and travel. Needless to say, Tulimshar is not happy with this problem. Our solution: Rally those powerful enough to combat the monster threat and send them to hot spots to challenge the monster threat head on. However, teleportation to these areas is not only extremely dangerous, but also highly expensive. Do you think you got what it takes?\"";
- menu
- "I sure do!", L_Diryn_Yes,
- "No, thank you.", L_Diryn_No;
-
-L_Diryn_Yes:
- mes "[Diryn]";
- mes "\"Excellent. I can send you to many places, but again, the fees are large. Where shall I send you?\"";
- menu
- "Druid Tree (" + @cost_druidtree + " GP)", L_Diryn_Druid_Tree,
- "Graveyard (" + @cost_graveyard + " GP)", L_Diryn_Graveyard,
- "Magic House (" + @cost_magichouse + " GP)", L_Diryn_Magic_House,
- "Terranite Cave (" + @cost_terranitecave + " GP)", L_Diryn_Terranite,
- "Tulimshar Town Square (" + @cost_tulimshar + " GP)", L_Diryn_Tulimshar,
- "Sage Nikolai's Mansion (" + @cost_nivalis + " GP)", L_Diryn_Nivalis,
- "I'm not interested.", L_Diryn_No;
-
-L_Diryn_Druid_Tree:
- if (Zeny < @cost_druidtree)
- goto L_NoMoney;
- mes "[Diryn]";
- mes "\"Be fearless!\"";
- close2;
- set Zeny, Zeny - @cost_druidtree;
- warp "005-1.gat",73,36;
- goto L_Clearvars;
-
-L_Diryn_Graveyard:
- if (Zeny < @cost_graveyard)
- goto L_NoMoney;
- mes "[Diryn]";
- mes "\"Be fearless!\"";
- close2;
- set Zeny, Zeny - @cost_graveyard;
- warp "027-1.gat",70,85;
- goto L_Clearvars;
-
-L_Diryn_Magic_House:
- if (Zeny < @cost_magichouse)
- goto L_NoMoney;
- mes "[Diryn]";
- mes "\"Be fearless!\"";
- close2;
- set Zeny, Zeny - @cost_magichouse;
- warp "013-1.gat",45,92;
- goto L_Clearvars;
-
-L_Diryn_Terranite:
- if (Zeny < @cost_terranitecave)
- goto L_NoMoney;
- mes "[Diryn]";
- mes "\"Be fearless!\"";
- close2;
- set Zeny, Zeny - @cost_terranitecave;
- warp "012-3.gat",445,65;
- goto L_Clearvars;
-
-L_Diryn_Tulimshar:
- if (Zeny < @cost_tulimshar)
- goto L_NoMoney;
- mes "[Diryn]";
- mes "\"Be fearless!\"";
- close2;
- set Zeny, Zeny - @cost_tulimshar;
- warp "001-1.gat",44,70;
- goto L_Clearvars;
-
-L_Diryn_Nivalis:
- if (Zeny < @cost_nivalis)
- goto L_NoMoney;
- mes "[Diryn]";
- mes "\"Be fearless!\"";
- close2;
- set Zeny, Zeny - @cost_nivalis;
- warp "048-1.gat",65,45;
- goto L_Clearvars;
-
-L_Diryn_No:
- mes "[Diryn]";
- mes "\"Perhaps some day you will have the courage to help us. Enjoy your stay here in Hurnscald.\"";
- close2;
- goto L_Clearvars;
-
-L_NoMoney:
- mes "[Diryn]";
- mes "\"Sorry, you don't have enough money. Maybe next time.\"";
- close2;
- goto L_Clearvars;
-
-L_LowerCost:
- set @cost_druidtree, 750;
- set @cost_graveyard, 750;
- set @cost_magichouse, 500;
- set @cost_terranitecave, 750;
- set @cost_tulimshar, 500;
- set @cost_nivalis, 500;
- goto L_Start;
-
-L_Clearvars:
- set @cost_druidtree, 0;
- set @cost_graveyard, 0;
- set @cost_magichouse, 0;
- set @cost_terranitecave, 0;
- set @cost_tulimshar, 0;
- set @cost_nivalis, 0;
+ set @NpcName$, "Diryn";
+ set @NpcTravelBit, $@hurnscald_bit;
+ callfunc "Traveler";
end;
}
diff --git a/world/map/npc/012-3/traveler.txt b/world/map/npc/012-3/traveler.txt
new file mode 100644
index 00000000..c2c4d51e
--- /dev/null
+++ b/world/map/npc/012-3/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+012-3.gat,439,62,0|script|Meridith the Traveler|103,
+{
+ set @NpcName$, "Meridith";
+ set @NpcTravelBit, $@terranite_cave_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/013-1/traveler.txt b/world/map/npc/013-1/traveler.txt
new file mode 100644
index 00000000..405c82b1
--- /dev/null
+++ b/world/map/npc/013-1/traveler.txt
@@ -0,0 +1,7 @@
+013-1.gat,120,90,0|script|Faris the Traveler|103,
+{
+ set @NpcName$, "Faris";
+ set @NpcTravelBit, $@magic_house_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/013-2/notes.txt b/world/map/npc/013-2/notes.txt
index f0aee204..2f569334 100644
--- a/world/map/npc/013-2/notes.txt
+++ b/world/map/npc/013-2/notes.txt
@@ -34,7 +34,7 @@
close;
}
-// Warp to north-eastern woods
+// Warp to wood clearings
013-2.gat,25,23,0|script|Spell#wiz1|400,
{
mes "You read: \"I see trees of green, red roses too. I see them bloom for me and you. And I think to myself: \'What a wonderful world\'\"";
@@ -43,28 +43,67 @@
next;
mes "The spell fulfills its inevitable purpose...";
next;
+ set @dest, rand(BaseLevel);
+ if (@dest < 10)
+ goto L_PlaceOne;
+ if ((@dest >= 10) && (@dest <= 50))
+ goto L_PlaceTwo;
+ goto L_PlaceThree;
+
+L_PlaceOne:
warp "013-1.gat",128,28;
+ goto L_Close;
+
+L_PlaceTwo:
+ warp "016-1.gat",62,89;
+ goto L_Close;
+
+L_PlaceThree:
+ warp "014-1.gat",33,35;
+ goto L_Close;
+
+L_Close:
+ set @dest, 0;
close;
}
-// Warp to Indian in south-eastern desert
+// Warp to desert
013-2.gat,27,24,0|script|Spell#wiz2|400,
{
- mes "You read: \"A red-coloured fellow smoking his pipe - down in the desert - that's what I like!\"";
+ mes "You read: \"You must not fear, for it is the mind-killer. That and sharp pointy things.\"";
next;
mes "You feel the floor disappear below your feet...";
next;
+ set @dest, rand(BaseLevel);
+ if (@dest < 10)
+ goto L_PlaceOne;
+ if ((@dest >= 10) && (@dest <= 50))
+ goto L_PlaceTwo;
+ goto L_PlaceThree;
+
+L_PlaceOne:
+ warp "006-1.gat",125,111;
+ goto L_Close;
+
+L_PlaceTwo:
+ warp "032-1.gat",77,22;
+ goto L_Close;
+
+L_PlaceThree:
warp "006-1.gat",33,93;
if (QUEST_MIRIAM_start != 0) goto L_cheat;
- close;
+ goto L_Close;
// If you try to use the notes to warp to pachua the quest will fail.
-
L_cheat:
set QUEST_MIRIAM_cheat, 1;
set QUEST_MIRIAM_run, gettimetick(2) - QUEST_MIRIAM_start;
set QUEST_MIRIAM_start, 0;
message strcharinfo(0), "You were supposed to actually run to this place. You are not sure if this is going to work for Miriam...";
+ goto L_Close;
+
+L_Close:
+ set @dest, 0;
close;
}
@@ -99,25 +138,65 @@ L_Close:
close;
}
-// Warp to Dimond
+// Warp to Inns
013-2.gat,27,27,0|script|Spell#wiz4|400,
{
mes "You read: \"People and cosiness, lively and fun - that's where I've gone!\"";
next;
mes "The world around you slowly dissolves...";
next;
+ set @dest, rand(BaseLevel);
+ if (@dest < 10)
+ goto L_PlaceOne;
+ if ((@dest >= 10) && (@dest <= 50))
+ goto L_PlaceTwo;
+ goto L_PlaceThree;
+
+L_PlaceOne:
+ warp "030-2.gat",88,24;
+ goto L_Close;
+
+L_PlaceTwo:
+ warp "001-2.gat",30,29;
+ goto L_Close;
+
+L_PlaceThree:
warp "010-2.gat",34,42;
+ goto L_Close;
+
+L_Close:
+ set @dest, 0;
close;
}
-// Warp to mines level 2
+// Warp to mines
013-2.gat,26,28,0|script|Spell#wiz5|400,
{
mes "You read: \"Darkness and legs, eight of them each - I'd rather not go there, but now it's too late...\"";
next;
mes "For a moment everything turns black...";
next;
- warp "013-3.gat",127,70;
+ set @dest, rand(BaseLevel);
+ if (@dest < 10)
+ goto L_PlaceOne;
+ if ((@dest >= 10) && (@dest <= 50))
+ goto L_PlaceTwo;
+ goto L_PlaceThree;
+
+L_PlaceOne:
+ warp "012-4.gat",431,36;
+ goto L_Close;
+
+L_PlaceTwo:
+ warp "013-3.gat",134,54;
+ goto L_Close;
+
+L_PlaceThree:
+ warp "013-3.gat",178,67;
+ goto L_Close;
+
+L_Close:
+ set @dest, 0;
close;
}
diff --git a/world/map/npc/020-1/traveler.txt b/world/map/npc/020-1/traveler.txt
new file mode 100644
index 00000000..95efd4cf
--- /dev/null
+++ b/world/map/npc/020-1/traveler.txt
@@ -0,0 +1,7 @@
+020-1.gat,57,123,0|script|Knox the Traveler|103,
+{
+ set @NpcName$, "Knox";
+ set @NpcTravelBit, $@nivalis_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/027-1/traveler.txt b/world/map/npc/027-1/traveler.txt
new file mode 100644
index 00000000..142b39dd
--- /dev/null
+++ b/world/map/npc/027-1/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+027-1.gat,83,84,0|script|Styx the Traveler|103,
+{
+ set @NpcName$, "Styx";
+ set @NpcTravelBit, $@graveyard_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/029-1/traveler.txt b/world/map/npc/029-1/traveler.txt
new file mode 100644
index 00000000..789a375a
--- /dev/null
+++ b/world/map/npc/029-1/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+029-1.gat,69,67,0|script|Knitra the Traveler|103,
+{
+ set @NpcName$, "Knitra";
+ set @NpcTravelBit, $@candor_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/033-1/traveler.txt b/world/map/npc/033-1/traveler.txt
new file mode 100644
index 00000000..ebb10ccc
--- /dev/null
+++ b/world/map/npc/033-1/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+033-1.gat,63,30,0|script|Khoenan the Traveler|103,
+{
+ set @NpcName$, "Khoenan";
+ set @NpcTravelBit, $@barbarians_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/044-1/traveler.txt b/world/map/npc/044-1/traveler.txt
new file mode 100644
index 00000000..e5d9c2fe
--- /dev/null
+++ b/world/map/npc/044-1/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+044-1.gat,151,17,0|script|Klaus the Traveler|103,
+{
+ set @NpcName$, "Klaus";
+ set @NpcTravelBit, $@nivalis_snow_hills_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/048-2/traveler.txt b/world/map/npc/048-2/traveler.txt
new file mode 100644
index 00000000..9a2d6f76
--- /dev/null
+++ b/world/map/npc/048-2/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+048-2.gat,23,46,0|script|Drake the Traveler|103,
+{
+ set @NpcName$, "Drake";
+ set @NpcTravelBit, $@blue_sage_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/055-1/traveler.txt b/world/map/npc/055-1/traveler.txt
new file mode 100644
index 00000000..82877a09
--- /dev/null
+++ b/world/map/npc/055-1/traveler.txt
@@ -0,0 +1,11 @@
+// This is a teleportation (warp) NPC. Its purpose is to offer expensive, fast trips throughout the world.
+// Author: Wombat, wushin
+// cost depending on level and adapted to new scripting guidelines: Jenalya
+
+055-1.gat,135,60,0|script|Sherman the Traveler|103,
+{
+ set @NpcName$, "Sherman";
+ set @NpcTravelBit, $@hurns_farms_bit;
+ callfunc "Traveler";
+ end;
+}
diff --git a/world/map/npc/functions/default_npc_checks.txt b/world/map/npc/functions/default_npc_checks.txt
new file mode 100644
index 00000000..4ddd00ca
--- /dev/null
+++ b/world/map/npc/functions/default_npc_checks.txt
@@ -0,0 +1,125 @@
+// Default NPC Checks
+// Author: Wushin
+
+// Range
+// Map, X, Y, Distance in Tiles
+// setarray $@npc_loc, 24, 113, 4;
+function|script|PCtoNPCRange|,
+{
+ set @npc_check, 0;
+ set $@Nmap$, getmap() + ".gat";
+ set $@Nx1, ($@npc_loc[0] - $@npc_loc[2]);
+ set $@Ny1, ($@npc_loc[1] - $@npc_loc[2]);
+ set $@Nx2, ($@npc_loc[0] + $@npc_loc[2]);
+ set $@Ny2, ($@npc_loc[1] + $@npc_loc[2]);
+ if (isin($@Nmap$, $@Nx1, $@Ny1, $@Nx2, $@Ny2))
+ goto L_Return;
+ set @npc_check, 1;
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+// Inventory & Weight
+// setarray @delitem_names$ Items to delete
+// @delitem_counts Counts of Items to delete
+// @getitem_names$ Items to get
+// @getitem_counts Counts of Items to get
+function|script|CheckInventory|,
+{
+ set @del_loop, 0;
+ set @get_loop, 0;
+ set @delitem_loop, 0;
+ set @getitem_loop, 0;
+ set @check_fail, 0;
+
+ if (getarraysize(@delitem_names$))
+ goto L_DelItemsLoop;
+ goto L_CheckGet;
+
+L_DelItemsLoop:
+ if(countitem(@delitem_names$[@delitem_loop]) >= @delitem_counts[@delitem_loop])
+ goto L_DelLoopAgain;
+ goto L_ReturnMissing;
+
+L_DelLoopAgain:
+ if((@delitems_loop + 1) == getarraysize(@delitems_names$))
+ goto L_CheckGet;
+ set @delitems_loop, (@delitems_loop + 1);
+ goto L_DelItemsLoop;
+
+L_CheckGet:
+ if (getarraysize(@getitem_names$))
+ goto L_CheckWeight;
+ goto L_DelCheck;
+
+L_CheckWeight:
+ getinventorylist;
+ if (@inventorylist_count < (101 - getarraysize(@getitem_names$)))
+ goto L_ReturnSpace;
+ goto L_GetItemsLoop;
+
+L_GetItemsLoop:
+ if (checkweight(@getitem_names$, 1) == 0)
+ goto L_GetLoopAgain;
+ goto L_ReturnWeight;
+
+L_GetLoopAgain:
+ if((@getitems_loop + 1) == getarraysize(@getitems_names$))
+ goto L_DelCheck;
+ set @getitems_loop, (@getitems_loop + 1);
+ goto L_GetItemsLoop;
+
+L_DelCheck:
+ if (getarraysize(@delitem_names$))
+ goto L_DelLoop;
+ goto L_CheckGet2;
+
+L_DelLoop:
+ delitem @delitem_names$[@del_loop], @delitem_counts[@del_loop];
+ goto L_DelAgain;
+
+L_DelAgain:
+ if((@del_loop + 1) == getarraysize(@delitems_names$))
+ goto L_GetLoop;
+ set @del_loop, (@del_loop + 1);
+ goto L_DelLoop;
+
+L_CheckGet2:
+ if (getarraysize(@getitem_names$))
+ goto L_GetLoop;
+ goto L_Return;
+
+L_GetLoop:
+ getitem @getitem_names$[@get_loop], @getitem_counts[@get_loop];
+ goto L_GetAgain;
+
+L_GetAgain:
+ if((@get_loop + 1) == getarraysize(@getitems_names$))
+ goto L_Return;
+ set @get_loop, (@get_loop + 1);
+ goto L_GetLoop;
+
+L_ReturnMissing:
+ mes "\"You are missing required items.\"";
+ set @check_fail, 1;
+ goto L_Return;
+
+L_ReturnWeight:
+ mes "\"You need to be carrying less weight.\"";
+ next;
+ set @check_fail, 1;
+ goto L_Return;
+
+L_ReturnSpace:
+ mes "\"You need more room in your inventory.\"";
+ next;
+ set @check_fail, 1;
+ goto L_Return;
+
+L_Return:
+ cleararray @delitem_names$, "", getarraysize(@delitem_names$);
+ cleararray @getitem_names$, "", getarraysize(@getitem_names$);
+ return;
+}
diff --git a/world/map/npc/functions/soul_menhir.txt b/world/map/npc/functions/soul_menhir.txt
index 14c1cf1c..e5ec9f4a 100644
--- a/world/map/npc/functions/soul_menhir.txt
+++ b/world/map/npc/functions/soul_menhir.txt
@@ -6,7 +6,13 @@ function|script|SoulMenhir|,
menu
"Touch it.", L_Bind,
- "Leave it alone.", L_Return;
+ "Leave it alone.", L_Return,
+ "I lost my towel...", L_Towel;
+
+L_Towel:
+ callfunc "MultiWarpTowel";
+ getitem "HitchhikersTowel", 1;
+ goto L_Return;
L_Bind:
if (Menhir_Activated == 1)
diff --git a/world/map/npc/functions/travelers.txt b/world/map/npc/functions/travelers.txt
new file mode 100644
index 00000000..76e96bf7
--- /dev/null
+++ b/world/map/npc/functions/travelers.txt
@@ -0,0 +1,279 @@
+// Travelers
+// Authors: Wombat, Wushin
+
+// Multiple Travelers
+// Cannot access until found (Player Bitmask)
+// Costs Zeny
+
+// Contains all warp points to find
+botcheck.gat,27,28,0|script|#TravelConfig|-1,
+{
+ end;
+
+OnInit:
+ // TravelFound
+ set $@tut_bit, (1 << 2);
+ set $@druid_tree_bit, (1 << 3);
+ set $@graveyard_bit, (1 << 4);
+ set $@magic_house_bit, (1 << 5);
+ set $@terranite_cave_bit, (1 << 6);
+ set $@tulimshar_bit, (1 << 7);
+ set $@blue_sage_bit, (1 << 8);
+ set $@hurnscald_bit, (1 << 9);
+ set $@nivalis_bit, (1 << 10);
+ set $@tul_mine_bit, (1 << 11);
+ set $@pachua_bit, (1 << 12);
+ set $@nivalis_snow_hills_bit, (1 << 13);
+ set $@barbarians_bit, (1 << 14);
+ set $@hurns_farms_bit, (1 << 15);
+ set $@candor_bit, (1 << 16);
+ // Travel Base Cost
+ set $@tulimshar_cost, 100;
+ set $@hurnscald_cost, 100;
+ set $@nivalis_cost, 100;
+ set $@druid_tree_cost, 150;
+ set $@tul_mine_cost, 150;
+ set $@pachua_cost, 200;
+ set $@graveyard_cost, 200;
+ set $@magic_house_cost, 150;
+ set $@terranite_cave_cost, 200;
+ set $@blue_sage_cost, 200;
+ set $@nivalis_snow_hills_cost, 150;
+ set $@barbarians_cost, 150;
+ set $@hurns_farms_cost, 150;
+ set $@candor_cost, 200;
+ end;
+}
+
+function|script|TravelerTut|,
+{
+ //Explain Travelers
+ mes "["+@NpcName$+"]";
+ mes "\"We travelers are found all over the world. Once you have found another traveler, we can create a link and send you between us.\"";
+ next;
+ if (TravelFound & $@tut_bit)
+ goto L_Return;
+ goto L_SetBit;
+
+L_SetBit:
+ set TravelFound, TravelFound | $@tut_bit;
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
+function|script|Traveler|,
+{
+ mes "["+@NpcName$+"]";
+ mes "\"Greetings. I am "+@NpcName$+" the Traveler.\"";
+ next;
+
+ if (TravelFound & $@tut_bit)
+ goto L_Main;
+ goto L_TravelTut;
+
+L_Main:
+ if (TravelFound & @NpcTravelBit)
+ goto L_BitTravelSet;
+ goto L_SetTravelBit;
+
+L_BitTravelSet:
+ set @Cost, 10;
+ if (BaseLevel < 45)
+ set @Cost, 5;
+ goto L_Start;
+
+L_TravelTut:
+ callfunc "TravelerTut";
+ goto L_Main;
+
+L_SetTravelBit:
+ mes "["+@NpcName$+"]";
+ mes "\"Uplink Set. You can now return to this spot for a fee.\"";
+ next;
+ set TravelFound, TravelFound | @NpcTravelBit;
+ goto L_BitTravelSet;
+
+L_Start:
+ mes "\"Where would you like to go?\"";
+ menu
+ "Tulimshar (" + (@Cost * $@tulimshar_cost) + " GP)", L_TravelTulimshar,
+ "Hurnscald (" + (@Cost * $@hurnscald_cost) + " GP)", L_TravelHurnscald,
+ "Nivalis (" + (@Cost * $@nivalis_cost) + " GP)", L_TravelNivalis,
+ "Candor (" + (@Cost * $@candor_cost) + " GP)", L_TravelCandor,
+ "Tonori - Druid Tree (" + (@Cost * $@druid_tree_cost) + " GP)", L_TravelDruidTree,
+ "Tonori - Tulimshar Mines (" + (@Cost * $@tul_mine_cost) + " GP)", L_TravelTulMine,
+ "Tonori - Pachua's Village (" + (@Cost * $@pachua_cost) + " GP)", L_TravelPachua,
+ "Argeas - Magic House (" + (@Cost * $@magic_house_cost) + " GP)", L_TravelMagicHouse,
+ "Argeas - Farmsteads (" + (@Cost * $@hurns_farms_cost) + " GP)", L_TravelHurnsFarms,
+ "Argeas - Graveyard (" + (@Cost * $@graveyard_cost) + " GP)", L_TravelGraveyard,
+ "Argeas - Terranite Cave (" + (@Cost * $@terranite_cave_cost) + " GP)", L_TravelTerranite,
+ "Nivalis - Barbarian Village (" + (@Cost * $@barbarians_cost) + " GP)", L_TravelBarbarians,
+ "Nivalis - Sage Nikolai's Mansion (" + (@Cost * $@blue_sage_cost) + " GP)", L_TravelBlueSage,
+ "Nivalis - Snow Hills (" + (@Cost * $@nivalis_snow_hills_cost) + " GP)", L_TravelSnowHills,
+ "Who are the Travelers?", L_TravelTut,
+ "I'm not interested.", L_TravelNo;
+
+L_TravelChecks:
+ if (@NpcTravelBit == @NextLocationBit)
+ goto L_AlreadyThere;
+ if (!(TravelFound & @NextLocationBit))
+ goto L_NoFound;
+ if (Zeny < @NextLocationCost)
+ goto L_NoMoney;
+ goto L_TravelPlayer;
+
+L_TravelPlayer:
+ mes "["+@NpcName$+"]";
+ mes "\"Be fearless!\"";
+ close2;
+ set Zeny, Zeny - @NextLocationCost;
+ warp @NextLocationMap$,@NextLocationX,@NextLocationY;
+ goto L_Clearvars;
+
+L_TravelDruidTree:
+ set @NextLocationBit, $@druid_tree_bit;
+ set @NextLocationCost, (@Cost * $@druid_tree_cost);
+ set @NextLocationMap$, "005-1.gat";
+ set @NextLocationX, 76;
+ set @NextLocationY, 36;
+ goto L_TravelChecks;
+
+L_TravelGraveyard:
+ set @NextLocationBit, $@graveyard_bit;
+ set @NextLocationCost, (@Cost * $@graveyard_cost);
+ set @NextLocationMap$, "027-1.gat";
+ set @NextLocationX, 84;
+ set @NextLocationY, 86;
+ goto L_TravelChecks;
+
+L_TravelMagicHouse:
+ set @NextLocationBit, $@magic_house_bit;
+ set @NextLocationCost, (@Cost * $@magic_house_cost);
+ set @NextLocationMap$, "013-1.gat";
+ set @NextLocationX, 120;
+ set @NextLocationY, 93;
+ goto L_TravelChecks;
+
+L_TravelTerranite:
+ set @NextLocationBit, $@terranite_cave_bit;
+ set @NextLocationCost, (@Cost * $@terranite_cave_cost);
+ set @NextLocationMap$, "012-3.gat";
+ set @NextLocationX, 445;
+ set @NextLocationY, 65;
+ goto L_TravelChecks;
+
+L_TravelTulimshar:
+ set @NextLocationBit, $@tulimshar_bit;
+ set @NextLocationCost, (@Cost * $@tulimshar_cost);
+ set @NextLocationMap$, "001-1.gat";
+ set @NextLocationX, 44;
+ set @NextLocationY, 70;
+ goto L_TravelChecks;
+
+L_TravelBlueSage:
+ set @NextLocationBit, $@blue_sage_bit;
+ set @NextLocationCost, (@Cost * $@blue_sage_cost);
+ set @NextLocationMap$, "048-2.gat";
+ set @NextLocationX, 26;
+ set @NextLocationY, 47;
+ goto L_TravelChecks;
+
+L_TravelHurnscald:
+ set @NextLocationBit, $@hurnscald_bit;
+ set @NextLocationCost, (@Cost * $@hurnscald_cost);
+ set @NextLocationMap$, "008-1.gat";
+ set @NextLocationX, 79;
+ set @NextLocationY, 84;
+ goto L_TravelChecks;
+
+L_TravelNivalis:
+ set @NextLocationBit, $@nivalis_bit;
+ set @NextLocationCost, (@Cost * $@nivalis_cost);
+ set @NextLocationMap$, "020-1.gat";
+ set @NextLocationX, 53;
+ set @NextLocationY, 122;
+ goto L_TravelChecks;
+
+L_TravelTulMine:
+ set @NextLocationBit, $@tul_mine_bit;
+ set @NextLocationCost, (@Cost * $@tul_mine_cost);
+ set @NextLocationMap$, "002-2.gat";
+ set @NextLocationX, 27;
+ set @NextLocationY, 28;
+ goto L_TravelChecks;
+
+L_TravelPachua:
+ set @NextLocationBit, $@pachua_bit;
+ set @NextLocationCost, (@Cost * $@pachua_cost);
+ set @NextLocationMap$, "006-1.gat";
+ set @NextLocationX, 28;
+ set @NextLocationY, 97;
+ goto L_TravelChecks;
+
+L_TravelSnowHills:
+ set @NextLocationBit, $@nivalis_snow_hills_bit;
+ set @NextLocationCost, (@Cost * $@nivalis_snow_hills_cost);
+ set @NextLocationMap$, "044-1.gat";
+ set @NextLocationX, 152;
+ set @NextLocationY, 19;
+ goto L_TravelChecks;
+
+L_TravelBarbarians:
+ set @NextLocationBit, $@barbarians_bit;
+ set @NextLocationCost, (@Cost * $@barbarians_cost);
+ set @NextLocationMap$, "033-1.gat";
+ set @NextLocationX, 66;
+ set @NextLocationY, 33;
+ goto L_TravelChecks;
+
+L_TravelHurnsFarms:
+ set @NextLocationBit, $@hurns_farms_bit;
+ set @NextLocationCost, (@Cost * $@hurns_farms_cost);
+ set @NextLocationMap$, "055-1.gat";
+ set @NextLocationX, 135;
+ set @NextLocationY, 60;
+ goto L_TravelChecks;
+
+L_TravelCandor:
+ set @NextLocationBit, $@candor_bit;
+ set @NextLocationCost, (@Cost * $@candor_cost);
+ set @NextLocationMap$, "029-1.gat";
+ set @NextLocationX, 69;
+ set @NextLocationY, 69;
+ goto L_TravelChecks;
+
+L_TravelNo:
+ mes "["+@NpcName$+"]";
+ mes "\"Perhaps some day you will have the courage to help us. Enjoy your stay here in Hurnscald.\"";
+ close2;
+ goto L_Clearvars;
+
+L_NoMoney:
+ mes "["+@NpcName$+"]";
+ mes "\"Sorry, you don't have enough money. Maybe next time.\"";
+ close2;
+ goto L_Clearvars;
+
+L_NoFound:
+ mes "["+@NpcName$+"]";
+ mes "\"Sorry, you don't have a memory from that location. Maybe next time.\"";
+ close2;
+ goto L_Clearvars;
+
+L_AlreadyThere:
+ mes "["+@NpcName$+"]";
+ mes "\"Umm, you are already here. Are you sure you know where you are going?\"";
+ close2;
+ goto L_Clearvars;
+
+L_Clearvars:
+ set @Cost, 0;
+ set @NextLocationBit, 0;
+ set @NextLocationCost, 0;
+ set @NextLocationMap$, "";
+ set @NextLocationX, 0;
+ set @NextLocationY, 0;
+ return;
+}
diff --git a/world/map/npc/items/warpTowels.txt b/world/map/npc/items/warpTowels.txt
index 75209523..1a9c8bcd 100644
--- a/world/map/npc/items/warpTowels.txt
+++ b/world/map/npc/items/warpTowels.txt
@@ -1,360 +1,174 @@
-function|script|useWhiteWarpTowel|,
+// See #TravelConfig
+function|script|WarpTowel|,
{
+ callfunc "MultiWarpTowel";
+ if (@warpTowelName$ == "HitchhikersTowel")
+ goto L_Save;
+ if(@warpTowelName$ == "WhiteHitchhikersTowel")
+ goto L_White;
+ if(@warpTowelName$ == "RedHitchhikersTowel")
+ goto L_Red;
+ if(@warpTowelName$ == "GreenHitchhikersTowel")
+ goto L_Green;
+ if(@warpTowelName$ == "BlueHitchhikersTowel")
+ goto L_Blue;
+ if(@warpTowelName$ == "YellowHitchhikersTowel")
+ goto L_Yellow;
+ if(@warpTowelName$ == "PurpleHitchhikersTowel")
+ goto L_Purple;
+ if(@warpTowelName$ == "OrangeHitchhikersTowel")
+ goto L_Orange;
+ if(@warpTowelName$ == "PinkHitchhikersTowel")
+ goto L_Pink;
+ if(@warpTowelName$ == "TealHitchhikersTowel")
+ goto L_Teal;
+ if(@warpTowelName$ == "LimeHitchhikersTowel")
+ goto L_Lime;
+ goto L_Save;
+
+L_White:
+ // Koga
+ set @NextLocationMap$, "035-2.gat";
+ set @NextLocationX, 20;
+ set @NextLocationY, 21;
+ goto L_WarpChecks;
+
+L_Red:
+ // Barbarians
+ set @NextLocationMap$, "033-1.gat";
+ set @NextLocationX, 66;
+ set @NextLocationY, 33;
+ goto L_WarpChecks;
+
+L_Green:
+ // Candor
+ set @NextLocationMap$, "029-1.gat";
+ set @NextLocationX, 69;
+ set @NextLocationY, 69;
+ goto L_WarpChecks;
+
+L_Blue:
+ // Blue Sages
+ set @NextLocationMap$, "048-2.gat";
+ set @NextLocationX, 26;
+ set @NextLocationY, 47;
+ goto L_WarpChecks;
+
+L_Yellow:
+ // Tulimshar Mines
+ set @NextLocationMap$, "002-2.gat";
+ set @NextLocationX, 27;
+ set @NextLocationY, 28;
+ goto L_WarpChecks;
+
+L_Purple:
+ // Dimonds Inn
+ set @NextLocationMap$, "010-1.gat";
+ set @NextLocationX, 27;
+ set @NextLocationY, 97;
+ goto L_WarpChecks;
+
+L_Orange:
+ // Graveyard
+ set @NextLocationMap$, "027-1.gat";
+ set @NextLocationX, 70;
+ set @NextLocationY, 100;
+ goto L_WarpChecks;
+
+L_Pink:
+ // Terranite Cave
+ set @NextLocationMap$, "012-3.gat";
+ set @NextLocationX, 448;
+ set @NextLocationY, 66;
+ goto L_WarpChecks;
+
+L_Teal:
+ // Mana Seed
+ set @NextLocationMap$, "012-3.gat";
+ set @NextLocationX, 64;
+ set @NextLocationY, 130;
+ goto L_WarpChecks;
+
+L_Lime:
+ // Pachua
+ set @NextLocationMap$, "006-1.gat";
+ set @NextLocationX, 28;
+ set @NextLocationY, 97;
+ goto L_WarpChecks;
+
+L_Save:
+ // Soul Menhir
+ set @NextLocationMap$, getsavepoint(0);
+ set @NextLocationX, getsavepoint(1);
+ set @NextLocationY, getsavepoint(2);
+ goto L_WarpChecks;
+
+L_WarpChecks:
+ if (TowelLastUsed > (gettimetick(2) - 1800))
+ goto L_DontPanic;
if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "020-1.gat",66,91; // Nivalis
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
-
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
-
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "WhiteHitchhikersTowel", 1;
- end;
-}
-function|script|useRedWarpTowel|,
-{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "009-1.gat",51,40; // Hurnscald
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
-
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
-
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "RedHitchhikersTowel", 1;
- end;
-}
-function|script|useGreenWarpTowel|,
-{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "003-1.gat",35,25;
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
-
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
-
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "GreenHitchhikersTowel", 1;
- end;
-}
-function|script|useBlueWarpTowel|,
-{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "003-1.gat",35,25;
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
-
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
-
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "BlueHitchhikersTowel", 1;
- end;
-}
-function|script|useYellowWarpTowel|,
-{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "001-1.gat",40,71; // Tulimshar
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
-
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
+ goto L_Prison;
+ if (getmapflag(getmap(), MF_NOSAVE))
+ goto L_Forbid;
+ goto L_WarpPlayer;
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
+L_WarpPlayer:
+ set TowelLastUsed, gettimetick(2);
+ warp @NextLocationMap$,@NextLocationX,@NextLocationY;
+ goto L_BreakChance;
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "YellowHitchhikersTowel", 1;
- end;
-}
-function|script|usePurpleWarpTowel|,
-{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "003-1.gat",35,25;
+L_BreakChance:
if (rand(15))
goto L_Keep;
getitem "HitchhikersTowel", 1;
- end;
+ goto L_End;
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
+L_Forbid:
+ message strcharinfo(0), "This area is protected by a force that doesn't tolerate the power of the Towel.";
goto L_Keep;
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
+L_Prison:
+ message strcharinfo(0), "You must be warped by a GM to leave the botcheck area.";
goto L_Keep;
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
+L_DontPanic:
+ message strcharinfo(0), "Your towel is still too low on power to jump again.";
goto L_Keep;
L_Keep:
- getitem "PurpleHitchhikersTowel", 1;
- end;
-}
-function|script|useOrangeWarpTowel|,
-{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "027-1.gat",70,100; // Graveyard
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
+ getitem @warpTowelName$, 1;
+ goto L_End;
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
-
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "OrangeHitchhikersTowel", 1;
+L_End:
+ set @NextLocationMap$, "";
+ set @NextLocationX, 0;
+ set @NextLocationY, 0;
+ set @warpTowelName$, "";
end;
}
-function|script|usePinkWarpTowel|,
-{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "012-3.gat",448,66; // Terranite Cave
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
-
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "PinkHitchhikersTowel", 1;
- end;
-}
-function|script|useTealWarpTowel|,
+function|script|MultiWarpTowel|,
{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "003-1.gat",35,25;
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
-
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
-
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "TealHitchhikersTowel", 1;
- end;
+ setarray $@warpTowels$, "HitchhikersTowel", "WhiteHitchhikersTowel", "RedHitchhikersTowel", "GreenHitchhikersTowel", "BlueHitchhikersTowel", "YellowHitchhikersTowel", "PurpleHitchhikersTowel", "OrangeHitchhikersTowel", "PinkHitchhikersTowel", "TealHitchhikersTowel", "LimeHitchhikersTowel";
+ set @towel_count, 0;
+ set @towel_loop, 0;
+ goto L_CountTowelLoop;
+
+L_CountTowelLoop:
+ set @towel_count, (@towel_count + countitem($@warpTowels$[@towel_loop]));
+ delitem $@warpTowels$[@towel_loop], countitem($@warpTowels$[@towel_loop]);
+ goto L_DelLoopAgain;
+
+L_DelLoopAgain:
+ if((@towel_loop + 1) == getarraysize($@warpTowels$))
+ goto L_Return;
+ set @towel_loop, (@towel_loop + 1);
+ goto L_CountTowelLoop;
+
+L_Return:
+ if (@towel_count > 0)
+ set @warpTowelName$, $@warpTowels$[rand(getarraysize($@warpTowels$))];
+ cleararray $@warpTowels$, "", getarraysize($@warpTowels$);
+ return;
}
-function|script|useLimeWarpTowel|,
-{
- if (isin("botcheck.gat",25,27,51,47))
- goto L_Botcheck;
- if (isin("052-1.gat",1,1,100,80) || isin("052-2.gat",1,1,150,100))
- goto L_Illia;
- if (isin("029-3.gat",1,1,99,99))
- goto L_Candor;
- if (isin("031-4.gat",1,1,90,90))
- goto L_Cindy;
- warp "003-1.gat",35,25;
- if (rand(15))
- goto L_Keep;
- getitem "HitchhikersTowel", 1;
- end;
-
-L_Candor:
- message strcharinfo(0), "This area is protected by a force that doesn't tolerate the forgein powers of the towel.";
- goto L_Keep;
-L_Cindy:
- message strcharinfo(0), "Something is preventing your towel from working here.";
- goto L_Keep;
-
-L_Illia:
- message strcharinfo(0), "The strong barrier of this island prevents you to teleport!";
- goto L_Keep;
-
-L_Botcheck:
- message strcharinfo(0), "You must be warped by a GM to leave the bot check area.";
- goto L_Keep;
-
-L_Keep:
- getitem "LimeHitchhikersTowel", 1;
- end;
-}
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index 2c8538af..1458423b 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -6,6 +6,7 @@ npc: npc/functions/barber.txt
npc: npc/functions/clear_vars.txt
npc: npc/functions/dailyquest.txt
npc: npc/functions/ferry.txt
+npc: npc/functions/travelers.txt
npc: npc/functions/game_rules.txt
npc: npc/functions/inn.txt
npc: npc/functions/magic.txt
@@ -19,6 +20,8 @@ npc: npc/functions/water_bottle.txt
npc: npc/functions/evil_obelisk.txt
npc: npc/functions/debug.txt
npc: npc/functions/lockpicking.txt
+npc: npc/functions/default_npc_checks.txt
+npc: npc/functions/undead_debug.txt
// Item Functions
npc: npc/items/magic_gm_top_hat.txt