mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-30 15:40:51 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f33a9068f2 | ||
|
|
187e057923 | ||
|
|
3899004957 | ||
|
|
ee73cde828 | ||
|
|
76efd5b490 | ||
|
|
393b37b8c3 | ||
|
|
7928db33bf | ||
|
|
5d8314b2d4 | ||
|
|
3987cfb8a0 | ||
|
|
796f20eadf | ||
|
|
26c55bddb0 | ||
|
|
8c22fdb850 | ||
|
|
2d275c53fa | ||
|
|
ba752056ad | ||
|
|
1ccf87c61a | ||
|
|
dc89f01dda | ||
|
|
a917a70b1c | ||
|
|
03ea3d5aa5 | ||
|
|
2b4d33d46a | ||
|
|
94dcfb3dad | ||
|
|
0890905eb6 | ||
|
|
6c76a88467 | ||
|
|
35c32f365e | ||
|
|
6dcb5162be | ||
|
|
8afafe71cf | ||
|
|
99ed538ee7 | ||
|
|
f382039f21 | ||
|
|
8307dd757e | ||
|
|
5ab5337bbc | ||
|
|
d15b1cd320 | ||
|
|
0cabf2ec29 | ||
|
|
fe376b8e51 | ||
|
|
e326cea05e | ||
|
|
d9e74b3bc5 | ||
|
|
0e428de74c | ||
|
|
df21f1f26c | ||
|
|
bd7bf3f39f | ||
|
|
987c337709 | ||
|
|
cdaf9336a3 | ||
|
|
e4f0849816 | ||
|
|
c03b74c3d1 | ||
|
|
e583ac1e83 | ||
|
|
964c316cdc | ||
|
|
b73ed88346 | ||
|
|
b374a0914a | ||
|
|
aaddeb120a | ||
|
|
1ad78d43e9 | ||
|
|
dde4a5aa2d | ||
|
|
e7e1382693 | ||
|
|
6aaf4f2047 | ||
|
|
233d0dafc0 | ||
|
|
95e832835e | ||
|
|
cae7c2d68a | ||
|
|
8abde7beba | ||
|
|
fbb0c4c254 | ||
|
|
42e950639f | ||
|
|
e70c8025c2 | ||
|
|
8f1322d71c | ||
|
|
935b854073 | ||
|
|
df16988d3f | ||
|
|
627ab8b437 | ||
|
|
c36184081a | ||
|
|
d881d73246 | ||
|
|
b9f473c049 | ||
|
|
9cb21b982b | ||
|
|
65ad47e842 | ||
|
|
50aba54289 | ||
|
|
d58060b188 | ||
|
|
340bd9be9e | ||
|
|
287a4ed46c | ||
|
|
341ba95561 | ||
|
|
1600ec333b | ||
|
|
471c5713c5 | ||
|
|
5d38322b2e | ||
|
|
40dd9dd6db | ||
|
|
c1eba4d295 | ||
|
|
cbc531531c | ||
|
|
b57fc52f9a | ||
|
|
8268af915a | ||
|
|
1108746949 | ||
|
|
38b4100353 | ||
|
|
f497c71523 | ||
|
|
8e109a585a | ||
|
|
83f89be14a | ||
|
|
e59158764c | ||
|
|
863d99647d | ||
|
|
06b3ae8d22 | ||
|
|
879d7afe83 | ||
|
|
4eab494a01 | ||
|
|
bb8ce8fd63 | ||
|
|
75c4657ab9 | ||
|
|
5815b9e81e | ||
|
|
60f953178f | ||
|
|
1dc10964a2 | ||
|
|
0fc08e77c0 | ||
|
|
7f3795b45b | ||
|
|
8eee766652 | ||
|
|
2b5288a688 | ||
|
|
daba4e202e | ||
|
|
98c7751416 | ||
|
|
8796fab6d8 | ||
|
|
7ca0e40d8b | ||
|
|
2f93b246a1 | ||
|
|
c647698f8f | ||
|
|
48026008b6 | ||
|
|
c1d96bae58 | ||
|
|
1d44c5ec6f | ||
|
|
8f88dfd852 | ||
|
|
a57214aeb0 | ||
|
|
9bde843e33 | ||
|
|
ad13e6ace3 | ||
|
|
82c74c2db5 | ||
|
|
a3cfd711fe | ||
|
|
a7ad1f073f | ||
|
|
fe5b3b135b | ||
|
|
9c29f0c7d4 | ||
|
|
685ecb4a3e | ||
|
|
8cdaf1fc00 | ||
|
|
bb39c9d94e | ||
|
|
18059ffbb7 | ||
|
|
d75e280238 | ||
|
|
9eb34b8f0a | ||
|
|
f8dde49f09 | ||
|
|
74fbbb6154 | ||
|
|
af6893c10c | ||
|
|
be6b2ea036 | ||
|
|
afdb6c3862 | ||
|
|
b230a45b92 | ||
|
|
ef1fa47539 | ||
|
|
ab0ad7dcf9 | ||
|
|
c82813df5b | ||
|
|
6e1f8095a2 | ||
|
|
9cabdf2974 | ||
|
|
b6931359b0 | ||
|
|
e017dbf515 | ||
|
|
69d778d6d6 | ||
|
|
75a25cf614 | ||
|
|
9daf6165fd | ||
|
|
06768c985a | ||
|
|
881a17e508 | ||
|
|
4e461d766e | ||
|
|
2dfaa65168 | ||
|
|
97ef039d3a | ||
|
|
25ef02705c | ||
|
|
48d1da2015 | ||
|
|
ff29e9d3c2 | ||
|
|
f0f1c80e24 | ||
|
|
5b4cb2bc9f | ||
|
|
5a3a962c90 | ||
|
|
cd08db75d2 | ||
|
|
6365f0cdb1 | ||
|
|
faa801e27d | ||
|
|
421a103f22 | ||
|
|
ecb28fb194 | ||
|
|
94268b1162 | ||
|
|
1c7c91fdf7 | ||
|
|
7f5d18bc30 | ||
|
|
7efc3334ae | ||
|
|
f322fbd6c6 | ||
|
|
41b77a5728 | ||
|
|
06fea6c889 | ||
|
|
940a1adae0 | ||
|
|
d13710c5a4 | ||
|
|
c3dd7cb601 | ||
|
|
9190b88974 | ||
|
|
fe0ec82ede | ||
|
|
350b1d63ae | ||
|
|
c7f42491ef | ||
|
|
6b458c9e27 | ||
|
|
f338deebe7 | ||
|
|
c994d00596 | ||
|
|
4be680183a | ||
|
|
2352f1c6ed | ||
|
|
305ff6c86e | ||
|
|
a8b131898b | ||
|
|
1f9be33772 | ||
|
|
a798e67b7f | ||
|
|
8b87e30266 | ||
|
|
f68b14e53b | ||
|
|
8ab6fab04f | ||
|
|
6d1bfe805e | ||
|
|
838f7f5d25 | ||
|
|
fad078fa87 | ||
|
|
48d76138ed | ||
|
|
fe22dfc456 | ||
|
|
5eaab2784f | ||
|
|
f41d5ac6d0 | ||
|
|
af8780bb41 | ||
|
|
ea37f41db1 | ||
|
|
6f36da7aa1 | ||
|
|
149d5dd362 | ||
|
|
0156d9dfec | ||
|
|
6b945c2c97 | ||
|
|
452eef3864 | ||
|
|
6f7a57f530 | ||
|
|
a55460e543 | ||
|
|
58aaeef5f0 | ||
|
|
487af0c8f4 | ||
|
|
00292ca3b4 | ||
|
|
cba3604906 | ||
|
|
a31d10384b | ||
|
|
f06af48bc2 | ||
|
|
d73c4de695 | ||
|
|
dd8c529463 | ||
|
|
47a7b4c686 | ||
|
|
cf3f1e5440 | ||
|
|
182127bd67 | ||
|
|
3d2e6e202b | ||
|
|
3a062ee2ac | ||
|
|
5ed1d98ecc | ||
|
|
fa1dc5637e | ||
|
|
8506f5ffbf | ||
|
|
9c529512d1 | ||
|
|
88d0f7bf74 | ||
|
|
a3ff20782d | ||
|
|
88c2462fbd | ||
|
|
e28a7e5606 | ||
|
|
dfa74c5756 | ||
|
|
1c0c9dc019 | ||
|
|
801935130e | ||
|
|
8cdced5ec0 | ||
|
|
756e8840af | ||
|
|
b2db091d54 | ||
|
|
5fae0bd459 | ||
|
|
3deddf2b08 | ||
|
|
650bcda001 | ||
|
|
931fe6c22d | ||
|
|
bd4a40b0f2 | ||
|
|
31ff2773b3 | ||
|
|
8176b906df | ||
|
|
721ecce59d | ||
|
|
73b409fb88 | ||
|
|
0665764610 | ||
|
|
3faf06141f | ||
|
|
0c06401ec4 | ||
|
|
c68e48111d | ||
|
|
6936fd894b | ||
|
|
b5277ea457 | ||
|
|
63f0dcbf7a | ||
|
|
0344bff471 | ||
|
|
1510969105 | ||
|
|
6e7361c543 | ||
|
|
2e20a03cbd | ||
|
|
7389c241a4 | ||
|
|
fb5230828c | ||
|
|
7aee348a70 | ||
|
|
2a5f480839 | ||
|
|
23d1ab840c | ||
|
|
13a08b0ea3 | ||
|
|
a2177fbf49 | ||
|
|
9cd83e90ad | ||
|
|
9bcc11e64f | ||
|
|
acab272ec0 | ||
|
|
61c2f996fa | ||
|
|
59ce6d9e74 | ||
|
|
967487e283 | ||
|
|
ab11096b01 | ||
|
|
0402db380a | ||
|
|
68fe7e22db | ||
|
|
a93e9f530c | ||
|
|
3be0585039 | ||
|
|
ee7c729bcb | ||
|
|
62e0d4eb07 | ||
|
|
a4ceb8ba53 | ||
|
|
80b677a6f8 | ||
|
|
f6683b31af | ||
|
|
b47df9272d | ||
|
|
c0b717878d | ||
|
|
31c95606d0 | ||
|
|
3fe072c594 | ||
|
|
9706a74d16 | ||
|
|
f9b0b5983a | ||
|
|
176e131d6b | ||
|
|
a17229abb1 | ||
|
|
e0cf01772c | ||
|
|
c2d4106170 | ||
|
|
dbfd337d42 | ||
|
|
d834be9f0b | ||
|
|
82a07e1e35 | ||
|
|
703d7770ca | ||
|
|
bd722b0f0f | ||
|
|
e5c51fff48 | ||
|
|
6570afb70a | ||
|
|
0f97e8b0bd | ||
|
|
64c62a2a25 | ||
|
|
4d316ed43a | ||
|
|
db0195f0f7 | ||
|
|
3d2d5f9254 | ||
|
|
dfbeeb454a | ||
|
|
439d5a397a | ||
|
|
5524ad3b91 | ||
|
|
0f59a3a9b5 | ||
|
|
ffdf376ac4 | ||
|
|
9bdde06150 | ||
|
|
8bf6672114 | ||
|
|
29b948e6fa | ||
|
|
5f61f94a24 | ||
|
|
65678da3d2 | ||
|
|
9b7aca8541 | ||
|
|
60525eec3a | ||
|
|
c3829c2bd2 | ||
|
|
28de6fd835 | ||
|
|
fc75e091a4 | ||
|
|
ef478b0552 | ||
|
|
760d8992b6 | ||
|
|
62a99ac410 | ||
|
|
deeec89955 | ||
|
|
cca9771ef0 | ||
|
|
371872bb90 | ||
|
|
591045a606 | ||
|
|
f657a9e7e8 | ||
|
|
0cbd9ecf98 | ||
|
|
6ca482fcaa | ||
|
|
8902d43f40 | ||
|
|
8f006c0643 | ||
|
|
de7dacf788 | ||
|
|
e0bcbbf2dc | ||
|
|
65bbea6fa9 | ||
|
|
822c873132 | ||
|
|
96fd486187 | ||
|
|
b79132b9f4 | ||
|
|
d62a1222df | ||
|
|
be6ae25315 | ||
|
|
d6951b386e | ||
|
|
fd21b24a74 | ||
|
|
90ac4f9de0 | ||
|
|
63f9b26d91 |
+2
-2
@@ -1,2 +1,2 @@
|
||||
github: [shagu]
|
||||
ko_fi: shagu
|
||||
github: [brues]
|
||||
buy_me_a_coffee: brues
|
||||
|
||||
@@ -4,16 +4,18 @@ about: Report a bug or issue with pfUI
|
||||
title: "[Bug Description] "
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!-- Please fill out ALL fields below. Issues without this info may be closed. -->
|
||||
|
||||
**pfUI Branch:**
|
||||
- [ ] Master
|
||||
- [ ] experiment
|
||||
**pfUI Version:**
|
||||
|
||||
**Your ClassicAPI Version:**
|
||||
|
||||
**Your Nampower Version:**
|
||||
|
||||
|
||||
**Your Nampower Version:** (e.g. latest, or specific commit/date)
|
||||
<!-- Skip if using Compat branch -->
|
||||
|
||||
**Other Addons installed:**
|
||||
<!-- List any other addons you are using, or "none" -->
|
||||
@@ -45,4 +47,3 @@ Paste error log here
|
||||
## Screenshot / Video
|
||||
<!-- Attach a screenshot or video showing the issue. This is REQUIRED. -->
|
||||
<!-- Drag & drop images here or paste a link -->
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ about: Suggest a new feature or improvement for pfUI
|
||||
title: "[Feature] "
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Feature Description
|
||||
@@ -20,4 +21,3 @@ assignees: ''
|
||||
|
||||
## Examples
|
||||
<!-- If possible, show examples from other addons or screenshots/mockups of how it could look -->
|
||||
|
||||
|
||||
@@ -23,12 +23,12 @@ jobs:
|
||||
IFS=. read -r MAJOR MINOR PATCH <<<"$LATEST"
|
||||
PACKED=$((MAJOR * 10000 + MINOR * 100 + PATCH))
|
||||
echo "Pinning PFUI_CLASSIC_API_LATEST to $LATEST ($PACKED)"
|
||||
sed -i "s/^\([[:space:]]*\)local PFUI_CLASSIC_API_LATEST = [0-9]*/\1local PFUI_CLASSIC_API_LATEST = $PACKED/" pfUI.lua
|
||||
grep 'local PFUI_CLASSIC_API_' pfUI.lua
|
||||
sed -i "s/^\([[:space:]]*\)local PFUI_CLASSIC_API_LATEST = .*/\1local PFUI_CLASSIC_API_LATEST = $PACKED/" API_Check.lua
|
||||
grep 'local PFUI_CLASSIC_API_' API_Check.lua
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Package and release to GitHub
|
||||
uses: BigWigsMods/packager@v2
|
||||
uses: brues-code/packager@vCAPI
|
||||
env:
|
||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"runtime": {
|
||||
"version": "Lua 5.1"
|
||||
},
|
||||
"diagnostics": {
|
||||
"disable": ["deprecated"],
|
||||
"globals": [
|
||||
"this",
|
||||
"event",
|
||||
"arg",
|
||||
"arg1",
|
||||
"arg2",
|
||||
"arg3",
|
||||
"arg4",
|
||||
"arg5",
|
||||
"arg6",
|
||||
"arg7",
|
||||
"arg8",
|
||||
"arg9"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1 +1,4 @@
|
||||
manual-changelog: CHANGELOG.md
|
||||
package-as: pfUI
|
||||
|
||||
ignore:
|
||||
- .luarc.json
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
do
|
||||
-- ClassicAPI dependency gate.
|
||||
--
|
||||
-- Which TOC the client opened already answers "is ClassicAPI here?". Whenever
|
||||
-- the DLL is loaded it redirects the read of `pfUI\pfUI.toc` to
|
||||
-- `pfUI_Turtle.toc` (Turtle clients) or `pfUI_ClassicAPI.toc` (everything
|
||||
-- else). Reaching this file from the plain `pfUI.toc` therefore means
|
||||
-- ClassicAPI is absent -- and that TOC deliberately loads nothing but this
|
||||
-- file, so there is nothing to disable, only a notice to show.
|
||||
--
|
||||
-- The flavor TOCs still need a version gate of their own: the redirect has
|
||||
-- existed since ClassicAPI v1.11.0, well below the API surface pfUI relies
|
||||
-- on. There pfUI does load, and will throw wherever it reaches for something
|
||||
-- the installed DLL doesn't have yet -- the popup names the cause so those
|
||||
-- errors aren't a mystery.
|
||||
local PFUI_CLASSIC_API_MIN = 11805 -- (X*10000 + Y*100 + Z)
|
||||
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
|
||||
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
|
||||
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
|
||||
local function FormatVersion(packed)
|
||||
local x = math.floor(packed / 10000)
|
||||
local y = math.floor(math.mod(packed, 10000) / 100)
|
||||
local z = math.mod(packed, 100)
|
||||
return string.format("v%d.%d.%d", x, y, z)
|
||||
end
|
||||
|
||||
local headline, detail
|
||||
if not CLASSIC_API_VERSION then
|
||||
headline = "|cff33ffccpf|cffffffffUI|r has been disabled."
|
||||
detail = "The ClassicAPI DLL isn't loaded. Download the latest release from:"
|
||||
elseif CLASSIC_API_VERSION < PFUI_CLASSIC_API_MIN then
|
||||
headline = "|cff33ffccpf|cffffffffUI|r will not work correctly on ClassicAPI " .. FormatVersion(CLASSIC_API_VERSION) .. "."
|
||||
detail = FormatVersion(PFUI_CLASSIC_API_MIN) .. " or newer is required -- any errors alongside this one are the APIs it is missing. Download the latest release from:"
|
||||
end
|
||||
|
||||
if detail then
|
||||
local function ShowRequiredPopup()
|
||||
StaticPopupDialogs["PFUI_CLASSICAPI_REQUIRED"] = {
|
||||
text = headline .. "\n\n" .. detail,
|
||||
button1 = OKAY,
|
||||
hasEditBox = 1,
|
||||
editBoxWidth = 280,
|
||||
timeout = 0,
|
||||
whileDead = 1,
|
||||
hideOnEscape = 1,
|
||||
preferredIndex = 3,
|
||||
OnShow = function()
|
||||
local editBox = getglobal(this:GetName().."EditBox")
|
||||
if editBox then
|
||||
editBox:SetText(PFUI_CLASSIC_API_LATEST_URL)
|
||||
editBox:HighlightText()
|
||||
editBox:SetFocus()
|
||||
end
|
||||
end,
|
||||
}
|
||||
StaticPopup_Show("PFUI_CLASSICAPI_REQUIRED")
|
||||
DEFAULT_CHAT_FRAME:AddMessage(
|
||||
headline .. " " .. detail .. " " .. PFUI_CLASSIC_API_LATEST_URL,
|
||||
1, 0.3, 0.3
|
||||
)
|
||||
end
|
||||
local loginFrame = CreateFrame("Frame")
|
||||
loginFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
loginFrame:SetScript("OnEvent", function()
|
||||
loginFrame:UnregisterEvent("PLAYER_ENTERING_WORLD")
|
||||
ShowRequiredPopup()
|
||||
end)
|
||||
elseif CLASSIC_API_VERSION < PFUI_CLASSIC_API_LATEST then
|
||||
EventUtil.ContinueOnPlayerLogin(function()
|
||||
C_Timer.After(8, function()
|
||||
DEFAULT_CHAT_FRAME:AddMessage(
|
||||
"|cff33ffccpf|rUI: ClassicAPI " .. FormatVersion(PFUI_CLASSIC_API_LATEST) .. " is available — " .. PFUI_CLASSIC_API_LATEST_URL,
|
||||
1, 0.85, 0.3
|
||||
)
|
||||
end)
|
||||
end)
|
||||
end
|
||||
end
|
||||
@@ -1,11 +0,0 @@
|
||||
- Hard dependency on [ClassicAPI](https://github.com/brues-code/ClassicAPI) — modern `C_*` namespaces and engine polyfills (focus, nameplates, GUIDs).
|
||||
- TBC/Wrath/expansion plumbing removed; vanilla 1.12 + Turtle WoW only.
|
||||
- Nameplate overhaul — GUID-keyed caches, per-tick allocation cuts, name-collision filtering, configurable name text position.
|
||||
- Unit auras rebuilt on `C_UnitAuras` — replaces the old tooltip-scraping aura tracker with structured engine data, so buff/debuff durations, stack counts, and source attribution are accurate without polling.
|
||||
- Equipment manager — new backport of Blizzard's gear-set UI, integrated into the character pane. Save, swap, and edit sets without a third-party addon.
|
||||
- Bag sorting — new built-in feature (previously pfUI only deferred to third-party sorters).
|
||||
- `/focus` and `/clearfocus` moved to ClassicAPI; `/focusname` retained in pfUI.
|
||||
- questitem refactored onto `C_QuestLog`.
|
||||
- `updatenotify` isolated to its own `pfUI-brues` addon-message prefix so we don't share traffic with upstream pfUI installs.
|
||||
|
||||
See full commit history at https://github.com/brues-code/pfUI/commits/master for details.
|
||||
+298
-163
@@ -28,14 +28,6 @@ function pfUI.api.HasNampower()
|
||||
return GetNampowerVersion and true or false
|
||||
end
|
||||
|
||||
local isTurtleWoW
|
||||
function pfUI.api.IsTurtleWoW()
|
||||
if isTurtleWoW == nil then
|
||||
isTurtleWoW = C_Spell.GetSpellTexture(46050) == "Interface\\Icons\\Trade_Survival"
|
||||
end
|
||||
return isTurtleWoW
|
||||
end
|
||||
|
||||
-- [ GetUnitDistance ]
|
||||
-- Returns distance to unit using best available method
|
||||
-- 'unit1' [string] first unit (default: "player")
|
||||
@@ -72,6 +64,10 @@ end
|
||||
-- Requires UnitXP_SP3
|
||||
function pfUI.api.UnitInLineOfSight(unit1, unit2)
|
||||
if not pfUI.api.HasUnitXP() then return nil end
|
||||
if not unit2 then
|
||||
unit2 = unit1
|
||||
unit1 = "player"
|
||||
end
|
||||
local success, inSight = pcall(UnitXP, "inSight", unit1, unit2)
|
||||
if success then return inSight end
|
||||
return nil
|
||||
@@ -82,6 +78,10 @@ end
|
||||
-- Requires UnitXP_SP3
|
||||
function pfUI.api.UnitIsBehind(unit1, unit2)
|
||||
if not pfUI.api.HasUnitXP() then return nil end
|
||||
if not unit2 then
|
||||
unit2 = unit1
|
||||
unit1 = "player"
|
||||
end
|
||||
local success, behind = pcall(UnitXP, "behind", unit1, unit2)
|
||||
if success then return behind end
|
||||
return nil
|
||||
@@ -92,16 +92,24 @@ gfind = string.gmatch or string.gfind
|
||||
mod = math.mod or mod
|
||||
|
||||
-- [ strsplit ]
|
||||
-- Splits a string using a delimiter.
|
||||
-- Splits a string using a delimiter. Self-contained on purpose: it does NOT
|
||||
-- delegate to the global strsplit / string.split, because third-party addons
|
||||
-- clobber those (e.g. BigWigs' SpellRequests redefines string:split to return
|
||||
-- a table, which would make this return a single table instead of r,g,b,a and
|
||||
-- break color/version parsing depending on load order). Delimiter chars are
|
||||
-- treated as a set (any one char splits), and empty fields are preserved
|
||||
-- ("a,,b" -> "a", "", "b"), matching real strsplit semantics.
|
||||
-- 'delimiter' [string] characters that will be interpreted as delimiter
|
||||
-- characters (bytes) in the string.
|
||||
-- 'subject' [string] String to split.
|
||||
-- return: [list] a list of strings.
|
||||
local format, sgsub = string.format, string.gsub
|
||||
function pfUI.api.strsplit(delimiter, subject)
|
||||
if not subject then return nil end
|
||||
local delimiter, fields = delimiter or ":", {}
|
||||
local pattern = string.format("([^%s]+)", delimiter)
|
||||
string.gsub(subject, pattern, function(c) fields[table.getn(fields)+1] = c end)
|
||||
local fields = {}
|
||||
delimiter = delimiter or ":"
|
||||
local pattern = format("([^%s]+)", delimiter)
|
||||
sgsub(subject, pattern, function(c) fields[table.getn(fields)+1] = c end)
|
||||
return unpack(fields)
|
||||
end
|
||||
|
||||
@@ -110,11 +118,7 @@ end
|
||||
-- 'tbl' [table] the table that shall be checked
|
||||
-- return: [boolean] result of the check.
|
||||
function pfUI.api.isempty(tbl)
|
||||
if not tbl then return true end
|
||||
for k, v in pairs(tbl) do
|
||||
return false
|
||||
end
|
||||
return true
|
||||
return next(tbl or {}) == nil
|
||||
end
|
||||
|
||||
-- [ checkversion ]
|
||||
@@ -143,7 +147,6 @@ end
|
||||
-- It takes care of the rangecheck module if existing.
|
||||
-- unit [string] A unit to query (string, unitID)
|
||||
-- return: [bool] "1" if in range otherwise "nil"
|
||||
local RangeCache = {}
|
||||
function pfUI.api.UnitInRange(unit)
|
||||
if not UnitExists(unit) or not UnitIsVisible(unit) then
|
||||
return nil
|
||||
@@ -151,6 +154,11 @@ function pfUI.api.UnitInRange(unit)
|
||||
return 1
|
||||
end
|
||||
|
||||
-- master switch: with the 40y check off, a visible unit beyond interact
|
||||
-- range counts as in range (nothing fades). Invisible units already
|
||||
-- returned nil above, matching the pre-collapse behavior.
|
||||
if C.unitframes.rangecheck == "0" then return 1 end
|
||||
|
||||
-- UnitXP precise mode: skip librange entirely, use direct distance check
|
||||
if C.unitframes.rangecheck_mode == "unitxp" and _G.UnitXP then
|
||||
local threshold = tonumber(C.unitframes.rangecheck_distance) or 40
|
||||
@@ -193,12 +201,35 @@ end
|
||||
-- name [string] The localized name of the buff.
|
||||
-- return: [bool] true if unit has buff otherwise "nil"
|
||||
function pfUI.api.UnitHasBuff(unit, name)
|
||||
for _, aura in ipairs(C_UnitAuras.GetUnitAuras(unit, "HELPFUL")) do
|
||||
if aura.name == name then return true end
|
||||
end
|
||||
return nil
|
||||
return C_UnitAuras.GetAuraDataBySpellName(unit, name, "HELPFUL") ~= nil or nil
|
||||
end
|
||||
|
||||
-- [ ScanAuraSlots ]
|
||||
-- Fills `buf` with the slot ids of the auras on `unit` that match `filter` and
|
||||
-- returns how many (buf[1..n]; entries past n are cleared), so a module can
|
||||
-- keep one buffer and refill it every refresh. Read each aura with
|
||||
-- C_UnitAuras.UnitAuraBySlot(unit, buf[i]) (positional, no table) or
|
||||
-- GetAuraDataBySlot. One enumeration walks the aura array once, where a
|
||||
-- by-index loop (UnitAura(unit, i)) re-walks it from the start for every i.
|
||||
-- Uses GetAuraSlots' fill-a-table form (table as the 5th argument) instead of
|
||||
-- its vararg return: Lua 5.0 builds an `arg` table for every vararg call, so
|
||||
-- collecting the returns in a Lua helper would allocate once per scan.
|
||||
-- unit [string] unit token
|
||||
-- filter [string] aura filter ("HELPFUL", "HARMFUL|PLAYER", ...)
|
||||
-- buf [table] reusable buffer, filled in place
|
||||
-- max [number] optional cap on the slot count (nil = all)
|
||||
-- return: [number] count of slot ids written to buf
|
||||
function pfUI.api.ScanAuraSlots(unit, filter, buf, max)
|
||||
local _, n = C_UnitAuras.GetAuraSlots(unit, filter, max, nil, buf)
|
||||
return n
|
||||
end
|
||||
|
||||
-- [ IsPlayerGuid ]
|
||||
-- Returns whether a GUID or unit token refers to the local player.
|
||||
-- guid [string] A unit GUID (or unitID) to test.
|
||||
-- return: [bool] true if it is the player otherwise "false"
|
||||
pfUI.api.IsPlayerGuid = _G.IsPlayerGuid
|
||||
|
||||
-- [ GetUnbuffedRoster ]
|
||||
-- Returns a comma-joined, colored list of group members missing the named aura.
|
||||
-- name [string] the localized aura name to check for
|
||||
@@ -211,7 +242,7 @@ function pfUI.api.GetUnbuffedRoster(name)
|
||||
end
|
||||
end
|
||||
|
||||
if UnitInRaid("player") then
|
||||
if IsInRaid() then
|
||||
for i=1,40 do check("raid"..i) end
|
||||
else
|
||||
check("player")
|
||||
@@ -226,11 +257,42 @@ end
|
||||
-- unit [string] the unitstring
|
||||
-- return: [table] string, r, g, b
|
||||
function pfUI.api.GetUnitColor(unitstr)
|
||||
local _, class = UnitClass(unitstr)
|
||||
local class = UnitClassBase(unitstr)
|
||||
local classColor = PFUI_CLASS_COLORS[class]
|
||||
return classColor:GenerateHexColorMarkup(), classColor:GetRGB()
|
||||
end
|
||||
|
||||
-- [ GetRaceIcon ]
|
||||
-- Builds an inline race icon texture from the shared races atlas.
|
||||
-- 'raceKey' [string] englishRace key (e.g. "NightElf")
|
||||
-- 'sex' [int] unit sex (3 = female)
|
||||
-- return: [string] inline texture escape, or an empty string
|
||||
function pfUI.api.GetRaceIcon(raceKey, sex)
|
||||
if not raceKey then return "" end
|
||||
local gender = sex == 3 and "FEMALE" or "MALE"
|
||||
local coords = RACE_ICON_TCOORDS[strupper(raceKey) .. "_" .. gender]
|
||||
if not coords then return "" end
|
||||
return string.format(
|
||||
"|TInterface\\Glues\\CharacterCreate\\UI-CharacterCreate-Races:0:0:0:0:512:512:%d:%d:%d:%d|t",
|
||||
coords[1] * 512, coords[2] * 512, coords[3] * 512, coords[4] * 512)
|
||||
end
|
||||
|
||||
-- inline faction emblems (cropped from the target-frame PvP banners)
|
||||
local FACTION_ICON = {
|
||||
Alliance = "|TInterface\\TargetingFrame\\UI-PVP-Alliance:0:0:0:0:64:64:5:37:3:35|t",
|
||||
Horde = "|TInterface\\TargetingFrame\\UI-PVP-Horde:0:0:0:0:64:64:5:37:3:35|t",
|
||||
}
|
||||
|
||||
-- [ GetFactionIcon ]
|
||||
-- Resolves an inline faction emblem from the englishRace key stored in L["race"].
|
||||
-- 'raceKey' [string] englishRace key (e.g. "Orc")
|
||||
-- return: [string] inline texture escape, or an empty string
|
||||
function pfUI.api.GetFactionIcon(raceKey)
|
||||
local info = raceKey and L["race"][raceKey]
|
||||
if not info then return "" end
|
||||
return FACTION_ICON[info.faction] or ""
|
||||
end
|
||||
|
||||
-- [ strvertical ]
|
||||
-- Creates vertical text using linebreaks. Multibyte char friendly.
|
||||
-- 'str' [string] String to columnize.
|
||||
@@ -277,11 +339,7 @@ end
|
||||
-- 'f' [float] the number to breakdown.
|
||||
-- returns: [int],[float] whole and fractional part.
|
||||
function pfUI.api.modf(f)
|
||||
if modf then return modf(f) end
|
||||
if f > 0 then
|
||||
return math.floor(f), mod(f,1)
|
||||
end
|
||||
return math.ceil(f), mod(f,1)
|
||||
return math.modf(f)
|
||||
end
|
||||
|
||||
-- [ GetServerEpoch ]
|
||||
@@ -376,36 +434,53 @@ end
|
||||
-- 'str' [string] input string that should be matched
|
||||
-- 'pat' [string] unformatted pattern
|
||||
-- returns: [strings] matched string in capture order
|
||||
local a, b, c, d, e
|
||||
local _, va, vb, vc, vd, ve
|
||||
local ra, rb, rc, rd, re
|
||||
function pfUI.api.cmatch(str, pat)
|
||||
-- read capture indexes
|
||||
a, b, c, d, e = GetCaptures(pat)
|
||||
_, _, va, vb, vc, vd, ve = string.find(str, pfUI.api.SanitizePattern(pat))
|
||||
-- idx* = the logical %N index of each physical capture slot (nil when the
|
||||
-- pattern has no %N$ markers); val* = the matched values in physical order.
|
||||
local idx1, idx2, idx3, idx4, idx5 = GetCaptures(pat)
|
||||
local _, _, val1, val2, val3, val4, val5 = string.find(str, pfUI.api.SanitizePattern(pat))
|
||||
|
||||
-- put entries into the proper return values
|
||||
ra = e == 1 and ve or d == 1 and vd or c == 1 and vc or b == 1 and vb or va
|
||||
rb = e == 2 and ve or d == 2 and vd or c == 2 and vc or a == 2 and va or vb
|
||||
rc = e == 3 and ve or d == 3 and vd or a == 3 and va or b == 3 and vb or vc
|
||||
rd = e == 4 and ve or a == 4 and va or c == 4 and vc or b == 4 and vb or vd
|
||||
re = a == 5 and va or d == 5 and vd or c == 5 and vc or b == 5 and vb or ve
|
||||
-- reorder the physical matches into logical (%1..%5) order
|
||||
local out1 = idx5 == 1 and val5 or idx4 == 1 and val4 or idx3 == 1 and val3 or idx2 == 1 and val2 or val1
|
||||
local out2 = idx5 == 2 and val5 or idx4 == 2 and val4 or idx3 == 2 and val3 or idx1 == 2 and val1 or val2
|
||||
local out3 = idx5 == 3 and val5 or idx4 == 3 and val4 or idx1 == 3 and val1 or idx2 == 3 and val2 or val3
|
||||
local out4 = idx5 == 4 and val5 or idx1 == 4 and val1 or idx3 == 4 and val3 or idx2 == 4 and val2 or val4
|
||||
local out5 = idx1 == 5 and val1 or idx4 == 5 and val4 or idx3 == 5 and val3 or idx2 == 5 and val2 or val5
|
||||
|
||||
return ra, rb, rc, rd, re
|
||||
return out1, out2, out3, out4, out5
|
||||
end
|
||||
|
||||
-- [ GetItemLinkByName ]
|
||||
-- Returns an itemLink for the given itemname
|
||||
-- 'name' [string] name of the item
|
||||
-- returns: [string] entire itemLink for the given item
|
||||
local itemLinkCache = {}
|
||||
local itemLinkMisses = {}
|
||||
local ITEMLINK_MAX_SCANS = 2
|
||||
function pfUI.api.GetItemLinkByName(name)
|
||||
for itemID = 1, 25818 do
|
||||
local itemName, hyperLink, itemQuality = GetItemInfo(itemID)
|
||||
if (itemName and itemName == name) then
|
||||
local _, _, _, hex = GetItemQualityColor(tonumber(itemQuality))
|
||||
return hex.. "|H"..hyperLink.."|h["..itemName.."]|h|r"
|
||||
-- GetInboxItem() hands us a nil name for attachment-less mail
|
||||
if not name then return end
|
||||
-- cache successful resolutions so repeated lookups (e.g. per inbox click) are free
|
||||
if itemLinkCache[name] then return itemLinkCache[name] end
|
||||
|
||||
-- Failures have to be counted, not just retried. An unresolvable name walks
|
||||
-- the entire id range and finds nothing -- a visible hitch on every tooltip
|
||||
-- hover. Allow a couple of attempts (rendering the tooltip caches the item,
|
||||
-- so the next hover usually resolves), then stop scanning for that name.
|
||||
local misses = itemLinkMisses[name] or 0
|
||||
if misses >= ITEMLINK_MAX_SCANS then return end
|
||||
|
||||
-- Octo/Turtle custom items live well past the 25818 vanilla ceiling
|
||||
for itemID = 1, 61000 do
|
||||
local itemName = C_Item.GetItemNameByID(itemID)
|
||||
if itemName and itemName == name then
|
||||
local _, itemLink = C_Item.GetItemInfo(itemID)
|
||||
itemLinkCache[name] = itemLink
|
||||
return itemLink
|
||||
end
|
||||
end
|
||||
|
||||
itemLinkMisses[name] = misses + 1
|
||||
end
|
||||
|
||||
-- [ FindItem ]
|
||||
@@ -437,13 +512,17 @@ function pfUI.api.GetBagFamily(bag)
|
||||
|
||||
local id = GetInventoryItemID("player", ContainerIDToInventoryID(bag))
|
||||
if id then
|
||||
local _, _, _, _, _, itemType, subType = GetItemInfo(id)
|
||||
local bagsubtype = L["bagtypes"][subType]
|
||||
|
||||
if bagsubtype == "DEFAULT" then return "BAG" end
|
||||
if bagsubtype == "SOULBAG" then return "SOULBAG" end
|
||||
if bagsubtype == "QUIVER" then return "QUIVER" end
|
||||
if bagsubtype == nil then return "SPECIAL" end
|
||||
-- classID 1 = Container (bags), 11 = Quiver
|
||||
-- Container subclasses: 0 = Bag (default), 1 = Soul Bag, 2+ = specialty (herb/enchanting/etc.)
|
||||
-- Quiver subclasses: 2 = Quiver (arrows), 3 = Ammo Pouch (bullets)
|
||||
local _, _, _, _, _, classID, subClassID = C_Item.GetItemInfoInstant(id)
|
||||
if classID == 1 then
|
||||
if subClassID == 0 then return "BAG" end
|
||||
if subClassID == 1 then return "SOULBAG" end
|
||||
return "SPECIAL"
|
||||
elseif classID == 11 then
|
||||
return "QUIVER"
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
@@ -488,7 +567,7 @@ end
|
||||
-- 'msg' [string] the message to send
|
||||
function pfUI.api.SendChatMessageWide(msg)
|
||||
local channel = "SAY"
|
||||
if UnitInRaid("player") then
|
||||
if IsInRaid() then
|
||||
if ( IsRaidLeader() or IsRaidOfficer() ) then
|
||||
channel = "RAID_WARNING"
|
||||
else
|
||||
@@ -555,36 +634,54 @@ end
|
||||
-- 'script' [string] the handler to hook
|
||||
-- 'func' [function] the function that should be added
|
||||
function HookScript(f, script, func)
|
||||
local prev = f:GetScript(script)
|
||||
f:SetScript(script, function(a1,a2,a3,a4,a5,a6,a7,a8,a9)
|
||||
if prev then prev(a1,a2,a3,a4,a5,a6,a7,a8,a9) end
|
||||
func(a1,a2,a3,a4,a5,a6,a7,a8,a9)
|
||||
end)
|
||||
f:HookScript(script, func)
|
||||
end
|
||||
|
||||
function hooksecurefunc(tbl, name, func)
|
||||
if type(tbl) == "string" then tbl, name, func = _G, tbl, name end
|
||||
if not tbl or type(tbl[name]) ~= "function" then return end
|
||||
return _G.hooksecurefunc(tbl, name, func)
|
||||
end
|
||||
|
||||
-- [ HookAddonOrVariable ]
|
||||
-- Sets a function to be called automatically once an addon gets loaded
|
||||
-- 'addon' [string] addon or variable name
|
||||
-- 'func' [function] function that should run
|
||||
function pfUI.api.HookAddonOrVariable(addon, func)
|
||||
local lurker = CreateFrame("Frame", nil)
|
||||
lurker.func = func
|
||||
lurker:RegisterEvent("ADDON_LOADED")
|
||||
lurker:RegisterEvent("VARIABLES_LOADED")
|
||||
lurker:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
lurker:SetScript("OnEvent",function()
|
||||
-- only run when config is available
|
||||
if event == "ADDON_LOADED" and not this.foundConfig then
|
||||
return
|
||||
elseif event == "VARIABLES_LOADED" then
|
||||
this.foundConfig = true
|
||||
do
|
||||
local lurker
|
||||
local pending = {}
|
||||
|
||||
local function ProcessPending()
|
||||
if not lurker.foundConfig then return end
|
||||
for i = table.getn(pending), 1, -1 do
|
||||
local hook = pending[i]
|
||||
if IsAddOnLoaded(hook.addon) or _G[hook.addon] then
|
||||
hook.func()
|
||||
table.remove(pending, i)
|
||||
end
|
||||
end
|
||||
if table.getn(pending) == 0 then
|
||||
lurker:UnregisterAllEvents()
|
||||
end
|
||||
end
|
||||
|
||||
function pfUI.api.HookAddonOrVariable(addon, func)
|
||||
if not lurker then
|
||||
lurker = CreateFrame("Frame", nil)
|
||||
lurker:SetScript("OnEvent", function()
|
||||
if event == "VARIABLES_LOADED" or event == "PLAYER_ENTERING_WORLD" then
|
||||
this.foundConfig = true
|
||||
end
|
||||
ProcessPending()
|
||||
end)
|
||||
end
|
||||
|
||||
if IsAddOnLoaded(addon) or _G[addon] then
|
||||
this:func()
|
||||
this:UnregisterAllEvents()
|
||||
end
|
||||
end)
|
||||
table.insert(pending, { addon = addon, func = func })
|
||||
lurker:RegisterEvent("ADDON_LOADED")
|
||||
lurker:RegisterEvent("VARIABLES_LOADED")
|
||||
lurker:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
ProcessPending()
|
||||
end
|
||||
end
|
||||
|
||||
-- [ QueueFunction ]
|
||||
@@ -625,16 +722,7 @@ end
|
||||
function pfUI.api.CreateGoldString(money)
|
||||
if type(money) ~= "number" then return "-" end
|
||||
|
||||
local gold = floor(money/ 100 / 100)
|
||||
local silver = floor(mod((money/100),100))
|
||||
local copper = floor(mod(money,100))
|
||||
|
||||
local string = ""
|
||||
if gold > 0 then string = string .. "|cffffffff" .. gold .. "|cffffd700g" end
|
||||
if silver > 0 or gold > 0 then string = string .. "|cffffffff " .. silver .. "|cffc7c7cfs" end
|
||||
string = string .. "|cffffffff " .. copper .. "|cffeda55fc"
|
||||
|
||||
return string
|
||||
return "|cffffffff" .. _G.GetCoinTextureString(money) .. "|r"
|
||||
end
|
||||
|
||||
-- [ Enable Movable ]
|
||||
@@ -708,24 +796,15 @@ function pfUI.api.CopyTable(src)
|
||||
end
|
||||
|
||||
-- [ Wipe Table ]
|
||||
-- Empties a table and returns it
|
||||
-- Empties a table and returns it.
|
||||
-- 'src' [table] the table that should be emptied.
|
||||
-- return: [table] the emptied table.
|
||||
-- Delegates to ClassicAPI's table.wipe, which also resets the Lua 5.0 getn
|
||||
-- length (luaL_setn(t,0)) so table.insert on a wiped table resumes at [1].
|
||||
-- Append to wiped arrays with table.insert -- NOT the t[table.getn(t)+1]=v
|
||||
-- idiom, which needs an unmanaged length counter and won't work here.
|
||||
function pfUI.api.wipe(src)
|
||||
-- notes: table.insert, table.remove will have undefined behavior
|
||||
-- when used on tables emptied this way because Lua removes nil
|
||||
-- entries from tables after an indeterminate time.
|
||||
-- Instead of table.insert(t,v) use t[table.getn(t)+1]=v as table.getn collapses nil entries.
|
||||
-- There are no issues with hash tables, t[k]=v where k is not a number behaves as expected.
|
||||
local mt = getmetatable(src) or {}
|
||||
if mt.__mode == nil or mt.__mode ~= "kv" then
|
||||
mt.__mode = "kv"
|
||||
src=setmetatable(src,mt)
|
||||
end
|
||||
for k in pairs(src) do
|
||||
src[k] = nil
|
||||
end
|
||||
return src
|
||||
return table.wipe(src)
|
||||
end
|
||||
|
||||
-- [ Load Movable ]
|
||||
@@ -983,16 +1062,34 @@ end
|
||||
|
||||
-- [ GetStringColor ]
|
||||
-- Queries the pfUI setting strings and extract its color codes
|
||||
-- returns r,g,b,a
|
||||
local color_cache = {}
|
||||
function pfUI.api.GetStringColor(colorstr)
|
||||
if not color_cache[colorstr] then
|
||||
local r, g, b, a = pfUI.api.strsplit(",", colorstr)
|
||||
color_cache[colorstr] = { r, g, b, a }
|
||||
-- returns r,g,b,a as strings
|
||||
local color_cache = setmetatable({}, {
|
||||
__index = function(t, k)
|
||||
local color = { pfUI.api.strsplit(",", k) }
|
||||
rawset(t, k, color)
|
||||
return color
|
||||
end
|
||||
})
|
||||
function pfUI.api.GetStringColor(colorstr)
|
||||
return unpack(color_cache[colorstr])
|
||||
end
|
||||
|
||||
-- [ GetStringColorObject ]
|
||||
-- Like GetStringColor, but returns a cached ColorMixin instead of raw values.
|
||||
-- The object is a shared per-string singleton, so treat it as read-only.
|
||||
-- returns a ColorMixin
|
||||
local color_object_cache = setmetatable({}, {
|
||||
__index = function(t, k)
|
||||
local r,g,b,a = pfUI.api.GetStringColor(k)
|
||||
local color = CreateColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
rawset(t, k, color)
|
||||
return color
|
||||
end
|
||||
})
|
||||
function pfUI.api.GetStringColorObject(colorstr)
|
||||
return color_object_cache[colorstr]
|
||||
end
|
||||
|
||||
-- [ rgbhex ]
|
||||
-- Returns color format from color info
|
||||
-- 'r' [table | number] color table or r color component
|
||||
@@ -1000,12 +1097,13 @@ end
|
||||
-- 'b' [number] optional b color component
|
||||
-- 'a' [number] optional alpha component
|
||||
-- returns color string in the form of '|caarrggbb'
|
||||
local _r, _g, _b, _a
|
||||
local rgbhex_cache = {}
|
||||
function pfUI.api.rgbhex(r, g, b, a)
|
||||
local _r, _g, _b, _a
|
||||
if type(r) == "table" then
|
||||
if r.r then
|
||||
_r, _g, _b, _a = r.r, r.g, r.b, (r.a or 1)
|
||||
elseif table.getn(r) >= 3 then
|
||||
elseif r[3] ~= nil then
|
||||
_r, _g, _b, _a = r[1], r[2], r[3], (r[4] or 1)
|
||||
end
|
||||
elseif tonumber(r) then
|
||||
@@ -1013,7 +1111,13 @@ function pfUI.api.rgbhex(r, g, b, a)
|
||||
end
|
||||
|
||||
if _r and _g and _b and _a then
|
||||
return CreateColor(_r, _g, _b, _a):GenerateHexColorMarkup()
|
||||
local key = ((Round(_r*255)*256 + Round(_g*255))*256 + Round(_b*255))*256 + Round(_a*255)
|
||||
local hex = rgbhex_cache[key]
|
||||
if not hex then
|
||||
hex = "|c" .. C_ColorUtil.GenerateTextColorCode({ r = _r, g = _g, b = _b, a = _a })
|
||||
rgbhex_cache[key] = hex
|
||||
end
|
||||
return hex
|
||||
end
|
||||
|
||||
return ""
|
||||
@@ -1208,17 +1312,46 @@ function pfUI.api.CreateBackdropShadow(f)
|
||||
f.backdrop_shadow:SetBackdropBorderColor(0, 0, 0, tonumber(pfUI_config.appearance.border.shadow_intensity))
|
||||
end
|
||||
|
||||
-- [ Set Castbar Shield ]
|
||||
-- Colors a castbar for a cast that none of the player's own interrupts or
|
||||
-- silences can stop. The bar and the icon's border both take the shield color,
|
||||
-- so the state still reads on a bar configured without an icon. Not shielded
|
||||
-- restores the normal cast/channel color and the configured border.
|
||||
-- 'bar' [frame] the castbar statusbar
|
||||
-- 'icon' [frame] the icon frame, or nil for a bar without one
|
||||
-- 'shielded' [bool] whether the cast is uninterruptible
|
||||
-- 'isChannel' [bool] selects the unshielded color
|
||||
function pfUI.api.SetCastbarShield(bar, icon, shielded, isChannel)
|
||||
if shielded then
|
||||
bar:SetStatusBarColor(pfUI.api.GetStringColor(C.appearance.castbar.shieldcolor))
|
||||
else
|
||||
bar:SetStatusBarColor(pfUI.api.GetStringColor(C.appearance.castbar[isChannel and "channelcolor" or "castbarcolor"]))
|
||||
end
|
||||
|
||||
local iconborder = icon and icon.backdrop
|
||||
if not iconborder then return end
|
||||
|
||||
if shielded then
|
||||
iconborder:SetBackdropBorderColor(pfUI.api.GetStringColor(C.appearance.castbar.shieldcolor))
|
||||
else
|
||||
iconborder:SetBackdropBorderColor(pfUI.api.GetStringColor(C.appearance.border.color))
|
||||
end
|
||||
end
|
||||
|
||||
-- [ Bar Layout Options ] --
|
||||
-- 'barsize' size of bar in number of buttons
|
||||
-- returns: array of options as strings for pfUI.gui.bar
|
||||
-- returns: array of options as strings for pfUI.gui.bar: every grid
|
||||
-- that fits the bar exactly, plus common uneven ones
|
||||
function pfUI.api.BarLayoutOptions(barsize)
|
||||
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutOptions: barsize "..tostring(barsize).." is invalid")
|
||||
local options, seen = {}, {}
|
||||
local function add(option)
|
||||
if not seen[option] then table.insert(options, option); seen[option] = true end
|
||||
end
|
||||
for i,layout in ipairs(pfGridmath[barsize]) do
|
||||
add(string.format("%d x %d",layout[1],layout[2]))
|
||||
for cols = 1, barsize do
|
||||
if barsize % cols == 0 then
|
||||
add(string.format("%d x %d", cols, barsize / cols))
|
||||
end
|
||||
end
|
||||
for _, option in ipairs({
|
||||
"1 x 12", "1 x 10", "2 x 10", "2 x 5", "3 x 10", "3 x 5", "3 x 3",
|
||||
@@ -1238,49 +1371,23 @@ function pfUI.api.BarLayoutOptions(barsize)
|
||||
return options
|
||||
end
|
||||
|
||||
-- [ Bar Layout Formfactor ] --
|
||||
-- 'option' string option as used in pfUI_config.bars[bar].option
|
||||
-- returns: integer formfactor
|
||||
local formfactors = {}
|
||||
setmetatable(formfactors, {__mode = "v"}) -- weak table so values not referenced are collected on next gc
|
||||
function pfUI.api.BarLayoutFormfactor(option)
|
||||
if formfactors[option] then
|
||||
return formfactors[option]
|
||||
else
|
||||
for barsize,_ in ipairs(pfGridmath) do
|
||||
local options = pfUI.api.BarLayoutOptions(barsize)
|
||||
for i,opt in ipairs(options) do
|
||||
if opt == option then
|
||||
formfactors[option] = i
|
||||
return formfactors[option]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- 'formfactor' has to be a "cols x rows" string; the actionbar module resets
|
||||
-- a stored layout that isn't one before it lays out a bar
|
||||
local function ResolveBarLayout(barsize, formfactor, uneven)
|
||||
local layout = tostring(formfactor or "")
|
||||
local _, _, a, b = string.find(layout, "(%d+)%s*x%s*(%d+)")
|
||||
if a and b then
|
||||
local cols, rows = tonumber(a), tonumber(b)
|
||||
cols = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, cols))
|
||||
rows = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, rows))
|
||||
local orientation = string.upper(uneven or "DOWN")
|
||||
local mode = (orientation == "LEFT" or orientation == "RIGHT") and "cols" or "rows"
|
||||
if mode == "rows" then
|
||||
cols = math.max(1, math.min(cols, barsize))
|
||||
rows = math.max(1, math.ceil(barsize / cols))
|
||||
else
|
||||
rows = math.max(1, math.min(rows, barsize))
|
||||
cols = math.max(1, math.ceil(barsize / rows))
|
||||
end
|
||||
return cols, rows, mode, orientation
|
||||
local _, _, a, b = string.find(formfactor, "(%d+)%s*x%s*(%d+)")
|
||||
local cols, rows = tonumber(a), tonumber(b)
|
||||
cols = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, cols))
|
||||
rows = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, rows))
|
||||
local orientation = string.upper(uneven or "DOWN")
|
||||
local mode = (orientation == "LEFT" or orientation == "RIGHT") and "cols" or "rows"
|
||||
if mode == "rows" then
|
||||
cols = math.max(1, math.min(cols, barsize))
|
||||
rows = math.max(1, math.ceil(barsize / cols))
|
||||
else
|
||||
rows = math.max(1, math.min(rows, barsize))
|
||||
cols = math.max(1, math.ceil(barsize / rows))
|
||||
end
|
||||
local index = pfUI.api.BarLayoutFormfactor(layout)
|
||||
if not index then return nil end
|
||||
local cols, rows = unpack(pfGridmath[barsize][index])
|
||||
return cols, rows, "rows", "DOWN"
|
||||
return cols, rows, mode, orientation
|
||||
end
|
||||
|
||||
-- [ Bar Layout Size ] --
|
||||
@@ -1291,7 +1398,6 @@ end
|
||||
function pfUI.api.BarLayoutSize(bar,barsize,formfactor,iconsize,bordersize,padding,uneven,fillmode)
|
||||
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutSize: barsize "..tostring(barsize).." is invalid")
|
||||
local cols, rows = ResolveBarLayout(barsize, formfactor, uneven)
|
||||
if not cols or not rows then cols, rows = unpack(pfGridmath[barsize][1]) end
|
||||
local width = (iconsize + bordersize*2+padding) * cols + padding
|
||||
local height = (iconsize + bordersize*2+padding) * rows + padding
|
||||
bar._size = {width,height}
|
||||
@@ -1309,9 +1415,6 @@ end
|
||||
function pfUI.api.BarButtonAnchor(button,basename,buttonindex,barsize,formfactor,iconsize,bordersize,padding,uneven,fillmode)
|
||||
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarButtonAnchor: barsize "..tostring(barsize).." is invalid")
|
||||
local cols, rows, mode, orientation = ResolveBarLayout(barsize, formfactor, uneven)
|
||||
if not cols or not rows then
|
||||
cols, rows, mode, orientation = unpack(pfGridmath[barsize][1]), "rows", "DOWN"
|
||||
end
|
||||
|
||||
-- fillmode: remap buttonindex to slotindex (grid position in native fill order)
|
||||
-- only needed when fill direction differs from layout mode
|
||||
@@ -1392,6 +1495,18 @@ function pfUI.api.BarButtonAnchor(button,basename,buttonindex,barsize,formfactor
|
||||
return button._anchor
|
||||
end
|
||||
|
||||
-- [ MouseIsOverHitRect ] --
|
||||
-- Like frame:IsMouseOver(), but tests the frame's hit rect, the area the
|
||||
-- engine uses for mouse focus and OnEnter/OnLeave. CreateBackdrop widens
|
||||
-- that rect by the border, so plain IsMouseOver misses a band around it.
|
||||
-- 'frame' the frame to test
|
||||
-- return true when the cursor is inside the frame's hit rect
|
||||
function pfUI.api.MouseIsOverHitRect(frame)
|
||||
if not frame.GetHitRectInsets then return frame:IsMouseOver() end
|
||||
local left, right, top, bottom = frame:GetHitRectInsets()
|
||||
return frame:IsMouseOver(-top, bottom, left, -right)
|
||||
end
|
||||
|
||||
-- [ Enable Autohide ] --
|
||||
-- 'frame' the frame that should be hidden
|
||||
function pfUI.api.EnableAutohide(frame, timeout, combat)
|
||||
@@ -1404,11 +1519,20 @@ function pfUI.api.EnableAutohide(frame, timeout, combat)
|
||||
frame.hover.parent = frame
|
||||
frame.hover:Show()
|
||||
|
||||
if not frame.hover.fade then
|
||||
frame.hover.fade = frame:CreateAnimationGroup()
|
||||
local fade = frame.hover.fade:CreateAnimation("Alpha")
|
||||
fade:SetChange(-1)
|
||||
fade:SetDuration(1)
|
||||
frame.hover.fade:SetScript("OnFinished", function() frame:SetAlpha(0) end)
|
||||
end
|
||||
|
||||
if combat then
|
||||
frame.hover:RegisterEvent("PLAYER_REGEN_ENABLED")
|
||||
frame.hover:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||
frame.hover:SetScript("OnEvent", function()
|
||||
if event == "PLAYER_REGEN_DISABLED" then
|
||||
this.fade:Stop()
|
||||
this.parent:SetAlpha(1)
|
||||
this.activeTo = "keep"
|
||||
elseif event == "PLAYER_REGEN_ENABLED" then
|
||||
@@ -1424,13 +1548,13 @@ function pfUI.api.EnableAutohide(frame, timeout, combat)
|
||||
|
||||
if this.activeTo == "keep" then return end
|
||||
|
||||
if MouseIsOver(this, 10, -10, -10, 10) then
|
||||
if this:IsMouseOver(10, -10, -10, 10) then
|
||||
this.activeTo = GetTime() + timeout
|
||||
this.fade:Stop()
|
||||
this.parent:SetAlpha(1)
|
||||
elseif this.activeTo then
|
||||
if this.activeTo < GetTime() and this.parent:GetAlpha() > 0 then
|
||||
local fps = (60 / math.max(GetFramerate(), 1))
|
||||
this.parent:SetAlpha(this.parent:GetAlpha() - 0.05*fps)
|
||||
if this.activeTo < GetTime() and this.parent:GetAlpha() > 0 and not this.fade:IsPlaying() then
|
||||
this.fade:Play()
|
||||
end
|
||||
else
|
||||
this.activeTo = GetTime() + timeout
|
||||
@@ -1447,6 +1571,7 @@ function pfUI.api.DisableAutohide(frame)
|
||||
frame.hover:SetScript("OnEvent", nil)
|
||||
frame.hover:SetScript("OnUpdate", nil)
|
||||
frame.hover:Hide()
|
||||
frame.hover.fade:Stop()
|
||||
frame:SetAlpha(1)
|
||||
end
|
||||
|
||||
@@ -1566,6 +1691,16 @@ end
|
||||
-- 'arg1' [string]
|
||||
-- return object
|
||||
function pfUI.api.GetNoNameObject(frame, objtype, layer, arg1, arg2)
|
||||
-- A nil/non-frame parent otherwise dies on frame:GetRegions()/:GetChildren()
|
||||
-- below, and the traceback stops here — useless, since all callers share this
|
||||
-- line. pfUI shadows Lua's `error` (dropping the level arg and not throwing),
|
||||
-- so fold the caller frame in via debugstack to name the offending skin, then
|
||||
-- bail so we don't fall through and crash on frame:GetRegions() anyway.
|
||||
if type(frame) ~= "table" or not frame.GetRegions then
|
||||
error("GetNoNameObject: invalid parent frame\n" .. debugstack(2, 3, 0))
|
||||
return
|
||||
end
|
||||
|
||||
local arg1 = arg1 and gsub(arg1, "([%+%-%*%(%)%?%[%]%^])", "%%%1")
|
||||
local arg2 = arg2 and gsub(arg2, "([%+%-%*%(%)%?%[%]%^])", "%%%1")
|
||||
|
||||
|
||||
+85
-17
@@ -71,6 +71,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("buffs", nil, "debuffrowsize", "16")
|
||||
pfUI:UpdateConfig("buffs", nil, "textinside", "0")
|
||||
pfUI:UpdateConfig("buffs", nil, "fontsize", "-1")
|
||||
pfUI:UpdateConfig("buffs", nil, "cooldown_anim", "1")
|
||||
pfUI:UpdateConfig("buffs", nil, "cooldown_reverse", "1")
|
||||
|
||||
pfUI:UpdateConfig("buffbar", "pbuff", "enable", "0")
|
||||
pfUI:UpdateConfig("buffbar", "pbuff", "use_unitfonts", "0")
|
||||
@@ -155,6 +157,9 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("appearance", "cd", "dynamicsize", "1")
|
||||
pfUI:UpdateConfig("appearance", "castbar", "castbarcolor", ".7,.7,.9,.8")
|
||||
pfUI:UpdateConfig("appearance", "castbar", "channelcolor", ".9,.9,.7,.8")
|
||||
pfUI:UpdateConfig("appearance", "castbar", "failcolor", "1,.2,.2,.8")
|
||||
pfUI:UpdateConfig("appearance", "castbar", "shieldcolor", ".8,.45,.45,.8")
|
||||
pfUI:UpdateConfig("appearance", "castbar", "fsrcolor", ".9,.6,.2,.8")
|
||||
pfUI:UpdateConfig("appearance", "castbar", "texture", "Interface\\AddOns\\pfUI\\img\\bar")
|
||||
pfUI:UpdateConfig("appearance", "infight", "screen", "0")
|
||||
pfUI:UpdateConfig("appearance", "infight", "aggro", "0")
|
||||
@@ -162,16 +167,20 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("appearance", "infight", "intensity", "16")
|
||||
pfUI:UpdateConfig("appearance", "bags", "unusable", "1")
|
||||
pfUI:UpdateConfig("appearance", "bags", "unusable_color", ".9,.2,.2,1")
|
||||
pfUI:UpdateConfig("appearance", "bags", "newitem", "1")
|
||||
pfUI:UpdateConfig("appearance", "bags", "newitem_color", "1,1,1,1")
|
||||
pfUI:UpdateConfig("appearance", "bags", "borderlimit", "1")
|
||||
pfUI:UpdateConfig("appearance", "bags", "borderonlygear", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "fulltext", "1")
|
||||
pfUI:UpdateConfig("appearance", "bags", "movable", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "abovechat", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "hidechat", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "icon_size", "-1")
|
||||
pfUI:UpdateConfig("appearance", "bags", "cooldown_reverse", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "bagrowlength", "10")
|
||||
pfUI:UpdateConfig("appearance", "bags", "bankrowlength", "10")
|
||||
pfUI:UpdateConfig("appearance", "bags", "autoSortOnOpen", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "sortreverse", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "sortprioreverse", "0")
|
||||
pfUI:UpdateConfig("appearance", "minimap", "size", "140")
|
||||
pfUI:UpdateConfig("appearance", "minimap", "arrowscale", "1")
|
||||
pfUI:UpdateConfig("appearance", "minimap", "zonetext", "off")
|
||||
@@ -196,6 +205,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("loot", nil, "rollannounce", "0")
|
||||
pfUI:UpdateConfig("loot", nil, "raritytimer", "1")
|
||||
|
||||
pfUI:UpdateConfig("loothistory", nil, "autoshow", "0")
|
||||
|
||||
pfUI:UpdateConfig("unitframes", nil, "disable", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "pastel", "1")
|
||||
pfUI:UpdateConfig("unitframes", nil, "custom", "0")
|
||||
@@ -219,7 +230,6 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangecheck", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangecheck_mode", "vanilla")
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangecheck_distance", "40")
|
||||
pfUI:UpdateConfig("unitframes", nil, "buffdetect", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanabar", "1")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanaheight", "10")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanawidth", "-1")
|
||||
@@ -227,8 +237,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanaoffy", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanaspace", "-3")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanatexture", "Interface\\AddOns\\pfUI\\img\\bar")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanatext", "1")
|
||||
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangechecki", "4")
|
||||
pfUI:UpdateConfig("unitframes", nil, "combowidth", "6")
|
||||
pfUI:UpdateConfig("unitframes", nil, "comboheight", "6")
|
||||
pfUI:UpdateConfig("unitframes", nil, "swingtimerwidth", "200")
|
||||
@@ -317,6 +327,9 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", "player", "showRest", "0")
|
||||
pfUI:UpdateConfig("unitframes", "player", "energy", "1")
|
||||
pfUI:UpdateConfig("unitframes", "player", "manatick", "0")
|
||||
pfUI:UpdateConfig("unitframes", "player", "showfsr", "1")
|
||||
pfUI:UpdateConfig("unitframes", "player", "fsrheight", "4")
|
||||
pfUI:UpdateConfig("unitframes", "player", "fsrstyle", "0")
|
||||
pfUI:UpdateConfig("unitframes", "player", "display_haste", "0")
|
||||
pfUI:UpdateConfig("unitframes", "player", "display_haste_color", "1,1,1,1")
|
||||
pfUI:UpdateConfig("unitframes", "player", "display_spellpower", "1")
|
||||
@@ -379,6 +392,27 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", "grouppet", "glowcombat", "0")
|
||||
pfUI:UpdateConfig("unitframes", "grouppet", "txthpright", "healthperc")
|
||||
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "portrait", "off")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "width", "50")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "height", "14")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "pheight", "0")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "buffs", "off")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "buffsize", "16")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "debuffs", "off")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "debuffsize", "16")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "faderange", "1")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "glowcombat", "0")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "txthpright", "healthperc")
|
||||
-- off by default; mirrors the raid grid layout when enabled
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "visible", "0")
|
||||
-- collapse: pack only pets that exist (from the roster snapshot) instead
|
||||
-- of mirroring every raid slot
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "collapse", "1")
|
||||
-- pet block has its own layout, independent of the raid grid
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "raidlayout", "8x5")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "raidpadding", "3")
|
||||
pfUI:UpdateConfig("unitframes", "raidpet", "raidfill", "VERTICAL")
|
||||
|
||||
pfUI:UpdateConfig("unitframes", "raid", "portrait", "off")
|
||||
pfUI:UpdateConfig("unitframes", "raid", "width", "50")
|
||||
pfUI:UpdateConfig("unitframes", "raid", "height", "26")
|
||||
@@ -397,6 +431,7 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", "raid", "raidlayout", "8x5")
|
||||
pfUI:UpdateConfig("unitframes", "raid", "raidpadding", "3")
|
||||
pfUI:UpdateConfig("unitframes", "raid", "raidfill", "VERTICAL")
|
||||
pfUI:UpdateConfig("unitframes", "raid", "collapse", "0")
|
||||
pfUI:UpdateConfig("unitframes", "raid", "raidgrouplabel", "0")
|
||||
pfUI:UpdateConfig("unitframes", "raid", "grouplabelxoff", "0")
|
||||
pfUI:UpdateConfig("unitframes", "raid", "grouplabelyoff", "8")
|
||||
@@ -452,7 +487,7 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", "ptarget", "txthpright", "none")
|
||||
pfUI:UpdateConfig("unitframes", "ptarget", "overhealperc", "10")
|
||||
|
||||
local ufs = { "player", "target", "focus", "focustarget", "group", "grouptarget", "grouppet", "raid", "ttarget", "pet", "ptarget", "fallback", "tttarget" }
|
||||
local ufs = { "player", "target", "focus", "focustarget", "group", "grouptarget", "grouppet", "raid", "raidpet", "ttarget", "pet", "ptarget", "fallback", "tttarget" }
|
||||
for _, unit in pairs(ufs) do
|
||||
pfUI:UpdateConfig("unitframes", unit, "selfdebuff", "0")
|
||||
pfUI:UpdateConfig("unitframes", unit, "visible", "1")
|
||||
@@ -483,14 +518,21 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", unit, "pspace", "-3")
|
||||
pfUI:UpdateConfig("unitframes", unit, "cooldown_text", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "cooldown_anim", "0")
|
||||
pfUI:UpdateConfig("unitframes", unit, "cooldown_reverse", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "buffs", "TOPLEFT")
|
||||
pfUI:UpdateConfig("unitframes", unit, "buffsize", "20")
|
||||
pfUI:UpdateConfig("unitframes", unit, "bufflimit", "32")
|
||||
pfUI:UpdateConfig("unitframes", unit, "buffperrow", "8")
|
||||
pfUI:UpdateConfig("unitframes", unit, "ownbuffsize", "-1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "buffspacingx", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "buffspacingy", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "debuffs", "TOPLEFT")
|
||||
pfUI:UpdateConfig("unitframes", unit, "debuffsize", "20")
|
||||
pfUI:UpdateConfig("unitframes", unit, "debufflimit", "32")
|
||||
pfUI:UpdateConfig("unitframes", unit, "debuffperrow", "8")
|
||||
pfUI:UpdateConfig("unitframes", unit, "owndebuffsize", "-1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "debuffspacingx", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "debuffspacingy", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "invert_healthbar", "0")
|
||||
pfUI:UpdateConfig("unitframes", unit, "verticalbar", "0")
|
||||
pfUI:UpdateConfig("unitframes", unit, "buff_indicator", "0")
|
||||
@@ -525,7 +567,6 @@ function pfUI:LoadConfig()
|
||||
|
||||
pfUI:UpdateConfig("unitframes", unit, "glowaggro", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "glowcombat", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "showtooltip", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "healthcolor", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "powercolor", "1")
|
||||
pfUI:UpdateConfig("unitframes", unit, "levelcolor", "1")
|
||||
@@ -617,13 +658,13 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("bars", nil, "animation", "zoomfade")
|
||||
pfUI:UpdateConfig("bars", nil, "animmode", "keypress")
|
||||
pfUI:UpdateConfig("bars", nil, "animalways", "0")
|
||||
pfUI:UpdateConfig("bars", nil, "macroscan", "1")
|
||||
pfUI:UpdateConfig("bars", nil, "reagents", "1")
|
||||
pfUI:UpdateConfig("bars", nil, "hunterbar", "0")
|
||||
pfUI:UpdateConfig("bars", nil, "pagemasteralt", "0")
|
||||
pfUI:UpdateConfig("bars", nil, "pagemastershift", "0")
|
||||
pfUI:UpdateConfig("bars", nil, "pagemasterctrl", "0")
|
||||
pfUI:UpdateConfig("bars", nil, "druidstealth", "0")
|
||||
pfUI:UpdateConfig("bars", nil, "priestshadow", "0")
|
||||
pfUI:UpdateConfig("bars", nil, "showcastable", "1")
|
||||
pfUI:UpdateConfig("bars", nil, "glowrange", "1")
|
||||
pfUI:UpdateConfig("bars", nil, "rangecolor", "1,0.1,0.1,1")
|
||||
@@ -644,6 +685,7 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("bars", nil, "bind_size", "8")
|
||||
pfUI:UpdateConfig("bars", nil, "bind_color", "1,1,0,1")
|
||||
pfUI:UpdateConfig("bars", nil, "cd_size", "12")
|
||||
pfUI:UpdateConfig("bars", nil, "cooldown_reverse", "0")
|
||||
|
||||
pfUI:UpdateConfig("bars", "gryphons", "texture", "None")
|
||||
pfUI:UpdateConfig("bars", "gryphons", "color", ".6,.6,.6,1")
|
||||
@@ -657,6 +699,7 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("totems", nil, "iconsize", "26")
|
||||
pfUI:UpdateConfig("totems", nil, "spacing", "3")
|
||||
pfUI:UpdateConfig("totems", nil, "showbg", "0")
|
||||
pfUI:UpdateConfig("totems", nil, "cooldown_reverse", "1")
|
||||
|
||||
pfUI:UpdateConfig("panel", nil, "use_unitfonts", "0")
|
||||
pfUI:UpdateConfig("panel", nil, "hide_leftchat", "0")
|
||||
@@ -714,8 +757,11 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("castbar", "player", "txtleftoffy", "0")
|
||||
pfUI:UpdateConfig("castbar", "player", "showlag", "0")
|
||||
pfUI:UpdateConfig("castbar", "player", "showrank", "0")
|
||||
pfUI:UpdateConfig("castbar", "player", "mergetradeskill", "0")
|
||||
pfUI:UpdateConfig("castbar", "player", "txtrightoffx", "0")
|
||||
pfUI:UpdateConfig("castbar", "player", "txtrightoffy", "0")
|
||||
pfUI:UpdateConfig("castbar", "player", "namealign", "LEFT")
|
||||
pfUI:UpdateConfig("castbar", "player", "timealign", "RIGHT")
|
||||
pfUI:UpdateConfig("castbar", "target", "hide_pfui", "0")
|
||||
pfUI:UpdateConfig("castbar", "target", "width", "-1")
|
||||
pfUI:UpdateConfig("castbar", "target", "height", "-1")
|
||||
@@ -728,6 +774,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("castbar", "target", "showrank", "0")
|
||||
pfUI:UpdateConfig("castbar", "target", "txtrightoffx", "0")
|
||||
pfUI:UpdateConfig("castbar", "target", "txtrightoffy", "0")
|
||||
pfUI:UpdateConfig("castbar", "target", "namealign", "LEFT")
|
||||
pfUI:UpdateConfig("castbar", "target", "timealign", "RIGHT")
|
||||
pfUI:UpdateConfig("castbar", "focus", "hide_pfui", "0")
|
||||
pfUI:UpdateConfig("castbar", "focus", "width", "-1")
|
||||
pfUI:UpdateConfig("castbar", "focus", "height", "-1")
|
||||
@@ -740,6 +788,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("castbar", "focus", "showrank", "0")
|
||||
pfUI:UpdateConfig("castbar", "focus", "txtrightoffx", "0")
|
||||
pfUI:UpdateConfig("castbar", "focus", "txtrightoffy", "0")
|
||||
pfUI:UpdateConfig("castbar", "focus", "namealign", "LEFT")
|
||||
pfUI:UpdateConfig("castbar", "focus", "timealign", "RIGHT")
|
||||
pfUI:UpdateConfig("castbar", nil, "use_unitfonts", "0")
|
||||
|
||||
pfUI:UpdateConfig("tooltip", nil, "position", "chat")
|
||||
@@ -747,6 +797,11 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("tooltip", nil, "cursoroffset", "20")
|
||||
pfUI:UpdateConfig("tooltip", nil, "extguild", "1")
|
||||
pfUI:UpdateConfig("tooltip", nil, "itemid", "0")
|
||||
pfUI:UpdateConfig("tooltip", nil, "movespeed", "0")
|
||||
pfUI:UpdateConfig("tooltip", nil, "aurasource", "0")
|
||||
pfUI:UpdateConfig("tooltip", nil, "spellid", "0")
|
||||
pfUI:UpdateConfig("tooltip", nil, "unitid", "0")
|
||||
pfUI:UpdateConfig("tooltip", nil, "showbuffs", "0")
|
||||
pfUI:UpdateConfig("tooltip", nil, "alpha", "0.8")
|
||||
pfUI:UpdateConfig("tooltip", nil, "alwaysperc", "0")
|
||||
pfUI:UpdateConfig("tooltip", "compare", "basestats", "1")
|
||||
@@ -770,13 +825,15 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("chat", "text", "timeformat", "%H:%M:%S")
|
||||
pfUI:UpdateConfig("chat", "text", "timebracket", "[]")
|
||||
pfUI:UpdateConfig("chat", "text", "timecolor", ".8,.8,.8,1")
|
||||
pfUI:UpdateConfig("chat", "text", "copytime", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "tintunknown", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "unknowncolor", ".7,.7,.7,1")
|
||||
pfUI:UpdateConfig("chat", "text", "channelnumonly", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "playerlinks", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "detecturl", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "classcolor", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "whosearchunknown", "0")
|
||||
pfUI:UpdateConfig("chat", "text", "factionicons", "0")
|
||||
pfUI:UpdateConfig("chat", "text", "raceicons", "0")
|
||||
pfUI:UpdateConfig("chat", "text", "playerlevel", "0")
|
||||
pfUI:UpdateConfig("chat", "left", "width", "380")
|
||||
pfUI:UpdateConfig("chat", "left", "height", "180")
|
||||
@@ -817,7 +874,7 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("nameplates", nil, "selfdebuff", "0")
|
||||
pfUI:UpdateConfig("nameplates", nil, "showdebuffs_hostile", "1")
|
||||
pfUI:UpdateConfig("nameplates", nil, "showdebuffs_friendly", "0")
|
||||
pfUI:UpdateConfig("nameplates", nil, "guessdebuffs", "1")
|
||||
pfUI:UpdateConfig("nameplates", nil, "owndebuffs", "0")
|
||||
pfUI:UpdateConfig("nameplates", nil, "clickthrough", "0")
|
||||
pfUI:UpdateConfig("nameplates", nil, "rightclick", "1")
|
||||
pfUI:UpdateConfig("nameplates", nil, "clickthreshold", "0.5")
|
||||
@@ -891,6 +948,7 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("nameplates", nil, "debufftimers", "1")
|
||||
pfUI:UpdateConfig("nameplates", nil, "debufftext", "1")
|
||||
pfUI:UpdateConfig("nameplates", nil, "debuffanim", "0")
|
||||
pfUI:UpdateConfig("nameplates", nil, "debreverse", "1")
|
||||
|
||||
pfUI:UpdateConfig("abuttons", nil, "enable", "1")
|
||||
pfUI:UpdateConfig("abuttons", nil, "position", "bottom")
|
||||
@@ -917,6 +975,11 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("questlog", nil, "showQuestLevels", "0")
|
||||
|
||||
pfUI:UpdateConfig("character", "inventory", "durability", "1")
|
||||
pfUI:UpdateConfig("character", "inventory", "equipflyout", "0")
|
||||
pfUI:UpdateConfig("equipmentmanager", nil, "autoswitch", "1")
|
||||
pfUI:UpdateConfig("equipmentmanager", nil, "announce", "1")
|
||||
pfUI:UpdateConfig("equipmentmanager", nil, "unusedquality", "1")
|
||||
pfUI:UpdateConfig("equipmentmanager", nil, "unusedbank", "1")
|
||||
pfUI:UpdateConfig("character", "reputation", "repRequired", "1")
|
||||
pfUI:UpdateConfig("thirdparty", nil, "chatbg", "1")
|
||||
pfUI:UpdateConfig("thirdparty", nil, "showmeter", "0")
|
||||
@@ -924,6 +987,7 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("thirdparty", "dpsmate", "dock", "0")
|
||||
pfUI:UpdateConfig("thirdparty", "shagudps", "skin", "0")
|
||||
pfUI:UpdateConfig("thirdparty", "shagudps", "dock", "0")
|
||||
pfUI:UpdateConfig("thirdparty", "greedmeter", "dock", "0")
|
||||
pfUI:UpdateConfig("thirdparty", "swstats", "skin", "0")
|
||||
pfUI:UpdateConfig("thirdparty", "swstats", "dock", "0")
|
||||
pfUI:UpdateConfig("thirdparty", "ktm", "skin", "0")
|
||||
@@ -1097,13 +1161,6 @@ function pfUI:MigrateConfig()
|
||||
end
|
||||
end
|
||||
|
||||
-- migrating rangecheck interval (> 3.2.2)
|
||||
if checkversion(3, 2, 2) then
|
||||
if tonumber(pfUI_config.unitframes.rangechecki) <= 1 then
|
||||
pfUI_config.unitframes.rangechecki = "2"
|
||||
end
|
||||
end
|
||||
|
||||
-- migrating legacy buff/debuff naming (> 3.5.0)
|
||||
if checkversion(3, 5, 0) then
|
||||
local unitframes = { "player", "target", "focus", "group", "grouptarget", "grouppet", "raid", "ttarget", "pet", "ptarget", "fallback" }
|
||||
@@ -1370,7 +1427,6 @@ function pfUI:MigrateConfig()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Remove "Show only own debuffs" from unitframes and nameplates
|
||||
-- (feature was removed; only Target Debuff Bar in buffwatch keeps it)
|
||||
if pfUI_config.nameplates then
|
||||
@@ -1386,5 +1442,17 @@ function pfUI:MigrateConfig()
|
||||
end
|
||||
end
|
||||
|
||||
pfUI_config.version = pfUI.version.string
|
||||
-- Stamp the version we've migrated to. Dev / git-cloned builds carry
|
||||
-- "@project-version@" in the toc, which pfUI.lua normalizes to "dev" —
|
||||
-- writing that here would have checkversion() parse it back as 0/0/0 on
|
||||
-- the next /reload and re-fire every migration block, clobbering user
|
||||
-- toggles (notably the >3.6.1 buff migration that rewrites
|
||||
-- buffs.{buffs,debuffs,weapons} from the deprecated global.hide{,w}buff
|
||||
-- knobs). Stamp a far-future sentinel instead so checkversion() can't
|
||||
-- flip true again on subsequent loads.
|
||||
if pfUI.version.string == "dev" then
|
||||
pfUI_config.version = "999.999.999"
|
||||
else
|
||||
pfUI_config.version = pfUI.version.string
|
||||
end
|
||||
end
|
||||
+329
-317
@@ -3,15 +3,19 @@ setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
do -- statusbars
|
||||
local animations = {}
|
||||
local stepsize, val
|
||||
local width, height, point
|
||||
local stepsize
|
||||
|
||||
-- native StatusBar methods the bar overrides
|
||||
local statusbar = CreateFrame("StatusBar")
|
||||
local SetValue, SetMinMaxValues = statusbar.SetValue, statusbar.SetMinMaxValues
|
||||
local SetOrientation, SetFrameLevel = statusbar.SetOrientation, statusbar.SetFrameLevel
|
||||
|
||||
local animate = CreateFrame("Frame", "pfStatusBarAnimation", UIParent)
|
||||
animate:SetScript("OnUpdate", function()
|
||||
stepsize = tonumber(pfUI_config.unitframes.animation_speed)
|
||||
|
||||
for bar in pairs(animations) do
|
||||
if not bar.val_ or abs(bar.val_ - bar.val) < stepsize or bar.instant then
|
||||
if not bar.val_ or abs(bar.val_ - bar.val) < stepsize then
|
||||
bar:DisplayValue(bar.val)
|
||||
elseif bar.val ~= bar.val_ then
|
||||
bar:DisplayValue(bar.val_ + min((bar.val-bar.val_) / stepsize, max(bar.val-bar.val_, 30 / GetFramerate())))
|
||||
@@ -21,8 +25,8 @@ do -- statusbars
|
||||
|
||||
local handlers = {
|
||||
["DisplayValue"] = function(self, val)
|
||||
val = val > self.max and self.max or val
|
||||
val = val < self.min and self.min or val
|
||||
local smin, smax = self:GetMinMaxValues()
|
||||
val = Clamp(val, smin, smax)
|
||||
|
||||
-- remove animation queue
|
||||
if val == self.val_ then
|
||||
@@ -31,55 +35,20 @@ do -- statusbars
|
||||
|
||||
-- set current visible value
|
||||
self.val_ = val
|
||||
SetValue(self, val)
|
||||
|
||||
if self.mode == "vertical" then
|
||||
height = self:GetHeight()
|
||||
height = height / self:GetEffectiveScale()
|
||||
point = height / (self.max - self.min) * (val - self.min)
|
||||
|
||||
-- keep values in limits
|
||||
point = math.min(height, point)
|
||||
point = math.max(0, point)
|
||||
|
||||
-- set point to zero if value and max is zero
|
||||
if val == 0 then point = 0 end
|
||||
|
||||
-- set status bar position/size
|
||||
self.bar:SetPoint("TOPLEFT", self, "TOPLEFT", 0, - height + point)
|
||||
self.bar:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 0, 0)
|
||||
|
||||
-- set background bar position/size
|
||||
self.bg:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 0)
|
||||
self.bg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 0, point)
|
||||
else
|
||||
width = self:GetWidth()
|
||||
width = width / self:GetEffectiveScale()
|
||||
point = width / (self.max - self.min) * (val - self.min)
|
||||
|
||||
-- keep values in limits
|
||||
point = math.min(width, point)
|
||||
point = math.max(0, point)
|
||||
|
||||
-- set point to zero if value and max is zero
|
||||
if val == 0 then point = 0 end
|
||||
|
||||
-- set status bar position/size
|
||||
self.bar:SetPoint("TOPLEFT", self, "TOPLEFT", 0, 0)
|
||||
self.bar:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", - width + point, 0)
|
||||
|
||||
-- set background bar position/size
|
||||
self.bg:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", 0, 0)
|
||||
self.bg:SetPoint("TOPLEFT", self, "TOPLEFT", point, 0)
|
||||
end
|
||||
-- the background fills the missing part, all of an empty range
|
||||
self.bg:SetValue(smax > smin and (smax - val) / (smax - smin) or 1)
|
||||
end,
|
||||
|
||||
["SetMinMaxValues"] = function(self, smin, smax, smooth)
|
||||
-- smoothen the transition by keeping the value at the same percentage as before
|
||||
if smooth and self.max and self.max > 0 and smax > 0 and self.max ~= smax then
|
||||
self.val_ = (self.val_ or self.val) / self.max * smax
|
||||
local _, oldmax = self:GetMinMaxValues()
|
||||
if smooth and oldmax > 0 and smax > 0 and oldmax ~= smax then
|
||||
self.val_ = (self.val_ or self.val) / oldmax * smax
|
||||
end
|
||||
|
||||
self.min, self.max = smin, smax
|
||||
SetMinMaxValues(self, smin, smax)
|
||||
self:DisplayValue(self.val_ or self.val)
|
||||
end,
|
||||
|
||||
@@ -92,41 +61,35 @@ do -- statusbars
|
||||
end
|
||||
end,
|
||||
|
||||
["SetStatusBarTexture"] = function(self, r, g, b, a)
|
||||
self.bar:SetTexture(r, g, b, a)
|
||||
end,
|
||||
|
||||
["SetStatusBarColor"] = function(self, r, g, b, a)
|
||||
self.bar:SetVertexColor(r, g, b, a)
|
||||
end,
|
||||
|
||||
["SetStatusBarBackgroundTexture"] = function(self, r, g, b, a)
|
||||
self.bg:SetTexture(r, g, b, a)
|
||||
end,
|
||||
|
||||
["SetStatusBarBackgroundColor"] = function(self, r, g, b, a)
|
||||
self.bg:SetVertexColor(r, g, b, a)
|
||||
self.bg:SetColorFill(r, g, b, a)
|
||||
end,
|
||||
|
||||
["SetOrientation"] = function(self, mode)
|
||||
self.mode = strlower(mode)
|
||||
["SetOrientation"] = function(self, orientation)
|
||||
SetOrientation(self, orientation)
|
||||
self.bg:SetOrientation(orientation)
|
||||
end,
|
||||
|
||||
-- the background stays one level below the fill, under anything else
|
||||
-- drawn on the fill's frame
|
||||
["SetFrameLevel"] = function(self, level)
|
||||
SetFrameLevel(self, level)
|
||||
self.bg:SetFrameLevel(level - 1)
|
||||
end,
|
||||
}
|
||||
|
||||
function pfUI.api.CreateStatusBar(name, parent)
|
||||
local f = CreateFrame("Button", name, parent)
|
||||
f:EnableMouse(false)
|
||||
local f = CreateFrame("StatusBar", name, parent)
|
||||
SetMinMaxValues(f, 0, 100)
|
||||
SetValue(f, 0)
|
||||
f.val = 0
|
||||
|
||||
f.bar = f:CreateTexture(nil, "NORMAL")
|
||||
f.bar:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0)
|
||||
f.bar:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0)
|
||||
|
||||
f.bg = f:CreateTexture(nil, "BACKGROUND")
|
||||
f.bg:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0)
|
||||
f.bg:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0)
|
||||
|
||||
-- set some default values
|
||||
f.min, f.max, f.val = 0, 100, 0
|
||||
f.bg = CreateFrame("StatusBar", nil, f)
|
||||
f.bg:SetFrameLevel(f:GetFrameLevel() - 1)
|
||||
f.bg:SetAllPoints(f)
|
||||
f.bg:SetReverseFill(true)
|
||||
f.bg:SetMinMaxValues(0, 1)
|
||||
f.bg:SetValue(1)
|
||||
|
||||
-- add all handler functions to the object
|
||||
for name, func in pairs(handlers) do
|
||||
@@ -138,15 +101,8 @@ do -- statusbars
|
||||
end
|
||||
|
||||
do -- dropdown
|
||||
local _, class = UnitClass("player")
|
||||
local color = PFUI_CLASS_COLORS[class]
|
||||
|
||||
local function ListEntryOnShow()
|
||||
if this.parent.id == this.id then
|
||||
this.icon:Show()
|
||||
else
|
||||
this.icon:Hide()
|
||||
end
|
||||
this.icon:SetShown(this.parent.id == this.id)
|
||||
end
|
||||
|
||||
local function ListEntryOnClick()
|
||||
@@ -180,7 +136,7 @@ do -- dropdown
|
||||
end
|
||||
|
||||
local function MenuOnUpdate()
|
||||
if not MouseIsOver(this, 100, -100, -100, 100) then
|
||||
if not this:IsMouseOver(100, -100, -100, 100) then
|
||||
this.button:HideMenu()
|
||||
end
|
||||
end
|
||||
@@ -288,8 +244,7 @@ do -- dropdown
|
||||
|
||||
frame.icon = frame:CreateTexture(nil, "OVERLAY")
|
||||
frame.icon:SetPoint("RIGHT", frame, "RIGHT", -2, 0)
|
||||
frame.icon:SetHeight(16)
|
||||
frame.icon:SetWidth(16)
|
||||
frame.icon:SetSize(16, 16)
|
||||
frame.icon:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
|
||||
|
||||
frame.text = frame:CreateFontString(nil, "OVERLAY")
|
||||
@@ -329,8 +284,7 @@ do -- dropdown
|
||||
|
||||
local button = CreateFrame("Button", nil, frame)
|
||||
button:SetPoint("RIGHT", frame, "RIGHT", -2, 0)
|
||||
button:SetWidth(16)
|
||||
button:SetHeight(16)
|
||||
button:SetSize(16, 16)
|
||||
button:SetScript("OnClick", ListButtonOnClick)
|
||||
SkinArrowButton(button, "down")
|
||||
button.icon:SetVertexColor(1,.9,.1)
|
||||
@@ -362,194 +316,28 @@ do -- dropdown
|
||||
end
|
||||
end
|
||||
|
||||
function pfUI.api.CreateTabChild(self, title, bwidth, bheight, bottom, static)
|
||||
-- create tab button
|
||||
local b = CreateFrame("Button", "pfConfig" .. title .. "Button", self, "UIPanelButtonTemplate")
|
||||
b:SetText(title)
|
||||
-- [ pfUIScrollingEditBoxTemplate ]
|
||||
-- Mixin of the template in ui-widgets.xml: ClassicAPI's scrolling edit box
|
||||
-- with pfUI's scroll bar beside it.
|
||||
_G.pfUIScrollingEditBoxMixin = {}
|
||||
|
||||
-- setup env
|
||||
local childcount = table.getn(self.childs) + 1
|
||||
local button_width = bwidth
|
||||
local button_height = bheight or 20
|
||||
local border = 4
|
||||
|
||||
if not button_width then
|
||||
button_width = 150
|
||||
elseif button_width == true then
|
||||
button_width = _G["pfConfig" .. title .. "ButtonText"]:GetStringWidth() + 4 * border
|
||||
end
|
||||
|
||||
-- set dimensions
|
||||
b:SetHeight(button_height)
|
||||
b:SetWidth(button_width)
|
||||
b:SetID(childcount)
|
||||
|
||||
if not self.align or self.align == "LEFT" then
|
||||
local outside = self.outside and -2 * border - button_width or 0
|
||||
if bottom then
|
||||
b:SetPoint("BOTTOMLEFT", self, "BOTTOMLEFT", border + outside, (self.bottomcount-1) * (button_height) + (self.bottomcount * border) )
|
||||
else
|
||||
b:SetPoint("TOPLEFT", self, "TOPLEFT", border + outside, -(childcount-1) * (button_height) - (childcount * border) )
|
||||
end
|
||||
elseif self.align == "TOP" then
|
||||
local outside = self.outside and 2 * border + button_height or 0
|
||||
local prev_button = self.buttons[getn(self.buttons)]
|
||||
if prev_button then
|
||||
b:SetPoint("TOPLEFT", prev_button, "TOPRIGHT", border, 0)
|
||||
else
|
||||
b:SetPoint("TOPLEFT", self, "TOPLEFT", border + (self.outside and -border), -border + outside )
|
||||
end
|
||||
end
|
||||
|
||||
SkinButton(b,.2,1,.8)
|
||||
|
||||
if childcount ~= 1 then
|
||||
b:SetTextColor(.5,.5,.5)
|
||||
else
|
||||
b:SetTextColor(.2,1,.8)
|
||||
end
|
||||
|
||||
b:SetScript("OnClick", function()
|
||||
for k,v in pairs(self.childs) do
|
||||
v:Hide()
|
||||
end
|
||||
self.childs[this:GetID()]:Show()
|
||||
|
||||
for k,v in pairs(self.buttons) do
|
||||
v.active = false
|
||||
v:SetTextColor(.5,.5,.5)
|
||||
end
|
||||
self.buttons[this:GetID()]:SetTextColor(.2,1,.8)
|
||||
end)
|
||||
|
||||
self.buttons[childcount] = b
|
||||
self.bottomcount = bottom and self.bottomcount + 1 or self.bottomcount
|
||||
|
||||
-- create child frame
|
||||
local child, scrollchild = nil, nil
|
||||
if not static then
|
||||
child = CreateScrollFrame("pfConfig" .. title .. "Frame", self)
|
||||
scrollchild = CreateScrollChild("pfConfig" .. title .. "ScrollChild", child)
|
||||
else
|
||||
child = CreateFrame("Frame", "pfConfig" .. title .. "Frame", self)
|
||||
end
|
||||
|
||||
if childcount ~= 1 then child:Hide() end
|
||||
|
||||
if not self.align or self.align == "LEFT" then
|
||||
child:SetPoint("TOPLEFT", self, "TOPLEFT", button_width + 2*border + 5, -border -5)
|
||||
child:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -border -5 , border + 5)
|
||||
elseif self.align == "TOP" then
|
||||
if self.outside then
|
||||
child:SetPoint("TOPLEFT", self, "TOPLEFT", 5, -5)
|
||||
child:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -5, 5)
|
||||
end
|
||||
end
|
||||
|
||||
CreateBackdrop(child)
|
||||
SetAllPointsOffset(child.backdrop, child, -5,5)
|
||||
|
||||
local ret = scrollchild or child
|
||||
ret.button = b
|
||||
table.insert(self.childs, child)
|
||||
return ret
|
||||
function pfUIScrollingEditBoxMixin:InitScrollBar()
|
||||
local scrollBox = self:GetScrollBox()
|
||||
scrollBox:ClearAllPoints()
|
||||
scrollBox:SetPoint("TOPLEFT")
|
||||
scrollBox:SetPoint("BOTTOMRIGHT", self.ScrollBar, "BOTTOMLEFT")
|
||||
ScrollUtil.RegisterScrollBoxWithScrollBar(scrollBox, self.ScrollBar)
|
||||
end
|
||||
|
||||
function pfUI.api.CreateTabFrame(parent, align, outside)
|
||||
local f = CreateFrame("Frame", nil, parent)
|
||||
|
||||
f:SetPoint("TOPLEFT", parent, "TOPLEFT", -5, 5)
|
||||
f:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 5, -5)
|
||||
|
||||
-- setup env
|
||||
f.childs = { }
|
||||
f.buttons = { }
|
||||
f.align = align
|
||||
f.outside = outside
|
||||
f.bottomcount = 1
|
||||
|
||||
-- Create Child Frame
|
||||
f.CreateTabChild = pfUI.api.CreateTabChild
|
||||
|
||||
return f
|
||||
end
|
||||
|
||||
function pfUI.api.CreateScrollFrame(name, parent)
|
||||
local f = CreateFrame("ScrollFrame", name, parent)
|
||||
|
||||
-- create slider
|
||||
f.slider = CreateFrame("Slider", nil, f)
|
||||
f.slider:SetOrientation('VERTICAL')
|
||||
f.slider:SetPoint("TOPLEFT", f, "TOPRIGHT", -7, 0)
|
||||
f.slider:SetPoint("BOTTOMRIGHT", 0, 0)
|
||||
f.slider:SetThumbTexture(pfUI.media["img:col"])
|
||||
f.slider.thumb = f.slider:GetThumbTexture()
|
||||
f.slider.thumb:SetHeight(50)
|
||||
f.slider.thumb:SetTexture(.3,1,.8,.5)
|
||||
|
||||
f.slider:SetScript("OnValueChanged", function()
|
||||
f:SetVerticalScroll(this:GetValue())
|
||||
f.UpdateScrollState()
|
||||
end)
|
||||
|
||||
f.UpdateScrollState = function()
|
||||
f.slider:SetMinMaxValues(0, f:GetVerticalScrollRange())
|
||||
f.slider:SetValue(f:GetVerticalScroll())
|
||||
|
||||
local m = f:GetHeight()+f:GetVerticalScrollRange()
|
||||
local v = f:GetHeight()
|
||||
local ratio = v / m
|
||||
|
||||
if ratio < 1 then
|
||||
local size = math.floor(v * ratio)
|
||||
f.slider.thumb:SetHeight(size)
|
||||
f.slider:Show()
|
||||
else
|
||||
f.slider:Hide()
|
||||
end
|
||||
-- The edit box takes its font from a font object and sets that object again
|
||||
-- on every SetText, so a font path goes through a font object of the frame's own.
|
||||
function pfUIScrollingEditBoxMixin:SetFont(font, size, flags)
|
||||
if not self.font then
|
||||
self.font = CreateFont(self:GetName() .. "Font")
|
||||
self:GetEditBox().fontName = self.font
|
||||
end
|
||||
|
||||
f.Scroll = function(self, step)
|
||||
local step = step or 0
|
||||
|
||||
local current = f:GetVerticalScroll()
|
||||
local max = f:GetVerticalScrollRange()
|
||||
local new = current - step
|
||||
|
||||
if new >= max then
|
||||
f:SetVerticalScroll(max)
|
||||
elseif new <= 0 then
|
||||
f:SetVerticalScroll(0)
|
||||
else
|
||||
f:SetVerticalScroll(new)
|
||||
end
|
||||
|
||||
f:UpdateScrollState()
|
||||
end
|
||||
|
||||
f:EnableMouseWheel(1)
|
||||
f:SetScript("OnMouseWheel", function()
|
||||
this:Scroll(arg1*10)
|
||||
end)
|
||||
|
||||
return f
|
||||
end
|
||||
|
||||
function pfUI.api.CreateScrollChild(name, parent)
|
||||
local f = CreateFrame("Frame", name, parent)
|
||||
|
||||
-- dummy values required
|
||||
f:SetWidth(1)
|
||||
f:SetHeight(1)
|
||||
f:SetAllPoints(parent)
|
||||
|
||||
parent:SetScrollChild(f)
|
||||
|
||||
f:SetScript("OnUpdate", function()
|
||||
this:GetParent():UpdateScrollState()
|
||||
end)
|
||||
|
||||
return f
|
||||
self.font:SetFont(font, size, flags)
|
||||
self:SetFontObject(self.font)
|
||||
end
|
||||
|
||||
-- [ CreateTextBox ]
|
||||
@@ -569,7 +357,7 @@ end
|
||||
-- 'frame' [frame] the modelframe that should be used
|
||||
function pfUI.api.EnableClickRotate(frame)
|
||||
frame:EnableMouse(true)
|
||||
HookScript(frame, "OnUpdate", function()
|
||||
frame:HookScript("OnUpdate", function()
|
||||
if this.rotate then
|
||||
local x,_ = GetCursorPosition()
|
||||
if this.curx > x then
|
||||
@@ -582,14 +370,14 @@ function pfUI.api.EnableClickRotate(frame)
|
||||
end
|
||||
end)
|
||||
|
||||
HookScript(frame, "OnMouseDown", function()
|
||||
frame:HookScript("OnMouseDown", function()
|
||||
if arg1 == "LeftButton" then
|
||||
this.rotate = true
|
||||
this.curx, this.cury = GetCursorPosition()
|
||||
end
|
||||
end)
|
||||
|
||||
HookScript(frame, "OnMouseUp", function()
|
||||
frame:HookScript("OnMouseUp", function()
|
||||
this.rotate, this.curx, this.cury = nil, nil, nil
|
||||
end)
|
||||
end
|
||||
@@ -607,15 +395,13 @@ end
|
||||
function pfUI.api.SetHighlight(frame, cr, cg, cb)
|
||||
if not frame then return end
|
||||
if not cr or not cg or not cb then
|
||||
local _, class = UnitClass("player")
|
||||
cr, cg, cb = GetClassColor(class)
|
||||
cr, cg, cb = PFUI_CLASS_COLORS[UnitClassBase('player')]:GetRGB()
|
||||
end
|
||||
|
||||
frame.cr, frame.cg, frame.cb = cr, cg, cb, ca
|
||||
frame.rr, frame.rg, frame.rb, frame.ra = GetStringColor(pfUI_config.appearance.border.color)
|
||||
|
||||
if not frame.pfEnterLeave then
|
||||
if not frame.HookScript then frame.HookScript = HookScript end
|
||||
local enter, leave = frame:GetScript("OnEnter"), frame:GetScript("OnLeave")
|
||||
|
||||
if enter then
|
||||
@@ -654,8 +440,7 @@ function pfUI.api.SkinButton(button, cr, cg, cb, icon, disableHighlight)
|
||||
if not b then b = button end
|
||||
if not b then return end
|
||||
if not cr or not cg or not cb then
|
||||
local _, class = UnitClass("player")
|
||||
cr, cg, cb = GetClassColor(class)
|
||||
cr, cg, cb = PFUI_CLASS_COLORS[UnitClassBase('player')]:GetRGB()
|
||||
end
|
||||
pfUI.api.CreateBackdrop(b, nil, true)
|
||||
b:SetNormalTexture("")
|
||||
@@ -684,7 +469,7 @@ function pfUI.api.SkinButton(button, cr, cg, cb, icon, disableHighlight)
|
||||
end
|
||||
|
||||
b.UnlockHighlight = function()
|
||||
if not MouseIsOver(b) then
|
||||
if not MouseIsOverHitRect(b) then
|
||||
b:SetBackdropBorderColor(GetStringColor(pfUI_config.appearance.border.color))
|
||||
end
|
||||
b.locked = false
|
||||
@@ -703,10 +488,10 @@ function pfUI.api.SkinCollapseButton(button, all)
|
||||
|
||||
b.icon = _G[name] or CreateFrame("Button", name, b)
|
||||
if all then size = 14 end
|
||||
b.icon:SetWidth(size)
|
||||
b.icon:SetHeight(size)
|
||||
b.icon:SetSize(size, size)
|
||||
b.icon:SetPoint("LEFT", 2, 2)
|
||||
CreateBackdrop(b.icon)
|
||||
b.icon:EnableMouse(false)
|
||||
b.icon.text = b.icon:CreateFontString(nil, "OVERLAY")
|
||||
b.icon.text:SetFontObject(GameFontWhite)
|
||||
b.icon.text:SetPoint("CENTER", -1, 0)
|
||||
@@ -733,12 +518,10 @@ end
|
||||
function pfUI.api.SkinRotateButton(button)
|
||||
pfUI.api.CreateBackdrop(button)
|
||||
|
||||
local _, class = UnitClass("player")
|
||||
local color = PFUI_CLASS_COLORS[class]
|
||||
local cr, cg, cb = color.r , color.g, color.b
|
||||
local cr, cg, cb = PFUI_CLASS_COLORS[UnitClassBase('player')]:GetRGB()
|
||||
|
||||
button:SetWidth(button:GetWidth() - 18)
|
||||
button:SetHeight(button:GetHeight() - 18)
|
||||
local btnW, btnH = button:GetSize()
|
||||
button:SetSize(btnW - 18, btnH - 18)
|
||||
|
||||
button:GetNormalTexture():SetTexCoord(0.3, 0.29, 0.3, 0.65, 0.69, 0.29, 0.69, 0.65)
|
||||
button:GetPushedTexture():SetTexCoord(0.3, 0.29, 0.3, 0.65, 0.69, 0.29, 0.69, 0.65)
|
||||
@@ -760,8 +543,7 @@ function pfUI.api.SkinCloseButton(button, parentFrame, offsetX, offsetY)
|
||||
|
||||
SkinButton(button, 1, .25, .25)
|
||||
|
||||
button:SetWidth(15)
|
||||
button:SetHeight(15)
|
||||
button:SetSize(15, 15)
|
||||
|
||||
if parentFrame then
|
||||
button:ClearAllPoints()
|
||||
@@ -788,8 +570,7 @@ function pfUI.api.SkinArrowButton(button, dir, size)
|
||||
button:SetDisabledTexture(nil)
|
||||
|
||||
if size then
|
||||
button:SetWidth(size)
|
||||
button:SetHeight(size)
|
||||
button:SetSize(size, size)
|
||||
end
|
||||
|
||||
if not button.icon then
|
||||
@@ -844,7 +625,6 @@ function pfUI.api.SkinScrollbar(frame, always)
|
||||
-- always show parent frame
|
||||
if always then
|
||||
RunOOC(function()
|
||||
if not parent.HookScript then parent.HookScript = HookScript end
|
||||
parent:HookScript("OnHide", function() this:Show() end)
|
||||
end)
|
||||
end
|
||||
@@ -896,8 +676,7 @@ function pfUI.api.SkinCheckbox(frame, size)
|
||||
frame:SetPushedTexture("")
|
||||
frame:SetHighlightTexture("")
|
||||
if size then
|
||||
frame:SetWidth(size)
|
||||
frame:SetHeight(size)
|
||||
frame:SetSize(size, size)
|
||||
end
|
||||
CreateBackdrop(frame)
|
||||
SetAllPointsOffset(frame.backdrop, frame, 4)
|
||||
@@ -925,8 +704,7 @@ function pfUI.api.SkinDropDown(frame, cr, cg, cb, useSmall)
|
||||
CreateBackdrop(button)
|
||||
|
||||
button.backdrop:ClearAllPoints()
|
||||
button.backdrop:SetWidth(18)
|
||||
button.backdrop:SetHeight(18)
|
||||
button.backdrop:SetSize(18, 18)
|
||||
button.backdrop:SetPoint("RIGHT", frame.backdrop, "RIGHT", -2, 0)
|
||||
|
||||
if not button.icon then
|
||||
@@ -938,9 +716,7 @@ function pfUI.api.SkinDropDown(frame, cr, cg, cb, useSmall)
|
||||
end
|
||||
|
||||
if not cr or not cg or not cb then
|
||||
local _, class = UnitClass("player")
|
||||
local color = PFUI_CLASS_COLORS[class]
|
||||
cr, cg, cb = color.r , color.g, color.b
|
||||
cr, cg, cb = PFUI_CLASS_COLORS[UnitClassBase('player')]:GetRGB()
|
||||
end
|
||||
|
||||
SetHighlight(button, cr, cg, cb)
|
||||
@@ -1110,8 +886,7 @@ function pfUI.api.CreateQuestionDialog(text, yes, no, editbox, onclose)
|
||||
-- buttons
|
||||
question.yes = CreateFrame("Button", "pfQuestionDialogYes", question, "UIPanelButtonTemplate")
|
||||
pfUI.api.SkinButton(question.yes)
|
||||
question.yes:SetWidth(100)
|
||||
question.yes:SetHeight(22)
|
||||
question.yes:SetSize(100, 22)
|
||||
question.yes:SetText(yescap)
|
||||
question.yes:SetScript("OnClick", function()
|
||||
if yes then yes() end
|
||||
@@ -1126,8 +901,7 @@ function pfUI.api.CreateQuestionDialog(text, yes, no, editbox, onclose)
|
||||
|
||||
question.no = CreateFrame("Button", "pfQuestionDialogNo", question, "UIPanelButtonTemplate")
|
||||
pfUI.api.SkinButton(question.no)
|
||||
question.no:SetWidth(100)
|
||||
question.no:SetHeight(22)
|
||||
question.no:SetSize(100, 22)
|
||||
question.no:SetText(nocap)
|
||||
question.no:SetScript("OnClick", function()
|
||||
if no then no() end
|
||||
@@ -1143,8 +917,7 @@ function pfUI.api.CreateQuestionDialog(text, yes, no, editbox, onclose)
|
||||
question.close = CreateFrame("Button", "pfQuestionDialogClose", question)
|
||||
question.close:SetPoint("TOPRIGHT", -border, -border)
|
||||
pfUI.api.CreateBackdrop(question.close)
|
||||
question.close:SetHeight(10)
|
||||
question.close:SetWidth(10)
|
||||
question.close:SetSize(10, 10)
|
||||
question.close.texture = question.close:CreateTexture("pfQuestionDialogCloseTex")
|
||||
question.close.texture:SetTexture(pfUI.media["img:close"])
|
||||
question.close.texture:ClearAllPoints()
|
||||
@@ -1172,10 +945,9 @@ function pfUI.api.CreateQuestionDialog(text, yes, no, editbox, onclose)
|
||||
local width = 200
|
||||
|
||||
-- delay the auto sizing, to make sure the font rendering happened
|
||||
question:SetScript("OnUpdate", function()
|
||||
RunNextFrame(function()
|
||||
if question.text:GetStringWidth() > width then width = question.text:GetStringWidth() end
|
||||
question:SetWidth( width + 2*padding)
|
||||
this:SetScript("OnUpdate", nil)
|
||||
question:SetWidth(width + 2*padding)
|
||||
end)
|
||||
end
|
||||
|
||||
@@ -1197,18 +969,22 @@ function pfUI.api.CreateInfoBox(text, time, parent, height)
|
||||
infobox = CreateFrame("Button", "pfInfoBox", UIParent)
|
||||
infobox:Hide()
|
||||
|
||||
infobox.fade = infobox:CreateAnimationGroup()
|
||||
local fade = infobox.fade:CreateAnimation("Alpha")
|
||||
fade:SetChange(-1)
|
||||
fade:SetDuration(.3)
|
||||
infobox.fade:SetScript("OnFinished", function()
|
||||
infobox:Hide()
|
||||
infobox:SetAlpha(1)
|
||||
end)
|
||||
|
||||
infobox:SetScript("OnUpdate", function()
|
||||
local time = infobox.lastshow + infobox.duration - GetTime()
|
||||
infobox.timeout:SetValue(time)
|
||||
|
||||
if GetTime() > infobox.lastshow + infobox.duration then
|
||||
infobox:SetAlpha(infobox:GetAlpha()-0.05)
|
||||
|
||||
if infobox:GetAlpha() <= 0.1 then
|
||||
infobox:Hide()
|
||||
infobox:SetAlpha(1)
|
||||
end
|
||||
elseif MouseIsOver(this) then
|
||||
if not infobox.fade:IsPlaying() then infobox.fade:Play() end
|
||||
elseif MouseIsOverHitRect(this) then
|
||||
this:SetAlpha(max(0.4, this:GetAlpha() - .1))
|
||||
else
|
||||
this:SetAlpha(min(1, this:GetAlpha() + .1))
|
||||
@@ -1247,11 +1023,11 @@ function pfUI.api.CreateInfoBox(text, time, parent, height)
|
||||
infobox.duration = time
|
||||
infobox.lastshow = GetTime()
|
||||
|
||||
infobox:SetWidth(infobox.text:GetStringWidth() + 50)
|
||||
infobox:SetSize(infobox.text:GetStringWidth() + 50, height)
|
||||
infobox:SetParent(parent)
|
||||
infobox:SetHeight(height)
|
||||
|
||||
infobox:SetFrameStrata("FULLSCREEN_DIALOG")
|
||||
infobox.fade:Stop()
|
||||
infobox:Show()
|
||||
end
|
||||
|
||||
@@ -1284,3 +1060,239 @@ function pfUI.api.SkinMoneyInputFrame(frame)
|
||||
copperIcon:ClearAllPoints()
|
||||
copperIcon:SetPoint("LEFT", copper_editbox, "RIGHT", 2, 0)
|
||||
end
|
||||
|
||||
-- Shared icon picker widget. Builds a name field, a "currently selected"
|
||||
-- preview, and a 10x8 icon grid backed by IconDataProviderMixin with an
|
||||
-- All/Spells/Items filter and a name search. Used by the macro icon picker
|
||||
-- and the equipment manager's name/icon popup. The widgets attach to
|
||||
-- `parent`; the caller owns the surrounding frame, its OK/Cancel buttons,
|
||||
-- and the save flow. Selection is tracked by texture PATH (not index) so it
|
||||
-- survives filter changes -- a spell icon you picked still saves after you
|
||||
-- switch the filter to "Items" and it drops out of the visible grid.
|
||||
--
|
||||
-- name global-name prefix for the icon grid and editboxes
|
||||
-- parent the popup frame to attach the widgets to
|
||||
-- extraType IconDataProviderExtraType.* seed (Spellbook / Equipment)
|
||||
-- nameLabelText header shown above the name field
|
||||
--
|
||||
-- Returns a handle:
|
||||
-- .editbox name EditBox (caller wires enter/escape)
|
||||
-- .search search EditBox
|
||||
-- .GetIcon() current selected texture path
|
||||
-- .SetIcon(path) set selection (nil -> question mark)
|
||||
-- .Refresh() ensure provider, redraw grid + preview
|
||||
-- .SetIconAreaShown(shown) show/hide the grid, filter, search, and labels
|
||||
function pfUI.api.CreateIconPicker(name, parent, extraType, nameLabelText)
|
||||
local QUESTION_MARK = "INTERFACE\\ICONS\\INV_MISC_QUESTIONMARK"
|
||||
|
||||
local ICON_GRID_COLS = 10
|
||||
local ICON_GRID_ROWS = 8
|
||||
local ICON_BTN_SIZE = 36
|
||||
local ICON_BTN_PAD = 6
|
||||
|
||||
local provider = nil
|
||||
local selectedIconPath = QUESTION_MARK
|
||||
local currentFilter = "all"
|
||||
local searchText = ""
|
||||
local filtered = nil -- provider indices matching the search, or nil when empty
|
||||
local RefreshIconGrid, RebuildFilter
|
||||
|
||||
local function EnsureProvider()
|
||||
if not provider then
|
||||
provider = CreateAndInitFromMixin(IconDataProviderMixin, extraType)
|
||||
end
|
||||
end
|
||||
|
||||
-- Normalize a texture to an uppercase basename so matching works across
|
||||
-- sources: GetMacroInfo / stored set icons return "Interface\Icons\<name>"
|
||||
-- while provider paths are uppercase-prefixed for base icons and
|
||||
-- mixed-case for spellbook extras.
|
||||
local function IconKey(path)
|
||||
if type(path) ~= "string" then return path end
|
||||
return string.gsub(string.upper(path), "^.*[\\/]", "")
|
||||
end
|
||||
|
||||
parent.nameLabel = parent:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
parent.nameLabel:SetPoint("TOPLEFT", parent, "TOPLEFT", 14, -20)
|
||||
parent.nameLabel:SetText(nameLabelText)
|
||||
|
||||
parent.editbox = CreateFrame("EditBox", name.."Name", parent, "InputBoxTemplate")
|
||||
parent.editbox:SetSize(280, 20)
|
||||
parent.editbox:SetPoint("TOPLEFT", parent, "TOPLEFT", 14, -38)
|
||||
parent.editbox:SetAutoFocus(false)
|
||||
parent.editbox:SetMaxLetters(16)
|
||||
CreateBackdrop(parent.editbox)
|
||||
|
||||
parent.selectedLabel = parent:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
parent.selectedLabel:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -14, -14)
|
||||
parent.selectedLabel:SetText(ICON_SELECTION_TITLE_CURRENT)
|
||||
parent.selectedLabel:SetTextColor(1, 0.82, 0)
|
||||
|
||||
parent.selectedPreview = CreateFrame("Frame", nil, parent)
|
||||
parent.selectedPreview:SetSize(42, 42)
|
||||
parent.selectedPreview:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -14, -30)
|
||||
CreateBackdrop(parent.selectedPreview)
|
||||
parent.selectedPreview.tex = parent.selectedPreview:CreateTexture(nil, "ARTWORK")
|
||||
parent.selectedPreview.tex:SetAllPoints(parent.selectedPreview)
|
||||
parent.selectedPreview.tex:SetTexCoord(.08, .92, .08, .92)
|
||||
|
||||
parent.iconLabel = parent:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
parent.iconLabel:SetPoint("TOPLEFT", parent, "TOPLEFT", 14, -86)
|
||||
parent.iconLabel:SetText(MACRO_POPUP_CHOOSE_ICON)
|
||||
|
||||
-- Icon grid: the template keeps 5px around the grid and its 7px scroll bar,
|
||||
-- and the grid leaves 4px before the bar
|
||||
local gridWidth = ICON_GRID_COLS * (ICON_BTN_SIZE + ICON_BTN_PAD) - ICON_BTN_PAD
|
||||
local gridHeight = ICON_GRID_ROWS * (ICON_BTN_SIZE + ICON_BTN_PAD) - ICON_BTN_PAD
|
||||
local grid = CreateFrame("Frame", name.."Icons", parent, "pfUIScrollBoxListTemplate")
|
||||
grid:SetPoint("TOPLEFT", parent, "TOPLEFT", 9, -111)
|
||||
grid:SetSize(gridWidth + 4 + 7 + 10, gridHeight + 10)
|
||||
|
||||
-- Filter dropdown: All / Spells / Items
|
||||
local filterDropdown = CreateFrame("Frame", name.."Filter", parent, "UIDropDownMenuTemplate")
|
||||
filterDropdown:SetPoint("TOPRIGHT", parent, "TOPRIGHT", 0, -80)
|
||||
local function ApplyFilter(value)
|
||||
currentFilter = value
|
||||
UIDropDownMenu_SetSelectedValue(filterDropdown, value)
|
||||
if provider then
|
||||
if value == "spells" then provider:SetIconTypes({ IconDataProviderIconType.Spell })
|
||||
elseif value == "items" then provider:SetIconTypes({ IconDataProviderIconType.Item })
|
||||
else provider:SetIconTypes(nil) end
|
||||
RebuildFilter()
|
||||
RefreshIconGrid()
|
||||
end
|
||||
end
|
||||
UIDropDownMenu_Initialize(filterDropdown, function()
|
||||
local info
|
||||
info = {}; info.text = ICON_FILTER_ALL; info.value = "all"
|
||||
info.func = function() ApplyFilter("all") end
|
||||
info.checked = currentFilter == "all"
|
||||
UIDropDownMenu_AddButton(info)
|
||||
info = {}; info.text = ICON_FILTER_SPELL; info.value = "spells"
|
||||
info.func = function() ApplyFilter("spells") end
|
||||
info.checked = currentFilter == "spells"
|
||||
UIDropDownMenu_AddButton(info)
|
||||
info = {}; info.text = ICON_FILTER_ITEM; info.value = "items"
|
||||
info.func = function() ApplyFilter("items") end
|
||||
info.checked = currentFilter == "items"
|
||||
UIDropDownMenu_AddButton(info)
|
||||
end)
|
||||
UIDropDownMenu_SetWidth(120, filterDropdown)
|
||||
UIDropDownMenu_SetSelectedValue(filterDropdown, "all")
|
||||
SkinDropDown(filterDropdown)
|
||||
|
||||
-- the selected icon gets a gold border in the grid and shows in the preview
|
||||
local function UpdateSelection()
|
||||
grid.ScrollBox:ReinitializeFrames()
|
||||
parent.selectedPreview.tex:SetTexture(selectedIconPath)
|
||||
end
|
||||
|
||||
local function IconOnClick()
|
||||
local path = provider:GetIconByIndex(this.iconIndex)
|
||||
if path then selectedIconPath = path end
|
||||
UpdateSelection()
|
||||
end
|
||||
|
||||
local function IconOnEnter()
|
||||
local path = provider:GetIconByIndex(this.iconIndex)
|
||||
if type(path) == "string" then
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetText(IconKey(path), 1, 1, 1)
|
||||
GameTooltip:Show()
|
||||
end
|
||||
end
|
||||
|
||||
local function InitIconButton(btn, icon)
|
||||
-- one-time setup of a pooled button
|
||||
if not btn.texture then
|
||||
CreateBackdrop(btn)
|
||||
btn.texture = btn:CreateTexture(nil, "ARTWORK")
|
||||
btn.texture:SetAllPoints(btn)
|
||||
btn.texture:SetTexCoord(.08, .92, .08, .92)
|
||||
btn:SetScript("OnClick", IconOnClick)
|
||||
btn:SetScript("OnEnter", IconOnEnter)
|
||||
btn:SetScript("OnLeave", GameTooltip_Hide)
|
||||
end
|
||||
|
||||
btn.iconIndex = icon.index
|
||||
local path = provider:GetIconByIndex(icon.index)
|
||||
btn.texture:SetTexture(path)
|
||||
if IconKey(path) == IconKey(selectedIconPath) then
|
||||
btn.backdrop:SetBackdropBorderColor(1, 0.82, 0, 1)
|
||||
else
|
||||
btn.backdrop:SetBackdropBorderColor(pfUI.cache.er, pfUI.cache.eg, pfUI.cache.eb, pfUI.cache.ea)
|
||||
end
|
||||
end
|
||||
|
||||
local view = CreateScrollBoxListGridView(ICON_GRID_COLS, 0, 0, 0, 4, ICON_BTN_PAD, ICON_BTN_PAD)
|
||||
view:SetElementSize(ICON_BTN_SIZE, ICON_BTN_SIZE)
|
||||
view:SetElementInitializer("Button", InitIconButton)
|
||||
ScrollUtil.InitScrollBoxListWithScrollBar(grid.ScrollBox, grid.ScrollBar, view)
|
||||
|
||||
-- Rebuild the search-filtered index list (provider indices whose icon
|
||||
-- basename contains the search text); nil when the search box is empty.
|
||||
function RebuildFilter()
|
||||
EnsureProvider()
|
||||
if searchText == "" then
|
||||
filtered = nil
|
||||
return
|
||||
end
|
||||
filtered = {}
|
||||
for i = 1, provider:GetNumIcons() do
|
||||
local path = provider:GetIconByIndex(i)
|
||||
if type(path) == "string" and string.find(IconKey(path), searchText, 1, true) then
|
||||
table.insert(filtered, i)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- one grid entry per provider index the filter lets through, scrolled to the top
|
||||
function RefreshIconGrid()
|
||||
EnsureProvider()
|
||||
if filtered then
|
||||
grid.ScrollBox:SetDataProvider(CreateDataProviderWithAssignedKey(filtered, "index"))
|
||||
else
|
||||
grid.ScrollBox:SetDataProvider(CreateDataProviderByIndexCount(provider:GetNumIcons()))
|
||||
end
|
||||
parent.selectedPreview.tex:SetTexture(selectedIconPath)
|
||||
end
|
||||
|
||||
-- Search box (bottom-left) filters the grid by icon name.
|
||||
parent.searchLabel = parent:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
parent.searchLabel:SetPoint("BOTTOMLEFT", parent, "BOTTOMLEFT", 16, 18)
|
||||
parent.searchLabel:SetText(SEARCH)
|
||||
|
||||
parent.search = CreateFrame("EditBox", name.."Search", parent, "InputBoxTemplate")
|
||||
parent.search:SetSize(180, 20)
|
||||
parent.search:SetPoint("LEFT", parent.searchLabel, "RIGHT", 10, 0)
|
||||
parent.search:SetAutoFocus(false)
|
||||
CreateBackdrop(parent.search)
|
||||
parent.search:SetScript("OnEscapePressed", function() this:ClearFocus() end)
|
||||
parent.search:SetScript("OnTextChanged", function()
|
||||
searchText = strupper(strtrim(this:GetText()))
|
||||
RebuildFilter()
|
||||
RefreshIconGrid()
|
||||
end)
|
||||
|
||||
-- Release the provider when the popup closes so its icon cache GCs, and
|
||||
-- the grid's entries that index into it.
|
||||
parent:HookScript("OnHide", function()
|
||||
if provider then provider:Release(); provider = nil end
|
||||
grid.ScrollBox:RemoveDataProvider()
|
||||
end)
|
||||
|
||||
local handle = { editbox = parent.editbox, search = parent.search }
|
||||
function handle.GetIcon() return selectedIconPath end
|
||||
function handle.SetIcon(path) selectedIconPath = path or QUESTION_MARK end
|
||||
function handle.Refresh() RefreshIconGrid() end
|
||||
function handle.SetIconAreaShown(shown)
|
||||
grid:SetShown(shown)
|
||||
parent.iconLabel:SetShown(shown)
|
||||
parent.selectedLabel:SetShown(shown)
|
||||
parent.selectedPreview:SetShown(shown)
|
||||
filterDropdown:SetShown(shown)
|
||||
parent.searchLabel:SetShown(shown)
|
||||
parent.search:SetShown(shown)
|
||||
end
|
||||
return handle
|
||||
end
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<!--
|
||||
pfUI's scroll bar for ClassicAPI's ScrollBox: a thin track with a flat
|
||||
thumb. ScrollBarMixin needs Back and Forward steppers, so they exist but
|
||||
stay hidden. Hook it up with ScrollUtil.InitScrollBoxListWithScrollBar.
|
||||
-->
|
||||
<EventFrame name="pfUIScrollBarTemplate" inherits="VerticalScrollBarTemplate" virtual="true">
|
||||
<Size x="7"/>
|
||||
<KeyValues>
|
||||
<KeyValue key="hideIfUnscrollable" value="true" type="boolean"/>
|
||||
</KeyValues>
|
||||
<Frames>
|
||||
<Frame parentKey="Track" setAllPoints="true" enableMouse="true">
|
||||
<Frames>
|
||||
<EventButton parentKey="Thumb">
|
||||
<Size x="7"/>
|
||||
<Layers>
|
||||
<Layer level="ARTWORK">
|
||||
<Texture setAllPoints="true">
|
||||
<Color r=".3" g="1" b=".8" a=".5"/>
|
||||
</Texture>
|
||||
</Layer>
|
||||
</Layers>
|
||||
</EventButton>
|
||||
</Frames>
|
||||
</Frame>
|
||||
<EventButton parentKey="Back" hidden="true"/>
|
||||
<EventButton parentKey="Forward" hidden="true"/>
|
||||
</Frames>
|
||||
</EventFrame>
|
||||
|
||||
<!--
|
||||
A ScrollFrame for free-form content, with pfUIScrollBarTemplate inside its
|
||||
right edge. Put the content in frame.Content, which spans the frame: the
|
||||
engine measures the scroll range from the shown frames inside it, so the
|
||||
content needs no height. Changes inside it are not measured until
|
||||
frame:UpdateScrollChildRect().
|
||||
-->
|
||||
<ScrollFrame name="pfUIScrollFrameTemplate" virtual="true">
|
||||
<Frames>
|
||||
<EventFrame parentKey="ScrollBar" inherits="pfUIScrollBarTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPRIGHT"/>
|
||||
<Anchor point="BOTTOMRIGHT"/>
|
||||
</Anchors>
|
||||
</EventFrame>
|
||||
</Frames>
|
||||
<ScrollChild>
|
||||
<Frame parentKey="Content">
|
||||
<Size x="1" y="1"/>
|
||||
</Frame>
|
||||
</ScrollChild>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
self.Content:SetAllPoints()
|
||||
self:EnableMouseWheel(true)
|
||||
ScrollUtil.InitScrollFrameWithScrollBar(self, self.ScrollBar)
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</ScrollFrame>
|
||||
|
||||
<!--
|
||||
A WowScrollBoxList with pfUIScrollBarTemplate beside it, both 5px inside the
|
||||
frame so CreateBackdrop(frame, nil, true) can frame them. Fill it with
|
||||
ScrollUtil.InitScrollBoxListWithScrollBar(frame.ScrollBox, frame.ScrollBar, view).
|
||||
-->
|
||||
<Frame name="pfUIScrollBoxListTemplate" virtual="true">
|
||||
<Frames>
|
||||
<EventFrame parentKey="ScrollBar" inherits="pfUIScrollBarTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPRIGHT" x="-5" y="-5"/>
|
||||
<Anchor point="BOTTOMRIGHT" x="-5" y="5"/>
|
||||
</Anchors>
|
||||
</EventFrame>
|
||||
<Frame parentKey="ScrollBox" inherits="WowScrollBoxList">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" x="5" y="-5"/>
|
||||
<Anchor point="BOTTOMRIGHT" relativeKey="$parent.ScrollBar" relativePoint="BOTTOMLEFT"/>
|
||||
</Anchors>
|
||||
</Frame>
|
||||
</Frames>
|
||||
</Frame>
|
||||
|
||||
<!--
|
||||
ClassicAPI's ScrollingEditBoxTemplate with pfUIScrollBarTemplate beside the
|
||||
text. The frame needs a name: SetFont(font, size, flags) names its font
|
||||
object after it.
|
||||
-->
|
||||
<Frame name="pfUIScrollingEditBoxTemplate" inherits="ScrollingEditBoxTemplate" mixin="pfUIScrollingEditBoxMixin" virtual="true">
|
||||
<KeyValues>
|
||||
<KeyValue key="maxLetters" value="0" type="number"/>
|
||||
</KeyValues>
|
||||
<Frames>
|
||||
<EventFrame parentKey="ScrollBar" inherits="pfUIScrollBarTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPRIGHT"/>
|
||||
<Anchor point="BOTTOMRIGHT"/>
|
||||
</Anchors>
|
||||
</EventFrame>
|
||||
</Frames>
|
||||
<Scripts>
|
||||
<OnLoad method="InitScrollBar" inherit="prepend"/>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
</Ui>
|
||||
+774
-1160
File diff suppressed because it is too large
Load Diff
@@ -1,85 +0,0 @@
|
||||
-- load pfUI environment
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
-- [[ Constants ]]--
|
||||
CASTBAR_EVENT_CAST_DELAY = "SPELLCAST_DELAYED"
|
||||
CASTBAR_EVENT_CHANNEL_DELAY = "SPELLCAST_CHANNEL_UPDATE"
|
||||
CASTBAR_EVENT_CAST_START = "SPELLCAST_START"
|
||||
CASTBAR_EVENT_CHANNEL_START = "SPELLCAST_CHANNEL_START"
|
||||
|
||||
EVENTS_MINIMAP_ZONE_UPDATE = {"PLAYER_ENTERING_WORLD", "MINIMAP_ZONE_CHANGED"}
|
||||
|
||||
MICRO_BUTTONS = {
|
||||
'CharacterMicroButton', 'SpellbookMicroButton', 'TalentMicroButton',
|
||||
'QuestLogMicroButton', 'SocialsMicroButton', 'WorldMapMicroButton',
|
||||
'MainMenuMicroButton', 'HelpMicroButton',
|
||||
}
|
||||
|
||||
NAMEPLATE_OBJECTORDER = { "border", "glow", "name", "level", "levelicon", "raidicon" }
|
||||
|
||||
NAMEPLATE_FRAMETYPE = "Button"
|
||||
|
||||
MINIMAP_TRACKING_FRAME = _G.MiniMapTrackingFrame
|
||||
|
||||
FRIENDS_NAME_LOCATION = "ButtonTextNameLocation"
|
||||
|
||||
COOLDOWN_FRAME_TYPE = "Model"
|
||||
LOOT_BUTTON_FRAME_TYPE = "LootButton"
|
||||
|
||||
PLAYER_BUFF_START_ID = -1
|
||||
|
||||
ACTIONBAR_SECURE_TEMPLATE_BAR = nil
|
||||
ACTIONBAR_SECURE_TEMPLATE_BUTTON = nil
|
||||
UNITFRAME_SECURE_TEMPLATE = nil
|
||||
|
||||
--[[ Vanilla API Extensions ]]--
|
||||
function hooksecurefunc(tbl, name, func, prepend)
|
||||
if type(tbl) == "string" then
|
||||
prepend, func, name, tbl = func, name, tbl, _G
|
||||
end
|
||||
|
||||
if not tbl or not tbl[name] then return end
|
||||
|
||||
pfUI.hooks[tostring(func)] = {}
|
||||
pfUI.hooks[tostring(func)]["old"] = tbl[name]
|
||||
pfUI.hooks[tostring(func)]["new"] = func
|
||||
|
||||
if prepend then
|
||||
pfUI.hooks[tostring(func)]["function"] = function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
|
||||
pfUI.hooks[tostring(func)]["new"](a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
|
||||
return pfUI.hooks[tostring(func)]["old"](a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
|
||||
end
|
||||
else
|
||||
pfUI.hooks[tostring(func)]["function"] = function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
|
||||
local ok, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16 = pcall(pfUI.hooks[tostring(func)]["old"], a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
|
||||
if not ok then return end
|
||||
pfUI.hooks[tostring(func)]["new"](a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)
|
||||
return r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16
|
||||
end
|
||||
end
|
||||
|
||||
tbl[name] = pfUI.hooks[tostring(func)]["function"]
|
||||
end
|
||||
|
||||
do -- GetItemInfo
|
||||
local name, link, rarity, minlevel, itype, isubtype, stack
|
||||
function GetItemInfo(item)
|
||||
if not item then return end
|
||||
name, link, rarity, minlevel, itype, isubtype, stack = _G.GetItemInfo(item)
|
||||
return name, link, rarity, nil, minlevel, itype, isubtype, stack
|
||||
end
|
||||
end
|
||||
|
||||
do -- RunMacroText
|
||||
local obj = { ["GetText"] = function(self) return self.text end }
|
||||
obj = setmetatable(obj, {__index = function(tab,key)
|
||||
local value = function() return end
|
||||
rawset(tab,key,value)
|
||||
return value
|
||||
end})
|
||||
|
||||
function RunMacroText(text)
|
||||
obj.text = text
|
||||
ChatEdit_ParseText(obj, 1)
|
||||
end
|
||||
end
|
||||
Vendored
+677
@@ -0,0 +1,677 @@
|
||||
-- Classic Era GlobalStrings (DE) that the combat log reads
|
||||
-- and the 1.12 client lacks. Generated; do not edit by hand.
|
||||
pfUI_locale["deDE"]["combatlog"] = {
|
||||
ACTION_DAMAGE_SHIELD = "verletzt",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT = "%2$s von %1$s reflektiert %9$s %7$s auf %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT_NO_SOURCE = "%2$s reflektiert %9$s %7$s auf %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED = "verfehlt",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK = "(Geblockt)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT = "%4$s blockt %2$s von %1$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s blockt %2$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT = "(Abgewehrt)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT = "%4$s wehrt %2$s von %1$s ab.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%4$s wehrt %2$s ab.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE = "(Ausgewichen)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT = "%4$s weicht %2$s von %1$s aus.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s weicht %2$s aus.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED = "(Entkommen)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT = "%4$s entkommt %2$s von %1$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%4$s entkommt %2$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT = "%1$s wirkt %2$s auf %4$s an und verfehlt.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT_NO_SOURCE = "%2$s verfehlt %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE = "(Immun)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT = "%2$s von %1$s schlägt fehl. %4$s ist immun.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s schlägt fehl. %4$s ist immun.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS = "(Verfehlt)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT = "%1$s wirkt %2$s auf %4$s und verfehlt.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s verfehlt %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY = "(Pariert)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT = "%1$s pariert %2$s von %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s pariert %2$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST = "(Widerstanden)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT = "%4$s widersteht %2$s von %1$s vollständig.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s widersteht %2$s vollständig.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SPLIT = "teilt Schaden",
|
||||
ACTION_DAMAGE_SPLIT_ABSORBED_FULL_TEXT = "%2$s von %1$s wurde durch %6$s von %4$s absorbiert.",
|
||||
ACTION_DAMAGE_SPLIT_FULL_TEXT = "%2$s von %1$s verursacht bei %4$s %9$s.",
|
||||
ACTION_DAMAGE_SPLIT_POSSESSIVE = "0",
|
||||
ACTION_DAMAGE_SPLIT_RESULT_FULL_TEXT = "%2$s von %1$s fügt %6$s von %4$s %9$s Schaden zu.",
|
||||
ACTION_ENCHANT_APPLIED = "verzaubert",
|
||||
ACTION_ENCHANT_APPLIED_FULL_TEXT = "%1$s wirkt %2$s auf %5$s von %4$s.",
|
||||
ACTION_ENCHANT_APPLIED_POSSESSIVE = "0",
|
||||
ACTION_ENCHANT_REMOVED = "Verzauberung schwindet",
|
||||
ACTION_ENCHANT_REMOVED_FULL_TEXT = "%2$s auf %5$s von %4$s schwindet.",
|
||||
ACTION_ENCHANT_REMOVED_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE = "verletzt",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING = "Ertrinken",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_FULL_TEXT = "%4$s ertrinkt und verliert %9$s Gesundheit.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING = "Sturz",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_FULL_TEXT = "%4$s stürzt und verliert %9$s Gesundheit.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE = "Erschöpfung",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_FULL_TEXT = "%4$s ist erschöpft und verliert %9$s Gesundheit.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE = "Feuer",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_FULL_TEXT = "%4$s erleidet %9$s Feuerschaden.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FULL_TEXT = "%4$s verliert durch Umgebungsschaden %9$s Gesundheit.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA = "Lava",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_FULL_TEXT = "%4$s verliert durch das Schwimmen in Lava %9$s Gesundheit. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME = "Schleim",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_FULL_TEXT = "%4$s verliert durch das Schwimmen in Schleim %9$s Gesundheit. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL = "besiegt",
|
||||
ACTION_PARTY_KILL_FULL_TEXT = "%1$s besiegt %4$s!",
|
||||
ACTION_PARTY_KILL_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS = "umgehauen",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_FULL_TEXT = "%1$s hat %4$s umgehauen!",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_RANGED = "Schuss",
|
||||
ACTION_RANGE_DAMAGE = "trifft",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT = "%1$s schießt auf %4$s, verursacht %5$s.%6$s",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT_NO_SOURCE = "Ein Distanzangriff trifft %4$s, verursacht %5$s.%6$s",
|
||||
ACTION_RANGE_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED = "verfehlt",
|
||||
ACTION_RANGE_MISSED_ABSORB = "(Absorbiert)",
|
||||
ACTION_RANGE_MISSED_ABSORB_FULL_TEXT = "%4$s absorbiert den Schuss von %1$s.%6$s",
|
||||
ACTION_RANGE_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_BLOCK = "(Geblockt)",
|
||||
ACTION_RANGE_MISSED_BLOCK_FULL_TEXT = "%4$s blockt den Schuss von %1$s.%6$s",
|
||||
ACTION_RANGE_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DEFLECT = "(Abgewehrt)",
|
||||
ACTION_RANGE_MISSED_DEFLECT_FULL_TEXT = "%4$s wehrt den Schuss von %1$s ab.",
|
||||
ACTION_RANGE_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DODGE = "(Ausgewichen)",
|
||||
ACTION_RANGE_MISSED_DODGE_FULL_TEXT = "%4$s weicht dem Schuss von %1$s aus.",
|
||||
ACTION_RANGE_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_EVADE = "(Entkommen)",
|
||||
ACTION_RANGE_MISSED_EVADE_FULL_TEXT = "%4$s entkommt dem Schuss von %1$s.",
|
||||
ACTION_RANGE_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_FULL_TEXT = "%1$s schießt auf %4$s und verfehlt.",
|
||||
ACTION_RANGE_MISSED_IMMUNE = "(Immun)",
|
||||
ACTION_RANGE_MISSED_IMMUNE_FULL_TEXT = "Der Schuss von %1$s schlägt fehl. %4$s ist immun.",
|
||||
ACTION_RANGE_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISFIRE = "(Verfehlt)",
|
||||
ACTION_RANGE_MISSED_MISFIRE_FULL_TEXT = "%1$s schießt auf %4$s und verfehlt.",
|
||||
ACTION_RANGE_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISS = "(Verfehlt)",
|
||||
ACTION_RANGE_MISSED_MISS_FULL_TEXT = "%1$s schießt auf %4$s und verfehlt.",
|
||||
ACTION_RANGE_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_PARRY = "(Pariert)",
|
||||
ACTION_RANGE_MISSED_PARRY_FULL_TEXT = "%4$s pariert den Schuss von %1$s.",
|
||||
ACTION_RANGE_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_RESIST = "(Widerstanden)",
|
||||
ACTION_RANGE_MISSED_RESIST_FULL_TEXT = "%4$s widersteht dem Schuss von %1$s vollständig.%6$s",
|
||||
ACTION_RANGE_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED = "wirkt",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF = "wirkt",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT = "%4$s gewinnt %1$s %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT_NO_SOURCE = "%4$s gewinnt %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT = "%4$s gewinnt %1$s %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s gewinnt %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF = "beeinträchtigt",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT = "%4$s wird durch %2$s von %1$s beeinträchtigt.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s wird von %2$s beeinträchtigt.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT = "%4$s wird durch %2$s von %1$s beeinträchtigt. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s wird von %2$s beeinträchtigt. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE = "Stapel",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF = "Stapel",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT = "%4$s gewinnt %1$s %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%4$s erhält %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF = "peinigt",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT = "%4$s wird durch %2$s von %1$s beeinträchtigt. (%9$s)",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s wird von %2$s beeinträchtigt (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN = "bricht",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF = "bricht",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT = "%2$s von %4$s wird durch %1$s gebrochen.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT_NO_SOURCE = "%2$s von %1$s wird durch jemanden gebrochen.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF = "bricht",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT = "%2$s von %4$s wird durch %1$s gebrochen.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s von %1$s wurde durch jemanden gebrochen.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF = "bricht",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT = "%1$s bricht %2$s von %4$s durch %5$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s bricht %2$s von %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF = "bricht",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT = "%1$s bricht %2$s von %4$s durch %5$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s bricht %2$s von %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH = "aufgefrischt",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF = "aufgefrischt",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s wird aufgefrischt.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s wird aufgefrischt.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s wird aufgefrischt. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s wird aufgefrischt. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF = "aufgefrischt",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s wird aufgefrischt.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s wird aufgefrischt.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s wird aufgefrischt. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s wird aufgefrischt. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REMOVED = "entfernt",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF = "schwindet",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s schwindet.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s schwindet.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s schwindet. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s schwindet. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF = "erlischt",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s erlischt.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s erlischt.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s erlischt. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s erlischt. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE = "verringert",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF = "verringert",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT = "%2$s von %1$s lässt nach. (%9$s)",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%2$s (%9$s) lässt nach.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF = "lässt nach",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT = "%2$s von %1$s nimmt ab. (%9$s)",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s (%9$s) nimmt ab.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT = "Das auf %4$s wirkende %2$s von %1$s wird entfernt.",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT_NO_SOURCE = "Das auf %4$s wirkende %2$s von %1$s wird entfernt.",
|
||||
ACTION_SPELL_AURA_REMOVED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE = "trifft",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT = "%2$s von %1$s trifft %4$s für %5$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s trifft %4$s für %5$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_HEAL = "repariert",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT = "%2$s von %1$s repariert %4$s für %9$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT_NO_SOURCE = "%2$s repariert %4$s für %9$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_FAILED = "schlägt fehl",
|
||||
ACTION_SPELL_CAST_FAILED_FULL_TEXT = "%1$s kann %2$s nicht wirken.%6$s",
|
||||
ACTION_SPELL_CAST_FAILED_MASTER = "1",
|
||||
ACTION_SPELL_CAST_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_START = "initiiert",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT = "%1$s beginnt, %2$s auf %4$s zu wirken.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_DEST = "%1$s beginnt, %2$s zu wirken.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_SOURCE = "Etwas beginnt, %2$s auf %4$s zu wirken.",
|
||||
ACTION_SPELL_CAST_START_MASTER = "2",
|
||||
ACTION_SPELL_CAST_START_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CAST_SUCCESS = "wirkt",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT = "%1$s wirkt %2$s auf %4$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_DEST = "%1$s wirkt %2$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_SOURCE = "Etwas wirkt %2$s auf %4$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_MASTER = "2",
|
||||
ACTION_SPELL_CAST_SUCCESS_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CREATE = "erschafft",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT = "%4$s wird von %1$s durch %2$s erschaffen.%6$s",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT_NO_SOURCE = "%4$s wird durch %2$s erschaffen.%6$s",
|
||||
ACTION_SPELL_CREATE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DAMAGE = "trifft",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT = "%1$s trifft %4$s mit %2$s für %5$s.%6$s",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s trifft %4$s für %5$s.%6$s",
|
||||
ACTION_SPELL_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL = "bannt",
|
||||
ACTION_SPELL_DISPEL_BUFF = "bannt",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT = "%5$s auf %4$s wird von %1$s durch %2$s gebannt.",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s auf %4$s wird durch %2$s gebannt.",
|
||||
ACTION_SPELL_DISPEL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_DEBUFF = "läutert",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT = "%5$s auf %4$s wird von %1$s durch %2$s geläutert.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s auf %4$s wird durch %2$s geläutert.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_FAILED = "Magiebannung schlägt fehl",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT = "%2$s von %1$s kann %5$s auf %4$s nicht bannen.",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT_NO_SOURCE = "%2$s kann %5$s auf %4$s nicht bannen.",
|
||||
ACTION_SPELL_DISPEL_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DRAIN = "entzieht",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT = "%1$s entzieht von %4$s durch %2$s %9$s %8$s.",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT_NO_SOURCE = " %2$s entzieht von %4$s %9$s %8$s.",
|
||||
ACTION_SPELL_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE = "Haltbarkeitsverlust",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL = "kompletter Haltbarkeitsverlust",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_FULL_TEXT = "%2$s von %1$s trifft %4$s: Alle Gegenstände beschädigt.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_FULL_TEXT = "%2$s von %1$s trifft %4$s: %5$s beschädigt.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE = "aufgeladen",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT = "%4$s gewinnt durch %2$s von %1$s %9$s %8$s.",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s gewinnt durch %2$s %9$s %8$s.",
|
||||
ACTION_SPELL_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE_RESULT = "%9$s %8$s gewonnen.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS = "gewährt zusätzliche Angriffe",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT = "%1$s werden durch %2$s %9$s zusätzliche Angriffe gewährt.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT_NO_SOURCE = "%2$s gewährt %9$s zusätzliche Angriffe.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_HEAL = "heilt",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT = "%2$s von %1$s heilt %4$s um %9$s.%6$s",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT_NO_SOURCE = "%2$s heilt %4$s um %9$s.%6$s",
|
||||
ACTION_SPELL_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL = "besiegt",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT = "%1$s besiegt %4$s durch %2$s sofort.",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT_NO_SOURCE = "%2$s besiegt %4$s sofort.",
|
||||
ACTION_SPELL_INSTAKILL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS = "umgehauen",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT = "%1$s %2$s haut %4$s um.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT_NO_SOURCE = "%2$s haut %4$s um.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INTERRUPT = "unterbricht",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT = "%1$s unterbricht %4$s durch %2$s beim Wirken von %5$s.",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT_NO_SOURCE = "%2$s unterbricht %4$s beim Wirken von %5$s.",
|
||||
ACTION_SPELL_INTERRUPT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH = "entzieht",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT = "%1$s entzieht durch %2$s %9$s %8$s von %4$s. %1$s gewinnt %10$s %8$s.",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT_NO_SOURCE = "%2$s entzieht %4$s %9$s %8$s.",
|
||||
ACTION_SPELL_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH_RESULT = "%10$s %8$s gewonnen",
|
||||
ACTION_SPELL_MISSED = "verfehlt",
|
||||
ACTION_SPELL_MISSED_ABSORB = "Absorbiert",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT = "%4$s absorbiert %2$s von %1$s.%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%4$s absorbiert %2$s.%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_BLOCK = "Geblockt",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT = "%4$s blockt %2$s von %1$s.%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s blockt %2$s.%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DEFLECT = "Abgewehrt",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT = "%4$s wehrt %2$s von %1$s ab.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%4$s wehrt %2$s ab.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DODGE = "Ausgewichen",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT = "%4$s weicht %2$s von %1$s aus.",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s weicht %2$s aus.",
|
||||
ACTION_SPELL_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_EVADE = "Entkommen",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT = "%4$s entkommt %2$s von %1$s.",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT_NO_SOURCE = "%4$s entkommt %2$s.",
|
||||
ACTION_SPELL_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT = "%1$s wirkt %2$s auf %4$s und verfehlt.",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT_NO_SOURCE = "%2$s verfehlt %4$s.",
|
||||
ACTION_SPELL_MISSED_IMMUNE = "Immun",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT = "%2$s von %1$s schlägt fehl. %4$s ist immun.",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s schlägt fehl. %4$s ist immun.",
|
||||
ACTION_SPELL_MISSED_MISFIRE = "Verfehlt",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT = "%1$s wirkt %2$s auf %4$s und verfehlt.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT_NO_SOURCE = "%2$s verfehlt %4$s.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_MISS = "Verfehlt",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT = "%1$s wirkt %2$s auf %4$s und verfehlt.",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s verfehlt %4$s.",
|
||||
ACTION_SPELL_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_PARRY = "Pariert",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT = "%4$s pariert %2$s von %1$s.",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s pariert %2$s.",
|
||||
ACTION_SPELL_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_REFLECT = "Reflektiert",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT = "%2$s von %1$s wird durch %4$s reflektiert.",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT_NO_SOURCE = "%2$s wird durch %4$s reflektiert.",
|
||||
ACTION_SPELL_MISSED_RESIST = "Widerstanden",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT = "%4$s widersteht %2$s von %1$s vollständig.%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s widersteht %2$s vollständig.%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE = "verletzt",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT = "%4$s erleidet durch %2$s von %1$s %5$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT_NO_SOURCE = "%4$s erleidet durch %2$s %5$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DRAIN = "entzieht",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT = "%1$s entzieht durch %2$s %9$s %8$s von %4$s.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s entzieht %4$s %9$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE = "aufgeladen",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT = "%4$s gewinnt durch %2$s von %1$s %9$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s gewinnt durch %2$s %9$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_RESULT = "$extraAmount %8$s gewonnen.",
|
||||
ACTION_SPELL_PERIODIC_HEAL = "heilt",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT = "%4$s gewinnt durch %2$s von %1$s %9$s Gesundheit.%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT_NO_SOURCE = "%4$s gewinnt durch %2$s %9$s Gesundheit.%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH = "entzieht",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT = "%1$s entzieht durch %2$s %9$s %8$s von %4$s. %1$s gewinnt %10$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT_NO_SOURCE = "%2$s entzieht %9$s %8$s von %4$s. %1$s gewinnt %10$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH_RESULT = "(%10$s %8$s gewonnen)",
|
||||
ACTION_SPELL_PERIODIC_MISSED = "verfehlt",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB = "(%1$s absorbiert)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT = "%2$s von %1$s wurde durch %4$s absorbiert.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s wurde durch %4$s absorbiert.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK = "(Tick geblockt)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT = "%4$s blockt %2$s von %1$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s blockt %2$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED = "(Tick abgewehrt)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT = "%4$s wehrt %2$s von %1$s für einen Moment ab.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT_NO_SOURCE = "%4$s wehrt %2$s für einen Moment ab.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE = "(Tick ausgewichen)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT = "%4$s weicht %2$s von %1$s für einen Moment aus.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s weicht %2$s für einen Moment aus.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED = "(Tick entkommen)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT = "%4$s entkommt %2$s von %1$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%4$s entkommt %2$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT = "%2$s von %1$s verfehlt %4$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT_NO_SOURCE = "%2$s verfehlt %4$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE = "(Immun)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT = "%4$s ist gegen %2$s von %1$s immun.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%4$s ist gegen %2$s immun.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS = "(Tick verfehlt)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT = "%2$s von %1$s verfehlt %4$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s verfehlt %4$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY = "(Tick pariert)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT = "%4$s pariert %2$s von %1$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s pariert %2$s für einen Moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST = "(Tick widerstanden)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT = "%4$s wird nicht vom Effekt %2$s von %1$s betroffen. %4$s hat widerstanden.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s wird nicht vom Effekt %2$s betroffen. %4$s hat widerstanden.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_RESURRECT = "wiederbelebt",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT = "%2$s von %1$s belebt %4$s wieder.%6$s",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT_NO_SOURCE = "%2$s belebt %4$s wieder.%6$s",
|
||||
ACTION_SPELL_RESURRECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN = "stiehlt",
|
||||
ACTION_SPELL_STOLEN_BUFF = "stiehlt",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT = "%2$s von %1$s stiehlt %5$s auf %4$s.",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT_NO_SOURCE = "%2$s stiehlt %5$s auf %4$s.",
|
||||
ACTION_SPELL_STOLEN_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_BUFF__POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_DEBUFF = "stiehlt",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT = "%1$s überträgt durch %2$s den auf %4$s wirkenden Zauber $extraSpell zu %1$s.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s überträgt $extraSpell von %4$s.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT = "%2$s von %1$s stiehlt %5$s auf %4$s.",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT_NO_SOURCE = "%2$s stiehlt %5$s auf %4$s.",
|
||||
ACTION_SPELL_STOLEN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_SUMMON = "beschwört",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT = "%1$s ruft durch %2$s %4$s herbei.%6$s",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT_NO_SOURCE = "%2$s ruft %4$s herbei.%6$s",
|
||||
ACTION_SPELL_SUMMON_POSSESSIVE = "1",
|
||||
ACTION_SWING = "Schlag",
|
||||
ACTION_SWING_DAMAGE = "trifft",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT = "%1$s schlägt %4$s im Nahkampf, verursacht %5$s.%6$s",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT_NO_SOURCE = "Ein Nahkampfschlag trifft %4$s, verursacht %5$s.%6$s",
|
||||
ACTION_SWING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED = "verfehlt",
|
||||
ACTION_SWING_MISSED_ABSORB = "(Absorbiert)",
|
||||
ACTION_SWING_MISSED_ABSORB_FULL_TEXT = "%4$s absorbiert den Angriff von %1$s.%6$s",
|
||||
ACTION_SWING_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_BLOCK = "(Geblockt)",
|
||||
ACTION_SWING_MISSED_BLOCK_FULL_TEXT = "%4$s blockt den Angriff von %1$s.%6$s",
|
||||
ACTION_SWING_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DEFLECT = "(Abgewehrt)",
|
||||
ACTION_SWING_MISSED_DEFLECT_FULL_TEXT = "%4$s wehrt den Angriff von %1$s ab.",
|
||||
ACTION_SWING_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DODGE = "(Ausgewichen)",
|
||||
ACTION_SWING_MISSED_DODGE_FULL_TEXT = "%4$s weicht dem Angriff von %1$s aus.",
|
||||
ACTION_SWING_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_EVADE = "(Entkommen)",
|
||||
ACTION_SWING_MISSED_EVADE_FULL_TEXT = "%4$s entkommt dem Angriff von %1$s.",
|
||||
ACTION_SWING_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_FULL_TEXT = "%1$s greift %4$s an und verfehlt.",
|
||||
ACTION_SWING_MISSED_IMMUNE = "(Immun)",
|
||||
ACTION_SWING_MISSED_IMMUNE_FULL_TEXT = "Der Angriff von %1$s schlägt fehl. %4$s ist immun.",
|
||||
ACTION_SWING_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISFIRE = "(Verfehlt)",
|
||||
ACTION_SWING_MISSED_MISFIRE_FULL_TEXT = "Der Angriff von %1$s verfehlt %4$s.",
|
||||
ACTION_SWING_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISS = "(Verfehlt)",
|
||||
ACTION_SWING_MISSED_MISS_FULL_TEXT = "%1$s greift %4$s an und verfehlt.",
|
||||
ACTION_SWING_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_PARRY = "(Pariert)",
|
||||
ACTION_SWING_MISSED_PARRY_FULL_TEXT = "%4$s pariert den Angriff von %1$s.",
|
||||
ACTION_SWING_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_RESIST = "(Widerstanden)",
|
||||
ACTION_SWING_MISSED_RESIST_FULL_TEXT = "%4$s widersteht dem Angriff von %1$s vollständig.%6$s",
|
||||
ACTION_SWING_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_UNIT_BECCOMES_UNCONSCIOUS = "bricht zusammen",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_FULL_TEXT = "%4$s bricht zusammen.",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DESTROYED = "zerstört",
|
||||
ACTION_UNIT_DESTROYED_FULL_TEXT = "%4$s wird zerstört.",
|
||||
ACTION_UNIT_DESTROYED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DIED = "stirbt",
|
||||
ACTION_UNIT_DIED_FULL_TEXT = "%4$s stirbt.",
|
||||
ACTION_UNIT_DIED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DISSIPATES = "schwindet",
|
||||
ACTION_UNIT_DISSIPATES_FULL_TEXT = "%4$s schwindet.",
|
||||
ACTION_UNIT_DISSIPATES_POSSESSIVE = "0",
|
||||
ADD = "Hinzufügen",
|
||||
ADDITIONAL_FILTERS = "Zusätzliche Filter",
|
||||
ADD_FILTER = "Filter hinz.",
|
||||
AURAS = "Auren",
|
||||
AURAS_COMBATLOG_TOOLTIP = "Zeigt Nachrichten über vorteilhafte und schädliche Statuseffekte an.",
|
||||
BENEFICIAL = "Vorteilhaft",
|
||||
BENEFICIAL_AURA_COMBATLOG_TOOLTIP = "Anzeigen, wenn Ihr eine vorteilhafte Aura erhaltet oder verliert.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_BOTH = "Alles anzeigen, das %s betrifft?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_EVERYTHING = "Alles anzeigen",
|
||||
BLIZZARD_COMBAT_LOG_MENU_INCOMING = "Was ist mit %s geschehen?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING = "Anzeigen, was %s tat?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING_ME = "Was hat %s mit mir getan?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_RESET = "Rücksetzen",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SAVE = "Als neuen Filter speichern",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE = "Nachrichten wie diese ausblenden.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK = "%s zum Chat verlinken.",
|
||||
BY_SOURCE = "Nach Quelle",
|
||||
BY_SOURCE_COMBATLOG_TOOLTIP = "Zeilenfarbe basierend auf dem Zaubernden.",
|
||||
BY_TARGET = "Nach Ziel",
|
||||
BY_TARGET_COMBATLOG_TOOLTIP = "Zeilenfarbe basierend auf dem Ziel.",
|
||||
COLORIZE = "Einfärben:",
|
||||
COLORS = "Farben",
|
||||
COLOR_BY_SCHOOL = "Farbe nach Art",
|
||||
COMBATLOG_DEFAULTS = "Kampflog: Standard",
|
||||
COMBATLOG_FILTER_STRING_CUSTOM_UNIT = "Benutzerdefinierte Einheit",
|
||||
COMBATLOG_FILTER_STRING_FRIENDLY_UNITS = "Freundliche Einheiten",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_PLAYERS = "Gegnerische Spieler",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_UNITS = "Feindliche Einheiten",
|
||||
COMBATLOG_FILTER_STRING_ME = "Spieler",
|
||||
COMBATLOG_FILTER_STRING_MY_PET = "Begleiter",
|
||||
COMBATLOG_FILTER_STRING_NEUTRAL_UNITS = "Neutrale Einheiten",
|
||||
COMBATLOG_FILTER_STRING_UNKNOWN_UNITS = "Unbekannt",
|
||||
COMBATLOG_HIGHLIGHT_ABILITY = "Fähigkeit",
|
||||
COMBATLOG_HIGHLIGHT_DAMAGE = "Schaden",
|
||||
COMBATLOG_HIGHLIGHT_KILL = "Sieg",
|
||||
COMBATLOG_HIGHLIGHT_SCHOOL = "Magieart",
|
||||
COMBATLOG_UNKNOWN_UNIT = "Etwas",
|
||||
COMBAT_FACTION_CHANGE = "Ruf",
|
||||
COMBAT_HONOR_GAIN = "Ehre",
|
||||
COMBAT_LOG_UNIT_YOU_ENABLED = "1",
|
||||
COMBAT_MISC_INFO = "Versch. Infos",
|
||||
COMBAT_XP_GAIN = "Erfahrung",
|
||||
CONFIRM_COMBAT_FILTER_DEFAULTS = "Wollt Ihr Eure Filter wirklich auf die Standardeinstellungen zurücksetzen?",
|
||||
CONFIRM_COMBAT_FILTER_DELETE = "Wollt Ihr diesen Filter wirklich löschen?",
|
||||
COPY_FILTER = "Filter kop.",
|
||||
DAMAGE_NUMBER = "Schadenszahl",
|
||||
DAMAGE_SCHOOL_TEXT = "Schadensart",
|
||||
DAMAGE_SHIELD = "Schadensschilde",
|
||||
DAMAGE_SHIELD_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit als Reaktion auf einen Nahkampfangriff Schaden verursacht, z.B. Dornen.",
|
||||
DEATHS_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn etwas stirbt.",
|
||||
DEFAULT_COMBATLOG_FILTER_NAME = "Filter %d",
|
||||
DISPELS = "Bannungen",
|
||||
DISPEL_AURA_COMBATLOG_TOOLTIP = "Anzeigen, wenn eine Aura entfernt, unterbrochen oder gestohlen wird.",
|
||||
DONE_BY = "Aktion von:",
|
||||
DONE_TO = "Aktion auf:",
|
||||
DRAINS = "Entzüge",
|
||||
ENTER_FILTER_NAME = "Filternamen eingeben:",
|
||||
ENTIRE_LINE = "Gesamte Zeile",
|
||||
ENTIRE_LINE_COMBATLOG_TOOLTIP = "Die gesamte Zeile basierend auf der unteren Auswahl einfärben.",
|
||||
ENVIRONMENTAL_DAMAGE = "Umgebungsschaden",
|
||||
ENVIRONMENTAL_DAMAGE_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn jemand Schaden durch Stürze, durch Ertrinken oder das Schwimmen in Lava erhält.",
|
||||
EXAMPLE_SPELL_FIREBALL = "Feuerball",
|
||||
EXAMPLE_SPELL_FROSTBOLT = "Frostblitz",
|
||||
EXAMPLE_TARGET_MONSTER = "Monster",
|
||||
EXAMPLE_TEXT = "Beispieltext:",
|
||||
EXTRA_ATTACKS = "Zusatzangriffe",
|
||||
FAILURES = "Fehlschläge",
|
||||
FILTER_BY_ENEMIES_COMBATLOG_TOOLTIP = "Aktionen, die von feindlichen Kreaturen und Begleitern durchgeführt werden.",
|
||||
FILTER_BY_FRIENDS_COMBATLOG_TOOLTIP = "Aktionen, die von freundlichen Spielern, Begleitern und Kreaturen durchgeführt werden.",
|
||||
FILTER_BY_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Aktionen, die von feindlichen Spielern durchgeführt werden.",
|
||||
FILTER_BY_ME_COMBATLOG_TOOLTIP = "Aktionen, die von Euch, Euren Fallen und Euren Zaubern durchgeführt werden.",
|
||||
FILTER_BY_NEUTRAL_COMBATLOG_TOOLTIP = "Aktionen, die von neutralen Kreaturen durchgeführt werden.",
|
||||
FILTER_BY_PET_COMBATLOG_TOOLTIP = "Aktionen, die von Euren Begleitern, beschworenen Wächtern oder von Euch bezauberten Spielern durchgeführt werden.",
|
||||
FILTER_BY_UNKNOWN_COMBATLOG_TOOLTIP = "Aktionen, die von unbestimmten Quellen durchgeführt werden, so wie Sturz, Säure oder Lava.",
|
||||
FILTER_NAME = "Filtername",
|
||||
FILTER_TO_FRIENDS_COMBATLOG_TOOLTIP = "Aktionen, die auf freundliche Spieler, Begleiter und Kreaturen durchgeführt werden.",
|
||||
FILTER_TO_HOSTILE_COMBATLOG_TOOLTIP = "Aktionen, die auf feindliche Begleiter und Kreaturen durchgeführt werden.",
|
||||
FILTER_TO_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Aktionen, die auf gegnerische Spieler durchgeführt werden.",
|
||||
FILTER_TO_ME_COMBATLOG_TOOLTIP = "Aktionen, die auf Euch durchgeführt werden.",
|
||||
FILTER_TO_NEUTRAL_COMBATLOG_TOOLTIP = "Aktionen, die auf neutrale Kreaturen durchgeführt werden.",
|
||||
FILTER_TO_PET_COMBATLOG_TOOLTIP = "Aktionen, die auf Eure Begleiter, beschworene Wächter oder von Euch bezauberte Spieler durchgeführt werden.",
|
||||
FILTER_TO_UNKNOWN_COMBATLOG_TOOLTIP = "Aktionen, die auf unsichtbare Ziele durchgeführt werden.",
|
||||
FORMATTING = "Format",
|
||||
FULL_TEXT_COMBATLOG_TOOLTIP = "Kampflogeinträge als vollständige Sätze anzeigen.",
|
||||
HARMFUL_AURA_COMBATLOG_TOOLTIP = "Anzeigen, wenn Ihr eine schädliche Aura erhaltet oder verliert.",
|
||||
HEALS = "Heilungen",
|
||||
HIGHLIGHTING = "Hervorhebung:",
|
||||
HIGHLIGHT_ABILITY_COMBATLOG_TOOLTIP = "Hebt in den Kampfnachrichten die Namen von Fähigkeiten hervor.",
|
||||
HIGHLIGHT_DAMAGE_COMBATLOG_TOOLTIP = "Hebt in den Kampfnachrichten die Schadenszahlen hervor.",
|
||||
HIGHLIGHT_KILL_COMBATLOG_TOOLTIP = "Hebt die gesamte Zeile hervor, wenn Ihr oder ein Mitglied Eurer Gruppe einen Feind besiegt.",
|
||||
HIGHLIGHT_SCHOOL_COMBATLOG_TOOLTIP = "Hebt in den Kampfnachrichten die Zauberarten hervor.",
|
||||
HOSTILE = "Feindlich",
|
||||
INTERRUPTS = "Unterbrechungen",
|
||||
ITEM_NAMES = "Gegenstandsnamen",
|
||||
ITEM_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Klammern um Namen von Gegenständen anzeigen.",
|
||||
KILLS_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Mitglied Eurer Gruppe etwas tötet.",
|
||||
MELEE = "Nahkampf",
|
||||
MELEE_COMBATLOG_TOOLTIP = "Zeigt gewöhnliche Nahkampfangriffe an.",
|
||||
MESSAGE_SOURCES = "Nachrichtenquellen",
|
||||
MISSES = "Verfehlen",
|
||||
MOVE_FILTER_DOWN = "Filter nach unten",
|
||||
MOVE_FILTER_UP = "Filter nach oben",
|
||||
OTHER = "Anderes",
|
||||
PERIODIC = "Regelmäßig",
|
||||
POWER_GAINS = "Machtgewinn",
|
||||
POWER_GAINS_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit Mana, Energie, Wut, Fokus, Chi, heilige Kraft oder Schattenkugeln wiederherstellt.",
|
||||
QUICKBUTTON_NAME_EVERYTHING = "Alles",
|
||||
QUICKBUTTON_NAME_EVERYTHING_TOOLTIP = "Alle Kampfnachrichten anzeigen.",
|
||||
QUICKBUTTON_NAME_KILLS = "Todesstöße",
|
||||
QUICKBUTTON_NAME_KILLS_TOOLTIP = "Alle Tode und Todesstöße anzeigen.",
|
||||
QUICKBUTTON_NAME_ME = "Was ist mit mir geschehen?",
|
||||
QUICKBUTTON_NAME_ME_TOOLTIP = "Alles mir Zugefügte anzeigen.",
|
||||
QUICKBUTTON_NAME_SELF = "Selbst",
|
||||
QUICKBUTTON_NAME_SELF_TOOLTIP = "Zeigt Nachrichten für von Euch und an Euch ausgeführte Aktionen.",
|
||||
QUICK_BUTTON_COMBATLOG_TOOLTIP = "Platziert im Chatfenster eine Verknüpfung zu diesem Filter.",
|
||||
RANGED = "Distanz",
|
||||
RANGED_COMBATLOG_TOOLTIP = "Zeigt Angriffe mit Bögen, Schusswaffen, Wurfwaffen und Zauberstäben an.",
|
||||
RANGE_DAMAGE_COMBATLOG_TOOLTIP = "Zeigt Distanzangriffe an, die den vollen oder teilweisen Schaden verursachen.",
|
||||
RANGE_MISSED_COMBATLOG_TOOLTIP = "Zeigt fehlgeschlagene Distanzangriffe an, die keinen Schaden verursachen.",
|
||||
RESURRECT = "Wiederbelebung",
|
||||
SETTINGS = "Optionen",
|
||||
SHOW_BRACES = "Klammern anzeigen",
|
||||
SHOW_BRACES_COMBATLOG_TOOLTIP = "Klammern um Hyperlinks im Kampflog anzeigen.",
|
||||
SHOW_QUICK_BUTTON = "Schnelltaste anzeigen",
|
||||
SHOW_TIMESTAMP = "Zeitstempel anzeigen",
|
||||
SOURCE = "Quelle",
|
||||
SPECIAL = "Spezial",
|
||||
SPELLS_COMBATLOG_TOOLTIP = "Zeigt Nachrichten über Zauber und Spezialfähigkeiten an.",
|
||||
SPELL_CASTING = "Zauberwirken",
|
||||
SPELL_CASTING_COMBATLOG_TOOLTIP = "Nachrichten über das Wirken von Zaubern anzeigen.",
|
||||
SPELL_CAST_FAILED_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber nicht gewirkt werden kann oder nicht abgeschlossen wird.",
|
||||
SPELL_CAST_START_COMBATLOG_TOOLTIP = "Nachricht anzeigen, wenn das Wirken eines Zaubers begonnen wird.",
|
||||
SPELL_CAST_SUCCESS_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber erfolgreich abgeschlossen wird.",
|
||||
SPELL_COLOR_BY_SCHOOL_COMBATLOG_TOOLTIP = "Zauber basierend auf der Art einfärben.",
|
||||
SPELL_DAMAGE_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit Schaden verursacht.",
|
||||
SPELL_DAMAGE_NUMBER_COMBATLOG_TOOLTIP = "Färbt die Schadenszahl von Schwüngen, die nicht im Nahkampf stattfinden.",
|
||||
SPELL_DAMAGE_SCHOOL_COMBATLOG_TOOLTIP = "Den Namen der Schadensart einfärben. (z.B. Schatten)",
|
||||
SPELL_DRAIN_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit Mana, Energie, Wut oder Fokus verringert.",
|
||||
SPELL_EXTRA_ATTACKS_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit zusätzliche Angriffe gewährt.",
|
||||
SPELL_HEAL_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit Schaden heilt.",
|
||||
SPELL_INSTAKILL_COMBATLOG_TOOLTIP = "Nachrichten über spezielle Zauberarten anzeigen, die beispielsweise Haltbarkeitsverlust verursachen oder Schaden mit einem Begleiter teilen.",
|
||||
SPELL_INTERRUPT_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit einen anderen Zauber unterbricht.",
|
||||
SPELL_MISSED_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit keinen Schaden verursachen kann. Das schließt Ausweichen, Parieren, Blocken, Abwehren, Immunität, Absorbieren und Entkommen ein.",
|
||||
SPELL_NAMES = "Zaubernamen",
|
||||
SPELL_NAMES_COMBATLOG_TOOLTIP = "Namen von Zaubern einfärben.",
|
||||
SPELL_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Klammern um Namen von Zaubern anzeigen.",
|
||||
SPELL_PERIODIC_COMBATLOG_TOOLTIP = "Zauber anzeigen, die einen regelmäßigen Effekt ausführen.",
|
||||
SPELL_PERIODIC_DAMAGE_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit regelmäßigen Schaden verursacht, z.B. Schattenwort: Schmerz oder Verderbnis.",
|
||||
SPELL_PERIODIC_HEAL_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit regelmäßig Schaden heilt, z.B. Erneuerung oder Verjüngung.",
|
||||
SPELL_PERIODIC_MISSED_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn der regelmäßige Schaden eines Zaubers oder einer Fähigkeit versagt. Das schließt Immunität, Absorbieren und Entkommen ein.",
|
||||
SPELL_PERIODIC_OTHER_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit regelmäßig einen Effekt ausführt, z.B. das Wiederherstellen oder Entziehen von Mana.",
|
||||
SPELL_RESURRECT_COMBATLOG_TOOLTIP = "Nachrichten anzeigen, wenn ein Zauber oder eine Fähigkeit einen Spieler oder eine Kreatur wiedererweckt.",
|
||||
SPELL_SUMMON_COMBATLOG_TOOLTIP = "Nachricht anzeigen, wenn ein Zauber oder eine Fähigkeit eine Kreatur beschwört oder ein Objekt erschafft.",
|
||||
START = "Start",
|
||||
STRING_SCHOOL_UNKNOWN = "Unbekannt",
|
||||
SUCCESS = "Erfolg",
|
||||
SUMMONS = "Herbeiruf.",
|
||||
SWING_DAMAGE_COMBATLOG_TOOLTIP = "Zeigt Nahkampfangriffe an, die den vollen oder teilweise Schaden verursachen.",
|
||||
SWING_MISSED_COMBATLOG_TOOLTIP = "Zeigt fehlgeschlagene Nahkampfangriffe an, die keinen Schaden verursachen.",
|
||||
TEXT_MODE_A = "A",
|
||||
TEXT_MODE_A_STRING_1 = "%s %s %s %s %s. %s %11$s",
|
||||
TEXT_MODE_A_STRING_2 = "%1$s %3$s %2$s %4$s %5$s. %6$s",
|
||||
TEXT_MODE_A_STRING_3 = "%1$s %5$s %3$s %4$s %2$s. %6$s",
|
||||
TEXT_MODE_A_STRING_ACTION = "|Haction:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_BRACE_ITEM = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_SPELL = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_UNIT = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_DEST_ICON = "|Hicon:%d:dest|h%s|h",
|
||||
TEXT_MODE_A_STRING_DEST_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_ITEM = "|Hitem:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_POSSESSIVE = "%s",
|
||||
TEXT_MODE_A_STRING_REMAINING_POINTS = "(%s verbleiben)",
|
||||
TEXT_MODE_A_STRING_RESULT_ABSORB = "(%s absorbiert)",
|
||||
TEXT_MODE_A_STRING_RESULT_BLOCK = "(%s geblockt)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL = "(Kritisch)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL_SPELL = "(Kritisch)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRUSHING = "(Schmetternd)",
|
||||
TEXT_MODE_A_STRING_RESULT_FORMAT = "$resultAmount $resultType",
|
||||
TEXT_MODE_A_STRING_RESULT_GLANCING = "(Gestreift)",
|
||||
TEXT_MODE_A_STRING_RESULT_MULTISTRIKE = "(Mehrfachschlag)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERENERGIZE = "(%s Überaufladung)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERHEALING = "(%s Überheilung)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERKILLING = "(%s Schaden über Tod)",
|
||||
TEXT_MODE_A_STRING_RESULT_PARRY = "(%d pariert)",
|
||||
TEXT_MODE_A_STRING_RESULT_REFLECT = "Reflektiert",
|
||||
TEXT_MODE_A_STRING_RESULT_RESIST = "(%s widerstanden)",
|
||||
TEXT_MODE_A_STRING_RESULT_VULNERABILITY = "(%s Verletzlichkeitsschaden)",
|
||||
TEXT_MODE_A_STRING_SOURCE_ICON = "|Hicon:%s:source|h%s|h",
|
||||
TEXT_MODE_A_STRING_SOURCE_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL_EXTRA = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_TIMESTAMP = "%s> %s",
|
||||
TEXT_MODE_A_STRING_VALUE_SCHOOL = "%s %s",
|
||||
TEXT_MODE_A_STRING_VALUE_TYPE = "%s (%s)",
|
||||
TEXT_MODE_A_TIMESTAMP = "%H:%M:%S",
|
||||
TIMESTAMP_COMBATLOG_TOOLTIP = "Den Zeitstempel für Nachrichten im Kampflog anzeigen.",
|
||||
UNIT_COLORS = "Einheitenfarben:",
|
||||
UNIT_NAMES = "Einheitennamen",
|
||||
UNIT_NAMES_COMBATLOG_TOOLTIP = "Namen von Einheiten einfärben.",
|
||||
UNIT_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Klammern um Namen von Einheiten anzeigen.",
|
||||
UNIT_YOU = "Ihr",
|
||||
UNIT_YOU_DEST = "Euch",
|
||||
UNIT_YOU_DEST_POSSESSIVE = "Euer",
|
||||
UNIT_YOU_SOURCE = "Euer Charakter",
|
||||
UNIT_YOU_SOURCE_POSSESSIVE = "Euer",
|
||||
USE_FULL_TEXT_MODE = "Volltextmodus verwenden",
|
||||
}
|
||||
Vendored
+677
@@ -0,0 +1,677 @@
|
||||
-- Classic Era GlobalStrings (GB) that the combat log reads
|
||||
-- and the 1.12 client lacks. Generated; do not edit by hand.
|
||||
pfUI_locale["enUS"]["combatlog"] = {
|
||||
ACTION_DAMAGE_SHIELD = "damages",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT = "%1$s %2$s reflects %9$s %7$s damage to %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT_NO_SOURCE = "%2$s reflects %9$s %7$s damage to %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED = "missed",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK = "(Blocked)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT = "%1$s %2$s was blocked by %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s was blocked by %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT = "(Deflected)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT = "%1$s %2$s was deflected by %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%2$s was deflected by %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE = "(Dodged)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT = "%1$s %2$s was dodged by %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s was dodged by %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED = "(Evaded)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT = "%1$s %2$s was evaded by %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%2$s was evaded by %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT = "%1$s %2$s missed %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT_NO_SOURCE = "%2$s missed %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE = "(Immune)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT = "%1$s %2$s failed. %4$s was immune.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s failed. %4$s was immune.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS = "(Missed)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT = "%1$s %2$s misses %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s misses %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY = "(Parried)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT = "%1$s %2$s was parried by %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s was parried by %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST = "(Resisted)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT = "%1$s %2$s was fully resisted by %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s was fully resisted by %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SPLIT = "shared damage",
|
||||
ACTION_DAMAGE_SPLIT_ABSORBED_FULL_TEXT = "%1$s's %2$s damage was absorbed by %4$s %6$s.",
|
||||
ACTION_DAMAGE_SPLIT_FULL_TEXT = "%1$s %2$s causes %9$s damage to %4$s.",
|
||||
ACTION_DAMAGE_SPLIT_POSSESSIVE = "0",
|
||||
ACTION_DAMAGE_SPLIT_RESULT_FULL_TEXT = "%1$s's %2$s causes %9$s damage to %4$s %6$s.",
|
||||
ACTION_ENCHANT_APPLIED = "enchanted",
|
||||
ACTION_ENCHANT_APPLIED_FULL_TEXT = "%1$s cast %2$s on %4$s %5$s.",
|
||||
ACTION_ENCHANT_APPLIED_POSSESSIVE = "0",
|
||||
ACTION_ENCHANT_REMOVED = "enchant faded",
|
||||
ACTION_ENCHANT_REMOVED_FULL_TEXT = "%2$s fades from %4$s %5$s.",
|
||||
ACTION_ENCHANT_REMOVED_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE = "damaged",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING = "Drowning",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_FULL_TEXT = "%4$s is drowning and loses %9$s health.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING = "Falling",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_FULL_TEXT = "%4$s falls and loses %9$s health.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE = "Fatigue",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_FULL_TEXT = "%4$s is exhausted and loses %9$s health.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE = "Fire",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_FULL_TEXT = "%4$s suffers %9$s fire damage.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FULL_TEXT = "%4$s loses %9$s health from environmental damage.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA = "Lava",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_FULL_TEXT = "%4$s loses %9$s health from swimming in lava. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME = "Slime",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_FULL_TEXT = "%4$s loses %9$s health for swimming in slime. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL = "killed",
|
||||
ACTION_PARTY_KILL_FULL_TEXT = "%1$s has slain %4$s!",
|
||||
ACTION_PARTY_KILL_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS = "knocked out",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_FULL_TEXT = "%1$s has knocked out %4$s!",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_RANGED = "Shot",
|
||||
ACTION_RANGE_DAMAGE = "hit",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT = "%1$s ranged shot hit %4$s for %5$s.%6$s",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT_NO_SOURCE = "A ranged shot hit %4$s for %5$s.%6$s",
|
||||
ACTION_RANGE_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED = "missed",
|
||||
ACTION_RANGE_MISSED_ABSORB = "(Absorbed)",
|
||||
ACTION_RANGE_MISSED_ABSORB_FULL_TEXT = "%1$s shot was absorbed by %4$s.%6$s",
|
||||
ACTION_RANGE_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_BLOCK = "(Blocked)",
|
||||
ACTION_RANGE_MISSED_BLOCK_FULL_TEXT = "%1$s shot was blocked by %4$s.%6$s",
|
||||
ACTION_RANGE_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DEFLECT = "(Deflected)",
|
||||
ACTION_RANGE_MISSED_DEFLECT_FULL_TEXT = "%1$s shot was deflected by %4$s.",
|
||||
ACTION_RANGE_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DODGE = "(Dodged)",
|
||||
ACTION_RANGE_MISSED_DODGE_FULL_TEXT = "%1$s shot was dodged by %4$s.",
|
||||
ACTION_RANGE_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_EVADE = "(Evaded)",
|
||||
ACTION_RANGE_MISSED_EVADE_FULL_TEXT = "%1$s shot was evaded by %4$s.",
|
||||
ACTION_RANGE_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_FULL_TEXT = "%1$s shot misses %4$s.",
|
||||
ACTION_RANGE_MISSED_IMMUNE = "(Immune)",
|
||||
ACTION_RANGE_MISSED_IMMUNE_FULL_TEXT = "%1$s shot failed. %4$s was immune.",
|
||||
ACTION_RANGE_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISFIRE = "(Misfired)",
|
||||
ACTION_RANGE_MISSED_MISFIRE_FULL_TEXT = "%1$s shot misfired on %4$s.",
|
||||
ACTION_RANGE_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISS = "(Missed)",
|
||||
ACTION_RANGE_MISSED_MISS_FULL_TEXT = "%1$s shot misses %4$s.",
|
||||
ACTION_RANGE_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_PARRY = "(Parried)",
|
||||
ACTION_RANGE_MISSED_PARRY_FULL_TEXT = "%1$s shot was parried by %4$s.",
|
||||
ACTION_RANGE_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_RESIST = "(Resisted)",
|
||||
ACTION_RANGE_MISSED_RESIST_FULL_TEXT = "%1$s shot was fully resisted by %4$s.%6$s",
|
||||
ACTION_RANGE_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED = "applied",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF = "applied",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT = "%4$s gains %1$s %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT_NO_SOURCE = "%4$s gains %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT = "%4$s gains %1$s %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s gains %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF = "afflicted",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT = "%4$s is afflicted by %1$s %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s is afflicted by %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT = "%4$s is afflicted by %1$s %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s is afflicted by %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE = "stacked",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF = "stacked",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT = "%4$s gains %1$s %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%4$s gains %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF = "afflicted",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT = "%4$s is afflicted by %1$s %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s is afflicted by %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN = "broke",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF = "broke",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT = "%1$s broke %4$s %2$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT_NO_SOURCE = "%1$s %2$s was broken by someone.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF = "broke",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT = "%1$s broke %4$s %2$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%1$s %2$s was broken by someone.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF = "broke",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT = "%1$s %5$s broke %4$s %2$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s broke %4$s %2$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF = "broke",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT = "%1$s %5$s broke %4$s %2$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s broke %4$s %2$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH = "refreshed",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF = "refreshed",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT = "%1$s %2$s is refreshed on %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT_NO_SOURCE = "%2$s is refreshed on %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s is refreshed on %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s is refreshed on %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF = "refreshed",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT = "%1$s %2$s is refreshed on %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s is refreshed on %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s is refreshed on %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s is refreshed on %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REMOVED = "removed",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF = "faded",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT = "%1$s %2$s fades from %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT_NO_SOURCE = "%2$s fades from %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s fades from %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s fades from %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF = "dissipated",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT = "%1$s %2$s dissipates from %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s dissipates from %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s dissipates from %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s dissipates from %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE = "reduced",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF = "reduced",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT = "%1$s %2$s (%9$s) diminishes.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%2$s (%9$s) diminishes.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF = "diminished",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT = "%1$s %2$s (%9$s) subsides.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s (%9$s) subsides.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT = "%1$s %2$s was removed from %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT_NO_SOURCE = "%1$s %2$s was removed from %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE = "strikes",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT = "%1$s %2$s strikes %4$s for %5$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s strike %4$s for %5$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_HEAL = "repaired",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT = "%1$s %2$s repairs %4$s for %9$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT_NO_SOURCE = "%2$s repairs %4$s for %9$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_FAILED = "failed",
|
||||
ACTION_SPELL_CAST_FAILED_FULL_TEXT = "%1$s %2$s failed.%6$s",
|
||||
ACTION_SPELL_CAST_FAILED_MASTER = "1",
|
||||
ACTION_SPELL_CAST_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_START = "began to cast",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT = "%1$s begins casting %2$s at %4$s.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_DEST = "%1$s begins casting %2$s.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_SOURCE = "Something begins casting %2$s at %4$s.",
|
||||
ACTION_SPELL_CAST_START_MASTER = "2",
|
||||
ACTION_SPELL_CAST_START_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CAST_SUCCESS = "cast",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT = "%1$s casts %2$s at %4$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_DEST = "%1$s casts %2$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_SOURCE = "Something cast %2$s at %4$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_MASTER = "2",
|
||||
ACTION_SPELL_CAST_SUCCESS_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CREATE = "created",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT = "%1$s %2$s creates a %4$s.%6$s",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT_NO_SOURCE = "%2$s creates a %4$s.%6$s",
|
||||
ACTION_SPELL_CREATE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DAMAGE = "hit",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT = "%1$s %2$s hits %4$s for %5$s.%6$s",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s hits %4$s for %5$s.%6$s",
|
||||
ACTION_SPELL_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL = "dispelled",
|
||||
ACTION_SPELL_DISPEL_BUFF = "dispelled",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT = "%4$s %5$s is dispelled by %1$s %2$s.",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT_NO_SOURCE = "%4$s %5$s is dispelled by %2$s.",
|
||||
ACTION_SPELL_DISPEL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_DEBUFF = "cleansed",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT = "%4$s %5$s is cleansed by %1$s %2$s.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s %5$s cleansed by %2$s.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_FAILED = "dispel failed",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT = "%1$s %2$s fails to dispel %4$s %5$s.",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT_NO_SOURCE = "%2$s fails to dispel %4$s %5$s.",
|
||||
ACTION_SPELL_DISPEL_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DRAIN = "drained",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT = "%1$s %2$s drains %9$s %8$s from %4$s.",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT_NO_SOURCE = " %2$s drains %9$s %8$s from %4$s.",
|
||||
ACTION_SPELL_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE = "durability loss",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL = "full durability loss",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_FULL_TEXT = "%1$s %2$s damages %4$s: all items damaged.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_FULL_TEXT = "%1$s %2$s damages %4$s: %5$s damaged.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE = "energized",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT = "%4$s gains %9$s %8$s from %1$s %2$s.",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s gains %9$s %8$s from %2$s.",
|
||||
ACTION_SPELL_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE_RESULT = "%9$s %8$s Gained",
|
||||
ACTION_SPELL_EXTRA_ATTACKS = "granted extra attacks",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT = "%1$s gains %9$s extra attacks through %2$s.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT_NO_SOURCE = "%9$s extra attacks granted by %2$s.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_HEAL = "healed",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT = "%1$s %2$s heals %4$s for %9$s.%6$s",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT_NO_SOURCE = "%2$s heals %4$s for %9$s.%6$s",
|
||||
ACTION_SPELL_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL = "killed",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT = "%1$s %2$s instantly kills %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT_NO_SOURCE = "%2$s instantly kills %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS = "knocked out",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT = "%1$s %2$s knocks out %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT_NO_SOURCE = "%2$s knocks out %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INTERRUPT = "interrupted",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT = "%1$s %2$s interrupts %4$s %5$s.",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT_NO_SOURCE = "%2$s interrupts %4$s %5$s.",
|
||||
ACTION_SPELL_INTERRUPT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH = "drained",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT = "%1$s %2$s drains %9$s %8$s from %4$s. %1$s gains %10$s %8$s.",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT_NO_SOURCE = "%2$s drains %9$s %8$s from %4$s.",
|
||||
ACTION_SPELL_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH_RESULT = "%10$s %8$s Gained",
|
||||
ACTION_SPELL_MISSED = "missed",
|
||||
ACTION_SPELL_MISSED_ABSORB = "Absorbed",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT = "%1$s %2$s was absorbed by %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s was absorbed by %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_BLOCK = "Blocked",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT = "%1$s %2$s was blocked by %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s was blocked by %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DEFLECT = "Deflected",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT = "%1$s %2$s was deflected by %4$s.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%2$s was deflected by %4$s.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DODGE = "Dodged",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT = "%1$s %2$s was dodged by %4$s.",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s was dodged by %4$s.",
|
||||
ACTION_SPELL_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_EVADE = "Evaded",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT = "%1$s %2$s was evaded by %4$s.",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT_NO_SOURCE = "%2$s was evaded by %4$s.",
|
||||
ACTION_SPELL_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT = "%1$s %2$s missed %4$s.",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT_NO_SOURCE = "%2$s missed %4$s.",
|
||||
ACTION_SPELL_MISSED_IMMUNE = "Immune",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT = "%1$s %2$s failed. %4$s was immune.",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s failed. %4$s was immune.",
|
||||
ACTION_SPELL_MISSED_MISFIRE = "Misfired",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT = "%1$s %2$s misfired on %4$s.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT_NO_SOURCE = "%2$s misfired on %4$s.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_MISS = "Missed",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT = "%1$s %2$s misses %4$s.",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s misses %4$s.",
|
||||
ACTION_SPELL_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_PARRY = "Parried",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT = "%1$s %2$s was parried by %4$s.",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s was parried by %4$s.",
|
||||
ACTION_SPELL_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_REFLECT = "reflected",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT = "%1$s %2$s was reflected by %4$s.",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT_NO_SOURCE = "%2$s was reflected by %4$s.",
|
||||
ACTION_SPELL_MISSED_RESIST = "resisted",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT = "%1$s %2$s was fully resisted by %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s was fully resisted by %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE = "damaged",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT = "%4$s suffers %5$s damage from %1$s %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT_NO_SOURCE = "%4$s suffers %5$s damage from %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DRAIN = "drained",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT = "%1$s %2$s drains %9$s %8$s from %4$s.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s drains %9$s %8$s from %4$s.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE = "energized",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT = "%4$s gains %9$s %8$s from %1$s %2$s.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s gains %9$s %8$s from %2$s.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_RESULT = "$extraAmount %8$s Gained",
|
||||
ACTION_SPELL_PERIODIC_HEAL = "healed",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT = "%4$s gains %9$s Health from %1$s %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT_NO_SOURCE = "%4$s gains %9$s health from %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH = "drained",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT = "%1$s %2$s drains %9$s %8$s from %4$s. %1$s gains %10$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT_NO_SOURCE = "%2$s drains %9$s %8$s from %4$s. %1$s gains %10$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH_RESULT = "(%10$s %8$s Gained)",
|
||||
ACTION_SPELL_PERIODIC_MISSED = "missed",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB = "(%1$s Absorbed)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT = "%1$s %2$s was absorbed by %4$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s was absorbed by %4$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK = "(Tick Blocked)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT = "%1$s %2$s was blocked by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s was blocked by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED = "(Tick Deflected)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT = "%1$s %2$s was deflected by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT_NO_SOURCE = "%2$s was deflected by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE = "(Tick Dodged)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT = "%1$s %2$s was dodged by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s was dodged by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED = "(Tick Evaded)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT = "%1$s %2$s was evaded by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%2$s was evaded by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT = "%1$s %2$s does not affect %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT_NO_SOURCE = "%2$s does not affect %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE = "(Immune)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT = "%4$s was immune to %1$s %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%4$s was immune to %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS = "(Tick Missed)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT = "%1$s %2$s missed %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s missed %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY = "(Tick Parried)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT = "%1$s %2$s was parried by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s was parried by %4$s for a moment.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST = "(Tick Resisted)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT = "%1$s %2$s does not affect %4$s. %4$s resisted.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s does not affect %4$s. %4$s resisted.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_RESURRECT = "resurrected",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT = "%1$s %2$s resurrects %4$s.%6$s",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT_NO_SOURCE = "%2$s resurrects %4$s.%6$s",
|
||||
ACTION_SPELL_RESURRECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN = "stole",
|
||||
ACTION_SPELL_STOLEN_BUFF = "stole",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT = "%1$s %2$s steals %4$s %5$s.",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT_NO_SOURCE = "%2$s steals %4$s %5$s.",
|
||||
ACTION_SPELL_STOLEN_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_BUFF__POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_DEBUFF = "stole",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT = "%1$s %2$s transfers %4$s $extraSpell to %1$s.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s transfers %4$s $extraSpell.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT = "%1$s %2$s steals %4$s %5$s.",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT_NO_SOURCE = "%2$s steals %4$s %5$s.",
|
||||
ACTION_SPELL_STOLEN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_SUMMON = "summoned",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT = "%1$s %2$s summons %4$s.%6$s",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT_NO_SOURCE = "%2$s summons %4$s.%6$s",
|
||||
ACTION_SPELL_SUMMON_POSSESSIVE = "1",
|
||||
ACTION_SWING = "Melee",
|
||||
ACTION_SWING_DAMAGE = "hit",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT = "%1$s melee swing hits %4$s for %5$s.%6$s",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT_NO_SOURCE = "A melee swing hit %4$s for %5$s.%6$s",
|
||||
ACTION_SWING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED = "missed",
|
||||
ACTION_SWING_MISSED_ABSORB = "(Absorbed)",
|
||||
ACTION_SWING_MISSED_ABSORB_FULL_TEXT = "%1$s attack was absorbed by %4$s.%6$s",
|
||||
ACTION_SWING_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_BLOCK = "(Blocked)",
|
||||
ACTION_SWING_MISSED_BLOCK_FULL_TEXT = "%1$s attack was blocked by %4$s.%6$s",
|
||||
ACTION_SWING_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DEFLECT = "(Deflected)",
|
||||
ACTION_SWING_MISSED_DEFLECT_FULL_TEXT = "%1$s attack was deflected by %4$s.",
|
||||
ACTION_SWING_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DODGE = "(Dodged)",
|
||||
ACTION_SWING_MISSED_DODGE_FULL_TEXT = "%1$s attack was dodged by %4$s.",
|
||||
ACTION_SWING_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_EVADE = "(Evaded)",
|
||||
ACTION_SWING_MISSED_EVADE_FULL_TEXT = "%1$s attack was evaded by %4$s.",
|
||||
ACTION_SWING_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_FULL_TEXT = "%1$s attack misses %4$s.",
|
||||
ACTION_SWING_MISSED_IMMUNE = "(Immune)",
|
||||
ACTION_SWING_MISSED_IMMUNE_FULL_TEXT = "%1$s attack failed. %4$s was immune.",
|
||||
ACTION_SWING_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISFIRE = "(Misfired)",
|
||||
ACTION_SWING_MISSED_MISFIRE_FULL_TEXT = "%1$s attack misfired on %4$s.",
|
||||
ACTION_SWING_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISS = "(Missed)",
|
||||
ACTION_SWING_MISSED_MISS_FULL_TEXT = "%1$s attack misses %4$s.",
|
||||
ACTION_SWING_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_PARRY = "(Parried)",
|
||||
ACTION_SWING_MISSED_PARRY_FULL_TEXT = "%1$s attack was parried by %4$s.",
|
||||
ACTION_SWING_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_RESIST = "(Resisted)",
|
||||
ACTION_SWING_MISSED_RESIST_FULL_TEXT = "%1$s attack was fully resisted by %4$s.%6$s",
|
||||
ACTION_SWING_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_UNIT_BECCOMES_UNCONSCIOUS = "collapses",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_FULL_TEXT = "%4$s collapses.",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DESTROYED = "destroyed",
|
||||
ACTION_UNIT_DESTROYED_FULL_TEXT = "%4$s was destroyed.",
|
||||
ACTION_UNIT_DESTROYED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DIED = "died",
|
||||
ACTION_UNIT_DIED_FULL_TEXT = "%4$s died.",
|
||||
ACTION_UNIT_DIED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DISSIPATES = "dissipates",
|
||||
ACTION_UNIT_DISSIPATES_FULL_TEXT = "%4$s dissipates.",
|
||||
ACTION_UNIT_DISSIPATES_POSSESSIVE = "0",
|
||||
ADD = "Add",
|
||||
ADDITIONAL_FILTERS = "Additional Filters",
|
||||
ADD_FILTER = "Add Filter",
|
||||
AURAS = "Auras",
|
||||
AURAS_COMBATLOG_TOOLTIP = "Shows message about beneficial and harmful state effects.",
|
||||
BENEFICIAL = "Beneficial",
|
||||
BENEFICIAL_AURA_COMBATLOG_TOOLTIP = "Show when you gain or lose a beneficial aura.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_BOTH = "Show everything involving %s?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_EVERYTHING = "Show everything",
|
||||
BLIZZARD_COMBAT_LOG_MENU_INCOMING = "What happened to %s?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING = "What did %s do?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING_ME = "What did %s do to you?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_RESET = "Reset",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SAVE = "Save as a new filter",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE = "Hide messages like this one.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK = "Link %s to chat.",
|
||||
BY_SOURCE = "By Source",
|
||||
BY_SOURCE_COMBATLOG_TOOLTIP = "Line color based on caster.",
|
||||
BY_TARGET = "By Target",
|
||||
BY_TARGET_COMBATLOG_TOOLTIP = "Line color based on target.",
|
||||
COLORIZE = "Colorize:",
|
||||
COLORS = "Colors",
|
||||
COLOR_BY_SCHOOL = "Color-by-School",
|
||||
COMBATLOG_DEFAULTS = "Combat Log Defaults",
|
||||
COMBATLOG_FILTER_STRING_CUSTOM_UNIT = "Custom Unit",
|
||||
COMBATLOG_FILTER_STRING_FRIENDLY_UNITS = "Friends",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_PLAYERS = "Enemy Players",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_UNITS = "Enemy Units",
|
||||
COMBATLOG_FILTER_STRING_ME = "Me",
|
||||
COMBATLOG_FILTER_STRING_MY_PET = "Pet",
|
||||
COMBATLOG_FILTER_STRING_NEUTRAL_UNITS = "Neutral",
|
||||
COMBATLOG_FILTER_STRING_UNKNOWN_UNITS = "Unknown",
|
||||
COMBATLOG_HIGHLIGHT_ABILITY = "Ability",
|
||||
COMBATLOG_HIGHLIGHT_DAMAGE = "Damage",
|
||||
COMBATLOG_HIGHLIGHT_KILL = "Kill",
|
||||
COMBATLOG_HIGHLIGHT_SCHOOL = "School",
|
||||
COMBATLOG_UNKNOWN_UNIT = "Something",
|
||||
COMBAT_FACTION_CHANGE = "Reputation",
|
||||
COMBAT_HONOR_GAIN = "Honor",
|
||||
COMBAT_LOG_UNIT_YOU_ENABLED = "1",
|
||||
COMBAT_MISC_INFO = "Misc Info",
|
||||
COMBAT_XP_GAIN = "Experience",
|
||||
CONFIRM_COMBAT_FILTER_DEFAULTS = "Do you really want to reset your filters to their default values?",
|
||||
CONFIRM_COMBAT_FILTER_DELETE = "Do you really want to delete this filter?",
|
||||
COPY_FILTER = "Copy Filter",
|
||||
DAMAGE_NUMBER = "Damage Number",
|
||||
DAMAGE_SCHOOL_TEXT = "Damage School",
|
||||
DAMAGE_SHIELD = "Damage Shields",
|
||||
DAMAGE_SHIELD_COMBATLOG_TOOLTIP = "Show messages when a spell or ability deals damage in reaction to a melee swing, such as Thorns.",
|
||||
DEATHS_COMBATLOG_TOOLTIP = "Show messages when something dies.",
|
||||
DEFAULT_COMBATLOG_FILTER_NAME = "Filter %d",
|
||||
DISPELS = "Dispels",
|
||||
DISPEL_AURA_COMBATLOG_TOOLTIP = "Show when an aura is removed, broken, or stolen.",
|
||||
DONE_BY = "Done By:",
|
||||
DONE_TO = "Done To:",
|
||||
DRAINS = "Drains",
|
||||
ENTER_FILTER_NAME = "Enter filter name:",
|
||||
ENTIRE_LINE = "Entire Line",
|
||||
ENTIRE_LINE_COMBATLOG_TOOLTIP = "Color the entire line based on the selection below.",
|
||||
ENVIRONMENTAL_DAMAGE = "Environmental Damage",
|
||||
ENVIRONMENTAL_DAMAGE_COMBATLOG_TOOLTIP = "Show messages when someone takes damage from falling, drowning or swimming in lava.",
|
||||
EXAMPLE_SPELL_FIREBALL = "Fireball",
|
||||
EXAMPLE_SPELL_FROSTBOLT = "Frostbolt",
|
||||
EXAMPLE_TARGET_MONSTER = "Monster",
|
||||
EXAMPLE_TEXT = "Example Text:",
|
||||
EXTRA_ATTACKS = "Extra Attacks",
|
||||
FAILURES = "Failures",
|
||||
FILTER_BY_ENEMIES_COMBATLOG_TOOLTIP = "Actions performed by hostile creatures and pets.",
|
||||
FILTER_BY_FRIENDS_COMBATLOG_TOOLTIP = "Actions performed by friendly players, pets, and creatures.",
|
||||
FILTER_BY_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Actions performed by hostile players.",
|
||||
FILTER_BY_ME_COMBATLOG_TOOLTIP = "Actions performed by you, your traps, and your spells.",
|
||||
FILTER_BY_NEUTRAL_COMBATLOG_TOOLTIP = "Actions performed by neutral creatures.",
|
||||
FILTER_BY_PET_COMBATLOG_TOOLTIP = "Actions performed by your pets, summoned guardians, and charmed players.",
|
||||
FILTER_BY_UNKNOWN_COMBATLOG_TOOLTIP = "Actions performed by undefined sources such as falling, acid, or lava.",
|
||||
FILTER_NAME = "Filter Name",
|
||||
FILTER_TO_FRIENDS_COMBATLOG_TOOLTIP = "Actions performed on friendly players, pets, and creatures.",
|
||||
FILTER_TO_HOSTILE_COMBATLOG_TOOLTIP = "Actions performed on hostile pets and creatures.",
|
||||
FILTER_TO_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Actions performed on hostile players.",
|
||||
FILTER_TO_ME_COMBATLOG_TOOLTIP = "Actions performed on you.",
|
||||
FILTER_TO_NEUTRAL_COMBATLOG_TOOLTIP = "Actions performed on neutral creatures.",
|
||||
FILTER_TO_PET_COMBATLOG_TOOLTIP = "Actions performed on your pets, summoned guardians, and charmed players.",
|
||||
FILTER_TO_UNKNOWN_COMBATLOG_TOOLTIP = "Actions performed on invisible targets.",
|
||||
FORMATTING = "Formatting",
|
||||
FULL_TEXT_COMBATLOG_TOOLTIP = "Show combat log entries as full sentences.",
|
||||
HARMFUL_AURA_COMBATLOG_TOOLTIP = "Show when you gain or lose a harmful aura.",
|
||||
HEALS = "Heals",
|
||||
HIGHLIGHTING = "Highlighting:",
|
||||
HIGHLIGHT_ABILITY_COMBATLOG_TOOLTIP = "Highlight ability names in combat messages.",
|
||||
HIGHLIGHT_DAMAGE_COMBATLOG_TOOLTIP = "Highlight damage numbers in combat messages.",
|
||||
HIGHLIGHT_KILL_COMBATLOG_TOOLTIP = "Highlights the entire line when you or a party member makes a kill.",
|
||||
HIGHLIGHT_SCHOOL_COMBATLOG_TOOLTIP = "Highlight the school of a spell in combat messages.",
|
||||
HOSTILE = "Hostile",
|
||||
INTERRUPTS = "Interrupts",
|
||||
ITEM_NAMES = "Item Names",
|
||||
ITEM_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Show braces around item names.",
|
||||
KILLS_COMBATLOG_TOOLTIP = "Show messages when a member of your party kills something.",
|
||||
MELEE = "Melee",
|
||||
MELEE_COMBATLOG_TOOLTIP = "Shows natural melee swings.",
|
||||
MESSAGE_SOURCES = "Message Sources",
|
||||
MISSES = "Misses",
|
||||
MOVE_FILTER_DOWN = "Move Filter Down",
|
||||
MOVE_FILTER_UP = "Move Filter Up",
|
||||
OTHER = "Other",
|
||||
PERIODIC = "Periodic",
|
||||
POWER_GAINS = "Power Gains",
|
||||
POWER_GAINS_COMBATLOG_TOOLTIP = "Show messages when a spell or ability restores mana, energy, rage, focus, chi, holy power, or shadow orbs.",
|
||||
QUICKBUTTON_NAME_EVERYTHING = "Everything",
|
||||
QUICKBUTTON_NAME_EVERYTHING_TOOLTIP = "Show all combat messages.",
|
||||
QUICKBUTTON_NAME_KILLS = "Kills",
|
||||
QUICKBUTTON_NAME_KILLS_TOOLTIP = "Show all deaths and kills.",
|
||||
QUICKBUTTON_NAME_ME = "What happened to me?",
|
||||
QUICKBUTTON_NAME_ME_TOOLTIP = "Show everything done to me.",
|
||||
QUICKBUTTON_NAME_SELF = "Self",
|
||||
QUICKBUTTON_NAME_SELF_TOOLTIP = "Show messages of actions done by you and done to you.",
|
||||
QUICK_BUTTON_COMBATLOG_TOOLTIP = "Places a shortcut to this filter on the chat window.",
|
||||
RANGED = "Ranged",
|
||||
RANGED_COMBATLOG_TOOLTIP = "Shows attacks from bows, guns, thrown weapons, and wands.",
|
||||
RANGE_DAMAGE_COMBATLOG_TOOLTIP = "Show ranged shots that deal full or partial damage.",
|
||||
RANGE_MISSED_COMBATLOG_TOOLTIP = "Show ranged shots that fail to deal damage.",
|
||||
RESURRECT = "Resurrections",
|
||||
SETTINGS = "Settings",
|
||||
SHOW_BRACES = "Show Braces",
|
||||
SHOW_BRACES_COMBATLOG_TOOLTIP = "Display braces around hyperlinks in combat log messages.",
|
||||
SHOW_QUICK_BUTTON = "Show Quick Button",
|
||||
SHOW_TIMESTAMP = "Show Timestamp",
|
||||
SOURCE = "Source:",
|
||||
SPECIAL = "Special",
|
||||
SPELLS_COMBATLOG_TOOLTIP = "Shows messages about spells and special abilities.",
|
||||
SPELL_CASTING = "Spell Casting",
|
||||
SPELL_CASTING_COMBATLOG_TOOLTIP = "Show messages about spell casting.",
|
||||
SPELL_CAST_FAILED_COMBATLOG_TOOLTIP = "Show messages when a spell cannot be cast or fails to cast.",
|
||||
SPELL_CAST_START_COMBATLOG_TOOLTIP = "Show messages when a spell begins casting.",
|
||||
SPELL_CAST_SUCCESS_COMBATLOG_TOOLTIP = "Show messages when a spell successfully completes.",
|
||||
SPELL_COLOR_BY_SCHOOL_COMBATLOG_TOOLTIP = "Color spell names by school.",
|
||||
SPELL_DAMAGE_COMBATLOG_TOOLTIP = "Show messages when a spell or ability deals damage.",
|
||||
SPELL_DAMAGE_NUMBER_COMBATLOG_TOOLTIP = "Colorizes the damage number on non-melee swings.",
|
||||
SPELL_DAMAGE_SCHOOL_COMBATLOG_TOOLTIP = "Color the damage school name. (e.g. shadow)",
|
||||
SPELL_DRAIN_COMBATLOG_TOOLTIP = "Show messages when a spell or ability reduces mana, energy, rage, or focus.",
|
||||
SPELL_EXTRA_ATTACKS_COMBATLOG_TOOLTIP = "Show messages when a spell or ability grants additional attacks.",
|
||||
SPELL_HEAL_COMBATLOG_TOOLTIP = "Show messages when a spell or ability heals damage.",
|
||||
SPELL_INSTAKILL_COMBATLOG_TOOLTIP = "Show messages about special spell types, such as those that inflict durability loss or share damage with a pet.",
|
||||
SPELL_INTERRUPT_COMBATLOG_TOOLTIP = "Show messages when a spell or ability interrupts another spell.",
|
||||
SPELL_MISSED_COMBATLOG_TOOLTIP = "Show messages when a spell or ability fails to deal damage. This includes dodges, parries, blocks, deflections, immunes, absorbs and evades.",
|
||||
SPELL_NAMES = "Spell Names",
|
||||
SPELL_NAMES_COMBATLOG_TOOLTIP = "Color spell names.",
|
||||
SPELL_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Show braces around spell names.",
|
||||
SPELL_PERIODIC_COMBATLOG_TOOLTIP = "Show spells that perform an effect incrementally.",
|
||||
SPELL_PERIODIC_DAMAGE_COMBATLOG_TOOLTIP = "Show messages when a spell or ability periodically deals damage, such as Shadow Word: Pain or Corruption.",
|
||||
SPELL_PERIODIC_HEAL_COMBATLOG_TOOLTIP = "Show messages when a spell or ability periodically heals damage, such as Renew or Rejuvenation.",
|
||||
SPELL_PERIODIC_MISSED_COMBATLOG_TOOLTIP = "Show messages when a spell or ability fails to periodically deal damage. This includes immunes, absorbs and evades.",
|
||||
SPELL_PERIODIC_OTHER_COMBATLOG_TOOLTIP = "Show messages when a spell or ability periodically performs any other effect, such as restoring or draining mana.",
|
||||
SPELL_RESURRECT_COMBATLOG_TOOLTIP = "Show messages when a spell or ability resurrects another player or creature.",
|
||||
SPELL_SUMMON_COMBATLOG_TOOLTIP = "Show messages when a spell or ability summons a creature or creates an object.",
|
||||
START = "Start",
|
||||
STRING_SCHOOL_UNKNOWN = "Unknown",
|
||||
SUCCESS = "Success",
|
||||
SUMMONS = "Summons",
|
||||
SWING_DAMAGE_COMBATLOG_TOOLTIP = "Shows melee swings that deal full or partial damage.",
|
||||
SWING_MISSED_COMBATLOG_TOOLTIP = "Show melee swings that do not deal damage.",
|
||||
TEXT_MODE_A = "A",
|
||||
TEXT_MODE_A_STRING_1 = "%s %s %s %s %s. %s %11$s",
|
||||
TEXT_MODE_A_STRING_2 = "%1$s %3$s %2$s %4$s %5$s. %6$s",
|
||||
TEXT_MODE_A_STRING_3 = "%1$s %5$s %3$s %4$s %2$s. %6$s",
|
||||
TEXT_MODE_A_STRING_ACTION = "|Haction:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_BRACE_ITEM = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_SPELL = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_UNIT = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_DEST_ICON = "|Hicon:%d:dest|h%s|h",
|
||||
TEXT_MODE_A_STRING_DEST_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_ITEM = "|Hitem:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_POSSESSIVE = "%s's",
|
||||
TEXT_MODE_A_STRING_REMAINING_POINTS = "(%s Remaining)",
|
||||
TEXT_MODE_A_STRING_RESULT_ABSORB = "(%s Absorbed)",
|
||||
TEXT_MODE_A_STRING_RESULT_BLOCK = "(%s Blocked)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL = "(Critical)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL_SPELL = "(Critical)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRUSHING = "(Crushing)",
|
||||
TEXT_MODE_A_STRING_RESULT_FORMAT = "$resultAmount $resultType",
|
||||
TEXT_MODE_A_STRING_RESULT_GLANCING = "(Glancing)",
|
||||
TEXT_MODE_A_STRING_RESULT_MULTISTRIKE = "(Multistrike)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERENERGIZE = "(%s Overenergized)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERHEALING = "(%s Overhealed)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERKILLING = "(%s Overkill)",
|
||||
TEXT_MODE_A_STRING_RESULT_PARRY = "(%d Parried)",
|
||||
TEXT_MODE_A_STRING_RESULT_REFLECT = "Reflected",
|
||||
TEXT_MODE_A_STRING_RESULT_RESIST = "(%s Resisted)",
|
||||
TEXT_MODE_A_STRING_RESULT_VULNERABILITY = "(%s Vulnerability Damage)",
|
||||
TEXT_MODE_A_STRING_SOURCE_ICON = "|Hicon:%s:source|h%s|h",
|
||||
TEXT_MODE_A_STRING_SOURCE_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL_EXTRA = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_TIMESTAMP = "%s> %s",
|
||||
TEXT_MODE_A_STRING_VALUE_SCHOOL = "%s %s",
|
||||
TEXT_MODE_A_STRING_VALUE_TYPE = "%s (%s)",
|
||||
TEXT_MODE_A_TIMESTAMP = "%H:%M:%S",
|
||||
TIMESTAMP_COMBATLOG_TOOLTIP = "Display the timestamp for combat log messages.",
|
||||
UNIT_COLORS = "Unit Colors:",
|
||||
UNIT_NAMES = "Unit Names",
|
||||
UNIT_NAMES_COMBATLOG_TOOLTIP = "Color unit names.",
|
||||
UNIT_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Show braces around unit names.",
|
||||
UNIT_YOU = "You",
|
||||
UNIT_YOU_DEST = "You",
|
||||
UNIT_YOU_DEST_POSSESSIVE = "Your",
|
||||
UNIT_YOU_SOURCE = "You",
|
||||
UNIT_YOU_SOURCE_POSSESSIVE = "Your",
|
||||
USE_FULL_TEXT_MODE = "Use Verbose Mode",
|
||||
}
|
||||
Vendored
+677
@@ -0,0 +1,677 @@
|
||||
-- Classic Era GlobalStrings (ES) that the combat log reads
|
||||
-- and the 1.12 client lacks. Generated; do not edit by hand.
|
||||
pfUI_locale["esES"]["combatlog"] = {
|
||||
ACTION_DAMAGE_SHIELD = "daña",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT = "%2$s de %1$s refleja %9$s daño %7$s a %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT_NO_SOURCE = "%2$s refleja %9$s daño %7$s a %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED = "fallado",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK = "(Bloqueado)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT = "%4$s bloqueó %2$s de %1$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s bloqueó %2$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT = "(Desviado)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT = "%4$s desvió %2$s de %1$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%4$s desvió %2$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE = "(Esquivado)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT = "%4$s esquivó %2$s de %1$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s esquivó %2$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED = "(Evadido)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT = "%4$s evadió %2$s de %1$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%4$s evadió %2$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT = "%2$s de %1$s no alcanzó a %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT_NO_SOURCE = "%2$s no alcanzó a %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE = "(Inmune)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT = "%2$s de %1$s falló. %4$s era inmune.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s falló. %4$s era inmune.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS = "(Fallado)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT = "%2$s de %1$s no alcanza a %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s no alcanza a %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY = "(Parado)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT = "%4$s paró %2$s de %1$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s paró %2$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST = "(Resistido)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT = "%4$s resistió por completo %2$s de %1$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s resistió por completo %2$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SPLIT = "daño transferido",
|
||||
ACTION_DAMAGE_SPLIT_ABSORBED_FULL_TEXT = "%4$s absorbió el daño de %2$s de %1$s. %6$s.",
|
||||
ACTION_DAMAGE_SPLIT_FULL_TEXT = "%2$s de %1$s inflige %9$s de daño a %4$s.",
|
||||
ACTION_DAMAGE_SPLIT_POSSESSIVE = "0",
|
||||
ACTION_DAMAGE_SPLIT_RESULT_FULL_TEXT = "%2$s de %1$s inflige %9$s de daño a %4$s. %6$s.",
|
||||
ACTION_ENCHANT_APPLIED = "aplicado a",
|
||||
ACTION_ENCHANT_APPLIED_FULL_TEXT = "%1$s lanza %2$s a %5$s de %4$s.",
|
||||
ACTION_ENCHANT_APPLIED_POSSESSIVE = "0",
|
||||
ACTION_ENCHANT_REMOVED = "eliminado de",
|
||||
ACTION_ENCHANT_REMOVED_FULL_TEXT = "%2$s se desvanece de %5$s de %4$s.",
|
||||
ACTION_ENCHANT_REMOVED_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE = "dañó",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING = "Ahogamiento",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_FULL_TEXT = "%4$s se está ahogando y pierde %9$s salud.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING = "Caída",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_FULL_TEXT = "%4$s cae y pierde %9$s salud.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE = "Fatiga",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_FULL_TEXT = "%4$s sufre agotamiento y pierde %9$s salud.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE = "Fuego",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_FULL_TEXT = "%4$s sufre %9$s daño de Fuego.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FULL_TEXT = "%4$s pierde %9$s salud por daño recibido del entorno.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA = "Lava",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_FULL_TEXT = "%4$s pierde %9$s salud por nadar en lava. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME = "Cieno",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_FULL_TEXT = "%4$s pierde %9$s salud por nadar en el cieno. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL = "mató",
|
||||
ACTION_PARTY_KILL_FULL_TEXT = "¡%1$s mató a %4$s!",
|
||||
ACTION_PARTY_KILL_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS = "está fuera de combate",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_FULL_TEXT = "¡%1$s ha dejado fuera de combate a %4$s!",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_RANGED = "disparo",
|
||||
ACTION_RANGE_DAMAGE = "alcanzó",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT = "%1$s da a %4$s un golpe a distancia y le inflige %5$s.%6$s",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT_NO_SOURCE = "Un golpe a distancia alcanza a %4$s y le inflige %5$s.%6$s",
|
||||
ACTION_RANGE_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED = "falló",
|
||||
ACTION_RANGE_MISSED_ABSORB = "(Absorbido)",
|
||||
ACTION_RANGE_MISSED_ABSORB_FULL_TEXT = "%4$s absorbió el golpe de %1$s.%6$s",
|
||||
ACTION_RANGE_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_BLOCK = "(Bloqueado)",
|
||||
ACTION_RANGE_MISSED_BLOCK_FULL_TEXT = "%4$s bloqueó el golpe de %1$s.%6$s",
|
||||
ACTION_RANGE_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DEFLECT = "(Desviado)",
|
||||
ACTION_RANGE_MISSED_DEFLECT_FULL_TEXT = "%4$s desvió el golpe de %1$s.",
|
||||
ACTION_RANGE_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DODGE = "(Esquivado)",
|
||||
ACTION_RANGE_MISSED_DODGE_FULL_TEXT = "%4$s esquivó el golpe de %1$s.",
|
||||
ACTION_RANGE_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_EVADE = "(Evadido)",
|
||||
ACTION_RANGE_MISSED_EVADE_FULL_TEXT = "%4$s evadió el golpe de %1$s.",
|
||||
ACTION_RANGE_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_FULL_TEXT = "El golpe de %1$s no alcanza a %4$s.",
|
||||
ACTION_RANGE_MISSED_IMMUNE = "(Inmune)",
|
||||
ACTION_RANGE_MISSED_IMMUNE_FULL_TEXT = "El golpe de %1$s falló. %4$s era inmune.",
|
||||
ACTION_RANGE_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISFIRE = "(Lanzamiento fallado)",
|
||||
ACTION_RANGE_MISSED_MISFIRE_FULL_TEXT = "El golpe de %1$s ha fallado al lanzarse hacia %4$s.",
|
||||
ACTION_RANGE_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISS = "(Fallado)",
|
||||
ACTION_RANGE_MISSED_MISS_FULL_TEXT = "El golpe de %1$s no alcanza a %4$s.",
|
||||
ACTION_RANGE_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_PARRY = "(Parado)",
|
||||
ACTION_RANGE_MISSED_PARRY_FULL_TEXT = "%4$s paró el golpe de %1$s.",
|
||||
ACTION_RANGE_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_RESIST = "(Resistido)",
|
||||
ACTION_RANGE_MISSED_RESIST_FULL_TEXT = "%4$s resistió por completo el golpe de %1$s.%6$s",
|
||||
ACTION_RANGE_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED = "aplicó",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF = "aplicó",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT = "%4$s gana %2$s de %1$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT_NO_SOURCE = "%4$s gana %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT = "%4$s gana %1$s de %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s gana %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF = "afectó",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT = "A %4$s le afecta %2$s de %1$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT_NO_SOURCE = "A %4$s le afecta %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT = "A %4$s le afecta %1$s de %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "A %4$s le afecta %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE = "acumuló",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF = "acumuló",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT = "%4$s gana %2$s de %1$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%4$s gana %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF = "afectó",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT = "A %4$s le afecta %2$s de %1$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "A %4$s le afecta %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN = "rompió",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF = "rompió",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT = "%1$s rompió %2$s de %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT_NO_SOURCE = "Alguien ha roto %2$s de %1$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF = "rompió",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT = "%1$s rompió %2$s de %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT_NO_SOURCE = "Alguien ha roto %2$s de %1$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF = "rompió",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT = "%1$s %5$s rompió %4$s %2$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s rompió %2$s de %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF = "rompió",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT = "%1$s %5$s rompió %4$s %2$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s rompió %2$s de %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH = "restableció",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF = "restableció",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT = "%2$s de %1$s restablecido en %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT_NO_SOURCE = "%2$s se restablece en %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s restablecido en %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s se restablece en %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF = "restableció",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT = "%2$s de %1$s restablecido en %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s se restablece en %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s restablecido en %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s se restablece en %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REMOVED = "eliminó",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF = "perdió",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT = "%2$s de %1$s se desvanece de %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT_NO_SOURCE = "%2$s se desvanece de %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s se desvanece de %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s se desvanece de %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF = "disipó",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT = "%2$s de %1$s se disipa de %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s se disipa de %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s se disipa de %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s se disipa de %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE = "redujo",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF = "redujo",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT = "%2$s de %1$s (%9$s) disminuye.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%2$s (%9$s) disminuye.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF = "disminuyó",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT = "%2$s de %1$s (%9$s) decrece.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s (%9$s) decrece.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT = "%2$s de %1$s se eliminó de %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT_NO_SOURCE = "%2$s de %1$s se eliminó de %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE = "golpea",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT = "%1$s %2$s golpea a %4$s por %5$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s golpea a %4$s por %5$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_HEAL = "reparado",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT = "%1$s %2$s repairs %4$s durante %9$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT_NO_SOURCE = "%2$s repara %4$s durante %9$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_FAILED = "falló",
|
||||
ACTION_SPELL_CAST_FAILED_FULL_TEXT = "%2$s de %1$s falló.%6$s",
|
||||
ACTION_SPELL_CAST_FAILED_MASTER = "1",
|
||||
ACTION_SPELL_CAST_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_START = "comenzó a lanzar",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT = "%1$s comienza a lanzar %2$s a %4$s.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_DEST = "%1$s comienza a lanzar %2$s.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_SOURCE = "Algo comienza a lanzar %2$s a %4$s.",
|
||||
ACTION_SPELL_CAST_START_MASTER = "2",
|
||||
ACTION_SPELL_CAST_START_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CAST_SUCCESS = "lanzó",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT = "%1$s lanza %2$s a %4$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_DEST = "%1$s lanza %2$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_SOURCE = "Algo lanza %2$s a %4$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_MASTER = "2",
|
||||
ACTION_SPELL_CAST_SUCCESS_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CREATE = "creó",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT = "%2$s de %1$s crea %4$s.%6$s",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT_NO_SOURCE = "%2$s crea %4$s.%6$s",
|
||||
ACTION_SPELL_CREATE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DAMAGE = "alcanzó",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT = "%2$s de %1$s golpea a %4$s y le inflige %5$s.%6$s",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s golpea a %4$s y le inflige %5$s.%6$s",
|
||||
ACTION_SPELL_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL = "disipó",
|
||||
ACTION_SPELL_DISPEL_BUFF = "disipó",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT = "%2$s de %1$s disipa %4$s de %5$s.",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT_NO_SOURCE = "%2$s disipa %4$s de %5$s.",
|
||||
ACTION_SPELL_DISPEL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_DEBUFF = "limpió",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT = "%2$s de %1$s limpia %5$s de %4$s.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s limpia %5$s de %4$s.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_FAILED = "error al disipar",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT = "%2$s de %1$s no logra disipar %4$s de %5$s.",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT_NO_SOURCE = "%2$s no logró disipar %4$s %5$s.",
|
||||
ACTION_SPELL_DISPEL_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DRAIN = "drenó",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT = "%2$s de %1$s drena %9$s %8$s de %4$s.",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s drena %9$s p. de %8$s de %4$s.",
|
||||
ACTION_SPELL_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE = "pérdida de durabilidad",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL = "pérdida total de durabilidad",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_FULL_TEXT = "%2$s de %1$s daña %4$s: todos los objetos dañados.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_FULL_TEXT = "%2$s de %1$s daña %4$s: %5$s dañado.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE = "energizó",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT = "%4$s gana %9$s de %8$s gracias a %2$s de %1$s.",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s gana %9$s de %8$s gracias a %2$s.",
|
||||
ACTION_SPELL_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE_RESULT = "%9$s %8$s ganado",
|
||||
ACTION_SPELL_EXTRA_ATTACKS = "otorgó ataques extra",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT = "%1$s gana %9$s ataques extra con %2$s.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT_NO_SOURCE = "%2$s otorga %9$s ataques extra.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_HEAL = "sanó",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT = "%2$s de %1$s sana %9$s a %4$s.%6$s",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT_NO_SOURCE = "%2$s sana %9$s a %4$s.%6$s",
|
||||
ACTION_SPELL_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL = "mató",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT = "%2$s de %1$s mata al instante a %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT_NO_SOURCE = "%2$s mata a %4$s al instante.",
|
||||
ACTION_SPELL_INSTAKILL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS = "está fuera de combate",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT = "%1$s %2$s deja fuera de combate a %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT_NO_SOURCE = "%2$s deja fuera de combate a %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INTERRUPT = "interrumpió",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT = "%2$s de %1$s interrumpe %5$s de %4$s.",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT_NO_SOURCE = "%2$s interrumpe %5$s de %4$s.",
|
||||
ACTION_SPELL_INTERRUPT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH = "drenó",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT = "%1$s %2$s drena %9$s %8$s de %4$s. %1$s gana %10$s %8$s.",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT_NO_SOURCE = "%2$s drena %9$s %8$s de %4$s.",
|
||||
ACTION_SPELL_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH_RESULT = "%10$s %8$s ganado",
|
||||
ACTION_SPELL_MISSED = "fallado",
|
||||
ACTION_SPELL_MISSED_ABSORB = "Absorbido",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT = "%4$s absorbió %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%4$s absorbió %2$s.%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_BLOCK = "Bloqueado",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT = "%4$s bloqueó %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s bloqueó %2$s.%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DEFLECT = "Desviado",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT = "%4$s desvió %2$s de %1$s.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%4$s desvió %2$s.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DODGE = "Esquivado",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT = "%4$s esquivó %2$s de %1$s.",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s esquivó %2$s.",
|
||||
ACTION_SPELL_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_EVADE = "Evadido",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT = "%4$s evadió %2$s de %1$s.",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT_NO_SOURCE = "%4$s evadió %2$s.",
|
||||
ACTION_SPELL_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT = "%2$s de %1$s no alcanzó a %4$s.",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT_NO_SOURCE = "%2$s no alcanzó a %4$s.",
|
||||
ACTION_SPELL_MISSED_IMMUNE = "Inmune",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT = "%2$s de %1$s falló. %4$s era inmune.",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s falló. %4$s era inmune.",
|
||||
ACTION_SPELL_MISSED_MISFIRE = "Lanzamiento fallado",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT = "%2$s de %1$s ha fallado al lanzarse hacia %4$s.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT_NO_SOURCE = "%2$s ha fallado al lanzarse hacia %4$s.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_MISS = "Fallado",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT = "%2$s de %1$s no alcanza a %4$s.",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s no alcanza a %4$s.",
|
||||
ACTION_SPELL_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_PARRY = "Parado",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT = "%4$s paró %2$s de %1$s.",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s paró %2$s.",
|
||||
ACTION_SPELL_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_REFLECT = "reflejado",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT = "%4$s reflejó %2$s de %1$s.",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT_NO_SOURCE = "%4$s reflejó %2$s.",
|
||||
ACTION_SPELL_MISSED_RESIST = "resistido",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT = "%4$s resistió por completo %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s resistió por completo %2$s.%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE = "dañó",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT = "%4$s sufre %5$s daño de %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT_NO_SOURCE = "%4$s sufre %5$s daño de %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DRAIN = "drenó",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT = "%2$s de %1$s drena %9$s %8$s de %4$s.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s drena %9$s %8$s de %4$s.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE = "energizó",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT = "%4$s gana %9$s de %8$s gracias a %2$s de %1$s.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s gana %9$s de %8$s gracias a %2$s.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_RESULT = "$extraAmount %8$s ganado",
|
||||
ACTION_SPELL_PERIODIC_HEAL = "sanó",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT = "%4$s gana %9$s salud gracias a %1$s %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT_NO_SOURCE = "%4$s gana %9$s salud gracias a %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH = "drenó",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT = "%1$s %2$s drena %9$s %8$s de %4$s. %1$s gana %10$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT_NO_SOURCE = "%2$s drena %9$s %8$s de %4$s. %1$s gana %10$s %8$s.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH_RESULT = "(%10$s %8$s ganado)",
|
||||
ACTION_SPELL_PERIODIC_MISSED = "falla tic",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB = "(%1$s Absorbido)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT = "%4$s absorbió %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%4$s absorbió %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK = "(Bloqueado)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT = "%4$s bloqueó el efecto periódico de %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s bloqueó el efecto periódico de %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED = "(Desviado)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT = "%4$s desvió el efecto periódico de %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT_NO_SOURCE = "%4$s desvió el efecto periódico de %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE = "(Esquivado)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT = "%4$s esquivó el efecto periódico de %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s esquivó el efecto periódico de %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED = "(Evadido)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT = "%4$s evadió el efecto periódico de %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%4$s evadió el efecto periódico de %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT = "%2$s de %1$s no tiene efecto periódico sobre %4$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT_NO_SOURCE = "%2$s no tiene efecto periódico sobre %4$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE = "(Inmune)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT = "%4$s era inmune a %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%4$s era inmune a %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS = "(Fallado)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT = "El efecto periódico de %2$s de %1$s no alcanzó a %4$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT_NO_SOURCE = "El efecto periódico de %2$s no alcanzó a %4$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY = "(Parado)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT = "%4$s paró el efecto periódico de %2$s de %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s paró el efecto periódico de %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST = "(Resistido)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT = "%2$s de %1$s no afecta a %4$s. %4$s resistió.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s no afecta a %4$s. %4$s resistió.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_RESURRECT = "resucitado",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT = "%1$s %2$s resucita a %4$s.%6$s",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT_NO_SOURCE = "%2$s resucita a %4$s.%6$s",
|
||||
ACTION_SPELL_RESURRECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN = "robó",
|
||||
ACTION_SPELL_STOLEN_BUFF = "robó",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT = "%2$s de %1$s roba %5$s de %4$s.",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT_NO_SOURCE = "%2$s roba %5$s de %4$s.",
|
||||
ACTION_SPELL_STOLEN_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_BUFF__POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_DEBUFF = "robó",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT = "%2$s de %1$s transfiere $extraSpell de %4$s a %1$s.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s transfiere $extraSpell de %4$s.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT = "%2$s de %1$s roba %5$s de %4$s.",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT_NO_SOURCE = "%2$s roba %5$s de %4$s.",
|
||||
ACTION_SPELL_STOLEN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_SUMMON = "invocó",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT = "%2$s de %1$s invoca a %4$s.%6$s",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT_NO_SOURCE = "%2$s invoca a %4$s.%6$s",
|
||||
ACTION_SPELL_SUMMON_POSSESSIVE = "1",
|
||||
ACTION_SWING = "Golpe",
|
||||
ACTION_SWING_DAMAGE = "alcanzó",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT = "%1$s da a %4$s un golpe cuerpo a cuerpo y le inflige %5$s.%6$s",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT_NO_SOURCE = "Un golpe cuerpo a cuerpo alcanza a %4$s y le inflige %5$s.%6$s",
|
||||
ACTION_SWING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED = "falló",
|
||||
ACTION_SWING_MISSED_ABSORB = "(Absorbido)",
|
||||
ACTION_SWING_MISSED_ABSORB_FULL_TEXT = "%4$s absorbió el ataque de %1$s.%6$s",
|
||||
ACTION_SWING_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_BLOCK = "(Bloqueado)",
|
||||
ACTION_SWING_MISSED_BLOCK_FULL_TEXT = "%4$s bloqueó el ataque de %1$s.%6$s",
|
||||
ACTION_SWING_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DEFLECT = "(Desviado)",
|
||||
ACTION_SWING_MISSED_DEFLECT_FULL_TEXT = "%4$s desvió el ataque de %1$s.",
|
||||
ACTION_SWING_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DODGE = "(Esquivado)",
|
||||
ACTION_SWING_MISSED_DODGE_FULL_TEXT = "%4$s esquivó el ataque de %1$s.",
|
||||
ACTION_SWING_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_EVADE = "(Evadido)",
|
||||
ACTION_SWING_MISSED_EVADE_FULL_TEXT = "%4$s evadió el ataque de %1$s.",
|
||||
ACTION_SWING_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_FULL_TEXT = "El ataque de %1$s no alcanza a %4$s.",
|
||||
ACTION_SWING_MISSED_IMMUNE = "(Inmune)",
|
||||
ACTION_SWING_MISSED_IMMUNE_FULL_TEXT = "El ataque de %1$s ha fallado. %4$s era inmune.",
|
||||
ACTION_SWING_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISFIRE = "(Lanzamiento fallado)",
|
||||
ACTION_SWING_MISSED_MISFIRE_FULL_TEXT = "El ataque de %1$s ha fallado al lanzarse hacia %4$s.",
|
||||
ACTION_SWING_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISS = "(Fallado)",
|
||||
ACTION_SWING_MISSED_MISS_FULL_TEXT = "El ataque de %1$s no alcanza a %4$s.",
|
||||
ACTION_SWING_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_PARRY = "(Parado)",
|
||||
ACTION_SWING_MISSED_PARRY_FULL_TEXT = "%4$s paró el ataque de %1$s.",
|
||||
ACTION_SWING_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_RESIST = "(Resistido)",
|
||||
ACTION_SWING_MISSED_RESIST_FULL_TEXT = "%4$s resistió por completo el ataque de %1$s.%6$s",
|
||||
ACTION_SWING_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_UNIT_BECCOMES_UNCONSCIOUS = "se desmaya",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_FULL_TEXT = "%4$s se desmaya.",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DESTROYED = "destruyó",
|
||||
ACTION_UNIT_DESTROYED_FULL_TEXT = "%4$s ha sido destruido.",
|
||||
ACTION_UNIT_DESTROYED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DIED = "murió",
|
||||
ACTION_UNIT_DIED_FULL_TEXT = "%4$s ha muerto.",
|
||||
ACTION_UNIT_DIED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DISSIPATES = "se disipa",
|
||||
ACTION_UNIT_DISSIPATES_FULL_TEXT = "%4$s se disipa.",
|
||||
ACTION_UNIT_DISSIPATES_POSSESSIVE = "0",
|
||||
ADD = "Añadir",
|
||||
ADDITIONAL_FILTERS = "Filtros adicionales",
|
||||
ADD_FILTER = "Añadir",
|
||||
AURAS = "Auras",
|
||||
AURAS_COMBATLOG_TOOLTIP = "Mostrar mensajes sobre efectos de estados beneficiosos y dañinos.",
|
||||
BENEFICIAL = "Beneficioso",
|
||||
BENEFICIAL_AURA_COMBATLOG_TOOLTIP = "Mostrar cuando ganas o pierdes un aura beneficiosa.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_BOTH = "¿Mostrar todo lo referente a %s?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_EVERYTHING = "Mostrar todo",
|
||||
BLIZZARD_COMBAT_LOG_MENU_INCOMING = "¿Qué le pasó a %s?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING = "¿Qué hizo %s?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING_ME = "¿Qué te hizo %s?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_RESET = "Restablecer",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SAVE = "Guardar como nuevo filtro",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE = "Ocultar los mensajes como este.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK = "Vincular %s a chat.",
|
||||
BY_SOURCE = "Por origen",
|
||||
BY_SOURCE_COMBATLOG_TOOLTIP = "Color de línea según taumaturgo.",
|
||||
BY_TARGET = "Por objetivo",
|
||||
BY_TARGET_COMBATLOG_TOOLTIP = "Color de línea según objetivo.",
|
||||
COLORIZE = "Colorear:",
|
||||
COLORS = "Colores",
|
||||
COLOR_BY_SCHOOL = "Colorear según escuela",
|
||||
COMBATLOG_DEFAULTS = "Restablecer reg. combate",
|
||||
COMBATLOG_FILTER_STRING_CUSTOM_UNIT = "Unidad personalizada",
|
||||
COMBATLOG_FILTER_STRING_FRIENDLY_UNITS = "Amigos",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_PLAYERS = "Jugadores enemigos",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_UNITS = "Unidades enemigas",
|
||||
COMBATLOG_FILTER_STRING_ME = "Yo",
|
||||
COMBATLOG_FILTER_STRING_MY_PET = "Mascota",
|
||||
COMBATLOG_FILTER_STRING_NEUTRAL_UNITS = "Neutral",
|
||||
COMBATLOG_FILTER_STRING_UNKNOWN_UNITS = "Desconocido",
|
||||
COMBATLOG_HIGHLIGHT_ABILITY = "Facultad",
|
||||
COMBATLOG_HIGHLIGHT_DAMAGE = "Daño",
|
||||
COMBATLOG_HIGHLIGHT_KILL = "Muerte",
|
||||
COMBATLOG_HIGHLIGHT_SCHOOL = "Escuela",
|
||||
COMBATLOG_UNKNOWN_UNIT = "Algo",
|
||||
COMBAT_FACTION_CHANGE = "Reputación",
|
||||
COMBAT_HONOR_GAIN = "Honor",
|
||||
COMBAT_LOG_UNIT_YOU_ENABLED = "0",
|
||||
COMBAT_MISC_INFO = "Info. misc.",
|
||||
COMBAT_XP_GAIN = "Experiencia",
|
||||
CONFIRM_COMBAT_FILTER_DEFAULTS = "¿De verdad quieres restablecer la configuración inicial?",
|
||||
CONFIRM_COMBAT_FILTER_DELETE = "¿Realmente quieres borrar este filtro?",
|
||||
COPY_FILTER = "Copiar",
|
||||
DAMAGE_NUMBER = "Cifra de daño",
|
||||
DAMAGE_SCHOOL_TEXT = "Escuela de daño",
|
||||
DAMAGE_SHIELD = "Escudos de daño",
|
||||
DAMAGE_SHIELD_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad hace daño en reacción a un golpe cuerpo a cuerpo, como Espinas.",
|
||||
DEATHS_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando haya una muerte.",
|
||||
DEFAULT_COMBATLOG_FILTER_NAME = "Filtro %d",
|
||||
DISPELS = "Disipación",
|
||||
DISPEL_AURA_COMBATLOG_TOOLTIP = "Mostrar cuando se elimina, rompe o roba un aura.",
|
||||
DONE_BY = "Hecho por:",
|
||||
DONE_TO = "Hecho a:",
|
||||
DRAINS = "drena",
|
||||
ENTER_FILTER_NAME = "Escribe el nombre del filtro:",
|
||||
ENTIRE_LINE = "Toda la línea",
|
||||
ENTIRE_LINE_COMBATLOG_TOOLTIP = "Colorear toda la línea según la siguiente opción.",
|
||||
ENVIRONMENTAL_DAMAGE = "Daño del entorno",
|
||||
ENVIRONMENTAL_DAMAGE_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando alguien sufra daño al caer, ahogarse o nadar en lava.",
|
||||
EXAMPLE_SPELL_FIREBALL = "Bola de Fuego",
|
||||
EXAMPLE_SPELL_FROSTBOLT = "Descarga de Escarcha",
|
||||
EXAMPLE_TARGET_MONSTER = "Monstruo",
|
||||
EXAMPLE_TEXT = "Texto de muestra:",
|
||||
EXTRA_ATTACKS = "Ataques extra",
|
||||
FAILURES = "Fallos",
|
||||
FILTER_BY_ENEMIES_COMBATLOG_TOOLTIP = "Acciones llevadas a cabo por criaturas y mascotas hostiles.",
|
||||
FILTER_BY_FRIENDS_COMBATLOG_TOOLTIP = "Acciones llevadas a cabo por jugadores, mascotas y criaturas aliados.",
|
||||
FILTER_BY_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Acciones llevadas a cabo por jugadores hostiles.",
|
||||
FILTER_BY_ME_COMBATLOG_TOOLTIP = "Acciones llevadas a cabo por ti, tus trampas y tus hechizos.",
|
||||
FILTER_BY_NEUTRAL_COMBATLOG_TOOLTIP = "Acciones llevadas a cabo por criaturas neutrales.",
|
||||
FILTER_BY_PET_COMBATLOG_TOOLTIP = "Acciones llevadas a cabo por tus mascotas, guardianes invocados y jugadores embelesados.",
|
||||
FILTER_BY_UNKNOWN_COMBATLOG_TOOLTIP = "Acciones de origen sin especificar como caídas, ácido o lava.",
|
||||
FILTER_NAME = "Nombre del filtro",
|
||||
FILTER_TO_FRIENDS_COMBATLOG_TOOLTIP = "Acciones realizadas a jugadores, mascotas y criaturas aliados.",
|
||||
FILTER_TO_HOSTILE_COMBATLOG_TOOLTIP = "Acciones realizadas a mascotas y criaturas hostiles.",
|
||||
FILTER_TO_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Acciones realizadas a jugadores hostiles.",
|
||||
FILTER_TO_ME_COMBATLOG_TOOLTIP = "Acciones realizadas a ti.",
|
||||
FILTER_TO_NEUTRAL_COMBATLOG_TOOLTIP = "Acciones realizadas a criaturas neutrales.",
|
||||
FILTER_TO_PET_COMBATLOG_TOOLTIP = "Acciones realizadas a tus mascotas, guardianes invocados y jugadores embelesados.",
|
||||
FILTER_TO_UNKNOWN_COMBATLOG_TOOLTIP = "Acciones realizadas a objetivos invisibles.",
|
||||
FORMATTING = "Formato",
|
||||
FULL_TEXT_COMBATLOG_TOOLTIP = "Mostrar las entradas del registro de combate como frases completas.",
|
||||
HARMFUL_AURA_COMBATLOG_TOOLTIP = "Mostrar cuando ganas o pierdes un aura dañina.",
|
||||
HEALS = "Sanaciones",
|
||||
HIGHLIGHTING = "Resaltar:",
|
||||
HIGHLIGHT_ABILITY_COMBATLOG_TOOLTIP = "Resaltar nombres de facultades en mensajes de combate.",
|
||||
HIGHLIGHT_DAMAGE_COMBATLOG_TOOLTIP = "Resaltar cifras de daño en mensajes de combate.",
|
||||
HIGHLIGHT_KILL_COMBATLOG_TOOLTIP = "Resaltar toda la línea cuando matas o lo hace un miembro de tu grupo.",
|
||||
HIGHLIGHT_SCHOOL_COMBATLOG_TOOLTIP = "Resaltar la escuela del hechizo en el mensaje de combate.",
|
||||
HOSTILE = "Hostil",
|
||||
INTERRUPTS = "interrumpe",
|
||||
ITEM_NAMES = "Nombres de objetos",
|
||||
ITEM_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Mostrar nombres de objetos entre corchetes.",
|
||||
KILLS_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un miembro de tu grupo mata.",
|
||||
MELEE = "Cuerpo a cuerpo",
|
||||
MELEE_COMBATLOG_TOOLTIP = "Mostrar golpes cuerpo a cuerpo naturales.",
|
||||
MESSAGE_SOURCES = "Origen mensaje",
|
||||
MISSES = "Fallos",
|
||||
MOVE_FILTER_DOWN = "Mover filtro abajo",
|
||||
MOVE_FILTER_UP = "Mover filtro arriba",
|
||||
OTHER = "Otros",
|
||||
PERIODIC = "Periódico",
|
||||
POWER_GAINS = "Ganancia de poder",
|
||||
POWER_GAINS_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad restaure maná, energía, ira, enfoque, chi, Poder Sagrado u orbes de las Sombras.",
|
||||
QUICKBUTTON_NAME_EVERYTHING = "Todo",
|
||||
QUICKBUTTON_NAME_EVERYTHING_TOOLTIP = "Mostrar todos los mensajes de combate.",
|
||||
QUICKBUTTON_NAME_KILLS = "Muertes",
|
||||
QUICKBUTTON_NAME_KILLS_TOOLTIP = "Mostrar todas las muertes aliadas y enemigas.",
|
||||
QUICKBUTTON_NAME_ME = "Me afecta",
|
||||
QUICKBUTTON_NAME_ME_TOOLTIP = "Mostrar todo lo que me afecta.",
|
||||
QUICKBUTTON_NAME_SELF = "Yo mismo",
|
||||
QUICKBUTTON_NAME_SELF_TOOLTIP = "Mostrar mensajes de tus acciones y de las que te afectan.",
|
||||
QUICK_BUTTON_COMBATLOG_TOOLTIP = "Coloca un acceso rápido a este filtro en la ventana de chat.",
|
||||
RANGED = "A distancia",
|
||||
RANGED_COMBATLOG_TOOLTIP = "Mostrar ataques con arcos, armas de fuego, armas arrojadizas y varitas.",
|
||||
RANGE_DAMAGE_COMBATLOG_TOOLTIP = "Mostrar los golpes a distancia que infligen daño total o parcial.",
|
||||
RANGE_MISSED_COMBATLOG_TOOLTIP = "Mostrar los golpes a distancia que no logran infligir daño.",
|
||||
RESURRECT = "Resurrecciones",
|
||||
SETTINGS = "Configuración",
|
||||
SHOW_BRACES = "Mostrar corchetes",
|
||||
SHOW_BRACES_COMBATLOG_TOOLTIP = "Mostrar los hipervínculos entre corchetes en los mensajes del registro de combate.",
|
||||
SHOW_QUICK_BUTTON = "Mostrar botón de acceso rápido",
|
||||
SHOW_TIMESTAMP = "Mostrar tiempo",
|
||||
SOURCE = "Fuente:",
|
||||
SPECIAL = "Especial",
|
||||
SPELLS_COMBATLOG_TOOLTIP = "Mostrar mensajes sobre hechizos y facultades especiales.",
|
||||
SPELL_CASTING = "Hechizos lanzados",
|
||||
SPELL_CASTING_COMBATLOG_TOOLTIP = "Mostrar mensajes de los hechizos lanzados.",
|
||||
SPELL_CAST_FAILED_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando no se puede lanzar un hechizo o cuando no se logra lanzar.",
|
||||
SPELL_CAST_START_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando se comienza a lanzar un hechizo.",
|
||||
SPELL_CAST_SUCCESS_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo se lance correctamente.",
|
||||
SPELL_COLOR_BY_SCHOOL_COMBATLOG_TOOLTIP = "Colorear los nombres de hechizos según la escuela.",
|
||||
SPELL_DAMAGE_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad inflige daño.",
|
||||
SPELL_DAMAGE_NUMBER_COMBATLOG_TOOLTIP = "Colorear la cifra del daño de golpes otros que cuerpo a cuerpo.",
|
||||
SPELL_DAMAGE_SCHOOL_COMBATLOG_TOOLTIP = "Colorear el nombre de escuela del daño (p. ej., Sombras).",
|
||||
SPELL_DRAIN_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad reduzca el maná, la energía, la ira o el enfoque.",
|
||||
SPELL_EXTRA_ATTACKS_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad otorgue ataques adicionales.",
|
||||
SPELL_HEAL_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad sana daño.",
|
||||
SPELL_INSTAKILL_COMBATLOG_TOOLTIP = "Mostrar mensajes sobre tipos de hechizos especiales, como los que infligen pérdida de durabilidad o comparten daño con una mascota.",
|
||||
SPELL_INTERRUPT_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad interrumpe otro hechizo.",
|
||||
SPELL_MISSED_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad no logra infligir daño. Incluye cuando el objetivo es inmune o lo esquiva, para, bloquea, desvía, absorbe o evade.",
|
||||
SPELL_NAMES = "Nombres de hechizos",
|
||||
SPELL_NAMES_COMBATLOG_TOOLTIP = "Colorear los nombres de hechizos.",
|
||||
SPELL_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Mostrar nombres de hechizos entre corchetes.",
|
||||
SPELL_PERIODIC_COMBATLOG_TOOLTIP = "Mostrar los hechizos que tienen un efecto gradual.",
|
||||
SPELL_PERIODIC_DAMAGE_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad inflige daño periódico, como Palabra de las Sombras: Dolor o Corrupción.",
|
||||
SPELL_PERIODIC_HEAL_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad sana daño periódicamente, como Renovar o Rejuvenecimiento.",
|
||||
SPELL_PERIODIC_MISSED_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad no logra infligir daño periódico. Incluye cuando el objetivo es inmune, lo absorbe o lo evade.",
|
||||
SPELL_PERIODIC_OTHER_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad inflige cualquier otro efecto periódicamente, como restaurar o drenar maná.",
|
||||
SPELL_RESURRECT_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo o facultad resucite a otro jugador o criatura.",
|
||||
SPELL_SUMMON_COMBATLOG_TOOLTIP = "Mostrar mensajes cuando un hechizo invoque a una criatura o cree un objeto.",
|
||||
START = "Inicio",
|
||||
STRING_SCHOOL_UNKNOWN = "Desconocido",
|
||||
SUCCESS = "Éxito",
|
||||
SUMMONS = "Invocación",
|
||||
SWING_DAMAGE_COMBATLOG_TOOLTIP = "Mostrar golpes cuerpo a cuerpo que infligen daño total o parcial.",
|
||||
SWING_MISSED_COMBATLOG_TOOLTIP = "Mostrar golpes cuerpo a cuerpo que no infligen daño.",
|
||||
TEXT_MODE_A = "A",
|
||||
TEXT_MODE_A_STRING_1 = "%s %s %s %s %s. %s %11$s",
|
||||
TEXT_MODE_A_STRING_2 = "%1$s %3$s %2$s %4$s %5$s. %6$s",
|
||||
TEXT_MODE_A_STRING_3 = "%1$s %5$s %3$s %4$s %2$s. %6$s",
|
||||
TEXT_MODE_A_STRING_ACTION = "|Haction:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_BRACE_ITEM = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_SPELL = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_UNIT = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_DEST_ICON = "|Hicon:%d:dest|h%s|h",
|
||||
TEXT_MODE_A_STRING_DEST_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_ITEM = "|Hitem:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_POSSESSIVE = "%s",
|
||||
TEXT_MODE_A_STRING_REMAINING_POINTS = "(%s restante)",
|
||||
TEXT_MODE_A_STRING_RESULT_ABSORB = "(%s absorbido)",
|
||||
TEXT_MODE_A_STRING_RESULT_BLOCK = "(%s bloqueado)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL = "(Crítico)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL_SPELL = "(Crítico)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRUSHING = "(Aplastamiento)",
|
||||
TEXT_MODE_A_STRING_RESULT_FORMAT = "$resultAmount $resultType",
|
||||
TEXT_MODE_A_STRING_RESULT_GLANCING = "(Refilón)",
|
||||
TEXT_MODE_A_STRING_RESULT_MULTISTRIKE = "(Multigolpe)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERENERGIZE = "(%s sobreenergizado)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERHEALING = "(%s de exceso de sanación)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERKILLING = "(%s excedente)",
|
||||
TEXT_MODE_A_STRING_RESULT_PARRY = "(%d Parado)",
|
||||
TEXT_MODE_A_STRING_RESULT_REFLECT = "Reflejado",
|
||||
TEXT_MODE_A_STRING_RESULT_RESIST = "(%s resistido)",
|
||||
TEXT_MODE_A_STRING_RESULT_VULNERABILITY = "(%s de daño de vulnerabilidad)",
|
||||
TEXT_MODE_A_STRING_SOURCE_ICON = "|Hicon:%s:source|h%s|h",
|
||||
TEXT_MODE_A_STRING_SOURCE_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL_EXTRA = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_TIMESTAMP = "%s> %s",
|
||||
TEXT_MODE_A_STRING_VALUE_SCHOOL = "%s %s",
|
||||
TEXT_MODE_A_STRING_VALUE_TYPE = "%s (%s)",
|
||||
TEXT_MODE_A_TIMESTAMP = "%H:%M:%S",
|
||||
TIMESTAMP_COMBATLOG_TOOLTIP = "Mostrar el tiempo en los mensajes del registro de combate.",
|
||||
UNIT_COLORS = "Colores de unidades:",
|
||||
UNIT_NAMES = "Nombres de unidades",
|
||||
UNIT_NAMES_COMBATLOG_TOOLTIP = "Colorear el nombre de unidades.",
|
||||
UNIT_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Mostrar nombres de unidades entre corchetes.",
|
||||
UNIT_YOU = "Tú",
|
||||
UNIT_YOU_DEST = "Tú",
|
||||
UNIT_YOU_DEST_POSSESSIVE = "Tu",
|
||||
UNIT_YOU_SOURCE = "Tú",
|
||||
UNIT_YOU_SOURCE_POSSESSIVE = "Tu",
|
||||
USE_FULL_TEXT_MODE = "Mostrar texto completo",
|
||||
}
|
||||
Vendored
+677
@@ -0,0 +1,677 @@
|
||||
-- Classic Era GlobalStrings (FR) that the combat log reads
|
||||
-- and the 1.12 client lacks. Generated; do not edit by hand.
|
||||
pfUI_locale["frFR"]["combatlog"] = {
|
||||
ACTION_DAMAGE_SHIELD = "inflige des dégâts",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT = "%2$s %1$s renvoie %9$s de dégâts |2 %7$s à %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT_NO_SOURCE = "%2$s renvoie %9$s de dégâts |2 %7$s à %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED = "rate",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK = "(Bloque)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT = "%2$s %1$s est bloqué par %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s est bloqué par %4$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT = "(Dévie)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT = "%2$s %1$s est dévié par %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%2$s est dévié par %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE = "(Esquive)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT = "%2$s %1$s est esquivé par %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s est esquivé par %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED = "(Évite)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT = "%2$s %1$s est évité par %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%2$s est évité par %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT = "%2$s %1$s rate %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT_NO_SOURCE = "%2$s rate %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE = "(Insensible)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT = "%2$s %1$s a échoué. %4$s est insensible.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s a échoué. %4$s est insensible.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS = "(Rate)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT = "%2$s %1$s rate %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s rate %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY = "(Pare)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT = "%2$s %1$s est paré par %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s est paré par %4$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST = "(Résiste)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT = "%4$s résiste entièrement à %2$s %1$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s résiste entièrement à %2$s.%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SPLIT = "partage les dégâts",
|
||||
ACTION_DAMAGE_SPLIT_ABSORBED_FULL_TEXT = "Les dégâts |2 %2$s |2 %1$s sont absorbés par %4$s %6$s.",
|
||||
ACTION_DAMAGE_SPLIT_FULL_TEXT = "%2$s %1$s inflige %9$s points de dégâts à %4$s.",
|
||||
ACTION_DAMAGE_SPLIT_POSSESSIVE = "0",
|
||||
ACTION_DAMAGE_SPLIT_RESULT_FULL_TEXT = "%2$s |2 %1$s inflige %9$s points de dégâts à %4$s %6$s.",
|
||||
ACTION_ENCHANT_APPLIED = "enchante",
|
||||
ACTION_ENCHANT_APPLIED_FULL_TEXT = "%1$s lance %2$s sur %5$s %4$s.",
|
||||
ACTION_ENCHANT_APPLIED_POSSESSIVE = "0",
|
||||
ACTION_ENCHANT_REMOVED = "lève l'enchantement",
|
||||
ACTION_ENCHANT_REMOVED_FULL_TEXT = "%2$s s'efface |2 %5$s %4$s.",
|
||||
ACTION_ENCHANT_REMOVED_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE = "inflige des dégâts",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING = "Noyade",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_FULL_TEXT = "%4$s se noie et perd %9$s points de vie.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING = "Chute",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_FULL_TEXT = "%4$s tombe et perd %9$s points de vie.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE = "Fatigue",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_FULL_TEXT = "%4$s s'épuise et perd %9$s points de vie.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE = "Feu",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_FULL_TEXT = "%4$s subit %9$s points de dégâts de Feu.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FULL_TEXT = "%4$s perd %9$s points de vie par dégâts de l'environnement.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA = "Lave",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_FULL_TEXT = "%4$s perd %9$s points de vie en nageant dans la lave. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME = "Gelée",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_FULL_TEXT = "%4$s perd %9$s points de vie en nageant dans la gelée. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL = "tue",
|
||||
ACTION_PARTY_KILL_FULL_TEXT = "%1$s a tué %4$s !",
|
||||
ACTION_PARTY_KILL_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS = "assommé",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_FULL_TEXT = "%1$s a assommé %4$s !",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_RANGED = "Tir",
|
||||
ACTION_RANGE_DAMAGE = "touche",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT = "Le tir %1$s touche %4$s pour %5$s.%6$s",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT_NO_SOURCE = "Un tir touche %4$s pour %5$s.%6$s",
|
||||
ACTION_RANGE_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED = "rate",
|
||||
ACTION_RANGE_MISSED_ABSORB = "(Absorbe)",
|
||||
ACTION_RANGE_MISSED_ABSORB_FULL_TEXT = "Le tir %1$s est absorbé par %4$s.%6$s",
|
||||
ACTION_RANGE_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_BLOCK = "(Bloque)",
|
||||
ACTION_RANGE_MISSED_BLOCK_FULL_TEXT = "Le tir %1$s est bloqué par %4$s.%6$s",
|
||||
ACTION_RANGE_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DEFLECT = "(Dévie)",
|
||||
ACTION_RANGE_MISSED_DEFLECT_FULL_TEXT = "Le tir %1$s est dévié par %4$s.",
|
||||
ACTION_RANGE_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DODGE = "(Esquive)",
|
||||
ACTION_RANGE_MISSED_DODGE_FULL_TEXT = "Le tir %1$s est esquivé par %4$s.",
|
||||
ACTION_RANGE_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_EVADE = "(Évite)",
|
||||
ACTION_RANGE_MISSED_EVADE_FULL_TEXT = "Le tir %1$s est évité par %4$s.",
|
||||
ACTION_RANGE_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_FULL_TEXT = "Le tir %1$s rate %4$s.",
|
||||
ACTION_RANGE_MISSED_IMMUNE = "(Insensible)",
|
||||
ACTION_RANGE_MISSED_IMMUNE_FULL_TEXT = "Le tir %1$s a échoué. %4$s est insensible.",
|
||||
ACTION_RANGE_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISFIRE = "(Tir accidentel)",
|
||||
ACTION_RANGE_MISSED_MISFIRE_FULL_TEXT = "Le tir %1$s a touché %4$s par accident.",
|
||||
ACTION_RANGE_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISS = "(Raté)",
|
||||
ACTION_RANGE_MISSED_MISS_FULL_TEXT = "Le tir %1$s rate %4$s.",
|
||||
ACTION_RANGE_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_PARRY = "(Pare)",
|
||||
ACTION_RANGE_MISSED_PARRY_FULL_TEXT = "Le tir %1$s est paré par %4$s.",
|
||||
ACTION_RANGE_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_RESIST = "(Résiste)",
|
||||
ACTION_RANGE_MISSED_RESIST_FULL_TEXT = "Le tir %1$s a échoué, %4$s résiste entièrement.%6$s",
|
||||
ACTION_RANGE_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED = "applique",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF = "applique",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT = "%4$s gagne %2$s %1$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT_NO_SOURCE = "%4$s gagne %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT = "%4$s gagne %2$s %1$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s gagne %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF = "afflige",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT = "%4$s souffre |2 %2$s %1$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s souffre |2 %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT = "%4$s souffre |2 %2$s %1$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s souffre |2 %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE = "cumule",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF = "cumule",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT = "%4$s gagne %2$s %1$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%4$s gagne %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF = "afflige",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT = "%4$s souffre |2 %2$s %1$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s souffre |2 %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN = "brise",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF = "brise",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT = "%1$s brise %2$s %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT_NO_SOURCE = "%2$s %1$s a été brisé par quelqu'un.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF = "brise",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT = "%1$s brise %2$s %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s %1$s a été brisé par quelqu'un.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF = "brise",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT = "%1$s brise %2$s %4$s avec %5$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s a brisé %2$s %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF = "brise",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT = "%1$s brise %2$s %4$s avec %5$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s brise %2$s %4$s.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH = "rafraîchit",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF = "rafraîchit",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT = "%2$s %1$s est rafraîchi sur %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT_NO_SOURCE = "%2$s est rafraîchi sur %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT = "%2$s %1$s est rafraîchi sur %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s est rafraîchi sur %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF = "rafraîchit",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT = "%2$s %1$s est rafraîchi sur %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s est rafraîchi sur %4$s.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT = "%2$s %1$s est rafraîchi sur %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s est rafraîchi sur %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REMOVED = "enlève",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF = "efface",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT = "%2$s %1$s s'efface |2 %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT_NO_SOURCE = "%2$s s'efface |2 %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT = "%2$s %1$s s'efface |2 %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s s'efface |2 %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF = "disparaît",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT = "%2$s %1$s disparaît |2 %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s se dissipe |2 %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT = "%2$s %1$s disparaît |2 %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s se dissipe |2 %4$s. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE = "réduit",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF = "réduit",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT = "%2$s %1$s (%9$s) se réduit.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%2$s (%9$s) se réduit.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF = "diminue",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT = "%2$s %1$s (%9$s) diminue.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s (%9$s) diminue.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT = "%2$s %1$s est enlevé |2 %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT_NO_SOURCE = "%2$s %1$s est enlevé |2 %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE = "frappe",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT = "%2$s %1$s frappe %4$s pour %5$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s frappe %4$s pour %5$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_HEAL = "répare",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT = "%2$s %1$s répare %4$s pour %9$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT_NO_SOURCE = "%2$s répare %4$s pour %9$s.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_FAILED = "échoue",
|
||||
ACTION_SPELL_CAST_FAILED_FULL_TEXT = "%2$s %1$s échoue.%6$s",
|
||||
ACTION_SPELL_CAST_FAILED_MASTER = "1",
|
||||
ACTION_SPELL_CAST_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_START = "commence à lancer",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT = "%1$s commence à lancer %2$s sur %4$s.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_DEST = "%1$s commence à lancer %2$s.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_SOURCE = "Quelqu'un commence à lancer %2$s sur %4$s.",
|
||||
ACTION_SPELL_CAST_START_MASTER = "2",
|
||||
ACTION_SPELL_CAST_START_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CAST_SUCCESS = "lance",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT = "%1$s lance %2$s sur %4$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_DEST = "%1$s lance %2$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_SOURCE = "Quelque chose lance %2$s sur %4$s.",
|
||||
ACTION_SPELL_CAST_SUCCESS_MASTER = "2",
|
||||
ACTION_SPELL_CAST_SUCCESS_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CREATE = "Crée",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT = "%2$s %1$s crée %4$s.%6$s",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT_NO_SOURCE = "%2$s crée %4$s.%6$s",
|
||||
ACTION_SPELL_CREATE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DAMAGE = "touche",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT = "%2$s %1$s touche %4$s pour %5$s.%6$s",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s touche %4$s pour %5$s.%6$s",
|
||||
ACTION_SPELL_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL = "dissipe",
|
||||
ACTION_SPELL_DISPEL_BUFF = "dissipe",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT = "%5$s %4$s est dissipé par %2$s %1$s.",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s %4$s est dissipé par %2$s.",
|
||||
ACTION_SPELL_DISPEL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_DEBUFF = "purifie",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT = "%5$s %4$s est purifié par %2$s %1$s.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s %4$s purifié par %2$s.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_FAILED = "échec de dissipation",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT = "%2$s %1$s n'arrive pas à dissiper %5$s %4$s.",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT_NO_SOURCE = "%2$s n'arrive pas à dissiper %5$s %4$s.",
|
||||
ACTION_SPELL_DISPEL_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DRAIN = "draine",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT = "%2$s %1$s draine %9$s points |2 %8$s |2 %4$s.",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s draine %9$s %8$s |2 %4$s.",
|
||||
ACTION_SPELL_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE = "perte de durabilité",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL = "perte de durabilité complète",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_FULL_TEXT = "%2$s %1$s endommage %4$s : tous les objets sont abîmés.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_FULL_TEXT = "%2$s %1$s endommage %4$s : %5$s abîmé(e).",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE = "dynamise",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT = "%4$s gagne %9$s points |2 %8$s |2 %2$s %1$s.",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s gagne %9$s points |2 %8$s |2 %2$s.",
|
||||
ACTION_SPELL_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE_RESULT = "%9$s %8$s gagné",
|
||||
ACTION_SPELL_EXTRA_ATTACKS = "confère des attaques supplémentaires",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT = "%1$s gagne %9$s attaques supplémentaires grâce à %2$s.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT_NO_SOURCE = "%9$s attaques supplémentaires conférées par %2$s.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_HEAL = "soigne",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT = "%2$s %1$s soigne %4$s pour %9$s points.%6$s",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT_NO_SOURCE = "%2$s soigne %4$s pour %9$s points.%6$s",
|
||||
ACTION_SPELL_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL = "tue",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT = "%2$s %1$s tue instantanément %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT_NO_SOURCE = "%2$s tue instantanément %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS = "assommé",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT = "%2$s %1$s assomme %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT_NO_SOURCE = "%2$s assomme %4$s.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INTERRUPT = "interrompt",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT = "%2$s %1$s interrompt %5$s %4$s.",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT_NO_SOURCE = "%2$s interrompt %5$s %4$s.",
|
||||
ACTION_SPELL_INTERRUPT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH = "draine",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT = "%2$s %1$s draine %9$s points |2 %8$s |2 %4$s. %1$s gagne %10$s points |2 %8$s.",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT_NO_SOURCE = "%2$s draine %9$s points |2 %8$s |2 %4$s.",
|
||||
ACTION_SPELL_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH_RESULT = "%10$s points |2 %8$s gagnés",
|
||||
ACTION_SPELL_MISSED = "rate",
|
||||
ACTION_SPELL_MISSED_ABSORB = "Absorbé",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT = "%2$s %1$s est absorbé par %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s est absorbé par %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_BLOCK = "Bloqué",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT = "%2$s %1$s est bloqué par %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s est bloqué par %4$s.%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DEFLECT = "Dévie",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT = "%2$s %1$s est dévié par %4$s.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%2$s est dévié par %4$s.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DODGE = "Esquive",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT = "%2$s %1$s est esquivé par %4$s.",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s est esquivé par %4$s.",
|
||||
ACTION_SPELL_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_EVADE = "Évite",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT = "%2$s %1$s est évité par %4$s.",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT_NO_SOURCE = "%2$s est évité par %4$s.",
|
||||
ACTION_SPELL_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT = "%2$s %1$s rate %4$s.",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT_NO_SOURCE = "%2$s rate %4$s.",
|
||||
ACTION_SPELL_MISSED_IMMUNE = "Insensible",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT = "%2$s %1$s a échoué. %4$s est insensible.",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s a échoué. %4$s est insensible.",
|
||||
ACTION_SPELL_MISSED_MISFIRE = "Tir accidentel",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT = "%2$s %1$s a touché %4$s par accident.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT_NO_SOURCE = "%2$s a touché %4$s par accident.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_MISS = "Raté",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT = "%2$s %1$s rate %4$s.",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s rate %4$s.",
|
||||
ACTION_SPELL_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_PARRY = "Pare",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT = "%2$s %1$s est paré par %4$s.",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s est paré par %4$s.",
|
||||
ACTION_SPELL_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_REFLECT = "renvoyé",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT = "%2$s %1$s est renvoyé par %4$s.",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT_NO_SOURCE = "%2$s est renvoyé par %4$s.",
|
||||
ACTION_SPELL_MISSED_RESIST = "résiste",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT = "%2$s %1$s a échoué, %4$s résiste entièrement.%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s a échoué, %4$s résiste entièrement.%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE = "inflige des dégâts",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT = "%4$s reçoit %5$s de dégâts |2 %2$s %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT_NO_SOURCE = "%4$s reçoit %5$s de dégâts |2 %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DRAIN = "draine",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT = "%2$s %1$s draine %9$s %8$s |2 %4$s.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s draine %9$s points |2 %8$s |2 %4$s.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE = "dynamise",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT = "%4$s gagne %9$s %8$s |2 %2$s %1$s.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s gagne %9$s points |2 %8$s |2 %2$s.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_RESULT = "$extraAmount %8$s gagné",
|
||||
ACTION_SPELL_PERIODIC_HEAL = "soigne",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT = "%4$s gagne %9$s points de vie |2 %2$s %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT_NO_SOURCE = "%4$s gagne %9$s points de vie |2 %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH = "draine",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT = "%2$s %1$s draine %9$s points |2 %8$s |2 %4$s. %1$s gagne %10$s points |2 %8$s.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT_NO_SOURCE = "%2$s draine %9$s points |2 %8$s |2 %4$s. %1$s gagne %10$s points |2 %8$s.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH_RESULT = "(%10$s points |2 %8$s gagnés)",
|
||||
ACTION_SPELL_PERIODIC_MISSED = "rate",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB = "(%1$s absorbée)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT = "%2$s %1$s est absorbé par %4$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s est absorbé par %4$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK = "(Itération bloquée)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT = "%2$s %1$s a été bloqué par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s a été bloqué par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED = "(Itération déviée)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT = "%2$s %1$s a été dévié par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT_NO_SOURCE = "%2$s a été dévié par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE = "(Itération esquivée)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT = "%2$s %1$s a été esquivé par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s a été esquivé par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED = "(Itération évitée)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT = "%2$s %1$s a été évité par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%2$s a été évité par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT = "%2$s %1$s n'affecte pas %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT_NO_SOURCE = "%2$s n'affecte pas %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE = "(Insensible)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT = "%4$s était insensible à %2$s %1$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%4$s était insensible à %2$s.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS = "(Itération échouée)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT = "%2$s %1$s a raté %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s a raté %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY = "(Itération parée)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT = "%2$s %1$s a été paré par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s a été paré par %4$s pour un temps.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST = "(Itération résistée)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT = "%2$s %1$s n'affecte pas %4$s. %4$s résiste.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s n'affecte pas %4$s. %4$s résiste.%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_RESURRECT = "Ressuscite",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT = "%2$s %1$s ressuscite %4$s.%6$s",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT_NO_SOURCE = "%2$s ressuscite %4$s.%6$s",
|
||||
ACTION_SPELL_RESURRECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN = "vole",
|
||||
ACTION_SPELL_STOLEN_BUFF = "vole",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT = "%2$s %1$s vole %5$s %4$s.",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT_NO_SOURCE = "%2$s vole %5$s %4$s.",
|
||||
ACTION_SPELL_STOLEN_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_BUFF__POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_DEBUFF = "vole",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT = "%2$s %1$s transfère $extraSpell %4$s à %1$s.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s transfère $extraSpell %4$s.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT = "%2$s %1$s vole %5$s %4$s.",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT_NO_SOURCE = "%2$s vole %5$s %4$s.",
|
||||
ACTION_SPELL_STOLEN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_SUMMON = "invoque",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT = "%2$s %1$s invoque %4$s.%6$s",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT_NO_SOURCE = "%2$s invoque %4$s.%6$s",
|
||||
ACTION_SPELL_SUMMON_POSSESSIVE = "1",
|
||||
ACTION_SWING = "Coup",
|
||||
ACTION_SWING_DAMAGE = "touche",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT = "Le coup %1$s touche %4$s pour %5$s.%6$s",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT_NO_SOURCE = "Un coup touche %4$s pour %5$s.%6$s",
|
||||
ACTION_SWING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED = "rate",
|
||||
ACTION_SWING_MISSED_ABSORB = "(Absorbe)",
|
||||
ACTION_SWING_MISSED_ABSORB_FULL_TEXT = "L'attaque %1$s est absorbée par %4$s.%6$s",
|
||||
ACTION_SWING_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_BLOCK = "(Bloque)",
|
||||
ACTION_SWING_MISSED_BLOCK_FULL_TEXT = "L'attaque %1$s est bloquée par %4$s.%6$s",
|
||||
ACTION_SWING_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DEFLECT = "(Dévie)",
|
||||
ACTION_SWING_MISSED_DEFLECT_FULL_TEXT = "L'attaque %1$s est déviée par %4$s.",
|
||||
ACTION_SWING_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DODGE = "(Esquive)",
|
||||
ACTION_SWING_MISSED_DODGE_FULL_TEXT = "L'attaque %1$s est esquivée par %4$s.",
|
||||
ACTION_SWING_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_EVADE = "(Évite)",
|
||||
ACTION_SWING_MISSED_EVADE_FULL_TEXT = "L'attaque %1$s est évitée par %4$s.",
|
||||
ACTION_SWING_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_FULL_TEXT = "L'attaque %1$s rate %4$s.",
|
||||
ACTION_SWING_MISSED_IMMUNE = "(Insensible)",
|
||||
ACTION_SWING_MISSED_IMMUNE_FULL_TEXT = "L'attaque %1$s a échoué, %4$s est insensible.",
|
||||
ACTION_SWING_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISFIRE = "(Tir accidentel)",
|
||||
ACTION_SWING_MISSED_MISFIRE_FULL_TEXT = "L'attaque %1$s a touché %4$s par accident.",
|
||||
ACTION_SWING_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISS = "(Raté)",
|
||||
ACTION_SWING_MISSED_MISS_FULL_TEXT = "L'attaque %1$s rate %4$s.",
|
||||
ACTION_SWING_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_PARRY = "(Parade)",
|
||||
ACTION_SWING_MISSED_PARRY_FULL_TEXT = "L'attaque %1$s est parée par %4$s.",
|
||||
ACTION_SWING_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_RESIST = "(Résistance)",
|
||||
ACTION_SWING_MISSED_RESIST_FULL_TEXT = "L'attaque %1$s a échoué, %4$s résiste entièrement.%6$s",
|
||||
ACTION_SWING_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_UNIT_BECCOMES_UNCONSCIOUS = "s'évanouit",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_FULL_TEXT = "%4$s s'évanouit.",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DESTROYED = "détruit",
|
||||
ACTION_UNIT_DESTROYED_FULL_TEXT = "%4$s a été détruit.",
|
||||
ACTION_UNIT_DESTROYED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DIED = "meurt",
|
||||
ACTION_UNIT_DIED_FULL_TEXT = "%4$s meurt.",
|
||||
ACTION_UNIT_DIED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DISSIPATES = "se dissipe",
|
||||
ACTION_UNIT_DISSIPATES_FULL_TEXT = "%4$s se dissipe.",
|
||||
ACTION_UNIT_DISSIPATES_POSSESSIVE = "0",
|
||||
ADD = "Ajouter",
|
||||
ADDITIONAL_FILTERS = "Filtres supplémentaires",
|
||||
ADD_FILTER = "Aj. filtre",
|
||||
AURAS = "Auras",
|
||||
AURAS_COMBATLOG_TOOLTIP = "Montre les messages liés aux états bénéfiques ou néfastes.",
|
||||
BENEFICIAL = "Bénéfique",
|
||||
BENEFICIAL_AURA_COMBATLOG_TOOLTIP = "Montre quand vous gagnez ou perdez une aura bénéfique.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_BOTH = "Afficher tout ce qui concerne %s.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_EVERYTHING = "Afficher tout",
|
||||
BLIZZARD_COMBAT_LOG_MENU_INCOMING = "Qu'est-il arrivé à %s ?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING = "Qu'a fait %s ?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING_ME = "Qu'est-ce que %s vous a fait ?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_RESET = "Réinitialiser",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SAVE = "Enregistrer comme nouveau filtre",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE = "Cacher les messages comme celui-ci.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK = "Lier %s dans la discussion.",
|
||||
BY_SOURCE = "Par source",
|
||||
BY_SOURCE_COMBATLOG_TOOLTIP = "Colorer en fonction du lanceur.",
|
||||
BY_TARGET = "Par cible",
|
||||
BY_TARGET_COMBATLOG_TOOLTIP = "Colorer en fonction de la cible.",
|
||||
COLORIZE = "Coloriser :",
|
||||
COLORS = "Couleurs",
|
||||
COLOR_BY_SCHOOL = "Couleur par type",
|
||||
COMBATLOG_DEFAULTS = "Journal par défaut",
|
||||
COMBATLOG_FILTER_STRING_CUSTOM_UNIT = "Unité personnalisée",
|
||||
COMBATLOG_FILTER_STRING_FRIENDLY_UNITS = "Amis",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_PLAYERS = "Joueurs ennemis",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_UNITS = "Ennemis",
|
||||
COMBATLOG_FILTER_STRING_ME = "Moi",
|
||||
COMBATLOG_FILTER_STRING_MY_PET = "Familier",
|
||||
COMBATLOG_FILTER_STRING_NEUTRAL_UNITS = "Neutre",
|
||||
COMBATLOG_FILTER_STRING_UNKNOWN_UNITS = "Inconnu",
|
||||
COMBATLOG_HIGHLIGHT_ABILITY = "Technique",
|
||||
COMBATLOG_HIGHLIGHT_DAMAGE = "Dégâts",
|
||||
COMBATLOG_HIGHLIGHT_KILL = "Mort",
|
||||
COMBATLOG_HIGHLIGHT_SCHOOL = "Type",
|
||||
COMBATLOG_UNKNOWN_UNIT = "Quelque chose",
|
||||
COMBAT_FACTION_CHANGE = "Réputation",
|
||||
COMBAT_HONOR_GAIN = "Honneur",
|
||||
COMBAT_LOG_UNIT_YOU_ENABLED = "1",
|
||||
COMBAT_MISC_INFO = "Infos div.",
|
||||
COMBAT_XP_GAIN = "Expérience",
|
||||
CONFIRM_COMBAT_FILTER_DEFAULTS = "Voulez-vous revenir aux valeurs par défaut des filtres ?",
|
||||
CONFIRM_COMBAT_FILTER_DELETE = "Voulez-vous vraiment effacer ce filtre ?",
|
||||
COPY_FILTER = "Copier filtre",
|
||||
DAMAGE_NUMBER = "Valeurs de dégâts",
|
||||
DAMAGE_SCHOOL_TEXT = "Type de dégâts",
|
||||
DAMAGE_SHIELD = "Boucliers de dégâts",
|
||||
DAMAGE_SHIELD_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique inflige des dégâts en réaction à une attaque de mêlée, comme Epines.",
|
||||
DEATHS_COMBATLOG_TOOLTIP = "Montre un message quand quelqu'un meurt.",
|
||||
DEFAULT_COMBATLOG_FILTER_NAME = "Filtre %d",
|
||||
DISPELS = "Dissipations",
|
||||
DISPEL_AURA_COMBATLOG_TOOLTIP = "Montre quand une aura est retirée, détruite ou volée.",
|
||||
DONE_BY = "Fait par :",
|
||||
DONE_TO = "Fait à :",
|
||||
DRAINS = "Drains",
|
||||
ENTER_FILTER_NAME = "Indiquez le nom du filtre :",
|
||||
ENTIRE_LINE = "Ligne entière",
|
||||
ENTIRE_LINE_COMBATLOG_TOOLTIP = "Colorer toute la ligne selon la sélection ci-dessous.",
|
||||
ENVIRONMENTAL_DAMAGE = "Dégâts de l'environnement",
|
||||
ENVIRONMENTAL_DAMAGE_COMBATLOG_TOOLTIP = "Montre un message quand quelqu'un subit des dégâts dus à une chute, une noyade ou le fait de nager dans la lave.",
|
||||
EXAMPLE_SPELL_FIREBALL = "Boule de feu",
|
||||
EXAMPLE_SPELL_FROSTBOLT = "Eclair de givre",
|
||||
EXAMPLE_TARGET_MONSTER = "Monstre",
|
||||
EXAMPLE_TEXT = "Texte d'exemple",
|
||||
EXTRA_ATTACKS = "Attaques suppl.",
|
||||
FAILURES = "Échecs",
|
||||
FILTER_BY_ENEMIES_COMBATLOG_TOOLTIP = "Les actions effectuées par les créatures et familiers hostiles.",
|
||||
FILTER_BY_FRIENDS_COMBATLOG_TOOLTIP = "Les actions effectuées par les personnages, familiers et créatures amicaux.",
|
||||
FILTER_BY_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Les actions effectuées par des joueurs hostiles.",
|
||||
FILTER_BY_ME_COMBATLOG_TOOLTIP = "Les actions effectuées par vous-même, vos pièges et vos sorts.",
|
||||
FILTER_BY_NEUTRAL_COMBATLOG_TOOLTIP = "Les actions effectuées par les créatures neutres.",
|
||||
FILTER_BY_PET_COMBATLOG_TOOLTIP = "Les actions effectuées par vos familiers, gardiens invoqués ou personnages charmés.",
|
||||
FILTER_BY_UNKNOWN_COMBATLOG_TOOLTIP = "Les actions effectuées par des sources indéfinies, telles que les chutes, l'acide ou la lave.",
|
||||
FILTER_NAME = "Nom du filtre :",
|
||||
FILTER_TO_FRIENDS_COMBATLOG_TOOLTIP = "Les actions effectuées sur les personnages, familiers et créatures amicaux.",
|
||||
FILTER_TO_HOSTILE_COMBATLOG_TOOLTIP = "Les actions effectuées sur les familiers et créatures hostiles.",
|
||||
FILTER_TO_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Les actions effectuées contre des joueurs hostiles.",
|
||||
FILTER_TO_ME_COMBATLOG_TOOLTIP = "Les actions effectuées sur vous.",
|
||||
FILTER_TO_NEUTRAL_COMBATLOG_TOOLTIP = "Les actions effectuées sur les créatures neutres.",
|
||||
FILTER_TO_PET_COMBATLOG_TOOLTIP = "Les actions effectuées sur vos familiers, gardiens invoqués ou personnages charmés.",
|
||||
FILTER_TO_UNKNOWN_COMBATLOG_TOOLTIP = "Les actions effectuées sur des cibles invisibles.",
|
||||
FORMATTING = "Mise en forme",
|
||||
FULL_TEXT_COMBATLOG_TOOLTIP = "Montre les évènements du journal de combat sous forme de phrases.",
|
||||
HARMFUL_AURA_COMBATLOG_TOOLTIP = "Montre quand vous gagnez ou perdez une aura néfaste.",
|
||||
HEALS = "Soins",
|
||||
HIGHLIGHTING = "Surlignage :",
|
||||
HIGHLIGHT_ABILITY_COMBATLOG_TOOLTIP = "Surligne les noms des techniques dans les messages de combat.",
|
||||
HIGHLIGHT_DAMAGE_COMBATLOG_TOOLTIP = "Surligne les montants de dégâts dans les messages de combat.",
|
||||
HIGHLIGHT_KILL_COMBATLOG_TOOLTIP = "Surligne toute la ligne lorsque vous-même ou un membre de votre groupe tuez un adversaire.",
|
||||
HIGHLIGHT_SCHOOL_COMBATLOG_TOOLTIP = "Surligne les types de sort dans les messages de combat.",
|
||||
HOSTILE = "Hostile",
|
||||
INTERRUPTS = "Interruptions",
|
||||
ITEM_NAMES = "Noms des objets",
|
||||
ITEM_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Mettre des liens autour des noms d'objets.",
|
||||
KILLS_COMBATLOG_TOOLTIP = "Montre un message quand un membre de votre groupe tue quelqu'un.",
|
||||
MELEE = "Mêlée",
|
||||
MELEE_COMBATLOG_TOOLTIP = "Montre les attaques de mêlée naturelles.",
|
||||
MESSAGE_SOURCES = "Sources",
|
||||
MISSES = "Ratés",
|
||||
MOVE_FILTER_DOWN = "Descendre le filtre",
|
||||
MOVE_FILTER_UP = "Remonter le filtre",
|
||||
OTHER = "Autre",
|
||||
PERIODIC = "Périodique",
|
||||
POWER_GAINS = "Gains de puissance",
|
||||
POWER_GAINS_COMBATLOG_TOOLTIP = "Affiche un message quand un sort ou une technique rend des points de mana, d’énergie, de rage, de focalisation, de chi ou de puissance sacrée ou des orbes d’ombre.",
|
||||
QUICKBUTTON_NAME_EVERYTHING = "Tout",
|
||||
QUICKBUTTON_NAME_EVERYTHING_TOOLTIP = "Montrer tous les messages de combat.",
|
||||
QUICKBUTTON_NAME_KILLS = "Tués",
|
||||
QUICKBUTTON_NAME_KILLS_TOOLTIP = "Montrer tous les tués.",
|
||||
QUICKBUTTON_NAME_ME = "Qu'est-ce qui m'est arrivé ?",
|
||||
QUICKBUTTON_NAME_ME_TOOLTIP = "Montrer tout ce qu'on m'a fait.",
|
||||
QUICKBUTTON_NAME_SELF = "Soi-même",
|
||||
QUICKBUTTON_NAME_SELF_TOOLTIP = "Montre des messages pour les actions effectuées par vous et sur vous.",
|
||||
QUICK_BUTTON_COMBATLOG_TOOLTIP = "Pose un raccourci vers ce filtre dans la fenêtre de discussion.",
|
||||
RANGED = "Distance",
|
||||
RANGED_COMBATLOG_TOOLTIP = "Montre les attaques des arcs, arbalètes, fusils, armes de jet et baguettes.",
|
||||
RANGE_DAMAGE_COMBATLOG_TOOLTIP = "Montre les attaques à distance qui infligent des dégâts complets ou partiels.",
|
||||
RANGE_MISSED_COMBATLOG_TOOLTIP = "Montre les attaques à distance qui n'infligent pas de dégâts.",
|
||||
RESURRECT = "Résurrections",
|
||||
SETTINGS = "Réglages",
|
||||
SHOW_BRACES = "Afficher les crochets",
|
||||
SHOW_BRACES_COMBATLOG_TOOLTIP = "Afficher des crochets autour des liens dans les messages du journal de combat.",
|
||||
SHOW_QUICK_BUTTON = "Montrer accès rapide",
|
||||
SHOW_TIMESTAMP = "Afficher l'heure",
|
||||
SOURCE = "Source :",
|
||||
SPECIAL = "Spécial",
|
||||
SPELLS_COMBATLOG_TOOLTIP = "Montre les messages liés aux sorts et aux techniques spéciales.",
|
||||
SPELL_CASTING = "Incantations",
|
||||
SPELL_CASTING_COMBATLOG_TOOLTIP = "Montre les messages concernant l'incantation des sorts.",
|
||||
SPELL_CAST_FAILED_COMBATLOG_TOOLTIP = "Montre les messages indiquant qu'un sort ne peut être lancé ou que l'incantation a échoué.",
|
||||
SPELL_CAST_START_COMBATLOG_TOOLTIP = "Montre les messages indiquant le début de l'incantation d'un sort.",
|
||||
SPELL_CAST_SUCCESS_COMBATLOG_TOOLTIP = "Montre les messages indiquant la réussite de l'incantation d'un sort.",
|
||||
SPELL_COLOR_BY_SCHOOL_COMBATLOG_TOOLTIP = "Colorer les noms des sorts par type.",
|
||||
SPELL_DAMAGE_COMBATLOG_TOOLTIP = "Montre quand un sort ou une technique inflige des dégâts.",
|
||||
SPELL_DAMAGE_NUMBER_COMBATLOG_TOOLTIP = "Colorer les valeurs de dégâts pour les attaques hors-mêlée.",
|
||||
SPELL_DAMAGE_SCHOOL_COMBATLOG_TOOLTIP = "Colorer les noms des types de dégâts (par ex. Ombre).",
|
||||
SPELL_DRAIN_COMBATLOG_TOOLTIP = "Affiche un message quand un sort ou une technique enlève des points de mana, d’énergie, de rage ou de focalisation.",
|
||||
SPELL_EXTRA_ATTACKS_COMBATLOG_TOOLTIP = "Affiche un message quand un sort ou une technique octroie des attaques supplémentaires.",
|
||||
SPELL_HEAL_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique soigne des dégâts.",
|
||||
SPELL_INSTAKILL_COMBATLOG_TOOLTIP = "Montre les messages des sorts d'une catégorie spéciale, comme ceux qui infligent une perte de durabilité ou qui partagent les dégâts avec un familier.",
|
||||
SPELL_INTERRUPT_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique interrompt un autre sort.",
|
||||
SPELL_MISSED_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique ne parvient pas à infliger des dégâts. Que ce soit dû à une esquive, une parade, un blocage, une déviation, une immunité, une absorption ou un évitement.",
|
||||
SPELL_NAMES = "Noms des sorts",
|
||||
SPELL_NAMES_COMBATLOG_TOOLTIP = "Colorer les noms de sorts.",
|
||||
SPELL_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Mettre des liens autour des noms de sorts.",
|
||||
SPELL_PERIODIC_COMBATLOG_TOOLTIP = "Montre les sorts qui ont un effet incrémentiel.",
|
||||
SPELL_PERIODIC_DAMAGE_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique inflige des dégâts de façon périodique, comme Mot de l'ombre : Douleur ou Corruption.",
|
||||
SPELL_PERIODIC_HEAL_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique soigne de façon périodique, comme Rénovation ou Récupération.",
|
||||
SPELL_PERIODIC_MISSED_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique ne parvient pas à infliger des dégâts périodiques. Cela peut être dû à une immunité, une absorption ou un évitement.",
|
||||
SPELL_PERIODIC_OTHER_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique déclenche un autre type d'effet de façon périodique, comme de rendre ou de prendre des points de mana.",
|
||||
SPELL_RESURRECT_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique ressuscite une créature ou un autre personnage.",
|
||||
SPELL_SUMMON_COMBATLOG_TOOLTIP = "Montre un message quand un sort ou une technique invoque une créature ou crée un objet.",
|
||||
START = "Démarrage",
|
||||
STRING_SCHOOL_UNKNOWN = "(Inconnu)",
|
||||
SUCCESS = "Réussites",
|
||||
SUMMONS = "Invocations",
|
||||
SWING_DAMAGE_COMBATLOG_TOOLTIP = "Montre les attaques de mêlée qui infligent des dégâts complets ou partiels.",
|
||||
SWING_MISSED_COMBATLOG_TOOLTIP = "Montre les attaques de mêlée qui n'infligent pas de dégâts.",
|
||||
TEXT_MODE_A = "A",
|
||||
TEXT_MODE_A_STRING_1 = "%s %s %s %s %s. %s %11$s",
|
||||
TEXT_MODE_A_STRING_2 = "%1$s %3$s %2$s %4$s %5$s. %6$s",
|
||||
TEXT_MODE_A_STRING_3 = "%1$s %5$s %3$s %4$s %2$s. %6$s",
|
||||
TEXT_MODE_A_STRING_ACTION = "|Haction:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_BRACE_ITEM = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_SPELL = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_UNIT = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_DEST_ICON = "|Hicon:%d:dest|h%s|h",
|
||||
TEXT_MODE_A_STRING_DEST_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_ITEM = "|Hitem:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_POSSESSIVE = "|2 %s",
|
||||
TEXT_MODE_A_STRING_REMAINING_POINTS = "(%s restant)",
|
||||
TEXT_MODE_A_STRING_RESULT_ABSORB = "(%s absorbé)",
|
||||
TEXT_MODE_A_STRING_RESULT_BLOCK = "(%s bloqué)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL = "(Critique)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL_SPELL = "(Critique)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRUSHING = "(Écrasement)",
|
||||
TEXT_MODE_A_STRING_RESULT_FORMAT = "$resultType : $resultAmount",
|
||||
TEXT_MODE_A_STRING_RESULT_GLANCING = "(Éraflure)",
|
||||
TEXT_MODE_A_STRING_RESULT_MULTISTRIKE = "(Frappe multiple)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERENERGIZE = "(Excès d'énergie %s)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERHEALING = "(Excès de soins %s)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERKILLING = "(Excès de dégâts %s)",
|
||||
TEXT_MODE_A_STRING_RESULT_PARRY = "(%d paré)",
|
||||
TEXT_MODE_A_STRING_RESULT_REFLECT = "Renvoyé",
|
||||
TEXT_MODE_A_STRING_RESULT_RESIST = "(%s résisté)",
|
||||
TEXT_MODE_A_STRING_RESULT_VULNERABILITY = "(%s de dégâts de vulnérabilité)",
|
||||
TEXT_MODE_A_STRING_SOURCE_ICON = "|Hicon:%s:source|h%s|h",
|
||||
TEXT_MODE_A_STRING_SOURCE_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL_EXTRA = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_TIMESTAMP = "%s> %s",
|
||||
TEXT_MODE_A_STRING_VALUE_SCHOOL = "%s %s",
|
||||
TEXT_MODE_A_STRING_VALUE_TYPE = "%s (%s)",
|
||||
TEXT_MODE_A_TIMESTAMP = "%H:%M:%S",
|
||||
TIMESTAMP_COMBATLOG_TOOLTIP = "Afficher l'heure des messages du journal de combat.",
|
||||
UNIT_COLORS = "Couleurs d'unités :",
|
||||
UNIT_NAMES = "Noms des unités",
|
||||
UNIT_NAMES_COMBATLOG_TOOLTIP = "Colorer les noms des unités.",
|
||||
UNIT_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Mettre des liens autour des noms d'unités.",
|
||||
UNIT_YOU = "Vous",
|
||||
UNIT_YOU_DEST = "Vous",
|
||||
UNIT_YOU_DEST_POSSESSIVE = "votre personnage",
|
||||
UNIT_YOU_SOURCE = "Vous",
|
||||
UNIT_YOU_SOURCE_POSSESSIVE = "votre",
|
||||
USE_FULL_TEXT_MODE = "Mode prolixe",
|
||||
}
|
||||
Vendored
+677
@@ -0,0 +1,677 @@
|
||||
-- Classic Era GlobalStrings (KR) that the combat log reads
|
||||
-- and the 1.12 client lacks. Generated; do not edit by hand.
|
||||
pfUI_locale["koKR"]["combatlog"] = {
|
||||
ACTION_DAMAGE_SHIELD = "피해",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; 공격했지만 %4$s|1이;가; %9$s의 %7$s 피해를 반사했습니다. %6$s",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; 공격했지만 %4$s|1이;가; %9$s의 %7$s 피해를 반사했습니다. %6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED = "적중하지 않음",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK = "방어함",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1을;를; 방어했습니다. %6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1을;를; 방어했습니다. %6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT = "(튕김)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 튕겨냈습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 튕겨냈습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE = "피함",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1을;를; 교묘히 피했습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1을;를; 교묘히 피했습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED = "(벗어남)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 벗어났습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 벗어났습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE = "면역",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT = "%1$s의 %2$s|1이;가; 실패했습니다. %4$s|1은;는; 면역입니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 실패했습니다. %4$s|1은;는; 면역입니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS = "(빗나감)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY = "막음",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 막았습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 막았습니다.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST = "저항함",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1을;를; 모두 저항했습니다. %6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1을;를; 모두 저항했습니다. %6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SPLIT = "피해 분배",
|
||||
ACTION_DAMAGE_SPLIT_ABSORBED_FULL_TEXT = "%1$s의 %2$s|1으로;로; 인한 피해가 %4$s에게 흡수되었습니다. %6$s",
|
||||
ACTION_DAMAGE_SPLIT_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s에게 %9$s의 피해를 입혔습니다.",
|
||||
ACTION_DAMAGE_SPLIT_POSSESSIVE = "0",
|
||||
ACTION_DAMAGE_SPLIT_RESULT_FULL_TEXT = "%1$s의 %2$s|1이;가; %4$s에게 %9$s의 피해를 입혔습니다. %6$s",
|
||||
ACTION_ENCHANT_APPLIED = "마법부여 사용",
|
||||
ACTION_ENCHANT_APPLIED_FULL_TEXT = "%1$s|1이;가; %4$s의 %5$s에 %2$s|1을;를; 사용합니다.",
|
||||
ACTION_ENCHANT_APPLIED_POSSESSIVE = "0",
|
||||
ACTION_ENCHANT_REMOVED = "마법부여 사라짐",
|
||||
ACTION_ENCHANT_REMOVED_FULL_TEXT = "%4$s의 %5$s에서 %2$s 효과가 사라집니다.",
|
||||
ACTION_ENCHANT_REMOVED_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE = "피해",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING = "호흡 불가",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_FULL_TEXT = "%4$s|1이;가; 숨을 쉴 수 없어 %9$s의 피해를 입었습니다.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING = "낙하 충격",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_FULL_TEXT = "%4$s|1이;가; 낙하할 때의 충격으로 %9$s의 피해를 입었습니다.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE = "피로",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_FULL_TEXT = "%4$s|1이;가; 피로로 %9$s의 피해를 입었습니다.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE = "화염",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_FULL_TEXT = "%4$s|1이;가; %9$s의 화염 피해를 입었습니다.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FULL_TEXT = "%4$s|1이;가; 환경에 의해 %9$s의 피해를 입었습니다.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA = "용암",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_FULL_TEXT = "%4$s|1이;가; 용암의 열기로 인해 %9$s의 피해를 입었습니다. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME = "독성",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_FULL_TEXT = "%4$s|1이;가; 독성으로 인해 %9$s의 피해를 입었습니다. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL = "죽임",
|
||||
ACTION_PARTY_KILL_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 죽였습니다.",
|
||||
ACTION_PARTY_KILL_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS = "기절",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 기절시켰습니다!",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_RANGED = "원거리 공격",
|
||||
ACTION_RANGE_DAMAGE = "피해",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT = "%1$s|1이;가; 원거리 공격으로 %4$s에게 %5$s의 피해를 입혔습니다. %6$s",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT_NO_SOURCE = "원거리 공격으로 %4$s|1이;가; %5$s의 피해를 입었습니다. %6$s",
|
||||
ACTION_RANGE_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED = "적중하지 않음",
|
||||
ACTION_RANGE_MISSED_ABSORB = "흡수됨",
|
||||
ACTION_RANGE_MISSED_ABSORB_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 원거리로 공격했지만 피해가 흡수되었습니다. %6$s",
|
||||
ACTION_RANGE_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_BLOCK = "방어함",
|
||||
ACTION_RANGE_MISSED_BLOCK_FULL_TEXT = "%4$s|1이;가; %1$s의 원거리 공격을 방어했습니다. %6$s",
|
||||
ACTION_RANGE_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DEFLECT = "(튕김)",
|
||||
ACTION_RANGE_MISSED_DEFLECT_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 원거리로 공격했지만 튕겨냈습니다.",
|
||||
ACTION_RANGE_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DODGE = "피함",
|
||||
ACTION_RANGE_MISSED_DODGE_FULL_TEXT = "%1$s|1이;가; 원거리로 공격했지만 %4$s|1이;가; 교묘히 피했습니다.",
|
||||
ACTION_RANGE_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_EVADE = "(벗어남)",
|
||||
ACTION_RANGE_MISSED_EVADE_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 원거리로 공격했지만 빗나갔습니다.",
|
||||
ACTION_RANGE_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 원거리로 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_RANGE_MISSED_IMMUNE = "면역",
|
||||
ACTION_RANGE_MISSED_IMMUNE_FULL_TEXT = "%1$s의 원거리 공격이 실패했습니다. %4$s|1은;는; 면역입니다.",
|
||||
ACTION_RANGE_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISFIRE = "(공격 실패)",
|
||||
ACTION_RANGE_MISSED_MISFIRE_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 원거리로 공격하려 했지만 실패했습니다.",
|
||||
ACTION_RANGE_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISS = "(빗나감)",
|
||||
ACTION_RANGE_MISSED_MISS_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 원거리로 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_RANGE_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_PARRY = "막음",
|
||||
ACTION_RANGE_MISSED_PARRY_FULL_TEXT = "%1$s|1이;가; 원거리로 공격했지만 %4$s|1이;가; 막았습니다.",
|
||||
ACTION_RANGE_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_RESIST = "저항함",
|
||||
ACTION_RANGE_MISSED_RESIST_FULL_TEXT = "%4$s|1이;가; %1$s의 원거리 공격을 모두 저항했습니다. %6$s",
|
||||
ACTION_RANGE_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED = "효과 적용",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF = "사용",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s 효과를 얻었습니다.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s 효과를 얻었습니다.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s 효과를 얻었습니다. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s 효과를 얻었습니다. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF = "걸림",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s에 걸렸습니다.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s에 걸렸습니다.",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s에 걸렸습니다. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s에 걸렸습니다. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE = "겹쳐짐",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF = "겹쳐짐",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s 효과를 얻었습니다. (%9$s)",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s 효과를 얻었습니다. (%9$s)",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF = "걸림",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s에 걸렸습니다. (%9$s)",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s에 걸렸습니다. (%9$s)",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN = "파괴",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF = "파괴",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT = "%1$s|1이;가; %4$s의 %2$s|1을;를; 해제했습니다.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT_NO_SOURCE = "%1$s의 %2$s|1이;가; 해제되었습니다.",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF = "파괴",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT = "%1$s|1이;가; %4$s의 %2$s|1을;를; 해제했습니다.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%1$s의 %2$s|1이;가; 해제되었습니다.",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF = "파괴",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT = "%1$s|1이;가; %5$s|1으로;로; %4$s의 %2$s|1을;를; 해제했습니다.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s|1으로;로; %4$s의 %2$s|1이;가; 해제되었습니다.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF = "파괴",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT = "%1$s|1이;가; %5$s|1으로;로; %4$s의 %2$s|1을;를; 해제했습니다.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s|1으로;로; %4$s의 %2$s|1이;가; 해제되었습니다.",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH = "지속시간 초기화",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF = "지속시간 초기화",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT = "%1$s|1이;가; %4$s의 %2$s 효과를 초기화합니다.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT_NO_SOURCE = "%4$s의 %2$s 주문 지속시간이 초기화됩니다.",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT = "%1$s|1이;가; %4$s의 %2$s 효과를 초기화합니다. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s의 %2$s 주문 지속시간이 초기화됩니다. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF = "지속시간 초기화",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT = "%1$s|1이;가; %4$s의 %2$s 효과를 초기화합니다.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s의 %2$s 주문 지속시간이 초기화됩니다.",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT = "%1$s|1이;가; %4$s의 %2$s 효과를 초기화합니다. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s의 %2$s 주문 지속시간이 초기화됩니다. %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REMOVED = "제거",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF = "효과 사라짐",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT = "%4$s에게서 %1$s의 %2$s 효과가 사라졌습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT_NO_SOURCE = "%4$s에게서 %2$s 효과가 사라졌습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT = "%4$s에게서 %1$s의 %2$s 효과가 사라졌습니다. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s에게서 %2$s 효과가 사라졌습니다. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF = "사라짐",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT = "%1$s의 %2$s|1이;가; %4$s에게서 사라졌습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; %4$s에게서 사라졌습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT = "%1$s의 %2$s|1이;가; %4$s에게서 사라졌습니다. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; %4$s에게서 사라졌습니다. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE = "감소",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF = "감소",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT = "%1$s의 %2$s(%9$s) 효과가 감소했습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%2$s(%9$s) 효과가 감소했습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF = "감소",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT = "%2$s(%9$s)|1이;가; %1$s에게서 사라졌습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s(%9$s)|1이;가; 사라졌습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT = "%1$s의 %2$s|1이;가; %4$s에게서 제거되었습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT_NO_SOURCE = "%1$s의 %2$s|1이;가; %4$s에게서 제거되었습니다.",
|
||||
ACTION_SPELL_AURA_REMOVED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE = "손상",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격하여 %5$s의 피해를 입혔습니다. %6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격하여 %5$s의 피해를 입혔습니다. %6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_HEAL = "수리",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT = "%1$s의 %2$s|1으로;로; %4$s의 체력이 %9$s만큼 복구되었습니다. %6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 체력이 %9$s만큼 복구되었습니다. %6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_FAILED = "사용 실패",
|
||||
ACTION_SPELL_CAST_FAILED_FULL_TEXT = "%1$s|1이;가; %2$s 시전에 실패했습니다. %6$s",
|
||||
ACTION_SPELL_CAST_FAILED_MASTER = "1",
|
||||
ACTION_SPELL_CAST_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_START = "시전 시작",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT = "%1$s|1이;가; %4$s에게 %2$s 시전을 시작합니다.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_DEST = "%1$s|1이;가; %2$s 시전을 시작합니다.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_SOURCE = "무엇인가가 %4$s에게 %2$s 시전을 시작합니다.",
|
||||
ACTION_SPELL_CAST_START_MASTER = "2",
|
||||
ACTION_SPELL_CAST_START_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CAST_SUCCESS = "시전",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT = "%1$s|1이;가; %4$s에게 %2$s|1을;를; 시전합니다.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_DEST = "%1$s|1이;가; %2$s|1을;를; 시전합니다.",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_SOURCE = "무엇인가가 %4$s에게 %2$s 시전을 시작합니다.",
|
||||
ACTION_SPELL_CAST_SUCCESS_MASTER = "2",
|
||||
ACTION_SPELL_CAST_SUCCESS_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CREATE = "만듦",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 만들었습니다. %6$s",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 만들었습니다. %6$s",
|
||||
ACTION_SPELL_CREATE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DAMAGE = "피해",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s에게 %5$s의 피해를 입혔습니다. %6$s",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1이;가; %5$s의 피해를 입었습니다. %6$s",
|
||||
ACTION_SPELL_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL = "무효화",
|
||||
ACTION_SPELL_DISPEL_BUFF = "무효화",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT = "%4$s의 %5$s|1이;가; %1$s의 %2$s|1으로;로; 무효화되었습니다.",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT_NO_SOURCE = "%4$s의 %5$s|1이;가; %2$s|1으로;로; 무효화되었습니다.",
|
||||
ACTION_SPELL_DISPEL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_DEBUFF = "해제",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT = "%4$s의 %5$s|1이;가; %1$s의 %2$s|1으로;로; 해제되었습니다.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s의 %5$s|1이;가; %2$s|1으로;로; 해제되었습니다.",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_FAILED = "무효화 실패",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s에게 걸려 있는 %5$s|1을;를; 무효화하지 못했습니다.",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s에게 걸려 있는 %5$s|1을;를; 무효화하지 못했습니다.",
|
||||
ACTION_SPELL_DISPEL_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DRAIN = "소진",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s의 %8$s|1을;를; %9$s만큼 소진시켰습니다.",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; %4$s의 %8$s|1을;를; %9$s만큼 소진시켰습니다.",
|
||||
ACTION_SPELL_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE = "내구도 감소",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL = "전체 내구도 감소",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s에게 피해를 입혔습니다: 모든 아이템의 내구도가 감소했습니다.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s에게 피해를 입혔습니다: %5$s|1이;가; 손상되었습니다.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE = "얻음",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1으로;로; %9$s의 %8$s|1을;를; 얻었습니다.",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1으로;로; %9$s의 %8$s|1을;를; 얻었습니다.",
|
||||
ACTION_SPELL_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE_RESULT = "%9$s %8$s 얻음",
|
||||
ACTION_SPELL_EXTRA_ATTACKS = "추가 공격",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %9$s회의 추가 공격 기회를 얻었습니다.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %9$s회의 추가 공격 기회를 얻었습니다.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_HEAL = "생명력 회복",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT = "%1$s의 %2$s|1으로;로; %4$s의 생명력이 %9$s만큼 회복되었습니다. %6$s",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 생명력이 %9$s만큼 회복되었습니다. %6$s",
|
||||
ACTION_SPELL_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL = "죽임",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; 즉시 %4$s|1을;를; 죽였습니다.",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; 즉시 %4$s|1을;를; 죽였습니다.",
|
||||
ACTION_SPELL_INSTAKILL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS = "기절",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT = "%1$s %2$s|1이;가; %4$s|1을;를; 기절시킵니다.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; %4$s|1을;를; 기절시킵니다.",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INTERRUPT = "차단",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s의 %5$s|1을;를; 차단했습니다.",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 %5$s|1을;를; 차단했습니다.",
|
||||
ACTION_SPELL_INTERRUPT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH = "소진",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT = "%1$s의 %2$s|1으로;로; %4$s의 %8$s|1이;가; %9$s만큼 소진되었습니다. %1$s|1이;가; %10$s의 %8$s|1을;를; 얻었습니다.",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 %8$s|1이;가; %9$s만큼 소진되었습니다.",
|
||||
ACTION_SPELL_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH_RESULT = "%10$s %8$s 얻음",
|
||||
ACTION_SPELL_MISSED = "적중하지 않음",
|
||||
ACTION_SPELL_MISSED_ABSORB = "흡수됨",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 피해가 흡수되었습니다. %6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 피해가 흡수되었습니다. %6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_BLOCK = "방어함",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1을;를; 방어했습니다. %6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1을;를; 방어했습니다. %6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DEFLECT = "튕김",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 튕겨냈습니다.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 튕겨냈습니다.",
|
||||
ACTION_SPELL_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DODGE = "피함",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 교묘히 피했습니다.",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1을;를; 교묘히 피했습니다.",
|
||||
ACTION_SPELL_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_EVADE = "벗어남",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 빗나갔습니다.",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 벗어났습니다.",
|
||||
ACTION_SPELL_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; %4$s에게 적중하지 않았습니다.",
|
||||
ACTION_SPELL_MISSED_IMMUNE = "면역",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT = "%1$s의 %2$s|1이;가; 실패했습니다. %4$s|1은;는; 면역입니다.",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 실패했습니다. %4$s|1은;는; 면역입니다.",
|
||||
ACTION_SPELL_MISSED_MISFIRE = "공격 실패",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격하려 했지만 실패했습니다.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격하는 데 실패했습니다.",
|
||||
ACTION_SPELL_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_MISS = "빗나감",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; %4$s에게 적중하지 않았습니다.",
|
||||
ACTION_SPELL_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_PARRY = "막음",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 공격했지만 막았습니다.",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 공격했지만 막았습니다.",
|
||||
ACTION_SPELL_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_REFLECT = "반사함",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1을;를; 반사했습니다.",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1을;를; 반사했습니다.",
|
||||
ACTION_SPELL_MISSED_RESIST = "저항함",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1을;를; 모두 저항했습니다. %6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1을;를; 모두 저항했습니다. %6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE = "피해",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1으로;로; %5$s의 피해를 입었습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1으로;로; %5$s의 피해를 입었습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DRAIN = "소진",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s의 %8$s|1을;를; %9$s만큼 소진시켰습니다.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 %8$s|1이;가; %9$s만큼 소진되었습니다.",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE = "얻음",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s|1으로;로; %9$s의 %8$s|1을;를; 얻었습니다.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s|1으로;로; %9$s의 %8$s|1을;를; 얻었습니다.",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_RESULT = "$extraAmount %8$s 얻음",
|
||||
ACTION_SPELL_PERIODIC_HEAL = "생명력 회복",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT = "%1$s의 %2$s|1으로;로; %4$s의 생명력이 %9$s만큼 회복되었습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 생명력이 %9$s만큼 회복되었습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH = "소진",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT = "%1$s의 %2$s|1으로;로; %4$s의 %8$s|1이;가; %9$s만큼 소진되었습니다. %1$s|1이;가; %10$s의 %8$s|1을;를; 얻었습니다.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 %8$s|1이;가; %9$s만큼 소진되었습니다. %1$s|1이;가; %10$s의 %8$s|1을;를; 얻었습니다.",
|
||||
ACTION_SPELL_PERIODIC_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH_RESULT = "(%10$s %8$s 얻음)",
|
||||
ACTION_SPELL_PERIODIC_MISSED = "적중하지 않음",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB = "(%1$s 흡수됨)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT = "%1$s의 %2$s|1이;가; 흡수되어 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 흡수되어 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK = "일시적으로 방어함",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT = "%1$s의 %2$s|1이;가; 일시적으로 방어되어 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 일시적으로 방어되어 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED = "(일시적으로 튕김)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT = "%1$s의 %2$s|1이;가; 일시적으로 튕겨 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 일시적으로 튕겨 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE = "일시적으로 피함",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT = "%1$s의 %2$s|1이;가; 일시적으로 회피되어 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 일시적으로 회피되어 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED = "(일시적으로 벗어남)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT = "%1$s의 %2$s|1이;가; 일시적으로 벗어나 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 일시적으로 벗어나 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT = "%1$s의 %2$s|1이;가; 일시적으로 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 일시적으로 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE = "면역",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT = "%4$s|1이;가; %1$s의 %2$s에 면역입니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%4$s|1이;가; %2$s에 면역입니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS = "일시적으로 적중하지 않음",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT = "%1$s의 %2$s|1이;가; 일시적으로 적중하지 않아 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 일시적으로 적중하지 않아 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY = "일시적으로 막음",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT = "%1$s의 %2$s|1이;가; 일시적으로 막혀 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; 일시적으로 막혀 %4$s에게 피해를 주지 못했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST = "일시적으로 저항함",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT = "%1$s의 %2$s|1이;가; %4$s에게 피해를 주지 못했습니다. %4$s|1이;가; 저항했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s|1이;가; %4$s에게 피해를 주지 못했습니다. %4$s|1이;가; 저항했습니다. %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_RESURRECT = "부활함",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 부활시켰습니다. %6$s",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 부활시켰습니다. %6$s",
|
||||
ACTION_SPELL_RESURRECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN = "훔침",
|
||||
ACTION_SPELL_STOLEN_BUFF = "훔침",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s의 %5$s|1을;를; 훔쳤습니다.",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 %5$s|1을;를; 훔쳤습니다.",
|
||||
ACTION_SPELL_STOLEN_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_BUFF__POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_DEBUFF = "훔침",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT = "%1$s의 %2$s|1으로;로; %4$s의 $extraSpell|1이;가; %1$s에게 이전되었습니다.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 $extraSpell|1이;가; 이전되었습니다.",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s의 %5$s|1을;를; 훔쳤습니다.",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s의 %5$s|1을;를; 훔쳤습니다.",
|
||||
ACTION_SPELL_STOLEN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_SUMMON = "소환",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT = "%1$s|1이;가; %2$s|1으로;로; %4$s|1을;를; 소환했습니다. %6$s",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT_NO_SOURCE = "%2$s|1으로;로; %4$s|1을;를; 소환했습니다. %6$s",
|
||||
ACTION_SPELL_SUMMON_POSSESSIVE = "1",
|
||||
ACTION_SWING = "근접 공격",
|
||||
ACTION_SWING_DAMAGE = "피해",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT = "%1$s|1이;가; 근접 공격으로 %4$s에게 %5$s의 피해를 입혔습니다. %6$s",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT_NO_SOURCE = "근접 공격으로 %4$s|1이;가; %5$s의 피해를 입었습니다. %6$s",
|
||||
ACTION_SWING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED = "적중하지 않음",
|
||||
ACTION_SWING_MISSED_ABSORB = "흡수됨",
|
||||
ACTION_SWING_MISSED_ABSORB_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 공격했지만 피해가 흡수되었습니다. %6$s",
|
||||
ACTION_SWING_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_BLOCK = "방어함",
|
||||
ACTION_SWING_MISSED_BLOCK_FULL_TEXT = "%1$s|1이;가; %4$s의 공격을 방어했습니다. %6$s",
|
||||
ACTION_SWING_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DEFLECT = "(튕김)",
|
||||
ACTION_SWING_MISSED_DEFLECT_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 공격했지만 튕겨냈습니다.",
|
||||
ACTION_SWING_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DODGE = "피함",
|
||||
ACTION_SWING_MISSED_DODGE_FULL_TEXT = "%4$s|1이;가; %1$s의 공격을 교묘히 피했습니다.",
|
||||
ACTION_SWING_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_EVADE = "(벗어남)",
|
||||
ACTION_SWING_MISSED_EVADE_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 공격했지만 벗어났습니다.",
|
||||
ACTION_SWING_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_SWING_MISSED_IMMUNE = "면역",
|
||||
ACTION_SWING_MISSED_IMMUNE_FULL_TEXT = "%1$s의 공격이 실패했습니다. %4$s|1은;는; 면역입니다.",
|
||||
ACTION_SWING_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISFIRE = "(공격 실패)",
|
||||
ACTION_SWING_MISSED_MISFIRE_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 공격하려 했지만 실패했습니다.",
|
||||
ACTION_SWING_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISS = "(빗나감)",
|
||||
ACTION_SWING_MISSED_MISS_FULL_TEXT = "%1$s|1이;가; %4$s|1을;를; 공격했지만 적중하지 않았습니다.",
|
||||
ACTION_SWING_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_PARRY = "막음",
|
||||
ACTION_SWING_MISSED_PARRY_FULL_TEXT = "%4$s|1이;가; %1$s의 공격을 막았습니다.",
|
||||
ACTION_SWING_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_RESIST = "저항함",
|
||||
ACTION_SWING_MISSED_RESIST_FULL_TEXT = "%4$s|1이;가; %1$s의 공격을 모두 저항했습니다. %6$s",
|
||||
ACTION_SWING_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_UNIT_BECCOMES_UNCONSCIOUS = "쓰러짐",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_FULL_TEXT = "%4$s|1이;가; 쓰러집니다.",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DESTROYED = "파괴됨",
|
||||
ACTION_UNIT_DESTROYED_FULL_TEXT = "%4$s|1이;가; 파괴되었습니다.",
|
||||
ACTION_UNIT_DESTROYED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DIED = "죽음",
|
||||
ACTION_UNIT_DIED_FULL_TEXT = "%4$s|1이;가; 죽었습니다.",
|
||||
ACTION_UNIT_DIED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DISSIPATES = "사라짐",
|
||||
ACTION_UNIT_DISSIPATES_FULL_TEXT = "%4$s|1이;가; 사라집니다.",
|
||||
ACTION_UNIT_DISSIPATES_POSSESSIVE = "0",
|
||||
ADD = "추가",
|
||||
ADDITIONAL_FILTERS = "추가 필터",
|
||||
ADD_FILTER = "필터 추가",
|
||||
AURAS = "오라",
|
||||
AURAS_COMBATLOG_TOOLTIP = "이로운 효과나 해로운 효과에 대한 메시지를 표시합니다.",
|
||||
BENEFICIAL = "이로운 효과",
|
||||
BENEFICIAL_AURA_COMBATLOG_TOOLTIP = "강화 효과를 얻거나 잃었을 때 메시지를 표시합니다.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_BOTH = "%s|1과;와; 관련된 기록을 모두 보여주십시오.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_EVERYTHING = "모두",
|
||||
BLIZZARD_COMBAT_LOG_MENU_INCOMING = "%s에게 무슨 일이 일어났습니까?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING = "%s|1이;가; 무엇을 했습니까?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING_ME = "%s|1이;가; 당신에게 무엇을 했습니까?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_RESET = "원래대로",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SAVE = "새 필터로 저장",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE = "같은 종류의 메시지 숨기기",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK = "%s|1을;를; 대화창으로 링크",
|
||||
BY_SOURCE = "행위자",
|
||||
BY_SOURCE_COMBATLOG_TOOLTIP = "행위자를 기준으로 문장에 색을 입힙니다.",
|
||||
BY_TARGET = "대상",
|
||||
BY_TARGET_COMBATLOG_TOOLTIP = "대상을 기준으로 문장에 색을 입힙니다.",
|
||||
COLORIZE = "색 지정",
|
||||
COLORS = "색상",
|
||||
COLOR_BY_SCHOOL = "마법 계열별 색 설정",
|
||||
COMBATLOG_DEFAULTS = "원래대로",
|
||||
COMBATLOG_FILTER_STRING_CUSTOM_UNIT = "사용자 개체",
|
||||
COMBATLOG_FILTER_STRING_FRIENDLY_UNITS = "친구",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_PLAYERS = "적대적인 플레이어",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_UNITS = "적대적 대상",
|
||||
COMBATLOG_FILTER_STRING_ME = "자신",
|
||||
COMBATLOG_FILTER_STRING_MY_PET = "소환수",
|
||||
COMBATLOG_FILTER_STRING_NEUTRAL_UNITS = "중립적 대상",
|
||||
COMBATLOG_FILTER_STRING_UNKNOWN_UNITS = "알 수 없음",
|
||||
COMBATLOG_HIGHLIGHT_ABILITY = "주문 및 기술",
|
||||
COMBATLOG_HIGHLIGHT_DAMAGE = "피해",
|
||||
COMBATLOG_HIGHLIGHT_KILL = "처치",
|
||||
COMBATLOG_HIGHLIGHT_SCHOOL = "마법 계열",
|
||||
COMBATLOG_UNKNOWN_UNIT = "무엇인가",
|
||||
COMBAT_FACTION_CHANGE = "평판",
|
||||
COMBAT_HONOR_GAIN = "명예",
|
||||
COMBAT_LOG_UNIT_YOU_ENABLED = "1",
|
||||
COMBAT_MISC_INFO = "기타 정보",
|
||||
COMBAT_XP_GAIN = "경험치",
|
||||
CONFIRM_COMBAT_FILTER_DEFAULTS = "정말 필터를 초기화하시겠습니까?",
|
||||
CONFIRM_COMBAT_FILTER_DELETE = "정말 이 필터를 삭제하시겠습니까?",
|
||||
COPY_FILTER = "필터 복사",
|
||||
DAMAGE_NUMBER = "피해 수치",
|
||||
DAMAGE_SCHOOL_TEXT = "마법 계열",
|
||||
DAMAGE_SHIELD = "피해 보호막",
|
||||
DAMAGE_SHIELD_COMBATLOG_TOOLTIP = "근접 공격자에게 피해를 입히는 주문이나 능력으로 인한 피해 메시지를 표시합니다. 예: 가시 등",
|
||||
DEATHS_COMBATLOG_TOOLTIP = "무엇인가가 죽었을 때 메시지를 표시합니다.",
|
||||
DEFAULT_COMBATLOG_FILTER_NAME = "필터: %d",
|
||||
DISPELS = "무효화",
|
||||
DISPEL_AURA_COMBATLOG_TOOLTIP = "효과가 제거되거나, 파괴되거나, 훔쳐졌을 때 메시지를 표시합니다.",
|
||||
DONE_BY = "행위자",
|
||||
DONE_TO = "대상",
|
||||
DRAINS = "소진",
|
||||
ENTER_FILTER_NAME = "필터 이름을 입력하십시오.",
|
||||
ENTIRE_LINE = "전체 문장",
|
||||
ENTIRE_LINE_COMBATLOG_TOOLTIP = "아래 선택에 따라 전체 문장에 색을 입힙니다.",
|
||||
ENVIRONMENTAL_DAMAGE = "환경 피해",
|
||||
ENVIRONMENTAL_DAMAGE_COMBATLOG_TOOLTIP = "낙하, 익사, 용암에 의한 피해를 입었을 때 메시지를 표시합니다.",
|
||||
EXAMPLE_SPELL_FIREBALL = "화염구",
|
||||
EXAMPLE_SPELL_FROSTBOLT = "얼음 화살",
|
||||
EXAMPLE_TARGET_MONSTER = "몬스터",
|
||||
EXAMPLE_TEXT = "예시 문구",
|
||||
EXTRA_ATTACKS = "추가 공격",
|
||||
FAILURES = "실패",
|
||||
FILTER_BY_ENEMIES_COMBATLOG_TOOLTIP = "적대적인 NPC, 소환수의 동작",
|
||||
FILTER_BY_FRIENDS_COMBATLOG_TOOLTIP = "아군 플레이어, 소환수, NPC의 동작",
|
||||
FILTER_BY_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "적대적인 플레이어의 동작",
|
||||
FILTER_BY_ME_COMBATLOG_TOOLTIP = "자신, 자신의 덫, 자신의 주문에 의한 동작",
|
||||
FILTER_BY_NEUTRAL_COMBATLOG_TOOLTIP = "중립적 NPC의 동작",
|
||||
FILTER_BY_PET_COMBATLOG_TOOLTIP = "자신의 소환수, 소환된 수호물, 자신이 현혹한 플레이어의 동작",
|
||||
FILTER_BY_UNKNOWN_COMBATLOG_TOOLTIP = "낙하 피해, 독, 용암 등에 의한 동작",
|
||||
FILTER_NAME = "필터 이름",
|
||||
FILTER_TO_FRIENDS_COMBATLOG_TOOLTIP = "아군 플레이어, 소환수, NPC에게 행해진 동작",
|
||||
FILTER_TO_HOSTILE_COMBATLOG_TOOLTIP = "적대적인 소환수, NPC에게 행해진 동작",
|
||||
FILTER_TO_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "적대적인 플레이어에게 행해진 동작",
|
||||
FILTER_TO_ME_COMBATLOG_TOOLTIP = "자신에게 행해진 동작",
|
||||
FILTER_TO_NEUTRAL_COMBATLOG_TOOLTIP = "중립적 NPC에게 행해진 동작",
|
||||
FILTER_TO_PET_COMBATLOG_TOOLTIP = "자신의 소환수, 소환된 수호물, 자신이 현혹한 플레이어에게 행해진 동작",
|
||||
FILTER_TO_UNKNOWN_COMBATLOG_TOOLTIP = "보이지 않는 대상에게 행해진 동작",
|
||||
FORMATTING = "형식",
|
||||
FULL_TEXT_COMBATLOG_TOOLTIP = "전투 메시지를 전체 문장으로 표시합니다.",
|
||||
HARMFUL_AURA_COMBATLOG_TOOLTIP = "약화 효과를 얻거나 잃었을 때 메시지를 표시합니다.",
|
||||
HEALS = "치유",
|
||||
HIGHLIGHTING = "강조",
|
||||
HIGHLIGHT_ABILITY_COMBATLOG_TOOLTIP = "전투 메시지 상에서 능력의 이름을 강조합니다.",
|
||||
HIGHLIGHT_DAMAGE_COMBATLOG_TOOLTIP = "전투 메시지 상에서 피해의 수치를 강조합니다.",
|
||||
HIGHLIGHT_KILL_COMBATLOG_TOOLTIP = "자신이나 파티원이 대상을 처치했을 때 메시지를 강조합니다.",
|
||||
HIGHLIGHT_SCHOOL_COMBATLOG_TOOLTIP = "전투 메시지 상에서 주문의 마법 계열을 강조합니다.",
|
||||
HOSTILE = "해로운 효과",
|
||||
INTERRUPTS = "차단",
|
||||
ITEM_NAMES = "아이템 이름",
|
||||
ITEM_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "아이템에 괄호 표시",
|
||||
KILLS_COMBATLOG_TOOLTIP = "파티원이 어떤 대상을 처치했을 때 메시지를 표시합니다.",
|
||||
MELEE = "근접 공격",
|
||||
MELEE_COMBATLOG_TOOLTIP = "근접 공격에 관련된 메시지를 표시합니다.",
|
||||
MESSAGE_SOURCES = "메시지 출처",
|
||||
MISSES = "적중하지 않음",
|
||||
MOVE_FILTER_DOWN = "필터를 아래로 이동",
|
||||
MOVE_FILTER_UP = "필터를 위로 이동",
|
||||
OTHER = "기타",
|
||||
PERIODIC = "주기적인 효과",
|
||||
POWER_GAINS = "얻은 자원",
|
||||
POWER_GAINS_COMBATLOG_TOOLTIP = "주문이나 능력으로 마나, 기력, 분노, 집중, 기, 신성한 힘, 암흑 구슬이 회복될 때 메시지를 표시합니다.",
|
||||
QUICKBUTTON_NAME_EVERYTHING = "모두",
|
||||
QUICKBUTTON_NAME_EVERYTHING_TOOLTIP = "모든 전투 메시지를 표시합니다.",
|
||||
QUICKBUTTON_NAME_KILLS = "처치",
|
||||
QUICKBUTTON_NAME_KILLS_TOOLTIP = "처치 및 죽음에 대한 메시지를 표시합니다.",
|
||||
QUICKBUTTON_NAME_ME = "자신(대상)",
|
||||
QUICKBUTTON_NAME_ME_TOOLTIP = "자신에게 행해진 모든 내용을 표시합니다.",
|
||||
QUICKBUTTON_NAME_SELF = "자신",
|
||||
QUICKBUTTON_NAME_SELF_TOOLTIP = "자신의 행위와 자신에게 행해진 행위에 대한 메시지를 표시합니다.",
|
||||
QUICK_BUTTON_COMBATLOG_TOOLTIP = "대화창에 필터를 추가합니다.",
|
||||
RANGED = "원거리 공격",
|
||||
RANGED_COMBATLOG_TOOLTIP = "활, 총, 투척 무기, 마법봉 공격 메시지를 표시합니다.",
|
||||
RANGE_DAMAGE_COMBATLOG_TOOLTIP = "원거리 공격으로 입힌 전체 피해나 부분적인 피해를 표시합니다.",
|
||||
RANGE_MISSED_COMBATLOG_TOOLTIP = "피해를 입히지 못한 원거리 공격에 대한 메시지를 표시합니다.",
|
||||
RESURRECT = "부활",
|
||||
SETTINGS = "설정",
|
||||
SHOW_BRACES = "괄호 표시",
|
||||
SHOW_BRACES_COMBATLOG_TOOLTIP = "전투 메시지에서 링크 정보가 있는 단어를 괄호로 묶습니다.",
|
||||
SHOW_QUICK_BUTTON = "빠른 버튼 표시하기",
|
||||
SHOW_TIMESTAMP = "시간 표시",
|
||||
SOURCE = "획득 방법:",
|
||||
SPECIAL = "특수 주문",
|
||||
SPELLS_COMBATLOG_TOOLTIP = "주문과 특수 능력에 관한 메시지를 표시합니다.",
|
||||
SPELL_CASTING = "주문 시전",
|
||||
SPELL_CASTING_COMBATLOG_TOOLTIP = "주문 시전에 관련된 메시지를 표시합니다.",
|
||||
SPELL_CAST_FAILED_COMBATLOG_TOOLTIP = "주문을 시전하지 못하거나 시전에 실패했을 때 메시지를 표시합니다.",
|
||||
SPELL_CAST_START_COMBATLOG_TOOLTIP = "주문 시전을 시작할 때 메시지를 표시합니다.",
|
||||
SPELL_CAST_SUCCESS_COMBATLOG_TOOLTIP = "성공적으로 주문을 시전했을 때 메시지를 표시합니다.",
|
||||
SPELL_COLOR_BY_SCHOOL_COMBATLOG_TOOLTIP = "주문의 마법 계열에 색을 입힙니다.",
|
||||
SPELL_DAMAGE_COMBATLOG_TOOLTIP = "주문이나 능력으로 피해를 입혔을 때 메시지를 표시합니다.",
|
||||
SPELL_DAMAGE_NUMBER_COMBATLOG_TOOLTIP = "근접 공격을 제외한 공격 피해에 색을 입힙니다.",
|
||||
SPELL_DAMAGE_SCHOOL_COMBATLOG_TOOLTIP = "공격 마법 계열에 색을 입힙니다. (예: 암흑)",
|
||||
SPELL_DRAIN_COMBATLOG_TOOLTIP = "주문이나 능력으로 마나, 기력, 분노, 집중이 감소할 때 메시지를 표시합니다.",
|
||||
SPELL_EXTRA_ATTACKS_COMBATLOG_TOOLTIP = "주문이나 능력으로 추가 공격 기회를 얻었을 때 메시지를 표시합니다.",
|
||||
SPELL_HEAL_COMBATLOG_TOOLTIP = "주문이나 능력으로 피해가 치유될 때 메시지를 표시합니다.",
|
||||
SPELL_INSTAKILL_COMBATLOG_TOOLTIP = "내구도 감소나 소환수에게 분배되는 피해 등 특별한 형태의 메시지를 표시합니다.",
|
||||
SPELL_INTERRUPT_COMBATLOG_TOOLTIP = "주문이나 능력으로 다른 주문이 취소될 때 메시지를 표시합니다.",
|
||||
SPELL_MISSED_COMBATLOG_TOOLTIP = "주문이나 능력으로 피해를 입히지 못했을 때 메시지를 표시합니다. 피함, 막음, 방어함, 튕김, 면역, 흡수, 벗어남이 포함됩니다.",
|
||||
SPELL_NAMES = "주문 이름",
|
||||
SPELL_NAMES_COMBATLOG_TOOLTIP = "주문의 이름에 색을 입힙니다.",
|
||||
SPELL_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "주문이나 기술에 괄호 표시",
|
||||
SPELL_PERIODIC_COMBATLOG_TOOLTIP = "효과가 증가하는 주문을 표시합니다.",
|
||||
SPELL_PERIODIC_DAMAGE_COMBATLOG_TOOLTIP = "주문이나 능력으로 주기적인 피해를 입힐 때 메시지를 표시합니다. 예: 어둠의 권능: 고통, 부패 등",
|
||||
SPELL_PERIODIC_HEAL_COMBATLOG_TOOLTIP = "주문이나 능력으로 주기적인 치유가 이루어질 때 메시지를 표시합니다. 예: 소생, 회복 등",
|
||||
SPELL_PERIODIC_MISSED_COMBATLOG_TOOLTIP = "주문이나 능력으로 인한 주기적인 피해가 실패했을 때 메시지를 표시합니다. 면역, 흡수, 벗어남 등이 포함됩니다.",
|
||||
SPELL_PERIODIC_OTHER_COMBATLOG_TOOLTIP = "주문이나 능력으로 주기적인 효과가 발생할 때 메시지를 표시합니다. 예: 마나 회복, 마나 흡수 등",
|
||||
SPELL_RESURRECT_COMBATLOG_TOOLTIP = "다른 플레이어나 NPC를 부활시키는 주문에 대한 메시지를 표시합니다.",
|
||||
SPELL_SUMMON_COMBATLOG_TOOLTIP = "몬스터나 NPC를 소환하거나 물건을 창조할 때 메시지를 표시합니다.",
|
||||
START = "시작",
|
||||
STRING_SCHOOL_UNKNOWN = "알 수 없음",
|
||||
SUCCESS = "성공",
|
||||
SUMMONS = "소환",
|
||||
SWING_DAMAGE_COMBATLOG_TOOLTIP = "근접 공격으로 입힌 전체 피해나 부분적인 피해를 표시합니다.",
|
||||
SWING_MISSED_COMBATLOG_TOOLTIP = "피해를 입히지 못한 근접 공격에 대한 메시지를 표시합니다.",
|
||||
TEXT_MODE_A = "A",
|
||||
TEXT_MODE_A_STRING_1 = "%1$s %2$s %4$s %5$s %3$s %6$s %11$s",
|
||||
TEXT_MODE_A_STRING_2 = "%1$s %2$s %4$s %5$s %3$s %6$s",
|
||||
TEXT_MODE_A_STRING_3 = "%1$s %5$s %3$s %4$s %2$s. %6$s",
|
||||
TEXT_MODE_A_STRING_ACTION = "|Haction:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_BRACE_ITEM = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_SPELL = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_UNIT = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_DEST_ICON = "|Hicon:%d:dest|h%s|h",
|
||||
TEXT_MODE_A_STRING_DEST_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_ITEM = "|Hitem:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_POSSESSIVE = "%s",
|
||||
TEXT_MODE_A_STRING_REMAINING_POINTS = "(%s 남음)",
|
||||
TEXT_MODE_A_STRING_RESULT_ABSORB = "(%s 흡수됨)",
|
||||
TEXT_MODE_A_STRING_RESULT_BLOCK = "(%s 피해 방어)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL = "(치명상)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL_SPELL = "(극대화)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRUSHING = "(강타당함)",
|
||||
TEXT_MODE_A_STRING_RESULT_FORMAT = "$resultAmount $resultType",
|
||||
TEXT_MODE_A_STRING_RESULT_GLANCING = "(비껴맞음)",
|
||||
TEXT_MODE_A_STRING_RESULT_MULTISTRIKE = "(연속타격)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERENERGIZE = "(%s 과충전)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERHEALING = "(%s 초과 치유)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERKILLING = "(%s 초과 피해)",
|
||||
TEXT_MODE_A_STRING_RESULT_PARRY = "(%d 막음)",
|
||||
TEXT_MODE_A_STRING_RESULT_REFLECT = "반사함",
|
||||
TEXT_MODE_A_STRING_RESULT_RESIST = "(%s 저항함)",
|
||||
TEXT_MODE_A_STRING_RESULT_VULNERABILITY = "(%s 약점 피해)",
|
||||
TEXT_MODE_A_STRING_SOURCE_ICON = "|Hicon:%s:source|h%s|h",
|
||||
TEXT_MODE_A_STRING_SOURCE_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL_EXTRA = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_TIMESTAMP = "%s> %s",
|
||||
TEXT_MODE_A_STRING_VALUE_SCHOOL = "(%s %s)",
|
||||
TEXT_MODE_A_STRING_VALUE_TYPE = "%s (%s)",
|
||||
TEXT_MODE_A_TIMESTAMP = "%H:%M:%S",
|
||||
TIMESTAMP_COMBATLOG_TOOLTIP = "전투 메시지에 시간을 표시합니다.",
|
||||
UNIT_COLORS = "대상 색:",
|
||||
UNIT_NAMES = "플레이어, NPC, 몬스터 이름",
|
||||
UNIT_NAMES_COMBATLOG_TOOLTIP = "플레이어, NPC, 몬스터 이름에 색을 입힙니다.",
|
||||
UNIT_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "이름에 괄호 표시",
|
||||
UNIT_YOU = "당신",
|
||||
UNIT_YOU_DEST = "당신",
|
||||
UNIT_YOU_DEST_POSSESSIVE = "당신",
|
||||
UNIT_YOU_SOURCE = "당신",
|
||||
UNIT_YOU_SOURCE_POSSESSIVE = "당신",
|
||||
USE_FULL_TEXT_MODE = "전체 문장으로 보기",
|
||||
}
|
||||
Vendored
+677
@@ -0,0 +1,677 @@
|
||||
-- Classic Era GlobalStrings (RU) that the combat log reads
|
||||
-- and the 1.12 client lacks. Generated; do not edit by hand.
|
||||
pfUI_locale["ruRU"]["combatlog"] = {
|
||||
ACTION_DAMAGE_SHIELD = "Урон",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT = "\"%2$s\" |3-1(%1$s) отражает %9$s |4единицу:единицы:единиц; %7$s на |3-3(%4$s)%6$s.",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT_NO_SOURCE = "\"%2$s\" отражает %9$s |4единицу:единицы:единиц; %7$s на |3-3(%4$s)%6$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED = "Промах",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK = ": выстрел блокирован",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT = "%4$s блокирует заклинание \"%2$s\" |3-1(%1$s)%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s блокирует заклинание \"%2$s\"%6$s.",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT = ": выстрел отклонен",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT = "%4$s отклоняет заклинание \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%4$s отклоняет заклинание \"%2$s\".",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE = ": уклонение",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT = "%4$s уклоняется от заклинания \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s уклоняется от заклинания \"%2$s\".",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED = ": атака не достигла цели",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT = "Заклинание \"%2$s\" |3-1(%1$s) не достигает |3-1(%4$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "Заклинание \"%2$s\" не достигает |3-1(%4$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT = "\"%2$s\" |3-1(%1$s) не попадает по |3-2(%4$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT_NO_SOURCE = "\"%2$s\" не попадает по |3-2(%4$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE = ": цель невосприимчива",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT = "%4$s обладает невосприимчивостью к заклинанию \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%4$s обладает невосприимчивостью к заклинанию \"%2$s\".",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS = ": промах",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT = "\"%2$s\" |3-1(%1$s) не попадает по |3-2(%4$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT_NO_SOURCE = "\"%2$s\" не попадает по |3-2(%4$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY = ": выстрел парирован",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT = "%4$s парирует способность \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s парирует способность \"%2$s\".",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST = ": сопротивление",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT = "%4$s полностью сопротивляется заклинанию \"%2$s\" |3-1(%1$s)%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s полностью сопротивляется заклинанию \"%2$s\"%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SPLIT = "Разделение урона",
|
||||
ACTION_DAMAGE_SPLIT_ABSORBED_FULL_TEXT = "%4$s поглощает урон от заклинания \"%2$s\" |3-1(%1$s) %6$s",
|
||||
ACTION_DAMAGE_SPLIT_FULL_TEXT = "\"%2$s\" |3-1(%1$s) наносит |3-2(%4$s) %9$s |4единицу:единицы:единиц; урона.",
|
||||
ACTION_DAMAGE_SPLIT_POSSESSIVE = "0",
|
||||
ACTION_DAMAGE_SPLIT_RESULT_FULL_TEXT = "\"%2$s\" |3-1(%1$s) наносит %9$s ед. урона |3-2(%4$s) %6$s",
|
||||
ACTION_ENCHANT_APPLIED = "зачаровано",
|
||||
ACTION_ENCHANT_APPLIED_FULL_TEXT = "%1$s накладывает чары \"%2$s\" на предмет \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_ENCHANT_APPLIED_POSSESSIVE = "0",
|
||||
ACTION_ENCHANT_REMOVED = "чары развеялись",
|
||||
ACTION_ENCHANT_REMOVED_FULL_TEXT = "Эффект \"%2$s\" перестает действовать на предмете |3-1(%4$s) \"%5$s\".",
|
||||
ACTION_ENCHANT_REMOVED_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE = "Урон",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING = "Утопление",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_FULL_TEXT = "%4$s тонет и теряет %9$s |4единицу:единицы:единиц; здоровья.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING = "Падение",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_FULL_TEXT = "%4$s падает и теряет %9$s |4единицу:единицы:единиц; здоровья.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE = "Усталость",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_FULL_TEXT = "%4$s от усталости теряет %9$s |4единицу:единицы:единиц; здоровья.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE = "Огонь",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_FULL_TEXT = "%4$s получает %9$s |4единицу:единицы:единиц; урона от огня.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FULL_TEXT = "%4$s теряет %9$s |4единицу:единицы:единиц; здоровья из-за опасностей окружающего мира.",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA = "Лава",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_FULL_TEXT = "%4$s погружается в лаву и теряет %9$s |4единицу:единицы:единиц; здоровья. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME = "Слизь",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_FULL_TEXT = "%4$s погружается в слизь и теряет %9$s |4единицу:единицы:единиц; здоровья. %6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL = "Убийство",
|
||||
ACTION_PARTY_KILL_FULL_TEXT = "%1$s убивает |3-3(%4$s)!",
|
||||
ACTION_PARTY_KILL_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS = "нейтрализован",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_FULL_TEXT = "Игрок %1$s нейтрализовал |3-3(%4$s)!",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_RANGED = "Дальний бой",
|
||||
ACTION_RANGE_DAMAGE = "Попадание",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT = "Атака дальнего боя |3-1(%1$s) бьет по |3-2(%4$s) на %5$s%6$s.",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT_NO_SOURCE = "Атака дальнего боя бьет по |3-2(%4$s) на %5$s%6$s.",
|
||||
ACTION_RANGE_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED = "Промах",
|
||||
ACTION_RANGE_MISSED_ABSORB = ": поглощение",
|
||||
ACTION_RANGE_MISSED_ABSORB_FULL_TEXT = "%4$s поглощает выстрел |3-1(%1$s)%6$s.",
|
||||
ACTION_RANGE_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_BLOCK = ": выстрел блокирован",
|
||||
ACTION_RANGE_MISSED_BLOCK_FULL_TEXT = "%1$s блокирует выстрел |3-1(%4$s)%6$s.",
|
||||
ACTION_RANGE_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DEFLECT = ": выстрел отклонен",
|
||||
ACTION_RANGE_MISSED_DEFLECT_FULL_TEXT = "%4$s отклоняет выстрел |3-1(%1$s).",
|
||||
ACTION_RANGE_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DODGE = ": уклонение",
|
||||
ACTION_RANGE_MISSED_DODGE_FULL_TEXT = "%4$s уклоняется от выстрела |3-1(%1$s).",
|
||||
ACTION_RANGE_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_EVADE = ": атака не достигла цели",
|
||||
ACTION_RANGE_MISSED_EVADE_FULL_TEXT = "Выстрел |3-1(%1$s) не достигает |3-1(%4$s).",
|
||||
ACTION_RANGE_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_FULL_TEXT = "%1$s не попадает по |3-2(%4$s).",
|
||||
ACTION_RANGE_MISSED_IMMUNE = ": цель невосприимчива",
|
||||
ACTION_RANGE_MISSED_IMMUNE_FULL_TEXT = "%4$s обладает невосприимчивостью к выстрелу |3-1(%1$s).",
|
||||
ACTION_RANGE_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISFIRE = "Промах.",
|
||||
ACTION_RANGE_MISSED_MISFIRE_FULL_TEXT = "Выстрел 3-1(%1$s) не попадает по |3-2(%4$s).",
|
||||
ACTION_RANGE_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISS = ": промах",
|
||||
ACTION_RANGE_MISSED_MISS_FULL_TEXT = "%1$s не попадает по |3-2(%4$s).",
|
||||
ACTION_RANGE_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_PARRY = ": выстрел парирован",
|
||||
ACTION_RANGE_MISSED_PARRY_FULL_TEXT = "%4$s парирует выстрел |3-1(%1$s).",
|
||||
ACTION_RANGE_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_RESIST = ": сопротивление",
|
||||
ACTION_RANGE_MISSED_RESIST_FULL_TEXT = "%4$s полностью сопротивляется выстрелу |3-1(%1$s)%6$s.",
|
||||
ACTION_RANGE_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED = "накладывается",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF = "накладывается",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT = "На |3-3(%4$s) накладывается эффект \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT_NO_SOURCE = "%4$s обретает %2$s.",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT = "На |3-3(%4$s) накладывается эффект \"%2$s\" |3-1(%1$s). %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "На |3-3(%4$s) накладывается эффект \"%2$s\". %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF = "Негативный эффект",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT = "%4$s находится под воздействием эффекта \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s находится под воздействием эффекта \"%2$s\".",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT = "%4$s находится под воздействием эффекта \"%2$s\" |3-1(%1$s). %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s находится под воздействием эффекта \"%2$s\". %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE = "Суммирование",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF = "Суммирование",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT = "На |3-3(%4$s) накладывается эффект \"%2$s\" |3-1(%1$s) (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%4$s получает %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF = "Негативный эффект",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT = "%4$s находится под воздействием эффекта \"%2$s\" |3-1(%1$s) (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s находится под воздействием %2$s (%9$s).",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN = "прервано",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF = "прервано",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT = "\"%4$s\" |3-1(%2$s) снято |3-4(%1$s).",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT_NO_SOURCE = "Кто-то прервал действие заклинания \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF = "прервано",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT = "\"%4$s\" |3-1(%2$s) снято |3-4(%1$s).",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT_NO_SOURCE = "Кто-то прервал действие заклинания \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF = "прервано",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT = "%5$s |3-1(%1$s) прекращает действие эффекта \"%2$s\" на |3-3(%4$s).",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s прерывает действие \"%2$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF = "прервано",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT = "%5$s |3-1(%1$s) прекращает действие эффекта \"%2$s\" на |3-3(%4$s).",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s прерывает действие \"%2$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH = "обновлено",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF = "обновлено",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT = "Эффект \"%2$s\" |3-1(%1$s) обновлен на |3-5(%4$s).",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT_NO_SOURCE = "Эффект \"%2$s\" обновлен на |3-5(%4$s).",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT = "Эффект \"%2$s\" |3-1(%1$s) обновлен на |3-5(%4$s). %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "Эффект \"%2$s\" обновлен на |3-5(%4$s). %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF = "обновлено",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT = "Эффект \"%2$s\" |3-1(%1$s) обновлен на |3-5(%4$s).",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT_NO_SOURCE = "Эффект \"%2$s\" обновлен на |3-5(%4$s).",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT = "Эффект \"%2$s\" |3-1(%1$s) обновлен на |3-5(%4$s). %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "Эффект \"%2$s\" обновлен на |3-5(%4$s). %11$s",
|
||||
ACTION_SPELL_AURA_REFRESH_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REMOVED = "Снятие",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF = "Окончание действия",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT = "Действие эффекта \"%2$s\", наложенного |3-4(%1$s) на |3-3(%4$s), заканчивается.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT_NO_SOURCE = "Действие эффекта \"%2$s\" на |3-2(%4$s) заканчивается.",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT = "Действие эффекта \"%2$s\", наложенного |3-4(%1$s) на |3-3(%4$s), заканчивается. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "Действие эффекта \"%2$s\", наложенного на |3-3(%4$s), заканчивается. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF = "Прекращение действия",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT = "Эффект \"%2$s\" |3-1(%1$s), наложенный на |3-3(%4$s), рассеивается.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s рассеивается на %4$s.",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT = "Эффект \"%2$s\" |3-1(%1$s), наложенный на |3-3(%4$s), рассеивается. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "Эффект \"%2$s\", наложенный на |3-3(%4$s), рассеивается. %11$s",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE = "Сокращение",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF = "Сокращение",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT = "Действие эффекта |3-1(%1$s) \"%2$s\" (%9$s) проходит.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "Действие эффекта \"%2$s\" (%9$s) ослабляется.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF = "Уменьшение",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT = "Действие эффекта \"%2$s\" |3-1(%1$s) (%9$s) заканчивается.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "\"%2$s\" (%9$s) прекращает свое действие.",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT = "С |3-1(%4$s) снято заклинание \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT_NO_SOURCE = "С |3-1(%4$s) снято заклинание \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_AURA_REMOVED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE = "бьет",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT = "%2$s |3-1(%1$s) наносит |3-2(%4$s) %5$s%6$s.",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s наносит |3-2(%4$s) %5$s%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_HEAL = "отремонтировано",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT = "%2$s |3-1(%1$s) ремонтирует %4$s на %9$s ед.%6$s.",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT_NO_SOURCE = "%2$s ремонтирует |3-3(%4$s) на %9$s ед.%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_FAILED = "Неудача.",
|
||||
ACTION_SPELL_CAST_FAILED_FULL_TEXT = "Заклинание \"%2$s\" |3-1(%1$s) не сработало. %6$s",
|
||||
ACTION_SPELL_CAST_FAILED_MASTER = "1",
|
||||
ACTION_SPELL_CAST_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_START = "Начало применения",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT = "%1$s начинает применять способность %2$s к |3-2(%4$s).",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_DEST = "%1$s начинает применять способность %2$s.",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_SOURCE = "Что-то начинает применять способность %2$s к |3-2(%4$s).",
|
||||
ACTION_SPELL_CAST_START_MASTER = "2",
|
||||
ACTION_SPELL_CAST_START_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CAST_SUCCESS = "Применение",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT = "%1$s применяет заклинание \"%2$s\" на |3-3(%4$s).",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_DEST = "%1$s применяет заклинание \"%2$s\".",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_SOURCE = "На |3-3(%4$s) накладывается эффект \"%2$s\".",
|
||||
ACTION_SPELL_CAST_SUCCESS_MASTER = "2",
|
||||
ACTION_SPELL_CAST_SUCCESS_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CREATE = "создает",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT = "\"%2$s\" |3-1(%1$s) создает предмет \"%4$s\"%6$s.",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT_NO_SOURCE = "\"%2$s\" создает \"%4$s\"%6$s.",
|
||||
ACTION_SPELL_CREATE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DAMAGE = "Попадание",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT = "\"%2$s\" |3-1(%1$s) наносит |3-2(%4$s) %5$s%6$s.",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT_NO_SOURCE = "\"%2$s\" наносит |3-2(%4$s) урон: %5$s. %6$s",
|
||||
ACTION_SPELL_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL = "Развеивание",
|
||||
ACTION_SPELL_DISPEL_BUFF = "Развеивание",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT = "%5$s |3-1(%4$s) рассеивается заклинанием \"%2$s\" |3-1(%1$s).\"",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT_NO_SOURCE = "\"%2$s\" рассеивает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_DISPEL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_DEBUFF = "Очищение",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT = "\"%2$s\" |3-1(%1$s) очищает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT_NO_SOURCE = "\"%2$s\" очищает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_FAILED = "Не удалось развеять.",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT = "Заклинанию |3-1(%1$s) \"%2$s\" не удалось развеять заклинание |3-1(%4$s) \"%5$s\".",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT_NO_SOURCE = "Заклинанию \"%2$s\" не удается развеять заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_DISPEL_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DRAIN = "Похищение",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT = "\"%1$s\" |3-1(%2$s) отнимает %9$s |4единицу:единицы:единиц; |3-1(%8$s) у |3-1(%4$s).",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT_NO_SOURCE = " %2$s отнимает у |3-1(%4$s) %9$s |4единицу:единицы:единиц; |3-1(%8$s ).",
|
||||
ACTION_SPELL_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE = "Повреждение предмета",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL = "Повреждение всех предметов",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_FULL_TEXT = "\"%2$s\" |3-1(%1$s) наносит урон |3-2(%4$s): повреждаются все предметы.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_FULL_TEXT = "\"%2$s\" |3-1(%1$s) наносит урон |3-2(%4$s). Поврежден предмет: %5$s.",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE = "Энергия",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT = "%4$s получает %9$s |4единицу:единицы:единиц; |3-1(%8$s) от заклинания \"%2$s\" |3-1(%1$s).\"",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s получает %9$s |4единицу:единицы:единиц; |3-1(%8$s) благодаря заклинанию \"%2$s\".",
|
||||
ACTION_SPELL_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE_RESULT = "Получено %9$s |4единица:единицы:единиц; %8$s",
|
||||
ACTION_SPELL_EXTRA_ATTACKS = "Дополнительные атаки",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT = "\"%2$s\" дает |3-2(\"%1$s) %9$s |4дополнительную атаку:дополнительных атаки:дополнительных атак;.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT_NO_SOURCE = "\"%2$s\" дает %9$s |4дополнительную атаку:дополнительных атаки:дополнительных атак;.",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_HEAL = "Лечение",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT = "\"%2$s\" |3-1(%1$s) исцеляет |3-3(%4$s) на %9$s |4единицу:единицы:единиц; здоровья%6$s.",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT_NO_SOURCE = "\"%2$s\" исцеляет |3-3(%4$s) на %9$s |4единицу:единицы:единиц; %6$s.",
|
||||
ACTION_SPELL_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL = "Убийство",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT = "\"%2$s\" |3-1(%1$s) мгновенно убивает |3-3(%4$s).",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT_NO_SOURCE = "\"%2$s\" мгновенно убивает |3-3(%4$s).",
|
||||
ACTION_SPELL_INSTAKILL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS = "нейтрализован",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT = "%1$s %2$s нейтрализует |3-3(%4$s).",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT_NO_SOURCE = "%2$s нейтрализует |3-3(%4$s).",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INTERRUPT = "прерывание",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT = "\"%2$s\" |3-1(%1$s) прерывает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT_NO_SOURCE = "\"%2$s\" прерывает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_INTERRUPT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH = "Похищение",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT = "\"%2$s\" |3-1(%1$s) отнимает %9$s |4единицу:единицы:единиц; |3-1(%8$s) из |3-1(%4$s). %1$s получает %10$s |4единицу:единицы:единиц; |3-1(%8$s).",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT_NO_SOURCE = "\"%2$s\" отнимает %9$s |4единицу:единицы:единиц; |3-1(%8$s) у |3-1(%4$s).",
|
||||
ACTION_SPELL_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH_RESULT = "Получено %10$s |4единица:единицы:единиц; |3-1(%8$s)",
|
||||
ACTION_SPELL_MISSED = "Промах",
|
||||
ACTION_SPELL_MISSED_ABSORB = "Поглощение",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT = "\"%2$s\" |3-1(%1$s) поглощается |3-4(%4$s)%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%4$s поглощает заклинание \"%2$s\"%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_BLOCK = "Блок",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT = "%4$s блокирует заклинание \"%2$s\" |3-1(%1$s)%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s блокирует заклинание \"%2$s\"%6$s.",
|
||||
ACTION_SPELL_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DEFLECT = "Отклонение",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT = "%4$s отклоняет заклинание \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%4$s отклоняет заклинание \"%2$s\".",
|
||||
ACTION_SPELL_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DODGE = "Уклонение",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT = "%4$s уклоняется от заклинания \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s уклоняется от заклинания \"%2$s\".",
|
||||
ACTION_SPELL_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_EVADE = "Атака не достигла цели",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT = "Заклинание \"%2$s\" |3-1(%1$s) не достигает |3-1(%4$s).",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT_NO_SOURCE = "Заклинание \"%2$s\" не достигает |3-1(%4$s).",
|
||||
ACTION_SPELL_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT = "\"%2$s\" |3-1(%1$s) не попадает по |3-2(%4$s).",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT_NO_SOURCE = "\"%2$s\" не попадает по |3-2(%4$s).",
|
||||
ACTION_SPELL_MISSED_IMMUNE = "Невосприимчивость",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT = "%4$s обладает невосприимчивостью к заклинанию \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%4$s обладает невосприимчивостью к заклинанию \"%2$s\".",
|
||||
ACTION_SPELL_MISSED_MISFIRE = "Промах",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT = "\"%1$s\" |3-1(%2$s) не попадает по |3-2(%4$s).",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT_NO_SOURCE = "\"%2$s\" не попадает по |3-2(%4$s).",
|
||||
ACTION_SPELL_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_MISS = "Промах",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT = "\"%2$s\" |3-1(%1$s) не попадает по |3-2(%4$s).",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT_NO_SOURCE = "\"%2$s\" не попадает по |3-2(%4$s).",
|
||||
ACTION_SPELL_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_PARRY = "Парирование",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT = "%4$s парирует способность \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s парирует способность \"%2$s\".",
|
||||
ACTION_SPELL_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_REFLECT = "отражение",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT = "%4$s отражает заклинание \"%2$s\" |3-1(%1$s).",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT_NO_SOURCE = "%4$s отражает заклинание \"%2$s\".",
|
||||
ACTION_SPELL_MISSED_RESIST = "сопротивление",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT = "%4$s полностью сопротивляется заклинанию \"%2$s\" |3-1(%1$s)%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%4$s полностью сопротивляется заклинанию \"%2$s\"%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE = "Урон",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT = "\"%2$s\" |3-1(%1$s) наносит |3-2(%4$s) %5$s%6$s.",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT_NO_SOURCE = "%4$s получает %5$s от заклинания \"%2$s\"%6$s.",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DRAIN = "Похищение",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT = "\"%1$s\" |3-1(%2$s) отнимает %9$s |4единицу:единицы:единиц; |3-1(%8$s) у |3-1(%4$s).",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT_NO_SOURCE = "\"%2$s\" отнимает %9$s |4единицу:единицы:единиц; |3-1(%8$s) у |3-1(%4$s).",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE = "Энергия",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT = "%4$s получает %9$s |4единицу:единицы:единиц; |3-1(%8$s) от заклинания \"%2$s\" |3-1(%1$s).\"",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s получает %9$s |4единицу:единицы:единиц; |3-1(%8$s) благодаря заклинанию \"%2$s\".",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_RESULT = "%8$s: +$extraAmount",
|
||||
ACTION_SPELL_PERIODIC_HEAL = "Лечение",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT = "%4$s получает %9$s |4единицу:единицы:единиц; здоровья от заклинания \"%2$s\" |3-1(%1$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT_NO_SOURCE = "%4$s получает %9$s |4единицу:единицы:единиц; здоровья от заклинания \"%2$s\". %6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH = "Похищение",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT = "\"%2$s\" |3-1(%1$s) отнимает %9$s |4единицу:единицы:единиц; |3-1(%8$s) из |3-1(%4$s). %1$s получает %10$s |4единицу:единицы:единиц; |3-1(%8$s).",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT_NO_SOURCE = "\"%2$s\" отнимает %9$s |4единицу:единицы:единиц; |3-1(%8$s) у |3-1(%4$s). %1$s получает %10$s |4единицу:единицы:единиц; |3-1(%8$s).",
|
||||
ACTION_SPELL_PERIODIC_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH_RESULT = " (Получено %10$s |4единица:единицы:единиц; |3-1(%8$s))",
|
||||
ACTION_SPELL_PERIODIC_MISSED = "Промах",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB = " (поглощение: %1$s)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT = "\"%2$s\" |3-1(%1$s) поглощается |3-4(%4$s)%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%4$s поглощает заклинание \"%2$s\"%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK = ": заклинание однократно блокировано",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT = "%4$s временно блокирует заклинание \"%2$s\" |3-1(%1$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%4$s на мгновение блокирует заклинание \"%2$s\"%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED = ": однократное отклонение",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT = "%4$s на мгновение отклоняет заклинание \"%2$s\" |3-1(%1$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT_NO_SOURCE = "%4$s на мгновение отклоняет заклинание \"%2$s\"%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE = ": однократное уклонение",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT = "%4$s на мгновение уклоняется от заклинания \"%2$s\" |3-1(%1$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%4$s на мгновение уклоняется от заклинания \"%2$s\"%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED = ": временно не достигает цели",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT = "Заклинание \"%2$s\" |3-1(%1$s) на мгновение не достигает |3-1(%4$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "Заклинание \"%2$s\" на мгновение не достигает |3-1(%4$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT = "\"%2$s\" |3-1(%1$s) временно не действует на |3-3(%4$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT_NO_SOURCE = "\"%2$s\" временно не действует на |3-3(%4$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE = ": цель невосприимчива",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT = "На |3-3(%4$s) не подействовало заклинание |3-1(%1$s) \"%2$s\". %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "На |3-3(%4$s) не подействовало заклинание \"%2$s\". %6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS = ": однократный промах",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT = "\"%2$s\" |3-1(%1$s) на мгновение перестает действовать на |3-1(%4$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT_NO_SOURCE = "\"%2$s\" на мгновение перестает действовать на |3-1(%4$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY = ": однократное парирование",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT = "%4$s на мгновение парирует заклинание \"%2$s\" |3-1(%1$s)%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%4$s на мгновение парирует заклинание \"%2$s\"%6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST = ": однократное сопротивление",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT = "\"%2$s\" |3-1(%1$s) не действует на |3-3(%4$s). %4$s сопротивляется заклинанию. %6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "\"%2$s\" не действует на |3-3(%4$s). %4$s сопротивляется заклинанию. %6$s.",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_RESURRECT = "воскрешено",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT = "%1$s воскрешает |3-3(%4$s)%6$s с помощью заклинания \"%2$s\".",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT_NO_SOURCE = "%2$s воскрешает %4$s%6$s.",
|
||||
ACTION_SPELL_RESURRECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN = "Похищение",
|
||||
ACTION_SPELL_STOLEN_BUFF = "Похищение",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT = "\"%2$s\" |3-1(%1$s) похищает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT_NO_SOURCE = "\"%2$s\" похищает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_STOLEN_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_BUFF__POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_DEBUFF = "Похищение",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT = "\"%2$s\" |3-1(%1$s) передает заклинание |3-1(%4$s) \"$extraSpell\" |3-2(%1$s).",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT_NO_SOURCE = "\"%2$s\" передает |3-2(%4$s) заклинание \"$extraSpell\".",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT = "\"%2$s\" |3-1(%1$s) похищает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT_NO_SOURCE = "\"%2$s\" похищает заклинание \"%5$s\" |3-1(%4$s).",
|
||||
ACTION_SPELL_STOLEN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_SUMMON = "призывает",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT = "\"%2$s\" |3-1(%1$s) призывает |3-3(%4$s)%6$s.",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT_NO_SOURCE = "%2$s призывает |3-3(%4$s)%6$s",
|
||||
ACTION_SPELL_SUMMON_POSSESSIVE = "1",
|
||||
ACTION_SWING = "Ближний бой",
|
||||
ACTION_SWING_DAMAGE = "Попадание",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT = "Атака ближнего боя |3-1(%1$s) наносит |3-2(%4$s) %5$s%6$s.",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT_NO_SOURCE = "Атака ближнего боя бьет по |3-2(%4$s) на %5$s%6$s.",
|
||||
ACTION_SWING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED = "Промах",
|
||||
ACTION_SWING_MISSED_ABSORB = ": поглощение",
|
||||
ACTION_SWING_MISSED_ABSORB_FULL_TEXT = "%4$s поглощает атаку |3-1(%1$s)%6$s",
|
||||
ACTION_SWING_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_BLOCK = ": выстрел блокирован",
|
||||
ACTION_SWING_MISSED_BLOCK_FULL_TEXT = "%4$s%6$s блокирует атаку |3-1(%1$s).",
|
||||
ACTION_SWING_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DEFLECT = ": выстрел отклонен",
|
||||
ACTION_SWING_MISSED_DEFLECT_FULL_TEXT = "%4$s отклоняет атаку |3-1(%1$s).",
|
||||
ACTION_SWING_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DODGE = ": уклонение",
|
||||
ACTION_SWING_MISSED_DODGE_FULL_TEXT = "%4$s уклоняется от атаки |3-1(%1$s).",
|
||||
ACTION_SWING_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_EVADE = ": атака не достигла цели",
|
||||
ACTION_SWING_MISSED_EVADE_FULL_TEXT = "Атака |3-1(%1$s) не достигает |3-1(%4$s).",
|
||||
ACTION_SWING_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_FULL_TEXT = "%1$s не попадает по |3-2(%4$s).",
|
||||
ACTION_SWING_MISSED_IMMUNE = ": цель невосприимчива",
|
||||
ACTION_SWING_MISSED_IMMUNE_FULL_TEXT = "%4$s обладает невосприимчивостью к атаке |3-1(%1$s).",
|
||||
ACTION_SWING_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISFIRE = "Промах.",
|
||||
ACTION_SWING_MISSED_MISFIRE_FULL_TEXT = "Атака |3-1(%1$s) не попадает по |3-2(%4$s).",
|
||||
ACTION_SWING_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISS = ": промах",
|
||||
ACTION_SWING_MISSED_MISS_FULL_TEXT = "%1$s не попадает по |3-2(%4$s).",
|
||||
ACTION_SWING_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_PARRY = ": выстрел парирован",
|
||||
ACTION_SWING_MISSED_PARRY_FULL_TEXT = "%4$s парирует атаку |3-1(%1$s).",
|
||||
ACTION_SWING_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_RESIST = ": сопротивление",
|
||||
ACTION_SWING_MISSED_RESIST_FULL_TEXT = "%4$s полностью сопротивляется атаке |3-1(%1$s)%6$s",
|
||||
ACTION_SWING_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_UNIT_BECCOMES_UNCONSCIOUS = "падает",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_FULL_TEXT = "%4$s падает.",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DESTROYED = "Уничтожение",
|
||||
ACTION_UNIT_DESTROYED_FULL_TEXT = "%4$s умирает.",
|
||||
ACTION_UNIT_DESTROYED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DIED = "умерли",
|
||||
ACTION_UNIT_DIED_FULL_TEXT = "%4$s погибает.",
|
||||
ACTION_UNIT_DIED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DISSIPATES = "рассеивается",
|
||||
ACTION_UNIT_DISSIPATES_FULL_TEXT = "%4$s рассеивается.",
|
||||
ACTION_UNIT_DISSIPATES_POSSESSIVE = "0",
|
||||
ADD = "Добавить",
|
||||
ADDITIONAL_FILTERS = "Дополнительные фильтры",
|
||||
ADD_FILTER = "Добавить",
|
||||
AURAS = "Ауры",
|
||||
AURAS_COMBATLOG_TOOLTIP = "Отображение сообщений о благотворных и вредоносных состояниях.",
|
||||
BENEFICIAL = "Защитные",
|
||||
BENEFICIAL_AURA_COMBATLOG_TOOLTIP = "Отображение сообщений о приобретении или потере благотворной ауры вашим персонажем.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_BOTH = "Все действия, касающиеся |3-1(%s)",
|
||||
BLIZZARD_COMBAT_LOG_MENU_EVERYTHING = "Показывать все",
|
||||
BLIZZARD_COMBAT_LOG_MENU_INCOMING = "Действия по отношению к |3-2(%s)?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING = "Действия |3-1(%s)",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING_ME = "Действия |3-1(%s) по отношению к вам",
|
||||
BLIZZARD_COMBAT_LOG_MENU_RESET = "Сброс",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SAVE = "Сохранить как новый фильтр",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE = "Скрывать подобные сообщения.",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK = "Отправить ссылку на \"%s\" в чат.",
|
||||
BY_SOURCE = "Источник",
|
||||
BY_SOURCE_COMBATLOG_TOOLTIP = "Цвет строки зависит от источника.",
|
||||
BY_TARGET = "Цель",
|
||||
BY_TARGET_COMBATLOG_TOOLTIP = "Цвет строки зависит от цели.",
|
||||
COLORIZE = "Цвета:",
|
||||
COLORS = "Цвета",
|
||||
COLOR_BY_SCHOOL = "Цвета школ",
|
||||
COMBATLOG_DEFAULTS = "По умолчанию",
|
||||
COMBATLOG_FILTER_STRING_CUSTOM_UNIT = "По выбору",
|
||||
COMBATLOG_FILTER_STRING_FRIENDLY_UNITS = "Друзья",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_PLAYERS = "Враждебные игроки",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_UNITS = "Индикаторы противников",
|
||||
COMBATLOG_FILTER_STRING_ME = "Я",
|
||||
COMBATLOG_FILTER_STRING_MY_PET = "Питомец",
|
||||
COMBATLOG_FILTER_STRING_NEUTRAL_UNITS = "Нейтральный",
|
||||
COMBATLOG_FILTER_STRING_UNKNOWN_UNITS = "Неизвестно",
|
||||
COMBATLOG_HIGHLIGHT_ABILITY = "Способность",
|
||||
COMBATLOG_HIGHLIGHT_DAMAGE = "Урон",
|
||||
COMBATLOG_HIGHLIGHT_KILL = "Убийства",
|
||||
COMBATLOG_HIGHLIGHT_SCHOOL = "Школы магии",
|
||||
COMBATLOG_UNKNOWN_UNIT = "Что-то",
|
||||
COMBAT_FACTION_CHANGE = "Репутация",
|
||||
COMBAT_HONOR_GAIN = "Честь",
|
||||
COMBAT_LOG_UNIT_YOU_ENABLED = "1",
|
||||
COMBAT_MISC_INFO = "Разное",
|
||||
COMBAT_XP_GAIN = "Опыт",
|
||||
CONFIRM_COMBAT_FILTER_DEFAULTS = "Вы действительно хотите сбросить настройки фильтров?",
|
||||
CONFIRM_COMBAT_FILTER_DELETE = "Удалить этот фильтр?",
|
||||
COPY_FILTER = "Копировать",
|
||||
DAMAGE_NUMBER = "Величина урона",
|
||||
DAMAGE_SCHOOL_TEXT = "Школа магии",
|
||||
DAMAGE_SHIELD = "Ответные повреждения",
|
||||
DAMAGE_SHIELD_COMBATLOG_TOOLTIP = "Отображение сообщений об уроне, наносимом заклинаниями или способностями в ответ на атаки в ближнем бою (\"Шипы\" и т. п.).",
|
||||
DEATHS_COMBATLOG_TOOLTIP = "Отображение сообщений о смерти различных существ.",
|
||||
DEFAULT_COMBATLOG_FILTER_NAME = "Фильтр %d",
|
||||
DISPELS = "Развеивание",
|
||||
DISPEL_AURA_COMBATLOG_TOOLTIP = "Отображение сообщений об исчезновении, разрушении или похищении аур.",
|
||||
DONE_BY = "Источник:",
|
||||
DONE_TO = "Цель:",
|
||||
DRAINS = "Похищение",
|
||||
ENTER_FILTER_NAME = "Введите название фильтра:",
|
||||
ENTIRE_LINE = "Вся строка",
|
||||
ENTIRE_LINE_COMBATLOG_TOOLTIP = "Цветовое выделение всей строки в соответствии с параметрами, указанными ниже.",
|
||||
ENVIRONMENTAL_DAMAGE = "Урон от окружающего мира",
|
||||
ENVIRONMENTAL_DAMAGE_COMBATLOG_TOOLTIP = "Отображение сообщений о получении разными персонажами урона от падения, утопления или погружения в лаву.",
|
||||
EXAMPLE_SPELL_FIREBALL = "Огненный шар",
|
||||
EXAMPLE_SPELL_FROSTBOLT = "Ледяная стрела",
|
||||
EXAMPLE_TARGET_MONSTER = "Монстр",
|
||||
EXAMPLE_TEXT = "Пример текста:",
|
||||
EXTRA_ATTACKS = "Дополнит. атаки",
|
||||
FAILURES = "Неудачное",
|
||||
FILTER_BY_ENEMIES_COMBATLOG_TOOLTIP = "Действия враждебных игроков, питомцев и существ.",
|
||||
FILTER_BY_FRIENDS_COMBATLOG_TOOLTIP = "Действия дружественных игроков, питомцев и существ.",
|
||||
FILTER_BY_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Действия враждебных игроков.",
|
||||
FILTER_BY_ME_COMBATLOG_TOOLTIP = "Действия вашего персонажа, а также его ловушек и заклинаний.",
|
||||
FILTER_BY_NEUTRAL_COMBATLOG_TOOLTIP = "Действия нейтральных существ.",
|
||||
FILTER_BY_PET_COMBATLOG_TOOLTIP = "Действия ваших питомцев, вызванных существ и подчиненных персонажей.",
|
||||
FILTER_BY_UNKNOWN_COMBATLOG_TOOLTIP = "Действия окружающего мира: падение, кислота, лава и т.п.",
|
||||
FILTER_NAME = "Название фильтра",
|
||||
FILTER_TO_FRIENDS_COMBATLOG_TOOLTIP = "Действия в отношении дружественных игроков, питомцев и существ.",
|
||||
FILTER_TO_HOSTILE_COMBATLOG_TOOLTIP = "Действия в отношении враждебных питомцев и существ.",
|
||||
FILTER_TO_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "Действия в отношении враждебных игроков.",
|
||||
FILTER_TO_ME_COMBATLOG_TOOLTIP = "Действия в отношении вашего персонажа.",
|
||||
FILTER_TO_NEUTRAL_COMBATLOG_TOOLTIP = "Действия в отношении нейтральных существ.",
|
||||
FILTER_TO_PET_COMBATLOG_TOOLTIP = "Действия в отношении ваших питомцев, вызванных существ и подчиненных персонажей.",
|
||||
FILTER_TO_UNKNOWN_COMBATLOG_TOOLTIP = "Действия в отношении невидимых целей.",
|
||||
FORMATTING = "Формат",
|
||||
FULL_TEXT_COMBATLOG_TOOLTIP = "Показывать записи журнала боя в полном виде.",
|
||||
HARMFUL_AURA_COMBATLOG_TOOLTIP = "Отображение сообщений о приобретении или потере губительной ауры вашим персонажем.",
|
||||
HEALS = "Лечение",
|
||||
HIGHLIGHTING = "Подсветка:",
|
||||
HIGHLIGHT_ABILITY_COMBATLOG_TOOLTIP = "Подсветка названий способностей в боевых сообщениях.",
|
||||
HIGHLIGHT_DAMAGE_COMBATLOG_TOOLTIP = "Подсветка величины урона в боевых сообщениях.",
|
||||
HIGHLIGHT_KILL_COMBATLOG_TOOLTIP = "Подсветка всей строки при убийстве противника вами или другим членом вашей группы.",
|
||||
HIGHLIGHT_SCHOOL_COMBATLOG_TOOLTIP = "Подсветка названий школ магии в боевых сообщениях.",
|
||||
HOSTILE = "Губительные",
|
||||
INTERRUPTS = "Прерывание",
|
||||
ITEM_NAMES = "Названия предметов",
|
||||
ITEM_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Заключение в скобки названий предметов.",
|
||||
KILLS_COMBATLOG_TOOLTIP = "Отображение сообщений об убийстве противников членами вашей группы.",
|
||||
MELEE = "Ближний бой",
|
||||
MELEE_COMBATLOG_TOOLTIP = "Отображение информации об ударах ближнего боя.",
|
||||
MESSAGE_SOURCES = "Источники сообщений",
|
||||
MISSES = "Промах",
|
||||
MOVE_FILTER_DOWN = "Переместить ниже",
|
||||
MOVE_FILTER_UP = "Переместить выше",
|
||||
OTHER = "Другое",
|
||||
PERIODIC = "Периодические эффекты",
|
||||
POWER_GAINS = "Получение энергии",
|
||||
POWER_GAINS_COMBATLOG_TOOLTIP = "Отображение сообщений о восполнении маны, энергии, ярости, концентрации, энергии ци, энергии Света или сфер Тьмы с помощью заклинаний или способностей.",
|
||||
QUICKBUTTON_NAME_EVERYTHING = "Все",
|
||||
QUICKBUTTON_NAME_EVERYTHING_TOOLTIP = "Отображение всех сообщений о бое.",
|
||||
QUICKBUTTON_NAME_KILLS = "Убийства",
|
||||
QUICKBUTTON_NAME_KILLS_TOOLTIP = "Показ всех смертей и убийств.",
|
||||
QUICKBUTTON_NAME_ME = "Что случилось с персонажем?",
|
||||
QUICKBUTTON_NAME_ME_TOOLTIP = "Отображение всех действий в отношении вашего персонажа.",
|
||||
QUICKBUTTON_NAME_SELF = "Персонаж",
|
||||
QUICKBUTTON_NAME_SELF_TOOLTIP = "Отображение сообщений о действиях вашего персонажа и в отношении него.",
|
||||
QUICK_BUTTON_COMBATLOG_TOOLTIP = "Помещение ссылки на фильтр в окно чата.",
|
||||
RANGED = "Дальний бой",
|
||||
RANGED_COMBATLOG_TOOLTIP = "Природа",
|
||||
RANGE_DAMAGE_COMBATLOG_TOOLTIP = "Отображение информации об атаках дальнего боя, наносящих полный или частичный урон.",
|
||||
RANGE_MISSED_COMBATLOG_TOOLTIP = "Отображение информации об атаках дальнего боя, не наносящих урона.",
|
||||
RESURRECT = "Воскрешений",
|
||||
SETTINGS = "Параметры",
|
||||
SHOW_BRACES = "Выделять скобками",
|
||||
SHOW_BRACES_COMBATLOG_TOOLTIP = "Выделение ссылок в сообщениях журнала боя.",
|
||||
SHOW_QUICK_BUTTON = "Быстрый вызов",
|
||||
SHOW_TIMESTAMP = "Отображать время",
|
||||
SOURCE = "Источник:",
|
||||
SPECIAL = "Особые",
|
||||
SPELLS_COMBATLOG_TOOLTIP = "Отображение сообщений о заклинаниях и особых способностях.",
|
||||
SPELL_CASTING = "Применение заклинаний",
|
||||
SPELL_CASTING_COMBATLOG_TOOLTIP = "Отображение сообщений о применении заклинаний.",
|
||||
SPELL_CAST_FAILED_COMBATLOG_TOOLTIP = "Отображение сообщений о невозможности применения заклинаний.",
|
||||
SPELL_CAST_START_COMBATLOG_TOOLTIP = "Отображение сообщений о начале применения заклинаний.",
|
||||
SPELL_CAST_SUCCESS_COMBATLOG_TOOLTIP = "Отображение сообщений об успешном завершении заклинаний.",
|
||||
SPELL_COLOR_BY_SCHOOL_COMBATLOG_TOOLTIP = "Цветовое выделение названий заклинаний в соответствии с школами магии.",
|
||||
SPELL_DAMAGE_COMBATLOG_TOOLTIP = "Отображение сообщений о нанесении урона заклинаниями или способностями.",
|
||||
SPELL_DAMAGE_NUMBER_COMBATLOG_TOOLTIP = "Цветовое выделение величины урона (кроме ближнего боя).",
|
||||
SPELL_DAMAGE_SCHOOL_COMBATLOG_TOOLTIP = "Цветовое выделение школ урона (\"Темной магии\" и т.п.)",
|
||||
SPELL_DRAIN_COMBATLOG_TOOLTIP = "Отображение сообщений о снижении объема маны, энергии, ярости и концентрации под влиянием заклинаний или способностей.",
|
||||
SPELL_EXTRA_ATTACKS_COMBATLOG_TOOLTIP = "Отображение сообщений о дополнительных атаках, вызванных заклинаниями или способностями.",
|
||||
SPELL_HEAL_COMBATLOG_TOOLTIP = "Отображение сообщений об исцеляющих заклинаниях и способностях.",
|
||||
SPELL_INSTAKILL_COMBATLOG_TOOLTIP = "Отображение сообщений об особых заклинаниях: например, повреждающих экипировку или наносящих урон питомцам.",
|
||||
SPELL_INTERRUPT_COMBATLOG_TOOLTIP = "Отображение сообщений о прерывании заклинаниями или способностями действия других заклинаний.",
|
||||
SPELL_MISSED_COMBATLOG_TOOLTIP = "Отображение сообщений о неудачном применении боевых заклинаний и способностей, в т.ч., связанном с уклонением, парированием, блоком, отражением, невосприимчивостью, поглощением и уверткой.",
|
||||
SPELL_NAMES = "Названия заклинаний",
|
||||
SPELL_NAMES_COMBATLOG_TOOLTIP = "Цветовое выделение названий заклинаний.",
|
||||
SPELL_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Заключение в скобки названий заклинаний.",
|
||||
SPELL_PERIODIC_COMBATLOG_TOOLTIP = "Отображение информации о заклинаниях постепенного действия.",
|
||||
SPELL_PERIODIC_DAMAGE_COMBATLOG_TOOLTIP = "Отображение сообщений о периодическом уроне от заклинаний или способностей (\"Слово Тьмы: Боль\", \"Порча\" и т. п.).",
|
||||
SPELL_PERIODIC_HEAL_COMBATLOG_TOOLTIP = "Отображение сообщений о периодическом исцелении от заклинаний или способностей (\"Обновление\", \"Омоложение\" и т. п.).",
|
||||
SPELL_PERIODIC_MISSED_COMBATLOG_TOOLTIP = "Отображение сообщений о частично неудачном применении боевых заклинаний и способностей, в т.ч., связанных с невосприимчивостью, поглощением и уверткой.",
|
||||
SPELL_PERIODIC_OTHER_COMBATLOG_TOOLTIP = "Отображение сообщений о других видах периодических эффектов заклинаний и способностей, например, восполнении или похищении маны.",
|
||||
SPELL_RESURRECT_COMBATLOG_TOOLTIP = "Показывать сообщения о воскрешении игрока или существа с помощью заклинания или способности.",
|
||||
SPELL_SUMMON_COMBATLOG_TOOLTIP = "Показывать сообщения, когда с помощью заклинания призывается существо.",
|
||||
START = "Начало",
|
||||
STRING_SCHOOL_UNKNOWN = "Неизвестно",
|
||||
SUCCESS = "Успешное",
|
||||
SUMMONS = "Призывов",
|
||||
SWING_DAMAGE_COMBATLOG_TOOLTIP = "Отображение информации об ударах в ближнем бою, наносящих полный или частичный урон.",
|
||||
SWING_MISSED_COMBATLOG_TOOLTIP = "Отображение атак в ближнем бою, не наносящих урона.",
|
||||
TEXT_MODE_A = "A",
|
||||
TEXT_MODE_A_STRING_1 = "%s %s %s %s %s. %s %11$s",
|
||||
TEXT_MODE_A_STRING_2 = "%2$s |3-1(%1$s) - %3$s - %4$s - %5$s%6$s.",
|
||||
TEXT_MODE_A_STRING_3 = "%1$s %5$s %3$s %4$s %2$s. %6$s",
|
||||
TEXT_MODE_A_STRING_ACTION = "|Haction:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_BRACE_ITEM = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_SPELL = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_UNIT = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_DEST_ICON = "|Hicon:%d:dest|h%s|h",
|
||||
TEXT_MODE_A_STRING_DEST_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_ITEM = "|Hitem:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_POSSESSIVE = "%s",
|
||||
TEXT_MODE_A_STRING_REMAINING_POINTS = "Осталось: %s",
|
||||
TEXT_MODE_A_STRING_RESULT_ABSORB = "Поглощено: %s ед. урона.",
|
||||
TEXT_MODE_A_STRING_RESULT_BLOCK = "Заблокировано: %s ед. урона.",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL = ": критический эффект",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL_SPELL = ": критический эффект",
|
||||
TEXT_MODE_A_STRING_RESULT_CRUSHING = ": сокрушительный удар",
|
||||
TEXT_MODE_A_STRING_RESULT_FORMAT = "$resultAmount $resultType",
|
||||
TEXT_MODE_A_STRING_RESULT_GLANCING = ": удар пришелся вскользь",
|
||||
TEXT_MODE_A_STRING_RESULT_MULTISTRIKE = "Многократная атака.",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERENERGIZE = "(%s: перенасыщение энергией)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERHEALING = "Избыточное лечение: %s.",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERKILLING = " (избыточный урон: %s)",
|
||||
TEXT_MODE_A_STRING_RESULT_PARRY = "Парировано: %d.",
|
||||
TEXT_MODE_A_STRING_RESULT_REFLECT = "Атака отражена",
|
||||
TEXT_MODE_A_STRING_RESULT_RESIST = " (сопротивление %s |4единице:единицам:единицам; урона)",
|
||||
TEXT_MODE_A_STRING_RESULT_VULNERABILITY = " (%s |4единица:единицы:единиц; урона за счет уязвимости)",
|
||||
TEXT_MODE_A_STRING_SOURCE_ICON = "|Hicon:%s:source|h%s|h",
|
||||
TEXT_MODE_A_STRING_SOURCE_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL_EXTRA = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_TIMESTAMP = "%s> %s",
|
||||
TEXT_MODE_A_STRING_VALUE_SCHOOL = "%s (%s)",
|
||||
TEXT_MODE_A_STRING_VALUE_TYPE = "%s (%s)",
|
||||
TEXT_MODE_A_TIMESTAMP = "%H:%M:%S",
|
||||
TIMESTAMP_COMBATLOG_TOOLTIP = "Отображение даты и времени в сообщениях журнала боя.",
|
||||
UNIT_COLORS = "Цвета объектов:",
|
||||
UNIT_NAMES = "Объект действия",
|
||||
UNIT_NAMES_COMBATLOG_TOOLTIP = "Цветовое выделение названий объектов.",
|
||||
UNIT_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "Заключение в скобки названий объектов.",
|
||||
UNIT_YOU = "Вы",
|
||||
UNIT_YOU_DEST = "Вы",
|
||||
UNIT_YOU_DEST_POSSESSIVE = "Ваш",
|
||||
UNIT_YOU_SOURCE = "Вы",
|
||||
UNIT_YOU_SOURCE_POSSESSIVE = "Ваше",
|
||||
USE_FULL_TEXT_MODE = "Использовать полный режим",
|
||||
}
|
||||
Vendored
+677
@@ -0,0 +1,677 @@
|
||||
-- Classic Era GlobalStrings (CN) that the combat log reads
|
||||
-- and the 1.12 client lacks. Generated; do not edit by hand.
|
||||
pfUI_locale["zhCN"]["combatlog"] = {
|
||||
ACTION_DAMAGE_SHIELD = "伤害",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT = "%1$s%2$s将%9$s点%7$s伤害反射给%4$s。%6$s",
|
||||
ACTION_DAMAGE_SHIELD_FULL_TEXT_NO_SOURCE = "%2$s将%9$s点%7$s伤害反射给%4$s。%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED = "未命中",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK = "(格挡)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT = "%1$s%2$s被%4$s格挡了。%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s被%4$s格挡了。%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT = "(偏转)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT = "%1$s%2$s被%4$s偏转了。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%2$s被%4$s偏转了。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE = "(躲闪)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT = "%1$s%2$s被%4$s躲闪了。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s被%4$s躲闪了。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED = "(闪避)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT = "%1$s%2$s被%4$s闪避了。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%2$s被%4$s闪避了。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT = "%1$s%2$s未命中%4$s。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_FULL_TEXT_NO_SOURCE = "%2$s未命中%4$s。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE = "(免疫)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT = "%1$s%2$s失败。%4$s对此免疫。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s失败。%4$s对此免疫。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS = "(未命中)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT = "%1$s%2$s未命中%4$s。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s未命中%4$s。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY = "(招架)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT = "%1$s%2$s被%4$s招架了。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s被%4$s招架了。",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST = "(抵抗)",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT = "%1$s%2$s被%4$s完全抵抗了。%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s被%4$s完全抵抗了。%6$s",
|
||||
ACTION_DAMAGE_SHIELD_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SHIELD_POSSESSIVE = "1",
|
||||
ACTION_DAMAGE_SPLIT = "分担伤害",
|
||||
ACTION_DAMAGE_SPLIT_ABSORBED_FULL_TEXT = "%4$s %6$s吸收了%1$s的%2$s点伤害。",
|
||||
ACTION_DAMAGE_SPLIT_FULL_TEXT = "%1$s%2$s对%4$s$s造成%9$s点伤害。",
|
||||
ACTION_DAMAGE_SPLIT_POSSESSIVE = "0",
|
||||
ACTION_DAMAGE_SPLIT_RESULT_FULL_TEXT = "%1$s的%2$s对%4$s %6$s造成%9$s点伤害。",
|
||||
ACTION_ENCHANT_APPLIED = "附魔",
|
||||
ACTION_ENCHANT_APPLIED_FULL_TEXT = "%1$s在%4$s%5$s上施放了%2$s。",
|
||||
ACTION_ENCHANT_APPLIED_POSSESSIVE = "0",
|
||||
ACTION_ENCHANT_REMOVED = "附魔消失",
|
||||
ACTION_ENCHANT_REMOVED_FULL_TEXT = "%2$s从%4$s%5$s上消失了。",
|
||||
ACTION_ENCHANT_REMOVED_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE = "伤害",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING = "溺水",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_FULL_TEXT = "%4$s溺水,损失了%9$s点生命值。",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_DROWNING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING = "掉落",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_FULL_TEXT = "%4$s受到%9$s点掉落伤害。",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FALLING_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE = "疲倦",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_FULL_TEXT = "%4$s筋疲力尽,损失了%9$s点生命值。",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FATIGUE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE = "火焰",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_FULL_TEXT = "%4$s受到了%9$s点火焰伤害。",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FIRE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_FULL_TEXT = "%4$s因环境伤害而损失了%9$s点生命值。",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA = "岩浆",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_FULL_TEXT = "%4$s在岩浆中,损失了%9$s点生命值。%6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_LAVA_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_POSSESSIVE = "0",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME = "淤泥",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_FULL_TEXT = "%4$s在淤泥中,损失了%9$s点生命值。%6$s",
|
||||
ACTION_ENVIRONMENTAL_DAMAGE_SLIME_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL = "杀死了",
|
||||
ACTION_PARTY_KILL_FULL_TEXT = "%1$s杀死了%4$s!",
|
||||
ACTION_PARTY_KILL_POSSESSIVE = "0",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS = "被击昏",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_FULL_TEXT = "%1$s击昏了%4$s!",
|
||||
ACTION_PARTY_KILL_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_RANGED = "射击",
|
||||
ACTION_RANGE_DAMAGE = "命中",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT = "%1$s远程射击命中%4$s造成了%5$s伤害。%6$s",
|
||||
ACTION_RANGE_DAMAGE_FULL_TEXT_NO_SOURCE = "一次远程射击命中%4$s造成了%5$s伤害。%6$s",
|
||||
ACTION_RANGE_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED = "未命中",
|
||||
ACTION_RANGE_MISSED_ABSORB = "(吸收)",
|
||||
ACTION_RANGE_MISSED_ABSORB_FULL_TEXT = "%1$s射击被%4$s吸收了。%6$s",
|
||||
ACTION_RANGE_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_BLOCK = "(格挡)",
|
||||
ACTION_RANGE_MISSED_BLOCK_FULL_TEXT = "%1$s射击被%4$s格挡了。%6$s",
|
||||
ACTION_RANGE_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DEFLECT = "(偏转)",
|
||||
ACTION_RANGE_MISSED_DEFLECT_FULL_TEXT = "%1$s射击被%4$s偏转了。",
|
||||
ACTION_RANGE_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_DODGE = "(躲闪)",
|
||||
ACTION_RANGE_MISSED_DODGE_FULL_TEXT = "%1$s射击被%4$s躲闪了。",
|
||||
ACTION_RANGE_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_EVADE = "(闪避)",
|
||||
ACTION_RANGE_MISSED_EVADE_FULL_TEXT = "%1$s射击被%4$s闪避了。",
|
||||
ACTION_RANGE_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_FULL_TEXT = "%1$s射击未命中%4$s。",
|
||||
ACTION_RANGE_MISSED_IMMUNE = "(免疫)",
|
||||
ACTION_RANGE_MISSED_IMMUNE_FULL_TEXT = "%1$s射击失败。%4$s对此免疫。",
|
||||
ACTION_RANGE_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISFIRE = "(未命中)",
|
||||
ACTION_RANGE_MISSED_MISFIRE_FULL_TEXT = "%1$s射击未命中%4$s。",
|
||||
ACTION_RANGE_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_MISS = "(未命中)",
|
||||
ACTION_RANGE_MISSED_MISS_FULL_TEXT = "%1$s射击未命中%4$s。",
|
||||
ACTION_RANGE_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_PARRY = "(招架)",
|
||||
ACTION_RANGE_MISSED_PARRY_FULL_TEXT = "%1$s射击被%4$s招架了。",
|
||||
ACTION_RANGE_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_POSSESSIVE = "1",
|
||||
ACTION_RANGE_MISSED_RESIST = "(抵抗)",
|
||||
ACTION_RANGE_MISSED_RESIST_FULL_TEXT = "%1$s射击被%4$s完全抵抗了。%6$s",
|
||||
ACTION_RANGE_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED = "附加",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF = "获得",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT = "%4$s获得了%1$s%2$s。",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_FULL_TEXT_NO_SOURCE = "%4$s获得了%2$s。",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT = "%4$s获得了%1$s %2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s获得了%2$s. %11$s",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF = "影响",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT = "%4$s受到了%1$s%2$s的影响。",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s受到了%2$s的影响。",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT = "%4$s受到了%1$s %2$s. %11$s的影响",
|
||||
ACTION_SPELL_AURA_APPLIED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%4$s受到了%2$s. %11$s的影响",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE = "堆叠",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF = "堆叠",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT = "%4$s获得了%1$s%2$s(%9$s)。",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%4$s获得了%2$s(%9$s)。",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF = "影响",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT = "%4$s受到了%1$s%2$s的影响(%9$s)。",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s受到了%2$s的影响(%9$s)。",
|
||||
ACTION_SPELL_AURA_APPLIED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_APPLIED_MASTER = "2",
|
||||
ACTION_SPELL_AURA_APPLIED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN = "打破",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF = "打破",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT = "%1$s打破了%4$s%2$s。",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_FULL_TEXT_NO_SOURCE = "%1$s%2$s被某目标打破了。",
|
||||
ACTION_SPELL_AURA_BROKEN_BUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF = "打破",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT = "%1$s打破了%4$s%2$s。",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%1$s%2$s被某目标打破了。",
|
||||
ACTION_SPELL_AURA_BROKEN_DEBUFF_POSSESSIVE = "0",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF = "打破",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT = "%1$s的%5$s打破了%4$s%2$s。",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_FULL_TEXT_NO_SOURCE = "%5$s打破了%4$s%2$s。",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF = "打破",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT = "%1$s的%5$s打破了%4$s%2$s。",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_FULL_TEXT_NO_SOURCE = "%5$s打破了%4$s%2$s。",
|
||||
ACTION_SPELL_AURA_BROKEN_SPELL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH = "被刷新",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF = "被刷新",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT = "%1$s%2$s在%4$s身上刷新了。",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_FULL_TEXT_NO_SOURCE = "%2$s在%4$s身上刷新了。",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s在%4$s. %11$s身上刷新了",
|
||||
ACTION_SPELL_AURA_REFRESH_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s在%4$s. %11$s的身上刷新了",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF = "被刷新",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT = "%1$s%2$s在%4$s身上刷新了。",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s在%4$s身上刷新了。",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_MASTER = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s在%4$s. %11$s身上刷新了",
|
||||
ACTION_SPELL_AURA_REFRESH_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s在%4$s. %11$s的身上刷新了",
|
||||
ACTION_SPELL_AURA_REFRESH_MASTER = "2",
|
||||
ACTION_SPELL_AURA_REMOVED = "移除",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF = "消失",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT = "%1$s%2$s从%4$s身上消失了。",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_FULL_TEXT_NO_SOURCE = "%2$s从%4$s身上消失了。",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s从%4$s. %11$s身上消失了",
|
||||
ACTION_SPELL_AURA_REMOVED_BUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s从%4$s. %11$s的身上消失了",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF = "消散",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT = "%1$s%2$s从%4$s身上消散了。",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s从%4$s身上消散了。",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT = "%1$s %2$s从%4$s. %11$s身上消散了",
|
||||
ACTION_SPELL_AURA_REMOVED_DEBUFF_WITH_POINTS_FULL_TEXT_NO_SOURCE = "%2$s从%4$s. %11$s的身上消散了",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE = "降低",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF = "降低",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT = "%1$s%2$s(%9$s)衰减了。",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_FULL_TEXT_NO_SOURCE = "%2$s(%9$s)衰减了。",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF = "衰减",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT = "%1$s%2$s(%9$s)消退了。",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s(%9$s)消退了。",
|
||||
ACTION_SPELL_AURA_REMOVED_DOSE_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT = "%1$s%2$s被从%4$s身上移除了。",
|
||||
ACTION_SPELL_AURA_REMOVED_FULL_TEXT_NO_SOURCE = "%1$s%2$s被从%4$s身上移除了。",
|
||||
ACTION_SPELL_AURA_REMOVED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE = "打击",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT = "%1$s%2$s打击%4$s造成了%5$s伤害。%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s打击%4$s造成了%5$s伤害。%6$s",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_BUILDING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_BUILDING_HEAL = "修理",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT = "%1$s%2$s修理%4$s,恢复了%9$s点生命值。%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_FULL_TEXT_NO_SOURCE = "%2$s修理%4$s,恢复了%9$s点生命值。%6$s",
|
||||
ACTION_SPELL_BUILDING_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_FAILED = "失败",
|
||||
ACTION_SPELL_CAST_FAILED_FULL_TEXT = "%1$s%2$s未能施放。%6$s",
|
||||
ACTION_SPELL_CAST_FAILED_MASTER = "1",
|
||||
ACTION_SPELL_CAST_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_CAST_START = "开始施放",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT = "%1$s开始向%4$s施放%2$s。",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_DEST = "%1$s开始施放%2$s。",
|
||||
ACTION_SPELL_CAST_START_FULL_TEXT_NO_SOURCE = "某物体开始对%4$s施放%2$s。",
|
||||
ACTION_SPELL_CAST_START_MASTER = "2",
|
||||
ACTION_SPELL_CAST_START_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CAST_SUCCESS = "施放",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT = "%1$s向%4$s施放了%2$s。",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_DEST = "%1$s施放了%2$s。",
|
||||
ACTION_SPELL_CAST_SUCCESS_FULL_TEXT_NO_SOURCE = "某目标对%4$s施放了%2$s。",
|
||||
ACTION_SPELL_CAST_SUCCESS_MASTER = "2",
|
||||
ACTION_SPELL_CAST_SUCCESS_POSSESSIVE = "0",
|
||||
ACTION_SPELL_CREATE = "制造",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT = "%1$s%2$s制造了一个%4$s。%6$s",
|
||||
ACTION_SPELL_CREATE_FULL_TEXT_NO_SOURCE = "%2$s制造了一个%4$s。%6$s",
|
||||
ACTION_SPELL_CREATE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DAMAGE = "命中",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT = "%1$s%2$s命中%4$s造成%5$s伤害。%6$s",
|
||||
ACTION_SPELL_DAMAGE_FULL_TEXT_NO_SOURCE = "%2$s命中%4$s,造成%5$s点伤害。%6$s",
|
||||
ACTION_SPELL_DAMAGE_MASTER = "1",
|
||||
ACTION_SPELL_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL = "驱散",
|
||||
ACTION_SPELL_DISPEL_BUFF = "驱散",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT = "%4$s%5$s被%1$s%2$s驱散了。",
|
||||
ACTION_SPELL_DISPEL_BUFF_FULL_TEXT_NO_SOURCE = "%4$s%5$s被%2$s驱散了。",
|
||||
ACTION_SPELL_DISPEL_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_DEBUFF = "净化",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT = "%4$s%5$s被%1$s%2$s净化了。",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_FULL_TEXT_NO_SOURCE = "%4$s%5$s被%2$s净化了。",
|
||||
ACTION_SPELL_DISPEL_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_FAILED = "驱散失败",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT = "%1$s%2$s未能驱散%4$s%5$s。",
|
||||
ACTION_SPELL_DISPEL_FAILED_FULL_TEXT_NO_SOURCE = "%2$s未能驱散%4$s%5$s。",
|
||||
ACTION_SPELL_DISPEL_FAILED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DISPEL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DRAIN = "吸取",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT = "%1$s%2$s从%4$s身上吸取了%9$s点%8$s。",
|
||||
ACTION_SPELL_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s从%4$s身上吸取了%9$s点%8$s。",
|
||||
ACTION_SPELL_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE = "耐久度下降",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL = "完全耐久度下降",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_FULL_TEXT = "%1$s%2$s对%4$s造成伤害:所有装备受损。",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_ALL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_FULL_TEXT = "%1$s%2$s对%4$s造成伤害:%5$s受损。",
|
||||
ACTION_SPELL_DURABILITY_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE = "补充",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT = "%4$s因%1$s%2$s获得了%9$s点%8$s。",
|
||||
ACTION_SPELL_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s因%2$s获得了%9$s点%8$s。",
|
||||
ACTION_SPELL_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_ENERGIZE_RESULT = "获得%9$s点%8$s",
|
||||
ACTION_SPELL_EXTRA_ATTACKS = "获得额外攻击",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT = "%1$s通过%2$s获得了%9$s次额外攻击。",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_FULL_TEXT_NO_SOURCE = "通过%2$s获得%9$s次额外攻击。",
|
||||
ACTION_SPELL_EXTRA_ATTACKS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_HEAL = "治疗",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT = "%1$s%2$s为%4$s恢复了%9$s点生命值。%6$s",
|
||||
ACTION_SPELL_HEAL_FULL_TEXT_NO_SOURCE = "%2$s为%4$s恢复了%9$s点生命值。%6$s",
|
||||
ACTION_SPELL_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL = "杀死了",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT = "%1$s%2$s杀死了%4$s。",
|
||||
ACTION_SPELL_INSTAKILL_FULL_TEXT_NO_SOURCE = "%2$s杀死了%4$s。",
|
||||
ACTION_SPELL_INSTAKILL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS = "被击昏",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT = "%1$s %2$s击昏了%4$s。",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_FULL_TEXT_NO_SOURCE = "%2$s击昏了%4$s。",
|
||||
ACTION_SPELL_INSTAKILL_UNCONSCIOUS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_INTERRUPT = "打断",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT = "%1$s%2$s打断了%4$s%5$s。",
|
||||
ACTION_SPELL_INTERRUPT_FULL_TEXT_NO_SOURCE = "%2$s打断了%4$s%5$s。",
|
||||
ACTION_SPELL_INTERRUPT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH = "吸取",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT = "%1$s%2$s从%4$s身上吸取了%9$s点%8$s。%1$s获得了%10$s点%8$s。",
|
||||
ACTION_SPELL_LEECH_FULL_TEXT_NO_SOURCE = "%2$s从%4$s身上吸取了%9$s点%8$s。",
|
||||
ACTION_SPELL_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_LEECH_RESULT = "获得%10$s点%8$s",
|
||||
ACTION_SPELL_MISSED = "未命中",
|
||||
ACTION_SPELL_MISSED_ABSORB = "被吸收",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT = "%1$s%2$s被%4$s吸收了。%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s被%4$s吸收了。%6$s",
|
||||
ACTION_SPELL_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_BLOCK = "被格挡",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT = "%1$s%2$s被%4$s格挡了。%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s被%4$s格挡了。%6$s",
|
||||
ACTION_SPELL_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DEFLECT = "偏转",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT = "%1$s%2$s被%4$s偏转了。",
|
||||
ACTION_SPELL_MISSED_DEFLECT_FULL_TEXT_NO_SOURCE = "%2$s被%4$s偏转了。",
|
||||
ACTION_SPELL_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_DODGE = "被躲闪",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT = "%1$s%2$s被%4$s躲闪了。",
|
||||
ACTION_SPELL_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s被%4$s躲闪了。",
|
||||
ACTION_SPELL_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_EVADE = "被闪避",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT = "%1$s%2$s被%4$s闪避了。",
|
||||
ACTION_SPELL_MISSED_EVADE_FULL_TEXT_NO_SOURCE = "%2$s被%4$s闪避了。",
|
||||
ACTION_SPELL_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT = "%1$s%2$s未命中%4$s。",
|
||||
ACTION_SPELL_MISSED_FULL_TEXT_NO_SOURCE = "%2$s未命中%4$s。",
|
||||
ACTION_SPELL_MISSED_IMMUNE = "免疫",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT = "%1$s%2$s失败。%4$s对此免疫。",
|
||||
ACTION_SPELL_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%2$s失败。%4$s对此免疫。",
|
||||
ACTION_SPELL_MISSED_MISFIRE = "未命中",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT = "%1$s%2$s未命中%4$s。",
|
||||
ACTION_SPELL_MISSED_MISFIRE_FULL_TEXT_NO_SOURCE = "%2$s未命中%4$s。",
|
||||
ACTION_SPELL_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_MISS = "未命中",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT = "%1$s%2$s未命中%4$s。",
|
||||
ACTION_SPELL_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s未命中%4$s。",
|
||||
ACTION_SPELL_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_PARRY = "被招架",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT = "%1$s%2$s被%4$s招架了。",
|
||||
ACTION_SPELL_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s被%4$s招架了。",
|
||||
ACTION_SPELL_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_MISSED_REFLECT = "被反射",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT = "%1$s%2$s被%4$s反射了。",
|
||||
ACTION_SPELL_MISSED_REFLECT_FULL_TEXT_NO_SOURCE = "%2$s被%4$s反射了。",
|
||||
ACTION_SPELL_MISSED_RESIST = "被抵抗",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT = "%1$s%2$s被%4$s完全抵抗了。%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s被%4$s完全抵抗了。%6$s",
|
||||
ACTION_SPELL_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE = "伤害",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT = "%4$s因%1$s%2$s受到了%5$s伤害。%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_FULL_TEXT_NO_SOURCE = "%4$s因%2$s受到了%5$s伤害。%6$s",
|
||||
ACTION_SPELL_PERIODIC_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_DRAIN = "吸取",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT = "%1$s%2$s从%4$s身上吸取了%9$s点%8$s。",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_FULL_TEXT_NO_SOURCE = "%2$s从%4$s身上吸取了%9$s点%8$s。",
|
||||
ACTION_SPELL_PERIODIC_DRAIN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE = "补充",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT = "%4$s因%1$s%2$s获得了%9$s点%8$s。",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_FULL_TEXT_NO_SOURCE = "%4$s因%2$s获得了%9$s点%8$s。",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_ENERGIZE_RESULT = "获得$extraAmount点%8$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL = "治疗",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT = "%4$s因%1$s%2$s获得了%9$s点生命值。%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_FULL_TEXT_NO_SOURCE = "%4$s因%2$s恢复了%9$s点生命值。%6$s",
|
||||
ACTION_SPELL_PERIODIC_HEAL_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH = "吸取",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT = "%1$s%2$s从%4$s身上吸取了%9$s点%8$s。%1$s获得了%10$s点%8$s。",
|
||||
ACTION_SPELL_PERIODIC_LEECH_FULL_TEXT_NO_SOURCE = "%2$s从%4$s身上吸取了%9$s点%8$s。%1$s获得了%10$s点%8$s。",
|
||||
ACTION_SPELL_PERIODIC_LEECH_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_LEECH_RESULT = "(获得%10$s点%8$s)",
|
||||
ACTION_SPELL_PERIODIC_MISSED = "未命中",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB = "(%1$s 吸收)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT = "%1$s%2$s被%4$s吸收了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_FULL_TEXT_NO_SOURCE = "%2$s暂时被%4$s吸收了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK = "(周期伤害被格挡)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT = "%1$s%2$s暂时被%4$s格挡了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_FULL_TEXT_NO_SOURCE = "%2$s暂时被%4$s格挡了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED = "(周期伤害被偏转)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT = "%1$s%2$s暂时被%4$s偏转了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_FULL_TEXT_NO_SOURCE = "%2$s暂时被%4$s偏转了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DEFLECTED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE = "(周期伤害被躲闪)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT = "%1$s%2$s暂时被%4$s躲闪了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_FULL_TEXT_NO_SOURCE = "%2$s暂时被%4$s躲闪了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED = "(周期伤害被闪避)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT = "%1$s%2$s暂时被%4$s闪避了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_FULL_TEXT_NO_SOURCE = "%2$s暂时被%4$s闪避了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_EVADED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT = "%1$s%2$s暂时未能对%4$s产生影响。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_FULL_TEXT_NO_SOURCE = "%2$s暂时未能影响%4$s。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE = "(免疫)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT = "%4$s对%1$s %2$s免疫。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_FULL_TEXT_NO_SOURCE = "%4$s对%2$s免疫。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS = "(周期伤害未命中)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT = "%1$s%2$s暂时未命中%4$s。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_FULL_TEXT_NO_SOURCE = "%2$s暂时未命中%4$s。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY = "(周期伤害被招架)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT = "%1$s%2$s暂时被%4$s招架了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_FULL_TEXT_NO_SOURCE = "%2$s暂时被%4$s招架了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST = "(周期伤害被抵抗)",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT = "%1$s%2$s未能对%4$s产生影响。%4$s抵抗了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_FULL_TEXT_NO_SOURCE = "%2$s未能影响%4$s。%4$s抵抗了。%6$s",
|
||||
ACTION_SPELL_PERIODIC_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_SPELL_RESURRECT = "复活",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT = "%1$s%2$s复活了%4$s。%6$s",
|
||||
ACTION_SPELL_RESURRECT_FULL_TEXT_NO_SOURCE = "%2$s复活了%4$s。%6$s",
|
||||
ACTION_SPELL_RESURRECT_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN = "偷取",
|
||||
ACTION_SPELL_STOLEN_BUFF = "偷取",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT = "%1$s%2$s偷取了%4$s%5$s。",
|
||||
ACTION_SPELL_STOLEN_BUFF_FULL_TEXT_NO_SOURCE = "%2$s偷取了%4$s%5$s。",
|
||||
ACTION_SPELL_STOLEN_BUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_BUFF__POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_DEBUFF = "偷取",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT = "%1$s%2$s将%4$s$extraSpell转移给了%1$s。",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_FULL_TEXT_NO_SOURCE = "%2$s转移了%4$s$extraSpell。",
|
||||
ACTION_SPELL_STOLEN_DEBUFF_POSSESSIVE = "1",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT = "%1$s%2$s偷取了%4$s%5$s。",
|
||||
ACTION_SPELL_STOLEN_FULL_TEXT_NO_SOURCE = "%2$s偷取了%4$s%5$s。",
|
||||
ACTION_SPELL_STOLEN_POSSESSIVE = "1",
|
||||
ACTION_SPELL_SUMMON = "召唤",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT = "%1$s%2$s召唤了%4$s。%6$s",
|
||||
ACTION_SPELL_SUMMON_FULL_TEXT_NO_SOURCE = "%2$s召唤了%4$s。%6$s",
|
||||
ACTION_SPELL_SUMMON_POSSESSIVE = "1",
|
||||
ACTION_SWING = "近战攻击",
|
||||
ACTION_SWING_DAMAGE = "命中",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT = "%1$s近战攻击命中%4$s造成了%5$s伤害。%6$s",
|
||||
ACTION_SWING_DAMAGE_FULL_TEXT_NO_SOURCE = "一次近战攻击命中%4$s造成了%5$s伤害。%6$s",
|
||||
ACTION_SWING_DAMAGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED = "未命中",
|
||||
ACTION_SWING_MISSED_ABSORB = "(吸收)",
|
||||
ACTION_SWING_MISSED_ABSORB_FULL_TEXT = "%1$s攻击被%4$s吸收了。%6$s",
|
||||
ACTION_SWING_MISSED_ABSORB_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_BLOCK = "(格挡)",
|
||||
ACTION_SWING_MISSED_BLOCK_FULL_TEXT = "%1$s攻击被%4$s格挡了。%6$s",
|
||||
ACTION_SWING_MISSED_BLOCK_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DEFLECT = "(偏转)",
|
||||
ACTION_SWING_MISSED_DEFLECT_FULL_TEXT = "%1$s攻击被%4$s偏转了。",
|
||||
ACTION_SWING_MISSED_DEFLECT_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_DODGE = "(躲闪)",
|
||||
ACTION_SWING_MISSED_DODGE_FULL_TEXT = "%1$s攻击被%4$s躲闪了。",
|
||||
ACTION_SWING_MISSED_DODGE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_EVADE = "(闪避)",
|
||||
ACTION_SWING_MISSED_EVADE_FULL_TEXT = "%1$s攻击被%4$s闪避了。",
|
||||
ACTION_SWING_MISSED_EVADE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_FULL_TEXT = "%1$s攻击未命中%4$s。",
|
||||
ACTION_SWING_MISSED_IMMUNE = "(免疫)",
|
||||
ACTION_SWING_MISSED_IMMUNE_FULL_TEXT = "%1$s攻击失败。%4$s对此免疫。",
|
||||
ACTION_SWING_MISSED_IMMUNE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISFIRE = "(未命中)",
|
||||
ACTION_SWING_MISSED_MISFIRE_FULL_TEXT = "%1$s攻击未命中%4$s。",
|
||||
ACTION_SWING_MISSED_MISFIRE_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_MISS = "(未命中)",
|
||||
ACTION_SWING_MISSED_MISS_FULL_TEXT = "%1$s攻击未命中%4$s。",
|
||||
ACTION_SWING_MISSED_MISS_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_PARRY = "(招架)",
|
||||
ACTION_SWING_MISSED_PARRY_FULL_TEXT = "%1$s攻击被%4$s招架了。",
|
||||
ACTION_SWING_MISSED_PARRY_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_POSSESSIVE = "1",
|
||||
ACTION_SWING_MISSED_RESIST = "(抵抗)",
|
||||
ACTION_SWING_MISSED_RESIST_FULL_TEXT = "%1$s攻击被%4$s完全抵抗了。%6$s",
|
||||
ACTION_SWING_MISSED_RESIST_POSSESSIVE = "1",
|
||||
ACTION_UNIT_BECCOMES_UNCONSCIOUS = "倒下",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_FULL_TEXT = "%4$s倒下了。",
|
||||
ACTION_UNIT_BECOMES_UNCONSCIOUS_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DESTROYED = "摧毁",
|
||||
ACTION_UNIT_DESTROYED_FULL_TEXT = "%4$s被摧毁了。",
|
||||
ACTION_UNIT_DESTROYED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DIED = "死亡",
|
||||
ACTION_UNIT_DIED_FULL_TEXT = "%4$s死亡了。",
|
||||
ACTION_UNIT_DIED_POSSESSIVE = "0",
|
||||
ACTION_UNIT_DISSIPATES = "消散",
|
||||
ACTION_UNIT_DISSIPATES_FULL_TEXT = "%4$s消散了。",
|
||||
ACTION_UNIT_DISSIPATES_POSSESSIVE = "0",
|
||||
ADD = "添加",
|
||||
ADDITIONAL_FILTERS = "更多过滤条件",
|
||||
ADD_FILTER = "添加过滤",
|
||||
AURAS = "光环",
|
||||
AURAS_COMBATLOG_TOOLTIP = "显示有关增益和负面状态效果的信息。",
|
||||
BENEFICIAL = "增益",
|
||||
BENEFICIAL_AURA_COMBATLOG_TOOLTIP = "当你获得或失去有益光环时显示信息。",
|
||||
BLIZZARD_COMBAT_LOG_MENU_BOTH = "显示所有与%s有关的信息?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_EVERYTHING = "全部显示",
|
||||
BLIZZARD_COMBAT_LOG_MENU_INCOMING = "%s发生了什么事情?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING = "%s做了些什么?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_OUTGOING_ME = "%s对你做了什么?",
|
||||
BLIZZARD_COMBAT_LOG_MENU_RESET = "重置",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SAVE = "保存为新的过滤条件",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE = "隐藏与这一条类似的信息。",
|
||||
BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK = "将%s链接到聊天频道中。",
|
||||
BY_SOURCE = "按来源",
|
||||
BY_SOURCE_COMBATLOG_TOOLTIP = "按照施法者以颜色区分。",
|
||||
BY_TARGET = "按目标",
|
||||
BY_TARGET_COMBATLOG_TOOLTIP = "按照目标以颜色区分。",
|
||||
COLORIZE = "彩色标记:",
|
||||
COLORS = "颜色",
|
||||
COLOR_BY_SCHOOL = "按类型区分颜色",
|
||||
COMBATLOG_DEFAULTS = "战斗记录默认",
|
||||
COMBATLOG_FILTER_STRING_CUSTOM_UNIT = "自定义单位",
|
||||
COMBATLOG_FILTER_STRING_FRIENDLY_UNITS = "友方",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_PLAYERS = "敌方玩家",
|
||||
COMBATLOG_FILTER_STRING_HOSTILE_UNITS = "敌方单位",
|
||||
COMBATLOG_FILTER_STRING_ME = "我",
|
||||
COMBATLOG_FILTER_STRING_MY_PET = "宠物",
|
||||
COMBATLOG_FILTER_STRING_NEUTRAL_UNITS = "中立",
|
||||
COMBATLOG_FILTER_STRING_UNKNOWN_UNITS = "未知",
|
||||
COMBATLOG_HIGHLIGHT_ABILITY = "技能",
|
||||
COMBATLOG_HIGHLIGHT_DAMAGE = "伤害",
|
||||
COMBATLOG_HIGHLIGHT_KILL = "杀死",
|
||||
COMBATLOG_HIGHLIGHT_SCHOOL = "类型",
|
||||
COMBATLOG_UNKNOWN_UNIT = "某目标",
|
||||
COMBAT_FACTION_CHANGE = "声望",
|
||||
COMBAT_HONOR_GAIN = "荣誉",
|
||||
COMBAT_LOG_UNIT_YOU_ENABLED = "1",
|
||||
COMBAT_MISC_INFO = "其它信息",
|
||||
COMBAT_XP_GAIN = "经验",
|
||||
CONFIRM_COMBAT_FILTER_DEFAULTS = "你确定要将过滤条件设定为初始状态吗?",
|
||||
CONFIRM_COMBAT_FILTER_DELETE = "你确认要删除这个过滤条件?",
|
||||
COPY_FILTER = "复制过滤",
|
||||
DAMAGE_NUMBER = "伤害数值",
|
||||
DAMAGE_SCHOOL_TEXT = "伤害类型",
|
||||
DAMAGE_SHIELD = "伤害护盾",
|
||||
DAMAGE_SHIELD_COMBATLOG_TOOLTIP = "当法术或技能(如荆棘术)对近战攻击造成反弹伤害时显示信息。",
|
||||
DEATHS_COMBATLOG_TOOLTIP = "当某生物死亡时显示信息。",
|
||||
DEFAULT_COMBATLOG_FILTER_NAME = "过滤条件%d",
|
||||
DISPELS = "驱散",
|
||||
DISPEL_AURA_COMBATLOG_TOOLTIP = "当光环被移除、破坏或偷取时显示信息。",
|
||||
DONE_BY = "来源为:",
|
||||
DONE_TO = "目标为:",
|
||||
DRAINS = "吸取",
|
||||
ENTER_FILTER_NAME = "输入过滤名称:",
|
||||
ENTIRE_LINE = "整条信息",
|
||||
ENTIRE_LINE_COMBATLOG_TOOLTIP = "按照下面的方式用彩色标记整条信息。",
|
||||
ENVIRONMENTAL_DAMAGE = "环境伤害",
|
||||
ENVIRONMENTAL_DAMAGE_COMBATLOG_TOOLTIP = "当某人因摔落、溺水或泡在岩浆中而损失生命值时显示信息。",
|
||||
EXAMPLE_SPELL_FIREBALL = "火球术",
|
||||
EXAMPLE_SPELL_FROSTBOLT = "寒冰箭",
|
||||
EXAMPLE_TARGET_MONSTER = "怪物",
|
||||
EXAMPLE_TEXT = "范例文字:",
|
||||
EXTRA_ATTACKS = "额外攻击",
|
||||
FAILURES = "失败",
|
||||
FILTER_BY_ENEMIES_COMBATLOG_TOOLTIP = "敌方怪物和宠物进行的动作。",
|
||||
FILTER_BY_FRIENDS_COMBATLOG_TOOLTIP = "由友方玩家、宠物和怪物进行的动作。",
|
||||
FILTER_BY_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "敌方玩家进行的动作。",
|
||||
FILTER_BY_ME_COMBATLOG_TOOLTIP = "由你、你的陷阱和你的法术进行的动作。",
|
||||
FILTER_BY_NEUTRAL_COMBATLOG_TOOLTIP = "由中立生物进行的动作。",
|
||||
FILTER_BY_PET_COMBATLOG_TOOLTIP = "由你的宠物、召唤生物和被魅惑玩家进行的动作。",
|
||||
FILTER_BY_UNKNOWN_COMBATLOG_TOOLTIP = "由掉落、酸液或岩浆之类的源头产生的动作。",
|
||||
FILTER_NAME = "过滤名称",
|
||||
FILTER_TO_FRIENDS_COMBATLOG_TOOLTIP = "对友方玩家、宠物和怪物进行的动作。",
|
||||
FILTER_TO_HOSTILE_COMBATLOG_TOOLTIP = "对敌方宠物和怪物进行的动作。",
|
||||
FILTER_TO_HOSTILE_PLAYERS_COMBATLOG_TOOLTIP = "对敌方玩家进行的动作。",
|
||||
FILTER_TO_ME_COMBATLOG_TOOLTIP = "对你进行的动作。",
|
||||
FILTER_TO_NEUTRAL_COMBATLOG_TOOLTIP = "对中立生物进行的动作。",
|
||||
FILTER_TO_PET_COMBATLOG_TOOLTIP = "对你的宠物、召唤生物和被魅惑玩家进行的动作。",
|
||||
FILTER_TO_UNKNOWN_COMBATLOG_TOOLTIP = "对隐形目标进行的动作。",
|
||||
FORMATTING = "格式",
|
||||
FULL_TEXT_COMBATLOG_TOOLTIP = "整句显示战斗记录信息。",
|
||||
HARMFUL_AURA_COMBATLOG_TOOLTIP = "当你获得或失去有害光环时显示信息。",
|
||||
HEALS = "治疗",
|
||||
HIGHLIGHTING = "高亮显示:",
|
||||
HIGHLIGHT_ABILITY_COMBATLOG_TOOLTIP = "在战斗信息中高亮显示技能名。",
|
||||
HIGHLIGHT_DAMAGE_COMBATLOG_TOOLTIP = "在战斗信息中高亮显示伤害数值。",
|
||||
HIGHLIGHT_KILL_COMBATLOG_TOOLTIP = "高亮显示你或你的队友杀死敌人时所显示的信息。",
|
||||
HIGHLIGHT_SCHOOL_COMBATLOG_TOOLTIP = "在战斗信息中高亮显示法术的类型。",
|
||||
HOSTILE = "敌对",
|
||||
INTERRUPTS = "打断",
|
||||
ITEM_NAMES = "物品名",
|
||||
ITEM_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "在物品名称外显示括号。",
|
||||
KILLS_COMBATLOG_TOOLTIP = "当你的队友杀死某目标时显示信息。",
|
||||
MELEE = "近战",
|
||||
MELEE_COMBATLOG_TOOLTIP = "显示普通的近战攻击。",
|
||||
MESSAGE_SOURCES = "信息来源",
|
||||
MISSES = "未命中",
|
||||
MOVE_FILTER_DOWN = "过滤条件下移",
|
||||
MOVE_FILTER_UP = "过滤条件上移",
|
||||
OTHER = "其它",
|
||||
PERIODIC = "周期",
|
||||
POWER_GAINS = "获得能量",
|
||||
POWER_GAINS_COMBATLOG_TOOLTIP = "当法术或技能恢复法力、能量、怒气、集中值、真气、神圣能量或暗影宝珠时显示信息。",
|
||||
QUICKBUTTON_NAME_EVERYTHING = "所有",
|
||||
QUICKBUTTON_NAME_EVERYTHING_TOOLTIP = "显示所有战斗信息。",
|
||||
QUICKBUTTON_NAME_KILLS = "杀敌",
|
||||
QUICKBUTTON_NAME_KILLS_TOOLTIP = "显示所有死亡和杀敌信息。",
|
||||
QUICKBUTTON_NAME_ME = "我发生了什么?",
|
||||
QUICKBUTTON_NAME_ME_TOOLTIP = "显示我所接收的所有行为信息。",
|
||||
QUICKBUTTON_NAME_SELF = "自己",
|
||||
QUICKBUTTON_NAME_SELF_TOOLTIP = "显示你所进行的和你所接收的动作的信息。",
|
||||
QUICK_BUTTON_COMBATLOG_TOOLTIP = "在聊天窗口中放置一个该过滤条件的快捷方式。",
|
||||
RANGED = "远程",
|
||||
RANGED_COMBATLOG_TOOLTIP = "显示弓箭、枪械、投掷武器和魔杖的攻击。",
|
||||
RANGE_DAMAGE_COMBATLOG_TOOLTIP = "显示造成了全额或部分伤害的远程射击。",
|
||||
RANGE_MISSED_COMBATLOG_TOOLTIP = "显示未能造成伤害的远程射击。",
|
||||
RESURRECT = "复活",
|
||||
SETTINGS = "设置",
|
||||
SHOW_BRACES = "显示括号",
|
||||
SHOW_BRACES_COMBATLOG_TOOLTIP = "在战斗记录信息中的超链接外显示括号。",
|
||||
SHOW_QUICK_BUTTON = "显示快捷按钮",
|
||||
SHOW_TIMESTAMP = "显示时间戳",
|
||||
SOURCE = "来源:",
|
||||
SPECIAL = "特殊",
|
||||
SPELLS_COMBATLOG_TOOLTIP = "显示有关法术和特殊技能的信息。",
|
||||
SPELL_CASTING = "法术施放",
|
||||
SPELL_CASTING_COMBATLOG_TOOLTIP = "显示有关法术施放的信息。",
|
||||
SPELL_CAST_FAILED_COMBATLOG_TOOLTIP = "当法术无法施放或施放失败时显示信息。",
|
||||
SPELL_CAST_START_COMBATLOG_TOOLTIP = "当法术开始施放时显示信息。",
|
||||
SPELL_CAST_SUCCESS_COMBATLOG_TOOLTIP = "当法术成功施放时显示信息。",
|
||||
SPELL_COLOR_BY_SCHOOL_COMBATLOG_TOOLTIP = "按类型用彩色标记法术名。",
|
||||
SPELL_DAMAGE_COMBATLOG_TOOLTIP = "当法术或技能造成伤害时显示信息。",
|
||||
SPELL_DAMAGE_NUMBER_COMBATLOG_TOOLTIP = "以彩色标记非普通攻击的伤害数值。",
|
||||
SPELL_DAMAGE_SCHOOL_COMBATLOG_TOOLTIP = "彩色标记伤害类型。(例如:暗影)",
|
||||
SPELL_DRAIN_COMBATLOG_TOOLTIP = "当法术或技能降低法力、能量、怒气、或集中值时显示信息。",
|
||||
SPELL_EXTRA_ATTACKS_COMBATLOG_TOOLTIP = "当法术或技能提供额外攻击时显示信息。",
|
||||
SPELL_HEAL_COMBATLOG_TOOLTIP = "当法术或技能恢复生命值时显示信息。",
|
||||
SPELL_INSTAKILL_COMBATLOG_TOOLTIP = "显示有关特殊法术类型的信息,比如造成耐久度损失或者与宠物分担伤害的法术。",
|
||||
SPELL_INTERRUPT_COMBATLOG_TOOLTIP = "当法术或技能打断另一个法术时显示信息。",
|
||||
SPELL_MISSED_COMBATLOG_TOOLTIP = "当法术或技能未能造成伤害时显示信息。这包括躲闪、招架、格挡、偏转、免疫、吸收和闪避。",
|
||||
SPELL_NAMES = "法术名",
|
||||
SPELL_NAMES_COMBATLOG_TOOLTIP = "彩色标记法术名。",
|
||||
SPELL_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "在法术名称外显示括号。",
|
||||
SPELL_PERIODIC_COMBATLOG_TOOLTIP = "显示法术效果增量的信息。",
|
||||
SPELL_PERIODIC_DAMAGE_COMBATLOG_TOOLTIP = "当法术或技能周期性地造成伤害时(如暗言术:痛或腐蚀术)显示信息。",
|
||||
SPELL_PERIODIC_HEAL_COMBATLOG_TOOLTIP = "当法术或技能周期性地恢复生命值时(如恢复或回春术)显示信息。",
|
||||
SPELL_PERIODIC_MISSED_COMBATLOG_TOOLTIP = "当法术或技能未能造成周期性的伤害时显示信息。这包括免疫、吸收和闪避。",
|
||||
SPELL_PERIODIC_OTHER_COMBATLOG_TOOLTIP = "当法术或技能周期性地产生其它效果时(如恢复或吸取法力值)显示信息。",
|
||||
SPELL_RESURRECT_COMBATLOG_TOOLTIP = "当法术或技能复活另一个玩家或怪物时显示信息。",
|
||||
SPELL_SUMMON_COMBATLOG_TOOLTIP = "当法术召唤出怪物或创造一个物体时显示信息。",
|
||||
START = "开始",
|
||||
STRING_SCHOOL_UNKNOWN = "未知",
|
||||
SUCCESS = "成功",
|
||||
SUMMONS = "召唤",
|
||||
SWING_DAMAGE_COMBATLOG_TOOLTIP = "显示造成了全额或部分伤害的近战攻击。",
|
||||
SWING_MISSED_COMBATLOG_TOOLTIP = "显示未能造成伤害的近战攻击。",
|
||||
TEXT_MODE_A = "A",
|
||||
TEXT_MODE_A_STRING_1 = "%s %s %s %s %s. %s %11$s",
|
||||
TEXT_MODE_A_STRING_2 = "%1$s %3$s%2$s%4$s%5$s。%6$s",
|
||||
TEXT_MODE_A_STRING_3 = "%1$s%5$s%3$s%4$s%2$s。%6$s",
|
||||
TEXT_MODE_A_STRING_ACTION = "|Haction:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_BRACE_ITEM = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_SPELL = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_BRACE_UNIT = "|c%s[|r%s|c%s]|r",
|
||||
TEXT_MODE_A_STRING_DEST_ICON = "|Hicon:%d:dest|h%s|h",
|
||||
TEXT_MODE_A_STRING_DEST_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_ITEM = "|Hitem:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_POSSESSIVE = "%s的",
|
||||
TEXT_MODE_A_STRING_REMAINING_POINTS = "(剩余%s)",
|
||||
TEXT_MODE_A_STRING_RESULT_ABSORB = "(%s 吸收)",
|
||||
TEXT_MODE_A_STRING_RESULT_BLOCK = "(%s 格挡)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL = "(爆击)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRITICAL_SPELL = "(爆击)",
|
||||
TEXT_MODE_A_STRING_RESULT_CRUSHING = "(碾压)",
|
||||
TEXT_MODE_A_STRING_RESULT_FORMAT = "$resultAmount点$resultType",
|
||||
TEXT_MODE_A_STRING_RESULT_GLANCING = "(偏斜)",
|
||||
TEXT_MODE_A_STRING_RESULT_MULTISTRIKE = "(溅射)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERENERGIZE = "(%s 过量充能)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERHEALING = "(%s 过量治疗)",
|
||||
TEXT_MODE_A_STRING_RESULT_OVERKILLING = "(%s 过量伤害)",
|
||||
TEXT_MODE_A_STRING_RESULT_PARRY = "(%d招架)",
|
||||
TEXT_MODE_A_STRING_RESULT_REFLECT = "被反射",
|
||||
TEXT_MODE_A_STRING_RESULT_RESIST = "(%s 抵抗)",
|
||||
TEXT_MODE_A_STRING_RESULT_VULNERABILITY = "(%s 易伤伤害)",
|
||||
TEXT_MODE_A_STRING_SOURCE_ICON = "|Hicon:%s:source|h%s|h",
|
||||
TEXT_MODE_A_STRING_SOURCE_UNIT = "%s|Hunit:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_SPELL_EXTRA = "|Hspell:%s:%s:%s|h%s|h",
|
||||
TEXT_MODE_A_STRING_TIMESTAMP = "%s> %s",
|
||||
TEXT_MODE_A_STRING_VALUE_SCHOOL = "%s %s",
|
||||
TEXT_MODE_A_STRING_VALUE_TYPE = "%s(%s)",
|
||||
TEXT_MODE_A_TIMESTAMP = "%H:%M:%S",
|
||||
TIMESTAMP_COMBATLOG_TOOLTIP = "显示战斗记录信息的时间戳。",
|
||||
UNIT_COLORS = "单位颜色:",
|
||||
UNIT_NAMES = "单位名称",
|
||||
UNIT_NAMES_COMBATLOG_TOOLTIP = "彩色标记单位名。",
|
||||
UNIT_NAMES_SHOW_BRACES_COMBATLOG_TOOLTIP = "在单位名称外显示括号。",
|
||||
UNIT_YOU = "你",
|
||||
UNIT_YOU_DEST = "你",
|
||||
UNIT_YOU_DEST_POSSESSIVE = "你的",
|
||||
UNIT_YOU_SOURCE = "你",
|
||||
UNIT_YOU_SOURCE_POSSESSIVE = "你的",
|
||||
USE_FULL_TEXT_MODE = "使用详细模式",
|
||||
}
|
||||
Vendored
-3685
File diff suppressed because it is too large
Load Diff
Vendored
-3701
File diff suppressed because it is too large
Load Diff
Vendored
-3688
File diff suppressed because it is too large
Load Diff
Vendored
-3681
File diff suppressed because it is too large
Load Diff
Vendored
-3617
File diff suppressed because it is too large
Load Diff
Vendored
-3691
File diff suppressed because it is too large
Load Diff
Vendored
-3692
File diff suppressed because it is too large
Load Diff
+36
-133
@@ -1,88 +1,46 @@
|
||||
-- this table is added in later expansions
|
||||
CLASS_SORT_ORDER = CLASS_SORT_ORDER or {
|
||||
"WARRIOR",
|
||||
"DEATHKNIGHT",
|
||||
"PALADIN",
|
||||
"MONK",
|
||||
"PRIEST",
|
||||
"SHAMAN",
|
||||
"DRUID",
|
||||
"ROGUE",
|
||||
"MAGE",
|
||||
"WARLOCK",
|
||||
"HUNTER",
|
||||
"DEMONHUNTER",
|
||||
"UNKNOWN",
|
||||
}
|
||||
RACE_ICON_TCOORDS = RACE_ICON_TCOORDS or {
|
||||
["HUMAN_MALE"] = {0, 0.25, 0, 0.25},
|
||||
["DWARF_MALE"] = {0.25, 0.5, 0, 0.25},
|
||||
["GNOME_MALE"] = {0.5, 0.75, 0, 0.25},
|
||||
["NIGHTELF_MALE"] = {0.75, 1.0, 0, 0.25},
|
||||
|
||||
["TAUREN_MALE"] = {0, 0.25, 0.25, 0.5},
|
||||
["SCOURGE_MALE"] = {0.25, 0.5, 0.25, 0.5},
|
||||
["TROLL_MALE"] = {0.5, 0.75, 0.25, 0.5},
|
||||
["ORC_MALE"] = {0.75, 1.0, 0.25, 0.5},
|
||||
|
||||
["HUMAN_FEMALE"] = {0, 0.25, 0.5, 0.75},
|
||||
["DWARF_FEMALE"] = {0.25, 0.5, 0.5, 0.75},
|
||||
["GNOME_FEMALE"] = {0.5, 0.75, 0.5, 0.75},
|
||||
["NIGHTELF_FEMALE"] = {0.75, 1.0, 0.5, 0.75},
|
||||
|
||||
["TAUREN_FEMALE"] = {0, 0.25, 0.75, 1.0},
|
||||
["SCOURGE_FEMALE"] = {0.25, 0.5, 0.75, 1.0},
|
||||
["TROLL_FEMALE"] = {0.5, 0.75, 0.75, 1.0},
|
||||
["ORC_FEMALE"] = {0.75, 1.0, 0.75, 1.0},
|
||||
};
|
||||
|
||||
CLASS_ICON_TCOORDS = CLASS_ICON_TCOORDS or {
|
||||
["WARRIOR"] = {0, 0.25, 0, 0.25},
|
||||
["MAGE"] = {0.25, 0.49609375, 0, 0.25},
|
||||
["ROGUE"] = {0.49609375, 0.7421875, 0, 0.25},
|
||||
["DRUID"] = {0.7421875, 0.98828125, 0, 0.25},
|
||||
["HUNTER"] = {0, 0.25, 0.25, 0.5},
|
||||
["SHAMAN"] = {0.25, 0.49609375, 0.25, 0.5},
|
||||
["PRIEST"] = {0.49609375, 0.7421875, 0.25, 0.5},
|
||||
["WARLOCK"] = {0.7421875, 0.98828125, 0.25, 0.5},
|
||||
["PALADIN"] = {0, 0.25, 0.5, 0.75},
|
||||
["DEATHKNIGHT"] = {0.25, .5, 0.5, .75},
|
||||
["GM"] = {0.5, 0.73828125, 0.5, .75},
|
||||
}
|
||||
["WARRIOR"] = {0, 0.25, 0, 0.25},
|
||||
["MAGE"] = {0.25, 0.49609375, 0, 0.25},
|
||||
["ROGUE"] = {0.49609375, 0.7421875, 0, 0.25},
|
||||
["DRUID"] = {0.7421875, 0.98828125, 0, 0.25},
|
||||
["HUNTER"] = {0, 0.25, 0.25, 0.5},
|
||||
["SHAMAN"] = {0.25, 0.49609375, 0.25, 0.5},
|
||||
["PRIEST"] = {0.49609375, 0.7421875, 0.25, 0.5},
|
||||
["WARLOCK"] = {0.7421875, 0.98828125, 0.25, 0.5},
|
||||
["PALADIN"] = {0, 0.25, 0.5, 0.75}
|
||||
};
|
||||
|
||||
-- barlength = {[formfactor]={cols, rows}}
|
||||
pfGridmath = {
|
||||
[1] = {{1,1}},
|
||||
[2] = {{2,1},{1,2}},
|
||||
[3] = {{3,1},{1,3}},
|
||||
[4] = {{4,1},{2,2},{1,4}},
|
||||
[5] = {{5,1},{1,5}},
|
||||
[6] = {{6,1},{3,2},{2,3},{1,6}},
|
||||
[7] = {{7,1},{1,7}},
|
||||
[8] = {{8,1},{4,2},{2,4},{1,8}},
|
||||
[9] = {{9,1},{3,3},{1,9}},
|
||||
[10] = {{10,1},{5,2},{2,5},{1,10}},
|
||||
[11] = {{11,1},{1,11}},
|
||||
[12] = {{12,1},{6,2},{4,3},{3,4},{2,6},{1,12}}
|
||||
}
|
||||
|
||||
-- list of valid unitstrings
|
||||
pfValidUnits = {}
|
||||
pfValidUnits["pet"] = true
|
||||
pfValidUnits["player"] = true
|
||||
pfValidUnits["target"] = true
|
||||
pfValidUnits["mouseover"] = true
|
||||
|
||||
pfValidUnits["focus"] = true
|
||||
pfValidUnits["focustarget"] = true
|
||||
pfValidUnits["focustargettarget"] = true
|
||||
|
||||
pfValidUnits["pettarget"] = true
|
||||
pfValidUnits["playertarget"] = true
|
||||
pfValidUnits["targettarget"] = true
|
||||
pfValidUnits["mouseovertarget"] = true
|
||||
pfValidUnits["targettargettarget"] = true
|
||||
|
||||
for i=1,4 do
|
||||
pfValidUnits["party" .. i] = true
|
||||
pfValidUnits["party" .. i .. "target"] = true
|
||||
pfValidUnits["partypet" .. i] = true
|
||||
pfValidUnits["partypet" .. i .. "target"] = true
|
||||
end
|
||||
|
||||
for i=1,40 do
|
||||
pfValidUnits["raid" .. i] = true
|
||||
pfValidUnits["raid" .. i .. "target"] = true
|
||||
|
||||
pfValidUnits["raidpet" .. i] = true
|
||||
pfValidUnits["raidpet" .. i .. "target"] = true
|
||||
|
||||
pfValidUnits["nameplate" .. i] = true
|
||||
pfValidUnits["nameplate" .. i .. "target"] = true
|
||||
end
|
||||
-- Vendor-buy prices for the stock 1.12 item set. Pulled in by init\stock.xml,
|
||||
-- so pfUI_ClassicAPI.toc only: Turtle has its own list in
|
||||
-- env\tables_turtle.lua, loaded from init\turtle.xml instead.
|
||||
|
||||
-- This table makes me sick.
|
||||
-- itemid = buyPrice (copper). Sell price comes from C_Item.GetItemSellPriceByID;
|
||||
-- this table only carries the curated vendor-buy price (which isn't a static
|
||||
-- engine field — it's collected from real vendor encounters).
|
||||
|
||||
pfSellData = {
|
||||
[25]=35, [35]=47, [36]=38, [37]=38, [38]=1, [39]=5,
|
||||
[40]=4, [41]=2, [42]=2, [43]=4, [44]=4, [45]=1,
|
||||
@@ -2417,58 +2375,3 @@ pfSellData = {
|
||||
[23725]=2600, [23727]=2600, [23728]=2600, [23743]=11, [24071]=393470, [24101]=400000,
|
||||
[24102]=400000, [24222]=221054, [24231]=211, [24232]=900, [24281]=1210, [24282]=18250,
|
||||
[24283]=152345, [24358]=365815 }
|
||||
pfMapOverlayData = {
|
||||
["Alterac"] = {"CHILLWINDPOINT:308:250:660:261", "CORRAHNSDAGGER:173:277:411:391", "CRUSHRIDGEHOLD:269:230:339:167:283:0", "DALARAN:277:283:39:275", "DANDREDSFOLD:273:224:282:0", "GALLOWSCORNER:183:185:415:287", "GAVINSNAZE:140:161:235:486", "GROWLESSCAVE:175:156:327:382", "LORDAMEREINTERNMENTCAMP:315:255:55:413", "MISTYSHORE:204:268:207:139", "RUINSOFALTERAC:252:249:274:201", "RAVENHOLDTMANOR:217:165:737:452", "SOFERASNAZE:241:312:469:311", "STRAHNBRAD:355:289:555:110", "THEHEADLAND:142:187:325:481", "THEUPLANDS:219:183:470:84",},
|
||||
["AlteracValley"] = {"DUNBALDAR:254:228:356:18:3299:3318", "FROSTWOLFKEEP:220:278:408:382:3299:3318", "ICEBLOODGARRISON:286:288:343:179:3299:3318",},
|
||||
["Arathi"] = {"BOULDERFISTHALL:190:214:442:371", "BOULDERGOR:222:214:244:167", "CIRCLEOFEASTBINDING:140:213:568:125", "CIRCLEOFINNERBINDING:186:164:302:321", "CIRCLEOFOUTERBINDING:149:137:429:301", "CIRCLEOFWESTBINDING:156:189:152:71", "DABYRIESFARMSTEAD:160:171:482:197", "FALDIRSCOVE:247:197:180:428", "FARWELLSTEAD:112:128:267:31", "GOSHEKFARM:208:177:539:284", "HAMMERFALL:182:235:665:128:318:0", "NORTHFOLDMANOR:202:205:204:119", "REFUGEPOINT:157:189:380:214", "RUINSOFZULRASAZ:160:160:346:29", "STROMGARDEKEEP:220:213:122:295", "THANDOLSPAN:175:198:369:424", "THORADINSWALL:173:225:103:148", "WITHERBARKVILLAGE:197:194:566:339", "WILDTUSKVILLAGE:183:102:379:145",},
|
||||
["Ashenvale"] = {"ASTRANAAR:190:173:281:259", "BOUGHSHADOW:140:190:862:157", "FALLENSKYLAKE:219:190:555:433:432:0", "FELFIREHILL:241:244:720:349", "FIRESCARSHRINE:153:161:194:332", "FORESTSONG:162:142:817:232", "IRISLAKE:185:190:401:226", "LAKEFALATHIM:115:181:138:144", "MAESTRASPOST:198:290:216:46", "MYSTRALLAKE:262:228:363:354:420:2359", "NIGHTRUN:212:244:604:263:431:0", "RAYNEWOODRETREAT:165:235:527:243", "SATYRNAAR:163:172:702:230", "THEHOWLINGVALE:196:172:471:147", "THERUINSOFSTARDUST:141:135:268:382", "THESHRINEOFAESSINA:205:179:113:268", "THEZORAMSTRAND:228:235:26:33", "THISTLEFURVILLAGE:243:184:210:164", "WARSONGLUMBERCAMP:185:146:804:319",},
|
||||
["Aszhara"] = {"BAYOFSTORMS:257:285:486:208", "BITTERREACHES:231:173:651:46", "FORLORNRIDGE:210:247:198:373", "HALDARRENCAMPMENT:191:138:83:339", "JAGGEDREEF:556:153:373:9", "LAKEMENNAR:301:184:302:437", "LEGASHENCAMPMENT:224:131:484:49", "RAVENCRESTMONUMENT:227:115:559:506", "RUINSOFELDARATH:251:268:246:228", "SHADOWSONGSHRINE:213:170:43:428", "SOUTHRIDGEBEACH:355:207:397:360", "TEMPLEOFARKKORAN:177:187:689:160", "THALASSIANBASECAMP:224:144:507:126", "THERUINEDREACHES:384:116:403:549", "THESHATTEREDSTRAND:148:199:412:202", "TIMBERMAWHOLD:209:194:258:175", "TOWEROFELDARA:107:145:824:114", "URSOLAN:219:212:327:94", "VALORMOK:201:158:93:236",},
|
||||
["Badlands"] = {"AGMONDSEND:249:256:354:396", "ANGORFORTRESS:186:241:327:101", "APOCRYPHANSREST:251:195:20:315", "CAMPBOFF:195:207:506:361", "CAMPCAGG:247:205:15:432:347:0", "CAMPKOSH:214:211:556:56", "CRYSTALLINEPINNACLE:140:155:609:337", "DUSTWINDGULCH:229:190:506:216", "HAMMERTOESDIGSITE:185:177:455:131", "KARGATH:232:245:0:154", "LETHLORRAVINE:344:395:627:173", "MIRAGEFLATS:276:229:153:387", "REDBRANDSDIGSITE:325:155:496:454", "RUINSOFCORTHAN:210:200:203:124", "SCALEBANERIDGE:205:179:751:142", "THEDUSTBOWL:253:266:166:203", "THEMAKERSTERRACE:230:172:399:16:1517:0", "VALLEYOFFANGS:215:215:358:265",},
|
||||
["Balor"] = {"BILGERATCOMPOUND:174:141:323:76", "CROAKINGPLATEAU:371:154:397:201", "GRAHANESTATE:93:116:306:392", "GULLWINGWRECKAGE:110:105:221:34", "LANGSTONORCHARD:102:129:410:346", "RUINSOFBREEZEHAVEN:163:141:450:256", "SCURRYINGTHICKET:144:158:283:161", "SIOUTPOST:175:232:597:389", "SORROWMORELAKE:174:140:303:277", "STORMBREAKERPOINT:243:197:583:212", "STORMREAVERSPIRE:151:119:491:429", "STORMWROUGHTCASTLE:202:166:458:332", "TREACHEROUSCRAGS:243:171:381:457", "VANDERFARMSTEAD:146:140:330:372", "WINDROCKCLIFFS:192:279:256:303",},
|
||||
["Barrens"] = {"AGAMAGOR:183:173:348:242", "ANCHORSEDGE:118:83:690:300", "BAELMODAN:120:123:435:482", "BLACKTHORNRIDGE:140:123:340:465", "BOULDERLODEMINE:109:105:560:0", "BRAMBLESCAR:112:152:446:304", "CAMPTAURAJO:130:113:370:355", "DREADMISTPEAK:121:93:423:68", "FARWATCHPOST:85:152:572:58", "FIELDOFGIANTS:194:137:363:410", "GROLDOMFARM:112:107:499:67", "HONORSSTAND:128:128:306:130", "LUSHWATEROASIS:160:169:372:186", "NORTHWATCHFOLD:134:107:533:310", "RAPTORGROUNDS:101:99:512:299", "RATCHET:116:118:556:190", "RAZORFENDOWNS:137:106:414:562", "RAZORFENKRAUL:116:123:345:539", "THECROSSROADS:142:140:436:127", "THEDRYHILLS:185:134:324:36", "THEFORGOTTENPOOLS:104:116:391:120", "THEMERCHANTCOAST:80:123:584:249", "THEMORSHANRAMPART:118:91:418:0", "THESLUDGEFEN:153:113:463:0", "THESTAGNANTOASIS:147:126:484:211", "THORNHILL:128:120:502:123",},
|
||||
["BlackstoneIsland"] = {"BLACKASHCOALPITS:303:474:209:178", "BLACKASHMINE:251:204:397:222", "GAZZIKSWORKSHOP:329:247:439:403", "RUSTGATELUMBERYARD:217:245:551:241", "RUSTGATERIDGE:396:226:372:360", "THEWATERHOLE:386:239:382:43", "VENTURECOSLUMS:270:192:498:129",},
|
||||
["BlastedLands"] = {"ALTAROFSTORMS:169:142:318:141", "DARKPORTAL:254:208:460:265", "DREADMAULHOLD:200:171:351:21", "DREADMAULPOST:228:183:370:204", "GARRISONARMORY:155:192:480:15", "NETHERGARDEKEEP:169:178:567:35", "RISEOFTHEDEFILER:150:131:414:131", "SERPENTSCOIL:211:155:510:148", "THETAINTEDSCAR:370:438:220:184",},
|
||||
["BurningSteppes"] = {"ALTAROFSTORMS:215:210:41:114", "BLACKROCKMOUNTAIN:249:272:178:104", "BLACKROCKPASS:259:299:597:285", "BLACKROCKSTRONGHOLD:232:258:342:120", "DRACODAR:405:309:61:262", "DREADMAULROCK:203:214:717:174", "MORGANSVIGIL:287:265:715:311", "PILLAROFASH:313:261:382:289", "RUINSOFTHAURISSAN:258:275:521:105", "TERRORWINGPATH:271:296:730:52",},
|
||||
["Darkshore"] = {"AMETHARAN:163:178:340:323", "AUBERDINE:134:179:323:191", "BASHALARAN:153:171:379:199", "CLIFFSPRINGRIVER:205:161:391:112:445:0", "GROVEOFTHEANCIENTS:180:138:314:436", "REMTRAVELSEXCAVATION:148:164:245:504", "RUINSOFMATHYSTRA:176:205:519:3", "THEMASTERSGLAIVE:146:139:346:529", "TOWEROFALTHALAXX:142:159:484:110",},
|
||||
["DeadwindPass"] = {"DEADMANSCROSSING:368:353:257:81:2938:0", "KARAZHAN:287:234:277:342", "THEVICE:254:257:433:305",},
|
||||
["Desolace"] = {"ETHELRETHOR:189:237:318:68", "GELKISVILLAGE:181:235:300:433", "KODOGRAVEYARD:253:237:396:251", "KOLKARVILLAGE:206:208:615:221", "KORMEKSHUT:156:147:562:187", "MAGRAMVILLAGE:182:272:606:373", "MANNOROCCOVEN:270:271:408:385", "NIJELSPOINT:188:246:561:0", "RANAZJARISLE:88:89:248:11", "SARGERON:274:237:632:38", "SHADOWBREAKRAVINE:190:181:698:454", "SHADOWPREYVILLAGE:215:218:175:395", "TETHRISARAN:185:137:440:0", "THUNDERAXEFORTRESS:174:207:455:108", "VALLEYOFSPEARS:234:274:217:221",},
|
||||
["DunMorogh"] = {"AMBERSTILLRANCH:105:104:582:288", "ANVILMAR:209:159:167:414:77:0", "BREWNALLVILLAGE:94:102:263:256", "CHILLBREEZEVALLEY:160:113:281:304", "COLDRIDGEPASS:134:123:300:387", "FROSTMANEHOLD:112:118:225:291", "GNOMERAGON:158:176:178:164", "GOLBOLARQUARRY:144:149:619:301", "HELMSBEDLAKE:131:153:706:284:716:0", "ICEFLOWLAKE:117:167:286:173", "IRONFORGE:291:187:414:166", "IRONFORGEAIRFIELDS:213:233:582:100", "KHARANOS:175:186:397:296:189:0", "MISTYPINEREFUGE:117:155:507:224", "NORTHERNGATEOUTPOST:115:155:766:177", "RUGFORDSMOUNTAINREST:199:114:739:406", "SHIMMERRIDGE:115:173:355:169", "SOUTHERNGATEOUTPOST:113:106:800:284", "THEGRIZZLEDDEN:178:155:321:328", "THETUNDRIDHILLS:135:115:531:328",},
|
||||
["Durotar"] = {"DRYGULCHRAVINE:139:134:438:92:410:0", "ECHOISLES:175:236:561:432", "KOLKARCRAG:131:96:426:487", "ORGRIMMAR:427:150:251:0", "RAZORHILL:188:207:445:182", "RAZORMANEGROUNDS:196:202:318:204", "SENJINVILLAGE:133:167:485:398", "SKULLROCK:118:79:469:51", "SPARKWATERPORT:122:134:522:94", "THUNDERRIDGE:156:174:341:72", "TIRAGARDEKEEP:160:148:477:300", "VALLEYOFTRIALS:186:184:370:335",},
|
||||
["Duskwood"] = {"ADDLESSTEAD:255:231:67:353", "BRIGHTWOODGROVE:191:315:520:131", "DARKSHIRE:291:259:644:173:576:0", "MANORMISTMANTLE:174:150:668:134", "RAVENHILL:166:115:117:317", "RAVENHILLCEMETARY:323:276:99:165:243:0", "THEDARKENEDBANK:886:184:105:44", "THEHUSHEDBANK:136:306:29:143", "THEROTTINGORCHARD:231:210:549:380", "THEYORGENFARMSTEAD:211:235:403:393", "TRANQUILGARDENSCEMETARY:204:196:692:363", "TWILIGHTGROVE:327:384:314:99", "VULGOLOGREMOUND:231:266:259:365",},
|
||||
["Dustwallow"] = {"ALCAZISLAND:176:179:671:29", "BACKBAYWETLANDS:384:243:248:196", "BRACKENWALLVILLAGE:264:264:239:2:507:0", "THEDENOFFLAME:246:235:264:320", "THERAMOREISLE:214:187:542:232", "THEWYRMBOG:263:229:372:387", "WITCHHILL:230:311:431:1:518:0", "WESTHAVENHOLLOW:166:149:603:428",},
|
||||
["EasternPlaguelands"] = {"BLACKWOODLAKE:217:221:451:207", "CORINSCROSSING:153:146:544:373", "CROWNGUARDTOWER:193:152:299:408", "DARROWSHIRE:195:167:316:497", "EASTWALLTOWER:164:143:600:250", "FORLORNSUMMIT:192:185:64:225", "LAKEMERELDAR:240:164:543:469", "LIGHTSHOPECHAPEL:165:238:721:304", "NORTHDALE:172:191:628:135", "NORTHPASSTOWER:228:178:465:118", "PESTILENTSCAR:189:241:416:349", "PLAGUEWOOD:346:258:178:92", "QUELLITHIENLODGE:216:136:430:44", "STRATHOLME:227:189:202:15", "TERRORDALE:175:129:86:137", "THEFUNGALVALE:202:199:277:267", "THEINFECTISSCAR:183:262:628:298", "THEMARRISSTEAD:182:194:164:367", "THENOXIOUSGLADE:211:202:730:172", "THEUNDERCROFT:171:136:178:484", "THONDRORILRIVER:210:348:12:235", "TYRSHAND:201:159:724:475", "ZULMASHAR:189:152:621:36",},
|
||||
["Elwynn"] = {"BRACKWELLPUMPKINPATCH:222:223:592:431", "CRYSTALLAKE:196:192:435:345", "EASTVALELOGGINGCAMP:237:190:713:339", "FARGODEEPMINE:238:230:247:438:63:64", "FORESTSEDGE:242:335:132:333:120:0", "GOLDSHIRE:219:199:261:280", "JERODSLANDING:206:212:437:445", "NORTHSHIREVALLEY:237:244:390:154", "RIDGEPOINTTOWER:287:207:710:445", "STONECAIRNLAKE:278:230:601:203", "STORMWIND:452:392:21:3", "TOWEROFAZORA:232:226:561:303:54:0",},
|
||||
["Felwood"] = {"BLOODVENOMFALLS:225:132:297:269", "DEADWOODVILLAGE:162:129:415:539", "EMERALDSANCTUARY:171:150:411:436", "FELPAWVILLAGE:224:138:489:0:1769:0", "IRONTREEWOODS:200:203:426:60", "JADEFIREGLEN:151:145:339:469", "JADEFIRERUN:181:159:338:35", "JAEDENAR:236:122:275:333", "MORLOSARAN:129:151:503:515", "RUINSOFCONSTELLAS:224:142:303:387", "SHATTERSCARVALE:218:186:315:130", "TALONBRANCHGLADE:145:130:554:97",},
|
||||
["Feralas"] = {"CAMPMOJACHE:146:148:694:238", "CHIMAERAROOSTVALE:106:150:785:321", "DIREMAUL:214:180:461:208", "DREAMBOUGH:141:122:459:0", "FERALSCARVALE:103:104:491:335", "FRAYFEATHERHIGHLANDS:101:163:485:391", "GORDUNNIOUTPOST:154:128:697:148", "GRIMTOTEMCOMPOUND:110:186:630:172", "ISLEOFDREAD:205:285:197:381", "LOWERWILDS:214:152:756:204", "ONEIROS:101:103:499:74", "RUINSOFISILDIEN:179:241:547:326", "RUINSOFRAVENWIND:178:149:310:0", "SARDORISLE:167:168:216:241", "THEFORGOTTENCOAST:132:316:409:258", "THETWINCOLOSSALS:278:235:323:78", "THEWRITHINGDEEP:214:205:625:305:2519:0",},
|
||||
["Gillijim"] = {"DEEPTIDESANCTUM:204:117:199:512", "DISTILLERYISLE:90:69:234:216", "FAELONSFOLLY:108:103:331:304", "GILLIJIMSTRAND:108:324:641:160", "JADEMINE:141:149:500:256", "KALKORPOINT:123:115:421:210", "KAZONISLAND:194:113:432:51", "MAULOGGPOST:137:227:512:401", "MAULOGGREFUGE:231:132:615:465", "RUINSOFZULRAZAR:215:136:369:384", "SILVERCOAST:245:184:311:386", "SILVERSANDBAR:47:128:256:398", "SOUTHSEASANDBAR:125:172:178:63", "TANGLEWOOD:135:188:576:297", "ZULRAZAR:137:168:375:282",},
|
||||
["Gilneas"] = {"BLACKTHORNSCAMP:160:163:32:171", "BROLOKMOUND:140:120:467:349", "DAWNSTONEMINE:130:144:292:155", "FREYSHEARKEEP:72:70:624:405", "GILNEASCITY:295:242:89:105", "GLAYMORESTEAD:140:127:483:129", "GREYMANESWATCH:119:158:580:311", "HOLLOWWEBCEMETARY:180:167:215:395", "HOLLOWWEBWOODS:171:118:341:452", "NORTHGATETOWER:130:137:397:172", "OLDROCKPASS:155:165:290:37", "RAVENSHIRE:194:237:472:431", "RAVENWOODKEEP:253:174:496:494", "ROSEWICKPLANTATION:134:140:331:155", "RUINSOFGREYSHIRE:192:144:230:260", "SHADEMORETAVERN:117:120:279:336", "SOUTHMIREORCHARD:202:133:302:354", "STILLWARDCHURCH:213:166:471:220", "THEDRYROCKMINE:129:127:145:262", "THEDRYROCKPIT:230:217:69:295", "THEGREYMANEWALL:131:173:412:48", "THEOVERGROWNACRE:134:154:390:269",},
|
||||
["GrimReaches"] = {"BAGGOTHSRAMPART:112:113:399:238", "BARLEYCRESTFARMSTEAD:116:88:499:222", "BRANGARSFOLLY:108:123:568:33", "DUNKITHAS:137:95:470:329", "EASTRIDGEOUTPOST:166:107:374:165", "GETHKAR:118:124:444:84", "GROLDANSEXCAVATION:125:117:567:231", "LAKEKITHAS:217:150:481:270", "RUINSOFSTOLGAZKEEP:134:146:366:53", "SALGAZMINES:150:119:535:380", "SHATTERBLADEPOST:186:130:512:126", "SLATEBEARDSFORGE:136:99:457:404", "THEGRIMHOLLOW:288:200:396:463", "THEHIGHPASS:97:141:409:315", "ZARMGETHPOINT:143:76:405:16", "ZARMGETHSTRONGHOLD:120:150:487:17",},
|
||||
["Hilsbrad"] = {"AZURELOADMINE:146:174:188:288", "DARROWHILL:173:132:426:164", "DUNGAROK:225:257:644:305", "DURNHOLDEKEEP:367:347:614:82", "EASTERNSTRAND:208:301:537:350", "HILLSBRADFIELDS:282:257:211:166", "NETHANDERSTEAD:190:215:554:249", "PURGATIONISLE:120:94:111:485", "SOUTHPOINTTOWER:271:207:11:203", "SOUTHSHORE:219:245:423:213", "TARRENMILL:195:291:524:9", "WESTERNSTRAND:272:139:215:377",},
|
||||
["Hinterlands"] = {"AERIEPEAK:240:195:20:250", "AGOLWATHA:188:180:382:173", "HIRIWATHA:201:118:188:314", "JINTHAALOR:223:277:514:338", "PLAGUEMISTRAVINE:124:203:170:158", "QUELDANILLODGE:168:181:248:194", "SERADANE:260:263:519:25", "SHADRAALOR:181:170:247:394", "SHAOLWATHA:265:190:580:247", "SKULKROCK:148:133:520:241", "THEALTAROFZUL:186:153:382:371", "THECREEPINGRUIN:168:157:417:268", "THEOVERLOOKCLIFFS:153:299:702:309", "THERASAZTRAILS:118:133:210:381", "VALORWINDLAKE:153:160:329:309",},
|
||||
["Hyjal"] = {"BARKSKINPLATEAU:207:167:390:297", "BARKSKINVILLAGE:502:293:417:346", "BLEAKHOLLOWCRATER:297:335:401:20", "CIRCLEOFPOWER:277:331:203:63", "DARKHOLLOWPASS:214:237:342:389", "NORDANAAR:139:146:778:118", "NORDRASSILGLADE:418:408:578:0", "RUINSOFTELENNAS:165:193:141:236", "THEEMERALDGATEWAY:309:244:109:353", "ZULHATHA:191:210:3:194",},
|
||||
["Icepoint"] = {"KANEQNUUN:512:430:237:129",},
|
||||
["Lapidis"] = {"BRIGHTCOAST:298:213:237:246", "CAELANSREST:147:111:517:230", "CROWNISLAND:140:95:512:33", "GORDOSHHEIGHTS:253:243:256:89", "HAZURRIGLADE:87:82:486:306", "SHANKSREEF:207:90:446:109", "THEROCK:74:72:687:149", "TOWEROFLAPIDIS:203:118:487:175", "WALLOWINGCOAST:240:184:505:326", "ZULHAZU:227:178:348:407",},
|
||||
["LochModan"] = {"GRIZZLEPAWRIDGE:262:343:326:325", "IRONBANDSEXCAVATIONSITE:321:294:491:276", "MOGROSHSTRONGHOLD:287:265:558:61", "NORTHGATEPASS:195:273:143:24:925:0", "SILVERSTREAMMINE:201:243:247:25", "STONESPLINTERVALLEY:226:255:230:363", "STONEWROUGHTDAM:260:149:354:23", "THEFARSTRIDERLODGE:162:182:741:298", "THELOCH:288:380:367:99", "THELSAMAR:243:205:225:214", "VALLEYOFKINGS:166:224:123:382",},
|
||||
["Moonglade"] = {"LAKEELUNEARA:530:484:256:101:2361:0",},
|
||||
["Moonwhisper"] = {"ANSHESRESPITE:170:120:398:81", "ANCESTRALGROUNDS:164:82:295:88", "BLACKROOTHOLD:162:137:495:465", "BLACKROOTVILLAGE:224:143:411:525", "FOULHEARTSANCTUM:157:149:496:232", "GROVEOFTHEMOON:152:146:464:347", "LUNARCLAWDEN:84:60:674:376", "MARASETHIL:96:94:640:417", "MOONHOOFRETREAT:172:144:419:167", "MOONHOOFVILLAGE:163:157:570:188", "MOONSILKHOLLOW:125:114:577:458", "MOROGAIVILLAGE:133:127:571:372", "NARVALISPOINT:162:139:503:118", "RUINSOFNENDIS:183:130:584:275", "STARSHARDCRADLE:122:109:334:121", "TYRANDAS:158:169:580:61", "VYSNAGOSASREST:163:102:420:8",},
|
||||
["Mulgore"] = {"BAELDUNDIGSITE:175:151:269:227", "BLOODHOOFVILLAGE:236:182:378:311", "PALEMANEROCK:102:183:315:317", "RAVAGEDCARAVAN:110:100:482:269", "REDCLOUDMESA:436:231:285:437:221:0", "REDROCKS:154:138:522:92", "SUNTAILPASS:129:116:533:18", "THEGOLDENPLAINS:184:217:441:91", "THEROLLINGPLAINS:231:166:536:369", "THEVENTURECOMINE:187:204:549:251", "THUNDERBLUFF:254:217:264:70", "THUNDERHORNWATERWELL:118:137:384:248", "WILDMANEWATERWELL:152:111:299:10", "WINDFURYRIDGE:182:119:405:2", "WINTERHOOFWATERWELL:144:107:470:379",},
|
||||
["Northwind"] = {"ABBEYGARDENS:250:224:512:33", "AMBERSHIRE:234:215:334:278", "AMBERWOODKEEP:243:205:187:308", "BLACKROCKBREACH:255:201:721:222", "BRISTLEWHISKERCAVERN:197:185:568:232", "CINDERFALLPASS:229:229:733:348", "CRAWFORDWINERY:160:222:513:285", "CRYSTALFALLS:320:205:627:464", "GRIMMENLAKE:218:210:550:352", "MERCHANTSHIGHROAD:353:249:256:420", "NORTHRIDGEPOINT:298:314:349:31", "NORTHWINDLOGGINGCAMP:224:185:258:171", "RUINSOFBIRKHAVEN:180:208:645:116", "SHERWOODQUARRY:293:287:702:1", "STILLHEARTPORT:174:155:116:217", "TOWEROFMAGILOU:181:223:189:169", "WITCHCOVEN:147:162:257:81",},
|
||||
["Redridge"] = {"ALTHERSMILL:222:260:407:134", "GALARDELLVALLEY:234:240:661:168:96:0", "LAKEEVERSTILL:522:260:140:249", "LAKERIDGEHIGHWAY:411:274:196:341", "LAKESHIRE:325:179:92:204", "REDRIDGECANYONS:345:232:132:79:98:0", "RENDERSCAMP:264:248:284:4:998:0", "RENDERSVALLEY:453:248:491:365", "REDWALLKEEP:162:110:830:466", "STONEWATCH:243:289:507:221:999:0", "STONEWATCHFALLS:308:200:601:325", "THREECORNERS:360:337:0:288",},
|
||||
["SearingGorge"] = {"BLACKCHARCAVE:264:224:84:371", "DUSTFIREVALLEY:446:355:428:11", "FIREWATCHRIDGE:385:413:95:39", "GRIMSILTDIGSITE:292:210:501:306", "TANNERCAMP:292:215:552:413", "THECAULDRON:414:310:257:178", "THESEAOFCINDERS:345:273:256:395",},
|
||||
["Silithus"] = {"HIVEASHI:431:276:305:34:3426:0", "HIVEREGAL:469:335:262:333:3427:0", "HIVEZORA:343:424:117:188", "SOUTHWINDVILLAGE:346:348:519:83:3077:0", "THECRYSTALVALE:285:274:121:31", "THESCARABWALL:271:145:125:523:2741:0", "TWILIGHTBASECAMP:297:238:355:206:3097:2739",},
|
||||
["Silverpine"] = {"AMBERMILL:204:210:512:279", "BERENSPERIL:206:146:508:433", "DEEPELEMMINE:127:143:484:274", "FENRISISLE:234:187:593:88:232:0", "MALDENSORCHARD:228:138:479:9:239:0", "NORTHTIDESHOLLOW:152:104:337:141", "OLSENSFARTHING:128:152:401:267", "PYREWOODVILLAGE:122:108:405:456", "SHADOWFANGKEEP:185:131:380:373", "THEDEADFIELD:141:134:419:82", "THEDECREPITFERRY:144:156:475:160", "THEGREYMANEWALL:175:185:398:465", "THESEPULCHER:193:135:360:184", "THESHININGSTRAND:225:192:475:27:227:0", "THESKITTERINGDARK:160:165:302:18",},
|
||||
["StonetalonMountains"] = {"AMANIALOR:504:252:8:5", "BAELHARDUL:357:252:512:257", "BLACKSANDOILFIELDS:504:504:8:5", "BOULDERSLIDERAVINE:90:76:586:547", "BRAMBLETHORNPASS:382:359:512:257", "BROKENCLIFFMINE:252:504:260:5", "CAMPAPARAJE:222:100:670:552", "GRIMTOTEMPOST:146:77:675:519", "MALAKAJIN:137:86:662:562", "MIRKFALLONLAKE:504:504:260:5", "POWDERTOWN:252:252:260:257", "SISHIRCANYON:252:264:512:257", "STONETALONPEAK:258:252:260:5", "SUNROCKRETREAT:504:252:260:257", "THECHARREDVALE:252:308:260:257", "THEEARTHENRING:504:252:260:257", "VENTURECOMPANYCAMP:252:504:260:5", "WEBWINDERPATH:256:324:512:256", "WINDSHEARCRAG:256:256:512:256:1277:0",},
|
||||
["Stranglethorn"] = {"BALALRUINS:83:65:245:101", "BALIAMAHRUINS:100:133:376:133", "BLOODSAILCOMPOUND:154:163:201:291", "BOOTYBAY:137:125:207:435:312:0", "CRYSTALVEINMINE:111:114:350:280", "GROMGOLBASECAMP:101:98:265:137", "JAGUEROISLE:132:107:319:498", "KALAIRUINS:86:89:303:93", "KURZENSCOMPOUND:141:139:394:5", "LAKENAZFERITI:124:120:332:60", "MISTVALEVALLEY:120:116:283:372", "MIZJAHRUINS:93:102:315:133", "MOSHOGGOGREMOUND:123:168:435:96", "NEKMANIWELLSPRING:80:102:215:365", "NESINGWARYSEXPEDITION:128:98:274:29", "REBELCAMP:164:86:289:0", "RUINSOFABORAZ:87:87:356:340", "RUINSOFJUBUWAL:100:105:312:304", "RUINSOFZULKUNDA:113:132:201:8", "RUINSOFZULMAMWE:162:122:397:213", "THEARENA:186:176:241:194", "THEVILEREEF:177:160:159:98", "VENTURECOBASECAMP:96:120:391:66", "WILDSHORE:151:175:237:431", "ZIATAJAIRUINS:127:120:364:231", "ZULGURUB:230:213:489:12", "ZUULDAIARUINS:103:105:160:47",},
|
||||
["SwampOfSorrows"] = {"FALLOWSANCTUARY:348:292:501:0", "ITHARIUSSCAVE:230:232:0:270", "MISTYREEDSTRAND:250:664:752:0:1978:0", "MISTYVALLEY:211:179:29:148", "POOLOFTEARS:280:256:576:227", "SORROWMURK:199:351:734:128", "SPLINTERSPEARJUNCTION:258:222:138:245", "STAGALBOG:328:238:561:386", "STONARD:343:303:287:244", "SORROWGUARDKEEP:220:174:0:266", "THEHARBORAGE:216:187:182:157", "THESHIFTINGMIRE:303:221:294:118",},
|
||||
["Tanaris"] = {"ABYSSALSANDS:194:159:376:207", "BROKENPILLAR:93:165:481:243", "CAVERNSOFTIME:139:132:567:262", "DUNEMAULCOMPOUND:186:127:337:298", "EASTMOONRUINS:143:130:405:355", "GADGETZAN:156:149:430:102", "LANDSENDBEACH:184:148:456:514", "LOSTRIGGERCOVE:141:173:635:230", "NOONSHADERUINS:129:191:530:43", "SANDSORROWWATCH:175:157:311:111", "SOUTHBREAKSHORE:192:151:510:304", "SOUTHMOONRUINS:185:196:324:366", "STEAMWHEEDLEPORT:136:129:599:86", "SLICKWICKOILRIG:237:181:129:436", "THEGAPINGCHASM:198:188:458:380", "THENOXIOUSLAIR:155:180:265:209", "THISTLESHRUBVALLEY:166:234:217:294", "VALLEYOFTHEWATCHERS:125:115:311:470", "WATERSPRINGFIELD:145:164:516:177", "ZALASHJISDEN:90:127:619:157", "ZULFARRAK:191:166:265:5",},
|
||||
["TelAbim"] = {"BIXXLESSTOREHOUSE:300:127:368:178", "HIGHVALERISE:191:187:468:248", "TAZZOSSHACK:229:232:453:391", "TELCOBASECAMP:184:183:342:440", "THEDERELICTCAMP:165:205:364:273", "THEJAGGEDISLES:313:256:385:16",},
|
||||
["Teldrassil"] = {"BANETHILHOLLOW:136:191:392:289", "DARNASSUS:294:252:110:251", "DOLANAAR:170:119:469:327", "GNARLPINEHOLD:230:158:316:417", "LAKEALAMETH:237:163:445:388", "POOLSOFARLITHRIEN:125:180:337:314", "RUTTHERANVILLAGE:110:91:504:548", "SHADOWGLEN:198:201:504:164", "STARBREEZEVILLAGE:153:175:588:303", "THEORACLEGLADE:150:223:279:135", "URSANHEIGHTS:229:154:243:423", "WELLSPRINGLAKE:166:245:383:98:265:0",},
|
||||
["ThalassianHighlands"] = {"ALAHTHALAS:470:276:429:38", "ANASTERIANPARK:229:219:385:256", "BRINTHILIEN:180:211:395:450", "FELSTRIDERRETREAT:201:207:165:428", "ISLEOFETERNALAUTUMN:204:167:236:117", "RUINSOFNASHALARAN:249:266:36:151", "SILVERSUNMINE:208:189:288:373", "THEFARSTRIDE:230:199:212:255", "THELASTRUNESTONE:179:203:507:379",},
|
||||
["ThousandNeedles"] = {"CAMPETHOK:289:300:7:1:2237:0", "DARKCLOUDPINNACLE:189:182:267:138", "FREEWINDPOST:193:173:366:273", "HIGHPERCH:178:174:39:164", "SPLITHOOFCRAG:193:175:400:203", "THEGREATLIFT:191:163:213:78", "THESCREECHINGCANYON:240:231:187:206", "THESHIMMERINGFLATS:312:355:612:308", "WINDBREAKCANYON:225:213:501:249",},
|
||||
["Tirisfal"] = {"AGAMANDMILLS:244:191:342:148", "BALNIRFARMSTEAD:179:153:639:335", "BRIGHTWATERLAKE:176:280:598:143", "BRILL:121:144:540:305", "BULWARK:184:169:712:374", "COLDHEARTHMANOR:136:125:479:328", "CRUSADEROUTPOST:154:121:701:293", "DEATHKNELL:210:186:236:337", "GARRENSHAUNT:148:199:507:154", "GLENSHIRE:163:161:157:393:5033:5039", "MONASTARY:175:157:762:139:161:0", "NIGHTMAREVALE:209:151:370:355", "RUINSOFLORDAERON:299:216:469:370", "SCARLETWATCHPOST:141:223:701:113", "SOLLIDENFARMSTEAD:225:138:247:259", "STEEPCLIFFPORT:121:120:5:350", "STILLWATERPOND:168:123:401:279", "THECORINTHFARMSTEAD:116:152:73:402:5041:0", "THEWHISPERINGFOREST:243:175:86:263:5035:0", "VENOMWEBVALE:199:183:776:225",},
|
||||
["UngoroCrater"] = {"FIREPLUMERIDGE:277:258:377:185", "GOLAKKAHOTSPRINGS:299:334:133:158", "IRONSTONEPLATEAU:276:281:588:69", "LAKKARITARPITS:553:255:170:13", "TERRORRUN:333:275:166:375", "THEMARSHLANDS:295:341:568:247", "THESLITHERINGSCAR:326:260:378:403",},
|
||||
["WesternPlaguelands"] = {"CAERDARROW:158:150:608:421", "DALSONSTEARS:209:138:388:271", "DARROWMERELAKE:359:261:510:348", "FELSTONEFIELD:149:119:306:315", "GAHRRONSWITHERING:165:191:527:257", "HEARTHGLEN:331:280:312:20", "NORTHRIDGELUMBERCAMP:205:168:390:170", "RUINSOFANDORHOL:275:219:265:360", "SORROWHILL:290:201:360:467", "THEBULWARK:216:172:143:300", "THEWEEPINGCAVE:148:192:572:203", "THEWRITHINGHAUNT:159:177:457:329", "THONDRORILRIVER:193:326:597:94",},
|
||||
["Westfall"] = {"ALEXSTONFARMSTEAD:275:182:220:274", "DEMONTSPLACE:166:155:226:391", "FURLBROWSPUMPKINFARM:186:191:399:24", "GOLDCOASTQUARRY:194:241:234:113", "JANGOLODEMINE:185:187:323:44", "MOONBROOK:208:174:317:349:919:0", "SALDEANSFARM:191:184:478:119", "SENTINELHILL:161:210:461:259", "THEDAGGERHILLS:235:149:349:430", "THEDEADACRE:164:213:542:267", "THEDUSTPLAINS:260:204:538:393", "THEJANSENSTEAD:143:183:498:6", "THEMOLSENFARM:199:180:342:161", "WESTFALLLIGHTHOUSE:306:161:171:482",},
|
||||
["Wetlands"] = {"ANGERFANGENCAMPMENT:196:150:364:241", "BLACKCHANNELMARSH:213:173:95:260", "BLUEGILLMARSH:195:165:111:157", "DIREFORGEHILL:233:225:515:128", "DUNMODR:173:147:419:42", "DUNAGRATH:222:190:97:335", "GRIMBATOL:317:331:623:242:1037:0", "HAWKSVIGIL:170:162:264:353", "IRONBEARDSTOMB:165:156:368:135", "MENETHILHARBOR:156:116:27:321", "MOSSHIDEFEN:215:224:539:277", "RAPTORRIDGE:159:115:640:191", "SALTSPRAYGLEN:170:214:254:58", "SUNDOWNMARSH:265:212:113:100", "THEGREENBELT:153:209:473:143", "THELGANROCK:207:165:478:383:836:0", "WHELGARSEXCAVATIONSITE:172:156:264:224",},
|
||||
["Winterspring"] = {"DARKWHISPERGORGE:247:191:452:447", "EVERLOOK:151:189:516:114", "FROSTFIREHOTSPRINGS:226:124:231:180", "FROSTSABERROCK:240:172:375:11", "FROSTWHISPERGORGE:184:144:531:383", "ICETHISTLEHILLS:116:155:617:247", "LAKEKELTHERIL:203:176:409:205", "MAZTHORIL:174:169:499:265", "OWLWINGTHICKET:149:127:600:348", "STARFALLVILLAGE:174:148:399:143", "THEHIDDENGROVE:162:174:562:33", "TIMBERMAWPOST:223:112:235:248", "WINTERFALLVILLAGE:133:120:622:163",},
|
||||
}
|
||||
Vendored
+2991
File diff suppressed because it is too large
Load Diff
Vendored
+11
-9
@@ -27,7 +27,6 @@ pfUI_translation["deDE"] = {
|
||||
["Always Show Item Comparison"] = nil,
|
||||
["Always Show On Target Units"] = nil,
|
||||
["Always Show On Units With Missing HP"] = nil,
|
||||
["Always Show Self In Raid Frames"] = nil,
|
||||
["Always Use 2D Portraits"] = nil,
|
||||
["Ammo Counter"] = nil,
|
||||
["Anchor Bags Above Chat"] = nil,
|
||||
@@ -52,10 +51,12 @@ pfUI_translation["deDE"] = {
|
||||
["Auto Sell Grey Items"] = nil,
|
||||
["Average Per Hour"] = nil,
|
||||
["Background Color"] = nil,
|
||||
["Bags"] = "Taschen",
|
||||
["Bags & Bank"] = nil,
|
||||
["Bags Border Size"] = nil,
|
||||
["Bagslots Per Row"] = nil,
|
||||
["Bagspace"] = nil,
|
||||
["Bank"] = "Bank",
|
||||
["Banker"] = nil,
|
||||
["Bankslots Per Row"] = nil,
|
||||
["Bar Background"] = nil,
|
||||
@@ -124,6 +125,7 @@ pfUI_translation["deDE"] = {
|
||||
["Click Casting"] = nil,
|
||||
["Clock"] = nil,
|
||||
["Close"] = nil,
|
||||
["Collapse Empty Slots"] = nil,
|
||||
["Color"] = nil,
|
||||
["Color Buff Stacks"] = nil,
|
||||
["Color Debuff Stacks"] = nil,
|
||||
@@ -138,7 +140,6 @@ pfUI_translation["deDE"] = {
|
||||
["Combat Timer"] = nil,
|
||||
["Combopoint Height"] = nil,
|
||||
["Combopoint Width"] = nil,
|
||||
["Compare Item Base Stats"] = nil,
|
||||
["Components"] = nil,
|
||||
["Config UI Settings"] = nil,
|
||||
["Configuration"] = nil,
|
||||
@@ -199,7 +200,6 @@ pfUI_translation["deDE"] = {
|
||||
["Description Font"] = nil,
|
||||
["Description Font Size"] = nil,
|
||||
["Detailed Random Roll Announcement"] = nil,
|
||||
["Detect Enemy Buffs"] = nil,
|
||||
["Disable"] = nil,
|
||||
["Disable Blizzard Castbar"] = nil,
|
||||
["Disabled"] = nil,
|
||||
@@ -281,7 +281,6 @@ pfUI_translation["deDE"] = {
|
||||
["Enable Energy Ticks"] = nil,
|
||||
["Enable Extended Guild Information"] = nil,
|
||||
["Enable Frame Shadow"] = nil,
|
||||
["Enable Full-Text Search"] = nil,
|
||||
["Enable Indicators"] = nil,
|
||||
["Enable Item Quality Color For Equipment Only"] = nil,
|
||||
["Enable \"Loot & Spam\" Chat Window"] = nil,
|
||||
@@ -291,7 +290,6 @@ pfUI_translation["deDE"] = {
|
||||
["Enable Mana Ticks"] = nil,
|
||||
["Enable Micro Bar"] = nil,
|
||||
["Enable Mouselook With Right Click"] = nil,
|
||||
["Enable Mouseover Tooltip"] = nil,
|
||||
["Enable Movable Bags"] = nil,
|
||||
["Enable Offscreen Frame Positions"] = nil,
|
||||
["Enable Overlap"] = nil,
|
||||
@@ -312,6 +310,7 @@ pfUI_translation["deDE"] = {
|
||||
["Encode"] = nil,
|
||||
["Ended"] = nil,
|
||||
["Energy Color"] = nil,
|
||||
["Equipped"] = "Angelegt",
|
||||
["Equipped Item Color"] = nil,
|
||||
["Estimate Debuffs"] = nil,
|
||||
["Estimate Enemy Health Points"] = nil,
|
||||
@@ -569,6 +568,7 @@ pfUI_translation["deDE"] = {
|
||||
["Overwrite If Unit Is Attacking Others"] = nil,
|
||||
["Overwrite If Unit Is Attacking You"] = nil,
|
||||
["Overwrite If Unit Is Casting"] = nil,
|
||||
["Owner Name"] = nil,
|
||||
["Pageable"] = nil,
|
||||
["Paging Actionbar"] = nil,
|
||||
["Panel"] = nil,
|
||||
@@ -616,12 +616,13 @@ pfUI_translation["deDE"] = {
|
||||
["Raid Mark X-Offset"] = nil,
|
||||
["Raid Mark Y-Offset"] = nil,
|
||||
["Raid Padding"] = nil,
|
||||
["Raid-Pet"] = nil,
|
||||
["Random"] = nil,
|
||||
["Random Roll Announcement Rarity"] = nil,
|
||||
["Random Rolling"] = nil,
|
||||
["Range Based Hunter Paging"] = nil,
|
||||
["Range Check Interval"] = nil,
|
||||
["Rank"] = nil,
|
||||
["Recast Totem"] = nil,
|
||||
["Red Border On Enemy Units"] = nil,
|
||||
["Red Name Text On Infight Units"] = nil,
|
||||
["Regional Settings"] = nil,
|
||||
@@ -667,7 +668,6 @@ pfUI_translation["deDE"] = {
|
||||
["Scale"] = nil,
|
||||
["Scale Border On HiDPI Displays"] = nil,
|
||||
["Scaling"] = nil,
|
||||
["Scan Macros For Spells"] = nil,
|
||||
["Screen Edge Glow Intensity"] = nil,
|
||||
["Screen Resolution"] = nil,
|
||||
["Screenshot"] = nil,
|
||||
@@ -703,6 +703,7 @@ pfUI_translation["deDE"] = {
|
||||
["Show Description"] = nil,
|
||||
["Show Dispel Indicators"] = nil,
|
||||
["Show Druid Mana Bar"] = nil,
|
||||
["Show Druid Mana Bar Text"] = nil,
|
||||
["Show Duration Inside Buff"] = nil,
|
||||
["Show Empty Buttons"] = nil,
|
||||
["Show FPS and Latency Colors"] = nil,
|
||||
@@ -739,6 +740,7 @@ pfUI_translation["deDE"] = {
|
||||
["Show Required Questitem Count"] = nil,
|
||||
["Show Resting"] = nil,
|
||||
["Show Self In Group Frames"] = nil,
|
||||
["Show Self In Raid Frames When Solo"] = nil,
|
||||
["Show Spell Icon"] = nil,
|
||||
["Show Spell Name"] = nil,
|
||||
["Show Stacks"] = nil,
|
||||
@@ -783,6 +785,7 @@ pfUI_translation["deDE"] = {
|
||||
["Target Castbar"] = nil,
|
||||
["Target Debuff Bar"] = nil,
|
||||
["Target Nameplate Zoom Factor"] = nil,
|
||||
["Target Totem"] = nil,
|
||||
["Target-Target"] = nil,
|
||||
["Target-Target-Target"] = nil,
|
||||
["Text"] = nil,
|
||||
@@ -815,6 +818,7 @@ pfUI_translation["deDE"] = {
|
||||
["Top Actionbar"] = nil,
|
||||
["Top Left"] = nil,
|
||||
["Top Right"] = nil,
|
||||
["Total"] = "Gesamt",
|
||||
["Total Gold"] = nil,
|
||||
["Totem Direction"] = nil,
|
||||
["Totem Icons"] = nil,
|
||||
@@ -867,7 +871,6 @@ pfUI_translation["deDE"] = {
|
||||
["Website"] = nil,
|
||||
["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."] = nil,
|
||||
["Whitelist"] = nil,
|
||||
["Who Search Unknown Classes (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Width"] = nil,
|
||||
["Wobble Zoom"] = nil,
|
||||
["Won"] = nil,
|
||||
@@ -877,7 +880,6 @@ pfUI_translation["deDE"] = {
|
||||
["XP Percentage"] = nil,
|
||||
["Yellow Border On Neutral Units"] = nil,
|
||||
["Yes"] = nil,
|
||||
["You gain (.+) Mana from Totemic Recall"] = nil,
|
||||
["You got"] = nil,
|
||||
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = nil,
|
||||
["Your items have been repaired for"] = nil,
|
||||
|
||||
Vendored
+39
-9
@@ -19,6 +19,7 @@ pfUI_translation["enUS"] = {
|
||||
["Align Chat Windows"] = nil,
|
||||
["Aligned Position"] = nil,
|
||||
["All messages will be forwarded to:"] = nil,
|
||||
["All players passed"] = nil,
|
||||
["Alt-Click Action"] = nil,
|
||||
["Always Allow Drag Via Shift Key"] = nil,
|
||||
["Always Show"] = nil,
|
||||
@@ -27,7 +28,6 @@ pfUI_translation["enUS"] = {
|
||||
["Always Show Item Comparison"] = nil,
|
||||
["Always Show On Target Units"] = nil,
|
||||
["Always Show On Units With Missing HP"] = nil,
|
||||
["Always Show Self In Raid Frames"] = nil,
|
||||
["Always Use 2D Portraits"] = nil,
|
||||
["Ammo Counter"] = nil,
|
||||
["Anchor Bags Above Chat"] = nil,
|
||||
@@ -52,15 +52,19 @@ pfUI_translation["enUS"] = {
|
||||
["Auto Sell Grey Items"] = nil,
|
||||
["Average Per Hour"] = nil,
|
||||
["Background Color"] = nil,
|
||||
["Bags"] = nil,
|
||||
["Bags & Bank"] = nil,
|
||||
["Bags Border Size"] = nil,
|
||||
["Bagslots Per Row"] = nil,
|
||||
["Bagspace"] = nil,
|
||||
["Bank"] = nil,
|
||||
["Banker"] = nil,
|
||||
["Bankslots Per Row"] = nil,
|
||||
["Bar Background"] = nil,
|
||||
["Bar Texture"] = nil,
|
||||
["Battleground Frames"] = nil,
|
||||
["Battleground Statistics"] = nil,
|
||||
["BEHIND"] = nil,
|
||||
["Blacklist"] = nil,
|
||||
["Blinding Powder"] = nil,
|
||||
["Blue Border On Friendly Players"] = nil,
|
||||
@@ -83,6 +87,8 @@ pfUI_translation["enUS"] = {
|
||||
["Buffs"] = nil,
|
||||
["Buff Size"] = nil,
|
||||
["Buff Spacing"] = nil,
|
||||
["Buff X-Spacing"] = nil,
|
||||
["Buff Y-Spacing"] = nil,
|
||||
["Buffs Per Row"] = nil,
|
||||
["Button"] = nil,
|
||||
["Button already exists in pfMinimapButtons frame"] = nil,
|
||||
@@ -119,11 +125,13 @@ pfUI_translation["enUS"] = {
|
||||
["Chat Bubble Transparency"] = nil,
|
||||
["Chat Default Brackets"] = nil,
|
||||
["Class"] = nil,
|
||||
["Clear"] = nil,
|
||||
["Clear Rolls"] = nil,
|
||||
["Click Action"] = nil,
|
||||
["Click Casting"] = nil,
|
||||
["Clock"] = nil,
|
||||
["Close"] = nil,
|
||||
["Collapse Empty Slots"] = nil,
|
||||
["Color"] = nil,
|
||||
["Color Buff Stacks"] = nil,
|
||||
["Color Debuff Stacks"] = nil,
|
||||
@@ -138,7 +146,6 @@ pfUI_translation["enUS"] = {
|
||||
["Combat Timer"] = nil,
|
||||
["Combopoint Height"] = nil,
|
||||
["Combopoint Width"] = nil,
|
||||
["Compare Item Base Stats"] = nil,
|
||||
["Components"] = nil,
|
||||
["Config UI Settings"] = nil,
|
||||
["Configuration"] = nil,
|
||||
@@ -187,6 +194,8 @@ pfUI_translation["enUS"] = {
|
||||
["Debuff Position"] = nil,
|
||||
["Debuffs"] = nil,
|
||||
["Debuff Size"] = nil,
|
||||
["Debuff X-Spacing"] = nil,
|
||||
["Debuff Y-Spacing"] = nil,
|
||||
["Debuffs Per Row"] = nil,
|
||||
["Decode"] = nil,
|
||||
["Default"] = nil,
|
||||
@@ -195,11 +204,11 @@ pfUI_translation["enUS"] = {
|
||||
["Deficit"] = nil,
|
||||
["Delete profile"] = nil,
|
||||
["Delete / Reset"] = nil,
|
||||
["Dependencies"] = nil,
|
||||
["Descending"] = nil,
|
||||
["Description Font"] = nil,
|
||||
["Description Font Size"] = nil,
|
||||
["Detailed Random Roll Announcement"] = nil,
|
||||
["Detect Enemy Buffs"] = nil,
|
||||
["Disable"] = nil,
|
||||
["Disable Blizzard Castbar"] = nil,
|
||||
["Disabled"] = nil,
|
||||
@@ -281,7 +290,6 @@ pfUI_translation["enUS"] = {
|
||||
["Enable Energy Ticks"] = nil,
|
||||
["Enable Extended Guild Information"] = nil,
|
||||
["Enable Frame Shadow"] = nil,
|
||||
["Enable Full-Text Search"] = nil,
|
||||
["Enable Indicators"] = nil,
|
||||
["Enable Item Quality Color For Equipment Only"] = nil,
|
||||
["Enable \"Loot & Spam\" Chat Window"] = nil,
|
||||
@@ -291,7 +299,6 @@ pfUI_translation["enUS"] = {
|
||||
["Enable Mana Ticks"] = nil,
|
||||
["Enable Micro Bar"] = nil,
|
||||
["Enable Mouselook With Right Click"] = nil,
|
||||
["Enable Mouseover Tooltip"] = nil,
|
||||
["Enable Movable Bags"] = nil,
|
||||
["Enable Offscreen Frame Positions"] = nil,
|
||||
["Enable Overlap"] = nil,
|
||||
@@ -312,6 +319,7 @@ pfUI_translation["enUS"] = {
|
||||
["Encode"] = nil,
|
||||
["Ended"] = nil,
|
||||
["Energy Color"] = nil,
|
||||
["Equipped"] = nil,
|
||||
["Equipped Item Color"] = nil,
|
||||
["Estimate Debuffs"] = nil,
|
||||
["Estimate Enemy Health Points"] = nil,
|
||||
@@ -324,6 +332,7 @@ pfUI_translation["enUS"] = {
|
||||
["Export"] = nil,
|
||||
["Face"] = nil,
|
||||
["Fade To Custom Color"] = nil,
|
||||
["FARM MODE"] = nil,
|
||||
["Fast"] = nil,
|
||||
["Filter Mode"] = nil,
|
||||
["Finish"] = nil,
|
||||
@@ -409,6 +418,7 @@ pfUI_translation["enUS"] = {
|
||||
["Highlight Equipped Items"] = nil,
|
||||
["Highlight Not Usable Spells"] = nil,
|
||||
["Highlight Out Of Mana Spells"] = nil,
|
||||
["Highlight New Items"] = nil,
|
||||
["Highlight Out Of Range Spells"] = nil,
|
||||
["Highlight Settings That Require Reload"] = nil,
|
||||
["Highlight Unusable Items"] = nil,
|
||||
@@ -477,6 +487,7 @@ pfUI_translation["enUS"] = {
|
||||
["Look & Feel"] = nil,
|
||||
["Loot"] = nil,
|
||||
["Loot & Spam"] = nil,
|
||||
["Loot History"] = nil,
|
||||
["Macro Text Color"] = nil,
|
||||
["Macro Text Size"] = nil,
|
||||
["Main Actionbar"] = nil,
|
||||
@@ -499,6 +510,7 @@ pfUI_translation["enUS"] = {
|
||||
["Menu Font Size"] = nil,
|
||||
["Messages are no longer forwarded to:"] = nil,
|
||||
["Middle Mouse Button"] = nil,
|
||||
["Missing"] = nil,
|
||||
["Minimap"] = nil,
|
||||
["Minimap Panel"] = nil,
|
||||
["Minimap Size (|cffffaaaaExperimental|r)"] = nil,
|
||||
@@ -525,11 +537,13 @@ pfUI_translation["enUS"] = {
|
||||
["Network Latency"] = nil,
|
||||
["Network Up"] = nil,
|
||||
["New entry:"] = nil,
|
||||
["New Item Color"] = nil,
|
||||
["NEW TIMER"] = nil,
|
||||
["Next"] = nil,
|
||||
["Next Memory Cleanup"] = nil,
|
||||
["No"] = nil,
|
||||
["No Anchor"] = nil,
|
||||
["NO LOS"] = nil,
|
||||
["None"] = nil,
|
||||
["Not a valid button!"] = nil,
|
||||
["No tracking spell active"] = nil,
|
||||
@@ -552,6 +566,7 @@ pfUI_translation["enUS"] = {
|
||||
["Only Show Own Debuffs (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Only Show Target Castbar"] = nil,
|
||||
["On State Change"] = nil,
|
||||
["Optional Dependencies"] = nil,
|
||||
["Options"] = nil,
|
||||
["Orientation"] = nil,
|
||||
["Other Panel: Minimap"] = nil,
|
||||
@@ -569,6 +584,9 @@ pfUI_translation["enUS"] = {
|
||||
["Overwrite If Unit Is Attacking Others"] = nil,
|
||||
["Overwrite If Unit Is Attacking You"] = nil,
|
||||
["Overwrite If Unit Is Casting"] = nil,
|
||||
["Own Buff Size"] = nil,
|
||||
["Own Debuff Size"] = nil,
|
||||
["Owner Name"] = nil,
|
||||
["Pageable"] = nil,
|
||||
["Paging Actionbar"] = nil,
|
||||
["Panel"] = nil,
|
||||
@@ -616,12 +634,13 @@ pfUI_translation["enUS"] = {
|
||||
["Raid Mark X-Offset"] = nil,
|
||||
["Raid Mark Y-Offset"] = nil,
|
||||
["Raid Padding"] = nil,
|
||||
["Raid-Pet"] = nil,
|
||||
["Random"] = nil,
|
||||
["Random Roll Announcement Rarity"] = nil,
|
||||
["Random Rolling"] = nil,
|
||||
["Range Based Hunter Paging"] = nil,
|
||||
["Range Check Interval"] = nil,
|
||||
["Rank"] = nil,
|
||||
["Recast Totem"] = nil,
|
||||
["Red Border On Enemy Units"] = nil,
|
||||
["Red Name Text On Infight Units"] = nil,
|
||||
["Regional Settings"] = nil,
|
||||
@@ -645,6 +664,7 @@ pfUI_translation["enUS"] = {
|
||||
["Resting"] = nil,
|
||||
["Reveal Unexplored Areas"] = nil,
|
||||
["Switch to current zone"] = nil,
|
||||
["Retrieving item information..."] = nil,
|
||||
["Right"] = nil,
|
||||
["Right Actionbar"] = nil,
|
||||
["Right Anchor"] = nil,
|
||||
@@ -667,7 +687,6 @@ pfUI_translation["enUS"] = {
|
||||
["Scale"] = nil,
|
||||
["Scale Border On HiDPI Displays"] = nil,
|
||||
["Scaling"] = nil,
|
||||
["Scan Macros For Spells"] = nil,
|
||||
["Screen Edge Glow Intensity"] = nil,
|
||||
["Screen Resolution"] = nil,
|
||||
["Screenshot"] = nil,
|
||||
@@ -703,6 +722,7 @@ pfUI_translation["enUS"] = {
|
||||
["Show Description"] = nil,
|
||||
["Show Dispel Indicators"] = nil,
|
||||
["Show Druid Mana Bar"] = nil,
|
||||
["Show Druid Mana Bar Text"] = nil,
|
||||
["Show Duration Inside Buff"] = nil,
|
||||
["Show Empty Buttons"] = nil,
|
||||
["Show FPS and Latency Colors"] = nil,
|
||||
@@ -739,6 +759,7 @@ pfUI_translation["enUS"] = {
|
||||
["Show Required Questitem Count"] = nil,
|
||||
["Show Resting"] = nil,
|
||||
["Show Self In Group Frames"] = nil,
|
||||
["Show Self In Raid Frames When Solo"] = nil,
|
||||
["Show Spell Icon"] = nil,
|
||||
["Show Spell Name"] = nil,
|
||||
["Show Stacks"] = nil,
|
||||
@@ -750,12 +771,17 @@ pfUI_translation["enUS"] = {
|
||||
["Show Totems Indicators"] = nil,
|
||||
["Shrink & Return"] = nil,
|
||||
["Size"] = nil,
|
||||
["Spell Name Alignment"] = nil,
|
||||
["Spell Name X Offset"] = nil,
|
||||
["Spell Name Y Offset"] = nil,
|
||||
["Skin"] = nil,
|
||||
["Skins"] = nil,
|
||||
["Slow"] = nil,
|
||||
["Small"] = nil,
|
||||
["Some settings need to reload the UI to take effect.\nDo you want to reload now?"] = nil,
|
||||
["Some settings need to reload the UI to take effect.\nDo you want to reloadUI now?"] = nil,
|
||||
["Sort Bags"] = nil,
|
||||
["Sort Bank"] = nil,
|
||||
["Sort Order"] = nil,
|
||||
["Soul Shard"] = nil,
|
||||
["Soulshard Counter"] = nil,
|
||||
@@ -777,12 +803,14 @@ pfUI_translation["enUS"] = {
|
||||
["Switch Pages On Alt Key Press"] = nil,
|
||||
["Switch Pages On Ctrl Key Press"] = nil,
|
||||
["Switch Pages On Druid Stealth"] = nil,
|
||||
["Switch Pages On Priest Shadowform"] = nil,
|
||||
["Switch Pages On Shift Key Press"] = nil,
|
||||
["Systeminfo"] = nil,
|
||||
["Target"] = nil,
|
||||
["Target Castbar"] = nil,
|
||||
["Target Debuff Bar"] = nil,
|
||||
["Target Nameplate Zoom Factor"] = nil,
|
||||
["Target Totem"] = nil,
|
||||
["Target-Target"] = nil,
|
||||
["Target-Target-Target"] = nil,
|
||||
["Text"] = nil,
|
||||
@@ -798,6 +826,9 @@ pfUI_translation["enUS"] = {
|
||||
["Threshold To Trust Health Estimation"] = nil,
|
||||
["Time"] = nil,
|
||||
["Timer"] = nil,
|
||||
["Timer Alignment"] = nil,
|
||||
["Timer X Offset"] = nil,
|
||||
["Timer Y Offset"] = nil,
|
||||
["Time Remaining"] = nil,
|
||||
["Timer In Minutes"] = nil,
|
||||
["Timestamp Brackets"] = nil,
|
||||
@@ -815,6 +846,7 @@ pfUI_translation["enUS"] = {
|
||||
["Top Actionbar"] = nil,
|
||||
["Top Left"] = nil,
|
||||
["Top Right"] = nil,
|
||||
["Total"] = nil,
|
||||
["Total Gold"] = nil,
|
||||
["Totem Direction"] = nil,
|
||||
["Totem Icons"] = nil,
|
||||
@@ -867,7 +899,6 @@ pfUI_translation["enUS"] = {
|
||||
["Website"] = nil,
|
||||
["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."] = nil,
|
||||
["Whitelist"] = nil,
|
||||
["Who Search Unknown Classes (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Width"] = nil,
|
||||
["Wobble Zoom"] = nil,
|
||||
["Won"] = nil,
|
||||
@@ -877,7 +908,6 @@ pfUI_translation["enUS"] = {
|
||||
["XP Percentage"] = nil,
|
||||
["Yellow Border On Neutral Units"] = nil,
|
||||
["Yes"] = nil,
|
||||
["You gain (.+) Mana from Totemic Recall"] = nil,
|
||||
["You got"] = nil,
|
||||
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = nil,
|
||||
["Your items have been repaired for"] = nil,
|
||||
|
||||
Vendored
+11
-9
@@ -27,7 +27,6 @@ pfUI_translation["esES"] = {
|
||||
["Always Show Item Comparison"] = "Mostrar siempre la comparativa entre objetos",
|
||||
["Always Show On Target Units"] = "Mostrar siempre en el objectivo",
|
||||
["Always Show On Units With Missing HP"] = "Mostrar siempre en unidades con falta de salud",
|
||||
["Always Show Self In Raid Frames"] = "Mostrarse siempre a sí mismo en los marcos de banda",
|
||||
["Always Use 2D Portraits"] = "Usar siempre retratos 2D",
|
||||
["Ammo Counter"] = "Contador de munición",
|
||||
["Anchor Bags Above Chat"] = nil,
|
||||
@@ -52,10 +51,12 @@ pfUI_translation["esES"] = {
|
||||
["Auto Sell Grey Items"] = "Vender objetos grises automáticamente",
|
||||
["Average Per Hour"] = "Promedio por hora",
|
||||
["Background Color"] = "Color del fondo",
|
||||
["Bags"] = "Bolsas",
|
||||
["Bags & Bank"] = "Bolsas y banco",
|
||||
["Bags Border Size"] = "Tamaño del borde de las bolsas",
|
||||
["Bagslots Per Row"] = "Casillas de la bolsa por fila",
|
||||
["Bagspace"] = "Huecos en las bolsas",
|
||||
["Bank"] = "Banco",
|
||||
["Banker"] = "Banquero",
|
||||
["Bankslots Per Row"] = "Casillas del banco por fila",
|
||||
["Bar Background"] = "Fondo de la barra",
|
||||
@@ -124,6 +125,7 @@ pfUI_translation["esES"] = {
|
||||
["Click Casting"] = "Lanzamiento al hacer click",
|
||||
["Clock"] = "Reloj",
|
||||
["Close"] = "Cerrar",
|
||||
["Collapse Empty Slots"] = nil,
|
||||
["Color"] = nil,
|
||||
["Color Buff Stacks"] = "Colorear pilas de beneficios",
|
||||
["Color Debuff Stacks"] = "Colorear pilas de perjuicios",
|
||||
@@ -138,7 +140,6 @@ pfUI_translation["esES"] = {
|
||||
["Combat Timer"] = "Temporizador de combate",
|
||||
["Combopoint Height"] = nil,
|
||||
["Combopoint Width"] = nil,
|
||||
["Compare Item Base Stats"] = "Comparar estadísticas bases de objetos",
|
||||
["Components"] = "Componentes",
|
||||
["Config UI Settings"] = nil,
|
||||
["Configuration"] = "Configuración",
|
||||
@@ -199,7 +200,6 @@ pfUI_translation["esES"] = {
|
||||
["Description Font"] = "Fuente de descripción",
|
||||
["Description Font Size"] = "Tamaño de la fuente de descripción",
|
||||
["Detailed Random Roll Announcement"] = "Anuncio detallado para tirar los dados aleatoriamente",
|
||||
["Detect Enemy Buffs"] = nil,
|
||||
["Disable"] = "Desactivar",
|
||||
["Disable Blizzard Castbar"] = "Desactivar la barra de lanzamiento de Blizzard",
|
||||
["Disabled"] = "Desactivado",
|
||||
@@ -281,7 +281,6 @@ pfUI_translation["esES"] = {
|
||||
["Enable Energy Ticks"] = "Activar tics de energía",
|
||||
["Enable Extended Guild Information"] = "Activar información de hermandad extendida",
|
||||
["Enable Frame Shadow"] = "Activar sombra del marco",
|
||||
["Enable Full-Text Search"] = nil,
|
||||
["Enable Indicators"] = "Activar indicadores",
|
||||
["Enable Item Quality Color For Equipment Only"] = "Mostrar el color de calidad de objetos solo para equipo",
|
||||
["Enable \"Loot & Spam\" Chat Window"] = "Activar ventana de chat \"Botín y spam\"",
|
||||
@@ -291,7 +290,6 @@ pfUI_translation["esES"] = {
|
||||
["Enable Mana Ticks"] = "Activar el indicador de pulsos del maná",
|
||||
["Enable Micro Bar"] = "Activar microbarra",
|
||||
["Enable Mouselook With Right Click"] = "Mirar usando el puntero con clic derecho",
|
||||
["Enable Mouseover Tooltip"] = "Activar la descripción emergente al pasar el puntero",
|
||||
["Enable Movable Bags"] = "Permitir mover las bolsas",
|
||||
["Enable Offscreen Frame Positions"] = "Permitir mover los marcos fuera de la pantalla",
|
||||
["Enable Overlap"] = "Permitir superposición",
|
||||
@@ -312,6 +310,7 @@ pfUI_translation["esES"] = {
|
||||
["Encode"] = "Codificar",
|
||||
["Ended"] = "Terminado",
|
||||
["Energy Color"] = "Color de energía",
|
||||
["Equipped"] = "Equipado",
|
||||
["Equipped Item Color"] = "Color del objeto equipado",
|
||||
["Estimate Debuffs"] = "Estimar los perjuicios",
|
||||
["Estimate Enemy Health Points"] = "Estimar los puntos de salud del enemigo",
|
||||
@@ -569,6 +568,7 @@ pfUI_translation["esES"] = {
|
||||
["Overwrite If Unit Is Attacking Others"] = nil,
|
||||
["Overwrite If Unit Is Attacking You"] = nil,
|
||||
["Overwrite If Unit Is Casting"] = nil,
|
||||
["Owner Name"] = nil,
|
||||
["Pageable"] = "Paginable",
|
||||
["Paging Actionbar"] = "Paginando la barra de acción",
|
||||
["Panel"] = "Panel",
|
||||
@@ -616,12 +616,13 @@ pfUI_translation["esES"] = {
|
||||
["Raid Mark X-Offset"] = nil,
|
||||
["Raid Mark Y-Offset"] = nil,
|
||||
["Raid Padding"] = "Espaciado del marco de banda",
|
||||
["Raid-Pet"] = nil,
|
||||
["Random"] = "Aleatorio",
|
||||
["Random Roll Announcement Rarity"] = "Anuncio para tirar los dados aleatoriamente",
|
||||
["Random Rolling"] = "Tirar los dados aleatoriamente",
|
||||
["Range Based Hunter Paging"] = "Paginado de alcance para cazadores",
|
||||
["Range Check Interval"] = "Intervalo de comprobación de alcance",
|
||||
["Rank"] = "Rango",
|
||||
["Recast Totem"] = nil,
|
||||
["Red Border On Enemy Units"] = "Borde rojo en unidades enemigas",
|
||||
["Red Name Text On Infight Units"] = nil,
|
||||
["Regional Settings"] = nil,
|
||||
@@ -667,7 +668,6 @@ pfUI_translation["esES"] = {
|
||||
["Scale"] = "Escala",
|
||||
["Scale Border On HiDPI Displays"] = "Escalar los bordes en las pantallas con DPI alto",
|
||||
["Scaling"] = "Escalada",
|
||||
["Scan Macros For Spells"] = nil,
|
||||
["Screen Edge Glow Intensity"] = "Intensidad de brillo en los bordes de la pantalla",
|
||||
["Screen Resolution"] = "Resolución de pantalla",
|
||||
["Screenshot"] = "Captura de pantalla",
|
||||
@@ -703,6 +703,7 @@ pfUI_translation["esES"] = {
|
||||
["Show Description"] = "Mostrar descripción",
|
||||
["Show Dispel Indicators"] = "Mostrar indicadores para disipar",
|
||||
["Show Druid Mana Bar"] = nil,
|
||||
["Show Druid Mana Bar Text"] = nil,
|
||||
["Show Duration Inside Buff"] = "Mostrar la duración dentro del beneficios",
|
||||
["Show Empty Buttons"] = "Mostrar botones vacíos",
|
||||
["Show FPS and Latency Colors"] = "Mostrar FPS y colores de latencia",
|
||||
@@ -739,6 +740,7 @@ pfUI_translation["esES"] = {
|
||||
["Show Required Questitem Count"] = "Muestra el número requerido de objetos de misión",
|
||||
["Show Resting"] = "Mostrar descanso",
|
||||
["Show Self In Group Frames"] = "Mostrar a sí mismo en marcos de grupo",
|
||||
["Show Self In Raid Frames When Solo"] = nil,
|
||||
["Show Spell Icon"] = "Mostrar icono de hechizo",
|
||||
["Show Spell Name"] = nil,
|
||||
["Show Stacks"] = "Mostrar pilas",
|
||||
@@ -783,6 +785,7 @@ pfUI_translation["esES"] = {
|
||||
["Target Castbar"] = "Barra de lanzamiento del objetivo",
|
||||
["Target Debuff Bar"] = "Barra de perjuicios del objetivo",
|
||||
["Target Nameplate Zoom Factor"] = "Factor de zoom de la placa de nombre del objetivo",
|
||||
["Target Totem"] = nil,
|
||||
["Target-Target"] = "Objetivo-Objetivo",
|
||||
["Target-Target-Target"] = "Objetivo-Objetivo-Objetivo",
|
||||
["Text"] = nil,
|
||||
@@ -815,6 +818,7 @@ pfUI_translation["esES"] = {
|
||||
["Top Actionbar"] = "Barra de acción superior",
|
||||
["Top Left"] = "Superior derecha",
|
||||
["Top Right"] = "Superior izquierda",
|
||||
["Total"] = "Total",
|
||||
["Total Gold"] = "Oro Total",
|
||||
["Totem Direction"] = "Dirección del tótem",
|
||||
["Totem Icons"] = "Iconos de los tótems",
|
||||
@@ -867,7 +871,6 @@ pfUI_translation["esES"] = {
|
||||
["Website"] = "Sitio de web",
|
||||
["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."] = "¡Bienvenido a |cff33ffccpf|cffffffffUI|r!\n\nSoy el asistente de instalación que te guiará con la configuración básica. Si prefieres, puedes hacer clic el botón \"Predeterminado\" para cargar la configuración por defecto. Si quieres abrir este diálogo de nuevo, ve a la configuración y haz clic en el botón \"Reiniciar Primera vez\".\n\nVisita |cff33ffcc%s|r para descargar la última versión.",
|
||||
["Whitelist"] = "Lista blanca",
|
||||
["Who Search Unknown Classes (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Width"] = "Ancho",
|
||||
["Wobble Zoom"] = "Acerca tambalea",
|
||||
["Won"] = "Ganado",
|
||||
@@ -877,7 +880,6 @@ pfUI_translation["esES"] = {
|
||||
["XP Percentage"] = "Porcentaje de exp.",
|
||||
["Yellow Border On Neutral Units"] = "Borde amarillo en unidades neutrales",
|
||||
["Yes"] = "Sí",
|
||||
["You gain (.+) Mana from Totemic Recall"] = nil,
|
||||
["You got"] = "Obtienes",
|
||||
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = "Ahora su interfaz está configurada.\n\nPara la configuración avanzada, abra la configuración |cff33ffccpf|rUI por el menú de escape o escriba \"|cffffffaa/pfui|r\" en el chat.",
|
||||
["Your items have been repaired for"] = "Tus objetos se han reparado por",
|
||||
|
||||
Vendored
+81
-9
@@ -27,7 +27,6 @@ pfUI_translation["frFR"] = {
|
||||
["Always Show Item Comparison"] = "Toujours afficher la comparaison d'objet",
|
||||
["Always Show On Target Units"] = "Toujours montrer sur la cible",
|
||||
["Always Show On Units With Missing HP"] = "Toujours montrer sur les cibles avec de la vie manquante",
|
||||
["Always Show Self In Raid Frames"] = "Toujours montrer soi-même dans le cadre de raid",
|
||||
["Always Use 2D Portraits"] = "Toujours utiliser les portraits 2D",
|
||||
["Ammo Counter"] = "Compteur de munitions",
|
||||
["Anchor Bags Above Chat"] = nil,
|
||||
@@ -52,10 +51,12 @@ pfUI_translation["frFR"] = {
|
||||
["Auto Sell Grey Items"] = "Vente automatique des objets gris",
|
||||
["Average Per Hour"] = "Moyenne par heure",
|
||||
["Background Color"] = "Couleur de l'arrière-plan",
|
||||
["Bags"] = "Sacs",
|
||||
["Bags & Bank"] = "Sacs et Banque",
|
||||
["Bags Border Size"] = "Taille de la bordure des Sacs",
|
||||
["Bagslots Per Row"] = "Emplacements des sacs par rangée",
|
||||
["Bagspace"] = "Place libre des sacs",
|
||||
["Bank"] = "Banque",
|
||||
["Banker"] = "Banquier",
|
||||
["Bankslots Per Row"] = "Emplacements de la banque par rangée",
|
||||
["Bar Background"] = "Arrière plan de la barre",
|
||||
@@ -124,6 +125,7 @@ pfUI_translation["frFR"] = {
|
||||
["Click Casting"] = "Clique sur le lancement de sort",
|
||||
["Clock"] = "Horloge",
|
||||
["Close"] = "Fermer",
|
||||
["Collapse Empty Slots"] = nil,
|
||||
["Color"] = nil,
|
||||
["Color Buff Stacks"] = "Couleur des l'empilements des Améliorations",
|
||||
["Color Debuff Stacks"] = "Couleur de l'empilements de Affaiblissements",
|
||||
@@ -138,7 +140,6 @@ pfUI_translation["frFR"] = {
|
||||
["Combat Timer"] = "Chronomètre de combat",
|
||||
["Combopoint Height"] = nil,
|
||||
["Combopoint Width"] = nil,
|
||||
["Compare Item Base Stats"] = "Compare les stats de base d'un objet",
|
||||
["Components"] = "Composants",
|
||||
["Config UI Settings"] = nil,
|
||||
["Configuration"] = "Configuration",
|
||||
@@ -199,7 +200,6 @@ pfUI_translation["frFR"] = {
|
||||
["Description Font"] = "Description de la Police",
|
||||
["Description Font Size"] = "Description de la taille de la Police",
|
||||
["Detailed Random Roll Announcement"] = "Annonce détaillée des Rolls aléatoires",
|
||||
["Detect Enemy Buffs"] = nil,
|
||||
["Disable"] = "Désactiver",
|
||||
["Disable Blizzard Castbar"] = "Désactiver la barre d'incantation d'origine",
|
||||
["Disabled"] = "Désactivé",
|
||||
@@ -281,7 +281,6 @@ pfUI_translation["frFR"] = {
|
||||
["Enable Energy Ticks"] = "Activer la barre de rechargement d'énergie",
|
||||
["Enable Extended Guild Information"] = "Activer les informations de guilde étendues",
|
||||
["Enable Frame Shadow"] = "Activer l'ombre des cadres",
|
||||
["Enable Full-Text Search"] = nil,
|
||||
["Enable Indicators"] = "Activer les indicateurs",
|
||||
["Enable Item Quality Color For Equipment Only"] = "Activer la couleur de la qualité des objets seulement sur les pièces d'équipement",
|
||||
["Enable \"Loot & Spam\" Chat Window"] = "Activer la fenêtre de chat \"Butins & Spam\"",
|
||||
@@ -291,7 +290,6 @@ pfUI_translation["frFR"] = {
|
||||
["Enable Mana Ticks"] = "Activer les Ticks de mana",
|
||||
["Enable Micro Bar"] = "Activer la barre des menus miniature",
|
||||
["Enable Mouselook With Right Click"] = "Activer le déplacement de la caméra avec le clic droit",
|
||||
["Enable Mouseover Tooltip"] = "Activer l'infobulle au passage de la souris",
|
||||
["Enable Movable Bags"] = "Activer les sacs mobiles",
|
||||
["Enable Offscreen Frame Positions"] = "Activer le positionnement des cadres en dehors de l'écran",
|
||||
["Enable Overlap"] = "Activer la superposition",
|
||||
@@ -312,6 +310,7 @@ pfUI_translation["frFR"] = {
|
||||
["Encode"] = "Encoder",
|
||||
["Ended"] = "Terminé",
|
||||
["Energy Color"] = "Couleur de l'energie",
|
||||
["Equipped"] = "Équipé",
|
||||
["Equipped Item Color"] = "Couleur de l'objet équipé",
|
||||
["Estimate Debuffs"] = "Estimer les Affaiblissements",
|
||||
["Estimate Enemy Health Points"] = "Estimer les points de vie ennemis",
|
||||
@@ -569,6 +568,7 @@ pfUI_translation["frFR"] = {
|
||||
["Overwrite If Unit Is Attacking Others"] = nil,
|
||||
["Overwrite If Unit Is Attacking You"] = nil,
|
||||
["Overwrite If Unit Is Casting"] = nil,
|
||||
["Owner Name"] = nil,
|
||||
["Pageable"] = "Pageable",
|
||||
["Paging Actionbar"] = "Barre d'action de pagination",
|
||||
["Panel"] = "Panneau",
|
||||
@@ -616,12 +616,13 @@ pfUI_translation["frFR"] = {
|
||||
["Raid Mark X-Offset"] = nil,
|
||||
["Raid Mark Y-Offset"] = nil,
|
||||
["Raid Padding"] = "Remplissage du Raid",
|
||||
["Raid-Pet"] = nil,
|
||||
["Random"] = "Aléatoire",
|
||||
["Random Roll Announcement Rarity"] = "Rareté des annonces des jets de dés aléatoires",
|
||||
["Random Rolling"] = "Lancer de dés aléatoires",
|
||||
["Range Based Hunter Paging"] = "Pagination de distance basée sur le chasseur",
|
||||
["Range Check Interval"] = "Intervalle de vérification de la distance",
|
||||
["Rank"] = nil,
|
||||
["Recast Totem"] = nil,
|
||||
["Red Border On Enemy Units"] = "Bordure rouge sur les unités ennemies",
|
||||
["Red Name Text On Infight Units"] = nil,
|
||||
["Regional Settings"] = nil,
|
||||
@@ -667,7 +668,6 @@ pfUI_translation["frFR"] = {
|
||||
["Scale"] = "Échelle",
|
||||
["Scale Border On HiDPI Displays"] = "Échelle de bordure sur les écrans HiDPI",
|
||||
["Scaling"] = "Mise à l'échelle",
|
||||
["Scan Macros For Spells"] = nil,
|
||||
["Screen Edge Glow Intensity"] = nil,
|
||||
["Screen Resolution"] = "Résolution d'écran",
|
||||
["Screenshot"] = "Imprime écran",
|
||||
@@ -703,6 +703,7 @@ pfUI_translation["frFR"] = {
|
||||
["Show Description"] = "Afficher les descriptions",
|
||||
["Show Dispel Indicators"] = "Afficher les indicateurs de dissipation",
|
||||
["Show Druid Mana Bar"] = nil,
|
||||
["Show Druid Mana Bar Text"] = nil,
|
||||
["Show Duration Inside Buff"] = "Afficher la durée à l'intérieur des améliorations",
|
||||
["Show Empty Buttons"] = "Afficher les boutons vides",
|
||||
["Show FPS and Latency Colors"] = nil,
|
||||
@@ -739,6 +740,7 @@ pfUI_translation["frFR"] = {
|
||||
["Show Required Questitem Count"] = nil,
|
||||
["Show Resting"] = "Afficher au repos",
|
||||
["Show Self In Group Frames"] = "S'afficher dans les cadres de groupe",
|
||||
["Show Self In Raid Frames When Solo"] = nil,
|
||||
["Show Spell Icon"] = "Afficher l'icone des sorts",
|
||||
["Show Spell Name"] = nil,
|
||||
["Show Stacks"] = "Afficher les empilements",
|
||||
@@ -783,6 +785,7 @@ pfUI_translation["frFR"] = {
|
||||
["Target Castbar"] = "Barre d'incantation de la cible",
|
||||
["Target Debuff Bar"] = "Barre des affaiblissements de la cible",
|
||||
["Target Nameplate Zoom Factor"] = "Facteur de zoom du Nameplate de la cible",
|
||||
["Target Totem"] = nil,
|
||||
["Target-Target"] = "Cible de la cible",
|
||||
["Target-Target-Target"] = "Cible de la cible de la cible",
|
||||
["Text"] = nil,
|
||||
@@ -815,6 +818,7 @@ pfUI_translation["frFR"] = {
|
||||
["Top Actionbar"] = "Barre d'action supérieure",
|
||||
["Top Left"] = "Haut Gauche",
|
||||
["Top Right"] = "Haut Droit",
|
||||
["Total"] = "Total",
|
||||
["Total Gold"] = "Or Total",
|
||||
["Totem Direction"] = "Direction des totems",
|
||||
["Totem Icons"] = "Icones des totems",
|
||||
@@ -867,7 +871,6 @@ pfUI_translation["frFR"] = {
|
||||
["Website"] = "Site web",
|
||||
["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."] = "Bienvenue sur l'assistant d'installation de l'interface |cff33ffccpf|cffffffffUI|r!\n\nNous allons effectuer quelques configurations de base. Si vous n'avez pas la patience, cliquer sur le bouton \"Paramètres par défaut\". Si vous souhaitez relancer cette fenêtre de dialogue, allez dans les options et cliquez sur le bouton\"Réinitialiser l'assistant d'installation\" .\n\nAllez sur |cff33ffcc%s|r pour télécharger la dernière version.",
|
||||
["Whitelist"] = "List blanche",
|
||||
["Who Search Unknown Classes (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Width"] = "Largeur",
|
||||
["Wobble Zoom"] = "Zoom oscillant",
|
||||
["Won"] = "A gagné",
|
||||
@@ -877,7 +880,6 @@ pfUI_translation["frFR"] = {
|
||||
["XP Percentage"] = "Pourcentage de la barre d'expérience",
|
||||
["Yellow Border On Neutral Units"] = "Bordure jaune sur les unités neutres",
|
||||
["Yes"] = "Oui",
|
||||
["You gain (.+) Mana from Totemic Recall"] = nil,
|
||||
["You got"] = "Vous avez",
|
||||
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = nil,
|
||||
["Your items have been repaired for"] = "Vos objets ont été réparés pour",
|
||||
@@ -887,4 +889,74 @@ pfUI_translation["frFR"] = {
|
||||
["Zonetime"] = nil,
|
||||
["Zoom & Fade"] = "Zoom et fondu",
|
||||
["Zoom Target Nameplate"] = "Zoom la cible des barres de vie flottantes",
|
||||
["%d items, %d ignored"] = "%d objets, %d ignorés",
|
||||
["Add the current zone"] = "Ajouter la zone actuelle",
|
||||
["Announce Automatic Set Switches In Chat"] = "Annoncer les changements automatiques d'ensemble dans le chat",
|
||||
["Any Form"] = "N'importe quelle forme",
|
||||
["Aquatic Form"] = "Forme aquatique",
|
||||
["Automatic Set Switching"] = "Changement automatique d'ensemble",
|
||||
["Battle Stance"] = "Posture de combat",
|
||||
["Battleground"] = "Champ de bataille",
|
||||
["Bear Form"] = "Forme d'ours",
|
||||
["Berserker Stance"] = "Posture berserker",
|
||||
["Cat Form"] = "Forme de félin",
|
||||
["Condition met, but a trigger higher in the list wins"] = "Condition remplie, mais un déclencheur plus haut dans la liste est prioritaire",
|
||||
["Create an equipment set first."] = "Créez d'abord un ensemble d'équipement.",
|
||||
["Currently active"] = "Actuellement actif",
|
||||
["Defensive Stance"] = "Posture défensive",
|
||||
["Do Nothing"] = "Ne rien faire",
|
||||
["Dungeon"] = "Donjon",
|
||||
["Eating / Drinking"] = "Manger / Boire",
|
||||
["Enable Automatic Set Switching"] = "Activer le changement automatique d'ensemble",
|
||||
["Equip"] = "Équiper",
|
||||
["Equip sets automatically when mounted, swimming, eating, in a zone, at a given time and more."] = "Équipe automatiquement des ensembles en monture, en nageant, en mangeant, dans une zone, à une heure donnée, etc.",
|
||||
["Equipment Manager"] = "Gestionnaire d'équipement",
|
||||
["Equippable items in your bags, bank and paperdoll that no equipment set uses."] = "Objets équipables dans vos sacs, votre banque et sur votre personnage qu'aucun ensemble n'utilise.",
|
||||
["Equipping %s"] = "Équipement de %s",
|
||||
["Equipping %s (%s)"] = "Équipement de %s (%s)",
|
||||
["Every equippable item is part of a set."] = "Tous les objets équipables font partie d'un ensemble.",
|
||||
["Ghost Wolf"] = "Loup fantôme",
|
||||
["Here"] = "Ici",
|
||||
["Ignored (Right-Click to unignore)"] = "Ignoré (clic droit pour ne plus ignorer)",
|
||||
["In Bags"] = "Dans les sacs",
|
||||
["In Bank"] = "En banque",
|
||||
["Include Bank Items"] = "Inclure les objets en banque",
|
||||
["Instance Type"] = "Type d'instance",
|
||||
["Items Not In Any Set"] = "Objets hors de tout ensemble",
|
||||
["Local time window, e.g. 20:00-23:00"] = "Plage horaire locale, ex. 20:00-23:00",
|
||||
["Minimum Item Quality"] = "Qualité minimale des objets",
|
||||
["Moonkin Form"] = "Forme de sélénien",
|
||||
["Mounted"] = "En monture",
|
||||
["New Trigger"] = "Nouveau déclencheur",
|
||||
["No Form (Caster)"] = "Sans forme (lanceur de sorts)",
|
||||
["No set selected"] = "Aucun ensemble choisi",
|
||||
["No triggers yet. Click \"New Trigger\" to add one."] = "Aucun déclencheur. Cliquez sur \"Nouveau déclencheur\" pour en ajouter un.",
|
||||
["Not part of any equipment set"] = "Ne fait partie d'aucun ensemble",
|
||||
["Open World"] = "Monde extérieur",
|
||||
["Resting (Inn / City)"] = "Repos (auberge / ville)",
|
||||
["Restore Previous Gear"] = "Remettre l'équipement précédent",
|
||||
["Restoring previous gear"] = "Remise de l'équipement précédent",
|
||||
["Select a trigger to edit it."] = "Sélectionnez un déclencheur pour le modifier.",
|
||||
["Selected Trigger"] = "Déclencheur sélectionné",
|
||||
["Separate several zones with ;"] = "Séparez plusieurs zones par ;",
|
||||
["Shadowform"] = "Forme d'Ombre",
|
||||
["Shapeshift Form / Stance"] = "Forme / Posture",
|
||||
["Shift-Click: Link Ctrl-Click: Preview\nRight-Click: Ignore / Unignore"] = "Maj-clic : lien Ctrl-clic : aperçu\nClic droit : ignorer / ne plus ignorer",
|
||||
["Show Ignored"] = "Afficher les ignorés",
|
||||
["Stealth"] = "Camouflage",
|
||||
["Stealthed"] = "Camouflé",
|
||||
["Swimming"] = "À la nage",
|
||||
["Targeting A Boss"] = "Cible un boss",
|
||||
["Time Of Day"] = "Heure de la journée",
|
||||
["Travel Form"] = "Forme de voyage",
|
||||
["Tree of Life Form"] = "Forme d'arbre de vie",
|
||||
["Triggers"] = "Déclencheurs",
|
||||
["Triggers higher in the list take priority. Gear is never swapped in combat, while dead or while casting: the switch waits until it can happen."] = "Les déclencheurs en haut de la liste sont prioritaires. L'équipement n'est jamais changé en combat, mort ou pendant une incantation : le changement attend que ce soit possible.",
|
||||
["Unused"] = "Inutilisés",
|
||||
["Value"] = "Valeur",
|
||||
["When"] = "Quand",
|
||||
["When It Ends"] = "À la fin",
|
||||
["Windows may wrap past midnight (22:00-02:00)."] = "Une plage peut passer minuit (22:00-02:00).",
|
||||
["Zone"] = "Zone",
|
||||
["Zone or subzone name"] = "Nom de zone ou de sous-zone",
|
||||
}
|
||||
|
||||
Vendored
+11
-9
@@ -27,7 +27,6 @@ pfUI_translation["koKR"] = {
|
||||
["Always Show Item Comparison"] = "항상 착용 장비와 비교 표시",
|
||||
["Always Show On Target Units"] = nil,
|
||||
["Always Show On Units With Missing HP"] = nil,
|
||||
["Always Show Self In Raid Frames"] = nil,
|
||||
["Always Use 2D Portraits"] = "항상 2D초상화 사용",
|
||||
["Ammo Counter"] = "탄약 갯수",
|
||||
["Anchor Bags Above Chat"] = nil,
|
||||
@@ -52,10 +51,12 @@ pfUI_translation["koKR"] = {
|
||||
["Auto Sell Grey Items"] = "회색아이템 자동 판매",
|
||||
["Average Per Hour"] = nil,
|
||||
["Background Color"] = "백그라운드 색상",
|
||||
["Bags"] = "가방",
|
||||
["Bags & Bank"] = "가방&은행",
|
||||
["Bags Border Size"] = "가방 테두리 크기",
|
||||
["Bagslots Per Row"] = nil,
|
||||
["Bagspace"] = "가방 공간",
|
||||
["Bank"] = "은행",
|
||||
["Banker"] = nil,
|
||||
["Bankslots Per Row"] = nil,
|
||||
["Bar Background"] = nil,
|
||||
@@ -124,6 +125,7 @@ pfUI_translation["koKR"] = {
|
||||
["Click Casting"] = nil,
|
||||
["Clock"] = "시계",
|
||||
["Close"] = "닫기",
|
||||
["Collapse Empty Slots"] = nil,
|
||||
["Color"] = nil,
|
||||
["Color Buff Stacks"] = nil,
|
||||
["Color Debuff Stacks"] = nil,
|
||||
@@ -138,7 +140,6 @@ pfUI_translation["koKR"] = {
|
||||
["Combat Timer"] = "전투 타이머",
|
||||
["Combopoint Height"] = nil,
|
||||
["Combopoint Width"] = nil,
|
||||
["Compare Item Base Stats"] = nil,
|
||||
["Components"] = nil,
|
||||
["Config UI Settings"] = nil,
|
||||
["Configuration"] = "구성",
|
||||
@@ -199,7 +200,6 @@ pfUI_translation["koKR"] = {
|
||||
["Description Font"] = nil,
|
||||
["Description Font Size"] = nil,
|
||||
["Detailed Random Roll Announcement"] = nil,
|
||||
["Detect Enemy Buffs"] = nil,
|
||||
["Disable"] = "가리기",
|
||||
["Disable Blizzard Castbar"] = "블리자드 캐스트바 사용 중지",
|
||||
["Disabled"] = "가리기",
|
||||
@@ -281,7 +281,6 @@ pfUI_translation["koKR"] = {
|
||||
["Enable Energy Ticks"] = "Energy Ticks 활성화",
|
||||
["Enable Extended Guild Information"] = "길드 정보 확장 사용",
|
||||
["Enable Frame Shadow"] = nil,
|
||||
["Enable Full-Text Search"] = nil,
|
||||
["Enable Indicators"] = nil,
|
||||
["Enable Item Quality Color For Equipment Only"] = "착용장비 전용 아이템품질 색상 활성화",
|
||||
["Enable \"Loot & Spam\" Chat Window"] = "\"루팅 & 스팜\"채팅 창 사용",
|
||||
@@ -291,7 +290,6 @@ pfUI_translation["koKR"] = {
|
||||
["Enable Mana Ticks"] = nil,
|
||||
["Enable Micro Bar"] = "미니바 보기(블리자드 마이크로바)",
|
||||
["Enable Mouselook With Right Click"] = "오른쪽 클릭 Mouselook 사용",
|
||||
["Enable Mouseover Tooltip"] = nil,
|
||||
["Enable Movable Bags"] = nil,
|
||||
["Enable Offscreen Frame Positions"] = "오프스크린 프레임 위치 활성화",
|
||||
["Enable Overlap"] = "겹쳐서 표시",
|
||||
@@ -312,6 +310,7 @@ pfUI_translation["koKR"] = {
|
||||
["Encode"] = nil,
|
||||
["Ended"] = nil,
|
||||
["Energy Color"] = nil,
|
||||
["Equipped"] = "착용 중",
|
||||
["Equipped Item Color"] = nil,
|
||||
["Estimate Debuffs"] = nil,
|
||||
["Estimate Enemy Health Points"] = nil,
|
||||
@@ -569,6 +568,7 @@ pfUI_translation["koKR"] = {
|
||||
["Overwrite If Unit Is Attacking Others"] = nil,
|
||||
["Overwrite If Unit Is Attacking You"] = nil,
|
||||
["Overwrite If Unit Is Casting"] = nil,
|
||||
["Owner Name"] = nil,
|
||||
["Pageable"] = nil,
|
||||
["Paging Actionbar"] = nil,
|
||||
["Panel"] = "패널",
|
||||
@@ -616,12 +616,13 @@ pfUI_translation["koKR"] = {
|
||||
["Raid Mark X-Offset"] = nil,
|
||||
["Raid Mark Y-Offset"] = nil,
|
||||
["Raid Padding"] = nil,
|
||||
["Raid-Pet"] = nil,
|
||||
["Random"] = nil,
|
||||
["Random Roll Announcement Rarity"] = nil,
|
||||
["Random Rolling"] = nil,
|
||||
["Range Based Hunter Paging"] = nil,
|
||||
["Range Check Interval"] = nil,
|
||||
["Rank"] = nil,
|
||||
["Recast Totem"] = nil,
|
||||
["Red Border On Enemy Units"] = nil,
|
||||
["Red Name Text On Infight Units"] = nil,
|
||||
["Regional Settings"] = nil,
|
||||
@@ -667,7 +668,6 @@ pfUI_translation["koKR"] = {
|
||||
["Scale"] = nil,
|
||||
["Scale Border On HiDPI Displays"] = nil,
|
||||
["Scaling"] = nil,
|
||||
["Scan Macros For Spells"] = nil,
|
||||
["Screen Edge Glow Intensity"] = nil,
|
||||
["Screen Resolution"] = "화면 해상도",
|
||||
["Screenshot"] = nil,
|
||||
@@ -703,6 +703,7 @@ pfUI_translation["koKR"] = {
|
||||
["Show Description"] = nil,
|
||||
["Show Dispel Indicators"] = nil,
|
||||
["Show Druid Mana Bar"] = nil,
|
||||
["Show Druid Mana Bar Text"] = nil,
|
||||
["Show Duration Inside Buff"] = nil,
|
||||
["Show Empty Buttons"] = nil,
|
||||
["Show FPS and Latency Colors"] = nil,
|
||||
@@ -739,6 +740,7 @@ pfUI_translation["koKR"] = {
|
||||
["Show Required Questitem Count"] = nil,
|
||||
["Show Resting"] = nil,
|
||||
["Show Self In Group Frames"] = nil,
|
||||
["Show Self In Raid Frames When Solo"] = nil,
|
||||
["Show Spell Icon"] = nil,
|
||||
["Show Spell Name"] = nil,
|
||||
["Show Stacks"] = nil,
|
||||
@@ -783,6 +785,7 @@ pfUI_translation["koKR"] = {
|
||||
["Target Castbar"] = nil,
|
||||
["Target Debuff Bar"] = nil,
|
||||
["Target Nameplate Zoom Factor"] = nil,
|
||||
["Target Totem"] = nil,
|
||||
["Target-Target"] = "대상-대상",
|
||||
["Target-Target-Target"] = nil,
|
||||
["Text"] = nil,
|
||||
@@ -815,6 +818,7 @@ pfUI_translation["koKR"] = {
|
||||
["Top Actionbar"] = nil,
|
||||
["Top Left"] = nil,
|
||||
["Top Right"] = nil,
|
||||
["Total"] = "총",
|
||||
["Total Gold"] = "총 금",
|
||||
["Totem Direction"] = nil,
|
||||
["Totem Icons"] = nil,
|
||||
@@ -867,7 +871,6 @@ pfUI_translation["koKR"] = {
|
||||
["Website"] = nil,
|
||||
["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."] = "|cff33ffccpf|cffffffffUI|r에 |cff33ffcc오신걸 환영합니다.|r \n\n저는 몇 가지 기본 구성을 안내 할 첫 번째 실행 위자드입니다. 모든 단계를 건너 뛰고 싶으시면 \"기본값 사용\" 버튼을 누르십시오. 이 대화 상자를 다시 실행하려면 추후 설정으로 이동하여 \"첫단계로 재설정\" 버튼을 누르십시오.\n\n최신버전 다운로드 사이트: |cff33ffcc%s|r",
|
||||
["Whitelist"] = nil,
|
||||
["Who Search Unknown Classes (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Width"] = nil,
|
||||
["Wobble Zoom"] = nil,
|
||||
["Won"] = nil,
|
||||
@@ -877,7 +880,6 @@ pfUI_translation["koKR"] = {
|
||||
["XP Percentage"] = "경험치 퍼센트",
|
||||
["Yellow Border On Neutral Units"] = nil,
|
||||
["Yes"] = nil,
|
||||
["You gain (.+) Mana from Totemic Recall"] = nil,
|
||||
["You got"] = nil,
|
||||
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = nil,
|
||||
["Your items have been repaired for"] = nil,
|
||||
|
||||
Vendored
+11
-9
@@ -27,7 +27,6 @@ pfUI_translation["ruRU"] = {
|
||||
["Always Show Item Comparison"] = "Всегда показывать сравнение предметов",
|
||||
["Always Show On Target Units"] = "Всегда показывать над выбранной целью",
|
||||
["Always Show On Units With Missing HP"] = "Всегда показывать над целями с неполным здоровьем",
|
||||
["Always Show Self In Raid Frames"] = "Всегда показывать себя в рейде",
|
||||
["Always Use 2D Portraits"] = "Всегда использовать 2D-портреты",
|
||||
["Ammo Counter"] = "Счетчик боеприпасов",
|
||||
["Anchor Bags Above Chat"] = nil,
|
||||
@@ -52,10 +51,12 @@ pfUI_translation["ruRU"] = {
|
||||
["Auto Sell Grey Items"] = "Автоматическая продажа серых предметов",
|
||||
["Average Per Hour"] = "Среднее за час",
|
||||
["Background Color"] = "Цвет фона",
|
||||
["Bags"] = "Сумки",
|
||||
["Bags & Bank"] = "Сумки & Банк",
|
||||
["Bags Border Size"] = "Размер границы сумок",
|
||||
["Bagslots Per Row"] = "Количество ячеек в сумке на строку",
|
||||
["Bagspace"] = "Место в сумках",
|
||||
["Bank"] = "Банк",
|
||||
["Banker"] = "Банкир",
|
||||
["Bankslots Per Row"] = "Количество ячеек в банке на строку",
|
||||
["Bar Background"] = "Фон панели",
|
||||
@@ -124,6 +125,7 @@ pfUI_translation["ruRU"] = {
|
||||
["Click Casting"] = "Каст по нажатию",
|
||||
["Clock"] = "Часы",
|
||||
["Close"] = "Закрыть",
|
||||
["Collapse Empty Slots"] = nil,
|
||||
["Color"] = nil,
|
||||
["Color Buff Stacks"] = "Цвет стаков баффа",
|
||||
["Color Debuff Stacks"] = "Цвет стаков дебаффа",
|
||||
@@ -138,7 +140,6 @@ pfUI_translation["ruRU"] = {
|
||||
["Combat Timer"] = "Таймер боя",
|
||||
["Combopoint Height"] = nil,
|
||||
["Combopoint Width"] = nil,
|
||||
["Compare Item Base Stats"] = "Сравнивать базовые характеристики предмета",
|
||||
["Components"] = "Компоненты",
|
||||
["Config UI Settings"] = "Настройка параметров пользовательского интерфейса",
|
||||
["Configuration"] = "Конфигурация",
|
||||
@@ -199,7 +200,6 @@ pfUI_translation["ruRU"] = {
|
||||
["Description Font"] = "Шрифт описания",
|
||||
["Description Font Size"] = "Размер шрифта описания",
|
||||
["Detailed Random Roll Announcement"] = "Подробное объявление о случайном броске",
|
||||
["Detect Enemy Buffs"] = nil,
|
||||
["Disable"] = "Отключить",
|
||||
["Disable Blizzard Castbar"] = "Отключить панель применения Blizzard",
|
||||
["Disabled"] = "Отключено",
|
||||
@@ -281,7 +281,6 @@ pfUI_translation["ruRU"] = {
|
||||
["Enable Energy Ticks"] = "Включить восполнение энергии",
|
||||
["Enable Extended Guild Information"] = "Включить расширенную информацию о гильдии",
|
||||
["Enable Frame Shadow"] = "Включить тень окон",
|
||||
["Enable Full-Text Search"] = nil,
|
||||
["Enable Indicators"] = "Включить индикаторы",
|
||||
["Enable Item Quality Color For Equipment Only"] = "Включить цвет качества предметов только для экипировки",
|
||||
["Enable \"Loot & Spam\" Chat Window"] = "Включить окно чата \"Добыча & Спам\"",
|
||||
@@ -291,7 +290,6 @@ pfUI_translation["ruRU"] = {
|
||||
["Enable Mana Ticks"] = "Включить восполнение маны",
|
||||
["Enable Micro Bar"] = "Включить панель микро меню",
|
||||
["Enable Mouselook With Right Click"] = "Включить нажатие правой кнопки мыши на индикаторе здоровья",
|
||||
["Enable Mouseover Tooltip"] = "Включить подсказку при наведении мыши",
|
||||
["Enable Movable Bags"] = "Включить подвижные сумки",
|
||||
["Enable Offscreen Frame Positions"] = "Включить расположение окон за пределами экрана",
|
||||
["Enable Overlap"] = "Включить перекрытие",
|
||||
@@ -312,6 +310,7 @@ pfUI_translation["ruRU"] = {
|
||||
["Encode"] = "Кодировать",
|
||||
["Ended"] = "Окончание",
|
||||
["Energy Color"] = "Цвет энергии",
|
||||
["Equipped"] = "Экипировано",
|
||||
["Equipped Item Color"] = "Цвет экипированных предметов",
|
||||
["Estimate Debuffs"] = "Оценка дебафов",
|
||||
["Estimate Enemy Health Points"] = "Оценка очков здоровья врага",
|
||||
@@ -569,6 +568,7 @@ pfUI_translation["ruRU"] = {
|
||||
["Overwrite If Unit Is Attacking Others"] = nil,
|
||||
["Overwrite If Unit Is Attacking You"] = nil,
|
||||
["Overwrite If Unit Is Casting"] = nil,
|
||||
["Owner Name"] = nil,
|
||||
["Pageable"] = "Прокрутка страниц",
|
||||
["Paging Actionbar"] = "Прокрутка панелей",
|
||||
["Panel"] = "Панель",
|
||||
@@ -616,12 +616,13 @@ pfUI_translation["ruRU"] = {
|
||||
["Raid Mark X-Offset"] = nil,
|
||||
["Raid Mark Y-Offset"] = nil,
|
||||
["Raid Padding"] = "Отступ рейда",
|
||||
["Raid-Pet"] = nil,
|
||||
["Random"] = "Случайно",
|
||||
["Random Roll Announcement Rarity"] = "Оповещение случайного броска для качества предмета",
|
||||
["Random Rolling"] = "Случайный бросок костей для",
|
||||
["Range Based Hunter Paging"] = "[|cffA9D271Охотник|r] Переключение страниц на основе диапазона",
|
||||
["Range Check Interval"] = "Интервал проверки диапазона",
|
||||
["Rank"] = "Ранг",
|
||||
["Recast Totem"] = nil,
|
||||
["Red Border On Enemy Units"] = "Красные границы вражеских юнитов",
|
||||
["Red Name Text On Infight Units"] = nil,
|
||||
["Regional Settings"] = "Региональные настройки",
|
||||
@@ -667,7 +668,6 @@ pfUI_translation["ruRU"] = {
|
||||
["Scale"] = "Масштаб",
|
||||
["Scale Border On HiDPI Displays"] = "Масштабировать границы на HiDPI мониторах",
|
||||
["Scaling"] = "Масштаб интерфейса",
|
||||
["Scan Macros For Spells"] = nil,
|
||||
["Screen Edge Glow Intensity"] = "Интенсивность свечения на краях экрана",
|
||||
["Screen Resolution"] = "Разрешение экрана",
|
||||
["Screenshot"] = "Снимок экрана",
|
||||
@@ -703,6 +703,7 @@ pfUI_translation["ruRU"] = {
|
||||
["Show Description"] = "Показать описание",
|
||||
["Show Dispel Indicators"] = "Показать индикаторы рассеивания",
|
||||
["Show Druid Mana Bar"] = nil,
|
||||
["Show Druid Mana Bar Text"] = nil,
|
||||
["Show Duration Inside Buff"] = "Показать продолжительность внутри баффа",
|
||||
["Show Empty Buttons"] = "Показать пустые кнопки",
|
||||
["Show FPS and Latency Colors"] = "Показать частоту кадров и задержку в цвете",
|
||||
@@ -739,6 +740,7 @@ pfUI_translation["ruRU"] = {
|
||||
["Show Required Questitem Count"] = "Показать необходимое количество предметов для задания",
|
||||
["Show Resting"] = "Показать иконку отдыха",
|
||||
["Show Self In Group Frames"] = "Показать себя в окне группы",
|
||||
["Show Self In Raid Frames When Solo"] = nil,
|
||||
["Show Spell Icon"] = "Показать иконку заклинания",
|
||||
["Show Spell Name"] = "Показать название заклинания",
|
||||
["Show Stacks"] = "Показать стаки",
|
||||
@@ -783,6 +785,7 @@ pfUI_translation["ruRU"] = {
|
||||
["Target Castbar"] = "Панель применения цели",
|
||||
["Target Debuff Bar"] = "Панель дебаффов цели",
|
||||
["Target Nameplate Zoom Factor"] = "Коэффициент увеличения индикатора здоровья цели",
|
||||
["Target Totem"] = nil,
|
||||
["Target-Target"] = "Цель цели",
|
||||
["Target-Target-Target"] = "Цель цели цели",
|
||||
["Text"] = nil,
|
||||
@@ -815,6 +818,7 @@ pfUI_translation["ruRU"] = {
|
||||
["Top Actionbar"] = "Верхняя",
|
||||
["Top Left"] = "Сверху слева",
|
||||
["Top Right"] = "Сверху справа",
|
||||
["Total"] = "Всего",
|
||||
["Total Gold"] = "Всего золота",
|
||||
["Totem Direction"] = "Направление тотемов",
|
||||
["Totem Icons"] = "Иконки тотемов",
|
||||
@@ -867,7 +871,6 @@ pfUI_translation["ruRU"] = {
|
||||
["Website"] = "Веб-сайт",
|
||||
["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."] = "Добро пожаловать в |cff33ffccpf|cffffffffUI|r!\n\nЯ мастер первого запуска, который проведет вас через некоторую базовую конфигурацию. Если вы ленитесь, не стесняйтесь нажать кнопку \"По умолчанию\". Если вы хотите снова запустить этот диалог, перейдите к настройкам и нажмите кнопку \"Первый запуск\".\n\nПосетите |cff33ffcc%s|r, чтобы проверить последнюю версию.",
|
||||
["Whitelist"] = "\"Белый\" список",
|
||||
["Who Search Unknown Classes (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Width"] = "Ширина",
|
||||
["Wobble Zoom"] = "Подпрыгивание",
|
||||
["Won"] = "Победа",
|
||||
@@ -877,7 +880,6 @@ pfUI_translation["ruRU"] = {
|
||||
["XP Percentage"] = "Процент опыта",
|
||||
["Yellow Border On Neutral Units"] = "Желтые границы на нейтральных юнитах",
|
||||
["Yes"] = "Да",
|
||||
["You gain (.+) Mana from Totemic Recall"] = nil,
|
||||
["You got"] = "Вы получили",
|
||||
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = "Теперь ваш интерфейс настроен.\n\nДля расширенной настройки откройте \"Настройки |cff33ffccpf|rUI\" с помощью escape меню или введите \"|cffffffaa/pfui|r\" в чат.\n\nЖелаю хорошего путешествия!\n\n|cffaaaaaa- Shagu",
|
||||
["Your items have been repaired for"] = "Ваши предметы были отремонтированы за",
|
||||
|
||||
Vendored
+11
-9
@@ -27,7 +27,6 @@ pfUI_translation["zhCN"] = {
|
||||
["Always Show Item Comparison"] = "始终显示装备比较(或按SHIFT键)",
|
||||
["Always Show On Target Units"] = "始终在目标单位上显示",
|
||||
["Always Show On Units With Missing HP"] = "始终在未满血单位上显示",
|
||||
["Always Show Self In Raid Frames"] = "始终在团队框架中显示自己",
|
||||
["Always Use 2D Portraits"] = "始终使用2D头像",
|
||||
["Ammo Counter"] = "弹药数量",
|
||||
["Anchor Bags Above Chat"] = "将背包锚定在聊天框上方",
|
||||
@@ -52,10 +51,12 @@ pfUI_translation["zhCN"] = {
|
||||
["Auto Sell Grey Items"] = "自动贩卖灰色物品",
|
||||
["Average Per Hour"] = "平均每小时",
|
||||
["Background Color"] = "背景颜色",
|
||||
["Bags"] = "背包",
|
||||
["Bags & Bank"] = "背包和银行",
|
||||
["Bags Border Size"] = "背包边框大小",
|
||||
["Bagslots Per Row"] = "每行包裹槽数量",
|
||||
["Bagspace"] = "背包空间",
|
||||
["Bank"] = "银行",
|
||||
["Banker"] = "工会银行角色",
|
||||
["Bankslots Per Row"] = "每行银行槽数量",
|
||||
["Bar Background"] = "动作条背景",
|
||||
@@ -124,6 +125,7 @@ pfUI_translation["zhCN"] = {
|
||||
["Click Casting"] = "点击施法",
|
||||
["Clock"] = "时间",
|
||||
["Close"] = "关闭",
|
||||
["Collapse Empty Slots"] = nil,
|
||||
["Color"] = "颜色",
|
||||
["Color Buff Stacks"] = "Buff堆叠颜色",
|
||||
["Color Debuff Stacks"] = "Debuff堆叠颜色",
|
||||
@@ -138,7 +140,6 @@ pfUI_translation["zhCN"] = {
|
||||
["Combat Timer"] = "战斗计时器",
|
||||
["Combopoint Height"] = "连击点高度",
|
||||
["Combopoint Width"] = "连击点宽度",
|
||||
["Compare Item Base Stats"] = "基于属性的装备对比",
|
||||
["Components"] = "组件",
|
||||
["Config UI Settings"] = "界面设置",
|
||||
["Configuration"] = "配置",
|
||||
@@ -199,7 +200,6 @@ pfUI_translation["zhCN"] = {
|
||||
["Description Font"] = "描述字体",
|
||||
["Description Font Size"] = "描述字体大小",
|
||||
["Detailed Random Roll Announcement"] = "通告详细随机Roll点",
|
||||
["Detect Enemy Buffs"] = "探测敌方Buffs",
|
||||
["Disable"] = "禁用",
|
||||
["Disable Blizzard Castbar"] = "隐藏暴雪施法条",
|
||||
["Disabled"] = "不显示",
|
||||
@@ -281,7 +281,6 @@ pfUI_translation["zhCN"] = {
|
||||
["Enable Energy Ticks"] = "显示能量刻度",
|
||||
["Enable Extended Guild Information"] = "公会信息扩展显示",
|
||||
["Enable Frame Shadow"] = "启用框架阴影",
|
||||
["Enable Full-Text Search"] = "启用全文搜索",
|
||||
["Enable Indicators"] = "启用指示器",
|
||||
["Enable Item Quality Color For Equipment Only"] = "仅在装备上显示品质颜色",
|
||||
["Enable \"Loot & Spam\" Chat Window"] = "启用[拾取、综合]聊天窗口",
|
||||
@@ -291,7 +290,6 @@ pfUI_translation["zhCN"] = {
|
||||
["Enable Mana Ticks"] = "显示法力值刻度",
|
||||
["Enable Micro Bar"] = "显示菜单栏",
|
||||
["Enable Mouselook With Right Click"] = "启动右键移动镜头",
|
||||
["Enable Mouseover Tooltip"] = "启用鼠标悬停工具提示",
|
||||
["Enable Movable Bags"] = "启用可移动包裹",
|
||||
["Enable Offscreen Frame Positions"] = "允许本插件所有框体移出屏幕边缘",
|
||||
["Enable Overlap"] = "叠加显示",
|
||||
@@ -312,6 +310,7 @@ pfUI_translation["zhCN"] = {
|
||||
["Encode"] = "编码",
|
||||
["Ended"] = "结束",
|
||||
["Energy Color"] = "能量值颜色",
|
||||
["Equipped"] = "已装备",
|
||||
["Equipped Item Color"] = "已装备物品颜色",
|
||||
["Estimate Debuffs"] = "预估Debuffs",
|
||||
["Estimate Enemy Health Points"] = "预估敌人的生命值",
|
||||
@@ -569,6 +568,7 @@ pfUI_translation["zhCN"] = {
|
||||
["Overwrite If Unit Is Attacking Others"] = "如果单位正在攻击其它单位则变色",
|
||||
["Overwrite If Unit Is Attacking You"] = "如果单位正在攻击你则变色",
|
||||
["Overwrite If Unit Is Casting"] = "如果单位正在施法则变色",
|
||||
["Owner Name"] = nil,
|
||||
["Pageable"] = "可分页",
|
||||
["Paging Actionbar"] = "分页动作条",
|
||||
["Panel"] = "面板",
|
||||
@@ -616,12 +616,13 @@ pfUI_translation["zhCN"] = {
|
||||
["Raid Mark X-Offset"] = nil,
|
||||
["Raid Mark Y-Offset"] = nil,
|
||||
["Raid Padding"] = "团队填充",
|
||||
["Raid-Pet"] = nil,
|
||||
["Random"] = "给随机玩家",
|
||||
["Random Roll Announcement Rarity"] = "随机Roll点稀有度",
|
||||
["Random Rolling"] = "随机Roll点 物品:",
|
||||
["Range Based Hunter Paging"] = "启用基于范围的自动分页[|cff7fff7f猎人|r]",
|
||||
["Range Check Interval"] = "范围检查间隔",
|
||||
["Rank"] = "军衔",
|
||||
["Recast Totem"] = nil,
|
||||
["Red Border On Enemy Units"] = "显示敌方单位红色边框",
|
||||
["Red Name Text On Infight Units"] = "进战斗的单位显示红色姓名",
|
||||
["Regional Settings"] = "区域设置",
|
||||
@@ -667,7 +668,6 @@ pfUI_translation["zhCN"] = {
|
||||
["Scale"] = "比例",
|
||||
["Scale Border On HiDPI Displays"] = "缩放高DPI显示器上的边框",
|
||||
["Scaling"] = "UI缩放",
|
||||
["Scan Macros For Spells"] = "扫描宏命令中的法术",
|
||||
["Screen Edge Glow Intensity"] = "屏幕边缘发光强度",
|
||||
["Screen Resolution"] = "屏幕分辨率",
|
||||
["Screenshot"] = "屏幕截图",
|
||||
@@ -703,6 +703,7 @@ pfUI_translation["zhCN"] = {
|
||||
["Show Description"] = "显示描述",
|
||||
["Show Dispel Indicators"] = "显示驱散指示器",
|
||||
["Show Druid Mana Bar"] = "显示德鲁伊法力条",
|
||||
["Show Druid Mana Bar Text"] = nil,
|
||||
["Show Duration Inside Buff"] = "显示持续时间在Buff里面",
|
||||
["Show Empty Buttons"] = "显示空按钮",
|
||||
["Show FPS and Latency Colors"] = "显示帧数以及延迟颜色",
|
||||
@@ -740,6 +741,7 @@ pfUI_translation["zhCN"] = {
|
||||
["Show Required Questitem Count"] = "显示所需的任务物品计数",
|
||||
["Show Resting"] = "显示休息图标",
|
||||
["Show Self In Group Frames"] = "在队伍框架中显示自己",
|
||||
["Show Self In Raid Frames When Solo"] = nil,
|
||||
["Show Spell Icon"] = "显示技能图标",
|
||||
["Show Spell Name"] = "显示技能名称",
|
||||
["Show Stacks"] = "显示堆叠",
|
||||
@@ -784,6 +786,7 @@ pfUI_translation["zhCN"] = {
|
||||
["Target Castbar"] = "目标施法条",
|
||||
["Target Debuff Bar"] = "目标Debuffs条",
|
||||
["Target Nameplate Zoom Factor"] = "目标姓名板缩放系数",
|
||||
["Target Totem"] = nil,
|
||||
["Target-Target"] = "目标的目标",
|
||||
["Target-Target-Target"] = "目标的目标的目标",
|
||||
["Text"] = "文本",
|
||||
@@ -816,6 +819,7 @@ pfUI_translation["zhCN"] = {
|
||||
["Top Actionbar"] = "上方动作条",
|
||||
["Top Left"] = "左上方",
|
||||
["Top Right"] = "右上方",
|
||||
["Total"] = "总计",
|
||||
["Total Gold"] = "总黄金",
|
||||
["Totem Direction"] = "图腾方向",
|
||||
["Totem Icons"] = "图腾图标",
|
||||
@@ -868,7 +872,6 @@ pfUI_translation["zhCN"] = {
|
||||
["Website"] = "网站",
|
||||
["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."] = "欢迎使用 |cff33ffccpf|cffffffffUI|r! \n\n这是第一次运行向导,将引导您完成一些基本配置。 如果你想跳过所有步骤\"使用默认\"按钮。 如果您再次运行此对话框,请转到设置并点击 \"Reset Firstrun\" 按钮。\n\n访问 |cff33ffcc%s|r 检查最新版本。",
|
||||
["Whitelist"] = "白名单",
|
||||
["Who Search Unknown Classes (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Width"] = "宽度",
|
||||
["Wobble Zoom"] = "摆动变焦",
|
||||
["Won"] = "获胜",
|
||||
@@ -878,7 +881,6 @@ pfUI_translation["zhCN"] = {
|
||||
["XP Percentage"] = "经验百分比",
|
||||
["Yellow Border On Neutral Units"] = "显示中立单位黄色边框",
|
||||
["Yes"] = "是",
|
||||
["You gain (.+) Mana from Totemic Recall"] = "你从图腾召回获得了(.+)点法力值",
|
||||
["You got"] = "你已得到",
|
||||
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = "你的界面现在已经完成设置.高级设置请点击游戏菜单或者输入命令/pfui进行设置.祝您游戏愉快",
|
||||
["Your items have been repaired for"] = "你的物品已经修好了",
|
||||
|
||||
Vendored
+11
-9
@@ -27,7 +27,6 @@ pfUI_translation["zhTW"] = {
|
||||
["Always Show Item Comparison"] = "始終顯示裝備比較",
|
||||
["Always Show On Target Units"] = nil,
|
||||
["Always Show On Units With Missing HP"] = nil,
|
||||
["Always Show Self In Raid Frames"] = nil,
|
||||
["Always Use 2D Portraits"] = "始終使用2D頭像",
|
||||
["Ammo Counter"] = "彈藥數量",
|
||||
["Anchor Bags Above Chat"] = nil,
|
||||
@@ -52,10 +51,12 @@ pfUI_translation["zhTW"] = {
|
||||
["Auto Sell Grey Items"] = "自動販賣灰色物品",
|
||||
["Average Per Hour"] = "平均每小時",
|
||||
["Background Color"] = "背景顏色",
|
||||
["Bags"] = "背包",
|
||||
["Bags & Bank"] = "背包和銀行",
|
||||
["Bags Border Size"] = "背包邊框大小",
|
||||
["Bagslots Per Row"] = "每行包裹槽數量",
|
||||
["Bagspace"] = "背包空間",
|
||||
["Bank"] = "銀行",
|
||||
["Banker"] = "工會銀行角色",
|
||||
["Bankslots Per Row"] = "每行銀行槽數量",
|
||||
["Bar Background"] = nil,
|
||||
@@ -124,6 +125,7 @@ pfUI_translation["zhTW"] = {
|
||||
["Click Casting"] = nil,
|
||||
["Clock"] = "時間",
|
||||
["Close"] = "關閉",
|
||||
["Collapse Empty Slots"] = nil,
|
||||
["Color"] = nil,
|
||||
["Color Buff Stacks"] = nil,
|
||||
["Color Debuff Stacks"] = nil,
|
||||
@@ -138,7 +140,6 @@ pfUI_translation["zhTW"] = {
|
||||
["Combat Timer"] = "戰鬥計時器",
|
||||
["Combopoint Height"] = nil,
|
||||
["Combopoint Width"] = nil,
|
||||
["Compare Item Base Stats"] = "基於屬性的裝備對比",
|
||||
["Components"] = "組件",
|
||||
["Config UI Settings"] = nil,
|
||||
["Configuration"] = "配置",
|
||||
@@ -199,7 +200,6 @@ pfUI_translation["zhTW"] = {
|
||||
["Description Font"] = nil,
|
||||
["Description Font Size"] = nil,
|
||||
["Detailed Random Roll Announcement"] = "通告詳細隨機Roll點",
|
||||
["Detect Enemy Buffs"] = nil,
|
||||
["Disable"] = "禁用",
|
||||
["Disable Blizzard Castbar"] = "隱藏暴雪施法條",
|
||||
["Disabled"] = "不顯示",
|
||||
@@ -281,7 +281,6 @@ pfUI_translation["zhTW"] = {
|
||||
["Enable Energy Ticks"] = "顯示能量刻度",
|
||||
["Enable Extended Guild Information"] = "公會資訊擴展顯示",
|
||||
["Enable Frame Shadow"] = "啟用框架陰影",
|
||||
["Enable Full-Text Search"] = nil,
|
||||
["Enable Indicators"] = nil,
|
||||
["Enable Item Quality Color For Equipment Only"] = "僅在裝備上顯示品質顏色",
|
||||
["Enable \"Loot & Spam\" Chat Window"] = "啟用[拾取、綜合]聊天視窗",
|
||||
@@ -291,7 +290,6 @@ pfUI_translation["zhTW"] = {
|
||||
["Enable Mana Ticks"] = nil,
|
||||
["Enable Micro Bar"] = "顯示功能表列",
|
||||
["Enable Mouselook With Right Click"] = "啟動右鍵移動鏡頭",
|
||||
["Enable Mouseover Tooltip"] = "啟用滑鼠懸停工具提示",
|
||||
["Enable Movable Bags"] = "啟用可移動包裹",
|
||||
["Enable Offscreen Frame Positions"] = "啟用螢幕框架固定",
|
||||
["Enable Overlap"] = "疊加顯示",
|
||||
@@ -312,6 +310,7 @@ pfUI_translation["zhTW"] = {
|
||||
["Encode"] = "編碼",
|
||||
["Ended"] = nil,
|
||||
["Energy Color"] = nil,
|
||||
["Equipped"] = "已裝備",
|
||||
["Equipped Item Color"] = nil,
|
||||
["Estimate Debuffs"] = nil,
|
||||
["Estimate Enemy Health Points"] = nil,
|
||||
@@ -569,6 +568,7 @@ pfUI_translation["zhTW"] = {
|
||||
["Overwrite If Unit Is Attacking Others"] = "如果单位正在攻擊其它单位則覆蓋",
|
||||
["Overwrite If Unit Is Attacking You"] = "如果单位正在攻擊你則覆蓋",
|
||||
["Overwrite If Unit Is Casting"] = "如果单位正在施法則覆蓋",
|
||||
["Owner Name"] = nil,
|
||||
["Pageable"] = nil,
|
||||
["Paging Actionbar"] = nil,
|
||||
["Panel"] = "面板",
|
||||
@@ -616,12 +616,13 @@ pfUI_translation["zhTW"] = {
|
||||
["Raid Mark X-Offset"] = nil,
|
||||
["Raid Mark Y-Offset"] = nil,
|
||||
["Raid Padding"] = nil,
|
||||
["Raid-Pet"] = nil,
|
||||
["Random"] = "給隨機玩家",
|
||||
["Random Roll Announcement Rarity"] = "隨機Roll點公示稀有度",
|
||||
["Random Rolling"] = "隨機Roll點 物品:",
|
||||
["Range Based Hunter Paging"] = nil,
|
||||
["Range Check Interval"] = "範圍檢查間隔",
|
||||
["Rank"] = nil,
|
||||
["Recast Totem"] = nil,
|
||||
["Red Border On Enemy Units"] = nil,
|
||||
["Red Name Text On Infight Units"] = nil,
|
||||
["Regional Settings"] = nil,
|
||||
@@ -667,7 +668,6 @@ pfUI_translation["zhTW"] = {
|
||||
["Scale"] = "比例",
|
||||
["Scale Border On HiDPI Displays"] = nil,
|
||||
["Scaling"] = nil,
|
||||
["Scan Macros For Spells"] = nil,
|
||||
["Screen Edge Glow Intensity"] = nil,
|
||||
["Screen Resolution"] = "螢幕解析度",
|
||||
["Screenshot"] = nil,
|
||||
@@ -703,6 +703,7 @@ pfUI_translation["zhTW"] = {
|
||||
["Show Description"] = nil,
|
||||
["Show Dispel Indicators"] = nil,
|
||||
["Show Druid Mana Bar"] = nil,
|
||||
["Show Druid Mana Bar Text"] = nil,
|
||||
["Show Duration Inside Buff"] = "顯示持續時間在Buff裏面",
|
||||
["Show Empty Buttons"] = nil,
|
||||
["Show FPS and Latency Colors"] = nil,
|
||||
@@ -739,6 +740,7 @@ pfUI_translation["zhTW"] = {
|
||||
["Show Required Questitem Count"] = nil,
|
||||
["Show Resting"] = nil,
|
||||
["Show Self In Group Frames"] = nil,
|
||||
["Show Self In Raid Frames When Solo"] = nil,
|
||||
["Show Spell Icon"] = nil,
|
||||
["Show Spell Name"] = nil,
|
||||
["Show Stacks"] = nil,
|
||||
@@ -783,6 +785,7 @@ pfUI_translation["zhTW"] = {
|
||||
["Target Castbar"] = nil,
|
||||
["Target Debuff Bar"] = nil,
|
||||
["Target Nameplate Zoom Factor"] = nil,
|
||||
["Target Totem"] = nil,
|
||||
["Target-Target"] = "目標的目標",
|
||||
["Target-Target-Target"] = nil,
|
||||
["Text"] = nil,
|
||||
@@ -815,6 +818,7 @@ pfUI_translation["zhTW"] = {
|
||||
["Top Actionbar"] = nil,
|
||||
["Top Left"] = "左上方",
|
||||
["Top Right"] = "右上方",
|
||||
["Total"] = "全部",
|
||||
["Total Gold"] = "總金量",
|
||||
["Totem Direction"] = nil,
|
||||
["Totem Icons"] = nil,
|
||||
@@ -867,7 +871,6 @@ pfUI_translation["zhTW"] = {
|
||||
["Website"] = nil,
|
||||
["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."] = "歡迎使用 |cff33ffccpf|cffffffffUI|r! \n\n這是第一次運行嚮導,將引導您完成一些基本配置。 如果你想跳過所有步驟\"使用預設\"按鈕。 如果您再次運行此對話方塊,請轉到設置並點擊 \"Reset Firstrun\" 按鈕。\n\n訪問 |cff33ffcc%s|r 檢查最新版本。",
|
||||
["Whitelist"] = "白名單",
|
||||
["Who Search Unknown Classes (|cffffaaaaExperimental|r)"] = nil,
|
||||
["Width"] = nil,
|
||||
["Wobble Zoom"] = nil,
|
||||
["Won"] = nil,
|
||||
@@ -877,7 +880,6 @@ pfUI_translation["zhTW"] = {
|
||||
["XP Percentage"] = "經驗百分比",
|
||||
["Yellow Border On Neutral Units"] = nil,
|
||||
["Yes"] = nil,
|
||||
["You gain (.+) Mana from Totemic Recall"] = nil,
|
||||
["You got"] = nil,
|
||||
["Your interface is now set up.\n\nFor advanced configuration, just open the |cff33ffccpf|rUI settings via the escape menu or type \"|cffffffaa/pfui|r\" into the chat.\n\n Have a nice trip!\n\n|cffaaaaaa- Shagu"] = "您的UI已經設置完畢.使用遊戲菜單或在聊天窗口輸入\"|cffffffaa/pfui|r\"開啟高級設置.祝您遊戲愉快!\n\n|cffaaaaaa- Shagu",
|
||||
["Your items have been repaired for"] = "你的物品已經修好了",
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
<Include file="..\api\api.lua"/>
|
||||
<Include file="..\api\config.lua"/>
|
||||
<Include file="..\api\ui-widgets.lua"/>
|
||||
<Include file="..\api\ui-widgets.xml"/>
|
||||
<Include file="..\api\unitframes.lua"/>
|
||||
</Ui>
|
||||
|
||||
+8
-1
@@ -7,7 +7,14 @@
|
||||
<Include file="..\env\locales_esES.lua"/>
|
||||
<Include file="..\env\locales_ruRU.lua"/>
|
||||
|
||||
<Include file="..\env\tables.lua"/>
|
||||
<Include file="..\env\combatlog_enUS.lua"/>
|
||||
<Include file="..\env\combatlog_koKR.lua"/>
|
||||
<Include file="..\env\combatlog_frFR.lua"/>
|
||||
<Include file="..\env\combatlog_deDE.lua"/>
|
||||
<Include file="..\env\combatlog_zhCN.lua"/>
|
||||
<Include file="..\env\combatlog_esES.lua"/>
|
||||
<Include file="..\env\combatlog_ruRU.lua"/>
|
||||
|
||||
<Include file="..\env\profiles.lua"/>
|
||||
|
||||
<Include file="..\env\translations_enUS.lua"/>
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<Include file="..\libs\libtipscan.lua"/>
|
||||
<Include file="..\libs\libspell.lua"/>
|
||||
<Include file="..\libs\libcast.lua"/>
|
||||
<Include file="..\libs\libdebuff.lua"/>
|
||||
<Include file="..\libs\librange.lua"/>
|
||||
<Include file="..\libs\libunitscan.lua"/>
|
||||
<Include file="..\libs\libtooltip.lua"/>
|
||||
<Include file="..\libs\libhealth.lua"/>
|
||||
<Include file="..\libs\libtotem.lua"/>
|
||||
<Include file="..\libs\libthrottle.lua"/>
|
||||
<Include file="..\libs\libpredict.lua"/>
|
||||
<Include file="..\libs\libbagsort.lua"/>
|
||||
|
||||
+6
-2
@@ -7,6 +7,8 @@
|
||||
<Include file="..\modules\gryphons.lua"/>
|
||||
<Include file="..\modules\hunterbar.lua"/>
|
||||
<Include file="..\modules\chat.lua"/>
|
||||
<Include file="..\modules\combatlog.lua"/>
|
||||
<Include file="..\modules\combatlog_config.lua"/>
|
||||
<Include file="..\modules\whisperproxy.lua"/>
|
||||
<Include file="..\modules\chatcopy.lua"/>
|
||||
<Include file="..\modules\bubbles.lua"/>
|
||||
@@ -70,12 +72,14 @@
|
||||
<Include file="..\modules\addoncompat.lua"/>
|
||||
<Include file="..\modules\energytick.lua"/>
|
||||
<Include file="..\modules\totems.lua"/>
|
||||
<Include file="..\modules\macrotweak.lua"/>
|
||||
<Include file="..\modules\turtle-wow.lua"/>
|
||||
<Include file="..\modules\macroicons.lua"/>
|
||||
<Include file="..\modules\superwow.lua"/>
|
||||
<Include file="..\modules\innervatecall.lua"/>
|
||||
<Include file="..\modules\nampower.lua"/>
|
||||
<Include file="..\modules\unitxp.lua"/>
|
||||
<Include file="..\modules\bgscore.lua"/>
|
||||
<Include file="..\modules\equipmentmanager.lua"/>
|
||||
<Include file="..\modules\loothistory.lua"/>
|
||||
<Include file="..\modules\newitem.lua"/>
|
||||
<Include file="..\modules\friendnotes.lua"/>
|
||||
</Ui>
|
||||
+3
-9
@@ -1,5 +1,6 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<Include file="..\skins\blizzard\character.lua"/>
|
||||
<Include file="..\skins\blizzard\inspect.lua"/>
|
||||
<Include file="..\skins\blizzard\spellbook.lua"/>
|
||||
<Include file="..\skins\blizzard\friends.lua"/>
|
||||
<Include file="..\skins\blizzard\talents.lua"/>
|
||||
@@ -29,19 +30,12 @@
|
||||
<Include file="..\skins\blizzard\options-sound.lua"/>
|
||||
<Include file="..\skins\blizzard\options-video.lua"/>
|
||||
<Include file="..\skins\blizzard\options-new.lua"/>
|
||||
<Include file="..\skins\blizzard\options-interface.lua"/>
|
||||
<Include file="..\skins\blizzard\petition.lua"/>
|
||||
<Include file="..\skins\blizzard\taxi.lua"/>
|
||||
<Include file="..\skins\blizzard\tooltips.lua"/>
|
||||
<Include file="..\skins\blizzard\tabard.lua"/>
|
||||
<Include file="..\skins\blizzard\itemtext.lua"/>
|
||||
<Include file="..\skins\blizzard\lft.lua"/>
|
||||
<Include file="..\skins\blizzard\turtle_shop.lua"/>
|
||||
|
||||
<!-- Turtle WoW -->
|
||||
<Include file="..\skins\blizzard\barbershop.lua"/>
|
||||
<Include file="..\skins\blizzard\transmog.lua"/>
|
||||
<Include file="..\skins\blizzard\custom_merchant.lua"/>
|
||||
<Include file="..\skins\blizzard\arena_score.lua"/>
|
||||
<Include file="..\skins\blizzard\ebc.lua"/>
|
||||
|
||||
<!-- Turtle WoW skins live in init\turtle.xml (pfUI_Turtle.toc only). -->
|
||||
</Ui>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<Include file="..\compat\vanilla.lua"/>
|
||||
<Include file="..\env\tables_stock.lua"/>
|
||||
</Ui>
|
||||
@@ -0,0 +1,14 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<!-- Turtle WoW only: pulled in by pfUI_Turtle.toc, which ClassicAPI selects
|
||||
when it detects a Turtle client. Everything in here targets frames that
|
||||
only a Turtle client ever creates. -->
|
||||
<Include file="..\env\tables_turtle.lua"/>
|
||||
|
||||
<Include file="..\skins\blizzard\lft.lua"/>
|
||||
<Include file="..\skins\blizzard\turtle_shop.lua"/>
|
||||
<Include file="..\skins\blizzard\barbershop.lua"/>
|
||||
<Include file="..\skins\blizzard\transmog.lua"/>
|
||||
<Include file="..\skins\blizzard\ebc.lua"/>
|
||||
|
||||
<Include file="..\modules\turtle-wow.lua"/>
|
||||
</Ui>
|
||||
+147
-64
@@ -11,26 +11,22 @@ pfUI.api.libbagsort = libbagsort
|
||||
libbagsort.itemGrid = {}
|
||||
libbagsort.bagList = nil
|
||||
|
||||
local HEARTHSTONE_ITEM_ID = 6948
|
||||
local ItemClass = Enum.ItemClass
|
||||
local ItemQuality = Enum.ItemQuality
|
||||
|
||||
-- Lower prefix = sorted earlier in the bag.
|
||||
local function SortCategoryPrefix(itemId, itemType, itemSubType, quality)
|
||||
if itemId == HEARTHSTONE_ITEM_ID then return "00" end
|
||||
if quality == 0 then return "13" end -- Poor (gray) always last
|
||||
if itemType == "Weapon" or itemType == "Armor" then
|
||||
if quality and quality >= 4 then return "01" end -- Epic+ gear
|
||||
if quality == 3 then return "02" end -- Rare gear
|
||||
if quality == 2 then return "03" end -- Uncommon gear
|
||||
return "04" -- Common/poor gear
|
||||
end
|
||||
if itemType == "Consumable" then return "05" end
|
||||
if itemType == "Reagent" then return "06" end
|
||||
if itemType == "Trade Goods" then return "07" end
|
||||
if itemType == "Quest" then return "08" end
|
||||
local function SortCategoryPrefix(itemId, classID, quality)
|
||||
if itemId == HEARTHSTONE_ITEM_ID then return "00" end
|
||||
if quality == ItemQuality.Poor then return "13" end -- gray always last
|
||||
if classID == ItemClass.Weapon or classID == ItemClass.Armor then return "01" end
|
||||
if classID == ItemClass.Consumable then return "05" end
|
||||
if classID == ItemClass.Reagent then return "06" end
|
||||
if classID == ItemClass.Tradegoods then return "07" end
|
||||
if classID == ItemClass.Questitem then return "08" end
|
||||
-- Non-gear items without a specific type, sorted by quality
|
||||
if quality and quality >= 4 then return "09" end
|
||||
if quality == 3 then return "10" end
|
||||
if quality == 2 then return "11" end
|
||||
if quality and quality >= ItemQuality.Epic then return "09" end
|
||||
if quality == ItemQuality.Rare then return "10" end
|
||||
if quality == ItemQuality.Uncommon then return "11" end
|
||||
return "12"
|
||||
end
|
||||
|
||||
@@ -41,18 +37,59 @@ local function SortCountSuffix(count)
|
||||
return string.sub(s, -6)
|
||||
end
|
||||
|
||||
local function SortKey(itemId, name, itype, subtype, quality, count)
|
||||
return SortCategoryPrefix(itemId, itype, subtype, quality)
|
||||
.. (itype or "") .. "|" .. (subtype or "") .. "|" .. (name or "zzz") .. "|" .. SortCountSuffix(count)
|
||||
-- Gear's slot order, keyed by the equipLoc token (INVTYPE_*). Not the
|
||||
-- token's alphabetical order, which puts chest before head, and not its
|
||||
-- INVTYPE number, which parts robe (20) from chest (5). Same order as
|
||||
-- ClassicAPI's C_Container.SortBags, taken from Baganator: weapons by hand,
|
||||
-- ranged and ammo, then armor with shields and off-hands first, head to
|
||||
-- feet, then jewelry, shirt and tabard.
|
||||
local SLOT_ORDER = {
|
||||
"INVTYPE_2HWEAPON", "INVTYPE_WEAPON", "INVTYPE_WEAPONMAINHAND",
|
||||
"INVTYPE_SHIELD", "INVTYPE_HOLDABLE", "INVTYPE_RANGEDRIGHT",
|
||||
"INVTYPE_WEAPONOFFHAND", "INVTYPE_RANGED", "INVTYPE_THROWN",
|
||||
"INVTYPE_AMMO", "INVTYPE_QUIVER", "INVTYPE_RELIC",
|
||||
"INVTYPE_HEAD", "INVTYPE_SHOULDER", "INVTYPE_CLOAK", "INVTYPE_CHEST",
|
||||
"INVTYPE_ROBE", "INVTYPE_WRIST", "INVTYPE_HAND", "INVTYPE_WAIST",
|
||||
"INVTYPE_LEGS", "INVTYPE_FEET",
|
||||
"INVTYPE_NECK", "INVTYPE_FINGER", "INVTYPE_TRINKET", "INVTYPE_BODY",
|
||||
"INVTYPE_TABARD", "INVTYPE_BAG",
|
||||
}
|
||||
local SLOT_RANK = {}
|
||||
for i, token in ipairs(SLOT_ORDER) do SLOT_RANK[token] = i end
|
||||
|
||||
local function SortKey(itemId, name, classID, subClassID, quality, count, equipLoc)
|
||||
-- Zero-pad the numeric fields so they sort numerically as strings ("10"
|
||||
-- would otherwise precede "2").
|
||||
local key = SortCategoryPrefix(itemId, classID, quality)
|
||||
.. string.format("%02d|", classID or 99)
|
||||
if classID == ItemClass.Weapon or classID == ItemClass.Armor then
|
||||
-- Gear: slot, then subtype, then best quality first, so all helms sit
|
||||
-- together, then all shoulders.
|
||||
key = key .. string.format("%02d|%02d|%d|",
|
||||
SLOT_RANK[equipLoc] or 99, subClassID or 99, 9 - (quality or 0))
|
||||
else
|
||||
key = key .. string.format("%02d|", subClassID or 99)
|
||||
end
|
||||
return key .. (name or "zzz") .. "|" .. SortCountSuffix(count)
|
||||
end
|
||||
|
||||
local function ClearSortData()
|
||||
libbagsort.itemGrid = {}
|
||||
libbagsort.bagList = nil
|
||||
libbagsort.opts = nil
|
||||
libbagsort:UnregisterEvent("BAG_UPDATE_DELAYED")
|
||||
libbagsort:SetScript("OnEvent", nil)
|
||||
end
|
||||
|
||||
local function ReverseArray(t)
|
||||
local i, j = 1, table.getn(t)
|
||||
while i < j do
|
||||
t[i], t[j] = t[j], t[i]
|
||||
i = i + 1
|
||||
j = j - 1
|
||||
end
|
||||
end
|
||||
|
||||
-- Two-pointer consolidation: sorts stacks largest-first, then merges from
|
||||
-- both ends toward the middle. n is set explicitly so table.getn / table.sort
|
||||
-- work correctly in Lua 5.0.
|
||||
@@ -112,36 +149,61 @@ local function BuildConsolidateOps(bagList)
|
||||
return ops
|
||||
end
|
||||
|
||||
-- Bag family bitmask (1 << (familyID-1)); 0 = general-purpose (holds
|
||||
-- anything). Backpack (0) and bank (-1) are always general. A specialty
|
||||
-- bag's family comes from the equipped bag item -- ClassicAPI derives it
|
||||
-- from the container subclass when the raw field is empty (Turtle leaves
|
||||
-- bags' m_bagFamily at 0), so quivers/soul/profession bags report properly.
|
||||
local function BagFamily(bag)
|
||||
if bag == 0 or bag == -1 then return 0 end
|
||||
local id = GetInventoryItemID("player", ContainerIDToInventoryID(bag))
|
||||
return id and C_Item.GetItemFamily(id) or 0
|
||||
end
|
||||
|
||||
local function BuildSortGrid()
|
||||
local bagList = libbagsort.bagList
|
||||
libbagsort.itemGrid = {}
|
||||
local normalItems = {}
|
||||
local poorItems = {}
|
||||
local bagCount = 0
|
||||
local bagSlots = {}
|
||||
|
||||
-- Destination cells, split by the family they can accept. A specialty
|
||||
-- bag's slots only take items of its own family; general slots take
|
||||
-- anything. Cells are collected in forward order (bag order, slot 1..n).
|
||||
local generalCells = {} -- { {bag=,slot=}, ... }
|
||||
local specialtyCells = {} -- family -> { {bag=,slot=}, ... }
|
||||
|
||||
for _, bag in ipairs(bagList) do
|
||||
bagCount = bagCount + 1
|
||||
local fam = BagFamily(bag)
|
||||
local numSlots = GetContainerNumSlots(bag)
|
||||
bagSlots[bagCount] = numSlots
|
||||
if numSlots > 0 then
|
||||
libbagsort.itemGrid[bag] = {}
|
||||
for slot = 1, numSlots do
|
||||
if fam == 0 then
|
||||
tinsert(generalCells, {bag=bag, slot=slot})
|
||||
else
|
||||
specialtyCells[fam] = specialtyCells[fam] or {}
|
||||
tinsert(specialtyCells[fam], {bag=bag, slot=slot})
|
||||
end
|
||||
|
||||
local itemId = C_Container.GetContainerItemID(bag, slot)
|
||||
if itemId then
|
||||
-- pfUI's compat layer shims GetItemInfo to the modern 10-field
|
||||
-- signature (inserts nil for itemLevel between quality and
|
||||
-- minlevel) — so itype/subtype sit at positions 6/7, not 5/6.
|
||||
local name, _, quality, _, _, itype, subtype = GetItemInfo(itemId)
|
||||
-- C_Item.GetItemInfo is the full 18-field tuple; classID/subClassID
|
||||
-- sit at positions 12/13. We categorize on those numeric class IDs
|
||||
-- rather than the localized itemType/itemSubType strings. (pfUI's
|
||||
-- shimmed global GetItemInfo is only 10 fields and lacks them.)
|
||||
local name, _, quality, _, _, _, _, _, equipLoc, _, _, classID, subClassID = C_Item.GetItemInfo(itemId)
|
||||
local _, count = GetContainerItemInfo(bag, slot)
|
||||
local item = {
|
||||
key = SortKey(itemId, name, itype, subtype, quality, count),
|
||||
key = SortKey(itemId, name, classID, subClassID, quality, count, equipLoc),
|
||||
-- vanilla items carry at most one family bit, so equality
|
||||
-- against a bag family suffices (no bit.band needed).
|
||||
family = C_Item.GetItemFamily(itemId) or 0,
|
||||
srcBag = bag,
|
||||
srcSlot = slot,
|
||||
curBag = bag,
|
||||
curSlot = slot,
|
||||
}
|
||||
if quality == 0 then
|
||||
if quality == ItemQuality.Poor then
|
||||
tinsert(poorItems, item)
|
||||
else
|
||||
tinsert(normalItems, item)
|
||||
@@ -152,46 +214,61 @@ local function BuildSortGrid()
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(normalItems, function(a, b) return a.key < b.key end)
|
||||
-- Sort poor items descending so they read in ascending order when placed
|
||||
-- back-to-front (last poor item lands on the last slot).
|
||||
table.sort(poorItems, function(a, b) return a.key > b.key end)
|
||||
local opts = libbagsort.opts or {}
|
||||
local reverse = opts.reverse
|
||||
local reversePrio = opts.reversePrio
|
||||
|
||||
-- Forward pass: assign normal items from slot 1 of bag 1 onward
|
||||
local bagIdx, destSlot = 1, 1
|
||||
while bagIdx <= bagCount and bagSlots[bagIdx] == 0 do
|
||||
bagIdx = bagIdx + 1
|
||||
if reverse then
|
||||
ReverseArray(generalCells)
|
||||
for _, cells in pairs(specialtyCells) do
|
||||
ReverseArray(cells)
|
||||
end
|
||||
end
|
||||
|
||||
if reversePrio then
|
||||
table.sort(normalItems, function(a, b) return a.key > b.key end)
|
||||
else
|
||||
table.sort(normalItems, function(a, b) return a.key < b.key end)
|
||||
end
|
||||
|
||||
if reverse then
|
||||
table.sort(poorItems, function(a, b) return a.key < b.key end)
|
||||
else
|
||||
table.sort(poorItems, function(a, b) return a.key > b.key end)
|
||||
end
|
||||
|
||||
-- Forward pass: route each normal item into the next free cell that
|
||||
-- accepts it -- a matching specialty bag first, overflowing to general.
|
||||
local genIdx = 1
|
||||
local specIdx = {} -- family -> next free index into specialtyCells[family]
|
||||
for _, item in ipairs(normalItems) do
|
||||
while bagIdx <= bagCount do
|
||||
if destSlot <= bagSlots[bagIdx] then break end
|
||||
bagIdx = bagIdx + 1
|
||||
destSlot = 1
|
||||
local cell
|
||||
local fam = item.family
|
||||
if fam ~= 0 and specialtyCells[fam] then
|
||||
local i = specIdx[fam] or 1
|
||||
if i <= table.getn(specialtyCells[fam]) then
|
||||
cell = specialtyCells[fam][i]
|
||||
specIdx[fam] = i + 1
|
||||
end
|
||||
end
|
||||
if bagIdx > bagCount then break end
|
||||
local grid = libbagsort.itemGrid[item.srcBag][item.srcSlot]
|
||||
grid.destBag = bagList[bagIdx]
|
||||
grid.destSlot = destSlot
|
||||
destSlot = destSlot + 1
|
||||
if not cell and genIdx <= table.getn(generalCells) then
|
||||
cell = generalCells[genIdx]
|
||||
genIdx = genIdx + 1
|
||||
end
|
||||
if not cell then break end
|
||||
item.destBag = cell.bag
|
||||
item.destSlot = cell.slot
|
||||
end
|
||||
|
||||
-- Reverse pass: assign poor items from the last slot of the last bag backward
|
||||
local rBagIdx = bagCount
|
||||
local rDestSlot = 0
|
||||
while rBagIdx >= 1 do
|
||||
if bagSlots[rBagIdx] > 0 then rDestSlot = bagSlots[rBagIdx]; break end
|
||||
rBagIdx = rBagIdx - 1
|
||||
end
|
||||
-- Reverse pass: poor items are general; fill remaining general cells from
|
||||
-- the back, stopping before the ones the forward pass already claimed.
|
||||
local genBack = table.getn(generalCells)
|
||||
for _, item in ipairs(poorItems) do
|
||||
while rBagIdx >= 1 and rDestSlot < 1 do
|
||||
rBagIdx = rBagIdx - 1
|
||||
rDestSlot = rBagIdx >= 1 and bagSlots[rBagIdx] or 0
|
||||
end
|
||||
if rBagIdx < 1 then break end
|
||||
local grid = libbagsort.itemGrid[item.srcBag][item.srcSlot]
|
||||
grid.destBag = bagList[rBagIdx]
|
||||
grid.destSlot = rDestSlot
|
||||
rDestSlot = rDestSlot - 1
|
||||
if genBack < genIdx then break end
|
||||
local cell = generalCells[genBack]
|
||||
genBack = genBack - 1
|
||||
item.destBag = cell.bag
|
||||
item.destSlot = cell.slot
|
||||
end
|
||||
end
|
||||
|
||||
@@ -248,9 +325,15 @@ end
|
||||
-- BAG_UPDATE_DELAYED cycle), then place items by category/name/quality.
|
||||
-- e.g. `libbagsort:Sort({0, 1, 2, 3, 4})` for the main bags;
|
||||
-- `{-1, 5, 6, 7, 8, 9, 10}` for the bank.
|
||||
function libbagsort:Sort(bagList)
|
||||
--
|
||||
-- opts (optional): { reverse = bool, reversePrio = bool }
|
||||
-- reverse - place the first-ranked item into the last slot of the last
|
||||
-- bag (junk fills from the opposite end).
|
||||
-- reversePrio - flip the category ranking (e.g. hearthstone sorts last).
|
||||
function libbagsort:Sort(bagList, opts)
|
||||
ClearSortData()
|
||||
self.bagList = bagList
|
||||
self.opts = opts
|
||||
|
||||
-- Phase 1: fire every consolidation op in a single batch.
|
||||
local ops = BuildConsolidateOps(bagList)
|
||||
|
||||
@@ -1,571 +0,0 @@
|
||||
-- load pfUI environment
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
--[[ libcast ]]--
|
||||
-- A pfUI library that detects and saves all ongoing castbars of players, NPCs and enemies.
|
||||
-- The library also includes spells that usually don't have a castbar like Multi-Shot and Aimed Shot.
|
||||
-- This is exclusivly used for vanilla in order to provide pfGetChannelInfo and pfGetCastInfo functions.
|
||||
--
|
||||
-- External functions:
|
||||
-- pfGetChannelInfo(unit)
|
||||
-- Returns information on the spell currently cast by the specified unit.
|
||||
-- Returns nil if no spell is being cast.
|
||||
--
|
||||
-- cast[String] - The name of the spell, or nil if no spell is being cast.
|
||||
-- nameSubtext[String] - (DUMMY) The string describing the rank of the spell, e.g. "Rank 1".
|
||||
-- text[String] - The name to be displayed.
|
||||
-- texture[String] - The texture path associated with the spell.
|
||||
-- startTime[Number] - Specifies when casting has begun, in milliseconds.
|
||||
-- endTime[Number] - Specifies when casting will end, in milliseconds.
|
||||
-- isTradeSkill[Boolean] - (DUMMY) Specifies if the cast is a tradeskill
|
||||
--
|
||||
-- pfGetCastInfo(unit)
|
||||
-- Returns information on the spell currently channeled by the specified unit.
|
||||
-- Returns nil if no spell is being channeled.
|
||||
--
|
||||
-- cast[String] - The name of the spell, or nil if no spell is being cast.
|
||||
-- nameSubtext[String] - (DUMMY) The string describing the rank of the spell, e.g. "Rank 1".
|
||||
-- text[String] - The name to be displayed.
|
||||
-- texture[String] - The texture path associated with the spell.
|
||||
-- startTime[Number] - Specifies when casting has begun, in milliseconds.
|
||||
-- endTime[Number] - Specifies when casting will end, in milliseconds.
|
||||
-- isTradeSkill[Boolean] - (DUMMY) Specifies if the cast is a tradeskill
|
||||
--
|
||||
-- Internal functions:
|
||||
-- libcast:AddAction(mob, spell, channel)
|
||||
-- Adds a spell to the database by using pfUI's spell database
|
||||
-- to obtain durations and icons
|
||||
--
|
||||
-- libcast:RemoveAction(mob, spell)
|
||||
-- Removes the castbar of a given mob, if `spell` is an interrupt.
|
||||
-- spell can be set to "INTERRUPT" to force remove an action.
|
||||
--
|
||||
|
||||
-- return instantly when another libcast is already active
|
||||
if pfUI.api.libcast then return end
|
||||
|
||||
local lastcasttex, lastrank, _
|
||||
|
||||
local libcast = CreateFrame("Frame", "pfEnemyCast")
|
||||
local player = UnitName("player")
|
||||
|
||||
pfGetChannelInfo = function(unit)
|
||||
-- convert to name if unitstring was given
|
||||
local unitName = pfValidUnits[unit] and UnitName(unit) or unit
|
||||
|
||||
-- Get GUID if Nampower is available
|
||||
local guid = nil
|
||||
|
||||
-- Check if unit itself is a GUID (starts with "0x")
|
||||
if type(unit) == "string" and string.sub(unit, 1, 2) == "0x" then
|
||||
guid = unit -- unit IS the GUID
|
||||
elseif pfValidUnits[unit] and UnitExists then
|
||||
-- unit is a token like "target" - get GUID from it
|
||||
local unitGuid = UnitGUID(unit)
|
||||
guid = unitGuid
|
||||
end
|
||||
|
||||
-- For player: ALWAYS use libcast.db because it handles channel updates correctly
|
||||
local isPlayer = unit == "player" or unitName == player
|
||||
|
||||
if isPlayer then
|
||||
local cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
local db = libcast.db[player]
|
||||
|
||||
if db and db.cast and db.start + db.casttime / 1000 > GetTime() then
|
||||
if not db.channel then return end
|
||||
cast = db.cast
|
||||
nameSubtext = db.rank
|
||||
text = ""
|
||||
texture = db.icon
|
||||
startTime = db.start * 1000
|
||||
endTime = startTime + db.casttime
|
||||
isTradeSkill = nil
|
||||
elseif db then
|
||||
db.cast = nil
|
||||
db.rank = nil
|
||||
db.start = nil
|
||||
db.casttime = nil
|
||||
db.icon = nil
|
||||
db.channel = nil
|
||||
end
|
||||
|
||||
return cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
end
|
||||
|
||||
-- For non-player units: use libdebuff GUID-based tracking or libcast.db
|
||||
-- Try GUID-based lookup first (from libdebuff's SPELL_START tracking)
|
||||
local db = nil
|
||||
if guid and pfUI.libdebuff_casts and pfUI.libdebuff_casts[guid] then
|
||||
-- Use libdebuff's cast tracking (from SPELL_START_OTHER events)
|
||||
local castData = pfUI.libdebuff_casts[guid]
|
||||
if castData.event == "START" and castData.endTime and castData.endTime > GetTime() then
|
||||
-- Convert libdebuff format to libcast format
|
||||
db = {
|
||||
cast = castData.spellName,
|
||||
rank = nil,
|
||||
start = castData.startTime,
|
||||
casttime = castData.duration * 1000, -- Convert back to ms
|
||||
icon = castData.icon,
|
||||
channel = nil -- TODO: libdebuff should distinguish channel vs cast
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
-- Fallback to name-based lookup (CHAT_MSG castbars)
|
||||
-- Skip when GUID is available to avoid same-name mob bleed
|
||||
if not db and not guid and libcast.db[unitName] then
|
||||
db = libcast.db[unitName]
|
||||
end
|
||||
|
||||
-- Fallback to libcast.db for non-player units
|
||||
local cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
|
||||
if db and db.cast and db.start + db.casttime / 1000 > GetTime() then
|
||||
if not db.channel then return end
|
||||
cast = db.cast
|
||||
nameSubtext = db.rank
|
||||
text = ""
|
||||
texture = db.icon
|
||||
startTime = db.start * 1000
|
||||
endTime = startTime + db.casttime
|
||||
isTradeSkill = nil
|
||||
elseif db then
|
||||
db.cast = nil
|
||||
db.rank = nil
|
||||
db.start = nil
|
||||
db.casttime = nil
|
||||
db.icon = nil
|
||||
db.channel = nil
|
||||
end
|
||||
|
||||
return cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
end
|
||||
|
||||
pfGetCastInfo = function(unit)
|
||||
-- convert to name if unitstring was given
|
||||
local unitName = pfValidUnits[unit] and UnitName(unit) or unit
|
||||
|
||||
-- Get GUID if Nampower is available
|
||||
local guid = nil
|
||||
|
||||
-- Check if unit itself is a GUID (starts with "0x")
|
||||
if type(unit) == "string" and string.sub(unit, 1, 2) == "0x" then
|
||||
guid = unit -- unit IS the GUID
|
||||
elseif pfValidUnits[unit] and UnitExists then
|
||||
-- unit is a token like "target" - get GUID from it
|
||||
local unitGuid = UnitGUID(unit)
|
||||
guid = unitGuid
|
||||
end
|
||||
|
||||
-- For player: ALWAYS use libcast.db because it handles pushback correctly
|
||||
local isPlayer = unit == "player" or unitName == player
|
||||
|
||||
if isPlayer then
|
||||
local cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
local db = libcast.db[player]
|
||||
|
||||
if db and db.cast and db.start + db.casttime / 1000 > GetTime() then
|
||||
if db.channel then return end
|
||||
cast = db.cast
|
||||
nameSubtext = db.rank or ""
|
||||
text = ""
|
||||
texture = db.icon
|
||||
startTime = db.start * 1000
|
||||
endTime = startTime + db.casttime
|
||||
isTradeSkill = nil
|
||||
elseif db then
|
||||
db.cast = nil
|
||||
db.rank = nil
|
||||
db.start = nil
|
||||
db.casttime = nil
|
||||
db.icon = nil
|
||||
db.channel = nil
|
||||
end
|
||||
|
||||
return cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
end
|
||||
|
||||
-- For non-player units: use libdebuff GUID-based tracking or libcast.db
|
||||
-- Try GUID-based lookup first (from libdebuff's SPELL_START tracking)
|
||||
local db = nil
|
||||
if guid and pfUI.libdebuff_casts and pfUI.libdebuff_casts[guid] then
|
||||
-- Use libdebuff's cast tracking (from SPELL_START_OTHER events)
|
||||
local castData = pfUI.libdebuff_casts[guid]
|
||||
if castData.event == "START" and castData.endTime and castData.endTime > GetTime() then
|
||||
-- Convert libdebuff format to libcast format
|
||||
db = {
|
||||
cast = castData.spellName,
|
||||
rank = nil,
|
||||
start = castData.startTime,
|
||||
casttime = castData.duration * 1000, -- Convert back to ms
|
||||
icon = castData.icon,
|
||||
channel = nil -- TODO: libdebuff should distinguish channel vs cast
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
-- Fallback to name-based lookup (CHAT_MSG castbars)
|
||||
-- Skip when GUID is available to avoid same-name mob bleed
|
||||
if not db and not guid and libcast.db[unitName] then
|
||||
db = libcast.db[unitName]
|
||||
end
|
||||
|
||||
-- Fallback to libcast.db for non-player units
|
||||
local cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
|
||||
if db and db.cast and db.start + db.casttime / 1000 > GetTime() then
|
||||
if db.channel then return end
|
||||
cast = db.cast
|
||||
nameSubtext = db.rank or ""
|
||||
text = ""
|
||||
texture = db.icon
|
||||
startTime = db.start * 1000
|
||||
endTime = startTime + db.casttime
|
||||
isTradeSkill = nil
|
||||
elseif db then
|
||||
db.cast = nil
|
||||
db.rank = nil
|
||||
db.start = nil
|
||||
db.casttime = nil
|
||||
db.icon = nil
|
||||
db.channel = nil
|
||||
end
|
||||
|
||||
return cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
end
|
||||
|
||||
function libcast:AddAction(mob, spell, channel)
|
||||
if not mob or not spell then return nil end
|
||||
|
||||
if L["spells"][spell] ~= nil then
|
||||
local casttime = L["spells"][spell].t
|
||||
local icon = L["spells"][spell].icon and string.format("%s%s", "Interface\\Icons\\", L["spells"][spell].icon) or nil
|
||||
|
||||
-- add cast action to the database
|
||||
if not self.db[mob] then self.db[mob] = {} end
|
||||
self.db[mob].cast = spell
|
||||
self.db[mob].rank = nil
|
||||
self.db[mob].start = GetTime()
|
||||
self.db[mob].casttime = casttime
|
||||
self.db[mob].icon = icon
|
||||
self.db[mob].channel = channel
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
function libcast:RemoveAction(mob, spell)
|
||||
if self.db[mob] and ( L["interrupts"][spell] ~= nil or spell == "INTERRUPT" ) then
|
||||
|
||||
-- remove cast action to the database
|
||||
self.db[mob].cast = nil
|
||||
self.db[mob].rank = nil
|
||||
self.db[mob].start = nil
|
||||
self.db[mob].casttime = nil
|
||||
self.db[mob].icon = nil
|
||||
self.db[mob].channel = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- main data
|
||||
libcast.db = { [player] = {} }
|
||||
|
||||
-- environmental casts
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PARTY_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PARTY_BUFF")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE")
|
||||
libcast:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF")
|
||||
|
||||
-- player spells
|
||||
libcast:RegisterEvent("SPELLCAST_START")
|
||||
libcast:RegisterEvent("SPELLCAST_STOP")
|
||||
libcast:RegisterEvent("SPELLCAST_FAILED")
|
||||
libcast:RegisterEvent("SPELLCAST_INTERRUPTED")
|
||||
libcast:RegisterEvent("SPELLCAST_DELAYED")
|
||||
libcast:RegisterEvent("SPELLCAST_CHANNEL_START")
|
||||
libcast:RegisterEvent("SPELLCAST_CHANNEL_STOP")
|
||||
libcast:RegisterEvent("SPELLCAST_CHANNEL_UPDATE")
|
||||
|
||||
local mob, spell, icon, _
|
||||
local lastSpellId = nil -- spellId cached from SPELL_START_SELF (Nampower)
|
||||
|
||||
libcast:SetScript("OnEvent", function()
|
||||
-- Fill database with player casts
|
||||
if event == "SPELLCAST_START" then
|
||||
-- Get icon via spellId cached from SPELL_START_SELF
|
||||
icon = lastSpellId and C_Spell.GetSpellTexture(lastSpellId) or nil
|
||||
-- fallback to L["spells"] / lastcasttex if no icon resolved
|
||||
if not icon then
|
||||
icon = L["spells"][arg1] and L["spells"][arg1].icon and string.format("%s%s", "Interface\\Icons\\", L["spells"][arg1].icon) or lastcasttex
|
||||
end
|
||||
lastSpellId = nil
|
||||
|
||||
this.db[player].cast = arg1
|
||||
this.db[player].rank = lastrank
|
||||
this.db[player].start = GetTime()
|
||||
this.db[player].casttime = arg2
|
||||
this.db[player].icon = icon
|
||||
this.db[player].channel = nil
|
||||
|
||||
if not L["spells"][arg1] or not L["spells"][arg1].icon or not L["spells"][arg1].t then
|
||||
L["spells"][arg1] = L["spells"][arg1] or { }
|
||||
L["spells"][arg1].icon = L["spells"][arg1].icon or icon
|
||||
L["spells"][arg1].t = L["spells"][arg1].t or arg2
|
||||
end
|
||||
lastcasttex, lastrank = nil, nil
|
||||
elseif event == "SPELLCAST_STOP" or event == "SPELLCAST_FAILED" or event == "SPELLCAST_INTERRUPTED" then
|
||||
lastSpellId = nil
|
||||
if this.db[player] and not this.db[player].channel then
|
||||
-- remove cast action to the database
|
||||
this.db[player].cast = nil
|
||||
this.db[player].rank = nil
|
||||
this.db[player].rank = nil
|
||||
this.db[player].start = nil
|
||||
this.db[player].casttime = nil
|
||||
this.db[player].icon = nil
|
||||
this.db[player].channel = nil
|
||||
else
|
||||
lastcasttex, lastrank = nil, nil
|
||||
end
|
||||
elseif event == "SPELLCAST_DELAYED" then
|
||||
if this.db[player].cast then
|
||||
-- Pushback: increase casttime instead of shifting start
|
||||
-- arg1 is the delay amount in milliseconds
|
||||
this.db[player].casttime = this.db[player].casttime + arg1
|
||||
end
|
||||
elseif event == "SPELLCAST_CHANNEL_START" then
|
||||
-- add cast action to the database
|
||||
this.db[player].cast = arg2
|
||||
this.db[player].rank = lastrank
|
||||
this.db[player].start = GetTime()
|
||||
this.db[player].casttime = arg1
|
||||
this.db[player].icon = L["spells"][arg2] and L["spells"][arg2].icon and string.format("%s%s", "Interface\\Icons\\", L["spells"][arg2].icon) or lastcasttex
|
||||
this.db[player].channel = true
|
||||
|
||||
lastcasttex, lastrank = nil, nil
|
||||
elseif event == "SPELLCAST_CHANNEL_STOP" then
|
||||
if this.db[player] and this.db[player].channel then
|
||||
-- remove cast action to the database
|
||||
this.db[player].cast = nil
|
||||
this.db[player].rank = nil
|
||||
this.db[player].start = nil
|
||||
this.db[player].casttime = nil
|
||||
this.db[player].icon = nil
|
||||
this.db[player].channel = nil
|
||||
end
|
||||
elseif event == "SPELLCAST_CHANNEL_UPDATE" then
|
||||
if this.db[player].cast then
|
||||
this.db[player].start = -this.db[player].casttime/1000 + GetTime() + arg1/1000
|
||||
end
|
||||
-- Fill database with environmental casts
|
||||
elseif arg1 then
|
||||
-- (.+) begins to cast (.+).
|
||||
mob, spell = cmatch(arg1, SPELLCASTOTHERSTART)
|
||||
if libcast:AddAction(mob, spell) then return end
|
||||
|
||||
-- (.+) begins to perform (.+).
|
||||
mob, spell = cmatch(arg1, SPELLPERFORMOTHERSTART)
|
||||
if libcast:AddAction(mob, spell) then return end
|
||||
|
||||
-- (.+) gains (.+).
|
||||
mob, spell = cmatch(arg1, AURAADDEDOTHERHELPFUL)
|
||||
if libcast:RemoveAction(mob, spell) then return end
|
||||
|
||||
-- (.+) is afflicted by (.+).
|
||||
mob, spell = cmatch(arg1, AURAADDEDOTHERHARMFUL)
|
||||
if libcast:RemoveAction(mob, spell) then return end
|
||||
|
||||
-- Your (.+) hits (.+) for (%d+).
|
||||
spell, mob = cmatch(arg1, SPELLLOGSELFOTHER)
|
||||
if libcast:RemoveAction(mob, spell) then return end
|
||||
|
||||
-- Your (.+) crits (.+) for (%d+).
|
||||
spell, mob = cmatch(arg1, SPELLLOGCRITSELFOTHER)
|
||||
if libcast:RemoveAction(mob, spell) then return end
|
||||
|
||||
-- (.+)'s (.+) %a hits (.+) for (%d+).
|
||||
_, spell, mob = cmatch(arg1, SPELLLOGOTHEROTHER)
|
||||
if libcast:RemoveAction(mob, spell) then return end
|
||||
|
||||
-- (.+)'s (.+) %a crits (.+) for (%d+).
|
||||
_, spell, mob = cmatch(arg1, SPELLLOGCRITOTHEROTHER)
|
||||
if libcast:RemoveAction(mob, spell) then return end
|
||||
|
||||
-- You interrupt (.+)'s (.+).
|
||||
mob, _ = cmatch(arg1, SPELLINTERRUPTSELFOTHER)
|
||||
if libcast:RemoveAction(mob, "INTERRUPT") then return end
|
||||
|
||||
-- (.+) interrupts (.+)'s (.+).
|
||||
_, mob, _ = cmatch(arg1, SPELLINTERRUPTOTHEROTHER)
|
||||
if libcast:RemoveAction(mob, "INTERRUPT") then return end
|
||||
end
|
||||
end)
|
||||
|
||||
--[[ Custom Casts
|
||||
Enable Castbars for spells that don't have a castbar by default
|
||||
(e.g Multi-Shot and Aimed Shot)
|
||||
]]--
|
||||
local aimedshot = L["customcast"]["AIMEDSHOT"]
|
||||
local multishot = L["customcast"]["MULTISHOT"]
|
||||
|
||||
-- Shot-timer haste lookup. Keyed by icon path because some of these buffs have
|
||||
-- spell-ID variants across server flavors but stable icons. Berserking is the
|
||||
-- variable Troll-racial calculation (more haste at lower HP); other entries are
|
||||
-- flat duration multipliers.
|
||||
local SHOT_HASTE = {
|
||||
["Interface\\Icons\\Racial_Troll_Berserk"] = "berserking",
|
||||
["Interface\\Icons\\Ability_Hunter_RunningShot"] = 1.4,
|
||||
["Interface\\Icons\\Ability_Warrior_InnerRage"] = 1.3,
|
||||
["Interface\\Icons\\Inv_Trinket_Naxxramas04"] = 1.2,
|
||||
}
|
||||
|
||||
function libcast.ApplyShotHaste(duration)
|
||||
for _, a in ipairs(C_UnitAuras.GetUnitAuras("player", "HELPFUL")) do
|
||||
local mult = SHOT_HASTE[a.icon]
|
||||
if mult == "berserking" then
|
||||
local hp = UnitHealth("player") / UnitHealthMax("player")
|
||||
local berserk = hp >= 0.40 and (1.30 - hp) / 3 or 0.3
|
||||
duration = duration / (1 + berserk)
|
||||
elseif mult then
|
||||
duration = duration / mult
|
||||
end
|
||||
end
|
||||
return duration
|
||||
end
|
||||
|
||||
libcast.customcast = {}
|
||||
libcast.customcast[strlower(aimedshot)] = function(begin, duration)
|
||||
if begin then
|
||||
local duration = libcast.ApplyShotHaste(duration or 3000)
|
||||
|
||||
local _,_, lag = GetNetStats()
|
||||
local start = GetTime() + lag/1000
|
||||
|
||||
-- add cast action to the database
|
||||
libcast.db[player].cast = aimedshot
|
||||
libcast.db[player].rank = lastrank
|
||||
libcast.db[player].start = start
|
||||
libcast.db[player].casttime = duration
|
||||
libcast.db[player].icon = "Interface\\Icons\\Inv_spear_07"
|
||||
libcast.db[player].channel = nil
|
||||
else
|
||||
-- remove cast action to the database
|
||||
libcast.db[player].cast = nil
|
||||
libcast.db[player].rank = nil
|
||||
libcast.db[player].start = nil
|
||||
libcast.db[player].casttime = nil
|
||||
libcast.db[player].icon = nil
|
||||
libcast.db[player].channel = nil
|
||||
end
|
||||
end
|
||||
|
||||
libcast.customcast[strlower(multishot)] = function(begin, duration)
|
||||
if begin then
|
||||
local duration = libcast.ApplyShotHaste(duration or 500)
|
||||
|
||||
local _,_, lag = GetNetStats()
|
||||
local start = GetTime() + lag/1000
|
||||
|
||||
-- add cast action to the database
|
||||
libcast.db[player].cast = multishot
|
||||
libcast.db[player].rank = lastrank
|
||||
libcast.db[player].start = start
|
||||
libcast.db[player].casttime = duration
|
||||
libcast.db[player].icon = "Interface\\Icons\\Ability_upgrademoonglaive"
|
||||
libcast.db[player].channel = nil
|
||||
else
|
||||
-- remove cast action to the database
|
||||
libcast.db[player].cast = nil
|
||||
libcast.db[player].rank = nil
|
||||
libcast.db[player].start = nil
|
||||
libcast.db[player].casttime = nil
|
||||
libcast.db[player].icon = nil
|
||||
libcast.db[player].channel = nil
|
||||
end
|
||||
end
|
||||
|
||||
local function CastCustom(id, bookType, rawSpellName, rank, texture, castingTime)
|
||||
if not id or not rawSpellName then return end -- ignore if the spell is not found
|
||||
if not castingTime or castingTime == 0 then
|
||||
-- instant-cast: clear lastcasttex so next cast doesn't inherit this icon
|
||||
lastcasttex, lastrank = nil, nil
|
||||
return
|
||||
end
|
||||
|
||||
lastrank = rank
|
||||
lastcasttex = texture
|
||||
|
||||
local func = libcast.customcast[strlower(rawSpellName)]
|
||||
if not func then return end
|
||||
|
||||
if GetSpellCooldown(id, bookType) == 0 or pfGetCastInfo(player) then return end -- detect casting
|
||||
|
||||
func(true)
|
||||
end
|
||||
|
||||
hooksecurefunc("UseContainerItem", function(id, index)
|
||||
lastcasttex = GetContainerItemInfo(id, index)
|
||||
end)
|
||||
|
||||
hooksecurefunc("CastSpell", function(id, bookType)
|
||||
local cachedRawSpellName, cachedRank, cachedTexture, cachedCastingTime, _, _, cachedSpellId, cachedBookType = libspell.GetSpellInfo(id, bookType)
|
||||
|
||||
CastCustom(cachedSpellId, cachedBookType, cachedRawSpellName, cachedRank, cachedTexture, cachedCastingTime)
|
||||
end)
|
||||
|
||||
hooksecurefunc("CastSpellByName", function(spellCasted, target)
|
||||
local cachedRawSpellName, cachedRank, cachedTexture, cachedCastingTime, _, _, cachedSpellId, cachedBookType = libspell.GetSpellInfo(spellCasted)
|
||||
|
||||
CastCustom(cachedSpellId, cachedBookType, cachedRawSpellName, cachedRank, cachedTexture, cachedCastingTime)
|
||||
end)
|
||||
|
||||
hooksecurefunc("UseAction", function(slot, target, button)
|
||||
if not IsCurrentAction(slot) then return end
|
||||
|
||||
-- Resolve action slot → spellID (handles both spell and macro actions),
|
||||
-- then resolve to spellbook slot for libspell. GetMacroSpell returns the
|
||||
-- highest rank the player actually knows, so FindSpellBookSlotByID's
|
||||
-- "spell must be in spellbook" requirement is satisfied.
|
||||
local kind, id = GetActionInfo(slot)
|
||||
local spellID
|
||||
if kind == "spell" then
|
||||
spellID = id
|
||||
elseif kind == "macro" then
|
||||
local _, _, sid = GetMacroSpell(id)
|
||||
spellID = sid
|
||||
end
|
||||
if not spellID then return end
|
||||
|
||||
local sbSlot = FindSpellBookSlotByID(spellID)
|
||||
if not sbSlot then return end
|
||||
|
||||
local cachedRawSpellName, cachedRank, cachedTexture, cachedCastingTime, _, _, cachedSpellId, cachedBookType = libspell.GetSpellInfo(sbSlot, BOOKTYPE_SPELL)
|
||||
|
||||
CastCustom(cachedSpellId, cachedBookType, cachedRawSpellName, cachedRank, cachedTexture, cachedCastingTime)
|
||||
end)
|
||||
|
||||
-- Cache spellId from SPELL_START_SELF so SPELLCAST_START can use it for icon lookup
|
||||
pfUI.libdebuff_spell_start_self_hooks = pfUI.libdebuff_spell_start_self_hooks or {}
|
||||
pfUI.libdebuff_spell_start_self_hooks["libcast_icon"] = function(spellId)
|
||||
lastSpellId = spellId
|
||||
end
|
||||
|
||||
-- add libcast to pfUI API
|
||||
pfUI.api.libcast = libcast
|
||||
+60
-2071
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -10,8 +10,8 @@ local libhealth = CreateFrame("Frame")
|
||||
libhealth.enabled = true
|
||||
libhealth.reqhit = 4
|
||||
libhealth.reqdmg = 5
|
||||
libhealth:RegisterEvent("UNIT_HEALTH")
|
||||
libhealth:RegisterEvent("UNIT_COMBAT")
|
||||
libhealth:RegisterUnitEvent("UNIT_HEALTH", "target")
|
||||
libhealth:RegisterUnitEvent("UNIT_COMBAT", "target")
|
||||
libhealth:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
libhealth:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
libhealth:SetScript("OnEvent", function()
|
||||
|
||||
+245
-459
File diff suppressed because it is too large
Load Diff
+14
-164
@@ -2,178 +2,28 @@
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
--[[ librange ]]--
|
||||
-- A pfUI library that detects and caches distance to units.
|
||||
-- A thin wrapper over ClassicAPI's UnitInRange: a fixed 40y healing-range
|
||||
-- check computed C-side from unit positions, valid for any unit. There is
|
||||
-- no cache or scan loop -- the check is cheap enough to run per query,
|
||||
-- which also sidesteps the staleness a cached scan hit on zone changes and
|
||||
-- roster re-indexing.
|
||||
--
|
||||
-- librange:UnitInSpellRange(unit)
|
||||
-- Returns `1` if the unit is within range, `nil` otherwise.
|
||||
--
|
||||
-- Requires SuperWoW's UnitPosition for the friendly scan path. Target
|
||||
-- range still works via IsActionInRange (vanilla-native) for any class
|
||||
-- with a known 40y healing spell on the action bar.
|
||||
|
||||
if pfUI.api.librange then return end
|
||||
|
||||
local _, class = UnitClass("player")
|
||||
local librange = CreateFrame("Frame", "pfRangecheck", UIParent)
|
||||
|
||||
-- 40y spells per class. Only consulted to find an action-bar slot for the
|
||||
-- IsActionInRange target-range path; the party/raid scan uses UnitPosition.
|
||||
local spells = {
|
||||
["PALADIN"] = {
|
||||
"Interface\\Icons\\Spell_Holy_FlashHeal",
|
||||
"Interface\\Icons\\Spell_Holy_HolyBolt",
|
||||
},
|
||||
["PRIEST"] = {
|
||||
"Interface\\Icons\\Spell_Holy_FlashHeal",
|
||||
"Interface\\Icons\\Spell_Holy_LesserHeal",
|
||||
"Interface\\Icons\\Spell_Holy_Heal",
|
||||
"Interface\\Icons\\Spell_Holy_GreaterHeal",
|
||||
"Interface\\Icons\\Spell_Holy_Renew",
|
||||
},
|
||||
["DRUID"] = {
|
||||
"Interface\\Icons\\Spell_Nature_HealingTouch",
|
||||
"Interface\\Icons\\Spell_Nature_ResistNature",
|
||||
"Interface\\Icons\\Spell_Nature_Rejuvenation",
|
||||
},
|
||||
["SHAMAN"] = {
|
||||
"Interface\\Icons\\Spell_Nature_MagicImmunity",
|
||||
"Interface\\Icons\\Spell_Nature_HealingWaveLesser",
|
||||
"Interface\\Icons\\Spell_Nature_HealingWaveGreater",
|
||||
},
|
||||
}
|
||||
|
||||
-- friendly units the scan loop iterates
|
||||
local units = {}
|
||||
table.insert(units, "pet")
|
||||
for i=1,4 do table.insert(units, "party" .. i) end
|
||||
for i=1,4 do table.insert(units, "partypet" .. i) end
|
||||
for i=1,40 do table.insert(units, "raid" .. i) end
|
||||
for i=1,40 do table.insert(units, "raidpet" .. i) end
|
||||
local numunits = table.getn(units)
|
||||
|
||||
local unitcache = {}
|
||||
local unitdata = {}
|
||||
local librange_isLoggingOut = false
|
||||
librange.id = 1
|
||||
|
||||
librange:Hide()
|
||||
librange:RegisterEvent("ACTIONBAR_SLOT_CHANGED")
|
||||
librange:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
librange:RegisterEvent("PLAYER_LOGOUT")
|
||||
librange:RegisterEvent("PLAYER_LEAVING_WORLD")
|
||||
librange:SetScript("OnEvent", function()
|
||||
if event == "PLAYER_LOGOUT" or event == "PLAYER_LEAVING_WORLD" then
|
||||
librange_isLoggingOut = true
|
||||
this:SetScript("OnUpdate", nil)
|
||||
this:Hide()
|
||||
return
|
||||
end
|
||||
|
||||
if pfUI_config.unitframes.rangecheck == "0" then
|
||||
this:Hide()
|
||||
return
|
||||
end
|
||||
|
||||
this.interval = tonumber(C.unitframes.rangechecki)/numunits
|
||||
|
||||
if event == "ACTIONBAR_SLOT_CHANGED" or event == "PLAYER_ENTERING_WORLD" then
|
||||
librange.slot = this:GetRangeSlot()
|
||||
if UnitPosition then this:Show() end
|
||||
end
|
||||
end)
|
||||
|
||||
librange:SetScript("OnUpdate", function()
|
||||
if librange_isLoggingOut then return end
|
||||
|
||||
if (this.tick or 1) > GetTime() then return end
|
||||
this.tick = GetTime() + this.interval
|
||||
|
||||
while not this:NeedRangeScan(units[this.id]) and this.id <= numunits do
|
||||
this.id = this.id + 1
|
||||
end
|
||||
|
||||
if this.id <= numunits then
|
||||
local unit = units[this.id]
|
||||
if not UnitIsUnit("target", unit) then
|
||||
local x1, y1, z1 = UnitPosition("player")
|
||||
local x2, y2, z2 = UnitPosition(unit)
|
||||
if x1 and x2 then
|
||||
local distance = ((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2)^.5
|
||||
unitdata[unit] = distance < 45 and 1 or 0
|
||||
end
|
||||
end
|
||||
this.id = this.id + 1
|
||||
else
|
||||
this.id = 1
|
||||
end
|
||||
end)
|
||||
|
||||
function librange:NeedRangeScan(unit)
|
||||
if not UnitExists(unit) then return nil end
|
||||
if not UnitIsVisible(unit) then return nil end
|
||||
if CheckInteractDistance(unit, 4) then return nil end
|
||||
return true
|
||||
end
|
||||
|
||||
function librange:GetRealUnit(unit)
|
||||
if unitdata[unit] then return unit end
|
||||
|
||||
if unitcache[unit] and UnitIsUnit(unitcache[unit], unit) then
|
||||
return unitcache[unit]
|
||||
end
|
||||
|
||||
for id, realunit in pairs(units) do
|
||||
if UnitIsUnit(realunit, unit) then
|
||||
unitcache[unit] = realunit
|
||||
return realunit
|
||||
end
|
||||
end
|
||||
|
||||
return unit
|
||||
end
|
||||
|
||||
function librange:GetRangeSlot()
|
||||
if not spells[class] then return nil end
|
||||
for i=1,120 do
|
||||
-- Resolve the slot to a spellID for both spell and macro actions; the old
|
||||
-- `not GetActionText` macro-filter missed macros that cast a 40y heal but
|
||||
-- displayed a non-spell icon. C_Spell.GetSpellTexture(spellID) gives the
|
||||
-- spell's *intrinsic* icon, which is what we match against.
|
||||
local kind, id = GetActionInfo(i)
|
||||
local spellID
|
||||
if kind == "spell" then
|
||||
spellID = id
|
||||
elseif kind == "macro" then
|
||||
local _, _, sid = GetMacroSpell(id)
|
||||
spellID = sid
|
||||
end
|
||||
if spellID then
|
||||
local texture = C_Spell.GetSpellTexture(spellID)
|
||||
if texture then
|
||||
for _, check in pairs(spells[class]) do
|
||||
if check == texture then return i end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
local librange = {}
|
||||
|
||||
function librange:UnitInSpellRange(unit)
|
||||
if UnitIsUnit("target", unit) then
|
||||
if not librange.slot then return nil end
|
||||
return IsActionInRange(librange.slot) == 1 and 1 or nil
|
||||
end
|
||||
|
||||
local unit = librange:GetRealUnit(unit)
|
||||
|
||||
if unitdata[unit] and unitdata[unit] == 1 then
|
||||
return 1
|
||||
elseif not unitdata[unit] then
|
||||
return 1
|
||||
else
|
||||
return nil
|
||||
end
|
||||
-- _G-qualified: bare `UnitInRange` resolves to pfUI.api.UnitInRange inside
|
||||
-- the pfUI environment (which calls us), so this must reach ClassicAPI's
|
||||
-- global directly or it recurses.
|
||||
local inRange, checked = _G.UnitInRange(unit)
|
||||
-- position miss (e.g. a unit outside the client's sync range): we can't
|
||||
-- tell, so default to in-range -- matches the old cache's nil behavior.
|
||||
if not checked then return 1 end
|
||||
return inRange and 1 or nil
|
||||
end
|
||||
|
||||
-- add librange to pfUI API
|
||||
|
||||
+9
-6
@@ -83,12 +83,13 @@ end
|
||||
-- [number] Casting time of the spell in milliseconds
|
||||
-- [number] Minimum range from the target required to cast the spell
|
||||
-- [number] Maximum range from the target at which you can cast the spell
|
||||
-- [number] The numeric spell-id of the spell
|
||||
-- [number] Spell's index in the book
|
||||
-- [number] The type of the spellbook that the spell is in
|
||||
-- [number] The numeric spell-id of the spell
|
||||
local spellinfo = {}
|
||||
function libspell.GetSpellInfo(index, bookType)
|
||||
local cache = spellinfo[index]
|
||||
if cache then return cache[1], cache[2], cache[3], cache[4], cache[5], cache[6], cache[7], cache[8] end
|
||||
if cache then return unpack(cache) end
|
||||
|
||||
local slot
|
||||
if type(index) == "string" then
|
||||
@@ -108,17 +109,19 @@ function libspell.GetSpellInfo(index, bookType)
|
||||
-- ClassicAPI's GetSpellInfo returns: name, rank, icon, cost, isFunnel, powerType,
|
||||
-- castTime(ms), minRange, maxRange, spellID. Keep libspell's historical positional
|
||||
-- shape (castingTime at 4, ranges at 5/6, slot+bookType at 7/8).
|
||||
local name, rank, icon, _, _, _, castingTime, minRange, maxRange = GetSpellInfo(slot, bookType)
|
||||
local name, rank, icon, _, _, _, castingTime, minRange, maxRange, spellId = GetSpellInfo(slot, bookType)
|
||||
|
||||
spellinfo[index] = { name, rank, icon, castingTime, minRange, maxRange, slot, bookType }
|
||||
return name, rank, icon, castingTime, minRange, maxRange, slot, bookType
|
||||
spellinfo[index] = SafePack(name, rank, icon, castingTime, minRange, maxRange, slot, bookType, spellId)
|
||||
return name, rank, icon, castingTime, minRange, maxRange, slot, bookType, spellId
|
||||
end
|
||||
|
||||
-- Reset all spell caches whenever new spells are learned/unlearned
|
||||
local resetcache = CreateFrame("Frame")
|
||||
resetcache:RegisterEvent("LEARNED_SPELL_IN_TAB")
|
||||
resetcache:SetScript("OnEvent", function()
|
||||
spellmaxrank, spellindex, spellinfo = {}, {}, {}
|
||||
table.wipe(spellmaxrank)
|
||||
table.wipe(spellindex)
|
||||
table.wipe(spellinfo)
|
||||
end)
|
||||
|
||||
-- add libspell to pfUI API
|
||||
|
||||
@@ -35,7 +35,7 @@ libthrottle.defaults = {
|
||||
nameplates_target = "custom",
|
||||
nameplates_castbar = "custom",
|
||||
nameplates_mass = "custom",
|
||||
tooltip_cursor = "custom",
|
||||
tooltip_cursor = "fastest",
|
||||
chat_tab = "custom",
|
||||
swingtimer = "custom",
|
||||
}
|
||||
@@ -160,7 +160,7 @@ libthrottle:SetScript("OnEvent", function()
|
||||
-- Set defaults for custom fields if missing
|
||||
if not _G.pfUI_throttle.nameplates_target_custom then _G.pfUI_throttle.nameplates_target_custom = "50" end
|
||||
if not _G.pfUI_throttle.nameplates_custom then _G.pfUI_throttle.nameplates_custom = "10" end
|
||||
if not _G.pfUI_throttle.nameplates_castbar_custom then _G.pfUI_throttle.nameplates_castbar_custom = "50" end
|
||||
if not _G.pfUI_throttle.nameplates_castbar_custom then _G.pfUI_throttle.nameplates_castbar_custom = "100" end
|
||||
if not _G.pfUI_throttle.nameplates_mass_custom then _G.pfUI_throttle.nameplates_mass_custom = "7" end
|
||||
if not _G.pfUI_throttle.tooltip_cursor_custom then _G.pfUI_throttle.tooltip_cursor_custom = "10" end
|
||||
if not _G.pfUI_throttle.chat_tab_custom then _G.pfUI_throttle.chat_tab_custom = "10" end
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
-- load pfUI environment
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
--[[ libtooltip ]]--
|
||||
-- A pfUI library that provides additional GameTooltip information.
|
||||
--
|
||||
-- libtooltip:GetItemID()
|
||||
-- returns the itemID of the current GameTooltip
|
||||
-- `nil` when no item is displayed
|
||||
--
|
||||
-- libtooltip:GetItemLink()
|
||||
-- returns the itemLink of the current GameTooltip
|
||||
-- `nil` when no item is displayed
|
||||
--
|
||||
-- libtooltip:GetItemCount()
|
||||
-- returns the item count (bags) of the current GameTooltip
|
||||
-- `nil` when no item is displayed
|
||||
|
||||
-- return instantly when another libtooltip is already active
|
||||
if pfUI.api.libtooltip then return end
|
||||
|
||||
local libtooltip = CreateFrame("Frame" , "pfLibTooltip", GameTooltip)
|
||||
|
||||
libtooltip:SetScript("OnShow", function()
|
||||
if this:GetParent():HasItem() then
|
||||
libtooltip.itemName, libtooltip.itemLink, libtooltip.itemID = this:GetParent():GetItem()
|
||||
end
|
||||
end)
|
||||
|
||||
libtooltip:SetScript("OnHide", function()
|
||||
this.itemID = nil
|
||||
this.itemLink = nil
|
||||
this.itemCount = nil
|
||||
this.itemName = nil
|
||||
end)
|
||||
|
||||
-- core functions
|
||||
libtooltip.GetItemID = function(self)
|
||||
if not libtooltip.itemLink then return end
|
||||
if not libtooltip.itemID then
|
||||
libtooltip.itemID = C_Item.GetItemInfoInstant(libtooltip.itemLink)
|
||||
end
|
||||
|
||||
return libtooltip.itemID
|
||||
end
|
||||
|
||||
libtooltip.GetItemLink = function(self)
|
||||
return libtooltip.itemLink
|
||||
end
|
||||
|
||||
libtooltip.GetItemCount = function(self)
|
||||
return libtooltip.itemCount
|
||||
end
|
||||
|
||||
pfUI.api.libtooltip = libtooltip
|
||||
|
||||
hooksecurefunc(GameTooltip, "SetBagItem", function(self, container, slot)
|
||||
_, libtooltip.itemCount = GetContainerItemInfo(container, slot)
|
||||
end)
|
||||
@@ -1,274 +0,0 @@
|
||||
-- load pfUI environment
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
--[[ libtotem ]]--
|
||||
-- A pfUI library that tries to emulate the TotemAPI that was introduced in Patch 2.4.
|
||||
-- It detects and saves all current totems of the player and returns information based
|
||||
-- on the totem slot ID. The function GetTotemInfo is supposed to work as it would
|
||||
-- on later expansions.
|
||||
--
|
||||
-- GetTotemInfo(id)
|
||||
-- Returns totem informations on the givent totem slot
|
||||
-- active, name, start, duration, icon
|
||||
|
||||
-- return instantly when another libtotem is already active
|
||||
if pfUI.api.libtotem then return end
|
||||
|
||||
MAX_TOTEMS = MAX_TOTEMS or 4
|
||||
FIRE_TOTEM_SLOT = FIRE_TOTEM_SLOT or 1
|
||||
EARTH_TOTEM_SLOT = EARTH_TOTEM_SLOT or 2
|
||||
WATER_TOTEM_SLOT = WATER_TOTEM_SLOT or 3
|
||||
AIR_TOTEM_SLOT = AIR_TOTEM_SLOT or 4
|
||||
|
||||
local _, class = UnitClass("player")
|
||||
|
||||
local libtotem
|
||||
local active = { [1] = {}, [2] = {}, [3] = {}, [4] = {} }
|
||||
|
||||
-- SpellID -> { slot, duration } mapping
|
||||
-- rank-specific durations are handled via spellId directly
|
||||
local spellids = {
|
||||
-- FIRE (slot 1)
|
||||
[1535] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R1
|
||||
[8498] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R2
|
||||
[8499] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R3
|
||||
[11314] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R4
|
||||
[11315] = { slot = FIRE_TOTEM_SLOT, duration = 5 }, -- Fire Nova Totem R5
|
||||
[8227] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Flametongue Totem R1
|
||||
[8249] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Flametongue Totem R2
|
||||
[10526] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Flametongue Totem R3
|
||||
[16387] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Flametongue Totem R4
|
||||
[8184] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Frost Resistance Totem R1
|
||||
[10478] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Frost Resistance Totem R2
|
||||
[10479] = { slot = FIRE_TOTEM_SLOT, duration = 120 }, -- Frost Resistance Totem R3
|
||||
[8190] = { slot = FIRE_TOTEM_SLOT, duration = 20 }, -- Magma Totem R1
|
||||
[10585] = { slot = FIRE_TOTEM_SLOT, duration = 20 }, -- Magma Totem R2
|
||||
[10586] = { slot = FIRE_TOTEM_SLOT, duration = 20 }, -- Magma Totem R3
|
||||
[10587] = { slot = FIRE_TOTEM_SLOT, duration = 20 }, -- Magma Totem R4
|
||||
[3599] = { slot = FIRE_TOTEM_SLOT, duration = 30 }, -- Searing Totem R1
|
||||
[6363] = { slot = FIRE_TOTEM_SLOT, duration = 35 }, -- Searing Totem R2
|
||||
[6364] = { slot = FIRE_TOTEM_SLOT, duration = 40 }, -- Searing Totem R3
|
||||
[6365] = { slot = FIRE_TOTEM_SLOT, duration = 45 }, -- Searing Totem R4
|
||||
[10437] = { slot = FIRE_TOTEM_SLOT, duration = 50 }, -- Searing Totem R5
|
||||
[10438] = { slot = FIRE_TOTEM_SLOT, duration = 55 }, -- Searing Totem R6
|
||||
|
||||
-- EARTH (slot 2)
|
||||
[2484] = { slot = EARTH_TOTEM_SLOT, duration = 45 }, -- Earthbind Totem
|
||||
[5730] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R1
|
||||
[6390] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R2
|
||||
[6391] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R3
|
||||
[6392] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R4
|
||||
[10427] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R5
|
||||
[10428] = { slot = EARTH_TOTEM_SLOT, duration = 15 }, -- Stoneclaw Totem R6
|
||||
[8071] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R1
|
||||
[8154] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R2
|
||||
[8155] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R3
|
||||
[10406] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R4
|
||||
[10407] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R5
|
||||
[10408] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Stoneskin Totem R6
|
||||
[8075] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R1
|
||||
[8160] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R2
|
||||
[8161] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R3
|
||||
[10442] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R4
|
||||
[25361] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Strength of Earth Totem R5
|
||||
[8143] = { slot = EARTH_TOTEM_SLOT, duration = 120 }, -- Tremor Totem
|
||||
|
||||
-- WATER (slot 3)
|
||||
[8170] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Disease Cleansing Totem
|
||||
[8185] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Fire Resistance Totem R1
|
||||
[10537] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Fire Resistance Totem R2
|
||||
[10538] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Fire Resistance Totem R3
|
||||
[5394] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R1
|
||||
[6375] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R2
|
||||
[6377] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R3
|
||||
[10462] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R4
|
||||
[10463] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Healing Stream Totem R5
|
||||
[5675] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Mana Spring Totem R1
|
||||
[10495] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Mana Spring Totem R2
|
||||
[10496] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Mana Spring Totem R3
|
||||
[10497] = { slot = WATER_TOTEM_SLOT, duration = 60 }, -- Mana Spring Totem R4
|
||||
[16190] = { slot = WATER_TOTEM_SLOT, duration = 12 }, -- Mana Tide Totem
|
||||
[8166] = { slot = WATER_TOTEM_SLOT, duration = 120 }, -- Poison Cleansing Totem
|
||||
|
||||
-- AIR (slot 4)
|
||||
[8835] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Grace of Air Totem R1
|
||||
[10627] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Grace of Air Totem R2
|
||||
[8177] = { slot = AIR_TOTEM_SLOT, duration = 45 }, -- Grounding Totem
|
||||
[10595] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Nature Resistance Totem R1
|
||||
[10600] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Nature Resistance Totem R2
|
||||
[10601] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Nature Resistance Totem R3
|
||||
[25359] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Tranquil Air Totem
|
||||
[8512] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windfury Totem R1
|
||||
[10613] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windfury Totem R2
|
||||
[10614] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windfury Totem R3
|
||||
[15107] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windwall Totem R1
|
||||
[15421] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windwall Totem R2
|
||||
[15422] = { slot = AIR_TOTEM_SLOT, duration = 120 }, -- Windwall Totem R3
|
||||
}
|
||||
|
||||
-- icon-based fallback table (used by CastSpell/UseAction hooks that don't have spellId)
|
||||
local totems = {
|
||||
[FIRE_TOTEM_SLOT] = {
|
||||
["Spell_Fire_SealOfFire"] = {[-1] = 5},
|
||||
["Spell_Nature_GuardianWard"] = {[-1] = 120},
|
||||
["Spell_FrostResistanceTotem_01"] = {[-1] = 120},
|
||||
["Spell_Fire_SelfDestruct"] = {[-1] = 20},
|
||||
["Spell_Fire_SearingTotem"] = {[-1] = 55,[1] = 30,[2] = 35,[3] = 40,[4] = 45,[5] = 50,[6] = 55},
|
||||
},
|
||||
[EARTH_TOTEM_SLOT] = {
|
||||
["Spell_Nature_StrengthOfEarthTotem02"] = {[-1] = 45},
|
||||
["Spell_Nature_StoneClawTotem"] = {[-1] = 15},
|
||||
["Spell_Nature_StoneSkinTotem"] = {[-1] = 120},
|
||||
["Spell_Nature_EarthBindTotem"] = {[-1] = 120},
|
||||
["Spell_Nature_TremorTotem"] = {[-1] = 120},
|
||||
},
|
||||
[WATER_TOTEM_SLOT] = {
|
||||
["Spell_Nature_DiseaseCleansingTotem"] = {[-1] = 120},
|
||||
["Spell_FireResistanceTotem_01"] = {[-1] = 120},
|
||||
["INV_Spear_04"] = {[-1] = 60},
|
||||
["Spell_Nature_ManaRegenTotem"] = {[-1] = 60},
|
||||
["Spell_Frost_SummonWaterElemental"] = {[-1] = 12},
|
||||
["Spell_Nature_PoisonCleansingTotem"] = {[-1] = 120},
|
||||
},
|
||||
[AIR_TOTEM_SLOT] = {
|
||||
["Spell_Nature_InvisibilityTotem"] = {[-1] = 120},
|
||||
["Spell_Nature_GroundingTotem"] = {[-1] = 45},
|
||||
["Spell_Nature_NatureResistanceTotem"] = {[-1] = 120},
|
||||
["Spell_Nature_Brilliance"] = {[-1] = 120},
|
||||
["Spell_Nature_Windfury"] = {[-1] = 120},
|
||||
["Spell_Nature_EarthBind"] = {[-1] = 120},
|
||||
},
|
||||
}
|
||||
|
||||
GetTotemInfo = function(id)
|
||||
if not active[id] or not active[id].name then return end
|
||||
if active[id].start + active[id].duration - GetTime() < 0 then
|
||||
libtotem:Clean(id)
|
||||
return nil
|
||||
end
|
||||
return 1, active[id].name, active[id].start, active[id].duration, active[id].icon
|
||||
end
|
||||
|
||||
if class ~= "SHAMAN" then return end
|
||||
|
||||
libtotem = CreateFrame("Frame")
|
||||
libtotem:RegisterEvent("PLAYER_DEAD")
|
||||
libtotem:SetScript("OnEvent", function()
|
||||
if event == "PLAYER_DEAD" then
|
||||
for i = 1, 4 do libtotem:Clean(i) end
|
||||
end
|
||||
end)
|
||||
|
||||
libtotem.totems = totems
|
||||
|
||||
libtotem.Clean = function(self, slot)
|
||||
active[slot].name = nil
|
||||
active[slot].start = nil
|
||||
active[slot].duration = nil
|
||||
active[slot].icon = nil
|
||||
end
|
||||
|
||||
-- Direct SpellID commit (Nampower SPELL_GO_SELF, most accurate)
|
||||
libtotem.CommitBySpellId = function(spellId, icon)
|
||||
local data = spellids[spellId]
|
||||
if not data then return false end
|
||||
local slot = data.slot
|
||||
active[slot].name = active[slot].pending_name or active[slot].name
|
||||
active[slot].duration = data.duration
|
||||
active[slot].icon = icon or active[slot].pending_icon
|
||||
active[slot].start = GetTime()
|
||||
active[slot].pending_name = nil
|
||||
active[slot].pending_icon = nil
|
||||
return true
|
||||
end
|
||||
|
||||
-- Fallback: icon-based lookup (for CastSpell/UseAction without spellId)
|
||||
libtotem.CheckAddQueue = function(self, name, rank, icon, spellId)
|
||||
-- if we have a spellId, just store the name/icon as pending for SPELL_GO
|
||||
if spellId and spellids[spellId] then
|
||||
local slot = spellids[spellId].slot
|
||||
active[slot].pending_name = name
|
||||
active[slot].pending_icon = icon
|
||||
return true
|
||||
end
|
||||
|
||||
-- icon-based fallback
|
||||
for slot = 1, 4 do
|
||||
for texture, data in pairs(totems[slot]) do
|
||||
if string.find(icon, texture, 1) then
|
||||
if rank then
|
||||
_, _, rank = string.find(rank, "%s(%d+)")
|
||||
end
|
||||
local duration
|
||||
if rank and tonumber(rank) and data[tonumber(rank)] then
|
||||
duration = data[tonumber(rank)]
|
||||
else
|
||||
duration = data[-1]
|
||||
end
|
||||
active[slot].pending_name = name
|
||||
active[slot].pending_icon = icon
|
||||
active[slot].pending_duration = duration
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- assign library to global space
|
||||
pfUI.api.libtotem = libtotem
|
||||
|
||||
-- SPELL_GO_SELF from libdebuff: commit directly by SpellID, no queue needed
|
||||
pfUI.libdebuff_spell_go_hooks = pfUI.libdebuff_spell_go_hooks or {}
|
||||
pfUI.libdebuff_spell_go_hooks["libtotem"] = function(spellId)
|
||||
if not spellId then return end
|
||||
local data = spellids[spellId]
|
||||
if not data then return end
|
||||
local slot = data.slot
|
||||
-- use pending name/icon if available (set by CastSpellByName hook), else GetSpellInfo
|
||||
local name = active[slot].pending_name
|
||||
local icon = active[slot].pending_icon
|
||||
if not name and GetSpellInfo then
|
||||
name = GetSpellInfo(spellId)
|
||||
end
|
||||
active[slot].name = name
|
||||
active[slot].duration = data.duration
|
||||
active[slot].icon = icon
|
||||
active[slot].start = GetTime()
|
||||
active[slot].pending_name = nil
|
||||
active[slot].pending_icon = nil
|
||||
active[slot].pending_duration = nil
|
||||
end
|
||||
|
||||
-- Hook CastSpellByName to store pending name/icon per slot
|
||||
hooksecurefunc("CastSpellByName", function(effect, target)
|
||||
local name, rank, icon, _, _, _, spellId = libspell.GetSpellInfo(effect)
|
||||
if not name then return end
|
||||
libtotem:CheckAddQueue(name, rank, icon, spellId)
|
||||
end)
|
||||
|
||||
-- Hook CastSpell to store pending name/icon per slot
|
||||
hooksecurefunc("CastSpell", function(id, bookType)
|
||||
if not id or not bookType then return end
|
||||
if bookType ~= BOOKTYPE_SPELL and bookType ~= BOOKTYPE_PET then return end
|
||||
local name, rank, icon, _, _, _, spellId = libspell.GetSpellInfo(id, bookType)
|
||||
if not name then return end
|
||||
libtotem:CheckAddQueue(name, rank, icon, spellId)
|
||||
end)
|
||||
|
||||
-- Hook UseAction. GetActionInfo + GetMacroSpell give us the spellID
|
||||
-- directly for both spell-action and macro-action slots, so the
|
||||
-- tooltip-scan fallback (and the "no spellId available" caveat) goes away.
|
||||
hooksecurefunc("UseAction", function(slot, target, selfcast)
|
||||
if not IsCurrentAction(slot) then return end
|
||||
local kind, id = GetActionInfo(slot)
|
||||
local name, rank, spellID
|
||||
if kind == "spell" then
|
||||
spellID = id
|
||||
name, rank = GetSpellInfo(id)
|
||||
elseif kind == "macro" then
|
||||
name, rank, spellID = GetMacroSpell(id)
|
||||
end
|
||||
if not name then return end
|
||||
libtotem:CheckAddQueue(name, rank, GetActionTexture(slot), spellID)
|
||||
end)
|
||||
+32
-31
@@ -89,20 +89,19 @@ libunitscan:SetScript("OnEvent", function()
|
||||
|
||||
-- update own character details
|
||||
local name = UnitName("player")
|
||||
local _, class = UnitClass("player")
|
||||
local class = UnitClassBase("player")
|
||||
local level = UnitLevel("player")
|
||||
local guild = GetGuildInfo("player")
|
||||
AddData("players", name, class, level, nil, guild)
|
||||
RememberByUnit("player", name, class)
|
||||
|
||||
elseif event == "FRIENDLIST_UPDATE" then
|
||||
local name, class, level
|
||||
for i = 1, GetNumFriends() do
|
||||
name, level, class = GetFriendInfo(i)
|
||||
class = L["class"][class] or nil
|
||||
-- friendlist updates due to friend going off-line return level 0, let's not overwrite good older values
|
||||
level = level > 0 and level or nil
|
||||
AddData("players", name, class, level)
|
||||
local info = C_FriendList.GetFriendInfoByIndex(i)
|
||||
if info then
|
||||
local level = info.level > 0 and info.level or nil
|
||||
AddData("players", info.name, info.classFilename, level)
|
||||
end
|
||||
end
|
||||
|
||||
elseif event == "GUILD_ROSTER_UPDATE" then
|
||||
@@ -128,7 +127,7 @@ libunitscan:SetScript("OnEvent", function()
|
||||
local name, class, level, unit, _, guild
|
||||
for i = 1, GetNumPartyMembers() do
|
||||
unit = "party" .. i
|
||||
_, class = UnitClass(unit)
|
||||
class = UnitClassBase(unit)
|
||||
name = UnitName(unit)
|
||||
level = UnitLevel(unit)
|
||||
guild = GetGuildInfo(unit)
|
||||
@@ -137,11 +136,11 @@ libunitscan:SetScript("OnEvent", function()
|
||||
end
|
||||
|
||||
elseif event == "WHO_LIST_UPDATE" or event == "CHAT_MSG_SYSTEM" then
|
||||
local name, class, level, guild, _
|
||||
for i = 1, GetNumWhoResults() do
|
||||
name, guild, level, _, class, _ = GetWhoInfo(i)
|
||||
class = L["class"][class] or nil
|
||||
AddData("players", name, class, level, nil, guild)
|
||||
for i = 1, C_FriendList.GetNumWhoResults() do
|
||||
local info = C_FriendList.GetWhoInfo(i)
|
||||
if info then
|
||||
AddData("players", info.fullName, info.filename, info.level, nil, info.fullGuildName)
|
||||
end
|
||||
end
|
||||
|
||||
elseif event == "UPDATE_MOUSEOVER_UNIT" or event == "PLAYER_TARGET_CHANGED" or event == "NAME_PLATE_UNIT_ADDED" then
|
||||
@@ -149,24 +148,26 @@ libunitscan:SetScript("OnEvent", function()
|
||||
or event == "NAME_PLATE_UNIT_ADDED" and arg1
|
||||
or "mouseover"
|
||||
local name, class, level, elite, guild, _
|
||||
if UnitIsPlayer(scan) then
|
||||
_, class = UnitClass(scan)
|
||||
level = UnitLevel(scan)
|
||||
-- UnitLevel returns -1 for unknown levels, don't overwrite known values
|
||||
level = level > 0 and level or nil
|
||||
name = UnitName(scan)
|
||||
guild = GetGuildInfo(scan)
|
||||
AddData("players", name, class, level, nil, guild)
|
||||
RememberByUnit(scan, name, class)
|
||||
else
|
||||
_, class = UnitClass(scan)
|
||||
elite = UnitClassification(scan)
|
||||
level = UnitLevel(scan)
|
||||
-- UnitLevel returns -1 for unknown levels, don't overwrite known values
|
||||
level = level > 0 and level or nil
|
||||
name = UnitName(scan)
|
||||
guild = UnitSubName(scan)
|
||||
AddData("mobs", name, class, level, elite, guild)
|
||||
if UnitExists(scan) then
|
||||
if UnitIsPlayer(scan) then
|
||||
class = UnitClassBase(scan)
|
||||
level = UnitLevel(scan)
|
||||
-- UnitLevel returns -1 for unknown levels, don't overwrite known values
|
||||
level = level > 0 and level or nil
|
||||
name = UnitName(scan)
|
||||
guild = GetGuildInfo(scan)
|
||||
AddData("players", name, class, level, nil, guild)
|
||||
RememberByUnit(scan, name, class)
|
||||
else
|
||||
class = UnitClassBase(scan)
|
||||
elite = UnitClassification(scan)
|
||||
level = UnitLevel(scan)
|
||||
-- UnitLevel returns -1 for unknown levels, don't overwrite known values
|
||||
level = level > 0 and level or nil
|
||||
name = UnitName(scan)
|
||||
guild = UnitSubName(scan)
|
||||
AddData("mobs", name, class, level, elite, guild)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
+204
-230
@@ -1,5 +1,5 @@
|
||||
pfUI:RegisterModule("actionbar", function ()
|
||||
local _, class = UnitClass("player")
|
||||
local class = UnitClassBase("player")
|
||||
local _, cr, cg, cb = GetUnitColor('player')
|
||||
local er, eg, eb, ea = GetStringColor(pfUI_config.appearance.border.color)
|
||||
|
||||
@@ -81,6 +81,9 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
["ACTIONBAR_UPDATE_COOLDOWN"] = true,
|
||||
["ACTIONBAR_UPDATE_USABLE"] = true,
|
||||
["ACTIONBAR_UPDATE_STATE"] = true,
|
||||
-- fires on every ammo shot / consumable use, but only counts, equipped
|
||||
-- state, cooldowns and usability can change from it
|
||||
["UNIT_INVENTORY_CHANGED"] = true,
|
||||
}
|
||||
|
||||
-- events that are shared across all buttons
|
||||
@@ -97,8 +100,6 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
["TRADE_SKILL_CLOSE"] = true,
|
||||
["PLAYER_ENTER_COMBAT"] = true,
|
||||
["PLAYER_LEAVE_COMBAT"] = true,
|
||||
-- cooldown updates
|
||||
["UNIT_INVENTORY_CHANGED"] = true,
|
||||
-- auto repeat action
|
||||
["START_AUTOREPEAT_SPELL"] = true,
|
||||
["STOP_AUTOREPEAT_SPELL"] = true,
|
||||
@@ -168,8 +169,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
["zoomfade"] = function()
|
||||
if this.active == 0 then
|
||||
-- init animation
|
||||
this:SetWidth(this.parent:GetWidth())
|
||||
this:SetHeight(this.parent:GetHeight())
|
||||
this:SetSize(this.parent:GetSize())
|
||||
this:SetScale(this.parent:GetScale())
|
||||
this.tex:SetTexture(this.parent.icon:GetTexture())
|
||||
this.tex:SetVertexColor(this.parent.icon:GetVertexColor())
|
||||
@@ -191,8 +191,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
["shrinkreturn"] = function()
|
||||
if this.active == 0 then
|
||||
-- init animation
|
||||
this:SetWidth(this.parent:GetWidth())
|
||||
this:SetHeight(this.parent:GetHeight())
|
||||
this:SetSize(this.parent:GetSize())
|
||||
this:SetScale(this.parent:GetScale())
|
||||
this.tex:SetTexture(this.parent.icon:GetTexture())
|
||||
this.tex:SetVertexColor(this.parent.icon:GetVertexColor())
|
||||
@@ -218,8 +217,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
["elasticzoom"] = function()
|
||||
if this.active == 0 then
|
||||
-- init animation
|
||||
this:SetWidth(this.parent:GetWidth())
|
||||
this:SetHeight(this.parent:GetHeight())
|
||||
this:SetSize(this.parent:GetSize())
|
||||
this:SetScale(this.parent:GetScale())
|
||||
this.tex:SetTexture(this.parent.icon:GetTexture())
|
||||
this.tex:SetVertexColor(this.parent.icon:GetVertexColor())
|
||||
@@ -245,8 +243,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
["wobblezoom"] = function()
|
||||
if this.active == 0 then
|
||||
-- init animation
|
||||
this:SetWidth(this.parent:GetWidth())
|
||||
this:SetHeight(this.parent:GetHeight())
|
||||
this:SetSize(this.parent:GetSize())
|
||||
this:SetScale(this.parent:GetScale())
|
||||
this.tex:SetTexture(this.parent.icon:GetTexture())
|
||||
this.tex:SetVertexColor(this.parent.icon:GetVertexColor())
|
||||
@@ -321,7 +318,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
-- handle button highlight
|
||||
if keystate == "down" then
|
||||
self.highlight:Show()
|
||||
elseif not MouseIsOver(self) then
|
||||
elseif not MouseIsOverHitRect(self) then
|
||||
self.highlight:Hide()
|
||||
end
|
||||
end
|
||||
@@ -335,8 +332,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
local slfcast = C.bars.altself == "1" and IsAltKeyDown() and true or self.slfcast
|
||||
slfcast = C.bars.rightself == "1" and arg1 and arg1 == "RightButton" and true or slfcast
|
||||
self.slfcast = nil
|
||||
|
||||
if ( pfUI_config.bars.keydown == "1" and keystate == "down" and not drag_active ) or (pfUI_config.bars.keydown == "0" and keystate == "up" or drag_active ) or self.bar == 11 or mouse then
|
||||
if ( C.bars.keydown == "1" and keystate == "down" and not drag_active ) or (C.bars.keydown == "0" and keystate == "up" or drag_active ) or self.bar == 11 or mouse then
|
||||
if self.bar == 11 then
|
||||
CastShapeshiftForm(self.id)
|
||||
elseif grid == 1 then
|
||||
@@ -365,73 +361,8 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
end
|
||||
end
|
||||
|
||||
local function ButtonMacroScan(self)
|
||||
if self.bar > 10 then return end
|
||||
if not self.scanmacro then return end
|
||||
if pfUI.bars.skip_macro then return end
|
||||
|
||||
-- SuperCleveRoidMacros: for macros it manages, leave spellslot/booktype unset
|
||||
-- so the button's icon, cooldown, and tooltip flow through the hooked
|
||||
-- GetActionTexture / GetActionCooldown / GameTooltip:SetAction and follow the
|
||||
-- active conditional dynamically, instead of being frozen to the first
|
||||
-- statically-scanned spell.
|
||||
if CleveRoids and CleveRoids.IsManagedAction and CleveRoids.IsManagedAction(self.id) then
|
||||
self.spellslot, self.booktype = nil, nil
|
||||
return
|
||||
end
|
||||
|
||||
local kind, slot = GetActionInfo(self.id)
|
||||
self.spellslot, self.booktype = nil, nil
|
||||
if kind == 'macro' then
|
||||
local name, _, body = GetMacroInfo(slot)
|
||||
|
||||
if name and body then
|
||||
local match
|
||||
|
||||
for line in gfind(body, "[^%\n]+") do
|
||||
_, _, match = string.find(line, '^#showtooltip (.+)')
|
||||
|
||||
-- allow the user to disable the scan
|
||||
if match and strfind(match, "disable") then
|
||||
return
|
||||
end
|
||||
|
||||
if not match then
|
||||
-- add support to specify custom tooltips via:
|
||||
-- /run --showtooltip SPELLNAME
|
||||
_, _, match = string.find(line, '%-%-showtooltip (.+)')
|
||||
end
|
||||
|
||||
if not match then
|
||||
_, _, match = string.find(line, '^/cast (.+)')
|
||||
end
|
||||
|
||||
if not match then
|
||||
_, _, match = string.find(line, '^/pfcast (.+)')
|
||||
end
|
||||
|
||||
if not match then
|
||||
_, _, match = string.find(line, '^/pfmouse (.+)')
|
||||
end
|
||||
|
||||
if not match then
|
||||
_, _, match = string.find(line, 'CastSpellByName%(%"(.+)%"%)')
|
||||
end
|
||||
|
||||
if match then
|
||||
local _, _, spell, rank = string.find(match, '(.+)%((.+)%)')
|
||||
spell = spell or match
|
||||
self.spellslot, self.booktype = libspell.GetSpellIndex(spell, rank)
|
||||
|
||||
if self.spellslot and self.spellslot > 0 then return end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function ButtonEnter(self)
|
||||
local self = self or this
|
||||
self = self or this
|
||||
|
||||
-- indicate that dragging could get enabled
|
||||
drag_await = true
|
||||
@@ -449,8 +380,8 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
else
|
||||
GameTooltip:SetPetAction(self.id)
|
||||
end
|
||||
elseif self.spellslot and self.booktype then
|
||||
GameTooltip:SetSpell(self.spellslot, self.booktype)
|
||||
elseif self.spellID then
|
||||
GameTooltip:SetSpellByID(self.spellID)
|
||||
else
|
||||
GameTooltip:SetAction(self.id)
|
||||
end
|
||||
@@ -459,7 +390,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
end
|
||||
|
||||
local function ButtonLeave(self)
|
||||
local self = self or this
|
||||
self = self or this
|
||||
|
||||
-- no longer wait for a drag event
|
||||
drag_await = nil
|
||||
@@ -468,11 +399,33 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
GameTooltip:Hide()
|
||||
end
|
||||
|
||||
-- item counts and equipped border, the parts of a slot an inventory change touches
|
||||
local function ButtonInventoryUpdate(self)
|
||||
if self.bar == 11 or self.bar == 12 then return end
|
||||
local sid = self.id
|
||||
|
||||
-- update consumables
|
||||
if IsConsumableAction(sid) then
|
||||
self.count:SetText(GetActionCount(sid))
|
||||
elseif IsReagentAction and IsReagentAction(sid) then
|
||||
self.count:SetText(GetReagentCount(sid))
|
||||
else
|
||||
self.count:SetText(nil)
|
||||
end
|
||||
|
||||
-- equipped item
|
||||
if IsEquippedAction(sid) and C.bars.showequipped == "1" then
|
||||
self.equipped:Show()
|
||||
else
|
||||
self.equipped:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
local start, duration, enable, castable, autocast, token
|
||||
local grid, sid, id, bar, active, texture, _
|
||||
local function ButtonSlotUpdate(self)
|
||||
if not self then return end
|
||||
local self = self or this
|
||||
self = self or this
|
||||
sid = self.id -- 1 to 120
|
||||
|
||||
-- reset shared variables
|
||||
@@ -501,11 +454,6 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
id = self.bar == 1 and self.slot or sid-((self.bar)-1)*12
|
||||
end
|
||||
|
||||
-- overwrite with spell macro texture where possible
|
||||
if self.spellslot and self.booktype then
|
||||
texture = GetSpellTexture(self.spellslot, self.booktype)
|
||||
end
|
||||
|
||||
if not self.showempty and self.backdrop and not texture and grid == 0 then
|
||||
self.backdrop:Hide()
|
||||
self.hide = true
|
||||
@@ -528,23 +476,9 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
self.active:Hide()
|
||||
end
|
||||
|
||||
ButtonInventoryUpdate(self)
|
||||
|
||||
if self.bar ~= 11 and self.bar ~= 12 then
|
||||
-- update consumables
|
||||
if IsConsumableAction(sid) then
|
||||
self.count:SetText(GetActionCount(sid))
|
||||
elseif IsReagentAction and IsReagentAction(sid) then
|
||||
self.count:SetText(GetReagentCount(sid))
|
||||
else
|
||||
self.count:SetText(nil)
|
||||
end
|
||||
|
||||
-- equipped item
|
||||
if IsEquippedAction(sid) and C.bars.showequipped == "1" then
|
||||
self.equipped:Show()
|
||||
else
|
||||
self.equipped:Hide()
|
||||
end
|
||||
|
||||
-- update macro text
|
||||
if C.bars["bar"..self.bar] and C.bars["bar"..self.bar].showmacro == "1" then
|
||||
self.macro:SetText(GetActionText(sid))
|
||||
@@ -591,7 +525,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
|
||||
local sid, usable, oom, _
|
||||
local function ButtonUsableUpdate(self)
|
||||
local self = self or this
|
||||
self = self or this
|
||||
sid = self.id -- 1 to 120
|
||||
|
||||
if self.bar == 11 then
|
||||
@@ -605,17 +539,17 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
-- update usable [out-of-range = 1, oom = 2, not-usable = 3, default = 0]
|
||||
if self.outofrange and C.bars.glowrange == "1" then
|
||||
if self.vertexstate ~= 1 then
|
||||
self.icon:SetVertexColor(self.rangeColor[1], self.rangeColor[2], self.rangeColor[3], self.rangeColor[4])
|
||||
self.icon:SetVertexColor(self.rangeColor:GetRGBA())
|
||||
self.vertexstate = 1
|
||||
end
|
||||
elseif oom and C.bars.showoom == "1" then
|
||||
if self.vertexstate ~= 2 then
|
||||
self.icon:SetVertexColor(self.oomColor[1], self.oomColor[2], self.oomColor[3], self.oomColor[4])
|
||||
self.icon:SetVertexColor(self.oomColor:GetRGBA())
|
||||
self.vertexstate = 2
|
||||
end
|
||||
elseif not usable and C.bars.showna == "1" then
|
||||
if self.vertexstate ~= 3 then
|
||||
self.icon:SetVertexColor(self.naColor[1], self.naColor[2], self.naColor[3], self.naColor[4])
|
||||
self.icon:SetVertexColor(self.naColor:GetRGBA())
|
||||
self.vertexstate = 3
|
||||
end
|
||||
else
|
||||
@@ -627,7 +561,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
end
|
||||
|
||||
local function ButtonRangeUpdate(self)
|
||||
local self = self or this
|
||||
self = self or this
|
||||
|
||||
-- update range display
|
||||
if C.bars.glowrange == "1" and self.bar ~= 11 and self.bar ~= 12 and HasAction(self.id) and ActionHasRange(self.id) and IsActionInRange(self.id) == 0 then
|
||||
@@ -649,9 +583,6 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
start, duration, enable = GetShapeshiftFormCooldown(button.id)
|
||||
elseif button.bar == 12 then
|
||||
start, duration, enable = GetPetActionCooldown(button.id)
|
||||
elseif button.spellslot and button.booktype then
|
||||
start, duration = GetSpellCooldown(button.spellslot, button.booktype)
|
||||
enable = 1
|
||||
else
|
||||
start, duration, enable = GetActionCooldown(button.id)
|
||||
end
|
||||
@@ -696,7 +627,6 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
local function ButtonFullUpdate(button)
|
||||
if not button then return end
|
||||
|
||||
ButtonMacroScan(button)
|
||||
ButtonSlotUpdate(button)
|
||||
ButtonRangeUpdate(button)
|
||||
ButtonUsableUpdate(button)
|
||||
@@ -705,7 +635,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
end
|
||||
|
||||
local function BarsEvent(self)
|
||||
local self = self or this
|
||||
self = self or this
|
||||
|
||||
-- refresh only specific slots
|
||||
if event == "ACTIONBAR_SLOT_CHANGED" and arg1 and arg1 ~= 0 then
|
||||
@@ -765,11 +695,29 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- The cached passes below only touch visible buttons. Hidden ones (other
|
||||
-- pages, hidden bars) are flagged stale and get a full update once the
|
||||
-- range pass sees them visible again.
|
||||
|
||||
-- run cached inventory changes (ammo, reagents, consumables)
|
||||
if eventcache["UNIT_INVENTORY_CHANGED"] then
|
||||
eventcache["UNIT_INVENTORY_CHANGED"] = nil
|
||||
for id, button in pairs(buttoncache) do
|
||||
if button:IsVisible() then
|
||||
ButtonInventoryUpdate(button)
|
||||
ButtonCooldownUpdate(button)
|
||||
ButtonUsableUpdate(button)
|
||||
else
|
||||
button.stale = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- run cached usable usable actions
|
||||
if eventcache["ACTIONBAR_UPDATE_USABLE"] then
|
||||
eventcache["ACTIONBAR_UPDATE_USABLE"] = nil
|
||||
for id, button in pairs(buttoncache) do
|
||||
ButtonUsableUpdate(button)
|
||||
if button:IsVisible() then ButtonUsableUpdate(button) else button.stale = true end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -777,7 +725,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
if eventcache["ACTIONBAR_UPDATE_COOLDOWN"] then
|
||||
eventcache["ACTIONBAR_UPDATE_COOLDOWN"] = nil
|
||||
for id, button in pairs(buttoncache) do
|
||||
ButtonCooldownUpdate(button)
|
||||
if button:IsVisible() then ButtonCooldownUpdate(button) else button.stale = true end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -785,7 +733,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
if eventcache["ACTIONBAR_UPDATE_STATE"] then
|
||||
eventcache["ACTIONBAR_UPDATE_STATE"] = nil
|
||||
for id, button in pairs(buttoncache) do
|
||||
ButtonIsActiveUpdate(button)
|
||||
if button:IsVisible() then ButtonIsActiveUpdate(button) else button.stale = true end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -807,16 +755,40 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
if ( this.tick or .2) > GetTime() then return else this.tick = GetTime() + .2 end
|
||||
|
||||
for id, button in pairs(buttoncache) do
|
||||
if button:IsShown() then ButtonRangeUpdate(button) end
|
||||
if button.stale and button:IsVisible() then
|
||||
-- catch up on updates skipped while hidden
|
||||
button.stale = nil
|
||||
ButtonFullUpdate(button)
|
||||
elseif button:IsShown() then
|
||||
ButtonRangeUpdate(button)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- create the main event and update handler for pfUI actionbars
|
||||
local bars = CreateFrame("Frame", "pfActionBar", UIParent)
|
||||
for event in pairs(special_events) do bars:RegisterEvent(event) end
|
||||
for event in pairs(global_events) do bars:RegisterEvent(event) end
|
||||
for event in pairs(aura_events) do bars:RegisterEvent(event) end
|
||||
for event in pairs(pet_events) do bars:RegisterEvent(event) end
|
||||
|
||||
-- The only unit events in the tables above; both concern the player alone.
|
||||
-- A registration keeps its kind, so these have to go in unit-filtered from
|
||||
-- the start -- RegisterUnitEvent over a plain registration stays plain.
|
||||
local event_units = {
|
||||
["UNIT_INVENTORY_CHANGED"] = "player",
|
||||
["UNIT_PET"] = "player",
|
||||
}
|
||||
|
||||
local function RegisterBarEvent(event)
|
||||
local unit = event_units[event]
|
||||
if unit then
|
||||
bars:RegisterUnitEvent(event, unit)
|
||||
else
|
||||
bars:RegisterEvent(event)
|
||||
end
|
||||
end
|
||||
|
||||
for event in pairs(special_events) do RegisterBarEvent(event) end
|
||||
for event in pairs(global_events) do RegisterBarEvent(event) end
|
||||
for event in pairs(aura_events) do RegisterBarEvent(event) end
|
||||
for event in pairs(pet_events) do RegisterBarEvent(event) end
|
||||
|
||||
-- refresh actionbar buttons on event
|
||||
bars:SetScript("OnEvent", BarsEvent)
|
||||
@@ -854,16 +826,20 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
end
|
||||
end
|
||||
|
||||
local cat, stealth
|
||||
local inCatForm = nil
|
||||
local prowlActive = nil
|
||||
|
||||
-- Cat Form ID per vanilla 1.12 SpellShapeshiftForm.dbc.
|
||||
-- Form IDs per vanilla 1.12 SpellShapeshiftForm.dbc.
|
||||
local CAT_FORM = 1
|
||||
local SHADOWFORM = 28
|
||||
local function HasCatForm()
|
||||
return GetShapeshiftFormID() == CAT_FORM and true or nil
|
||||
end
|
||||
|
||||
local function InShadowform()
|
||||
return GetShapeshiftFormID() == SHADOWFORM and true or nil
|
||||
end
|
||||
|
||||
local function FullScan()
|
||||
if class ~= "DRUID" then return nil end
|
||||
inCatForm = HasCatForm()
|
||||
@@ -873,31 +849,48 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
|
||||
-- pagemaster / meta page switch
|
||||
do
|
||||
local prowl, shift, ctrl, alt, default = 8, 6, 5, 3, 1
|
||||
local formpage, shift, ctrl, alt, default = 8, 6, 5, 3, 1
|
||||
|
||||
-- set temporary pagemaster bindings keybinds
|
||||
if C.bars.pagemaster == "1" then
|
||||
local modifier = { "ALT", "SHIFT", "CTRL" }
|
||||
local buttons = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "+", "=", "´" }
|
||||
local current = CURRENT_ACTIONBAR_PAGE
|
||||
bars.pagemaster = bars.pagemaster or CreateFrame("Frame", "pfPageMaster", UIParent)
|
||||
bars.pagemaster:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
bars.pagemaster:SetScript("OnEvent", function()
|
||||
for _,mod in pairs(modifier) do
|
||||
for _,but in pairs(buttons) do
|
||||
SetBinding(mod.."-"..but)
|
||||
-- while a page modifier is held, MOD-key must run the main bar binding on
|
||||
-- that key so the switched page fires. Overrides do this without touching
|
||||
-- the saved binding set.
|
||||
local pagemods = {}
|
||||
if C.bars.pagemasteralt == "1" then table.insert(pagemods, "ALT") end
|
||||
if C.bars.pagemasterctrl == "1" then table.insert(pagemods, "CTRL") end
|
||||
if C.bars.pagemastershift == "1" then table.insert(pagemods, "SHIFT") end
|
||||
|
||||
if table.getn(pagemods) > 0 then
|
||||
local pagemaster = CreateFrame("Frame", "pfPageMaster", UIParent)
|
||||
pagemaster:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
pagemaster:RegisterEvent("UPDATE_BINDINGS")
|
||||
pagemaster:SetScript("OnEvent", function()
|
||||
ClearOverrideBindings(this)
|
||||
for i = 1, 12 do
|
||||
for _, key in ipairs({ GetBindingKey("ACTIONBUTTON"..i) }) do
|
||||
-- skip keys that already carry a modifier, e.g. "SHIFT-Q"
|
||||
if not key:find("^%u+%-.") then
|
||||
for _, mod in ipairs(pagemods) do
|
||||
SetOverrideBinding(this, false, mod.."-"..key, "ACTIONBUTTON"..i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- setup page switch frame
|
||||
local prowling = nil
|
||||
-- setup page switch frame. `formpaging` is the shared "auto-page is
|
||||
-- active" flag; druid prowl and priest shadowform each drive it, and
|
||||
-- no character is ever both, so one flag covers both features.
|
||||
local formpaging = nil
|
||||
local pageswitch = CreateFrame("Frame", "pfActionBarPageSwitch", UIParent)
|
||||
pageswitch:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
pageswitch:RegisterEvent("UPDATE_SHAPESHIFT_FORM")
|
||||
pageswitch:RegisterEvent("PLAYER_AURAS_CHANGED")
|
||||
pageswitch:RegisterEvent("PLAYER_LOGOUT")
|
||||
local PROWL_IDS = { [5215] = true, [6783] = true, [9913] = true }
|
||||
if class == "DRUID" then
|
||||
pageswitch:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player")
|
||||
end
|
||||
pageswitch:SetScript("OnEvent", function()
|
||||
if event == "PLAYER_LOGOUT" then
|
||||
this:UnregisterAllEvents()
|
||||
@@ -906,10 +899,29 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
return
|
||||
end
|
||||
|
||||
if class == "PRIEST" then
|
||||
if event == "UPDATE_SHAPESHIFT_FORM" or event == "PLAYER_ENTERING_WORLD" then
|
||||
formpaging = InShadowform()
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if class ~= "DRUID" then return end
|
||||
|
||||
if event == "PLAYER_ENTERING_WORLD" then
|
||||
prowling = FullScan()
|
||||
formpaging = FullScan()
|
||||
return
|
||||
end
|
||||
|
||||
-- Eager prowl detection on the cast itself — zero-latency vs.
|
||||
-- PLAYER_AURAS_CHANGED, which can land a frame or two behind it.
|
||||
-- arg3 = spellID
|
||||
if event == "UNIT_SPELLCAST_SUCCEEDED" then
|
||||
if PROWL_IDS[arg3] then
|
||||
inCatForm = true
|
||||
prowlActive = true
|
||||
formpaging = true
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
@@ -918,7 +930,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
inCatForm = HasCatForm()
|
||||
if not inCatForm then
|
||||
prowlActive = nil
|
||||
prowling = nil
|
||||
formpaging = nil
|
||||
end
|
||||
return
|
||||
end
|
||||
@@ -928,28 +940,14 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
if inCatForm then
|
||||
if IsStealthed() then
|
||||
prowlActive = true
|
||||
prowling = true
|
||||
formpaging = true
|
||||
else
|
||||
prowlActive = nil
|
||||
prowling = nil
|
||||
formpaging = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Eager prowl detection via Nampower SPELL_GO_SELF — zero-latency vs.
|
||||
-- PLAYER_AURAS_CHANGED, which can land a frame or two behind the cast.
|
||||
-- Form changes are no longer hooked here; UPDATE_SHAPESHIFT_FORM covers
|
||||
-- those without needing a per-spellID watchlist.
|
||||
local PROWL_IDS = { [5215] = true, [6783] = true, [9913] = true }
|
||||
pfUI.libdebuff_spell_go_hooks = pfUI.libdebuff_spell_go_hooks or {}
|
||||
pfUI.libdebuff_spell_go_hooks["actionbar_prowl"] = function(spellId)
|
||||
if class ~= "DRUID" then return end
|
||||
if PROWL_IDS[spellId] then
|
||||
inCatForm = true
|
||||
prowlActive = true
|
||||
prowling = true
|
||||
end
|
||||
end
|
||||
pageswitch:SetScript("OnUpdate", function()
|
||||
-- switch actionbar page depending on meta key that is pressed
|
||||
if C.bars.pagemastershift == "1" and IsShiftKeyDown() then
|
||||
@@ -965,11 +963,12 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
SwitchBar(default)
|
||||
end
|
||||
|
||||
-- switch actionbar page if druid stealth is detected
|
||||
if C.bars.druidstealth == "1" then
|
||||
if prowling and _G.CURRENT_ACTIONBAR_PAGE == 1 then
|
||||
SwitchBar(prowl)
|
||||
elseif not prowling and _G.CURRENT_ACTIONBAR_PAGE == 8 then
|
||||
-- switch actionbar page while druid stealth / priest shadowform is active
|
||||
if (class == "DRUID" and C.bars.druidstealth == "1")
|
||||
or (class == "PRIEST" and C.bars.priestshadow == "1") then
|
||||
if formpaging and _G.CURRENT_ACTIONBAR_PAGE == 1 then
|
||||
SwitchBar(formpage)
|
||||
elseif not formpaging and _G.CURRENT_ACTIONBAR_PAGE == 8 then
|
||||
SwitchBar(default)
|
||||
end
|
||||
end
|
||||
@@ -983,13 +982,13 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
local font_offset = tonumber(C.bars.font_offset)
|
||||
|
||||
local macro_size = tonumber(C.bars.macro_size)
|
||||
local macro_color = { strsplit(",", C.bars.macro_color) }
|
||||
local macro_color = { GetStringColor(C.bars.macro_color) }
|
||||
|
||||
local count_size = tonumber(C.bars.count_size)
|
||||
local count_color = { strsplit(",", C.bars.count_color) }
|
||||
local count_color = { GetStringColor(C.bars.count_color) }
|
||||
|
||||
local bind_size = tonumber(C.bars.bind_size)
|
||||
local bind_color = { strsplit(",", C.bars.bind_color) }
|
||||
local bind_color = { GetStringColor(C.bars.bind_color) }
|
||||
|
||||
local cd_size = tonumber(C.bars.cd_size)
|
||||
|
||||
@@ -1008,15 +1007,13 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
|
||||
local id = (bar-1)*12+button
|
||||
local exists = _G[button_name] and true or nil
|
||||
local f = _G[button_name] or CreateFrame("Button", button_name, parent, ACTIONBAR_SECURE_TEMPLATE_BUTTON)
|
||||
local f = _G[button_name] or CreateFrame("Button", button_name, parent)
|
||||
|
||||
-- no button available, create a new one
|
||||
if not exists then
|
||||
-- prepare the button for vanilla
|
||||
if not f.HookScript then
|
||||
f.HookScript = HookScript
|
||||
f:SetScript("OnClick", ButtonClick)
|
||||
end
|
||||
if not f.HookScript then f.HookScript = HookScript end
|
||||
f:SetScript("OnClick", ButtonClick)
|
||||
|
||||
if bar ~= 11 then
|
||||
f:RegisterForDrag("LeftButton", "RightButton")
|
||||
@@ -1036,8 +1033,9 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
f.slot = id
|
||||
|
||||
-- cooldown
|
||||
f.cd = CreateFrame(COOLDOWN_FRAME_TYPE, f:GetName() .. "Cooldown", f, "CooldownFrameTemplate")
|
||||
f.cd = CreateFrame("Cooldown", f:GetName() .. "Cooldown", f, "CooldownFrameTemplate")
|
||||
f.cd.pfCooldownStyleAnimation = 1
|
||||
f.cd.pfCooldownReverse = tonumber(C.bars.cooldown_reverse) or 0
|
||||
f.cd.pfCooldownType = "NOGCD"
|
||||
f.cd.pfCooldownSize = cd_size
|
||||
|
||||
@@ -1142,31 +1140,23 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
f.count:SetJustifyH("RIGHT")
|
||||
f.count:SetJustifyV("BOTTOM")
|
||||
|
||||
-- macro spell scan (disabled when macro addons are loaded)
|
||||
if C.bars.macroscan == "0" or pfUI:MacroAddonsLoaded() then
|
||||
f.scanmacro, f.spellslot, f.booktype = nil, nil, nil
|
||||
else
|
||||
f.scanmacro = true
|
||||
end
|
||||
|
||||
-- range glow color
|
||||
f.rangeColor = { strsplit(",", C.bars.rangecolor) }
|
||||
f.rangeColor = GetStringColorObject(C.bars.rangecolor)
|
||||
|
||||
-- out of mana color
|
||||
f.oomColor = { strsplit(",", C.bars.oomcolor) }
|
||||
f.oomColor = GetStringColorObject(C.bars.oomcolor)
|
||||
|
||||
-- not usable color
|
||||
f.naColor = { strsplit(",", C.bars.nacolor) }
|
||||
f.naColor = GetStringColorObject(C.bars.nacolor)
|
||||
|
||||
-- equipped color
|
||||
if f.equipped then
|
||||
f.equipped:SetTexture(strsplit(",", C.bars.eqcolor))
|
||||
f.equipped:SetTexture(GetStringColor(C.bars.eqcolor))
|
||||
end
|
||||
|
||||
-- general appearance
|
||||
f.showempty = showempty == "1" and true or nil
|
||||
f:SetHeight(size)
|
||||
f:SetWidth(size)
|
||||
f:SetSize(size, size)
|
||||
CreateBackdrop(f, border)
|
||||
|
||||
return f
|
||||
@@ -1216,8 +1206,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
end
|
||||
|
||||
-- the stored layout is invalid, temporary fallback
|
||||
local _, _, fcols, frows = string.find(tostring(formfactor or ""), "(%d+)%s*x%s*(%d+)")
|
||||
if not ((fcols and frows) or pfGridmath[buttons][BarLayoutFormfactor(formfactor)]) then
|
||||
if not fcols2 or not frows2 then
|
||||
formfactor = BarLayoutOptions(buttons)[1]
|
||||
end
|
||||
|
||||
@@ -1228,7 +1217,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
|
||||
-- create frame
|
||||
local init = not bars[i]
|
||||
bars[i] = bars[i] or CreateFrame("Frame", "pfActionBar" .. barnames[i], UIParent, ACTIONBAR_SECURE_TEMPLATE_BAR)
|
||||
bars[i] = bars[i] or CreateFrame("Frame", "pfActionBar" .. barnames[i], UIParent)
|
||||
bars[i]:SetID(i)
|
||||
|
||||
-- autohide
|
||||
@@ -1338,8 +1327,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
|
||||
-- adjust actionbar size
|
||||
BarLayoutSize(bars[i], buttons, formfactor, size, border, spacing, uneven, fillmode)
|
||||
bars[i]:SetWidth(bars[i]._size[1])
|
||||
bars[i]:SetHeight(bars[i]._size[2])
|
||||
bars[i]:SetSize(bars[i]._size[1], bars[i]._size[2])
|
||||
bars[i]:ClearAllPoints()
|
||||
if i == 1 then -- main
|
||||
bars[i]:SetPoint("BOTTOM", 0, 2*border)
|
||||
@@ -1358,6 +1346,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
|
||||
-- make stance bar dodge by default
|
||||
bars[i]:SetScript("OnShow", function()
|
||||
if pfUI.unlock and pfUI.unlock:IsShown() then return end
|
||||
if bars[11] and bars[11]:IsShown() then
|
||||
bars[11]:ClearAllPoints()
|
||||
bars[11]:SetPoint("BOTTOM", bars[12], "TOP", 0, 3*border)
|
||||
@@ -1367,6 +1356,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
|
||||
-- restore old stance bar position
|
||||
bars[i]:SetScript("OnHide", function()
|
||||
if pfUI.unlock and pfUI.unlock:IsShown() then return end
|
||||
if bars[11] and bars[11]:IsShown() then
|
||||
bars[11]:ClearAllPoints()
|
||||
bars[11]:SetPoint("BOTTOM", bars[6], "TOP", 0, 3*border)
|
||||
@@ -1539,7 +1529,7 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
-- via GetActionInfo + C_Spell.GetSpellReagents. Macro actions and
|
||||
-- bag-item actions are skipped (their reagent resolution would need a
|
||||
-- macro-body parse / item-effect lookup that we don't bother with).
|
||||
local UpdateSlot = function(slot)
|
||||
local function UpdateSlot(slot)
|
||||
local newID = nil
|
||||
if HasAction(slot) then
|
||||
local kind, spellID = GetActionInfo(slot)
|
||||
@@ -1554,60 +1544,44 @@ pfUI:RegisterModule("actionbar", function ()
|
||||
if reagent_slots[slot] ~= newID then
|
||||
reagent_slots[slot] = newID
|
||||
if newID then
|
||||
reagent_counts[newID] = reagent_counts[newID] or 0
|
||||
reagent_counts[newID] = reagent_counts[newID] or C_Item.GetItemCount(newID)
|
||||
end
|
||||
updatecache[slot] = true
|
||||
end
|
||||
end
|
||||
|
||||
-- Recount every tracked reagent and flag its buttons for a refresh.
|
||||
local RecountReagents = function()
|
||||
for itemID in pairs(reagent_counts) do
|
||||
reagent_counts[itemID] = C_Item.GetItemCount(itemID)
|
||||
end
|
||||
for slot in pairs(reagent_slots) do
|
||||
updatecache[slot] = true
|
||||
end
|
||||
end
|
||||
|
||||
local reagentcounter = CreateFrame("Frame", "pfReagentCounter", UIParent)
|
||||
reagentcounter:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
reagentcounter:RegisterEvent("ACTIONBAR_SLOT_CHANGED")
|
||||
reagentcounter:RegisterEvent("BAG_UPDATE_DELAYED")
|
||||
reagentcounter:SetScript("OnEvent", function()
|
||||
if event == "BAG_UPDATE_DELAYED" then
|
||||
this.event = true
|
||||
if event == "ACTIONBAR_SLOT_CHANGED" then
|
||||
-- arg1 is the changed slot; 0 (or nil) means "all slots"
|
||||
if arg1 and arg1 > 0 then
|
||||
UpdateSlot(arg1)
|
||||
else
|
||||
for slot = 1, 120 do UpdateSlot(slot) end
|
||||
end
|
||||
elseif event == "BAG_UPDATE_DELAYED" then
|
||||
-- inventory changed: refresh the counts we already track
|
||||
RecountReagents()
|
||||
else
|
||||
this.scan = 1
|
||||
-- PLAYER_ENTERING_WORLD: seed the full reagent map (UpdateSlot seeds
|
||||
-- each new reagent's count; a BAG_UPDATE_DELAYED follows during login)
|
||||
for slot = 1, 120 do UpdateSlot(slot) end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Reagent counter update with throttle for performance optimization
|
||||
reagentcounter:SetScript("OnUpdate", function()
|
||||
-- Throttle entire function to 10 FPS for smooth scanning
|
||||
if (this.tick_update or 0) > GetTime() then return end
|
||||
this.tick_update = GetTime() + 0.1
|
||||
|
||||
-- scan one action slot per update
|
||||
if this.scan and this.scan <= 120 then
|
||||
UpdateSlot(this.scan)
|
||||
this.scan = this.scan + 1
|
||||
end
|
||||
|
||||
-- trigger reagent count updates after action scans
|
||||
if this.scan and this.scan >= 120 then
|
||||
this.event = true
|
||||
this.scan = nil
|
||||
end
|
||||
|
||||
-- queue events to fire only once per second
|
||||
if not this.event then return end
|
||||
if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + 1 end
|
||||
|
||||
-- scan for all reagent item counts
|
||||
for itemID in pairs(reagent_counts) do
|
||||
reagent_counts[itemID] = C_Item.GetItemCount(itemID)
|
||||
end
|
||||
|
||||
-- update all actionbar buttons
|
||||
for slot in pairs(reagent_slots) do
|
||||
updatecache[slot] = true
|
||||
end
|
||||
|
||||
-- remove event trigger
|
||||
this.event = nil
|
||||
end)
|
||||
|
||||
function IsReagentAction(slot)
|
||||
return reagent_slots[slot] and true or nil
|
||||
end
|
||||
|
||||
+28
-33
@@ -37,15 +37,10 @@ pfUI:RegisterModule("addonbuttons", function ()
|
||||
|
||||
pfUI.addonbuttons.minimapbutton = CreateFrame("Button", "pfMinimapButton", pfUI.minimap or UIParent)
|
||||
pfUI.addonbuttons.minimapbutton:SetFrameLevel(24)
|
||||
pfUI.addonbuttons.minimapbutton:SetWidth(12)
|
||||
pfUI.addonbuttons.minimapbutton:SetHeight(12)
|
||||
pfUI.addonbuttons.minimapbutton:SetSize(12, 12)
|
||||
|
||||
pfUI.addonbuttons.minimapbutton:SetScript("OnClick", function()
|
||||
if pfUI.addonbuttons:IsShown() then
|
||||
pfUI.addonbuttons:Hide()
|
||||
else
|
||||
pfUI.addonbuttons:Show()
|
||||
end
|
||||
pfUI.addonbuttons:SetShown(not pfUI.addonbuttons:IsShown())
|
||||
end)
|
||||
|
||||
pfUI.addonbuttons.buttons = {}
|
||||
@@ -163,27 +158,25 @@ pfUI:RegisterModule("addonbuttons", function ()
|
||||
pfUI.addonbuttons:SetScale(pfUI.minimap:GetScale())
|
||||
|
||||
pfUI.addonbuttons.minimapbutton:ClearAllPoints()
|
||||
local mbtnWidth, mbtnHeight = pfUI.minimap:GetSize()
|
||||
local dynamicSize = ceil((GetNumButtons() > 0 and GetNumButtons() or 1) / tonumber(C.abuttons.rowsize)) * GetStringSize() + tonumber(C.abuttons.spacing)
|
||||
if C.abuttons.position == "bottom" then
|
||||
pfUI.addonbuttons:SetWidth(pfUI.minimap:GetWidth())
|
||||
pfUI.addonbuttons:SetHeight(ceil((GetNumButtons() > 0 and GetNumButtons() or 1) / tonumber(C.abuttons.rowsize)) * GetStringSize() + tonumber(C.abuttons.spacing))
|
||||
pfUI.addonbuttons:SetSize(mbtnWidth, dynamicSize)
|
||||
pfUI.addonbuttons:SetPoint("TOP", pfUI.minimap, "BOTTOM", 0 , -default_border * 3)
|
||||
SkinArrowButton(pfUI.addonbuttons.minimapbutton, "down")
|
||||
pfUI.addonbuttons.minimapbutton:SetPoint("BOTTOM", pfUI.minimap, "BOTTOM", 0, 4)
|
||||
elseif C.abuttons.position == "left" then
|
||||
pfUI.addonbuttons:SetWidth(ceil((GetNumButtons() > 0 and GetNumButtons() or 1) / tonumber(C.abuttons.rowsize)) * GetStringSize() + tonumber(C.abuttons.spacing))
|
||||
pfUI.addonbuttons:SetHeight(pfUI.minimap:GetHeight())
|
||||
pfUI.addonbuttons:SetSize(dynamicSize, mbtnHeight)
|
||||
pfUI.addonbuttons:SetPoint("TOPRIGHT", pfUI.minimap, "TOPLEFT", -default_border * 3, 0)
|
||||
SkinArrowButton(pfUI.addonbuttons.minimapbutton, "left")
|
||||
pfUI.addonbuttons.minimapbutton:SetPoint("LEFT", pfUI.minimap, "LEFT", 4, 0)
|
||||
elseif C.abuttons.position == "top" then
|
||||
pfUI.addonbuttons:SetWidth(pfUI.minimap:GetWidth())
|
||||
pfUI.addonbuttons:SetHeight(ceil((GetNumButtons() > 0 and GetNumButtons() or 1) / tonumber(C.abuttons.rowsize)) * GetStringSize() + tonumber(C.abuttons.spacing))
|
||||
pfUI.addonbuttons:SetSize(mbtnWidth, dynamicSize)
|
||||
pfUI.addonbuttons:SetPoint("BOTTOM", pfUI.minimap, "TOP", 0 , default_border * 3)
|
||||
SkinArrowButton(pfUI.addonbuttons.minimapbutton, "up")
|
||||
pfUI.addonbuttons.minimapbutton:SetPoint("TOP", pfUI.minimap, "TOP", 0, -4)
|
||||
elseif C.abuttons.position == "right" then
|
||||
pfUI.addonbuttons:SetWidth(ceil((GetNumButtons() > 0 and GetNumButtons() or 1) / tonumber(C.abuttons.rowsize)) * GetStringSize() + tonumber(C.abuttons.spacing))
|
||||
pfUI.addonbuttons:SetHeight(pfUI.minimap:GetHeight())
|
||||
pfUI.addonbuttons:SetSize(dynamicSize, mbtnHeight)
|
||||
pfUI.addonbuttons:SetPoint("TOPLEFT", pfUI.minimap, "TOPRIGHT", default_border * 3, 0)
|
||||
SkinArrowButton(pfUI.addonbuttons.minimapbutton, "right")
|
||||
pfUI.addonbuttons.minimapbutton:SetPoint("RIGHT", pfUI.minimap, "RIGHT", -4, 0)
|
||||
@@ -231,7 +224,7 @@ pfUI:RegisterModule("addonbuttons", function ()
|
||||
frame.backup.is_clamped_to_screen = frame:IsClampedToScreen()
|
||||
frame.backup.is_movable = frame:IsMovable()
|
||||
frame.backup.point = {frame:GetPoint()}
|
||||
frame.backup.size = {frame:GetHeight(), frame:GetWidth()}
|
||||
frame.backup.size = {frame:GetSize()}
|
||||
frame.backup.scale = frame:GetScale()
|
||||
if frame:HasScript("OnDragStart") then
|
||||
frame.backup.on_drag_start = frame:GetScript("OnDragStart")
|
||||
@@ -256,8 +249,7 @@ pfUI:RegisterModule("addonbuttons", function ()
|
||||
frame:SetClampedToScreen(frame.backup.is_clamped_to_screen)
|
||||
frame:SetMovable(frame.backup.is_movable)
|
||||
frame:SetScale(frame.backup.scale)
|
||||
frame:SetHeight(frame.backup.size[1])
|
||||
frame:SetWidth(frame.backup.size[2])
|
||||
frame:SetSize(frame.backup.size[2], frame.backup.size[1])
|
||||
frame:ClearAllPoints()
|
||||
frame:SetPoint(frame.backup.point[1], frame.backup.point[2], frame.backup.point[3], frame.backup.point[4], frame.backup.point[5])
|
||||
if frame.backup.on_drag_start ~= nil then
|
||||
@@ -405,22 +397,26 @@ pfUI:RegisterModule("addonbuttons", function ()
|
||||
pfUI.addonbuttons:ProcessButtons()
|
||||
end)
|
||||
|
||||
pfUI.addonbuttons:SetScript("OnUpdate", function()
|
||||
-- check if the panel should be shown by default
|
||||
if not this.initialized then
|
||||
if C.abuttons.showdefault == "1" and GetNumButtons() > 0 then
|
||||
pfUI.addonbuttons:Show()
|
||||
else
|
||||
pfUI.addonbuttons:Hide()
|
||||
end
|
||||
-- Initial setup on the next frame, once other addons' minimap buttons exist
|
||||
RunNextFrame(function()
|
||||
-- rescan before deciding whether the panel should be shown by default
|
||||
pfUI.addonbuttons:ProcessButtons()
|
||||
|
||||
-- update all buttons
|
||||
pfUI.addonbuttons:ProcessButtons()
|
||||
this.initialized = true
|
||||
if C.abuttons.showdefault == "1" and GetNumButtons() > 0 then
|
||||
pfUI.addonbuttons:Show()
|
||||
else
|
||||
pfUI.addonbuttons:Hide()
|
||||
end
|
||||
|
||||
-- throttle updates to once per 5 seconds
|
||||
if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + 5 end
|
||||
-- apply workarounds
|
||||
for k, v in pairs(pfUI.addonbuttons.overrides) do
|
||||
_G[k] = v
|
||||
end
|
||||
end)
|
||||
|
||||
-- Rescan minimap buttons every 5 seconds while the panel is shown
|
||||
C_Timer.NewTicker(5, function()
|
||||
if not pfUI.addonbuttons:IsShown() then return end
|
||||
|
||||
-- reload/rescan minimap buttons
|
||||
pfUI.addonbuttons:ProcessButtons()
|
||||
@@ -440,6 +436,5 @@ pfUI:RegisterModule("addonbuttons", function ()
|
||||
|
||||
pfUI.addonbuttons:UpdateConfig()
|
||||
|
||||
_G.SLASH_PFABP1, _G.SLASH_PFABP2 = "/abp", "/pfabp"
|
||||
_G.SlashCmdList.PFABP = ManualAddOrRemove
|
||||
pfUI.api.RegisterSlashCommand("PFABP", { "/abp", "/pfabp" }, ManualAddOrRemove, true)
|
||||
end)
|
||||
|
||||
+4
-14
@@ -134,19 +134,9 @@ pfUI:RegisterModule("addoncompat", function ()
|
||||
end
|
||||
|
||||
-- run the addonconflict queue when firstrun is ready
|
||||
local delay = CreateFrame("Frame")
|
||||
delay:SetScript("OnUpdate", function()
|
||||
-- throttle to to one query per .1 second
|
||||
if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + .1 end
|
||||
|
||||
-- make sure the firstrun dialog has finished
|
||||
if pfUI.firstrun and pfUI.firstrun.steps then
|
||||
for _, step in pairs(pfUI.firstrun.steps) do
|
||||
if not pfUI_init[step.name] then return end
|
||||
end
|
||||
end
|
||||
|
||||
if pfUI.firstrun and pfUI.firstrun.completed then
|
||||
RunQueue()
|
||||
this:SetScript("OnUpdate", nil)
|
||||
end)
|
||||
else
|
||||
pfUI.events:RegisterCallback("firstrun:complete", RunQueue, "addoncompat")
|
||||
end
|
||||
end)
|
||||
|
||||
+127
-152
@@ -9,7 +9,6 @@ pfUI:RegisterModule("addons", function ()
|
||||
pfUI.addons:Show()
|
||||
HideUIPanel(GameMenuFrame)
|
||||
end)
|
||||
SkinButton(pfUIAddonButton)
|
||||
|
||||
local point, relativeTo, relativePoint, xOffset, yOffset = GameMenuButtonOptions:GetPoint()
|
||||
GameMenuButtonOptions:SetPoint(point, relativeTo, relativePoint, xOffset, yOffset - 22)
|
||||
@@ -18,8 +17,7 @@ pfUI:RegisterModule("addons", function ()
|
||||
-- addon window
|
||||
pfUI.addons = CreateFrame("Frame", "pfAddons", UIParent)
|
||||
pfUI.addons:SetFrameStrata("DIALOG")
|
||||
pfUI.addons:SetHeight(490)
|
||||
pfUI.addons:SetWidth(380)
|
||||
pfUI.addons:SetSize(380, 490)
|
||||
pfUI.addons:SetPoint("CENTER", 0,0)
|
||||
pfUI.addons:EnableMouseWheel(1)
|
||||
pfUI.addons:SetMovable(true)
|
||||
@@ -51,8 +49,7 @@ pfUI:RegisterModule("addons", function ()
|
||||
pfUI.addons.close = CreateFrame("Button", "pfBagClose", pfUI.addons)
|
||||
pfUI.addons.close:SetPoint("TOPRIGHT", -border*2,-border*2 )
|
||||
CreateBackdrop(pfUI.addons.close)
|
||||
pfUI.addons.close:SetHeight(15)
|
||||
pfUI.addons.close:SetWidth(15)
|
||||
pfUI.addons.close:SetSize(15, 15)
|
||||
pfUI.addons.close.texture = pfUI.addons.close:CreateTexture("pfBagClose")
|
||||
pfUI.addons.close.texture:SetTexture(pfUI.media["img:close"])
|
||||
pfUI.addons.close.texture:ClearAllPoints()
|
||||
@@ -72,12 +69,42 @@ pfUI:RegisterModule("addons", function ()
|
||||
pfUI.addons:Hide()
|
||||
end)
|
||||
|
||||
-- installed addons, one entry per row of the addon list
|
||||
local addons = {}
|
||||
for i = 1, GetNumAddOns() do
|
||||
local name, title, notes = GetAddOnInfo(i)
|
||||
addons[i] = {
|
||||
index = i,
|
||||
name = name,
|
||||
title = title,
|
||||
notes = notes,
|
||||
author = GetAddOnMetadata(name, "Author"),
|
||||
version = GetAddOnMetadata(name, "Version"),
|
||||
deps = { GetAddOnDependencies(i) }, -- required (.toc Dependencies)
|
||||
optdeps = { C_AddOns.GetAddOnOptionalDependencies(i) }, -- optional (.toc OptionalDeps)
|
||||
}
|
||||
end
|
||||
|
||||
local function IsAddonEnabled(index)
|
||||
local _, _, _, enabled = GetAddOnInfo(index)
|
||||
return enabled
|
||||
end
|
||||
|
||||
local function SetAddonEnabled(index, enabled)
|
||||
if enabled then
|
||||
EnableAddOn(index)
|
||||
else
|
||||
DisableAddOn(index)
|
||||
end
|
||||
pfUI.addons.hasChanged = true
|
||||
end
|
||||
|
||||
-- addons profile
|
||||
local function GetSelectedAddonsList()
|
||||
local selected_addons = {}
|
||||
for i, frame in ipairs(pfUI.addons.list) do
|
||||
if frame.input:GetChecked() then
|
||||
table.insert(selected_addons, frame.aname)
|
||||
for i, addon in ipairs(addons) do
|
||||
if IsAddonEnabled(i) then
|
||||
table.insert(selected_addons, addon.name)
|
||||
end
|
||||
end
|
||||
return selected_addons
|
||||
@@ -93,28 +120,20 @@ pfUI:RegisterModule("addons", function ()
|
||||
pfUI.addons.profile.dropdown:SetSelectionByText(profile)
|
||||
|
||||
-- load profile
|
||||
local selected_list = pfUI_addon_profiles[profile]
|
||||
for i=1, GetNumAddOns() do
|
||||
local active = false
|
||||
local f = pfUI.addons.list[i]
|
||||
local selected = {}
|
||||
for _, name in ipairs(pfUI_addon_profiles[profile]) do
|
||||
selected[name] = true
|
||||
end
|
||||
|
||||
for i_i, n in ipairs(selected_list) do
|
||||
if f.aname == n then
|
||||
active = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if active then
|
||||
if not f.input:GetChecked() then
|
||||
f.input:Click()
|
||||
end
|
||||
else
|
||||
if f.input:GetChecked() then
|
||||
f.input:Click()
|
||||
end
|
||||
for i, addon in ipairs(addons) do
|
||||
if selected[addon.name] and not IsAddonEnabled(i) then
|
||||
SetAddonEnabled(i, true)
|
||||
elseif not selected[addon.name] and IsAddonEnabled(i) then
|
||||
SetAddonEnabled(i, false)
|
||||
end
|
||||
end
|
||||
|
||||
pfUI.addons.list.ScrollBox:ReinitializeFrames()
|
||||
end
|
||||
|
||||
-- addon profiles
|
||||
@@ -125,8 +144,7 @@ pfUI:RegisterModule("addons", function ()
|
||||
end)
|
||||
|
||||
pfUI.addons.profile:SetPoint("TOP", pfUI.addons, "TOP", 0, -30)
|
||||
pfUI.addons.profile:SetHeight(30)
|
||||
pfUI.addons.profile:SetWidth(370)
|
||||
pfUI.addons.profile:SetSize(370, 30)
|
||||
CreateBackdrop(pfUI.addons.profile, nil, true)
|
||||
|
||||
-- addon profile: title
|
||||
@@ -139,8 +157,7 @@ pfUI:RegisterModule("addons", function ()
|
||||
-- addon profile: delete
|
||||
pfUI.addons.profile.del = CreateFrame("Button", nil, pfUI.addons.profile, "UIPanelButtonTemplate")
|
||||
SkinButton(pfUI.addons.profile.del)
|
||||
pfUI.addons.profile.del:SetWidth(16)
|
||||
pfUI.addons.profile.del:SetHeight(16)
|
||||
pfUI.addons.profile.del:SetSize(16, 16)
|
||||
pfUI.addons.profile.del:SetPoint("RIGHT", -10, 0)
|
||||
pfUI.addons.profile.del:GetFontString():SetPoint("CENTER", 1, 0)
|
||||
pfUI.addons.profile.del:SetText("-")
|
||||
@@ -157,8 +174,7 @@ pfUI:RegisterModule("addons", function ()
|
||||
-- addon profile: create
|
||||
pfUI.addons.profile.add = CreateFrame("Button", nil, pfUI.addons.profile, "UIPanelButtonTemplate")
|
||||
SkinButton(pfUI.addons.profile.add)
|
||||
pfUI.addons.profile.add:SetWidth(16)
|
||||
pfUI.addons.profile.add:SetHeight(16)
|
||||
pfUI.addons.profile.add:SetSize(16, 16)
|
||||
pfUI.addons.profile.add:SetPoint("RIGHT", pfUI.addons.profile.del, "LEFT", -4, 0)
|
||||
pfUI.addons.profile.add:GetFontString():SetPoint("CENTER", 1, 0)
|
||||
pfUI.addons.profile.add:SetText("+")
|
||||
@@ -199,152 +215,111 @@ pfUI:RegisterModule("addons", function ()
|
||||
return menu
|
||||
end)
|
||||
|
||||
-- addon list: scroll frame
|
||||
pfUI.addons.scroll = CreateScrollFrame("pfAddonListScroll", pfUI.addons)
|
||||
pfUI.addons.scroll:SetWidth(360)
|
||||
pfUI.addons.scroll:SetHeight(410)
|
||||
pfUI.addons.scroll:SetPoint("BOTTOM", 0, 10)
|
||||
local function AddDependencyLines(header, deps)
|
||||
if not deps or table.getn(deps) == 0 then return end
|
||||
GameTooltip:AddLine(" ")
|
||||
GameTooltip:AddLine(header .. ":", .2, 1, .8)
|
||||
for _, dep in ipairs(deps) do
|
||||
if IsAddOnLoaded(dep) then
|
||||
GameTooltip:AddLine(" " .. dep, .5, 1, .5)
|
||||
elseif C_AddOns.DoesAddOnExist(dep) then
|
||||
GameTooltip:AddLine(" " .. dep, 1, .82, 0)
|
||||
else
|
||||
GameTooltip:AddLine(" " .. dep .. " (" .. T["Missing"] .. ")", 1, .4, .4)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
pfUI.addons.scroll.backdrop = CreateFrame("Frame", nil, pfUI.addons.scroll)
|
||||
pfUI.addons.scroll.backdrop:SetFrameLevel(1)
|
||||
pfUI.addons.scroll.backdrop:SetPoint("TOPLEFT", pfUI.addons.scroll, "TOPLEFT", -5, 5)
|
||||
pfUI.addons.scroll.backdrop:SetPoint("BOTTOMRIGHT", pfUI.addons.scroll, "BOTTOMRIGHT", 5, -5)
|
||||
CreateBackdrop(pfUI.addons.scroll.backdrop, nil, true)
|
||||
local function RowOnEnter(self)
|
||||
local addon = self.addon
|
||||
self:SetBackdropBorderColor(1,1,1,.08)
|
||||
|
||||
-- addon list: scroll parent
|
||||
pfUI.addons.list = CreateScrollChild("pfAddonList", pfUI.addons.scroll)
|
||||
pfUI.addons.list:RegisterEvent("ADDON_LOADED")
|
||||
pfUI.addons.list:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
pfUI.addons.list:SetHeight(GetNumAddOns() * 25 + 26)
|
||||
|
||||
local function AddonOnEnter()
|
||||
this:SetBackdropBorderColor(1,1,1,.08)
|
||||
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetText(this.atitle)
|
||||
if this.aversion then
|
||||
GameTooltip:AddDoubleLine(T["Version"], this.aversion, 1,1,1, .2,1,.8)
|
||||
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetText(addon.title)
|
||||
if addon.version then
|
||||
GameTooltip:AddDoubleLine(T["Version"], addon.version, 1,1,1, .2,1,.8)
|
||||
end
|
||||
|
||||
if this.aauthor then
|
||||
GameTooltip:AddDoubleLine(T["Author"], this.aauthor, 1,1,1, .2,1,.8)
|
||||
if addon.author then
|
||||
GameTooltip:AddDoubleLine(T["Author"], addon.author, 1,1,1, .2,1,.8)
|
||||
end
|
||||
|
||||
GameTooltip:AddLine(this.anote, .75,.75,.75,1)
|
||||
GameTooltip:AddLine(addon.notes, .75,.75,.75,1)
|
||||
AddDependencyLines(T["Dependencies"], addon.deps)
|
||||
AddDependencyLines(T["Optional Dependencies"], addon.optdeps)
|
||||
GameTooltip:SetWidth(180)
|
||||
GameTooltip:Show()
|
||||
end
|
||||
|
||||
local function AddonOnLeave()
|
||||
this:SetBackdropBorderColor(1,1,1,.04)
|
||||
local function RowOnLeave(self)
|
||||
self:SetBackdropBorderColor(1,1,1,.04)
|
||||
GameTooltip:Hide()
|
||||
end
|
||||
|
||||
local function AddonOnClick()
|
||||
this.input:Click()
|
||||
local function RowOnClick(self)
|
||||
self.input:Click()
|
||||
end
|
||||
|
||||
local function InputOnClick()
|
||||
if this:GetChecked() then
|
||||
EnableAddOn(this:GetID())
|
||||
else
|
||||
DisableAddOn(this:GetID())
|
||||
end
|
||||
pfUI.addons.hasChanged = true
|
||||
local function InputOnClick(self)
|
||||
SetAddonEnabled(self:GetParent().addon.index, self:GetChecked())
|
||||
|
||||
local id, name = pfUI.addons.profile.dropdown:GetSelection()
|
||||
local _, name = pfUI.addons.profile.dropdown:GetSelection()
|
||||
name = name or T["Current"]
|
||||
pfUI_addon_profiles[name] = GetSelectedAddonsList()
|
||||
end
|
||||
|
||||
pfUI.addons.list:SetScript("OnEvent", function()
|
||||
for i=1, GetNumAddOns() do
|
||||
local aname, atitle, anote = GetAddOnInfo(i)
|
||||
local aauthor = GetAddOnMetadata(aname, "Author")
|
||||
local aversion = GetAddOnMetadata(aname, "Version")
|
||||
local function InitRow(row, addon)
|
||||
-- one-time setup of a pooled row
|
||||
if not row.input then
|
||||
row:SetBackdrop(pfUI.backdrop_hover)
|
||||
row:SetBackdropBorderColor(1,1,1,.04)
|
||||
|
||||
-- basic frame
|
||||
if not pfUI.addons.list[i] then
|
||||
pfUI.addons.list[i] = CreateFrame("Button", nil, pfUI.addons.list)
|
||||
local frame = pfUI.addons.list[i]
|
||||
frame.aname = aname
|
||||
frame.atitle = atitle
|
||||
frame.anote = anote
|
||||
frame.aauthor = aauthor
|
||||
frame.aversion = aversion
|
||||
row:EnableMouse(true)
|
||||
row:SetScript("OnEnter", RowOnEnter)
|
||||
row:SetScript("OnLeave", RowOnLeave)
|
||||
row:SetScript("OnClick", RowOnClick)
|
||||
|
||||
frame:SetWidth(340)
|
||||
frame:SetHeight(25)
|
||||
frame:SetPoint("TOPLEFT", 5, i * -25 + 20)
|
||||
-- caption
|
||||
row.caption = row:CreateFontString(nil, "LOW", "GameFontNormal")
|
||||
row.caption:SetFont(pfUI.font_default, C.global.font_size + 2, "OUTLINE")
|
||||
row.caption:SetPoint("LEFT", row, "LEFT", 2, 0)
|
||||
row.caption:SetFontObject(GameFontWhite)
|
||||
row.caption:SetJustifyH("LEFT")
|
||||
|
||||
frame:SetBackdrop(pfUI.backdrop_hover)
|
||||
frame:SetBackdropBorderColor(1,1,1,.04)
|
||||
|
||||
frame:EnableMouse(1)
|
||||
frame:SetScript("OnEnter", AddonOnEnter)
|
||||
frame:SetScript("OnLeave", AddonOnLeave)
|
||||
frame:SetScript("OnClick", AddonOnClick)
|
||||
|
||||
-- caption
|
||||
frame.caption = frame:CreateFontString("Status", "LOW", "GameFontNormal")
|
||||
frame.caption:SetFont(pfUI.font_default, C.global.font_size + 2, "OUTLINE")
|
||||
frame.caption:SetPoint("LEFT", frame, "LEFT", 2, 0)
|
||||
frame.caption:SetFontObject(GameFontWhite)
|
||||
frame.caption:SetJustifyH("LEFT")
|
||||
frame.caption:SetText(atitle)
|
||||
|
||||
-- input field
|
||||
frame.input = CreateFrame("CheckButton", nil, frame, "UICheckButtonTemplate")
|
||||
frame.input:SetFrameLevel(3)
|
||||
frame.input:SetNormalTexture("")
|
||||
frame.input:SetPushedTexture("")
|
||||
frame.input:SetHighlightTexture("")
|
||||
CreateBackdrop(frame.input, nil, true)
|
||||
frame.input:SetBackdropBorderColor(.3,.3,.3,1)
|
||||
frame.input:SetWidth(14)
|
||||
frame.input:SetHeight(14)
|
||||
frame.input:SetPoint("RIGHT" , -5, 1)
|
||||
frame.input:SetID(i)
|
||||
frame.input:SetScript("OnClick", InputOnClick)
|
||||
end
|
||||
|
||||
if IsAddOnLoaded(i) then
|
||||
pfUI.addons.list[i].input:SetChecked()
|
||||
pfUI.addons.list[i].caption:SetAlpha(1)
|
||||
else
|
||||
pfUI.addons.list[i].caption:SetAlpha(.5)
|
||||
end
|
||||
-- input field
|
||||
row.input = CreateFrame("CheckButton", nil, row, "UICheckButtonTemplate")
|
||||
row.input:SetNormalTexture("")
|
||||
row.input:SetPushedTexture("")
|
||||
row.input:SetHighlightTexture("")
|
||||
CreateBackdrop(row.input, nil, true)
|
||||
row.input:SetBackdropBorderColor(.3,.3,.3,1)
|
||||
row.input:SetSize(14, 14)
|
||||
row.input:SetPoint("RIGHT" , -5, 1)
|
||||
row.input:SetScript("OnClick", InputOnClick)
|
||||
end
|
||||
end)
|
||||
|
||||
-- show only frames in visible range
|
||||
function pfUI.addons.scroll:ShowVisibleRange()
|
||||
local top_index, bottom_index, range
|
||||
range = floor(pfUI.addons.scroll:GetHeight() / 25) + 1
|
||||
top_index = floor(pfUI.addons.scroll:GetVerticalScroll() / 25) > 0 and floor(pfUI.addons.scroll:GetVerticalScroll() / 25) or 1
|
||||
bottom_index = top_index + range
|
||||
for i=1, GetNumAddOns() do
|
||||
if i >= top_index and i <= bottom_index then
|
||||
pfUI.addons.list[i]:Show()
|
||||
else
|
||||
pfUI.addons.list[i]:Hide()
|
||||
end
|
||||
end
|
||||
row.addon = addon
|
||||
row.caption:SetText(addon.title)
|
||||
row.caption:SetAlpha(IsAddOnLoaded(addon.index) and 1 or .5)
|
||||
row.input:SetChecked(IsAddonEnabled(addon.index))
|
||||
end
|
||||
|
||||
pfUI.addons.scroll.slider:SetScript("OnValueChanged", function()
|
||||
this:GetParent():SetVerticalScroll(this:GetValue())
|
||||
end)
|
||||
pfUI.addons.scroll:SetScript("OnScrollRangeChanged", function()
|
||||
this.slider:SetMinMaxValues(1, floor(this:GetVerticalScrollRange() + 25))
|
||||
end)
|
||||
pfUI.addons.scroll:SetScript("OnShow", function()
|
||||
this.slider:SetValue(floor(this:GetVerticalScroll()))
|
||||
pfUI.addons.scroll:ShowVisibleRange()
|
||||
end)
|
||||
pfUI.addons.scroll:SetScript("OnVerticalScroll", function()
|
||||
pfUI.addons.scroll:ShowVisibleRange()
|
||||
this.slider:SetValue(floor(this:GetVerticalScroll()))
|
||||
-- addon list: a ScrollBox keeps rows only for the addons in view
|
||||
pfUI.addons.list = CreateFrame("Frame", "pfAddonList", pfUI.addons, "pfUIScrollBoxListTemplate")
|
||||
pfUI.addons.list:SetSize(370, 420)
|
||||
pfUI.addons.list:SetPoint("BOTTOM", 0, 5)
|
||||
CreateBackdrop(pfUI.addons.list, nil, true)
|
||||
|
||||
local view = CreateScrollBoxListLinearView(5, 5, 5, 8)
|
||||
view:SetElementExtent(25)
|
||||
view:SetElementInitializer("Button", InitRow)
|
||||
ScrollUtil.InitScrollBoxListWithScrollBar(pfUI.addons.list.ScrollBox, pfUI.addons.list.ScrollBar, view)
|
||||
pfUI.addons.list.ScrollBox:SetDataProvider(CreateDataProvider(addons))
|
||||
|
||||
-- a load-on-demand addon that loads brightens its row
|
||||
pfUI.addons.list:RegisterEvent("ADDON_LOADED")
|
||||
pfUI.addons.list:SetScript("OnEvent", function(self)
|
||||
self.ScrollBox:ReinitializeFrames()
|
||||
end)
|
||||
|
||||
end)
|
||||
|
||||
+15
-20
@@ -1,5 +1,4 @@
|
||||
pfUI:RegisterModule("afkcam", function ()
|
||||
local MARKED_AFK_CAPTURE = SanitizePattern(MARKED_AFK_MESSAGE)
|
||||
local social_chats = {
|
||||
"CHAT_MSG_SAY",
|
||||
"CHAT_MSG_WHISPER",
|
||||
@@ -30,27 +29,26 @@ pfUI:RegisterModule("afkcam", function ()
|
||||
overlay:SetFrameStrata("DIALOG")
|
||||
overlay:SetAllPoints(WorldFrame)
|
||||
|
||||
overlay:SetScript("OnMouseUp",function()
|
||||
SendChatMessage("","AFK")
|
||||
this._parent:stop()
|
||||
end)
|
||||
-- /afk toggles, so send it only while AFK is still set: once the client
|
||||
-- or the server has cleared it, /afk would set it again
|
||||
local function Wake()
|
||||
if IsChatAFK() then SendChatMessage("", "AFK") end
|
||||
afkcam:stop()
|
||||
end
|
||||
overlay:SetScript("OnMouseUp", Wake)
|
||||
overlay:SetScript("OnShow", function()
|
||||
this:EnableKeyboard(true)
|
||||
end)
|
||||
overlay:SetScript("OnHide", function()
|
||||
this:EnableKeyboard(false)
|
||||
end)
|
||||
overlay:SetScript("OnKeyUp",function()
|
||||
SendChatMessage("","AFK")
|
||||
this._parent:stop()
|
||||
end)
|
||||
overlay:SetScript("OnKeyUp", Wake)
|
||||
overlay:Hide()
|
||||
|
||||
local chat = CreateFrame("ScrollingMessageFrame", "pfAFKCamChat", overlay)
|
||||
chat:EnableMouse(false)
|
||||
chat:EnableMouseWheel(true)
|
||||
chat:SetHeight(150)
|
||||
chat:SetWidth(500)
|
||||
chat:SetSize(500, 150)
|
||||
chat:SetPoint("BOTTOMLEFT",overlay,"BOTTOMLEFT", 10, 10)
|
||||
chat:SetTimeVisible(1800.0)
|
||||
chat:SetMaxLines(500)
|
||||
@@ -84,7 +82,6 @@ pfUI:RegisterModule("afkcam", function ()
|
||||
end)
|
||||
overlay.chat = chat
|
||||
|
||||
overlay._parent = afkcam
|
||||
afkcam.overlay = overlay
|
||||
|
||||
local clock = CreateFrame("Frame", "pfAFKClock", overlay)
|
||||
@@ -151,9 +148,7 @@ pfUI:RegisterModule("afkcam", function ()
|
||||
delay:SetScript("OnUpdate", function()
|
||||
if ( this.tick or 0) > GetTime() then return else this.tick = GetTime() + 1 end
|
||||
|
||||
local name = UnitName("player")
|
||||
local cast = pfGetCastInfo(name)
|
||||
if not cast then cast = pfGetChannelInfo(name) end
|
||||
local cast = C_Spell.UnitCastingInfo("player") or C_Spell.UnitChannelInfo("player")
|
||||
if not this.delay then this.delay = 0 end
|
||||
|
||||
if cast then
|
||||
@@ -167,12 +162,12 @@ pfUI:RegisterModule("afkcam", function ()
|
||||
end)
|
||||
|
||||
afkcam:SetScript("OnEvent", function()
|
||||
if event == "CHAT_MSG_SYSTEM" then
|
||||
if (arg1 == _G.MARKED_AFK) or strfind(arg1, MARKED_AFK_CAPTURE) then
|
||||
if event == "PLAYER_FLAGS_CHANGED" then
|
||||
if UnitIsAFK('player') then
|
||||
delay:Show()
|
||||
elseif (arg1 == _G.CLEARED_AFK) then
|
||||
else
|
||||
delay:Hide()
|
||||
this:stop()
|
||||
if this._spinning then this:stop() end
|
||||
end
|
||||
else
|
||||
if this._spinning then
|
||||
@@ -182,7 +177,7 @@ pfUI:RegisterModule("afkcam", function ()
|
||||
end
|
||||
end)
|
||||
|
||||
afkcam:RegisterEvent("CHAT_MSG_SYSTEM")
|
||||
afkcam:RegisterEvent("PLAYER_FLAGS_CHANGED")
|
||||
afkcam:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||
afkcam:RegisterEvent("PLAYER_LEAVING_WORLD") -- reseting cvars on PLAYER_LOGOUT crashes the client ¯\_(ツ)_/¯
|
||||
end)
|
||||
|
||||
@@ -2,6 +2,11 @@ pfUI:RegisterModule("autoshift", function ()
|
||||
pfUI.autoshift = CreateFrame("Frame")
|
||||
pfUI.autoshift:RegisterEvent("UI_ERROR_MESSAGE")
|
||||
|
||||
-- Empty stub kept only so Turtle WoW's pfUI-turtle addon doesn't error when
|
||||
-- its obsolete moonkin autoshift module iterates pfUI.autoshift.shapeshifts.
|
||||
-- This fork drives autoshift off GetShapeshiftFormID() and no longer uses it.
|
||||
pfUI.autoshift.shapeshifts = {}
|
||||
|
||||
pfUI.autoshift.scanString = string.gsub(SPELL_FAILED_ONLY_SHAPESHIFT, "%%s", "(.+)")
|
||||
|
||||
pfUI.autoshift.errors = { SPELL_FAILED_NOT_MOUNTED, ERR_ATTACK_MOUNTED, ERR_TAXIPLAYERALREADYMOUNTED,
|
||||
|
||||
@@ -19,12 +19,7 @@ pfUI:RegisterModule("autovendor", function ()
|
||||
local startGold = GetMoney()
|
||||
C_MerchantFrame.SellAllJunkItems()
|
||||
|
||||
local reporter = CreateFrame("Frame")
|
||||
reporter.deadline = GetTime() + 0.3
|
||||
reporter:SetScript("OnUpdate", function()
|
||||
if GetTime() < this.deadline then return end
|
||||
this:SetScript("OnUpdate", nil)
|
||||
this:Hide()
|
||||
C_Timer.After(0.3, function()
|
||||
local income = GetMoney() - startGold
|
||||
if income > 0 then
|
||||
DEFAULT_CHAT_FRAME:AddMessage(T["Your vendor trash has been sold and you earned"] .. " " .. CreateGoldString(income))
|
||||
@@ -61,9 +56,8 @@ pfUI:RegisterModule("autovendor", function ()
|
||||
|
||||
-- Setup Autosell button
|
||||
autovendor.button = CreateFrame("Button", "pfMerchantAutoVendorButton", MerchantFrame)
|
||||
autovendor.button:SetWidth(36)
|
||||
autovendor.button:SetHeight(36)
|
||||
autovendor.button.icon = autovendor.button:CreateTexture("ARTWORK")
|
||||
autovendor.button:SetSize(36, 36)
|
||||
autovendor.button.icon = autovendor.button:CreateTexture(nil, "ARTWORK")
|
||||
autovendor.button.icon:SetTexture("Interface\\Icons\\Spell_Shadow_SacrificialShield")
|
||||
autovendor.button:SetScript("OnEnter", function()
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
|
||||
+66
-112
@@ -6,7 +6,12 @@ pfUI:RegisterModule("bags", function ()
|
||||
[1804] = {frame="picklock"},
|
||||
}
|
||||
|
||||
local scanner = libtipscan:GetScanner("input_search")
|
||||
local function BagSortOpts()
|
||||
return {
|
||||
reverse = C.appearance.bags.sortreverse == "1",
|
||||
reversePrio = C.appearance.bags.sortprioreverse == "1",
|
||||
}
|
||||
end
|
||||
|
||||
-- function to detect openable items in inventory
|
||||
local openable = { bag = nil, slot = nil, icon = nil }
|
||||
@@ -88,6 +93,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
pfUI.bag:RegisterEvent("ITEM_LOCK_CHANGED")
|
||||
pfUI.bag:RegisterEvent("SPELLS_CHANGED")
|
||||
pfUI.bag:RegisterEvent("MERCHANT_CLOSED")
|
||||
pfUI.bag:RegisterEvent("INVENTORY_SEARCH_UPDATE")
|
||||
|
||||
pfUI.bag.delay = { UpdateBag = {} }
|
||||
|
||||
@@ -115,6 +121,11 @@ pfUI:RegisterModule("bags", function ()
|
||||
pfUI.bag:UpdateItemLock()
|
||||
end
|
||||
|
||||
if this.delay.UpdateSearch then
|
||||
this.delay.UpdateSearch = nil
|
||||
pfUI.bag:UpdateSearch()
|
||||
end
|
||||
|
||||
for bag in pairs(this.delay.UpdateBag) do
|
||||
this.delay.UpdateBag[bag] = nil
|
||||
pfUI.bag:UpdateBag(bag)
|
||||
@@ -152,6 +163,10 @@ pfUI:RegisterModule("bags", function ()
|
||||
this.delay.UpdateItemLock = true
|
||||
end
|
||||
|
||||
if event == "INVENTORY_SEARCH_UPDATE" then
|
||||
this.delay.UpdateSearch = true
|
||||
end
|
||||
|
||||
if event == "PLAYERBANKSLOTS_CHANGED" then
|
||||
this.delay.UpdateBag[-1] = true
|
||||
end
|
||||
@@ -319,8 +334,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
default_border + x*(frame.button_size+default_border*3),
|
||||
-default_border*2 - y*(frame.button_size+default_border*3) - topspace)
|
||||
|
||||
pfUI.bags[bag].slots[slot].frame:SetHeight(frame.button_size)
|
||||
pfUI.bags[bag].slots[slot].frame:SetWidth(frame.button_size)
|
||||
pfUI.bags[bag].slots[slot].frame:SetSize(frame.button_size, frame.button_size)
|
||||
|
||||
if x >= rowlength - 1 then
|
||||
y = y + 1
|
||||
@@ -337,12 +351,13 @@ pfUI:RegisterModule("bags", function ()
|
||||
local chat = pfUI.chat and ( object == "bank" and pfUI.chat.left or pfUI.chat.right) or nil
|
||||
|
||||
frame:SetScript("OnShow", function()
|
||||
frame.opened = true
|
||||
if C.appearance.bags.hidechat == "1" and chat and chat:IsVisible() then
|
||||
frame.chatWasOpen = true
|
||||
chat:Hide()
|
||||
end
|
||||
if C.appearance.bags.autoSortOnOpen == "1" then
|
||||
libbagsort:Sort({0, 1, 2, 3, 4})
|
||||
libbagsort:Sort({0, 1, 2, 3, 4}, BagSortOpts())
|
||||
end
|
||||
pfUI.bag:CreateBags(object)
|
||||
PlaySound("INTERFACESOUND_BACKPACKOPEN")
|
||||
@@ -355,6 +370,10 @@ pfUI:RegisterModule("bags", function ()
|
||||
end
|
||||
pfUI.bag:CreateBags(object)
|
||||
PlaySound("INTERFACESOUND_BACKPACKCLOSE")
|
||||
if frame.opened then
|
||||
frame.opened = nil
|
||||
pfUI.events:TriggerEvent("bag:closed", object)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
@@ -366,6 +385,21 @@ pfUI:RegisterModule("bags", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- dim the slots that the bag search (C_Container.SetItemSearch) filters out
|
||||
local searchInfo = {}
|
||||
function pfUI.bag:UpdateSlotSearch(bag, slot)
|
||||
local info = C_Container.GetContainerItemInfo(bag, slot, searchInfo)
|
||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(info and info.isFiltered and .25 or 1)
|
||||
end
|
||||
|
||||
function pfUI.bag:UpdateSearch()
|
||||
for bag = -2, 11 do
|
||||
for slot in ipairs(pfUI.bags[bag].slots) do
|
||||
pfUI.bag:UpdateSlotSearch(bag, slot)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function pfUI.bag:UpdateSlot(bag, slot)
|
||||
if not pfUI.bags[bag] then return end
|
||||
|
||||
@@ -385,14 +419,15 @@ pfUI:RegisterModule("bags", function ()
|
||||
if tpl == "BankItemButtonGenericTemplate" then
|
||||
local bankslot = pfUI.bags[bag].slots[slot].frame
|
||||
local name = "pfBag" .. bag .. "item" .. slot .. "Cooldown"
|
||||
bankslot.cd = CreateFrame(COOLDOWN_FRAME_TYPE, name, bankslot, "CooldownFrameTemplate")
|
||||
bankslot.cd:SetAllPoints(bankslot)
|
||||
bankslot.cd = CreateFrame("Cooldown", name, bankslot, "CooldownFrameTemplate")
|
||||
bankslot.cd.pfCooldownStyleAnimation = 1
|
||||
bankslot.cd.pfCooldownType = "ALL"
|
||||
bankslot.cd.pfCooldownReverse = tonumber(C.appearance.bags.cooldown_reverse) or 0
|
||||
bankslot.cd.pfCooldownType = "NOGCD"
|
||||
else
|
||||
local bagslot = pfUI.bags[bag].slots[slot].frame
|
||||
bagslot.cd = _G[bagslot:GetName().."Cooldown"]
|
||||
bagslot.cd.pfCooldownType = "ALL"
|
||||
bagslot.cd.pfCooldownType = "NOGCD"
|
||||
bagslot.cd.pfCooldownReverse = tonumber(C.appearance.bags.cooldown_reverse) or 0
|
||||
end
|
||||
|
||||
if not pfUI.bags[bag].slots[slot].frame.backdrop then
|
||||
@@ -443,7 +478,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
end
|
||||
end
|
||||
|
||||
local _, _, q, _, _, _, itype = GetItemInfo(itemID)
|
||||
local _, _, q, _, _, _, itype = C_Item.GetItemInfo(itemID)
|
||||
|
||||
-- running advanced item color scan
|
||||
if C.appearance.bags.borderonlygear == "0" and texture and quality and quality < 1 then
|
||||
@@ -453,6 +488,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
SetItemButtonTexture(pfUI.bags[bag].slots[slot].frame, texture)
|
||||
SetItemButtonCount(pfUI.bags[bag].slots[slot].frame, count)
|
||||
SetItemButtonDesaturated(pfUI.bags[bag].slots[slot].frame, locked, 0.5, 0.5, 0.5)
|
||||
pfUI.bag:UpdateSlotSearch(bag, slot)
|
||||
|
||||
local hasItem = texture and 1 or nil
|
||||
pfUI.bags[bag].slots[slot].frame.hasItem = hasItem
|
||||
@@ -533,8 +569,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
local width = (frame.button_size/5*4 + default_border*2) * (max-min+1+extra)
|
||||
local height = default_border + (frame.button_size/5*4 + default_border)
|
||||
|
||||
frame.bagslots:SetWidth(width)
|
||||
frame.bagslots:SetHeight(height)
|
||||
frame.bagslots:SetSize(width, height)
|
||||
for slot=min, max do
|
||||
if not frame.bagslots.slots[slot] then
|
||||
frame.bagslots.slots[slot] = {}
|
||||
@@ -594,8 +629,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
|
||||
frame.bagslots.slots[slot].frame:ClearAllPoints()
|
||||
frame.bagslots.slots[slot].frame:SetPoint("TOPLEFT", frame.bagslots, "TOPLEFT", left, top)
|
||||
frame.bagslots.slots[slot].frame:SetHeight(frame.button_size/5*4)
|
||||
frame.bagslots.slots[slot].frame:SetWidth(frame.button_size/5*4)
|
||||
frame.bagslots.slots[slot].frame:SetSize(frame.button_size/5*4, frame.button_size/5*4)
|
||||
|
||||
CreateBackdrop(frame.bagslots.slots[slot].frame, default_border)
|
||||
frame.bagslots.slots[slot].frame:Show()
|
||||
@@ -614,8 +648,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
end
|
||||
frame.bagslots.buy:SetPoint("RIGHT", frame.bagslots, "RIGHT", -default_border, 0)
|
||||
CreateBackdrop(frame.bagslots.buy, default_border)
|
||||
frame.bagslots.buy:SetHeight(frame.button_size/5*4)
|
||||
frame.bagslots.buy:SetWidth(frame.button_size/5*4)
|
||||
frame.bagslots.buy:SetSize(frame.button_size/5*4, frame.button_size/5*4)
|
||||
frame.bagslots.buy:SetText("+")
|
||||
frame.bagslots.buy:SetTextColor(.5,.5,1,1)
|
||||
frame.bagslots.buy:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
@@ -707,8 +740,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.close = CreateFrame("Button", "pfBagClose", frame)
|
||||
frame.close:SetPoint("TOPRIGHT", -default_border*1,-default_border )
|
||||
CreateBackdrop(frame.close, default_border)
|
||||
frame.close:SetHeight(12)
|
||||
frame.close:SetWidth(12)
|
||||
frame.close:SetSize(12, 12)
|
||||
frame.close.texture = frame.close:CreateTexture("pfBagClose")
|
||||
frame.close.texture:SetTexture(pfUI.media["img:close"])
|
||||
frame.close.texture:ClearAllPoints()
|
||||
@@ -733,8 +765,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.bags = CreateFrame("Button", "pfBagSlotShow", frame)
|
||||
frame.bags:SetPoint("TOPRIGHT", frame.close, "TOPLEFT", -default_border*3, 0)
|
||||
CreateBackdrop(frame.bags, default_border)
|
||||
frame.bags:SetHeight(12)
|
||||
frame.bags:SetWidth(12)
|
||||
frame.bags:SetSize(12, 12)
|
||||
frame.bags:SetTextColor(1,1,.25,1)
|
||||
frame.bags:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
frame.bags.texture = frame.bags:CreateTexture("pfBagArrowUp")
|
||||
@@ -761,11 +792,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
end)
|
||||
|
||||
frame.bags:SetScript("OnClick", function()
|
||||
if pfUI.bag.right.bagslots:IsShown() then
|
||||
pfUI.bag.right.bagslots:Hide()
|
||||
else
|
||||
pfUI.bag.right.bagslots:Show()
|
||||
end
|
||||
pfUI.bag.right.bagslots:SetShown(not pfUI.bag.right.bagslots:IsShown())
|
||||
end)
|
||||
end
|
||||
|
||||
@@ -774,8 +801,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.open = CreateFrame("Button", "pfBagSlotOpen", frame)
|
||||
frame.open:SetPoint("TOPRIGHT", frame.bags, "TOPLEFT", -default_border*3, 0)
|
||||
CreateBackdrop(frame.open, default_border)
|
||||
frame.open:SetHeight(12)
|
||||
frame.open:SetWidth(12)
|
||||
frame.open:SetSize(12, 12)
|
||||
frame.open:SetTextColor(1,1,.25,1)
|
||||
frame.open:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
frame.open.texture = frame.open:CreateTexture("pfBagOpenContainer")
|
||||
@@ -833,8 +859,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.disenchant = CreateFrame("Button", "pfBagSlotDisenchant", frame)
|
||||
frame.disenchant:SetPoint("TOPRIGHT", frame.open, "TOPLEFT", -default_border*3, 0)
|
||||
CreateBackdrop(frame.disenchant, default_border)
|
||||
frame.disenchant:SetHeight(12)
|
||||
frame.disenchant:SetWidth(12)
|
||||
frame.disenchant:SetSize(12, 12)
|
||||
frame.disenchant:SetTextColor(1,1,.25,1)
|
||||
frame.disenchant:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
frame.disenchant.texture = frame.disenchant:CreateTexture("pfBagDisenchant")
|
||||
@@ -876,8 +901,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.picklock = CreateFrame("Button", "pfBagSlotPicklock", frame)
|
||||
frame.picklock:SetPoint("TOPRIGHT", frame.disenchant, "TOPLEFT", -default_border*3, 0)
|
||||
CreateBackdrop(frame.picklock, default_border)
|
||||
frame.picklock:SetHeight(12)
|
||||
frame.picklock:SetWidth(12)
|
||||
frame.picklock:SetSize(12, 12)
|
||||
frame.picklock:SetTextColor(1,1,.25,1)
|
||||
frame.picklock:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
frame.picklock.texture = frame.picklock:CreateTexture("pfBagPicklock")
|
||||
@@ -919,8 +943,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.keys = CreateFrame("Button", "pfBagSlotShow", frame)
|
||||
frame.keys:SetPoint("TOPRIGHT", frame.picklock, "TOPLEFT", -default_border*3, 0)
|
||||
CreateBackdrop(frame.keys, default_border)
|
||||
frame.keys:SetHeight(12)
|
||||
frame.keys:SetWidth(12)
|
||||
frame.keys:SetSize(12, 12)
|
||||
frame.keys:SetTextColor(1,1,.25,1)
|
||||
frame.keys:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
frame.keys.texture = frame.keys:CreateTexture("pfBagArrowUp")
|
||||
@@ -962,8 +985,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.sort = CreateFrame("Button", "pfBagSort", frame)
|
||||
frame.sort:SetPoint("TOPRIGHT", frame.keys, "TOPLEFT", -default_border*3, 0)
|
||||
CreateBackdrop(frame.sort, default_border)
|
||||
frame.sort:SetHeight(12)
|
||||
frame.sort:SetWidth(12)
|
||||
frame.sort:SetSize(12, 12)
|
||||
frame.sort.texture = frame.sort:CreateTexture("pfBagSortIcon")
|
||||
frame.sort.texture:SetTexture(pfUI.media["img:sort"])
|
||||
frame.sort.texture:ClearAllPoints()
|
||||
@@ -975,7 +997,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.sort.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
||||
frame.sort.texture:SetVertexColor(1,1,.25,1)
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetText("Sort Bags")
|
||||
GameTooltip:SetText(T["Sort Bags"])
|
||||
GameTooltip:Show()
|
||||
end)
|
||||
|
||||
@@ -988,7 +1010,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
end)
|
||||
|
||||
frame.sort:SetScript("OnClick", function()
|
||||
libbagsort:Sort({0, 1, 2, 3, 4})
|
||||
libbagsort:Sort({0, 1, 2, 3, 4}, BagSortOpts())
|
||||
end)
|
||||
end
|
||||
|
||||
@@ -996,8 +1018,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
if not frame.gold and (C.appearance.bags.movable == "1" or not pfUI.panel) then
|
||||
frame.gold = CreateFrame("Frame", "pfBagGoldString", frame)
|
||||
frame.gold:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -4, 1)
|
||||
frame.gold:SetWidth(200)
|
||||
frame.gold:SetHeight(18)
|
||||
frame.gold:SetSize(200, 18)
|
||||
frame.gold:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
frame.gold:RegisterEvent("PLAYER_MONEY")
|
||||
frame.gold:SetScript("OnEvent", function()
|
||||
@@ -1013,7 +1034,6 @@ pfUI:RegisterModule("bags", function ()
|
||||
-- bag search
|
||||
if not frame.search then
|
||||
frame.search = CreateFrame("Frame", "pfBagSearch", frame)
|
||||
frame.search.db = {}
|
||||
frame.search:SetHeight(12)
|
||||
frame.search:SetPoint("TOPLEFT", frame, "TOPLEFT", default_border, -default_border)
|
||||
frame.search:SetPoint("TOPRIGHT", frame.sort, "TOPLEFT", -default_border*3, -default_border)
|
||||
@@ -1038,72 +1058,18 @@ pfUI:RegisterModule("bags", function ()
|
||||
|
||||
frame.search.edit:SetScript("OnEditFocusLost", function()
|
||||
this:SetText(T["Search"])
|
||||
for bag=-2, 11 do
|
||||
local bagsize = GetContainerNumSlots(bag)
|
||||
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
||||
for slot=1, bagsize do
|
||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
||||
end
|
||||
end
|
||||
C_Container.SetItemSearch("")
|
||||
end)
|
||||
|
||||
frame.search.edit:SetScript("OnTextChanged", function()
|
||||
if this:GetText() == T["Search"] then return end
|
||||
for bag=-2, 11 do
|
||||
local bagsize = GetContainerNumSlots(bag)
|
||||
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
||||
for slot=1, bagsize do
|
||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(.25)
|
||||
local texture, itemCount, locked, quality, readable = GetContainerItemInfo(bag, slot)
|
||||
if itemCount then
|
||||
local itemLink = GetContainerItemLink(bag, slot)
|
||||
local itemstring = string.sub(itemLink, string.find(itemLink, "%[")+1, string.find(itemLink, "%]")-1)
|
||||
|
||||
if C.appearance.bags.fulltext == "1" then
|
||||
if not frame.search.db[itemLink] then
|
||||
scanner:SetBagItem(bag, slot)
|
||||
local text = scanner:Text()
|
||||
|
||||
local str = ""
|
||||
for k, v in pairs(text) do
|
||||
str = str .. (v[1] or "") .. (v[2] or "")
|
||||
end
|
||||
|
||||
frame.search.db[itemLink] = strlower(str)
|
||||
end
|
||||
|
||||
if strfind(frame.search.db[itemLink], strlower(this:GetText()), 1, true) then
|
||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
||||
end
|
||||
end
|
||||
|
||||
if strfind(strlower(itemstring), strlower(this:GetText()), 1, true) then
|
||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
C_Container.SetItemSearch(this:GetText())
|
||||
end)
|
||||
|
||||
frame.search:SetScript("OnLeave", function()
|
||||
frame.search.edit:ClearFocus()
|
||||
end)
|
||||
|
||||
frame.search:SetScript("OnHide", function()
|
||||
frame.search.edit:SetText(T["Search"])
|
||||
for bag = -2, 11 do
|
||||
if pfUI.bags[bag] then
|
||||
local bagsize = GetContainerNumSlots(bag)
|
||||
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
||||
for slot = 1, bagsize do
|
||||
if pfUI.bags[bag] and pfUI.bags[bag].slots[slot] then
|
||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
frame.search.edit:SetScript("OnMouseUp", function()
|
||||
if arg1 == "RightButton" then
|
||||
this:ClearFocus()
|
||||
@@ -1112,17 +1078,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
|
||||
frame.search:SetScript("OnHide", function()
|
||||
frame.search.edit:SetText(T["Search"])
|
||||
for bag = -2, 11 do
|
||||
if pfUI.bags[bag] then
|
||||
local bagsize = GetContainerNumSlots(bag)
|
||||
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
||||
for slot = 1, bagsize do
|
||||
if pfUI.bags[bag] and pfUI.bags[bag].slots[slot] then
|
||||
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
C_Container.SetItemSearch("")
|
||||
end)
|
||||
end
|
||||
else
|
||||
@@ -1133,8 +1089,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.close = CreateFrame("Button", "pfBagClose", frame)
|
||||
frame.close:SetPoint("TOPRIGHT", -default_border*1,-default_border )
|
||||
CreateBackdrop(frame.close, default_border)
|
||||
frame.close:SetHeight(12)
|
||||
frame.close:SetWidth(12)
|
||||
frame.close:SetSize(12, 12)
|
||||
frame.close.texture = frame.close:CreateTexture("pfBagClose")
|
||||
frame.close.texture:SetTexture(pfUI.media["img:close"])
|
||||
frame.close.texture:ClearAllPoints()
|
||||
@@ -1159,8 +1114,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.bags = CreateFrame("Button", "pfBagSlotShow", frame)
|
||||
frame.bags:SetPoint("TOPRIGHT", frame.close, "TOPLEFT", -default_border*3, 0)
|
||||
CreateBackdrop(frame.bags, default_border)
|
||||
frame.bags:SetHeight(12)
|
||||
frame.bags:SetWidth(12)
|
||||
frame.bags:SetSize(12, 12)
|
||||
frame.bags:SetTextColor(1,1,.25,1)
|
||||
frame.bags:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
frame.bags.texture = frame.bags:CreateTexture("pfBagArrowUp")
|
||||
@@ -1213,7 +1167,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
frame.sort.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
||||
frame.sort.texture:SetVertexColor(1,1,.25,1)
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetText("Sort Bank")
|
||||
GameTooltip:SetText(T["Sort Bank"])
|
||||
GameTooltip:Show()
|
||||
end)
|
||||
|
||||
@@ -1226,7 +1180,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
end)
|
||||
|
||||
frame.sort:SetScript("OnClick", function()
|
||||
libbagsort:Sort({-1, 5, 6, 7, 8, 9, 10})
|
||||
libbagsort:Sort({-1, 5, 6, 7, 8, 9, 10}, BagSortOpts())
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
+3
-5
@@ -2,14 +2,12 @@ pfUI:RegisterModule("bgscore", function ()
|
||||
local bgframe = WorldStateAlwaysUpFrame
|
||||
if not bgframe then
|
||||
bgframe = CreateFrame("Frame", "WorldStateAlwaysUpFrame", UIParent)
|
||||
bgframe:SetWidth(200)
|
||||
bgframe:SetHeight(25)
|
||||
bgframe:SetSize(200, 25)
|
||||
bgframe:SetPoint("TOP", UIParent, "TOP", 0, -100)
|
||||
end
|
||||
|
||||
local mover = CreateFrame("Frame", "pfUIBGScoreMover", UIParent)
|
||||
mover:SetWidth(220)
|
||||
mover:SetHeight(30)
|
||||
mover:SetSize(220, 30)
|
||||
mover:SetPoint("TOP", UIParent, "TOP", 0, -100)
|
||||
mover:SetFrameStrata("DIALOG")
|
||||
mover:SetMovable(true)
|
||||
@@ -34,7 +32,7 @@ pfUI:RegisterModule("bgscore", function ()
|
||||
-- Title label
|
||||
local title = mover:CreateFontString(nil, "OVERLAY")
|
||||
title:SetFont("Fonts\\FRIZQT__.TTF", 14, "OUTLINE")
|
||||
title:SetText("Battleground Frames")
|
||||
title:SetText(T["Battleground Frames"])
|
||||
title:SetPoint("TOP", mover, "TOP", 0, -2)
|
||||
|
||||
-- BG score preview text
|
||||
|
||||
+5
-12
@@ -12,15 +12,11 @@ pfUI:RegisterModule("bubbles", function ()
|
||||
pfUI.bubbles:RegisterEvent("CHAT_MSG_MONSTER_PARTY")
|
||||
|
||||
pfUI.bubbles:SetScript("OnEvent", function()
|
||||
pfUI.bubbles:SetScript("OnUpdate", pfUI.bubbles.ScanBubbles)
|
||||
-- Bubble frames are attached to WorldFrame after the chat event fires,
|
||||
-- so wait one tick before scanning.
|
||||
RunNextFrame(function() pfUI.bubbles:ScanBubbles() end)
|
||||
end)
|
||||
|
||||
function pfUI.bubbles:IsBubble(f)
|
||||
if f:GetName() then return end
|
||||
if not f:GetRegions() then return end
|
||||
return f:GetRegions().GetTexture and f:GetRegions():GetTexture() == "Interface\\Tooltips\\ChatBubble-Background"
|
||||
end
|
||||
|
||||
function pfUI.bubbles:ProcessBubble(f)
|
||||
f.text:Hide()
|
||||
f.text:SetFont(pfUI.font_default, tonumber(C.global.font_size) * UIParent:GetScale(), "OUTLINE")
|
||||
@@ -32,9 +28,8 @@ pfUI:RegisterModule("bubbles", function ()
|
||||
end
|
||||
|
||||
function pfUI.bubbles:ScanBubbles()
|
||||
local childs = { WorldFrame:GetChildren() }
|
||||
for _, f in pairs(childs) do
|
||||
if not f.frame and pfUI.bubbles:IsBubble(f) then
|
||||
for _, f in ipairs(C_ChatBubbles.GetAllChatBubbles()) do
|
||||
if not f.frame then
|
||||
local textures = {f:GetRegions()}
|
||||
for _, object in pairs(textures) do
|
||||
if object:GetObjectType() == "Texture" then
|
||||
@@ -66,7 +61,5 @@ pfUI:RegisterModule("bubbles", function ()
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
pfUI.bubbles:SetScript("OnUpdate", nil)
|
||||
end
|
||||
end)
|
||||
|
||||
+91
-37
@@ -7,10 +7,19 @@ pfUI:RegisterModule("buff", function ()
|
||||
|
||||
local br, bg, bb, ba = GetStringColor(pfUI_config.appearance.border.color)
|
||||
|
||||
-- Player aura slot ids, enumerated once per refresh pass (ScanPlayerAuraSlots)
|
||||
-- and read per button by its aura index: one GetAuraSlots walk per range
|
||||
-- instead of a by-index walk per button.
|
||||
local helpfulSlots, harmfulSlots = {}, {}
|
||||
local function ScanPlayerAuraSlots()
|
||||
ScanAuraSlots("player", "HELPFUL", helpfulSlots, 32)
|
||||
ScanAuraSlots("player", "HARMFUL", harmfulSlots, 16)
|
||||
end
|
||||
|
||||
local function RefreshBuffButton(buff)
|
||||
if buff.btype == "HELPFUL" then
|
||||
if C.buffs.separateweapons == "1" then
|
||||
buff.id = buff.gid - (buff.weapon ~= nill and buff.gid or 0)
|
||||
buff.id = buff.gid - (buff.weapon ~= nil and buff.gid or 0)
|
||||
else
|
||||
buff.id = buff.gid - pfUI.buff.wepbuffs.count
|
||||
end
|
||||
@@ -23,7 +32,8 @@ pfUI:RegisterModule("buff", function ()
|
||||
CreateBackdropShadow(buff)
|
||||
end
|
||||
|
||||
local aura = C_UnitAuras.GetAuraDataByIndex("player", buff.id, buff.btype)
|
||||
local slots = buff.btype == "HELPFUL" and helpfulSlots or harmfulSlots
|
||||
local name, icon, count, dispelType, duration, expirationTime, _, _, _, spellId = C_UnitAuras.UnitAuraBySlot("player", slots[buff.id])
|
||||
|
||||
--detect weapon buffs
|
||||
if buff.btype == "HELPFUL" and ((C.buffs.separateweapons == "0" and buff.gid <= pfUI.buff.wepbuffs.count) or (pfUI.buff.wepbuffs.count > 0 and buff.weapon ~= nil)) then
|
||||
@@ -55,15 +65,16 @@ pfUI:RegisterModule("buff", function ()
|
||||
buff.texture:SetTexture(GetInventoryItemTexture("player", 17))
|
||||
buff.backdrop:SetBackdropBorderColor(GetItemQualityColor(GetInventoryItemQuality("player", 17) or 1))
|
||||
end
|
||||
elseif aura and (( buff.btype == "HARMFUL" and C.buffs.debuffs == "1" ) or ( buff.btype == "HELPFUL" and C.buffs.buffs == "1" )) then
|
||||
elseif name and (( buff.btype == "HARMFUL" and C.buffs.debuffs == "1" ) or ( buff.btype == "HELPFUL" and C.buffs.buffs == "1" )) then
|
||||
-- Set Buff Texture and Border
|
||||
buff.mode = buff.btype
|
||||
buff.expirationTime = aura.expirationTime
|
||||
buff.stackCount = aura.applications
|
||||
buff.texture:SetTexture(aura.icon)
|
||||
buff.expirationTime = expirationTime
|
||||
buff.stackCount = count
|
||||
buff.spellId = spellId
|
||||
buff.texture:SetTexture(icon)
|
||||
|
||||
if buff.btype == "HARMFUL" then
|
||||
local dispelColor = C_UnitAuras.GetAuraDispelTypeColor(aura.dispelName)
|
||||
local dispelColor = C_UnitAuras.GetAuraDispelTypeColor(dispelType)
|
||||
buff.backdrop:SetBackdropBorderColor(dispelColor:GetRGBA())
|
||||
else
|
||||
buff.backdrop:SetBackdropBorderColor(br,bg,bb,ba)
|
||||
@@ -73,6 +84,28 @@ pfUI:RegisterModule("buff", function ()
|
||||
return
|
||||
end
|
||||
|
||||
-- drive the sweep from the aura duration (weapon enchants and permanent
|
||||
-- auras report no usable total, so those buttons stay text-only)
|
||||
if buff.mode == buff.btype and duration and duration > 0 and expirationTime and expirationTime > 0 then
|
||||
local now = GetTime()
|
||||
local timeleft = expirationTime - now
|
||||
if timeleft > 0 then
|
||||
local effDuration = duration > timeleft and duration or timeleft
|
||||
local newStart = now + timeleft - effDuration
|
||||
if buff.cdStart == nil or abs(buff.cdStart - newStart) > .5 or buff.cdDuration ~= effDuration then
|
||||
CooldownFrame_SetTimer(buff.cd, newStart, effDuration, 1)
|
||||
buff.cdStart = newStart
|
||||
buff.cdDuration = effDuration
|
||||
end
|
||||
else
|
||||
CooldownFrame_SetTimer(buff.cd, 0, 0, 0)
|
||||
buff.cdStart = nil
|
||||
end
|
||||
else
|
||||
CooldownFrame_SetTimer(buff.cd, 0, 0, 0)
|
||||
buff.cdStart = nil
|
||||
end
|
||||
|
||||
buff:Show()
|
||||
end
|
||||
|
||||
@@ -95,17 +128,33 @@ pfUI:RegisterModule("buff", function ()
|
||||
buff.texture:SetTexCoord(.07,.93,.07,.93)
|
||||
buff.texture:SetAllPoints(buff)
|
||||
|
||||
buff.timer = buff:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
-- overlay lifts the texts above the sweep: a child frame renders above
|
||||
-- all of its parent's own regions, so the timer would dim under the
|
||||
-- dark wedge otherwise (same reason pfCooldownText is its own frame)
|
||||
buff.overlay = CreateFrame("Frame", nil, buff)
|
||||
buff.overlay:SetAllPoints(buff)
|
||||
|
||||
buff.timer = buff.overlay:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
buff.timer:SetTextColor(1,1,1,1)
|
||||
buff.timer:SetJustifyH("CENTER")
|
||||
buff.timer:SetJustifyV("CENTER")
|
||||
|
||||
buff.stacks = buff:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
buff.stacks = buff.overlay:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
buff.stacks:SetTextColor(1,1,1,1)
|
||||
buff.stacks:SetJustifyH("RIGHT")
|
||||
buff.stacks:SetJustifyV("BOTTOM")
|
||||
buff.stacks:SetAllPoints(buff)
|
||||
|
||||
-- radial sweep (the template covers the button and starts hidden;
|
||||
-- the cooldown hook drives it from here, text stays with buff.timer)
|
||||
buff.cd = CreateFrame("Cooldown", buttonName .. "Cooldown", buff, "CooldownFrameTemplate")
|
||||
buff.cd:SetFrameLevel(buff:GetFrameLevel() + 1)
|
||||
buff.overlay:SetFrameLevel(buff:GetFrameLevel() + 2)
|
||||
buff.cd.pfCooldownType = "ALL"
|
||||
buff.cd.pfCooldownStyleText = 0
|
||||
buff.cd.pfCooldownStyleAnimation = tonumber(C.buffs.cooldown_anim) or 0
|
||||
buff.cd.pfCooldownReverse = tonumber(C.buffs.cooldown_reverse) or 0
|
||||
|
||||
buff:RegisterForClicks("RightButtonUp")
|
||||
|
||||
buff.weapon = weapon
|
||||
@@ -137,18 +186,11 @@ pfUI:RegisterModule("buff", function ()
|
||||
end
|
||||
end)
|
||||
|
||||
buff:SetScript("OnLeave", function()
|
||||
GameTooltip:Hide()
|
||||
end)
|
||||
buff:SetScript("OnLeave", GameTooltip_Hide)
|
||||
|
||||
buff:SetScript("OnClick", function()
|
||||
if CancelItemTempEnchantment and this.mode and this.mode == "MAINHAND" then
|
||||
CancelItemTempEnchantment(1)
|
||||
elseif CancelItemTempEnchantment and this.mode and this.mode == "OFFHAND" then
|
||||
CancelItemTempEnchantment(2)
|
||||
else
|
||||
local bid = GetPlayerBuff(PLAYER_BUFF_START_ID + this.id, this.btype)
|
||||
if bid >= 0 then CancelPlayerBuff(bid) end
|
||||
if this.spellId then
|
||||
C_Spell.CancelSpellByID(this.spellId)
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -159,8 +201,8 @@ pfUI:RegisterModule("buff", function ()
|
||||
|
||||
pfUI.buff = CreateFrame("Frame", "pfGlobalBuffFrame", UIParent)
|
||||
pfUI.buff:RegisterEvent("PLAYER_AURAS_CHANGED")
|
||||
pfUI.buff:RegisterEvent("UNIT_INVENTORY_CHANGED")
|
||||
pfUI.buff:RegisterEvent("UNIT_MODEL_CHANGED")
|
||||
pfUI.buff:RegisterEvent("PLAYER_EQUIPMENT_CHANGED")
|
||||
pfUI.buff:RegisterUnitEvent("UNIT_MODEL_CHANGED", "player")
|
||||
pfUI.buff:RegisterEvent("BUFF_UPDATE_DURATION_SELF")
|
||||
pfUI.buff:RegisterEvent("DEBUFF_UPDATE_DURATION_SELF")
|
||||
pfUI.buff:SetScript("OnEvent", function()
|
||||
@@ -172,6 +214,8 @@ pfUI:RegisterModule("buff", function ()
|
||||
pfUI.buff.wepbuffs.count = 0
|
||||
end
|
||||
|
||||
ScanPlayerAuraSlots()
|
||||
|
||||
for i=1,32 do
|
||||
RefreshBuffButton(pfUI.buff.buffs.buttons[i])
|
||||
end
|
||||
@@ -252,6 +296,9 @@ pfUI:RegisterModule("buff", function ()
|
||||
end
|
||||
end)
|
||||
|
||||
-- CreateBuffButton refreshes each new button from the slot buffers
|
||||
ScanPlayerAuraSlots()
|
||||
|
||||
-- Weapon Buffs
|
||||
pfUI.buff.wepbuffs = CreateFrame("Frame", "pfWepBuffFrame", UIParent)
|
||||
pfUI.buff.wepbuffs.count = 0
|
||||
@@ -277,28 +324,29 @@ pfUI:RegisterModule("buff", function ()
|
||||
-- config loading
|
||||
function pfUI.buff:UpdateConfigBuffButton(buff)
|
||||
local fontsize = C.buffs.fontsize == "-1" and C.global.font_size or C.buffs.fontsize
|
||||
local buffSize, buffSpacing = tonumber(C.buffs.size), tonumber(C.buffs.spacing)
|
||||
local rowcount, relFrame, offsetX, offsetY
|
||||
if buff.btype == "HELPFUL" then
|
||||
if buff.weapon == 1 and C.buffs.separateweapons == "1" then
|
||||
rowcount = floor((buff.gid-1) / tonumber(C.buffs.wepbuffrowsize))
|
||||
relFrame = pfUI.buff.wepbuffs
|
||||
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.wepbuffrowsize))*(tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing))
|
||||
offsetY = -(rowcount) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing))
|
||||
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.wepbuffrowsize))*(buffSize+2*buffSpacing)
|
||||
offsetY = -(rowcount) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+buffSize+2*buffSpacing)
|
||||
else
|
||||
rowcount = floor((buff.gid-1) / tonumber(C.buffs.buffrowsize))
|
||||
relFrame = pfUI.buff.buffs
|
||||
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.buffrowsize))*(tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing))
|
||||
offsetY = -(rowcount) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing))
|
||||
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.buffrowsize))*(buffSize+2*buffSpacing)
|
||||
offsetY = -(rowcount) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+buffSize+2*buffSpacing)
|
||||
end
|
||||
else
|
||||
rowcount = floor((buff.gid-1) / tonumber(C.buffs.debuffrowsize))
|
||||
relFrame = pfUI.buff.debuffs
|
||||
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.debuffrowsize))*(tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing))
|
||||
offsetY = -(rowcount) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing))
|
||||
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.debuffrowsize))*(buffSize+2*buffSpacing)
|
||||
offsetY = -(rowcount) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+buffSize+2*buffSpacing)
|
||||
end
|
||||
|
||||
buff:SetWidth(tonumber(C.buffs.size))
|
||||
buff:SetHeight(tonumber(C.buffs.size))
|
||||
buff:SetSize(buffSize, buffSize)
|
||||
buff.cd.pfCooldownStyleAnimation = tonumber(C.buffs.cooldown_anim) or 0
|
||||
buff.cd.pfCooldownReverse = tonumber(C.buffs.cooldown_reverse) or 0
|
||||
buff:ClearAllPoints()
|
||||
buff:SetPoint("TOPRIGHT", relFrame, "TOPRIGHT",offsetX, offsetY)
|
||||
|
||||
@@ -318,20 +366,26 @@ pfUI:RegisterModule("buff", function ()
|
||||
function pfUI.buff:UpdateConfig()
|
||||
local fontsize = C.buffs.fontsize == "-1" and C.global.font_size or C.buffs.fontsize
|
||||
|
||||
pfUI.buff.buffs:SetWidth(tonumber(C.buffs.buffrowsize) * (tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing)))
|
||||
pfUI.buff.buffs:SetHeight(ceil(32/tonumber(C.buffs.buffrowsize)) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing)))
|
||||
pfUI.buff.buffs:SetPoint("TOPRIGHT", pfUI.minimap or UIParent, "TOPLEFT", -4*tonumber(C.buffs.spacing), 0)
|
||||
local spacing = tonumber(C.buffs.spacing)
|
||||
local cell = tonumber(C.buffs.size) + 2 * spacing
|
||||
local rowextra = C.buffs.textinside == "1" and 0 or (fontsize * 1.5)
|
||||
|
||||
local function SizeBuffFrame(frame, rowsize, count)
|
||||
rowsize = tonumber(rowsize)
|
||||
frame:SetSize(rowsize * cell, ceil(count / rowsize) * (rowextra + cell))
|
||||
end
|
||||
|
||||
SizeBuffFrame(pfUI.buff.buffs, C.buffs.buffrowsize, 32)
|
||||
pfUI.buff.buffs:SetPoint("TOPRIGHT", pfUI.minimap or UIParent, "TOPLEFT", -4 * spacing, 0)
|
||||
UpdateMovable(pfUI.buff.buffs)
|
||||
|
||||
pfUI.buff.debuffs:SetWidth(tonumber(C.buffs.debuffrowsize) * (tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing)))
|
||||
pfUI.buff.debuffs:SetHeight(ceil(16/tonumber(C.buffs.debuffrowsize)) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing)))
|
||||
SizeBuffFrame(pfUI.buff.debuffs, C.buffs.debuffrowsize, 16)
|
||||
pfUI.buff.debuffs:SetPoint("TOPRIGHT", pfUI.buff.buffs, "BOTTOMRIGHT", 0, 0)
|
||||
UpdateMovable(pfUI.buff.debuffs)
|
||||
|
||||
if C.buffs.separateweapons == "1" then
|
||||
pfUI.buff.wepbuffs:ClearAllPoints()
|
||||
pfUI.buff.wepbuffs:SetWidth(tonumber(C.buffs.wepbuffrowsize) * (tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing)))
|
||||
pfUI.buff.wepbuffs:SetHeight(ceil(2/tonumber(C.buffs.wepbuffrowsize)) * ((C.buffs.textinside == "1" and 0 or (fontsize*1.5))+tonumber(C.buffs.size)+2*tonumber(C.buffs.spacing)))
|
||||
SizeBuffFrame(pfUI.buff.wepbuffs, C.buffs.wepbuffrowsize, 2)
|
||||
pfUI.buff.wepbuffs:SetPoint("TOPRIGHT", pfUI.buff.debuffs, "BOTTOMRIGHT", 0, 0)
|
||||
pfUI.buff.wepbuffs:Show()
|
||||
UpdateMovable(pfUI.buff.wepbuffs)
|
||||
|
||||
+41
-70
@@ -73,19 +73,15 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
return anchor
|
||||
end
|
||||
|
||||
local function GetBuffData(unit, id, type, selfdebuff)
|
||||
if unit == "player" then
|
||||
local aura = C_UnitAuras.GetAuraDataByIndex("player", id, type)
|
||||
if not aura then return end
|
||||
local remaining = aura.expirationTime > 0 and (aura.expirationTime - GetTime()) or 0
|
||||
return remaining, aura.icon, aura.name, aura.applications
|
||||
elseif libdebuff and selfdebuff then
|
||||
local name, _, texture, stacks, _, _, timeleft = libdebuff:UnitOwnDebuff(unit, id)
|
||||
return timeleft, texture, name, stacks
|
||||
elseif libdebuff then
|
||||
local name, _, texture, stacks, _, _, timeleft = libdebuff:UnitDebuff(unit, id)
|
||||
return timeleft, texture, name, stacks
|
||||
end
|
||||
-- reusable GetAuraSlots buffer, filled once per RefreshBuffBarFrame
|
||||
local auraSlots = {}
|
||||
|
||||
-- Reads one aura by the slot id GetAuraSlots returned (nil slot -> nil).
|
||||
local function GetBuffData(unit, slot)
|
||||
local name, icon, count, dispelType, _, expirationTime = C_UnitAuras.UnitAuraBySlot(unit, slot)
|
||||
if not name then return end
|
||||
local remaining = expirationTime > 0 and (expirationTime - GetTime()) or 0
|
||||
return remaining, icon, name, count, dispelType
|
||||
end
|
||||
|
||||
local function StatusBarOnClick()
|
||||
@@ -97,46 +93,28 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
if val == skill then return end
|
||||
end
|
||||
config.whitelist = config.whitelist .. "#" .. skill
|
||||
fcache[tostring(config)] = nil -- invalidate so the new entry takes effect immediately
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc" .. skill .. "|r" .. T["is now whitelisted."])
|
||||
elseif IsShiftKeyDown() then
|
||||
for _, val in pairs({strsplit("#", config.blacklist)}) do
|
||||
if val == skill then return end
|
||||
end
|
||||
config.blacklist = config.blacklist .. "#" .. skill
|
||||
fcache[tostring(config)] = nil -- invalidate so the new entry takes effect immediately
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc" .. skill .. "|r" .. T["is now blacklisted."])
|
||||
end
|
||||
elseif this.parent.unit == "player" then
|
||||
local bid = GetPlayerBuff(PLAYER_BUFF_START_ID + this.id, this.type)
|
||||
if bid >= 0 then CancelPlayerBuff(bid) end
|
||||
local aura = C_UnitAuras.GetAuraDataByIndex("player", this.id, this.type)
|
||||
if aura and aura.spellId then C_Spell.CancelSpellByID(aura.spellId) end
|
||||
end
|
||||
end
|
||||
|
||||
local function StatusBarOnEnter()
|
||||
GameTooltip:SetOwner(this, "NONE")
|
||||
|
||||
if this.unit == "player" then
|
||||
GameTooltip:SetUnitAura("player", this.id, this.type)
|
||||
elseif this.type == "HARMFUL" then
|
||||
-- For "only own debuffs" mode: find the REAL slot by matching spell name AND caster
|
||||
local config = this.parent and this.parent.config
|
||||
if config and config.selfdebuff == "1" and libdebuff then
|
||||
local ownDebuffName = libdebuff:UnitOwnDebuff(this.unit, this.id)
|
||||
if ownDebuffName then
|
||||
-- Search through all game slots to find OUR debuff with matching name
|
||||
for gameSlot = 1, 16 do
|
||||
local gameName, _, _, _, _, _, _, gameCaster = libdebuff:UnitDebuff(this.unit, gameSlot)
|
||||
if gameName == ownDebuffName and gameCaster == "player" then
|
||||
GameTooltip:SetUnitAura(this.unit, gameSlot, "HARMFUL")
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
GameTooltip:SetUnitAura(this.unit, this.id, "HARMFUL")
|
||||
end
|
||||
elseif this.type == "HELPFUL" then
|
||||
GameTooltip:SetUnitAura(this.unit, this.id, "HELPFUL")
|
||||
end
|
||||
-- C_UnitAuras lists the player's own auras first, so the selfdebuff
|
||||
-- (HARMFUL|PLAYER) list is a prefix of the HARMFUL list: same index.
|
||||
GameTooltip:SetUnitAura(this.unit, this.id, this.type)
|
||||
|
||||
if IsShiftKeyDown() then
|
||||
GameTooltip:AddLine(" ")
|
||||
@@ -167,8 +145,7 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
local color = parent.color
|
||||
local bordercolor = parent.bordercolor
|
||||
local textcolor = parent.textcolor
|
||||
local width = parent:GetWidth()
|
||||
local height = parent:GetHeight()
|
||||
local width, height = parent:GetSize()
|
||||
local framename = "pf" .. parent.unit .. ( parent.type == "HARMFUL" and "Debuff" or "Buff" ) .. "Bar" .. bar
|
||||
|
||||
local font = parent.config.use_unitfonts == "1" and pfUI.font_unit or pfUI.font_default
|
||||
@@ -177,8 +154,7 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
frame:EnableMouse(1)
|
||||
frame:Hide()
|
||||
frame:SetPoint("BOTTOM", 0, (bar-1)*(height+2*border+1))
|
||||
frame:SetWidth(width)
|
||||
frame:SetHeight(height)
|
||||
frame:SetSize(width, height)
|
||||
|
||||
frame.bar = CreateFrame("StatusBar", "pfBuffBar" .. bar, frame)
|
||||
frame.bar:SetPoint("TOPLEFT", frame, "TOPLEFT", height+1, 0)
|
||||
@@ -207,8 +183,7 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
frame.time:SetJustifyH("RIGHT")
|
||||
|
||||
frame.icon = frame:CreateTexture(nil, "OVERLAY")
|
||||
frame.icon:SetWidth(height)
|
||||
frame.icon:SetHeight(height)
|
||||
frame.icon:SetSize(height, height)
|
||||
frame.icon:SetPoint("LEFT", frame, "LEFT", 0, 0)
|
||||
frame.icon:SetTexCoord(.07,.93,.07,.93)
|
||||
|
||||
@@ -230,7 +205,7 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
|
||||
CreateBackdrop(frame)
|
||||
CreateBackdropShadow(frame)
|
||||
if bordercolor.r ~= "0" and bordercolor.g ~= "0" and bordercolor.b ~= "0" and bordercolor.a ~= "0" then
|
||||
if bordercolor.r ~= 0 and bordercolor.g ~= 0 and bordercolor.b ~= 0 and bordercolor.a ~= 0 then
|
||||
frame.backdrop:SetBackdropBorderColor(bordercolor.r,bordercolor.g,bordercolor.b,1)
|
||||
end
|
||||
|
||||
@@ -240,9 +215,15 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
local function RefreshBuffBarFrame(frame)
|
||||
-- reinitialize all active buffs
|
||||
local selfdebuff = frame.config.selfdebuff == "1"
|
||||
local filter = (selfdebuff and frame.type == "HARMFUL") and "HARMFUL|PLAYER" or frame.type
|
||||
|
||||
-- one GetAuraSlots enumeration per refresh instead of a by-index walk per
|
||||
-- bar; the i-th slot is the i-th aura of the filtered list, so `i` stays
|
||||
-- the index the tooltip / cancel handlers pass to the by-index API
|
||||
ScanAuraSlots(frame.unit, filter, auraSlots, 32)
|
||||
|
||||
for i=1,32 do
|
||||
local timeleft, texture, name, stacks = GetBuffData(frame.unit, i, frame.type, selfdebuff)
|
||||
local timeleft, texture, name, stacks, dtype = GetBuffData(frame.unit, auraSlots[i])
|
||||
timeleft = timeleft or 0
|
||||
|
||||
if texture and name and name ~= "" and BuffIsVisible(frame.config, name) then
|
||||
@@ -251,12 +232,14 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
frame.buffs[i][3] = name
|
||||
frame.buffs[i][4] = texture
|
||||
frame.buffs[i][5] = stacks
|
||||
frame.buffs[i][6] = dtype
|
||||
else
|
||||
frame.buffs[i][1] = 0
|
||||
frame.buffs[i][2] = nil
|
||||
frame.buffs[i][3] = nil
|
||||
frame.buffs[i][4] = nil
|
||||
frame.buffs[i][5] = 0
|
||||
frame.buffs[i][6] = nil
|
||||
end
|
||||
end
|
||||
|
||||
@@ -300,12 +283,9 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
-- calculate dynamic auto color
|
||||
local r, g, b
|
||||
if frame.type == "HARMFUL" then
|
||||
r, g, b = 1, .2, .2
|
||||
local a = C_UnitAuras.GetDebuffDataByIndex(frame.unit, data[2])
|
||||
local dtype = a and a.dispelName
|
||||
if dtype and DebuffTypeColor[dtype] then
|
||||
r,g,b = DebuffTypeColor[dtype].r,DebuffTypeColor[dtype].g,DebuffTypeColor[dtype].b
|
||||
end
|
||||
-- official Blizzard dispel-type colors (matches unitframes/buff);
|
||||
-- nil/unknown type falls back to the DEBUFF_TYPE_NONE colour
|
||||
r, g, b = C_UnitAuras.GetAuraDispelTypeColor(data[6] or ""):GetRGBA()
|
||||
else
|
||||
r,g,b = str2rgb(data[3])
|
||||
end
|
||||
@@ -427,18 +407,15 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
if pfUI.uf.player and C.buffbar.pbuff.enable == "1" then
|
||||
pfUI.uf.player.buffbar = CreateBuffBarFrame("Player", "HELPFUL")
|
||||
local config = C.buffbar.pbuff
|
||||
local r, g, b, a = strsplit(",", config.color)
|
||||
local br, bg, bb, ba = strsplit(",", config.bordercolor)
|
||||
local tr, tg, tb, ta = strsplit(",", config.textcolor)
|
||||
|
||||
pfUI.uf.player.buffbar:SetWidth(config.width == "-1" and pfUI.uf.player:GetWidth() or config.width)
|
||||
pfUI.uf.player.buffbar:SetHeight(config.height)
|
||||
pfUI.uf.player.buffbar.threshold = tonumber(config.threshold)
|
||||
pfUI.uf.player.buffbar.config = config
|
||||
pfUI.uf.player.buffbar.buffcmp = config.sort == "asc" and asc or desc
|
||||
pfUI.uf.player.buffbar.color = { r = r, g = g, b = b, a = a }
|
||||
pfUI.uf.player.buffbar.bordercolor = { r = br, g = bg, b = bb, a = ba }
|
||||
pfUI.uf.player.buffbar.textcolor = { r = tr, g = tg, b = tb, a = ta }
|
||||
pfUI.uf.player.buffbar.color = GetStringColorObject(config.color)
|
||||
pfUI.uf.player.buffbar.bordercolor = GetStringColorObject(config.bordercolor)
|
||||
pfUI.uf.player.buffbar.textcolor = GetStringColorObject(config.textcolor)
|
||||
pfUI.uf.player.buffbar.anchors = {
|
||||
pfUI.uf.player,
|
||||
pfUI.uf.player and pfUI.uf.player.debuffs,
|
||||
@@ -453,9 +430,6 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
-- create player debuffbars
|
||||
if pfUI.uf.player and C.buffbar.pdebuff.enable == "1" then
|
||||
local config = C.buffbar.pdebuff
|
||||
local r, g, b, a = strsplit(",", config.color)
|
||||
local br, bg, bb, ba = strsplit(",", config.bordercolor)
|
||||
local tr, tg, tb, ta = strsplit(",", config.textcolor)
|
||||
|
||||
pfUI.uf.player.debuffbar = CreateBuffBarFrame("Player", "HARMFUL")
|
||||
pfUI.uf.player.debuffbar:SetWidth(config.width == "-1" and pfUI.uf.player:GetWidth() or config.width)
|
||||
@@ -463,9 +437,9 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
pfUI.uf.player.debuffbar.threshold = tonumber(config.threshold)
|
||||
pfUI.uf.player.debuffbar.config = config
|
||||
pfUI.uf.player.debuffbar.buffcmp = config.sort == "asc" and asc or desc
|
||||
pfUI.uf.player.debuffbar.color = { r = r, g = g, b = b, a = a }
|
||||
pfUI.uf.player.debuffbar.bordercolor = { r = br, g = bg, b = bb, a = ba }
|
||||
pfUI.uf.player.debuffbar.textcolor = { r = tr, g = tg, b = tb, a = ta }
|
||||
pfUI.uf.player.debuffbar.color = GetStringColorObject(config.color)
|
||||
pfUI.uf.player.debuffbar.bordercolor = GetStringColorObject(config.bordercolor)
|
||||
pfUI.uf.player.debuffbar.textcolor = GetStringColorObject(config.textcolor)
|
||||
pfUI.uf.player.debuffbar.anchors = {
|
||||
pfUI.uf.player,
|
||||
pfUI.uf.player and pfUI.uf.player.buffbar and pfUI.uf.player.buffbar.bars,
|
||||
@@ -481,18 +455,15 @@ pfUI:RegisterModule("buffwatch", function ()
|
||||
-- create target debuffbars
|
||||
if pfUI.uf.target and C.buffbar.tdebuff.enable == "1" then
|
||||
local config = C.buffbar.tdebuff
|
||||
local r, g, b, a = strsplit(",", config.color)
|
||||
local br, bg, bb, ba = strsplit(",", config.bordercolor)
|
||||
local tr, tg, tb, ta = strsplit(",", config.textcolor)
|
||||
|
||||
pfUI.uf.target.debuffbar = CreateBuffBarFrame("Target", "HARMFUL")
|
||||
pfUI.uf.target.debuffbar:SetWidth(config.width == "-1" and pfUI.uf.target:GetWidth() or config.width)
|
||||
pfUI.uf.target.debuffbar:SetHeight(config.height)
|
||||
pfUI.uf.target.debuffbar.config = config
|
||||
pfUI.uf.target.debuffbar.buffcmp = config.sort == "asc" and asc or desc
|
||||
pfUI.uf.target.debuffbar.color = { r = r, g = g, b = b, a = a }
|
||||
pfUI.uf.target.debuffbar.bordercolor = { r = br, g = bg, b = bb, a = ba }
|
||||
pfUI.uf.target.debuffbar.textcolor = { r = tr, g = tg, b = tb, a = ta }
|
||||
pfUI.uf.target.debuffbar.color = GetStringColorObject(config.color)
|
||||
pfUI.uf.target.debuffbar.bordercolor = GetStringColorObject(config.bordercolor)
|
||||
pfUI.uf.target.debuffbar.textcolor = GetStringColorObject(config.textcolor)
|
||||
pfUI.uf.target.debuffbar.threshold = tonumber(config.threshold)
|
||||
pfUI.uf.target.debuffbar.anchors = {
|
||||
pfUI.uf.target,
|
||||
|
||||
+359
-219
@@ -16,7 +16,169 @@ pfUI:RegisterModule("castbar", function ()
|
||||
end
|
||||
end
|
||||
|
||||
local function CreateCastbar(name, parent, unitstr, unitname)
|
||||
-- Clear cast state on the bar and start the fade-out. On a normal end the bar
|
||||
-- is left at its current fill (a completed cast is already ~full; nothing
|
||||
-- snaps to full, which used to flash for a frame when the next cast stamped
|
||||
-- the bar). When `failed` is set for a cast that was actually in progress, the
|
||||
-- bar flashes full red before fading — the cancelled-cast indicator.
|
||||
local function ClearBar(cb, failed)
|
||||
local wasActive = cb.endTime ~= nil
|
||||
cb.startTime, cb.endTime, cb.isChannel = nil, nil, nil
|
||||
cb.activeName, cb.spellID = nil, nil
|
||||
cb.isTradeskill = nil
|
||||
cb.tradeskillTotal, cb.tradeskillCompleted, cb.tradeskillSpellID = nil, nil, nil
|
||||
cb.tradeskillSingleMs, cb.currentCraftStart = nil, nil
|
||||
cb.lastMax = nil
|
||||
cb.delay = 0
|
||||
if failed and wasActive then
|
||||
cb.bar:SetStatusBarColor(GetStringColor(C.appearance.castbar.failcolor))
|
||||
cb.bar:SetMinMaxValues(0, 1)
|
||||
cb.bar:SetValue(1)
|
||||
end
|
||||
if cb.bar.spark then cb.bar.spark:Hide() end
|
||||
if cb:GetAlpha() > 0 and not cb.fade:IsPlaying() then cb.fade:Play() end
|
||||
end
|
||||
|
||||
-- "Spellname (N)" label for an active tradeskill merge — N is the number
|
||||
-- of crafts remaining. Falls back to the bare spell name when ≤1 left.
|
||||
local function UpdateTradeskillLabel(cb)
|
||||
if not cb.tradeskillTotal or not cb.activeName or not cb.showname then return end
|
||||
local remaining = cb.tradeskillTotal - (cb.tradeskillCompleted or 0)
|
||||
if remaining > 1 then
|
||||
cb.bar.left:SetFormattedText("%s (%d)", cb.activeName, remaining)
|
||||
else
|
||||
cb.bar.left:SetText(cb.activeName)
|
||||
end
|
||||
end
|
||||
|
||||
-- Stretch the bar to span all queued crafts (Quartz-style merge): the bar
|
||||
-- fills continuously across the chain instead of resetting per craft.
|
||||
-- Also arms the per-craft spark — a thin marker that crosses the bar once
|
||||
-- per craft (so it moves N× faster than the main fill on an N-stack).
|
||||
local function EnterTradeskillMerge(cb, startMs, endMs, count)
|
||||
cb.tradeskillTotal = count
|
||||
cb.tradeskillCompleted = 0
|
||||
cb.tradeskillSpellID = cb.spellID
|
||||
local single = endMs - startMs
|
||||
cb.tradeskillSingleMs = single
|
||||
cb.currentCraftStart = startMs
|
||||
local mergedEnd = startMs + single * count
|
||||
cb.endTime = mergedEnd
|
||||
local duration = (mergedEnd - startMs) / 1000
|
||||
cb.bar:SetMinMaxValues(0, duration)
|
||||
cb.lastMax = duration
|
||||
if cb.bar.spark then cb.bar.spark:Show() end
|
||||
UpdateTradeskillLabel(cb)
|
||||
end
|
||||
|
||||
-- Mark the start of craft 2..N within an active merge (called from the
|
||||
-- UNIT_SPELLCAST_START handler). Resets the per-craft spark to the left
|
||||
-- edge of the bar.
|
||||
local function StartTradeskillCraft(cb)
|
||||
cb.currentCraftStart = GetTime() * 1000
|
||||
local remaining = cb.tradeskillTotal - (cb.tradeskillCompleted or 0)
|
||||
cb.endTime = cb.currentCraftStart + cb.tradeskillSingleMs * remaining
|
||||
local duration = (cb.endTime - cb.startTime) / 1000
|
||||
cb.bar:SetMinMaxValues(0, duration)
|
||||
cb.lastMax = duration
|
||||
UpdateTradeskillLabel(cb)
|
||||
end
|
||||
|
||||
-- Stamp the bar with cast data and render text/icon/lag once. OnUpdate
|
||||
-- then animates the fill from this state without touching C_Spell.
|
||||
local function StampBar(cb, name, tex, startMs, endMs, spellID, isChannel, delayMs, isTradeskill, rank, noInterrupt)
|
||||
cb.startTime = startMs
|
||||
cb.endTime = endMs
|
||||
cb.isChannel = isChannel
|
||||
cb.spellID = spellID
|
||||
cb.activeName = name
|
||||
cb.isTradeskill = isTradeskill
|
||||
cb.delay = (delayMs or 0) / 1000
|
||||
cb.fade:Stop()
|
||||
cb:SetAlpha(1)
|
||||
|
||||
-- Shield an uninterruptible cast. Not on the player's own bar: the flag is
|
||||
-- measured against the reader's own interrupts and silences, so on your own
|
||||
-- cast it answers a question nobody asked.
|
||||
SetCastbarShield(cb.bar, cb.icon, noInterrupt and cb.unitstr ~= "player", isChannel)
|
||||
|
||||
-- Rank: prefer the value the UNIT_SPELLCAST_* event delivered (arg5, passed
|
||||
-- through by RefreshBar). Only the retarget re-poll has no event in hand, so
|
||||
-- it falls back to a lookup.
|
||||
if not rank and spellID then
|
||||
rank = C_Spell.GetSpellSubtext(spellID) or ""
|
||||
end
|
||||
rank = rank or ""
|
||||
local spellname = (cb.showname and name) and (name .. " ") or ""
|
||||
local rankstr = (cb.showrank and rank ~= "") and string.format("|cffaaffcc[%s]|r", rank) or ""
|
||||
cb.bar.left:SetText(spellname .. rankstr)
|
||||
|
||||
if tex and cb.showicon then
|
||||
local size = cb:GetHeight()
|
||||
cb.icon:Show()
|
||||
cb.icon:SetSize(size, size)
|
||||
cb.icon.texture:SetTexture(tex)
|
||||
cb.bar:SetPoint("TOPLEFT", cb.icon, "TOPRIGHT", cb.spacing, 0)
|
||||
else
|
||||
cb.bar:SetPoint("TOPLEFT", cb, 0, 0)
|
||||
cb.icon:Hide()
|
||||
end
|
||||
|
||||
local duration = (endMs - startMs) / 1000
|
||||
if cb.showlag then
|
||||
local _, _, lag = GetNetStats()
|
||||
cb.bar.lag:SetWidth(math.min(cb:GetWidth(), cb:GetWidth() / duration * (lag/1000)))
|
||||
cb.bar.lag:Show()
|
||||
else
|
||||
cb.bar.lag:Hide()
|
||||
end
|
||||
|
||||
cb.bar:SetMinMaxValues(0, duration)
|
||||
cb.lastMax = duration
|
||||
|
||||
-- Prime the fill on this frame. StampBar otherwise leaves the previous
|
||||
-- value in place (ClearBar, run on the prior cast's STOP, leaves it full),
|
||||
-- so the bar would flash full for the frame between here and the next
|
||||
-- OnUpdate tick. Reset the throttle too so the timer text updates promptly.
|
||||
local nowSec = GetTime()
|
||||
local cur = isChannel and (endMs / 1000 - nowSec) or (nowSec - startMs / 1000)
|
||||
if cur < 0 then cur = 0 elseif cur > duration then cur = duration end
|
||||
cb.bar:SetValue(cur)
|
||||
cb.tick = 0
|
||||
end
|
||||
|
||||
-- One-shot poll: read C_Spell for the bar's unit, stamp or clear. Called
|
||||
-- from event handlers (cast start, target/focus change), never per-frame.
|
||||
local function RefreshBar(cb, rank)
|
||||
local query = cb.unitstr
|
||||
if not UnitExists(query) then
|
||||
ClearBar(cb)
|
||||
return
|
||||
end
|
||||
local name, _, tex, startMs, endMs, isTradeskill, _, noInterrupt, spellID, _, delayMs = C_Spell.UnitCastingInfo(query)
|
||||
local isChan
|
||||
if not name then
|
||||
name, _, tex, startMs, endMs, _, noInterrupt, spellID = C_Spell.UnitChannelInfo(query)
|
||||
isChan = true
|
||||
end
|
||||
-- Synthetic fallback for abilities the engine treats as instant-cast but
|
||||
-- that have a meaningful wait window (e.g. Turtle WoW Steady Shot on the
|
||||
-- ranged-swing queue). Per-unit table populated by module-side hooks.
|
||||
if not name and pfUI.synthetic_casts and pfUI.synthetic_casts[query] then
|
||||
local s = pfUI.synthetic_casts[query]
|
||||
if s.endMs > GetTime() * 1000 then
|
||||
name, tex, startMs, endMs, spellID = s.name, s.icon, s.startMs, s.endMs, s.spellID
|
||||
isChan = nil
|
||||
end
|
||||
end
|
||||
if name and startMs and endMs then
|
||||
StampBar(cb, name, tex, startMs, endMs, spellID, isChan, delayMs, isTradeskill, rank, noInterrupt)
|
||||
else
|
||||
ClearBar(cb)
|
||||
end
|
||||
end
|
||||
|
||||
local function CreateCastbar(name, parent, unitstr)
|
||||
local cb = CreateFrame("Frame", name, parent or UIParent)
|
||||
|
||||
cb:SetHeight(C.global.font_size * 1.5)
|
||||
@@ -24,13 +186,11 @@ pfUI:RegisterModule("castbar", function ()
|
||||
cb:SetFrameLevel(8)
|
||||
|
||||
cb.unitstr = unitstr
|
||||
cb.unitname = unitname
|
||||
|
||||
-- icon
|
||||
cb.icon = CreateFrame("Frame", nil, cb)
|
||||
cb.icon:SetPoint("TOPLEFT", 0, 0)
|
||||
cb.icon:SetHeight(16)
|
||||
cb.icon:SetWidth(16)
|
||||
cb.icon:SetSize(16, 16)
|
||||
|
||||
cb.icon.texture = cb.icon:CreateTexture(nil, "OVERLAY")
|
||||
cb.icon.texture:SetAllPoints()
|
||||
@@ -58,7 +218,7 @@ pfUI:RegisterModule("castbar", function ()
|
||||
cb.bar.left:SetFontObject(GameFontWhite)
|
||||
cb.bar.left:SetTextColor(1,1,1,1)
|
||||
cb.bar.left:SetFont(font, font_size, "OUTLINE")
|
||||
cb.bar.left:SetJustifyH("left")
|
||||
cb.bar.left:SetJustifyH(C.castbar[unitstr].namealign or "LEFT")
|
||||
|
||||
-- text right
|
||||
cb.bar.right = cb.bar:CreateFontString("Status", "DIALOG", "GameFontNormal")
|
||||
@@ -69,245 +229,217 @@ pfUI:RegisterModule("castbar", function ()
|
||||
cb.bar.right:SetFontObject(GameFontWhite)
|
||||
cb.bar.right:SetTextColor(1,1,1,1)
|
||||
cb.bar.right:SetFont(font, font_size, "OUTLINE")
|
||||
cb.bar.right:SetJustifyH("right")
|
||||
cb.bar.right:SetJustifyH(C.castbar[unitstr].timealign or "RIGHT")
|
||||
|
||||
cb.bar.lag = cb.bar:CreateTexture(nil, "OVERLAY")
|
||||
cb.bar.lag:SetPoint("TOPRIGHT", cb.bar, "TOPRIGHT", 0, 0)
|
||||
cb.bar.lag:SetPoint("BOTTOMRIGHT", cb.bar, "BOTTOMRIGHT", 0, 0)
|
||||
cb.bar.lag:SetTexture(1,.2,.2,.2)
|
||||
|
||||
-- OnUpdate script with throttle for performance optimization
|
||||
-- Per-craft progress spark for tradeskill merge — a thin vertical line
|
||||
-- that crosses the bar once per craft in the chain (so on a 5-stack it
|
||||
-- moves 5x faster than the main fill). Position is updated by OnUpdate
|
||||
-- while a merge is active; hidden otherwise.
|
||||
cb.bar.spark = cb.bar:CreateTexture(nil, "OVERLAY")
|
||||
cb.bar.spark:SetTexture(1, 1, 1, 0.8)
|
||||
cb.bar.spark:SetWidth(2)
|
||||
cb.bar.spark:SetPoint("TOP", cb.bar, "TOPLEFT", 0, 0)
|
||||
cb.bar.spark:SetPoint("BOTTOM", cb.bar, "BOTTOMLEFT", 0, 0)
|
||||
cb.bar.spark:Hide()
|
||||
|
||||
-- Fade-out after a cast ends. The bar stays at alpha 0 while idle.
|
||||
cb.fade = cb:CreateAnimationGroup()
|
||||
local fade = cb.fade:CreateAnimation("Alpha")
|
||||
fade:SetChange(-1)
|
||||
fade:SetDuration(.4)
|
||||
cb.fade:SetScript("OnFinished", function() cb:SetAlpha(0) end)
|
||||
|
||||
-- OnUpdate animates the bar fill. All state transitions (cast start/stop/interrupt, channel start/stop,
|
||||
-- pushback) come from the event handler below — we never poll C_Spell
|
||||
-- here.
|
||||
cb:SetScript("OnUpdate", function()
|
||||
-- Throttle for performance
|
||||
if (this.tick or 0) > GetTime() then return end
|
||||
this.tick = GetTime() + 0.020 -- ~50 FPS for smooth castbar
|
||||
this.tick = GetTime() + 0.020 -- ~50 FPS
|
||||
|
||||
if this.drag and this.drag:IsShown() then
|
||||
this.fade:Stop()
|
||||
this:SetAlpha(1)
|
||||
return
|
||||
end
|
||||
|
||||
if not UnitExists(this.unitstr) then
|
||||
this:SetAlpha(0)
|
||||
if this.fade:IsPlaying() then return end
|
||||
|
||||
if not this.endTime then
|
||||
if this:GetAlpha() ~= 0 then this:SetAlpha(0) end
|
||||
return
|
||||
end
|
||||
|
||||
if this.fadeout and this:GetAlpha() > 0 then
|
||||
if this:GetAlpha() == 0 then
|
||||
this.fadeout = nil
|
||||
-- Non-player bars: if the unit disappears (target died / detarget),
|
||||
-- drop the bar immediately.
|
||||
if this.unitstr ~= "player" and not UnitExists(this.unitstr) then
|
||||
ClearBar(this)
|
||||
return
|
||||
end
|
||||
|
||||
local now = GetTime()
|
||||
local endSec = this.endTime / 1000
|
||||
if now >= endSec then
|
||||
ClearBar(this)
|
||||
return
|
||||
end
|
||||
|
||||
local startSec = this.startTime / 1000
|
||||
local max = endSec - startSec
|
||||
local cur = this.isChannel and (endSec - now) or (now - startSec)
|
||||
if cur > max then cur = max end
|
||||
if cur < 0 then cur = 0 end
|
||||
|
||||
this.bar:SetValue(cur)
|
||||
|
||||
-- Per-craft spark for a tradeskill merge: position by (now - current
|
||||
-- craft's start) / single-craft duration, clamped to [0, 1]. Snaps back
|
||||
-- to the left edge each time StartTradeskillCraft fires for craft N+1.
|
||||
if this.tradeskillTotal and this.tradeskillSingleMs and this.currentCraftStart then
|
||||
local craftElapsed = now * 1000 - this.currentCraftStart
|
||||
local p = craftElapsed / this.tradeskillSingleMs
|
||||
if p < 0 then p = 0 elseif p > 1 then p = 1 end
|
||||
local x = p * this.bar:GetWidth() - 1
|
||||
this.bar.spark:ClearAllPoints()
|
||||
this.bar.spark:SetPoint("TOP", this.bar, "TOPLEFT", x, 0)
|
||||
this.bar.spark:SetPoint("BOTTOM", this.bar, "BOTTOMLEFT", x, 0)
|
||||
end
|
||||
|
||||
if this.showtimer then
|
||||
if (this.delay or 0) > 0 then
|
||||
local prefix = "|cffffaaaa" .. (this.isChannel and "-" or "+") .. FormatCastbarTime(this.delay) .. " |r "
|
||||
this.bar.right:SetText(prefix .. FormatCastbarTime(cur) .. " / " .. FormatCastbarTime(max))
|
||||
else
|
||||
this.bar.right:SetText(FormatCastbarTime(cur) .. " / " .. FormatCastbarTime(max))
|
||||
end
|
||||
|
||||
this:SetAlpha(this:GetAlpha()-0.05)
|
||||
end
|
||||
|
||||
local channel = nil
|
||||
local query = this.unitstr ~= "" and this.unitstr or this.unitname
|
||||
if not query then return end
|
||||
|
||||
-- Check if we have a GUID-based focus (Turtle WoW native GUID)
|
||||
local focusGuid = nil
|
||||
if this.unitstr and string.find(this.unitstr, "^0x") then
|
||||
focusGuid = this.unitstr
|
||||
elseif this.unitstr and this.unitstr == "player" and UnitGUID then
|
||||
focusGuid = UnitGUID("player")
|
||||
elseif this.unitstr and this.unitstr ~= "player" then
|
||||
local guid = UnitGUID(this.unitstr)
|
||||
if guid then focusGuid = guid end
|
||||
end
|
||||
this.focusGuid = focusGuid
|
||||
|
||||
-- Try libdebuff_casts first for GUID-based units (works with Turtle GUID + Nampower events)
|
||||
local cast, nameSubtext, text, texture, startTime, endTime
|
||||
local castBlocked = false
|
||||
if focusGuid and pfUI.libdebuff_casts and pfUI.libdebuff_casts[focusGuid] then
|
||||
local castData = pfUI.libdebuff_casts[focusGuid]
|
||||
if castData.event == "CAST" or castData.event == "FAIL" then
|
||||
castBlocked = true
|
||||
pfUI.libdebuff_casts[focusGuid] = nil
|
||||
elseif (castData.event == "START" or castData.event == "CHANNEL") and castData.endTime and castData.endTime > GetTime() then
|
||||
cast = castData.spellName
|
||||
texture = castData.icon
|
||||
startTime = castData.startTime * 1000
|
||||
endTime = castData.endTime * 1000
|
||||
-- Try to get rank from spell DB via spellID (nameSubtext is not stored in libdebuff_casts)
|
||||
if castData.spellID and GetSpellRecField then
|
||||
nameSubtext = GetSpellRecField(castData.spellID, "rank") or ""
|
||||
else
|
||||
nameSubtext = ""
|
||||
end
|
||||
if castData.event == "CHANNEL" then
|
||||
channel = cast
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local useLibcastForPlayer = this.unitstr == "player"
|
||||
|
||||
-- For player: use player name to query libcast.db directly
|
||||
if not cast and useLibcastForPlayer then
|
||||
query = UnitName("player")
|
||||
end
|
||||
|
||||
-- Fallback: pfGetCastInfo only when no focusGuid (Nampower not available for this unit).
|
||||
-- If we have a focusGuid, libdebuff is authoritative - don't fall back to libcast
|
||||
-- even if no cast is active (prevents false positives e.g. spellbook clicks on CD spells).
|
||||
if not cast and not castBlocked and not focusGuid and pfGetCastInfo then
|
||||
cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = pfGetCastInfo(query)
|
||||
end
|
||||
|
||||
if not cast and not castBlocked and not focusGuid and pfGetChannelInfo then
|
||||
channel, nameSubtext, text, texture, startTime, endTime, isTradeSkill = pfGetChannelInfo(this.unitstr or this.unitname)
|
||||
cast = channel
|
||||
end
|
||||
|
||||
if cast then
|
||||
local duration = endTime - startTime
|
||||
local max = duration / 1000
|
||||
local cur = GetTime() - startTime / 1000
|
||||
|
||||
this:SetAlpha(1)
|
||||
|
||||
local spellname = this.showname and cast and cast .. " " or ""
|
||||
local rank = this.showrank and nameSubtext and nameSubtext ~= "" and string.format("|cffaaffcc[%s]|r", nameSubtext) or ""
|
||||
|
||||
if this.endTime ~= endTime then
|
||||
this.bar:SetStatusBarColor(strsplit(",", C.appearance.castbar[(channel and "channelcolor" or "castbarcolor")]))
|
||||
this.bar.left:SetText(spellname .. rank)
|
||||
this.fadeout = nil
|
||||
this.endTime = endTime
|
||||
|
||||
-- set texture
|
||||
if texture and this.showicon then
|
||||
local size = this:GetHeight()
|
||||
this.icon:Show()
|
||||
this.icon:SetHeight(size)
|
||||
this.icon:SetWidth(size)
|
||||
|
||||
-- Override with item icon from libdebuff_casts or persistent item icon cache
|
||||
local useTexture = texture
|
||||
local useItemName = nil
|
||||
if pfUI.libdebuff_casts or pfUI.libdebuff_item_icons then
|
||||
local castGuid = nil
|
||||
if this.unitstr and UnitExists then
|
||||
local guid = UnitGUID(this.unitstr)
|
||||
castGuid = guid
|
||||
end
|
||||
if castGuid then
|
||||
-- First check active cast data
|
||||
if pfUI.libdebuff_casts and pfUI.libdebuff_casts[castGuid] and pfUI.libdebuff_casts[castGuid].itemID then
|
||||
useTexture = pfUI.libdebuff_casts[castGuid].icon or texture
|
||||
-- Fallback to persistent item icon cache
|
||||
elseif pfUI.libdebuff_item_icons and pfUI.libdebuff_item_icons[castGuid] then
|
||||
useTexture = pfUI.libdebuff_item_icons[castGuid].icon or texture
|
||||
useItemName = pfUI.libdebuff_item_icons[castGuid].name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
this.icon.texture:SetTexture(useTexture)
|
||||
this.bar:SetPoint("TOPLEFT", this.icon, "TOPRIGHT", this.spacing, 0)
|
||||
|
||||
-- Override spell name with item name for item-triggered casts
|
||||
if useItemName and this.showname then
|
||||
this.bar.left:SetText(useItemName .. " " .. rank)
|
||||
end
|
||||
else
|
||||
this.bar:SetPoint("TOPLEFT", this, 0, 0)
|
||||
this.icon:Hide()
|
||||
end
|
||||
|
||||
if this.showlag then
|
||||
local _, _, lag = GetNetStats()
|
||||
local width = this:GetWidth() / (duration/1000) * (lag/1000)
|
||||
this.bar.lag:SetWidth(math.min(this:GetWidth(), width))
|
||||
else
|
||||
this.bar.lag:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
local newMax = duration / 1000
|
||||
if this.lastMax ~= newMax then
|
||||
this.bar:SetMinMaxValues(0, newMax)
|
||||
this.lastMax = newMax
|
||||
end
|
||||
|
||||
if channel then
|
||||
cur = max + startTime/1000 - GetTime()
|
||||
end
|
||||
|
||||
cur = cur > max and max or cur
|
||||
cur = cur < 0 and 0 or cur
|
||||
|
||||
this.bar:SetValue(cur)
|
||||
|
||||
if this.showtimer then
|
||||
if this.delay and this.delay > 0 then
|
||||
local delay = "|cffffaaaa" .. (channel and "-" or "+") .. FormatCastbarTime(this.delay) .. " |r "
|
||||
this.bar.right:SetText(delay .. FormatCastbarTime(cur) .. " / " .. FormatCastbarTime(max))
|
||||
else
|
||||
this.bar.right:SetText(FormatCastbarTime(cur) .. " / " .. FormatCastbarTime(max))
|
||||
end
|
||||
end
|
||||
|
||||
this.fadeout = nil
|
||||
else
|
||||
this.bar:SetMinMaxValues(1,100)
|
||||
this.bar:SetValue(100)
|
||||
this.lastMax = nil
|
||||
this.fadeout = 1
|
||||
this.delay = 0
|
||||
this.itemIconApplied = nil
|
||||
end
|
||||
end)
|
||||
|
||||
-- register for spell delay
|
||||
-- Prefer Nampower's SPELL_DELAYED_SELF (gives casterGuid + delayMs directly).
|
||||
-- Fall back to vanilla SPELLCAST_DELAYED if Nampower is not available.
|
||||
local playerarg = nil
|
||||
local function ApplyPushback(delayMs)
|
||||
if not delayMs or delayMs <= 0 or not this.endTime then return end
|
||||
this.delay = (this.delay or 0) + delayMs / 1000
|
||||
this.endTime = this.endTime + delayMs
|
||||
local focusGuid = this.focusGuid
|
||||
if focusGuid and pfUI.libdebuff_casts and pfUI.libdebuff_casts[focusGuid] then
|
||||
pfUI.libdebuff_casts[focusGuid].endTime = this.endTime / 1000
|
||||
end
|
||||
-- Cast lifecycle, entirely on ClassicAPI's UNIT_SPELLCAST_* events. They
|
||||
-- fire per unit token: arg1=="player" for the player's own casts, and the
|
||||
-- remote token(s) ("target", "focus", ...) for other units -- so one set of
|
||||
-- events drives every bar with no Nampower dependency. The handler routes an
|
||||
-- event to this bar when arg1 matches its unit, or -- since the player's own
|
||||
-- casts only ever fire arg1=="player" -- when the bar's unit resolves to the
|
||||
-- player (target=self). PLAYER_TARGET/FOCUS_CHANGED re-polls so a unit
|
||||
-- already mid-cast when it becomes the target/focus still shows.
|
||||
-- Filter to this bar's unit, plus "player" for the target/focus bars: the
|
||||
-- player's own casts only ever fire arg1=="player", so a self-targeted cast
|
||||
-- has to reach them too (nil for the player bar itself, which the filter
|
||||
-- skips). This only narrows what arrives -- the arg1/UnitIsUnit test below
|
||||
-- still decides whether the bar acts on it.
|
||||
local selfunit = unitstr ~= "player" and "player" or nil
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_START", unitstr, selfunit)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_STOP", unitstr, selfunit)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_FAILED", unitstr, selfunit)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_INTERRUPTED", unitstr, selfunit)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_DELAYED", unitstr, selfunit)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", unitstr, selfunit)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_CHANNEL_START", unitstr, selfunit)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_CHANNEL_STOP", unitstr, selfunit)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_CHANNEL_UPDATE", unitstr, selfunit)
|
||||
if unitstr == "target" then
|
||||
cb:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
elseif unitstr == "focus" then
|
||||
cb:RegisterEvent("PLAYER_FOCUS_CHANGED")
|
||||
end
|
||||
-- The shield can flip mid-cast (the caster gains or loses an aura that
|
||||
-- blocks interrupts). These only fire for target and focus.
|
||||
if unitstr == "target" or unitstr == "focus" then
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_INTERRUPTIBLE", unitstr)
|
||||
cb:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", unitstr)
|
||||
end
|
||||
|
||||
cb:RegisterEvent("SPELL_DELAYED_SELF")
|
||||
cb:RegisterEvent(CASTBAR_EVENT_CAST_DELAY)
|
||||
cb:RegisterEvent(CASTBAR_EVENT_CHANNEL_DELAY)
|
||||
cb:RegisterEvent(CASTBAR_EVENT_CAST_START)
|
||||
cb:RegisterEvent(CASTBAR_EVENT_CHANNEL_START)
|
||||
cb:SetScript("OnEvent", function()
|
||||
if this.unitstr and not UnitIsUnit(this.unitstr, "player") then return end
|
||||
local unit = this.unitstr
|
||||
|
||||
if event == "SPELL_DELAYED_SELF" then
|
||||
-- arg1=casterGuid, arg2=delayMs (Nampower, most accurate)
|
||||
ApplyPushback(arg2)
|
||||
|
||||
elseif event == CASTBAR_EVENT_CAST_DELAY then
|
||||
-- SPELLCAST_DELAYED fallback intentionally removed - addon requires Nampower.
|
||||
-- Cast pushback is handled by SPELL_DELAYED_SELF above.
|
||||
if event == "PLAYER_TARGET_CHANGED" or event == "PLAYER_FOCUS_CHANGED" then
|
||||
RefreshBar(this)
|
||||
return
|
||||
end
|
||||
|
||||
elseif event == CASTBAR_EVENT_CHANNEL_DELAY then
|
||||
-- SPELLCAST_CHANNEL_UPDATE fires when a channel is pushed back by damage.
|
||||
-- arg1 = new remaining time in ms. Channel ends sooner = newEndTime < this.endTime.
|
||||
if not this.endTime or not arg1 then return end
|
||||
local newEndTime = GetTime() * 1000 + arg1
|
||||
local diff = this.endTime - newEndTime -- positive = time lost to pushback
|
||||
if diff > 50 then
|
||||
this.delay = (this.delay or 0) + diff / 1000
|
||||
this.endTime = newEndTime
|
||||
local focusGuid = this.focusGuid
|
||||
if focusGuid and pfUI.libdebuff_casts and pfUI.libdebuff_casts[focusGuid] then
|
||||
pfUI.libdebuff_casts[focusGuid].endTime = newEndTime / 1000
|
||||
-- UNIT_SPELLCAST_* fire per unit token (arg1). Handle an event when it's
|
||||
-- for this bar's unit, or -- since the player's own casts only ever fire
|
||||
-- arg1=="player" -- when this bar's unit currently resolves to the player
|
||||
-- (target=self / focus=self).
|
||||
-- Args: arg1=unit, arg2=castGUID, arg3=spellID, arg4=name, arg5=rank.
|
||||
if arg1 ~= unit and not (arg1 == "player" and UnitIsUnit(unit, "player")) then
|
||||
return
|
||||
end
|
||||
|
||||
if event == "UNIT_SPELLCAST_START" or event == "UNIT_SPELLCAST_CHANNEL_START" then
|
||||
-- START also fires per craft in a same-spell chain, so an active merge
|
||||
-- just resyncs the current craft's spark/label instead of restamping.
|
||||
if this.tradeskillTotal then
|
||||
StartTradeskillCraft(this)
|
||||
else
|
||||
RefreshBar(this, arg5)
|
||||
if this.isTradeskill and (this.pendingTradeskillCount or 0) > 1
|
||||
and C.castbar.player.mergetradeskill == "1" then
|
||||
EnterTradeskillMerge(this, this.startTime, this.endTime, this.pendingTradeskillCount)
|
||||
end
|
||||
this.pendingTradeskillCount = nil
|
||||
end
|
||||
elseif event == "UNIT_SPELLCAST_SUCCEEDED" then
|
||||
-- Per-craft completion during a tradeskill merge (arg3 = spellID):
|
||||
-- count and clear when the chain is done. A no-op for normal casts,
|
||||
-- which are cleared by UNIT_SPELLCAST_STOP.
|
||||
if this.tradeskillTotal and arg3 == this.tradeskillSpellID then
|
||||
this.tradeskillCompleted = (this.tradeskillCompleted or 0) + 1
|
||||
if this.tradeskillCompleted >= this.tradeskillTotal then
|
||||
ClearBar(this)
|
||||
else
|
||||
UpdateTradeskillLabel(this)
|
||||
end
|
||||
end
|
||||
elseif event == "UNIT_SPELLCAST_CHANNEL_STOP" then
|
||||
-- A channel's stop can arrive after a following cast already claimed
|
||||
-- the bar (channel->cast transition); only clear if a channel is
|
||||
-- actually being shown, so it doesn't wipe an active cast bar.
|
||||
if this.isChannel then ClearBar(this) end
|
||||
elseif event == "UNIT_SPELLCAST_STOP" then
|
||||
-- STOP fires between crafts in a merge too (each craft is a new cast);
|
||||
-- UNIT_SPELLCAST_SUCCEEDED owns the count, so only a non-merge cast
|
||||
-- clears here.
|
||||
if not this.tradeskillTotal then ClearBar(this) end
|
||||
elseif event == "UNIT_SPELLCAST_FAILED" or event == "UNIT_SPELLCAST_INTERRUPTED" then
|
||||
ClearBar(this, true)
|
||||
elseif event == "UNIT_SPELLCAST_INTERRUPTIBLE" or event == "UNIT_SPELLCAST_NOT_INTERRUPTIBLE" then
|
||||
if this.endTime then
|
||||
SetCastbarShield(this.bar, this.icon, event == "UNIT_SPELLCAST_NOT_INTERRUPTIBLE", this.isChannel)
|
||||
end
|
||||
elseif event == "UNIT_SPELLCAST_DELAYED" or event == "UNIT_SPELLCAST_CHANNEL_UPDATE" then
|
||||
-- Pushback: a cast delayed later or a channel shortened. Following
|
||||
-- Quartz, re-poll just the times and accumulate the shift into a running
|
||||
-- this.delay for the +/- indicator, rather than a full restamp (which
|
||||
-- would reset that total and re-render icon/text). ClassicAPI moves
|
||||
-- endMs (SpellDelayed_h bumps g_cast.endMs; the MSG_CHANNEL_UPDATE
|
||||
-- co-hook rewrites g_channel.endMs) while startMs stays put, so we diff
|
||||
-- endMs. delay is a positive magnitude; OnUpdate signs it "+" for casts
|
||||
-- and "-" for channels. Skipped during a tradeskill merge.
|
||||
if this.endTime and not this.tradeskillTotal then
|
||||
local startMs, endMs
|
||||
if this.isChannel then
|
||||
local _, _, _, s, e = C_Spell.UnitChannelInfo(unit)
|
||||
startMs, endMs = s, e
|
||||
else
|
||||
local _, _, _, s, e = C_Spell.UnitCastingInfo(unit)
|
||||
startMs, endMs = s, e
|
||||
end
|
||||
if startMs and endMs then
|
||||
local shift = this.isChannel and (this.endTime - endMs) or (endMs - this.endTime)
|
||||
this.delay = (this.delay or 0) + shift / 1000
|
||||
this.startTime = startMs
|
||||
this.endTime = endMs
|
||||
local newDuration = (endMs - startMs) / 1000
|
||||
this.bar:SetMinMaxValues(0, newDuration)
|
||||
this.lastMax = newDuration
|
||||
end
|
||||
end
|
||||
|
||||
elseif event == CASTBAR_EVENT_CAST_START or event == CASTBAR_EVENT_CHANNEL_START then
|
||||
playerarg = true
|
||||
this.delay = 0
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -350,6 +482,17 @@ pfUI:RegisterModule("castbar", function ()
|
||||
end
|
||||
|
||||
UpdateMovable(pfUI.castbar.player)
|
||||
|
||||
-- Tradeskill merge: hook DoTradeSkill so the player castbar knows the
|
||||
-- requested count before the first UNIT_SPELLCAST_START fires. Always-on
|
||||
-- hook (the config knob is read at event time so toggling takes effect on
|
||||
-- the next craft without a /reload). DoTradeSkill is synchronous; the
|
||||
-- server roundtrip to UNIT_SPELLCAST_START gives us plenty of time.
|
||||
hooksecurefunc("DoTradeSkill", function(index, num)
|
||||
if pfUI.castbar.player then
|
||||
pfUI.castbar.player.pendingTradeskillCount = tonumber(num) or 1
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- [[ pfTargetCastbar ]] --
|
||||
@@ -399,9 +542,6 @@ pfUI:RegisterModule("castbar", function ()
|
||||
pfUI.castbar.focus:SetHeight(C.castbar.focus.height)
|
||||
end
|
||||
|
||||
-- bind castbar to the "focus" unit token; the GUID resolves at read time
|
||||
pfUI.castbar.focus.unitstr = "focus"
|
||||
|
||||
UpdateMovable(pfUI.castbar.focus)
|
||||
end
|
||||
end)
|
||||
+181
-96
@@ -63,6 +63,23 @@ pfUI:RegisterModule("chat", function ()
|
||||
return pfUI_cache["chathistory"][realm][player][id]
|
||||
end
|
||||
|
||||
-- [ Chat Panel Colors ]
|
||||
-- The panels normally inherit pfUI's global appearance theme; custom colors let chat
|
||||
-- deviate from it. CreateBackdrop is re-run first to restore the theme, so toggling
|
||||
-- custom colors back off doesn't leave the previous override behind.
|
||||
local function ApplyPanelColors(panel)
|
||||
if not panel then return end
|
||||
|
||||
CreateBackdrop(panel, default_border, nil, .8)
|
||||
if C.chat.global.custombg ~= "1" then return end
|
||||
|
||||
local r, g, b, a = GetStringColor(C.chat.global.background)
|
||||
panel.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
|
||||
local r, g, b, a = GetStringColor(C.chat.global.border)
|
||||
panel.backdrop:SetBackdropBorderColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
end
|
||||
|
||||
pfUI.chat = CreateFrame("Frame",nil,UIParent)
|
||||
|
||||
pfUI.chat.left = CreateFrame("Frame", "pfChatLeft", UIParent)
|
||||
@@ -76,19 +93,11 @@ pfUI:RegisterModule("chat", function ()
|
||||
pfUI.chat.left:SetPoint("BOTTOMLEFT", 2*default_border,2*default_border)
|
||||
pfUI.chat.left:SetScript("OnShow", function() pfUI.chat:RefreshChat() end)
|
||||
UpdateMovable(pfUI.chat.left)
|
||||
CreateBackdrop(pfUI.chat.left, default_border, nil, .8)
|
||||
ApplyPanelColors(pfUI.chat.left)
|
||||
if C.chat.global.frameshadow == "1" then
|
||||
CreateBackdropShadow(pfUI.chat.left)
|
||||
end
|
||||
|
||||
if C.chat.global.custombg == "1" then
|
||||
local r, g, b, a = strsplit(",", C.chat.global.background)
|
||||
pfUI.chat.left.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
|
||||
local r, g, b, a = strsplit(",", C.chat.global.border)
|
||||
pfUI.chat.left.backdrop:SetBackdropBorderColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
end
|
||||
|
||||
pfUI.chat.left.panelTop = CreateFrame("Frame", "leftChatPanelTop", pfUI.chat.left)
|
||||
pfUI.chat.left.panelTop:ClearAllPoints()
|
||||
pfUI.chat.left.panelTop:SetHeight(C.global.font_size+default_border*2)
|
||||
@@ -251,19 +260,11 @@ pfUI:RegisterModule("chat", function ()
|
||||
pfUI.chat.right:SetPoint("BOTTOMRIGHT", -2*default_border,2*default_border)
|
||||
pfUI.chat.right:SetScript("OnShow", function() pfUI.chat:RefreshChat() end)
|
||||
UpdateMovable(pfUI.chat.right)
|
||||
CreateBackdrop(pfUI.chat.right, default_border, nil, .8)
|
||||
ApplyPanelColors(pfUI.chat.right)
|
||||
if C.chat.global.frameshadow == "1" then
|
||||
CreateBackdropShadow(pfUI.chat.right)
|
||||
end
|
||||
|
||||
if C.chat.global.custombg == "1" then
|
||||
local r, g, b, a = strsplit(",", C.chat.global.background)
|
||||
pfUI.chat.right.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
|
||||
local r, g, b, a = strsplit(",", C.chat.global.border)
|
||||
pfUI.chat.right.backdrop:SetBackdropBorderColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
end
|
||||
|
||||
pfUI.chat.right.panelTop = CreateFrame("Frame", "rightChatPanelTop", pfUI.chat.right)
|
||||
pfUI.chat.right.panelTop:ClearAllPoints()
|
||||
pfUI.chat.right.panelTop:SetHeight(C.global.font_size+default_border*2)
|
||||
@@ -296,6 +297,68 @@ pfUI:RegisterModule("chat", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- [ Chat Background Alpha ]
|
||||
-- Blizzard's per-window transparency slider drives FCF_SetWindowAlpha, which only
|
||||
-- touches the ChatFrame*Background textures that pfUI hides on docked frames. Mirror
|
||||
-- the window's stored alpha onto the visible pfUI backdrop so the native slider
|
||||
-- controls it directly.
|
||||
local function ApplyChatBackgroundAlpha(panel, frame)
|
||||
if not (panel and panel.backdrop and frame) then return end
|
||||
local _, _, _, _, _, alpha = GetChatWindowInfo(frame:GetID())
|
||||
alpha = tonumber(alpha)
|
||||
if not alpha then return end
|
||||
local r, g, b = panel.backdrop:GetBackdropColor()
|
||||
panel.backdrop:SetBackdropColor(r, g, b, alpha)
|
||||
end
|
||||
|
||||
function pfUI.chat:RefreshBackgroundAlpha()
|
||||
-- Custom colors own the alpha. C.chat.global.background carries its own alpha, is
|
||||
-- set by profiles and is shared with the meter skins, so the native slider must not
|
||||
-- overwrite it -- doing so reverted the configured opacity on every refresh. The
|
||||
-- slider only drives the panel when the user hasn't opted into pfUI's chat colors.
|
||||
if C.chat.global.custombg == "1" then return end
|
||||
|
||||
-- left panel follows the currently selected docked tab
|
||||
local selected = SELECTED_CHAT_FRAME
|
||||
if not (selected and selected:GetParent() == pfUI.chat.left) then
|
||||
selected = ChatFrame1
|
||||
end
|
||||
ApplyChatBackgroundAlpha(pfUI.chat.left, selected)
|
||||
|
||||
if C.chat.right.enable == "1" then
|
||||
ApplyChatBackgroundAlpha(pfUI.chat.right, ChatFrame3)
|
||||
end
|
||||
end
|
||||
|
||||
-- live config apply, resolved by the gui as U["chat"]. Lets the color pickers
|
||||
-- take effect on the spot instead of waiting for a /reload.
|
||||
function pfUI.chat:UpdateConfig()
|
||||
ApplyPanelColors(pfUI.chat.left)
|
||||
ApplyPanelColors(pfUI.chat.right)
|
||||
pfUI.chat:RefreshBackgroundAlpha()
|
||||
end
|
||||
|
||||
function pfUI.chat:MigrateBackgroundAlpha()
|
||||
-- Runs once per character. The previous SetupPositions default stored a hard 0 window
|
||||
-- alpha, which now renders the pfUI backdrop fully transparent. Restore the historical
|
||||
-- 0.8 look for any pfUI-managed window still sitting at 0. Only existing installs that
|
||||
-- already ran chat setup carry that legacy 0; fresh installs get 0.8 from SetupPositions.
|
||||
if pfUI_init.chatbgalpha then return end
|
||||
if not pfUI_init["chat_position"] then return end
|
||||
pfUI_init.chatbgalpha = true
|
||||
|
||||
local frames = { ChatFrame1, ChatFrame2 }
|
||||
if C.chat.right.enable == "1" then table.insert(frames, ChatFrame3) end
|
||||
|
||||
for _, frame in ipairs(frames) do
|
||||
local _, _, _, _, _, alpha = GetChatWindowInfo(frame:GetID())
|
||||
alpha = tonumber(alpha)
|
||||
if alpha and alpha <= 0 then
|
||||
FCF_SetWindowAlpha(frame, 0.8)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function pfUI.chat:RefreshChat()
|
||||
local panelheight = C.global.font_size*1.5 + default_border*2 + 2
|
||||
|
||||
@@ -313,7 +376,8 @@ pfUI:RegisterModule("chat", function ()
|
||||
CreateBackdrop(LanguageMenu)
|
||||
CreateBackdrop(VoiceMacroMenu)
|
||||
|
||||
local combatlogpanel = (CombatLogQuickButtonFrame_Custom and CombatLogQuickButtonFrame_Custom:GetHeight() or 0)
|
||||
-- the combatlog module's quick button bar sits above the docked log
|
||||
local combatlogpanel = (ChatFrame2.CombatLogQuickButtonFrame and ChatFrame2.CombatLogQuickButtonFrame:GetHeight() or 0)
|
||||
|
||||
for i=1, NUM_CHAT_WINDOWS do
|
||||
local frame = _G["ChatFrame"..i]
|
||||
@@ -326,7 +390,7 @@ pfUI:RegisterModule("chat", function ()
|
||||
end
|
||||
end
|
||||
|
||||
if combat > 5 then
|
||||
if frame.CombatLogQuickButtonFrame or combat > 5 then
|
||||
frame.pfCombatLog = true
|
||||
else
|
||||
frame.pfCombatLog = nil
|
||||
@@ -429,7 +493,7 @@ pfUI:RegisterModule("chat", function ()
|
||||
_G["ChatFrame" .. i .. "TabFlash"].Show = function() return end
|
||||
end
|
||||
|
||||
local _, class = UnitClass("player")
|
||||
local class = UnitClassBase("player")
|
||||
local classColor = PFUI_CLASS_COLORS[class]
|
||||
_G["ChatFrame" .. i .. "TabText"]:SetTextColor((classColor.r + .3) * .5, (classColor.g + .3) * .5, (classColor.b + .3) * .5, 1)
|
||||
_G["ChatFrame" .. i .. "TabText"]:SetFont(panelfont,panelfont_size, "OUTLINE")
|
||||
@@ -447,9 +511,13 @@ pfUI:RegisterModule("chat", function ()
|
||||
for index, value in pairs(DOCKED_CHAT_FRAMES) do
|
||||
FCF_UpdateButtonSide(value)
|
||||
end
|
||||
|
||||
pfUI.chat:RefreshBackgroundAlpha()
|
||||
end
|
||||
|
||||
hooksecurefunc("FCF_SaveDock", pfUI.chat.RefreshChat)
|
||||
hooksecurefunc("FCF_SetWindowAlpha", function() pfUI.chat:RefreshBackgroundAlpha() end)
|
||||
hooksecurefunc("FCF_SelectDockFrame", function() pfUI.chat:RefreshBackgroundAlpha() end)
|
||||
|
||||
if C.chat.global.tabmouse == "1" then
|
||||
pfUI.chat.mouseovertab = CreateFrame("Frame")
|
||||
@@ -459,10 +527,10 @@ pfUI:RegisterModule("chat", function ()
|
||||
|
||||
if pfUI.chat.hideLock then return end
|
||||
|
||||
if MouseIsOver(pfUI.chat.left, 10, -10, -10, 10) then
|
||||
if pfUI.chat.left:IsMouseOver(10, -10, -10, 10) then
|
||||
pfUI.chat.left.panelTop:Show()
|
||||
FCF_DockUpdate()
|
||||
elseif MouseIsOver(pfUI.chat.right, 10, -10, -10, 10) then
|
||||
elseif pfUI.chat.right:IsMouseOver(10, -10, -10, 10) then
|
||||
-- disable while dock is active
|
||||
if pfUI.chat.right:GetAlpha() == 0 then return end
|
||||
|
||||
@@ -500,7 +568,7 @@ pfUI:RegisterModule("chat", function ()
|
||||
FCF_SetLocked(ChatFrame1, 1)
|
||||
FCF_SetWindowName(ChatFrame1, GENERAL)
|
||||
FCF_SetWindowColor(ChatFrame1, 0, 0, 0)
|
||||
FCF_SetWindowAlpha(ChatFrame1, 0)
|
||||
FCF_SetWindowAlpha(ChatFrame1, 0.8)
|
||||
FCF_SetChatWindowFontSize(ChatFrame1, 12)
|
||||
ChatFrame1:SetUserPlaced(1)
|
||||
|
||||
@@ -508,7 +576,7 @@ pfUI:RegisterModule("chat", function ()
|
||||
FCF_SetLocked(ChatFrame2, 1)
|
||||
FCF_SetWindowName(ChatFrame2, COMBAT_LOG)
|
||||
FCF_SetWindowColor(ChatFrame2, 0, 0, 0)
|
||||
FCF_SetWindowAlpha(ChatFrame2, 0)
|
||||
FCF_SetWindowAlpha(ChatFrame2, 0.8)
|
||||
FCF_SetChatWindowFontSize(ChatFrame2, 12)
|
||||
ChatFrame2:SetUserPlaced(1)
|
||||
|
||||
@@ -518,7 +586,7 @@ pfUI:RegisterModule("chat", function ()
|
||||
FCF_SetLocked(ChatFrame3, 1)
|
||||
FCF_SetWindowName(ChatFrame3, T["Loot & Spam"])
|
||||
FCF_SetWindowColor(ChatFrame3, 0, 0, 0)
|
||||
FCF_SetWindowAlpha(ChatFrame3, 0)
|
||||
FCF_SetWindowAlpha(ChatFrame3, 0.8)
|
||||
FCF_SetChatWindowFontSize(ChatFrame3, 12)
|
||||
FCF_UnDockFrame(ChatFrame3)
|
||||
FCF_SetTabPosition(ChatFrame3, 0)
|
||||
@@ -566,6 +634,9 @@ pfUI:RegisterModule("chat", function ()
|
||||
end
|
||||
|
||||
pfUI.chat:SetScript("OnEvent", function()
|
||||
-- restore legacy chat windows stuck at 0 alpha before anything reads it
|
||||
pfUI.chat:MigrateBackgroundAlpha()
|
||||
|
||||
-- set the default chat
|
||||
FCF_SelectDockFrame(SELECTED_CHAT_FRAME)
|
||||
|
||||
@@ -675,7 +746,7 @@ pfUI:RegisterModule("chat", function ()
|
||||
end
|
||||
|
||||
-- read and parse whisper color settings
|
||||
local cr, cg, cb, ca = strsplit(",", C.chat.global.whisper)
|
||||
local cr, cg, cb, ca = GetStringColor(C.chat.global.whisper)
|
||||
cr, cg, cb = tonumber(cr), tonumber(cg), tonumber(cb)
|
||||
local wcol = rgbhex(cr, cg, cb)
|
||||
|
||||
@@ -706,36 +777,46 @@ pfUI:RegisterModule("chat", function ()
|
||||
_G.CHAT_WHISPER_INFORM_GET = '[W]' .. default
|
||||
end
|
||||
|
||||
local r,g,b,a = strsplit(",", C.chat.text.timecolor)
|
||||
local r,g,b,a = GetStringColor(C.chat.text.timecolor)
|
||||
local timecolorhex = rgbhex(r,g,b,a)
|
||||
|
||||
local r,g,b = strsplit(",", C.chat.text.unknowncolor)
|
||||
local unknowncolorhex = rgbhex(r,g,b)
|
||||
-- AddMessage puts the time between these at the start of each line
|
||||
local timestampStart = timecolorhex .. tleft
|
||||
local timestampEnd = tright .. "|r "
|
||||
|
||||
-- Suppress FriendsFrame's WHO_LIST_UPDATE handling for our DLL-issued
|
||||
-- name lookups so they don't pop the friends panel. User-issued /who
|
||||
-- still works because IsWhoQueryPending only reports true for queries
|
||||
-- issued via C_FriendList.SendWhoQueryByName.
|
||||
local original_FriendsFrame_OnEvent = FriendsFrame_OnEvent
|
||||
_G.FriendsFrame_OnEvent = function()
|
||||
if _G.event == "WHO_LIST_UPDATE" and C_FriendList.IsWhoQueryPending() then return end
|
||||
return original_FriendsFrame_OnEvent()
|
||||
-- [ StripTimestamp ]
|
||||
-- Returns a chat line without the timestamp AddMessage put before it.
|
||||
function pfUI.chat.StripTimestamp(text)
|
||||
if C.chat.text.time ~= "1" or text:sub(1, #timestampStart) ~= timestampStart then
|
||||
return text
|
||||
end
|
||||
local _, last = text:find(timestampEnd, #timestampStart + 1, true)
|
||||
return last and text:sub(last + 1) or text
|
||||
end
|
||||
|
||||
local r,g,b = GetStringColor(C.chat.text.unknowncolor)
|
||||
local unknowncolorhex = rgbhex(r,g,b)
|
||||
|
||||
local function GetPlayerLevel(name)
|
||||
if not pfUI_playerDB then return nil end
|
||||
if not pfUI_playerDB[name] then return nil end
|
||||
return pfUI_playerDB[name].level
|
||||
end
|
||||
|
||||
local function AddMessage(frame, text, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
|
||||
-- Passes every argument after the text on: GetMessageInfo returns them all,
|
||||
-- and a hook that drops some loses them for every frame after it.
|
||||
local function AddMessage(frame, text, ...)
|
||||
if not text then return end
|
||||
|
||||
-- skip chat parsing on combat log
|
||||
if frame.pfCombatLog then
|
||||
return frame:HookAddMessage(text, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
|
||||
return frame:HookAddMessage(text, ...)
|
||||
end
|
||||
|
||||
-- payload of the CHAT_MSG event printing this line; nil for lines
|
||||
-- that don't come from one (system text, addon output, history)
|
||||
local event, _, sender, _, _, _, _, _, _, _, _, _, guid = GetCurrentChatEvent()
|
||||
|
||||
-- Remove prat CLINKs
|
||||
text = gsub(text, "{CLINK:(%x+):([%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-):([^}]-)}", "|c%1|Hitem:%2|h[%3]|h|r") -- tbc
|
||||
text = gsub(text, "{CLINK:(%x+):([%d-]-:[%d-]-:[%d-]-:[%d-]-):([^}]-)}", "|c%1|Hitem:%2|h[%3]|h|r") -- vanilla
|
||||
@@ -751,85 +832,89 @@ pfUI:RegisterModule("chat", function ()
|
||||
text = pfUI.chat:HandleLink(text)
|
||||
end
|
||||
|
||||
-- display class colors if already indexed
|
||||
if C.chat.text.classcolor == "1" then
|
||||
for name in gfind(text, "|Hplayer:(.-)|h") do
|
||||
local real, _ = strsplit(":", name)
|
||||
local color = unknowncolorhex
|
||||
local match = false
|
||||
local _, class = C_PlayerCache.GetPlayerInfoByName(real)
|
||||
-- local guid = GetCurrentChatGUID()
|
||||
-- if guid then
|
||||
-- _, class = GetPlayerInfoByGUID(guid)
|
||||
-- end
|
||||
if not class then
|
||||
class = GetUnitInfo(real)
|
||||
end
|
||||
if class then
|
||||
if class ~= UNKNOWN then
|
||||
color = "|c" .. PFUI_CLASS_COLORS[class].colorStr
|
||||
match = true
|
||||
end
|
||||
elseif C.chat.text.whosearchunknown == "1" then
|
||||
C_FriendList.SendWhoQueryByName(name) -- cooldown + state managed by DLL
|
||||
end
|
||||
|
||||
if C.chat.text.tintunknown == "1" or match then
|
||||
text = string.gsub(text, "|Hplayer:"..name.."|h%["..real.."%]|h(.-:-)",
|
||||
left..color.."|Hplayer:"..name.."|h" .. color .. real .. "|h|r"..right.."%1")
|
||||
end
|
||||
-- display class colors and player levels if already indexed
|
||||
local classcolor = C.chat.text.classcolor == "1"
|
||||
local playerlevel = C.chat.text.playerlevel == "1"
|
||||
if classcolor or playerlevel then
|
||||
-- the engine name-queries a chat sender before the event fires,
|
||||
-- so the sender's GUID always resolves; other names in the text
|
||||
-- fall back to the name-keyed lookups
|
||||
local _, senderClass, senderRace, senderSex
|
||||
if classcolor and guid and guid ~= "" then
|
||||
_, senderClass, _, senderRace, senderSex = GetPlayerInfoByGUID(guid)
|
||||
end
|
||||
end
|
||||
|
||||
-- display player levels if available
|
||||
if C.chat.text.playerlevel == "1" then
|
||||
for name in gfind(text, "|Hplayer:(.-)|h") do
|
||||
local real, _ = strsplit(":", name)
|
||||
local level = GetPlayerLevel(real)
|
||||
local color, icon = "", ""
|
||||
|
||||
if classcolor then
|
||||
local class, raceKey, sex
|
||||
if senderClass and real == sender then
|
||||
class, raceKey, sex = senderClass, senderRace, senderSex
|
||||
else
|
||||
_, class, _, raceKey, sex = C_PlayerCache.GetPlayerInfoByName(real)
|
||||
end
|
||||
if not class then
|
||||
class = GetUnitInfo(real)
|
||||
end
|
||||
if class and class ~= UNKNOWN then
|
||||
color = "|c" .. PFUI_CLASS_COLORS[class].colorStr
|
||||
if C.chat.text.factionicons == "1" then
|
||||
icon = GetFactionIcon(raceKey)
|
||||
end
|
||||
if C.chat.text.raceicons == "1" then
|
||||
icon = icon .. GetRaceIcon(raceKey, sex)
|
||||
end
|
||||
elseif C.chat.text.tintunknown == "1" then
|
||||
color = unknowncolorhex
|
||||
end
|
||||
end
|
||||
|
||||
local suffix = ""
|
||||
local level = playerlevel and GetPlayerLevel(real)
|
||||
if level and level > 0 then
|
||||
local levelcolor = rgbhex(GetDifficultyColor(level))
|
||||
-- Add level after the player name, before the closing bracket
|
||||
text = string.gsub(text, "(|Hplayer:" .. name .. "|h.-|h|r)" .. right,
|
||||
"%1 " .. levelcolor .. level .. "|r" .. right)
|
||||
elseif level and level <= 0 then
|
||||
suffix = " " .. rgbhex(GetDifficultyColor(level)) .. level .. "|r"
|
||||
elseif level then
|
||||
-- Show ?? for unknown levels (e.g. -1 from UnitLevel)
|
||||
text = string.gsub(text, "(|Hplayer:" .. name .. "|h.-|h|r)" .. right,
|
||||
"%1 |cffff0000??|r" .. right)
|
||||
suffix = " |cffff0000??|r"
|
||||
end
|
||||
|
||||
if color ~= "" or suffix ~= "" then
|
||||
text = string.gsub(text, "|Hplayer:"..name.."|h%["..real.."%]|h(.-:-)",
|
||||
left..icon..color.."|Hplayer:"..name.."|h" .. color .. real .. "|h|r"..suffix..right.."%1")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- reduce channel name to number
|
||||
if C.chat.text.channelnumonly == "1" then
|
||||
local channel = string.gsub(text, ".*%[(.-)%]%s+(.*|Hplayer).+", "%1")
|
||||
if string.find(channel, "%d+%. ") then
|
||||
channel = string.gsub(channel, "(%d+)%..*", "channel%1")
|
||||
channel = string.gsub(channel, "channel", "")
|
||||
text = string.gsub(text, "%[%d+%..-%]%s+(.*|Hplayer)", left .. channel .. right .. " %1")
|
||||
end
|
||||
if C.chat.text.channelnumonly == "1" and event == "CHAT_MSG_CHANNEL" then
|
||||
text = string.gsub(text, "%[(%d+)%..-%] ", left .. "%1" .. right .. " ", 1)
|
||||
end
|
||||
|
||||
-- detect the whisper prefix BEFORE prepending a timestamp; the timestamp
|
||||
-- pushes the whisper colour code off position 1 and the find below fails
|
||||
local isWhisper = C.chat.global.whispermod == "1" and string.find(text, wcol, 1) == 1
|
||||
|
||||
if isWhisper then
|
||||
-- patch incoming whisper string to match the colors, before the
|
||||
-- timestamp so it keeps the form StripTimestamp looks for
|
||||
text = string.gsub(text, "|r", "|r" .. wcol)
|
||||
end
|
||||
|
||||
-- show timestamp in chat
|
||||
if C.chat.text.time == "1" then
|
||||
text = timecolorhex .. tleft .. date(C.chat.text.timeformat) .. tright .. "|r " .. text
|
||||
text = timestampStart .. date(C.chat.text.timeformat) .. timestampEnd .. text
|
||||
end
|
||||
|
||||
-- save chat history
|
||||
if C.chat.global.whispermod == "1" and string.find(text, wcol, 1) == 1 then
|
||||
if isWhisper then
|
||||
SaveChatHistory(frame:GetID(), string.gsub(text, wcol, ""), cr, cg, cb)
|
||||
else
|
||||
SaveChatHistory(frame:GetID(), text, a1, a2, a3)
|
||||
SaveChatHistory(frame:GetID(), text, ...)
|
||||
end
|
||||
|
||||
if C.chat.global.whispermod == "1" then
|
||||
-- patch incoming whisper string to match the colors
|
||||
if string.find(text, wcol, 1) == 1 then
|
||||
text = string.gsub(text, "|r", "|r" .. wcol)
|
||||
end
|
||||
end
|
||||
|
||||
frame:HookAddMessage(text, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
|
||||
frame:HookAddMessage(text, ...)
|
||||
end
|
||||
|
||||
for i=1,NUM_CHAT_WINDOWS do
|
||||
|
||||
+50
-107
@@ -1,5 +1,4 @@
|
||||
pfUI:RegisterModule("chatcopy", function ()
|
||||
local limit = 100
|
||||
local f = CreateFrame("Frame")
|
||||
f:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
f:SetScript("OnEvent", function()
|
||||
@@ -15,26 +14,27 @@ pfUI:RegisterModule("chatcopy", function ()
|
||||
button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled")
|
||||
button.icon:SetAllPoints()
|
||||
|
||||
-- show or hide the copy box of every chat frame
|
||||
local function SetCopyMode(state)
|
||||
button.state = state
|
||||
|
||||
for i=1, _G.NUM_CHAT_WINDOWS do
|
||||
local scroll = _G["ChatFrame"..i].scroll
|
||||
if scroll then
|
||||
scroll:SetShown(state)
|
||||
end
|
||||
end
|
||||
|
||||
if state then
|
||||
button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Up")
|
||||
else
|
||||
button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled")
|
||||
end
|
||||
end
|
||||
|
||||
button:SetScript("OnClick", function()
|
||||
if arg1 == "LeftButton" then
|
||||
this.state = not this.state
|
||||
|
||||
for i=1, _G.NUM_CHAT_WINDOWS do
|
||||
local frame = _G["ChatFrame"..i]
|
||||
local scroll = frame.scroll
|
||||
|
||||
if scroll and this.state then
|
||||
scroll:Show()
|
||||
elseif scroll then
|
||||
scroll:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
if this.state then
|
||||
button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Up")
|
||||
else
|
||||
button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled")
|
||||
end
|
||||
SetCopyMode(not this.state)
|
||||
elseif arg1 == "RightButton" then
|
||||
if ChatMenu:IsShown() then
|
||||
ChatMenu:Hide()
|
||||
@@ -56,99 +56,42 @@ pfUI:RegisterModule("chatcopy", function ()
|
||||
|
||||
for i=1, _G.NUM_CHAT_WINDOWS do
|
||||
local frame = _G["ChatFrame"..i]
|
||||
local name = frame:GetName()
|
||||
|
||||
local combat = 0
|
||||
for i, msg in pairs(frame.messageTypeList) do
|
||||
if strfind(msg, "SPELL", 1) or strfind(msg, "COMBAT", 1) then
|
||||
combat = combat + 1
|
||||
-- the chat frame's messages in an edit box to copy from
|
||||
local scroll = CreateFrame("Frame", "pfChatCopy" .. i, frame, "pfUIScrollingEditBoxTemplate")
|
||||
scroll:SetAllPoints(frame)
|
||||
scroll.tex = scroll:CreateTexture(nil, "BACKGROUND")
|
||||
scroll.tex:SetTexture(0,0,0,.95)
|
||||
scroll.tex:SetPoint("TOPLEFT", -3, 3)
|
||||
scroll.tex:SetPoint("BOTTOMRIGHT", 3, -3)
|
||||
scroll:Hide()
|
||||
|
||||
scroll:RegisterCallback("OnEscapePressed", function()
|
||||
SetCopyMode(false)
|
||||
end, scroll)
|
||||
|
||||
scroll:HookScript("OnShow", function()
|
||||
-- each line in its own color, which also replaces the |r resets inside it
|
||||
local lines = {}
|
||||
for index=1, frame:GetNumMessages() do
|
||||
local text, r, g, b = frame:GetMessageInfo(index)
|
||||
if C.chat.text.copytime == "0" then
|
||||
text = pfUI.chat.StripTimestamp(text)
|
||||
end
|
||||
local color = rgbhex(r, g, b)
|
||||
table.insert(lines, color .. text:gsub("|r", color))
|
||||
end
|
||||
end
|
||||
local text = table.concat(lines, "\n")
|
||||
|
||||
if combat < 5 then
|
||||
-- initialize message cache
|
||||
local history = {}
|
||||
local AddMessage = frame.AddMessage
|
||||
frame.AddMessage = function(self,msg,r,g,b)
|
||||
if msg and r and g and b then
|
||||
local col = rgbhex(r,g,b)
|
||||
table.insert(history, 1, col..string.gsub(msg, "|r", col))
|
||||
elseif msg then
|
||||
table.insert(history, 1, "|cffffffff"..msg)
|
||||
end
|
||||
scroll:SetFont(frame:GetFont())
|
||||
scroll:SetText(text)
|
||||
|
||||
if history[limit] then
|
||||
table.remove(history, limit)
|
||||
end
|
||||
AddMessage(self,msg,r,g,b)
|
||||
end
|
||||
-- the cursor at the end scrolls the box to the newest line
|
||||
scroll:SetFocus()
|
||||
scroll:SetCursorPosition(#text)
|
||||
end)
|
||||
|
||||
-- read chat defaults
|
||||
local font, size, flags = frame:GetFont()
|
||||
|
||||
-- build the frames
|
||||
local scroll = CreateScrollFrame("ChatFrameScroll"..i, frame)
|
||||
scroll:SetAllPoints(frame)
|
||||
scroll.tex = scroll:CreateTexture(nil, "BACKGROUND")
|
||||
scroll.tex:SetTexture(0,0,0,.95)
|
||||
scroll.tex:SetPoint("TOPLEFT", -3, 3)
|
||||
scroll.tex:SetPoint("BOTTOMRIGHT", 3, -3)
|
||||
scroll:Hide()
|
||||
|
||||
local editbox = CreateFrame("EditBox", "pfChatCopyBox" .. i, scroll)
|
||||
editbox:SetHeight(frame:GetHeight())
|
||||
editbox:SetWidth(frame:GetWidth())
|
||||
editbox:SetAllPoints(scroll)
|
||||
editbox:SetTextColor(1,1,1,1)
|
||||
editbox:SetFontObject(ChatFontNormal)
|
||||
editbox:SetFont(font, size, flags)
|
||||
editbox:SetAutoFocus(true)
|
||||
editbox:SetMultiLine(true)
|
||||
editbox:SetMaxLetters(0)
|
||||
|
||||
editbox:SetScript("OnMouseDown", function()
|
||||
editbox.hasFocus = true
|
||||
end)
|
||||
|
||||
editbox:SetScript("OnEscapePressed", function()
|
||||
if editbox.hasFocus then
|
||||
editbox:HighlightText(0, 0)
|
||||
editbox:ClearFocus()
|
||||
editbox.hasFocus = false
|
||||
else
|
||||
editbox:GetParent():Hide()
|
||||
pfChatCopyButton.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled")
|
||||
pfChatCopyButton.state = false
|
||||
end
|
||||
end)
|
||||
|
||||
scroll:SetScrollChild(editbox)
|
||||
scroll:SetScript("OnShow", function()
|
||||
editbox:SetText("")
|
||||
for i=limit,0,-1 do
|
||||
if history[i] then
|
||||
editbox:Insert("\n" .. history[i])
|
||||
end
|
||||
end
|
||||
|
||||
editbox:SetScript("OnUpdate", function()
|
||||
if not this.count then this.count = 0 end
|
||||
|
||||
scroll:UpdateScrollChildRect()
|
||||
scroll:SetVerticalScroll(scroll:GetVerticalScrollRange())
|
||||
scroll:Scroll()
|
||||
this.count = this.count + 1
|
||||
|
||||
-- the scroll frame takes a while to update
|
||||
if this.count >= 3 then
|
||||
this:SetScript("OnUpdate", nil)
|
||||
this.count = 0
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
frame.scroll = scroll
|
||||
end
|
||||
frame.scroll = scroll
|
||||
end
|
||||
|
||||
this:UnregisterAllEvents()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@ pfUI:RegisterModule("combopoints", function ()
|
||||
ComboFrame:Hide()
|
||||
ComboFrame:UnregisterAllEvents()
|
||||
|
||||
local _, class = UnitClass("player")
|
||||
local class = UnitClassBase("player")
|
||||
local combo_width = C["unitframes"]["combowidth"]
|
||||
local combo_height = C["unitframes"]["comboheight"]
|
||||
pfUI.combopoints = {}
|
||||
@@ -23,7 +23,7 @@ pfUI:RegisterModule("combopoints", function ()
|
||||
pfUI.combopoints[point]:SetPoint("CENTER", UIParent, "CENTER", (point - 3) * (combo_width + border*3), 10 )
|
||||
end
|
||||
|
||||
pfUI.combopoints[point].tex = pfUI.combopoints[point]:CreateTexture("OVERLAY")
|
||||
pfUI.combopoints[point].tex = pfUI.combopoints[point]:CreateTexture(nil, "OVERLAY")
|
||||
pfUI.combopoints[point].tex:SetAllPoints(pfUI.combopoints[point])
|
||||
|
||||
if point < 3 then
|
||||
@@ -52,7 +52,7 @@ pfUI:RegisterModule("combopoints", function ()
|
||||
-- combo
|
||||
if class == "DRUID" or class == "ROGUE" then
|
||||
local combo = CreateFrame("Frame")
|
||||
combo:RegisterEvent("UNIT_COMBO_POINTS")
|
||||
combo:RegisterUnitEvent("UNIT_COMBO_POINTS", "player")
|
||||
combo:RegisterEvent("PLAYER_COMBO_POINTS")
|
||||
combo:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
combo:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
|
||||
+65
-34
@@ -1,35 +1,40 @@
|
||||
pfUI:RegisterModule("cooldown", function ()
|
||||
-- cache values
|
||||
local lowcolor = {strsplit(",", C.appearance.cd.lowcolor)}
|
||||
local normalcolor = {strsplit(",", C.appearance.cd.normalcolor)}
|
||||
local minutecolor = {strsplit(",", C.appearance.cd.minutecolor)}
|
||||
local hourcolor = {strsplit(",", C.appearance.cd.hourcolor)}
|
||||
local daycolor = {strsplit(",", C.appearance.cd.daycolor)}
|
||||
-- local lowcolor = {strsplit(",", C.appearance.cd.lowcolor)}
|
||||
-- local normalcolor = {strsplit(",", C.appearance.cd.normalcolor)}
|
||||
-- local minutecolor = {strsplit(",", C.appearance.cd.minutecolor)}
|
||||
-- local hourcolor = {strsplit(",", C.appearance.cd.hourcolor)}
|
||||
-- local daycolor = {strsplit(",", C.appearance.cd.daycolor)}
|
||||
|
||||
local parent, parent_name
|
||||
local function pfCooldownOnUpdate()
|
||||
parent = this:GetParent()
|
||||
if not parent then this:Hide() end
|
||||
parent_name = parent:GetName()
|
||||
-- Throttle FIRST. One of these runs per visible cooldown text, every frame,
|
||||
-- so anything above this gate is multiplied by the frame rate and by how
|
||||
-- many cooldowns are ticking.
|
||||
local now = GetTime()
|
||||
if (this.tick or 0) > now then return end
|
||||
this.tick = now + .1
|
||||
|
||||
-- avoid to set cooldowns on invalid frames
|
||||
if parent_name and _G[parent_name .. "Cooldown"] then
|
||||
if not _G[parent_name .. "Cooldown"]:IsShown() then
|
||||
this:Hide()
|
||||
end
|
||||
local parent = this:GetParent()
|
||||
if not parent then this:Hide() return end
|
||||
|
||||
-- avoid to set cooldowns on invalid frames. The cooldown frame is stashed
|
||||
-- at creation: resolving it as _G[parent:GetName() .. "Cooldown"] built and
|
||||
-- interned that string twice per call, and this is the hottest path in the
|
||||
-- UI. The stashed reference is also the frame itself rather than a guess
|
||||
-- from its parent's name, so it holds for cooldowns named anything else.
|
||||
if this.cooldown and not this.cooldown:IsShown() then
|
||||
this:Hide()
|
||||
return
|
||||
end
|
||||
|
||||
-- only run every 0.1 seconds from here on
|
||||
if ( this.tick or .1) > GetTime() then return else this.tick = GetTime() + .1 end
|
||||
|
||||
-- fix own alpha value (should be inherited, but somehow isn't always)
|
||||
if this:GetAlpha() ~= parent:GetAlpha() then
|
||||
this:SetAlpha(parent:GetAlpha())
|
||||
end
|
||||
|
||||
if this.start < GetTime() then
|
||||
if this.start < now then
|
||||
-- calculating remaining time as it should be
|
||||
local remaining = this.duration - (GetTime() - this.start)
|
||||
local remaining = this.duration - (now - this.start)
|
||||
if remaining >= 0 then
|
||||
this.text:SetText(GetColoredTimeString(remaining))
|
||||
else
|
||||
@@ -38,13 +43,13 @@ pfUI:RegisterModule("cooldown", function ()
|
||||
else
|
||||
-- I have absolutely no idea, but it works:
|
||||
-- https://github.com/Stanzilla/WoWUIBugs/issues/47
|
||||
local time = time()
|
||||
local startupTime = time - GetTime()
|
||||
local currentTime = time()
|
||||
local startupTime = currentTime - now
|
||||
-- just a simplification of: ((2^32) - (start * 1000)) / 1000
|
||||
local cdTime = (2 ^ 32) / 1000 - this.start
|
||||
local cdStartTime = startupTime - cdTime
|
||||
local cdEndTime = cdStartTime + this.duration
|
||||
local remaining = cdEndTime - time
|
||||
local remaining = cdEndTime - currentTime
|
||||
|
||||
if remaining >= 0 then
|
||||
this.text:SetText(GetColoredTimeString(remaining))
|
||||
@@ -54,13 +59,14 @@ pfUI:RegisterModule("cooldown", function ()
|
||||
end
|
||||
end
|
||||
|
||||
local height, size
|
||||
local function pfCreateCoolDown(cooldown, start, duration)
|
||||
cooldown.pfCooldownText = CreateFrame("Frame", "pfCooldownFrame", cooldown:GetParent())
|
||||
cooldown.pfCooldownText:SetAllPoints(cooldown)
|
||||
cooldown.pfCooldownText:SetFrameLevel(cooldown:GetParent():GetFrameLevel() + 2)
|
||||
cooldown.pfCooldownText.text = cooldown.pfCooldownText:CreateFontString("pfCooldownFrameText", "OVERLAY")
|
||||
local function GetCooldownHeight(cooldown)
|
||||
return cooldown:GetParent() and cooldown:GetParent():GetHeight() or cooldown:GetHeight() or 0
|
||||
end
|
||||
|
||||
-- sizes the text to the cooldown's current height; the dynamic size follows
|
||||
-- the frame, so SetCooldown calls this again whenever that height changes
|
||||
local function pfUpdateCooldownFont(cooldown)
|
||||
local size
|
||||
if not cooldown.pfCooldownType then
|
||||
size = tonumber(C.appearance.cd.font_size_foreign)
|
||||
elseif cooldown.pfCooldownType == "BLIZZARD" then
|
||||
@@ -72,12 +78,27 @@ pfUI:RegisterModule("cooldown", function ()
|
||||
end
|
||||
|
||||
-- enforce dynamic font size
|
||||
if C.appearance.cd.dynamicsize == "1" and cooldown.GetParent then
|
||||
height = cooldown:GetParent() and cooldown:GetParent():GetHeight() or cooldown:GetHeight() or 0
|
||||
if C.appearance.cd.dynamicsize == "1" then
|
||||
local height = GetCooldownHeight(cooldown)
|
||||
cooldown.pfCooldownText.height = height
|
||||
size = math.max((height > 0 and height * .64 or 16), size)
|
||||
end
|
||||
|
||||
cooldown.pfCooldownText.text:SetFont(pfUI.media[C.appearance.cd.font], size, "OUTLINE")
|
||||
end
|
||||
|
||||
local textcount = 0
|
||||
local function pfCreateCoolDown(cooldown, start, duration)
|
||||
textcount = textcount + 1
|
||||
local name = cooldown.GetName and cooldown:GetName() or "pfCooldown" .. textcount
|
||||
|
||||
cooldown.pfCooldownText = CreateFrame("Frame", name .. "Text", cooldown:GetParent())
|
||||
cooldown.pfCooldownText.cooldown = cooldown
|
||||
cooldown.pfCooldownText:SetAllPoints(cooldown)
|
||||
cooldown.pfCooldownText:SetFrameLevel(cooldown:GetParent():GetFrameLevel() + 2)
|
||||
cooldown.pfCooldownText.text = cooldown.pfCooldownText:CreateFontString(name .. "TextString", "OVERLAY")
|
||||
|
||||
pfUpdateCooldownFont(cooldown)
|
||||
cooldown.pfCooldownText.text:SetPoint("CENTER", cooldown.pfCooldownText, "CENTER", 0, 0)
|
||||
cooldown.pfCooldownText:SetScript("OnUpdate", pfCooldownOnUpdate)
|
||||
end
|
||||
@@ -94,8 +115,10 @@ pfUI:RegisterModule("cooldown", function ()
|
||||
return
|
||||
end
|
||||
|
||||
-- realign cooldown frames
|
||||
local parent = this.GetParent and this:GetParent()
|
||||
-- realign the indicator Models that stock buttons build; the model is
|
||||
-- drawn at 36px and needs scaling to its button. A Cooldown draws its
|
||||
-- sweep to its own rect.
|
||||
local parent = this.GetParent and not this:IsObjectType("Cooldown") and this:GetParent()
|
||||
if parent and parent:GetWidth() / 36 > 0 then
|
||||
this:SetScale(parent:GetWidth() / 36)
|
||||
this:SetPoint("TOPLEFT", parent, "TOPLEFT", -1, 1)
|
||||
@@ -119,11 +142,19 @@ pfUI:RegisterModule("cooldown", function ()
|
||||
this:SetAlpha(0)
|
||||
end
|
||||
|
||||
-- reversed sweep direction (ClassicAPI backports SetReverse with the
|
||||
-- modern Cooldown frame; stock Model swipes don't have it, so guard it)
|
||||
if this.pfCooldownReverse == 1 and this.SetReverse then
|
||||
this:SetReverse(true)
|
||||
end
|
||||
|
||||
-- print time as text on cooldown frames
|
||||
if ( not this.pfCooldownStyleText or this.pfCooldownStyleText == 1)
|
||||
and start > 0 and duration > 0 and (not enable or enable > 0) then
|
||||
if( not this.pfCooldownText ) then
|
||||
pfCreateCoolDown(this, start, duration)
|
||||
elseif C.appearance.cd.dynamicsize == "1" and GetCooldownHeight(this) ~= this.pfCooldownText.height then
|
||||
pfUpdateCooldownFont(this)
|
||||
end
|
||||
|
||||
this.pfCooldownText.start = start
|
||||
@@ -134,7 +165,7 @@ pfUI:RegisterModule("cooldown", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- vanilla does not have a cooldown frame type, so we hook the
|
||||
-- regular SetTimer function that each one is calling.
|
||||
-- hook the SetTimer function that every cooldown, Cooldown frame or
|
||||
-- stock indicator Model, is driven through.
|
||||
hooksecurefunc("CooldownFrame_SetTimer", SetCooldown)
|
||||
end)
|
||||
+8
-11
@@ -8,9 +8,9 @@ pfUI:RegisterModule("easteregg", function ()
|
||||
local pvpking = CreateFrame("Frame", "pfPvPKing", UIParent)
|
||||
pvpking:Hide()
|
||||
|
||||
pvpking:RegisterEvent("CHAT_MSG_SYSTEM")
|
||||
pvpking:RegisterEvent("PLAYER_FLAGS_CHANGED")
|
||||
pvpking:SetScript("OnEvent", function()
|
||||
if strfind(arg1, "You are now", 1) and strfind(arg1, "(AFK)", 1) then
|
||||
if UnitIsAFK('player') then
|
||||
_G.CHAT_FLAG_AFK = title .. " "
|
||||
this.time = GetTime()
|
||||
this:Show()
|
||||
@@ -61,14 +61,13 @@ pfUI:RegisterModule("easteregg", function ()
|
||||
end)
|
||||
|
||||
-- trigger fireworks when being AFK
|
||||
fireworks:RegisterEvent("CHAT_MSG_SYSTEM")
|
||||
fireworks:RegisterEvent("PLAYER_FLAGS_CHANGED")
|
||||
fireworks:SetScript("OnEvent", function()
|
||||
if strfind(arg1, _G.MARKED_AFK) or strfind(arg1, _G.MARKED_AFK_MESSAGE) then
|
||||
local isAFK = UnitIsAFK('player')
|
||||
if isAFK then
|
||||
this:SetAlpha(0)
|
||||
this:Show()
|
||||
elseif strfind(arg1, _G.CLEARED_AFK) then
|
||||
this:Hide()
|
||||
end
|
||||
this:SetShown(isAFK)
|
||||
end)
|
||||
|
||||
-- basic explosion animation
|
||||
@@ -124,8 +123,7 @@ pfUI:RegisterModule("easteregg", function ()
|
||||
local f = GetExplosion()
|
||||
f:ClearAllPoints()
|
||||
f:SetPoint("CENTER", fireworks, "TOPLEFT", x, y)
|
||||
f:SetWidth(25)
|
||||
f:SetHeight(25)
|
||||
f:SetSize(25, 25)
|
||||
f.tex:SetTexture(1,1,1,.5)
|
||||
f:SetAlpha(1)
|
||||
f:Show()
|
||||
@@ -135,8 +133,7 @@ pfUI:RegisterModule("easteregg", function ()
|
||||
local f = GetExplosion()
|
||||
f:ClearAllPoints()
|
||||
f:SetPoint("CENTER", fireworks, "TOPLEFT", x+(math.random(0,100)-50), y+(math.random(0,100)-50))
|
||||
f:SetWidth(2)
|
||||
f:SetHeight(2)
|
||||
f:SetSize(2, 2)
|
||||
f.tex:SetTexture(math.random(),math.random(),math.random(),1)
|
||||
f:SetAlpha(1)
|
||||
f:Show()
|
||||
|
||||
+224
-62
@@ -1,20 +1,82 @@
|
||||
local function getAdjustedTickTimer()
|
||||
local adjustedEnergyTick = 2
|
||||
-- One server clock drives every power: Player::RegenerateAll fires every
|
||||
-- REGEN_TIME_FULL (2s), re-arms with `+=`, and is never reset by casting. The
|
||||
-- five-second rule (SetLastManaUse on any mana-costing cast) changes what a tick
|
||||
-- pays, never when it lands; mp5 and the player's MOD_MANA_REGEN_INTERRUPT share
|
||||
-- still come in. That share can't be computed here -- item sources are equip
|
||||
-- auras absent from the buff list and m_modManaRegenInterrupt is never sent --
|
||||
-- so the spark shows it instead: dim through the window until a tick lands.
|
||||
--
|
||||
-- The sweep free-runs on that clock and phase-locks to observed gains. A gain
|
||||
-- mid-sweep (Illumination, Judgement of Wisdom, potions, a Mana Spring totem on
|
||||
-- its own phase) is not the tick and never moves it.
|
||||
|
||||
-- Check rogue talents and compute energy tick timing reduction for Combat spec (1.18.0 Blade Rush Talent)
|
||||
if UnitClass("player") == "Rogue" then
|
||||
local _, _, _, _, currRank = GetTalentInfo(2, 16)
|
||||
local bladeRushRank = currRank or 0
|
||||
local FIVE_SECOND_RULE = 5
|
||||
|
||||
if bladeRushRank > 0 then
|
||||
local agility = UnitStat("player", 2) -- 2 is agility stat index
|
||||
local reductionPerAgi = 0.0006 * bladeRushRank -- 0.0006 for rank 1, 0.0012 for rank 2
|
||||
local totalReduction = agility * reductionPerAgi
|
||||
adjustedEnergyTick = adjustedEnergyTick - totalReduction
|
||||
-- gains farther than this from the predicted boundary are not the tick
|
||||
local TICK_TOLERANCE = .25
|
||||
|
||||
-- arrival jitter; a tick inside this band confirms the sweep rather than
|
||||
-- re-anchoring it, or the spark hitches at every wrap
|
||||
local TICK_JITTER = .08
|
||||
|
||||
-- Player::RegenerateAll:
|
||||
-- mod = GetTotalAuraModifier(SPELL_AURA_MOD_ENERGY_REGEN_TIME)
|
||||
-- if mod > 0 then mod = mod * agility / 10 end
|
||||
-- m_regenTimer += max(1, REGEN_TIME_FULL - mod) -- milliseconds
|
||||
local REGEN_TIME_FULL = 2
|
||||
local ENERGY_REGEN_TIME_AURA = 217 -- SPELL_AURA_MOD_ENERGY_REGEN_TIME
|
||||
|
||||
-- fixed magnitude is basePoints + baseDice (stored 11 -> 12); a die above 1 is
|
||||
-- a roll the client can't know, so it counts as nothing rather than a guess
|
||||
local amountCache = {}
|
||||
local function auraAmount(spellID)
|
||||
local amount = amountCache[spellID]
|
||||
if amount then return amount end
|
||||
amount = 0
|
||||
local effects = C_Spell.GetSpellEffectInfo(spellID) -- nil for an id with no record
|
||||
if effects then
|
||||
for i = 1, 3 do
|
||||
local fx = effects[i]
|
||||
if fx.auraName == ENERGY_REGEN_TIME_AURA and fx.dieSides <= 1 then
|
||||
amount = fx.basePoints + fx.baseDice
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
amountCache[spellID] = amount
|
||||
return amount
|
||||
end
|
||||
|
||||
return adjustedEnergyTick
|
||||
-- A passive is in effect exactly while known (current rank only, never in the
|
||||
-- buff list); anything castable or cast on us counts only while it is up.
|
||||
local function getEnergyRegenTimeMod()
|
||||
local sum = 0
|
||||
for _, spellID in ipairs(C_SpellBook.GetPlayerSpellsByAura(ENERGY_REGEN_TIME_AURA)) do
|
||||
if C_Spell.IsSpellPassive(spellID) then
|
||||
sum = sum + auraAmount(spellID)
|
||||
end
|
||||
end
|
||||
for i = 1, 32 do
|
||||
local spellID = select(10, C_UnitAuras.UnitAura("player", i, "HELPFUL"))
|
||||
if not spellID then break end
|
||||
sum = sum + auraAmount(spellID)
|
||||
end
|
||||
return sum
|
||||
end
|
||||
|
||||
-- cleared on SPELLS_CHANGED (passives) and PLAYER_AURAS_CHANGED (buffs), and
|
||||
-- recomputed by the next tick that asks. Agility stays live: it's one call.
|
||||
local energyRegenTimeMod
|
||||
|
||||
local function getAdjustedTickTimer()
|
||||
if not energyRegenTimeMod then
|
||||
energyRegenTimeMod = getEnergyRegenTimeMod()
|
||||
end
|
||||
if energyRegenTimeMod == 0 then return REGEN_TIME_FULL end
|
||||
|
||||
-- ms on the server, seconds here; the 1ms floor is the server's and this is a divisor
|
||||
local reduction = energyRegenTimeMod * UnitStat("player", 2) / 10000
|
||||
return math.max(0.001, REGEN_TIME_FULL - reduction)
|
||||
end
|
||||
|
||||
pfUI:RegisterModule("energytick", function()
|
||||
@@ -22,64 +84,118 @@ pfUI:RegisterModule("energytick", function()
|
||||
return
|
||||
end
|
||||
|
||||
-- inside the module body on purpose: C is on pfUI.env, not _G
|
||||
local function getBarWidth()
|
||||
return C.unitframes.player.pwidth ~= "-1" and C.unitframes.player.pwidth or C.unitframes.player.width
|
||||
end
|
||||
|
||||
local rawborder, default_border = GetBorderSize("unitframes")
|
||||
local cbtexture = pfUI.media[C.appearance.castbar.texture]
|
||||
|
||||
-- style is read once: switching it in the GUI needs a /reload, same as the
|
||||
-- other structural (not cosmetic) toggles in this file
|
||||
local fsrOverlay = C.unitframes.player.fsrstyle == "1"
|
||||
|
||||
-- was this gain the regen tick? if so, re-anchor the sweep on it
|
||||
local function lockTick(frame)
|
||||
local now, period = GetTime(), getAdjustedTickTimer()
|
||||
|
||||
if frame.start then
|
||||
-- signed distance to the nearest predicted boundary
|
||||
local err = mod(now - frame.start, period)
|
||||
if err > period / 2 then err = err - period end
|
||||
|
||||
if math.abs(err) <= TICK_TOLERANCE then
|
||||
-- correct only what lies beyond normal jitter
|
||||
if err > TICK_JITTER then
|
||||
frame.start = frame.start + (err - TICK_JITTER)
|
||||
elseif err < -TICK_JITTER then
|
||||
frame.start = frame.start + (err + TICK_JITTER)
|
||||
end
|
||||
frame.max, frame.rejected = period, nil
|
||||
return true
|
||||
end
|
||||
|
||||
-- two rejected gains one period apart are the real clock: relock to it
|
||||
local periodic = frame.rejected and math.abs(now - frame.rejected - period) <= TICK_TOLERANCE
|
||||
if not periodic then
|
||||
frame.rejected = now
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
frame.start, frame.max, frame.rejected = now, period, nil
|
||||
return true
|
||||
end
|
||||
|
||||
local energytick = CreateFrame("Frame", nil, pfUI.uf.player.power.bar)
|
||||
energytick:SetAllPoints(pfUI.uf.player.power.bar)
|
||||
energytick:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
energytick:RegisterEvent("UNIT_DISPLAYPOWER")
|
||||
energytick:RegisterEvent("UNIT_ENERGY")
|
||||
energytick:RegisterEvent("UNIT_MANA")
|
||||
energytick:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF")
|
||||
energytick:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS")
|
||||
energytick:RegisterUnitEvent("UNIT_DISPLAYPOWER", "player")
|
||||
energytick:RegisterUnitEvent("UNIT_ENERGY", "player")
|
||||
energytick:RegisterUnitEvent("UNIT_MANA", "player")
|
||||
energytick:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player")
|
||||
energytick:RegisterUnitEvent("UNIT_SPELLCAST_CHANNEL_STOP", "player")
|
||||
energytick:RegisterEvent("SPELLS_CHANGED")
|
||||
energytick:RegisterEvent("PLAYER_AURAS_CHANGED")
|
||||
|
||||
energytick:SetScript("OnEvent", function()
|
||||
if UnitPowerType("player") == 0 and C.unitframes.player.manatick == "1" then
|
||||
if UnitPowerType("player") == Enum.PowerType.Mana and C.unitframes.player.manatick == "1" then
|
||||
this.mode = "MANA"
|
||||
this:Show()
|
||||
elseif UnitPowerType("player") == 3 and C.unitframes.player.energy == "1" then
|
||||
elseif UnitPowerType("player") == Enum.PowerType.Energy and C.unitframes.player.energy == "1" then
|
||||
this.mode = "ENERGY"
|
||||
this:Show()
|
||||
else
|
||||
this:Hide()
|
||||
end
|
||||
|
||||
-- Filter nur eigene Energy-Gewinne von Talents/Buffs
|
||||
if event == "CHAT_MSG_SPELL_SELF_BUFF" or event == "CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS" then
|
||||
if string.find(arg1, "You gain") and string.find(arg1, "Energy from") then
|
||||
this.ignoreNextGain = true
|
||||
end
|
||||
if event == "SPELLS_CHANGED" or event == "PLAYER_AURAS_CHANGED" then
|
||||
energyRegenTimeMod = nil
|
||||
return
|
||||
end
|
||||
|
||||
if event == "PLAYER_ENTERING_WORLD" then
|
||||
this.lastMana = UnitMana("player")
|
||||
this.lastPower = UnitPower("player")
|
||||
end
|
||||
|
||||
-- the rule arms on the cast (Spell::TakePower: mana powerType, cost > 0),
|
||||
-- not on a mana drop -- Mana Burn lowers mana without arming it
|
||||
if event == "UNIT_SPELLCAST_SUCCEEDED" and arg1 == "player" then
|
||||
local cost = C_Spell.GetSpellPowerCost(arg3)
|
||||
cost = cost and cost[1]
|
||||
if cost and cost.type == Enum.PowerType.Mana and cost.cost > 0 then
|
||||
this.fsrSpell, this.fsrEnd = arg3, GetTime() + FIVE_SECOND_RULE
|
||||
this.fsrGain = nil
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
-- Unit::Update won't expire the rule while the spending spell still channels
|
||||
if event == "UNIT_SPELLCAST_CHANNEL_STOP" and arg1 == "player" then
|
||||
if this.fsrSpell and this.fsrSpell == arg3 then
|
||||
this.fsrEnd, this.fsrGain = GetTime() + FIVE_SECOND_RULE, nil
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if (event == "UNIT_MANA" or event == "UNIT_ENERGY") and arg1 == "player" then
|
||||
this.currentMana = UnitMana("player")
|
||||
local diff = 0
|
||||
if this.lastMana then
|
||||
diff = this.currentMana - this.lastMana
|
||||
local power = UnitPower("player")
|
||||
local diff = this.lastPower and (power - this.lastPower) or 0
|
||||
this.lastPower = power
|
||||
|
||||
-- only a gain can be the tick; a spend never touches the phase
|
||||
if diff > 0 and lockTick(this) then
|
||||
-- a tick inside the window proves regen continues through it
|
||||
if this.fsrEnd and this.fsrEnd > GetTime() then
|
||||
this.fsrGain = true
|
||||
end
|
||||
end
|
||||
|
||||
if this.mode == "MANA" and diff < 0 then
|
||||
this.target = 5
|
||||
elseif this.mode == "MANA" and diff > 0 then
|
||||
if UnitMana("player") >= UnitManaMax("player") then
|
||||
this.start = nil
|
||||
this.spark:SetAlpha(0)
|
||||
this:Hide()
|
||||
elseif this.max ~= 5 and diff > (this.badtick and this.badtick * 1.2 or 5) then
|
||||
this.target = 2
|
||||
else
|
||||
this.badtick = diff
|
||||
end
|
||||
elseif this.mode == "ENERGY" and diff >= 0 then
|
||||
if not this.ignoreNextGain then
|
||||
this.target = getAdjustedTickTimer()
|
||||
end
|
||||
this.ignoreNextGain = false
|
||||
-- phase is kept while hidden; OnUpdate catches up by whole periods
|
||||
if this.mode == "MANA" and power >= UnitPowerMax("player") then
|
||||
this:Hide()
|
||||
end
|
||||
this.lastMana = this.currentMana
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -90,37 +206,79 @@ pfUI:RegisterModule("energytick", function()
|
||||
end
|
||||
this.tick = GetTime() + 0.020 -- ~50 FPS
|
||||
|
||||
if this.target then
|
||||
this.start, this.max = GetTime(), this.target
|
||||
this.target = nil
|
||||
this.spark:SetAlpha(1)
|
||||
this:Show()
|
||||
-- five-second rule drains to nothing. The display is cosmetic and can be
|
||||
-- hidden on its own; the window itself (fsrEnd/fsrGain) keeps running
|
||||
-- either way -- it still dims the sweep spark below.
|
||||
local remaining = this.fsrEnd and (this.fsrEnd - GetTime()) or 0
|
||||
if this.mode == "MANA" and remaining > 0 then
|
||||
if C.unitframes.player.showfsr == "1" then
|
||||
if fsrOverlay then
|
||||
this.fsrbar:SetWidth(getBarWidth() * remaining / FIVE_SECOND_RULE)
|
||||
else
|
||||
this.fsrbar:SetValue(remaining)
|
||||
end
|
||||
this.fsrbar:Show()
|
||||
else
|
||||
this.fsrbar:Hide()
|
||||
end
|
||||
else
|
||||
this.fsrSpell, this.fsrEnd, this.fsrGain = nil, nil, nil
|
||||
this.fsrbar:Hide()
|
||||
end
|
||||
|
||||
if not this.start then
|
||||
this.spark:SetAlpha(0)
|
||||
return
|
||||
end
|
||||
|
||||
if this.mode == "MANA" and UnitPower("player") >= UnitPowerMax("player") then
|
||||
this.spark:SetAlpha(0)
|
||||
return
|
||||
end
|
||||
|
||||
this.current = GetTime() - this.start
|
||||
|
||||
-- roll over by whole periods, not from now: restarting bakes frame
|
||||
-- overshoot into the phase as drift the lock then has to chase
|
||||
if this.current > this.max then
|
||||
-- Don't restart tick timer if mana is full
|
||||
if this.mode == "MANA" and UnitMana("player") >= UnitManaMax("player") then
|
||||
this.start = nil
|
||||
this.spark:SetAlpha(0)
|
||||
return
|
||||
end
|
||||
this.start, this.max, this.current = GetTime(), getAdjustedTickTimer(), 0
|
||||
this.start = this.start + this.max * math.floor(this.current / this.max)
|
||||
this.max = getAdjustedTickTimer()
|
||||
this.current = GetTime() - this.start
|
||||
end
|
||||
|
||||
local pos = (C.unitframes.player.pwidth ~= "-1" and C.unitframes.player.pwidth or C.unitframes.player.width)
|
||||
* (this.current / this.max)
|
||||
-- dim while the rule is up and nothing has ticked inside it yet
|
||||
this.spark:SetAlpha((remaining > 0 and not this.fsrGain) and .4 or 1)
|
||||
|
||||
if not C.unitframes.player.pheight then
|
||||
return
|
||||
end
|
||||
|
||||
local pos = getBarWidth() * (this.current / this.max)
|
||||
this.spark:SetPoint("LEFT", pos - ((C.unitframes.player.pheight + 5) / 2), 0)
|
||||
end)
|
||||
|
||||
if fsrOverlay then
|
||||
-- classic style: a translucent shade on top of the power bar's own fill
|
||||
energytick.fsrbar = energytick:CreateTexture(nil, "ARTWORK")
|
||||
energytick.fsrbar:SetTexture(1, 1, 1, .15)
|
||||
energytick.fsrbar:SetPoint("TOPLEFT", 0, 0)
|
||||
energytick.fsrbar:SetPoint("BOTTOMLEFT", 0, 0)
|
||||
else
|
||||
-- a real bar below the power bar, not an overlay on top of it -- the same
|
||||
-- treatment nameplate castbars get relative to the health bar, so the
|
||||
-- window can't be mistaken for missing mana
|
||||
energytick.fsrbar = CreateFrame("StatusBar", nil, pfUI.uf.player)
|
||||
energytick.fsrbar:SetStatusBarTexture(cbtexture)
|
||||
energytick.fsrbar:SetMinMaxValues(0, FIVE_SECOND_RULE)
|
||||
energytick.fsrbar:SetPoint("TOPLEFT", pfUI.uf.player.power.bar, "BOTTOMLEFT", 0, -default_border * 2)
|
||||
energytick.fsrbar:SetPoint("TOPRIGHT", pfUI.uf.player.power.bar, "BOTTOMRIGHT", 0, -default_border * 2)
|
||||
energytick.fsrbar:SetHeight(tonumber(C.unitframes.player.fsrheight) or 4)
|
||||
energytick.fsrbar:SetStatusBarColor(GetStringColor(C.appearance.castbar.fsrcolor))
|
||||
CreateBackdrop(energytick.fsrbar, default_border)
|
||||
CreateBackdropShadow(energytick.fsrbar)
|
||||
end
|
||||
energytick.fsrbar:Hide()
|
||||
|
||||
energytick.spark = energytick:CreateTexture(nil, "OVERLAY")
|
||||
energytick.spark:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark")
|
||||
energytick.spark:SetHeight(C.unitframes.player.pheight + 15)
|
||||
@@ -131,6 +289,10 @@ pfUI:RegisterModule("energytick", function()
|
||||
function pfUI.uf.player.UpdateConfig()
|
||||
energytick.spark:SetHeight(C.unitframes.player.pheight + 15)
|
||||
energytick.spark:SetWidth(C.unitframes.player.pheight + 5)
|
||||
if not fsrOverlay then
|
||||
energytick.fsrbar:SetHeight(tonumber(C.unitframes.player.fsrheight) or 4)
|
||||
energytick.fsrbar:SetStatusBarColor(GetStringColor(C.appearance.castbar.fsrcolor))
|
||||
end
|
||||
hookUpdateConfig(pfUI.uf.player)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
+141
-217
@@ -1,243 +1,167 @@
|
||||
pfUI:RegisterModule("eqcompare", function ()
|
||||
local sides = { "Left", "Right" }
|
||||
local loc = pfUI.cache["locale"]
|
||||
for key, value in pairs(L["itemtypes"]) do setglobal(key, value) end
|
||||
INVTYPE_WEAPON_OTHER = INVTYPE_WEAPON.."_other"
|
||||
INVTYPE_FINGER_OTHER = INVTYPE_FINGER.."_other"
|
||||
INVTYPE_TRINKET_OTHER = INVTYPE_TRINKET.."_other"
|
||||
pfUI.eqcompare = {}
|
||||
|
||||
local function AddHeader(tooltip)
|
||||
local name = tooltip:GetName()
|
||||
local function ShowCompareItem(self, link, shift)
|
||||
self = self or GameTooltip
|
||||
shift = shift or IsShiftKeyDown()
|
||||
|
||||
-- shift all entries one line down
|
||||
for i=tooltip:NumLines(), 1, -1 do
|
||||
for _, side in pairs(sides) do
|
||||
local current = _G[name.."Text"..side..i]
|
||||
local below = _G[name.."Text"..side..i+1]
|
||||
if not link or (not shift and (C.tooltip.compare.showalways ~= "1" or C_Item.IsEquippedItem(link))) then
|
||||
return
|
||||
end
|
||||
|
||||
if current and current:IsShown() then
|
||||
local text = current:GetText()
|
||||
local r, g, b = current:GetTextColor()
|
||||
local shoppingTooltip1, shoppingTooltip2 = unpack(self.shoppingTooltips or { ShoppingTooltip1, ShoppingTooltip2 });
|
||||
|
||||
if text and text ~= "" then
|
||||
if tooltip:NumLines() < i+1 then
|
||||
-- add new line if required
|
||||
tooltip:AddLine(text, r, g, b, true)
|
||||
else
|
||||
-- update existing lines
|
||||
below:SetText(text)
|
||||
below:SetTextColor(r, g, b)
|
||||
below:Show()
|
||||
local SEPARATION = 6;
|
||||
local backdrop = shoppingTooltip1.GetBackdrop and shoppingTooltip1:GetBackdrop();
|
||||
local GAP = SEPARATION + ((type(backdrop) == "table" and backdrop.edgeSize) or 0);
|
||||
|
||||
-- hide processed line
|
||||
current:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
local item1 = nil;
|
||||
local item2 = nil;
|
||||
local side = "left";
|
||||
if ( shoppingTooltip1:SetHyperlinkCompareItem(link, 1, shift, self) ) then
|
||||
item1 = true;
|
||||
end
|
||||
if ( shoppingTooltip2:SetHyperlinkCompareItem(link, 2, shift, self) ) then
|
||||
item2 = true;
|
||||
end
|
||||
|
||||
-- find correct side
|
||||
local rightDist = 0;
|
||||
local leftPos = self:GetLeft();
|
||||
local rightPos = self:GetRight();
|
||||
if ( not rightPos ) then
|
||||
rightPos = 0;
|
||||
end
|
||||
if ( not leftPos ) then
|
||||
leftPos = 0;
|
||||
end
|
||||
|
||||
rightDist = GetScreenWidth() - rightPos;
|
||||
|
||||
if (leftPos and (rightDist < leftPos)) then
|
||||
side = "left";
|
||||
else
|
||||
side = "right";
|
||||
end
|
||||
|
||||
-- see if we should slide the tooltip
|
||||
if ( self:GetAnchorType() and self:GetAnchorType() ~= "ANCHOR_PRESERVE" ) then
|
||||
local totalWidth = 0;
|
||||
if ( item1 ) then
|
||||
totalWidth = totalWidth + shoppingTooltip1:GetWidth();
|
||||
end
|
||||
if ( item2 ) then
|
||||
totalWidth = totalWidth + shoppingTooltip2:GetWidth();
|
||||
end
|
||||
|
||||
if ( (side == "left") and (totalWidth > leftPos) ) then
|
||||
self:SetAnchorType(self:GetAnchorType(), (totalWidth - leftPos), 0);
|
||||
elseif ( (side == "right") and (rightPos + totalWidth) > GetScreenWidth() ) then
|
||||
self:SetAnchorType(self:GetAnchorType(), -((rightPos + totalWidth) - GetScreenWidth()), 0);
|
||||
end
|
||||
end
|
||||
|
||||
-- add label to first line
|
||||
_G[name.."TextLeft1"]:SetTextColor(.5, .5, .5, 1)
|
||||
_G[name.."TextLeft1"]:SetText(CURRENTLY_EQUIPPED)
|
||||
_G[name.."TextLeft1"]:Show()
|
||||
if ( item1 ) then
|
||||
shoppingTooltip1:SetOwner(self, "ANCHOR_NONE");
|
||||
shoppingTooltip1:ClearAllPoints();
|
||||
if ( side and side == "left" ) then
|
||||
shoppingTooltip1:SetPoint("TOPRIGHT", self, "TOPLEFT", -GAP, -10);
|
||||
else
|
||||
shoppingTooltip1:SetPoint("TOPLEFT", self, "TOPRIGHT", GAP, -10);
|
||||
end
|
||||
shoppingTooltip1:SetHyperlinkCompareItem(link, 1, shift, self);
|
||||
shoppingTooltip1:Show();
|
||||
|
||||
-- update tooltip sizes
|
||||
tooltip:Show()
|
||||
if ( item2 ) then
|
||||
shoppingTooltip2:SetOwner(shoppingTooltip1, "ANCHOR_NONE");
|
||||
shoppingTooltip2:ClearAllPoints();
|
||||
if ( side and side == "left" ) then
|
||||
shoppingTooltip2:SetPoint("TOPRIGHT", shoppingTooltip1, "TOPLEFT", -GAP, 0);
|
||||
else
|
||||
shoppingTooltip2:SetPoint("TOPLEFT", shoppingTooltip1, "TOPRIGHT", GAP, 0);
|
||||
end
|
||||
shoppingTooltip2:SetHyperlinkCompareItem(link, 2, shift, self);
|
||||
shoppingTooltip2:Show();
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local slotTable = {
|
||||
[INVTYPE_2HWEAPON] = "MainHandSlot",
|
||||
[INVTYPE_BODY] = "ShirtSlot",
|
||||
[INVTYPE_CHEST] = "ChestSlot",
|
||||
[INVTYPE_CLOAK] = "BackSlot",
|
||||
[INVTYPE_FEET] = "FeetSlot",
|
||||
[INVTYPE_FINGER] = "Finger0Slot",
|
||||
[INVTYPE_FINGER_OTHER] = "Finger1Slot",
|
||||
[INVTYPE_HAND] = "HandsSlot",
|
||||
[INVTYPE_HEAD] = "HeadSlot",
|
||||
[INVTYPE_HOLDABLE] = "SecondaryHandSlot",
|
||||
[INVTYPE_LEGS] = "LegsSlot",
|
||||
[INVTYPE_NECK] = "NeckSlot",
|
||||
[INVTYPE_RANGED] = "RangedSlot",
|
||||
[INVTYPE_RELIC] = "RangedSlot",
|
||||
[INVTYPE_ROBE] = "ChestSlot",
|
||||
[INVTYPE_SHIELD] = "SecondaryHandSlot",
|
||||
[INVTYPE_SHOULDER] = "ShoulderSlot",
|
||||
[INVTYPE_TABARD] = "TabardSlot",
|
||||
[INVTYPE_TRINKET] = "Trinket0Slot",
|
||||
[INVTYPE_TRINKET_OTHER] = "Trinket1Slot",
|
||||
[INVTYPE_WAIST] = "WaistSlot",
|
||||
[INVTYPE_WEAPON] = "MainHandSlot",
|
||||
[INVTYPE_WEAPON_OTHER] = "SecondaryHandSlot",
|
||||
[INVTYPE_WEAPONMAINHAND] = "MainHandSlot",
|
||||
[INVTYPE_WEAPONOFFHAND] = "SecondaryHandSlot",
|
||||
[INVTYPE_WRIST] = "WristSlot",
|
||||
local prevMerchant = ShoppingTooltip1.SetMerchantCompareItem
|
||||
local function SetMerchantCompareItem(self, index, compareItem)
|
||||
if compareItem == 1 then
|
||||
ShowCompareItem(nil, GetMerchantItemLink(index), 1)
|
||||
return false
|
||||
end
|
||||
return prevMerchant and prevMerchant(self, index, compareItem)
|
||||
end
|
||||
|
||||
[INVTYPE_WAND] = "RangedSlot",
|
||||
[INVTYPE_GUN] = "RangedSlot",
|
||||
[INVTYPE_PROJECTILE] = "AmmoSlot",
|
||||
[INVTYPE_CROSSBOW] = "RangedSlot",
|
||||
[INVTYPE_THROWN] = "RangedSlot",
|
||||
local prevAuction = ShoppingTooltip1.SetAuctionCompareItem
|
||||
local function SetAuctionCompareItem(self, type, index, compareItem)
|
||||
if compareItem == 1 then
|
||||
ShowCompareItem(nil, GetAuctionItemLink(type, index), 1)
|
||||
return false
|
||||
end
|
||||
return prevAuction and prevAuction(self, type, index, compareItem)
|
||||
end
|
||||
|
||||
ShoppingTooltip1.SetMerchantCompareItem = SetMerchantCompareItem
|
||||
ShoppingTooltip2.SetMerchantCompareItem = SetMerchantCompareItem
|
||||
ShoppingTooltip1.SetAuctionCompareItem = SetAuctionCompareItem
|
||||
ShoppingTooltip2.SetAuctionCompareItem = SetAuctionCompareItem
|
||||
|
||||
local TooltipHooks = {
|
||||
SetLootRollItem = GetLootRollItemLink,
|
||||
SetLootItem = GetLootSlotLink,
|
||||
SetQuestLogItem = GetQuestLogItemLink,
|
||||
SetQuestItem = GetQuestItemLink,
|
||||
SetHyperlink = function(link) return link end,
|
||||
SetBagItem = GetContainerItemLink,
|
||||
SetInboxItem = GetInboxItemLink,
|
||||
SetInventoryItem = GetInventoryItemLink,
|
||||
SetTradeSkillItem = function(skillIndex, reagentIndex)
|
||||
if reagentIndex then
|
||||
return GetTradeSkillReagentItemLink(skillIndex, reagentIndex)
|
||||
else
|
||||
return GetTradeSkillItemLink(skillIndex)
|
||||
end
|
||||
end,
|
||||
SetAuctionSellItem = GetAuctionSellItemLink,
|
||||
SetTradePlayerItem = GetTradePlayerItemLink,
|
||||
SetTradeTargetItem = GetTradeTargetItemLink
|
||||
}
|
||||
|
||||
local function startsWith(str, start)
|
||||
return string.sub(str, 1, string.len(start)) == start
|
||||
-- Guda anchors its item tooltips with ANCHOR_NONE and its own SetPoint, and
|
||||
-- the tooltip module then moves every ANCHOR_NONE tooltip to its configured
|
||||
-- spot. Reading the rect inside the Set* call picks the side against the
|
||||
-- position the tooltip is about to leave, so place the compare a frame later.
|
||||
local deferred
|
||||
if C_AddOns.DoesAddOnExist("Guda") then
|
||||
EventUtil.ContinueOnAddOnLoaded("Guda", function()
|
||||
deferred = true
|
||||
end)
|
||||
end
|
||||
|
||||
local function ExtractAttributes(tooltip)
|
||||
local name = tooltip:GetName()
|
||||
|
||||
-- get the name/header of the last set comparison tooltip
|
||||
local comparetooltip = pfUI.eqcompare.tooltip:GetName()
|
||||
local iname = _G[comparetooltip .. "TextLeft1"] and _G[comparetooltip .. "TextLeft1"]:GetText()
|
||||
|
||||
-- only run once per item
|
||||
if tooltip.pfCompLastName == iname then return end
|
||||
|
||||
tooltip.pfCompData = {}
|
||||
tooltip.pfCompLastName = iname
|
||||
|
||||
for i=1,30 do
|
||||
local widget = _G[name.."TextLeft"..i]
|
||||
if widget and widget:GetObjectType() == "FontString" then
|
||||
local text = widget:GetText()
|
||||
if text and not string.find(text, "-", 1, true) then
|
||||
local start = 1
|
||||
if startsWith(text, "\+") or startsWith(text, "\(") then start = 2 end
|
||||
|
||||
local space = string.find(text, " ", 1, true)
|
||||
if space then
|
||||
local value = tonumber(string.sub(text, start, space-1))
|
||||
if value and text then
|
||||
-- we've found an attr
|
||||
local attr = string.sub(text, space, string.len(text))
|
||||
tooltip.pfCompData[attr] = { value = tonumber(value), widget = widget }
|
||||
end
|
||||
end
|
||||
end
|
||||
local function makeHook(getter)
|
||||
return function(tooltip, arg1, arg2, arg3)
|
||||
local link = getter(arg1, arg2, arg3)
|
||||
if not deferred then
|
||||
return ShowCompareItem(tooltip, link)
|
||||
end
|
||||
RunNextFrame(function()
|
||||
if tooltip:IsShown() then
|
||||
ShowCompareItem(tooltip, link)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
local function CompareAttributes(data, targetData)
|
||||
if not data then return end
|
||||
|
||||
for attr,v in pairs(data) do
|
||||
if targetData then
|
||||
local target = targetData[attr]
|
||||
if target then
|
||||
if v.value ~= target.value and v.widget:GetText() then
|
||||
if v.value > target.value then
|
||||
if not strfind(v.widget:GetText(), "|cff88ff88") and not strfind(v.widget:GetText(), "|cffff8888") then
|
||||
v.widget:SetText(v.widget:GetText() .. "|cff88ff88 (+" .. round(v.value - target.value, 1) .. ")")
|
||||
end
|
||||
elseif not v.widget.compSet then
|
||||
if not strfind(v.widget:GetText(), "|cff88ff88") and not strfind(v.widget:GetText(), "|cffff8888") then
|
||||
v.widget:SetText(v.widget:GetText() .. "|cffff8888 (-" .. round(target.value - v.value, 1) .. ")")
|
||||
end
|
||||
end
|
||||
target.processed = true
|
||||
else
|
||||
target.processed = true
|
||||
end
|
||||
else
|
||||
-- this attribute doesnt exist in target
|
||||
if v.widget and v.widget:GetText() then
|
||||
if not strfind(v.widget:GetText(), "|cff88ff88") and not strfind(v.widget:GetText(), "|cffff8888") then
|
||||
v.widget:SetText(v.widget:GetText() .. "|cff88ff88 (+" .. v.value .. ")")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for _,target in pairs(targetData) do
|
||||
if target and not target.processed then
|
||||
-- we are an extra value
|
||||
local text = target.widget:GetText()
|
||||
if text and not strfind(text, "|cff88ff88") and not strfind(text, "|cffff8888") then
|
||||
target.widget:SetText(text .. "|cff88ff88 (+" .. target.value .. ")")
|
||||
end
|
||||
end
|
||||
local function HookTooltip(tooltip)
|
||||
for setter, getter in pairs(TooltipHooks) do
|
||||
hooksecurefunc(tooltip, setter, makeHook(getter))
|
||||
end
|
||||
end
|
||||
|
||||
pfUI.eqcompare = {}
|
||||
pfUI.eqcompare.GameTooltipShow = function()
|
||||
-- use this tooltip for the next comparison
|
||||
pfUI.eqcompare.tooltip = this
|
||||
HookTooltip(GameTooltip)
|
||||
|
||||
if not IsShiftKeyDown() and C.tooltip.compare.showalways ~= "1" then return end
|
||||
local rawborder, border = GetBorderSize()
|
||||
|
||||
for i=1,this:NumLines() do
|
||||
local tmpText = _G[this:GetName() .. "TextLeft"..i]
|
||||
for slotType, slotName in pairs(slotTable) do
|
||||
if tmpText:GetText() == slotType then
|
||||
local slotID = GetInventorySlotInfo(slotTable[slotType])
|
||||
|
||||
-- determine screen part
|
||||
local ltrigger = GetScreenWidth() / 2
|
||||
local x = GetCursorPosition()
|
||||
x = x / UIParent:GetEffectiveScale()
|
||||
if x > ltrigger then ltrigger = nil end
|
||||
|
||||
-- first tooltip
|
||||
ShoppingTooltip1:SetOwner(this, "ANCHOR_NONE")
|
||||
ShoppingTooltip1:ClearAllPoints()
|
||||
|
||||
if ltrigger then
|
||||
ShoppingTooltip1:SetPoint("BOTTOMLEFT", this, "BOTTOMRIGHT", 0, 0)
|
||||
else
|
||||
ShoppingTooltip1:SetPoint("BOTTOMRIGHT", this, "BOTTOMLEFT", -border*2-1, 0)
|
||||
end
|
||||
|
||||
ShoppingTooltip1:SetInventoryItem("player", slotID)
|
||||
ShoppingTooltip1:Show()
|
||||
AddHeader(ShoppingTooltip1)
|
||||
|
||||
-- second tooltip
|
||||
if slotTable[slotType .. "_other"] then
|
||||
local slotID_other = GetInventorySlotInfo(slotTable[slotType .. "_other"])
|
||||
|
||||
ShoppingTooltip2:SetOwner(this, "ANCHOR_NONE")
|
||||
ShoppingTooltip2:ClearAllPoints()
|
||||
|
||||
if ltrigger then
|
||||
ShoppingTooltip2:SetPoint("BOTTOMLEFT", ShoppingTooltip1, "BOTTOMRIGHT", 0, 0)
|
||||
else
|
||||
ShoppingTooltip2:SetPoint("BOTTOMRIGHT", ShoppingTooltip1, "BOTTOMLEFT", -border*2-1, 0)
|
||||
end
|
||||
|
||||
ShoppingTooltip2:SetInventoryItem("player", slotID_other)
|
||||
ShoppingTooltip2:Show()
|
||||
AddHeader(ShoppingTooltip2)
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- add HookScript method if not already existing
|
||||
GameTooltip.HookScript = GameTooltip.HookScript or HookScript
|
||||
ShoppingTooltip1.HookScript = ShoppingTooltip1.HookScript or HookScript
|
||||
ShoppingTooltip2.HookScript = ShoppingTooltip2.HookScript or HookScript
|
||||
|
||||
pfUI.eqcompare.ShoppingTooltipShow = function()
|
||||
-- abort if no comparison tooltip has been set
|
||||
if not pfUI.eqcompare.tooltip then return end
|
||||
|
||||
ExtractAttributes(this)
|
||||
ExtractAttributes(pfUI.eqcompare.tooltip)
|
||||
CompareAttributes(pfUI.eqcompare.tooltip.pfCompData, this.pfCompData)
|
||||
end
|
||||
|
||||
-- Add Gametooltip Hooks
|
||||
GameTooltip:HookScript("OnShow", pfUI.eqcompare.GameTooltipShow)
|
||||
if C.tooltip.compare.basestats == "1" then
|
||||
ShoppingTooltip1:HookScript("OnShow", pfUI.eqcompare.ShoppingTooltipShow)
|
||||
ShoppingTooltip2:HookScript("OnShow", pfUI.eqcompare.ShoppingTooltipShow)
|
||||
end
|
||||
pfUI.eqcompare.HookTooltip = HookTooltip
|
||||
end)
|
||||
|
||||
+1425
-386
File diff suppressed because it is too large
Load Diff
@@ -25,8 +25,7 @@ pfUI:RegisterModule("farmmode", function ()
|
||||
Minimap_ZoomOut()
|
||||
end
|
||||
|
||||
_G.SLASH_PFFARMMAP1, _G.SLASH_PFFARMMAP2 = "/farm", "/farmmode"
|
||||
_G.SlashCmdList.PFFARMMAP = ToggleFarmMode
|
||||
pfUI.api.RegisterSlashCommand("PFFARMMAP", { "/farm", "/farmmode" }, ToggleFarmMode, true)
|
||||
|
||||
pfUI.farmmap = CreateFrame("Minimap", "pfFarmMap", UIParent)
|
||||
pfUI.farmmap:Hide()
|
||||
@@ -42,8 +41,9 @@ pfUI:RegisterModule("farmmode", function ()
|
||||
pfUI.farmmap:RegisterForDrag("LeftButton")
|
||||
pfUI.farmmap:SetScript("OnMouseWheel", function()
|
||||
if IsControlKeyDown() then
|
||||
this:SetWidth(this:GetWidth() + (arg1 > 0 and 10 or -10))
|
||||
this:SetHeight(this:GetHeight() + (arg1 > 0 and 10 or -10))
|
||||
local adjust = (arg1 > 0 and 10 or -10)
|
||||
local width, height = this:GetSize()
|
||||
this:SetSize(width + adjust, height + adjust)
|
||||
Minimap_ZoomIn()
|
||||
Minimap_ZoomOut()
|
||||
elseif IsShiftKeyDown() then
|
||||
@@ -136,7 +136,7 @@ pfUI:RegisterModule("farmmode", function ()
|
||||
pfUI.farmmap.button.txt = pfUI.farmmap.button:CreateFontString("pfFarmMapText", "LOW", "GameFontWhite")
|
||||
pfUI.farmmap.button.txt:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
pfUI.farmmap.button.txt:SetPoint("CENTER", 0, 0)
|
||||
pfUI.farmmap.button.txt:SetText("|cff33ffcc FARM MODE")
|
||||
pfUI.farmmap.button.txt:SetText("|cff33ffcc " .. T["FARM MODE"])
|
||||
end
|
||||
|
||||
CreateBackdrop(pfUI.farmmap)
|
||||
|
||||
+6
-25
@@ -1,29 +1,10 @@
|
||||
pfUI:RegisterModule("feigndeath", function ()
|
||||
local cache = { }
|
||||
local scanner = libtipscan:GetScanner("feigndeath")
|
||||
local healthbar = scanner:GetChildren()
|
||||
|
||||
local cache_update = CreateFrame("Frame")
|
||||
cache_update:RegisterEvent("UNIT_HEALTH")
|
||||
cache_update:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
cache_update:SetScript("OnEvent", function()
|
||||
if event == "PLAYER_TARGET_CHANGED" and UnitIsDead("target") then
|
||||
scanner:SetUnit("target")
|
||||
cache[UnitName("target")] = healthbar:GetValue()
|
||||
elseif event == "UNIT_HEALTH" and UnitIsDead(arg1) and UnitName(arg1) then
|
||||
scanner:SetUnit(arg1)
|
||||
cache[UnitName(arg1)] = healthbar:GetValue()
|
||||
elseif event == "UNIT_HEALTH" and UnitName(arg1) then
|
||||
cache[UnitName(arg1)] = nil
|
||||
end
|
||||
end)
|
||||
|
||||
local oldUnitHealth = UnitHealth
|
||||
function UnitHealth(arg)
|
||||
if UnitIsDead(arg) and cache[UnitName(arg)] then
|
||||
return cache[UnitName(arg)]
|
||||
else
|
||||
return oldUnitHealth(arg)
|
||||
local oldUnitHealth = _G.UnitHealth
|
||||
_G.UnitHealth = function(unit)
|
||||
if UnitIsFeignDeath(unit) then
|
||||
local hp = GetUnitField(unit, "health")
|
||||
if hp and hp > 0 then return hp end
|
||||
end
|
||||
return oldUnitHealth(unit)
|
||||
end
|
||||
end)
|
||||
|
||||
+14
-14
@@ -46,6 +46,11 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if not self.completed then
|
||||
self.completed = true
|
||||
pfUI.events:TriggerEvent("firstrun:complete")
|
||||
end
|
||||
end
|
||||
|
||||
-- main function to create wizard windows
|
||||
@@ -122,7 +127,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
-- welcome dialog
|
||||
pfUI.firstrun:AddStep("init", function()
|
||||
local f = CreateFirstRunPage()
|
||||
f.text:SetText(string.format(T["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."], GetAddOnMetadata(pfUI.name, "X-Website")))
|
||||
f.text:SetFormattedText(T["Welcome to |cff33ffccpf|cffffffffUI|r!\n\nI'm the first run wizard that will guide you through some basic configuration. If you're lazy, feel free to hit the \"Defaults\" button. If you wish to run this dialog again, go to the settings and hit the \"Reset Firstrun\" button.\n\nVisit |cff33ffcc%s|r to check for the latest version."], GetAddOnMetadata(pfUI.name, "X-Website"))
|
||||
return f
|
||||
end)
|
||||
|
||||
@@ -132,8 +137,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
f.text:SetText(T["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."])
|
||||
|
||||
f.Modern = CreateFrame("Button", nil, f, "UIPanelButtonTemplate")
|
||||
f.Modern:SetWidth(120)
|
||||
f.Modern:SetHeight(20)
|
||||
f.Modern:SetSize(120, 20)
|
||||
f.Modern:SetPoint("BOTTOM", -65, 100)
|
||||
f.Modern:SetTextColor(1,1,1)
|
||||
f.Modern:SetText("Modern")
|
||||
@@ -146,8 +150,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
SkinButton(f.Modern)
|
||||
|
||||
f.Nostalgia = CreateFrame("Button", nil, f, "UIPanelButtonTemplate")
|
||||
f.Nostalgia:SetWidth(120)
|
||||
f.Nostalgia:SetHeight(20)
|
||||
f.Nostalgia:SetSize(120, 20)
|
||||
f.Nostalgia:SetPoint("BOTTOM", 65, 100)
|
||||
f.Nostalgia:SetTextColor(1,1,1)
|
||||
f.Nostalgia:SetText("Nostalgia")
|
||||
@@ -160,8 +163,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
SkinButton(f.Nostalgia)
|
||||
|
||||
f.Legacy = CreateFrame("Button", nil, f, "UIPanelButtonTemplate")
|
||||
f.Legacy:SetWidth(120)
|
||||
f.Legacy:SetHeight(20)
|
||||
f.Legacy:SetSize(120, 20)
|
||||
f.Legacy:SetPoint("BOTTOM", 65, 75)
|
||||
f.Legacy:SetTextColor(1,1,1)
|
||||
f.Legacy:SetText("Legacy")
|
||||
@@ -174,8 +176,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
SkinButton(f.Legacy)
|
||||
|
||||
f.Slim = CreateFrame("Button", nil, f, "UIPanelButtonTemplate")
|
||||
f.Slim:SetWidth(120)
|
||||
f.Slim:SetHeight(20)
|
||||
f.Slim:SetSize(120, 20)
|
||||
f.Slim:SetPoint("BOTTOM", -65, 75)
|
||||
f.Slim:SetTextColor(1,1,1)
|
||||
f.Slim:SetText("Slim")
|
||||
@@ -192,8 +193,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
f.Slider.text:SetPoint("TOP", f.Slider, "BOTTOM", 0, 2)
|
||||
f.Slider.text:SetText(T["Scale"])
|
||||
|
||||
f.Slider:SetWidth(240)
|
||||
f.Slider:SetHeight(20)
|
||||
f.Slider:SetSize(240, 20)
|
||||
f.Slider:SetPoint("BOTTOM", 0, 50)
|
||||
f.Slider:SetOrientation('HORIZONTAL')
|
||||
f.Slider:SetMinMaxValues(0.5, 2.0)
|
||||
@@ -258,7 +258,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
SkinCheckbox(f.checkbox, 18)
|
||||
|
||||
f.NextScript = function()
|
||||
if not pfUI.chat then message("Couldn't apply settings. Chat module is disabled.") end
|
||||
if not pfUI.chat then message("Couldn't apply settings. Chat module is disabled.") return end
|
||||
pfUI.chat.SetupRightChat(f.checkbox:GetChecked())
|
||||
end
|
||||
|
||||
@@ -278,7 +278,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
SkinCheckbox(f.checkbox, 18)
|
||||
|
||||
f.NextScript = function()
|
||||
if not pfUI.chat then message("Couldn't apply settings. Chat module is disabled.") end
|
||||
if not pfUI.chat then message("Couldn't apply settings. Chat module is disabled.") return end
|
||||
if f.checkbox:GetChecked() then
|
||||
pfUI.chat.SetupPositions()
|
||||
end
|
||||
@@ -300,7 +300,7 @@ pfUI:RegisterModule("firstrun", function ()
|
||||
SkinCheckbox(f.checkbox, 18)
|
||||
|
||||
f.NextScript = function()
|
||||
if not pfUI.chat then message("Couldn't apply settings. Chat module is disabled.") end
|
||||
if not pfUI.chat then message("Couldn't apply settings. Chat module is disabled.") return end
|
||||
if f.checkbox:GetChecked() then
|
||||
pfUI.chat.SetupChannels()
|
||||
end
|
||||
|
||||
+16
-42
@@ -2,20 +2,22 @@ pfUI:RegisterModule("focus", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
|
||||
pfUI.uf.focus = pfUI.uf:CreateUnitFrame("Focus", nil, C.unitframes.focus, .2)
|
||||
pfUI.uf.focus = pfUI.uf:CreateUnitFrame("Focus", nil, C.unitframes.focus)
|
||||
pfUI.uf.focus:UpdateFrameSize()
|
||||
pfUI.uf.focus:SetPoint("BOTTOMLEFT", UIParent, "BOTTOM", 220, 220)
|
||||
UpdateMovable(pfUI.uf.focus)
|
||||
pfUI.uf.focus:Hide()
|
||||
|
||||
pfUI.uf.focustarget = pfUI.uf:CreateUnitFrame("FocusTarget", nil, C.unitframes.focustarget, .2)
|
||||
pfUI.uf.focustarget = pfUI.uf:CreateUnitFrame("FocusTarget", nil, C.unitframes.focustarget)
|
||||
pfUI.uf.focustarget:UpdateFrameSize()
|
||||
pfUI.uf.focustarget:SetPoint("BOTTOMLEFT", pfUI.uf.focus, "TOP", 0, 10)
|
||||
UpdateMovable(pfUI.uf.focustarget)
|
||||
pfUI.uf.focustarget:Hide()
|
||||
|
||||
-- PLAYER_FOCUS_CHANGED drives immediate refresh on focus assign / clear.
|
||||
-- The frame's 0.2s tick keeps health/power/aura data fresh between events.
|
||||
-- Between events, ClassicAPI fires UNIT_* (health/mana/aura/...) with
|
||||
-- arg1 == "focus" and arg1 == "focustarget", so both frames update
|
||||
-- event-driven like target and need no polling tick.
|
||||
local refresher = CreateFrame("Frame")
|
||||
refresher:RegisterEvent("PLAYER_FOCUS_CHANGED")
|
||||
refresher:SetScript("OnEvent", function()
|
||||
@@ -27,46 +29,19 @@ pfUI:RegisterModule("focus", function ()
|
||||
end)
|
||||
|
||||
-- /focus and /clearfocus live in ClassicAPI's SlashCommandsRegistry now.
|
||||
-- /focusname is pfUI-specific because the engine has no name→GUID
|
||||
-- lookup for off-screen units — we resolve via a short target-swap.
|
||||
-- `/focus Name` takes the nearest prefix match; /focusname tries the exact
|
||||
-- name first, so "Bob" still wins over a nearer "Bobby".
|
||||
|
||||
SLASH_PFFOCUSNAME1, SLASH_PFFOCUSNAME2 = '/focusname', '/pffocusname'
|
||||
function SlashCmdList.PFFOCUSNAME(msg)
|
||||
pfUI.api.RegisterSlashCommand("PFFOCUSNAME", { '/focusname', '/pffocusname' }, function(msg)
|
||||
if msg == "" then return end
|
||||
|
||||
local prevGUID = UnitGUID("target")
|
||||
local prevPlayer = UnitIsUnit("target", "player")
|
||||
|
||||
-- Suppress async "Unknown unit" errors fired by TargetByName misses.
|
||||
UIErrorsFrame:UnregisterEvent("UI_ERROR_MESSAGE")
|
||||
|
||||
-- Try exact match first, then prefix match via /target.
|
||||
TargetByName(msg, true)
|
||||
if not UnitExists("target") then
|
||||
SlashCmdList.TARGET(msg)
|
||||
local unit = UnitTokenFromName(msg, true) or UnitTokenFromName(msg)
|
||||
if unit then
|
||||
FocusUnit(unit)
|
||||
end
|
||||
end, true)
|
||||
|
||||
if UnitExists("target") then
|
||||
FocusUnit("target")
|
||||
end
|
||||
|
||||
local restore = CreateFrame("Frame")
|
||||
restore:SetScript("OnUpdate", function()
|
||||
UIErrorsFrame:RegisterEvent("UI_ERROR_MESSAGE")
|
||||
restore:SetScript("OnUpdate", nil)
|
||||
end)
|
||||
|
||||
if prevGUID and prevGUID ~= "0x0000000000000000" then
|
||||
TargetUnit(prevGUID)
|
||||
elseif prevPlayer then
|
||||
TargetUnit("player")
|
||||
else
|
||||
ClearTarget()
|
||||
end
|
||||
end
|
||||
|
||||
SLASH_PFCASTFOCUS1, SLASH_PFCASTFOCUS2 = '/castfocus', '/pfcastfocus'
|
||||
function SlashCmdList.PFCASTFOCUS(msg)
|
||||
pfUI.api.RegisterSlashCommand("PFCASTFOCUS", { '/castfocus', '/pfcastfocus' }, function(msg)
|
||||
local focusGUID = UnitGUID("focus")
|
||||
if not focusGUID or focusGUID == "0x0000000000000000" then
|
||||
UIErrorsFrame:AddMessage(SPELL_FAILED_BAD_TARGETS, 1, 0, 0)
|
||||
@@ -107,10 +82,9 @@ function SlashCmdList.PFCASTFOCUS(msg)
|
||||
else
|
||||
TargetLastTarget()
|
||||
end
|
||||
end
|
||||
end, true)
|
||||
|
||||
SLASH_PFSWAPFOCUS1, SLASH_PFSWAPFOCUS2 = '/swapfocus', '/pfswapfocus'
|
||||
function SlashCmdList.PFSWAPFOCUS(msg)
|
||||
pfUI.api.RegisterSlashCommand("PFSWAPFOCUS", { '/swapfocus', '/pfswapfocus' }, function(msg)
|
||||
local targetGUID = UnitGUID("target")
|
||||
local oldFocusGUID = UnitGUID("focus")
|
||||
|
||||
@@ -120,4 +94,4 @@ function SlashCmdList.PFSWAPFOCUS(msg)
|
||||
TargetUnit(oldFocusGUID)
|
||||
end
|
||||
end
|
||||
end
|
||||
end, true)
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
-- Friend notes
|
||||
-- Client-side notes for friends via ClassicAPI's C_FriendList note API
|
||||
-- (SetFriendNotes / GetFriendInfo(.notes)). Adds an "Edit Note" entry to the
|
||||
-- friend right-click menu (the "FRIEND" UnitPopup) and shows the note in a
|
||||
-- tooltip when you hover a friend in the list.
|
||||
pfUI:RegisterModule("friendnotes", function ()
|
||||
local EDIT_TOKEN = "PFUI_FRIEND_NOTE"
|
||||
|
||||
-- Note editor. In 1.12 StaticPopup, OnAccept runs with `this` = the OK
|
||||
-- button (the dialog is this:GetParent()); the friend name arrives as the
|
||||
-- data argument passed to StaticPopup_Show.
|
||||
StaticPopupDialogs["PFUI_FRIEND_NOTE_EDIT"] = {
|
||||
text = SET_FRIENDNOTE_LABEL,
|
||||
button1 = SAVE,
|
||||
button2 = CANCEL,
|
||||
hasEditBox = 1,
|
||||
maxLetters = 128,
|
||||
OnAccept = function(name)
|
||||
C_FriendList.SetFriendNotes(name, _G[this:GetParent():GetName().."EditBox"]:GetText())
|
||||
end,
|
||||
EditBoxOnEnterPressed = function(name)
|
||||
C_FriendList.SetFriendNotes(name, this:GetText())
|
||||
this:GetParent():Hide()
|
||||
end,
|
||||
EditBoxOnEscapePressed = function() this:GetParent():Hide() end,
|
||||
timeout = 0, whileDead = 1, hideOnEscape = 1,
|
||||
}
|
||||
|
||||
local function OpenNoteEditor(name)
|
||||
if not name or name == "" then return end
|
||||
local info = C_FriendList.GetFriendInfo(name)
|
||||
local dialog = StaticPopup_Show("PFUI_FRIEND_NOTE_EDIT", name, nil, name)
|
||||
if not dialog then return end
|
||||
local editbox = _G[dialog:GetName().."EditBox"]
|
||||
editbox:SetText((info and info.notes) or "")
|
||||
editbox:HighlightText()
|
||||
editbox:SetFocus()
|
||||
end
|
||||
|
||||
-- Add "Edit Note" to the friend right-click menu, just before Cancel.
|
||||
UnitPopupButtons[EDIT_TOKEN] = { text = SET_NOTE, dist = 0 }
|
||||
local friendMenu = UnitPopupMenus["FRIEND"]
|
||||
table.insert(friendMenu, table.getn(friendMenu), EDIT_TOKEN)
|
||||
|
||||
UnitPopupMenus["PFUI_FRIENDNOTE"] = { EDIT_TOKEN, "CANCEL" }
|
||||
local function OfflineNoteDropDown_Initialize()
|
||||
UnitPopup_ShowMenu(_G[UIDROPDOWNMENU_OPEN_MENU], "PFUI_FRIENDNOTE", nil, FriendsDropDown.name)
|
||||
end
|
||||
local FriendsFrame_ShowDropdown_orig = FriendsFrame_ShowDropdown
|
||||
_G.FriendsFrame_ShowDropdown = function(name, connected)
|
||||
if connected then return FriendsFrame_ShowDropdown_orig(name, connected) end
|
||||
HideDropDownMenu(1)
|
||||
FriendsDropDown.initialize = OfflineNoteDropDown_Initialize
|
||||
FriendsDropDown.displayMode = "MENU"
|
||||
FriendsDropDown.name = name
|
||||
ToggleDropDownMenu(1, nil, FriendsDropDown, "cursor")
|
||||
end
|
||||
|
||||
-- Route our entry to the editor and close the menu; delegate the rest. A
|
||||
-- bare assignment lands on pfUI.env, so set the global explicitly.
|
||||
local UnitPopup_OnClick_orig = UnitPopup_OnClick
|
||||
_G.UnitPopup_OnClick = function()
|
||||
if this and this.value == EDIT_TOKEN then
|
||||
local dropdown = _G[UIDROPDOWNMENU_INIT_MENU]
|
||||
local name = dropdown and dropdown.name
|
||||
CloseDropDownMenus()
|
||||
OpenNoteEditor(name)
|
||||
return
|
||||
end
|
||||
return UnitPopup_OnClick_orig()
|
||||
end
|
||||
|
||||
-- Show the note in a tooltip while hovering a friend in the list. Friend
|
||||
-- buttons carry their friend index via SetID (see FriendsFrame_Update).
|
||||
local function FriendButton_OnEnter()
|
||||
local index = this:GetID()
|
||||
if not index or index < 1 then return end
|
||||
local info = C_FriendList.GetFriendInfoByIndex(index)
|
||||
if not info or not info.notes or info.notes == "" then return end
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetText(info.name or "")
|
||||
GameTooltip:AddLine(info.notes, 1, 1, 1, 1)
|
||||
GameTooltip:Show()
|
||||
end
|
||||
|
||||
for i = 1, FRIENDS_TO_DISPLAY do
|
||||
local button = _G["FriendsFrameFriendButton"..i]
|
||||
if button then
|
||||
button:HookScript("OnEnter", FriendButton_OnEnter)
|
||||
button:HookScript("OnLeave", GameTooltip_Hide)
|
||||
end
|
||||
end
|
||||
end)
|
||||
+137
-60
@@ -58,10 +58,11 @@ pfUI:RegisterModule("gui", function ()
|
||||
return
|
||||
end
|
||||
|
||||
if MouseIsOver(this) and not this.over then
|
||||
local over = MouseIsOverHitRect(this)
|
||||
if over and not this.over then
|
||||
this.tex:Show()
|
||||
this.over = true
|
||||
elseif not MouseIsOver(this) and this.over then
|
||||
elseif not over and this.over then
|
||||
this.tex:Hide()
|
||||
this.over = nil
|
||||
end
|
||||
@@ -182,7 +183,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
frame.color:SetHeight(12)
|
||||
CreateBackdrop(frame.color)
|
||||
frame.color:SetPoint("RIGHT" , -5, 1)
|
||||
frame.color.prev = frame.color.backdrop:CreateTexture("OVERLAY")
|
||||
frame.color.prev = frame.color.backdrop:CreateTexture(nil, "OVERLAY")
|
||||
frame.color.prev:SetAllPoints(frame.color)
|
||||
|
||||
local cr, cg, cb, ca = strsplit(",", category[config])
|
||||
@@ -212,6 +213,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
if not this:GetParent():IsShown() then
|
||||
category[config] = r .. "," .. g .. "," .. b .. "," .. a
|
||||
if ufunc then ufunc() else pfUI.gui.settingChanged = true end
|
||||
pfUI.events:TriggerEvent("config:changed", category, config)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -278,6 +280,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
if this:GetText() ~= this:GetParent().category[this:GetParent().config] then
|
||||
this:GetParent().category[this:GetParent().config] = this:GetText()
|
||||
if ufunc then ufunc() else pfUI.gui.settingChanged = true end
|
||||
pfUI.events:TriggerEvent("config:changed", category, config)
|
||||
end
|
||||
this:SetTextColor(.2,1,.8,1)
|
||||
else
|
||||
@@ -328,6 +331,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
end
|
||||
|
||||
if ufunc then ufunc() else pfUI.gui.settingChanged = true end
|
||||
pfUI.events:TriggerEvent("config:changed", category, config)
|
||||
end)
|
||||
|
||||
if category[config] == "1" then frame.input:SetChecked() end
|
||||
@@ -360,6 +364,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
if category and category[config] ~= value then
|
||||
category[config] = value
|
||||
if ufunc then ufunc() else pfUI.gui.settingChanged = true end
|
||||
pfUI.events:TriggerEvent("config:changed", category, config)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -394,6 +399,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
end
|
||||
category[config] = newconf
|
||||
if ufunc then ufunc() else pfUI.gui.settingChanged = true end
|
||||
pfUI.events:TriggerEvent("config:changed", category, config)
|
||||
frame.input:UpdateMenu()
|
||||
end)
|
||||
|
||||
@@ -409,6 +415,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateQuestionDialog(T["New entry:"], function()
|
||||
category[config] = category[config] .. "#" .. this:GetParent().input:GetText()
|
||||
if ufunc then ufunc() else pfUI.gui.settingChanged = true end
|
||||
pfUI.events:TriggerEvent("config:changed", category, config)
|
||||
frame.input:UpdateMenu()
|
||||
end, false, true)
|
||||
end)
|
||||
@@ -508,14 +515,15 @@ pfUI:RegisterModule("gui", function ()
|
||||
|
||||
-- are we a frame with contents?
|
||||
if func then
|
||||
f.scroll = CreateScrollFrame(nil, f)
|
||||
f.scroll = CreateFrame("ScrollFrame", nil, f, "pfUIScrollFrameTemplate")
|
||||
SetAllPointsOffset(f.scroll, f, 2)
|
||||
f.scroll.content = CreateScrollChild(nil, f.scroll)
|
||||
f.scroll.content = f.scroll.Content
|
||||
f.scroll.content.parent = f.scroll
|
||||
f.scroll.content:SetScript("OnShow", function()
|
||||
if not this.setup then
|
||||
func()
|
||||
this.setup = true
|
||||
this.parent:UpdateScrollChildRect()
|
||||
end
|
||||
end)
|
||||
end
|
||||
@@ -767,7 +775,10 @@ pfUI:RegisterModule("gui", function ()
|
||||
end
|
||||
end
|
||||
|
||||
if strlen(this:GetText()) < 1 then return end
|
||||
if strlen(this:GetText()) < 1 then
|
||||
parent:UpdateScrollChildRect()
|
||||
return
|
||||
end
|
||||
|
||||
local i = 1
|
||||
local search = strlower(this:GetText())
|
||||
@@ -791,16 +802,9 @@ pfUI:RegisterModule("gui", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- reload scroll frames
|
||||
scroll:Hide()
|
||||
scroll:SetHeight(i * 25 )
|
||||
scroll:Show()
|
||||
parent:SetScrollChild(scroll)
|
||||
QueueFunction(function()
|
||||
parent:SetVerticalScroll(0)
|
||||
parent:UpdateScrollState()
|
||||
parent:Scroll()
|
||||
end)
|
||||
-- measure the new results and start at the top
|
||||
parent:UpdateScrollChildRect()
|
||||
parent:SetVerticalScroll(0)
|
||||
end)
|
||||
|
||||
pfUI.gui.search:SetScript("OnEditFocusGained", function(self)
|
||||
@@ -906,6 +910,11 @@ pfUI:RegisterModule("gui", function ()
|
||||
"1:" .. T["1 Decimal (2.1)"],
|
||||
"2:" .. T["2 Decimals (2.14)"],
|
||||
},
|
||||
["castbaralign"] = {
|
||||
"LEFT:" .. T["Left"],
|
||||
"CENTER:" .. T["Center"],
|
||||
"RIGHT:" .. T["Right"],
|
||||
},
|
||||
["orientation"] = {
|
||||
"HORIZONTAL:" .. T["Horizontal"],
|
||||
"VERTICAL:" .. T["Vertical"],
|
||||
@@ -950,7 +959,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
"16:" .. T["Very Slow"],
|
||||
},
|
||||
["uf_rangecheck_mode"] = {
|
||||
"vanilla:" .. T["Vanilla (Spellbook)"],
|
||||
"vanilla:" .. T["ClassicAPI (UnitInRange)"],
|
||||
"unitxp:" .. T["UnitXP (Precise)"],
|
||||
},
|
||||
["uf_raidlayout"] = {
|
||||
@@ -1057,6 +1066,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
"unitrev:" .. T["Unit String (Reverse)"],
|
||||
"name:" .. T["Name"],
|
||||
"nameshort:" .. T["Name (Short)"],
|
||||
"ownername:" .. T["Owner Name"],
|
||||
"level:" .. T["Level"],
|
||||
"class:" .. T["Class"],
|
||||
"namehealth:" .. T["Name | Health Missing"],
|
||||
@@ -2060,9 +2070,6 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(nil, T["Combopoint Width"], C.unitframes, "combowidth")
|
||||
CreateConfig(nil, T["Combopoint Height"], C.unitframes, "comboheight")
|
||||
CreateConfig(nil, T["Show Resting"], C.unitframes.player, "showRest", "checkbox")
|
||||
CreateConfig(nil, T["Enable Energy Ticks"], C.unitframes.player, "energy", "checkbox")
|
||||
CreateConfig(nil, T["Enable Mana Ticks"], C.unitframes.player, "manatick", "checkbox")
|
||||
CreateConfig(nil, T["Detect Enemy Buffs"], C.unitframes, "buffdetect", "checkbox", nil, nil, nil, nil)
|
||||
CreateConfig(nil, T["Raid Mark Icon Style"], C.unitframes, "blizzard_raidicons", "dropdown", function() return {"1:Original Blizzard", "0:pfUI Design"} end)
|
||||
|
||||
CreateConfig(nil, T["Swing Timer"], nil, nil, "header")
|
||||
@@ -2108,10 +2115,9 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(nil, T["Enable 40y-Range Check"], C.unitframes, "rangecheck", "checkbox", nil, nil, nil, nil)
|
||||
CreateConfig(nil, T["Range Check Mode"], C.unitframes, "rangecheck_mode", "dropdown", pfUI.gui.dropdowns.uf_rangecheck_mode, nil, nil, nil)
|
||||
CreateConfig(nil, T["UnitXP Range Threshold (yards)"], C.unitframes, "rangecheck_distance", nil, nil, nil, nil, nil)
|
||||
CreateConfig(nil, T["Range Check Interval"], C.unitframes, "rangechecki", "dropdown", pfUI.gui.dropdowns.uf_rangecheckinterval, nil, nil, nil)
|
||||
CreateConfig(nil, T["Use Raid Frames To Display Group Members"], C.unitframes, "raidforgroup", "checkbox")
|
||||
CreateConfig(nil, T["Always Show Self In Raid Frames"], C.unitframes, "selfinraid", "checkbox")
|
||||
CreateConfig(nil, T["Show Self In Raid Frames When Solo"], C.unitframes, "selfinraid", "checkbox")
|
||||
CreateConfig(nil, T["Show Self In Group Frames"], C.unitframes, "selfingroup", "checkbox")
|
||||
CreateConfig(nil, T["Use Raid Frames To Display Group Members"], C.unitframes, "raidforgroup", "checkbox")
|
||||
CreateConfig(nil, T["Hide Group Frames While In Raid"], C.unitframes.group, "hide_in_raid", "checkbox")
|
||||
CreateConfig(nil, T["Max Amount Of Raid Frames"], C.unitframes, "maxraid", "dropdown", pfUI.gui.dropdowns.maxraid)
|
||||
|
||||
@@ -2132,6 +2138,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
|
||||
CreateConfig(nil, T["Druid Settings"], nil, nil, "header")
|
||||
CreateConfig(nil, T["Show Druid Mana Bar"], C.unitframes, "druidmanabar", "checkbox", nil, nil, nil, nil)
|
||||
CreateConfig(nil, T["Show Druid Mana Bar Text"], C.unitframes, "druidmanatext", "checkbox", nil, nil, nil, nil)
|
||||
CreateConfig(nil, T["Druid Mana Bar Height"], C.unitframes, "druidmanaheight", nil, nil, nil, nil, nil)
|
||||
CreateConfig(nil, T["Druid Mana Bar Width (-1 = auto)"], C.unitframes, "druidmanawidth", nil, nil, nil, nil, nil)
|
||||
CreateConfig(nil, T["Druid Mana Bar X-Offset"], C.unitframes, "druidmanaoffx", nil, nil, nil, nil, nil)
|
||||
@@ -2174,6 +2181,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
[10] = { "grouptarget", T["Group-Target"]},
|
||||
[11] = { "grouppet", T["Group-Pet"] },
|
||||
[12] = { "raid", T["Raid"] },
|
||||
[13] = { "raidpet", T["Raid-Pet"] },
|
||||
}
|
||||
|
||||
CreateGUIEntry(T["Unit Frames"], T["Click Casting"], function()
|
||||
@@ -2223,10 +2231,10 @@ pfUI:RegisterModule("gui", function ()
|
||||
U.ptarget = U["pettarget"]
|
||||
U.grouptarget = U["group"]
|
||||
U.grouppet = U["group"]
|
||||
U.raidpet = U["raid"]
|
||||
|
||||
-- build config entries
|
||||
CreateConfig(U[c], T["Display Frame"] .. ": " .. t, C.unitframes[c], "visible", "checkbox")
|
||||
CreateConfig(U[c], T["Enable Mouseover Tooltip"], C.unitframes[c], "showtooltip", "checkbox")
|
||||
CreateConfig(U[c], T["Default Transparency"], C.unitframes[c], "alpha_visible", "dropdown", pfUI.gui.dropdowns.percent_small)
|
||||
CreateConfig(U[c], T["Out Of Range Transparency"], C.unitframes[c], "alpha_outrange", "dropdown", pfUI.gui.dropdowns.percent_small)
|
||||
CreateConfig(U[c], T["Offline Transparency"], C.unitframes[c], "alpha_offline", "dropdown", pfUI.gui.dropdowns.percent_small)
|
||||
@@ -2267,6 +2275,13 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(U["raid"], T["Raid Padding"], C.unitframes[c], "raidpadding")
|
||||
CreateConfig(U["raid"], T["Raid Layout"], C.unitframes[c], "raidlayout", "dropdown", pfUI.gui.dropdowns.uf_raidlayout)
|
||||
CreateConfig(U["raid"], T["Raid Fill Direction"], C.unitframes[c], "raidfill", "dropdown", pfUI.gui.dropdowns.orientation)
|
||||
CreateConfig(U["raid"], T["Collapse Empty Slots"], C.unitframes[c], "collapse", "checkbox")
|
||||
elseif c == "raidpet" then
|
||||
CreateConfig(U[c], T["Layout"], nil, nil, "header")
|
||||
CreateConfig(U["raid"], T["Raid Padding"], C.unitframes[c], "raidpadding")
|
||||
CreateConfig(U["raid"], T["Raid Layout"], C.unitframes[c], "raidlayout", "dropdown", pfUI.gui.dropdowns.uf_raidlayout)
|
||||
CreateConfig(U["raid"], T["Raid Fill Direction"], C.unitframes[c], "raidfill", "dropdown", pfUI.gui.dropdowns.orientation)
|
||||
CreateConfig(U["raid"], T["Collapse Empty Slots"], C.unitframes[c], "collapse", "checkbox")
|
||||
end
|
||||
|
||||
CreateConfig(U[c], T["Healthbar"], nil, nil, "header")
|
||||
@@ -2300,6 +2315,15 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(U[c], T["Right Text Y Offset"], C.unitframes[c], "txtpowerrightoffy")
|
||||
CreateConfig(U[c], T["Power Bar Anchor"], C.unitframes[c], "panchor", "dropdown", pfUI.gui.dropdowns.uf_powerbar_position)
|
||||
|
||||
if c == "player" then
|
||||
CreateConfig(nil, T["Energy/Mana Ticks"], nil, nil, "header")
|
||||
CreateConfig(nil, T["Enable Energy Ticks"], C.unitframes[c], "energy", "checkbox")
|
||||
CreateConfig(nil, T["Enable Mana Ticks"], C.unitframes[c], "manatick", "checkbox")
|
||||
CreateConfig(nil, T["Show Five Second Rule"], C.unitframes[c], "showfsr", "checkbox")
|
||||
CreateConfig(nil, T["Five Second Rule Style"], C.unitframes[c], "fsrstyle", "dropdown", function() return {"0:Separate Bar", "1:Overlay"} end)
|
||||
CreateConfig(nil, T["Five Second Rule Height"], C.unitframes[c], "fsrheight")
|
||||
end
|
||||
|
||||
CreateConfig(U[c], T["Combat Text"], nil, nil, "header")
|
||||
CreateConfig(U[c], T["Show Combat Text"], C.unitframes[c], "hitindicator", "checkbox")
|
||||
CreateConfig(U[c], T["Combat Text Font"], C.unitframes[c], "hitindicatorfont", "dropdown", pfUI.gui.dropdowns.fonts)
|
||||
@@ -2314,18 +2338,25 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(U[c], T["Timer"], nil, nil, "header")
|
||||
CreateConfig(U[c], T["Show Timer Text"], C.unitframes[c], "cooldown_text", "checkbox")
|
||||
CreateConfig(Reload, T["Show Timer Animation"], C.unitframes[c], "cooldown_anim", "checkbox")
|
||||
CreateConfig(Reload, T["Reverse Timer Animation"], C.unitframes[c], "cooldown_reverse", "checkbox")
|
||||
|
||||
CreateConfig(U[c], T["Buffs"], nil, nil, "header")
|
||||
CreateConfig(U[c], T["Buff Position"], C.unitframes[c], "buffs", "dropdown", pfUI.gui.dropdowns.uf_buff_position)
|
||||
CreateConfig(U[c], T["Buff Size"], C.unitframes[c], "buffsize")
|
||||
CreateConfig(U[c], T["Buff Limit"], C.unitframes[c], "bufflimit")
|
||||
CreateConfig(U[c], T["Buffs Per Row"], C.unitframes[c], "buffperrow")
|
||||
CreateConfig(U[c], T["Own Buff Size"], C.unitframes[c], "ownbuffsize")
|
||||
CreateConfig(U[c], T["Buff X-Spacing"], C.unitframes[c], "buffspacingx")
|
||||
CreateConfig(U[c], T["Buff Y-Spacing"], C.unitframes[c], "buffspacingy")
|
||||
|
||||
CreateConfig(U[c], T["Debuffs"], nil, nil, "header")
|
||||
CreateConfig(U[c], T["Debuff Position"], C.unitframes[c], "debuffs", "dropdown", pfUI.gui.dropdowns.uf_buff_position)
|
||||
CreateConfig(U[c], T["Debuff Size"], C.unitframes[c], "debuffsize")
|
||||
CreateConfig(U[c], T["Debuff Limit"], C.unitframes[c], "debufflimit")
|
||||
CreateConfig(U[c], T["Debuffs Per Row"], C.unitframes[c], "debuffperrow")
|
||||
CreateConfig(U[c], T["Own Debuff Size"], C.unitframes[c], "owndebuffsize")
|
||||
CreateConfig(U[c], T["Debuff X-Spacing"], C.unitframes[c], "debuffspacingx")
|
||||
CreateConfig(U[c], T["Debuff Y-Spacing"], C.unitframes[c], "debuffspacingy")
|
||||
|
||||
if c ~= "player" then
|
||||
end
|
||||
@@ -2380,11 +2411,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
|
||||
if c == "player" then
|
||||
CreateConfig(nil, T["Player SP/Haste Display"], nil, nil, "header")
|
||||
CreateConfig(nil, T["Haste Display"], C.unitframes[c], "display_haste", "dropdown", {
|
||||
"0:"..T["None"],
|
||||
"1:"..T["Haste (cast speed increase)"],
|
||||
"2:"..T["Effective Haste (Haste * cast time reduction)"], -- Only affects mages/warlocks I believe
|
||||
})
|
||||
CreateConfig(nil, T["Haste Display"], C.unitframes[c], "display_haste", "checkbox")
|
||||
CreateConfig(nil, T["Haste Display Color"], C.unitframes[c], "display_haste_color", "color")
|
||||
CreateConfig(nil, T["Display Spell Power"], C.unitframes[c], "display_spellpower", "checkbox")
|
||||
CreateConfig(nil, T["Use Custom Spell Power Color (unchecked = biggest school color)"], C.unitframes[c], "display_sp_color_override", "checkbox")
|
||||
@@ -2395,6 +2422,22 @@ pfUI:RegisterModule("gui", function ()
|
||||
|
||||
CreateGUIEntry(T["Character"], T["Inventory"], function()
|
||||
CreateConfig(nil, T["Show Durability"], C.character.inventory, "durability", "checkbox")
|
||||
CreateConfig(nil, T["Always Show Equipment Slot Flyouts"], C.character.inventory, "equipflyout", "checkbox")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Character"], T["Equipment Manager"], function()
|
||||
CreateConfig(nil, T["Automatic Set Switching"], nil, nil, "header")
|
||||
CreateConfig(U["equipmentmanager"], T["Enable Automatic Set Switching"], C.equipmentmanager, "autoswitch", "checkbox")
|
||||
CreateConfig(U["equipmentmanager"], T["Announce Automatic Set Switches In Chat"], C.equipmentmanager, "announce", "checkbox")
|
||||
CreateConfig(nil, T["Items Not In Any Set"], nil, nil, "header")
|
||||
CreateConfig(U["equipmentmanager"], T["Minimum Item Quality"], C.equipmentmanager, "unusedquality", "dropdown", {
|
||||
"0:" .. ITEM_QUALITY0_DESC,
|
||||
"1:" .. ITEM_QUALITY1_DESC,
|
||||
"2:" .. ITEM_QUALITY2_DESC,
|
||||
"3:" .. ITEM_QUALITY3_DESC,
|
||||
"4:" .. ITEM_QUALITY4_DESC,
|
||||
})
|
||||
CreateConfig(U["equipmentmanager"], T["Include Bank Items"], C.equipmentmanager, "unusedbank", "checkbox")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Character"], T["Reputation"], function()
|
||||
@@ -2406,16 +2449,20 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(nil, T["Enable Item Quality Color For Equipment Only"], C.appearance.bags, "borderonlygear", "checkbox")
|
||||
CreateConfig(nil, T["Highlight Unusable Items"], C.appearance.bags, "unusable", "checkbox")
|
||||
CreateConfig(nil, T["Unusable Item Color"], C.appearance.bags, "unusable_color", "color")
|
||||
CreateConfig(nil, T["Highlight New Items"], C.appearance.bags, "newitem", "checkbox")
|
||||
CreateConfig(nil, T["New Item Color"], C.appearance.bags, "newitem_color", "color")
|
||||
CreateConfig(nil, T["Enable Movable Bags"], C.appearance.bags, "movable", "checkbox")
|
||||
CreateConfig(nil, T["Anchor Bags Above Chat"], C.appearance.bags, "abovechat", "checkbox")
|
||||
CreateConfig(nil, T["Hide Chat When Bags Are Opened"], C.appearance.bags, "hidechat", "checkbox")
|
||||
CreateConfig(nil, T["Bagslots Per Row"], C.appearance.bags, "bagrowlength")
|
||||
CreateConfig(nil, T["Bankslots Per Row"], C.appearance.bags, "bankrowlength")
|
||||
CreateConfig(nil, T["Enable Full-Text Search"], C.appearance.bags, "fulltext")
|
||||
CreateConfig(nil, T["Item Slot Size"], C.appearance.bags, "icon_size")
|
||||
CreateConfig(Reload, T["Reverse Cooldown Animation"], C.appearance.bags, "cooldown_reverse", "checkbox")
|
||||
CreateConfig(nil, T["Auto Sell Grey Items"], C.global, "autosell", "checkbox")
|
||||
CreateConfig(nil, T["Auto Repair Items"], C.global, "autorepair", "checkbox")
|
||||
CreateConfig(nil, T["Auto Sort When Opening Bags"], C.appearance.bags, "autoSortOnOpen", "checkbox")
|
||||
CreateConfig(nil, T["Reverse Sort Direction (Last Bag First)"], C.appearance.bags, "sortreverse", "checkbox")
|
||||
CreateConfig(nil, T["Reverse Sort Priority (Hearthstone Last)"], C.appearance.bags, "sortprioreverse", "checkbox")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Loot"], nil, function()
|
||||
@@ -2461,6 +2508,8 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(U["buff"], T["Number Of Debuffs Per Row"], C.buffs, "debuffrowsize")
|
||||
CreateConfig(U["buff"], T["Show Duration Inside Buff"], C.buffs, "textinside", "checkbox")
|
||||
CreateConfig(U["buff"], T["Buff Font Size"], C.buffs, "fontsize")
|
||||
CreateConfig(Reload, T["Show Timer Animation"], C.buffs, "cooldown_anim", "checkbox")
|
||||
CreateConfig(Reload, T["Reverse Timer Animation"], C.buffs, "cooldown_reverse", "checkbox")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Buffs"], T["Totem Icons"], function()
|
||||
@@ -2468,6 +2517,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(U["totems"], T["Icon Size"], C.totems, "iconsize")
|
||||
CreateConfig(U["totems"], T["Spacing"], C.totems, "spacing", "dropdown", pfUI.gui.dropdowns.spacing)
|
||||
CreateConfig(U["totems"], T["Show Background"], C.totems, "showbg", "checkbox")
|
||||
CreateConfig(Reload, T["Reverse Cooldown Animation"], C.totems, "cooldown_reverse", "checkbox")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Buffs"], T["Player Buff Bar"], function()
|
||||
@@ -2535,9 +2585,6 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(U["bars"], T["Button Animation"], C.bars, "animation", "dropdown", pfUI.gui.dropdowns.actionbuttonanimations)
|
||||
CreateConfig(U["bars"], T["Button Animation Trigger"], C.bars, "animmode", "dropdown", pfUI.gui.dropdowns.animationmode)
|
||||
CreateConfig(U["bars"], T["Show Animation On Hidden Bars"], C.bars, "animalways", "checkbox")
|
||||
if not pfUI:MacroAddonsLoaded() then
|
||||
CreateConfig(U["bars"], T["Scan Macros For Spells"], C.bars, "macroscan", "checkbox", nil, nil, nil, nil)
|
||||
end
|
||||
CreateConfig(U["bars"], T["Show Reagent Count"], C.bars, "reagents", "checkbox")
|
||||
CreateConfig(U["bars"], T["Highlight Equipped Items"], C.bars, "showequipped", "checkbox")
|
||||
CreateConfig(U["bars"], T["Equipped Item Color"], C.bars, "eqcolor", "color")
|
||||
@@ -2560,12 +2607,14 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(U["bars"], T["Keybind Text Size"], C.bars, "bind_size")
|
||||
CreateConfig(U["bars"], T["Keybind Text Color"], C.bars, "bind_color", "color")
|
||||
CreateConfig(nil, T["Cooldown Text Size"], C.bars, "cd_size")
|
||||
CreateConfig(Reload, T["Reverse Cooldown Animation"], C.bars, "cooldown_reverse", "checkbox")
|
||||
|
||||
CreateConfig(nil, T["Auto Paging"], nil, nil, "header")
|
||||
CreateConfig(U["bars"], T["Switch Pages On Alt Key Press"], C.bars, "pagemasteralt", "checkbox")
|
||||
CreateConfig(U["bars"], T["Switch Pages On Shift Key Press"], C.bars, "pagemastershift", "checkbox")
|
||||
CreateConfig(U["bars"], T["Switch Pages On Ctrl Key Press"], C.bars, "pagemasterctrl", "checkbox")
|
||||
CreateConfig(U["bars"], T["Switch Pages On Druid Stealth"], C.bars, "druidstealth", "checkbox")
|
||||
CreateConfig(U["bars"], T["Switch Pages On Priest Shadowform"], C.bars, "priestshadow", "checkbox")
|
||||
CreateConfig(nil, T["Range Based Hunter Paging"], C.bars, "hunterbar", "checkbox", nil, nil, nil, nil)
|
||||
end)
|
||||
|
||||
@@ -2741,71 +2790,94 @@ pfUI:RegisterModule("gui", function ()
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Tooltip"], nil, function()
|
||||
CreateConfig(nil, T["General"], nil, nil, "header")
|
||||
CreateConfig(nil, T["Tooltip Position"], C.tooltip, "position", "dropdown", pfUI.gui.dropdowns.tooltip_position)
|
||||
CreateConfig(nil, T["Tooltip Text Font"], C.tooltip, "font_tooltip", "dropdown", pfUI.gui.dropdowns.fonts)
|
||||
CreateConfig(nil, T["Tooltip Text Font Size"], C.tooltip, "font_tooltip_size")
|
||||
CreateConfig(nil, T["Cursor Tooltip Align"], C.tooltip, "cursoralign", "dropdown", pfUI.gui.dropdowns.tooltip_align)
|
||||
CreateConfig(nil, T["Cursor Tooltip Offset"], C.tooltip, "cursoroffset")
|
||||
CreateConfig(nil, T["Enable Extended Guild Information"], C.tooltip, "extguild", "checkbox")
|
||||
CreateConfig(nil, T["Always Show Health In Percent"], C.tooltip, "alwaysperc", "checkbox")
|
||||
CreateConfig(nil, T["Show Item IDs"], C.tooltip, "itemid", "checkbox")
|
||||
CreateConfig(nil, T["Custom Transparency"], C.tooltip, "alpha")
|
||||
CreateConfig(nil, T["Status Bar Texture"], C.tooltip.statusbar, "texture", "dropdown", pfUI.gui.dropdowns.uf_bartexture)
|
||||
CreateConfig(nil, T["Compare Item Base Stats"], C.tooltip.compare, "basestats", "checkbox")
|
||||
|
||||
CreateConfig(nil, T["Items"], nil, nil, "header")
|
||||
CreateConfig(nil, T["Always Show Item Comparison"], C.tooltip.compare, "showalways", "checkbox")
|
||||
CreateConfig(nil, T["Always Show Extended Vendor Values"], C.tooltip.vendor, "showalways", "checkbox")
|
||||
CreateConfig(U["questitem"], T["Show Related Quest On Questitems"], C.tooltip.questitem, "showquest", "checkbox")
|
||||
CreateConfig(U["questitem"], T["Show Required Questitem Count"], C.tooltip.questitem, "showcount", "checkbox")
|
||||
CreateConfig(nil, T["Show Item IDs"], C.tooltip, "itemid", "checkbox")
|
||||
|
||||
CreateConfig(nil, T["Spells"], nil, nil, "header")
|
||||
CreateConfig(nil, T["Show Aura Caster"], C.tooltip, "aurasource", "checkbox")
|
||||
CreateConfig(nil, T["Show Spell IDs"], C.tooltip, "spellid", "checkbox")
|
||||
|
||||
CreateConfig(nil, T["Units"], nil, nil, "header")
|
||||
CreateConfig(nil, T["Enable Extended Guild Information"], C.tooltip, "extguild", "checkbox")
|
||||
CreateConfig(nil, T["Always Show Health In Percent"], C.tooltip, "alwaysperc", "checkbox")
|
||||
CreateConfig(nil, T["Show Movement Speed"], C.tooltip, "movespeed", "checkbox")
|
||||
CreateConfig(nil, T["Show Unit Buffs"], C.tooltip, "showbuffs", "checkbox")
|
||||
CreateConfig(nil, T["Show Unit IDs"], C.tooltip, "unitid", "checkbox")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Castbar"], nil, function()
|
||||
CreateGUIEntry(T["Castbar"], T["General"], function()
|
||||
CreateConfig(nil, T["Use Unit Fonts"], C.castbar, "use_unitfonts", "checkbox")
|
||||
CreateConfig(nil, T["Casting Color"], C.appearance.castbar, "castbarcolor", "color")
|
||||
CreateConfig(nil, T["Channeling Color"], C.appearance.castbar, "channelcolor", "color")
|
||||
CreateConfig(nil, T["Uninterruptible Color"], C.appearance.castbar, "shieldcolor", "color")
|
||||
CreateConfig(nil, T["Five Second Rule Color"], C.appearance.castbar, "fsrcolor", "color")
|
||||
CreateConfig(nil, T["Castbar Texture"], C.appearance.castbar, "texture", "dropdown", pfUI.gui.dropdowns.uf_bartexture)
|
||||
CreateConfig(nil, T["Disable Blizzard Castbar"], C.castbar.player, "hide_blizz", "checkbox")
|
||||
end)
|
||||
|
||||
CreateConfig(nil, T["Player Castbar"], nil, nil, "header")
|
||||
CreateGUIEntry(T["Castbar"], T["Player"], function()
|
||||
CreateConfig(nil, T["Disable Player Castbar"], C.castbar.player, "hide_pfui", "checkbox")
|
||||
CreateConfig(nil, T["Castbar Width"], C.castbar.player, "width")
|
||||
CreateConfig(nil, T["Castbar Height"], C.castbar.player, "height")
|
||||
CreateConfig(nil, T["Show Spell Icon"], C.castbar.player, "showicon", "checkbox")
|
||||
CreateConfig(nil, T["Show Spell Name"], C.castbar.player, "showname", "checkbox")
|
||||
CreateConfig(nil, T["Spell Name Alignment"], C.castbar.player, "namealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||
CreateConfig(nil, T["Spell Name X Offset"], C.castbar.player, "txtleftoffx")
|
||||
CreateConfig(nil, T["Spell Name Y Offset"], C.castbar.player, "txtleftoffy")
|
||||
CreateConfig(nil, T["Show Timer"], C.castbar.player, "showtimer", "checkbox")
|
||||
CreateConfig(nil, T["Left Text X Offset"], C.castbar.player, "txtleftoffx")
|
||||
CreateConfig(nil, T["Left Text Y Offset"], C.castbar.player, "txtleftoffy")
|
||||
CreateConfig(nil, T["Timer Alignment"], C.castbar.player, "timealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||
CreateConfig(nil, T["Timer X Offset"], C.castbar.player, "txtrightoffx")
|
||||
CreateConfig(nil, T["Timer Y Offset"], C.castbar.player, "txtrightoffy")
|
||||
CreateConfig(nil, T["Show Lag"], C.castbar.player, "showlag", "checkbox")
|
||||
CreateConfig(nil, T["Show Rank"], C.castbar.player, "showrank", "checkbox")
|
||||
CreateConfig(nil, T["Right Text X Offset"], C.castbar.player, "txtrightoffx")
|
||||
CreateConfig(nil, T["Right Text Y Offset"], C.castbar.player, "txtrightoffy")
|
||||
CreateConfig(nil, T["Merge Tradeskill Casts"], C.castbar.player, "mergetradeskill", "checkbox")
|
||||
end)
|
||||
|
||||
CreateConfig(nil, T["Target Castbar"], nil, nil, "header")
|
||||
CreateGUIEntry(T["Castbar"], T["Target"], function()
|
||||
CreateConfig(nil, T["Disable Target Castbar"], C.castbar.target, "hide_pfui", "checkbox")
|
||||
CreateConfig(nil, T["Castbar Width"], C.castbar.target, "width")
|
||||
CreateConfig(nil, T["Castbar Height"], C.castbar.target, "height")
|
||||
CreateConfig(nil, T["Show Spell Icon"], C.castbar.target, "showicon", "checkbox")
|
||||
CreateConfig(nil, T["Show Spell Name"], C.castbar.target, "showname", "checkbox")
|
||||
CreateConfig(nil, T["Spell Name Alignment"], C.castbar.target, "namealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||
CreateConfig(nil, T["Spell Name X Offset"], C.castbar.target, "txtleftoffx")
|
||||
CreateConfig(nil, T["Spell Name Y Offset"], C.castbar.target, "txtleftoffy")
|
||||
CreateConfig(nil, T["Show Timer"], C.castbar.target, "showtimer", "checkbox")
|
||||
CreateConfig(nil, T["Left Text X Offset"], C.castbar.target, "txtleftoffx")
|
||||
CreateConfig(nil, T["Left Text Y Offset"], C.castbar.target, "txtleftoffy")
|
||||
CreateConfig(nil, T["Timer Alignment"], C.castbar.target, "timealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||
CreateConfig(nil, T["Timer X Offset"], C.castbar.target, "txtrightoffx")
|
||||
CreateConfig(nil, T["Timer Y Offset"], C.castbar.target, "txtrightoffy")
|
||||
CreateConfig(nil, T["Show Lag"], C.castbar.target, "showlag", "checkbox")
|
||||
CreateConfig(nil, T["Show Rank"], C.castbar.target, "showrank", "checkbox")
|
||||
CreateConfig(nil, T["Right Text X Offset"], C.castbar.target, "txtrightoffx")
|
||||
CreateConfig(nil, T["Right Text Y Offset"], C.castbar.target, "txtrightoffy")
|
||||
end)
|
||||
|
||||
CreateConfig(nil, T["Focus Castbar"], nil, nil, "header")
|
||||
CreateGUIEntry(T["Castbar"], T["Focus"], function()
|
||||
CreateConfig(nil, T["Disable Focus Castbar"], C.castbar.focus, "hide_pfui", "checkbox")
|
||||
CreateConfig(nil, T["Castbar Width"], C.castbar.focus, "width")
|
||||
CreateConfig(nil, T["Castbar Height"], C.castbar.focus, "height")
|
||||
CreateConfig(nil, T["Show Spell Icon"], C.castbar.focus, "showicon", "checkbox")
|
||||
CreateConfig(nil, T["Show Spell Name"], C.castbar.focus, "showname", "checkbox")
|
||||
CreateConfig(nil, T["Spell Name Alignment"], C.castbar.focus, "namealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||
CreateConfig(nil, T["Spell Name X Offset"], C.castbar.focus, "txtleftoffx")
|
||||
CreateConfig(nil, T["Spell Name Y Offset"], C.castbar.focus, "txtleftoffy")
|
||||
CreateConfig(nil, T["Show Timer"], C.castbar.focus, "showtimer", "checkbox")
|
||||
CreateConfig(nil, T["Left Text X Offset"], C.castbar.focus, "txtleftoffx")
|
||||
CreateConfig(nil, T["Left Text Y Offset"], C.castbar.focus, "txtleftoffy")
|
||||
CreateConfig(nil, T["Timer Alignment"], C.castbar.focus, "timealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||
CreateConfig(nil, T["Timer X Offset"], C.castbar.focus, "txtrightoffx")
|
||||
CreateConfig(nil, T["Timer Y Offset"], C.castbar.focus, "txtrightoffy")
|
||||
CreateConfig(nil, T["Show Lag"], C.castbar.focus, "showlag", "checkbox")
|
||||
CreateConfig(nil, T["Show Rank"], C.castbar.focus, "showrank", "checkbox")
|
||||
CreateConfig(nil, T["Right Text X Offset"], C.castbar.focus, "txtrightoffx")
|
||||
CreateConfig(nil, T["Right Text Y Offset"], C.castbar.focus, "txtrightoffy")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Chat"], nil, function()
|
||||
@@ -2820,12 +2892,16 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(nil, T["Timestamp Format"], C.chat.text, "timeformat", nil, nil, nil, nil, "STRING")
|
||||
CreateConfig(nil, T["Timestamp Brackets"], C.chat.text, "timebracket", nil, nil, nil, nil, "STRING")
|
||||
CreateConfig(nil, T["Timestamp Color"], C.chat.text, "timecolor", "color")
|
||||
-- read each time chat copy opens, so no reload
|
||||
CreateConfig(function() end, T["Show Timestamps In Chat Copy"], C.chat.text, "copytime", "checkbox")
|
||||
CreateConfig(nil, T["Hide Channel Names"], C.chat.text, "channelnumonly", "checkbox")
|
||||
CreateConfig(nil, T["Generate Playerlinks"], C.chat.text, "playerlinks", "checkbox")
|
||||
CreateConfig(nil, T["Enable URL Detection"], C.chat.text, "detecturl", "checkbox")
|
||||
CreateConfig(nil, T["Enable Class Colors"], C.chat.text, "classcolor", "checkbox")
|
||||
local _, playerRace = UnitRace("player")
|
||||
CreateConfig(nil, T["Show Faction Icons"] .. " " .. GetFactionIcon(playerRace), C.chat.text, "factionicons", "checkbox")
|
||||
CreateConfig(nil, T["Show Race Icons"] .. " " .. GetRaceIcon(playerRace, UnitSex("player")), C.chat.text, "raceicons", "checkbox")
|
||||
CreateConfig(nil, T["Enable Player Levels"], C.chat.text, "playerlevel", "checkbox")
|
||||
CreateConfig(nil, T["Who Search Unknown Classes (|cffffaaaaExperimental|r)"], C.chat.text, "whosearchunknown", "checkbox")
|
||||
CreateConfig(nil, T["Colorize Unknown Classes"], C.chat.text, "tintunknown", "checkbox")
|
||||
CreateConfig(nil, T["Unknown Class Color"], C.chat.text, "unknowncolor", "color")
|
||||
CreateConfig(nil, T["Left Chat Width"], C.chat.left, "width")
|
||||
@@ -2837,9 +2913,9 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(nil, T["Only Show Chat Dock On Mouseover"], C.chat.global, "tabmouse", "checkbox")
|
||||
CreateConfig(nil, T["Enable Chat Tab Flashing"], C.chat.global, "chatflash", "checkbox")
|
||||
CreateConfig(nil, T["Enable Frame Shadow"], C.chat.global, "frameshadow", "checkbox")
|
||||
CreateConfig(nil, T["Enable Custom Colors"], C.chat.global, "custombg", "checkbox")
|
||||
CreateConfig(nil, T["Chat Background Color"], C.chat.global, "background", "color")
|
||||
CreateConfig(nil, T["Chat Border Color"], C.chat.global, "border", "color")
|
||||
CreateConfig(U["chat"], T["Enable Custom Colors"], C.chat.global, "custombg", "checkbox")
|
||||
CreateConfig(U["chat"], T["Chat Background Color"], C.chat.global, "background", "color")
|
||||
CreateConfig(U["chat"], T["Chat Border Color"], C.chat.global, "border", "color")
|
||||
CreateConfig(nil, T["Enable Custom Incoming Whispers Layout"], C.chat.global, "whispermod", "checkbox")
|
||||
CreateConfig(nil, T["Incoming Whispers Color"], C.chat.global, "whisper", "color")
|
||||
CreateConfig(nil, T["Enable Sticky Chat"], C.chat.global, "sticky", "checkbox")
|
||||
@@ -2895,14 +2971,15 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(U["nameplates"], T["Enable Debuffs"], C.nameplates, "showdebuffs", "checkbox")
|
||||
CreateConfig(U["nameplates"], T["Show Debuffs on Hostile"], C.nameplates, "showdebuffs_hostile", "checkbox")
|
||||
CreateConfig(U["nameplates"], T["Show Debuffs on Friendly"], C.nameplates, "showdebuffs_friendly", "checkbox")
|
||||
CreateConfig(U["nameplates"], T["Only Show Your Debuffs"], C.nameplates, "owndebuffs", "checkbox")
|
||||
CreateConfig(U["nameplates"], T["Debuff Position"], C.nameplates.debuffs, "position", "dropdown", pfUI.gui.dropdowns.debuffposition)
|
||||
CreateConfig(U["nameplates"], T["Debuff Icon Offset"], C.nameplates, "debuffoffset")
|
||||
CreateConfig(U["nameplates"], T["Debuff Icon Size"], C.nameplates, "debuffsize")
|
||||
CreateConfig(U["nameplates"], T["Estimate Debuffs"], C.nameplates, "guessdebuffs", "checkbox")
|
||||
CreateConfig(U["nameplates"], T["Show Debuff Stacks"], C.nameplates.debuffs, "showstacks", "checkbox")
|
||||
CreateConfig(U["nameplates"], T["Enable Debuff Timers"], C.nameplates, "debufftimers", "checkbox")
|
||||
CreateConfig(U["nameplates"], T["Show Timer Text"], C.nameplates, "debufftext", "checkbox")
|
||||
CreateConfig(Reload, T["Show Timer Animation"], C.nameplates, "debuffanim", "checkbox")
|
||||
CreateConfig(Reload, T["Reverse Timer Animation"], C.nameplates, "debreverse", "checkbox")
|
||||
|
||||
CreateConfig(U["nameplates"], T["Filter Mode"], C.nameplates.debuffs, "filter", "dropdown", pfUI.gui.dropdowns.buffbarfilter)
|
||||
CreateConfig(U["nameplates"], T["Blacklist"], C.nameplates.debuffs, "blacklist", "list")
|
||||
@@ -2956,6 +3033,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(nil, T["Use Chat Colors for Meters"], C.thirdparty, "chatbg", "checkbox")
|
||||
CreateConfig(nil, "ShaguDPS (" .. T["Skin"] .. ")", C.thirdparty.shagudps, "skin", "checkbox")
|
||||
CreateConfig(nil, "ShaguDPS (" .. T["Dock"] .. ")", C.thirdparty.shagudps, "dock", "checkbox")
|
||||
CreateConfig(nil, "GreedMeter (" .. T["Dock"] .. ")", C.thirdparty.greedmeter, "dock", "checkbox")
|
||||
CreateConfig(nil, "DPSMate (" .. T["Skin"] .. ")", C.thirdparty.dpsmate, "skin", "checkbox")
|
||||
CreateConfig(nil, "DPSMate (" .. T["Dock"] .. ")", C.thirdparty.dpsmate, "dock", "checkbox")
|
||||
CreateConfig(nil, "SWStats (" .. T["Skin"] .. ")", C.thirdparty.swstats, "skin", "checkbox")
|
||||
@@ -2984,8 +3062,7 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateGUIEntry(T["Components"], T["Modules"], function()
|
||||
table.sort(pfUI.modules)
|
||||
for i,m in pairs(pfUI.modules) do
|
||||
-- skip gui and macrotweak when macro addons are loaded
|
||||
if m ~= "gui" and not (m == "macrotweak" and pfUI:MacroAddonsLoaded()) then
|
||||
if m ~= "gui" then
|
||||
-- create disabled entry if not existing and display
|
||||
pfUI:UpdateConfig("disabled", nil, m, "0")
|
||||
CreateConfig(nil, T["Disable Module"] .. " " .. m, C.disabled, m, "checkbox")
|
||||
|
||||
+21
-5
@@ -105,6 +105,10 @@ pfUI:RegisterModule("hoverbind", function ()
|
||||
end
|
||||
end
|
||||
|
||||
local function BindingName(command)
|
||||
return _G["BINDING_NAME_" .. command] or command
|
||||
end
|
||||
|
||||
function pfUI.hoverbind:GetPrefix()
|
||||
return string.format("%s%s%s",
|
||||
(IsAltKeyDown() and modifiers.ALT or ""),
|
||||
@@ -157,17 +161,29 @@ pfUI:RegisterModule("hoverbind", function ()
|
||||
if arg1 == "ESCAPE" and not binding then pfUI.hoverbind:Hide() return end
|
||||
if binding then
|
||||
if arg1 == "ESCAPE" then
|
||||
-- Remove existing binding
|
||||
local key = (GetBindingKey(binding))
|
||||
if (key) then
|
||||
-- Remove all existing bindings
|
||||
local keys = { GetBindingKey(binding) }
|
||||
for _, key in ipairs(keys) do
|
||||
SetBinding(key)
|
||||
end
|
||||
if keys[1] then
|
||||
SaveBindings(GetCurrentBindingSet())
|
||||
end
|
||||
else
|
||||
-- Create new binding
|
||||
local key = map and map[arg1] or arg1
|
||||
if (SetBinding(prefix..key, binding)) then
|
||||
local key = prefix .. (map and map[arg1] or arg1)
|
||||
local previous = GetBindingAction(key)
|
||||
if (SetBinding(key, binding)) then
|
||||
SaveBindings(GetCurrentBindingSet())
|
||||
|
||||
if previous and previous ~= "" and previous ~= binding then
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc" .. key .. "|r " .. T["was unbound from"] .. " " .. BindingName(previous))
|
||||
end
|
||||
|
||||
local active = GetBindingAction(key, true)
|
||||
if active ~= binding then
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc" .. key .. "|r " .. T["is currently overridden by"] .. " " .. BindingName(active))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+34
-9
@@ -1,10 +1,8 @@
|
||||
pfUI:RegisterModule("hunterbar", function ()
|
||||
local _,class = UnitClass("player")
|
||||
if class ~= "HUNTER" or C.bars.hunterbar == "0" then return end
|
||||
if UnitClassBase("player") ~= "HUNTER" or C.bars.hunterbar == "0" then return end
|
||||
|
||||
-- Wing Clip (any rank) and Arcane Shot (any rank) spell IDs.
|
||||
-- IsSpellInRange(spellId) works with any spell ID via Nampower,
|
||||
-- no actionbar slot needed.
|
||||
-- C_Spell.IsSpellInRange works with any spell ID, no actionbar slot needed.
|
||||
local WINGCLIP_ID = 2974 -- melee range indicator (~5 yd)
|
||||
local ARCANESHOT_ID = 3044 -- ranged range indicator (~35 yd)
|
||||
|
||||
@@ -12,22 +10,37 @@ pfUI:RegisterModule("hunterbar", function ()
|
||||
-- Only swap BACK to melee bar when Wing Clip is actually in range.
|
||||
-- This prevents rapid bar-flipping in the transition zone.
|
||||
|
||||
local THROTTLE = 0.02 -- seconds between range checks (was every frame)
|
||||
|
||||
pfUI.hunterbar = CreateFrame("Frame", "pfHunterBar", UIParent)
|
||||
|
||||
-- track which page we last forced so we don't spam ChangeActionBarPage()
|
||||
pfUI.hunterbar.lastPage = nil
|
||||
pfUI.hunterbar.elapsed = 0
|
||||
|
||||
-- Idle until there's a live, attackable target. A hidden frame runs no
|
||||
-- OnUpdate, so the range polling only ticks while it can matter.
|
||||
pfUI.hunterbar:Hide()
|
||||
|
||||
pfUI.hunterbar:SetScript("OnUpdate", function()
|
||||
-- only act when there is a live, attackable target
|
||||
this.elapsed = this.elapsed + arg1
|
||||
if this.elapsed < THROTTLE then return end
|
||||
this.elapsed = 0
|
||||
|
||||
-- Target died or turned unattackable without a target-change event
|
||||
-- (it dropped to a corpse); stop ticking until the next target.
|
||||
if not UnitExists("target") or not UnitCanAttack("player", "target") then
|
||||
this:Hide()
|
||||
return
|
||||
end
|
||||
|
||||
local wingclipInRange = IsSpellInRange(WINGCLIP_ID, "target")
|
||||
local arcaneshotInRange = IsSpellInRange(ARCANESHOT_ID, "target")
|
||||
-- C_Spell.IsSpellInRange returns true / false / nil (rangeless). The
|
||||
-- explicit == true / == false tests leave the bar unchanged on nil.
|
||||
local wingclipInRange = C_Spell.IsSpellInRange(WINGCLIP_ID, "target")
|
||||
local arcaneshotInRange = C_Spell.IsSpellInRange(ARCANESHOT_ID, "target")
|
||||
|
||||
-- swap to ranged bar: out of melee range AND arcane shot (8yd) in range
|
||||
if wingclipInRange == 0 and arcaneshotInRange == 1 then
|
||||
if wingclipInRange == false and arcaneshotInRange == true then
|
||||
if this.lastPage ~= 2 then
|
||||
this.lastPage = 2
|
||||
_G.CURRENT_ACTIONBAR_PAGE = 2
|
||||
@@ -35,7 +48,7 @@ pfUI:RegisterModule("hunterbar", function ()
|
||||
end
|
||||
|
||||
-- swap to melee bar: in melee range AND arcane shot (8yd) out of range
|
||||
elseif wingclipInRange == 1 and arcaneshotInRange == 0 then
|
||||
elseif wingclipInRange == true and arcaneshotInRange == false then
|
||||
if this.lastPage ~= 1 then
|
||||
this.lastPage = 1
|
||||
_G.CURRENT_ACTIONBAR_PAGE = 1
|
||||
@@ -43,4 +56,16 @@ pfUI:RegisterModule("hunterbar", function ()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Start ticking only when we gain an attackable target.
|
||||
pfUI.hunterbar:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
pfUI.hunterbar:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
pfUI.hunterbar:SetScript("OnEvent", function()
|
||||
if UnitExists("target") and UnitCanAttack("player", "target") then
|
||||
this.elapsed = THROTTLE -- run the first check on the next frame
|
||||
this:Show()
|
||||
else
|
||||
this:Hide()
|
||||
end
|
||||
end)
|
||||
end)
|
||||
+36
-71
@@ -1,36 +1,13 @@
|
||||
-- Innervate Callout Module
|
||||
-- Announces Innervate casts via raid/party/battleground chat
|
||||
-- Registers AURA_CAST events directly - zero polling, pure event-driven
|
||||
-- Listens to COMBAT_LOG_EVENT_UNFILTERED - zero polling, pure event-driven
|
||||
|
||||
pfUI:RegisterNewModule("innervatecall", "Innervate Callout", "DRUID")
|
||||
pfUI:RegisterModule("innervatecall", function ()
|
||||
-- Requires Nampower for AURA_CAST events
|
||||
if not GetNampowerVersion then return end
|
||||
|
||||
-- Only load for druids
|
||||
local _, playerClass = UnitClass("player")
|
||||
if playerClass ~= "DRUID" then return end
|
||||
if UnitClassBase("player") ~= "DRUID" then return end
|
||||
|
||||
local INNERVATE_SPELLID = 29166
|
||||
|
||||
-- Cache player GUID
|
||||
local playerGuid = nil
|
||||
local function GetPlayerGuid()
|
||||
if not playerGuid and UnitGUID then
|
||||
playerGuid = UnitGUID("player")
|
||||
end
|
||||
return playerGuid
|
||||
end
|
||||
|
||||
-- GUID → name resolution for the target. UnitTokenFromGUID walks the
|
||||
-- engine's known unit tokens (player, party, raid, target, ...) and
|
||||
-- returns the first one currently bound to the GUID, so we don't have
|
||||
-- to manually iterate party/raid here.
|
||||
local function ResolveTargetName(targetGuid)
|
||||
if not targetGuid then return nil end
|
||||
local token = UnitTokenFromGUID(targetGuid)
|
||||
return token and UnitName(token) or nil
|
||||
end
|
||||
local GCD_DURATION = 1.5
|
||||
|
||||
-- Determine chat channel based on group context
|
||||
local function GetAnnounceChannel()
|
||||
@@ -39,72 +16,60 @@ pfUI:RegisterModule("innervatecall", function ()
|
||||
return "BATTLEGROUND"
|
||||
end
|
||||
|
||||
if GetNumRaidMembers() > 0 then
|
||||
if IsInRaid() then
|
||||
return "RAID"
|
||||
end
|
||||
|
||||
if GetNumPartyMembers() > 0 then
|
||||
if IsInGroup() then
|
||||
return "PARTY"
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Event frame - registers AURA_CAST directly (bypasses libdebuff hooks
|
||||
-- which are gated behind ownDebuffs/pendingCasts checks meant for debuffs)
|
||||
-- Set on our cast, cleared once the "ready" timer is scheduled
|
||||
local pending = false
|
||||
|
||||
-- Schedule the "ready" announcement once Innervate's own cooldown is in
|
||||
-- the spell history. Until then GetSpellCooldown reports only the GCD,
|
||||
-- which has no isOnGCD flag here, so tell them apart by duration.
|
||||
local function ScheduleReady()
|
||||
local cd = C_Spell.GetSpellCooldown(INNERVATE_SPELLID)
|
||||
if not cd or cd.duration <= GCD_DURATION then return end
|
||||
|
||||
pending = false
|
||||
C_Timer.After(cd.startTime + cd.duration - GetTime(), function()
|
||||
local ch = GetAnnounceChannel()
|
||||
if ch then
|
||||
SendChatMessage(">> Innervate is ready <<", ch)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local frame = CreateFrame("Frame")
|
||||
-- AURA_CAST_ON_SELF fires when a buff lands ON the player
|
||||
-- AURA_CAST_ON_OTHER fires when a buff lands on someone else
|
||||
-- Both needed: self-innervate = ON_SELF, innervate on others = ON_OTHER
|
||||
-- casterGuid check prevents announcing other druids' innervates
|
||||
frame:RegisterEvent("AURA_CAST_ON_SELF")
|
||||
frame:RegisterEvent("AURA_CAST_ON_OTHER")
|
||||
frame:RegisterEvent("PLAYER_LOGOUT")
|
||||
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
|
||||
frame:RegisterEvent("SPELL_UPDATE_COOLDOWN")
|
||||
frame:SetScript("OnEvent", function()
|
||||
if event == "PLAYER_LOGOUT" then
|
||||
this:UnregisterAllEvents()
|
||||
this:SetScript("OnEvent", nil)
|
||||
if event == "SPELL_UPDATE_COOLDOWN" then
|
||||
if pending then ScheduleReady() end
|
||||
return
|
||||
end
|
||||
|
||||
-- AURA_CAST args: arg1=spellId, arg2=casterGuid, arg3=targetGuid
|
||||
local spellId = arg1
|
||||
local casterGuid = arg2
|
||||
local targetGuid = arg3
|
||||
|
||||
if spellId ~= INNERVATE_SPELLID then return end
|
||||
-- Innervate is instant, so it logs SPELL_CAST_SUCCESS with its target
|
||||
-- arg2=subevent, arg4=sourceGUID, arg9=destName, arg12=spellId
|
||||
if arg2 ~= "SPELL_CAST_SUCCESS" or arg12 ~= INNERVATE_SPELLID then return end
|
||||
|
||||
-- Only announce our own casts
|
||||
if casterGuid ~= GetPlayerGuid() then return end
|
||||
|
||||
-- Resolve target name from GUID
|
||||
local targetName = ResolveTargetName(targetGuid) or "Unknown"
|
||||
if not IsPlayerGuid(arg4) then return end
|
||||
local destName = arg9
|
||||
|
||||
-- Determine channel
|
||||
local channel = GetAnnounceChannel()
|
||||
if not channel then return end -- solo, no announcement
|
||||
|
||||
SendChatMessage(">> Innervate casted on " .. targetName .. " <<", channel)
|
||||
SendChatMessage(">> Innervate cast on " .. (destName or "Unknown") .. " <<", channel)
|
||||
|
||||
-- Schedule "ready" announcement when cooldown expires
|
||||
-- Use GetSpellIdCooldown for precise remaining time, fallback to 360s
|
||||
local cdRemaining = 360
|
||||
if GetSpellIdCooldown then
|
||||
local cd = GetSpellIdCooldown(INNERVATE_SPELLID)
|
||||
if cd and cd.cooldownRemainingMs and cd.cooldownRemainingMs > 0 then
|
||||
cdRemaining = cd.cooldownRemainingMs / 1000
|
||||
end
|
||||
end
|
||||
|
||||
local readyAt = GetTime() + cdRemaining
|
||||
frame:SetScript("OnUpdate", function()
|
||||
if GetTime() >= readyAt then
|
||||
frame:SetScript("OnUpdate", nil)
|
||||
local ch = GetAnnounceChannel()
|
||||
if ch then
|
||||
SendChatMessage(">> Innervate is ready <<", ch)
|
||||
end
|
||||
end
|
||||
end)
|
||||
pending = true
|
||||
ScheduleReady()
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -26,10 +26,14 @@ pfUI:RegisterModule("itemcount", function ()
|
||||
if bank < 0 then bank = 0 end
|
||||
|
||||
frame:AddLine(" ")
|
||||
if bags > 0 then frame:AddDoubleLine("Bags:", bags, 1, 1, 1, 1, 1, 1) end
|
||||
if bank > 0 then frame:AddDoubleLine("Bank:", bank, 1, 1, 1, 1, 1, 1) end
|
||||
if equipped > 0 then frame:AddDoubleLine("Equipped:", equipped, 1, 1, 1, 1, 1, 1) end
|
||||
frame:AddDoubleLine("Total:", total, 1, 1, 1, 1, 1, 1)
|
||||
if bags > 0 then frame:AddDoubleLine(T["Bags"] .. ":", bags, 1, 1, 1, 1, 1, 1) end
|
||||
if bank > 0 then frame:AddDoubleLine(T["Bank"] .. ":", bank, 1, 1, 1, 1, 1, 1) end
|
||||
if equipped > 0 then frame:AddDoubleLine(T["Equipped"] .. ":", equipped, 1, 1, 1, 1, 1, 1) end
|
||||
|
||||
local sources = (bags > 0 and 1 or 0) + (bank > 0 and 1 or 0) + (equipped > 0 and 1 or 0)
|
||||
if sources > 1 then
|
||||
frame:AddDoubleLine(T["Total"] .. ":", total, 1, 1, 1, 1, 1, 1)
|
||||
end
|
||||
frame:Show()
|
||||
end
|
||||
|
||||
|
||||
+9
-19
@@ -77,9 +77,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
if pfUI.loot.my_index or pfUI.loot.disenchanter_index or pfUI.loot.banker_index then
|
||||
info = wipe(info)
|
||||
info.text = T["Special Recipient"]
|
||||
info.textR = NORMAL_FONT_COLOR.r
|
||||
info.textG = NORMAL_FONT_COLOR.g
|
||||
info.textB = NORMAL_FONT_COLOR.b
|
||||
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
|
||||
info.textHeight = 12
|
||||
info.hasArrow = 1
|
||||
info.notCheckable = 1
|
||||
@@ -158,9 +156,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
if level == 1 then
|
||||
info = wipe(info)
|
||||
info.text = T["Random"]
|
||||
info.textR = NORMAL_FONT_COLOR.r
|
||||
info.textG = NORMAL_FONT_COLOR.g
|
||||
info.textB = NORMAL_FONT_COLOR.b
|
||||
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
|
||||
info.value = "PFRANDOM"
|
||||
info.textHeight = 12
|
||||
info.notCheckable = 1
|
||||
@@ -170,9 +166,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
|
||||
info = wipe(info)
|
||||
info.text = T["Request Rolls"]
|
||||
info.textR = NORMAL_FONT_COLOR.r
|
||||
info.textG = NORMAL_FONT_COLOR.g
|
||||
info.textB = NORMAL_FONT_COLOR.b
|
||||
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
|
||||
info.value = "PFROLLS"
|
||||
info.textHeight = 12
|
||||
info.hasArrow = 1
|
||||
@@ -183,9 +177,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
if UIDROPDOWNMENU_MENU_VALUE == "PFROLLS" then
|
||||
info = wipe(info)
|
||||
info.text = T["Clear Rolls"]
|
||||
info.textR = NORMAL_FONT_COLOR.r
|
||||
info.textG = NORMAL_FONT_COLOR.g
|
||||
info.textB = NORMAL_FONT_COLOR.b
|
||||
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
|
||||
info.value = "PFCLEARROLLS"
|
||||
info.notCheckable = 1
|
||||
info.func = pfUI.loot.ClearRolls
|
||||
@@ -193,9 +185,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
|
||||
info = wipe(info)
|
||||
info.text = T["Reroll Ties"]
|
||||
info.textR = NORMAL_FONT_COLOR.r
|
||||
info.textG = NORMAL_FONT_COLOR.g
|
||||
info.textB = NORMAL_FONT_COLOR.b
|
||||
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
|
||||
info.value = "PFTIEROLL"
|
||||
info.notCheckable = 1
|
||||
info.arg1 = pfUI.loot.rollers_sorted
|
||||
@@ -236,7 +226,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
if (candidate) then
|
||||
index_to_name[i] = candidate
|
||||
name_to_index[candidate] = i
|
||||
randoms[table.getn(randoms)+1]=i
|
||||
table.insert(randoms, i)
|
||||
if candidate == pfUI.loot.me then
|
||||
pfUI.loot.my_index = i
|
||||
end
|
||||
@@ -323,7 +313,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
end
|
||||
|
||||
function pfUI.loot:InitGroupDropDown()
|
||||
local inRaid = UnitInRaid("player")
|
||||
local inRaid = IsInRaid()
|
||||
if UIDROPDOWNMENU_MENU_LEVEL == 1 then
|
||||
if ( inRaid ) then
|
||||
pfUI.loot:BuildRaidMenu(UIDROPDOWNMENU_MENU_LEVEL)
|
||||
@@ -521,7 +511,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
end
|
||||
|
||||
function pfUI.loot:CreateSlot(id)
|
||||
local frame = CreateFrame(LOOT_BUTTON_FRAME_TYPE, 'pfLootButton'..id, pfUI.loot)
|
||||
local frame = CreateFrame("LootButton", 'pfLootButton'..id, pfUI.loot)
|
||||
frame:RegisterForClicks('LeftButtonUp', 'RightButtonUp')
|
||||
frame:SetPoint("LEFT", border*2, 0)
|
||||
frame:SetPoint("RIGHT", -border*2, 0)
|
||||
@@ -693,7 +683,7 @@ pfUI:RegisterModule("loot", function ()
|
||||
else -- not an eligible candidate for that item
|
||||
pfUI.loot.rollers[who] = {roll=tonumber(roll),value="disabled"}
|
||||
end
|
||||
pfUI.loot.rollers_sorted[table.getn(pfUI.loot.rollers_sorted)+1]={who=who,roll=tonumber(roll),value=pfUI.loot.rollers[who].value}
|
||||
table.insert(pfUI.loot.rollers_sorted, {who=who,roll=tonumber(roll),value=pfUI.loot.rollers[who].value})
|
||||
end
|
||||
end
|
||||
table.sort(pfUI.loot.rollers_sorted,function(a,b)
|
||||
|
||||
@@ -0,0 +1,344 @@
|
||||
pfUI:RegisterModule("loothistory", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
|
||||
-- Layout (rows are 2px apart)
|
||||
local ITEM_H, PLAYER_H = 24, 16
|
||||
local PLAYER_INDENT = 18
|
||||
|
||||
-- rollType constants returned by C_LootHistory.GetPlayerInfo (0/1/2; vanilla
|
||||
-- has no disenchant roll).
|
||||
local ROLL_PASS, ROLL_NEED, ROLL_GREED = 0, 1, 2
|
||||
local ROLL_TEX = {
|
||||
[ROLL_NEED] = "Interface\\Buttons\\UI-GroupLoot-Dice-Up",
|
||||
[ROLL_GREED] = "Interface\\Buttons\\UI-GroupLoot-Coin-Up",
|
||||
[ROLL_PASS] = "Interface\\Buttons\\UI-GroupLoot-Pass-Up",
|
||||
}
|
||||
local WINMARK = "Interface\\Buttons\\UI-CheckBox-Check"
|
||||
local QUESTIONMARK = "Interface\\Icons\\INV_Misc_QuestionMark"
|
||||
|
||||
-- Paint an item row's icon/name/quality from a loaded Item mixin.
|
||||
local function RenderItemVisual(f, item)
|
||||
local r, g, b = 1, 1, 1
|
||||
local qc = item:GetItemQualityColor()
|
||||
if qc then r, g, b = qc.r, qc.g, qc.b end
|
||||
f.icon:SetTexture(item:GetItemIcon())
|
||||
f.iconbg:SetBackdropBorderColor(r, g, b, 1)
|
||||
f.name:SetText(item:GetItemName() or UNKNOWN)
|
||||
f.name:SetTextColor(r, g, b)
|
||||
end
|
||||
|
||||
local function ShowRetrieving(f)
|
||||
f.icon:SetTexture(QUESTIONMARK)
|
||||
f.iconbg:SetBackdropBorderColor(1, .3, .3, 1)
|
||||
f.name:SetText(T["Retrieving item information..."])
|
||||
f.name:SetTextColor(1, .3, .3)
|
||||
end
|
||||
|
||||
-- expansion state keyed on the stable rollID (survives ring-index shifts)
|
||||
local expanded = {}
|
||||
|
||||
-- ==========================================================================
|
||||
-- Window
|
||||
-- ==========================================================================
|
||||
pfUI.loothistory = CreateFrame("Frame", "pfLootHistory", UIParent)
|
||||
pfUI.loothistory:SetFrameStrata("DIALOG")
|
||||
pfUI.loothistory:SetSize(380, 490)
|
||||
pfUI.loothistory:SetPoint("CENTER", 0, 0)
|
||||
pfUI.loothistory:SetMovable(true)
|
||||
pfUI.loothistory:EnableMouse(true)
|
||||
pfUI.loothistory:RegisterForDrag("LeftButton")
|
||||
pfUI.loothistory:SetScript("OnDragStart", function() this:StartMoving() end)
|
||||
pfUI.loothistory:SetScript("OnDragStop", function() this:StopMovingOrSizing() end)
|
||||
pfUI.loothistory:Hide()
|
||||
|
||||
CreateBackdrop(pfUI.loothistory, nil, true, .75)
|
||||
CreateBackdropShadow(pfUI.loothistory)
|
||||
tinsert(UISpecialFrames, "pfLootHistory")
|
||||
|
||||
pfUI.loothistory.caption = pfUI.loothistory:CreateFontString("Status", "LOW", "GameFontNormal")
|
||||
pfUI.loothistory.caption:SetFont(pfUI.font_default, C.global.font_size + 4, "OUTLINE")
|
||||
pfUI.loothistory.caption:SetTextColor(.2, 1, .8, 1)
|
||||
pfUI.loothistory.caption:SetPoint("TOP", 0, -10)
|
||||
pfUI.loothistory.caption:SetText(T["Loot History"])
|
||||
|
||||
-- close button
|
||||
pfUI.loothistory.close = CreateFrame("Button", nil, pfUI.loothistory)
|
||||
pfUI.loothistory.close:SetPoint("TOPRIGHT", -border*2, -border*2)
|
||||
CreateBackdrop(pfUI.loothistory.close)
|
||||
pfUI.loothistory.close:SetSize(15, 15)
|
||||
pfUI.loothistory.close.texture = pfUI.loothistory.close:CreateTexture("pfLootHistoryClose")
|
||||
pfUI.loothistory.close.texture:SetTexture(pfUI.media["img:close"])
|
||||
pfUI.loothistory.close.texture:SetPoint("TOPLEFT", pfUI.loothistory.close, "TOPLEFT", 4, -4)
|
||||
pfUI.loothistory.close.texture:SetPoint("BOTTOMRIGHT", pfUI.loothistory.close, "BOTTOMRIGHT", -4, 4)
|
||||
pfUI.loothistory.close.texture:SetVertexColor(1, .25, .25, 1)
|
||||
pfUI.loothistory.close:SetScript("OnEnter", function()
|
||||
CreateBackdrop(pfUI.loothistory.close)
|
||||
pfUI.loothistory.close.backdrop:SetBackdropBorderColor(1, .25, .25, 1)
|
||||
end)
|
||||
pfUI.loothistory.close:SetScript("OnLeave", function() CreateBackdrop(pfUI.loothistory.close) end)
|
||||
pfUI.loothistory.close:SetScript("OnClick", function() pfUI.loothistory:Hide() end)
|
||||
|
||||
-- clear button
|
||||
pfUI.loothistory.clear = CreateFrame("Button", nil, pfUI.loothistory, "UIPanelButtonTemplate")
|
||||
SkinButton(pfUI.loothistory.clear)
|
||||
pfUI.loothistory.clear:SetSize(60, 16)
|
||||
pfUI.loothistory.clear:SetPoint("TOPLEFT", 10, -8)
|
||||
pfUI.loothistory.clear:SetText(T["Clear"])
|
||||
pfUI.loothistory.clear:SetScript("OnClick", function() C_LootHistory.Clear() end)
|
||||
|
||||
-- ==========================================================================
|
||||
-- List: a row per item and, under an expanded item, a row per player
|
||||
-- ==========================================================================
|
||||
local list = CreateFrame("Frame", "pfLootHistoryList", pfUI.loothistory, "pfUIScrollBoxListTemplate")
|
||||
list:SetSize(370, 450)
|
||||
list:SetPoint("BOTTOM", 0, 5)
|
||||
CreateBackdrop(list, nil, true)
|
||||
pfUI.loothistory.list = list
|
||||
|
||||
local FullUpdate -- forward declaration (toggle handlers call it)
|
||||
|
||||
local function ToggleExpanded(f)
|
||||
local id = f.rollID
|
||||
if id then expanded[id] = not expanded[id]; FullUpdate() end
|
||||
end
|
||||
|
||||
-- one-time setup of a pooled item row
|
||||
local function SetupItemRow(f)
|
||||
f:SetBackdrop(pfUI.backdrop_hover)
|
||||
f:SetBackdropBorderColor(1, 1, 1, .04)
|
||||
f:EnableMouse(1)
|
||||
|
||||
-- expand / collapse toggle
|
||||
f.toggle = CreateFrame("Button", nil, f)
|
||||
f.toggle:SetSize(14, 14)
|
||||
f.toggle:SetPoint("LEFT", 4, 0)
|
||||
f.toggle:SetScript("OnClick", function() ToggleExpanded(f) end)
|
||||
|
||||
-- icon + quality-colored border
|
||||
f.iconbg = CreateFrame("Frame", nil, f)
|
||||
f.iconbg:SetSize(ITEM_H - 8, ITEM_H - 8)
|
||||
f.iconbg:SetPoint("LEFT", f.toggle, "RIGHT", 4, 0)
|
||||
CreateBackdrop(f.iconbg, nil, true)
|
||||
f.icon = f.iconbg:CreateTexture(nil, "ARTWORK")
|
||||
f.icon:SetPoint("TOPLEFT", f.iconbg, "TOPLEFT", 2, -2)
|
||||
f.icon:SetPoint("BOTTOMRIGHT", f.iconbg, "BOTTOMRIGHT", -2, 2)
|
||||
f.icon:SetTexCoord(.08, .92, .08, .92)
|
||||
|
||||
-- winner block (right side, shown for decided rolls)
|
||||
f.winicon = f:CreateTexture(nil, "OVERLAY")
|
||||
f.winicon:SetSize(14, 14)
|
||||
f.winicon:SetPoint("RIGHT", f, "RIGHT", -6, 0)
|
||||
|
||||
f.winroll = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
f.winroll:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
f.winroll:SetPoint("RIGHT", f.winicon, "LEFT", -2, 0)
|
||||
f.winroll:SetTextColor(1, 1, 1, 1)
|
||||
|
||||
f.winname = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
f.winname:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
f.winname:SetPoint("RIGHT", f.winroll, "LEFT", -4, 0)
|
||||
f.winname:SetJustifyH("RIGHT")
|
||||
|
||||
-- item name (leaves room on the right for the winner block)
|
||||
f.name = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
f.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
f.name:SetPoint("LEFT", f.iconbg, "RIGHT", 5, 0)
|
||||
f.name:SetPoint("RIGHT", f, "RIGHT", -100, 0)
|
||||
f.name:SetJustifyH("LEFT")
|
||||
|
||||
f:SetScript("OnEnter", function()
|
||||
this:SetBackdropBorderColor(1, 1, 1, .08)
|
||||
if this.itemLink then
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetHyperlink(this.itemLink)
|
||||
GameTooltip:Show()
|
||||
end
|
||||
end)
|
||||
f:SetScript("OnLeave", function()
|
||||
this:SetBackdropBorderColor(1, 1, 1, .04)
|
||||
GameTooltip:Hide()
|
||||
end)
|
||||
f:SetScript("OnClick", function() ToggleExpanded(f) end)
|
||||
end
|
||||
|
||||
-- one-time setup of a pooled player row
|
||||
local function SetupPlayerRow(f)
|
||||
-- name is indented to leave room for the winner checkmark on its left
|
||||
f.name = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
f.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
f.name:SetPoint("LEFT", 20, 0)
|
||||
f.name:SetJustifyH("LEFT")
|
||||
|
||||
f.rollicon = f:CreateTexture(nil, "OVERLAY")
|
||||
f.rollicon:SetSize(16, 16)
|
||||
f.rollicon:SetPoint("RIGHT", -4, 0)
|
||||
|
||||
f.rolltext = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||
f.rolltext:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
f.rolltext:SetPoint("RIGHT", f.rollicon, "LEFT", -3, 0)
|
||||
f.rolltext:SetTextColor(1, 1, 1, 1)
|
||||
|
||||
-- winner checkmark, just left of the player name (matches reference)
|
||||
f.winmark = f:CreateTexture(nil, "OVERLAY")
|
||||
f.winmark:SetSize(16, 16)
|
||||
f.winmark:SetTexture(WINMARK)
|
||||
f.winmark:SetPoint("RIGHT", f.name, "LEFT", -1, 0)
|
||||
end
|
||||
|
||||
local function SetToggleTexture(toggle, isExpanded)
|
||||
if isExpanded then
|
||||
toggle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up")
|
||||
toggle:SetPushedTexture("Interface\\Buttons\\UI-MinusButton-Down")
|
||||
else
|
||||
toggle:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up")
|
||||
toggle:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-Down")
|
||||
end
|
||||
end
|
||||
|
||||
-- ==========================================================================
|
||||
-- Rendering
|
||||
-- ==========================================================================
|
||||
local function InitItemRow(f, row)
|
||||
if not f.toggle then SetupItemRow(f) end
|
||||
|
||||
local i = row.item
|
||||
local rollID, itemLink, _, isDone, winnerIdx = C_LootHistory.GetItem(i)
|
||||
f.rollID = rollID
|
||||
f.itemLink = itemLink
|
||||
|
||||
local isExpanded = rollID and expanded[rollID]
|
||||
SetToggleTexture(f.toggle, isExpanded)
|
||||
|
||||
-- Item icon/name/quality via the ClassicAPI Item mixin. When the item
|
||||
-- isn't cached yet, show a placeholder and re-paint this row from the
|
||||
-- ContinueOnItemLoad callback (guarded on rollID: rows are pooled, so the
|
||||
-- callback must no-op if the row has since been reused for another roll).
|
||||
local item = itemLink and Item:CreateFromItemLink(itemLink)
|
||||
if item and not item:IsItemEmpty() then
|
||||
if item:IsItemDataCached() then
|
||||
RenderItemVisual(f, item)
|
||||
else
|
||||
ShowRetrieving(f)
|
||||
local pending = rollID
|
||||
item:ContinueOnItemLoad(function()
|
||||
if f.rollID == pending then RenderItemVisual(f, item) end
|
||||
end)
|
||||
end
|
||||
else
|
||||
ShowRetrieving(f)
|
||||
end
|
||||
|
||||
-- winner summary only on a decided, collapsed row
|
||||
if isDone and not isExpanded then
|
||||
if winnerIdx then
|
||||
local wname, wclass, wrollType, wroll = C_LootHistory.GetPlayerInfo(i, winnerIdx)
|
||||
f.winicon:SetTexture(ROLL_TEX[wrollType] or ROLL_TEX[ROLL_NEED])
|
||||
f.winicon:Show()
|
||||
if wroll and wroll > 0 then f.winroll:SetText(wroll) else f.winroll:SetText("") end
|
||||
f.winroll:Show()
|
||||
f.winname:SetText(wname or UNKNOWN)
|
||||
f.winname:SetTextColor(PFUI_CLASS_COLORS[wclass]:GetRGB())
|
||||
f.winname:Show()
|
||||
else
|
||||
-- nobody won: everyone passed
|
||||
f.winicon:SetTexture(ROLL_TEX[ROLL_PASS])
|
||||
f.winicon:Show()
|
||||
f.winroll:SetText("")
|
||||
f.winroll:Show()
|
||||
f.winname:SetText(T["All players passed"])
|
||||
f.winname:SetTextColor(1, .4, .4)
|
||||
f.winname:Show()
|
||||
end
|
||||
else
|
||||
f.winicon:Hide()
|
||||
f.winroll:Hide()
|
||||
f.winname:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
local function InitPlayerRow(pf, row)
|
||||
if not pf.name then SetupPlayerRow(pf) end
|
||||
|
||||
local name, class, rollType, roll, isWinner = C_LootHistory.GetPlayerInfo(row.item, row.player)
|
||||
pf.name:SetText(name or UNKNOWN)
|
||||
pf.name:SetTextColor(PFUI_CLASS_COLORS[class]:GetRGB())
|
||||
|
||||
pf.rollicon:SetTexture(ROLL_TEX[rollType] or ROLL_TEX[ROLL_PASS])
|
||||
if roll and roll > 0 then pf.rolltext:SetText(roll) else pf.rolltext:SetText("") end
|
||||
|
||||
if isWinner then pf.winmark:Show() else pf.winmark:Hide() end
|
||||
end
|
||||
|
||||
local view = CreateScrollBoxListLinearView(2, 2, 4, 4, 2)
|
||||
view:SetElementFactory(function(factory, row)
|
||||
if row.player then
|
||||
factory("Frame", InitPlayerRow)
|
||||
else
|
||||
factory("Button", InitItemRow)
|
||||
end
|
||||
end)
|
||||
view:SetElementExtentCalculator(function(_, row)
|
||||
return row.player and PLAYER_H or ITEM_H
|
||||
end)
|
||||
view:SetElementIndentCalculator(function(row)
|
||||
return row.player and PLAYER_INDENT or 0
|
||||
end)
|
||||
ScrollUtil.InitScrollBoxListWithScrollBar(list.ScrollBox, list.ScrollBar, view)
|
||||
|
||||
-- A player row is worth showing while the roll is undecided (see everyone),
|
||||
-- or afterwards only if they actually rolled or it's you (hide the passers'
|
||||
-- noise on a decided roll) — mirrors Blizzard's ShouldDisplayPlayer.
|
||||
local function ShouldDisplayPlayer(isDone, roll, isMe)
|
||||
return isMe or (roll and roll > 0) or not isDone
|
||||
end
|
||||
|
||||
function FullUpdate()
|
||||
if not pfUI.loothistory:IsShown() then return end
|
||||
|
||||
local rows = {}
|
||||
for i = 1, C_LootHistory.GetNumItems() do
|
||||
local rollID, _, numPlayers, isDone = C_LootHistory.GetItem(i)
|
||||
table.insert(rows, { item = i })
|
||||
|
||||
if rollID and expanded[rollID] then
|
||||
for p = 1, numPlayers or 0 do
|
||||
local _, _, _, roll, _, isMe = C_LootHistory.GetPlayerInfo(i, p)
|
||||
if ShouldDisplayPlayer(isDone, roll, isMe) then
|
||||
table.insert(rows, { item = i, player = p })
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
list.ScrollBox:SetDataProvider(CreateDataProvider(rows), ScrollBoxConstants.RetainScrollPosition)
|
||||
end
|
||||
|
||||
pfUI.loothistory:SetScript("OnShow", function() FullUpdate() end)
|
||||
|
||||
-- ==========================================================================
|
||||
-- Events
|
||||
-- ==========================================================================
|
||||
local events = CreateFrame("Frame")
|
||||
events:RegisterEvent("LOOT_HISTORY_FULL_UPDATE")
|
||||
events:RegisterEvent("LOOT_HISTORY_ROLL_CHANGED")
|
||||
events:RegisterEvent("LOOT_HISTORY_ROLL_COMPLETE")
|
||||
events:SetScript("OnEvent", function()
|
||||
-- auto-show on a new roll opening / completing, if enabled
|
||||
if C.loothistory.autoshow == "1"
|
||||
and (event == "LOOT_HISTORY_FULL_UPDATE" or event == "LOOT_HISTORY_ROLL_COMPLETE")
|
||||
and not pfUI.loothistory:IsShown() then
|
||||
pfUI.loothistory:Show() -- OnShow runs FullUpdate
|
||||
return
|
||||
end
|
||||
FullUpdate() -- no-op while hidden
|
||||
end)
|
||||
|
||||
-- ==========================================================================
|
||||
-- Slash command
|
||||
-- ==========================================================================
|
||||
local function Toggle()
|
||||
pfUI.loothistory:SetShown(not pfUI.loothistory:IsShown())
|
||||
end
|
||||
|
||||
pfUI.api.RegisterSlashCommand("PFLOOTHISTORY", { "/loothistory", "/pfloothistory" }, Toggle, true)
|
||||
end)
|
||||
@@ -0,0 +1,128 @@
|
||||
-- Macro icon picker
|
||||
-- Replaces Blizzard's MacroPopupFrame (the "name + icon" dialog opened by the
|
||||
-- New / Change-Icon buttons) with a pfUI-native picker driven by
|
||||
-- IconDataProviderMixin, so the full spell + item + loose icon set is
|
||||
-- available instead of the stock spell-only list. Saving goes through
|
||||
-- C_Macro.CreateMacro / C_Macro.EditMacro, which take the icon as a texture
|
||||
-- string -- so arbitrary icons (including index-less INV_* item icons) persist
|
||||
-- on both the modern (Turtle/Octo) and stock-vanilla macro UIs. The surrounding
|
||||
-- MacroFrame (list + body editor) is Blizzard's, already skinned elsewhere.
|
||||
pfUI:RegisterModule("macroicons", function ()
|
||||
HookAddonOrVariable("Blizzard_MacroUI", function()
|
||||
-- ============================================================
|
||||
-- Popup frame
|
||||
-- ============================================================
|
||||
|
||||
local picker = CreateFrame("Frame", "pfMacroIconPicker", UIParent)
|
||||
picker:SetFrameStrata("DIALOG")
|
||||
picker:SetSize(472, 484)
|
||||
-- Starts anchored to the right of the macro panel (re-anchored at open
|
||||
-- once the skin's backdrop exists); dragging pins it in place after.
|
||||
picker:SetPoint("BOTTOMLEFT", MacroFrame, "BOTTOMRIGHT", 8, 0)
|
||||
picker:Hide()
|
||||
CreateBackdrop(picker, nil, nil, .9)
|
||||
CreateBackdropShadow(picker)
|
||||
picker:EnableMouse(true)
|
||||
picker:SetMovable(true)
|
||||
picker:RegisterForDrag("LeftButton")
|
||||
picker:SetScript("OnDragStart", function() this:StartMoving() end)
|
||||
picker:SetScript("OnDragStop", function()
|
||||
this:StopMovingOrSizing()
|
||||
this.userMoved = true
|
||||
end)
|
||||
|
||||
-- Spellbook seed leads the grid with class-relevant spell/talent icons.
|
||||
local iconPicker = CreateIconPicker("pfMacroIcon", picker,
|
||||
IconDataProviderExtraType.Spellbook, MACRO_POPUP_TEXT)
|
||||
|
||||
-- ============================================================
|
||||
-- Open / save
|
||||
-- ============================================================
|
||||
|
||||
-- Blizzard's popup disables these while it is open; mirror that so the
|
||||
-- underlying frame can't be double-driven, then let MacroFrame_Update
|
||||
-- restore the correct states on close.
|
||||
local function SetMacroButtons(enabled)
|
||||
local m = enabled and "Enable" or "Disable"
|
||||
MacroNewButton[m](MacroNewButton)
|
||||
MacroEditButton[m](MacroEditButton)
|
||||
MacroDeleteButton[m](MacroDeleteButton)
|
||||
end
|
||||
|
||||
local function OpenMacroPopup(mode)
|
||||
if mode == "edit" and MacroFrame.selectedMacro then
|
||||
picker.mode = "edit"
|
||||
local name, texture = GetMacroInfo(MacroFrame.selectedMacro)
|
||||
picker.editbox:SetText(name or "")
|
||||
iconPicker.SetIcon(texture)
|
||||
else
|
||||
picker.mode = "new"
|
||||
picker.editbox:SetText("")
|
||||
iconPicker.SetIcon(nil)
|
||||
end
|
||||
picker.search:SetText("")
|
||||
if not picker.userMoved then
|
||||
picker:ClearAllPoints()
|
||||
picker:SetPoint("BOTTOMLEFT", MacroFrame.backdrop or MacroFrame, "BOTTOMRIGHT", 8, 0)
|
||||
end
|
||||
SetMacroButtons(false)
|
||||
picker:Show()
|
||||
picker.editbox:SetFocus()
|
||||
iconPicker.Refresh()
|
||||
end
|
||||
|
||||
local function SaveMacroPopup()
|
||||
local text = picker.editbox:GetText()
|
||||
if text == "" then return end
|
||||
|
||||
local icon = iconPicker.GetIcon()
|
||||
if picker.mode == "edit" and MacroFrame.selectedMacro then
|
||||
C_Macro.EditMacro(MacroFrame.selectedMacro, text, icon, nil)
|
||||
MacroFrame_SelectMacro(MacroFrame.selectedMacro)
|
||||
else
|
||||
local idx = C_Macro.CreateMacro(text, icon, nil, (MacroFrame.macroBase or 0) > 0)
|
||||
if idx then MacroFrame_SelectMacro(idx) end
|
||||
end
|
||||
picker:Hide()
|
||||
end
|
||||
|
||||
picker:SetScript("OnHide", function() MacroFrame_Update() end)
|
||||
|
||||
picker.editbox:SetScript("OnEnterPressed", SaveMacroPopup)
|
||||
picker.editbox:SetScript("OnEscapePressed", function() picker:Hide() end)
|
||||
|
||||
-- OK / Cancel
|
||||
local okay = CreateFrame("Button", "pfMacroIconPickerOkay", picker, "UIPanelButtonTemplate")
|
||||
okay:SetSize(80, 22)
|
||||
okay:SetText(OKAY)
|
||||
okay:SetScript("OnClick", SaveMacroPopup)
|
||||
SkinButton(okay)
|
||||
|
||||
local cancel = CreateFrame("Button", "pfMacroIconPickerCancel", picker, "UIPanelButtonTemplate")
|
||||
cancel:SetSize(80, 22)
|
||||
cancel:SetText(CANCEL)
|
||||
cancel:SetPoint("BOTTOMRIGHT", picker, "BOTTOMRIGHT", -14, 12)
|
||||
cancel:SetScript("OnClick", function() picker:Hide() end)
|
||||
SkinButton(cancel)
|
||||
|
||||
-- Okay | Cancel, both anchored to the bottom-right corner.
|
||||
okay:SetPoint("BOTTOMRIGHT", cancel, "BOTTOMLEFT", -6, 0)
|
||||
|
||||
-- ============================================================
|
||||
-- Take over the New / Change-Icon buttons; retire Blizzard's popup
|
||||
-- ============================================================
|
||||
|
||||
MacroNewButton:SetScript("OnClick", function()
|
||||
MacroFrame_SaveMacro()
|
||||
OpenMacroPopup("new")
|
||||
end)
|
||||
|
||||
MacroEditButton:SetScript("OnClick", function()
|
||||
MacroFrame_SaveMacro()
|
||||
OpenMacroPopup("edit")
|
||||
end)
|
||||
|
||||
-- Closing the macro window takes the picker with it.
|
||||
MacroFrame:HookScript("OnHide", function() picker:Hide() end)
|
||||
end)
|
||||
end)
|
||||
@@ -1,74 +0,0 @@
|
||||
pfUI:RegisterModule("macrotweak", function ()
|
||||
local conflictAddons = { "Supermacro", "SuperCleveRoidMacros", "UltimaMacros" }
|
||||
local disabled = false
|
||||
|
||||
local function CheckConflicts()
|
||||
for _, name in pairs(conflictAddons) do
|
||||
if IsAddOnLoaded(name) then
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: " .. name .. " found, macrotweak disabled.")
|
||||
disabled = true
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- do not write macro calls into chat input history
|
||||
if ChatFrameEditBox._AddHistoryLine then
|
||||
local userinput
|
||||
ChatFrameEditBox._AddHistoryLine = ChatFrameEditBox.AddHistoryLine
|
||||
ChatFrameEditBox.AddHistoryLine = function(self, text)
|
||||
if disabled then return ChatFrameEditBox._AddHistoryLine(self, text) end
|
||||
if not userinput and text and string.find(text, "^/run(.+)") then return end
|
||||
if not userinput and string.find(text, "^/script(.+)") then return end
|
||||
if not userinput and string.find(text, "^/cast(.+)") then return end
|
||||
ChatFrameEditBox._AddHistoryLine(self, text)
|
||||
end
|
||||
|
||||
local OnEnter = ChatFrameEditBox:GetScript("OnEnterPressed")
|
||||
ChatFrameEditBox:SetScript("OnEnterPressed", function(a1,a2,a3,a4)
|
||||
userinput = true
|
||||
OnEnter(a1,a2,a3,a4)
|
||||
userinput = nil
|
||||
end)
|
||||
end
|
||||
|
||||
-- make sure #showtooltip inside macros won't be sent
|
||||
local hookSendChatMessage = SendChatMessage
|
||||
function _G.SendChatMessage(msg, ...)
|
||||
if disabled then return hookSendChatMessage(msg, unpack(arg)) end
|
||||
if msg and string.find(msg, "^#showtooltip ") then return end
|
||||
hookSendChatMessage(msg, unpack(arg))
|
||||
end
|
||||
|
||||
-- add /use and /equip to the macro api:
|
||||
-- https://wowwiki.fandom.com/wiki/Making_a_macro
|
||||
-- supported arguments:
|
||||
-- /use <itemname>
|
||||
-- /use <inventory slot>
|
||||
-- /use <bag> <slot>
|
||||
pfUI.api.RegisterSlashCommand("PFUSE", { "/equip" , "/use", "/pfequip", "/pfuse" }, function (msg)
|
||||
if not msg or msg == "" then return end
|
||||
local bag, slot, _
|
||||
if string.find(msg, "%d+%s+%d+") then
|
||||
_, _, bag, slot = string.find(msg, "(%d+)%s+(%d+)")
|
||||
elseif string.find(msg, "%d+") then
|
||||
_, _, slot = string.find(msg, "(%d+)")
|
||||
else
|
||||
bag, slot = FindItem(msg)
|
||||
end
|
||||
|
||||
if bag and slot then
|
||||
UseContainerItem(bag, slot)
|
||||
elseif not bag and slot then
|
||||
UseInventoryItem(slot)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Check conflicts after one tick so all addons have finished loading
|
||||
local watcher = CreateFrame("Frame")
|
||||
watcher:SetScript("OnUpdate", function()
|
||||
this:SetScript("OnUpdate", nil)
|
||||
CheckConflicts()
|
||||
end)
|
||||
end)
|
||||
+18
-18
@@ -25,11 +25,7 @@ pfUI:RegisterModule("map", function ()
|
||||
pfUI.map = { UpdateConfig = UpdateTooltipScale }
|
||||
|
||||
function _G.ToggleWorldMap()
|
||||
if WorldMapFrame:IsShown() then
|
||||
WorldMapFrame:Hide()
|
||||
else
|
||||
WorldMapFrame:Show()
|
||||
end
|
||||
WorldMapFrame:SetShown(not WorldMapFrame:IsShown())
|
||||
end
|
||||
|
||||
C.position["WorldMapFrame"] = C.position["WorldMapFrame"] or { alpha = 1.0, scale = 0.7 }
|
||||
@@ -54,7 +50,7 @@ pfUI:RegisterModule("map", function ()
|
||||
if not this.hooked then
|
||||
this.hooked = true
|
||||
|
||||
HookScript(WorldMapFrame, "OnShow", function()
|
||||
WorldMapFrame:HookScript("OnShow", function()
|
||||
-- customize
|
||||
this:EnableKeyboard(false)
|
||||
this:EnableMouseWheel(1)
|
||||
@@ -66,7 +62,7 @@ pfUI:RegisterModule("map", function ()
|
||||
pfOrigSetMapToCurrentZone()
|
||||
end)
|
||||
|
||||
HookScript(WorldMapFrame, "OnMouseWheel", function()
|
||||
WorldMapFrame:HookScript("OnMouseWheel", function()
|
||||
if IsShiftKeyDown() then
|
||||
alpha = clamp(WorldMapFrame:GetAlpha() + arg1/10, 0.1, 1.0)
|
||||
WorldMapFrame:SetAlpha(alpha)
|
||||
@@ -81,7 +77,13 @@ pfUI:RegisterModule("map", function ()
|
||||
if point == "TOPLEFT" and relpoint == "TOPLEFT" then
|
||||
offx = offx*oldscale/scale
|
||||
offy = offy*oldscale/scale
|
||||
WorldMapFrame:SetPoint(point, rel, relpoint, offx, offy)
|
||||
-- Anchor to the parent (3-arg SetPoint) rather than re-using the frame
|
||||
-- GetPoint handed back. Re-anchoring to `rel` throws
|
||||
-- "<unnamed> is dependent on this" as soon as anything else has anchored
|
||||
-- itself to WorldMapFrame, which aborts the whole zoom handler. The
|
||||
-- parent-relative form is also what LoadMovable/SaveMovable already
|
||||
-- assume: SaveMovable stores only xpos/ypos, with no relative frame.
|
||||
WorldMapFrame:SetPoint(point, offx, offy)
|
||||
end
|
||||
|
||||
WorldMapFrame:SetScale(scale)
|
||||
@@ -91,11 +93,11 @@ pfUI:RegisterModule("map", function ()
|
||||
SaveMovable(this, true)
|
||||
end)
|
||||
|
||||
HookScript(WorldMapFrame, "OnDragStart", function()
|
||||
WorldMapFrame:HookScript("OnDragStart", function()
|
||||
WorldMapFrame:StartMoving()
|
||||
end)
|
||||
|
||||
HookScript(WorldMapFrame, "OnDragStop",function()
|
||||
WorldMapFrame:HookScript("OnDragStop",function()
|
||||
WorldMapFrame:StopMovingOrSizing()
|
||||
SaveMovable(this, true)
|
||||
end)
|
||||
@@ -107,8 +109,8 @@ pfUI:RegisterModule("map", function ()
|
||||
|
||||
WorldMapFrame:ClearAllPoints()
|
||||
WorldMapFrame:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
|
||||
WorldMapFrame:SetWidth(WorldMapButton:GetWidth() + 15)
|
||||
WorldMapFrame:SetHeight(WorldMapButton:GetHeight() + 55)
|
||||
local wmWidth, wmHeight = WorldMapButton:GetSize()
|
||||
WorldMapFrame:SetSize(wmWidth + 15, wmHeight + 55)
|
||||
LoadMovable(WorldMapFrame)
|
||||
|
||||
-- skin
|
||||
@@ -130,8 +132,7 @@ pfUI:RegisterModule("map", function ()
|
||||
btn:SetHighlightTexture("")
|
||||
btn.text = _G["pfUI_map_autozoneswitchText"]
|
||||
CreateBackdrop(btn, nil, true)
|
||||
btn:SetWidth(14)
|
||||
btn:SetHeight(14)
|
||||
btn:SetSize(14, 14)
|
||||
btn:SetPoint("RIGHT", WorldMapContinentDropDown, "LEFT", -8, 2)
|
||||
btn.text:ClearAllPoints()
|
||||
btn.text:SetPoint("RIGHT", btn, "LEFT", -4, 1)
|
||||
@@ -169,8 +170,7 @@ pfUI:RegisterModule("map", function ()
|
||||
WorldMapButton.coords.text:SetJustifyH("RIGHT")
|
||||
|
||||
WorldMapButton.coords:SetScript("OnUpdate", function()
|
||||
local width = WorldMapButton:GetWidth()
|
||||
local height = WorldMapButton:GetHeight()
|
||||
local width, height = WorldMapButton:GetSize()
|
||||
local mx, my = WorldMapButton:GetCenter()
|
||||
local scale = WorldMapButton:GetEffectiveScale()
|
||||
local x, y = GetCursorPosition()
|
||||
@@ -180,8 +180,8 @@ pfUI:RegisterModule("map", function ()
|
||||
my = (( my + height / 2 ) - ( y / scale )) / height * 100
|
||||
end
|
||||
|
||||
if mx and my and MouseIsOver(WorldMapButton) then
|
||||
WorldMapButton.coords.text:SetText(string.format('%.1f / %.1f', mx, my))
|
||||
if mx and my and WorldMapButton:IsMouseOver() then
|
||||
WorldMapButton.coords.text:SetFormattedText('%.1f / %.1f', mx, my)
|
||||
else
|
||||
WorldMapButton.coords.text:SetText("")
|
||||
end
|
||||
|
||||
@@ -50,7 +50,7 @@ pfUI:RegisterModule("mapcolors", function ()
|
||||
end
|
||||
|
||||
local function UpdateUnitFrames(unit_button_name)
|
||||
if GetNumRaidMembers() > 0 then
|
||||
if IsInRaid() then
|
||||
for i=1, MAX_RAID_MEMBERS do
|
||||
local frame_name = unit_button_name.."Raid"..i
|
||||
local frame = _G[frame_name]
|
||||
@@ -68,7 +68,7 @@ pfUI:RegisterModule("mapcolors", function ()
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif GetNumPartyMembers() > 0 then
|
||||
elseif IsInGroup() then
|
||||
for i=1, MAX_PARTY_MEMBERS do
|
||||
local frame_name = unit_button_name.."Party"..i
|
||||
local frame = _G[frame_name]
|
||||
@@ -85,7 +85,7 @@ pfUI:RegisterModule("mapcolors", function ()
|
||||
end
|
||||
|
||||
local function ColorizeName(frame)
|
||||
local _, class = UnitClass(frame.unit)
|
||||
local class = UnitClassBase(frame.unit)
|
||||
local color = PFUI_CLASS_COLORS[class]
|
||||
frame.name = frame.name or UnitName(frame.unit)
|
||||
frame.name = '|c'..color.colorStr..frame.name..'|r'
|
||||
@@ -95,7 +95,7 @@ pfUI:RegisterModule("mapcolors", function ()
|
||||
local tooltipText = ""
|
||||
if unit_button_name == 'WorldMap' then
|
||||
-- check player
|
||||
if MouseIsOver(WorldMapPlayer) then
|
||||
if WorldMapPlayer:IsMouseOver() then
|
||||
ColorizeName(WorldMapPlayer)
|
||||
tooltipText = WorldMapPlayer.name
|
||||
end
|
||||
@@ -104,7 +104,7 @@ pfUI:RegisterModule("mapcolors", function ()
|
||||
-- check party
|
||||
for i=1, MAX_PARTY_MEMBERS do
|
||||
local frame = _G[unit_button_name.."Party"..i]
|
||||
if frame:IsVisible() and MouseIsOver(frame) then
|
||||
if frame:IsVisible() and frame:IsMouseOver() then
|
||||
ColorizeName(frame)
|
||||
tooltipText = tooltipText.."\n"..frame.name
|
||||
end
|
||||
@@ -113,7 +113,7 @@ pfUI:RegisterModule("mapcolors", function ()
|
||||
--check Raid
|
||||
for i=1, MAX_RAID_MEMBERS do
|
||||
local frame = _G[unit_button_name.."Raid"..i]
|
||||
if frame:IsVisible() and MouseIsOver(frame) then
|
||||
if frame:IsVisible() and frame:IsMouseOver() then
|
||||
ColorizeName(frame)
|
||||
tooltipText = tooltipText.."\n"..frame.name
|
||||
end
|
||||
|
||||
+109
-135
@@ -30,39 +30,13 @@ pfUI:RegisterModule("mapreveal", function ()
|
||||
pfUI.mapreveal:UpdateConfig()
|
||||
end)
|
||||
|
||||
local function unpack_hash(prefix, hash)
|
||||
local _, stored_prefix, textureName, textureWidth, textureHeight, offsetX, offsetY, mapPointX, mapPointY, name
|
||||
_, _, stored_prefix, textureName, textureWidth, textureHeight, offsetX, offsetY = string.find(hash, "^([|]?)([^:]+):([^:]+):([^:]+):([^:]+):([^:]+)")
|
||||
if (not textureName or not offsetY) then
|
||||
return
|
||||
end
|
||||
if (offsetY) then
|
||||
_, _, mapPointX, mapPointY = string.find(hash,"^[|]?[^:]+:[^:]+:[^:]+:[^:]+:[^:]+:([^:]+):([^:]+)")
|
||||
end
|
||||
if (not mapPointY) then
|
||||
mapPointX = 0 mapPointY = 0
|
||||
end
|
||||
if (stored_prefix ~= "|") then
|
||||
name = textureName
|
||||
textureName = string.format("%s%s",prefix,textureName)
|
||||
end
|
||||
return textureName, textureWidth + 0, textureHeight + 0, offsetX + 0, offsetY + 0, mapPointX + 0, mapPointY + 0, name
|
||||
end
|
||||
|
||||
local explores = {}
|
||||
local explorecaches = {}
|
||||
local alreadyknown = {} -- per-zone accumulator: { [zone] = { [texName] = true } }
|
||||
|
||||
-- Own texture pool - separate from Blizzard's WorldMapOverlay textures
|
||||
local pfOverlays = {}
|
||||
local pfOverlayMax = 0
|
||||
|
||||
local function pfGetOverlay(idx)
|
||||
if not pfOverlays[idx] then
|
||||
pfOverlays[idx] = WorldMapDetailFrame:CreateTexture("pfReveal"..idx, "BORDER")
|
||||
end
|
||||
return pfOverlays[idx]
|
||||
end
|
||||
local overlayPool = CreateTexturePool(WorldMapDetailFrame, "BORDER", nil, nil, function(_, tex)
|
||||
tex:Hide()
|
||||
tex:ClearAllPoints()
|
||||
end)
|
||||
|
||||
local exploreEnter = function()
|
||||
WorldMapTooltip:ClearLines()
|
||||
@@ -71,138 +45,127 @@ pfUI:RegisterModule("mapreveal", function ()
|
||||
WorldMapTooltip:AddLine(this.name, 1, 1, 1)
|
||||
WorldMapTooltip:Show()
|
||||
|
||||
if not explorecaches[this.name] then return end
|
||||
if not explorecaches[this.area] then return end
|
||||
if C.appearance.worldmap.mapreveal == "0" then return end
|
||||
for texture in pairs(explorecaches[this.name]) do
|
||||
for texture in pairs(explorecaches[this.area]) do
|
||||
texture:SetVertexColor(1,1,1,1)
|
||||
end
|
||||
end
|
||||
|
||||
local exploreLeave = function()
|
||||
WorldMapTooltip:Hide()
|
||||
if not explorecaches[this.name] then return end
|
||||
if not explorecaches[this.area] then return end
|
||||
if C.appearance.worldmap.mapreveal == "0" then return end
|
||||
local r,g,b,a = GetStringColor(C.appearance.worldmap.mapreveal_color)
|
||||
for texture in pairs(explorecaches[this.name]) do
|
||||
for texture in pairs(explorecaches[this.area]) do
|
||||
texture:SetVertexColor(r,g,b,a)
|
||||
end
|
||||
end
|
||||
|
||||
-- overlay data with lazy init
|
||||
local overlayData = setmetatable(pfMapOverlayData, {__index = function(t,k)
|
||||
local v = {}
|
||||
rawset(t,k,v)
|
||||
return v
|
||||
end})
|
||||
-- Magnifying-glass icons for unexplored overlays. Everything constant lives
|
||||
-- in the creator; the update only anchors and labels what it acquires -- and
|
||||
-- it only acquires the ones it is going to show, where the old table grew an
|
||||
-- icon for every overlay in the zone and hid most of them again.
|
||||
local function CreateExplore()
|
||||
local explore = CreateFrame("Frame", nil, WorldMapDetailFrame)
|
||||
explore:SetSize(16, 16)
|
||||
explore:SetScript("OnEnter", exploreEnter)
|
||||
explore:SetScript("OnLeave", exploreLeave)
|
||||
explore:EnableMouse(true)
|
||||
explore:SetFrameLevel(255)
|
||||
|
||||
explore.tex = explore:CreateTexture(nil, "OVERLAY")
|
||||
explore.tex:SetTexture("Interface\\WorldMap\\WorldMap-MagnifyingGlass")
|
||||
explore.tex:SetBlendMode("ADD")
|
||||
explore.tex:SetTexCoord(.08, .92, .08, .92)
|
||||
explore.tex:SetAllPoints()
|
||||
|
||||
return explore
|
||||
end
|
||||
|
||||
local explorePool = CreateObjectPool(CreateExplore, function(_, explore)
|
||||
explore:Hide()
|
||||
explore:ClearAllPoints()
|
||||
end)
|
||||
|
||||
local function pfWorldMapFrame_Update()
|
||||
-- clear stale caches
|
||||
for k in pairs(explorecaches) do explorecaches[k] = nil end
|
||||
|
||||
-- hide all our textures from last frame
|
||||
for i = 1, pfOverlayMax do
|
||||
pfOverlays[i]:Hide()
|
||||
end
|
||||
-- hide all our textures and icons from last frame
|
||||
overlayPool:ReleaseAll()
|
||||
explorePool:ReleaseAll()
|
||||
|
||||
local showExplore = C.appearance.worldmap.mapexploration == "1"
|
||||
local showReveal = C.appearance.worldmap.mapreveal == "1"
|
||||
if not showExplore and not showReveal then return end
|
||||
|
||||
local r,g,b,a = GetStringColor(C.appearance.worldmap.mapreveal_color)
|
||||
local mapFileName = GetMapInfo()
|
||||
if not mapFileName then mapFileName = "World" end
|
||||
|
||||
local prefix = string.format("Interface\\WorldMap\\%s\\", mapFileName)
|
||||
local numOverlays = GetNumMapOverlays()
|
||||
-- ClassicAPI: full overlay list for the viewed zone (explored + unexplored),
|
||||
-- read straight from WorldMapOverlay.dbc. Replaces the hand-measured pfMapOverlayData.
|
||||
local zoneData = C_Map.GetMapOverlays() or {}
|
||||
|
||||
-- accumulate explored overlays per zone (never clear, only add)
|
||||
if not alreadyknown[mapFileName] then alreadyknown[mapFileName] = {} end
|
||||
for i = 1, numOverlays do
|
||||
local texName = GetMapOverlayInfo(i)
|
||||
if texName then alreadyknown[mapFileName][string.upper(texName)] = true end
|
||||
end
|
||||
|
||||
local zoneKnown = alreadyknown[mapFileName]
|
||||
|
||||
-- hide explore icons
|
||||
for _, frame in pairs(explores) do frame:Hide() end
|
||||
|
||||
local zoneData = overlayData[mapFileName]
|
||||
local textureCount = 0
|
||||
|
||||
for i, hash in ipairs(zoneData) do
|
||||
local textureName, textureWidth, textureHeight, offsetX, offsetY, mapPointX, mapPointY, name = unpack_hash(prefix, hash)
|
||||
if not textureName then break end
|
||||
|
||||
-- explore magnifying glass icon
|
||||
explores[i] = explores[i] or CreateFrame("Frame", nil, WorldMapDetailFrame)
|
||||
local explore = explores[i]
|
||||
explore:SetWidth(16)
|
||||
explore:SetHeight(16)
|
||||
explore:SetPoint("TOPLEFT", "WorldMapDetailFrame", "TOPLEFT", offsetX + textureWidth/2, -offsetY - textureHeight/2)
|
||||
explore:SetScript("OnEnter", exploreEnter)
|
||||
explore:SetScript("OnLeave", exploreLeave)
|
||||
explore:EnableMouse(true)
|
||||
explore:SetFrameLevel(255)
|
||||
explore.name = mapFileName .. " (" .. name .. ")"
|
||||
explore.tex = explore.tex or explore:CreateTexture("", "OVERLAY")
|
||||
explore.tex:SetBlendMode("ADD")
|
||||
explore.tex:SetTexCoord(.08, .92, .08, .92)
|
||||
explore.tex:SetAllPoints()
|
||||
|
||||
if C.appearance.worldmap.mapexploration == "1" and not zoneKnown[string.upper(textureName)] then
|
||||
explore.tex:SetTexture("Interface\\WorldMap\\WorldMap-MagnifyingGlass")
|
||||
explore:Show()
|
||||
else
|
||||
explore:Hide()
|
||||
end
|
||||
|
||||
-- render overlay texture tiles on BORDER draw layer
|
||||
-- Blizzard's explored overlays on ARTWORK draw on top of BORDER
|
||||
if C.appearance.worldmap.mapreveal == "1" then
|
||||
local numH = math.ceil(textureWidth / 256)
|
||||
local numV = math.ceil(textureHeight / 256)
|
||||
local texPixW, texFileW, texPixH, texFileH
|
||||
|
||||
for j = 1, numV do
|
||||
if j < numV then
|
||||
texPixH = 256
|
||||
texFileH = 256
|
||||
else
|
||||
texPixH = mod(textureHeight, 256)
|
||||
if texPixH == 0 then texPixH = 256 end
|
||||
texFileH = 16
|
||||
while texFileH < texPixH do texFileH = texFileH * 2 end
|
||||
end
|
||||
|
||||
for k = 1, numH do
|
||||
textureCount = textureCount + 1
|
||||
local tex = pfGetOverlay(textureCount)
|
||||
|
||||
if k < numH then
|
||||
texPixW = 256
|
||||
texFileW = 256
|
||||
else
|
||||
texPixW = mod(textureWidth, 256)
|
||||
if texPixW == 0 then texPixW = 256 end
|
||||
texFileW = 16
|
||||
while texFileW < texPixW do texFileW = texFileW * 2 end
|
||||
end
|
||||
|
||||
tex:SetWidth(texPixW)
|
||||
tex:SetHeight(texPixH)
|
||||
tex:SetTexCoord(0, texPixW/texFileW, 0, texPixH/texFileH)
|
||||
tex:ClearAllPoints()
|
||||
tex:SetPoint("TOPLEFT", "WorldMapDetailFrame", "TOPLEFT", offsetX + 256*(k-1), -(offsetY + 256*(j-1)))
|
||||
tex:SetTexture(string.format("%s%s", textureName, ((j-1)*numH + k)))
|
||||
|
||||
explorecaches[name] = explorecaches[name] or {}
|
||||
explorecaches[name][tex] = true
|
||||
|
||||
tex:SetVertexColor(r,g,b,a)
|
||||
tex:Show()
|
||||
end
|
||||
-- ClassicAPI: the unexplored subset of the viewed zone, using the engine's
|
||||
-- own explored-bit test. Replaces the alreadyknown accumulator, which
|
||||
-- replayed the explored-only GetMapOverlayInfo view. Keyed by the bare
|
||||
-- texture name, the same key the icon cache below uses.
|
||||
local unknown = {}
|
||||
if showExplore then
|
||||
for _, overlay in ipairs(C_MapExplorationInfo.GetUnexploredMapTextures() or {}) do
|
||||
if overlay.textureName and overlay.textureName ~= "" then
|
||||
unknown[string.upper(overlay.textureName)] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
pfOverlayMax = math.max(pfOverlayMax, textureCount)
|
||||
for _, overlay in ipairs(zoneData) do
|
||||
local name = overlay.textureName -- bare, e.g. "DRYGULCHRAVINE"
|
||||
local textureWidth = overlay.textureWidth
|
||||
local textureHeight = overlay.textureHeight
|
||||
local offsetX = overlay.offsetX
|
||||
local offsetY = overlay.offsetY
|
||||
|
||||
-- explore magnifying glass icon for overlays the engine still
|
||||
-- counts as unexplored.
|
||||
if showExplore and unknown[string.upper(name)] then
|
||||
local explore = explorePool:Acquire()
|
||||
explore:SetPoint("TOPLEFT", "WorldMapDetailFrame", "TOPLEFT", offsetX + textureWidth/2, -offsetY - textureHeight/2)
|
||||
explore.name = mapFileName .. " (" .. name .. ")"
|
||||
explore.area = name -- cache key: explorecaches is keyed by the plain area name
|
||||
explore:Show()
|
||||
end
|
||||
|
||||
-- render overlay texture tiles on BORDER draw layer
|
||||
-- Blizzard's explored overlays on ARTWORK draw on top of BORDER
|
||||
--
|
||||
-- overlay.tiles is pre-resolved by ClassicAPI: per-tile file /
|
||||
-- draw size / texcoords / canvas position, with Octo's data
|
||||
-- quirks (sliver columns the DBC rect rounds away, foreign tiles
|
||||
-- appended to the number sequence, upscaled re-exports) already
|
||||
-- disambiguated from the actual BLP dimensions. No 256px grid
|
||||
-- math here — deriving the grid from textureWidth/Height is
|
||||
-- exactly what shears quirky overlays (e.g. Icepoint's Kaneq'nuun).
|
||||
if showReveal then
|
||||
for _, tile in ipairs(overlay.tiles) do
|
||||
local tex = overlayPool:Acquire()
|
||||
|
||||
tex:SetSize(tile.width, tile.height)
|
||||
tex:SetTexCoord(0, tile.texCoordX, 0, tile.texCoordY)
|
||||
tex:ClearAllPoints()
|
||||
tex:SetPoint("TOPLEFT", "WorldMapDetailFrame", "TOPLEFT", tile.offsetX, -tile.offsetY)
|
||||
tex:SetTexture(tile.file)
|
||||
|
||||
explorecaches[name] = explorecaches[name] or {}
|
||||
explorecaches[name][tex] = true
|
||||
|
||||
tex:SetVertexColor(r,g,b,a)
|
||||
tex:Show()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- hook WorldMapFrame_Update
|
||||
@@ -212,4 +175,15 @@ pfUI:RegisterModule("mapreveal", function ()
|
||||
pfWorldMapFrame_Update()
|
||||
end
|
||||
|
||||
end)
|
||||
-- live refresh while the map is open: exploration changes arrive on this
|
||||
-- event. Zone switches, zoom and (re)opens still come through the hook
|
||||
-- above, so nothing is redrawn while the map is closed — the next open
|
||||
-- rebuilds from the current state.
|
||||
|
||||
EventRegistry:RegisterFrameEventAndCallback("MAP_EXPLORATION_UPDATED", function()
|
||||
if WorldMapFrame and WorldMapFrame:IsShown() then
|
||||
pfWorldMapFrame_Update()
|
||||
end
|
||||
end)
|
||||
|
||||
end)
|
||||
|
||||
+85
-71
@@ -1,58 +1,30 @@
|
||||
pfUI:RegisterNewModule("marktracking", "Mark Tracker")
|
||||
pfUI:RegisterModule("marktracking", function ()
|
||||
-- Requires mark1-mark8 unit tokens (Turtle WoW / Nampower)
|
||||
if not UnitExists("mark1") and not UnitExists("mark8") then
|
||||
if not pcall(function() UnitExists("mark1") end) then return end
|
||||
end
|
||||
|
||||
local rawborder, border = GetBorderSize()
|
||||
|
||||
-- Parse color strings "r,g,b,a" into components
|
||||
local function ParseColor(str, dr, dg, db, da)
|
||||
if not str or str == "" then return dr, dg, db, da end
|
||||
local _, _, r, g, b, a = string.find(str, "([%d%.]+),([%d%.]+),([%d%.]+),([%d%.]+)")
|
||||
if r then
|
||||
return tonumber(r) or dr, tonumber(g) or dg, tonumber(b) or db, tonumber(a) or da
|
||||
end
|
||||
return dr, dg, db, da
|
||||
end
|
||||
|
||||
local markerOrder = { 8, 7, 6, 5, 4, 3, 2, 1 } -- skull, cross, square, moon, triangle, diamond, circle, star
|
||||
local markerTokens = {}
|
||||
for i = 1, 8 do markerTokens[i] = "mark" .. i end
|
||||
|
||||
-- Default colors per marker
|
||||
local defaultColors = {
|
||||
[1] = { 1.0, 0.9, 0.0, 1 }, -- star: yellow
|
||||
[2] = { 1.0, 0.5, 0.0, 1 }, -- circle: orange
|
||||
[3] = { 0.8, 0.0, 0.8, 1 }, -- diamond: purple
|
||||
[4] = { 0.0, 0.8, 0.0, 1 }, -- triangle: green
|
||||
[5] = { 0.7, 0.7, 0.7, 1 }, -- moon: silver
|
||||
[6] = { 0.0, 0.4, 0.9, 1 }, -- square: blue
|
||||
[7] = { 0.9, 0.0, 0.0, 1 }, -- cross: red
|
||||
[8] = { 1.0, 1.0, 1.0, 1 }, -- skull: white
|
||||
}
|
||||
local markerTokens = {} -- [i] = "markN"
|
||||
local markerIndex = {} -- ["markN"] = i, for the event handler's arg1
|
||||
|
||||
local markerConfigKeys = {
|
||||
[1] = "raidmarkercolor_star",
|
||||
[2] = "raidmarkercolor_circle",
|
||||
[3] = "raidmarkercolor_diamond",
|
||||
[4] = "raidmarkercolor_triangle",
|
||||
[5] = "raidmarkercolor_moon",
|
||||
[6] = "raidmarkercolor_square",
|
||||
[7] = "raidmarkercolor_cross",
|
||||
[8] = "raidmarkercolor_skull",
|
||||
"raidmarkercolor_star",
|
||||
"raidmarkercolor_circle",
|
||||
"raidmarkercolor_diamond",
|
||||
"raidmarkercolor_triangle",
|
||||
"raidmarkercolor_moon",
|
||||
"raidmarkercolor_square",
|
||||
"raidmarkercolor_cross",
|
||||
"raidmarkercolor_skull",
|
||||
}
|
||||
|
||||
local markerColors = {}
|
||||
for i = 1, 8 do
|
||||
local d = defaultColors[i]
|
||||
local r, g, b, a = ParseColor(C.unitframes[markerConfigKeys[i]], d[1], d[2], d[3], d[4])
|
||||
markerColors[i] = { r, g, b, a }
|
||||
for i, markKey in ipairs(markerConfigKeys) do
|
||||
markerTokens[i] = "mark" .. i
|
||||
markerIndex[markerTokens[i]] = i
|
||||
local r, g, b, a = GetStringColor(C.unitframes[markKey])
|
||||
markerColors[i] = { tonumber(r), tonumber(g), tonumber(b), tonumber(a) }
|
||||
end
|
||||
|
||||
local FALLBACK_INTERVAL = 1.0 -- safety net for units that come into range after marker was set
|
||||
local elapsed = 0
|
||||
local isUnlocked = false
|
||||
local ROW_HEIGHT = tonumber(C.unitframes.raidmarkerheight) or 14
|
||||
local BAR_WIDTH = tonumber(C.unitframes.raidmarkerwidth) or 80
|
||||
@@ -99,8 +71,7 @@ pfUI.marktracking = CreateFrame("Frame", "pfMarkTracking", UIParent)
|
||||
else
|
||||
pfUI.marktracking:SetPoint("TOP", UIParent, "CENTER", 0, 0)
|
||||
end
|
||||
pfUI.marktracking:SetWidth(TOTAL_ROW_WIDTH)
|
||||
pfUI.marktracking:SetHeight(8 * (ROW_HEIGHT + 1) + border * 2 - 1)
|
||||
pfUI.marktracking:SetSize(TOTAL_ROW_WIDTH, 8 * (ROW_HEIGHT + 1) + border * 2 - 1)
|
||||
pfUI.marktracking:Hide()
|
||||
|
||||
CreateBackdrop(pfUI.marktracking)
|
||||
@@ -126,19 +97,16 @@ pfUI.marktracking = CreateFrame("Frame", "pfMarkTracking", UIParent)
|
||||
local i = markerOrder[idx]
|
||||
|
||||
local row = CreateFrame("Button", nil, pfUI.marktracking)
|
||||
row:SetWidth(TOTAL_ROW_WIDTH)
|
||||
row:SetHeight(ROW_HEIGHT)
|
||||
row:SetSize(TOTAL_ROW_WIDTH, ROW_HEIGHT)
|
||||
row:Hide()
|
||||
|
||||
row:RegisterForClicks("LeftButtonUp")
|
||||
row:SetScript("OnClick", function()
|
||||
TargetUnit(markerTokens[this.markerIndex])
|
||||
end)
|
||||
row:RegisterForClicks("LeftButtonUp", "RightButtonUp")
|
||||
row:SetAttribute("type1", "target")
|
||||
row:SetAttribute("type2", "menu")
|
||||
|
||||
-- raid icon
|
||||
row.icon = row:CreateTexture(nil, "ARTWORK")
|
||||
row.icon:SetWidth(ROW_HEIGHT)
|
||||
row.icon:SetHeight(ROW_HEIGHT)
|
||||
row.icon:SetSize(ROW_HEIGHT, ROW_HEIGHT)
|
||||
row.icon:SetPoint("LEFT", row, "LEFT", 1, 0)
|
||||
local markTex = C.unitframes.blizzard_raidicons == "1" and "Interface\\TargetingFrame\\UI-RaidTargetingIcons" or pfUI.media["img:raidicons"]
|
||||
row.icon:SetTexture(markTex)
|
||||
@@ -146,8 +114,7 @@ pfUI.marktracking = CreateFrame("Frame", "pfMarkTracking", UIParent)
|
||||
|
||||
-- portrait (right side)
|
||||
row.portrait = row:CreateTexture(nil, "ARTWORK")
|
||||
row.portrait:SetWidth(PORTRAIT_SIZE)
|
||||
row.portrait:SetHeight(PORTRAIT_SIZE)
|
||||
row.portrait:SetSize(PORTRAIT_SIZE, PORTRAIT_SIZE)
|
||||
row.portrait:SetPoint("RIGHT", row, "RIGHT", -1, 0)
|
||||
row.portrait:SetTexCoord(.1, .9, .1, .9)
|
||||
if not rm_showportrait then row.portrait:Hide() end
|
||||
@@ -205,8 +172,8 @@ pfUI.marktracking = CreateFrame("Frame", "pfMarkTracking", UIParent)
|
||||
local token = markerTokens[i]
|
||||
|
||||
if UnitExists(token) and not UnitIsDead(token) then
|
||||
local hp = UnitHealth(token)
|
||||
local maxhp = UnitHealthMax(token)
|
||||
local hp, maxhp = UnitHealth(token), UnitHealthMax(token)
|
||||
row:SetAttribute('unit', token)
|
||||
|
||||
if hp and maxhp and maxhp > 0 and hp > 0 then
|
||||
local pct = hp / maxhp
|
||||
@@ -268,6 +235,27 @@ pfUI.marktracking = CreateFrame("Frame", "pfMarkTracking", UIParent)
|
||||
end
|
||||
end
|
||||
|
||||
-- Fast per-row refresh for a single mark's UNIT_HEALTH/UNIT_MAXHEALTH: moves
|
||||
-- just the bar + hp text. If the mark's visibility flips (comes into range,
|
||||
-- dies, hp crosses 0) the visible rows re-pack, so hand off to UpdateDisplay.
|
||||
local function UpdateRow(i)
|
||||
if isUnlocked then return end
|
||||
local row = pfUI.marktracking.rows[i]
|
||||
if not row then return end
|
||||
local token = markerTokens[i]
|
||||
local hp, maxhp = UnitHealth(token), UnitHealthMax(token)
|
||||
local shouldShow = UnitExists(token) and not UnitIsDead(token)
|
||||
and hp and maxhp and maxhp > 0 and hp > 0 and true or false
|
||||
if shouldShow ~= (row:IsShown() and true or false) then
|
||||
UpdateDisplay()
|
||||
return
|
||||
end
|
||||
if not shouldShow then return end
|
||||
local pct = hp / maxhp
|
||||
row.health:SetValue(pct)
|
||||
if rm_showpct then row.hptext:SetText(math.ceil(pct * 100) .. "%") end
|
||||
end
|
||||
|
||||
-- Unlock mode: show fixed 1-row placeholder so positioning works correctly
|
||||
if pfUI.unlock then
|
||||
local origShow = pfUI.unlock:GetScript("OnShow")
|
||||
@@ -293,24 +281,50 @@ pfUI.marktracking = CreateFrame("Frame", "pfMarkTracking", UIParent)
|
||||
-- Event-driven scanner frame
|
||||
local scanner = CreateFrame("Frame")
|
||||
|
||||
-- RAID_TARGET_UPDATE: fires when a raid marker is set/cleared
|
||||
-- PLAYER_ENTERING_WORLD: fires on login, reload, and zone transitions
|
||||
-- UNIT_HEALTH/UNIT_MAXHEALTH: fires on HP changes for real-time bar updates
|
||||
-- Fallback poll: catches units that come into range AFTER a marker was set
|
||||
-- (no event fires for that case, so we need this safety net). UpdateDisplay
|
||||
-- is a full eight-row rebuild, so it exists only while grouped -- raid markers
|
||||
-- are a group feature and there is nothing to discover alone. The group events
|
||||
-- below start and cancel it, so outside a group there is no timer queued at
|
||||
-- all rather than one waking every second to return early.
|
||||
--
|
||||
-- Deliberately NOT keyed on a mark being visible: a marker set on a unit that
|
||||
-- is out of range shows no row, and that is exactly what this poll catches.
|
||||
local poll
|
||||
local function UpdatePoll()
|
||||
local grouped = IsInGroup()
|
||||
if grouped and not poll then
|
||||
poll = C_Timer.NewTicker(FALLBACK_INTERVAL, UpdateDisplay)
|
||||
elseif not grouped and poll then
|
||||
poll:Cancel()
|
||||
poll = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- RAID_TARGET_UPDATE: a raid marker was set/cleared -> full refresh
|
||||
-- PLAYER_ENTERING_WORLD: login/reload/zone -> full refresh
|
||||
-- PARTY_MEMBERS_CHANGED/RAID_ROSTER_UPDATE: joined or left a group -> the rows
|
||||
-- can change, and the fallback poll starts or stops with it
|
||||
-- UNIT_HEALTH/UNIT_MAXHEALTH: filtered to the eight mark tokens, so arg1 is
|
||||
-- always "markN" and we refresh just that row (UpdateRow) instead of
|
||||
-- rescanning all eight.
|
||||
scanner:RegisterEvent("RAID_TARGET_UPDATE")
|
||||
scanner:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
scanner:RegisterEvent("UNIT_HEALTH")
|
||||
scanner:RegisterEvent("UNIT_MAXHEALTH")
|
||||
scanner:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
||||
scanner:RegisterEvent("RAID_ROSTER_UPDATE")
|
||||
scanner:RegisterUnitEvent("UNIT_HEALTH", "mark1", "mark2", "mark3", "mark4", "mark5", "mark6", "mark7", "mark8")
|
||||
scanner:RegisterUnitEvent("UNIT_MAXHEALTH", "mark1", "mark2", "mark3", "mark4", "mark5", "mark6", "mark7", "mark8")
|
||||
|
||||
scanner:SetScript("OnEvent", function()
|
||||
UpdateDisplay()
|
||||
end)
|
||||
|
||||
-- Fallback poll at 1s: catches units that come into range AFTER a marker was set
|
||||
-- (no event fires for that case, so we need this safety net)
|
||||
scanner:SetScript("OnUpdate", function()
|
||||
elapsed = elapsed + arg1
|
||||
if elapsed < FALLBACK_INTERVAL then return end
|
||||
elapsed = 0
|
||||
if event == "UNIT_HEALTH" or event == "UNIT_MAXHEALTH" then
|
||||
-- arg1 is one of the eight tokens we registered for, so this is a lookup
|
||||
-- rather than a parse -- string.match would allocate a capture and
|
||||
-- tonumber would parse it, on every health tick of every marked unit.
|
||||
local i = arg1 and markerIndex[arg1]
|
||||
if i then UpdateRow(i) end
|
||||
return
|
||||
end
|
||||
if event ~= "RAID_TARGET_UPDATE" then UpdatePoll() end
|
||||
UpdateDisplay()
|
||||
end)
|
||||
end)
|
||||
+35
-52
@@ -33,11 +33,9 @@ pfUI:RegisterModule("minimap", function ()
|
||||
pfUI.minimap.UpdateConfig = function(self)
|
||||
size = tonumber(C.appearance.minimap.size) or 140
|
||||
|
||||
pfUI.minimap:SetWidth(size)
|
||||
pfUI.minimap:SetHeight(size)
|
||||
pfUI.minimap:SetSize(size, size)
|
||||
|
||||
Minimap:SetWidth(size)
|
||||
Minimap:SetHeight(size)
|
||||
Minimap:SetSize(size, size)
|
||||
|
||||
-- vanilla+tbc: do the best to detect the minimap arrow
|
||||
local arrowscale = tonumber(C.appearance.minimap.arrowscale)
|
||||
@@ -105,46 +103,46 @@ pfUI:RegisterModule("minimap", function ()
|
||||
this.highlight:SetAllPoints(this)
|
||||
this.highlight:SetFrameLevel(this:GetFrameLevel() + 1)
|
||||
|
||||
this.highlight.tex = this.highlight:CreateTexture("OVERLAY")
|
||||
this.highlight.tex = this.highlight:CreateTexture(nil, "OVERLAY")
|
||||
this.highlight.tex:SetTexture(pfUI.media["img:mail"])
|
||||
this.highlight.tex:SetPoint("TOPLEFT", MiniMapMailIcon, "TOPLEFT", -2, 2)
|
||||
this.highlight.tex:SetPoint("BOTTOMRIGHT", MiniMapMailIcon, "BOTTOMRIGHT", 2, -2)
|
||||
this.highlight.tex:SetVertexColor(1,.5,.5)
|
||||
|
||||
this.highlight:SetScript("OnUpdate", function()
|
||||
if not this.count then this.count = 0 end
|
||||
if not this.modifier then this.modifier = 1 end
|
||||
if this.count >= 10 then this:Hide() end
|
||||
|
||||
this:SetAlpha(this:GetAlpha() + this.modifier)
|
||||
|
||||
if this:GetAlpha() <= 0.1 then
|
||||
this.modifier = 0.05
|
||||
this.count = this.count + 1
|
||||
elseif this:GetAlpha() >= 0.9 then
|
||||
this.modifier = -0.05
|
||||
end
|
||||
end)
|
||||
-- Blink ten times between .9 and .1, then hide
|
||||
local highlight = this.highlight
|
||||
highlight:SetAlpha(.9)
|
||||
highlight.blink = highlight:CreateAnimationGroup()
|
||||
for i = 1, 10 do
|
||||
local down = highlight.blink:CreateAnimation("Alpha")
|
||||
down:SetChange(-.8)
|
||||
down:SetDuration(.3)
|
||||
down:SetOrder(i * 2 - 1)
|
||||
local up = highlight.blink:CreateAnimation("Alpha")
|
||||
up:SetChange(.8)
|
||||
up:SetDuration(.3)
|
||||
up:SetOrder(i * 2)
|
||||
end
|
||||
highlight.blink:SetScript("OnFinished", function() highlight:Hide() end)
|
||||
end
|
||||
|
||||
this.highlight.count = 0
|
||||
this.highlight:Show()
|
||||
this.highlight.blink:Stop()
|
||||
this.highlight.blink:Play()
|
||||
end)
|
||||
|
||||
-- Create coordinates text frame with location configurable
|
||||
pfUI.minimapCoordinates = CreateFrame("Frame", "pfMinimapCoord", pfUI.minimap)
|
||||
pfUI.minimapCoordinates:SetScript("OnUpdate", function()
|
||||
-- Throttle to update coords every 0.1 seconds
|
||||
if ( this.tick or 0) > GetTime() then return end
|
||||
this.tick = GetTime() + .1
|
||||
|
||||
-- Update coords every 0.1 seconds
|
||||
C_Timer.NewTicker(0.1, function()
|
||||
if C.appearance.minimap.coordstext == "off" then return end
|
||||
|
||||
this.posX, this.posY = GetPlayerMapPosition("player")
|
||||
if this.posX ~= 0 and this.posY ~= 0 then
|
||||
this.text:SetText(string.format("%.1f, %.1f", round(this.posX * 100, 1), round(this.posY * 100, 1)))
|
||||
local coord = pfUI.minimapCoordinates
|
||||
coord.posX, coord.posY = GetPlayerMapPosition("player")
|
||||
if coord.posX ~= 0 and coord.posY ~= 0 then
|
||||
coord.text:SetFormattedText("%.1f, %.1f", round(coord.posX * 100, 1), round(coord.posY * 100, 1))
|
||||
else
|
||||
this.text:SetText("|cffffaaaaN/A")
|
||||
coord.text:SetText("|cffffaaaaN/A")
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -158,8 +156,7 @@ pfUI:RegisterModule("minimap", function ()
|
||||
pfUI.minimapCoordinates:SetPoint("BOTTOMLEFT", 3, 3)
|
||||
end
|
||||
|
||||
pfUI.minimapCoordinates:SetHeight(C.global.font_size)
|
||||
pfUI.minimapCoordinates:SetWidth(Minimap:GetWidth())
|
||||
pfUI.minimapCoordinates:SetSize(Minimap:GetWidth(), C.global.font_size)
|
||||
pfUI.minimapCoordinates.text = pfUI.minimapCoordinates:CreateFontString("MinimapCoordinatesText", "LOW", "GameFontNormal")
|
||||
pfUI.minimapCoordinates.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
pfUI.minimapCoordinates.text:SetTextColor(1,1,1,1)
|
||||
@@ -171,19 +168,14 @@ pfUI:RegisterModule("minimap", function ()
|
||||
pfUI.minimapCoordinates.text:SetJustifyH("LEFT")
|
||||
end
|
||||
|
||||
if C.appearance.minimap.coordstext ~= "on" then
|
||||
pfUI.minimapCoordinates:Hide()
|
||||
else
|
||||
pfUI.minimapCoordinates:Show()
|
||||
end
|
||||
pfUI.minimapCoordinates:SetShown(C.appearance.minimap.coordstext == "on")
|
||||
|
||||
-- Create zone text frame in top center of minimap
|
||||
pfUI.minimapZone = CreateFrame("Frame", "pfMinimapZone", pfUI.minimap)
|
||||
pfUI.minimapZone:RegisterEvent("MINIMAP_ZONE_CHANGED")
|
||||
pfUI.minimapZone:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
pfUI.minimapZone:SetPoint("TOP", 0, -3)
|
||||
pfUI.minimapZone:SetHeight(C.global.font_size + 2)
|
||||
pfUI.minimapZone:SetWidth(Minimap:GetWidth())
|
||||
pfUI.minimapZone:SetSize(Minimap:GetWidth(), C.global.font_size + 2)
|
||||
pfUI.minimapZone.text = pfUI.minimapZone:CreateFontString("minimapZoneText", "LOW", "GameFontNormal")
|
||||
pfUI.minimapZone.text:SetFont(pfUI.font_default, C.global.font_size + 2, "OUTLINE")
|
||||
pfUI.minimapZone.text:SetAllPoints(pfUI.minimapZone)
|
||||
@@ -205,17 +197,13 @@ pfUI:RegisterModule("minimap", function ()
|
||||
elseif pvp == "contested" then
|
||||
pfUI.minimapZone.text:SetTextColor(1.0, 0.7, 0)
|
||||
else
|
||||
pfUI.minimapZone.text:SetTextColor(1, 1, 1, 1)
|
||||
pfUI.minimapZone.text:SetTextColor(WHITE_FONT_COLOR:GetRGBA())
|
||||
end
|
||||
pfUI.minimapZone.text:SetText(GetMinimapZoneText())
|
||||
end
|
||||
end)
|
||||
|
||||
if C.appearance.minimap.zonetext ~= "on" then
|
||||
pfUI.minimapZone:Hide()
|
||||
else
|
||||
pfUI.minimapZone:Show()
|
||||
end
|
||||
pfUI.minimapZone:SetShown(C.appearance.minimap.zonetext == "on")
|
||||
|
||||
-- Minimap hover event
|
||||
-- Update and toggle showing of coordinates and zone text on mouse enter/leave
|
||||
@@ -239,10 +227,9 @@ pfUI:RegisterModule("minimap", function ()
|
||||
pfUI.minimap.pvpicon = CreateFrame("Frame", nil, pfUI.minimap)
|
||||
pfUI.minimap.pvpicon:Hide()
|
||||
pfUI.minimap.pvpicon:RegisterEvent("UPDATE_FACTION")
|
||||
pfUI.minimap.pvpicon:RegisterEvent("UNIT_FACTION")
|
||||
pfUI.minimap.pvpicon:RegisterUnitEvent("UNIT_FACTION", "player")
|
||||
pfUI.minimap.pvpicon:SetFrameStrata("HIGH")
|
||||
pfUI.minimap.pvpicon:SetWidth(16)
|
||||
pfUI.minimap.pvpicon:SetHeight(16)
|
||||
pfUI.minimap.pvpicon:SetSize(16, 16)
|
||||
pfUI.minimap.pvpicon:SetAlpha(.5)
|
||||
pfUI.minimap.pvpicon:SetParent(pfUI.minimap)
|
||||
pfUI.minimap.pvpicon:SetPoint("BOTTOMRIGHT", pfUI.minimap, "BOTTOMRIGHT", -5, 5)
|
||||
@@ -251,11 +238,7 @@ pfUI:RegisterModule("minimap", function ()
|
||||
pfUI.minimap.pvpicon.texture:SetAllPoints(pfUI.minimap.pvpicon)
|
||||
|
||||
pfUI.minimap.pvpicon:SetScript("OnEvent", function()
|
||||
if C.unitframes.player.showPVPMinimap == "1" and UnitIsPVP("player") then
|
||||
pfUI.minimap.pvpicon:Show()
|
||||
else
|
||||
pfUI.minimap.pvpicon:Hide()
|
||||
end
|
||||
pfUI.minimap.pvpicon:SetShown(C.unitframes.player.showPVPMinimap == "1" and UnitIsPVP("player"))
|
||||
end)
|
||||
|
||||
end)
|
||||
|
||||
+11
-78
@@ -1,39 +1,5 @@
|
||||
pfUI:RegisterModule("mouseover", function ()
|
||||
pfUI.uf.mouseover = CreateFrame("Frame", "pfMouseOver", UIParent)
|
||||
|
||||
-- Prepare a list of units that can be used via SpellTargetUnit
|
||||
local st_units = { [1] = "player", [2] = "target", [3] = "mouseover" }
|
||||
for i=1, MAX_PARTY_MEMBERS do table.insert(st_units, "party"..i) end
|
||||
for i=1, MAX_RAID_MEMBERS do table.insert(st_units, "raid"..i) end
|
||||
|
||||
-- Try to find a valid (friendly) unitstring that can be used for
|
||||
-- SpellTargetUnit(unit) to avoid another target switch
|
||||
local function GetUnitString(unit)
|
||||
for index, unitstr in pairs(st_units) do
|
||||
if UnitIsUnit(unit, unitstr) then
|
||||
return unitstr
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Same as CastSpellByName but with disabled AutoSelfCast
|
||||
local function NoSelfCast(spell, onself)
|
||||
local cvar_selfcast = GetCVar("AutoSelfCast")
|
||||
|
||||
if cvar_selfcast ~= "0" then
|
||||
SetCVar("AutoSelfCast", "0")
|
||||
pcall(CastSpellByName, spell, onself)
|
||||
SetCVar("AutoSelfCast", cvar_selfcast)
|
||||
else
|
||||
CastSpellByName(spell, onself)
|
||||
end
|
||||
end
|
||||
|
||||
_G.SLASH_PFCAST1, _G.SLASH_PFCAST2 = "/pfcast", "/pfmouse"
|
||||
function SlashCmdList.PFCAST(msg)
|
||||
local restore_target = true
|
||||
pfUI.api.RegisterSlashCommand("PFCAST", { "/pfcast", "/pfmouse" }, function(msg)
|
||||
local func = pfUI.api.TryMemoizedFuncLoadstringForSpellCasts(msg)
|
||||
local unit = "mouseover"
|
||||
|
||||
@@ -50,51 +16,18 @@ pfUI:RegisterModule("mouseover", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- Nampower: CastSpellByName supports a second unit parameter directly.
|
||||
-- unit is already resolved to "mouseover", "target" or "player" at this point.
|
||||
if not func and GetNampowerVersion then
|
||||
-- Spell-name path: Nampower's CastSpellByName takes a second unit
|
||||
-- parameter directly, no target swap dance required.
|
||||
if not func then
|
||||
CastSpellByName(msg, unit)
|
||||
return
|
||||
end
|
||||
|
||||
-- If target and mouseover are friendly units, we can't use spell target as it
|
||||
-- would cast on the target instead of the mouseover. However, if the mouseover
|
||||
-- is friendly and the target is not, we can try to obtain the best unitstring
|
||||
-- for the later SpellTargetUnit() call.
|
||||
local unitstr = not UnitCanAssist("player", "target") and UnitCanAssist("player", unit) and GetUnitString(unit)
|
||||
|
||||
if UnitIsUnit("target", unit) or (not func and unitstr) then
|
||||
-- no target change required, we can either use spell target
|
||||
-- or the unit is already our current target.
|
||||
restore_target = false
|
||||
else
|
||||
-- The spelltarget can't be used here, we need to switch
|
||||
-- and restore the target during spell cast
|
||||
TargetUnit(unit)
|
||||
end
|
||||
|
||||
if func then
|
||||
func()
|
||||
else
|
||||
-- write temporary unit name
|
||||
pfUI.uf.mouseover.unit = unit
|
||||
|
||||
-- cast without self cast cvar setting
|
||||
-- to allow spells to use spelltarget
|
||||
NoSelfCast(msg)
|
||||
|
||||
-- set spell target to unitstring (or selfcast)
|
||||
if SpellIsTargeting() then SpellTargetUnit(unitstr or "player") end
|
||||
|
||||
-- clean up spell target in error case
|
||||
if SpellIsTargeting() then SpellStopTargeting() end
|
||||
|
||||
-- remove temporary mouseover unit
|
||||
pfUI.uf.mouseover.unit = nil
|
||||
end
|
||||
|
||||
if restore_target then
|
||||
TargetLastTarget()
|
||||
end
|
||||
end
|
||||
-- Macro path: switch target so the macro's spell calls land on `unit`,
|
||||
-- then restore.
|
||||
local restore_target = not UnitIsUnit("target", unit)
|
||||
if restore_target then TargetUnit(unit) end
|
||||
func()
|
||||
if restore_target then TargetLastTarget() end
|
||||
end, true)
|
||||
end)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user