From e5190f9ddff51a2e246a7af5538909ec212e00db Mon Sep 17 00:00:00 2001 From: mekolat Date: Sun, 7 Sep 2014 15:44:33 -0400 Subject: add fight club --- world/map/npc/009-7/eventHandler.txt | 156 +++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 world/map/npc/009-7/eventHandler.txt (limited to 'world/map/npc/009-7/eventHandler.txt') diff --git a/world/map/npc/009-7/eventHandler.txt b/world/map/npc/009-7/eventHandler.txt new file mode 100644 index 00000000..2ad9ca0a --- /dev/null +++ b/world/map/npc/009-7/eventHandler.txt @@ -0,0 +1,156 @@ +// 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 + 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; +} -- cgit v1.2.3-60-g2f50