Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. class 1 npc_dm : teleporter
  2. {
  3. parameter:
  4.   string  fnHi = "npc_dm_manager_start.htm";
  5.   string  fnLowLevel = "npc_dm_manager_no_level.htm";
  6.   string  fnGoMatch = "npc_dm_manager_go_match.htm";
  7.   string  fnNoMatch = "npc_dm_manager_no_match.htm";
  8.   string  fnKarma = "npc_dm_manager_karma.htm";
  9.   string  fnRegNo = "npc_dm_reg_no.htm";
  10.   string  DoorName1 = "aden_colosseum_001_002";
  11.   string  DoorName2 = "aden_colosseum_002_001";
  12.  
  13.   int     TelPosX1 = 151484;
  14.   int     TelPosY1 = 46731;
  15.   int     TelPosZ1 = -3400;
  16.  
  17.   int     TelPosX2 = 147567;
  18.   int     TelPosY2 = 46711;
  19.   int     TelPosZ2 = -3400;
  20.  
  21.   int     TownPosX = 83443;
  22.   int     TownPosY = 148643;
  23.   int     TownPosZ = -3400;
  24.  
  25.   int     SpawnPosX1 = 82653;   //Initial position
  26.   int     SpawnPosY1 = 149717;
  27.   int     SpawnPosZ1 = -3464;
  28.  
  29.   int     SpawnPosX2 = 149494;  //He can't be attacked from here
  30.   int     SpawnPosY2 = 48358;
  31.   int     SpawnPosZ2 = -3152;
  32.  
  33.   int     SpawnPosX3 = 149462;  //He can be attacked from here
  34.   int     SpawnPosY3 = 46743;
  35.   int     SpawnPosZ3 = -3408;
  36.  
  37.   string event_started = "MassPvP: Registration has started!";
  38.   string register_instructions = "MassPvP: To participate , go to Giran and talk to me";
  39.   string start_time_message = "MassPvP: will begin in 20 minutes!";
  40.   string event_finish_time_message = "MassPvP: event will finish in 10 minutes !";
  41.   string event_finish_time_message_skill = "MassPvP: event will finish in 20 minutes, or when someone uses skill'MassPvP' on me!" ;
  42.  
  43.   int     Priz1 = 6673;
  44.   int     Col1 = 5;
  45.   int     Priz2 = 1540;
  46.   int     Col2 = 10;
  47.   int     Priz3 = 0;
  48.   int     Col3 = 0;
  49.   int     minimum_level = 40;
  50.   int     ignore_time = 1 ;
  51.   int     time_before_start = 5; //default 160
  52.   int     use_skill_to_win = 0;
  53.   int     skill_to_win_id = 1537025;
  54.   int     event_time_no_skill = 10;
  55.   int     event_time_skill = 20;
  56.  
  57.   int     minimum_participants = 2;
  58.  
  59. handler:
  60.   EventHandler TALKED( talker )
  61.   {
  62.     if( myself.i_ai0 == 0 )
  63.     {
  64.       if( talker.karma > 0 )
  65.       {
  66.         myself::ShowPage( talker, fnKarma );
  67.       }
  68.       else if( myself::GetCookie( talker, "md" ) != 1 &&
  69.                myself::GetCookie( talker, "md" ) != 2 )
  70.       {
  71.         myself::ShowPage( talker, fnHi );
  72.       }
  73.       else
  74.       {
  75.         myself::ShowPage( talker, fnNoMatch );
  76.       }
  77.     }
  78.     else
  79.     {
  80.       myself::ShowPage( talker, fnRegNo );
  81.     }
  82.   }
  83.  
  84.   EventHandler CREATED()
  85.   {
  86.     myself::InstantTeleport( myself.sm, SpawnPosX1, SpawnPosY1, SpawnPosZ1 );
  87.     myself.i_ai0 = 0;
  88.     myself.i_ai1 = 0;
  89.     myself::AddTimerEx( 100, 1000 * 60 );
  90.   }
  91.  
  92.   EventHandler MENU_SELECTED( talker, ask, reply, i1 )
  93.   {
  94.     if( ask == 1 && reply == 1 )
  95.     {
  96.       if( talker.level >= minimum_level )
  97.       {
  98.         myself.i_ai1 = myself.i_ai1 + 1;
  99.         for( i1 = 20; i1 < 100; i1 = i1 + 1 )
  100.         {
  101.           if( myself::GetGlobalMap( i1 ) == -1 )
  102.           {
  103.             myself::RegisterGlobalMap( i1, myself::GetIndexFromCreature( talker ) );
  104.             break;
  105.           }
  106.         }
  107.         myself::ShowPage( talker, fnGoMatch );
  108.         myself::SetCookie( talker, "md", 1 );
  109.       }
  110.       else
  111.       {
  112.         myself::ShowPage( talker, fnLowLevel );
  113.       }
  114.     }
  115.   }
  116.  
  117.   EventHandler TIMER_FIRED_EX( talker, timer_id, i0, i1 )
  118.   {
  119.     if( timer_id == 100 )
  120.     {
  121.       if( ignore_time == 1 || gg::GetDateTime( 0, @DTF_HOUR ) > 9 && gg::GetDateTime( 0, @DTF_HOUR ) < 20 )
  122.       {
  123.         myself::AddTimerEx( 1, 60000 * time_before_start );
  124.       }
  125.       else
  126.       {
  127.         myself::AddTimerEx( 100, 1000 * 60 );
  128.       }
  129.     }
  130.     if( timer_id == 1 )
  131.     {
  132.       myself::InstantTeleport( myself.sm, SpawnPosX1, SpawnPosY1, SpawnPosZ1 );
  133.       gg::Announce( event_started );
  134.       gg::Announce( register_instructions );
  135.       gg::Announce( start_time_message );
  136.       myself::AddTimerEx( 2, 1000 * 300 );
  137.       myself::AddTimerEx( 777, 1000 * 1200 );
  138.     }
  139.     else if( timer_id == 2 )
  140.     {
  141.         myself::Shout( "Registration for 'MassPvP' will end in 15 minutes." );
  142.       myself::AddTimerEx( 3, 1000 * 300 );
  143.     }
  144.     else if( timer_id == 3 )
  145.     {
  146.       myself::Shout( "Registration for 'MassPvP' will end in 10 minutes." );
  147.       myself::AddTimerEx( 4, 1000 * 300 );
  148.     }
  149.     else if( timer_id == 4 )
  150.     {
  151.       myself::Shout( "Registration for 'MassPvP' will end in 5 minutes." );
  152.       myself::AddTimerEx( 5, 1000 * 60 );
  153.     }
  154.     else if( timer_id == 5 )
  155.     {
  156.       myself::Shout( "Registration for 'MassPvP' will end in 4 minutes." );
  157.       myself::AddTimerEx( 6, 1000 * 60 );
  158.     }
  159.     else if( timer_id == 6 )
  160.     {
  161.       myself::Shout( "Registration for 'MassPvP' will end in 3 minutes." );
  162.       myself::AddTimerEx( 7, 1000 * 60 );
  163.     }
  164.     else if( timer_id == 7 )
  165.     {
  166.       myself::Shout( "Registration for 'MassPvP' will end in 2 minutes." );
  167.       myself::AddTimerEx( 8, 1000 * 60 );
  168.     }
  169.     else if( timer_id == 8 )
  170.     {
  171.       myself::Shout( "Registration for 'MassPvP' will end in 1 minutes." );
  172.       myself::AddTimerEx( 9, 1000 * 60 );
  173.     }
  174.     else if( timer_id == 777 )
  175.     {  
  176.    
  177.       for( i1 = 20; i1 < 100; i1 = i1 + 1 )
  178.       {
  179.           if( myself::GetGlobalMap( i1 ) != -1 )
  180.           {    
  181.           talker = myself::GetCreatureFromIndex( myself::GetGlobalMap( i1 ) );
  182.           if(gg::IsNull( talker )){myself.i_ai1 = myself.i_ai1-1;}
  183.           }
  184.       }
  185.    
  186.       for( i1 = 20; i1 < 100; i1 = i1 + 1 )
  187.       {
  188.         if( myself::GetGlobalMap( i1 ) != -1 )
  189.         {
  190.           talker = myself::GetCreatureFromIndex( myself::GetGlobalMap( i1 ) );
  191.           if( !gg::IsNull( talker ) && myself::GetCookie( talker, "md" ) == 1 )
  192.           {
  193.          
  194.             if(  minimum_participants!= 0 && myself.i_ai1 < minimum_participants)
  195.             {
  196.                 myself::SetCookie( talker, "md", 0 );
  197.             }
  198.            
  199.             else
  200.             {
  201.                 i0 = gg::Rand( 2 );
  202.                 if( i0 == 0 )
  203.                 {
  204.                   myself::InstantTeleport( talker, TelPosX1, TelPosY1, TelPosZ1 );
  205.                   myself::SetCookie( talker, "md", 2 );
  206.                 }
  207.                 else
  208.                 {
  209.                   myself::InstantTeleport( talker, TelPosX2, TelPosY2, TelPosZ2 );
  210.                   myself::SetCookie( talker, "md", 2 );
  211.                 }
  212.             }
  213.          
  214.  
  215.           }
  216.         }
  217.       }
  218.      
  219.       if( minimum_participants!= 0 && myself.i_ai1 < minimum_participants)
  220.       {
  221.       myself::Shout( "Not enough participants." );
  222.       myself::Despawn();
  223.       }
  224.     }
  225.     else if( timer_id == 9 )
  226.     {
  227.         myself::Shout( "Registration for 'MassPvP' is closed." );
  228.       myself.i_ai0 = 1;
  229.       myself::InstantTeleport( myself.sm, SpawnPosX2, SpawnPosY2, SpawnPosZ2 );
  230.       myself::AddTimerEx( 10, 1000 * 20 );
  231.     }
  232.     else if( timer_id == 10 )
  233.     {
  234.         myself::Shout( "The fight will begin in 60 seconds..." );
  235.       myself::AddTimerEx( 11, 1000 * 30 );
  236.     }
  237.     else if( timer_id == 11 )
  238.     {
  239.         myself::Shout( "30 seconds..." );
  240.       myself::AddTimerEx( 12, 1000 * 10 );
  241.     }
  242.     else if( timer_id == 12 )
  243.     {
  244.         myself::Shout( "20 seconds..." );
  245.       myself::AddTimerEx( 13, 1000 * 10 );
  246.     }
  247.     else if( timer_id == 13 )
  248.     {
  249.         myself::Shout( "10 seconds..." );
  250.       myself::AddTimerEx( 14, 1000 * 5 );
  251.     }
  252.     else if( timer_id == 14 )
  253.     {
  254.         myself::Shout( "5 seconds..." );
  255.       myself::AddTimerEx( 15, 1000 * 5 );
  256.     }
  257.     else if( timer_id == 15 )
  258.     {
  259.       myself::Castle_GateOpenClose2( DoorName1, 0 );
  260.       myself::Castle_GateOpenClose2( DoorName2, 0 );
  261.       myself::Shout( "GO, GO, GO!" );
  262.       myself::Shout( "Gate will be closed..." );
  263.       myself::AddTimerEx( 16, 1000 * 5 );
  264.     }
  265.     else if( timer_id == 16 )
  266.     {
  267.         myself::Shout( "The gates will be closed in 10 seconds!" );
  268.       myself::AddTimerEx( 17, 1000 * 5 );
  269.     }
  270.     else if( timer_id == 17 )
  271.     {
  272.         myself::Shout( "The gates will be closed in 5 seconds!" );
  273.       myself::AddTimerEx( 19, 1000 * 5 );
  274.     }
  275.     else if( timer_id == 19 )
  276.     {
  277.       myself::Castle_GateOpenClose2( DoorName1, 1 );
  278.       myself::Castle_GateOpenClose2( DoorName2, 1 );
  279.  
  280.       if(use_skill_to_win == 0)
  281.       {
  282.       myself::Shout( event_finish_time_message );
  283.       myself::AddTimerEx( 20, 60000 * event_time_no_skill );
  284.       }
  285.       else{
  286.       myself::InstantTeleport( myself.sm, SpawnPosX3, SpawnPosY3, SpawnPosZ3 );
  287.       myself::Shout( event_finish_time_message_skill);
  288.       myself::AddTimerEx( 21, 60000 * event_time_skill );
  289.       }  
  290.     }
  291.     else if(timer_id == 20){
  292.       myself::InstantTeleport( myself.sm, SpawnPosX3, SpawnPosY3, SpawnPosZ3 );
  293.       myself::Shout( "Attack me to win the event !" );
  294.       myself::AddTimerEx( 21, 60000 * 2 );
  295.     }  
  296.     else if( timer_id == 21 )
  297.     {
  298.         myself::Shout( "Time up! MassPvP finished! without winners!" );
  299.       myself::AddTimerEx( 22, 1 );
  300.       myself::AddTimerEx( 23, 1 );
  301.     }
  302.     else if( timer_id == 22 )
  303.     {
  304.       for( i1 = 20; i1 < 100; i1 = i1 + 1 )
  305.       {
  306.         if( myself::GetGlobalMap( i1 ) != -1 )
  307.         {
  308.           talker = myself::GetCreatureFromIndex( myself::GetGlobalMap( i1 ) );
  309.           if( myself::GetCookie( talker, "md" ) == 2 )
  310.           {
  311.             myself::InstantTeleport( talker, TownPosX, TownPosY, TownPosZ );
  312.             myself::SetCookie( talker, "md", 3 );
  313.           }
  314.           myself::UnregisterGlobalMap( i1 );
  315.         }
  316.       }
  317.     }
  318.     else if( timer_id == 23 )
  319.     {
  320.       myself::Despawn();
  321.     }
  322.   }
  323.  
  324.   EventHandler ATTACKED( attacker, damage, skill_name_id, i0 )
  325.   {
  326.     if( use_skill_to_win == 0 || skill_name_id == skill_to_win_id )
  327.     {
  328.       if( myself::GetCookie( attacker, "md" ) == 2 )
  329.       {
  330.         if( Priz1 != 0 )
  331.         {
  332.           myself::GiveItem1( attacker, Priz1, Col1 );
  333.         }
  334.         if( Priz2 != 0 )
  335.         {
  336.           myself::GiveItem1( attacker, Priz2, Col2 );
  337.         }
  338.         if( Priz3 != 0 )
  339.         {
  340.           myself::GiveItem1( attacker, Priz3, Col3 );
  341.         }
  342.         myself::Shout( "The winner is : " + attacker.name + "." );
  343.         myself::AddTimerEx( 22, 1 );
  344.         myself::AddTimerEx( 23, 1 );
  345.       }
  346.     }
  347.   }
  348. }