%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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 v2.0 (27/September/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 (""z/10SP)",L_HEAL, "- Warp Service",L_WARP, // "- Use Storage (""z)",L_STORAGE, // "- Use Guild Storage (""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_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) (#) kekp_reset -------------- For Kafra Passes. When set, the Pass expires after starting a chat with the Kafra the amount of times specified. Otherwise the variable remains active a pretty long time (probably all session). For example, if set to 2, after activating the pass and opening the storage, the Pass will still be active the next time you speak to a kafra, it will expire on the "third" time you speak to her. ($) 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 ------------------ Specifies the number of cloth dyes based on job-type: Novices, First Classes, Second Classes, Super Novices. Note that special classes like Xmas or Wedding tend to not have palettes, and it should be handled server-side so that switching palettes with this module will not cause you client crashes. //////////////////////////////////////////////////////////////////////////////// [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. (#) kejc_disable ---------------- Permits disabling some job trees from the changer (add as required): 1: You can't change to a S. Novice 2: You can't change to Taekwon (but if you are a Taekwon already, you can still change to Soul Linker/Star Gladiator) 4: Can't change to GunSlinger 8: Can't change to Ninja (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_weapon1[] (#) kejc_weapon_21[] (#) kejc_weapon_22[] ----------------------- These arrays contain the IDs of the normal weapons received upon job change for first, 2-1 and 2-2 classes (if weapon policy is in effect). Refer to the comments in the config file for identifying which position is for which job. (#) kejc_weapon2_21[] (#) kejc_weapon2_22[] -------------------- These arrays contain the ID of the premium weapons received upon job change (if bonus weapon policy is in effect). Note that first classes can't get a bonus weapon, and that Bard/Dancers both receive the same weapon. Refer to the comments in the config file for identifying which position is for which job. //////////////////////////////////////////////////////////////////////////////// [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 ================================================================================ (#) kejs_disable ----------------- You can disable some classes from swapping using this setting (add numbers as appropiate): 1: Super Novices may not swap/swap to. 2: Disable swapping for Taekwon/Star Gladiator/Soul Linker classes. 4: Disable swapping to/from GunSlinger. 8: Disable swapping to/from Ninja. For example, if you set it to 12 (8+4), the swap menu will not include Gunslinger nor Ninja, and they will find that they can't swap to other classes neither. (#) 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. As explained on the description, enabling deep warps allows warping to any dungeon level. (%) 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_ --------------------- There is a config variable for every dungeon, it specifies the base cost of warping to that dungeon (which 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_*-*. It has two modes: simple and advanced. On simple mode, every player of every level gets thrown into the pvp_n_1-* 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 (""z)",L_ALDEBARAN, "- Geffen Guild (""z)",L_GEFFEN, "- Payon Guild (""z)",L_PAYON, "- Prontera Guild (""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,113,53,7 script Kafra Express 116,{ callfunc "F_KafraExpress","Kafra Express","kafra_02",0,"alberta",116,57; } And a disabled/commented Kafra would look like this: //Prontera Guild Grounds //prt_gld,127,163,5 script Kafra Express 115,{ // callfunc "F_KafraExpress","Kafra Express","kafra_03",1,"prt_gld",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.