viewing paste topic/4603- bg_pvp_queue | Athena

Posted on the | Last edited on
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
/*
    },{
        name: "KVM (Level 80 and up)" //must match the name in client files
        event: "bg_pvp::OnStart"
        minLevel: 1
        maxLevel: 150
        reward: { // useless ! should be done by npc scripting
            win: 0
            loss: 0
            draw: 0
        }
        minPlayers: 2 // minimum amount of players to start
        maxPlayers: 30 // maximum amount of players. NOTE: I wonder why they set to 60 when MAX_BG_MEMBERS is only 30 <_<
        minTeamPlayers: 999 // can I off this ? this one is bugged
        delay_var: "BG_PVP_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_pvp  -1,{
OnInit:
    // port over some variables from battleground.conf ... that's why this should be configure by scripting
    .maxDuration = 100; /* maximum duration in minutes ... seriously ... this should be done through NPC scripting */
    setarray .rewarditem[0],   // rewards for the winning team:
        501, 10; // <item>,<amount>
    end;
OnStart:
//  Note: the server pushed these variables
//  for ( .@i = 0; .@i < $@bg_member_size; .@i++ )
//      announce rid2name( $@bg_member[.@i] ) +" "+ $@bg_member_group[.@i] +" "+ $@bg_member_type[.@i], 0;
//  that's all I need for the battleground script to work, no need to use their 12 script commands
    .red = createbgid( "guild_vs3", 48,50, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead" );
    .blue = createbgid( "guild_vs3", 52,50, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead" );
    callfunc "rand__", $@bg_member_size, $@rand;
    for ( .@i = 0; .@i < $@bg_member_size; .@i++ )
        setbgid ( .@i % 2 )? .red : .blue, $@bg_member[ $@rand[.@i] ];
    bg_warp .red, "guild_vs3", 48,50;
    bg_warp .blue, "guild_vs3", 52,50;
    .score[1] = bg_get_data( .red, 0 );
    .score[2] = bg_get_data( .blue, 0 );
    bg_updatescore "guild_vs3", .score[1], .score[2];
    sleep .maxDuration * 60000;
    if ( .score[1] > .score[2] ) {
        mapannounce "guild_vs3", "- Red Team is victorious! -", bc_map;
        callsub L_Reward, .red;
    }
    else if ( .score[1] < .score[2] ) {
        mapannounce "guild_vs3", "- Blue Team is victorious! -", bc_map;
        callsub L_Reward, .blue;
    }
    else
        mapannounce "guild_vs3", "- The match has ended in a draw! -", bc_map;
    mapwarp "guild_vs3","prontera",152,178;
    bg_destroy .red;
    bg_destroy .blue;
    sleep 1;
    bg_match_over "KVM (Level 80 and up)"; // still need a sleep ...
    end;
L_Reward:
    getbgusers getarg(0);
    for ( .@i = 0; .@i < $@arenamembersnum; .@i++ )
        getitem .rewarditem[0], .rewarditem[1], $@arenamembers[.@i]; // yeah .. I off that and use script commands here
    return;
OnRedDead:  callsub L_Dead, 1;
OnBlueDead: callsub L_Dead, 2;
L_Dead:
    warp "Save", 0,0;
    .score[ getarg(0) ]--;
    bg_updatescore "guild_vs3", .score[1], .score[2];
    if ( !.score[ getarg(0) ] )
        awake strnpcinfo(0);
    sleep2 1250;
    percentheal 100,100;
    bg_leave;
    end;
OnRedQuit:  callsub L_Quit, 1;
OnBlueQuit: callsub L_Quit, 2;
L_Quit:
    .score[ getarg(0) ]--;
    bg_updatescore "guild_vs3", .score[1], .score[2];
    if ( !.score[ getarg(0) ] )
        awake 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 noteleport
guild_vs3   mapflag nomemo
guild_vs3   mapflag nopenalty
guild_vs3   mapflag nobranch
guild_vs3   mapflag noicewall
Viewed 1413 times, submitted by AnnieRuru.