bg_emp.txt 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. //===== rAthena Script =======================================
  2. //= Battleground: Emperium
  3. //===== By: ==================================================
  4. //= AnnieRuru
  5. //===== Current Version: =====================================
  6. //= 1.0
  7. //===== Compatible With: =====================================
  8. //= rAthena Project
  9. //===== Description: =========================================
  10. //= A simple battleground script:
  11. //= Destroy the opponent's Emperium to win the match.
  12. //===== Additional Comments: =================================
  13. //= 1.0 First version, edited. [Euphy]
  14. //============================================================
  15. - script bg_emp#control -1,{
  16. OnInit:
  17. .minplayer2start = 1; // minimum players to start (ex. if 3vs3, set to 3)
  18. .eventlasting = 20*60; // event duration before auto-reset (20 minutes * seconds)
  19. setarray .rewarditem[0], // rewards for the winning team: <item>,<amount>,...
  20. 501, 10;
  21. .team1name$ = "Red";
  22. .team2name$ = "Blue";
  23. end;
  24. OnStart:
  25. if ( getwaitingroomstate( 0, .rednpcname$ ) < .minplayer2start || getwaitingroomstate( 0, .bluenpcname$ ) < .minplayer2start )
  26. end;
  27. // create Battleground and teams
  28. .red = waitingroom2bg( "bat_a01", 157,347, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ );
  29. copyarray .team1aid, $@arenamembers, $@arenamembersnum;
  30. .team1count = .minplayer2start;
  31. .blue = waitingroom2bg( "bat_a01", 142,51, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ );
  32. copyarray .team2aid, $@arenamembers, $@arenamembersnum;
  33. .team2count = .minplayer2start;
  34. delwaitingroom .rednpcname$;
  35. delwaitingroom .bluenpcname$;
  36. disablenpc .rednpcname$;
  37. disablenpc .bluenpcname$;
  38. setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red";
  39. setwall "bat_a01", 154,51, 6, 4, 0, "bg_emp_town_blue";
  40. bg_warp .red, "bat_a01", 171,346;
  41. bg_warp .blue, "bat_a01", 162,50;
  42. bg_updatescore "bat_a01", 0, 0;
  43. // delay before match begins
  44. sleep 6000;
  45. mapannounce "bat_a01", "The rules are simple. The first team to break the opponent's Emperium wins!", bc_map;
  46. sleep 3000;
  47. for ( .@i = 5; .@i > 0; .@i-- ) {
  48. mapannounce "bat_a01", "["+ .@i +"]", bc_map;
  49. sleep 1000;
  50. }
  51. mapannounce "bat_a01", "Start!", bc_map;
  52. // spawn Emperiums
  53. bg_monster .red,"bat_a01",171,346, "--ja--",1915, strnpcinfo(3)+"::OnRedDown";
  54. bg_monster .blue,"bat_a01",162,50, "--ja--",1914, strnpcinfo(3)+"::OnBlueDown";
  55. delwall "bg_emp_town_red";
  56. delwall "bg_emp_town_blue";
  57. // match duration
  58. sleep .eventlasting * 1000;
  59. // end match, destroy Battleground, reset NPCs
  60. killmonster "bat_a01", strnpcinfo(3)+"::OnRedDown";
  61. killmonster "bat_a01", strnpcinfo(3)+"::OnBlueDown";
  62. if ( .winside ) {
  63. mapannounce "bat_a01", "- "+ getd( ".team"+ .winside +"name$" ) +" Team is victorious! -", bc_map;
  64. for ( .@i = 0; .@i < getd(".team"+ .winside +"count"); .@i++ )
  65. getitem .rewarditem[0], .rewarditem[1], getd(".team"+ .winside +"aid["+ .@i +"]" );
  66. } else
  67. mapannounce "bat_a01", "- The match has ended in a draw! -", bc_map;
  68. sleep 5000;
  69. bg_warp .red, "prontera", 155,182;
  70. bg_warp .blue, "prontera", 158,182;
  71. bg_destroy .red;
  72. bg_destroy .blue;
  73. delwall "bg_emp_town_red";
  74. delwall "bg_emp_town_blue";
  75. deletearray .team1aid;
  76. deletearray .team2aid;
  77. .winside = .team1count = .team2count = 0;
  78. enablenpc .rednpcname$;
  79. enablenpc .bluenpcname$;
  80. donpcevent .rednpcname$ +"::OnStart";
  81. donpcevent .bluenpcname$ +"::OnStart";
  82. end;
  83. // Emperium destroyed
  84. OnRedDown: callsub L_EmpDown, 1, 2;
  85. OnBlueDown: callsub L_EmpDown, 2, 1;
  86. L_EmpDown:
  87. mapannounce "bat_a01", strcharinfo(0) +" has destroyed "+ getd( ".team"+ getarg(0) +"name$" ) +" Team's Emperium.", bc_map;
  88. .winside = getarg(1);
  89. awake strnpcinfo(0);
  90. end;
  91. // "OnDeath" event
  92. OnRedDead:
  93. OnBlueDead:
  94. sleep2 1250;
  95. percentheal 100,100;
  96. end;
  97. // "OnQuit" event
  98. OnRedQuit: callsub L_Quit, 1, 2;
  99. OnBlueQuit: callsub L_Quit, 2, 1;
  100. L_Quit:
  101. percentheal 100, 100;
  102. while ( getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ) != getcharid(3) && .@i < getd(".team"+ getarg(0) +"count") ) .@i++;
  103. deletearray getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ), 1;
  104. setd ".team"+ getarg(0) +"count", getd(".team"+ getarg(0) +"count") -1;
  105. if ( getd(".team"+ getarg(0) +"count") ) end;
  106. mapannounce "bat_a01", "All "+ getd( ".team"+ getarg(0) +"name$" ) +" team members have quit!", bc_map, 0xff3333;
  107. end;
  108. }
  109. prontera,155,182,5 script Red Team#bg_emp 733,{
  110. end;
  111. OnInit:
  112. sleep 1;
  113. set getvariableofnpc( .rednpcname$, "bg_emp#control" ), strnpcinfo(0);
  114. OnStart:
  115. waitingroom "Red Team", getvariableofnpc( .minplayer2start, "bg_emp#control" ) +1, "bg_emp#control::OnStart", getvariableofnpc( .minplayer2start, "bg_emp#control" );
  116. end;
  117. }
  118. prontera,158,182,5 script Blue Team#bg_emp 734,{
  119. end;
  120. OnInit:
  121. sleep 1;
  122. set getvariableofnpc( .bluenpcname$, "bg_emp#control" ), strnpcinfo(0);
  123. OnStart:
  124. waitingroom "Blue Team", getvariableofnpc( .minplayer2start, "bg_emp#control" ) +1, "bg_emp#control::OnStart", getvariableofnpc( .minplayer2start, "bg_emp#control" );
  125. end;
  126. }
  127. bat_a01 mapflag battleground
  128. bat_a01 mapflag nosave SavePoint
  129. bat_a01 mapflag nowarp
  130. bat_a01 mapflag nowarpto
  131. bat_a01 mapflag noteleport
  132. bat_a01 mapflag nomemo
  133. bat_a01 mapflag nopenalty
  134. bat_a01 mapflag nobranch
  135. bat_a01 mapflag noicewall