summaryrefslogtreecommitdiff
path: root/world/map/npc/009-7/eventHandler.txt
blob: 662b222a14d61ee7d918804beef668a173ef2797 (plain) (blame)
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;
}