viewing paste topic/7209- bg_pvp_sign_map_0.2 | Athena

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
-   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
 
    setarray .map$, "guild_vs1", "guild_vs2", "guild_vs3";
 
    .rewardwinsize = getarraysize( .rewardwin );
    .rewardlosesize = getarraysize( .rewardlose );
    .totalmap = getarraysize( .map$ );
    bindatcmd "joinbg", strnpcinfo(0)+"::OnJoin";
    bindatcmd "leavebg", strnpcinfo(0)+"::OnLeave";
 
    for ( .@i = 0; .@i < .totalmap; .@i++ ) {
        setmapflag .map$[.@i], mf_battleground, 2;
        setmapflag .map$[.@i], mf_nosave;
        setmapflag .map$[.@i], mf_nowarp;
        setmapflag .map$[.@i], mf_nowarpto;
        setmapflag .map$[.@i], mf_noreturn;
        setmapflag .map$[.@i], mf_noteleport;
        setmapflag .map$[.@i], mf_nomemo;
        setmapflag .map$[.@i], mf_noexppenalty;
        setmapflag .map$[.@i], mf_nobranch;
        setmapflag .map$[.@i], mf_noicewall;
    }
    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$ = .map$[ rand(3) ];
    .red = createbgid( .@map$, 20,50, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead" );
    .blue = createbgid( .@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, .@map$, 20,50;
    bg_warp .blue, .@map$, 80,50;
    .score[1] = .score[2] = .startingscore;
    bg_updatescore .@map$, .score[1], .score[2];
    sleep .eventlasting * 1000;
    if ( .start == 1 ) {
        if ( .score[1] > .score[2] ) {
            mapannounce .@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 .@map$, " Blue side wins !", bc_all;
            callsub L_reward, .blue, .rewardwin, .rewardwinsize;
            callsub L_reward, .red, .rewardlose, .rewardlosesize;
        }
        else {
            mapannounce .@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 = 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 strcharinfo(3), .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 strcharinfo(3), "All "+ .teamname$[ getarg(0) ] +" team members has Quit !", bc_all, 0xFF3333;
    .score[ getarg(0) ] = 0;
    awake strnpcinfo(0);
    end;
}
Viewed 1583 times, submitted by AnnieRuru.