- script bg_emp#control -1,{ OnInit: setarray .rewarditem, 31003, 1; // reward to the winning team set .winningscore, 3; // final score to win set .eventlasting, 30 * 60; // abort the system if there's no progress, 20 mins * seconds set .register_lasting, 10 * 60; // 10 minutes to joins, else abort registration, 10 mins * seconds set $requiredBGLevel, 150; // required level to enter set $requiredBGZeny, 0; set $requiredBGPlayer, 4; sleep 1; end; onstart: if ( getwaitingroomstate( 0, .rednpcname$ ) < $requiredBGPlayer || getwaitingroomstate( 0, .bluenpcname$ ) < $requiredBGPlayer ) end; set .red, waitingroom2bg( "bat_c01", 53,128, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ ); copyarray .team1aid, $@arenamembers, $@arenamembersnum; set .blue, waitingroom2bg( "bat_c01", 146,55, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ ); copyarray .team2aid, $@arenamembers, $@arenamembersnum; delwaitingroom .rednpcname$; delwaitingroom .bluenpcname$; disablenpc .rednpcname$; disablenpc .bluenpcname$; .inprogress = 2; awake strnpcinfo(0); bg_warp .red, "bat_c01", 53,128; bg_warp .blue, "bat_c01", 146,55; setwall "bat_c01", 145,61, 6, 2, 0, "bg_emp_town_blue1"; setwall "bat_c01", 140,56, 6, 0, 0, "bg_emp_town_blue2"; setwall "bat_c01", 59,127, 6, 4, 0, "bg_emp_town_red1"; setwall "bat_c01", 54,122, 6, 6, 0, "bg_emp_town_red2"; bg_updatescore "bat_c01", 0, 0; sleep 6000; if ( .inprogress == 0 ) goto L_Abort; mapannounce "bat_c01", "Rules are simple. The first one to break the opponent's emperium will get a score.", 0; sleep 3000; if ( .inprogress == 0 ) goto L_Abort; mapannounce "bat_c01", "Score "+ .winningscore +" rounds to win ! ... GET READY", 0; sleep 2000; if ( .inprogress == 0 ) goto L_Abort; while (1) { for ( .@i = 5; .@i > 0; .@i-- ) { mapannounce "bat_c01", .@i +"", 0; sleep 1000; if ( .inprogress == 0 ) goto L_Abort; } if ( .score[1] == .winningscore -1 && .score[2] == .winningscore -1 ) mapannounce "bat_c01", "Final Round start!", 0; else mapannounce "bat_c01", "Round "+ .round++ +" start!", 0; bg_monster .red,"bat_c01",53,128, "--ja--",1915, strnpcinfo(3)+"::OnRedDown"; bg_monster .blue,"bat_c01",146,55, "--ja--",1914, strnpcinfo(3)+"::OnBlueDown"; delwall "bg_emp_town_red1"; delwall "bg_emp_town_red2"; delwall "bg_emp_town_blue1"; delwall "bg_emp_town_blue2"; sleep .eventlasting * 1000; if ( .inprogress == 0 ) goto L_Abort; .score[ .winside ]++; bg_updatescore "bat_c01", .score[1], .score[2]; killmonster "bat_c01", strnpcinfo(3)+"::OnRedDown"; killmonster "bat_c01", strnpcinfo(3)+"::OnBlueDown"; if ( .winside ) mapannounce "bat_c01", .empkiller$ +" has Destroy "+( ( .winside == 1 )?"Blue":"Red" )+"'s side Emperium. "+( ( .winside == 1 )?"Red":"Blue" )+" team score a point !", 0; if ( .score[1] == .winningscore || .score[2] == .winningscore || !.winside ) break; sleep 5000; if ( .inprogress == 0 ) goto L_Abort; bg_warp .red, "bat_c01", 53,128; bg_warp .blue, "bat_c01", 146,55; setwall "bat_c01", 143,61, 6, 2, 0, "bg_emp_town_blue1"; setwall "bat_c01", 140,58, 6, 0, 0, "bg_emp_town_blue2"; setwall "bat_c01", 59,125, 6, 0, 0, "bg_emp_town_red1"; setwall "bat_c01", 57,122, 6, 2, 0, "bg_emp_town_red2"; .winside = 0; } if ( .winside ) { mapannounce "bat_c01", ( ( .winside == 1 )?"Red":"Blue" )+" side wins !", 0; .@size = getarraysize( getd(".team"+ .winside +"aid") ); for ( .@i = 0; .@i < .@size; .@i++ ) getitem .rewarditem[0], .rewarditem[1], getd(".team"+ .winside +"aid["+ .@i +"]" ); } else mapannounce "bat_c01", "Time Out. Aborting the match.", 0; sleep 5000; L_Abort: bg_warp .red, "heiron", 100,37; bg_warp .blue, "heiron", 100,37; bg_destroy .red; bg_destroy .blue; delwall "bg_emp_town_red1"; delwall "bg_emp_town_red2"; delwall "bg_emp_town_blue1"; delwall "bg_emp_town_blue2"; deletearray .team1aid; deletearray .team2aid; .round = .winside = .score[2] = .score[1] = .inprogress = 0; enablenpc .rednpcname$; enablenpc .bluenpcname$; end; OnRedDown: callsub L_EmpDown, 2; OnBlueDown: callsub L_EmpDown, 1; L_EmpDown: .empkiller$ = strcharinfo(0); .winside = getarg(0); awake strnpcinfo(3); OnRedDead: OnBlueDead: end; OnRedQuit: callsub L_quit, .red, "Red", "Blue", 2; OnBlueQuit: callsub L_quit, .blue, "Blue", "Red", 1; L_quit: if ( bg_get_data( getarg(0), 0 ) ) end; mapannounce "bat_c01", "All "+ getarg(1) +" team members has Quit ! "+ getarg(2) +" side wins !", 0; .@size = getarraysize( getd(".team"+ getarg(3) +"aid") ); for ( .@i = 0; .@i < .@size; .@i++ ) getitem .rewarditem[0], .rewarditem[1], getd(".team"+ getarg(3) +"aid["+ .@i +"]" ); goto L_Abort; OnAutoAbort: sleep .register_lasting * 1000; delwaitingroom .rednpcname$; delwaitingroom .bluenpcname$; disablenpc .rednpcname$; disablenpc .bluenpcname$; if ( .inprogress == 1 ) { .inprogress = 0; announce "battleground has self-aborted because not enough members", 0; } end; } - script bg_star -1,{ OnInit: bindatcmd("bgemp", "bg_start::OnAtcommand", 90, 90); donpcevent getvariableofnpc( .rednpcname$, "bg_emp#control" ) +"::onstart"; donpcevent getvariableofnpc( .bluenpcname$, "bg_emp#control" ) +"::onstart"; set getvariableofnpc( .inprogress, "bg_emp#control" ), 1; //donpcevent "bg_emp#control::OnAutoAbort"; end; OnAtcommand: if ( getgmlevel() < 99 ) { mes "I only talk to gm"; close; } if ( getvariableofnpc( .inprogress, "bg_emp#control" ) ) { mes "abort ?"; next; if ( select ( "Yes", "No" ) == 2 ) close; set getvariableofnpc( .inprogress, "bg_emp#control" ), 0; awake "bg_emp#control"; killmonster "bat_c01", "bg_emp#control::OnRedDown"; killmonster "bat_c01", "bg_emp#control::OnBlueDown"; announce strcharinfo(0) +" has abort the battleground", 0; close; } end; } prontera,151,181,4 script BG Red Side#bg_emp 100,{ end; onstart: delwaitingroom; waitingroom "BG Red Side", $requiredBGPlayer+1, "bg_emp#control::onstart", $requiredBGPlayer, $requiredBGZeny, $requiredBGLevel, $requiredBGLevel; end; OnInit: set getvariableofnpc( .rednpcname$, "bg_emp#control" ), strnpcinfo(0); end; } prontera,160,181,4 script BG Blue Side#bg_emp 100,{ end; onstart: delwaitingroom; waitingroom "BG Blue Side", $requiredBGPlayer+1, "bg_emp#control::onstart", $requiredBGPlayer, $requiredBGZeny, $requiredBGLevel, $requiredBGLevel; end; OnInit: set getvariableofnpc( .bluenpcname$, "bg_emp#control" ), strnpcinfo(0); end; } 06guild_01,50,6,0 warp toheiron 2,2,heiron,99,35 bat_c01 mapflag battleground 2 bat_c01 mapflag nosave SavePoint bat_c01 mapflag nowarp bat_c01 mapflag nowarpto bat_c01 mapflag noteleport bat_c01 mapflag nomemo bat_c01 mapflag nopenalty bat_c01 mapflag nobranch bat_c01 mapflag noicewall bat_c01 mapflag nocommand 5