lotrointerface.com
Search Downloads

LoTROInterface SVN KragenBars

[/] [branches/] [3.21/] [KragenBars/] [SkillMultiSlot.lua] - Blame information for rev 72

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 72 Kragenwar-3044
import "Turbine.UI";
2 Kragenwar-3044
import "Turbine.UI.Lotro";
3 Kragenwar-3044
import "KragenPlugs.Utils";
4 Kragenwar-3044
import "KragenPlugs.Utils.Extensions";
5 Kragenwar-3044
import "KragenPlugs.KragenBars";
6 Kragenwar-3044
 
7 Kragenwar-3044
SkillMultiSlot = class ( KragenPlugs.Utils.Extensions.SimpleWindow );
8 Kragenwar-3044
 
9 Kragenwar-3044
function SkillMultiSlot:Constructor ( parent, x, y, active )
10 Kragenwar-3044
        KragenPlugs.Utils.Extensions.SimpleWindow.Constructor( self );
11 Kragenwar-3044
 
12 Kragenwar-3044
        -- declare variables
13 Kragenwar-3044
        self.parent = parent;
14 Kragenwar-3044
        self.x = x;
15 Kragenwar-3044
        self.y = y;
16 Kragenwar-3044
        self.active = active;
17 Kragenwar-3044
    self.hover = false;
18 Kragenwar-3044
        self.lock = false;
19 Kragenwar-3044
        self.effectid = 0;
20 Kragenwar-3044
        self.state = false;
21 Kragenwar-3044
        self.incombat   = true;
22 Kragenwar-3044
        self.outcombat  = true;
23 Kragenwar-3044
 
24 Kragenwar-3044
        -- SHORTCUTS
25 Kragenwar-3044
        self.shortcuts = { };
26 Kragenwar-3044
        self.shortcuts[1] = { };
27 Kragenwar-3044
        self.totalshortcuts = { };
28 Kragenwar-3044
        self.totalshortcuts[1] = 0;
29 Kragenwar-3044
        self.currentshortcut = { };
30 Kragenwar-3044
        self.currentshortcut[1] = 1;
31 Kragenwar-3044
        self.currentlayer = 1;
32 Kragenwar-3044
        self.totallayers = 1;
33 Kragenwar-3044
 
34 Kragenwar-3044
        -- QUICKSLOT
35 Kragenwar-3044
        self.quickslot = Turbine.UI.Lotro.Quickslot();
36 Kragenwar-3044
        self.quickslot:SetParent(self);
37 Kragenwar-3044
        self.quickslot:SetSize(35,35);
38 Kragenwar-3044
        self.quickslot:SetVisible(true);
39 Kragenwar-3044
 
40 Kragenwar-3044
        -- TIMER
41 Kragenwar-3044
        self.timer = Timer();
42 Kragenwar-3044
        self.timerOn = true;
43 Kragenwar-3044
        self.timerEnd = true;
44 Kragenwar-3044
 
45 Kragenwar-3044
        -- TIMER EVENT
46 Kragenwar-3044
        self.timer.TimerElapsed = function ()
47 Kragenwar-3044
        if (self.timerEnd) then
48 Kragenwar-3044
                        self:SetHover( true );
49 Kragenwar-3044
                        self:SetActive( true );
50 Kragenwar-3044
                else
51 Kragenwar-3044
                    self:SetActive( false );
52 Kragenwar-3044
                end
53 Kragenwar-3044
        end
54 Kragenwar-3044
 
55 Kragenwar-3044
        -- set properties
56 Kragenwar-3044
        self:SetParent( parent );
57 Kragenwar-3044
        self:SetPosition( (x - 1) * 35, (y - 1) * 35 );
58 Kragenwar-3044
        self:SetSize(35, 35);
59 Kragenwar-3044
        self:SetVisible(true);
60 Kragenwar-3044
        self:SetActive( self.active );
61 Kragenwar-3044
        self:SetFadeSpeed(.3);
62 Kragenwar-3044
 
63 Kragenwar-3044
    -- EVENTS
64 Kragenwar-3044
    -- scrolling event
65 Kragenwar-3044
        self.quickslot.MouseWheel = function(sender,args)
66 Kragenwar-3044
            --if ( self:IsAltKeyDown()) then
67 Kragenwar-3044
            --self:LockScroll(not self.lock);
68 Kragenwar-3044
                --else
69 Kragenwar-3044
                if (not self.lock or self:IsControlKeyDown()) then
70 Kragenwar-3044
                        if (self.totallayers == 1 or self.IsAltKeyDown()) then
71 Kragenwar-3044
                                self.currentshortcut[self.currentlayer] = self.currentshortcut[self.currentlayer] + (args.Direction * -1);
72 Kragenwar-3044
                                if (self.currentshortcut[self.currentlayer] > self.totalshortcuts[self.currentlayer]) then
73 Kragenwar-3044
                                self.currentshortcut[self.currentlayer] = 1;
74 Kragenwar-3044
                                elseif (self.currentshortcut[self.currentlayer] == 0) then
75 Kragenwar-3044
                                self.currentshortcut[self.currentlayer] = self.totalshortcuts[self.currentlayer];
76 Kragenwar-3044
                                end
77 Kragenwar-3044
                        self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( 6.000000, self.shortcuts[self.currentlayer][self.currentshortcut[self.currentlayer]].hex ) );
78 Kragenwar-3044
                    else
79 Kragenwar-3044
                        self.currentlayer = self.currentlayer + (args.Direction * -1);
80 Kragenwar-3044
                        if (self.currentlayer > self.totallayers) then
81 Kragenwar-3044
                                        self.currentlayer = 1;
82 Kragenwar-3044
                                elseif (self.currentlayer == 0) then
83 Kragenwar-3044
                                        self.currentlayer = self.totallayers;
84 Kragenwar-3044
                                end
85 Kragenwar-3044
 
86 Kragenwar-3044
                        if (self.totalshortcuts[self.currentlayer] == nil) then
87 Kragenwar-3044
                                        local counter = 1;
88 Kragenwar-3044
                                while (self.totalshortcuts[self.currentlayer] == nil and counter < self.totallayers) do
89 Kragenwar-3044
                                        self.currentlayer = self.currentlayer + (args.Direction * -1);
90 Kragenwar-3044
                                        if (self.currentlayer > self.totallayers) then
91 Kragenwar-3044
                                                        self.currentlayer = 1;
92 Kragenwar-3044
                                                elseif (self.currentlayer == 0) then
93 Kragenwar-3044
                                                        self.currentlayer = self.totallayers;
94 Kragenwar-3044
                                                end
95 Kragenwar-3044
                                                counter = counter + 1;
96 Kragenwar-3044
                                        end
97 Kragenwar-3044
                                end
98 Kragenwar-3044
 
99 Kragenwar-3044
                                self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( 6.000000, self.shortcuts[self.currentlayer][self.currentshortcut[self.currentlayer]].hex ) );
100 Kragenwar-3044
                    end
101 Kragenwar-3044
           end
102 Kragenwar-3044
        end
103 Kragenwar-3044
 
104 Kragenwar-3044
        -- hover mouse enter event
105 Kragenwar-3044
        self.quickslot.MouseEnter = function(sender,args)
106 Kragenwar-3044
        if (self.hover and self.active and (self.totallayers > 1 or self.totalshortcuts[1] ~= 0)) then
107 Kragenwar-3044
                        self:SetOpacity(settings.opacity);
108 Kragenwar-3044
                end
109 Kragenwar-3044
        end
110 Kragenwar-3044
 
111 Kragenwar-3044
        -- hover mouse leave event
112 Kragenwar-3044
        self.quickslot.MouseLeave = function(sender,args)
113 Kragenwar-3044
            if (self.hover and self.active and (self.totallayers > 1 or self.totalshortcuts[1] ~= 0)) then
114 Kragenwar-3044
                        self:SetOpacity(settings.opacity * .5);
115 Kragenwar-3044
                end
116 Kragenwar-3044
        end
117 Kragenwar-3044
 
118 Kragenwar-3044
        -- swap positions when skill is dropped on the skill slot
119 Kragenwar-3044
        self.quickslot.DragDrop = function(sender, args)
120 Kragenwar-3044
            self:ResetQuickslot();
121 Kragenwar-3044
        KragenBars:SwapSlots(self, args.DragDropInfo:GetShortcut():GetData());
122 Kragenwar-3044
        end
123 Kragenwar-3044
 
124 Kragenwar-3044
end
125 Kragenwar-3044
 
126 Kragenwar-3044
-- SET ACTIVE (To be used in place of SetVisible)
127 Kragenwar-3044
function SkillMultiSlot:SetActive( active )
128 Kragenwar-3044
        self.active = active;
129 Kragenwar-3044
        if ( self.active and self.totalshortcuts[1] ~= 0 and ( ( vars.player:IsInCombat() and self.incombat ) or ( not vars.player:IsInCombat() and self.outcombat ) ) ) then
130 Kragenwar-3044
                if (self.hover) then
131 Kragenwar-3044
                        self:SetOpacity(settings.opacity * .5);
132 Kragenwar-3044
                else
133 Kragenwar-3044
                        self:SetOpacity(settings.opacity);
134 Kragenwar-3044
                end
135 Kragenwar-3044
                self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( 6.000000, self.shortcuts[self.currentlayer][self.currentshortcut[self.currentlayer]].hex ) );
136 Kragenwar-3044
        else
137 Kragenwar-3044
        self:SetOpacity(0);
138 Kragenwar-3044
        self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( Turbine.UI.Lotro.ShortcutType.Undefined, "" ) );
139 Kragenwar-3044
        end
140 Kragenwar-3044
end
141 Kragenwar-3044
 
142 Kragenwar-3044
-- SET STATE (To be used to track the effect state of buffs/debuffs)
143 Kragenwar-3044
function SkillMultiSlot:SetState( state, visible, id )
144 Kragenwar-3044
    -- update state and effect id
145 Kragenwar-3044
        if ( state ) then
146 Kragenwar-3044
                self.state = true;
147 Kragenwar-3044
                self.effectid = id;
148 Kragenwar-3044
        else
149 Kragenwar-3044
                if ( id == self.effectid ) then
150 Kragenwar-3044
                    self.state = false;
151 Kragenwar-3044
                        self.effectid = 0;
152 Kragenwar-3044
                end
153 Kragenwar-3044
 
154 Kragenwar-3044
        end
155 Kragenwar-3044
 
156 Kragenwar-3044
    -- update visibility
157 Kragenwar-3044
        if (self.effectid == 0 or state) then
158 Kragenwar-3044
        self:SetActive(visible);
159 Kragenwar-3044
        end
160 Kragenwar-3044
end
161 Kragenwar-3044
 
162 Kragenwar-3044
-- RESET QUICKSLOT SHORTCUT
163 Kragenwar-3044
function SkillMultiSlot:ResetQuickslot()
164 Kragenwar-3044
        self:SetIndex(self.currentshortcut[self.currentlayer], self.currentlayer);
165 Kragenwar-3044
end
166 Kragenwar-3044
 
167 Kragenwar-3044
-- SET HOVER (Set the hover state)
168 Kragenwar-3044
function SkillMultiSlot:SetHover(bol)
169 Kragenwar-3044
        self.hover = bol;
170 Kragenwar-3044
        if (self.active and (self.totallayers > 1 or self.totalshortcuts[1] ~= 0)) then
171 Kragenwar-3044
                if (bol) then
172 Kragenwar-3044
                        self:SetOpacity(settings.opacity * .5);
173 Kragenwar-3044
                else
174 Kragenwar-3044
                    self:SetOpacity(settings.opacity);
175 Kragenwar-3044
                end
176 Kragenwar-3044
        end
177 Kragenwar-3044
end
178 Kragenwar-3044
 
179 Kragenwar-3044
-- SET COMBAT (Sets the combat visibility variables)
180 Kragenwar-3044
function SkillMultiSlot:SetCombat( incombat, outcombat )
181 Kragenwar-3044
        self.incombat   = incombat;
182 Kragenwar-3044
        self.outcombat  = outcombat;
183 Kragenwar-3044
        self:SetActive(self.active);
184 Kragenwar-3044
end
185 Kragenwar-3044
 
186 Kragenwar-3044
-- REFRESH COMBAT (Refresh Visibility for combat changes)
187 Kragenwar-3044
function SkillMultiSlot:RefreshCombat()
188 Kragenwar-3044
        self:SetActive( self.active );
189 Kragenwar-3044
end
190 Kragenwar-3044
 
191 Kragenwar-3044
-- LOAD POSITION, RECALL SAVED POSITION AND PARENT
192 Kragenwar-3044
function SkillMultiSlot:LoadPosition(data)
193 Kragenwar-3044
        self.x = data.pos[1];
194 Kragenwar-3044
        self.y = data.pos[2];
195 Kragenwar-3044
        self:SetPosition( (self.x - 1) * 35, (self.y - 1) * 35 );
196 Kragenwar-3044
 
197 Kragenwar-3044
        if (data.parent == nil) then
198 Kragenwar-3044
                self:SetParent(limbo);
199 Kragenwar-3044
        else
200 Kragenwar-3044
                self:SetParent(data.parent);
201 Kragenwar-3044
        end
202 Kragenwar-3044
 
203 Kragenwar-3044
        self.parent = data.parent;
204 Kragenwar-3044
 
205 Kragenwar-3044
        self:LockScroll(data.lock);
206 Kragenwar-3044
 
207 Kragenwar-3044
        for k,v in pairs(data.current) do
208 Kragenwar-3044
                self.currentshortcut[k] = v;
209 Kragenwar-3044
        end
210 Kragenwar-3044
 
211 Kragenwar-3044
        self:SetIndex(data.current[data.layer], data.layer);
212 Kragenwar-3044
end
213 Kragenwar-3044
 
214 Kragenwar-3044
-- SWAP POSITION WITH ANOTHER ItemSlot (REF)
215 Kragenwar-3044
function SkillMultiSlot:SwapPosition(ref)
216 Kragenwar-3044
        local newx = ref.x;
217 Kragenwar-3044
        local newy = ref.y;
218 Kragenwar-3044
        local newparent = ref.parent;
219 Kragenwar-3044
 
220 Kragenwar-3044
    self:SetPosition( (newx - 1) * 35, (newy - 1) * 35 );
221 Kragenwar-3044
    self:SetParent(newparent);
222 Kragenwar-3044
 
223 Kragenwar-3044
        if (not ref.blank) then
224 Kragenwar-3044
                if (self.parent ~= nil) then
225 Kragenwar-3044
                        ref:SetPosition( (self.x - 1) * 35, (self.y - 1) * 35 );
226 Kragenwar-3044
                        ref:SetParent(self.parent);
227 Kragenwar-3044
                else
228 Kragenwar-3044
                        ref:SetParent(limbo);
229 Kragenwar-3044
                end
230 Kragenwar-3044
 
231 Kragenwar-3044
                ref.x = self.x;
232 Kragenwar-3044
                ref.y = self.y;
233 Kragenwar-3044
                ref.parent = self.parent;
234 Kragenwar-3044
        end
235 Kragenwar-3044
 
236 Kragenwar-3044
        self.x = newx;
237 Kragenwar-3044
        self.y = newy;
238 Kragenwar-3044
        self.parent = newparent;
239 Kragenwar-3044
 
240 Kragenwar-3044
end
241 Kragenwar-3044
 
242 Kragenwar-3044
-- ADD SHORTCUT: ADD A SKILL TO THE MULTI SLOT
243 Kragenwar-3044
function SkillMultiSlot:AddShortCut(name, level, hex, layer)
244 Kragenwar-3044
        if (layer == nil) then
245 Kragenwar-3044
                layer = 1;
246 Kragenwar-3044
        end
247 Kragenwar-3044
        if (layer > self.totallayers) then
248 Kragenwar-3044
                self.totallayers = layer;
249 Kragenwar-3044
                self.totalshortcuts[layer] = 0;
250 Kragenwar-3044
                self.currentshortcut[layer] = 1;
251 Kragenwar-3044
                self.shortcuts[layer] = { };
252 Kragenwar-3044
        end
253 Kragenwar-3044
        self.totalshortcuts[layer] = self.totalshortcuts[layer] + 1;
254 Kragenwar-3044
        self.shortcuts[layer][self.totalshortcuts[layer]] = { ["level"] = level, ["hex"] = hex };
255 Kragenwar-3044
 
256 Kragenwar-3044
        if (self.totalshortcuts[layer] == 1 and self.totallayers == 1) then
257 Kragenwar-3044
     self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( 6.000000, self.shortcuts[1][1].hex ) );
258 Kragenwar-3044
        end
259 Kragenwar-3044
end
260 Kragenwar-3044
 
261 Kragenwar-3044
-- SET INDEX: Set the currently visible skillslot
262 Kragenwar-3044
function SkillMultiSlot:SetIndex(int, layer)
263 Kragenwar-3044
        if (layer == nil) then
264 Kragenwar-3044
                layer = 1;
265 Kragenwar-3044
        end
266 Kragenwar-3044
        if (self.totalshortcuts[layer] ~= 0) then
267 Kragenwar-3044
                if (int > 0 and int <= self.totalshortcuts[layer] and vars.playerlevel >= self.shortcuts[layer][int].level) then
268 Kragenwar-3044
                    self.currentshortcut[layer] = int;
269 Kragenwar-3044
                self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( 6.000000, self.shortcuts[layer][int].hex ) );
270 Kragenwar-3044
                else
271 Kragenwar-3044
                        self.currentshortcut[layer] = 1;
272 Kragenwar-3044
                self.quickslot:SetShortcut( Turbine.UI.Lotro.Shortcut( 6.000000, self.shortcuts[layer][1].hex ) );
273 Kragenwar-3044
                end
274 Kragenwar-3044
        else
275 Kragenwar-3044
                self:SetActive(false);
276 Kragenwar-3044
        end
277 Kragenwar-3044
end
278 Kragenwar-3044
 
279 Kragenwar-3044
-- LEVEL CHECK: Removing the skills that are beyond the players level
280 Kragenwar-3044
function SkillMultiSlot:LevelCheck()
281 Kragenwar-3044
        local check = false;
282 Kragenwar-3044
        for layer = 1, self.totallayers do
283 Kragenwar-3044
                if (self.totalshortcuts[layer] ~= nil) then
284 Kragenwar-3044
                    for i = 1, self.totalshortcuts[layer] do
285 Kragenwar-3044
                                if (self.shortcuts[layer][i].level > vars.playerlevel) then
286 Kragenwar-3044
                                        self.totalshortcuts[layer] = self.totalshortcuts[layer] - 1;
287 Kragenwar-3044
                                end
288 Kragenwar-3044
                                if (self.totalshortcuts[layer] == 0) then
289 Kragenwar-3044
                                    check = false;
290 Kragenwar-3044
                                else
291 Kragenwar-3044
                                    check = true;
292 Kragenwar-3044
                                end
293 Kragenwar-3044
                        end
294 Kragenwar-3044
                end
295 Kragenwar-3044
        end
296 Kragenwar-3044
        if (not check) then
297 Kragenwar-3044
                self:SetActive(false);
298 Kragenwar-3044
                self:SetActive(true);
299 Kragenwar-3044
        end
300 Kragenwar-3044
        if (self.savedcurrentshortcut ~= nil) then
301 Kragenwar-3044
                for k,v in pairs(self.savedcurrentshortcut) do
302 Kragenwar-3044
                        if (self.totalshortcuts[k] ~= nil and v <= self.totalshortcuts[k]) then
303 Kragenwar-3044
                                self.currentshortcut[k] = v;
304 Kragenwar-3044
                        else
305 Kragenwar-3044
                                self.currentshortcut[k] = 1;
306 Kragenwar-3044
                        end
307 Kragenwar-3044
                end
308 Kragenwar-3044
                if (self.shortcuts[self.savedcurrentlayer][self.currentshortcut[self.savedcurrentlayer]] ~= nil) then
309 Kragenwar-3044
                        self.currentlayer = self.savedcurrentlayer;
310 Kragenwar-3044
                else
311 Kragenwar-3044
                        self.currentlayer = 1;
312 Kragenwar-3044
                end
313 Kragenwar-3044
        end
314 Kragenwar-3044
        self:SetIndex(self.currentshortcut[self.currentlayer], self.currentlayer);
315 Kragenwar-3044
        self:SetOpacity(settings.opacity);
316 Kragenwar-3044
end
317 Kragenwar-3044
 
318 Kragenwar-3044
-- CLEAR: WIPE ALL SHORTCUTS
319 Kragenwar-3044
function SkillMultiSlot:Clear()
320 Kragenwar-3044
        self.savedcurrentshortcut = self.currentshortcut;
321 Kragenwar-3044
        self.savedcurrentlayer = self.currentlayer;
322 Kragenwar-3044
 
323 Kragenwar-3044
        self.shortcuts = { };
324 Kragenwar-3044
        self.shortcuts[1] = { };
325 Kragenwar-3044
        self.totalshortcuts = { };
326 Kragenwar-3044
        self.totalshortcuts[1] = 0;
327 Kragenwar-3044
        self.totallayers = 1;
328 Kragenwar-3044
        self.currentshortcut = { };
329 Kragenwar-3044
        self.currentshortcut[1] = 1;
330 Kragenwar-3044
        self.currentlayer = 1;
331 Kragenwar-3044
end
332 Kragenwar-3044
 
333 Kragenwar-3044
-- LOCK SCROLL (Locks multi so ctrl must be held down to advance)
334 Kragenwar-3044
function SkillMultiSlot:LockScroll(bol)
335 Kragenwar-3044
        --self.lock = bol;
336 Kragenwar-3044
end
337 Kragenwar-3044
 
338 Kragenwar-3044
-- START TIMER (Starts the timer, bol is true for Early Warnings and false for Skill Hacks)
339 Kragenwar-3044
function SkillMultiSlot:StartTimer(duration, bol)
340 Kragenwar-3044
        self.timer:Stop();
341 Kragenwar-3044
        self.timer:SetInterval(duration);
342 Kragenwar-3044
        self.timer:Start();
343 Kragenwar-3044
        self.timerEnd = bol;
344 Kragenwar-3044
end
345 Kragenwar-3044
 
346 Kragenwar-3044
-- ROTATE BAR: SWAP THE SLOTS X AND Y POSITION
347 Kragenwar-3044
function SkillMultiSlot:RotateBar()
348 Kragenwar-3044
        local newx = self.y;
349 Kragenwar-3044
        local newy = self.x;
350 Kragenwar-3044
 
351 Kragenwar-3044
        self:SetPosition( (newx - 1) * 35, (newy - 1) * 35 );
352 Kragenwar-3044
 
353 Kragenwar-3044
        self.x = newx;
354 Kragenwar-3044
        self.y = newy;
355 Kragenwar-3044
end
356 Kragenwar-3044
 

All times are GMT -5. The time now is 04:23 AM.


Our Network
EQInterface | EQ2Interface | Minion | WoWInterface | ESOUI | LoTROInterface | MMOUI | Swtorui