function script shuffle__ { .@static = getarg(0); .@range = getarg(1) +1 - .@static; .@count = getarg(3, 0); if ( .@range <= 0 ) return 0; if ( !.@count || .@count > .@range ) .@count = .@range; while ( .@i < .@count ) { .@r = .@save = rand( .@i, .@range -1 ) ; if ( !.@tmp1[.@i] ) { .@r = .@tmp1[.@r] ? .@tmp2[.@r] : .@r; .@tmp2[.@i] = .@r; .@tmp2[.@save] = .@i; .@tmp1[.@save] = 1; set getelementofarray( getarg(2), .@i ), .@r + .@static; if ( .@save < .@count ) set getelementofarray( getarg(2), .@save ), .@i + .@static; } .@i++; } return .@count; } - script bg_pvp -1,{ end; OnInit: .eventlasting = 3; // duration in minutes setarray .rewardwin, 501,10, 502,5, 503,3; // reward to winning team setarray .rewardlose, 501,5, 502,3, 503,1; // reward to losing team setarray .rewarddraw, 501,3, 502,1; // reward to both teams when draw .rewardwinsize = getarraysize( .rewardwin ); .rewardlosesize = getarraysize( .rewardlose ); .rewarddrawsize = getarraysize( .rewarddraw ); end; OnStart: // Note: the server pushed these variables for ( .@i = 0; .@i < $@bg_member_size; .@i++ ) { switch ( $@bg_member_type[.@i] ) { case 0: announce rid2name( $@bg_member[.@i] ) +" SOLO", bc_all; break; case 1: announce rid2name( $@bg_member[.@i] ) +" from GUILD ["+ getguildname( $@bg_member_group[.@i] ) +"]", bc_all; break; case 2: announce rid2name( $@bg_member[.@i] ) +" from PARTY ["+ getpartyname( $@bg_member_group[.@i] ) +"]", bc_all; break; } } // that's all I need for the battleground script to work, no need to use their 12 script commands if ( ( .@ins = instance_create( "Battleground", 0, IOT_NONE ) ) < 0 ) { announce "failed", bc_all; end; } if ( instance_attachmap( "guild_vs3", .@ins, 1, .@ins +"BG" ) == "" ) { announce "failed", bc_all; end; } instance_set_timeout .eventlasting * 60 + 60, 0, .@ins; instance_init .@ins; instance_attach .@ins; 'mapname$ = .@ins +"BG"; 'red = createbgid( "guild_vs3", 48,50, instance_npcname( "battleground_ins" )+"::OnRedQuit", instance_npcname( "battleground_ins" )+"::OnRedDead" ); 'blue = createbgid( "guild_vs3", 52,50, instance_npcname( "battleground_ins" )+"::OnBlueQuit", instance_npcname( "battleground_ins" )+"::OnBlueDead" ); 'teamname$['red] = "Red"; 'teamname$['blue] = "Blue"; callfunc "shuffle__", 0, $@bg_member_size -1, .@r; .@modulus = rand(2); for ( .@i = 0; .@i < $@bg_member_size; .@i++ ) setbgid ( .@i % 2 == .@modulus )? 'red : 'blue, $@bg_member[ .@r[.@i] ]; 'score['red] = bg_get_data( 'red, 0 ); 'score['blue] = bg_get_data( 'blue, 0 ); bg_updatescore 'mapname$, 'score['red], 'score['blue]; bg_match_over "KVM (Level 80 and up)"; bg_warp 'red, 'mapname$, 48,50; bg_warp 'blue, 'mapname$, 52,50; end; } guild_vs3,0,0,0 script battleground_ins -1,{ OnInstanceInit: sleep getvariableofnpc( .eventlasting, "bg_pvp" ) * 60000; if ( 'score['red] > 'score['blue] ) { mapannounce 'mapname$, "- Red Team is victorious! -", bc_map; callsub L_reward, 'red, getvariableofnpc( .rewardwin, "bg_pvp" ), getvariableofnpc( .rewardwinsize, "bg_pvp" ); callsub L_reward, 'blue, getvariableofnpc( .rewardlose, "bg_pvp" ), getvariableofnpc( .rewardlosesize, "bg_pvp" ); } else if ( 'score['red] < 'score['blue] ) { mapannounce 'mapname$, "- Blue Team is victorious! -", bc_map; callsub L_reward, 'blue, getvariableofnpc( .rewardwin, "bg_pvp" ), getvariableofnpc( .rewardwinsize, "bg_pvp" ); callsub L_reward, 'red, getvariableofnpc( .rewardlose, "bg_pvp" ), getvariableofnpc( .rewardlosesize, "bg_pvp" ); } else { // same score mapannounce 'mapname$, "- The match has ended in a draw! -", bc_map; callsub L_reward, 'red, getvariableofnpc( .rewarddraw, "bg_pvp" ), getvariableofnpc( .rewarddrawsize, "bg_pvp" ); callsub L_reward, 'blue, getvariableofnpc( .rewarddraw, "bg_pvp" ), getvariableofnpc( .rewarddrawsize, "bg_pvp" ); } sleep 5000; // bg_match_over "KVM (Level 80 and up)"; mapwarp .@ins +"BG", "prontera",152,178; bg_destroy 'red; bg_destroy 'blue; instance_destroy; end; L_reward: getbgusers getarg(0); for ( .@i = 0; .@i < $@arenamembersnum; .@i++ ) for ( .@j = 0; .@j < getarg(2); .@j += 2 ) getitem getelementofarray( getarg(1), .@j ), getelementofarray( getarg(1), .@j +1 ), $@arenamembers[.@i]; return; OnRedDead: callsub L_Dead, 'red; OnBlueDead: callsub L_Dead, 'blue; L_Dead: warp "Save", 0,0; 'score[ getarg(0) ]--; bg_updatescore 'mapname$, 'score['red], 'score['blue]; if ( !'score[ getarg(0) ] ) awake instance_npcname( strnpcinfo(0) ); bg_leave; sleep2 1250; percentheal 100,100; end; OnRedQuit: callsub L_Quit, 'red; OnBlueQuit: callsub L_Quit, 'blue; L_Quit: 'score[ getarg(0) ]--; bg_updatescore 'mapname$, 'score['red], 'score['blue]; if ( !'score[ getarg(0) ] ) awake instance_npcname( strnpcinfo(0) ); percentheal 100, 100; end; } guild_vs3 mapflag battleground 2 guild_vs3 mapflag nosave SavePoint guild_vs3 mapflag nowarp guild_vs3 mapflag nowarpto guild_vs3 mapflag noreturn guild_vs3 mapflag nomemo guild_vs3 mapflag noteleport guild_vs3 mapflag nopenalty guild_vs3 mapflag nobranch guild_vs3 mapflag noicewall guild_vs3 mapflag src4instance