| 
Nenue@6
 | 
     1 local _G, T = _G, Turok
 | 
| 
Nenue@6
 | 
     2 local mod = T.modules.TimerControl
 | 
| 
Nenue@6
 | 
     3 local P = mod.prototype
 | 
| 
Nenue@6
 | 
     4 local GetInventoryItemID, GetItemInfo, GetInventoryItemTexture = GetInventoryItemID, GetItemInfo, GetInventoryItemTexture
 | 
| 
Nenue@6
 | 
     5 local GetSpellDescription, GetSpellInfo, GetSpellCharges = GetSpellDescription, GetSpellInfo, GetSpellCharges
 | 
| 
Nenue@6
 | 
     6 local tinsert, type, tonumber, pairs, ipairs, unpack = tinsert, type, tonumber, pairs, ipairs, unpack
 | 
| 
Nenue@6
 | 
     7 local UnitGUID = UnitGUID
 | 
| 
Nenue@6
 | 
     8 local GetTalentInfo, GetTalentInfoByID, GetItemSpell, PaperDoll_IsEquippedSlot = GetTalentInfo, GetTalentInfoByID, GetItemSpell, PaperDoll_IsEquippedSlot
 | 
| 
Nenue@6
 | 
     9 --@debug@
 | 
| 
Nenue@6
 | 
    10 local DEBUG = true
 | 
| 
Nenue@6
 | 
    11 --@end-debug@
 | 
| 
Nenue@6
 | 
    12 local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool
 | 
| 
Nenue@6
 | 
    13 local print = function(...)
 | 
| 
Nenue@6
 | 
    14   if not DEBUG then return end
 | 
| 
Nenue@6
 | 
    15   if _G.Devian and _G.DevianDB.workspace ~= 1 then
 | 
| 
Nenue@6
 | 
    16     _G.print('Timer', ...)
 | 
| 
Nenue@6
 | 
    17   end
 | 
| 
Nenue@6
 | 
    18 end
 | 
| 
Nenue@9
 | 
    19 local tfprint = function(...)
 | 
| 
Nenue@9
 | 
    20   if not DEBUG then return end
 | 
| 
Nenue@9
 | 
    21   if _G.Devian and _G.DevianDB.workspace ~= 1 then
 | 
| 
Nenue@9
 | 
    22     _G.print('TimerFocus', ...)
 | 
| 
Nenue@9
 | 
    23   end
 | 
| 
Nenue@9
 | 
    24 end
 | 
| 
Nenue@6
 | 
    25 ------------------------------------------
 | 
| 
Nenue@6
 | 
    26 --- Parameter Prototypes
 | 
| 
Nenue@6
 | 
    27 
 | 
| 
Nenue@6
 | 
    28 local Timer_GetPrintHandler = function(self)
 | 
| 
Nenue@6
 | 
    29   return self.trace and function(...)
 | 
| 
Nenue@6
 | 
    30     print(...)
 | 
| 
Nenue@9
 | 
    31     tfprint( ...)
 | 
| 
Nenue@6
 | 
    32   end or print
 | 
| 
Nenue@6
 | 
    33 end
 | 
| 
Nenue@6
 | 
    34 
 | 
| 
Nenue@6
 | 
    35 local Timer_UpdateIndex = function(self, key, value)
 | 
| 
Nenue@6
 | 
    36   local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
    37   --       sfk[value] = frame index key-value handle
 | 
| 
Nenue@6
 | 
    38   --             mfkv = key-value frame index
 | 
| 
Nenue@6
 | 
    39   -- mfkv[sfk[value]] = *frame
 | 
| 
Nenue@6
 | 
    40   if self.frames[key] then
 | 
| 
Nenue@6
 | 
    41     local sfk = self.frames[key]
 | 
| 
Nenue@6
 | 
    42     -- for each unique value
 | 
| 
Nenue@6
 | 
    43     for oldValue, index in pairs(sfk) do
 | 
| 
Nenue@6
 | 
    44       local mfkv = mod.frames[key][oldValue]
 | 
| 
Nenue@6
 | 
    45       -- for each offset after index
 | 
| 
Nenue@6
 | 
    46       for i = index+1, #mfkv do
 | 
| 
Nenue@6
 | 
    47         mfkv[i-1] = mfkv[i] -- slide it down
 | 
| 
Nenue@6
 | 
    48       end
 | 
| 
Nenue@6
 | 
    49       sfk[oldValue] = nil
 | 
| 
Nenue@6
 | 
    50       print(cText('    *= self.frames')..'['..cKey(key)..']['..cNum(value)..'] =', cNum(self.frames[key][value]))
 | 
| 
Nenue@6
 | 
    51       print(cText('    *= mod.frames')..'['..cKey(key)..']['..cNum(value)..']['..cNum(index)..'] =', cNum(self:GetName()))
 | 
| 
Nenue@6
 | 
    52     end
 | 
| 
Nenue@6
 | 
    53   else
 | 
| 
Nenue@6
 | 
    54     self.frames[key] = {}
 | 
| 
Nenue@6
 | 
    55   end
 | 
| 
Nenue@6
 | 
    56 
 | 
| 
Nenue@6
 | 
    57   if value then
 | 
| 
Nenue@6
 | 
    58     local mfkv = mod.frames[key][value]
 | 
| 
Nenue@6
 | 
    59     local sfk = self.frames[key]
 | 
| 
Nenue@6
 | 
    60     mfkv[#mfkv+1] = self
 | 
| 
Nenue@6
 | 
    61     sfk[value] = #mfkv
 | 
| 
Nenue@6
 | 
    62     print('    *= self.frames['..cKey(key)..']['..cNum(value)..'] = ', sfk[value])
 | 
| 
Nenue@6
 | 
    63   end
 | 
| 
Nenue@6
 | 
    64 end
 | 
| 
Nenue@6
 | 
    65 
 | 
| 
Nenue@9
 | 
    66 --- update conditional cvars (i.e. talentRow(5) pulls up column 3, so cvars.x = args[talentRow][3].x)
 | 
| 
Nenue@9
 | 
    67 local Timer_SetAttributeValues = function(self, key, value)
 | 
| 
Nenue@9
 | 
    68   print('   ', cKey(key), 'sub-value =', cNum(value))
 | 
| 
Nenue@9
 | 
    69   local sda = self.dvars.args
 | 
| 
Nenue@9
 | 
    70   if sda and sda[key] then
 | 
| 
Nenue@9
 | 
    71     print(cText('      conditional:'))
 | 
| 
Nenue@9
 | 
    72     local dvals = (value and sda[key][value]) and sda[key][value] or sda[key].default
 | 
| 
Nenue@9
 | 
    73     for k, v in pairs(dvals) do
 | 
| 
Nenue@9
 | 
    74       print(cText('     '), 'cvars.'..cKey(k), '=', cWord(v))
 | 
| 
Nenue@9
 | 
    75       self.cvars[k] = v
 | 
| 
Nenue@9
 | 
    76     end
 | 
| 
Nenue@9
 | 
    77   end
 | 
| 
Nenue@9
 | 
    78 end
 | 
| 
Nenue@9
 | 
    79 
 | 
| 
Nenue@6
 | 
    80 --- spellID
 | 
| 
Nenue@6
 | 
    81 do
 | 
| 
Nenue@6
 | 
    82   local spellID = P.status.spellID
 | 
| 
Nenue@6
 | 
    83   spellID.Init = function(self, spellID)
 | 
| 
Nenue@6
 | 
    84     local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
    85 
 | 
| 
Nenue@6
 | 
    86     if type(spellID) == 'table' then
 | 
| 
Nenue@6
 | 
    87       spellID = spellID[T.specPage]
 | 
| 
Nenue@6
 | 
    88     end
 | 
| 
Nenue@6
 | 
    89 
 | 
| 
Nenue@6
 | 
    90     -- May have changed if invoked through a slot assignment
 | 
| 
Nenue@6
 | 
    91     if spellID ~= self.spellID then
 | 
| 
Nenue@6
 | 
    92       self.spellID = spellID
 | 
| 
Nenue@6
 | 
    93       self.charges, self.maxCharges, self.chargeStart, self.chargeDuration = GetSpellCharges(spellID)
 | 
| 
Nenue@6
 | 
    94       self.spellDescription = GetSpellDescription(spellID)
 | 
| 
Nenue@6
 | 
    95       self.spellName, self.spellRank, self.spellIcon, self.castingTime, self.minRange, self.maxRange = GetSpellInfo(spellID)
 | 
| 
Nenue@6
 | 
    96       --@debug@
 | 
| 
Nenue@6
 | 
    97       print('   ', cWord('spellID ='), cKey(self.spellID), cNum(self.spellName), cText(self.spellDescription and '<desc>' or '<empty>'))--@end-debug@
 | 
| 
Nenue@6
 | 
    98 
 | 
| 
Nenue@6
 | 
    99       Timer_UpdateIndex(self, 'spellID', spellID)
 | 
| 
Nenue@6
 | 
   100     end
 | 
| 
Nenue@6
 | 
   101   end
 | 
| 
Nenue@6
 | 
   102 end
 | 
| 
Nenue@6
 | 
   103 
 | 
| 
Nenue@6
 | 
   104 --- spellName
 | 
| 
Nenue@6
 | 
   105 do
 | 
| 
Nenue@6
 | 
   106   local spellName = P.status.spellName
 | 
| 
Nenue@6
 | 
   107   spellName.Init = function(self, spellName)
 | 
| 
Nenue@6
 | 
   108     local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
   109     -- attempt to get spell info
 | 
| 
Nenue@6
 | 
   110     local exists, _, _, _, _, _, spellID =  GetSpellInfo(spellName)
 | 
| 
Nenue@6
 | 
   111     if exists then
 | 
| 
Nenue@6
 | 
   112       local charges, maxCharges, start, duration = GetSpellCharges(spellID or spellName)
 | 
| 
Nenue@6
 | 
   113       Timer_UpdateIndex(self, 'spellName', nil)
 | 
| 
Nenue@6
 | 
   114       print('   ', cKey("spellID"), '=', spellID)
 | 
| 
Nenue@6
 | 
   115       P.status.spellID.Init(self, spellID)
 | 
| 
Nenue@6
 | 
   116     else
 | 
| 
Nenue@6
 | 
   117       print('   ', cPink("spellID"), '=', 'not sure')
 | 
| 
Nenue@6
 | 
   118       Timer_UpdateIndex(self, 'spellID', nil)
 | 
| 
Nenue@6
 | 
   119       Timer_UpdateIndex(self, 'spellName', spellName)
 | 
| 
Nenue@6
 | 
   120     end
 | 
| 
Nenue@9
 | 
   121     Timer_SetAttributeValues(self, 'spellName', spellID)
 | 
| 
Nenue@6
 | 
   122   end
 | 
| 
Nenue@6
 | 
   123 end
 | 
| 
Nenue@6
 | 
   124 
 | 
| 
Nenue@6
 | 
   125 
 | 
| 
Nenue@6
 | 
   126 --- talentID
 | 
| 
Nenue@6
 | 
   127 do
 | 
| 
Nenue@6
 | 
   128   local talentID = P.status.talentID
 | 
| 
Nenue@6
 | 
   129   local GetTalentInfoByID = GetTalentInfoByID
 | 
| 
Nenue@6
 | 
   130   talentID.type = 'status'
 | 
| 
Nenue@6
 | 
   131   talentID.Init = function(self, talentID)
 | 
| 
Nenue@6
 | 
   132     local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
   133 
 | 
| 
Nenue@6
 | 
   134     self.talentID, self.spellName, self.spellIcon, self.talentSelected = GetTalentInfoByID(talentID, T.specGroup)
 | 
| 
Nenue@6
 | 
   135 
 | 
| 
Nenue@6
 | 
   136     if self.talentSelected then
 | 
| 
Nenue@6
 | 
   137       print('   ', cKey("spellName"), '=', cWord(self.spellName))
 | 
| 
Nenue@6
 | 
   138       P.status.spellName.Init(self, self.spellName)
 | 
| 
Nenue@6
 | 
   139     else
 | 
| 
Nenue@6
 | 
   140       self.disable =  true
 | 
| 
Nenue@6
 | 
   141       self.debug_info ('Talent not selected.')
 | 
| 
Nenue@6
 | 
   142     end
 | 
| 
Nenue@6
 | 
   143 
 | 
| 
Nenue@6
 | 
   144     print('   ', cKey('talentID ('..cNum(self.talentID)..', '..cNum(T.specGroup)..'):'), self.spellName, self.talentSelected )
 | 
| 
Nenue@6
 | 
   145     Timer_UpdateIndex(self, 'talentID', talentID)
 | 
| 
Nenue@9
 | 
   146     Timer_SetAttributeValues(self, 'talentID', self.talentSelected and 1 or 'default')
 | 
| 
Nenue@6
 | 
   147   end
 | 
| 
Nenue@6
 | 
   148 end
 | 
| 
Nenue@6
 | 
   149 
 | 
| 
Nenue@6
 | 
   150 --- talentRow - use whatever is in that row as data
 | 
| 
Nenue@6
 | 
   151 do
 | 
| 
Nenue@6
 | 
   152   local talentRow = P.status.talentRow
 | 
| 
Nenue@6
 | 
   153   talentRow.Init = function(self, row)
 | 
| 
Nenue@6
 | 
   154     local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
   155     self.talentRow = row
 | 
| 
Nenue@9
 | 
   156     local match
 | 
| 
Nenue@9
 | 
   157     for i = 1, 3 do
 | 
| 
Nenue@9
 | 
   158       local talentID, _, _, selected = GetTalentInfo(row, i, T.specGroup)
 | 
| 
Nenue@9
 | 
   159       if selected then
 | 
| 
Nenue@9
 | 
   160         P.status.talentID.Init(self, talentID)
 | 
| 
Nenue@9
 | 
   161         match = i
 | 
| 
Nenue@9
 | 
   162       end
 | 
| 
Nenue@9
 | 
   163     end
 | 
| 
Nenue@9
 | 
   164 
 | 
| 
Nenue@9
 | 
   165     if not match then
 | 
| 
Nenue@6
 | 
   166       self.disable = true
 | 
| 
Nenue@6
 | 
   167       self.debug_info("No talent selected in target row.")
 | 
| 
Nenue@6
 | 
   168     end
 | 
| 
Nenue@6
 | 
   169     Timer_UpdateIndex(self, 'talentRow', row)
 | 
| 
Nenue@9
 | 
   170     Timer_SetAttributeValues(self, 'talentRow', match)
 | 
| 
Nenue@6
 | 
   171   end
 | 
| 
Nenue@6
 | 
   172 end
 | 
| 
Nenue@6
 | 
   173 
 | 
| 
Nenue@6
 | 
   174 
 | 
| 
Nenue@6
 | 
   175 --- talentOffset
 | 
| 
Nenue@6
 | 
   176 do
 | 
| 
Nenue@6
 | 
   177   local talentOffset = P.status.talentOffset
 | 
| 
Nenue@6
 | 
   178   talentOffset.Init = function(self, coords)
 | 
| 
Nenue@6
 | 
   179     local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
   180 
 | 
| 
Nenue@6
 | 
   181     local tier, column = unpack(coords)
 | 
| 
Nenue@6
 | 
   182 
 | 
| 
Nenue@6
 | 
   183 
 | 
| 
Nenue@6
 | 
   184     local selected, usable, _
 | 
| 
Nenue@6
 | 
   185     self.talentID, self.spellName, self.spellIcon, selected, usable = GetTalentInfo(tier, column, T.specGroup)
 | 
| 
Nenue@6
 | 
   186     print('   ', cKey('talentOffset'), '=', cNum(tier), cNum(column), self.spellName, selected, usable)
 | 
| 
Nenue@6
 | 
   187     if not (selected and usable) then
 | 
| 
Nenue@6
 | 
   188       self.disable =  true
 | 
| 
Nenue@6
 | 
   189       self.debug_info ((not usable) and 'Unavailable at current level.' or 'Talent not selected.')
 | 
| 
Nenue@6
 | 
   190     end
 | 
| 
Nenue@6
 | 
   191     Timer_UpdateIndex(self, 'talentID', self.talentID)
 | 
| 
Nenue@6
 | 
   192   end
 | 
| 
Nenue@6
 | 
   193 end
 | 
| 
Nenue@6
 | 
   194 
 | 
| 
Nenue@6
 | 
   195 --- specPage
 | 
| 
Nenue@6
 | 
   196 do
 | 
| 
Nenue@6
 | 
   197   local specPage = P.status.specPage
 | 
| 
Nenue@6
 | 
   198   specPage.type = 'status'
 | 
| 
Nenue@6
 | 
   199   specPage.Init = function(self, specPage)
 | 
| 
Nenue@6
 | 
   200     local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
   201     local match
 | 
| 
Nenue@6
 | 
   202     if tonumber(specPage) then
 | 
| 
Nenue@6
 | 
   203       match = specPage == T.specPage
 | 
| 
Nenue@6
 | 
   204     elseif type(specPage) == 'table' then
 | 
| 
Nenue@6
 | 
   205       for _, pageID in ipairs(specPage) do
 | 
| 
Nenue@6
 | 
   206         if T.specPage == pageID then
 | 
| 
Nenue@6
 | 
   207           specPage = pageID
 | 
| 
Nenue@6
 | 
   208           match = true
 | 
| 
Nenue@6
 | 
   209           break
 | 
| 
Nenue@6
 | 
   210         end
 | 
| 
Nenue@6
 | 
   211       end
 | 
| 
Nenue@6
 | 
   212     else
 | 
| 
Nenue@6
 | 
   213       self.disable =  true
 | 
| 
Nenue@6
 | 
   214       self.debug_info ('Bad value for', '('..cWord(self.timerName)..').'..cKey('specPage'))
 | 
| 
Nenue@6
 | 
   215       Timer_UpdateIndex(self,'specPage', nil)
 | 
| 
Nenue@6
 | 
   216     end
 | 
| 
Nenue@6
 | 
   217 
 | 
| 
Nenue@6
 | 
   218     if match then
 | 
| 
Nenue@6
 | 
   219       print('   ', cKey('specPage'), '=', '['..cNum(specPage)..']')
 | 
| 
Nenue@6
 | 
   220       Timer_UpdateIndex(self,'specPage', specPage)
 | 
| 
Nenue@6
 | 
   221     else
 | 
| 
Nenue@6
 | 
   222       print('   ', cKey('specPage'), '~=', '['..cNum(specPage)..']')
 | 
| 
Nenue@6
 | 
   223       self.disable = true
 | 
| 
Nenue@6
 | 
   224       self.debug_info('Not active spec.')
 | 
| 
Nenue@6
 | 
   225     end
 | 
| 
Nenue@6
 | 
   226   end
 | 
| 
Nenue@6
 | 
   227 end
 | 
| 
Nenue@6
 | 
   228 
 | 
| 
Nenue@6
 | 
   229 --- itemID
 | 
| 
Nenue@6
 | 
   230 do
 | 
| 
Nenue@6
 | 
   231   local itemID = P.status.itemID
 | 
| 
Nenue@6
 | 
   232   itemID.type  = 'status'
 | 
| 
Nenue@6
 | 
   233   itemID.Init = function(self, item)
 | 
| 
Nenue@6
 | 
   234     local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
   235 
 | 
| 
Nenue@6
 | 
   236     if not self.dvars.inventoryID then
 | 
| 
Nenue@6
 | 
   237       self.itemID = item or self.dvars.itemID
 | 
| 
Nenue@6
 | 
   238       self.itemType = self.dvars.itemType
 | 
| 
Nenue@6
 | 
   239     else
 | 
| 
Nenue@6
 | 
   240       self.itemID = item
 | 
| 
Nenue@6
 | 
   241     end
 | 
| 
Nenue@6
 | 
   242 
 | 
| 
Nenue@6
 | 
   243     --@debug@
 | 
| 
Nenue@6
 | 
   244     --name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(itemID) or GetItemInfo("itemName") or GetItemInfo("itemLink")
 | 
| 
Nenue@6
 | 
   245     if not self.itemID then
 | 
| 
Nenue@6
 | 
   246       self.disable =  true
 | 
| 
Nenue@6
 | 
   247        self.debug_info ('bad itemID value')
 | 
| 
Nenue@6
 | 
   248     end
 | 
| 
Nenue@6
 | 
   249 
 | 
| 
Nenue@9
 | 
   250     local spellName = GetItemSpell(self.itemID)
 | 
| 
Nenue@6
 | 
   251 
 | 
| 
Nenue@9
 | 
   252     if not spellName then
 | 
| 
Nenue@6
 | 
   253       self.disable =  true
 | 
| 
Nenue@9
 | 
   254       self.debug_info('no spell detected')
 | 
| 
Nenue@9
 | 
   255       if self.spellName then
 | 
| 
Nenue@9
 | 
   256         self.spellName = nil
 | 
| 
Nenue@6
 | 
   257       end
 | 
| 
Nenue@6
 | 
   258     end
 | 
| 
Nenue@9
 | 
   259 
 | 
| 
Nenue@9
 | 
   260     Timer_UpdateIndex(self, 'spellName', spellName)
 | 
| 
Nenue@9
 | 
   261     Timer_SetAttributeValues(self, 'itemID', spellName)
 | 
| 
Nenue@9
 | 
   262 
 | 
| 
Nenue@6
 | 
   263     print('   ', cKey('itemID'), cNum(self.itemID), self.isEquipped)--@end-debug@
 | 
| 
Nenue@6
 | 
   264   end
 | 
| 
Nenue@6
 | 
   265 end
 | 
| 
Nenue@6
 | 
   266 
 | 
| 
Nenue@6
 | 
   267 do
 | 
| 
Nenue@6
 | 
   268   local inventoryID = P.status.inventoryID
 | 
| 
Nenue@6
 | 
   269   inventoryID.type = 'status'
 | 
| 
Nenue@6
 | 
   270   inventoryID.Init = function(self, slot)
 | 
| 
Nenue@6
 | 
   271     local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
   272 
 | 
| 
Nenue@6
 | 
   273     self.inventoryID = slot
 | 
| 
Nenue@9
 | 
   274     local itemID = GetInventoryItemID(self.dvars.unit, slot)
 | 
| 
Nenue@9
 | 
   275     local name = GetItemInfo(itemID)
 | 
| 
Nenue@6
 | 
   276     if not PaperDoll_IsEquippedSlot(slot) then
 | 
| 
Nenue@6
 | 
   277       self.disable = true
 | 
| 
Nenue@6
 | 
   278       self.debug_info('slot un-equipped')
 | 
| 
Nenue@6
 | 
   279       return
 | 
| 
Nenue@6
 | 
   280     end
 | 
| 
Nenue@6
 | 
   281 
 | 
| 
Nenue@9
 | 
   282     Timer_SetAttributeValues(self, 'inventoryID', itemID)
 | 
| 
Nenue@9
 | 
   283     P.status.itemID.Init(self, itemID)
 | 
| 
Nenue@6
 | 
   284     self.spellIcon = GetInventoryItemTexture(self.dvars.unit, slot)
 | 
| 
Nenue@6
 | 
   285     print('   ', cKey('inventoryID'), '=', '{'..cNum(self.inventoryID).. ' -> '.. cNum(self.itemID or 'no-equip').. '}')
 | 
| 
Nenue@6
 | 
   286   end
 | 
| 
Nenue@6
 | 
   287 end
 | 
| 
Nenue@6
 | 
   288 
 | 
| 
Nenue@6
 | 
   289 
 | 
| 
Nenue@6
 | 
   290 --- unit
 | 
| 
Nenue@6
 | 
   291 local unit = P.status.unit
 | 
| 
Nenue@6
 | 
   292 unit.type = 'status'
 | 
| 
Nenue@6
 | 
   293 unit.Init = function(self, unit)
 | 
| 
Nenue@6
 | 
   294   local print = Timer_GetPrintHandler(self)
 | 
| 
Nenue@6
 | 
   295 
 | 
| 
Nenue@6
 | 
   296   self.unitGUID = UnitGUID(unit)
 | 
| 
Nenue@6
 | 
   297   self.unit = unit
 | 
| 
Nenue@6
 | 
   298   print('   ', cWord('unitGUID'), '=', cText(self.unitGUID))
 | 
| 
Nenue@6
 | 
   299   tinsert(mod.frames.unit[unit], self)
 | 
| 
Nenue@6
 | 
   300   self.frames.unit = #mod.frames.unit[unit]
 | 
| 
Nenue@6
 | 
   301 end |