summaryrefslogblamecommitdiff
path: root/npc/custom/eAAC_Scripts/kafraExpress/readme.txt
blob: 9b3468fc63fd928fda6e89bd482dd2264b3a84d2 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023






























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































                                                                                                                                         
                                                                        
                                                                            
                                                                       















































































































                                                                                

                                                                           




                                                    

                                                                              






















                                                                                                              
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%             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_*-*. 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 ("<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,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.