Events and Event handlers.
Registering events
The wizard allows you to subscribe on the event of the client receiving data, including the data that was sent. Essentially what this means is that it allows you to parse all the game data yourself within scripts. Running the following Lua script subscribes to this event and shows all data on screen.
Code: Select all
function event_line(data)
Echo("Game data: "..data)
end
RegisterEvent("line", event_line)
Data from the following channels will trigger this event, if the data comes from a channel other than game, it will be prefixed with a tag announcing from which channel it originates.
Code: Select all
Channel Prefix
------------------------------
Game
Tells [t]
Shouts [s]
gshout [G]
wail [W]
tshout [T]
event [E]
logon [L]
chat [C]
hhshout [H]
quest [Q]
RegisterEvent("line", event_line) subscribes to the event of the client receiving a line of data. Whenever this happens it triggers the function given, in this case I created the function event_line. event_line will echo all received data to the game window.
In order for this to take effect, the script containing this RegisterEvent must be ran first. It does not automatically work like triggers, and the event registration is only active while the script is running and thus can be canceled just like all scripts with Escape.
All the above mentioned channels can also be seperately subscribed to. The following code will not trigger on all line data, it will only trigger on chats. The same could be done for shouts, tells, etcetera.
Code: Select all
function tell_event(data)
Echo("chat event triggered : "..data)
end
RegisterEvent("chat", tell_event)
Example: Handling events
Getting all game data within a script is fun, but echoing everything double is not the most useful application for it. In this example I will register an event and parse it so in the case of a balance request, Halren will automatically give that person a weapon balance.
Code: Select all
function event_line(data)
if string.find(string.lower(data), "balanceweaponplease") then
-- Accepted ways of asking for a balance: Tells and Says.
name = returnPersonSendingTell(data)
if name == "empty" then
name = returnPersonSendingSay(data)
end
if name ~= "empty" then -- If name is still Empty means it wasnt a tell or a say, whoever requested the balance did it wrong!
Put("balanceweapon "..name)
end
end
end
RegisterEvent("line", event_line)
function returnPersonSendingTell(data)
if string.find(data, "[t]") == 2 then
line = string.sub(data, 6)
name = string.sub(line, 1, string.find(line, "Tells you:")-4)
return name
end
return "empty"
end
function returnPersonSendingSay(data)
if string.find(data, "says") then
line = string.sub(data, 3)
name = string.sub(line, 1, string.find(line, "says")-2)
return name
end
return "empty"
end
After registering this event all incoming lines are parsed to see if "balanceweaponplease" is said anywhere. If so the script will try to parse the name from a say and tell in custom functions, if "balanceweaponplease" was said outside of a tell or say the script will ignore it. Else if name parsing was successful the character is given the command to weaponbalance the requesting party.
Using Timer events
Another type of event supported by the Cosrin client is the timer event. It allows you to start a timer that can either be repeated or dies off after the first time it fires. This can be used to for example create a rest timer. To create a rest timer first we have to calibrate the rest timer by detecting the pulse, we can do this by checking the line data with our line event for the text "You continue resting".
When said timer fires, we will try to call the new function "rest_timer" which commands the wizard to rest. If that rest is successful it will once more trigger a new rest event to be started due to the line event parsing "you continue resting" and calling a new RegisterTimer.
Code: Select all
function rest_timer(timername)
Echo("rest_timer event fired, forcing new rest")
Put("rest")
end
function event_line(data)
-- Echo("Game data: "..data)
if string.find(string.lower(data), "you continue resting") then
RegisterTimer("Rest", 59000, false, rest_timer) -- Register a timer that will fire the function "rest_timer" after 59 seconds. Note that this is a non repeating timer.
Echo("Registered rest timer")
end
end
RegisterEvent("line", event_line)
This results in the following output, with my wizard triggering a new "Rest" right before a new pulse for as long as I keep successfully resting on every pulse.
Note that "RegisterTimer" has four parameters:
timername - name used to recognise and cancel the timer
interval - time period in milliseconds that the timer will fire
repeatable -
If true, the timer will keep firing until cancelled. If false it will automatically cancel after it fires the first time.
handling function - the function to call when the timer fires
Using GlobalVariable Events
You can also subscribe on when a global variable changes, allowing the implementation of an observer pattern. The following code starts a loop that iterates 100 times. Every iteration it will change the global variable "FizzBuzz" to a different value. Through the RegisterGlobalVarEvent function provided by the wizard we can trigger an event every time this variable is altered, no matter where or in which script this happens. The first code block is the script that registers an event on the global variable FizzBuzz, the second runs the iteration in which we alter this variable.
Code: Select all
function global_changed(varname)
Echo("a global value changed")
-- Echo(varname.." value is now : "..GetVariable(varname))
end
SetVariable("FizzBuzz", "1")
RegisterGlobalVarEvent("FizzBuzz", global_changed)
Code: Select all
SetVariable("FizzBuzz", "1")
for i = 1, 100, 1 do
FizzBuzz = ""
if(i % 3) == 0 then FizzBuzz = "Fizz" end
if(i % 5) == 0 then FizzBuzz = FizzBuzz.."Buzz" end
if FizzBuzz == "" then FizzBuzz = i end
SetVariable("FizzBuzz", FizzBuzz)
Echo("Loop Iteration : "..i..", Global FizzBuzz value : "..GetVariable("FizzBuzz")..", Local FizzBuzz value : "..FizzBuzz)
end
As can be seen in the output, the "FizzBuzz value changed" echo from the GlobalVarEvent is triggered for every iteration, aka every single time the FizzBuzz global variable has been altered.
Code: Select all
a global value changed
Loop Iteration : 1, Global FizzBuzz value : 1, Local FizzBuzz value : 1
a global value changed
Loop Iteration : 2, Global FizzBuzz value : 2, Local FizzBuzz value : 2
a global value changed
Loop Iteration : 3, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 4, Global FizzBuzz value : 4, Local FizzBuzz value : 4
a global value changed
Loop Iteration : 5, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 6, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 7, Global FizzBuzz value : 7, Local FizzBuzz value : 7
a global value changed
Loop Iteration : 8, Global FizzBuzz value : 8, Local FizzBuzz value : 8
a global value changed
Loop Iteration : 9, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 10, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 11, Global FizzBuzz value : 11, Local FizzBuzz value : 11
a global value changed
Loop Iteration : 12, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 13, Global FizzBuzz value : 13, Local FizzBuzz value : 13
a global value changed
Loop Iteration : 14, Global FizzBuzz value : 14, Local FizzBuzz value : 14
a global value changed
Loop Iteration : 15, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 16, Global FizzBuzz value : 16, Local FizzBuzz value : 16
a global value changed
Loop Iteration : 17, Global FizzBuzz value : 17, Local FizzBuzz value : 17
a global value changed
Loop Iteration : 18, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 19, Global FizzBuzz value : 19, Local FizzBuzz value : 19
a global value changed
Loop Iteration : 20, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 21, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 22, Global FizzBuzz value : 22, Local FizzBuzz value : 22
a global value changed
Loop Iteration : 23, Global FizzBuzz value : 23, Local FizzBuzz value : 23
a global value changed
Loop Iteration : 24, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 25, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 26, Global FizzBuzz value : 26, Local FizzBuzz value : 26
a global value changed
Loop Iteration : 27, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 28, Global FizzBuzz value : 28, Local FizzBuzz value : 28
a global value changed
Loop Iteration : 29, Global FizzBuzz value : 29, Local FizzBuzz value : 29
a global value changed
Loop Iteration : 30, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 31, Global FizzBuzz value : 31, Local FizzBuzz value : 31
a global value changed
Loop Iteration : 32, Global FizzBuzz value : 32, Local FizzBuzz value : 32
a global value changed
Loop Iteration : 33, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 34, Global FizzBuzz value : 34, Local FizzBuzz value : 34
a global value changed
Loop Iteration : 35, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 36, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 37, Global FizzBuzz value : 37, Local FizzBuzz value : 37
a global value changed
Loop Iteration : 38, Global FizzBuzz value : 38, Local FizzBuzz value : 38
a global value changed
Loop Iteration : 39, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 40, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 41, Global FizzBuzz value : 41, Local FizzBuzz value : 41
a global value changed
Loop Iteration : 42, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 43, Global FizzBuzz value : 43, Local FizzBuzz value : 43
a global value changed
Loop Iteration : 44, Global FizzBuzz value : 44, Local FizzBuzz value : 44
a global value changed
Loop Iteration : 45, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 46, Global FizzBuzz value : 46, Local FizzBuzz value : 46
a global value changed
Loop Iteration : 47, Global FizzBuzz value : 47, Local FizzBuzz value : 47
a global value changed
Loop Iteration : 48, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 49, Global FizzBuzz value : 49, Local FizzBuzz value : 49
a global value changed
Loop Iteration : 50, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 51, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 52, Global FizzBuzz value : 52, Local FizzBuzz value : 52
a global value changed
Loop Iteration : 53, Global FizzBuzz value : 53, Local FizzBuzz value : 53
a global value changed
Loop Iteration : 54, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 55, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 56, Global FizzBuzz value : 56, Local FizzBuzz value : 56
a global value changed
Loop Iteration : 57, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 58, Global FizzBuzz value : 58, Local FizzBuzz value : 58
a global value changed
Loop Iteration : 59, Global FizzBuzz value : 59, Local FizzBuzz value : 59
a global value changed
Loop Iteration : 60, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 61, Global FizzBuzz value : 61, Local FizzBuzz value : 61
a global value changed
Loop Iteration : 62, Global FizzBuzz value : 62, Local FizzBuzz value : 62
a global value changed
Loop Iteration : 63, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 64, Global FizzBuzz value : 64, Local FizzBuzz value : 64
a global value changed
Loop Iteration : 65, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 66, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 67, Global FizzBuzz value : 67, Local FizzBuzz value : 67
a global value changed
Loop Iteration : 68, Global FizzBuzz value : 68, Local FizzBuzz value : 68
a global value changed
Loop Iteration : 69, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 70, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 71, Global FizzBuzz value : 71, Local FizzBuzz value : 71
a global value changed
Loop Iteration : 72, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 73, Global FizzBuzz value : 73, Local FizzBuzz value : 73
a global value changed
Loop Iteration : 74, Global FizzBuzz value : 74, Local FizzBuzz value : 74
a global value changed
Loop Iteration : 75, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 76, Global FizzBuzz value : 76, Local FizzBuzz value : 76
a global value changed
Loop Iteration : 77, Global FizzBuzz value : 77, Local FizzBuzz value : 77
a global value changed
Loop Iteration : 78, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 79, Global FizzBuzz value : 79, Local FizzBuzz value : 79
a global value changed
Loop Iteration : 80, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 81, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 82, Global FizzBuzz value : 82, Local FizzBuzz value : 82
a global value changed
Loop Iteration : 83, Global FizzBuzz value : 83, Local FizzBuzz value : 83
a global value changed
Loop Iteration : 84, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 85, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 86, Global FizzBuzz value : 86, Local FizzBuzz value : 86
a global value changed
Loop Iteration : 87, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 88, Global FizzBuzz value : 88, Local FizzBuzz value : 88
a global value changed
Loop Iteration : 89, Global FizzBuzz value : 89, Local FizzBuzz value : 89
a global value changed
Loop Iteration : 90, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 91, Global FizzBuzz value : 91, Local FizzBuzz value : 91
a global value changed
Loop Iteration : 92, Global FizzBuzz value : 92, Local FizzBuzz value : 92
a global value changed
Loop Iteration : 93, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 94, Global FizzBuzz value : 94, Local FizzBuzz value : 94
a global value changed
Loop Iteration : 95, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 96, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 97, Global FizzBuzz value : 97, Local FizzBuzz value : 97
a global value changed
Loop Iteration : 98, Global FizzBuzz value : 98, Local FizzBuzz value : 98
a global value changed
Loop Iteration : 99, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 100, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Note that implementing an observer pattern in your scripts is generally only useful in very advanced situations and is not necessary in basic scripts.
How to apply this knowledge to Cosrin
As stated above, this is definitely not the recommended way to implement simple things in Cosrin, but I will show an example of how you could use it. As a fighter I like to use potent healing pastes when I am low on health, I am however terrible at remembering how many I have, and subsequently I tend to run out of them without noticing. To combat this I can use the following script that does the following:
1) keep track of how many pastes I have left.
2) Whenever I have less than 3 pastes, automatically send a tell to a monk asking if he can kindly make me some more
3) if I run out completely I will ring back to my guild.
This code initializes the global variable where I track my pastes, and looks in my pouch to count them.
It is recommended to purge your game window of content before doing this, else any previous references to pastes of potent healing will be counted as well. After initially tracking the amount of pastes of potent healing in your pouch the script will keep track of when a paste has been fully eaten and reduce the amount of pastes in the global variable.
Whenever the variable changes our event triggers to see how many are left, if there is one paste left we ask Khaji to please sell us 5 pastes of potent healing, if there are no pastes left we use guildring.
Code: Select all
function global_changed(varname)
if varname == "PotentPasteCount" then
Echo("New PotentPasteCount = "..GetVariable("PotentPasteCount"))
if GetVariable("PotentPasteCount") == 0 or GetVariable("PotentPasteCount") == "0" then
PauseMs(2700)
Pause(character.ut)
Put("activate guildring")
elseif GetVariable("PotentPasteCount") == 1 or GetVariable("PotentPasteCount") == "1" then
Put("Khaji Could I please buy 5 Paste of Potent healing from you")
end
end
end
function event_line(data)
if string.find(string.lower(data), "there is nothing left of the paste of potent healing...") then
SetVariable("PotentPasteCount", GetVariable("PotentPasteCount") - 1)
end
end
SetVariable("PotentPasteCount", 0)
Put("inv")
Put("pouch")
WaitFor("You have the following items in your herb/potion pouch:")
-- Parse the amount of paste of potent healing in inventory
content = GetGameText()
for i =1,#content do
for paste in string.gmatch(content[i], "paste of potent healing") do
SetVariable("PotentPasteCount", GetVariable("PotentPasteCount") + 1)
end
end
RegisterGlobalVarEvent("PotentPasteCount", global_changed)
RegisterEvent("line", event_line)
This is just an example of how you could use GlobalVarEvents in your scripts, it is not recommended to copy paste and use this script. If you were to actually use this in game it would be recommended to also keep tracking of picking up and dropping pastes to increase/reduce the paste count, as is you would have to restart the function every time you buy a new set of pastes.
Using GetEvent to request the next event
As stated previously, events will sit in a queue and the client will find the best moment to trigger the function assigned to this event.
If an event is registered in the same script as where you want to use it, it will choose to hold the event in the queue until the script has ended. To demonstrate, the following code is the same FizzBuzz code as before, but the registering of the event is done in the same script as the iteration execution.
Code: Select all
function global_changed(varname)
Echo("a global value changed")
-- Echo(varname.." value is now : "..GetVariable(varname))
end
SetVariable("FizzBuzz", "1")
RegisterGlobalVarEvent("FizzBuzz", global_changed)
Pause(1)
for i = 1, 100, 1 do
FizzBuzz = ""
if(i % 3) == 0 then FizzBuzz = "Fizz" end
if(i % 5) == 0 then FizzBuzz = FizzBuzz.."Buzz" end
if FizzBuzz == "" then FizzBuzz = i end
SetVariable("FizzBuzz", FizzBuzz)
Echo("Loop Iteration : "..i..", Global FizzBuzz value : "..GetVariable("FizzBuzz")..", Local FizzBuzz value : "..FizzBuzz)
--GetEvent()
end
The same code, just together in one file. This results in the widly different following output:
Code: Select all
Loop Iteration : 1, Global FizzBuzz value : 1, Local FizzBuzz value : 1
Loop Iteration : 2, Global FizzBuzz value : 2, Local FizzBuzz value : 2
Loop Iteration : 3, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 4, Global FizzBuzz value : 4, Local FizzBuzz value : 4
Loop Iteration : 5, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 6, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 7, Global FizzBuzz value : 7, Local FizzBuzz value : 7
Loop Iteration : 8, Global FizzBuzz value : 8, Local FizzBuzz value : 8
Loop Iteration : 9, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 10, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 11, Global FizzBuzz value : 11, Local FizzBuzz value : 11
Loop Iteration : 12, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 13, Global FizzBuzz value : 13, Local FizzBuzz value : 13
Loop Iteration : 14, Global FizzBuzz value : 14, Local FizzBuzz value : 14
Loop Iteration : 15, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
Loop Iteration : 16, Global FizzBuzz value : 16, Local FizzBuzz value : 16
Loop Iteration : 17, Global FizzBuzz value : 17, Local FizzBuzz value : 17
Loop Iteration : 18, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 19, Global FizzBuzz value : 19, Local FizzBuzz value : 19
Loop Iteration : 20, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 21, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 22, Global FizzBuzz value : 22, Local FizzBuzz value : 22
Loop Iteration : 23, Global FizzBuzz value : 23, Local FizzBuzz value : 23
Loop Iteration : 24, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 25, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 26, Global FizzBuzz value : 26, Local FizzBuzz value : 26
Loop Iteration : 27, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 28, Global FizzBuzz value : 28, Local FizzBuzz value : 28
Loop Iteration : 29, Global FizzBuzz value : 29, Local FizzBuzz value : 29
Loop Iteration : 30, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
Loop Iteration : 31, Global FizzBuzz value : 31, Local FizzBuzz value : 31
Loop Iteration : 32, Global FizzBuzz value : 32, Local FizzBuzz value : 32
Loop Iteration : 33, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 34, Global FizzBuzz value : 34, Local FizzBuzz value : 34
Loop Iteration : 35, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 36, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 37, Global FizzBuzz value : 37, Local FizzBuzz value : 37
Loop Iteration : 38, Global FizzBuzz value : 38, Local FizzBuzz value : 38
Loop Iteration : 39, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 40, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 41, Global FizzBuzz value : 41, Local FizzBuzz value : 41
Loop Iteration : 42, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 43, Global FizzBuzz value : 43, Local FizzBuzz value : 43
Loop Iteration : 44, Global FizzBuzz value : 44, Local FizzBuzz value : 44
Loop Iteration : 45, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
Loop Iteration : 46, Global FizzBuzz value : 46, Local FizzBuzz value : 46
Loop Iteration : 47, Global FizzBuzz value : 47, Local FizzBuzz value : 47
Loop Iteration : 48, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 49, Global FizzBuzz value : 49, Local FizzBuzz value : 49
Loop Iteration : 50, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 51, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 52, Global FizzBuzz value : 52, Local FizzBuzz value : 52
Loop Iteration : 53, Global FizzBuzz value : 53, Local FizzBuzz value : 53
Loop Iteration : 54, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 55, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 56, Global FizzBuzz value : 56, Local FizzBuzz value : 56
Loop Iteration : 57, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 58, Global FizzBuzz value : 58, Local FizzBuzz value : 58
Loop Iteration : 59, Global FizzBuzz value : 59, Local FizzBuzz value : 59
Loop Iteration : 60, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
Loop Iteration : 61, Global FizzBuzz value : 61, Local FizzBuzz value : 61
Loop Iteration : 62, Global FizzBuzz value : 62, Local FizzBuzz value : 62
Loop Iteration : 63, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 64, Global FizzBuzz value : 64, Local FizzBuzz value : 64
Loop Iteration : 65, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 66, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 67, Global FizzBuzz value : 67, Local FizzBuzz value : 67
Loop Iteration : 68, Global FizzBuzz value : 68, Local FizzBuzz value : 68
Loop Iteration : 69, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 70, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 71, Global FizzBuzz value : 71, Local FizzBuzz value : 71
Loop Iteration : 72, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 73, Global FizzBuzz value : 73, Local FizzBuzz value : 73
Loop Iteration : 74, Global FizzBuzz value : 74, Local FizzBuzz value : 74
Loop Iteration : 75, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
Loop Iteration : 76, Global FizzBuzz value : 76, Local FizzBuzz value : 76
Loop Iteration : 77, Global FizzBuzz value : 77, Local FizzBuzz value : 77
Loop Iteration : 78, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 79, Global FizzBuzz value : 79, Local FizzBuzz value : 79
Loop Iteration : 80, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 81, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 82, Global FizzBuzz value : 82, Local FizzBuzz value : 82
Loop Iteration : 83, Global FizzBuzz value : 83, Local FizzBuzz value : 83
Loop Iteration : 84, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 85, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 86, Global FizzBuzz value : 86, Local FizzBuzz value : 86
Loop Iteration : 87, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 88, Global FizzBuzz value : 88, Local FizzBuzz value : 88
Loop Iteration : 89, Global FizzBuzz value : 89, Local FizzBuzz value : 89
Loop Iteration : 90, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
Loop Iteration : 91, Global FizzBuzz value : 91, Local FizzBuzz value : 91
Loop Iteration : 92, Global FizzBuzz value : 92, Local FizzBuzz value : 92
Loop Iteration : 93, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 94, Global FizzBuzz value : 94, Local FizzBuzz value : 94
Loop Iteration : 95, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
Loop Iteration : 96, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 97, Global FizzBuzz value : 97, Local FizzBuzz value : 97
Loop Iteration : 98, Global FizzBuzz value : 98, Local FizzBuzz value : 98
Loop Iteration : 99, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
Loop Iteration : 100, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
a global value changed
As you can see, the events are all queued up and released AFTER the script we register it in has finished. GetEvent() allows us to see the next Event in the queue (if there is one) without waiting.
GetEvent() returns two variables -
eventtype - The kind of event in the queue, line/globalvar/etc
eventdata - The name of the registered event
Using this we can manually tell an event function to trigger if the event is registered in the same script:
Code: Select all
function global_changed(varname)
Echo("a global value changed")
-- Echo(varname.." value is now : "..GetVariable(varname))
end
SetVariable("FizzBuzz", "1")
RegisterGlobalVarEvent("FizzBuzz", global_changed)
Pause(1)
for i = 1, 100, 1 do
FizzBuzz = ""
if(i % 3) == 0 then FizzBuzz = "Fizz" end
if(i % 5) == 0 then FizzBuzz = FizzBuzz.."Buzz" end
if FizzBuzz == "" then FizzBuzz = i end
SetVariable("FizzBuzz", FizzBuzz)
Echo("Loop Iteration : "..i..", Global FizzBuzz value : "..GetVariable("FizzBuzz")..", Local FizzBuzz value : "..FizzBuzz)
local eventtype, eventdata = GetEvent()
if eventtype then
if eventtype == "globalvar" then
global_changed(eventdata)
end
end
end
We now get the following output:
Code: Select all
Loop Iteration : 1, Global FizzBuzz value : 1, Local FizzBuzz value : 1
a global value changed
Loop Iteration : 2, Global FizzBuzz value : 2, Local FizzBuzz value : 2
a global value changed
Loop Iteration : 3, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 4, Global FizzBuzz value : 4, Local FizzBuzz value : 4
a global value changed
Loop Iteration : 5, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 6, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 7, Global FizzBuzz value : 7, Local FizzBuzz value : 7
a global value changed
Loop Iteration : 8, Global FizzBuzz value : 8, Local FizzBuzz value : 8
a global value changed
Loop Iteration : 9, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 10, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 11, Global FizzBuzz value : 11, Local FizzBuzz value : 11
a global value changed
Loop Iteration : 12, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 13, Global FizzBuzz value : 13, Local FizzBuzz value : 13
a global value changed
Loop Iteration : 14, Global FizzBuzz value : 14, Local FizzBuzz value : 14
a global value changed
Loop Iteration : 15, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 16, Global FizzBuzz value : 16, Local FizzBuzz value : 16
a global value changed
Loop Iteration : 17, Global FizzBuzz value : 17, Local FizzBuzz value : 17
a global value changed
Loop Iteration : 18, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 19, Global FizzBuzz value : 19, Local FizzBuzz value : 19
a global value changed
Loop Iteration : 20, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 21, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 22, Global FizzBuzz value : 22, Local FizzBuzz value : 22
a global value changed
Loop Iteration : 23, Global FizzBuzz value : 23, Local FizzBuzz value : 23
a global value changed
Loop Iteration : 24, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 25, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 26, Global FizzBuzz value : 26, Local FizzBuzz value : 26
a global value changed
Loop Iteration : 27, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 28, Global FizzBuzz value : 28, Local FizzBuzz value : 28
a global value changed
Loop Iteration : 29, Global FizzBuzz value : 29, Local FizzBuzz value : 29
a global value changed
Loop Iteration : 30, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 31, Global FizzBuzz value : 31, Local FizzBuzz value : 31
a global value changed
Loop Iteration : 32, Global FizzBuzz value : 32, Local FizzBuzz value : 32
a global value changed
Loop Iteration : 33, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 34, Global FizzBuzz value : 34, Local FizzBuzz value : 34
a global value changed
Loop Iteration : 35, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 36, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 37, Global FizzBuzz value : 37, Local FizzBuzz value : 37
a global value changed
Loop Iteration : 38, Global FizzBuzz value : 38, Local FizzBuzz value : 38
a global value changed
Loop Iteration : 39, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 40, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 41, Global FizzBuzz value : 41, Local FizzBuzz value : 41
a global value changed
Loop Iteration : 42, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 43, Global FizzBuzz value : 43, Local FizzBuzz value : 43
a global value changed
Loop Iteration : 44, Global FizzBuzz value : 44, Local FizzBuzz value : 44
a global value changed
Loop Iteration : 45, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 46, Global FizzBuzz value : 46, Local FizzBuzz value : 46
a global value changed
Loop Iteration : 47, Global FizzBuzz value : 47, Local FizzBuzz value : 47
a global value changed
Loop Iteration : 48, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 49, Global FizzBuzz value : 49, Local FizzBuzz value : 49
a global value changed
Loop Iteration : 50, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 51, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 52, Global FizzBuzz value : 52, Local FizzBuzz value : 52
a global value changed
Loop Iteration : 53, Global FizzBuzz value : 53, Local FizzBuzz value : 53
a global value changed
Loop Iteration : 54, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 55, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 56, Global FizzBuzz value : 56, Local FizzBuzz value : 56
a global value changed
Loop Iteration : 57, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 58, Global FizzBuzz value : 58, Local FizzBuzz value : 58
a global value changed
Loop Iteration : 59, Global FizzBuzz value : 59, Local FizzBuzz value : 59
a global value changed
Loop Iteration : 60, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 61, Global FizzBuzz value : 61, Local FizzBuzz value : 61
a global value changed
Loop Iteration : 62, Global FizzBuzz value : 62, Local FizzBuzz value : 62
a global value changed
Loop Iteration : 63, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 64, Global FizzBuzz value : 64, Local FizzBuzz value : 64
a global value changed
Loop Iteration : 65, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 66, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 67, Global FizzBuzz value : 67, Local FizzBuzz value : 67
a global value changed
Loop Iteration : 68, Global FizzBuzz value : 68, Local FizzBuzz value : 68
a global value changed
Loop Iteration : 69, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 70, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 71, Global FizzBuzz value : 71, Local FizzBuzz value : 71
a global value changed
Loop Iteration : 72, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 73, Global FizzBuzz value : 73, Local FizzBuzz value : 73
a global value changed
Loop Iteration : 74, Global FizzBuzz value : 74, Local FizzBuzz value : 74
a global value changed
Loop Iteration : 75, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 76, Global FizzBuzz value : 76, Local FizzBuzz value : 76
a global value changed
Loop Iteration : 77, Global FizzBuzz value : 77, Local FizzBuzz value : 77
a global value changed
Loop Iteration : 78, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 79, Global FizzBuzz value : 79, Local FizzBuzz value : 79
a global value changed
Loop Iteration : 80, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 81, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 82, Global FizzBuzz value : 82, Local FizzBuzz value : 82
a global value changed
Loop Iteration : 83, Global FizzBuzz value : 83, Local FizzBuzz value : 83
a global value changed
Loop Iteration : 84, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 85, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 86, Global FizzBuzz value : 86, Local FizzBuzz value : 86
a global value changed
Loop Iteration : 87, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 88, Global FizzBuzz value : 88, Local FizzBuzz value : 88
a global value changed
Loop Iteration : 89, Global FizzBuzz value : 89, Local FizzBuzz value : 89
a global value changed
Loop Iteration : 90, Global FizzBuzz value : FizzBuzz, Local FizzBuzz value : FizzBuzz
a global value changed
Loop Iteration : 91, Global FizzBuzz value : 91, Local FizzBuzz value : 91
a global value changed
Loop Iteration : 92, Global FizzBuzz value : 92, Local FizzBuzz value : 92
a global value changed
Loop Iteration : 93, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 94, Global FizzBuzz value : 94, Local FizzBuzz value : 94
a global value changed
Loop Iteration : 95, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Loop Iteration : 96, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 97, Global FizzBuzz value : 97, Local FizzBuzz value : 97
a global value changed
Loop Iteration : 98, Global FizzBuzz value : 98, Local FizzBuzz value : 98
a global value changed
Loop Iteration : 99, Global FizzBuzz value : Fizz, Local FizzBuzz value : Fizz
a global value changed
Loop Iteration : 100, Global FizzBuzz value : Buzz, Local FizzBuzz value : Buzz
a global value changed
Caution when using this, reading an event from the queue removes it from the queue and will not automatically call the function belonging to that event. If you read an event you must handle it manually, if there would be any other event than a "globalvar" event caught by the above code it would discard it and it would never be executed. Only use this if you know exactly which events you might get with GetEvent, and handle them all.
Attachments
This guide has the following attachments:
- "startup_registerEvents.lua" contains the code that will react upon balanceweapon requests and start a rest timer whenever you are resting at a pulse.
- "runFizzBuzz_registerEvents.lua", followed by "runFizzBuzz.lua" will run the FizzBuzz sample algorithm displaying the observable pattern you can use when registering events on Global Variable changes.
- "trackPastes_registerEvents.lua" will start the script that monitors your paste usage and acts accordingly.
- "runFizzBuzzSingleScript.lua" demonstrates the GetEvent() function, if you want to know more about its behaviour try running it with and without line 21-26 commented out.