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
|
// this file handles every events related to the fight club and calls the appropriate functions from core
009-7.gat,45,33,0|script|#trapdoor2FightClub|327,0,0
{
if(countitem(647)||countitem(725)||countitem(1178)||countitem(5131)||countitem(5132)||countitem(5133)||countitem(5134)||countitem(5135)||countitem(5136)||countitem(5137)||countitem(5138)||countitem(5139)||countitem(5140)||(getgmlevel()>=20)) goto L_Enter;
end;
L_Enter:
warp "009-7.gat",34,22; // this warp is a special thanks for contributors
end;
}
009-7.gat,33,21,0|script|#trapdoor3FightClub|327,0,0
{
warp "009-7.gat",44,32;
end;
}
009-7.gat,22,38,0|script|#FightClubUtils|127
{
end;
OnIntrusion:
if(getgmlevel() >= 60) end; // allow GMs to be in the ring
if(getcharid(3) == $@Duel_RedPlayer) end; // do not kill the red fighter
if(getcharid(3) == $@Duel_BluePlayer) end; // do not kill the blue fighter
donpcevent "Rouge#Duels::OnAnnounceIntrusion";
callfunc "fightclub_DestroyMe"; // only kill the intruder(s)
end;
OnDelayedStart:
callfunc "fightclub_StartBattle";
end;
OnDelayedNextBattle:
callfunc "fightclub_NextBattleProceed";
end;
OnBecomeKiller:
callfunc "fightclub_enter_killer";
end;
OnCommandIntrusion:
areatimer "009-7.gat", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2, 0, "#FightClubUtils::OnIntrusion"; // we can not do this directly on #handler because it already have a timer
end;
}
009-7.gat,20,45,0|script|#FightClubTimeLimit|127,0,0
{
end;
OnStartTimer:
set $@Duel_TotalTime, 0;
goto L_StartTimer;
OnStopTimer:
stopnpctimer;
end;
OnTimer1000:
set $@Duel_TotalTime, ($@Duel_TotalTime + 1);
if($@Duel_TotalTime >= $@Duel_TimeLimit) goto L_TimeOut;
goto L_StartTimer;
L_TimeOut:
stopnpctimer;
callfunc "fightclub_TimeOut";
end;
L_StartTimer:
setnpctimer 0;
initnpctimer;
end;
OnInit:
set $@Duel_TotalTime, 0;
end;
}
009-7.gat,20,44,0|script|#FightClubHandler|127,0,0
{
end;
OnInit:
// this event is called when the map server boots up
set $@fightclub_x1, 27;
set $@fightclub_y1, 42;
set $@fightclub_x2, 38;
set $@fightclub_y2, 48;
callfunc "fightclub_StartUp";
if($SANGUINE & $@SV_FCDBit != 0) end;
callfunc "fightclub_CleanStage";
goto L_StartTimer;
L_StartTimer:
setnpctimer 0;
initnpctimer;
end;
OnTimer2000:
// this events checks who is on stage every 2 seconds
set $@areausers, getareausers("009-7.gat", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2); // get the number of players on stage
if (($@areausers > 2) || (($@Duel_CurrentDuel < 1) && ($@areausers >= 1))) goto L_Intrusion; // too many players on the stage
if (($@Duel_CurrentDuel < 1) && ($@Duel_Started != 1)) goto L_Request; // start the next duel
if ($@Duel_Started != 1) goto L_StartTimer; // no intrusion and no duel ongoing so loop again
if (attachrid($@Duel_BluePlayer) == 0) goto L_BlueMissing;
if (isin("009-7.gat", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2) == 0) goto L_BlueMissing;
if (isdead() == 1) goto L_IAmACorpse;
if (attachrid($@Duel_RedPlayer) == 0) goto L_RedMissing;
if (isin("009-7.gat", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2) == 0) goto L_RedMissing;
if (isdead() == 1) goto L_IAmACorpse;
detachrid;
goto L_StartTimer;
L_Request:
callfunc "fightclub_NextBattle";
goto L_StartTimer;
L_IAmACorpse:
set $@duel_loser, getcharid(3);
callfunc "fightclub_death";
goto L_StartTimer;
L_RedMissing:
set $@Duel_Missing, 1;
callfunc "fightclub_Missing";
goto L_StartTimer;
L_BlueMissing:
set $@Duel_Missing, 2;
callfunc "fightclub_Missing";
goto L_StartTimer;
L_Intrusion:
cmdothernpc "#FightClubUtils", "Intrusion"; // we can not attach a second timer to this npc so we use another one
callfunc "fightclub_Intrusion";
goto L_StartTimer;
}
|