text: //================= Hercules Script =======================================
  //=       _   _                     _
  //=      | | | |                   | |
  //=      | |_| | ___ _ __ ___ _   _| | ___  ___
  //=      |  _  |/ _ \ '__/ __| | | | |/ _ \/ __|
  //=      | | | |  __/ | | (__| |_| | |  __/\__ \
  //=      \_| |_/\___|_|  \___|\__,_|_|\___||___/
  //================= License ===============================================
  //= This file is part of Hercules.
  //= http://herc.ws - http://github.com/HerculesWS/Hercules
  //=
  //= Copyright (C) 2017-2020 Hercules Dev Team
  //= Copyright (C) Dastgir
  //= Copyright (C) Smokexyz (v2.0)
  //=
  //= Hercules is free software: you can redistribute it and/or modify
  //= it under the terms of the GNU General Public License as published by
  //= the Free Software Foundation, either version 3 of the License, or
  //= (at your option) any later version.
  //=
  //= This program is distributed in the hope that it will be useful,
  //= but WITHOUT ANY WARRANTY; without even the implied warranty of
  //= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  //= GNU General Public License for more details.
  //=
  //= You should have received a copy of the GNU General Public License
  //= along with this program.  If not, see <http://www.gnu.org/licenses/>.
  //=========================================================================
  //= Shadow Refiner
  //================= Description ===========================================
  //= Shadow item refiner
  //================= Current Version =======================================
  //= 2.0
  //=========================================================================
  
  itemmall,31,76,3	script	Shadow Blacksmith#nomal	4_F_JOB_BLACKSMITH,{
  
  	// Configuration
  	.@npc_name$ = "[Shadow Blacksmith]";
  	.@zeny_cost = 20000; // Amount of zeny to be charged for refining.
  
  	mesf("%s", .@npc_name$);
  	mes("Do you want to refine a Shadow item?");
  	mes("Please choose the part you want to refine.");
  	
  	if (getbattleflag("features/replace_refine_npcs") == 1) {
  		if (openrefineryui())
  			close();
  	}
  	next();
  
  	disable_items;
  	setarray(.@position$[0],"Armor","Weapon","Shield","Shoes","Earring","Pendant");
  	for (.@i=EQI_SHADOW_ARMOR; .@i <= EQI_SHADOW_ACC_L; .@i++){
  		.@menu$ = .@menu$ + (getequipisequiped(.@i) ? getequipname(.@i) : ("^8C8C8C" + .@position$[.@i-EQI_SHADOW_ARMOR] + " [Not Equipped]^000000" + ":"));
  	}
  	.@menu$ = .@menu$ + "Refine Info";
  	.@SelectedPart = select(.@menu$) + EQI_SHADOW_ARMOR - 1;
  	if (.@SelectedPart == EQI_SHADOW_ACC_L + 1){	// Refine Info
  		mesf("%s", .@npc_name$);
  		mes("Shadow items gain extra bonus effects depending on their refine level, similar to normal weapon and armor items.");
  		next;
  		mesf("%s", .@npc_name$);
  		mes("Refining effects for each Shadow item parts are -");
  		mes("Weapon: ATK, MATK + 1 increase for each +1 refine success.");
  		mes("Etc: HP + 10 increase for each +1 refine success.");
  		next;
  		mesf("%s", .@npc_name$);
  		mesf("You need %s and %s as the ingredient, along with a refine fee %d Zeny.", getitemname(Oridecon), getitemname(Elunium), .@zeny_cost);
  		next;
  		mesf("%s", .@npc_name$);
  		mes("When refining to +5 or higher, you risk breaking your Shadow item.");
  		mes("You may also use Enriched or HD ingredients for the refinement.");
  		close;
  	}
  	while(true) {
  		mesf("%s", .@npc_name$);
  		mesf("%d Zeny will be spent as a refine fee.", .@zeny_cost);
  		mes("Choose the ingredient and start refining.");
  		next;
  		.@index = 0;
  		if (.@SelectedPart != EQI_SHADOW_WEAPON)
  			.@index = 1;
  		setarray .@s_material1[0], Oridecon, Elunium;
  		setarray .@s_material2[0], Enriched_Oridecon, Enriched_Elunium;
  		setarray .@s_material3[0], HD_Oridecon, HD_Elunium;
  		.@refine_type = REFINE_CHANCE_TYPE_NORMAL;
  		if (countitem(.@s_material1[.@index]))
  			.@mate$[0] = getitemname(.@s_material1[.@index]);
  		else{
  			.@mate$[0] = "^8C8C8C"+ getitemname(.@s_material1[.@index]) +"^000000";
  			.@miss[0] = 1;
  		}
  		if (countitem(.@s_material2[.@index]))
  			.@mate$[1] = getitemname(.@s_material2[.@index]);
  		else{
  			.@mate$[1] = "^8C8C8C"+ getitemname(.@s_material2[.@index]) +"^000000";
  			.@miss[1] = 1;
  		}
  		if (getequiprefinerycnt(.@SelectedPart) > 6 && countitem(.@s_material3[.@index]))
  			.@mate$[2] = getitemname(.@s_material3[.@index]);
  		else {
  			.@mate$[2] = "^8C8C8C"+ getitemname(.@s_material3[.@index]) +"^000000";
  			.@miss[2] = 1;
  		}
  		//-----------------------------------------------------------------------------
  		.@option = select("Cancel", .@mate$[0], .@mate$[1], .@mate$[2]);
  		if (.@option == 1){
  			mesf("%s", .@npc_name$);
  			mes("You've cancelled refining.");
  			close;
  		}
  		.@option -= 2;
  		.@hoihoi = false;
  		if (.@option == 2){	//HD
  			if (getequiprefinerycnt(.@SelectedPart) < 7){
  				mesf("%s", .@npc_name$);
  				mes("HD ingredients are only possible to be used when refining an item of quality +7 or higher.");
  				close;
  			}
  			.@hoihoi = true;
  		} else if (.@option == 1) {
  			.@refine_type = REFINE_CHANCE_TYPE_ENRICHED;
  		}
  		if (.@miss[.@option]){
  			mesf("%s", .@npc_name$);
  			mes("You do not have the proper ingredient to proceed with refining.");
  			close;
  		}
  		.@choose = getd(".@s_weapon"+(.@option+1)+"["+ .@index +"]");
  		if (Zeny < 20000) {
  			mesf("%s", .@npc_name$);
  			mes("You do not have enough Zeny to pay the refine fee.");
  			close;
  		}
  		if (getequiprefinerycnt(.@SelectedPart) > 9) {
  			mesf("%s", .@npc_name$);
  			mes("Shadow item refining is only possible up to +10 level.");
  			close;
  		}
  		if (!getequipisenableref(.@SelectedPart)) {
  			mesf("%s", .@npc_name$);
  			mes("This item cannot be refined.");
  			close;
  		}
  		if (getequippercentrefinery(.@SelectedPart, .@refine_type) < 100) {
  			mesf("%s", .@npc_name$);
  			mes("Safety guaranteed refine limit for shadow item is until +4.");
  			if (.@hoihoi == false) {
  				mes("If you try more refining, the item might break upon failing. Do you still want to refine?");
  			}
  			else {
  				mes("If you try more refining, the item refine level might go down when failed. Do you still want to refine?");
  			}
  			next;
  			if (select("Proceed","Cancel") == 2) {
  				mesf("%s", .@npc_name$);
  				mes("You've cancelled refining.");
  				close;
  			}
  		}
  		//-----------------------------------------------------------------------------
  		mesf("%s", .@npc_name$);
  		mes("Here we go--!!!");
  		next;
  		if (Zeny < 20000) {
  			mesf("%s", .@npc_name$);
  			mes("You do not have enough Zeny to pay the refine fee.");
  			close;
  		}
  		if (countitem(.@choose) == 0) {
  			mesf("%s", .@npc_name$);
  			mes("You do not have enough "+ getitemname(.@choose) +".");
  			close;
  		}
  		delitem(.@choose, 1);
  		Zeny -= 20000;
  		if (getequippercentrefinery(.@SelectedPart, .@refine_type) > rand(100)) {
  			successrefitem(.@SelectedPart);
  			mesf("%s", .@npc_name$);
  			mes("Refine was successful.");
  			next;
  		}
  		else {
  			if (.@hoihoi == true)
  				downrefitem(.@SelectedPart);
  			else
  				failedrefitem(.@SelectedPart);
  			mesf("%s", .@npc_name$);
  			mes("Oh no.. Refine has failed.");
  			close;
  		}
  	}
  }
  