- script bg_emp#control -1,{ OnInit: setarray .rewarditem, 673, 5; // reward to the winning team set .winningscore, 2; // final score to win set .eventlasting, 1200; // abort the system if there's no progress, 1200 seconds = 20 mins sleep 1; disablenpc .rednpcname$; disablenpc .bluenpcname$; end; OnTimer600000: if ( getwaitingroomstate( 0, .rednpcname$ ) < .minplayer2start || getwaitingroomstate( 0, .bluenpcname$ ) < .minplayer2start ){ kickwaitingroomall .rednpcname$; kickwaitingroomall .bluenpcname$; delwaitingroom .rednpcname$; delwaitingroom .bluenpcname$; disablenpc .rednpcname$; disablenpc .bluenpcname$; announce "Event Aborted.",0; } end; OnStart: initnpctimer; if ( getwaitingroomstate( 0, .rednpcname$ ) < .minplayer2start || getwaitingroomstate( 0, .bluenpcname$ ) < .minplayer2start ) end; stopnpctimer; set .red, waitingroom2bg( "bat_a01", 171,346, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ ); copyarray .team1aid, $@arenamembers, $@arenamembersnum; set .blue, waitingroom2bg( "bat_a01", 162,50, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ ); copyarray .team2aid, $@arenamembers, $@arenamembersnum; delwaitingroom .rednpcname$; delwaitingroom .bluenpcname$; disablenpc .rednpcname$; disablenpc .bluenpcname$; bg_warp .red, "bat_a01", 171,346; bg_warp .blue, "bat_a01", 162,50; setwall "bat_a01", 154,51, 6, 4, 0, "bg_emp_town_blue"; setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red"; bg_updatescore "bat_a01", 0, 0; sleep 6000; if ( .inprogress == 0 ) goto L_Abort; mapannounce "bat_a01", "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_a01", "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_a01", .@i +"", 0; sleep 1000; if ( .inprogress == 0 ) goto L_Abort; } if ( .score[1] == .winningscore -1 && .score[2] == .winningscore -1 ) mapannounce "bat_a01", "Final Round start!", 0; else mapannounce "bat_a01", "Round "+ .round++ +" start!", 0; bg_monster .red,"bat_a01",171,346, "--ja--",1915, strnpcinfo(3)+"::OnRedDown"; bg_monster .blue,"bat_a01",162,50, "--ja--",1914, strnpcinfo(3)+"::OnBlueDown"; delwall "bg_emp_town_red"; delwall "bg_emp_town_blue"; sleep .eventlasting * 1000; if ( .inprogress == 0 ) goto L_Abort; .score[ .winside ]++; bg_updatescore "bat_a01", .score[1], .score[2]; killmonster "bat_a01", strnpcinfo(3)+"::OnRedDown"; killmonster "bat_a01", strnpcinfo(3)+"::OnBlueDown"; if ( .winside ) mapannounce "bat_a01", .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_a01", 171,346; bg_warp .blue, "bat_a01", 162,50; setwall "bat_a01", 154,51, 6, 4, 0, "bg_emp_town_blue"; setwall "bat_a01", 164,347, 6, 4, 0, "bg_emp_town_red"; .winside = 0; } if ( .winside ) { mapannounce "bat_a01", ( ( .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_a01", "Time Out. Aborting the match.", 0; sleep 5000; L_Abort: bg_warp .red, "prontera", 155,182; bg_warp .blue, "prontera", 158,182; bg_destroy .red; bg_destroy .blue; delwall "bg_emp_town_red"; delwall "bg_emp_town_blue"; .round = .winside = .score[0] = .score[1] = .inprogress = 0; 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_RemoveUser,1; OnBlueQuit: callsub L_RemoveUser,2; L_RemoveUser: for( .@i = 0; .@i < getarraysize( getd(".team"+getarg(0)+"aid") ); .@i++ ) if( getd(".team"+getarg(0)+"aid["+.@i+"]") == getcharid(3) ){ deletearray getd(".team"+getarg(0)+"aid["+.@i+"]"),1; mapannounce "bat_a01",strcharinfo(0)+" logout",0; bg_leave; } if( !getarraysize( .team1aid ) || !getarraysize( .team2aid ) ){ mapannounce "bat_a01","All Opponent Users Logout...Aborting Event....",0; sleep 3000; goto L_Abort; } } prontera,156,186,5 script gm_start 100,{ 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; awake "bg_emp#control"; killmonster "bat_a01", strnpcinfo(3)+"::OnRedDown"; killmonster "bat_a01", strnpcinfo(3)+"::OnBlueDown"; delwaitingroom getvariableofnpc( .rednpcname$, "bg_emp#control" ); delwaitingroom getvariableofnpc( .bluenpcname$, "bg_emp#control" ); disablenpc getvariableofnpc( .rednpcname$, "bg_emp#control" ); disablenpc getvariableofnpc( .bluenpcname$, "bg_emp#control" ); announce strcharinfo(0) +" has abort the battleground", 0; close; } mes "select how many players to start"; next; input .@a; if ( .@a == 0 || .@a > 30 ) close; set getvariableofnpc( .minplayer2start, "bg_emp#control" ), .@a; announce strcharinfo(0) +" has hosted "+ .@a +"vs"+ .@a +" battleground", 0; enablenpc getvariableofnpc( .rednpcname$, "bg_emp#control" ); enablenpc getvariableofnpc( .bluenpcname$, "bg_emp#control" ); donpcevent getvariableofnpc( .rednpcname$, "bg_emp#control" ) +"::OnStart"; donpcevent getvariableofnpc( .bluenpcname$, "bg_emp#control" ) +"::OnStart"; set getvariableofnpc( .inprogress, "bg_emp#control" ), 1; close; } prontera,155,182,5 script Red side#bg_emp 100,{ bg_leave; end; OnStart: waitingroom "Red side", getvariableofnpc( .minplayer2start, "bg_emp#control" ) +1, "bg_emp#control::OnStart",1; end; OnInit: set getvariableofnpc( .rednpcname$, "bg_emp#control" ), strnpcinfo(0); end; } prontera,158,182,5 script Blue side#bg_emp 100,{ bg_leave; end; OnStart: waitingroom "Blue side", getvariableofnpc( .minplayer2start, "bg_emp#control" ) +1, "bg_emp#control::OnStart",1; end; OnInit: set getvariableofnpc( .bluenpcname$, "bg_emp#control" ), strnpcinfo(0); end; } bat_a01 mapflag battleground 2 bat_a01 mapflag nosave SavePoint bat_a01 mapflag nowarp bat_a01 mapflag nowarpto bat_a01 mapflag noteleport bat_a01 mapflag nomemo bat_a01 mapflag nopenalty bat_a01 mapflag nobranch bat_a01 mapflag noicewall