//===== rAthena Script ======================================= //= Kafra Express - Uncarder Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== //= rAthena SVN R3424+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers uncarding services. //===== Additional Comments: ================================= //= See config.txt for configuration. //============================================================ - script keInit_uncard -1,{ OnInit: //Load Config donpcevent "keConfig::OnLoadUncard"; end; } function script F_keUncard { function SF_uncard; do { set @kmenu, select( "- Return", "- See Price Specifics", "- "+getequipname(1), "- "+getequipname(2), "- "+getequipname(3), "- "+getequipname(4), "- "+getequipname(5), "- "+getequipname(6), "- "+getequipname(7), "- "+getequipname(8), "- "+getequipname(9), "- "+getequipname(10) ); if (@kmenu == 1) return; if (@kmenu == 2) { //Details mes "Okay, listen up..."; next; mes "["+@name$+"]"; if ($@keuc_BaseCost) mes "The base cost is of "+$@keuc_BaseCost+"z."; mes "Each card to be removed incurs a cost of +"+$@keuc_CardCost+"z."; mes "The refine level of the compounded equipment can incur an additional cost:"; mes "Armors: "+$@keuc_UpgradeCostA+"z per level."; mes "Lv1 Weapons: "+$@keuc_UpgradeCostW1+"z per level."; mes "Lv2 Weapons: "+$@keuc_UpgradeCostW2+"z per level."; mes "Lv3 Weapons: "+$@keuc_UpgradeCostW3+"z per level."; mes "Lv4 Weapons: "+$@keuc_UpgradeCostW4+"z per level."; if ($@keuc_Mat1 && $@keuc_Qty1) { mes "The materials needed are:"; mes "- "+$@keuc_Qty1+" "+getitemname($@keuc_Mat1)+"."; } if ($@keuc_Mat2 && $@keuc_Qty2) mes "- "+$@keuc_Qty2+" "+getitemname($@keuc_Mat2)+"."; if ($@keuc_Fail1Chance || $@keuc_Fail2Chance) mes "There is a chance the process might fail and you'll lose your items."; next; callfunc "F_keIntro", -1, ""; } else { if (SF_uncard(@kmenu-2)) return; } } while (@kmenu >1); return; //Subfunction SF_uncard (equipment-position) //Attempts to uncard the equipment. function SF_uncard { set @part, getarg(0); if(getequipcardcnt(@part) == 0) { callfunc "F_keIntro", e_ag, "There are no cards to remove there!"; return 0; } set @cost, $@keuc_BaseCost; set @cost, @cost + $@keuc_CardCost*getequipcardcnt(@part); switch (getequipweaponlv(@part)) { case 0: //Armor set @upgradeCost, $@keuc_UpgradeCostA; break; case 1: //Lv1 Weapons set @upgradeCost, $@keuc_UpgradeCostW1; break; case 2: //Lv2 Weapons set @upgradeCost, $@keuc_UpgradeCostW2; break; case 3: //Lv3 Weapons set @upgradeCost, $@keuc_UpgradeCostW3; break; default: //Lv4 Weapons set @upgradeCost, $@keuc_UpgradeCostW4; } set @cost, @cost + @upgradeCost*getequiprefinerycnt(@part); set @price, callfunc("F_keCost",@cost,$@keuc_discount); if ($@keuc_Fail1Chance) { set @failsave, select( "- Cancel", "- Remove cards ("+@price+"z, item gets priority)", "- Remove cards ("+@price+"z, cards get priority)" ); } else { set @failsave, select( "- Cancel", "- Remove cards ("+@price+"z)" ); } if (@failsave == 1) return 0; set @failsave, @failsave-1; //1: Save item, 2: Save Card if (($@keuc_Mat1 && countitem($@keuc_Mat1) < $@keuc_Qty1) || ($@keuc_Mat2 && countitem($@keuc_Mat2) < $@keuc_Qty2)) { callfunc "F_keIntro", e_pif, "You do not have all the materials I need..."; return 0; } if (!(callfunc("F_keCharge",@cost,$@keuc_discount,1))) { callfunc "F_keIntro", e_ag, "Sorry, you don't have enough zeny."; return 0; } if ($@keuc_Mat1 && $@keuc_Qty1) delitem $@keuc_Mat1, $@keuc_Qty1; if ($@keuc_Mat2 && $@keuc_Qty2) delitem $@keuc_Mat2, $@keuc_Qty2; set @failtype,-1; //Recycling cost... set @cost, rand(1000); if (@cost < $@keuc_Fail2Chance) //Total Failure set @failtype, 0; else if (@cost < $@keuc_Fail1Chance) //Partial Failure set @failtype, @failsave; else if (@cost < $@keuc_Fail0Chance) //Harmless Failure set @failtype, 3; else { //Success successremovecards @part; emotion e_ho; return 1; } failedremovecards @part,@failtype; if (@failtype == 1) mes "The cards were lost..."; if (@failtype == 2) mes "The item was lost..."; if (@failtype == 0) mes "Lost the cards and item..."; callfunc "F_keIntro", e_swt, "...oops."; return 1; } }