class 1 npc_dm : teleporter
{
parameter:
string fnHi = "npc_dm_manager_start.htm";
string fnLowLevel = "npc_dm_manager_no_level.htm";
string fnGoMatch = "npc_dm_manager_go_match.htm";
string fnNoMatch = "npc_dm_manager_no_match.htm";
string fnKarma = "npc_dm_manager_karma.htm";
string fnRegNo = "npc_dm_reg_no.htm";
string DoorName1 = "aden_colosseum_001_002";
string DoorName2 = "aden_colosseum_002_001";
int TelPosX1 = 151484;
int TelPosY1 = 46731;
int TelPosZ1 = -3400;
int TelPosX2 = 147567;
int TelPosY2 = 46711;
int TelPosZ2 = -3400;
int TownPosX = 83443;
int TownPosY = 148643;
int TownPosZ = -3400;
int SpawnPosX1 = 82653; //Initial position
int SpawnPosY1 = 149717;
int SpawnPosZ1 = -3464;
int SpawnPosX2 = 149494; //He can't be attacked from here
int SpawnPosY2 = 48358;
int SpawnPosZ2 = -3152;
int SpawnPosX3 = 149462; //He can be attacked from here
int SpawnPosY3 = 46743;
int SpawnPosZ3 = -3408;
string event_started = "MassPvP: Registration has started!";
string register_instructions = "MassPvP: To participate , go to Giran and talk to me";
string start_time_message = "MassPvP: will begin in 20 minutes!";
string event_finish_time_message = "MassPvP: event will finish in 10 minutes !";
string event_finish_time_message_skill = "MassPvP: event will finish in 20 minutes, or when someone uses skill'MassPvP' on me!" ;
int Priz1 = 6673;
int Col1 = 5;
int Priz2 = 1540;
int Col2 = 10;
int Priz3 = 0;
int Col3 = 0;
int minimum_level = 40;
int ignore_time = 1 ;
int time_before_start = 5; //default 160
int use_skill_to_win = 0;
int skill_to_win_id = 1537025;
int event_time_no_skill = 10;
int event_time_skill = 20;
int minimum_participants = 2;
handler:
EventHandler TALKED( talker )
{
if( myself.i_ai0 == 0 )
{
if( talker.karma > 0 )
{
myself::ShowPage( talker, fnKarma );
}
else if( myself::GetCookie( talker, "md" ) != 1 &&
myself::GetCookie( talker, "md" ) != 2 )
{
myself::ShowPage( talker, fnHi );
}
else
{
myself::ShowPage( talker, fnNoMatch );
}
}
else
{
myself::ShowPage( talker, fnRegNo );
}
}
EventHandler CREATED()
{
myself::InstantTeleport( myself.sm, SpawnPosX1, SpawnPosY1, SpawnPosZ1 );
myself.i_ai0 = 0;
myself.i_ai1 = 0;
myself::AddTimerEx( 100, 1000 * 60 );
}
EventHandler MENU_SELECTED( talker, ask, reply, i1 )
{
if( ask == 1 && reply == 1 )
{
if( talker.level >= minimum_level )
{
myself.i_ai1 = myself.i_ai1 + 1;
for( i1 = 20; i1 < 100; i1 = i1 + 1 )
{
if( myself::GetGlobalMap( i1 ) == -1 )
{
myself::RegisterGlobalMap( i1, myself::GetIndexFromCreature( talker ) );
break;
}
}
myself::ShowPage( talker, fnGoMatch );
myself::SetCookie( talker, "md", 1 );
}
else
{
myself::ShowPage( talker, fnLowLevel );
}
}
}
EventHandler TIMER_FIRED_EX( talker, timer_id, i0, i1 )
{
if( timer_id == 100 )
{
if( ignore_time == 1 || gg::GetDateTime( 0, @DTF_HOUR ) > 9 && gg::GetDateTime( 0, @DTF_HOUR ) < 20 )
{
myself::AddTimerEx( 1, 60000 * time_before_start );
}
else
{
myself::AddTimerEx( 100, 1000 * 60 );
}
}
if( timer_id == 1 )
{
myself::InstantTeleport( myself.sm, SpawnPosX1, SpawnPosY1, SpawnPosZ1 );
gg::Announce( event_started );
gg::Announce( register_instructions );
gg::Announce( start_time_message );
myself::AddTimerEx( 2, 1000 * 300 );
myself::AddTimerEx( 777, 1000 * 1200 );
}
else if( timer_id == 2 )
{
myself::Shout( "Registration for 'MassPvP' will end in 15 minutes." );
myself::AddTimerEx( 3, 1000 * 300 );
}
else if( timer_id == 3 )
{
myself::Shout( "Registration for 'MassPvP' will end in 10 minutes." );
myself::AddTimerEx( 4, 1000 * 300 );
}
else if( timer_id == 4 )
{
myself::Shout( "Registration for 'MassPvP' will end in 5 minutes." );
myself::AddTimerEx( 5, 1000 * 60 );
}
else if( timer_id == 5 )
{
myself::Shout( "Registration for 'MassPvP' will end in 4 minutes." );
myself::AddTimerEx( 6, 1000 * 60 );
}
else if( timer_id == 6 )
{
myself::Shout( "Registration for 'MassPvP' will end in 3 minutes." );
myself::AddTimerEx( 7, 1000 * 60 );
}
else if( timer_id == 7 )
{
myself::Shout( "Registration for 'MassPvP' will end in 2 minutes." );
myself::AddTimerEx( 8, 1000 * 60 );
}
else if( timer_id == 8 )
{
myself::Shout( "Registration for 'MassPvP' will end in 1 minutes." );
myself::AddTimerEx( 9, 1000 * 60 );
}
else if( timer_id == 777 )
{
for( i1 = 20; i1 < 100; i1 = i1 + 1 )
{
if( myself::GetGlobalMap( i1 ) != -1 )
{
talker = myself::GetCreatureFromIndex( myself::GetGlobalMap( i1 ) );
if(gg::IsNull( talker )){myself.i_ai1 = myself.i_ai1-1;}
}
}
for( i1 = 20; i1 < 100; i1 = i1 + 1 )
{
if( myself::GetGlobalMap( i1 ) != -1 )
{
talker = myself::GetCreatureFromIndex( myself::GetGlobalMap( i1 ) );
if( !gg::IsNull( talker ) && myself::GetCookie( talker, "md" ) == 1 )
{
if( minimum_participants!= 0 && myself.i_ai1 < minimum_participants)
{
myself::SetCookie( talker, "md", 0 );
}
else
{
i0 = gg::Rand( 2 );
if( i0 == 0 )
{
myself::InstantTeleport( talker, TelPosX1, TelPosY1, TelPosZ1 );
myself::SetCookie( talker, "md", 2 );
}
else
{
myself::InstantTeleport( talker, TelPosX2, TelPosY2, TelPosZ2 );
myself::SetCookie( talker, "md", 2 );
}
}
}
}
}
if( minimum_participants!= 0 && myself.i_ai1 < minimum_participants)
{
myself::Shout( "Not enough participants." );
myself::Despawn();
}
}
else if( timer_id == 9 )
{
myself::Shout( "Registration for 'MassPvP' is closed." );
myself.i_ai0 = 1;
myself::InstantTeleport( myself.sm, SpawnPosX2, SpawnPosY2, SpawnPosZ2 );
myself::AddTimerEx( 10, 1000 * 20 );
}
else if( timer_id == 10 )
{
myself::Shout( "The fight will begin in 60 seconds..." );
myself::AddTimerEx( 11, 1000 * 30 );
}
else if( timer_id == 11 )
{
myself::Shout( "30 seconds..." );
myself::AddTimerEx( 12, 1000 * 10 );
}
else if( timer_id == 12 )
{
myself::Shout( "20 seconds..." );
myself::AddTimerEx( 13, 1000 * 10 );
}
else if( timer_id == 13 )
{
myself::Shout( "10 seconds..." );
myself::AddTimerEx( 14, 1000 * 5 );
}
else if( timer_id == 14 )
{
myself::Shout( "5 seconds..." );
myself::AddTimerEx( 15, 1000 * 5 );
}
else if( timer_id == 15 )
{
myself::Castle_GateOpenClose2( DoorName1, 0 );
myself::Castle_GateOpenClose2( DoorName2, 0 );
myself::Shout( "GO, GO, GO!" );
myself::Shout( "Gate will be closed..." );
myself::AddTimerEx( 16, 1000 * 5 );
}
else if( timer_id == 16 )
{
myself::Shout( "The gates will be closed in 10 seconds!" );
myself::AddTimerEx( 17, 1000 * 5 );
}
else if( timer_id == 17 )
{
myself::Shout( "The gates will be closed in 5 seconds!" );
myself::AddTimerEx( 19, 1000 * 5 );
}
else if( timer_id == 19 )
{
myself::Castle_GateOpenClose2( DoorName1, 1 );
myself::Castle_GateOpenClose2( DoorName2, 1 );
if(use_skill_to_win == 0)
{
myself::Shout( event_finish_time_message );
myself::AddTimerEx( 20, 60000 * event_time_no_skill );
}
else{
myself::InstantTeleport( myself.sm, SpawnPosX3, SpawnPosY3, SpawnPosZ3 );
myself::Shout( event_finish_time_message_skill);
myself::AddTimerEx( 21, 60000 * event_time_skill );
}
}
else if(timer_id == 20){
myself::InstantTeleport( myself.sm, SpawnPosX3, SpawnPosY3, SpawnPosZ3 );
myself::Shout( "Attack me to win the event !" );
myself::AddTimerEx( 21, 60000 * 2 );
}
else if( timer_id == 21 )
{
myself::Shout( "Time up! MassPvP finished! without winners!" );
myself::AddTimerEx( 22, 1 );
myself::AddTimerEx( 23, 1 );
}
else if( timer_id == 22 )
{
for( i1 = 20; i1 < 100; i1 = i1 + 1 )
{
if( myself::GetGlobalMap( i1 ) != -1 )
{
talker = myself::GetCreatureFromIndex( myself::GetGlobalMap( i1 ) );
if( myself::GetCookie( talker, "md" ) == 2 )
{
myself::InstantTeleport( talker, TownPosX, TownPosY, TownPosZ );
myself::SetCookie( talker, "md", 3 );
}
myself::UnregisterGlobalMap( i1 );
}
}
}
else if( timer_id == 23 )
{
myself::Despawn();
}
}
EventHandler ATTACKED( attacker, damage, skill_name_id, i0 )
{
if( use_skill_to_win == 0 || skill_name_id == skill_to_win_id )
{
if( myself::GetCookie( attacker, "md" ) == 2 )
{
if( Priz1 != 0 )
{
myself::GiveItem1( attacker, Priz1, Col1 );
}
if( Priz2 != 0 )
{
myself::GiveItem1( attacker, Priz2, Col2 );
}
if( Priz3 != 0 )
{
myself::GiveItem1( attacker, Priz3, Col3 );
}
myself::Shout( "The winner is : " + attacker.name + "." );
myself::AddTimerEx( 22, 1 );
myself::AddTimerEx( 23, 1 );
}
}
}
}