123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- //===== rAthena Script =======================================
- //= MVP Ladder Game
- //===== By: ==================================================
- //= aftermath, AnnieRuru (rewrite)
- //===== Current Version: =====================================
- //= 1.0
- //===== Compatible With: =====================================
- //= rAthena Project
- //===== Description: =========================================
- //= Gather a party and kill every MVP in ascending order.
- //===== Additional Comments: =================================
- //= 1.0 First version, edited. [Euphy]
- //============================================================
- prontera,164,171,3 script MvP Ladder Warper 56,{
- mes "[MvP Ladder Warper]";
- mes "Say... do you want to play the MvP Ladder game?";
- next;
- switch(select("Yes, let's get it on!:Information.:Show me the best record.:No.")) {
- case 1:
- break;
- case 2:
- mes "[MvP Ladder Warper]";
- mes "In this game, your party has to kill every single MvP monster in ascending order, from the weakest to strongest.";
- if ( .finish_item_amount )
- mes "If your party can finish the MVP ladder game, each member will earn "+ callfunc("F_InsertPlural", .finish_item_amount, getitemname( .finish_item_id )) +".";
- if ( .register_cost )
- mes "But the entrance fee is "+ callfunc( "F_InsertComma", .register_cost ) +" zeny.";
- next;
- mes "[MvP Ladder Warper]";
- mes "You lose the game if you can't finish in "+ .timeout +" minutes, or if your entire party is killed.";
- mes "Good luck!";
- close;
- case 3:
- mes "[MvP Ladder Warper]";
- if ( !$mvpladdderparty_time ) {
- mes "Nobody has finished this game yet.";
- close;
- }
- mes "The best record is";
- mes "[ "+( $mvpladdderparty_time / 60 )+" min "+( $mvpladdderparty_time % 60 )+" sec ]";
- mes "By the party ^FF0000"+ $mvpladdderparty_name$ +"^000000.";
- .@size = getarraysize( $mvpladderparty_member$ );
- for ( .@i = 0; .@i < .@size; .@i++ )
- mes "^000000"+ ( .@i +1 ) +". ^0000FF"+ $mvpladderparty_member$[.@i];
- if ( getgmlevel() < .gmlvlreset ) close;
- next;
- if ( select( "Close.", "Reset the record." ) == 1 ) close;
- if ( select( "Never mind.", "I really want to reset it." ) == 1 ) close;
- $mvpladdderparty_time = 0;
- $mvpladdderparty_name$ = "";
- deletearray $mvpladderparty_member$[.@i];
- mes "[MvP Ladder Warper]";
- mes "Record reset successfully.";
- close;
- case 4:
- mes "[MvP Ladder Warper]";
- mes "When you are strong enough to complete the game, please come back.";
- close;
- }
- if ( !getcharid(1) ) {
- mes "[MvP Ladder Warper]";
- mes "You have to form a party to play.";
- close;
- }
- if ( is_party_leader() == false ) {
- mes "[MvP Ladder Warper]";
- mes "Only the party leader can register.";
- close;
- }
- .@origin = getcharid(3);
- getpartymember getcharid(1), 1;
- getpartymember getcharid(1), 2;
- for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
- if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
- attachrid $@partymemberaid[.@i];
- if ( strcharinfo(3) == strnpcinfo(4) )
- .@online++;
- }
- }
- attachrid .@origin;
- if ( $@partymembercount != .register_min ) {
- mes "[MvP Ladder Warper]";
- mes "You have to form a party with exactly "+ .register_min +" members to play.";
- close;
- }
- else if ( .@online != .register_min ) {
- mes "[MvP Ladder Warper]";
- mes "Your party must have "+ .register_min +" members online on map '"+ strnpcinfo(4) +"'.";
- close;
- }
- else if ( .register_cost && Zeny < .register_cost ) {
- mes "[MvP Ladder Warper]";
- mes "You don't have enough zeny. Please come back when you do.";
- close;
- }
- else if ( .party_id ) {
- mes "[MvP Ladder Warper]";
- mes "I'm sorry, but a party is currently playing the game. Please standby until the party is finished.";
- mes "Thank you.";
- close;
- }
- Zeny -= .register_cost;
- announce "The party ["+ strcharinfo(1) +"] has started the MvP ladder game.", bc_all;
- set .party_id, getcharid(1);
- set .@time_enter, gettimetick(2);
- for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
- if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
- attachrid $@partymemberaid[.@i];
- if ( strcharinfo(3) == strnpcinfo(4) ) {
- announce "You have "+ .timeout +" minutes to complete "+ .totalround +" rounds.", bc_self;
- .@name$[.@c] = strcharinfo(0);
- .@c++;
- }
- }
- }
- cleanmap .eventmap$;
- warpparty .eventmap$, 0,0, .party_id, strnpcinfo(4);
- donpcevent strnpcinfo(0)+"::OnMvpDead";
- sleep .timeout * 60000;
- if ( .round == .totalround +1 ) {
- getpartymember .party_id, 1;
- getpartymember .party_id, 2;
- mapannounce .eventmap$, "Congratulations... You were able to defeat all the MVPs!", bc_map;
- for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
- if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
- attachrid $@partymemberaid[.@i];
- if ( strcharinfo(3) == .eventmap$ )
- getitem .finish_item_id, .finish_item_amount;
- }
- }
- set .@timeused, gettimetick(2) - .@time_enter;
- if ( .bonus_item_amount && .@timeused < .bonus_time * 60 ) {
- mapannounce .eventmap$, "You are rewarded a bonus item for completing the ladder within "+ .bonus_time +" minutes.", bc_map;
- for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
- if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
- attachrid $@partymemberaid[.@i];
- if ( strcharinfo(3) == .eventmap$ )
- getitem .bonus_item_id, .bonus_item_amount;
- }
- }
- }
- if ( !$mvpladdderparty_time || .@timeused < $mvpladdderparty_time ) {
- mapannounce .eventmap$, "And you broke the record! [ "+( .@timeused / 60 )+" min "+( .@timeused % 60 )+" sec ]", bc_map;
- set $mvpladdderparty_time, .@timeused;
- set $mvpladdderparty_name$, getpartyname( .party_id );
- copyarray $mvpladderparty_member$, .@name$, .register_min;
- }
- else
- mapannounce .eventmap$, "Time used [ "+( .@timeused / 60 )+" min "+( .@timeused % 60 )+" sec ]", bc_map;
- sleep 10000;
- announce "The party ["+ getpartyname( .party_id ) +"] has finished the MvP ladder game!", bc_all;
- }
- else
- announce "The party ["+ getpartyname( .party_id ) +"] has failed to finish the MvP ladder game.", bc_all;
- mapwarp .eventmap$, .map$, .x, .y;
- killmonsterall .eventmap$;
- .party_id = .round = 0;
- end;
- OnMvpDead:
- getpartymember .party_id, 1;
- getpartymember .party_id, 2;
- .round++;
- if ( .round >= 2 && .round != .totalround +1 && .round_item_amount ) {
- for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
- if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
- attachrid $@partymemberaid[.@i];
- if ( strcharinfo(3) == .eventmap$ )
- getitem .round_item_id, .round_item_amount;
- }
- }
- }
- if ( .round == .totalround +1 ) {
- awake strnpcinfo(0);
- end;
- }
- else if ( .round == .totalround )
- mapannounce .eventmap$, "The final Round will begin in "+ .delay +" seconds...", bc_map;
- else
- mapannounce .eventmap$, "Starting round "+ .round +" in "+ .delay +" seconds...", bc_map;
- sleep .delay * 1000;
- if ( .mvpid[.round] == 1646 ) // pick random Bio3 MVP
- .mvpid[.round] = rand(1646,1651);
- monster .eventmap$,0,0, "--ja--", .mvpid[.round], 1, strnpcinfo(0)+"::OnMvpDead";
- mapannounce .eventmap$, getmonsterinfo( .mvpid[.round], MOB_NAME ) +" has spawned!", bc_map|bc_blue;
- end;
- OnPCLogoutEvent:
- if ( hp > 0 )
- .@less_one = 1;
- else
- end;
- OnPCDieEvent:
- if ( strcharinfo(3) != .eventmap$ || !getcharid(1) ) end;
- if ( getcharid(1) != .party_id ) end;
- getpartymember .party_id, 1;
- getpartymember .party_id, 2;
- for ( .@i = 0; .@i < $@partymembercount; .@i++ ) {
- if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) {
- attachrid $@partymemberaid[.@i];
- if ( strcharinfo(3) == .eventmap$ && hp > 0 )
- .@alive++;
- }
- }
- if ( .@less_one )
- .@alive--;
- if ( !.@alive ) {
- mapannounce .eventmap$, "Party wiped!", bc_map;
- sleep 10000;
- awake strnpcinfo(0);
- }
- end;
- OnInit:
- // Configurations -----------------------------------------------------
- // Time limit (in minutes)
- // When time runs out, all players inside the room will be kicked out.
- // Do NOT set this to zero!
- set .timeout, 60;
- // entrance fee (in Zeny)
- set .register_cost, 100000;
- // exact amount of party members needed to start the game
- set .register_min, 2;
- // id of each mvp. you can add more
- setarray .mvpid[1],
- 1086,// Golden Thief Bug 64
- 1115,// Eddga 65
- 1150,// Moonlight Flower 67
- 1159,// Phreeoni 69
- 1112,// Drake 70
- 1583,// Tao Gunka 70
- 1492,// Incantation Samurai 71
- 1046,// Doppelgangger 72
- 1252,// Garm 73
- 1418,// Evil Snake Lord 73
- 1059,// Mistress 74
- 1190,// Orc Lord 74
- 1087,// Orc Hero 77
- 1251,// Knight of Windstorm 77
- 1038,// Osiris 78
- 1658,// Ygnizem 79
- 1272,// Dark Lord 80
- 1871,// Fallen Bishop 80
- 1039,// Baphomet 81
- 1147,// Maya 81
- 1785,// Atroce 82
- 1389,// Dracula 85
- 1630,// Bacsojin 85
- 1885,// Gorynych 85
- 1623,// RSX 0806 86
- 1511,// Amon Ra 88
- 1688,// Lady Tanee 89
- 1768,// Gloom Under Night 89
- 1719,// Datale 90
- 1734,// Kiel D-01 90
- 1157,// Pharaoh 93
- 1373,// Lord of Death 94
- 1312,// Turtle General 97
- 1779,// Ktullanux 98
- 1874,// Beelzebub 98
- 1646,// Bio3 placeholder 99
- 1708,// Thanatos 99
- 1751,// Valkyrie Randgris 99
- 1832;// Ifrit 99
- // number of rounds (default: 39)
- set .totalround, getarraysize(.mvpid) -1;
- // item reward for completing each round
- set .round_item_id, 512;
- set .round_item_amount, 1;
- // item reward for completing the entire ladder
- set .finish_item_id, 501;
- set .finish_item_amount, 10;
- // bonus reward if ladder completed within a certain time (in minutes)
- set .bonus_time, 45; // if completed within 45 minutes, this reward is given
- set .bonus_item_id, 504;
- set .bonus_item_amount, 10;
- // time delay between rounds, in seconds (default: 3)
- set .delay, 5;
- // minimum GM level to reset the best record
- set .gmlvlreset, 99;
- // event map
- set .eventmap$, "guild_vs2-2";
- // mapflag configuration
- setarray .@mapflag,
- mf_nowarp,
- mf_nowarpto,
- mf_nosave,
- mf_nomemo,
- mf_noteleport,
- // mf_nopenalty, // disable exp loss
- mf_noreturn,
- // mf_nobranch,
- // mf_nomobloot, // disable monster drop loots,
- // mf_nomvploot, // 2 of these
- mf_partylock;
- // Config Ends --------------------------------------------------------------
- mapannounce .eventmap$, "An administrator has refreshed the server. Please re-register. We apologize for the inconvenience.", bc_map;
- getmapxy .map$, .x, .y, BL_NPC;
- mapwarp .eventmap$, .map$, .x, .y;
- killmonsterall .eventmap$;
- .@size = getarraysize( .@mapflag );
- for ( .@i = 0; .@i < .@size; .@i++ )
- setmapflag .eventmap$, .@mapflag[.@i];
- end;
- }
|