Lua RegisterUnitGossipEvent

From ArcEmu-Wiki
Jump to: navigation, search
Main Page        LuaArcEmu Website     ArcEmu Forum     Bug Tracker


You use registers to register functions to the server.
With RegisterUnitGossipEvent you can register a gossip event.



Event Event ID Remark
GOSSIP_EVENT_ON_TALK 1 When a player talks to the npc this function is activated
GOSSIP_EVENT_ON_SELECT_OPTION 2 When a player selects an intid in a menu this function is activated
GOSSIP_EVENT_ON_END 3 When a gossip is ended this function is activated


Full Example:

--[[ Beginning of the menu.
Here we create a menu.
When a player talks to the npc this menu will be created. ]]--
function OnGossip(pUnit, event, pPlayer)
     if(pPlayer:IsInCombat() == true) then
	  pUnit:SendChatMessageToPlayer(12, 0, "You can't use this while in combat!!", pPlayer)
     elseif(pPlayer:IsFriendly(pUnit) == true) then
	  pUnit:GossipCreateMenu(100, pPlayer, 0)
	  pUnit:GossipMenuAddItem(1, "t1", 1, 0)
	  pUnit:GossipMenuAddItem(2, "t2", 2, 0)
	  pUnit:GossipMenuAddItem(3, "t3", 3, 0)
	  pUnit:GossipMenuAddItem(4, "t4", 4, 0)
	  pUnit:GossipMenuAddItem(5, "t5", 5, 0)
--[[ Beginning of menu END END ]]--
--[[ Beginning of menu Select ..
When the user selects one of the above in the menu..
t1, t2, t3 etc.. We check it here:
Please note I did not cover all intids only 3. ]]--
function OnSelect(pUnit, event, pPlayer, id, intid, code)
	     pPlayer:GossipComplete() -- since we want it to close ALWAYS we put it before the ifs
         if(intid == 1) then
	     pUnit:SendChatMessageToPlayer(12, 0, "You clicked t1!", pPlayer)
	     pPlayer:PlayerSendChatMessage(1, 0, "I clicked t1!")
	 elseif(intid == 2) then
	     pUnit:SendChatMessageToPlayer(12, 0, "You clicked t2!", pPlayer)
	     pPlayer:PlayerSendChatMessage(1, 0, "I clicked t2!")
	 elseif(intid == 3) then
	     pUnit:SendChatMessageToPlayer(12, 0, "You clicked t3!", pPlayer)
	     pPlayer:PlayerSendChatMessage(1, 0, "I clicked t3!")

Please note with caution:
The following code will reset your talents when the gossip is ended!

function GossipOnEnd(pUnit, event)
     pPlayer:GossipMiscAction(9, pUnit)
     pPlayer:SendBroadcastMessage("Your talents have been reset.")

And now to register the events:

RegisterUnitGossipEvent(NPC-ID, 1, "OnGossip") -- will register the first function
RegisterUnitGossipEvent(NPC-ID, 2, "OnSelect") -- will register the second function
RegisterUnitGossipEvent(NPC-ID, 3, "GossipOnEnd") -- will register the second function

You must change NPC-ID with the id of your npc that you will want to register this script on.

Personal tools