diff options
Diffstat (limited to 'npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt')
-rw-r--r-- | npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt | 405 |
1 files changed, 405 insertions, 0 deletions
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt new file mode 100644 index 000000000..f5d1e0ef2 --- /dev/null +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt @@ -0,0 +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;
+}
|