summaryrefslogtreecommitdiff
path: root/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt')
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt810
1 files changed, 405 insertions, 405 deletions
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
index f5d1e0ef2..5aa2d3dd4 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
@@ -1,405 +1,405 @@
-//===== eAthena Script =======================================
-//= Kafra Express - Main Module
-//===== By: ==================================================
-//= Skotlex
-//===== Current Version: =====================================
-//= 5.4
-//===== Compatible With: =====================================
-//= eAthena SVN R3424+
-//===== Description: =========================================
-//= Part of the Kafra Express Script Package.
-//= This module contains the main menu, plus the healing and
-//= storage services.
-//===== Additional Comments: =================================
-//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
-//= for indepth explanation of the Kafra Express Script Package.
-//= Services available: comment/uncomment what you want (lines 37-104)
-//= See config.txt for per-module configuration.
-//============================================================
-
-// F_KafraExpress (String "Kafra's name", String "kafra image file",
-//int location (0 = Town Kafra, 1 = Dungeon Kafra, 2 = Both),
-//String "save map", int save x, int save y)
-function script F_KafraExpress {
- set @name$,getarg(0);
- set @ke_type,getarg(2);
- if ($@kekp_reset)
- set @kafraPass,0;
- if (getarg(1) != "")
- cutin getarg(1),2;
- callfunc "F_keIntro",-1,"";
-
-M_INIT:
- set @discount, callfunc("F_keCost",1,100);
-
- if (@ke_type == 1) goto MD_INIT;
- menu
- "- Leave",L_END,
- "- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
- "- Warp Service",M_WARP,
- "- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
- "- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
- "- Job Services",M_JOB,
- "- Other Services",M_OTHER,
- "- Save Respawn point",L_SAVE;
-
-MD_INIT:
- menu
- "- Leave",L_END,
- "- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
- "- Warp Service",M_WARP,
- "- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
- "- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
- "- Job Services",M_JOB,
- "- Other Services",M_OTHER,
- "- Save Respawn point",L_SAVE;
-
-M_WARP:
- if (@ke_type == 3 && nif_q_done != 1)
- goto L_DENIED;
- if (@ke_type == 1)
- goto MD_WARP;
- menu
- "- Return",M_INIT,
- "- Dungeons",L_DUNGEON,
- "- PvP Arena",L_PVP,
- "- Guild Wars",L_GUILD_DUNGEON,
- "- Towns",L_TOWN;
-
-MD_WARP:
- menu
- "- Return",M_INIT,
- "- Dungeons",L_DUNGEON,
- "- PvP Arena",L_PVP,
- "- Guild Wars",L_GUILD_DUNGEON,
- "- Towns",L_TOWN;
-
-M_JOB:
- if (@ke_type == 1) goto MD_JOB;
- menu
- "- Return", M_INIT,
- "- Change Job",L_JOB_CHANGE,
- "- Swap Job",L_JOB_SWAP,
- "- Stat/Skill Services",L_STATS,
- "- Stat/Skill Market",L_STAT_MARKET,
- "- Rental Service",L_RENT;
-
-MD_JOB:
- menu
- "- Return", M_INIT,
- "- Change Job",L_JOB_CHANGE,
- "- Swap Job",L_JOB_SWAP,
- "- Stat/Skill Services",L_STATS,
- "- Stat/Skill Market",L_STAT_MARKET,
- "- Rental Service",L_RENT;
-
-M_OTHER:
- if (@ke_type == 1) goto MD_OTHER;
- menu
- "- Return",M_INIT,
- "- Bank Services",L_BANK,
- "- Use Kafra Shop",L_SHOP,
- "- Broadcast a message",L_BROADCAST,
- "- Refine Services",L_REFINE,
- "- Uncard Services",L_UNCARD,
- "- Stylist Service",L_STYLE,
- "- Use a Kafra Pass",L_PASS;
-
-MD_OTHER:
- menu
- "- Return",M_INIT,
- "- Bank Services",L_BANK,
- "- Use Kafra Shop",L_SHOP,
- "- Broadcast a message",L_BROADCAST,
- "- Refine Services",L_REFINE,
- "- Uncard Services",L_UNCARD,
- "- Stylist Service",L_STYLE,
- "- Use a Kafra Pass",L_PASS;
-
-L_HEAL:
- callfunc "F_keHeal";
- goto M_INIT;
-
-L_TOWN:
- callfunc "F_keWarpTown";
- goto M_WARP;
-
-L_DUNGEON:
- callfunc "F_keDungeonWarps", getarg(3);
- goto M_WARP;
-
-L_GUILD_DUNGEON:
- callfunc "F_keWarpWOE";
- goto M_WARP;
-
-L_PVP:
- callfunc "F_keWarpPvp";
- goto M_WARP;
-
-L_STORAGE:
- callfunc "F_keStorage", getarg(1);
- goto M_INIT;
-
-L_GUILD_STORAGE:
- callfunc "F_keGuildStorage", getarg(1);
- goto M_INIT;
-
-L_BANK:
- callfunc "F_keBank";
- goto M_OTHER;
-
-L_SHOP:
- callfunc "F_keShop",@ke_type, getarg(1);
- goto M_OTHER;
-
-L_BROADCAST:
- callfunc "F_keBroadcast",getarg(3);
- goto M_OTHER;
-
-L_PASS:
- callfunc "F_kePass";
- goto M_OTHER;
-
-L_REFINE:
- callfunc "F_keRefine";
- goto M_OTHER;
-
-L_UNCARD:
- callfunc "F_keUncard";
- goto M_OTHER;
-
-L_STYLE:
- callfunc "F_keStylist";
- goto M_OTHER;
-
-L_JOB_CHANGE:
- callfunc "F_keJobChange";
- goto M_JOB;
-
-L_JOB_SWAP:
- callfunc "F_keJobSwap";
- goto M_JOB;
-
-L_STATS:
- callfunc "F_keStats";
- goto M_JOB;
-
-L_STAT_MARKET:
- callfunc "F_keStatMarket";
- goto M_JOB;
-
-L_RENT:
- callfunc "F_keRent";
- goto M_JOB;
-
-L_SAVE:
- if (@ke_type == 3 && nif_q_done != 1)
- goto L_DENIED;
- if ($@kewt_travel && @ke_type != 1) {
- callfunc "F_keAddTravelTown", getarg(3);
- }
- if ($@kewd_travel && @ke_type != 0) {
- callfunc "F_keAddTravelDungeon", getarg(3);
- }
- if ($@ke_saveOnSpot) {
- getmapxy @map$,@x,@y,0;
- savepoint @map$,@x,@y;
- } else {
- savepoint getarg(3),getarg(4),getarg(5);
- }
- emotion e_scissors;
- goto M_INIT;
-
-L_DENIED:
- callfunc "F_keIntro", e_gg, "...no.";
- goto M_INIT;
-
-L_END:
- mes "Thank you for using Kafra Services.";
- close2;
- cutin getarg(1), 255;
- end;
-}
-
-//Function F_keIntro (emotion, message)
-//Displays a message followed by an emotion, then a next button, and finally
-//shows the intro message.
-function script F_keIntro {
- if (getarg(0) >= 0)
- emotion getarg(0);
- if (getarg(1) != "") {
- mes getarg(1);
- next;
- }
- mes "["+@name$+"]";
- mes "Welcome to Kafra Corp. Always by your side, wherever you go.";
- if(@kafraPass) mes "Your Kafra Pass is active,";
- mes "How may I be of help?";
- return;
-}
-
-//Function Heal, offers the heal subsystem.
-function script F_keHeal {
- set @qtyHP,MaxHp-Hp;
- set @qtySP,MaxSp-Sp;
- set @costHP, $@keh_hpCost*(MaxHp-Hp)/10;
- set @costSP, $@keh_spCost*(MaxSp-Sp)/10;
- set @costHPSP, @costHP+@costSP;
- set @discount, callfunc("F_keCost",1,100);
-
- if (@qtyHP + @qtySP == 0) {
- callfunc "F_keIntro", -1, "...you don't need to be healed.";
- return;
- }
- if (@qtyHP == 0) goto M_NO_HP;
- if (@qtySP == 0) goto M_NO_SP;
- menu "- Cancel",-,
- "- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP,
- "- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP,
- "- Heal Both ("+(@costHPSP*@discount)+"z)",L_HEAL_ALL;
- return;
-
-M_NO_HP:
- menu "- Cancel",-,
- "- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP;
- return;
-
-M_NO_SP:
- menu "- Cancel",-,
- "- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP;
- return;
-
-L_HEAL_HP:
- if (!(callfunc("F_keCharge",@costHP,100,0))) {
- callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
- return;
- }
- emotion e_no1;
- heal @qtyHP,0;
- return;
-
-L_HEAL_SP:
- if (!(callfunc("F_keCharge",@costSP,100,0))) {
- callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
- return;
- }
- emotion e_no1;
- heal 0,@qtySP;
- return;
-
-L_HEAL_ALL:
- if (!(callfunc("F_keCharge",@costHPSP,100,0))) {
- callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
- return;
- }
- emotion e_no1;
- heal @qtyHP,@qtySP;
- return;
-}
-
-//Function storage: allows access to the storage facility
-//The sent argument is the displaying image, so we can clear it afterwards.
-function script F_keStorage {
- if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
- callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
- return;
- }
- if (!(callfunc("F_keCharge",$@kes_cost,100,1))) {
- callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
- return;
- }
- mes "Thank for you using Kafra services.";
- emotion e_thx;
- close2;
- openstorage;
- cutin getarg(0), 255;
- end;
-}
-
-//Function G Storage: Allows access to the Guild Storage
-function script F_keGuildStorage {
- if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
- callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
- return;
- }
- if(getcharid(2) < 1) {
- callfunc "F_keIntro", e_swt, "You can't use the Guild Storage if you don't belong to a guild!";
- return;
- }
- if (callfunc("F_keCost",$@kegs_cost,100) > Zeny) {
- callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
- return;
- }
- if (guildopenstorage(0) == 1) {
- callfunc "F_keIntro", -1, "Sorry, the guild storage is currently in use by someone else. Try again later.";
- return;
- }
- callfunc "F_keCharge",$@kegs_cost,100,1;
- mes "Thank for you using Kafra services.";
- emotion e_thx;
- close2;
- cutin getarg(0), 255;
- end;
-}
-
-function script F_kePass {
- if (@kafraPass) {
- callfunc "F_keIntro", -1, "You already are using a Kafra Pass...";
- return;
- }
- if (countitem(1084)<1) {
- callfunc "F_keIntro", -1, "You obviously need a 'Kafra Pass' if you want to activate it.";
- return;
- }
- delitem 1084,1;
- set @kafraPass,1;
- callfunc "F_keIntro", e_lv, "Your Kafra Pass has been activated.";
- return;
-}
-
-//F_keCost(int cost, int discount%)
-//Returns what would be the cost of a service considering the KafraPass.
-//The discount value should be between 0 and 100
-function script F_keCost {
- if (@kafraPass) {
- return getarg(0)*(100-getarg(1))/100;
- }
- return getarg(0);
-}
-
-//F_keCharge(int cost, int discount%, bool appliesKP)
-//Charges for a service, using the KafraPass state and discount value.
-//appliesKP marks if the cost savings apply for stocking Kafra Reserve Points
-//Function returns 1 if successful, 0 if there's not enough zeny.
-function script F_keCharge {
- set @savings, 0;
- if (@kafraPass)
- set @savings, getarg(0)*getarg(1)/100;
- set @cost, getarg(0)-@savings;
- if (@cost > Zeny || @cost < 0) { // (@cost < 0) for overflow protection
- return 0;
- }
- set Zeny, Zeny-@cost;
-
- if (getarg(2) && @savings > 0 && $@kekp_reserveCost > 0) {
- set @savings, @savings/$@kekp_reserveCost;
- if (@savings < $@kekp_minReserve)
- set @savings, $@kekp_minReserve;
- if (@savings > $@kekp_maxReserve)
- set @savings, $@kekp_maxReserve;
-
- set RESRVPTS, RESRVPTS + @savings;
- }
- return 1;
-}
-
-//Function F_keWarp (int cost, int discount, int emotion, String map, int x, int y)
-function script F_keWarp {
- if (!(callfunc("F_keCharge",getarg(0),getarg(1),1))) {
- callfunc "F_keIntro", e_an, "You don't have enough Zeny...";
- return;
- }
- emotion getarg(2);
- warp getarg(3),getarg(4),getarg(5);
- end;
-}
+//===== eAthena Script =======================================
+//= Kafra Express - Main Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 5.4
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= This module contains the main menu, plus the healing and
+//= storage services.
+//===== Additional Comments: =================================
+//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
+//= for indepth explanation of the Kafra Express Script Package.
+//= Services available: comment/uncomment what you want (lines 37-104)
+//= See config.txt for per-module configuration.
+//============================================================
+
+// F_KafraExpress (String "Kafra's name", String "kafra image file",
+//int location (0 = Town Kafra, 1 = Dungeon Kafra, 2 = Both),
+//String "save map", int save x, int save y)
+function script F_KafraExpress {
+ set @name$,getarg(0);
+ set @ke_type,getarg(2);
+ if ($@kekp_reset)
+ set @kafraPass,0;
+ if (getarg(1) != "")
+ cutin getarg(1),2;
+ callfunc "F_keIntro",-1,"";
+
+M_INIT:
+ set @discount, callfunc("F_keCost",1,100);
+
+ if (@ke_type == 1) goto MD_INIT;
+ menu
+ "- Leave",L_END,
+ "- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
+ "- Warp Service",M_WARP,
+ "- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
+ "- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
+ "- Job Services",M_JOB,
+ "- Other Services",M_OTHER,
+ "- Save Respawn point",L_SAVE;
+
+MD_INIT:
+ menu
+ "- Leave",L_END,
+ "- Heal Service ("+($@keh_hpCost*@discount)+"z/10HP - "+($@keh_spCost*@discount)+"z/10SP)",L_HEAL,
+ "- Warp Service",M_WARP,
+ "- Use Storage ("+($@kes_cost*@discount)+"z)",L_STORAGE,
+ "- Use Guild Storage ("+($@kegs_cost*@discount)+"z)",L_GUILD_STORAGE,
+ "- Job Services",M_JOB,
+ "- Other Services",M_OTHER,
+ "- Save Respawn point",L_SAVE;
+
+M_WARP:
+ if (@ke_type == 3 && nif_q_done != 1)
+ goto L_DENIED;
+ if (@ke_type == 1)
+ goto MD_WARP;
+ menu
+ "- Return",M_INIT,
+ "- Dungeons",L_DUNGEON,
+ "- PvP Arena",L_PVP,
+ "- Guild Wars",L_GUILD_DUNGEON,
+ "- Towns",L_TOWN;
+
+MD_WARP:
+ menu
+ "- Return",M_INIT,
+ "- Dungeons",L_DUNGEON,
+ "- PvP Arena",L_PVP,
+ "- Guild Wars",L_GUILD_DUNGEON,
+ "- Towns",L_TOWN;
+
+M_JOB:
+ if (@ke_type == 1) goto MD_JOB;
+ menu
+ "- Return", M_INIT,
+ "- Change Job",L_JOB_CHANGE,
+ "- Swap Job",L_JOB_SWAP,
+ "- Stat/Skill Services",L_STATS,
+ "- Stat/Skill Market",L_STAT_MARKET,
+ "- Rental Service",L_RENT;
+
+MD_JOB:
+ menu
+ "- Return", M_INIT,
+ "- Change Job",L_JOB_CHANGE,
+ "- Swap Job",L_JOB_SWAP,
+ "- Stat/Skill Services",L_STATS,
+ "- Stat/Skill Market",L_STAT_MARKET,
+ "- Rental Service",L_RENT;
+
+M_OTHER:
+ if (@ke_type == 1) goto MD_OTHER;
+ menu
+ "- Return",M_INIT,
+ "- Bank Services",L_BANK,
+ "- Use Kafra Shop",L_SHOP,
+ "- Broadcast a message",L_BROADCAST,
+ "- Refine Services",L_REFINE,
+ "- Uncard Services",L_UNCARD,
+ "- Stylist Service",L_STYLE,
+ "- Use a Kafra Pass",L_PASS;
+
+MD_OTHER:
+ menu
+ "- Return",M_INIT,
+ "- Bank Services",L_BANK,
+ "- Use Kafra Shop",L_SHOP,
+ "- Broadcast a message",L_BROADCAST,
+ "- Refine Services",L_REFINE,
+ "- Uncard Services",L_UNCARD,
+ "- Stylist Service",L_STYLE,
+ "- Use a Kafra Pass",L_PASS;
+
+L_HEAL:
+ callfunc "F_keHeal";
+ goto M_INIT;
+
+L_TOWN:
+ callfunc "F_keWarpTown";
+ goto M_WARP;
+
+L_DUNGEON:
+ callfunc "F_keDungeonWarps", getarg(3);
+ goto M_WARP;
+
+L_GUILD_DUNGEON:
+ callfunc "F_keWarpWOE";
+ goto M_WARP;
+
+L_PVP:
+ callfunc "F_keWarpPvp";
+ goto M_WARP;
+
+L_STORAGE:
+ callfunc "F_keStorage", getarg(1);
+ goto M_INIT;
+
+L_GUILD_STORAGE:
+ callfunc "F_keGuildStorage", getarg(1);
+ goto M_INIT;
+
+L_BANK:
+ callfunc "F_keBank";
+ goto M_OTHER;
+
+L_SHOP:
+ callfunc "F_keShop",@ke_type, getarg(1);
+ goto M_OTHER;
+
+L_BROADCAST:
+ callfunc "F_keBroadcast",getarg(3);
+ goto M_OTHER;
+
+L_PASS:
+ callfunc "F_kePass";
+ goto M_OTHER;
+
+L_REFINE:
+ callfunc "F_keRefine";
+ goto M_OTHER;
+
+L_UNCARD:
+ callfunc "F_keUncard";
+ goto M_OTHER;
+
+L_STYLE:
+ callfunc "F_keStylist";
+ goto M_OTHER;
+
+L_JOB_CHANGE:
+ callfunc "F_keJobChange";
+ goto M_JOB;
+
+L_JOB_SWAP:
+ callfunc "F_keJobSwap";
+ goto M_JOB;
+
+L_STATS:
+ callfunc "F_keStats";
+ goto M_JOB;
+
+L_STAT_MARKET:
+ callfunc "F_keStatMarket";
+ goto M_JOB;
+
+L_RENT:
+ callfunc "F_keRent";
+ goto M_JOB;
+
+L_SAVE:
+ if (@ke_type == 3 && nif_q_done != 1)
+ goto L_DENIED;
+ if ($@kewt_travel && @ke_type != 1) {
+ callfunc "F_keAddTravelTown", getarg(3);
+ }
+ if ($@kewd_travel && @ke_type != 0) {
+ callfunc "F_keAddTravelDungeon", getarg(3);
+ }
+ if ($@ke_saveOnSpot) {
+ getmapxy @map$,@x,@y,0;
+ savepoint @map$,@x,@y;
+ } else {
+ savepoint getarg(3),getarg(4),getarg(5);
+ }
+ emotion e_scissors;
+ goto M_INIT;
+
+L_DENIED:
+ callfunc "F_keIntro", e_gg, "...no.";
+ goto M_INIT;
+
+L_END:
+ mes "Thank you for using Kafra Services.";
+ close2;
+ cutin getarg(1), 255;
+ end;
+}
+
+//Function F_keIntro (emotion, message)
+//Displays a message followed by an emotion, then a next button, and finally
+//shows the intro message.
+function script F_keIntro {
+ if (getarg(0) >= 0)
+ emotion getarg(0);
+ if (getarg(1) != "") {
+ mes getarg(1);
+ next;
+ }
+ mes "["+@name$+"]";
+ mes "Welcome to Kafra Corp. Always by your side, wherever you go.";
+ if(@kafraPass) mes "Your Kafra Pass is active,";
+ mes "How may I be of help?";
+ return;
+}
+
+//Function Heal, offers the heal subsystem.
+function script F_keHeal {
+ set @qtyHP,MaxHp-Hp;
+ set @qtySP,MaxSp-Sp;
+ set @costHP, $@keh_hpCost*(MaxHp-Hp)/10;
+ set @costSP, $@keh_spCost*(MaxSp-Sp)/10;
+ set @costHPSP, @costHP+@costSP;
+ set @discount, callfunc("F_keCost",1,100);
+
+ if (@qtyHP + @qtySP == 0) {
+ callfunc "F_keIntro", -1, "...you don't need to be healed.";
+ return;
+ }
+ if (@qtyHP == 0) goto M_NO_HP;
+ if (@qtySP == 0) goto M_NO_SP;
+ menu "- Cancel",-,
+ "- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP,
+ "- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP,
+ "- Heal Both ("+(@costHPSP*@discount)+"z)",L_HEAL_ALL;
+ return;
+
+M_NO_HP:
+ menu "- Cancel",-,
+ "- Heal SP ("+(@costSP*@discount)+"z)",L_HEAL_SP;
+ return;
+
+M_NO_SP:
+ menu "- Cancel",-,
+ "- Heal HP ("+(@costHP*@discount)+"z)",L_HEAL_HP;
+ return;
+
+L_HEAL_HP:
+ if (!(callfunc("F_keCharge",@costHP,100,0))) {
+ callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
+ return;
+ }
+ emotion e_no1;
+ heal @qtyHP,0;
+ return;
+
+L_HEAL_SP:
+ if (!(callfunc("F_keCharge",@costSP,100,0))) {
+ callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
+ return;
+ }
+ emotion e_no1;
+ heal 0,@qtySP;
+ return;
+
+L_HEAL_ALL:
+ if (!(callfunc("F_keCharge",@costHPSP,100,0))) {
+ callfunc "F_keIntro", e_sry, "Sorry, you don't have enough to be healed.";
+ return;
+ }
+ emotion e_no1;
+ heal @qtyHP,@qtySP;
+ return;
+}
+
+//Function storage: allows access to the storage facility
+//The sent argument is the displaying image, so we can clear it afterwards.
+function script F_keStorage {
+ if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
+ callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
+ return;
+ }
+ if (!(callfunc("F_keCharge",$@kes_cost,100,1))) {
+ callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
+ return;
+ }
+ mes "Thank for you using Kafra services.";
+ emotion e_thx;
+ close2;
+ openstorage;
+ cutin getarg(0), 255;
+ end;
+}
+
+//Function G Storage: Allows access to the Guild Storage
+function script F_keGuildStorage {
+ if(basicskillcheck(0) > 0 && getskilllv(1) < 6) {
+ callfunc "F_keIntro", -1, "I am sorry, but you beed basic skill level 6 to use the storage.";
+ return;
+ }
+ if(getcharid(2) < 1) {
+ callfunc "F_keIntro", e_swt, "You can't use the Guild Storage if you don't belong to a guild!";
+ return;
+ }
+ if (callfunc("F_keCost",$@kegs_cost,100) > Zeny) {
+ callfunc "F_keIntro", e_an, "Sorry, but you don't have enough Zeny.";
+ return;
+ }
+ if (guildopenstorage(0) == 1) {
+ callfunc "F_keIntro", -1, "Sorry, the guild storage is currently in use by someone else. Try again later.";
+ return;
+ }
+ callfunc "F_keCharge",$@kegs_cost,100,1;
+ mes "Thank for you using Kafra services.";
+ emotion e_thx;
+ close2;
+ cutin getarg(0), 255;
+ end;
+}
+
+function script F_kePass {
+ if (@kafraPass) {
+ callfunc "F_keIntro", -1, "You already are using a Kafra Pass...";
+ return;
+ }
+ if (countitem(1084)<1) {
+ callfunc "F_keIntro", -1, "You obviously need a 'Kafra Pass' if you want to activate it.";
+ return;
+ }
+ delitem 1084,1;
+ set @kafraPass,1;
+ callfunc "F_keIntro", e_lv, "Your Kafra Pass has been activated.";
+ return;
+}
+
+//F_keCost(int cost, int discount%)
+//Returns what would be the cost of a service considering the KafraPass.
+//The discount value should be between 0 and 100
+function script F_keCost {
+ if (@kafraPass) {
+ return getarg(0)*(100-getarg(1))/100;
+ }
+ return getarg(0);
+}
+
+//F_keCharge(int cost, int discount%, bool appliesKP)
+//Charges for a service, using the KafraPass state and discount value.
+//appliesKP marks if the cost savings apply for stocking Kafra Reserve Points
+//Function returns 1 if successful, 0 if there's not enough zeny.
+function script F_keCharge {
+ set @savings, 0;
+ if (@kafraPass)
+ set @savings, getarg(0)*getarg(1)/100;
+ set @cost, getarg(0)-@savings;
+ if (@cost > Zeny || @cost < 0) { // (@cost < 0) for overflow protection
+ return 0;
+ }
+ set Zeny, Zeny-@cost;
+
+ if (getarg(2) && @savings > 0 && $@kekp_reserveCost > 0) {
+ set @savings, @savings/$@kekp_reserveCost;
+ if (@savings < $@kekp_minReserve)
+ set @savings, $@kekp_minReserve;
+ if (@savings > $@kekp_maxReserve)
+ set @savings, $@kekp_maxReserve;
+
+ set RESRVPTS, RESRVPTS + @savings;
+ }
+ return 1;
+}
+
+//Function F_keWarp (int cost, int discount, int emotion, String map, int x, int y)
+function script F_keWarp {
+ if (!(callfunc("F_keCharge",getarg(0),getarg(1),1))) {
+ callfunc "F_keIntro", e_an, "You don't have enough Zeny...";
+ return;
+ }
+ emotion getarg(2);
+ warp getarg(3),getarg(4),getarg(5);
+ end;
+}