//===== Hercules Script ======================================
//= Morroc Raceway
//===== By: ==================================================
//= acky
//===== Current Version: =====================================
//= 1.3
//===== Description: =========================================
//= Lets players race around Morroc (pvp_y_1-5)
//===== Additional Comments: =================================
//= If there are more than 3 players, at least 3 people
//= must finish before a new race can be started.
//=
//= If there are less than 3 players, at least 1 person
//= must finish before a new race can be started.
//=
//= Removed permanent global variables
//= 1.2 Removed Duplicates [Silent]
//= 1.3 Replaced effect numerics with constants. [Samuray22]
//============================================================

//Warps you into race way
morocc,166,105,6	script	Race Girl#01	4_F_KAFRA2,{
	mes "[Race Girl]";
	mes "Would you like to visit ^0000FFMorroc Raceway^000000?";
	next;
	if (select("Yes", "No") != 1) {
		mes "[Race Girl]";
		mes "Alright, talk to me again when you want to go.";
		close;
	}
	warp "pvp_y_1-5",165,256;
	close;
}

//Warps you out of raceway
pvp_y_1-5,169,265,5	script	Race Girl#02	4_F_KAFRA2,{
	mes "[Race Girl]";
	mes "Welcome to Morroc Raceway!";
	next;
	switch (select("Information", "Leave", "Cancel")) {
	case 1:
		mes "[Race Girl]";
		mes "Someone must click on the Starter NPC to start the race.";
		next;
		mes "[Race Girl]";
		mes "Once the race is started, run around Morroc anti-clockwise.";
		next;
		mes "[Race Girl]";
		mes "You must reach all the checkpoints - No cheating!";
		close;
	case 2:
		warp "morocc",165,101;
		end;
	case 3:
		mes "[Race Girl]";
		mes "Come again soon!";
		close;
	}
}

//Counts down and starts race
pvp_y_1-5,145,269,5	script	Starter	4_M_JOB_KNIGHT1,{
	if ($@race != 0) goto L_Started;
	if ($@counting != 0) goto L_Started;
	if ($@racecount == 1) goto L_Started;
L_Menu:
	mes "[Race Starter]";
	mes "Please stay on the Eastern side of me.";
	if (select("Start Race", "Cancel") != 1)
		close;
	set $@counting,1;
	mes "Counting down...";
	addtimer 1000, "Starter::OnCount1000";
	addtimer 2000, "Starter::OnCount2000";
	addtimer 3000, "Starter::OnCount3000";
	addtimer 4000, "Starter::OnCount4000";
	announce strcharinfo(PC_NAME) + "Started a countdown",1;
	announce "Get ready to race!",1;
	close;

OnCount1000:
	announce "[3]",1;
	end;
OnCount2000:
	announce "[2]",1;
	end;
OnCount3000:
	announce "[1]",1;
	end;
OnCount4000:
	emotion 27;
	specialeffect EF_CHIMTO;
	announce "[GO!]",1;
	set $@race,1;
	set $@position,0;
	set $@counting,0;
	set $@raceid,rand(100000,999999);
	end;

L_Started:
	if ((getmapusers("pvp_y_1-5") < 3) && ($@position > 0)) goto L_Menu;
	if ($@position > 2) goto L_Menu;
	mes "[Starter]";
	mes "Race in progress";
	close;

OnInit:
	set $@race,0;
	set $@position,0;
	set $@racecount,0;
	end;
}

//Checkpoint 1
pvp_y_1-5,144,262,5	script	Check Point 1	HIDDEN_NPC,0,5,{
	end;
OnTouch:
	if (@raceid != $@raceid) goto L_Started;
	if (@race == 6) goto L_Finished;
	if ($@race == 1) goto L_Started;
	mes "The race has not started, please move back.";
	close;
L_Started:
	set @race,1;
	set @raceid,$@raceid;
	end;
L_Finished:
	mes "You have already completed the race.";
	close;
}

//Checkpoint 2
pvp_y_1-5,73,247,5	script	Check Point 2	HIDDEN_NPC,6,6,{
	end;
OnTouch:
	if (@race != 1) goto L_Miss;
	set @race,2;
	announce "[" + strcharinfo(PC_NAME) +"] has reached Checkpoint [1]",1;
	end;
L_Miss:
	mes "You have missed a Checkpoint. Please go back.";
	close;
}

//Checkpoint 3
pvp_y_1-5,77,44,5	script	Check Point 3	HIDDEN_NPC,6,6,{
	end;
OnTouch:
	if (@race != 2) goto L_Miss;
	set @race,3;
	announce "[" + strcharinfo(PC_NAME) +"] has reached Checkpoint [2]",1;
	end;
L_Miss:
	mes "You have missed a Checkpoint. Please go back.";
	close;
}

//Checkpoint 3
pvp_y_1-5,249,60,5	script	Check Point 4	HIDDEN_NPC,6,6,{
	end;
OnTouch:
	if (@race != 3) goto L_Miss;
	set @race,4;
	announce "[" + strcharinfo(PC_NAME) +"] has reached Checkpoint [3]",1;
	end;
L_Miss:
	mes "You have missed a Checkpoint. Please go back.";
	close;
}

//Checkpoint 4
pvp_y_1-5,255,256,5	script	Check Point 5	HIDDEN_NPC,6,6,{
	end;
OnTouch:
	if (@race != 4) goto L_Miss;
	set @race,5;
	announce "[" + strcharinfo(PC_NAME) +"] has reached Checkpoint [4]",1;
	end;
L_Miss:
	mes "You have missed a Checkpoint. Please go back.";
	close;
}

//Finish Line
pvp_y_1-5,174,244,5	script	Finish Line	HIDDEN_NPC,6,6,{
	end;
OnTouch:
	if (@raceid != $@raceid) goto L_WrongRace;
	if (@race != 5) goto L_Miss;
	set @race,6;
	set $@position,$@position+1;
	announce "[" + strcharinfo(PC_NAME) +"] has reached The Finish line! [Position: " + $@position + "]",1;
	end;
L_Miss:
	mes "You have missed a Checkpoint. Please go back.";
	close;
L_WrongRace:
	mes "You are not in this race.";
	close;
}

//Check Point Marker Flags
pvp_y_1-5,144,267,4	script	Check Point 1#01	GUILD_FLAG,{
	end;
}
pvp_y_1-5,144,257,4	script	Check Point 1#02	GUILD_FLAG,{
	end;
}
pvp_y_1-5,70,252,3	script	Check Point 2#01	GUILD_FLAG,{
	end;
}
pvp_y_1-5,77,243,3	script	Check Point 2#02	GUILD_FLAG,{
	end;
}
pvp_y_1-5,81,48,1	script	Check Point 3#01	GUILD_FLAG,{
	end;
}
pvp_y_1-5,72,40,1	script	Check Point 3#02	GUILD_FLAG,{
	end;
}
pvp_y_1-5,244,65,7	script	Check Point 4#01	GUILD_FLAG,{
	end;
}
pvp_y_1-5,252,57,7	script	Check Point 4#02	GUILD_FLAG,{
	end;
}
pvp_y_1-5,259,260,5	script	Check Point 5#01	GUILD_FLAG,{
	end;
}
pvp_y_1-5,251,252,5	script	Check Point 5#02	GUILD_FLAG,{
	end;
}
pvp_y_1-5,174,249,4	script	Finish Line#01	GUILD_FLAG,{
	end;
}
pvp_y_1-5,174,238,4	script	Finish Line#02	GUILD_FLAG,{
	end;
}
