
office,231,35,2	script	VIP Quest Shop	4_M_HUMERCHANT,{ callfunc "vqshop"; }


// Script Core
//============================================================
-	script	vquest_shop	FAKE_NPC,{
function vAdd; function vChk; function vSlot; function vA_An;
OnInit:
	
	freeloop(1);

// -----------------------------------------------------------
//  Basic shop settings.
// -----------------------------------------------------------

	set .Announce,1;	// Announce quest completion? (1: yes / 0: no)
	set .ShowSlot,1;	// Show item slots? (2: all equipment / 1: if slots > 0 / 0: never)
	set .ShowID,0;  	// Show item IDs? (1: yes / 0: no)
	set .ShowZeny,0;	// Show Zeny cost, if any? (1: yes / 0: no)
	set .MaxStack,1;	// Max number of quest items purchased at one time.

// -----------------------------------------------------------
//  Points variable -- optional quest requirement.
//	setarray .points$[0],"<variable name>","<display name>";
// -----------------------------------------------------------

	setarray .points$[0],"#CASHPOINTS","Credit Points";

// -----------------------------------------------------------
//  Shop IDs -- to add shops, copy dummy data at bottom of file.
//	setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...};
// -----------------------------------------------------------

	setarray .vShops$[1],"Quest Headgear","Special Exchange Headgears","Official Headgears","Bunny Band Exchange","Mage Hat","Beanie","Deviruchi Hat","Ribbon","Strong Hair","Usables";

// -----------------------------------------------------------
//  Quest items -- do NOT use a reward item more than once!
//	Add(<shop ID>,<reward ID>,<reward amount>,
//	    <Zeny cost>,<point cost>,
//	    <required item ID>,<required item amount>{,...});
// -----------------------------------------------------------

	//vAdd(1,19972,1,1000000,0,2228,1,980,10,7347,50);	// Costume Protect Of Crown
	//vAdd(1,20433,1,1000000,0,2226,1,7038,100,975,10);	// Costume Louise Red Hat
	//vAdd(1,19827,1,1000000,0,7106,100,7038,100);		// Costume Louise Red Hat
	//vAdd(1,19624,1,1000000,0,2278,10,992,100,980,5);	// costume blank eyes
	//vAdd(1,31059,1,1000000,0,2220,10,720,10,510,50);	// costume sailor hat
	//vAdd(1,20459,1,1000000,0,2233,1,511,20,508,20);	// costume valhalla idol
	//vAdd(1,20319,1,0,0,20010,1,975,10,999,50);		// costume crimson boosters
	//vAdd(1,20035,1,100000,0,749,3,510,100);		// costume miracle blue rose
	//vAdd(1,20382,1,100000,0,7323,500,507,100);		// costume silver sniper doll
	//vAdd(1,20269,1,100000,0,982,10,1022,100,7038,100);	// Costume white fox ear ribbon	
	//vAdd(1,20037,1,100000,0,978,10,2221,1,938,100);	// Costume owlduke silk hat
	//vAdd(1,20006,1,50000,0,983,10,2228,1);		// Costume dark night mask
	//vAdd(1,20397,1,500000,0,1062,500,7447,500,2228,1);	// Costume Jack	
	//vAdd(1,19571,1,500000,0,509,100,2610,10,2228,1);	// Costume White Musang Hat
	//vAdd(1,20458,1,250000,0,619,10,938,555);		// Costume Wild Poring Rider
	
	//vAdd(1,20267,1,500000,0,5016,1,982,10,7065,100);	// costume penguin cap
	//vAdd(1,20455,1,500000,0,5016,1,983,10,7152,100);	// costume republic hat
	//vAdd(1,20295,1,100000,0,741,10,619,10,975,10);		// costume poring sunglasses
	//vAdd(1,19510,1,100000,0,7317,100,5037,10,983,10);	// costume screw stuck in head

	vAdd(1,20406,1,500000,0,1957,1,2608,10,983,10,7315,100);	// Costume Chain of Commandments
	vAdd(1,31160,1,500000,0,2229,1,916,300,982,10,7315,100);	// costume rune helm
	vAdd(1,20076,1,500000,0,5192,2,715,300,976,10,7315,100);	// Costume Idun Feather Ears

	vAdd(2,30253,1,100000,3000,5014,1);			// CRO Mermaid Headphone
	vAdd(2,18664,1,0,3000,5104,3,983,10);			// Blind glasses
	vAdd(2,30174,1,0,3000,5002,1,982,1);			// CRO Galaxy Circlet
	vAdd(2,5254,1,0,3000,2229,1,1039,500);			// Deviling Hat [1]
	vAdd(2,5389,1,0,3000,5074,1,5043,1);			// Angel Spirit
	vAdd(2,5569,1,0,3000,2274,1,982,1);			// CRO Gemini Diadem
	vAdd(2,5546,1,0,3000,2258,1,975,1);			// CRO Aries Crown
	vAdd(2,5653,1,0,3000,2255,1,983,1);			// CRO Darkness Helm	
	vAdd(2,5300,1,0,3000,5007,1,999,10);			// CRO Bullock Helm
	vAdd(2,18597,1,0,3000,2246,1,1019,10);			// CRO Mercury riser
	vAdd(2,5135,1,0,3000,2296,1,975,1);			// CRO Cyclops
	vAdd(2,5656,1,0,3000,2225,1,1020,50);			// CRO Scooter Helm
	vAdd(2,5564,1,0,3000,2235,1,976,1); 			// CRO Crown of Deceit
	vAdd(2,5467,1,0,3000,2229,1,1036,25); 			// CRO helm of dragon
	vAdd(2,30020,1,0,3000,978,1,2280,1);			// CRO Wanderer's Sakkat

	vAdd(3,5086,1,0,0,1095,3000,2288,1);
	vAdd(3,5074,1,20000,0,2254,1,2286,1);
	vAdd(3,5110,1,0,0,526,1,7270,1,941,1,10004,1);
	vAdd(3,5076,1,0,0,2226,1,7038,500);
	vAdd(3,2296,1,50000,0,2243,1,999,100);
	vAdd(3,5057,1,10000,0,2213,1,983,1,914,200);
	vAdd(3,5065,1,0,0,624,1,959,300,551,50,1023,1,938,100,7030,1);
	vAdd(3,5052,1,0,0,2211,1,978,1,7003,300);
	vAdd(3,5040,1,0,0,7047,100);
	vAdd(3,5016,1,0,0,1030,10);
	vAdd(3,5034,1,0,0,2233,1,746,10);
	vAdd(3,2214,1,0,0,949,100,706,1,722,1,2213,1);
	vAdd(3,5024,1,0,0,529,10,530,5,538,15,539,20,999,10);
	vAdd(3,5028,1,0,0,2279,1,7035,50,526,100);
	vAdd(3,5026,1,0,0,539,120,982,1,949,330,1036,450);

	vAdd(3,5036,1,0,0,2608,1,7069,500);
	vAdd(3,5080,1,20000,0,10006,1,714,1,969,3);
vAdd(3,5081,1,40000,0,2249,1,714,1,969,3);
vAdd(3,5107,1,0,0,519,50,7031,50,548,50,539,50);
vAdd(3,5091,1,20000,0,10016,1,714,1,969,3);
vAdd(3,5082,1,0,0,921,300);
vAdd(3,5038,1,0,0,1038,600,7048,40);
vAdd(3,2273,1,3500,0,2275,1,998,50,733,1);
vAdd(3,5058,1,0,0,2233,1,983,1,7206,300,7030,1);
vAdd(3,2283,1,0,0,724,1,949,200,5001,1);
vAdd(3,5068,1,20000,0,2255,1,2286,1);
vAdd(3,5018,1,500,0,2247,1,916,300);
vAdd(3,5061,1,20000,0,2269,1,999,10);
vAdd(3,5063,1,0,0,970,1,930,500);
vAdd(3,5021,1,0,0,2233,1,969,1,949,1,999,1,938,800);
vAdd(3,5025,1,0,0,2229,1,2254,1,7036,1);
vAdd(3,5070,1,0,0,7216,300,7097,300,2211,1,982,1);
vAdd(3,5071,1,10000,0,5010,1,5049,1,7101,10);
vAdd(3,5069,1,0,0,1022,999);
vAdd(3,5084,1,0,0,1026,1000,7065,100,945,10,7030,1);
vAdd(3,5031,1,0,0,5009,1,5028,1,747,1,999,25);
vAdd(3,5073,1,0,0,2285,1,1550,1);
vAdd(3,2278,1,0,0,909,10,914,10,705,10);
vAdd(3,5117,1,50000,0,731,10,748,3,982,1);
vAdd(3,2281,1,5000,0,998,20,707,1);
vAdd(3,5043,1,0,0,2281,1,1048,50);
vAdd(3,5004,1,0,0,701,5);
vAdd(3,5023,1,0,0,1059,150,907,100,978,1);
vAdd(3,5060,1,0,0,2236,1,7151,100,7111,100);
vAdd(3,5012,1,0,0,710,1,703,1,704,1,708,1);
vAdd(3,2293,1,0,0,1049,4);
vAdd(3,5033,1,0,0,2213,1,1036,20,7012,200,7065,300);
vAdd(3,5039,1,0,0,5015,1,978,1,7030,50);
vAdd(3,5109,1,50000,0,10015,1,10007,1,975,1,5032,1);
vAdd(3,5083,1,0,0,2244,1,2209,1,10007,1);
vAdd(3,5108,1,1887,0,7301,1887,5120,1,611,10);
vAdd(3,2280,1,10000,0,1019,120);
vAdd(3,5078,1,0,0,5033,1,5064,1);
vAdd(3,5064,1,0,0,945,600,7030,1);
vAdd(3,5067,1,0,0,5062,1,952,50,1907,1);
vAdd(3,5029,1,0,0,7033,850,7068,300,1015,1);
vAdd(3,2272,1,91100,0,1019,50,983,1);
vAdd(3,5062,1,0,0,2280,1,7197,300,300);
vAdd(3,5049,1,0,0,1099,1500);
vAdd(3,5059,1,0,0,5030,1,7213,100,7217,100,7161,300);
vAdd(3,5077,1,0,0,2278,1,975,1);
vAdd(3,5115,1,50000,0,983,1,7267,999,749,1);
vAdd(3,5050,1,0,0,5037,1,7064,500);
vAdd(3,5079,1,0,0,2294,1,7220,400);
vAdd(3,5121,1,0,0,5121,1,660,1,7099,30);

	vAdd(4,30025,1,0,1000,2214,1,975,1);			// Red Ribbon
	vAdd(4,30026,1,0,1000,2214,1,980,1);			// Orange Ribbon
	vAdd(4,30027,1,0,1000,2214,1,981,1);			// Violet Ribbon
	vAdd(4,30028,1,0,1000,2214,1,978,1);			// Blue Ribbon
	vAdd(4,30029,1,0,1000,2214,1,982,1);			// Grey Ribbon

	vAdd(5,5238,1,0,1000,2252,1,975,1);			// Red_Wizardry_Hat
	vAdd(5,5239,1,0,1000,2252,1,982,1);			// Gray_Wizardry_Hat
	vAdd(5,5240,1,0,1000,2252,1,980,1);			// Brown_Wizardry_Hat
	vAdd(5,5241,1,0,1000,2252,1,978,1);			// Blue Mage Hat
	vAdd(5,5242,1,0,1000,2252,1,976,1);			// Yellow Mage Hat

	vAdd(6,5235,1,0,1000,5076,1,980,1);			// Brown Beanie
	vAdd(6,5236,1,0,1000,5076,1,978,1);			// Blue Beanie
	vAdd(6,5237,1,0,1000,5076,1,981,1);			// Pink Beanie

	vAdd(7,5227,1,0,1000,5038,1,975,1);			// Red Deviruchi Hat
	vAdd(7,5228,1,0,1000,5038,1,982,1);			// Gray Deviruchi Hat
	vAdd(7,5229,1,0,1000,5038,1,980,1);			// Brown Deviruchi Hat

	vAdd(8,5191,1,0,1000,2208,1,983,1);			// Black Ribbon
	vAdd(8,5192,1,0,1000,2208,1,976,1);			// Yellow Ribbon
	vAdd(8,5193,1,0,1000,2208,1,979,1);			// Green Ribbon
	vAdd(8,5194,1,0,1000,2208,1,981,1);			// Pink Ribbon
	vAdd(8,5195,1,0,1000,2208,1,975,1);			// Red Ribbon
	vAdd(8,5196,1,0,1000,2208,1,980,1);			// Orange Ribbon
	vAdd(8,5197,1,0,1000,2208,1,982,1);			// White Ribbon

	vAdd(9,20248,1,0,1000,18740,1,983,1);			// Black Strong Hair
	vAdd(9,20249,1,0,1000,18740,1,975,1);			// Red Strong Hair
	vAdd(9,20250,1,0,1000,18740,1,982,1);			// White Strong Hair

	vAdd(10,12103,1,10000,0,604,300);			// Bloody Branch

// -----------------------------------------------------------

	freeloop(0);
	set .menu$,"";
	for(set .@i,1; .@i<=getarraysize(.vShops$); set .@i,.@i+1) {
		set .menu$, .menu$+.vShops$[.@i]+":";
		npcshopdelitem "vqshop"+.@i,909;
	}
	end;

OnMenu:
	set .@size, getarraysize(@i);
	if (!.@size) set .@i, select(.menu$);
	else if (.@size == 1) set .@i, @i[0];
	else {
		for(set .@j,0; .@j<.@size; set .@j,.@j+1)
			set .@menu$, .@menu$+.vShops$[@i[.@j]]+":";
		set .@i, @i[select(.@menu$)-1];
	}
	deletearray @i[0],getarraysize(@i);
	if (.vShops$[.@i] == "") {
		message strcharinfo(PC_NAME),"An error has occurred.";
		end;
	}
	dispbottom "Select one item at a time.";
	callshop "vqshop"+.@i,1;
	npcshopattach "vqshop"+.@i;
	end;

OnBuyItem:
	disable_items();
	// .@q[] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... }
	setarray .@q[0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]);
	copyarray .@q[3],getd(".q_"+.@q[0]+"[0]"),getarraysize(getd(".q_"+.@q[0]));
	set .@q[2],.@q[1]*.@q[3];
	if (!.@q[2] || .@q[2] > 30000) {
		message strcharinfo(PC_NAME),"You can't purchase that many "+getitemname(.@q[0])+".";
		end;
	}
	mes "[Quest Shop]";
	mes "Item: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+vSlot(.@q[0])+"^000000";
	mes "Requirements:";
	if (.@q[4]) mes " > "+vChk(Zeny,.@q[4]*.@q[1])+(.@q[4]*.@q[1])+" Zeny^000000";
	//if (.@q[5]) mes " > "+vChk(getd(.points$[0]),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.points$[1]+" ("+getd(.points$[0])+"/"+(.@q[5]*.@q[1])+")^000000";
	if (.@q[5]) mes " > "+vChk(callfunc("F_CheckCredit"),.@q[5]*.@q[1])+(.@q[5]*.@q[1])+" "+.points$[1]+" ("+callfunc("F_CheckCredit")+"/"+(.@q[5]*.@q[1])+")^000000";
	if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
		mes " > "+vChk(countitem(.@q[.@i]),.@q[.@i+1]*.@q[1])+((.ShowID)?"{"+.@q[.@i]+"} ":"")+vSlot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+(.@q[.@i+1]*.@q[1])+")^000000";
	next;
	setarray @qe[1], getiteminfo(.@q[0], ITEMINFO_LOC), getiteminfo(.@q[0], ITEMINFO_VIEWSPRITE);
	if (@qe[2] > 0 && ((@qe[1] & EQP_HEAD_LOW) || (@qe[1] & EQP_HEAD_TOP) || (@qe[1] & EQP_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_TOP) || (@qe[1] & EQP_COSTUME_HEAD_MID) || (@qe[1] & EQP_COSTUME_HEAD_LOW) || (@qe[1] & EQP_GARMENT) || (@qe[1] & EQP_COSTUME_GARMENT)))
		set .@preview,1;
	addtimer 1000, strnpcinfo(NPC_NAME)+"::OnEnd";
	while(1) {
		switch(select(" ~ Purchase ^0055FF"+ getitemname(.@q[0]) +"^000000", ((.@preview && !@qe[7])?" ~ Preview...": ""), " ~ ^777777Cancel^000000")) {
		case 1:
			if (@qe[0]) {
				mes "[Quest Shop]";
				mes "You're missing one or more quest requirements.";
				close;
			}
			if (!checkweight(.@q[0],.@q[2])) {
				mes "[Quest Shop]";
				mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
				close;
			}
			if (.@q[4]) Zeny -= (.@q[4]*.@q[1]);
			if (.@q[5]) callfunc "F_UpdateCredit",-(.@q[5]*.@q[1]);
			//if (.@q[5]) setd .points$[0], getd(.points$[0])-(.@q[5]*.@q[1]);
			if (.@q[6]) for(set .@i,6; .@i<getarraysize(.@q); set .@i,.@i+2)
				delitem .@q[.@i],.@q[.@i+1]*.@q[1];
			getitem .@q[0],.@q[2];
			if (.Announce) chanmsg("#system",""+strcharinfo(PC_NAME)+" has created "+((.@q[2] > 1)?.@q[2]+"x "+getitemname(.@q[0]):vA_An(getitemname(.@q[0])))+"!");
			//specialeffect2 EF_FLOWERLEAF;
			close;
		case 2:
			setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1;
			if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2];
			else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2];
			else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2];
			else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2];
		case 3:
			close;
		}
	}

OnEnd:
	if (@qe[7]) {
		changelook LOOK_HEAD_BOTTOM, @qe[3];
		changelook LOOK_HEAD_TOP, @qe[4];
		changelook LOOK_HEAD_MID, @qe[5];
		changelook LOOK_ROBE, @qe[6];
	}
	deletearray @qe[0],8;
	end;

function vAdd {
	if (getitemname(getarg(1)) == "null") {
		debugmes "Quest reward #"+getarg(1)+" invalid (skipped).";
		return;
	}
	setarray .@j[0],getarg(2),getarg(3),getarg(4);
	for(set .@i,5; .@i<getargcount(); set .@i,.@i+2) {
		if (getitemname(getarg(.@i)) == "null") {
			debugmes "Quest requirement #"+getarg(.@i)+" invalid (skipped).";
			return;
		} else
			setarray .@j[.@i-2],getarg(.@i),getarg(.@i+1);
	}
	copyarray getd(".q_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
	npcshopadditem "vqshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
	return;
}

function vChk {
	if (getarg(0) < getarg(1)) {
		set @qe[0],1;
		return "^FF0000";
	} else
		return "^00FF00";
}

function vSlot {
	set .@s$,getitemname(getarg(0));
	switch(.ShowSlot) {
		case 1: if (!getitemslots(getarg(0))) return .@s$;
		case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]";
		default: return .@s$;
	}
}

function vA_An {
	setarray .@A$[0],"a","e","i","o","u";
	set .@B$, "_"+getarg(0);
	for(set .@i,0; .@i<5; set .@i,.@i+1)
		if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);
	return "a "+getarg(0);
}
}

function	script	vqshop	{
	deletearray @i[0],getarraysize(@i);
	for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
		set @i[.@i],getarg(.@i);
	doevent "vquest_shop::OnMenu";
	end;
}


// Dummy shop data -- copy as needed.
//============================================================
-	shop	vqshop1	FAKE_NPC,909:-1
-	shop	vqshop2	FAKE_NPC,909:-1
-	shop	vqshop3	FAKE_NPC,909:-1
-	shop	vqshop4	FAKE_NPC,909:-1
-	shop	vqshop5	FAKE_NPC,909:-1
-	shop	vqshop6	FAKE_NPC,909:-1
-	shop	vqshop7	FAKE_NPC,909:-1
-	shop	vqshop8	FAKE_NPC,909:-1
-	shop	vqshop9	FAKE_NPC,909:-1
-	shop	vqshop10	FAKE_NPC,909:-1
