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