Lua RegisterEvent

From ArcEmu-Wiki
Jump to: navigation, search



This command basically tells the server to register the next function you want to use. Each function in your script must be referenced by this command, or else the scripted unit will not use that function.

NOTE: You need to have unit events registered to the creature before you can use this function.
To make a "dummy" register, if you are using gossip only for example, you can use this:

-- Register Dummy Event
RegisterUnitEvent(Entry, 18, function() return; end)


pUnit:RegisterEvent(string FunctionName, int Time, int Counter)
  • The FunctionName variable must match the name of the next function you want to call. (Do not use quotes if you are using a tabled function).
  • The Time variable is a delay timer, value is counted in milliseconds. So, if you want to register the next function in 3 seconds, you would enter 3000 in it's place.
  • The Counter is how many times you want the script to register that function. Set to anything higher than zero to register the function that many times, use zero to register it an infinite amount of times until the next function finishes completely. Zero is used mainly when using a command to check a specific value, such as "GetHealthPct".

Example NPC onCombat

function NPC_OnCombat(pUnit, Event, pVictim)
  pUnit:RegisterEvent(NPC_Spell, 3000, 1)
function NPC_Spell(pUnit, Event)

Example Gossip NPC

local NPC_ID = 112199   -- Example ID !
local QUEST_ID = 112198   -- Example ID !
function NPC_OnQuestAccept(pPlayer, QuestId)
  pPlayer:GetSelection():SendChatMessage(12, 0, "So long ...")
  pPlayer:GetSelection():RegisterEvent(NPC_NextFunction, 1000, 1)  -- Fills the Dummy Event with the functions name 
function NPC_NextFunction(pGossipNPC, Event)
  pGossipNPC:SendChatMessage(12, 0, "... and thanks for all the fish!")
-- Register Quest OnQuestAccept
RegisterQuestEvent(QUEST_ID, 1, "NPC_OnQuestAccept")
-- Register NPC event with Dummy function
RegisterUnitEvent(NPC_ID, 18, function() return; end)

Extra arguments

Sometimes you may want to pass more arguments than just Unit and event. This can be done with:

pUnit:RegisterEvent(function() <Name>(arguments); end, Time, Counter)


function NPC_OnCombat(pUnit, Event, pVictim)
  local NPC_Name = pUnit:GetName()
  pUnit:RegisterEvent(function() PrintArguments(pUnit, NPC_Name, pVictim:GetLevel()); end, 3000, 1)
function PrintArguments(pUnit, NPCname, Victimlevel)
  pUnit:SendChatMessage(12, 0, "My name: "..NPCname..". My target's level: "..Victimlevel)
Personal tools