//================= 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)  rAthena Dev Team
//= Copyright (C)  Euphy
//= Copyright (C)  eAthena Dev Team
//= Copyright (C)  Gepard
//= Copyright (C)  Kisuka
//= Copyright (C)  Samuray22
//= Copyright (C)  L0ne_W0lf
//= Copyright (C)  ultramage
//= Copyright (C)  SinSloth
//= Copyright (C)  Evera
//= Copyright (C)  Toms
//= Copyright (C)  Lupus
//=
//= 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/>.
//=========================================================================
//= Episode 11.1 Socket Enchant NPC
//================= Description ===========================================
//= Adds slots to selected weapons and armor.
//================= Current Version =======================================
//= 2.0a
//=========================================================================

-	script	Seiyablem#dummy::SocketEnchant	FAKE_NPC,{
	if (checkweight(Knife,1) == 0)
	{
		mes "- Wait a minute !! -";
		mes "- Currently you're carrying -";
		mes "- too many items with you. -";
		mes "- Please try again -";
		mes "- after you lose some weight. -";
		close;
	}
	mes "[Seiyablem]";
	mes "I'm an engineer that specializes in adding Slots to normal Weapons and Armor.";
	mes "My service fee, the required materials and the chance of success all depend on the specific item I'm working on.";
	next;
	mes "[Seiyablem]";
	mes "Adding Slots may seem simple, but it's far more complicated than it looks.";
	mes "If you're interested in my service, let me know.";
	next;
	switch(select("Add Slot to Weapon", "Add Slot to Armor", "Slot Attempt Info", "Cancel"))
	{
		case 1:
			mes "[Seiyablem]";
			mes "You want to add a Slot to a weapon?";
			mes "I categorize weapons by their difficulty in adding a Slot, C Class being easiest and S Class the most difficult.";
			mes "Which class would you like to try?";
			next;
			switch(select("C Class", "B Class", "A Class", "S Class"))
			{
				case 1:
					mes "[Seiyablem]";
					mes "C Class, eh?";
					mes "Now, I can only upgrade certain equipment in that class, so please choose one of the following items, so we can try to add a Slot to it.";
					next;
					switch(select("Trident", "Rope", "Violin"))
					{
						case 1: callfunc "Func_Socket",1460,1461,40,66,200,1010,10;
						case 2: callfunc "Func_Socket",1950,1951,40,66,200,1010,10;
						case 3: callfunc "Func_Socket",1901,1902,40,66,200,1010,10;
					}
				case 2:
					mes "[Seiyablem]";
					mes "B Class?";
					mes "Alright, this is the average equipment category.";
					mes "Please choose the weapon to which you'd like me to try to add a Slot.";
					next;
					switch(select("Chain", "Gladius", "Gakkung Bow", "Pike", "Haedonggum", "Lute", "Wire", "Waghnakh", "Arbalest Bow"))
					{
						case 1: callfunc "Func_Socket",1519,1520,40,61,300,1010,10;
						case 2: callfunc "Func_Socket",1219,1220,40,61,300, 984, 1,999,5;
						case 3: callfunc "Func_Socket",1714,1716,40,61,300, 984, 2,999,5;
						case 4: callfunc "Func_Socket",1407,1408,40,61,200,1010,10;
						case 5: callfunc "Func_Socket",1123,1128,40,61,300, 984, 2,999,5;
						case 6: callfunc "Func_Socket",1905,1906,40,61,300,1011,10;
						case 7: callfunc "Func_Socket",1954,1955,40,61,300,1011,10;
						case 8: callfunc "Func_Socket",1801,1802,40,61,300,1010,10;
						case 9: callfunc "Func_Socket",1713,1715,40,61,300, 984, 2,999,5;
					}
				case 3:
					mes "[Seiyablem]";
					mes "Ooh, A Class.";
					mes "This is some high risk territory!";
					mes "Alright, which weapon would you like me to try adding a Slot?";
					next;
					switch(select("Hunter Bow", "Survivor's Rod(INT)", "Zweihander", "Flamberge", "Infiltrator", "Ballista", "Stunner", "Berserk", "Claymore"))
					{
						case 1: callfunc "Func_Socket",1718,1726,40,61,500,984,2,999,10;
						case 2: callfunc "Func_Socket",1619,1620,40,61,500,984,5,999,10;
						case 3: callfunc "Func_Socket",1168,1171,40,61,800,984,5,999,10;
						case 4: callfunc "Func_Socket",1129,1149,40,61,500,984,2,999,10;
						case 5: callfunc "Func_Socket",1261,1266,40,61,700,984,5,999,10;
						case 6: callfunc "Func_Socket",1722,1727,40,61,500,984,5,999,10;
						case 7: callfunc "Func_Socket",1522,1532,40,61,500,984,2,999,10;
						case 8: callfunc "Func_Socket",1814,1816,40,61,500,984,5,999,10;
						case 9: callfunc "Func_Socket",1163,1172,40,61,500,984,2,999,10; // NPC says "5 Oridecon" (Aegis) but takes only 2
					}
				case 4:
					mes "[Seiyablem]";
					mes "Whoa, whoa, whoa...";
					mes "S class? Alright...";
					mes "It'd be a near miracle if I can actually pull this off.";
					mes "Okay... Which weapon shall we try adding a Slot to?";
					next;
					switch(select("Gungnir", "Poison Knife", "Ice Pick", "Sucsamad", "Ginnungagap", "Cutlas", "Crescent Scythe", "Survivor's Rod(DEX)"))
					{
						case 1: callfunc "Func_Socket", 1413, 1418,40,51,1000,984,5,999,10;
						case 2: callfunc "Func_Socket", 1239,13016,40,51,1000,984,5,999,10;
						case 3: callfunc "Func_Socket", 1230,13017,40,51,2000,984,5,999,10;
						case 4: callfunc "Func_Socket", 1236,13018,40,51,1000,984,5,999,10;
						case 5: callfunc "Func_Socket",13002,13019,40,51,1000,984,5,999,10;
						case 6: callfunc "Func_Socket", 1135,13400,40,51,1000,984,5,999,10;
						case 7: callfunc "Func_Socket", 1466, 1476,40,51,1000,984,5,999,10;
						case 8: callfunc "Func_Socket", 1617, 1618,40,51,2000,984,5,999,10;
					}
			}
		case 2:
			mes "[Seiyablem]";
			mes "Armor, you said?";
			mes "Sure, no problem.";
			mes "Armor is divided into 4 different classes, depending on the work difficulty.";
			mes "C Class is the easiest one, and S Class is the hardest one.";
			mes "Which class would you like to try?";
			next;
			switch(select("C Class", "B Class", "A Class", "S Class"))
			{
				case 1:
					mes "[Seiyablem]";
					mes "C Class Armor, eh?";
					mes "Sounds reasonable.";
					mes "Which armor would you like to try adding a Slot?";
					next;
					switch(select("Mantle", "Coat", "Circlet", "Biretta"))
					{
						case 1: callfunc "Func_Socket",2307,2308,40,66,200,999,3;
						case 2: callfunc "Func_Socket",2309,2310,40,66,200,999,3;
						case 3: callfunc "Func_Socket",2232,2233,40,66,200,999,3;
						case 4: callfunc "Func_Socket",2216,2217,40,66,200,999,3;
					}
				case 2:
					mes "[Seiyablem]";
					mes "You have chosen average B Class.";
					mes "So, what kind of armor do you have?";
					next;
					switch(select("Mirror Shield", "Chain Mail", "Saint Robe", "Silk Robe", "Boots", "Shoes", "Muffler", "Guard", "Buckler", "Shield", "Bongun Hat"))
					{
						case 1:  callfunc "Func_Socket",2107,2108,40,61,250,999,5;
						case 2:  callfunc "Func_Socket",2314,2315,40,61,250,999,5;
						case 3:  callfunc "Func_Socket",2325,2326,40,61,300,999,5;
						case 4:  callfunc "Func_Socket",2321,2322,40,61,300,999,5;
						case 5:  callfunc "Func_Socket",2405,2406,40,61,300,999,5;
						case 6:  callfunc "Func_Socket",2403,2404,40,61,300,999,5;
						case 7:  callfunc "Func_Socket",2503,2504,40,61,300,999,5;
						case 8:  callfunc "Func_Socket",2101,2102,40,61,300,999,5;
						case 9:  callfunc "Func_Socket",2103,2104,40,61,300,999,5;
						case 10: callfunc "Func_Socket",2105,2106,40,61,250,999,5;
						case 11: callfunc "Func_Socket",5046,5168,40,61,250,999,5;
					}
				case 3:
					mes "[Seiyablem]";
					mes "Ooh, A Class.";
					mes "This is some high risk territory!";
					mes "Alright, which armor would you like me to try adding a Slot?";
					next;
					switch(select("Gemmed Sallet", "Bucket Hat", "Memory Book", "Tights", "Legion Plate Armor", "Full Plate", "Thief Clothes", "Greaves", "Coif", "Manteau", "Helm", "Ninja Suit", "Orc Helm", "Ancient Cape", "Monk Hat", "Golden Gear", "Brooch", "Munak Hat"))
					{
						case 1:  callfunc "Func_Socket",2230,2231,40,61,400,985,1;
						case 2:  callfunc "Func_Socket",5114,5120,40,61,400,985,1;
						case 3:  callfunc "Func_Socket",2109,2121,40,61,400,985,1;
						case 4:  callfunc "Func_Socket",2330,2331,40,61,400,985,1;
						case 5:  callfunc "Func_Socket",2341,2342,40,61,400,985,1;
						case 6:  callfunc "Func_Socket",2316,2317,40,61,400,985,1;
						case 7:  callfunc "Func_Socket",2335,2336,40,61,400,985,1;
						case 8:  callfunc "Func_Socket",2411,2412,40,61,400,985,1;
						case 9:  callfunc "Func_Socket",5092,5093,40,61,400,985,1;
						case 10: callfunc "Func_Socket",2505,2506,40,61,400,985,1;
						case 11: callfunc "Func_Socket",2228,2229,40,61,400,985,1;
						case 12: callfunc "Func_Socket",2337,2359,40,61,400,985,1;
						case 13: callfunc "Func_Socket",2299,5157,40,61,400,985,1;
						case 14: callfunc "Func_Socket",2507,2525,40,61,400,985,1;
						case 15: callfunc "Func_Socket",2251,5158,40,61,400,985,1;
						case 16: callfunc "Func_Socket",2246,5159,40,61,400,985,1;
						case 17: callfunc "Func_Socket",2605,2625,40,61,400,985,1;
						case 18: callfunc "Func_Socket",2264,5167,40,61,300,985,1;
					}
				case 4:
					mes "[Seiyablem]";
					mes "Um... S Class?";
					mes "You sure about this?";
					mes "Alright... Let me know the Armor to which you'd like to add a Slot, and I'll tell what I need to try it.";
					next;
					switch(select("Majestic Goat", "Spiky Band", "Bone Helm", "Corsair", "Crown", "Tiara", "Sphinx Hat", "Robe of Cast", "Earring", "Ring", "Bow Thimble"))
					{
						case 1:  callfunc "Func_Socket",2256,5160,40,51,2000,985,2;
						case 2:  callfunc "Func_Socket",2258,5161,40,51,2000,985,2;
						case 3:  callfunc "Func_Socket",5017,5162,40,51,2000,985,2;
						case 4:  callfunc "Func_Socket",5019,5163,40,51,2000,985,2;
						case 5:  callfunc "Func_Socket",2235,5165,40,51,2000,985,2;
						case 6:  callfunc "Func_Socket",2234,5164,40,51,2000,985,2;
						case 7:  callfunc "Func_Socket",5053,5166,40,51,1000,985,2;
						case 8:  callfunc "Func_Socket",2343,2360,40,51,1000,985,2;
						case 9:  callfunc "Func_Socket",2602,2622,40,51,1000,985,2;
						case 10: callfunc "Func_Socket",2601,2621,40,51,1000,985,2;
						case 11: callfunc "Func_Socket",2619,2671,40,51,1000,985,2;
					}
			}
		case 3:
			mes "[Seiyablem]";
			mes "Well, I haven't really refined the art of Slot Addition.";
			mes "It's so complicated that I'd be lying if I told you that I knew every factor that affected the process.";
			mes "Still, I do notice a few trends...";
			next;
			mes "[Seiyablem]";
			mes "In some towns, Slot addition attempts are more successful for equipment with fewer upgrades.";
			mes "In other towns, the opposite is true.";
			mes "Isn't that really peculiar?";
			next;
			mes "[Seiyablem]";
			mes "Oh, there's also something really important that you should know.";
			mes "If you ask me to add a Slot to something, make sure that you don't have multiples of it in your inventory.";
			next;
			mes "[Seiyablem]";
			mes "Here's an example: if you have a +7 Manteau and a normal Manteau in your inventory, then I will randomly pick one of them for my Slot Addition attempt.";
			mes "Just remember to be careful.";
			next;
			mes "[Seiyablem]";
			mes "Again, ^FF0000only carry one of the equipment to which you want me to add a Slot^000000.";
			mes "All other equipment with the same name should be placed in your Kafra Storage, got it?";
			close;
		case 4:
			mes "[Seiyablem]";
			mes "Take it easy, adventurer.";
			mes "If you ever want to try adding a Slot to some of your equipment, come back and let me know.";
			mes "Seeya~";
			close;
	}
}

function	script	Func_Socket	{

	disable_items;
	mes "[Seiyablem]";
	mes "You want to add a Slot to a " + getitemname(getarg(0)) + "?";
	mes "Alright, please bring me ^FF0000" + getarg(6) + " " + getitemname(getarg(5)) + (getarg(6) > 1 && getarg(5) != 999 ? "s":"") + "^000000, " + (getarg(7,0) != 0 && getarg(8,0) != 0 ? ("^FF0000" + getarg(8,0) + " " + getitemname(getarg(7,0)) + (getarg(8,0) > 1 && getarg(7,0) != 999 ? "s":"") + "^000000 ") : "") + "and my ^FF0000" + (getarg(4) >= 1000 ? (getarg(4)/1000 + ",000") : getarg(4)) + ",000 zeny^000000 service fee.";
	mes "Ah, and don't forget to bring that " + getitemname(getarg(0)) + "!";
	next;
	mes "[Seiyablem]";
	if (getiteminfo(getarg(0), ITEMINFO_LOC) & EQP_HAND_R) {
		// EQP_HAND_R = 2, it's a weapon
		mes "I can try to add a slot now if you have the required items and zeny.";
		mes "However, you should know that there's a chance that I might fail.";
		mes "Therefore, I need to give you a fair warning...";
		next;
		mes "[Seiyablem]";
		mes "If this attempt to add a Slot to your Weapon fails, then the ^FF0000Weapon^000000, ^FF0000and any Cards compounded to it will be destroyed^000000.";
	} else {
		// armor
		mes "If you have all the required materials, my zeny service fee and the Armor, then we can go ahead with the Slot Addition attempt.";
		mes "But before that, I must warn you of the risk.";
		next;
		mes "[Seiyablem]";
		mes "If this attempt to add a Slot to your Armor fails, then the ^FF0000Armor^000000, ^FF0000it's upgrades^000000 ^FF0000and any Cards compounded to it will be destroyed^000000.";
	}
	mes "Do you still want to try to add a Slot?";
	next;
	switch(select("Attempt Slot Addition", "Cancel"))
	{
		case 1:
			if ((Zeny >= getarg(4)*1000) && (countitem(getarg(5)) >= getarg(6)) && (countitem(getarg(7,512)) >= getarg(8,0)) && (countitem(getarg(0)) > 0)) // if there's no getarg(7) and getarg(8) provided, check itemcount against 0 (we still need a valid item ID though)
			{
				mes "[Seiyablem]";
				mes "Alright then, let the work begin!";
				mes "You'd better pray for a successful result.";
				next;
				.@a = rand(1,100);
				if ((.@a > getarg(2)) && (.@a < getarg(3)))
				{
					specialeffect getarg(3) == 51 ? EF_LORD : EF_SANCTUARY; // only S Class items have Lord of Vermillion effect
					mes "[Seiyablem]";
					mes "Great, it seems to be successful.";
					mes "It looks pretty well done. Congratulations!";
					delitem getarg(0),1;
					delitem getarg(5),getarg(6);
					if (getarg(7,0) != 0 && getarg(8,0) != 0)
						delitem getarg(7),getarg(8);
					Zeny -= getarg(4)*1000;
					getitem getarg(1),1;
					next;
					mes "[Seiyablem]";
					mes "See you again, buddy!";
					close;
				}
				else
				{
					specialeffect EF_SUI_EXPLOSION;
					mes "[Seiyablem]";
					mes "Wah! ...I am so sorry, it failed.";
					mes "However, I am completely innocent.";
					mes "This is your luck, and it is destined by god, okay?";
					mes "Don't be so disappointed, and try next time.";
					delitem getarg(0),1;
					delitem getarg(5),getarg(6);
					if (getarg(7,0) != 0 && getarg(8,0) != 0)
						delitem getarg(7),getarg(8);
					Zeny -= getarg(4)*1000;
					next;
					mes "[Seiyablem]";
					mes "I wish you good luck next time!";
					close;
				}
			}
			else
			{
				mes "[Seiyablem]";
				mes "I'd like to go ahead with this Slot Addition attempt, but you're missing a few things.";
				mes "You sure that you have the equipment, required materials and the zeny?";
				close;
			}
		case 2:
			mes "[Seiyablem]";
			mes "Need some time to think about it, huh?";
			mes "Alright, I can understand.";
			mes "Just remember that life's no fun if you're always playing it safe~";
			close;
	}
}

payon,140,151,5	duplicate(SocketEnchant)	Seiyablem#pay	4_M_02
lhz_in02,281,35,5	duplicate(SocketEnchant)	Seiyablem#lhz	4_M_02
prt_in,33,70,5	duplicate(SocketEnchant)	Seiyablem#prt	4_M_02
morocc,51,41,4	duplicate(SocketEnchant)	Seiyablem#moc	4_M_02

-	script	Young Man#dummy::SocketMan	FAKE_NPC,{
	mes "[Young Man]";
	mes "I'm considering becoming a Slotting Engineer.";
	mes "It's a new field where you can add Slots to equipment, and it'd be cool if I can work in such a lucrative career.";
	next;
	mes "[Young Man]";
	mes "There's a huge element of luck involved in successfully adding Slots from what I can understand.";
	mes "You fail sometimes, but if you're super lucky, you can add two Slots.";
	mes "Crazy. Huh?";
	next;
	mes "[Young Man]";
	mes "But don't get too excited.";
	mes "Only certain equipment can handle the addition of two extra Slots.";
	mes "There's so much more I have to learn before I can even be an apprentice...";
	close;
}

prt_in,31,57,1	duplicate(SocketMan)	Young Man#prt	4W_M_01
payon,143,143,7	duplicate(SocketMan)	Young Man#pay	4W_M_01
morocc,60,42,3	duplicate(SocketMan)	Young Man#moc	4W_M_01
lhz_in02,269,33,5	duplicate(SocketMan)	Young Man#lhz	4W_M_01
