//===== rAthena Script =======================================
//= Goblin Invasion
//===== By: ==================================================
//= Mysterious
//===== Current Version: =====================================
//= 1.6
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
// Goblins spawn randomly in a given town. Once all Goblins are killed
// the Goblin Leader spawns.
//===== TODO: ================================================
// - Change more coding
//===== Additional Comments: =================================
//= v1.0 - First release [Mysterious]
//= v1.1 - Fixed Bugs [Mysterious]
//= v1.2 - Fixed Sentence structures [Mysterious]
//= v1.3 - Added Proper Notes [Mysterious]
//= v1.4 - Made it obvious on what players have to change [Mysterious]
//= v1.5 - Proper Sentence Structures and Typos fixed [Mysterious]
//= v1.6 - Fixed mobs not counting down properly [Mysterious]
//============================================================

xxx,xxx,xxx,xxx	script	Goblin Invasion  459,{

set .gm,40;//GM Level to access the GM Menu. Default: 40

	// GM menu | Game Masters Level 40 or more are allowed to Start and Stop invasions.
	if (getgmlevel()>.gm) {
		if (.mobs_left) {
			mes "[Invasion]";
			mes "An invasion is already in progress! Details:";
			mes "Location: " + .Map$;
			mes "^FF0000"+.mobs_left+"^000000 Goblins left";
			mes " ";
			mes "Would you like to Stop the invasion?";
			if(select("- No:- Yes")==1) close;
			donpcevent "Invasion NPC::OnTimer1805000";
			mes "Invasion stopped";
			announce "The Invasion has been stopped by "+strcharinfo(0),bc_all;
			close;
		}
		mes "[Invasion]";
		mes "Please customize the Invasion event before starting it.";
		mes "Note - The Goblin Leader drops x5 of the prize.";
		Main:
		next;
		mes "[Invasion]";
			switch(select("Item [" + getitemname(.ItemID) + "]:Start Event")) {
		case 1:
			mes "Which item would you like the Goblin Leader to drop?";
			mes "Please input the item ID:";
			input .ItemID;
			goto Main;
		case 2:
			mes "The event is going to begin shortly.";
			close2;
			goto OnStart;
	}

	//If a player clicks the NPC, the NPC will tell the player how much Mobs are left on the certain map.
	mes "[Invasion]";
	mes "There are "+.mobs_left+" Goblins who've invaded "+.Map$[.rand_map]+"!";
	close;
	
			/////////////////////////
			//The actual NPC Script//
			/////////////////////////
OnMinute50: // Change this to your liking (When you want the event to start)
OnStart:
	set .mobs_left, 1;
	sleep2 1000;
	set $@ran, rand(1,6);
	if ($@ran == 6) set .Map$,"splendide";
	if ($@ran == 5) set .Map$,"izlude";
	if ($@ran == 4) set .Map$,"payon";
	if ($@ran == 3) set .Map$,"geffen";
	if ($@ran == 2) set .Map$,"morocc";
	if ($@ran == 1) set .Map$,"prontera";
	sleep2 1000;
	announce "[ Rune-Midgard Guard ]: We have trouble here in the fabulous town known as " + .Map$ + "!", bc_all;
	sleep2 5000;
	announce "[ Rune-Midgard Guard ]: Everyone, we need your help to get rid of these Goblins!", bc_all;
	monster .Map$,0,0,"Goblin",1258,250,"Goblin Invasion::OnMyMobDead";
	set .mobs_left, 250;
	end;
	
	
OnTimer1805000:	// 30 minutes later, kills all the mobs.
	killmonster .Map$,"Goblin Invasion::OnMyMobDead";
	set .mobs_left, 0;

OnStop://When the event is stopped by a GM, or all monsters dead.
	killmonster .Map$,"Goblin Invasion::OnMyMobDead";
	killmonster .Map$,"Goblin Invasion::OnSpecialMobDead";
	announce "It seems that "+strcharinfo(0)+" has ended the Invasion!",bc_all;
	end;

OnMyMobDead: //When a Goblin is killed
	set .mobs_left, .mobs_left-1;
	if (.mobs_left==0) {
		announce "[ Rune-Midgard Guard ]: The Goblin Leader has spawned in " + .Map$ + "!", bc_all;
		monster .Map$,0,0,"Goblin Leader",1299,1,"Goblin Invasion::OnSpecialMobDead";

	} else {
		announce "["+.mobs_left+"/250] Goblins left.",bc_map;
	}
	end;

OnSpecialMobDead:
		announce strcharinfo(0)+" has fought off the Goblin Invasion and has been awarded a worthy prize!", bc_all;
		getitem .ItemID,5; //Change the [5] to the amount you wish to hand out.
		donpcevent "Goblin Invasion::OnStop";
	}
	end;

}