Приветствуем вас на форуме проекта 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
    Получено благодарностей: 773 (сообщений: 336).
    Репутация: 1476

    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(UICCself.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(UICCself.portrait:SetTexCoord(unpack(t)) end end end
    Отличие, как вы можете заметить, минимальное. Просто убираем "/ run" перед нужной командой.
    Надеюсь сложностей на этом этапе ни у кого не возникнет.

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

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

    PHP код:
    local a CreateFrame("Frame")
    a:SetScript("OnEvent", function(selfevent)
    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(selfFrameOnUpdate(CTTend)
    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(selfFrameOnUpdate(CFTend)
    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.040.0)
    ArenaEnemyFrames:SetScale(1.2)
    local arenaFrametrinket
    for 1MAX_ARENA_ENEMIES do
    arenaFrame "ArenaEnemyFrame"..i
    trinket 
    CreateFrame("Cooldown"arenaFrame.."Trinket"ArenaEnemyFrames)
    trinket:SetPoint("TOPRIGHT"arenaFrame30, -6)
    trinket:SetSize(3030)
    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(unitIDspellranklineIDspellID)
    if 
    not trinkets[unitIDthen
    return
    end
    if  spell == GetSpellInfo(59752) or spell == GetSpellInfo(42292then
    CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 1201)
    SendChatMessage("Trinket used by: "..GetUnitName(unitIDtrue), "PARTY")
    elseif 
    spell == GetSpellInfo(7744then
    CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 451)
    SendChatMessage("WotF used by: "..GetUnitName(unitIDtrue), "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(00)
    trinket:Hide()
    end
    end
    end

    SLASH_TESTAEF1 
    "/testaef"
    SlashCmdList["TESTAEF"] = function(msgeditBox)
    if 
    not IsAddOnLoaded("Blizzard_ArenaUI"then
    LoadAddOn
    ("Blizzard_ArenaUI")
    end
    ArenaEnemyFrames
    :Show()
    local arenaFrame
    for 1do
    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(), 1201)
    end
    end

    events
    :SetScript("OnEvent", function(selfevent, ...) 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(selfFrameOnUpdate(CTTend)
    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(selfFrameOnUpdate(CFTend
    [свернуть]

    Координаты и размер иконки комбата настраиваются в строках:
    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.unitthen self.portrait:SetTexture(UICCself.portrait:SetTexCoord(unpack(CIT[select(2,UnitClass(self.unit))])) else self.portrait:SetTexCoord(0,1,0,1end 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
    fHeightfFlags CombatTextFont:GetFont()
    CombatTextFont:SetFont(fontNamefontHeightfFlags)
    end
    FS_SetFont
    () 
    [свернуть]

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

    5. Enemy Cooldowns:

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


    Координаты указываются здесь:
    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 (для этой операции используем вовхед)
    4)Также необходимо знать кулдаун спелла: 24 сек
    Теперь все необходимое у нас есть, чтобы добавить в скрипт. Ниже показана добавленная строчка к маговским абилкам.
    Жирным выделены изменения, произведенные в новой строке.

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

    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,30end);
    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,480end);
    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,15end);
    ...
    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 112 do _G["BonusActionButton"..i.."HotKey"]:SetAlpha(0end
    run for 112 do _G["MultiBarBottomLeftButton"..i.."HotKey"]:SetAlpha(0end
    run for 112 do _G["MultiBarBottomRightButton"..i.."HotKey"]:SetAlpha(0end
    run for 112 do _G["ActionButton"..i.."HotKey"]:SetAlpha(0end 
    run for 112 do _G["MultiBarLeftButton"..i.."HotKey"]:SetAlpha(0end
    run for 112 do _G["MultiBarRightButton"..i.."HotKey"]:SetAlpha(0end 
    [свернуть]


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

    Remove Macro Text from Action Bars

    PHP код:
    run for 112 do _G["BonusActionButton"..i.."Name"]:Hide() end
    run for 112 do _G["ActionButton"..i.."Name"]:Hide() end
    run for 112 do _G["MultiBarBottomLeftButton"..i.."Name"]:Hide() end
    run for 112 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,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"771468);BuffFrame.SetPoint = function() end
    run BuffFrame:SetScale(1.2)

    --
    player debuffs

    run DebuffButton1:ClearAllPoints();DebuffButton1:SetPoint("CENTER"PlayerFrame"CENTER"771468);DebuffButton1.SetPoint = function() end
    run DebuffButton1:SetScale(1.2)

    --
    target buffs

    run hooksecurefunc("TargetFrame_UpdateAuraPositions",function(selflocal 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(selfelapsed)
            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(selfevent, ...)
     
    -- 
    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 UnitIsPlayerUnitIsConnectedUnitClassRAID_CLASS_COLORS =
    UnitIsPlayerUnitIsConnectedUnitClassRAID_CLASS_COLORS
    local _
    , class, c
    local 
    function colour(statusbarunit)
    if 
    UnitIsPlayer(unit) and UnitIsConnected(unit) and unit == statusbar.unit and UnitClass(unitthen
    _
    , class = UnitClass(unit)
    CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class]
    statusbar:SetStatusBarColor(c.rc.gc.b)
    end
    end
    hooksecurefunc
    ("UnitFrameHealthBar_Update"colour)
    hooksecurefunc("HealthBar_OnValueChanged", function(self)
    colour(selfself.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(FRCS.c=RF("Cooldown","CST",CS.tCS:RegisterEvent(USD
    CS.c:SetAllPoints(CSCS: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(),23end if UE(select(1,...))==UE("player")and select(5,...)==408 then CST:SetCooldown(GetTime(),25)end end)
    SP=RF(FRSP.c=RF("Cooldown","SAP",SP.tSP:RegisterEvent(USD
    SP.c:SetAllPoints(SPSP: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(selfevent, ...)
                    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 == then
                            icon
    :SetVertexColor(1.00.10.1)
                    
    end
            end
    )
     
            
    hooksecurefunc("ActionButton_OnUpdate",function(selfelapsed)
                    
    local rangeTimer self.newTimer
     
                    
    if ( rangeTimer then
                            rangeTimer 
    rangeTimer elapsed
     
                            
    if ( rangeTimer <= 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 partyFrametrinket
        
    for 1MAX_PARTY_MEMBERS do
            
    partyFrame "PartyMemberFrame"..i
            trinket 
    CreateFrame("Cooldown"partyFrame.."Trinket")
            
    trinket:SetPoint("TOPRIGHT"partyFrame30, -6)
            
    trinket:SetSize(2424)
            
    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(unitIDspellranklineIDspellID)
        if 
    not trinkets[unitIDthen
            
    return
        
    end
        
    if spellID == 59752 or spellID == 42292 then
            CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 1201)        
        elseif 
    spellID == 7744 then
            CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 451)        
        
    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(00)
                
    trinket:Hide()
                 
    end  end  
    end
    events
    :SetScript("OnEvent", function(selfevent, ...) 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),osiklfc (31.07.2017),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
    Получено благодарностей: 773 (сообщений: 336).
    Репутация: 1476
    Цитата Сообщение от Диван Посмотреть сообщение
    А как самому писать скрипты, что для этого нужно?
    Скрипт - не что иное как связанное некоторой логикой набор стандартных функций.
    На что фантазии хватит - то и твори)

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


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

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

  6. #5
    Старожил Аватар для Kreis
    Регистрация
    02.04.2014
    Сообщений
    154
    Поблагодарил(а)
    6
    Получено благодарностей: 5 (сообщений: 5).
    Репутация: 5
    Не плохо

  7. #6
    Почетный флудер Аватар для H3VDL3$$
    Регистрация
    05.01.2012
    Сообщений
    2,208
    Поблагодарил(а)
    918
    Получено благодарностей: 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(selfFrameOnUpdate(CTTend)
    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(selfFrameOnUpdate(CFTend
    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.040.0
    ArenaEnemyFrames:SetScale(1.2
    local arenaFrametrinket 
    for 1MAX_ARENA_ENEMIES do 
    arenaFrame "ArenaEnemyFrame"..
    trinket 
    CreateFrame("Cooldown"arenaFrame.."Trinket"ArenaEnemyFrames
    trinket:SetPoint("TOPRIGHT"arenaFrame30, -6
    trinket:SetSize(3030
    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(unitIDspellranklineIDspellID
    if 
    not trinkets[unitIDthen 
    return 
    end 
    if  spell == GetSpellInfo(59752) or spell == GetSpellInfo(42292then 
    CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 1201
    SendChatMessage("Trinket used by: "..GetUnitName(unitIDtrue), "PARTY"
    elseif 
    spell == GetSpellInfo(7744then 
    CooldownFrame_SetTimer
    (trinkets[unitID], GetTime(), 451
    SendChatMessage("WotF used by: "..GetUnitName(unitIDtrue), "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(00
    trinket:Hide() 
    end 
    end 
    end 

    SLASH_TESTAEF1 
    "/testaef" 
    SlashCmdList["TESTAEF"] = function(msgeditBox
    if 
    not IsAddOnLoaded("Blizzard_ArenaUI"then 
    LoadAddOn
    ("Blizzard_ArenaUI"
    end 
    ArenaEnemyFrames
    :Show() 
    local arenaFrame 
    for 1do 
    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(), 1201
    end 
    end 

    events
    :SetScript("OnEvent", function(selfevent, ...) 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

Ваши права

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