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
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;
}
 
prontera,152,178,5      script  bg_pvp  100,{
        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 );
 
        waitingroom "Battleground", 3, strnpcinfo(0)+"::OnStart", 2;
        end;
OnStart:
        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 +6, 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";
        .@tmp = waitingroom2bg( "prontera",152,178, "","" );
        bg_destroy .@tmp;
        callfunc "shuffle__", 0, $@arenamembersnum -1, .@r;
        .@modulus = rand(2);
        for ( .@i = 0; .@i < $@arenamembersnum; .@i++ )
                setbgid ( .@i % 2 == .@modulus )? 'red : 'blue, $@arenamembers[ .@r[.@i] ];
        'score['red] = bg_get_data( 'red, 0 );
        'score['blue] = bg_get_data( 'blue, 0 );
        bg_updatescore 'mapname$, 'score['red], 'score['blue];
        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 713 times, submitted by AnnieRuru.