// http://herc.ws/board/topic/15913-annieruru-emp-bg/ /* db\re\instance_db.txt 34,BG_EMP,86400,86400,bat_a02,100,95 */ function script F_ShuffleNumbers { deletearray getarg(2); .@static = getarg(0); .@range = getarg(1) +1 - .@static; .@count = getarg(3, .@range); if (.@range <= 0 || .@count <= 0) return 0; if (.@count > .@range) .@count = .@range; for (.@i = 0; .@i < .@range; ++.@i) .@temparray[.@i] = .@i; for (.@i = 0; .@i < .@count; ++.@i) { .@rand = rand(.@range); set getelementofarray( getarg(2), .@i ), .@temparray[.@rand] + .@static; .@temparray[.@rand] = .@temparray[--.@range]; } return .@count; } prontera,150,185,5 script bg_emp 1_F_MARIA,{ while ( .aid[.@i] != getcharid(3) && .@i < .size ) ++.@i; if ( .@i < .size ) { mes "You already join the queue."; close; } select "join"; mes "you have to stick to this map"; close2; .aid[ .size++ ] = getcharid(3); for ( .@i = 0; .@i < .size; ++.@i ) { if ( !isloggedin( .aid[.@i] ) ) { deletearray .aid[.@i], 1; --.@i; --.size; } else { attachrid .aid[.@i]; if ( strcharinfo(3) != strnpcinfo(4) ) { deletearray .aid[.@i], 1; --.@i; --.size; } } } detachrid; if ( .size < .minplayer2start *2 ) { announce .size +" players join", bc_npc | bc_area; end; } if ( instance_create( "BG_EMP", IM_NONE ) < 0 ) { announce "Fail to create instanced battleground.", bc_all; end; } deletearray .aid; .size = 0; end; OnInit: .minplayer2start = 1; // minimum players to start (ex. if 3vs3, set to 3) .eventlasting = 20*60; // event duration before auto-reset (20 minutes * seconds) setarray .rewarditem[0], // rewards for the winning team: ,,... 501, 10; end; } bat_a02,0,0,0 script bg_emp#ins -1,{ OnInstanceInit: 'main$ = "bg_emp"; 'map$ = strnpcinfo(4); 'red = bg_create( 'map$, 157,347, instance_npcname( strnpcinfo(0) )+"::OnRedQuit", instance_npcname( strnpcinfo(0) )+"::OnRedDead" ); 'blue = bg_create( 'map$, 142,51, instance_npcname( strnpcinfo(0) )+"::OnBlueQuit", instance_npcname( strnpcinfo(0) )+"::OnBlueDead" ); callfunc "F_ShuffleNumbers", 0, getvariableofnpc( .minplayer2start, 'main$ ) *2 -1, .@r; for ( .@i = 0; .@i < getvariableofnpc( .size, 'main$ ); ++.@i ) { attachrid getvariableofnpc( getd( ".aid["+ .@r[.@i] +"]" ), 'main$ ); bg_join ( .@i % 2 )? 'red : 'blue; } detachrid; bg_warp 'red, 'map$, 171,346; bg_warp 'blue, 'map$, 162,50; setwall 'map$, 164,347, 6, 4, 0, "bg_emp_red"+ 'red; setwall 'map$, 154,51, 6, 4, 0, "bg_emp_blue"+ 'blue; sleep 6000; instance_announce 0, "The rules are simple. The first team to break the opponent's Emperium wins!", bc_map; sleep 3000; for ( .@i = 5; .@i > 0; --.@i ) { instance_announce 0, "["+ .@i +"]", bc_map; sleep 1000; } instance_announce 0, "Start!", bc_map; bg_monster 'red, 'map$, 171,346, "--ja--",1915, instance_npcname( strnpcinfo(0) )+"::OnRedDown"; bg_monster 'blue, 'map$, 162,50, "--ja--",1914, instance_npcname( strnpcinfo(0) )+"::OnBlueDown"; delwall "bg_emp_red"+ 'red; delwall "bg_emp_blue"+ 'blue; sleep getvariableofnpc( .eventlasting, 'main$ ) * 1000; killmonster 'map$, instance_npcname( strnpcinfo(0) )+"::OnRedDown"; killmonster 'map$, instance_npcname( strnpcinfo(0) )+"::OnBlueDown"; if ( 'winside ) { instance_announce 0, "- "+( ('winside == 'red)? "Red" : "Blue" )+" Team is victorious! -", bc_map; bg_get_data 'winside, 1; for ( .@i = 0; .@i < $@arenamemberscount; ++.@i ) getitem getvariableofnpc( .rewarditem[0], 'main$ ), getvariableofnpc( .rewarditem[1], 'main$ ), $@arenamembers[.@i]; } else instance_announce 0, "- The match has ended in a draw! -", bc_map; sleep 5000; bg_warp 'red, "prontera", 155,182; bg_warp 'blue, "prontera", 158,182; bg_destroy 'red; bg_destroy 'blue; instance_destroy; end; OnRedDown: callsub L_EmpDown, "Red", 'blue; OnBlueDown: callsub L_EmpDown, "Blue", 'red; L_EmpDown: instance_announce 0, strcharinfo(0) +" has destroyed "+ getarg(0) +" Team's Emperium.", bc_map; 'winside = getarg(1); awake instance_npcname( strnpcinfo(0) ); end; OnRedDead: OnBlueDead: sleep2 1250; percentheal 100,100; end; OnRedQuit: callsub L_Quit, 'red, "Red", 'blue; OnBlueQuit: callsub L_Quit, 'blue, "Blue", 'red; L_Quit: bg_leave; percentheal 100, 100; if ( !bg_get_data( getarg(0), 0 ) ) { instance_announce 0, "All "+ getarg(1) +" team members have quit!", bc_map, 0xff3333; 'winside = getarg(2); awake instance_npcname( strnpcinfo(0) ); } end; } bat_a02 mapflag battleground bat_a02 mapflag nosave SavePoint bat_a02 mapflag nowarp bat_a02 mapflag nowarpto bat_a02 mapflag noteleport bat_a02 mapflag nomemo bat_a02 mapflag nopenalty bat_a02 mapflag nobranch bat_a02 mapflag noicewall