//===== rAthena Script =======================================
//= Shadow Blacksmith
//===== Description: =========================================
//= [Official Conversion]
//= Shadow equipments refining NPC.
//===== Changelog: ===========================================
//= 1.0 First version [Aleos]
//= 1.1 Removed re-roll behavior and fetch materials from db
//=     [Secret]
//= 1.2 Added Refine UI [Atemo, Lemongrass]
//============================================================
-	script	::ShadowBlacksmith	-1,{
	if( getbattleflag( "feature.refineui" ) ){
		mes "[Shadow Blacksmith]";
		mes "Now Basta is in charge of refinement for shadow items.";
		mes "If you'd like to refine a shadow item, please visit him.";
		close;
	}

	.@zeny_cost = 200000; // Zeny cost is 200,000 according to official script [Secret]
	disable_items;
	mes "[Shadow Blacksmith]";
	mes "Do you want to refine a shadow item? Pick yer poison!";
	next;
	setarray .@indices[1], EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON, EQI_SHADOW_SHIELD, EQI_SHADOW_SHOES, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L;
	.@indlen = getarraysize(.@indices) - 1;
	for(.@i = 1; .@i <= .@indlen; .@i++)
		.@menu$ = .@menu$ + (getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) +"-[Not equipped]") +":";
	.@menu$ = .@menu$ + "Refine info";
	.@choice = select(.@menu$);
	if (.@choice == .@indlen + 1) { // Refine info
		mes "[Shadow Blacksmith]";
		mes "When a shadow item is refined, it gains extra bonuses very much like normal items.";
		next;
		mes "[Shadow Blacksmith]";
		mes "Weapon: ATK, MATK + 1 increase for each +1 refine success.";
		mes "Etc: HP + 10 increase for each +1 refine success.";
		next;
		mes "[Shadow Blacksmith]";
		mes "All types of Oridecon and Elunium can be used to refine shadow items. Each attempt will also cost 20,000 zeny.";
		next;
		mes "[Shadow Blacksmith]";
		mes "HD ores can be used for gear that is at least refine level +7 and will prevent breaking as long as you stay talking to me.";
		close;
	}

	.@part = .@indices[.@choice];

	if (!getequipisequiped(.@part)) {
		mes "[Shadow Blacksmith]";
		mes "There's nothing here!";
		close;
	}
	.@equip_id = getequipid(.@part);
	setarray .@card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);

	while(1) {
		.@equip_refine = getequiprefinerycnt(.@part);
		mes "[Shadow Blacksmith]";
		mes "I require " + callfunc("F_InsertComma", .@zeny_cost) + " zeny as a fee for EACH refine attempt.";
		mes "Choose your Ore and start refining.";
		next;

		.@material[0] = getequiprefinecost(.@part, REFINE_COST_NORMAL, REFINE_MATERIAL_ID);
		.@material[1] = getequiprefinecost(.@part, REFINE_COST_ENRICHED, REFINE_MATERIAL_ID);
		.@material[2] = getequiprefinecost(.@part, REFINE_COST_HD, REFINE_MATERIAL_ID);
		.@is_enriched = false;

		if (countitem(.@material[0]))
			.@mate$[0] = getitemname(.@material[0]);
		else
			.@mate$[0] = "^8C8C8C"+ getitemname(.@material[0]) +"^000000";
		if (countitem(.@material[1]))
			.@mate$[1] = getitemname(.@material[1]);
		else
			.@mate$[1] = "^8C8C8C"+ getitemname(.@material[1]) +"^000000";
		if (.@equip_refine > 6 && countitem(.@material[2]))
			.@mate$[2] = getitemname(.@material[2]);
		else
			.@mate$[2] = "^8C8C8C"+ getitemname(.@material[2]) +"^000000";

		switch( select( .@mate$[0], .@mate$[1], .@mate$[2], "Cancel" ) ) {
		case 1:// NORMAL
			.@choose = .@material[0];
			break;
		case 2:// ENRICHED
			.@is_enriched = true;
			.@choose = .@material[1];
			break;
		case 3:// HD
			if (.@equip_refine < 7) {
				mes "[Shadow Blacksmith]";
				mes "HD Ore can only used for +7 or higher refine level items.";
				close;
			}
			.@hoihoi = 1;
			.@choose = .@material[2];
			break;
		case 4:
			mes "[Shadow Blacksmith]";
			mes "You've cancelled refining.";
			close;
		}
		if (!countitem(.@choose)) {
			mes "[Shadow Blacksmith]";
			mes "You do not have enough "+ getitemname(.@choose) +".";
			close;
		}
		if (Zeny < .@zeny_cost) {
			mes "[Shadow Blacksmith]";
			mes "You do not have enough zeny.";
			close;
		}
		if (.@equip_refine > 9) {
			mes "[Shadow Blacksmith]";
			mes "Shadow Equipment can be refined to the maximum of 10...";
			close;
		}
		if (!getequipisenableref(.@part)) {
			mes "[Shadow Blacksmith]";
			mes "This item cannot be refined.";
			close;
		}
		if (getequippercentrefinery(.@part) < 100) {
			mes "[Shadow Blacksmith]";
			mes "The safety refine level for Shadow Equipment is +4.";
			if (!.@hoihoi)
				mes "Shadow equipment may be destroyed in subsequent refinements. Want to get started?";
			else
				mes "The next refinement, if it fails, will degrade the refinement. Do you want to refine?";
			next;
			if (select("Proceed","Cancel") == 2) {
				mes "[Shadow Blacksmith]";
				mes "Heh, I knew it!";
				close;
			}
		}
		mes "[Shadow Blacksmith]";
		mes "Well then.. here goes nothing!";
		next;
		delitem .@choose,1;
		Zeny -= .@zeny_cost;

		// anti-hack
		if (callfunc("F_IsEquipIDHack", .@part, .@equip_id) || callfunc("F_IsEquipCardHack", .@part, .@card[0], .@card[1], .@card[2], .@card[3]) || callfunc("F_IsEquipRefineHack", .@part, .@equip_refine))
			close;

		if (getequippercentrefinery(.@part, .@is_enriched) > rand(100)) {
			successrefitem .@part;
			mes "[Shadow Blacksmith]";
			mes "It worked! It worked!";
			next;
		} else {
			if (.@hoihoi)
				downrefitem .@part;
			else
				failedrefitem .@part;
			mes "[Shadow Blacksmith]";
			mes "Oh Odin No!";
			close;
		}
	}
}

//moc_paraup,45,185,5	duplicate(ShadowBlacksmith)	Shadow Blacksmith#eden1	4_F_JOB_BLACKSMITH // Commented out until it's added to the map index
prt_in,61,54,3	duplicate(ShadowBlacksmith)	Shadow Blacksmith#itemmall	4_F_JOB_BLACKSMITH
