summaryrefslogblamecommitdiff
path: root/world/map/npc/009-7/eventHandler.txt
blob: 662b222a14d61ee7d918804beef668a173ef2797 (plain) (tree)
1
2
3
4
5
6
7
8
9
10





                                                                                                                                                                                                                                                                 



                                                                           










                                                      






                                                                            
 


                                   
 


                                         
 


                                    
 


                                                                                                                                                                                                       





                                                      


                          
 


               
 



                                                          
 



                               
 



                
 


                          





                                                    




























































                                                                                                                                                   
                                                                       












                                                                                                                               
 
// 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;
}