alextigr Posted June 4, 2015 Posted June 4, 2015 (edited) Заготовка Для работы с любыми пользовательскими скриптами лучше всего использовать свою модификацию, которую вы будете править по своему усмотрению. Модификации в Мире Варкрафта хранятся и имеют такой вид: WoW (папка) - Папка в которую установлена игра Interface (папка) AddOns (папка) MyAddOn (папка) - Название аддона, название папки должно совпадать с названием .TOC файла внутри неё MyAddOn.toc (TOC файл) - "Манифест" для модификации MyAddOn.xml (FrameXML) - XML файл с настройками видимых элементов модификации MyAddOn.lua (Lua) - Файл с кодом модификации .TOC файл в папке с модификацией несет основные настройки и имеет в обычном случае данный вид: ## Title: MyAddOn ## Interface: 50300 MyAddOn.lua Немножко остановлюсь на этом и поясню что к чему. Первая строка отвечает за отображение названия модификации в самой игре. Вторая - за версию модификации, что бы в игре данная модификация не обозначалась как "Устаревшая модификация", нужно вовремя править версию интерфейса. Третья строка - это имя главного файла с кодом (скриптом) модификации. Если вам лень создавать данную заготовку или я что-то непонятно описал, то вот вам уже готовая, качайте, распаковывайте в папку с игрой и пользуйтесь. ДЛЯ ЛЕНИВЫХ Так же существует вот такой сайт http://addon.bool.no/, который сделает за вас всю грязную работа. Впишите нужные скрипты и качайте уже готовый аддон. Если вам необходимо использовать какой то пользовательский скрипт, то просто открываете файл MyAddOn.lua и в конце вставляете скрипт, сохраняете и в игре прописываете команду /reload. То есть для внесения изменений в данный файл даже ненужно выходить из игры, достаточно просто перезагрузить интерфейс после изменений. Скрипты 1.Изменение расстояние от игрока до камеры: SetCVar("cameraDistanceMax", 25) 2.Отключение слежения за персонажем на который направлено ваше потоковое заклинание: SetCVar("cameraSmoothTrackingStyle", 0) 3.Отключение отображения имени игрока создавшего вещь: ITEM_CREATED_BY = "" 4.Исправление бага обновления стандартного рейдового интерфейса после добавления\исключения игрока из рейда и бага связанного с неправильным выбором игроков: if not IsAddOnLoaded("Blizzard_CompactRaidFrames") then return end if not FixRaidTaint then local container = CompactRaidFrameContainer local t = { discrete = "flush", flush = "discrete", } local function OnEvent(self) if issecurevariable("CompactRaidFrame1") or InCombatLockdown() or not container:IsShown() then return end local mode = container.groupMode CompactRaidFrameContainer_SetGroupMode(container, t[mode]) CompactRaidFrameContainer_SetGroupMode(container, mode) end local f = CreateFrame("Frame", "FixRaidTaint") f:RegisterEvent("PLAYER_REGEN_ENABLED") f:SetScript("OnEvent", OnEvent) f.version = 0.2 end 5.Отключаем отображение фреймов арены на полях боя. Использую модификацию BattlegroundTargets, поэтому лишние фреймы с дублирующей информацией мне не нужны. local frame=CreateFrame("Frame") local function BGEventHandler(self, event, arg, ...) local inInstance, instanceType = IsInInstance() if event == "ADDON_LOADED" then if arg == "Blizzard_ArenaUI" then if (inInstance and (instanceType == "pvp")) then ArenaEnemyFrames:SetAlpha(0) ArenaEnemyFrame1:SetAlpha(0) ArenaEnemyFrame2:SetAlpha(0) ArenaEnemyFrame3:SetAlpha(0) ArenaEnemyFrame4:SetAlpha(0) ArenaEnemyFrame5:SetAlpha(0) ArenaEnemyFrame1CastingBar:SetAlpha(0) ArenaEnemyFrame2CastingBar:SetAlpha(0) ArenaEnemyFrame3CastingBar:SetAlpha(0) ArenaEnemyFrame4CastingBar:SetAlpha(0) ArenaEnemyFrame5CastingBar:SetAlpha(0) end if (inInstance and (instanceType == "arena")) then ArenaEnemyFrames:SetAlpha(100) ArenaEnemyFrame1:SetAlpha(100) ArenaEnemyFrame2:SetAlpha(100) ArenaEnemyFrame3:SetAlpha(100) ArenaEnemyFrame4:SetAlpha(100) ArenaEnemyFrame5:SetAlpha(100) ArenaEnemyFrame1CastingBar:SetAlpha(100) ArenaEnemyFrame2CastingBar:SetAlpha(100) ArenaEnemyFrame3CastingBar:SetAlpha(100) ArenaEnemyFrame4CastingBar:SetAlpha(100) ArenaEnemyFrame5CastingBar:SetAlpha(100) end end end end frame:RegisterEvent("PLAYER_ENTERING_WORLD") frame:RegisterEvent("PLAYER_ENTERING_BATTLEGROUND") frame:RegisterEvent("ZONE_CHANGED_NEW_AREA") frame:RegisterEvent("ARENA_OPPONENT_UPDATE") frame:RegisterEvent("ADDON_LOADED") frame:SetScript("OnEvent", BGEventHandler) 6.Затемняем стандартный интерфейс, уровень затемнения меняется в строчке "local ocolor = {.4, .4, .4, 1}": tex:SetDesaturated(false) tex:SetVertexColor(unpack(ocolor)) end end end end end for i,v in pairs({ PlayerFrameTexture, TargetFrameTextureFrameTexture, PetFrameTexture, PartyMemberFrame1Texture, PartyMemberFrame2Texture, PartyMemberFrame3Texture, PartyMemberFrame4Texture, PartyMemberFrame1PetFrameTexture, PartyMemberFrame2PetFrameTexture, PartyMemberFrame3PetFrameTexture, PartyMemberFrame4PetFrameTexture, FocusFrameTextureFrameTexture, TargetFrameToTTextureFrameTexture, FocusFrameToTTextureFrameTexture, MinimapBackdrop, MinimapBorder, MiniMapMailBorder, MiniMapTrackingButtonBorder, MinimapBorderTop, MinimapZoneTextButton, MiniMapWorldMapButton, MiniMapWorldMapButton, MiniMapWorldIcon, MinimapZoomIn:GetRegions(), MinimapZoomOut:GetRegions(), MiniMapWorldMapButton:GetRegions(), MiniMapBattlefieldBorder, MiniMapLFGFrameBorder, CastingBarFrameBorder, FocusFrameSpellBarBorder, TargetFrameSpellBarBorder, StanceBarLeft, StanceBarRight, StanceBarMiddle, select(2, CastingBarFrame:GetRegions()), select(2, MirrorTimer1:GetRegions()), BonusActionBarFrameTexture0, BonusActionBarFrameTexture1, BonusActionBarFrameTexture2, BonusActionBarFrameTexture3, BonusActionBarFrameTexture4, MainMenuBarTexture0, MainMenuBarTexture1, MainMenuBarTexture2, MainMenuBarTexture3, MainMenuMaxLevelBar0, MainMenuMaxLevelBar1, MainMenuMaxLevelBar2, MainMenuMaxLevelBar3, MainMenuXPBarTextureMid, MainMenuXPBarTextureLeftCap, MainMenuXPBarTextureRightCap, MainMenuBarLeftEndCap, MainMenuBarRightEndCap, SlidingActionBarTexture0, SlidingActionBarTexture1, ShapeshiftBarLeft, ShapeshiftBarMiddle, ShapeshiftBarRight, select(5, ShardBarFrameShard1:GetRegions()), select(5, ShardBarFrameShard2:GetRegions()), select(5, ShardBarFrameShard3:GetRegions()), select(1, PaladinPowerBar:GetRegions()), }) do if v and v:GetObjectType() == "Texture" then v:SetDesaturated(false) v:SetVertexColor(unpack(ocolor)) end end for i=1,19 do _G["MainMenuXPBarDiv"..i]:SetVertexColor(unpack(ocolor)) end if TimeManagerClockButton then for i,v in pairs({ select(1, TimeManagerClockButton:GetRegions()), select(1, GameTimeFrame:GetRegions()), }) do if v and v:GetObjectType() == "Texture" then v:SetDesaturated(false) v:SetVertexColor(unpack(ocolor)) end end end for i,v in pairs({ ArenaEnemyFrame1Texture, ArenaEnemyFrame2Texture, ArenaEnemyFrame3Texture, ArenaEnemyFrame4Texture, ArenaEnemyFrame5Texture, }) do v:SetDesaturated(false) v:SetVertexColor(unpack(ocolor)) end end) 7.Скрипт добавляет процент жизней на портрет персонажа\цели\фокуса\босса. Красиво, аккуратно: local name, addon = ... local UnitHealth, UnitHealthMax = UnitHealth, UnitHealthMax local healthUpdate = function(frame, _, unit) unit = unit or frame.unit local CurHP = UnitHealth(unit) local MaxHP = UnitHealthMax(unit) local Pct = math.floor(100*CurHP/MaxHP)/100 local Alpha = 1.0-Pct local r, g, b = 0, 1, 0 if 100*CurHP/MaxHP if Alpha if Pct > 0.5 then r = (1.0-Pct)*2; g = 1.0; else r = 1.0; g = Pct*2; end if r if g if r > 1 then r = 1 end if g > 1 then g = 1 end local hp = CurHP if hp > 0 then hp = hp / UnitHealthMax(unit) * 100 addon[unit]:SetTextColor(r, g, b, Alpha) addon[unit]:SetFormattedText("%.0f%%", hp) else addon[unit]:SetTextColor(r, g, b, Alpha) addon[unit]:SetText("0%") end end addon.player = CreateFrame("Frame", "PlayerPercent", PlayerFrameHealthBar) addon.player:ClearAllPoints() addon.player:SetPoint("CENTER", PlayerFrameHealthBar, "CENTER", -89, 20) addon.player:SetWidth(50) addon.player:SetHeight(20) addon.player:SetScript("OnEvent", healthUpdate) addon.player.unit = "player" addon.player:RegisterEvent("PLAYER_ENTERING_WORLD") addon.player:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", "player") addon.player = addon.player:CreateFontString("PlayerPercentText", "OVERLAY") addon.player:SetAllPoints("PlayerPercent") addon.player:SetFont("Fonts\\FRIZQT__.TTF", 12, "THICKOUTLINE") addon.player:SetJustifyH("CENTER") addon.target = CreateFrame("Frame", "TargetPercent", TargetFrameHealthBar) addon.target:ClearAllPoints() addon.target:SetPoint("CENTER", TargetFrameHealthBar, "CENTER", 92, 20) addon.target:SetWidth(50) addon.target:SetHeight(20) addon.target:SetScript("OnEvent", healthUpdate) addon.target.unit = "target" addon.target:RegisterEvent("PLAYER_TARGET_CHANGED") addon.target:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", "target") addon.target = addon.target:CreateFontString("TargetPercentText", "OVERLAY") addon.target:SetAllPoints("TargetPercent") addon.target:SetFont("Fonts\\FRIZQT__.TTF", 12, "THICKOUTLINE") addon.target:SetJustifyH("CENTER") addon.focus = CreateFrame("Frame", "FocusPercent", FocusFrameHealthBar) addon.focus:SetPoint("CENTER", FocusFrameHealthBar, "CENTER", 92, 20) addon.focus:SetWidth(50) addon.focus:SetHeight(20) addon.focus:SetScript("OnEvent", healthUpdate) addon.focus.unit = "focus" addon.focus:RegisterEvent("PLAYER_FOCUS_CHANGED") addon.focus:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", "focus") addon.focus = addon.focus:CreateFontString("FocusPercentText", "OVERLAY") addon.focus:SetAllPoints("FocusPercent") addon.focus:SetFont("Fonts\\FRIZQT__.TTF", 12, "THICKOUTLINE") addon.focus:SetJustifyH("CENTER") for i = 1, 5 do local boss, Boss = ("boss%d"):format(i), ("Boss%d"):format(i) addon[boss] = CreateFrame("Frame", Boss.."Percent", _G[boss.."TargetFrameHealthBar"]) addon[boss]:SetPoint("CENTER", _G[boss.."TargetFrameHealthBar"], "CENTER", 92, 20) addon[boss]:SetWidth(50) addon[boss]:SetHeight(20) addon[boss]:SetScript("OnEvent", healthUpdate) addon[boss]:SetScript("OnShow", healthUpdate) addon[boss].unit = boss addon[boss]:RegisterEvent("INSTANCE_ENCOUNTER_ENGAGE_UNIT") addon[boss]:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", boss) addon[boss] = addon[boss]:CreateFontString(Boss.."PercentText", "OVERLAY") addon[boss]:SetAllPoints(Boss.."Percent") addon[boss]:SetFont("Fonts\\FRIZQT__.TTF", 12, "THICKOUTLINE") addon[boss]:SetJustifyH("CENTER") end 8.Продажа хлама + Починка за счет гильдии\персонажа: local MSG_HEAD, MSG_TAIL = "|cFF8080FF", "|r"; function FormatMoney(money) return GetCoinTextureString(money) end local g = CreateFrame("Frame") g:RegisterEvent("MERCHANT_SHOW") g:SetScript("OnEvent", function() local SellAmount = 0; for b=0, 4 do local n=GetContainerNumSlots(b); for s=1, n do local texture, itemCount = GetContainerItemInfo(b, s); if texture then local _, _, itemRarity, _, _, _, _, _, _, _, itemSellPrice = GetItemInfo(GetContainerItemLink(b, s)); if itemRarity == 0 then UseContainerItem(b, s); SellAmount = SellAmount + itemSellPrice * itemCount; end end end end if SellAmount > 0 then print(MSG_HEAD.."Продано хлама на "..MSG_TAIL..FormatMoney(SellAmount)..MSG_TAIL); end if CanMerchantRepair() then local repairAllCost, canRepair = GetRepairAllCost() if canRepair and repairAllCost > 0 then if CanGuildBankRepair() then local amount = GetGuildBankWithdrawMoney() local guildBankMoney = GetGuildBankMoney() if amount == -1 then amount = guildBankMoney else amount = min(amount, guildBankMoney) end if amount > repairAllCost then RepairAllItems(1) print(MSG_HEAD.."Вещи отремонтированны на "..MSG_TAIL..FormatMoney(GetRepairAllCost())..MSG_HEAD..", за счет Банка Гильдии."..MSG_TAIL) return else print(MSG_HEAD.."В Банке Гильдии недостаточно средств для ремонта!"..MSG_TAIL) end end if GetMoney() > repairAllCost then RepairAllItems() print(MSG_HEAD.."Вещи отремонтированны на "..MSG_TAIL..FormatMoney(GetRepairAllCost())..MSG_TAIL); return else print(MSG_HEAD.."Недостаточно средств для ремонта."..MSG_TAIL) end end end end) 9.Удаляет текст боя (лечение\урон) с фрейма игрока\питомца: PlayerHitIndicator:SetText(nil) PlayerHitIndicator.SetText = function() end PetHitIndicator:SetText(nil) PetHitIndicator.SetText = function() end 10.Удаляем название макросов\биндов с панели действий. Первая часть кода это макросы, вторая - бинды. for i=1, 12 do _G["ActionButton"..i.."Name"]:SetAlpha(0) -- main bar _G["MultiBarBottomRightButton"..i.."Name"]:SetAlpha(0) -- bottom right bar _G["MultiBarBottomLeftButton"..i.."Name"]:SetAlpha(0) -- bottom left bar _G["MultiBarRightButton"..i.."Name"]:SetAlpha(0) -- right bar _G["MultiBarLeftButton"..i.."Name"]:SetAlpha(0) -- left bar end for i=1, 12 do _G["ActionButton"..i.."HotKey"]:SetAlpha(0) -- main bar _G["MultiBarBottomRightButton"..i.."HotKey"]:SetAlpha(0) -- bottom right bar _G["MultiBarBottomLeftButton"..i.."HotKey"]:SetAlpha(0) -- bottom left bar _G["MultiBarRightButton"..i.."HotKey"]:SetAlpha(0) -- right bar _G["MultiBarLeftButton"..i.."HotKey"]:SetAlpha(0) -- left bar end 11.Удаляем кнопки +\- у миникарты и добавляем зум при помощи скролла мышки: MinimapZoomIn:Hide() MinimapZoomOut:Hide() Minimap:EnableMouseWheel(true) Minimap:SetScript("OnMouseWheel", function(self, z) local c = Minimap:GetZoom() if(z > 0 and c Minimap:SetZoom(c + 1) elseif(z 0) then Minimap:SetZoom(c - 1) end end) 12.Делаем фрейм цели и игрока как у элитных мобов и красим его в цвет класса, цвет реакции под ником делаем с прозрачностью: local frame = CreateFrame("FRAME") frame:RegisterEvent("GROUP_ROSTER_UPDATE") frame:RegisterEvent("PLAYER_TARGET_CHANGED") frame:RegisterEvent("PLAYER_FOCUS_CHANGED") frame:RegisterEvent("UNIT_FACTION") frame:SetScript("OnEvent", function() if UnitIsPlayer("target") then local c = RAID_CLASS_COLORS[select(2, UnitClass("target"))] TargetFrameTextureFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Rare-Elite"); TargetFrameTextureFrameTexture:SetDesaturated(1); TargetFrameTextureFrameTexture:SetVertexColor(c.r, c.g, c.b) -- else TargetFrameTextureFrameTexture:SetVertexColor(.5, .5, .5) end if UnitIsPlayer("focus") then local c = RAID_CLASS_COLORS[select(2, UnitClass("focus"))] if c then FocusFrameNameBackground:SetVertexColor(c.r, c.g, c.b, 0.5) end else local r, g, b, _ = FocusFrameNameBackground:GetVertexColor() FocusFrameNameBackground:SetVertexColor(r, g, b, 0.5) end local r, g, b, _ = TargetFrameNameBackground:GetVertexColor() TargetFrameNameBackground:SetVertexColor(r, g, b, 0.5) local c = RAID_CLASS_COLORS[select(2, UnitClass("party1"))] if c then PartyMemberFrame1Texture:SetVertexColor(c.r, c.g, c.b) end local c = RAID_CLASS_COLORS[select(2, UnitClass("party2"))] if c then PartyMemberFrame2Texture:SetVertexColor(c.r, c.g, c.b) end local c = RAID_CLASS_COLORS[select(2, UnitClass("party3"))] if c then PartyMemberFrame3Texture:SetVertexColor(c.r, c.g, c.b) end local c = RAID_CLASS_COLORS[select(2, UnitClass("party4"))] if c then PartyMemberFrame4Texture:SetVertexColor(c.r, c.g, c.b) end PlayerFrameTexture:SetTexture("Interface\\TargetingFrame\\UI-TargetingFrame-Rare-Elite.blp"); PlayerFrameTexture:SetDesaturated(true) end) 13.Увеличиваем допустимые настройки изменения ширины и высоты в стандартном рейдовом интерфейсе: local n,w,h="CompactUnitFrameProfilesGeneralOptionsFrame" h,w = _G[n.."HeightSlider"], _G[n.."WidthSlider"] h:SetMinMaxValues(1,200) w:SetMinMaxValues(1,400) 14.Скрываем панель стоек: RegisterStateDriver(StanceBarFrame, "visibility", "hide") 15.Убираем грифонов по краям панели действий: MainMenuBarLeftEndCap:Hide() MainMenuBarRightEndCap:Hide() 16.Автоматически "встаем" после смерти: local frame = CreateFrame("Frame", "AutoRelease") function eventHandler(self, event, arg1) if event == "PLAYER_DEAD" then local InstStat, InstType = IsInInstance(); if InstStat == 1 and InstType == "pvp" then -- Check for soulstone if not (HasSoulstone()) then RepopMe(); end end return end end frame:SetScript("OnEvent", eventHandler) frame:RegisterEvent("PLAYER_DEAD") 17.Удаляем красный откат умений при потере контроля: f=CreateFrame("Frame") f:RegisterEvent("LOSS_OF_CONTROL_ADDED") f:RegisterEvent("LOSS_OF_CONTROL_UPDATE") f:SetScript("OnEvent",function()for b in pairs(ActionBarActionEventsFrame.frames)do b.cooldown:SetLossOfControlCooldown(0,0)end end) Или еще вот так: hooksecurefunc('ActionButton_OnUpdate',function(self)self.cooldown:SetLossOfControlCooldown(0,0)end) 18.Передвигаем фрейм потери контроля, для изменения меняем значения "0,-200": LossOfControlFrame:ClearAllPoints() LossOfControlFrame:SetPoint("CENTER",UIParent,"CENTER",0,-200) 19.Передвигаем иконку потери контроля, для изменения меняем значения "0,-200": select(4,LossOfControlFrame:GetRegions()):ClearAllPoints () select(4,LossOfControlFrame:GetRegions()):SetPoint("CENTER",UIParent,"CENTER",0,-200) 20.Скрыть темную текстуру у фрейма потери контроля: select(1,LossOfControlFrame:GetRegions()):SetAlpha(0) 21.Скрыть красные полосы сверху и снизу у фрейма потери контроля: SetAlpha(0) select(3,LossOfControlFrame:GetRegions()):SetAlpha(0) 22.Текст потери контроля под иконкой: select(5,LossOfControlFrame:GetRegions()):ClearAllPoints() select(5,LossOfControlFrame:GetRegions()):SetPoint("TOP",select(4,LossOfControlFrame:GetRegions()),"BOTTOM") 23.Удалить отсчет времени около иконки: select(2,LossOfControlFrame:GetChildren()):SetAlpha(0) 24.Иконка класса вместо портрета игрока: hooksecurefunc("UnitFramePortrait_Update",function(self) if self.portrait then if UnitIsPlayer(self.unit) then local t = CLASS_ICON_TCOORDS[select(2, UnitClass(self.unit))] if t then self.portrait:SetTexture("Interface\\TargetingFrame\\UI-Classes-Circles") self.portrait:SetTexCoord(unpack(t)) end else self.portrait:SetTexCoord(0,1,0,1) end end end) 25.Убираем задник у таймера, оставляя только текст и меняем его позицию на экране: local frame = CreateFrame("FRAME", "DefaultUIScrips") frame:RegisterEvent("PLAYER_ENTERING_WORLD") local function eventHandler(self, event, ...) StopwatchFrame:Show() StopwatchFrame:SetScale(.01) StopwatchFrame:ClearAllPoints() StopwatchFrame:SetPoint("TOPLEFT",23400,0) StopwatchTicker:SetScale(100) StopwatchTicker:SetPoint("TOPLEFT",0,-80) StopwatchFrame:SetMovable(false) end frame:SetScript("OnEvent", eventHandler) 26.Показываем одновременно количество жизней в процентном и числовом формате: TF=CreateFrame("Frame") TFHB=TargetFrameHealthBar.TextString;TTSB=TextStatusBar_CapDisplayOfNumericValue FF=CreateFrame("Frame") FFHB=FocusFrameHealthBar.TextString;TTSB=TextStatusBar_CapDisplayOfNumericValue TF:SetScript("OnUpdate", function(target)TFHB:SetText(TTSB(UnitHealth("target")).."/"..TTSB(UnitHealthMax("target")).." ("..format("%.0f", ((UnitHealth("target")/UnitHealthMax("target"))*100)).."%)") end) FF:SetScript("OnUpdate", function(focus)FFHB:SetText(TTSB(UnitHealth("focus")).."/"..TTSB(UnitHealthMax("focus")).." ("..format("%.0f", ((UnitHealth("focus")/UnitHealthMax("focus"))*100)).."%)") end) 27.Убираем\Меняем имя игрока (для параноиков или тайных агентов), новое имя записываем в переменную "NewName": local frame = CreateFrame("FRAME", "NameChangeScripts") frame:RegisterEvent("PLAYER_ENTERING_WORLD") local function eventHandler(self, event, ...) NewName = " " PN = GetUnitName("player") PFNC = CreateFrame("Frame", "PlayerFrameNameChange") local function ChangePlayerName(self) PlayerFrame.name:SetText(NewName) end PFNC:SetScript("OnUpdate", ChangePlayerName) 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) 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) 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) 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) 28.Убираем черный фон позади карты мира, делаем её кликабельной и очень удобной. local BigMap = function() WorldMapFrame:SetParent(UIParent) WorldMapFrame:EnableMouse(false) WorldMapFrame:EnableKeyboard(false) WorldMapFrame:SetScale(1) SetUIPanelAttribute(WorldMapFrame, "area", "center") SetUIPanelAttribute(WorldMapFrame, "allowOtherPanels", true) WorldMapFrame:SetFrameLevel(6) WorldMapDetailFrame:SetFrameLevel(WorldMapFrame:GetFrameLevel() + 1) WorldMapFrame:SetFrameStrata('TOOLTIP') BlackoutWorld:SetTexture(0, 0, 0, 0) end hooksecurefunc("WorldMap_ToggleSizeUp", BigMap) hooksecurefunc("WorldMapFrame_SetFullMapView", BigMap) BigMap() 29.Просто спам в чат: local spam = CreateFrame("Frame") spam:Hide() spam:SetScript("OnUpdate", function(self,elapsed) self.elapsed = (self.elapsed or 0)+elapsed if self.elapsed >= self.timer then SendChatMessage(self.message, self.channel, nil, self.data) self.elapsed = 0 end end) SlashCmdList["REPEATCHAT"]=function(input) if input:lower() == "stop" then spam:Hide() return end local message, delay, channel, data = input:match("\"(.+)\"%s+(%d+)%s+(%S+)%s*(%S*)") if (not message) or (not delay) or (not channel) then print("Proper syntax: "" ( )") return end spam.timer = tonumber(delay) spam.message = message spam.channel = channel:upper() spam.data = data spam.elapsed = 0 spam:Show() end SLASH_REPEATCHAT1="/repeatchat" SLASH_REPEATCHAT2="/repeat" Пишем в чат /repeat "сообщение" время чат (/repeat "Тест" 10 say) что бы начать отправлять каждые 10 секунд в обычный чат сообщение Тест. Что бы остановить спам пропишите /repeat stop. 30.Скрипт на перемещения стоек: StanceBarFrame:ClearAllPoints() StanceBarFrame:SetPoint("CENTER", MultiBarBottomRight, -30, 40) StanceBarFrame.SetPoint = function() end 31.Новый скрипт!2 боковые панельки скрывает если на них не наведен курсор: MultiBarRight:SetAlpha(0) MultiBarRight:EnableMouse(true) MultiBarRight:SetScript("OnEnter",function(self)MultiBarRight:SetAlpha(1)end) MultiBarRight:SetScript("OnLeave",function(self)MultiBarRight:SetAlpha(0)end) MultiBarRight:SetFrameLevel(0) for i =1,12 do _G["MultiBarRightButton"..i]:HookScript("OnEnter",function(self)MultiBarRight:SetAlpha(1)end) _G["MultiBarRightButton"..i]:HookScript("OnLeave",function(self)MultiBarRight:SetAlpha(0)end) end; MultiBarLeft:SetAlpha(1) MultiBarLeft:EnableMouse(true) MultiBarLeft:SetScript("OnEnter",function(self)MultiBarRight:SetAlpha(1)end) MultiBarLeft:SetScript("OnLeave",function(self)MultiBarRight:SetAlpha(0)end) MultiBarLeft:SetFrameLevel(0) for i =1,12 do _G["MultiBarLeftButton"..i]:HookScript("OnEnter",function(self)MultiBarRight:SetAlpha(1)end) _G["MultiBarLeftButton"..i]:HookScript("OnLeave",function(self)MultiBarRight:SetAlpha(0)end) end; 32.Прячем Бафы\Дебафы стандартные у цели\фокуса: UIParent:SetScript("OnUpdate", function() if TargetFrame:IsShown() then numBuffs = 0 for i=1, MAX_TARGET_BUFFS do if( select(3, UnitBuff("target", i)) ) then numBuffs = numBuffs + 1 end end numDebuffs = 0 for i=1, MAX_TARGET_DEBUFFS do if( select(3, UnitDebuff("target", i)) ) then numDebuffs = numDebuffs + 1 end end for i=1, numBuffs do local frame = _G["TargetFrameBuff"..i] frame:Hide() end for i=1, numDebuffs do local frame = _G["TargetFrameDebuff"..i] frame:Hide() end end if FocusFrame:IsShown() then numDebuffs = 0 for i=1, MAX_FOCUS_DEBUFFS do if( select(3, UnitDebuff("focus", i)) ) then numDebuffs = numDebuffs + 1 end end for i=1, numDebuffs do local frame = _G["FocusFrameDebuff"..i] frame:Hide() end end end) 33.Число лвла заменить процентами хп: PlayerFrame:SetScript("OnUpdate", function() if PlayerFrame:IsShown() then local CurHP = UnitHealth("player") local MaxHP = UnitHealthMax("player") local Pct = math.floor(100*CurHP/MaxHP)/100 local r, g, b = 0, 1, 0 if Pct > 0.5 then r = (1.0-Pct)*2; g = 1.0; else r = 1.0; g = Pct*2; end if r if g if r > 1 then r = 1 end if g > 1 then g = 1 end local hp = CurHP if hp > 0 then hp = hp / UnitHealthMax("player") * 100 PlayerLevelText:SetTextColor(r, g, b) PlayerLevelText:SetFormattedText("%.0f", hp) else PlayerLevelText:SetTextColor(r, g, b) PlayerLevelText:SetText("0") end end end) TargetFrame:SetScript("OnUpdate", function() if TargetFrame:IsShown() then local CurHP = UnitHealth("target") local MaxHP = UnitHealthMax("target") local Pct = math.floor(100*CurHP/MaxHP)/100 local r, g, b = 0, 1, 0 if Pct > 0.5 then r = (1.0-Pct)*2; g = 1.0; else r = 1.0; g = Pct*2; end if r if g if r > 1 then r = 1 end if g > 1 then g = 1 end local hp = CurHP if hp > 0 then hp = hp / UnitHealthMax("target") * 100 TargetFrameTextureFrameLevelText:SetTextColor(r, g, b) TargetFrameTextureFrameLevelText:SetFormattedText("%.0f", hp) else TargetFrameTextureFrameLevelText:SetTextColor(r, g, b) TargetFrameTextureFrameLevelText:SetText("0") end end end) FocusFrame:SetScript("OnUpdate", function() if FocusFrame:IsShown() then local CurHP = UnitHealth("focus") local MaxHP = UnitHealthMax("focus") local Pct = math.floor(100*CurHP/MaxHP)/100 local r, g, b = 0, 1, 0 if Pct > 0.5 then r = (1.0-Pct)*2; g = 1.0; else r = 1.0; g = Pct*2; end if r if g if r > 1 then r = 1 end if g > 1 then g = 1 end local hp = CurHP if hp > 0 then hp = hp / UnitHealthMax("focus") * 100 FocusFrameTextureFrameLevelText:SetTextColor(r, g, b) FocusFrameTextureFrameLevelText:SetFormattedText("%.0f", hp) else FocusFrameTextureFrameLevelText:SetTextColor(r, g, b) FocusFrameTextureFrameLevelText:SetText("0") end end end) 34.Изменение размера дебафов на фрейме рейда: CompactRaidFrameContainer:HookScript("Onupdate", function() for i=1,MAX_RAID_MEMBERS do for j=1,3 do local f = _G["CompactRaidFrame"..i.."Debuff"..j] if f then f:SetScale(1.5) end local f=_G["CompactRaidFrame"..i.."Debuff"..j.."Cooldown"] if f then f:SetScale(0.9) end end end end) 35.Скрипт подсвечивает прожимаемые вами кнопки на actionbar'е. Будет полезно для стримеров: local animationsCount, animations = 5, {} local animationNum = 1 local frame, texture, alpha1, scale1, scale2, rotation2 for i = 1, animationsCount do frame = CreateFrame("Frame") texture = frame:CreateTexture() texture:SetTexture('Interface\\Cooldown\\star4') texture:SetAlpha(0) texture:SetAllPoints() texture:SetBlendMode("ADD") animationGroup = texture:CreateAnimationGroup() alpha1 = animationGroup:CreateAnimation("Alpha") alpha1:SetChange(1) alpha1:SetDuration(0) alpha1:SetOrder(1) scale1 = animationGroup:CreateAnimation("Scale") scale1:SetScale(1.5, 1.5) scale1:SetDuration(0) scale1:SetOrder(1) scale2 = animationGroup:CreateAnimation("Scale") scale2:SetScale(0, 0) scale2:SetDuration(0.3) scale2:SetOrder(2) rotation2 = animationGroup:CreateAnimation("Rotation") rotation2:SetDegrees(90) rotation2:SetDuration(0.3) rotation2:SetOrder(2) animations[i] = {frame = frame, animationGroup = animationGroup} end local AnimateButton = function(self) if not self:IsVisible() then return true end local animation = animations[animationNum] local frame = animation.frame local animationGroup = animation.animationGroup frame:SetFrameStrata(self:GetFrameStrata()) frame:SetFrameLevel(self:GetFrameLevel() + 10) frame:SetAllPoints(self) animationGroup:Stop() animationGroup:Play() animationNum = (animationNum % animationsCount) + 1 return true end hooksecurefunc('MultiActionButtonDown', function(bname, id) AnimateButton(_G[bname..'Button'..id]) end) hooksecurefunc('ActionButtonDown', function(id) local button if C_PetBattles.IsInBattle() then if PetBattleFrame then if id > NUM_BATTLE_PET_HOTKEYS then return end button = PetBattleFrame.BottomFrame.abilityButtons[id] if id == BATTLE_PET_ABILITY_SWITCH then button = PetBattleFrame.BottomFrame.SwitchPetButton; elseif id == BATTLE_PET_ABILITY_CATCH then button = PetBattleFrame.BottomFrame.CatchButton; end if not button then return end end return end if OverrideActionBar and OverrideActionBar:IsShown() then if id > NUM_OVERRIDE_BUTTONS then return end button = _G["OverrideActionBarButton"..id] else button = _G["ActionButton"..id] end if not button then return end AnimateButton(button) end) 36.Скрипт, который поможет изменить прозрачность фреймов других игроков, которые находятся вне досягаемости. Подчеркнул значение которое необходимо менять, значение может быть равно числу от 0 (полностью скрыть,) до 1 (полностью показать): function hookCompactUnitFrame_UpdateInRange(frame) if ( not frame.optionTable.fadeOutOfRange ) then frame:SetAlpha(1); return; end local inRange, checkedRange = UnitInRange(frame.displayedUnit); if ( checkedRange and not inRange ) then frame:SetAlpha(0.55); else frame:SetAlpha(1); end end hooksecurefunc("CompactUnitFrame_UpdateInRange", hookCompactUnitFrame_UpdateInRange) 37.Скрипт показывает фрейм рейда, даже если вы не в группе: local noop = function() end for _, v in ipairs({CompactRaidFrameManager, CompactRaidFrameContainer}) do v.UnregisterAllEvents = noop v.UnregisterEvent = noop v.Hide = noop v:Show() end 38.Небольшой , но очень полезный скрипт на отключение спама "НЕ МОГУ ПРИМЕНИТЬ ЗАКЛИНАНИЕ": /script UIErrorsFrame:SetAlpha(0) 39.Скрипт отображает баффы/дебаффы под фреймом игрока: --[[ BuffTracker bl = icon list bs = icon size xb = x positon of buff Tracker yb = y positon of buff Tracker br = x buffs per line ]]-- bl={114635,113858,126705,125487,104993,73651,5171} bs=30;xb=-160;yb=-40;br=6;bdr="BORDER"be="UNIT_AURA"cbf=CreateFrame;gi=GetSpellInfo;bm=math.ceil;fm=math.floor;st=STANDARD_TEXT_FONT;function cu(s)return UnitBuff("player",gi(s))end function Cb(i,s)local _,_,t3=gi(s)local f=cbf("Frame")f:SetSize(bs,bs)f.t=f:CreateTexture(nil,bdr)f.t:SetAllPoints(true)f.t:SetTexture(t3)f.f=f:CreateFontString(nil,bdr)f.f:SetFont(st,12,"OUTLINE")f.f:SetPoint("BOTTOMRIGHT",0,0)return f;end function vb(s,i,row)local b1,_,_,b4=cu(s)local f=_G["B"..i]if b1 then f:Show()f:SetPoint("CENTER",xb+(bs+5)*bm((row-1)%br),yb-(bs+10)*bm(row/br))if(b4>1)then f.f:SetText(b4)end row=row+1;end return row;end function ub()for i,s in ipairs(bl)do local b,_,_,_,_,_,k=cu(s)if b then local vt=fm(k-GetTime())if(vt>=60)then vt=bm(vt/60)_G["B"..i].c:SetText(vt.."m")elseif vt >=0 then _G["B"..i].c:SetText(vt.."s")end end end end function Cc(f)f.c=f:CreateFontString(nil,bdr)f.c:SetFont(st,12,"OUTLINE")f.c:SetPoint("CENTER",0,-20)end function db()for i in ipairs(bl)do _G["B"..i]:Hide()end end for i,s in ipairs(bl)do _G["B"..i]=Cb(i,s)Cc(_G["B"..i])_G["B"..i]:Hide()end function bb()db()local bw=1;for i,s in ipairs(bl)do bw=vb(s,i,bw)end end bk=cbf("Frame")bk:SetScript("OnEvent",bb)bk:SetScript("OnUpdate",ub)bk:RegisterEvent(be) 40.Скрытие иконки роли на фрейме персонажа: local Frame = CreateFrame("Frame") Frame:SetScript("OnUpdate", function() PlayerFrameRoleIcon:Hide() end) 41.Пишет о прерывании каста в группу/рейд local f = CreateFrame("Frame") local function Update(self, event, ...) local pvpType = GetZonePVPInfo() f:UnregisterEvent("ZONE_CHANGED_NEW_AREA") if event == "COMBAT_LOG_EVENT_UNFILTERED" then local timestamp, eventType, _, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, _, spellID, spellName, _, extraskillID, extraSkillName = ... if eventType == "SPELL_INTERRUPT" and sourceName == UnitName("player") then RaidNotice_AddMessage( RaidBossEmoteFrame, "Interrupted -> "..GetSpellLink(extraskillID).."!", ChatTypeInfo["RAID_BOSS_EMOTE"] ) SendChatMessage("Interrupted -> "..GetSpellLink(extraskillID).."!", "INSTANCE_CHAT") end end end f:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") f:RegisterEvent("ZONE_CHANGED_NEW_AREA") f:SetScript("OnEvent", Update) 42.Cкрипт, который меняет цвет полоски жизней в зависимости от текущего% : 100%жизней - зелёная 50% - желтая 20% - красная local function colour(statusbar, unit) if UnitIsPlayer(unit) and UnitIsConnected(unit) and unit == statusbar.unit then if UnitHealth(unit) > UnitHealthMax(unit) * .75 then statusbar:SetStatusBarColor(0,1,0) elseif UnitHealth(unit) > UnitHealthMax(unit) * .50 then statusbar:SetStatusBarColor(1,1,0) elseif UnitHealth(unit) > UnitHealthMax(unit) * .25 then statusbar:SetStatusBarColor(1,.5,0) elseif UnitHealth(unit) > 0 then statusbar:SetStatusBarColor(1,0,0) end end end hooksecurefunc("UnitFrameHealthBar_Update", colour) hooksecurefunc("HealthBar_OnValueChanged", function(self) colour(self, self.unit) end) Если есть еще какие нибудь полезные скрипты прошу писать в комментариях:o Источник http://eu.battle.net/wow/ru/forum/topic/7739694288 Edited June 5, 2015 by alextigr 1
Меровинген Posted June 4, 2015 Posted June 4, 2015 Во-первых, где ссылка на источник? Во-вторых, зачем это здесь? Сомневаюсь, что кто-то будет этим заморачиваться (к этим кому-то и ты относишься, ТС).
Я спасу всех вас Posted December 18, 2023 Posted December 18, 2023 В 04.06.2015 в 20:48, alextigr сказал: ## Title: MyAddOn ## Interface: 50300 почему у тебя код интерфейса не 50400? если ядро 5.4.8
OnexShot Posted December 18, 2023 Posted December 18, 2023 Только что, Я спасу всех вас сказал: 1 минуту назад, Я спасу всех вас сказал: 1 минуту назад, Я спасу всех вас сказал: 1 минуту назад, Я спасу всех вас сказал: почему у тебя код интерфейса не 50400? если ядро 5.4.8 Разницы нет 1
Я спасу всех вас Posted December 18, 2023 Posted December 18, 2023 6 минут назад, OnexShot сказал: Разницы нет здоровья
Sqeer Posted December 18, 2023 Posted December 18, 2023 41 минуту назад, Я спасу всех вас сказал: здоровья Зачем менять то,что работает?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now