- 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