Wowpedia

We have moved to Warcraft Wiki. Click here for information and the new URL.

READ MORE

Wowpedia
m (→‎API: api changes link)
(→‎Quick fix: reconsidered self)
Line 42: Line 42:
   
 
* Lua
 
* Lua
function SomeAddon_OnLoad(<font color="#4169E1">frame</font>)
+
function SomeAddon_OnLoad(<font color="#4169E1">self</font>)
 
frame:RegisterEvent("ADDON_LOADED")
 
frame:RegisterEvent("ADDON_LOADED")
 
end
 
end
 
 
function SomeAddon_OnEvent(<font color="#4169E1">frame, event, addon</font>)
+
function SomeAddon_OnEvent(<font color="#4169E1">self, event, addon</font>)
print(frame, event, addon)
+
print(self, event, addon)
 
end
 
end
   

Revision as of 15:35, 18 July 2019

Addons for Retail will in most cases work on Classic with removal of any non-Classic API. For Vanilla there is a bit more work involved however.

Globe

Globe can tell you which API functions/events in an addon have been removed in Classic, if the TOC is set to the Retail version and with Globe: check-classic

For example: https://www.townlong-yak.com/globe/#h:2a8385bff94e98a6bad8f5f09b45a148-reads

## Interface: 100206
## Globe: check-classic

API

There is a list of Classic-specific API and a complete list of Classic API.

old: PlaySound("igMainMenuOptionCheckBoxOn")
new: PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
old: PlaySoundFile("Sound/Spells/LevelUp.ogg")
new: PlaySoundFile(569593)

Maps

Maps were reworked in Patch 8.0.1 and the stateful API was changed to be stateless.

Combat Log

The combat log was reworked in Patch 2.4.0

Frame Scripts

Most Vanilla addons still define their frames in XML, since CreateFrame() was only added in Patch 1.10

  • Parameters like this, event and argN are no longer globals for the script handler. This was changed in Patch 4.0.1
  • The this parameter was unique to WoW frame scripts. It can generally be replaced with self even though they are separate concepts.
  • arg1, arg2, arg3, etc were replaced with the ... vararg for OnEvent(self, event, ...)

Quick fix

There are multiple ways to handle frame scripts in XML. For simplicity's sake we will only describe a quick fix in blue text.

  • Lua
function SomeAddon_OnLoad(self)
	frame:RegisterEvent("ADDON_LOADED")
end

function SomeAddon_OnEvent(self, event, addon)
	print(self, event, addon)
end
  • XML
<Frame name="SomeAddon">
	<Scripts>
		<OnLoad>
			SomeAddon_OnLoad(self)
		</OnLoad>
		<OnEvent>
			SomeAddon_OnEvent(self, event, ...)
		</OnEvent>
	</Scripts>
</Frame>

Lua only

It's also possible to create a frame and handle the scripts in Lua without use of XML, depending on how simple the addon is.

function f:OnEvent(event, addon)
	print(self, event, addon)
end

local f = CreateFrame("Frame")
f:RegisterEvent("ADDON_LOADED")
f:SetScript("OnEvent", f.OnEvent)