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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
// this file handles every events related to the fight club and calls the appropriate functions from core
009-7.gat,45,33,0|script|#trapdoor2#FightClub|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|#trapdoor3#FightClub|327,0,0,
{
warp "009-7.gat",44,32;
end;
}
009-7.gat,22,38,0|script|#FightClub#utils|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, "#FightClub#utils::OnIntrusion"; // we can not do this directly on #handler because it already have a timer
end;
}
009-7.gat,20,45,0|script|#FightClub#TimeLimit|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|#FightClub#handler|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(($fightclub_enabled % 5) != 3) 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_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_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 "#FightClub#utils", "Intrusion"; // we can not attach a second timer to this npc so we use another one
callfunc "fightclub_Intrusion";
goto L_StartTimer;
OnPCKilledEvent: // fired with the RID of the victim
set @killer, 0;
if(@Duel_Fighter != 1) end;
if(getmap() != "009-7") end;
set $@duel_loser, getcharid(3); // grab the rid of the victim
set $@duel_winner, @killerrid; // grab the rid of the killer
set @killerrid, 0; // reset killerid
callfunc "fightclub_death";
end;
OnPCDieEvent: // fired with the RID of the victim
callfunc "fightclub_GoBack"; // TODO: we need a unified death handler
set @killer, 0;
if(@Duel_Fighter != 1) end;
if (($@Duel_CurrentDuel < 1) || ($@Duel_Started != 1)) goto L_Reset;
if(getmap() != "009-7") end;
set @killerrid, 0; // since the player was not murdered, the killerrid is 0
set $@duel_loser, getcharid(3); // grab the rid of the victim
callfunc "fightclub_death";
end;
L_Reset: // the player has duel_fighter but no duel is ongoing (happens if the player quit before fightclub_exit can be called)
if(debug) donpcevent "Debug#Duels::OnVictimInDuelNoDuel";
callfunc "fightclub_DestroyMe"; // here we attempt to resume the interrupted procedure
end;
}
|