Jump to content

Пользовательские скрипты


alextigr

Recommended Posts

Заготовка

Для работы с любыми пользовательскими скриптами лучше всего использовать свою модификацию, которую вы будете править по своему усмотрению.

Модификации в Мире Варкрафта хранятся и имеют такой вид:

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 by alextigr
  • Like 1
Link to comment
Share on other sites

  • 5 years later...

local t = CreateFrame("Frame", UIParent)

t.t = t:CreateTexture()

t.t:SetTexture("Interface\\Icons\\ABILITY_DUALWIELD")

t.t:SetTexCoord(0.5,1,0,0.49);

t.t:SetAllPoints(t)

t:SetWidth(15)

t:SetHeight(15)

t:SetPoint("CENTER", TargetFrame, "CENTER", 52, -12)

t:Show()

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(t) end)

local f = CreateFrame("Frame", UIParent)

f.t = f:CreateTexture()

f.t:SetTexture("Interface\\Icons\\ABILITY_DUALWIELD")

f.t:SetTexCoord(0.5,1,0,0.49);

f.t:SetAllPoints(f)

f:SetWidth(25)

f:SetHeight(25)

f:SetPoint("CENTER", FocusFrame, "CENTER", 52, -12)

f:Show()

local function FrameOnUpdateFocus(self)

if UnitAffectingCombat("focus") then

self:Show()

else

self:Hide()

end

end

local g = CreateFrame("Frame")

g:SetScript("OnUpdate", function(self) FrameOnUpdateFocus(f) end)

 

 

Хочу вместо этой иконки https://wowwiki.fandom.com/wiki/Dual_Wield_(shaman_ability) вот эту https://wowwiki.fandom.com/wiki/Neutral (она же - https://wow.gamepedia.com/Template:Neutral)

Каким образом мне её туда приклеить? От она (https://vignette.wikia.nocookie.net/wow/images/1/19/Neutral_32.png/revision/latest?cb=20200903173622&path-prefix=ru)

1) обыскал вики (https://wowwiki.fandom.com/wiki/Category:WoW_Icons) не нашёл

2) форматировал искомый png в blp, не помогало. Не знаю куда и как её сувать, чтобы находило, не работает

3) искал в игре фракцию с нейтральной репой, чтобы определить через /fstack но таких не нашел

4) на вовхеде по иконкам не вижу

5) на воввики по иконкам не вижу (https://wowwiki.fandom.com/wiki/WoWWiki:WoW_Icons#Icons_Filename_Directory)

 

Есть догадки, что иконки нет в игре, но я её видел на скрине, т.е. как-то присобачить её можно.

Помогите доработать п.2

 

- - - Добавлено - - -

 

Скриптеры тут?

 

upd. я смог

Сорсы

1) https://www.wowinterface.com/forums/forumdisplay.php?f=14

2) https://www.wowinterface.com/forums/showthread.php?t=50495

3) https://www.wowinterface.com/forums/showthread.php?t=48375&highlight=blp

Edited by Ink_Forever
Link to comment
Share on other sites

  • 3 years later...
Только что, Я спасу всех вас сказал:
1 минуту назад, Я спасу всех вас сказал:

 

1 минуту назад, Я спасу всех вас сказал:

 

1 минуту назад, Я спасу всех вас сказал:

почему у тебя код интерфейса не 50400? если ядро 5.4.8

 

 

 

Разницы нет

  • Yes 1
Link to comment
Share on other sites

41 минуту назад, Я спасу всех вас сказал:

здоровья

Зачем менять то,что работает?

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...