From 82ae61eae9e12de70bc463cc3bfbc6bdd9c454b1 Mon Sep 17 00:00:00 2001 From: wushin Date: Fri, 11 Apr 2014 11:54:20 -0500 Subject: Adding new Maps Adding Collision Files for Maps Mapflags to for Local Respawns Base Autogenerated files for New Maps / Respawns. --- world/map/npc/033-1/_import.txt | 4 +++- world/map/npc/033-1/_mobs.txt | 2 +- world/map/npc/033-1/_warps.txt | 2 +- world/map/npc/033-1/mapflags.txt | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 world/map/npc/033-1/mapflags.txt (limited to 'world/map/npc/033-1') diff --git a/world/map/npc/033-1/_import.txt b/world/map/npc/033-1/_import.txt index f50ac18a..214e42eb 100644 --- a/world/map/npc/033-1/_import.txt +++ b/world/map/npc/033-1/_import.txt @@ -1,4 +1,4 @@ -// Map 033-1: Snow Path +// Map 033-1: snow Path // This file is generated automatically. All manually changes will be removed when running the Converter. map: 033-1.gat npc: npc/033-1/_mobs.txt @@ -7,4 +7,6 @@ npc: npc/033-1/backDoor.txt npc: npc/033-1/barbarianinit.txt npc: npc/033-1/birrod.txt npc: npc/033-1/kimarr.txt +npc: npc/033-1/mapflags.txt +npc: npc/033-1/traveler.txt npc: npc/033-1/yerrnk.txt diff --git a/world/map/npc/033-1/_mobs.txt b/world/map/npc/033-1/_mobs.txt index 35c8404e..d60f0663 100644 --- a/world/map/npc/033-1/_mobs.txt +++ b/world/map/npc/033-1/_mobs.txt @@ -1,5 +1,5 @@ // This file is generated automatically. All manually changes will be removed when running the Converter. -// Snow Path mobs +// snow Path mobs 033-1.gat,73,49,10,18|monster|Wolvern|1090,2,100000,30000,Mob033-1::On1090 033-1.gat,33,38,15,49|monster|Reinboo|1094,3,100000,30000,Mob033-1::On1094 diff --git a/world/map/npc/033-1/_warps.txt b/world/map/npc/033-1/_warps.txt index 262973b4..af27cf7a 100644 --- a/world/map/npc/033-1/_warps.txt +++ b/world/map/npc/033-1/_warps.txt @@ -1,5 +1,5 @@ // This file is generated automatically. All manually changes will be removed when running the Converter. -// Snow Path warps +// snow Path warps 033-1.gat,22,20|warp|To Snow Forest|-1,0,034-1.gat,159,19 033-1.gat,119,70|warp|To Snow Field|-1,0,019-1.gat,22,69 diff --git a/world/map/npc/033-1/mapflags.txt b/world/map/npc/033-1/mapflags.txt new file mode 100644 index 00000000..5535662f --- /dev/null +++ b/world/map/npc/033-1/mapflags.txt @@ -0,0 +1 @@ +033-1.gat|mapflag|resave|033-1,67,33 -- cgit v1.2.3-70-g09d2 From 7632f53fd6f0c2accf45983d2885ef596d4bee7e Mon Sep 17 00:00:00 2001 From: wushin Date: Fri, 11 Apr 2014 12:09:39 -0500 Subject: New Core Function Travelers to warp about Checks being moved into functions Warp Towel Behavior changed --- world/map/db/item_db.txt | 22 +- world/map/npc/001-1/traveler.txt | 11 + world/map/npc/002-2/traveler.txt | 11 + world/map/npc/003-1/stranger.txt | 316 ++++++---------- world/map/npc/005-1/traveler.txt | 11 + world/map/npc/006-1/traveler.txt | 11 + world/map/npc/008-1/diryn.txt | 125 +------ world/map/npc/012-3/traveler.txt | 11 + world/map/npc/013-1/traveler.txt | 7 + world/map/npc/013-2/notes.txt | 95 ++++- world/map/npc/020-1/traveler.txt | 7 + world/map/npc/027-1/traveler.txt | 11 + world/map/npc/029-1/traveler.txt | 11 + world/map/npc/033-1/traveler.txt | 11 + world/map/npc/044-1/traveler.txt | 11 + world/map/npc/048-2/traveler.txt | 11 + world/map/npc/055-1/traveler.txt | 11 + world/map/npc/functions/default_npc_checks.txt | 125 +++++++ world/map/npc/functions/soul_menhir.txt | 8 +- world/map/npc/functions/travelers.txt | 279 ++++++++++++++ world/map/npc/items/warpTowels.txt | 490 ++++++++----------------- world/map/npc/scripts.conf | 3 + 22 files changed, 923 insertions(+), 675 deletions(-) create mode 100644 world/map/npc/001-1/traveler.txt create mode 100644 world/map/npc/002-2/traveler.txt create mode 100644 world/map/npc/005-1/traveler.txt create mode 100644 world/map/npc/006-1/traveler.txt create mode 100644 world/map/npc/012-3/traveler.txt create mode 100644 world/map/npc/013-1/traveler.txt create mode 100644 world/map/npc/020-1/traveler.txt create mode 100644 world/map/npc/027-1/traveler.txt create mode 100644 world/map/npc/029-1/traveler.txt create mode 100644 world/map/npc/033-1/traveler.txt create mode 100644 world/map/npc/044-1/traveler.txt create mode 100644 world/map/npc/048-2/traveler.txt create mode 100644 world/map/npc/055-1/traveler.txt create mode 100644 world/map/npc/functions/default_npc_checks.txt create mode 100644 world/map/npc/functions/travelers.txt (limited to 'world/map/npc/033-1') 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 -- cgit v1.2.3-70-g09d2