From ef236e9930daf5b7c0f83a4d5287e8fed7bc544c Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Fri, 14 Sep 2012 22:40:09 +0000 Subject: [PATCH] Fix for ticket 156. Modify ParseFunction() to check for Spell() and SpellCooldown() statements in the script and check if the given spell ID is in the spellbook or not. If it's not, then see if it matches another spell with the same name that is in the spellbook. If so, then add that spell ID to the OvaleData spellbook. Track the function nodes with unknown spell IDs in a list and tag the unknown spell IDs with ":unknown" when invoking DebugNode(). git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@520 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleCompile.lua | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/OvaleCompile.lua b/OvaleCompile.lua index 63c5f63..6f5a7b0 100644 --- a/OvaleCompile.lua +++ b/OvaleCompile.lua @@ -6,6 +6,7 @@ OvaleCompile = {} local node={} local defines = {} local customFunctions = {} +local unknownSpellNodes = {} -- -- @@ -152,9 +153,27 @@ local function ParseFunction(prefix, func, params) end func = string.lower(func) - + local newNode = { type="function", func=func, params=paramList} - return AddNode(newNode) + local newNodeName = AddNode(newNode) + + -- For the spell() and spellcooldown() functions, check if the spell ID + -- is a variant of a spell with the same name as one already in the + -- spellbook. If it is, then add that variant spell ID to our spellList. + if func == "spell" or func == "spellcooldown" then + local spellId = paramList[1] + if spellId and not OvaleData.spellList[spellId] then + local spellName = GetSpellInfo(spellId) + if spellName == GetSpellInfo(spellName) then + --Ovale:Print("Learning spell "..spellName.." with ID "..spellId) + OvaleData.spellList[spellId] = spellName + else + unknownSpellNodes[newNode.nodeId] = spellId + end + end + end + + return newNodeName end local function ParseSpellAddDebuff(params) @@ -485,6 +504,7 @@ function OvaleCompile:Compile(text) Ovale.bug = false node = {} defines = {} + unknownSpellNodes = {} -- Suppression des commentaires text = string.gsub(text, "#.-\n","") @@ -558,7 +578,11 @@ function OvaleCompile:DebugNode(node) text = text .. "}\n" elseif (node.type == "function") then text = node.func.."(" + local spellId = unknownSpellNodes[node.nodeId] for k,p in pairs(node.params) do + if spellId and p == spellId then + p = p .. ":unknown" + end text = text .. k.."=" .. p .. " " end text = text .. ")" @@ -570,6 +594,8 @@ function OvaleCompile:DebugNode(node) text = self:DebugNode(node.a).." and "..self:DebugNode(node.b) elseif (node.type == "or") then text = self:DebugNode(node.a).." or "..self:DebugNode(node.b) + elseif (node.type == "not") then + text = "not "..self:DebugNode(node.a) elseif (node.type == "before") then text = self:DebugNode(node.time) .. " before "..self:DebugNode(node.a) elseif (node.type == "between") then -- 1.7.9.5