Приветствуем вас на форуме проекта WoW Circle. Если вы читаете это, значит не зарегистрировались у нас. Для того, чтобы получить доступ к расширенным возможностям нашего форума нажмите сюда и пройди регистрацию, которая не займет у вас много времени. После регистрации будут доступны новые, более расширенные, возможности.
Кастом стандартных плейтов - Страница 3

Упомянутые в теме пользователи:

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 25 по 36 из 38
  1. #25
    Заблокирован
    Регистрация
    09.06.2016
    Адрес
    Rivne, Ukraine
    Сообщений
    907
    Поблагодарил(а)
    244
    Получено благодарностей: 412 (сообщений: 237).
    Репутация: 412
    Цитата Сообщение от ida Посмотреть сообщение
    Спруди, актуально все еще?
    А, да, вот. Правда мне не оч нравится что их приоритеты(выше-ниже) распределяются без какой то логики. В идеале бы сделать зависимость от расстояния к юниту плейта, но это уже сишную часть ковырять надо.

    PHP код:
    local CLASSICON_SIZE 28
    local ACCURACY 
    8
    local CLASS_ICON_TCOORDS 
    CLASS_ICON_TCOORDS
    local UnitClass 
    UnitClass
    local pairs 
    pairs

    local nameplates 
    = {}


    local math_round
    do
        
    local math_floor math.floor
        math_round 
    = function(x)
            return 
    math_floor(x+0.5)
        
    end
    end

    local 
    function GetUnitTypeByNameplateRGB(r,g,b)
        if 
    == 0 then -- red
            
    return "enemy"
        
    elseif == 0 then -- green
            
    return "friend_pvp"
        
    elseif == 0 then -- blue
            
    return "friend_nopvp"
        
    elseif 1.99 and == 0 then -- yellow
            
    return "neutral"
        
    else
            return 
    "enemy_player"
        
    end
    end

    local GetClassByRGB
    do
        
    local RAID_CLASS_COLORS RAID_CLASS_COLORS
        GetClassByRGB 
    = function(r,g,b)
            for class,
    tbl in pairs(RAID_CLASS_COLORS) do
                if 
    math_round(tbl.r*ACCURACY) == math_round(r*ACCURACY)
                    and 
    math_round(tbl.g*ACCURACY) == math_round(g*ACCURACY)
                    and 
    math_round(tbl.b*ACCURACY) == math_round(b*ACCURACYthen

                    
    return class
                
    end
            end
        end
    end

    local 
    function healthbar_UpdateClassIcon(self,r,g,b)
        if 
    GetUnitTypeByNameplateRGB(r,g,b) == "enemy_player" then
            local 
    class = GetClassByRGB(r,g,b)
            if class 
    then
                self
    .classIcon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[class]))
                
    self.classIcon:Show()
                return
            
    end
        end

        self
    .classIcon:Hide()
    end

    local 
    function healthbar_valuechanged_cb(self,value)
        
    self.text:SetText(value)
    end

    local 
    function healthbar_show_cb(self)
        
    self.text:SetText(self:GetValue())
    end

    local 
    function healthbar_update_cb(self)
        
    local r,g,self:GetStatusBarColor()
        if 
    not (== self.and == self.and == self.bthen
            healthbar_UpdateClassIcon
    (self,r,g,b)
            
    self.r,self.g,self.r,g,b
        end
    end

    local 
    function nameplate_update_cb(self)
        
    self:SetAlpha(1)
    end

    local 
    function InitNamePlate(frame)
        
    local healthbar frame:GetChildren()
        
    healthbar.text healthbar:CreateFontString(nil,"ARTWORK")
        
    healthbar.text:SetFont("Fonts\\FRIZQT__.TTF",11,"OUTLINE")
        
    healthbar.text:SetPoint("CENTER")

        
    healthbar.classIcon healthbar:CreateTexture(nil,"BORDER")
        
    healthbar.classIcon:SetPoint("RIGHT",healthbar,"LEFT",-4,0)
        
    healthbar.classIcon:SetSize(CLASSICON_SIZE,CLASSICON_SIZE)
        
    healthbar.classIcon:SetTexture("Interface\\TargetingFrame\\UI-Classes-Circles")
        
    healthbar.classIcon:Hide()

        
    healthbar_show_cb(healthbar)
        
    healthbar:SetScript("OnValueChanged",healthbar_valuechanged_cb)
        
    healthbar:SetScript("OnShow",healthbar_show_cb)
        
    healthbar:SetScript("OnUpdate",healthbar_update_cb)
        
    frame:SetScript("OnUpdate",nameplate_update_cb)

        
    table.insert(nameplates,frame)
    end

    local 
    function IdentifyFrame(self)
        if 
    self:GetName() then return end
        
    if self.GetRegions then
            local region 
    self:GetRegions()
            if 
    region.GetTexture then
                local texturePath 
    region:GetTexture()
                if 
    texturePath == "Interface\\TargetingFrame\\UI-TargetingFrame-Flash" then
                    
    return "NamePlate"
                
    elseif texturePath == "Interface\\Tooltips\\ChatBubble-Background" then
                    
    return "ChatBubble"
                
    end
            end
        end
    end

    local 
    function iterateChildrens(object,...)
        if 
    not object then return end

        local type 
    IdentifyFrame(object)
        if 
    type == "NamePlate" then
            InitNamePlate
    (object)
        elseif 
    type == "ChatBubble" then
            
    --InitChatBubble(object)
        
    end

        
    return iterateChildrens(...)
    end


    local select
    ,WorldFrame select,WorldFrame
    local lastWorldFrameChildsCount 
    0
    CreateFrame
    ("frame"):SetScript("OnUpdate",function()
        
    local worldFrameChildsCount WorldFrame:GetNumChildren()
        if 
    worldFrameChildsCount ~= lastWorldFrameChildsCount then
            iterateChildrens
    (select(lastWorldFrameChildsCount+1,WorldFrame:GetChildren()))
            
    lastWorldFrameChildsCount worldFrameChildsCount
        end


        local level 
    1
        
    for _,frame in pairs(nameplates) do
            if 
    frame:IsShown() then
                
    if frame:GetFrameLevel() == 20 then -- is target
                    frame
    :SetFrameLevel(#nameplates*2)
                
    else
                    
    level level 2
                    frame
    :SetFrameLevel(level)
                
    end
            end
        end
    end

    - - - Updated - - -

    Цитата Сообщение от Попкина_Сладость Посмотреть сообщение
    неа)
    Удаляется иконка а надо показ ПХ!
    Проще напиши код на Иконку класса противника, без показа ХП игрока!
    А я по мере необходимости буду менять код да и всё...

    Скрытый текст

    Тогда закомменти как здесь
    Untitled.png
    [свернуть]

  2. #26
    Старожил Аватар для ida
    Регистрация
    24.04.2020
    Сообщений
    154
    Поблагодарил(а)
    33
    Получено благодарностей: 60 (сообщений: 31).
    Репутация: 60
    Цитата Сообщение от Sproody Посмотреть сообщение
    А, да, вот. Правда мне не оч нравится что их приоритеты(выше-ниже) распределяются без какой то логики. В идеале бы сделать зависимость от расстояния к юниту плейта, но это уже сишную часть ковырять надо.

    PHP код:
    local CLASSICON_SIZE 28
    local ACCURACY 
    8
    local CLASS_ICON_TCOORDS 
    CLASS_ICON_TCOORDS
    local UnitClass 
    UnitClass
    local pairs 
    pairs

    local nameplates 
    = {}


    local math_round
    do
        
    local math_floor math.floor
        math_round 
    = function(x)
            return 
    math_floor(x+0.5)
        
    end
    end

    local 
    function GetUnitTypeByNameplateRGB(r,g,b)
        if 
    == 0 then -- red
            
    return "enemy"
        
    elseif == 0 then -- green
            
    return "friend_pvp"
        
    elseif == 0 then -- blue
            
    return "friend_nopvp"
        
    elseif 1.99 and == 0 then -- yellow
            
    return "neutral"
        
    else
            return 
    "enemy_player"
        
    end
    end

    local GetClassByRGB
    do
        
    local RAID_CLASS_COLORS RAID_CLASS_COLORS
        GetClassByRGB 
    = function(r,g,b)
            for class,
    tbl in pairs(RAID_CLASS_COLORS) do
                if 
    math_round(tbl.r*ACCURACY) == math_round(r*ACCURACY)
                    and 
    math_round(tbl.g*ACCURACY) == math_round(g*ACCURACY)
                    and 
    math_round(tbl.b*ACCURACY) == math_round(b*ACCURACYthen

                    
    return class
                
    end
            end
        end
    end

    local 
    function healthbar_UpdateClassIcon(self,r,g,b)
        if 
    GetUnitTypeByNameplateRGB(r,g,b) == "enemy_player" then
            local 
    class = GetClassByRGB(r,g,b)
            if class 
    then
                self
    .classIcon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[class]))
                
    self.classIcon:Show()
                return
            
    end
        end

        self
    .classIcon:Hide()
    end

    local 
    function healthbar_valuechanged_cb(self,value)
        
    self.text:SetText(value)
    end

    local 
    function healthbar_show_cb(self)
        
    self.text:SetText(self:GetValue())
    end

    local 
    function healthbar_update_cb(self)
        
    local r,g,self:GetStatusBarColor()
        if 
    not (== self.and == self.and == self.bthen
            healthbar_UpdateClassIcon
    (self,r,g,b)
            
    self.r,self.g,self.r,g,b
        end
    end

    local 
    function nameplate_update_cb(self)
        
    self:SetAlpha(1)
    end

    local 
    function InitNamePlate(frame)
        
    local healthbar frame:GetChildren()
        
    healthbar.text healthbar:CreateFontString(nil,"ARTWORK")
        
    healthbar.text:SetFont("Fonts\\FRIZQT__.TTF",11,"OUTLINE")
        
    healthbar.text:SetPoint("CENTER")

        
    healthbar.classIcon healthbar:CreateTexture(nil,"BORDER")
        
    healthbar.classIcon:SetPoint("RIGHT",healthbar,"LEFT",-4,0)
        
    healthbar.classIcon:SetSize(CLASSICON_SIZE,CLASSICON_SIZE)
        
    healthbar.classIcon:SetTexture("Interface\\TargetingFrame\\UI-Classes-Circles")
        
    healthbar.classIcon:Hide()

        
    healthbar_show_cb(healthbar)
        
    healthbar:SetScript("OnValueChanged",healthbar_valuechanged_cb)
        
    healthbar:SetScript("OnShow",healthbar_show_cb)
        
    healthbar:SetScript("OnUpdate",healthbar_update_cb)
        
    frame:SetScript("OnUpdate",nameplate_update_cb)

        
    table.insert(nameplates,frame)
    end

    local 
    function IdentifyFrame(self)
        if 
    self:GetName() then return end
        
    if self.GetRegions then
            local region 
    self:GetRegions()
            if 
    region.GetTexture then
                local texturePath 
    region:GetTexture()
                if 
    texturePath == "Interface\\TargetingFrame\\UI-TargetingFrame-Flash" then
                    
    return "NamePlate"
                
    elseif texturePath == "Interface\\Tooltips\\ChatBubble-Background" then
                    
    return "ChatBubble"
                
    end
            end
        end
    end

    local 
    function iterateChildrens(object,...)
        if 
    not object then return end

        local type 
    IdentifyFrame(object)
        if 
    type == "NamePlate" then
            InitNamePlate
    (object)
        elseif 
    type == "ChatBubble" then
            
    --InitChatBubble(object)
        
    end

        
    return iterateChildrens(...)
    end


    local select
    ,WorldFrame select,WorldFrame
    local lastWorldFrameChildsCount 
    0
    CreateFrame
    ("frame"):SetScript("OnUpdate",function()
        
    local worldFrameChildsCount WorldFrame:GetNumChildren()
        if 
    worldFrameChildsCount ~= lastWorldFrameChildsCount then
            iterateChildrens
    (select(lastWorldFrameChildsCount+1,WorldFrame:GetChildren()))
            
    lastWorldFrameChildsCount worldFrameChildsCount
        end


        local level 
    1
        
    for _,frame in pairs(nameplates) do
            if 
    frame:IsShown() then
                
    if frame:GetFrameLevel() == 20 then -- is target
                    frame
    :SetFrameLevel(#nameplates*2)
                
    else
                    
    level level 2
                    frame
    :SetFrameLevel(level)
                
    end
            end
        end
    end

    - - - Updated - - -



    Скрытый текст

    Тогда закомменти как здесь
    Untitled.png
    [свернуть]
    Спасибо, друг!
    А какие именно строчки кода отвечают за возможность убрать смешивание плейтов? Я бы их вставил в код из 2 поста, а то не особо удобно юзать код который ты написал для чела выше с иконками и цифрами хп целиком без "к", мне с "к" и без иконок удобнее.
    UPD. Хотя вроде уже сам нашел
    Последний раз редактировалось ida; 12.07.2020 в 12:46.

  3. #27
    Старожил
    Регистрация
    17.06.2018
    Сообщений
    264
    Поблагодарил(а)
    6
    Получено благодарностей: 150 (сообщений: 107).
    Репутация: 150
    значение хп в цифрах на хпбаре уныло как то выглядит.
    придумал другую фигню, ну как придумал, в доте2 увидал. там просто разделители ставятся и уже примерно понятно сколько текущее и сколько максимальное.

    для дефолтных неймплейтов



    PHP код:
    do
        
    local hp 10000
        local cap 
    10
        
        local w
    ,numselect,ipairs WorldFrame,0select,ipairs 
        
        local 
    function divide(s,max)
            
    local w,ww = (s:GetWidth()/max)*hp,0
            local n 
    max/hp
            
    if cap then return end
            
    for 1do
                
    local a s.d[i]
                if 
    not a then 
                    a 
    s:CreateTexture(nil,"OVERLAY")
                    
    a:SetTexture('Interface\\MainMenuBar\\UI-ExhaustionTickNormal')
                    
    local size s:GetHeight()+12
                    a
    .size/2
                    a
    :SetWidth(size)
                    
    a:SetHeight(size)
                    
    a:SetAlpha(.6)
                    
    tinsert(s.d,a
                
    end
                ww 
    ww w
                a
    :SetPoint('topleft',ww-a.s,6)
                
    a:Show()
            
    end
        end
        
        local 
    function re(s)
            
    s.= {}
            
    divide(s,(select(2,s:GetMinMaxValues())))
            
    s:HookScript("OnShow",function(sdivide(s,select(2,s:GetMinMaxValues())) end)
            
    s:HookScript("OnHide",function(s) for _,v in ipairs(s.d) do v:Hide() end end)
            
    s:HookScript("OnValueChanged",function(s,v
                if 
    not s:GetParent():IsShown() then return end
                local _
    ,max s:GetMinMaxValues()
                if 
    s.max ~= max then s.max max divide(s,maxend
            end
    )
        
    end

        CreateFrame
    ("frame"):SetScript("OnUpdate",function()
            
    local n w:GetNumChildren()
            if 
    num == n then return end 
            
    for num 1do 
                
    local f select(iw:GetChildren())
                if 
    not f:GetName() then 
                    local a 
    f:GetRegions()
                    if 
    and a.GetTexture and a:GetTexture() == "Interface\\TargetingFrame\\UI-TargetingFrame-Flash" then 
                        re
    (f:GetChildren())
                    
    end
                end
                num 
    n
            end
        end
    )
    end 
    [свернуть]
    Последний раз редактировалось Ururu; 04.11.2020 в 23:32.

  4. 2 пользователей сказали cпасибо Ururu за это полезное сообщение:

    feel the wave (05.11.2020),Sproody (05.11.2020)

  5. #28
    Заблокирован
    Регистрация
    09.06.2016
    Адрес
    Rivne, Ukraine
    Сообщений
    907
    Поблагодарил(а)
    244
    Получено благодарностей: 412 (сообщений: 237).
    Репутация: 412
    Цитата Сообщение от Ururu Посмотреть сообщение
    значение хп в цифрах на хпбаре уныло как то выглядит.
    придумал другую фигню, ну как придумал, в доте2 увидал. там просто разделители ставятся и уже примерно понятно сколько текущее и сколько максимальное.

    для дефолтных неймплейтов



    PHP код:
    do
        
    local hp 10000
        local cap 
    10
        
        local w
    ,numselect,ipairs WorldFrame,0select,ipairs 
        
        local 
    function divide(s,max)
            
    local w,ww = (s:GetWidth()/max)*hp,0
            local n 
    max/hp
            
    if cap then return end
            
    for 1do
                
    local a s.d[i]
                if 
    not a then 
                    a 
    s:CreateTexture(nil,"OVERLAY")
                    
    a:SetTexture('Interface\\MainMenuBar\\UI-ExhaustionTickNormal')
                    
    local size s:GetHeight()+12
                    a
    .size/2
                    a
    :SetWidth(size)
                    
    a:SetHeight(size)
                    
    a:SetAlpha(.6)
                    
    tinsert(s.d,a
                
    end
                ww 
    ww w
                a
    :SetPoint('topleft',ww-a.s,6)
                
    a:Show()
            
    end
        end
        
        local 
    function re(s)
            
    s.= {}
            
    divide(s,(select(2,s:GetMinMaxValues())))
            
    s:HookScript("OnShow",function(sdivide(s,select(2,s:GetMinMaxValues())) end)
            
    s:HookScript("OnHide",function(s) for _,v in ipairs(s.d) do v:Hide() end end)
            
    s:HookScript("OnValueChanged",function(s,v
                if 
    not s:GetParent():IsShown() then return end
                local _
    ,max s:GetMinMaxValues()
                if 
    s.max ~= max then s.max max divide(s,maxend
            end
    )
        
    end

        CreateFrame
    ("frame"):SetScript("OnUpdate",function()
            
    local n w:GetNumChildren()
            if 
    num == n then return end 
            
    for num 1do 
                
    local f select(iw:GetChildren())
                if 
    not f:GetName() then 
                    local a 
    f:GetRegions()
                    if 
    and a.GetTexture and a:GetTexture() == "Interface\\TargetingFrame\\UI-TargetingFrame-Flash" then 
                        re
    (f:GetChildren())
                    
    end
                end
                num 
    n
            end
        end
    )
    end 
    [свернуть]
    любезно к себе в сборку утащил

    Скрытый текст

    https://github.com/FrostAtom/FrostAt...nameplates.lua
    + апскейл для юнитов вроде манекена с большим кол-вом хп, в тупую прятать это не оч
    + промежуточные делители
    WoWScrnShot_110520_005021.jpg
    [свернуть]

  6. #29
    Старожил
    Регистрация
    07.02.2014
    Сообщений
    255
    Поблагодарил(а)
    45
    Получено благодарностей: 5 (сообщений: 5).
    Репутация: 5
    Цитата Сообщение от Sproody Посмотреть сообщение
    любезно к себе в сборку утащил

    Скрытый текст

    https://github.com/FrostAtom/FrostAt...nameplates.lua
    + апскейл для юнитов вроде манекена с большим кол-вом хп, в тупую прятать это не оч
    + промежуточные делители
    WoWScrnShot_110520_005021.jpg
    [свернуть]
    Как называется шрифт у тебя ?

  7. #30
    Старожил
    Регистрация
    22.12.2019
    Адрес
    SIBERIA
    Сообщений
    132
    Поблагодарил(а)
    40
    Получено благодарностей: 21 (сообщений: 20).
    Репутация: 21
    Цитата Сообщение от chudo_228 Посмотреть сообщение
    Как называется шрифт у тебя ?
    Похож на Comic Sans MS

  8. 1 пользователь сказал cпасибо Gаrib за это полезное сообщение:

    chudo_228 (05.11.2020)

  9. #31
    Заблокирован
    Регистрация
    09.06.2016
    Адрес
    Rivne, Ukraine
    Сообщений
    907
    Поблагодарил(а)
    244
    Получено благодарностей: 412 (сообщений: 237).
    Репутация: 412
    Цитата Сообщение от Gаrib Посмотреть сообщение
    Похож на Comic Sans MS
    Да, он, с приставкой Bold

  10. #32
    Старожил
    Регистрация
    17.06.2018
    Сообщений
    264
    Поблагодарил(а)
    6
    Получено благодарностей: 150 (сообщений: 107).
    Репутация: 150
    Цитата Сообщение от Sproody Посмотреть сообщение
    + промежуточные делители
    тоже сперва сделал также как на картинке с доты. просто черные полоски и каждая четвертая жирнее.
    но, у меня текстуры с малыми значениями размеров, отображаются криво. я так понимаю, когда середина попадает между пикселей, они не отображаются. поэтому делители с одинаковой шириной могут выглядеть по разному, а с разными - одинаково. а когда неймплейт немного движется, из-за анимации например, черточки начинают плясать. а вот с широкой текстуркой с альфа-каналом, которая выглядит узкой, все в порядке, отображается четко.
    нашел еще один, пожалуй лучший вариант

    текстовые строки c символом "|"

    PHP код:
    s:CreateFontString(nil,"OVERLAY","GameFontBlack")
    a:SetHeight(s:GetHeight()-4)
    a:SetText("|"
    [свернуть]

  11. 2 пользователей сказали cпасибо Ururu за это полезное сообщение:

    Sproody (05.11.2020),Екзорцист (05.11.2020)

  12. #33
    Старожил
    Регистрация
    07.02.2014
    Сообщений
    255
    Поблагодарил(а)
    45
    Получено благодарностей: 5 (сообщений: 5).
    Репутация: 5
    Cпасибо

  13. #34
    Старожил Аватар для ida
    Регистрация
    24.04.2020
    Сообщений
    154
    Поблагодарил(а)
    33
    Получено благодарностей: 60 (сообщений: 31).
    Репутация: 60
    Код из второго поста не работает с аддоном Arena Spectator
    Также если прописать эти коды к коду второго поста, которые отвечают за наложение плейтов друг на друга, то вне таргетные касты с пропатченным экзешником кастуются быстрее, чем на самом деле (визуально полоска каста финиширует в 2 раза быстрее, но только ВНЕ таргетные, а если взять в таргет, то скорость каста будет соответствовать спелу).
    Ну на спекратор по сути пох, это он выдает луа ошибки, но по какой причине внетаргетные касты с кодом ниже со скоростью света кастуются, это вообще дерьмово

    Код:
    local nameplates = {}

    Код:
    table.insert(nameplates,frame)
    Код:
        local level = 1
        for _,frame in pairs(nameplates) do
            if frame:IsShown() then
                if frame:GetFrameLevel() == 20 then -- is target
                    frame:SetFrameLevel(#nameplates*2)
                else
                    level = level + 2
                    frame:SetFrameLevel(level)
                end
            end
        end

    @Sproody можно с этим что-то сделать, не знаешь?
    Последний раз редактировалось ida; 08.11.2020 в 17:21.

  14. 1 пользователь сказал cпасибо ida за это полезное сообщение:

    *Akatsuki* (06.11.2020)

  15. #35
    Старожил Аватар для ida
    Регистрация
    24.04.2020
    Сообщений
    154
    Поблагодарил(а)
    33
    Получено благодарностей: 60 (сообщений: 31).
    Репутация: 60
    Upp

  16. #36
    Гуру Аватар для Friskes
    Регистрация
    08.10.2013
    Сообщений
    339
    Поблагодарил(а)
    60
    Получено благодарностей: 84 (сообщений: 59).
    Репутация: 84
    ап)

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Ответов: 43
    Последнее сообщение: 12.12.2016, 09:22
  2. [Wotlk] Кросс ПВП для хай рейтов и лоу рейтов отдельно как раньше
    от rovrnomy в разделе Вопросы Logon, TBC, Legion, BFa, SL
    Ответов: 1
    Последнее сообщение: 02.07.2015, 09:31
  3. вор взлом сейфов
    от neronrex в разделе Корзина
    Ответов: 0
    Последнее сообщение: 13.04.2013, 04:47

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •