1 //===== rAthena Script =======================================
3 //===== By: ==================================================
4 //= aftermath, AnnieRuru (rewrite)
5 //===== Current Version: =====================================
7 //===== Compatible With: =====================================
9 //===== Description: =========================================
10 //= Gather a party and kill every MVP in ascending order.
11 //===== Additional Comments: =================================
12 //= 1.0 First version, edited. [Euphy]
13 //============================================================
15 prontera,164,171,3 script MvP Ladder Warper 56,{
16 mes "[MvP Ladder Warper]";
17 mes "Say... do you want to play the MvP Ladder game?";
19 switch(select("Yes, let's get it on!:Information.:Show me the best record.:No.")) {
23 mes "[MvP Ladder Warper]";
24 mes "In this game, your party has to kill every single MvP monster in ascending order, from the weakest to strongest.";
25 if ( .finish_item_amount )
26 mes "If your party can finish the MVP ladder game, each member will earn "+ callfunc("F_InsertPlural", .finish_item_amount, getitemname( .finish_item_id )) +".";
28 mes "But the entrance fee is "+ callfunc( "F_InsertComma", .register_cost ) +" zeny.";
30 mes "[MvP Ladder Warper]";
31 mes "You lose the game if you can't finish in "+ .timeout +" minutes, or if your entire party is killed.";
35 mes "[MvP Ladder Warper]";
36 if ( !$mvpladdderparty_time ) {
37 mes "Nobody has finished this game yet.";
40 mes "The best record is";
41 mes "[ "+( $mvpladdderparty_time / 60 )+" min "+( $mvpladdderparty_time % 60 )+" sec ]";
42 mes "By the party ^FF0000"+ $mvpladdderparty_name$ +"^000000.";
43 .@size = getarraysize( $mvpladderparty_member$ );
44 for ( .@i = 0; .@i < .@size; .@i++ )
45 mes "^000000"+ ( .@i +1 ) +". ^0000FF"+ $mvpladderparty_member$[.@i];
46 if ( getgmlevel() < .gmlvlreset ) close;
48 if ( select( "Close.", "Reset the record." ) == 1 ) close;
49 if ( select( "Never mind.", "I really want to reset it." ) == 1 ) close;
50 $mvpladdderparty_time = 0;
51 $mvpladdderparty_name$ = "";
52 deletearray $mvpladderparty_member$[.@i];
53 mes "[MvP Ladder Warper]";
54 mes "Record reset successfully.";
57 mes "[MvP Ladder Warper]";
58 mes "When you are strong enough to complete the game, please come back.";
61 if ( !getcharid(1) ) {
62 mes "[MvP Ladder Warper]";
63 mes "You have to form a party to play.";
66 if ( getpartyleader( getcharid(1), 2 ) != getcharid(0) ) {
67 mes "[MvP Ladder Warper]";
68 mes "Only the party leader can register.";
71 .@origin = getcharid(3);
72 getpartymember getcharid(1), 1;
73 getpartymember getcharid(1), 2;
74 for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
75 if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
76 attachrid $@partymemberaid[.@i];
77 if ( strcharinfo(3) == strnpcinfo(4) )
82 if ( $@partymembercount != .register_min ) {
83 mes "[MvP Ladder Warper]";
84 mes "You have to form a party with exactly "+ .register_min +" members to play.";
87 else if ( .@online != .register_min ) {
88 mes "[MvP Ladder Warper]";
89 mes "Your party must have "+ .register_min +" members online on map '"+ strnpcinfo(4) +"'.";
92 else if ( .register_cost && Zeny < .register_cost ) {
93 mes "[MvP Ladder Warper]";
94 mes "You don't have enough zeny. Please come back when you do.";
97 else if ( .party_id ) {
98 mes "[MvP Ladder Warper]";
99 mes "I'm sorry, but a party is currently playing the game. Please standby until the party is finished.";
103 Zeny -= .register_cost;
104 announce "The party ["+ strcharinfo(1) +"] has started the MvP ladder game.", bc_all;
105 set .party_id, getcharid(1);
106 set .@time_enter, gettimetick(2);
107 for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
108 if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
109 attachrid $@partymemberaid[.@i];
110 if ( strcharinfo(3) == strnpcinfo(4) ) {
111 announce "You have "+ .timeout +" minutes to complete "+ .totalround +" rounds.", bc_self;
112 .@name$[.@c] = strcharinfo(0);
118 warpparty .eventmap$, 0,0, .party_id, strnpcinfo(4);
119 donpcevent strnpcinfo(0)+"::OnMvpDead";
120 sleep .timeout * 60000;
121 if ( .round == .totalround +1 ) {
122 getpartymember .party_id, 1;
123 getpartymember .party_id, 2;
124 mapannounce .eventmap$, "Congratulations... You were able to defeat all the MVPs!", bc_map;
125 for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
126 if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
127 attachrid $@partymemberaid[.@i];
128 if ( strcharinfo(3) == .eventmap$ )
129 getitem .finish_item_id, .finish_item_amount;
132 set .@timeused, gettimetick(2) - .@time_enter;
133 if ( .bonus_item_amount && .@timeused < .bonus_time * 60 ) {
134 mapannounce .eventmap$, "You are rewarded a bonus item for completing the ladder within "+ .bonus_time +" minutes.", bc_map;
135 for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
136 if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
137 attachrid $@partymemberaid[.@i];
138 if ( strcharinfo(3) == .eventmap$ )
139 getitem .bonus_item_id, .bonus_item_amount;
144 if ( !$mvpladdderparty_time || .@timeused < $mvpladdderparty_time ) {
145 mapannounce .eventmap$, "And you broke the record! [ "+( .@timeused / 60 )+" min "+( .@timeused % 60 )+" sec ]", bc_map;
146 set $mvpladdderparty_time, .@timeused;
147 set $mvpladdderparty_name$, getpartyname( .party_id );
148 copyarray $mvpladderparty_member$, .@name$, .register_min;
151 mapannounce .eventmap$, "Time used [ "+( .@timeused / 60 )+" min "+( .@timeused % 60 )+" sec ]", bc_map;
153 announce "The party ["+ getpartyname( .party_id ) +"] has finished the MvP ladder game!", bc_all;
156 announce "The party ["+ getpartyname( .party_id ) +"] has failed to finish the MvP ladder game.", bc_all;
157 mapwarp .eventmap$, .map$, .x, .y;
158 killmonsterall .eventmap$;
159 .party_id = .round = 0;
164 if ( .round >= 2 && .round != .totalround +1 && .round_item_amount ) {
165 for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
166 if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
167 attachrid $@partymemberaid[.@i];
168 if ( strcharinfo(3) == .eventmap$ )
169 getitem .round_item_id, .round_item_amount;
173 if ( .round == .totalround +1 ) {
177 else if ( .round == .totalround )
178 mapannounce .eventmap$, "The final Round will begin in "+ .delay +" seconds...", bc_map;
180 mapannounce .eventmap$, "Starting round "+ .round +" in "+ .delay +" seconds...", bc_map;
182 if ( .mvpid[.round] == 1646 ) // pick random Bio3 MVP
183 .mvpid[.round] = rand(1646,1651);
184 monster .eventmap$,0,0, "--ja--", .mvpid[.round], 1, strnpcinfo(0)+"::OnMvpDead";
185 mapannounce .eventmap$, getmonsterinfo( .mvpid[.round], MOB_NAME ) +" has spawned!", bc_map|bc_blue;
194 if ( strcharinfo(3) != .eventmap$ || !getcharid(1) ) end;
195 if ( getcharid(1) != .party_id ) end;
196 getpartymember .party_id, 1;
197 getpartymember .party_id, 2;
198 for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
199 if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
200 attachrid $@partymemberaid[.@i];
201 if ( strcharinfo(3) == .eventmap$ && hp > 0 )
208 mapannounce .eventmap$, "Party wiped!", bc_map;
215 // Configurations -----------------------------------------------------
217 // Time limit (in minutes)
218 // When time runs out, all players inside the room will be kicked out.
219 // Do NOT set this to zero!
222 // entrance fee (in Zeny)
223 set .register_cost, 100000;
225 // exact amount of party members needed to start the game
226 set .register_min, 2;
228 // id of each mvp. you can add more
230 1086,// Golden Thief Bug 64
232 1150,// Moonlight Flower 67
236 1492,// Incantation Samurai 71
237 1046,// Doppelgangger 72
239 1418,// Evil Snake Lord 73
243 1251,// Knight of Windstorm 77
247 1871,// Fallen Bishop 80
256 1688,// Lady Tanee 89
257 1768,// Gloom Under Night 89
261 1373,// Lord of Death 94
262 1312,// Turtle General 97
265 1646,// Bio3 placeholder 99
267 1751,// Valkyrie Randgris 99
270 // number of rounds (default: 39)
271 set .totalround, getarraysize(.mvpid) -1;
273 // item reward for completing each round
274 set .round_item_id, 512;
275 set .round_item_amount, 1;
277 // item reward for completing the entire ladder
278 set .finish_item_id, 501;
279 set .finish_item_amount, 10;
281 // bonus reward if ladder completed within a certain time (in minutes)
282 set .bonus_time, 45; // if completed within 45 minutes, this reward is given
283 set .bonus_item_id, 504;
284 set .bonus_item_amount, 10;
286 // time delay between rounds, in seconds (default: 3)
289 // minimum GM level to reset the best record
293 set .eventmap$, "guild_vs2-2";
295 // mapflag configuration
302 // mf_nopenalty, // disable exp loss
305 // mf_nomobloot, // disable monster drop loots,
306 // mf_nomvploot, // 2 of these
309 // Config Ends --------------------------------------------------------------
311 mapannounce .eventmap$, "An administrator has refreshed the server. Please re-register. We apologize for the inconvenience.", bc_map;
312 getmapxy .map$, .x, .y, UNITTYPE_NPC;
313 mapwarp .eventmap$, .map$, .x, .y;
314 killmonsterall .eventmap$;
315 .@size = getarraysize( .@mapflag );
316 for ( .@i = 0; .@i < .@size; .@i++ )
317 setmapflag .eventmap$, .@mapflag[.@i];