/*
},{
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