viewing paste topic/4624- instanced_battleground_ | 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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
function        script  shuffle__       {
        .@static = getarg(0);
        .@range = getarg(1) +1 - .@static;
        .@count = getarg(3, 0);
        if ( .@range <= 0 )
                return 0;
        if ( !.@count || .@count > .@range )
                .@count = .@range;
        while ( .@i < .@count ) {
                .@r = .@save = rand( .@i, .@range -1 ) ;
                if ( !.@tmp1[.@i] ) {
                        .@r = .@tmp1[.@r] ? .@tmp2[.@r] : .@r;
                        .@tmp2[.@i] = .@r;
                        .@tmp2[.@save] = .@i;
                        .@tmp1[.@save] = 1;
                        set getelementofarray( getarg(2), .@i ), .@r + .@static;
                        if ( .@save < .@count )
                                set getelementofarray( getarg(2), .@save ), .@i + .@static;
                }
                .@i++;
        }
        return .@count;
}
 
-       script  bg_pvp  -1,{
        end;
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", bc_all; break;
                case 1: announce rid2name( $@bg_member[.@i] ) +" from GUILD ["+ getguildname( $@bg_member_group[.@i] ) +"]", bc_all; break;
                case 2: announce rid2name( $@bg_member[.@i] ) +" from PARTY ["+ getpartyname( $@bg_member_group[.@i] ) +"]", bc_all; break;
                }
        }
//      that's all I need for the battleground script to work, no need to use their 12 script commands
        if ( ( .@ins = instance_create( "Battleground", 0, IOT_NONE ) ) < 0 ) {
                announce "failed", bc_all;
                end;
        }
        if ( instance_attachmap( "guild_vs3", .@ins, 1, .@ins +"BG" ) == "" ) {
                announce "failed", bc_all;
                end;
        }
        instance_set_timeout .eventlasting * 60 + 60, 0, .@ins;
        instance_init .@ins;
        instance_attach .@ins;
        'mapname$ = .@ins +"BG";
        'red = createbgid( "guild_vs3", 48,50, instance_npcname( "battleground_ins" )+"::OnRedQuit", instance_npcname( "battleground_ins" )+"::OnRedDead" );
        'blue = createbgid( "guild_vs3", 52,50, instance_npcname( "battleground_ins" )+"::OnBlueQuit", instance_npcname( "battleground_ins" )+"::OnBlueDead" );
        'teamname$['red] = "Red";
        'teamname$['blue] = "Blue";
        callfunc "shuffle__", 0, $@bg_member_size -1, .@r;
        .@modulus = rand(2);
        for ( .@i = 0; .@i < $@bg_member_size; .@i++ )
                setbgid ( .@i % 2 == .@modulus )? 'red : 'blue, $@bg_member[ .@r[.@i] ];
        'score['red] = bg_get_data( 'red, 0 );
        'score['blue] = bg_get_data( 'blue, 0 );
        bg_updatescore 'mapname$, 'score['red], 'score['blue];
        bg_match_over "KVM (Level 80 and up)";
        bg_warp 'red, 'mapname$, 48,50;
        bg_warp 'blue, 'mapname$, 52,50;
        end;
}
 
guild_vs3,0,0,0 script  battleground_ins        -1,{
OnInstanceInit:
        sleep getvariableofnpc( .eventlasting, "bg_pvp" ) * 60000;
        if ( 'score['red] > 'score['blue] ) {
                mapannounce 'mapname$, "- Red Team is victorious! -", bc_map;
                callsub L_reward, 'red, getvariableofnpc( .rewardwin, "bg_pvp" ),  getvariableofnpc( .rewardwinsize, "bg_pvp" );
                callsub L_reward, 'blue, getvariableofnpc( .rewardlose, "bg_pvp" ),  getvariableofnpc( .rewardlosesize, "bg_pvp" );
        }
        else if ( 'score['red] < 'score['blue] ) {
                mapannounce 'mapname$, "- Blue Team is victorious! -", bc_map;
                callsub L_reward, 'blue, getvariableofnpc( .rewardwin, "bg_pvp" ),  getvariableofnpc( .rewardwinsize, "bg_pvp" );
                callsub L_reward, 'red, getvariableofnpc( .rewardlose, "bg_pvp" ),  getvariableofnpc( .rewardlosesize, "bg_pvp" );
        }
        else { // same score
                mapannounce 'mapname$, "- The match has ended in a draw! -", bc_map;
                callsub L_reward, 'red, getvariableofnpc( .rewarddraw, "bg_pvp" ),  getvariableofnpc( .rewarddrawsize, "bg_pvp" );
                callsub L_reward, 'blue, getvariableofnpc( .rewarddraw, "bg_pvp" ),  getvariableofnpc( .rewarddrawsize, "bg_pvp" );
        }
        sleep 5000;
//      bg_match_over "KVM (Level 80 and up)";
        mapwarp .@ins +"BG", "prontera",152,178;
        bg_destroy 'red;
        bg_destroy 'blue;
        instance_destroy;
        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;
OnRedDead:  callsub L_Dead, 'red;
OnBlueDead: callsub L_Dead, 'blue;
L_Dead:
        warp "Save", 0,0;
        'score[ getarg(0) ]--;
        bg_updatescore 'mapname$, 'score['red], 'score['blue];
        if ( !'score[ getarg(0) ] )
                awake instance_npcname( strnpcinfo(0) );
        bg_leave;
        sleep2 1250;
        percentheal 100,100;
        end;
OnRedQuit:  callsub L_Quit, 'red;
OnBlueQuit: callsub L_Quit, 'blue;
L_Quit:
        'score[ getarg(0) ]--;
        bg_updatescore 'mapname$, 'score['red], 'score['blue];
        if ( !'score[ getarg(0) ] )
                awake instance_npcname( 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 noreturn
guild_vs3       mapflag nomemo
guild_vs3       mapflag noteleport
guild_vs3       mapflag nopenalty
guild_vs3       mapflag nobranch
guild_vs3       mapflag noicewall
guild_vs3       mapflag src4instance
Viewed 863 times, submitted by AnnieRuru.