//===== eAthena Script =======================================
//= Item Rewards NPC
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.8
//===== Description: =========================================
//= Useful for event rewards, when a player is not necessarily online.
//= Logging is available, if needed (holds 128 names).
//= Note: Unclaimed rewards are limited to 64 at a time.
//============================================================

prontera,143,174,4	script	Item Rewards	958,{

// --------------------- Config ---------------------
// Package format is "ID1,Count1,ID2,Count2,..."
// GM Access: Level required to open the GM menu.
// GM Delete: Level required to erase entries.
// GM Logging: Level required to manage logs.

	set .GMAccess,5;
	set .GMDelete,80;
	set .GMLogging,99;
	set .PackageCount,3;
	setarray .Package1[0],671,300;
	setarray .Package2[0],671,500;
	setarray .Package3[0],671,700;
	setarray .Package4[0],671,1500;
	setarray .Package5[0],671,700,13607,3;

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

	if (getgmlevel() >= .GMAccess) goto GM_Menu;
	mes "[Item Rewards]";
	set .@i,0;
	while (.@i < getarraysize($itemreward$)) {
		if (strcharinfo(0) == $itemreward$[.@i]) goto GetReward;
		set .@i, .@i+2; }
	mes "I am in charge with all the item rewards that GMs will be granting you either as a bonus or event prize. Right now, you have no rewards pending.";
	close;

GetReward:
	if (((Weight*100)/MaxWeight) > 49) {
		mes "You are over the weight limit."; close; }
	if (!checkweight(5055,getarraysize(getd(".Package"+$itemreward$[.@i+1])))) {
		mes "Clear space in your inventory."; close; }
	set .@j,0;
	while (.@j < getarraysize(getd(".Package"+$itemreward$[.@i+1]))) {
		getitem getd(".Package"+$itemreward$[.@i+1]+"["+.@j+"]"),getd(".Package"+$itemreward$[.@i+1]+"["+(.@j+1)+"]");
		set .@j, .@j+2; }
	specialeffect2 248;
	deletearray $itemreward$[.@i],2;
	mes "Here you go!";
	close;

OnMinute00:
OnMinute30:
	if (!getarraysize($itemreward$)) end;
	set .@i,0;
	while (.@i < getarraysize($itemreward$)) {
		message $itemreward$[.@i],"[You have a reward pending.  See the Item Rewards NPC.]";
		sleep 10;
		set .@i, .@i+2; }
	end;

GM_Menu:
	mes "[Item Rewards]";
	mes "What would you like to do?";
	next;
	switch(select(" ~ ^FF55FFPackage or prize information^000000: ~ ^FF55FFList unclaimed rewards^000000: ~ ^00D900Give a reward^000000: ~ "+((getgmlevel()<.GMDelete)?"^777777":"^DE0000")+"Delete a reward^000000: ~ "+((getgmlevel()<.GMDelete)?"^777777":"^DE0000")+"Delete all unclaimed rewards^000000: ~ "+((getgmlevel()<.GMLogging)?"^777777":"^55AAFF")+"Manage logs^000000: ~ [Close]")) {
		case 1:
			mes "[Item Rewards]";
			set .@j,1;
			while (getd(".Package"+.@j)) {
				mes "^660099Package " + .@j + ":^000000";
				set .@i,0;
				while (.@i < getarraysize(getd(".Package"+.@j))) {
					mes " ~ " + getd(".Package"+.@j+"["+(.@i+1)+"]") + "x " + getitemname(getd(".Package"+.@j+"["+(.@i)+"]"));
					set .@i, .@i+2; }
				set .@j, .@j+1; }
			next;
			goto GM_Menu;
		case 2:
			mes "[Item Rewards]";
			mes "Used space: ^F52887" + (getarraysize($itemreward$)/2) + "^000000/64";
			mes "--------------------------------";
			set .@i,0;
			while (.@i < getarraysize($itemreward$)) {
				mes "^B041FF" + $itemreward$[.@i] + "^000000: package #" + $itemreward$[.@i+1];
				set .@i, .@i+2; }
			next;
			goto GM_Menu;
		case 3:
			mes "[Item Rewards]";
			if (getarraysize($itemreward$) > 127) {
				mes "No more names can be stored.";
				mes "Delete some values and try again.";
				next;
				goto GM_Menu; }
			mes "Input the player's name, then a package or prize number.";
			input .@name$;
				query_sql "SELECT `char_id` FROM `char` WHERE `name` = '"+.@name$+"'",.@charid;
				if (!.@charid) { mes "The name is invalid."; next; goto GM_Menu; }
					else set .@charid,0;
			input .@package,1,.PackageCount;
			next;
			mes "[Item Rewards]";
			mes "Player: ^B041FF" + .@name$ + "^000000";
			mes "Package: ^B041FF#" + .@package + "^000000";
			mes " ";
			mes "Are you sure?";
			if (select("Yes:No") == 2) { mes "Request cancelled."; next; goto GM_Menu; }
			setarray $itemreward$[getarraysize($itemreward$)],.@name$,.@package;
			message .@name$,"[You have a reward pending.  See the Item Rewards NPC.]";
			if ($itemlog) {
				if (getarraysize($itemlog1$) > 127) {
					deletearray $itemlog1$[0],1;
					deletearray $itemlog2$[0],1; }
				setarray $itemlog1$[getarraysize($itemlog1$)],strcharinfo(0);
				setarray $itemlog2$[getarraysize($itemlog2$)],.@name$; }
			mes "Reward added.";
			next;
			goto GM_Menu;
		case 4:
			mes "[Item Rewards]";
			if (getgmlevel() < .GMDelete) {
				mes "You are not permitted to delete entries."; next; goto GM_Menu; }
			mes "Input a name to cancel a reward.";
			input .@name$;
			set .@i,0;
			while (.@i < getarraysize($itemreward$)) {
				if ($itemreward$[.@i] == .@name$) {
					deletearray $itemreward$[.@i],2;
					mes "Name cleared."; next; goto GM_Menu; }
				set .@i, .@i+2; }
			mes "The name is invalid.";
			next;
			goto GM_Menu;
		case 5:
			mes "[Item Rewards]";
			if (getgmlevel() < .GMDelete) {
				mes "You are not permitted to delete entries."; next; goto GM_Menu; }
			mes "^FF0000This action cannot be undone.^000000";
			mes "Are you sure?";
			mes " ";
			if (select("Yes:No") == 2) { mes "Request cancelled."; next; goto GM_Menu; }
			deletearray $itemreward$[0],getarraysize($itemreward$);
			mes "All entries cleared.";
			next;
			goto GM_Menu;
		case 6:
		Log_Menu:
			mes "[Item Rewards]";
			if (getgmlevel() < .GMLogging) {
				mes "You are not permitted to manage logs."; next; goto GM_Menu; }
			mes "Logs are currently "+(($itemlog)?"^00D900enabled^000000":"^FF0000disabled^000000")+".";
			next;
			switch(select(" ~ ^55AAFFView Logs^000000: ~ "+((!$itemlog)?"^00D900Enable":"^777777Disable")+" logging^000000: ~ ^DE0000Delete all logs^000000: ~ [Go back]")) {
				case 1:
					mes "[Item Rewards]";
					mes "Used space: ^F52887" + (getarraysize($itemlog1$)) + "^000000/128";
					mes "--------------------------------";
					set .@i,0;
					while (.@i < getarraysize($itemlog1$)) {
						mes "^B041FF" + $itemlog1$[.@i] + "^000000: sent to ^55AAFF" + $itemlog2$[.@i] + "^000000";
						set .@i, .@i+1; }
					next;
					goto Log_Menu;
				case 2:
					set $itemlog, ((!$itemlog)?1:0);
					goto Log_Menu;
				case 3:
					mes "[Item Rewards]";
					mes "^FF0000This action cannot be undone.^000000";
					mes "Are you sure?";
					mes " ";
					if (select("Yes:No") == 2) { mes "Request cancelled."; next; goto Log_Menu; }
					deletearray $itemlog1$[0],getarraysize($itemlog1$);
					deletearray $itemlog2$[0],getarraysize($itemlog2$);
					mes "Logs cleared.";
					next;
					goto Log_Menu;
				case 4:
					next;
					goto GM_Menu;
			}
		case 7:
			close;
	}
}