bg_emp.txt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. //===== rAthena Script =======================================
  2. //= Battleground: Emperium
  3. //===== Description: =========================================
  4. //= A simple battleground script:
  5. //= Destroy the opponent's Emperium to win the match.
  6. //===== Changelogs: ==========================================
  7. //= 1.0 First version, edited. [Euphy] [AnnieRuru]
  8. //= 1.1 Use up to date battleground script commands [AnnieRuru]
  9. //= 1.2 Fix player can be kill multiple times within 250ms time frame [AnnieRuru]
  10. //============================================================
  11. - script bg_emp#control -1,{
  12. OnInit:
  13. .minplayer2start = 1; // minimum players to start (ex. if 3vs3, set to 3)
  14. .eventlasting = 20*60; // event duration before auto-reset (20 minutes * seconds)
  15. setarray .rewarditem[0], // rewards for the winning team: <item>,<amount>,...
  16. 501, 10;
  17. end;
  18. OnStart:
  19. if ( getwaitingroomstate( 0, .rednpcname$ ) < .minplayer2start || getwaitingroomstate( 0, .bluenpcname$ ) < .minplayer2start )
  20. end;
  21. // create Battleground and teams
  22. .red = waitingroom2bg( "-", 0,0, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ );
  23. .blue = waitingroom2bg( "-", 0,0, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ );
  24. delwaitingroom .rednpcname$;
  25. delwaitingroom .bluenpcname$;
  26. setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red";
  27. setwall "bat_a01", 154,51, 6, 4, 0, "bg_emp_town_blue";
  28. bg_warp .red, "bat_a01", 171,346;
  29. bg_warp .blue, "bat_a01", 162,50;
  30. // delay before match begins
  31. sleep 6000;
  32. mapannounce "bat_a01", "The rules are simple. The first team to break the opponent's Emperium wins!", bc_map;
  33. sleep 3000;
  34. for ( .@i = 5; .@i > 0; --.@i ) {
  35. mapannounce "bat_a01", "["+ .@i +"]", bc_map;
  36. sleep 1000;
  37. }
  38. mapannounce "bat_a01", "Start!", bc_map;
  39. // spawn Emperiums
  40. bg_monster .red,"bat_a01",171,346, "--ja--",1915, strnpcinfo(3)+"::OnRedDown";
  41. bg_monster .blue,"bat_a01",162,50, "--ja--",1914, strnpcinfo(3)+"::OnBlueDown";
  42. delwall "bg_emp_town_red";
  43. delwall "bg_emp_town_blue";
  44. // match duration
  45. sleep .eventlasting * 1000;
  46. // end match, destroy Battleground, reset NPCs
  47. killmonster "bat_a01", strnpcinfo(3)+"::OnRedDown";
  48. killmonster "bat_a01", strnpcinfo(3)+"::OnBlueDown";
  49. if ( .winside ) {
  50. mapannounce "bat_a01", "- "+( (.winside == .red)? "Red" : "Blue" )+" Team is victorious! -", bc_map;
  51. bg_get_data .winside, 1;
  52. for ( .@i = 0; .@i < $@arenamemberscount; ++.@i )
  53. getitem .rewarditem[0], .rewarditem[1], $@arenamembers[.@i];
  54. } else
  55. mapannounce "bat_a01", "- The match has ended in a draw! -", bc_map;
  56. sleep 5000;
  57. bg_warp .red, "prontera", 155,182;
  58. bg_warp .blue, "prontera", 158,182;
  59. bg_destroy .red;
  60. bg_destroy .blue;
  61. .winside = 0;
  62. donpcevent .rednpcname$ +"::OnStart";
  63. donpcevent .bluenpcname$ +"::OnStart";
  64. end;
  65. // Emperium destroyed
  66. OnRedDown: callsub L_EmpDown, "Red", .blue;
  67. OnBlueDown: callsub L_EmpDown, "Blue", .red;
  68. L_EmpDown:
  69. mapannounce "bat_a01", strcharinfo(0) +" has destroyed "+ getarg(0) +" Team's Emperium.", bc_map;
  70. .winside = getarg(1);
  71. awake strnpcinfo(0);
  72. end;
  73. // "OnDeath" event
  74. OnRedDead: callsub L_Dead, 157,347;
  75. OnBlueDead: callsub L_Dead, 142,51;
  76. L_Dead:
  77. warp "bat_a01", getarg(0), getarg(1);
  78. percentheal 100,100;
  79. end;
  80. // "OnQuit" event
  81. OnRedQuit: callsub L_Quit, .red, "Red";
  82. OnBlueQuit: callsub L_Quit, .blue, "Blue";
  83. L_Quit:
  84. percentheal 100, 100;
  85. if ( !bg_get_data( getarg(0), 0 ) )
  86. mapannounce "bat_a01", "All "+ getarg(1) +" team members have quit!", bc_map, 0xff3333;
  87. end;
  88. }
  89. prontera,155,182,5 script Red Team#bg_emp 733,{
  90. end;
  91. OnInit:
  92. sleep 1;
  93. set getvariableofnpc( .rednpcname$, "bg_emp#control" ), strnpcinfo(0);
  94. OnStart:
  95. waitingroom "Red Team", getvariableofnpc( .minplayer2start, "bg_emp#control" ) +1, "bg_emp#control::OnStart", getvariableofnpc( .minplayer2start, "bg_emp#control" );
  96. end;
  97. }
  98. prontera,158,182,5 script Blue Team#bg_emp 734,{
  99. end;
  100. OnInit:
  101. sleep 1;
  102. set getvariableofnpc( .bluenpcname$, "bg_emp#control" ), strnpcinfo(0);
  103. OnStart:
  104. waitingroom "Blue Team", getvariableofnpc( .minplayer2start, "bg_emp#control" ) +1, "bg_emp#control::OnStart", getvariableofnpc( .minplayer2start, "bg_emp#control" );
  105. end;
  106. }
  107. bat_a01 mapflag battleground
  108. bat_a01 mapflag nosave SavePoint
  109. bat_a01 mapflag nowarp
  110. bat_a01 mapflag nowarpto
  111. bat_a01 mapflag noteleport
  112. bat_a01 mapflag nomemo
  113. bat_a01 mapflag nopenalty
  114. bat_a01 mapflag nobranch
  115. bat_a01 mapflag noicewall
  116. bat_a01 mapflag hidemobhpbar