//@unloadnpc Top Ranking
//@loadnpc npc/amatsu/ranking.txt

payon,74,121,6	script	Top Ranking	4_M_05,{
function func_item_name;
	
	/* Check Top 1 MvP */
	query_sql    "SELECT DATABASE()", .@rag_db$;
	query_logsql "SELECT DATABASE()", .@log_db$;
	query_sql( "SELECT COUNT(`monster_id`) AS `total`,`char`.`name`,`kill_char_id` FROM "+.@log_db$+".`mvplog`"+" LEFT JOIN "+.@rag_db$+".`char` ON `char`.`char_id` = `mvplog`.`kill_char_id` WHERE  DATE_FORMAT( `mvp_date`, '%Y-%m-%d') = DATE_FORMAT( now(), '%Y-%m-%d') AND `kill_char_id` NOT IN ( "+.gm_char$+" ) GROUP BY `kill_char_id` ORDER BY `total` DESC LIMIT 1",.@mvptotal,.@mvpname$,.@kill_char_id );

	/* Check Top 1 PvP */
	query_sql "SELECT `char_id`, `char`, `kill`, `death`, `kdr`, `killingstreak`, `multikill` FROM `pvp_rank` ORDER BY `pvp_rank`.`kill` DESC LIMIT 1", .@char_id, .@char$, .@kill, .@death, .@kdr$, .@sk, .@mk;

	mes "^0055FF[ ::: Daily Top Ranking ::: ]^000000";
	if(.@char_id) mes "PvP: ^FF0000"+.@char$+" ^01DF01["+.@kill+"]^000000";
	if(.@kill_char_id) mes "MvP: ^FF0000"+.@mvpname$+" ^01DF01["+.@mvptotal+"]^000000";
	next;
	switch( select( 
		"^FF0000Earn Reward^000000:"+
		"^0055FFWhats is PvP Rules^000000:"+
		"^FF0000PvP^000000 Record:"+
		"^FF0000MvP^000000 Record:"+
		"Cancel"
	)){
	case 1:
		mes "^0055FF[ ::: Top Ranking Reward ::: ]^000000";
		mes "^FF00001x Cash Voucher^000000 equivalent to 1,000 Cash Points will be given for ^FF0000Top 1^000000 Ranking only. Ranking will ^0055FFRESET^000000 every 12AM Daily.";
		close;
	case 2: 
		mes "^0055FF[ ::: Rules ::: ]^000000";
		mes "PvP Points can be earned in all PvP maps including ^0055FFDeathmatch^000000 Arena.";
		mes "+1 pt on ^FF0000Kill^000000";
		mes "-1 pt on ^01DF01Death^000000";
		mes "-10 pt on ^0055FFFeeding^000000 (^777777Takes 10 PvP Points for killing same player 3 times within 90 seconds of each kill.)";
		close;

	case 3:
		mes "^0055FF[ ::: Daily PvP Ranking ::: ]^000000";
		query_sql "SELECT `char_id`, `char`, `kill`, `death`, `kdr`, `killingstreak`, `multikill` FROM `pvp_rank` ORDER BY `pvp_rank`.`kill` DESC LIMIT 10", .@char_id, .@char$, .@kill, .@death, .@kdr$, .@sk, .@mk;
		.@size = getarraysize( .@char_id );
		if( !.@size ){
			mes "No record found.";
			} else {
		for( .@i = 0; .@i < .@size; .@i++ )
			mes ( .@i+1 )+". "+.@char$[.@i]+" ^FF0000["+.@kill[.@i]+"]^000000";
		}
		close;
	case 4:
		mes "^0055FF[ ::: Daily MvP Ranking ::: ]^000000";
		query_sql( "SELECT COUNT(`monster_id`) AS `total`,`char`.`name`,`kill_char_id` FROM "+.@log_db$+".`mvplog`"+" LEFT JOIN "+.@rag_db$+".`char` ON `char`.`char_id` = `mvplog`.`kill_char_id` WHERE  DATE_FORMAT( `mvp_date`, '%Y-%m-%d') = DATE_FORMAT( now(), '%Y-%m-%d') AND `kill_char_id` NOT IN ( "+.gm_char$+" ) GROUP BY `kill_char_id` ORDER BY `total` DESC LIMIT 10",.@mvptotal,.@mvpname$,.@kill_char_id );
		.@size = getarraysize( .@kill_char_id );
		if( !.@size ){
			mes "No record found.";
			} else {
		for( .@i = 0; .@i < .@size; .@i++ )
			mes ( .@i+1 )+". "+.@mvpname$[.@i]+" ^FF0000["+.@mvptotal[.@i]+"]^000000";
		}
		next;
		switch( select( 
		  "^FF0000Check MvP Status^000000:"+
		  "Cancel"
		)){
		case 1:
			mes "^FF0000Check MvP Status^000000";
			for( .@i = 0; .@i < getarraysize(getvariableofnpc(.mvpid,"mvpcontroller")); .@i++ ) {
				.@time =  getd("$T" +getvariableofnpc(.mvpva[.@i],"mvpcontroller") + getvariableofnpc(.mvpid[.@i],"mvpcontroller"));
				.@alive = getd("$S" +getvariableofnpc(.mvpva[.@i],"mvpcontroller") + getvariableofnpc(.mvpid[.@i],"mvpcontroller"));
				set .@days,(( gettimetick(2) - .@time )/60/60)/24;
				set .@hours,(( gettimetick(2) - .@time )/60/60)%24;
				set .@mins,(( gettimetick(2) - .@time )/60)%60;
				mes "[ "+( getd("$S" + getvariableofnpc(.mvpva[.@i],"mvpcontroller") + getvariableofnpc(.mvpid[.@i],"mvpcontroller")) == 1 ? "^01DF01Alive^000000" : "^FF0000Dead^000000")+" ]^0055FF "+getmonsterinfo( getvariableofnpc(.mvpid[.@i], "mvpcontroller"),0)+"^000000 ("+getvariableofnpc(.mvpmaps$[.@i], "mvpcontroller")+")"+" "+(.@alive == 2 ? "^FF0000"+ ((.@hours) ? .@hours +" hr " : "") +""+ ((.@mins) ? 60 - .@mins +" min" : "")+"^000000 MVP: ^777777"+getd("$P"+getvariableofnpc(.mvpva[.@i], "mvpcontroller") + getvariableofnpc(.mvpid[.@i], "mvpcontroller") +"$")+"^000000":"");
			}
			close;
		default:
			close;
		}
		close;
	default:
		close;
	}
end;

OnAnnounce:
OnMinute01:
OnMinute31:
	query_sql    "SELECT DATABASE()", .@rag_db$;
	query_logsql "SELECT DATABASE()", .@log_db$;
	query_sql( "SELECT COUNT(`monster_id`) AS `total`,`char`.`name`,`kill_char_id` FROM "+.@log_db$+".`mvplog`"+" LEFT JOIN "+.@rag_db$+".`char` ON `char`.`char_id` = `mvplog`.`kill_char_id` WHERE  DATE_FORMAT( `mvp_date`, '%Y-%m-%d') = DATE_FORMAT( now(), '%Y-%m-%d') AND `kill_char_id` NOT IN ( "+.gm_char$+" ) GROUP BY `kill_char_id` ORDER BY `total` DESC LIMIT 1",.@mvptotal,.@mvpname$,.@kill_char_id );
	query_sql "SELECT `char_id`, `char`, `kill`, `death`, `kdr`, `killingstreak`, `multikill` FROM `pvp_rank` ORDER BY `pvp_rank`.`kill` DESC LIMIT 1", .@char_id, .@char$, .@kill, .@death, .@kdr$, .@sk, .@mk;
	if(.@kill_char_id) announce "Top MvP Hunter Today is [ "+.@mvpname$+" ] with "+.@mvptotal+" kills.",bc_blue|bc_all;
	if(.@char_id) announce "Top PvP killer Today is [ "+.@char$+" ] with "+.@kill+" pts.",bc_blue|bc_all;
end;

OnReset:
OnClock2359:

	/* Initialize query */
	.@gm_aid = 2000000;
	.@gm_name$ = "GM Bran";
	.@notemvp$ = "Top 1 MvP Ranking";
	.@notepvp$ = "Top 1 PvP Ranking";
	.@formatted_name$ = func_item_name( 7179,1,0 );


	/* Give MvP Reward */
	query_sql    "SELECT DATABASE()", .@rag_db$;
	query_logsql "SELECT DATABASE()", .@log_db$;
	query_sql( "SELECT COUNT(`monster_id`) AS `total`,`char`.`name`,`kill_char_id` FROM "+.@log_db$+".`mvplog`"+" LEFT JOIN "+.@rag_db$+".`char` ON `char`.`char_id` = `mvplog`.`kill_char_id` WHERE  DATE_FORMAT( `mvp_date`, '%Y-%m-%d') = DATE_FORMAT( now(), '%Y-%m-%d') AND `kill_char_id` NOT IN ( "+.gm_char$+" ) GROUP BY `kill_char_id` ORDER BY `total` DESC LIMIT 1",.@mvptotal,.@mvpname$,.@kill_char_id );
	if(.@kill_char_id){
		query_sql( "INSERT INTO `gm_reward` ( `gm_aid`,`gm_name`,`nameid`,`amount`,`refine`,`format_name`,`card1`,`card2`,`card3`,`card4`,`reward_time`,`claim_aid`,`claim_name`,`note` ) VALUES ( "+.@gm_aid+",'"+escape_sql( .@gm_name$ )+"',7179,1,0,'"+escape_sql( .@formatted_name$ )+"',0,0,0,0,NOW(),"+.@kill_char_id+",'"+escape_sql( .@mvpname$ )+"','"+.@notemvp$+"' )" );	
		rodex_sendmail(.@kill_char_id, "[ "+.@gm_name$+" ]", "[ Reward Notice ]", "You have a pending reward [ "+.@formatted_name$+" ] for [ "+.@notemvp$+" ] to be claim.  Type @reward to claim.",0);
	}

	/* Give PvP Reward */
	query_sql "SELECT `char_id`,`char`, `kill`, `death`, `kdr`, `killingstreak`, `multikill` FROM `pvp_rank` ORDER BY `pvp_rank`.`kill` DESC LIMIT 1", .@char_id, .@char$, .@kill, .@death, .@kdr$, .@sk, .@mk;
	if(.@char_id){
		query_sql( "INSERT INTO `gm_reward` ( `gm_aid`,`gm_name`,`nameid`,`amount`,`refine`,`format_name`,`card1`,`card2`,`card3`,`card4`,`reward_time`,`claim_aid`,`claim_name`,`note` ) VALUES ( "+.@gm_aid+",'"+escape_sql( .@gm_name$ )+"',7179,1,0,'"+escape_sql( .@formatted_name$ )+"',0,0,0,0,NOW(),"+.@char_id+",'"+escape_sql( .@char$ )+"','"+.@notepvp$+"' )" );	
		rodex_sendmail(.@char_id, "[ "+.@gm_name$+" ]", "[ Reward Notice ]", "You have a pending reward [ "+.@formatted_name$+" ] for [ "+.@notepvp$+" ] to be claim.  Type @reward to claim.",0);
	}

	/* Erase Records */
	query_sql "TRUNCATE TABLE `pvp_rank`";
	query_sql( "SELECT COUNT(`char_id`) FROM `char` WHERE `online` = 1 ", .@total );
	freeloop(true);
	while( .@count < .@total ){
		query_sql( "SELECT `account_id`,`char_id`,`name` FROM `char` WHERE `online` = 1 ORDER BY `char_id` LIMIT 128 OFFSET "+.@offset, .@aid,.@cid,.@name$ );
		set .@i,0;
		set .@size,getarraysize( .@cid );

 		while( .@i < .@size ){
 			if (isloggedin(.@aid[.@i], .@cid[.@i])) {
				set Kill, 0;
				set Death, 0;
				set KillingStreak, 0; 
				set MultiKill, 0;
				set KillingSpree, 0;
				set Dominating, 0;
				set MegaKill, 0;
				set Unstoppable, 0;
				set WickedSick, 0;
				set MonsterKill, 0;
				set Godlike, 0;
				set BeyondGodlike, 0;
				set DoubleKill, 0;
				set TripleKill, 0;
				set UltraKill, 0;
				set Rampage, 0;
				set Ownage, 0;
				set NemesisKill, 0;
				set FeedCount, 0;
			}
			set .@count,.@count + 1;
			set .@i,.@i + 1;
		}
		set .@offset,.@offset + .@size;
		deletearray .@cid,.@size;
		deletearray .@name$,.@size;
	}
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'Kill'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'Death'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'KillingStreak'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'MultiKill'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'KillingSpree'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'Dominating'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'MegaKill'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'Unstoppable'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'WickedSick'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'MonsterKill'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'Godlike'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'BeyondGodlike'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'DoubleKill'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'TripleKill'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'UltraKill'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'Rampage'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'Ownage'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'NemesisKill'");
	query_sql ("DELETE FROM `char_reg_num_db` WHERE `key` = 'FeedCount'");
	freeloop(false);
end;

function	func_item_name	{
	.@item_id = getarg(0);
	.@amount = getarg(1);
	.@refine = getarg(2);
	.@string$ = getitemname( .@item_id );
	.@type = getiteminfo( .@item_id,2 );
		
	if ( .@string$ == "null" )
		return "none";
		
	if ( .@refine ) 
		.@string$ = "+"+.@refine+" "+.@string$;
	if ( .@type == IT_WEAPON || .@type == IT_ARMOR )
		.@string$ = .@string$ + " ["+getitemslots( .@item_id )+"]";
	if ( .@amount > 1 )
		.@string$ = .@amount+" x "+.@string$;
		
	return .@string$;
}

OnInit:
	bindatcmd("resetladder","Top Ranking::OnReset",99,99);
	bindatcmd("announceladder","Top Ranking::OnAnnounce",99,99);
	.gm_char$ = "150000,150060,150276";
end;

}

