diff options
Diffstat (limited to 'npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt')
-rw-r--r-- | npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt new file mode 100644 index 000000000..420d12b63 --- /dev/null +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt @@ -0,0 +1,339 @@ +//===== eAthena Script =======================================
+//= Kafra Express - Refining Module
+//===== By: ==================================================
+//= Skotlex
+//===== Current Version: =====================================
+//= 2.7
+//===== Compatible With: =====================================
+//= eAthena SVN R3424+
+//===== Description: =========================================
+//= Part of the Kafra Express Script Package.
+//= Does item forging, ore purifying and repairing.
+//= Can also sell phracon/emveretarcon
+//===== Additional Comments: =================================
+//= See config.txt for configuration.
+//============================================================
+
+- script keInit_refine {
+OnInit: //Load Config
+ donpcevent "keConfig::OnLoadRefine";
+ end;
+}
+
+function script F_keRefine {
+
+function SF_refine;
+function SF_repair;
+function SF_purify;
+function SF_sellOres;
+
+ do {
+ set @kmenu, select(
+ "- Return",
+ "- Refine Equipment",
+ "- Repair Equipment",
+ "- Buy Ores",
+ "- Purify Ores",
+ );
+ switch(@kmenu) {
+ case 2: //Refine
+ SF_refine();
+ break;
+ case 3: //Repair
+ SF_repair();
+ break;
+ case 4: //Buy Ore
+ SF_sellOres();
+ break;
+ case 5: //Purify Ore
+ SF_purify();
+ break;
+ }
+ } while (@kmenu > 1);
+ return;
+
+//Subfunction SF_refine, presents the refining menu.
+function SF_refine {
+ do {
+ set @part, select(
+ "- Cancel upgrading",
+ "- "+getequipname(1),
+ "- "+getequipname(2),
+ "- "+getequipname(3),
+ "- "+getequipname(4),
+ "- "+getequipname(5),
+ "- "+getequipname(6),
+ "- "+getequipname(7),
+ "- "+getequipname(8),
+ "- "+getequipname(9),
+ "- "+getequipname(10)
+ );
+ set @part, @part-1;
+ if (@part == 0)
+ break;
+ if (getequipisequiped(@part) == 0) {
+ callfunc "F_keIntro", e_swt, "There is nothing to refine there...";
+ } else
+ if(getequipisenableref(@part) == 0 && $@kerf_refineAll == 0) {
+ callfunc "F_keIntro", -1, "Sorry, this item cannot be refined.";
+ } else
+ if(getequiprefinerycnt(@part) >= $@kerf_maxLv) {
+ callfunc "F_keIntro", -1, "This item cannot be refined further.";
+ break;
+ } else {
+ switch (getequipweaponlv(@part))
+ {
+ case 0: //Armor
+ set @mat,985;
+ set @cost,$@kerf_armorCost;
+ break;
+ case 1:
+ set @mat,1010;
+ set @cost,$@kerf_weaponLv1Cost;
+ break;
+ case 2:
+ set @mat,1011;
+ set @cost,$@kerf_weaponLv2Cost;
+ break;
+ case 3:
+ set @mat,984;
+ set @cost,$@kerf_weaponLv3Cost;
+ break;
+ default:
+ set @mat,984;
+ set @cost,$@kerf_weaponLv4Cost;
+ break;
+ }
+ set @cost, callfunc("F_keCost",@cost,$@kerf_discount);
+ do {
+ if ($@kerf_safe==0 && getequippercentrefinery(@part) < 100) {
+ if ($@kerf_showChance) {
+ if (select(
+ "- Return ("+(100-getequippercentrefinery(@part))+"% chance refine will fail)",
+ "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
+ break;
+ } else {
+ if (select(
+ "- Return (Upgrade not safe, item might break!)",
+ "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)") != 2)
+ break;
+ }
+ } else {
+ if (select(
+ "- Refine (Need "+getitemname(@mat)+" and "+@cost+"z)",
+ "- Cancel") != 1)
+ break;
+ }
+ if (getequiprefinerycnt(@part) >= $@kerf_maxLv) {
+ callfunc "F_keIntro", e_ok, "This item has reached it's maximum level.";
+ break;
+ }
+ if (countitem(@mat) < 1) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
+ break;
+ }
+ if (!(callfunc("F_keCharge",@cost,$@kerf_discount,1))) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
+ break;
+ }
+ delitem @mat,1;
+ if ($@kerf_safe || getequippercentrefinery(@part)>rand(100)) {
+ successrefitem @part;
+ emotion e_rock;
+ } else {
+ failedrefitem @part;
+ callfunc "F_keIntro", e_swt, "...sorry.";
+ break;
+ }
+ } while (1);
+ }
+ } while (@part > 0);
+ return;
+}
+
+//Subfunction: SF_repair()
+function SF_repair {
+ set @cost,callfunc("F_keCost",$@kerf_repairCost,$@kerf_repairDiscount);
+ do {
+ set @broken1,getbrokenid(1);
+ if(@broken1==NULL) {
+ callfunc "F_keIntro", -1, "You don't need anything repaired for now.";
+ return;
+ }
+ set @broken2,getbrokenid(2);
+ set @broken3,getbrokenid(3);
+ set @broken4,getbrokenid(4);
+ set @broken5,getbrokenid(5);
+ set @broken6,getbrokenid(6);
+ set @broken7,getbrokenid(7);
+ set @broken8,getbrokenid(8);
+ set @broken9,getbrokenid(9);
+ set @broken10,getbrokenid(10);
+
+ if ($@kerf_repairSteel)
+ set @str$,"- Cancel (Repairing costs "+@cost+"z and 1 "+getitemname(999);
+ else
+ set @str$,"- Cancel (Repairing costs "+@cost+"z)";
+
+ set @idRepair, select(
+ @str$,
+ getitemname(@broken1),
+ getitemname(@broken2),
+ getitemname(@broken3),
+ getitemname(@broken4),
+ getitemname(@broken5),
+ getitemname(@broken6),
+ getitemname(@broken7),
+ getitemname(@broken8),
+ getitemname(@broken9),
+ getitemname(@broken10)
+ );
+ set @idRepair, @idRepair-1;
+ if (@idRepair == 0) break;
+ if ($@kerf_repairSteel && countitem(999) < 1) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
+ return;
+ }
+ if (!(callfunc("F_keCharge", $@kerf_repairCost, $@kerf_repairDiscount,1))) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
+ return;
+ }
+ if ($@kerf_repairSteel) delitem 999,1;
+ repair(@idRepair);
+ emotion e_lv2;
+ } while (@idRepair > 0);
+}
+
+//Subfunction: SF_purify()
+function SF_purify {
+ if ($@kerf_purifyAll) {
+ set @submenu, select (
+ "- Return",
+ "- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
+ "- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")",
+ "- Purify "+getitemname(998)+" (need 2 "+getitemname(1002)+")",
+ "- Temper "+getitemname(999)+" (need 5 "+getitemname(998)+", 1 "+getitemname(1003)+")",
+ "- Temper "+getitemname(994)+" (need 10 "+getitemname(990)+")",
+ "- Temper "+getitemname(995)+" (need 10 "+getitemname(991)+")",
+ "- Temper "+getitemname(996)+" (need 10 "+getitemname(992)+")",
+ "- Temper "+getitemname(997)+" (need 10 "+getitemname(993)+")",
+ "- Temper "+getitemname(1000)+" (need 10 "+getitemname(1001)+")"
+ );
+ } else {
+ set @submenu, select(
+ "- Return",
+ "- Purify "+getitemname(984)+" (need 5 "+getitemname(756)+")",
+ "- Purify "+getitemname(985)+" (need 5 "+getitemname(757)+")"
+ );
+ }
+ switch (@submenu) {
+ case 2: //Oridecon
+ set @item, 984;
+ set @rough, 756;
+ set @qty, 5;
+ break;
+ case 3: //Elunium
+ set @item, 985;
+ set @rough, 757;
+ set @qty, 5;
+ break;
+ case 4: //Iron
+ set @item, 998;
+ set @rough, 1002;
+ set @qty, 2;
+ break;
+ case 5: //Steel
+ set @item,999;
+ set @rough,998;
+ set @qty,5;
+ set @rough2,1003;
+ set @qty2,1;
+
+ set @count,countitem(@rough1);
+ set @count2,countitem(@rough2);
+ if (@count < @qty || @count2 < @qty2) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
+ return;
+ }
+ set @count, @count/@qty;
+ set @count2, @count2/@qty2;
+ if (@count2 < @count)
+ set @count,@count2;
+ delitem @rough2,@qty2*@count;
+ break;
+ case 6: //Fire
+ set @item, 994;
+ set @rough, 990;
+ set @qty, 10;
+ break;
+ case 7: //Ice
+ set @item, 995;
+ set @rough, 991;
+ set @qty, 10;
+ break;
+ case 8: //Wind
+ set @item, 996;
+ set @rough, 992;
+ set @qty, 10;
+ break;
+ case 9: //Earth
+ set @item, 997;
+ set @rough, 993;
+ set @qty, 10;
+ break;
+ case 10: //Star
+ set @item, 1000;
+ set @rough, 1001;
+ set @qty, 10;
+ break;
+ default:
+ return;
+ }
+ set @count,countitem(@rough);
+ if (@count < @qty) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have the materials I need.";
+ return;
+ }
+ set @count, @count/@qty;
+ delitem @rough,@qty*@count;
+ getitem @item,@count;
+ emotion e_paper;
+}
+
+//Subfunction: SF_sellOres()
+function SF_sellOres {
+ do {
+ set @submenu, select(
+ "- Return",
+ "- Buy "+getitemname(1010)+" (200z each)",
+ "- Buy "+getitemname(1011)+" (1000z each)"
+ );
+ switch (@submenu) {
+ case 2: //Phracon
+ set @mat, 1010;
+ set @cost, 200;
+ break;
+ case 3: //Emveratarcon
+ set @mat, 1011;
+ set @cost, 1000;
+ break;
+ default:
+ return;
+ }
+ input @qty;
+ set @cost,@cost*@qty;
+ if (@qty < 1) {
+ callfunc "F_keIntro", e_pif, "That is NOT a valid quantity...";
+ } else if (@cost > Zeny) {
+ callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny.";
+ } else if (@cost < 0) {
+ callfunc "F_keIntro", e_swt2, "Sorry, that's too much! Try buying less...";
+ } else {
+ set Zeny,Zeny-@cost;
+ getitem @mat,@qty;
+ emotion e_paper;
+ }
+ } while (@submenu > 1);
+}
+
+}
|