//Le Livre d'Ymir http://www.bookofymir.net/ //traduit par Myllena //===== eAthena Script ======================================= //= Kafra Express - Refining Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.8 //===== 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 -1,{ 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( "- Retour", "- Raffiner un Equipement", "- Réparer un Equipement", "- Acheter des Minerais", "- Raffiner des Minerais" ); 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( "- Annuler le raffinement", "- "+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, "Il n'y a rien à raffiner ici..."; } else if(getequipisenableref(@part) == 0 && $@kerf_refineAll == 0) { callfunc "F_keIntro", -1, "Désolée, mais cet objet ne peut pas être raffiné."; } else if(getequiprefinerycnt(@part) >= $@kerf_maxLv) { callfunc "F_keIntro", -1, "Cet objet a atteint sa limite de raffinement."; 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( "- Annuler ("+(100-getequippercentrefinery(@part))+"% chance que le raffinement échoue)", "- Raffiner (Fournir "+getitemname(@mat)+" et "+@cost+" Zenys)") != 2) break; } else { if (select( "- Annuler (le raffinement peut casser votre objet!)", "- Raffiner (Fournir "+getitemname(@mat)+" et "+@cost+" Zenys)") != 2) break; } } else { if (select( "- Raffiner (Fournir "+getitemname(@mat)+" et "+@cost+" Zenys)", "- Annuler") != 1) break; } if (getequiprefinerycnt(@part) >= $@kerf_maxLv) { callfunc "F_keIntro", e_ok, "Cet objet a atteint sa limite de raffinement."; break; } if (countitem(@mat) < 1) { callfunc "F_keIntro", e_ag, "Désolée, vous n'avez pas les matériaux requis."; break; } if (!(callfunc("F_keCharge",@cost,$@kerf_discount,1))) { callfunc "F_keIntro", e_ag, "Désolée, vous n'avez pas assez d'argent."; break; } delitem @mat,1; if ($@kerf_safe || getequippercentrefinery(@part)>rand(100)) { successrefitem @part; emotion e_rock; } else { failedrefitem @part; callfunc "F_keIntro", e_swt, "...désolée."; 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, "Vous n'avez rien à réparer pour le moment."; 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$,"- Annuler (la réparation nécessite "+@cost+" Zenys et 1 "+getitemname(999); else set @str$,"- Annuler (la réparation nécessite "+@cost+" Zenys)"; 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, "Désolée, vous n'avez pas les matériaux requis."; return; } if (!(callfunc("F_keCharge", $@kerf_repairCost, $@kerf_repairDiscount,1))) { callfunc "F_keIntro", e_ag, "Désolée, vous n'avez pas assez d'argent."; 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 ( "- Retour", "- Purifier de l'"+getitemname(984)+" (nécessite 5 "+getitemname(756)+")", "- Purifier de l'"+getitemname(985)+" (nécessite "+getitemname(757)+")", "- Purifier de l'"+getitemname(998)+" (nécessite "+getitemname(1002)+")", "- Forger un "+getitemname(999)+" (nécessite 5 "+getitemname(998)+", 1 "+getitemname(1003)+")", "- Forger un "+getitemname(994)+" (nécessite 10 "+getitemname(990)+")", "- Forger un "+getitemname(995)+" (nécessite 10 "+getitemname(991)+")", "- Forger un "+getitemname(996)+" (nécessite 10 "+getitemname(992)+")", "- Forger un "+getitemname(997)+" (nécessite 10 "+getitemname(993)+")", "- Forger un "+getitemname(1000)+" (nécessite "+getitemname(1001)+")" ); } else { set @submenu, select( "- Retour", "- Purifier de l'"+getitemname(984)+" (nécessite 5 "+getitemname(756)+")", "- Purifier de l'"+getitemname(985)+" (nécessite 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, "Désolée, vous n'avez pas les matériaux requis."; 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, "Désolée, vous n'avez pas les matériaux requis."; 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( "- Retour", "- Acheter du "+getitemname(1010)+" (200 Zenys pièce)", "- Acheter de l'"+getitemname(1011)+" (1000 Zenys pièce)" ); 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, "Cette quantité n'est pas valide..."; } else if (@cost > Zeny) { callfunc "F_keIntro", e_ag, "Désolée, vous n'avez pas assez d'argent."; } else if (@cost < 0) { callfunc "F_keIntro", e_swt2, "Désolée, cette quantité est trop importante! Essayez d'en acheter moins..."; } else { set Zeny,Zeny-@cost; getitem @mat,@qty; emotion e_paper; } } while (@submenu > 1); } }