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 1705 times, submitted by
AnnieRuru.