summaryrefslogtreecommitdiff
path: root/npc/custom/eAAC_Scripts/kafraExpress
diff options
context:
space:
mode:
Diffstat (limited to 'npc/custom/eAAC_Scripts/kafraExpress')
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/Changelog.txt966
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/config.txt800
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt662
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/kafras.txt592
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt350
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt448
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt278
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt1066
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt836
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt810
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt678
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt256
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt260
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt330
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt3522
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt312
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt1000
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt318
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/readme.txt2340
19 files changed, 7912 insertions, 7912 deletions
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/Changelog.txt b/npc/custom/eAAC_Scripts/kafraExpress/Changelog.txt
index aa027b96f..2f9555f1d 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/Changelog.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/Changelog.txt
@@ -1,483 +1,483 @@
-09/February/2006
-* Refine v2.7
-- Fixed buying of ores being free.
-05/February/2006
-* Readme v1.8
-- Added Kafra Shop section
-* Config v1.9
-- Added Kafra Shop section
-* Shop v0.1
-- Initial release
-* Main v5.4
-- Added support for the Kafra Shop
-* Refine v2.6
-- Inverted order of item processing to prevent overweight problems (first the
- items are charged, then you get the refined ones)
-
-08/January/2006
-* Job Swap v3.1
-- Fixed incorrect menu entry causing crash in the 2nd job menu for female classes.
-- Fixed job names from the menu not matching the job you were about to change
- into (bard/dancer adjust was broken)
-- Fixed job revert saying your previous class was always the same as the current.
-
-04/January/2006
-* readme.txt v1.7
-- Added information about the new stat reset variables.
-
-30/December/2005
-* Main v5.3
-- Fixed NPC dialog freezing after healing both HP/SP
-* Stats v2.2
-- Added option to charge reset based on base/job levels.
-* Config v1.8
-- Added reset by level cost options.
-
-20/December/2005
-* Stats v2.1
-- Fixed resets charging you again when selecting return.
-
-12/December/2005
-* Bank v2.7
-- Fixed inifite loop that would trigger on year change.
-
-08/November/2005
-* Dungeon Warping v3.1
-- Fixed a crash when warping to GonRyun
-
-02/November/2005
-* Config v1.7
-- Added Taekwon equipment variables
-- Added dungeon variables for Abyss/Thanatos/Juperos
-
-01/November/2005
-* Job Changer v3.5
-- Clean up and optimized to the new scripting engine.
-- Added Taekwon Class support
-- Acquired items will now display the slot count they have.
-
-31/October/2005
-* Pvp Warps v1.7, Woe Warps v1.7
-- Clean up and optimized to the new scripting engine.
-
-30/October/2005
-* Dungeon Warps v3.0
-- Added Abyss Lake, Thanatos Tower and Juperos.
-
-29/October/2005
-* Dungeon Warps v2.9
-- Clean up and optimized to the new scripting engine.
-
-28/October/2005
-* Refine v2.5, Renter v1.8, Stat Market v2.0, Stats v2.0, Uncard v1.5
-- Clean up and optimized to the new scripting engine.
-
-27/October/2005
-* Broadcast v3.0, Bank v2.6, Dye v1.9, Job Swapper v3.0, Main v5.2
-- Clean up and optimized to the new scripting engine.
-
-14/October/2005
-* Pvp Warps v1.6
-- Fixed standard pvp mode warps.
-
-07/October/2005
-* JobSwapper v2.5
-- Updated to work on the new script engine.
-
-06/October/2005
-* Broadcast v2.8
-- Fixed a bug when broadcasting to Room Four.
-
-17/September/2005
-* Pvp Warps v1.5
-- Made warps random.
-
-04/September/2005
-* Town Warps v1.6
-- Label fix.
-
-11/August/2005
-* PvP Warps v1.4
-- Removed the obtained item, the pvp maps are "no return" areas afterall.
-
-02/August/2005
-* Job Changer v3.2
-- Fixed issues with UpperPolicy = 1 and SkipNovice = 1 not working correctly.
-
-* readme.txt v1.6
-- Updated to reflect current changes.
-
-* Bank v2.5, Broadcast v2.7, Dye v1.7, Job Changer v3,1, Job Swapper v2.4,
- Main v5.0, Refine v2.3, Renting v1.7, StatMarket v1.9, Stats v1.8,
- Uncarder v1.3, Warp Dungeon v2.7, Warp PvP v1.3, Warp Town v1.5, Warp WoE v1.6
-- Updated all 'emotion's to use a e_* constant instead of numbers.
-- Updated function F_keIntro to simplify code.
-- Updated headers to reflect actual script requirements.
-
-* Job Changer v3.0, Job Swapper v2.6, Config v1.6
-- Removed Upper type related code as this is not really implemented in eA.
-
-07/July/2005
-* readme v1.5
-- Updated documentation regarding traveller's mode.
-- Added descriptions for the new variables in the Stat Market.
-
-* Config v1.5
-- Updated comments for Traveller's warp mode.
-- Added variables kesm_skTradeCost, kesm_stTradeCost
-- Removed Gefenia
-
-* Stat Market v1.8
-- Added support for trading directly skills->stats or stats->skills.
-
-* Town Warps v1.4
-- Added again Einbech
-- Added Traveller's Warp mode 2
-
-* Dungeon Warps v2.6
-- Added Traveller's Warp mode 2
-- Sunken Ship Traveller mode bugfix.
-- Removed Gefenia
-
-* Kafras v1.9
-- Readded Einbech's town Kafra
-- Removed Gefenia
-
-05/July/2005
-* Town Warps v1.3
-- Fixed warps being free.
-- Some optimizations.
-
-04/July/2005
-* Job Swap v2.2
-- Fixed script 'freeze' when you don't have enough to revert to the previous job.
-- Fixed job-swapping being free if you did not have enough zeny.
-
-29/June/2005
-* Config v1.4
-- Added LightHalzen Rekkeben Cost
-
-* Dungeon Warps v2.5
-- Added LightHalzen
-- Miscellanous name corrections
-
-* Town Warps v1.2
-- Removed Einbech (it is just a Einbroch Station?)
-- Added LightHalzen
-
-* Kafras v1.8
-- Removed Einbech
-- Added LightHalzen (Town + Dungeon)
-
-* Broadcast v2.6
-- Added variable kebc_showOnline to display count of recipients.
-
-* Woe Warps v1.5, Town Warps v1.1, Pvp Warps v1.2, Dungeon Warps v1.4, Config v1.2
-- Changed variable kewd_onlineStr to ked_users
-
-* Main v4.9
-- Updated to use the new warp dungeon file.
-- Some cleanup and reorganization of menus.
-
-* Warp Dungeon v2.3
-- Merged Short Warps & Deep Warps into a single file.
-
-* Main v4.8
-- Moved the warping function here.
-- ke_warp_core.txt no longer needed (removed)
-
-* Job Changer v2.9, Job Swapper v2.1
-- Some cleaning
-
-* Config v1.1
-- Reorganized, some cleaning.
-
-28/June/2005
-* readme.txt v1.3
-- Updated and cleaned documentation.
-
-* Warp Town v1.0
-- Branched off Warp Core v3.1
-
-* Warp Core v3.2
-- Removed the Town warp code.
-
-* Main v4.7
-- Reorganized Menus
-
-* Bank v2.4, Broadcast v2.5, Dye v1.6, Job Changer v2.8, Job Swap v2.0,
- Main v4.6, Refine v2.2, Rent v1.6, Stat Market v1.7, Stats v1.7,
- Uncard v1.2, Warp Core v3.1, Warp Deep v2.2, Warp Short v2.1, Warp WoE v1.4
-- Upgraded to use config.txt
-
-27/June/2005
-* Job Swap v1.9
-- Fixed another stupid bug when job-reverting
-
-14/June/2005
-* Job Changer v2.7
-- Stupid fix for changing from adv 1st class to adv 2nd...
-
-10/June/2005
-* Job Swap v1.8
-- Fixed a silly bug with the announce option.
-
-05/June/2005
-* Core Warps v3.0, Short Warps v2.0
-- Bug Fix. kewd_pyramids -> kewd_pyramid
-- kewd_turtle -> kewd_turtleIsland
-
-04/June/2005
-* Core Warps v2.9, Deep Warps v2.1
-- Bug fix related to deep warps.
-- Fixed town warp costs being always zero.
-- Fixed Niflheim cost display when online count is on.
-
-02/June/2005
-* Core Warps v2.7, Short Warps 1.9, Deep Warps 2.0, Kafras v1.7
-- Added Einbech Mines
-
-* Kafras v1.6
-- Updated Kafras with Type 2
-
-* Deep Warp v1.9, Short Warps v1.8
-- Added support for kewd_travel
-
-* Main v4.5
-- Added kewd_travel for traveller's warp system.
-- Moved Warp Menu into this module.
-
-* Pvp Warp v1.0
-- Branched off ke_warp.txt v2.4
-
-* Core Warp v2.5:
-- Added kewt_discount for town warps discount
-- Added kewd_travel for traveller's warp system.
-- Changed cost display for towns, implemented Kafra Pass discount value
-
-1/June/2005
-* Bank v 2.3
-- Added kebk_capacity variable for limited account size.
-- Added kebk_useGlobalBank variable for enabling global counter.
-
-31/May/2005
-* Job Changer v2.5, Job Swapper v1.7
-- Modified code to work around the callfunc/menu bug
-
-* Main v2.4
-- Added SaveOnSpot option
-
-26/May/2005
-* Short Warps v1.7
-- Added option kewd_turtleCave for toggling island/cave warp (Turtle Island)
-
-* Bank v2.1, Broadcast v2.4, Dye v1.5, Main v4.2, Refine v2.1, Renting v1.5
- StatMarket v1.6, Stats v1.6, Uncarder v1.1, Warp Core v2.3, Deep Warps v1.8
- Short Warps v1.6, WoE Warps v1.3, JobSwapper 1.6, JobChanger 2.4
-- Label cleaning & standarization
-
-* JobChanger v2.3
-- Replaced functions with subfunctions
-- Implemented use of new global function GF_getJobId
-
-* JobSwapper v1.5
-- Replaced functions with subfunctions
-- Implemented use of new global function GF_getJobId
-- Added Support for Baby Classes
-
-25/May/2005
-* Kafras v1.5, Bank v2.0, Broadcast v2.3, Dye v1.4, JobChange v2.1,
- JobSwapper v1.3, Main v4.1, Refine v2.0, Renting v1.4, StatMarket v1.5,
- Stats & Resets v1.5, Warp Core v2.2, Deep Warps v1.7, WoE Warps v1.2
-- Header Cleanup
-- Global Variables standarized
-
-* Bank v1.9, Refine v1.8, Warp Core v2.1, Deep Warps v1.6
-- Changed callfunc's to callsub where applicable.
-
-* Broadcast v2.2
-- Changed callfunc's to callsub where applicable.
-- Updated calls to global functions file new version.
-
-* Dye v1.3
-- New variable kedy_clothJWED specifies max dye count for wedding class
-- Changed callfunc's to callsub where applicable.
-- Updated calls to global functions file new version.
-
-* Rent v1.3
-- Removed cost of GrandPeco, simplified script to enable all classes to rent
- anything (as long as they have the required skill)
-- Updated calls to global functions file new version.
-
-* Statmarket v1.4
-- Added some more overflow checks
-
-* Stats v1.4
-- Added ke_resetbasic, specifies if basic skills are reset as well.
-
-* JobChanger v2.0
-- Restructured, updated to work with Baby Classes
-
-* UnCarder v1.0
-- Initial Release
-
-01/Apr/2005
-* Kafras v1.5
-- Updated Niflheim Kafra type
-
-* Warp Core v2.0
-- Added Nifflheim Quest Support
-- Added Ayothaya Dungeon Cost
-
-* Warp Short v1.5, Warp Deep v1.5
-- Added Ayothaya Dungeon
-- Changed callfunc's to callsub where appliable.
-
-31/Mar/2005
-* Core Module v4.0
-- Added charge functions for Kafra Pass calculations
-- Added Nifflheim Quest Support
-
-* Broadcast v2.1, JobSwaper v1.2, Renting v1.1, StatMarket v1.3,
-* Stats v1.3, Core Warping v1.9, Deep Warping v1.4, Short Warping v1.4,
-* Woe Warping v1.1
-- Updated to new charge functions
-
-* Banker v1.8
-- Updated to new charge functions
-- Refined messages when charging monthly and not having enough
-
-* Refiner v1.8
-- Updated to new charge functions
-- Fixed bug where Kafra Pass discount was ignored when repairing equipment
-
-30/Mar/2005
-
-* Warper v1.8
-- Added Cities: Ayothaya, Einbroch, Einbech
-
-* Kafras v1.4
-- Added Kafras for towns: Ayothaya, Einbroch, Einbech
-
-26/Mar/2005
-* Job Changer v1.6
-- Shortened label lengths
-
-15/Mar/2005
-* Job Changer v1.5
-- Fixed infinite loop bug on change from High Novice to High First Class
-
-03/Mar/2005
-* Job Swapper v1.1
-- Added support for saving dye on revert
-- Added support to reset dye on swap
-
-* Job Changer v1.4
-- Added support for dye reset on change
-
-* Stylist v1.2
-- Added support for independent dye ranges per job-class
-
-24/Feb/2005
-* Job Swapper v1.0
-- Initial Release
-
-* Job Changer v1.3
-- Updated to work with the latest GF_getJob version
-
-* BroadCast Module v2.0
-- Updated to work with the latest GF_getJob version
-- Added confirmation before broadcasting
-
-* Core Module v3.8
-- Added support for the Job Swap entry
-- The Kafra image is now removed after the close
-- Added option to not expire Kafra Pass on exit
-
-23/Feb/2005
-* Job Changer v1.2
-- Added alternate weapons when changing at high job levels
-- Added "show details" to display detailed information of what will happen when you change jobs.
-- Added missing '-' on female (archer/thief) raising menu
-- Fixed a typo by which first High Classes could change regardless of job level
-
-19/Feb/2005
-* Job Changer v1.0
-- Initial Release
-
-* Core Module v3.6
-- Added support for the Job change entry
-
-18/Feb/2005
-* Dye v1.1
-- Added a missing 'end;' on the OnInit event
-
-* Stat Market v1.2
-- Added a missing 'end;' on the OnInit event
-
-* Stat/Reset System v1.2
-- Added a missing 'end;' on the OnInit event
-
-16/Feb/2005
-* Broadcasting v1.8
-- Updated use of GF_getJob
-
-11/Feb/2005
-* Warping Deep/Short v1.3
-- Updated Amatsu Entrance Warp
-
-01/Feb/2005
-* Bank Module v1.7
-- Fixed Monthly costs
-- Added overflow protection
-
-26/Jan/2005
-* Stat Market v1.1
-- Fixed overflow exploit when qty*price overflows.
-
-* Refining System v1.7
-- Fixed overflow exploit when qty*price overflows.
-
-* Banking Module v1.6
-- Added maximum transaction costs
-
-12/Jan/2005
-* Core Module v3.5
-- Fixed Negative Bug exploit on regular storage
-- Added Guild Storage Support
-
-* Banking Module v1.5
-- Fixed bug when gaining interests between years
-- Added monthly maintenance fees
-- Added minimum transaction costs
-
-* Refine Module v1.6
-- Added option to display success/failure chances
-- Item names are displayed now using getitemname()
-
-* Core Warping Module v.1.7
-- Minor name corrections
-- Added entry for Guild Wars warping
-
-* Deep Warping Module v1.2
-- Minor name corrections
-- Changed Orcs Dungeon warping location
-
-* Short Warping Module v.1.2
-- Minor name corrections
-- Changed Orcs Dungeon warping location
-
-* WoE Warping Module v1.0
-- Initial Release
-
-20/Nov/2004
-* Core Module v3.2
-- Fixed Kafra Image not being removed when opening storage
-
-* Warp Core Module v1.6
-- Expanded PvP system to use 8x5 rooms
-
-* Broadcast Module v1.7
-- Expanded to include new PvP rooms
-
--- Too old to remember :P
+09/February/2006
+* Refine v2.7
+- Fixed buying of ores being free.
+05/February/2006
+* Readme v1.8
+- Added Kafra Shop section
+* Config v1.9
+- Added Kafra Shop section
+* Shop v0.1
+- Initial release
+* Main v5.4
+- Added support for the Kafra Shop
+* Refine v2.6
+- Inverted order of item processing to prevent overweight problems (first the
+ items are charged, then you get the refined ones)
+
+08/January/2006
+* Job Swap v3.1
+- Fixed incorrect menu entry causing crash in the 2nd job menu for female classes.
+- Fixed job names from the menu not matching the job you were about to change
+ into (bard/dancer adjust was broken)
+- Fixed job revert saying your previous class was always the same as the current.
+
+04/January/2006
+* readme.txt v1.7
+- Added information about the new stat reset variables.
+
+30/December/2005
+* Main v5.3
+- Fixed NPC dialog freezing after healing both HP/SP
+* Stats v2.2
+- Added option to charge reset based on base/job levels.
+* Config v1.8
+- Added reset by level cost options.
+
+20/December/2005
+* Stats v2.1
+- Fixed resets charging you again when selecting return.
+
+12/December/2005
+* Bank v2.7
+- Fixed inifite loop that would trigger on year change.
+
+08/November/2005
+* Dungeon Warping v3.1
+- Fixed a crash when warping to GonRyun
+
+02/November/2005
+* Config v1.7
+- Added Taekwon equipment variables
+- Added dungeon variables for Abyss/Thanatos/Juperos
+
+01/November/2005
+* Job Changer v3.5
+- Clean up and optimized to the new scripting engine.
+- Added Taekwon Class support
+- Acquired items will now display the slot count they have.
+
+31/October/2005
+* Pvp Warps v1.7, Woe Warps v1.7
+- Clean up and optimized to the new scripting engine.
+
+30/October/2005
+* Dungeon Warps v3.0
+- Added Abyss Lake, Thanatos Tower and Juperos.
+
+29/October/2005
+* Dungeon Warps v2.9
+- Clean up and optimized to the new scripting engine.
+
+28/October/2005
+* Refine v2.5, Renter v1.8, Stat Market v2.0, Stats v2.0, Uncard v1.5
+- Clean up and optimized to the new scripting engine.
+
+27/October/2005
+* Broadcast v3.0, Bank v2.6, Dye v1.9, Job Swapper v3.0, Main v5.2
+- Clean up and optimized to the new scripting engine.
+
+14/October/2005
+* Pvp Warps v1.6
+- Fixed standard pvp mode warps.
+
+07/October/2005
+* JobSwapper v2.5
+- Updated to work on the new script engine.
+
+06/October/2005
+* Broadcast v2.8
+- Fixed a bug when broadcasting to Room Four.
+
+17/September/2005
+* Pvp Warps v1.5
+- Made warps random.
+
+04/September/2005
+* Town Warps v1.6
+- Label fix.
+
+11/August/2005
+* PvP Warps v1.4
+- Removed the obtained item, the pvp maps are "no return" areas afterall.
+
+02/August/2005
+* Job Changer v3.2
+- Fixed issues with UpperPolicy = 1 and SkipNovice = 1 not working correctly.
+
+* readme.txt v1.6
+- Updated to reflect current changes.
+
+* Bank v2.5, Broadcast v2.7, Dye v1.7, Job Changer v3,1, Job Swapper v2.4,
+ Main v5.0, Refine v2.3, Renting v1.7, StatMarket v1.9, Stats v1.8,
+ Uncarder v1.3, Warp Dungeon v2.7, Warp PvP v1.3, Warp Town v1.5, Warp WoE v1.6
+- Updated all 'emotion's to use a e_* constant instead of numbers.
+- Updated function F_keIntro to simplify code.
+- Updated headers to reflect actual script requirements.
+
+* Job Changer v3.0, Job Swapper v2.6, Config v1.6
+- Removed Upper type related code as this is not really implemented in eA.
+
+07/July/2005
+* readme v1.5
+- Updated documentation regarding traveller's mode.
+- Added descriptions for the new variables in the Stat Market.
+
+* Config v1.5
+- Updated comments for Traveller's warp mode.
+- Added variables kesm_skTradeCost, kesm_stTradeCost
+- Removed Gefenia
+
+* Stat Market v1.8
+- Added support for trading directly skills->stats or stats->skills.
+
+* Town Warps v1.4
+- Added again Einbech
+- Added Traveller's Warp mode 2
+
+* Dungeon Warps v2.6
+- Added Traveller's Warp mode 2
+- Sunken Ship Traveller mode bugfix.
+- Removed Gefenia
+
+* Kafras v1.9
+- Readded Einbech's town Kafra
+- Removed Gefenia
+
+05/July/2005
+* Town Warps v1.3
+- Fixed warps being free.
+- Some optimizations.
+
+04/July/2005
+* Job Swap v2.2
+- Fixed script 'freeze' when you don't have enough to revert to the previous job.
+- Fixed job-swapping being free if you did not have enough zeny.
+
+29/June/2005
+* Config v1.4
+- Added LightHalzen Rekkeben Cost
+
+* Dungeon Warps v2.5
+- Added LightHalzen
+- Miscellanous name corrections
+
+* Town Warps v1.2
+- Removed Einbech (it is just a Einbroch Station?)
+- Added LightHalzen
+
+* Kafras v1.8
+- Removed Einbech
+- Added LightHalzen (Town + Dungeon)
+
+* Broadcast v2.6
+- Added variable kebc_showOnline to display count of recipients.
+
+* Woe Warps v1.5, Town Warps v1.1, Pvp Warps v1.2, Dungeon Warps v1.4, Config v1.2
+- Changed variable kewd_onlineStr to ked_users
+
+* Main v4.9
+- Updated to use the new warp dungeon file.
+- Some cleanup and reorganization of menus.
+
+* Warp Dungeon v2.3
+- Merged Short Warps & Deep Warps into a single file.
+
+* Main v4.8
+- Moved the warping function here.
+- ke_warp_core.txt no longer needed (removed)
+
+* Job Changer v2.9, Job Swapper v2.1
+- Some cleaning
+
+* Config v1.1
+- Reorganized, some cleaning.
+
+28/June/2005
+* readme.txt v1.3
+- Updated and cleaned documentation.
+
+* Warp Town v1.0
+- Branched off Warp Core v3.1
+
+* Warp Core v3.2
+- Removed the Town warp code.
+
+* Main v4.7
+- Reorganized Menus
+
+* Bank v2.4, Broadcast v2.5, Dye v1.6, Job Changer v2.8, Job Swap v2.0,
+ Main v4.6, Refine v2.2, Rent v1.6, Stat Market v1.7, Stats v1.7,
+ Uncard v1.2, Warp Core v3.1, Warp Deep v2.2, Warp Short v2.1, Warp WoE v1.4
+- Upgraded to use config.txt
+
+27/June/2005
+* Job Swap v1.9
+- Fixed another stupid bug when job-reverting
+
+14/June/2005
+* Job Changer v2.7
+- Stupid fix for changing from adv 1st class to adv 2nd...
+
+10/June/2005
+* Job Swap v1.8
+- Fixed a silly bug with the announce option.
+
+05/June/2005
+* Core Warps v3.0, Short Warps v2.0
+- Bug Fix. kewd_pyramids -> kewd_pyramid
+- kewd_turtle -> kewd_turtleIsland
+
+04/June/2005
+* Core Warps v2.9, Deep Warps v2.1
+- Bug fix related to deep warps.
+- Fixed town warp costs being always zero.
+- Fixed Niflheim cost display when online count is on.
+
+02/June/2005
+* Core Warps v2.7, Short Warps 1.9, Deep Warps 2.0, Kafras v1.7
+- Added Einbech Mines
+
+* Kafras v1.6
+- Updated Kafras with Type 2
+
+* Deep Warp v1.9, Short Warps v1.8
+- Added support for kewd_travel
+
+* Main v4.5
+- Added kewd_travel for traveller's warp system.
+- Moved Warp Menu into this module.
+
+* Pvp Warp v1.0
+- Branched off ke_warp.txt v2.4
+
+* Core Warp v2.5:
+- Added kewt_discount for town warps discount
+- Added kewd_travel for traveller's warp system.
+- Changed cost display for towns, implemented Kafra Pass discount value
+
+1/June/2005
+* Bank v 2.3
+- Added kebk_capacity variable for limited account size.
+- Added kebk_useGlobalBank variable for enabling global counter.
+
+31/May/2005
+* Job Changer v2.5, Job Swapper v1.7
+- Modified code to work around the callfunc/menu bug
+
+* Main v2.4
+- Added SaveOnSpot option
+
+26/May/2005
+* Short Warps v1.7
+- Added option kewd_turtleCave for toggling island/cave warp (Turtle Island)
+
+* Bank v2.1, Broadcast v2.4, Dye v1.5, Main v4.2, Refine v2.1, Renting v1.5
+ StatMarket v1.6, Stats v1.6, Uncarder v1.1, Warp Core v2.3, Deep Warps v1.8
+ Short Warps v1.6, WoE Warps v1.3, JobSwapper 1.6, JobChanger 2.4
+- Label cleaning & standarization
+
+* JobChanger v2.3
+- Replaced functions with subfunctions
+- Implemented use of new global function GF_getJobId
+
+* JobSwapper v1.5
+- Replaced functions with subfunctions
+- Implemented use of new global function GF_getJobId
+- Added Support for Baby Classes
+
+25/May/2005
+* Kafras v1.5, Bank v2.0, Broadcast v2.3, Dye v1.4, JobChange v2.1,
+ JobSwapper v1.3, Main v4.1, Refine v2.0, Renting v1.4, StatMarket v1.5,
+ Stats & Resets v1.5, Warp Core v2.2, Deep Warps v1.7, WoE Warps v1.2
+- Header Cleanup
+- Global Variables standarized
+
+* Bank v1.9, Refine v1.8, Warp Core v2.1, Deep Warps v1.6
+- Changed callfunc's to callsub where applicable.
+
+* Broadcast v2.2
+- Changed callfunc's to callsub where applicable.
+- Updated calls to global functions file new version.
+
+* Dye v1.3
+- New variable kedy_clothJWED specifies max dye count for wedding class
+- Changed callfunc's to callsub where applicable.
+- Updated calls to global functions file new version.
+
+* Rent v1.3
+- Removed cost of GrandPeco, simplified script to enable all classes to rent
+ anything (as long as they have the required skill)
+- Updated calls to global functions file new version.
+
+* Statmarket v1.4
+- Added some more overflow checks
+
+* Stats v1.4
+- Added ke_resetbasic, specifies if basic skills are reset as well.
+
+* JobChanger v2.0
+- Restructured, updated to work with Baby Classes
+
+* UnCarder v1.0
+- Initial Release
+
+01/Apr/2005
+* Kafras v1.5
+- Updated Niflheim Kafra type
+
+* Warp Core v2.0
+- Added Nifflheim Quest Support
+- Added Ayothaya Dungeon Cost
+
+* Warp Short v1.5, Warp Deep v1.5
+- Added Ayothaya Dungeon
+- Changed callfunc's to callsub where appliable.
+
+31/Mar/2005
+* Core Module v4.0
+- Added charge functions for Kafra Pass calculations
+- Added Nifflheim Quest Support
+
+* Broadcast v2.1, JobSwaper v1.2, Renting v1.1, StatMarket v1.3,
+* Stats v1.3, Core Warping v1.9, Deep Warping v1.4, Short Warping v1.4,
+* Woe Warping v1.1
+- Updated to new charge functions
+
+* Banker v1.8
+- Updated to new charge functions
+- Refined messages when charging monthly and not having enough
+
+* Refiner v1.8
+- Updated to new charge functions
+- Fixed bug where Kafra Pass discount was ignored when repairing equipment
+
+30/Mar/2005
+
+* Warper v1.8
+- Added Cities: Ayothaya, Einbroch, Einbech
+
+* Kafras v1.4
+- Added Kafras for towns: Ayothaya, Einbroch, Einbech
+
+26/Mar/2005
+* Job Changer v1.6
+- Shortened label lengths
+
+15/Mar/2005
+* Job Changer v1.5
+- Fixed infinite loop bug on change from High Novice to High First Class
+
+03/Mar/2005
+* Job Swapper v1.1
+- Added support for saving dye on revert
+- Added support to reset dye on swap
+
+* Job Changer v1.4
+- Added support for dye reset on change
+
+* Stylist v1.2
+- Added support for independent dye ranges per job-class
+
+24/Feb/2005
+* Job Swapper v1.0
+- Initial Release
+
+* Job Changer v1.3
+- Updated to work with the latest GF_getJob version
+
+* BroadCast Module v2.0
+- Updated to work with the latest GF_getJob version
+- Added confirmation before broadcasting
+
+* Core Module v3.8
+- Added support for the Job Swap entry
+- The Kafra image is now removed after the close
+- Added option to not expire Kafra Pass on exit
+
+23/Feb/2005
+* Job Changer v1.2
+- Added alternate weapons when changing at high job levels
+- Added "show details" to display detailed information of what will happen when you change jobs.
+- Added missing '-' on female (archer/thief) raising menu
+- Fixed a typo by which first High Classes could change regardless of job level
+
+19/Feb/2005
+* Job Changer v1.0
+- Initial Release
+
+* Core Module v3.6
+- Added support for the Job change entry
+
+18/Feb/2005
+* Dye v1.1
+- Added a missing 'end;' on the OnInit event
+
+* Stat Market v1.2
+- Added a missing 'end;' on the OnInit event
+
+* Stat/Reset System v1.2
+- Added a missing 'end;' on the OnInit event
+
+16/Feb/2005
+* Broadcasting v1.8
+- Updated use of GF_getJob
+
+11/Feb/2005
+* Warping Deep/Short v1.3
+- Updated Amatsu Entrance Warp
+
+01/Feb/2005
+* Bank Module v1.7
+- Fixed Monthly costs
+- Added overflow protection
+
+26/Jan/2005
+* Stat Market v1.1
+- Fixed overflow exploit when qty*price overflows.
+
+* Refining System v1.7
+- Fixed overflow exploit when qty*price overflows.
+
+* Banking Module v1.6
+- Added maximum transaction costs
+
+12/Jan/2005
+* Core Module v3.5
+- Fixed Negative Bug exploit on regular storage
+- Added Guild Storage Support
+
+* Banking Module v1.5
+- Fixed bug when gaining interests between years
+- Added monthly maintenance fees
+- Added minimum transaction costs
+
+* Refine Module v1.6
+- Added option to display success/failure chances
+- Item names are displayed now using getitemname()
+
+* Core Warping Module v.1.7
+- Minor name corrections
+- Added entry for Guild Wars warping
+
+* Deep Warping Module v1.2
+- Minor name corrections
+- Changed Orcs Dungeon warping location
+
+* Short Warping Module v.1.2
+- Minor name corrections
+- Changed Orcs Dungeon warping location
+
+* WoE Warping Module v1.0
+- Initial Release
+
+20/Nov/2004
+* Core Module v3.2
+- Fixed Kafra Image not being removed when opening storage
+
+* Warp Core Module v1.6
+- Expanded PvP system to use 8x5 rooms
+
+* Broadcast Module v1.7
+- Expanded to include new PvP rooms
+
+-- Too old to remember :P
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/config.txt b/npc/custom/eAAC_Scripts/kafraExpress/config.txt
index 1e2bf3e1b..4848cb88c 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/config.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/config.txt
@@ -1,400 +1,400 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Config Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 1.8
-//===== Compatible With: =====================================
-//= Any eAthena Version with function support
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= This module contains the configuration of all modules.
-//===== Additional Comments: =================================
-//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
-//= for indepth explanation of the Kafra Express Script Package.
-//============================================================
-
-- script keConfig -1,{
- //-------------------------------------------------------------------------------
- //Config for the Main Module
- //-------------------------------------------------------------------------------
-OnInit:
- set $@ke_saveOnSpot,0; //If 1, the respawn point is saved where the char is standing.
- set $@keh_hpCost,10; //Cost of HP healing (per 10HP)
- set $@keh_spCost,100; //Cost of SP healing (per 10SP)
- set $@kes_cost,50; //Cost of opening the storage
- set $@kegs_cost,500; //Cost of opening the guild storage
-
- //Kafra Pass Options:
- set $@kekp_reset,1; //Kafra passes Expire when you speak to a Kafra?
- //(otherwise duration is as long as a temporary variable)
- set $@kekp_reserveCost,100; //Cost of each Reserve Point in Zeny (0 disable)
- set $@kekp_minReserve,1; //Min Reserve Points you can earn in a single transaction
- set $@kekp_maxReserve,150; //Max Reserve Points you can earn in a single transaction
-
- //Display Options
- set $@ked_users$,"people"; //String used when referring to people (player count).
- // Values like "ppl", "users" or "on" are also recommended.
- end;
- //-------------------------------------------------------------------------------
- //Config for the Bank Module
- //-------------------------------------------------------------------------------
-OnLoadBank:
- set $@kebk_depositCost,0; //Fee for bank deposits in % (10 = 10%)
- set $@kebk_withdrawCost,5; //Fee for bank withdrawals in % (10 = 10%)
- set $@kebk_minTransact,1000; //Value of the Minimum Transaction (deposit/withdraw)
- set $@kebk_maxTransact,999999; //Value of the Maximum Transaction (deposit/withdraw)
- set $@kebk_capacity,99999999; //Account capacity: Max zeny that can be held.
- set $@kebk_dayInterest,10; //Savings daily interests in 0.01% units (100 = 1%)
- set $@kebk_monMaintenance,1000; //Monthly flat fee charged for account maintenance
- set $@kebk_useGlobalBank,0; //When 1, all charged fees go to $ke_globalbank
- end;
- //-------------------------------------------------------------------------------
- //Config for the Broadcast Module
- //-------------------------------------------------------------------------------
-OnLoadBroadcast:
- //Following costs are for current map costs:
- set $@kebc_showOnline,0; //if 1, count of recipients will be listed.
- set $@kebc_partyCost,2500; //party request broadcast cost
- set $@kebc_pvpCost,5000; //pvp request broadcast cost
- set $@kebc_cost,10000; //general broadcast cost
- set $@kebc_anonCost,100000; //anonymous broadcast cost
- set $@kebc_globalFactor,1000; //When doing server bcs, the prices are increased by this amount (500 = 500% = 5x)
- set $@kebc_discount,15; //% Discount to apply when the KafraPass is active
- end;
- //-------------------------------------------------------------------------------
- //Config for the Dye and Stylist Module
- //-------------------------------------------------------------------------------
-OnLoadDye:
- set $@kedy_enableHairstyle,0; //Set to 1 to enable haircut style change.
- set $@kedy_styles,23; //Highest available haircut style (default 23)
- set $@kedy_hair,8; //Highest available hair dye (RO default is 8)
-
- //Highest available cloth dye depending on job-class
- set $@kedy_clothJN,77; //Novice (+High/Baby)
- set $@kedy_clothJ1ST,77; //1st Jobs (+High/Baby)
- set $@kedy_clothJ2ND,77; //2nd Jobs (+High/Baby)
- set $@kedy_clothJSN,77; //Super Novice (+Baby)
- set $@kedy_clothJWED,77; //Wedding Class
- end;
- //-------------------------------------------------------------------------------
- //Config for the Job Changer Module
- //-------------------------------------------------------------------------------
-OnLoadJobChange:
- set $@kejc_skillsPolicy,0; //Remaining Skill Points Policy:
- //0: Do not allow job changing until points are used up
- //1: Discard the remaining skill points
- //2: Let extra skill points be carried to next job
-
- set $@kejc_upperPolicy,0; //Upper Job management policy:
- //0: Ignore Mode: People can change in any order
- //1: Force Mode: Job changes are forced on the correct path.
-
- set $@kejc_announce,1; //Do a global announce when someone changes job.
- set $@kejc_resetDye,1; //Set to 1 to reset cloth dye upon change
- set $@kejc_skipNovice,0; //0: Novice needs Job 10 to change, 1: Can Skip Novice Class
- set $@kejc_baseSN,30; //Base lv required to become a Super Novice
-
- //Note that the change costs can be converted into rewards by specifying a negative amount.
- set $@kejc_base2ND,1; //Base lv required to change into a second class
- set $@kejc_job2ND,40; //Job Lv required to change into a second Class
- set $@kejc_cost2ND,-25000; //Zeny cost when changing into a second Class
-
- set $@kejc_baseRebirth,99; //Base lv required to do the Rebirth
- set $@kejc_jobRebirth,50; //Job Lv required to do the Rebirth
- set $@kejc_costRebirth,1000000; //Zeny cost required to do the Rebirth
-
- set $@kejc_rebirthReset,1; //When changing to a high novice, reset base level to 1?
- set $@kejc_weaponPolicy,1; //Set to 1 to give a weapon upon job change
-
- if ($@kejc_weaponPolicy == 0) //don't touch
- end;
-
- set $@kejc_wBonusLv,50; //Job level for upgraded weapon version, use 0 to disable
-
- //Weapons awarded to each job upon change (use 0 to disable for a particular class)
- //First classes:
- set $@kejc_wAcolyte,1501; //Club
- set $@kejc_wArcher,1701; //Bow
- set $@kejc_wMage,1601; //Rod
- set $@kejc_wMerchant,1301; //Axe
- set $@kejc_wSwordman,1101; //Sword
- set $@kejc_wThief,1201; //Knife
- set $@kejc_wTaekwon,0; //Nothing (they don't wield weapons)
- set $@kejc_wSuperNovice,1202; //Knife
-
- //Normal Weapons for Second classes
- set $@kejc_wPriest,1551; //Bible
- set $@kejc_wMonk,1801; //Waghnak
- set $@kejc_wHunter,1704; //Composite Bow
- set $@kejc_wBard,1901; //Violin
- set $@kejc_wDancer,1950; //Rope
- set $@kejc_wWizard,1602; //Rod
- set $@kejc_wSage,1550; //Book
- set $@kejc_wBlacksmith,1351; //Battle Axe
- set $@kejc_wAlchemist,1351; //Battle Axe
- set $@kejc_wKnight,1116; //Katana
- set $@kejc_wCrusader,1107; //Blade
- set $@kejc_wAssassin,1250; //Jur
- set $@kejc_wRogue,1210; //Cutter
- set $@kejc_wStarGladiator,1550; //Book
- set $@kejc_wSoulLinker,1602; //Rod
-
- if ($@kejc_wBonusLv == 0) //Don't touch.
- end;
-
- //Improved versions awarded to second classes
- set $@kejc_w2Priest,1519; //Chain
- set $@kejc_w2Monk,1811; //Finger
- set $@kejc_w2Hunter,1714; //Gakkung
- set $@kejc_w2Bard,1911; //Guh Moon Goh
- set $@kejc_w2Dancer,1960; //Whip
- set $@kejc_w2Wizard,1610; //Arc Wand
- set $@kejc_w2Sage,1552; //Tablet
- set $@kejc_w2Blacksmith,1360; //Two-Handed Axe
- set $@kejc_w2Alchemist,1360; //Two-Handed Axe
- set $@kejc_w2Knight,1160; //Broad-Sword
- set $@kejc_w2Crusader,1119; //Tsurugi
- set $@kejc_w2Assassin,1254; //Jamadhar
- set $@kejc_w2Rogue,1222; //Damascus
- set $@kejc_w2StarGladiator,1552; //Tablet
- set $@kejc_w2SoulLinker,1610; //Arc Wand
- end;
- //-------------------------------------------------------------------------------
- //Config for the Job Swapping Module
- //-------------------------------------------------------------------------------
-OnLoadJobSwap:
- set $@kejs_SNpolicy,0; //Super Novice is considered as...
- //0: Super Novices can't swap job.
- //1: 1st Class Range: Can only be swapped with First classes (including baby)
-
- set $@kejs_revertPolicy,1; //Allows reverting to the last Class one changed from...
- // 0: do not allow reverting
- // 1: Can revert to last Job ONLY when the last job belongs to the same "level" as
- // the current one. (ie: it is lost on job change/upgrade)
- // 2: Can revert to the last job regardless of situation.
-
- set $@kejs_announce,0; //Do a global announce when someone swaps job.
- set $@kejs_revertCost,100000; //Cost of reverting back to previous Job.
- set $@kejs_saveDye,1; //Set to 1 to save and restore previous dye when reverting
- set $@kejs_resetDye,0; //Set to 1 to reset cloth dye when swapping
- set $@kejs_swapDiscount, 20; //Kafra Pass % Discount when swapping jobs
- set $@kejs_revertDiscount, 20; //Kafra Pass % Discount when reverting to a previous job.
-
- //Minimum Job level required for swapping
- set $@kejs_job1ST,20; //among 1st classes
- set $@kejs_job2ND,50; //among 2nd classes
-
- //Base Cost for swapping job at min job level required
- set $@kejs_cost1ST,25000; //among 1st jobs
- set $@kejs_cost2ND,250000; //among 2nd jobs
-
- //Percentage discount for every level over the minimum
- set $@kejs_discount1ST,3; //among 1st jobs
- set $@kejs_discount2ND,3; //among 2nd jobs
-
- //How much to preserve of the previous Job in %?
- //(25% means that if you change at Lv100, you will become a Lv25 upon swap)
- set $@kejs_preserve1ST,50; //among 1st jobs
- set $@kejs_preserve2ND,0; //among 2nd jobs
- end;
- //-------------------------------------------------------------------------------
- //Config for the Refining Module
- //-------------------------------------------------------------------------------
-OnLoadRefine:
- set $@kerf_maxLv,10; //Max refinement level for equipment
- set $@kerf_safe,0; //Set to 1 to enable 100% safe refinement.
- set $@kerf_showChance,0; //Set to 1 to see the refine Success Chance
- set $@kerf_refineAll,0; //Set to 1 to enable refinement of anything (ie: accesories)
- set $@kerf_discount,0; //Discount % rate for forging when Kafra Pass is active.
- set $@kerf_armorCost,2000; //Cost to refine armor (default 2000z)
- set $@kerf_weaponLv1Cost,50; //Cost to refine lv1 weapons (default 50z)
- set $@kerf_weaponLv2Cost,200; //Cost to refine lv2 weapons (default 200z)
- set $@kerf_weaponLv3Cost,5000; //Cost to refine lv3 weapons (default 5000z)
- set $@kerf_weaponLv4Cost,20000; //Cost to refine lv4 weapons (default 20000z)
- set $@kerf_purifyAll,0; //Set to 1 to enable purifying elemental stones and the like
- set $@kerf_repairCost,10000; //Cost to repair broken equipment.
- set $@kerf_repairDiscount,25; //Discount % rate for repairing when Kafra Pass is active
- set $@kerf_repairSteel,1; //Set to 1 to make repairing equipment require 1 Steel.
- end;
- //-------------------------------------------------------------------------------
- //Config for the Renting Module
- //-------------------------------------------------------------------------------
-OnLoadRent:
- set $@kert_cartOnly, 0; //Set to 1 to enable only cart rental, 0 enables all add-ons.
- set $@kert_cartCost, 1000; //Cost to rent a Cart.
- set $@kert_falconCost, 2000; //Cost to rent a Falcon.
- set $@kert_pecoCost, 2000; //Cost to rent a PecoPeco.
- end;
- //-------------------------------------------------------------------------------
- //Config for the Kafra Shop Module
- //-------------------------------------------------------------------------------
-OnLoadShop:
- set $@kesh_towntype, 0; //Town shop type (1: buy, 2: sell, Other: both)
- set $@kesh_duntype, 2; //Dungeon shop type (1: buy, 2: sell, Other: both)
- set $@kesh_townshop$, "ke_townshop"; //Name of town shop to invoke.
- set $@kesh_dunshop$, "ke_dunshop"; //Name of dungeon shop to invoke.
- end;
- //-------------------------------------------------------------------------------
- //Config for the Stat Market Module
- //-------------------------------------------------------------------------------
-OnLoadStatMarket:
- set $@kesm_stBuyPrice,10000; //Cost of buying stat points
- set $@kesm_stSellPrice,0; //Return cash for selling stat points
- set $@kesm_skBuyPrice,1000000; //Cost of buying skill points
- set $@kesm_skSellPrice,50000; //Return cash for selling skill points
- set $@kesm_skTradePrice, 20; //Stats needed to trade for a skill. (Stat->Skill)
- set $@kesm_stTradePrice, 15; //Stats received per Skill traded. (Skill->Stat)
- set $@kesm_discount,0; //Discount % applied when buying if Kafra Pass is active
- end;
- //-------------------------------------------------------------------------------
- //Config for the Stats Reset/Raising Module
- //-------------------------------------------------------------------------------
-OnLoadStats:
- set $@kest_stResetCost,50000; //Cost to reset stats
- set $@kest_skResetCost,50000; //Cost to reset skills
- set $@kest_resetCost,75000; //Cost to reset both
- set $@kest_BaseLvCost,25000; //Additional cost per base level to reset stats
- set $@kest_JobLvCost,25000; //Additional cost per job level to reset skills
- set $@kest_BothLvCost,20000; //Additional cost per base+job level to reset both
-
- set $@kest_discount,15; //Discount % to be applied when Kafra Pass is active.
- set $@kest_resetBasic,0; //Set to 1 if you want basic skills resetted as well.
- end;
- //-------------------------------------------------------------------------------
- //Config for the Uncarding Module
- //-------------------------------------------------------------------------------
-OnLoadUncard:
- set $@keuc_BaseCost, 100000; //Base Cost
- set $@keuc_CardCost, 25000; //Extra Cost per Card
- set $@keuc_UpgradeCostA, 1000; //Extra Cost per Upgrade, Armor
- set $@keuc_UpgradeCostW1, 1000; //Extra Cost per Upgrade, Weapons Lv1
- set $@keuc_UpgradeCostW2, 2000; //Extra Cost per Upgrade, Weapons Lv2
- set $@keuc_UpgradeCostW3, 3000; //Extra Cost per Upgrade, Weapons Lv3
- set $@keuc_UpgradeCostW4, 5000; //Extra Cost per Upgrade, Weapons Lv4
- set $@keuc_discount, 10; //% Discount when using a Kafra Pass
- set $@keuc_Mat1,1000; //Material #1 needed (Star Crumb)
- set $@keuc_Qty1,1; //Qty of material #1 needed (use 0 to disable)
- set $@keuc_Mat2,715; //Material #2 needed (Yellow Gemstone)
- set $@keuc_Qty2,1; //Qty of material #2 needed (use 0 to disable)
-
- //Failure Chances. 1000 = 100.0%, set to 0 to disable failing chance.
- set $@keuc_Fail0Chance, 250; //Chance of harmless failure
- set $@keuc_Fail1Chance, 100; //Chance of losing item OR card
- set $@keuc_Fail2Chance, 25; //Chance of losing both
- end;
- //-------------------------------------------------------------------------------
- //Config for the Town Warps Module
- //-------------------------------------------------------------------------------
-OnLoadWarpTown:
- set $@kewt_showOnline,1; //Set to 1 to show online count on cities
- set $@kewt_cost, 1000; //Cost of warping to a town
- set $@kewt_niflCost, 5000; //Cost of warping to Niflheim
- set $@kewt_travel, 0; //Traveller's Mode type for towns:
- //0: Disabled (normal warping)
- //1: You can only warp to towns you've been before (per character basis)
- //2: You can only warp to towns you've been before (per account basis)
- set $@kewt_free, 0; //Set to 1 to let people warp to towns even when poor
- set $@kewt_discount, 100; //Discount % to apply when the Kafra Pass is active (towns)
- end;
- //-------------------------------------------------------------------------------
- //Config for the Dungeons Warps Module
- //-------------------------------------------------------------------------------
-OnLoadWarpDungeon:
- set $@kewd_showOnline,0; //Set to 1 to show online count on dungeons
- set $@kewd_discount, 50; //Discount % to apply when the Kafra Pass is active
- set $@kewd_travel, 0; //Traveller's mode type for dungeons:
- //0: Disabled (normal warping)
- //1: You can only warp to dungeons you've been before (per character basis)
- //2: You can only warp to dungeons you've been before (per account basis)
- set $@kewd_deep, 1; //If 1, people can warp to all levels of dungeons.
- //If 0, people can only warp to the entrance of dungeons.
-
- //Variables for Deep Warping
- set $@kewd_levelCost, 30; // cost % increase for warping to floors deep into the dungeon
- set $@kewd_entryDiscount, 25; //Discount % when using the Kafra right next to the dungeon one is warping into
-
- //Variables for Short Warping
- set $@kewd_turtleCave,0; //If 1, Turtle Island's warp leads to the
- //entrance of the cave, not the Island's shore.
-
- //Dungeon Costs
- set $@kewd_abyssLake,5000; //Abyss Lake base cost
- set $@kewd_amatsu,2500; //Amatsu Dungeon base cost
- set $@kewd_antHell,1750; //Anthell base cost
- set $@kewd_ayothaya,1750; //Ayothaya Dungeon base cost
- set $@kewd_byalan,1250; //Byalan base cost
- set $@kewd_comodo,2500; //Comodo Caves base cost
- set $@kewd_clockTower,6250; //Clock Tower base cost
- set $@kewd_coalMines,3750; //Coal Mines base cost
- set $@kewd_culvert,500; //Prontera Culvert base cost
- set $@kewd_einbech,5000; //Einbech Mines base cost
- set $@kewd_gefenia,25000; //Gefenia base cost
- set $@kewd_geffen,5000; //Geffen Dungeon base cost
- set $@kewd_glastHeim,10000; //Glast Heim base cost
- set $@kewd_gonRyun,3750; //Gonryun Dungeon base cost
- set $@kewd_hiddenTemple,250; //Hidden Temple base cost
- set $@kewd_juperos,7500; //Juperos base cost
- set $@kewd_lightHalzen,15000; //LightHalzen Rekkenber base cost
- set $@kewd_louYang,2500; //Louyang Dungeon base cost
- set $@kewd_magma,3750; //Magma Dungeon base cost
- set $@kewd_orc,2500; //Orc Dungeon base cost
- set $@kewd_payon,1100; //Payon Dungeon base cost
- set $@kewd_pyramid,2500; //Pyramids base cost
- set $@kewd_sphinx,1750; //Sphinx base cost
- set $@kewd_sunkenShip,1000; //Sunken Ship base cost
- set $@kewd_thanatosTower,15000; //Thanatos Tower base cost
- set $@kewd_toyFactory,2500; //Toy Factory base cost
- set $@kewd_turtleIsland,12500; //Turtle Island base cost
- set $@kewd_umbala,3550; //Umbala Dungeon base cost
- end;
- //-------------------------------------------------------------------------------
- //Config for the Pvp Warps Module
- //-------------------------------------------------------------------------------
-OnLoadWarpPvp:
- set $@kewp_showOnline,1; //Set to 1 to show online count on pvp maps
- set $@kewp_advanced,0; //Set to 0 to enable a single group of pvp rooms
- //(no level restrictions, kewp_cost is used)
- set $@kewp_cost, 1000; //Cost for Free For All (no level restrictions)
-
- if ($@kewp_advanced == 0) //Don't touch
- end;
-
- set $@kewp_cost1, 100; //Cost of warping to a pvp arena, lvls group 1
- set $@kewp_cost2, 250; //Cost for lvls group 2
- set $@kewp_cost3, 500; //Cost for lvls group 3
- set $@kewp_cost4, 1000; //Cost for lvls group 4
- set $@kewp_cost5, 2000; //Cost for lvls group 5
- set $@kewp_cost6, 4000; //Cost for lvls group 6
- set $@kewp_cost7, 8000; //Cost for lvls group 7
- set $@kewp_baseLv1, 35; //Level required for pvp, lv1
- set $@kewp_baseLv2, 45; //Level required for pvp, lv2
- set $@kewp_baseLv3, 55; //Level required for pvp, lv3
- set $@kewp_baseLv4, 65; //Level required for pvp, lv4
- set $@kewp_baseLv5, 75; //Level required for pvp, lv5
- set $@kewp_baseLv6, 85; //Level required for pvp, lv6
- set $@kewp_baseLv7, 95; //Level required for pvp, lv7
- set $@kewp_range, 5; //Range of levels allowed (ie: Warp to Lv1: levels 10+/-5)
- end;
- //-------------------------------------------------------------------------------
- //Config for the WoE Warps Module
- //-------------------------------------------------------------------------------
-OnLoadWarpWoe:
- //Note: See ke_warp_woe.txt for instructions on how to unlock the Guild Dungeons.
- set $@kewg_check,1; //If 0, people don't need to belong to a Guild to warp
- set $@kewg_checkAgit,1; //If 1, you can't warp until WoE starts
- set $@kewg_showOnline,0; //Set to 1 to show online count and Castle Status
- set $@kewg_discount,20; //Kafra Pass discount for WoE warps
-
- set $@kewg_baldur, 25000; //Guild Dungeon - Baldur
- set $@kewg_luina, 25000; //Guild Dungeon - Luina
- set $@kewg_valkyrie, 25000; //Guild Dungeon - Valkyrie
- set $@kewg_britoniah, 25000; //Guild Dungeon - Britoniah
-
- set $@kewg_alDeBaran, 2500; //Al De Baran Guild
- set $@kewg_geffen, 2500; //Geffen Guild
- set $@kewg_payon, 2500; //Payon Guild
- set $@kewg_prontera, 2500; //Prontera Guild
- end;
- //-------------------------------------------------------------------------------
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Config Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 1.8
+//===== Compatible With: =====================================
+//= Any eAthena Version with function support
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= This module contains the configuration of all modules.
+//===== Additional Comments: =================================
+//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
+//= for indepth explanation of the Kafra Express Script Package.
+//============================================================
+
+- script keConfig -1,{
+ //-------------------------------------------------------------------------------
+ //Config for the Main Module
+ //-------------------------------------------------------------------------------
+OnInit:
+ set $@ke_saveOnSpot,0; //If 1, the respawn point is saved where the char is standing.
+ set $@keh_hpCost,10; //Cost of HP healing (per 10HP)
+ set $@keh_spCost,100; //Cost of SP healing (per 10SP)
+ set $@kes_cost,50; //Cost of opening the storage
+ set $@kegs_cost,500; //Cost of opening the guild storage
+
+ //Kafra Pass Options:
+ set $@kekp_reset,1; //Kafra passes Expire when you speak to a Kafra?
+ //(otherwise duration is as long as a temporary variable)
+ set $@kekp_reserveCost,100; //Cost of each Reserve Point in Zeny (0 disable)
+ set $@kekp_minReserve,1; //Min Reserve Points you can earn in a single transaction
+ set $@kekp_maxReserve,150; //Max Reserve Points you can earn in a single transaction
+
+ //Display Options
+ set $@ked_users$,"people"; //String used when referring to people (player count).
+ // Values like "ppl", "users" or "on" are also recommended.
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Bank Module
+ //-------------------------------------------------------------------------------
+OnLoadBank:
+ set $@kebk_depositCost,0; //Fee for bank deposits in % (10 = 10%)
+ set $@kebk_withdrawCost,5; //Fee for bank withdrawals in % (10 = 10%)
+ set $@kebk_minTransact,1000; //Value of the Minimum Transaction (deposit/withdraw)
+ set $@kebk_maxTransact,999999; //Value of the Maximum Transaction (deposit/withdraw)
+ set $@kebk_capacity,99999999; //Account capacity: Max zeny that can be held.
+ set $@kebk_dayInterest,10; //Savings daily interests in 0.01% units (100 = 1%)
+ set $@kebk_monMaintenance,1000; //Monthly flat fee charged for account maintenance
+ set $@kebk_useGlobalBank,0; //When 1, all charged fees go to $ke_globalbank
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Broadcast Module
+ //-------------------------------------------------------------------------------
+OnLoadBroadcast:
+ //Following costs are for current map costs:
+ set $@kebc_showOnline,0; //if 1, count of recipients will be listed.
+ set $@kebc_partyCost,2500; //party request broadcast cost
+ set $@kebc_pvpCost,5000; //pvp request broadcast cost
+ set $@kebc_cost,10000; //general broadcast cost
+ set $@kebc_anonCost,100000; //anonymous broadcast cost
+ set $@kebc_globalFactor,1000; //When doing server bcs, the prices are increased by this amount (500 = 500% = 5x)
+ set $@kebc_discount,15; //% Discount to apply when the KafraPass is active
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Dye and Stylist Module
+ //-------------------------------------------------------------------------------
+OnLoadDye:
+ set $@kedy_enableHairstyle,0; //Set to 1 to enable haircut style change.
+ set $@kedy_styles,23; //Highest available haircut style (default 23)
+ set $@kedy_hair,8; //Highest available hair dye (RO default is 8)
+
+ //Highest available cloth dye depending on job-class
+ set $@kedy_clothJN,77; //Novice (+High/Baby)
+ set $@kedy_clothJ1ST,77; //1st Jobs (+High/Baby)
+ set $@kedy_clothJ2ND,77; //2nd Jobs (+High/Baby)
+ set $@kedy_clothJSN,77; //Super Novice (+Baby)
+ set $@kedy_clothJWED,77; //Wedding Class
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Job Changer Module
+ //-------------------------------------------------------------------------------
+OnLoadJobChange:
+ set $@kejc_skillsPolicy,0; //Remaining Skill Points Policy:
+ //0: Do not allow job changing until points are used up
+ //1: Discard the remaining skill points
+ //2: Let extra skill points be carried to next job
+
+ set $@kejc_upperPolicy,0; //Upper Job management policy:
+ //0: Ignore Mode: People can change in any order
+ //1: Force Mode: Job changes are forced on the correct path.
+
+ set $@kejc_announce,1; //Do a global announce when someone changes job.
+ set $@kejc_resetDye,1; //Set to 1 to reset cloth dye upon change
+ set $@kejc_skipNovice,0; //0: Novice needs Job 10 to change, 1: Can Skip Novice Class
+ set $@kejc_baseSN,30; //Base lv required to become a Super Novice
+
+ //Note that the change costs can be converted into rewards by specifying a negative amount.
+ set $@kejc_base2ND,1; //Base lv required to change into a second class
+ set $@kejc_job2ND,40; //Job Lv required to change into a second Class
+ set $@kejc_cost2ND,-25000; //Zeny cost when changing into a second Class
+
+ set $@kejc_baseRebirth,99; //Base lv required to do the Rebirth
+ set $@kejc_jobRebirth,50; //Job Lv required to do the Rebirth
+ set $@kejc_costRebirth,1000000; //Zeny cost required to do the Rebirth
+
+ set $@kejc_rebirthReset,1; //When changing to a high novice, reset base level to 1?
+ set $@kejc_weaponPolicy,1; //Set to 1 to give a weapon upon job change
+
+ if ($@kejc_weaponPolicy == 0) //don't touch
+ end;
+
+ set $@kejc_wBonusLv,50; //Job level for upgraded weapon version, use 0 to disable
+
+ //Weapons awarded to each job upon change (use 0 to disable for a particular class)
+ //First classes:
+ set $@kejc_wAcolyte,1501; //Club
+ set $@kejc_wArcher,1701; //Bow
+ set $@kejc_wMage,1601; //Rod
+ set $@kejc_wMerchant,1301; //Axe
+ set $@kejc_wSwordman,1101; //Sword
+ set $@kejc_wThief,1201; //Knife
+ set $@kejc_wTaekwon,0; //Nothing (they don't wield weapons)
+ set $@kejc_wSuperNovice,1202; //Knife
+
+ //Normal Weapons for Second classes
+ set $@kejc_wPriest,1551; //Bible
+ set $@kejc_wMonk,1801; //Waghnak
+ set $@kejc_wHunter,1704; //Composite Bow
+ set $@kejc_wBard,1901; //Violin
+ set $@kejc_wDancer,1950; //Rope
+ set $@kejc_wWizard,1602; //Rod
+ set $@kejc_wSage,1550; //Book
+ set $@kejc_wBlacksmith,1351; //Battle Axe
+ set $@kejc_wAlchemist,1351; //Battle Axe
+ set $@kejc_wKnight,1116; //Katana
+ set $@kejc_wCrusader,1107; //Blade
+ set $@kejc_wAssassin,1250; //Jur
+ set $@kejc_wRogue,1210; //Cutter
+ set $@kejc_wStarGladiator,1550; //Book
+ set $@kejc_wSoulLinker,1602; //Rod
+
+ if ($@kejc_wBonusLv == 0) //Don't touch.
+ end;
+
+ //Improved versions awarded to second classes
+ set $@kejc_w2Priest,1519; //Chain
+ set $@kejc_w2Monk,1811; //Finger
+ set $@kejc_w2Hunter,1714; //Gakkung
+ set $@kejc_w2Bard,1911; //Guh Moon Goh
+ set $@kejc_w2Dancer,1960; //Whip
+ set $@kejc_w2Wizard,1610; //Arc Wand
+ set $@kejc_w2Sage,1552; //Tablet
+ set $@kejc_w2Blacksmith,1360; //Two-Handed Axe
+ set $@kejc_w2Alchemist,1360; //Two-Handed Axe
+ set $@kejc_w2Knight,1160; //Broad-Sword
+ set $@kejc_w2Crusader,1119; //Tsurugi
+ set $@kejc_w2Assassin,1254; //Jamadhar
+ set $@kejc_w2Rogue,1222; //Damascus
+ set $@kejc_w2StarGladiator,1552; //Tablet
+ set $@kejc_w2SoulLinker,1610; //Arc Wand
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Job Swapping Module
+ //-------------------------------------------------------------------------------
+OnLoadJobSwap:
+ set $@kejs_SNpolicy,0; //Super Novice is considered as...
+ //0: Super Novices can't swap job.
+ //1: 1st Class Range: Can only be swapped with First classes (including baby)
+
+ set $@kejs_revertPolicy,1; //Allows reverting to the last Class one changed from...
+ // 0: do not allow reverting
+ // 1: Can revert to last Job ONLY when the last job belongs to the same "level" as
+ // the current one. (ie: it is lost on job change/upgrade)
+ // 2: Can revert to the last job regardless of situation.
+
+ set $@kejs_announce,0; //Do a global announce when someone swaps job.
+ set $@kejs_revertCost,100000; //Cost of reverting back to previous Job.
+ set $@kejs_saveDye,1; //Set to 1 to save and restore previous dye when reverting
+ set $@kejs_resetDye,0; //Set to 1 to reset cloth dye when swapping
+ set $@kejs_swapDiscount, 20; //Kafra Pass % Discount when swapping jobs
+ set $@kejs_revertDiscount, 20; //Kafra Pass % Discount when reverting to a previous job.
+
+ //Minimum Job level required for swapping
+ set $@kejs_job1ST,20; //among 1st classes
+ set $@kejs_job2ND,50; //among 2nd classes
+
+ //Base Cost for swapping job at min job level required
+ set $@kejs_cost1ST,25000; //among 1st jobs
+ set $@kejs_cost2ND,250000; //among 2nd jobs
+
+ //Percentage discount for every level over the minimum
+ set $@kejs_discount1ST,3; //among 1st jobs
+ set $@kejs_discount2ND,3; //among 2nd jobs
+
+ //How much to preserve of the previous Job in %?
+ //(25% means that if you change at Lv100, you will become a Lv25 upon swap)
+ set $@kejs_preserve1ST,50; //among 1st jobs
+ set $@kejs_preserve2ND,0; //among 2nd jobs
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Refining Module
+ //-------------------------------------------------------------------------------
+OnLoadRefine:
+ set $@kerf_maxLv,10; //Max refinement level for equipment
+ set $@kerf_safe,0; //Set to 1 to enable 100% safe refinement.
+ set $@kerf_showChance,0; //Set to 1 to see the refine Success Chance
+ set $@kerf_refineAll,0; //Set to 1 to enable refinement of anything (ie: accesories)
+ set $@kerf_discount,0; //Discount % rate for forging when Kafra Pass is active.
+ set $@kerf_armorCost,2000; //Cost to refine armor (default 2000z)
+ set $@kerf_weaponLv1Cost,50; //Cost to refine lv1 weapons (default 50z)
+ set $@kerf_weaponLv2Cost,200; //Cost to refine lv2 weapons (default 200z)
+ set $@kerf_weaponLv3Cost,5000; //Cost to refine lv3 weapons (default 5000z)
+ set $@kerf_weaponLv4Cost,20000; //Cost to refine lv4 weapons (default 20000z)
+ set $@kerf_purifyAll,0; //Set to 1 to enable purifying elemental stones and the like
+ set $@kerf_repairCost,10000; //Cost to repair broken equipment.
+ set $@kerf_repairDiscount,25; //Discount % rate for repairing when Kafra Pass is active
+ set $@kerf_repairSteel,1; //Set to 1 to make repairing equipment require 1 Steel.
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Renting Module
+ //-------------------------------------------------------------------------------
+OnLoadRent:
+ set $@kert_cartOnly, 0; //Set to 1 to enable only cart rental, 0 enables all add-ons.
+ set $@kert_cartCost, 1000; //Cost to rent a Cart.
+ set $@kert_falconCost, 2000; //Cost to rent a Falcon.
+ set $@kert_pecoCost, 2000; //Cost to rent a PecoPeco.
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Kafra Shop Module
+ //-------------------------------------------------------------------------------
+OnLoadShop:
+ set $@kesh_towntype, 0; //Town shop type (1: buy, 2: sell, Other: both)
+ set $@kesh_duntype, 2; //Dungeon shop type (1: buy, 2: sell, Other: both)
+ set $@kesh_townshop$, "ke_townshop"; //Name of town shop to invoke.
+ set $@kesh_dunshop$, "ke_dunshop"; //Name of dungeon shop to invoke.
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Stat Market Module
+ //-------------------------------------------------------------------------------
+OnLoadStatMarket:
+ set $@kesm_stBuyPrice,10000; //Cost of buying stat points
+ set $@kesm_stSellPrice,0; //Return cash for selling stat points
+ set $@kesm_skBuyPrice,1000000; //Cost of buying skill points
+ set $@kesm_skSellPrice,50000; //Return cash for selling skill points
+ set $@kesm_skTradePrice, 20; //Stats needed to trade for a skill. (Stat->Skill)
+ set $@kesm_stTradePrice, 15; //Stats received per Skill traded. (Skill->Stat)
+ set $@kesm_discount,0; //Discount % applied when buying if Kafra Pass is active
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Stats Reset/Raising Module
+ //-------------------------------------------------------------------------------
+OnLoadStats:
+ set $@kest_stResetCost,50000; //Cost to reset stats
+ set $@kest_skResetCost,50000; //Cost to reset skills
+ set $@kest_resetCost,75000; //Cost to reset both
+ set $@kest_BaseLvCost,25000; //Additional cost per base level to reset stats
+ set $@kest_JobLvCost,25000; //Additional cost per job level to reset skills
+ set $@kest_BothLvCost,20000; //Additional cost per base+job level to reset both
+
+ set $@kest_discount,15; //Discount % to be applied when Kafra Pass is active.
+ set $@kest_resetBasic,0; //Set to 1 if you want basic skills resetted as well.
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Uncarding Module
+ //-------------------------------------------------------------------------------
+OnLoadUncard:
+ set $@keuc_BaseCost, 100000; //Base Cost
+ set $@keuc_CardCost, 25000; //Extra Cost per Card
+ set $@keuc_UpgradeCostA, 1000; //Extra Cost per Upgrade, Armor
+ set $@keuc_UpgradeCostW1, 1000; //Extra Cost per Upgrade, Weapons Lv1
+ set $@keuc_UpgradeCostW2, 2000; //Extra Cost per Upgrade, Weapons Lv2
+ set $@keuc_UpgradeCostW3, 3000; //Extra Cost per Upgrade, Weapons Lv3
+ set $@keuc_UpgradeCostW4, 5000; //Extra Cost per Upgrade, Weapons Lv4
+ set $@keuc_discount, 10; //% Discount when using a Kafra Pass
+ set $@keuc_Mat1,1000; //Material #1 needed (Star Crumb)
+ set $@keuc_Qty1,1; //Qty of material #1 needed (use 0 to disable)
+ set $@keuc_Mat2,715; //Material #2 needed (Yellow Gemstone)
+ set $@keuc_Qty2,1; //Qty of material #2 needed (use 0 to disable)
+
+ //Failure Chances. 1000 = 100.0%, set to 0 to disable failing chance.
+ set $@keuc_Fail0Chance, 250; //Chance of harmless failure
+ set $@keuc_Fail1Chance, 100; //Chance of losing item OR card
+ set $@keuc_Fail2Chance, 25; //Chance of losing both
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Town Warps Module
+ //-------------------------------------------------------------------------------
+OnLoadWarpTown:
+ set $@kewt_showOnline,1; //Set to 1 to show online count on cities
+ set $@kewt_cost, 1000; //Cost of warping to a town
+ set $@kewt_niflCost, 5000; //Cost of warping to Niflheim
+ set $@kewt_travel, 0; //Traveller's Mode type for towns:
+ //0: Disabled (normal warping)
+ //1: You can only warp to towns you've been before (per character basis)
+ //2: You can only warp to towns you've been before (per account basis)
+ set $@kewt_free, 0; //Set to 1 to let people warp to towns even when poor
+ set $@kewt_discount, 100; //Discount % to apply when the Kafra Pass is active (towns)
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Dungeons Warps Module
+ //-------------------------------------------------------------------------------
+OnLoadWarpDungeon:
+ set $@kewd_showOnline,0; //Set to 1 to show online count on dungeons
+ set $@kewd_discount, 50; //Discount % to apply when the Kafra Pass is active
+ set $@kewd_travel, 0; //Traveller's mode type for dungeons:
+ //0: Disabled (normal warping)
+ //1: You can only warp to dungeons you've been before (per character basis)
+ //2: You can only warp to dungeons you've been before (per account basis)
+ set $@kewd_deep, 1; //If 1, people can warp to all levels of dungeons.
+ //If 0, people can only warp to the entrance of dungeons.
+
+ //Variables for Deep Warping
+ set $@kewd_levelCost, 30; // cost % increase for warping to floors deep into the dungeon
+ set $@kewd_entryDiscount, 25; //Discount % when using the Kafra right next to the dungeon one is warping into
+
+ //Variables for Short Warping
+ set $@kewd_turtleCave,0; //If 1, Turtle Island's warp leads to the
+ //entrance of the cave, not the Island's shore.
+
+ //Dungeon Costs
+ set $@kewd_abyssLake,5000; //Abyss Lake base cost
+ set $@kewd_amatsu,2500; //Amatsu Dungeon base cost
+ set $@kewd_antHell,1750; //Anthell base cost
+ set $@kewd_ayothaya,1750; //Ayothaya Dungeon base cost
+ set $@kewd_byalan,1250; //Byalan base cost
+ set $@kewd_comodo,2500; //Comodo Caves base cost
+ set $@kewd_clockTower,6250; //Clock Tower base cost
+ set $@kewd_coalMines,3750; //Coal Mines base cost
+ set $@kewd_culvert,500; //Prontera Culvert base cost
+ set $@kewd_einbech,5000; //Einbech Mines base cost
+ set $@kewd_gefenia,25000; //Gefenia base cost
+ set $@kewd_geffen,5000; //Geffen Dungeon base cost
+ set $@kewd_glastHeim,10000; //Glast Heim base cost
+ set $@kewd_gonRyun,3750; //Gonryun Dungeon base cost
+ set $@kewd_hiddenTemple,250; //Hidden Temple base cost
+ set $@kewd_juperos,7500; //Juperos base cost
+ set $@kewd_lightHalzen,15000; //LightHalzen Rekkenber base cost
+ set $@kewd_louYang,2500; //Louyang Dungeon base cost
+ set $@kewd_magma,3750; //Magma Dungeon base cost
+ set $@kewd_orc,2500; //Orc Dungeon base cost
+ set $@kewd_payon,1100; //Payon Dungeon base cost
+ set $@kewd_pyramid,2500; //Pyramids base cost
+ set $@kewd_sphinx,1750; //Sphinx base cost
+ set $@kewd_sunkenShip,1000; //Sunken Ship base cost
+ set $@kewd_thanatosTower,15000; //Thanatos Tower base cost
+ set $@kewd_toyFactory,2500; //Toy Factory base cost
+ set $@kewd_turtleIsland,12500; //Turtle Island base cost
+ set $@kewd_umbala,3550; //Umbala Dungeon base cost
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the Pvp Warps Module
+ //-------------------------------------------------------------------------------
+OnLoadWarpPvp:
+ set $@kewp_showOnline,1; //Set to 1 to show online count on pvp maps
+ set $@kewp_advanced,0; //Set to 0 to enable a single group of pvp rooms
+ //(no level restrictions, kewp_cost is used)
+ set $@kewp_cost, 1000; //Cost for Free For All (no level restrictions)
+
+ if ($@kewp_advanced == 0) //Don't touch
+ end;
+
+ set $@kewp_cost1, 100; //Cost of warping to a pvp arena, lvls group 1
+ set $@kewp_cost2, 250; //Cost for lvls group 2
+ set $@kewp_cost3, 500; //Cost for lvls group 3
+ set $@kewp_cost4, 1000; //Cost for lvls group 4
+ set $@kewp_cost5, 2000; //Cost for lvls group 5
+ set $@kewp_cost6, 4000; //Cost for lvls group 6
+ set $@kewp_cost7, 8000; //Cost for lvls group 7
+ set $@kewp_baseLv1, 35; //Level required for pvp, lv1
+ set $@kewp_baseLv2, 45; //Level required for pvp, lv2
+ set $@kewp_baseLv3, 55; //Level required for pvp, lv3
+ set $@kewp_baseLv4, 65; //Level required for pvp, lv4
+ set $@kewp_baseLv5, 75; //Level required for pvp, lv5
+ set $@kewp_baseLv6, 85; //Level required for pvp, lv6
+ set $@kewp_baseLv7, 95; //Level required for pvp, lv7
+ set $@kewp_range, 5; //Range of levels allowed (ie: Warp to Lv1: levels 10+/-5)
+ end;
+ //-------------------------------------------------------------------------------
+ //Config for the WoE Warps Module
+ //-------------------------------------------------------------------------------
+OnLoadWarpWoe:
+ //Note: See ke_warp_woe.txt for instructions on how to unlock the Guild Dungeons.
+ set $@kewg_check,1; //If 0, people don't need to belong to a Guild to warp
+ set $@kewg_checkAgit,1; //If 1, you can't warp until WoE starts
+ set $@kewg_showOnline,0; //Set to 1 to show online count and Castle Status
+ set $@kewg_discount,20; //Kafra Pass discount for WoE warps
+
+ set $@kewg_baldur, 25000; //Guild Dungeon - Baldur
+ set $@kewg_luina, 25000; //Guild Dungeon - Luina
+ set $@kewg_valkyrie, 25000; //Guild Dungeon - Valkyrie
+ set $@kewg_britoniah, 25000; //Guild Dungeon - Britoniah
+
+ set $@kewg_alDeBaran, 2500; //Al De Baran Guild
+ set $@kewg_geffen, 2500; //Geffen Guild
+ set $@kewg_payon, 2500; //Payon Guild
+ set $@kewg_prontera, 2500; //Prontera Guild
+ end;
+ //-------------------------------------------------------------------------------
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt b/npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt
index dc2325ff0..5dbe75677 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt
@@ -1,332 +1,332 @@
-//===== eAthena Script =======================================
-//= Global functions
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 1.5
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+, RO Ep6+
-//===== Description: =========================================
-//= Global Functions
-//=
-//===== Additional Comments: =================================
-//= GF_getJobName= function for getting a job's name
-//= GF_getJobName2= gets a jobs name modified by Type (see below)
-//= GF_getJobId= gets a jobs number modified by Type (see below)
-//= GF_getJobLevel= identifies novices/1st/2nd among classes
-//= GF_getJobType= identifies normal/advanced/babies classes
-//= - GF_getJobClass= identifies job class (swordie, mage, etc)
-//============================================================
-
-function script GF_getJobName {
-
- switch (getarg(0)) {
-
- case Job_Novice:
- return "novice";
- case Job_Acolyte:
- return "acolyte";
- case Job_Archer:
- return "archer";
- case Job_Mage:
- return "mage";
- case Job_Merchant:
- return "merchant";
- case Job_Swordman:
- return "swordsman";
- case Job_Thief:
- return "thief";
- case Job_Taekwon:
- return "taekwon kid";
- case Job_SuperNovice:
- return "super novice";
-
- case Job_Hunter:
- return "hunter";
- case Job_Dancer:
- return "dancer";
- case Job_Bard:
- return "bard";
- case Job_Priest:
- return "priest";
- case Job_Monk:
- return "monk";
- case Job_Wizard:
- return "wizard";
- case Job_Sage:
- return "sage";
- case Job_BlackSmith:
- return "blacksmith";
- case Job_Alchem:
- return "alchemist";
- case Job_Knight:
- case Job_Knight2:
- return "knight";
- case Job_Crusader:
- case Job_Crusader2:
- return "crusader";
- case Job_Assassin:
- return "assassin";
- case Job_Rogue:
- return "rogue";
- case Job_Star_Gladiator:
- case Job_Star_Gladiator2:
- return "star gladiator";
- case Job_Soul_Linker:
- return "soul linker";
-
- case Job_Novice_High:
- return "high novice";
- case Job_Acolyte_High:
- return "high acolyte";
- case Job_Archer_High:
- return "high archer";
- case Job_Mage_High:
- return "high mage";
- case Job_Merchant_High:
- return "high merchant";
- case Job_Swordman_High:
- return "high swordsman";
- case Job_Thief_High:
- return "high thief";
-
- case Job_Assassin_Cross:
- return "assassin cross";
- case Job_Champion:
- return "champion";
- case Job_Clown:
- return "minstrel";
- case Job_Creator:
- return "biochemist";
- case Job_Gypsy:
- return "gypsy";
- case Job_High_Priest:
- return "high priest";
- case Job_High_Wizard:
- return "high wizard";
- case Job_Lord_Knight:
- case Job_Lord_Knight2:
- return "lord knight";
- case Job_Paladin:
- case Job_Paladin2:
- return "paladin";
- case Job_Professor:
- return "professor";
- case Job_Sniper:
- return "sniper";
- case Job_Stalker:
- return "stalker";
- case Job_Whitesmith:
- return "whitesmith";
-
- case Job_Baby:
- return "baby";
- case Job_Baby_Acolyte:
- return "baby acolyte";
- case Job_Baby_Archer:
- return "baby archer";
- case Job_Baby_Mage:
- return "baby mage";
- case Job_Baby_Merchant:
- return "baby merchant";
- case Job_Baby_Swordman:
- return "baby swordsman";
- case Job_Baby_Thief:
- return "baby thief";
- case Job_Super_Baby:
- return "super baby";
-
- case Job_Baby_Hunter:
- return "baby hunter";
- case Job_Baby_Dancer:
- return "baby dancer";
- case Job_Baby_Bard:
- return "baby bard";
- case Job_Baby_Priest:
- return "baby priest";
- case Job_Baby_Monk:
- return "baby monk";
- case Job_Baby_Wizard:
- return "baby wizard";
- case Job_Baby_Sage:
- return "baby sage";
- case Job_Baby_BlackSmith:
- return "baby blacksmith";
- case Job_Baby_Alchem:
- return "baby alchemist";
- case Job_Baby_Knight:
- case Job_Baby_Knight2:
- return "baby knight";
- case Job_Baby_Crusader:
- case Job_Baby_Crusader2:
- return "baby crusader";
- case Job_Baby_Assassin:
- return "baby assassin";
- case Job_Baby_Rogue:
- return "baby rogue";
- default:
- return "unknown";
- }
-
-}
-
-//Returns job name using two params: JobId and Type
-function script GF_getJobName2 {
- set @classId, callfunc("GF_getJobId", getarg(0), getarg(1));
- return callfunc("GF_getJobName", @classId);
-}
-
-//Returns a Job's ID modified by their Type
-function script GF_getJobId {
- set @classId, getarg(0);
- set @type, getarg(1);
-
- if (@classId == Job_SuperNovice || @classId == Job_Super_Baby) {
- switch (@type) {
- case 0:
- return Job_SuperNovice;
- case 2:
- return Job_Super_Baby;
- default:
- return @classId;
- }
- }
- if (@classId >= Job_Taekwon && @classId <= Job_Soul_Linker) {
- //Currently has no alternates.
- return @classId;
- }
- if (@classId >= Job_Novice_High && @classId <= Job_Paladin2)
- set @classId, @classId -Job_Novice_High;
- else
- if (@classId >= Job_Baby && @classId <= Job_Super_Baby)
- set @classId, @classId -Job_Baby;
-
- if (@type == 1)
- set @classId, @classId +Job_Novice_High;
-
- if (@type == 2)
- set @classId, @classId +Job_Baby;
-
- return @classId;
-}
-
-//Returns the type of class:
-//0= Novice, 1= First Class, 2= Second Class, 3= Super Novice
-//4= Wedding
-function script GF_getJobLevel {
-
- set @classId, getarg(0);
-
- if (@classId >= Job_Novice_High && @classId <= Job_Paladin2)
- set @classId, @classId -Job_Novice_High;
-
- if (@classId >= Job_Baby && @classId <= Job_Baby_Crusader2)
- set @classId, @classId -Job_Baby;
-
- if(@classId == Job_Novice) {
- return 0;
- }
- if((@classId >= Job_Swordman && @classId <= Job_Thief)
- || @classId == Job_Taekwon) {
- return 1;
- }
- if ((@classId >= Job_Knight && @classId <= Job_Crusader2)
- || (@classId >= Job_Star_Gladiator && @classId <= Job_Soul_Linker)) {
- return 2;
- }
-
- if(@classId == Job_SuperNovice || @classId == Job_Super_Baby) {
- return 3;
- }
- if(@classId == 22) {
- return 4;
- }
- return -1;
-}
-
-//Returns the type of class, based on path:
-//0= Normal Jobs, 1= Upper Jobs, 2= Baby Jobs
-//Works the same as Upper, except you can pass any job id to get it's upper value
-function script GF_getJobType {
- set @classId, getarg(0);
-
- if ((@classId >= Job_Novice && @classId <= Job_SuperNovice)
- || (@classId >= Job_Taekwon && @classId <= Job_Soul_Linker)) {
- return 0;
- }
- if (@classId >= Job_Novice_High && @classId <= Job_Paladin2) {
- return 1;
- }
- if (@classId >= Job_Baby && @classId <= Job_Super_Baby) {
- return 2;
- }
- return -1;
-}
-//Returns the base class of the given job, return values are:
-//Job_Novice (Novice, Baby Novice, Super Novice
-//Job_Acolyte (Aco, Priest, Monk +High/Baby variations)
-//Job_Archer (Archer, Sniper, Bard, Dancer +High/Baby variations)
-//Job_Mage (Mage, Wizard, Sage +High/Baby variations)
-//Job_Swordman (Swordsman, Knight, Crusader +High/Baby variations)
-//Job_Thief (Thief, Assassin, Rogue +High/Baby variations)
-//-1 : others (when wearing Tux/Wedding dress, for example)
-//Works the same as baseClass, except you pass the class which you want
-//examined.
-function script GF_getJobClass {
- set @classId, getarg(0);
-
- if (@classId >= Job_Novice_High && @classId <= Job_Paladin2)
- set @classId, @classId -Job_Novice_High;
-
- if (@classId >= Job_Baby && @classId <= Job_Baby_Crusader2)
- set @classId, @classId -Job_Baby;
-
- switch (@classId) {
- case Job_Novice:
- case Job_SuperNovice:
- case Job_Super_Baby:
- return Job_Novice;
-
- case Job_Acolyte:
- case Job_Priest:
- case Job_Monk:
- return Job_Acolyte;
-
- case Job_Archer:
- case Job_Hunter:
- case Job_Bard:
- case Job_Dancer:
- return Job_Archer;
-
- case Job_Mage:
- case Job_Wizard:
- case Job_Sage:
- return Job_Mage;
-
- case Job_Merchant:
- case Job_BlackSmith:
- case Job_Alchem:
- return Job_Merchant;
-
- case Job_Swordman:
- case Job_Knight:
- case Job_Knight2:
- case Job_Paladin:
- case Job_Paladin2:
- return Job_Swordman;
-
- case Job_Thief:
- case Job_Assassin:
- case Job_Rogue:
- return Job_Thief;
-
- case Job_Taekwon:
- case Job_Star_Gladiator:
- case Job_Star_Gladiator2:
- case Job_Soul_Linker:
- return Job_Taekwon;
-
- default:
- return -1;
- }
+//===== eAthena Script =======================================
+//= Global functions
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 1.5
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+, RO Ep6+
+//===== Description: =========================================
+//= Global Functions
+//=
+//===== Additional Comments: =================================
+//= GF_getJobName= function for getting a job's name
+//= GF_getJobName2= gets a jobs name modified by Type (see below)
+//= GF_getJobId= gets a jobs number modified by Type (see below)
+//= GF_getJobLevel= identifies novices/1st/2nd among classes
+//= GF_getJobType= identifies normal/advanced/babies classes
+//= - GF_getJobClass= identifies job class (swordie, mage, etc)
+//============================================================
+
+function script GF_getJobName {
+
+ switch (getarg(0)) {
+
+ case Job_Novice:
+ return "novice";
+ case Job_Acolyte:
+ return "acolyte";
+ case Job_Archer:
+ return "archer";
+ case Job_Mage:
+ return "mage";
+ case Job_Merchant:
+ return "merchant";
+ case Job_Swordman:
+ return "swordsman";
+ case Job_Thief:
+ return "thief";
+ case Job_Taekwon:
+ return "taekwon kid";
+ case Job_SuperNovice:
+ return "super novice";
+
+ case Job_Hunter:
+ return "hunter";
+ case Job_Dancer:
+ return "dancer";
+ case Job_Bard:
+ return "bard";
+ case Job_Priest:
+ return "priest";
+ case Job_Monk:
+ return "monk";
+ case Job_Wizard:
+ return "wizard";
+ case Job_Sage:
+ return "sage";
+ case Job_BlackSmith:
+ return "blacksmith";
+ case Job_Alchem:
+ return "alchemist";
+ case Job_Knight:
+ case Job_Knight2:
+ return "knight";
+ case Job_Crusader:
+ case Job_Crusader2:
+ return "crusader";
+ case Job_Assassin:
+ return "assassin";
+ case Job_Rogue:
+ return "rogue";
+ case Job_Star_Gladiator:
+ case Job_Star_Gladiator2:
+ return "star gladiator";
+ case Job_Soul_Linker:
+ return "soul linker";
+
+ case Job_Novice_High:
+ return "high novice";
+ case Job_Acolyte_High:
+ return "high acolyte";
+ case Job_Archer_High:
+ return "high archer";
+ case Job_Mage_High:
+ return "high mage";
+ case Job_Merchant_High:
+ return "high merchant";
+ case Job_Swordman_High:
+ return "high swordsman";
+ case Job_Thief_High:
+ return "high thief";
+
+ case Job_Assassin_Cross:
+ return "assassin cross";
+ case Job_Champion:
+ return "champion";
+ case Job_Clown:
+ return "minstrel";
+ case Job_Creator:
+ return "biochemist";
+ case Job_Gypsy:
+ return "gypsy";
+ case Job_High_Priest:
+ return "high priest";
+ case Job_High_Wizard:
+ return "high wizard";
+ case Job_Lord_Knight:
+ case Job_Lord_Knight2:
+ return "lord knight";
+ case Job_Paladin:
+ case Job_Paladin2:
+ return "paladin";
+ case Job_Professor:
+ return "professor";
+ case Job_Sniper:
+ return "sniper";
+ case Job_Stalker:
+ return "stalker";
+ case Job_Whitesmith:
+ return "whitesmith";
+
+ case Job_Baby:
+ return "baby";
+ case Job_Baby_Acolyte:
+ return "baby acolyte";
+ case Job_Baby_Archer:
+ return "baby archer";
+ case Job_Baby_Mage:
+ return "baby mage";
+ case Job_Baby_Merchant:
+ return "baby merchant";
+ case Job_Baby_Swordman:
+ return "baby swordsman";
+ case Job_Baby_Thief:
+ return "baby thief";
+ case Job_Super_Baby:
+ return "super baby";
+
+ case Job_Baby_Hunter:
+ return "baby hunter";
+ case Job_Baby_Dancer:
+ return "baby dancer";
+ case Job_Baby_Bard:
+ return "baby bard";
+ case Job_Baby_Priest:
+ return "baby priest";
+ case Job_Baby_Monk:
+ return "baby monk";
+ case Job_Baby_Wizard:
+ return "baby wizard";
+ case Job_Baby_Sage:
+ return "baby sage";
+ case Job_Baby_BlackSmith:
+ return "baby blacksmith";
+ case Job_Baby_Alchem:
+ return "baby alchemist";
+ case Job_Baby_Knight:
+ case Job_Baby_Knight2:
+ return "baby knight";
+ case Job_Baby_Crusader:
+ case Job_Baby_Crusader2:
+ return "baby crusader";
+ case Job_Baby_Assassin:
+ return "baby assassin";
+ case Job_Baby_Rogue:
+ return "baby rogue";
+ default:
+ return "unknown";
+ }
+
+}
+
+//Returns job name using two params: JobId and Type
+function script GF_getJobName2 {
+ set @classId, callfunc("GF_getJobId", getarg(0), getarg(1));
+ return callfunc("GF_getJobName", @classId);
+}
+
+//Returns a Job's ID modified by their Type
+function script GF_getJobId {
+ set @classId, getarg(0);
+ set @type, getarg(1);
+
+ if (@classId == Job_SuperNovice || @classId == Job_Super_Baby) {
+ switch (@type) {
+ case 0:
+ return Job_SuperNovice;
+ case 2:
+ return Job_Super_Baby;
+ default:
+ return @classId;
+ }
+ }
+ if (@classId >= Job_Taekwon && @classId <= Job_Soul_Linker) {
+ //Currently has no alternates.
+ return @classId;
+ }
+ if (@classId >= Job_Novice_High && @classId <= Job_Paladin2)
+ set @classId, @classId -Job_Novice_High;
+ else
+ if (@classId >= Job_Baby && @classId <= Job_Super_Baby)
+ set @classId, @classId -Job_Baby;
+
+ if (@type == 1)
+ set @classId, @classId +Job_Novice_High;
+
+ if (@type == 2)
+ set @classId, @classId +Job_Baby;
+
+ return @classId;
+}
+
+//Returns the type of class:
+//0= Novice, 1= First Class, 2= Second Class, 3= Super Novice
+//4= Wedding
+function script GF_getJobLevel {
+
+ set @classId, getarg(0);
+
+ if (@classId >= Job_Novice_High && @classId <= Job_Paladin2)
+ set @classId, @classId -Job_Novice_High;
+
+ if (@classId >= Job_Baby && @classId <= Job_Baby_Crusader2)
+ set @classId, @classId -Job_Baby;
+
+ if(@classId == Job_Novice) {
+ return 0;
+ }
+ if((@classId >= Job_Swordman && @classId <= Job_Thief)
+ || @classId == Job_Taekwon) {
+ return 1;
+ }
+ if ((@classId >= Job_Knight && @classId <= Job_Crusader2)
+ || (@classId >= Job_Star_Gladiator && @classId <= Job_Soul_Linker)) {
+ return 2;
+ }
+
+ if(@classId == Job_SuperNovice || @classId == Job_Super_Baby) {
+ return 3;
+ }
+ if(@classId == 22) {
+ return 4;
+ }
+ return -1;
+}
+
+//Returns the type of class, based on path:
+//0= Normal Jobs, 1= Upper Jobs, 2= Baby Jobs
+//Works the same as Upper, except you can pass any job id to get it's upper value
+function script GF_getJobType {
+ set @classId, getarg(0);
+
+ if ((@classId >= Job_Novice && @classId <= Job_SuperNovice)
+ || (@classId >= Job_Taekwon && @classId <= Job_Soul_Linker)) {
+ return 0;
+ }
+ if (@classId >= Job_Novice_High && @classId <= Job_Paladin2) {
+ return 1;
+ }
+ if (@classId >= Job_Baby && @classId <= Job_Super_Baby) {
+ return 2;
+ }
+ return -1;
+}
+//Returns the base class of the given job, return values are:
+//Job_Novice (Novice, Baby Novice, Super Novice
+//Job_Acolyte (Aco, Priest, Monk +High/Baby variations)
+//Job_Archer (Archer, Sniper, Bard, Dancer +High/Baby variations)
+//Job_Mage (Mage, Wizard, Sage +High/Baby variations)
+//Job_Swordman (Swordsman, Knight, Crusader +High/Baby variations)
+//Job_Thief (Thief, Assassin, Rogue +High/Baby variations)
+//-1 : others (when wearing Tux/Wedding dress, for example)
+//Works the same as baseClass, except you pass the class which you want
+//examined.
+function script GF_getJobClass {
+ set @classId, getarg(0);
+
+ if (@classId >= Job_Novice_High && @classId <= Job_Paladin2)
+ set @classId, @classId -Job_Novice_High;
+
+ if (@classId >= Job_Baby && @classId <= Job_Baby_Crusader2)
+ set @classId, @classId -Job_Baby;
+
+ switch (@classId) {
+ case Job_Novice:
+ case Job_SuperNovice:
+ case Job_Super_Baby:
+ return Job_Novice;
+
+ case Job_Acolyte:
+ case Job_Priest:
+ case Job_Monk:
+ return Job_Acolyte;
+
+ case Job_Archer:
+ case Job_Hunter:
+ case Job_Bard:
+ case Job_Dancer:
+ return Job_Archer;
+
+ case Job_Mage:
+ case Job_Wizard:
+ case Job_Sage:
+ return Job_Mage;
+
+ case Job_Merchant:
+ case Job_BlackSmith:
+ case Job_Alchem:
+ return Job_Merchant;
+
+ case Job_Swordman:
+ case Job_Knight:
+ case Job_Knight2:
+ case Job_Paladin:
+ case Job_Paladin2:
+ return Job_Swordman;
+
+ case Job_Thief:
+ case Job_Assassin:
+ case Job_Rogue:
+ return Job_Thief;
+
+ case Job_Taekwon:
+ case Job_Star_Gladiator:
+ case Job_Star_Gladiator2:
+ case Job_Soul_Linker:
+ return Job_Taekwon;
+
+ default:
+ return -1;
+ }
} \ No newline at end of file
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/kafras.txt b/npc/custom/eAAC_Scripts/kafraExpress/kafras.txt
index 739dcc58e..329adf296 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/kafras.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/kafras.txt
@@ -1,296 +1,296 @@
-//===== eAthena Script =======================================
-//= Kafra Express - NPC definitions
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 2.2
-//===== Compatible With: =====================================
-//= Any eAthena Version with function support; RO Episode 8+ (LightHalzen)
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Here is where the npcs are defined.
-//===== Additional Comments: =================================
-//= To define your own Kafra, keep in mind the order and meaning
-//= of the arguments for the main function.
-//============================================================
-
-//This is the model for the call: Type is 0 for towns, 1 for dungeons (2 for both)
-//callfunc "F_KafraExpress","NPC Name","Image File", type, "Save Map", Save X, Save Y;
-
-//Town Kafras
-alberta.gat,113,60,5 script Kafra Express::Alberta 116,{
- callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"alberta.gat",116,57;
-}
-
-aldebaran.gat,133,124,5 script Kafra Express::AlDeBaran 115,{
- callfunc "F_KafraExpress","Kafra Express","kafra_03",2,"aldebaran.gat",139,131;
-}
-
-amatsu.gat,201,80,8 script Kafra Express::Amatsu 114,{
- callfunc "F_KafraExpress","Kafra Express","kafra_04",0,"amatsu.gat",197,81;
-}
-
-ayothaya.gat,195,160,8 script Kafra Express::Ayothaya 112,{
- callfunc "F_KafraExpress","Kafra Express","kafra_06",0,"ayothaya.gat",194,173;
-}
-
-comodo.gat,190,153,5 script Kafra Express::Comodo 721,{
- callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"comodo.gat",189,166;
-}
-
-geffen.gat,121,62,8 script Kafra Express::Geffen 113,{
- callfunc "F_KafraExpress","Kafra Express","kafra_05",0,"geffen.gat",119,56;
-}
-
-gonryun.gat,169,188,2 script Kafra Express::GonRyun 117,{
- callfunc "F_KafraExpress","Kafra Express","kafra_01",2,"gonryun.gat",168,199;
-}
-
-einbech.gat,143,243,3 script Kafra Express::Einbech 860,{
- callfunc "F_KafraExpress","Kafra Express","kafra_08",0,"einbech.gat",157,250;
-}
-
-einbroch.gat,58,207,4 script Kafra Express::Einbroch 860,{
- callfunc "F_KafraExpress","Kafra Express","kafra_08",0,"einbroch.gat",64,184;
-}
-
-hugel.gat,101,117,1 script Kafra Express::Hugel 115,{
- callfunc "F_KafraExpress","Kafra Express","kafra_03",0,"hugel.gat",102,109;
-}
-
-izlude.gat,136,94,2 script Kafra Express::Izlude 115,{
- callfunc "F_KafraExpress","Kafra Express","kafra_03",0,"izlude.gat",147,99;
-}
-
-jawaii.gat,208,217,7 script Kafra Express::Jawaii 721,{
- callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"jawaii.gat",213,209;
-}
-
-lighthalzen.gat,165,106,3 script Kafra Express::Lighthalzen 861,{
- callfunc "F_KafraExpress","Kafra Express","kafra_09",0,"lighthalzen.gat",152,106;
-}
-
-louyang.gat,220,123,3 script Kafra Express::LouYang 117,{
- callfunc "F_KafraExpress","Kafra Express","kafra_01",0,"louyang.gat",221,128;
-}
-
-xmas.gat,148,126,4 script Kafra Express::Lutie 112,{
- callfunc "F_KafraExpress","Kafra Express","kafra_06",0,"xmas.gat",149,117;
-}
-
-morocc.gat,156,97,3 script Kafra Express::Morocc 721,{
- callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"morocc.gat",156,91;
-}
-
-niflheim.gat,196,192,3 script Kafra Express::Niflheim 791,{
- callfunc "F_KafraExpress","Kafra Express","",3,"niflheim.gat",194,185;
-}
-
-payon.gat,152,181,5 script Kafra Express::Payon 114,{
- callfunc "F_KafraExpress","Kafra Express","kafra_04",0,"payon.gat",162,182;
-}
-
-prontera.gat,147,177,7 script Kafra Express::Prontera 116,{
- callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"prontera.gat",156,195;
-}
-
-umbala.gat,89,159,4 script Kafra Express::Umbala 860,{
- callfunc "F_KafraExpress","Kafra Express","kafra_08",0,"umbala.gat",91,159;
-}
-
-yuno.gat,159,87,5 script Kafra Express::Yuno 861,{
- callfunc "F_KafraExpress","Kafra Express","kafra_09",0,"yuno.gat",159,52;
-}
-
-//Dungeon Kafras
-//Abyss Lake
-hu_fild05.gat,170,305,7 script Kafra Express::D_Abyss 861,{
- callfunc "F_KafraExpress","Kafra Express","kafra_09",1,"hu_fild05.gat",160,302;
-}
-
-//Amatsu D
-ama_in02.gat,115,184,6 script Kafra Express::D_Amatsu 117,{
- callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"ama_in02.gat",118,184;
-}
-
-//AntHell North
-moc_fild04.gat,208,323,1 script Kafra Express::D_Anthell1 114,{
- callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"moc_fild04.gat",207,332;
-}
-
-//AntHell South
-moc_fild15.gat,251,243,3 script Kafra Express::D_Anthell2 114,{
- callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"moc_fild15.gat",246,251;
-}
-
-//Ayothaya Dungeon
-ayo_fild02.gat,289,144,3 script Kafra Express::D_Ayothaya 116,{
- callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"ayo_fild02.gat",289,155;
-}
-
-//Byalan Island
-izlu2dun.gat,101,82,7 script Kafra Express::D_Byalan 112,{
- callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"izlu2dun.gat",112,84;
-}
-
-//Comodo East Cave
-cmd_fild01.gat,33,321,4 script Kafra Express::D_ComodoE 721,{
- callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"cmd_fild01.gat",34,325;
-}
-
-//Comodo West Cave
-comodo.gat,31,218,4 script Kafra Express::D_ComodoW 721,{
- callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"comodo.gat",32,209;
-}
-
-//Comodo North Cave
-comodo.gat,182,347,2 script Kafra Express::D_ComodoN 721,{
- callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"comodo.gat",180,352;
-}
-
-//Coal Mines
-mjolnir_02.gat,83,364,4 script Kafra Express::D_Coal 861,{
- callfunc "F_KafraExpress","Kafra Express","kafra_09",1,"mjolnir_02.gat",89,358;
-}
-
-//Culvert
-prt_fild05.gat,275,219,5 script Kafra Express::D_Culvert 112,{
- callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"prt_fild05.gat",274,208;
-}
-
-//Gefenia
-gefenia01.gat,56,171,6 script Kafra Express::D_Gefenia1 861,{
- callfunc "F_KafraExpress","Kafra Express","kafra_09",1,"gefenia01.gat",59,169;
-}
-
-//Geffen Dungeon
-gef_tower.gat,156,33,3 script Kafra Express::D_Geffen 113,{
- callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"gef_tower.gat",147,35;
-}
-
-//GH: Church
-glast_01.gat,193,136,5 script Kafra Express::D_GHChurch 791,{
- callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",206,136;
-}
-
-//GH: Castle
-glast_01.gat,200,350,4 script Kafra Express::D_GHCastle 791,{
- callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",200,347;
-}
-
-//GH: Staircase
-glast_01.gat,58,103,7 script Kafra Express::D_GHStair 791,{
- callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",62,107;
-}
-
-//GH: Chivalry
-glast_01.gat,62,198,6 script Kafra Express::D_GHChivalry 791,{
- callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",69,193;
-}
-
-//LightHalzen Rekkenber (Sewer Entrance)
-lighthalzen.gat,311,293,1 script Kafra Express::D_Lhz 860,{
- callfunc "F_KafraExpress","Kafra Express","kafra_08",1,"lighthalzen.gat",301,286;
-}
-
-//LightHalzen Rekkenber (Rekkenber Entrance)(
-//lighthalzen.gat,69,57,7 script Kafra Express::D_Lhz 860,{
-// callfunc "F_KafraExpress","Kafra Express","kafra_08",1,"lighthalzen.gat",78,57;
-//}
-
-//Juperos
-jupe_cave.gat,45,55,5 script Kafra Express::D_Juperos 860,{
- callfunc "F_KafraExpress","Kafra Express","kafra_08",1,"jupe_cave.gat",45,48;
-}
-
-//Laberynth
-prt_fild01.gat,143,365,3 script Kafra Express::D_Maze 112,{
- callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"prt_fild01.gat",136,361;
-}
-
-//LouYang D
-louyang.gat,35,276,6 script Kafra Express::D_Louyang 117,{
- callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"louyang.gat",41,267;
-}
-
-//Magma D
-yuno_fild03.gat,34,143,5 script Kafra Express::D_Magma 115,{
- callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"yuno_fild03.gat",35,135;
-}
-
-//Orc D North
-in_orcs01.gat,24,165,5 script Kafra Express::D_OrcsN 116,{
- callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"in_orcs01.gat",34,165;
-}
-
-//Orc D South
-in_orcs01.gat,103,99,5 script Kafra Express::D_OrcsS 116,{
- callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"in_orcs01.gat",112,99;
-}
-
-//Payon D
-pay_arche.gat,38,138,6 script Kafra Express::D_Payon 112,{
- callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"pay_arche.gat",41,133;
-}
-
-//Pyramids D
-moc_ruins.gat,60,166,5 script Kafra Express::D_Pyramid 115,{
- callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"moc_ruins.gat",62,162;
-}
-
-//Sphinx D
-moc_fild19.gat,106,97,8 script Kafra Express::D_Sphinx 115,{
- callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"moc_fild19.gat",107,100;
-}
-
-//Sunken Ship
-alb2trea.gat,75,101,5 script Kafra Express::D_Sunken 114,{
- callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"alb2trea.gat",87,103;
-}
-
-//Thanatos Tower
-tha_scene01.gat,139,194,0 script Kafra Express::D_Thanatos 113,{
- callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tha_scene01.gat",132,220;
-}
-
-//Toy Factory
-xmas.gat,138,307,6 script Kafra Express::D_Toy 116,{
- callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"xmas.gat",144,306;
-}
-
-//Turtle Cave Entrance
-tur_dun01.gat,147,237,6 script Kafra Express::D_TCave 113,{
- callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tur_dun01.gat",155,234;
-}
-
-//Turtle Island Entrance
-tur_dun01.gat,148,54,6 script Kafra Express::D_TIsland 113,{
- callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tur_dun01.gat",153,47;
-}
-
-//Umbala D
-umbala.gat,120,284,3 script Kafra Express::D_Umbala 117,{
- callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"umbala.gat",113,282;
-}
-
-//Guild War Kafras: Disabled by Default!
-
-//Al De Baran Guild Grounds
-//alde_gld.gat,156,165,3 script Kafra Express::G_AlDeBaran 116,{
-// callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"alde_gld.gat",156,157;
-//}
-
-//Geffen Guild Grounds
-//gef_fild13.gat,237,182,6 script Kafra Express::G_Geffen 113,{
-// callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"gef_fild13.gat",231,181;
-//}
-
-//Payon Guild Grounds
-//pay_gld.gat,243,172,6 script Kafra Express::G_Payon 117,{
-// callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"pay_gld.gat",243,178;
-//}
-
-//Prontera Guild Grounds
-//prt_gld.gat,127,163,5 script Kafra Express::G_Prontera 115,{
-// callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"prt_gld.gat",129,170;
-//}
+//===== eAthena Script =======================================
+//= Kafra Express - NPC definitions
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 2.2
+//===== Compatible With: =====================================
+//= Any eAthena Version with function support; RO Episode 8+ (LightHalzen)
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Here is where the npcs are defined.
+//===== Additional Comments: =================================
+//= To define your own Kafra, keep in mind the order and meaning
+//= of the arguments for the main function.
+//============================================================
+
+//This is the model for the call: Type is 0 for towns, 1 for dungeons (2 for both)
+//callfunc "F_KafraExpress","NPC Name","Image File", type, "Save Map", Save X, Save Y;
+
+//Town Kafras
+alberta.gat,113,60,5 script Kafra Express::Alberta 116,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"alberta.gat",116,57;
+}
+
+aldebaran.gat,133,124,5 script Kafra Express::AlDeBaran 115,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_03",2,"aldebaran.gat",139,131;
+}
+
+amatsu.gat,201,80,8 script Kafra Express::Amatsu 114,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_04",0,"amatsu.gat",197,81;
+}
+
+ayothaya.gat,195,160,8 script Kafra Express::Ayothaya 112,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_06",0,"ayothaya.gat",194,173;
+}
+
+comodo.gat,190,153,5 script Kafra Express::Comodo 721,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"comodo.gat",189,166;
+}
+
+geffen.gat,121,62,8 script Kafra Express::Geffen 113,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_05",0,"geffen.gat",119,56;
+}
+
+gonryun.gat,169,188,2 script Kafra Express::GonRyun 117,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_01",2,"gonryun.gat",168,199;
+}
+
+einbech.gat,143,243,3 script Kafra Express::Einbech 860,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_08",0,"einbech.gat",157,250;
+}
+
+einbroch.gat,58,207,4 script Kafra Express::Einbroch 860,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_08",0,"einbroch.gat",64,184;
+}
+
+hugel.gat,101,117,1 script Kafra Express::Hugel 115,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_03",0,"hugel.gat",102,109;
+}
+
+izlude.gat,136,94,2 script Kafra Express::Izlude 115,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_03",0,"izlude.gat",147,99;
+}
+
+jawaii.gat,208,217,7 script Kafra Express::Jawaii 721,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"jawaii.gat",213,209;
+}
+
+lighthalzen.gat,165,106,3 script Kafra Express::Lighthalzen 861,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_09",0,"lighthalzen.gat",152,106;
+}
+
+louyang.gat,220,123,3 script Kafra Express::LouYang 117,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_01",0,"louyang.gat",221,128;
+}
+
+xmas.gat,148,126,4 script Kafra Express::Lutie 112,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_06",0,"xmas.gat",149,117;
+}
+
+morocc.gat,156,97,3 script Kafra Express::Morocc 721,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_07",0,"morocc.gat",156,91;
+}
+
+niflheim.gat,196,192,3 script Kafra Express::Niflheim 791,{
+ callfunc "F_KafraExpress","Kafra Express","",3,"niflheim.gat",194,185;
+}
+
+payon.gat,152,181,5 script Kafra Express::Payon 114,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_04",0,"payon.gat",162,182;
+}
+
+prontera.gat,147,177,7 script Kafra Express::Prontera 116,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"prontera.gat",156,195;
+}
+
+umbala.gat,89,159,4 script Kafra Express::Umbala 860,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_08",0,"umbala.gat",91,159;
+}
+
+yuno.gat,159,87,5 script Kafra Express::Yuno 861,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_09",0,"yuno.gat",159,52;
+}
+
+//Dungeon Kafras
+//Abyss Lake
+hu_fild05.gat,170,305,7 script Kafra Express::D_Abyss 861,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_09",1,"hu_fild05.gat",160,302;
+}
+
+//Amatsu D
+ama_in02.gat,115,184,6 script Kafra Express::D_Amatsu 117,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"ama_in02.gat",118,184;
+}
+
+//AntHell North
+moc_fild04.gat,208,323,1 script Kafra Express::D_Anthell1 114,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"moc_fild04.gat",207,332;
+}
+
+//AntHell South
+moc_fild15.gat,251,243,3 script Kafra Express::D_Anthell2 114,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"moc_fild15.gat",246,251;
+}
+
+//Ayothaya Dungeon
+ayo_fild02.gat,289,144,3 script Kafra Express::D_Ayothaya 116,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"ayo_fild02.gat",289,155;
+}
+
+//Byalan Island
+izlu2dun.gat,101,82,7 script Kafra Express::D_Byalan 112,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"izlu2dun.gat",112,84;
+}
+
+//Comodo East Cave
+cmd_fild01.gat,33,321,4 script Kafra Express::D_ComodoE 721,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"cmd_fild01.gat",34,325;
+}
+
+//Comodo West Cave
+comodo.gat,31,218,4 script Kafra Express::D_ComodoW 721,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"comodo.gat",32,209;
+}
+
+//Comodo North Cave
+comodo.gat,182,347,2 script Kafra Express::D_ComodoN 721,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_07",1,"comodo.gat",180,352;
+}
+
+//Coal Mines
+mjolnir_02.gat,83,364,4 script Kafra Express::D_Coal 861,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_09",1,"mjolnir_02.gat",89,358;
+}
+
+//Culvert
+prt_fild05.gat,275,219,5 script Kafra Express::D_Culvert 112,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"prt_fild05.gat",274,208;
+}
+
+//Gefenia
+gefenia01.gat,56,171,6 script Kafra Express::D_Gefenia1 861,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_09",1,"gefenia01.gat",59,169;
+}
+
+//Geffen Dungeon
+gef_tower.gat,156,33,3 script Kafra Express::D_Geffen 113,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"gef_tower.gat",147,35;
+}
+
+//GH: Church
+glast_01.gat,193,136,5 script Kafra Express::D_GHChurch 791,{
+ callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",206,136;
+}
+
+//GH: Castle
+glast_01.gat,200,350,4 script Kafra Express::D_GHCastle 791,{
+ callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",200,347;
+}
+
+//GH: Staircase
+glast_01.gat,58,103,7 script Kafra Express::D_GHStair 791,{
+ callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",62,107;
+}
+
+//GH: Chivalry
+glast_01.gat,62,198,6 script Kafra Express::D_GHChivalry 791,{
+ callfunc "F_KafraExpress","Kafra Express","",1,"glast_01.gat",69,193;
+}
+
+//LightHalzen Rekkenber (Sewer Entrance)
+lighthalzen.gat,311,293,1 script Kafra Express::D_Lhz 860,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_08",1,"lighthalzen.gat",301,286;
+}
+
+//LightHalzen Rekkenber (Rekkenber Entrance)(
+//lighthalzen.gat,69,57,7 script Kafra Express::D_Lhz 860,{
+// callfunc "F_KafraExpress","Kafra Express","kafra_08",1,"lighthalzen.gat",78,57;
+//}
+
+//Juperos
+jupe_cave.gat,45,55,5 script Kafra Express::D_Juperos 860,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_08",1,"jupe_cave.gat",45,48;
+}
+
+//Laberynth
+prt_fild01.gat,143,365,3 script Kafra Express::D_Maze 112,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"prt_fild01.gat",136,361;
+}
+
+//LouYang D
+louyang.gat,35,276,6 script Kafra Express::D_Louyang 117,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"louyang.gat",41,267;
+}
+
+//Magma D
+yuno_fild03.gat,34,143,5 script Kafra Express::D_Magma 115,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"yuno_fild03.gat",35,135;
+}
+
+//Orc D North
+in_orcs01.gat,24,165,5 script Kafra Express::D_OrcsN 116,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"in_orcs01.gat",34,165;
+}
+
+//Orc D South
+in_orcs01.gat,103,99,5 script Kafra Express::D_OrcsS 116,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"in_orcs01.gat",112,99;
+}
+
+//Payon D
+pay_arche.gat,38,138,6 script Kafra Express::D_Payon 112,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_06",1,"pay_arche.gat",41,133;
+}
+
+//Pyramids D
+moc_ruins.gat,60,166,5 script Kafra Express::D_Pyramid 115,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"moc_ruins.gat",62,162;
+}
+
+//Sphinx D
+moc_fild19.gat,106,97,8 script Kafra Express::D_Sphinx 115,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"moc_fild19.gat",107,100;
+}
+
+//Sunken Ship
+alb2trea.gat,75,101,5 script Kafra Express::D_Sunken 114,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_04",1,"alb2trea.gat",87,103;
+}
+
+//Thanatos Tower
+tha_scene01.gat,139,194,0 script Kafra Express::D_Thanatos 113,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tha_scene01.gat",132,220;
+}
+
+//Toy Factory
+xmas.gat,138,307,6 script Kafra Express::D_Toy 116,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"xmas.gat",144,306;
+}
+
+//Turtle Cave Entrance
+tur_dun01.gat,147,237,6 script Kafra Express::D_TCave 113,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tur_dun01.gat",155,234;
+}
+
+//Turtle Island Entrance
+tur_dun01.gat,148,54,6 script Kafra Express::D_TIsland 113,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"tur_dun01.gat",153,47;
+}
+
+//Umbala D
+umbala.gat,120,284,3 script Kafra Express::D_Umbala 117,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"umbala.gat",113,282;
+}
+
+//Guild War Kafras: Disabled by Default!
+
+//Al De Baran Guild Grounds
+//alde_gld.gat,156,165,3 script Kafra Express::G_AlDeBaran 116,{
+// callfunc "F_KafraExpress","Kafra Express","kafra_02",1,"alde_gld.gat",156,157;
+//}
+
+//Geffen Guild Grounds
+//gef_fild13.gat,237,182,6 script Kafra Express::G_Geffen 113,{
+// callfunc "F_KafraExpress","Kafra Express","kafra_05",1,"gef_fild13.gat",231,181;
+//}
+
+//Payon Guild Grounds
+//pay_gld.gat,243,172,6 script Kafra Express::G_Payon 117,{
+// callfunc "F_KafraExpress","Kafra Express","kafra_01",1,"pay_gld.gat",243,178;
+//}
+
+//Prontera Guild Grounds
+//prt_gld.gat,127,163,5 script Kafra Express::G_Prontera 115,{
+// callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"prt_gld.gat",129,170;
+//}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt
index 9594dae47..6ad0c2d50 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt
@@ -1,175 +1,175 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Bank Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 2.7
-//===== Compatible With: =====================================
-//= eAthena SVN R3524+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers banking services with daily interests, and
-//= withdrawal/deposit fees.
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//============================================================
-
-- script keInit_bank -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadBank";
- end;
-}
-
-function script F_keBank {
-
- function SF_calcInterest;
- SF_calcInterest();
-
- do {
- set @feeD,callfunc("F_keCost",$@kebk_depositCost,100);
- set @maxDep,Zeny;
- if (@maxDep > $@kebk_maxTransact)
- set @maxDep,$@kebk_maxTransact;
- if (#ke_bank + @maxDep > $@kebk_capacity)
- set @maxDep,$@kebk_capacity-#ke_bank;
-
- set @feeW,callfunc("F_keCost",$@kebk_withdrawCost,100);
- set @maxWith,#ke_bank-(#ke_bank*@feeW/100);
- if (@maxWith > $@kebk_maxTransact)
- set @maxWith,$@kebk_maxTransact;
-
- if (#ke_bank < $@kebk_capacity) {
- set @kmenu, select(
- "- Return (balance is "+#ke_bank+"z)",
- "- Deposit (up to "+@maxDep+"z - "+@feeD+"% fee)",
- "- Withdraw (up to "+@maxWith+"z + "+@feeW+"% fee)",
- "- Transfer from 1st B.o.P. ("+#bankstorage+"z)",
- "- Transfer from 2nd B.o.P. ("+#kafrabank+"z)"
- );
- } else {
- set @kmenu, select(
- "- Return (balance is "+#ke_bank+"z)",
- "- Withdraw (up to "+@maxWith+"z + "+@feeW+"% fee)",
- "- Transfer from 1st B.o.P. ("+#bankstorage+"z)",
- "- Transfer from 2nd B.o.P. ("+#kafrabank+"z)"
- );
- if (@kmenu > 1)
- set @kmenu, @kmenu+1;
- }
- switch (@kmenu) {
- case 2: //Deposit
- input @amount;
- if (@amount < $@kebk_minTransact) {
- callfunc "F_keIntro", -1, "Sorry, the minimum transaction value is "+$@kebk_minTransact+"z.";
- break;
- }
- if (@amount > @maxDep) {
- callfunc "F_keIntro", e_an, "You can't deposit that quantity!";
- break;
- }
- set #ke_bank,#ke_bank+@amount-(@amount*@feeD/100);
- if ($@kebk_useGlobalBank)
- set $ke_globalbank, $ke_globalbank +@amount*@feeD/100;
- set Zeny,Zeny-@amount;
- emotion e_cash;
- break;
-
- case 3: //Withdraw
- input @amount;
- if (@amount < $@kebk_minTransact) {
- callfunc "F_keIntro", -1, "Sorry, the minimum transaction value is "+$@kebk_minTransact+"z.";
- break;
- }
- if (@amount > @maxWith) {
- callfunc "F_keIntro", e_X, "You can't withdraw that quantity!";
- break;
- }
- set #ke_bank,#ke_bank-@amount-(@amount*@feeW/100);
- if ($@kebk_useGlobalBank)
- set $ke_globalbank, $ke_globalbank +@amount*@feeW/100;
- set Zeny,Zeny+@amount;
- emotion e_oh;
- break;
-
- case 4: //1st B.o.P.
- if (#bankstorage==0) {
- callfunc "F_keIntro", -1, "Sorry, there is nothing left to transfer.";
- break;
- }
- callfunc "F_keIntro", -1, #bankstorage+"z have been transferred from your account in the First Bank of Prontera.";
- set #ke_bank,#ke_bank+#bankstorage;
- set #bankstorage,0;
- break;
-
- case 5: //2nd B.o.P.
- if (#kafrabank==0) {
- callfunc "F_keIntro", -1, "Sorry, there is nothing left to transfer.";
- break;
- }
- callfunc "F_keIntro", -1, #kafrabank+"z have been transferred from your account in the Second Bank of Prontera.";
- set #ke_bank,#ke_bank+#kafrabank;
- set #kafrabank,0;
- break;
- }
- } while (@kmenu > 1);
-return;
-
-//Subfunction: SF_calcInterest
-//Calculates the interests gained on the account. Uses 30-day months
-function SF_calcInterest {
- set @day,gettime(5);
- if (@day>30)
- set @day,30; //Use 30 day-months
- set @month,gettime(6);
- if (#ke_banktick == 0) { //Init bank.
- set #ke_banktick,gettime(6)*30+@day;
- if ($@kebk_monMaintenance < 1) return;
- set #ke_bankmtick,@month;
- return;
- }
- set @banktick,gettime(6)*30+@day;
- if (@banktick == #ke_banktick) return;
- if (@banktick < #ke_banktick) { //Year change.
- do {
- set #ke_banktick,#ke_banktick-360;
- if ($@kebk_monMaintenance > 0) set #ke_bankmtick,#ke_bankmtick-12;
- } while (@banktick < #ke_banktick);
- }
- if ($@kebk_monMaintenance > 0 && #ke_bankmtick < @month){ //Month change
- set @qty,0;
- do {
- if (#ke_bank < $@kebk_monMaintenance) {
- if (@qty>0)
- mes "You've been charged "+@qty+"z for account maintenance, but it was not enough.";
- if ($@kebk_useGlobalBank)
- set $ke_globalbank, $ke_globalbank + @qty;
- mes "You owe the Bank "+($@kebk_monMaintenance*(#ke_bankmtick-@month))+"z for maintenance costs. Until paid you won't earn interests...";
- return;
- }
- set @qty, @qty+$@kebk_monMaintenance;
- set #ke_bankmtick,#ke_bankmtick+1;
- set #ke_bank, #ke_bank-$@kebk_monMaintenance;
- } while (#ke_bankmtick < @month);
- mes "You've been charged "+@qty+"z for account maintenance.";
- if ($@kebk_useGlobalBank)
- set $ke_globalbank, $ke_globalbank + @qty;
- }
- set @qty,0;
- if (#ke_bank > $@kebk_monMaintenance && #ke_bank < $@kebk_capacity)
- set @qty,#ke_bank*$@kebk_dayInterest*(@banktick-#ke_banktick)/10000;
- set #ke_banktick,@banktick;
- if (@qty == 0) return;
- if (@qty < 0) {
- callfunc "F_keIntro", -1, "Sorry, your gained interests have been cancelled for being way too much.";
- return;
- }
- if (#ke_bank + @qty > $@kebk_capacity)
- set #ke_bank, $@kebk_capacity;
- else
- set #ke_bank,#ke_bank+@qty;
-
- callfunc "F_keIntro", -1, "Since your last visit, you've earned an interest of "+@qty+"z!";
-} //SF end
-
-}
-
+//===== eAthena Script =======================================
+//= Kafra Express - Bank Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 2.7
+//===== Compatible With: =====================================
+//= eAthena SVN R3524+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers banking services with daily interests, and
+//= withdrawal/deposit fees.
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//============================================================
+
+- script keInit_bank -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadBank";
+ end;
+}
+
+function script F_keBank {
+
+ function SF_calcInterest;
+ SF_calcInterest();
+
+ do {
+ set @feeD,callfunc("F_keCost",$@kebk_depositCost,100);
+ set @maxDep,Zeny;
+ if (@maxDep > $@kebk_maxTransact)
+ set @maxDep,$@kebk_maxTransact;
+ if (#ke_bank + @maxDep > $@kebk_capacity)
+ set @maxDep,$@kebk_capacity-#ke_bank;
+
+ set @feeW,callfunc("F_keCost",$@kebk_withdrawCost,100);
+ set @maxWith,#ke_bank-(#ke_bank*@feeW/100);
+ if (@maxWith > $@kebk_maxTransact)
+ set @maxWith,$@kebk_maxTransact;
+
+ if (#ke_bank < $@kebk_capacity) {
+ set @kmenu, select(
+ "- Return (balance is "+#ke_bank+"z)",
+ "- Deposit (up to "+@maxDep+"z - "+@feeD+"% fee)",
+ "- Withdraw (up to "+@maxWith+"z + "+@feeW+"% fee)",
+ "- Transfer from 1st B.o.P. ("+#bankstorage+"z)",
+ "- Transfer from 2nd B.o.P. ("+#kafrabank+"z)"
+ );
+ } else {
+ set @kmenu, select(
+ "- Return (balance is "+#ke_bank+"z)",
+ "- Withdraw (up to "+@maxWith+"z + "+@feeW+"% fee)",
+ "- Transfer from 1st B.o.P. ("+#bankstorage+"z)",
+ "- Transfer from 2nd B.o.P. ("+#kafrabank+"z)"
+ );
+ if (@kmenu > 1)
+ set @kmenu, @kmenu+1;
+ }
+ switch (@kmenu) {
+ case 2: //Deposit
+ input @amount;
+ if (@amount < $@kebk_minTransact) {
+ callfunc "F_keIntro", -1, "Sorry, the minimum transaction value is "+$@kebk_minTransact+"z.";
+ break;
+ }
+ if (@amount > @maxDep) {
+ callfunc "F_keIntro", e_an, "You can't deposit that quantity!";
+ break;
+ }
+ set #ke_bank,#ke_bank+@amount-(@amount*@feeD/100);
+ if ($@kebk_useGlobalBank)
+ set $ke_globalbank, $ke_globalbank +@amount*@feeD/100;
+ set Zeny,Zeny-@amount;
+ emotion e_cash;
+ break;
+
+ case 3: //Withdraw
+ input @amount;
+ if (@amount < $@kebk_minTransact) {
+ callfunc "F_keIntro", -1, "Sorry, the minimum transaction value is "+$@kebk_minTransact+"z.";
+ break;
+ }
+ if (@amount > @maxWith) {
+ callfunc "F_keIntro", e_X, "You can't withdraw that quantity!";
+ break;
+ }
+ set #ke_bank,#ke_bank-@amount-(@amount*@feeW/100);
+ if ($@kebk_useGlobalBank)
+ set $ke_globalbank, $ke_globalbank +@amount*@feeW/100;
+ set Zeny,Zeny+@amount;
+ emotion e_oh;
+ break;
+
+ case 4: //1st B.o.P.
+ if (#bankstorage==0) {
+ callfunc "F_keIntro", -1, "Sorry, there is nothing left to transfer.";
+ break;
+ }
+ callfunc "F_keIntro", -1, #bankstorage+"z have been transferred from your account in the First Bank of Prontera.";
+ set #ke_bank,#ke_bank+#bankstorage;
+ set #bankstorage,0;
+ break;
+
+ case 5: //2nd B.o.P.
+ if (#kafrabank==0) {
+ callfunc "F_keIntro", -1, "Sorry, there is nothing left to transfer.";
+ break;
+ }
+ callfunc "F_keIntro", -1, #kafrabank+"z have been transferred from your account in the Second Bank of Prontera.";
+ set #ke_bank,#ke_bank+#kafrabank;
+ set #kafrabank,0;
+ break;
+ }
+ } while (@kmenu > 1);
+return;
+
+//Subfunction: SF_calcInterest
+//Calculates the interests gained on the account. Uses 30-day months
+function SF_calcInterest {
+ set @day,gettime(5);
+ if (@day>30)
+ set @day,30; //Use 30 day-months
+ set @month,gettime(6);
+ if (#ke_banktick == 0) { //Init bank.
+ set #ke_banktick,gettime(6)*30+@day;
+ if ($@kebk_monMaintenance < 1) return;
+ set #ke_bankmtick,@month;
+ return;
+ }
+ set @banktick,gettime(6)*30+@day;
+ if (@banktick == #ke_banktick) return;
+ if (@banktick < #ke_banktick) { //Year change.
+ do {
+ set #ke_banktick,#ke_banktick-360;
+ if ($@kebk_monMaintenance > 0) set #ke_bankmtick,#ke_bankmtick-12;
+ } while (@banktick < #ke_banktick);
+ }
+ if ($@kebk_monMaintenance > 0 && #ke_bankmtick < @month){ //Month change
+ set @qty,0;
+ do {
+ if (#ke_bank < $@kebk_monMaintenance) {
+ if (@qty>0)
+ mes "You've been charged "+@qty+"z for account maintenance, but it was not enough.";
+ if ($@kebk_useGlobalBank)
+ set $ke_globalbank, $ke_globalbank + @qty;
+ mes "You owe the Bank "+($@kebk_monMaintenance*(#ke_bankmtick-@month))+"z for maintenance costs. Until paid you won't earn interests...";
+ return;
+ }
+ set @qty, @qty+$@kebk_monMaintenance;
+ set #ke_bankmtick,#ke_bankmtick+1;
+ set #ke_bank, #ke_bank-$@kebk_monMaintenance;
+ } while (#ke_bankmtick < @month);
+ mes "You've been charged "+@qty+"z for account maintenance.";
+ if ($@kebk_useGlobalBank)
+ set $ke_globalbank, $ke_globalbank + @qty;
+ }
+ set @qty,0;
+ if (#ke_bank > $@kebk_monMaintenance && #ke_bank < $@kebk_capacity)
+ set @qty,#ke_bank*$@kebk_dayInterest*(@banktick-#ke_banktick)/10000;
+ set #ke_banktick,@banktick;
+ if (@qty == 0) return;
+ if (@qty < 0) {
+ callfunc "F_keIntro", -1, "Sorry, your gained interests have been cancelled for being way too much.";
+ return;
+ }
+ if (#ke_bank + @qty > $@kebk_capacity)
+ set #ke_bank, $@kebk_capacity;
+ else
+ set #ke_bank,#ke_bank+@qty;
+
+ callfunc "F_keIntro", -1, "Since your last visit, you've earned an interest of "+@qty+"z!";
+} //SF end
+
+}
+
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt
index 669942e72..ad7a02c4b 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt
@@ -1,224 +1,224 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Broadcasting Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 3.0
-//===== Compatible With: =====================================
-//= eAthena SVN3424+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers broadcasting for party requests, pvp, general
-//= and anonymous. Broadcasts can be to the current map
-//= or server-wide
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//= For the PVP broadcasts, variables from the Pvp Warping
-//= Module are used.
-//============================================================
-
-- script keInit_broadcast -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadBroadcast";
- end;
-}
-
-//Function F_keBroadcast(String currentMapName)
-function script F_keBroadcast {
-
- function SF_calcPrice;
- function SF_broadcasts;
- function SF_bcPvp;
- function SF_doBroadcast;
-
- if ($@kebc_showOnline) {
- set @kmenu, select(
- "- Return",
- "- Map Broadcasts ("+getarg(0)+"/"+getmapusers(getarg(0))+" "+$@ked_users$+")",
- "- Global Broadcasts ("+getusers(1)+" "+$@ked_users$+")"
- );
- } else {
- set @kmenu, select(
- "- Return",
- "- Map Broadcasts ("+getarg(0)+")",
- "- Global Broadcasts"
- );
- }
- switch(@kmenu) {
- case 2:
- SF_calcPrice(0);
- set @map$,getarg(0);
- SF_broadcasts("Map ("+getarg(0)+")");
- break;
- case 3:
- SF_calcPrice(1);
- set @map$,"";
- SF_broadcasts("Global");
- break;
- }
-return;
-
-//Sub Function SF_broadcasts: Handles main broadcast menu.
-function SF_broadcasts {
-
- do {
- switch (select (
- "- Cancel "+getarg(0)+" Broadcast",
- "- Party request Broadcast ("+@partycost+"z)",
- "- PvP challenge Broadcast ("+@pvpcost+"z)",
- "- General Broadcast ("+@cost+"z)",
- "- General Anonymous Broadcast ("+@anoncost+"z)"
- )) {
- case 2: //Party
- SF_doBroadcast $@kebc_partyCost,@map$,"The "+callfunc("GF_getJobName",class)+" "+strcharinfo(0)+" (levels "+baselevel+"/"+joblevel+") is looking for a party to join.",0;
- break;
- case 3: //Pvp
- if ($@kewp_advanced == 0)
- SF_bcPvp $@kebc_pvpCost,@map$,0,0;
- else {
- do {
- set @kmenu, select (
- "- Cancel",
- "- advertise all levels rooms",
- "- advertise levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" rooms",
- "- advertise levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" rooms",
- "- advertise levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" rooms",
- "- advertise levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" rooms",
- "- advertise levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" rooms",
- "- advertise levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" rooms",
- "- advertise levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" rooms"
- );
- switch (@kmenu) {
- case 2: //All levels
- SF_bcPvp $@kebc_pvpCost,@map$,0,0;
- break;
- case 3: //Lv1
- SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv1-$@kewp_range,$@kewp_baseLv1+$@kewp_range;
- break;
- case 4: //Lv2
- SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv2-$@kewp_range,$@kewp_baseLv2+$@kewp_range;
- break;
- case 5: //Lv3
- SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv3-$@kewp_range,$@kewp_baseLv3+$@kewp_range;
- break;
- case 6: //Lv4
- SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv4-$@kewp_range,$@kewp_baseLv4+$@kewp_range;
- break;
- case 7: //Lv5
- SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv5-$@kewp_range,$@kewp_baseLv5+$@kewp_range;
- break;
- case 8: //Lv6
- SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv6-$@kewp_range,$@kewp_baseLv6+$@kewp_range;
- break;
- case 9: //Lv7
- SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv7-$@kewp_range,$@kewp_baseLv7+$@kewp_range;
- break;
- default:
- break;
- }
- } while (@kmenu > 1);
- }
- break;
- case 4: //General
- SF_doBroadcast $@kebc_cost,@map$,"(From "+strcharinfo(0)+") ",1;
- break;
- case 5: //Anonymous
- SF_doBroadcast $@kebc_anonCost,@map$,"(Anonymous) ",1;
- break;
- default:
- return;
- }
- } while (1);
-} //SF_ end
-
-//SubFunction: Calculates prices for Broadcast services (argument 0 == 1 for global bc, 0 for map bc
-function SF_calcPrice {
- set @partycost,callfunc("F_keCost",$@kebc_partyCost,$@kebc_discount);
- set @pvpcost,callfunc("F_keCost",$@kebc_pvpCost,$@kebc_discount);
- set @cost,callfunc("F_keCost",$@kebc_cost,$@kebc_discount);
- set @anoncost,callfunc("F_keCost",$@kebc_anonCost,$@kebc_discount);
- if (getarg(0)) { //Global fix
- set @partycost,@partycost*$@kebc_globalFactor/100;
- set @pvpcost,@pvpcost*$@kebc_globalFactor/100;
- set @cost,@cost*$@kebc_globalFactor/100;
- set @anoncost,@anoncost*$@kebc_globalFactor/100;
- }
-} //SF_ end
-
-//SubFunction SF_doBroadcast(int cost, String map, String message, int input)
-//If map is "", do a global broadcast
-//If input is 1, concat a user string to message.
-function SF_doBroadcast {
- set @cost, getarg(0);
- if (getarg(1)=="")
- set @cost, @cost*$@kebc_globalFactor/100;
- if (getarg(3)) { //Input message
- input @msg$;
- set @msg$,getarg(2)+@msg$;
- } else
- set @msg$,getarg(2);
-
- mes "Broadcast '"+@msg$+"'?";
- switch (select(
- "- Cancel Broadcast",
- "- Broadcast Message"
- )) {
- case 2:
- if (!(callfunc("F_keCharge",@cost,$@kebc_discount,1))) {
- callfunc "F_keIntro", e_pif, "You don't have enough Zeny...";
- return;
- }
-
- callfunc "F_keIntro", e_what, "Broadcasting...";
- if (getarg(1)=="")
- announce @msg$,16;
- else
- mapannounce getarg(1),@msg$,3;
- break;
- default:
- callfunc "F_keIntro", -1, "Ok...";
- }
-} //SF_ end
-
-//SubFunction SF_bcPvp (int cost, String map, int min level, int max level)
-//Does the second part of PvP Room Advertising. Level is the level group to
-//advertise (1->8 where 8 is free for all)
-function SF_bcPvp {
- set @msg$, "advertising";
- set @lvls$, "";
- if (getarg(3)) {
- if (BaseLevel < getarg(2) || BaseLevel > getarg(3)) {
- callfunc "F_keIntro", e_bzz, "You can only broadcast requests for PvP rooms you can enter!";
- return;
- }
- set @msg$,"levels "+getarg(2)+"-"+getarg(3);
- set @lvls$,"(levels "+getarg(2)+"-"+getarg(3)+") ";
- }
- set @pvpcost,getarg(0);
- switch(select(
- "- Cancel (PvP Rooms "+@msg$+")",
- "- advertise 'Room Sandwich'",
- "- advertise 'Room Rock On'",
- "- advertise 'Four Room'",
- "- advertise 'Room Undercross'",
- "- advertise 'Room Compass'"
- )) {
- case 2: //Sandwich
- SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Sandwich'!",0;
- break;
- case 3: //Rockon
- SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Rock On'!",0;
- break;
- case 4: //Room Four
- SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Four Room'!",0;
- break;
- case 5: //Undercross
- SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Undercross'!",0;
- break;
- case 6: //Compass
- SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Compass'!",0;
- break;
- }
-} //SF_ end
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Broadcasting Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 3.0
+//===== Compatible With: =====================================
+//= eAthena SVN3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers broadcasting for party requests, pvp, general
+//= and anonymous. Broadcasts can be to the current map
+//= or server-wide
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//= For the PVP broadcasts, variables from the Pvp Warping
+//= Module are used.
+//============================================================
+
+- script keInit_broadcast -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadBroadcast";
+ end;
+}
+
+//Function F_keBroadcast(String currentMapName)
+function script F_keBroadcast {
+
+ function SF_calcPrice;
+ function SF_broadcasts;
+ function SF_bcPvp;
+ function SF_doBroadcast;
+
+ if ($@kebc_showOnline) {
+ set @kmenu, select(
+ "- Return",
+ "- Map Broadcasts ("+getarg(0)+"/"+getmapusers(getarg(0))+" "+$@ked_users$+")",
+ "- Global Broadcasts ("+getusers(1)+" "+$@ked_users$+")"
+ );
+ } else {
+ set @kmenu, select(
+ "- Return",
+ "- Map Broadcasts ("+getarg(0)+")",
+ "- Global Broadcasts"
+ );
+ }
+ switch(@kmenu) {
+ case 2:
+ SF_calcPrice(0);
+ set @map$,getarg(0);
+ SF_broadcasts("Map ("+getarg(0)+")");
+ break;
+ case 3:
+ SF_calcPrice(1);
+ set @map$,"";
+ SF_broadcasts("Global");
+ break;
+ }
+return;
+
+//Sub Function SF_broadcasts: Handles main broadcast menu.
+function SF_broadcasts {
+
+ do {
+ switch (select (
+ "- Cancel "+getarg(0)+" Broadcast",
+ "- Party request Broadcast ("+@partycost+"z)",
+ "- PvP challenge Broadcast ("+@pvpcost+"z)",
+ "- General Broadcast ("+@cost+"z)",
+ "- General Anonymous Broadcast ("+@anoncost+"z)"
+ )) {
+ case 2: //Party
+ SF_doBroadcast $@kebc_partyCost,@map$,"The "+callfunc("GF_getJobName",class)+" "+strcharinfo(0)+" (levels "+baselevel+"/"+joblevel+") is looking for a party to join.",0;
+ break;
+ case 3: //Pvp
+ if ($@kewp_advanced == 0)
+ SF_bcPvp $@kebc_pvpCost,@map$,0,0;
+ else {
+ do {
+ set @kmenu, select (
+ "- Cancel",
+ "- advertise all levels rooms",
+ "- advertise levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" rooms",
+ "- advertise levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" rooms",
+ "- advertise levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" rooms",
+ "- advertise levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" rooms",
+ "- advertise levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" rooms",
+ "- advertise levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" rooms",
+ "- advertise levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" rooms"
+ );
+ switch (@kmenu) {
+ case 2: //All levels
+ SF_bcPvp $@kebc_pvpCost,@map$,0,0;
+ break;
+ case 3: //Lv1
+ SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv1-$@kewp_range,$@kewp_baseLv1+$@kewp_range;
+ break;
+ case 4: //Lv2
+ SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv2-$@kewp_range,$@kewp_baseLv2+$@kewp_range;
+ break;
+ case 5: //Lv3
+ SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv3-$@kewp_range,$@kewp_baseLv3+$@kewp_range;
+ break;
+ case 6: //Lv4
+ SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv4-$@kewp_range,$@kewp_baseLv4+$@kewp_range;
+ break;
+ case 7: //Lv5
+ SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv5-$@kewp_range,$@kewp_baseLv5+$@kewp_range;
+ break;
+ case 8: //Lv6
+ SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv6-$@kewp_range,$@kewp_baseLv6+$@kewp_range;
+ break;
+ case 9: //Lv7
+ SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv7-$@kewp_range,$@kewp_baseLv7+$@kewp_range;
+ break;
+ default:
+ break;
+ }
+ } while (@kmenu > 1);
+ }
+ break;
+ case 4: //General
+ SF_doBroadcast $@kebc_cost,@map$,"(From "+strcharinfo(0)+") ",1;
+ break;
+ case 5: //Anonymous
+ SF_doBroadcast $@kebc_anonCost,@map$,"(Anonymous) ",1;
+ break;
+ default:
+ return;
+ }
+ } while (1);
+} //SF_ end
+
+//SubFunction: Calculates prices for Broadcast services (argument 0 == 1 for global bc, 0 for map bc
+function SF_calcPrice {
+ set @partycost,callfunc("F_keCost",$@kebc_partyCost,$@kebc_discount);
+ set @pvpcost,callfunc("F_keCost",$@kebc_pvpCost,$@kebc_discount);
+ set @cost,callfunc("F_keCost",$@kebc_cost,$@kebc_discount);
+ set @anoncost,callfunc("F_keCost",$@kebc_anonCost,$@kebc_discount);
+ if (getarg(0)) { //Global fix
+ set @partycost,@partycost*$@kebc_globalFactor/100;
+ set @pvpcost,@pvpcost*$@kebc_globalFactor/100;
+ set @cost,@cost*$@kebc_globalFactor/100;
+ set @anoncost,@anoncost*$@kebc_globalFactor/100;
+ }
+} //SF_ end
+
+//SubFunction SF_doBroadcast(int cost, String map, String message, int input)
+//If map is "", do a global broadcast
+//If input is 1, concat a user string to message.
+function SF_doBroadcast {
+ set @cost, getarg(0);
+ if (getarg(1)=="")
+ set @cost, @cost*$@kebc_globalFactor/100;
+ if (getarg(3)) { //Input message
+ input @msg$;
+ set @msg$,getarg(2)+@msg$;
+ } else
+ set @msg$,getarg(2);
+
+ mes "Broadcast '"+@msg$+"'?";
+ switch (select(
+ "- Cancel Broadcast",
+ "- Broadcast Message"
+ )) {
+ case 2:
+ if (!(callfunc("F_keCharge",@cost,$@kebc_discount,1))) {
+ callfunc "F_keIntro", e_pif, "You don't have enough Zeny...";
+ return;
+ }
+
+ callfunc "F_keIntro", e_what, "Broadcasting...";
+ if (getarg(1)=="")
+ announce @msg$,16;
+ else
+ mapannounce getarg(1),@msg$,3;
+ break;
+ default:
+ callfunc "F_keIntro", -1, "Ok...";
+ }
+} //SF_ end
+
+//SubFunction SF_bcPvp (int cost, String map, int min level, int max level)
+//Does the second part of PvP Room Advertising. Level is the level group to
+//advertise (1->8 where 8 is free for all)
+function SF_bcPvp {
+ set @msg$, "advertising";
+ set @lvls$, "";
+ if (getarg(3)) {
+ if (BaseLevel < getarg(2) || BaseLevel > getarg(3)) {
+ callfunc "F_keIntro", e_bzz, "You can only broadcast requests for PvP rooms you can enter!";
+ return;
+ }
+ set @msg$,"levels "+getarg(2)+"-"+getarg(3);
+ set @lvls$,"(levels "+getarg(2)+"-"+getarg(3)+") ";
+ }
+ set @pvpcost,getarg(0);
+ switch(select(
+ "- Cancel (PvP Rooms "+@msg$+")",
+ "- advertise 'Room Sandwich'",
+ "- advertise 'Room Rock On'",
+ "- advertise 'Four Room'",
+ "- advertise 'Room Undercross'",
+ "- advertise 'Room Compass'"
+ )) {
+ case 2: //Sandwich
+ SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Sandwich'!",0;
+ break;
+ case 3: //Rockon
+ SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Rock On'!",0;
+ break;
+ case 4: //Room Four
+ SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Four Room'!",0;
+ break;
+ case 5: //Undercross
+ SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Undercross'!",0;
+ break;
+ case 6: //Compass
+ SF_doBroadcast @pvpcost,@map$,"The "+callfunc("GF_getJobName", class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Compass'!",0;
+ break;
+ }
+} //SF_ end
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt
index bcd916b21..735ef5465 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt
@@ -1,139 +1,139 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Stylist Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 1.9
-//===== Compatible With: =====================================
-//= eAthena SVN 3424+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers dying of hair, clothes and hair-style adjusts
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//============================================================
-
-- script keInit_dye -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadDye";
- end;
-}
-
-function script F_keStylist {
-
- function SF_inputpalette;
- function SF_wheelpalette;
-
- set @jobClass,callfunc("GF_getJobLevel",class);
- set @maxCDye,0;
-
- switch (@jobClass) {
- case 0:
- set @maxCDye, $@kedy_clothJN;
- break;
- case 1:
- set @maxCDye, $@kedy_clothJ1ST;
- break;
- case 2:
- set @maxCDye, $@kedy_clothJ2ND;
- break;
- case 3:
- set @maxCDye, $@kedy_clothJSN;
- break;
- case 4:
- set @maxCDye, $@kedy_clothJWED;
- break;
- }
- do {
- if ($@kedy_enableHairstyle) {
- set @kmenu, select(
- "- Return",
- "- Change hairstyle (current is "+getlook(1)+"/max is "+$@kedy_styles+")",
- "- Change hairstyle (by wheel)",
- "- Dye hair (current is "+getlook(6)+"/max is "+$@kedy_hair+")",
- "- Dye hair (by wheel)",
- "- Dye clothes (current is "+getlook(7)+"/max is "+@maxCDye+")",
- "- Dye clothes (by wheel)"
- );
- } else {
- set @kmenu, select(
- "- Return",
- "- Dye hair (current is "+getlook(6)+"/max is "+$@kedy_hair+")",
- "- Dye hair (by wheel)",
- "- Dye clothes (current is "+getlook(7)+"/max is "+@maxCDye+")",
- "- Dye clothes (by wheel)"
- );
- if (@kmenu > 1)
- set @kmenu, @kmenu+2;
- }
- switch (@kmenu) {
- case 2: //Hair Style Input
- SF_inputpalette 1,$@kedy_styles;
- break;
- case 3: //Hair Style Wheel
- SF_wheelpalette 1,$@kedy_styles;
- break;
- case 4: //Hair Dye Input
- SF_inputpalette 6,$@kedy_hair;
- break;
- case 5: //Hair Dye Wheel
- SF_wheelpalette 6,$@kedy_hair;
- break;
- case 6: //Clothes Input
- SF_inputpalette 7,@maxCDye;
- break;
- case 7: //Clothes Wheel
- SF_wheelpalette 7,@maxCDye ;
- break;
- }
- } while (@kmenu > 1);
- return;
-
-//Subfunction: SF_inputpalette(int part, int maxPalette)
-//Sets a palette from the user's request.
-function SF_inputpalette {
- input @pal;
- if (@pal < 0 || @pal > getarg(1)) {
- callfunc "F_keIntro", e_swt2, "Sorry, we do not have that dye available.";
- return;
- }
- setlook getarg(0),@pal;
- emotion e_lv;
-} //SF_ end
-
-//Subfunction: SF_wheelpalette(int part, int maxPalette)
-//Sets a palette through browsing.
-function SF_wheelpalette {
- set @loc, getarg(0);
- set @max, getarg(1);
- set @pal, getlook(@loc);
- set @dir, 1;
- do {
- if (@dir > 0)
- set @submenu, select(
- "Next",
- "Previous",
- "Done (current is "+@pal+")"
- );
- else
- set @submenu, select(
- "Previous",
- "Next",
- "Done (current is "+@pal+")"
- );
- switch (@submenu) {
- case 2: //Swap direction
- set @dir, @dir*-1;
- case 1:
- set @pal, @pal+@dir;
- if (@pal < 0)
- set @pal, @max;
- else if (@pal > @max)
- set @pal, 0;
- setlook @loc,@pal;
- }
- } while (@submenu != 3);
- emotion e_lv2;
-} //SF_ end
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Stylist Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 1.9
+//===== Compatible With: =====================================
+//= eAthena SVN 3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers dying of hair, clothes and hair-style adjusts
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//============================================================
+
+- script keInit_dye -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadDye";
+ end;
+}
+
+function script F_keStylist {
+
+ function SF_inputpalette;
+ function SF_wheelpalette;
+
+ set @jobClass,callfunc("GF_getJobLevel",class);
+ set @maxCDye,0;
+
+ switch (@jobClass) {
+ case 0:
+ set @maxCDye, $@kedy_clothJN;
+ break;
+ case 1:
+ set @maxCDye, $@kedy_clothJ1ST;
+ break;
+ case 2:
+ set @maxCDye, $@kedy_clothJ2ND;
+ break;
+ case 3:
+ set @maxCDye, $@kedy_clothJSN;
+ break;
+ case 4:
+ set @maxCDye, $@kedy_clothJWED;
+ break;
+ }
+ do {
+ if ($@kedy_enableHairstyle) {
+ set @kmenu, select(
+ "- Return",
+ "- Change hairstyle (current is "+getlook(1)+"/max is "+$@kedy_styles+")",
+ "- Change hairstyle (by wheel)",
+ "- Dye hair (current is "+getlook(6)+"/max is "+$@kedy_hair+")",
+ "- Dye hair (by wheel)",
+ "- Dye clothes (current is "+getlook(7)+"/max is "+@maxCDye+")",
+ "- Dye clothes (by wheel)"
+ );
+ } else {
+ set @kmenu, select(
+ "- Return",
+ "- Dye hair (current is "+getlook(6)+"/max is "+$@kedy_hair+")",
+ "- Dye hair (by wheel)",
+ "- Dye clothes (current is "+getlook(7)+"/max is "+@maxCDye+")",
+ "- Dye clothes (by wheel)"
+ );
+ if (@kmenu > 1)
+ set @kmenu, @kmenu+2;
+ }
+ switch (@kmenu) {
+ case 2: //Hair Style Input
+ SF_inputpalette 1,$@kedy_styles;
+ break;
+ case 3: //Hair Style Wheel
+ SF_wheelpalette 1,$@kedy_styles;
+ break;
+ case 4: //Hair Dye Input
+ SF_inputpalette 6,$@kedy_hair;
+ break;
+ case 5: //Hair Dye Wheel
+ SF_wheelpalette 6,$@kedy_hair;
+ break;
+ case 6: //Clothes Input
+ SF_inputpalette 7,@maxCDye;
+ break;
+ case 7: //Clothes Wheel
+ SF_wheelpalette 7,@maxCDye ;
+ break;
+ }
+ } while (@kmenu > 1);
+ return;
+
+//Subfunction: SF_inputpalette(int part, int maxPalette)
+//Sets a palette from the user's request.
+function SF_inputpalette {
+ input @pal;
+ if (@pal < 0 || @pal > getarg(1)) {
+ callfunc "F_keIntro", e_swt2, "Sorry, we do not have that dye available.";
+ return;
+ }
+ setlook getarg(0),@pal;
+ emotion e_lv;
+} //SF_ end
+
+//Subfunction: SF_wheelpalette(int part, int maxPalette)
+//Sets a palette through browsing.
+function SF_wheelpalette {
+ set @loc, getarg(0);
+ set @max, getarg(1);
+ set @pal, getlook(@loc);
+ set @dir, 1;
+ do {
+ if (@dir > 0)
+ set @submenu, select(
+ "Next",
+ "Previous",
+ "Done (current is "+@pal+")"
+ );
+ else
+ set @submenu, select(
+ "Previous",
+ "Next",
+ "Done (current is "+@pal+")"
+ );
+ switch (@submenu) {
+ case 2: //Swap direction
+ set @dir, @dir*-1;
+ case 1:
+ set @pal, @pal+@dir;
+ if (@pal < 0)
+ set @pal, @max;
+ else if (@pal > @max)
+ set @pal, 0;
+ setlook @loc,@pal;
+ }
+ } while (@submenu != 3);
+ emotion e_lv2;
+} //SF_ end
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt
index 0093fe2ae..766918fd0 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt
@@ -1,533 +1,533 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Job Changing Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 3.5
-//===== Compatible With: =====================================
-//= eAthena SVN R3579+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Enables job changing through the class trees.
-//= Novice -> 1st Class, 1st Class -> 2nd Class, rebirths, etc
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//= When using Upper Job policy, previous jobs are stored in
-//= the server wide variables kej_class1 and kej_class2
-//============================================================
-
-- script keInit_jobchange -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadJobChange";
- end;
-}
-
-function script F_keJobChange {
-
- function SF_to1stJob;
- function SF_to2ndJob;
- function SF_getJobNames;
- function SF_testChangeJob;
- function SF_changeJob;
-
- set @job, callfunc("GF_getJobLevel", class);
- set @upper, Upper; //Because it is changed when rebirthing
- set @reset, 0; //Base Level is reset only on rebirths
- switch (@job) {
- case 0: //Novices
- if ($@kejc_skipNovice)
- set @jobLv, 0; //jobLv is used again when checking for S.Novice's base level restriction.
- else
- set @jobLv, 10;
- if (SF_testChangeJob(0,0,@jobLv))
- SF_to1stJob(0);
- break;
- case 1: //First Classes
- if (SF_testChangeJob($@kejc_cost2ND,$@kejc_base2ND,$@kejc_job2ND))
- SF_to2ndJob();
- break;
- case 2: //Second Classes
- if (Upper == 0 && BaseClass != Job_Taekwon) {
- if (SF_testChangeJob($@kejc_costRebirth,$@kejc_baseRebirth,$@kejc_jobRebirth)) {
- set @upper, 1;
- if ($@kejc_skipNovice)
- SF_to1stJob(1);
- else
- SF_changeJob @job,Upper,Job_Novice,1,0,0,$@kejc_costRebirth,1,$@kejc_rebirthReset;
- }
- break;
- }
- default: //Dead End
- callfunc "F_keIntro", e_swt2, "I cannot change you from your current job.";
- break;
- }
- return;
-
-//Handles changing to 1st job.
-function SF_to1stJob {
- do {
- set @submenu, 1;
- if (@upper == 1 && $@kejc_upperPolicy && kej_class1) {
- switch (kej_class1) {
- case Job_Acolyte:
- set @submenu, 2;
- break;
- case Job_Archer:
- set @submenu, 3;
- break;
- case Job_Mage:
- set @submenu, 4;
- break;
- case Job_Merchant:
- set @submenu, 5;
- break;
- case Job_Swordman:
- set @submenu, 6;
- break;
- case Job_Thief:
- set @submenu, 7;
- break;
- case Job_Taekwon:
- set @submenu, 8;
- break;
- }
- }
- if (@submenu == 1) {
- SF_getJobNames 8,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief,Job_Taekwon,Job_SuperNovice;
- switch (@upper) {
- case 0: //All
- set @submenu, select(
- "- Cancel job change",
- "- "+@name1$,
- "- "+@name2$,
- "- "+@name3$,
- "- "+@name4$,
- "- "+@name5$,
- "- "+@name6$,
- "- "+@name7$,
- "- "+@name8$
- );
- break;
- case 1: //No Taekwon/S.Novice
- set @submenu, select(
- "- Cancel job change",
- "- "+@name1$,
- "- "+@name2$,
- "- "+@name3$,
- "- "+@name4$,
- "- "+@name5$,
- "- "+@name6$
- );
- break;
- case 2: //No Taekwon
- set @submenu, select(
- "- Cancel job change",
- "- "+@name1$,
- "- "+@name2$,
- "- "+@name3$,
- "- "+@name4$,
- "- "+@name5$,
- "- "+@name6$,
- "- "+@name8$
- );
- if (@submenu == 8)
- set @submenu, 9;
- break;
- }
- }
- switch (@submenu) {
- case 2: //Acolyte
- set @newJob,Job_Acolyte;
- set @weapon, $@kejc_wAcolyte;
- break;
- case 3: //Archer
- set @newJob,Job_Archer;
- set @weapon, $@kejc_wArcher;
- break;
- case 4: //Mage
- set @newJob,Job_Mage;
- set @weapon, $@kejc_wMage;
- break;
- case 5: //Merchant
- set @newJob,Job_Merchant;
- set @weapon, $@kejc_wMerchant;
- break;
- case 6: //Swordman
- set @newJob,Job_Swordman;
- set @weapon, $@kejc_wSwordman;
- break;
- case 7: //Thief
- set @newJob,Job_Thief;
- set @weapon, $@kejc_wThief;
- break;
- case 8: //Taekwon
- set @newJob,Job_Taekwon;
- set @weapon, $@kejc_wTaekwon;
- break;
- case 9: //S. Novice
- set @newJob,Job_SuperNovice;
- set @weapon, $@kejc_wSuperNovice;
- if (SF_testChangeJob(0,$@kejc_baseSN,@jobLv) == 0)
- return;
- break;
- }
- if (@submenu > 1) {
- if (getarg(0)) { //Skipping High Novice, charge rebirth costs.
- if (SF_changeJob(@job,Upper,@newJob,1,@weapon,0,$@kejc_costRebirth,2,$@kejc_rebirthReset))
- return;
- } else {
- if (SF_changeJob(@job,Upper,@newJob,@upper,@weapon,0,0,2,0))
- return;
- }
- }
- } while (@submenu > 1);
-}
-
-function SF_to2ndJob {
- do {
- set @submenu, 1;
- if (@upper == 1 && $@kejc_upperPolicy && kej_class2) {
- switch (kej_class2) {
- case Job_Priest:
- case Job_Hunter:
- case Job_Wizard:
- case Job_Blacksmith:
- case Job_Knight:
- case Job_Knight2:
- case Job_Assassin:
- case Job_Star_Gladiator:
- case Job_Star_Gladiator2:
- set @submenu, 2;
- break;
- case Job_Monk:
- case Job_Bard:
- case Job_Dancer:
- case Job_Sage:
- case Job_Alchem:
- case Job_Crusader:
- case Job_Crusader2:
- case Job_Rogue:
- case Job_Soul_Linker:
- set @submenu, 3;
- break;
- }
- }
- if (@submenu == 1) { //Fetch from menu.
- switch (BaseClass) {
- case Job_Acolyte:
- SF_getJobNames 2,Job_Priest,Job_Monk;
- break;
- case Job_Archer:
- SF_getJobNames 3,Job_Hunter,Job_Bard,Job_Dancer;
- if (sex == 0)
- set @name2$, @name3$;
- break;
- case Job_Mage:
- SF_getJobNames 2,Job_Wizard,Job_Sage;
- break;
- case Job_Merchant:
- SF_getJobNames 2,Job_Blacksmith,Job_Alchem;
- break;
- case Job_Swordman:
- SF_getJobNames 2,Job_Knight,Job_Crusader;
- break;
- case Job_Thief:
- SF_getJobNames 2,Job_Assassin,Job_Rogue;
- break;
- case Job_Taekwon:
- SF_getJobNames 2,Job_Star_Gladiator,Job_Soul_Linker;
- break;
- default:
- callfunc "F_keIntro", e_swt2, "I don't know how to change you from your current job.";
- return;
- }
- set @submenu, select(
- "- Cancel job change",
- "- "+@name1$,
- "- "+@name2$
- );
- }
- switch (BaseClass) {
- case Job_Acolyte:
- switch (@submenu) {
- case 2: //Priest
- set @newJob,Job_Priest;
- set @weapon,$@kejc_wPriest;
- set @weapon2,$@kejc_w2Priest;
- break;
- case 3: //Monk
- set @newJob,Job_Monk;
- set @weapon,$@kejc_wMonk;
- set @weapon2,$@kejc_w2Monk;
- break;
- }
- break;
- case Job_Archer:
- switch (@submenu) {
- case 2: //Hunter
- set @newJob,Job_Hunter;
- set @weapon,$@kejc_wHunter;
- set @weapon2,$@kejc_w2Hunter;
- break;
- case 3: //Bard/Dancer
- if (sex == 1) { //Bard
- set @newJob,Job_Bard;
- set @weapon,$@kejc_wBard;
- set @weapon2,$@kejc_w2Bard;
- } else { //Dancer
- set @newJob,Job_Dancer;
- set @weapon,$@kejc_wDancer;
- set @weapon2,$@kejc_w2Dancer;
- }
- break;
- }
- break;
- case Job_Mage:
- switch (@submenu) {
- case 2: //Wizard
- set @newJob,Job_Wizard;
- set @weapon,$@kejc_wWizard;
- set @weapon2,$@kejc_w2Wizard;
- break;
- case 3: //Sage
- set @newJob,Job_Sage;
- set @weapon,$@kejc_wSage;
- set @weapon2,$@kejc_w2Sage;
- break;
- }
- break;
- case Job_Merchant:
- switch (@submenu) {
- case 2: //Blacksmith
- set @newJob,Job_Blacksmith;
- set @weapon,$@kejc_wBlacksmith;
- set @weapon2,$@kejc_w2Blacksmith;
- break;
- case 3: //Alchemist
- set @newJob,Job_Alchem;
- set @weapon,$@kejc_wAlchemist;
- set @weapon2,$@kejc_w2Alchemist;
- break;
- }
- break;
- case Job_Swordman:
- switch (@submenu) {
- case 2: //Knight
- set @newJob,Job_Knight;
- set @weapon,$@kejc_wKnight;
- set @weapon2,$@kejc_w2Knight;
- break;
- case 3: //Crusader
- set @newJob,Job_Crusader;
- set @weapon,$@kejc_wCrusader;
- set @weapon2,$@kejc_w2Crusader;
- break;
- default:
- mes "uh oh";
- break;
- }
- break;
- case Job_Thief:
- switch (@submenu) {
- case 2: //Assassin
- set @newJob,Job_Assassin;
- set @weapon,$@kejc_wAssassin;
- set @weapon2,$@kejc_w2Assassin;
- break;
- case 3: //Rogue
- set @newJob,Job_Rogue;
- set @weapon,$@kejc_wRogue;
- set @weapon2,$@kejc_w2Rogue;
- break;
- }
- break;
- case Job_Taekwon:
- switch (@submenu) {
- case 2: //Star Gladiator
- set @newJob,Job_Star_Gladiator;
- set @weapon,$@kejc_wStarGladiator;
- set @weapon2,$@kejc_w2StarGladiator;
- break;
- case 3: //Soul Linker
- set @newJob,Job_Soul_Linker;
- set @weapon,$@kejc_wSoulLinker;
- set @weapon2,$@kejc_w2SoulLinker;
- break;
- }
- break;
- }
- if (@submenu > 1) {
- if (SF_changeJob(@job,Upper,@newJob,@upper,@weapon,@weapon2,$@kejc_cost2ND,0,0))
- return;
- }
- } while (@submenu > 1);
-}
-
-//SubFunction: SF_testChangeJob(Zeny, BaseLv, JobLv)
-//Function that checks if the player qualifies for job changing.
-function SF_testChangeJob {
- set @fail, 0;
- if (Zeny < getarg(0))
- set @fail, 1;
- if (BaseLevel < getarg(1))
- set @fail, @fail+2;
- if (JobLevel < getarg(2))
- set @fail, @fail+4;
- if (@fail > 0) {
- if (@fail&1)
- mes "You need "+getarg(0)+"z for the conversion process.";
- if (@fail&2)
- mes "You need to be at least Lv "+getarg(1)+".";
- if (@fail&4)
- mes "You need at least job Lv "+getarg(2)+".";
- callfunc "F_keIntro", e_pif, "Sorry, you don't qualify for a job change yet.";
- return 0;
- }
-
- if (SkillPoint > 0 && $@kejc_skillsPolicy == 0) {
- callfunc "F_keIntro", e_dots, "Sorry, use your remaining Skill points before being able to change class.";
- return 0;
- }
- return 1;
-}
-
-//SubFunction: SF_changeJob (CurrentJobLv, CurrentJobType, NewJobBase, NewJobType
-//Weapon, Weapon2, Zeny, WipeSkills, ResetLv)
-//Attempts to change to the Jobgiven.
-//CurrentJobLv is 0-3 (novice, 1st class, 2nd class, s.novice)
-//Type is 0-2 (Normal, Advanced Class, Baby)
-//Weapon is the ID of the weapon to grant
-//Weapon2 is the alternative weapon granted when your job level is above $@kejc_wBonusLv
-//Zeny is the money required (if negative, it is money awarded)
-//WipeSkills if 1, indicates that skills should be wiped,
-//if 2, it means basic skills have to be given back
-//Reset Level indicates the base lv must be reset to 1.
-//Note: Zeny/Base/Job requirements should had been checked with SF_testChangeJob already!
-function SF_changeJob {
- set @newjob,getarg(2);
- set @newtype,getarg(3);
- set @weapon,getarg(4);
- set @weapon2,getarg(5);
- set @cost,getarg(6);
- set @wipeSkill,getarg(7);
- set @resetLv,getarg(8);
-
- set @jobStr$, callfunc("GF_getJobName2",@newjob, @newtype);
- if (@wipeSkill == 0 && SkillPoint > 0 && $@kejc_skillsPolicy == 1) {
- set @selection, select(
- "- Do not change yet",
- "- Change to "+@jobStr$+" (skill points lost)",
- "- View details"
- );
- } else {
- set @selection, select(
- "- Cancel",
- "- Change to "+@jobStr$,
- "- View details"
- );
- }
- switch (@selection) {
- case 3: //Details
- mes "Okay.. listen up:";
- next;
- mes "["+@name$+"]";
- mes "Changing to "+@jobStr$+" now means:";
- if (@wipeSkill == 0 && SkillPoint > 0 && $@kejc_skillsPolicy == 1)
- mes "- You will lose your "+SkillPoint+" unused skill points.";
- else if (@wipeSkill == 1)
- mes "- You will lose all your skills.";
- if (@resetLv)
- mes "- Your base level will be reset to 1.";
- if (@cost > 0)
- mes "- You will be charged "+@cost+"z.";
- else if (@cost < 0)
- mes "- You will be aided with "+(0-@cost)+"z.";
- if (@weapon > 0) {
- if (@weapon2 > 0 && $@kejc_wBonusLv) {
- if (JobLevel < $@kejc_wBonusLv) {
- mes "- You will receive a "+getitemname(@weapon)+"["+getitemslots(@weapon)+"].";
- mes "- If you wait until Job Lv"+$@kejc_wBonusLv+", you can receive instead a "+getitemname(@weapon2)+"["+getitemslots(@weapon)+"].";
- } else {
- mes "- You will receive a "+getitemname(@weapon2)+"["+getitemslots(@weapon)+"] for reaching Job Lv"+$@kejc_wBonusLv+".";
- }
- } else
- mes "- You will receive a "+getitemname(@weapon)+".";
- }
- mes "So... will you change?";
- if (select(
- "- Cancel",
- "- Change to "+@jobStr$
- ) != 2) {
- callfunc "F_keIntro", e_dots, "...alright.";
- return 0;
- }
- callfunc "F_keIntro", -1, "Enjoy your new Job.";
- case 2: //Change
- //Set/Unset job path variables as needed.
- if($@kejc_upperPolicy) {
- set @class,getarg(0);
- set @type, getarg(1);
- if(@class == 1 && @type == 0)
- set kej_class1,class; //Advancing to second class, so...
- if(@class == 2)
- set kej_class2,class; //Only way of being here is by doing a rebirth
- if(@type > 0)
- set kej_class1,0; //Clear when one is a high class
- if(@type > 0 && @class == 1)
- set kej_class2,0; //Clear when leaving high 1st class
- }
- if (@resetLv) {
- jobchange Job_Novice_High; //Done to give players those 100 points from High classes
- resetlvl(1);
- }
- if (@wipeSkill) {
- resetskill;
- setoption(0);
- set SkillPoint,0;
- } else if ($@kejc_skillsPolicy == 1)
- set SkillPoint,0;
- if (@wipeSkill>1)
- skill 1,9,0;
- if($@kejc_resetDye)
- setlook 7,0;
- jobchange @newjob, @newtype;
- if ($@kejc_announce)
- announce strcharinfo(0)+" has been promoted to "+@jobStr$+"!",8;
- set Zeny,Zeny-@cost;
- if ($@kejc_weaponPolicy && @weapon > 0) {
- if ($@kejc_wBonusLv && @weapon2 > 0) {
- if (JobLevel < $@kejc_wBonusLv)
- getitem @weapon,1;
- else
- getitem @weapon2,1;
- } else
- getitem @weapon,1;
- }
- emotion e_grat;
- return 1;
- default: //Cancel...
- callfunc "F_keIntro", e_dots, "...alright.";
- return 0;
- }
-}
-//SubFunction: SF_getJobNames(Qty, Jobid1, Jobid2,...)
-//Workaround until eA gets a fix for the bug where you can't use callfunc or
-//callsub within a menu
-function SF_getJobNames {
- switch (getarg(0)) {
- case 8:
- set @name8$, callfunc("GF_getJobName2",getarg(8),@upper);
- set @name7$, callfunc("GF_getJobName2",getarg(7),@upper);
- set @name6$, callfunc("GF_getJobName2",getarg(6),@upper);
- set @name5$, callfunc("GF_getJobName2",getarg(5),@upper);
- set @name4$, callfunc("GF_getJobName2",getarg(4),@upper);
- case 3:
- set @name3$, callfunc("GF_getJobName2",getarg(3),@upper);
- case 2:
- set @name2$, callfunc("GF_getJobName2",getarg(2),@upper);
- set @name1$, callfunc("GF_getJobName2",getarg(1),@upper);
- }
- return;
-}
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Job Changing Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 3.5
+//===== Compatible With: =====================================
+//= eAthena SVN R3579+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Enables job changing through the class trees.
+//= Novice -> 1st Class, 1st Class -> 2nd Class, rebirths, etc
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//= When using Upper Job policy, previous jobs are stored in
+//= the server wide variables kej_class1 and kej_class2
+//============================================================
+
+- script keInit_jobchange -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadJobChange";
+ end;
+}
+
+function script F_keJobChange {
+
+ function SF_to1stJob;
+ function SF_to2ndJob;
+ function SF_getJobNames;
+ function SF_testChangeJob;
+ function SF_changeJob;
+
+ set @job, callfunc("GF_getJobLevel", class);
+ set @upper, Upper; //Because it is changed when rebirthing
+ set @reset, 0; //Base Level is reset only on rebirths
+ switch (@job) {
+ case 0: //Novices
+ if ($@kejc_skipNovice)
+ set @jobLv, 0; //jobLv is used again when checking for S.Novice's base level restriction.
+ else
+ set @jobLv, 10;
+ if (SF_testChangeJob(0,0,@jobLv))
+ SF_to1stJob(0);
+ break;
+ case 1: //First Classes
+ if (SF_testChangeJob($@kejc_cost2ND,$@kejc_base2ND,$@kejc_job2ND))
+ SF_to2ndJob();
+ break;
+ case 2: //Second Classes
+ if (Upper == 0 && BaseClass != Job_Taekwon) {
+ if (SF_testChangeJob($@kejc_costRebirth,$@kejc_baseRebirth,$@kejc_jobRebirth)) {
+ set @upper, 1;
+ if ($@kejc_skipNovice)
+ SF_to1stJob(1);
+ else
+ SF_changeJob @job,Upper,Job_Novice,1,0,0,$@kejc_costRebirth,1,$@kejc_rebirthReset;
+ }
+ break;
+ }
+ default: //Dead End
+ callfunc "F_keIntro", e_swt2, "I cannot change you from your current job.";
+ break;
+ }
+ return;
+
+//Handles changing to 1st job.
+function SF_to1stJob {
+ do {
+ set @submenu, 1;
+ if (@upper == 1 && $@kejc_upperPolicy && kej_class1) {
+ switch (kej_class1) {
+ case Job_Acolyte:
+ set @submenu, 2;
+ break;
+ case Job_Archer:
+ set @submenu, 3;
+ break;
+ case Job_Mage:
+ set @submenu, 4;
+ break;
+ case Job_Merchant:
+ set @submenu, 5;
+ break;
+ case Job_Swordman:
+ set @submenu, 6;
+ break;
+ case Job_Thief:
+ set @submenu, 7;
+ break;
+ case Job_Taekwon:
+ set @submenu, 8;
+ break;
+ }
+ }
+ if (@submenu == 1) {
+ SF_getJobNames 8,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief,Job_Taekwon,Job_SuperNovice;
+ switch (@upper) {
+ case 0: //All
+ set @submenu, select(
+ "- Cancel job change",
+ "- "+@name1$,
+ "- "+@name2$,
+ "- "+@name3$,
+ "- "+@name4$,
+ "- "+@name5$,
+ "- "+@name6$,
+ "- "+@name7$,
+ "- "+@name8$
+ );
+ break;
+ case 1: //No Taekwon/S.Novice
+ set @submenu, select(
+ "- Cancel job change",
+ "- "+@name1$,
+ "- "+@name2$,
+ "- "+@name3$,
+ "- "+@name4$,
+ "- "+@name5$,
+ "- "+@name6$
+ );
+ break;
+ case 2: //No Taekwon
+ set @submenu, select(
+ "- Cancel job change",
+ "- "+@name1$,
+ "- "+@name2$,
+ "- "+@name3$,
+ "- "+@name4$,
+ "- "+@name5$,
+ "- "+@name6$,
+ "- "+@name8$
+ );
+ if (@submenu == 8)
+ set @submenu, 9;
+ break;
+ }
+ }
+ switch (@submenu) {
+ case 2: //Acolyte
+ set @newJob,Job_Acolyte;
+ set @weapon, $@kejc_wAcolyte;
+ break;
+ case 3: //Archer
+ set @newJob,Job_Archer;
+ set @weapon, $@kejc_wArcher;
+ break;
+ case 4: //Mage
+ set @newJob,Job_Mage;
+ set @weapon, $@kejc_wMage;
+ break;
+ case 5: //Merchant
+ set @newJob,Job_Merchant;
+ set @weapon, $@kejc_wMerchant;
+ break;
+ case 6: //Swordman
+ set @newJob,Job_Swordman;
+ set @weapon, $@kejc_wSwordman;
+ break;
+ case 7: //Thief
+ set @newJob,Job_Thief;
+ set @weapon, $@kejc_wThief;
+ break;
+ case 8: //Taekwon
+ set @newJob,Job_Taekwon;
+ set @weapon, $@kejc_wTaekwon;
+ break;
+ case 9: //S. Novice
+ set @newJob,Job_SuperNovice;
+ set @weapon, $@kejc_wSuperNovice;
+ if (SF_testChangeJob(0,$@kejc_baseSN,@jobLv) == 0)
+ return;
+ break;
+ }
+ if (@submenu > 1) {
+ if (getarg(0)) { //Skipping High Novice, charge rebirth costs.
+ if (SF_changeJob(@job,Upper,@newJob,1,@weapon,0,$@kejc_costRebirth,2,$@kejc_rebirthReset))
+ return;
+ } else {
+ if (SF_changeJob(@job,Upper,@newJob,@upper,@weapon,0,0,2,0))
+ return;
+ }
+ }
+ } while (@submenu > 1);
+}
+
+function SF_to2ndJob {
+ do {
+ set @submenu, 1;
+ if (@upper == 1 && $@kejc_upperPolicy && kej_class2) {
+ switch (kej_class2) {
+ case Job_Priest:
+ case Job_Hunter:
+ case Job_Wizard:
+ case Job_Blacksmith:
+ case Job_Knight:
+ case Job_Knight2:
+ case Job_Assassin:
+ case Job_Star_Gladiator:
+ case Job_Star_Gladiator2:
+ set @submenu, 2;
+ break;
+ case Job_Monk:
+ case Job_Bard:
+ case Job_Dancer:
+ case Job_Sage:
+ case Job_Alchem:
+ case Job_Crusader:
+ case Job_Crusader2:
+ case Job_Rogue:
+ case Job_Soul_Linker:
+ set @submenu, 3;
+ break;
+ }
+ }
+ if (@submenu == 1) { //Fetch from menu.
+ switch (BaseClass) {
+ case Job_Acolyte:
+ SF_getJobNames 2,Job_Priest,Job_Monk;
+ break;
+ case Job_Archer:
+ SF_getJobNames 3,Job_Hunter,Job_Bard,Job_Dancer;
+ if (sex == 0)
+ set @name2$, @name3$;
+ break;
+ case Job_Mage:
+ SF_getJobNames 2,Job_Wizard,Job_Sage;
+ break;
+ case Job_Merchant:
+ SF_getJobNames 2,Job_Blacksmith,Job_Alchem;
+ break;
+ case Job_Swordman:
+ SF_getJobNames 2,Job_Knight,Job_Crusader;
+ break;
+ case Job_Thief:
+ SF_getJobNames 2,Job_Assassin,Job_Rogue;
+ break;
+ case Job_Taekwon:
+ SF_getJobNames 2,Job_Star_Gladiator,Job_Soul_Linker;
+ break;
+ default:
+ callfunc "F_keIntro", e_swt2, "I don't know how to change you from your current job.";
+ return;
+ }
+ set @submenu, select(
+ "- Cancel job change",
+ "- "+@name1$,
+ "- "+@name2$
+ );
+ }
+ switch (BaseClass) {
+ case Job_Acolyte:
+ switch (@submenu) {
+ case 2: //Priest
+ set @newJob,Job_Priest;
+ set @weapon,$@kejc_wPriest;
+ set @weapon2,$@kejc_w2Priest;
+ break;
+ case 3: //Monk
+ set @newJob,Job_Monk;
+ set @weapon,$@kejc_wMonk;
+ set @weapon2,$@kejc_w2Monk;
+ break;
+ }
+ break;
+ case Job_Archer:
+ switch (@submenu) {
+ case 2: //Hunter
+ set @newJob,Job_Hunter;
+ set @weapon,$@kejc_wHunter;
+ set @weapon2,$@kejc_w2Hunter;
+ break;
+ case 3: //Bard/Dancer
+ if (sex == 1) { //Bard
+ set @newJob,Job_Bard;
+ set @weapon,$@kejc_wBard;
+ set @weapon2,$@kejc_w2Bard;
+ } else { //Dancer
+ set @newJob,Job_Dancer;
+ set @weapon,$@kejc_wDancer;
+ set @weapon2,$@kejc_w2Dancer;
+ }
+ break;
+ }
+ break;
+ case Job_Mage:
+ switch (@submenu) {
+ case 2: //Wizard
+ set @newJob,Job_Wizard;
+ set @weapon,$@kejc_wWizard;
+ set @weapon2,$@kejc_w2Wizard;
+ break;
+ case 3: //Sage
+ set @newJob,Job_Sage;
+ set @weapon,$@kejc_wSage;
+ set @weapon2,$@kejc_w2Sage;
+ break;
+ }
+ break;
+ case Job_Merchant:
+ switch (@submenu) {
+ case 2: //Blacksmith
+ set @newJob,Job_Blacksmith;
+ set @weapon,$@kejc_wBlacksmith;
+ set @weapon2,$@kejc_w2Blacksmith;
+ break;
+ case 3: //Alchemist
+ set @newJob,Job_Alchem;
+ set @weapon,$@kejc_wAlchemist;
+ set @weapon2,$@kejc_w2Alchemist;
+ break;
+ }
+ break;
+ case Job_Swordman:
+ switch (@submenu) {
+ case 2: //Knight
+ set @newJob,Job_Knight;
+ set @weapon,$@kejc_wKnight;
+ set @weapon2,$@kejc_w2Knight;
+ break;
+ case 3: //Crusader
+ set @newJob,Job_Crusader;
+ set @weapon,$@kejc_wCrusader;
+ set @weapon2,$@kejc_w2Crusader;
+ break;
+ default:
+ mes "uh oh";
+ break;
+ }
+ break;
+ case Job_Thief:
+ switch (@submenu) {
+ case 2: //Assassin
+ set @newJob,Job_Assassin;
+ set @weapon,$@kejc_wAssassin;
+ set @weapon2,$@kejc_w2Assassin;
+ break;
+ case 3: //Rogue
+ set @newJob,Job_Rogue;
+ set @weapon,$@kejc_wRogue;
+ set @weapon2,$@kejc_w2Rogue;
+ break;
+ }
+ break;
+ case Job_Taekwon:
+ switch (@submenu) {
+ case 2: //Star Gladiator
+ set @newJob,Job_Star_Gladiator;
+ set @weapon,$@kejc_wStarGladiator;
+ set @weapon2,$@kejc_w2StarGladiator;
+ break;
+ case 3: //Soul Linker
+ set @newJob,Job_Soul_Linker;
+ set @weapon,$@kejc_wSoulLinker;
+ set @weapon2,$@kejc_w2SoulLinker;
+ break;
+ }
+ break;
+ }
+ if (@submenu > 1) {
+ if (SF_changeJob(@job,Upper,@newJob,@upper,@weapon,@weapon2,$@kejc_cost2ND,0,0))
+ return;
+ }
+ } while (@submenu > 1);
+}
+
+//SubFunction: SF_testChangeJob(Zeny, BaseLv, JobLv)
+//Function that checks if the player qualifies for job changing.
+function SF_testChangeJob {
+ set @fail, 0;
+ if (Zeny < getarg(0))
+ set @fail, 1;
+ if (BaseLevel < getarg(1))
+ set @fail, @fail+2;
+ if (JobLevel < getarg(2))
+ set @fail, @fail+4;
+ if (@fail > 0) {
+ if (@fail&1)
+ mes "You need "+getarg(0)+"z for the conversion process.";
+ if (@fail&2)
+ mes "You need to be at least Lv "+getarg(1)+".";
+ if (@fail&4)
+ mes "You need at least job Lv "+getarg(2)+".";
+ callfunc "F_keIntro", e_pif, "Sorry, you don't qualify for a job change yet.";
+ return 0;
+ }
+
+ if (SkillPoint > 0 && $@kejc_skillsPolicy == 0) {
+ callfunc "F_keIntro", e_dots, "Sorry, use your remaining Skill points before being able to change class.";
+ return 0;
+ }
+ return 1;
+}
+
+//SubFunction: SF_changeJob (CurrentJobLv, CurrentJobType, NewJobBase, NewJobType
+//Weapon, Weapon2, Zeny, WipeSkills, ResetLv)
+//Attempts to change to the Jobgiven.
+//CurrentJobLv is 0-3 (novice, 1st class, 2nd class, s.novice)
+//Type is 0-2 (Normal, Advanced Class, Baby)
+//Weapon is the ID of the weapon to grant
+//Weapon2 is the alternative weapon granted when your job level is above $@kejc_wBonusLv
+//Zeny is the money required (if negative, it is money awarded)
+//WipeSkills if 1, indicates that skills should be wiped,
+//if 2, it means basic skills have to be given back
+//Reset Level indicates the base lv must be reset to 1.
+//Note: Zeny/Base/Job requirements should had been checked with SF_testChangeJob already!
+function SF_changeJob {
+ set @newjob,getarg(2);
+ set @newtype,getarg(3);
+ set @weapon,getarg(4);
+ set @weapon2,getarg(5);
+ set @cost,getarg(6);
+ set @wipeSkill,getarg(7);
+ set @resetLv,getarg(8);
+
+ set @jobStr$, callfunc("GF_getJobName2",@newjob, @newtype);
+ if (@wipeSkill == 0 && SkillPoint > 0 && $@kejc_skillsPolicy == 1) {
+ set @selection, select(
+ "- Do not change yet",
+ "- Change to "+@jobStr$+" (skill points lost)",
+ "- View details"
+ );
+ } else {
+ set @selection, select(
+ "- Cancel",
+ "- Change to "+@jobStr$,
+ "- View details"
+ );
+ }
+ switch (@selection) {
+ case 3: //Details
+ mes "Okay.. listen up:";
+ next;
+ mes "["+@name$+"]";
+ mes "Changing to "+@jobStr$+" now means:";
+ if (@wipeSkill == 0 && SkillPoint > 0 && $@kejc_skillsPolicy == 1)
+ mes "- You will lose your "+SkillPoint+" unused skill points.";
+ else if (@wipeSkill == 1)
+ mes "- You will lose all your skills.";
+ if (@resetLv)
+ mes "- Your base level will be reset to 1.";
+ if (@cost > 0)
+ mes "- You will be charged "+@cost+"z.";
+ else if (@cost < 0)
+ mes "- You will be aided with "+(0-@cost)+"z.";
+ if (@weapon > 0) {
+ if (@weapon2 > 0 && $@kejc_wBonusLv) {
+ if (JobLevel < $@kejc_wBonusLv) {
+ mes "- You will receive a "+getitemname(@weapon)+"["+getitemslots(@weapon)+"].";
+ mes "- If you wait until Job Lv"+$@kejc_wBonusLv+", you can receive instead a "+getitemname(@weapon2)+"["+getitemslots(@weapon)+"].";
+ } else {
+ mes "- You will receive a "+getitemname(@weapon2)+"["+getitemslots(@weapon)+"] for reaching Job Lv"+$@kejc_wBonusLv+".";
+ }
+ } else
+ mes "- You will receive a "+getitemname(@weapon)+".";
+ }
+ mes "So... will you change?";
+ if (select(
+ "- Cancel",
+ "- Change to "+@jobStr$
+ ) != 2) {
+ callfunc "F_keIntro", e_dots, "...alright.";
+ return 0;
+ }
+ callfunc "F_keIntro", -1, "Enjoy your new Job.";
+ case 2: //Change
+ //Set/Unset job path variables as needed.
+ if($@kejc_upperPolicy) {
+ set @class,getarg(0);
+ set @type, getarg(1);
+ if(@class == 1 && @type == 0)
+ set kej_class1,class; //Advancing to second class, so...
+ if(@class == 2)
+ set kej_class2,class; //Only way of being here is by doing a rebirth
+ if(@type > 0)
+ set kej_class1,0; //Clear when one is a high class
+ if(@type > 0 && @class == 1)
+ set kej_class2,0; //Clear when leaving high 1st class
+ }
+ if (@resetLv) {
+ jobchange Job_Novice_High; //Done to give players those 100 points from High classes
+ resetlvl(1);
+ }
+ if (@wipeSkill) {
+ resetskill;
+ setoption(0);
+ set SkillPoint,0;
+ } else if ($@kejc_skillsPolicy == 1)
+ set SkillPoint,0;
+ if (@wipeSkill>1)
+ skill 1,9,0;
+ if($@kejc_resetDye)
+ setlook 7,0;
+ jobchange @newjob, @newtype;
+ if ($@kejc_announce)
+ announce strcharinfo(0)+" has been promoted to "+@jobStr$+"!",8;
+ set Zeny,Zeny-@cost;
+ if ($@kejc_weaponPolicy && @weapon > 0) {
+ if ($@kejc_wBonusLv && @weapon2 > 0) {
+ if (JobLevel < $@kejc_wBonusLv)
+ getitem @weapon,1;
+ else
+ getitem @weapon2,1;
+ } else
+ getitem @weapon,1;
+ }
+ emotion e_grat;
+ return 1;
+ default: //Cancel...
+ callfunc "F_keIntro", e_dots, "...alright.";
+ return 0;
+ }
+}
+//SubFunction: SF_getJobNames(Qty, Jobid1, Jobid2,...)
+//Workaround until eA gets a fix for the bug where you can't use callfunc or
+//callsub within a menu
+function SF_getJobNames {
+ switch (getarg(0)) {
+ case 8:
+ set @name8$, callfunc("GF_getJobName2",getarg(8),@upper);
+ set @name7$, callfunc("GF_getJobName2",getarg(7),@upper);
+ set @name6$, callfunc("GF_getJobName2",getarg(6),@upper);
+ set @name5$, callfunc("GF_getJobName2",getarg(5),@upper);
+ set @name4$, callfunc("GF_getJobName2",getarg(4),@upper);
+ case 3:
+ set @name3$, callfunc("GF_getJobName2",getarg(3),@upper);
+ case 2:
+ set @name2$, callfunc("GF_getJobName2",getarg(2),@upper);
+ set @name1$, callfunc("GF_getJobName2",getarg(1),@upper);
+ }
+ return;
+}
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt
index 59311cca5..8d91242cc 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt
@@ -1,418 +1,418 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Job Swapping Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 3.4
-//===== Compatible With: =====================================
-//= eAthena SVN R7896+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Enables job changing among classes of the same 'type'
-//= (ie among 1st classes, or among 2nd classes)
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//= * The previous Job, when enabled, is stored in:
-//= kej_prev_job (job id)
-//= kej_prev_joblv (job level)
-//= kej_prev_skills (skill count)
-//= kej_prev_dye (cloth dye)
-//============================================================
-
-- script keInit_jobSwap -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadJobSwap";
- end;
-}
-
-function script F_keJobSwap {
-
-function SF_canRevert;
-function SF_canSwitch;
-function SF_revertJob;
-function SF_switch;
-function SF_calcSwapCost;
-function SF_testSwap;
-function SF_swapJob;
-function SF_getJobNames;
-
- set @thisLevel, callfunc("GF_getJobLevel", Class);
-
- set @prevId, kej_prev_job;
- set @prevLv, kej_prev_joblv;
- set @prevLevel, 0;
- set @prevType, 0;
-
- if ($@kejs_revertPolicy && @prevId && @prevLv) {
- set @prevLevel, callfunc("GF_getJobLevel", @prevId);
- set @prevType, callfunc("GF_getJobType", @prevId);
- }
-
- if (SF_canRevert())
- { //Qualifies for Reverting
- do {
- set @revertmenu, select(
- "- Return",
- "- Return to previous class",
- "- Change into another class"
- );
- switch (@revertmenu) {
- case 2: //Revert
- if (SF_revertJob())
- return;
- break;
- case 3: //Switch
- if (SF_switch() == 0)
- return;
- break;
- }
- } while (@revertmenu > 1);
- return;
- }
- if (SF_canSwitch())
- {
- SF_switch();
- return;
- }
-
- callfunc "F_keIntro", e_swt2, "There are no available jobs of your level.";
- return;
-
-//SubFunction SF_canRevert, specifies if the character can revert to previous job.
-function SF_canRevert {
- if ($@kejs_revertPolicy == 0 || @prevId == 0 || (Upper == 2 && @prevType != 2))
- return 0;
- if((@thisLevel == @prevLevel && Upper == @prevType) || $@kejs_revertPolicy == 2)
- return 1;
- if ($@kejs_SNpolicy && @prevType == Upper && ((@prevLevel == 3 && @thisLevel == 1) || (@prevLevel == 1 && @thisLevel == 3)))
- return 1;
- return 0;
-}
-
-//SubFunction SF_canSwitch, specifies if character can change to another job.
-function SF_canSwitch {
- if (@thisLevel == 3)
- return $@kejs_SNpolicy;
- if (@thisLevel == 1 || @thisLevel == 2)
- return 1;
- return 0;
-}
-
-//Sub Function SF_switch. Presents the switch job menu. Returns 1 only if the
-//menu was left by picking "Cancel".
-function SF_switch {
- switch (@thisLevel) {
- case 1:
- case 3: //First Classes
- set @cost, SF_calcSwapCost($@kejs_job1ST, $@kejs_cost1ST, $@kejs_discount1ST);
- set @preserve, $@kejs_preserve1ST;
- if (SF_testSwap($@kejs_job1ST, @cost)) {
- do {
- if ($@kejs_SNpolicy && Upper != 1) { //S. Novice Menu
- SF_getJobNames 7,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief,Job_SuperNovice;
- set @kmenu, select(
- "- Cancel job swap",
- "- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,"- "+@name7$
- );
- } else {
- SF_getJobNames 6,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief;
- set @kmenu, select(
- "- Cancel job swap",
- "- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$
- );
- }
- switch (@kmenu) {
- case 2: //Acolyte
- if (SF_swapJob(callfunc("GF_getJobId", Job_Acolyte, Upper),@cost,@preserve))
- return 0;
- break;
- case 3: //Archer
- if (SF_swapJob(callfunc("GF_getJobId", Job_Archer, Upper),@cost,@preserve))
- return 0;
- break;
- case 4: //Mage
- if (SF_swapJob(callfunc("GF_getJobId", Job_Mage, Upper),@cost,@preserve))
- return 0;
- break;
- case 5: //Merchant
- if (SF_swapJob(callfunc("GF_getJobId", Job_Merchant, Upper),@cost,@preserve))
- return 0;
- break;
- case 6: //Swordman
- if (SF_swapJob(callfunc("GF_getJobId", Job_Swordman, Upper),@cost,@preserve))
- return 0;
- break;
- case 7: //Thief
- if (SF_swapJob(callfunc("GF_getJobId", Job_Thief, Upper),@cost,@preserve))
- return 0;
- break;
- case 8: //S. Novice
- if (SF_swapJob(callfunc("GF_getJobId", Job_SuperNovice, Upper),@cost,@preserve))
- return 0;
- break;
- }
- } while (@kmenu > 1);
- return 1;
- }
- break;
-
- case 2: //Second Classes
- set @cost, SF_calcSwapCost($@kejs_job2ND, $@kejs_cost2ND, $@kejs_discount2ND);
- set @preserve, $@kejs_preserve2ND;
- if (SF_testSwap($@kejs_job2ND, @cost)) {
- do {
- if (sex == 1) {
- SF_getJobNames 12,Job_Alchem,Job_Assassin,Job_Bard,Job_Blacksmith,Job_Crusader,Job_Hunter,Job_Knight,Job_Monk,Job_Priest,Job_Rogue,Job_Sage,Job_Wizard;
- set @kmenu, select(
- "- Cancel job change",
- "- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,
- "- "+@name7$,"- "+@name8$,"- "+@name9$,"- "+@name10$,"- "+@name11$,"- "+@name12$
- );
- if (@kmenu >= 7) //Dancer should be at pos 7.
- set @kmenu, @kmenu+1;
- } else {
- SF_getJobNames 12,Job_Alchem,Job_Assassin,Job_Blacksmith,Job_Crusader,Job_Dancer,Job_Hunter,Job_Knight,Job_Monk,Job_Priest,Job_Rogue,Job_Sage,Job_Wizard;
- set @kmenu, select(
- "- Cancel job change",
- "- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,
- "- "+@name7$,"- "+@name8$,"- "+@name9$,"- "+@name10$,"- "+@name11$,"- "+@name12$
- );
- if (@kmenu >= 4) //Bard should be at pos 4.
- set @kmenu, @kmenu+1;
- }
- switch (@kmenu)
- {
- case 2: //ALCHEMIST
- if (SF_swapJob(callfunc("GF_getJobId", Job_Alchem, Upper),@cost,@preserve))
- return 0;
- break;
- case 3: //ASSASSIN
- if (SF_swapJob(callfunc("GF_getJobId", Job_Assassin, Upper),@cost,@preserve))
- return 0;
- break;
- case 4: //BARD
- if (SF_swapJob(callfunc("GF_getJobId", Job_Bard, Upper),@cost,@preserve))
- return 0;
- break;
- case 5: //BLACKSMITH
- if (SF_swapJob(callfunc("GF_getJobId", Job_Blacksmith, Upper),@cost,@preserve))
- return 0;
- break;
- case 6: //CRUSADER
- if (SF_swapJob(callfunc("GF_getJobId", Job_Crusader, Upper),@cost,@preserve))
- return 0;
- break;
- case 7: //DANCER
- if (SF_swapJob(callfunc("GF_getJobId", Job_Dancer, Upper),@cost,@preserve))
- return 0;
- break;
- case 8: //HUNTER
- if (SF_swapJob(callfunc("GF_getJobId", Job_Hunter, Upper),@cost,@preserve))
- return 0;
- break;
- case 9: //KNIGHT
- if (SF_swapJob(callfunc("GF_getJobId", Job_Knight, Upper),@cost,@preserve))
- return 0;
- break;
- case 10: //MONK
- if (SF_swapJob(callfunc("GF_getJobId", Job_Monk, Upper),@cost,@preserve))
- return 0;
- break;
- case 11: //PRIEST
- if (SF_swapJob(callfunc("GF_getJobId", Job_Priest, Upper),@cost,@preserve))
- return 0;
- break;
- case 12: //ROGUE
- if (SF_swapJob(callfunc("GF_getJobId", Job_Rogue, Upper),@cost,@preserve))
- return 0;
- break;
- case 13: //SAGE
- if (SF_swapJob(callfunc("GF_getJobId", Job_Sage, Upper),@cost,@preserve))
- return 0;
- break;
- case 14: //WIZARD
- if (SF_swapJob(callfunc("GF_getJobId", Job_Wizard, Upper),@cost,@preserve))
- return 0;
- break;
- }
- } while (@kmenu > 1);
- return 1;
- }
- }
- return 0;
-}
-
-//SubFunction: SF_calcSwapCost (MinJob, BaseCost, Discount)
-//Calculates cost to swap jobs
-function SF_calcSwapCost {
- set @cost, getarg(1);
- set @cost, @cost - @cost*getarg(2)*(JobLevel-getarg(0))/100;
- if (@cost < 0)
- set @cost,0; //Free Change
- return @cost;
-}
-
-//SubFunction: SF_testSwap(MinJobLv, Cost)
-//Checks if the player qualifies for job changing.
-function SF_testSwap {
- if (JobLevel < getarg(0)) {
- callfunc "F_keIntro", e_dots, "You need to be at least Job Lv "+getarg(0)+" before exchanging.";
- return 0;
- }
-
- set @cost, callfunc("F_keCost",getarg(1),$@kejs_swapDiscount);
- if (Zeny < @cost) {
- callfunc "F_keIntro", e_dots, "You need "+@cost+"z to be able to change.";
- return 0;
- }
- return 1;
-}
-
-//SubFunction: SF_swapJob (JobNumber, Zeny, PreserveRate)
-//Attempts to swap to the Jobgiven.
-//Zeny is the money cost
-//Preserve is how much of the previous job to preserve.
-function SF_swapJob {
- set @newjobId, getarg(0);
- set @cost, callfunc("F_keCost",getarg(1),$@kejs_swapDiscount);
- set @preserve, getarg(2);
-
- if (Class == @newjobId) {
- callfunc "F_keIntro", e_meh, "Um... you are already that class!";
- return 0;
- }
-
- set @newJob$, callfunc("GF_getJobName",@newjobId);
- set @oldJob$, callfunc("GF_getJobName",Class);
- set @newjoblv, JobLevel*@preserve/100;
-
- if (@newjoblv > 1) {
- if (select("- Cancel", "- Change to a Lv"+@newjoblv+" "+@newJob$+" ("+@cost+"z)") != 2)
- return 0;
- } else {
- set @newjoblv,1;
- if (select("- Cancel", "- Change to "+@newJob$+" ("+@cost+"z)") != 2)
- return 0;
- }
-
- set @basic, getSkilllv(1);
- set @preserve, skillpointcount() -JobLevel -@basic +@newjoblv; //Preserve holds the final amount of SkillPoints you should have.
-
- if (@preserve < 0) {
- callfunc "F_keIntro", e_gasp, "You need "+(-@preserve)+" more skill points to change class!";
- return 0;
- }
-
- set @thisJoblevel, JobLevel;
- resetSkill;
-
- //Set previous job as needed.
- if ($@kejs_revertPolicy) {
- set kej_prev_job, Class;
- set kej_prev_joblv, @thisJoblevel;
- set kej_prev_skills, SkillPoint;
- }
- if ($@kejs_announce)
- announce strcharinfo(0)+" has changed from "+@oldJob$+" to "+@newJob$+"...",16;
-
- if ($@kejs_resetDye)
- setlook 7,0;
- jobchange @newjobId, 0;
- skill 1,@basic,0;
- set JobLevel, @newjoblv;
- set SkillPoint, @preserve;
- setoption(0);
- sc_end -1;
- callfunc "F_keCharge",getarg(2),$@kejs_swapDiscount,1;
-
- emotion e_ok;
- return 1;
-}
-
-//SubFunction: SF_revertJob (cost)
-//Reverts to the previous job.
-function SF_revertJob {
- if (Class == kej_prev_job) {
- callfunc "F_keIntro", e_no, "Hmm... You can't go back, because your previous class is the same as your current one??";
- return 0;
- }
- set @newjob$, callfunc ("GF_getJobName",kej_prev_job);
-
- set @cost,callfunc("F_keCost",$@kejs_revertCost,$@kejs_revertDiscount);
-
- if (select("- Cancel","- Return to a Lv"+kej_prev_joblv+" "+@newjob$+" ("+@cost+"z)") != 2)
- return 0;
-
- if (!(callfunc("F_keCharge",$@kejs_revertCost,$@kejs_revertDiscount,1))) {
- callfunc "F_keIntro", -1, "Sorry, you need "+@cost+"z before you can revert to a Lv"+kej_prev_joblv+" "+@newjob$+".";
- return 0;
- }
- set @thisJobId, Class;
- set @thisJobLv, JobLevel;
-
- set @basic, getSkilllv(1);
- resetSkill;
- set @skill, SkillPoint;
- if($@kejs_saveDye) {
- set @prevDye, getlook(7);
- setlook 7,0;
- }
- if ($@kejs_resetDye)
- setlook 7,0;
- jobchange kej_prev_job, 0;
- if($@kejs_saveDye) {
- setlook 7,kej_prev_dye;
- set kej_prev_dye,@prevDye;
- }
- set JobLevel, kej_prev_joblv;
- set SkillPoint, kej_prev_skills;
-
- skill 1, @basic, 0;
- set SkillPoint, SkillPoint-@basic;
-
- set kej_prev_job, @thisJobId;
- set kej_prev_joblv, @thisJobLv;
- set kej_prev_skills, @skill;
- setoption(0);
- sc_end -1;
-
- if ($@kejs_announce)
- announce strcharinfo(0)+" has changed from "+callfunc ("GF_getJobName",@thisJobId)+" to "+@newjob$+"...",16;
- return 1;
-}
-
-//SubFunction: SF_getJobNames(Qty, Jobid1, Jobid2,...)
-//Workaround until eA gets a fix for the bug where you can't use callfunc or
-//callsub within a menu
-function SF_getJobNames {
- switch (getarg(0)) {
- case 12:
- set @name12$, callfunc("GF_getJobName2",getarg(12),Upper);
- case 11:
- set @name11$, callfunc("GF_getJobName2",getarg(11),Upper);
- case 10:
- set @name10$, callfunc("GF_getJobName2",getarg(10),Upper);
- case 9:
- set @name9$, callfunc("GF_getJobName2",getarg(9),Upper);
- case 8:
- set @name8$, callfunc("GF_getJobName2",getarg(8),Upper);
- case 7:
- set @name7$, callfunc("GF_getJobName2",getarg(7),Upper);
- case 6:
- set @name6$, callfunc("GF_getJobName2",getarg(6),Upper);
- case 5:
- set @name5$, callfunc("GF_getJobName2",getarg(5),Upper);
- case 4:
- set @name4$, callfunc("GF_getJobName2",getarg(4),Upper);
- case 3:
- set @name3$, callfunc("GF_getJobName2",getarg(3),Upper);
- case 2:
- set @name2$, callfunc("GF_getJobName2",getarg(2),Upper);
- case 1:
- set @name1$, callfunc("GF_getJobName2",getarg(1),Upper);
- default:
- return;
- }
-}
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Job Swapping Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 3.4
+//===== Compatible With: =====================================
+//= eAthena SVN R7896+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Enables job changing among classes of the same 'type'
+//= (ie among 1st classes, or among 2nd classes)
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//= * The previous Job, when enabled, is stored in:
+//= kej_prev_job (job id)
+//= kej_prev_joblv (job level)
+//= kej_prev_skills (skill count)
+//= kej_prev_dye (cloth dye)
+//============================================================
+
+- script keInit_jobSwap -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadJobSwap";
+ end;
+}
+
+function script F_keJobSwap {
+
+function SF_canRevert;
+function SF_canSwitch;
+function SF_revertJob;
+function SF_switch;
+function SF_calcSwapCost;
+function SF_testSwap;
+function SF_swapJob;
+function SF_getJobNames;
+
+ set @thisLevel, callfunc("GF_getJobLevel", Class);
+
+ set @prevId, kej_prev_job;
+ set @prevLv, kej_prev_joblv;
+ set @prevLevel, 0;
+ set @prevType, 0;
+
+ if ($@kejs_revertPolicy && @prevId && @prevLv) {
+ set @prevLevel, callfunc("GF_getJobLevel", @prevId);
+ set @prevType, callfunc("GF_getJobType", @prevId);
+ }
+
+ if (SF_canRevert())
+ { //Qualifies for Reverting
+ do {
+ set @revertmenu, select(
+ "- Return",
+ "- Return to previous class",
+ "- Change into another class"
+ );
+ switch (@revertmenu) {
+ case 2: //Revert
+ if (SF_revertJob())
+ return;
+ break;
+ case 3: //Switch
+ if (SF_switch() == 0)
+ return;
+ break;
+ }
+ } while (@revertmenu > 1);
+ return;
+ }
+ if (SF_canSwitch())
+ {
+ SF_switch();
+ return;
+ }
+
+ callfunc "F_keIntro", e_swt2, "There are no available jobs of your level.";
+ return;
+
+//SubFunction SF_canRevert, specifies if the character can revert to previous job.
+function SF_canRevert {
+ if ($@kejs_revertPolicy == 0 || @prevId == 0 || (Upper == 2 && @prevType != 2))
+ return 0;
+ if((@thisLevel == @prevLevel && Upper == @prevType) || $@kejs_revertPolicy == 2)
+ return 1;
+ if ($@kejs_SNpolicy && @prevType == Upper && ((@prevLevel == 3 && @thisLevel == 1) || (@prevLevel == 1 && @thisLevel == 3)))
+ return 1;
+ return 0;
+}
+
+//SubFunction SF_canSwitch, specifies if character can change to another job.
+function SF_canSwitch {
+ if (@thisLevel == 3)
+ return $@kejs_SNpolicy;
+ if (@thisLevel == 1 || @thisLevel == 2)
+ return 1;
+ return 0;
+}
+
+//Sub Function SF_switch. Presents the switch job menu. Returns 1 only if the
+//menu was left by picking "Cancel".
+function SF_switch {
+ switch (@thisLevel) {
+ case 1:
+ case 3: //First Classes
+ set @cost, SF_calcSwapCost($@kejs_job1ST, $@kejs_cost1ST, $@kejs_discount1ST);
+ set @preserve, $@kejs_preserve1ST;
+ if (SF_testSwap($@kejs_job1ST, @cost)) {
+ do {
+ if ($@kejs_SNpolicy && Upper != 1) { //S. Novice Menu
+ SF_getJobNames 7,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief,Job_SuperNovice;
+ set @kmenu, select(
+ "- Cancel job swap",
+ "- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,"- "+@name7$
+ );
+ } else {
+ SF_getJobNames 6,Job_Acolyte,Job_Archer,Job_Mage,Job_Merchant,Job_Swordman,Job_Thief;
+ set @kmenu, select(
+ "- Cancel job swap",
+ "- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$
+ );
+ }
+ switch (@kmenu) {
+ case 2: //Acolyte
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Acolyte, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 3: //Archer
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Archer, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 4: //Mage
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Mage, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 5: //Merchant
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Merchant, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 6: //Swordman
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Swordman, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 7: //Thief
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Thief, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 8: //S. Novice
+ if (SF_swapJob(callfunc("GF_getJobId", Job_SuperNovice, Upper),@cost,@preserve))
+ return 0;
+ break;
+ }
+ } while (@kmenu > 1);
+ return 1;
+ }
+ break;
+
+ case 2: //Second Classes
+ set @cost, SF_calcSwapCost($@kejs_job2ND, $@kejs_cost2ND, $@kejs_discount2ND);
+ set @preserve, $@kejs_preserve2ND;
+ if (SF_testSwap($@kejs_job2ND, @cost)) {
+ do {
+ if (sex == 1) {
+ SF_getJobNames 12,Job_Alchem,Job_Assassin,Job_Bard,Job_Blacksmith,Job_Crusader,Job_Hunter,Job_Knight,Job_Monk,Job_Priest,Job_Rogue,Job_Sage,Job_Wizard;
+ set @kmenu, select(
+ "- Cancel job change",
+ "- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,
+ "- "+@name7$,"- "+@name8$,"- "+@name9$,"- "+@name10$,"- "+@name11$,"- "+@name12$
+ );
+ if (@kmenu >= 7) //Dancer should be at pos 7.
+ set @kmenu, @kmenu+1;
+ } else {
+ SF_getJobNames 12,Job_Alchem,Job_Assassin,Job_Blacksmith,Job_Crusader,Job_Dancer,Job_Hunter,Job_Knight,Job_Monk,Job_Priest,Job_Rogue,Job_Sage,Job_Wizard;
+ set @kmenu, select(
+ "- Cancel job change",
+ "- "+@name1$,"- "+@name2$,"- "+@name3$,"- "+@name4$,"- "+@name5$,"- "+@name6$,
+ "- "+@name7$,"- "+@name8$,"- "+@name9$,"- "+@name10$,"- "+@name11$,"- "+@name12$
+ );
+ if (@kmenu >= 4) //Bard should be at pos 4.
+ set @kmenu, @kmenu+1;
+ }
+ switch (@kmenu)
+ {
+ case 2: //ALCHEMIST
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Alchem, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 3: //ASSASSIN
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Assassin, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 4: //BARD
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Bard, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 5: //BLACKSMITH
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Blacksmith, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 6: //CRUSADER
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Crusader, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 7: //DANCER
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Dancer, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 8: //HUNTER
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Hunter, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 9: //KNIGHT
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Knight, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 10: //MONK
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Monk, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 11: //PRIEST
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Priest, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 12: //ROGUE
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Rogue, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 13: //SAGE
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Sage, Upper),@cost,@preserve))
+ return 0;
+ break;
+ case 14: //WIZARD
+ if (SF_swapJob(callfunc("GF_getJobId", Job_Wizard, Upper),@cost,@preserve))
+ return 0;
+ break;
+ }
+ } while (@kmenu > 1);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+//SubFunction: SF_calcSwapCost (MinJob, BaseCost, Discount)
+//Calculates cost to swap jobs
+function SF_calcSwapCost {
+ set @cost, getarg(1);
+ set @cost, @cost - @cost*getarg(2)*(JobLevel-getarg(0))/100;
+ if (@cost < 0)
+ set @cost,0; //Free Change
+ return @cost;
+}
+
+//SubFunction: SF_testSwap(MinJobLv, Cost)
+//Checks if the player qualifies for job changing.
+function SF_testSwap {
+ if (JobLevel < getarg(0)) {
+ callfunc "F_keIntro", e_dots, "You need to be at least Job Lv "+getarg(0)+" before exchanging.";
+ return 0;
+ }
+
+ set @cost, callfunc("F_keCost",getarg(1),$@kejs_swapDiscount);
+ if (Zeny < @cost) {
+ callfunc "F_keIntro", e_dots, "You need "+@cost+"z to be able to change.";
+ return 0;
+ }
+ return 1;
+}
+
+//SubFunction: SF_swapJob (JobNumber, Zeny, PreserveRate)
+//Attempts to swap to the Jobgiven.
+//Zeny is the money cost
+//Preserve is how much of the previous job to preserve.
+function SF_swapJob {
+ set @newjobId, getarg(0);
+ set @cost, callfunc("F_keCost",getarg(1),$@kejs_swapDiscount);
+ set @preserve, getarg(2);
+
+ if (Class == @newjobId) {
+ callfunc "F_keIntro", e_meh, "Um... you are already that class!";
+ return 0;
+ }
+
+ set @newJob$, callfunc("GF_getJobName",@newjobId);
+ set @oldJob$, callfunc("GF_getJobName",Class);
+ set @newjoblv, JobLevel*@preserve/100;
+
+ if (@newjoblv > 1) {
+ if (select("- Cancel", "- Change to a Lv"+@newjoblv+" "+@newJob$+" ("+@cost+"z)") != 2)
+ return 0;
+ } else {
+ set @newjoblv,1;
+ if (select("- Cancel", "- Change to "+@newJob$+" ("+@cost+"z)") != 2)
+ return 0;
+ }
+
+ set @basic, getSkilllv(1);
+ set @preserve, skillpointcount() -JobLevel -@basic +@newjoblv; //Preserve holds the final amount of SkillPoints you should have.
+
+ if (@preserve < 0) {
+ callfunc "F_keIntro", e_gasp, "You need "+(-@preserve)+" more skill points to change class!";
+ return 0;
+ }
+
+ set @thisJoblevel, JobLevel;
+ resetSkill;
+
+ //Set previous job as needed.
+ if ($@kejs_revertPolicy) {
+ set kej_prev_job, Class;
+ set kej_prev_joblv, @thisJoblevel;
+ set kej_prev_skills, SkillPoint;
+ }
+ if ($@kejs_announce)
+ announce strcharinfo(0)+" has changed from "+@oldJob$+" to "+@newJob$+"...",16;
+
+ if ($@kejs_resetDye)
+ setlook 7,0;
+ jobchange @newjobId, 0;
+ skill 1,@basic,0;
+ set JobLevel, @newjoblv;
+ set SkillPoint, @preserve;
+ setoption(0);
+ sc_end -1;
+ callfunc "F_keCharge",getarg(2),$@kejs_swapDiscount,1;
+
+ emotion e_ok;
+ return 1;
+}
+
+//SubFunction: SF_revertJob (cost)
+//Reverts to the previous job.
+function SF_revertJob {
+ if (Class == kej_prev_job) {
+ callfunc "F_keIntro", e_no, "Hmm... You can't go back, because your previous class is the same as your current one??";
+ return 0;
+ }
+ set @newjob$, callfunc ("GF_getJobName",kej_prev_job);
+
+ set @cost,callfunc("F_keCost",$@kejs_revertCost,$@kejs_revertDiscount);
+
+ if (select("- Cancel","- Return to a Lv"+kej_prev_joblv+" "+@newjob$+" ("+@cost+"z)") != 2)
+ return 0;
+
+ if (!(callfunc("F_keCharge",$@kejs_revertCost,$@kejs_revertDiscount,1))) {
+ callfunc "F_keIntro", -1, "Sorry, you need "+@cost+"z before you can revert to a Lv"+kej_prev_joblv+" "+@newjob$+".";
+ return 0;
+ }
+ set @thisJobId, Class;
+ set @thisJobLv, JobLevel;
+
+ set @basic, getSkilllv(1);
+ resetSkill;
+ set @skill, SkillPoint;
+ if($@kejs_saveDye) {
+ set @prevDye, getlook(7);
+ setlook 7,0;
+ }
+ if ($@kejs_resetDye)
+ setlook 7,0;
+ jobchange kej_prev_job, 0;
+ if($@kejs_saveDye) {
+ setlook 7,kej_prev_dye;
+ set kej_prev_dye,@prevDye;
+ }
+ set JobLevel, kej_prev_joblv;
+ set SkillPoint, kej_prev_skills;
+
+ skill 1, @basic, 0;
+ set SkillPoint, SkillPoint-@basic;
+
+ set kej_prev_job, @thisJobId;
+ set kej_prev_joblv, @thisJobLv;
+ set kej_prev_skills, @skill;
+ setoption(0);
+ sc_end -1;
+
+ if ($@kejs_announce)
+ announce strcharinfo(0)+" has changed from "+callfunc ("GF_getJobName",@thisJobId)+" to "+@newjob$+"...",16;
+ return 1;
+}
+
+//SubFunction: SF_getJobNames(Qty, Jobid1, Jobid2,...)
+//Workaround until eA gets a fix for the bug where you can't use callfunc or
+//callsub within a menu
+function SF_getJobNames {
+ switch (getarg(0)) {
+ case 12:
+ set @name12$, callfunc("GF_getJobName2",getarg(12),Upper);
+ case 11:
+ set @name11$, callfunc("GF_getJobName2",getarg(11),Upper);
+ case 10:
+ set @name10$, callfunc("GF_getJobName2",getarg(10),Upper);
+ case 9:
+ set @name9$, callfunc("GF_getJobName2",getarg(9),Upper);
+ case 8:
+ set @name8$, callfunc("GF_getJobName2",getarg(8),Upper);
+ case 7:
+ set @name7$, callfunc("GF_getJobName2",getarg(7),Upper);
+ case 6:
+ set @name6$, callfunc("GF_getJobName2",getarg(6),Upper);
+ case 5:
+ set @name5$, callfunc("GF_getJobName2",getarg(5),Upper);
+ case 4:
+ set @name4$, callfunc("GF_getJobName2",getarg(4),Upper);
+ case 3:
+ set @name3$, callfunc("GF_getJobName2",getarg(3),Upper);
+ case 2:
+ set @name2$, callfunc("GF_getJobName2",getarg(2),Upper);
+ case 1:
+ set @name1$, callfunc("GF_getJobName2",getarg(1),Upper);
+ default:
+ return;
+ }
+}
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
index f5d1e0ef2..5aa2d3dd4 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
@@ -1,405 +1,405 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Main Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 5.4
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= This module contains the main menu, plus the healing and
-//= storage services.
-//===== Additional Comments: =================================
-//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
-//= for indepth explanation of the Kafra Express Script Package.
-//= Services available: comment/uncomment what you want (lines 37-104)
-//= See config.txt for per-module configuration.
-//============================================================
-
-// F_KafraExpress (String "Kafra's name", String "kafra image file",
-//int location (0 = Town Kafra, 1 = Dungeon Kafra, 2 = Both),
-//String "save map", int save x, int save y)
-function script F_KafraExpress {
- set @name$,getarg(0);
- set @ke_type,getarg(2);
- if ($@kekp_reset)
- set @kafraPass,0;
- if (getarg(1) != "")
- cutin getarg(1),2;
- callfunc "F_keIntro",-1,"";
-
-M_INIT:
- set @discount, callfunc("F_keCost",1,100);
-
- if (@ke_type == 1) goto MD_INIT;
- menu
- "- Leave",L_END,
- "- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
- "- Warp Service",M_WARP,
- "- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
- "- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
- "- Job Services",M_JOB,
- "- Other Services",M_OTHER,
- "- Save Respawn point",L_SAVE;
-
-MD_INIT:
- menu
- "- Leave",L_END,
- "- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
- "- Warp Service",M_WARP,
- "- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
- "- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
- "- Job Services",M_JOB,
- "- Other Services",M_OTHER,
- "- Save Respawn point",L_SAVE;
-
-M_WARP:
- if (@ke_type == 3 && nif_q_done != 1)
- goto L_DENIED;
- if (@ke_type == 1)
- goto MD_WARP;
- menu
- "- Return",M_INIT,
- "- Dungeons",L_DUNGEON,
- "- PvP Arena",L_PVP,
- "- Guild Wars",L_GUILD_DUNGEON,
- "- Towns",L_TOWN;
-
-MD_WARP:
- menu
- "- Return",M_INIT,
- "- Dungeons",L_DUNGEON,
- "- PvP Arena",L_PVP,
- "- Guild Wars",L_GUILD_DUNGEON,
- "- Towns",L_TOWN;
-
-M_JOB:
- if (@ke_type == 1) goto MD_JOB;
- menu
- "- Return", M_INIT,
- "- Change Job",L_JOB_CHANGE,
- "- Swap Job",L_JOB_SWAP,
- "- Stat/Skill Services",L_STATS,
- "- Stat/Skill Market",L_STAT_MARKET,
- "- Rental Service",L_RENT;
-
-MD_JOB:
- menu
- "- Return", M_INIT,
- "- Change Job",L_JOB_CHANGE,
- "- Swap Job",L_JOB_SWAP,
- "- Stat/Skill Services",L_STATS,
- "- Stat/Skill Market",L_STAT_MARKET,
- "- Rental Service",L_RENT;
-
-M_OTHER:
- if (@ke_type == 1) goto MD_OTHER;
- menu
- "- Return",M_INIT,
- "- Bank Services",L_BANK,
- "- Use Kafra Shop",L_SHOP,
- "- Broadcast a message",L_BROADCAST,
- "- Refine Services",L_REFINE,
- "- Uncard Services",L_UNCARD,
- "- Stylist Service",L_STYLE,
- "- Use a Kafra Pass",L_PASS;
-
-MD_OTHER:
- menu
- "- Return",M_INIT,
- "- Bank Services",L_BANK,
- "- Use Kafra Shop",L_SHOP,
- "- Broadcast a message",L_BROADCAST,
- "- Refine Services",L_REFINE,
- "- Uncard Services",L_UNCARD,
- "- Stylist Service",L_STYLE,
- "- Use a Kafra Pass",L_PASS;
-
-L_HEAL:
- callfunc "F_keHeal";
- goto M_INIT;
-
-L_TOWN:
- callfunc "F_keWarpTown";
- goto M_WARP;
-
-L_DUNGEON:
- callfunc "F_keDungeonWarps", getarg(3);
- goto M_WARP;
-
-L_GUILD_DUNGEON:
- callfunc "F_keWarpWOE";
- goto M_WARP;
-
-L_PVP:
- callfunc "F_keWarpPvp";
- goto M_WARP;
-
-L_STORAGE:
- callfunc "F_keStorage", getarg(1);
- goto M_INIT;
-
-L_GUILD_STORAGE:
- callfunc "F_keGuildStorage", getarg(1);
- goto M_INIT;
-
-L_BANK:
- callfunc "F_keBank";
- goto M_OTHER;
-
-L_SHOP:
- callfunc "F_keShop",@ke_type, getarg(1);
- goto M_OTHER;
-
-L_BROADCAST:
- callfunc "F_keBroadcast",getarg(3);
- goto M_OTHER;
-
-L_PASS:
- callfunc "F_kePass";
- goto M_OTHER;
-
-L_REFINE:
- callfunc "F_keRefine";
- goto M_OTHER;
-
-L_UNCARD:
- callfunc "F_keUncard";
- goto M_OTHER;
-
-L_STYLE:
- callfunc "F_keStylist";
- goto M_OTHER;
-
-L_JOB_CHANGE:
- callfunc "F_keJobChange";
- goto M_JOB;
-
-L_JOB_SWAP:
- callfunc "F_keJobSwap";
- goto M_JOB;
-
-L_STATS:
- callfunc "F_keStats";
- goto M_JOB;
-
-L_STAT_MARKET:
- callfunc "F_keStatMarket";
- goto M_JOB;
-
-L_RENT:
- callfunc "F_keRent";
- goto M_JOB;
-
-L_SAVE:
- if (@ke_type == 3 && nif_q_done != 1)
- goto L_DENIED;
- if ($@kewt_travel && @ke_type != 1) {
- callfunc "F_keAddTravelTown", getarg(3);
- }
- if ($@kewd_travel && @ke_type != 0) {
- callfunc "F_keAddTravelDungeon", getarg(3);
- }
- if ($@ke_saveOnSpot) {
- getmapxy @map$,@x,@y,0;
- savepoint @map$,@x,@y;
- } else {
- savepoint getarg(3),getarg(4),getarg(5);
- }
- emotion e_scissors;
- goto M_INIT;
-
-L_DENIED:
- callfunc "F_keIntro", e_gg, "...no.";
- goto M_INIT;
-
-L_END:
- mes "Thank you for using Kafra Services.";
- close2;
- cutin getarg(1), 255;
- end;
-}
-
-//Function F_keIntro (emotion, message)
-//Displays a message followed by an emotion, then a next button, and finally
-//shows the intro message.
-function script F_keIntro {
- if (getarg(0) >= 0)
- emotion getarg(0);
- if (getarg(1) != "") {
- mes getarg(1);
- next;
- }
- mes "["+@name$+"]";
- mes "Welcome to Kafra Corp. Always by your side, wherever you go.";
- if(@kafraPass) mes "Your Kafra Pass is active,";
- mes "How may I be of help?";
- return;
-}
-
-//Function Heal, offers the heal subsystem.
-function script F_keHeal {
- set @qtyHP,MaxHp-Hp;
- set @qtySP,MaxSp-Sp;
- set @costHP, $@keh_hpCost*(MaxHp-Hp)/10;
- set @costSP, $@keh_spCost*(MaxSp-Sp)/10;
- set @costHPSP, @costHP+@costSP;
- set @discount, callfunc("F_keCost",1,100);
-
- if (@qtyHP + @qtySP == 0) {
- callfunc "F_keIntro", -1, "...you don't need to be healed.";
- return;
- }
- if (@qtyHP == 0) goto M_NO_HP;
- if (@qtySP == 0) goto M_NO_SP;
- menu "- Cancel",-,
- "- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP,
- "- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP,
- "- Heal Both ("+(@costHPSP*@discount)+"z)",L_HEAL_ALL;
- return;
-
-M_NO_HP:
- menu "- Cancel",-,
- "- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP;
- return;
-
-M_NO_SP:
- menu "- Cancel",-,
- "- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP;
- return;
-
-L_HEAL_HP:
- if (!(callfunc("F_keCharge",@costHP,100,0))) {
- callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
- return;
- }
- emotion e_no1;
- heal @qtyHP,0;
- return;
-
-L_HEAL_SP:
- if (!(callfunc("F_keCharge",@costSP,100,0))) {
- callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
- return;
- }
- emotion e_no1;
- heal 0,@qtySP;
- return;
-
-L_HEAL_ALL:
- if (!(callfunc("F_keCharge",@costHPSP,100,0))) {
- callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
- return;
- }
- emotion e_no1;
- heal @qtyHP,@qtySP;
- return;
-}
-
-//Function storage: allows access to the storage facility
-//The sent argument is the displaying image, so we can clear it afterwards.
-function script F_keStorage {
- if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
- callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
- return;
- }
- if (!(callfunc("F_keCharge",$@kes_cost,100,1))) {
- callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
- return;
- }
- mes "Thank for you using Kafra services.";
- emotion e_thx;
- close2;
- openstorage;
- cutin getarg(0), 255;
- end;
-}
-
-//Function G Storage: Allows access to the Guild Storage
-function script F_keGuildStorage {
- if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
- callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
- return;
- }
- if(getcharid(2) < 1) {
- callfunc "F_keIntro", e_swt, "You can't use the Guild Storage if you don't belong to a guild!";
- return;
- }
- if (callfunc("F_keCost",$@kegs_cost,100) > Zeny) {
- callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
- return;
- }
- if (guildopenstorage(0) == 1) {
- callfunc "F_keIntro", -1, "Sorry, the guild storage is currently in use by someone else. Try again later.";
- return;
- }
- callfunc "F_keCharge",$@kegs_cost,100,1;
- mes "Thank for you using Kafra services.";
- emotion e_thx;
- close2;
- cutin getarg(0), 255;
- end;
-}
-
-function script F_kePass {
- if (@kafraPass) {
- callfunc "F_keIntro", -1, "You already are using a Kafra Pass...";
- return;
- }
- if (countitem(1084)<1) {
- callfunc "F_keIntro", -1, "You obviously need a 'Kafra Pass' if you want to activate it.";
- return;
- }
- delitem 1084,1;
- set @kafraPass,1;
- callfunc "F_keIntro", e_lv, "Your Kafra Pass has been activated.";
- return;
-}
-
-//F_keCost(int cost, int discount%)
-//Returns what would be the cost of a service considering the KafraPass.
-//The discount value should be between 0 and 100
-function script F_keCost {
- if (@kafraPass) {
- return getarg(0)*(100-getarg(1))/100;
- }
- return getarg(0);
-}
-
-//F_keCharge(int cost, int discount%, bool appliesKP)
-//Charges for a service, using the KafraPass state and discount value.
-//appliesKP marks if the cost savings apply for stocking Kafra Reserve Points
-//Function returns 1 if successful, 0 if there's not enough zeny.
-function script F_keCharge {
- set @savings, 0;
- if (@kafraPass)
- set @savings, getarg(0)*getarg(1)/100;
- set @cost, getarg(0)-@savings;
- if (@cost > Zeny || @cost < 0) { // (@cost < 0) for overflow protection
- return 0;
- }
- set Zeny, Zeny-@cost;
-
- if (getarg(2) && @savings > 0 && $@kekp_reserveCost > 0) {
- set @savings, @savings/$@kekp_reserveCost;
- if (@savings < $@kekp_minReserve)
- set @savings, $@kekp_minReserve;
- if (@savings > $@kekp_maxReserve)
- set @savings, $@kekp_maxReserve;
-
- set RESRVPTS, RESRVPTS + @savings;
- }
- return 1;
-}
-
-//Function F_keWarp (int cost, int discount, int emotion, String map, int x, int y)
-function script F_keWarp {
- if (!(callfunc("F_keCharge",getarg(0),getarg(1),1))) {
- callfunc "F_keIntro", e_an, "You don't have enough Zeny...";
- return;
- }
- emotion getarg(2);
- warp getarg(3),getarg(4),getarg(5);
- end;
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Main Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 5.4
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= This module contains the main menu, plus the healing and
+//= storage services.
+//===== Additional Comments: =================================
+//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
+//= for indepth explanation of the Kafra Express Script Package.
+//= Services available: comment/uncomment what you want (lines 37-104)
+//= See config.txt for per-module configuration.
+//============================================================
+
+// F_KafraExpress (String "Kafra's name", String "kafra image file",
+//int location (0 = Town Kafra, 1 = Dungeon Kafra, 2 = Both),
+//String "save map", int save x, int save y)
+function script F_KafraExpress {
+ set @name$,getarg(0);
+ set @ke_type,getarg(2);
+ if ($@kekp_reset)
+ set @kafraPass,0;
+ if (getarg(1) != "")
+ cutin getarg(1),2;
+ callfunc "F_keIntro",-1,"";
+
+M_INIT:
+ set @discount, callfunc("F_keCost",1,100);
+
+ if (@ke_type == 1) goto MD_INIT;
+ menu
+ "- Leave",L_END,
+ "- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
+ "- Warp Service",M_WARP,
+ "- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
+ "- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
+ "- Job Services",M_JOB,
+ "- Other Services",M_OTHER,
+ "- Save Respawn point",L_SAVE;
+
+MD_INIT:
+ menu
+ "- Leave",L_END,
+ "- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
+ "- Warp Service",M_WARP,
+ "- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
+ "- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
+ "- Job Services",M_JOB,
+ "- Other Services",M_OTHER,
+ "- Save Respawn point",L_SAVE;
+
+M_WARP:
+ if (@ke_type == 3 && nif_q_done != 1)
+ goto L_DENIED;
+ if (@ke_type == 1)
+ goto MD_WARP;
+ menu
+ "- Return",M_INIT,
+ "- Dungeons",L_DUNGEON,
+ "- PvP Arena",L_PVP,
+ "- Guild Wars",L_GUILD_DUNGEON,
+ "- Towns",L_TOWN;
+
+MD_WARP:
+ menu
+ "- Return",M_INIT,
+ "- Dungeons",L_DUNGEON,
+ "- PvP Arena",L_PVP,
+ "- Guild Wars",L_GUILD_DUNGEON,
+ "- Towns",L_TOWN;
+
+M_JOB:
+ if (@ke_type == 1) goto MD_JOB;
+ menu
+ "- Return", M_INIT,
+ "- Change Job",L_JOB_CHANGE,
+ "- Swap Job",L_JOB_SWAP,
+ "- Stat/Skill Services",L_STATS,
+ "- Stat/Skill Market",L_STAT_MARKET,
+ "- Rental Service",L_RENT;
+
+MD_JOB:
+ menu
+ "- Return", M_INIT,
+ "- Change Job",L_JOB_CHANGE,
+ "- Swap Job",L_JOB_SWAP,
+ "- Stat/Skill Services",L_STATS,
+ "- Stat/Skill Market",L_STAT_MARKET,
+ "- Rental Service",L_RENT;
+
+M_OTHER:
+ if (@ke_type == 1) goto MD_OTHER;
+ menu
+ "- Return",M_INIT,
+ "- Bank Services",L_BANK,
+ "- Use Kafra Shop",L_SHOP,
+ "- Broadcast a message",L_BROADCAST,
+ "- Refine Services",L_REFINE,
+ "- Uncard Services",L_UNCARD,
+ "- Stylist Service",L_STYLE,
+ "- Use a Kafra Pass",L_PASS;
+
+MD_OTHER:
+ menu
+ "- Return",M_INIT,
+ "- Bank Services",L_BANK,
+ "- Use Kafra Shop",L_SHOP,
+ "- Broadcast a message",L_BROADCAST,
+ "- Refine Services",L_REFINE,
+ "- Uncard Services",L_UNCARD,
+ "- Stylist Service",L_STYLE,
+ "- Use a Kafra Pass",L_PASS;
+
+L_HEAL:
+ callfunc "F_keHeal";
+ goto M_INIT;
+
+L_TOWN:
+ callfunc "F_keWarpTown";
+ goto M_WARP;
+
+L_DUNGEON:
+ callfunc "F_keDungeonWarps", getarg(3);
+ goto M_WARP;
+
+L_GUILD_DUNGEON:
+ callfunc "F_keWarpWOE";
+ goto M_WARP;
+
+L_PVP:
+ callfunc "F_keWarpPvp";
+ goto M_WARP;
+
+L_STORAGE:
+ callfunc "F_keStorage", getarg(1);
+ goto M_INIT;
+
+L_GUILD_STORAGE:
+ callfunc "F_keGuildStorage", getarg(1);
+ goto M_INIT;
+
+L_BANK:
+ callfunc "F_keBank";
+ goto M_OTHER;
+
+L_SHOP:
+ callfunc "F_keShop",@ke_type, getarg(1);
+ goto M_OTHER;
+
+L_BROADCAST:
+ callfunc "F_keBroadcast",getarg(3);
+ goto M_OTHER;
+
+L_PASS:
+ callfunc "F_kePass";
+ goto M_OTHER;
+
+L_REFINE:
+ callfunc "F_keRefine";
+ goto M_OTHER;
+
+L_UNCARD:
+ callfunc "F_keUncard";
+ goto M_OTHER;
+
+L_STYLE:
+ callfunc "F_keStylist";
+ goto M_OTHER;
+
+L_JOB_CHANGE:
+ callfunc "F_keJobChange";
+ goto M_JOB;
+
+L_JOB_SWAP:
+ callfunc "F_keJobSwap";
+ goto M_JOB;
+
+L_STATS:
+ callfunc "F_keStats";
+ goto M_JOB;
+
+L_STAT_MARKET:
+ callfunc "F_keStatMarket";
+ goto M_JOB;
+
+L_RENT:
+ callfunc "F_keRent";
+ goto M_JOB;
+
+L_SAVE:
+ if (@ke_type == 3 && nif_q_done != 1)
+ goto L_DENIED;
+ if ($@kewt_travel && @ke_type != 1) {
+ callfunc "F_keAddTravelTown", getarg(3);
+ }
+ if ($@kewd_travel && @ke_type != 0) {
+ callfunc "F_keAddTravelDungeon", getarg(3);
+ }
+ if ($@ke_saveOnSpot) {
+ getmapxy @map$,@x,@y,0;
+ savepoint @map$,@x,@y;
+ } else {
+ savepoint getarg(3),getarg(4),getarg(5);
+ }
+ emotion e_scissors;
+ goto M_INIT;
+
+L_DENIED:
+ callfunc "F_keIntro", e_gg, "...no.";
+ goto M_INIT;
+
+L_END:
+ mes "Thank you for using Kafra Services.";
+ close2;
+ cutin getarg(1), 255;
+ end;
+}
+
+//Function F_keIntro (emotion, message)
+//Displays a message followed by an emotion, then a next button, and finally
+//shows the intro message.
+function script F_keIntro {
+ if (getarg(0) >= 0)
+ emotion getarg(0);
+ if (getarg(1) != "") {
+ mes getarg(1);
+ next;
+ }
+ mes "["+@name$+"]";
+ mes "Welcome to Kafra Corp. Always by your side, wherever you go.";
+ if(@kafraPass) mes "Your Kafra Pass is active,";
+ mes "How may I be of help?";
+ return;
+}
+
+//Function Heal, offers the heal subsystem.
+function script F_keHeal {
+ set @qtyHP,MaxHp-Hp;
+ set @qtySP,MaxSp-Sp;
+ set @costHP, $@keh_hpCost*(MaxHp-Hp)/10;
+ set @costSP, $@keh_spCost*(MaxSp-Sp)/10;
+ set @costHPSP, @costHP+@costSP;
+ set @discount, callfunc("F_keCost",1,100);
+
+ if (@qtyHP + @qtySP == 0) {
+ callfunc "F_keIntro", -1, "...you don't need to be healed.";
+ return;
+ }
+ if (@qtyHP == 0) goto M_NO_HP;
+ if (@qtySP == 0) goto M_NO_SP;
+ menu "- Cancel",-,
+ "- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP,
+ "- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP,
+ "- Heal Both ("+(@costHPSP*@discount)+"z)",L_HEAL_ALL;
+ return;
+
+M_NO_HP:
+ menu "- Cancel",-,
+ "- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP;
+ return;
+
+M_NO_SP:
+ menu "- Cancel",-,
+ "- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP;
+ return;
+
+L_HEAL_HP:
+ if (!(callfunc("F_keCharge",@costHP,100,0))) {
+ callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
+ return;
+ }
+ emotion e_no1;
+ heal @qtyHP,0;
+ return;
+
+L_HEAL_SP:
+ if (!(callfunc("F_keCharge",@costSP,100,0))) {
+ callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
+ return;
+ }
+ emotion e_no1;
+ heal 0,@qtySP;
+ return;
+
+L_HEAL_ALL:
+ if (!(callfunc("F_keCharge",@costHPSP,100,0))) {
+ callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
+ return;
+ }
+ emotion e_no1;
+ heal @qtyHP,@qtySP;
+ return;
+}
+
+//Function storage: allows access to the storage facility
+//The sent argument is the displaying image, so we can clear it afterwards.
+function script F_keStorage {
+ if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
+ callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
+ return;
+ }
+ if (!(callfunc("F_keCharge",$@kes_cost,100,1))) {
+ callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
+ return;
+ }
+ mes "Thank for you using Kafra services.";
+ emotion e_thx;
+ close2;
+ openstorage;
+ cutin getarg(0), 255;
+ end;
+}
+
+//Function G Storage: Allows access to the Guild Storage
+function script F_keGuildStorage {
+ if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
+ callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
+ return;
+ }
+ if(getcharid(2) < 1) {
+ callfunc "F_keIntro", e_swt, "You can't use the Guild Storage if you don't belong to a guild!";
+ return;
+ }
+ if (callfunc("F_keCost",$@kegs_cost,100) > Zeny) {
+ callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
+ return;
+ }
+ if (guildopenstorage(0) == 1) {
+ callfunc "F_keIntro", -1, "Sorry, the guild storage is currently in use by someone else. Try again later.";
+ return;
+ }
+ callfunc "F_keCharge",$@kegs_cost,100,1;
+ mes "Thank for you using Kafra services.";
+ emotion e_thx;
+ close2;
+ cutin getarg(0), 255;
+ end;
+}
+
+function script F_kePass {
+ if (@kafraPass) {
+ callfunc "F_keIntro", -1, "You already are using a Kafra Pass...";
+ return;
+ }
+ if (countitem(1084)<1) {
+ callfunc "F_keIntro", -1, "You obviously need a 'Kafra Pass' if you want to activate it.";
+ return;
+ }
+ delitem 1084,1;
+ set @kafraPass,1;
+ callfunc "F_keIntro", e_lv, "Your Kafra Pass has been activated.";
+ return;
+}
+
+//F_keCost(int cost, int discount%)
+//Returns what would be the cost of a service considering the KafraPass.
+//The discount value should be between 0 and 100
+function script F_keCost {
+ if (@kafraPass) {
+ return getarg(0)*(100-getarg(1))/100;
+ }
+ return getarg(0);
+}
+
+//F_keCharge(int cost, int discount%, bool appliesKP)
+//Charges for a service, using the KafraPass state and discount value.
+//appliesKP marks if the cost savings apply for stocking Kafra Reserve Points
+//Function returns 1 if successful, 0 if there's not enough zeny.
+function script F_keCharge {
+ set @savings, 0;
+ if (@kafraPass)
+ set @savings, getarg(0)*getarg(1)/100;
+ set @cost, getarg(0)-@savings;
+ if (@cost > Zeny || @cost < 0) { // (@cost < 0) for overflow protection
+ return 0;
+ }
+ set Zeny, Zeny-@cost;
+
+ if (getarg(2) && @savings > 0 && $@kekp_reserveCost > 0) {
+ set @savings, @savings/$@kekp_reserveCost;
+ if (@savings < $@kekp_minReserve)
+ set @savings, $@kekp_minReserve;
+ if (@savings > $@kekp_maxReserve)
+ set @savings, $@kekp_maxReserve;
+
+ set RESRVPTS, RESRVPTS + @savings;
+ }
+ return 1;
+}
+
+//Function F_keWarp (int cost, int discount, int emotion, String map, int x, int y)
+function script F_keWarp {
+ if (!(callfunc("F_keCharge",getarg(0),getarg(1),1))) {
+ callfunc "F_keIntro", e_an, "You don't have enough Zeny...";
+ return;
+ }
+ emotion getarg(2);
+ warp getarg(3),getarg(4),getarg(5);
+ end;
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt
index 88c5104f0..b59830e89 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt
@@ -1,339 +1,339 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Refining Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 2.7
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Does item forging, ore purifying and repairing.
-//= Can also sell phracon/emveretarcon
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//============================================================
-
-- script keInit_refine -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadRefine";
- end;
-}
-
-function script F_keRefine {
-
-function SF_refine;
-function SF_repair;
-function SF_purify;
-function SF_sellOres;
-
- do {
- set @kmenu, select(
- "- Return",
- "- Refine Equipment",
- "- Repair Equipment",
- "- Buy Ores",
- "- Purify Ores"
- );
- switch(@kmenu) {
- case 2: //Refine
- SF_refine();
- break;
- case 3: //Repair
- SF_repair();
- break;
- case 4: //Buy Ore
- SF_sellOres();
- break;
- case 5: //Purify Ore
- SF_purify();
- break;
- }
- } while (@kmenu > 1);
- return;
-
-//Subfunction SF_refine, presents the refining menu.
-function SF_refine {
- do {
- set @part, select(
- "- Cancel upgrading",
- "- "+getequipname(1),
- "- "+getequipname(2),
- "- "+getequipname(3),
- "- "+getequipname(4),
- "- "+getequipname(5),
- "- "+getequipname(6),
- "- "+getequipname(7),
- "- "+getequipname(8),
- "- "+getequipname(9),
- "- "+getequipname(10)
- );
- set @part, @part-1;
- if (@part == 0)
- break;
- if (getequipisequiped(@part) == 0) {
- callfunc "F_keIntro", e_swt, "There is nothing to refine there...";
- } else
- if(getequipisenableref(@part) == 0 && $@kerf_refineAll == 0) {
- callfunc "F_keIntro", -1, "Sorry, this item cannot be refined.";
- } else
- if(getequiprefinerycnt(@part) >= $@kerf_maxLv) {
- callfunc "F_keIntro", -1, "This item cannot be refined further.";
- break;
- } else {
- switch (getequipweaponlv(@part))
- {
- case 0: //Armor
- set @mat,985;
- set @cost,$@kerf_armorCost;
- break;
- case 1:
- set @mat,1010;
- set @cost,$@kerf_weaponLv1Cost;
- break;
- case 2:
- set @mat,1011;
- set @cost,$@kerf_weaponLv2Cost;
- break;
- case 3:
- set @mat,984;
- set @cost,$@kerf_weaponLv3Cost;
- break;
- default:
- set @mat,984;
- set @cost,$@kerf_weaponLv4Cost;
- break;
- }
- set @cost, callfunc("F_keCost",@cost,$@kerf_discount);
- do {
- if ($@kerf_safe==0 && getequippercentrefinery(@part) < 100) {
- if ($@kerf_showChance) {
- if (select(
- "- Return ("+(100-getequippercentrefinery(@part))+"% chance refine will fail)",
- "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
- break;
- } else {
- if (select(
- "- Return (Upgrade not safe, item might break!)",
- "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
- break;
- }
- } else {
- if (select(
- "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)",
- "- Cancel") != 1)
- break;
- }
- if (getequiprefinerycnt(@part) >= $@kerf_maxLv) {
- callfunc "F_keIntro", e_ok, "This item has reached it's maximum level.";
- break;
- }
- if (countitem(@mat) < 1) {
- callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
- break;
- }
- if (!(callfunc("F_keCharge",@cost,$@kerf_discount,1))) {
- callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
- break;
- }
- delitem @mat,1;
- if ($@kerf_safe || getequippercentrefinery(@part)>rand(100)) {
- successrefitem @part;
- emotion e_rock;
- } else {
- failedrefitem @part;
- callfunc "F_keIntro", e_swt, "...sorry.";
- break;
- }
- } while (1);
- }
- } while (@part > 0);
- return;
-}
-
-//Subfunction: SF_repair()
-function SF_repair {
- set @cost,callfunc("F_keCost",$@kerf_repairCost,$@kerf_repairDiscount);
- do {
- set @broken1,getbrokenid(1);
- if(@broken1==NULL) {
- callfunc "F_keIntro", -1, "You don't need anything repaired for now.";
- return;
- }
- set @broken2,getbrokenid(2);
- set @broken3,getbrokenid(3);
- set @broken4,getbrokenid(4);
- set @broken5,getbrokenid(5);
- set @broken6,getbrokenid(6);
- set @broken7,getbrokenid(7);
- set @broken8,getbrokenid(8);
- set @broken9,getbrokenid(9);
- set @broken10,getbrokenid(10);
-
- if ($@kerf_repairSteel)
- set @str$,"- Cancel (Repairing costs "+@cost+"z and 1 "+getitemname(999);
- else
- set @str$,"- Cancel (Repairing costs "+@cost+"z)";
-
- set @idRepair, select(
- @str$,
- getitemname(@broken1),
- getitemname(@broken2),
- getitemname(@broken3),
- getitemname(@broken4),
- getitemname(@broken5),
- getitemname(@broken6),
- getitemname(@broken7),
- getitemname(@broken8),
- getitemname(@broken9),
- getitemname(@broken10)
- );
- set @idRepair, @idRepair-1;
- if (@idRepair == 0) break;
- if ($@kerf_repairSteel && countitem(999) < 1) {
- callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
- return;
- }
- if (!(callfunc("F_keCharge", $@kerf_repairCost, $@kerf_repairDiscount,1))) {
- callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
- return;
- }
- if ($@kerf_repairSteel) delitem 999,1;
- repair(@idRepair);
- emotion e_lv2;
- } while (@idRepair > 0);
-}
-
-//Subfunction: SF_purify()
-function SF_purify {
- if ($@kerf_purifyAll) {
- set @submenu, select (
- "- Return",
- "- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
- "- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")",
- "- Purify "+getitemname(998)+" (need 2 "+getitemname(1002)+")",
- "- Temper "+getitemname(999)+" (need 5 "+getitemname(998)+", 1 "+getitemname(1003)+")",
- "- Temper "+getitemname(994)+" (need 10 "+getitemname(990)+")",
- "- Temper "+getitemname(995)+" (need 10 "+getitemname(991)+")",
- "- Temper "+getitemname(996)+" (need 10 "+getitemname(992)+")",
- "- Temper "+getitemname(997)+" (need 10 "+getitemname(993)+")",
- "- Temper "+getitemname(1000)+" (need 10 "+getitemname(1001)+")"
- );
- } else {
- set @submenu, select(
- "- Return",
- "- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
- "- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")"
- );
- }
- switch (@submenu) {
- case 2: //Oridecon
- set @item, 984;
- set @rough, 756;
- set @qty, 5;
- break;
- case 3: //Elunium
- set @item, 985;
- set @rough, 757;
- set @qty, 5;
- break;
- case 4: //Iron
- set @item, 998;
- set @rough, 1002;
- set @qty, 2;
- break;
- case 5: //Steel
- set @item,999;
- set @rough,998;
- set @qty,5;
- set @rough2,1003;
- set @qty2,1;
-
- set @count,countitem(@rough1);
- set @count2,countitem(@rough2);
- if (@count < @qty || @count2 < @qty2) {
- callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
- return;
- }
- set @count, @count/@qty;
- set @count2, @count2/@qty2;
- if (@count2 < @count)
- set @count,@count2;
- delitem @rough2,@qty2*@count;
- break;
- case 6: //Fire
- set @item, 994;
- set @rough, 990;
- set @qty, 10;
- break;
- case 7: //Ice
- set @item, 995;
- set @rough, 991;
- set @qty, 10;
- break;
- case 8: //Wind
- set @item, 996;
- set @rough, 992;
- set @qty, 10;
- break;
- case 9: //Earth
- set @item, 997;
- set @rough, 993;
- set @qty, 10;
- break;
- case 10: //Star
- set @item, 1000;
- set @rough, 1001;
- set @qty, 10;
- break;
- default:
- return;
- }
- set @count,countitem(@rough);
- if (@count < @qty) {
- callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
- return;
- }
- set @count, @count/@qty;
- delitem @rough,@qty*@count;
- getitem @item,@count;
- emotion e_paper;
-}
-
-//Subfunction: SF_sellOres()
-function SF_sellOres {
- do {
- set @submenu, select(
- "- Return",
- "- Buy "+getitemname(1010)+" (200z each)",
- "- Buy "+getitemname(1011)+" (1000z each)"
- );
- switch (@submenu) {
- case 2: //Phracon
- set @mat, 1010;
- set @cost, 200;
- break;
- case 3: //Emveratarcon
- set @mat, 1011;
- set @cost, 1000;
- break;
- default:
- return;
- }
- input @qty;
- set @cost,@cost*@qty;
- if (@qty < 1) {
- callfunc "F_keIntro", e_pif, "That is NOT a valid quantity...";
- } else if (@cost > Zeny) {
- callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
- } else if (@cost < 0) {
- callfunc "F_keIntro", e_swt2, "Sorry, that's too much! Try buying less...";
- } else {
- set Zeny,Zeny-@cost;
- getitem @mat,@qty;
- emotion e_paper;
- }
- } while (@submenu > 1);
-}
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Refining Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 2.7
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Does item forging, ore purifying and repairing.
+//= Can also sell phracon/emveretarcon
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//============================================================
+
+- script keInit_refine -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadRefine";
+ end;
+}
+
+function script F_keRefine {
+
+function SF_refine;
+function SF_repair;
+function SF_purify;
+function SF_sellOres;
+
+ do {
+ set @kmenu, select(
+ "- Return",
+ "- Refine Equipment",
+ "- Repair Equipment",
+ "- Buy Ores",
+ "- Purify Ores"
+ );
+ switch(@kmenu) {
+ case 2: //Refine
+ SF_refine();
+ break;
+ case 3: //Repair
+ SF_repair();
+ break;
+ case 4: //Buy Ore
+ SF_sellOres();
+ break;
+ case 5: //Purify Ore
+ SF_purify();
+ break;
+ }
+ } while (@kmenu > 1);
+ return;
+
+//Subfunction SF_refine, presents the refining menu.
+function SF_refine {
+ do {
+ set @part, select(
+ "- Cancel upgrading",
+ "- "+getequipname(1),
+ "- "+getequipname(2),
+ "- "+getequipname(3),
+ "- "+getequipname(4),
+ "- "+getequipname(5),
+ "- "+getequipname(6),
+ "- "+getequipname(7),
+ "- "+getequipname(8),
+ "- "+getequipname(9),
+ "- "+getequipname(10)
+ );
+ set @part, @part-1;
+ if (@part == 0)
+ break;
+ if (getequipisequiped(@part) == 0) {
+ callfunc "F_keIntro", e_swt, "There is nothing to refine there...";
+ } else
+ if(getequipisenableref(@part) == 0 && $@kerf_refineAll == 0) {
+ callfunc "F_keIntro", -1, "Sorry, this item cannot be refined.";
+ } else
+ if(getequiprefinerycnt(@part) >= $@kerf_maxLv) {
+ callfunc "F_keIntro", -1, "This item cannot be refined further.";
+ break;
+ } else {
+ switch (getequipweaponlv(@part))
+ {
+ case 0: //Armor
+ set @mat,985;
+ set @cost,$@kerf_armorCost;
+ break;
+ case 1:
+ set @mat,1010;
+ set @cost,$@kerf_weaponLv1Cost;
+ break;
+ case 2:
+ set @mat,1011;
+ set @cost,$@kerf_weaponLv2Cost;
+ break;
+ case 3:
+ set @mat,984;
+ set @cost,$@kerf_weaponLv3Cost;
+ break;
+ default:
+ set @mat,984;
+ set @cost,$@kerf_weaponLv4Cost;
+ break;
+ }
+ set @cost, callfunc("F_keCost",@cost,$@kerf_discount);
+ do {
+ if ($@kerf_safe==0 && getequippercentrefinery(@part) < 100) {
+ if ($@kerf_showChance) {
+ if (select(
+ "- Return ("+(100-getequippercentrefinery(@part))+"% chance refine will fail)",
+ "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
+ break;
+ } else {
+ if (select(
+ "- Return (Upgrade not safe, item might break!)",
+ "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
+ break;
+ }
+ } else {
+ if (select(
+ "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)",
+ "- Cancel") != 1)
+ break;
+ }
+ if (getequiprefinerycnt(@part) >= $@kerf_maxLv) {
+ callfunc "F_keIntro", e_ok, "This item has reached it's maximum level.";
+ break;
+ }
+ if (countitem(@mat) < 1) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
+ break;
+ }
+ if (!(callfunc("F_keCharge",@cost,$@kerf_discount,1))) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
+ break;
+ }
+ delitem @mat,1;
+ if ($@kerf_safe || getequippercentrefinery(@part)>rand(100)) {
+ successrefitem @part;
+ emotion e_rock;
+ } else {
+ failedrefitem @part;
+ callfunc "F_keIntro", e_swt, "...sorry.";
+ break;
+ }
+ } while (1);
+ }
+ } while (@part > 0);
+ return;
+}
+
+//Subfunction: SF_repair()
+function SF_repair {
+ set @cost,callfunc("F_keCost",$@kerf_repairCost,$@kerf_repairDiscount);
+ do {
+ set @broken1,getbrokenid(1);
+ if(@broken1==NULL) {
+ callfunc "F_keIntro", -1, "You don't need anything repaired for now.";
+ return;
+ }
+ set @broken2,getbrokenid(2);
+ set @broken3,getbrokenid(3);
+ set @broken4,getbrokenid(4);
+ set @broken5,getbrokenid(5);
+ set @broken6,getbrokenid(6);
+ set @broken7,getbrokenid(7);
+ set @broken8,getbrokenid(8);
+ set @broken9,getbrokenid(9);
+ set @broken10,getbrokenid(10);
+
+ if ($@kerf_repairSteel)
+ set @str$,"- Cancel (Repairing costs "+@cost+"z and 1 "+getitemname(999);
+ else
+ set @str$,"- Cancel (Repairing costs "+@cost+"z)";
+
+ set @idRepair, select(
+ @str$,
+ getitemname(@broken1),
+ getitemname(@broken2),
+ getitemname(@broken3),
+ getitemname(@broken4),
+ getitemname(@broken5),
+ getitemname(@broken6),
+ getitemname(@broken7),
+ getitemname(@broken8),
+ getitemname(@broken9),
+ getitemname(@broken10)
+ );
+ set @idRepair, @idRepair-1;
+ if (@idRepair == 0) break;
+ if ($@kerf_repairSteel && countitem(999) < 1) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
+ return;
+ }
+ if (!(callfunc("F_keCharge", $@kerf_repairCost, $@kerf_repairDiscount,1))) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
+ return;
+ }
+ if ($@kerf_repairSteel) delitem 999,1;
+ repair(@idRepair);
+ emotion e_lv2;
+ } while (@idRepair > 0);
+}
+
+//Subfunction: SF_purify()
+function SF_purify {
+ if ($@kerf_purifyAll) {
+ set @submenu, select (
+ "- Return",
+ "- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
+ "- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")",
+ "- Purify "+getitemname(998)+" (need 2 "+getitemname(1002)+")",
+ "- Temper "+getitemname(999)+" (need 5 "+getitemname(998)+", 1 "+getitemname(1003)+")",
+ "- Temper "+getitemname(994)+" (need 10 "+getitemname(990)+")",
+ "- Temper "+getitemname(995)+" (need 10 "+getitemname(991)+")",
+ "- Temper "+getitemname(996)+" (need 10 "+getitemname(992)+")",
+ "- Temper "+getitemname(997)+" (need 10 "+getitemname(993)+")",
+ "- Temper "+getitemname(1000)+" (need 10 "+getitemname(1001)+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Return",
+ "- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
+ "- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")"
+ );
+ }
+ switch (@submenu) {
+ case 2: //Oridecon
+ set @item, 984;
+ set @rough, 756;
+ set @qty, 5;
+ break;
+ case 3: //Elunium
+ set @item, 985;
+ set @rough, 757;
+ set @qty, 5;
+ break;
+ case 4: //Iron
+ set @item, 998;
+ set @rough, 1002;
+ set @qty, 2;
+ break;
+ case 5: //Steel
+ set @item,999;
+ set @rough,998;
+ set @qty,5;
+ set @rough2,1003;
+ set @qty2,1;
+
+ set @count,countitem(@rough1);
+ set @count2,countitem(@rough2);
+ if (@count < @qty || @count2 < @qty2) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
+ return;
+ }
+ set @count, @count/@qty;
+ set @count2, @count2/@qty2;
+ if (@count2 < @count)
+ set @count,@count2;
+ delitem @rough2,@qty2*@count;
+ break;
+ case 6: //Fire
+ set @item, 994;
+ set @rough, 990;
+ set @qty, 10;
+ break;
+ case 7: //Ice
+ set @item, 995;
+ set @rough, 991;
+ set @qty, 10;
+ break;
+ case 8: //Wind
+ set @item, 996;
+ set @rough, 992;
+ set @qty, 10;
+ break;
+ case 9: //Earth
+ set @item, 997;
+ set @rough, 993;
+ set @qty, 10;
+ break;
+ case 10: //Star
+ set @item, 1000;
+ set @rough, 1001;
+ set @qty, 10;
+ break;
+ default:
+ return;
+ }
+ set @count,countitem(@rough);
+ if (@count < @qty) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
+ return;
+ }
+ set @count, @count/@qty;
+ delitem @rough,@qty*@count;
+ getitem @item,@count;
+ emotion e_paper;
+}
+
+//Subfunction: SF_sellOres()
+function SF_sellOres {
+ do {
+ set @submenu, select(
+ "- Return",
+ "- Buy "+getitemname(1010)+" (200z each)",
+ "- Buy "+getitemname(1011)+" (1000z each)"
+ );
+ switch (@submenu) {
+ case 2: //Phracon
+ set @mat, 1010;
+ set @cost, 200;
+ break;
+ case 3: //Emveratarcon
+ set @mat, 1011;
+ set @cost, 1000;
+ break;
+ default:
+ return;
+ }
+ input @qty;
+ set @cost,@cost*@qty;
+ if (@qty < 1) {
+ callfunc "F_keIntro", e_pif, "That is NOT a valid quantity...";
+ } else if (@cost > Zeny) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
+ } else if (@cost < 0) {
+ callfunc "F_keIntro", e_swt2, "Sorry, that's too much! Try buying less...";
+ } else {
+ set Zeny,Zeny-@cost;
+ getitem @mat,@qty;
+ emotion e_paper;
+ }
+ } while (@submenu > 1);
+}
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt
index b25691cb2..286739204 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt
@@ -1,128 +1,128 @@
-//===== eAthena Script =======================================
-//= Kafra Expres - Stat/Skill Market Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 2.0
-//===== Compatible With: =====================================
-//= eAthena SVN R3579+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Lets players buy/sell skill points/stat points
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//============================================================
-
-- script keInit_statmarket -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadStatMarket";
- end;
-}
-
-function script F_keStatMarket {
- set @discount,callfunc("F_keCost",100,$@kesm_discount);
- do {
- set @kmenu, select (
- "- Return",
- "- Buy Stat points ("+($@kesm_stBuyPrice*@discount/100)+"z each)",
- "- Sell Stat points (up to "+StatusPoint+"/"+$@kesm_stSellPrice+"z each)",
- "- Buy Skill points ("+($@kesm_skBuyPrice*@discount/100)+"z each)",
- "- Sell Skill points (up to "+SkillPoint+"/"+$@kesm_skSellPrice+"z each)",
- "- Trade Stats -> Skill ("+$@kesm_skTradePrice+" stats/skill)",
- "- Trade Skills -> Stats ("+$@kesm_stTradePrice+" stats/skill)"
- );
- if (@kmenu > 1)
- input @qty;
- switch (@kmenu) {
- case 2: //Buy Stat
- set @min, 1;
- set @max, 9999;
- set @cost, @qty*$@kesm_stBuyPrice;
- break;
- case 3: //Sell Stat
- input @qty;
- set @min, 1;
- set @max, StatusPoint;
- set @cost, @qty*$@kesm_stSellPrice;
- break;
- case 4: //Buy Skill
- set @min, 1;
- set @max, 9999;
- set @cost, @qty*$@kesm_skBuyPrice;
- break;
- case 5: //Sell Skill
- set @min, 1;
- set @max, SkillPoint;
- set @cost, @qty*$@kesm_skSellPrice;
- break;
- case 6: //Convert stats -> skills
- set @min, $@kesm_skTradePrice;
- set @max, StatusPoint;
- set @cost, @qty/$@kesm_skTradePrice;
- break;
- case 7: //Convert skills -> stats
- set @min, 1;
- set @max, SkillPoint;
- set @cost, @qty*$@kesm_stTradePrice;
- break;
- default:
- return;
- }
- if (@qty < @min) {
- if (@min == 1)
- callfunc "F_keIntro", e_dots, "Was that supposed to be funny?";
- else
- callfunc "F_keIntro", e_dots, "That is not enough to buy a single skill...";
- } else
- if (@qty > @max) {
- if (@max == 9999)
- callfunc "F_keIntro", e_X, "You can't buy that much!";
- else
- callfunc "F_keIntro", e_X, "You don't have that many to sell...";
- } else
- if (@cost < 0) {
- callfunc "F_keIntro", e_swt2, "That is too much for a single transaction! Try a smaller quantity... please?";
- } else {
- switch(@kmenu) {
- case 2: //Buy Stat
- if (!(callfunc("F_keCharge",@cost,$@kesm_discount,1))) {
- callfunc "F_keIntro", e_X, "You do not have enough zeny to buy that much.";
- break;
- }
- set StatusPoint,StatusPoint+@qty;
- emotion e_oh;
- break;
- case 3: //Sell Stat
- set StatusPoint,StatusPoint-@qty;
- set Zeny,Zeny+@cost;
- emotion e_oh;
- break;
- case 4: //Buy Skill
- if (!(callfunc("F_keCharge",@cost,$@kesm_discount,1))) {
- callfunc "F_keIntro", e_X, "You do not have enough zeny to buy that much.";
- break;
- }
- set SkillPoint,SkillPoint+@qty;
- emotion e_oh;
- break;
- case 5: //Sell Skill
- set SkillPoint,SkillPoint-@qty;
- set Zeny,Zeny+@cost;
- emotion e_oh;
- break;
- case 6: //Convert stats -> skills
- set @qty, @cost*$@kesm_skTradePrice;
- set StatusPoint,StatusPoint-@qty;
- set SkillPoint,SkillPoint+@cost;
- emotion e_oh;
- break;
- case 7: //Convert skills -> stats
- set SkillPoint,SkillPoint-@qty;
- set StatusPoint,StatusPoint+@cost;
- emotion e_oh;
- break;
- }
- }
- } while (@kmenu > 1);
- return;
-}
+//===== eAthena Script =======================================
+//= Kafra Expres - Stat/Skill Market Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 2.0
+//===== Compatible With: =====================================
+//= eAthena SVN R3579+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Lets players buy/sell skill points/stat points
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//============================================================
+
+- script keInit_statmarket -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadStatMarket";
+ end;
+}
+
+function script F_keStatMarket {
+ set @discount,callfunc("F_keCost",100,$@kesm_discount);
+ do {
+ set @kmenu, select (
+ "- Return",
+ "- Buy Stat points ("+($@kesm_stBuyPrice*@discount/100)+"z each)",
+ "- Sell Stat points (up to "+StatusPoint+"/"+$@kesm_stSellPrice+"z each)",
+ "- Buy Skill points ("+($@kesm_skBuyPrice*@discount/100)+"z each)",
+ "- Sell Skill points (up to "+SkillPoint+"/"+$@kesm_skSellPrice+"z each)",
+ "- Trade Stats -> Skill ("+$@kesm_skTradePrice+" stats/skill)",
+ "- Trade Skills -> Stats ("+$@kesm_stTradePrice+" stats/skill)"
+ );
+ if (@kmenu > 1)
+ input @qty;
+ switch (@kmenu) {
+ case 2: //Buy Stat
+ set @min, 1;
+ set @max, 9999;
+ set @cost, @qty*$@kesm_stBuyPrice;
+ break;
+ case 3: //Sell Stat
+ input @qty;
+ set @min, 1;
+ set @max, StatusPoint;
+ set @cost, @qty*$@kesm_stSellPrice;
+ break;
+ case 4: //Buy Skill
+ set @min, 1;
+ set @max, 9999;
+ set @cost, @qty*$@kesm_skBuyPrice;
+ break;
+ case 5: //Sell Skill
+ set @min, 1;
+ set @max, SkillPoint;
+ set @cost, @qty*$@kesm_skSellPrice;
+ break;
+ case 6: //Convert stats -> skills
+ set @min, $@kesm_skTradePrice;
+ set @max, StatusPoint;
+ set @cost, @qty/$@kesm_skTradePrice;
+ break;
+ case 7: //Convert skills -> stats
+ set @min, 1;
+ set @max, SkillPoint;
+ set @cost, @qty*$@kesm_stTradePrice;
+ break;
+ default:
+ return;
+ }
+ if (@qty < @min) {
+ if (@min == 1)
+ callfunc "F_keIntro", e_dots, "Was that supposed to be funny?";
+ else
+ callfunc "F_keIntro", e_dots, "That is not enough to buy a single skill...";
+ } else
+ if (@qty > @max) {
+ if (@max == 9999)
+ callfunc "F_keIntro", e_X, "You can't buy that much!";
+ else
+ callfunc "F_keIntro", e_X, "You don't have that many to sell...";
+ } else
+ if (@cost < 0) {
+ callfunc "F_keIntro", e_swt2, "That is too much for a single transaction! Try a smaller quantity... please?";
+ } else {
+ switch(@kmenu) {
+ case 2: //Buy Stat
+ if (!(callfunc("F_keCharge",@cost,$@kesm_discount,1))) {
+ callfunc "F_keIntro", e_X, "You do not have enough zeny to buy that much.";
+ break;
+ }
+ set StatusPoint,StatusPoint+@qty;
+ emotion e_oh;
+ break;
+ case 3: //Sell Stat
+ set StatusPoint,StatusPoint-@qty;
+ set Zeny,Zeny+@cost;
+ emotion e_oh;
+ break;
+ case 4: //Buy Skill
+ if (!(callfunc("F_keCharge",@cost,$@kesm_discount,1))) {
+ callfunc "F_keIntro", e_X, "You do not have enough zeny to buy that much.";
+ break;
+ }
+ set SkillPoint,SkillPoint+@qty;
+ emotion e_oh;
+ break;
+ case 5: //Sell Skill
+ set SkillPoint,SkillPoint-@qty;
+ set Zeny,Zeny+@cost;
+ emotion e_oh;
+ break;
+ case 6: //Convert stats -> skills
+ set @qty, @cost*$@kesm_skTradePrice;
+ set StatusPoint,StatusPoint-@qty;
+ set SkillPoint,SkillPoint+@cost;
+ emotion e_oh;
+ break;
+ case 7: //Convert skills -> stats
+ set SkillPoint,SkillPoint-@qty;
+ set StatusPoint,StatusPoint+@cost;
+ emotion e_oh;
+ break;
+ }
+ }
+ } while (@kmenu > 1);
+ return;
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt
index 8ad75e7a6..73618c9eb 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt
@@ -1,130 +1,130 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Stat/Reset Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 2.2
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers stat raising and Stat/Reset skills
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//============================================================
-
-- script keInit_stats -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadStats";
- end;
-}
-
-function script F_keStats {
-
- function SF_statRaise;
-
- set @discount,callfunc("F_keCost",100,$@kest_discount);
- do {
- set @kmenu, select(
- "- Return",
- "- Raise Stats",
- "- Reset Stats ("+$@kest_stResetCost+"z+"+$@kest_BaseLvCost+"/blv)",
- "- Reset Skills ("+$@kest_skResetCost+"z+"+$@kest_JobLvCost+"/jlv)",
- "- Reset Both ("+$@kest_resetCost+"z+"+$@kest_BothLvCost+"/lv)"
- );
- switch (@kmenu) {
- case 2: //Stat raising
- SF_statRaise();
- set @cost, 0;
- set @reset, 0;
- break;
- case 3: //Reset Stat
- set @cost, $@kest_stResetCost+BaseLevel*$@kest_BaseLvCost;
- set @reset, 1;
- break;
- case 4: //Reset Skills
- set @cost, $@kest_skResetCost+(JobLevel+jobchange_level)*$@kest_JobLvCost;
- set @reset, 2;
- break;
- case 5: //Reset Both
- set @cost, $@kest_resetCost+(BaseLevel+JobLevel+jobchange_level)*$@kest_BothLvCost;
- set @reset, 3;
- break;
- default: //Cancel
- set @cost, 0;
- set @reset, 0;
- break;
- }
- if (@reset > 0) {
- if (select("- Cancel","- Reset for "+(@cost*@discount/100)+"z") == 2) {
- if (!(callfunc("F_keCharge",@cost,$@kest_discount,1))) {
- callfunc "F_keIntro", e_an, "Sorry, you don't have enough Zeny.";
- } else {
- if (@reset&1)
- ResetStatus;
- if (@reset&2) {
- if ($@kest_resetBasic)
- ResetSkill;
- else {
- set @skill1,getskilllv(1);
- ResetSkill;
- skill 1,@skill1,0;
- set SkillPoint,SkillPoint-@skill1;
- }
- }
- emotion e_hmm;
- }
- }
- }
- } while (@kmenu > 1);
- return;
-
-function SF_statRaise {
- do {
- set @submenu, select(
- "- Return",
- "- Raise Strength",
- "- Raise Agility",
- "- Raise Vitality",
- "- Raise Intelligence",
- "- Raise Dexterity",
- "- Raise Luck"
- );
- switch (@submenu) {
- case 2:
- set @stat,bStr;
- break;
- case 3:
- set @stat,bAgi;
- break;
- case 4:
- set @stat,bVit;
- break;
- case 5:
- set @stat,bInt;
- break;
- case 6:
- set @stat,bDex;
- break;
- case 7:
- set @stat,bLuk;
- break;
- default:
- return;
- }
- input @qty;
- if (@qty <1) {
- callfunc "F_keIntro", e_swt, "I don't lower stats, try resetting them.";
- } else if (@qty >100) {
- callfunc "F_keIntro", e_swt2, "Sorry... I can only raise stats up to 100 at a time.";
- } else {
- do {
- statusup @stat;
- set @qty,@qty-1;
- } while (@qty > 0);
- emotion e_ok;
- }
- } while (@submenu > 1);
-}
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Stat/Reset Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 2.2
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers stat raising and Stat/Reset skills
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//============================================================
+
+- script keInit_stats -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadStats";
+ end;
+}
+
+function script F_keStats {
+
+ function SF_statRaise;
+
+ set @discount,callfunc("F_keCost",100,$@kest_discount);
+ do {
+ set @kmenu, select(
+ "- Return",
+ "- Raise Stats",
+ "- Reset Stats ("+$@kest_stResetCost+"z+"+$@kest_BaseLvCost+"/blv)",
+ "- Reset Skills ("+$@kest_skResetCost+"z+"+$@kest_JobLvCost+"/jlv)",
+ "- Reset Both ("+$@kest_resetCost+"z+"+$@kest_BothLvCost+"/lv)"
+ );
+ switch (@kmenu) {
+ case 2: //Stat raising
+ SF_statRaise();
+ set @cost, 0;
+ set @reset, 0;
+ break;
+ case 3: //Reset Stat
+ set @cost, $@kest_stResetCost+BaseLevel*$@kest_BaseLvCost;
+ set @reset, 1;
+ break;
+ case 4: //Reset Skills
+ set @cost, $@kest_skResetCost+(JobLevel+jobchange_level)*$@kest_JobLvCost;
+ set @reset, 2;
+ break;
+ case 5: //Reset Both
+ set @cost, $@kest_resetCost+(BaseLevel+JobLevel+jobchange_level)*$@kest_BothLvCost;
+ set @reset, 3;
+ break;
+ default: //Cancel
+ set @cost, 0;
+ set @reset, 0;
+ break;
+ }
+ if (@reset > 0) {
+ if (select("- Cancel","- Reset for "+(@cost*@discount/100)+"z") == 2) {
+ if (!(callfunc("F_keCharge",@cost,$@kest_discount,1))) {
+ callfunc "F_keIntro", e_an, "Sorry, you don't have enough Zeny.";
+ } else {
+ if (@reset&1)
+ ResetStatus;
+ if (@reset&2) {
+ if ($@kest_resetBasic)
+ ResetSkill;
+ else {
+ set @skill1,getskilllv(1);
+ ResetSkill;
+ skill 1,@skill1,0;
+ set SkillPoint,SkillPoint-@skill1;
+ }
+ }
+ emotion e_hmm;
+ }
+ }
+ }
+ } while (@kmenu > 1);
+ return;
+
+function SF_statRaise {
+ do {
+ set @submenu, select(
+ "- Return",
+ "- Raise Strength",
+ "- Raise Agility",
+ "- Raise Vitality",
+ "- Raise Intelligence",
+ "- Raise Dexterity",
+ "- Raise Luck"
+ );
+ switch (@submenu) {
+ case 2:
+ set @stat,bStr;
+ break;
+ case 3:
+ set @stat,bAgi;
+ break;
+ case 4:
+ set @stat,bVit;
+ break;
+ case 5:
+ set @stat,bInt;
+ break;
+ case 6:
+ set @stat,bDex;
+ break;
+ case 7:
+ set @stat,bLuk;
+ break;
+ default:
+ return;
+ }
+ input @qty;
+ if (@qty <1) {
+ callfunc "F_keIntro", e_swt, "I don't lower stats, try resetting them.";
+ } else if (@qty >100) {
+ callfunc "F_keIntro", e_swt2, "Sorry... I can only raise stats up to 100 at a time.";
+ } else {
+ do {
+ statusup @stat;
+ set @qty,@qty-1;
+ } while (@qty > 0);
+ emotion e_ok;
+ }
+ } while (@submenu > 1);
+}
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt
index d39d5d1bc..4ff5b7c8b 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt
@@ -1,165 +1,165 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Uncarder Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 1.5
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers uncarding services.
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//============================================================
-
-- script keInit_uncard -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadUncard";
- end;
-}
-
-function script F_keUncard {
-
-function SF_uncard;
-
- do {
- set @kmenu, select(
- "- Return",
- "- See Price Specifics",
- "- "+getequipname(1),
- "- "+getequipname(2),
- "- "+getequipname(3),
- "- "+getequipname(4),
- "- "+getequipname(5),
- "- "+getequipname(6),
- "- "+getequipname(7),
- "- "+getequipname(8),
- "- "+getequipname(9),
- "- "+getequipname(10)
- );
- if (@kmenu == 1)
- return;
- if (@kmenu == 2) { //Details
- mes "Okay, listen up...";
- next;
- mes "["+@name$+"]";
- if ($@keuc_BaseCost)
- mes "The base cost is of "+$@keuc_BaseCost+"z.";
- mes "Each card to be removed incurs a cost of +"+$@keuc_CardCost+"z.";
- mes "The refine level of the compounded equipment can incur an additional cost:";
- mes "Armors: "+$@keuc_UpgradeCostA+"z per level.";
- mes "Lv1 Weapons: "+$@keuc_UpgradeCostW1+"z per level.";
- mes "Lv2 Weapons: "+$@keuc_UpgradeCostW2+"z per level.";
- mes "Lv3 Weapons: "+$@keuc_UpgradeCostW3+"z per level.";
- mes "Lv4 Weapons: "+$@keuc_UpgradeCostW4+"z per level.";
-
- if ($@keuc_Mat1 && $@keuc_Qty1) {
- mes "The materials needed are:";
- mes "- "+$@keuc_Qty1+" "+getitemname($@keuc_Mat1)+".";
- }
- if ($@keuc_Mat2 && $@keuc_Qty2)
- mes "- "+$@keuc_Qty2+" "+getitemname($@keuc_Mat2)+".";
-
- if ($@keuc_Fail1Chance || $@keuc_Fail2Chance)
- mes "There is a chance the process might fail and you'll lose your items.";
-
- next;
- callfunc "F_keIntro", -1, "";
- } else {
- if (SF_uncard(@kmenu-2))
- return;
- }
- } while (@kmenu >1);
- return;
-
-//Subfunction SF_uncard (equipment-position)
-//Attempts to uncard the equipment.
-function SF_uncard {
- set @part, getarg(0);
- if(getequipcardcnt(@part) == 0) {
- callfunc "F_keIntro", e_ag, "There are no cards to remove there!";
- return 0;
- }
- set @cost, $@keuc_BaseCost;
- set @cost, @cost + $@keuc_CardCost*getequipcardcnt(@part);
-
- switch (getequipweaponlv(@part)) {
- case 0: //Armor
- set @upgradeCost, $@keuc_UpgradeCostA;
- break;
- case 1: //Lv1 Weapons
- set @upgradeCost, $@keuc_UpgradeCostW1;
- break;
- case 2: //Lv2 Weapons
- set @upgradeCost, $@keuc_UpgradeCostW2;
- break;
- case 3: //Lv3 Weapons
- set @upgradeCost, $@keuc_UpgradeCostW3;
- break;
- default: //Lv4 Weapons
- set @upgradeCost, $@keuc_UpgradeCostW4;
- }
-
- set @cost, @cost + @upgradeCost*getequiprefinerycnt(@part);
-
- set @price, callfunc("F_keCost",@cost,$@keuc_discount);
-
- if ($@keuc_Fail1Chance) {
- set @failsave, select(
- "- Cancel",
- "- Remove cards ("+@price+"z, item gets priority)",
- "- Remove cards ("+@price+"z, cards get priority)"
- );
- } else {
- set @failsave, select(
- "- Cancel",
- "- Remove cards ("+@price+"z)"
- );
- }
- if (@failsave == 1)
- return 0;
- set @failsave, @failsave-1; //1: Save item, 2: Save Card
-
- if (($@keuc_Mat1 && countitem($@keuc_Mat1) < $@keuc_Qty1)
- || ($@keuc_Mat2 && countitem($@keuc_Mat2) < $@keuc_Qty2)) {
- callfunc "F_keIntro", e_pif, "You do not have all the materials I need...";
- return 0;
- }
-
- if (!(callfunc("F_keCharge",@cost,$@keuc_discount,1))) {
- callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
- return 0;
- }
-
- if ($@keuc_Mat1 && $@keuc_Qty1)
- delitem $@keuc_Mat1, $@keuc_Qty1;
- if ($@keuc_Mat2 && $@keuc_Qty2)
- delitem $@keuc_Mat2, $@keuc_Qty2;
-
- set @failtype,-1;
- //Recycling cost...
- set @cost, rand(1000);
- if (@cost < $@keuc_Fail2Chance) //Total Failure
- set @failtype, 0;
- else if (@cost < $@keuc_Fail1Chance) //Partial Failure
- set @failtype, @failsave;
- else if (@cost < $@keuc_Fail0Chance) //Harmless Failure
- set @failtype, 3;
- else { //Success
- successremovecards @part;
- emotion e_ho;
- return 1;
- }
- failedremovecards @part,@failtype;
- if (@failtype == 1)
- mes "The cards were lost...";
- if (@failtype == 2)
- mes "The item was lost...";
- if (@failtype == 0)
- mes "Lost the cards and item...";
- callfunc "F_keIntro", e_swt, "...oops.";
- return 1;
-}
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Uncarder Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 1.5
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers uncarding services.
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//============================================================
+
+- script keInit_uncard -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadUncard";
+ end;
+}
+
+function script F_keUncard {
+
+function SF_uncard;
+
+ do {
+ set @kmenu, select(
+ "- Return",
+ "- See Price Specifics",
+ "- "+getequipname(1),
+ "- "+getequipname(2),
+ "- "+getequipname(3),
+ "- "+getequipname(4),
+ "- "+getequipname(5),
+ "- "+getequipname(6),
+ "- "+getequipname(7),
+ "- "+getequipname(8),
+ "- "+getequipname(9),
+ "- "+getequipname(10)
+ );
+ if (@kmenu == 1)
+ return;
+ if (@kmenu == 2) { //Details
+ mes "Okay, listen up...";
+ next;
+ mes "["+@name$+"]";
+ if ($@keuc_BaseCost)
+ mes "The base cost is of "+$@keuc_BaseCost+"z.";
+ mes "Each card to be removed incurs a cost of +"+$@keuc_CardCost+"z.";
+ mes "The refine level of the compounded equipment can incur an additional cost:";
+ mes "Armors: "+$@keuc_UpgradeCostA+"z per level.";
+ mes "Lv1 Weapons: "+$@keuc_UpgradeCostW1+"z per level.";
+ mes "Lv2 Weapons: "+$@keuc_UpgradeCostW2+"z per level.";
+ mes "Lv3 Weapons: "+$@keuc_UpgradeCostW3+"z per level.";
+ mes "Lv4 Weapons: "+$@keuc_UpgradeCostW4+"z per level.";
+
+ if ($@keuc_Mat1 && $@keuc_Qty1) {
+ mes "The materials needed are:";
+ mes "- "+$@keuc_Qty1+" "+getitemname($@keuc_Mat1)+".";
+ }
+ if ($@keuc_Mat2 && $@keuc_Qty2)
+ mes "- "+$@keuc_Qty2+" "+getitemname($@keuc_Mat2)+".";
+
+ if ($@keuc_Fail1Chance || $@keuc_Fail2Chance)
+ mes "There is a chance the process might fail and you'll lose your items.";
+
+ next;
+ callfunc "F_keIntro", -1, "";
+ } else {
+ if (SF_uncard(@kmenu-2))
+ return;
+ }
+ } while (@kmenu >1);
+ return;
+
+//Subfunction SF_uncard (equipment-position)
+//Attempts to uncard the equipment.
+function SF_uncard {
+ set @part, getarg(0);
+ if(getequipcardcnt(@part) == 0) {
+ callfunc "F_keIntro", e_ag, "There are no cards to remove there!";
+ return 0;
+ }
+ set @cost, $@keuc_BaseCost;
+ set @cost, @cost + $@keuc_CardCost*getequipcardcnt(@part);
+
+ switch (getequipweaponlv(@part)) {
+ case 0: //Armor
+ set @upgradeCost, $@keuc_UpgradeCostA;
+ break;
+ case 1: //Lv1 Weapons
+ set @upgradeCost, $@keuc_UpgradeCostW1;
+ break;
+ case 2: //Lv2 Weapons
+ set @upgradeCost, $@keuc_UpgradeCostW2;
+ break;
+ case 3: //Lv3 Weapons
+ set @upgradeCost, $@keuc_UpgradeCostW3;
+ break;
+ default: //Lv4 Weapons
+ set @upgradeCost, $@keuc_UpgradeCostW4;
+ }
+
+ set @cost, @cost + @upgradeCost*getequiprefinerycnt(@part);
+
+ set @price, callfunc("F_keCost",@cost,$@keuc_discount);
+
+ if ($@keuc_Fail1Chance) {
+ set @failsave, select(
+ "- Cancel",
+ "- Remove cards ("+@price+"z, item gets priority)",
+ "- Remove cards ("+@price+"z, cards get priority)"
+ );
+ } else {
+ set @failsave, select(
+ "- Cancel",
+ "- Remove cards ("+@price+"z)"
+ );
+ }
+ if (@failsave == 1)
+ return 0;
+ set @failsave, @failsave-1; //1: Save item, 2: Save Card
+
+ if (($@keuc_Mat1 && countitem($@keuc_Mat1) < $@keuc_Qty1)
+ || ($@keuc_Mat2 && countitem($@keuc_Mat2) < $@keuc_Qty2)) {
+ callfunc "F_keIntro", e_pif, "You do not have all the materials I need...";
+ return 0;
+ }
+
+ if (!(callfunc("F_keCharge",@cost,$@keuc_discount,1))) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
+ return 0;
+ }
+
+ if ($@keuc_Mat1 && $@keuc_Qty1)
+ delitem $@keuc_Mat1, $@keuc_Qty1;
+ if ($@keuc_Mat2 && $@keuc_Qty2)
+ delitem $@keuc_Mat2, $@keuc_Qty2;
+
+ set @failtype,-1;
+ //Recycling cost...
+ set @cost, rand(1000);
+ if (@cost < $@keuc_Fail2Chance) //Total Failure
+ set @failtype, 0;
+ else if (@cost < $@keuc_Fail1Chance) //Partial Failure
+ set @failtype, @failsave;
+ else if (@cost < $@keuc_Fail0Chance) //Harmless Failure
+ set @failtype, 3;
+ else { //Success
+ successremovecards @part;
+ emotion e_ho;
+ return 1;
+ }
+ failedremovecards @part,@failtype;
+ if (@failtype == 1)
+ mes "The cards were lost...";
+ if (@failtype == 2)
+ mes "The item was lost...";
+ if (@failtype == 0)
+ mes "Lost the cards and item...";
+ callfunc "F_keIntro", e_swt, "...oops.";
+ return 1;
+}
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt
index 84cbef768..2bc99b515 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt
@@ -1,1761 +1,1761 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Dungeon Warps Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 3.5
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+, RO Episode 8+ (Hugel)
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers warping to dungeons.
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//= Flag values used for dungeons:
-//= 0x00000001 Abyss Lake
-//= 0x00000002 Amatsu
-//= 0x00000004 AntHell
-//= 0x00000008 Ayothaya
-//= 0x00000010 Byalan
-//= 0x00000020 Comodo
-//= 0x00000040 Clock tower
-//= 0x00000080 Coal Mines
-//= 0x00000100 Culvert
-//= 0x00000200 Einbech
-//= 0x00000400 Gefenia
-//= 0x00000800 Geffen
-//= 0x00001000 GlastHeim
-//= 0x00002000 Gon Ryun
-//= 0x00004000 Hidden Temple
-//= 0x00008000 Juperos
-//= 0x00010000 Lighthalzen
-//= 0x00020000 Lou Yang
-//= 0x00040000 Magma Caves
-//= 0x00080000 Orcs
-//= 0x00100000 Payon
-//= 0x00200000 Pyramid
-//= 0x00400000 Sphinx
-//= 0x00800000 Sunken Ship
-//= 0x01000000 Thanatos
-//= 0x02000000 Toy Factory
-//= 0x04000000 Turtle Island
-//= 0x08000000 Umbala
-
-//============================================================
-
-- script keInit_warpDungeon -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadWarpDungeon";
- end;
-}
-
-function script F_keDungeonWarps {
-
-function SF_abyssLake;
-function SF_amatsu;
-function SF_antHell;
-function SF_ayothaya;
-function SF_byalan;
-function SF_comodo;
-function SF_clockTower;
-function SF_coalMine;
-function SF_culvert;
-function SF_einbech;
-function SF_gefenia;
-function SF_geffen;
-function SF_glastHeim;
-function SF_gonRyun;
-function SF_hiddenTemple;
-function SF_juperos;
-function SF_lightHalzen;
-function SF_louYang;
-function SF_magma;
-function SF_orcs;
-function SF_payon;
-function SF_pyramid;
-function SF_sphinx;
-function SF_sunkenShip;
-function SF_thanatosTower;
-function SF_toyFactory;
-function SF_turtleIsland;
-function SF_umbala;
- //Store player map, will be needed in any of the submenus.
- set @map$, getarg(0);
- do {
- set @discount,callfunc("F_keCost",100,$@kewd_discount);
- if ($@kewd_showOnline) {
- set @kmenu, select (
- "- Cancel",
- "- Abyss Lake ("+$@kewd_abyssLake*@discount/100+"z/"+(getmapusers("abyss_01.gat")
- +getmapusers("abyss_02.gat")+getmapusers("abyss_03.gat"))+" "+$@ked_users$+")",
- "- Amatsu Dungeon ("+$@kewd_amatsu*@discount/100+"z/"+(getmapusers("ama_dun01.gat")
- +getmapusers("ama_dun02.gat")+getmapusers("ama_dun03.gat"))+" "+$@ked_users$+")",
- "- Ant Hell ("+$@kewd_antHell*@discount/100+"z/"+(getmapusers("anthell01.gat")
- +getmapusers("anthell02.gat"))+" "+$@ked_users$+")",
- "- Ayothaya Ancient Shrine ("+$@kewd_ayothaya*@discount/100+"z/"+(getmapusers("ayo_dun01.gat")
- +getmapusers("ayo_dun02.gat"))+" "+$@ked_users$+")",
- "- Byalan Dungeon ("+$@kewd_byalan*@discount/100+"z/"+(getmapusers("iz_dun00.gat")
- +getmapusers("iz_dun01.gat")+getmapusers("iz_dun02.gat")+getmapusers("iz_dun03.gat")
- +getmapusers("iz_dun04.gat"))+" "+$@ked_users$+")",
- "- Comodo Caves ("+$@kewd_comodo*@discount/100+"z/"+(getmapusers("beach_dun.gat")
- +getmapusers("beach_dun2.gat")+getmapusers("beach_dun3.gat"))+" "+$@ked_users$+")",
- "- Clock Tower ("+$@kewd_clockTower*@discount/100+"z/"+(getmapusers("c_tower1.gat")
- +getmapusers("c_tower2.gat")+getmapusers("c_tower3.gat")+getmapusers("c_tower4.gat")
- +getmapusers("alde_dun01.gat")+getmapusers("alde_dun02.gat")+getmapusers("alde_dun03.gat")
- +getmapusers("alde_dun04.gat"))+" "+$@ked_users$+")",
- "- Coal Mine ("+$@kewd_coalMines*@discount/100+"z/"+(getmapusers("mjo_dun01.gat")
- +getmapusers("mjo_dun02.gat")+getmapusers("mjo_dun03.gat"))+" "+$@ked_users$+")",
- "- Culvert ("+$@kewd_culvert*@discount/100+"z/"+(getmapusers("prt_sewb1.gat")+getmapusers("prt_sewb2.gat")
- +getmapusers("prt_sewb3.gat")+getmapusers("prt_sewb4.gat"))+" "+$@ked_users$+")",
- "- Einbroch Station ("+$@kewd_einbech*@discount/100+"z/"+(getmapusers("ein_dun01.gat")
- +getmapusers("ein_dun02.gat"))+" "+$@ked_users$+")",
- "- Gefenia ("+$@kewd_gefenia*@discount/100+"z/"+(getmapusers("gefenia01.gat")+getmapusers("gefenia02.gat")
- +getmapusers("gefenia03.gat")+getmapusers("gefenia04.gat"))+" "+$@ked_users$+")",
- "- Geffen Dungeon ("+$@kewd_geffen*@discount/100+"z/"+(getmapusers("gef_dun00.gat")
- +getmapusers("gef_dun01.gat")+getmapusers("gef_dun02.gat")+getmapusers("gef_dun03.gat"))+" "+$@ked_users$+")",
- "- Glast Heim ("+$@kewd_glastHeim*@discount/100+"z/"+(getmapusers("gl_cas02.gat")+getmapusers("gl_church.gat")
- +getmapusers("gl_chyard.gat")+getmapusers("gl_dun01.gat")+getmapusers("gl_dun02.gat")
- +getmapusers("gl_in01.gat")+getmapusers("gl_knt01.gat")+getmapusers("gl_knt02.gat")
- +getmapusers("gl_prison.gat")+getmapusers("gl_prison1.gat")+getmapusers("gl_sew01.gat")
- +getmapusers("gl_sew02.gat")+getmapusers("gl_sew03.gat")+getmapusers("gl_sew04.gat")
- +getmapusers("gl_step.gat")+getmapusers("glast_01.gat"))+" "+$@ked_users$+")",
- "- Gon Ryun Dungeon ("+$@kewd_gonRyun*@discount/100+"z/"+(getmapusers("gon_dun01.gat")
- +getmapusers("gon_dun02.gat")+getmapusers("gon_dun03.gat"))+" "+$@ked_users$+")",
- "- Hidden Temple ("+$@kewd_hiddenTemple*@discount/100+"z/"+(getmapusers("prt_maze01.gat")
- +getmapusers("prt_maze02.gat")+getmapusers("prt_maze03.gat"))+" "+$@ked_users$+")",
- "- Juperos ("+$@kewd_juperos*@discount/100+"z/"+(getmapusers("juperos_01.gat")+getmapusers("juperos_02.gat")
- +getmapusers("jupe_area1.gat")+getmapusers("jupe_area2.gat")+getmapusers("jupe_core.gat")
- +getmapusers("jupe_gate.gat")+getmapusers("jupe_area1.gat"))+" "+$@ked_users$+")",
- "- LightHalzen Rekkenber ("+$@kewd_lightHalzen*@discount/100+"z/"+(getmapusers("lhz_dun01.gat")
- +getmapusers("lhz_dun02.gat")+getmapusers("lhz_dun03.gat"))+" "+$@ked_users$+")",
- "- Lou Yang Royal Tomb ("+$@kewd_louYang*@discount/100+"z/"+(getmapusers("lou_dun01.gat")
- +getmapusers("lou_dun02.gat")+getmapusers("lou_dun03.gat"))+" "+$@ked_users$+")",
- "- Magma Dungeon ("+$@kewd_magma*@discount/100+"z/"+(getmapusers("mag_dun01.gat")
- +getmapusers("mag_dun02.gat"))+" "+$@ked_users$+")",
- "- Orc Dungeon ("+$@kewd_orc*@discount/100+"z/"+(getmapusers("orcsdun01.gat")
- +getmapusers("orcsdun02.gat"))+" "+$@ked_users$+")",
- "- Payon Dungeon ("+$@kewd_payon*@discount/100+"z/"+(getmapusers("pay_dun00.gat")
- +getmapusers("pay_dun01.gat")+getmapusers("pay_dun02.gat")+getmapusers("pay_dun03.gat")
- +getmapusers("pay_dun04.gat"))+" "+$@ked_users$+")",
- "- Pyramid ("+$@kewd_pyramid*@discount/100+"z/"+(getmapusers("moc_pryd01.gat")+getmapusers("moc_pryd02.gat")
- +getmapusers("moc_pryd03.gat")+getmapusers("moc_pryd04.gat")+getmapusers("moc_pryd05.gat")
- +getmapusers("moc_pryd06.gat")+getmapusers("moc_prydb1.gat"))+" "+$@ked_users$+")",
- "- Sphinx ("+$@kewd_sphinx*@discount/100+"z/"+(getmapusers("in_sphinx1.gat")
- +getmapusers("in_sphinx2.gat")+getmapusers("in_sphinx3.gat")+getmapusers("in_sphinx4.gat")
- +getmapusers("in_sphinx5.gat"))+" "+$@ked_users$+")",
- "- Sunken Ship ("+$@kewd_sunkenShip*@discount/100+"z/"+(getmapusers("treasure01.gat")
- +getmapusers("treasure02.gat"))+" "+$@ked_users$+")",
- "- Thanatos Tower ("+$@kewd_thanatosTower*@discount/100+"z/"+(getmapusers("tha_t01.gat")
- +getmapusers("tha_t02.gat")+getmapusers("tha_t03.gat")+getmapusers("tha_t04.gat")
- +getmapusers("tha_t05.gat")+getmapusers("tha_t06.gat")+getmapusers("tha_t07.gat")
- +getmapusers("tha_t08.gat")+getmapusers("tha_t09.gat")+getmapusers("tha_t10.gat")
- +getmapusers("tha_t11.gat")+getmapusers("tha_t12.gat")+getmapusers("thana_step.gat")
- +getmapusers("thana_boss.gat"))+" "+$@ked_users$+")",
- "- Toy Factory ("+$@kewd_toyFactory*@discount/100+"z/"+(getmapusers("xmas_dun01.gat")
- +getmapusers("xmas_dun02.gat"))+" "+$@ked_users$+")",
- "- Turtle Island ("+$@kewd_turtleIsland*@discount/100+"z/"+(getmapusers("tur_dun01.gat")
- +getmapusers("tur_dun02.gat")+getmapusers("tur_dun03.gat")+getmapusers("tur_dun04.gat")
- +getmapusers("tur_dun05.gat")+getmapusers("tur_dun06.gat"))+" "+$@ked_users$+")",
- "- Umbala Dungeon ("+$@kewd_umbala*@discount/100+"z/"+(getmapusers("um_dun01.gat")
- +getmapusers("um_dun02.gat"))+" "+$@ked_users$+")"
- );
- } else {
- set @kmenu, select(
- "- Cancel",
- "- Abyss Lake ("+$@kewd_abyssLake*@discount/100+"z)",
- "- Amatsu Dungeon ("+$@kewd_amatsu*@discount/100+"z)",
- "- Ant Hell ("+$@kewd_antHell*@discount/100+"z)",
- "- Ayothaya Ancient Shrine ("+$@kewd_ayothaya*@discount/100+"z)",
- "- Byalan Dungeon ("+$@kewd_byalan*@discount/100+"z)",
- "- Comodo Caves ("+$@kewd_comodo*@discount/100+"z)",
- "- Clock Tower ("+$@kewd_clockTower*@discount/100+"z)",
- "- Coal Mine ("+$@kewd_coalMines*@discount/100+"z)",
- "- Culvert ("+$@kewd_culvert*@discount/100+"z)",
- "- Einbroch Mine ("+$@kewd_einbech*@discount/100+"z)",
- "- Gefenia ("+$@kewd_gefenia*@discount/100+"z)",
- "- Geffen Dungeon ("+$@kewd_geffen*@discount/100+"z)",
- "- Glast Heim ("+$@kewd_glastHeim*@discount/100+"z)",
- "- Gon Ryun Dungeon ("+$@kewd_gonRyun*@discount/100+"z)",
- "- Hidden Temple ("+$@kewd_hiddenTemple*@discount/100+"z)",
- "- Juperos ("+$@kewd_juperos*@discount/100+"z)",
- "- LightHalzen Rekkenber ("+$@kewd_lightHalzen*@discount/100+"z)",
- "- Lou Yang Royal Tomb ("+$@kewd_louYang*@discount/100+"z)",
- "- Magma Dungeon ("+$@kewd_magma*@discount/100+"z)",
- "- Orcs Dungeon ("+$@kewd_orc*@discount/100+"z)",
- "- Payon Dungeon ("+$@kewd_payon*@discount/100+"z)",
- "- Pyramid ("+$@kewd_pyramid*@discount/100+"z)",
- "- Sphinx ("+$@kewd_sphinx*@discount/100+"z)",
- "- Sunken Ship ("+$@kewd_sunkenShip*@discount/100+"z)",
- "- Thanatos Tower ("+$@kewd_thanatosTower*@discount/100+"z)",
- "- Toy Factory ("+$@kewd_toyFactory*@discount/100+"z)",
- "- Turtle Island ("+$@kewd_turtleIsland*@discount/100+"z)",
- "- Umbala Dungeon ("+$@kewd_umbala*@discount/100+"z)"
- );
- }
- switch (@kmenu) {
- case 2:
- SF_abyssLake();
- break;
- case 3:
- SF_amatsu();
- break;
- case 4:
- SF_antHell();
- break;
- case 5:
- SF_ayothaya();
- break;
- case 6:
- SF_byalan();
- break;
- case 7:
- SF_comodo();
- break;
- case 8:
- SF_clockTower();
- break;
- case 9:
- SF_coalMine();
- break;
- case 10:
- SF_culvert();
- break;
- case 11:
- SF_einbech();
- break;
- case 12:
- SF_gefenia();
- break;
- case 13:
- SF_geffen();
- break;
- case 14:
- SF_glastHeim();
- break;
- case 15:
- SF_gonRyun();
- break;
- case 16:
- SF_hiddenTemple();
- break;
- case 17:
- SF_juperos();
- break;
- case 18:
- SF_lightHalzen();
- break;
- case 19:
- SF_louYang();
- break;
- case 20:
- SF_magma();
- break;
- case 21:
- SF_orcs();
- break;
- case 22:
- SF_payon();
- break;
- case 23:
- SF_pyramid();
- break;
- case 24:
- SF_sphinx();
- break;
- case 25:
- SF_sunkenShip();
- break;
- case 26:
- SF_thanatosTower();
- break;
- case 27:
- SF_toyFactory();
- break;
- case 28:
- SF_turtleIsland();
- break;
- case 29:
- SF_umbala();
- break;
- default:
- return;
- }
- } while (@kmenu > 1);
- return;
-
-//Subfunction SF_check(flag, cost, floor-count, player-map, dungeon-map#, map#1, map#2, ...)
-//If kewd_travel is set, the flag needs to match to be to warp there.
-//Floor count is the amount of levels the dungeon needs a price for,
-//dungeon-map# is the number of maps passed that need to be checked against
-//the player's map to see if they are warping from within the entrance.
-
-function SF_check {
- if ($@kewd_travel && !((kewd_travel|#kewd_travel)&getarg(0))) {
- callfunc "F_keIntro", e_sry, "Sorry, but we can only warp you to dungeons you have saved in before.";
- return 0;
- }
- set @cost, getarg(1);
- set @discount,100;
- set @map$, getarg(3);
- set @mapI, getarg(4);
-
- while (@mapI > 0)
- {
- if (@map$ == getarg(4+@mapI)) {
- set @discount,100-$@kewd_entryDiscount;
- break;
- }
- set @mapI, @mapI-1;
- }
- set @discountKP, callfunc("F_keCost",100,$@kewd_discount);
- set @discount,@discount*@discountKP/100;
-
- set @cost,@cost*@discount/100;
- set @inc,@cost*$@kewd_levelCost/100;
-
- //@discountKP is used to reverse the price to before the KP discount takes place
- if (@discountKP == 0)
- set @discountKP,1;
- if ($@kewd_deep == 0)
- return 1;
-
- switch (getarg(2)) {
- case 9:
- set @cost9, @cost +8*@inc;
- case 8:
- set @cost8, @cost +7*@inc;
- case 7:
- set @cost7, @cost +6*@inc;
- case 6:
- set @cost6, @cost +5*@inc;
- case 5:
- set @cost5, @cost +4*@inc;
- case 4:
- set @cost4, @cost +3*@inc;
- case 3:
- set @cost3, @cost +2*@inc;
- case 2:
- set @cost2, @cost +@inc;
- }
- return 1;
-}
-
-function SF_abyssLake {
- if (!(SF_check(0x1, $@kewd_abyssLake, 3, @map$, 1, "hu_fild05.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Abyss Lake",
- "- Entrance ("+@cost+"z/"+getmapusers("abyss_01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("abyss_02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("abyss_03.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Abyss Lake",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"hu_fild05.gat",173,308;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"abyss_02.gat",272,270;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"abyss_03.gat",116,29;
- break;
- }
-}
-
-function SF_amatsu {
- if (!(SF_check(0x2, $@kewd_amatsu, 3, @map$, 1, "ama_in02.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Amatsu Dungeon",
- "- Entrance ("+@cost+"z/"+getmapusers("ama_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("ama_dun02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("ama_dun03.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Amatsu Dungeon",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"ama_in02.gat",120,181;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"ama_dun02.gat",34,41;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"ama_dun03.gat",119,14;
- break;
- }
-}
-
-function SF_antHell {
- if (!(SF_check(0x4, $@kewd_antHell, 1, @map$, 2, "moc_fild04.gat","moc_fild15.gat")))
- return;
- if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Ant Hell",
- "- Northern Entrance ("+@cost+"z/"+getmapusers("anthell01.gat")+" "+$@ked_users$+")",
- "- Southern Entrance ("+@cost+"z/"+getmapusers("anthell02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Ant Hell",
- "- Northern Entrance ("+@cost+"z)",
- "- Southern Entrance ("+@cost+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"moc_fild04.gat",201,327;
- break;
- case 3:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"moc_fild15.gat",246,251;
- break;
- }
-}
-
-function SF_ayothaya {
- if (!(SF_check(0x8, $@kewd_ayothaya, 2, @map$, 1, "ayo_fild02.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Ancient Shrine",
- "- Entrance ("+@cost+"z/"+getmapusers("ayo_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("ayo_dun02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Ancient Shrine",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"ayo_fild02.gat",273,150;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"ayo_dun02.gat",24,28;
- break;
- }
-}
-
-function SF_byalan {
- if (!(SF_check(0x10, $@kewd_byalan, 5, @map$, 1, "izlu2dun.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Undersea Tunnel",
- "- Entrance ("+@cost+"z/"+getmapusers("iz_dun00.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("iz_dun01.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("iz_dun02.gat")+" "+$@ked_users$+")",
- "- Level 4 ("+@cost4+"z/"+getmapusers("iz_dun03.gat")+" "+$@ked_users$+")",
- "- Level 5 ("+@cost5+"z/"+getmapusers("iz_dun04.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Undersea Tunnel",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)",
- "- Level 4 ("+@cost4+"z)",
- "- Level 5 ("+@cost5+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"izlu2dun.gat",114,84;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"iz_dun01.gat",253,252;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"iz_dun02.gat",236,204;
- break;
- case 5:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"iz_dun03.gat",32,63;
- break;
- case 6:
- callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"iz_dun04.gat",26,27;
- break;
- }
-}
-
-function SF_comodo {
- if (!(SF_check(0x20, $@kewd_comodo, 1, @map$, 2, "comodo.gat","cmd_fild01.gat")))
- return;
-
- if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Comodo Caves",
- "- Mao, The Eastern Cave ("+@cost+"z/"+getmapusers("beach_dun3.gat")+" "+$@ked_users$+")",
- "- Karu, The Western Cave ("+@cost+"z/"+getmapusers("beach_dun.gat")+" "+$@ked_users$+")",
- "- Ruande, The Northern Cave ("+@cost+"z/"+getmapusers("beach_dun2.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Comodo Caves",
- "- Mao, The Eastern Cave ("+@cost+"z)",
- "- Karu, The Western Cave ("+@cost+"z)",
- "- Ruande, The Northern Cave ("+@cost+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"cmd_fild01.gat",34,325;
- break;
- case 3:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"comodo.gat",32,209;
- break;
- case 4:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"comodo.gat",180,352;
- break;
- }
-}
-
-function SF_clockTower {
- if (!(SF_check(0x40, $@kewd_clockTower, 5, @map$, 1, "aldebaran.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Clock Tower",
- "- Entrance ("+@cost+"z/"+getmapusers("c_tower1.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("c_tower2.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("c_tower3.gat")+" "+$@ked_users$+")",
- "- Level 4 ("+@cost4+"z/"+getmapusers("c_tower4.gat")+" "+$@ked_users$+")",
- "- Basement 1 ("+@cost2+"z/"+getmapusers("alde_dun01.gat")+" "+$@ked_users$+")",
- "- Basement 2 ("+@cost3+"z/"+getmapusers("alde_dun02.gat")+" "+$@ked_users$+")",
- "- Basement 3 ("+@cost4+"z/"+getmapusers("alde_dun03.gat")+" "+$@ked_users$+")",
- "- Basement 4 ("+@cost5+"z/"+getmapusers("alde_dun04.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Clock Tower",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)",
- "- Level 4 ("+@cost4+"z)",
- "- Basement 1 ("+@cost2+"z)",
- "- Basement 2 ("+@cost3+"z)",
- "- Basement 3 ("+@cost4+"z)",
- "- Basement 4 ("+@cost5+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"aldebaran.gat",140,130;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"c_tower2.gat",268,26;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"c_tower3.gat",68,146;
- break;
- case 5:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"c_tower4.gat",185,44;
- break;
- case 6:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"alde_dun01.gat",297,25;
- break;
- case 7:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"alde_dun02.gat",43,24;
- break;
- case 8:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"alde_dun03.gat",18,267;
- break;
- case 9:
- callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"alde_dun04.gat",82,267;
- break;
- }
-}
-
-function SF_coalMine {
- if (!(SF_check(0x80, $@kewd_coalMines, 3, @map$, 1, "mjolnir_02.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Mjolnir Dead Pit",
- "- Entrance ("+@cost+"z/"+getmapusers("mjo_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("mjo_dun02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("mjo_dun03.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Mjolnir Dead Pit",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"mjolnir_02.gat",89,358;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"mjo_dun02.gat",376,342;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"mjo_dun03.gat",305,260;
- break;
- }
-}
-
-function SF_culvert {
- if (!(SF_check(0x100, $@kewd_culvert, 4, @map$, 1, "prt_fild05.gat")))
- return;
- if ($@kewd_deep == 0) {
- set @submenu, 2;
- } else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Prontera Culvert",
- "- Entrance ("+@cost+"z/"+getmapusers("prt_sewb1.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("prt_sewb2.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("prt_sewb3.gat")+" "+$@ked_users$+")",
- "- Level 4 ("+@cost4+"z/"+getmapusers("prt_sewb4.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Prontera Culvert",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)",
- "- Level 4 ("+@cost4+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"prt_fild05.gat",274,208;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"prt_sewb2.gat",19,19;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"prt_sewb3.gat",180,169;
- break;
- case 5:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"prt_sewb4.gat",100,92;
- break;
- }
-}
-
-function SF_einbech {
- if (!(SF_check(0x200, $@kewd_einbech, 2, @map$, 1, "einbech.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Einbroch Mines",
- "- Entrance ("+@cost+"z/"+getmapusers("ein_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("ein_dun02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Einbech Mines",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"einbech.gat",138,244;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"ein_dun02.gat",290,285;
- break;
- }
-}
-
-function SF_geffen {
- if (!(SF_check(0x800, $@kewd_geffen, 3, @map$, 1, "gef_tower.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Geffen Dungeon",
- "- Entrance ("+@cost+"z/"+getmapusers("gef_dun00.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("gef_dun01.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("gef_dun02.gat")+" "+$@ked_users$+")"
-// "- Level 4 ("+@cost4+"z/"+getmapusers("gef_dun03.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Geffen Dungeon",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)"
-// "- Level 4 ("+@cost4+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"gef_tower.gat",147,35;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gef_dun01.gat",115,236;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"gef_dun02.gat",106,132;
- break;
- case 5:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"gef_dun03.gat",203,200;
- break;
- }
-}
-
-function SF_gefenia {
- if (!(SF_check(0x400, $@kewd_gefenia, 2, @map$, 4, "gefenia01.gat","gefenia02.gat","gefenia03.gat","gefenia04.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Gefenia",
- "- Level 1 ("+@cost+"z/"+getmapusers("gefenia01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("gefenia02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost2+"z/"+getmapusers("gefenia03.gat")+" "+$@ked_users$+")",
- "- Level 4 ("+@cost+"z/"+getmapusers("gefenia04.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Gefenia",
- "- Level 1 ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost2+"z)",
- "- Level 4 ("+@cost+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"gefenia01.gat",60,169;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gefenia02.gat",116,116;
- break;
- case 4:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gefenia03.gat",119,277;
- break;
- case 5:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"gefenia04.gat",129,86;
- break;
- }
-}
-
-function SF_glastHeim {
- if (!(SF_check(0x1000, $@kewd_glastHeim, 7, @map$, 1, "glast_01.gat")))
- return;
- if ($@kewd_deep == 0) {
- if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Glast Heim",
- "- Church Entrance ("+@cost+"z/"+getmapusers("gl_church.gat")+" "+$@ked_users$+")",
- "- Castle Terrace ("+@cost+"z/"+(getmapusers("gl_cas01.gat")+getmapusers("gl_cas02.gat"))+" "+$@ked_users$+")",
- "- Staircase Entrance ("+@cost+"z/"+getmapusers("gl_step.gat")+" "+$@ked_users$+")",
- "- Chivalry Entrance ("+@cost+"z/"+getmapusers("gl_knt01.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Glast Heim",
- "- Church Entrance ("+@cost+"z)",
- "- Castle Terrace ("+@cost+"z)",
- "- Staircase Entrance ("+@cost+"z)",
- "- Chivalry Entrance ("+@cost+"z)"
- );
- }
- if (@submenu > 2) //Churchyard is index 3.
- set @submenu, @submenu+1;
- } else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Glast Heim",
- "- Church Entrance ("+@cost+"z/"+getmapusers("gl_church.gat")+" "+$@ked_users$+")",
- "- Churchyard ("+@cost2+"z/"+getmapusers("gl_chyard.gat")+" "+$@ked_users$+")",
- "- Castle Terrace ("+@cost+"z/"+(getmapusers("gl_cas01.gat")+getmapusers("gl_cas02.gat"))+" "+$@ked_users$+")",
- "- Staircase Entrance ("+@cost+"z/"+getmapusers("gl_step.gat")+" "+$@ked_users$+")",
- "- Chivalry Entrance ("+@cost+"z/"+getmapusers("gl_knt01.gat")+" "+$@ked_users$+")",
- "- Chivalry Level 2 ("+@cost2+"z/"+getmapusers("gl_knt02.gat")+" "+$@ked_users$+")",
- "- Underground Prison 1 ("+@cost2+"z/"+getmapusers("gl_prison.gat")+" "+$@ked_users$+")",
- "- Underground Prison 2 ("+@cost3+"z/"+getmapusers("gl_prison1.gat")+" "+$@ked_users$+")",
- "- Culvert Level 1 ("+@cost4+"z/"+getmapusers("gl_sew01.gat")+" "+$@ked_users$+")",
- "- Culvert Level 2 ("+@cost3+"z/"+getmapusers("gl_sew02.gat")+" "+$@ked_users$+")",
- "- Culvert Level 3 ("+@cost4+"z/"+getmapusers("gl_sew03.gat")+" "+$@ked_users$+")",
- "- Culvert Level 4 ("+@cost5+"z/"+getmapusers("gl_sew04.gat")+" "+$@ked_users$+")",
- "- Underground Cave 1 ("+@cost6+"z/"+getmapusers("gl_dun01.gat")+" "+$@ked_users$+")",
- "- Underground Cave 2 ("+@cost7+"z/"+getmapusers("gl_dun02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Glast Heim",
- "- Church Entrance ("+@cost+"z)",
- "- Churchyard ("+@cost2+"z)",
- "- Castle Terrace ("+@cost+"z)",
- "- Staircase Entrance ("+@cost+"z)",
- "- Chivalry Entrance ("+@cost+"z)",
- "- Chivalry Level 2 ("+@cost2+"z)",
- "- Underground Prison Level 1 ("+@cost2+"z)",
- "- Underground Prison Level 2 ("+@cost3+"z)",
- "- Culvert Level 1 ("+@cost4+"z)",
- "- Culvert Level 2 ("+@cost3+"z)",
- "- Culvert Level 3 ("+@cost4+"z)",
- "- Culvert Level 4 ("+@cost5+"z)",
- "- Underground Cave Level 1 ("+@cost6+"z)",
- "- Underground Cave Level 2 ("+@cost7+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"glast_01.gat",206,136;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gl_chyard.gat",147,15;
- break;
- case 4:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"glast_01.gat",199,335;
- break;
- case 5:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"glast_01.gat",62,107;
- break;
- case 6:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"glast_01.gat",69,193;
- break;
- case 7:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gl_knt02.gat",157,287;
- break;
- case 8:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gl_prison.gat",14,70;
- break;
- case 9:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"gl_prison1.gat",150,14;
- break;
- case 10:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"gl_sew01.gat",258,255;
- break;
- case 11:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"gl_sew02.gat",108,291;
- break;
- case 12:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"gl_sew03.gat",171,283;
- break;
- case 13:
- callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"gl_sew04.gat",68,277;
- break;
- case 14:
- callfunc "F_keWarp",@cost6*100/@discountKP,$@kewd_discount,e_hmm,"gl_dun01.gat",133,271;
- break;
- case 15:
- callfunc "F_keWarp",@cost7*100/@discountKP,$@kewd_discount,e_hmm,"gl_dun02.gat",224,274;
- break;
- }
-}
-
-function SF_gonRyun {
- if (!(SF_check(0x2000, $@kewd_gonRyun, 3, @map$, 1, "gonryun.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Gon Ryun Dungeon",
- "- Entrance ("+@cost+"z/"+getmapusers("gon_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("gon_dun02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("gon_dun03.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Gon Ryun Dungeon",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"gonryun.gat",161,195;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gon_dun02.gat",22,114;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"gon_dun03.gat",68,11;
- break;
- }
-}
-
-function SF_hiddenTemple {
- if (!(SF_check(0x4000, $@kewd_hiddenTemple, 3, @map$, 1, "prt_fild01.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Laberynth Forest",
- "- Entrance ("+@cost+"z/"+getmapusers("prt_maze01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("prt_maze02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("prt_maze03.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Laberynth Forest",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"prt_fild01.gat",136,361;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"prt_maze02.gat",106,62;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"prt_maze03.gat",23,8;
- break;
- }
-}
-
-function SF_juperos {
- if (!(SF_check(0x8000, $@kewd_juperos, 3, @map$, 1, "jupe_cave.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Juperos",
- "- Entrance ("+@cost+"z/"+getmapusers("juperos_01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("juperos_02.gat")+" "+$@ked_users$+")",
- "- Core ("+@cost3+"z/"+getmapusers("jupe_core.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Juperos",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Core ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"jupe_cave.gat",55,52;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"juperos_02.gat",37,63;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"jupe_gate.gat",-1,-1;
- break;
- }
-}
-
-function SF_lightHalzen {
- if (!(SF_check(0x10000, $@kewd_lightHalzen, 3, @map$, 1, "lighthalzen.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Rekkenber",
- "- Entrance ("+@cost+"z/"+getmapusers("lou_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("lou_dun02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("lou_dun03.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Rekkenber",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
-//This is the Rekkenber building entrance, which officially is only a dungeon exit.
-// callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"lighthalzen.gat",74,72;
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"lighthalzen.gat",303,302;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"lhz_dun02.gat",154,18;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"lhz_dun03.gat",141,132;
- break;
- }
-}
-
-function SF_louYang {
- if (!(SF_check(0x20000, $@kewd_louYang, 3, @map$, 1, "louyang.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Royal Tomb",
- "- Entrance ("+@cost+"z/"+getmapusers("lou_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("lou_dun02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("lou_dun03.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Royal Tomb",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)"
- );
- };
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"louyang.gat",41,267;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"lou_dun02.gat",281,20;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"lou_dun03.gat",165,39;
- break;
- }
-}
-
-function SF_magma {
- if (!(SF_check(0x40000, $@kewd_magma, 2, @map$, 1, "yuno_fild03.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Nogg Road",
- "- Entrance ("+@cost+"z/"+getmapusers("mag_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("mag_dun02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Nogg Road",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"yuno_fild03.gat",35,135;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"mag_dun02.gat",47,30;
- break;
- }
-}
-
-function SF_orcs {
- if (!(SF_check(0x80000, $@kewd_orc, 2, @map$, 1, "gef_fild10.gat")))
- return;
- if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Orcs Dungeon",
- "- Front Entrance ("+@cost+"z/"+getmapusers("orcsdun01.gat")+" "+$@ked_users$+")",
- "- Back Entrance ("+@cost+"z/"+getmapusers("orcsdun02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Orcs Dungeon",
- "- Front Entrance ("+@cost+"z)",
- "- Back Entrance ("+@cost+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"in_orcs01.gat",34,165;
- break;
- case 3:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"in_orcs01.gat",112,99;
- break;
- }
-}
-
-function SF_payon {
- if (!(SF_check(0x100000, $@kewd_payon, 5, @map$, 1, "pay_arche.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Payon Cave",
- "- Entrance ("+@cost+"z/"+getmapusers("pay_dun00.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("pay_dun01.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("pay_dun02.gat")+" "+$@ked_users$+")",
- "- Level 4 ("+@cost4+"z/"+getmapusers("pay_dun03.gat")+" "+$@ked_users$+")",
- "- Level 5 ("+@cost5+"z/"+getmapusers("pay_dun04.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Payon Cave",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)",
- "- Level 4 ("+@cost4+"z)",
- "- Level 5 ("+@cost5+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"pay_arche.gat",41,133;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"pay_dun01.gat",19,33;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"pay_dun02.gat",19,63;
- break;
- case 5:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"pay_dun03.gat",155,159;
- break;
- case 6:
- callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"pay_dun04.gat",34,202;
- break;
- }
-}
-
-function SF_pyramid {
- if (!(SF_check(0x200000, $@kewd_pyramid, 4, @map$,1, "moc_ruins.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Pyramid",
- "- Entrance ("+@cost+"z/"+getmapusers("moc_pryd01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("moc_pryd02.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("moc_pryd03.gat")+" "+$@ked_users$+")",
- "- Level 4 ("+@cost4+"z/"+getmapusers("moc_pryd04.gat")+" "+$@ked_users$+")",
- "- Basement 1 ("+@cost2+"z/"+getmapusers("moc_pryd05.gat")+" "+$@ked_users$+")",
- "- Basement 2 ("+@cost3+"z/"+getmapusers("moc_pryd06.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Pyramid",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)",
- "- Level 4 ("+@cost4+"z)",
- "- Basement 1 ("+@cost2+"z)",
- "- Basement 2 ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"moc_ruins.gat",62,162;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd02.gat",10,192;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd03.gat",100,92;
- break;
- case 5:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd04.gat",18,187;
- break;
- case 6:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd05.gat",94,96;
- break;
- case 7:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd06.gat",192,11;
- break;
- }
-}
-
-function SF_sphinx {
- if (!(SF_check(0x400000, $@kewd_sphinx, 5, @map$, 1, "moc_fild19.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to the Sphinx",
- "- Entrance ("+@cost+"z/"+getmapusers("in_sphinx1.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("in_sphinx2.gat")+" "+$@ked_users$+")",
- "- Level 3 ("+@cost3+"z/"+getmapusers("in_sphinx3.gat")+" "+$@ked_users$+")",
- "- Level 4 ("+@cost4+"z/"+getmapusers("in_sphinx4.gat")+" "+$@ked_users$+")",
- "- Level 5 ("+@cost5+"z/"+getmapusers("in_sphinx5.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to the Sphinx",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)",
- "- Level 3 ("+@cost3+"z)",
- "- Level 4 ("+@cost4+"z)",
- "- Level 5 ("+@cost5+"z)"
- );
- }
-
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"moc_fild19.gat",107,100;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"in_sphinx2.gat",149,81;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"in_sphinx3.gat",210,54;
- break;
- case 5:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"in_sphinx4.gat",10,222;
- break;
- case 6:
- callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"in_sphinx5.gat",100,99;
- break;
- }
-}
-
-function SF_sunkenShip {
- if (!(SF_check(0x800000, $@kewd_sunkenShip, 2, @map$, 1, "alb2trea.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Sunken Ship",
- "- Entrance ("+@cost+"z/"+getmapusers("treasure01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("treasure02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Sunken Ship",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)"
- );
- }
-
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"alb2trea.gat",87,103;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"treasure02.gat",102,27;
- break;
- }
-}
-
-function SF_thanatosTower {
- if (!(SF_check(0x1000000, $@kewd_thanatosTower, 9, @map$, 1, "tha_t01.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Thanatos Tower",
- "- Entrance ("+@cost+"z/"+getmapusers("tha_t01.gat")+" "+$@ked_users$+")",
- "- Floor 2 ("+@cost2+"z/"+getmapusers("tha_t02.gat")+" "+$@ked_users$+")",
- "- Floor 3 ("+@cost3+"z/"+getmapusers("tha_t03.gat")+" "+$@ked_users$+")",
- "- Floor 4 ("+@cost4+"z/"+getmapusers("tha_t04.gat")+" "+$@ked_users$+")",
- "- Floor 5 ("+@cost5+"z/"+getmapusers("tha_t05.gat")+" "+$@ked_users$+")",
- "- Floor 6 ("+@cost6+"z/"+getmapusers("tha_t06.gat")+" "+$@ked_users$+")",
- "- Floor 7 ("+@cost7+"z/"+getmapusers("tha_t07.gat")+" "+$@ked_users$+")",
- "- Floor 8 ("+@cost8+"z/"+getmapusers("tha_t08.gat")+" "+$@ked_users$+")",
- "- Floor 9 ("+@cost9+"z/"+getmapusers("tha_t09.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Thanatos Tower",
- "- Entrance ("+@cost+"z)",
- "- Floor 2 ("+@cost2+"z)",
- "- Floor 3 ("+@cost3+"z)",
- "- Floor 4 ("+@cost4+"z)",
- "- Floor 5 ("+@cost5+"z)",
- "- Floor 6 ("+@cost6+"z)",
- "- Floor 7 ("+@cost7+"z)",
- "- Floor 8 ("+@cost8+"z)",
- "- Floor 9 ("+@cost9+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"tha_scene01.gat",139,201;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"tha_t02.gat",149,136;
- break;
- case 4:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"tha_t03.gat",220,159;
- break;
- case 5:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t04.gat",59,144;
- break;
- case 6:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t05.gat",62,9;
- break;
- case 7:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t06.gat",120,225;
- break;
- case 8:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t07.gat",32,166;
- break;
- case 9:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t08.gat",108,44;
- break;
- case 10:
- callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t09.gat",87,145;
- break;
- }
-}
-
-function SF_toyFactory {
- if (!(SF_check(0x2000000, $@kewd_toyFactory, 2, @map$, 1, "xmas.gat")))
- return;
-
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Toy Factory",
- "- Entrance ("+@cost+"z/"+getmapusers("xmas_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("xmas_dun02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Toy Factory",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)"
- );
- }
-
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"xmas.gat",144,306;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"xmas_dun02.gat",129,133;
- break;
- }
-}
-
-function SF_turtleIsland {
- if (!(SF_check(0x4000000, $@kewd_turtleIsland, 3, @map$, 1, "tur_dun01.gat")))
- return;
- if ($@kewd_deep == 0) {
- if ($@kewd_turtleCave)
- set @submenu, 3;
- else
- set @submenu, 2;
- } else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Turtle Island",
- "- Island Entrance ("+@cost+"z/"+getmapusers("tur_dun01.gat")+" "+$@ked_users$+")",
- "- Cave Entrance ("+@cost+"z/"+getmapusers("tur_dun02.gat")+" "+$@ked_users$+")",
- "- Cave Level 2 ("+@cost2+"z/"+getmapusers("tur_dun03.gat")+" "+$@ked_users$+")",
- "- Cave Level 3 ("+@cost3+"z/"+getmapusers("tur_dun04.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Turtle Island",
- "- Island Entrance ("+@cost+"z)",
- "- Cave Entrance ("+@cost+"z)",
- "- Cave Level 2 ("+@cost2+"z)",
- "- Cave Level 3 ("+@cost3+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"tur_dun01.gat",153,47;
- break;
- case 3:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"tur_dun01.gat",155,234;
- break;
- case 4:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"tur_dun03.gat",132,189;
- break;
- case 5:
- callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"tur_dun04.gat",100,192;
- break;
- }
-}
-
-function SF_umbala {
- if (!(SF_check(0x8000000, $@kewd_umbala, 2, @map$, 1, "umbala.gat")))
- return;
- if ($@kewd_deep == 0)
- set @submenu, 2;
- else if ($@kewd_showOnline) {
- set @submenu, select(
- "- Cancel warp to Umbala Dungeon",
- "- Entrance ("+@cost+"z/"+getmapusers("um_dun01.gat")+" "+$@ked_users$+")",
- "- Level 2 ("+@cost2+"z/"+getmapusers("um_dun02.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel warp to Umbala Dungeon",
- "- Entrance ("+@cost+"z)",
- "- Level 2 ("+@cost2+"z)"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"umbala.gat",113,282;
- break;
- case 3:
- callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"um_dun02.gat",48,31;
- break;
- }
-}
-
-}
-
-//Invoked when we want to add a map to the list of travelled-to dungeons
-function script F_keAddTravelDungeon {
- set @map$, getarg(0);
-// Temporary code to update the previous variable format to the new one.
- if(kewd_abyss) {
- set kewd_travel,kewd_travel|0x1;
- set kewd_abyss,0;
- }
- if(kewd_amatsu) {
- set kewd_travel,kewd_travel|0x2;
- set kewd_amatsu,0;
- }
- if(kewd_antHell) {
- set kewd_travel,kewd_travel|0x4;
- set kewd_antHell,0;
- }
- if(kewd_ayothaya) {
- set kewd_travel,kewd_travel|0x8;
- set kewd_ayothaya,0;
- }
- if(kewd_byalan) {
- set kewd_travel,kewd_travel|0x10;
- set kewd_byalan,0;
- }
- if(kewd_comodo) {
- set kewd_travel,kewd_travel|0x20;
- set kewd_comodo,0;
- }
- if(kewd_clockTower) {
- set kewd_travel,kewd_travel|0x40;
- set kewd_clockTower,0;
- }
- if(kewd_coalMines) {
- set kewd_travel,kewd_travel|0x80;
- set kewd_coalMines,0;
- }
- if(kewd_culvert) {
- set kewd_travel,kewd_travel|0x100;
- set kewd_culvert,0;
- }
- if(kewd_einbech) {
- set kewd_travel,kewd_travel|0x200;
- set kewd_einbech,0;
- }
- if(kewd_geffen) {
- set kewd_travel,kewd_travel|0x800;
- set kewd_geffen,0;
- }
- if(kewd_glastHeim) {
- set kewd_travel,kewd_travel|0x1000;
- set kewd_glastHeim,0;
- }
- if(kewd_gonRyun) {
- set kewd_travel,kewd_travel|0x2000;
- set kewd_gonRyun,0;
- }
- if(kewd_hiddenTemple) {
- set kewd_travel,kewd_travel|0x4000;
- set kewd_hiddenTemple,0;
- }
- if(kewd_juperos) {
- set kewd_travel,kewd_travel|0x8000;
- set kewd_juperos,0;
- }
- if(kewd_lightHalzen) {
- set kewd_travel,kewd_travel|0x10000;
- set kewd_lightHalzen,0;
- }
- if(kewd_louYang) {
- set kewd_travel,kewd_travel|0x20000;
- set kewd_louYang,0;
- }
- if(kewd_magma) {
- set kewd_travel,kewd_travel|0x40000;
- set kewd_magma,0;
- }
- if(kewd_orc) {
- set kewd_travel,kewd_travel|0x80000;
- set kewd_orc,0;
- }
- if(kewd_payon) {
- set kewd_travel,kewd_travel|0x100000;
- set kewd_payon,0;
- }
- if(kewd_pyramid) {
- set kewd_travel,kewd_travel|0x200000;
- set kewd_pyramid,0;
- }
- if(kewd_sphinx) {
- set kewd_travel,kewd_travel|0x400000;
- set kewd_sphinx,0;
- }
- if(kewd_sunkenShip) {
- set kewd_travel,kewd_travel|0x800000;
- set kewd_sunkenShip,0;
- }
- if(kewd_thanatosTower) {
- set kewd_travel,kewd_travel|0x1000000;
- set kewd_thanatosTower,0;
- }
- if(kewd_toyFactory) {
- set kewd_travel,kewd_travel|0x2000000;
- set kewd_toyFactory,0;
- }
- if(kewd_turtleIsland) {
- set kewd_travel,kewd_travel|0x4000000;
- set kewd_turtleIsland,0;
- }
- if(kewd_umbala) {
- set kewd_travel,kewd_travel|0x8000000;
- set kewd_umbala,0;
- }
-
- if(#kewd_abyss) {
- set #kewd_travel,#kewd_travel|0x1;
- set #kewd_abyss,0;
- }
- if(#kewd_amatsu) {
- set #kewd_travel,#kewd_travel|0x2;
- set #kewd_amatsu,0;
- }
- if(#kewd_antHell) {
- set #kewd_travel,#kewd_travel|0x4;
- set #kewd_antHell,0;
- }
- if(#kewd_ayothaya) {
- set #kewd_travel,#kewd_travel|0x8;
- set #kewd_ayothaya,0;
- }
- if(#kewd_byalan) {
- set #kewd_travel,#kewd_travel|0x10;
- set #kewd_byalan,0;
- }
- if(#kewd_comodo) {
- set #kewd_travel,#kewd_travel|0x20;
- set #kewd_comodo,0;
- }
- if(#kewd_clockTower) {
- set #kewd_travel,#kewd_travel|0x40;
- set #kewd_clockTower,0;
- }
- if(#kewd_coalMines) {
- set #kewd_travel,#kewd_travel|0x80;
- set #kewd_coalMines,0;
- }
- if(#kewd_culvert) {
- set #kewd_travel,#kewd_travel|0x100;
- set #kewd_culvert,0;
- }
- if(#kewd_einbech) {
- set #kewd_travel,#kewd_travel|0x200;
- set #kewd_einbech,0;
- }
- if(#kewd_geffen) {
- set #kewd_travel,#kewd_travel|0x800;
- set #kewd_geffen,0;
- }
- if(#kewd_glastHeim) {
- set #kewd_travel,#kewd_travel|0x1000;
- set #kewd_glastHeim,0;
- }
- if(#kewd_gonRyun) {
- set #kewd_travel,#kewd_travel|0x2000;
- set #kewd_gonRyun,0;
- }
- if(#kewd_hiddenTemple) {
- set #kewd_travel,#kewd_travel|0x4000;
- set #kewd_hiddenTemple,0;
- }
- if(#kewd_juperos) {
- set #kewd_travel,#kewd_travel|0x8000;
- set #kewd_juperos,0;
- }
- if(#kewd_lightHalzen) {
- set #kewd_travel,#kewd_travel|0x10000;
- set #kewd_lightHalzen,0;
- }
- if(#kewd_louYang) {
- set #kewd_travel,#kewd_travel|0x20000;
- set #kewd_louYang,0;
- }
- if(#kewd_magma) {
- set #kewd_travel,#kewd_travel|0x40000;
- set #kewd_magma,0;
- }
- if(#kewd_orc) {
- set #kewd_travel,#kewd_travel|0x80000;
- set #kewd_orc,0;
- }
- if(#kewd_payon) {
- set #kewd_travel,#kewd_travel|0x100000;
- set #kewd_payon,0;
- }
- if(#kewd_pyramid) {
- set #kewd_travel,#kewd_travel|0x200000;
- set #kewd_pyramid,0;
- }
- if(#kewd_sphinx) {
- set #kewd_travel,#kewd_travel|0x400000;
- set #kewd_sphinx,0;
- }
- if(#kewd_sunkenShip) {
- set #kewd_travel,#kewd_travel|0x800000;
- set #kewd_sunkenShip,0;
- }
- if(#kewd_thanatosTower) {
- set #kewd_travel,#kewd_travel|0x1000000;
- set #kewd_thanatosTower,0;
- }
- if(#kewd_toyFactory) {
- set #kewd_travel,#kewd_travel|0x2000000;
- set #kewd_toyFactory,0;
- }
- if(#kewd_turtleIsland) {
- set #kewd_travel,#kewd_travel|0x4000000;
- set #kewd_turtleIsland,0;
- }
- if(#kewd_umbala) {
- set #kewd_travel,#kewd_travel|0x8000000;
- set #kewd_umbala,0;
- }
-
-// End transition code.
- if ($@kewd_travel > 1) {
- if (@map$ == "hu_fild05.gat" || kewd_travel&0x1)
- set #kewd_travel,#kewd_travel|0x1;
- if (@map$ == "ama_in02.gat" || kewd_travel&0x2)
- set #kewd_travel,#kewd_travel|0x2;
- if (@map$ == "moc_fild04.gat" || @map$ == "moc_fild15.gat" || kewd_travel&0x4)
- set #kewd_travel,#kewd_travel|0x4;
- if (@map$ == "ayo_fild02.gat" || kewd_travel&0x8)
- set #kewd_travel,#kewd_travel|0x8;
- if (@map$ == "izlu2dun.gat" || kewd_travel&0x10)
- set #kewd_travel,#kewd_travel|0x10;
- if (@map$ == "comodo.gat" || @map$ == "cmd_fild01.gat" || kewd_travel&0x20)
- set #kewd_travel,#kewd_travel|0x20;
- if (@map$ == "aldebaran.gat" || kewd_travel&0x40)
- set #kewd_travel,#kewd_travel|0x40;
- if (@map$ == "mjolnir_02.gat" || kewd_travel&0x80)
- set #kewd_travel,#kewd_travel|0x80;
- if (@map$ == "prt_fild05.gat" || kewd_travel&0x100)
- set #kewd_travel,#kewd_travel|0x100;
- if (@map$ == "einbech.gat" || kewd_travel&0x200)
- set #kewd_travel,#kewd_travel|0x200;
- if (@map$ == "gef_tower.gat" || kewd_travel&0x800)
- set #kewd_travel,#kewd_travel|0x800;
- if (@map$ == "glast_01.gat" || kewd_travel&0x1000)
- set #kewd_travel,#kewd_travel|0x1000;
- if (@map$ == "gonryun.gat" || kewd_travel&0x2000)
- set #kewd_travel,#kewd_travel|0x2000;
- if (@map$ == "prt_fild01.gat" || kewd_travel&0x4000)
- set #kewd_travel,#kewd_travel|0x4000;
- if (@map$ == "jupe_cave.gat" || kewd_travel&0x8000)
- set #kewd_travel,#kewd_travel|0x8000;
- if (@map$ == "lighthalzen.gat" || kewd_travel&0x10000)
- set #kewd_travel,#kewd_travel|0x10000;
- if (@map$ == "louyang.gat" || kewd_travel&0x20000)
- set #kewd_travel,#kewd_travel|0x20000;
- if (@map$ == "yuno_fild03.gat" || kewd_travel&0x40000)
- set #kewd_travel,#kewd_travel|0x40000;
- if (@map$ == "in_orcs01.gat" || kewd_travel&0x80000)
- set #kewd_travel,#kewd_travel|0x80000;
- if (@map$ == "pay_arche.gat" || kewd_travel&0x100000)
- set #kewd_travel,#kewd_travel|0x100000;
- if (@map$ == "moc_ruins.gat" || kewd_travel&0x200000)
- set #kewd_travel,#kewd_travel|0x200000;
- if (@map$ == "moc_fild19.gat" || kewd_travel&0x400000)
- set #kewd_travel,#kewd_travel|0x400000;
- if (@map$ == "alb2trea.gat" || kewd_travel&0x800000)
- set #kewd_travel,#kewd_travel|0x800000;
- if (@map$ == "tha_t01.gat" || kewd_travel&0x1000000)
- set #kewd_travel,#kewd_travel|0x1000000;
- if (@map$ == "xmas.gat" || kewd_travel&0x2000000)
- set #kewd_travel,#kewd_travel|0x2000000;
- if (@map$ == "tur_dun01.gat" || kewd_travel&0x4000000)
- set #kewd_travel,#kewd_travel|0x4000000;
- if (@map$ == "umbala.gat" || kewd_travel&0x8000000)
- set #kewd_travel,#kewd_travel|0x8000000;
- } else {
- if (@map$ == "hu_fild05.gat")
- set kewd_travel,kewd_travel|0x1;
- if (@map$ == "ama_in02.gat")
- set kewd_travel,kewd_travel|0x2;
- if (@map$ == "moc_fild04.gat" || @map$ == "moc_fild15.gat")
- set kewd_travel,kewd_travel|0x4;
- if (@map$ == "ayo_fild02.gat")
- set kewd_travel,kewd_travel|0x8;
- if (@map$ == "izlu2dun.gat")
- set kewd_travel,kewd_travel|0x10;
- if (@map$ == "comodo.gat" || @map$ == "cmd_fild01.gat")
- set kewd_travel,kewd_travel|0x20;
- if (@map$ == "aldebaran.gat")
- set kewd_travel,kewd_travel|0x40;
- if (@map$ == "mjolnir_02.gat")
- set kewd_travel,kewd_travel|0x80;
- if (@map$ == "prt_fild05.gat")
- set kewd_travel,kewd_travel|0x100;
- if (@map$ == "einbech.gat")
- set kewd_travel,kewd_travel|0x200;
- if (@map$ == "gef_tower.gat")
- set kewd_travel,kewd_travel|0x800;
- if (@map$ == "glast_01.gat")
- set kewd_travel,kewd_travel|0x1000;
- if (@map$ == "gonryun.gat")
- set kewd_travel,kewd_travel|0x2000;
- if (@map$ == "prt_fild01.gat")
- set kewd_travel,kewd_travel|0x4000;
- if (@map$ == "jupe_cave.gat")
- set kewd_travel,kewd_travel|0x8000;
- if (@map$ == "lighthalzen.gat")
- set kewd_travel,kewd_travel|0x10000;
- if (@map$ == "louyang.gat")
- set kewd_travel,kewd_travel|0x20000;
- if (@map$ == "yuno_fild03.gat")
- set kewd_travel,kewd_travel|0x40000;
- if (@map$ == "in_orcs01.gat")
- set kewd_travel,kewd_travel|0x80000;
- if (@map$ == "pay_arche.gat")
- set kewd_travel,kewd_travel|0x100000;
- if (@map$ == "moc_ruins.gat")
- set kewd_travel,kewd_travel|0x200000;
- if (@map$ == "moc_fild19.gat")
- set kewd_travel,kewd_travel|0x400000;
- if (@map$ == "alb2trea.gat")
- set kewd_travel,kewd_travel|0x800000;
- if (@map$ == "tha_t01.gat")
- set kewd_travel,kewd_travel|0x1000000;
- if (@map$ == "xmas.gat")
- set kewd_travel,kewd_travel|0x2000000;
- if (@map$ == "tur_dun01.gat")
- set kewd_travel,kewd_travel|0x4000000;
- if (@map$ == "umbala.gat")
- set kewd_travel,kewd_travel|0x8000000;
- }
- return;
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Dungeon Warps Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 3.5
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+, RO Episode 8+ (Hugel)
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers warping to dungeons.
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//= Flag values used for dungeons:
+//= 0x00000001 Abyss Lake
+//= 0x00000002 Amatsu
+//= 0x00000004 AntHell
+//= 0x00000008 Ayothaya
+//= 0x00000010 Byalan
+//= 0x00000020 Comodo
+//= 0x00000040 Clock tower
+//= 0x00000080 Coal Mines
+//= 0x00000100 Culvert
+//= 0x00000200 Einbech
+//= 0x00000400 Gefenia
+//= 0x00000800 Geffen
+//= 0x00001000 GlastHeim
+//= 0x00002000 Gon Ryun
+//= 0x00004000 Hidden Temple
+//= 0x00008000 Juperos
+//= 0x00010000 Lighthalzen
+//= 0x00020000 Lou Yang
+//= 0x00040000 Magma Caves
+//= 0x00080000 Orcs
+//= 0x00100000 Payon
+//= 0x00200000 Pyramid
+//= 0x00400000 Sphinx
+//= 0x00800000 Sunken Ship
+//= 0x01000000 Thanatos
+//= 0x02000000 Toy Factory
+//= 0x04000000 Turtle Island
+//= 0x08000000 Umbala
+
+//============================================================
+
+- script keInit_warpDungeon -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadWarpDungeon";
+ end;
+}
+
+function script F_keDungeonWarps {
+
+function SF_abyssLake;
+function SF_amatsu;
+function SF_antHell;
+function SF_ayothaya;
+function SF_byalan;
+function SF_comodo;
+function SF_clockTower;
+function SF_coalMine;
+function SF_culvert;
+function SF_einbech;
+function SF_gefenia;
+function SF_geffen;
+function SF_glastHeim;
+function SF_gonRyun;
+function SF_hiddenTemple;
+function SF_juperos;
+function SF_lightHalzen;
+function SF_louYang;
+function SF_magma;
+function SF_orcs;
+function SF_payon;
+function SF_pyramid;
+function SF_sphinx;
+function SF_sunkenShip;
+function SF_thanatosTower;
+function SF_toyFactory;
+function SF_turtleIsland;
+function SF_umbala;
+ //Store player map, will be needed in any of the submenus.
+ set @map$, getarg(0);
+ do {
+ set @discount,callfunc("F_keCost",100,$@kewd_discount);
+ if ($@kewd_showOnline) {
+ set @kmenu, select (
+ "- Cancel",
+ "- Abyss Lake ("+$@kewd_abyssLake*@discount/100+"z/"+(getmapusers("abyss_01.gat")
+ +getmapusers("abyss_02.gat")+getmapusers("abyss_03.gat"))+" "+$@ked_users$+")",
+ "- Amatsu Dungeon ("+$@kewd_amatsu*@discount/100+"z/"+(getmapusers("ama_dun01.gat")
+ +getmapusers("ama_dun02.gat")+getmapusers("ama_dun03.gat"))+" "+$@ked_users$+")",
+ "- Ant Hell ("+$@kewd_antHell*@discount/100+"z/"+(getmapusers("anthell01.gat")
+ +getmapusers("anthell02.gat"))+" "+$@ked_users$+")",
+ "- Ayothaya Ancient Shrine ("+$@kewd_ayothaya*@discount/100+"z/"+(getmapusers("ayo_dun01.gat")
+ +getmapusers("ayo_dun02.gat"))+" "+$@ked_users$+")",
+ "- Byalan Dungeon ("+$@kewd_byalan*@discount/100+"z/"+(getmapusers("iz_dun00.gat")
+ +getmapusers("iz_dun01.gat")+getmapusers("iz_dun02.gat")+getmapusers("iz_dun03.gat")
+ +getmapusers("iz_dun04.gat"))+" "+$@ked_users$+")",
+ "- Comodo Caves ("+$@kewd_comodo*@discount/100+"z/"+(getmapusers("beach_dun.gat")
+ +getmapusers("beach_dun2.gat")+getmapusers("beach_dun3.gat"))+" "+$@ked_users$+")",
+ "- Clock Tower ("+$@kewd_clockTower*@discount/100+"z/"+(getmapusers("c_tower1.gat")
+ +getmapusers("c_tower2.gat")+getmapusers("c_tower3.gat")+getmapusers("c_tower4.gat")
+ +getmapusers("alde_dun01.gat")+getmapusers("alde_dun02.gat")+getmapusers("alde_dun03.gat")
+ +getmapusers("alde_dun04.gat"))+" "+$@ked_users$+")",
+ "- Coal Mine ("+$@kewd_coalMines*@discount/100+"z/"+(getmapusers("mjo_dun01.gat")
+ +getmapusers("mjo_dun02.gat")+getmapusers("mjo_dun03.gat"))+" "+$@ked_users$+")",
+ "- Culvert ("+$@kewd_culvert*@discount/100+"z/"+(getmapusers("prt_sewb1.gat")+getmapusers("prt_sewb2.gat")
+ +getmapusers("prt_sewb3.gat")+getmapusers("prt_sewb4.gat"))+" "+$@ked_users$+")",
+ "- Einbroch Station ("+$@kewd_einbech*@discount/100+"z/"+(getmapusers("ein_dun01.gat")
+ +getmapusers("ein_dun02.gat"))+" "+$@ked_users$+")",
+ "- Gefenia ("+$@kewd_gefenia*@discount/100+"z/"+(getmapusers("gefenia01.gat")+getmapusers("gefenia02.gat")
+ +getmapusers("gefenia03.gat")+getmapusers("gefenia04.gat"))+" "+$@ked_users$+")",
+ "- Geffen Dungeon ("+$@kewd_geffen*@discount/100+"z/"+(getmapusers("gef_dun00.gat")
+ +getmapusers("gef_dun01.gat")+getmapusers("gef_dun02.gat")+getmapusers("gef_dun03.gat"))+" "+$@ked_users$+")",
+ "- Glast Heim ("+$@kewd_glastHeim*@discount/100+"z/"+(getmapusers("gl_cas02.gat")+getmapusers("gl_church.gat")
+ +getmapusers("gl_chyard.gat")+getmapusers("gl_dun01.gat")+getmapusers("gl_dun02.gat")
+ +getmapusers("gl_in01.gat")+getmapusers("gl_knt01.gat")+getmapusers("gl_knt02.gat")
+ +getmapusers("gl_prison.gat")+getmapusers("gl_prison1.gat")+getmapusers("gl_sew01.gat")
+ +getmapusers("gl_sew02.gat")+getmapusers("gl_sew03.gat")+getmapusers("gl_sew04.gat")
+ +getmapusers("gl_step.gat")+getmapusers("glast_01.gat"))+" "+$@ked_users$+")",
+ "- Gon Ryun Dungeon ("+$@kewd_gonRyun*@discount/100+"z/"+(getmapusers("gon_dun01.gat")
+ +getmapusers("gon_dun02.gat")+getmapusers("gon_dun03.gat"))+" "+$@ked_users$+")",
+ "- Hidden Temple ("+$@kewd_hiddenTemple*@discount/100+"z/"+(getmapusers("prt_maze01.gat")
+ +getmapusers("prt_maze02.gat")+getmapusers("prt_maze03.gat"))+" "+$@ked_users$+")",
+ "- Juperos ("+$@kewd_juperos*@discount/100+"z/"+(getmapusers("juperos_01.gat")+getmapusers("juperos_02.gat")
+ +getmapusers("jupe_area1.gat")+getmapusers("jupe_area2.gat")+getmapusers("jupe_core.gat")
+ +getmapusers("jupe_gate.gat")+getmapusers("jupe_area1.gat"))+" "+$@ked_users$+")",
+ "- LightHalzen Rekkenber ("+$@kewd_lightHalzen*@discount/100+"z/"+(getmapusers("lhz_dun01.gat")
+ +getmapusers("lhz_dun02.gat")+getmapusers("lhz_dun03.gat"))+" "+$@ked_users$+")",
+ "- Lou Yang Royal Tomb ("+$@kewd_louYang*@discount/100+"z/"+(getmapusers("lou_dun01.gat")
+ +getmapusers("lou_dun02.gat")+getmapusers("lou_dun03.gat"))+" "+$@ked_users$+")",
+ "- Magma Dungeon ("+$@kewd_magma*@discount/100+"z/"+(getmapusers("mag_dun01.gat")
+ +getmapusers("mag_dun02.gat"))+" "+$@ked_users$+")",
+ "- Orc Dungeon ("+$@kewd_orc*@discount/100+"z/"+(getmapusers("orcsdun01.gat")
+ +getmapusers("orcsdun02.gat"))+" "+$@ked_users$+")",
+ "- Payon Dungeon ("+$@kewd_payon*@discount/100+"z/"+(getmapusers("pay_dun00.gat")
+ +getmapusers("pay_dun01.gat")+getmapusers("pay_dun02.gat")+getmapusers("pay_dun03.gat")
+ +getmapusers("pay_dun04.gat"))+" "+$@ked_users$+")",
+ "- Pyramid ("+$@kewd_pyramid*@discount/100+"z/"+(getmapusers("moc_pryd01.gat")+getmapusers("moc_pryd02.gat")
+ +getmapusers("moc_pryd03.gat")+getmapusers("moc_pryd04.gat")+getmapusers("moc_pryd05.gat")
+ +getmapusers("moc_pryd06.gat")+getmapusers("moc_prydb1.gat"))+" "+$@ked_users$+")",
+ "- Sphinx ("+$@kewd_sphinx*@discount/100+"z/"+(getmapusers("in_sphinx1.gat")
+ +getmapusers("in_sphinx2.gat")+getmapusers("in_sphinx3.gat")+getmapusers("in_sphinx4.gat")
+ +getmapusers("in_sphinx5.gat"))+" "+$@ked_users$+")",
+ "- Sunken Ship ("+$@kewd_sunkenShip*@discount/100+"z/"+(getmapusers("treasure01.gat")
+ +getmapusers("treasure02.gat"))+" "+$@ked_users$+")",
+ "- Thanatos Tower ("+$@kewd_thanatosTower*@discount/100+"z/"+(getmapusers("tha_t01.gat")
+ +getmapusers("tha_t02.gat")+getmapusers("tha_t03.gat")+getmapusers("tha_t04.gat")
+ +getmapusers("tha_t05.gat")+getmapusers("tha_t06.gat")+getmapusers("tha_t07.gat")
+ +getmapusers("tha_t08.gat")+getmapusers("tha_t09.gat")+getmapusers("tha_t10.gat")
+ +getmapusers("tha_t11.gat")+getmapusers("tha_t12.gat")+getmapusers("thana_step.gat")
+ +getmapusers("thana_boss.gat"))+" "+$@ked_users$+")",
+ "- Toy Factory ("+$@kewd_toyFactory*@discount/100+"z/"+(getmapusers("xmas_dun01.gat")
+ +getmapusers("xmas_dun02.gat"))+" "+$@ked_users$+")",
+ "- Turtle Island ("+$@kewd_turtleIsland*@discount/100+"z/"+(getmapusers("tur_dun01.gat")
+ +getmapusers("tur_dun02.gat")+getmapusers("tur_dun03.gat")+getmapusers("tur_dun04.gat")
+ +getmapusers("tur_dun05.gat")+getmapusers("tur_dun06.gat"))+" "+$@ked_users$+")",
+ "- Umbala Dungeon ("+$@kewd_umbala*@discount/100+"z/"+(getmapusers("um_dun01.gat")
+ +getmapusers("um_dun02.gat"))+" "+$@ked_users$+")"
+ );
+ } else {
+ set @kmenu, select(
+ "- Cancel",
+ "- Abyss Lake ("+$@kewd_abyssLake*@discount/100+"z)",
+ "- Amatsu Dungeon ("+$@kewd_amatsu*@discount/100+"z)",
+ "- Ant Hell ("+$@kewd_antHell*@discount/100+"z)",
+ "- Ayothaya Ancient Shrine ("+$@kewd_ayothaya*@discount/100+"z)",
+ "- Byalan Dungeon ("+$@kewd_byalan*@discount/100+"z)",
+ "- Comodo Caves ("+$@kewd_comodo*@discount/100+"z)",
+ "- Clock Tower ("+$@kewd_clockTower*@discount/100+"z)",
+ "- Coal Mine ("+$@kewd_coalMines*@discount/100+"z)",
+ "- Culvert ("+$@kewd_culvert*@discount/100+"z)",
+ "- Einbroch Mine ("+$@kewd_einbech*@discount/100+"z)",
+ "- Gefenia ("+$@kewd_gefenia*@discount/100+"z)",
+ "- Geffen Dungeon ("+$@kewd_geffen*@discount/100+"z)",
+ "- Glast Heim ("+$@kewd_glastHeim*@discount/100+"z)",
+ "- Gon Ryun Dungeon ("+$@kewd_gonRyun*@discount/100+"z)",
+ "- Hidden Temple ("+$@kewd_hiddenTemple*@discount/100+"z)",
+ "- Juperos ("+$@kewd_juperos*@discount/100+"z)",
+ "- LightHalzen Rekkenber ("+$@kewd_lightHalzen*@discount/100+"z)",
+ "- Lou Yang Royal Tomb ("+$@kewd_louYang*@discount/100+"z)",
+ "- Magma Dungeon ("+$@kewd_magma*@discount/100+"z)",
+ "- Orcs Dungeon ("+$@kewd_orc*@discount/100+"z)",
+ "- Payon Dungeon ("+$@kewd_payon*@discount/100+"z)",
+ "- Pyramid ("+$@kewd_pyramid*@discount/100+"z)",
+ "- Sphinx ("+$@kewd_sphinx*@discount/100+"z)",
+ "- Sunken Ship ("+$@kewd_sunkenShip*@discount/100+"z)",
+ "- Thanatos Tower ("+$@kewd_thanatosTower*@discount/100+"z)",
+ "- Toy Factory ("+$@kewd_toyFactory*@discount/100+"z)",
+ "- Turtle Island ("+$@kewd_turtleIsland*@discount/100+"z)",
+ "- Umbala Dungeon ("+$@kewd_umbala*@discount/100+"z)"
+ );
+ }
+ switch (@kmenu) {
+ case 2:
+ SF_abyssLake();
+ break;
+ case 3:
+ SF_amatsu();
+ break;
+ case 4:
+ SF_antHell();
+ break;
+ case 5:
+ SF_ayothaya();
+ break;
+ case 6:
+ SF_byalan();
+ break;
+ case 7:
+ SF_comodo();
+ break;
+ case 8:
+ SF_clockTower();
+ break;
+ case 9:
+ SF_coalMine();
+ break;
+ case 10:
+ SF_culvert();
+ break;
+ case 11:
+ SF_einbech();
+ break;
+ case 12:
+ SF_gefenia();
+ break;
+ case 13:
+ SF_geffen();
+ break;
+ case 14:
+ SF_glastHeim();
+ break;
+ case 15:
+ SF_gonRyun();
+ break;
+ case 16:
+ SF_hiddenTemple();
+ break;
+ case 17:
+ SF_juperos();
+ break;
+ case 18:
+ SF_lightHalzen();
+ break;
+ case 19:
+ SF_louYang();
+ break;
+ case 20:
+ SF_magma();
+ break;
+ case 21:
+ SF_orcs();
+ break;
+ case 22:
+ SF_payon();
+ break;
+ case 23:
+ SF_pyramid();
+ break;
+ case 24:
+ SF_sphinx();
+ break;
+ case 25:
+ SF_sunkenShip();
+ break;
+ case 26:
+ SF_thanatosTower();
+ break;
+ case 27:
+ SF_toyFactory();
+ break;
+ case 28:
+ SF_turtleIsland();
+ break;
+ case 29:
+ SF_umbala();
+ break;
+ default:
+ return;
+ }
+ } while (@kmenu > 1);
+ return;
+
+//Subfunction SF_check(flag, cost, floor-count, player-map, dungeon-map#, map#1, map#2, ...)
+//If kewd_travel is set, the flag needs to match to be to warp there.
+//Floor count is the amount of levels the dungeon needs a price for,
+//dungeon-map# is the number of maps passed that need to be checked against
+//the player's map to see if they are warping from within the entrance.
+
+function SF_check {
+ if ($@kewd_travel && !((kewd_travel|#kewd_travel)&getarg(0))) {
+ callfunc "F_keIntro", e_sry, "Sorry, but we can only warp you to dungeons you have saved in before.";
+ return 0;
+ }
+ set @cost, getarg(1);
+ set @discount,100;
+ set @map$, getarg(3);
+ set @mapI, getarg(4);
+
+ while (@mapI > 0)
+ {
+ if (@map$ == getarg(4+@mapI)) {
+ set @discount,100-$@kewd_entryDiscount;
+ break;
+ }
+ set @mapI, @mapI-1;
+ }
+ set @discountKP, callfunc("F_keCost",100,$@kewd_discount);
+ set @discount,@discount*@discountKP/100;
+
+ set @cost,@cost*@discount/100;
+ set @inc,@cost*$@kewd_levelCost/100;
+
+ //@discountKP is used to reverse the price to before the KP discount takes place
+ if (@discountKP == 0)
+ set @discountKP,1;
+ if ($@kewd_deep == 0)
+ return 1;
+
+ switch (getarg(2)) {
+ case 9:
+ set @cost9, @cost +8*@inc;
+ case 8:
+ set @cost8, @cost +7*@inc;
+ case 7:
+ set @cost7, @cost +6*@inc;
+ case 6:
+ set @cost6, @cost +5*@inc;
+ case 5:
+ set @cost5, @cost +4*@inc;
+ case 4:
+ set @cost4, @cost +3*@inc;
+ case 3:
+ set @cost3, @cost +2*@inc;
+ case 2:
+ set @cost2, @cost +@inc;
+ }
+ return 1;
+}
+
+function SF_abyssLake {
+ if (!(SF_check(0x1, $@kewd_abyssLake, 3, @map$, 1, "hu_fild05.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Abyss Lake",
+ "- Entrance ("+@cost+"z/"+getmapusers("abyss_01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("abyss_02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("abyss_03.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Abyss Lake",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"hu_fild05.gat",173,308;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"abyss_02.gat",272,270;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"abyss_03.gat",116,29;
+ break;
+ }
+}
+
+function SF_amatsu {
+ if (!(SF_check(0x2, $@kewd_amatsu, 3, @map$, 1, "ama_in02.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Amatsu Dungeon",
+ "- Entrance ("+@cost+"z/"+getmapusers("ama_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("ama_dun02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("ama_dun03.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Amatsu Dungeon",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"ama_in02.gat",120,181;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"ama_dun02.gat",34,41;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"ama_dun03.gat",119,14;
+ break;
+ }
+}
+
+function SF_antHell {
+ if (!(SF_check(0x4, $@kewd_antHell, 1, @map$, 2, "moc_fild04.gat","moc_fild15.gat")))
+ return;
+ if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Ant Hell",
+ "- Northern Entrance ("+@cost+"z/"+getmapusers("anthell01.gat")+" "+$@ked_users$+")",
+ "- Southern Entrance ("+@cost+"z/"+getmapusers("anthell02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Ant Hell",
+ "- Northern Entrance ("+@cost+"z)",
+ "- Southern Entrance ("+@cost+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"moc_fild04.gat",201,327;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"moc_fild15.gat",246,251;
+ break;
+ }
+}
+
+function SF_ayothaya {
+ if (!(SF_check(0x8, $@kewd_ayothaya, 2, @map$, 1, "ayo_fild02.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Ancient Shrine",
+ "- Entrance ("+@cost+"z/"+getmapusers("ayo_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("ayo_dun02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Ancient Shrine",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"ayo_fild02.gat",273,150;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"ayo_dun02.gat",24,28;
+ break;
+ }
+}
+
+function SF_byalan {
+ if (!(SF_check(0x10, $@kewd_byalan, 5, @map$, 1, "izlu2dun.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Undersea Tunnel",
+ "- Entrance ("+@cost+"z/"+getmapusers("iz_dun00.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("iz_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("iz_dun02.gat")+" "+$@ked_users$+")",
+ "- Level 4 ("+@cost4+"z/"+getmapusers("iz_dun03.gat")+" "+$@ked_users$+")",
+ "- Level 5 ("+@cost5+"z/"+getmapusers("iz_dun04.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Undersea Tunnel",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)",
+ "- Level 4 ("+@cost4+"z)",
+ "- Level 5 ("+@cost5+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"izlu2dun.gat",114,84;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"iz_dun01.gat",253,252;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"iz_dun02.gat",236,204;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"iz_dun03.gat",32,63;
+ break;
+ case 6:
+ callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"iz_dun04.gat",26,27;
+ break;
+ }
+}
+
+function SF_comodo {
+ if (!(SF_check(0x20, $@kewd_comodo, 1, @map$, 2, "comodo.gat","cmd_fild01.gat")))
+ return;
+
+ if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Comodo Caves",
+ "- Mao, The Eastern Cave ("+@cost+"z/"+getmapusers("beach_dun3.gat")+" "+$@ked_users$+")",
+ "- Karu, The Western Cave ("+@cost+"z/"+getmapusers("beach_dun.gat")+" "+$@ked_users$+")",
+ "- Ruande, The Northern Cave ("+@cost+"z/"+getmapusers("beach_dun2.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Comodo Caves",
+ "- Mao, The Eastern Cave ("+@cost+"z)",
+ "- Karu, The Western Cave ("+@cost+"z)",
+ "- Ruande, The Northern Cave ("+@cost+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"cmd_fild01.gat",34,325;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"comodo.gat",32,209;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"comodo.gat",180,352;
+ break;
+ }
+}
+
+function SF_clockTower {
+ if (!(SF_check(0x40, $@kewd_clockTower, 5, @map$, 1, "aldebaran.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Clock Tower",
+ "- Entrance ("+@cost+"z/"+getmapusers("c_tower1.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("c_tower2.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("c_tower3.gat")+" "+$@ked_users$+")",
+ "- Level 4 ("+@cost4+"z/"+getmapusers("c_tower4.gat")+" "+$@ked_users$+")",
+ "- Basement 1 ("+@cost2+"z/"+getmapusers("alde_dun01.gat")+" "+$@ked_users$+")",
+ "- Basement 2 ("+@cost3+"z/"+getmapusers("alde_dun02.gat")+" "+$@ked_users$+")",
+ "- Basement 3 ("+@cost4+"z/"+getmapusers("alde_dun03.gat")+" "+$@ked_users$+")",
+ "- Basement 4 ("+@cost5+"z/"+getmapusers("alde_dun04.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Clock Tower",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)",
+ "- Level 4 ("+@cost4+"z)",
+ "- Basement 1 ("+@cost2+"z)",
+ "- Basement 2 ("+@cost3+"z)",
+ "- Basement 3 ("+@cost4+"z)",
+ "- Basement 4 ("+@cost5+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"aldebaran.gat",140,130;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"c_tower2.gat",268,26;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"c_tower3.gat",68,146;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"c_tower4.gat",185,44;
+ break;
+ case 6:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"alde_dun01.gat",297,25;
+ break;
+ case 7:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"alde_dun02.gat",43,24;
+ break;
+ case 8:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"alde_dun03.gat",18,267;
+ break;
+ case 9:
+ callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"alde_dun04.gat",82,267;
+ break;
+ }
+}
+
+function SF_coalMine {
+ if (!(SF_check(0x80, $@kewd_coalMines, 3, @map$, 1, "mjolnir_02.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Mjolnir Dead Pit",
+ "- Entrance ("+@cost+"z/"+getmapusers("mjo_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("mjo_dun02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("mjo_dun03.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Mjolnir Dead Pit",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"mjolnir_02.gat",89,358;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"mjo_dun02.gat",376,342;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"mjo_dun03.gat",305,260;
+ break;
+ }
+}
+
+function SF_culvert {
+ if (!(SF_check(0x100, $@kewd_culvert, 4, @map$, 1, "prt_fild05.gat")))
+ return;
+ if ($@kewd_deep == 0) {
+ set @submenu, 2;
+ } else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Prontera Culvert",
+ "- Entrance ("+@cost+"z/"+getmapusers("prt_sewb1.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("prt_sewb2.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("prt_sewb3.gat")+" "+$@ked_users$+")",
+ "- Level 4 ("+@cost4+"z/"+getmapusers("prt_sewb4.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Prontera Culvert",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)",
+ "- Level 4 ("+@cost4+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"prt_fild05.gat",274,208;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"prt_sewb2.gat",19,19;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"prt_sewb3.gat",180,169;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"prt_sewb4.gat",100,92;
+ break;
+ }
+}
+
+function SF_einbech {
+ if (!(SF_check(0x200, $@kewd_einbech, 2, @map$, 1, "einbech.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Einbroch Mines",
+ "- Entrance ("+@cost+"z/"+getmapusers("ein_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("ein_dun02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Einbech Mines",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"einbech.gat",138,244;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"ein_dun02.gat",290,285;
+ break;
+ }
+}
+
+function SF_geffen {
+ if (!(SF_check(0x800, $@kewd_geffen, 3, @map$, 1, "gef_tower.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Geffen Dungeon",
+ "- Entrance ("+@cost+"z/"+getmapusers("gef_dun00.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("gef_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("gef_dun02.gat")+" "+$@ked_users$+")"
+// "- Level 4 ("+@cost4+"z/"+getmapusers("gef_dun03.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Geffen Dungeon",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)"
+// "- Level 4 ("+@cost4+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"gef_tower.gat",147,35;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gef_dun01.gat",115,236;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"gef_dun02.gat",106,132;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"gef_dun03.gat",203,200;
+ break;
+ }
+}
+
+function SF_gefenia {
+ if (!(SF_check(0x400, $@kewd_gefenia, 2, @map$, 4, "gefenia01.gat","gefenia02.gat","gefenia03.gat","gefenia04.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Gefenia",
+ "- Level 1 ("+@cost+"z/"+getmapusers("gefenia01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("gefenia02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost2+"z/"+getmapusers("gefenia03.gat")+" "+$@ked_users$+")",
+ "- Level 4 ("+@cost+"z/"+getmapusers("gefenia04.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Gefenia",
+ "- Level 1 ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost2+"z)",
+ "- Level 4 ("+@cost+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"gefenia01.gat",60,169;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gefenia02.gat",116,116;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gefenia03.gat",119,277;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"gefenia04.gat",129,86;
+ break;
+ }
+}
+
+function SF_glastHeim {
+ if (!(SF_check(0x1000, $@kewd_glastHeim, 7, @map$, 1, "glast_01.gat")))
+ return;
+ if ($@kewd_deep == 0) {
+ if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Glast Heim",
+ "- Church Entrance ("+@cost+"z/"+getmapusers("gl_church.gat")+" "+$@ked_users$+")",
+ "- Castle Terrace ("+@cost+"z/"+(getmapusers("gl_cas01.gat")+getmapusers("gl_cas02.gat"))+" "+$@ked_users$+")",
+ "- Staircase Entrance ("+@cost+"z/"+getmapusers("gl_step.gat")+" "+$@ked_users$+")",
+ "- Chivalry Entrance ("+@cost+"z/"+getmapusers("gl_knt01.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Glast Heim",
+ "- Church Entrance ("+@cost+"z)",
+ "- Castle Terrace ("+@cost+"z)",
+ "- Staircase Entrance ("+@cost+"z)",
+ "- Chivalry Entrance ("+@cost+"z)"
+ );
+ }
+ if (@submenu > 2) //Churchyard is index 3.
+ set @submenu, @submenu+1;
+ } else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Glast Heim",
+ "- Church Entrance ("+@cost+"z/"+getmapusers("gl_church.gat")+" "+$@ked_users$+")",
+ "- Churchyard ("+@cost2+"z/"+getmapusers("gl_chyard.gat")+" "+$@ked_users$+")",
+ "- Castle Terrace ("+@cost+"z/"+(getmapusers("gl_cas01.gat")+getmapusers("gl_cas02.gat"))+" "+$@ked_users$+")",
+ "- Staircase Entrance ("+@cost+"z/"+getmapusers("gl_step.gat")+" "+$@ked_users$+")",
+ "- Chivalry Entrance ("+@cost+"z/"+getmapusers("gl_knt01.gat")+" "+$@ked_users$+")",
+ "- Chivalry Level 2 ("+@cost2+"z/"+getmapusers("gl_knt02.gat")+" "+$@ked_users$+")",
+ "- Underground Prison 1 ("+@cost2+"z/"+getmapusers("gl_prison.gat")+" "+$@ked_users$+")",
+ "- Underground Prison 2 ("+@cost3+"z/"+getmapusers("gl_prison1.gat")+" "+$@ked_users$+")",
+ "- Culvert Level 1 ("+@cost4+"z/"+getmapusers("gl_sew01.gat")+" "+$@ked_users$+")",
+ "- Culvert Level 2 ("+@cost3+"z/"+getmapusers("gl_sew02.gat")+" "+$@ked_users$+")",
+ "- Culvert Level 3 ("+@cost4+"z/"+getmapusers("gl_sew03.gat")+" "+$@ked_users$+")",
+ "- Culvert Level 4 ("+@cost5+"z/"+getmapusers("gl_sew04.gat")+" "+$@ked_users$+")",
+ "- Underground Cave 1 ("+@cost6+"z/"+getmapusers("gl_dun01.gat")+" "+$@ked_users$+")",
+ "- Underground Cave 2 ("+@cost7+"z/"+getmapusers("gl_dun02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Glast Heim",
+ "- Church Entrance ("+@cost+"z)",
+ "- Churchyard ("+@cost2+"z)",
+ "- Castle Terrace ("+@cost+"z)",
+ "- Staircase Entrance ("+@cost+"z)",
+ "- Chivalry Entrance ("+@cost+"z)",
+ "- Chivalry Level 2 ("+@cost2+"z)",
+ "- Underground Prison Level 1 ("+@cost2+"z)",
+ "- Underground Prison Level 2 ("+@cost3+"z)",
+ "- Culvert Level 1 ("+@cost4+"z)",
+ "- Culvert Level 2 ("+@cost3+"z)",
+ "- Culvert Level 3 ("+@cost4+"z)",
+ "- Culvert Level 4 ("+@cost5+"z)",
+ "- Underground Cave Level 1 ("+@cost6+"z)",
+ "- Underground Cave Level 2 ("+@cost7+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"glast_01.gat",206,136;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gl_chyard.gat",147,15;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"glast_01.gat",199,335;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"glast_01.gat",62,107;
+ break;
+ case 6:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"glast_01.gat",69,193;
+ break;
+ case 7:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gl_knt02.gat",157,287;
+ break;
+ case 8:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gl_prison.gat",14,70;
+ break;
+ case 9:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"gl_prison1.gat",150,14;
+ break;
+ case 10:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"gl_sew01.gat",258,255;
+ break;
+ case 11:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"gl_sew02.gat",108,291;
+ break;
+ case 12:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"gl_sew03.gat",171,283;
+ break;
+ case 13:
+ callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"gl_sew04.gat",68,277;
+ break;
+ case 14:
+ callfunc "F_keWarp",@cost6*100/@discountKP,$@kewd_discount,e_hmm,"gl_dun01.gat",133,271;
+ break;
+ case 15:
+ callfunc "F_keWarp",@cost7*100/@discountKP,$@kewd_discount,e_hmm,"gl_dun02.gat",224,274;
+ break;
+ }
+}
+
+function SF_gonRyun {
+ if (!(SF_check(0x2000, $@kewd_gonRyun, 3, @map$, 1, "gonryun.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Gon Ryun Dungeon",
+ "- Entrance ("+@cost+"z/"+getmapusers("gon_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("gon_dun02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("gon_dun03.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Gon Ryun Dungeon",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"gonryun.gat",161,195;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"gon_dun02.gat",22,114;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"gon_dun03.gat",68,11;
+ break;
+ }
+}
+
+function SF_hiddenTemple {
+ if (!(SF_check(0x4000, $@kewd_hiddenTemple, 3, @map$, 1, "prt_fild01.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Laberynth Forest",
+ "- Entrance ("+@cost+"z/"+getmapusers("prt_maze01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("prt_maze02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("prt_maze03.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Laberynth Forest",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"prt_fild01.gat",136,361;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"prt_maze02.gat",106,62;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"prt_maze03.gat",23,8;
+ break;
+ }
+}
+
+function SF_juperos {
+ if (!(SF_check(0x8000, $@kewd_juperos, 3, @map$, 1, "jupe_cave.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Juperos",
+ "- Entrance ("+@cost+"z/"+getmapusers("juperos_01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("juperos_02.gat")+" "+$@ked_users$+")",
+ "- Core ("+@cost3+"z/"+getmapusers("jupe_core.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Juperos",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Core ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"jupe_cave.gat",55,52;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"juperos_02.gat",37,63;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"jupe_gate.gat",-1,-1;
+ break;
+ }
+}
+
+function SF_lightHalzen {
+ if (!(SF_check(0x10000, $@kewd_lightHalzen, 3, @map$, 1, "lighthalzen.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Rekkenber",
+ "- Entrance ("+@cost+"z/"+getmapusers("lou_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("lou_dun02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("lou_dun03.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Rekkenber",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+//This is the Rekkenber building entrance, which officially is only a dungeon exit.
+// callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"lighthalzen.gat",74,72;
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"lighthalzen.gat",303,302;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"lhz_dun02.gat",154,18;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"lhz_dun03.gat",141,132;
+ break;
+ }
+}
+
+function SF_louYang {
+ if (!(SF_check(0x20000, $@kewd_louYang, 3, @map$, 1, "louyang.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Royal Tomb",
+ "- Entrance ("+@cost+"z/"+getmapusers("lou_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("lou_dun02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("lou_dun03.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Royal Tomb",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)"
+ );
+ };
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"louyang.gat",41,267;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"lou_dun02.gat",281,20;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"lou_dun03.gat",165,39;
+ break;
+ }
+}
+
+function SF_magma {
+ if (!(SF_check(0x40000, $@kewd_magma, 2, @map$, 1, "yuno_fild03.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Nogg Road",
+ "- Entrance ("+@cost+"z/"+getmapusers("mag_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("mag_dun02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Nogg Road",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"yuno_fild03.gat",35,135;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"mag_dun02.gat",47,30;
+ break;
+ }
+}
+
+function SF_orcs {
+ if (!(SF_check(0x80000, $@kewd_orc, 2, @map$, 1, "gef_fild10.gat")))
+ return;
+ if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Orcs Dungeon",
+ "- Front Entrance ("+@cost+"z/"+getmapusers("orcsdun01.gat")+" "+$@ked_users$+")",
+ "- Back Entrance ("+@cost+"z/"+getmapusers("orcsdun02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Orcs Dungeon",
+ "- Front Entrance ("+@cost+"z)",
+ "- Back Entrance ("+@cost+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"in_orcs01.gat",34,165;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"in_orcs01.gat",112,99;
+ break;
+ }
+}
+
+function SF_payon {
+ if (!(SF_check(0x100000, $@kewd_payon, 5, @map$, 1, "pay_arche.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Payon Cave",
+ "- Entrance ("+@cost+"z/"+getmapusers("pay_dun00.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("pay_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("pay_dun02.gat")+" "+$@ked_users$+")",
+ "- Level 4 ("+@cost4+"z/"+getmapusers("pay_dun03.gat")+" "+$@ked_users$+")",
+ "- Level 5 ("+@cost5+"z/"+getmapusers("pay_dun04.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Payon Cave",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)",
+ "- Level 4 ("+@cost4+"z)",
+ "- Level 5 ("+@cost5+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"pay_arche.gat",41,133;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"pay_dun01.gat",19,33;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"pay_dun02.gat",19,63;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"pay_dun03.gat",155,159;
+ break;
+ case 6:
+ callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"pay_dun04.gat",34,202;
+ break;
+ }
+}
+
+function SF_pyramid {
+ if (!(SF_check(0x200000, $@kewd_pyramid, 4, @map$,1, "moc_ruins.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Pyramid",
+ "- Entrance ("+@cost+"z/"+getmapusers("moc_pryd01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("moc_pryd02.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("moc_pryd03.gat")+" "+$@ked_users$+")",
+ "- Level 4 ("+@cost4+"z/"+getmapusers("moc_pryd04.gat")+" "+$@ked_users$+")",
+ "- Basement 1 ("+@cost2+"z/"+getmapusers("moc_pryd05.gat")+" "+$@ked_users$+")",
+ "- Basement 2 ("+@cost3+"z/"+getmapusers("moc_pryd06.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Pyramid",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)",
+ "- Level 4 ("+@cost4+"z)",
+ "- Basement 1 ("+@cost2+"z)",
+ "- Basement 2 ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"moc_ruins.gat",62,162;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd02.gat",10,192;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd03.gat",100,92;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd04.gat",18,187;
+ break;
+ case 6:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd05.gat",94,96;
+ break;
+ case 7:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"moc_pryd06.gat",192,11;
+ break;
+ }
+}
+
+function SF_sphinx {
+ if (!(SF_check(0x400000, $@kewd_sphinx, 5, @map$, 1, "moc_fild19.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to the Sphinx",
+ "- Entrance ("+@cost+"z/"+getmapusers("in_sphinx1.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("in_sphinx2.gat")+" "+$@ked_users$+")",
+ "- Level 3 ("+@cost3+"z/"+getmapusers("in_sphinx3.gat")+" "+$@ked_users$+")",
+ "- Level 4 ("+@cost4+"z/"+getmapusers("in_sphinx4.gat")+" "+$@ked_users$+")",
+ "- Level 5 ("+@cost5+"z/"+getmapusers("in_sphinx5.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to the Sphinx",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)",
+ "- Level 3 ("+@cost3+"z)",
+ "- Level 4 ("+@cost4+"z)",
+ "- Level 5 ("+@cost5+"z)"
+ );
+ }
+
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"moc_fild19.gat",107,100;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"in_sphinx2.gat",149,81;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"in_sphinx3.gat",210,54;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"in_sphinx4.gat",10,222;
+ break;
+ case 6:
+ callfunc "F_keWarp",@cost5*100/@discountKP,$@kewd_discount,e_hmm,"in_sphinx5.gat",100,99;
+ break;
+ }
+}
+
+function SF_sunkenShip {
+ if (!(SF_check(0x800000, $@kewd_sunkenShip, 2, @map$, 1, "alb2trea.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Sunken Ship",
+ "- Entrance ("+@cost+"z/"+getmapusers("treasure01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("treasure02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Sunken Ship",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)"
+ );
+ }
+
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"alb2trea.gat",87,103;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"treasure02.gat",102,27;
+ break;
+ }
+}
+
+function SF_thanatosTower {
+ if (!(SF_check(0x1000000, $@kewd_thanatosTower, 9, @map$, 1, "tha_t01.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Thanatos Tower",
+ "- Entrance ("+@cost+"z/"+getmapusers("tha_t01.gat")+" "+$@ked_users$+")",
+ "- Floor 2 ("+@cost2+"z/"+getmapusers("tha_t02.gat")+" "+$@ked_users$+")",
+ "- Floor 3 ("+@cost3+"z/"+getmapusers("tha_t03.gat")+" "+$@ked_users$+")",
+ "- Floor 4 ("+@cost4+"z/"+getmapusers("tha_t04.gat")+" "+$@ked_users$+")",
+ "- Floor 5 ("+@cost5+"z/"+getmapusers("tha_t05.gat")+" "+$@ked_users$+")",
+ "- Floor 6 ("+@cost6+"z/"+getmapusers("tha_t06.gat")+" "+$@ked_users$+")",
+ "- Floor 7 ("+@cost7+"z/"+getmapusers("tha_t07.gat")+" "+$@ked_users$+")",
+ "- Floor 8 ("+@cost8+"z/"+getmapusers("tha_t08.gat")+" "+$@ked_users$+")",
+ "- Floor 9 ("+@cost9+"z/"+getmapusers("tha_t09.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Thanatos Tower",
+ "- Entrance ("+@cost+"z)",
+ "- Floor 2 ("+@cost2+"z)",
+ "- Floor 3 ("+@cost3+"z)",
+ "- Floor 4 ("+@cost4+"z)",
+ "- Floor 5 ("+@cost5+"z)",
+ "- Floor 6 ("+@cost6+"z)",
+ "- Floor 7 ("+@cost7+"z)",
+ "- Floor 8 ("+@cost8+"z)",
+ "- Floor 9 ("+@cost9+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"tha_scene01.gat",139,201;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"tha_t02.gat",149,136;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"tha_t03.gat",220,159;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t04.gat",59,144;
+ break;
+ case 6:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t05.gat",62,9;
+ break;
+ case 7:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t06.gat",120,225;
+ break;
+ case 8:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t07.gat",32,166;
+ break;
+ case 9:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t08.gat",108,44;
+ break;
+ case 10:
+ callfunc "F_keWarp",@cost4*100/@discountKP,$@kewd_discount,e_hmm,"tha_t09.gat",87,145;
+ break;
+ }
+}
+
+function SF_toyFactory {
+ if (!(SF_check(0x2000000, $@kewd_toyFactory, 2, @map$, 1, "xmas.gat")))
+ return;
+
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Toy Factory",
+ "- Entrance ("+@cost+"z/"+getmapusers("xmas_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("xmas_dun02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Toy Factory",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)"
+ );
+ }
+
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"xmas.gat",144,306;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"xmas_dun02.gat",129,133;
+ break;
+ }
+}
+
+function SF_turtleIsland {
+ if (!(SF_check(0x4000000, $@kewd_turtleIsland, 3, @map$, 1, "tur_dun01.gat")))
+ return;
+ if ($@kewd_deep == 0) {
+ if ($@kewd_turtleCave)
+ set @submenu, 3;
+ else
+ set @submenu, 2;
+ } else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Turtle Island",
+ "- Island Entrance ("+@cost+"z/"+getmapusers("tur_dun01.gat")+" "+$@ked_users$+")",
+ "- Cave Entrance ("+@cost+"z/"+getmapusers("tur_dun02.gat")+" "+$@ked_users$+")",
+ "- Cave Level 2 ("+@cost2+"z/"+getmapusers("tur_dun03.gat")+" "+$@ked_users$+")",
+ "- Cave Level 3 ("+@cost3+"z/"+getmapusers("tur_dun04.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Turtle Island",
+ "- Island Entrance ("+@cost+"z)",
+ "- Cave Entrance ("+@cost+"z)",
+ "- Cave Level 2 ("+@cost2+"z)",
+ "- Cave Level 3 ("+@cost3+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"tur_dun01.gat",153,47;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"tur_dun01.gat",155,234;
+ break;
+ case 4:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"tur_dun03.gat",132,189;
+ break;
+ case 5:
+ callfunc "F_keWarp",@cost3*100/@discountKP,$@kewd_discount,e_hmm,"tur_dun04.gat",100,192;
+ break;
+ }
+}
+
+function SF_umbala {
+ if (!(SF_check(0x8000000, $@kewd_umbala, 2, @map$, 1, "umbala.gat")))
+ return;
+ if ($@kewd_deep == 0)
+ set @submenu, 2;
+ else if ($@kewd_showOnline) {
+ set @submenu, select(
+ "- Cancel warp to Umbala Dungeon",
+ "- Entrance ("+@cost+"z/"+getmapusers("um_dun01.gat")+" "+$@ked_users$+")",
+ "- Level 2 ("+@cost2+"z/"+getmapusers("um_dun02.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel warp to Umbala Dungeon",
+ "- Entrance ("+@cost+"z)",
+ "- Level 2 ("+@cost2+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",@cost*100/@discountKP,$@kewd_discount,e_hmm,"umbala.gat",113,282;
+ break;
+ case 3:
+ callfunc "F_keWarp",@cost2*100/@discountKP,$@kewd_discount,e_hmm,"um_dun02.gat",48,31;
+ break;
+ }
+}
+
+}
+
+//Invoked when we want to add a map to the list of travelled-to dungeons
+function script F_keAddTravelDungeon {
+ set @map$, getarg(0);
+// Temporary code to update the previous variable format to the new one.
+ if(kewd_abyss) {
+ set kewd_travel,kewd_travel|0x1;
+ set kewd_abyss,0;
+ }
+ if(kewd_amatsu) {
+ set kewd_travel,kewd_travel|0x2;
+ set kewd_amatsu,0;
+ }
+ if(kewd_antHell) {
+ set kewd_travel,kewd_travel|0x4;
+ set kewd_antHell,0;
+ }
+ if(kewd_ayothaya) {
+ set kewd_travel,kewd_travel|0x8;
+ set kewd_ayothaya,0;
+ }
+ if(kewd_byalan) {
+ set kewd_travel,kewd_travel|0x10;
+ set kewd_byalan,0;
+ }
+ if(kewd_comodo) {
+ set kewd_travel,kewd_travel|0x20;
+ set kewd_comodo,0;
+ }
+ if(kewd_clockTower) {
+ set kewd_travel,kewd_travel|0x40;
+ set kewd_clockTower,0;
+ }
+ if(kewd_coalMines) {
+ set kewd_travel,kewd_travel|0x80;
+ set kewd_coalMines,0;
+ }
+ if(kewd_culvert) {
+ set kewd_travel,kewd_travel|0x100;
+ set kewd_culvert,0;
+ }
+ if(kewd_einbech) {
+ set kewd_travel,kewd_travel|0x200;
+ set kewd_einbech,0;
+ }
+ if(kewd_geffen) {
+ set kewd_travel,kewd_travel|0x800;
+ set kewd_geffen,0;
+ }
+ if(kewd_glastHeim) {
+ set kewd_travel,kewd_travel|0x1000;
+ set kewd_glastHeim,0;
+ }
+ if(kewd_gonRyun) {
+ set kewd_travel,kewd_travel|0x2000;
+ set kewd_gonRyun,0;
+ }
+ if(kewd_hiddenTemple) {
+ set kewd_travel,kewd_travel|0x4000;
+ set kewd_hiddenTemple,0;
+ }
+ if(kewd_juperos) {
+ set kewd_travel,kewd_travel|0x8000;
+ set kewd_juperos,0;
+ }
+ if(kewd_lightHalzen) {
+ set kewd_travel,kewd_travel|0x10000;
+ set kewd_lightHalzen,0;
+ }
+ if(kewd_louYang) {
+ set kewd_travel,kewd_travel|0x20000;
+ set kewd_louYang,0;
+ }
+ if(kewd_magma) {
+ set kewd_travel,kewd_travel|0x40000;
+ set kewd_magma,0;
+ }
+ if(kewd_orc) {
+ set kewd_travel,kewd_travel|0x80000;
+ set kewd_orc,0;
+ }
+ if(kewd_payon) {
+ set kewd_travel,kewd_travel|0x100000;
+ set kewd_payon,0;
+ }
+ if(kewd_pyramid) {
+ set kewd_travel,kewd_travel|0x200000;
+ set kewd_pyramid,0;
+ }
+ if(kewd_sphinx) {
+ set kewd_travel,kewd_travel|0x400000;
+ set kewd_sphinx,0;
+ }
+ if(kewd_sunkenShip) {
+ set kewd_travel,kewd_travel|0x800000;
+ set kewd_sunkenShip,0;
+ }
+ if(kewd_thanatosTower) {
+ set kewd_travel,kewd_travel|0x1000000;
+ set kewd_thanatosTower,0;
+ }
+ if(kewd_toyFactory) {
+ set kewd_travel,kewd_travel|0x2000000;
+ set kewd_toyFactory,0;
+ }
+ if(kewd_turtleIsland) {
+ set kewd_travel,kewd_travel|0x4000000;
+ set kewd_turtleIsland,0;
+ }
+ if(kewd_umbala) {
+ set kewd_travel,kewd_travel|0x8000000;
+ set kewd_umbala,0;
+ }
+
+ if(#kewd_abyss) {
+ set #kewd_travel,#kewd_travel|0x1;
+ set #kewd_abyss,0;
+ }
+ if(#kewd_amatsu) {
+ set #kewd_travel,#kewd_travel|0x2;
+ set #kewd_amatsu,0;
+ }
+ if(#kewd_antHell) {
+ set #kewd_travel,#kewd_travel|0x4;
+ set #kewd_antHell,0;
+ }
+ if(#kewd_ayothaya) {
+ set #kewd_travel,#kewd_travel|0x8;
+ set #kewd_ayothaya,0;
+ }
+ if(#kewd_byalan) {
+ set #kewd_travel,#kewd_travel|0x10;
+ set #kewd_byalan,0;
+ }
+ if(#kewd_comodo) {
+ set #kewd_travel,#kewd_travel|0x20;
+ set #kewd_comodo,0;
+ }
+ if(#kewd_clockTower) {
+ set #kewd_travel,#kewd_travel|0x40;
+ set #kewd_clockTower,0;
+ }
+ if(#kewd_coalMines) {
+ set #kewd_travel,#kewd_travel|0x80;
+ set #kewd_coalMines,0;
+ }
+ if(#kewd_culvert) {
+ set #kewd_travel,#kewd_travel|0x100;
+ set #kewd_culvert,0;
+ }
+ if(#kewd_einbech) {
+ set #kewd_travel,#kewd_travel|0x200;
+ set #kewd_einbech,0;
+ }
+ if(#kewd_geffen) {
+ set #kewd_travel,#kewd_travel|0x800;
+ set #kewd_geffen,0;
+ }
+ if(#kewd_glastHeim) {
+ set #kewd_travel,#kewd_travel|0x1000;
+ set #kewd_glastHeim,0;
+ }
+ if(#kewd_gonRyun) {
+ set #kewd_travel,#kewd_travel|0x2000;
+ set #kewd_gonRyun,0;
+ }
+ if(#kewd_hiddenTemple) {
+ set #kewd_travel,#kewd_travel|0x4000;
+ set #kewd_hiddenTemple,0;
+ }
+ if(#kewd_juperos) {
+ set #kewd_travel,#kewd_travel|0x8000;
+ set #kewd_juperos,0;
+ }
+ if(#kewd_lightHalzen) {
+ set #kewd_travel,#kewd_travel|0x10000;
+ set #kewd_lightHalzen,0;
+ }
+ if(#kewd_louYang) {
+ set #kewd_travel,#kewd_travel|0x20000;
+ set #kewd_louYang,0;
+ }
+ if(#kewd_magma) {
+ set #kewd_travel,#kewd_travel|0x40000;
+ set #kewd_magma,0;
+ }
+ if(#kewd_orc) {
+ set #kewd_travel,#kewd_travel|0x80000;
+ set #kewd_orc,0;
+ }
+ if(#kewd_payon) {
+ set #kewd_travel,#kewd_travel|0x100000;
+ set #kewd_payon,0;
+ }
+ if(#kewd_pyramid) {
+ set #kewd_travel,#kewd_travel|0x200000;
+ set #kewd_pyramid,0;
+ }
+ if(#kewd_sphinx) {
+ set #kewd_travel,#kewd_travel|0x400000;
+ set #kewd_sphinx,0;
+ }
+ if(#kewd_sunkenShip) {
+ set #kewd_travel,#kewd_travel|0x800000;
+ set #kewd_sunkenShip,0;
+ }
+ if(#kewd_thanatosTower) {
+ set #kewd_travel,#kewd_travel|0x1000000;
+ set #kewd_thanatosTower,0;
+ }
+ if(#kewd_toyFactory) {
+ set #kewd_travel,#kewd_travel|0x2000000;
+ set #kewd_toyFactory,0;
+ }
+ if(#kewd_turtleIsland) {
+ set #kewd_travel,#kewd_travel|0x4000000;
+ set #kewd_turtleIsland,0;
+ }
+ if(#kewd_umbala) {
+ set #kewd_travel,#kewd_travel|0x8000000;
+ set #kewd_umbala,0;
+ }
+
+// End transition code.
+ if ($@kewd_travel > 1) {
+ if (@map$ == "hu_fild05.gat" || kewd_travel&0x1)
+ set #kewd_travel,#kewd_travel|0x1;
+ if (@map$ == "ama_in02.gat" || kewd_travel&0x2)
+ set #kewd_travel,#kewd_travel|0x2;
+ if (@map$ == "moc_fild04.gat" || @map$ == "moc_fild15.gat" || kewd_travel&0x4)
+ set #kewd_travel,#kewd_travel|0x4;
+ if (@map$ == "ayo_fild02.gat" || kewd_travel&0x8)
+ set #kewd_travel,#kewd_travel|0x8;
+ if (@map$ == "izlu2dun.gat" || kewd_travel&0x10)
+ set #kewd_travel,#kewd_travel|0x10;
+ if (@map$ == "comodo.gat" || @map$ == "cmd_fild01.gat" || kewd_travel&0x20)
+ set #kewd_travel,#kewd_travel|0x20;
+ if (@map$ == "aldebaran.gat" || kewd_travel&0x40)
+ set #kewd_travel,#kewd_travel|0x40;
+ if (@map$ == "mjolnir_02.gat" || kewd_travel&0x80)
+ set #kewd_travel,#kewd_travel|0x80;
+ if (@map$ == "prt_fild05.gat" || kewd_travel&0x100)
+ set #kewd_travel,#kewd_travel|0x100;
+ if (@map$ == "einbech.gat" || kewd_travel&0x200)
+ set #kewd_travel,#kewd_travel|0x200;
+ if (@map$ == "gef_tower.gat" || kewd_travel&0x800)
+ set #kewd_travel,#kewd_travel|0x800;
+ if (@map$ == "glast_01.gat" || kewd_travel&0x1000)
+ set #kewd_travel,#kewd_travel|0x1000;
+ if (@map$ == "gonryun.gat" || kewd_travel&0x2000)
+ set #kewd_travel,#kewd_travel|0x2000;
+ if (@map$ == "prt_fild01.gat" || kewd_travel&0x4000)
+ set #kewd_travel,#kewd_travel|0x4000;
+ if (@map$ == "jupe_cave.gat" || kewd_travel&0x8000)
+ set #kewd_travel,#kewd_travel|0x8000;
+ if (@map$ == "lighthalzen.gat" || kewd_travel&0x10000)
+ set #kewd_travel,#kewd_travel|0x10000;
+ if (@map$ == "louyang.gat" || kewd_travel&0x20000)
+ set #kewd_travel,#kewd_travel|0x20000;
+ if (@map$ == "yuno_fild03.gat" || kewd_travel&0x40000)
+ set #kewd_travel,#kewd_travel|0x40000;
+ if (@map$ == "in_orcs01.gat" || kewd_travel&0x80000)
+ set #kewd_travel,#kewd_travel|0x80000;
+ if (@map$ == "pay_arche.gat" || kewd_travel&0x100000)
+ set #kewd_travel,#kewd_travel|0x100000;
+ if (@map$ == "moc_ruins.gat" || kewd_travel&0x200000)
+ set #kewd_travel,#kewd_travel|0x200000;
+ if (@map$ == "moc_fild19.gat" || kewd_travel&0x400000)
+ set #kewd_travel,#kewd_travel|0x400000;
+ if (@map$ == "alb2trea.gat" || kewd_travel&0x800000)
+ set #kewd_travel,#kewd_travel|0x800000;
+ if (@map$ == "tha_t01.gat" || kewd_travel&0x1000000)
+ set #kewd_travel,#kewd_travel|0x1000000;
+ if (@map$ == "xmas.gat" || kewd_travel&0x2000000)
+ set #kewd_travel,#kewd_travel|0x2000000;
+ if (@map$ == "tur_dun01.gat" || kewd_travel&0x4000000)
+ set #kewd_travel,#kewd_travel|0x4000000;
+ if (@map$ == "umbala.gat" || kewd_travel&0x8000000)
+ set #kewd_travel,#kewd_travel|0x8000000;
+ } else {
+ if (@map$ == "hu_fild05.gat")
+ set kewd_travel,kewd_travel|0x1;
+ if (@map$ == "ama_in02.gat")
+ set kewd_travel,kewd_travel|0x2;
+ if (@map$ == "moc_fild04.gat" || @map$ == "moc_fild15.gat")
+ set kewd_travel,kewd_travel|0x4;
+ if (@map$ == "ayo_fild02.gat")
+ set kewd_travel,kewd_travel|0x8;
+ if (@map$ == "izlu2dun.gat")
+ set kewd_travel,kewd_travel|0x10;
+ if (@map$ == "comodo.gat" || @map$ == "cmd_fild01.gat")
+ set kewd_travel,kewd_travel|0x20;
+ if (@map$ == "aldebaran.gat")
+ set kewd_travel,kewd_travel|0x40;
+ if (@map$ == "mjolnir_02.gat")
+ set kewd_travel,kewd_travel|0x80;
+ if (@map$ == "prt_fild05.gat")
+ set kewd_travel,kewd_travel|0x100;
+ if (@map$ == "einbech.gat")
+ set kewd_travel,kewd_travel|0x200;
+ if (@map$ == "gef_tower.gat")
+ set kewd_travel,kewd_travel|0x800;
+ if (@map$ == "glast_01.gat")
+ set kewd_travel,kewd_travel|0x1000;
+ if (@map$ == "gonryun.gat")
+ set kewd_travel,kewd_travel|0x2000;
+ if (@map$ == "prt_fild01.gat")
+ set kewd_travel,kewd_travel|0x4000;
+ if (@map$ == "jupe_cave.gat")
+ set kewd_travel,kewd_travel|0x8000;
+ if (@map$ == "lighthalzen.gat")
+ set kewd_travel,kewd_travel|0x10000;
+ if (@map$ == "louyang.gat")
+ set kewd_travel,kewd_travel|0x20000;
+ if (@map$ == "yuno_fild03.gat")
+ set kewd_travel,kewd_travel|0x40000;
+ if (@map$ == "in_orcs01.gat")
+ set kewd_travel,kewd_travel|0x80000;
+ if (@map$ == "pay_arche.gat")
+ set kewd_travel,kewd_travel|0x100000;
+ if (@map$ == "moc_ruins.gat")
+ set kewd_travel,kewd_travel|0x200000;
+ if (@map$ == "moc_fild19.gat")
+ set kewd_travel,kewd_travel|0x400000;
+ if (@map$ == "alb2trea.gat")
+ set kewd_travel,kewd_travel|0x800000;
+ if (@map$ == "tha_t01.gat")
+ set kewd_travel,kewd_travel|0x1000000;
+ if (@map$ == "xmas.gat")
+ set kewd_travel,kewd_travel|0x2000000;
+ if (@map$ == "tur_dun01.gat")
+ set kewd_travel,kewd_travel|0x4000000;
+ if (@map$ == "umbala.gat")
+ set kewd_travel,kewd_travel|0x8000000;
+ }
+ return;
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt
index 73f278b5d..b12d0fcb1 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt
@@ -1,156 +1,156 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Pvp Warping Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 1.7
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers warping to the PvP arenas.
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//============================================================
-
-- script keInit_warpPvp -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadWarpPvp";
- end;
-}
-
-function script F_keWarpPvp {
-
- function SF_pvpMenu;
-
- set @cost,callfunc("F_keCost",1,100);
- if ($@kewp_advanced == 0) {
- SF_pvpMenu 1,$@kewp_cost,100,0,0;
- return;
- }
-
- do {
- if ($@kewp_showOnline) {
- set @kmenu, select(
- "- Cancel",
- "- All Levels Rooms ("+($@kewp_cost*@cost)+"z/"+(getmapusers("pvp_n_8-1.gat")+getmapusers("pvp_n_8-2.gat")
- +getmapusers("pvp_n_8-3.gat")+getmapusers("pvp_n_8-4.gat")+getmapusers("pvp_n_8-5.gat"))+" "+$@ked_users$+")",
- "- Levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" Rooms ("+($@kewp_cost1*@cost)+"z/"
- +(getmapusers("pvp_n_1-1.gat")+getmapusers("pvp_n_1-2.gat")+getmapusers("pvp_n_1-3.gat")
- +getmapusers("pvp_n_1-4.gat")+getmapusers("pvp_n_1-5.gat"))+" "+$@ked_users$+")",
- "- Levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" Rooms ("+($@kewp_cost2*@cost)+"z/"
- +(getmapusers("pvp_n_2-1.gat")+getmapusers("pvp_n_2-2.gat")+getmapusers("pvp_n_2-3.gat")
- +getmapusers("pvp_n_2-4.gat")+getmapusers("pvp_n_2-5.gat"))+" "+$@ked_users$+")",
- "- Levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" Rooms ("+($@kewp_cost3*@cost)+"z/"
- +(getmapusers("pvp_n_3-1.gat")+getmapusers("pvp_n_3-2.gat")+getmapusers("pvp_n_3-3.gat")
- +getmapusers("pvp_n_3-4.gat")+getmapusers("pvp_n_3-5.gat"))+" "+$@ked_users$+")",
- "- Levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" Rooms ("+($@kewp_cost4*@cost)+"z/"
- +(getmapusers("pvp_n_4-1.gat")+getmapusers("pvp_n_4-2.gat")+getmapusers("pvp_n_4-3.gat")
- +getmapusers("pvp_n_4-4.gat")+getmapusers("pvp_n_4-5.gat"))+" "+$@ked_users$+")",
- "- Levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" Rooms ("+($@kewp_cost5*@cost)+"z/"
- +(getmapusers("pvp_n_5-1.gat")+getmapusers("pvp_n_5-2.gat")+getmapusers("pvp_n_5-3.gat")
- +getmapusers("pvp_n_5-4.gat")+getmapusers("pvp_n_5-5.gat"))+" "+$@ked_users$+")",
- "- Levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" Rooms ("+($@kewp_cost6*@cost)+"z/"
- +(getmapusers("pvp_n_6-1.gat")+getmapusers("pvp_n_6-2.gat")+getmapusers("pvp_n_6-3.gat")
- +getmapusers("pvp_n_6-4.gat")+getmapusers("pvp_n_6-5.gat"))+" "+$@ked_users$+")",
- "- Levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" Rooms ("+($@kewp_cost7*@cost)+"z/"
- +(getmapusers("pvp_n_7-1.gat")+getmapusers("pvp_n_7-2.gat")+getmapusers("pvp_n_7-3.gat")
- +getmapusers("pvp_n_7-4.gat")+getmapusers("pvp_n_7-5.gat"))+" "+$@ked_users$+")"
- );
- } else {
- set @kmenu, select(
- "- Cancel",
- "- No Level Restriction Rooms ("+($@kewp_cost*@cost)+"z)",
- "- Levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" Rooms ("+($@kewp_cost1*@cost)+"z)",
- "- Levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" Rooms ("+($@kewp_cost2*@cost)+"z)",
- "- Levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" Rooms ("+($@kewp_cost3*@cost)+"z)",
- "- Levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" Rooms ("+($@kewp_cost4*@cost)+"z)",
- "- Levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" Rooms ("+($@kewp_cost5*@cost)+"z)",
- "- Levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" Rooms ("+($@kewp_cost6*@cost)+"z)",
- "- Levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" Rooms ("+($@kewp_cost7*@cost)+"z)"
- );
- }
- switch(@kmenu) {
- case 2: //No restrictions
- SF_pvpMenu 8,$@kewp_cost,100,0,0;
- break;
- case 3:
- SF_pvpMenu 1,$@kewp_cost1,100,$@kewp_baseLv1-$@kewp_range,$@kewp_baseLv1+$@kewp_range;
- break;
- case 4:
- SF_pvpMenu 2,$@kewp_cost2,100,$@kewp_baseLv2-$@kewp_range,$@kewp_baseLv2+$@kewp_range;
- break;
- case 5:
- SF_pvpMenu 3,$@kewp_cost3,100,$@kewp_baseLv3-$@kewp_range,$@kewp_baseLv3+$@kewp_range;
- break;
- case 6:
- SF_pvpMenu 4,$@kewp_cost4,100,$@kewp_baseLv4-$@kewp_range,$@kewp_baseLv4+$@kewp_range;
- break;
- case 7:
- SF_pvpMenu 5,$@kewp_cost5,100,$@kewp_baseLv5-$@kewp_range,$@kewp_baseLv5+$@kewp_range;
- break;
- case 8:
- SF_pvpMenu 6,$@kewp_cost6,100,$@kewp_baseLv6-$@kewp_range,$@kewp_baseLv6+$@kewp_range;
- break;
- case 9:
- SF_pvpMenu 7,$@kewp_cost7,100,$@kewp_baseLv7-$@kewp_range,$@kewp_baseLv7+$@kewp_range;
- break;
- }
- } while (@kmenu > 1);
- return;
-
-//SubFunction: SF_pvpMenu (int map-group, int cost, int min level, int max level)
-//Displays the list of the five available Pvp rooms to warp to.
-//map-group is the first index of the pvp map names (in pvp_n_2-3.gat it would be 2)
-function SF_pvpMenu {
- if (getarg(4)) {
- if (BaseLevel < getarg(3)) {
- callfunc "F_keIntro", e_sry, "Sorry, you need at least level "+getarg(2)+" to enter these arenas.";
- return;
- }
- if (BaseLevel > getarg(4)) {
- callfunc "F_keIntro", e_bzz, "Sorry, people above level "+getarg(3)+" are not allowed within these arenas.";
- return;
- }
- set @msg$,"levels "+getarg(3)+"-"+getarg(3);
- } else
- set @msg$,"all levels";
- if ($@kewp_showOnline) {
- set @submenu, select(
- "- Cancel Warp (Rooms for "+@msg$+"/"+(getarg(1)*@cost)+"z)",
- "- Room Sandwich ("+getmapusers("pvp_n_"+getarg(0)+"-1.gat")+" "+$@ked_users$+")",
- "- Room Rock On ("+getmapusers("pvp_n_"+getarg(0)+"-2.gat")+" "+$@ked_users$+")",
- "- Four Room ("+getmapusers("pvp_n_"+getarg(0)+"-3.gat")+" "+$@ked_users$+")",
- "- Room Undercross ("+getmapusers("pvp_n_"+getarg(0)+"-4.gat")+" "+$@ked_users$+")",
- "- Room Compass ("+getmapusers("pvp_n_"+getarg(0)+"-5.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel Warp (Rooms for "+@msg$+"/"+(getarg(1)*@cost)+"z)",
- "- Room Sandwich",
- "- Room Rock On",
- "- Four Room",
- "- Room Undercross",
- "- Room Compass"
- );
- }
- switch (@submenu) {
- case 2:
- callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-1.gat",-1,-1;
- break;
- case 3:
- callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-2.gat",-1,-1;
- break;
- case 4:
- callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-3.gat",-1,-1;
- break;
- case 5:
- callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-4.gat",-1,-1;
- break;
- case 6:
- callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-5.gat",-1,-1;
- break;
- }
-}
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Pvp Warping Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 1.7
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers warping to the PvP arenas.
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//============================================================
+
+- script keInit_warpPvp -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadWarpPvp";
+ end;
+}
+
+function script F_keWarpPvp {
+
+ function SF_pvpMenu;
+
+ set @cost,callfunc("F_keCost",1,100);
+ if ($@kewp_advanced == 0) {
+ SF_pvpMenu 1,$@kewp_cost,100,0,0;
+ return;
+ }
+
+ do {
+ if ($@kewp_showOnline) {
+ set @kmenu, select(
+ "- Cancel",
+ "- All Levels Rooms ("+($@kewp_cost*@cost)+"z/"+(getmapusers("pvp_n_8-1.gat")+getmapusers("pvp_n_8-2.gat")
+ +getmapusers("pvp_n_8-3.gat")+getmapusers("pvp_n_8-4.gat")+getmapusers("pvp_n_8-5.gat"))+" "+$@ked_users$+")",
+ "- Levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" Rooms ("+($@kewp_cost1*@cost)+"z/"
+ +(getmapusers("pvp_n_1-1.gat")+getmapusers("pvp_n_1-2.gat")+getmapusers("pvp_n_1-3.gat")
+ +getmapusers("pvp_n_1-4.gat")+getmapusers("pvp_n_1-5.gat"))+" "+$@ked_users$+")",
+ "- Levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" Rooms ("+($@kewp_cost2*@cost)+"z/"
+ +(getmapusers("pvp_n_2-1.gat")+getmapusers("pvp_n_2-2.gat")+getmapusers("pvp_n_2-3.gat")
+ +getmapusers("pvp_n_2-4.gat")+getmapusers("pvp_n_2-5.gat"))+" "+$@ked_users$+")",
+ "- Levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" Rooms ("+($@kewp_cost3*@cost)+"z/"
+ +(getmapusers("pvp_n_3-1.gat")+getmapusers("pvp_n_3-2.gat")+getmapusers("pvp_n_3-3.gat")
+ +getmapusers("pvp_n_3-4.gat")+getmapusers("pvp_n_3-5.gat"))+" "+$@ked_users$+")",
+ "- Levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" Rooms ("+($@kewp_cost4*@cost)+"z/"
+ +(getmapusers("pvp_n_4-1.gat")+getmapusers("pvp_n_4-2.gat")+getmapusers("pvp_n_4-3.gat")
+ +getmapusers("pvp_n_4-4.gat")+getmapusers("pvp_n_4-5.gat"))+" "+$@ked_users$+")",
+ "- Levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" Rooms ("+($@kewp_cost5*@cost)+"z/"
+ +(getmapusers("pvp_n_5-1.gat")+getmapusers("pvp_n_5-2.gat")+getmapusers("pvp_n_5-3.gat")
+ +getmapusers("pvp_n_5-4.gat")+getmapusers("pvp_n_5-5.gat"))+" "+$@ked_users$+")",
+ "- Levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" Rooms ("+($@kewp_cost6*@cost)+"z/"
+ +(getmapusers("pvp_n_6-1.gat")+getmapusers("pvp_n_6-2.gat")+getmapusers("pvp_n_6-3.gat")
+ +getmapusers("pvp_n_6-4.gat")+getmapusers("pvp_n_6-5.gat"))+" "+$@ked_users$+")",
+ "- Levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" Rooms ("+($@kewp_cost7*@cost)+"z/"
+ +(getmapusers("pvp_n_7-1.gat")+getmapusers("pvp_n_7-2.gat")+getmapusers("pvp_n_7-3.gat")
+ +getmapusers("pvp_n_7-4.gat")+getmapusers("pvp_n_7-5.gat"))+" "+$@ked_users$+")"
+ );
+ } else {
+ set @kmenu, select(
+ "- Cancel",
+ "- No Level Restriction Rooms ("+($@kewp_cost*@cost)+"z)",
+ "- Levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" Rooms ("+($@kewp_cost1*@cost)+"z)",
+ "- Levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" Rooms ("+($@kewp_cost2*@cost)+"z)",
+ "- Levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" Rooms ("+($@kewp_cost3*@cost)+"z)",
+ "- Levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" Rooms ("+($@kewp_cost4*@cost)+"z)",
+ "- Levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" Rooms ("+($@kewp_cost5*@cost)+"z)",
+ "- Levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" Rooms ("+($@kewp_cost6*@cost)+"z)",
+ "- Levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" Rooms ("+($@kewp_cost7*@cost)+"z)"
+ );
+ }
+ switch(@kmenu) {
+ case 2: //No restrictions
+ SF_pvpMenu 8,$@kewp_cost,100,0,0;
+ break;
+ case 3:
+ SF_pvpMenu 1,$@kewp_cost1,100,$@kewp_baseLv1-$@kewp_range,$@kewp_baseLv1+$@kewp_range;
+ break;
+ case 4:
+ SF_pvpMenu 2,$@kewp_cost2,100,$@kewp_baseLv2-$@kewp_range,$@kewp_baseLv2+$@kewp_range;
+ break;
+ case 5:
+ SF_pvpMenu 3,$@kewp_cost3,100,$@kewp_baseLv3-$@kewp_range,$@kewp_baseLv3+$@kewp_range;
+ break;
+ case 6:
+ SF_pvpMenu 4,$@kewp_cost4,100,$@kewp_baseLv4-$@kewp_range,$@kewp_baseLv4+$@kewp_range;
+ break;
+ case 7:
+ SF_pvpMenu 5,$@kewp_cost5,100,$@kewp_baseLv5-$@kewp_range,$@kewp_baseLv5+$@kewp_range;
+ break;
+ case 8:
+ SF_pvpMenu 6,$@kewp_cost6,100,$@kewp_baseLv6-$@kewp_range,$@kewp_baseLv6+$@kewp_range;
+ break;
+ case 9:
+ SF_pvpMenu 7,$@kewp_cost7,100,$@kewp_baseLv7-$@kewp_range,$@kewp_baseLv7+$@kewp_range;
+ break;
+ }
+ } while (@kmenu > 1);
+ return;
+
+//SubFunction: SF_pvpMenu (int map-group, int cost, int min level, int max level)
+//Displays the list of the five available Pvp rooms to warp to.
+//map-group is the first index of the pvp map names (in pvp_n_2-3.gat it would be 2)
+function SF_pvpMenu {
+ if (getarg(4)) {
+ if (BaseLevel < getarg(3)) {
+ callfunc "F_keIntro", e_sry, "Sorry, you need at least level "+getarg(2)+" to enter these arenas.";
+ return;
+ }
+ if (BaseLevel > getarg(4)) {
+ callfunc "F_keIntro", e_bzz, "Sorry, people above level "+getarg(3)+" are not allowed within these arenas.";
+ return;
+ }
+ set @msg$,"levels "+getarg(3)+"-"+getarg(3);
+ } else
+ set @msg$,"all levels";
+ if ($@kewp_showOnline) {
+ set @submenu, select(
+ "- Cancel Warp (Rooms for "+@msg$+"/"+(getarg(1)*@cost)+"z)",
+ "- Room Sandwich ("+getmapusers("pvp_n_"+getarg(0)+"-1.gat")+" "+$@ked_users$+")",
+ "- Room Rock On ("+getmapusers("pvp_n_"+getarg(0)+"-2.gat")+" "+$@ked_users$+")",
+ "- Four Room ("+getmapusers("pvp_n_"+getarg(0)+"-3.gat")+" "+$@ked_users$+")",
+ "- Room Undercross ("+getmapusers("pvp_n_"+getarg(0)+"-4.gat")+" "+$@ked_users$+")",
+ "- Room Compass ("+getmapusers("pvp_n_"+getarg(0)+"-5.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel Warp (Rooms for "+@msg$+"/"+(getarg(1)*@cost)+"z)",
+ "- Room Sandwich",
+ "- Room Rock On",
+ "- Four Room",
+ "- Room Undercross",
+ "- Room Compass"
+ );
+ }
+ switch (@submenu) {
+ case 2:
+ callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-1.gat",-1,-1;
+ break;
+ case 3:
+ callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-2.gat",-1,-1;
+ break;
+ case 4:
+ callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-3.gat",-1,-1;
+ break;
+ case 5:
+ callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-4.gat",-1,-1;
+ break;
+ case 6:
+ callfunc "F_keWarp",getarg(1),getarg(2),e_com,"pvp_n_"+getarg(0)+"-5.gat",-1,-1;
+ break;
+ }
+}
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt
index 2cef196d8..d1596401a 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt
@@ -1,500 +1,500 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Warping Town Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 2.1
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+, RO Episode 8+ (Hugel)
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers warp services to towns.
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//= Flag values used for towns:
-//= 0x00000001 Alberta
-//= 0x00000002 AlDeBaran
-//= 0x00000004 Amatsu
-//= 0x00000008 Ayothaya
-//= 0x00000010 Comodo
-//= 0x00000020 Einbech
-//= 0x00000040 Einbroch
-//= 0x00000080 Geffen
-//= 0x00000100 Gon Ryun
-//= 0x00000200 Hugel
-//= 0x00000400 Izlude
-//= 0x00000800 Jawaii
-//= 0x00001000 LightHalzen
-//= 0x00002000 Lou Yang
-//= 0x00004000 Lutie
-//= 0x00008000 Morocc
-//= 0x00010000 Niflheim
-//= 0x00020000 Payon
-//= 0x00040000 Prontera
-//= 0x00080000 Umbala
-//= 0x00100000 Yuno
-//============================================================
-
-- script keInit_warpTown -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadWarpTown";
- end;
-}
-
-function script F_keWarpTown {
-
- function SF_check;
- function SF_warp;
-
- set @cost,callfunc("F_keCost",$@kewt_cost,$@kewt_discount);
- set @niflcost,callfunc("F_keCost",$@kewt_niflCost,$@kewd_discount);
- if (@cost > Zeny && $@kewt_free)
- set @cost, Zeny;
- do {
- if ($@kewt_showOnline) {
- set @kmenu, select(
- "- Cancel",
- "- Alberta ("+@cost+"z/"+(getmapusers("alberta.gat")+getmapusers("alberta_in.gat"))+" "+$@ked_users$+")",
- "- Al De Baran ("+@cost+"z/"+(getmapusers("aldebaran.gat")+getmapusers("aldeba_in.gat"))+" "+$@ked_users$+")",
- "- Amatsu ("+@cost+"z/"+(getmapusers("amatsu.gat")+getmapusers("ama_in01.gat")+getmapusers("ama_in02.gat"))
- +" "+$@ked_users$+")",
- "- Ayothaya ("+@cost+"z/"+(getmapusers("ayothaya.gat")+getmapusers("ayo_in01.gat")+getmapusers("ayo_in02.gat"))
- +" "+$@ked_users$+")",
- "- Comodo ("+@cost+"z/"+(getmapusers("comodo.gat")+getmapusers("cmd_in01.gat")+getmapusers("cmd_in02.gat"))
- +" "+$@ked_users$+")",
- "- Einbech ("+@cost+"z/"+(getmapusers("einbech.gat"))+" "+$@ked_users$+")",
- "- Einbroch ("+@cost+"z/"+(getmapusers("einbroch.gat")+getmapusers("ein_in01.gat"))+" "+$@ked_users$+")",
- "- Geffen ("+@cost+"z/"+(getmapusers("geffen.gat")+getmapusers("geffen_in.gat")+getmapusers("gef_tower.gat"))
- +" "+$@ked_users$+")",
- "- Gon Ryun ("+@cost+"z/"+(getmapusers("gonryun.gat")+getmapusers("gon_in.gat"))+" "+$@ked_users$+")",
- "- Hugel ("+@cost+"z/"+(getmapusers("hugel.gat")+getmapusers("hu_in01.gat"))+" "+$@ked_users$+")",
- "- Izlude ("+@cost+"z/"+(getmapusers("izlude.gat")+getmapusers("izlude_in.gat"))+" "+$@ked_users$+")",
- "- Jawaii ("+@cost+"z/"+(getmapusers("jawaii.gat")+getmapusers("jawaii_in.gat"))+" "+$@ked_users$+")",
- "- LightHalzen ("+@cost+"z/"+(getmapusers("lighthalzen.gat")+getmapusers("lhz_in01.gat")
- +getmapusers("lhz_in02.gat")+getmapusers("lhz_in03.gat"))+" "+$@ked_users$+")",
- "- Lou Yang ("+@cost+"z/"+(getmapusers("louyang.gat")+getmapusers("lou_in01.gat")+getmapusers("lou_in02.gat"))
- +" "+$@ked_users$+")",
- "- Lutie ("+@cost+"z/"+(getmapusers("xmas.gat")+getmapusers("xmas_in.gat"))+" "+$@ked_users$+")",
- "- Morocc ("+@cost+"z/"+(getmapusers("morocc.gat")+getmapusers("morocc_in.gat")+getmapusers("moc_castle.gat"))
- +" "+$@ked_users$+")",
- "- Niflheim ("+@niflcost+"z/"+(getmapusers("niflheim.gat")+getmapusers("nif_in.gat"))+" "+$@ked_users$+")",
- "- Payon ("+@cost+"z/"+(getmapusers("payon.gat")+getmapusers("payon_in01.gat")+getmapusers("payon_in02.gat"))
- +" "+$@ked_users$+")",
- "- Prontera ("+@cost+"z/"+(getmapusers("prontera.gat")+getmapusers("prt_castle.gat")
- +getmapusers("prt_church.gat")+getmapusers("prt_in.gat"))+" "+$@ked_users$+")",
- "- Umbala ("+@cost+"z/"+(getmapusers("umbala.gat")+getmapusers("um_in.gat"))+" "+$@ked_users$+")",
- "- Yuno ("+@cost+"z/"+(getmapusers("yuno.gat")+getmapusers("yuno_in01.gat")+getmapusers("yuno_in02.gat")
- +getmapusers("yuno_in03.gat")+getmapusers("yuno_in04.gat")+getmapusers("yuno_in05.gat"))+" "+$@ked_users$+")"
- );
- } else {
- set @kmenu, select(
- "- Cancel",
- "- Alberta ("+@cost+"z)",
- "- Al De Baran ("+@cost+"z)",
- "- Amatsu ("+@cost+"z)",
- "- Ayothaya ("+@cost+"z)",
- "- Comodo ("+@cost+"z)",
- "- Einbech ("+@cost+"z)",
- "- Einbroch ("+@cost+"z)",
- "- Geffen ("+@cost+"z)",
- "- Gon Ryun ("+@cost+"z)",
- "- Hugel ("+@cost+"z)",
- "- Izlude ("+@cost+"z)",
- "- Jawaii ("+@cost+"z)",
- "- LightHalzen ("+@cost+"z)",
- "- Lou Yang ("+@cost+"z)",
- "- Lutie ("+@cost+"z)",
- "- Morocc ("+@cost+"z)",
- "- Niflheim ("+@niflcost+"z)",
- "- Payon ("+@cost+"z)",
- "- Prontera ("+@cost+"z)",
- "- Umbala ("+@cost+"z)",
- "- Yuno ("+@cost+"z)"
- );
- }
- switch (@kmenu) {
- case 2: //Alberta
- if (SF_check(0x1))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"alberta.gat",117,56;
- break;
- case 3: //AlDeBaran
- if (SF_check(0x2))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"aldebaran.gat",139,124;
- break;
- case 4: //Amatsu
- if (SF_check(0x4))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"amatsu.gat",197,88;
- break;
- case 5: //Ayathoya
- if (SF_check(0x8))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"ayothaya.gat",202,174;
- break;
- case 6: //Comodo
- if (SF_check(0x10))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"comodo.gat",189,150;
- break;
- case 7: //Einbech
- if (SF_check(0x20))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"einbech.gat",137,220;
- break;
- case 8: //Einbroch
- if (SF_check(0x40))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"einbroch.gat",64,199;
- break;
- case 9: //Geffen
- if (SF_check(0x80))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"geffen.gat",120,66;
- break;
- case 10: //GonRyun
- if (SF_check(0x100))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"gonryun.gat",160,180;
- break;
- case 11: //Hugel
- if (SF_check(0x200))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"hugel.gat",96,105;
- break;
- case 12: //Izlude
- if (SF_check(0x400))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"izlude.gat",127,97;
- break;
- case 13: //Jawaii
- if (SF_check(0x800))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"jawaii.gat",214,223;
- break;
- case 14: //LightHalzen
- if (SF_check(0x1000))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"lighthalzen.gat",158,92;
- break;
- case 15: //LouYang
- if (SF_check(0x2000))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"louyang.gat",218,118;
- break;
- case 16: //Lutie
- if (SF_check(0x4000))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"xmas.gat",148,133;
- break;
- case 17: //Morocc
- if (SF_check(0x8000))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"morocc.gat",162,91;
- break;
- case 18: //Niflheim
- if (SF_check(0x10000)) {
- if (nif_q_done != 1) {
- mes "...?";
- callfunc "F_keIntro", e_no, "For some reason I can't warp you there!";
- } else
- callfunc "F_keWarp",$@kewt_niflCost,$@kewd_discount,e_yawn,"niflheim.gat",194,185;
- }
- break;
- case 19: //Payon
- if (SF_check(0x20000))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"payon.gat",159,181;
- break;
- case 20: //Prontera
- if (SF_check(0x40000))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"prontera.gat",156,175;
- break;
- case 21: //Umbala
- if (SF_check(0x80000))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"umbala.gat",88,153;
- break;
- case 22: //Yuno
- if (SF_check(0x100000))
- SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"yuno.gat",158,77;
- break;
- }
- } while (@kmenu > 1);
- return;
-
-//SubFunction SF_check(char-flag, account_flag)
-//Checks if the character can warp to that town taking into consideration
-//traveller's mode.
-function SF_check {
- if ($@kewt_travel && !((kewt_travel|#kewt_travel)&getarg(0))) {
- callfunc "F_keIntro", e_sry, "Sorry, but we can only warp you to towns you have saved in at least once.";
- return 0;
- }
- return 1;
-}
-
-//SubFunction SF_warp (int cost, int discount, int emotion, String map, int x, int y)
-//Modded from F_keWarp to allow free warping to towns when not enough zeny.
-function SF_warp {
- set @cost, getarg(0);
- if (@cost > Zeny && $@kewt_free)
- set @cost, Zeny;
- if (!(callfunc("F_keCharge",@cost,getarg(1),1))) {
- callfunc "F_keIntro", e_an, "You don't have enough Zeny...";
- return;
- }
- emotion getarg(2);
- warp getarg(3),getarg(4),getarg(5);
- end;
-}
-
-}
-
-//Invoked when we want to add a map to the list of travelled-to towns
-function script F_keAddTravelTown {
- set @map$, getarg(0);
-// Temporary code to update variables from old format to new.
- if(ketw_alberta) {
- set kewt_travel,kewt_travel|0x1;
- set ketw_alberta,0;
- }
- if(ketw_aldebaran) {
- set kewt_travel,kewt_travel|0x2;
- set ketw_aldebaran,0;
- }
- if(ketw_amatsu) {
- set kewt_travel,kewt_travel|0x4;
- set ketw_amatsu,0;
- }
- if(ketw_ayothaya) {
- set kewt_travel,kewt_travel|0x8;
- set ketw_ayothaya,0;
- }
- if(ketw_comodo) {
- set kewt_travel,kewt_travel|0x10;
- set ketw_comodo,0;
- }
- if(ketw_einbech) {
- set kewt_travel,kewt_travel|0x20;
- set ketw_einbech,0;
- }
- if(ketw_einbroch) {
- set kewt_travel,kewt_travel|0x40;
- set ketw_einbroch,0;
- }
- if(ketw_geffen) {
- set kewt_travel,kewt_travel|0x80;
- set ketw_geffen,0;
- }
- if(ketw_gonryun) {
- set kewt_travel,kewt_travel|0x100;
- set ketw_gonryun,0;
- }
- if(ketw_hugel) {
- set kewt_travel,kewt_travel|0x200;
- set ketw_hugel,0;
- }
- if(ketw_izlude) {
- set kewt_travel,kewt_travel|0x400;
- set ketw_izlude,0;
- }
- if(ketw_jawaii) {
- set kewt_travel,kewt_travel|0x800;
- set ketw_jawaii,0;
- }
- if(ketw_lighthalzen) {
- set kewt_travel,kewt_travel|0x1000;
- set ketw_lighthalzen,0;
- }
- if(ketw_louyang) {
- set kewt_travel,kewt_travel|0x2000;
- set ketw_louyang,0;
- }
- if(ketw_lutie) {
- set kewt_travel,kewt_travel|0x4000;
- set ketw_lutie,0;
- }
- if(ketw_morroc) {
- set kewt_travel,kewt_travel|0x8000;
- set ketw_morroc,0;
- }
- if(ketw_niflheim) {
- set kewt_travel,kewt_travel|0x10000;
- set ketw_niflheim,0;
- }
- if(ketw_payon) {
- set kewt_travel,kewt_travel|0x20000;
- set ketw_payon,0;
- }
- if(ketw_prontera) {
- set kewt_travel,kewt_travel|0x40000;
- set ketw_prontera,0;
- }
- if(ketw_umbala) {
- set kewt_travel,kewt_travel|0x80000;
- set ketw_umbala,0;
- }
- if(ketw_yuno) {
- set kewt_travel,kewt_travel|0x100000;
- set ketw_yuno,0;
- }
-
- if(#ketw_alberta) {
- set #kewt_travel,#kewt_travel|0x1;
- set #ketw_alberta,0;
- }
- if(#ketw_aldebaran) {
- set #kewt_travel,#kewt_travel|0x2;
- set #ketw_aldebaran,0;
- }
- if(#ketw_amatsu) {
- set #kewt_travel,#kewt_travel|0x4;
- set #ketw_amatsu,0;
- }
- if(#ketw_ayothaya) {
- set #kewt_travel,#kewt_travel|0x8;
- set #ketw_ayothaya,0;
- }
- if(#ketw_comodo) {
- set #kewt_travel,#kewt_travel|0x10;
- set #ketw_comodo,0;
- }
- if(#ketw_einbech) {
- set #kewt_travel,#kewt_travel|0x20;
- set #ketw_einbech,0;
- }
- if(#ketw_einbroch) {
- set #kewt_travel,#kewt_travel|0x40;
- set #ketw_einbroch,0;
- }
- if(#ketw_geffen) {
- set #kewt_travel,#kewt_travel|0x80;
- set #ketw_geffen,0;
- }
- if(#ketw_gonryun) {
- set #kewt_travel,#kewt_travel|0x100;
- set #ketw_gonryun,0;
- }
- if(#ketw_hugel) {
- set #kewt_travel,#kewt_travel|0x200;
- set #ketw_hugel,0;
- }
- if(#ketw_izlude) {
- set #kewt_travel,#kewt_travel|0x400;
- set #ketw_izlude,0;
- }
- if(#ketw_jawaii) {
- set #kewt_travel,#kewt_travel|0x800;
- set #ketw_jawaii,0;
- }
- if(#ketw_lighthalzen) {
- set #kewt_travel,#kewt_travel|0x1000;
- set #ketw_lighthalzen,0;
- }
- if(#ketw_louyang) {
- set #kewt_travel,#kewt_travel|0x2000;
- set #ketw_louyang,0;
- }
- if(#ketw_lutie) {
- set #kewt_travel,#kewt_travel|0x4000;
- set #ketw_lutie,0;
- }
- if(#ketw_morroc) {
- set #kewt_travel,#kewt_travel|0x8000;
- set #ketw_morroc,0;
- }
- if(#ketw_niflheim) {
- set #kewt_travel,#kewt_travel|0x10000;
- set #ketw_niflheim,0;
- }
- if(#ketw_payon) {
- set #kewt_travel,#kewt_travel|0x20000;
- set #ketw_payon,0;
- }
- if(#ketw_prontera) {
- set #kewt_travel,#kewt_travel|0x40000;
- set #ketw_prontera,0;
- }
- if(#ketw_umbala) {
- set #kewt_travel,#kewt_travel|0x80000;
- set #ketw_umbala,0;
- }
- if(#ketw_yuno) {
- set #kewt_travel,#kewt_travel|0x100000;
- set #ketw_yuno,0;
- }
-// End update code.
-
- if ($@kewt_travel > 1) {
- if (@map$ == "alberta.gat" || kewt_travel&0x1)
- set #kewt_travel,#kewt_travel|0x1;
- if (@map$ == "aldebaran.gat" || kewt_travel&0x2)
- set #kewt_travel,#kewt_travel|0x2;
- if (@map$ == "amatsu.gat" || kewt_travel&0x4)
- set #kewt_travel,#kewt_travel|0x4;
- if (@map$ == "ayothaya.gat" || kewt_travel&0x8)
- set #kewt_travel,#kewt_travel|0x8;
- if (@map$ == "comodo.gat" || kewt_travel&0x10)
- set #kewt_travel,#kewt_travel|0x10;
- if (@map$ == "einbech.gat" || kewt_travel&0x20)
- set #kewt_travel,#kewt_travel|0x20;
- if (@map$ == "einbroch.gat" || kewt_travel&0x40)
- set #kewt_travel,#kewt_travel|0x40;
- if (@map$ == "geffen.gat" || kewt_travel&0x80)
- set #kewt_travel,#kewt_travel|0x80;
- if (@map$ == "gonryun.gat" || kewt_travel&0x100)
- set #kewt_travel,#kewt_travel|0x100;
- if (@map$ == "hugel.gat" || kewt_travel&0x200)
- set #kewt_travel,#kewt_travel|0x200;
- if (@map$ == "izlude.gat" || kewt_travel&0x400)
- set #kewt_travel,#kewt_travel|0x400;
- if (@map$ == "jawaii.gat" || kewt_travel&0x800)
- set #kewt_travel,#kewt_travel|0x800;
- if (@map$ == "lighthalzen.gat" || kewt_travel&1000)
- set #kewt_travel,#kewt_travel|0x1000;
- if (@map$ == "louyang.gat" || kewt_travel&0x2000)
- set #kewt_travel,#kewt_travel|0x2000;
- if (@map$ == "xmas.gat" || kewt_travel&0x4000)
- set #kewt_travel,#kewt_travel|0x4000;
- if (@map$ == "morocc.gat" || kewt_travel&0x8000)
- set #kewt_travel,#kewt_travel|0x8000;
- if (@map$ == "niflheim.gat" || kewt_travel&0x10000)
- set #kewt_travel,#kewt_travel|0x10000;
- if (@map$ == "payon.gat" || kewt_travel&0x20000)
- set #kewt_travel,#kewt_travel|0x20000;
- if (@map$ == "prontera.gat" || kewt_travel&0x40000)
- set #kewt_travel,#kewt_travel|0x40000;
- if (@map$ == "umbala.gat" || kewt_travel&0x80000)
- set #kewt_travel,#kewt_travel|0x80000;
- if (@map$ == "yuno.gat" || kewt_travel&0x100000)
- set #kewt_travel,#kewt_travel|0x100000;
- } else {
- if (@map$ == "alberta.gat")
- set kewt_travel,kewt_travel|0x1;
- if (@map$ == "aldebaran.gat")
- set kewt_travel,kewt_travel|0x2;
- if (@map$ == "amatsu.gat")
- set kewt_travel,kewt_travel|0x4;
- if (@map$ == "ayothaya.gat")
- set kewt_travel,kewt_travel|0x8;
- if (@map$ == "comodo.gat")
- set kewt_travel,kewt_travel|0x10;
- if (@map$ == "einbech.gat")
- set kewt_travel,kewt_travel|0x20;
- if (@map$ == "einbroch.gat")
- set kewt_travel,kewt_travel|0x40;
- if (@map$ == "geffen.gat")
- set kewt_travel,kewt_travel|0x80;
- if (@map$ == "gonryun.gat")
- set kewt_travel,kewt_travel|0x100;
- if (@map$ == "hugel.gat")
- set kewt_travel,kewt_travel|0x200;
- if (@map$ == "izlude.gat")
- set kewt_travel,kewt_travel|0x400;
- if (@map$ == "jawaii.gat")
- set kewt_travel,kewt_travel|0x800;
- if (@map$ == "lighthalzen.gat")
- set kewt_travel,kewt_travel|0x1000;
- if (@map$ == "louyang.gat")
- set kewt_travel,kewt_travel|0x2000;
- if (@map$ == "xmas.gat")
- set kewt_travel,kewt_travel|0x4000;
- if (@map$ == "morocc.gat")
- set kewt_travel,kewt_travel|0x8000;
- if (@map$ == "niflheim.gat")
- set kewt_travel,kewt_travel|0x10000;
- if (@map$ == "payon.gat")
- set kewt_travel,kewt_travel|0x20000;
- if (@map$ == "prontera.gat")
- set kewt_travel,kewt_travel|0x40000;
- if (@map$ == "umbala.gat")
- set kewt_travel,kewt_travel|0x80000;
- if (@map$ == "yuno.gat")
- set kewt_travel,kewt_travel|0x100000;
- }
- return;
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Warping Town Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 2.1
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+, RO Episode 8+ (Hugel)
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers warp services to towns.
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//= Flag values used for towns:
+//= 0x00000001 Alberta
+//= 0x00000002 AlDeBaran
+//= 0x00000004 Amatsu
+//= 0x00000008 Ayothaya
+//= 0x00000010 Comodo
+//= 0x00000020 Einbech
+//= 0x00000040 Einbroch
+//= 0x00000080 Geffen
+//= 0x00000100 Gon Ryun
+//= 0x00000200 Hugel
+//= 0x00000400 Izlude
+//= 0x00000800 Jawaii
+//= 0x00001000 LightHalzen
+//= 0x00002000 Lou Yang
+//= 0x00004000 Lutie
+//= 0x00008000 Morocc
+//= 0x00010000 Niflheim
+//= 0x00020000 Payon
+//= 0x00040000 Prontera
+//= 0x00080000 Umbala
+//= 0x00100000 Yuno
+//============================================================
+
+- script keInit_warpTown -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadWarpTown";
+ end;
+}
+
+function script F_keWarpTown {
+
+ function SF_check;
+ function SF_warp;
+
+ set @cost,callfunc("F_keCost",$@kewt_cost,$@kewt_discount);
+ set @niflcost,callfunc("F_keCost",$@kewt_niflCost,$@kewd_discount);
+ if (@cost > Zeny && $@kewt_free)
+ set @cost, Zeny;
+ do {
+ if ($@kewt_showOnline) {
+ set @kmenu, select(
+ "- Cancel",
+ "- Alberta ("+@cost+"z/"+(getmapusers("alberta.gat")+getmapusers("alberta_in.gat"))+" "+$@ked_users$+")",
+ "- Al De Baran ("+@cost+"z/"+(getmapusers("aldebaran.gat")+getmapusers("aldeba_in.gat"))+" "+$@ked_users$+")",
+ "- Amatsu ("+@cost+"z/"+(getmapusers("amatsu.gat")+getmapusers("ama_in01.gat")+getmapusers("ama_in02.gat"))
+ +" "+$@ked_users$+")",
+ "- Ayothaya ("+@cost+"z/"+(getmapusers("ayothaya.gat")+getmapusers("ayo_in01.gat")+getmapusers("ayo_in02.gat"))
+ +" "+$@ked_users$+")",
+ "- Comodo ("+@cost+"z/"+(getmapusers("comodo.gat")+getmapusers("cmd_in01.gat")+getmapusers("cmd_in02.gat"))
+ +" "+$@ked_users$+")",
+ "- Einbech ("+@cost+"z/"+(getmapusers("einbech.gat"))+" "+$@ked_users$+")",
+ "- Einbroch ("+@cost+"z/"+(getmapusers("einbroch.gat")+getmapusers("ein_in01.gat"))+" "+$@ked_users$+")",
+ "- Geffen ("+@cost+"z/"+(getmapusers("geffen.gat")+getmapusers("geffen_in.gat")+getmapusers("gef_tower.gat"))
+ +" "+$@ked_users$+")",
+ "- Gon Ryun ("+@cost+"z/"+(getmapusers("gonryun.gat")+getmapusers("gon_in.gat"))+" "+$@ked_users$+")",
+ "- Hugel ("+@cost+"z/"+(getmapusers("hugel.gat")+getmapusers("hu_in01.gat"))+" "+$@ked_users$+")",
+ "- Izlude ("+@cost+"z/"+(getmapusers("izlude.gat")+getmapusers("izlude_in.gat"))+" "+$@ked_users$+")",
+ "- Jawaii ("+@cost+"z/"+(getmapusers("jawaii.gat")+getmapusers("jawaii_in.gat"))+" "+$@ked_users$+")",
+ "- LightHalzen ("+@cost+"z/"+(getmapusers("lighthalzen.gat")+getmapusers("lhz_in01.gat")
+ +getmapusers("lhz_in02.gat")+getmapusers("lhz_in03.gat"))+" "+$@ked_users$+")",
+ "- Lou Yang ("+@cost+"z/"+(getmapusers("louyang.gat")+getmapusers("lou_in01.gat")+getmapusers("lou_in02.gat"))
+ +" "+$@ked_users$+")",
+ "- Lutie ("+@cost+"z/"+(getmapusers("xmas.gat")+getmapusers("xmas_in.gat"))+" "+$@ked_users$+")",
+ "- Morocc ("+@cost+"z/"+(getmapusers("morocc.gat")+getmapusers("morocc_in.gat")+getmapusers("moc_castle.gat"))
+ +" "+$@ked_users$+")",
+ "- Niflheim ("+@niflcost+"z/"+(getmapusers("niflheim.gat")+getmapusers("nif_in.gat"))+" "+$@ked_users$+")",
+ "- Payon ("+@cost+"z/"+(getmapusers("payon.gat")+getmapusers("payon_in01.gat")+getmapusers("payon_in02.gat"))
+ +" "+$@ked_users$+")",
+ "- Prontera ("+@cost+"z/"+(getmapusers("prontera.gat")+getmapusers("prt_castle.gat")
+ +getmapusers("prt_church.gat")+getmapusers("prt_in.gat"))+" "+$@ked_users$+")",
+ "- Umbala ("+@cost+"z/"+(getmapusers("umbala.gat")+getmapusers("um_in.gat"))+" "+$@ked_users$+")",
+ "- Yuno ("+@cost+"z/"+(getmapusers("yuno.gat")+getmapusers("yuno_in01.gat")+getmapusers("yuno_in02.gat")
+ +getmapusers("yuno_in03.gat")+getmapusers("yuno_in04.gat")+getmapusers("yuno_in05.gat"))+" "+$@ked_users$+")"
+ );
+ } else {
+ set @kmenu, select(
+ "- Cancel",
+ "- Alberta ("+@cost+"z)",
+ "- Al De Baran ("+@cost+"z)",
+ "- Amatsu ("+@cost+"z)",
+ "- Ayothaya ("+@cost+"z)",
+ "- Comodo ("+@cost+"z)",
+ "- Einbech ("+@cost+"z)",
+ "- Einbroch ("+@cost+"z)",
+ "- Geffen ("+@cost+"z)",
+ "- Gon Ryun ("+@cost+"z)",
+ "- Hugel ("+@cost+"z)",
+ "- Izlude ("+@cost+"z)",
+ "- Jawaii ("+@cost+"z)",
+ "- LightHalzen ("+@cost+"z)",
+ "- Lou Yang ("+@cost+"z)",
+ "- Lutie ("+@cost+"z)",
+ "- Morocc ("+@cost+"z)",
+ "- Niflheim ("+@niflcost+"z)",
+ "- Payon ("+@cost+"z)",
+ "- Prontera ("+@cost+"z)",
+ "- Umbala ("+@cost+"z)",
+ "- Yuno ("+@cost+"z)"
+ );
+ }
+ switch (@kmenu) {
+ case 2: //Alberta
+ if (SF_check(0x1))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"alberta.gat",117,56;
+ break;
+ case 3: //AlDeBaran
+ if (SF_check(0x2))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"aldebaran.gat",139,124;
+ break;
+ case 4: //Amatsu
+ if (SF_check(0x4))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"amatsu.gat",197,88;
+ break;
+ case 5: //Ayathoya
+ if (SF_check(0x8))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"ayothaya.gat",202,174;
+ break;
+ case 6: //Comodo
+ if (SF_check(0x10))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"comodo.gat",189,150;
+ break;
+ case 7: //Einbech
+ if (SF_check(0x20))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"einbech.gat",137,220;
+ break;
+ case 8: //Einbroch
+ if (SF_check(0x40))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"einbroch.gat",64,199;
+ break;
+ case 9: //Geffen
+ if (SF_check(0x80))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"geffen.gat",120,66;
+ break;
+ case 10: //GonRyun
+ if (SF_check(0x100))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"gonryun.gat",160,180;
+ break;
+ case 11: //Hugel
+ if (SF_check(0x200))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"hugel.gat",96,105;
+ break;
+ case 12: //Izlude
+ if (SF_check(0x400))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"izlude.gat",127,97;
+ break;
+ case 13: //Jawaii
+ if (SF_check(0x800))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"jawaii.gat",214,223;
+ break;
+ case 14: //LightHalzen
+ if (SF_check(0x1000))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"lighthalzen.gat",158,92;
+ break;
+ case 15: //LouYang
+ if (SF_check(0x2000))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"louyang.gat",218,118;
+ break;
+ case 16: //Lutie
+ if (SF_check(0x4000))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"xmas.gat",148,133;
+ break;
+ case 17: //Morocc
+ if (SF_check(0x8000))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"morocc.gat",162,91;
+ break;
+ case 18: //Niflheim
+ if (SF_check(0x10000)) {
+ if (nif_q_done != 1) {
+ mes "...?";
+ callfunc "F_keIntro", e_no, "For some reason I can't warp you there!";
+ } else
+ callfunc "F_keWarp",$@kewt_niflCost,$@kewd_discount,e_yawn,"niflheim.gat",194,185;
+ }
+ break;
+ case 19: //Payon
+ if (SF_check(0x20000))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"payon.gat",159,181;
+ break;
+ case 20: //Prontera
+ if (SF_check(0x40000))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"prontera.gat",156,175;
+ break;
+ case 21: //Umbala
+ if (SF_check(0x80000))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"umbala.gat",88,153;
+ break;
+ case 22: //Yuno
+ if (SF_check(0x100000))
+ SF_warp $@kewt_cost,$@kewt_discount,e_yawn,"yuno.gat",158,77;
+ break;
+ }
+ } while (@kmenu > 1);
+ return;
+
+//SubFunction SF_check(char-flag, account_flag)
+//Checks if the character can warp to that town taking into consideration
+//traveller's mode.
+function SF_check {
+ if ($@kewt_travel && !((kewt_travel|#kewt_travel)&getarg(0))) {
+ callfunc "F_keIntro", e_sry, "Sorry, but we can only warp you to towns you have saved in at least once.";
+ return 0;
+ }
+ return 1;
+}
+
+//SubFunction SF_warp (int cost, int discount, int emotion, String map, int x, int y)
+//Modded from F_keWarp to allow free warping to towns when not enough zeny.
+function SF_warp {
+ set @cost, getarg(0);
+ if (@cost > Zeny && $@kewt_free)
+ set @cost, Zeny;
+ if (!(callfunc("F_keCharge",@cost,getarg(1),1))) {
+ callfunc "F_keIntro", e_an, "You don't have enough Zeny...";
+ return;
+ }
+ emotion getarg(2);
+ warp getarg(3),getarg(4),getarg(5);
+ end;
+}
+
+}
+
+//Invoked when we want to add a map to the list of travelled-to towns
+function script F_keAddTravelTown {
+ set @map$, getarg(0);
+// Temporary code to update variables from old format to new.
+ if(ketw_alberta) {
+ set kewt_travel,kewt_travel|0x1;
+ set ketw_alberta,0;
+ }
+ if(ketw_aldebaran) {
+ set kewt_travel,kewt_travel|0x2;
+ set ketw_aldebaran,0;
+ }
+ if(ketw_amatsu) {
+ set kewt_travel,kewt_travel|0x4;
+ set ketw_amatsu,0;
+ }
+ if(ketw_ayothaya) {
+ set kewt_travel,kewt_travel|0x8;
+ set ketw_ayothaya,0;
+ }
+ if(ketw_comodo) {
+ set kewt_travel,kewt_travel|0x10;
+ set ketw_comodo,0;
+ }
+ if(ketw_einbech) {
+ set kewt_travel,kewt_travel|0x20;
+ set ketw_einbech,0;
+ }
+ if(ketw_einbroch) {
+ set kewt_travel,kewt_travel|0x40;
+ set ketw_einbroch,0;
+ }
+ if(ketw_geffen) {
+ set kewt_travel,kewt_travel|0x80;
+ set ketw_geffen,0;
+ }
+ if(ketw_gonryun) {
+ set kewt_travel,kewt_travel|0x100;
+ set ketw_gonryun,0;
+ }
+ if(ketw_hugel) {
+ set kewt_travel,kewt_travel|0x200;
+ set ketw_hugel,0;
+ }
+ if(ketw_izlude) {
+ set kewt_travel,kewt_travel|0x400;
+ set ketw_izlude,0;
+ }
+ if(ketw_jawaii) {
+ set kewt_travel,kewt_travel|0x800;
+ set ketw_jawaii,0;
+ }
+ if(ketw_lighthalzen) {
+ set kewt_travel,kewt_travel|0x1000;
+ set ketw_lighthalzen,0;
+ }
+ if(ketw_louyang) {
+ set kewt_travel,kewt_travel|0x2000;
+ set ketw_louyang,0;
+ }
+ if(ketw_lutie) {
+ set kewt_travel,kewt_travel|0x4000;
+ set ketw_lutie,0;
+ }
+ if(ketw_morroc) {
+ set kewt_travel,kewt_travel|0x8000;
+ set ketw_morroc,0;
+ }
+ if(ketw_niflheim) {
+ set kewt_travel,kewt_travel|0x10000;
+ set ketw_niflheim,0;
+ }
+ if(ketw_payon) {
+ set kewt_travel,kewt_travel|0x20000;
+ set ketw_payon,0;
+ }
+ if(ketw_prontera) {
+ set kewt_travel,kewt_travel|0x40000;
+ set ketw_prontera,0;
+ }
+ if(ketw_umbala) {
+ set kewt_travel,kewt_travel|0x80000;
+ set ketw_umbala,0;
+ }
+ if(ketw_yuno) {
+ set kewt_travel,kewt_travel|0x100000;
+ set ketw_yuno,0;
+ }
+
+ if(#ketw_alberta) {
+ set #kewt_travel,#kewt_travel|0x1;
+ set #ketw_alberta,0;
+ }
+ if(#ketw_aldebaran) {
+ set #kewt_travel,#kewt_travel|0x2;
+ set #ketw_aldebaran,0;
+ }
+ if(#ketw_amatsu) {
+ set #kewt_travel,#kewt_travel|0x4;
+ set #ketw_amatsu,0;
+ }
+ if(#ketw_ayothaya) {
+ set #kewt_travel,#kewt_travel|0x8;
+ set #ketw_ayothaya,0;
+ }
+ if(#ketw_comodo) {
+ set #kewt_travel,#kewt_travel|0x10;
+ set #ketw_comodo,0;
+ }
+ if(#ketw_einbech) {
+ set #kewt_travel,#kewt_travel|0x20;
+ set #ketw_einbech,0;
+ }
+ if(#ketw_einbroch) {
+ set #kewt_travel,#kewt_travel|0x40;
+ set #ketw_einbroch,0;
+ }
+ if(#ketw_geffen) {
+ set #kewt_travel,#kewt_travel|0x80;
+ set #ketw_geffen,0;
+ }
+ if(#ketw_gonryun) {
+ set #kewt_travel,#kewt_travel|0x100;
+ set #ketw_gonryun,0;
+ }
+ if(#ketw_hugel) {
+ set #kewt_travel,#kewt_travel|0x200;
+ set #ketw_hugel,0;
+ }
+ if(#ketw_izlude) {
+ set #kewt_travel,#kewt_travel|0x400;
+ set #ketw_izlude,0;
+ }
+ if(#ketw_jawaii) {
+ set #kewt_travel,#kewt_travel|0x800;
+ set #ketw_jawaii,0;
+ }
+ if(#ketw_lighthalzen) {
+ set #kewt_travel,#kewt_travel|0x1000;
+ set #ketw_lighthalzen,0;
+ }
+ if(#ketw_louyang) {
+ set #kewt_travel,#kewt_travel|0x2000;
+ set #ketw_louyang,0;
+ }
+ if(#ketw_lutie) {
+ set #kewt_travel,#kewt_travel|0x4000;
+ set #ketw_lutie,0;
+ }
+ if(#ketw_morroc) {
+ set #kewt_travel,#kewt_travel|0x8000;
+ set #ketw_morroc,0;
+ }
+ if(#ketw_niflheim) {
+ set #kewt_travel,#kewt_travel|0x10000;
+ set #ketw_niflheim,0;
+ }
+ if(#ketw_payon) {
+ set #kewt_travel,#kewt_travel|0x20000;
+ set #ketw_payon,0;
+ }
+ if(#ketw_prontera) {
+ set #kewt_travel,#kewt_travel|0x40000;
+ set #ketw_prontera,0;
+ }
+ if(#ketw_umbala) {
+ set #kewt_travel,#kewt_travel|0x80000;
+ set #ketw_umbala,0;
+ }
+ if(#ketw_yuno) {
+ set #kewt_travel,#kewt_travel|0x100000;
+ set #ketw_yuno,0;
+ }
+// End update code.
+
+ if ($@kewt_travel > 1) {
+ if (@map$ == "alberta.gat" || kewt_travel&0x1)
+ set #kewt_travel,#kewt_travel|0x1;
+ if (@map$ == "aldebaran.gat" || kewt_travel&0x2)
+ set #kewt_travel,#kewt_travel|0x2;
+ if (@map$ == "amatsu.gat" || kewt_travel&0x4)
+ set #kewt_travel,#kewt_travel|0x4;
+ if (@map$ == "ayothaya.gat" || kewt_travel&0x8)
+ set #kewt_travel,#kewt_travel|0x8;
+ if (@map$ == "comodo.gat" || kewt_travel&0x10)
+ set #kewt_travel,#kewt_travel|0x10;
+ if (@map$ == "einbech.gat" || kewt_travel&0x20)
+ set #kewt_travel,#kewt_travel|0x20;
+ if (@map$ == "einbroch.gat" || kewt_travel&0x40)
+ set #kewt_travel,#kewt_travel|0x40;
+ if (@map$ == "geffen.gat" || kewt_travel&0x80)
+ set #kewt_travel,#kewt_travel|0x80;
+ if (@map$ == "gonryun.gat" || kewt_travel&0x100)
+ set #kewt_travel,#kewt_travel|0x100;
+ if (@map$ == "hugel.gat" || kewt_travel&0x200)
+ set #kewt_travel,#kewt_travel|0x200;
+ if (@map$ == "izlude.gat" || kewt_travel&0x400)
+ set #kewt_travel,#kewt_travel|0x400;
+ if (@map$ == "jawaii.gat" || kewt_travel&0x800)
+ set #kewt_travel,#kewt_travel|0x800;
+ if (@map$ == "lighthalzen.gat" || kewt_travel&1000)
+ set #kewt_travel,#kewt_travel|0x1000;
+ if (@map$ == "louyang.gat" || kewt_travel&0x2000)
+ set #kewt_travel,#kewt_travel|0x2000;
+ if (@map$ == "xmas.gat" || kewt_travel&0x4000)
+ set #kewt_travel,#kewt_travel|0x4000;
+ if (@map$ == "morocc.gat" || kewt_travel&0x8000)
+ set #kewt_travel,#kewt_travel|0x8000;
+ if (@map$ == "niflheim.gat" || kewt_travel&0x10000)
+ set #kewt_travel,#kewt_travel|0x10000;
+ if (@map$ == "payon.gat" || kewt_travel&0x20000)
+ set #kewt_travel,#kewt_travel|0x20000;
+ if (@map$ == "prontera.gat" || kewt_travel&0x40000)
+ set #kewt_travel,#kewt_travel|0x40000;
+ if (@map$ == "umbala.gat" || kewt_travel&0x80000)
+ set #kewt_travel,#kewt_travel|0x80000;
+ if (@map$ == "yuno.gat" || kewt_travel&0x100000)
+ set #kewt_travel,#kewt_travel|0x100000;
+ } else {
+ if (@map$ == "alberta.gat")
+ set kewt_travel,kewt_travel|0x1;
+ if (@map$ == "aldebaran.gat")
+ set kewt_travel,kewt_travel|0x2;
+ if (@map$ == "amatsu.gat")
+ set kewt_travel,kewt_travel|0x4;
+ if (@map$ == "ayothaya.gat")
+ set kewt_travel,kewt_travel|0x8;
+ if (@map$ == "comodo.gat")
+ set kewt_travel,kewt_travel|0x10;
+ if (@map$ == "einbech.gat")
+ set kewt_travel,kewt_travel|0x20;
+ if (@map$ == "einbroch.gat")
+ set kewt_travel,kewt_travel|0x40;
+ if (@map$ == "geffen.gat")
+ set kewt_travel,kewt_travel|0x80;
+ if (@map$ == "gonryun.gat")
+ set kewt_travel,kewt_travel|0x100;
+ if (@map$ == "hugel.gat")
+ set kewt_travel,kewt_travel|0x200;
+ if (@map$ == "izlude.gat")
+ set kewt_travel,kewt_travel|0x400;
+ if (@map$ == "jawaii.gat")
+ set kewt_travel,kewt_travel|0x800;
+ if (@map$ == "lighthalzen.gat")
+ set kewt_travel,kewt_travel|0x1000;
+ if (@map$ == "louyang.gat")
+ set kewt_travel,kewt_travel|0x2000;
+ if (@map$ == "xmas.gat")
+ set kewt_travel,kewt_travel|0x4000;
+ if (@map$ == "morocc.gat")
+ set kewt_travel,kewt_travel|0x8000;
+ if (@map$ == "niflheim.gat")
+ set kewt_travel,kewt_travel|0x10000;
+ if (@map$ == "payon.gat")
+ set kewt_travel,kewt_travel|0x20000;
+ if (@map$ == "prontera.gat")
+ set kewt_travel,kewt_travel|0x40000;
+ if (@map$ == "umbala.gat")
+ set kewt_travel,kewt_travel|0x80000;
+ if (@map$ == "yuno.gat")
+ set kewt_travel,kewt_travel|0x100000;
+ }
+ return;
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt
index 89f536de3..2adce07a0 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt
@@ -1,159 +1,159 @@
-//===== eAthena Script =======================================
-//= Kafra Express - WoE Warping Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 1.7
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+, RO Episode 4.1+ (War of Emperium)
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= Offers warping to the War of Emperium grounds.
-//===== Additional Comments: =================================
-//= See config.txt for configuration.
-//= Remove the comment on lines 52,53 and 63 to enable direct G. Dungeon warping
-//============================================================
-
-- script keInit_warpWoe -1,{
-OnInit: //Load Config
- donpcevent "keConfig::OnLoadWarpWoe";
- end;
-}
-
-function script F_keWarpWOE {
- if ($@kewg_check && getcharid(2) <= 0) {
- callfunc "F_keIntro", e_srt, "Sorry, these warps are only available to people who belong to a Guild.";
- return;
- }
- if ($@kewg_checkAgit && agitcheck(0) == 0) {
- callfunc "F_keIntro", e_srt, "Sorry, these warps are only enabled during the Guild Wars.";
- return;
- }
-
- function SF_dungeons;
- set @cost, callfunc("F_keCost",100,$@kewg_discount);
-
- do {
- if ($@kewg_showOnline) {
- set @kmenu, select(
- "- Cancel",
- "- Al De Baran Guild ("+($@kewg_alDeBaran*@cost/100)+"z/"+(getmapusers("alde_gld.gat")
- +getmapusers("aldeg_cas01.gat")+getmapusers("aldeg_cas02.gat")+getmapusers("aldeg_cas03.gat")
- +getmapusers("aldeg_cas04.gat")+getmapusers("aldeg_cas05.gat"))+" "+$@ked_users$+")",
- "- Geffen Guild ("+($@kewg_geffen*@cost/100)+"z/"+(getmapusers("gef_fild13.gat")
- +getmapusers("gefg_cas01.gat")+getmapusers("gefg_cas02.gat")+getmapusers("gefg_cas03.gat")
- +getmapusers("gefg_cas04.gat")+getmapusers("gefg_cas05.gat"))+" "+$@ked_users$+")",
- "- Payon Guild ("+($@kewg_payon*@cost/100)+"z/"+(getmapusers("pay_gld.gat")
- +getmapusers("payg_cas01.gat")+getmapusers("payg_cas02.gat")+getmapusers("payg_cas03.gat")
- +getmapusers("payg_cas04.gat")+getmapusers("payg_cas05.gat"))+" "+$@ked_users$+")",
- "- Prontera Guild ("+($@kewg_prontera*@cost/100)+"z/"+(getmapusers("prt_gld.gat")
- +getmapusers("prtg_cas01.gat")+getmapusers("prtg_cas02.gat")+getmapusers("prtg_cas03.gat")
- +getmapusers("prtg_cas04.gat")+getmapusers("prtg_cas05.gat"))+" "+$@ked_users$+")",
-// "- Guild Dungeons ("+(getmapusers("gld_dun01.gat")+getmapusers("gld_dun02.gat")
-// +getmapusers("gld_dun03.gat")+getmapusers("gld_dun04.gat"))+" "+$@ked_users$+")",
- "- See "+$@ked_users$+" distribution"
- );
- } else {
- set @kmenu, select(
- "- Cancel",
- "- Al De Baran Guild ("+($@kewg_alDeBaran*@cost/100)+"z)",
- "- Geffen Guild ("+($@kewg_geffen*@cost/100)+"z)",
- "- Payon Guild ("+($@kewg_payon*@cost/100)+"z)",
- "- Prontera Guild ("+($@kewg_prontera*@cost/100)+"z)"
-// ,"- Guild Dungeons"
- );
- }
- switch (@kmenu) {
- case 2: //Al De Baran
- callfunc "F_keWarp",$@kewg_alDeBaran,$@kewg_discount,44,"alde_gld.gat",153,160;
- break;
- case 3: //Geffen
- callfunc "F_keWarp",$@kewg_geffen,$@kewg_discount,44,"gef_fild13.gat",243,180;
- break;
- case 4: //Payon
- callfunc "F_keWarp",$@kewg_payon,$@kewg_discount,44,"pay_gld.gat",249,177;
- break;
- case 5: //Prontera
- callfunc "F_keWarp",$@kewg_prontera,$@kewg_discount,44,"prt_gld.gat",119,160;
- break;
- case 6: //Guild Dungeons
- SF_dungeons();
- break;
- case 7: //Info
- mes "The current distribution of "+$@ked_users$+" is as follows:";
- next;
- mes "[Al De Baran]";
- mes "- Guild Grounds: "+getmapusers("alde_gld.gat");
- mes "- Castle 1 - Noisyubantian: "+getmapusers("aldeg_cas01.gat");
- mes "- Castle 2 - Hohensyubangawoo: "+getmapusers("aldeg_cas02.gat");
- mes "- Castle 3 - Nyirenverk: "+getmapusers("aldeg_cas03.gat");
- mes "- Castle 4 - Byirtsburi: "+getmapusers("aldeg_cas04.gat");
- mes "- Castle 5 - Rotenburk: "+getmapusers("aldeg_cas05.gat");
- next;
- mes "[Geffen]";
- mes "- Guild Grounds: "+getmapusers("gef_fild13.gat");
- mes "- Castle 1 - Reprion: "+getmapusers("gefg_cas01.gat");
- mes "- Castle 2 - Yolbriger: "+getmapusers("gefg_cas02.gat");
- mes "- Castle 3 - Isinlife: "+getmapusers("gefg_cas03.gat");
- mes "- Castle 4 - Berigel: "+getmapusers("gefg_cas04.gat");
- mes "- Castle 5 - Melsedetsu: "+getmapusers("gefg_cas05.gat");
- next;
- mes "[Payon]";
- mes "- Guild Grounds: "+getmapusers("pay_gld.gat");
- mes "- Castle 1 - Mingting: "+getmapusers("payg_cas01.gat");
- mes "- Castle 2 - Tiantan: "+getmapusers("payg_cas02.gat");
- mes "- Castle 3 - Fuying: "+getmapusers("payg_cas03.gat");
- mes "- Castle 4 - Honglou: "+getmapusers("payg_cas04.gat");
- mes "- Castle 5 - Zhulinxian: "+getmapusers("payg_cas05.gat");
- next;
- mes "[Prontera]";
- mes "- Guild Grounds: "+getmapusers("prt_gld.gat");
- mes "- Castle 1 - Creamhilt: "+getmapusers("prtg_cas01.gat");
- mes "- Castle 2 - Sbanhealt: "+getmapusers("prtg_cas02.gat");
- mes "- Castle 3 - Lazrigees: "+getmapusers("prtg_cas03.gat");
- mes "- Castle 4 - Squagul: "+getmapusers("prtg_cas04.gat");
- mes "- Castle 5 - Guindull: "+getmapusers("prtg_cas05.gat");
- next;
- callfunc "F_keIntro", -1, "";
- break;
- }
- } while (@kmenu > 1);
- return;
-
-function SF_dungeons {
- do {
- if ($@kewg_showOnline) {
- set @submenu, select(
- "- Cancel",
- "- Baldur Dungeon ("+($@kewg_baldur*@cost/100)+"z/"+getmapusers("gld_dun01.gat")+" "+$@ked_users$+")",
- "- Luina Dungeon ("+($@kewg_luina*@cost/100)+"z/"+getmapusers("gld_dun02.gat")+" "+$@ked_users$+")",
- "- Valkyrie Dungeon ("+($@kewg_valkyrie*@cost/100)+"z/"+getmapusers("gld_dun03.gat")+" "+$@ked_users$+")",
- "- Britoniah Dungeon ("+($@kewg_britoniah*@cost/100)+"z/"+getmapusers("gld_dun04.gat")+" "+$@ked_users$+")"
- );
- } else {
- set @submenu, select(
- "- Cancel",
- "- Baldur Dungeon ("+($@kewg_baldur*@cost/100)+"z)",
- "- Luina Dungeon ("+($@kewg_luina*@cost/100)+"z)",
- "- Valkyrie Dungeon ("+($@kewg_valkyrie*@cost/100)+"z)",
- "- Britoniah Dungeon ("+($@kewg_britoniah*@cost/100)+"z)"
- );
- }
- switch (@submenu) {
- case 2: //Baldur
- callfunc "F_keWarp",$@kewg_baldur,$@kewg_discount,44,"gld_dun01.gat",119,18;
- break;
- case 3: //Luina
- callfunc "F_keWarp",$@kewg_luina,$@kewg_discount,44,"gld_dun02.gat",174,113;
- break;
- case 4: //Valkyrie
- callfunc "F_keWarp",$@kewg_valkyrie,$@kewg_discount,44,"gld_dun03.gat",37,34;
- break;
- case 5: //Britoniah
- callfunc "F_keWarp",$@kewg_britoniah,$@kewg_discount,44,"gld_dun04.gat",42,230;
- break;
- }
- } while (@submenu > 1);
-}
-
-}
+//===== eAthena Script =======================================
+//= Kafra Express - WoE Warping Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 1.7
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+, RO Episode 4.1+ (War of Emperium)
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Offers warping to the War of Emperium grounds.
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//= Remove the comment on lines 52,53 and 63 to enable direct G. Dungeon warping
+//============================================================
+
+- script keInit_warpWoe -1,{
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadWarpWoe";
+ end;
+}
+
+function script F_keWarpWOE {
+ if ($@kewg_check && getcharid(2) <= 0) {
+ callfunc "F_keIntro", e_srt, "Sorry, these warps are only available to people who belong to a Guild.";
+ return;
+ }
+ if ($@kewg_checkAgit && agitcheck(0) == 0) {
+ callfunc "F_keIntro", e_srt, "Sorry, these warps are only enabled during the Guild Wars.";
+ return;
+ }
+
+ function SF_dungeons;
+ set @cost, callfunc("F_keCost",100,$@kewg_discount);
+
+ do {
+ if ($@kewg_showOnline) {
+ set @kmenu, select(
+ "- Cancel",
+ "- Al De Baran Guild ("+($@kewg_alDeBaran*@cost/100)+"z/"+(getmapusers("alde_gld.gat")
+ +getmapusers("aldeg_cas01.gat")+getmapusers("aldeg_cas02.gat")+getmapusers("aldeg_cas03.gat")
+ +getmapusers("aldeg_cas04.gat")+getmapusers("aldeg_cas05.gat"))+" "+$@ked_users$+")",
+ "- Geffen Guild ("+($@kewg_geffen*@cost/100)+"z/"+(getmapusers("gef_fild13.gat")
+ +getmapusers("gefg_cas01.gat")+getmapusers("gefg_cas02.gat")+getmapusers("gefg_cas03.gat")
+ +getmapusers("gefg_cas04.gat")+getmapusers("gefg_cas05.gat"))+" "+$@ked_users$+")",
+ "- Payon Guild ("+($@kewg_payon*@cost/100)+"z/"+(getmapusers("pay_gld.gat")
+ +getmapusers("payg_cas01.gat")+getmapusers("payg_cas02.gat")+getmapusers("payg_cas03.gat")
+ +getmapusers("payg_cas04.gat")+getmapusers("payg_cas05.gat"))+" "+$@ked_users$+")",
+ "- Prontera Guild ("+($@kewg_prontera*@cost/100)+"z/"+(getmapusers("prt_gld.gat")
+ +getmapusers("prtg_cas01.gat")+getmapusers("prtg_cas02.gat")+getmapusers("prtg_cas03.gat")
+ +getmapusers("prtg_cas04.gat")+getmapusers("prtg_cas05.gat"))+" "+$@ked_users$+")",
+// "- Guild Dungeons ("+(getmapusers("gld_dun01.gat")+getmapusers("gld_dun02.gat")
+// +getmapusers("gld_dun03.gat")+getmapusers("gld_dun04.gat"))+" "+$@ked_users$+")",
+ "- See "+$@ked_users$+" distribution"
+ );
+ } else {
+ set @kmenu, select(
+ "- Cancel",
+ "- Al De Baran Guild ("+($@kewg_alDeBaran*@cost/100)+"z)",
+ "- Geffen Guild ("+($@kewg_geffen*@cost/100)+"z)",
+ "- Payon Guild ("+($@kewg_payon*@cost/100)+"z)",
+ "- Prontera Guild ("+($@kewg_prontera*@cost/100)+"z)"
+// ,"- Guild Dungeons"
+ );
+ }
+ switch (@kmenu) {
+ case 2: //Al De Baran
+ callfunc "F_keWarp",$@kewg_alDeBaran,$@kewg_discount,44,"alde_gld.gat",153,160;
+ break;
+ case 3: //Geffen
+ callfunc "F_keWarp",$@kewg_geffen,$@kewg_discount,44,"gef_fild13.gat",243,180;
+ break;
+ case 4: //Payon
+ callfunc "F_keWarp",$@kewg_payon,$@kewg_discount,44,"pay_gld.gat",249,177;
+ break;
+ case 5: //Prontera
+ callfunc "F_keWarp",$@kewg_prontera,$@kewg_discount,44,"prt_gld.gat",119,160;
+ break;
+ case 6: //Guild Dungeons
+ SF_dungeons();
+ break;
+ case 7: //Info
+ mes "The current distribution of "+$@ked_users$+" is as follows:";
+ next;
+ mes "[Al De Baran]";
+ mes "- Guild Grounds: "+getmapusers("alde_gld.gat");
+ mes "- Castle 1 - Noisyubantian: "+getmapusers("aldeg_cas01.gat");
+ mes "- Castle 2 - Hohensyubangawoo: "+getmapusers("aldeg_cas02.gat");
+ mes "- Castle 3 - Nyirenverk: "+getmapusers("aldeg_cas03.gat");
+ mes "- Castle 4 - Byirtsburi: "+getmapusers("aldeg_cas04.gat");
+ mes "- Castle 5 - Rotenburk: "+getmapusers("aldeg_cas05.gat");
+ next;
+ mes "[Geffen]";
+ mes "- Guild Grounds: "+getmapusers("gef_fild13.gat");
+ mes "- Castle 1 - Reprion: "+getmapusers("gefg_cas01.gat");
+ mes "- Castle 2 - Yolbriger: "+getmapusers("gefg_cas02.gat");
+ mes "- Castle 3 - Isinlife: "+getmapusers("gefg_cas03.gat");
+ mes "- Castle 4 - Berigel: "+getmapusers("gefg_cas04.gat");
+ mes "- Castle 5 - Melsedetsu: "+getmapusers("gefg_cas05.gat");
+ next;
+ mes "[Payon]";
+ mes "- Guild Grounds: "+getmapusers("pay_gld.gat");
+ mes "- Castle 1 - Mingting: "+getmapusers("payg_cas01.gat");
+ mes "- Castle 2 - Tiantan: "+getmapusers("payg_cas02.gat");
+ mes "- Castle 3 - Fuying: "+getmapusers("payg_cas03.gat");
+ mes "- Castle 4 - Honglou: "+getmapusers("payg_cas04.gat");
+ mes "- Castle 5 - Zhulinxian: "+getmapusers("payg_cas05.gat");
+ next;
+ mes "[Prontera]";
+ mes "- Guild Grounds: "+getmapusers("prt_gld.gat");
+ mes "- Castle 1 - Creamhilt: "+getmapusers("prtg_cas01.gat");
+ mes "- Castle 2 - Sbanhealt: "+getmapusers("prtg_cas02.gat");
+ mes "- Castle 3 - Lazrigees: "+getmapusers("prtg_cas03.gat");
+ mes "- Castle 4 - Squagul: "+getmapusers("prtg_cas04.gat");
+ mes "- Castle 5 - Guindull: "+getmapusers("prtg_cas05.gat");
+ next;
+ callfunc "F_keIntro", -1, "";
+ break;
+ }
+ } while (@kmenu > 1);
+ return;
+
+function SF_dungeons {
+ do {
+ if ($@kewg_showOnline) {
+ set @submenu, select(
+ "- Cancel",
+ "- Baldur Dungeon ("+($@kewg_baldur*@cost/100)+"z/"+getmapusers("gld_dun01.gat")+" "+$@ked_users$+")",
+ "- Luina Dungeon ("+($@kewg_luina*@cost/100)+"z/"+getmapusers("gld_dun02.gat")+" "+$@ked_users$+")",
+ "- Valkyrie Dungeon ("+($@kewg_valkyrie*@cost/100)+"z/"+getmapusers("gld_dun03.gat")+" "+$@ked_users$+")",
+ "- Britoniah Dungeon ("+($@kewg_britoniah*@cost/100)+"z/"+getmapusers("gld_dun04.gat")+" "+$@ked_users$+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Cancel",
+ "- Baldur Dungeon ("+($@kewg_baldur*@cost/100)+"z)",
+ "- Luina Dungeon ("+($@kewg_luina*@cost/100)+"z)",
+ "- Valkyrie Dungeon ("+($@kewg_valkyrie*@cost/100)+"z)",
+ "- Britoniah Dungeon ("+($@kewg_britoniah*@cost/100)+"z)"
+ );
+ }
+ switch (@submenu) {
+ case 2: //Baldur
+ callfunc "F_keWarp",$@kewg_baldur,$@kewg_discount,44,"gld_dun01.gat",119,18;
+ break;
+ case 3: //Luina
+ callfunc "F_keWarp",$@kewg_luina,$@kewg_discount,44,"gld_dun02.gat",174,113;
+ break;
+ case 4: //Valkyrie
+ callfunc "F_keWarp",$@kewg_valkyrie,$@kewg_discount,44,"gld_dun03.gat",37,34;
+ break;
+ case 5: //Britoniah
+ callfunc "F_keWarp",$@kewg_britoniah,$@kewg_discount,44,"gld_dun04.gat",42,230;
+ break;
+ }
+ } while (@submenu > 1);
+}
+
+}
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/readme.txt b/npc/custom/eAAC_Scripts/kafraExpress/readme.txt
index 8952d1913..d37b025e9 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/readme.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/readme.txt
@@ -1,1170 +1,1170 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Kafra Express Script Package Documentation %
-% - by Skotlex %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-This file's purpose is to give an indepth explanation about setting up, and
-configuring the Kafra Express Script Package (KESP). It is intended to be
-viewed by a text editor using fixed-width font and 80-character long lines.
-
-Document Version v1.9 (15/June/2006)
-////////////////////////////////////////////////////////////////////////////////
-Table of Contents
-////////////////////////////////////////////////////////////////////////////////
-[00] Including the NPC files and menu editing
-[01] Intro to module configuring and general options (config.txt)
-[02] Module: Main Core (ke_main.txt)
-[03] Module: Bank (ke_bank.txt)
-[04] Module: Broadcast (ke_broadcast.txt)
-[05] Module: Stylist (ke_dye.txt)
-[06] Module: Job Changer (ke_jobchange.txt)
-[07] Module: Job Swapper (ke_jobswap.txt)
-[08] Module: Smithery (ke_refine.txt)
-[09] Module: Renting (ke_refine.txt)
-[10] Module: Kafra Shop (ke_shop.txt)
-[11] Module: Stat/Skill Market (ke_statmarket.txt)
-[12] Module: Stat/Skill Resets/Raising (ke_stats.txt)
-[13] Module: Uncarding (ke_uncard.txt)
-[14] Module: Town Warping (ke_warp_town.txt)
-[15] Module: Dungeon Warping (ke_warp_dungeon.txt)
-[16] Module: PvP Warping (ke_warp_pvp.txt)
-[17] Module: WoE Warping (ke_warp_woe.txt)
-[18] The kafras.txt file: About Kafra Definitions
-
-////////////////////////////////////////////////////////////////////////////////
-[00] Including the NPC files and menu editing
-////////////////////////////////////////////////////////////////////////////////
-
-Because of the script's complexity, placing everything in a single file
-is out of the question, therefore the KESP comes bundled in different
-files. Because of the dynamic nature of the script, there are two things
-you need to do in order to enable/disable a particular service:
-
-1. Include the txt file with the corresponding module.
-To include the txt files, you need to know two things: where are the script
-files located, and which is the configuration file where you place the npc
-includes. We'll assume on this guide that you unpacked the KESP in
-npc/custom/kafraExpress. The configuration file for scripts is
-conf/map_athena.conf for eA1.0rc5, and npcs/scripts_custom.txt for current eA
-SVN versions. Add the files you want in the following manner:
-
- npc: npc/custom/kafraExpress/ke_main.txt
- //npc: npc/custom/kafraExpress/ke_rent.txt
-
-The first line is including the file ke_main.,txt, while the following
-excludes ke_rent from being used. Placing the "//" at the beginning of the
-line is known as commenting, and it's a useful way of quickly toggling a
-certain script on/off. The following is the list of all files that come
-bundled in the package:
-
-npc: npc/custom/kafraExpress/kafras.txt
-npc: npc/custom/kafraExpress/config.txt
-npc: npc/custom/kafraExpress/ke_main.txt
-
-npc: npc/custom/kafraExpress/ke_bank.txt
-npc: npc/custom/kafraExpress/ke_broadcast.txt
-npc: npc/custom/kafraExpress/ke_dye.txt
-npc: npc/custom/kafraExpress/ke_jobchange.txt
-npc: npc/custom/kafraExpress/ke_jobswap.txt
-npc: npc/custom/kafraExpress/ke_rent.txt
-npc: npc/custom/kafraExpress/ke_shop.txt
-npc: npc/custom/kafraExpress/ke_statmarket.txt
-npc: npc/custom/kafraExpress/ke_stats.txt
-npc: npc/custom/kafraExpress/ke_refine.txt
-npc: npc/custom/kafraExpress/ke_uncard.txt
-npc: npc/custom/kafraExpress/ke_warp_dungeon.txt
-npc: npc/custom/kafraExpress/ke_warp_pvp.txt
-npc: npc/custom/kafraExpress/ke_warp_town.txt
-npc: npc/custom/kafraExpress/ke_warp_woe.txt
-
-What files can be commented, which files you want to include? On the minimum,
-you need ke_main.txt, kafras.txt and config.txt to have the bare-bones functionality.
-Refer to the table of context to see the relation between files and the
-services they offer.
-
-2. Configure the Menus
-The second part of the configuration is adding/removing the menu entries that
-lead to the specific services. Failure to do this can either A. leave you with
-menu entries that lead to "Function Not found!" errors on the map server, or
-B. Services that were included, but you can't pick because they don't show up
-in the menu. The main file where you should configure the menus is ke_main.txt.
-
-From the main module, ke_main.txt, you must pick which services are available.
-The file contains eight menu sections, which is made up of two pairs of
-identitical menus. The only difference is that the first menu is displayed on
-Kafras placed on towns, while the second menu is for Kafras placed on fields and
-dungeons. The menu roughly looks like this:
-
- menu
- "- Leave",L_END,
- "- Heal Service ("<some code here>"z/10SP)",L_HEAL,
- "- Warp Service",L_WARP,
-// "- Use Storage ("<some code here>"z)",L_STORAGE,
-// "- Use Guild Storage ("<some code here>"z)",L_GUILD_STORAGE,
- "- Job Services",M_JOB,
- "- Other Services",M_OTHER,
- "- Save Respawn point",L_SAVE;
-
-This is the main menu, as you can see the only service unavailable is to use
-the storage. Like in the npc/config file, you can comment the lines of the
-services you do not want.
-
-WARNING: If you need to comment the last option of a menu, remember to replace
-the comma for a semi-colon on the next-to-last option or script parsing errors
-will occur.
-
-The "Warp Service" leads to the second pair of menus you can configure:
-
- menu
- "- Return",-,
- "- Dungeons",L_DUNGEON,
-// "- PvP Arena",L_PVP,
-// "- Guild Wars",L_GUILD_DUNGEON,
- "- Towns",L_TOWN;
- goto M_INIT;
-
-As before, you can comment/uncomment the features you want or not. Likewise,
-the third menu under "Job Services" contains features related to job changing,
-stats/skills and renting. The fourth pair is the "Other Services" menu which
-contains the rest of modules which are probably not going to be used
-frequently.
-
-For your convenience, the following is the list of all the menu options and the file(s) required for it to work:
-
-//Main Menu (under labels M_INIT/MD_INIT)
-
- "- Heal Service" -> ke_main.txt
- "- Warp Service"
- "- Use Storage" -> ke_main.txt
- "- Use Guild Storage" -> ke_main.txt
- "- Job Services"
- "- Other Services"
- "- Save Respawn point" -> ke_main.txt
-
-//Warp Menu (under labels M_WARP/MD_WARP)
-
- "- Dungeons" -> ke_warp_dungeon.txt
- "- PvP Arena" -> ke_warp_pvp.txt
- "- Guild Wars" -> ke_warp_gvg.txt
- "- Towns" -> ke_warp_town.txt
-
-//Job Services Menu (under labels M_JOB/MD_JOB)
-
- "- Change Job" -> ke_jobchange.txt
- "- Swap Job" -> ke_jobswap.txt
- "- Stat/Skill Services" -> ke_stats.txt
- "- Stat/Skill Market" -> ke_statmarket.txt
- "- Rental Service" -> ke_rent.txt
-
-//Other Services Menu (under labels M_OTHER/MD_OTHER)
-
- "- Bank Services" -> ke_bank.txt
- "- Use Kafra Shop" -> ke_shop.txt
- "- Broadcast a message" -> ke_broadcast.txt
- "- Refine Services" -> ke_refine.txt
- "- Uncard Services" -> ke_uncard.txt
- "- Stylist Service" -> ke_dye.txt
- "- Use a Kafra Pass" -> ke_main.txt
-
-////////////////////////////////////////////////////////////////////////////////
-[01] Intro to individual module configuration.
-////////////////////////////////////////////////////////////////////////////////
-
-For portability reasons, the configure options for every module is in the file
-config.txt, which lets you upgrade to future versions without having to
-readjust your settings every time.
-The config file has the options separated per module to make it easier to
-read. There may be bits of code in each section to avoid parsing configure
-options for unneeded variables which should be left alone. In some rare
-occassions variables from one module will be used in a different module (ie:
-Broadcasting PvP messages uses the variables from the pvp module). all variables
-follow the standard "ke<module initials>_variablename", so a variable called
-"kewd_discount" refers to the discount variable in the deep warps module (wd).
-For example, the renting module's configuration segment is:
-
- //-------------------------------------------------------------------------------
- //Config for the Renting Module
- //-------------------------------------------------------------------------------
-OnLoadRent:
- set $@kert_cartOnly, 0; //Set to 1 to enable only cart rental, 0 enables all add-ons.
- set $@kert_cartCost, 2000; //Cost to rent a Cart.
- set $@kert_falconCost, 2000; //Cost to rent a Falcon.
- set $@kert_pecoCost, 2000; //Cost to rent a PecoPeco.
- end;
-
-Variables are usually of two types: Exact value based or Percentage based.
-Exact value variables are often price for different services, while the
-percentage based are things like 30% discount when using Kafra Passes.
-Percentage values are expressed per-hundredth (that is, 10 = 10%, 100 = 100%)
-unless otherwise specified.
-
-Each variable has a small description next to it, hence the need of this
-document. In this document the variable type is identified next to it by: (1)
-when it's boolean, (%) when it's a percentage, ($) when it's a price, (#) for
-numbers and (") for strings.
-
-////////////////////////////////////////////////////////////////////////////////
-[02] Module: Main Core (ke_main.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-This module offers the core functionality of the Kafra Express. Contains the
-main menu and handles the Kafra Pass Reserve Points system.
-
-Variables
-================================================================================
-
-(1) ke_saveOnSpot
------------------
-When 1, a character's respawn point is saved exactly where they are standing.
-otherwise, the respawn point is specified by the kafra definition (see Section
-18).
-
-($) keh_hpCost
-($) keh_spCost
---------------
-The cost of healing sp per every 10 sp. For example, if the cost is 1, it
-costs 100z to heal 1000.
-
-($) kes_cost
-($) kegs_cost
--------------
-The cost of using the storage, guild storage (respectively)
-
-(1) kekp_reset
---------------
-For Kafra Passes. When 1, the Pass expires when starting a chat with the
-Kafra. Otherwise the variable remains active a pretty long time (probably all
-session).
-
-($) kekp_reserveCost
---------------------
-The cost in zeny of reserve points. When using a Kafra Pass many services will
-be cheaper, the amount of zeny saved is "used" to grant the player reserve
-points. For example, if the reserve cost is 100, for every 100z the player
-saves, he'll earn 1 reserve points. Reserve points can be used in scripts, and
-by default is used in the Al De Baran Kafra Headquarters to gain items. Use a
-value of 0 to disable Reserve Point gaining.
-
-(#) kekp_minReserve
-(#) kekp_maxReserve
----------------
-What is the minimum/maximum reserve points the player can gain when using a
-Kafra Pass per transaction? This only applies when the player has saved at
-least 1z.
-
-(") ked_users
--------------
-Certain modules (in particular, the warping ones) have the ability to display
-the number of players related to the function (ie: number of users in a
-dungeon), in such cases this variable is used to display the 'unit' of said
-count. For example, if ked_users is "kids" then the related modules might
-display things like "- Glast Heim (6 kids)".
-
-////////////////////////////////////////////////////////////////////////////////
-[03] Module: Bank (ke_bank.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-This modules enables characters to "store" zeny on a virtual bank account
-which is shared among characters of the same account. There can be deposits,
-withdrawals, which can have transactions fees associated.
-
-It is also possible to establish a monthly maintenance fee that has to be
-payed, when the player does not has enough money in the account to pay this
-fee, they stop gaining interests until they deposit enough to pay it up.
-Finally, all fees charged by the bank can be stored in a server-wide variable
-which may be used by other custom scripts.
-
-Variables
-================================================================================
-
-(%) kebk_depositCost
-(%) kebk_withdrawCost
----------------------
-The Fee in % charged whenever a player does a deposit/withdrawal. For example,
-when a player deposits 100z and the fee is 3%, only 97z are deposited, and 3z
-are charged. Likewise, if a player withdraws 100z when the fee is of 5%,
-they'll withdraw 100z and an additional 5z will be removed from their accounts
-as fee cost.
-
-($) kebk_minTransact
-($) kebk_maxTransact
---------------------
-The minimum/maximum values of a single transaction (deposit or withdrawal)
-
-($) kebk_capacity
------------------
-Indicates what is the bank account capacity for players. That is, what is the
-maximum zeny their account can hold. You can't deposit anymore once the max
-has been reached, and daily interests are lost while maxed.
-
-(%) kebk_dayInterest
---------------------
-The daily interests that the account makes. The value is in 0.01% units, so a
-value of 100 equals 1% daily interests.
-
-($) kebk_monMaintenance
------------------------
-Monthly flat fee charged for maintenance.
-
-(1) kebk_useGlobalBank
-----------------------
-When 1, every fee charged from the player goes into a server variable
-($ke_globalbank), which can then be used by other scripts. is 0 by default
-because none of the Kafra Express modules uses it.
-
-////////////////////////////////////////////////////////////////////////////////
-[04] Module: Broadcast (ke_broadcast.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Provides broadcasting services for players. Broadcasts can be local (current
-map only) or global (server announce), there are also four types of broadcast:
-Requests for a party, PvP Challenge invitations, General Broadcasts (player
-input the string they want to say) and General Anonymous Broadcasts (player
-name is not displayed when doing the broadcast).
-
-Note that the variables from ke_warp_pvp.txt will be used for auto-configuring
-the pvp broadcasts.
-
-Variables:
-================================================================================
-
-(1) kebc_showOnline
--------------------
-When 1, the total count of players will be displayed in the menu (map users
-next to the local broadcast entry, server users next to the global broadcast
-entry).
-
-($) kebc_partyCost
-($) kebc_pvpCost
-($) kebc_cost
-($) kebc_anonCost
-------------------
-Respective base costs for doing Party-Requests/Pvp Challenge/General/Anonymous
-broadcasts.
-
-(%) kebc_globalFactor
----------------------
-When the broadcast is global, the base cost is multipled by this factor. If
-the factor is 500, then global broadcasts cost 5x times the cost of the map's
-broadcast.
-
-(%) kebc_discount
------------------
-Discount on broadcast prices when the Kafra Pass is active.
-
-////////////////////////////////////////////////////////////////////////////////
-[05] Module: Stylist (ke_dye.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Offers cloth dye, hair dye and hair style changes, both by input and by wheel
-browsing. Does not consumes dyestuffs because it is designed for custom dye
-packages.
-
-Variables
-================================================================================
-
-(1) kedy_enableHairstyle
-------------------------
-If one, the menu will include hair-style changing options, otherwise only
-dye-changes are offered
-
-(#) kedy_styles
----------------
-Specifies the number of available hair styles
-
-(#) kedy_hair
--------------
-Specificies the number of hair dyes
-
-(#) kedy_clothJN
-(#) kedy_clothJ1ST
-(#) kedy_clothJ2ND
-(#) kedy_clothJSN
-(#) kedy_clothJWED
-------------------
-Specifies the number of cloth dyes based on job-type: Novices, First Classes,
-Second Classes, Super Novices, Wedding Class.
-
-////////////////////////////////////////////////////////////////////////////////
-[06] Module: Job Changer (ke_jobchange.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Offers job changing, including rebirth and baby classes. The rebirth system
-can allow people free changing through a different path, or forcing the
-correct path. Zeny can be charged/granted as well as weapons on job-change.
-Remaining Skill Points can be wiped, ignored or prevent the change from
-happening. Before changing players can review the consequences of doing so,
-including weapons to gain.
-
-Finally, there's an option that makes it possible to skip the novice class
-altogether and change directly to first jobs.
-
-Variables
-================================================================================
-
-(#) kejc_skillsPolicy
----------------------
-Determines what to do with remaining skill points upon change:
- 0: No job changing until points are used.
- 1: Extra Skill Points are wiped.
- 2: Extra skill points are conserved.
-
-(#) kejc_upperPolicy
---------------------
-What to do about the advanced classes?
- 0: Free for all, players can pick any advanced job regardless of the previous.
- 1: Force mode, classes are auto-selected from the previous path. In the
- case the path could not be determined (players changed jobs previously
- using other npcs), players will be able to select their next job.
-
-(1) kejc_announce
------------------
-When 1, a global announce will be done upon change.
-
-(1) kejc_resetDye
------------------
-If one, the cloth dye is reset upon changing.
-
-(1) kejc_skipNovice
--------------------
-If one, players can skip the novice class and directly into their first job.
-Exploit proof, skills are wiped when changing to a 1st class this way, and
-their basic skill level is set to 9.
-
-(#) kejc_baseSN
----------------
-Base Level required before changing into a Super Novice.
-
-(#) kejc_base2ND
-(#) kejc_job2ND
-(#) kejc_cost2ND
-----------------
-Base level, Job level and zeny required to change into a second job. If the
-cost is below zero, zeny will be given to the player instead of charged.
-
-(#) kejc_baseRebirth
-(#) kejc_jobRebirth
-(#) kejc_costRebirth
---------------------
-Base level, Job level and zeny required before doing a rebirth (change to High
-Novice).
-
-(1) kejc_rebirthReset
----------------------
-If 1, when changing into a HighNovice characters will have their level reset
-to 1 (with the additional 100 stat points)
-
-(1) kejc_weaponPolicy
----------------------
-If 1, characters will get a weapon upon job change. For each first&second
-class there are two weapons to specify, the standard weapon and the "premium"
-one.
-
-(#) kejc_wBonusLv
------------------
-When characters reach this job level, they will receive the premium weapon instead of the normal one. If 0, premium weapons are disabled.
-
-(#) kejc_wAcolyte
-(#) kejc_wArcher
-(#) kejc_wMage
-(#) kejc_wMerchant
-(#) kejc_wSwordman
-(#) kejc_wThief
-(#) kejc_wSuperNovice
-(#) kejc_wPriest
-(#) kejc_wMonk
-(#) kejc_wHunter
-(#) kejc_wBard
-(#) kejc_wDancer
-(#) kejc_wWizard
-(#) kejc_wSage
-(#) kejc_wBlacksmith
-(#) kejc_wAlchemist
-(#) kejc_wKnight
-(#) kejc_wCrusader
-(#) kejc_wAssassin
-(#) kejc_wRogue
------------------------
-ID of the normal weapons received upon job change (if weapon policy is in
-effect).
-
-(#) kejc_w2Priest
-(#) kejc_w2Monk
-(#) kejc_w2Hunter
-(#) kejc_w2Bard
-(#) kejc_w2Dancer
-(#) kejc_w2Wizard
-(#) kejc_w2Sage
-(#) kejc_w2Blacksmith
-(#) kejc_w2Alchemist
-(#) kejc_w2Knight
-(#) kejc_w2Crusader
-(#) kejc_w2Assassin
-(#) kejc_w2Rogue
---------------------
-ID of the premium weapons received upon job chane (if bonus weapon policy is
-in effect). Note that first classes can't get a bonus weapon.
-
-////////////////////////////////////////////////////////////////////////////////
-[07] Module: Job Swapper (ke_jobswap.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Permits characters to change jobs among other jobs of their same "level".
-This is, between first classes or between second classes. It is also possible
-to store the last job used and revert to it at a later date. Dye, Job Level
-and Skill Point count is saved, however the skill-tree is not saved and skills
-need be reallocated. When reverting to the previous class, characters might be
-able to return from an adv class to a normal one, but if they are baby
-classes, they can't change back to a normal one.
-
-Variables
-================================================================================
-
-(1) kejs_SNpolicy
------------------
-Determines what to do with Super Novices. if 0, they can't swap jobs, if 1,
-they are considered first classes.
-
-(#) kejs_revertPolicy
----------------------
-Determines if Reverting classes is possible and when:
- 0: Cannot go back to the previous job.
- 1: Can only go back if the previous job belongs to the same type as the
- first (is also a 1st/2nd job and is the same normal/adv/baby category).
- 2: Can return to the previous job regardless (exception: when one of the
- two jobs is a baby job and the other is not).
-
-(1) kejs_announce
------------------
-If 1 does a server announce when swapping jobs.
-
-($) kejs_revertCost
--------------------
-Cost of changing to the previous job.
-
-(1) kejs_saveDye
-----------------
-If one, the dye is saved when swapping and restored upon revert.
-
-(1) kejs_resetDye
------------------
-If 1 the clothe dye is reset upon swap.
-
-(%) kejs_swapDiscount
-(%) kejs_revertDiscount
------------------------
-Discount % to apply when the kafra pass is active for swapping/reverting.
-
-(#) kejs_job1ST
-(#) kejs_job2ND
----------------
-Minimum job level before being able to swap among 1st/2nd classes.
-
-($) kejs_cost1ST
-($) kejs_cost2ND
-----------------
-Base cost of swaping jobs.
-
-(%) kejs_discount1ST
-(%) kejs_discount2ND
---------------------
-Discount % to apply to the base cost for every job level above the minimum
-required. For example, if the discount is 1% per level and you change when you
-have +10 level more than the min necessary, you get a 10% discount.
-
-(%) kejs_preserve1ST
-(%) kejs_preserve2ND
---------------------
-Indicates how much of the previous job level to preserve when changing. For
-example, if the preserve value is 50 (50%) and you change from a level 40
-Knight into Priest, you'll become a lv 20 Priest. Skill points are adjusted
-accordingly so it's exploit-free.
-
-////////////////////////////////////////////////////////////////////////////////
-[08] Module: Smithery (ke_refine.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Offers the services usually found in the town smithery and then some more:
-Item refining, Item Repairing, Ore Purification (rough oris -> pure ones).
-Also sells Phracon and Emveretarcon.
-
-Item refining can follow all the rules of normal refining, but it can also
-override them to refine everything, or safe refines up to max level.
-
-Ore Purification can be extended to include all the rough materials that
-blacksmiths can purify (star dust -> star crumbs, for example).
-
-Variables
-================================================================================
-
-(#) kerf_maxLv
---------------
-Maximum refinement level of equipment.
-
-(1) kerf_safe
--------------
-If 1 success chances are ignoring and refining never fails.
-
-(1) kerf_showChance
--------------------
-If 1 the chance of success/failure is actually shown before confirming.
-
-(1) kerf_refineAll
-------------------
-If 1 then unrefinable items will be refined too (like accesories)
-
-(%) kerf_discount
------------------
-Discount rate to be applied during forging when the Kafra Pass is active.
-
-($) kerf_armorCost
-($) kerf_weaponLv1Cost
-($) kerf_weaponLv2Cost
-($) kerf_weaponLv3Cost
-($) kerf_weaponLv4Cost
-----------------------
-Cost per level to refine armors, and level 1/2/3/4 weapons.
-
-(1) kerf_purifyAll
-------------------
-If 1, the extended purify menu will be used, which shows how to purify steels,
-star crumbs, etc; otherwise, just elus and oris are available.
-
-($) kerf_repairCost
--------------------
-Cost of repairing a broken weapon.
-
-(%) kerf_repairDiscount
------------------------
-Repair Discount% when the kafra pass is active.
-
-(1) kerf_repairSteel
---------------------
-If 1, a steel will be required to repair items.
-
-////////////////////////////////////////////////////////////////////////////////
-[09] Module: Renting (ke_refine.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Allows renting of Cart/Falcon/PecoPeco. Note that the only restriction applied
-is whether the character has "PushCart", "Falcon Taming" or "PecoPeco Riding",
-it does not checks for the character's class.
-
-It must also be noted that renting is free while the Kafra Pass is active.
-
-Variables
-================================================================================
-
-(1) kert_cartOnly
------------------
-If 1, this module only offers cart rentals. Otherwise you can rent any of the three.
-
-($) kert_cartCost
-($) kert_falconCost
-($) kert_pecoCost
--------------------
-Cost for renting carts/falcons/pecos.
-
-////////////////////////////////////////////////////////////////////////////////
-[10] Module: Kafra Shop (ke_shop.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Allows invoking of a shop from the Kafra. Note that the shops must be of
-invisible type (ke_shop.txt has an example of two such shops). The config
-enables you to select whether the shop will allow buying, selling or
-both, as well as the name of the shops to use in towns or dungeons (if you
-want to use a custom shop defined elsewhere or want to use the same shop for
-both).
-
-Variables
-================================================================================
-
-(#) $@kesh_towntype
-(#) $@kesh_duntype
--------------------
-Specifies the type of transaction allowed at the shop. Use 1 to enable only
-buying of items, 2 for only selling, or any other value for both.
-
-(#) $@kesh_townshop$
-(#) $@kesh_dunshop$
---------------------
-Specifies the name of the shop to use for buying/selling of items. By default
-the file includes two such shops which you can use, or you can disable them
-and specify your own in the config changing these variables.
-
-////////////////////////////////////////////////////////////////////////////////
-[11] Module: Stat/Skill Market (ke_statmarket.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Not really a "market", this module lets players sell and buy stat/skill
-points. Also allows for direct trading between stats/skills.
-
-NOTE: Selling stat points can lead to zeny exploits if your server uses the
-stat_db.txt file, because players can then sell all their stat points, do a
-reset and get them back! To prevent this, set the following battle config
-option:
- use_statpoint_table: no
-Alternatively, you can set the selling point of statpoints to be 0z.
-
-Variables
-================================================================================
-
-($) kesm_stBuyPrice
-($) kesm_stSellPrice
---------------------
-Price for every stat point to be bought/sold.
-
-($) kesm_skBuyPrice
-($) kesm_skSellPrice
---------------------
-Price for every skill point to be bought/sold.
-
-(%) kesm_discount
------------------
-Discount price when kafra pass is active. Only applies to buying stats/skills.
-
-(#) kesm_skTradePrice
-(#) kesm_stTradePrice
----------------------
-These two define how many stat points are traded per each skill point when
-doing a direct conversion between stats/skills. The idea is that trading
-directly one for the other should be cheaper than selling them and then buying
-from the other. You can set both to the same value and the trading will have
-no loss.
-Notice that skTradePrice is the cost for converting stats to skills and
-stTradePrice is the cost for converting skills to stats. So... NEVER set
-stTradePrice higher than skTradePrice or you allow an easy exploit of infinite
-stats/skills!
-
-////////////////////////////////////////////////////////////////////////////////
-[11] Module: Stat/Skill Resets/Raising (ke_stats.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Does stat/skills resets, and additionally helps characters raise their basic
-stats faster. Optionally, skill resets will not touch the basic-skill level.
-Price have two components: base fee and per level fee, so characters with
-higher levels will have to pay more for a reset than low level ones.
-For stat resetting, base level is taken into account. For skill resets, job
-levels. For a dual reset, the addition of both is considered. Also, when taken
-into consideration job level for second classes, the job-level at which one
-changed jobs is also considered. So a Job level 1 Knight actually has job
-level of 41~51.
-
-NOTE: Be careful with quest skills. If your server is configured to reset
-quest skills and players can get their quest skills for free, you are letting
-them exploit the system and get unlimited skill points! (even worse if they
-can sell'em in the Stat/Skills market module). Be sure to either remove free
-quest skills npcs or make quest skills not resetable.
-
-Variables:
-================================================================================
-
-($) kest_stResetCost
---------------------
-Base cost of doing a stat reset.
-
-($) kest_skResetCost
---------------------
-Base cost of doing a skill reset.
-
-($) kest_resetCost
-------------------
-Base cost of a dual reset.
-
-($) kest_BaseLvCost
--------------------
-Cost per Base level for doing a stat reset.
-
-($) kest_JobLvCost
-------------------
-Cost per Job level for doing a skill reset.
-
-($) kest_BothLvCost
--------------------
-Cost per Base+Job level for doing a dual reset.
-
-(%) kest_discount
------------------
-Discount % applied when Kafra Pass is active.
-
-(1) kest_resetBasic
--------------------
-If 1, the skill "basic skill" is also reset.
-
-////////////////////////////////////////////////////////////////////////////////
-[12] Module: Uncarding (ke_uncard.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-This module allows people to remove cards from their equipped items. Prices
-are modified by the item type, the amount of cards and the refine level of the
-item. There's also a chance the removal will fail and: Nothing is lost, the
-card or item is lost, both are lost. The procedure may also require up to two
-different items (and each one with their own specified qty).
-
-Variables:
-================================================================================
-
-($) keuc_BaseCost
------------------
-Base cost of uncarding, modified by the following conditions:
-
-($) keuc_CardCost
------------------
-Each card to be removed increases the total by this value.
-
-($) keuc_UpgradeCostA
-($) keuc_UpgradeCostW1
-($) keuc_UpgradeCostW2
-($) keuc_UpgradeCostW3
-($) keuc_UpgradeCostW4
-----------------------
-These indicate the price increase per refine level for armors and weapons
-levels 1/2/3/4. A +10 armor gets a price increases of ten times
-keuc_UpgradeCostA.
-
-(%) keuc_discount
------------------
-Discount % to apply when kafra pass is active.
-
-(#) keuc_Mat1
-(#) keuc_Qty1
--------------
-Id and Qty of the first material that is needed to uncard. If the qty is zero,
-then it's disabled.
-
-(#) keuc_Mat2
-(#) keuc_Qty2
--------------
-id & Qty of the second material to use. Only valid if the first material was
-also defined, use qty=0 to disable.
-
-(%) keuc_Fail0Chance
---------------------
-This is the safe failure chance (0-1000, where 1000 = 100.0%). A Safe failure
-means the original item remains intact, but you are still charged the money
-and the materials. Use 0 to disable this type of failure.
-
-(%) keuc_Fail1Chance
---------------------
-This is the partial failure chance (0-1000). Partial failures are when either
-the cards or the item is lost. The player gets to choose which one is more
-important before proceeding. Use 0 to disable.
-
-(%) keuc_Fail2Chance
---------------------
-Total failure chance (0-1000). When this triggers, both item and cards are
-lost. Use 0 to disable.
-
-////////////////////////////////////////////////////////////////////////////////
-[14] Module: Town Warping (ke_warp_town.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-This module enables warping to towns. Currently all towns have the same
-warping cost, independent of how far away they are placed. The only exception
-is Niflheim, which is more of a dungeon than a town.
-
-Variables
-================================================================================
-
-(1) kewt_showOnline
--------------------
-If set to 1, the menus will display the online count of players in
-towns.
-
-($) kewt_cost
--------------
-Cost of warping to a town.
-
-($) kewt_niflCost
------------------
-Cost of warping to Niflheim. Different cost since Niflheim is more of a
-dungeon than a city. Also, players can't warp to Niflheim until they do the
-Niflheim Piano Key Quest.
-
-(#) kewt_travel
----------------
-Allows enabling the traveller system. The traveller system makes it so you can't
-warp to a town until you have been there first by some other means (usually
-walking) and saved with the Kafra Express in that town.
-There are three valid values for this variable: 0, 1, 2.
-0 - Disables this mode.
-1 - Uses the mode on a per character basis; that is, each character needs to
-travel to that town and save and that unlocks warping only for that
-character.
-2 - Uses the mode on a per account basis; that is, once a character has saved
-on a town, all other (and future) characters from the same account have the
-warp unlocked.
-
-(1) kewt_free
--------------
-If 1, players will be able to warp to towns even if they run out of money.
-Niflheim excepted.
-
-(%) kewt_discount
------------------
-Discount % to apply when warping while the Kafra Pass is active.
-
-////////////////////////////////////////////////////////////////////////////////
-[15] Module: Dungeon Warping (ke_warp_dungeon.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-Offers warps to all dungeons. Dungeon warping has two main operation modes:
-Deep Dungeon Warping and Short Dungeon Warping. Deep Dungeon warping enables
-players to warp to any level of any dungeon, while Short Dungeon Warping is
-restricted to warping only to the entrance of the dungeon. Traveller's mode is
-also available for dungeons.
-
-Variables
-================================================================================
-
-(1) kewd_showOnline
--------------------
-If set to 1, the menus will display the online online count of characters in
-the dungeons.
-
-(%) kewd_discount
------------------
-Discount % to apply when warping while the Kafra Pass is active.
-
-(#) kewd_travel
----------------
-Enables the traveller system. Just like the traveller's system for towns,
-you can't warp to any dungeon to which you have not visited first on foot and
-saved with the corresponding Kafra Express first.
-If 1, traveller's mode is enabled on a per character basis (so once a
-character saves, only that character has unlocked the warp).
-If 2, traveller's mode is enabled on a per account basis (so once a character
-saves, all charaters of the corresponding account have the warp unlocked).
-
-(1) kewd_deep
--------------
-This variable decides whether deep or short warps will be used. There's no
-need to set it as it will be set automatically based on which file was
-included (ke_warp_short.txt or ke_warp_deep.txt).
-
-(%) kewd_levelCost
-------------------
-This variable only applies to deep warps. It indicates in percentage the cost
-increase per level. For example, if the dungeon costs 1000z to warp to, and
-the levelCost increase is of 50 (50%) then warping to level 2 costs 1500, lv3
-costs 2000, and so on.
-
-(%) kewd_entryDiscount
-----------------------
-The discount for using the Kafra in the dungeon entrance to warp within the
-dungeon. For example, if you use the Kafra next to Payon dungeon to warp to
-Payon Dungeon lv5, this discount is then applied. This variable only makes
-sense on deep warp mode.
-
-(1) kewd_turtleCave
--------------------
-Only used on short warps. If 1, then warping to Turtle Dungeon should lead
-directly to the cave's entrance, otherwise it warps you to the Island's
-entrance.
-
-($) kewd_amatsu
-($) kewd_antHell
-($) kewd_ayothaya
-($) kewd_byalan
-($) kewd_comodo
-($) kewd_clockTower
-($) kewd_coalMines
-($) kewd_culvert
-($) kewd_gefenia
-($) kewd_geffen
-($) kewd_glastHeim
-($) kewd_gonRyun
-($) kewd_hiddenTemple
-($) kewd_louYang
-($) kewd_magma
-($) kewd_orc
-($) kewd_payon
-($) kewd_pyramids
-($) kewd_sphinx
-($) kewd_sunkenShip
-($) kewd_toyFactory
-($) kewd_turtleIsland
-($) kewd_umbala
----------------------
-Base cost of warping to each dungeon, that is, the entrance level cost.
-
-////////////////////////////////////////////////////////////////////////////////
-[16] Module: PvP Warping (ke_pvp.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-The PvP warping module leads to the pvp maps named pvp_n_*-*.gat. It has two
-modes: simple and advanced. On simple mode, every player of every level gets
-thrown into the pvp_n_1-*.gat maps to nuke it out, on advanced mode each of
-the map groups gets their own range of permissible levels to enter. Since
-there is no sure way how characters should escape from a pvp map, they are
-currently given a butterfly wing when they warp.
-
-Variables
-================================================================================
-
-(1) kewp_showOnline
--------------------
-If 1, the menu entries will display the online count of players of each entry.
-
-(1) kewp_advanced
------------------
-Use the advanced pvp system if 1 (see module description)
-
-($) kewp_cost
--------------
-Cost of warping to the pvp rooms used in non-advanced rooms and "free for all"
-in advanced mode.
-
-($) kewp_cost1
-($) kewp_cost2
-($) kewp_cost3
-($) kewp_cost4
-($) kewp_cost5
-($) kewp_cost6
-($) kewp_cost7
---------------
-The costs for each of the pvp room groups in advanced mode.
-
-(#) kewp_baseLv1
-(#) kewp_baseLv2
-(#) kewp_baseLv3
-(#) kewp_baseLv4
-(#) kewp_baseLv5
-(#) kewp_baseLv6
-(#) kewp_baseLv7
-----------------
-These indicate the nominal base level for each room (which base level should
-characters be around to join it). Applicable only to advanced mode.
-
-(#) kewp_range
---------------
-Specifies how far away the character's level can be from the nominal value to
-still be allowed within the room. If the nominal level is 50 and the range is
-3, only characters with levels 47-53 may join.
-
-////////////////////////////////////////////////////////////////////////////////
-[17] Module: WoE Warps (warp_woe.txt)
-////////////////////////////////////////////////////////////////////////////////
-
-Description
-================================================================================
-This module allows characters to warp into the WoE grounds during (or out of)
-War of Emperium times. Players may warp directly into the Guild Dungeons if
-the proper lines are uncommented on the warp menu (See warp_woe.txt's header
-for the location of the menu entries):
-
- menu "- Cancel",-,
-// "- Guild Dungeons",M_DUNGEON,
- "- Al De Baran Guild ("<some code>"z)",L_ALDEBARAN,
- "- Geffen Guild ("<some code>"z)",L_GEFFEN,
- "- Payon Guild ("<some code>"z)",L_PAYON,
- "- Prontera Guild ("<some code>"z)",L_PRONTERA;
- return;
-
-Variables
-================================================================================
-
-(1) kewg_check
---------------
-Does a guild check. If 1, only characters who belong to a guild can use these
-warps.
-
-(1) kewg_checkAgit
-------------------
-Does the WoE times check. If 1, only during War of Emperium the warps will be
-active.
-
-(1) kewg_showOnline
--------------------
-Set to 1 to display in the menus the online count of players in each of the
-guild areas. It also adds a menu entry that displays the summary of players
-within each castle and guild grounds.
-
-(%) kewg_discount
------------------
-Discount % to be applied for warps while the Kafra Pass is active.
-
-($) kewg_baldur
-($) kewg_luina
-($) kewg_valkyrie
-($) kewg_britoniah
-------------------
-Costs to the respective guild dungeons when enabled.
-
-($) kewg_alDeBaran
-($) kewg_geffen
-($) kewg_payon
-($) kewg_prontera
-------------------
-Costs to each of the guild grounds.
-
-////////////////////////////////////////////////////////////////////////////////
-[18] The kafras.txt file: About Kafra Definitions
-////////////////////////////////////////////////////////////////////////////////
-
-The file kafras.txt contains the definition of the Kafras, which is the actual
-sprite on-screen that characters speak with. An enabled kafra may look like
-this:
-
-//Alberta
-alberta.gat,113,53,7 script Kafra Express 116,{
- callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"alberta.gat",116,57;
-}
-
-And a disabled/commented Kafra would look like this:
-
-//Prontera Guild Grounds
-//prt_gld.gat,127,163,5 script Kafra Express 115,{
-// callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"prt_gld.gat",129,170;
-//}
-
-For scripters, the way to define an NPC is not new, and beyond the scope of
-this document, so I'll only document the function "F_KafraExpress":
-
-F_KafraExpress (String "Kafra's name", String "kafra image file", int location, String map, int x, int save y)
-
-The first parameter, the Kafra's name, is the name that will be displayed all
-over the dialogue windows. The Kafra Image file is the image that is to be
-displayed on the screen during the npc chat (without the extension). You can
-use "" to disable the image.
-
-Location refers to the type of Kafra. Type=0 refers to Kafras in towns while
-Type=1 refers to Kafras placed in the wild, ie: in dungeons. Type=2 is for
-Kafras that should count as both town & dungeon. Under these situations, the
-menus displayed are those of the town, the type is used for the traveller's
-warping mode. Finally, Type=3 is a special type used only for the Niflheim
-Kafra.
-
-The last three Parameters are used to define the save location when you save
-your respawn. They are not needed if you use the "Save-on-spot" feature, but
-it's recommended to pass them nevertheless. Note that the map name will still
-be used when using traveller's mode.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Kafra Express Script Package Documentation %
+% - by Skotlex %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+This file's purpose is to give an indepth explanation about setting up, and
+configuring the Kafra Express Script Package (KESP). It is intended to be
+viewed by a text editor using fixed-width font and 80-character long lines.
+
+Document Version v1.9 (15/June/2006)
+////////////////////////////////////////////////////////////////////////////////
+Table of Contents
+////////////////////////////////////////////////////////////////////////////////
+[00] Including the NPC files and menu editing
+[01] Intro to module configuring and general options (config.txt)
+[02] Module: Main Core (ke_main.txt)
+[03] Module: Bank (ke_bank.txt)
+[04] Module: Broadcast (ke_broadcast.txt)
+[05] Module: Stylist (ke_dye.txt)
+[06] Module: Job Changer (ke_jobchange.txt)
+[07] Module: Job Swapper (ke_jobswap.txt)
+[08] Module: Smithery (ke_refine.txt)
+[09] Module: Renting (ke_refine.txt)
+[10] Module: Kafra Shop (ke_shop.txt)
+[11] Module: Stat/Skill Market (ke_statmarket.txt)
+[12] Module: Stat/Skill Resets/Raising (ke_stats.txt)
+[13] Module: Uncarding (ke_uncard.txt)
+[14] Module: Town Warping (ke_warp_town.txt)
+[15] Module: Dungeon Warping (ke_warp_dungeon.txt)
+[16] Module: PvP Warping (ke_warp_pvp.txt)
+[17] Module: WoE Warping (ke_warp_woe.txt)
+[18] The kafras.txt file: About Kafra Definitions
+
+////////////////////////////////////////////////////////////////////////////////
+[00] Including the NPC files and menu editing
+////////////////////////////////////////////////////////////////////////////////
+
+Because of the script's complexity, placing everything in a single file
+is out of the question, therefore the KESP comes bundled in different
+files. Because of the dynamic nature of the script, there are two things
+you need to do in order to enable/disable a particular service:
+
+1. Include the txt file with the corresponding module.
+To include the txt files, you need to know two things: where are the script
+files located, and which is the configuration file where you place the npc
+includes. We'll assume on this guide that you unpacked the KESP in
+npc/custom/kafraExpress. The configuration file for scripts is
+conf/map_athena.conf for eA1.0rc5, and npcs/scripts_custom.txt for current eA
+SVN versions. Add the files you want in the following manner:
+
+ npc: npc/custom/kafraExpress/ke_main.txt
+ //npc: npc/custom/kafraExpress/ke_rent.txt
+
+The first line is including the file ke_main.,txt, while the following
+excludes ke_rent from being used. Placing the "//" at the beginning of the
+line is known as commenting, and it's a useful way of quickly toggling a
+certain script on/off. The following is the list of all files that come
+bundled in the package:
+
+npc: npc/custom/kafraExpress/kafras.txt
+npc: npc/custom/kafraExpress/config.txt
+npc: npc/custom/kafraExpress/ke_main.txt
+
+npc: npc/custom/kafraExpress/ke_bank.txt
+npc: npc/custom/kafraExpress/ke_broadcast.txt
+npc: npc/custom/kafraExpress/ke_dye.txt
+npc: npc/custom/kafraExpress/ke_jobchange.txt
+npc: npc/custom/kafraExpress/ke_jobswap.txt
+npc: npc/custom/kafraExpress/ke_rent.txt
+npc: npc/custom/kafraExpress/ke_shop.txt
+npc: npc/custom/kafraExpress/ke_statmarket.txt
+npc: npc/custom/kafraExpress/ke_stats.txt
+npc: npc/custom/kafraExpress/ke_refine.txt
+npc: npc/custom/kafraExpress/ke_uncard.txt
+npc: npc/custom/kafraExpress/ke_warp_dungeon.txt
+npc: npc/custom/kafraExpress/ke_warp_pvp.txt
+npc: npc/custom/kafraExpress/ke_warp_town.txt
+npc: npc/custom/kafraExpress/ke_warp_woe.txt
+
+What files can be commented, which files you want to include? On the minimum,
+you need ke_main.txt, kafras.txt and config.txt to have the bare-bones functionality.
+Refer to the table of context to see the relation between files and the
+services they offer.
+
+2. Configure the Menus
+The second part of the configuration is adding/removing the menu entries that
+lead to the specific services. Failure to do this can either A. leave you with
+menu entries that lead to "Function Not found!" errors on the map server, or
+B. Services that were included, but you can't pick because they don't show up
+in the menu. The main file where you should configure the menus is ke_main.txt.
+
+From the main module, ke_main.txt, you must pick which services are available.
+The file contains eight menu sections, which is made up of two pairs of
+identitical menus. The only difference is that the first menu is displayed on
+Kafras placed on towns, while the second menu is for Kafras placed on fields and
+dungeons. The menu roughly looks like this:
+
+ menu
+ "- Leave",L_END,
+ "- Heal Service ("<some code here>"z/10SP)",L_HEAL,
+ "- Warp Service",L_WARP,
+// "- Use Storage ("<some code here>"z)",L_STORAGE,
+// "- Use Guild Storage ("<some code here>"z)",L_GUILD_STORAGE,
+ "- Job Services",M_JOB,
+ "- Other Services",M_OTHER,
+ "- Save Respawn point",L_SAVE;
+
+This is the main menu, as you can see the only service unavailable is to use
+the storage. Like in the npc/config file, you can comment the lines of the
+services you do not want.
+
+WARNING: If you need to comment the last option of a menu, remember to replace
+the comma for a semi-colon on the next-to-last option or script parsing errors
+will occur.
+
+The "Warp Service" leads to the second pair of menus you can configure:
+
+ menu
+ "- Return",-,
+ "- Dungeons",L_DUNGEON,
+// "- PvP Arena",L_PVP,
+// "- Guild Wars",L_GUILD_DUNGEON,
+ "- Towns",L_TOWN;
+ goto M_INIT;
+
+As before, you can comment/uncomment the features you want or not. Likewise,
+the third menu under "Job Services" contains features related to job changing,
+stats/skills and renting. The fourth pair is the "Other Services" menu which
+contains the rest of modules which are probably not going to be used
+frequently.
+
+For your convenience, the following is the list of all the menu options and the file(s) required for it to work:
+
+//Main Menu (under labels M_INIT/MD_INIT)
+
+ "- Heal Service" -> ke_main.txt
+ "- Warp Service"
+ "- Use Storage" -> ke_main.txt
+ "- Use Guild Storage" -> ke_main.txt
+ "- Job Services"
+ "- Other Services"
+ "- Save Respawn point" -> ke_main.txt
+
+//Warp Menu (under labels M_WARP/MD_WARP)
+
+ "- Dungeons" -> ke_warp_dungeon.txt
+ "- PvP Arena" -> ke_warp_pvp.txt
+ "- Guild Wars" -> ke_warp_gvg.txt
+ "- Towns" -> ke_warp_town.txt
+
+//Job Services Menu (under labels M_JOB/MD_JOB)
+
+ "- Change Job" -> ke_jobchange.txt
+ "- Swap Job" -> ke_jobswap.txt
+ "- Stat/Skill Services" -> ke_stats.txt
+ "- Stat/Skill Market" -> ke_statmarket.txt
+ "- Rental Service" -> ke_rent.txt
+
+//Other Services Menu (under labels M_OTHER/MD_OTHER)
+
+ "- Bank Services" -> ke_bank.txt
+ "- Use Kafra Shop" -> ke_shop.txt
+ "- Broadcast a message" -> ke_broadcast.txt
+ "- Refine Services" -> ke_refine.txt
+ "- Uncard Services" -> ke_uncard.txt
+ "- Stylist Service" -> ke_dye.txt
+ "- Use a Kafra Pass" -> ke_main.txt
+
+////////////////////////////////////////////////////////////////////////////////
+[01] Intro to individual module configuration.
+////////////////////////////////////////////////////////////////////////////////
+
+For portability reasons, the configure options for every module is in the file
+config.txt, which lets you upgrade to future versions without having to
+readjust your settings every time.
+The config file has the options separated per module to make it easier to
+read. There may be bits of code in each section to avoid parsing configure
+options for unneeded variables which should be left alone. In some rare
+occassions variables from one module will be used in a different module (ie:
+Broadcasting PvP messages uses the variables from the pvp module). all variables
+follow the standard "ke<module initials>_variablename", so a variable called
+"kewd_discount" refers to the discount variable in the deep warps module (wd).
+For example, the renting module's configuration segment is:
+
+ //-------------------------------------------------------------------------------
+ //Config for the Renting Module
+ //-------------------------------------------------------------------------------
+OnLoadRent:
+ set $@kert_cartOnly, 0; //Set to 1 to enable only cart rental, 0 enables all add-ons.
+ set $@kert_cartCost, 2000; //Cost to rent a Cart.
+ set $@kert_falconCost, 2000; //Cost to rent a Falcon.
+ set $@kert_pecoCost, 2000; //Cost to rent a PecoPeco.
+ end;
+
+Variables are usually of two types: Exact value based or Percentage based.
+Exact value variables are often price for different services, while the
+percentage based are things like 30% discount when using Kafra Passes.
+Percentage values are expressed per-hundredth (that is, 10 = 10%, 100 = 100%)
+unless otherwise specified.
+
+Each variable has a small description next to it, hence the need of this
+document. In this document the variable type is identified next to it by: (1)
+when it's boolean, (%) when it's a percentage, ($) when it's a price, (#) for
+numbers and (") for strings.
+
+////////////////////////////////////////////////////////////////////////////////
+[02] Module: Main Core (ke_main.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+This module offers the core functionality of the Kafra Express. Contains the
+main menu and handles the Kafra Pass Reserve Points system.
+
+Variables
+================================================================================
+
+(1) ke_saveOnSpot
+-----------------
+When 1, a character's respawn point is saved exactly where they are standing.
+otherwise, the respawn point is specified by the kafra definition (see Section
+18).
+
+($) keh_hpCost
+($) keh_spCost
+--------------
+The cost of healing sp per every 10 sp. For example, if the cost is 1, it
+costs 100z to heal 1000.
+
+($) kes_cost
+($) kegs_cost
+-------------
+The cost of using the storage, guild storage (respectively)
+
+(1) kekp_reset
+--------------
+For Kafra Passes. When 1, the Pass expires when starting a chat with the
+Kafra. Otherwise the variable remains active a pretty long time (probably all
+session).
+
+($) kekp_reserveCost
+--------------------
+The cost in zeny of reserve points. When using a Kafra Pass many services will
+be cheaper, the amount of zeny saved is "used" to grant the player reserve
+points. For example, if the reserve cost is 100, for every 100z the player
+saves, he'll earn 1 reserve points. Reserve points can be used in scripts, and
+by default is used in the Al De Baran Kafra Headquarters to gain items. Use a
+value of 0 to disable Reserve Point gaining.
+
+(#) kekp_minReserve
+(#) kekp_maxReserve
+---------------
+What is the minimum/maximum reserve points the player can gain when using a
+Kafra Pass per transaction? This only applies when the player has saved at
+least 1z.
+
+(") ked_users
+-------------
+Certain modules (in particular, the warping ones) have the ability to display
+the number of players related to the function (ie: number of users in a
+dungeon), in such cases this variable is used to display the 'unit' of said
+count. For example, if ked_users is "kids" then the related modules might
+display things like "- Glast Heim (6 kids)".
+
+////////////////////////////////////////////////////////////////////////////////
+[03] Module: Bank (ke_bank.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+This modules enables characters to "store" zeny on a virtual bank account
+which is shared among characters of the same account. There can be deposits,
+withdrawals, which can have transactions fees associated.
+
+It is also possible to establish a monthly maintenance fee that has to be
+payed, when the player does not has enough money in the account to pay this
+fee, they stop gaining interests until they deposit enough to pay it up.
+Finally, all fees charged by the bank can be stored in a server-wide variable
+which may be used by other custom scripts.
+
+Variables
+================================================================================
+
+(%) kebk_depositCost
+(%) kebk_withdrawCost
+---------------------
+The Fee in % charged whenever a player does a deposit/withdrawal. For example,
+when a player deposits 100z and the fee is 3%, only 97z are deposited, and 3z
+are charged. Likewise, if a player withdraws 100z when the fee is of 5%,
+they'll withdraw 100z and an additional 5z will be removed from their accounts
+as fee cost.
+
+($) kebk_minTransact
+($) kebk_maxTransact
+--------------------
+The minimum/maximum values of a single transaction (deposit or withdrawal)
+
+($) kebk_capacity
+-----------------
+Indicates what is the bank account capacity for players. That is, what is the
+maximum zeny their account can hold. You can't deposit anymore once the max
+has been reached, and daily interests are lost while maxed.
+
+(%) kebk_dayInterest
+--------------------
+The daily interests that the account makes. The value is in 0.01% units, so a
+value of 100 equals 1% daily interests.
+
+($) kebk_monMaintenance
+-----------------------
+Monthly flat fee charged for maintenance.
+
+(1) kebk_useGlobalBank
+----------------------
+When 1, every fee charged from the player goes into a server variable
+($ke_globalbank), which can then be used by other scripts. is 0 by default
+because none of the Kafra Express modules uses it.
+
+////////////////////////////////////////////////////////////////////////////////
+[04] Module: Broadcast (ke_broadcast.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Provides broadcasting services for players. Broadcasts can be local (current
+map only) or global (server announce), there are also four types of broadcast:
+Requests for a party, PvP Challenge invitations, General Broadcasts (player
+input the string they want to say) and General Anonymous Broadcasts (player
+name is not displayed when doing the broadcast).
+
+Note that the variables from ke_warp_pvp.txt will be used for auto-configuring
+the pvp broadcasts.
+
+Variables:
+================================================================================
+
+(1) kebc_showOnline
+-------------------
+When 1, the total count of players will be displayed in the menu (map users
+next to the local broadcast entry, server users next to the global broadcast
+entry).
+
+($) kebc_partyCost
+($) kebc_pvpCost
+($) kebc_cost
+($) kebc_anonCost
+------------------
+Respective base costs for doing Party-Requests/Pvp Challenge/General/Anonymous
+broadcasts.
+
+(%) kebc_globalFactor
+---------------------
+When the broadcast is global, the base cost is multipled by this factor. If
+the factor is 500, then global broadcasts cost 5x times the cost of the map's
+broadcast.
+
+(%) kebc_discount
+-----------------
+Discount on broadcast prices when the Kafra Pass is active.
+
+////////////////////////////////////////////////////////////////////////////////
+[05] Module: Stylist (ke_dye.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Offers cloth dye, hair dye and hair style changes, both by input and by wheel
+browsing. Does not consumes dyestuffs because it is designed for custom dye
+packages.
+
+Variables
+================================================================================
+
+(1) kedy_enableHairstyle
+------------------------
+If one, the menu will include hair-style changing options, otherwise only
+dye-changes are offered
+
+(#) kedy_styles
+---------------
+Specifies the number of available hair styles
+
+(#) kedy_hair
+-------------
+Specificies the number of hair dyes
+
+(#) kedy_clothJN
+(#) kedy_clothJ1ST
+(#) kedy_clothJ2ND
+(#) kedy_clothJSN
+(#) kedy_clothJWED
+------------------
+Specifies the number of cloth dyes based on job-type: Novices, First Classes,
+Second Classes, Super Novices, Wedding Class.
+
+////////////////////////////////////////////////////////////////////////////////
+[06] Module: Job Changer (ke_jobchange.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Offers job changing, including rebirth and baby classes. The rebirth system
+can allow people free changing through a different path, or forcing the
+correct path. Zeny can be charged/granted as well as weapons on job-change.
+Remaining Skill Points can be wiped, ignored or prevent the change from
+happening. Before changing players can review the consequences of doing so,
+including weapons to gain.
+
+Finally, there's an option that makes it possible to skip the novice class
+altogether and change directly to first jobs.
+
+Variables
+================================================================================
+
+(#) kejc_skillsPolicy
+---------------------
+Determines what to do with remaining skill points upon change:
+ 0: No job changing until points are used.
+ 1: Extra Skill Points are wiped.
+ 2: Extra skill points are conserved.
+
+(#) kejc_upperPolicy
+--------------------
+What to do about the advanced classes?
+ 0: Free for all, players can pick any advanced job regardless of the previous.
+ 1: Force mode, classes are auto-selected from the previous path. In the
+ case the path could not be determined (players changed jobs previously
+ using other npcs), players will be able to select their next job.
+
+(1) kejc_announce
+-----------------
+When 1, a global announce will be done upon change.
+
+(1) kejc_resetDye
+-----------------
+If one, the cloth dye is reset upon changing.
+
+(1) kejc_skipNovice
+-------------------
+If one, players can skip the novice class and directly into their first job.
+Exploit proof, skills are wiped when changing to a 1st class this way, and
+their basic skill level is set to 9.
+
+(#) kejc_baseSN
+---------------
+Base Level required before changing into a Super Novice.
+
+(#) kejc_base2ND
+(#) kejc_job2ND
+(#) kejc_cost2ND
+----------------
+Base level, Job level and zeny required to change into a second job. If the
+cost is below zero, zeny will be given to the player instead of charged.
+
+(#) kejc_baseRebirth
+(#) kejc_jobRebirth
+(#) kejc_costRebirth
+--------------------
+Base level, Job level and zeny required before doing a rebirth (change to High
+Novice).
+
+(1) kejc_rebirthReset
+---------------------
+If 1, when changing into a HighNovice characters will have their level reset
+to 1 (with the additional 100 stat points)
+
+(1) kejc_weaponPolicy
+---------------------
+If 1, characters will get a weapon upon job change. For each first&second
+class there are two weapons to specify, the standard weapon and the "premium"
+one.
+
+(#) kejc_wBonusLv
+-----------------
+When characters reach this job level, they will receive the premium weapon instead of the normal one. If 0, premium weapons are disabled.
+
+(#) kejc_wAcolyte
+(#) kejc_wArcher
+(#) kejc_wMage
+(#) kejc_wMerchant
+(#) kejc_wSwordman
+(#) kejc_wThief
+(#) kejc_wSuperNovice
+(#) kejc_wPriest
+(#) kejc_wMonk
+(#) kejc_wHunter
+(#) kejc_wBard
+(#) kejc_wDancer
+(#) kejc_wWizard
+(#) kejc_wSage
+(#) kejc_wBlacksmith
+(#) kejc_wAlchemist
+(#) kejc_wKnight
+(#) kejc_wCrusader
+(#) kejc_wAssassin
+(#) kejc_wRogue
+-----------------------
+ID of the normal weapons received upon job change (if weapon policy is in
+effect).
+
+(#) kejc_w2Priest
+(#) kejc_w2Monk
+(#) kejc_w2Hunter
+(#) kejc_w2Bard
+(#) kejc_w2Dancer
+(#) kejc_w2Wizard
+(#) kejc_w2Sage
+(#) kejc_w2Blacksmith
+(#) kejc_w2Alchemist
+(#) kejc_w2Knight
+(#) kejc_w2Crusader
+(#) kejc_w2Assassin
+(#) kejc_w2Rogue
+--------------------
+ID of the premium weapons received upon job chane (if bonus weapon policy is
+in effect). Note that first classes can't get a bonus weapon.
+
+////////////////////////////////////////////////////////////////////////////////
+[07] Module: Job Swapper (ke_jobswap.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Permits characters to change jobs among other jobs of their same "level".
+This is, between first classes or between second classes. It is also possible
+to store the last job used and revert to it at a later date. Dye, Job Level
+and Skill Point count is saved, however the skill-tree is not saved and skills
+need be reallocated. When reverting to the previous class, characters might be
+able to return from an adv class to a normal one, but if they are baby
+classes, they can't change back to a normal one.
+
+Variables
+================================================================================
+
+(1) kejs_SNpolicy
+-----------------
+Determines what to do with Super Novices. if 0, they can't swap jobs, if 1,
+they are considered first classes.
+
+(#) kejs_revertPolicy
+---------------------
+Determines if Reverting classes is possible and when:
+ 0: Cannot go back to the previous job.
+ 1: Can only go back if the previous job belongs to the same type as the
+ first (is also a 1st/2nd job and is the same normal/adv/baby category).
+ 2: Can return to the previous job regardless (exception: when one of the
+ two jobs is a baby job and the other is not).
+
+(1) kejs_announce
+-----------------
+If 1 does a server announce when swapping jobs.
+
+($) kejs_revertCost
+-------------------
+Cost of changing to the previous job.
+
+(1) kejs_saveDye
+----------------
+If one, the dye is saved when swapping and restored upon revert.
+
+(1) kejs_resetDye
+-----------------
+If 1 the clothe dye is reset upon swap.
+
+(%) kejs_swapDiscount
+(%) kejs_revertDiscount
+-----------------------
+Discount % to apply when the kafra pass is active for swapping/reverting.
+
+(#) kejs_job1ST
+(#) kejs_job2ND
+---------------
+Minimum job level before being able to swap among 1st/2nd classes.
+
+($) kejs_cost1ST
+($) kejs_cost2ND
+----------------
+Base cost of swaping jobs.
+
+(%) kejs_discount1ST
+(%) kejs_discount2ND
+--------------------
+Discount % to apply to the base cost for every job level above the minimum
+required. For example, if the discount is 1% per level and you change when you
+have +10 level more than the min necessary, you get a 10% discount.
+
+(%) kejs_preserve1ST
+(%) kejs_preserve2ND
+--------------------
+Indicates how much of the previous job level to preserve when changing. For
+example, if the preserve value is 50 (50%) and you change from a level 40
+Knight into Priest, you'll become a lv 20 Priest. Skill points are adjusted
+accordingly so it's exploit-free.
+
+////////////////////////////////////////////////////////////////////////////////
+[08] Module: Smithery (ke_refine.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Offers the services usually found in the town smithery and then some more:
+Item refining, Item Repairing, Ore Purification (rough oris -> pure ones).
+Also sells Phracon and Emveretarcon.
+
+Item refining can follow all the rules of normal refining, but it can also
+override them to refine everything, or safe refines up to max level.
+
+Ore Purification can be extended to include all the rough materials that
+blacksmiths can purify (star dust -> star crumbs, for example).
+
+Variables
+================================================================================
+
+(#) kerf_maxLv
+--------------
+Maximum refinement level of equipment.
+
+(1) kerf_safe
+-------------
+If 1 success chances are ignoring and refining never fails.
+
+(1) kerf_showChance
+-------------------
+If 1 the chance of success/failure is actually shown before confirming.
+
+(1) kerf_refineAll
+------------------
+If 1 then unrefinable items will be refined too (like accesories)
+
+(%) kerf_discount
+-----------------
+Discount rate to be applied during forging when the Kafra Pass is active.
+
+($) kerf_armorCost
+($) kerf_weaponLv1Cost
+($) kerf_weaponLv2Cost
+($) kerf_weaponLv3Cost
+($) kerf_weaponLv4Cost
+----------------------
+Cost per level to refine armors, and level 1/2/3/4 weapons.
+
+(1) kerf_purifyAll
+------------------
+If 1, the extended purify menu will be used, which shows how to purify steels,
+star crumbs, etc; otherwise, just elus and oris are available.
+
+($) kerf_repairCost
+-------------------
+Cost of repairing a broken weapon.
+
+(%) kerf_repairDiscount
+-----------------------
+Repair Discount% when the kafra pass is active.
+
+(1) kerf_repairSteel
+--------------------
+If 1, a steel will be required to repair items.
+
+////////////////////////////////////////////////////////////////////////////////
+[09] Module: Renting (ke_refine.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Allows renting of Cart/Falcon/PecoPeco. Note that the only restriction applied
+is whether the character has "PushCart", "Falcon Taming" or "PecoPeco Riding",
+it does not checks for the character's class.
+
+It must also be noted that renting is free while the Kafra Pass is active.
+
+Variables
+================================================================================
+
+(1) kert_cartOnly
+-----------------
+If 1, this module only offers cart rentals. Otherwise you can rent any of the three.
+
+($) kert_cartCost
+($) kert_falconCost
+($) kert_pecoCost
+-------------------
+Cost for renting carts/falcons/pecos.
+
+////////////////////////////////////////////////////////////////////////////////
+[10] Module: Kafra Shop (ke_shop.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Allows invoking of a shop from the Kafra. Note that the shops must be of
+invisible type (ke_shop.txt has an example of two such shops). The config
+enables you to select whether the shop will allow buying, selling or
+both, as well as the name of the shops to use in towns or dungeons (if you
+want to use a custom shop defined elsewhere or want to use the same shop for
+both).
+
+Variables
+================================================================================
+
+(#) $@kesh_towntype
+(#) $@kesh_duntype
+-------------------
+Specifies the type of transaction allowed at the shop. Use 1 to enable only
+buying of items, 2 for only selling, or any other value for both.
+
+(#) $@kesh_townshop$
+(#) $@kesh_dunshop$
+--------------------
+Specifies the name of the shop to use for buying/selling of items. By default
+the file includes two such shops which you can use, or you can disable them
+and specify your own in the config changing these variables.
+
+////////////////////////////////////////////////////////////////////////////////
+[11] Module: Stat/Skill Market (ke_statmarket.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Not really a "market", this module lets players sell and buy stat/skill
+points. Also allows for direct trading between stats/skills.
+
+NOTE: Selling stat points can lead to zeny exploits if your server uses the
+stat_db.txt file, because players can then sell all their stat points, do a
+reset and get them back! To prevent this, set the following battle config
+option:
+ use_statpoint_table: no
+Alternatively, you can set the selling point of statpoints to be 0z.
+
+Variables
+================================================================================
+
+($) kesm_stBuyPrice
+($) kesm_stSellPrice
+--------------------
+Price for every stat point to be bought/sold.
+
+($) kesm_skBuyPrice
+($) kesm_skSellPrice
+--------------------
+Price for every skill point to be bought/sold.
+
+(%) kesm_discount
+-----------------
+Discount price when kafra pass is active. Only applies to buying stats/skills.
+
+(#) kesm_skTradePrice
+(#) kesm_stTradePrice
+---------------------
+These two define how many stat points are traded per each skill point when
+doing a direct conversion between stats/skills. The idea is that trading
+directly one for the other should be cheaper than selling them and then buying
+from the other. You can set both to the same value and the trading will have
+no loss.
+Notice that skTradePrice is the cost for converting stats to skills and
+stTradePrice is the cost for converting skills to stats. So... NEVER set
+stTradePrice higher than skTradePrice or you allow an easy exploit of infinite
+stats/skills!
+
+////////////////////////////////////////////////////////////////////////////////
+[11] Module: Stat/Skill Resets/Raising (ke_stats.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Does stat/skills resets, and additionally helps characters raise their basic
+stats faster. Optionally, skill resets will not touch the basic-skill level.
+Price have two components: base fee and per level fee, so characters with
+higher levels will have to pay more for a reset than low level ones.
+For stat resetting, base level is taken into account. For skill resets, job
+levels. For a dual reset, the addition of both is considered. Also, when taken
+into consideration job level for second classes, the job-level at which one
+changed jobs is also considered. So a Job level 1 Knight actually has job
+level of 41~51.
+
+NOTE: Be careful with quest skills. If your server is configured to reset
+quest skills and players can get their quest skills for free, you are letting
+them exploit the system and get unlimited skill points! (even worse if they
+can sell'em in the Stat/Skills market module). Be sure to either remove free
+quest skills npcs or make quest skills not resetable.
+
+Variables:
+================================================================================
+
+($) kest_stResetCost
+--------------------
+Base cost of doing a stat reset.
+
+($) kest_skResetCost
+--------------------
+Base cost of doing a skill reset.
+
+($) kest_resetCost
+------------------
+Base cost of a dual reset.
+
+($) kest_BaseLvCost
+-------------------
+Cost per Base level for doing a stat reset.
+
+($) kest_JobLvCost
+------------------
+Cost per Job level for doing a skill reset.
+
+($) kest_BothLvCost
+-------------------
+Cost per Base+Job level for doing a dual reset.
+
+(%) kest_discount
+-----------------
+Discount % applied when Kafra Pass is active.
+
+(1) kest_resetBasic
+-------------------
+If 1, the skill "basic skill" is also reset.
+
+////////////////////////////////////////////////////////////////////////////////
+[12] Module: Uncarding (ke_uncard.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+This module allows people to remove cards from their equipped items. Prices
+are modified by the item type, the amount of cards and the refine level of the
+item. There's also a chance the removal will fail and: Nothing is lost, the
+card or item is lost, both are lost. The procedure may also require up to two
+different items (and each one with their own specified qty).
+
+Variables:
+================================================================================
+
+($) keuc_BaseCost
+-----------------
+Base cost of uncarding, modified by the following conditions:
+
+($) keuc_CardCost
+-----------------
+Each card to be removed increases the total by this value.
+
+($) keuc_UpgradeCostA
+($) keuc_UpgradeCostW1
+($) keuc_UpgradeCostW2
+($) keuc_UpgradeCostW3
+($) keuc_UpgradeCostW4
+----------------------
+These indicate the price increase per refine level for armors and weapons
+levels 1/2/3/4. A +10 armor gets a price increases of ten times
+keuc_UpgradeCostA.
+
+(%) keuc_discount
+-----------------
+Discount % to apply when kafra pass is active.
+
+(#) keuc_Mat1
+(#) keuc_Qty1
+-------------
+Id and Qty of the first material that is needed to uncard. If the qty is zero,
+then it's disabled.
+
+(#) keuc_Mat2
+(#) keuc_Qty2
+-------------
+id & Qty of the second material to use. Only valid if the first material was
+also defined, use qty=0 to disable.
+
+(%) keuc_Fail0Chance
+--------------------
+This is the safe failure chance (0-1000, where 1000 = 100.0%). A Safe failure
+means the original item remains intact, but you are still charged the money
+and the materials. Use 0 to disable this type of failure.
+
+(%) keuc_Fail1Chance
+--------------------
+This is the partial failure chance (0-1000). Partial failures are when either
+the cards or the item is lost. The player gets to choose which one is more
+important before proceeding. Use 0 to disable.
+
+(%) keuc_Fail2Chance
+--------------------
+Total failure chance (0-1000). When this triggers, both item and cards are
+lost. Use 0 to disable.
+
+////////////////////////////////////////////////////////////////////////////////
+[14] Module: Town Warping (ke_warp_town.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+This module enables warping to towns. Currently all towns have the same
+warping cost, independent of how far away they are placed. The only exception
+is Niflheim, which is more of a dungeon than a town.
+
+Variables
+================================================================================
+
+(1) kewt_showOnline
+-------------------
+If set to 1, the menus will display the online count of players in
+towns.
+
+($) kewt_cost
+-------------
+Cost of warping to a town.
+
+($) kewt_niflCost
+-----------------
+Cost of warping to Niflheim. Different cost since Niflheim is more of a
+dungeon than a city. Also, players can't warp to Niflheim until they do the
+Niflheim Piano Key Quest.
+
+(#) kewt_travel
+---------------
+Allows enabling the traveller system. The traveller system makes it so you can't
+warp to a town until you have been there first by some other means (usually
+walking) and saved with the Kafra Express in that town.
+There are three valid values for this variable: 0, 1, 2.
+0 - Disables this mode.
+1 - Uses the mode on a per character basis; that is, each character needs to
+travel to that town and save and that unlocks warping only for that
+character.
+2 - Uses the mode on a per account basis; that is, once a character has saved
+on a town, all other (and future) characters from the same account have the
+warp unlocked.
+
+(1) kewt_free
+-------------
+If 1, players will be able to warp to towns even if they run out of money.
+Niflheim excepted.
+
+(%) kewt_discount
+-----------------
+Discount % to apply when warping while the Kafra Pass is active.
+
+////////////////////////////////////////////////////////////////////////////////
+[15] Module: Dungeon Warping (ke_warp_dungeon.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+Offers warps to all dungeons. Dungeon warping has two main operation modes:
+Deep Dungeon Warping and Short Dungeon Warping. Deep Dungeon warping enables
+players to warp to any level of any dungeon, while Short Dungeon Warping is
+restricted to warping only to the entrance of the dungeon. Traveller's mode is
+also available for dungeons.
+
+Variables
+================================================================================
+
+(1) kewd_showOnline
+-------------------
+If set to 1, the menus will display the online online count of characters in
+the dungeons.
+
+(%) kewd_discount
+-----------------
+Discount % to apply when warping while the Kafra Pass is active.
+
+(#) kewd_travel
+---------------
+Enables the traveller system. Just like the traveller's system for towns,
+you can't warp to any dungeon to which you have not visited first on foot and
+saved with the corresponding Kafra Express first.
+If 1, traveller's mode is enabled on a per character basis (so once a
+character saves, only that character has unlocked the warp).
+If 2, traveller's mode is enabled on a per account basis (so once a character
+saves, all charaters of the corresponding account have the warp unlocked).
+
+(1) kewd_deep
+-------------
+This variable decides whether deep or short warps will be used. There's no
+need to set it as it will be set automatically based on which file was
+included (ke_warp_short.txt or ke_warp_deep.txt).
+
+(%) kewd_levelCost
+------------------
+This variable only applies to deep warps. It indicates in percentage the cost
+increase per level. For example, if the dungeon costs 1000z to warp to, and
+the levelCost increase is of 50 (50%) then warping to level 2 costs 1500, lv3
+costs 2000, and so on.
+
+(%) kewd_entryDiscount
+----------------------
+The discount for using the Kafra in the dungeon entrance to warp within the
+dungeon. For example, if you use the Kafra next to Payon dungeon to warp to
+Payon Dungeon lv5, this discount is then applied. This variable only makes
+sense on deep warp mode.
+
+(1) kewd_turtleCave
+-------------------
+Only used on short warps. If 1, then warping to Turtle Dungeon should lead
+directly to the cave's entrance, otherwise it warps you to the Island's
+entrance.
+
+($) kewd_amatsu
+($) kewd_antHell
+($) kewd_ayothaya
+($) kewd_byalan
+($) kewd_comodo
+($) kewd_clockTower
+($) kewd_coalMines
+($) kewd_culvert
+($) kewd_gefenia
+($) kewd_geffen
+($) kewd_glastHeim
+($) kewd_gonRyun
+($) kewd_hiddenTemple
+($) kewd_louYang
+($) kewd_magma
+($) kewd_orc
+($) kewd_payon
+($) kewd_pyramids
+($) kewd_sphinx
+($) kewd_sunkenShip
+($) kewd_toyFactory
+($) kewd_turtleIsland
+($) kewd_umbala
+---------------------
+Base cost of warping to each dungeon, that is, the entrance level cost.
+
+////////////////////////////////////////////////////////////////////////////////
+[16] Module: PvP Warping (ke_pvp.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+The PvP warping module leads to the pvp maps named pvp_n_*-*.gat. It has two
+modes: simple and advanced. On simple mode, every player of every level gets
+thrown into the pvp_n_1-*.gat maps to nuke it out, on advanced mode each of
+the map groups gets their own range of permissible levels to enter. Since
+there is no sure way how characters should escape from a pvp map, they are
+currently given a butterfly wing when they warp.
+
+Variables
+================================================================================
+
+(1) kewp_showOnline
+-------------------
+If 1, the menu entries will display the online count of players of each entry.
+
+(1) kewp_advanced
+-----------------
+Use the advanced pvp system if 1 (see module description)
+
+($) kewp_cost
+-------------
+Cost of warping to the pvp rooms used in non-advanced rooms and "free for all"
+in advanced mode.
+
+($) kewp_cost1
+($) kewp_cost2
+($) kewp_cost3
+($) kewp_cost4
+($) kewp_cost5
+($) kewp_cost6
+($) kewp_cost7
+--------------
+The costs for each of the pvp room groups in advanced mode.
+
+(#) kewp_baseLv1
+(#) kewp_baseLv2
+(#) kewp_baseLv3
+(#) kewp_baseLv4
+(#) kewp_baseLv5
+(#) kewp_baseLv6
+(#) kewp_baseLv7
+----------------
+These indicate the nominal base level for each room (which base level should
+characters be around to join it). Applicable only to advanced mode.
+
+(#) kewp_range
+--------------
+Specifies how far away the character's level can be from the nominal value to
+still be allowed within the room. If the nominal level is 50 and the range is
+3, only characters with levels 47-53 may join.
+
+////////////////////////////////////////////////////////////////////////////////
+[17] Module: WoE Warps (warp_woe.txt)
+////////////////////////////////////////////////////////////////////////////////
+
+Description
+================================================================================
+This module allows characters to warp into the WoE grounds during (or out of)
+War of Emperium times. Players may warp directly into the Guild Dungeons if
+the proper lines are uncommented on the warp menu (See warp_woe.txt's header
+for the location of the menu entries):
+
+ menu "- Cancel",-,
+// "- Guild Dungeons",M_DUNGEON,
+ "- Al De Baran Guild ("<some code>"z)",L_ALDEBARAN,
+ "- Geffen Guild ("<some code>"z)",L_GEFFEN,
+ "- Payon Guild ("<some code>"z)",L_PAYON,
+ "- Prontera Guild ("<some code>"z)",L_PRONTERA;
+ return;
+
+Variables
+================================================================================
+
+(1) kewg_check
+--------------
+Does a guild check. If 1, only characters who belong to a guild can use these
+warps.
+
+(1) kewg_checkAgit
+------------------
+Does the WoE times check. If 1, only during War of Emperium the warps will be
+active.
+
+(1) kewg_showOnline
+-------------------
+Set to 1 to display in the menus the online count of players in each of the
+guild areas. It also adds a menu entry that displays the summary of players
+within each castle and guild grounds.
+
+(%) kewg_discount
+-----------------
+Discount % to be applied for warps while the Kafra Pass is active.
+
+($) kewg_baldur
+($) kewg_luina
+($) kewg_valkyrie
+($) kewg_britoniah
+------------------
+Costs to the respective guild dungeons when enabled.
+
+($) kewg_alDeBaran
+($) kewg_geffen
+($) kewg_payon
+($) kewg_prontera
+------------------
+Costs to each of the guild grounds.
+
+////////////////////////////////////////////////////////////////////////////////
+[18] The kafras.txt file: About Kafra Definitions
+////////////////////////////////////////////////////////////////////////////////
+
+The file kafras.txt contains the definition of the Kafras, which is the actual
+sprite on-screen that characters speak with. An enabled kafra may look like
+this:
+
+//Alberta
+alberta.gat,113,53,7 script Kafra Express 116,{
+ callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"alberta.gat",116,57;
+}
+
+And a disabled/commented Kafra would look like this:
+
+//Prontera Guild Grounds
+//prt_gld.gat,127,163,5 script Kafra Express 115,{
+// callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"prt_gld.gat",129,170;
+//}
+
+For scripters, the way to define an NPC is not new, and beyond the scope of
+this document, so I'll only document the function "F_KafraExpress":
+
+F_KafraExpress (String "Kafra's name", String "kafra image file", int location, String map, int x, int save y)
+
+The first parameter, the Kafra's name, is the name that will be displayed all
+over the dialogue windows. The Kafra Image file is the image that is to be
+displayed on the screen during the npc chat (without the extension). You can
+use "" to disable the image.
+
+Location refers to the type of Kafra. Type=0 refers to Kafras in towns while
+Type=1 refers to Kafras placed in the wild, ie: in dungeons. Type=2 is for
+Kafras that should count as both town & dungeon. Under these situations, the
+menus displayed are those of the town, the type is used for the traveller's
+warping mode. Finally, Type=3 is a special type used only for the Niflheim
+Kafra.
+
+The last three Parameters are used to define the save location when you save
+your respawn. They are not needed if you use the "Save-on-spot" feature, but
+it's recommended to pass them nevertheless. Note that the map name will still
+be used when using traveller's mode.