prontera,148,193,4	script	Rental Guru	4_M_HUMERCHANT,{
	if(questprogress(31006) == 1 && countitem(30109) > 0 ) {
		mes .npc$;
		mes "Hannibal told me that you would be stopping on by.";
		mes "Allow me to introduce my self.  I am the Rental Guru, overseer of all things borrowed and lent!";
		next;
		mes .npc$;
		mes "The Item Mall here may boast about having the best items in Prontera, but I think that she has nothing on my amazing set of warez!.";
		mes "However, what I have to offer isn't yours to keep.  Items this good, I'm inclined to say, you can only borrow.";
		next;
		mes .npc$;
		mes "However, if you are looking for a special, powered-up version of an item, chances are that I can help you out!";
		mes "You'll only be able to rent these items for a limited period of time, and unlike most, I don't accept Zeny but only ^003366"+getitemname(Coupon)+"^000000.";
		next;
		mes .npc$;
		mes "If you have some ^003366"+getitemname(Coupon)+"^000000 which you've encountered through your travels, stop on by, and I'll gladly take them off your hands!.";
		mes "In fact, come and visit any time if you'd like to browse through the shop.";
		nov_train3++;
		nov_train_rt = 1;
		switch (BaseLevel){
			case 1: getexp 9,0; break;
			case 2: getexp 16,0; break;
			case 3: getexp 25,0; break;
			case 4: getexp 36,0; break;
			case 5: getexp 77,0; break;
			case 6: getexp 112,0; break;
			case 7: getexp 153,0; break;
			case 8: getexp 200,0; break;
			case 9: getexp 253,0; break;
			case 10: getexp 320,0; break;
			case 11: getexp 385,0; break;
			case 12: getexp 490,0; break;
			case 13: getexp 585,0; break;
			case 14: getexp 700,0; break;
			case 15: getexp 830,0; break;
			case 16: getexp 970,0; break;
			case 17: getexp 1120,0; break;
			case 18: getexp 1260,0; break;
			case 19: getexp 1420,0; break;
		}
		switch (JobLevel) {
			case 1: getexp 0,10; break;
			case 2: getexp 0,18; break;
			case 3: getexp 0,28; break;
			case 4: getexp 0,40; break;
			case 5: getexp 0,91; break;
			case 6: getexp 0,151; break;
			case 7: getexp 0,205; break;
			case 8: getexp 0,258; break;
			case 9: getexp 0,340; break;
		}	
		delitem 30109,countitem(30109);
		if(nov_train3 == 2){
			next;
			mes .npc$;
			mes "Well then, I think that you've completed your mission!";
			mes "Go back to ^ff0000Hannibal^000000 now to continue your training quest";
			completequest(31006);
			setquest(31007);
			close;
		}
		close;			
	}

	mes .npc$;
	mes "Good day!  You have ^FF3355"+countitem(Coupon)+"^000000 "+getitemname(Coupon)+".";
	mes "Which shop would you like to view?";
	next;		
	callfunc "rshop";

OnInit:
	questinfo(QTYPE_JOB, 1);
	setquestinfo(QINFO_JOB, Job_Novice);
	setquestinfo(QINFO_QUEST, 31006, 1);
	setquestinfo(QINFO_ITEM, 30109, 1,1);
	.npc$ = "[ ^FF3355Rental Guru^000000 ]";
	end;
}
// Script Core
//============================================================
-	script	r_shop	FAKE_NPC,{
function rAdd; function rChk; function rSlot; function rA_An;
OnInit:
	.npc$ = "[ ^FF3355Rental Guru^000000 ]";
	freeloop(1);

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

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

rAdd(1,1829,1,110,604800);	// Fist
rAdd(1,13408,1,175,604800);	// Fire Brand
rAdd(1,1580,1,110,604800);	// Giant Encyclopedia
rAdd(1,1929,1,110,604800);	// Guitar
rAdd(1,1378,1,60,604800);	// Great Axe
rAdd(1,1174,1,175,604800);	// Executioner
rAdd(1,13401,1,60,604800);	// Excalibur
rAdd(1,1388,1,110,604800);	// Two Handed Axe
//rAdd(1,1389,1,40,604800);	// Tomahawk
//rAdd(1,1390,1,60,604800);	// Right Epsilon
rAdd(1,1728,1,110,604800);	// Balista
rAdd(1,1729,1,110,604800);	// Rudra
rAdd(1,1273,1,110,604800);	// Bloody Roar
rAdd(1,1274,1,60,604800);	// Unholy
rAdd(1,1567,1,60,604800);	// Hardbook
rAdd(1,1267,1,175,604800);	// Infil
rAdd(1,1487,1,60,604800);	// Lance
rAdd(1,1419,1,110,604800);	// Pole

// Rental
rAdd(2,2761,1,110,604800);	// Satanic Ring
rAdd(2,2710,1,60,604800);	// Bloody Shackle Ring
rAdd(2,2677,1,60,604800);	// Spiritual Ring
rAdd(2,2753,1,110,604800);	// Beholder Ring
rAdd(2,2754,1,110,604800);	// Hallow Ring
rAdd(2,2755,1,110,604800);	// Clamorous Ring
rAdd(2,2756,1,110,604800);	// Chemical Ring
rAdd(2,2757,1,110,604800);	// Insecticide Ring
rAdd(2,2758,1,110,604800);	// Fisher Ring
rAdd(2,2759,1,60,604800);	// Decussate Ring
rAdd(2,2760,1,110,604800);	// Bloody Ring

rAdd(2,2688,1,60,604800);	// Critical Ring
rAdd(2,2689,1,40,604800);	// Earring
rAdd(2,2690,1,40,604800);	// Ring
rAdd(2,2691,1,40,604800);	// Neclace
rAdd(2,2692,1,40,604800);	// Gloves
rAdd(2,2693,1,40,604800);	// Brooch
rAdd(2,2694,1,40,604800);	// Rosary
rAdd(2,2695,1,40,604800);	// Safety Ring
rAdd(2,2741,1,110,604800);	// All in 1

rAdd(3,5265,1,40,604800);	// Apple Archer Box
rAdd(3,5266,1,60,604800);	// Bunny Band Box
rAdd(3,5267,1,40,604800);	// Sakkat Box
rAdd(3,5268,1,40,604800);	// Grand Circlet Box
rAdd(3,2686,1,25,604800);	// Elven Ears
rAdd(3,2687,1,25,604800);	// Steel Flower
rAdd(3,5279,1,60,604800);	// Drooping Ears
rAdd(3,5280,1,40,604800);	// Baphomet
rAdd(3,5281,1,40,604800);	// Deviruchi

/* Hair Extension */
rAdd(4,20602,1,25,604800);
rAdd(4,20603,1,25,604800);
rAdd(4,20604,1,25,604800);
rAdd(4,20605,1,25,604800);
rAdd(4,20606,1,25,604800);
rAdd(4,20607,1,25,604800);
rAdd(4,20608,1,25,604800);
rAdd(4,20609,1,25,604800);
rAdd(4,20610,1,25,604800);
rAdd(4,20611,1,25,604800);
rAdd(4,20612,1,25,604800);
rAdd(4,20613,1,25,604800);
rAdd(4,20614,1,25,604800);
rAdd(4,20615,1,25,604800);
rAdd(4,20616,1,25,604800);
rAdd(4,20617,1,25,604800);
rAdd(4,20618,1,25,604800);
rAdd(4,20619,1,25,604800);
rAdd(4,20620,1,25,604800);
rAdd(4,20621,1,25,604800);
rAdd(4,20622,1,25,604800);
rAdd(4,20623,1,25,604800);
rAdd(4,20624,1,25,604800);
rAdd(4,20625,1,25,604800);
// -----------------------------------------------------------

	freeloop(0);
	set .menu$,"";
	for(set .@i,1; .@i<=getarraysize(.rShops$); set .@i,.@i+1) {
		set .menu$, .menu$+.rShops$[.@i]+":";
		npcshopdelitem "rshop"+.@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$+.rShops$[@i[.@j]]+":";
		set .@i, @i[select(.@menu$)-1];
	}
	deletearray @i[0],getarraysize(@i);
	if (.rShops$[.@i] == "") {
		message strcharinfo(PC_NAME),"An error has occurred.";
		end;
	}
	dispbottom "Select one item at a time.";
	callshop "rshop"+.@i,1;
	npcshopattach "rshop"+.@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(".r_"+.@q[0]+"[0]"),getarraysize(getd(".r_"+.@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 .npc$;
	mes "You are about to rent:";
	mes "Item: ^0055FF"+((.@q[2] > 1)?.@q[2]+"x ":"")+rSlot(.@q[0])+"^000000";
	mes "for ^0055FF7 Days.^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(" ~ Rent ^0055FF"+ getitemname(.@q[0]) +"^000000", ((.@preview && !@qe[7])?" ~ Preview...": ""), " ~ ^777777Cancel^000000")) {
		case 1:
			if (!checkweight(.@q[0],.@q[2])) {
				mes .npc$;
				mes "^FF0000You need "+(((.@q[2]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000";
				close();
			}
			if(countitem(Coupon) < (.@q[4]*.@q[1])){
				mes .npc$;
				mes "You're ^0055FF"+getitemname(Coupon)+"^000000 is not suffecient to rent the item.";
				close();
			}
			delitem Coupon,(.@q[4]*.@q[1]);
			rentitem .@q[0],.@q[5];
			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];
			break;
		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 rAdd {
	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(".r_"+getarg(1)+"[0]"),.@j[0],getarraysize(.@j);
	npcshopadditem "rshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0);
	return;
}

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

function rSlot {
	set .@s$,getitemname(getarg(0));
	switch(.rShowSlot) {
		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 rA_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	rshop	{
	deletearray @i[0],getarraysize(@i);
	for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
		set @i[.@i],getarg(.@i);
	doevent "r_shop::OnMenu";
	end;
}

// Dummy shop data -- copy as needed.
//============================================================
-	shop	rshop1	FAKE_NPC,909:-1
-	shop	rshop2	FAKE_NPC,909:-1
-	shop	rshop3	FAKE_NPC,909:-1
-	shop	rshop4	FAKE_NPC,909:-1
-	shop	rshop5	FAKE_NPC,909:-1
