Hi all. I have this script. But this script seem bug. It not reset the party when no one left in the room or after player dead. Please help me.
//===== 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 1_M_KNIGHTMASTER,{// if ((agitcheck() == 1) || (agitcheck2() == 1)){ // mes .npc$; // mes "I'm sorry, during ^0000FFWar of Emperium^000000, You are not Allowed to use my services."; // close; // } 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 ( getpartyleader( getcharid(1), 2 ) != getcharid(0) ) { 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: .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, 40; // entrance fee (in Zeny) set .register_cost, 10000000; // exact amount of party members needed to start the game set .register_min, 1; // 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, 30002; set .round_item_amount, 1; // item reward for completing the entire ladder set .finish_item_id, 30001; set .finish_item_amount, 5; // bonus reward if ladder completed within a certain time (in minutes) set .bonus_time, 30; // if completed within 45 minutes, this reward is given set .bonus_item_id, 30002; set .bonus_item_amount, 30; // time delay between rounds, in seconds (default: 3) set .delay, 10; // 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, 1; mapwarp .eventmap$, .map$, .x, .y; killmonsterall .eventmap$; .@size = getarraysize( .@mapflag ); for ( .@i = 0; .@i < .@size; .@i++ ) setmapflag .eventmap$, .@mapflag[.@i];waitingroom " Ladder Game",0; end;}function script F_GetPlural { set .@str$, getarg(0); if (countstr(.@str$," ")) { // multiple words explode(.@tmp$,.@str$," "); set .@size, getarraysize(.@tmp$); // if format is "... of|in|on ...", pluralize preceding word; else pluralize last word if (compare(.@str$," of ") || compare(.@str$," in ") || compare(.@str$," on ")) { for (set .@i,1; .@i<.@size; set .@i,.@i+1) { if (getstrlen(.@tmp$[.@i]) == 2 && compare("of|in|on",.@tmp$[.@i])) break; set .@index, .@index + 1; } } else set .@index, .@size - 1; set .@str$, .@tmp$[.@index]; set .@tmp$[.@index],"%s"; set .@format$, implode(.@tmp$," "); } else set .@format$, "%s"; set .@strlen, getstrlen(.@str$); if (.@strlen < 3) // prevent errors return ((getarg(1,0)) ? strtoupper(sprintf(.@format$,.@str$)) : sprintf(.@format$,.@str$)); setarray .@suffix$[0], charat(.@str$,.@strlen - 1), substr(.@str$,.@strlen - 2,.@strlen - 1); if (!compare("abcdefghijklmnopqrstuvwxyz",.@suffix$[0])) { // last character is not a letter set .@result$, .@str$; } // common exceptions --> singular form == plural form else if (compare("fish|glasses|sunglasses|clothes|boots|shoes|greaves|sandals|wings|ears",.@str$)) { set .@result$, .@str$; } // ends in -s, -x, -z, -ch, -sh --> add -es else if (.@suffix$[0] == "s" || .@suffix$[0] == "x" || .@suffix$[0] == "z" || .@suffix$[1] == "ch" || .@suffix$[1] == "sh") { set .@result$, .@str$ + "es"; } // ends in -f, -fe --> remove -f, -fe --> add -ves else if ((.@suffix$[0] == "f" || .@suffix$[1] == "fe") && .@suffix$[1] != "ff") { if (compare("belief|cliff|chief|dwarf|grief|gulf|proof|roof",.@str$)) set .@result$, .@str$ + "s"; // exceptions --> add -s else set .@result$, substr(.@str$,0,.@strlen - 2 - (.@suffix$[1] == "fe")) + "ves"; } // ends in consonant + -y --> remove -y --> add -ies else if (.@suffix$[0] == "y" && !compare("aeiou",charat(.@suffix$[1],0))) { set .@result$, delchar(.@str$,.@strlen - 1) + "ies"; } // ends in -o --> exceptions --> add -es else if (.@suffix$[0] == "o" && compare("buffalo|domino|echo|grotto|halo|hero|mango|mosquito|potato|tomato|tornado|torpedo|veto|volcano",.@str$)) { set .@result$, .@str$ + "es"; } // default --> add -s else { set .@result$, .@str$ + "s"; } return ((getarg(1,0)) ? strtoupper(sprintf(.@format$,.@result$)) : sprintf(.@format$,.@result$));}function script F_InsertPlural { return sprintf(getarg(3,"%d %s"), getarg(0), ((getarg(0) == 1) ? getarg(1) : callfunc("F_GetPlural",getarg(1),getarg(2,0))));}function script F_InsertComma { set .@str$, getarg(0); for (set .@i,getstrlen(.@str$)-3; .@i>0; set .@i,.@i-3) set .@str$, insertchar(.@str$,",",.@i); return .@str$;}
Hi all. I have this script. But this script seem bug. It not reset the party when no one left in the room or after player dead. Please help me.
Share this post
Link to post
Share on other sites