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

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

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 12 из 15
  1. #1
    Rank 1 Discipline priest x5 Аватар для Пятнашки
    Регистрация
    18.05.2012
    Адрес
    Беларусь, Гомель
    Сообщений
    1,345
    Поблагодарил(а)
    785
    Получено благодарностей: 774 (сообщений: 336).
    Репутация: 1477

    WoW UI, Macros and Scripts

    Здравствуйте, надеюсь моя темка сможет многое рассказать начинающим создателям аддонов и тем, кто решил играть на дефолте.

    Начнём с самого простого.

    Когда вы вбиваете какую-то команду/скрипт в игре, то эффект будет сохраняться до релога, а при следующем входе нужно вбивать все заново.

    Многие начинающие разработчики аддонов/скриптов сталкиваются с проблемой того, что в обычный макрос wow можно записать не более 255 знаков, эта проблема легко очень решается аддоном Super Duper Macro.

    Super Duper Macro - это world of warcraft аддон, который позволяет создавать макросы большей длины, чем через саму игру. Стандартное количество символов в макросе составляет 255, а через Super Duper Macro вы сможете написать более 1023 символов. Кроме увеличения возможной длины текста макроса, через данный аддон вы сможете обмениваться своими макросами с друзьями. Данная модификация совместима с любыми версиями вов, как 3.3.5, так и 4.0.6. Для новых версий нужно будет скачать и установить фикс.

    Для открытия интерфейса аддона нужно прописать следующее:
    PHP код:
    /sdm 
    Скачать Super Duper Macro 3.3.5a

    С помощью этого аддона, мы будем предварительно (перед переносом в аддон строк) тестировать большие скрипты сразу в игре, без надобности в перезагрузках UI, как в случае с аддонами.

    Как закрепить изменения и не жать скрипты каждый раз логинясь в игру?
    Элементарно. Надо просто сделать свой примитивный аддон.



    Покажу на примере скрипта, который заменяет портреты на иконки классов.

    Скрипт выглядит так:

    PHP код:
    / run UFP = "UnitFramePortrait_Update"; UICC = "Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes"
    / run hooksecurefunc(UFP,function(self) if self.portrait then self.portrait:SetTexture(UICC) self.portrait:SetTexCoord(unpack(CLASS_ICON_TCOORDS[select(2,UnitClass(self.unit))])) end end) 
    Теперь делаем из него аддон:

    1. В Interface\AddOns\ создаем папку с именем нашего аддона, например "classicons"
    2. Через блокнот делаем там два текстовых файла: classicons.lua и classicons.toc

    3. В classicons.toc пишем:
    PHP код:
    ## Interface: 40000
    ## Title: ClassIcons
    ## Author: DontWearSundress
    ## Version: 1.0

    classicons.lua 
    4. В classicons.lua, который и есть "тело" нашего аддона, мы записываем нужный нам скрипт:
    PHP код:
    UFP = "UnitFramePortrait_Update"; UICC = "Interface\\TargetingFrame\\UI-Classes-Circles"; CIT = CLASS_ICON_TCOORDS 

    hooksecurefunc
    (UFP,function(self) if self.portrait then local t = CIT[select(2,UnitClass(self.unit))] if t then self.portrait:SetTexture(UICC) self.portrait:SetTexCoord(unpack(t)) end end end) 
    Отличие, как вы можете заметить, минимальное. Просто убираем "/ run" перед нужной командой.
    Надеюсь сложностей на этом этапе ни у кого не возникнет.

    Теперь далее, рассмотрим несколько возможных скриптов, которые можно внести в свой аддон:

    1. Чтобы переместить фрейм игрока+таргета и закрепить его на будущее, надо добавить в аддон следующие строки:

    PHP код:
    local a = CreateFrame("Frame")
    a:SetScript("OnEvent", function(self, event)
    if 
    event == "PLAYER_ENTERING_WORLD" then
    PlayerFrame
    :ClearAllPoints()
    PlayerFrame:SetPoint("TOPLEFT",UIParent,"TOPLEFT", 200, -158)
    TargetFrame:ClearAllPoints()
    TargetFrame:SetPoint("TOPLEFT",UIParent,"TOPLEFT", 448, -158)
    end
    end
    )

    a:RegisterEvent("PLAYER_ENTERING_WORLD") 
    Эта версия работает в катаклизме. Координаты поменяйте под свои нужды.

    2. Размер фрейма игрока:
    PHP код:
    / run PlayerFrame:SetScale(1.4) 
    Параметр в круглых скобках (1.4) - означает что масштаб фрейма игрока увеличен на 40% от стандартного значения.
    Можно изменить как вам нравится.

    3. Размер фрейма таргета:
    PHP код:
    / run TargetFrame:SetScale(1.4) 
    4. Размер фокус фрейма:
    PHP код:
    / run FocusFrame:SetScale(1.4) 
    4.1 Размер КАСТБАРА у фокусфрейма:
    PHP код:
    / run FocusFrameSpellBar:SetScale(1.4) 

    5. Арена фреймы:
    PHP код:
    / run ArenaEnemyFrame1:SetScale(1.6)
    / 
    run ArenaEnemyFrame2:SetScale(1.6)
    / 
    run ArenaEnemyFrame3:SetScale(1.6) 
    5.1 Петы у арена фреймов:
    PHP код:
    / run ArenaEnemyFrame1PetFrame:SetScale(1.6)
    / 
    run ArenaEnemyFrame3PetFrame:SetScale(1.6)
    / 
    run ArenaEnemyFrame2PetFrame:SetScale(1.6) 

    6. Размеры фреймов группы (самое нужное, т.к. по дефолту они весьма мелкие):
    PHP код:
    / run PartyMemberFrame1:SetScale(1.4)
    / 
    run PartyMemberFrame2:SetScale(1.4)
    / 
    run PartyMemberFrame3:SetScale(1.4)
    / 
    run PartyMemberFrame4:SetScale(1.4) 
    7. Отключение красного спама по центру экрана в стиле "Эту цель атаковать нельзя", "Нельзя применить к этой цели" и т.п.
    PHP код:
    /script UIErrorsFrame:SetAlpha(0) 
    8. Отключение драконов слева и справа:
    PHP код:
    / run MainMenuBarLeftEndCap:Hide();MainMenuBarRightEndCap:Hide() 
    9. Прозрачные Action Bars:
    PHP код:
    / run MainMenuBarTexture0:Hide()
    / 
    run MainMenuBarTexture1:Hide()
    / 
    run MainMenuBarTexture2:Hide()
    / 
    run MainMenuBarTexture3:Hide()

    / 
    run MainMenuBarLeftEndCap:Hide()
    / 
    run MainMenuBarRightEndCap:Hide()

    / 
    run MainMenuMaxLevelBar0:Hide()
    / 
    run MainMenuMaxLevelBar1:Hide()
    / 
    run MainMenuMaxLevelBar2:Hide()
    / 
    run MainMenuMaxLevelBar3:Hide()

    / 
    run BonusActionBarFrameTexture1:Hide()
    / 
    run BonusActionBarFrameTexture2:Hide()
    / 
    run BonusActionBarFrameTexture3:Hide()
    / 
    run BonusActionBarFrameTexture4:Hide() 
    10. Изменение масштаба панелек:
    PHP код:
    / run MainMenuBar:SetScale(0.5)
    / 
    run MultiBarBottomLeft:SetScale(0.5)
    / 
    run MultiBarBottomRight:SetScale(0.5) 
    В wow очень много команд, с которыми можно поиграться :)
    Откуда можно взять эти команды? В основном, я использую эти сайты:
    http://wowpedia.org/Api
    http://wowpedia.org/Widget_API
    http://wowprogramming.com/docs/api_categories
    http://www.wowwiki.com/World_of_Warcraft_API

    На этом первая часть статьи как сделать аддон закончена :)
    И ещё раз напомню: в игре мы проверяем скрипты запуская их через / run, в аддоне / run писать не надо.




    - - - Updated - - -

    Вторая часть

    - - - Updated - - -

    Рассмотрим скрипты, которые использует один из лучших рогов - Neilyo.

    1. PvP-тринкеты противников на арене:

    Arena Trinkets

    PHP код:
    CTT=CreateFrame("Frame")CTT:SetParent(TargetFrame)CTT:SetPoint("Left",TargetFrame,170,-16)CTT:SetSize(20,20)CTT.t=CTT:CreateTexture(nil,BORDER)CTT.t:SetAllPoints()CTT.t:SetTexture("Interface\\Icons\\ABILITY_DUALWIELD")CTT:Hide()
    local function FrameOnUpdate(self) if UnitAffectingCombat("target") then self:Show() else self:Hide() end end local g = CreateFrame("Frame") g:SetScript("OnUpdate", function(self) FrameOnUpdate(CTT) end)
    CFT=CreateFrame("Frame")CFT:SetParent(FocusFrame)CFT:SetPoint("Left",FocusFrame,170,-15)CFT:SetSize(20,20)CFT.t=CFT:CreateTexture(nil,BORDER)CFT.t:SetAllPoints()CFT.t:SetTexture("Interface\\Icons\\ABILITY_DUALWIELD")CFT:Hide()
    local function FrameOnUpdate(self) if UnitAffectingCombat("focus") then self:Show() else self:Hide() end end local g = CreateFrame("Frame") g:SetScript("OnUpdate", function(self) FrameOnUpdate(CFT) end)
    local trinkets = {}
    local events = CreateFrame("Frame")

    function 
    events:ADDON_LOADED(addonName)
    if 
    addonName ~= "Blizzard_ArenaUI" then
    return
    end
    ArenaEnemyFrame1
    :ClearAllPoints()
    ArenaEnemyFrame1:SetPoint("CENTER", nil, "CENTER", 295.0, 40.0)
    ArenaEnemyFrames:SetScale(1.2)
    local arenaFrame, trinket
    for i = 1, MAX_ARENA_ENEMIES do
    arenaFrame = "ArenaEnemyFrame"..i
    trinket 
    = CreateFrame("Cooldown", arenaFrame.."Trinket", ArenaEnemyFrames)
    trinket:SetPoint("TOPRIGHT", arenaFrame, 30, -6)
    trinket:SetSize(30, 30)
    trinket.icon = trinket:CreateTexture(nil, "BACKGROUND")
    trinket.icon:SetAllPoints()
    trinket.icon:SetTexture("Interface\\Icons\\inv_jewelry_trinketpvp_01")
    trinket:Hide()
    trinkets["arena"..i] = trinket
    end
    self
    :UnregisterEvent("ADDON_LOADED")
    end

    function events:UNIT_SPELLCAST_SUCCEEDED(unitID, spell, rank, lineID, spellID)
    if 
    not trinkets[unitID] then
    return
    end
    if  spell == GetSpellInfo(59752) or spell == GetSpellInfo(42292) then
    CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 120, 1)
    SendChatMessage("Trinket used by: "..GetUnitName(unitID, true), "PARTY")
    elseif 
    spell == GetSpellInfo(7744) then
    CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 45, 1)
    SendChatMessage("WotF used by: "..GetUnitName(unitID, true), "PARTY")
    end
    end

    function events:PLAYER_ENTERING_WORLD()
    local _, instanceType = IsInInstance()
    if 
    instanceType == "arena" then
    self
    :RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
    elseif 
    self:IsEventRegistered("UNIT_SPELLCAST_SUCCEEDED") then
    self
    :UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED")
    for 
    _, trinket in pairs(trinkets) do
    trinket:SetCooldown(0, 0)
    trinket:Hide()
    end
    end
    end

    SLASH_TESTAEF1 
    = "/testaef"
    SlashCmdList["TESTAEF"] = function(msg, editBox)
    if 
    not IsAddOnLoaded("Blizzard_ArenaUI") then
    LoadAddOn
    ("Blizzard_ArenaUI")
    end
    ArenaEnemyFrames
    :Show()
    local arenaFrame
    for i = 1, 3 do
    arenaFrame = _G["ArenaEnemyFrame"..i]
    arenaFrame.classPortrait:SetTexture("Interface\\TargetingFrame\\UI-Classes-Circles")
    arenaFrame.classPortrait:SetTexCoord(unpack(CLASS_ICON_TCOORDS["WARRIOR"]))
    arenaFrame.name:SetText("Dispelme")
    arenaFrame:Show()
    CooldownFrame_SetTimer(trinkets["arena"..i], GetTime(), 120, 1)
    end
    end

    events
    :SetScript("OnEvent", function(self, event, ...) return self[event](self, ...) end)
    events:RegisterEvent("ADDON_LOADED")
    events:RegisterEvent("PLAYER_ENTERING_WORLD")
    hooksecurefunc("PlayerFrame_UpdateStatus", function() 
    if 
    IsResting("player") then 
    PlayerStatusTexture
    :Hide() 
    [свернуть]


    2. Скрипт отображает комбат цели и фокуса:

    Combat

    PHP код:
    CTT=CreateFrame("Frame")CTT:SetParent(TargetFrame)CTT:SetPoint("Left",TargetFrame,-30,5)CTT:SetSize(25,25)CTT.t=CTT:CreateTexture(nil,BORDER)CTT.t:SetAllPoints()CTT.t:SetTexture("Interface\\Icons\\ABILITY_DUALWIELD")CTT:Hide()
    local function FrameOnUpdate(self) if UnitAffectingCombat("target") then self:Show() else self:Hide() end end local g = CreateFrame("Frame") g:SetScript("OnUpdate", function(self) FrameOnUpdate(CTT) end)
    CFT=CreateFrame("Frame")CFT:SetParent(FocusFrame)CFT:SetPoint("Left",FocusFrame,-30,5)CFT:SetSize(25,25)CFT.t=CFT:CreateTexture(nil,BORDER)CFT.t:SetAllPoints()CFT.t:SetTexture("Interface\\Icons\\ABILITY_DUALWIELD")CFT:Hide()
    local function FrameOnUpdate(self) if UnitAffectingCombat("focus") then self:Show() else self:Hide() end end local g = CreateFrame("Frame") g:SetScript("OnUpdate", function(self) FrameOnUpdate(CFT) end) 
    [свернуть]

    Координаты и размер иконки комбата настраиваются в строках:
    PHP код:
    CTT:SetParent(TargetFrame)CTT:SetPoint("Left",TargetFrame,-30,5)CTT:SetSize(25,25)
    CFT:SetParent(FocusFrame)CFT:SetPoint("Left",FocusFrame,-30,5)CFT:SetSize(25,25) 

    3. Иконка класса вместо портрета игрока:

    ClassIcons

    PHP код:
    UFP = "UnitFramePortrait_Update"
    UICC = "Interface\\TargetingFrame\\UI-Classes-Circles"
    CIT = CLASS_ICON_TCOORDS
    hooksecurefunc
    (UFP,function(self) if self.portrait then if UnitIsPlayer(self.unit) and UnitIsVisible(self.unit) then self.portrait:SetTexture(UICC) self.portrait:SetTexCoord(unpack(CIT[select(2,UnitClass(self.unit))])) else self.portrait:SetTexCoord(0,1,0,1) end end end) 
    [свернуть]


    4. Шрифт комбат текста:

    CombatTextFont

    PHP код:
    local fontName = "Interface\\AddOns\\NeilyoScript\\font.ttf"
    local fontHeight = 40
    local fFlags 
    = ""
    local function FS_SetFont()
    DAMAGE_TEXT_FONT = fontName
    COMBAT_TEXT_HEIGHT 
    = fontHeight
    COMBAT_TEXT_CRIT_MAXHEIGHT 
    = fontHeight + 2
    COMBAT_TEXT_CRIT_MINHEIGHT 
    = fontHeight - 2
    local fName
    , fHeight, fFlags = CombatTextFont:GetFont()
    CombatTextFont:SetFont(fontName, fontHeight, fFlags)
    end
    FS_SetFont
    () 
    [свернуть]

    Необходимо положить файл с нужным вам шрифтом в папку с аддоном и переименовать его в font.

    5. Enemy Cooldowns:

    Скрипт, отображающий использованные кулдауны врагов.
    Вот как эти скрипты выглядят в моем интерфейсе: http://i.imgur.com/gc8PO.jpg
    Прежде всего, вам необходимо выбрать местоположение данных абилок. Для этого в игре введите команду /fstack.
    В появившемся окне будут отображаться координаты X Y относительно нижнего левого угла монитора. Координаты по X отличаются на 22 для каждой иконки и по 30 для Y.

    [IMG]http://s019.***********/i617/1404/97/8774b1819414.jpg[/IMG]

    Координаты указываются здесь:
    PHP код:
    t1p="Interface\\Icons\\ability_rogue_shadowdance";t1=CF(F);TrS(t1,240,560,"cd1",t1p,22,true) 
    Если "true" заменить на "false", то при заходе(релоге) не будут высвечиваться все кулдауны.

    Как добавлять свои абилки (покажу на примере маговской Антимагии):

    1)Находим нужную абилку Антимагия
    2)В ссылке http://wowroad.info/?spell=2139 цифры после "=" показывают ID спелла.
    3)Нажимаем на иконку КСа, чтобы узнать, как она называется: spell_frost_iceshock (для этой операции используем вовхед)
    [IMG]http://i056.***********/1404/ed/a2565e4a960a.png[/IMG]
    4)Также необходимо знать кулдаун спелла: 24 сек
    [IMG]http://i017.***********/1404/8c/2864e1558f6c.png[/IMG]
    Теперь все необходимое у нас есть, чтобы добавить в скрипт. Ниже показана добавленная строчка к маговским абилкам.
    Жирным выделены изменения, произведенные в новой строке.

    Как это выглядит

    PHP код:
    ...
    t15p="Interface\\Icons\\ability_mage_deepfreeze";t15=CF(F);TrS(t15,240,500,"cd15",t15p,22,true);t15:SetScript(OE,function(self,event,...) Ts(t15,cd15,select(1,...),select(5,...),44572,30) end);
    t16p="Interface\\Icons\\spell_frost_wizardmark";t16=CF(F);TrS(t16,262,500,"cd16",t16p,22,true);t16:SetScript(OE,function(self,event,...) Ts(t16,cd16,select(1,...),select(5,...),11958,480) end);
    t17p="Interface\\Icons\\spell_arcane_blink";t17=CF(F);TrS(t17,284,500,"cd17",t17p,22,true);t17:SetScript(OE,function(self,event,...) Ts(t17,cd17,select(1,...),select(5,...),1953,15) end);
    ...
    t59p="Interface\\Icons\\[B]spell_frost_iceshock[/B]";t59=CF(F);TrS(t59,306,500,"cd59",t59p,22,true);t59:SetScript(OE,function(self,event,...) Ts(t59,cd59,select(1,...),select(5,...),[B]2139[/B],[B]24[/B]) end); 
    [свернуть]


    В игре необходимо сделать макрос:
    PHP код:
    / run for i=1,58 do _G["t"..i]:Hide() end
    / run for i=1,58 do _G["t"..i].c:Hide() end 
    С помощью него очищаются кулдауны после каждой арены или баттлграунда.
    Значение "58" верно только для этого скрипта(для 58 спеллов), но при добавлении своих абилок его необходимо увеличивать.

    6. Убрать с панелек названия биндов.

    Remove Keybind Icon on Action Bars

    PHP код:
    / run for i = 1, 12 do _G["BonusActionButton"..i.."HotKey"]:SetAlpha(0) end
    / run for i = 1, 12 do _G["MultiBarBottomLeftButton"..i.."HotKey"]:SetAlpha(0) end
    / run for i = 1, 12 do _G["MultiBarBottomRightButton"..i.."HotKey"]:SetAlpha(0) end
    / run for i = 1, 12 do _G["ActionButton"..i.."HotKey"]:SetAlpha(0) end 
    / run for i = 1, 12 do _G["MultiBarLeftButton"..i.."HotKey"]:SetAlpha(0) end
    / run for i = 1, 12 do _G["MultiBarRightButton"..i.."HotKey"]:SetAlpha(0) end 
    [свернуть]


    7. Убрать с панелек названия макросов.

    Remove Macro Text from Action Bars

    PHP код:
    / run for i = 1, 12 do _G["BonusActionButton"..i.."Name"]:Hide() end
    / run for i = 1, 12 do _G["ActionButton"..i.."Name"]:Hide() end
    / run for i = 1, 12 do _G["MultiBarBottomLeftButton"..i.."Name"]:Hide() end
    / run for i = 1, 12 do _G["MultiBarBottomRightButton"..i.."Name"]:Hide() end 
    [свернуть]


    8. Показывать процент HP и количество здоровья на фреймах цели и фокуса:

    Show Percent HP AND Health Number on Target and Focus Frame

    PHP код:
    Macro 1:
    / 
    run TF=CreateFrame("Frame")TFHB=TargetFrameHealthBar.TextString;TTSB=TextStatusBar_CapDisplayOfNumericValue
    / run FF=CreateFrame("Frame")FFHB=FocusFrameHealthBar.TextString;TTSB=TextStatusBar_CapDisplayOfNumericValue

    Macro 2
    :
    / 
    run TF:SetScript("OnUpdate", function(target)TFHB:SetText(TTSB(UnitHealth("target")).."/"..TTSB(UnitHealthMax("target")).." ("..format("%.0f", ((UnitHealth("target")/UnitHealthMax("target"))*100)).."%)") end)

    Macro 3:
    / 
    run FF:SetScript("OnUpdate", function(focus)FFHB:SetText(TTSB(UnitHealth("focus")).."/"..TTSB(UnitHealthMax("focus")).." ("..format("%.0f", ((UnitHealth("focus")/UnitHealthMax("focus"))*100)).."%)") end) 
    [свернуть]


    9. Передвигаем (все разом) кастбары арена врагов, также чуть увеличивая их:

    Move Arena Enemy Cast Bars (all at once)

    PHP код:
    / run V={B="ArenaEnemyFrame"} for i=1,5 do _G[V.B..i]:SetScale(1.23); _G[V.B..i.."CastingBar"]:SetPoint("RIGHT",95,0); end; 
    [свернуть]


    10. Изменение, передвижение бафов\дебафов

    Moving, Resizing Buffs

    PHP код:
    --player buffs

    / run BuffFrame:ClearAllPoints();BuffFrame:SetPoint("CENTER", PlayerFrame, "CENTER", 771, 468);BuffFrame.SetPoint = function() end
    / run BuffFrame:SetScale(1.2)

    --
    player debuffs

    / run DebuffButton1:ClearAllPoints();DebuffButton1:SetPoint("CENTER", PlayerFrame, "CENTER", 771, 468);DebuffButton1.SetPoint = function() end
    / run DebuffButton1:SetScale(1.2)

    --
    target buffs

    / run hooksecurefunc("TargetFrame_UpdateAuraPositions",function(self) local g=_G["TargetFrameBuff1"] if g then g:ClearAllPoints();g:SetPoint("CENTER",TargetFrame,"CENTER",67,10)end end); TargetFrame.maxBuffs = 16
    / run TargetFrameBuff1:SetScale(1.2)
    / 
    run TargetFrameDebuff1:SetScale(1.2) 
    [свернуть]


    11. Время кастов, для дефолт кастбаров

    Cast Time To The Default Cast Bar

    PHP код:
    CastingBarFrame.timer =CastingBarFrame:CreateFontString(nil);
    CastingBarFrame.timer:SetFont(STANDARD_TEXT_FONT,12,"OUTLINE");
    --
    CastingBarFrame.timer:SetPoint("RIGHT",CastingBarFrame,"RIGHT",-5,-2);
    CastingBarFrame.timer:SetPoint("RIGHT",CastingBarFrame,"RIGHT",2,-15);
    CastingBarFrame.update =.1;

    hooksecurefunc("CastingBarFrame_OnUpdate",function(self, elapsed)
            if 
    not self.timer then return end
            
    if self.update and self.update < elapsed then
                    
    if self.casting then
                            self
    .timer:SetText(format("%2.1f/%1.1f", max(self.maxValue -self.value,0),self.maxValue))
                    elseif 
    self.channeling then
                            self
    .timer:SetText(format("%.1f", max(self.value,0)))
                    else
                            
    self.timer:SetText("")
                    
    end
                    self
    .update =.1
            
    else
                    
    self.update =self.update - elapsed
            end
    end
    ) 
    [свернуть]


    12. Изменение имени

    Name Change Scripts

    PHP код:
    local frame = CreateFrame("FRAME", "NameChangeScripts")
    frame:RegisterEvent("PLAYER_ENTERING_WORLD")
    local function eventHandler(self, event, ...)
     
    -- 
    EDIT THIS LINE BELOW TO CHANGE YOUR NAME
    NewName 
    = " "
    PN = GetUnitName("player")

    -- 
    Change Player UnitFrame Name
    PFNC 
    = CreateFrame("Frame", "PlayerFrameNameChange")
    local function ChangePlayerName(self)
    PlayerFrame.name:SetText(NewName)
    end
    PFNC
    :SetScript("OnUpdate", ChangePlayerName)

    -- 
    Change Target UnitFrame Name
    TFNC 
    = CreateFrame("Frame", "TargetFrameNameChange")
    local function ChangeTargetName(self)
    local TN = GetUnitName("target")
    if 
    PN == TN then
    TargetFrame
    .name:SetText(NewName)
    end
    end
    TFNC
    :SetScript("OnUpdate", ChangeTargetName)

    -- 
    Change Target's Target UnitFrame Name
    TFTNC = CreateFrame("Frame", "TargetFrameTargetNameChange")
    local function ChangeTargetofTargetName(self)
    local TTN = GetUnitName("targettarget")
    if PN == TTN then
    TargetFrameToT.name:SetText(NewName)
    end
    end
    TFTNC:SetScript("OnUpdate", ChangeTargetofTargetName)

    -- Change Focus UnitFrame Name
    FFNC = CreateFrame("Frame", "FocusFrameNameChange")
    local function ChangeFocusName(self)
    local FN = GetUnitName("focus")
    if PN == FN then
    FocusFrame.name:SetText(NewName)
    end
    end
    FFNC:SetScript("OnUpdate", ChangeFocusName)

    -- Change Focus' 
    Target UnitFrame Name
    FFTNC 
    = CreateFrame("Frame", "FocusFrameTargetNameChange")
    local function ChangeFocusTargetName(self)
    local FTN = GetUnitName("focustarget")
    if 
    PN == FTN then
    FocusFrameToT
    .name:SetText(NewName)
    end
    end
    FFTNC
    :SetScript("OnUpdate", ChangeFocusTargetName)

    end
    frame
    :SetScript("OnEvent", eventHandler) 
    [свернуть]


    13. Цвета полосок здоровья по цвету класса:

    Health Bar Color

    PHP код:
    local UnitIsPlayer, UnitIsConnected, UnitClass, RAID_CLASS_COLORS =
    UnitIsPlayer, UnitIsConnected, UnitClass, RAID_CLASS_COLORS
    local _
    , class, c
    local 
    function colour(statusbar, unit)
    if 
    UnitIsPlayer(unit) and UnitIsConnected(unit) and unit == statusbar.unit and UnitClass(unit) then
    _
    , class = UnitClass(unit)
    c = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class]
    statusbar:SetStatusBarColor(c.r, c.g, c.b)
    end
    end
    hooksecurefunc
    ("UnitFrameHealthBar_Update", colour)
    hooksecurefunc("HealthBar_OnValueChanged", function(self)
    colour(self, self.unit)
    end)
    local sb = _G.GameTooltipStatusBar
    local addon 
    = CreateFrame("Frame", "StatusColour")
    addon:RegisterEvent("UPDATE_MOUSEOVER_UNIT")
    addon:SetScript("OnEvent", function()
    colour(sb, "mouseover")
    end) 
    [свернуть]



    14. Отображение диминишингов над фреймами:

    Icon Diminishing return tracker for Cheap Shot, Kidney Shot, Gouge and Sap.

    PHP код:
    --Woundman DRTracker
    USD
    ="UNIT_SPELLCAST_SUCCEEDED";OT="OnEvent";FR="Frame";RF=CreateFrame;RD="Border";UE=UnitName
    CS
    =RF(FR) CS.c=RF("Cooldown","CST",CS.t) CS:RegisterEvent(USD) 
    CS.c:SetAllPoints(CS) CS:SetPoint("TOPRIGHT",PlayerFrame,-2,-100)CS:SetSize(22,22)CS.t=CS:CreateTexture(nil,RD)CS.t:SetAllPoints()CS.t:SetTexture("Interface\\Icons\\ability_cheapshot")
    CS:SetScript(OT,function(self,event,...)if UE(select(1,...))==UE("player")and select(5,...)==1833 then CST:SetCooldown(GetTime(),23) end if UE(select(1,...))==UE("player")and select(5,...)==408 then CST:SetCooldown(GetTime(),25)end end)
    SP=RF(FR) SP.c=RF("Cooldown","SAP",SP.t) SP:RegisterEvent(USD) 
    SP.c:SetAllPoints(SP) SP:SetPoint("TOPRIGHT",PlayerFrame,-25,-100)SP:SetSize(22,22)SP.t=SP:CreateTexture(nil,RD)SP.t:SetAllPoints()SP.t:SetTexture("Interface\\Icons\\ability_sap")
    SP:SetScript(OT,function(self,event,...)if UE(select(1,...))==UE("player")and select(5,...)==6770 then SAP:SetCooldown(GetTime(),27)end if UE(select(1,...))==UE("player")and select(5,...)==1776 then SAP:SetCooldown(GetTime(),23)end end) 
    [свернуть]



    15. Красный цвет спелов на панельках если цель за пределами досягаемости:

    Red Hover When OUT OF RANGE

    PHP код:
    hooksecurefunc("ActionButton_OnEvent",function(self, event, ...)
                    if ( 
    event == "PLAYER_TARGET_CHANGED" ) then
                            self
    .newTimer = self.rangeTimer
                    end
            end
    )
     
            
    hooksecurefunc("ActionButton_UpdateUsable",function(self)
                    
    local icon = _G[self:GetName().."Icon"]
                    
    local valid = IsActionInRange(self.action)
     
                    if ( 
    valid == 0 ) then
                            icon
    :SetVertexColor(1.0, 0.1, 0.1)
                    
    end
            end
    )
     
            
    hooksecurefunc("ActionButton_OnUpdate",function(self, elapsed)
                    
    local rangeTimer = self.newTimer
     
                    
    if ( rangeTimer ) then
                            rangeTimer 
    = rangeTimer - elapsed
     
                            
    if ( rangeTimer <= 0 ) then
                                    ActionButton_UpdateUsable
    (self)
                                    
    rangeTimer = TOOLTIP_UPDATE_TIME
                            end
     
                            self
    .newTimer = rangeTimer
                    end
            end
    ) 
    [свернуть]



    16. Показывает PvP-тринкеты членов группы:

    Party Trinkets

    PHP код:
    local trinkets = {}
    local events = CreateFrame("Frame")            
    local partyFrame, trinket
        
    for i = 1, MAX_PARTY_MEMBERS do
            
    partyFrame = "PartyMemberFrame"..i
            trinket 
    = CreateFrame("Cooldown", partyFrame.."Trinket")
            
    trinket:SetPoint("TOPRIGHT", partyFrame, 30, -6)
            
    trinket:SetSize(24, 24)
            
    trinket.icon = trinket:CreateTexture(nil, "BACKGROUND")
            
    trinket.icon:SetAllPoints()
            
    trinket.icon:SetTexture("Interface\\Icons\\inv_jewelry_trinketpvp_02")
            
    trinket:Hide()
            
    trinkets["party"..i] = trinket
        end
    function events:UNIT_SPELLCAST_SUCCEEDED(unitID, spell, rank, lineID, spellID)
        if 
    not trinkets[unitID] then
            
    return
        
    end
        
    if spellID == 59752 or spellID == 42292 then
            CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 120, 1)        
        elseif 
    spellID == 7744 then
            CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 45, 1)        
        
    end
    end
    function events:PLAYER_ENTERING_WORLD()
            
    local _, instanceType = IsInInstance()
                 if 
    instanceType == "arena" then
                 self
    :RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
                             elseif 
    instanceType == "none" then
                 self
    :RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
                 elseif 
    self:IsEventRegistered("UNIT_SPELLCAST_SUCCEEDED") then
                  self
    :UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED")          
                 for 
    _, trinket in pairs(trinkets) do
                
    trinket:SetCooldown(0, 0)
                
    trinket:Hide()
                 
    end  end  
    end
    events
    :SetScript("OnEvent", function(self, event, ...) return self[event](self, ...) end)
    events:RegisterEvent("PLAYER_ENTERING_WORLD") 
    [свернуть]


    Полный архив скриптов, которые использовал Neilyo можно скачать тут http://www.mediafire.com/download/cd...8/FullPack.rar

    Скрипты помогут Вам уменьшить нагрузку на компьютер, обеспечить наилучшее быстродействие ui и принести много хороших эмоций от создания своими руками аддонов для нашей с Вами любимой игры - World of Warcraft !

    Если у вас всё в порядке с английским языком, то вы можете прочитать в большем объёме основы создания аддонов по ссылке:
    http://www.arenajunkies.com/topic/22...lt-ui-scripts/

    Если вы были хотя бы чуть-чуть знакомы с программированием в IDE средах, таких как Visual Studio
    - то Вам непременно понравится AddOn Studio for World of Warcraft




    Скачать её можно на сайте https://addonstudio.codeplex.com нажав кнопку Download

    Для тех, кто захочет большего - рекомендую для посещения ресурс http://www.**************/forums/world-of-warcraft/

  2. 13 пользователей сказали cпасибо Пятнашки за это полезное сообщение:

    Kvel` (19.06.2015),mandovoxa (02.07.2016),Raxaji (24.05.2019),Scroll (05.05.2014),soslow191(1) (03.07.2016),Totalq (07.01.2015),Наталя (30.01.2015),Сфера (26.04.2014),Серёженька (26.04.2014),Уникальность (28.04.2014),Шкура (16.08.2014),Диван (27.04.2014)

  3. #2
    Новичок
    Регистрация
    30.03.2014
    Сообщений
    13
    Поблагодарил(а)
    25
    Получено благодарностей: 2 (сообщений: 2).
    Репутация: 2
    А как самому писать скрипты, что для этого нужно?

  4. #3
    Старожил Аватар для mr_aleks
    Регистрация
    06.02.2012
    Сообщений
    143
    Поблагодарил(а)
    23
    Получено благодарностей: 4 (сообщений: 4).
    Репутация: 4
    а есть каконибуть пример аддона\скрипта Enemy Cooldowns ? а то я не понял от какого аддона команда /fstack

    http://savepic.org/3423340.png
    Shadow Priest declorator - the Love Fool

  5. #4
    Rank 1 Discipline priest x5 Аватар для Пятнашки
    Регистрация
    18.05.2012
    Адрес
    Беларусь, Гомель
    Сообщений
    1,345
    Поблагодарил(а)
    785
    Получено благодарностей: 774 (сообщений: 336).
    Репутация: 1477
    Цитата Сообщение от Диван Посмотреть сообщение
    А как самому писать скрипты, что для этого нужно?
    Скрипт - не что иное как связанное некоторой логикой набор стандартных функций.
    На что фантазии хватит - то и твори)

    Для этого нужен только мозг и знание того, чего ты хочешь) Ну и найти нужные функции
    Despondency (2015)


    Мой стрим: https://www.twitch.tv/pjatnashki
    О стриме: обычно аренка дцферал, дцвар, шпмаг, дцмаг

    Моя мини-программа: Snapshot Rename
    Мой аддон по фильтру спама на почту: MailFilter

  6. #5
    Старожил Аватар для Kreis
    Регистрация
    02.04.2014
    Сообщений
    154
    Поблагодарил(а)
    6
    Получено благодарностей: 5 (сообщений: 5).
    Репутация: 5
    Не плохо
    [IMG]http://s019.***********/i616/1404/32/80aa7482249f.png[/IMG]

  7. #6
    Почетный флудер Аватар для H3VDL3$$
    Регистрация
    05.01.2012
    Сообщений
    2,209
    Поблагодарил(а)
    919
    Получено благодарностей: 1,375 (сообщений: 755).
    Репутация: 2668
    Где в теме указано, что это копипаст? Соответственно и линк на оригинал (ПГ)

  8. 6 пользователей сказали cпасибо H3VDL3$$ за это полезное сообщение:

    Basman Jacks (26.05.2014),InFusion (04.06.2014),Izolatorr (04.07.2021),Raqxd (16.10.2023),Serafimka (29.09.2015),Unstablegodx (23.06.2014)

  9. #7
    Эксперт Аватар для Richbrother
    Регистрация
    27.02.2013
    Сообщений
    560
    Поблагодарил(а)
    148
    Получено благодарностей: 121 (сообщений: 103).
    Репутация: 288
    Вов не видит эти скрипты с описания тема + так же не видит аддон Super Duper Macro. В чем могут быть проблемы?

  10. #8
    Активист
    Регистрация
    02.06.2014
    Сообщений
    118
    Поблагодарил(а)
    10
    Получено благодарностей: 27 (сообщений: 20).
    Репутация: 27
    Arena Trinkets и Class Icon с ошибками , вот поправленые:

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

    PHP код:
    if not CTT then
    CTT
    =CreateFrame("Frame")
    end
    CTT
    :SetParent(TargetFrame)
    CTT:SetPoint("Left",TargetFrame,170,-16)
    CTT:SetSize(20,20)
    CTT.t=CTT:CreateTexture(nil,BORDER)
    CTT.t:SetAllPoints()
    CTT.t:SetTexture("Interface\\Icons\\ABILITY_DUALWIELD")
    CTT:Hide() 
    local function FrameOnUpdate(self) if UnitAffectingCombat("target") then self:Show() else self:Hide() end end local g = CreateFrame("Frame") g:SetScript("OnUpdate", function(self) FrameOnUpdate(CTT) end)
    if 
    not CFT then
    CFT
    =CreateFrame("Frame")
    end
    CFT
    :SetParent(FocusFrame)
    CFT:SetPoint("Left",FocusFrame,170,-15)
    CFT:SetSize(20,20)
    CFT.t=CFT:CreateTexture(nil,BORDER)
    CFT.t:SetAllPoints()
    CFT.t:SetTexture("Interface\\Icons\\ABILITY_DUALWIELD")
    CFT:Hide() 
    local function FrameOnUpdate(self) if UnitAffectingCombat("focus") then self:Show() else self:Hide() end end local g = CreateFrame("Frame") g:SetScript("OnUpdate", function(self) FrameOnUpdate(CFT) end) 
    local trinkets = {} 
    local events = CreateFrame("Frame") 

    function 
    events:ADDON_LOADED(addonName) 
    if 
    addonName ~= "Blizzard_ArenaUI" then 
    return 
    end 
    ArenaEnemyFrame1
    :ClearAllPoints() 
    ArenaEnemyFrame1:SetPoint("CENTER", nil, "CENTER", 295.0, 40.0) 
    ArenaEnemyFrames:SetScale(1.2) 
    local arenaFrame, trinket 
    for i = 1, MAX_ARENA_ENEMIES do 
    arenaFrame = "ArenaEnemyFrame"..i 
    trinket 
    = CreateFrame("Cooldown", arenaFrame.."Trinket", ArenaEnemyFrames) 
    trinket:SetPoint("TOPRIGHT", arenaFrame, 30, -6) 
    trinket:SetSize(30, 30) 
    trinket.icon = trinket:CreateTexture(nil, "BACKGROUND") 
    trinket.icon:SetAllPoints() 
    trinket.icon:SetTexture("Interface\\Icons\\inv_jewelry_trinketpvp_01") 
    trinket:Hide() 
    trinkets["arena"..i] = trinket 
    end 
    self
    :UnregisterEvent("ADDON_LOADED") 
    end 

    function events:UNIT_SPELLCAST_SUCCEEDED(unitID, spell, rank, lineID, spellID) 
    if 
    not trinkets[unitID] then 
    return 
    end 
    if  spell == GetSpellInfo(59752) or spell == GetSpellInfo(42292) then 
    CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 120, 1) 
    SendChatMessage("Trinket used by: "..GetUnitName(unitID, true), "PARTY") 
    elseif 
    spell == GetSpellInfo(7744) then 
    CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 45, 1) 
    SendChatMessage("WotF used by: "..GetUnitName(unitID, true), "PARTY") 
    end 
    end 

    function events:PLAYER_ENTERING_WORLD() 
    local _, instanceType = IsInInstance() 
    if 
    instanceType == "arena" then 
    self
    :RegisterEvent("UNIT_SPELLCAST_SUCCEEDED") 
    elseif 
    self:IsEventRegistered("UNIT_SPELLCAST_SUCCEEDED") then 
    self
    :UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED") 
    for 
    _, trinket in pairs(trinkets) do 
    trinket:SetCooldown(0, 0) 
    trinket:Hide() 
    end 
    end 
    end 

    SLASH_TESTAEF1 
    = "/testaef" 
    SlashCmdList["TESTAEF"] = function(msg, editBox) 
    if 
    not IsAddOnLoaded("Blizzard_ArenaUI") then 
    LoadAddOn
    ("Blizzard_ArenaUI") 
    end 
    ArenaEnemyFrames
    :Show() 
    local arenaFrame 
    for i = 1, 3 do 
    arenaFrame = _G["ArenaEnemyFrame"..i] 
    arenaFrame.classPortrait:SetTexture("Interface\\TargetingFrame\\UI-Classes-Circles") 
    arenaFrame.classPortrait:SetTexCoord(unpack(CLASS_ICON_TCOORDS["WARRIOR"])) 
    arenaFrame.name:SetText("Dispelme") 
    arenaFrame:Show() 
    CooldownFrame_SetTimer(trinkets["arena"..i], GetTime(), 120, 1) 
    end 
    end 

    events
    :SetScript("OnEvent", function(self, event, ...) return self[event](self, ...) end) 
    events:RegisterEvent("ADDON_LOADED") 
    events:RegisterEvent("PLAYER_ENTERING_WORLD") 
    hooksecurefunc("PlayerFrame_UpdateStatus", function()  
    if 
    IsResting("player") then  
    PlayerStatusTexture
    :Hide()
    end
    end
    ) 
    [свернуть]


    Иконки класов:

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


    PHP код:
    hooksecurefunc("UnitFramePortrait_Update",function(self)
        if 
    self.portrait then
            
    if (UnitIsPlayer(self.unit) or not UnitIsPlayer(self.unit)) then            
                local t 
    = CLASS_ICON_TCOORDS[select(2,UnitClass(self.unit))]
                if 
    t then
                    self
    .portrait:SetTexture("Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes"  )
                    
    self.portrait:SetTexCoord(unpack(t))
                
    end
            
    else
                
    self.portrait:SetTexCoord(0,1,0,1)
            
    end
        end
    end
    ); 
    [свернуть]

  11. #9
    Активист Аватар для envenomlolz
    Регистрация
    04.02.2013
    Сообщений
    74
    Поблагодарил(а)
    26
    Получено благодарностей: 20 (сообщений: 14).
    Репутация: 20
    включил аддон, поставил галочку. прописую /sdm, аддон не открывается. кэш, втф удалял. что делаю не так?

  12. #10
    Старожил Аватар для лапочкаж
    Регистрация
    26.12.2013
    Сообщений
    123
    Поблагодарил(а)
    78
    Получено благодарностей: 6 (сообщений: 5).
    Репутация: 6
    щас аддон открывать мжон*?

  13. #11
    Старожил
    Регистрация
    22.11.2012
    Сообщений
    129
    Поблагодарил(а)
    7
    Получено благодарностей: 5 (сообщений: 5).
    Репутация: 5
    есть ли какой нибудь аналог sdm ибо сейчас он не работает ( или мб у кого есть рабочая версия)

  14. #12
    Старожил
    Регистрация
    20.12.2013
    Сообщений
    126
    Поблагодарил(а)
    29
    Получено благодарностей: 48 (сообщений: 42).
    Репутация: 48
    Не работает СуперДуперМакро, почему?
    Цитата Сообщение от Spasko Посмотреть сообщение
    На Ат я за дц всегда 1х1 убивал дк, у дц же снятие болезней.
    Кто-то топ)

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. KgPanels Scripts
    от BadStyle в разделе Аддоны
    Ответов: 22
    Последнее сообщение: 18.07.2019, 18:39
  2. MOST EPIC MASS BAN MACROS I EVER SEEN!!!11
    от Я четвёртый в разделе Заявки на бан
    Ответов: 15
    Последнее сообщение: 05.01.2013, 20:42
  3. Rogue Macros
    от stot1kdruid в разделе PvP
    Ответов: 14
    Последнее сообщение: 21.12.2012, 20:59
  4. Macros for frost mage
    от moloko в разделе Корзина
    Ответов: 45
    Последнее сообщение: 25.03.2012, 19:09

Ваши права

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