function Equip_Menu; function Refine_Item;
set .@menu$,"";
for (set .@i,0; .@i < getarraysize(.MainMenu$); set .@i,.@i+1) {
if (.MenuOption & pow(2,.@i))
set .@menu$, .@menu$+" ~ "+.MainMenu$[.@i];
set .@menu$, .@menu$+":"; }
switch(select(.@menu$)) {
case 1:
Equip_Menu(1);
setarray .@Materials[0],985,1010,1011,984,984;
setarray .@Safe[0],4,7,6,5,4;
set .@WLv, getequipweaponlv(@i);
set .@SafeCount, .@Safe[.@WLv]-getequiprefinerycnt(@i);
message strcharinfo(0),"Item: +"+getequiprefinerycnt(@i)+" "+getequipname(@i);
switch(select(" ~ Refine once (^0055FF"+getequippercentrefinery(@i)+"^000000% success): ~ Refine multiple times (up to "+(10-getequiprefinerycnt(@i))+"): ~ Refine to safe limit ("+((.@SafeCount>0)?.@SafeCount+" refines":"^777777disabled^000000")+"): ~ ^777777Cancel^000000")) {
case 1: Refine_Item(1, .@Materials[.@WLv], .RP[.@WLv], .@Safe[.@WLv]); close;
case 2:
input .@Refines;
if (.@Refines+getequiprefinerycnt(@i) > 10 || .@Refines < 1) message strcharinfo(0),"Invalid number ("+.@Refines+").";
else Refine_Item(.@Refines, .@Materials[.@WLv], .RP[.@WLv], .@Safe[.@WLv]);
close;
case 3:
if (.@SafeCount < 1) message strcharinfo(0),"The item has already reached the safe limit.";
else Refine_Item(.@SafeCount, .@Materials[.@WLv], .RP[.@WLv], .@Safe[.@WLv]);
close;
case 4: close;
}
case 2:
Equip_Menu(1);
setarray .@Materials[0],7619,7620,7620,7620,7620;
setarray .@Safe[0],4,7,6,5,4;
set .@WLv, getequipweaponlv(@i);
message strcharinfo(0),"Item: +"+getequiprefinerycnt(@i)+" "+getequipname(@i);
if(select(" ~ Refine item (2 * ^0055FF"+getequippercentrefinery(@i)+"^000000% success): ~ ^777777Cancel^000000")==2) close;
Refine_Item(1, .@Materials[.@WLv], .RP[.@WLv], .@Safe[.@WLv], 1);
close;
case 3:
setarray .@position$[1], "Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3";
set .@menu$,"";
for( set .@i,1; .@i <= 10; set .@i,.@i+1 )
{
if( getequipisequiped(.@i) )
set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
set .@menu$, .@menu$ + ":";
}
set .@part,select(.@menu$);
if( !getequipisequiped(.@part) )
close;
if( !getequipisenableref(.@part) )
{
message strcharinfo(0),"You can't refine this item at all";
}
if( !getequipisidentify(.@part) )
{
message strcharinfo(0),"This item has not been identified";
close;
}
if( getequiprefinerycnt(.@part) >= 10 || getequiprefinerycnt(.@part) < 7 )
{
message strcharinfo(0),"This item cannot be refined because it's refine level is more than 10 or less than 7...";
close;
}
switch( getequipweaponlv(.@part) )
{
case 1: callsub S_RefineValidate,1,6240,50,.@part; break;
case 2: callsub S_RefineValidate,2,6240,200,.@part; break;
case 3: callsub S_RefineValidate,3,6240,5000,.@part; break;
case 4: callsub S_RefineValidate,4,6240,20000,.@part; break;
default: callsub S_RefineValidate,0,6241,2000,.@part; break;
}
if( getequippercentrefinery(.@part) > rand(100) || getequippercentrefinery(.@part) > rand(100) )
{
SuccessRefItem .@part;
message strcharinfo(0),"All done";
close;
}
if( getequiprefinerycnt(.@part) > 7 )
{
downrefitem .@part;
}
message strcharinfo(0),"Your item "+getequipname(.@part)+" has not been refine";
close;
S_RefineValidate:
if( select(" ~ Refine item (2*^0055FF"+getequippercentrefinery(getarg(3))+"^000000% success): ~ ^777777Cancel^000000") == 1 )
{
if( countitem(getarg(1)) > 0 && Zeny > getarg(2) )
{
delitem getarg(1), 1;
set Zeny, Zeny - getarg(2);
return;
}
message strcharinfo(0),"I'll need " + getarg(2) + " zeny and 1 " + getitemname(getarg(1)) + "...";
close;
}
close;
case 4:
setarray .@position$[1],"Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3";
set .@menu$,"";
for(set .@i,1; .@i<=10; set .@i,.@i+1) {
if(getequipisequiped(.@i))
set .@menu$, .@menu$ + .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]";
set .@menu$, .@menu$ + ":";
}
set .@part,select(.@menu$);
if(!getequipisequiped(.@part)) {
message strcharinfo(0),"You're not wearing anything that it can be refine";
close;
}
if(!getequipisenableref(.@part)) {
message strcharinfo(0),"This item can't be refine";
close;
}
if(!getequipisidentify(.@part)) {
message strcharinfo(0),"This item is not identified";
close;
}
if(getequiprefinerycnt(.@part) < 10) {
message strcharinfo(0),"Only item at least lv. 10 can be refine";
close;
}
if(getequiprefinerycnt(.@part) >= 20) {
message strcharinfo(0),"This item can't be refined anymore";
close;
}
set .@refineitemid, getequipid(.@part); // save id of the item
set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count
if ((getequipweaponlv(.@part) >= 1) && (getequipweaponlv(.@part) <= 4)) {
set .@material,6226;
set .@price,100000;
set .@safe,10;
} else {
set .@material,6225;
set .@price,100000;
set .@safe,10;
}
if(countitem(.@material) < 1 || Zeny < .@price) {
message strcharinfo(0),"I'll need " + .@price + " zeny and 1 " + getitemname(.@material) + "...";
close;
}
if( select(" ~ Refine item (^0055FF33^000000% success): ~ ^777777Cancel^000000") == 1 )
{
set Zeny,Zeny - .@price;
delitem .@material,1;
if(getequipisequiped(.@part) == 0) { // hacker has removed the item (not changed, why?)
message strcharinfo(0),"You don't have item on you";
close;
}
if(getequiprefinerycnt(.@part) != .@refinerycnt || getequipid(.@part) != .@refineitemid) { // hacker has changed the item
message strcharinfo(0),"You switched the item...";
close;
}
set .@rand,rand(1,3);
if (.@rand == 1) {
message strcharinfo(0),"All done";
successrefitem .@part;
close;
}
if (.@rand == 2 || .@rand == 3) {
if(getequiprefinerycnt(.@part) > 10){
downrefitem .@part;
}
message strcharinfo(0),"Your item "+getequipname(.@part)+" has not been refine";
close;
}
}
close;
function Equip_Menu {
setarray .@pos$[1],"Upper Headgear","Armor","Left hand","Right hand","Garment","Footgear","Left Accessory","Right Accessory","Mid Headgear","Lower Headgear";
set .@menu$,"";
for (set .@i,1; .@i <= 10; set .@i,.@i+1) {
if (getequipisequiped(.@i))
set .@menu$, .@menu$+.@pos$[.@i]+" [^0055FF"+getequipname(.@i)+"^000000]";
set .@menu$, .@menu$+":"; }
set @i, select(.@menu$);
if (!getequipisequiped(@i)) { message strcharinfo(0),"Nothing is equipped there!"; close; }
if (getarg(0)) {
if (!getequipisenableref(@i)) { message strcharinfo(0),getequipname(@i)+" cannot be refined."; close; }
if (getequiprefinerycnt(@i) >= 10 ) { message strcharinfo(0),"+"+getequiprefinerycnt(@i)+" "+getequipname(@i)+" cannot be refined any further."; close; } }
return; }
function Refine_Item {
message strcharinfo(0),"I'll need "+getarg(0)+"x "+getitemname(getarg(1))+" and "+getarg(0)*getarg(2)+" Zeny.";
if (countitem(getarg(1)) < getarg(0) || Zeny < getarg(0)*getarg(2)) {
sleep2 500; message strcharinfo(0),"Come back when you have the required materials."; close; }
if (getequiprefinerycnt(@i)+getarg(0) > getarg(3)) {
sleep2 500; message strcharinfo(0),"The item will be refined above the safe limit. It may break."; }
sleep2 500;
if(select(" ~ ^0055FFContinue^000000: ~ ^777777Cancel^000000")==2) close;
set .@j, getarg(0);
while(.@j) {
delitem getarg(1), 1;
set Zeny, Zeny-getarg(2);
if (getarg(4,0)) {
if (getequippercentrefinery(@i) <= rand(100) && getequippercentrefinery(@i) <= rand(100)) {
message strcharinfo(0),getequipname(@i)+" broke while refining."; failedrefitem @i; close; } }
else {
if (getequippercentrefinery(@i) <= rand(100)) {
message strcharinfo(0),getequipname(@i)+" broke while refining."; failedrefitem @i; close; } }
successrefitem @i;
set .@j, .@j-1; }
message strcharinfo(0),"All done!";
close; }
}
OnInit:
// --------------------- Config ---------------------
setarray .MainMenu$[0], // Set menu options!
"Normal Refiner", // [1]
"Enriched Refiner", // [2]
"Purified Refiner", // [4]
"Bradium / Carnium Refiner"; // [8]
set .MenuOption,1|2|4|8;
set .EnrichedRefine,1; // Allow enriched refiner option? (1: yes / 0: no)
setarray .RP[0],2000,50,200,5000,20000; // Zeny for armor, lv1, lv2, lv3, lv4 refines
// --------------------------------------------------
end;
}