del
del
Последний раз редактировалось Сарыч; 24.07.2022 в 17:53.
Musly (23.08.2018)
Ну первое что пришло в голову
PHP код:
local Core = CreateFrame("Frame");
local _G = _G;
function Core:OnLeave()
local Update = 0;
self:SetScript("OnUpdate", function(self, elapsed)
Update = Update + elapsed;
if Update >= 0.6 then
self:SetScript("OnUpdate", nil);
MultiBarLeft:SetAlpha(0);
MultiBarRight:SetAlpha(0)
end;
end);
end;
function Core:OnEnter()
self:SetScript("OnUpdate", nil);
MultiBarRight:SetAlpha(1);
MultiBarLeft:SetAlpha(1);
end;
local function MBarAlpha(frameName)
local frame = _G[frameName];
frame:SetAlpha(0);
frame:EnableMouse(true);
frame:SetScript("OnEnter",function(self) Core:OnEnter(); end);
frame:SetScript("OnLeave",function(self) Core:OnLeave(); end);
frame:SetFrameLevel(0);
for i = 1, 12 do
_G[frameName.."Button"..i]:HookScript("OnEnter",function(self) Core:OnEnter(); end);
_G[frameName.."Button"..i]:HookScript("OnLeave",function(self) Core:OnLeave(); end);
end;
end;
MBarAlpha("MultiBarRight");
MBarAlpha("MultiBarLeft");
4)Особо не тестилКод:local z do local f = {PartyMemberFrame1,PartyMemberFrame2,PartyMemberFrame3,PartyMemberFrame4} local function u(s) local x,y = IsInInstance() if x and y == "arena" then for i = 1,GetNumPartyMembers() do f[i]:Show() end else for i = 1,GetNumPartyMembers() do f[i]:Hide() end end end z = function(s) if UnitInParty('player') then if s.c == 1 then s.x = 1 return end u() s.x = nil end end end local f = CreateFrame'frame' f:RegisterEvent'PARTY_MEMBERS_CHANGED' f:RegisterEvent'PLAYER_ENTERING_WORLD' f:RegisterEvent'PLAYER_REGEN_ENABLED' f:RegisterEvent'PLAYER_REGEN_DISABLED' f:SetScript('OnEvent',function(s,e) if e == 'PLAYER_REGEN_DISABLED' then s.c = 1 return elseif e == 'PLAYER_REGEN_ENABLED' then s.c = 0 if s.x then z(s) s.x = nil end return end z(s) end)
- - - Updated - - -
Я б сделал так
Код:hooksecurefunc("TextStatusBar_UpdateTextString",function(s) local n = s:GetName() if n == "TargetFrameHealthBar" or n == "PlayerFrameManaBar" or n == "TargetFrameManaBar" or n == "FocusFrameManaBar" then local t,v = s.TextString,s:GetValue() if v and v > 0 and t then t:SetFormattedText("%u (%u%%)",v,v/select(2,s:GetMinMaxValues())*100) end end end)
мой вариант
можно так попробоватьPHP код:
for _,v in ipairs{"Left","Right"} do
local f = _G["MultiBar"..v]
f:SetAlpha(0)
for i = 1,12 do
local b = _G["MultiBar"..v.."Button"..i]
b:HookScript("OnEnter", function() f:SetScript("OnUpdate",nil) f:SetAlpha(1) end)
b:HookScript("OnLeave",function()
local d = 1
f:SetScript("OnUpdate",function(s,e)
d = d - e
f:SetAlpha(d*1.66)
if d < 0 then s:SetScript("OnUpdate",nil) end
end)
end)
end
end
правда уже не увидеть невероятно красивые текстуры транспорта вместо плеера и анимацию их смены, транспорт будет в пет фрейме.PHP код:
do local _ = function() end PlayerFrame_AnimateOut, PlayerFrame_AnimFinished, PlayerFrame_ToPlayerArt, PlayerFrame_ToVehicleArt = _,_,_,_ end
Можно фулл скрипт мне в пм, За раниее спасибо
на паст? выложить можешь. (ни хочу ничего ни откуда качать)
- - - Updated - - -
Плюсую! найс вышло.
Ещё бы добавить медленную анимацию затухания - вообще норм было бы. FadeOut.
ну в том варианте функцию Core:OnLeave() изменить на
PHP код:
function Core:OnLeave()
local Update = 1;
self:SetScript("OnUpdate", function(self, elapsed)
Update = Update - elapsed;
MultiBarLeft:SetAlpha(Update*1.6);
MultiBarRight:SetAlpha(Update*1.6);
if Update <= 0 then self:SetScript("OnUpdate", nil); end;
end);
end;
Последний раз редактировалось Wbtest2; 25.08.2018 в 11:57.
да затухает и так после тп но не сразу , ну если нужно чтоб сразу после тп то как вариант
PHP код:
local Core = CreateFrame("Frame");
Core:RegisterEvent("PLAYER_ENTERING_WORLD");
Core:SetScript("OnEvent", function(self, event, ...) return self[event](self, ...) end);
local _G = _G;
function Core:OnLeave()
local Update = 5;
self:SetScript("OnUpdate", function(self, elapsed)
Update = Update - elapsed;
MultiBarLeft:SetAlpha(Update*1.6);
MultiBarRight:SetAlpha(Update*1.6);
if Update <= 0 then self:SetScript("OnUpdate", nil); end;
end);
end;
function Core:OnEnter()
self:SetScript("OnUpdate", nil);
MultiBarRight:SetAlpha(1);
MultiBarLeft:SetAlpha(1);
end;
function Core:PLAYER_ENTERING_WORLD()
self:SetScript("OnUpdate", nil);
MultiBarLeft:SetAlpha(0);
MultiBarRight:SetAlpha(0);
end;
local function MBarAlpha(frameName)
local frame = _G[frameName];
frame:SetAlpha(0);
frame:EnableMouse(true);
frame:SetScript("OnEnter",function(self) Core:OnEnter(); end);
frame:SetScript("OnLeave",function(self) Core:OnLeave(); end);
frame:SetFrameLevel(0);
for i = 1, 12 do
_G[frameName.."Button"..i]:HookScript("OnEnter",function(self) Core:OnEnter(); end);
_G[frameName.."Button"..i]:HookScript("OnLeave",function(self) Core:OnLeave(); end);
end;
end;
MBarAlpha("MultiBarRight");
MBarAlpha("MultiBarLeft");
Последний раз редактировалось Wbtest2; 25.08.2018 в 15:01.
вот два моих варианта на вертикальные акшнбары
раздельно
PHP код:
do
local r, l = MultiBarRight, MultiBarLeft
r:RegisterEvent("PLAYER_ENTERING_WORLD")
r:SetScript("OnEvent", function() r:SetAlpha(0) l:SetAlpha(0) end)
for _,v in ipairs{"Left","Right"} do
local f = _G["MultiBar"..v]
f:SetAlpha(0)
for i = 1,12 do
local b = _G["MultiBar"..v.."Button"..i]
b:HookScript("OnEnter", function() f:SetScript("OnUpdate",nil) f:SetAlpha(1) end)
b:HookScript("OnLeave",function()
local d = .6
f:SetScript("OnUpdate",function(s,e)
d = d - e
f:SetAlpha(d*1.66)
if d < 0 then s:SetScript("OnUpdate",nil) end
end)
end)
end
end
end
[свернуть]
вместе
PHP код:
do
local r, l = MultiBarRight, MultiBarLeft
r:RegisterEvent("PLAYER_ENTERING_WORLD")
r:SetScript("OnEvent", function() r:SetAlpha(0) l:SetAlpha(0) end)
for _,v in ipairs{"Left","Right"} do
local f = _G["MultiBar"..v]
f:SetAlpha(0)
for i = 1,12 do
local b = _G["MultiBar"..v.."Button"..i]
b:HookScript("OnEnter", function() r:SetScript("OnUpdate",nil) r:SetAlpha(1) l:SetAlpha(1) end)
b:HookScript("OnLeave",function()
local d = .6
r:SetScript("OnUpdate",function(s,e)
d = d - e
r:SetAlpha(d*1.66) l:SetAlpha(d*1.66)
if d < 0 then s:SetScript("OnUpdate",nil) end
end)
end)
end
end
end
[свернуть]
наверное нужно пояснить, сразу было лень, есть две причины не вешать скрипты на бары (невидимые фреймы под кнопками).
во первых, если перемещать правый бар, то в бою когда садишься/слазиешь с транспорта, он будет вставать на старое место.
обойти это можно меняя позицию первой кнопки правого бара, а не сам правый бар. в этом случае они могут быть в совершенно разных местах.
да, можно легко сделать другие фреймы, подложить их под кнопки и на них повешать эти скрипты, но есть вторая причина этого не делать.
например у вас пять первых кнопок занято спеллами/макросами, а остальные пустые и под ними ну например неймплейта. вы такие по этому неймплейту клац клац, но в цель он не возьмется по тому что вы клацаете по невидимому фрейму.
Может кто-то помочь дописать? нужно чтобы во время боя, панель автоматически отображалась, а после боя, снова скрывалась.PHP код:
do
local r, l = MultiBarRight, MultiBarLeft
r:RegisterEvent("PLAYER_ENTERING_WORLD")
r:SetScript("OnEvent", function() r:SetAlpha(0) l:SetAlpha(0) end)
for _,v in ipairs{"Left","Right"} do
local f = _G["MultiBar"..v]
f:SetAlpha(0)
for i = 1,12 do
local b = _G["MultiBar"..v.."Button"..i]
b:HookScript("OnEnter", function() r:SetScript("OnUpdate",nil) r:SetAlpha(1) l:SetAlpha(1) end)
b:HookScript("OnLeave",function()
local d = .6
r:SetScript("OnUpdate",function(s,e)
d = d - e
r:SetAlpha(d*1.66) l:SetAlpha(d*1.66)
if d < 0 then s:SetScript("OnUpdate",nil) end
end)
end)
end
end
end