m (→API: api changes link) |
(→Quick fix: reconsidered self) |
||
Line 42: | Line 42: | ||
* Lua |
* Lua |
||
− | function SomeAddon_OnLoad(<font color="#4169E1"> |
+ | function SomeAddon_OnLoad(<font color="#4169E1">self</font>) |
frame:RegisterEvent("ADDON_LOADED") |
frame:RegisterEvent("ADDON_LOADED") |
||
end |
end |
||
− | function SomeAddon_OnEvent(<font color="#4169E1"> |
+ | function SomeAddon_OnEvent(<font color="#4169E1">self, event, addon</font>) |
− | print( |
+ | 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.
- Texture:SetTexture() can no longer set color textures in Patch 7.0.3, use Texture:SetColorTexture(r, g, b [, a]) instead.
- PlaySound() only accepts SoundKitIDs in Patch 7.0.3
old: PlaySound("igMainMenuOptionCheckBoxOn") new: PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
- PlaySoundFile() only accepts FileDataIDs for game sounds in Patch 8.2.0
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.
- WorldMapAreaIDs were replaced with UiMapIDs.
- It's no longer needed to call SetMapToCurrentZone() and GetCurrentMapAreaID() to get the current zone UI map, instead use C_Map.GetBestMapForUnit("player")
Combat Log
The combat log was reworked in Patch 2.4.0
- The event payload is returned from CombatLogGetCurrentEventInfo() since Patch 8.0.1
- See COMBAT_LOG_EVENT for details.
Frame Scripts
Most Vanilla addons still define their frames in XML, since CreateFrame() was only added in Patch 1.10
- Parameters like
this
,event
andargN
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 withself
even though they are separate concepts. arg1
,arg2
,arg3
, etc were replaced with the...
vararg forOnEvent(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)