106 Commits
Author SHA1 Message Date
Brues 3e50a0b34f Turn on countdownForCooldowns when migrating the old cooldown settings
pfUI drew its own cooldown numbers before; the native countdown shows
them only with the countdownForCooldowns cvar on, and only the first-run
setup set it. Upgraded installs showed no numbers at all, so the
cooldown settings migration turns the cvar on as it removes
appearance.cd.
2026-11-01 00:23:39 -05:00
Brues 3faeafdfc5 Migrate the old cooldown settings into C.cooldown
The shared appearance.cd values (font, size, threshold, tenths, colors)
move to the cooldown table. "Enable Durations On Foreign Frames" and
"Hide Foreign Cooldown Animations" become the Other Addons numbers and
sweep; the spellbook and character slots take that sweep, and the
foreign numbers when "Enable Durations On Blizzard Frames" was off.

Each module's old options move to its kind: the bars, bags and totems
reverse, the buffs sweep and reverse, and the nameplate debuff text,
sweep and reverse, with "Enable Debuff Timers" off turning off both
numbers and sweep. Unit frames had one set per frame and now share one:
the target frame's timer options and the raid frames' "Show Time Left"
stand for the rest. The per-frame keys, appearance.cd and bars.cd_size
are removed.

The migration is keyed on the old keys rather than the version, so it
also runs on dev installs, and runs once.
2026-10-31 23:52:28 -05:00
Brues b2cffcb3c2 Load each module and skin through securecallfunction so one error no longer stops the rest from loading 2026-10-31 21:17:42 -05:00
Brues 5476a28982 Skin menu dividers: CreateMenuDivider draws a 1px border-colored line; use it in the radar menu 2026-10-31 21:04:11 -05:00
Brues e38d028677 Retire libtipscan: libpredict reads HoT set bonuses from the item set data, the professions skin shows the crafted item's tooltip frame in the detail pane 2026-10-31 20:19:25 -05:00
Brues 987c244591 Load only the client's locale strings; abbreviate numbers through ClassicAPI's numeric formatter; build the module environment once instead of on every load 2026-10-31 20:01:05 -05:00
Brues 14a26b8301 Replace saved-handler wrappers with HookScript; use intrinsic pre/postcall bindings for barbershop and SetHighlight 2026-10-31 19:47:41 -05:00
Brues b2e89b461c Hook OnClick/OnEnter/OnLeave instead of wrapping saved handlers; drop dead TBC bank-slot OnUpdate 2026-10-31 19:40:51 -05:00
Brues 907d282a68 Centralize cooldown setup and settings
Every pfUI cooldown is now made by CreateCooldown(parent, kind) in the
new api/cooldown.lua, which replaces the cooldown module. A kind names
what the cooldown times: actionbar, bags, blizzard (spellbook and
character), unitframe, indicator, nameplate, buff, tooltip, totem or
lossofcontrol. The pfCooldownType, pfCooldownStyleText,
pfCooldownStyleAnimation and pfCooldownSize fields are gone. The new
file owns everything the cooldowns share:
- the numbers' font and size
- the formatter
- each kind's numbers, sweep and sweep direction
- the GCD threshold for spell kinds
- the CooldownFrame_SetTimer hook for other addons' Cooldown frames
UpdateCooldowns applies changed settings to every cooldown at once.
GetAuraTimer moves here from the unit frames.

All settings live in one C.cooldown table, on one page: Settings ->
Cooldown. It has the shared font, size, threshold, tenths and colors,
then "Show Numbers On", "Show Sweep On" and "Reverse Sweep On" lists
with a checkbox per kind. The per-module options are removed:
- each unit frame's timer text, animation and reverse, and the
  indicators' "Show Time Left"
- the nameplate debuff timer options
- the Blizzard and foreign font sizes and toggles
- Action Bars' cooldown text size
- the reverse options of bars, bags, buffs and totems
The old appearance.cd settings are not migrated.

The player buff frame and the tooltip aura icons now show the native
countdown too, which replaces their own text and OnUpdate ticking. The
buff frame keeps its inside or below-the-icon placement. Weapon
enchants report only their time left, so they start through
SetCooldownTimeLeft: numbers, no sweep. A slim poll remains for their
charges and renewals, since no event reports those. Buff indicators
now take the aura's real duration, which gives them a correct sweep.
The spellbook and character slots now hide GCD numbers like the other
spell cooldowns.
2026-10-31 19:17:14 -05:00
Brues 149c8cb3c3 Bump CAPI min to 11813 2026-10-31 19:00:19 -05:00
Brues 93ab07a662 Show cooldown text through ClassicAPI's native countdown
The cooldown module no longer builds its own text frame with a 10 Hz
OnUpdate per cooldown. The CooldownFrame_SetTimer hook now configures
each Cooldown frame's own countdown instead: SetHideCountdownNumbers
for the per-frame text toggles and omnicc's noCooldownCount,
SetMinimumCountdownDuration for the GCD threshold, and
GetCountdownFontString for the pfUI font and size. The engine ticks
the numbers, gated by the countdownForCooldowns cvar. The cvar gets a
checkbox in the Cooldown settings, and pfUI.SetupCVars turns it on.

The text comes from one shared C_StringUtil numeric rule formatter,
given to each frame with SetCountdownFormatter. Its breakpoints keep
pfUI's format: the number in its unit's cooldown color, a unit (m/h/d)
once the unit below passes 99, and tenths in the low color when
milliseconds are on. Values now round up. GetColoredTimeString formats
through the same formatter, so the buff, buffwatch and tooltip timers
match. A config:changed callback rebuilds the breakpoints, and every
frame picks them up on its next update.

The paper-doll slots swap their indicator Models for Cooldown frames,
as the spellbook and bags already do. They and the spellbook take the
BLIZZARD tag when they are created, replacing the per-update hooks in
the skin module. Models get no numbers. Hide Foreign Cooldown
Animations clears the draw flags instead of setting alpha to 0, so the
numbers stay visible. The buff module's sweep hides its numbers
because buff.timer carries the text.
2026-10-31 18:45:17 -05:00
Brues 84da90c7d4 Run the raid and questitem delay timers on C_Timer
Both modules waited out their delays in an OnUpdate script. Each now
keeps one C_Timer.NewTimer handle and cancels it whenever a new request
comes in, so the update runs 0.5 s after the last one.

Raid: the roster pass becomes pfUI.uf.raid:UpdateRoster, and
pfUI.uf.raid:QueueUpdate schedules it. Roster events queue it with a
0.5 s delay; a config change or a tank toggle queues it for the next
frame. The frame no longer shows and hides itself to run the pass, and
the extra 1 s throttle is gone because the debounce already merges
bursts.

Questitem: without the OnUpdate script the scanner frame only handled
events, so it moves onto pfUI.events with one callback per event, and
pfUI.questitem becomes a plain table. The showquest check now lives in
QueueSeed.
2026-10-31 17:25:44 -05:00
Brues d2cefe69cf Add a DBM-style range radar for party and raid members
/radar toggles it and /radar <yards> sets the range; the right-click
menu and the mouse wheel step through 5-40 yd. The map turns with
GetPlayerFacing so ahead is up, and ClassicAPI.UnitPosition places
class-colored dots (the mirrored name, since SuperWoW takes the global
with x, y, z order).

The range ring is two stacked TempPortraitAlphaMask discs: a ring-color
disc under a slightly smaller background-color one. It turns red when a
member is inside the range, and a list under the radar shows the five
nearest with their raid markers inline. Raid markers come from the
markN tokens, so marked mobs show too and a marked member shows the
marker instead of a dot.

Units behind terrain (UnitInLineOfSight, traced 4x a second) are
dimmed. Units on another floor, over 5 yd up or down and steeper than
45 degrees so hills don't count, get an arrow above or below them.
Hovering a blip shows its name, distance and both states; clicking a
blip or a list row targets it.
2026-10-31 17:17:35 -05:00
Brues 9da2d459dd Fix dressup Undress button text: UNDRESS global doesn't exist in 1.12.1 2026-10-31 16:43:29 -05:00
Brues 2b7febf617 Replace pfUI's clamp/isempty/modf with ClassicAPI's Clamp/TableIsEmpty
The world map's shift/ctrl wheel alpha and scale use Clamp, and the
fresh-install profile check uses TableIsEmpty (pfUI_init and pfUI_config
are always tables by then). modf only wrapped math.modf and had no callers.
2026-10-31 15:47:52 -05:00
Brues 3b64bfa98b Show the target LoS indicator through ClassicAPI's UnitInLineOfSight
The indicator moves from the unitxp module to the target frame, so it no
longer needs UnitXP_SP3. Its checkbox and the shared font size move to a
Target Indicators header; unitxp_font_size becomes indicator_font_size.
The unused pfUI.api.UnitInLineOfSight wrapper, which shadowed the
ClassicAPI global inside the pfUI environment, is removed.
2026-10-31 15:41:15 -05:00
Brues 217b00e9a4 Use ClassicAPI.strsplit for pfUI's strsplit 2026-10-31 15:33:13 -05:00
Brues 2d5cf94ae1 Fold librange into pfUI.api.UnitInRange 2026-10-31 15:23:13 -05:00
Brues 7ba0fedd2b Make the inspect window movable by dropping EnableMovable's addon wait 2026-10-31 15:21:18 -05:00
Brues b6a41e70ec Switch action bar pages and shift-drag on MODIFIER_STATE_CHANGED 2026-10-31 15:16:28 -05:00
Brues e43ddd31fd Read nameplate units directly instead of scanning by name 2026-10-31 15:08:39 -05:00
Brues f81ea09d1c Choose 3D, 2D or round/square class icon portraits 2026-10-31 14:43:43 -05:00
Brues 78d4e0a56e Run the Turtle WoW setup with RunNextFrame and hook the map once
The one-shot OnUpdate frame becomes RunNextFrame. Its call into the map loader ran with the delay frame as this, so the loader's hooked flag sat on a different frame than on PLAYER_ENTERING_WORLD and the map hooks went on twice: shift and ctrl mouse wheel changed alpha and scale by two steps. The flag is now a local of the module.
2026-10-31 14:28:01 -05:00
Brues caf7112651 Scan chat bubbles once per frame with DirtiableMixin
Each chat message queued its own scan for the next frame, so a busy frame scanned the same bubbles several times. MarkDirty runs one scan for all of that frame's messages.
2026-10-31 14:28:01 -05:00
Brues e5a78c8d54 Animate unit frame bars with ClassicAPI's SmoothStatusBarMixin
Health and power bars take SmoothStatusBarMixin instead of pfUI's own OnUpdate animation, so the animation no longer runs faster at higher frame rates. The speed dropdown becomes an on/off checkbox, since the mixin's rate is fixed. A new range keeps the bar's filled share, so it doesn't jump before the animation moves on.
2026-10-31 14:20:20 -05:00
Brues 43f90751d6 Clear AFK when a holiday scene is clicked 2026-10-31 13:45:35 -05:00
Brues f90279e003 Drive the haste and spell power text from events
Replace the 0.25s ticker with UNIT_SPELL_HASTE for haste and
PLAYER_DAMAGE_DONE_MODS for spell power, which fires on the
MOD_DAMAGE_DONE fields GetSpellBonusDamage reads.
2026-10-31 13:27:48 -05:00
Brues 17fe9f0dd9 Drive the mounted trigger from PLAYER_MOUNT_DISPLAY_CHANGED
IsMounted reads the mount display field, which this event watches. The trigger listened to UNIT_AURA_DELTA, which can fire before that field updates and only worked because the switch waits half a second. UNIT_AURA_DELTA still drives the stealth and dining triggers.
2026-10-31 13:20:03 -05:00
Brues 54e66fea11 Drive range, offline, aggro and combat state from events
Every unit frame re-checked its range fade, offline state, combat and
aggro glow and indicator icons on a 0.2-0.5s tick, and infight polled
aggro every 0.3s. Each now comes from an event.

Aggro: the 270-token scan and its cache are gone. UNIT_TARGET fires for
every unit in view (SuperWoW registers them all), so a table of which
hostile unit attacks which friendly one, by GUID, follows every attacker,
including ones no token reaches. A unit that comes into view mid-fight
is noted when a token first reaches it (target, focus, mouseover, a
nameplate, a member's target). A read drops attackers that left view,
where nothing fires, and a loading screen resets the table. Changes go
out as "aggro:changed" with the old and the new victim, so only the
frames showing those redraw; infight listens too.

Combat square and glow follow UNIT_FLAGS. Range fade follows ClassicAPI's
UNIT_IN_RANGE_UPDATE, registered only by frames that fade, by GUID for a
chained unit; with the 40y check off, frames fade by sight through
UNIT_DISTANCE_CHECK_UPDATE, which also swaps a portrait's question mark
for the model. A UnitXP threshold has no event and keeps its poll.
UNIT_CONNECTION refreshes a member who goes offline or comes back; the
PARTY_MEMBER_ENABLE/DISABLE branches were never registered.

A full refresh now draws the indicator icons and combat state, so a new
unit brings its own. UNIT_FACTION redraws the PvP icon and reaction
colour; its "pvp" refresh step drew nothing. Unlock mode and /pftest
re-apply the fade on entry and exit.

What stays on the tick: the pet frames and the UnitXP range check.
2026-10-31 13:10:46 -05:00
Brues d21d13bdfa Skin ClassicAPI options edit boxes instead of treating them as dropdowns 2026-10-31 12:40:07 -05:00
Brues 480889cb05 Drive power from UNIT_POWER_UPDATE and UNIT_MAXPOWER
1.12's UNIT_MANA, UNIT_RAGE and the rest fire for every power a unit
has, not only the one it shows, so a druid in cat or bear form redrew
every frame showing them, health colours and texts included, on each
mana tick. ClassicAPI's generic power events name the power in arg2.

Unit frames register them on their own token and redraw only for the
power their bar shows, or for mana under a druid mana bar. They fire
for tokens only, so the GUID-followed target-of-X frames keep the
per-type events; those now share one list with UNIT_AURA, so a frame
swaps auras and power on the same check.

energytick counts gains on the power it tracks alone, so a cat druid's
mana regen is no longer read as energy. It forgets the power while
hidden, so a bear's mana ticks are not measured against rage, and
re-baselines on a shift, so leaving cat form is not a fake mana gain.

The equipment manager's dining trigger wakes on mana changes only.
2026-10-31 11:55:54 -05:00
Brues b6f58b0e04 Drive auras from UNIT_AURA_DELTA
UNIT_AURA says nothing about what changed and stays silent when a buff
is refreshed or its duration packet lands, so a recast HoT kept its old
timer until something else rebuilt the row. UNIT_AURA_DELTA reports
added, updated and removed aura instances, refreshes included.

Unit frames register it on their own token. An add, a removal or a full
update rebuilds the auras as before; an update-only delta re-reads the
slot behind each shown icon for its stacks and timer and redraws the
buff indicators, without a relayout or a dispel scan. Frames that
follow a GUID (the target-of-X chain) stay on UNIT_AURA, since the
delta only fires for tokens. A finished aura layout announces itself
as "unitframe:auras".

buffwatch drops its 0.4s rescan: bars rebuild on the delta, on login
and on a target change, and a timer wakes the frame when the next aura
crosses the bar threshold. Bars re-anchor when the player or target
frame lays out its aura rows, and a whitelist or blacklist click
applies at once.

Nameplates, the loss of control alert and the equipment manager's
mount/stealth/dining check listen to the delta as well.
2026-10-31 11:32:47 -05:00
Brues 8b5a27f9be Expire cached aggro on UNIT_TARGET
UnitHasAggro caches a positive answer for 1s and a negative one for
0.3s, so the aggro glow lagged a taunt or a mob turning on a healer by
up to that long. A retarget now expires the entries it can affect: every
unit that had aggro and the retargeting unit's new target. The rest stay
cached, so the scan runs no more often. Mobs without a token of their
own fire it with their GUID, and "<guid>target" composes.
2026-10-31 06:36:42 -05:00
Brues cc5c562516 Rebuild the unit tooltip when its unit retargets
pfUI's unit lines -- target, guild, colours, speed, unit id, the buff
row -- were added once from OnShow, so the target line went stale while
hovering, and any SetUnit on a shown tooltip wiped them. They now go on
from OnTooltipSetUnit, every time a unit is set.

While a unit tooltip is up it listens for UNIT_TARGET on the unit's
GUID and re-sets the unit a frame later, through the token the tooltip
was built from: "mouseover" stops naming the unit once the cursor
leaves, so a fading tooltip is left to fade. Item and spell ids stay on
OnShow.
2026-10-31 06:36:42 -05:00
Brues a9542bd467 Follow target-of-target frames with UNIT_TARGET
A frame whose unit is another unit's target (targettarget,
targettargettarget, pettarget, focustarget, partyNtarget) has no token
that unit events name, so it polled: bars every 0.2s, a full aura and
portrait rescan every second, and a GUID compare to notice swaps.

Such a frame now registers its unit events by the unit's GUID, which
every unit event also fires with, and UNIT_TARGET by the GUID of every
link of its chain. A link retargeting re-points the frame at once and
queues one full refresh; the ticks are gone. The 0.2s visibility timer
stays for them, since nothing reports a unit going out of sight.

Nameplates register UNIT_TARGET on their own token, so a mob turning to
someone else recolours its combat state immediately instead of after
the colour cache and data tick run out.

Drop pfScanActive and the namebuf delay: both guarded against the old
target-swapping range scan, which no longer exists. focus.lua's
instantRefresh was never read.
2026-10-31 06:27:21 -05:00
Brues 45bc65b3c0 bump CAPI min to 1.18.10 2026-10-31 06:10:04 -05:00
Brues 113ff257cf CHAT_MSG_BN_WHISPER and RAID_INSTANCE_WELCOME are not valid events 2026-10-31 03:12:33 -05:00
Brues 07e315cd86 Toggle the item comparison live with shift
The comparison read IsShiftKeyDown() only when the tooltip was set, so
pressing or releasing shift while hovering did nothing until the next
hover. Each hooked tooltip now remembers the item it shows, dropped on
OnTooltipCleared and OnHide, and MODIFIER_STATE_CHANGED shows or hides
its comparison right away, as on retail.

Merchant and auction comparisons show regardless of shift and never
store a link, so shift leaves them up.
2026-10-31 03:05:56 -05:00
Brues b3298571dd End the nameplate right-click on GLOBAL_MOUSE_UP
The right-click emulation polled IsMouselooking() every frame while the
button was held, to catch the release. GLOBAL_MOUSE_UP reports the
release directly, so the frame and its OnUpdate go away.

PLAYER_STOPPED_LOOKING can't stand in for it: ClassicAPI fires the
LOOKING pair only for left-button free-look, and only once the camera
has moved, so a click without a drag fires neither event.
2026-10-31 02:57:03 -05:00
Brues f5c08822f8 Keep empty fields and literal delimiters in strsplit
pfUI.api.strsplit (also the bare strsplit in module code) built a
"([^%s]+)" pattern from the delimiter. That dropped empty fields
("a,,b" gave "a", "b") despite the comment, and a delimiter that is a
pattern character (% ] ^ -) broke the pattern. It now scans for an
escaped character class and keeps every field, like WoW's strsplit.

The custom buff indicator list skips the empty entries this now yields
for "" and the list editor's leading "#", so an empty list no longer
scans auras.
2026-10-31 02:49:46 -05:00
Brues 6f5c225ec3 Drive unit frame visibility from events
Every unit frame re-checked its visibility five times a second. Now
group, target and pet events re-check it in OnEvent, which also runs
while a frame is hidden, and the focus module already re-checks focus
and focustarget on PLAYER_FOCUS_CHANGED.

Only the frames with a tick keep the 0.2 second poll. They show another
unit's target or a pet that can go out of sight, and no event reports
either. The focus target frame now gets the same tick as targettarget,
because no event reports the focus changing its target.

Unlock mode and /pftest have no event, so they re-check every frame
when they change. RegisterUnitWatch does not fit here. It polls on the
same 0.2 second timer, and it only shows a unit that exists, without
the pet range, raid grid and group hiding rules.
2026-10-31 02:04:20 -05:00
Brues a8d805626d Replace QueueFunction and RunOOC with RunNextFrame
RunOOC never waited for combat to end; it ran its function on the next
frame. QueueFunction ran one function every 0.2 seconds. Each caller now
defers with ClassicAPI's RunNextFrame.

The loot roll announcement sends its name lists and the roll directly.
The 0.2 second spacing did not help with the server's chat flood limit
(10 messages less than a second apart), and an announcement is at most
four messages.
2026-10-31 01:57:10 -05:00
Brues df13e30e08 Add a Valentine's Day AFK scene
Hearts drawn from a turned square and two tinted minimap-mask discs float up the screen and sway, a rosy glow lines the edges, and the goblin Cupid hovers by the side.
2026-10-31 01:50:12 -05:00
Brues 235422689b Add Hallow's End and Christmas AFK scenes
The fireworks screen becomes a shared AFK scene: a fading night, the greeting, and a click or coming back to close it. Hallow's End gets a flickering candlelight edge and a row of undead, seven of fifteen creature displays at random, that rise one after another. Christmas gets endless snowfall and a drift that piles up for as long as the player is AFK. Fireworks now spawn across the scene's own size instead of the UI-scaled screen size.
2026-10-31 01:50:12 -05:00
Brues f79494a53a Play the New Year fireworks as animation groups
Explosions are pooled textures that grow and fade with a Scale and Alpha group instead of resizing frames every frame, and the night fades in with an Alpha group instead of stepping alpha per frame.
2026-10-31 00:53:57 -05:00
Brues 7db85b6c07 Play button press animations as animation groups
Each style is now a list of keyframes that a button builds into chained
Scale and Alpha animations the first time it plays. The animations are
timed by the engine instead of stepping by 30/GetFramerate() each frame,
scale the drawing instead of the frame, and run no Lua while they play.
The damped bounce styles ease between the extremes of their old curves.
2026-10-31 00:45:09 -05:00
Brues 61282115a3 Pulse the screen edge glow smoothly and drive it from events
The glow stepped its color ten times a second and re-checked combat,
health and death on every step. An animation group now shifts the color
along an IN_OUT curve and pauses while the glow is hidden. Combat,
health and death update from their events. Aggro has no event, so a
ticker polls it every .3s, matching UnitHasAggro's cache, and only while
that glow is enabled.
2026-10-31 00:36:43 -05:00
Brues b64ae7dd53 Replace HookAddonOrVariable with an EventUtil-based HookAddon
The polling lurker frame is gone. HookAddon gates on
C_AddOns.DoesAddOnExist, waits for PLAYER_LOGIN with
EventUtil.ContinueOnPlayerLogin, then runs on
EventUtil.ContinueOnAddOnLoaded. Addons loaded at startup still hook
only after every pfUI module and skin exists and after the addon's
own VARIABLES_LOADED setup. Load-on-demand addons still hook on their
ADDON_LOADED.

The "or variable" form is gone. Callers that passed a global now pass
the addon that defines it: TheoryCraft, SuperMacro, DPSMate and
Turtle_GroupUI. DPSMate names its windows from its settings, so its
hook now checks for DPSMate_DPSMate itself, as the variable lookup
used to. eqcompare's Guda check uses HookAddon too.
2026-10-31 00:28:30 -05:00
Brues b9c260b8e1 Confirm clipboard copies with fading screen text instead of chat 2026-10-30 23:50:42 -05:00
Brues ff5deac0ec Copy links with CopyToClipboard instead of a popup
Clicking a chat URL and the GUI's Donate/GitHub/Website buttons now put the address straight on the clipboard and say so in chat. The url link goes through ClassicAPI's LinkUtil handler registry, so SetItemRef is no longer replaced. Exporting a profile also copies the string.
2026-10-30 23:45:08 -05:00
Brues cff4be9416 Mousewheel Scroll Speed doesn't require a reload to change 2026-10-30 23:40:50 -05:00
Brues 6a670ab668 Tint swing timer bars while the target is out of range
C_SwingTimer checks the range for each shown bar, and
PLAYER_SWING_RANGE_UPDATE turns a bar the new Out Of Range Color (grey by
default, since the main-hand bar and the hunter dead zone are red) while
its swing can't reach the current target. The melee check is the
server's 2D reach; the ranged one covers the hunter's minimum range too.
No check (no target, nothing to attack, no weapon) keeps the normal
color.
2026-10-30 23:31:29 -05:00
Brues c5894f7f15 Scroll chat with ScrollByAmount
The mouse wheel on the chat frames and on the AFK camera's chat moves by
ScrollByAmount instead of looping ScrollUp / ScrollDown. Shift-wheel up
scrolls by the full range, so the oldest line stops on top as it does
with the wheel; ScrollToTop would leave it alone on the bottom line.
2026-10-30 23:26:36 -05:00
Brues 5224d02572 Drive the loss of control alert by events alone
The 0.1s rescan only caught timers that change without a loss of control
event: a refreshed debuff fires UNIT_AURA, and a second kick on a locked
school fires SPELL_UPDATE_COOLDOWN, after ClassicAPI has read the lockout
from the packet. The alert listens to both while it shows. pfUI's
cooldown text prints the time left on the icon, so the alert's own
countdown and LOSS_OF_CONTROL_SECONDS go.
2026-10-30 23:23:17 -05:00
Brues f56720dccc Add a loss of control alert
A movable alert in the middle of the screen for the strongest active
effect from C_LossOfControl: icon, cooldown sweep, the effect's name and
the seconds left. A school lockout reads "<School> Locked". It opens on
LOSS_OF_CONTROL_ADDED / _UPDATE and rescans every 0.1s while shown,
because a refreshed debuff or a second kick changes the timer without an
event.

The labels are Classic Era's LOSS_OF_CONTROL_DISPLAY_* GlobalStrings,
added to each locale file. The README lists the alert and the dressing
room controls.
2026-10-30 23:16:20 -05:00
Brues 70cc994a97 Zoom, pan and per-slot undress in the dressing room
EnableClickRotate becomes EnableModelControls, the controls of 4.3.4's
ModelWithControlsTemplate: left-drag turns the model without ClassicAPI's
step animation, the mouse wheel moves the camera toward the face with
SetPortraitZoom, and right-drag pans with 4.3.4's per-race pan speed and
bounds. Showing the frame resets zoom and pan. Every model frame pfUI
skins gets them.

The dressing room gains an Undress button and a column of slot buttons
on each side, in the paperdoll's order; clicking one calls UndressSlot.
2026-10-30 23:11:09 -05:00
Brues 2c7ca8afdd Read the dock anchor only once a frame is docked
SetupMenu reads each radio's selection when the dropdown is set up at module load, before any frame is docked, so IsDockAnchor indexed a nil dock parent.
2026-10-30 22:25:27 -05:00
Brues 1b71ee617f Wait on ContinueOnItemLoad for inbox, panel and loot history items
The inbox package border now waits for the item to load, since another
player's item may not be cached. The panel and loot history drop their
cached branch: ContinueOnItemLoad runs at once for a cached item. The
swing timer reads the off-hand inventory type from the slot instead of
parsing the item link.
2026-10-30 21:44:37 -05:00
Brues bfe1864aa1 Pick the unlock dock's anchor from a pfUIDropdownTemplate
Each radio reads its selection from the frame's saved position, and
UpdateDockValues regenerates the menu instead of setting a UIDropDownMenu
selection by hand. A frame without a saved position shows N/A, like its
coordinates, instead of the anchor of the frame selected before it.
2026-10-30 20:21:46 -05:00
Brues 11b1a2b077 Show the master loot menu with ClassicAPI's menu system
The menu opens under the clicked loot button, owned by it. A change to
the candidates or the rolls rebuilds it while it is shown. Request Rolls,
Reroll Ties, Clear Rolls and the roll list sit in the root menu, which
can be rebuilt in place where a submenu can't, so rolls appear as they
come in. With advanced loot off, the raid gets the class lists instead of
Blizzard's menu, whose roster the unregistered LootFrame never filled.
The confirm dialog names the candidate instead of the clicked row's text.
pfUI no longer initializes GroupLootDropDown or overrides
GroupLootDropDown_GiveLoot.
2026-10-30 20:13:52 -05:00
Brues 4616c2bc5f Toggle visibility with SetShown instead of Show/Hide branches
Each if/else that only showed one object in one branch and hid it in the other is now ClassicAPI's SetShown, which shows on any truthy value. 21 sites across 10 modules.
2026-10-30 19:49:43 -05:00
Brues f7680ded0b Fill textures with SetColorTexture instead of color-form SetTexture
ClassicAPI's SetColorTexture is the same engine call as SetTexture(r, g, b [, a]) under the name that says what it does. 83 calls across 25 files, renamed only.
2026-10-30 19:48:48 -05:00
Brues 6469a557ff Reuse one question dialog, backfill chat history, dim arrow icons on events
CreateQuestionDialog builds its frame once and sizes it right away from
the text's unbounded width. A frame per call broke the one-dialog guard
after the first dialog, since 1.12 binds a frame name only once. An
onclose that opens the next question runs on the next frame.

Chat history goes in with BackFillMessage, above the lines the frame
already has. SkinArrowButton dims its icon from OnEnable/OnDisable
instead of an OnUpdate per button.
2026-10-30 19:48:02 -05:00
Brues 4988384884 Light config rows on mouse motion and list search results in a ScrollBox
Config rows and search results took their hover from an OnUpdate that
polled the cursor every frame. Rows now take OnEnter/OnLeave, and their
widgets propagate mouse motion so the row stays lit over them. Search
results fill a pfUIScrollBoxListTemplate from a DataProvider instead of
a hand-pooled button list, and match the search text literally.
2026-10-30 19:39:22 -05:00
Brues af9edb215d Show pfUI's dropdowns and menus with ClassicAPI's menu system
pfUIDropdownTemplate (a DropdownButton) replaces CreateDropDownButton in
the config GUI, addon profiles, the trigger editor and the icon picker
filter. The equipment set gear menu and the tracking menu open
MenuUtil context menus. pfUIMenuStyleMixin draws pfUI's backdrop behind
them, and the skin module makes it the default style and draws the
checkboxes and radios as pfUI boxes.
2026-10-30 19:33:40 -05:00
Brues f37ea00226 Give pfUI its own EventRegistry and move event-only frames onto it
pfUI.events was a bare CallbackRegistry for pfUI's custom events. Build it
from ClassicAPI's EventRegistry instead, so the same object also takes game
events through RegisterFrameEventAndCallback, sharing one frame for all of
them.

Move the frames that existed only to listen for a few events onto it:
libspell, focus, pixelperfect, innervatecall, loothistory, unusable,
equipmentmanager (bank + window refresh), the actionbar grid, updatenotify,
turtle-wow's steady shot, nampower's spell queue, superwow's group tracking
and unitxp's notifications, plus newitem and mapreveal, which used the
global EventRegistry. Handlers take their payload as arguments instead of
the event/arg globals, and the per-frame PLAYER_LOGOUT teardown goes away,
since the registry unregisters its frame on logout.
2026-10-30 12:37:56 -05:00
Brues b0f9b7b993 Use ClassicAPI's nop for empty functions 2026-10-30 12:20:37 -05:00
Brues 436c6d6dd4 Apply per-line chat settings without a reload 2026-10-30 12:20:23 -05:00
Brues efe6ec6080 Give spellbook buttons a native Cooldown and fix the bag slot one
Spell buttons kept the template's indicator Model for their sweep. The
Spellbook skin now creates a native Cooldown for each one.

Taking the "<button>Cooldown" name was meant to point the FrameXML
lookups at the new frame, but 1.12 binds a frame's name only while that
global is unset. The bag slot Cooldowns from a721f788 were never used:
ContainerFrame_UpdateCooldown still drove the Model, so bags lost their
timer text, ignored Reverse Cooldown Animation and were hidden by Hide
Foreign Cooldown Animations. Both places now rebind the global by hand.
2026-10-30 12:09:19 -05:00
Brues a96a3dbd87 Show the About page's values inside the panel
The values anchored to the content's TOPRIGHT, which now spans the whole
panel since the panels moved to pfUIScrollFrameTemplate, so they sat 375px
past its right edge and the scroll frame clipped them. Anchor them to the
content's TOPLEFT, where the labels' offsets already measure from.
2026-10-30 11:45:08 -05:00
Brues a721f788a9 Let each cooldown frame apply its own sweep settings
The sweep options reached the frames only through the cooldown module's
CooldownFrame_SetTimer hook, which set alpha 0 for a hidden animation and
SetReverse(true) for a reversed one. With that module disabled, Show Timer
Animation and Reverse did nothing, and reverse never turned back off
without a reload. The player buff sweeps had no other path at all.

Each owner now configures its own frame. Player buffs drive their
Cooldown with SetCooldown and Clear, and only while Show Timer Animation
is on. Unit frame auras, raid aura indicators and nameplate debuffs hide
the sweep with SetDrawSwipe and SetDrawBling. Every frame with a reverse
option calls SetReverse. The hook keeps the timer text and Hide Foreign
Cooldown Animations.

Nameplate debuffs hid the sweep with alpha, which the plate's SetAlpha
copied down on every target change (ClassicAPI keeps 1.12's alpha under
default plates), so hidden sweeps came back. Their settings now come from
UpdateDebuffConfig alone.

Bag slots get a native Cooldown like bank slots, in place of the
template's indicator Model, so Reverse Cooldown Animation covers bags and
Hide Foreign Cooldown Animations no longer hides them.

The buff, unit frame, nameplate and totem options apply without a reload.

Fixes #72.
2026-10-30 10:46:00 -05:00
Brues f33a9068f2 Translate the Self quick button
Classic Era dropped QUICKBUTTON_NAME_SELF and its tooltip, so every locale
showed 4.3.4's English text. Each locale now has its own, worded after its
My actions strings.
2026-10-30 03:13:38 -05:00
Brues 187e057923 Add the Combat Log settings window and 4.3.4's default filters
"Settings" in the Combat Log tab's menu opens Blizzard's Combat Log page,
rebuilt in Lua with pfUI widgets: the filter list with copy, add and
delete, and the Message Sources, Message Types, Colors, Formatting and
Settings tabs. Combat Log Defaults restores the default filters. Closing
the window refills the log only when the active filter changed.

The log now records while ChatFrame2 is hidden, so switching tabs no
longer loses history.

The default filters are 4.3.4's: Self, Everything, What happened to me?
and Kills. Classic Era's My actions left out auras.
2026-10-30 03:02:42 -05:00
Brues 3899004957 bump CAPI min to 1.18.05 2026-10-30 02:19:25 -05:00
Brues ee73cde828 Replace the combat log with Classic Era's Blizzard_CombatLog
ChatFrame2 now shows the 4.x combat log, ported from Classic Era's
Blizzard_CombatLog as the combatlog module. ClassicAPI's COMBAT_LOG_EVENT,
CombatLogAddFilter and kept entries drive it, and changing filter refills
the frame with BackFillMessage. Quick buttons sit above the log, and its
unit, spell, raid icon and action links open Blizzard's filter menus.
Filters save account-wide in pfUI_combatlog.

The 1.12 CHAT_MSG_COMBAT_* and CHAT_MSG_SPELL_* events no longer reach
ChatFrame2. Its message groups stay saved, so disabling the module brings
the text log back.

env/combatlog_<locale>.lua hold the Classic Era GlobalStrings the log reads
that 1.12 lacks.
2026-10-30 02:19:08 -05:00
Brues 76efd5b490 Pass every AddMessage argument through the chat hook
The hook forwarded the text and seventeen named arguments. It takes them
as ... now, which ClassicAPI rewrites to unpack(arg) with arg.n, so every
argument reaches the frame's AddMessage, nils included. GetMessageInfo
returns all of them, and a hook that drops some loses them for every
frame after it.
2026-10-30 01:25:36 -05:00
Brues 393b37b8c3 Add an option to show timestamps in chat copy
"Show Timestamps In Chat Copy" (chat text settings, on by default) is read
each time chat copy opens. With it off, chat copy takes each line through
pfUI.chat.StripTimestamp, which removes the exact timestamp AddMessage
prepends: the configured color and brackets, so other bracketed text
stays.

Whispers are now recolored before the timestamp goes on, not after. The
recolor turned the stamp's closing "|r " into "|r" plus the whisper color,
so whisper lines did not match. The shown text and the saved history come
out the same.
2026-10-30 01:25:36 -05:00
Brues 7928db33bf Show the equipment manager's lists in ClassicAPI ScrollBoxes
The set list, the unused-items grid and the trigger list each drew a
fixed number of slots and moved them with a mouse-wheel offset. All three
are pfUIScrollBoxListTemplate lists now, with a scroll bar.

The set list's rows are the sets and then the "New Set" entry, set up by
one initializer. Refresh rebuilds them only when the sets change and
otherwise reinitializes the shown rows, so a row keeps its frame between
the two clicks of the native OnDoubleClick that now equips a set, in
place of the hand-timed double click. PickupEquipmentSet is called
without a presence check.

The row's gear passes mouse motion on to the row, so moving onto it no
longer leaves the row and the MouseIsOverHitRect workaround is gone. The
gear rests at half alpha and lights up on hover with an additive copy of
itself, instead of the blue square highlight.

The unused items are a grid view that keeps its scroll position on
refresh. The trigger list scrolls to a new trigger with ScrollToEnd.
2026-10-30 01:07:22 -05:00
Brues 5d8314b2d4 Scroll the config panels with ClassicAPI's scroll bar
pfUIScrollFrameTemplate (api/ui-widgets.xml) is a ScrollFrame with
pfUIScrollBarTemplate inside its right edge and a Content scroll child,
driven by ScrollUtil.InitScrollFrameWithScrollBar. The panels keep a
ScrollFrame because the engine measures its range from the shown frames
inside the content, which the hand-placed config rows rely on. The bar
follows OnScrollRangeChanged instead of an OnUpdate poll per panel.

A panel measures its range once its rows are built, and the search
results measure theirs with UpdateScrollChildRect instead of hiding,
re-attaching and scrolling a frame later. Clearing the search measures
again too.

CreateScrollFrame and CreateScrollChild have no users left, and nothing
called CreateTabFrame or CreateTabChild; all four are gone. pfQuest's
compat layer brings its own copies of the scroll helpers.
2026-10-30 00:51:16 -05:00
Brues 3987cfb8a0 Show loot history and the icon picker in ClassicAPI ScrollBoxes
pfUIScrollBoxListTemplate (api/ui-widgets.xml) is a WowScrollBoxList with
pfUIScrollBarTemplate beside it, 5px inside the frame, so a list's
backdrop goes on the frame itself. The addon list moves onto it and drops
the sibling backdrop frame.

Loot history builds a flat list of item rows and, under an expanded item,
player rows; the view sizes and indents them. The item frame array, the
player pool, the hand-placed rows and the scroll child re-attach are gone,
and the scroll position holds across roll updates.

The icon picker's FauxScrollFrame and 80 fixed buttons become a grid view
over the provider's icon indices. Picking an icon reinitializes the shown
buttons instead of redrawing the grid, and closing the popup drops the
grid's entries along with the provider.
2026-10-30 00:47:07 -05:00
Brues 796f20eadf Show chat copy and the share box in ClassicAPI's scrolling edit box
pfUIScrollingEditBoxTemplate (api/ui-widgets.xml) is ScrollingEditBoxTemplate
with pfUIScrollBarTemplate beside the text. Its mixin's SetFont gives the
box a font object of its own, since the edit box sets its font by object on
every SetText and pfUI fonts are paths. ui-widgets.lua now loads before the
XML, which needs the mixin.

The share box no longer recomputes its scroll child on every text change.

Chat copy reads each chat frame's messages with ClassicAPI's
GetMessageInfo when it opens, so the AddMessage hook, its 100-line copy of
the history and the skip of combat frames are gone. It shows every line
the frame keeps, lines from before login included. It puts the caret at
the end to scroll to the newest line instead of three OnUpdate passes, and
Escape now leaves copy mode on every chat frame.
2026-10-30 00:38:54 -05:00
Brues 26c55bddb0 Drive the rez icon from ClassicAPI's incoming resurrections
ClassicAPI's UnitHasIncomingResurrection sees every resurrection cast in
view from SMSG_SPELL_START and ends it with the cast, and
INCOMING_RESURRECT_CHANGED signals each change. libpredict's own
tracking goes: the ress tables and 60s timers, parsing Resurrection and
RES/RESNO messages, clearing on UNIT_HEALTH, and the rez branches of the
cast handlers, along with UNIT_SPELLCAST_STOP and the foreign cast
targets only rez used. libpredict still announces the player's own
resurrections to HealComm and CTRA for clients without ClassicAPI.

The native state ends with the cast, so a rez that landed would vanish
before the target accepts it. libpredict records the SPELL_RESURRECT
combat log event per GUID and keeps the offer until the target is alive
again or the 60s accept popup runs out, unlike Grid2, which cannot tell
a landed rez from a cancelled one. UnitHasResurrection answers both.

The unit frames show the icon in RefreshIndicators, refreshed by
INCOMING_RESURRECT_CHANGED on the frame's own unit and by libpredict for
offers, instead of polling libpredict every 0.1s.
2026-10-29 23:49:28 -05:00
Brues 8c22fdb850 Show the addon list in a ClassicAPI ScrollBox
The list built one row per addon in a ScrollFrame, hid the rows out of
view by hand and drove pfUI's own slider. A WowScrollBoxList keeps rows
only for the addons in view and recycles them while scrolling.

pfUIScrollBarTemplate (api/ui-widgets.xml) is a ScrollBarMixin bar with
the old slider's look: a thin track and a flat teal thumb that hides when
nothing scrolls. Its steppers exist for the mixin but stay hidden.

Rows read the addon's enabled state, so profiles enable and disable
addons directly instead of clicking every row's checkbox. A checkbox
now shows whether an addon is enabled; it showed whether it was loaded.
2026-10-29 23:04:47 -05:00
Brues 2d275c53fa Clear AFK on wake only while it is still set
/afk toggles. The overlay sent it on every click and key press, so when
the client or the server had already cleared AFK it set it again. Check
ClassicAPI's IsChatAFK first. It follows the client's /afk state at
once, where UnitIsAFK waits for the server's flag update.
2026-10-29 22:40:30 -05:00
Brues ba752056ad Stop the AFK camera when AFK clears while it spins
62e0d4eb stopped the camera only while the start delay was shown, but the
delay hides itself once the camera starts. AFK cleared during the spin
left the overlay up, and the next key press sent /afk and set AFK again.
Stop when the camera spins instead, which also keeps stop() and its
SetView(4) from running when AFK clears before the camera started.
2026-10-29 22:40:26 -05:00
Brues 1ccf87c61a Drop CreateGoldString's fallback for clients without coin icons
ClassicAPI always provides GetCoinTextureString, so the presence check
and the hand-built "g/s/c" string after it never ran.
2026-10-29 22:39:01 -05:00
Brues dc89f01dda Refresh the FPS & Lag panel tooltip while it is shown
The tooltip was built once on enter, so its memory, network and addon
figures stayed at the values from that moment. The widget's one-second
ticker now rebuilds it while the panel still owns GameTooltip. The
tooltip takes its owner as self, not this, so the ticker can call it.
2026-10-29 22:24:36 -05:00
Brues a917a70b1c Add an expand/collapse-all button to the Reputation tab
ClassicAPI 1.18's ExpandAllFactionHeaders and CollapseAllFactionHeaders
set every header in one call. The button sits on the "Faction" label's
row, in the headers' +/- column, and shows "+" while any header is
collapsed.
2026-10-29 22:24:36 -05:00
Brues 03ea3d5aa5 Clear cancelled resurrections announced over HealComm and CTRA
ParseChatMessage tested the raw message for "RessStop", which no
HealComm message is, so ParseComm's Resurrection/stop/ result was never
acted on. CTRA's RESNO was matched against the whole message, but it
carries the target's name, and the CTRA parser only recognised RES. A
cancelled rez from another player left the icon on the target's frame
until they were revived. RessStop still keeps a rez whose cast landed
and whose accept window is open.
2026-10-29 18:58:15 -05:00
Brues 2b4d33d46a Keep libpredict tracking casts when HealComm is loaded
With HealComm-1.0 present (HealComm, LunaUnitFrames, NotGrid), the
compat hook unregistered every event on libpredict.sender to stop pfUI
broadcasting a duplicate of the player's casts. Since cast detection
moved onto that frame's UNIT_SPELLCAST_* handlers, that also blinded
libpredict to every cast, so the player's own resurrections never put
the rez icon on the target's frame: ParseChatMessage drops the player's
own Resurrection echo, expecting the cast events to have tracked it.

The compat hook now only mutes the outgoing HealComm and CTRA messages.
The HealComm.SendAddonMessage hook that parsed the player's own messages
while solo goes too, since libpredict tracks its own casts directly.
2026-10-29 18:56:51 -05:00
Brues 94dcfb3dad Compute bar layout options instead of tabulating pfGridmath
pfGridmath listed every exact cols x rows grid per bar size; the only
live use was seeding the layout dropdown, which a divisor loop now does.

Everything else that read it was unreachable: every layout option is a
"cols x rows" string, so ResolveBarLayout's BarLayoutFormfactor lookup
never matched, and the actionbar module resets a stored layout that
isn't one before BarLayoutSize/BarButtonAnchor run, so their fallbacks
never fired. BarLayoutFormfactor and env/tables.lua go with it.
2026-10-29 14:16:43 -05:00
Brues 0890905eb6 Drop named-unit frames and the pfValidUnits global
CreateUnitFrame and CreateCastbar could take a character name instead of
a unit token, but every caller passes a token, so that mode and the
empty-label guards around it were dead. The OnClick TargetByName branch
could never run anyway: label was always a string, and "" is truthy.

With that gone, the aggro scan was the only reader of pfValidUnits, so
its unit list now lives in unitframes.lua and is built once at load.

/focusname resolves the name with UnitTokenFromName (exact first, then
prefix) instead of swapping the target and muting UIErrorsFrame.
2026-10-29 14:00:54 -05:00
Brues 6c76a88467 Draw unit frame bars with the native StatusBar
The custom bar sized its textures in Lua from GetWidth(), so it had to
track how ClassicAPI reports the UI scale (#71), and it stretched the bar
texture instead of cropping it. The engine's StatusBar does that layout
itself.

The background of the missing part is a second StatusBar that fills
from the other end (ClassicAPI's SetReverseFill), one frame level below
the fill, so the incoming-heal texture still draws between the two.
SetFrameLevel moves both, and the health and power bars now sit two
levels above their backdrops. SetStatusBarBackgroundTexture becomes
SetStatusBarBackgroundColor, as it only ever took a color.
2026-10-29 11:06:02 -05:00
Brues 35c32f365e Remove scaledsize fix 2026-10-29 10:38:28 -05:00
Brues 6dcb5162be bags: use ClassicAPI's native item search
C_Container.SetItemSearch drives the search box; slots dim from isFiltered on INVENTORY_SEARCH_UPDATE and on each slot update. Matches name, subclass, equip slot and equipment set names. Drops the tooltip-scanning full-text option.
2026-10-29 10:35:28 -05:00
Brues 8afafe71cf Drop RunMacroText fallback and dead actionbar spellslot branches
ClassicAPI 1.18 provides RunMacroText natively; bump CAPI min to 1.18.0. spellslot/booktype/scanmacro were only ever cleared, never set.
2026-10-29 10:35:28 -05:00
Brues 99ed538ee7 bump CAPI min to 1.17.10 2026-10-29 10:35:28 -05:00
Brues f382039f21 panel: show per-addon memory in FPS & Lag tooltip
Use UpdateAddOnMemoryUsage/GetAddOnMemoryUsage like Blizzard's MainMenuBar performance tooltip: total addon memory plus the top 3 consumers, formatted with the TOTAL_MEM/ADDON_MEM global strings. Guarded so the tooltip falls back gracefully on clients without these APIs.
2026-10-29 10:35:28 -05:00
Brues 8307dd757e Bump ClassicAPI minimum 1.17.4 2026-10-29 10:35:28 -05:00
Brues 5ab5337bbc Keep status bars true to their value on ClassicAPI 1.18.0
ClassicAPI 1.18.0 divides the UI scale out of an anchored frame's
GetWidth/GetHeight, as 4.3.4 does. The status bar still divided it out
itself, so under a UI scale below 1 the bar emptied early (at 29% health
on a 0.71 scale). Only divide on older ClassicAPI.

Fixes #71
2026-10-29 10:33:55 -05:00
Brues d15b1cd320 Only declare RunMacroText if it doesn't exist 2026-10-28 12:21:34 -05:00
0cabf2ec29 Add equipment manager auto-switching and "Unused" items panel (#70)
* Add equipment manager auto-switching and "Unused" items panel

Equipment manager (modules/equipmentmanager.lua):
- Add automatic set switching: ordered triggers (mounted, swimming,
  eating/drinking, shapeshift form/stance, zone, instance type, time
  of day, resting, stealthed, targeting a boss) equip a set; topmost
  matching trigger wins, with a 0.5s debounce
- Never swap gear in combat, while dead or casting; optionally restore
  the previous gear via a hidden "pfUI Auto-Restore" set
- Add an "Unused" side panel listing equippable items in bags, bank
  and paperdoll that no set uses, with an ignore list (tools and quest
  disguises pre-ignored), bank snapshot and bag highlighting
- Persist triggers, ignore list and bank snapshot in new per-character
  SavedVariable pfUI_eqmgr (all three .toc files)
- Add Character > Equipment Manager options (autoswitch, announce,
  minimum item quality, include bank) in gui.lua and config.lua
- Hide ignored-slot overlays when the manager frame is closed

Add frFR translations for the new equipment manager strings.

* equipmentmanager: lean on ClassicAPI for unused scan and autoswitch

- Unused panel: list items via GetInventoryItemsForSlot instead of
  hand-packing locations and walking the bags.
- Bank snapshot: record set membership while the bank is open.
  GetItemLocations reports bank items as missing once it closes, so set
  items in the bank were listed as unused.
- Autoswitch: check CanUseEquipmentSets and the UseEquipmentSet result
  before marking a trigger applied, and retry when the swap is blocked.
- Drive the engine from events (aura, form, zone, resting, target,
  regen) instead of a 4 Hz ticker; poll only swimming, time and eating.
- Detect eating/drinking by the localized names of the Food (433) and
  Drink (430) auras instead of hardcoded locale strings and icon paths.
- Drop presence guards on APIs that always exist; use strsplittable and
  strtrim for trigger values.

* equipmentmanager: wake the dining trigger on player health/mana events

Drop dining from the poll: listen to UNIT_HEALTH/UNIT_MANA for the player
while a dining trigger is enabled, so taking the set off once full is
event-driven. Register UNIT_AURA for the player only.

* equipmentmanager: split trigger values with strsplit

strsplittable needs ClassicAPI 1.17.11; strsplit has been there since
1.7.3, so this keeps the minimum where it is.

* equipmentmanager: let the trigger hint wrap

---------

Co-authored-by: Duciel <336374+Duciel@users.noreply.github.com>
Co-authored-by: Brues <5278969+brues-code@users.noreply.github.com>
2026-10-27 11:02:44 -05:00
Brues fe376b8e51 Keep buff timer text above the cooldown sweep 2026-10-25 20:32:49 -05:00
Brues e326cea05e Add radial sweeps to buff/debuff icon display 2026-10-25 20:26:45 -05:00
Brues d9e74b3bc5 Add per-frame reverse toggle for cooldown sweeps 2026-10-25 20:24:12 -05:00
Brues 0e428de74c Fix inactive nameplate alpha capped at 99%
CacheConfig clamped notargalpha to 0.99, so a 100% setting never reached full opacity. Clamp to 1.0 instead and detect the target plate by GUID comparison only, removing the alpha-based fallback that required the headroom.
2026-10-25 20:00:50 -05:00
139 changed files with 14614 additions and 4898 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ do
-- on. There pfUI does load, and will throw wherever it reaches for something -- 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 -- the installed DLL doesn't have yet -- the popup names the cause so those
-- errors aren't a mystery. -- errors aren't a mystery.
local PFUI_CLASSIC_API_MIN = 11703 -- (X*10000 + Y*100 + Z) local PFUI_CLASSIC_API_MIN = 11813 -- (X*10000 + Y*100 + Z)
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI" local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest" local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
+2
View File
@@ -37,6 +37,8 @@ Provides:
- Click-casting - Click-casting
- Loot Roll History (/loothistory) - Loot Roll History (/loothistory)
- New item highlighting - New item highlighting
- Loss of control alert - Stuns, fears, silences and school lockouts from C_LossOfControl
- Dressing room zoom, pan and per-slot undress (PlayerModel / DressUpModel methods)
- Plenty other functions - Plenty other functions
### [Nampower](https://github.com/brues-code/nampower) ### [Nampower](https://github.com/brues-code/nampower)
+67 -330
View File
@@ -1,5 +1,3 @@
pfUI.api = { }
-- load pfUI environment -- load pfUI environment
setfenv(1, pfUI:GetEnvironment()) setfenv(1, pfUI:GetEnvironment())
@@ -59,20 +57,6 @@ function pfUI.api.GetUnitDistance(unit1, unit2)
return nil return nil
end end
-- [ UnitInLineOfSight ]
-- Returns true if unit1 has line of sight to unit2
-- 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
end
-- [ UnitIsBehind ] -- [ UnitIsBehind ]
-- Returns true if unit1 is behind unit2 -- Returns true if unit1 is behind unit2
-- Requires UnitXP_SP3 -- Requires UnitXP_SP3
@@ -92,34 +76,11 @@ gfind = string.gmatch or string.gfind
mod = math.mod or mod mod = math.mod or mod
-- [ strsplit ] -- [ strsplit ]
-- Splits a string using a delimiter. Self-contained on purpose: it does NOT -- ClassicAPI's strsplit, taken from the ClassicAPI table, which no addon can
-- delegate to the global strsplit / string.split, because third-party addons -- overwrite. Third-party addons replace the global strsplit / string.split
-- clobber those (e.g. BigWigs' SpellRequests redefines string:split to return -- (e.g. BigWigs' SpellRequests makes string:split return a table), and bare
-- a table, which would make this return a single table instead of r,g,b,a and -- strsplit calls inside the pfUI environment resolve to this copy.
-- break color/version parsing depending on load order). Delimiter chars are pfUI.api.strsplit = ClassicAPI.strsplit
-- 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 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
-- [ isempty ]
-- Returns true if a table is empty or not existing, otherwise false.
-- 'tbl' [table] the table that shall be checked
-- return: [boolean] result of the check.
function pfUI.api.isempty(tbl)
return next(tbl or {}) == nil
end
-- [ checkversion ] -- [ checkversion ]
-- Compares a given version (major,minor,fix) and compares it to the current -- Compares a given version (major,minor,fix) and compares it to the current
@@ -143,8 +104,7 @@ function pfUI.api.checkversion(chkmajor, chkminor, chkfix)
end end
-- [ UnitInRange ] -- [ UnitInRange ]
-- Returns whether a party/raid member is nearby. -- Returns whether a party/raid member is nearby, by the configured range check.
-- It takes care of the rangecheck module if existing.
-- unit [string] A unit to query (string, unitID) -- unit [string] A unit to query (string, unitID)
-- return: [bool] "1" if in range otherwise "nil" -- return: [bool] "1" if in range otherwise "nil"
function pfUI.api.UnitInRange(unit) function pfUI.api.UnitInRange(unit)
@@ -159,40 +119,21 @@ function pfUI.api.UnitInRange(unit)
-- returned nil above, matching the pre-collapse behavior. -- returned nil above, matching the pre-collapse behavior.
if C.unitframes.rangecheck == "0" then return 1 end if C.unitframes.rangecheck == "0" then return 1 end
-- UnitXP precise mode: skip librange entirely, use direct distance check -- UnitXP precise mode: direct distance check against the configured range
if C.unitframes.rangecheck_mode == "unitxp" and _G.UnitXP then if C.unitframes.rangecheck_mode == "unitxp" and _G.UnitXP then
local threshold = tonumber(C.unitframes.rangecheck_distance) or 40 local threshold = tonumber(C.unitframes.rangecheck_distance) or 40
local success, distance = pcall(_G.UnitXP, "distanceBetween", "player", unit) local success, distance = pcall(_G.UnitXP, "distanceBetween", "player", unit)
if success and distance then if success and distance then
return distance <= threshold and 1 or nil return distance <= threshold and 1 or nil
end end
-- fallthrough to librange if UnitXP fails -- fallthrough to the 40y check if UnitXP fails
end end
if pfUI.api.librange then -- ClassicAPI's 40y check, _G-qualified since the bare name is this function
return pfUI.api.librange:UnitInSpellRange(unit) -- inside the pfUI environment. A unit it can't place (outside the client's
end -- sync range) counts as in range.
return nil local inRange, checked = _G.UnitInRange(unit)
end return (inRange or not checked) and 1 or nil
-- [ RunOOC ]
-- Runs a function once, as soon as the combat lockdown fades.
-- func [function] The function that shall run ooc.
-- return: [bool] true if the function was added,
-- nil if the function already exists in queue
local queue, frame = {}
function pfUI.api.RunOOC(func)
if not frame then
frame = CreateFrame("Frame")
frame:SetScript("OnUpdate", function()
for key, func in pairs(queue) do func(); queue[key] = nil end
end)
end
if not queue[tostring(func)] then
queue[tostring(func)] = func
return true
end
end end
-- [ UnitHasBuff ] -- [ UnitHasBuff ]
@@ -320,28 +261,6 @@ function pfUI.api.round(input, places)
end end
end end
-- [ clamp ]
-- Clamps a number between given range.
-- 'x' [number] the number that should be clamped.
-- 'min' [number] minimum value.
-- 'max' [number] maximum value.
-- returns: [number] clamped value: 'x', 'min' or 'max' value itself.
function pfUI.api.clamp(x, min, max)
if type(x) == "number" and type(min) == "number" and type(max) == "number" then
return x < min and min or x > max and max or x
else
return x
end
end
-- [ modf ]
-- Returns integral and fractional part of a number.
-- 'f' [float] the number to breakdown.
-- returns: [int],[float] whole and fractional part.
function pfUI.api.modf(f)
return math.modf(f)
end
-- [ GetServerEpoch ] -- [ GetServerEpoch ]
-- Returns a Unix epoch (seconds) representing the current server wall -- Returns a Unix epoch (seconds) representing the current server wall
-- clock, packed in the player's local timezone so that date(fmt, epoch) -- clock, packed in the player's local timezone so that date(fmt, epoch)
@@ -529,37 +448,32 @@ function pfUI.api.GetBagFamily(bag)
end end
-- [ Abbreviate ] -- [ Abbreviate ]
-- Abbreviates a number from 1234 to 1.23k -- Abbreviates a number from 1234 to 1.23k, as the unitframes.abbrevnum
-- setting asks: "0" full numbers, "1" 2 decimals (4250 -> 4.25k),
-- "2" 1 decimal rounded down (4250 -> 4.2k)
-- 'number' [number] the number that should be abbreviated -- 'number' [number] the number that should be abbreviated
-- 'returns: [string] the abbreviated value -- 'returns: [string] the abbreviated value
local function CreateAbbreviateFormatter(step, rounding)
local Down = Enum.NumericRuleFormatRounding.Down
local formatter = C_StringUtil.CreateNumericRuleFormatter()
formatter:SetBreakpoints({
{ threshold = 0, format = "%d", components = { { step = 1, rounding = Down } } },
{ threshold = 1000, format = "%gk", components = { { div = 1000, step = step, rounding = rounding } } },
{ threshold = 1000000, format = "%gm", components = { { div = 1000000, step = step, rounding = rounding } } },
})
return formatter
end
local abbreviateFormatters = {
["1"] = CreateAbbreviateFormatter(0.01, Enum.NumericRuleFormatRounding.Nearest),
["2"] = CreateAbbreviateFormatter(0.1, Enum.NumericRuleFormatRounding.Down),
}
function pfUI.api.Abbreviate(number) function pfUI.api.Abbreviate(number)
local mode = pfUI_config.unitframes.abbrevnum local formatter = abbreviateFormatters[pfUI_config.unitframes.abbrevnum]
-- mode "0" = disabled (full numbers) if not formatter then return math.floor(number) end
-- mode "1" = 2 decimals (4250 -> 4.25k) [legacy/default] if number < 0 then return "-" .. formatter:FormatNumber(-number) end
-- mode "2" = 1 decimal (4250 -> 4.2k) - always rounds DOWN return formatter:FormatNumber(number)
if mode == "1" or mode == "2" then
local sign = number < 0 and -1 or 1
number = math.abs(number)
if number > 1000000 then
if mode == "2" then
-- 1 decimal, round DOWN: 4.18m -> 4.1m
return (floor(number/100000) / 10 * sign) .. "m"
else
return pfUI.api.round(number/1000000*sign, 2) .. "m"
end
elseif number > 1000 then
if mode == "2" then
-- 1 decimal, round DOWN: 4180 -> 4.1k (not 4.2k)
return (floor(number/100) / 10 * sign) .. "k"
else
return pfUI.api.round(number/1000*sign, 2) .. "k"
end
end
end
return math.floor(number)
end end
-- [ SendChatMessageWide ] -- [ SendChatMessageWide ]
@@ -579,6 +493,14 @@ function pfUI.api.SendChatMessageWide(msg)
SendChatMessage(msg,channel) SendChatMessage(msg,channel)
end end
-- [ CopyText ]
-- Copies text to the clipboard and says so in the colour of a UI_INFO_MESSAGE
-- 'text' [string] the text to copy
function pfUI.api.CopyText(text)
CopyToClipboard(text)
UIErrorsFrame:AddMessage(T["Copied to clipboard"], 1, 1, 0, 1)
end
-- [ GroupInfoByName ] -- [ GroupInfoByName ]
-- Gets the unit id by name -- Gets the unit id by name
-- 'name' [string] party or raid member -- 'name' [string] party or raid member
@@ -643,75 +565,21 @@ function hooksecurefunc(tbl, name, func)
return _G.hooksecurefunc(tbl, name, func) return _G.hooksecurefunc(tbl, name, func)
end end
-- [ HookAddonOrVariable ] -- [ HookAddon ]
-- Sets a function to be called automatically once an addon gets loaded -- Runs a function once an addon has loaded, but never before PLAYER_LOGIN.
-- 'addon' [string] addon or variable name -- Module and skin bodies run inside pfUI's own ADDON_LOADED, so an addon that
-- is already loaded there would otherwise run its hook before later pfUI
-- modules exist and before the addon's own VARIABLES_LOADED setup. A
-- load-on-demand addon runs its hook on its ADDON_LOADED. Hooks for addons
-- that are not installed are dropped. Hooks on the same addon run in no
-- particular order.
-- 'addon' [string] addon name
-- 'func' [function] function that should run -- 'func' [function] function that should run
do function pfUI.api.HookAddon(addon, func)
local lurker if not C_AddOns.DoesAddOnExist(addon) then return end
local pending = {} EventUtil.ContinueOnPlayerLogin(function()
EventUtil.ContinueOnAddOnLoaded(addon, func)
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)
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 ]
-- Add functions to a FIFO queue for execution after a short delay.
-- '...' [vararg] function, [arguments]
local timer
function pfUI.api.QueueFunction(a1,a2,a3,a4,a5,a6,a7,a8,a9)
if not timer then
timer = CreateFrame("Frame")
timer.queue = {}
timer.interval = TOOLTIP_UPDATE_TIME
timer.DeQueue = function()
local item = table.remove(timer.queue,1)
if item then
item[1](item[2],item[3],item[4],item[5],item[6],item[7],item[8],item[9])
end
if table.getn(timer.queue) == 0 then
timer:Hide() -- no need to run the OnUpdate when the queue is empty
end
end
timer:SetScript("OnUpdate",function()
this.sinceLast = (this.sinceLast or 0) + arg1
while (this.sinceLast > this.interval) do
this.DeQueue()
this.sinceLast = this.sinceLast - this.interval
end
end)
end
table.insert(timer.queue,{a1,a2,a3,a4,a5,a6,a7,a8,a9})
timer:Show() -- start the OnUpdate
end end
-- [ Create Gold String ] -- [ Create Gold String ]
@@ -722,53 +590,16 @@ end
function pfUI.api.CreateGoldString(money) function pfUI.api.CreateGoldString(money)
if type(money) ~= "number" then return "-" end if type(money) ~= "number" then return "-" end
if _G.GetCoinTextureString then
return "|cffffffff" .. _G.GetCoinTextureString(money) .. "|r" return "|cffffffff" .. _G.GetCoinTextureString(money) .. "|r"
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
end end
-- [ Enable Movable ] -- [ Enable Movable ]
-- Set all necessary functions to make a already existing frame movable. -- Set all necessary functions to make a already existing frame movable.
-- 'name' [frame/string] Name of the Frame that should be movable -- 'name' [frame/string] Name of the Frame that should be movable
-- 'addon' [string] Addon that must be loaded before being able to access the frame
-- 'blacklist' [table] A list of frames that should be deactivated for mouse usage -- 'blacklist' [table] A list of frames that should be deactivated for mouse usage
local function OnDragStart() this:StartMoving() end local function OnDragStart() this:StartMoving() end
local function OnDragStop() this:StopMovingOrSizing() end local function OnDragStop() this:StopMovingOrSizing() end
function pfUI.api.EnableMovable(name, addon, blacklist) function pfUI.api.EnableMovable(name, blacklist)
if addon then
local scan = CreateFrame("Frame")
scan:RegisterEvent("ADDON_LOADED")
scan:SetScript("OnEvent", function()
if arg1 == addon then
local frame = _G[name]
if blacklist then
for _, disable in pairs(blacklist) do
_G[disable]:EnableMouse(false)
end
end
frame:SetMovable(true)
frame:EnableMouse(true)
frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", OnDragStart)
frame:SetScript("OnDragStop", OnDragStop)
this:UnregisterAllEvents()
end
end)
else
if blacklist then if blacklist then
for _, disable in pairs(blacklist) do for _, disable in pairs(blacklist) do
_G[disable]:EnableMouse(false) _G[disable]:EnableMouse(false)
@@ -782,7 +613,6 @@ function pfUI.api.EnableMovable(name, addon, blacklist)
frame:RegisterForDrag("LeftButton") frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", OnDragStart) frame:SetScript("OnDragStart", OnDragStart)
frame:SetScript("OnDragStop", OnDragStop) frame:SetScript("OnDragStop", OnDragStop)
end
end end
-- [ Copy Table ] -- [ Copy Table ]
@@ -1353,15 +1183,18 @@ end
-- [ Bar Layout Options ] -- -- [ Bar Layout Options ] --
-- 'barsize' size of bar in number of buttons -- '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) function pfUI.api.BarLayoutOptions(barsize)
assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutOptions: barsize "..tostring(barsize).." is invalid") assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutOptions: barsize "..tostring(barsize).." is invalid")
local options, seen = {}, {} local options, seen = {}, {}
local function add(option) local function add(option)
if not seen[option] then table.insert(options, option); seen[option] = true end if not seen[option] then table.insert(options, option); seen[option] = true end
end end
for i,layout in ipairs(pfGridmath[barsize]) do for cols = 1, barsize do
add(string.format("%d x %d",layout[1],layout[2])) if barsize % cols == 0 then
add(string.format("%d x %d", cols, barsize / cols))
end
end end
for _, option in ipairs({ 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", "1 x 12", "1 x 10", "2 x 10", "2 x 5", "3 x 10", "3 x 5", "3 x 3",
@@ -1381,31 +1214,10 @@ function pfUI.api.BarLayoutOptions(barsize)
return options return options
end end
-- [ Bar Layout Formfactor ] -- -- 'formfactor' has to be a "cols x rows" string; the actionbar module resets
-- 'option' string option as used in pfUI_config.bars[bar].option -- a stored layout that isn't one before it lays out a bar
-- 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
local function ResolveBarLayout(barsize, formfactor, uneven) local function ResolveBarLayout(barsize, formfactor, uneven)
local layout = tostring(formfactor or "") local _, _, a, b = string.find(formfactor, "(%d+)%s*x%s*(%d+)")
local _, _, a, b = string.find(layout, "(%d+)%s*x%s*(%d+)")
if a and b then
local cols, rows = tonumber(a), tonumber(b) local cols, rows = tonumber(a), tonumber(b)
cols = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, cols)) cols = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, cols))
rows = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, rows)) rows = math.min(NUM_ACTIONBAR_BUTTONS, math.max(1, rows))
@@ -1419,11 +1231,6 @@ local function ResolveBarLayout(barsize, formfactor, uneven)
cols = math.max(1, math.ceil(barsize / rows)) cols = math.max(1, math.ceil(barsize / rows))
end end
return cols, rows, mode, orientation return cols, rows, mode, orientation
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"
end end
-- [ Bar Layout Size ] -- -- [ Bar Layout Size ] --
@@ -1434,7 +1241,6 @@ end
function pfUI.api.BarLayoutSize(bar,barsize,formfactor,iconsize,bordersize,padding,uneven,fillmode) 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") assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarLayoutSize: barsize "..tostring(barsize).." is invalid")
local cols, rows = ResolveBarLayout(barsize, formfactor, uneven) 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 width = (iconsize + bordersize*2+padding) * cols + padding
local height = (iconsize + bordersize*2+padding) * rows + padding local height = (iconsize + bordersize*2+padding) * rows + padding
bar._size = {width,height} bar._size = {width,height}
@@ -1452,9 +1258,6 @@ end
function pfUI.api.BarButtonAnchor(button,basename,buttonindex,barsize,formfactor,iconsize,bordersize,padding,uneven,fillmode) 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") assert(barsize > 0 and barsize <= NUM_ACTIONBAR_BUTTONS,"BarButtonAnchor: barsize "..tostring(barsize).." is invalid")
local cols, rows, mode, orientation = ResolveBarLayout(barsize, formfactor, uneven) 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) -- fillmode: remap buttonindex to slotindex (grid position in native fill order)
-- only needed when fill direction differs from layout mode -- only needed when fill direction differs from layout mode
@@ -1615,72 +1418,6 @@ function pfUI.api.DisableAutohide(frame)
frame:SetAlpha(1) frame:SetAlpha(1)
end end
-- [ GetColoredTime ] --
-- 'remaining' the time in seconds that should be converted
-- return a colored string including a time unit (m/h/d)
local color_day, color_hour, color_minute, color_low, color_normal
function pfUI.api.GetColoredTimeString(remaining)
if not remaining then return "" end
-- Show days if remaining is > 99 Hours (99 * 60 * 60)
if remaining > 356400 then
if not color_day then
local r,g,b,a = pfUI.api.GetStringColor(C.appearance.cd.daycolor)
color_day = pfUI.api.rgbhex(r,g,b)
end
return color_day .. round(remaining / 86400) .. "|rd"
-- Show hours if remaining is > 99 Minutes (99 * 60)
elseif remaining > 5940 then
if not color_hour then
local r,g,b,a = pfUI.api.GetStringColor(C.appearance.cd.hourcolor)
color_hour = pfUI.api.rgbhex(r,g,b)
end
return color_hour .. round(remaining / 3600) .. "|rh"
-- Show minutes if remaining is > 99 Seconds (99)
elseif remaining > 99 then
if not color_minute then
local r,g,b,a = pfUI.api.GetStringColor(C.appearance.cd.minutecolor)
color_minute = pfUI.api.rgbhex(r,g,b)
end
return color_minute .. round(remaining / 60) .. "|rm"
-- Show milliseconds on low
elseif remaining <= 5 and pfUI_config.appearance.cd.milliseconds == "1" then
if not color_low then
local r,g,b,a = pfUI.api.GetStringColor(C.appearance.cd.lowcolor)
color_low = pfUI.api.rgbhex(r,g,b)
end
return color_low .. string.format("%.1f", round(remaining,1))
-- Show seconds on low
elseif remaining <= 5 then
if not color_low then
local r,g,b,a = pfUI.api.GetStringColor(C.appearance.cd.lowcolor)
color_low = pfUI.api.rgbhex(r,g,b)
end
return color_low .. round(remaining)
-- Show seconds on normal
elseif remaining >= 0 then
if not color_normal then
local r, g, b, a = pfUI.api.GetStringColor(C.appearance.cd.normalcolor)
color_normal = pfUI.api.rgbhex(r,g,b)
end
return color_normal .. round(remaining)
-- Return empty
else
return ""
end
end
-- [ GetColorGradient ] -- -- [ GetColorGradient ] --
-- 'perc' percentage (0-1) -- 'perc' percentage (0-1)
-- return r,g,b and hexcolor -- return r,g,b and hexcolor
+132 -52
View File
@@ -138,21 +138,50 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("appearance", "border", "panels", "-1") pfUI:UpdateConfig("appearance", "border", "panels", "-1")
pfUI:UpdateConfig("appearance", "border", "chat", "-1") pfUI:UpdateConfig("appearance", "border", "chat", "-1")
pfUI:UpdateConfig("appearance", "border", "bags", "-1") pfUI:UpdateConfig("appearance", "border", "bags", "-1")
pfUI:UpdateConfig("appearance", "cd", "lowcolor", "1,.2,.2,1")
pfUI:UpdateConfig("appearance", "cd", "normalcolor", "1,1,1,1") pfUI:UpdateConfig("cooldown", nil, "font", "Interface\\AddOns\\pfUI\\fonts\\BigNoodleTitling.ttf")
pfUI:UpdateConfig("appearance", "cd", "minutecolor", ".2,1,1,1") pfUI:UpdateConfig("cooldown", nil, "font_size", "12")
pfUI:UpdateConfig("appearance", "cd", "hourcolor", ".2,.5,1,1") pfUI:UpdateConfig("cooldown", nil, "dynamicsize", "1")
pfUI:UpdateConfig("appearance", "cd", "daycolor", ".2,.2,1,1") pfUI:UpdateConfig("cooldown", nil, "threshold", "2")
pfUI:UpdateConfig("appearance", "cd", "threshold", "2") pfUI:UpdateConfig("cooldown", nil, "milliseconds", "1")
pfUI:UpdateConfig("appearance", "cd", "font_size", "12") pfUI:UpdateConfig("cooldown", nil, "lowcolor", "1,.2,.2,1")
pfUI:UpdateConfig("appearance", "cd", "font_size_blizz", "12") pfUI:UpdateConfig("cooldown", nil, "normalcolor", "1,1,1,1")
pfUI:UpdateConfig("appearance", "cd", "font_size_foreign","12") pfUI:UpdateConfig("cooldown", nil, "minutecolor", ".2,1,1,1")
pfUI:UpdateConfig("appearance", "cd", "blizzard", "1") pfUI:UpdateConfig("cooldown", nil, "hourcolor", ".2,.5,1,1")
pfUI:UpdateConfig("appearance", "cd", "foreign", "0") pfUI:UpdateConfig("cooldown", nil, "daycolor", ".2,.2,1,1")
pfUI:UpdateConfig("appearance", "cd", "milliseconds", "1") pfUI:UpdateConfig("cooldown", "actionbar", "text", "1")
pfUI:UpdateConfig("appearance", "cd", "hideanim", "0") pfUI:UpdateConfig("cooldown", "actionbar", "animation", "1")
pfUI:UpdateConfig("appearance", "cd", "font", "Interface\\AddOns\\pfUI\\fonts\\BigNoodleTitling.ttf") pfUI:UpdateConfig("cooldown", "actionbar", "reverse", "0")
pfUI:UpdateConfig("appearance", "cd", "dynamicsize", "1") pfUI:UpdateConfig("cooldown", "bags", "text", "1")
pfUI:UpdateConfig("cooldown", "bags", "animation", "1")
pfUI:UpdateConfig("cooldown", "bags", "reverse", "0")
pfUI:UpdateConfig("cooldown", "blizzard", "text", "1")
pfUI:UpdateConfig("cooldown", "blizzard", "animation", "1")
pfUI:UpdateConfig("cooldown", "blizzard", "reverse", "0")
pfUI:UpdateConfig("cooldown", "unitframe", "text", "1")
pfUI:UpdateConfig("cooldown", "unitframe", "animation", "0")
pfUI:UpdateConfig("cooldown", "unitframe", "reverse", "1")
pfUI:UpdateConfig("cooldown", "indicator", "text", "1")
pfUI:UpdateConfig("cooldown", "indicator", "animation", "0")
pfUI:UpdateConfig("cooldown", "indicator", "reverse", "0")
pfUI:UpdateConfig("cooldown", "nameplate", "text", "1")
pfUI:UpdateConfig("cooldown", "nameplate", "animation", "0")
pfUI:UpdateConfig("cooldown", "nameplate", "reverse", "1")
pfUI:UpdateConfig("cooldown", "buff", "text", "1")
pfUI:UpdateConfig("cooldown", "buff", "animation", "1")
pfUI:UpdateConfig("cooldown", "buff", "reverse", "1")
pfUI:UpdateConfig("cooldown", "tooltip", "text", "1")
pfUI:UpdateConfig("cooldown", "tooltip", "animation", "0")
pfUI:UpdateConfig("cooldown", "tooltip", "reverse", "0")
pfUI:UpdateConfig("cooldown", "totem", "text", "1")
pfUI:UpdateConfig("cooldown", "totem", "animation", "1")
pfUI:UpdateConfig("cooldown", "totem", "reverse", "1")
pfUI:UpdateConfig("cooldown", "lossofcontrol", "text", "1")
pfUI:UpdateConfig("cooldown", "lossofcontrol", "animation", "1")
pfUI:UpdateConfig("cooldown", "lossofcontrol", "reverse", "0")
pfUI:UpdateConfig("cooldown", "foreign", "text", "0")
pfUI:UpdateConfig("cooldown", "foreign", "animation", "1")
pfUI:UpdateConfig("appearance", "castbar", "castbarcolor", ".7,.7,.9,.8") pfUI:UpdateConfig("appearance", "castbar", "castbarcolor", ".7,.7,.9,.8")
pfUI:UpdateConfig("appearance", "castbar", "channelcolor", ".9,.9,.7,.8") pfUI:UpdateConfig("appearance", "castbar", "channelcolor", ".9,.9,.7,.8")
pfUI:UpdateConfig("appearance", "castbar", "failcolor", "1,.2,.2,.8") pfUI:UpdateConfig("appearance", "castbar", "failcolor", "1,.2,.2,.8")
@@ -169,7 +198,6 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("appearance", "bags", "newitem_color", "1,1,1,1") pfUI:UpdateConfig("appearance", "bags", "newitem_color", "1,1,1,1")
pfUI:UpdateConfig("appearance", "bags", "borderlimit", "1") pfUI:UpdateConfig("appearance", "bags", "borderlimit", "1")
pfUI:UpdateConfig("appearance", "bags", "borderonlygear", "0") pfUI:UpdateConfig("appearance", "bags", "borderonlygear", "0")
pfUI:UpdateConfig("appearance", "bags", "fulltext", "1")
pfUI:UpdateConfig("appearance", "bags", "movable", "0") pfUI:UpdateConfig("appearance", "bags", "movable", "0")
pfUI:UpdateConfig("appearance", "bags", "abovechat", "0") pfUI:UpdateConfig("appearance", "bags", "abovechat", "0")
pfUI:UpdateConfig("appearance", "bags", "hidechat", "0") pfUI:UpdateConfig("appearance", "bags", "hidechat", "0")
@@ -220,9 +248,9 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("unitframes", nil, "ragecolor", "1,.5,.5,1") pfUI:UpdateConfig("unitframes", nil, "ragecolor", "1,.5,.5,1")
pfUI:UpdateConfig("unitframes", nil, "focuscolor", "1,1,.75,1") pfUI:UpdateConfig("unitframes", nil, "focuscolor", "1,1,.75,1")
pfUI:UpdateConfig("unitframes", nil, "animation_speed", "5") pfUI:UpdateConfig("unitframes", nil, "animatebars", "1")
pfUI:UpdateConfig("unitframes", nil, "portraitalpha", "0.1") pfUI:UpdateConfig("unitframes", nil, "portraitalpha", "0.1")
pfUI:UpdateConfig("unitframes", nil, "always2dportrait", "0") pfUI:UpdateConfig("unitframes", nil, "portraitstyle", "3d")
pfUI:UpdateConfig("unitframes", nil, "portraittexture", "1") pfUI:UpdateConfig("unitframes", nil, "portraittexture", "1")
pfUI:UpdateConfig("unitframes", nil, "layout", "default") pfUI:UpdateConfig("unitframes", nil, "layout", "default")
pfUI:UpdateConfig("unitframes", nil, "rangecheck", "0") pfUI:UpdateConfig("unitframes", nil, "rangecheck", "0")
@@ -251,6 +279,7 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("unitframes", nil, "swingtimerohcolor",".3,.8,.3,1") pfUI:UpdateConfig("unitframes", nil, "swingtimerohcolor",".3,.8,.3,1")
pfUI:UpdateConfig("unitframes", nil, "swingtimerrangedcolor",".3,.6,1,1") pfUI:UpdateConfig("unitframes", nil, "swingtimerrangedcolor",".3,.6,1,1")
pfUI:UpdateConfig("unitframes", nil, "swingtimerrangedwarncolor",".9,0,0,1") pfUI:UpdateConfig("unitframes", nil, "swingtimerrangedwarncolor",".9,0,0,1")
pfUI:UpdateConfig("unitframes", nil, "swingtimeroutrangecolor",".5,.5,.5,1")
pfUI:UpdateConfig("unitframes", nil, "swingtimerhsqueue","1") pfUI:UpdateConfig("unitframes", nil, "swingtimerhsqueue","1")
pfUI:UpdateConfig("unitframes", nil, "swingtimerattackspeed","0") pfUI:UpdateConfig("unitframes", nil, "swingtimerattackspeed","0")
pfUI:UpdateConfig("unitframes", nil, "raidmarkerwidth", "80") pfUI:UpdateConfig("unitframes", nil, "raidmarkerwidth", "80")
@@ -283,9 +312,11 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("unitframes", nil, "reactive_size", "28") pfUI:UpdateConfig("unitframes", nil, "reactive_size", "28")
pfUI:UpdateConfig("unitframes", nil, "damage_tracking", "0") pfUI:UpdateConfig("unitframes", nil, "damage_tracking", "0")
-- UnitXP Settings -- Target Indicators
pfUI:UpdateConfig("unitframes", nil, "unitxp_font_size", "13") pfUI:UpdateConfig("unitframes", nil, "indicator_font_size", "13")
pfUI:UpdateConfig("unitframes", nil, "los_indicator", "0") pfUI:UpdateConfig("unitframes", nil, "los_indicator", "0")
-- UnitXP Settings
pfUI:UpdateConfig("unitframes", nil, "behind_indicator", "0") pfUI:UpdateConfig("unitframes", nil, "behind_indicator", "0")
pfUI:UpdateConfig("unitframes", nil, "hide_distance_yd", "0") pfUI:UpdateConfig("unitframes", nil, "hide_distance_yd", "0")
pfUI:UpdateConfig("unitframes", nil, "unitxp_notify", "0") pfUI:UpdateConfig("unitframes", nil, "unitxp_notify", "0")
@@ -514,8 +545,6 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("unitframes", unit, "portraitwidth", "-1") pfUI:UpdateConfig("unitframes", unit, "portraitwidth", "-1")
pfUI:UpdateConfig("unitframes", unit, "panchor", "TOP") pfUI:UpdateConfig("unitframes", unit, "panchor", "TOP")
pfUI:UpdateConfig("unitframes", unit, "pspace", "-3") pfUI:UpdateConfig("unitframes", unit, "pspace", "-3")
pfUI:UpdateConfig("unitframes", unit, "cooldown_text", "1")
pfUI:UpdateConfig("unitframes", unit, "cooldown_anim", "0")
pfUI:UpdateConfig("unitframes", unit, "buffs", "TOPLEFT") pfUI:UpdateConfig("unitframes", unit, "buffs", "TOPLEFT")
pfUI:UpdateConfig("unitframes", unit, "buffsize", "20") pfUI:UpdateConfig("unitframes", unit, "buffsize", "20")
pfUI:UpdateConfig("unitframes", unit, "bufflimit", "32") pfUI:UpdateConfig("unitframes", unit, "bufflimit", "32")
@@ -546,7 +575,6 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("unitframes", unit, "show_procs", "0") pfUI:UpdateConfig("unitframes", unit, "show_procs", "0")
pfUI:UpdateConfig("unitframes", unit, "show_totems", "0") pfUI:UpdateConfig("unitframes", unit, "show_totems", "0")
pfUI:UpdateConfig("unitframes", unit, "all_procs", "0") pfUI:UpdateConfig("unitframes", unit, "all_procs", "0")
pfUI:UpdateConfig("unitframes", unit, "indicator_time", "1")
pfUI:UpdateConfig("unitframes", unit, "indicator_stacks", "1") pfUI:UpdateConfig("unitframes", unit, "indicator_stacks", "1")
pfUI:UpdateConfig("unitframes", unit, "indicator_size", "10") pfUI:UpdateConfig("unitframes", unit, "indicator_size", "10")
pfUI:UpdateConfig("unitframes", unit, "indicator_spacing","1") pfUI:UpdateConfig("unitframes", unit, "indicator_spacing","1")
@@ -681,7 +709,6 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("bars", nil, "count_color", ".2,1,.8,1") pfUI:UpdateConfig("bars", nil, "count_color", ".2,1,.8,1")
pfUI:UpdateConfig("bars", nil, "bind_size", "8") pfUI:UpdateConfig("bars", nil, "bind_size", "8")
pfUI:UpdateConfig("bars", nil, "bind_color", "1,1,0,1") pfUI:UpdateConfig("bars", nil, "bind_color", "1,1,0,1")
pfUI:UpdateConfig("bars", nil, "cd_size", "12")
pfUI:UpdateConfig("bars", "gryphons", "texture", "None") pfUI:UpdateConfig("bars", "gryphons", "texture", "None")
pfUI:UpdateConfig("bars", "gryphons", "color", ".6,.6,.6,1") pfUI:UpdateConfig("bars", "gryphons", "color", ".6,.6,.6,1")
@@ -820,6 +847,7 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("chat", "text", "timeformat", "%H:%M:%S") pfUI:UpdateConfig("chat", "text", "timeformat", "%H:%M:%S")
pfUI:UpdateConfig("chat", "text", "timebracket", "[]") pfUI:UpdateConfig("chat", "text", "timebracket", "[]")
pfUI:UpdateConfig("chat", "text", "timecolor", ".8,.8,.8,1") 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", "tintunknown", "1")
pfUI:UpdateConfig("chat", "text", "unknowncolor", ".7,.7,.7,1") pfUI:UpdateConfig("chat", "text", "unknowncolor", ".7,.7,.7,1")
pfUI:UpdateConfig("chat", "text", "channelnumonly", "1") pfUI:UpdateConfig("chat", "text", "channelnumonly", "1")
@@ -939,9 +967,6 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("nameplates", "debuffs", "blacklist", "") pfUI:UpdateConfig("nameplates", "debuffs", "blacklist", "")
pfUI:UpdateConfig("nameplates", "debuffs", "showstacks", "0") pfUI:UpdateConfig("nameplates", "debuffs", "showstacks", "0")
pfUI:UpdateConfig("nameplates", "debuffs", "position", "BOTTOM") pfUI:UpdateConfig("nameplates", "debuffs", "position", "BOTTOM")
pfUI:UpdateConfig("nameplates", nil, "debufftimers", "1")
pfUI:UpdateConfig("nameplates", nil, "debufftext", "1")
pfUI:UpdateConfig("nameplates", nil, "debuffanim", "0")
pfUI:UpdateConfig("abuttons", nil, "enable", "1") pfUI:UpdateConfig("abuttons", nil, "enable", "1")
pfUI:UpdateConfig("abuttons", nil, "position", "bottom") pfUI:UpdateConfig("abuttons", nil, "position", "bottom")
@@ -969,7 +994,12 @@ function pfUI:LoadConfig()
pfUI:UpdateConfig("character", "inventory", "durability", "1") pfUI:UpdateConfig("character", "inventory", "durability", "1")
pfUI:UpdateConfig("character", "inventory", "equipflyout", "0") 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("character", "reputation", "repRequired", "1")
pfUI:UpdateConfig("radar", nil, "range", "10")
pfUI:UpdateConfig("thirdparty", nil, "chatbg", "1") pfUI:UpdateConfig("thirdparty", nil, "chatbg", "1")
pfUI:UpdateConfig("thirdparty", nil, "showmeter", "0") pfUI:UpdateConfig("thirdparty", nil, "showmeter", "0")
pfUI:UpdateConfig("thirdparty", "dpsmate", "skin", "0") pfUI:UpdateConfig("thirdparty", "dpsmate", "skin", "0")
@@ -1131,25 +1161,6 @@ function pfUI:MigrateConfig()
end end
end end
-- migrating animation_speed (> 3.1.2)
if checkversion(3, 1, 2) then
if tonumber(pfUI_config.unitframes.animation_speed) >= 13 then
pfUI_config.unitframes.animation_speed = "13"
elseif tonumber(pfUI_config.unitframes.animation_speed) >= 8 then
pfUI_config.unitframes.animation_speed = "8"
elseif tonumber(pfUI_config.unitframes.animation_speed) >= 5 then
pfUI_config.unitframes.animation_speed = "5"
elseif tonumber(pfUI_config.unitframes.animation_speed) >= 3 then
pfUI_config.unitframes.animation_speed = "3"
elseif tonumber(pfUI_config.unitframes.animation_speed) >= 2 then
pfUI_config.unitframes.animation_speed = "2"
elseif tonumber(pfUI_config.unitframes.animation_speed) >= 1 then
pfUI_config.unitframes.animation_speed = "1"
else
pfUI_config.unitframes.animation_speed = "5"
end
end
-- migrating legacy buff/debuff naming (> 3.5.0) -- migrating legacy buff/debuff naming (> 3.5.0)
if checkversion(3, 5, 0) then if checkversion(3, 5, 0) then
local unitframes = { "player", "target", "focus", "group", "grouptarget", "grouppet", "raid", "ttarget", "pet", "ptarget", "fallback" } local unitframes = { "player", "target", "focus", "group", "grouptarget", "grouppet", "raid", "ttarget", "pet", "ptarget", "fallback" }
@@ -1355,7 +1366,7 @@ function pfUI:MigrateConfig()
-- migrate buff indicators into seperate options (> 4.6.2) -- migrate buff indicators into seperate options (> 4.6.2)
if checkversion(4, 6, 2) and pfUI_config.unitframes.show_hots then if checkversion(4, 6, 2) and pfUI_config.unitframes.show_hots then
local unitframes = { "player", "target", "focus", "group", "grouptarget", "grouppet", "raid", "ttarget", "pet", "ptarget", "fallback", "tttarget" } local unitframes = { "player", "target", "focus", "group", "grouptarget", "grouppet", "raid", "ttarget", "pet", "ptarget", "fallback", "tttarget" }
local options = { "show_hots", "all_hots", "show_procs", "show_totems", "all_procs", "indicator_time", "indicator_stacks", "indicator_size" } local options = { "show_hots", "all_hots", "show_procs", "show_totems", "all_procs", "indicator_stacks", "indicator_size" }
for _, unitframe in pairs(unitframes) do for _, unitframe in pairs(unitframes) do
for _, option in pairs(options) do for _, option in pairs(options) do
@@ -1402,11 +1413,6 @@ function pfUI:MigrateConfig()
end end
end end
-- migrate cooldown font from unit_font to separate setting
if checkversion(5, 4, 18) then
pfUI_config.appearance.cd.font = pfUI_config.global.font_unit
end
-- migrate combopoint size to separate settings -- migrate combopoint size to separate settings
if checkversion(5, 4, 18) then if checkversion(5, 4, 18) then
if pfUI_config.unitframes.combosize then if pfUI_config.unitframes.combosize then
@@ -1416,6 +1422,80 @@ function pfUI:MigrateConfig()
end end
end end
-- migrate "Always Use 2D Portraits" to the portrait style; keyed on the old
-- setting rather than the version, which dev installs stamp as 999.999.999
if pfUI_config.unitframes.always2dportrait then
if pfUI_config.unitframes.always2dportrait == "1" then
pfUI_config.unitframes.portraitstyle = "2d"
end
pfUI_config.unitframes.always2dportrait = nil
end
-- migrate the scattered cooldown settings into the cooldown table; keyed
-- on the old settings rather than the version, like the portrait style
local cooldown = pfUI_config.cooldown
local cd = pfUI_config.appearance.cd
if cd then
for _, entry in pairs({ "font", "font_size", "dynamicsize", "threshold", "milliseconds",
"lowcolor", "normalcolor", "minutecolor", "hourcolor", "daycolor" }) do
cooldown[entry] = cd[entry] or cooldown[entry]
end
cooldown.foreign.text = cd.foreign or cooldown.foreign.text
if cd.hideanim then
cooldown.foreign.animation = cd.hideanim == "1" and "0" or "1"
end
-- spellbook and character slots took the foreign sweep, and with the
-- Blizzard toggle off the foreign numbers too
cooldown.blizzard.animation = cooldown.foreign.animation
if cd.blizzard == "0" then
cooldown.blizzard.text = cooldown.foreign.text
end
-- pfUI drew its own numbers before; the native countdown shows them
-- only with this cvar on, which only the first-run setup sets
SetCVar("countdownForCooldowns", "1")
pfUI_config.appearance.cd = nil
end
local function move(config, old, kind, entry)
if config[old] then
cooldown[kind][entry] = config[old]
config[old] = nil
end
end
move(pfUI_config.bars, "cooldown_reverse", "actionbar", "reverse")
move(pfUI_config.appearance.bags, "cooldown_reverse", "bags", "reverse")
move(pfUI_config.buffs, "cooldown_anim", "buff", "animation")
move(pfUI_config.buffs, "cooldown_reverse", "buff", "reverse")
move(pfUI_config.totems, "cooldown_reverse", "totem", "reverse")
move(pfUI_config.nameplates, "debufftext", "nameplate", "text")
move(pfUI_config.nameplates, "debuffanim", "nameplate", "animation")
move(pfUI_config.nameplates, "debreverse", "nameplate", "reverse")
if pfUI_config.nameplates.debufftimers == "0" then
cooldown.nameplate.text, cooldown.nameplate.animation = "0", "0"
end
-- one setting now covers every unit frame: the target frame's auras and
-- the raid frames' indicators stand for the rest
move(pfUI_config.unitframes.target, "cooldown_text", "unitframe", "text")
move(pfUI_config.unitframes.target, "cooldown_anim", "unitframe", "animation")
move(pfUI_config.unitframes.target, "cooldown_reverse", "unitframe", "reverse")
move(pfUI_config.unitframes.raid, "indicator_time", "indicator", "text")
for _, unit in pairs(pfUI_config.unitframes) do
if type(unit) == "table" then
unit.cooldown_text, unit.cooldown_anim, unit.cooldown_reverse, unit.indicator_time = nil, nil, nil, nil
end
end
pfUI_config.nameplates.debufftimers = nil
pfUI_config.bars.cd_size = nil
-- Remove "Show only own debuffs" from unitframes and nameplates -- Remove "Show only own debuffs" from unitframes and nameplates
-- (feature was removed; only Target Debuff Bar in buffwatch keeps it) -- (feature was removed; only Target Debuff Bar in buffwatch keeps it)
if pfUI_config.nameplates then if pfUI_config.nameplates then
+194
View File
@@ -0,0 +1,194 @@
-- load pfUI environment
setfenv(1, pfUI:GetEnvironment())
-- Every pfUI cooldown is a Cooldown frame from CreateCooldown, made for one
-- kind of timer. Settings -> Cooldown (C.cooldown) sets for each kind its
-- countdown numbers, its sweep and the sweep's direction, and shares one font
-- and one formatter between them all. The numbers are the frame's own
-- countdown (ClassicAPI): the engine ticks them, gated by the
-- countdownForCooldowns cvar. Other addons' Cooldown frames take the
-- "foreign" settings as their timers start.
-- kinds that time spells or items: no numbers for the global cooldown
local spell = { actionbar = true, bags = true, blizzard = true, foreign = true }
-- every cooldown CreateCooldown made, for UpdateCooldowns
local cooldowns = {}
local function ColorCode(color)
local r, g, b = pfUI.api.GetStringColor(color)
return pfUI.api.rgbhex(r, g, b)
end
-- The formatter behind every pfUI time: the number in its unit's color,
-- rounded up, with a unit (m/h/d) once the unit below passes 99. Cooldown
-- frames share it instead of copying it, so new breakpoints reach every
-- countdown on its next update.
local formatter
local function UpdateFormatter()
local up = Enum.NumericRuleFormatRounding.Up
local tenths = C.cooldown.milliseconds == "1"
formatter:SetBreakpoints({
{ threshold = 0, step = tenths and .1 or 1, rounding = up, format = ColorCode(C.cooldown.lowcolor) .. (tenths and "%.1f" or "%d") .. "|r" },
{ threshold = 5, step = 1, rounding = up, format = ColorCode(C.cooldown.normalcolor) .. "%d|r" },
{ threshold = 99, format = ColorCode(C.cooldown.minutecolor) .. "%d|rm", components = { { div = 60, step = 1, rounding = up } } },
{ threshold = 5940, format = ColorCode(C.cooldown.hourcolor) .. "%d|rh", components = { { div = 3600, step = 1, rounding = up } } },
{ threshold = 356400, format = ColorCode(C.cooldown.daycolor) .. "%d|rd", components = { { div = 86400, step = 1, rounding = up } } },
})
end
local function GetFormatter()
if not formatter then
formatter = C_StringUtil.CreateNumericRuleFormatter()
UpdateFormatter()
end
return formatter
end
-- [ GetCooldownFontSize ] --
-- 'height' [number] the height of the frame the numbers sit on
-- return [number] the font size of cooldown numbers on that frame
function pfUI.api.GetCooldownFontSize(height)
local size = tonumber(C.cooldown.font_size)
if C.cooldown.dynamicsize == "1" and height > 0 then
size = math.max(height * .64, size)
end
return size
end
-- sizes the numbers to the cooldown's parent; the size follows its height,
-- so a timer start calls this again whenever that height changed
local function UpdateFont(cooldown)
local height = (cooldown:GetParent() or cooldown):GetHeight()
cooldown.pfCountdownHeight = height
cooldown:GetCountdownFontString():SetFont(pfUI.media[C.cooldown.font], pfUI.api.GetCooldownFontSize(height), "OUTLINE")
end
-- applies the settings of its kind to one of pfUI's cooldowns
local function SetupCooldown(cooldown)
local kind = cooldown.pfCooldownKind
local config = C.cooldown[kind]
local sweep = config.animation == "1" and not cooldown.pfTimeLeftOnly
cooldown:SetHideCountdownNumbers(config.text ~= "1")
cooldown:SetDrawSwipe(sweep)
cooldown:SetDrawBling(sweep)
cooldown:SetReverse(config.reverse == "1")
cooldown:SetMinimumCountdownDuration(spell[kind] and tonumber(C.cooldown.threshold) * 1000 or 0)
cooldown:SetCountdownFormatter(GetFormatter())
UpdateFont(cooldown)
end
-- applies the "foreign" settings to another addon's cooldown. They only take
-- the numbers or the sweep away, which the addon may have set up itself, so
-- turning one back on needs a reload.
local function SetupForeign(cooldown)
local config = C.cooldown.foreign
if config.animation ~= "1" then
cooldown:SetDrawSwipe(false)
cooldown:SetDrawBling(false)
end
-- omnicc's flag for cooldowns that want no numbers
if config.text ~= "1" or cooldown.noCooldownCount then
cooldown:SetHideCountdownNumbers(true)
return
end
cooldown:SetMinimumCountdownDuration(tonumber(C.cooldown.threshold) * 1000)
cooldown:SetCountdownFormatter(GetFormatter())
UpdateFont(cooldown)
end
-- runs as a pfUI cooldown's timer starts: a timer with a total brings back
-- the sweep a time-left-only one took away, and the font follows a changed
-- height
local function StartTimer(cooldown, timeleftOnly)
if cooldown.pfTimeLeftOnly ~= timeleftOnly then
cooldown.pfTimeLeftOnly = timeleftOnly
SetupCooldown(cooldown)
elseif cooldown:GetParent():GetHeight() ~= cooldown.pfCountdownHeight then
UpdateFont(cooldown)
end
end
-- every timer, pfUI's or another addon's, Cooldown frame or 1.12 indicator
-- Model, is started through CooldownFrame_SetTimer
hooksecurefunc("CooldownFrame_SetTimer", function(cooldown)
-- the Models have no numbers and keep the stock timer
if not cooldown:IsObjectType("Cooldown") then return end
if cooldown.pfCooldownKind then
StartTimer(cooldown, nil)
else
SetupForeign(cooldown)
end
end)
-- [ CreateCooldown ] --
-- Creates one of pfUI's cooldowns: a Cooldown frame over all of 'parent'
-- with the settings of its kind. Start it with CooldownFrame_SetTimer.
-- 'parent' [frame] the frame the cooldown covers
-- 'kind' [string] what it times, a group of C.cooldown: actionbar,
-- bags, blizzard, unitframe, indicator, nameplate,
-- buff, tooltip, totem or lossofcontrol
-- 'name' [string] optional frame name
-- return [frame] the Cooldown frame
function pfUI.api.CreateCooldown(parent, kind, name)
local cooldown = CreateFrame("Cooldown", name, parent, "CooldownFrameTemplate")
cooldown.pfCooldownKind = kind
table.insert(cooldowns, cooldown)
SetupCooldown(cooldown)
return cooldown
end
-- [ SetCooldownTimeLeft ] --
-- Starts a cooldown from its time left alone, for timers that report no
-- total (weapon enchants): the numbers show, the sweep stays off until a
-- timer with a total starts.
-- 'cooldown' [frame] a cooldown from CreateCooldown
-- 'timeleft' [number] the seconds left
function pfUI.api.SetCooldownTimeLeft(cooldown, timeleft)
StartTimer(cooldown, true)
cooldown:SetCooldown(GetTime(), timeleft)
end
-- [ UpdateCooldowns ] --
-- Applies changed cooldown settings to every pfUI cooldown.
function pfUI.api.UpdateCooldowns()
if formatter then UpdateFormatter() end
for _, cooldown in ipairs(cooldowns) do
SetupCooldown(cooldown)
end
end
-- [ GetAuraTimer ] --
-- The cooldown start and duration of an aura from C_UnitAuras, 0, 0 when it
-- has none. Talent-extended auras run past their Spell.dbc base duration, and
-- a start in the future would hold the timer until then, so the start is
-- capped to now.
-- 'duration' [number] the aura's duration
-- 'expirationTime' [number] the aura's expiration time
-- return [number] start, duration
function pfUI.api.GetAuraTimer(duration, expirationTime)
if expirationTime <= 0 then return 0, 0 end
local now = GetTime()
local start, dur = expirationTime - duration, duration
if start > now or dur <= 0 then
start, dur = now, expirationTime - now
end
if dur <= 0 then return 0, 0 end
return start, dur
end
-- [ GetColoredTimeString ] --
-- 'remaining' [number] the time in seconds that should be converted
-- return [string] the time as cooldown numbers show it
function pfUI.api.GetColoredTimeString(remaining)
return GetFormatter():FormatNumber(remaining)
end
+398 -754
View File
File diff suppressed because it is too large Load Diff
+153
View File
@@ -0,0 +1,153 @@
<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>
<!--
A ClassicAPI dropdown in pfUI's style: the selection as right-aligned text
and pfUI's arrow box at the right. Its menu takes pfUIMenuStyleMixin. Fill it
with dropdown:SetupMenu(function(dropdown, rootDescription) ... end), and call
dropdown:GenerateMenu() when the data behind the selection changes.
-->
<DropdownButton name="pfUIDropdownTemplate" mixin="pfUIDropdownMixin" virtual="true">
<Size y="20"/>
<KeyValues>
<KeyValue key="menuMixin" value="pfUIMenuStyleMixin" type="global"/>
<KeyValue key="menuPointY" value="-2" type="number"/>
</KeyValues>
<Frames>
<Frame parentKey="Arrow">
<Size x="16" y="16"/>
<Anchors>
<Anchor point="RIGHT" x="-2"/>
</Anchors>
<Layers>
<Layer level="ARTWORK">
<Texture parentKey="Icon">
<Anchors>
<Anchor point="TOPLEFT" x="3" y="-3"/>
<Anchor point="BOTTOMRIGHT" x="-3" y="3"/>
</Anchors>
</Texture>
</Layer>
</Layers>
</Frame>
</Frames>
<Layers>
<Layer level="OVERLAY">
<FontString parentKey="Text" inherits="GameFontWhite" wordwrap="false" justifyH="RIGHT">
<Anchors>
<Anchor point="LEFT" x="2"/>
<Anchor point="RIGHT" relativeKey="$parent.Arrow" relativePoint="LEFT" x="-4"/>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad method="OnLoad"/>
<OnShow method="OnShow"/>
<OnEnter method="OnEnter"/>
<OnLeave method="OnLeave"/>
</Scripts>
</DropdownButton>
</Ui>
+443 -280
View File
File diff suppressed because it is too large Load Diff
+677
View File
@@ -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",
}
+677
View File
@@ -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",
}
+677
View File
@@ -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",
}
+677
View File
@@ -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",
}
+677
View File
@@ -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 = "전체 문장으로 보기",
}
+677
View File
@@ -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 = "Использовать полный режим",
}
+677
View File
@@ -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 = "使用详细模式",
}
+16 -6
View File
@@ -1,11 +1,6 @@
pfUI_locale["deDE"] = {} pfUI_locale["deDE"] = {}
pfUI_locale["deDE"]["healduration"] = {
["Rejuvenation"] = "Erhöht die Dauer Eures Zaubers 'Verjüngung' um 3 Sek.",
["Renew"] = "Erhöht die Wirkungsdauer von 'Erneuerung' um 3 Sek.",
}
pfUI_locale["deDE"]["customcast"] = { pfUI_locale["deDE"]["customcast"] = {
["AIMEDSHOT"] = "Gezielter Schuss", ["AIMEDSHOT"] = "Gezielter Schuss",
["MULTISHOT"] = "Mehrfach-Schuss", ["MULTISHOT"] = "Mehrfach-Schuss",
@@ -30,4 +25,19 @@ pfUI_locale["deDE"]["resurrections"] = {
-- custom entries not detected by DBC extractor -- custom entries not detected by DBC extractor
-- Classic Era GlobalStrings (DE) that the loss of control alert
-- reads and the 1.12 client lacks.
pfUI_locale["deDE"]["lossofcontrol"] = {
LOSS_OF_CONTROL_DISPLAY_CHARM = "Betört",
LOSS_OF_CONTROL_DISPLAY_CONFUSE = "Verwirrt",
LOSS_OF_CONTROL_DISPLAY_DISARM = "Entwaffnet",
LOSS_OF_CONTROL_DISPLAY_FEAR = "Verängstigt",
LOSS_OF_CONTROL_DISPLAY_INTERRUPT_SCHOOL = "%s gesperrt",
LOSS_OF_CONTROL_DISPLAY_PACIFY = "Befriedet",
LOSS_OF_CONTROL_DISPLAY_PACIFYSILENCE = "Kampfunfähig",
LOSS_OF_CONTROL_DISPLAY_POSSESS = "Besessen",
LOSS_OF_CONTROL_DISPLAY_ROOT = "Bewegungsunfähig",
LOSS_OF_CONTROL_DISPLAY_SCHOOL_INTERRUPT = "Unterbrochen",
LOSS_OF_CONTROL_DISPLAY_SILENCE = "Stille",
LOSS_OF_CONTROL_DISPLAY_STUN = "Betäubt",
}
+16 -6
View File
@@ -1,11 +1,6 @@
pfUI_locale["enUS"] = {} pfUI_locale["enUS"] = {}
pfUI_locale["enUS"]["healduration"] = {
["Rejuvenation"] = "Increases the duration of your Rejuvenation spell by 3 sec.",
["Renew"] = "Increases the duration of your Renew spell by 3 sec.",
}
pfUI_locale["enUS"]["customcast"] = { pfUI_locale["enUS"]["customcast"] = {
["AIMEDSHOT"] = "Aimed Shot", ["AIMEDSHOT"] = "Aimed Shot",
["MULTISHOT"] = "Multi-Shot", ["MULTISHOT"] = "Multi-Shot",
@@ -30,4 +25,19 @@ pfUI_locale["enUS"]["resurrections"] = {
-- custom entries not detected by DBC extractor -- custom entries not detected by DBC extractor
-- Classic Era GlobalStrings (GB) that the loss of control alert
-- reads and the 1.12 client lacks.
pfUI_locale["enUS"]["lossofcontrol"] = {
LOSS_OF_CONTROL_DISPLAY_CHARM = "Charmed",
LOSS_OF_CONTROL_DISPLAY_CONFUSE = "Confused",
LOSS_OF_CONTROL_DISPLAY_DISARM = "Disarmed",
LOSS_OF_CONTROL_DISPLAY_FEAR = "Feared",
LOSS_OF_CONTROL_DISPLAY_INTERRUPT_SCHOOL = "%s Locked",
LOSS_OF_CONTROL_DISPLAY_PACIFY = "Pacified",
LOSS_OF_CONTROL_DISPLAY_PACIFYSILENCE = "Disabled",
LOSS_OF_CONTROL_DISPLAY_POSSESS = "Possessed",
LOSS_OF_CONTROL_DISPLAY_ROOT = "Rooted",
LOSS_OF_CONTROL_DISPLAY_SCHOOL_INTERRUPT = "Interrupted",
LOSS_OF_CONTROL_DISPLAY_SILENCE = "Silenced",
LOSS_OF_CONTROL_DISPLAY_STUN = "Stunned",
}
+16 -6
View File
@@ -1,11 +1,6 @@
pfUI_locale["esES"] = {} pfUI_locale["esES"] = {}
pfUI_locale["esES"]["healduration"] = {
["Rejuvenation"] = "Aumenta 3 s la duración de tu hechizo Rejuvenecimiento.",
["Renew"] = "Aumenta en 3 s la duración de tu hechizo Renovar.",
}
pfUI_locale["esES"]["customcast"] = { pfUI_locale["esES"]["customcast"] = {
["AIMEDSHOT"] = "Disparo de puntería", ["AIMEDSHOT"] = "Disparo de puntería",
["MULTISHOT"] = "Multidisparo", ["MULTISHOT"] = "Multidisparo",
@@ -30,4 +25,19 @@ pfUI_locale["esES"]["resurrections"] = {
-- custom entries not detected by DBC extractor -- custom entries not detected by DBC extractor
-- Classic Era GlobalStrings (ES) that the loss of control alert
-- reads and the 1.12 client lacks.
pfUI_locale["esES"]["lossofcontrol"] = {
LOSS_OF_CONTROL_DISPLAY_CHARM = "Embelesado",
LOSS_OF_CONTROL_DISPLAY_CONFUSE = "Confundido",
LOSS_OF_CONTROL_DISPLAY_DISARM = "Desarmado",
LOSS_OF_CONTROL_DISPLAY_FEAR = "Asustado",
LOSS_OF_CONTROL_DISPLAY_INTERRUPT_SCHOOL = "Bloqueo: %s",
LOSS_OF_CONTROL_DISPLAY_PACIFY = "Pacificado",
LOSS_OF_CONTROL_DISPLAY_PACIFYSILENCE = "Inutilizado",
LOSS_OF_CONTROL_DISPLAY_POSSESS = "Poseído",
LOSS_OF_CONTROL_DISPLAY_ROOT = "Enraizado",
LOSS_OF_CONTROL_DISPLAY_SCHOOL_INTERRUPT = "Interrumpido",
LOSS_OF_CONTROL_DISPLAY_SILENCE = "Silenciado",
LOSS_OF_CONTROL_DISPLAY_STUN = "Aturdido",
}
+16 -6
View File
@@ -1,11 +1,6 @@
pfUI_locale["frFR"] = {} pfUI_locale["frFR"] = {}
pfUI_locale["frFR"]["healduration"] = {
["Rejuvenation"] = "Augmente la durée de votre sort Récupération de 3 sec.",
["Renew"] = "Augmente la durée de votre sort Rénovation de 3 sec.",
}
pfUI_locale["frFR"]["customcast"] = { pfUI_locale["frFR"]["customcast"] = {
["AIMEDSHOT"] = "Visée", ["AIMEDSHOT"] = "Visée",
["MULTISHOT"] = "Flèches multiples", ["MULTISHOT"] = "Flèches multiples",
@@ -30,4 +25,19 @@ pfUI_locale["frFR"]["resurrections"] = {
-- custom entries not detected by DBC extractor -- custom entries not detected by DBC extractor
-- Classic Era GlobalStrings (FR) that the loss of control alert
-- reads and the 1.12 client lacks.
pfUI_locale["frFR"]["lossofcontrol"] = {
LOSS_OF_CONTROL_DISPLAY_CHARM = "Charme",
LOSS_OF_CONTROL_DISPLAY_CONFUSE = "Confusion",
LOSS_OF_CONTROL_DISPLAY_DISARM = "Désarmement",
LOSS_OF_CONTROL_DISPLAY_FEAR = "Peur",
LOSS_OF_CONTROL_DISPLAY_INTERRUPT_SCHOOL = "%s verrouillé",
LOSS_OF_CONTROL_DISPLAY_PACIFY = "Pacification",
LOSS_OF_CONTROL_DISPLAY_PACIFYSILENCE = "Neutralisation",
LOSS_OF_CONTROL_DISPLAY_POSSESS = "$gPossédé:Possédée;",
LOSS_OF_CONTROL_DISPLAY_ROOT = "Immobilisation",
LOSS_OF_CONTROL_DISPLAY_SCHOOL_INTERRUPT = "Interruption",
LOSS_OF_CONTROL_DISPLAY_SILENCE = "Silence",
LOSS_OF_CONTROL_DISPLAY_STUN = "Étourdissement",
}
+16 -6
View File
@@ -1,11 +1,6 @@
pfUI_locale["koKR"] = {} pfUI_locale["koKR"] = {}
pfUI_locale["koKR"]["healduration"] = {
["Rejuvenation"] = "회복의 지속시간이 3초만큼 증가합니다.",
["Renew"] = "소생의 지속시간이 3초만큼 증가합니다.",
}
pfUI_locale["koKR"]["customcast"] = { pfUI_locale["koKR"]["customcast"] = {
["AIMEDSHOT"] = "조준 사격", ["AIMEDSHOT"] = "조준 사격",
["MULTISHOT"] = "일제 사격", ["MULTISHOT"] = "일제 사격",
@@ -30,4 +25,19 @@ pfUI_locale["koKR"]["resurrections"] = {
-- custom entries not detected by DBC extractor -- custom entries not detected by DBC extractor
-- Classic Era GlobalStrings (KR) that the loss of control alert
-- reads and the 1.12 client lacks.
pfUI_locale["koKR"]["lossofcontrol"] = {
LOSS_OF_CONTROL_DISPLAY_CHARM = "현혹",
LOSS_OF_CONTROL_DISPLAY_CONFUSE = "혼란",
LOSS_OF_CONTROL_DISPLAY_DISARM = "무장 해제",
LOSS_OF_CONTROL_DISPLAY_FEAR = "공포",
LOSS_OF_CONTROL_DISPLAY_INTERRUPT_SCHOOL = "%s 계열 차단됨",
LOSS_OF_CONTROL_DISPLAY_PACIFY = "평정",
LOSS_OF_CONTROL_DISPLAY_PACIFYSILENCE = "무력화",
LOSS_OF_CONTROL_DISPLAY_POSSESS = "빙의",
LOSS_OF_CONTROL_DISPLAY_ROOT = "이동 불가",
LOSS_OF_CONTROL_DISPLAY_SCHOOL_INTERRUPT = "차단",
LOSS_OF_CONTROL_DISPLAY_SILENCE = "침묵",
LOSS_OF_CONTROL_DISPLAY_STUN = "기절",
}
+16 -6
View File
@@ -1,11 +1,6 @@
pfUI_locale["ruRU"] = {} pfUI_locale["ruRU"] = {}
pfUI_locale["ruRU"]["healduration"] = {
["Rejuvenation"] = "Увеличивает время действия \"Омоложения\" на 3 сек.",
["Renew"] = "Продлевает действие \"Обновления\" на 3 сек.",
}
pfUI_locale["ruRU"]["customcast"] = { pfUI_locale["ruRU"]["customcast"] = {
["AIMEDSHOT"] = "Прицельный выстрел", ["AIMEDSHOT"] = "Прицельный выстрел",
["MULTISHOT"] = "Залп", ["MULTISHOT"] = "Залп",
@@ -30,4 +25,19 @@ pfUI_locale["ruRU"]["resurrections"] = {
-- custom entries not detected by DBC extractor -- custom entries not detected by DBC extractor
-- Classic Era GlobalStrings (RU) that the loss of control alert
-- reads and the 1.12 client lacks.
pfUI_locale["ruRU"]["lossofcontrol"] = {
LOSS_OF_CONTROL_DISPLAY_CHARM = "Подчинение",
LOSS_OF_CONTROL_DISPLAY_CONFUSE = "Растерянный",
LOSS_OF_CONTROL_DISPLAY_DISARM = "Без оружия",
LOSS_OF_CONTROL_DISPLAY_FEAR = "Страх",
LOSS_OF_CONTROL_DISPLAY_INTERRUPT_SCHOOL = "%s: способности недоступны",
LOSS_OF_CONTROL_DISPLAY_PACIFY = "Покой",
LOSS_OF_CONTROL_DISPLAY_PACIFYSILENCE = "Отключено",
LOSS_OF_CONTROL_DISPLAY_POSSESS = "Подчинен",
LOSS_OF_CONTROL_DISPLAY_ROOT = "Обездвиженность",
LOSS_OF_CONTROL_DISPLAY_SCHOOL_INTERRUPT = "Прерывание",
LOSS_OF_CONTROL_DISPLAY_SILENCE = "Немота.",
LOSS_OF_CONTROL_DISPLAY_STUN = "Оглушение",
}
+16 -6
View File
@@ -1,11 +1,6 @@
pfUI_locale["zhCN"] = {} pfUI_locale["zhCN"] = {}
pfUI_locale["zhCN"]["healduration"] = {
["Rejuvenation"] = "使你的回春术的持续时间延长3秒。",
["Renew"] = "使你的恢复术的持续时间延长3秒。",
}
pfUI_locale["zhCN"]["customcast"] = { pfUI_locale["zhCN"]["customcast"] = {
["AIMEDSHOT"] = "瞄准射击", ["AIMEDSHOT"] = "瞄准射击",
["MULTISHOT"] = "多重射击", ["MULTISHOT"] = "多重射击",
@@ -30,4 +25,19 @@ pfUI_locale["zhCN"]["resurrections"] = {
-- custom entries not detected by DBC extractor -- custom entries not detected by DBC extractor
-- Classic Era GlobalStrings (CN) that the loss of control alert
-- reads and the 1.12 client lacks.
pfUI_locale["zhCN"]["lossofcontrol"] = {
LOSS_OF_CONTROL_DISPLAY_CHARM = "魅惑",
LOSS_OF_CONTROL_DISPLAY_CONFUSE = "迷惑",
LOSS_OF_CONTROL_DISPLAY_DISARM = "缴械",
LOSS_OF_CONTROL_DISPLAY_FEAR = "恐惧",
LOSS_OF_CONTROL_DISPLAY_INTERRUPT_SCHOOL = "%s系法术被锁定",
LOSS_OF_CONTROL_DISPLAY_PACIFY = "平静",
LOSS_OF_CONTROL_DISPLAY_PACIFYSILENCE = "禁用",
LOSS_OF_CONTROL_DISPLAY_POSSESS = "被占据",
LOSS_OF_CONTROL_DISPLAY_ROOT = "被定身",
LOSS_OF_CONTROL_DISPLAY_SCHOOL_INTERRUPT = "打断",
LOSS_OF_CONTROL_DISPLAY_SILENCE = "沉默",
LOSS_OF_CONTROL_DISPLAY_STUN = "昏迷",
}
+2 -2
View File
@@ -724,10 +724,10 @@ local light = {
["showicon"] = "1", ["showicon"] = "1",
}, },
}, },
["appearance"] = { ["cooldown"] = {
["cd"] = {
["font"] = "Interface\\AddOns\\pfUI\\fonts\\Myriad-Pro.ttf", ["font"] = "Interface\\AddOns\\pfUI\\fonts\\Myriad-Pro.ttf",
}, },
["appearance"] = {
["castbar"] = { ["castbar"] = {
["texture"] = "Interface\\AddOns\\pfUI\\img\\bar_gradient", ["texture"] = "Interface\\AddOns\\pfUI\\img\\bar_gradient",
}, },
-50
View File
@@ -1,50 +0,0 @@
-- 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
+28 -20
View File
@@ -1,4 +1,6 @@
pfUI_translation["deDE"] = { pfUI_translation["deDE"] = {
["2D"] = nil,
["3D"] = nil,
["3D World Unit Font"] = nil, ["3D World Unit Font"] = nil,
["Abbreviate Numbers (4200 -> 4.2k)"] = nil, ["Abbreviate Numbers (4200 -> 4.2k)"] = nil,
["Abbreviate Unit Names"] = nil, ["Abbreviate Unit Names"] = nil,
@@ -6,6 +8,7 @@ pfUI_translation["deDE"] = {
["Actionbar"] = nil, ["Actionbar"] = nil,
["Action Bar"] = nil, ["Action Bar"] = nil,
["Action Bar Border Size"] = nil, ["Action Bar Border Size"] = nil,
["Action Bars"] = nil,
["Active Addons"] = nil, ["Active Addons"] = nil,
["Add button to the frame"] = nil, ["Add button to the frame"] = nil,
["Added button"] = nil, ["Added button"] = nil,
@@ -27,11 +30,11 @@ pfUI_translation["deDE"] = {
["Always Show Item Comparison"] = nil, ["Always Show Item Comparison"] = nil,
["Always Show On Target Units"] = nil, ["Always Show On Target Units"] = nil,
["Always Show On Units With Missing HP"] = nil, ["Always Show On Units With Missing HP"] = nil,
["Always Use 2D Portraits"] = nil,
["Ammo Counter"] = nil, ["Ammo Counter"] = nil,
["Anchor Bags Above Chat"] = nil, ["Anchor Bags Above Chat"] = nil,
["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = nil, ["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = nil,
["A new version is available"] = nil, ["A new version is available"] = nil,
["Animate Health And Power Bars"] = nil,
["Appearance"] = nil, ["Appearance"] = nil,
["Ascending"] = nil, ["Ascending"] = nil,
["Author"] = nil, ["Author"] = nil,
@@ -78,7 +81,7 @@ pfUI_translation["deDE"] = {
["Buffbar Width"] = nil, ["Buffbar Width"] = nil,
["Buff/Debuff Icons"] = nil, ["Buff/Debuff Icons"] = nil,
["Buff/Debuff Indicators"] = nil, ["Buff/Debuff Indicators"] = nil,
["Buff Font Size"] = nil, ["Buff Indicators"] = nil,
["Buff Limit"] = nil, ["Buff Limit"] = nil,
["Buff Position"] = nil, ["Buff Position"] = nil,
["Buffs"] = nil, ["Buffs"] = nil,
@@ -120,9 +123,13 @@ pfUI_translation["deDE"] = {
["Chat Bubble Transparency"] = nil, ["Chat Bubble Transparency"] = nil,
["Chat Default Brackets"] = nil, ["Chat Default Brackets"] = nil,
["Class"] = nil, ["Class"] = nil,
["Class Icon (Round)"] = nil,
["Class Icon (Square)"] = nil,
["Clear Rolls"] = nil, ["Clear Rolls"] = nil,
["Click Action"] = nil, ["Click Action"] = nil,
["Click Casting"] = nil, ["Click Casting"] = nil,
["Click to undress"] = nil,
["Undress"] = nil,
["Clock"] = nil, ["Clock"] = nil,
["Close"] = nil, ["Close"] = nil,
["Collapse Empty Slots"] = nil, ["Collapse Empty Slots"] = nil,
@@ -145,21 +152,16 @@ pfUI_translation["deDE"] = {
["Configuration"] = nil, ["Configuration"] = nil,
["Configure"] = nil, ["Configure"] = nil,
["Cooldown"] = nil, ["Cooldown"] = nil,
["Cooldown Color (5 Seconds Or Less)"] = nil,
["Cooldown Color (Days)"] = nil, ["Cooldown Color (Days)"] = nil,
["Cooldown Color (Hours)"] = nil, ["Cooldown Color (Hours)"] = nil,
["Cooldown Color (Less than 3 Sec)"] = nil,
["Cooldown Color (Minutes)"] = nil, ["Cooldown Color (Minutes)"] = nil,
["Cooldown Color (Seconds)"] = nil, ["Cooldown Color (Seconds)"] = nil,
["Cooldown / Durations"] = nil, ["Cooldown / Durations"] = nil,
["Cooldown Text Font"] = nil,
["Cooldown Text Font Size"] = nil,
["Cooldown Text Font Size (Blizzard Frames)"] = nil,
["Cooldown Text Font Size (Foreign Frames)"] = nil,
["Cooldown Text Size"] = nil,
["Cooldown Text Threshold"] = nil, ["Cooldown Text Threshold"] = nil,
["Cooldown Text Time Threshold"] = nil,
["Coordinates Location"] = nil, ["Coordinates Location"] = nil,
["Coordinates On Minimap"] = nil, ["Coordinates On Minimap"] = nil,
["Copied to clipboard"] = nil,
["Count"] = nil, ["Count"] = nil,
["Create Profile"] = nil, ["Create Profile"] = nil,
["Ctrl-Click"] = nil, ["Ctrl-Click"] = nil,
@@ -276,12 +278,9 @@ pfUI_translation["deDE"] = {
["Enable Custom Incoming Whispers Layout"] = nil, ["Enable Custom Incoming Whispers Layout"] = nil,
["Enable Debuff Display"] = nil, ["Enable Debuff Display"] = nil,
["Enable Debuffs"] = nil, ["Enable Debuffs"] = nil,
["Enable Durations On Blizzard Frames"] = nil,
["Enable Durations On Foreign Frames"] = nil,
["Enable Energy Ticks"] = nil, ["Enable Energy Ticks"] = nil,
["Enable Extended Guild Information"] = nil, ["Enable Extended Guild Information"] = nil,
["Enable Frame Shadow"] = nil, ["Enable Frame Shadow"] = nil,
["Enable Full-Text Search"] = nil,
["Enable Indicators"] = nil, ["Enable Indicators"] = nil,
["Enable Item Quality Color For Equipment Only"] = nil, ["Enable Item Quality Color For Equipment Only"] = nil,
["Enable \"Loot & Spam\" Chat Window"] = nil, ["Enable \"Loot & Spam\" Chat Window"] = nil,
@@ -336,6 +335,7 @@ pfUI_translation["deDE"] = {
["Font"] = nil, ["Font"] = nil,
["Font Options"] = nil, ["Font Options"] = nil,
["Font Padding"] = nil, ["Font Padding"] = nil,
["Font Size"] = nil,
["Font Style"] = nil, ["Font Style"] = nil,
["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil, ["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil,
["fps"] = nil, ["fps"] = nil,
@@ -370,7 +370,6 @@ pfUI_translation["deDE"] = {
["Health"] = nil, ["Health"] = nil,
["Health - Auto"] = nil, ["Health - Auto"] = nil,
["Healthbar"] = nil, ["Healthbar"] = nil,
["Healthbar Animation Speed"] = nil,
["Health Bar Color"] = nil, ["Health Bar Color"] = nil,
["Healthbar Embedded"] = nil, ["Healthbar Embedded"] = nil,
["Healthbar Height"] = nil, ["Healthbar Height"] = nil,
@@ -395,7 +394,6 @@ pfUI_translation["deDE"] = {
["Hide Channel Names"] = nil, ["Hide Channel Names"] = nil,
["Hide Chat When Bags Are Opened"] = nil, ["Hide Chat When Bags Are Opened"] = nil,
["Hide Combat Log"] = nil, ["Hide Combat Log"] = nil,
["Hide Foreign Cooldown Animations"] = nil,
["Hide Group Frames While In Raid"] = nil, ["Hide Group Frames While In Raid"] = nil,
["Hide Healthbar On Critters"] = nil, ["Hide Healthbar On Critters"] = nil,
["Hide Healthbar On Enemy NPCs"] = nil, ["Hide Healthbar On Enemy NPCs"] = nil,
@@ -404,6 +402,7 @@ pfUI_translation["deDE"] = {
["Hide Healthbar On Friendly Players"] = nil, ["Hide Healthbar On Friendly Players"] = nil,
["Hide Healthbar On Neutral NPCs"] = nil, ["Hide Healthbar On Neutral NPCs"] = nil,
["Hide Healthbar On Totems"] = nil, ["Hide Healthbar On Totems"] = nil,
["Hide Numbers On Spell Cooldowns Up To (Seconds)"] = nil,
["Hide Timeout"] = nil, ["Hide Timeout"] = nil,
["Hide When Entering Combat"] = nil, ["Hide When Entering Combat"] = nil,
["Highlight Equipped Items"] = nil, ["Highlight Equipped Items"] = nil,
@@ -432,7 +431,6 @@ pfUI_translation["deDE"] = {
["Inherit Default Colors"] = nil, ["Inherit Default Colors"] = nil,
["Inputbox Height"] = nil, ["Inputbox Height"] = nil,
["Inputbox Width"] = nil, ["Inputbox Width"] = nil,
["Instant"] = nil,
["Integrations"] = nil, ["Integrations"] = nil,
["Invert Health Bar"] = nil, ["Invert Health Bar"] = nil,
["is not allowed in profile name"] = nil, ["is not allowed in profile name"] = nil,
@@ -477,6 +475,7 @@ pfUI_translation["deDE"] = {
["Look & Feel"] = nil, ["Look & Feel"] = nil,
["Loot"] = nil, ["Loot"] = nil,
["Loot & Spam"] = nil, ["Loot & Spam"] = nil,
["Loss Of Control"] = nil,
["Macro Text Color"] = nil, ["Macro Text Color"] = nil,
["Macro Text Size"] = nil, ["Macro Text Size"] = nil,
["Main Actionbar"] = nil, ["Main Actionbar"] = nil,
@@ -516,6 +515,7 @@ pfUI_translation["deDE"] = {
["Name | Health Missing"] = nil, ["Name | Health Missing"] = nil,
["Name (Linebreak) -Health Missing"] = nil, ["Name (Linebreak) -Health Missing"] = nil,
["Nameplate Border Size"] = nil, ["Nameplate Border Size"] = nil,
["Nameplate Debuffs"] = nil,
["Nameplates"] = nil, ["Nameplates"] = nil,
["Nameplate Width"] = nil, ["Nameplate Width"] = nil,
["Name (Short)"] = nil, ["Name (Short)"] = nil,
@@ -554,6 +554,7 @@ pfUI_translation["deDE"] = {
["On State Change"] = nil, ["On State Change"] = nil,
["Options"] = nil, ["Options"] = nil,
["Orientation"] = nil, ["Orientation"] = nil,
["Other Addons"] = nil,
["Other Panel: Minimap"] = nil, ["Other Panel: Minimap"] = nil,
["Outline"] = nil, ["Outline"] = nil,
["Outlines"] = nil, ["Outlines"] = nil,
@@ -582,6 +583,7 @@ pfUI_translation["deDE"] = {
["Pixel"] = nil, ["Pixel"] = nil,
["Player"] = nil, ["Player"] = nil,
["Player Buff Bar"] = nil, ["Player Buff Bar"] = nil,
["Player Buffs"] = nil,
["Player Castbar"] = nil, ["Player Castbar"] = nil,
["Player Debuff Bar"] = nil, ["Player Debuff Bar"] = nil,
["Player SP/Haste Display"] = nil, ["Player SP/Haste Display"] = nil,
@@ -592,6 +594,7 @@ pfUI_translation["deDE"] = {
["Portrait Alpha"] = nil, ["Portrait Alpha"] = nil,
["Portrait Height"] = nil, ["Portrait Height"] = nil,
["Portrait Position"] = nil, ["Portrait Position"] = nil,
["Portrait Style"] = nil,
["Portrait Width"] = nil, ["Portrait Width"] = nil,
["Powerbar"] = nil, ["Powerbar"] = nil,
["Power Bar Anchor"] = nil, ["Power Bar Anchor"] = nil,
@@ -647,6 +650,7 @@ pfUI_translation["deDE"] = {
["Resting"] = nil, ["Resting"] = nil,
["Reveal Unexplored Areas"] = nil, ["Reveal Unexplored Areas"] = nil,
["Switch to current zone"] = "Zur aktuellen Zone wechseln", ["Switch to current zone"] = "Zur aktuellen Zone wechseln",
["Reverse Sweep On"] = nil,
["Right"] = nil, ["Right"] = nil,
["Right Actionbar"] = nil, ["Right Actionbar"] = nil,
["Right Anchor"] = nil, ["Right Anchor"] = nil,
@@ -668,6 +672,7 @@ pfUI_translation["deDE"] = {
["Save & Reload"] = nil, ["Save & Reload"] = nil,
["Scale"] = nil, ["Scale"] = nil,
["Scale Border On HiDPI Displays"] = nil, ["Scale Border On HiDPI Displays"] = nil,
["Scale Font Size With Icon"] = nil,
["Scaling"] = nil, ["Scaling"] = nil,
["Screen Edge Glow Intensity"] = nil, ["Screen Edge Glow Intensity"] = nil,
["Screen Resolution"] = nil, ["Screen Resolution"] = nil,
@@ -727,7 +732,7 @@ pfUI_translation["deDE"] = {
["Show Loot Icon"] = nil, ["Show Loot Icon"] = nil,
["Show Macro Text"] = nil, ["Show Macro Text"] = nil,
["Show Meters By Default"] = nil, ["Show Meters By Default"] = nil,
["Show Milliseconds When Timer Runs Out"] = nil, ["Show Numbers On"] = nil,
["Show On Friendly Units"] = nil, ["Show On Friendly Units"] = nil,
["Show On Hostile Units"] = nil, ["Show On Hostile Units"] = nil,
["Show Procs Indicators"] = nil, ["Show Procs Indicators"] = nil,
@@ -745,10 +750,10 @@ pfUI_translation["deDE"] = {
["Show Spell Icon"] = nil, ["Show Spell Icon"] = nil,
["Show Spell Name"] = nil, ["Show Spell Name"] = nil,
["Show Stacks"] = nil, ["Show Stacks"] = nil,
["Show Sweep On"] = nil,
["Show Tenths Below 5 Seconds"] = nil,
["Show Text"] = nil, ["Show Text"] = nil,
["Show Time Left"] = nil,
["Show Timer"] = nil, ["Show Timer"] = nil,
["Show Timer Animation"] = nil,
["Show Timer Text"] = nil, ["Show Timer Text"] = nil,
["Show Totems Indicators"] = nil, ["Show Totems Indicators"] = nil,
["Shrink & Return"] = nil, ["Shrink & Return"] = nil,
@@ -765,8 +770,10 @@ pfUI_translation["deDE"] = {
["Soulshards"] = nil, ["Soulshards"] = nil,
["Spacing"] = nil, ["Spacing"] = nil,
["Special Recipient"] = nil, ["Special Recipient"] = nil,
["Spellbook And Character"] = nil,
["Spell Power Color"] = nil, ["Spell Power Color"] = nil,
["Square"] = nil, ["Square"] = nil,
["Stack Count Font Size"] = nil,
["Stance Bar 1"] = nil, ["Stance Bar 1"] = nil,
["Stance Bar 2"] = nil, ["Stance Bar 2"] = nil,
["Stance Bar 3"] = nil, ["Stance Bar 3"] = nil,
@@ -801,7 +808,6 @@ pfUI_translation["deDE"] = {
["Thistle Tea"] = nil, ["Thistle Tea"] = nil,
["Threshold To Trust Health Estimation"] = nil, ["Threshold To Trust Health Estimation"] = nil,
["Time"] = nil, ["Time"] = nil,
["Timer"] = nil,
["Time Remaining"] = nil, ["Time Remaining"] = nil,
["Timer In Minutes"] = nil, ["Timer In Minutes"] = nil,
["Timestamp Brackets"] = nil, ["Timestamp Brackets"] = nil,
@@ -812,6 +818,7 @@ pfUI_translation["deDE"] = {
["Tiny (PixelPerfect)"] = nil, ["Tiny (PixelPerfect)"] = nil,
["Toggle as Tank"] = nil, ["Toggle as Tank"] = nil,
["Tooltip"] = nil, ["Tooltip"] = nil,
["Tooltip Auras"] = nil,
["Tooltip Position"] = nil, ["Tooltip Position"] = nil,
["Tooltip Text Font"] = nil, ["Tooltip Text Font"] = nil,
["Tooltip Text Font Size"] = nil, ["Tooltip Text Font Size"] = nil,
@@ -823,11 +830,13 @@ pfUI_translation["deDE"] = {
["Total Gold"] = nil, ["Total Gold"] = nil,
["Totem Direction"] = nil, ["Totem Direction"] = nil,
["Totem Icons"] = nil, ["Totem Icons"] = nil,
["Totems"] = nil,
["Tracked Reputation"] = nil, ["Tracked Reputation"] = nil,
["Tracking Icon Size"] = nil, ["Tracking Icon Size"] = nil,
["Trigger Actions On Key Down"] = nil, ["Trigger Actions On Key Down"] = nil,
["UI-Scale"] = nil, ["UI-Scale"] = nil,
["Unbuffed"] = nil, ["Unbuffed"] = nil,
["Unit Frame Auras"] = nil,
["Unit Frame Border Size"] = nil, ["Unit Frame Border Size"] = nil,
["Unit Frame Layout"] = nil, ["Unit Frame Layout"] = nil,
["Unit Frames"] = nil, ["Unit Frames"] = nil,
@@ -854,7 +863,6 @@ pfUI_translation["deDE"] = {
["Use Custom Color Power Bar Background"] = nil, ["Use Custom Color Power Bar Background"] = nil,
["Use Custom Font Settings"] = nil, ["Use Custom Font Settings"] = nil,
["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil, ["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil,
["Use Dynamic Font Size"] = nil,
["Use Item Rarity Color For Loot-Roll Timer"] = nil, ["Use Item Rarity Color For Loot-Roll Timer"] = nil,
["Use Original Game Fonts"] = nil, ["Use Original Game Fonts"] = nil,
["Use Raid Frames To Display Group Members"] = nil, ["Use Raid Frames To Display Group Members"] = nil,
+28 -20
View File
@@ -1,4 +1,6 @@
pfUI_translation["enUS"] = { pfUI_translation["enUS"] = {
["2D"] = nil,
["3D"] = nil,
["3D World Unit Font"] = nil, ["3D World Unit Font"] = nil,
["Abbreviate Numbers (4200 -> 4.2k)"] = nil, ["Abbreviate Numbers (4200 -> 4.2k)"] = nil,
["Abbreviate Unit Names"] = nil, ["Abbreviate Unit Names"] = nil,
@@ -6,6 +8,7 @@ pfUI_translation["enUS"] = {
["Actionbar"] = nil, ["Actionbar"] = nil,
["Action Bar"] = nil, ["Action Bar"] = nil,
["Action Bar Border Size"] = nil, ["Action Bar Border Size"] = nil,
["Action Bars"] = nil,
["Active Addons"] = nil, ["Active Addons"] = nil,
["Add button to the frame"] = nil, ["Add button to the frame"] = nil,
["Added button"] = nil, ["Added button"] = nil,
@@ -28,11 +31,11 @@ pfUI_translation["enUS"] = {
["Always Show Item Comparison"] = nil, ["Always Show Item Comparison"] = nil,
["Always Show On Target Units"] = nil, ["Always Show On Target Units"] = nil,
["Always Show On Units With Missing HP"] = nil, ["Always Show On Units With Missing HP"] = nil,
["Always Use 2D Portraits"] = nil,
["Ammo Counter"] = nil, ["Ammo Counter"] = nil,
["Anchor Bags Above Chat"] = nil, ["Anchor Bags Above Chat"] = nil,
["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = nil, ["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = nil,
["A new version is available"] = nil, ["A new version is available"] = nil,
["Animate Health And Power Bars"] = nil,
["Appearance"] = nil, ["Appearance"] = nil,
["Ascending"] = nil, ["Ascending"] = nil,
["Author"] = nil, ["Author"] = nil,
@@ -81,7 +84,7 @@ pfUI_translation["enUS"] = {
["Buffbar Width"] = nil, ["Buffbar Width"] = nil,
["Buff/Debuff Icons"] = nil, ["Buff/Debuff Icons"] = nil,
["Buff/Debuff Indicators"] = nil, ["Buff/Debuff Indicators"] = nil,
["Buff Font Size"] = nil, ["Buff Indicators"] = nil,
["Buff Limit"] = nil, ["Buff Limit"] = nil,
["Buff Position"] = nil, ["Buff Position"] = nil,
["Buffs"] = nil, ["Buffs"] = nil,
@@ -125,10 +128,14 @@ pfUI_translation["enUS"] = {
["Chat Bubble Transparency"] = nil, ["Chat Bubble Transparency"] = nil,
["Chat Default Brackets"] = nil, ["Chat Default Brackets"] = nil,
["Class"] = nil, ["Class"] = nil,
["Class Icon (Round)"] = nil,
["Class Icon (Square)"] = nil,
["Clear"] = nil, ["Clear"] = nil,
["Clear Rolls"] = nil, ["Clear Rolls"] = nil,
["Click Action"] = nil, ["Click Action"] = nil,
["Click Casting"] = nil, ["Click Casting"] = nil,
["Click to undress"] = nil,
["Undress"] = nil,
["Clock"] = nil, ["Clock"] = nil,
["Close"] = nil, ["Close"] = nil,
["Collapse Empty Slots"] = nil, ["Collapse Empty Slots"] = nil,
@@ -151,21 +158,16 @@ pfUI_translation["enUS"] = {
["Configuration"] = nil, ["Configuration"] = nil,
["Configure"] = nil, ["Configure"] = nil,
["Cooldown"] = nil, ["Cooldown"] = nil,
["Cooldown Color (5 Seconds Or Less)"] = nil,
["Cooldown Color (Days)"] = nil, ["Cooldown Color (Days)"] = nil,
["Cooldown Color (Hours)"] = nil, ["Cooldown Color (Hours)"] = nil,
["Cooldown Color (Less than 3 Sec)"] = nil,
["Cooldown Color (Minutes)"] = nil, ["Cooldown Color (Minutes)"] = nil,
["Cooldown Color (Seconds)"] = nil, ["Cooldown Color (Seconds)"] = nil,
["Cooldown / Durations"] = nil, ["Cooldown / Durations"] = nil,
["Cooldown Text Font"] = nil,
["Cooldown Text Font Size"] = nil,
["Cooldown Text Font Size (Blizzard Frames)"] = nil,
["Cooldown Text Font Size (Foreign Frames)"] = nil,
["Cooldown Text Size"] = nil,
["Cooldown Text Threshold"] = nil, ["Cooldown Text Threshold"] = nil,
["Cooldown Text Time Threshold"] = nil,
["Coordinates Location"] = nil, ["Coordinates Location"] = nil,
["Coordinates On Minimap"] = nil, ["Coordinates On Minimap"] = nil,
["Copied to clipboard"] = nil,
["Count"] = nil, ["Count"] = nil,
["Create Profile"] = nil, ["Create Profile"] = nil,
["Ctrl-Click"] = nil, ["Ctrl-Click"] = nil,
@@ -285,12 +287,9 @@ pfUI_translation["enUS"] = {
["Enable Custom Incoming Whispers Layout"] = nil, ["Enable Custom Incoming Whispers Layout"] = nil,
["Enable Debuff Display"] = nil, ["Enable Debuff Display"] = nil,
["Enable Debuffs"] = nil, ["Enable Debuffs"] = nil,
["Enable Durations On Blizzard Frames"] = nil,
["Enable Durations On Foreign Frames"] = nil,
["Enable Energy Ticks"] = nil, ["Enable Energy Ticks"] = nil,
["Enable Extended Guild Information"] = nil, ["Enable Extended Guild Information"] = nil,
["Enable Frame Shadow"] = nil, ["Enable Frame Shadow"] = nil,
["Enable Full-Text Search"] = nil,
["Enable Indicators"] = nil, ["Enable Indicators"] = nil,
["Enable Item Quality Color For Equipment Only"] = nil, ["Enable Item Quality Color For Equipment Only"] = nil,
["Enable \"Loot & Spam\" Chat Window"] = nil, ["Enable \"Loot & Spam\" Chat Window"] = nil,
@@ -346,6 +345,7 @@ pfUI_translation["enUS"] = {
["Font"] = nil, ["Font"] = nil,
["Font Options"] = nil, ["Font Options"] = nil,
["Font Padding"] = nil, ["Font Padding"] = nil,
["Font Size"] = nil,
["Font Style"] = nil, ["Font Style"] = nil,
["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil, ["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil,
["fps"] = nil, ["fps"] = nil,
@@ -380,7 +380,6 @@ pfUI_translation["enUS"] = {
["Health"] = nil, ["Health"] = nil,
["Health - Auto"] = nil, ["Health - Auto"] = nil,
["Healthbar"] = nil, ["Healthbar"] = nil,
["Healthbar Animation Speed"] = nil,
["Health Bar Color"] = nil, ["Health Bar Color"] = nil,
["Healthbar Embedded"] = nil, ["Healthbar Embedded"] = nil,
["Healthbar Height"] = nil, ["Healthbar Height"] = nil,
@@ -405,7 +404,6 @@ pfUI_translation["enUS"] = {
["Hide Channel Names"] = nil, ["Hide Channel Names"] = nil,
["Hide Chat When Bags Are Opened"] = nil, ["Hide Chat When Bags Are Opened"] = nil,
["Hide Combat Log"] = nil, ["Hide Combat Log"] = nil,
["Hide Foreign Cooldown Animations"] = nil,
["Hide Group Frames While In Raid"] = nil, ["Hide Group Frames While In Raid"] = nil,
["Hide Healthbar On Critters"] = nil, ["Hide Healthbar On Critters"] = nil,
["Hide Healthbar On Enemy NPCs"] = nil, ["Hide Healthbar On Enemy NPCs"] = nil,
@@ -414,6 +412,7 @@ pfUI_translation["enUS"] = {
["Hide Healthbar On Friendly Players"] = nil, ["Hide Healthbar On Friendly Players"] = nil,
["Hide Healthbar On Neutral NPCs"] = nil, ["Hide Healthbar On Neutral NPCs"] = nil,
["Hide Healthbar On Totems"] = nil, ["Hide Healthbar On Totems"] = nil,
["Hide Numbers On Spell Cooldowns Up To (Seconds)"] = nil,
["Hide Timeout"] = nil, ["Hide Timeout"] = nil,
["Hide When Entering Combat"] = nil, ["Hide When Entering Combat"] = nil,
["Highlight Equipped Items"] = nil, ["Highlight Equipped Items"] = nil,
@@ -443,7 +442,6 @@ pfUI_translation["enUS"] = {
["Inherit Default Colors"] = nil, ["Inherit Default Colors"] = nil,
["Inputbox Height"] = nil, ["Inputbox Height"] = nil,
["Inputbox Width"] = nil, ["Inputbox Width"] = nil,
["Instant"] = nil,
["Integrations"] = nil, ["Integrations"] = nil,
["Invert Health Bar"] = nil, ["Invert Health Bar"] = nil,
["is not allowed in profile name"] = nil, ["is not allowed in profile name"] = nil,
@@ -489,6 +487,7 @@ pfUI_translation["enUS"] = {
["Loot"] = nil, ["Loot"] = nil,
["Loot & Spam"] = nil, ["Loot & Spam"] = nil,
["Loot History"] = nil, ["Loot History"] = nil,
["Loss Of Control"] = nil,
["Macro Text Color"] = nil, ["Macro Text Color"] = nil,
["Macro Text Size"] = nil, ["Macro Text Size"] = nil,
["Main Actionbar"] = nil, ["Main Actionbar"] = nil,
@@ -529,6 +528,7 @@ pfUI_translation["enUS"] = {
["Name | Health Missing"] = nil, ["Name | Health Missing"] = nil,
["Name (Linebreak) -Health Missing"] = nil, ["Name (Linebreak) -Health Missing"] = nil,
["Nameplate Border Size"] = nil, ["Nameplate Border Size"] = nil,
["Nameplate Debuffs"] = nil,
["Nameplates"] = nil, ["Nameplates"] = nil,
["Nameplate Width"] = nil, ["Nameplate Width"] = nil,
["Name (Short)"] = nil, ["Name (Short)"] = nil,
@@ -570,6 +570,7 @@ pfUI_translation["enUS"] = {
["Optional Dependencies"] = nil, ["Optional Dependencies"] = nil,
["Options"] = nil, ["Options"] = nil,
["Orientation"] = nil, ["Orientation"] = nil,
["Other Addons"] = nil,
["Other Panel: Minimap"] = nil, ["Other Panel: Minimap"] = nil,
["Outline"] = nil, ["Outline"] = nil,
["Outlines"] = nil, ["Outlines"] = nil,
@@ -600,6 +601,7 @@ pfUI_translation["enUS"] = {
["Pixel"] = nil, ["Pixel"] = nil,
["Player"] = nil, ["Player"] = nil,
["Player Buff Bar"] = nil, ["Player Buff Bar"] = nil,
["Player Buffs"] = nil,
["Player Castbar"] = nil, ["Player Castbar"] = nil,
["Player Debuff Bar"] = nil, ["Player Debuff Bar"] = nil,
["Player SP/Haste Display"] = nil, ["Player SP/Haste Display"] = nil,
@@ -610,6 +612,7 @@ pfUI_translation["enUS"] = {
["Portrait Alpha"] = nil, ["Portrait Alpha"] = nil,
["Portrait Height"] = nil, ["Portrait Height"] = nil,
["Portrait Position"] = nil, ["Portrait Position"] = nil,
["Portrait Style"] = nil,
["Portrait Width"] = nil, ["Portrait Width"] = nil,
["Powerbar"] = nil, ["Powerbar"] = nil,
["Power Bar Anchor"] = nil, ["Power Bar Anchor"] = nil,
@@ -666,6 +669,7 @@ pfUI_translation["enUS"] = {
["Reveal Unexplored Areas"] = nil, ["Reveal Unexplored Areas"] = nil,
["Switch to current zone"] = nil, ["Switch to current zone"] = nil,
["Retrieving item information..."] = nil, ["Retrieving item information..."] = nil,
["Reverse Sweep On"] = nil,
["Right"] = nil, ["Right"] = nil,
["Right Actionbar"] = nil, ["Right Actionbar"] = nil,
["Right Anchor"] = nil, ["Right Anchor"] = nil,
@@ -687,6 +691,7 @@ pfUI_translation["enUS"] = {
["Save & Reload"] = nil, ["Save & Reload"] = nil,
["Scale"] = nil, ["Scale"] = nil,
["Scale Border On HiDPI Displays"] = nil, ["Scale Border On HiDPI Displays"] = nil,
["Scale Font Size With Icon"] = nil,
["Scaling"] = nil, ["Scaling"] = nil,
["Screen Edge Glow Intensity"] = nil, ["Screen Edge Glow Intensity"] = nil,
["Screen Resolution"] = nil, ["Screen Resolution"] = nil,
@@ -746,7 +751,7 @@ pfUI_translation["enUS"] = {
["Show Loot Icon"] = nil, ["Show Loot Icon"] = nil,
["Show Macro Text"] = nil, ["Show Macro Text"] = nil,
["Show Meters By Default"] = nil, ["Show Meters By Default"] = nil,
["Show Milliseconds When Timer Runs Out"] = nil, ["Show Numbers On"] = nil,
["Show On Friendly Units"] = nil, ["Show On Friendly Units"] = nil,
["Show On Hostile Units"] = nil, ["Show On Hostile Units"] = nil,
["Show Procs Indicators"] = nil, ["Show Procs Indicators"] = nil,
@@ -764,10 +769,10 @@ pfUI_translation["enUS"] = {
["Show Spell Icon"] = nil, ["Show Spell Icon"] = nil,
["Show Spell Name"] = nil, ["Show Spell Name"] = nil,
["Show Stacks"] = nil, ["Show Stacks"] = nil,
["Show Sweep On"] = nil,
["Show Tenths Below 5 Seconds"] = nil,
["Show Text"] = nil, ["Show Text"] = nil,
["Show Time Left"] = nil,
["Show Timer"] = nil, ["Show Timer"] = nil,
["Show Timer Animation"] = nil,
["Show Timer Text"] = nil, ["Show Timer Text"] = nil,
["Show Totems Indicators"] = nil, ["Show Totems Indicators"] = nil,
["Shrink & Return"] = nil, ["Shrink & Return"] = nil,
@@ -789,8 +794,10 @@ pfUI_translation["enUS"] = {
["Soulshards"] = nil, ["Soulshards"] = nil,
["Spacing"] = nil, ["Spacing"] = nil,
["Special Recipient"] = nil, ["Special Recipient"] = nil,
["Spellbook And Character"] = nil,
["Spell Power Color"] = nil, ["Spell Power Color"] = nil,
["Square"] = nil, ["Square"] = nil,
["Stack Count Font Size"] = nil,
["Stance Bar 1"] = nil, ["Stance Bar 1"] = nil,
["Stance Bar 2"] = nil, ["Stance Bar 2"] = nil,
["Stance Bar 3"] = nil, ["Stance Bar 3"] = nil,
@@ -826,7 +833,6 @@ pfUI_translation["enUS"] = {
["Thistle Tea"] = nil, ["Thistle Tea"] = nil,
["Threshold To Trust Health Estimation"] = nil, ["Threshold To Trust Health Estimation"] = nil,
["Time"] = nil, ["Time"] = nil,
["Timer"] = nil,
["Timer Alignment"] = nil, ["Timer Alignment"] = nil,
["Timer X Offset"] = nil, ["Timer X Offset"] = nil,
["Timer Y Offset"] = nil, ["Timer Y Offset"] = nil,
@@ -840,6 +846,7 @@ pfUI_translation["enUS"] = {
["Tiny (PixelPerfect)"] = nil, ["Tiny (PixelPerfect)"] = nil,
["Toggle as Tank"] = nil, ["Toggle as Tank"] = nil,
["Tooltip"] = nil, ["Tooltip"] = nil,
["Tooltip Auras"] = nil,
["Tooltip Position"] = nil, ["Tooltip Position"] = nil,
["Tooltip Text Font"] = nil, ["Tooltip Text Font"] = nil,
["Tooltip Text Font Size"] = nil, ["Tooltip Text Font Size"] = nil,
@@ -851,11 +858,13 @@ pfUI_translation["enUS"] = {
["Total Gold"] = nil, ["Total Gold"] = nil,
["Totem Direction"] = nil, ["Totem Direction"] = nil,
["Totem Icons"] = nil, ["Totem Icons"] = nil,
["Totems"] = nil,
["Tracked Reputation"] = nil, ["Tracked Reputation"] = nil,
["Tracking Icon Size"] = nil, ["Tracking Icon Size"] = nil,
["Trigger Actions On Key Down"] = nil, ["Trigger Actions On Key Down"] = nil,
["UI-Scale"] = nil, ["UI-Scale"] = nil,
["Unbuffed"] = nil, ["Unbuffed"] = nil,
["Unit Frame Auras"] = nil,
["Unit Frame Border Size"] = nil, ["Unit Frame Border Size"] = nil,
["Unit Frame Layout"] = nil, ["Unit Frame Layout"] = nil,
["Unit Frames"] = nil, ["Unit Frames"] = nil,
@@ -882,7 +891,6 @@ pfUI_translation["enUS"] = {
["Use Custom Color Power Bar Background"] = nil, ["Use Custom Color Power Bar Background"] = nil,
["Use Custom Font Settings"] = nil, ["Use Custom Font Settings"] = nil,
["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil, ["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil,
["Use Dynamic Font Size"] = nil,
["Use Item Rarity Color For Loot-Roll Timer"] = nil, ["Use Item Rarity Color For Loot-Roll Timer"] = nil,
["Use Original Game Fonts"] = nil, ["Use Original Game Fonts"] = nil,
["Use Raid Frames To Display Group Members"] = nil, ["Use Raid Frames To Display Group Members"] = nil,
+28 -20
View File
@@ -1,4 +1,6 @@
pfUI_translation["esES"] = { pfUI_translation["esES"] = {
["2D"] = nil,
["3D"] = nil,
["3D World Unit Font"] = nil, ["3D World Unit Font"] = nil,
["Abbreviate Numbers (4200 -> 4.2k)"] = "Abreviar números (4200 -> 4.2k)", ["Abbreviate Numbers (4200 -> 4.2k)"] = "Abreviar números (4200 -> 4.2k)",
["Abbreviate Unit Names"] = nil, ["Abbreviate Unit Names"] = nil,
@@ -6,6 +8,7 @@ pfUI_translation["esES"] = {
["Actionbar"] = "Barra de acción", ["Actionbar"] = "Barra de acción",
["Action Bar"] = "Barra de acción", ["Action Bar"] = "Barra de acción",
["Action Bar Border Size"] = "Tamaño del borde de la barra de acción", ["Action Bar Border Size"] = "Tamaño del borde de la barra de acción",
["Action Bars"] = nil,
["Active Addons"] = "Accesorios activos", ["Active Addons"] = "Accesorios activos",
["Add button to the frame"] = "Añadir botón al marco", ["Add button to the frame"] = "Añadir botón al marco",
["Added button"] = "Botón añadido", ["Added button"] = "Botón añadido",
@@ -27,11 +30,11 @@ pfUI_translation["esES"] = {
["Always Show Item Comparison"] = "Mostrar siempre la comparativa entre objetos", ["Always Show Item Comparison"] = "Mostrar siempre la comparativa entre objetos",
["Always Show On Target Units"] = "Mostrar siempre en el objectivo", ["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 On Units With Missing HP"] = "Mostrar siempre en unidades con falta de salud",
["Always Use 2D Portraits"] = "Usar siempre retratos 2D",
["Ammo Counter"] = "Contador de munición", ["Ammo Counter"] = "Contador de munición",
["Anchor Bags Above Chat"] = nil, ["Anchor Bags Above Chat"] = nil,
["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "Una nueva instalación de |cff33ffccpf|rUI viene con 4 perfiles de diseño preconfigurados. Haga clic debajo si deseas cargar uno de estos perfiles.", ["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "Una nueva instalación de |cff33ffccpf|rUI viene con 4 perfiles de diseño preconfigurados. Haga clic debajo si deseas cargar uno de estos perfiles.",
["A new version is available"] = "Una nueva versión está disponible", ["A new version is available"] = "Una nueva versión está disponible",
["Animate Health And Power Bars"] = nil,
["Appearance"] = "Apariencia", ["Appearance"] = "Apariencia",
["Ascending"] = "Ascendiendo", ["Ascending"] = "Ascendiendo",
["Author"] = "Autor", ["Author"] = "Autor",
@@ -78,7 +81,7 @@ pfUI_translation["esES"] = {
["Buffbar Width"] = "Ancho de la barra de beneficios", ["Buffbar Width"] = "Ancho de la barra de beneficios",
["Buff/Debuff Icons"] = "Iconos de los beneficios/perjuicios", ["Buff/Debuff Icons"] = "Iconos de los beneficios/perjuicios",
["Buff/Debuff Indicators"] = "Indicadores de beneficios/perjuicios", ["Buff/Debuff Indicators"] = "Indicadores de beneficios/perjuicios",
["Buff Font Size"] = "Tamaño de la fuente de beneficios", ["Buff Indicators"] = nil,
["Buff Limit"] = "Límite de beneficios", ["Buff Limit"] = "Límite de beneficios",
["Buff Position"] = "Posición de los beneficios", ["Buff Position"] = "Posición de los beneficios",
["Buffs"] = "Beneficios", ["Buffs"] = "Beneficios",
@@ -120,9 +123,13 @@ pfUI_translation["esES"] = {
["Chat Bubble Transparency"] = "Transparencia de los bocadillos de chat", ["Chat Bubble Transparency"] = "Transparencia de los bocadillos de chat",
["Chat Default Brackets"] = "Corchetes de chat predeterminados", ["Chat Default Brackets"] = "Corchetes de chat predeterminados",
["Class"] = "Clase", ["Class"] = "Clase",
["Class Icon (Round)"] = nil,
["Class Icon (Square)"] = nil,
["Clear Rolls"] = "Borrar los dados", ["Clear Rolls"] = "Borrar los dados",
["Click Action"] = "Acción al hacer clic", ["Click Action"] = "Acción al hacer clic",
["Click Casting"] = "Lanzamiento al hacer click", ["Click Casting"] = "Lanzamiento al hacer click",
["Click to undress"] = nil,
["Undress"] = nil,
["Clock"] = "Reloj", ["Clock"] = "Reloj",
["Close"] = "Cerrar", ["Close"] = "Cerrar",
["Collapse Empty Slots"] = nil, ["Collapse Empty Slots"] = nil,
@@ -145,21 +152,16 @@ pfUI_translation["esES"] = {
["Configuration"] = "Configuración", ["Configuration"] = "Configuración",
["Configure"] = "Configurar", ["Configure"] = "Configurar",
["Cooldown"] = "Reutilización", ["Cooldown"] = "Reutilización",
["Cooldown Color (5 Seconds Or Less)"] = nil,
["Cooldown Color (Days)"] = "Color de reutilización (días)", ["Cooldown Color (Days)"] = "Color de reutilización (días)",
["Cooldown Color (Hours)"] = "Color de reutilización (horas)", ["Cooldown Color (Hours)"] = "Color de reutilización (horas)",
["Cooldown Color (Less than 3 Sec)"] = "Color de reutilización (menos de 3 segundos)",
["Cooldown Color (Minutes)"] = "Color de reutilización (minutos)", ["Cooldown Color (Minutes)"] = "Color de reutilización (minutos)",
["Cooldown Color (Seconds)"] = "Color de reutilización (segundos)", ["Cooldown Color (Seconds)"] = "Color de reutilización (segundos)",
["Cooldown / Durations"] = nil, ["Cooldown / Durations"] = nil,
["Cooldown Text Font"] = nil,
["Cooldown Text Font Size"] = "Tamaño de la fuente de texto de reutilización",
["Cooldown Text Font Size (Blizzard Frames)"] = "Tamaño de la fuente del tiempo de reutilización (Marcos de Blizzard)",
["Cooldown Text Font Size (Foreign Frames)"] = "Tamaño de la fuente del tiempo de reutilización (Marcos ajenos)",
["Cooldown Text Size"] = "Tamaño del texto del tiempo de reutilización",
["Cooldown Text Threshold"] = nil, ["Cooldown Text Threshold"] = nil,
["Cooldown Text Time Threshold"] = "Umbral del texto del tiempo de reutilización",
["Coordinates Location"] = "Coordenadas de localización", ["Coordinates Location"] = "Coordenadas de localización",
["Coordinates On Minimap"] = "Coordenadas en el minimapa", ["Coordinates On Minimap"] = "Coordenadas en el minimapa",
["Copied to clipboard"] = nil,
["Count"] = "Recuento", ["Count"] = "Recuento",
["Create Profile"] = "Crear perfil", ["Create Profile"] = "Crear perfil",
["Ctrl-Click"] = "Ctrl-Clic", ["Ctrl-Click"] = "Ctrl-Clic",
@@ -276,12 +278,9 @@ pfUI_translation["esES"] = {
["Enable Custom Incoming Whispers Layout"] = "Activar disposición de susurros entrantes personalizado", ["Enable Custom Incoming Whispers Layout"] = "Activar disposición de susurros entrantes personalizado",
["Enable Debuff Display"] = "Mostrar los perjuicios", ["Enable Debuff Display"] = "Mostrar los perjuicios",
["Enable Debuffs"] = "Activar los perjuicios", ["Enable Debuffs"] = "Activar los perjuicios",
["Enable Durations On Blizzard Frames"] = "Activar duración en los marcos de Blizzard",
["Enable Durations On Foreign Frames"] = "Activar duración en los marcos extranjeros",
["Enable Energy Ticks"] = "Activar tics de energía", ["Enable Energy Ticks"] = "Activar tics de energía",
["Enable Extended Guild Information"] = "Activar información de hermandad extendida", ["Enable Extended Guild Information"] = "Activar información de hermandad extendida",
["Enable Frame Shadow"] = "Activar sombra del marco", ["Enable Frame Shadow"] = "Activar sombra del marco",
["Enable Full-Text Search"] = nil,
["Enable Indicators"] = "Activar indicadores", ["Enable Indicators"] = "Activar indicadores",
["Enable Item Quality Color For Equipment Only"] = "Mostrar el color de calidad de objetos solo para equipo", ["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\"", ["Enable \"Loot & Spam\" Chat Window"] = "Activar ventana de chat \"Botín y spam\"",
@@ -336,6 +335,7 @@ pfUI_translation["esES"] = {
["Font"] = "Fuente", ["Font"] = "Fuente",
["Font Options"] = "Opciones de fuente", ["Font Options"] = "Opciones de fuente",
["Font Padding"] = "Relleno de fuente", ["Font Padding"] = "Relleno de fuente",
["Font Size"] = nil,
["Font Style"] = "Estilo de la fuente", ["Font Style"] = "Estilo de la fuente",
["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil, ["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil,
["fps"] = "ips", ["fps"] = "ips",
@@ -370,7 +370,6 @@ pfUI_translation["esES"] = {
["Health"] = "Salud", ["Health"] = "Salud",
["Health - Auto"] = "Salud - Auto", ["Health - Auto"] = "Salud - Auto",
["Healthbar"] = "Barra de salud", ["Healthbar"] = "Barra de salud",
["Healthbar Animation Speed"] = "Velocidad de animación de la barra de salud",
["Health Bar Color"] = "Color de la barra de salud", ["Health Bar Color"] = "Color de la barra de salud",
["Healthbar Embedded"] = "Barra de salud embebida", ["Healthbar Embedded"] = "Barra de salud embebida",
["Healthbar Height"] = "Altura de la barra de salud", ["Healthbar Height"] = "Altura de la barra de salud",
@@ -395,7 +394,6 @@ pfUI_translation["esES"] = {
["Hide Channel Names"] = "Ocultar nombres de canales", ["Hide Channel Names"] = "Ocultar nombres de canales",
["Hide Chat When Bags Are Opened"] = "Ocultar el chat al abrir las bolsas", ["Hide Chat When Bags Are Opened"] = "Ocultar el chat al abrir las bolsas",
["Hide Combat Log"] = "Ocultar el registro del combate", ["Hide Combat Log"] = "Ocultar el registro del combate",
["Hide Foreign Cooldown Animations"] = "Esconde animaciones de reutilización externas",
["Hide Group Frames While In Raid"] = "Ocultar los marcos de grupo mientras estés en banda", ["Hide Group Frames While In Raid"] = "Ocultar los marcos de grupo mientras estés en banda",
["Hide Healthbar On Critters"] = "Esconder la barra de salud con las alimañas", ["Hide Healthbar On Critters"] = "Esconder la barra de salud con las alimañas",
["Hide Healthbar On Enemy NPCs"] = "Esconder la barra de salud con los PNJs enemigos", ["Hide Healthbar On Enemy NPCs"] = "Esconder la barra de salud con los PNJs enemigos",
@@ -404,6 +402,7 @@ pfUI_translation["esES"] = {
["Hide Healthbar On Friendly Players"] = "Esconder la barra de salud con los jugadores amistosos", ["Hide Healthbar On Friendly Players"] = "Esconder la barra de salud con los jugadores amistosos",
["Hide Healthbar On Neutral NPCs"] = "Esconder la barra de salud con los PNJs neutrales", ["Hide Healthbar On Neutral NPCs"] = "Esconder la barra de salud con los PNJs neutrales",
["Hide Healthbar On Totems"] = "Esconder la barra de salud con los tótems", ["Hide Healthbar On Totems"] = "Esconder la barra de salud con los tótems",
["Hide Numbers On Spell Cooldowns Up To (Seconds)"] = nil,
["Hide Timeout"] = "Ocultar temporizador", ["Hide Timeout"] = "Ocultar temporizador",
["Hide When Entering Combat"] = "Ocultar si entras combate", ["Hide When Entering Combat"] = "Ocultar si entras combate",
["Highlight Equipped Items"] = "Resaltar objetos equipados", ["Highlight Equipped Items"] = "Resaltar objetos equipados",
@@ -432,7 +431,6 @@ pfUI_translation["esES"] = {
["Inherit Default Colors"] = "Color predeterminado", ["Inherit Default Colors"] = "Color predeterminado",
["Inputbox Height"] = "Altura de la barra de entrada", ["Inputbox Height"] = "Altura de la barra de entrada",
["Inputbox Width"] = "Ancho de la barra de entrada", ["Inputbox Width"] = "Ancho de la barra de entrada",
["Instant"] = "Instantáneo",
["Integrations"] = "Integraciones", ["Integrations"] = "Integraciones",
["Invert Health Bar"] = "Invertir la barra de salud", ["Invert Health Bar"] = "Invertir la barra de salud",
["is not allowed in profile name"] = "no se permite en el nombre de perfil", ["is not allowed in profile name"] = "no se permite en el nombre de perfil",
@@ -477,6 +475,7 @@ pfUI_translation["esES"] = {
["Look & Feel"] = nil, ["Look & Feel"] = nil,
["Loot"] = "Botín", ["Loot"] = "Botín",
["Loot & Spam"] = "Botín y spam", ["Loot & Spam"] = "Botín y spam",
["Loss Of Control"] = nil,
["Macro Text Color"] = "Color de texto de macros", ["Macro Text Color"] = "Color de texto de macros",
["Macro Text Size"] = "Tamaño de texto de macros", ["Macro Text Size"] = "Tamaño de texto de macros",
["Main Actionbar"] = "Barra de acción principal", ["Main Actionbar"] = "Barra de acción principal",
@@ -516,6 +515,7 @@ pfUI_translation["esES"] = {
["Name | Health Missing"] = "Nombre | Falta de salud", ["Name | Health Missing"] = "Nombre | Falta de salud",
["Name (Linebreak) -Health Missing"] = nil, ["Name (Linebreak) -Health Missing"] = nil,
["Nameplate Border Size"] = "Tamaño del borde de las placas de nombre", ["Nameplate Border Size"] = "Tamaño del borde de las placas de nombre",
["Nameplate Debuffs"] = nil,
["Nameplates"] = "Placas identificativas", ["Nameplates"] = "Placas identificativas",
["Nameplate Width"] = "Ancho de las placas identificativas", ["Nameplate Width"] = "Ancho de las placas identificativas",
["Name (Short)"] = "Nombre (corto)", ["Name (Short)"] = "Nombre (corto)",
@@ -554,6 +554,7 @@ pfUI_translation["esES"] = {
["On State Change"] = "En un cambio de estado", ["On State Change"] = "En un cambio de estado",
["Options"] = "Opciones", ["Options"] = "Opciones",
["Orientation"] = "Orientación", ["Orientation"] = "Orientación",
["Other Addons"] = nil,
["Other Panel: Minimap"] = "Otro panel: minimapa", ["Other Panel: Minimap"] = "Otro panel: minimapa",
["Outline"] = "Contorno", ["Outline"] = "Contorno",
["Outlines"] = "Contornos", ["Outlines"] = "Contornos",
@@ -582,6 +583,7 @@ pfUI_translation["esES"] = {
["Pixel"] = "Píxel", ["Pixel"] = "Píxel",
["Player"] = "Jugador", ["Player"] = "Jugador",
["Player Buff Bar"] = "Barra de beneficios del jugador", ["Player Buff Bar"] = "Barra de beneficios del jugador",
["Player Buffs"] = nil,
["Player Castbar"] = "Barra de lanzamiento del jugador", ["Player Castbar"] = "Barra de lanzamiento del jugador",
["Player Debuff Bar"] = "Barra de perjuicios del jugador", ["Player Debuff Bar"] = "Barra de perjuicios del jugador",
["Player SP/Haste Display"] = nil, ["Player SP/Haste Display"] = nil,
@@ -592,6 +594,7 @@ pfUI_translation["esES"] = {
["Portrait Alpha"] = "Transparencia del retrato", ["Portrait Alpha"] = "Transparencia del retrato",
["Portrait Height"] = "Altura Retrato", ["Portrait Height"] = "Altura Retrato",
["Portrait Position"] = "Posición del retrato", ["Portrait Position"] = "Posición del retrato",
["Portrait Style"] = nil,
["Portrait Width"] = "Ancho Retrato", ["Portrait Width"] = "Ancho Retrato",
["Powerbar"] = "Barra de poder", ["Powerbar"] = "Barra de poder",
["Power Bar Anchor"] = "Ancla de la barra de poder", ["Power Bar Anchor"] = "Ancla de la barra de poder",
@@ -647,6 +650,7 @@ pfUI_translation["esES"] = {
["Resting"] = "Descansando", ["Resting"] = "Descansando",
["Reveal Unexplored Areas"] = "Mostrar áreas no exploradas", ["Reveal Unexplored Areas"] = "Mostrar áreas no exploradas",
["Switch to current zone"] = "Ir a la zona actual", ["Switch to current zone"] = "Ir a la zona actual",
["Reverse Sweep On"] = nil,
["Right"] = "Derecho", ["Right"] = "Derecho",
["Right Actionbar"] = "Barra de acción derecha", ["Right Actionbar"] = "Barra de acción derecha",
["Right Anchor"] = nil, ["Right Anchor"] = nil,
@@ -668,6 +672,7 @@ pfUI_translation["esES"] = {
["Save & Reload"] = nil, ["Save & Reload"] = nil,
["Scale"] = "Escala", ["Scale"] = "Escala",
["Scale Border On HiDPI Displays"] = "Escalar los bordes en las pantallas con DPI alto", ["Scale Border On HiDPI Displays"] = "Escalar los bordes en las pantallas con DPI alto",
["Scale Font Size With Icon"] = nil,
["Scaling"] = "Escalada", ["Scaling"] = "Escalada",
["Screen Edge Glow Intensity"] = "Intensidad de brillo en los bordes de la pantalla", ["Screen Edge Glow Intensity"] = "Intensidad de brillo en los bordes de la pantalla",
["Screen Resolution"] = "Resolución de pantalla", ["Screen Resolution"] = "Resolución de pantalla",
@@ -727,7 +732,7 @@ pfUI_translation["esES"] = {
["Show Loot Icon"] = "Mostrar icono de botín", ["Show Loot Icon"] = "Mostrar icono de botín",
["Show Macro Text"] = "Mostrar texto de macro", ["Show Macro Text"] = "Mostrar texto de macro",
["Show Meters By Default"] = "Mostrar medidores por defecto", ["Show Meters By Default"] = "Mostrar medidores por defecto",
["Show Milliseconds When Timer Runs Out"] = "Mostrar milisegundos cuando el temporizador se acaba", ["Show Numbers On"] = nil,
["Show On Friendly Units"] = "Mostrar en unidades amistosas", ["Show On Friendly Units"] = "Mostrar en unidades amistosas",
["Show On Hostile Units"] = "Mostrar en unidades enemigas", ["Show On Hostile Units"] = "Mostrar en unidades enemigas",
["Show Procs Indicators"] = "Mostrar indicadores de beneficios temporales activados", ["Show Procs Indicators"] = "Mostrar indicadores de beneficios temporales activados",
@@ -745,10 +750,10 @@ pfUI_translation["esES"] = {
["Show Spell Icon"] = "Mostrar icono de hechizo", ["Show Spell Icon"] = "Mostrar icono de hechizo",
["Show Spell Name"] = nil, ["Show Spell Name"] = nil,
["Show Stacks"] = "Mostrar pilas", ["Show Stacks"] = "Mostrar pilas",
["Show Sweep On"] = nil,
["Show Tenths Below 5 Seconds"] = nil,
["Show Text"] = nil, ["Show Text"] = nil,
["Show Time Left"] = "Mostrar el tiempo restante",
["Show Timer"] = nil, ["Show Timer"] = nil,
["Show Timer Animation"] = "Mostrar la animación del temporizador",
["Show Timer Text"] = "Mostrar el texto del temporizador", ["Show Timer Text"] = "Mostrar el texto del temporizador",
["Show Totems Indicators"] = "Mostrar los indicadores de tótems", ["Show Totems Indicators"] = "Mostrar los indicadores de tótems",
["Shrink & Return"] = "Encogerse y volver", ["Shrink & Return"] = "Encogerse y volver",
@@ -765,8 +770,10 @@ pfUI_translation["esES"] = {
["Soulshards"] = "Fragmentos de alma", ["Soulshards"] = "Fragmentos de alma",
["Spacing"] = "Espaciado", ["Spacing"] = "Espaciado",
["Special Recipient"] = "Destinatario especial", ["Special Recipient"] = "Destinatario especial",
["Spellbook And Character"] = nil,
["Spell Power Color"] = nil, ["Spell Power Color"] = nil,
["Square"] = "Cuadrado", ["Square"] = "Cuadrado",
["Stack Count Font Size"] = nil,
["Stance Bar 1"] = "Barra de actitud 1", ["Stance Bar 1"] = "Barra de actitud 1",
["Stance Bar 2"] = "Barra de actitud 2", ["Stance Bar 2"] = "Barra de actitud 2",
["Stance Bar 3"] = "Barra de actitud 3", ["Stance Bar 3"] = "Barra de actitud 3",
@@ -801,7 +808,6 @@ pfUI_translation["esES"] = {
["Thistle Tea"] = nil, ["Thistle Tea"] = nil,
["Threshold To Trust Health Estimation"] = "Umbral para confiar en la estimación de salud", ["Threshold To Trust Health Estimation"] = "Umbral para confiar en la estimación de salud",
["Time"] = "Tiempo", ["Time"] = "Tiempo",
["Timer"] = "Temporizador",
["Time Remaining"] = "Tiempo restante", ["Time Remaining"] = "Tiempo restante",
["Timer In Minutes"] = "Temporizador en minutos", ["Timer In Minutes"] = "Temporizador en minutos",
["Timestamp Brackets"] = "Corchetes de marca de tiempo", ["Timestamp Brackets"] = "Corchetes de marca de tiempo",
@@ -812,6 +818,7 @@ pfUI_translation["esES"] = {
["Tiny (PixelPerfect)"] = "Minúsculo (píxel perfecta)", ["Tiny (PixelPerfect)"] = "Minúsculo (píxel perfecta)",
["Toggle as Tank"] = "Alternar si eres el tanque", ["Toggle as Tank"] = "Alternar si eres el tanque",
["Tooltip"] = "Descripción emergente", ["Tooltip"] = "Descripción emergente",
["Tooltip Auras"] = nil,
["Tooltip Position"] = "Posición de la descripción emergente", ["Tooltip Position"] = "Posición de la descripción emergente",
["Tooltip Text Font"] = nil, ["Tooltip Text Font"] = nil,
["Tooltip Text Font Size"] = nil, ["Tooltip Text Font Size"] = nil,
@@ -823,11 +830,13 @@ pfUI_translation["esES"] = {
["Total Gold"] = "Oro Total", ["Total Gold"] = "Oro Total",
["Totem Direction"] = "Dirección del tótem", ["Totem Direction"] = "Dirección del tótem",
["Totem Icons"] = "Iconos de los tótems", ["Totem Icons"] = "Iconos de los tótems",
["Totems"] = nil,
["Tracked Reputation"] = "Reputación rastreada", ["Tracked Reputation"] = "Reputación rastreada",
["Tracking Icon Size"] = "Tamaño del icono de rastreo", ["Tracking Icon Size"] = "Tamaño del icono de rastreo",
["Trigger Actions On Key Down"] = "Disparar acciones por presionar la tecla abajo", ["Trigger Actions On Key Down"] = "Disparar acciones por presionar la tecla abajo",
["UI-Scale"] = "Escala de IU", ["UI-Scale"] = "Escala de IU",
["Unbuffed"] = "Sin beneficios", ["Unbuffed"] = "Sin beneficios",
["Unit Frame Auras"] = nil,
["Unit Frame Border Size"] = "Tamaño del borde del marco de unidad", ["Unit Frame Border Size"] = "Tamaño del borde del marco de unidad",
["Unit Frame Layout"] = "Disposición del Marco de unidad", ["Unit Frame Layout"] = "Disposición del Marco de unidad",
["Unit Frames"] = "Marcos de unidad", ["Unit Frames"] = "Marcos de unidad",
@@ -854,7 +863,6 @@ pfUI_translation["esES"] = {
["Use Custom Color Power Bar Background"] = "Usar un color personalizado para el fondo de la barra de poder", ["Use Custom Color Power Bar Background"] = "Usar un color personalizado para el fondo de la barra de poder",
["Use Custom Font Settings"] = "Usar las opciones de fuente personalizada", ["Use Custom Font Settings"] = "Usar las opciones de fuente personalizada",
["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil, ["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil,
["Use Dynamic Font Size"] = "Usar un tamaño de fuente dinámico",
["Use Item Rarity Color For Loot-Roll Timer"] = "Usar el color de la rareza del objeto para el temporizador de tirar los dados", ["Use Item Rarity Color For Loot-Roll Timer"] = "Usar el color de la rareza del objeto para el temporizador de tirar los dados",
["Use Original Game Fonts"] = nil, ["Use Original Game Fonts"] = nil,
["Use Raid Frames To Display Group Members"] = "Usar marcos de la banda para mostrar miembros del grupo", ["Use Raid Frames To Display Group Members"] = "Usar marcos de la banda para mostrar miembros del grupo",
+98 -20
View File
@@ -1,4 +1,6 @@
pfUI_translation["frFR"] = { pfUI_translation["frFR"] = {
["2D"] = nil,
["3D"] = nil,
["3D World Unit Font"] = nil, ["3D World Unit Font"] = nil,
["Abbreviate Numbers (4200 -> 4.2k)"] = "Nombre abrégés (4200 -> 4.2k)", ["Abbreviate Numbers (4200 -> 4.2k)"] = "Nombre abrégés (4200 -> 4.2k)",
["Abbreviate Unit Names"] = nil, ["Abbreviate Unit Names"] = nil,
@@ -6,6 +8,7 @@ pfUI_translation["frFR"] = {
["Actionbar"] = "Barre d'action", ["Actionbar"] = "Barre d'action",
["Action Bar"] = "Barre d'action", ["Action Bar"] = "Barre d'action",
["Action Bar Border Size"] = "Taille de la bordure de la barre d'action", ["Action Bar Border Size"] = "Taille de la bordure de la barre d'action",
["Action Bars"] = nil,
["Active Addons"] = "Addons Actif", ["Active Addons"] = "Addons Actif",
["Add button to the frame"] = "Ajoute un bouton au cadre", ["Add button to the frame"] = "Ajoute un bouton au cadre",
["Added button"] = "Bouton ajouté", ["Added button"] = "Bouton ajouté",
@@ -27,11 +30,11 @@ pfUI_translation["frFR"] = {
["Always Show Item Comparison"] = "Toujours afficher la comparaison d'objet", ["Always Show Item Comparison"] = "Toujours afficher la comparaison d'objet",
["Always Show On Target Units"] = "Toujours montrer sur la cible", ["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 On Units With Missing HP"] = "Toujours montrer sur les cibles avec de la vie manquante",
["Always Use 2D Portraits"] = "Toujours utiliser les portraits 2D",
["Ammo Counter"] = "Compteur de munitions", ["Ammo Counter"] = "Compteur de munitions",
["Anchor Bags Above Chat"] = nil, ["Anchor Bags Above Chat"] = nil,
["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "Une nouvelle installation de |cff33ffccpf|rUI est livrée avec 4 profils de conception prédéfinis, Cliquez ci-dessous si vous souhaitez charger l'un de ces profils", ["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "Une nouvelle installation de |cff33ffccpf|rUI est livrée avec 4 profils de conception prédéfinis, Cliquez ci-dessous si vous souhaitez charger l'un de ces profils",
["A new version is available"] = "Une nouvelle version est disponible", ["A new version is available"] = "Une nouvelle version est disponible",
["Animate Health And Power Bars"] = nil,
["Appearance"] = "Apparence", ["Appearance"] = "Apparence",
["Ascending"] = "Ascendante", ["Ascending"] = "Ascendante",
["Author"] = "Auteur", ["Author"] = "Auteur",
@@ -78,7 +81,7 @@ pfUI_translation["frFR"] = {
["Buffbar Width"] = "Largeur de la barre des Améliorations", ["Buffbar Width"] = "Largeur de la barre des Améliorations",
["Buff/Debuff Icons"] = "Icones de Améliorations/Affaiblissements", ["Buff/Debuff Icons"] = "Icones de Améliorations/Affaiblissements",
["Buff/Debuff Indicators"] = nil, ["Buff/Debuff Indicators"] = nil,
["Buff Font Size"] = "Taille de la police des Améliorations", ["Buff Indicators"] = nil,
["Buff Limit"] = "Limite des améliorations", ["Buff Limit"] = "Limite des améliorations",
["Buff Position"] = "Position des améliorations", ["Buff Position"] = "Position des améliorations",
["Buffs"] = "Buffs", ["Buffs"] = "Buffs",
@@ -120,9 +123,13 @@ pfUI_translation["frFR"] = {
["Chat Bubble Transparency"] = "Transparence de la bulle de chat", ["Chat Bubble Transparency"] = "Transparence de la bulle de chat",
["Chat Default Brackets"] = "Supports par défaut du chat", ["Chat Default Brackets"] = "Supports par défaut du chat",
["Class"] = "Classe", ["Class"] = "Classe",
["Class Icon (Round)"] = nil,
["Class Icon (Square)"] = nil,
["Clear Rolls"] = "Clear les roulements", ["Clear Rolls"] = "Clear les roulements",
["Click Action"] = "Action au clic", ["Click Action"] = "Action au clic",
["Click Casting"] = "Clique sur le lancement de sort", ["Click Casting"] = "Clique sur le lancement de sort",
["Click to undress"] = nil,
["Undress"] = nil,
["Clock"] = "Horloge", ["Clock"] = "Horloge",
["Close"] = "Fermer", ["Close"] = "Fermer",
["Collapse Empty Slots"] = nil, ["Collapse Empty Slots"] = nil,
@@ -145,21 +152,16 @@ pfUI_translation["frFR"] = {
["Configuration"] = "Configuration", ["Configuration"] = "Configuration",
["Configure"] = "Configurer", ["Configure"] = "Configurer",
["Cooldown"] = "Temps de recharge", ["Cooldown"] = "Temps de recharge",
["Cooldown Color (5 Seconds Or Less)"] = nil,
["Cooldown Color (Days)"] = "Couleur des temps de recharge (Jours)", ["Cooldown Color (Days)"] = "Couleur des temps de recharge (Jours)",
["Cooldown Color (Hours)"] = "Couleur des temps de recharge (Heures)", ["Cooldown Color (Hours)"] = "Couleur des temps de recharge (Heures)",
["Cooldown Color (Less than 3 Sec)"] = "Couleur des temps de recharge (Moins de 3 secondes)",
["Cooldown Color (Minutes)"] = "Couleur des temps de recharge (Minutes)", ["Cooldown Color (Minutes)"] = "Couleur des temps de recharge (Minutes)",
["Cooldown Color (Seconds)"] = "Couleur des temps de recharge (Secondes)", ["Cooldown Color (Seconds)"] = "Couleur des temps de recharge (Secondes)",
["Cooldown / Durations"] = nil, ["Cooldown / Durations"] = nil,
["Cooldown Text Font"] = nil,
["Cooldown Text Font Size"] = "Taille de la police du texte des temps de recharge",
["Cooldown Text Font Size (Blizzard Frames)"] = "Taille de la police du texte des temps de recharge (Blizzard Frames)",
["Cooldown Text Font Size (Foreign Frames)"] = "Taille de la police du texte des temps de recharge (Foreign Frames)",
["Cooldown Text Size"] = nil,
["Cooldown Text Threshold"] = nil, ["Cooldown Text Threshold"] = nil,
["Cooldown Text Time Threshold"] = "Seuil du texte des temps de recharge",
["Coordinates Location"] = "Coordonnées Emplacement", ["Coordinates Location"] = "Coordonnées Emplacement",
["Coordinates On Minimap"] = "Coordonnées sur la mini-carte", ["Coordinates On Minimap"] = "Coordonnées sur la mini-carte",
["Copied to clipboard"] = nil,
["Count"] = "Compter", ["Count"] = "Compter",
["Create Profile"] = "Créer un profil", ["Create Profile"] = "Créer un profil",
["Ctrl-Click"] = "Ctrl-Clique", ["Ctrl-Click"] = "Ctrl-Clique",
@@ -276,12 +278,9 @@ pfUI_translation["frFR"] = {
["Enable Custom Incoming Whispers Layout"] = "Activer la personnalisation de la fenêtre des Chuchotements entrants", ["Enable Custom Incoming Whispers Layout"] = "Activer la personnalisation de la fenêtre des Chuchotements entrants",
["Enable Debuff Display"] = "Activer l'affichage des Affaiblissements", ["Enable Debuff Display"] = "Activer l'affichage des Affaiblissements",
["Enable Debuffs"] = "Activer les affaiblissements", ["Enable Debuffs"] = "Activer les affaiblissements",
["Enable Durations On Blizzard Frames"] = "Activer les durées sur les cadres Blizzard",
["Enable Durations On Foreign Frames"] = "Activer les durées sur les cadres extérieur",
["Enable Energy Ticks"] = "Activer la barre de rechargement d'énergie", ["Enable Energy Ticks"] = "Activer la barre de rechargement d'énergie",
["Enable Extended Guild Information"] = "Activer les informations de guilde étendues", ["Enable Extended Guild Information"] = "Activer les informations de guilde étendues",
["Enable Frame Shadow"] = "Activer l'ombre des cadres", ["Enable Frame Shadow"] = "Activer l'ombre des cadres",
["Enable Full-Text Search"] = nil,
["Enable Indicators"] = "Activer les indicateurs", ["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 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\"", ["Enable \"Loot & Spam\" Chat Window"] = "Activer la fenêtre de chat \"Butins & Spam\"",
@@ -336,6 +335,7 @@ pfUI_translation["frFR"] = {
["Font"] = "Police de caractère", ["Font"] = "Police de caractère",
["Font Options"] = "Options de la Police", ["Font Options"] = "Options de la Police",
["Font Padding"] = "Remplissage de la police", ["Font Padding"] = "Remplissage de la police",
["Font Size"] = nil,
["Font Style"] = "Style de la police", ["Font Style"] = "Style de la police",
["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil, ["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil,
["fps"] = "fps", ["fps"] = "fps",
@@ -370,7 +370,6 @@ pfUI_translation["frFR"] = {
["Health"] = "Point de vie", ["Health"] = "Point de vie",
["Health - Auto"] = "Points de vie - Automatique", ["Health - Auto"] = "Points de vie - Automatique",
["Healthbar"] = "Barre des points de vie", ["Healthbar"] = "Barre des points de vie",
["Healthbar Animation Speed"] = "Vitesse de l'animation des barres de vie",
["Health Bar Color"] = "Couleur de la barre des points de vie", ["Health Bar Color"] = "Couleur de la barre des points de vie",
["Healthbar Embedded"] = "Barres de vies intégrées", ["Healthbar Embedded"] = "Barres de vies intégrées",
["Healthbar Height"] = "Hauteur des barres de vies", ["Healthbar Height"] = "Hauteur des barres de vies",
@@ -395,7 +394,6 @@ pfUI_translation["frFR"] = {
["Hide Channel Names"] = "Masquer le nom des canaux", ["Hide Channel Names"] = "Masquer le nom des canaux",
["Hide Chat When Bags Are Opened"] = "Masquer le chat quand les sacs sont ouverts", ["Hide Chat When Bags Are Opened"] = "Masquer le chat quand les sacs sont ouverts",
["Hide Combat Log"] = "Masquer le journal de combat", ["Hide Combat Log"] = "Masquer le journal de combat",
["Hide Foreign Cooldown Animations"] = "Masquer les animations de temps de recharge étrangères",
["Hide Group Frames While In Raid"] = "Masquer l'UI Groupe en Raid", ["Hide Group Frames While In Raid"] = "Masquer l'UI Groupe en Raid",
["Hide Healthbar On Critters"] = "Masquer la barre de vie des bêtes", ["Hide Healthbar On Critters"] = "Masquer la barre de vie des bêtes",
["Hide Healthbar On Enemy NPCs"] = "Masquer la barre de vie des PNJs ennemis", ["Hide Healthbar On Enemy NPCs"] = "Masquer la barre de vie des PNJs ennemis",
@@ -404,6 +402,7 @@ pfUI_translation["frFR"] = {
["Hide Healthbar On Friendly Players"] = "Masquer la barre de vie des joueurs amicaux", ["Hide Healthbar On Friendly Players"] = "Masquer la barre de vie des joueurs amicaux",
["Hide Healthbar On Neutral NPCs"] = "Masquer la barre de vie des PNJs neutre", ["Hide Healthbar On Neutral NPCs"] = "Masquer la barre de vie des PNJs neutre",
["Hide Healthbar On Totems"] = "Masquer la barre de vie des totems", ["Hide Healthbar On Totems"] = "Masquer la barre de vie des totems",
["Hide Numbers On Spell Cooldowns Up To (Seconds)"] = nil,
["Hide Timeout"] = "Masquer le délai d'expiration", ["Hide Timeout"] = "Masquer le délai d'expiration",
["Hide When Entering Combat"] = "Masquer lors de l'entrée en combat", ["Hide When Entering Combat"] = "Masquer lors de l'entrée en combat",
["Highlight Equipped Items"] = "Mettre en surbrillance les objets équipés", ["Highlight Equipped Items"] = "Mettre en surbrillance les objets équipés",
@@ -432,7 +431,6 @@ pfUI_translation["frFR"] = {
["Inherit Default Colors"] = "Hériter des couleurs par défaut", ["Inherit Default Colors"] = "Hériter des couleurs par défaut",
["Inputbox Height"] = "Hauteur du champ de saisie du texte", ["Inputbox Height"] = "Hauteur du champ de saisie du texte",
["Inputbox Width"] = "Largeur du champ de saisie du texte", ["Inputbox Width"] = "Largeur du champ de saisie du texte",
["Instant"] = "Instantané",
["Integrations"] = nil, ["Integrations"] = nil,
["Invert Health Bar"] = "Inverser les barres de vie", ["Invert Health Bar"] = "Inverser les barres de vie",
["is not allowed in profile name"] = "n'est pas autorisé comme nom de profil", ["is not allowed in profile name"] = "n'est pas autorisé comme nom de profil",
@@ -477,6 +475,7 @@ pfUI_translation["frFR"] = {
["Look & Feel"] = nil, ["Look & Feel"] = nil,
["Loot"] = "Butin", ["Loot"] = "Butin",
["Loot & Spam"] = "Butin & Spam", ["Loot & Spam"] = "Butin & Spam",
["Loss Of Control"] = nil,
["Macro Text Color"] = "Couleur du texte de la macro", ["Macro Text Color"] = "Couleur du texte de la macro",
["Macro Text Size"] = "Taille du texte de la macro", ["Macro Text Size"] = "Taille du texte de la macro",
["Main Actionbar"] = "Barre d'action principale", ["Main Actionbar"] = "Barre d'action principale",
@@ -516,6 +515,7 @@ pfUI_translation["frFR"] = {
["Name | Health Missing"] = "Nom | santé manquante", ["Name | Health Missing"] = "Nom | santé manquante",
["Name (Linebreak) -Health Missing"] = nil, ["Name (Linebreak) -Health Missing"] = nil,
["Nameplate Border Size"] = "Taille de la bordure des barres de vie flottantes", ["Nameplate Border Size"] = "Taille de la bordure des barres de vie flottantes",
["Nameplate Debuffs"] = nil,
["Nameplates"] = "Barres de vie flottantes", ["Nameplates"] = "Barres de vie flottantes",
["Nameplate Width"] = "Largeur des barres de vie flottantes", ["Nameplate Width"] = "Largeur des barres de vie flottantes",
["Name (Short)"] = "Nom (Court)", ["Name (Short)"] = "Nom (Court)",
@@ -554,6 +554,7 @@ pfUI_translation["frFR"] = {
["On State Change"] = "Sur changement d'état", ["On State Change"] = "Sur changement d'état",
["Options"] = "Options", ["Options"] = "Options",
["Orientation"] = "Orientation", ["Orientation"] = "Orientation",
["Other Addons"] = nil,
["Other Panel: Minimap"] = "Autre panneau : Minicarte", ["Other Panel: Minimap"] = "Autre panneau : Minicarte",
["Outline"] = "Contour", ["Outline"] = "Contour",
["Outlines"] = "Grandes lignes", ["Outlines"] = "Grandes lignes",
@@ -582,6 +583,7 @@ pfUI_translation["frFR"] = {
["Pixel"] = "Pixel", ["Pixel"] = "Pixel",
["Player"] = "Joueur", ["Player"] = "Joueur",
["Player Buff Bar"] = "Barre des Améliorations du Joueur", ["Player Buff Bar"] = "Barre des Améliorations du Joueur",
["Player Buffs"] = nil,
["Player Castbar"] = "Barre d'incantation du Joueur", ["Player Castbar"] = "Barre d'incantation du Joueur",
["Player Debuff Bar"] = "Barre des Affaiblissements du Joueur", ["Player Debuff Bar"] = "Barre des Affaiblissements du Joueur",
["Player SP/Haste Display"] = nil, ["Player SP/Haste Display"] = nil,
@@ -592,6 +594,7 @@ pfUI_translation["frFR"] = {
["Portrait Alpha"] = "Transparence du portrait", ["Portrait Alpha"] = "Transparence du portrait",
["Portrait Height"] = "Hauteur du portrait", ["Portrait Height"] = "Hauteur du portrait",
["Portrait Position"] = "Position du portrait", ["Portrait Position"] = "Position du portrait",
["Portrait Style"] = nil,
["Portrait Width"] = "Largeur du portrait", ["Portrait Width"] = "Largeur du portrait",
["Powerbar"] = "Barre des ressources", ["Powerbar"] = "Barre des ressources",
["Power Bar Anchor"] = "Ancrage de la Barre des ressources", ["Power Bar Anchor"] = "Ancrage de la Barre des ressources",
@@ -647,6 +650,7 @@ pfUI_translation["frFR"] = {
["Resting"] = "Au Repos", ["Resting"] = "Au Repos",
["Reveal Unexplored Areas"] = "Révèle les zones non explorées", ["Reveal Unexplored Areas"] = "Révèle les zones non explorées",
["Switch to current zone"] = "Aller à la zone actuelle", ["Switch to current zone"] = "Aller à la zone actuelle",
["Reverse Sweep On"] = nil,
["Right"] = "Droit", ["Right"] = "Droit",
["Right Actionbar"] = "Barre d'action droite", ["Right Actionbar"] = "Barre d'action droite",
["Right Anchor"] = nil, ["Right Anchor"] = nil,
@@ -668,6 +672,7 @@ pfUI_translation["frFR"] = {
["Save & Reload"] = nil, ["Save & Reload"] = nil,
["Scale"] = "Échelle", ["Scale"] = "Échelle",
["Scale Border On HiDPI Displays"] = "Échelle de bordure sur les écrans HiDPI", ["Scale Border On HiDPI Displays"] = "Échelle de bordure sur les écrans HiDPI",
["Scale Font Size With Icon"] = nil,
["Scaling"] = "Mise à l'échelle", ["Scaling"] = "Mise à l'échelle",
["Screen Edge Glow Intensity"] = nil, ["Screen Edge Glow Intensity"] = nil,
["Screen Resolution"] = "Résolution d'écran", ["Screen Resolution"] = "Résolution d'écran",
@@ -727,7 +732,7 @@ pfUI_translation["frFR"] = {
["Show Loot Icon"] = "Afficher l'icône du butin", ["Show Loot Icon"] = "Afficher l'icône du butin",
["Show Macro Text"] = "Afficher le texte des macros", ["Show Macro Text"] = "Afficher le texte des macros",
["Show Meters By Default"] = "Afficher les compteurs par défaut", ["Show Meters By Default"] = "Afficher les compteurs par défaut",
["Show Milliseconds When Timer Runs Out"] = "Afficher les Millisecondes quand le temps est épuisée", ["Show Numbers On"] = nil,
["Show On Friendly Units"] = "Afficher sur les unités amicales", ["Show On Friendly Units"] = "Afficher sur les unités amicales",
["Show On Hostile Units"] = "Afficher sur les unités hostiles", ["Show On Hostile Units"] = "Afficher sur les unités hostiles",
["Show Procs Indicators"] = "Afficher les indicateurs de Procs", ["Show Procs Indicators"] = "Afficher les indicateurs de Procs",
@@ -745,10 +750,10 @@ pfUI_translation["frFR"] = {
["Show Spell Icon"] = "Afficher l'icone des sorts", ["Show Spell Icon"] = "Afficher l'icone des sorts",
["Show Spell Name"] = nil, ["Show Spell Name"] = nil,
["Show Stacks"] = "Afficher les empilements", ["Show Stacks"] = "Afficher les empilements",
["Show Sweep On"] = nil,
["Show Tenths Below 5 Seconds"] = nil,
["Show Text"] = nil, ["Show Text"] = nil,
["Show Time Left"] = "Afficher le temps restant",
["Show Timer"] = nil, ["Show Timer"] = nil,
["Show Timer Animation"] = nil,
["Show Timer Text"] = nil, ["Show Timer Text"] = nil,
["Show Totems Indicators"] = "Afficher les indicateurs des totems", ["Show Totems Indicators"] = "Afficher les indicateurs des totems",
["Shrink & Return"] = "Rétrécir et retourner", ["Shrink & Return"] = "Rétrécir et retourner",
@@ -765,8 +770,10 @@ pfUI_translation["frFR"] = {
["Soulshards"] = "Pierre d'âme", ["Soulshards"] = "Pierre d'âme",
["Spacing"] = "Espacement", ["Spacing"] = "Espacement",
["Special Recipient"] = "Recipient spécial", ["Special Recipient"] = "Recipient spécial",
["Spellbook And Character"] = nil,
["Spell Power Color"] = nil, ["Spell Power Color"] = nil,
["Square"] = "Carré", ["Square"] = "Carré",
["Stack Count Font Size"] = nil,
["Stance Bar 1"] = "Barre de posture 1", ["Stance Bar 1"] = "Barre de posture 1",
["Stance Bar 2"] = "Barre de posture 2", ["Stance Bar 2"] = "Barre de posture 2",
["Stance Bar 3"] = "Barre de posture 3", ["Stance Bar 3"] = "Barre de posture 3",
@@ -801,7 +808,6 @@ pfUI_translation["frFR"] = {
["Thistle Tea"] = nil, ["Thistle Tea"] = nil,
["Threshold To Trust Health Estimation"] = "Seuil de confiance pour l'estimation de la santé", ["Threshold To Trust Health Estimation"] = "Seuil de confiance pour l'estimation de la santé",
["Time"] = "Heure", ["Time"] = "Heure",
["Timer"] = nil,
["Time Remaining"] = "Temps restant", ["Time Remaining"] = "Temps restant",
["Timer In Minutes"] = "Temps en minutes", ["Timer In Minutes"] = "Temps en minutes",
["Timestamp Brackets"] = "Supports des horaires des messages", ["Timestamp Brackets"] = "Supports des horaires des messages",
@@ -812,6 +818,7 @@ pfUI_translation["frFR"] = {
["Tiny (PixelPerfect)"] = "Minuscule (PixelParfait)", ["Tiny (PixelPerfect)"] = "Minuscule (PixelParfait)",
["Toggle as Tank"] = "Basculer en tant que tank", ["Toggle as Tank"] = "Basculer en tant que tank",
["Tooltip"] = "Infobulle", ["Tooltip"] = "Infobulle",
["Tooltip Auras"] = nil,
["Tooltip Position"] = "Position de l'infobulle", ["Tooltip Position"] = "Position de l'infobulle",
["Tooltip Text Font"] = nil, ["Tooltip Text Font"] = nil,
["Tooltip Text Font Size"] = nil, ["Tooltip Text Font Size"] = nil,
@@ -823,11 +830,13 @@ pfUI_translation["frFR"] = {
["Total Gold"] = "Or Total", ["Total Gold"] = "Or Total",
["Totem Direction"] = "Direction des totems", ["Totem Direction"] = "Direction des totems",
["Totem Icons"] = "Icones des totems", ["Totem Icons"] = "Icones des totems",
["Totems"] = nil,
["Tracked Reputation"] = nil, ["Tracked Reputation"] = nil,
["Tracking Icon Size"] = "Taille de l'icône de suivi", ["Tracking Icon Size"] = "Taille de l'icône de suivi",
["Trigger Actions On Key Down"] = "Déclencher des actions sur la touche enfoncée", ["Trigger Actions On Key Down"] = "Déclencher des actions sur la touche enfoncée",
["UI-Scale"] = "Echelle de l'interface", ["UI-Scale"] = "Echelle de l'interface",
["Unbuffed"] = "Sans Améliorations", ["Unbuffed"] = "Sans Améliorations",
["Unit Frame Auras"] = nil,
["Unit Frame Border Size"] = "Taille de la bordure des cadres d'unité", ["Unit Frame Border Size"] = "Taille de la bordure des cadres d'unité",
["Unit Frame Layout"] = "Position des cadres d'unité", ["Unit Frame Layout"] = "Position des cadres d'unité",
["Unit Frames"] = "Cadres d'unités", ["Unit Frames"] = "Cadres d'unités",
@@ -854,7 +863,6 @@ pfUI_translation["frFR"] = {
["Use Custom Color Power Bar Background"] = "Utiliser l'arrière-plan de la barre d'alimentation de couleur personnalisée", ["Use Custom Color Power Bar Background"] = "Utiliser l'arrière-plan de la barre d'alimentation de couleur personnalisée",
["Use Custom Font Settings"] = nil, ["Use Custom Font Settings"] = nil,
["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil, ["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil,
["Use Dynamic Font Size"] = "Utiliser la taille de police dynamique",
["Use Item Rarity Color For Loot-Roll Timer"] = "Utiliser la couleur de la rareté de l'objet pour la minuterie du lancer de dés", ["Use Item Rarity Color For Loot-Roll Timer"] = "Utiliser la couleur de la rareté de l'objet pour la minuterie du lancer de dés",
["Use Original Game Fonts"] = nil, ["Use Original Game Fonts"] = nil,
["Use Raid Frames To Display Group Members"] = "Utiliser l'UI Raid pour afficher les Membres du Groupe", ["Use Raid Frames To Display Group Members"] = "Utiliser l'UI Raid pour afficher les Membres du Groupe",
@@ -890,4 +898,74 @@ pfUI_translation["frFR"] = {
["Zonetime"] = nil, ["Zonetime"] = nil,
["Zoom & Fade"] = "Zoom et fondu", ["Zoom & Fade"] = "Zoom et fondu",
["Zoom Target Nameplate"] = "Zoom la cible des barres de vie flottantes", ["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",
} }
+28 -20
View File
@@ -1,4 +1,6 @@
pfUI_translation["koKR"] = { pfUI_translation["koKR"] = {
["2D"] = nil,
["3D"] = nil,
["3D World Unit Font"] = nil, ["3D World Unit Font"] = nil,
["Abbreviate Numbers (4200 -> 4.2k)"] = "체력수치 약어 (4200 -> 4.2k)", ["Abbreviate Numbers (4200 -> 4.2k)"] = "체력수치 약어 (4200 -> 4.2k)",
["Abbreviate Unit Names"] = nil, ["Abbreviate Unit Names"] = nil,
@@ -6,6 +8,7 @@ pfUI_translation["koKR"] = {
["Actionbar"] = "액션바", ["Actionbar"] = "액션바",
["Action Bar"] = nil, ["Action Bar"] = nil,
["Action Bar Border Size"] = "액션바 테두리 크기", ["Action Bar Border Size"] = "액션바 테두리 크기",
["Action Bars"] = nil,
["Active Addons"] = "애드온 활성화", ["Active Addons"] = "애드온 활성화",
["Add button to the frame"] = nil, ["Add button to the frame"] = nil,
["Added button"] = nil, ["Added button"] = nil,
@@ -27,11 +30,11 @@ pfUI_translation["koKR"] = {
["Always Show Item Comparison"] = "항상 착용 장비와 비교 표시", ["Always Show Item Comparison"] = "항상 착용 장비와 비교 표시",
["Always Show On Target Units"] = nil, ["Always Show On Target Units"] = nil,
["Always Show On Units With Missing HP"] = nil, ["Always Show On Units With Missing HP"] = nil,
["Always Use 2D Portraits"] = "항상 2D초상화 사용",
["Ammo Counter"] = "탄약 갯수", ["Ammo Counter"] = "탄약 갯수",
["Anchor Bags Above Chat"] = nil, ["Anchor Bags Above Chat"] = nil,
["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = nil, ["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = nil,
["A new version is available"] = nil, ["A new version is available"] = nil,
["Animate Health And Power Bars"] = nil,
["Appearance"] = "외관 설정", ["Appearance"] = "외관 설정",
["Ascending"] = nil, ["Ascending"] = nil,
["Author"] = nil, ["Author"] = nil,
@@ -78,7 +81,7 @@ pfUI_translation["koKR"] = {
["Buffbar Width"] = nil, ["Buffbar Width"] = nil,
["Buff/Debuff Icons"] = nil, ["Buff/Debuff Icons"] = nil,
["Buff/Debuff Indicators"] = nil, ["Buff/Debuff Indicators"] = nil,
["Buff Font Size"] = nil, ["Buff Indicators"] = nil,
["Buff Limit"] = "버프 한도", ["Buff Limit"] = "버프 한도",
["Buff Position"] = "버프 위치", ["Buff Position"] = "버프 위치",
["Buffs"] = nil, ["Buffs"] = nil,
@@ -120,9 +123,13 @@ pfUI_translation["koKR"] = {
["Chat Bubble Transparency"] = nil, ["Chat Bubble Transparency"] = nil,
["Chat Default Brackets"] = nil, ["Chat Default Brackets"] = nil,
["Class"] = "클래스(직업)", ["Class"] = "클래스(직업)",
["Class Icon (Round)"] = nil,
["Class Icon (Square)"] = nil,
["Clear Rolls"] = nil, ["Clear Rolls"] = nil,
["Click Action"] = "클릭 액션", ["Click Action"] = "클릭 액션",
["Click Casting"] = nil, ["Click Casting"] = nil,
["Click to undress"] = nil,
["Undress"] = nil,
["Clock"] = "시계", ["Clock"] = "시계",
["Close"] = "닫기", ["Close"] = "닫기",
["Collapse Empty Slots"] = nil, ["Collapse Empty Slots"] = nil,
@@ -145,21 +152,16 @@ pfUI_translation["koKR"] = {
["Configuration"] = "구성", ["Configuration"] = "구성",
["Configure"] = nil, ["Configure"] = nil,
["Cooldown"] = "쿨다운", ["Cooldown"] = "쿨다운",
["Cooldown Color (5 Seconds Or Less)"] = nil,
["Cooldown Color (Days)"] = "재사용 대기시간 컬러(일)", ["Cooldown Color (Days)"] = "재사용 대기시간 컬러(일)",
["Cooldown Color (Hours)"] = "재사용 대기시간 컬러(시간)", ["Cooldown Color (Hours)"] = "재사용 대기시간 컬러(시간)",
["Cooldown Color (Less than 3 Sec)"] = "재사용 대기시간 컬러(3초전)",
["Cooldown Color (Minutes)"] = "재사용 대기시간 컬러(분)", ["Cooldown Color (Minutes)"] = "재사용 대기시간 컬러(분)",
["Cooldown Color (Seconds)"] = "재사용 대기시간 컬러(초)", ["Cooldown Color (Seconds)"] = "재사용 대기시간 컬러(초)",
["Cooldown / Durations"] = nil, ["Cooldown / Durations"] = nil,
["Cooldown Text Font"] = nil,
["Cooldown Text Font Size"] = "재사용 대기시간 텍스트 폰트 크기",
["Cooldown Text Font Size (Blizzard Frames)"] = nil,
["Cooldown Text Font Size (Foreign Frames)"] = nil,
["Cooldown Text Size"] = nil,
["Cooldown Text Threshold"] = nil, ["Cooldown Text Threshold"] = nil,
["Cooldown Text Time Threshold"] = "재사용 대기시간 텍스트 임계 값",
["Coordinates Location"] = nil, ["Coordinates Location"] = nil,
["Coordinates On Minimap"] = "미니맵의 좌표", ["Coordinates On Minimap"] = "미니맵의 좌표",
["Copied to clipboard"] = nil,
["Count"] = "카운트", ["Count"] = "카운트",
["Create Profile"] = "프로파일 생성", ["Create Profile"] = "프로파일 생성",
["Ctrl-Click"] = nil, ["Ctrl-Click"] = nil,
@@ -276,12 +278,9 @@ pfUI_translation["koKR"] = {
["Enable Custom Incoming Whispers Layout"] = "사용자 지정 귓속말 레이아웃 활성화", ["Enable Custom Incoming Whispers Layout"] = "사용자 지정 귓속말 레이아웃 활성화",
["Enable Debuff Display"] = nil, ["Enable Debuff Display"] = nil,
["Enable Debuffs"] = "디버프 활성화", ["Enable Debuffs"] = "디버프 활성화",
["Enable Durations On Blizzard Frames"] = nil,
["Enable Durations On Foreign Frames"] = nil,
["Enable Energy Ticks"] = "Energy Ticks 활성화", ["Enable Energy Ticks"] = "Energy Ticks 활성화",
["Enable Extended Guild Information"] = "길드 정보 확장 사용", ["Enable Extended Guild Information"] = "길드 정보 확장 사용",
["Enable Frame Shadow"] = nil, ["Enable Frame Shadow"] = nil,
["Enable Full-Text Search"] = nil,
["Enable Indicators"] = nil, ["Enable Indicators"] = nil,
["Enable Item Quality Color For Equipment Only"] = "착용장비 전용 아이템품질 색상 활성화", ["Enable Item Quality Color For Equipment Only"] = "착용장비 전용 아이템품질 색상 활성화",
["Enable \"Loot & Spam\" Chat Window"] = "\"루팅 & 스팜\"채팅 창 사용", ["Enable \"Loot & Spam\" Chat Window"] = "\"루팅 & 스팜\"채팅 창 사용",
@@ -336,6 +335,7 @@ pfUI_translation["koKR"] = {
["Font"] = nil, ["Font"] = nil,
["Font Options"] = nil, ["Font Options"] = nil,
["Font Padding"] = nil, ["Font Padding"] = nil,
["Font Size"] = nil,
["Font Style"] = nil, ["Font Style"] = nil,
["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil, ["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil,
["fps"] = "프레임", ["fps"] = "프레임",
@@ -370,7 +370,6 @@ pfUI_translation["koKR"] = {
["Health"] = nil, ["Health"] = nil,
["Health - Auto"] = "체력-자동", ["Health - Auto"] = "체력-자동",
["Healthbar"] = nil, ["Healthbar"] = nil,
["Healthbar Animation Speed"] = "체력바 애니메이션 속도",
["Health Bar Color"] = nil, ["Health Bar Color"] = nil,
["Healthbar Embedded"] = "체력바에 겹쳐보기", ["Healthbar Embedded"] = "체력바에 겹쳐보기",
["Healthbar Height"] = "체력바 높이", ["Healthbar Height"] = "체력바 높이",
@@ -395,7 +394,6 @@ pfUI_translation["koKR"] = {
["Hide Channel Names"] = "채널 이름 숨기기", ["Hide Channel Names"] = "채널 이름 숨기기",
["Hide Chat When Bags Are Opened"] = nil, ["Hide Chat When Bags Are Opened"] = nil,
["Hide Combat Log"] = "전투 기록 숨기기", ["Hide Combat Log"] = "전투 기록 숨기기",
["Hide Foreign Cooldown Animations"] = nil,
["Hide Group Frames While In Raid"] = nil, ["Hide Group Frames While In Raid"] = nil,
["Hide Healthbar On Critters"] = nil, ["Hide Healthbar On Critters"] = nil,
["Hide Healthbar On Enemy NPCs"] = nil, ["Hide Healthbar On Enemy NPCs"] = nil,
@@ -404,6 +402,7 @@ pfUI_translation["koKR"] = {
["Hide Healthbar On Friendly Players"] = nil, ["Hide Healthbar On Friendly Players"] = nil,
["Hide Healthbar On Neutral NPCs"] = nil, ["Hide Healthbar On Neutral NPCs"] = nil,
["Hide Healthbar On Totems"] = nil, ["Hide Healthbar On Totems"] = nil,
["Hide Numbers On Spell Cooldowns Up To (Seconds)"] = nil,
["Hide Timeout"] = nil, ["Hide Timeout"] = nil,
["Hide When Entering Combat"] = nil, ["Hide When Entering Combat"] = nil,
["Highlight Equipped Items"] = nil, ["Highlight Equipped Items"] = nil,
@@ -432,7 +431,6 @@ pfUI_translation["koKR"] = {
["Inherit Default Colors"] = nil, ["Inherit Default Colors"] = nil,
["Inputbox Height"] = "챗팅 입력창 높이", ["Inputbox Height"] = "챗팅 입력창 높이",
["Inputbox Width"] = "챗팅 입력창 넓이", ["Inputbox Width"] = "챗팅 입력창 넓이",
["Instant"] = "즉시",
["Integrations"] = nil, ["Integrations"] = nil,
["Invert Health Bar"] = "체력바 반전", ["Invert Health Bar"] = "체력바 반전",
["is not allowed in profile name"] = "프로필 이름에 허용되지 않습니다.", ["is not allowed in profile name"] = "프로필 이름에 허용되지 않습니다.",
@@ -477,6 +475,7 @@ pfUI_translation["koKR"] = {
["Look & Feel"] = nil, ["Look & Feel"] = nil,
["Loot"] = "룻팅", ["Loot"] = "룻팅",
["Loot & Spam"] = "룻팅 & 기타", ["Loot & Spam"] = "룻팅 & 기타",
["Loss Of Control"] = nil,
["Macro Text Color"] = nil, ["Macro Text Color"] = nil,
["Macro Text Size"] = nil, ["Macro Text Size"] = nil,
["Main Actionbar"] = nil, ["Main Actionbar"] = nil,
@@ -516,6 +515,7 @@ pfUI_translation["koKR"] = {
["Name | Health Missing"] = nil, ["Name | Health Missing"] = nil,
["Name (Linebreak) -Health Missing"] = nil, ["Name (Linebreak) -Health Missing"] = nil,
["Nameplate Border Size"] = nil, ["Nameplate Border Size"] = nil,
["Nameplate Debuffs"] = nil,
["Nameplates"] = "상바", ["Nameplates"] = "상바",
["Nameplate Width"] = "상바 넓이", ["Nameplate Width"] = "상바 넓이",
["Name (Short)"] = nil, ["Name (Short)"] = nil,
@@ -554,6 +554,7 @@ pfUI_translation["koKR"] = {
["On State Change"] = nil, ["On State Change"] = nil,
["Options"] = nil, ["Options"] = nil,
["Orientation"] = nil, ["Orientation"] = nil,
["Other Addons"] = nil,
["Other Panel: Minimap"] = "나머지 패널:미니맵", ["Other Panel: Minimap"] = "나머지 패널:미니맵",
["Outline"] = nil, ["Outline"] = nil,
["Outlines"] = nil, ["Outlines"] = nil,
@@ -582,6 +583,7 @@ pfUI_translation["koKR"] = {
["Pixel"] = nil, ["Pixel"] = nil,
["Player"] = "플레이어", ["Player"] = "플레이어",
["Player Buff Bar"] = nil, ["Player Buff Bar"] = nil,
["Player Buffs"] = nil,
["Player Castbar"] = nil, ["Player Castbar"] = nil,
["Player Debuff Bar"] = nil, ["Player Debuff Bar"] = nil,
["Player SP/Haste Display"] = nil, ["Player SP/Haste Display"] = nil,
@@ -592,6 +594,7 @@ pfUI_translation["koKR"] = {
["Portrait Alpha"] = "초상화 투명도", ["Portrait Alpha"] = "초상화 투명도",
["Portrait Height"] = "세로 높이", ["Portrait Height"] = "세로 높이",
["Portrait Position"] = "초상화 위치", ["Portrait Position"] = "초상화 위치",
["Portrait Style"] = nil,
["Portrait Width"] = "세로 너비", ["Portrait Width"] = "세로 너비",
["Powerbar"] = nil, ["Powerbar"] = nil,
["Power Bar Anchor"] = nil, ["Power Bar Anchor"] = nil,
@@ -647,6 +650,7 @@ pfUI_translation["koKR"] = {
["Resting"] = "휴식", ["Resting"] = "휴식",
["Reveal Unexplored Areas"] = nil, ["Reveal Unexplored Areas"] = nil,
["Switch to current zone"] = nil, ["Switch to current zone"] = nil,
["Reverse Sweep On"] = nil,
["Right"] = "오른쪽", ["Right"] = "오른쪽",
["Right Actionbar"] = nil, ["Right Actionbar"] = nil,
["Right Anchor"] = nil, ["Right Anchor"] = nil,
@@ -668,6 +672,7 @@ pfUI_translation["koKR"] = {
["Save & Reload"] = nil, ["Save & Reload"] = nil,
["Scale"] = nil, ["Scale"] = nil,
["Scale Border On HiDPI Displays"] = nil, ["Scale Border On HiDPI Displays"] = nil,
["Scale Font Size With Icon"] = nil,
["Scaling"] = nil, ["Scaling"] = nil,
["Screen Edge Glow Intensity"] = nil, ["Screen Edge Glow Intensity"] = nil,
["Screen Resolution"] = "화면 해상도", ["Screen Resolution"] = "화면 해상도",
@@ -727,7 +732,7 @@ pfUI_translation["koKR"] = {
["Show Loot Icon"] = nil, ["Show Loot Icon"] = nil,
["Show Macro Text"] = "매크로 텍스트 표시", ["Show Macro Text"] = "매크로 텍스트 표시",
["Show Meters By Default"] = nil, ["Show Meters By Default"] = nil,
["Show Milliseconds When Timer Runs Out"] = nil, ["Show Numbers On"] = nil,
["Show On Friendly Units"] = nil, ["Show On Friendly Units"] = nil,
["Show On Hostile Units"] = nil, ["Show On Hostile Units"] = nil,
["Show Procs Indicators"] = nil, ["Show Procs Indicators"] = nil,
@@ -745,10 +750,10 @@ pfUI_translation["koKR"] = {
["Show Spell Icon"] = nil, ["Show Spell Icon"] = nil,
["Show Spell Name"] = nil, ["Show Spell Name"] = nil,
["Show Stacks"] = nil, ["Show Stacks"] = nil,
["Show Sweep On"] = nil,
["Show Tenths Below 5 Seconds"] = nil,
["Show Text"] = nil, ["Show Text"] = nil,
["Show Time Left"] = nil,
["Show Timer"] = nil, ["Show Timer"] = nil,
["Show Timer Animation"] = nil,
["Show Timer Text"] = nil, ["Show Timer Text"] = nil,
["Show Totems Indicators"] = nil, ["Show Totems Indicators"] = nil,
["Shrink & Return"] = nil, ["Shrink & Return"] = nil,
@@ -765,8 +770,10 @@ pfUI_translation["koKR"] = {
["Soulshards"] = "영혼의 조각", ["Soulshards"] = "영혼의 조각",
["Spacing"] = nil, ["Spacing"] = nil,
["Special Recipient"] = nil, ["Special Recipient"] = nil,
["Spellbook And Character"] = nil,
["Spell Power Color"] = nil, ["Spell Power Color"] = nil,
["Square"] = nil, ["Square"] = nil,
["Stack Count Font Size"] = nil,
["Stance Bar 1"] = nil, ["Stance Bar 1"] = nil,
["Stance Bar 2"] = nil, ["Stance Bar 2"] = nil,
["Stance Bar 3"] = nil, ["Stance Bar 3"] = nil,
@@ -801,7 +808,6 @@ pfUI_translation["koKR"] = {
["Thistle Tea"] = nil, ["Thistle Tea"] = nil,
["Threshold To Trust Health Estimation"] = nil, ["Threshold To Trust Health Estimation"] = nil,
["Time"] = "시간", ["Time"] = "시간",
["Timer"] = nil,
["Time Remaining"] = nil, ["Time Remaining"] = nil,
["Timer In Minutes"] = nil, ["Timer In Minutes"] = nil,
["Timestamp Brackets"] = nil, ["Timestamp Brackets"] = nil,
@@ -812,6 +818,7 @@ pfUI_translation["koKR"] = {
["Tiny (PixelPerfect)"] = nil, ["Tiny (PixelPerfect)"] = nil,
["Toggle as Tank"] = nil, ["Toggle as Tank"] = nil,
["Tooltip"] = "툴팁", ["Tooltip"] = "툴팁",
["Tooltip Auras"] = nil,
["Tooltip Position"] = "툴팁위치", ["Tooltip Position"] = "툴팁위치",
["Tooltip Text Font"] = nil, ["Tooltip Text Font"] = nil,
["Tooltip Text Font Size"] = nil, ["Tooltip Text Font Size"] = nil,
@@ -823,11 +830,13 @@ pfUI_translation["koKR"] = {
["Total Gold"] = "총 금", ["Total Gold"] = "총 금",
["Totem Direction"] = nil, ["Totem Direction"] = nil,
["Totem Icons"] = nil, ["Totem Icons"] = nil,
["Totems"] = nil,
["Tracked Reputation"] = nil, ["Tracked Reputation"] = nil,
["Tracking Icon Size"] = nil, ["Tracking Icon Size"] = nil,
["Trigger Actions On Key Down"] = nil, ["Trigger Actions On Key Down"] = nil,
["UI-Scale"] = "UI-크기", ["UI-Scale"] = "UI-크기",
["Unbuffed"] = nil, ["Unbuffed"] = nil,
["Unit Frame Auras"] = nil,
["Unit Frame Border Size"] = "유닛프레임 테두리 크기", ["Unit Frame Border Size"] = "유닛프레임 테두리 크기",
["Unit Frame Layout"] = "유닛프레임 레이아웃", ["Unit Frame Layout"] = "유닛프레임 레이아웃",
["Unit Frames"] = "유닛프레임", ["Unit Frames"] = "유닛프레임",
@@ -854,7 +863,6 @@ pfUI_translation["koKR"] = {
["Use Custom Color Power Bar Background"] = nil, ["Use Custom Color Power Bar Background"] = nil,
["Use Custom Font Settings"] = nil, ["Use Custom Font Settings"] = nil,
["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil, ["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil,
["Use Dynamic Font Size"] = nil,
["Use Item Rarity Color For Loot-Roll Timer"] = nil, ["Use Item Rarity Color For Loot-Roll Timer"] = nil,
["Use Original Game Fonts"] = nil, ["Use Original Game Fonts"] = nil,
["Use Raid Frames To Display Group Members"] = nil, ["Use Raid Frames To Display Group Members"] = nil,
+28 -20
View File
@@ -1,4 +1,6 @@
pfUI_translation["ruRU"] = { pfUI_translation["ruRU"] = {
["2D"] = nil,
["3D"] = nil,
["3D World Unit Font"] = nil, ["3D World Unit Font"] = nil,
["Abbreviate Numbers (4200 -> 4.2k)"] = "Сокращать числа (4200 -> 4.2k)", ["Abbreviate Numbers (4200 -> 4.2k)"] = "Сокращать числа (4200 -> 4.2k)",
["Abbreviate Unit Names"] = "Сокращать имена юнитов", ["Abbreviate Unit Names"] = "Сокращать имена юнитов",
@@ -6,6 +8,7 @@ pfUI_translation["ruRU"] = {
["Actionbar"] = "Панель действий", ["Actionbar"] = "Панель действий",
["Action Bar"] = "Панель действий", ["Action Bar"] = "Панель действий",
["Action Bar Border Size"] = "Размер границы панели действий", ["Action Bar Border Size"] = "Размер границы панели действий",
["Action Bars"] = nil,
["Active Addons"] = "Активные аддоны", ["Active Addons"] = "Активные аддоны",
["Add button to the frame"] = "Добавить кнопку в окно", ["Add button to the frame"] = "Добавить кнопку в окно",
["Added button"] = "Добавлена кнопка", ["Added button"] = "Добавлена кнопка",
@@ -27,11 +30,11 @@ pfUI_translation["ruRU"] = {
["Always Show Item Comparison"] = "Всегда показывать сравнение предметов", ["Always Show Item Comparison"] = "Всегда показывать сравнение предметов",
["Always Show On Target Units"] = "Всегда показывать над выбранной целью", ["Always Show On Target Units"] = "Всегда показывать над выбранной целью",
["Always Show On Units With Missing HP"] = "Всегда показывать над целями с неполным здоровьем", ["Always Show On Units With Missing HP"] = "Всегда показывать над целями с неполным здоровьем",
["Always Use 2D Portraits"] = "Всегда использовать 2D-портреты",
["Ammo Counter"] = "Счетчик боеприпасов", ["Ammo Counter"] = "Счетчик боеприпасов",
["Anchor Bags Above Chat"] = nil, ["Anchor Bags Above Chat"] = nil,
["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "Новая установка |cff33ffccpf|rUI предлагает 4 предварительно созданных профиля дизайна. Нажмите ниже, если вы хотите загрузить один из этих профилей.", ["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "Новая установка |cff33ffccpf|rUI предлагает 4 предварительно созданных профиля дизайна. Нажмите ниже, если вы хотите загрузить один из этих профилей.",
["A new version is available"] = "Доступна новая версия", ["A new version is available"] = "Доступна новая версия",
["Animate Health And Power Bars"] = nil,
["Appearance"] = "Внешний вид", ["Appearance"] = "Внешний вид",
["Ascending"] = "По возрастанию", ["Ascending"] = "По возрастанию",
["Author"] = "Автор", ["Author"] = "Автор",
@@ -78,7 +81,7 @@ pfUI_translation["ruRU"] = {
["Buffbar Width"] = "Ширина панели баффов", ["Buffbar Width"] = "Ширина панели баффов",
["Buff/Debuff Icons"] = "Иконки баффов/дебаффов", ["Buff/Debuff Icons"] = "Иконки баффов/дебаффов",
["Buff/Debuff Indicators"] = "Индикаторы баффов/дебаффов", ["Buff/Debuff Indicators"] = "Индикаторы баффов/дебаффов",
["Buff Font Size"] = "Размер шрифта баффов", ["Buff Indicators"] = nil,
["Buff Limit"] = "Предел баффов", ["Buff Limit"] = "Предел баффов",
["Buff Position"] = "Расположение баффов", ["Buff Position"] = "Расположение баффов",
["Buffs"] = "Баффы", ["Buffs"] = "Баффы",
@@ -120,9 +123,13 @@ pfUI_translation["ruRU"] = {
["Chat Bubble Transparency"] = "Прозрачность пузыря чата", ["Chat Bubble Transparency"] = "Прозрачность пузыря чата",
["Chat Default Brackets"] = "Скобки чата", ["Chat Default Brackets"] = "Скобки чата",
["Class"] = "Класс", ["Class"] = "Класс",
["Class Icon (Round)"] = nil,
["Class Icon (Square)"] = nil,
["Clear Rolls"] = "Очистить броски", ["Clear Rolls"] = "Очистить броски",
["Click Action"] = "Действие при нажатии", ["Click Action"] = "Действие при нажатии",
["Click Casting"] = "Каст по нажатию", ["Click Casting"] = "Каст по нажатию",
["Click to undress"] = nil,
["Undress"] = nil,
["Clock"] = "Часы", ["Clock"] = "Часы",
["Close"] = "Закрыть", ["Close"] = "Закрыть",
["Collapse Empty Slots"] = nil, ["Collapse Empty Slots"] = nil,
@@ -145,21 +152,16 @@ pfUI_translation["ruRU"] = {
["Configuration"] = "Конфигурация", ["Configuration"] = "Конфигурация",
["Configure"] = "Применить", ["Configure"] = "Применить",
["Cooldown"] = "Восстановление", ["Cooldown"] = "Восстановление",
["Cooldown Color (5 Seconds Or Less)"] = nil,
["Cooldown Color (Days)"] = "Цвет восстановления (дни)", ["Cooldown Color (Days)"] = "Цвет восстановления (дни)",
["Cooldown Color (Hours)"] = "Цвет восстановления (часы)", ["Cooldown Color (Hours)"] = "Цвет восстановления (часы)",
["Cooldown Color (Less than 3 Sec)"] = "Цвет восстановления (менее 3 секунд)",
["Cooldown Color (Minutes)"] = "Цвет восстановления (минуты)", ["Cooldown Color (Minutes)"] = "Цвет восстановления (минуты)",
["Cooldown Color (Seconds)"] = "Цвет восстановления (секунды)", ["Cooldown Color (Seconds)"] = "Цвет восстановления (секунды)",
["Cooldown / Durations"] = "Восстановление / Длительность", ["Cooldown / Durations"] = "Восстановление / Длительность",
["Cooldown Text Font"] = nil,
["Cooldown Text Font Size"] = "Текст времени восстановления(CD)",
["Cooldown Text Font Size (Blizzard Frames)"] = "Текст времени восстановления (окна Blizzard)",
["Cooldown Text Font Size (Foreign Frames)"] = "Текст времени восстановления (Сторонние окна)",
["Cooldown Text Size"] = "Размер текста восстановления",
["Cooldown Text Threshold"] = "Текст порога восстановления", ["Cooldown Text Threshold"] = "Текст порога восстановления",
["Cooldown Text Time Threshold"] = "Порог текста восстановления",
["Coordinates Location"] = "Расположение координат", ["Coordinates Location"] = "Расположение координат",
["Coordinates On Minimap"] = "Координаты на миникарте", ["Coordinates On Minimap"] = "Координаты на миникарте",
["Copied to clipboard"] = nil,
["Count"] = "Счет", ["Count"] = "Счет",
["Create Profile"] = "Создать профиль", ["Create Profile"] = "Создать профиль",
["Ctrl-Click"] = "Ctrl+нажатие", ["Ctrl-Click"] = "Ctrl+нажатие",
@@ -276,12 +278,9 @@ pfUI_translation["ruRU"] = {
["Enable Custom Incoming Whispers Layout"] = "Включить пользовательский макет входящего шепота", ["Enable Custom Incoming Whispers Layout"] = "Включить пользовательский макет входящего шепота",
["Enable Debuff Display"] = "Включить отображение дебаффов", ["Enable Debuff Display"] = "Включить отображение дебаффов",
["Enable Debuffs"] = "Включить дебаффы", ["Enable Debuffs"] = "Включить дебаффы",
["Enable Durations On Blizzard Frames"] = "Включить длительность на окнах Blizzard",
["Enable Durations On Foreign Frames"] = "Включить длительность на сторонних окнах",
["Enable Energy Ticks"] = "Включить восполнение энергии", ["Enable Energy Ticks"] = "Включить восполнение энергии",
["Enable Extended Guild Information"] = "Включить расширенную информацию о гильдии", ["Enable Extended Guild Information"] = "Включить расширенную информацию о гильдии",
["Enable Frame Shadow"] = "Включить тень окон", ["Enable Frame Shadow"] = "Включить тень окон",
["Enable Full-Text Search"] = nil,
["Enable Indicators"] = "Включить индикаторы", ["Enable Indicators"] = "Включить индикаторы",
["Enable Item Quality Color For Equipment Only"] = "Включить цвет качества предметов только для экипировки", ["Enable Item Quality Color For Equipment Only"] = "Включить цвет качества предметов только для экипировки",
["Enable \"Loot & Spam\" Chat Window"] = "Включить окно чата \"Добыча & Спам\"", ["Enable \"Loot & Spam\" Chat Window"] = "Включить окно чата \"Добыча & Спам\"",
@@ -336,6 +335,7 @@ pfUI_translation["ruRU"] = {
["Font"] = "Шрифт", ["Font"] = "Шрифт",
["Font Options"] = "Шрифт", ["Font Options"] = "Шрифт",
["Font Padding"] = "Отступ шрифта", ["Font Padding"] = "Отступ шрифта",
["Font Size"] = nil,
["Font Style"] = "Стиль шрифта", ["Font Style"] = "Стиль шрифта",
["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = "Границы Blizzard принудительно (|cffffaaaaЭкспериментально|r)", ["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = "Границы Blizzard принудительно (|cffffaaaaЭкспериментально|r)",
["fps"] = "кад./сек.", ["fps"] = "кад./сек.",
@@ -370,7 +370,6 @@ pfUI_translation["ruRU"] = {
["Health"] = "Здоровье", ["Health"] = "Здоровье",
["Health - Auto"] = "Здоровье - автоматически", ["Health - Auto"] = "Здоровье - автоматически",
["Healthbar"] = "Панель здоровья", ["Healthbar"] = "Панель здоровья",
["Healthbar Animation Speed"] = "Скорость анимации панели здоровья",
["Health Bar Color"] = "Цвет панели здоровья", ["Health Bar Color"] = "Цвет панели здоровья",
["Healthbar Embedded"] = "На панели здоровья", ["Healthbar Embedded"] = "На панели здоровья",
["Healthbar Height"] = "Высота панели здоровья", ["Healthbar Height"] = "Высота панели здоровья",
@@ -395,7 +394,6 @@ pfUI_translation["ruRU"] = {
["Hide Channel Names"] = "Скрыть названия каналов", ["Hide Channel Names"] = "Скрыть названия каналов",
["Hide Chat When Bags Are Opened"] = "Скрыть чат, когда сумки открыты", ["Hide Chat When Bags Are Opened"] = "Скрыть чат, когда сумки открыты",
["Hide Combat Log"] = "Скрыть журнал боя", ["Hide Combat Log"] = "Скрыть журнал боя",
["Hide Foreign Cooldown Animations"] = "Скрыть сторонние анимации перезарядки",
["Hide Group Frames While In Raid"] = "Скрыть окно группы, когда в рейде", ["Hide Group Frames While In Raid"] = "Скрыть окно группы, когда в рейде",
["Hide Healthbar On Critters"] = "Скрыть панель здоровья существ", ["Hide Healthbar On Critters"] = "Скрыть панель здоровья существ",
["Hide Healthbar On Enemy NPCs"] = "Скрыть панель здоровья вражеских NPC", ["Hide Healthbar On Enemy NPCs"] = "Скрыть панель здоровья вражеских NPC",
@@ -404,6 +402,7 @@ pfUI_translation["ruRU"] = {
["Hide Healthbar On Friendly Players"] = "Скрыть панель здоровья дружеских игроков", ["Hide Healthbar On Friendly Players"] = "Скрыть панель здоровья дружеских игроков",
["Hide Healthbar On Neutral NPCs"] = "Скрыть панель здоровья нейтральных NPC", ["Hide Healthbar On Neutral NPCs"] = "Скрыть панель здоровья нейтральных NPC",
["Hide Healthbar On Totems"] = "Скрыть панель здоровья тотемов", ["Hide Healthbar On Totems"] = "Скрыть панель здоровья тотемов",
["Hide Numbers On Spell Cooldowns Up To (Seconds)"] = nil,
["Hide Timeout"] = "Время до скрытия", ["Hide Timeout"] = "Время до скрытия",
["Hide When Entering Combat"] = "Скрыть при вхождении в режим боя", ["Hide When Entering Combat"] = "Скрыть при вхождении в режим боя",
["Highlight Equipped Items"] = "Выделять экипированные предметы", ["Highlight Equipped Items"] = "Выделять экипированные предметы",
@@ -432,7 +431,6 @@ pfUI_translation["ruRU"] = {
["Inherit Default Colors"] = "Наследовать цвета по умолчанию", ["Inherit Default Colors"] = "Наследовать цвета по умолчанию",
["Inputbox Height"] = "Высота поля ввода", ["Inputbox Height"] = "Высота поля ввода",
["Inputbox Width"] = "Ширина поля ввода", ["Inputbox Width"] = "Ширина поля ввода",
["Instant"] = "Мгновенно",
["Integrations"] = "Встраиваемые", ["Integrations"] = "Встраиваемые",
["Invert Health Bar"] = "Инвертировать панель здоровья", ["Invert Health Bar"] = "Инвертировать панель здоровья",
["is not allowed in profile name"] = "не разрешено в имени профиля", ["is not allowed in profile name"] = "не разрешено в имени профиля",
@@ -477,6 +475,7 @@ pfUI_translation["ruRU"] = {
["Look & Feel"] = "Смотреть и чувствовать", ["Look & Feel"] = "Смотреть и чувствовать",
["Loot"] = "Добыча", ["Loot"] = "Добыча",
["Loot & Spam"] = "Добыча & Спам", ["Loot & Spam"] = "Добыча & Спам",
["Loss Of Control"] = nil,
["Macro Text Color"] = "Цвет текста макросов", ["Macro Text Color"] = "Цвет текста макросов",
["Macro Text Size"] = "Размер текста макросов", ["Macro Text Size"] = "Размер текста макросов",
["Main Actionbar"] = "Основная", ["Main Actionbar"] = "Основная",
@@ -516,6 +515,7 @@ pfUI_translation["ruRU"] = {
["Name | Health Missing"] = "Имя | Отсутствующее здоровье", ["Name | Health Missing"] = "Имя | Отсутствующее здоровье",
["Name (Linebreak) -Health Missing"] = "Имя (разрыв линии) -Отсутствует здоровье", ["Name (Linebreak) -Health Missing"] = "Имя (разрыв линии) -Отсутствует здоровье",
["Nameplate Border Size"] = "Размер границы индикатора здоровья", ["Nameplate Border Size"] = "Размер границы индикатора здоровья",
["Nameplate Debuffs"] = nil,
["Nameplates"] = "Индикаторы здоровья", ["Nameplates"] = "Индикаторы здоровья",
["Nameplate Width"] = "Ширина индикатора здоровья", ["Nameplate Width"] = "Ширина индикатора здоровья",
["Name (Short)"] = "Короткое имя", ["Name (Short)"] = "Короткое имя",
@@ -554,6 +554,7 @@ pfUI_translation["ruRU"] = {
["On State Change"] = "Изменение статуса", ["On State Change"] = "Изменение статуса",
["Options"] = "Опции", ["Options"] = "Опции",
["Orientation"] = "Ориентация", ["Orientation"] = "Ориентация",
["Other Addons"] = nil,
["Other Panel: Minimap"] = "Другая панель: миникарта", ["Other Panel: Minimap"] = "Другая панель: миникарта",
["Outline"] = "Контурный", -- font style ["Outline"] = "Контурный", -- font style
["Outlines"] = "Контуры", ["Outlines"] = "Контуры",
@@ -582,6 +583,7 @@ pfUI_translation["ruRU"] = {
["Pixel"] = "пиксель", ["Pixel"] = "пиксель",
["Player"] = "Игрок", ["Player"] = "Игрок",
["Player Buff Bar"] = "Панель баффов игрока", ["Player Buff Bar"] = "Панель баффов игрока",
["Player Buffs"] = nil,
["Player Castbar"] = "Панель применения игрока", ["Player Castbar"] = "Панель применения игрока",
["Player Debuff Bar"] = "Панель дебаффов игрока", ["Player Debuff Bar"] = "Панель дебаффов игрока",
["Player SP/Haste Display"] = nil, ["Player SP/Haste Display"] = nil,
@@ -592,6 +594,7 @@ pfUI_translation["ruRU"] = {
["Portrait Alpha"] = "Прозрачность портрета", ["Portrait Alpha"] = "Прозрачность портрета",
["Portrait Height"] = "Рост портрета", ["Portrait Height"] = "Рост портрета",
["Portrait Position"] = "Расположение портрета", ["Portrait Position"] = "Расположение портрета",
["Portrait Style"] = nil,
["Portrait Width"] = "Ширина портрета", ["Portrait Width"] = "Ширина портрета",
["Powerbar"] = "Панель силы (мана, ярость, энергия, фокус)", ["Powerbar"] = "Панель силы (мана, ярость, энергия, фокус)",
["Power Bar Anchor"] = "Привязка панели силы", ["Power Bar Anchor"] = "Привязка панели силы",
@@ -647,6 +650,7 @@ pfUI_translation["ruRU"] = {
["Resting"] = "Отдыхающий", ["Resting"] = "Отдыхающий",
["Reveal Unexplored Areas"] = "Показывать неисследованные области", ["Reveal Unexplored Areas"] = "Показывать неисследованные области",
["Switch to current zone"] = "Перейти к текущей зоне", ["Switch to current zone"] = "Перейти к текущей зоне",
["Reverse Sweep On"] = nil,
["Right"] = "Справа", ["Right"] = "Справа",
["Right Actionbar"] = "Правая", ["Right Actionbar"] = "Правая",
["Right Anchor"] = nil, ["Right Anchor"] = nil,
@@ -668,6 +672,7 @@ pfUI_translation["ruRU"] = {
["Save & Reload"] = "Сохранить и перезагрузить", ["Save & Reload"] = "Сохранить и перезагрузить",
["Scale"] = "Масштаб", ["Scale"] = "Масштаб",
["Scale Border On HiDPI Displays"] = "Масштабировать границы на HiDPI мониторах", ["Scale Border On HiDPI Displays"] = "Масштабировать границы на HiDPI мониторах",
["Scale Font Size With Icon"] = nil,
["Scaling"] = "Масштаб интерфейса", ["Scaling"] = "Масштаб интерфейса",
["Screen Edge Glow Intensity"] = "Интенсивность свечения на краях экрана", ["Screen Edge Glow Intensity"] = "Интенсивность свечения на краях экрана",
["Screen Resolution"] = "Разрешение экрана", ["Screen Resolution"] = "Разрешение экрана",
@@ -727,7 +732,7 @@ pfUI_translation["ruRU"] = {
["Show Loot Icon"] = "Показать иконку добычи", ["Show Loot Icon"] = "Показать иконку добычи",
["Show Macro Text"] = "Показать текст макросов", ["Show Macro Text"] = "Показать текст макросов",
["Show Meters By Default"] = "Показать счетчики по умолчанию", ["Show Meters By Default"] = "Показать счетчики по умолчанию",
["Show Milliseconds When Timer Runs Out"] = "Показать миллисекунды, когда таймер заканчивается", ["Show Numbers On"] = nil,
["Show On Friendly Units"] = "Показать на дружественных юнитах", ["Show On Friendly Units"] = "Показать на дружественных юнитах",
["Show On Hostile Units"] = "Показать на вражеских юнитах", ["Show On Hostile Units"] = "Показать на вражеских юнитах",
["Show Procs Indicators"] = "Показать проки (Procs)", ["Show Procs Indicators"] = "Показать проки (Procs)",
@@ -745,10 +750,10 @@ pfUI_translation["ruRU"] = {
["Show Spell Icon"] = "Показать иконку заклинания", ["Show Spell Icon"] = "Показать иконку заклинания",
["Show Spell Name"] = "Показать название заклинания", ["Show Spell Name"] = "Показать название заклинания",
["Show Stacks"] = "Показать стаки", ["Show Stacks"] = "Показать стаки",
["Show Sweep On"] = nil,
["Show Tenths Below 5 Seconds"] = nil,
["Show Text"] = nil, ["Show Text"] = nil,
["Show Time Left"] = "Показать оставшееся время",
["Show Timer"] = "Показать таймер", ["Show Timer"] = "Показать таймер",
["Show Timer Animation"] = "Показать анимацию таймера",
["Show Timer Text"] = "Показать текст таймера", ["Show Timer Text"] = "Показать текст таймера",
["Show Totems Indicators"] = "Показать индикаторы тотемов", ["Show Totems Indicators"] = "Показать индикаторы тотемов",
["Shrink & Return"] = "Сжатие и возврат", ["Shrink & Return"] = "Сжатие и возврат",
@@ -765,8 +770,10 @@ pfUI_translation["ruRU"] = {
["Soulshards"] = "Камни душ", ["Soulshards"] = "Камни душ",
["Spacing"] = "Расстояние", ["Spacing"] = "Расстояние",
["Special Recipient"] = "Конкретный получатель", ["Special Recipient"] = "Конкретный получатель",
["Spellbook And Character"] = nil,
["Spell Power Color"] = nil, ["Spell Power Color"] = nil,
["Square"] = "Квадрат", ["Square"] = "Квадрат",
["Stack Count Font Size"] = nil,
["Stance Bar 1"] = "Панель 1-ой стойки", ["Stance Bar 1"] = "Панель 1-ой стойки",
["Stance Bar 2"] = "Панель 2-ой стойки", ["Stance Bar 2"] = "Панель 2-ой стойки",
["Stance Bar 3"] = "Панель 3-ей стойки", ["Stance Bar 3"] = "Панель 3-ей стойки",
@@ -801,7 +808,6 @@ pfUI_translation["ruRU"] = {
["Thistle Tea"] = nil, ["Thistle Tea"] = nil,
["Threshold To Trust Health Estimation"] = "Точность подсчетов здоровья", ["Threshold To Trust Health Estimation"] = "Точность подсчетов здоровья",
["Time"] = "Время", ["Time"] = "Время",
["Timer"] = "Таймер",
["Time Remaining"] = "Время до нового уровня", ["Time Remaining"] = "Время до нового уровня",
["Timer In Minutes"] = "Таймер в минутах", ["Timer In Minutes"] = "Таймер в минутах",
["Timestamp Brackets"] = "Скобки отметок времени", ["Timestamp Brackets"] = "Скобки отметок времени",
@@ -812,6 +818,7 @@ pfUI_translation["ruRU"] = {
["Tiny (PixelPerfect)"] = "Крошечный (идеальный пиксель)", ["Tiny (PixelPerfect)"] = "Крошечный (идеальный пиксель)",
["Toggle as Tank"] = "Переключить как танк", ["Toggle as Tank"] = "Переключить как танк",
["Tooltip"] = "Подсказка", ["Tooltip"] = "Подсказка",
["Tooltip Auras"] = nil,
["Tooltip Position"] = "Расположение подсказки", ["Tooltip Position"] = "Расположение подсказки",
["Tooltip Text Font"] = nil, ["Tooltip Text Font"] = nil,
["Tooltip Text Font Size"] = nil, ["Tooltip Text Font Size"] = nil,
@@ -823,11 +830,13 @@ pfUI_translation["ruRU"] = {
["Total Gold"] = "Всего золота", ["Total Gold"] = "Всего золота",
["Totem Direction"] = "Направление тотемов", ["Totem Direction"] = "Направление тотемов",
["Totem Icons"] = "Иконки тотемов", ["Totem Icons"] = "Иконки тотемов",
["Totems"] = nil,
["Tracked Reputation"] = "Отслеживаемая репутация", ["Tracked Reputation"] = "Отслеживаемая репутация",
["Tracking Icon Size"] = "Размер иконки отслеживания", ["Tracking Icon Size"] = "Размер иконки отслеживания",
["Trigger Actions On Key Down"] = "Активация действий при нажатии клавиши (а не ее отпускании)", ["Trigger Actions On Key Down"] = "Активация действий при нажатии клавиши (а не ее отпускании)",
["UI-Scale"] = "Масштаб пользовательского интерфейса", ["UI-Scale"] = "Масштаб пользовательского интерфейса",
["Unbuffed"] = "Без баффа", ["Unbuffed"] = "Без баффа",
["Unit Frame Auras"] = nil,
["Unit Frame Border Size"] = "Размер границы окна юнита", ["Unit Frame Border Size"] = "Размер границы окна юнита",
["Unit Frame Layout"] = "Макет окна юнита", ["Unit Frame Layout"] = "Макет окна юнита",
["Unit Frames"] = "Окна юнита", ["Unit Frames"] = "Окна юнита",
@@ -854,7 +863,6 @@ pfUI_translation["ruRU"] = {
["Use Custom Color Power Bar Background"] = "Использовать пользовательский цвет фона панели силы", ["Use Custom Color Power Bar Background"] = "Использовать пользовательский цвет фона панели силы",
["Use Custom Font Settings"] = "Использовать пользовательские настройки шрифта", ["Use Custom Font Settings"] = "Использовать пользовательские настройки шрифта",
["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil, ["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil,
["Use Dynamic Font Size"] = "Использовать динамический размер шрифта",
["Use Item Rarity Color For Loot-Roll Timer"] = "Использовать цвет качества предмета для таймера распределения добычи", ["Use Item Rarity Color For Loot-Roll Timer"] = "Использовать цвет качества предмета для таймера распределения добычи",
["Use Original Game Fonts"] = "Использовать оригинальные игровые шрифты", ["Use Original Game Fonts"] = "Использовать оригинальные игровые шрифты",
["Use Raid Frames To Display Group Members"] = "Использовать окна рейда для отображения членов группы", ["Use Raid Frames To Display Group Members"] = "Использовать окна рейда для отображения членов группы",
+28 -20
View File
@@ -1,4 +1,6 @@
pfUI_translation["zhCN"] = { pfUI_translation["zhCN"] = {
["2D"] = nil,
["3D"] = nil,
["3D World Unit Font"] = "3D世界单位字体", ["3D World Unit Font"] = "3D世界单位字体",
["Abbreviate Numbers (4200 -> 4.2k)"] = "缩写数字格式[4200为4.2K]", ["Abbreviate Numbers (4200 -> 4.2k)"] = "缩写数字格式[4200为4.2K]",
["Abbreviate Unit Names"] = "缩写单位名称", ["Abbreviate Unit Names"] = "缩写单位名称",
@@ -6,6 +8,7 @@ pfUI_translation["zhCN"] = {
["Actionbar"] = "动作条", ["Actionbar"] = "动作条",
["Action Bar"] = "动作条", ["Action Bar"] = "动作条",
["Action Bar Border Size"] = "动作条边框大小", ["Action Bar Border Size"] = "动作条边框大小",
["Action Bars"] = nil,
["Active Addons"] = "激活的插件", ["Active Addons"] = "激活的插件",
["Add button to the frame"] = "添加按钮到框架", ["Add button to the frame"] = "添加按钮到框架",
["Added button"] = "已添加按钮", ["Added button"] = "已添加按钮",
@@ -27,11 +30,11 @@ pfUI_translation["zhCN"] = {
["Always Show Item Comparison"] = "始终显示装备比较(或按SHIFT键)", ["Always Show Item Comparison"] = "始终显示装备比较(或按SHIFT键)",
["Always Show On Target Units"] = "始终在目标单位上显示", ["Always Show On Target Units"] = "始终在目标单位上显示",
["Always Show On Units With Missing HP"] = "始终在未满血单位上显示", ["Always Show On Units With Missing HP"] = "始终在未满血单位上显示",
["Always Use 2D Portraits"] = "始终使用2D头像",
["Ammo Counter"] = "弹药数量", ["Ammo Counter"] = "弹药数量",
["Anchor Bags Above Chat"] = "将背包锚定在聊天框上方", ["Anchor Bags Above Chat"] = "将背包锚定在聊天框上方",
["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "pfUI的新安装自带4以下四种预设风格.点击下方可选择其一", ["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "pfUI的新安装自带4以下四种预设风格.点击下方可选择其一",
["A new version is available"] = "发现新版本!", ["A new version is available"] = "发现新版本!",
["Animate Health And Power Bars"] = nil,
["Appearance"] = "外观设置", ["Appearance"] = "外观设置",
["Ascending"] = "上移", ["Ascending"] = "上移",
["Author"] = "作者", ["Author"] = "作者",
@@ -78,7 +81,7 @@ pfUI_translation["zhCN"] = {
["Buffbar Width"] = "Buff条宽度", ["Buffbar Width"] = "Buff条宽度",
["Buff/Debuff Icons"] = "Buff/Debuff图标", ["Buff/Debuff Icons"] = "Buff/Debuff图标",
["Buff/Debuff Indicators"] = "Buff/Debuff指示器", ["Buff/Debuff Indicators"] = "Buff/Debuff指示器",
["Buff Font Size"] = "Buff字体大小", ["Buff Indicators"] = nil,
["Buff Limit"] = "Buff总数量", ["Buff Limit"] = "Buff总数量",
["Buff Position"] = "Buff显示的位置", ["Buff Position"] = "Buff显示的位置",
["Buffs"] = "Buff(增益)", ["Buffs"] = "Buff(增益)",
@@ -120,9 +123,13 @@ pfUI_translation["zhCN"] = {
["Chat Bubble Transparency"] = "聊天框气泡效果透明度", ["Chat Bubble Transparency"] = "聊天框气泡效果透明度",
["Chat Default Brackets"] = "聊天框默认括号", ["Chat Default Brackets"] = "聊天框默认括号",
["Class"] = "职业", ["Class"] = "职业",
["Class Icon (Round)"] = nil,
["Class Icon (Square)"] = nil,
["Clear Rolls"] = "清除Roll点", ["Clear Rolls"] = "清除Roll点",
["Click Action"] = "点击操作", ["Click Action"] = "点击操作",
["Click Casting"] = "点击施法", ["Click Casting"] = "点击施法",
["Click to undress"] = nil,
["Undress"] = nil,
["Clock"] = "时间", ["Clock"] = "时间",
["Close"] = "关闭", ["Close"] = "关闭",
["Collapse Empty Slots"] = nil, ["Collapse Empty Slots"] = nil,
@@ -145,21 +152,16 @@ pfUI_translation["zhCN"] = {
["Configuration"] = "配置", ["Configuration"] = "配置",
["Configure"] = "配置", ["Configure"] = "配置",
["Cooldown"] = "冷却时间", ["Cooldown"] = "冷却时间",
["Cooldown Color (5 Seconds Or Less)"] = nil,
["Cooldown Color (Days)"] = "技能冷却时间颜色[天]", ["Cooldown Color (Days)"] = "技能冷却时间颜色[天]",
["Cooldown Color (Hours)"] = "技能冷却时间颜色[时]", ["Cooldown Color (Hours)"] = "技能冷却时间颜色[时]",
["Cooldown Color (Less than 3 Sec)"] = "技能冷却时间颜色[少于3秒]",
["Cooldown Color (Minutes)"] = "技能冷却时间颜色[分]", ["Cooldown Color (Minutes)"] = "技能冷却时间颜色[分]",
["Cooldown Color (Seconds)"] = "技能冷却时间颜色[秒]", ["Cooldown Color (Seconds)"] = "技能冷却时间颜色[秒]",
["Cooldown / Durations"] = "冷却 / 时长", ["Cooldown / Durations"] = "冷却 / 时长",
["Cooldown Text Font"] = "Debuff计时字体",
["Cooldown Text Font Size"] = "Debuff计时文字大小",
["Cooldown Text Font Size (Blizzard Frames)"] = "Debuff计时文字大小(暴雪姓名板)",
["Cooldown Text Font Size (Foreign Frames)"] = "Debuff计时文字大小(插件姓名板)",
["Cooldown Text Size"] = "技能冷却文字大小",
["Cooldown Text Threshold"] = "冷却监控阈值(只监控大于该数值的技能)", ["Cooldown Text Threshold"] = "冷却监控阈值(只监控大于该数值的技能)",
["Cooldown Text Time Threshold"] = "技能冷却时间文字临界值",
["Coordinates Location"] = "坐标位置", ["Coordinates Location"] = "坐标位置",
["Coordinates On Minimap"] = "小地图上的坐标", ["Coordinates On Minimap"] = "小地图上的坐标",
["Copied to clipboard"] = nil,
["Count"] = "计数器", ["Count"] = "计数器",
["Create Profile"] = "新建配置", ["Create Profile"] = "新建配置",
["Ctrl-Click"] = "CTRL点击", ["Ctrl-Click"] = "CTRL点击",
@@ -276,12 +278,9 @@ pfUI_translation["zhCN"] = {
["Enable Custom Incoming Whispers Layout"] = "启用私聊样式", ["Enable Custom Incoming Whispers Layout"] = "启用私聊样式",
["Enable Debuff Display"] = "启用Debuff显示", ["Enable Debuff Display"] = "启用Debuff显示",
["Enable Debuffs"] = "显示Debuff", ["Enable Debuffs"] = "显示Debuff",
["Enable Durations On Blizzard Frames"] = "在暴雪栏显示冷却倒计时",
["Enable Durations On Foreign Frames"] = "在技能栏显示冷却倒计时",
["Enable Energy Ticks"] = "显示能量刻度", ["Enable Energy Ticks"] = "显示能量刻度",
["Enable Extended Guild Information"] = "公会信息扩展显示", ["Enable Extended Guild Information"] = "公会信息扩展显示",
["Enable Frame Shadow"] = "启用框架阴影", ["Enable Frame Shadow"] = "启用框架阴影",
["Enable Full-Text Search"] = "启用全文搜索",
["Enable Indicators"] = "启用指示器", ["Enable Indicators"] = "启用指示器",
["Enable Item Quality Color For Equipment Only"] = "仅在装备上显示品质颜色", ["Enable Item Quality Color For Equipment Only"] = "仅在装备上显示品质颜色",
["Enable \"Loot & Spam\" Chat Window"] = "启用[拾取、综合]聊天窗口", ["Enable \"Loot & Spam\" Chat Window"] = "启用[拾取、综合]聊天窗口",
@@ -336,6 +335,7 @@ pfUI_translation["zhCN"] = {
["Font"] = "字体", ["Font"] = "字体",
["Font Options"] = "字体设置", ["Font Options"] = "字体设置",
["Font Padding"] = "字体偏移", ["Font Padding"] = "字体偏移",
["Font Size"] = nil,
["Font Style"] = "字体风格", ["Font Style"] = "字体风格",
["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = "强制显示暴雪边框(|cffffaaaa测试功能|r)", ["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = "强制显示暴雪边框(|cffffaaaa测试功能|r)",
["fps"] = "帧", ["fps"] = "帧",
@@ -370,7 +370,6 @@ pfUI_translation["zhCN"] = {
["Health"] = "生命值", ["Health"] = "生命值",
["Health - Auto"] = "动态生命值和百分比", ["Health - Auto"] = "动态生命值和百分比",
["Healthbar"] = "血条", ["Healthbar"] = "血条",
["Healthbar Animation Speed"] = "掉血动画速度",
["Health Bar Color"] = "血条颜色", ["Health Bar Color"] = "血条颜色",
["Healthbar Embedded"] = "血条上显示动态头像", ["Healthbar Embedded"] = "血条上显示动态头像",
["Healthbar Height"] = "血条高度", ["Healthbar Height"] = "血条高度",
@@ -395,7 +394,6 @@ pfUI_translation["zhCN"] = {
["Hide Channel Names"] = "隐藏频道名称", ["Hide Channel Names"] = "隐藏频道名称",
["Hide Chat When Bags Are Opened"] = "打开背包后隐藏聊天框", ["Hide Chat When Bags Are Opened"] = "打开背包后隐藏聊天框",
["Hide Combat Log"] = "隐藏战斗日志", ["Hide Combat Log"] = "隐藏战斗日志",
["Hide Foreign Cooldown Animations"] = "隐藏技能冷却动画",
["Hide Group Frames While In Raid"] = "在团队框架下隐藏小队框架", ["Hide Group Frames While In Raid"] = "在团队框架下隐藏小队框架",
["Hide Healthbar On Critters"] = "隐藏小动物血条", ["Hide Healthbar On Critters"] = "隐藏小动物血条",
["Hide Healthbar On Enemy NPCs"] = "隐藏敌方NPCs血条", ["Hide Healthbar On Enemy NPCs"] = "隐藏敌方NPCs血条",
@@ -404,6 +402,7 @@ pfUI_translation["zhCN"] = {
["Hide Healthbar On Friendly Players"] = "隐藏友好玩家血条", ["Hide Healthbar On Friendly Players"] = "隐藏友好玩家血条",
["Hide Healthbar On Neutral NPCs"] = "隐藏中立单位血条", ["Hide Healthbar On Neutral NPCs"] = "隐藏中立单位血条",
["Hide Healthbar On Totems"] = "隐藏图腾血条", ["Hide Healthbar On Totems"] = "隐藏图腾血条",
["Hide Numbers On Spell Cooldowns Up To (Seconds)"] = nil,
["Hide Timeout"] = "超时隐藏", ["Hide Timeout"] = "超时隐藏",
["Hide When Entering Combat"] = "进入战斗时隐藏", ["Hide When Entering Combat"] = "进入战斗时隐藏",
["Highlight Equipped Items"] = "高亮已装备的物品", ["Highlight Equipped Items"] = "高亮已装备的物品",
@@ -432,7 +431,6 @@ pfUI_translation["zhCN"] = {
["Inherit Default Colors"] = "继承默认颜色", ["Inherit Default Colors"] = "继承默认颜色",
["Inputbox Height"] = "输入框高度", ["Inputbox Height"] = "输入框高度",
["Inputbox Width"] = "输入框宽度", ["Inputbox Width"] = "输入框宽度",
["Instant"] = "极快",
["Integrations"] = "整合", ["Integrations"] = "整合",
["Invert Health Bar"] = "血量反色显示", ["Invert Health Bar"] = "血量反色显示",
["is not allowed in profile name"] = "在配置文件名中不允许", ["is not allowed in profile name"] = "在配置文件名中不允许",
@@ -477,6 +475,7 @@ pfUI_translation["zhCN"] = {
["Look & Feel"] = "外观和风格", ["Look & Feel"] = "外观和风格",
["Loot"] = "拾取", ["Loot"] = "拾取",
["Loot & Spam"] = "拾取 & 聊天", ["Loot & Spam"] = "拾取 & 聊天",
["Loss Of Control"] = nil,
["Macro Text Color"] = "宏文本颜色", ["Macro Text Color"] = "宏文本颜色",
["Macro Text Size"] = "宏文本大小", ["Macro Text Size"] = "宏文本大小",
["Main Actionbar"] = "主动作条", ["Main Actionbar"] = "主动作条",
@@ -516,6 +515,7 @@ pfUI_translation["zhCN"] = {
["Name | Health Missing"] = "名字 | 失去的生命值", ["Name | Health Missing"] = "名字 | 失去的生命值",
["Name (Linebreak) -Health Missing"] = "名字 (换行符) -失去的生命值", ["Name (Linebreak) -Health Missing"] = "名字 (换行符) -失去的生命值",
["Nameplate Border Size"] = "姓名板边框尺寸", ["Nameplate Border Size"] = "姓名板边框尺寸",
["Nameplate Debuffs"] = nil,
["Nameplates"] = "姓名板", ["Nameplates"] = "姓名板",
["Nameplate Width"] = "姓名板宽度", ["Nameplate Width"] = "姓名板宽度",
["Name (Short)"] = "名字 (短)", ["Name (Short)"] = "名字 (短)",
@@ -554,6 +554,7 @@ pfUI_translation["zhCN"] = {
["On State Change"] = "状态改变时", ["On State Change"] = "状态改变时",
["Options"] = "设置", ["Options"] = "设置",
["Orientation"] = "方向", ["Orientation"] = "方向",
["Other Addons"] = nil,
["Other Panel: Minimap"] = "小地图面板", ["Other Panel: Minimap"] = "小地图面板",
["Outline"] = "轮廓", ["Outline"] = "轮廓",
["Outlines"] = "轮廓线", ["Outlines"] = "轮廓线",
@@ -582,6 +583,7 @@ pfUI_translation["zhCN"] = {
["Pixel"] = "像素", ["Pixel"] = "像素",
["Player"] = "玩家", ["Player"] = "玩家",
["Player Buff Bar"] = "玩家Buffs条", ["Player Buff Bar"] = "玩家Buffs条",
["Player Buffs"] = nil,
["Player Castbar"] = "玩家施法条", ["Player Castbar"] = "玩家施法条",
["Player Debuff Bar"] = "玩家Debuffs条", ["Player Debuff Bar"] = "玩家Debuffs条",
["Player SP/Haste Display"] = nil, ["Player SP/Haste Display"] = nil,
@@ -592,6 +594,7 @@ pfUI_translation["zhCN"] = {
["Portrait Alpha"] = "人偶透明度", ["Portrait Alpha"] = "人偶透明度",
["Portrait Height"] = "纵向高度", ["Portrait Height"] = "纵向高度",
["Portrait Position"] = "人偶头像位置", ["Portrait Position"] = "人偶头像位置",
["Portrait Style"] = nil,
["Portrait Width"] = "纵向宽度", ["Portrait Width"] = "纵向宽度",
["Powerbar"] = "能量(蓝)条", ["Powerbar"] = "能量(蓝)条",
["Power Bar Anchor"] = "能量条对齐方式(以血条为锚点)", ["Power Bar Anchor"] = "能量条对齐方式(以血条为锚点)",
@@ -647,6 +650,7 @@ pfUI_translation["zhCN"] = {
["Resting"] = "休息中", ["Resting"] = "休息中",
["Reveal Unexplored Areas"] = "展示未勘探的地区", ["Reveal Unexplored Areas"] = "展示未勘探的地区",
["Switch to current zone"] = nil, ["Switch to current zone"] = nil,
["Reverse Sweep On"] = nil,
["Right"] = "右边", ["Right"] = "右边",
["Right Actionbar"] = "右侧动作条", ["Right Actionbar"] = "右侧动作条",
["Right Anchor"] = "右锚点", ["Right Anchor"] = "右锚点",
@@ -668,6 +672,7 @@ pfUI_translation["zhCN"] = {
["Save & Reload"] = "保存并重载", ["Save & Reload"] = "保存并重载",
["Scale"] = "比例", ["Scale"] = "比例",
["Scale Border On HiDPI Displays"] = "缩放高DPI显示器上的边框", ["Scale Border On HiDPI Displays"] = "缩放高DPI显示器上的边框",
["Scale Font Size With Icon"] = nil,
["Scaling"] = "UI缩放", ["Scaling"] = "UI缩放",
["Screen Edge Glow Intensity"] = "屏幕边缘发光强度", ["Screen Edge Glow Intensity"] = "屏幕边缘发光强度",
["Screen Resolution"] = "屏幕分辨率", ["Screen Resolution"] = "屏幕分辨率",
@@ -728,7 +733,7 @@ pfUI_translation["zhCN"] = {
["Show Loot Icon"] = "显示拾取权图标", ["Show Loot Icon"] = "显示拾取权图标",
["Show Macro Text"] = "显示宏的名字", ["Show Macro Text"] = "显示宏的名字",
["Show Meters By Default"] = "由默认显示其他接口表", ["Show Meters By Default"] = "由默认显示其他接口表",
["Show Milliseconds When Timer Runs Out"] = "当冷却即将结束时显示毫秒", ["Show Numbers On"] = nil,
["Show On Friendly Units"] = "显示友好单位姓名板", ["Show On Friendly Units"] = "显示友好单位姓名板",
["Show On Hostile Units"] = "显示敌对单位姓名板", ["Show On Hostile Units"] = "显示敌对单位姓名板",
["Show Procs Indicators"] = "显示触发效果计时器", ["Show Procs Indicators"] = "显示触发效果计时器",
@@ -746,10 +751,10 @@ pfUI_translation["zhCN"] = {
["Show Spell Icon"] = "显示技能图标", ["Show Spell Icon"] = "显示技能图标",
["Show Spell Name"] = "显示技能名称", ["Show Spell Name"] = "显示技能名称",
["Show Stacks"] = "显示堆叠", ["Show Stacks"] = "显示堆叠",
["Show Sweep On"] = nil,
["Show Tenths Below 5 Seconds"] = nil,
["Show Text"] = "显示文本", ["Show Text"] = "显示文本",
["Show Time Left"] = "显示剩余时间",
["Show Timer"] = "显示计时器", ["Show Timer"] = "显示计时器",
["Show Timer Animation"] = "显示计时器动画",
["Show Timer Text"] = "显示计时器文本", ["Show Timer Text"] = "显示计时器文本",
["Show Totems Indicators"] = "显示图腾指示器", ["Show Totems Indicators"] = "显示图腾指示器",
["Shrink & Return"] = "收缩 & 返回", ["Shrink & Return"] = "收缩 & 返回",
@@ -766,8 +771,10 @@ pfUI_translation["zhCN"] = {
["Soulshards"] = "灵魂碎片", ["Soulshards"] = "灵魂碎片",
["Spacing"] = "间距", ["Spacing"] = "间距",
["Special Recipient"] = "特殊指定角色", ["Special Recipient"] = "特殊指定角色",
["Spellbook And Character"] = nil,
["Spell Power Color"] = nil, ["Spell Power Color"] = nil,
["Square"] = "方块", ["Square"] = "方块",
["Stack Count Font Size"] = nil,
["Stance Bar 1"] = "姿态动作条 1", ["Stance Bar 1"] = "姿态动作条 1",
["Stance Bar 2"] = "姿态动作条 2", ["Stance Bar 2"] = "姿态动作条 2",
["Stance Bar 3"] = "姿态动作条 3", ["Stance Bar 3"] = "姿态动作条 3",
@@ -802,7 +809,6 @@ pfUI_translation["zhCN"] = {
["Thistle Tea"] = "菊花茶", ["Thistle Tea"] = "菊花茶",
["Threshold To Trust Health Estimation"] = "信任生命值预估的阈值", ["Threshold To Trust Health Estimation"] = "信任生命值预估的阈值",
["Time"] = "时间", ["Time"] = "时间",
["Timer"] = "计时器",
["Time Remaining"] = "剩余时间", ["Time Remaining"] = "剩余时间",
["Timer In Minutes"] = "计时器(分钟)", ["Timer In Minutes"] = "计时器(分钟)",
["Timestamp Brackets"] = "时间戳括弧", ["Timestamp Brackets"] = "时间戳括弧",
@@ -813,6 +819,7 @@ pfUI_translation["zhCN"] = {
["Tiny (PixelPerfect)"] = "极小(像素完美)", ["Tiny (PixelPerfect)"] = "极小(像素完美)",
["Toggle as Tank"] = "切换成为坦克", ["Toggle as Tank"] = "切换成为坦克",
["Tooltip"] = "信息提示框", ["Tooltip"] = "信息提示框",
["Tooltip Auras"] = nil,
["Tooltip Position"] = "信息提示框位置", ["Tooltip Position"] = "信息提示框位置",
["Tooltip Text Font"] = "鼠标提示框字体", ["Tooltip Text Font"] = "鼠标提示框字体",
["Tooltip Text Font Size"] ="鼠标提示框字体大小", ["Tooltip Text Font Size"] ="鼠标提示框字体大小",
@@ -824,11 +831,13 @@ pfUI_translation["zhCN"] = {
["Total Gold"] = "总黄金", ["Total Gold"] = "总黄金",
["Totem Direction"] = "图腾方向", ["Totem Direction"] = "图腾方向",
["Totem Icons"] = "图腾图标", ["Totem Icons"] = "图腾图标",
["Totems"] = nil,
["Tracked Reputation"] = "被追踪的声望", ["Tracked Reputation"] = "被追踪的声望",
["Tracking Icon Size"] = "追踪图标大小", ["Tracking Icon Size"] = "追踪图标大小",
["Trigger Actions On Key Down"] = "按下即施法", ["Trigger Actions On Key Down"] = "按下即施法",
["UI-Scale"] = "UI缩放比例", ["UI-Scale"] = "UI缩放比例",
["Unbuffed"] = "该Buff缺失者", ["Unbuffed"] = "该Buff缺失者",
["Unit Frame Auras"] = nil,
["Unit Frame Border Size"] = "头像边框大小", ["Unit Frame Border Size"] = "头像边框大小",
["Unit Frame Layout"] = "头像框架样式", ["Unit Frame Layout"] = "头像框架样式",
["Unit Frames"] = "头像框架", ["Unit Frames"] = "头像框架",
@@ -855,7 +864,6 @@ pfUI_translation["zhCN"] = {
["Use Custom Color Power Bar Background"] = "使用自定义颜色显示能量值背景", ["Use Custom Color Power Bar Background"] = "使用自定义颜色显示能量值背景",
["Use Custom Font Settings"] = "使用自定义字体设置", ["Use Custom Font Settings"] = "使用自定义字体设置",
["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil, ["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil,
["Use Dynamic Font Size"] = "使用动态字体大小",
["Use Item Rarity Color For Loot-Roll Timer"] = "为战利品Roll点计时框启用物品稀有颜色", ["Use Item Rarity Color For Loot-Roll Timer"] = "为战利品Roll点计时框启用物品稀有颜色",
["Use Original Game Fonts"] = "使用游戏原始字体", ["Use Original Game Fonts"] = "使用游戏原始字体",
["Use Raid Frames To Display Group Members"] = '使用团队框架显示小组成员', ["Use Raid Frames To Display Group Members"] = '使用团队框架显示小组成员',
+28 -20
View File
@@ -1,4 +1,6 @@
pfUI_translation["zhTW"] = { pfUI_translation["zhTW"] = {
["2D"] = nil,
["3D"] = nil,
["3D World Unit Font"] = nil, ["3D World Unit Font"] = nil,
["Abbreviate Numbers (4200 -> 4.2k)"] = "縮寫數位格式[4200為4.2K]", ["Abbreviate Numbers (4200 -> 4.2k)"] = "縮寫數位格式[4200為4.2K]",
["Abbreviate Unit Names"] = nil, ["Abbreviate Unit Names"] = nil,
@@ -6,6 +8,7 @@ pfUI_translation["zhTW"] = {
["Actionbar"] = "動作條", ["Actionbar"] = "動作條",
["Action Bar"] = nil, ["Action Bar"] = nil,
["Action Bar Border Size"] = "動作條邊框大小", ["Action Bar Border Size"] = "動作條邊框大小",
["Action Bars"] = nil,
["Active Addons"] = "啟動的外掛程式", ["Active Addons"] = "啟動的外掛程式",
["Add button to the frame"] = nil, ["Add button to the frame"] = nil,
["Added button"] = nil, ["Added button"] = nil,
@@ -27,11 +30,11 @@ pfUI_translation["zhTW"] = {
["Always Show Item Comparison"] = "始終顯示裝備比較", ["Always Show Item Comparison"] = "始終顯示裝備比較",
["Always Show On Target Units"] = nil, ["Always Show On Target Units"] = nil,
["Always Show On Units With Missing HP"] = nil, ["Always Show On Units With Missing HP"] = nil,
["Always Use 2D Portraits"] = "始終使用2D頭像",
["Ammo Counter"] = "彈藥數量", ["Ammo Counter"] = "彈藥數量",
["Anchor Bags Above Chat"] = nil, ["Anchor Bags Above Chat"] = nil,
["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "pfUI的安裝內建有四種風格.點選以下讀取其一", ["A new installation of |cff33ffccpf|rUI ships with 4 prebuilt design profiles. Click below if you wish to load one of these profiles."] = "pfUI的安裝內建有四種風格.點選以下讀取其一",
["A new version is available"] = nil, ["A new version is available"] = nil,
["Animate Health And Power Bars"] = nil,
["Appearance"] = "外觀設置", ["Appearance"] = "外觀設置",
["Ascending"] = "下移", ["Ascending"] = "下移",
["Author"] = nil, ["Author"] = nil,
@@ -78,7 +81,7 @@ pfUI_translation["zhTW"] = {
["Buffbar Width"] = "Buff寬度", ["Buffbar Width"] = "Buff寬度",
["Buff/Debuff Icons"] = nil, ["Buff/Debuff Icons"] = nil,
["Buff/Debuff Indicators"] = nil, ["Buff/Debuff Indicators"] = nil,
["Buff Font Size"] = "Buff字體大小", ["Buff Indicators"] = nil,
["Buff Limit"] = "Buff總數量", ["Buff Limit"] = "Buff總數量",
["Buff Position"] = "Buff顯示的位置", ["Buff Position"] = "Buff顯示的位置",
["Buffs"] = "Buff(增益)", ["Buffs"] = "Buff(增益)",
@@ -120,9 +123,13 @@ pfUI_translation["zhTW"] = {
["Chat Bubble Transparency"] = "聊天框氣泡效果透明度", ["Chat Bubble Transparency"] = "聊天框氣泡效果透明度",
["Chat Default Brackets"] = "聊天框默認括弧", ["Chat Default Brackets"] = "聊天框默認括弧",
["Class"] = "職業", ["Class"] = "職業",
["Class Icon (Round)"] = nil,
["Class Icon (Square)"] = nil,
["Clear Rolls"] = "清除Roll點", ["Clear Rolls"] = "清除Roll點",
["Click Action"] = "點擊操作", ["Click Action"] = "點擊操作",
["Click Casting"] = nil, ["Click Casting"] = nil,
["Click to undress"] = nil,
["Undress"] = nil,
["Clock"] = "時間", ["Clock"] = "時間",
["Close"] = "關閉", ["Close"] = "關閉",
["Collapse Empty Slots"] = nil, ["Collapse Empty Slots"] = nil,
@@ -145,21 +152,16 @@ pfUI_translation["zhTW"] = {
["Configuration"] = "配置", ["Configuration"] = "配置",
["Configure"] = "設置", ["Configure"] = "設置",
["Cooldown"] = "冷卻時間", ["Cooldown"] = "冷卻時間",
["Cooldown Color (5 Seconds Or Less)"] = nil,
["Cooldown Color (Days)"] = "技能冷卻時間顏色[天]", ["Cooldown Color (Days)"] = "技能冷卻時間顏色[天]",
["Cooldown Color (Hours)"] = "技能冷卻時間顏色[時]", ["Cooldown Color (Hours)"] = "技能冷卻時間顏色[時]",
["Cooldown Color (Less than 3 Sec)"] = "技能冷卻時間顏色[少於3秒]",
["Cooldown Color (Minutes)"] = "技能冷卻時間顏色[分]", ["Cooldown Color (Minutes)"] = "技能冷卻時間顏色[分]",
["Cooldown Color (Seconds)"] = "技能冷卻時間顏色[秒]", ["Cooldown Color (Seconds)"] = "技能冷卻時間顏色[秒]",
["Cooldown / Durations"] = nil, ["Cooldown / Durations"] = nil,
["Cooldown Text Font"] = nil,
["Cooldown Text Font Size"] = "技能冷卻時間文字大小",
["Cooldown Text Font Size (Blizzard Frames)"] = nil,
["Cooldown Text Font Size (Foreign Frames)"] = nil,
["Cooldown Text Size"] = nil,
["Cooldown Text Threshold"] = nil, ["Cooldown Text Threshold"] = nil,
["Cooldown Text Time Threshold"] = "技能冷卻時間文字臨界值",
["Coordinates Location"] = "座標位置", ["Coordinates Location"] = "座標位置",
["Coordinates On Minimap"] = "小地圖上的座標", ["Coordinates On Minimap"] = "小地圖上的座標",
["Copied to clipboard"] = nil,
["Count"] = "計數器", ["Count"] = "計數器",
["Create Profile"] = "新建配置", ["Create Profile"] = "新建配置",
["Ctrl-Click"] = "CTRL點擊", ["Ctrl-Click"] = "CTRL點擊",
@@ -276,12 +278,9 @@ pfUI_translation["zhTW"] = {
["Enable Custom Incoming Whispers Layout"] = "啟用私聊樣式", ["Enable Custom Incoming Whispers Layout"] = "啟用私聊樣式",
["Enable Debuff Display"] = "啟用Debuff顯示", ["Enable Debuff Display"] = "啟用Debuff顯示",
["Enable Debuffs"] = "顯示Debuff", ["Enable Debuffs"] = "顯示Debuff",
["Enable Durations On Blizzard Frames"] = "啟用持續時間在暴雪框架上",
["Enable Durations On Foreign Frames"] = "啟用持續時間在外來框架上",
["Enable Energy Ticks"] = "顯示能量刻度", ["Enable Energy Ticks"] = "顯示能量刻度",
["Enable Extended Guild Information"] = "公會資訊擴展顯示", ["Enable Extended Guild Information"] = "公會資訊擴展顯示",
["Enable Frame Shadow"] = "啟用框架陰影", ["Enable Frame Shadow"] = "啟用框架陰影",
["Enable Full-Text Search"] = nil,
["Enable Indicators"] = nil, ["Enable Indicators"] = nil,
["Enable Item Quality Color For Equipment Only"] = "僅在裝備上顯示品質顏色", ["Enable Item Quality Color For Equipment Only"] = "僅在裝備上顯示品質顏色",
["Enable \"Loot & Spam\" Chat Window"] = "啟用[拾取、綜合]聊天視窗", ["Enable \"Loot & Spam\" Chat Window"] = "啟用[拾取、綜合]聊天視窗",
@@ -336,6 +335,7 @@ pfUI_translation["zhTW"] = {
["Font"] = nil, ["Font"] = nil,
["Font Options"] = nil, ["Font Options"] = nil,
["Font Padding"] = nil, ["Font Padding"] = nil,
["Font Size"] = nil,
["Font Style"] = nil, ["Font Style"] = nil,
["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil, ["Force Blizzard Borders (|cffffaaaaExperimental|r)"] = nil,
["fps"] = "幀", ["fps"] = "幀",
@@ -370,7 +370,6 @@ pfUI_translation["zhTW"] = {
["Health"] = nil, ["Health"] = nil,
["Health - Auto"] = "動態生命值和百分比", ["Health - Auto"] = "動態生命值和百分比",
["Healthbar"] = "生命條", ["Healthbar"] = "生命條",
["Healthbar Animation Speed"] = "掉血動畫速度",
["Health Bar Color"] = nil, ["Health Bar Color"] = nil,
["Healthbar Embedded"] = "血條上顯示動態頭像", ["Healthbar Embedded"] = "血條上顯示動態頭像",
["Healthbar Height"] = "生命條高度", ["Healthbar Height"] = "生命條高度",
@@ -395,7 +394,6 @@ pfUI_translation["zhTW"] = {
["Hide Channel Names"] = "隱藏頻道名稱", ["Hide Channel Names"] = "隱藏頻道名稱",
["Hide Chat When Bags Are Opened"] = "打開背包後隱藏聊天框", ["Hide Chat When Bags Are Opened"] = "打開背包後隱藏聊天框",
["Hide Combat Log"] = "隱藏戰鬥日誌", ["Hide Combat Log"] = "隱藏戰鬥日誌",
["Hide Foreign Cooldown Animations"] = nil,
["Hide Group Frames While In Raid"] = "在團隊框架下隱藏小隊框架", ["Hide Group Frames While In Raid"] = "在團隊框架下隱藏小隊框架",
["Hide Healthbar On Critters"] = nil, ["Hide Healthbar On Critters"] = nil,
["Hide Healthbar On Enemy NPCs"] = nil, ["Hide Healthbar On Enemy NPCs"] = nil,
@@ -404,6 +402,7 @@ pfUI_translation["zhTW"] = {
["Hide Healthbar On Friendly Players"] = nil, ["Hide Healthbar On Friendly Players"] = nil,
["Hide Healthbar On Neutral NPCs"] = nil, ["Hide Healthbar On Neutral NPCs"] = nil,
["Hide Healthbar On Totems"] = nil, ["Hide Healthbar On Totems"] = nil,
["Hide Numbers On Spell Cooldowns Up To (Seconds)"] = nil,
["Hide Timeout"] = nil, ["Hide Timeout"] = nil,
["Hide When Entering Combat"] = nil, ["Hide When Entering Combat"] = nil,
["Highlight Equipped Items"] = nil, ["Highlight Equipped Items"] = nil,
@@ -432,7 +431,6 @@ pfUI_translation["zhTW"] = {
["Inherit Default Colors"] = nil, ["Inherit Default Colors"] = nil,
["Inputbox Height"] = "輸入框高度", ["Inputbox Height"] = "輸入框高度",
["Inputbox Width"] = "輸入框寬度", ["Inputbox Width"] = "輸入框寬度",
["Instant"] = "極快",
["Integrations"] = nil, ["Integrations"] = nil,
["Invert Health Bar"] = "血量反色顯示", ["Invert Health Bar"] = "血量反色顯示",
["is not allowed in profile name"] = "在設定檔名中不允許", ["is not allowed in profile name"] = "在設定檔名中不允許",
@@ -477,6 +475,7 @@ pfUI_translation["zhTW"] = {
["Look & Feel"] = nil, ["Look & Feel"] = nil,
["Loot"] = "拾取", ["Loot"] = "拾取",
["Loot & Spam"] = "拾取 & 聊天", ["Loot & Spam"] = "拾取 & 聊天",
["Loss Of Control"] = nil,
["Macro Text Color"] = nil, ["Macro Text Color"] = nil,
["Macro Text Size"] = nil, ["Macro Text Size"] = nil,
["Main Actionbar"] = nil, ["Main Actionbar"] = nil,
@@ -516,6 +515,7 @@ pfUI_translation["zhTW"] = {
["Name | Health Missing"] = nil, ["Name | Health Missing"] = nil,
["Name (Linebreak) -Health Missing"] = nil, ["Name (Linebreak) -Health Missing"] = nil,
["Nameplate Border Size"] = nil, ["Nameplate Border Size"] = nil,
["Nameplate Debuffs"] = nil,
["Nameplates"] = "姓名板", ["Nameplates"] = "姓名板",
["Nameplate Width"] = "姓名板高度", ["Nameplate Width"] = "姓名板高度",
["Name (Short)"] = "名字 (短)", ["Name (Short)"] = "名字 (短)",
@@ -554,6 +554,7 @@ pfUI_translation["zhTW"] = {
["On State Change"] = nil, ["On State Change"] = nil,
["Options"] = nil, ["Options"] = nil,
["Orientation"] = nil, ["Orientation"] = nil,
["Other Addons"] = nil,
["Other Panel: Minimap"] = "小地圖面板", ["Other Panel: Minimap"] = "小地圖面板",
["Outline"] = nil, ["Outline"] = nil,
["Outlines"] = nil, ["Outlines"] = nil,
@@ -582,6 +583,7 @@ pfUI_translation["zhTW"] = {
["Pixel"] = nil, ["Pixel"] = nil,
["Player"] = "玩家", ["Player"] = "玩家",
["Player Buff Bar"] = nil, ["Player Buff Bar"] = nil,
["Player Buffs"] = nil,
["Player Castbar"] = nil, ["Player Castbar"] = nil,
["Player Debuff Bar"] = nil, ["Player Debuff Bar"] = nil,
["Player SP/Haste Display"] = nil, ["Player SP/Haste Display"] = nil,
@@ -592,6 +594,7 @@ pfUI_translation["zhTW"] = {
["Portrait Alpha"] = "人偶透明度", ["Portrait Alpha"] = "人偶透明度",
["Portrait Height"] = "纵向高度", ["Portrait Height"] = "纵向高度",
["Portrait Position"] = "人偶頭像位置", ["Portrait Position"] = "人偶頭像位置",
["Portrait Style"] = nil,
["Portrait Width"] = "纵向宽度", ["Portrait Width"] = "纵向宽度",
["Powerbar"] = "能量(藍)條", ["Powerbar"] = "能量(藍)條",
["Power Bar Anchor"] = "能量條對齊方式(以血條為錨點)", ["Power Bar Anchor"] = "能量條對齊方式(以血條為錨點)",
@@ -647,6 +650,7 @@ pfUI_translation["zhTW"] = {
["Resting"] = "休息中", ["Resting"] = "休息中",
["Reveal Unexplored Areas"] = "展示未勘探的地區", ["Reveal Unexplored Areas"] = "展示未勘探的地區",
["Switch to current zone"] = nil, ["Switch to current zone"] = nil,
["Reverse Sweep On"] = nil,
["Right"] = "右邊", ["Right"] = "右邊",
["Right Actionbar"] = nil, ["Right Actionbar"] = nil,
["Right Anchor"] = nil, ["Right Anchor"] = nil,
@@ -668,6 +672,7 @@ pfUI_translation["zhTW"] = {
["Save & Reload"] = nil, ["Save & Reload"] = nil,
["Scale"] = "比例", ["Scale"] = "比例",
["Scale Border On HiDPI Displays"] = nil, ["Scale Border On HiDPI Displays"] = nil,
["Scale Font Size With Icon"] = nil,
["Scaling"] = nil, ["Scaling"] = nil,
["Screen Edge Glow Intensity"] = nil, ["Screen Edge Glow Intensity"] = nil,
["Screen Resolution"] = "螢幕解析度", ["Screen Resolution"] = "螢幕解析度",
@@ -727,7 +732,7 @@ pfUI_translation["zhTW"] = {
["Show Loot Icon"] = nil, ["Show Loot Icon"] = nil,
["Show Macro Text"] = "顯示巨集的名字", ["Show Macro Text"] = "顯示巨集的名字",
["Show Meters By Default"] = "由默認顯示其他介面表", ["Show Meters By Default"] = "由默認顯示其他介面表",
["Show Milliseconds When Timer Runs Out"] = nil, ["Show Numbers On"] = nil,
["Show On Friendly Units"] = nil, ["Show On Friendly Units"] = nil,
["Show On Hostile Units"] = nil, ["Show On Hostile Units"] = nil,
["Show Procs Indicators"] = nil, ["Show Procs Indicators"] = nil,
@@ -745,10 +750,10 @@ pfUI_translation["zhTW"] = {
["Show Spell Icon"] = nil, ["Show Spell Icon"] = nil,
["Show Spell Name"] = nil, ["Show Spell Name"] = nil,
["Show Stacks"] = nil, ["Show Stacks"] = nil,
["Show Sweep On"] = nil,
["Show Tenths Below 5 Seconds"] = nil,
["Show Text"] = nil, ["Show Text"] = nil,
["Show Time Left"] = nil,
["Show Timer"] = nil, ["Show Timer"] = nil,
["Show Timer Animation"] = nil,
["Show Timer Text"] = nil, ["Show Timer Text"] = nil,
["Show Totems Indicators"] = nil, ["Show Totems Indicators"] = nil,
["Shrink & Return"] = nil, ["Shrink & Return"] = nil,
@@ -765,8 +770,10 @@ pfUI_translation["zhTW"] = {
["Soulshards"] = "靈魂碎片", ["Soulshards"] = "靈魂碎片",
["Spacing"] = nil, ["Spacing"] = nil,
["Special Recipient"] = "特殊指定角色", ["Special Recipient"] = "特殊指定角色",
["Spellbook And Character"] = nil,
["Spell Power Color"] = nil, ["Spell Power Color"] = nil,
["Square"] = "方形", ["Square"] = "方形",
["Stack Count Font Size"] = nil,
["Stance Bar 1"] = nil, ["Stance Bar 1"] = nil,
["Stance Bar 2"] = nil, ["Stance Bar 2"] = nil,
["Stance Bar 3"] = nil, ["Stance Bar 3"] = nil,
@@ -801,7 +808,6 @@ pfUI_translation["zhTW"] = {
["Thistle Tea"] = nil, ["Thistle Tea"] = nil,
["Threshold To Trust Health Estimation"] = nil, ["Threshold To Trust Health Estimation"] = nil,
["Time"] = "計時器", ["Time"] = "計時器",
["Timer"] = nil,
["Time Remaining"] = "剩餘時間", ["Time Remaining"] = "剩餘時間",
["Timer In Minutes"] = nil, ["Timer In Minutes"] = nil,
["Timestamp Brackets"] = "時間戳括弧", ["Timestamp Brackets"] = "時間戳括弧",
@@ -812,6 +818,7 @@ pfUI_translation["zhTW"] = {
["Tiny (PixelPerfect)"] = "極小(像素完美)", ["Tiny (PixelPerfect)"] = "極小(像素完美)",
["Toggle as Tank"] = "切換成為坦克", ["Toggle as Tank"] = "切換成為坦克",
["Tooltip"] = "滑鼠提示框", ["Tooltip"] = "滑鼠提示框",
["Tooltip Auras"] = nil,
["Tooltip Position"] = "滑鼠提示框位置", ["Tooltip Position"] = "滑鼠提示框位置",
["Tooltip Text Font"] = nil, ["Tooltip Text Font"] = nil,
["Tooltip Text Font Size"] = nil, ["Tooltip Text Font Size"] = nil,
@@ -823,11 +830,13 @@ pfUI_translation["zhTW"] = {
["Total Gold"] = "總金量", ["Total Gold"] = "總金量",
["Totem Direction"] = nil, ["Totem Direction"] = nil,
["Totem Icons"] = nil, ["Totem Icons"] = nil,
["Totems"] = nil,
["Tracked Reputation"] = nil, ["Tracked Reputation"] = nil,
["Tracking Icon Size"] = "追蹤圖示大小", ["Tracking Icon Size"] = "追蹤圖示大小",
["Trigger Actions On Key Down"] = nil, ["Trigger Actions On Key Down"] = nil,
["UI-Scale"] = "UI縮放比例", ["UI-Scale"] = "UI縮放比例",
["Unbuffed"] = "該Buff缺失者", ["Unbuffed"] = "該Buff缺失者",
["Unit Frame Auras"] = nil,
["Unit Frame Border Size"] = "頭像邊框大小", ["Unit Frame Border Size"] = "頭像邊框大小",
["Unit Frame Layout"] = "頭像框架樣式", ["Unit Frame Layout"] = "頭像框架樣式",
["Unit Frames"] = "頭像框架", ["Unit Frames"] = "頭像框架",
@@ -854,7 +863,6 @@ pfUI_translation["zhTW"] = {
["Use Custom Color Power Bar Background"] = nil, ["Use Custom Color Power Bar Background"] = nil,
["Use Custom Font Settings"] = nil, ["Use Custom Font Settings"] = nil,
["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil, ["Use Custom Spell Power Color (unchecked = biggest school color)"] = nil,
["Use Dynamic Font Size"] = nil,
["Use Item Rarity Color For Loot-Roll Timer"] = "為戰利品Roll點計時框啟用物品稀有顏色", ["Use Item Rarity Color For Loot-Roll Timer"] = "為戰利品Roll點計時框啟用物品稀有顏色",
["Use Original Game Fonts"] = nil, ["Use Original Game Fonts"] = nil,
["Use Raid Frames To Display Group Members"] = '使用團隊框架顯示小組成員', ["Use Raid Frames To Display Group Members"] = '使用團隊框架顯示小組成員',
+2
View File
@@ -1,6 +1,8 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"> <Ui xmlns="http://www.blizzard.com/wow/ui/">
<Include file="..\api\api.lua"/> <Include file="..\api\api.lua"/>
<Include file="..\api\cooldown.lua"/>
<Include file="..\api\config.lua"/> <Include file="..\api\config.lua"/>
<Include file="..\api\ui-widgets.lua"/> <Include file="..\api\ui-widgets.lua"/>
<Include file="..\api\ui-widgets.xml"/>
<Include file="..\api\unitframes.lua"/> <Include file="..\api\unitframes.lua"/>
</Ui> </Ui>
-9
View File
@@ -1,13 +1,4 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"> <Ui xmlns="http://www.blizzard.com/wow/ui/">
<Include file="..\env\locales_enUS.lua"/>
<Include file="..\env\locales_koKR.lua"/>
<Include file="..\env\locales_frFR.lua"/>
<Include file="..\env\locales_deDE.lua"/>
<Include file="..\env\locales_zhCN.lua"/>
<Include file="..\env\locales_esES.lua"/>
<Include file="..\env\locales_ruRU.lua"/>
<Include file="..\env\tables.lua"/>
<Include file="..\env\profiles.lua"/> <Include file="..\env\profiles.lua"/>
<Include file="..\env\translations_enUS.lua"/> <Include file="..\env\translations_enUS.lua"/>
-2
View File
@@ -1,8 +1,6 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"> <Ui xmlns="http://www.blizzard.com/wow/ui/">
<Include file="..\libs\libtipscan.lua"/>
<Include file="..\libs\libspell.lua"/> <Include file="..\libs\libspell.lua"/>
<Include file="..\libs\libdebuff.lua"/> <Include file="..\libs\libdebuff.lua"/>
<Include file="..\libs\librange.lua"/>
<Include file="..\libs\libunitscan.lua"/> <Include file="..\libs\libunitscan.lua"/>
<Include file="..\libs\libhealth.lua"/> <Include file="..\libs\libhealth.lua"/>
<Include file="..\libs\libthrottle.lua"/> <Include file="..\libs\libthrottle.lua"/>
+4 -1
View File
@@ -7,6 +7,8 @@
<Include file="..\modules\gryphons.lua"/> <Include file="..\modules\gryphons.lua"/>
<Include file="..\modules\hunterbar.lua"/> <Include file="..\modules\hunterbar.lua"/>
<Include file="..\modules\chat.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\whisperproxy.lua"/>
<Include file="..\modules\chatcopy.lua"/> <Include file="..\modules\chatcopy.lua"/>
<Include file="..\modules\bubbles.lua"/> <Include file="..\modules\bubbles.lua"/>
@@ -32,7 +34,6 @@
<Include file="..\modules\autovendor.lua"/> <Include file="..\modules\autovendor.lua"/>
<Include file="..\modules\bags.lua"/> <Include file="..\modules\bags.lua"/>
<Include file="..\modules\itemclick.lua"/> <Include file="..\modules\itemclick.lua"/>
<Include file="..\modules\cooldown.lua"/>
<Include file="..\modules\tooltip.lua"/> <Include file="..\modules\tooltip.lua"/>
<Include file="..\modules\questitem.lua"/> <Include file="..\modules\questitem.lua"/>
<Include file="..\modules\thirdparty.lua"/> <Include file="..\modules\thirdparty.lua"/>
@@ -80,4 +81,6 @@
<Include file="..\modules\loothistory.lua"/> <Include file="..\modules\loothistory.lua"/>
<Include file="..\modules\newitem.lua"/> <Include file="..\modules\newitem.lua"/>
<Include file="..\modules\friendnotes.lua"/> <Include file="..\modules\friendnotes.lua"/>
<Include file="..\modules\lossofcontrol.lua"/>
<Include file="..\modules\radar.lua"/>
</Ui> </Ui>
+83 -184
View File
@@ -2,16 +2,21 @@
setfenv(1, pfUI:GetEnvironment()) setfenv(1, pfUI:GetEnvironment())
--[[ libpredict ]]-- --[[ libpredict ]]--
-- A pfUI library that detects, receives and sends heal and resurrection predictions. -- A pfUI library that detects, receives and sends heal predictions.
-- Healing predictions are done by caching the last known "normal" heal value of the -- Healing predictions are done by caching the last known "normal" heal value of the
-- spell when last being used. Those chaches are cleared when new talents are detected. -- spell when last being used. Those chaches are cleared when new talents are detected.
-- The API provides function calls similar to later WoW expansions such as: -- The API provides function calls similar to later WoW expansions such as:
-- UnitGetIncomingHeals(unit) -- UnitGetIncomingHeals(unit)
-- UnitHasIncomingResurrection(unit) -- UnitHasResurrection(unit)
-- --
-- The library is able to receive and send compatible messages to HealComm -- UnitHasResurrection extends ClassicAPI's UnitHasIncomingResurrection, which
-- including resurrections. It has an option to disable the sending of those -- ends with the cast, to a resurrection that landed and waits for the target
-- messages in case HealComm is already active. -- to accept it.
--
-- The library is able to receive and send compatible messages to HealComm,
-- and announces the player's resurrections to HealComm and CTRA. It has an
-- option to disable the sending of those messages in case HealComm is
-- already active.
-- --
-- Casts are read from ClassicAPI's UNIT_SPELLCAST_* events and heal amounts -- Casts are read from ClassicAPI's UNIT_SPELLCAST_* events and heal amounts
-- from COMBAT_LOG_EVENT_UNFILTERED. GetHotDuration() reads live HoT timers -- from COMBAT_LOG_EVENT_UNFILTERED. GetHotDuration() reads live HoT timers
@@ -20,18 +25,16 @@ setfenv(1, pfUI:GetEnvironment())
-- return instantly when another libpredict is already active -- return instantly when another libpredict is already active
if pfUI.api.libpredict then return end if pfUI.api.libpredict then return end
local heals, ress, events, hots = {}, {}, {}, {} local heals, events, hots = {}, {}, {}
local spell_queue = { "DUMMY", "DUMMYRank 9", "TARGET" } local spell_queue = { "DUMMY", "DUMMYRank 9", "TARGET" }
local player = UnitName("player") local player = UnitName("player")
local cache, gear_string = {}, "" local cache, gear_string = {}, ""
local foreignCache = {} -- [casterName][spellKey] = amount, in-memory cache for other healers local foreignCache = {} -- [casterName][spellKey] = amount, in-memory cache for other healers
local rejuvDuration, renewDuration = 12, 15 --default durations local rejuvDuration, renewDuration = 12, 15 --default durations
local ressGuidToName = {} -- [casterGuid] = casterName, for interrupted-cast cleanup
local healGuidToName = {} -- [casterGuid] = casterName, for interrupted-cast cleanup local healGuidToName = {} -- [casterGuid] = casterName, for interrupted-cast cleanup
local sentTargets = {} -- [castGUID] = target name of an own cast, from UNIT_SPELLCAST_SENT local sentTargets = {} -- [castGUID] = target name of an own cast, from UNIT_SPELLCAST_SENT
local castTargets = {} -- [castGUID] = target name of a foreign cast, from UNIT_SPELLCAST_START local resOffers = {} -- [guid] = expiry of a landed resurrection the target has yet to accept
local ress_timers = {} -- [target][sender] = expiry_timestamp (60s rez window) local RES_OFFER_TIMEOUT = 60 -- the target's resurrect popup declines itself after 60s
local RESS_TIMEOUT = 60 -- Vanilla: rez offer expires after 60s
-- Localized spell names resolved once from canonical rank-1 spellIDs. -- Localized spell names resolved once from canonical rank-1 spellIDs.
-- Every rank shares the same name, so per-rank comparisons elsewhere can -- Every rank shares the same name, so per-rank comparisons elsewhere can
@@ -42,7 +45,6 @@ local RENEW = C_Spell.GetSpellName(139) -- Renew (Rank 1)
local REGROWTH = C_Spell.GetSpellName(8936) -- Regrowth (Rank 1) local REGROWTH = C_Spell.GetSpellName(8936) -- Regrowth (Rank 1)
local libpredict = CreateFrame("Frame") local libpredict = CreateFrame("Frame")
libpredict:RegisterEvent("UNIT_HEALTH")
libpredict:RegisterEvent("CHAT_MSG_ADDON") libpredict:RegisterEvent("CHAT_MSG_ADDON")
libpredict:RegisterEvent("PLAYER_TARGET_CHANGED") libpredict:RegisterEvent("PLAYER_TARGET_CHANGED")
libpredict:RegisterEvent("PLAYER_LOGOUT") libpredict:RegisterEvent("PLAYER_LOGOUT")
@@ -55,13 +57,8 @@ libpredict:SetScript("OnEvent", function()
return return
end end
if event == "CHAT_MSG_ADDON" and (arg1 == "HealComm" or arg1 == "CTRA") then if event == "CHAT_MSG_ADDON" and arg1 == "HealComm" then
this:ParseChatMessage(arg4, arg2, arg1) this:ParseChatMessage(arg4, arg2)
elseif event == "UNIT_HEALTH" then
local name = UnitName(arg1)
if name and ress[name] and not UnitIsDeadOrGhost(arg1) then
ress[name] = nil
end
end end
end) end)
@@ -95,22 +92,14 @@ local function cacheRaidNames()
if pguid then guidNameCache[pguid] = UnitName("player") end if pguid then guidNameCache[pguid] = UnitName("player") end
end end
local function isRezSpell(spellId)
if not L["resurrections"] then return false end
local spellName = C_Spell.GetSpellName(spellId)
return spellName and L["resurrections"][spellName]
end
-- Build cache on world enter -- Build cache on world enter
libpredict:RegisterEvent("PLAYER_ENTERING_WORLD") libpredict:RegisterEvent("PLAYER_ENTERING_WORLD")
libpredict:RegisterEvent("RAID_ROSTER_UPDATE") libpredict:RegisterEvent("RAID_ROSTER_UPDATE")
libpredict:RegisterEvent("PARTY_MEMBERS_CHANGED") libpredict:RegisterEvent("PARTY_MEMBERS_CHANGED")
local origOnEvent = libpredict:GetScript("OnEvent") libpredict:HookScript("OnEvent", function()
libpredict:SetScript("OnEvent", function()
if event == "PLAYER_ENTERING_WORLD" or event == "RAID_ROSTER_UPDATE" or event == "PARTY_MEMBERS_CHANGED" then if event == "PLAYER_ENTERING_WORLD" or event == "RAID_ROSTER_UPDATE" or event == "PARTY_MEMBERS_CHANGED" then
cacheRaidNames() cacheRaidNames()
end end
if origOnEvent then origOnEvent() end
end) end)
-- Own cast-time spell started (heals + rez) -- Own cast-time spell started (heals + rez)
@@ -131,7 +120,6 @@ local function OnOwnCastStart(spellId, castGUID)
if L["resurrections"][spellName] then if L["resurrections"][spellName] then
if target then if target then
libpredict:Ress(player, target, UnitGUID("player"))
libpredict.sender:SendHealCommMsg("Resurrection/" .. target .. "/start/") libpredict.sender:SendHealCommMsg("Resurrection/" .. target .. "/start/")
libpredict.sender:SendResCommMsg("RES " .. target) libpredict.sender:SendResCommMsg("RES " .. target)
libpredict.sender.resurrecting = true libpredict.sender.resurrecting = true
@@ -212,7 +200,7 @@ local function OnOwnCastStart(spellId, castGUID)
end end
end end
-- Own cast landed: HealStop, Regrowth timer, instant HoTs, own rez timer -- Own cast landed: HealStop, Regrowth timer, instant HoTs
local function OnOwnCastSucceeded(spellId, castGUID) local function OnOwnCastSucceeded(spellId, castGUID)
local target = sentTargets[castGUID] or spell_queue[3] local target = sentTargets[castGUID] or spell_queue[3]
sentTargets[castGUID] = nil sentTargets[castGUID] = nil
@@ -250,14 +238,10 @@ local function OnOwnCastSucceeded(spellId, castGUID)
libpredict:Hot(player, target, hotType, duration, nil, "UNIT_SPELLCAST_SUCCEEDED", rank) libpredict:Hot(player, target, hotType, duration, nil, "UNIT_SPELLCAST_SUCCEEDED", rank)
libpredict.sender:SendHealCommMsg(hotType .. "/" .. target .. "/" .. duration .. "/" .. rank .. "/") libpredict.sender:SendHealCommMsg(hotType .. "/" .. target .. "/" .. duration .. "/" .. rank .. "/")
end end
if isRezSpell(spellId) then
libpredict:RessSetTimer(player, target)
end
end end
-- Foreign cast-time spell started (heals + rez) -- Foreign cast-time heal started
local function OnOtherCastStart(unit, spellId, castGUID) local function OnOtherCastStart(unit, spellId)
local spellName = C_Spell.GetSpellName(spellId) local spellName = C_Spell.GetSpellName(spellId)
if not spellName then return end if not spellName then return end
@@ -267,13 +251,6 @@ local function OnOtherCastStart(unit, spellId, castGUID)
local targetName = UnitSpellTargetName(unit) local targetName = UnitSpellTargetName(unit)
if not targetName then return end if not targetName then return end
castTargets[castGUID] = targetName
-- Resurrection cast
if L["resurrections"][spellName] then
libpredict:Ress(casterName, targetName, casterGuid)
return
end
-- Heal cast: look up cached amount from a previous cast by this healer -- Heal cast: look up cached amount from a previous cast by this healer
local _, _, _, startMs, endMs = C_Spell.UnitCastingInfo(unit) local _, _, _, startMs, endMs = C_Spell.UnitCastingInfo(unit)
@@ -324,35 +301,31 @@ local function OnOtherCastStart(unit, spellId, castGUID)
libpredict:Heal(casterName, targetName, amount, castTime, casterGuid) libpredict:Heal(casterName, targetName, amount, castTime, casterGuid)
end end
-- Foreign cast landed: rez timer, or the predicted heal is fulfilled -- Foreign cast landed: the predicted heal is fulfilled
local function OnOtherCastSucceeded(unit, spellId, castGUID) local function OnOtherCastSucceeded(unit)
local casterGuid = UnitGUID(unit) local casterName = resolveNameFromGuid(UnitGUID(unit))
local casterName = resolveNameFromGuid(casterGuid)
if not casterName then return end if not casterName then return end
if isRezSpell(spellId) then
local targetName = castTargets[castGUID]
if targetName then
libpredict:RessSetTimer(casterName, targetName)
end
return
end
libpredict:HealStop(casterName) libpredict:HealStop(casterName)
end end
-- Foreign cast interrupted: remove cancelled resses/heals -- Foreign cast interrupted: remove cancelled heals
local function OnOtherCastInterrupted(unit) local function OnOtherCastInterrupted(unit)
local casterGuid = UnitGUID(unit) local casterGuid = UnitGUID(unit)
if not casterGuid then return end if not casterGuid then return end
local ressName = ressGuidToName[casterGuid]
if ressName then
libpredict:RessStop(ressName)
end
local healName = healGuidToName[casterGuid] local healName = healGuidToName[casterGuid]
if healName then libpredict:HealStop(healName) end if healName then libpredict:HealStop(healName) end
end end
-- Flag the unit frames showing `guid` to redraw their resurrection icon
local function RefreshResFrames(guid)
for _, frame in pairs(pfUI.uf.frames) do
if frame.unitstr and UnitGUID(frame.unitstr) == guid then
frame.update_indicators = true
end
end
end
libpredict:SetScript("OnUpdate", function() libpredict:SetScript("OnUpdate", function()
-- throttle cleanup - no need to check every frame -- throttle cleanup - no need to check every frame
local now = pfUI.uf.now or GetTime() local now = pfUI.uf.now or GetTime()
@@ -366,13 +339,12 @@ libpredict:SetScript("OnUpdate", function()
end end
end end
-- Rez timeout: remove offer after 60s if player doesn't accept -- drop resurrection offers the target accepted or let run out
for target, senders in pairs(ress_timers) do for guid, expiry in pairs(resOffers) do
for sender, expiry in pairs(senders) do local unit = UnitTokenFromGUID(guid)
if now >= expiry then if now >= expiry or not (unit and UnitIsDeadOrGhost(unit)) then
senders[sender] = nil resOffers[guid] = nil
if ress[target] then ress[target][sender] = nil end RefreshResFrames(guid)
end
end end
end end
end) end)
@@ -386,8 +358,6 @@ function libpredict:ParseComm(sender, msg)
if libpredict.debug then if libpredict.debug then
DEFAULT_CHAT_FRAME:AddMessage("|cff00ffff[libpredict RX]|r HealStop from " .. tostring(sender)) DEFAULT_CHAT_FRAME:AddMessage("|cff00ffff[libpredict RX]|r HealStop from " .. tostring(sender))
end end
elseif msg == "Resurrection/stop/" then
msgtype = "RessStop"
elseif msg then elseif msg then
local msgobj = {strsplit("/", msg)} local msgobj = {strsplit("/", msg)}
@@ -397,10 +367,6 @@ function libpredict:ParseComm(sender, msg)
msgtype, time = "Delay", msgobj[2] msgtype, time = "Delay", msgobj[2]
end end
if msgobj[1] and msgobj[1] == "Resurrection" and msgobj[2] then
msgtype, target = "Ress", msgobj[2]
end
if msgobj[1] == "Heal" and msgobj[2] then if msgobj[1] == "Heal" and msgobj[2] then
msgtype, target, heal, time = "Heal", msgobj[2], msgobj[3], msgobj[4] msgtype, target, heal, time = "Heal", msgobj[2], msgobj[3], msgobj[4]
end end
@@ -472,25 +438,12 @@ end
local recentHots = {} local recentHots = {}
local DUPLICATE_WINDOW = 0.5 -- Ignoriere gleiche Nachricht innerhalb 0.5s local DUPLICATE_WINDOW = 0.5 -- Ignoriere gleiche Nachricht innerhalb 0.5s
function libpredict:ParseChatMessage(sender, msg, comm) function libpredict:ParseChatMessage(sender, msg)
local msgtype, target, heal, time, rank local msgtype, target, heal, time, rank = libpredict:ParseComm(sender, msg)
if comm == "HealComm" then
msgtype, target, heal, time, rank = libpredict:ParseComm(sender, msg)
elseif comm == "CTRA" then
local _, _, cmd, ctratarget = string.find(msg, "(%a+)%s?([^#]*)")
if cmd and ctratarget and cmd == "RES" and ctratarget ~= "" and ctratarget ~= UNKNOWN then
msgtype = "Ress"
target = ctratarget
end
end
if msgtype == "Stop" and sender then if msgtype == "Stop" and sender then
libpredict:HealStop(sender) libpredict:HealStop(sender)
return return
elseif ( msg == "RessStop" or msg == "RESNO" ) and sender then
libpredict:RessStop(sender)
return
elseif msgtype == "Delay" and time then elseif msgtype == "Delay" and time then
libpredict:HealDelay(sender, time) libpredict:HealDelay(sender, time)
elseif msgtype == "Heal" and target and heal and time then elseif msgtype == "Heal" and target and heal and time then
@@ -501,29 +454,6 @@ function libpredict:ParseChatMessage(sender, msg, comm)
else else
libpredict:Heal(sender, target, heal, time) libpredict:Heal(sender, target, heal, time)
end end
elseif msgtype == "Ress" then
-- HealComm: only for other players (own resses tracked via UNIT_SPELLCAST_START)
local playerName = UnitName("player")
if sender ~= playerName then
local senderGuid
for i = 1, GetNumRaidMembers() do
local unit = "raid" .. i
if UnitName(unit) == sender then
senderGuid = UnitGUID(unit)
break
end
end
if not senderGuid then
for i = 1, GetNumPartyMembers() do
local unit = "party" .. i
if UnitName(unit) == sender then
senderGuid = UnitGUID(unit)
break
end
end
end
libpredict:Ress(sender, target, senderGuid)
end
elseif msgtype == "Hot" then elseif msgtype == "Hot" then
-- Duplicate check: ignore same sender+target+spell within DUPLICATE_WINDOW -- Duplicate check: ignore same sender+target+spell within DUPLICATE_WINDOW
local now = pfUI.uf.now or GetTime() local now = pfUI.uf.now or GetTime()
@@ -672,41 +602,6 @@ function libpredict:HealDelay(sender, delay)
end end
end end
function libpredict:Ress(sender, target, senderGuid)
ress[target] = ress[target] or {}
ress[target][sender] = true
if senderGuid then ressGuidToName[senderGuid] = sender end
-- no timer here - timer is only set once the cast actually completes
end
function libpredict:RessSetTimer(sender, target)
ress_timers[target] = ress_timers[target] or {}
local existing = ress_timers[target][sender]
if not existing or GetTime() >= existing then
ress_timers[target][sender] = GetTime() + RESS_TIMEOUT
else
end
end
function libpredict:RessStop(sender)
local now = GetTime()
for ttarget, t in pairs(ress) do
for tsender in pairs(ress[ttarget]) do
if sender == tsender then
local expiry = ress_timers[ttarget] and ress_timers[ttarget][tsender]
if not expiry or now >= expiry then
ress[ttarget][tsender] = nil
if ress_timers[ttarget] then ress_timers[ttarget][tsender] = nil end
else
end
end
end
end
for guid, name in pairs(ressGuidToName) do
if name == sender then ressGuidToName[guid] = nil end
end
end
function libpredict:UnitGetIncomingHeals(unit) function libpredict:UnitGetIncomingHeals(unit)
if not unit then return 0 end if not unit then return 0 end
local name = UnitName(unit) local name = UnitName(unit)
@@ -729,26 +624,35 @@ function libpredict:UnitGetIncomingHeals(unit)
return sumheal return sumheal
end end
function libpredict:UnitHasIncomingResurrection(unit) -- Whether a resurrection is being cast at the unit, or landed and waits for
if not unit then return nil end -- the unit to accept it
local name = UnitName(unit) function libpredict:UnitHasResurrection(unit)
if not name then return nil end return UnitHasIncomingResurrection(unit) or resOffers[UnitGUID(unit)] ~= nil
if not ress[name] then
return nil
else
for sender, val in pairs(ress[name]) do
if val == true then
return val
end
end
end
return nil
end end
local realm = GetRealmName() local realm = GetRealmName()
local resetcache = CreateFrame("Frame") local resetcache = CreateFrame("Frame")
local hotsetbonus = libtipscan:GetScanner("hotsetbonus")
-- set bonus spells that lengthen a HoT
local REJUVENATION_SET_BONUS = 21871 -- Stormrage Raiment (8)
local RENEW_SET_BONUS = 26171 -- Garments of the Oracle (5)
-- the set bonus spells the equipped gear grants
local function GetActiveSetBonuses()
local pieces = {}
for slot = 1, 19 do
local setID = C_Item.GetItemSetID({ equipmentSlotIndex = slot })
if setID then pieces[setID] = (pieces[setID] or 0) + 1 end
end
local active = {}
for setID, count in pairs(pieces) do
for _, bonus in ipairs(C_Item.GetItemSetInfo(setID).bonuses) do
if count >= bonus.threshold then active[bonus.spellID] = true end
end
end
return active
end
resetcache:RegisterEvent("PLAYER_ENTERING_WORLD") resetcache:RegisterEvent("PLAYER_ENTERING_WORLD")
resetcache:RegisterEvent("LEARNED_SPELL_IN_TAB") resetcache:RegisterEvent("LEARNED_SPELL_IN_TAB")
resetcache:RegisterEvent("CHARACTER_POINTS_CHANGED") resetcache:RegisterEvent("CHARACTER_POINTS_CHANGED")
@@ -773,19 +677,9 @@ resetcache:SetScript("OnEvent", function()
if gear == gear_string then return end if gear == gear_string then return end
gear_string = gear gear_string = gear
local setBonusCounter local bonuses = GetActiveSetBonuses()
setBonusCounter = 0 rejuvDuration = bonuses[REJUVENATION_SET_BONUS] and 15 or 12
for i=1,10 do --there is no need to check slots above 10 renewDuration = bonuses[RENEW_SET_BONUS] and 18 or 15
hotsetbonus:SetInventoryItem("player", i)
if hotsetbonus:Find(L["healduration"]["Rejuvenation"]) then setBonusCounter = setBonusCounter + 1 end
end
rejuvDuration = setBonusCounter == 8 and 15 or 12
setBonusCounter = 0
for i =1,10 do
hotsetbonus:SetInventoryItem("player", i)
if hotsetbonus:Find(L["healduration"]["Renew"]) then setBonusCounter = setBonusCounter + 1 end
end
renewDuration = setBonusCounter == 5 and 18 or 15
end end
-- flag all cached heals for renewal -- flag all cached heals for renewal
@@ -834,7 +728,6 @@ local pendingHots = {}
-- Gather Data by User Actions -- Gather Data by User Actions
hooksecurefunc("CastSpell", function(id, bookType) hooksecurefunc("CastSpell", function(id, bookType)
if not libpredict.sender.enabled then return end
local effect, rank = libspell.GetSpellInfo(id, bookType) local effect, rank = libspell.GetSpellInfo(id, bookType)
if not effect then return end if not effect then return end
spell_queue[1] = effect spell_queue[1] = effect
@@ -887,7 +780,6 @@ hooksecurefunc("CastSpell", function(id, bookType)
end) end)
hooksecurefunc("CastSpellByName", function(effect, target) hooksecurefunc("CastSpellByName", function(effect, target)
if not libpredict.sender.enabled then return end
local effect, rank = libspell.GetSpellInfo(effect) local effect, rank = libspell.GetSpellInfo(effect)
if not effect then return end if not effect then return end
@@ -951,7 +843,6 @@ hooksecurefunc("CastSpellByName", function(effect, target)
end) end)
hooksecurefunc("UseAction", function(slot, target, selfcast) hooksecurefunc("UseAction", function(slot, target, selfcast)
if not libpredict.sender.enabled then return end
if not IsCurrentAction(slot) then return end if not IsCurrentAction(slot) then return end
local kind, id = GetActionInfo(slot) local kind, id = GetActionInfo(slot)
local effect, rank local effect, rank
@@ -1012,8 +903,10 @@ hooksecurefunc("UseAction", function(slot, target, selfcast)
end) end)
libpredict.sender = CreateFrame("Frame", "pfPredictionSender", UIParent) libpredict.sender = CreateFrame("Frame", "pfPredictionSender", UIParent)
-- cleared when a HealComm addon already broadcasts this player's casts
libpredict.sender.enabled = true libpredict.sender.enabled = true
libpredict.sender.SendHealCommMsg = function(self, msg) libpredict.sender.SendHealCommMsg = function(self, msg)
if not self.enabled then return end
-- Smart channel selection: Only send to relevant channel to avoid duplicates -- Smart channel selection: Only send to relevant channel to avoid duplicates
if IsInRaid() then if IsInRaid() then
-- In raid: Only send to RAID (includes all raid members) -- In raid: Only send to RAID (includes all raid members)
@@ -1026,6 +919,7 @@ libpredict.sender.SendHealCommMsg = function(self, msg)
-- BG groups are handled by RAID channel -- BG groups are handled by RAID channel
end end
libpredict.sender.SendResCommMsg = function(self, msg) libpredict.sender.SendResCommMsg = function(self, msg)
if not self.enabled then return end
-- Smart channel selection: Only send to relevant channel to avoid duplicates -- Smart channel selection: Only send to relevant channel to avoid duplicates
if IsInRaid() then if IsInRaid() then
-- In raid: Only send to RAID (includes all raid members) -- In raid: Only send to RAID (includes all raid members)
@@ -1071,7 +965,6 @@ libpredict.sender:RegisterEvent("UNIT_SPELLCAST_DELAYED")
libpredict.sender:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED") libpredict.sender:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
libpredict.sender:RegisterEvent("UNIT_SPELLCAST_FAILED") libpredict.sender:RegisterEvent("UNIT_SPELLCAST_FAILED")
libpredict.sender:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED") libpredict.sender:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED")
libpredict.sender:RegisterEvent("UNIT_SPELLCAST_STOP")
libpredict.sender:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") libpredict.sender:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
-- Shared cleanup helper for failed/interrupted casts -- Shared cleanup helper for failed/interrupted casts
@@ -1083,7 +976,6 @@ local function onCastFailed()
s.healing = nil s.healing = nil
elseif s.resurrecting then elseif s.resurrecting then
local target = s.current_cast_target or spell_queue[3] local target = s.current_cast_target or spell_queue[3]
libpredict:RessStop(UnitName("player"))
s:SendHealCommMsg("Resurrection/stop/") s:SendHealCommMsg("Resurrection/stop/")
s:SendResCommMsg("RESNO " .. (target or "")) s:SendResCommMsg("RESNO " .. (target or ""))
s.resurrecting = nil s.resurrecting = nil
@@ -1134,11 +1026,20 @@ local function OnHeal()
end end
end end
-- A landed resurrection: the target has an offer to accept, which outlasts
-- UnitHasIncomingResurrection's end with the cast
local function OnResurrect()
-- arg8=destGUID
resOffers[arg8] = GetTime() + RES_OFFER_TIMEOUT
RefreshResFrames(arg8)
end
local lastOtherCast = {} -- [event] = castGUID of the last other-unit event handled local lastOtherCast = {} -- [event] = castGUID of the last other-unit event handled
libpredict.sender:SetScript("OnEvent", function() libpredict.sender:SetScript("OnEvent", function()
if event == "COMBAT_LOG_EVENT_UNFILTERED" then if event == "COMBAT_LOG_EVENT_UNFILTERED" then
if arg2 == "SPELL_HEAL" then OnHeal() end if arg2 == "SPELL_HEAL" then OnHeal()
elseif arg2 == "SPELL_RESURRECT" then OnResurrect() end
return return
end end
@@ -1174,13 +1075,11 @@ libpredict.sender:SetScript("OnEvent", function()
lastOtherCast[event] = arg2 lastOtherCast[event] = arg2
if event == "UNIT_SPELLCAST_START" then if event == "UNIT_SPELLCAST_START" then
OnOtherCastStart(unit, arg3, arg2) OnOtherCastStart(unit, arg3)
elseif event == "UNIT_SPELLCAST_SUCCEEDED" then elseif event == "UNIT_SPELLCAST_SUCCEEDED" then
OnOtherCastSucceeded(unit, arg3, arg2) OnOtherCastSucceeded(unit)
elseif event == "UNIT_SPELLCAST_INTERRUPTED" then elseif event == "UNIT_SPELLCAST_INTERRUPTED" then
OnOtherCastInterrupted(unit) OnOtherCastInterrupted(unit)
elseif event == "UNIT_SPELLCAST_STOP" then
castTargets[arg2] = nil
end end
end) end)
-30
View File
@@ -1,30 +0,0 @@
-- load pfUI environment
setfenv(1, pfUI:GetEnvironment())
--[[ librange ]]--
-- 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.
if pfUI.api.librange then return end
local librange = {}
function librange:UnitInSpellRange(unit)
-- _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
pfUI.api.librange = librange
+1 -3
View File
@@ -116,9 +116,7 @@ function libspell.GetSpellInfo(index, bookType)
end end
-- Reset all spell caches whenever new spells are learned/unlearned -- Reset all spell caches whenever new spells are learned/unlearned
local resetcache = CreateFrame("Frame") pfUI.events:RegisterFrameEventAndCallback("LEARNED_SPELL_IN_TAB", function()
resetcache:RegisterEvent("LEARNED_SPELL_IN_TAB")
resetcache:SetScript("OnEvent", function()
table.wipe(spellmaxrank) table.wipe(spellmaxrank)
table.wipe(spellindex) table.wipe(spellindex)
table.wipe(spellinfo) table.wipe(spellinfo)
-200
View File
@@ -1,200 +0,0 @@
-- load pfUI environment
setfenv(1, pfUI:GetEnvironment())
--[[ libtipscan ]]--
-- A pfUI library that provides tooltip scanner.
--
-- libtipscan:GetScanner(name)
-- returns or resets a scanner for use with tooltip methods
--
-- libtipscan:List()
-- prints a list of all active scanners
--
-- The scanner tooltip returned by :GetScanner has all the Set____ GameTooltip methods with a built-in full clear
-- In addition the scanner has the following custom methods
-- <scanner>:Text()
-- return a table with all the left, right texts in {[line] = {left, right}} format
-- <scanner>:Find(text, [exact])
-- returns true (linenumber) and [the text found or the captures made if text is a pattern]
-- exact is optional flag making it look only for exact matches
-- <scanner>:Color(r,g,b)
-- returns true (linenumber) if the r,g,b color tuple is found as text color on the scanner
-- accepts color table as argument as well (eg. <scanner>:Color(RED_FONT_COLOR) )
-- <scanner>:Line(line_number)
-- returns left, right text from that tooltip line
-- <scanner>:List()
-- prints a list of all available scanner methods
-- return instantly when another libtipscan is already active
if pfUI.api.libtipscan then return end
local libtipscan = {}
local baseName = "pfUIScan"
local methods = {
"SetBagItem", "SetAction", "SetAuctionItem", "SetAuctionSellItem", "SetBuybackItem",
"SetCraftItem", "SetCraftSpell", "SetHyperlink", "SetInboxItem", "SetInventoryItem",
"SetLootItem", "SetLootRollItem", "SetMerchantItem", "SetPetAction", "SetPlayerBuff",
"SetQuestItem", "SetQuestLogItem", "SetQuestRewardSpell", "SetSendMailItem", "SetShapeshift",
"SetSpell", "SetTalent", "SetTrackingSpell", "SetTradePlayerItem", "SetTradeSkillItem", "SetTradeTargetItem",
"SetTrainerService", "SetUnit", "SetUnitBuff", "SetUnitDebuff",
}
local extra_methods = {
"Find", "Line", "Text", "List",
}
local getFontString = function(obj)
local name = obj:GetName()
local r, g, b, color, a
local text, segment
for i=1, obj:NumLines() do
local left = _G[string.format("%sTextLeft%d",name,i)]
segment = left and left:IsVisible() and left:GetText()
segment = segment and segment ~= "" and segment or nil
if segment then
r, g, b, a = left:GetTextColor()
segment = rgbhex(r,g,b) .. segment .. "|r"
text = text and text .. "\n" .. segment or segment
end
end
return text
end
local getText = function(obj)
local name = obj:GetName()
local text = {}
for i=1, obj:NumLines() do
local left, right = _G[string.format("%sTextLeft%d",name,i)], _G[string.format("%sTextRight%d",name,i)]
left = left and left:IsVisible() and left:GetText()
right = right and right:IsVisible() and right:GetText()
left = left and left ~= "" and left or nil
right = right and right ~= "" and right or nil
if left or right then
text[i] = {left, right}
end
end
return text
end
local findText = function(obj, text, exact)
local name = obj:GetName()
for i=1, obj:NumLines() do
local left, right = _G[string.format("%sTextLeft%d",name,i)], _G[string.format("%sTextRight%d",name,i)]
left = left and left:IsVisible() and left:GetText()
right = right and right:IsVisible() and right:GetText()
if exact then
if (left and left == text) or (right and right == text) then
return i, text
end
else
if left then
local found,_,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = string.find(left, text)
if found then
return i, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10
end
end
if right then
local found,_,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 = string.find(right, text)
if found then
return i, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10
end
end
end
end
end
local lineText = function(obj, line)
local name = obj:GetName()
if line <= obj:NumLines() then
local left, right = _G[string.format("%sTextLeft%d",name,line)], _G[string.format("%sTextRight%d",name,line)]
left = left and left:IsVisible() and left:GetText()
right = right and right:IsVisible() and right:GetText()
if left or right then
return left, right
end
end
end
local findColor = function(obj, r,g,b)
local name = obj:GetName()
if type(r) == "table" then
r,g,b = r.r or r[1], r.g or r[2], r.b or r[3]
end
for i=1, obj:NumLines() do
local tr, tg, tb
local left, right = _G[string.format("%sTextLeft%d",name,i)], _G[string.format("%sTextRight%d",name,i)]
if left and left:IsVisible() then
tr, tg, tb = left:GetTextColor()
tr, tg, tb = round(tr,1), round(tg,1), round(tb,1)
end
if tr and (tr == r and tg == g and tb == b) then
return i
end
if right and right:IsVisible() then
tr, tg, tb = right:GetTextColor()
tr, tg, tb = round(tr,1), round(tg,1), round(tb,1)
end
if tr and (tr == r and tg == g and tb == b) then
return i
end
end
end
libtipscan._registry = setmetatable({},{__index = function(t,k)
local v = CreateFrame("GameTooltip", string.format("%s%s",baseName,k), nil, "GameTooltipTemplate")
v:SetOwner(WorldFrame,"ANCHOR_NONE")
v:SetScript("OnHide", function ()
this:SetOwner(WorldFrame,"ANCHOR_NONE")
end)
function v:Text()
return getText(self)
end
function v:FontString()
return getFontString(self)
end
function v:Find(text, exact)
return findText(self, text, exact)
end
function v:Color(r,g,b)
return findColor(self,r,g,b)
end
function v:Line(line)
return lineText(self, line)
end
for _,method in ipairs(methods) do
local method = method
local old = v[method]
v[method] = function(v, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
v:ClearLines()
v:SetOwner(WorldFrame, "ANCHOR_NONE")
return old(v, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
end
end
function v:List()
table.sort(methods)
for _,method in ipairs(methods) do
print(method)
end
for _,method in ipairs(extra_methods) do
print(method)
end
end
rawset(t,k,v)
return v
end})
function libtipscan:GetScanner(type)
local scanner = self._registry[type]
scanner:ClearLines()
return scanner
end
function libtipscan:List()
for name, scanner in pairs(self._registry) do
print(name)
end
end
-- add libtipscan to pfUI API
pfUI.api.libtipscan = libtipscan
+38 -97
View File
@@ -2,37 +2,26 @@
setfenv(1, pfUI:GetEnvironment()) setfenv(1, pfUI:GetEnvironment())
--[[ libunitscan ]]-- --[[ libunitscan ]]--
-- A pfUI library that detects and saves all kind of unit related informations. -- A pfUI library that remembers the class, level and guild of every player it
-- Such as level, class, elite-state and playertype. Each query causes the library -- sees: in the friends, guild, raid and party rosters, in /who results, and as
-- to automatically scan for the target if not already existing. Player-data is -- target, mouseover or nameplate. The data is persisted within pfUI_playerDB,
-- persisted within the pfUI_playerDB where the mob data is a throw-away table. -- for the places that only have a player's name, such as chat links and
-- The automatic target scanner is only working for vanilla due to client limitations -- offline friends. Anything with a unit reads the unit itself instead.
-- on further expansions.
-- --
-- External functions: -- External functions:
-- GetUnitInfo(name, active, isPlayer) -- GetUnitInfo(name)
-- Returns information of the given unitname. Returns nil if no match is found. -- Returns information of the given player name. Returns nil if the player
-- When nothing is found and the active flag is set, the autoscanner will -- was never seen.
-- automatically pick it up and try to fill the missing entry by targetting the unit.
-- Pass isPlayer=true/false to restrict the lookup to the players or mobs table
-- (avoids name-collision false positives, e.g. a player and an NPC named Chromie).
-- --
-- class[String] - The class of the unit -- class[String] - The class of the player
-- level[Number] - The level of the unit -- level[Number] - The level of the player
-- elite[String] - The elite state of the unit (See UnitClassification()) -- guild[String] - The guild name of the player
-- player[Boolean] - Returns true if unit is a player
-- guild[String] - Returns guild name of unit is a player
--
-- Internal functions:
-- libunitscan:AddData(db, name, class, level, elite)
-- Adds unit data to a given db. Where db should be either "players" or "mobs"
-- --
-- return instantly when another libunitscan is already active -- return instantly when another libunitscan is already active
if pfUI.api.libunitscan then return end if pfUI.api.libunitscan then return end
local units = { players = {}, mobs = {} } local players = {}
local queue = { }
-- Feed (guid, name, classToken) into ClassicAPI's persistent name -- Feed (guid, name, classToken) into ClassicAPI's persistent name
-- cache when the unit's GUID is resolvable. Roster-style packets -- cache when the unit's GUID is resolvable. Roster-style packets
@@ -46,28 +35,19 @@ local function RememberByUnit(unit, name, class)
C_PlayerCache.RememberPlayer(guid, name, class, UnitRace(unit), UnitSex(unit)) C_PlayerCache.RememberPlayer(guid, name, class, UnitRace(unit), UnitSex(unit))
end end
function GetUnitInfo(name, active, isPlayer) function GetUnitInfo(name)
if isPlayer ~= false and units["players"][name] then local ret = players[name]
local ret = units["players"][name] if ret then
return ret.class, ret.level, ret.elite, true, ret.guild return ret.class, ret.level, ret.guild
elseif isPlayer ~= true and units["mobs"][name] then
local ret = units["mobs"][name]
return ret.class, ret.level, ret.elite, nil, ret.guild
elseif active then
queue[name] = true
libunitscan:Show()
end end
end end
local function AddData(db, name, class, level, elite, guild) local function AddData(name, class, level, guild)
if not name or not db then return end if not name then return end
units[db] = units[db] or {} players[name] = players[name] or {}
units[db][name] = units[db][name] or {} players[name].class = class or players[name].class
units[db][name].class = class or units[db][name].class players[name].level = level or players[name].level
units[db][name].level = level or units[db][name].level players[name].guild = guild or players[name].guild
units[db][name].elite = elite or units[db][name].elite
units[db][name].guild = guild or units[db][name].guild
queue[name] = nil
end end
local libunitscan = CreateFrame("Frame", "pfUnitScan", UIParent) local libunitscan = CreateFrame("Frame", "pfUnitScan", UIParent)
@@ -85,14 +65,14 @@ libunitscan:SetScript("OnEvent", function()
if event == "PLAYER_ENTERING_WORLD" then if event == "PLAYER_ENTERING_WORLD" then
-- load pfUI_playerDB -- load pfUI_playerDB
units.players = pfUI_playerDB players = pfUI_playerDB
-- update own character details -- update own character details
local name = UnitName("player") local name = UnitName("player")
local class = UnitClassBase("player") local class = UnitClassBase("player")
local level = UnitLevel("player") local level = UnitLevel("player")
local guild = GetGuildInfo("player") local guild = GetGuildInfo("player")
AddData("players", name, class, level, nil, guild) AddData(name, class, level, guild)
RememberByUnit("player", name, class) RememberByUnit("player", name, class)
elseif event == "FRIENDLIST_UPDATE" then elseif event == "FRIENDLIST_UPDATE" then
@@ -100,38 +80,38 @@ libunitscan:SetScript("OnEvent", function()
local info = C_FriendList.GetFriendInfoByIndex(i) local info = C_FriendList.GetFriendInfoByIndex(i)
if info then if info then
local level = info.level > 0 and info.level or nil local level = info.level > 0 and info.level or nil
AddData("players", info.name, info.classFilename, level) AddData(info.name, info.classFilename, level)
end end
end end
elseif event == "GUILD_ROSTER_UPDATE" then elseif event == "GUILD_ROSTER_UPDATE" then
local name, class, level, _, guild local guild = GetGuildInfo("player")
local name, class, level, _
for i = 1, GetNumGuildMembers() do for i = 1, GetNumGuildMembers() do
name, _, _, level, class = GetGuildRosterInfo(i) name, _, _, level, class = GetGuildRosterInfo(i)
guild = GetGuildInfo("player")
class = L["class"][class] or nil class = L["class"][class] or nil
AddData("players", name, class, level, nil, guild) AddData(name, class, level, guild)
end end
elseif event == "RAID_ROSTER_UPDATE" then elseif event == "RAID_ROSTER_UPDATE" then
local name, class, SubGroup, level, unit, _ local name, class, level, unit, _
for i = 1, GetNumRaidMembers() do for i = 1, GetNumRaidMembers() do
unit = "raid" .. i unit = "raid" .. i
name, _, SubGroup, level, class = GetRaidRosterInfo(i) name, _, _, level, class = GetRaidRosterInfo(i)
class = L["class"][class] or nil class = L["class"][class] or nil
AddData("players", name, class, level) AddData(name, class, level)
RememberByUnit(unit, name, class) RememberByUnit(unit, name, class)
end end
elseif event == "PARTY_MEMBERS_CHANGED" then elseif event == "PARTY_MEMBERS_CHANGED" then
local name, class, level, unit, _, guild local name, class, level, unit, guild
for i = 1, GetNumPartyMembers() do for i = 1, GetNumPartyMembers() do
unit = "party" .. i unit = "party" .. i
class = UnitClassBase(unit) class = UnitClassBase(unit)
name = UnitName(unit) name = UnitName(unit)
level = UnitLevel(unit) level = UnitLevel(unit)
guild = GetGuildInfo(unit) guild = GetGuildInfo(unit)
AddData("players", name, class, level, nil, guild) AddData(name, class, level, guild)
RememberByUnit(unit, name, class) RememberByUnit(unit, name, class)
end end
@@ -139,7 +119,7 @@ libunitscan:SetScript("OnEvent", function()
for i = 1, C_FriendList.GetNumWhoResults() do for i = 1, C_FriendList.GetNumWhoResults() do
local info = C_FriendList.GetWhoInfo(i) local info = C_FriendList.GetWhoInfo(i)
if info then if info then
AddData("players", info.fullName, info.filename, info.level, nil, info.fullGuildName) AddData(info.fullName, info.filename, info.level, info.fullGuildName)
end end
end end
@@ -147,55 +127,16 @@ libunitscan:SetScript("OnEvent", function()
local scan = event == "PLAYER_TARGET_CHANGED" and "target" local scan = event == "PLAYER_TARGET_CHANGED" and "target"
or event == "NAME_PLATE_UNIT_ADDED" and arg1 or event == "NAME_PLATE_UNIT_ADDED" and arg1
or "mouseover" or "mouseover"
local name, class, level, elite, guild, _
if UnitExists(scan) then
if UnitIsPlayer(scan) then if UnitIsPlayer(scan) then
class = UnitClassBase(scan) local name = UnitName(scan)
level = UnitLevel(scan) local class = UnitClassBase(scan)
-- UnitLevel returns -1 for unknown levels, don't overwrite known values -- UnitLevel returns -1 for unknown levels, don't overwrite known values
local level = UnitLevel(scan)
level = level > 0 and level or nil level = level > 0 and level or nil
name = UnitName(scan) AddData(name, class, level, GetGuildInfo(scan))
guild = GetGuildInfo(scan)
AddData("players", name, class, level, nil, guild)
RememberByUnit(scan, name, class) 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
end
end)
-- setup sound function switches
local SoundOn = PlaySound
local SoundOff = function() return end
libunitscan:SetScript("OnUpdate", function()
-- don't scan when another unit is in target
if UnitExists("target") or UnitName("target") then return end
local name = next(queue)
if name then
-- disable sound
_G.PlaySound = SoundOff
-- try to target the unknown unit
TargetByName(name, true)
ClearTarget()
-- enable sound again
_G.PlaySound = SoundOn
queue[name] = nil
end
this:Hide()
end) end)
pfUI.api.libunitscan = libunitscan pfUI.api.libunitscan = libunitscan
+138 -204
View File
@@ -13,6 +13,12 @@ pfUI:RegisterModule("actionbar", function ()
local updatecache = { } -- contains a list of buttons slots that shall be refreshed later -> [slot] = true local updatecache = { } -- contains a list of buttons slots that shall be refreshed later -> [slot] = true
local buttoncache = { } -- contains a list of all buttons ever created -> [slot] = frame local buttoncache = { } -- contains a list of all buttons ever created -> [slot] = frame
-- ClassicAPI's left/right modifier state, which unlike IsShiftKeyDown is
-- corrected for keys released while the game was in the background
local function ShiftDown() return IsLeftShiftKeyDown() or IsRightShiftKeyDown() end
local function CtrlDown() return IsLeftControlKeyDown() or IsRightControlKeyDown() end
local function AltDown() return IsLeftAltKeyDown() or IsRightAltKeyDown() end
-- try to assume based on the current mouse positions if a button drag -- try to assume based on the current mouse positions if a button drag
-- should happen even if action-on-key-down is used. By that replace the -- should happen even if action-on-key-down is used. By that replace the
-- cast events by reverting the active buttons to the old mouse-up state. -- cast events by reverting the active buttons to the old mouse-up state.
@@ -25,13 +31,13 @@ pfUI:RegisterModule("actionbar", function ()
-- skip if always shift-drag is not enabled -- skip if always shift-drag is not enabled
if C.bars.shiftdrag ~= "1" then return end if C.bars.shiftdrag ~= "1" then return end
if drag_await and not drag_active and IsShiftKeyDown() then if drag_await and not drag_active and ShiftDown() then
drag_active = true drag_active = true
-- set all buttons to regular on release clicks -- set all buttons to regular on release clicks
for id, button in pairs(buttoncache) do for id, button in pairs(buttoncache) do
button:RegisterForClicks("LeftButtonUp", "RightButtonUp") button:RegisterForClicks("LeftButtonUp", "RightButtonUp")
end end
elseif drag_active and not IsShiftKeyDown() then elseif drag_active and not ShiftDown() then
drag_active = nil drag_active = nil
-- set all buttons back to their defaults -- set all buttons back to their defaults
for id, button in pairs(buttoncache) do for id, button in pairs(buttoncache) do
@@ -39,6 +45,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
end end
end end
pfUI.events:RegisterFrameEventAndCallback("MODIFIER_STATE_CHANGED", AssumeButtonDrag)
-- hide blizzard bars -- hide blizzard bars
local function kill(f, killshow) local function kill(f, killshow)
@@ -161,113 +168,83 @@ pfUI:RegisterModule("actionbar", function ()
[12] = "Pet", [12] = "Pet",
} }
-- Button animations scale and fade a copy of the icon through keyframes of
-- { duration, scale, alpha, smoothing }. Styles with hideicon hide the icon
-- while the copy plays.
local button_animations = { local button_animations = {
["none"] = function() ["zoomfade"] = {
this.active = nil { .67, 2, 0, "NONE" },
this:Hide() },
end, ["shrinkreturn"] = { hideicon = true,
["zoomfade"] = function() { .13, .36, .36, "OUT" },
if this.active == 0 then { .2, 1, 1, "IN" },
-- init animation },
this:SetSize(this.parent:GetSize()) ["elasticzoom"] = { hideicon = true,
this:SetScale(this.parent:GetScale()) { .1, .47, .47, "OUT" },
this.tex:SetTexture(this.parent.icon:GetTexture()) { .28, 1.12, 1, "IN_OUT" },
this.tex:SetVertexColor(this.parent.icon:GetVertexColor()) { .28, .97, .97, "IN_OUT" },
this:SetAlpha(1) { .46, 1, 1, "IN_OUT" },
this.active = 1 },
return ["wobblezoom"] = { hideicon = true,
elseif this.active == 1 then { .07, .25, .25, "OUT" },
-- run animation { .17, 1.41, 1, "IN_OUT" },
local fade = 30/GetFramerate()*0.05 { .17, .77, .77, "IN_OUT" },
this:SetAlpha(this:GetAlpha() - fade) { .17, 1.12, 1, "IN_OUT" },
this:SetScale(this:GetScale() + fade) { .17, .93, .93, "IN_OUT" },
if this:GetAlpha() > 0 then return end { .17, 1.04, 1, "IN_OUT" },
end { .17, .98, .98, "IN_OUT" },
{ .59, 1, 1, "IN_OUT" },
-- stop animation },
this.active = nil
this:Hide()
end,
["shrinkreturn"] = function()
if this.active == 0 then
-- init animation
this:SetSize(this.parent:GetSize())
this:SetScale(this.parent:GetScale())
this.tex:SetTexture(this.parent.icon:GetTexture())
this.tex:SetVertexColor(this.parent.icon:GetVertexColor())
this:SetAlpha(1)
this.parent.icon:Hide()
this.active = 1
this.time = 0
return
elseif this.active == 1 then
-- run animation
this.time = this.time + 30/GetFramerate()*0.1
local fade = 1 -math.exp(-this.time)*math.sin(this.time*math.pi)
this:SetAlpha(fade)
this:SetScale(fade)
if this.time < 1 then return end
end
-- stop animation
this.active = nil
this:Hide()
this.parent.icon:Show()
end,
["elasticzoom"] = function()
if this.active == 0 then
-- init animation
this:SetSize(this.parent:GetSize())
this:SetScale(this.parent:GetScale())
this.tex:SetTexture(this.parent.icon:GetTexture())
this.tex:SetVertexColor(this.parent.icon:GetVertexColor())
this:SetAlpha(1)
this.parent.icon:Hide()
this.active = 1
this.time = 0
return
elseif this.active == 1 then
-- run animation
this.time = this.time + 30/GetFramerate()*0.03
local fade = 1 -math.exp(-this.time*6)*math.sin(this.time*4*math.pi)
this:SetAlpha(fade)
this:SetScale(fade)
if this.time < 1 then return end
end
-- stop animation
this.active = nil
this:Hide()
this.parent.icon:Show()
end,
["wobblezoom"] = function()
if this.active == 0 then
-- init animation
this:SetSize(this.parent:GetSize())
this:SetScale(this.parent:GetScale())
this.tex:SetTexture(this.parent.icon:GetTexture())
this.tex:SetVertexColor(this.parent.icon:GetVertexColor())
this:SetAlpha(1)
this.parent.icon:Hide()
this.active = 1
this.time = 0
return
elseif this.active == 1 then
-- run animation
this.time = this.time + 30/GetFramerate()*0.02
local fade = 1 -math.exp(-this.time*6)*math.sin(this.time*10*math.pi)
this:SetAlpha(fade)
this:SetScale(fade)
if this.time < 1 then return end
end
-- stop animation
this.active = nil
this:Hide()
this.parent.icon:Show()
end,
} }
local function CreateButtonAnimation(button, style)
local group = button.animation.tex:CreateAnimationGroup()
group:SetIgnoreFramerateThrottle(true)
local scale, alpha = 1, 1
for order, key in ipairs(style) do
local duration, nextscale, nextalpha, smoothing = unpack(key)
local zoom = group:CreateAnimation("Scale")
zoom:SetOrder(order)
zoom:SetDuration(duration)
zoom:SetSmoothing(smoothing)
zoom:SetScale(nextscale / scale, nextscale / scale)
local fade = group:CreateAnimation("Alpha")
fade:SetOrder(order)
fade:SetDuration(duration)
fade:SetSmoothing(smoothing)
fade:SetChange(nextalpha - alpha)
scale, alpha = nextscale, nextalpha
end
local function Done()
button.animation:Hide()
button.icon:Show()
end
group:SetScript("OnFinished", Done)
group:SetScript("OnStop", Done)
return group
end
local function PlayButtonAnimation(button)
local style = button_animations[C.bars.animation]
if not style then return end
local animation = button.animation
animation.groups[style] = animation.groups[style] or CreateButtonAnimation(button, style)
animation.tex:StopAnimating()
animation.tex:SetTexture(button.icon:GetTexture())
animation.tex:SetVertexColor(button.icon:GetVertexColor())
animation:Show()
if style.hideicon then button.icon:Hide() end
animation.groups[style]:Play()
end
local function GetActiveBar() local function GetActiveBar()
if CURRENT_ACTIONBAR_PAGE == 1 and GetBonusBarOffset() ~= 0 then if CURRENT_ACTIONBAR_PAGE == 1 and GetBonusBarOffset() ~= 0 then
return NUM_ACTIONBAR_PAGES + GetBonusBarOffset() return NUM_ACTIONBAR_PAGES + GetBonusBarOffset()
@@ -310,8 +287,7 @@ pfUI:RegisterModule("actionbar", function ()
-- trigger action animation -- trigger action animation
if ( pfUI_config.bars.keydown == "1" and keystate == "down" ) or (pfUI_config.bars.keydown == "0" and keystate == "up" ) or self.bar == 11 or mouse then if ( pfUI_config.bars.keydown == "1" and keystate == "down" ) or (pfUI_config.bars.keydown == "0" and keystate == "up" ) or self.bar == 11 or mouse then
if C.bars.animmode == "keypress" and ( self:GetAlpha() > .1 or C.bars.animalways == "1" ) then if C.bars.animmode == "keypress" and ( self:GetAlpha() > .1 or C.bars.animalways == "1" ) then
self.animation.active = 0 PlayButtonAnimation(self)
self.animation:Show()
end end
end end
@@ -364,8 +340,9 @@ pfUI:RegisterModule("actionbar", function ()
local function ButtonEnter(self) local function ButtonEnter(self)
self = self or this self = self or this
-- indicate that dragging could get enabled -- indicate that dragging could get enabled, at once if shift is held
drag_await = true drag_await = true
AssumeButtonDrag()
GameTooltip:ClearLines() GameTooltip:ClearLines()
GameTooltip_SetDefaultAnchor(GameTooltip, self) GameTooltip_SetDefaultAnchor(GameTooltip, self)
@@ -382,8 +359,6 @@ pfUI:RegisterModule("actionbar", function ()
end end
elseif self.spellID then elseif self.spellID then
GameTooltip:SetSpellByID(self.spellID) GameTooltip:SetSpellByID(self.spellID)
elseif self.spellslot and self.booktype then
GameTooltip:SetSpell(self.spellslot, self.booktype)
else else
GameTooltip:SetAction(self.id) GameTooltip:SetAction(self.id)
end end
@@ -416,11 +391,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
-- equipped item -- equipped item
if IsEquippedAction(sid) and C.bars.showequipped == "1" then self.equipped:SetShown(IsEquippedAction(sid) and C.bars.showequipped == "1")
self.equipped:Show()
else
self.equipped:Hide()
end
end end
local start, duration, enable, castable, autocast, token local start, duration, enable, castable, autocast, token
@@ -456,11 +427,6 @@ pfUI:RegisterModule("actionbar", function ()
id = self.bar == 1 and self.slot or sid-((self.bar)-1)*12 id = self.bar == 1 and self.slot or sid-((self.bar)-1)*12
end 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 if not self.showempty and self.backdrop and not texture and grid == 0 then
self.backdrop:Hide() self.backdrop:Hide()
self.hide = true self.hide = true
@@ -472,8 +438,7 @@ pfUI:RegisterModule("actionbar", function ()
-- active border -- active border
if active then if active then
if C.bars.animmode == "statechange" and not self.active:IsShown() then if C.bars.animmode == "statechange" and not self.active:IsShown() then
self.animation.active = 0 PlayButtonAnimation(self)
self.animation:Show()
end end
self.backdrop:SetBackdropBorderColor(cr,cg,cb,1) self.backdrop:SetBackdropBorderColor(cr,cg,cb,1)
@@ -513,11 +478,7 @@ pfUI:RegisterModule("actionbar", function ()
self.autocast:Hide() self.autocast:Hide()
end end
if castable and C.bars.showcastable == "1" then self.autocastable:SetShown(castable and C.bars.showcastable == "1")
self.autocastable:Show()
else
self.autocastable:Hide()
end
end end
-- keybinds -- keybinds
@@ -590,9 +551,6 @@ pfUI:RegisterModule("actionbar", function ()
start, duration, enable = GetShapeshiftFormCooldown(button.id) start, duration, enable = GetShapeshiftFormCooldown(button.id)
elseif button.bar == 12 then elseif button.bar == 12 then
start, duration, enable = GetPetActionCooldown(button.id) start, duration, enable = GetPetActionCooldown(button.id)
elseif button.spellslot and button.booktype then
start, duration = GetSpellCooldown(button.spellslot, button.booktype)
enable = 1
else else
start, duration, enable = GetActionCooldown(button.id) start, duration, enable = GetActionCooldown(button.id)
end end
@@ -694,9 +652,6 @@ pfUI:RegisterModule("actionbar", function ()
if (this.tick_main or 0) > GetTime() then return end if (this.tick_main or 0) > GetTime() then return end
this.tick_main = GetTime() + 0.025 this.tick_main = GetTime() + 0.025
-- update buttons whenever a button drag is assumed
AssumeButtonDrag()
if pfUI.unlock then if pfUI.unlock then
-- update all bars when entering unlock -- update all bars when entering unlock
if pfUI.unlock:IsShown() ~= unlock then if pfUI.unlock:IsShown() ~= unlock then
@@ -901,14 +856,9 @@ pfUI:RegisterModule("actionbar", function ()
if class == "DRUID" then if class == "DRUID" then
pageswitch:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player") pageswitch:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player")
end end
pageswitch:SetScript("OnEvent", function()
if event == "PLAYER_LOGOUT" then
this:UnregisterAllEvents()
this:SetScript("OnEvent", nil)
this:SetScript("OnUpdate", nil)
return
end
-- tracks prowl and shadowform from the page switch frame's events
local function UpdateFormPaging()
if class == "PRIEST" then if class == "PRIEST" then
if event == "UPDATE_SHAPESHIFT_FORM" or event == "PLAYER_ENTERING_WORLD" then if event == "UPDATE_SHAPESHIFT_FORM" or event == "PLAYER_ENTERING_WORLD" then
formpaging = InShadowform() formpaging = InShadowform()
@@ -956,33 +906,50 @@ pfUI:RegisterModule("actionbar", function ()
formpaging = nil formpaging = nil
end end
end end
end) end
-- sets the page the held modifier and the form ask for. It also runs on
-- every page change, so a page switched by other means snaps back.
local function UpdatePage()
local page = _G.CURRENT_ACTIONBAR_PAGE
pageswitch:SetScript("OnUpdate", function()
-- switch actionbar page depending on meta key that is pressed -- switch actionbar page depending on meta key that is pressed
if C.bars.pagemastershift == "1" and IsShiftKeyDown() then if C.bars.pagemastershift == "1" and ShiftDown() then
SwitchBar(shift) page = shift
return elseif C.bars.pagemasterctrl == "1" and CtrlDown() then
elseif C.bars.pagemasterctrl == "1" and IsControlKeyDown() then page = ctrl
SwitchBar(ctrl) elseif C.bars.pagemasteralt == "1" and AltDown() then
return page = alt
elseif C.bars.pagemasteralt == "1" and IsAltKeyDown() then
SwitchBar(alt)
return
elseif C.bars.pagemasteralt == "1" or C.bars.pagemasterctrl == "1" or C.bars.pagemastershift == "1" then elseif C.bars.pagemasteralt == "1" or C.bars.pagemasterctrl == "1" or C.bars.pagemastershift == "1" then
SwitchBar(default) page = default
end end
-- switch actionbar page while druid stealth / priest shadowform is active -- switch actionbar page while druid stealth / priest shadowform is active
if (class == "DRUID" and C.bars.druidstealth == "1") if (class == "DRUID" and C.bars.druidstealth == "1")
or (class == "PRIEST" and C.bars.priestshadow == "1") then or (class == "PRIEST" and C.bars.priestshadow == "1") then
if formpaging and _G.CURRENT_ACTIONBAR_PAGE == 1 then if formpaging and page == default then
SwitchBar(formpage) page = formpage
elseif not formpaging and _G.CURRENT_ACTIONBAR_PAGE == 8 then elseif not formpaging and page == formpage then
SwitchBar(default) page = default
end end
end end
SwitchBar(page)
end
pageswitch:SetScript("OnEvent", function()
if event == "PLAYER_LOGOUT" then
this:UnregisterAllEvents()
this:SetScript("OnEvent", nil)
return
end
UpdateFormPaging()
UpdatePage()
end) end)
pfUI.events:RegisterFrameEventAndCallback("MODIFIER_STATE_CHANGED", UpdatePage)
pfUI.events:RegisterFrameEventAndCallback("ACTIONBAR_PAGE_CHANGED", UpdatePage)
end end
local function CreateActionButton(parent, bar, button) local function CreateActionButton(parent, bar, button)
@@ -1000,8 +967,6 @@ pfUI:RegisterModule("actionbar", function ()
local bind_size = tonumber(C.bars.bind_size) local bind_size = tonumber(C.bars.bind_size)
local bind_color = { GetStringColor(C.bars.bind_color) } local bind_color = { GetStringColor(C.bars.bind_color) }
local cd_size = tonumber(C.bars.cd_size)
local showempty = C.bars["bar"..bar].showempty local showempty = C.bars["bar"..bar].showempty
local showmacro = C.bars["bar"..bar].showmacro local showmacro = C.bars["bar"..bar].showmacro
local showkybind = C.bars["bar"..bar].showkeybind local showkybind = C.bars["bar"..bar].showkeybind
@@ -1011,7 +976,6 @@ pfUI:RegisterModule("actionbar", function ()
if macro_size == 0 then macro_size = 1 end if macro_size == 0 then macro_size = 1 end
if count_size == 0 then macro_size = 1 end if count_size == 0 then macro_size = 1 end
if bind_size == 0 then macro_size = 1 end if bind_size == 0 then macro_size = 1 end
if cd_size == 0 then cd_size = nil end
local button_name = "pfActionBar" .. barnames[bar] .. "Button" .. button local button_name = "pfActionBar" .. barnames[bar] .. "Button" .. button
@@ -1043,10 +1007,7 @@ pfUI:RegisterModule("actionbar", function ()
f.slot = id f.slot = id
-- cooldown -- cooldown
f.cd = CreateFrame("Cooldown", f:GetName() .. "Cooldown", f, "CooldownFrameTemplate") f.cd = CreateCooldown(f, "actionbar", f:GetName() .. "Cooldown")
f.cd.pfCooldownStyleAnimation = 1
f.cd.pfCooldownType = "NOGCD"
f.cd.pfCooldownSize = cd_size
-- icon -- icon
f.icon = f:CreateTexture(button_name .. "Icon", "BACKGROUND") f.icon = f:CreateTexture(button_name .. "Icon", "BACKGROUND")
@@ -1055,8 +1016,8 @@ pfUI:RegisterModule("actionbar", function ()
-- animation -- animation
f.animation = CreateFrame("Frame", button_name .. "Animation", f) f.animation = CreateFrame("Frame", button_name .. "Animation", f)
f.animation.parent = f f.animation.groups = {}
f.animation:SetPoint("CENTER", 0, 0) f.animation:SetAllPoints()
f.animation:Hide() f.animation:Hide()
f.animation.tex = f.animation:CreateTexture(button_name .. "AnimationTexture", "BACKGROUND") f.animation.tex = f.animation:CreateTexture(button_name .. "AnimationTexture", "BACKGROUND")
f.animation.tex:SetTexCoord(.08, .92, .08, .92) f.animation.tex:SetTexCoord(.08, .92, .08, .92)
@@ -1115,9 +1076,6 @@ pfUI:RegisterModule("actionbar", function ()
f:RegisterForClicks("LeftButtonUp", "RightButtonUp") f:RegisterForClicks("LeftButtonUp", "RightButtonUp")
end end
-- set animation
f.animation:SetScript("OnUpdate", button_animations[C.bars.animation])
-- pet autocast -- pet autocast
if bar == 12 then if bar == 12 then
f.autocast:SetScale(C.bars["bar"..bar].icon_size / 25) f.autocast:SetScale(C.bars["bar"..bar].icon_size / 25)
@@ -1125,7 +1083,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
-- macro options -- macro options
if showmacro == "1" then f.macro:Show() else f.macro:Hide() end f.macro:SetShown(showmacro == "1")
SetAllPointsOffset(f.macro, f, font_offset, -font_offset) SetAllPointsOffset(f.macro, f, font_offset, -font_offset)
f.macro:SetFont(font, macro_size, "OUTLINE") f.macro:SetFont(font, macro_size, "OUTLINE")
f.macro:SetTextColor(unpack(macro_color)) f.macro:SetTextColor(unpack(macro_color))
@@ -1133,7 +1091,7 @@ pfUI:RegisterModule("actionbar", function ()
f.macro:SetJustifyV("BOTTOM") f.macro:SetJustifyV("BOTTOM")
-- keybind options -- keybind options
if showkybind == "1" then f.keybind:Show() else f.keybind:Hide() end f.keybind:SetShown(showkybind == "1")
SetAllPointsOffset(f.keybind, f, font_offset, -font_offset) SetAllPointsOffset(f.keybind, f, font_offset, -font_offset)
f.keybind:SetFont(font, bind_size, "OUTLINE") f.keybind:SetFont(font, bind_size, "OUTLINE")
f.keybind:SetTextColor(unpack(bind_color)) f.keybind:SetTextColor(unpack(bind_color))
@@ -1142,15 +1100,13 @@ pfUI:RegisterModule("actionbar", function ()
f.keybind:SetNonSpaceWrap(false) f.keybind:SetNonSpaceWrap(false)
-- item count options -- item count options
if showcount == "1" then f.count:Show() else f.count:Hide() end f.count:SetShown(showcount == "1")
SetAllPointsOffset(f.count, f, font_offset, -font_offset) SetAllPointsOffset(f.count, f, font_offset, -font_offset)
f.count:SetFont(font, count_size, "OUTLINE") f.count:SetFont(font, count_size, "OUTLINE")
f.count:SetTextColor(unpack(count_color)) f.count:SetTextColor(unpack(count_color))
f.count:SetJustifyH("RIGHT") f.count:SetJustifyH("RIGHT")
f.count:SetJustifyV("BOTTOM") f.count:SetJustifyV("BOTTOM")
f.scanmacro, f.spellslot, f.booktype = nil, nil, nil
-- range glow color -- range glow color
f.rangeColor = GetStringColorObject(C.bars.rangecolor) f.rangeColor = GetStringColorObject(C.bars.rangecolor)
@@ -1162,7 +1118,7 @@ pfUI:RegisterModule("actionbar", function ()
-- equipped color -- equipped color
if f.equipped then if f.equipped then
f.equipped:SetTexture(GetStringColor(C.bars.eqcolor)) f.equipped:SetColorTexture(GetStringColor(C.bars.eqcolor))
end end
-- general appearance -- general appearance
@@ -1217,8 +1173,7 @@ pfUI:RegisterModule("actionbar", function ()
end end
-- the stored layout is invalid, temporary fallback -- the stored layout is invalid, temporary fallback
local _, _, fcols, frows = string.find(tostring(formfactor or ""), "(%d+)%s*x%s*(%d+)") if not fcols2 or not frows2 then
if not ((fcols and frows) or pfGridmath[buttons][BarLayoutFormfactor(formfactor)]) then
formfactor = BarLayoutOptions(buttons)[1] formfactor = BarLayoutOptions(buttons)[1]
end end
@@ -1244,11 +1199,7 @@ pfUI:RegisterModule("actionbar", function ()
-- handle pet bar -- handle pet bar
if i == 12 then if i == 12 then
-- only show when pet actions exists -- only show when pet actions exists
if PetHasActionBar() or pfUI.unlock and pfUI.unlock:IsShown() then bars[i]:SetShown(PetHasActionBar() or pfUI.unlock and pfUI.unlock:IsShown())
bars[i]:Show()
else
bars[i]:Hide()
end
-- show/hide petbar on petbar updates -- show/hide petbar on petbar updates
if init then if init then
@@ -1268,11 +1219,7 @@ pfUI:RegisterModule("actionbar", function ()
-- handle shapeshift bar -- handle shapeshift bar
elseif i == 11 then elseif i == 11 then
-- only show when shapeshifts exist -- only show when shapeshifts exist
if GetNumShapeshiftForms() > 0 then bars[i]:SetShown(GetNumShapeshiftForms() > 0)
bars[i]:Show()
else
bars[i]:Hide()
end
-- update shapeshift bar when amount of spells changes -- update shapeshift bar when amount of spells changes
if init then if init then
@@ -1514,23 +1461,10 @@ pfUI:RegisterModule("actionbar", function ()
_G.ShapeshiftBar_ChangeForm = function(slot) pfActionButton(slot, nil, "ShapeShiftBar") end _G.ShapeshiftBar_ChangeForm = function(slot) pfActionButton(slot, nil, "ShapeShiftBar") end
-- handle drag-drop grid -- handle drag-drop grid
local grid = CreateFrame("Frame") pfUI.events:RegisterFrameEventAndCallback("ACTIONBAR_SHOWGRID", function() pfUI.bars:UpdateGrid(1) end)
grid:RegisterEvent("ACTIONBAR_SHOWGRID") pfUI.events:RegisterFrameEventAndCallback("ACTIONBAR_HIDEGRID", function() pfUI.bars:UpdateGrid(0) end)
grid:RegisterEvent("ACTIONBAR_HIDEGRID") pfUI.events:RegisterFrameEventAndCallback("PET_BAR_SHOWGRID", function() pfUI.bars:UpdateGrid(1, "PET") end)
grid:RegisterEvent("PET_BAR_SHOWGRID") pfUI.events:RegisterFrameEventAndCallback("PET_BAR_HIDEGRID", function() pfUI.bars:UpdateGrid(0, "PET") end)
grid:RegisterEvent("PET_BAR_HIDEGRID")
grid:SetScript("OnEvent", function()
if event == "ACTIONBAR_SHOWGRID" then
pfUI.bars:UpdateGrid(1)
elseif event == "ACTIONBAR_HIDEGRID" then
pfUI.bars:UpdateGrid(0)
elseif event == "PET_BAR_SHOWGRID" then
pfUI.bars:UpdateGrid(1, "PET")
elseif event == "PET_BAR_HIDEGRID" then
pfUI.bars:UpdateGrid(0, "PET")
end
end)
-- reagent counter -- reagent counter
if C.bars.reagents == "1" then if C.bars.reagents == "1" then
+1 -5
View File
@@ -402,11 +402,7 @@ pfUI:RegisterModule("addonbuttons", function ()
-- rescan before deciding whether the panel should be shown by default -- rescan before deciding whether the panel should be shown by default
pfUI.addonbuttons:ProcessButtons() pfUI.addonbuttons:ProcessButtons()
if C.abuttons.showdefault == "1" and GetNumButtons() > 0 then pfUI.addonbuttons:SetShown(C.abuttons.showdefault == "1" and GetNumButtons() > 0)
pfUI.addonbuttons:Show()
else
pfUI.addonbuttons:Hide()
end
-- apply workarounds -- apply workarounds
for k, v in pairs(pfUI.addonbuttons.overrides) do for k, v in pairs(pfUI.addonbuttons.overrides) do
+1 -1
View File
@@ -128,7 +128,7 @@ pfUI:RegisterModule("addoncompat", function ()
{T["Yes"], function() {T["Yes"], function()
ReloadUI() ReloadUI()
end}, end},
{T["No"], function() end}, {T["No"], nop},
nil) nil)
end end
end end
+118 -162
View File
@@ -69,17 +69,53 @@ pfUI:RegisterModule("addons", function ()
pfUI.addons:Hide() pfUI.addons:Hide()
end) 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 -- addons profile
local function GetSelectedAddonsList() local function GetSelectedAddonsList()
local selected_addons = {} local selected_addons = {}
for i, frame in ipairs(pfUI.addons.list) do for i, addon in ipairs(addons) do
if frame.input:GetChecked() then if IsAddonEnabled(i) then
table.insert(selected_addons, frame.aname) table.insert(selected_addons, addon.name)
end end
end end
return selected_addons return selected_addons
end end
local selectedProfile
local function IsSelectedProfile(profile)
return profile == selectedProfile
end
local function SetAddonProfile(profile) local function SetAddonProfile(profile)
-- create new profile if not existing -- create new profile if not existing
if not pfUI_addon_profiles[profile] then if not pfUI_addon_profiles[profile] then
@@ -87,31 +123,24 @@ pfUI:RegisterModule("addons", function ()
end end
-- set dropdown to profile -- set dropdown to profile
pfUI.addons.profile.dropdown:SetSelectionByText(profile) selectedProfile = profile
pfUI.addons.profile.dropdown:GenerateMenu()
-- load profile -- load profile
local selected_list = pfUI_addon_profiles[profile] local selected = {}
for i=1, GetNumAddOns() do for _, name in ipairs(pfUI_addon_profiles[profile]) do
local active = false selected[name] = true
local f = pfUI.addons.list[i] end
for i_i, n in ipairs(selected_list) do for i, addon in ipairs(addons) do
if f.aname == n then if selected[addon.name] and not IsAddonEnabled(i) then
active = true SetAddonEnabled(i, true)
break elseif not selected[addon.name] and IsAddonEnabled(i) then
SetAddonEnabled(i, false)
end end
end end
if active then pfUI.addons.list.ScrollBox:ReinitializeFrames()
if not f.input:GetChecked() then
f.input:Click()
end
else
if f.input:GetChecked() then
f.input:Click()
end
end
end
end end
-- addon profiles -- addon profiles
@@ -141,7 +170,7 @@ pfUI:RegisterModule("addons", function ()
pfUI.addons.profile.del:SetText("-") pfUI.addons.profile.del:SetText("-")
pfUI.addons.profile.del:SetTextColor(1,.5,.5,1) pfUI.addons.profile.del:SetTextColor(1,.5,.5,1)
pfUI.addons.profile.del:SetScript("OnClick", function() -- TODO pfUI.addons.profile.del:SetScript("OnClick", function() -- TODO
local id, name = pfUI.addons.profile.dropdown:GetSelection() local name = selectedProfile
if not name then return end if not name then return end
CreateQuestionDialog(T["Delete profile"] .. " '|cff33ffcc" .. name .. "|r'?", function() CreateQuestionDialog(T["Delete profile"] .. " '|cff33ffcc" .. name .. "|r'?", function()
pfUI_addon_profiles[name] = nil pfUI_addon_profiles[name] = nil
@@ -171,45 +200,15 @@ pfUI:RegisterModule("addons", function ()
end) end)
-- addon profile: dropdown -- addon profile: dropdown
pfUI.addons.profile.dropdown = CreateDropDownButton("pfAddonListProfileList", pfUI.addons.profile) pfUI.addons.profile.dropdown = CreateFrame("DropdownButton", nil, pfUI.addons.profile, "pfUIDropdownTemplate")
pfUI.addons.profile.dropdown:SetBackdrop(nil)
pfUI.addons.profile.dropdown:ClearAllPoints()
pfUI.addons.profile.dropdown:SetPoint("RIGHT", pfUI.addons.profile.add, "LEFT", -2, 0) pfUI.addons.profile.dropdown:SetPoint("RIGHT", pfUI.addons.profile.add, "LEFT", -2, 0)
pfUI.addons.profile.dropdown:SetWidth(220) pfUI.addons.profile.dropdown:SetWidth(220)
pfUI.addons.profile.dropdown:SetMenu(function() pfUI.addons.profile.dropdown:SetupMenu(function(dropdown, rootDescription)
local menu = {} for name in pairs(pfUI_addon_profiles) do
rootDescription:CreateRadio(name, IsSelectedProfile, SetAddonProfile, name)
for name, list in pairs(pfUI_addon_profiles) do
local name = name
local entry = {}
entry.text = name
entry.checked = false
entry.func = function()
SetAddonProfile(name)
end end
table.insert(menu, entry)
end
return menu
end) end)
-- addon list: scroll frame
pfUI.addons.scroll = CreateScrollFrame("pfAddonListScroll", pfUI.addons)
pfUI.addons.scroll:SetSize(360, 410)
pfUI.addons.scroll:SetPoint("BOTTOM", 0, 10)
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)
-- 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 AddDependencyLines(header, deps) local function AddDependencyLines(header, deps)
if not deps or table.getn(deps) == 0 then return end if not deps or table.getn(deps) == 0 then return end
GameTooltip:AddLine(" ") GameTooltip:AddLine(" ")
@@ -225,137 +224,94 @@ pfUI:RegisterModule("addons", function ()
end end
end end
local function AddonOnEnter() local function RowOnEnter(self)
this:SetBackdropBorderColor(1,1,1,.08) local addon = self.addon
self:SetBackdropBorderColor(1,1,1,.08)
GameTooltip:SetOwner(this, "ANCHOR_RIGHT") GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:SetText(this.atitle) GameTooltip:SetText(addon.title)
if this.aversion then if addon.version then
GameTooltip:AddDoubleLine(T["Version"], this.aversion, 1,1,1, .2,1,.8) GameTooltip:AddDoubleLine(T["Version"], addon.version, 1,1,1, .2,1,.8)
end end
if this.aauthor then if addon.author then
GameTooltip:AddDoubleLine(T["Author"], this.aauthor, 1,1,1, .2,1,.8) GameTooltip:AddDoubleLine(T["Author"], addon.author, 1,1,1, .2,1,.8)
end end
GameTooltip:AddLine(this.anote, .75,.75,.75,1) GameTooltip:AddLine(addon.notes, .75,.75,.75,1)
AddDependencyLines(T["Dependencies"], this.adeps) AddDependencyLines(T["Dependencies"], addon.deps)
AddDependencyLines(T["Optional Dependencies"], this.aoptdeps) AddDependencyLines(T["Optional Dependencies"], addon.optdeps)
GameTooltip:SetWidth(180) GameTooltip:SetWidth(180)
GameTooltip:Show() GameTooltip:Show()
end end
local function AddonOnLeave() local function RowOnLeave(self)
this:SetBackdropBorderColor(1,1,1,.04) self:SetBackdropBorderColor(1,1,1,.04)
GameTooltip:Hide() GameTooltip:Hide()
end end
local function AddonOnClick() local function RowOnClick(self)
this.input:Click() self.input:Click()
end end
local function InputOnClick() local function InputOnClick(self)
if this:GetChecked() then SetAddonEnabled(self:GetParent().addon.index, self:GetChecked())
EnableAddOn(this:GetID())
else
DisableAddOn(this:GetID())
end
pfUI.addons.hasChanged = true
local id, name = pfUI.addons.profile.dropdown:GetSelection() pfUI_addon_profiles[selectedProfile or T["Current"]] = GetSelectedAddonsList()
name = name or T["Current"]
pfUI_addon_profiles[name] = GetSelectedAddonsList()
end end
pfUI.addons.list:SetScript("OnEvent", function() local function InitRow(row, addon)
for i=1, GetNumAddOns() do -- one-time setup of a pooled row
local aname, atitle, anote = GetAddOnInfo(i) if not row.input then
local aauthor = GetAddOnMetadata(aname, "Author") row:SetBackdrop(pfUI.backdrop_hover)
local aversion = GetAddOnMetadata(aname, "Version") row:SetBackdropBorderColor(1,1,1,.04)
-- basic frame row:EnableMouse(true)
if not pfUI.addons.list[i] then row:SetScript("OnEnter", RowOnEnter)
pfUI.addons.list[i] = CreateFrame("Button", nil, pfUI.addons.list) row:SetScript("OnLeave", RowOnLeave)
local frame = pfUI.addons.list[i] row:SetScript("OnClick", RowOnClick)
frame.aname = aname
frame.atitle = atitle
frame.anote = anote
frame.aauthor = aauthor
frame.aversion = aversion
frame.adeps = { GetAddOnDependencies(i) } -- required (.toc Dependencies)
frame.aoptdeps = { C_AddOns.GetAddOnOptionalDependencies(i) } -- optional (.toc OptionalDeps)
frame:SetSize(340, 25)
frame:SetPoint("TOPLEFT", 5, i * -25 + 20)
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 -- caption
frame.caption = frame:CreateFontString("Status", "LOW", "GameFontNormal") row.caption = row:CreateFontString(nil, "LOW", "GameFontNormal")
frame.caption:SetFont(pfUI.font_default, C.global.font_size + 2, "OUTLINE") row.caption:SetFont(pfUI.font_default, C.global.font_size + 2, "OUTLINE")
frame.caption:SetPoint("LEFT", frame, "LEFT", 2, 0) row.caption:SetPoint("LEFT", row, "LEFT", 2, 0)
frame.caption:SetFontObject(GameFontWhite) row.caption:SetFontObject(GameFontWhite)
frame.caption:SetJustifyH("LEFT") row.caption:SetJustifyH("LEFT")
frame.caption:SetText(atitle)
-- input field -- input field
frame.input = CreateFrame("CheckButton", nil, frame, "UICheckButtonTemplate") row.input = CreateFrame("CheckButton", nil, row, "UICheckButtonTemplate")
frame.input:SetFrameLevel(3) row.input:SetNormalTexture("")
frame.input:SetNormalTexture("") row.input:SetPushedTexture("")
frame.input:SetPushedTexture("") row.input:SetHighlightTexture("")
frame.input:SetHighlightTexture("") CreateBackdrop(row.input, nil, true)
CreateBackdrop(frame.input, nil, true) row.input:SetBackdropBorderColor(.3,.3,.3,1)
frame.input:SetBackdropBorderColor(.3,.3,.3,1) row.input:SetSize(14, 14)
frame.input:SetWidth(14) row.input:SetPoint("RIGHT" , -5, 1)
frame.input:SetHeight(14) row.input:SetScript("OnClick", InputOnClick)
frame.input:SetPoint("RIGHT" , -5, 1)
frame.input:SetID(i)
frame.input:SetScript("OnClick", InputOnClick)
end end
if IsAddOnLoaded(i) then row.addon = addon
pfUI.addons.list[i].input:SetChecked() row.caption:SetText(addon.title)
pfUI.addons.list[i].caption:SetAlpha(1) row.caption:SetAlpha(IsAddOnLoaded(addon.index) and 1 or .5)
else row.input:SetChecked(IsAddonEnabled(addon.index))
pfUI.addons.list[i].caption:SetAlpha(.5)
end
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
end end
pfUI.addons.scroll.slider:SetScript("OnValueChanged", function() -- addon list: a ScrollBox keeps rows only for the addons in view
this:GetParent():SetVerticalScroll(this:GetValue()) pfUI.addons.list = CreateFrame("Frame", "pfAddonList", pfUI.addons, "pfUIScrollBoxListTemplate")
end) pfUI.addons.list:SetSize(370, 420)
pfUI.addons.scroll:SetScript("OnScrollRangeChanged", function() pfUI.addons.list:SetPoint("BOTTOM", 0, 5)
this.slider:SetMinMaxValues(1, floor(this:GetVerticalScrollRange() + 25)) CreateBackdrop(pfUI.addons.list, nil, true)
end)
pfUI.addons.scroll:SetScript("OnShow", function() local view = CreateScrollBoxListLinearView(5, 5, 5, 8)
this.slider:SetValue(floor(this:GetVerticalScroll())) view:SetElementExtent(25)
pfUI.addons.scroll:ShowVisibleRange() view:SetElementInitializer("Button", InitRow)
end) ScrollUtil.InitScrollBoxListWithScrollBar(pfUI.addons.list.ScrollBox, pfUI.addons.list.ScrollBar, view)
pfUI.addons.scroll:SetScript("OnVerticalScroll", function() pfUI.addons.list.ScrollBox:SetDataProvider(CreateDataProvider(addons))
pfUI.addons.scroll:ShowVisibleRange()
this.slider:SetValue(floor(this:GetVerticalScroll())) -- 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)
end) end)
+17 -19
View File
@@ -16,33 +16,33 @@ pfUI:RegisterModule("afkcam", function ()
overlay.top:SetPoint("TOPLEFT", overlay, "TOPLEFT") overlay.top:SetPoint("TOPLEFT", overlay, "TOPLEFT")
overlay.top:SetPoint("TOPRIGHT", overlay, "TOPRIGHT") overlay.top:SetPoint("TOPRIGHT", overlay, "TOPRIGHT")
overlay.top:SetHeight(100) overlay.top:SetHeight(100)
overlay.top:SetTexture(1,1,1,1) overlay.top:SetColorTexture(1,1,1,1)
overlay.top:SetGradientAlpha("VERTICAL", 0,0,0,0, 0,0,0,1) overlay.top:SetGradientAlpha("VERTICAL", 0,0,0,0, 0,0,0,1)
overlay.bottom = overlay:CreateTexture("pfAFKGradientTop", "BACKGROUND") overlay.bottom = overlay:CreateTexture("pfAFKGradientTop", "BACKGROUND")
overlay.bottom:SetPoint("BOTTOMLEFT", overlay, "BOTTOMLEFT") overlay.bottom:SetPoint("BOTTOMLEFT", overlay, "BOTTOMLEFT")
overlay.bottom:SetPoint("BOTTOMRIGHT", overlay, "BOTTOMRIGHT") overlay.bottom:SetPoint("BOTTOMRIGHT", overlay, "BOTTOMRIGHT")
overlay.bottom:SetHeight(100) overlay.bottom:SetHeight(100)
overlay.bottom:SetTexture(1,1,1,1) overlay.bottom:SetColorTexture(1,1,1,1)
overlay.bottom:SetGradientAlpha("VERTICAL", 0,0,0,1, 0,0,0,0) overlay.bottom:SetGradientAlpha("VERTICAL", 0,0,0,1, 0,0,0,0)
overlay:SetFrameStrata("DIALOG") overlay:SetFrameStrata("DIALOG")
overlay:SetAllPoints(WorldFrame) overlay:SetAllPoints(WorldFrame)
overlay:SetScript("OnMouseUp",function() -- /afk toggles, so send it only while AFK is still set: once the client
SendChatMessage("","AFK") -- or the server has cleared it, /afk would set it again
this._parent:stop() local function Wake()
end) if IsChatAFK() then SendChatMessage("", "AFK") end
afkcam:stop()
end
overlay:SetScript("OnMouseUp", Wake)
overlay:SetScript("OnShow", function() overlay:SetScript("OnShow", function()
this:EnableKeyboard(true) this:EnableKeyboard(true)
end) end)
overlay:SetScript("OnHide", function() overlay:SetScript("OnHide", function()
this:EnableKeyboard(false) this:EnableKeyboard(false)
end) end)
overlay:SetScript("OnKeyUp",function() overlay:SetScript("OnKeyUp", Wake)
SendChatMessage("","AFK")
this._parent:stop()
end)
overlay:Hide() overlay:Hide()
local chat = CreateFrame("ScrollingMessageFrame", "pfAFKCamChat", overlay) local chat = CreateFrame("ScrollingMessageFrame", "pfAFKCamChat", overlay)
@@ -59,7 +59,10 @@ pfUI:RegisterModule("afkcam", function ()
if not this:IsVisible() then return end if not this:IsVisible() then return end
local info = _G.ChatTypeInfo[string.gsub(event,"CHAT_MSG_","")] local info = _G.ChatTypeInfo[string.gsub(event,"CHAT_MSG_","")]
if not info then return end if not info then return end
local class = GetUnitInfo(arg2 or "") -- the engine name-queries a chat sender before the event fires, so the
-- sender's GUID (arg12) always resolves
local _, class
if arg12 and arg12 ~= "" then _, class = GetPlayerInfoByGUID(arg12) end
local author, msg local author, msg
if class and class ~= UNKNOWN then if class and class ~= UNKNOWN then
local class_color = PFUI_CLASS_COLORS[class]:GenerateHexColorMarkup() local class_color = PFUI_CLASS_COLORS[class]:GenerateHexColorMarkup()
@@ -74,15 +77,10 @@ pfUI:RegisterModule("afkcam", function ()
chat:RegisterEvent(ctype) chat:RegisterEvent(ctype)
end end
chat:SetScript("OnMouseWheel",function() chat:SetScript("OnMouseWheel",function()
if arg1 > 0 then this:ScrollByAmount(arg1)
this:ScrollUp()
else
this:ScrollDown()
end
end) end)
overlay.chat = chat overlay.chat = chat
overlay._parent = afkcam
afkcam.overlay = overlay afkcam.overlay = overlay
local clock = CreateFrame("Frame", "pfAFKClock", overlay) local clock = CreateFrame("Frame", "pfAFKClock", overlay)
@@ -166,9 +164,9 @@ pfUI:RegisterModule("afkcam", function ()
if event == "PLAYER_FLAGS_CHANGED" then if event == "PLAYER_FLAGS_CHANGED" then
if UnitIsAFK('player') then if UnitIsAFK('player') then
delay:Show() delay:Show()
elseif delay:IsVisible() then else
delay:Hide() delay:Hide()
this:stop() if this._spinning then this:stop() end
end end
else else
if this._spinning then if this._spinning then
+1 -5
View File
@@ -86,11 +86,7 @@ pfUI:RegisterModule("autovendor", function ()
if not pfMerchantFrame_Update then if not pfMerchantFrame_Update then
local pfMerchantFrame_Update = MerchantFrame_Update local pfMerchantFrame_Update = MerchantFrame_Update
function _G.MerchantFrame_Update() function _G.MerchantFrame_Update()
if MerchantFrame.selectedTab == 1 and C["global"]["autosell"] ~= "1" then autovendor.button:SetShown(MerchantFrame.selectedTab == 1 and C["global"]["autosell"] ~= "1")
autovendor.button:Show()
else
autovendor.button:Hide()
end
pfMerchantFrame_Update() pfMerchantFrame_Update()
end end
end end
+48 -103
View File
@@ -6,8 +6,6 @@ pfUI:RegisterModule("bags", function ()
[1804] = {frame="picklock"}, [1804] = {frame="picklock"},
} }
local scanner = libtipscan:GetScanner("input_search")
local function BagSortOpts() local function BagSortOpts()
return { return {
reverse = C.appearance.bags.sortreverse == "1", reverse = C.appearance.bags.sortreverse == "1",
@@ -42,11 +40,7 @@ pfUI:RegisterModule("bags", function ()
-- overwrite some bag functions -- overwrite some bag functions
function _G.OpenAllBags() function _G.OpenAllBags()
if pfUI.bag.right:IsShown() then pfUI.bag.right:SetShown(not pfUI.bag.right:IsShown())
pfUI.bag.right:Hide()
else
pfUI.bag.right:Show()
end
end end
function _G.CloseAllBags() function _G.CloseAllBags()
@@ -54,11 +48,7 @@ pfUI:RegisterModule("bags", function ()
end end
function _G.ToggleBackpack() function _G.ToggleBackpack()
if pfUI.bag.right:IsShown() then pfUI.bag.right:SetShown(not pfUI.bag.right:IsShown())
pfUI.bag.right:Hide()
else
pfUI.bag.right:Show()
end
end end
function _G.OpenBackpack() function _G.OpenBackpack()
@@ -95,6 +85,7 @@ pfUI:RegisterModule("bags", function ()
pfUI.bag:RegisterEvent("ITEM_LOCK_CHANGED") pfUI.bag:RegisterEvent("ITEM_LOCK_CHANGED")
pfUI.bag:RegisterEvent("SPELLS_CHANGED") pfUI.bag:RegisterEvent("SPELLS_CHANGED")
pfUI.bag:RegisterEvent("MERCHANT_CLOSED") pfUI.bag:RegisterEvent("MERCHANT_CLOSED")
pfUI.bag:RegisterEvent("INVENTORY_SEARCH_UPDATE")
pfUI.bag.delay = { UpdateBag = {} } pfUI.bag.delay = { UpdateBag = {} }
@@ -122,6 +113,11 @@ pfUI:RegisterModule("bags", function ()
pfUI.bag:UpdateItemLock() pfUI.bag:UpdateItemLock()
end end
if this.delay.UpdateSearch then
this.delay.UpdateSearch = nil
pfUI.bag:UpdateSearch()
end
for bag in pairs(this.delay.UpdateBag) do for bag in pairs(this.delay.UpdateBag) do
this.delay.UpdateBag[bag] = nil this.delay.UpdateBag[bag] = nil
pfUI.bag:UpdateBag(bag) pfUI.bag:UpdateBag(bag)
@@ -159,6 +155,10 @@ pfUI:RegisterModule("bags", function ()
this.delay.UpdateItemLock = true this.delay.UpdateItemLock = true
end end
if event == "INVENTORY_SEARCH_UPDATE" then
this.delay.UpdateSearch = true
end
if event == "PLAYERBANKSLOTS_CHANGED" then if event == "PLAYERBANKSLOTS_CHANGED" then
this.delay.UpdateBag[-1] = true this.delay.UpdateBag[-1] = true
end end
@@ -377,6 +377,21 @@ pfUI:RegisterModule("bags", function ()
end end
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) function pfUI.bag:UpdateSlot(bag, slot)
if not pfUI.bags[bag] then return end if not pfUI.bags[bag] then return end
@@ -392,28 +407,26 @@ pfUI:RegisterModule("bags", function ()
pfUI.bags[bag].slots[slot].slot = slot pfUI.bags[bag].slots[slot].slot = slot
pfUI.bags[bag].slots[slot].frame:SetID(slot) pfUI.bags[bag].slots[slot].frame:SetID(slot)
-- add cooldown frame to bankslots -- native cooldown frame: the bank template has none and the bag
if tpl == "BankItemButtonGenericTemplate" then -- template's is 1.12's indicator Model, which can't reverse.
local bankslot = pfUI.bags[bag].slots[slot].frame -- ContainerFrame_UpdateCooldown reads the "<button>Cooldown" global.
local name = "pfBag" .. bag .. "item" .. slot .. "Cooldown" -- 1.12 binds a frame's name only while that global is unset, so the
bankslot.cd = CreateFrame("Cooldown", name, bankslot, "CooldownFrameTemplate") -- global is rebound by hand; the Model starts hidden and nothing
bankslot.cd.pfCooldownStyleAnimation = 1 -- reaches it after that
bankslot.cd.pfCooldownType = "NOGCD" local slotframe = pfUI.bags[bag].slots[slot].frame
else local cdname = slotframe:GetName() .. "Cooldown"
local bagslot = pfUI.bags[bag].slots[slot].frame slotframe.cd = CreateCooldown(slotframe, "bags", cdname)
bagslot.cd = _G[bagslot:GetName().."Cooldown"] _G[cdname] = slotframe.cd
bagslot.cd.pfCooldownType = "NOGCD"
end
if not pfUI.bags[bag].slots[slot].frame.backdrop then if not pfUI.bags[bag].slots[slot].frame.backdrop then
CreateBackdrop(pfUI.bags[bag].slots[slot].frame, default_border) CreateBackdrop(pfUI.bags[bag].slots[slot].frame, default_border)
end end
local highlight = pfUI.bags[bag].slots[slot].frame:GetHighlightTexture() local highlight = pfUI.bags[bag].slots[slot].frame:GetHighlightTexture()
highlight:SetTexture(.5, .5, .5, .5) highlight:SetColorTexture(.5, .5, .5, .5)
local pushed = pfUI.bags[bag].slots[slot].frame:GetPushedTexture() local pushed = pfUI.bags[bag].slots[slot].frame:GetPushedTexture()
pushed:SetTexture(.5, .5, .5, .5) pushed:SetColorTexture(.5, .5, .5, .5)
local questText = pfUI.bags[bag].slots[slot].frame.qtext local questText = pfUI.bags[bag].slots[slot].frame.qtext
questText:SetFont(pfUI.font_default, 13, "THICKOUTLINE") questText:SetFont(pfUI.font_default, 13, "THICKOUTLINE")
@@ -463,6 +476,7 @@ pfUI:RegisterModule("bags", function ()
SetItemButtonTexture(pfUI.bags[bag].slots[slot].frame, texture) SetItemButtonTexture(pfUI.bags[bag].slots[slot].frame, texture)
SetItemButtonCount(pfUI.bags[bag].slots[slot].frame, count) SetItemButtonCount(pfUI.bags[bag].slots[slot].frame, count)
SetItemButtonDesaturated(pfUI.bags[bag].slots[slot].frame, locked, 0.5, 0.5, 0.5) 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 local hasItem = texture and 1 or nil
pfUI.bags[bag].slots[slot].frame.hasItem = hasItem pfUI.bags[bag].slots[slot].frame.hasItem = hasItem
@@ -558,10 +572,10 @@ pfUI:RegisterModule("bags", function ()
border:SetTexture("") border:SetTexture("")
local highlight = frame.bagslots.slots[slot].frame:GetHighlightTexture() local highlight = frame.bagslots.slots[slot].frame:GetHighlightTexture()
highlight:SetTexture(.5, .5, .5, .5) highlight:SetColorTexture(.5, .5, .5, .5)
local pushed = frame.bagslots.slots[slot].frame:GetPushedTexture() local pushed = frame.bagslots.slots[slot].frame:GetPushedTexture()
pushed:SetTexture(.5, .5, .5, .5) pushed:SetColorTexture(.5, .5, .5, .5)
if frame == pfUI.bag.left then if frame == pfUI.bag.left then
frame.bagslots.slots[slot].frame:SetID(slot + 4) frame.bagslots.slots[slot].frame:SetID(slot + 4)
@@ -571,31 +585,16 @@ pfUI:RegisterModule("bags", function ()
frame.bagslots.slots[slot].slot = slot frame.bagslots.slots[slot].slot = slot
end end
local SlotEnter = frame.bagslots.slots[slot].frame:GetScript("OnEnter") frame.bagslots.slots[slot].frame:HookScript("OnEnter", function()
frame.bagslots.slots[slot].frame:SetScript("OnEnter", function()
for slot, f in ipairs(pfUI.bags[this.slot + 1].slots) do for slot, f in ipairs(pfUI.bags[this.slot + 1].slots) do
CreateBackdrop(f.frame, default_border) CreateBackdrop(f.frame, default_border)
f.frame.backdrop:SetBackdropBorderColor(.2,1,.8,1) f.frame.backdrop:SetBackdropBorderColor(.2,1,.8,1)
end end
SlotEnter(this)
end) end)
local SlotLeave = frame.bagslots.slots[slot].frame:GetScript("OnLeave") frame.bagslots.slots[slot].frame:HookScript("OnLeave", function()
frame.bagslots.slots[slot].frame:SetScript("OnLeave", function()
pfUI.bag:UpdateBag(this.slot + 1) pfUI.bag:UpdateBag(this.slot + 1)
SlotLeave()
end) end)
-- On TBC, the OnEvent function of the template scans for framenames,
-- and obviously doesn't know the pf-Names. Therefore, triggering
-- the update function on each frame manually
if frame == pfUI.bag.left and BankFrameItemButton_Update then
local SlotUpdate = frame.bagslots.slots[slot].frame:GetScript("OnUpdate")
frame.bagslots.slots[slot].frame:SetScript("OnUpdate", function()
if SlotUpdate then SlotUpdate(this) end
BankFrameItemButton_Update(this)
end)
end
end end
local left = (slot-min)*(frame.button_size/5*4+default_border*2) + default_border local left = (slot-min)*(frame.button_size/5*4+default_border*2) + default_border
@@ -1008,7 +1007,6 @@ pfUI:RegisterModule("bags", function ()
-- bag search -- bag search
if not frame.search then if not frame.search then
frame.search = CreateFrame("Frame", "pfBagSearch", frame) frame.search = CreateFrame("Frame", "pfBagSearch", frame)
frame.search.db = {}
frame.search:SetHeight(12) frame.search:SetHeight(12)
frame.search:SetPoint("TOPLEFT", frame, "TOPLEFT", default_border, -default_border) frame.search:SetPoint("TOPLEFT", frame, "TOPLEFT", default_border, -default_border)
frame.search:SetPoint("TOPRIGHT", frame.sort, "TOPLEFT", -default_border*3, -default_border) frame.search:SetPoint("TOPRIGHT", frame.sort, "TOPLEFT", -default_border*3, -default_border)
@@ -1033,51 +1031,12 @@ pfUI:RegisterModule("bags", function ()
frame.search.edit:SetScript("OnEditFocusLost", function() frame.search.edit:SetScript("OnEditFocusLost", function()
this:SetText(T["Search"]) this:SetText(T["Search"])
for bag=-2, 11 do C_Container.SetItemSearch("")
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
end) end)
frame.search.edit:SetScript("OnTextChanged", function() frame.search.edit:SetScript("OnTextChanged", function()
if this:GetText() == T["Search"] then return end if this:GetText() == T["Search"] then return end
for bag=-2, 11 do C_Container.SetItemSearch(this:GetText())
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
end) end)
frame.search:SetScript("OnLeave", function() frame.search:SetScript("OnLeave", function()
@@ -1092,17 +1051,7 @@ pfUI:RegisterModule("bags", function ()
frame.search:SetScript("OnHide", function() frame.search:SetScript("OnHide", function()
frame.search.edit:SetText(T["Search"]) frame.search.edit:SetText(T["Search"])
for bag = -2, 11 do C_Container.SetItemSearch("")
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) end)
end end
else else
@@ -1165,11 +1114,7 @@ pfUI:RegisterModule("bags", function ()
end) end)
frame.bags:SetScript("OnClick", function() frame.bags:SetScript("OnClick", function()
if pfUI.bag.left.bagslots:IsShown() then pfUI.bag.left.bagslots:SetShown(not pfUI.bag.left.bagslots:IsShown())
pfUI.bag.left.bagslots:Hide()
else
pfUI.bag.left.bagslots:Show()
end
end) end)
end end
+6 -7
View File
@@ -2,7 +2,7 @@ pfUI:RegisterModule("bubbles", function ()
local alpha = tonumber(C.chat.bubbles.alpha) local alpha = tonumber(C.chat.bubbles.alpha)
pfUI.bubbles = CreateFrame("Frame", "pfChatBubbles", UIParent) pfUI.bubbles = Mixin(CreateFrame("Frame", "pfChatBubbles", UIParent), DirtiableMixin)
pfUI.bubbles:RegisterEvent("CHAT_MSG_SAY") pfUI.bubbles:RegisterEvent("CHAT_MSG_SAY")
pfUI.bubbles:RegisterEvent("CHAT_MSG_YELL") pfUI.bubbles:RegisterEvent("CHAT_MSG_YELL")
pfUI.bubbles:RegisterEvent("CHAT_MSG_PARTY") pfUI.bubbles:RegisterEvent("CHAT_MSG_PARTY")
@@ -11,12 +11,6 @@ pfUI:RegisterModule("bubbles", function ()
pfUI.bubbles:RegisterEvent("CHAT_MSG_MONSTER_YELL") pfUI.bubbles:RegisterEvent("CHAT_MSG_MONSTER_YELL")
pfUI.bubbles:RegisterEvent("CHAT_MSG_MONSTER_PARTY") pfUI.bubbles:RegisterEvent("CHAT_MSG_MONSTER_PARTY")
pfUI.bubbles:SetScript("OnEvent", function()
-- 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:ProcessBubble(f) function pfUI.bubbles:ProcessBubble(f)
f.text:Hide() f.text:Hide()
f.text:SetFont(pfUI.font_default, tonumber(C.global.font_size) * UIParent:GetScale(), "OUTLINE") f.text:SetFont(pfUI.font_default, tonumber(C.global.font_size) * UIParent:GetScale(), "OUTLINE")
@@ -62,4 +56,9 @@ pfUI:RegisterModule("bubbles", function ()
end end
end end
end end
-- Bubble frames are attached to WorldFrame after the chat event fires, so
-- the scan waits a frame, and runs once for all of that frame's messages.
pfUI.bubbles:SetDirtyMethod(pfUI.bubbles.ScanBubbles)
pfUI.bubbles:SetScript("OnEvent", pfUI.bubbles.MarkDirty)
end) end)
+72 -72
View File
@@ -16,6 +16,25 @@ pfUI:RegisterModule("buff", function ()
ScanAuraSlots("player", "HARMFUL", harmfulSlots, 16) ScanAuraSlots("player", "HARMFUL", harmfulSlots, 16)
end end
-- weapon enchants report only their time left, and no event as their
-- charges and time run down, so the OnUpdate below refreshes their buttons
-- too: the charges, and the timer when the enchant was renewed
local function RefreshWeaponButton(buff, timeleft, charges)
timeleft = (timeleft or 0) / 1000
charges = charges or 0
buff.stacks:SetText(charges > 1 and charges or "")
local expires = GetTime() + timeleft
if timeleft <= 0 then
buff.cd:Clear()
buff.cdExpires = nil
elseif not buff.cdExpires or abs(buff.cdExpires - expires) > 1 then
SetCooldownTimeLeft(buff.cd, timeleft)
buff.cdExpires = expires
end
buff.cdStart = nil
end
local function RefreshBuffButton(buff) local function RefreshBuffButton(buff)
if buff.btype == "HELPFUL" then if buff.btype == "HELPFUL" then
if C.buffs.separateweapons == "1" then if C.buffs.separateweapons == "1" then
@@ -33,7 +52,7 @@ pfUI:RegisterModule("buff", function ()
end end
local slots = buff.btype == "HELPFUL" and helpfulSlots or harmfulSlots local slots = buff.btype == "HELPFUL" and helpfulSlots or harmfulSlots
local name, icon, count, dispelType, _, expirationTime, _, _, _, spellId = C_UnitAuras.UnitAuraBySlot("player", slots[buff.id]) local name, icon, count, dispelType, duration, expirationTime, _, _, _, spellId = C_UnitAuras.UnitAuraBySlot("player", slots[buff.id])
--detect weapon buffs --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 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
@@ -57,21 +76,22 @@ pfUI:RegisterModule("buff", function ()
end end
end end
-- Set Weapon Texture and Border -- Set Weapon Texture, Border and Timer
if buff.mode == "MAINHAND" then if buff.mode == "MAINHAND" then
buff.texture:SetTexture(GetInventoryItemTexture("player", 16)) buff.texture:SetTexture(GetInventoryItemTexture("player", 16))
buff.backdrop:SetBackdropBorderColor(GetItemQualityColor(GetInventoryItemQuality("player", 16) or 1)) buff.backdrop:SetBackdropBorderColor(GetItemQualityColor(GetInventoryItemQuality("player", 16) or 1))
RefreshWeaponButton(buff, mhtime, mhcharge)
elseif buff.mode == "OFFHAND" then elseif buff.mode == "OFFHAND" then
buff.texture:SetTexture(GetInventoryItemTexture("player", 17)) buff.texture:SetTexture(GetInventoryItemTexture("player", 17))
buff.backdrop:SetBackdropBorderColor(GetItemQualityColor(GetInventoryItemQuality("player", 17) or 1)) buff.backdrop:SetBackdropBorderColor(GetItemQualityColor(GetInventoryItemQuality("player", 17) or 1))
RefreshWeaponButton(buff, ohtime, ohcharge)
end end
elseif name 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 -- Set Buff Texture and Border
buff.mode = buff.btype buff.mode = buff.btype
buff.expirationTime = expirationTime
buff.stackCount = count
buff.spellId = spellId buff.spellId = spellId
buff.texture:SetTexture(icon) buff.texture:SetTexture(icon)
buff.stacks:SetText((count or 0) > 1 and count or "")
if buff.btype == "HARMFUL" then if buff.btype == "HARMFUL" then
local dispelColor = C_UnitAuras.GetAuraDispelTypeColor(dispelType) local dispelColor = C_UnitAuras.GetAuraDispelTypeColor(dispelType)
@@ -79,6 +99,18 @@ pfUI:RegisterModule("buff", function ()
else else
buff.backdrop:SetBackdropBorderColor(br,bg,bb,ba) buff.backdrop:SetBackdropBorderColor(br,bg,bb,ba)
end end
-- start the timer from the aura's duration; permanent auras have none
local start, dur = GetAuraTimer(duration, expirationTime)
if dur <= 0 then
buff.cd:Clear()
buff.cdStart = nil
elseif buff.cdStart == nil or abs(buff.cdStart - start) > .5 or buff.cdDuration ~= dur then
CooldownFrame_SetTimer(buff.cd, start, dur, 1)
buff.cdStart = start
buff.cdDuration = dur
end
buff.cdExpires = nil
else else
buff:Hide() buff:Hide()
return return
@@ -106,17 +138,24 @@ pfUI:RegisterModule("buff", function ()
buff.texture:SetTexCoord(.07,.93,.07,.93) buff.texture:SetTexCoord(.07,.93,.07,.93)
buff.texture:SetAllPoints(buff) buff.texture:SetAllPoints(buff)
buff.timer = buff:CreateFontString(nil, "OVERLAY", "GameFontNormal") -- overlay lifts the stacks above the sweep: a child frame renders above
buff.timer:SetTextColor(1,1,1,1) -- all of its parent's own regions, so they would dim under the dark
buff.timer:SetJustifyH("CENTER") -- wedge otherwise
buff.timer:SetJustifyV("CENTER") buff.overlay = CreateFrame("Frame", nil, buff)
buff.overlay:SetAllPoints(buff)
buff.stacks = buff:CreateFontString(nil, "OVERLAY", "GameFontNormal") buff.stacks = buff.overlay:CreateFontString(nil, "OVERLAY", "GameFontNormal")
buff.stacks:SetTextColor(1,1,1,1) buff.stacks:SetTextColor(1,1,1,1)
buff.stacks:SetJustifyH("RIGHT") buff.stacks:SetJustifyH("RIGHT")
buff.stacks:SetJustifyV("BOTTOM") buff.stacks:SetJustifyV("BOTTOM")
buff.stacks:SetAllPoints(buff) buff.stacks:SetAllPoints(buff)
-- the sweep and the duration numbers (the template covers the button and
-- starts hidden); RefreshBuffButton starts its timer
buff.cd = CreateCooldown(buff, "buff", buttonName .. "Cooldown")
buff.cd:SetFrameLevel(buff:GetFrameLevel() + 1)
buff.overlay:SetFrameLevel(buff:GetFrameLevel() + 2)
buff:RegisterForClicks("RightButtonUp") buff:RegisterForClicks("RightButtonUp")
buff.weapon = weapon buff.weapon = weapon
@@ -193,66 +232,24 @@ pfUI:RegisterModule("buff", function ()
end end
end) end)
-- PERF: Consolidated OnUpdate handler for all buff timers -- the buttons that can show a weapon enchant: the first two buffs, or the
-- This replaces 50 individual OnUpdate handlers with a single one -- separate weapon buttons
local weaponButtons
-- weapon enchants, see RefreshWeaponButton
pfUI.buff:SetScript("OnUpdate", function() pfUI.buff:SetScript("OnUpdate", function()
local now = GetTime() local now = GetTime()
if not this.nextUpdate then this.nextUpdate = now + 0.1 end if not this.nextUpdate then this.nextUpdate = now + 0.1 end
if this.nextUpdate > now then return end if this.nextUpdate > now then return end
this.nextUpdate = now + 0.1 this.nextUpdate = now + 0.1
-- Cache weapon enchant info once per update cycle local _, mhtime, mhcharge, _, ohtime, ohcharge = GetWeaponEnchantInfo()
local mh, mhtime, mhcharge, oh, ohtime, ohcharge = GetWeaponEnchantInfo() for _, buff in ipairs(weaponButtons) do
-- Update all visible buff buttons
local buttons = pfUI.buff.buffs.buttons
for i = 1, 32 do
local buff = buttons[i]
if buff:IsShown() then if buff:IsShown() then
local timeleft, stacks = 0, 0
if buff.mode == buff.btype then
timeleft = buff.expirationTime > 0 and (buff.expirationTime - now) or 0
stacks = buff.stackCount or 0
elseif buff.mode == "MAINHAND" then
timeleft = mhtime and mhtime / 1000 or 0
stacks = mhcharge or 0
elseif buff.mode == "OFFHAND" then
timeleft = ohtime and ohtime / 1000 or 0
stacks = ohcharge or 0
end
buff.timer:SetText(timeleft > 0 and GetColoredTimeString(timeleft) or "")
buff.stacks:SetText(stacks > 1 and stacks or "")
end
end
-- Update all visible debuff buttons
buttons = pfUI.buff.debuffs.buttons
for i = 1, 16 do
local buff = buttons[i]
if buff:IsShown() then
local timeleft = buff.expirationTime > 0 and (buff.expirationTime - now) or 0
local stacks = buff.stackCount or 0
buff.timer:SetText(timeleft > 0 and GetColoredTimeString(timeleft) or "")
buff.stacks:SetText(stacks > 1 and stacks or "")
end
end
-- Update weapon buff buttons if separate
if C.buffs.separateweapons == "1" then
buttons = pfUI.buff.wepbuffs.buttons
for i = 1, 2 do
local buff = buttons[i]
if buff:IsShown() then
local timeleft, stacks = 0, 0
if buff.mode == "MAINHAND" then if buff.mode == "MAINHAND" then
timeleft = mhtime and mhtime / 1000 or 0 RefreshWeaponButton(buff, mhtime, mhcharge)
stacks = mhcharge or 0
elseif buff.mode == "OFFHAND" then elseif buff.mode == "OFFHAND" then
timeleft = ohtime and ohtime / 1000 or 0 RefreshWeaponButton(buff, ohtime, ohcharge)
stacks = ohcharge or 0
end
buff.timer:SetText(timeleft > 0 and GetColoredTimeString(timeleft) or "")
buff.stacks:SetText(stacks > 1 and stacks or "")
end end
end end
end end
@@ -283,52 +280,55 @@ pfUI:RegisterModule("buff", function ()
pfUI.buff.debuffs.buttons[i] = CreateBuffButton(i, "HARMFUL") pfUI.buff.debuffs.buttons[i] = CreateBuffButton(i, "HARMFUL")
end end
weaponButtons = {
pfUI.buff.buffs.buttons[1], pfUI.buff.buffs.buttons[2],
pfUI.buff.wepbuffs.buttons[1], pfUI.buff.wepbuffs.buttons[2],
}
-- config loading -- config loading
function pfUI.buff:UpdateConfigBuffButton(buff) function pfUI.buff:UpdateConfigBuffButton(buff)
local fontsize = C.buffs.fontsize == "-1" and C.global.font_size or C.buffs.fontsize 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 buffSize, buffSpacing = tonumber(C.buffs.size), tonumber(C.buffs.spacing)
local rowextra = C.buffs.textinside == "1" and 0 or GetCooldownFontSize(buffSize) * 1.5
local rowcount, relFrame, offsetX, offsetY local rowcount, relFrame, offsetX, offsetY
if buff.btype == "HELPFUL" then if buff.btype == "HELPFUL" then
if buff.weapon == 1 and C.buffs.separateweapons == "1" then if buff.weapon == 1 and C.buffs.separateweapons == "1" then
rowcount = floor((buff.gid-1) / tonumber(C.buffs.wepbuffrowsize)) rowcount = floor((buff.gid-1) / tonumber(C.buffs.wepbuffrowsize))
relFrame = pfUI.buff.wepbuffs relFrame = pfUI.buff.wepbuffs
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.wepbuffrowsize))*(buffSize+2*buffSpacing) 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) offsetY = -(rowcount) * (rowextra+buffSize+2*buffSpacing)
else else
rowcount = floor((buff.gid-1) / tonumber(C.buffs.buffrowsize)) rowcount = floor((buff.gid-1) / tonumber(C.buffs.buffrowsize))
relFrame = pfUI.buff.buffs relFrame = pfUI.buff.buffs
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.buffrowsize))*(buffSize+2*buffSpacing) 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) offsetY = -(rowcount) * (rowextra+buffSize+2*buffSpacing)
end end
else else
rowcount = floor((buff.gid-1) / tonumber(C.buffs.debuffrowsize)) rowcount = floor((buff.gid-1) / tonumber(C.buffs.debuffrowsize))
relFrame = pfUI.buff.debuffs relFrame = pfUI.buff.debuffs
offsetX = -(buff.gid-1-rowcount*tonumber(C.buffs.debuffrowsize))*(buffSize+2*buffSpacing) 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) offsetY = -(rowcount) * (rowextra+buffSize+2*buffSpacing)
end end
buff:SetSize(buffSize, buffSize) buff:SetSize(buffSize, buffSize)
buff:ClearAllPoints() buff:ClearAllPoints()
buff:SetPoint("TOPRIGHT", relFrame, "TOPRIGHT",offsetX, offsetY) buff:SetPoint("TOPRIGHT", relFrame, "TOPRIGHT",offsetX, offsetY)
buff.timer:SetFont(pfUI.font_default, fontsize, "OUTLINE")
buff.stacks:SetFont(pfUI.font_default, fontsize+1, "OUTLINE") buff.stacks:SetFont(pfUI.font_default, fontsize+1, "OUTLINE")
buff.timer:SetHeight(fontsize * 1.3) -- the duration numbers sit inside the icon or below it
local countdown = buff.cd:GetCountdownFontString()
buff.timer:ClearAllPoints() countdown:ClearAllPoints()
if C.buffs.textinside == "1" then if C.buffs.textinside == "1" then
buff.timer:SetAllPoints(buff) countdown:SetPoint("CENTER", buff, "CENTER", 0, 0)
else else
buff.timer:SetPoint("TOP", buff, "BOTTOM", 0, -3) countdown:SetPoint("TOP", buff, "BOTTOM", 0, -3)
end end
end end
function pfUI.buff:UpdateConfig() function pfUI.buff:UpdateConfig()
local fontsize = C.buffs.fontsize == "-1" and C.global.font_size or C.buffs.fontsize
local spacing = tonumber(C.buffs.spacing) local spacing = tonumber(C.buffs.spacing)
local cell = tonumber(C.buffs.size) + 2 * spacing local cell = tonumber(C.buffs.size) + 2 * spacing
local rowextra = C.buffs.textinside == "1" and 0 or (fontsize * 1.5) local rowextra = C.buffs.textinside == "1" and 0 or GetCooldownFontSize(tonumber(C.buffs.size)) * 1.5
local function SizeBuffFrame(frame, rowsize, count) local function SizeBuffFrame(frame, rowsize, count)
rowsize = tonumber(rowsize) rowsize = tonumber(rowsize)
+38 -9
View File
@@ -103,6 +103,7 @@ pfUI:RegisterModule("buffwatch", function ()
fcache[tostring(config)] = nil -- invalidate so the new entry takes effect immediately fcache[tostring(config)] = nil -- invalidate so the new entry takes effect immediately
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc" .. skill .. "|r" .. T["is now blacklisted."]) DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc" .. skill .. "|r" .. T["is now blacklisted."])
end end
this.parent.Refresh()
elseif this.parent.unit == "player" then elseif this.parent.unit == "player" then
local aura = C_UnitAuras.GetAuraDataByIndex("player", this.id, this.type) local aura = C_UnitAuras.GetAuraDataByIndex("player", this.id, this.type)
if aura and aura.spellId then C_Spell.CancelSpellByID(aura.spellId) end if aura and aura.spellId then C_Spell.CancelSpellByID(aura.spellId) end
@@ -246,7 +247,7 @@ pfUI:RegisterModule("buffwatch", function ()
table.sort(frame.buffs, frame.buffcmp) table.sort(frame.buffs, frame.buffcmp)
-- create a buff bar for each below threshold -- create a buff bar for each below threshold
local bar = 1 local bar, crossing = 1, nil
for id, data in pairs(frame.buffs) do for id, data in pairs(frame.buffs) do
if data[1] and ((data[1] ~= 0 and data[1] < frame.threshold) or frame.threshold == -1) -- timeleft checks if data[1] and ((data[1] ~= 0 and data[1] < frame.threshold) or frame.threshold == -1) -- timeleft checks
and data[3] and data[3] ~= "" -- buff has a name and data[3] and data[3] ~= "" -- buff has a name
@@ -340,6 +341,10 @@ pfUI:RegisterModule("buffwatch", function ()
frame.bars[bar]:Show() frame.bars[bar]:Show()
bar = bar + 1 bar = bar + 1
elseif data[1] and data[1] > 0 and data[3] and data[4] and frame.threshold ~= -1 then
-- still above the threshold: its bar shows once it drops under
local wait = data[1] - frame.threshold
if not crossing or wait < crossing then crossing = wait end
end end
end end
@@ -347,13 +352,11 @@ pfUI:RegisterModule("buffwatch", function ()
for i = bar, table.getn(frame.bars) do for i = bar, table.getn(frame.bars) do
frame.bars[i]:Hide() frame.bars[i]:Hide()
end end
end
-- Create a new Buff Bar -- no event marks an aura's time left dropping under the threshold, so
local function BuffBarFrameOnUpdate() -- wake when the next one does
if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + .4 end if frame.crossing then frame.crossing:Cancel() end
RefreshBuffBarFrame(this) frame.crossing = crossing and C_Timer.NewTimer(crossing + .1, frame.Refresh) or nil
this:RefreshPosition()
end end
local function RefreshPosition(self) local function RefreshPosition(self)
@@ -373,6 +376,19 @@ pfUI:RegisterModule("buffwatch", function ()
end end
end end
-- every watch frame: one stacks on the bars of another, so all of them
-- re-anchor together
local watched = {}
local function RefreshPositions()
for _, frame in pairs(watched) do frame:RefreshPosition() end
end
-- the bars sit above their unit frame's aura rows, which move when the
-- rows lay out again
pfUI.events:RegisterCallback("unitframe:auras", function(_, unit)
if unit == pfUI.uf.player or unit == pfUI.uf.target then RefreshPositions() end
end, "buffwatch")
local function CreateBuffBarFrame(unit, type) local function CreateBuffBarFrame(unit, type)
local framename = "pf" .. unit .. ( type == "HARMFUL" and "Debuff" or "Buff" ) .. "Bar" local framename = "pf" .. unit .. ( type == "HARMFUL" and "Debuff" or "Buff" ) .. "Bar"
local frame = _G[framename] or CreateFrame("Frame", framename, UIParent) local frame = _G[framename] or CreateFrame("Frame", framename, UIParent)
@@ -388,9 +404,22 @@ pfUI:RegisterModule("buffwatch", function ()
end end
frame.RefreshPosition = RefreshPosition frame.RefreshPosition = RefreshPosition
frame.Refresh = function()
RefreshBuffBarFrame(frame)
RefreshPositions()
end
-- OnEvent (UNIT_AURA) doesn't trigger properly on buff refresh -- UNIT_AURA_DELTA reports refreshes and new durations as well, so the bars
frame:SetScript("OnUpdate", BuffBarFrameOnUpdate) -- follow the auras on events alone. A new target is another unit, whose
-- auras no delta describes.
frame:RegisterUnitEvent("UNIT_AURA_DELTA", frame.unit)
frame:RegisterEvent("PLAYER_ENTERING_WORLD")
if frame.unit == "target" then frame:RegisterEvent("PLAYER_TARGET_CHANGED") end
frame:SetScript("OnEvent", frame.Refresh)
table.insert(watched, frame)
-- the first read waits until the caller has configured the frame
RunNextFrame(frame.Refresh)
return frame return frame
end end
+8 -13
View File
@@ -150,8 +150,8 @@ pfUI:RegisterModule("castbar", function ()
-- One-shot poll: read C_Spell for the bar's unit, stamp or clear. Called -- 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. -- from event handlers (cast start, target/focus change), never per-frame.
local function RefreshBar(cb, rank) local function RefreshBar(cb, rank)
local query = cb.unitstr ~= "" and cb.unitstr or cb.unitname local query = cb.unitstr
if not query or (cb.unitstr ~= "" and not UnitExists(cb.unitstr)) then if not UnitExists(query) then
ClearBar(cb) ClearBar(cb)
return return
end end
@@ -178,7 +178,7 @@ pfUI:RegisterModule("castbar", function ()
end end
end end
local function CreateCastbar(name, parent, unitstr, unitname) local function CreateCastbar(name, parent, unitstr)
local cb = CreateFrame("Frame", name, parent or UIParent) local cb = CreateFrame("Frame", name, parent or UIParent)
cb:SetHeight(C.global.font_size * 1.5) cb:SetHeight(C.global.font_size * 1.5)
@@ -186,7 +186,6 @@ pfUI:RegisterModule("castbar", function ()
cb:SetFrameLevel(8) cb:SetFrameLevel(8)
cb.unitstr = unitstr cb.unitstr = unitstr
cb.unitname = unitname
-- icon -- icon
cb.icon = CreateFrame("Frame", nil, cb) cb.icon = CreateFrame("Frame", nil, cb)
@@ -235,14 +234,14 @@ pfUI:RegisterModule("castbar", function ()
cb.bar.lag = cb.bar:CreateTexture(nil, "OVERLAY") cb.bar.lag = cb.bar:CreateTexture(nil, "OVERLAY")
cb.bar.lag:SetPoint("TOPRIGHT", cb.bar, "TOPRIGHT", 0, 0) cb.bar.lag:SetPoint("TOPRIGHT", cb.bar, "TOPRIGHT", 0, 0)
cb.bar.lag:SetPoint("BOTTOMRIGHT", cb.bar, "BOTTOMRIGHT", 0, 0) cb.bar.lag:SetPoint("BOTTOMRIGHT", cb.bar, "BOTTOMRIGHT", 0, 0)
cb.bar.lag:SetTexture(1,.2,.2,.2) cb.bar.lag:SetColorTexture(1,.2,.2,.2)
-- Per-craft progress spark for tradeskill merge — a thin vertical line -- 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 -- 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 -- moves 5x faster than the main fill). Position is updated by OnUpdate
-- while a merge is active; hidden otherwise. -- while a merge is active; hidden otherwise.
cb.bar.spark = cb.bar:CreateTexture(nil, "OVERLAY") cb.bar.spark = cb.bar:CreateTexture(nil, "OVERLAY")
cb.bar.spark:SetTexture(1, 1, 1, 0.8) cb.bar.spark:SetColorTexture(1, 1, 1, 0.8)
cb.bar.spark:SetWidth(2) cb.bar.spark:SetWidth(2)
cb.bar.spark:SetPoint("TOP", cb.bar, "TOPLEFT", 0, 0) cb.bar.spark:SetPoint("TOP", cb.bar, "TOPLEFT", 0, 0)
cb.bar.spark:SetPoint("BOTTOM", cb.bar, "BOTTOMLEFT", 0, 0) cb.bar.spark:SetPoint("BOTTOM", cb.bar, "BOTTOMLEFT", 0, 0)
@@ -277,7 +276,7 @@ pfUI:RegisterModule("castbar", function ()
-- Non-player bars: if the unit disappears (target died / detarget), -- Non-player bars: if the unit disappears (target died / detarget),
-- drop the bar immediately. -- drop the bar immediately.
if this.unitstr ~= "" and this.unitstr ~= "player" and not UnitExists(this.unitstr) then if this.unitstr ~= "player" and not UnitExists(this.unitstr) then
ClearBar(this) ClearBar(this)
return return
end end
@@ -423,13 +422,12 @@ pfUI:RegisterModule("castbar", function ()
-- endMs. delay is a positive magnitude; OnUpdate signs it "+" for casts -- endMs. delay is a positive magnitude; OnUpdate signs it "+" for casts
-- and "-" for channels. Skipped during a tradeskill merge. -- and "-" for channels. Skipped during a tradeskill merge.
if this.endTime and not this.tradeskillTotal then if this.endTime and not this.tradeskillTotal then
local query = this.unitstr ~= "" and this.unitstr or this.unitname
local startMs, endMs local startMs, endMs
if this.isChannel then if this.isChannel then
local _, _, _, s, e = C_Spell.UnitChannelInfo(query) local _, _, _, s, e = C_Spell.UnitChannelInfo(unit)
startMs, endMs = s, e startMs, endMs = s, e
else else
local _, _, _, s, e = C_Spell.UnitCastingInfo(query) local _, _, _, s, e = C_Spell.UnitCastingInfo(unit)
startMs, endMs = s, e startMs, endMs = s, e
end end
if startMs and endMs then if startMs and endMs then
@@ -544,9 +542,6 @@ pfUI:RegisterModule("castbar", function ()
pfUI.castbar.focus:SetHeight(C.castbar.focus.height) pfUI.castbar.focus:SetHeight(C.castbar.focus.height)
end end
-- bind castbar to the "focus" unit token; the GUID resolves at read time
pfUI.castbar.focus.unitstr = "focus"
UpdateMovable(pfUI.castbar.focus) UpdateMovable(pfUI.castbar.focus)
end end
end) end)
+44 -100
View File
@@ -145,7 +145,7 @@ pfUI:RegisterModule("chat", function ()
["URL"] = function(a1,a2,a3) return pfUI.chat:FormatLink(pfUI.chat.URLPattern.URL.fm,a1,a2,a3) end, ["URL"] = function(a1,a2,a3) return pfUI.chat:FormatLink(pfUI.chat.URLPattern.URL.fm,a1,a2,a3) end,
} }
-- url copy dialog -- url links
function pfUI.chat:FormatLink(formatter,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) function pfUI.chat:FormatLink(formatter,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
if not (formatter and a1) then return end if not (formatter and a1) then return end
local newtext = string.format(formatter,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) local newtext = string.format(formatter,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
@@ -185,74 +185,11 @@ pfUI:RegisterModule("chat", function ()
return text return text
end end
pfUI.chat.urlcopy = CreateFrame("Frame", "pfURLCopy", UIParent) -- clicking a url link copies it
pfUI.chat.urlcopy:Hide() LinkUtil.RegisterLinkHandler("url", function(link, text, linkData)
pfUI.chat.urlcopy:SetWidth(270) CopyText(linkData.options)
pfUI.chat.urlcopy:SetHeight(65)
pfUI.chat.urlcopy:SetFrameStrata("FULLSCREEN")
pfUI.chat.urlcopy:SetPoint("CENTER", 0, 0)
CreateBackdrop(pfUI.chat.urlcopy, nil, nil, 0.8)
pfUI.chat.urlcopy:SetMovable(true)
pfUI.chat.urlcopy:EnableMouse(true)
pfUI.chat.urlcopy:RegisterForDrag("LeftButton")
pfUI.chat.urlcopy:SetScript("OnDragStart",function()
this:StartMoving()
end) end)
pfUI.chat.urlcopy:SetScript("OnDragStop",function()
this:StopMovingOrSizing()
end)
pfUI.chat.urlcopy:SetScript("OnShow", function()
this.text:HighlightText()
end)
pfUI.chat.urlcopy.text = CreateFrame("EditBox", "pfURLCopyEditBox", pfUI.chat.urlcopy)
pfUI.chat.urlcopy.text:SetTextColor(.2,1,.8,1)
pfUI.chat.urlcopy.text:SetJustifyH("CENTER")
pfUI.chat.urlcopy.text:SetWidth(250)
pfUI.chat.urlcopy.text:SetHeight(20)
pfUI.chat.urlcopy.text:SetPoint("TOP", pfUI.chat.urlcopy, "TOP", 0, -10)
pfUI.chat.urlcopy.text:SetFontObject(GameFontNormal)
CreateBackdrop(pfUI.chat.urlcopy.text)
pfUI.chat.urlcopy.text:SetScript("OnEscapePressed", function(self)
pfUI.chat.urlcopy:Hide()
end)
pfUI.chat.urlcopy.text:SetScript("OnEditFocusLost", function(self)
pfUI.chat.urlcopy:Hide()
end)
pfUI.chat.urlcopy.close = CreateFrame("Button", "pfURLCopyClose", pfUI.chat.urlcopy, "UIPanelButtonTemplate")
pfUI.api.SkinButton(pfUI.chat.urlcopy.close)
pfUI.chat.urlcopy.close:SetWidth(70)
pfUI.chat.urlcopy.close:SetHeight(18)
pfUI.chat.urlcopy.close:SetPoint("BOTTOMRIGHT", pfUI.chat.urlcopy, "BOTTOMRIGHT", -10, 10)
pfUI.chat.urlcopy.close:SetText(T["Close"])
pfUI.chat.urlcopy.close:SetScript("OnClick", function()
pfUI.chat.urlcopy:Hide()
end)
pfUI.chat.urlcopy.SetItemRef = SetItemRef
pfUI.chat.urlcopy.CopyText = function(text)
pfUI.chat.urlcopy.text:SetText(text)
pfUI.chat.urlcopy:Show()
end
function _G.SetItemRef(link, text, button)
if (strsub(link, 1, 3) == "url") then
if string.len(link) > 4 and string.sub(link,1,4) == "url:" then
pfUI.chat.urlcopy.CopyText(string.sub(link,5, string.len(link)))
end
return
end
pfUI.chat.urlcopy.SetItemRef(link, text, button)
end
pfUI.chat.right = CreateFrame("Frame", "pfChatRight", UIParent) pfUI.chat.right = CreateFrame("Frame", "pfChatRight", UIParent)
pfUI.chat.right:SetFrameStrata("BACKGROUND") pfUI.chat.right:SetFrameStrata("BACKGROUND")
pfUI.chat.right:SetWidth(C.chat.right.width) pfUI.chat.right:SetWidth(C.chat.right.width)
@@ -278,22 +215,14 @@ pfUI:RegisterModule("chat", function ()
pfUI.chat:RegisterEvent("UI_SCALE_CHANGED") pfUI.chat:RegisterEvent("UI_SCALE_CHANGED")
local function ChatOnMouseWheel() local function ChatOnMouseWheel()
if (arg1 > 0) then if not IsShiftKeyDown() then
if IsShiftKeyDown() then this:ScrollByAmount(arg1 * C.chat.global.scrollspeed)
this:ScrollToTop() elseif arg1 > 0 then
-- stops with the oldest line on top, as the wheel does; ScrollToTop
-- would leave it alone on the bottom line
this:ScrollByAmount(this:GetMaxScrollRange())
else else
for i=1, C.chat.global.scrollspeed do
this:ScrollUp()
end
end
elseif (arg1 < 0) then
if IsShiftKeyDown() then
this:ScrollToBottom() this:ScrollToBottom()
else
for i=1, C.chat.global.scrollspeed do
this:ScrollDown()
end
end
end end
end end
@@ -376,7 +305,8 @@ pfUI:RegisterModule("chat", function ()
CreateBackdrop(LanguageMenu) CreateBackdrop(LanguageMenu)
CreateBackdrop(VoiceMacroMenu) 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 for i=1, NUM_CHAT_WINDOWS do
local frame = _G["ChatFrame"..i] local frame = _G["ChatFrame"..i]
@@ -389,7 +319,7 @@ pfUI:RegisterModule("chat", function ()
end end
end end
if combat > 5 then if frame.CombatLogQuickButtonFrame or combat > 5 then
frame.pfCombatLog = true frame.pfCombatLog = true
else else
frame.pfCombatLog = nil frame.pfCombatLog = nil
@@ -456,7 +386,7 @@ pfUI:RegisterModule("chat", function ()
-- hide textures -- hide textures
for j,v in ipairs({tab:GetRegions()}) do for j,v in ipairs({tab:GetRegions()}) do
if j==5 then v:SetTexture(0,0,0,0) end if j==5 then v:SetColorTexture(0,0,0,0) end
v:SetHeight(C.global.font_size+default_border*2) v:SetHeight(C.global.font_size+default_border*2)
end end
@@ -779,6 +709,20 @@ pfUI:RegisterModule("chat", function ()
local r,g,b,a = GetStringColor(C.chat.text.timecolor) local r,g,b,a = GetStringColor(C.chat.text.timecolor)
local timecolorhex = rgbhex(r,g,b,a) local timecolorhex = rgbhex(r,g,b,a)
-- AddMessage puts the time between these at the start of each line
local timestampStart = timecolorhex .. tleft
local timestampEnd = tright .. "|r "
-- [ 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 r,g,b = GetStringColor(C.chat.text.unknowncolor)
local unknowncolorhex = rgbhex(r,g,b) local unknowncolorhex = rgbhex(r,g,b)
@@ -788,12 +732,14 @@ pfUI:RegisterModule("chat", function ()
return pfUI_playerDB[name].level return pfUI_playerDB[name].level
end 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 if not text then return end
-- skip chat parsing on combat log -- skip chat parsing on combat log
if frame.pfCombatLog then 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 end
-- payload of the CHAT_MSG event printing this line; nil for lines -- payload of the CHAT_MSG event printing this line; nil for lines
@@ -879,24 +825,25 @@ pfUI:RegisterModule("chat", function ()
-- pushes the whisper colour code off position 1 and the find below fails -- 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 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 -- show timestamp in chat
if C.chat.text.time == "1" then 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 end
-- save chat history -- save chat history
if isWhisper then if isWhisper then
SaveChatHistory(frame:GetID(), string.gsub(text, wcol, ""), cr, cg, cb) SaveChatHistory(frame:GetID(), string.gsub(text, wcol, ""), cr, cg, cb)
else else
SaveChatHistory(frame:GetID(), text, a1, a2, a3) SaveChatHistory(frame:GetID(), text, ...)
end end
if isWhisper then frame:HookAddMessage(text, ...)
-- patch incoming whisper string to match the colors
text = string.gsub(text, "|r", "|r" .. wcol)
end
frame:HookAddMessage(text, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17)
end end
for i=1,NUM_CHAT_WINDOWS do for i=1,NUM_CHAT_WINDOWS do
@@ -906,12 +853,9 @@ pfUI:RegisterModule("chat", function ()
if not _G["ChatFrame"..i].HookAddMessage then if not _G["ChatFrame"..i].HookAddMessage then
if C.chat.text.history == "1" then if C.chat.text.history == "1" then
-- write history to chat -- write history to chat, newest first, above the lines already there
local history = GetChatHistory(i) for _, msg in ipairs(GetChatHistory(i)) do
for j=30,0,-1 do _G["ChatFrame"..i]:BackFillMessage(msg, .7,.7,.7)
if history[j] then
_G["ChatFrame"..i]:AddMessage(history[j], .7,.7,.7)
end
end end
end end
+33 -89
View File
@@ -1,5 +1,4 @@
pfUI:RegisterModule("chatcopy", function () pfUI:RegisterModule("chatcopy", function ()
local limit = 100
local f = CreateFrame("Frame") local f = CreateFrame("Frame")
f:RegisterEvent("PLAYER_ENTERING_WORLD") f:RegisterEvent("PLAYER_ENTERING_WORLD")
f:SetScript("OnEvent", function() f:SetScript("OnEvent", function()
@@ -15,26 +14,27 @@ pfUI:RegisterModule("chatcopy", function ()
button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled") button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled")
button.icon:SetAllPoints() button.icon:SetAllPoints()
button:SetScript("OnClick", function() -- show or hide the copy box of every chat frame
if arg1 == "LeftButton" then local function SetCopyMode(state)
this.state = not this.state button.state = state
for i=1, _G.NUM_CHAT_WINDOWS do for i=1, _G.NUM_CHAT_WINDOWS do
local frame = _G["ChatFrame"..i] local scroll = _G["ChatFrame"..i].scroll
local scroll = frame.scroll if scroll then
scroll:SetShown(state)
if scroll and this.state then
scroll:Show()
elseif scroll then
scroll:Hide()
end end
end end
if this.state then if state then
button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Up") button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Up")
else else
button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled") button.icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Disabled")
end end
end
button:SetScript("OnClick", function()
if arg1 == "LeftButton" then
SetCopyMode(not this.state)
elseif arg1 == "RightButton" then elseif arg1 == "RightButton" then
if ChatMenu:IsShown() then if ChatMenu:IsShown() then
ChatMenu:Hide() ChatMenu:Hide()
@@ -56,99 +56,43 @@ pfUI:RegisterModule("chatcopy", function ()
for i=1, _G.NUM_CHAT_WINDOWS do for i=1, _G.NUM_CHAT_WINDOWS do
local frame = _G["ChatFrame"..i] local frame = _G["ChatFrame"..i]
local name = frame:GetName()
local combat = 0 -- the chat frame's messages in an edit box to copy from
for i, msg in pairs(frame.messageTypeList) do local scroll = CreateFrame("Frame", "pfChatCopy" .. i, frame, "pfUIScrollingEditBoxTemplate")
if strfind(msg, "SPELL", 1) or strfind(msg, "COMBAT", 1) then
combat = combat + 1
end
end
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
if history[limit] then
table.remove(history, limit)
end
AddMessage(self,msg,r,g,b)
end
-- read chat defaults
local font, size, flags = frame:GetFont()
-- build the frames
local scroll = CreateScrollFrame("ChatFrameScroll"..i, frame)
scroll:SetAllPoints(frame) scroll:SetAllPoints(frame)
scroll.tex = scroll:CreateTexture(nil, "BACKGROUND") scroll.tex = scroll:CreateTexture(nil, "BACKGROUND")
scroll.tex:SetTexture(0,0,0,.95) scroll.tex:SetColorTexture(0,0,0,.95)
scroll.tex:SetPoint("TOPLEFT", -3, 3) scroll.tex:SetPoint("TOPLEFT", -3, 3)
scroll.tex:SetPoint("BOTTOMRIGHT", 3, -3) scroll.tex:SetPoint("BOTTOMRIGHT", 3, -3)
scroll:Hide() scroll:Hide()
local editbox = CreateFrame("EditBox", "pfChatCopyBox" .. i, scroll) scroll:RegisterCallback("OnEscapePressed", function()
editbox:SetSize(frame:GetSize()) SetCopyMode(false)
editbox:SetAllPoints(scroll) end, 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() scroll:HookScript("OnShow", function()
editbox.hasFocus = true -- each line in its own color, which also replaces the |r resets inside it
end) local lines = {}
for index=1, frame:GetNumMessages() do
editbox:SetScript("OnEscapePressed", function() local text, r, g, b = frame:GetMessageInfo(index)
if editbox.hasFocus then if C.chat.text.copytime == "0" then
editbox:HighlightText(0, 0) text = pfUI.chat.StripTimestamp(text)
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
local color = rgbhex(r, g, b)
table.insert(lines, color .. text:gsub("|r", color))
end end
local text = table.concat(lines, "\n")
editbox:SetScript("OnUpdate", function() scroll:SetFont(frame:GetFont())
if not this.count then this.count = 0 end scroll:SetText(text)
scroll:UpdateScrollChildRect() -- the cursor at the end scrolls the box to the newest line
scroll:SetVerticalScroll(scroll:GetVerticalScrollRange()) scroll:SetFocus()
scroll:Scroll() scroll:SetCursorPosition(#text)
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) end)
frame.scroll = scroll frame.scroll = scroll
end end
end
this:UnregisterAllEvents() this:UnregisterAllEvents()
end) end)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -27,11 +27,11 @@ pfUI:RegisterModule("combopoints", function ()
pfUI.combopoints[point].tex:SetAllPoints(pfUI.combopoints[point]) pfUI.combopoints[point].tex:SetAllPoints(pfUI.combopoints[point])
if point < 3 then if point < 3 then
pfUI.combopoints[point].tex:SetTexture(1, .3, .3, .75) pfUI.combopoints[point].tex:SetColorTexture(1, .3, .3, .75)
elseif point < 4 then elseif point < 4 then
pfUI.combopoints[point].tex:SetTexture(1, 1, .3, .75) pfUI.combopoints[point].tex:SetColorTexture(1, 1, .3, .75)
else else
pfUI.combopoints[point].tex:SetTexture(.3, 1, .3, .75) pfUI.combopoints[point].tex:SetColorTexture(.3, 1, .3, .75)
end end
UpdateMovable(pfUI.combopoints[point]) UpdateMovable(pfUI.combopoints[point])
-165
View File
@@ -1,165 +0,0 @@
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 function pfCooldownOnUpdate()
-- 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
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
-- 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 < now then
-- calculating remaining time as it should be
local remaining = this.duration - (now - this.start)
if remaining >= 0 then
this.text:SetText(GetColoredTimeString(remaining))
else
this:Hide()
end
else
-- I have absolutely no idea, but it works:
-- https://github.com/Stanzilla/WoWUIBugs/issues/47
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 - currentTime
if remaining >= 0 then
this.text:SetText(GetColoredTimeString(remaining))
else
this:Hide()
end
end
end
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
size = tonumber(C.appearance.cd.font_size_blizz)
elseif cooldown.pfCooldownSize then
size = tonumber(cooldown.pfCooldownSize)
else
size = tonumber(C.appearance.cd.font_size)
end
-- enforce dynamic font size
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
-- hook
local function SetCooldown(this, start, duration, enable)
-- abort on unknown frames
if C.appearance.cd.foreign == "0" and not this.pfCooldownType then
return
end
-- add support for omnicc's disable flag
if this.noCooldownCount then
return
end
-- 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)
this:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 1, -1)
end
-- don't draw global cooldowns
if this.pfCooldownType == "NOGCD" and duration < tonumber(C.appearance.cd.threshold) then
start, duration = 0, 0
end
-- disable GCDs on non pfUI frames
if not this.pfCooldownType and duration < tonumber(C.appearance.cd.threshold) then
start, duration = 0, 0
end
-- hide animation
if this.pfCooldownStyleAnimation == 0 then
this:SetAlpha(0)
elseif not this.pfCooldownStyleAnimation and C.appearance.cd.hideanim == "1" then
this:SetAlpha(0)
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
this.pfCooldownText.duration = duration
this.pfCooldownText:Show()
elseif(this.pfCooldownText) then
this.pfCooldownText:Hide()
end
end
-- hook the SetTimer function that every cooldown, Cooldown frame or
-- stock indicator Model, is driven through.
hooksecurefunc("CooldownFrame_SetTimer", SetCooldown)
end)
+348 -86
View File
@@ -1,5 +1,252 @@
pfUI:RegisterModule("easteregg", function () pfUI:RegisterModule("easteregg", function ()
local today = date("%m%d") local today = date("%m%d")
-- A full screen scene for the time the player is AFK on a holiday. The
-- night fades in, and a click or coming back clears AFK and hides it.
local function CreateScene(name, greeting, info)
local scene = CreateFrame("Button", name, WorldFrame)
scene:SetFrameStrata("DIALOG")
scene:SetAllPoints()
scene:Hide()
scene.night = scene:CreateTexture(nil, "BACKGROUND")
scene.night:SetColorTexture(0,0,0,1)
scene.night:SetGradientAlpha("VERTICAL", 0,0,0,.5, 0,0,0,1)
scene.night:SetAllPoints()
scene.stext = scene:CreateFontString(nil, "ARTWORK", "GameFontWhite")
scene.stext:SetFont(STANDARD_TEXT_FONT, 14, "OUTLINE")
scene.stext:SetPoint("TOP", 0, -380)
scene.stext:SetText("|cff33ffccShagu|cffffffff wishes you a")
scene.text = scene:CreateFontString(nil, "ARTWORK", "GameFontWhite")
scene.text:SetFont(pfUI.media["font:BigNoodleTitling.ttf"], 38)
scene.text:SetPoint("TOP", 0, -400)
scene.text:SetText(greeting)
local exit = "|cff444444<Click> or '/afk' to exit"
scene.dtext = scene:CreateFontString(nil, "ARTWORK", "GameFontWhite")
scene.dtext:SetFont(STANDARD_TEXT_FONT, 14, "OUTLINE")
scene.dtext:SetPoint("TOP", 0, -430)
scene.dtext:SetText(info and info .. "\n\n" .. exit or exit)
-- Fade the night in by playing a fade-out backwards. The scene keeps an
-- alpha of 1, which comes back when the fade ends.
scene.dusk = scene:CreateAnimationGroup()
local fade = scene.dusk:CreateAnimation("Alpha")
fade:SetChange(-1)
fade:SetDuration(.8)
scene:SetScript("OnShow", function()
this.dusk:Play(true)
end)
-- start over on the next AFK
scene:SetScript("OnHide", function()
this:StopAnimating()
end)
-- /afk toggles, so send it only while AFK is still set
scene:SetScript("OnClick", function()
if IsChatAFK() then SendChatMessage("", "AFK") end
this:Hide()
end)
scene:RegisterEvent("PLAYER_FLAGS_CHANGED")
scene:SetScript("OnEvent", function()
this:SetShown(UnitIsAFK('player'))
end)
return scene
end
-- happy valentine's day
if today == "0214" then
local valentine = CreateScene("pfValentine", "happy valentine's day!")
valentine.text:SetTextColor(1, .4, .6)
-- a rosy glow around the screen edges
local glow = CreateFrame("Frame", nil, valentine)
glow:SetAllPoints()
glow:SetBackdrop({ edgeFile = pfUI.media["img:glow"], edgeSize = 32 })
glow:SetBackdropBorderColor(1, .3, .5, 1)
-- A heart is a square turned onto its corner with a round lobe on each
-- upper edge. The client's minimap mask is a plain white disc, so it
-- tints into a lobe without a texture of our own. Smaller hearts are
-- farther away, so they are darker and rise slower.
local hearts = {}
for i = 1, 40 do
local width = math.random(10, 28)
local side = width / 1.7
local shade = .4 + width / 28 * .6
local r, g, b = shade, shade * math.random() * .4, shade * (.2 + math.random() * .3)
local heart = CreateFrame("Frame", nil, valentine)
heart:SetSize(width, width)
heart.width = width
local tip = heart:CreateTexture(nil, "ARTWORK")
tip:SetColorTexture(1, 1, 1)
tip:SetVertexColor(r, g, b)
tip:SetSize(side, side)
tip:SetPoint("CENTER", 0, -side * .07)
tip:SetRotation(math.pi / 4)
for _, x in ipairs({ -1, 1 }) do
local lobe = heart:CreateTexture(nil, "ARTWORK")
lobe:SetTexture("Textures\\MinimapMask")
lobe:SetVertexColor(r, g, b)
lobe:SetSize(side, side)
lobe:SetPoint("CENTER", x * side * .354, side * .28)
end
-- like the snow, but up from below the screen
heart.float = heart:CreateAnimationGroup()
heart.float:SetLooping("REPEAT")
heart.float:SetIgnoreFramerateThrottle(true)
heart.path = heart.float:CreateAnimation("Path")
heart.path:SetCurve("SMOOTH")
heart.points = {}
for point = 1, 6 do
heart.points[point] = heart.path:CreateControlPoint()
end
hearts[i] = heart
end
local function LetThemFloat()
local width, height = valentine:GetWidth(), valentine:GetHeight()
for _, heart in ipairs(hearts) do
local rise = height + heart.width
local duration = rise / (20 + heart.width * 2)
local sway = math.random(-30, 30)
heart:ClearAllPoints()
heart:SetPoint("TOP", valentine, "BOTTOMLEFT", math.random() * width, 0)
heart.path:SetDuration(duration)
heart.path:SetStartDelay(math.random() * duration)
for point, control in ipairs(heart.points) do
control:SetOffset(point % 2 == 1 and sway or -sway, rise * point / 6)
end
heart.float:Play()
end
end
-- Cupid hovers by the side, turned towards the middle
local cupid = CreateFrame("PlayerModel", nil, valentine)
cupid:SetSize(260, 260)
cupid:SetPoint("BOTTOMRIGHT", -60, 60)
cupid:SetScript("OnShow", function()
this:SetDisplayInfo(15990)
this:SetFacing(-.5)
end)
cupid:Hide()
valentine.dusk:SetScript("OnFinished", function()
LetThemFloat()
cupid:Show()
end)
valentine:HookScript("OnHide", function()
cupid:Hide()
end)
end
-- happy hallow's end
if today == "1031" then
local halloween = CreateScene("pfHallowsEnd", "happy hallow's end!")
halloween.text:SetTextColor(1, .5, 0)
-- Candlelight glows in from the screen edges. It flickers in uneven
-- steps of { duration, change } that end where they began, so the loop
-- never jumps.
local candle = CreateFrame("Frame", nil, halloween)
candle:SetAllPoints()
candle:SetBackdrop({ edgeFile = pfUI.media["img:glow"], edgeSize = 32 })
candle:SetBackdropBorderColor(1, .5, .1, 1)
candle.flicker = candle:CreateAnimationGroup()
candle.flicker:SetLooping("REPEAT")
local steps = {
{ .18, -.25 }, { .09, .1 }, { .22, -.2 }, { .14, .3 }, { .3, -.1 },
{ .11, -.15 }, { .2, .2 }, { .16, -.3 }, { .26, .25 }, { .12, .15 },
}
for order, step in ipairs(steps) do
local duration, change = unpack(step)
local fade = candle.flicker:CreateAnimation("Alpha")
fade:SetOrder(order)
fade:SetDuration(duration)
fade:SetChange(change)
fade:SetSmoothing("IN_OUT")
end
-- Once the night has fallen, undead rise along the bottom one after
-- another, a different few on every AFK. They are creature displays, so
-- they need no creature cache. A model frame aims its camera at the
-- middle of the model's bounds, so the frame size alone sets how big one
-- is. Bounds that reach far above the body, like the lich's, leave it
-- standing too low, so it is left out.
local undead = {
158, -- skeleton
201, -- green skeleton
1245, -- skeleton mage
137, -- ghoul
18114, -- white-handed ghoul
1200, -- zombie
1201, -- green zombie
1202, -- sea-green zombie
915, -- banshee
10690, -- green banshee
146, -- ghost
4629, -- shade
7533, -- gargoyle
7534, -- black gargoyle
7854, -- blue gargoyle
}
local function Rise()
this:SetDisplayInfo(this.display)
this:SetFacing(this.facing)
end
local risen = {}
local rising = halloween:CreateAnimationGroup()
for i = 1, 7 do
local size = math.random(180, 240)
local model = CreateFrame("PlayerModel", nil, halloween)
model:SetSize(size, size)
model:SetPoint("BOTTOM", halloween, "BOTTOM", (i - 4) * 150 + math.random(-20, 20), math.random(-10, 20))
model.facing = (math.random() - .5) * .8
model:SetScript("OnShow", Rise)
model:Hide()
risen[i] = model
local rise = rising:CreateAnimation()
rise:SetOrder(i)
rise:SetDuration(.3)
rise:SetScript("OnFinished", function() model:Show() end)
end
halloween.dusk:SetScript("OnFinished", function()
-- shuffle as many undead to the front as there are models
for i, model in ipairs(risen) do
local j = math.random(i, #undead)
undead[i], undead[j] = undead[j], undead[i]
model.display = undead[i]
end
candle.flicker:Play()
rising:Play()
end)
halloween:HookScript("OnHide", function()
for _, model in ipairs(risen) do
model:Hide()
end
end)
end
-- merry x-mas! -- merry x-mas!
if today == "1224" or today == "1225" then if today == "1224" or today == "1225" then
local title = (UnitFactionGroup("player") == "Horde") and PVP_RANK_18_0 or PVP_RANK_18_1 local title = (UnitFactionGroup("player") == "Horde") and PVP_RANK_18_0 or PVP_RANK_18_1
@@ -27,89 +274,116 @@ pfUI:RegisterModule("easteregg", function ()
_G.MARKED_AFK = "You are now |cff33ffcc" .. title .. "|r (AFK)." _G.MARKED_AFK = "You are now |cff33ffcc" .. title .. "|r (AFK)."
_G.MARKED_AFK_MESSAGE = "You are now |cff33ffcc" .. title .. "|r (AFK): %s" _G.MARKED_AFK_MESSAGE = "You are now |cff33ffcc" .. title .. "|r (AFK): %s"
_G.CLEARED_AFK = "You are no longer |cff33ffcc" .. title .. "|r (AFK).\n|cff33ffccShagu|cffffffff wishes you a merry christmas. Thanks for using |cff33ffccpf|cffffffffUI|cffffffff!|r" _G.CLEARED_AFK = "You are no longer |cff33ffcc" .. title .. "|r (AFK).\n|cff33ffccShagu|cffffffff wishes you a merry christmas. Thanks for using |cff33ffccpf|cffffffffUI|cffffffff!|r"
local snow = CreateScene("pfSnowfall", "merry christmas!")
snow.text:SetTextColor(1, .25, .25)
-- Flakes fall past the screen for good and sway on the way down. Before
-- each fall a flake waits above the screen for a while, which spreads
-- them out.
local flakes = {}
for i = 1, 200 do
local flake = snow:CreateTexture(nil, "OVERLAY")
flake.fall = flake:CreateAnimationGroup()
flake.fall:SetLooping("REPEAT")
flake.fall:SetIgnoreFramerateThrottle(true)
flake.path = flake.fall:CreateAnimation("Path")
flake.path:SetCurve("SMOOTH")
flake.points = {}
for point = 1, 6 do
flake.points[point] = flake.path:CreateControlPoint()
end
flakes[i] = flake
end
local function LetItSnow()
local width, height = snow:GetWidth(), snow:GetHeight()
for _, flake in ipairs(flakes) do
-- bigger flakes are closer, so they are brighter and fall faster
local size = math.random(2, 5)
local fall = height + size
local duration = fall / (40 + size * 20)
local sway = math.random(-20, 20)
flake:SetSize(size, size)
flake:SetColorTexture(1, 1, 1, .3 + size * .14)
flake:ClearAllPoints()
flake:SetPoint("BOTTOM", snow, "TOPLEFT", math.random() * width, 0)
flake.path:SetDuration(duration)
flake.path:SetStartDelay(math.random() * duration)
for point, control in ipairs(flake.points) do
control:SetOffset(point % 2 == 1 and sway or -sway, -fall * point / 6)
end
flake.fall:Play()
end
end
-- Snow piles up at the bottom for as long as the player stays AFK. The
-- drift plays a shrink backwards, so it grows to its full height over
-- ten minutes and keeps it once the group ends.
local pile = snow:CreateTexture(nil, "ARTWORK")
pile:SetPoint("BOTTOMLEFT", 0, 0)
pile:SetPoint("BOTTOMRIGHT", 0, 0)
pile:SetHeight(120)
pile:SetColorTexture(1, 1, 1, 1)
pile:SetGradientAlpha("VERTICAL", 1,1,1,.9, 1,1,1,0)
pile:Hide()
pile.grow = pile:CreateAnimationGroup()
local grow = pile.grow:CreateAnimation("Scale")
grow:SetOrigin("BOTTOM", 0, 0)
grow:SetScale(1, .01)
grow:SetDuration(600)
snow.dusk:SetScript("OnFinished", function()
LetItSnow()
pile:Show()
pile.grow:Play(true)
end)
snow:HookScript("OnHide", function()
pile:Hide()
end)
end end
-- happy new year -- happy new year
if today == "1231" or today == "0101" then if today == "1231" or today == "0101" then
local fireworks = CreateFrame("Button", "pfFireworks", WorldFrame) local fireworks = CreateScene("pfFireworks", "happy new year!",
fireworks:SetFrameStrata("DIALOG") "Another year with |cff33ffccpf|rUI has passed.\nThanks for continuing to use it!")
fireworks:SetAllPoints()
fireworks:Hide()
fireworks.night = fireworks:CreateTexture("LOW") -- Each explosion grows by 100px and fades out over 5/3s, then goes back
fireworks.night:SetTexture(0,0,0,1) -- to the pool.
fireworks.night:SetGradientAlpha("VERTICAL", 0,0,0,.5, 0,0,0,1) local explosions = CreateTexturePool(fireworks, "OVERLAY")
fireworks.night:SetAllPoints()
fireworks.stext = fireworks:CreateFontString("Status", "LOW", "GameFontWhite") local function Explode(x, y, size, r, g, b, a)
fireworks.stext:SetFont(STANDARD_TEXT_FONT, 14, "OUTLINE") local tex = explosions:Acquire()
fireworks.stext:SetPoint("TOP", 0, -380) if not tex.burst then
fireworks.stext:SetText("|cff33ffccShagu|cffffffff wishes you a") tex.burst = tex:CreateAnimationGroup()
tex.burst:SetIgnoreFramerateThrottle(true)
tex.burst.grow = tex.burst:CreateAnimation("Scale")
tex.burst.grow:SetDuration(5/3)
local fade = tex.burst:CreateAnimation("Alpha")
fade:SetChange(-1)
fade:SetDuration(5/3)
tex.burst:SetScript("OnFinished", function() explosions:Release(tex) end)
end
fireworks.text = fireworks:CreateFontString("Status", "LOW", "GameFontWhite") tex:SetPoint("CENTER", fireworks, "TOPLEFT", x, y)
fireworks.text:SetFont(pfUI.media["font:BigNoodleTitling.ttf"], 38) tex:SetSize(size, size)
fireworks.text:SetPoint("TOP", 0, -400) tex:SetColorTexture(r, g, b, a)
fireworks.text:SetText("happy new year!") tex.burst.grow:SetScale((size + 100) / size, (size + 100) / size)
tex:Show()
tex.burst:Play()
end
fireworks.dtext = fireworks:CreateFontString("Status", "LOW", "GameFontWhite") fireworks:HookScript("OnHide", function()
fireworks.dtext:SetFont(STANDARD_TEXT_FONT, 14, "OUTLINE") explosions:ReleaseAll()
fireworks.dtext:SetPoint("TOP", 0, -430)
fireworks.dtext:SetText("Another year with |cff33ffccpf|rUI has passed.\nThanks for continuing to use it!\n\n|cff444444<Click> or '/afk' to exit")
fireworks:SetScript("OnClick", function()
this:Hide()
end) end)
-- trigger fireworks when being AFK
fireworks:RegisterEvent("PLAYER_FLAGS_CHANGED")
fireworks:SetScript("OnEvent", function()
local isAFK = UnitIsAFK('player')
if isAFK then
this:SetAlpha(0)
end
this:SetShown(isAFK)
end)
-- basic explosion animation
local function animation()
local fps = (60 / math.max(GetFramerate(), 1))
this:SetWidth(this:GetWidth()+fps)
this:SetHeight(this:GetHeight()+fps)
this:SetAlpha(this:GetAlpha()-fps*.01)
if this:GetAlpha() <= 0 then
this.free = true
this:Hide()
end
end
-- cache explosions to reuse frames
local explosions = {}
local function GetExplosion()
for id, frame in pairs(explosions) do
if frame.free then
frame.free = nil
return frame
end
end
local frame = CreateFrame("Frame", nil, fireworks)
frame:SetScript("OnUpdate", animation)
frame.tex = frame:CreateTexture("HIGH")
frame.tex:SetAllPoints()
table.insert(explosions, frame)
return frame
end
-- create random amount of fireworks at random positions -- create random amount of fireworks at random positions
local width, height = GetScreenWidth(), GetScreenHeight()
fireworks:SetScript("OnUpdate", function() fireworks:SetScript("OnUpdate", function()
-- fade in the night if this.dusk:IsPlaying() then return end
if this:GetAlpha() < 1 then
this:SetAlpha(this:GetAlpha() + .02)
return
end
-- let the "happy new year" blink -- let the "happy new year" blink
local r,g,b = this.text:GetTextColor() local r,g,b = this.text:GetTextColor()
@@ -117,26 +391,14 @@ pfUI:RegisterModule("easteregg", function ()
if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + math.random() - .2 end if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + math.random() - .2 end
local x,y = math.random(1, width), -1*math.random(1,height) local x,y = math.random(1, this:GetWidth()), -1*math.random(1, this:GetHeight())
-- create the base explosion -- create the base explosion
local f = GetExplosion() Explode(x, y, 25, 1, 1, 1, .5)
f:ClearAllPoints()
f:SetPoint("CENTER", fireworks, "TOPLEFT", x, y)
f:SetSize(25, 25)
f.tex:SetTexture(1,1,1,.5)
f:SetAlpha(1)
f:Show()
-- create random amount of colored explosions -- create random amount of colored explosions
for i=1, math.random(20) do for i=1, math.random(20) do
local f = GetExplosion() Explode(x+(math.random(0,100)-50), y+(math.random(0,100)-50), 2, math.random(), math.random(), math.random(), 1)
f:ClearAllPoints()
f:SetPoint("CENTER", fireworks, "TOPLEFT", x+(math.random(0,100)-50), y+(math.random(0,100)-50))
f:SetSize(2, 2)
f.tex:SetTexture(math.random(),math.random(),math.random(),1)
f:SetAlpha(1)
f:Show()
end end
end) end)
end end
+7 -5
View File
@@ -132,8 +132,7 @@ pfUI:RegisterModule("energytick", function()
energytick:SetAllPoints(pfUI.uf.player.power.bar) energytick:SetAllPoints(pfUI.uf.player.power.bar)
energytick:RegisterEvent("PLAYER_ENTERING_WORLD") energytick:RegisterEvent("PLAYER_ENTERING_WORLD")
energytick:RegisterUnitEvent("UNIT_DISPLAYPOWER", "player") energytick:RegisterUnitEvent("UNIT_DISPLAYPOWER", "player")
energytick:RegisterUnitEvent("UNIT_ENERGY", "player") energytick:RegisterUnitEvent("UNIT_POWER_UPDATE", "player")
energytick:RegisterUnitEvent("UNIT_MANA", "player")
energytick:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player") energytick:RegisterUnitEvent("UNIT_SPELLCAST_SUCCEEDED", "player")
energytick:RegisterUnitEvent("UNIT_SPELLCAST_CHANNEL_STOP", "player") energytick:RegisterUnitEvent("UNIT_SPELLCAST_CHANNEL_STOP", "player")
energytick:RegisterEvent("SPELLS_CHANGED") energytick:RegisterEvent("SPELLS_CHANGED")
@@ -147,6 +146,7 @@ pfUI:RegisterModule("energytick", function()
this.mode = "ENERGY" this.mode = "ENERGY"
this:Show() this:Show()
else else
this.mode = nil
this:Hide() this:Hide()
end end
@@ -155,7 +155,8 @@ pfUI:RegisterModule("energytick", function()
return return
end end
if event == "PLAYER_ENTERING_WORLD" then -- a shift swaps the power the gains are measured on
if event == "PLAYER_ENTERING_WORLD" or event == "UNIT_DISPLAYPOWER" then
this.lastPower = UnitPower("player") this.lastPower = UnitPower("player")
end end
@@ -179,7 +180,8 @@ pfUI:RegisterModule("energytick", function()
return return
end end
if (event == "UNIT_MANA" or event == "UNIT_ENERGY") and arg1 == "player" then -- only the shown power: a cat druid's mana regen is not an energy gain
if event == "UNIT_POWER_UPDATE" and arg2 == this.mode then
local power = UnitPower("player") local power = UnitPower("player")
local diff = this.lastPower and (power - this.lastPower) or 0 local diff = this.lastPower and (power - this.lastPower) or 0
this.lastPower = power this.lastPower = power
@@ -260,7 +262,7 @@ pfUI:RegisterModule("energytick", function()
if fsrOverlay then if fsrOverlay then
-- classic style: a translucent shade on top of the power bar's own fill -- classic style: a translucent shade on top of the power bar's own fill
energytick.fsrbar = energytick:CreateTexture(nil, "ARTWORK") energytick.fsrbar = energytick:CreateTexture(nil, "ARTWORK")
energytick.fsrbar:SetTexture(1, 1, 1, .15) energytick.fsrbar:SetColorTexture(1, 1, 1, .15)
energytick.fsrbar:SetPoint("TOPLEFT", 0, 0) energytick.fsrbar:SetPoint("TOPLEFT", 0, 0)
energytick.fsrbar:SetPoint("BOTTOMLEFT", 0, 0) energytick.fsrbar:SetPoint("BOTTOMLEFT", 0, 0)
else else
+36 -2
View File
@@ -86,6 +86,12 @@ pfUI:RegisterModule("eqcompare", function ()
end end
end end
local function HideCompareItem(self)
local shoppingTooltip1, shoppingTooltip2 = unpack(self.shoppingTooltips or { ShoppingTooltip1, ShoppingTooltip2 })
shoppingTooltip1:Hide()
shoppingTooltip2:Hide()
end
local prevMerchant = ShoppingTooltip1.SetMerchantCompareItem local prevMerchant = ShoppingTooltip1.SetMerchantCompareItem
local function SetMerchantCompareItem(self, index, compareItem) local function SetMerchantCompareItem(self, index, compareItem)
if compareItem == 1 then if compareItem == 1 then
@@ -135,15 +141,22 @@ pfUI:RegisterModule("eqcompare", function ()
-- spot. Reading the rect inside the Set* call picks the side against the -- 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. -- position the tooltip is about to leave, so place the compare a frame later.
local deferred local deferred
if C_AddOns.DoesAddOnExist("Guda") then HookAddon("Guda", function()
EventUtil.ContinueOnAddOnLoaded("Guda", function()
deferred = true deferred = true
end) end)
-- the item each hooked tooltip shows, for MODIFIER_STATE_CHANGED. Every Set*
-- clears the tooltip before it builds, so OnTooltipCleared drops the link
-- of the previous content before the hook stores the new one.
local links = {}
local function forget()
links[this] = nil
end end
local function makeHook(getter) local function makeHook(getter)
return function(tooltip, arg1, arg2, arg3) return function(tooltip, arg1, arg2, arg3)
local link = getter(arg1, arg2, arg3) local link = getter(arg1, arg2, arg3)
links[tooltip] = link
if not deferred then if not deferred then
return ShowCompareItem(tooltip, link) return ShowCompareItem(tooltip, link)
end end
@@ -159,8 +172,29 @@ pfUI:RegisterModule("eqcompare", function ()
for setter, getter in pairs(TooltipHooks) do for setter, getter in pairs(TooltipHooks) do
hooksecurefunc(tooltip, setter, makeHook(getter)) hooksecurefunc(tooltip, setter, makeHook(getter))
end end
tooltip:HookScript("OnTooltipCleared", forget)
tooltip:HookScript("OnHide", forget)
end end
-- pressing or releasing shift over an item toggles its comparison at once.
-- Merchant and auction comparisons show regardless of shift and never set
-- a link, so they stay up.
pfUI.events:RegisterFrameEventAndCallback("MODIFIER_STATE_CHANGED", function(_, key)
if key ~= "LSHIFT" and key ~= "RSHIFT" then return end
local shift = IsShiftKeyDown()
for tooltip, link in pairs(links) do
-- a hidden tooltip got its item from a scan, not a hover
if tooltip:IsShown() then
if shift then
ShowCompareItem(tooltip, link, shift)
elseif C.tooltip.compare.showalways ~= "1" or C_Item.IsEquippedItem(link) then
HideCompareItem(tooltip)
end
end
end
end)
HookTooltip(GameTooltip) HookTooltip(GameTooltip)
pfUI.eqcompare.HookTooltip = HookTooltip pfUI.eqcompare.HookTooltip = HookTooltip
+1340 -205
View File
File diff suppressed because it is too large Load Diff
+1 -5
View File
@@ -1,10 +1,6 @@
pfUI:RegisterModule("farmmode", function () pfUI:RegisterModule("farmmode", function ()
local function ToggleFarmMode() local function ToggleFarmMode()
if pfUI.farmmap:IsShown() then pfUI.farmmap:SetShown(not pfUI.farmmap:IsShown())
pfUI.farmmap:Hide()
else
pfUI.farmmap:Show()
end
end end
local function MoveNodes(layer) local function MoveNodes(layer)
+11 -36
View File
@@ -16,51 +16,26 @@ pfUI:RegisterModule("focus", function ()
-- PLAYER_FOCUS_CHANGED drives immediate refresh on focus assign / clear. -- PLAYER_FOCUS_CHANGED drives immediate refresh on focus assign / clear.
-- Between events, ClassicAPI fires UNIT_* (health/mana/aura/...) with -- Between events, ClassicAPI fires UNIT_* (health/mana/aura/...) with
-- arg1 == "focus" and arg1 == "focustarget", so both frames update -- arg1 == "focus", so the bars update event-driven like target.
-- event-driven like target and need no polling tick. -- focustarget is a chained unit like targettarget: UNIT_TARGET follows the
local refresher = CreateFrame("Frame") -- focus retargeting, and a new focus only needs its visibility re-checked,
refresher:RegisterEvent("PLAYER_FOCUS_CHANGED") -- which queues the full refresh when its target is a different unit.
refresher:SetScript("OnEvent", function() pfUI.events:RegisterFrameEventAndCallback("PLAYER_FOCUS_CHANGED", function()
pfUI.uf.focus.instantRefresh = true
pfUI.uf:RefreshUnit(pfUI.uf.focus, "all") pfUI.uf:RefreshUnit(pfUI.uf.focus, "all")
pfUI.uf.focustarget.instantRefresh = true pfUI.uf.focustarget:UpdateVisibility()
pfUI.uf:RefreshUnit(pfUI.uf.focustarget, "all")
end) end)
end) end)
-- /focus and /clearfocus live in ClassicAPI's SlashCommandsRegistry now. -- /focus and /clearfocus live in ClassicAPI's SlashCommandsRegistry now.
-- /focusname is pfUI-specific because the engine has no name→GUID -- `/focus Name` takes the nearest prefix match; /focusname tries the exact
-- lookup for off-screen units — we resolve via a short target-swap. -- name first, so "Bob" still wins over a nearer "Bobby".
pfUI.api.RegisterSlashCommand("PFFOCUSNAME", { '/focusname', '/pffocusname' }, function(msg) pfUI.api.RegisterSlashCommand("PFFOCUSNAME", { '/focusname', '/pffocusname' }, function(msg)
if msg == "" then return end if msg == "" then return end
local prevGUID = UnitGUID("target") local unit = UnitTokenFromName(msg, true) or UnitTokenFromName(msg)
local prevPlayer = UnitIsUnit("target", "player") if unit then
FocusUnit(unit)
-- 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)
end
if UnitExists("target") then
FocusUnit("target")
end
RunNextFrame(function()
UIErrorsFrame:RegisterEvent("UI_ERROR_MESSAGE")
end)
if prevGUID and prevGUID ~= "0x0000000000000000" then
TargetUnit(prevGUID)
elseif prevPlayer then
TargetUnit("player")
else
ClearTarget()
end end
end, true) end, true)
+1 -1
View File
@@ -456,7 +456,7 @@ pfUI:RegisterSkin("Friends", function ()
end end
-- all RaidFrame buttons are in Blizzard_RaidUI in Turtle WoW -- all RaidFrame buttons are in Blizzard_RaidUI in Turtle WoW
HookAddonOrVariable("Blizzard_RaidUI", function() HookAddon("Blizzard_RaidUI", function()
if RaidFrameRaidInfoButton then SkinButton(RaidFrameRaidInfoButton) end if RaidFrameRaidInfoButton then SkinButton(RaidFrameRaidInfoButton) end
if RaidFrameConvertToRaidButton then SkinButton(RaidFrameConvertToRaidButton) end if RaidFrameConvertToRaidButton then SkinButton(RaidFrameConvertToRaidButton) end
if RaidFrameReadyCheckButton then SkinButton(RaidFrameReadyCheckButton) end if RaidFrameReadyCheckButton then SkinButton(RaidFrameReadyCheckButton) end
+1 -1
View File
@@ -35,7 +35,7 @@ pfUI:RegisterModule("group", function ()
end end
if C.unitframes.grouptarget.visible == "1" and active then if C.unitframes.grouptarget.visible == "1" and active then
pfUI.uf.group[i].target = pfUI.uf.group[i].target or pfUI.uf:CreateUnitFrame("Party" .. i .. "Target", nil, C.unitframes.grouptarget, 0.2) pfUI.uf.group[i].target = pfUI.uf.group[i].target or pfUI.uf:CreateUnitFrame("Party" .. i .. "Target", nil, C.unitframes.grouptarget)
pfUI.uf.group[i].target:UpdateFrameSize() pfUI.uf.group[i].target:UpdateFrameSize()
pfUI.uf.group[i].target:SetPoint("TOPLEFT", pfUI.uf.group[i], "TOPRIGHT", 3*default_border, 0) pfUI.uf.group[i].target:SetPoint("TOPLEFT", pfUI.uf.group[i], "TOPRIGHT", 3*default_border, 0)
pfUI.uf.group[i].target:UpdateConfig() pfUI.uf.group[i].target:UpdateConfig()
+1 -5
View File
@@ -37,11 +37,7 @@ pfUI:RegisterModule("gryphons", function ()
frame.texture:SetTexCoord(1, 0, 0, 1) frame.texture:SetTexCoord(1, 0, 0, 1)
end end
if texture then frame:SetShown(texture)
frame:Show()
else
frame:Hide()
end
end end
end end
+207 -182
View File
@@ -1,5 +1,5 @@
pfUI:RegisterModule("gui", function () pfUI:RegisterModule("gui", function ()
local Reload, U, CreateConfig, CreateTabFrame, CreateArea, CreateGUIEntry, EntryUpdate local Reload, U, CreateConfig, CreateTabFrame, CreateArea, CreateGUIEntry, EntryOnEnter, EntryOnLeave
-- "searchDB" gets populated when CreateConfig is called. The table holds -- "searchDB" gets populated when CreateConfig is called. The table holds
-- information about the title, its parent buttons and the frame itself: -- information about the title, its parent buttons and the frame itself:
@@ -47,25 +47,12 @@ pfUI:RegisterModule("gui", function ()
end end
end}) end})
function EntryUpdate() function EntryOnEnter()
-- detect and skip during dropdowns this.tex:Show()
local focus = GetMouseFocus()
if focus and focus.parent and focus.parent.menu then
if this.over then
this.tex:Hide()
this.over = nil
end
return
end end
local over = MouseIsOverHitRect(this) function EntryOnLeave()
if over and not this.over then
this.tex:Show()
this.over = true
elseif not over and this.over then
this.tex:Hide() this.tex:Hide()
this.over = nil
end
end end
function CreateConfig(ufunc, caption, category, config, widget, values, skip, named, type) function CreateConfig(ufunc, caption, category, config, widget, values, skip, named, type)
@@ -116,9 +103,13 @@ pfUI:RegisterModule("gui", function ()
if not widget or (widget and widget ~= "button") then if not widget or (widget and widget ~= "button") then
if widget ~= "header" then if widget ~= "header" then
frame:SetScript("OnUpdate", EntryUpdate) -- light up while the cursor is over the row; its widgets pass
-- their mouse motion on to it below
frame:SetMouseMotionEnabled(true)
frame:SetScript("OnEnter", EntryOnEnter)
frame:SetScript("OnLeave", EntryOnLeave)
frame.tex = frame:CreateTexture(nil, "BACKGROUND") frame.tex = frame:CreateTexture(nil, "BACKGROUND")
frame.tex:SetTexture(1,1,1,.05) frame.tex:SetColorTexture(1,1,1,.05)
frame.tex:SetAllPoints() frame.tex:SetAllPoints()
frame.tex:Hide() frame.tex:Hide()
end end
@@ -190,7 +181,7 @@ pfUI:RegisterModule("gui", function ()
if not cr or not cg or not cb or not ca then if not cr or not cg or not cb or not ca then
cr, cg, cb, ca = 1, 1, 1, 1 cr, cg, cb, ca = 1, 1, 1, 1
end end
frame.color.prev:SetTexture(cr,cg,cb,ca) frame.color.prev:SetColorTexture(cr,cg,cb,ca)
frame.color:SetScript("OnClick", function() frame.color:SetScript("OnClick", function()
local cr, cg, cb, ca = strsplit(",", category[config]) local cr, cg, cb, ca = strsplit(",", category[config])
@@ -208,7 +199,7 @@ pfUI:RegisterModule("gui", function ()
b = round(b, 3) b = round(b, 3)
a = round(a, 3) a = round(a, 3)
preview:SetTexture(r,g,b,a) preview:SetColorTexture(r,g,b,a)
if not this:GetParent():IsShown() then if not this:GetParent():IsShown() then
category[config] = r .. "," .. g .. "," .. b .. "," .. a category[config] = r .. "," .. g .. "," .. b .. "," .. a
@@ -218,7 +209,7 @@ pfUI:RegisterModule("gui", function ()
end end
function ColorPickerFrame.cancelFunc() function ColorPickerFrame.cancelFunc()
preview:SetTexture(cr,cg,cb,ca) preview:SetColorTexture(cr,cg,cb,ca)
end end
ColorPickerFrame.opacityFunc = ColorPickerFrame.func ColorPickerFrame.opacityFunc = ColorPickerFrame.func
@@ -344,45 +335,43 @@ pfUI:RegisterModule("gui", function ()
-- use dropdown widget -- use dropdown widget
if widget == "dropdown" and values then if widget == "dropdown" and values then
frame.input = CreateDropDownButton(nil, frame) local function IsSelected(value)
frame.input:SetBackdrop(nil) return category[config] == value
frame.input.menuframe:SetParent(pfUI.gui) end
frame.input:SetPoint("RIGHT", frame, "RIGHT", 0, 0) local function SetSelected(value)
frame.input:SetWidth(180) if category[config] ~= value then
frame.input:SetMenu(function()
local menu = {}
for i, k in pairs(_G.type(values) == "function" and values() or values) do
local entry = {}
-- get human readable
local value, text = strsplit(":", k)
text = text or value
entry.text = text
entry.func = function()
if category and category[config] ~= value then
category[config] = value category[config] = value
if ufunc then ufunc() else pfUI.gui.settingChanged = true end if ufunc then ufunc() else pfUI.gui.settingChanged = true end
pfUI.events:TriggerEvent("config:changed", category, config) pfUI.events:TriggerEvent("config:changed", category, config)
end end
end end
if category and category[config] == value then frame.input = CreateFrame("DropdownButton", nil, frame, "pfUIDropdownTemplate")
frame.input.current = i frame.input:SetPoint("RIGHT", frame, "RIGHT", 0, 0)
frame.input:SetWidth(180)
frame.input:SetupMenu(function(dropdown, rootDescription)
for _, k in pairs(_G.type(values) == "function" and values() or values) do
-- get human readable
local value, text = strsplit(":", k)
rootDescription:CreateRadio(text or value, IsSelected, SetSelected, value)
end end
table.insert(menu, entry)
end
return menu
end) end)
frame.input:SetSelection(frame.input.current)
end end
-- use list widget -- use list widget
if widget == "list" then if widget == "list" then
-- index of the selected entry among the "#" separated ones
local selected
local function IsSelected(index)
return index == selected
end
local function Select(index)
selected = index
end
frame.del = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate") frame.del = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate")
SkinButton(frame.del) SkinButton(frame.del)
frame.del:SetWidth(16) frame.del:SetWidth(16)
@@ -392,15 +381,16 @@ pfUI:RegisterModule("gui", function ()
frame.del:SetText("-") frame.del:SetText("-")
frame.del:SetTextColor(1,.5,.5,1) frame.del:SetTextColor(1,.5,.5,1)
frame.del:SetScript("OnClick", function() frame.del:SetScript("OnClick", function()
local sel = frame.input:GetSelection() if not selected then return end
local newconf = "" local newconf = ""
for id, val in pairs({strsplit("#", category[config])}) do for id, val in ipairs({strsplit("#", category[config])}) do
if id ~= sel then newconf = newconf .. "#" .. val end if id ~= selected and val ~= "" then newconf = newconf .. "#" .. val end
end end
selected = nil
category[config] = newconf category[config] = newconf
if ufunc then ufunc() else pfUI.gui.settingChanged = true end if ufunc then ufunc() else pfUI.gui.settingChanged = true end
pfUI.events:TriggerEvent("config:changed", category, config) pfUI.events:TriggerEvent("config:changed", category, config)
frame.input:UpdateMenu() frame.input:GenerateMenu()
end) end)
frame.add = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate") frame.add = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate")
@@ -416,24 +406,26 @@ pfUI:RegisterModule("gui", function ()
category[config] = category[config] .. "#" .. this:GetParent().input:GetText() category[config] = category[config] .. "#" .. this:GetParent().input:GetText()
if ufunc then ufunc() else pfUI.gui.settingChanged = true end if ufunc then ufunc() else pfUI.gui.settingChanged = true end
pfUI.events:TriggerEvent("config:changed", category, config) pfUI.events:TriggerEvent("config:changed", category, config)
frame.input:UpdateMenu() frame.input:GenerateMenu()
end, false, true) end, false, true)
end) end)
frame.input = CreateDropDownButton(nil, frame) frame.input = CreateFrame("DropdownButton", nil, frame, "pfUIDropdownTemplate")
frame.input:SetBackdrop(nil)
frame.input.menuframe:SetParent(pfUI.gui)
frame.input:SetPoint("RIGHT", frame.add, "LEFT", -2, 0) frame.input:SetPoint("RIGHT", frame.add, "LEFT", -2, 0)
frame.input:SetWidth(140) frame.input:SetWidth(140)
frame.input:SetMenu(function() frame.input:SetupMenu(function(dropdown, rootDescription)
local menu = {} for id, val in ipairs({strsplit("#", category[config])}) do
for i, val in pairs({strsplit("#", category[config])}) do if val ~= "" then
table.insert(menu, { text = val }) rootDescription:CreateRadio(val, IsSelected, Select, id)
end
end end
return menu
end) end)
end end
for _, child in ipairs({ frame:GetChildren() }) do
child:SetPropagateMouseMotion(true)
end
return frame return frame
end end
@@ -498,31 +490,32 @@ pfUI:RegisterModule("gui", function ()
f.button = parent[title] f.button = parent[title]
f.bg = f:CreateTexture(nil, "BACKGROUND") f.bg = f:CreateTexture(nil, "BACKGROUND")
f.bg:SetTexture(1,1,1,.05) f.bg:SetColorTexture(1,1,1,.05)
f.bg:SetAllPoints() f.bg:SetAllPoints()
f:SetScript("OnShow", function() f:SetScript("OnShow", function()
this.indexed = true this.indexed = true
this.button.text:SetTextColor(.2,1,.8,1) this.button.text:SetTextColor(.2,1,.8,1)
this.button.bg:SetTexture(1,1,1,1) this.button.bg:SetColorTexture(1,1,1,1)
this.button.bg:SetGradientAlpha("HORIZONTAL", 0,0,0,0, 1,1,1,.05) this.button.bg:SetGradientAlpha("HORIZONTAL", 0,0,0,0, 1,1,1,.05)
end) end)
f:SetScript("OnHide", function() f:SetScript("OnHide", function()
this.button.text:SetTextColor(1,1,1,1) this.button.text:SetTextColor(1,1,1,1)
this.button.bg:SetTexture(0,0,0,0) this.button.bg:SetColorTexture(0,0,0,0)
end) end)
-- are we a frame with contents? -- are we a frame with contents?
if func then if func then
f.scroll = CreateScrollFrame(nil, f) f.scroll = CreateFrame("ScrollFrame", nil, f, "pfUIScrollFrameTemplate")
SetAllPointsOffset(f.scroll, f, 2) 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.parent = f.scroll
f.scroll.content:SetScript("OnShow", function() f.scroll.content:SetScript("OnShow", function()
if not this.setup then if not this.setup then
func() func()
this.setup = true this.setup = true
this.parent:UpdateScrollChildRect()
end end
end) end)
end end
@@ -695,7 +688,10 @@ pfUI:RegisterModule("gui", function ()
SkinButton(pfUI.gui.share) SkinButton(pfUI.gui.share)
-- searchbar -- searchbar
local function SearchEntryClick() local results -- the result list, made with the search page on the first search
local highlighted -- the config row the last clicked result points at
local function SearchResultClick()
-- clear search focus -- clear search focus
pfUI.gui.search:ClearFocus() pfUI.gui.search:ClearFocus()
@@ -705,23 +701,24 @@ pfUI:RegisterModule("gui", function ()
end end
-- highlight matched entry -- highlight matched entry
if not this.obj[-1].highlight then if highlighted then highlighted.highlight:Hide() end
this.obj[-1].highlight = this.obj[-1]:CreateTexture(nil, "OVERLAY") highlighted = this.obj[-1]
this.obj[-1].highlight:SetAllPoints() if not highlighted.highlight then
this.obj[-1].highlight:SetTexture(.2,1,.8,.2) highlighted.highlight = highlighted:CreateTexture(nil, "OVERLAY")
highlighted.highlight:SetAllPoints()
highlighted.highlight:SetColorTexture(.2,1,.8,.2)
end end
this.obj[-1].highlight:Show() highlighted.highlight:Show()
end end
local function CreateSearchEntry(parent, i) local function InitSearchResult(f, obj)
local f = CreateFrame("Button", nil, parent) -- one-time setup of a pooled row
f:SetPoint("TOPLEFT", 5, -5 + (i-1)*-25) if not f.text then
f:SetWidth(565) f:SetScript("OnClick", SearchResultClick)
f:SetHeight(20) f:SetScript("OnEnter", EntryOnEnter)
f:SetScript("OnClick", SearchEntryClick) f:SetScript("OnLeave", EntryOnLeave)
f:SetScript("OnUpdate", EntryUpdate)
f.text = f:CreateFontString("Status", "LOW", "GameFontWhite") f.text = f:CreateFontString(nil, "LOW", "GameFontWhite")
f.text:SetFont(pfUI.font_default, pfUI_config.global.font_size, "OUTLINE") f.text:SetFont(pfUI.font_default, pfUI_config.global.font_size, "OUTLINE")
f.text:SetAllPoints() f.text:SetAllPoints()
f.text:SetJustifyH("LEFT") f.text:SetJustifyH("LEFT")
@@ -729,11 +726,19 @@ pfUI:RegisterModule("gui", function ()
f.text:SetTextColor(.5,.5,.5) f.text:SetTextColor(.5,.5,.5)
f.tex = f:CreateTexture(nil, "BACKGROUND") f.tex = f:CreateTexture(nil, "BACKGROUND")
f.tex:SetTexture(1,1,1,.05) f.tex:SetColorTexture(1,1,1,.05)
f.tex:SetAllPoints() f.tex:SetAllPoints()
f.tex:Hide() f.tex:Hide()
end
return f f.obj = obj
-- the path of submenus, then the entry
local caption = ""
for x=table.getn(obj),1,-1 do
caption = caption .. "|cff33ffcc" .. obj[x].text:GetText() .. "|r » "
end
f.text:SetText(caption .. "|cffffffff" .. obj[0])
end end
pfUI.gui.search = CreateFrame("EditBox", nil, pfUI.gui) pfUI.gui.search = CreateFrame("EditBox", nil, pfUI.gui)
@@ -760,54 +765,34 @@ pfUI:RegisterModule("gui", function ()
local defval = "["..T["Search"].."]" local defval = "["..T["Search"].."]"
-- initialize search window -- initialize search window
CreateGUIEntry(defval, nil, function() end) if not results then
CreateGUIEntry(defval)
results = CreateFrame("Frame", nil, pfUI.gui.frames[defval].area, "pfUIScrollBoxListTemplate")
SetAllPointsOffset(results, pfUI.gui.frames[defval].area, 2)
local view = CreateScrollBoxListLinearView(0, 0, 0, 0, 5)
view:SetElementExtent(20)
view:SetElementInitializer("Button", InitSearchResult)
ScrollUtil.InitScrollBoxListWithScrollBar(results.ScrollBox, results.ScrollBar, view)
end
pfUI.gui.frames[defval]:Click() pfUI.gui.frames[defval]:Click()
local scroll = pfUI.gui.frames[defval].area.scroll.content if highlighted then
local parent = pfUI.gui.frames[defval].area.scroll highlighted.highlight:Hide()
scroll.results = scroll.results or {} highlighted = nil
for i=1,table.getn(scroll.results) do
scroll.results[i]:Hide()
if scroll.results[i].obj and scroll.results[i].obj[-1].highlight then
scroll.results[i].obj[-1].highlight:Hide()
end
end end
if strlen(this:GetText()) < 1 then return end -- the matching entries, from the top of the list
local matches = {}
local i = 1
local search = strlower(this:GetText()) local search = strlower(this:GetText())
for name, obj in pairs(searchDB) do if search ~= "" then
local title = obj[0] and strlower(obj[0]) for _, obj in pairs(searchDB) do
if strfind(title, search) then if strfind(strlower(obj[0]), search, 1, true) then
-- build caption string table.insert(matches, obj)
local caption = ""
for x=table.getn(obj),1,-1 do
caption = caption .. "|cff33ffcc" .. obj[x].text:GetText() .. "|r » "
end
caption = caption .. "|cffffffff" .. obj[0]
-- build search entry button
scroll.results[i] = scroll.results[i] or CreateSearchEntry(scroll, i)
scroll.results[i].obj = obj
scroll.results[i].text:SetText(caption)
scroll.results[i]:Show()
i = i + 1
end end
end end
end
-- reload scroll frames results.ScrollBox:SetDataProvider(CreateDataProvider(matches))
scroll:Hide()
scroll:SetHeight(i * 25 )
scroll:Show()
parent:SetScrollChild(scroll)
QueueFunction(function()
parent:SetVerticalScroll(0)
parent:UpdateScrollState()
parent:Scroll()
end)
end) end)
pfUI.gui.search:SetScript("OnEditFocusGained", function(self) pfUI.gui.search:SetScript("OnEditFocusGained", function(self)
@@ -922,14 +907,6 @@ pfUI:RegisterModule("gui", function ()
"HORIZONTAL:" .. T["Horizontal"], "HORIZONTAL:" .. T["Horizontal"],
"VERTICAL:" .. T["Vertical"], "VERTICAL:" .. T["Vertical"],
}, },
["uf_animationspeed"] = {
"1:" .. T["Instant"],
"2:" .. T["Very Fast"],
"3:" .. T["Fast"],
"5:" .. T["Medium"],
"8:" .. T["Slow"],
"13:" .. T["Very Slow"],
},
["xpanchors"] = { ["xpanchors"] = {
"__NONONIL__:" .. T["No Anchor"], "__NONONIL__:" .. T["No Anchor"],
"pfChatLeft:" .. T["Left Chat Frame"], "pfChatLeft:" .. T["Left Chat Frame"],
@@ -980,6 +957,12 @@ pfUI:RegisterModule("gui", function ()
"TOP:" .. T["Center"], "TOP:" .. T["Center"],
"TOPRIGHT:" .. T["Right"] "TOPRIGHT:" .. T["Right"]
}, },
["uf_portrait_style"] = {
"3d:" .. T["3D"],
"2d:" .. T["2D"],
"classround:" .. T["Class Icon (Round)"],
"classsquare:" .. T["Class Icon (Square)"]
},
["uf_portrait_position"] = { ["uf_portrait_position"] = {
"bar:" .. T["Healthbar Embedded"], "bar:" .. T["Healthbar Embedded"],
"left:" .. T["Left"], "left:" .. T["Left"],
@@ -1300,7 +1283,7 @@ pfUI:RegisterModule("gui", function ()
-- draw pfUI logo -- draw pfUI logo
local function draw(p, fx, fy, tx, ty, r, g, b, a) local function draw(p, fx, fy, tx, ty, r, g, b, a)
local t = p:CreateTexture(nil, "OVERLAY") local t = p:CreateTexture(nil, "OVERLAY")
t:SetTexture(r,g,b,a) t:SetColorTexture(r,g,b,a)
t:SetPoint("TOPLEFT", fx, fy) t:SetPoint("TOPLEFT", fx, fy)
t:SetPoint("BOTTOMRIGHT", p, "TOPLEFT", tx, ty) t:SetPoint("BOTTOMRIGHT", p, "TOPLEFT", tx, ty)
end end
@@ -1327,14 +1310,14 @@ pfUI:RegisterModule("gui", function ()
this.version = this:CreateFontString("Status", "LOW", "GameFontWhite") this.version = this:CreateFontString("Status", "LOW", "GameFontWhite")
this.version:SetFont(pfUI.font_default, C.global.font_size) this.version:SetFont(pfUI.font_default, C.global.font_size)
this.version:SetPoint("TOPRIGHT", 375, -170) this.version:SetPoint("TOPRIGHT", this, "TOPLEFT", 375, -170)
this.version:SetWidth(200) this.version:SetWidth(200)
this.version:SetJustifyH("RIGHT") this.version:SetJustifyH("RIGHT")
this.update = this:CreateFontString("Status", "LOW", "GameFontWhite") this.update = this:CreateFontString("Status", "LOW", "GameFontWhite")
this.update:SetFont(pfUI.font_default, C.global.font_size) this.update:SetFont(pfUI.font_default, C.global.font_size)
this.update:SetPoint("TOPLEFT", 200, -140) this.update:SetPoint("TOPLEFT", 200, -140)
this.update:SetPoint("TOPRIGHT", 375, -140) this.update:SetPoint("TOPRIGHT", this, "TOPLEFT", 375, -140)
this.update:SetJustifyH("CENTER") this.update:SetJustifyH("CENTER")
this.update:SetTextColor(.2,1,.8) this.update:SetTextColor(.2,1,.8)
@@ -1347,7 +1330,7 @@ pfUI:RegisterModule("gui", function ()
this.screen = this:CreateFontString("Status", "LOW", "GameFontWhite") this.screen = this:CreateFontString("Status", "LOW", "GameFontWhite")
this.screen:SetFont(pfUI.font_default, C.global.font_size) this.screen:SetFont(pfUI.font_default, C.global.font_size)
this.screen:SetPoint("TOPRIGHT", 375, -200) this.screen:SetPoint("TOPRIGHT", this, "TOPLEFT", 375, -200)
this.screen:SetWidth(200) this.screen:SetWidth(200)
this.screen:SetJustifyH("RIGHT") this.screen:SetJustifyH("RIGHT")
@@ -1360,7 +1343,7 @@ pfUI:RegisterModule("gui", function ()
this.scale = this:CreateFontString("Status", "LOW", "GameFontWhite") this.scale = this:CreateFontString("Status", "LOW", "GameFontWhite")
this.scale:SetFont(pfUI.font_default, C.global.font_size) this.scale:SetFont(pfUI.font_default, C.global.font_size)
this.scale:SetPoint("TOPRIGHT", 375, -220) this.scale:SetPoint("TOPRIGHT", this, "TOPLEFT", 375, -220)
this.scale:SetWidth(200) this.scale:SetWidth(200)
this.scale:SetJustifyH("RIGHT") this.scale:SetJustifyH("RIGHT")
@@ -1373,7 +1356,7 @@ pfUI:RegisterModule("gui", function ()
this.client = this:CreateFontString("Status", "LOW", "GameFontWhite") this.client = this:CreateFontString("Status", "LOW", "GameFontWhite")
this.client:SetFont(pfUI.font_default, C.global.font_size) this.client:SetFont(pfUI.font_default, C.global.font_size)
this.client:SetPoint("TOPRIGHT", 375, -250) this.client:SetPoint("TOPRIGHT", this, "TOPLEFT", 375, -250)
this.client:SetWidth(200) this.client:SetWidth(200)
this.client:SetJustifyH("RIGHT") this.client:SetJustifyH("RIGHT")
@@ -1385,7 +1368,7 @@ pfUI:RegisterModule("gui", function ()
this.langc:SetText(T["Language"] .. ":") this.langc:SetText(T["Language"] .. ":")
this.lang = this:CreateFontString("Status", "LOW", "GameFontWhite") this.lang = this:CreateFontString("Status", "LOW", "GameFontWhite")
this.lang:SetFont(pfUI.font_default, C.global.font_size) this.lang:SetFont(pfUI.font_default, C.global.font_size)
this.lang:SetPoint("TOPRIGHT", 375, -270) this.lang:SetPoint("TOPRIGHT", this, "TOPLEFT", 375, -270)
this.lang:SetWidth(200) this.lang:SetWidth(200)
this.lang:SetJustifyH("RIGHT") this.lang:SetJustifyH("RIGHT")
@@ -1414,7 +1397,7 @@ pfUI:RegisterModule("gui", function ()
donate:SetHeight(20) donate:SetHeight(20)
donate:SetText(T["Donate"]) donate:SetText(T["Donate"])
donate:SetScript("OnClick", function() donate:SetScript("OnClick", function()
pfUI.chat.urlcopy.CopyText("https://buymeacoffee.com/brues") CopyText("https://buymeacoffee.com/brues")
end) end)
SkinButton(donate) SkinButton(donate)
@@ -1424,7 +1407,7 @@ pfUI:RegisterModule("gui", function ()
github:SetHeight(20) github:SetHeight(20)
github:SetText(T["GitHub"]) github:SetText(T["GitHub"])
github:SetScript("OnClick", function() github:SetScript("OnClick", function()
pfUI.chat.urlcopy.CopyText(GetAddOnMetadata(pfUI.name, "X-Website")) CopyText(GetAddOnMetadata(pfUI.name, "X-Website"))
end) end)
SkinButton(github) SkinButton(github)
@@ -1434,7 +1417,7 @@ pfUI:RegisterModule("gui", function ()
website:SetHeight(20) website:SetHeight(20)
website:SetText(T["Website"]) website:SetText(T["Website"])
website:SetScript("OnClick", function() website:SetScript("OnClick", function()
pfUI.chat.urlcopy.CopyText(GetAddOnMetadata(pfUI.name, "X-Website")) CopyText(GetAddOnMetadata(pfUI.name, "X-Website"))
end) end)
SkinButton(website) SkinButton(website)
end) end)
@@ -1614,21 +1597,51 @@ pfUI:RegisterModule("gui", function ()
end) end)
CreateGUIEntry(T["Settings"], T["Cooldown"], function() CreateGUIEntry(T["Settings"], T["Cooldown"], function()
CreateConfig(U["buff"], T["Show Milliseconds When Timer Runs Out"], C.appearance.cd, "milliseconds", "checkbox") -- every kind of cooldown CreateCooldown makes, as C.cooldown groups.
CreateConfig(nil, T["Cooldown Color (Less than 3 Sec)"], C.appearance.cd, "lowcolor", "color") -- Other addons' cooldowns only lose numbers or sweep (see
CreateConfig(nil, T["Cooldown Color (Seconds)"], C.appearance.cd, "normalcolor", "color") -- api/cooldown.lua), so giving them back takes a reload
CreateConfig(nil, T["Cooldown Color (Minutes)"], C.appearance.cd, "minutecolor", "color") local kinds = {
CreateConfig(nil, T["Cooldown Color (Hours)"], C.appearance.cd, "hourcolor", "color") { "actionbar", T["Action Bars"] },
CreateConfig(nil, T["Cooldown Color (Days)"], C.appearance.cd, "daycolor", "color") { "bags", T["Bags"] },
CreateConfig(nil, T["Use Dynamic Font Size"], C.appearance.cd, "dynamicsize", "checkbox") { "blizzard", T["Spellbook And Character"] },
CreateConfig(nil, T["Cooldown Text Font"], C.appearance.cd, "font", "dropdown", pfUI.gui.dropdowns.fonts) { "unitframe", T["Unit Frame Auras"] },
CreateConfig(nil, T["Cooldown Text Font Size"], C.appearance.cd, "font_size") { "indicator", T["Buff Indicators"] },
CreateConfig(nil, T["Cooldown Text Font Size (Blizzard Frames)"], C.appearance.cd, "font_size_blizz") { "nameplate", T["Nameplate Debuffs"] },
CreateConfig(nil, T["Cooldown Text Font Size (Foreign Frames)"], C.appearance.cd, "font_size_foreign") { "buff", T["Player Buffs"] },
CreateConfig(nil, T["Cooldown Text Time Threshold"], C.appearance.cd, "threshold") { "tooltip", T["Tooltip Auras"] },
CreateConfig(nil, T["Enable Durations On Blizzard Frames"], C.appearance.cd, "blizzard", "checkbox") { "totem", T["Totems"] },
CreateConfig(nil, T["Enable Durations On Foreign Frames"], C.appearance.cd, "foreign", "checkbox") { "lossofcontrol", T["Loss Of Control"] },
CreateConfig(nil, T["Hide Foreign Cooldown Animations"], C.appearance.cd, "hideanim", "checkbox") { "foreign", T["Other Addons"] },
}
CreateConfig(nil, COUNTDOWN_FOR_COOLDOWNS_TEXT, "CVAR", "countdownForCooldowns", "checkbox")
CreateConfig(UpdateCooldowns, T["Font"], C.cooldown, "font", "dropdown", pfUI.gui.dropdowns.fonts)
CreateConfig(nil, T["Font Size"], C.cooldown, "font_size")
CreateConfig(nil, T["Scale Font Size With Icon"], C.cooldown, "dynamicsize", "checkbox")
CreateConfig(UpdateCooldowns, T["Hide Numbers On Spell Cooldowns Up To (Seconds)"], C.cooldown, "threshold")
CreateConfig(UpdateCooldowns, T["Show Tenths Below 5 Seconds"], C.cooldown, "milliseconds", "checkbox")
CreateConfig(UpdateCooldowns, T["Cooldown Color (5 Seconds Or Less)"], C.cooldown, "lowcolor", "color")
CreateConfig(UpdateCooldowns, T["Cooldown Color (Seconds)"], C.cooldown, "normalcolor", "color")
CreateConfig(UpdateCooldowns, T["Cooldown Color (Minutes)"], C.cooldown, "minutecolor", "color")
CreateConfig(UpdateCooldowns, T["Cooldown Color (Hours)"], C.cooldown, "hourcolor", "color")
CreateConfig(UpdateCooldowns, T["Cooldown Color (Days)"], C.cooldown, "daycolor", "color")
CreateConfig(nil, T["Show Numbers On"], nil, nil, "header")
for _, kind in ipairs(kinds) do
CreateConfig(kind[1] ~= "foreign" and UpdateCooldowns or nil, kind[2], C.cooldown[kind[1]], "text", "checkbox")
end
CreateConfig(nil, T["Show Sweep On"], nil, nil, "header")
for _, kind in ipairs(kinds) do
CreateConfig(kind[1] ~= "foreign" and UpdateCooldowns or nil, kind[2], C.cooldown[kind[1]], "animation", "checkbox")
end
CreateConfig(nil, T["Reverse Sweep On"], nil, nil, "header")
for _, kind in ipairs(kinds) do
if kind[1] ~= "foreign" then
CreateConfig(UpdateCooldowns, kind[2], C.cooldown[kind[1]], "reverse", "checkbox")
end
end
end) end)
CreateGUIEntry(T["Settings"], T["Screenshot"], function() CreateGUIEntry(T["Settings"], T["Screenshot"], function()
@@ -2065,9 +2078,9 @@ pfUI:RegisterModule("gui", function ()
CreateGUIEntry(T["Unit Frames"], T["General"], function() CreateGUIEntry(T["Unit Frames"], T["General"], function()
CreateConfig(nil, T["Disable pfUI Unit Frames"], C.unitframes, "disable", "checkbox") CreateConfig(nil, T["Disable pfUI Unit Frames"], C.unitframes, "disable", "checkbox")
CreateConfig(nil, T["Healthbar Animation Speed"], C.unitframes, "animation_speed", "dropdown", pfUI.gui.dropdowns.uf_animationspeed) CreateConfig(nil, T["Animate Health And Power Bars"], C.unitframes, "animatebars", "checkbox")
CreateConfig(nil, T["Portrait Alpha"], C.unitframes, "portraitalpha") CreateConfig(nil, T["Portrait Alpha"], C.unitframes, "portraitalpha")
CreateConfig(nil, T["Always Use 2D Portraits"], C.unitframes, "always2dportrait", "checkbox") CreateConfig(nil, T["Portrait Style"], C.unitframes, "portraitstyle", "dropdown", pfUI.gui.dropdowns.uf_portrait_style)
CreateConfig(nil, T["Enable 2D Portraits As Fallback"], C.unitframes, "portraittexture", "checkbox") CreateConfig(nil, T["Enable 2D Portraits As Fallback"], C.unitframes, "portraittexture", "checkbox")
CreateConfig(nil, T["Unit Frame Layout"], C.unitframes, "layout", "dropdown", pfUI.gui.dropdowns.uf_layout) CreateConfig(nil, T["Unit Frame Layout"], C.unitframes, "layout", "dropdown", pfUI.gui.dropdowns.uf_layout)
CreateConfig(nil, T["Combopoint Width"], C.unitframes, "combowidth") CreateConfig(nil, T["Combopoint Width"], C.unitframes, "combowidth")
@@ -2088,6 +2101,7 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(nil, T["Offhand Bar Color"], C.unitframes, "swingtimerohcolor", "color") CreateConfig(nil, T["Offhand Bar Color"], C.unitframes, "swingtimerohcolor", "color")
CreateConfig(nil, T["Ranged Bar Color"], C.unitframes, "swingtimerrangedcolor", "color") CreateConfig(nil, T["Ranged Bar Color"], C.unitframes, "swingtimerrangedcolor", "color")
CreateConfig(nil, T["Ranged Warn Color (Hunter)"], C.unitframes, "swingtimerrangedwarncolor", "color") CreateConfig(nil, T["Ranged Warn Color (Hunter)"], C.unitframes, "swingtimerrangedwarncolor", "color")
CreateConfig(nil, T["Out Of Range Color"], C.unitframes, "swingtimeroutrangecolor", "color")
CreateConfig(nil, T["Show On Next Attack Queue Color"], C.unitframes, "swingtimerhsqueue", "checkbox") CreateConfig(nil, T["Show On Next Attack Queue Color"], C.unitframes, "swingtimerhsqueue", "checkbox")
CreateConfig(nil, T["Show Attack Speed"], C.unitframes, "swingtimerattackspeed", "checkbox") CreateConfig(nil, T["Show Attack Speed"], C.unitframes, "swingtimerattackspeed", "checkbox")
@@ -2150,6 +2164,10 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(nil, T["Druid Mana Bar Texture"], C.unitframes, "druidmanatexture", "dropdown", pfUI.gui.dropdowns.uf_bartexture, nil, nil, nil) CreateConfig(nil, T["Druid Mana Bar Texture"], C.unitframes, "druidmanatexture", "dropdown", pfUI.gui.dropdowns.uf_bartexture, nil, nil, nil)
CreateConfig(nil, T["Target Indicators"], nil, nil, "header")
CreateConfig(nil, T["Target Indicator Font Size"], C.unitframes, "indicator_font_size", nil, nil, nil, nil, nil)
CreateConfig(nil, T["Show Line of Sight Indicator"], C.unitframes, "los_indicator", "checkbox", nil, nil, nil, nil)
CreateConfig(nil, T["SuperWoW Settings"], nil, nil, "header") CreateConfig(nil, T["SuperWoW Settings"], nil, nil, "header")
CreateConfig(nil, T["Track Group on Minimap"], C.unitframes, "track_group", "checkbox", nil, nil, nil, nil) CreateConfig(nil, T["Track Group on Minimap"], C.unitframes, "track_group", "checkbox", nil, nil, nil, nil)
@@ -2160,8 +2178,6 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(nil, T["Reactive Indicator Size"], C.unitframes, "reactive_size", nil, nil, nil, nil, nil) CreateConfig(nil, T["Reactive Indicator Size"], C.unitframes, "reactive_size", nil, nil, nil, nil, nil)
CreateConfig(nil, T["UnitXP Settings"], nil, nil, "header") CreateConfig(nil, T["UnitXP Settings"], nil, nil, "header")
CreateConfig(nil, T["Font Size for all UnitXP texts"], C.unitframes, "unitxp_font_size", nil, nil, nil, nil, nil)
CreateConfig(nil, T["Show Line of Sight Indicator"], C.unitframes, "los_indicator", "checkbox", nil, nil, nil, nil)
CreateConfig(nil, T["Show Behind Indicator"], C.unitframes, "behind_indicator", "checkbox", nil, nil, nil, nil) CreateConfig(nil, T["Show Behind Indicator"], C.unitframes, "behind_indicator", "checkbox", nil, nil, nil, nil)
CreateConfig(nil, T["Show Distance of Target"], C.unitframes, "distance_indicator", "checkbox", nil, nil, nil, nil) CreateConfig(nil, T["Show Distance of Target"], C.unitframes, "distance_indicator", "checkbox", nil, nil, nil, nil)
CreateConfig(nil, T["Hide yd characters"], C.unitframes, "hide_distance_yd", "checkbox", nil, nil, nil, nil) CreateConfig(nil, T["Hide yd characters"], C.unitframes, "hide_distance_yd", "checkbox", nil, nil, nil, nil)
@@ -2338,10 +2354,6 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(U[c], T["Automatic Level Text Color"], C.unitframes[c], "levelcolor", "checkbox") CreateConfig(U[c], T["Automatic Level Text Color"], C.unitframes[c], "levelcolor", "checkbox")
CreateConfig(U[c], T["Automatic Class Text Color"], C.unitframes[c], "classcolor", "checkbox") CreateConfig(U[c], T["Automatic Class Text Color"], C.unitframes[c], "classcolor", "checkbox")
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(U[c], T["Buffs"], nil, nil, "header") 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 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 Size"], C.unitframes[c], "buffsize")
@@ -2371,7 +2383,6 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(U[c], T["Buff/Debuff Indicators"], nil, nil, "header") CreateConfig(U[c], T["Buff/Debuff Indicators"], nil, nil, "header")
CreateConfig(U[c], T["Enable Indicators"], C.unitframes[c], "buff_indicator", "checkbox") CreateConfig(U[c], T["Enable Indicators"], C.unitframes[c], "buff_indicator", "checkbox")
CreateConfig(U[c], T["Show Time Left"], C.unitframes[c], "indicator_time", "checkbox")
CreateConfig(U[c], T["Show Stacks"], C.unitframes[c], "indicator_stacks", "checkbox") CreateConfig(U[c], T["Show Stacks"], C.unitframes[c], "indicator_stacks", "checkbox")
CreateConfig(U[c], T["Indicator Size"], C.unitframes[c], "indicator_size") CreateConfig(U[c], T["Indicator Size"], C.unitframes[c], "indicator_size")
CreateConfig(U[c], T["Indicator Spacing"], C.unitframes[c], "indicator_spacing", "dropdown", pfUI.gui.dropdowns.spacing) CreateConfig(U[c], T["Indicator Spacing"], C.unitframes[c], "indicator_spacing", "dropdown", pfUI.gui.dropdowns.spacing)
@@ -2427,6 +2438,21 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(nil, T["Always Show Equipment Slot Flyouts"], C.character.inventory, "equipflyout", "checkbox") CreateConfig(nil, T["Always Show Equipment Slot Flyouts"], C.character.inventory, "equipflyout", "checkbox")
end) 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() CreateGUIEntry(T["Character"], T["Reputation"], function()
CreateConfig(nil, T["Show Reputation Remaining"], C.character.reputation, "repRequired", "checkbox") CreateConfig(nil, T["Show Reputation Remaining"], C.character.reputation, "repRequired", "checkbox")
end) end)
@@ -2443,7 +2469,6 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(nil, T["Hide Chat When Bags Are Opened"], C.appearance.bags, "hidechat", "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["Bagslots Per Row"], C.appearance.bags, "bagrowlength")
CreateConfig(nil, T["Bankslots Per Row"], C.appearance.bags, "bankrowlength") 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(nil, T["Item Slot Size"], C.appearance.bags, "icon_size")
CreateConfig(nil, T["Auto Sell Grey Items"], C.global, "autosell", "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 Repair Items"], C.global, "autorepair", "checkbox")
@@ -2494,7 +2519,7 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(U["buff"], T["Number Of Buffs Per Row"], C.buffs, "buffrowsize") CreateConfig(U["buff"], T["Number Of Buffs Per Row"], C.buffs, "buffrowsize")
CreateConfig(U["buff"], T["Number Of Debuffs Per Row"], C.buffs, "debuffrowsize") 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["Show Duration Inside Buff"], C.buffs, "textinside", "checkbox")
CreateConfig(U["buff"], T["Buff Font Size"], C.buffs, "fontsize") CreateConfig(U["buff"], T["Stack Count Font Size"], C.buffs, "fontsize")
end) end)
CreateGUIEntry(T["Buffs"], T["Totem Icons"], function() CreateGUIEntry(T["Buffs"], T["Totem Icons"], function()
@@ -2590,7 +2615,6 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(U["bars"], T["Item Count Text Color"], C.bars, "count_color", "color") CreateConfig(U["bars"], T["Item Count Text Color"], C.bars, "count_color", "color")
CreateConfig(U["bars"], T["Keybind Text Size"], C.bars, "bind_size") CreateConfig(U["bars"], T["Keybind Text Size"], C.bars, "bind_size")
CreateConfig(U["bars"], T["Keybind Text Color"], C.bars, "bind_color", "color") CreateConfig(U["bars"], T["Keybind Text Color"], C.bars, "bind_color", "color")
CreateConfig(nil, T["Cooldown Text Size"], C.bars, "cd_size")
CreateConfig(nil, T["Auto Paging"], nil, nil, "header") 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 Alt Key Press"], C.bars, "pagemasteralt", "checkbox")
@@ -2683,8 +2707,8 @@ pfUI:RegisterModule("gui", function ()
elseif is_horizontal then elseif is_horizontal then
if uneven ~= "Left" and uneven ~= "Right" then C.bars["bar"..id].uneven = "Left" end if uneven ~= "Left" and uneven ~= "Right" then C.bars["bar"..id].uneven = "Left" end
end end
if uneven_frame and uneven_frame.input and uneven_frame.input.UpdateMenu then if uneven_frame then
uneven_frame.input:UpdateMenu() uneven_frame.input:GenerateMenu()
end end
if U["bars"] then U["bars"]() end if U["bars"] then U["bars"]() end
end end
@@ -2864,6 +2888,8 @@ pfUI:RegisterModule("gui", function ()
end) end)
CreateGUIEntry(T["Chat"], nil, function() CreateGUIEntry(T["Chat"], nil, function()
-- a nop updater skips the reload prompt; the nop settings below
-- are read by AddMessage on every chat line
CreateConfig(nil, T["Enable \"Loot & Spam\" Chat Window"], C.chat.right, "enable", "checkbox") CreateConfig(nil, T["Enable \"Loot & Spam\" Chat Window"], C.chat.right, "enable", "checkbox")
CreateConfig(nil, T["Inputbox Width"], C.chat.text, "input_width") CreateConfig(nil, T["Inputbox Width"], C.chat.text, "input_width")
CreateConfig(nil, T["Inputbox Height"], C.chat.text, "input_height") CreateConfig(nil, T["Inputbox Height"], C.chat.text, "input_height")
@@ -2872,18 +2898,20 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(nil, T["Show Items On Mouseover"], C.chat.text, "mouseover", "checkbox") CreateConfig(nil, T["Show Items On Mouseover"], C.chat.text, "mouseover", "checkbox")
CreateConfig(nil, T["Chat Default Brackets"], C.chat.text, "bracket", nil, nil, nil, nil, "STRING") CreateConfig(nil, T["Chat Default Brackets"], C.chat.text, "bracket", nil, nil, nil, nil, "STRING")
CreateConfig(nil, T["Enable Timestamps"], C.chat.text, "time", "checkbox") CreateConfig(nil, T["Enable Timestamps"], C.chat.text, "time", "checkbox")
CreateConfig(nil, T["Timestamp Format"], C.chat.text, "timeformat", nil, nil, nil, nil, "STRING") CreateConfig(nop, 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 Brackets"], C.chat.text, "timebracket", nil, nil, nil, nil, "STRING")
CreateConfig(nil, T["Timestamp Color"], C.chat.text, "timecolor", "color") CreateConfig(nil, T["Timestamp Color"], C.chat.text, "timecolor", "color")
CreateConfig(nil, T["Hide Channel Names"], C.chat.text, "channelnumonly", "checkbox") -- read each time chat copy opens, so no reload
CreateConfig(nop, T["Show Timestamps In Chat Copy"], C.chat.text, "copytime", "checkbox")
CreateConfig(nop, T["Hide Channel Names"], C.chat.text, "channelnumonly", "checkbox")
CreateConfig(nil, T["Generate Playerlinks"], C.chat.text, "playerlinks", "checkbox") CreateConfig(nil, T["Generate Playerlinks"], C.chat.text, "playerlinks", "checkbox")
CreateConfig(nil, T["Enable URL Detection"], C.chat.text, "detecturl", "checkbox") CreateConfig(nop, T["Enable URL Detection"], C.chat.text, "detecturl", "checkbox")
CreateConfig(nil, T["Enable Class Colors"], C.chat.text, "classcolor", "checkbox") CreateConfig(nop, T["Enable Class Colors"], C.chat.text, "classcolor", "checkbox")
local _, playerRace = UnitRace("player") local _, playerRace = UnitRace("player")
CreateConfig(nil, T["Show Faction Icons"] .. " " .. GetFactionIcon(playerRace), C.chat.text, "factionicons", "checkbox") CreateConfig(nop, 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(nop, 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(nop, T["Enable Player Levels"], C.chat.text, "playerlevel", "checkbox")
CreateConfig(nil, T["Colorize Unknown Classes"], C.chat.text, "tintunknown", "checkbox") CreateConfig(nop, T["Colorize Unknown Classes"], C.chat.text, "tintunknown", "checkbox")
CreateConfig(nil, T["Unknown Class Color"], C.chat.text, "unknowncolor", "color") CreateConfig(nil, T["Unknown Class Color"], C.chat.text, "unknowncolor", "color")
CreateConfig(nil, T["Left Chat Width"], C.chat.left, "width") CreateConfig(nil, T["Left Chat Width"], C.chat.left, "width")
CreateConfig(nil, T["Left Chat Height"], C.chat.left, "height") CreateConfig(nil, T["Left Chat Height"], C.chat.left, "height")
@@ -2903,7 +2931,7 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(nil, T["Maximum Number Of Chat Lines"], C.chat.global, "maxlines") CreateConfig(nil, T["Maximum Number Of Chat Lines"], C.chat.global, "maxlines")
CreateConfig(nil, T["Enable Chat Fade"], C.chat.global, "fadeout", "checkbox") CreateConfig(nil, T["Enable Chat Fade"], C.chat.global, "fadeout", "checkbox")
CreateConfig(nil, T["Seconds Before Chat Fade"], C.chat.global, "fadetime") CreateConfig(nil, T["Seconds Before Chat Fade"], C.chat.global, "fadetime")
CreateConfig(nil, T["Mousewheel Scroll Speed"], C.chat.global, "scrollspeed") CreateConfig(nop, T["Mousewheel Scroll Speed"], C.chat.global, "scrollspeed")
CreateConfig(nil, T["Enable Chat Bubbles"], "CVAR", "chatBubbles", "checkbox") CreateConfig(nil, T["Enable Chat Bubbles"], "CVAR", "chatBubbles", "checkbox")
CreateConfig(nil, T["Enable Party Chat Bubbles"], "CVAR", "chatBubblesParty", "checkbox") CreateConfig(nil, T["Enable Party Chat Bubbles"], "CVAR", "chatBubblesParty", "checkbox")
CreateConfig(nil, T["Enable Chat Bubble Borders"], C.chat.bubbles, "borders", "checkbox") CreateConfig(nil, T["Enable Chat Bubble Borders"], C.chat.bubbles, "borders", "checkbox")
@@ -2957,9 +2985,6 @@ pfUI:RegisterModule("gui", function ()
CreateConfig(U["nameplates"], T["Debuff Icon Offset"], C.nameplates, "debuffoffset") CreateConfig(U["nameplates"], T["Debuff Icon Offset"], C.nameplates, "debuffoffset")
CreateConfig(U["nameplates"], T["Debuff Icon Size"], C.nameplates, "debuffsize") CreateConfig(U["nameplates"], T["Debuff Icon Size"], C.nameplates, "debuffsize")
CreateConfig(U["nameplates"], T["Show Debuff Stacks"], C.nameplates.debuffs, "showstacks", "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(U["nameplates"], T["Filter Mode"], C.nameplates.debuffs, "filter", "dropdown", pfUI.gui.dropdowns.buffbarfilter) 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") CreateConfig(U["nameplates"], T["Blacklist"], C.nameplates.debuffs, "blacklist", "list")
+1 -1
View File
@@ -51,7 +51,7 @@ pfUI:RegisterModule("hoverbind", function ()
pfUI.hoverbind.edit:SetAllPoints(UIParent) pfUI.hoverbind.edit:SetAllPoints(UIParent)
pfUI.hoverbind.edit.tex = pfUI.hoverbind.edit:CreateTexture("pfKeyBindShade", "BACKGROUND") pfUI.hoverbind.edit.tex = pfUI.hoverbind.edit:CreateTexture("pfKeyBindShade", "BACKGROUND")
pfUI.hoverbind.edit.tex:SetAllPoints(pfUI.hoverbind.edit) pfUI.hoverbind.edit.tex:SetAllPoints(pfUI.hoverbind.edit)
pfUI.hoverbind.edit.tex:SetTexture(0,0,0,.5) pfUI.hoverbind.edit.tex:SetColorTexture(0,0,0,.5)
pfUI.hoverbind.edit:SetScript("OnClick", function() pfUI.hoverbind.edit:SetScript("OnClick", function()
pfUI.hoverbind:Hide() pfUI.hoverbind:Hide()
end) end)
+49 -35
View File
@@ -1,51 +1,65 @@
pfUI:RegisterModule("infight", function () pfUI:RegisterModule("infight", function ()
local function OnUpdate() pfUI.infight = CreateFrame("Frame", "pfUICombatScreen", WorldFrame)
if not this.infight and not this.aggro and not this.health then return end pfUI.infight:SetAllPoints(WorldFrame)
if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + .1 end pfUI.infight:EnableMouse(false)
pfUI.infight:Hide()
if not this.fadeValue then this.fadeValue = 1 end -- Shift the glow between red and a paler orange for good. The group only
if this.fadeValue >= 0.3 then -- advances while the glow is shown, so a hidden glow costs nothing.
this.fadeModifier = -0.1 local pulse = pfUI.infight:CreateAnimationGroup()
end pulse:SetLooping("BOUNCE")
if this.fadeValue <= 0 then local shift = pulse:CreateAnimation()
this.fadeModifier = 0.1 shift:SetDuration(.3)
end shift:SetSmoothing("IN_OUT")
this.fadeValue = this.fadeValue + this.fadeModifier shift:SetScript("OnUpdate", function(self)
local fade = self:GetSmoothProgress() * .3
pfUI.infight:SetBackdropBorderColor(1, .2 + fade, fade, 1 - fade)
end)
pulse:Play()
local visible = nil -- Combat, health, death and aggro all come from events.
if this.infight and UnitAffectingCombat("player") then visible = true end local combat, health, dead, aggro
if this.aggro and UnitHasAggro("player") > 0 then visible = true end
if this.health and UnitHealth("player")/UnitHealthMax("player")*100 <= 25 then visible = true end
if UnitIsDeadOrGhost("player") then visible = nil end
if visible then local function Refresh()
this.screen:Show() pfUI.infight:SetShown((combat or health or aggro) and not dead)
this.screen:SetBackdropBorderColor(1,0.2+this.fadeValue, this.fadeValue, 1-this.fadeValue)
else
this.screen:Hide()
end
end end
pfUI.infight = CreateFrame("Frame", "pfUICombat", UIParent) local function UpdateAggro()
pfUI.infight:SetScript("OnUpdate", OnUpdate) aggro = C.appearance.infight.aggro == "1" and UnitHasAggro("player") > 0
Refresh()
end
pfUI.infight.screen = CreateFrame("Frame", "pfUICombatScreen", WorldFrame) -- a combat drop is also when an attacker that left view is let go
pfUI.infight.screen:SetAllPoints(WorldFrame) local function UpdatePlayer()
pfUI.infight.screen:EnableMouse(false) combat = C.appearance.infight.screen == "1" and UnitAffectingCombat("player")
pfUI.infight.screen:Hide() health = C.appearance.infight.health == "1" and UnitHealth("player") / UnitHealthMax("player") <= .25
dead = UnitIsDeadOrGhost("player")
UpdateAggro()
end
pfUI.infight:RegisterEvent("PLAYER_ENTERING_WORLD")
pfUI.infight:RegisterEvent("PLAYER_REGEN_DISABLED")
pfUI.infight:RegisterEvent("PLAYER_REGEN_ENABLED")
pfUI.infight:RegisterEvent("PLAYER_DEAD")
pfUI.infight:RegisterEvent("PLAYER_ALIVE")
pfUI.infight:RegisterEvent("PLAYER_UNGHOST")
pfUI.infight:RegisterUnitEvent("UNIT_HEALTH", "player")
pfUI.infight:RegisterUnitEvent("UNIT_MAXHEALTH", "player")
pfUI.infight:SetScript("OnEvent", UpdatePlayer)
pfUI.events:RegisterCallback("aggro:changed", function(_, old, new)
local player = UnitGUID("player")
if old == player or new == player then UpdateAggro() end
end, "infight")
pfUI.infight.UpdateConfig = function(self) pfUI.infight.UpdateConfig = function(self)
pfUI.infight.infight = C.appearance.infight.screen == "1" and true or nil pfUI.infight:SetBackdrop({
pfUI.infight.aggro = C.appearance.infight.aggro == "1" and true or nil
pfUI.infight.health = C.appearance.infight.health == "1" and true or nil
pfUI.infight.screen:SetBackdrop({
edgeFile = pfUI.media["img:glow"], edgeSize = tonumber(C.appearance.infight.intensity), edgeFile = pfUI.media["img:glow"], edgeSize = tonumber(C.appearance.infight.intensity),
insets = {left = 0, right = 0, top = 0, bottom = 0}, insets = {left = 0, right = 0, top = 0, bottom = 0},
}) })
pfUI.infight.screen:Hide() UpdatePlayer()
end end
pfUI.infight.UpdateConfig() pfUI.infight:UpdateConfig()
end) end)
+6 -11
View File
@@ -46,22 +46,17 @@ pfUI:RegisterModule("innervatecall", function ()
end) end)
end end
local frame = CreateFrame("Frame") pfUI.events:RegisterFrameEventAndCallback("SPELL_UPDATE_COOLDOWN", function()
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
frame:RegisterEvent("SPELL_UPDATE_COOLDOWN")
frame:SetScript("OnEvent", function()
if event == "SPELL_UPDATE_COOLDOWN" then
if pending then ScheduleReady() end if pending then ScheduleReady() end
return end)
end
pfUI.events:RegisterFrameEventAndCallback("COMBAT_LOG_EVENT_UNFILTERED", function()
-- Innervate is instant, so it logs SPELL_CAST_SUCCESS with its target -- Innervate is instant, so it logs SPELL_CAST_SUCCESS with its target
-- arg2=subevent, arg4=sourceGUID, arg9=destName, arg12=spellId local _, subevent, _, sourceGUID, _, _, _, _, destName, _, _, spellId = CombatLogGetCurrentEventInfo()
if arg2 ~= "SPELL_CAST_SUCCESS" or arg12 ~= INNERVATE_SPELLID then return end if subevent ~= "SPELL_CAST_SUCCESS" or spellId ~= INNERVATE_SPELLID then return end
-- Only announce our own casts -- Only announce our own casts
if not IsPlayerGuid(arg4) then return end if not IsPlayerGuid(sourceGUID) then return end
local destName = arg9
-- Determine channel -- Determine channel
local channel = GetAnnounceChannel() local channel = GetAnnounceChannel()
+94 -199
View File
@@ -31,8 +31,9 @@ pfUI:RegisterModule("loot", function ()
pfUI.loot.randoms = {} pfUI.loot.randoms = {}
pfUI.loot.rollers = {} pfUI.loot.rollers = {}
pfUI.loot.rollers_sorted = {} pfUI.loot.rollers_sorted = {}
pfUI.loot.info = {}
local info = pfUI.loot.info -- the master loot menu while it is shown
local masterLootMenu, OpenMasterLootMenu, RefreshMasterLootMenu
function pfUI.loot.RaidRoll(candidates) function pfUI.loot.RaidRoll(candidates)
if type(candidates) ~= "table" then return end if type(candidates) ~= "table" then return end
@@ -48,7 +49,7 @@ pfUI:RegisterModule("loot", function ()
names = (k==1) and (i..":"..pfUI.loot.index_to_name[candidates[i]]) or (names..", "..i..":"..pfUI.loot.index_to_name[candidates[i]]) names = (k==1) and (i..":"..pfUI.loot.index_to_name[candidates[i]]) or (names..", "..i..":"..pfUI.loot.index_to_name[candidates[i]])
-- fit the maximum names in a single 255 char message (15) -- fit the maximum names in a single 255 char message (15)
if i == to or k == 15 then if i == to or k == 15 then
QueueFunction(SendChatMessageWide,names) SendChatMessageWide(names)
names = "" names = ""
end end
k = k<15 and k+1 or 1 k = k<15 and k+1 or 1
@@ -57,10 +58,11 @@ pfUI:RegisterModule("loot", function ()
end end
pfUI.loot:RegisterEvent("CHAT_MSG_SYSTEM") pfUI.loot:RegisterEvent("CHAT_MSG_SYSTEM")
pfUI.loot.randomRolling = true pfUI.loot.randomRolling = true
QueueFunction(RandomRoll,"1",tostring(to)) RandomRoll("1",tostring(to))
end end
end end
-- the roll actions keep the menu open, so it can show the rolls coming in
function pfUI.loot.RequestRolls() function pfUI.loot.RequestRolls()
local slot = pfUI.loot.selectedSlot or 0 local slot = pfUI.loot.selectedSlot or 0
local rollers = wipe(pfUI.loot.rollers) local rollers = wipe(pfUI.loot.rollers)
@@ -68,58 +70,16 @@ pfUI:RegisterModule("loot", function ()
SendChatMessageWide(T["Roll for"].. " " .. GetLootSlotLink(slot)) SendChatMessageWide(T["Roll for"].. " " .. GetLootSlotLink(slot))
pfUI.loot:RegisterEvent("CHAT_MSG_SYSTEM") pfUI.loot:RegisterEvent("CHAT_MSG_SYSTEM")
pfUI.loot.monitorRolling = true pfUI.loot.monitorRolling = true
UIDropDownMenu_Refresh(GroupLootDropDown) RefreshMasterLootMenu()
end return MenuResponse.Open
function pfUI.loot:BuildSpecialRecipientsMenu(level)
local slot = pfUI.loot.selectedSlot or 0
if level == 1 then
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, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
info.textHeight = 12
info.hasArrow = 1
info.notCheckable = 1
info.value = "PFRECIPIENTS"
info.func = nil
UIDropDownMenu_AddButton(info)
end
elseif level == 2 then
if UIDROPDOWNMENU_MENU_VALUE == "PFRECIPIENTS" then
if (pfUI.loot.my_index) then
info = wipe(info)
info.text = T["Self"]
info.textHeight = 12
info.value = pfUI.loot.my_index
info.func = GroupLootDropDown_GiveLoot
UIDropDownMenu_AddButton(info,UIDROPDOWNMENU_MENU_LEVEL)
end
if (pfUI.loot.disenchanter_index) then
info = wipe(info)
info.text = T["Disenchanter"]
info.textHeight = 12
info.value = pfUI.loot.disenchanter_index
info.func = GroupLootDropDown_GiveLoot
UIDropDownMenu_AddButton(info,UIDROPDOWNMENU_MENU_LEVEL)
end
if (pfUI.loot.banker_index) then
info = wipe(info)
info.text = T["Banker"]
info.textHeight = 12
info.value = pfUI.loot.banker_index
info.func = GroupLootDropDown_GiveLoot
UIDropDownMenu_AddButton(info,UIDROPDOWNMENU_MENU_LEVEL)
end
end
end
end end
function pfUI.loot.ClearRolls() function pfUI.loot.ClearRolls()
wipe(pfUI.loot.rollers) wipe(pfUI.loot.rollers)
wipe(pfUI.loot.rollers_sorted) wipe(pfUI.loot.rollers_sorted)
pfUI.loot.monitorRolling = nil pfUI.loot.monitorRolling = nil
UIDropDownMenu_Refresh(GroupLootDropDown) RefreshMasterLootMenu()
return MenuResponse.Open
end end
function pfUI.loot.CallTieRoll(rollers) function pfUI.loot.CallTieRoll(rollers)
@@ -148,69 +108,12 @@ pfUI:RegisterModule("loot", function ()
pfUI.loot:RegisterEvent("CHAT_MSG_SYSTEM") pfUI.loot:RegisterEvent("CHAT_MSG_SYSTEM")
pfUI.loot.monitorRolling = true pfUI.loot.monitorRolling = true
end end
UIDropDownMenu_Refresh(GroupLootDropDown) RefreshMasterLootMenu()
return MenuResponse.Open
end end
function pfUI.loot:BuildSpecialRollsMenu(level) -- fills the candidate tables from the master loot candidates of the raid
local slot = pfUI.loot.selectedSlot or 0 local function UpdateRaidCandidates()
if level == 1 then
info = wipe(info)
info.text = T["Random"]
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
info.value = "PFRANDOM"
info.textHeight = 12
info.notCheckable = 1
info.arg1 = pfUI.loot.randoms
info.func = pfUI.loot.RaidRoll
UIDropDownMenu_AddButton(info)
info = wipe(info)
info.text = T["Request Rolls"]
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
info.value = "PFROLLS"
info.textHeight = 12
info.hasArrow = 1
info.notCheckable = 1
info.func = pfUI.loot.RequestRolls
UIDropDownMenu_AddButton(info)
elseif level == 2 then
if UIDROPDOWNMENU_MENU_VALUE == "PFROLLS" then
info = wipe(info)
info.text = T["Clear Rolls"]
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
info.value = "PFCLEARROLLS"
info.notCheckable = 1
info.func = pfUI.loot.ClearRolls
UIDropDownMenu_AddButton(info,UIDROPDOWNMENU_MENU_LEVEL)
info = wipe(info)
info.text = T["Reroll Ties"]
info.textR, info.textG, info.textB = NORMAL_FONT_COLOR:GetRGB()
info.value = "PFTIEROLL"
info.notCheckable = 1
info.arg1 = pfUI.loot.rollers_sorted
info.func = pfUI.loot.CallTieRoll
UIDropDownMenu_AddButton(info,UIDROPDOWNMENU_MENU_LEVEL)
for _,roller in ipairs(pfUI.loot.rollers_sorted) do
info = wipe(info)
info.text = string.format("%02d - %s",roller.roll,roller.who)
info.textHeight = 12
if roller.value == "disabled" then
info.disabled = 1
info.value = "disabled"
else
info.value = roller.value
info.func = GroupLootDropDown_GiveLoot
end
info.notCheckable = 1
UIDropDownMenu_AddButton(info,UIDROPDOWNMENU_MENU_LEVEL)
end
end
end
end
function pfUI.loot:BuildRaidMenu(level)
local slot = pfUI.loot.selectedSlot or 0
local index_to_name = wipe(pfUI.loot.index_to_name) local index_to_name = wipe(pfUI.loot.index_to_name)
local name_to_index = wipe(pfUI.loot.name_to_index) local name_to_index = wipe(pfUI.loot.name_to_index)
local classes_in_raid = wipe(pfUI.loot.classes_in_raid) -- [global class]=localized class for display local classes_in_raid = wipe(pfUI.loot.classes_in_raid) -- [global class]=localized class for display
@@ -242,87 +145,95 @@ pfUI:RegisterModule("loot", function ()
table.insert(players_in_class[unit.class],candidate) table.insert(players_in_class[unit.class],candidate)
end end
end end
if level == 1 then -- classes
info = wipe(info)
info.text = GIVE_LOOT
info.textHeight = 12
info.notCheckable = 1
info.isTitle = 1
UIDropDownMenu_AddButton(info)
pfUI.loot:BuildSpecialRollsMenu(UIDROPDOWNMENU_MENU_LEVEL)
pfUI.loot:BuildSpecialRecipientsMenu(UIDROPDOWNMENU_MENU_LEVEL)
for order, class in ipairs(CLASS_SORT_ORDER) do
local lclass = classes_in_raid[class]
if (lclass) then
info = wipe(info)
info.text = lclass
info.textR, info.textG, info.textB = .7,.7,.7
if class and PFUI_CLASS_COLORS[class] then
info.textR, info.textG, info.textB = PFUI_CLASS_COLORS[class]:GetRGB()
end
info.textHeight = 12
info.hasArrow = 1
info.notCheckable = 1
info.value = class
info.func = nil
UIDropDownMenu_AddButton(info)
end
end
elseif level == 2 then -- players
pfUI.loot:BuildSpecialRollsMenu(UIDROPDOWNMENU_MENU_LEVEL)
pfUI.loot:BuildSpecialRecipientsMenu(UIDROPDOWNMENU_MENU_LEVEL)
local players = players_in_class[UIDROPDOWNMENU_MENU_VALUE]
if (players) and next(players) then
table.sort(players)
for _, candidate in ipairs(players) do
info = wipe(info)
info.text = candidate
info.textR, info.textG, info.textB = .7,.7,.7
if UIDROPDOWNMENU_MENU_VALUE and PFUI_CLASS_COLORS[UIDROPDOWNMENU_MENU_VALUE] then
info.textR, info.textG, info.textB = PFUI_CLASS_COLORS[UIDROPDOWNMENU_MENU_VALUE]:GetRGB()
end
info.textHeight = 12
info.value = name_to_index[candidate]
info.func = GroupLootDropDown_GiveLoot
UIDropDownMenu_AddButton(info,UIDROPDOWNMENU_MENU_LEVEL)
end end
-- gives the selected slot to a candidate, asking first for epic items
local function GiveLoot(index)
if ( pfUI.loot.selectedQuality >= MASTER_LOOT_THREHOLD ) then
local dialog = StaticPopup_Show("CONFIRM_LOOT_DISTRIBUTION", ITEM_QUALITY_COLORS[pfUI.loot.selectedQuality].hex..pfUI.loot.selectedItemName..FONT_COLOR_CODE_CLOSE, GetMasterLootCandidate(index))
if ( dialog ) then
dialog.data = index
end end
else
GiveMasterLoot(pfUI.loot.selectedSlot, index)
end end
end end
function pfUI.loot:BuildPartyMenu(level) -- A party gets its candidates. A raid gets the advanced loot tools, then
local slot = pfUI.loot.selectedSlot or 0 -- a submenu of candidates per class.
if level == 1 then local function GenerateMasterLootMenu(owner, rootDescription)
for i=1, MAX_PARTY_MEMBERS+1, 1 do if not IsInRaid() then
for i=1, MAX_PARTY_MEMBERS+1 do
local candidate = GetMasterLootCandidate(i) local candidate = GetMasterLootCandidate(i)
if (candidate) then if (candidate) then
info = wipe(info)
local unit = GroupInfoByName(candidate,"party") local unit = GroupInfoByName(candidate,"party")
info.text = candidate rootDescription:CreateButton(PFUI_CLASS_COLORS[unit.class]:WrapTextInColorCode(candidate), GiveLoot, i)
info.textR, info.textG, info.textB = .7,.7,.7
if unit.class and PFUI_CLASS_COLORS[unit.class] then
info.textR, info.textG, info.textB = PFUI_CLASS_COLORS[unit.class]:GetRGB()
end end
info.textHeight = 12 end
info.value = i return
info.func = GroupLootDropDown_GiveLoot end
UIDropDownMenu_AddButton(info)
UpdateRaidCandidates()
rootDescription:CreateTitle(GIVE_LOOT)
if C.loot.advancedloot == "1" then
rootDescription:CreateButton(NORMAL_FONT_COLOR:WrapTextInColorCode(T["Random"]), pfUI.loot.RaidRoll, pfUI.loot.randoms)
rootDescription:CreateButton(NORMAL_FONT_COLOR:WrapTextInColorCode(T["Request Rolls"]), pfUI.loot.RequestRolls)
-- the rolls so far, highest first; a roller who can't get the item is greyed out
if pfUI.loot.monitorRolling then
rootDescription:CreateButton(NORMAL_FONT_COLOR:WrapTextInColorCode(T["Reroll Ties"]), pfUI.loot.CallTieRoll, pfUI.loot.rollers_sorted)
rootDescription:CreateButton(NORMAL_FONT_COLOR:WrapTextInColorCode(T["Clear Rolls"]), pfUI.loot.ClearRolls)
for _, roller in ipairs(pfUI.loot.rollers_sorted) do
local button = rootDescription:CreateButton(string.format("%02d - %s", roller.roll, roller.who), GiveLoot, roller.value)
button:SetEnabled(roller.value ~= "disabled")
end
end
if pfUI.loot.my_index or pfUI.loot.disenchanter_index or pfUI.loot.banker_index then
local recipients = rootDescription:CreateButton(NORMAL_FONT_COLOR:WrapTextInColorCode(T["Special Recipient"]))
if pfUI.loot.my_index then
recipients:CreateButton(T["Self"], GiveLoot, pfUI.loot.my_index)
end
if pfUI.loot.disenchanter_index then
recipients:CreateButton(T["Disenchanter"], GiveLoot, pfUI.loot.disenchanter_index)
end
if pfUI.loot.banker_index then
recipients:CreateButton(T["Banker"], GiveLoot, pfUI.loot.banker_index)
end
end
end
for _, class in ipairs(CLASS_SORT_ORDER) do
local players = pfUI.loot.players_in_class[class]
if (players) then
local color = PFUI_CLASS_COLORS[class]
local classButton = rootDescription:CreateButton(color:WrapTextInColorCode(pfUI.loot.classes_in_raid[class]))
table.sort(players)
for _, candidate in ipairs(players) do
classButton:CreateButton(color:WrapTextInColorCode(candidate), GiveLoot, pfUI.loot.name_to_index[candidate])
end end
end end
end end
end end
function pfUI.loot:InitGroupDropDown() -- Opens the menu under the clicked loot button, which owns it. The slots
local inRaid = IsInRaid() -- table is by row, not by loot slot, so after a looted item it no longer
if UIDROPDOWNMENU_MENU_LEVEL == 1 then -- lines up with selectedSlot. Opening it again closes the one shown before.
if ( inRaid ) then OpenMasterLootMenu = function()
pfUI.loot:BuildRaidMenu(UIDROPDOWNMENU_MENU_LEVEL) local slot = pfUI.loot.selectedLootButton
else local description = MenuUtil.CreateRootMenuDescription(pfUIMenuStyleMixin)
pfUI.loot:BuildPartyMenu(UIDROPDOWNMENU_MENU_LEVEL) Menu.PopulateDescription(GenerateMasterLootMenu, slot, description)
masterLootMenu = Menu.GetManager():OpenMenu(slot, description, AnchorUtil.CreateAnchor("TOPLEFT", slot, "BOTTOMLEFT", 0, 0))
if masterLootMenu then
masterLootMenu:SetClosedCallback(function() masterLootMenu = nil end)
end end
elseif UIDROPDOWNMENU_MENU_LEVEL == 2 and (inRaid) then
pfUI.loot:BuildRaidMenu(UIDROPDOWNMENU_MENU_LEVEL)
end end
-- a change to the candidates or the rolls rebuilds the menu while it is shown
RefreshMasterLootMenu = function()
if masterLootMenu then OpenMasterLootMenu() end
end end
function pfUI.loot:AddMasterLootMenus() function pfUI.loot:AddMasterLootMenus()
@@ -376,7 +287,6 @@ pfUI:RegisterModule("loot", function ()
end end
if C.loot.advancedloot == "1" then if C.loot.advancedloot == "1" then
UIDropDownMenu_Initialize(GroupLootDropDown, pfUI.loot.InitGroupDropDown, "MENU")
for button, data in pairs(pfUI.loot.unitbuttons) do for button, data in pairs(pfUI.loot.unitbuttons) do
UnitPopupButtons[button] = { text = data[1], dist = 0} UnitPopupButtons[button] = { text = data[1], dist = 0}
end end
@@ -413,7 +323,6 @@ pfUI:RegisterModule("loot", function ()
end) end)
else else
pfUI.loot:RemoveMasterlootMenus() pfUI.loot:RemoveMasterlootMenus()
UIDropDownMenu_Initialize(GroupLootDropDown, GroupLootDropDown_Initialize, "MENU")
end end
pfUI.loot.slots = {} pfUI.loot.slots = {}
@@ -506,8 +415,7 @@ pfUI:RegisterModule("loot", function ()
local function CloseOnClick() local function CloseOnClick()
local lootbind = StaticPopup_FindVisible("LOOT_BIND") local lootbind = StaticPopup_FindVisible("LOOT_BIND")
local masterloot = UIDROPDOWNMENU_INIT_MENU and (UIDROPDOWNMENU_INIT_MENU == "GroupLootDropDown") if lootbind or masterLootMenu then else CloseLoot() end
if lootbind or masterloot then else CloseLoot() end
end end
function pfUI.loot:CreateSlot(id) function pfUI.loot:CreateSlot(id)
@@ -531,7 +439,7 @@ pfUI:RegisterModule("loot", function ()
StaticPopup_Hide("CONFIRM_LOOT_DISTRIBUTION") StaticPopup_Hide("CONFIRM_LOOT_DISTRIBUTION")
local numItems = GetNumLootItems() local numItems = GetNumLootItems()
pfUI.loot.selectedLootButton = this:GetName() pfUI.loot.selectedLootButton = this
pfUI.loot.selectedSlot = this:GetID() pfUI.loot.selectedSlot = this:GetID()
pfUI.loot.selectedQuality = this.quality pfUI.loot.selectedQuality = this.quality
pfUI.loot.selectedItemName = this.name:GetText() pfUI.loot.selectedItemName = this.name:GetText()
@@ -542,7 +450,7 @@ pfUI:RegisterModule("loot", function ()
LootSlot(this:GetID()) LootSlot(this:GetID())
-- workaround for bugged disenchant / container loot on some servers -- workaround for bugged disenchant / container loot on some servers
if numItems == 1 then if numItems == 1 then
QueueFunction(CloseOnClick) RunNextFrame(CloseOnClick)
end end
end) end)
@@ -622,11 +530,11 @@ pfUI:RegisterModule("loot", function ()
pfUI.loot:SetScript("OnEvent", function() pfUI.loot:SetScript("OnEvent", function()
if event == "OPEN_MASTER_LOOT_LIST" then if event == "OPEN_MASTER_LOOT_LIST" then
ToggleDropDownMenu(1, nil, GroupLootDropDown, pfUI.loot.slots[pfUI.loot.selectedSlot], 0, 0) OpenMasterLootMenu()
end end
if event == "UPDATE_MASTER_LOOT_LIST" then if event == "UPDATE_MASTER_LOOT_LIST" then
UIDropDownMenu_Refresh(GroupLootDropDown) RefreshMasterLootMenu()
end end
if event == "LOOT_OPENED" then if event == "LOOT_OPENED" then
@@ -657,7 +565,6 @@ pfUI:RegisterModule("loot", function ()
if event == "LOOT_CLOSED" then if event == "LOOT_CLOSED" then
StaticPopup_Hide("LOOT_BIND") StaticPopup_Hide("LOOT_BIND")
HideUIPanel(this) HideUIPanel(this)
if DropDownList1:IsShown() then CloseDropDownMenus() end
for _, v in pairs(this.slots) do for _, v in pairs(this.slots) do
v:Hide() v:Hide()
end end
@@ -689,7 +596,7 @@ pfUI:RegisterModule("loot", function ()
table.sort(pfUI.loot.rollers_sorted,function(a,b) table.sort(pfUI.loot.rollers_sorted,function(a,b)
return a.roll > b.roll return a.roll > b.roll
end) end)
QueueFunction(UIDropDownMenu_Refresh,GroupLootDropDown) RefreshMasterLootMenu()
end end
end end
@@ -697,7 +604,7 @@ pfUI:RegisterModule("loot", function ()
if C.loot.autopickup == "1" and GetNumPartyMembers() == 0 and GetNumRaidMembers() == 0 then if C.loot.autopickup == "1" and GetNumPartyMembers() == 0 and GetNumRaidMembers() == 0 then
if event == "LOOT_BIND_CONFIRM" then if event == "LOOT_BIND_CONFIRM" then
local slot = arg1 local slot = arg1
QueueFunction(function() RunNextFrame(function()
LootSlot(slot) LootSlot(slot)
StaticPopup_Hide("LOOT_BIND") StaticPopup_Hide("LOOT_BIND")
end) end)
@@ -712,18 +619,6 @@ pfUI:RegisterModule("loot", function ()
LootFrame:UnregisterAllEvents() LootFrame:UnregisterAllEvents()
table.insert(UISpecialFrames, "pfLootFrame") table.insert(UISpecialFrames, "pfLootFrame")
function _G.GroupLootDropDown_GiveLoot()
if ( pfUI.loot.selectedQuality >= MASTER_LOOT_THREHOLD ) then
local dialog = StaticPopup_Show("CONFIRM_LOOT_DISTRIBUTION", ITEM_QUALITY_COLORS[pfUI.loot.selectedQuality].hex..pfUI.loot.selectedItemName..FONT_COLOR_CODE_CLOSE, this:GetText())
if ( dialog ) then
dialog.data = this.value
end
else
GiveMasterLoot(pfUI.loot.selectedSlot, this.value)
end
CloseDropDownMenus()
end
StaticPopupDialogs["CONFIRM_LOOT_DISTRIBUTION"].OnAccept = function(data) StaticPopupDialogs["CONFIRM_LOOT_DISTRIBUTION"].OnAccept = function(data)
GiveMasterLoot(pfUI.loot.selectedSlot, data) GiveMasterLoot(pfUI.loot.selectedSlot, data)
end end
+74 -109
View File
@@ -1,9 +1,9 @@
pfUI:RegisterModule("loothistory", function () pfUI:RegisterModule("loothistory", function ()
local rawborder, border = GetBorderSize() local rawborder, border = GetBorderSize()
-- Layout -- Layout (rows are 2px apart)
local ITEM_H, PLAYER_H = 24, 18 local ITEM_H, PLAYER_H = 24, 16
local ITEM_W, PLAYER_W = 350, 330 local PLAYER_INDENT = 18
-- rollType constants returned by C_LootHistory.GetPlayerInfo (0/1/2; vanilla -- rollType constants returned by C_LootHistory.GetPlayerInfo (0/1/2; vanilla
-- has no disenchant roll). -- has no disenchant roll).
@@ -86,30 +86,24 @@ pfUI:RegisterModule("loothistory", function ()
pfUI.loothistory.clear:SetText(T["Clear"]) pfUI.loothistory.clear:SetText(T["Clear"])
pfUI.loothistory.clear:SetScript("OnClick", function() C_LootHistory.Clear() end) pfUI.loothistory.clear:SetScript("OnClick", function() C_LootHistory.Clear() end)
-- scroll frame -- ==========================================================================
pfUI.loothistory.scroll = CreateScrollFrame("pfLootHistoryScroll", pfUI.loothistory) -- List: a row per item and, under an expanded item, a row per player
pfUI.loothistory.scroll:SetSize(360, 440) -- ==========================================================================
pfUI.loothistory.scroll:SetPoint("BOTTOM", 0, 10) local list = CreateFrame("Frame", "pfLootHistoryList", pfUI.loothistory, "pfUIScrollBoxListTemplate")
list:SetSize(370, 450)
pfUI.loothistory.scroll.backdrop = CreateFrame("Frame", nil, pfUI.loothistory.scroll) list:SetPoint("BOTTOM", 0, 5)
pfUI.loothistory.scroll.backdrop:SetFrameLevel(1) CreateBackdrop(list, nil, true)
pfUI.loothistory.scroll.backdrop:SetPoint("TOPLEFT", pfUI.loothistory.scroll, "TOPLEFT", -5, 5)
pfUI.loothistory.scroll.backdrop:SetPoint("BOTTOMRIGHT", pfUI.loothistory.scroll, "BOTTOMRIGHT", 5, -5)
CreateBackdrop(pfUI.loothistory.scroll.backdrop, nil, true)
local list = CreateScrollChild("pfLootHistoryList", pfUI.loothistory.scroll)
pfUI.loothistory.list = list pfUI.loothistory.list = list
-- ==========================================================================
-- Frame pools
-- ==========================================================================
local itemFrames = {}
local FullUpdate -- forward declaration (toggle handlers call it) local FullUpdate -- forward declaration (toggle handlers call it)
local function CreateItemFrame() local function ToggleExpanded(f)
local f = CreateFrame("Button", nil, list) local id = f.rollID
f:SetSize(ITEM_W, ITEM_H) 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:SetBackdrop(pfUI.backdrop_hover)
f:SetBackdropBorderColor(1, 1, 1, .04) f:SetBackdropBorderColor(1, 1, 1, .04)
f:EnableMouse(1) f:EnableMouse(1)
@@ -118,10 +112,7 @@ pfUI:RegisterModule("loothistory", function ()
f.toggle = CreateFrame("Button", nil, f) f.toggle = CreateFrame("Button", nil, f)
f.toggle:SetSize(14, 14) f.toggle:SetSize(14, 14)
f.toggle:SetPoint("LEFT", 4, 0) f.toggle:SetPoint("LEFT", 4, 0)
f.toggle:SetScript("OnClick", function() f.toggle:SetScript("OnClick", function() ToggleExpanded(f) end)
local id = f.rollID
if id then expanded[id] = not expanded[id]; FullUpdate() end
end)
-- icon + quality-colored border -- icon + quality-colored border
f.iconbg = CreateFrame("Frame", nil, f) f.iconbg = CreateFrame("Frame", nil, f)
@@ -138,18 +129,18 @@ pfUI:RegisterModule("loothistory", function ()
f.winicon:SetSize(14, 14) f.winicon:SetSize(14, 14)
f.winicon:SetPoint("RIGHT", f, "RIGHT", -6, 0) f.winicon:SetPoint("RIGHT", f, "RIGHT", -6, 0)
f.winroll = f:CreateFontString("Status", "OVERLAY", "GameFontNormal") f.winroll = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
f.winroll:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") f.winroll:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
f.winroll:SetPoint("RIGHT", f.winicon, "LEFT", -2, 0) f.winroll:SetPoint("RIGHT", f.winicon, "LEFT", -2, 0)
f.winroll:SetTextColor(1, 1, 1, 1) f.winroll:SetTextColor(1, 1, 1, 1)
f.winname = f:CreateFontString("Status", "OVERLAY", "GameFontNormal") f.winname = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
f.winname:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") f.winname:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
f.winname:SetPoint("RIGHT", f.winroll, "LEFT", -4, 0) f.winname:SetPoint("RIGHT", f.winroll, "LEFT", -4, 0)
f.winname:SetJustifyH("RIGHT") f.winname:SetJustifyH("RIGHT")
-- item name (leaves room on the right for the winner block) -- item name (leaves room on the right for the winner block)
f.name = f:CreateFontString("Status", "OVERLAY", "GameFontNormal") f.name = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
f.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") f.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
f.name:SetPoint("LEFT", f.iconbg, "RIGHT", 5, 0) f.name:SetPoint("LEFT", f.iconbg, "RIGHT", 5, 0)
f.name:SetPoint("RIGHT", f, "RIGHT", -100, 0) f.name:SetPoint("RIGHT", f, "RIGHT", -100, 0)
@@ -167,20 +158,13 @@ pfUI:RegisterModule("loothistory", function ()
this:SetBackdropBorderColor(1, 1, 1, .04) this:SetBackdropBorderColor(1, 1, 1, .04)
GameTooltip:Hide() GameTooltip:Hide()
end) end)
f:SetScript("OnClick", function() f:SetScript("OnClick", function() ToggleExpanded(f) end)
local id = this.rollID
if id then expanded[id] = not expanded[id]; FullUpdate() end
end)
return f
end end
local function CreatePlayerFrame() -- one-time setup of a pooled player row
local f = CreateFrame("Frame", nil, list) local function SetupPlayerRow(f)
f:SetSize(PLAYER_W, PLAYER_H)
-- name is indented to leave room for the winner checkmark on its left -- name is indented to leave room for the winner checkmark on its left
f.name = f:CreateFontString("Status", "OVERLAY", "GameFontNormal") f.name = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
f.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") f.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
f.name:SetPoint("LEFT", 20, 0) f.name:SetPoint("LEFT", 20, 0)
f.name:SetJustifyH("LEFT") f.name:SetJustifyH("LEFT")
@@ -189,7 +173,7 @@ pfUI:RegisterModule("loothistory", function ()
f.rollicon:SetSize(16, 16) f.rollicon:SetSize(16, 16)
f.rollicon:SetPoint("RIGHT", -4, 0) f.rollicon:SetPoint("RIGHT", -4, 0)
f.rolltext = f:CreateFontString("Status", "OVERLAY", "GameFontNormal") f.rolltext = f:CreateFontString(nil, "OVERLAY", "GameFontNormal")
f.rolltext:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") f.rolltext:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
f.rolltext:SetPoint("RIGHT", f.rollicon, "LEFT", -3, 0) f.rolltext:SetPoint("RIGHT", f.rollicon, "LEFT", -3, 0)
f.rolltext:SetTextColor(1, 1, 1, 1) f.rolltext:SetTextColor(1, 1, 1, 1)
@@ -199,15 +183,8 @@ pfUI:RegisterModule("loothistory", function ()
f.winmark:SetSize(16, 16) f.winmark:SetSize(16, 16)
f.winmark:SetTexture(WINMARK) f.winmark:SetTexture(WINMARK)
f.winmark:SetPoint("RIGHT", f.name, "LEFT", -1, 0) f.winmark:SetPoint("RIGHT", f.name, "LEFT", -1, 0)
return f
end end
local playerPool = CreateObjectPool(CreatePlayerFrame, function(_, pf)
pf:Hide()
pf:ClearAllPoints()
end)
local function SetToggleTexture(toggle, isExpanded) local function SetToggleTexture(toggle, isExpanded)
if isExpanded then if isExpanded then
toggle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up") toggle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up")
@@ -221,35 +198,29 @@ pfUI:RegisterModule("loothistory", function ()
-- ========================================================================== -- ==========================================================================
-- Rendering -- Rendering
-- ========================================================================== -- ==========================================================================
local function UpdateItemFrame(f, i) local function InitItemRow(f, row)
local rollID, itemLink, numPlayers, isDone, winnerIdx = C_LootHistory.GetItem(i) 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.rollID = rollID
f.itemIdx = i
f.itemLink = itemLink f.itemLink = itemLink
f.numPlayers = numPlayers or 0
f.isDone = isDone
local isExpanded = rollID and expanded[rollID] local isExpanded = rollID and expanded[rollID]
SetToggleTexture(f.toggle, isExpanded) SetToggleTexture(f.toggle, isExpanded)
-- Item icon/name/quality via the ClassicAPI Item mixin. When the item -- Item icon/name/quality via the ClassicAPI Item mixin. The row shows a
-- isn't cached yet, show a placeholder and re-paint this row from the -- placeholder until ContinueOnItemLoad paints it, which happens at once
-- ContinueOnItemLoad callback (guarded on rollID: rows are pooled, so the -- when the item is cached (guarded on rollID: rows are pooled, so the
-- callback must no-op if the row has since been reused for another roll). -- 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) ShowRetrieving(f)
if itemLink then
local item = Item:CreateFromItemLink(itemLink)
local pending = rollID local pending = rollID
item:ContinueOnItemLoad(function() item:ContinueOnItemLoad(function()
if f.rollID == pending then RenderItemVisual(f, item) end if f.rollID == pending then RenderItemVisual(f, item) end
end) end)
end end
else
ShowRetrieving(f)
end
-- winner summary only on a decided, collapsed row -- winner summary only on a decided, collapsed row
if isDone and not isExpanded then if isDone and not isExpanded then
@@ -279,16 +250,35 @@ pfUI:RegisterModule("loothistory", function ()
end end
end end
local function RenderPlayerFrame(pf, name, class, rollType, roll, isWinner) 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:SetText(name or UNKNOWN)
pf.name:SetTextColor(PFUI_CLASS_COLORS[class]:GetRGB()) pf.name:SetTextColor(PFUI_CLASS_COLORS[class]:GetRGB())
pf.rollicon:SetTexture(ROLL_TEX[rollType] or ROLL_TEX[ROLL_PASS]) 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 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 pf.winmark:SetShown(isWinner)
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), -- 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' -- or afterwards only if they actually rolled or it's you (hide the passers'
-- noise on a decided roll) — mirrors Blizzard's ShouldDisplayPlayer. -- noise on a decided roll) — mirrors Blizzard's ShouldDisplayPlayer.
@@ -298,46 +288,23 @@ pfUI:RegisterModule("loothistory", function ()
function FullUpdate() function FullUpdate()
if not pfUI.loothistory:IsShown() then return end if not pfUI.loothistory:IsShown() then return end
playerPool:ReleaseAll()
local num = C_LootHistory.GetNumItems() local rows = {}
local y = -2 for i = 1, C_LootHistory.GetNumItems() do
local rollID, _, numPlayers, isDone = C_LootHistory.GetItem(i)
table.insert(rows, { item = i })
for i = 1, num do if rollID and expanded[rollID] then
local f = itemFrames[i] or CreateItemFrame() for p = 1, numPlayers or 0 do
itemFrames[i] = f local _, _, _, roll, _, isMe = C_LootHistory.GetPlayerInfo(i, p)
UpdateItemFrame(f, i) if ShouldDisplayPlayer(isDone, roll, isMe) then
f:ClearAllPoints() table.insert(rows, { item = i, player = p })
f:SetPoint("TOPLEFT", list, "TOPLEFT", 4, y)
f:Show()
y = y - ITEM_H - 2
if f.rollID and expanded[f.rollID] then
for p = 1, f.numPlayers do
local name, class, rollType, roll, isWinner, isMe = C_LootHistory.GetPlayerInfo(i, p)
if ShouldDisplayPlayer(f.isDone, roll, isMe) then
local pf = playerPool:Acquire()
RenderPlayerFrame(pf, name, class, rollType, roll, isWinner)
pf:ClearAllPoints()
pf:SetPoint("TOPLEFT", list, "TOPLEFT", 22, y)
pf:Show()
y = y - PLAYER_H
end end
end end
y = y - 2
end end
end end
for i = num + 1, table.getn(itemFrames) do list.ScrollBox:SetDataProvider(CreateDataProvider(rows), ScrollBoxConstants.RetainScrollPosition)
itemFrames[i]:Hide()
end
-- Resize the scroll child and re-attach it: SetHeight alone on a
-- SetAllPoints'd child doesn't make the ScrollFrame recompute its scroll
-- range, so a dynamically-grown list wouldn't scroll until a /reload.
list:SetHeight(math.max(1, -y + 2))
pfUI.loothistory.scroll:SetScrollChild(list)
pfUI.loothistory.scroll:UpdateScrollState()
end end
pfUI.loothistory:SetScript("OnShow", function() FullUpdate() end) pfUI.loothistory:SetScript("OnShow", function() FullUpdate() end)
@@ -345,20 +312,18 @@ pfUI:RegisterModule("loothistory", function ()
-- ========================================================================== -- ==========================================================================
-- Events -- 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 -- auto-show on a new roll opening / completing, if enabled
if C.loothistory.autoshow == "1" local function AutoShow()
and (event == "LOOT_HISTORY_FULL_UPDATE" or event == "LOOT_HISTORY_ROLL_COMPLETE") if C.loothistory.autoshow == "1" and not pfUI.loothistory:IsShown() then
and not pfUI.loothistory:IsShown() then
pfUI.loothistory:Show() -- OnShow runs FullUpdate pfUI.loothistory:Show() -- OnShow runs FullUpdate
return return
end end
FullUpdate() -- no-op while hidden FullUpdate() -- no-op while hidden
end) end
pfUI.events:RegisterFrameEventAndCallback("LOOT_HISTORY_FULL_UPDATE", AutoShow)
pfUI.events:RegisterFrameEventAndCallback("LOOT_HISTORY_ROLL_COMPLETE", AutoShow)
pfUI.events:RegisterFrameEventAndCallback("LOOT_HISTORY_ROLL_CHANGED", FullUpdate)
-- ========================================================================== -- ==========================================================================
-- Slash command -- Slash command
+88
View File
@@ -0,0 +1,88 @@
pfUI:RegisterModule("lossofcontrol", function ()
-- 5.x's loss of control alert. ClassicAPI's C_LossOfControl builds the
-- effects from the player's debuffs and from the school lockout of an
-- interrupt.
local strings = L["lossofcontrol"]
-- how much each effect takes away; the alert shows the strongest one
local PRIORITY = {
STUN = 3, FEAR = 3, CONFUSE = 3, CHARM = 3, POSSESS = 3, PACIFYSILENCE = 3,
SILENCE = 2, SCHOOL_INTERRUPT = 2, PACIFY = 2,
DISARM = 1, ROOT = 1,
}
-- the lockout packet does not name the interrupting spell
local INTERRUPT_ICON = "Interface\\Icons\\Ability_Kick"
local function IsStronger(data, best)
local priority, bestPriority = PRIORITY[data.locType], PRIORITY[best.locType]
if priority ~= bestPriority then return priority > bestPriority end
return (data.timeRemaining or math.huge) > (best.timeRemaining or math.huge)
end
local frame = CreateFrame("Frame", "pfLossOfControl", UIParent)
frame:SetSize(220, 48)
frame:SetPoint("CENTER", 0, 120)
frame:SetFrameStrata("HIGH")
frame:Hide()
frame.icon = CreateFrame("Frame", nil, frame)
frame.icon:SetSize(48, 48)
frame.icon:SetPoint("LEFT", 0, 0)
CreateBackdrop(frame.icon, nil, true)
frame.icon.tex = frame.icon:CreateTexture(nil, "ARTWORK")
HandleIcon(frame.icon, frame.icon.tex)
frame.cd = CreateCooldown(frame.icon, "lossofcontrol")
frame.cd:SetAllPoints(frame.icon.tex)
frame.label = frame:CreateFontString(nil, "OVERLAY")
frame.label:SetFont(pfUI.font_default, 20, "OUTLINE")
frame.label:SetTextColor(NORMAL_FONT_COLOR:GetRGB())
frame.label:SetPoint("LEFT", frame.icon, "RIGHT", 8, 0)
frame.Refresh = function(self)
local best
for i = 1, C_LossOfControl.GetActiveLossOfControlDataCount() do
local data = C_LossOfControl.GetActiveLossOfControlData(i)
if not best or IsStronger(data, best) then best = data end
end
if not best then
if pfUI.unlock and pfUI.unlock:IsShown() then return end
self:Hide()
return
end
if best.locType == "SCHOOL_INTERRUPT" then
self.label:SetText(format(strings.LOSS_OF_CONTROL_DISPLAY_INTERRUPT_SCHOOL, C_Spell.GetSchoolString(best.lockoutSchool)))
self.icon.tex:SetTexture(INTERRUPT_ICON)
else
self.label:SetText(strings["LOSS_OF_CONTROL_DISPLAY_" .. best.locType])
self.icon.tex:SetTexture(best.iconTexture)
end
CooldownFrame_SetTimer(self.cd, best.startTime or 0, best.duration or 0, best.startTime and 1 or 0)
self:Show()
end
-- a refreshed debuff (UNIT_AURA_DELTA) or a second kick on the same school
-- (SPELL_UPDATE_COOLDOWN) changes the timer without a loss of control event
frame:SetScript("OnShow", function()
this:RegisterUnitEvent("UNIT_AURA_DELTA", "player")
this:RegisterEvent("SPELL_UPDATE_COOLDOWN")
end)
frame:SetScript("OnHide", function()
this:UnregisterAllEvents()
end)
frame:SetScript("OnEvent", function()
this:Refresh()
end)
pfUI.events:RegisterFrameEventAndCallback("LOSS_OF_CONTROL_ADDED", function() frame:Refresh() end)
pfUI.events:RegisterFrameEventAndCallback("LOSS_OF_CONTROL_UPDATE", function() frame:Refresh() end)
UpdateMovable(frame)
pfUI.lossofcontrol = frame
end)
+1 -1
View File
@@ -8,7 +8,7 @@
-- on both the modern (Turtle/Octo) and stock-vanilla macro UIs. The surrounding -- on both the modern (Turtle/Octo) and stock-vanilla macro UIs. The surrounding
-- MacroFrame (list + body editor) is Blizzard's, already skinned elsewhere. -- MacroFrame (list + body editor) is Blizzard's, already skinned elsewhere.
pfUI:RegisterModule("macroicons", function () pfUI:RegisterModule("macroicons", function ()
HookAddonOrVariable("Blizzard_MacroUI", function() HookAddon("Blizzard_MacroUI", function()
-- ============================================================ -- ============================================================
-- Popup frame -- Popup frame
-- ============================================================ -- ============================================================
+8 -5
View File
@@ -33,6 +33,10 @@ pfUI:RegisterModule("map", function ()
local alpha = C.position["WorldMapFrame"].alpha local alpha = C.position["WorldMapFrame"].alpha
local scale = C.position["WorldMapFrame"].scale local scale = C.position["WorldMapFrame"].scale
-- the hooks go on once, however often the loader runs: turtle-wow.lua also
-- calls it, outside of an event
local hooked
local pfMapLoader = CreateFrame("Frame") local pfMapLoader = CreateFrame("Frame")
pfMapLoader:RegisterEvent("PLAYER_ENTERING_WORLD") pfMapLoader:RegisterEvent("PLAYER_ENTERING_WORLD")
pfMapLoader:SetScript("OnEvent", function() pfMapLoader:SetScript("OnEvent", function()
@@ -46,9 +50,8 @@ pfUI:RegisterModule("map", function ()
WorldMapFrame:EnableMouse(true) WorldMapFrame:EnableMouse(true)
WorldMapFrame:RegisterForDrag("LeftButton") WorldMapFrame:RegisterForDrag("LeftButton")
-- make sure the hooks get only applied once if not hooked then
if not this.hooked then hooked = true
this.hooked = true
WorldMapFrame:HookScript("OnShow", function() WorldMapFrame:HookScript("OnShow", function()
-- customize -- customize
@@ -64,14 +67,14 @@ pfUI:RegisterModule("map", function ()
WorldMapFrame:HookScript("OnMouseWheel", function() WorldMapFrame:HookScript("OnMouseWheel", function()
if IsShiftKeyDown() then if IsShiftKeyDown() then
alpha = clamp(WorldMapFrame:GetAlpha() + arg1/10, 0.1, 1.0) alpha = Clamp(WorldMapFrame:GetAlpha() + arg1/10, 0.1, 1.0)
WorldMapFrame:SetAlpha(alpha) WorldMapFrame:SetAlpha(alpha)
end end
if IsControlKeyDown() then if IsControlKeyDown() then
local oldscale = WorldMapFrame:GetScale() local oldscale = WorldMapFrame:GetScale()
local point, rel, relpoint, offx, offy = WorldMapFrame:GetPoint() local point, rel, relpoint, offx, offy = WorldMapFrame:GetPoint()
scale = clamp(oldscale + arg1/10, 0.1, 2.0) scale = Clamp(oldscale + arg1/10, 0.1, 2.0)
-- recalculate world frame position based on old and new scale -- recalculate world frame position based on old and new scale
if point == "TOPLEFT" and relpoint == "TOPLEFT" then if point == "TOPLEFT" and relpoint == "TOPLEFT" then
+1 -1
View File
@@ -138,7 +138,7 @@ pfUI:RegisterModule("mapcolors", function ()
end end
-- BattlefieldMinimap -- BattlefieldMinimap
HookAddonOrVariable("Blizzard_BattlefieldMinimap", function() HookAddon("Blizzard_BattlefieldMinimap", function()
Initialize('BattlefieldMinimap') Initialize('BattlefieldMinimap')
hooksecurefunc('BattlefieldMinimap_OnUpdate', function() hooksecurefunc('BattlefieldMinimap_OnUpdate', function()
+1 -1
View File
@@ -180,7 +180,7 @@ pfUI:RegisterModule("mapreveal", function ()
-- above, so nothing is redrawn while the map is closed — the next open -- above, so nothing is redrawn while the map is closed — the next open
-- rebuilds from the current state. -- rebuilds from the current state.
EventRegistry:RegisterFrameEventAndCallback("MAP_EXPLORATION_UPDATED", function() pfUI.events:RegisterFrameEventAndCallback("MAP_EXPLORATION_UPDATED", function()
if WorldMapFrame and WorldMapFrame:IsShown() then if WorldMapFrame and WorldMapFrame:IsShown() then
pfWorldMapFrame_Update() pfWorldMapFrame_Update()
end end
+2 -6
View File
@@ -258,9 +258,7 @@ pfUI.marktracking = CreateFrame("Frame", "pfMarkTracking", UIParent)
-- Unlock mode: show fixed 1-row placeholder so positioning works correctly -- Unlock mode: show fixed 1-row placeholder so positioning works correctly
if pfUI.unlock then if pfUI.unlock then
local origShow = pfUI.unlock:GetScript("OnShow") pfUI.unlock:HookScript("OnShow", function()
pfUI.unlock:SetScript("OnShow", function()
if origShow then origShow() end
isUnlocked = true isUnlocked = true
-- hide all rows, show container at 1-row height as drag handle -- hide all rows, show container at 1-row height as drag handle
for i = 1, 8 do for i = 1, 8 do
@@ -270,9 +268,7 @@ pfUI.marktracking = CreateFrame("Frame", "pfMarkTracking", UIParent)
pfUI.marktracking:Show() pfUI.marktracking:Show()
end) end)
local origHide = pfUI.unlock:GetScript("OnHide") pfUI.unlock:HookScript("OnHide", function()
pfUI.unlock:SetScript("OnHide", function()
if origHide then origHide() end
isUnlocked = false isUnlocked = false
UpdateDisplay() UpdateDisplay()
end) end)
+1 -1
View File
@@ -18,7 +18,7 @@ pfUI:RegisterModule("minimap", function ()
pfUI.minimap:SetPoint("TOPRIGHT", UIParent, -border*2, -border*2) pfUI.minimap:SetPoint("TOPRIGHT", UIParent, -border*2, -border*2)
UpdateMovable(pfUI.minimap) UpdateMovable(pfUI.minimap)
pfUI.minimap:SetScript("OnShow", function() pfUI.minimap:SetScript("OnShow", function()
QueueFunction(ShowUIPanel, Minimap) RunNextFrame(function() ShowUIPanel(Minimap) end)
end) end)
Minimap:SetParent(pfUI.minimap) Minimap:SetParent(pfUI.minimap)
+49 -98
View File
@@ -130,8 +130,8 @@ pfUI:RegisterModule("nameplates", function ()
cfg.targetcastbar = C.nameplates["targetcastbar"] == "1" cfg.targetcastbar = C.nameplates["targetcastbar"] == "1"
cfg.notargalpha = tonumber(C.nameplates.notargalpha) or 0.5 cfg.notargalpha = tonumber(C.nameplates.notargalpha) or 0.5
if cfg.notargalpha > 1 then cfg.notargalpha = cfg.notargalpha / 100 end if cfg.notargalpha > 1 then cfg.notargalpha = cfg.notargalpha / 100 end
-- Clamp to 0.99 so non-target plates never reach 1.0 (used for target detection) -- Clamp to 1.0 so a 100% setting yields full opacity (target detection is GUID-based)
if cfg.notargalpha > 0.99 then cfg.notargalpha = 0.99 end if cfg.notargalpha > 1 then cfg.notargalpha = 1 end
cfg.namefightcolor = C.nameplates.namefightcolor == "1" cfg.namefightcolor = C.nameplates.namefightcolor == "1"
cfg.spellname = C.nameplates.spellname == "1" cfg.spellname = C.nameplates.spellname == "1"
cfg.showhp = C.nameplates.showhp == "1" cfg.showhp = C.nameplates.showhp == "1"
@@ -155,10 +155,6 @@ pfUI:RegisterModule("nameplates", function ()
cfg.use_unitfonts = C.nameplates.use_unitfonts == "1" cfg.use_unitfonts = C.nameplates.use_unitfonts == "1"
cfg.font_size = cfg.use_unitfonts and C.global.font_unit_size or C.global.font_size cfg.font_size = cfg.use_unitfonts and C.global.font_unit_size or C.global.font_size
cfg.hptextformat = C.nameplates.hptextformat cfg.hptextformat = C.nameplates.hptextformat
-- NEW: Cache debuff config
cfg.debufftimers = C.nameplates.debufftimers == "1"
cfg.debuffanim = tonumber(C.nameplates.debuffanim) or 0
cfg.debufftext = tonumber(C.nameplates.debufftext) or 1
-- Throttle delays, resolved once instead of per plate per tick. -- Throttle delays, resolved once instead of per plate per tick.
-- libthrottle:Get walks the saved-variable table, a defaults fallback and a -- libthrottle:Get walks the saved-variable table, a defaults fallback and a
@@ -431,7 +427,7 @@ pfUI:RegisterModule("nameplates", function ()
plate.debuffs[index]:SetFrameLevel(4) plate.debuffs[index]:SetFrameLevel(4)
plate.debuffs[index].icon = plate.debuffs[index]:CreateTexture(nil, "BACKGROUND") plate.debuffs[index].icon = plate.debuffs[index]:CreateTexture(nil, "BACKGROUND")
plate.debuffs[index].icon:SetTexture(.3,1,.8,1) plate.debuffs[index].icon:SetColorTexture(.3,1,.8,1)
plate.debuffs[index].icon:SetAllPoints(plate.debuffs[index]) plate.debuffs[index].icon:SetAllPoints(plate.debuffs[index])
plate.debuffs[index].stacks = plate.debuffs[index]:CreateFontString(nil, "OVERLAY") plate.debuffs[index].stacks = plate.debuffs[index]:CreateFontString(nil, "OVERLAY")
@@ -440,13 +436,8 @@ pfUI:RegisterModule("nameplates", function ()
plate.debuffs[index].stacks:SetJustifyV("BOTTOM") plate.debuffs[index].stacks:SetJustifyV("BOTTOM")
plate.debuffs[index].stacks:SetTextColor(1,1,0) plate.debuffs[index].stacks:SetTextColor(1,1,0)
plate.debuffs[index].cd = CreateFrame("Cooldown", plate.platename.."Debuff"..index.."Cooldown", plate.debuffs[index], "CooldownFrameTemplate") plate.debuffs[index].cd = CreateCooldown(plate.debuffs[index], "nameplate", plate.platename.."Debuff"..index.."Cooldown")
plate.debuffs[index].cd:SetFrameLevel(6) plate.debuffs[index].cd:SetFrameLevel(6)
-- Set initial config flags (will be cached per-cooldown later)
plate.debuffs[index].cd.pfCooldownStyleAnimation = cfg.debuffanim
plate.debuffs[index].cd.pfCooldownStyleText = cfg.debufftext
plate.debuffs[index].cd.pfCooldownType = "ALL"
end end
local function UpdateDebuffConfig(nameplate, i) local function UpdateDebuffConfig(nameplate, i)
@@ -479,15 +470,6 @@ pfUI:RegisterModule("nameplates", function ()
end end
nameplate.debuffs[i]:SetSize(debuffsize, debuffsize) nameplate.debuffs[i]:SetSize(debuffsize, debuffsize)
-- Update cooldown display settings
if nameplate.debuffs[i].cd then
local cooldown_text = tonumber(C.nameplates.debufftext) or 1
local cooldown_anim = tonumber(C.nameplates.debuffanim) or 0
nameplate.debuffs[i].cd.pfCooldownStyleText = cooldown_text
nameplate.debuffs[i].cd.pfCooldownStyleAnimation = cooldown_anim
end
end end
-- create nameplate core -- create nameplate core
@@ -504,7 +486,7 @@ nameplates:RegisterEvent("NAME_PLATE_CREATED")
nameplates:RegisterEvent("NAME_PLATE_UNIT_ADDED") nameplates:RegisterEvent("NAME_PLATE_UNIT_ADDED")
nameplates:RegisterEvent("NAME_PLATE_UNIT_REMOVED") nameplates:RegisterEvent("NAME_PLATE_UNIT_REMOVED")
nameplates:RegisterEvent("UPDATE_MOUSEOVER_UNIT") nameplates:RegisterEvent("UPDATE_MOUSEOVER_UNIT")
-- UNIT_AURA / UNIT_FLAGS / UNIT_SPELLCAST_* are registered per plate, on the -- UNIT_AURA_DELTA / UNIT_FLAGS / UNIT_SPELLCAST_* are registered per plate, on the
-- plate's own frame, against its own token -- see OnCreate and -- plate's own frame, against its own token -- see OnCreate and
-- NAME_PLATE_UNIT_ADDED. -- NAME_PLATE_UNIT_ADDED.
nameplates:RegisterEvent("PLAYER_GUILD_UPDATE") nameplates:RegisterEvent("PLAYER_GUILD_UPDATE")
@@ -519,9 +501,6 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
this:UnregisterAllEvents() this:UnregisterAllEvents()
this:SetScript("OnEvent", nil) this:SetScript("OnEvent", nil)
this:SetScript("OnUpdate", nil) this:SetScript("OnUpdate", nil)
if nameplates.mouselook then
nameplates.mouselook:SetScript("OnUpdate", nil)
end
-- The plates hold their own unit subscriptions now, so silencing this -- The plates hold their own unit subscriptions now, so silencing this
-- frame alone would leave them dispatching through logout -- exactly what -- frame alone would leave them dispatching through logout -- exactly what
-- this branch exists to prevent. Leaving the world destroys the units -- this branch exists to prevent. Leaving the world destroys the units
@@ -612,8 +591,9 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
-- Point this plate's own subscriptions at the token it just took. On a -- Point this plate's own subscriptions at the token it just took. On a
-- recycled frame these replace the previous unit rather than stacking: -- recycled frame these replace the previous unit rather than stacking:
-- RegisterUnitEvent on an already-filtered registration swaps the units. -- RegisterUnitEvent on an already-filtered registration swaps the units.
plate.nameplate:RegisterUnitEvent("UNIT_AURA", arg1) plate.nameplate:RegisterUnitEvent("UNIT_AURA_DELTA", arg1)
plate.nameplate:RegisterUnitEvent("UNIT_FLAGS", arg1) plate.nameplate:RegisterUnitEvent("UNIT_FLAGS", arg1)
plate.nameplate:RegisterUnitEvent("UNIT_TARGET", arg1)
plate.nameplate:RegisterUnitEvent("UNIT_SPELLCAST_START", arg1) plate.nameplate:RegisterUnitEvent("UNIT_SPELLCAST_START", arg1)
plate.nameplate:RegisterUnitEvent("UNIT_SPELLCAST_CHANNEL_START", arg1) plate.nameplate:RegisterUnitEvent("UNIT_SPELLCAST_CHANNEL_START", arg1)
plate.nameplate:RegisterUnitEvent("UNIT_SPELLCAST_STOP", arg1) plate.nameplate:RegisterUnitEvent("UNIT_SPELLCAST_STOP", arg1)
@@ -765,12 +745,20 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
-- new token; _REMOVED drops it, which matters because freed slots are -- new token; _REMOVED drops it, which matters because freed slots are
-- reused and a stale token would feed this frame another unit's events. -- reused and a stale token would feed this frame another unit's events.
nameplate:SetScript("OnEvent", function() nameplate:SetScript("OnEvent", function()
if event == "UNIT_AURA" then if event == "UNIT_AURA_DELTA" then
-- a fresh C_UnitAuras read next tick rather than waiting out the 0.5s -- a fresh C_UnitAuras read next tick rather than waiting out the 0.5s
-- throttle -- covers expiry, dispels, refreshes and stack changes -- throttle -- covers expiry, dispels, refreshes and stack changes
this.auraUpdate = true this.auraUpdate = true
elseif event == "UNIT_FLAGS" then elseif event == "UNIT_FLAGS" then
this.eventcache = true this.eventcache = true
elseif event == "UNIT_TARGET" then
-- the unit turned to someone else: recolour its combat state now
-- rather than once the colour cache and the data tick run out
if cfg.outcombatstate or cfg.barcombatstate then
local cached = this.cachedGuid and combatColorCache[this.cachedGuid]
if cached then cached.expires = 0 end
this.eventcache = true
end
elseif event == "UNIT_SPELLCAST_START" or event == "UNIT_SPELLCAST_CHANNEL_START" then elseif event == "UNIT_SPELLCAST_START" or event == "UNIT_SPELLCAST_CHANNEL_START" then
-- the payload carries no timing, so poll it (PollCastInfo picks cast -- the payload carries no timing, so poll it (PollCastInfo picks cast
-- vs channel) -- vs channel)
@@ -869,11 +857,11 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
combopoints[i].tex:SetAllPoints() combopoints[i].tex:SetAllPoints()
if i < 3 then if i < 3 then
combopoints[i].tex:SetTexture(1, .3, .3, .75) combopoints[i].tex:SetColorTexture(1, .3, .3, .75)
elseif i < 4 then elseif i < 4 then
combopoints[i].tex:SetTexture(1, 1, .3, .75) combopoints[i].tex:SetColorTexture(1, 1, .3, .75)
else else
combopoints[i].tex:SetTexture(.3, 1, .3, .75) combopoints[i].tex:SetColorTexture(.3, 1, .3, .75)
end end
end end
nameplate.combopoints = combopoints nameplate.combopoints = combopoints
@@ -1037,9 +1025,7 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
local level = plate.original.level:IsShown() and plate.original.level:GetObjectType() == "FontString" and tonumber(plate.original.level:GetText()) or "??" local level = plate.original.level:IsShown() and plate.original.level:GetObjectType() == "FontString" and tonumber(plate.original.level:GetText()) or "??"
-- reset per-unit cache when the plate is reassigned. Gate on GUID *and* -- reset per-unit cache when the plate is reassigned. Gate on GUID *and*
-- name — name alone misses pool reuse between same-named units (e.g. plate -- name — name alone misses pool reuse between same-named units.
-- held a player "Ironforge Guard" and is now reassigned to the NPC by the
-- same name), which would leak a stale "PLAYER" hint into GetUnitInfo.
-- Wipe the whole cache table: the PERF gates below ("only update X when -- Wipe the whole cache table: the PERF gates below ("only update X when
-- X changed") would otherwise skip bar/color/text updates when the new -- X changed") would otherwise skip bar/color/text updates when the new
-- unit happens to share a cached value with the previous occupant -- unit happens to share a cached value with the previous occupant
@@ -1062,27 +1048,26 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
if event == "PLAYER_TARGET_CHANGED" then unitstr = nil end if event == "PLAYER_TARGET_CHANGED" then unitstr = nil end
-- remove unitstr when it doesn't resolve to this plate's unit (stale istarget, -- remove unitstr when it doesn't resolve to this plate's unit (stale istarget,
-- stale mouseover guid or a despawned unit). Must run before the cache fills -- stale mouseover guid or a despawned unit)
-- below -- an unrelated unitstr would poison cache.player/minion with the
-- *other* unit's answer, and the nil-gate would then never recompute it.
if unitstr and UnitName(unitstr) ~= name then unitstr = nil end if unitstr and UnitName(unitstr) ~= name then unitstr = nil end
-- resolve player vs npc from plate's own unit so libunitscan can't return -- the plate's own unit token says who it is; a player too high to show a
-- a player record for an NPC sharing the same name (e.g. Chromie). Stored -- level keeps the one the player database last saw
-- as true/false/nil so it doubles as the GetUnitInfo hint. local unit = plate.unit
if plate.cache.player == nil and unitstr then local player, class, elite, guild, ulevel
plate.cache.player = UnitIsPlayer(unitstr) and true or false if unit then
player = UnitIsPlayer(unit)
class = player and UnitClassBase(unit)
elite = UnitClassification(unit)
guild = player and GetGuildInfo(unit) or UnitSubName(unit)
ulevel = UnitLevel(unit)
if player and ulevel <= 0 then
local _
_, ulevel = GetUnitInfo(name)
end end
if plate.cache.minion == nil and unitstr then
plate.cache.minion = UnitIsMinion(unitstr) and true or false
end end
local class, ulevel, elite, player, guild
if not plate.cache.minion then
class, ulevel, elite, player, guild = GetUnitInfo(name, true, plate.cache.player)
end
if plate.cache.player ~= nil then player = plate.cache.player or nil end
-- Use database level ONLY if current level is ?? (fixes ?? after reload, but doesn't override visible levels) -- Use the unit's level ONLY if current level is ?? (fixes ?? after reload, but doesn't override visible levels)
local levelFromDB = false local levelFromDB = false
if level == "??" and ulevel and ulevel > 0 then if level == "??" and ulevel and ulevel > 0 then
level = ulevel level = ulevel
@@ -1092,13 +1077,9 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
local unittype = GetUnitType(plate) local unittype = GetUnitType(plate)
local font_size = C.nameplates.use_unitfonts == "1" and C.global.font_unit_size or C.global.font_size local font_size = C.nameplates.use_unitfonts == "1" and C.global.font_unit_size or C.global.font_size
-- ignore players with npc names if plate level is lower than player level
if ulevel and ulevel > (level == "??" and -1 or level) then player = nil end
if player and unittype == "ENEMY_NPC" then unittype = "ENEMY_PLAYER" end if player and unittype == "ENEMY_NPC" then unittype = "ENEMY_PLAYER" end
if player and unittype == "FRIENDLY_NPC" then unittype = "FRIENDLY_PLAYER" end if player and unittype == "FRIENDLY_NPC" then unittype = "FRIENDLY_PLAYER" end
elite = plate.original.levelicon:IsShown() and not player and "boss" or elite elite = plate.original.levelicon:IsShown() and not player and "boss" or elite
if not class and not plate.cache.minion then plate.wait_for_scan = true end
-- skip data updates on invisible frames -- skip data updates on invisible frames
if not visible then return end if not visible then return end
@@ -1216,7 +1197,6 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
if cfg.showhp then if cfg.showhp then
local rhp, rhpmax, estimated local rhp, rhpmax, estimated
local unit = plate.unit
if unit then if unit then
local npHp = UnitHealth(unit) local npHp = UnitHealth(unit)
local npMaxHp = UnitHealthMax(unit) local npMaxHp = UnitHealthMax(unit)
@@ -1381,7 +1361,7 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
plate.debuffs[index].stacks:Hide() plate.debuffs[index].stacks:Hide()
end end
if duration and timeleft and cfg.debufftimers then if duration and timeleft then
-- C_UnitAuras returns the Spell.dbc base duration, which talents -- C_UnitAuras returns the Spell.dbc base duration, which talents
-- can extend past — Shadow Affinity bumps SW:P from 18s to 24s, -- can extend past — Shadow Affinity bumps SW:P from 18s to 24s,
-- so a fresh cast has timeleft > duration and `now + timeleft - -- so a fresh cast has timeleft > duration and `now + timeleft -
@@ -1396,14 +1376,6 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
local cd = plate.debuffs[index].cd local cd = plate.debuffs[index].cd
cd:Show() cd:Show()
if not cachedStart or abs(cachedStart - newStart) > 0.5 then if not cachedStart or abs(cachedStart - newStart) > 0.5 then
if not cd.configCached or cd.cachedAnim ~= cfg.debuffanim or cd.cachedText ~= cfg.debufftext then
cd.pfCooldownStyleAnimation = cfg.debuffanim
cd.pfCooldownStyleText = cfg.debufftext
cd:SetAlpha(cfg.debuffanim == 1 and 1 or 0)
cd.cachedAnim = cfg.debuffanim
cd.cachedText = cfg.debufftext
cd.configCached = true
end
CooldownFrame_SetTimer(cd, newStart, effDuration, 1) CooldownFrame_SetTimer(cd, newStart, effDuration, 1)
plate.cdCache[index] = plate.cdCache[index] or {} plate.cdCache[index] = plate.cdCache[index] or {}
plate.cdCache[index].effect = effect plate.cdCache[index].effect = effect
@@ -1445,11 +1417,10 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
if not hasEventUpdate and (nameplate.lasttick or 0) + cfg.throttle_min > now then return end if not hasEventUpdate and (nameplate.lasttick or 0) + cfg.throttle_min > now then return end
-- PERF: Intelligent throttling based on target/castbar status and plate count -- PERF: Intelligent throttling based on target/castbar status and plate count
-- Use GUID comparison as primary target detection: instant, immune to alpha transitions, -- Use GUID comparison for target detection: instant, immune to alpha transitions,
-- and immediately correct on de-target (unlike istarget which updates one tick later) -- and immediately correct on de-target (unlike istarget which updates one tick later)
local targetGuid = state and state.targetGuid local targetGuid = state and state.targetGuid
local target = (targetGuid and nameplate.cachedGuid and targetGuid == nameplate.cachedGuid) or local target = (targetGuid and nameplate.cachedGuid and targetGuid == nameplate.cachedGuid) or nil
(state and state.targetGuid and frame:GetAlpha() >= 0.99) or nil
-- Target plate castbar runs on its own dedicated frame (nameplates.castbarFrame). -- Target plate castbar runs on its own dedicated frame (nameplates.castbarFrame).
-- For non-target plates with castbar active, use castbar throttle to ensure -- For non-target plates with castbar active, use castbar throttle to ensure
-- smooth animation without overloading the central loop. -- smooth animation without overloading the central loop.
@@ -1497,7 +1468,6 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
local update local update
local original = nameplate.original local original = nameplate.original
local name = original.name:GetText()
local mouseover = nameplate.cachedGuid and nameplate.cachedGuid == frameState.mouseoverGuid or nil local mouseover = nameplate.cachedGuid and nameplate.cachedGuid == frameState.mouseoverGuid or nil
-- trigger queued event update -- trigger queued event update
@@ -1581,16 +1551,6 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
update = true update = true
end end
-- trigger update when unit was found. Pass the cached player hint so the
-- retry probes the same table OnDataChanged will read on the next pass —
-- otherwise an NPC sharing a name with a known player flips wait_for_scan
-- off here, then OnDataChanged re-sets it, every frame until the mob scan
-- lands.
if nameplate.wait_for_scan and not nameplate.cache.minion and GetUnitInfo(name, true, nameplate.cache.player) then
nameplate.wait_for_scan = nil
update = true
end
-- trigger update when name color changed (includes combat state check). -- trigger update when name color changed (includes combat state check).
-- Skipped once OnDataChanged owns the name colour (class-coloured friendly -- Skipped once OnDataChanged owns the name colour (class-coloured friendly
-- players), so the two writers cannot overwrite each other. -- players), so the two writers cannot overwrite each other.
@@ -1930,9 +1890,7 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
end end
-- enable mouselook on rightbutton down -- enable mouselook on rightbutton down
nameplates.mouselook = CreateFrame("Frame", nil, UIParent) nameplates.mouselook = {}
nameplates.mouselook.time = nil
nameplates.mouselook.frame = nil
nameplates.mouselook.OnMouseDown = function() nameplates.mouselook.OnMouseDown = function()
if arg1 and arg1 == "RightButton" then if arg1 and arg1 == "RightButton" then
MouselookStart() MouselookStart()
@@ -1940,30 +1898,23 @@ nameplates:RegisterUnitEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "target", "focu
-- start detection of the rightclick emulation -- start detection of the rightclick emulation
nameplates.mouselook.time = GetTime() nameplates.mouselook.time = GetTime()
nameplates.mouselook.frame = this nameplates.mouselook.frame = this
nameplates.mouselook:Show()
end end
end end
nameplates.mouselook:SetScript("OnUpdate", function() -- releasing the button ends the mouselook. GLOBAL_MOUSE_UP fires for every
-- break here if nothing to do -- release, while PLAYER_STOPPED_LOOKING needs the camera to have moved, and
if not this.time or not this.frame then -- a click doesn't move it.
this:Hide() pfUI.events:RegisterFrameEventAndCallback("GLOBAL_MOUSE_UP", function(_, button)
return local mouselook = nameplates.mouselook
end if button ~= "RightButton" or not mouselook.frame then return end
-- if threshold is reached (0.5 second) no click action will follow
if not IsMouselooking() and this.time + tonumber(C.nameplates["clickthreshold"]) < GetTime() then
this:Hide()
return
end
-- past the threshold (0.5 second) it was a drag, so no click action follows
if mouselook.time + tonumber(C.nameplates["clickthreshold"]) >= GetTime() then
-- run a usual nameplate rightclick action -- run a usual nameplate rightclick action
if not IsMouselooking() then mouselook.frame:Click("LeftButton")
this.frame:Click("LeftButton")
if UnitCanAttack("player", "target") and not nameplates.combat.inCombat then AttackTarget() end if UnitCanAttack("player", "target") and not nameplates.combat.inCombat then AttackTarget() end
this:Hide()
return
end end
mouselook.frame = nil
end) end)
pfUI.nameplates = nameplates pfUI.nameplates = nameplates
+1 -13
View File
@@ -41,19 +41,7 @@ pfUI:RegisterModule("nampower", function ()
local NON_GCD_QUEUED = 4 local NON_GCD_QUEUED = 4
local NON_GCD_QUEUE_POPPED = 5 local NON_GCD_QUEUE_POPPED = 5
local queue = CreateFrame("Frame") pfUI.events:RegisterFrameEventAndCallback("SPELL_QUEUE_EVENT", function(_, eventCode, spellId)
queue:RegisterEvent("SPELL_QUEUE_EVENT")
queue:RegisterEvent("PLAYER_LOGOUT")
queue:SetScript("OnEvent", function()
-- Handle shutdown to prevent crash 132
if event == "PLAYER_LOGOUT" then
this:UnregisterAllEvents()
this:SetScript("OnEvent", nil)
return
end
local eventCode, spellId = arg1, arg2
if eventCode == NORMAL_QUEUED or eventCode == NON_GCD_QUEUED or eventCode == ON_SWING_QUEUED then if eventCode == NORMAL_QUEUED or eventCode == NON_GCD_QUEUED or eventCode == ON_SWING_QUEUED then
local texture = C_Spell.GetSpellTexture(spellId) local texture = C_Spell.GetSpellTexture(spellId)
if texture then if texture then
+1 -1
View File
@@ -57,7 +57,7 @@ pfUI:RegisterModule("newitem", function ()
pfUI.newitem:UpdateSlot(bag, slot) pfUI.newitem:UpdateSlot(bag, slot)
end) end)
EventRegistry:RegisterFrameEventAndCallback("BAG_NEW_ITEMS_UPDATED", function() pfUI.events:RegisterFrameEventAndCallback("BAG_NEW_ITEMS_UPDATED", function()
pfUI.newitem:RefreshAll() pfUI.newitem:RefreshAll()
end) end)
+56 -12
View File
@@ -105,11 +105,12 @@ pfUI:RegisterModule("panel", function()
do -- FPS & Lag do -- FPS & Lag
local widget = CreateFrame("Frame", "pfPanelWidgetLag", UIParent) local widget = CreateFrame("Frame", "pfPanelWidgetLag", UIParent)
local lag, fps, laghex, fpshex, _ local lag, fps, laghex, fpshex, owner, _
widget.Tooltip = function() widget.Tooltip = function(self)
owner = self
local active = 0 local active = 0
GameTooltip:ClearLines() GameTooltip:ClearLines()
GameTooltip_SetDefaultAnchor(GameTooltip, this) GameTooltip_SetDefaultAnchor(GameTooltip, self)
GameTooltip:AddLine("|cff555555" .. T["Systeminfo"]) GameTooltip:AddLine("|cff555555" .. T["Systeminfo"])
for i=1, GetNumAddOns() do for i=1, GetNumAddOns() do
if IsAddOnLoaded(i) then if IsAddOnLoaded(i) then
@@ -128,6 +129,51 @@ pfUI:RegisterModule("panel", function()
GameTooltip:AddLine(" ") GameTooltip:AddLine(" ")
GameTooltip:AddDoubleLine(T["Memory Usage"], "|cffffffff" .. memmb) GameTooltip:AddDoubleLine(T["Memory Usage"], "|cffffffff" .. memmb)
GameTooltip:AddDoubleLine(T["Next Memory Cleanup"], "|cffffffff" .. gcmb) GameTooltip:AddDoubleLine(T["Next Memory Cleanup"], "|cffffffff" .. gcmb)
-- AddOn memory usage (see MainMenuBarPerformanceBarFrame_OnEnter in MainMenuBar.lua)
local ADDON_MEM_KB_ABBR = _G.ADDON_MEM_KB_ABBR or "(%.0f KB) %s";
local ADDON_MEM_MB_ABBR = _G.ADDON_MEM_MB_ABBR or "(%.2f MB) %s";
local TOTAL_MEM_KB_ABBR = _G.TOTAL_MEM_KB_ABBR or "AddOn Memory: %.0f KB";
local TOTAL_MEM_MB_ABBR = _G.TOTAL_MEM_MB_ABBR or "AddOn Memory: %.2f MB";
UpdateAddOnMemoryUsage()
local totalMem = 0
local topAddOns = {}
for i = 1, GetNumAddOns() do
local mem = GetAddOnMemoryUsage(i)
if mem and mem > 0 then
totalMem = totalMem + mem
for j = 1, 3 do
if not topAddOns[j] or mem > topAddOns[j].value then
for k = 3, j + 1, -1 do
topAddOns[k] = topAddOns[k - 1]
end
topAddOns[j] = { value = mem, name = C_AddOns.GetAddOnName(i) }
break
end
end
end
end
if totalMem > 0 then
local str
if totalMem > 1000 then
str = format(TOTAL_MEM_MB_ABBR, totalMem / 1000)
else
str = format(TOTAL_MEM_KB_ABBR, totalMem)
end
GameTooltip:AddLine(" ")
GameTooltip:AddLine(str, 1, 1, 1)
for i = 1, 3 do
if not topAddOns[i] then break end
if topAddOns[i].value > 1000 then
str = format(ADDON_MEM_MB_ABBR, topAddOns[i].value / 1000, topAddOns[i].name)
else
str = format(ADDON_MEM_KB_ABBR, topAddOns[i].value, topAddOns[i].name)
end
GameTooltip:AddLine(str, 1, 1, 1)
end
end
GameTooltip:AddLine(" ") GameTooltip:AddLine(" ")
GameTooltip:AddDoubleLine(T["Network Down"], "|cffffffff" .. round(nin,1) .. "KB/s") GameTooltip:AddDoubleLine(T["Network Down"], "|cffffffff" .. round(nin,1) .. "KB/s")
GameTooltip:AddDoubleLine(T["Network Up"], "|cffffffff" .. round(nout,1) .. "KB/s") GameTooltip:AddDoubleLine(T["Network Up"], "|cffffffff" .. round(nout,1) .. "KB/s")
@@ -157,6 +203,10 @@ pfUI:RegisterModule("panel", function()
end end
pfUI.panel:OutputPanel("fps", fps .. " " .. T["fps"] .. " & " .. lag .. " " .. T["ms"], widget.Tooltip, widget.Click) pfUI.panel:OutputPanel("fps", fps .. " " .. T["fps"] .. " & " .. lag .. " " .. T["ms"], widget.Tooltip, widget.Click)
if owner and GameTooltip:IsOwned(owner) then
widget.Tooltip(owner)
end
end) end)
end end
@@ -525,19 +575,13 @@ pfUI:RegisterModule("panel", function()
blindpowder = 5530 blindpowder = 5530
} }
-- runs at once when the item is cached
local function AddItemToPanel(panelType) local function AddItemToPanel(panelType)
local itemID = itemIDs[panelType] local item = Item:CreateFromItemID(itemIDs[panelType])
if C_Item.IsItemDataCachedByID(itemID) then
local itemName, count = C_Item.GetItemNameByID(itemID), C_Item.GetItemCount(itemID)
pfUI.panel:OutputPanel(panelType, itemName .. ": " .. count)
else
local item = Item:CreateFromItemID(itemID)
item:ContinueOnItemLoad(function() item:ContinueOnItemLoad(function()
local itemName, count = item:GetItemName(), C_Item.GetItemCount(item:GetItemID()) pfUI.panel:OutputPanel(panelType, item:GetItemName() .. ": " .. C_Item.GetItemCount(item:GetItemID()))
pfUI.panel:OutputPanel(panelType, itemName .. ": " .. count)
end) end)
end end
end
local class = UnitClassBase('player') local class = UnitClassBase('player')
if class == "WARLOCK" then if class == "WARLOCK" then
+1 -1
View File
@@ -3,7 +3,7 @@ pfUI:RegisterModule("pettarget", function ()
if C.unitframes.disable == "1" then return end if C.unitframes.disable == "1" then return end
local rawborder, default_border = GetBorderSize("unitframes") local rawborder, default_border = GetBorderSize("unitframes")
pfUI.uf.pettarget = pfUI.uf:CreateUnitFrame("PetTarget", nil, C.unitframes.ptarget, .2) pfUI.uf.pettarget = pfUI.uf:CreateUnitFrame("PetTarget", nil, C.unitframes.ptarget)
pfUI.uf.pettarget:UpdateFrameSize() pfUI.uf.pettarget:UpdateFrameSize()
pfUI.uf.pettarget:SetPoint("TOP", pfUI.uf.pet or pfUI.uf.target or UIParent, "BOTTOM", 0, -default_border) pfUI.uf.pettarget:SetPoint("TOP", pfUI.uf.pet or pfUI.uf.target or UIParent, "BOTTOM", 0, -default_border)
UpdateMovable(pfUI.uf.pettarget) UpdateMovable(pfUI.uf.pettarget)
+1 -3
View File
@@ -33,9 +33,7 @@ pfUI:RegisterModule("pixelperfect", function ()
-- pixelperfect: native UIScale listener -- pixelperfect: native UIScale listener
if tonumber(C.global.pixelperfect) > 0 then if tonumber(C.global.pixelperfect) > 0 then
local f = CreateFrame("Frame") pfUI.events:RegisterFrameEventAndCallback("PLAYER_ENTERING_WORLD", pixelperfect)
f:RegisterEvent("PLAYER_ENTERING_WORLD")
f:SetScript("OnEvent", pixelperfect)
pixelperfect() pixelperfect()
end end
+8 -4
View File
@@ -61,7 +61,7 @@ pfUI:RegisterModule("player", function ()
MAGE = 7, WARLOCK = 6, MAGE = 7, WARLOCK = 6,
} }
-- Compute and cache the haste/SP text; called from OnUpdate, throttled to 0.25s -- Compute the haste/SP text; called on haste, spell power and config changes
local function UpdateInfoText() local function UpdateInfoText()
local cfg = playerFrame.config local cfg = playerFrame.config
if not cfg then if not cfg then
@@ -124,9 +124,13 @@ pfUI:RegisterModule("player", function ()
end) end)
end end
-- Haste / spell-power overlay text — refreshes 4×/sec on its own ticker, -- PLAYER_DAMAGE_DONE_MODS fires on the MOD_DAMAGE_DONE fields that
-- independent of the unit frame's OnUpdate cadence. -- GetSpellBonusDamage reads, so gear, buffs and talents all reach it.
C_Timer.NewTicker(0.25, UpdateInfoText) pfUI.events:RegisterFrameEventAndCallback("PLAYER_ENTERING_WORLD", UpdateInfoText)
pfUI.events:RegisterFrameEventAndCallback("PLAYER_DAMAGE_DONE_MODS", UpdateInfoText)
pfUI.events:RegisterFrameEventAndCallback("UNIT_SPELL_HASTE", function(_, unit)
if unit == "player" then UpdateInfoText() end
end)
-- Replace default's RESET_INSTANCES button with an always working one -- Replace default's RESET_INSTANCES button with an always working one
UnitPopupButtons["RESET_INSTANCES_FIX"] = { text = RESET_INSTANCES, dist = 0 } UnitPopupButtons["RESET_INSTANCES_FIX"] = { text = RESET_INSTANCES, dist = 0 }
+23 -27
View File
@@ -74,39 +74,35 @@ pfUI:RegisterModule("questitem", function ()
frame:Show() frame:Show()
end end
pfUI.questitem = CreateFrame("Frame", "pfQuestItemScanner", UIParent) -- Seed half a second after the last trigger; each trigger pushes it back.
pfUI.questitem:RegisterEvent("PLAYER_ENTERING_WORLD") local seeding, timer
pfUI.questitem:RegisterEvent("QUEST_LOG_UPDATE") local function QueueSeed()
pfUI.questitem:RegisterEvent("QUEST_ACCEPTED")
pfUI.questitem:RegisterEvent("QUEST_REMOVED")
pfUI.questitem:SetScript("OnEvent", function()
if C.tooltip.questitem.showquest ~= "1" then return end if C.tooltip.questitem.showquest ~= "1" then return end
if event == "QUEST_ACCEPTED" then -- arg1 = logIndex, arg2 = questID seeding = true
if not AddQuest(arg2) then -- cache cold (rare) -> reseed if timer then timer:Cancel() end
this.seeding = true timer = C_Timer.NewTimer(.5, function()
this.run = GetTime() + .5 if Seed() then seeding = nil end
end end)
elseif event == "QUEST_REMOVED" then -- arg1 = questID
RemoveQuest(arg1)
elseif event == "PLAYER_ENTERING_WORLD" then
this.seeding = true -- seed pre-existing quests
this.run = GetTime() + .5
elseif event == "QUEST_LOG_UPDATE" and this.seeding then
this.run = GetTime() + .5 -- keep retrying while cache warms
end end
-- seed pre-existing quests
pfUI.events:RegisterFrameEventAndCallback("PLAYER_ENTERING_WORLD", QueueSeed)
-- keep retrying while the quest cache warms
pfUI.events:RegisterFrameEventAndCallback("QUEST_LOG_UPDATE", function()
if seeding then QueueSeed() end
end) end)
pfUI.questitem:SetScript("OnUpdate", function() -- a cold cache (rare) needs a full reseed
if not this.run or GetTime() < this.run then return end pfUI.events:RegisterFrameEventAndCallback("QUEST_ACCEPTED", function(_, _, questID)
this.run = nil if not AddQuest(questID) then QueueSeed() end
if Seed() then this.seeding = nil end
end) end)
pfUI.questitem.UpdateConfig = function() pfUI.events:RegisterFrameEventAndCallback("QUEST_REMOVED", function(_, questID)
if C.tooltip.questitem.showquest ~= "1" then return end RemoveQuest(questID)
pfUI.questitem.seeding = true end)
pfUI.questitem.run = GetTime() + .5
end pfUI.questitem = { UpdateConfig = QueueSeed }
pfUI.questitem.tooltip = CreateFrame("Frame", "pfQuestItems", GameTooltip) pfUI.questitem.tooltip = CreateFrame("Frame", "pfQuestItems", GameTooltip)
pfUI.questitem.tooltip:SetScript("OnShow", function() pfUI.questitem.tooltip:SetScript("OnShow", function()
+373
View File
@@ -0,0 +1,373 @@
pfUI:RegisterModule("radar", function ()
-- DBM-style range radar: the group around you, turned so that your facing
-- points up. ClassicAPI's UnitPosition reads every visible unit.
local SIZE = 150
local RADIUS = SIZE / 2
-- the range ring sits at two thirds of the radius, so the radar shows half
-- a range past it
local RING = RADIUS / 1.5
local RANGES = { 5, 8, 10, 15, 20, 25, 30, 40 }
-- about one storey; see Locate for what counts as another floor
local FLOOR = 5
-- alpha of units out of sight
local DIM = .3
-- the nearest members inside the range, listed under the radar
local LINES = 5
local LINE_HEIGHT = C.global.font_size + 4
local _, border = GetBorderSize()
local abs, sqrt = math.abs, math.sqrt
local UnitPosition = ClassicAPI.UnitPosition
local radar = CreateFrame("Frame", "pfRadar", UIParent)
radar:SetSize(SIZE, SIZE)
radar:SetPoint("CENTER", 350, 100)
radar:SetFrameStrata("MEDIUM")
radar:EnableMouse(true)
radar:EnableMouseWheel(true)
radar:Hide()
CreateBackdrop(radar)
CreateBackdropShadow(radar)
UpdateMovable(radar)
-- the range ring: a disc in the ring color under a 2px smaller disc in the
-- background color, which lets a little of the tint through
local DISC = "Interface\\CharacterFrame\\TempPortraitAlphaMask"
radar.ring = radar:CreateTexture(nil, "BACKGROUND")
radar.ring:SetTexture(DISC)
radar.ring:SetSize(RING * 2 + 2, RING * 2 + 2)
radar.ring:SetPoint("CENTER", 0, 0)
radar.zone = radar:CreateTexture(nil, "BORDER")
radar.zone:SetTexture(DISC)
radar.zone:SetSize(RING * 2 - 2, RING * 2 - 2)
radar.zone:SetPoint("CENTER", 0, 0)
local r, g, b = GetStringColor(C.appearance.border.background)
radar.zone:SetVertexColor(r, g, b, .85)
radar.player = radar:CreateTexture(nil, "OVERLAY")
radar.player:SetAtlas("MinimapArrow")
radar.player:SetSize(24, 24)
radar.player:SetPoint("CENTER", 0, 0)
radar.title = radar:CreateFontString(nil, "OVERLAY")
radar.title:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
radar.title:SetPoint("TOPLEFT", 4, -4)
radar.count = radar:CreateFontString(nil, "OVERLAY")
radar.count:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
radar.count:SetPoint("TOPRIGHT", -4, -4)
radar.count:SetTextColor(1, .2, .2)
radar.names = CreateFrame("Frame", nil, radar)
radar.names:SetPoint("TOPLEFT", radar, "BOTTOMLEFT", 0, -border * 3)
radar.names:SetPoint("TOPRIGHT", radar, "BOTTOMRIGHT", 0, -border * 3)
radar.names:Hide()
CreateBackdrop(radar.names)
CreateBackdropShadow(radar.names)
local range, scale
local function SetRange(yards)
range = yards
scale = RING / yards
C.radar.range = tostring(yards)
radar.title:SetText(T["Radar"] .. " (" .. yards .. " yd)")
end
SetRange(tonumber(C.radar.range))
local function IsRange(yards)
return yards == range
end
local function GenerateMenu(owner, rootDescription)
rootDescription:CreateTitle(T["Radar"])
for _, yards in ipairs(RANGES) do
rootDescription:CreateRadio(yards .. " yd", IsRange, SetRange, yards)
end
CreateMenuDivider(rootDescription)
rootDescription:CreateButton(HIDE, function() radar:Hide() end)
end
radar.menuMixin = pfUIMenuStyleMixin
local function OpenMenu()
MenuUtil.CreateContextMenu(radar, GenerateMenu)
end
-- blips and list rows: left click targets, right click opens the menu
local function TargetOrMenu()
if arg1 == "RightButton" then
OpenMenu()
else
TargetUnit(this.unit)
end
end
-- unit -> true while terrain blocks the line of sight
local blocked = {}
local hovered
local function ShowTooltip(blip)
local unit = blip.unit
GameTooltip:SetOwner(blip, "ANCHOR_RIGHT")
if UnitIsPlayer(unit) then
GameTooltip:SetText(UnitName(unit), PFUI_CLASS_COLORS[UnitClassBase(unit)]:GetRGB())
else
GameTooltip:SetText(UnitName(unit), UnitSelectionColor(unit))
end
GameTooltip:AddLine(format("%.1f yd", sqrt(blip.distSq)), 1, 1, 1)
if blocked[unit] then
GameTooltip:AddLine(T["Out of line of sight"], 1, .3, .3)
end
if blip.level then
GameTooltip:AddLine(blip.level > 0 and T["Above you"] or T["Below you"], .6, .6, .6)
end
GameTooltip:Show()
end
-- a unit on the radar: hover for its tooltip, click to target it
local function CreateBlip(size, layer)
local blip = CreateFrame("Button", nil, radar)
blip:SetSize(size, size)
blip:SetFrameLevel(radar:GetFrameLevel() + layer)
blip:SetHitRectInsets(-2, -2, -2, -2)
blip:RegisterForClicks("LeftButtonUp", "RightButtonUp")
blip:Hide()
blip.icon = blip:CreateTexture(nil, "ARTWORK")
blip.icon:SetAllPoints(blip)
-- sits above or below a unit on another floor; the triangle fills the
-- middle half of img\up and img\down
blip.arrow = blip:CreateTexture(nil, "OVERLAY")
blip.arrow:SetSize(10, 5)
blip:SetScript("OnClick", TargetOrMenu)
blip:SetScript("OnEnter", function()
hovered = this
ShowTooltip(this)
end)
blip:SetScript("OnLeave", function()
hovered = nil
GameTooltip:Hide()
end)
return blip
end
local dots = {}
local function GetDot(i)
if not dots[i] then
dots[i] = CreateBlip(8, 1)
dots[i].icon:SetTexture(pfUI.media["img:circleraid"])
end
return dots[i]
end
-- above the dots
local markers = {}
for i = 1, 8 do
markers[i] = CreateBlip(14, 2)
markers[i].icon:SetAtlas("UI-RaidTargetingIcon_" .. i)
end
local rows = {}
for i = 1, LINES do
local row = CreateFrame("Button", nil, radar.names)
row:SetPoint("TOPLEFT", 4, -2 - (i - 1) * LINE_HEIGHT)
row:SetPoint("TOPRIGHT", -4, -2 - (i - 1) * LINE_HEIGHT)
row:SetHeight(LINE_HEIGHT)
row:RegisterForClicks("LeftButtonUp", "RightButtonUp")
row:SetScript("OnClick", TargetOrMenu)
row.name = row:CreateFontString(nil, "OVERLAY")
row.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
row.name:SetPoint("LEFT", 0, 0)
row.dist = row:CreateFontString(nil, "OVERLAY")
row.dist:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
row.dist:SetPoint("RIGHT", 0, 0)
rows[i] = row
end
-- the LINES nearest members inside the range, nearest first
local nearUnit, nearDistSq = {}, {}
local function AddNear(listed, unit, distSq)
if listed == LINES and distSq >= nearDistSq[LINES] then return listed end
local i = listed < LINES and listed + 1 or LINES
while i > 1 and nearDistSq[i - 1] > distSq do
nearUnit[i], nearDistSq[i] = nearUnit[i - 1], nearDistSq[i - 1]
i = i - 1
end
nearUnit[i], nearDistSq[i] = unit, distSq
return listed < LINES and listed + 1 or LINES
end
-- the player's position and facing, read once per refresh
local py, px, pz, facing
-- where a unit shows on the radar in pixels, its squared distance, and 1
-- or -1 on a floor above or below you. nil past the edge. The world turns
-- clockwise by the facing, so ahead is up.
local function Locate(unit)
if not py or not facing then return end
if UnitIsUnit(unit, "player") or UnitIsDeadOrGhost(unit) then return end
local uy, ux, uz = UnitPosition(unit)
if not uy then return end
local west, north, up = uy - py, ux - px, uz - pz
local x, y = Vector2D_RotateDirection(-facing, -west, north)
x, y = x * scale, y * scale
if abs(x) >= RADIUS or abs(y) >= RADIUS then return end
-- another floor is a storey up or down and steeper than 45 degrees, which
-- no walkable slope is, so units up a hill don't count
local level
if abs(up) > FLOOR and up * up > west * west + north * north then
level = up > 0 and 1 or -1
end
return x, y, Vector3D_GetLengthSquared(west, north, up), level
end
local function Place(blip, unit, x, y, distSq, level, checkLoS)
if checkLoS then blocked[unit] = UnitInLineOfSight(unit) == false end
blip.unit, blip.distSq, blip.level = unit, distSq, level
blip:SetPoint("CENTER", x, y)
blip:SetAlpha(blocked[unit] and DIM or 1)
if level then
blip.arrow:SetTexture(pfUI.media[level > 0 and "img:up" or "img:down"])
blip.arrow:SetTexCoord(0, 1, .25, .75)
blip.arrow:ClearAllPoints()
if level > 0 then
blip.arrow:SetPoint("BOTTOM", blip, "TOP", 0, 1)
else
blip.arrow:SetPoint("TOP", blip, "BOTTOM", 0, -1)
end
end
blip.arrow:SetShown(level ~= nil)
blip:Show()
end
function radar:Refresh(checkLoS)
py, px, pz = UnitPosition("player")
facing = GetPlayerFacing()
local shown, inRange, listed = 0, 0, 0
local raid = IsInRaid()
local prefix = raid and "raid" or "party"
for i = 1, raid and GetNumRaidMembers() or GetNumPartyMembers() do
local unit = prefix .. i
local x, y, distSq, level = Locate(unit)
if x then
-- inside the range always means inside the radar
if distSq <= range * range then
inRange = inRange + 1
listed = AddNear(listed, unit, distSq)
end
-- a marked member shows the marker instead of a dot
if not GetRaidTargetIndex(unit) then
shown = shown + 1
local dot = GetDot(shown)
dot.icon:SetVertexColor(PFUI_CLASS_COLORS[UnitClassBase(unit)]:GetRGB())
Place(dot, unit, x, y, distSq, level, checkLoS)
end
end
end
for i = shown + 1, #dots do dots[i]:Hide() end
-- markN resolves to whatever unit wears marker N, mobs included
for i = 1, 8 do
local unit = "mark" .. i
local x, y, distSq, level = Locate(unit)
if x then
Place(markers[i], unit, x, y, distSq, level, checkLoS)
else
markers[i]:Hide()
end
end
for i = 1, LINES do
local row = rows[i]
if i <= listed then
local unit = nearUnit[i]
local marker = GetRaidTargetIndex(unit)
local name = UnitName(unit)
if marker then
-- the markup's own tint is white, so the text color leaves it alone
name = name .. " " .. CreateAtlasMarkup("UI-RaidTargetingIcon_" .. marker, 14, 14)
end
row.name:SetText(name)
row.name:SetTextColor(PFUI_CLASS_COLORS[UnitClassBase(unit)]:GetRGB())
row.dist:SetFormattedText("%.1f", sqrt(nearDistSq[i]))
row.unit = unit
end
row:SetShown(i <= listed)
end
self.names:SetHeight(listed * LINE_HEIGHT + 4)
self.names:SetShown(listed > 0)
if inRange > 0 then
self.ring:SetVertexColor(1, .2, .2)
self.count:SetText(inRange)
else
self.ring:SetVertexColor(.2, 1, .2)
self.count:SetText("")
end
-- keep the hovered tooltip's distance current
if hovered then
if hovered:IsShown() then
ShowTooltip(hovered)
else
hovered = nil
GameTooltip:Hide()
end
end
end
-- line of sight traces run at a slower rate than the positions
local throttle, losThrottle = 0, 1
radar:SetScript("OnUpdate", function()
throttle = throttle + arg1
losThrottle = losThrottle + arg1
if throttle < .05 then return end
throttle = 0
local checkLoS = losThrottle >= .25
if checkLoS then losThrottle = 0 end
this:Refresh(checkLoS)
end)
radar:SetScript("OnMouseUp", function()
if arg1 == "RightButton" then OpenMenu() end
end)
-- the wheel steps through the ranges, up zooms in
radar:SetScript("OnMouseWheel", function()
local yards = range
if arg1 > 0 then
for i = #RANGES, 1, -1 do
if RANGES[i] < range then yards = RANGES[i] break end
end
else
for i = 1, #RANGES do
if RANGES[i] > range then yards = RANGES[i] break end
end
end
SetRange(yards)
end)
-- /radar toggles, /radar <yards> sets the range and shows
pfUI.api.RegisterSlashCommand("PFRADAR", { "/radar", "/pfradar" }, function(msg)
local yards = tonumber(msg)
if yards and yards > 0 then
SetRange(yards)
radar:Show()
else
radar:SetShown(not radar:IsShown())
end
end)
pfUI.radar = radar
end)
+14 -19
View File
@@ -3,7 +3,7 @@ pfUI:RegisterModule("raid", function ()
if C.unitframes.disable == "1" then return end if C.unitframes.disable == "1" then return end
-- tell RaidFrame.lua pfUI replaces party frames -- tell RaidFrame.lua pfUI replaces party frames
HookAddonOrVariable("Blizzard_RaidUI", function() HookAddon("Blizzard_RaidUI", function()
-- must reach _G: RaidFrame.lua reads this global, and pfUI.env has -- must reach _G: RaidFrame.lua reads this global, and pfUI.env has
-- __index but no __newindex, so a bare assignment stays in the sandbox -- __index but no __newindex, so a bare assignment stays in the sandbox
_G.GROUP_REPLACE_PARTY = "1" _G.GROUP_REPLACE_PARTY = "1"
@@ -117,7 +117,7 @@ pfUI:RegisterModule("raid", function ()
self:LayoutPets() self:LayoutPets()
self:Show() self:QueueUpdate(0)
end end
function pfUI.uf.raid:LayoutPets() function pfUI.uf.raid:LayoutPets()
@@ -177,6 +177,12 @@ pfUI:RegisterModule("raid", function ()
end end
end end
-- run UpdateRoster after delay; a newer request replaces a pending one
function pfUI.uf.raid:QueueUpdate(delay)
if self.timer then self.timer:Cancel() end
self.timer = C_Timer.NewTimer(delay, function() self:UpdateRoster() end)
end
pfUI.uf.raid:UpdateConfig() pfUI.uf.raid:UpdateConfig()
local function SetRaidIndex(frame, id) local function SetRaidIndex(frame, id)
@@ -205,7 +211,6 @@ pfUI:RegisterModule("raid", function ()
end end
end end
pfUI.uf.raid:Hide()
pfUI.uf.raid:RegisterEvent("RAID_ROSTER_UPDATE") pfUI.uf.raid:RegisterEvent("RAID_ROSTER_UPDATE")
pfUI.uf.raid:RegisterEvent("PARTY_MEMBERS_CHANGED") pfUI.uf.raid:RegisterEvent("PARTY_MEMBERS_CHANGED")
pfUI.uf.raid:RegisterEvent("PARTY_LEADER_CHANGED") pfUI.uf.raid:RegisterEvent("PARTY_LEADER_CHANGED")
@@ -218,23 +223,15 @@ pfUI:RegisterModule("raid", function ()
end end
return return
end end
this:Show()
-- Debounce: delay update by 0.5s to batch rapid roster changes (mass swaps) -- Debounce: delay update by 0.5s to batch rapid roster changes (mass swaps)
this.pendingUpdate = GetTime() + 0.5 this:QueueUpdate(.5)
end) end)
pfUI.uf.raid:SetScript("OnUpdate", function()
-- Wait for debounce: don't update until 0.5s after last event
if this.pendingUpdate and GetTime() < this.pendingUpdate then return end
-- Throttle raid roster updates to 1 FPS max
if (this.tick or 0) > GetTime() then return end
this.tick = GetTime() + 1.0
this.pendingUpdate = nil
function pfUI.uf.raid:UpdateRoster()
-- Without a raid there is nothing to sort, but a party shown as a raid -- Without a raid there is nothing to sort, but a party shown as a raid
-- grid still needs its pet frames placed and mapped to the party pets. -- grid still needs its pet frames placed and mapped to the party pets.
if not IsInRaid() then if not IsInRaid() then
this:LayoutPets() self:LayoutPets()
this:Hide()
return return
end end
@@ -257,7 +254,7 @@ pfUI:RegisterModule("raid", function ()
end end
end end
this:LayoutPets() self:LayoutPets()
-- Smart GUID-based updates: only refresh frames where unit changed -- Smart GUID-based updates: only refresh frames where unit changed
if pfUI.uf.guidTracker then if pfUI.uf.guidTracker then
@@ -284,9 +281,7 @@ pfUI:RegisterModule("raid", function ()
if pfUI.uf.RebuildUnitmap then if pfUI.uf.RebuildUnitmap then
pfUI.uf.RebuildUnitmap() pfUI.uf.RebuildUnitmap()
end end
end
this:Hide()
end)
-- raid popup option to toggle tank role -- raid popup option to toggle tank role
for _, menu in pairs({"RAID", "PARTY"}) do for _, menu in pairs({"RAID", "PARTY"}) do
@@ -305,7 +300,7 @@ pfUI:RegisterModule("raid", function ()
if button and pfUI.uf.raid.tanksfirst[button] and name then if button and pfUI.uf.raid.tanksfirst[button] and name then
pfUI.uf.raid.tankrole[name] = not pfUI.uf.raid.tankrole[name] pfUI.uf.raid.tankrole[name] = not pfUI.uf.raid.tankrole[name]
pfUI.uf.raid:Show() pfUI.uf.raid:QueueUpdate(0)
end end
end) end)
end) end)
+18 -33
View File
@@ -205,36 +205,23 @@ pfUI:RegisterModule("share", function ()
table.insert(UISpecialFrames, "pfShare") table.insert(UISpecialFrames, "pfShare")
do -- Edit Box do -- Edit Box
f.scroll = pfUI.api.CreateScrollFrame("pfShareScroll", f) f.scroll = CreateFrame("Frame", "pfShareScroll", f, "pfUIScrollingEditBoxTemplate")
f.scroll:SetPoint("TOPLEFT", f, "TOPLEFT", 10, -30) f.scroll:SetPoint("TOPLEFT", f, "TOPLEFT", 10, -30)
f.scroll:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -10, 50) f.scroll:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -10, 50)
f.scroll:SetWidth(560) f.scroll:SetFont(pfUI.media["font:RobotoMono.ttf"], 9)
f.scroll:SetHeight(400) f.scroll:SetTextInsets(15,15,15,15)
f.scroll.backdrop = CreateFrame("Frame", "pfShareScrollBackdrop", f.scroll) -- the ScrollBox clips its children, so the backdrop is a sibling
f.scroll.backdrop:SetFrameLevel(1) f.scroll.backdrop = CreateFrame("Frame", "pfShareScrollBackdrop", f)
f.scroll.backdrop:SetPoint("TOPLEFT", f.scroll, "TOPLEFT", -5, 5) f.scroll.backdrop:SetPoint("TOPLEFT", f.scroll, "TOPLEFT", -5, 5)
f.scroll.backdrop:SetPoint("BOTTOMRIGHT", f.scroll, "BOTTOMRIGHT", 5, -5) f.scroll.backdrop:SetPoint("BOTTOMRIGHT", f.scroll, "BOTTOMRIGHT", 5, -5)
pfUI.api.CreateBackdrop(f.scroll.backdrop, nil, true) pfUI.api.CreateBackdrop(f.scroll.backdrop, nil, true)
f.scroll.backdrop.tint = f.scroll.backdrop:CreateTexture(nil, "ARTWORK")
f.scroll.backdrop.tint:SetAllPoints(f.scroll)
f.scroll.backdrop.tint:SetColorTexture(1,1,1,.05)
f.scroll.text = CreateFrame("EditBox", "pfShareEditBox", f.scroll) f.scroll:RegisterCallback("OnTextChanged", function()
f.scroll.text.bg = f.scroll.text:CreateTexture(nil, "OVERLAY") local text = f.scroll:GetText()
f.scroll.text.bg:SetAllPoints(f.scroll.text)
f.scroll.text.bg:SetTexture(1,1,1,.05)
f.scroll.text:SetMultiLine(true)
f.scroll.text:SetWidth(560)
f.scroll.text:SetHeight(400)
f.scroll.text:SetAllPoints(f.scroll)
f.scroll.text:SetTextInsets(15,15,15,15)
f.scroll.text:SetFont(pfUI.media["font:RobotoMono.ttf"], 9)
f.scroll.text:SetAutoFocus(false)
f.scroll.text:SetJustifyH("LEFT")
f.scroll.text:SetScript("OnEscapePressed", function() this:ClearFocus() end)
f.scroll.text:SetScript("OnTextChanged", function()
this:GetParent():UpdateScrollChildRect()
this:GetParent():UpdateScrollState()
local text = this:GetText()
local blob = Decode(text) local blob = Decode(text)
local json = not blob and DecodeJSON(text) or nil local json = not blob and DecodeJSON(text) or nil
local legacy = not blob and not json and DecodeLegacy(text) or nil local legacy = not blob and not json and DecodeLegacy(text) or nil
@@ -253,27 +240,26 @@ pfUI:RegisterModule("share", function ()
f.readButton:Enable() f.readButton:Enable()
f.readButton.text:SetText(T["Decode"]) f.readButton.text:SetText(T["Decode"])
f.readButton.func = function() f.readButton.func = function()
local current = f.scroll.text:GetText() local current = f.scroll:GetText()
local config = Decode(current) or DecodeLegacy(current) local config = Decode(current) or DecodeLegacy(current)
if config then if config then
f.scroll.text:SetText(C_EncodingUtil.SerializeJSON(config)) f.scroll:SetText(C_EncodingUtil.SerializeJSON(config))
end end
end end
elseif json then elseif json then
f.readButton:Enable() f.readButton:Enable()
f.readButton.text:SetText(T["Encode"]) f.readButton.text:SetText(T["Encode"])
f.readButton.func = function() f.readButton.func = function()
local config = DecodeJSON(f.scroll.text:GetText()) local config = DecodeJSON(f.scroll:GetText())
if config then if config then
f.scroll.text:SetText(Encode(config)) f.scroll:SetText(Encode(config))
end end
end end
else else
f.readButton:Disable() f.readButton:Disable()
f.readButton.text:SetText(T["N/A"]) f.readButton.text:SetText(T["N/A"])
end end
end) end, f)
f.scroll:SetScrollChild(f.scroll.text)
end end
do -- button: close do -- button: close
@@ -322,7 +308,7 @@ pfUI:RegisterModule("share", function ()
f.loadButton.text:SetFont(pfUI.font_default, pfUI_config.global.font_size, "OUTLINE") f.loadButton.text:SetFont(pfUI.font_default, pfUI_config.global.font_size, "OUTLINE")
f.loadButton.text:SetText(T["Import"]) f.loadButton.text:SetText(T["Import"])
f.loadButton:SetScript("OnClick", function() f.loadButton:SetScript("OnClick", function()
local text = f.scroll.text:GetText() local text = f.scroll:GetText()
local config = Decode(text) or DecodeJSON(text) or DecodeLegacy(text) local config = Decode(text) or DecodeJSON(text) or DecodeLegacy(text)
if not config then return end if not config then return end
@@ -383,9 +369,8 @@ pfUI:RegisterModule("share", function ()
ignored["disabled"] = f.ignorePosition:GetChecked() ignored["disabled"] = f.ignorePosition:GetChecked()
local encoded = Encode(DiffConfig(myconfig, defconfig, ignored) or {}) local encoded = Encode(DiffConfig(myconfig, defconfig, ignored) or {})
f.scroll.text:SetText(encoded) f.scroll:SetText(encoded)
f.scroll.text.value = encoded CopyText(encoded)
f.scroll:SetVerticalScroll(0)
end) end)
end end
+56 -12
View File
@@ -15,18 +15,6 @@ pfUI:RegisterModule("skin", function ()
DurabilityFrame:SetFrameLevel(1) DurabilityFrame:SetFrameLevel(1)
DurabilityFrame.SetPoint = function() return end DurabilityFrame.SetPoint = function() return end
if C.appearance.cd.blizzard == "1" then
hooksecurefunc("PaperDollItemSlotButton_Update", function()
local cooldown = _G[this:GetName().."Cooldown"]
if cooldown then cooldown.pfCooldownType = "BLIZZARD" end
end)
hooksecurefunc("SpellButton_UpdateButton", function()
local cooldown = _G[this:GetName().."Cooldown"]
if cooldown then cooldown.pfCooldownType = "BLIZZARD" end
end)
end
for i = 1, UIDROPDOWNMENU_MAXLEVELS do for i = 1, UIDROPDOWNMENU_MAXLEVELS do
CreateBackdrop(_G["DropDownList"..i.."MenuBackdrop"], nil, true, .8) CreateBackdrop(_G["DropDownList"..i.."MenuBackdrop"], nil, true, .8)
CreateBackdropShadow(_G["DropDownList"..i.."MenuBackdrop"]) CreateBackdropShadow(_G["DropDownList"..i.."MenuBackdrop"])
@@ -35,6 +23,62 @@ pfUI:RegisterModule("skin", function ()
CreateBackdropShadow(_G["DropDownList"..i.."Backdrop"]) CreateBackdropShadow(_G["DropDownList"..i.."Backdrop"])
end end
-- ClassicAPI menus that don't name a style of their own take pfUI's
function MenuVariants.GetDefaultMenuMixin() return pfUIMenuStyleMixin end
function MenuVariants.GetDefaultContextMenuMixin() return pfUIMenuStyleMixin end
-- ClassicAPI menus draw their checkboxes and radios with these. Both get a
-- pfUI box: a checked box holds a check, a selected radio a filled square.
local function CreateSelectionBox(frame, text)
local _, border = GetBorderSize()
local box = frame:AttachTexture()
frame.leftTexture1 = box
box:SetDrawLayer("BORDER")
box:SetPoint("LEFT")
box:SetSize(12, 12)
box:SetColorTexture(GetStringColorObject(C.appearance.border.color):GetRGBA())
local inside = frame:AttachTexture()
inside:SetDrawLayer("ARTWORK")
inside:SetPoint("TOPLEFT", box, "TOPLEFT", border, -border)
inside:SetPoint("BOTTOMRIGHT", box, "BOTTOMRIGHT", -border, border)
local r, g, b = GetStringColorObject(C.appearance.border.background):GetRGB()
inside:SetColorTexture(r, g, b, 1)
local fontString = frame:AttachFontString()
frame.fontString = fontString
fontString:SetPoint("LEFT", box, "RIGHT", 6, 0)
fontString:SetHeight(20)
fontString:SetTextToFit(text)
return box
end
function MenuVariants.CreateCheckbox(text, frame, isSelected, data)
local box = CreateSelectionBox(frame, text)
if isSelected(data) then
local check = frame:AttachTexture()
check:SetDrawLayer("OVERLAY")
check:SetPoint("CENTER", box)
check:SetSize(16, 16)
check:SetTexture("Interface\\Buttons\\UI-CheckBox-Check")
end
return box
end
function MenuVariants.CreateRadio(text, frame, isSelected, data)
local box = CreateSelectionBox(frame, text)
if isSelected(data) then
local dot = frame:AttachTexture()
dot:SetDrawLayer("OVERLAY")
dot:SetPoint("TOPLEFT", box, "TOPLEFT", 3, -3)
dot:SetPoint("BOTTOMRIGHT", box, "BOTTOMRIGHT", -3, 3)
dot:SetColorTexture(.2, 1, .8, 1)
end
return box
end
if C.global.errors_limit == "1" then if C.global.errors_limit == "1" then
UIErrorsFrame:SetHeight(25) UIErrorsFrame:SetHeight(25)
end end
+7 -16
View File
@@ -79,7 +79,7 @@ pfUI:RegisterModule("superwow", function ()
-- SuperWoW release past 1.5 -- SuperWoW release past 1.5
local swVersion = tonumber(SUPERWOW_VERSION) local swVersion = tonumber(SUPERWOW_VERSION)
if swVersion and swVersion >= 1.5 then if swVersion and swVersion >= 1.5 then
QueueFunction(function() RunNextFrame(function()
local pfCombatText_AddMessage = _G.CombatText_AddMessage local pfCombatText_AddMessage = _G.CombatText_AddMessage
_G.CombatText_AddMessage = function(message, a, b, c, d, e, f) _G.CombatText_AddMessage = function(message, a, b, c, d, e, f)
local match, _, hex = string.find(message, ".+ %[(0x.+)%]") local match, _, hex = string.find(message, ".+ %[(0x.+)%]")
@@ -95,20 +95,7 @@ pfUI:RegisterModule("superwow", function ()
-- TrackUnit API for adding group members to minimap -- TrackUnit API for adding group members to minimap
-- Tracks friendly units on the minimap for easier group coordination -- Tracks friendly units on the minimap for easier group coordination
if TrackUnit and C.unitframes.track_group == "1" then if TrackUnit and C.unitframes.track_group == "1" then
local trackFrame = CreateFrame("Frame") local function TrackGroup()
trackFrame:RegisterEvent("PARTY_MEMBERS_CHANGED")
trackFrame:RegisterEvent("RAID_ROSTER_UPDATE")
trackFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
trackFrame:RegisterEvent("PLAYER_LOGOUT")
trackFrame:SetScript("OnEvent", function()
-- Handle shutdown to prevent crash 132
if event == "PLAYER_LOGOUT" then
this:UnregisterAllEvents()
this:SetScript("OnEvent", nil)
return
end
-- Track party members -- Track party members
for i = 1, 4 do for i = 1, 4 do
local unit = "party" .. i local unit = "party" .. i
@@ -124,7 +111,11 @@ pfUI:RegisterModule("superwow", function ()
pcall(TrackUnit, unit) pcall(TrackUnit, unit)
end end
end end
end) end
pfUI.events:RegisterFrameEventAndCallback("PARTY_MEMBERS_CHANGED", TrackGroup)
pfUI.events:RegisterFrameEventAndCallback("RAID_ROSTER_UPDATE", TrackGroup)
pfUI.events:RegisterFrameEventAndCallback("PLAYER_ENTERING_WORLD", TrackGroup)
end end
-- Raid Marker Targeting API -- Raid Marker Targeting API
+50 -20
View File
@@ -23,8 +23,13 @@ pfUI:RegisterModule("swingtimer", function ()
useSpellQueueEvent = false, useSpellQueueEvent = false,
swingThrottle = 0, swingThrottle = 0,
onSwingCache = {}, onSwingCache = {},
outOfRange = {}, -- by Enum.PlayerSwingType
} }
local MAINHAND = Enum.PlayerSwingType.MainHand
local OFFHAND = Enum.PlayerSwingType.OffHand
local RANGED = Enum.PlayerSwingType.Ranged
-- On-next-swing spells replace the next auto-attack swing. -- On-next-swing spells replace the next auto-attack swing.
-- Covers Raptor Strike, Maul, Mongoose Bite, Holy Strike, etc. automatically. -- Covers Raptor Strike, Maul, Mongoose Bite, Holy Strike, etc. automatically.
local function IsOnSwingSpell(spellId) local function IsOnSwingSpell(spellId)
@@ -63,6 +68,7 @@ pfUI:RegisterModule("swingtimer", function ()
local ohR, ohG, ohB, ohA = ParseColor(C.unitframes.swingtimerohcolor, 0.3, 0.8, 0.3, 1) local ohR, ohG, ohB, ohA = ParseColor(C.unitframes.swingtimerohcolor, 0.3, 0.8, 0.3, 1)
local raR, raG, raB, raA = ParseColor(C.unitframes.swingtimerrangedcolor, 0.3, 0.6, 1.0, 1) local raR, raG, raB, raA = ParseColor(C.unitframes.swingtimerrangedcolor, 0.3, 0.6, 1.0, 1)
local rwR, rwG, rwB, rwA = ParseColor(C.unitframes.swingtimerrangedwarncolor, 0.9, 0.0, 0.0, 1) local rwR, rwG, rwB, rwA = ParseColor(C.unitframes.swingtimerrangedwarncolor, 0.9, 0.0, 0.0, 1)
local orR, orG, orB = ParseColor(C.unitframes.swingtimeroutrangecolor, 0.5, 0.5, 0.5, 1)
local isHunter = UnitClassBase("player") == "HUNTER" local isHunter = UnitClassBase("player") == "HUNTER"
local mhDefaultR, mhDefaultG, mhDefaultB = mhR, mhG, mhB local mhDefaultR, mhDefaultG, mhDefaultB = mhR, mhG, mhB
@@ -108,14 +114,14 @@ pfUI:RegisterModule("swingtimer", function ()
pfUI.swingtimer.mainhand.marker = pfUI.swingtimer.mainhand:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.mainhand.marker = pfUI.swingtimer.mainhand:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.mainhand.marker:SetTexture(1, 1, 1, 1.0) pfUI.swingtimer.mainhand.marker:SetColorTexture(1, 1, 1, 1.0)
pfUI.swingtimer.mainhand.marker:SetWidth(2) pfUI.swingtimer.mainhand.marker:SetWidth(2)
pfUI.swingtimer.mainhand.marker:SetHeight(sw_height) pfUI.swingtimer.mainhand.marker:SetHeight(sw_height)
pfUI.swingtimer.mainhand.marker:Hide() pfUI.swingtimer.mainhand.marker:Hide()
-- Left glow: fades from transparent to white (right edge = marker) -- Left glow: fades from transparent to white (right edge = marker)
pfUI.swingtimer.mainhand.markerGlowL = pfUI.swingtimer.mainhand:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.mainhand.markerGlowL = pfUI.swingtimer.mainhand:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.mainhand.markerGlowL:SetTexture(1, 1, 1, 1) pfUI.swingtimer.mainhand.markerGlowL:SetColorTexture(1, 1, 1, 1)
pfUI.swingtimer.mainhand.markerGlowL:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0, 1, 1, 1, 0.35) pfUI.swingtimer.mainhand.markerGlowL:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0, 1, 1, 1, 0.35)
pfUI.swingtimer.mainhand.markerGlowL:SetWidth(10) pfUI.swingtimer.mainhand.markerGlowL:SetWidth(10)
pfUI.swingtimer.mainhand.markerGlowL:SetHeight(sw_height) pfUI.swingtimer.mainhand.markerGlowL:SetHeight(sw_height)
@@ -123,7 +129,7 @@ pfUI:RegisterModule("swingtimer", function ()
-- Right glow: fades from white to transparent (left edge = marker) -- Right glow: fades from white to transparent (left edge = marker)
pfUI.swingtimer.mainhand.markerGlowR = pfUI.swingtimer.mainhand:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.mainhand.markerGlowR = pfUI.swingtimer.mainhand:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.mainhand.markerGlowR:SetTexture(1, 1, 1, 1) pfUI.swingtimer.mainhand.markerGlowR:SetColorTexture(1, 1, 1, 1)
pfUI.swingtimer.mainhand.markerGlowR:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0.35, 1, 1, 1, 0) pfUI.swingtimer.mainhand.markerGlowR:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0.35, 1, 1, 1, 0)
pfUI.swingtimer.mainhand.markerGlowR:SetWidth(10) pfUI.swingtimer.mainhand.markerGlowR:SetWidth(10)
pfUI.swingtimer.mainhand.markerGlowR:SetHeight(sw_height) pfUI.swingtimer.mainhand.markerGlowR:SetHeight(sw_height)
@@ -166,14 +172,14 @@ pfUI:RegisterModule("swingtimer", function ()
pfUI.swingtimer.offhand.marker = pfUI.swingtimer.offhand:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.offhand.marker = pfUI.swingtimer.offhand:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.offhand.marker:SetTexture(1, 1, 1, 1.0) pfUI.swingtimer.offhand.marker:SetColorTexture(1, 1, 1, 1.0)
pfUI.swingtimer.offhand.marker:SetWidth(2) pfUI.swingtimer.offhand.marker:SetWidth(2)
pfUI.swingtimer.offhand.marker:SetHeight(sw_height) pfUI.swingtimer.offhand.marker:SetHeight(sw_height)
pfUI.swingtimer.offhand.marker:Hide() pfUI.swingtimer.offhand.marker:Hide()
-- Left glow: fades from transparent to white (right edge = marker) -- Left glow: fades from transparent to white (right edge = marker)
pfUI.swingtimer.offhand.markerGlowL = pfUI.swingtimer.offhand:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.offhand.markerGlowL = pfUI.swingtimer.offhand:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.offhand.markerGlowL:SetTexture(1, 1, 1, 1) pfUI.swingtimer.offhand.markerGlowL:SetColorTexture(1, 1, 1, 1)
pfUI.swingtimer.offhand.markerGlowL:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0, 1, 1, 1, 0.35) pfUI.swingtimer.offhand.markerGlowL:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0, 1, 1, 1, 0.35)
pfUI.swingtimer.offhand.markerGlowL:SetWidth(10) pfUI.swingtimer.offhand.markerGlowL:SetWidth(10)
pfUI.swingtimer.offhand.markerGlowL:SetHeight(sw_height) pfUI.swingtimer.offhand.markerGlowL:SetHeight(sw_height)
@@ -181,7 +187,7 @@ pfUI:RegisterModule("swingtimer", function ()
-- Right glow: fades from white to transparent (left edge = marker) -- Right glow: fades from white to transparent (left edge = marker)
pfUI.swingtimer.offhand.markerGlowR = pfUI.swingtimer.offhand:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.offhand.markerGlowR = pfUI.swingtimer.offhand:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.offhand.markerGlowR:SetTexture(1, 1, 1, 1) pfUI.swingtimer.offhand.markerGlowR:SetColorTexture(1, 1, 1, 1)
pfUI.swingtimer.offhand.markerGlowR:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0.35, 1, 1, 1, 0) pfUI.swingtimer.offhand.markerGlowR:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0.35, 1, 1, 1, 0)
pfUI.swingtimer.offhand.markerGlowR:SetWidth(10) pfUI.swingtimer.offhand.markerGlowR:SetWidth(10)
pfUI.swingtimer.offhand.markerGlowR:SetHeight(sw_height) pfUI.swingtimer.offhand.markerGlowR:SetHeight(sw_height)
@@ -227,14 +233,14 @@ pfUI:RegisterModule("swingtimer", function ()
pfUI.swingtimer.ranged.marker = pfUI.swingtimer.ranged:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.ranged.marker = pfUI.swingtimer.ranged:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.ranged.marker:SetTexture(1, 1, 1, 1.0) pfUI.swingtimer.ranged.marker:SetColorTexture(1, 1, 1, 1.0)
pfUI.swingtimer.ranged.marker:SetWidth(2) pfUI.swingtimer.ranged.marker:SetWidth(2)
pfUI.swingtimer.ranged.marker:SetHeight(sw_height) pfUI.swingtimer.ranged.marker:SetHeight(sw_height)
pfUI.swingtimer.ranged.marker:Hide() pfUI.swingtimer.ranged.marker:Hide()
-- Left glow: fades from transparent to white (right edge = marker) -- Left glow: fades from transparent to white (right edge = marker)
pfUI.swingtimer.ranged.markerGlowL = pfUI.swingtimer.ranged:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.ranged.markerGlowL = pfUI.swingtimer.ranged:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.ranged.markerGlowL:SetTexture(1, 1, 1, 1) pfUI.swingtimer.ranged.markerGlowL:SetColorTexture(1, 1, 1, 1)
pfUI.swingtimer.ranged.markerGlowL:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0, 1, 1, 1, 0.35) pfUI.swingtimer.ranged.markerGlowL:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0, 1, 1, 1, 0.35)
pfUI.swingtimer.ranged.markerGlowL:SetWidth(10) pfUI.swingtimer.ranged.markerGlowL:SetWidth(10)
pfUI.swingtimer.ranged.markerGlowL:SetHeight(sw_height) pfUI.swingtimer.ranged.markerGlowL:SetHeight(sw_height)
@@ -242,7 +248,7 @@ pfUI:RegisterModule("swingtimer", function ()
-- Right glow: fades from white to transparent (left edge = marker) -- Right glow: fades from white to transparent (left edge = marker)
pfUI.swingtimer.ranged.markerGlowR = pfUI.swingtimer.ranged:CreateTexture(nil, "OVERLAY") pfUI.swingtimer.ranged.markerGlowR = pfUI.swingtimer.ranged:CreateTexture(nil, "OVERLAY")
pfUI.swingtimer.ranged.markerGlowR:SetTexture(1, 1, 1, 1) pfUI.swingtimer.ranged.markerGlowR:SetColorTexture(1, 1, 1, 1)
pfUI.swingtimer.ranged.markerGlowR:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0.35, 1, 1, 1, 0) pfUI.swingtimer.ranged.markerGlowR:SetGradientAlpha("HORIZONTAL", 1, 1, 1, 0.35, 1, 1, 1, 0)
pfUI.swingtimer.ranged.markerGlowR:SetWidth(10) pfUI.swingtimer.ranged.markerGlowR:SetWidth(10)
pfUI.swingtimer.ranged.markerGlowR:SetHeight(sw_height) pfUI.swingtimer.ranged.markerGlowR:SetHeight(sw_height)
@@ -258,12 +264,8 @@ pfUI:RegisterModule("swingtimer", function ()
-- weapons (22); main-hand-only (21) can never sit there. -- weapons (22); main-hand-only (21) can never sit there.
local OH_WEAPON_TYPES = { [13]=true, [22]=true } local OH_WEAPON_TYPES = { [13]=true, [22]=true }
local function HasOffhandWeapon() local function HasOffhandWeapon()
local l = GetInventoryItemLink("player", 17) local invType = C_Item.GetItemInventoryType({ equipmentSlotIndex = INVSLOT_OFFHAND })
if not l then return false end return OH_WEAPON_TYPES[invType] == true
local _, _, id = string.find(l, "item:(%d+)")
id = tonumber(id)
if not id then return false end
return OH_WEAPON_TYPES[C_Item.GetItemInventoryTypeByID(id)] == true
end end
local function UpdateWeaponSpeeds() local function UpdateWeaponSpeeds()
@@ -503,6 +505,10 @@ pfUI:RegisterModule("swingtimer", function ()
end end
-- Render MH -- Render MH
if S.outOfRange[MAINHAND] then
curR, curG, curB = orR, orG, orB
end
if S.mhActive then if S.mhActive then
local progress = 1 - (S.mhTimer / S.mhTimerMax) local progress = 1 - (S.mhTimer / S.mhTimerMax)
pfUI.swingtimer.mainhand:SetValue(progress) pfUI.swingtimer.mainhand:SetValue(progress)
@@ -542,6 +548,11 @@ pfUI:RegisterModule("swingtimer", function ()
if sw_showoh and S.ohActive then if sw_showoh and S.ohActive then
local progress = 1 - (S.ohTimer / S.ohTimerMax) local progress = 1 - (S.ohTimer / S.ohTimerMax)
pfUI.swingtimer.offhand:SetValue(progress) pfUI.swingtimer.offhand:SetValue(progress)
if S.outOfRange[OFFHAND] then
pfUI.swingtimer.offhand:SetStatusBarColor(orR, orG, orB, ohA)
else
pfUI.swingtimer.offhand:SetStatusBarColor(ohR, ohG, ohB, ohA)
end
if S.ohTimer <= 0 then if S.ohTimer <= 0 then
if S.lastOhMarkerX ~= -1 then if S.lastOhMarkerX ~= -1 then
S.lastOhMarkerX = -1 S.lastOhMarkerX = -1
@@ -577,13 +588,13 @@ pfUI:RegisterModule("swingtimer", function ()
-- Render Ranged -- Render Ranged
if sw_showranged and S.raActive then if sw_showranged and S.raActive then
local remaining = S.raTimer local remaining = S.raTimer
local r, g, b, a = raR, raG, raB, raA
if isHunter then if isHunter then
local DEADZONE = 0.5 local DEADZONE = 0.5
if remaining > DEADZONE then if remaining > DEADZONE then
pfUI.swingtimer.ranged:SetStatusBarColor(raR, raG, raB, raA)
pfUI.swingtimer.ranged:SetValue((remaining - DEADZONE) / (S.raTimerMax - DEADZONE)) pfUI.swingtimer.ranged:SetValue((remaining - DEADZONE) / (S.raTimerMax - DEADZONE))
else else
pfUI.swingtimer.ranged:SetStatusBarColor(rwR, rwG, rwB, rwA) r, g, b, a = rwR, rwG, rwB, rwA
pfUI.swingtimer.ranged:SetValue(1 - (remaining / DEADZONE)) pfUI.swingtimer.ranged:SetValue(1 - (remaining / DEADZONE))
end end
if sw_showtext then if sw_showtext then
@@ -599,6 +610,10 @@ pfUI:RegisterModule("swingtimer", function ()
pfUI.swingtimer.ranged.text:SetFormattedText("%.1f", math.floor(remaining * 10) / 10) pfUI.swingtimer.ranged.text:SetFormattedText("%.1f", math.floor(remaining * 10) / 10)
end end
end end
if S.outOfRange[RANGED] then
r, g, b = orR, orG, orB
end
pfUI.swingtimer.ranged:SetStatusBarColor(r, g, b, a)
if sw_showspeed and S.raSpeed > 0 then if sw_showspeed and S.raSpeed > 0 then
pfUI.swingtimer.ranged.speed:SetFormattedText("%.2f", S.raSpeed) pfUI.swingtimer.ranged.speed:SetFormattedText("%.2f", S.raSpeed)
end end
@@ -637,6 +652,7 @@ pfUI:RegisterModule("swingtimer", function ()
local events = CreateFrame("Frame") local events = CreateFrame("Frame")
events:RegisterEvent("PLAYER_SWING") events:RegisterEvent("PLAYER_SWING")
events:RegisterEvent("PLAYER_SWING_RANGE_UPDATE")
events:RegisterEvent("PLAYER_ENTERING_WORLD") events:RegisterEvent("PLAYER_ENTERING_WORLD")
events:RegisterEvent("PLAYER_EQUIPMENT_CHANGED") -- ClassicAPI: per-slot, equipment-only events:RegisterEvent("PLAYER_EQUIPMENT_CHANGED") -- ClassicAPI: per-slot, equipment-only
events:RegisterEvent("PLAYER_REGEN_DISABLED") events:RegisterEvent("PLAYER_REGEN_DISABLED")
@@ -654,14 +670,19 @@ pfUI:RegisterModule("swingtimer", function ()
-- ClassicAPI tracks the server's swing clock (white hits, on-next-swing -- ClassicAPI tracks the server's swing clock (white hits, on-next-swing
-- abilities, swing-reset casts, parry haste, extra attacks, weapon -- abilities, swing-reset casts, parry haste, extra attacks, weapon
-- swaps) and hands over the seconds left until the next swing. -- swaps) and hands over the seconds left until the next swing.
if arg2 == Enum.PlayerSwingType.MainHand then if arg2 == MAINHAND then
StartMH(arg1) StartMH(arg1)
elseif arg2 == Enum.PlayerSwingType.OffHand then elseif arg2 == OFFHAND then
StartOH(arg1) StartOH(arg1)
elseif arg2 == Enum.PlayerSwingType.Ranged then elseif arg2 == RANGED then
StartRanged(arg1) StartRanged(arg1)
end end
elseif event == "PLAYER_SWING_RANGE_UPDATE" then
-- arg1 = swingType, arg2 = isInRange, arg3 = checksRange; no check
-- (no target, nothing to attack, no weapon) is not out of range
S.outOfRange[arg1] = arg3 and not arg2
elseif event == "UNIT_SPELLCAST_SENT" then elseif event == "UNIT_SPELLCAST_SENT" then
-- arg4 = spellID: an on-next-swing ability (HS / Cleave / Maul) queued -- arg4 = spellID: an on-next-swing ability (HS / Cleave / Maul) queued
local kind = ClassifyOnSwingSpell(arg4) local kind = ClassifyOnSwingSpell(arg4)
@@ -773,5 +794,14 @@ pfUI:RegisterModule("swingtimer", function ()
IsMaulQueued = function() return S.maulQueued end, IsMaulQueued = function() return S.maulQueued end,
} }
-- the range event fires only on a change, so read the state once
local function EnableRangeCheck(swingType)
C_SwingTimer.EnableRangeCheck(swingType, true)
S.outOfRange[swingType] = C_SwingTimer.IsTargetWithinSwingRange(swingType) == false
end
EnableRangeCheck(MAINHAND)
if sw_showoh then EnableRangeCheck(OFFHAND) end
if sw_showranged then EnableRangeCheck(RANGED) end
UpdateWeaponSpeeds() UpdateWeaponSpeeds()
end) end)
+23
View File
@@ -10,4 +10,27 @@ pfUI:RegisterModule("target", function ()
pfUI.uf.target:UpdateFrameSize() pfUI.uf.target:UpdateFrameSize()
pfUI.uf.target:SetPoint("BOTTOMLEFT", UIParent, "BOTTOM", 75, 125) pfUI.uf.target:SetPoint("BOTTOMLEFT", UIParent, "BOTTOM", 75, 125)
UpdateMovable(pfUI.uf.target) UpdateMovable(pfUI.uf.target)
-- "NO LOS" in the bottom third of the frame, below unitxp's behind indicator
if C.unitframes.los_indicator == "1" then
local los = CreateFrame("Frame", "pfLoSIndicator", pfUI.uf.target)
los:SetAllPoints(pfUI.uf.target)
los:SetFrameLevel(pfUI.uf.target:GetFrameLevel() + 10)
los.text = los:CreateFontString(nil, "OVERLAY")
los.text:SetFont(pfUI.font_default, tonumber(C.unitframes.indicator_font_size) or (C.global.font_size + 2), "OUTLINE")
los.text:SetPoint("RIGHT", los, "RIGHT", -1, -pfUI.uf.target:GetHeight() / 3)
los.text:SetTextColor(1, 0.3, 0.3, 1)
los.text:SetText(T["NO LOS"])
los.text:Hide()
local lastCheck = 0
los:SetScript("OnUpdate", function()
if GetTime() - lastCheck < 0.2 then return end
lastCheck = GetTime()
-- nil without a target
this.text:SetShown(UnitInLineOfSight("target") == false)
end)
end
end) end)
+1 -1
View File
@@ -2,7 +2,7 @@ pfUI:RegisterModule("targettarget", function ()
-- do not go further on disabled UFs -- do not go further on disabled UFs
if C.unitframes.disable == "1" then return end if C.unitframes.disable == "1" then return end
pfUI.uf.targettarget = pfUI.uf:CreateUnitFrame("TargetTarget", nil, C.unitframes.ttarget, .2) pfUI.uf.targettarget = pfUI.uf:CreateUnitFrame("TargetTarget", nil, C.unitframes.ttarget)
pfUI.uf.targettarget:UpdateFrameSize() pfUI.uf.targettarget:UpdateFrameSize()
pfUI.uf.targettarget:SetPoint("BOTTOM", UIParent , "BOTTOM", 0, 125) pfUI.uf.targettarget:SetPoint("BOTTOM", UIParent , "BOTTOM", 0, 125)
UpdateMovable(pfUI.uf.targettarget) UpdateMovable(pfUI.uf.targettarget)
+1 -1
View File
@@ -2,7 +2,7 @@ pfUI:RegisterModule("targettargettarget", function ()
-- do not go further on disabled UFs -- do not go further on disabled UFs
if C.unitframes.disable == "1" then return end if C.unitframes.disable == "1" then return end
pfUI.uf.targettargettarget = pfUI.uf:CreateUnitFrame("TargetTargetTarget", nil, C.unitframes.tttarget, .2) pfUI.uf.targettargettarget = pfUI.uf:CreateUnitFrame("TargetTargetTarget", nil, C.unitframes.tttarget)
pfUI.uf.targettargettarget:UpdateFrameSize() pfUI.uf.targettargettarget:UpdateFrameSize()
pfUI.uf.targettargettarget:SetPoint("BOTTOM", UIParent , "BOTTOM", 0, 200) pfUI.uf.targettargettarget:SetPoint("BOTTOM", UIParent , "BOTTOM", 0, 200)
UpdateMovable(pfUI.uf.targettargettarget) UpdateMovable(pfUI.uf.targettargettarget)
+28 -45
View File
@@ -3,7 +3,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
if not pfUI.thirdparty then return end if not pfUI.thirdparty then return end
local rawborder, default_border = GetBorderSize() local rawborder, default_border = GetBorderSize()
HookAddonOrVariable("KLHThreatMeter", function() HookAddon("KLHThreatMeter", function()
local ktm_scale = 1 local ktm_scale = 1
local function GetKtmWidthDiff(view, match_size) local function GetKtmWidthDiff(view, match_size)
local default_width = 0 local default_width = 0
@@ -122,7 +122,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
-- remove red background on some buttons -- remove red background on some buttons
for i,v in ipairs({b:GetRegions()}) do for i,v in ipairs({b:GetRegions()}) do
if v.SetTexture and i == 1 then if v.SetTexture and i == 1 then
v:SetTexture(0,0,0,0) v:SetColorTexture(0,0,0,0)
end end
end end
@@ -159,7 +159,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end end
end) end)
HookAddonOrVariable("TWThreat", function() HookAddon("TWThreat", function()
local docktable = { "twt", "TODO", "TWTMain", local docktable = { "twt", "TODO", "TWTMain",
function() -- single function() -- single
TWTMain:ClearAllPoints() TWTMain:ClearAllPoints()
@@ -232,7 +232,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end end
end) end)
HookAddonOrVariable("SW_Stats", function() HookAddon("SW_Stats", function()
local docktable = { "swstats", "TODO", "SW_BarFrame1", local docktable = { "swstats", "TODO", "SW_BarFrame1",
function() -- single function() -- single
SW_BarFrame1:SetWidth(pfUI.chat.right:GetWidth()) SW_BarFrame1:SetWidth(pfUI.chat.right:GetWidth())
@@ -518,7 +518,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end end
end) end)
HookAddonOrVariable("WIM", function() HookAddon("WIM", function()
if C.thirdparty.wim.enable == "0" then return end if C.thirdparty.wim.enable == "0" then return end
-- use pfUI link handler if available -- use pfUI link handler if available
@@ -798,7 +798,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
-- SortBags -- SortBags
-- Vanilla: https://github.com/shirsig/SortBags-vanilla -- Vanilla: https://github.com/shirsig/SortBags-vanilla
HookAddonOrVariable("SortBags", function() HookAddon("SortBags", function()
if C.thirdparty.sortbags.enable == "0" then return end if C.thirdparty.sortbags.enable == "0" then return end
local sort = CreateFrame("Frame", nil) local sort = CreateFrame("Frame", nil)
@@ -828,7 +828,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end) end)
end) end)
HookAddonOrVariable("FlightMap", function() HookAddon("FlightMap", function()
if C.thirdparty.flightmap.enable == "0" then return end if C.thirdparty.flightmap.enable == "0" then return end
FlightMapTimesBorder:Hide() FlightMapTimesBorder:Hide()
@@ -844,7 +844,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
FlightMapTimesText:SetFont(pfUI.font_default, 12, "OUTLINE") FlightMapTimesText:SetFont(pfUI.font_default, 12, "OUTLINE")
end) end)
HookAddonOrVariable("TheoryCraft_SetUpButton", function() HookAddon("TheoryCraft", function()
if C.thirdparty.theorycraft.enable == "0" then return end if C.thirdparty.theorycraft.enable == "0" then return end
-- set pfUI bar font -- set pfUI bar font
@@ -862,7 +862,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end end
end) end)
HookAddonOrVariable("SM_GetActionSpell", function() HookAddon("SuperMacro", function()
if C.thirdparty.supermacro.enable == "0" then return end if C.thirdparty.supermacro.enable == "0" then return end
if not pfUI.bars then return end if not pfUI.bars then return end
@@ -885,18 +885,15 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end end
-- hook events to include SuperMacro refreshs -- hook events to include SuperMacro refreshs
local ButtonEnter = pfUI.bars[1][1]:GetScript("OnEnter")
local function NewButtonEnter() local function NewButtonEnter()
ButtonEnter() SM_ActionButton_SetTooltip(ActionButton_GetPagedID(this))
local actionid = ActionButton_GetPagedID(this)
SM_ActionButton_SetTooltip(actionid)
end end
-- reassign the new event handler -- reassign the new event handler
for i=1,10 do for i=1,10 do
for j=1,12 do for j=1,12 do
pfUI.bars[i][j]:SetScript("OnEvent", NewButtonEvent) pfUI.bars[i][j]:SetScript("OnEvent", NewButtonEvent)
pfUI.bars[i][j]:SetScript("OnEnter", NewButtonEnter) pfUI.bars[i][j]:HookScript("OnEnter", NewButtonEnter)
end end
end end
@@ -908,7 +905,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
-- CleverMacro -- CleverMacro
-- https://github.com/DanielAdolfsson/CleverMacro -- https://github.com/DanielAdolfsson/CleverMacro
HookAddonOrVariable("CleverMacro", function() HookAddon("CleverMacro", function()
if C.thirdparty.clevermacro.enable == "0" then return end if C.thirdparty.clevermacro.enable == "0" then return end
-- get pfUI actionbar event handler -- get pfUI actionbar event handler
@@ -925,7 +922,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end) end)
-- SuperCleveRoidMacros -- SuperCleveRoidMacros
HookAddonOrVariable("SuperCleveRoidMacros", function() HookAddon("SuperCleveRoidMacros", function()
if C.thirdparty.supercleveroidmacros.enable == "0" then return end if C.thirdparty.supercleveroidmacros.enable == "0" then return end
if not pfUI.bars then return end if not pfUI.bars then return end
@@ -933,7 +930,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
pfUI.bars.skip_macro = true pfUI.bars.skip_macro = true
end) end)
HookAddonOrVariable("AtlasLoot", function() HookAddon("AtlasLoot", function()
if C.thirdparty.atlasloot.enable == "0" then return end if C.thirdparty.atlasloot.enable == "0" then return end
CreateBackdrop(AtlasLootTooltip) CreateBackdrop(AtlasLootTooltip)
@@ -948,7 +945,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end end
end) end)
HookAddonOrVariable("crafty", function() HookAddon("crafty", function()
if C.thirdparty.crafty.enable == "0" then return end if C.thirdparty.crafty.enable == "0" then return end
local craftyskin = CreateFrame("Frame", nil, UIParent) local craftyskin = CreateFrame("Frame", nil, UIParent)
@@ -1011,7 +1008,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end) end)
end) end)
HookAddonOrVariable("BetterCharacterStats", function() HookAddon("BetterCharacterStats", function()
if C.thirdparty.bcs.enable == "0" then return end if C.thirdparty.bcs.enable == "0" then return end
StripTextures(BetterCharacterAttributesFrame) StripTextures(BetterCharacterAttributesFrame)
@@ -1028,7 +1025,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end end
end) end)
HookAddonOrVariable("MyRolePlay", function() HookAddon("MyRolePlay", function()
if C.thirdparty.myroleplay.enable == "0" then return end if C.thirdparty.myroleplay.enable == "0" then return end
if pfUI.uf.target then if pfUI.uf.target then
@@ -1045,15 +1042,13 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
if pfUI.uf.player then if pfUI.uf.player then
-- set tooltip function for player frame -- set tooltip function for player frame
local oldfunc = pfUI.uf.player:GetScript("OnEnter") pfUI.uf.player:HookScript("OnEnter", function()
pfUI.uf.player:SetScript("OnEnter", function()
oldfunc()
mrpDisplayTooltip("player", "PLAYER") mrpDisplayTooltip("player", "PLAYER")
end) end)
end end
end) end)
HookAddonOrVariable("DruidManaBarBackground", function() HookAddon("DruidManaBarBackground", function()
if C.thirdparty.druidmana.enable == "0" then return end if C.thirdparty.druidmana.enable == "0" then return end
DruidManaBar:SetParent(UIParent) DruidManaBar:SetParent(UIParent)
DruidManaBar.bd:Hide() DruidManaBar.bd:Hide()
@@ -1082,7 +1077,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
UpdateMovable(DruidManaBar) UpdateMovable(DruidManaBar)
end) end)
HookAddonOrVariable("NoteIt", function() HookAddon("NoteIt", function()
if C.thirdparty.noteit.enable == "0" then return end if C.thirdparty.noteit.enable == "0" then return end
-- Main window -- Main window
@@ -1172,33 +1167,21 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
end) end)
local EnableHealComm = function() local EnableHealComm = function()
-- hook healcomm's addon message to parse single-player events -- HealComm-1.0 already broadcasts this player's casts: keep libpredict
-- tracking them, but stop it sending a second copy
if AceLibrary and AceLibrary:HasInstance("HealComm-1.0") and pfUI.api.libpredict then if AceLibrary and AceLibrary:HasInstance("HealComm-1.0") and pfUI.api.libpredict then
local HealComm = AceLibrary("HealComm-1.0")
-- use pfUI frames to draw healComm predictions
local pfHookHealCommSendAddonMessage = HealComm.SendAddonMessage
function HealComm.SendAddonMessage(this, msg)
if not IsInGroup() then
libpredict:ParseChatMessage(UnitName("player"), msg, "HealComm")
end
pfHookHealCommSendAddonMessage(this, msg)
end
-- disable pfUI predictions
pfUI.api.libpredict.sender:UnregisterAllEvents()
pfUI.api.libpredict.sender.enabled = nil pfUI.api.libpredict.sender.enabled = nil
end end
end end
HookAddonOrVariable("HealComm", EnableHealComm) HookAddon("HealComm", EnableHealComm)
HookAddonOrVariable("LunaUnitFrames", EnableHealComm) HookAddon("LunaUnitFrames", EnableHealComm)
HookAddonOrVariable("NotGrid", EnableHealComm) HookAddon("NotGrid", EnableHealComm)
HookAddonOrVariable("HardcoreDeath", function() HookAddon("HardcoreDeath", function()
GameMenuFrame:SetHeight(GameMenuFrame:GetHeight() + 20) GameMenuFrame:SetHeight(GameMenuFrame:GetHeight() + 20)
end) end)
HookAddonOrVariable("MacroExtender", function() HookAddon("MacroExtender", function()
-- Macro Extender moves the character dialog from frame-stata "dialog" -- Macro Extender moves the character dialog from frame-stata "dialog"
-- to "low" and by that moves the frame below backgrounds, quest-trackers, -- to "low" and by that moves the frame below backgrounds, quest-trackers,
-- and what not... it does this because the buttons it attempts to add, are -- and what not... it does this because the buttons it attempts to add, are
@@ -1220,7 +1203,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
-- UnitXP SP3 compatibility -- UnitXP SP3 compatibility
-- https://github.com/allfoxwy/UnitXP_SP3 -- https://github.com/allfoxwy/UnitXP_SP3
HookAddonOrVariable("UnitXP_SP3_Addon", function() HookAddon("UnitXP_SP3_Addon", function()
-- skin UnitXP SP3 window and elements -- skin UnitXP SP3 window and elements
StripTextures(xpsp3Frame) StripTextures(xpsp3Frame)
CreateBackdrop(xpsp3Frame) CreateBackdrop(xpsp3Frame)
+10 -9
View File
@@ -74,11 +74,7 @@ pfUI:RegisterModule("thirdparty", function()
-- show/hide right chatframe -- show/hide right chatframe
if pfUI.chat and C.chat.right.enable == "1" then if pfUI.chat and C.chat.right.enable == "1" then
-- make sure the panel header stays hidden -- make sure the panel header stays hidden
if self.state then pfUI.chat.right.panelTop:SetShown(self.state)
pfUI.chat.right.panelTop:Show()
else
pfUI.chat.right.panelTop:Hide()
end
-- set chat visibility -- set chat visibility
pfUI.chat.right:SetAlpha(self.state and 1 or 0) pfUI.chat.right:SetAlpha(self.state and 1 or 0)
@@ -143,7 +139,7 @@ pfUI:RegisterModule("thirdparty", function()
-- MrPlow Bag Sorting Addon. -- MrPlow Bag Sorting Addon.
-- Vanilla: https://www.wowace.com/projects/mr-plow/files/288059 -- Vanilla: https://www.wowace.com/projects/mr-plow/files/288059
-- TBC: https://www.wowace.com/projects/mr-plow/files/136162 -- TBC: https://www.wowace.com/projects/mr-plow/files/136162
HookAddonOrVariable("MrPlow", function() HookAddon("MrPlow", function()
if C.thirdparty.mrplow.enable == "0" then return end if C.thirdparty.mrplow.enable == "0" then return end
local sort = CreateFrame("Frame", nil) local sort = CreateFrame("Frame", nil)
@@ -179,7 +175,7 @@ pfUI:RegisterModule("thirdparty", function()
-- ShaguDPS Damage Meter -- ShaguDPS Damage Meter
-- Vanilla: https://github.com/shagu/ShaguDPS -- Vanilla: https://github.com/shagu/ShaguDPS
-- TBC: https://github.com/shagu/ShaguDPS -- TBC: https://github.com/shagu/ShaguDPS
HookAddonOrVariable("ShaguDPS", function() HookAddon("ShaguDPS", function()
local docktable = { "shagudps", "ShaguDPS", "ShaguDPSWindow", local docktable = { "shagudps", "ShaguDPS", "ShaguDPSWindow",
function() -- single function() -- single
ShaguDPSWindow:ClearAllPoints() ShaguDPSWindow:ClearAllPoints()
@@ -284,7 +280,7 @@ pfUI:RegisterModule("thirdparty", function()
-- dock slot; a second window (GreedMeter.UI.frames[2]) takes the "threat" -- dock slot; a second window (GreedMeter.UI.frames[2]) takes the "threat"
-- slot so the two tile the panel side-by-side. Docking triggers a -- slot so the two tile the panel side-by-side. Docking triggers a
-- LayoutBars/RefreshFrame so the bars refit the new width. -- LayoutBars/RefreshFrame so the bars refit the new width.
HookAddonOrVariable("GreedMeter", function() HookAddon("GreedMeter", function()
local UI = GreedMeter.UI local UI = GreedMeter.UI
local function frameAt(i) local function frameAt(i)
@@ -377,7 +373,12 @@ pfUI:RegisterModule("thirdparty", function()
-- DPSMate Damage Meter -- DPSMate Damage Meter
-- Vanilla: https://github.com/Geigerkind/DPSMate -- Vanilla: https://github.com/Geigerkind/DPSMate
-- TBC: https://github.com/Geigerkind/DPSMateTBC -- TBC: https://github.com/Geigerkind/DPSMateTBC
HookAddonOrVariable("DPSMate_DPSMate", function() HookAddon("DPSMate", function()
-- DPSMate builds its windows on VARIABLES_LOADED, each named after its
-- settings entry, so DPSMate_DPSMate exists only while the first window
-- keeps the default name "DPSMate"
if not DPSMate_DPSMate then return end
local docktable = { "dpsmate", "DPSMate", "DPSMate_DPSMate", local docktable = { "dpsmate", "DPSMate", "DPSMate_DPSMate",
function() -- single function() -- single
DPSMate_DPSMate:ClearAllPoints() DPSMate_DPSMate:ClearAllPoints()
+53 -35
View File
@@ -95,7 +95,16 @@ pfUI:RegisterModule("tooltip", function ()
pfUI.tooltip:SetAllPoints() pfUI.tooltip:SetAllPoints()
pfUI.tooltip:SetScript("OnShow", function() pfUI.tooltip:SetScript("OnShow", function()
pfUI.tooltip:Update() if C.tooltip.itemid == "1" and GameTooltip:HasItem() then
local _, _, itemID = GameTooltip:GetItem()
GameTooltip:AddLine(T["ItemID"] .. ": " .. itemID, .25,.5,1)
GameTooltip:Show()
elseif C.tooltip.spellid == "1" and GameTooltip:HasSpell() then
local _, _, spellID = GameTooltip:GetSpell()
GameTooltip:AddLine(T["SpellID"] .. ": " .. spellID, .25,.5,1)
GameTooltip:Show()
end
if GameTooltip:GetAnchorType() == "ANCHOR_NONE" then if GameTooltip:GetAnchorType() == "ANCHOR_NONE" then
GameTooltip:ClearAllPoints() GameTooltip:ClearAllPoints()
if C.tooltip.position == "bottom" then if C.tooltip.position == "bottom" then
@@ -207,10 +216,7 @@ pfUI:RegisterModule("tooltip", function ()
icon.stacks:SetFont(C.tooltip.font_tooltip, C.tooltip.font_tooltip_size, "OUTLINE") icon.stacks:SetFont(C.tooltip.font_tooltip, C.tooltip.font_tooltip_size, "OUTLINE")
icon.stacks:SetTextColor(1, 1, 1, 1) icon.stacks:SetTextColor(1, 1, 1, 1)
icon.timer = icon:CreateFontString(nil, "OVERLAY", "GameFontNormal") icon.cd = CreateCooldown(icon, "tooltip")
icon.timer:SetPoint("CENTER", icon, "CENTER", 0, 0)
icon.timer:SetFont(C.tooltip.font_tooltip, C.tooltip.font_tooltip_size, "OUTLINE")
icon.timer:SetTextColor(1, 1, 1, 1)
return icon return icon
end end
@@ -219,18 +225,6 @@ pfUI:RegisterModule("tooltip", function ()
icon:ClearAllPoints() icon:ClearAllPoints()
end) end)
-- Tick the remaining-time text on the visible icons. OnUpdate only fires
-- while the row is shown, so it stops as soon as the tooltip hides.
pfUI.tooltip.buffs:SetScript("OnUpdate", function()
local now = GetTime()
if (this.tick or 0) > now then return end
this.tick = now + 0.1
for icon in pfUI.tooltip.buffpool:EnumerateActive() do
local timeleft = icon.expirationTime and icon.expirationTime > 0 and (icon.expirationTime - now) or 0
icon.timer:SetText(timeleft > 0 and GetColoredTimeString(timeleft) or "")
end
end)
function pfUI.tooltip:UpdateBuffs(unit) function pfUI.tooltip:UpdateBuffs(unit)
pfUI.tooltip.buffpool:ReleaseAll() pfUI.tooltip.buffpool:ReleaseAll()
@@ -244,7 +238,7 @@ pfUI:RegisterModule("tooltip", function ()
-- table and no per-index re-walk of the aura array -- table and no per-index re-walk of the aura array
local n = ScanAuraSlots(unit, "HELPFUL", auraSlots, BUFF_MAX) local n = ScanAuraSlots(unit, "HELPFUL", auraSlots, BUFF_MAX)
for i = 1, n do for i = 1, n do
local name, texture, applications, _, _, expirationTime = C_UnitAuras.UnitAuraBySlot(unit, auraSlots[i]) local name, texture, applications, _, duration, expirationTime = C_UnitAuras.UnitAuraBySlot(unit, auraSlots[i])
if not name then break end if not name then break end
count = count + 1 count = count + 1
@@ -252,9 +246,8 @@ pfUI:RegisterModule("tooltip", function ()
icon.texture:SetTexture(texture) icon.texture:SetTexture(texture)
icon.stacks:SetText(applications and applications > 1 and applications or "") icon.stacks:SetText(applications and applications > 1 and applications or "")
icon.expirationTime = expirationTime local start, dur = GetAuraTimer(duration, expirationTime)
local timeleft = expirationTime and expirationTime > 0 and (expirationTime - GetTime()) or 0 CooldownFrame_SetTimer(icon.cd, start, dur, dur > 0 and 1 or 0)
icon.timer:SetText(timeleft > 0 and GetColoredTimeString(timeleft) or "")
if prev then if prev then
icon:SetPoint("LEFT", prev, "RIGHT", BUFF_SPACING, 0) icon:SetPoint("LEFT", prev, "RIGHT", BUFF_SPACING, 0)
@@ -273,22 +266,47 @@ pfUI:RegisterModule("tooltip", function ()
end end
end end
function pfUI.tooltip:Update() -- A unit tooltip names the unit's target, so it rebuilds when that changes:
local unit = pfUI.tooltip:GetUnit() -- UNIT_TARGET by the unit's GUID, which unit events fire with whatever token
pfUI.tooltip:UpdateBuffs(unit) -- names the unit. SetUnit re-runs OnTooltipSetUnit and with it UpdateUnit.
if unit == "none" then -- It goes through the token the tooltip was built from -- "mouseover" for a
if C.tooltip.itemid == "1" and GameTooltip:HasItem() then -- world unit stops naming it once the cursor leaves, so a fading tooltip is
local _, _, itemID = GameTooltip:GetItem() -- left to fade -- and waits a frame: the rebuild re-points this frame's
GameTooltip:AddLine(T["ItemID"] .. ": " .. itemID, .25,.5,1) -- registration, which the dispatch is still walking.
GameTooltip:Show() local function Retarget()
elseif C.tooltip.spellid == "1" and GameTooltip:HasSpell() then local _, unit = GameTooltip:GetUnit()
local _, _, spellID = GameTooltip:GetSpell() local _, guid = GameTooltip:GetUnitGUID()
GameTooltip:AddLine(T["SpellID"] .. ": " .. spellID, .25,.5,1) if unit and GameTooltip:IsShown() and UnitGUID(unit) == guid then
GameTooltip:Show() GameTooltip:SetUnit(unit)
end
end end
return pfUI.tooltip.retarget = CreateFrame("Frame")
end pfUI.tooltip.retarget:SetScript("OnEvent", function()
RunNextFrame(Retarget)
end)
-- pfUI's unit lines go on whenever a unit is set, not only when the tooltip
-- shows, so a tooltip rebuilt while it is up keeps them
GameTooltip:HookScript("OnTooltipSetUnit", function()
pfUI.tooltip:UpdateUnit()
end)
-- the buff row belongs to the unit it was built for
GameTooltip:HookScript("OnTooltipCleared", function()
pfUI.tooltip:UpdateBuffs("none")
end)
GameTooltip:HookScript("OnHide", function()
pfUI.tooltip:UpdateBuffs("none")
pfUI.tooltip.retarget:UnregisterEvent("UNIT_TARGET")
end)
function pfUI.tooltip:UpdateUnit()
local unit = pfUI.tooltip:GetUnit()
pfUI.tooltip:UpdateBuffs(unit)
if unit == "none" then return end
pfUI.tooltip.retarget:RegisterUnitEvent("UNIT_TARGET", UnitGUID(unit))
local pvpname = UnitPVPName(unit) local pvpname = UnitPVPName(unit)
local name = UnitName(unit) local name = UnitName(unit)

Some files were not shown because too many files have changed in this diff Show More