//================= Hercules Script =======================================
//=       _   _                     _
//=      | | | |                   | |
//=      | |_| | ___ _ __ ___ _   _| | ___  ___
//=      |  _  |/ _ \ '__/ __| | | | |/ _ \/ __|
//=      | | | |  __/ | | (__| |_| | |  __/\__ \
//=      \_| |_/\___|_|  \___|\__,_|_|\___||___/
//================= License ===============================================
//= This file is part of Hercules.
//= http://herc.ws - http://github.com/HerculesWS/Hercules
//=
//= Copyright (C) 2012-2015  Hercules Dev Team
//= Copyright (C)  Euphy
//= Copyright (C)  Muad_Dib
//=
//= 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/>.
//=========================================================================
//= Card Separation System
//================= Description ===========================================
//= Separates cards from equipment.
//================= Current Version =======================================
//= 1.1
//=========================================================================

-	script	::CardSeparation_mal	FAKE_NPC,{
	disable_items;
	if (checkweight(Knife,1) == 0) {
		mes "You have too many kinds of objects. Let's try to continue after reducing those objects.";
		close;
	}
	if (MaxWeight - Weight < 10000) {
		mes "Can't continue because you have too many heavy objects. Let's try to continue after reducing the weight.";
		close;
	}
	if (strnpcinfo(NPC_NAME_VISIBLE) == "Jeremy") {
		.@Jeremy = 1;
		.@n$ = "[Jeremy]";
		setarray .@equip_name$[0],  "Armor",  "Shoes",  "Garment", "Upper Hat";
		setarray .@equip_slot[0], EQI_ARMOR,EQI_SHOES,EQI_GARMENT,EQI_HEAD_TOP;

		mes .@n$;
		mes "Long time no see~";
		mes "I have learned a new skill that separates cards from Armor, Shoes, Garment and Headgear. Do you want to try it?";
	} else {
		.@Jeremy = 0;
		.@n$ = "[Richard]";
		setarray .@equip_name$[0], "Left hand", "Right hand";
		setarray .@equip_slot[0],   EQI_HAND_L,   EQI_HAND_R;

		mes .@n$;
		mes "Silly Jeremy does not want to touch weapons and shields because of picking several cards that might be damaged. That is why I prepared a card separaion skill for weapons and shields...";
	}
	next;
	mes .@n$;
	mes "Generally the fee is 1,000,000 Zeny. During the card separation, you can use ^990000special items that reduce the rate of destroying equipment or cards^000000. We don't charge additional zeny for this.";
	next;
	mes .@n$;
	mes "There is a possibility of destroying them even using a special item. Also, ^ff0000the refine level might be lost^000000. Do you have any equipment to separate?";
	next;

	for(.@i = 0; .@i<getarraysize(.@equip_slot); ++.@i) {
		if (getequipisequiped(.@equip_slot[.@i]))
			.@menu$ += getequipname(.@equip_slot[.@i])+":";
		else
			.@menu$ += "^999999"+.@equip_name$[.@i]+" (empty)^000000:";
	}

	.@i = select("Stop the work:"+((.@Jeremy)?"How is it possible?":"")+":"+.@menu$);
	switch(.@i) {
	case 1:
		mes .@n$;
		mes "Whenever you need the work, visit me here.";
		close;
	case 2:
		mes .@n$;
		mes "You wonder what is so special. Well, I hate to give only a guide, so let me tell you the story...";
		next;
		mes "^000099Jeremy is stretching his shoulders and hands. He might be waiting for someone to talk with him.^000000";
		next;
		mes .@n$;
		mes "Do you know that Malangdo's specialty is canned food?";
		next;
		select("I knew that well. Is it that limited?");
		mes .@n$;
		mes "Hehe... Everyone loves it. But there were some problems before.";
		next;
		select("Problems? Is there any faulty fish?");
		mes .@n$;
		mes "No, the fish does not have any problem. The problem is lots of fish oil produced after processing. That is such an industrial waste.";
		next;
		mes .@n$;
		mes "However, after a revitalizing refining process, this fish oil became valuable to use for old equipment care and industrial lubricant.";
		next;
		mes .@n$;
		mes "In addition, this oil is so useful to separate relics from equipped weapons that we can't buy Premium Lubricant and Ordinary Lubricant with Zeny.";
		next;
		mes .@n$;
		mes "Well, don't worry about money. Surely the Premium Lubricant is expensive. If you pay some zeny, I can give you cheaper lubricant.";
		next;
		mes .@n$;
		mes "I'm not sure about the quality of success. Anyway, this is so cheap, right?";
		close;
	default:
		.@equip_num = .@equip_slot[.@i-3];
		if (!getequipisequiped(.@equip_num)) {
			mes .@n$;
			if (.@Jeremy)
				mes "In this part, there is nothing?";
			else
				mes "There is nothing on that part?";
			close;
		}
		break;
	}

	setarray .@equip_card, getequipcardid(.@equip_num,0),getequipcardid(.@equip_num,1),getequipcardid(.@equip_num,2),getequipcardid(.@equip_num,3);
	setarray .@mvp_list, Gloom_Under_Night_Card, Golden_Bug_Card, Nidhogg_Shadow_Card, Dark_Lord_Card, Doppelganger_Card,
		Dracula_Card, Drake_Card, Detale_Card, Randgris_Card, B_Seyren_Card,
		Maya_Card, Mistress_Card, Baphomet_Card, Bacsojin_Card, Berzebub_Card,
		Apocalips_H_Card, B_Ygnizem_Card, B_Shecil_Card, Amon_Ra_Card, Atroce_Card,
		B_Eremes_Card, Eddga_Card, Osiris_Card, Orc_Load_Card, Orc_Hero_Card,
		Incant_Samurai_Card, Moonlight_Flower_Card, Ifrit_Card, Lord_Of_Death_Card, Ktullanux_Card,
		Kiel_Card, Thanatos_Card, Lady_Tanee_Card, Fallen_Bishop_Card, Tao_Gunka_Card,
		Turtle_General_Card, Pharaoh_Card, Knight_Windstorm_Card, Phreeoni_Card, B_Katrinn_Card,
		B_Magaleta_Card, Garm_Card, B_Harword_Card, Dark_Snake_Lord_Card, Rsx_0806_Card;
	.@boss_chk = false;

	if (.@Jeremy) {
		.@cardcount = 4;
		for (.@i = 0; .@i < 4; ++.@i) {
			if (.@equip_card[.@i] >= 4700 // Armor Enchant System
			 || .@equip_card[.@i] == 0) {
				.@equip_card[.@i] = 0;
				--.@cardcount;
			}
		}
		if (!.@cardcount) {
			mes .@n$;
			mes "The card is not equipped. Do you want to check again?";
			close;
		}
		for (.@i = 0; .@i < 4; ++.@i) {
			if (.@equip_card[.@i] == 0)
				continue;
			for (.@j = 0; .@j < getarraysize(.@mvp_list); ++.@j) {
				if (.@equip_card[.@i] == .@mvp_list[.@j])
					.@boss_chk = true;
			}
		}
	} else {
		// Official "Richard" script uses a hardcoded list including every possible item.
		//if (!getequipisequiped(.@equip_num)) {
		//	mes "[Richard]";
		//	mes "I'm sorry. We don't provide that equipmnet yet.";
		//	close;
		//}

		mes "[Richard]";
		mes "Which number socket do you want to separate the card? From the left socket, they are sorted 1,2,3,4.";
		next;
		.@menu$ = "";
		for(.@i = 0; .@i<4; ++.@i) {
			if (.@equip_card[.@i] && .@equip_card[.@i] < 4700) // Armor Enchant System
				.@menu$ += "Socket "+(.@i+1)+" - "+getitemname(.@equip_card[.@i])+":";
			else
				.@menu$ += "^777777Socket "+(.@i+1)+" - No card^000000:";
		}
		.@i = select("Stop the work:"+ .@menu$);
		switch(.@i) {
		case 1:
			mes .@n$;
			mes "Whenever you need to work, please come to me.";
			close;
		default:
			.@slot = .@i-2;
			if (.@equip_card[.@slot] == 0 || .@equip_card[.@slot] >= 4700) {
				mes .@n$;
				mes "This socket is not equipped with any card. Why don't you check again?";
				close;
			}
			break;
		}
		for (.@i = 0; .@i < getarraysize(.@mvp_list); ++.@i) {
			if (.@equip_card[.@slot] == .@mvp_list[.@i])
				.@boss_chk = true;
		}
	}
	if (!.@boss_chk) {
		mes .@n$;
		if (.@Jeremy)
			mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
		else
			mes "Please choose the working fee.";
		next;
		.@menu$ = "Next time...:"+
			((Zeny >= 1000000)?"Use 1,000,000z (Do not use special item):":"^999999Use 1,000,000z (Insufficient)^000000:")+
			((countitem(High_RankLubricant))?"Use Premium Lubricant:":"^999999Premium Lubricant (Insufficient)^000000:")+
			((countitem(General_Lubricant))?"Use Ordinary Lubricant":"^999999Ordinary Lubricant (Insufficient)^000000");
		switch(select(.@menu$)) {
		case 1:
			mes .@n$;
			mes "Whenever you need the work, visit me here.";
			close;
		case 2:
			if (Zeny < 1000000) {
				mes .@n$;
				mes "You don't have enough zeny. Please come back with enough fees.";
				close;
			}
			mes .@n$;
			mes "This is pretty old equipment. There is a high rate of destroying the cards or equipment during the work. Are you sure you want to continue?";
			next;
			if(select("Next time...", "Continue") == 1) {
				mes .@n$;
				mes "Whenever you need the work, visit me here.";
				close;
			}
			.@sf_c_num = 150;
			.@sf_r_num = 150;
			.@sf_w_num = 150;
			Zeny -= 1000000;
			break;
		case 3:
			if (countitem(High_RankLubricant) == 0) {
				mes .@n$;
				mes "You don't have Premium Lubricant.";
				close;
			}
			mes .@n$;
			mes "If you use the Premium Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
			next;
			if(select("Next time...", "Continue") == 1) {
				mes .@n$;
				mes "Whenever you need the work, visit me here.";
				close;
			}
			.@sf_c_num = 75;
			.@sf_r_num = 75;
			.@sf_w_num = 75;
			delitem High_RankLubricant,1;
			break;
		case 4:
			if (countitem(General_Lubricant) == 0) {
				mes .@n$;
				mes "You don't have Ordinary Lubricant.";
				close;
			}
			mes .@n$;
			mes "If you use the Ordinary Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
			next;
			if(select("Next time...", "Continue") == 1) {
				mes .@n$;
				mes "Whenever you need the work, visit me here.";
				close;
			}
			.@sf_c_num = 75;
			.@sf_r_num = 150;
			.@sf_w_num = 150;
			delitem General_Lubricant,1;
			break;
		}
	} else {
		mes .@n$;
		mes "This equipment contains a precious MVP card. This card can't be separated with lubricant. If you bring the super surfactant ^0000ffSillit Pong^000000, I will be able to work.";
		next;
		switch(select("Next time...", "I have a Sillit Pong.")) {
		case 1:
			mes .@n$;
			mes "Whenever you need the work, visit me here.";
			close;
		case 2:
			if (countitem(Sillit_Pong_Bottle) == 0) {
				mes .@n$;
				mes "You don't have Sillit Pong.";
				close;
			}
			break;
		}
		mes .@n$;
		if (.@Jeremy) {
			mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
			.@menu$ = "Alright, let's do it!";
		} else {
			mes "May I continue?";
			.@menu$ = "I got it. Just do it quickly!";
		}
		next;
		switch(select("Next time...:"+ .@menu$)) {
		case 1:
			mes .@n$;
			mes "Whenever you need the work, visit me here.";
			close;
		case 2:
			.@sf_c_num = 60;
			.@sf_r_num = 60;
			.@sf_w_num = 60;
			delitem Sillit_Pong_Bottle,1;
			break;
		}
	}

	.@equip_id = getequipid(.@equip_num);
	.@equip_refine = getequiprefinerycnt(.@equip_num);
	delequip .@equip_num;

	// Chance of retaining refine level.
	if (rand(1,.@sf_r_num) >= 61)
		.@equip_refine = 0;

	if (.@Jeremy) {
		// Chance of retaining equipment.
		if (rand(1,.@sf_w_num) < 61) {
			.@equip_safe = 1;
			getitem2 .@equip_id,1,1,.@equip_refine,0,0,0,0,0;
		}

		// Chance of retaining cards.
		for(.@i = 0; .@i<4; ++.@i) {
			if (.@equip_card[.@i]) {
				if (rand(1,.@sf_c_num) < 61)
					getitem .@equip_card[.@i],1;
				else
					.@card_break = 1;
			}
		}
	} else {
		.@card = .@equip_card[.@slot];
		.@equip_card[.@slot] = 0;

		// Chance of retaining equipment.
		if (rand(1,.@sf_w_num) < 61) {
			.@equip_safe = 1;
			getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
		}

		// Chance of retaining card.
		if (rand(1,.@sf_c_num) < 61)
			getitem .@card,1;
		else
			.@card_break = 1;
	}

	// Display corresponding effect.
	if (!.@equip_safe && .@card_break)
		specialeffect(EF_LORD, AREA, playerattached());
	else if (.@equip_safe && .@card_break)
		specialeffect(EF_SUI_EXPLOSION, AREA, playerattached());
	else if (!.@equip_safe && !.@card_break)
		specialeffect(EF_FIREPILLAR, AREA, playerattached());
	else
		specialeffect(EF_MAXPOWER, AREA, playerattached());

	// Output results.
	mes "-- Result of Card Separation --";
	if (.@equip_safe) {
		mes "Crack has not occured during the card separation process.";
		mes "^0000FFEquipment separation is normal.^000000";
	} else {
		mes "Crack has occured during the card separation process.";
		mes "Equipment has been damaged. ^ff0000Unrecoverable.^000000";
	}
	mes "-------------------";
	if (!.@card_break) {
		mes "Erosion of surface has not occured during the card separation process.";
		mes "^0000ffCard separation has succeeded.^000000";
	} else {
		mes "Erosion of surface has occured during the card separation process.";
		mes "Card has been damaged. ^ff0000Unrecoverable.^000000";
	}
	next;
	mes .@n$;
	mes "That is all for the results of the card separation. Please come again.";
	close;
}
malangdo,215,166,4	duplicate(CardSeparation_mal)	Jeremy#pa0829	4_CAT_DOWN
malangdo,208,166,6	duplicate(CardSeparation_mal)	Richard#pa0829	4_CAT_ADV1
