/* },{ name: "KVM (Level 60~79)" //must match the name in client files event: "bg_emp::OnStart" minLevel: 1 maxLevel: 150 reward: { // useless ! should be done by npc scripting win: 0 loss: 0 draw: 0 } minPlayers: 4 // minimum amount of players to start maxPlayers: 5 // maximum amount of players. NOTE: I wonder why they set to 60 when MAX_BG_MEMBERS is only 30 <_< minTeamPlayers: 2 // try this to test delay_var: "BG_EMP_Tick" // char variable name that will store the delay for this match maxDuration: 1 // maximum duration in minutes ... this one also bugged fillDuration: 20 // time in seconds to wait for more applications when minimum has been reached pGameDuration: 20 // time to wait for players to confirm their attendence after queueing process has finished },{ */ function script rand__ { .@range = getarg(0); .@count = getarg(2, 0); if ( !.@count || .@count > .@range ) .@count = .@range; else if ( .@count > 128 ) .@count = 128; while ( .@i < .@count ) { .@r = .@save = rand( .@i, .@range -1 ) ; if ( !getd( ".@tmp1_"+ .@i ) ) { .@r = ( getd(".@tmp1_"+ .@r ) )? getd( ".@tmp2_"+ .@r ) : .@r; setd ".@tmp2_"+ .@i, .@r; setd ".@tmp2_"+ .@save , .@i; setd ".@tmp1_"+ .@save , 1; set getelementofarray( getarg(1), .@i ), .@r; if ( .@save < .@count ) set getelementofarray( getarg(1), .@save ), .@i; } .@i++; } return .@count; } - script bg_emp -1,{ 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", 0; break; case 1: announce rid2name( $@bg_member[.@i] ) +" from GUILD ["+ getguildname( $@bg_member_group[.@i] ) +"]", 0; break; case 2: announce rid2name( $@bg_member[.@i] ) +" from PARTY ["+ getpartyname( $@bg_member_group[.@i] ) +"]", 0; break; } } // that's all I need for the battleground script to work, no need to use their 12 script commands .red = createbgid( "guild_vs3", 45,50, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead" ); .blue = createbgid( "guild_vs3", 55,50, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead" ); .teamname$[.red] = "Red"; .teamname$[.blue] = "Blue"; callfunc "rand__", $@bg_member_size, $@rand; .@modulus = rand(2); for ( .@i = 0; .@i < $@bg_member_size; .@i++ ) setbgid ( .@i % 2 == .@modulus )? .red : .blue, $@bg_member[ $@rand[.@i] ]; bg_warp .red, "guild_vs3", 45,50; bg_warp .blue, "guild_vs3", 55,50; bg_monster .red,"guild_vs3",47,50, "--ja--",1915, strnpcinfo(3)+"::OnRedDown"; bg_monster .blue,"guild_vs3",52,50, "--ja--",1914, strnpcinfo(3)+"::OnBlueDown"; sleep .eventlasting * 60000; killmonsterall "guild_vs3"; if ( .winside == 1 ) { mapannounce "guild_vs3", "- Red Team is victorious! -", bc_map; callsub L_reward, .red, .rewardwin, .rewardwinsize; callsub L_reward, .blue, .rewardlose, .rewardlosesize; } else if ( .winside == 2 ) { mapannounce "guild_vs3", "- Blue Team is victorious! -", bc_map; callsub L_reward, .blue, .rewardwin, .rewardwinsize; callsub L_reward, .red, .rewardlose, .rewardlosesize; } else { mapannounce "guild_vs3", "- The match has ended in a draw! -", bc_map; callsub L_reward, .red, .rewarddraw, .rewarddrawsize; callsub L_reward, .blue, .rewarddraw, .rewarddrawsize; } sleep 5000; mapwarp "guild_vs3","prontera",152,178; bg_destroy .red; bg_destroy .blue; .winside = 0; sleep 1000; bg_match_over "KVM (Level 60~79)"; // for some reason this one has to be execute in delay ? otherwise my client crash ! 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; OnRedDown: callsub L_EmpDown, .red, 2; OnBlueDown: callsub L_EmpDown, .blue, 1; L_EmpDown: mapannounce "guild_vs3", strcharinfo(0) +" has destroyed "+ .teamname$[ getarg(0) ] +" Team's Emperium.", bc_map; .winside = getarg(1); awake strnpcinfo(0); end; OnRedDead: OnBlueDead: sleep2 1250; percentheal 100,100; end; OnRedQuit: callsub L_Quit, .red, 2; OnBlueQuit: callsub L_Quit, .blue, 1; L_Quit: percentheal 100, 100; bg_leave; if ( bg_get_data( getarg(0), 0 ) ) end; mapannounce "guild_vs3", "All "+ .teamname$[ getarg(0) ] +" team members have quit!", bc_map, 0xff3333; .winside = getarg(1); awake strnpcinfo(0); end; } guild_vs3 mapflag battleground guild_vs3 mapflag nosave SavePoint guild_vs3 mapflag nowarp guild_vs3 mapflag nowarpto guild_vs3 mapflag noteleport guild_vs3 mapflag nomemo guild_vs3 mapflag nopenalty guild_vs3 mapflag nobranch guild_vs3 mapflag noicewall