- script sdkfksdfjsdfgdf -1,{ OnInit: .eventlasting = 30 * 60; // how long would the event last or it auto-reset. 30 *60 = 30 mins .min2start = 2; // minimum player to start .startingscore = 50; // score at start setarray .rewardwin, 501,10, 502,5, 503,3; // reward to winning team setarray .rewardlose, 501,5, 502,3, 503,1; // reward to losing team .rewardwinsize = getarraysize( .rewardwin ); .rewardlosesize = getarraysize( .rewardlose ); bindatcmd "joinbg", strnpcinfo(0)+"::OnJoin"; bindatcmd "leavebg", strnpcinfo(0)+"::OnLeave"; end; OnLeave: while ( .signup_aid[.@i] != getcharid(3) && .@i < .signup_count ) .@i++; if ( .@i == .signup_count ) { dispbottom "you not yet sign up in this event"; end; } deletearray .signup_aid[.@i], 1; .signup_count--; dispbottom "You have leave the registration of this event"; end; OnJoin: if ( getmapflag( strcharinfo(3), mf_nowarp ) || getmapflag( strcharinfo(3), mf_nowarpto ) ) { dispbottom "you can't sign up for this event from the map you are in"; end; } while ( .signup_aid[.@i] != getcharid(3) && .@i < .signup_count ) .@i++; if ( .@i < .signup_count ) { dispbottom "you have already sign up in this event"; end; } .signup_aid[ .signup_count ] = getcharid(3); .signup_count++; dispbottom "You are now signed to the BG event"; // .@i = 1; // DEBUG // .@signup_name$ = rid2name( .signup_aid[0] ); // while ( .signup_aid[.@i] ) { // .@signup_name$ = .@signup_name$ +","+ rid2name( .signup_aid[.@i] ); // .@i++; // } // dispbottom "[Debug] Currently have "+ .signup_count +" sign-in and they are "+ .@signup_name$; L_start: for ( .@i = 0; .@i < .signup_count; .@i++ ) { if ( attachrid( .signup_aid[.@i] ) ) { if ( getmapflag( strcharinfo(3), mf_nowarp ) ) { // player has went into another event deletearray .signup_aid[.@i], 1; } } else { deletearray .signup_aid[.@i], 1; .signup_count--; .@i--; } } if ( .start || .signup_count < .min2start ) { announce "Currently there are "+ .signup_count +" players registered", bc_all; end; } announce "event started", bc_all; .start = 1; .map = rand(1,3); .red = createbgid( "guild_vs"+ .map, 20,50, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead" ); .blue = createbgid( "guild_vs"+ .map, 80,50, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead" ); callfunc "shuffle__", 0, .min2start -1, .@r; .@modulus = rand(2); for ( .@i = 0; .@i < .signup_count; .@i++ ) setbgid ( .@i %2 == .@modulus )? .red : .blue, .signup_aid[ .@r[.@i] ]; deletearray .signup_aid, .min2start; .signup_count -= .min2start; bg_warp .red, "guild_vs"+ .map, 20,50; bg_warp .blue, "guild_vs"+ .map, 80,50; .score[1] = .score[2] = .startingscore; bg_updatescore "guild_vs"+ .map, .score[1], .score[2]; sleep .eventlasting * 1000; if ( .start == 1 ) { if ( .score[1] > .score[2] ) { mapannounce "guild_vs"+ .map, " Red side wins !", bc_all; callsub L_reward, .red, .rewardwin, .rewardwinsize; callsub L_reward, .blue, .rewardlose, .rewardlosesize; } else if ( .score[1] < .score[2] ) { mapannounce "guild_vs"+ .map, " Blue side wins !", bc_all; callsub L_reward, .blue, .rewardwin, .rewardwinsize; callsub L_reward, .red, .rewardlose, .rewardlosesize; } else { mapannounce "guild_vs"+ .map, "Draw !", bc_all; callsub L_reward, .red, .rewardlose, .rewardlosesize; callsub L_reward, .blue, .rewardlose, .rewardlosesize; } } bg_warp .red, "prontera", 155,182; bg_warp .blue, "prontera", 158,182; bg_destroy .red; bg_destroy .blue; .start = .map = 0; deletearray .score; goto L_start; 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, 1; OnBlueDead: callsub L_dead, 2; L_dead: .score[ getarg(0) ]--; bg_updatescore "guild_vs"+ .map, .score[1], .score[2]; if ( !.score[ getarg(0) ] ) awake strnpcinfo(0); while ( checkcell( strcharinfo(3), .@x = rand(200), .@y = rand(200), cell_chknopass ) ); bg_team_setxy getcharid(4), .@x, .@y; sleep2 1250; percentheal 100,100; if ( getmapflag( strcharinfo(3), mf_battleground ) ) warp strcharinfo(3), 0,0; end; OnRedQuit: callsub L_quit, 1, .red; OnBlueQuit: callsub L_quit, 2, .blue; L_quit: percentheal 100, 100; if ( bg_get_data( getarg(1), 0 ) ) end; mapannounce "guild_vs"+ .map, "All "+ .teamname$[ getarg(0) ] +" team members has Quit !", bc_all, 0xFF3333; .score[ getarg(0) ] = 0; awake strnpcinfo(0); end; } guild_vs1 mapflag battleground 2 guild_vs1 mapflag nosave SavePoint guild_vs1 mapflag nowarp guild_vs1 mapflag nowarpto guild_vs1 mapflag noreturn guild_vs1 mapflag noteleport guild_vs1 mapflag nomemo guild_vs1 mapflag nopenalty guild_vs1 mapflag nobranch guild_vs1 mapflag noicewall guild_vs2 mapflag battleground 2 guild_vs2 mapflag nosave SavePoint guild_vs2 mapflag nowarp guild_vs2 mapflag nowarpto guild_vs2 mapflag noreturn guild_vs2 mapflag noteleport guild_vs2 mapflag nomemo guild_vs2 mapflag nopenalty guild_vs2 mapflag nobranch guild_vs2 mapflag noicewall 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 noteleport guild_vs3 mapflag nomemo guild_vs3 mapflag nopenalty guild_vs3 mapflag nobranch guild_vs3 mapflag noicewall