// Version: 1.0 

-	script	Hourly Bonus	FAKE_NPC,{

function EventHour;
function EventMonth;
function Announcement;
function EventSetter;

OnInterIfInit:
OnInit:
	
	//- Default EXP and DROP Setting.
	set .exp_default, 6;
	set .drop_default, 6;
	
	//- New EXP and DROP Setting.
	set .exp_mod, 10;
	set .drop_mod, 6;
	
	//- Additional: JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
	//- A setting where default and new exp/drop rate will work alternate for the month.
	set .enable_month, 0; 
	
	//- Don't change if you don't know how it works.
	setarray .event_odd_day[0],1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31;	// Exp Day
	setarray .event_even_day[0],2,4,6,8,10,12,14,16,18,20,22,24,26,28,30;	// Drop Day
	
	//- Command
	bindatcmd "expevent", "Hourly Bonus::OnDoCommand", 99,99;
	bindatcmd "hbtime", "Hourly Bonus::OnDoCheckCommand", 0,100;
	
	
	
	//- Don't change this.
	if($hour){
		EventHour(.exp_mod,.drop_mod,$hour);
		donpcevent "Hourly Bonus::OnStart";
	}else if(gettime(DT_MONTH) == .enable_month){
		donpcevent "Hourly Bonus::OnAlternate";
	}else{
		atcommand "@reloadbattleconf";
		EventSetter(.exp_mod,.drop_mod);
	}
	

end;

//- If .enable_month it will alsoReset the time availabilty per day. 
OnClock0000:
	if(gettime(DT_MONTH) == .enable_month){
		donpcevent "Hourly Bonus::OnAlternate";
	}else{
		donpcevent "Hourly Bonus::OnReset";;
	}
end;

//- Every hour the system check if the hourly bonus need to start or stop.
OnMinute00:
	if(gettime(DT_MONTH) != .enable_month){

		if($setting_type == 2 && $hour > 0){
			set $hour, $hour - 1;
			if($hour == 0){
				set $hour,0;
				set $setting_type,0;
				donpcevent "Hourly Bonus::OnEnd";
			}		
		}else if($setting_type == 0){
			//- Check the time if it is equal then start the event
			for(set .@i,1; .@i <= 12; set .@i,.@i+2){
				set .@value, .@value + 1;
				if(getd("$time"+.@value) == gettime(DT_HOUR)){
					//dispbottom .@i+" "+getd("$time"+.@value)+" "+gettime(DT_HOUR)+"";
					set $setting_type, 1;
					EventSetter(.exp_mod,.drop_mod);
					donpcevent "Hourly Bonus::OnStart";
					break;
				}
			}
		}else if($setting_type == 1){
			//- Check the time if it already done and need to stop the event.
			for(set .@i,2; .@i <= 12; set .@i,.@i+2){
				set .@value, .@value + 1;
				if((getd("$time"+.@value)+1) == gettime(DT_HOUR)){
					//dispbottom .@i+" "+(getd("$time"+.@value)+1)+" "+gettime(DT_HOUR)+"";
					donpcevent "Hourly Bonus::OnEnd";
					break;
				}
			}
		}

	}
end;



OnStart:
	Announcement(1);
	//- Base & Job Exp
	setbattleflag("base_exp_rate",100*$exprate);
	setbattleflag("job_exp_rate",100*$exprate);
	//- Drops
	setbattleflag("item_rate_common",100*$droprate);
	setbattleflag("item_rate_heal",100*$droprate);
	setbattleflag("item_rate_use",100*$droprate);
	setbattleflag("item_rate_equip",200*$droprate);
	//- we don't change card drops rate, because these values won't change them anyway
	atcommand "@reloadmobdb";
end;

OnEnd:
	Announcement(0);
	EventSetter(.exp_default,.drop_default);
	//- Base exp
	setbattleflag("base_exp_rate",100*$exprate);
	//- Job exp
	setbattleflag("job_exp_rate",100*$exprate);
	//- Drops
	setbattleflag("item_rate_common",100*$droprate);
	setbattleflag("item_rate_heal",100*$droprate);
	setbattleflag("item_rate_use",100*$droprate);
	setbattleflag("item_rate_equip",200*$droprate);
	//- we don't change card drops rate, because these values won't change them anyway
	atcommand "@reloadmobdb";
	
	//- Reset the number of hours and setting type to 0.
	set $hour,0;
	set $setting_type,0;
end;

OnDoCommand:
	if (compare(.@atcmd_parameters$, "on")) {
		if(.@atcmd_numparameters == 1){
			EventSetter(.exp_mod,.drop_mod);
			set $setting_type,1;
			donpcevent "Hourly Bonus::OnStart";
		}
		else if(.@atcmd_numparameters == 4){
			EventHour(.@atcmd_parameters$[1],.@atcmd_parameters$[2],.@atcmd_parameters$[3]);
			donpcevent "Hourly Bonus::OnStart";
		}
			
	}else if (compare(.@atcmd_parameters$, "off")) {
		if(!$setting_type){dispbottom "Exp and Drop is already in default settings.",0xff0000; end;}
		donpcevent "Hourly Bonus::OnEnd";
	}else if (compare(.@atcmd_parameters$, "reset")) {
		donpcevent "Hourly Bonus::OnReset";
	}
end;

OnReset:
	for(set .@i,1; .@i <= 6; set .@i,.@i+1){
			set .@k, .@k+4;
			setd ("$time" + .@i),rand(.@add+1,.@k-2);		
			set(getd("$time" + (.@i+1)), getd("$time" + .@i) + 1);
			set .@add,.@k;
	}
		for(set .@o,1; .@o <= 6; set .@o,.@o+1){
			set .@time$,.@time$ + " "+getd("$time" + .@o)+":00 - "+(getd("$time" + .@o)+1)+":00 "; 
		}
		EventSetter(.exp_mod,.drop_mod);
		announce "Citizens of Midgard, today's X"+$exprate+" EXP and X"+$droprate+" DROP will activate on this time |"+.@time$+"|",bc_all;
end;

OnDoCheckCommand:	
		dispbottom "Today's Hourly Bonus Schedule",0x00ff00;
		for(set .@o,1; .@o <= 6; set .@o,.@o+1){
			dispbottom "["+.@o+"] "+getd("$time" + .@o)+":00 - "+(getd("$time" + .@o)+1)+":00",0x00ff00;
		}
end;

OnAlternate:
		for(set .@i,0; .@i < getarraysize(.event_odd_day); set .@i,.@i+1){
				if(gettime(DT_DAYOFMONTH) == .event_odd_day[.@i]){
					EventMonth(.exp_mod,.drop_default);
					break;
				}
		}
		
		for(set .@i,0; .@i < getarraysize(.event_even_day); set .@i,.@i+1){
				if(gettime(DT_DAYOFMONTH) == .event_even_day[.@i]){
					EventMonth(.exp_default,.drop_mod);
					break;
				}
		}
		set $setting_type,3;
		donpcevent "Hourly Bonus::OnStart";
end;	

function EventHour {
	set $exprate,getarg(0);
	set $droprate,getarg(1);
	set $hour,getarg(2);
	set $setting_type,2;
	set $hour_count,$hour;
	
	if($exprate < 1){ 
		dispbottom "Enter the exp multiplier.",0xff0000; end;
	}else if($droprate < 1){ 
		dispbottom "Enter the drop multiplier.",0xff0000; end;
	}else if($hour < 1){ 
		dispbottom "Enter the number of hours.",0xff0000; end;	
	}
	return;
}

function EventMonth {
	set $exprate,getarg(0);
	set $droprate,getarg(1);
	return;
}


function Announcement {
	set .@announce,getarg(0);
	
	if($setting_type == 1){
		announce "Citizens of Midgard, Hourly Bonus X"+$exprate+" EXP and X"+$droprate+" DROP has "+((.@announce)?"started":"ended")+".",bc_all;
	}else if($setting_type == 2){
		announce "Citizens of Midgard, Hourly Bonus X"+$exprate+" EXP and X"+$droprate+" DROP for "+$hour_count+" Hour"+(($hour > 1)?"s":"")+" has "+((.@announce)?"started":"ended")+".",bc_all;
	}else if($setting_type == 3){
		announce "Citizens of Midgard, Hourly Bonus X"+$exprate+" EXP and X"+$droprate+" DROP for today has "+((.@announce)?"started":"ended")+".",bc_all;
	}
	return;
}

function EventSetter {
	set $exprate,getarg(0);
	set $droprate,getarg(1);
	return;
}


}
