forked from Tercioo/Details-Damage-Meter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
API.txt
767 lines (554 loc) · 28.9 KB
/
API.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
This is a short document for Details! API, describing attributes, combat, container, actor.
It still is incomplete, we are working on.
This is a diagram showing the structure: http://i.imgur.com/vyTjpFh.png
Attributes:
=======================================
All these keys are globals:
DETAILS_ATTRIBUTE_DAMAGE = 1
DETAILS_SUBATTRIBUTE_DAMAGEDONE = 1
DETAILS_SUBATTRIBUTE_DPS = 2
DETAILS_SUBATTRIBUTE_DAMAGETAKEN = 3
DETAILS_SUBATTRIBUTE_FRIENDLYFIRE = 4
DETAILS_SUBATTRIBUTE_FRAGS = 5
DETAILS_SUBATTRIBUTE_ENEMIES = 6
DETAILS_SUBATTRIBUTE_VOIDZONES = 7
DETAILS_ATTRIBUTE_HEAL = 2
DETAILS_SUBATTRIBUTE_HEALDONE = 1
DETAILS_SUBATTRIBUTE_HPS = 2
DETAILS_SUBATTRIBUTE_OVERHEAL = 3
DETAILS_SUBATTRIBUTE_HEALTAKEN = 4
DETAILS_SUBATTRIBUTE_HEALENEMY = 5
DETAILS_SUBATTRIBUTE_HEALPREVENTED = 6
DETAILS_ATTRIBUTE_ENERGY = 3
DETAILS_SUBATTRIBUTE_REGENMANA = 1
DETAILS_SUBATTRIBUTE_REGENRAGE = 2
DETAILS_SUBATTRIBUTE_REGENENERGY = 3
DETAILS_SUBATTRIBUTE_REGENRUNE = 4
DETAILS_ATTRIBUTE_MISC = 4
DETAILS_SUBATTRIBUTE_CCBREAK = 1
DETAILS_SUBATTRIBUTE_RESS = 2
DETAILS_SUBATTRIBUTE_INTERRUPT = 3
DETAILS_SUBATTRIBUTE_DISPELL = 4
DETAILS_SUBATTRIBUTE_DEATH = 5
DETAILS_SUBATTRIBUTE_DCOOLDOWN = 6
DETAILS_SUBATTRIBUTE_BUFFUPTIME = 7
DETAILS_SUBATTRIBUTE_DEBUFFUPTIME = 8
TL;DR
=======================================
Details! has three main objects: Combat, Container and Actor:
"Combat" holds containers, when a fight is gone, the "Current Combat" is placed inside the History Segment.
"Container" holds Actors.
"Actor" has members telling what the player or npc has made in the combat.
"Combat" has 4 indexes: [1] holds the Damage Container [2] Healing [3] Energy [4] Misc.
These indexes are called "Attributes"
"Actor" has different data depending on which container the actor are, for instance, if is a Damage Actor, it will have members like damage_taken, friendly fire,
if is a Healing Actor, it will have members for overheal, absorbs etc.
Actors also have tables for spells and targets.
An Actor only is created inside a container when it performs an action which fits the container, for instance, if the player didn't restored any energy/mana/rage, etc,
it won't have an actor inside the Energy Container.
"History Segment" is a table, it holds combat objects of previous combats.
==========
| COMBAT | = { [1] = {DAMAGE CONTAINER}, [2] = {HEAL CONTAINER}, [3] = {ENERGY CONTAINER}, [4] = {MISC CONTAINER} }
==========
============
| CONTAINER | = { ACTORS }
============
==========
| ACTOR | = {attribute_keys, spells = {}, targets = {}}
==========
attribute keys are the members which holds all the totals made by the actor (see more below).
spells = {spellid = {SPELL}} targets = {["targetname"] = amount}
Getting Details! Object:
=======================================
Just get the global 'Details', for instance:
local details = _G.Details
Important Functions:
=======================================
Details:Format (number, formatString)
if formatString is nil, Format uses current format chosen on details options panel.
Details:GetActorsOnDamageCache()
only usable while in combat, it returns a numeric table with all damage actors in the group (combatlog flag matching 0x00000007).
the table is always sorted and only contains players in the raid or party.
Details:GetActorsOnHealingCache()
only usable while in combat, it returns a numeric table with all healing actors in the group (combatlog flag matching 0x00000007).
the table is always sorted and only contains players in the raid or party.
*For out of combat, energy and misc containers or get all actors even pets, enemies etc, you may use Container:SortByKey(key) and Container:ListActors().
Getting a Combat Object:
=======================================
combat = Details:GetCurrentCombat()
returns the current combat object.
combat = Details:GetCombat (combat)
returns the requested combat object.
if 'combat' is omitted, returns the current combat.
combat can be a number: -1 for overall, 0 for current and > 0 for past segments (1, 2, 3, ...).
combat also can be a string "overall" or "current".
history_segment_container = Details:GetCombatSegments()
returns the numeric table containing all past segments.
Details:ResetSegmentData()
reset the segment data including the overall segment
Details:ResetSegmentOverallData()
reset only the overall segment
Getting an Actor:
=======================================
local actor = Details:GetActor (combat = "current", attribute = DETAILS_ATTRIBUTE_DAMAGE, actorname = Details.playername)
returns the actor for the requested combat, attribute and actor name.
if some parameter are omitted, it uses the default value which are current combat, damage container and the name of the player character.
Combat Object:
=======================================
A Combat object is a table with 4 numerical indexes holding: damage, healing, energy and misc containers.
function for combat objects:
actor = combat:GetActor ( attribute, character_name ) or actor = combat ( attribute, character_name )
returns an actor object
characterList = combat:GetActorList ( attribute )
returns a numeric table with all actors of the specific attribute, contains players, npcs, pets, etc.
combatName = combat:GetCombatName ( try_to_find )
returns the segment name, e.g. "Trainning Dummy", if try_to_find is true, it searches the combat for a enemy name.
bossInfo = combat:GetBossInfo()
returns the table containing informations about the boss encounter.
table members: name, zone, mapid, diff, diff_string, id, ej_instance_id, killed, index
battlegroudInfo = combat:GetPvPInfo()
returns the table containing infos about the battlegroud:
table members: name, mapid
arenaInfo = combat:GetArenaInfo()
returns the table containing infos about the arena:
table members: name, mapid, zone
time = combat:GetCombatTime()
returns the length of the combat in seconds, if the combat is in progress, returns the current elapsed time.
minutes, seconds = GetFormatedCombatTime()
returns the combat time formated with minutes and seconds.
startDate, endDate = combat:GetDate()
returns the start and end date as %H:%M:%S.
isTrash = combat:IsTrash()
returns true if the combat is a trash segment.
encounterDiff = combat:GetDifficulty()
returns the difficulty number of the raid encounter.
deaths = combat:GetDeaths()
returns a numeric table containing the deaths, table is ordered by first death to last death.
combatNumber = combat:GetCombatNumber()
returns an ID for the combat, this number is unique among other combats.
combatId = combat:GetCombatId()
returns an ID for the combat, this number represents valid combat, it may have the same ID of a previous invalid combat.
container = combat:GetContainer ( attribute )
returns the container table for the requested attribute.
roster = combat:GetRoster()
returns a hash table with player names preset in the raid group at the start of the combat.
chartData = combat:GetTimeData ( chart_data_name )
returns the table containing the data for create a chart.
start_at = GetStartTime()
returns the GetTime() of when the combat started.
ended_at = GetEndTime()
returns the GetTime() of when the combat ended.
DETAILS_TOTALS_ONLYGROUP = true
total = combat:GetTotal ( attribute, subAttribute [, onlyGroup] )
returns the total of the requested attribute.
mythictInfo = combat:GetMythicDungeonInfo()
returns a table with information about the mythic dungeon encounter.
mythicTrashInfo = combat:GetMythicDungeonTrashInfo()
returns a table with information about the trash cleanup for this combat.
isMythicDungeonSegment = combat:IsMythicDungeon()
returns if the segment is from a mythic dungeon.
isMythicDungeonOverallSegment = combat:IsMythicDungeonOverall()
returns if the segment is an overall mythic dungeon segment.
combatType = combat:GetCombatType()
returns the combat identification (see segment types).
alternatePowerTable = combat:GetAlteranatePower()
returns a table containing information about alternate power gains from players.
--------------------------------------------------------------------
Other Calls:
Details:GetCombatNumber()
returns the current unique combat number counter.
combat number is a unique number given to each combat started, this number won't
reset when data is wiped and each character have its own combat number counter.
Details:IsInCombat()
returns if Details! is in combat or not.
Details:IsInEncounter()
returns if Details! is in a raid encounter combat.
damage, healing, energy, misc = Details:GetAllActors (combat, actorname)
returns all the four actor objects for the requested combat and actor.
combat must be a combat object.
Details:UnpackDeathTable (deathTable)
break a death table returning the data from it:
playername, playerclass, deathtime, deathcombattime, deathtimestring, playermaxhealth, deathevents, lastcooldown = Details:UnpackDeathTable (deathTable)
isMythicOverallSegment, segmentID, mythicLevel, EJID, mapID, zoneName, encounterID, encounterName, startedAt, endedAt, runID = Details:UnpackMythicDungeonInfo (combat:GetMythicDungeonInfo())
extract information from the mythic dungeon table for the combat.
Container Object:
=======================================
A container is used to store actors, each combat have four containers, one for each attribute.
There is spell containers which holds the spells used by actors, spell containers are more limited and have only few functions.
ipairs() = container:ListActors()
returns a iterated table of actors inside the container.
Usage: 'for index, actor in container:ListActors() do'
Note: if the container is a spell container, returns pairs() instead: 'for spellid, spelltable in container:ListActors() do'
actor = container:GetActor (character_name)
returns the actor, for spell container use the spellid instead.
container:GetSpell (spellid)
unique for spell container.
e.g. actor.spells:GetSpell (spellid)
return the spelltable for the requested spellid.
amount = container:GetAmount (actorName [, key = "total"])
returns the amount of the requested member key, if key is not passed, "total" is used.
container:SortByKey (keyname)
sort the actor container placing in descending order actors with bigger amounts on their 'keyname'.
*only works for actor container
sourceName = container:GetSpellSource (spellid)
return the name of the first actor found inside the container which used a spell with the desired spellid.
note: this is important for multi-language auras/displays where you doesn't want to hardcode the npc name.
*only works for actor container
total = container:GetTotal (key = "total")
returns the total amount of all actors inside the container, if key is omitted, "total" is used.
*only works for actor container
total = container:GetTotalOnRaid (key = "total", combat)
similar to GetTotal, but only counts the total of raid members.
combat is the combat object owner of this container.
*only works for actor container
Actor Object:
=======================================
Holds keys, spells and targets of a character.
Actor can be anything, player, npc, pet, boss, enemy, etc.
name = actor:name()
returns the actor's name.
class = actor:class()
returns the actor class.
guid = actor:guid()
returns the GUID for this actor.
flag = actor:flag()
returns the combatlog flag for the actor.
displayName = actor:GetDisplayName()
returns the name shown on the player bar, can suffer modifications from realm name removed, nicknames, etc.
name = actor:GetOnlyName()
returns only the actor name, remove realm or owner names.
activity = actor:Tempo()
returns the activity time for the actor.
isPlayer = actor:IsPlayer()
return true if the actor is a player.
isGroupMember = actor:IsGroupPlayer()
return true if the actor is a player and member of the raid group.
IsneutralOrEnemy = actor:IsNeutralOrEnemy()
return true if the actor is a neutral of an enemy.
isEnemy = actor:IsEnemy()
return true if the actor is a enemy.
isPet = actor:IsPetOrGuardian()
return true if the actor is a pet or guardian
list = actor:GetSpellList()
returns a hash table with spellid, spelltable.
spell = actor:GetSpell (spellid)
returns a spell table of requested spell id.
r, g, b = actor:GetBarColor()
returns the color which the player bar will be painted on the window, it respects owner, arena team, enemy, monster.
r, g, b = Details:GetClassColor()
returns the class color.
texture, left, right, top, bottom = actor:GetClassIcon()
returns the icon texture path and the texture's texcoords.
Spell and Target Tables:
=======================================
Target and Spells are simple tables and has different member names and keys for each attribute.
See below how each one is named on each attribute.
Keys for Damage Actors:
=======================================
members:
actor.total = total of damage done.
actor.total_without_pet = without pet.
actor.damage_taken = total of damage taken.
actor.last_event = when the last event for this actor occured.
actor.start_time = time when this actor started to apply damage.
actor.end_time = time when the actor stopped with damage.
actor.friendlyfire_total = amount of friendlyfire.
tables:
actor.targets = hash table of targets: {[targetName] = amount}.
actor.damage_from = hash table of actors which applied damage to this actor: {[aggresorName] = true}.
actor.pets = numeric table of GUIDs of pets summoned by this actor.
actor.friendlyfire = hash table of friendly fire targets: {[targetName] = table {total = 0, spells = hash table: {[spellId] = amount}}}
actor.spells = spell container.
spell:
spell.total = total of damage by this spell.
spell.counter = how many hits this spell made.
spell.id = spellid
spell.successful_casted = how many times this spell has been casted successfully (only for enemies).
- players has its own spell cast counter inside Misc Container with the member "spell_cast".
- the reason os this is spell_cast holds all spells regardless of its attribute (can hold healing/damage/energy/misc).
spell.n_min = minimal damage made on a normal hit.
spell.n_max = max damage made on a normal hit.
spell.n_amt = amount of normal hits.
spell.n_dmg = total amount made doing only normal hits.
spell.c_min = minimal damage made on a critical hit.
spell.c_max = max damage made on a critical hit.
spell.c_amt = how many times this spell got a critical hit.
spell.c_dmg = total amount made doing only normal hits.
spell.g_amt = how many glancing blows this spell has.
spell.g_dmg = total damage made by glancing blows.
spell.r_amt = total of times this spell got resisted by the target.
spell.r_dmg = amount of damage made when it got resisted.
spell.b_amt = amount of times this spell got blocked by the enemy.
spell.b_dmg = damage made when the spell got blocked.
spell.a_amt = amount of times this spell got absorbed.
spell.a_dmg = total damage while absorbed.
spell.targets = hash table containing {["targetname"] = total damage done by this spell on this target}
Getting Dps:
For activity time: DPS = actor.total / actor:Tempo()
For effective time: DPS = actor.total / combat:GetCombatTime()
Keys for Healing Actors:
=======================================
members:
actor.total = total of healing done.
actor.totalover = total of overheal.
actor.totalabsorb = total of absorbs.
actor.total_without_pet = total without count the healing done from pets.
actor.totalover_without_pet = overheal without pets.
actor.heal_enemy_amt = how much this actor healing an enemy actor.
actor.healing_taken = total of received healing.
actor.last_event = when the last event for this actor occured.
actor.start_time = time when this actor started to apply heals.
actor.end_time = time when the actor stopped with healing.
tables:
actor.spells = spell container.
actor.targets = hash table of targets: {[targetName] = amount}.
actor.targets_overheal = hash table of overhealed targets: {[targetName] = amount}.
actor.targets_absorbs = hash table of shield absorbs: {[targetName] = amount}.
actor.healing_from = hash table of actors which applied healing to this actor: {[healerName] = true}.
actor.pets = numeric table of GUIDs of pets summoned by this actor.
actor.heal_enemy = spells used to heal the enemy: {[spellid] = amount healed}
spell:
spell.total = total healing made by this spell.
spell.counter = how many times this spell healed something.
spell.id = spellid.
spell.totalabsorb = only for shields, tells how much damage this spell prevented.
spell.absorbed = is how many healing has been absorbed by some external mechanic like Befouled on Fel Lord Zakuun encounter.
spell.overheal = amount of overheal made by this spell.
spell.n_min = minimal heal made on a normal hit.
spell.n_max = max heal made on a normal hit.
spell.n_amt = amount of normal hits.
spell.n_curado = total amount made doing only normal hits (weird name I know).
spell.c_min = minimal heal made on a critical hit.
spell.c_max = max heal made on a critical hit.
spell.c_amt = how many times this spell got a critical hit.
spell.c_curado = total amount made doing only normal hits.
spell.targets = hash table containing {["targetname"] = total healing done by this spell on this target}
spell.targets_overheal = hash table containing {["targetname"] = total overhealing by this spell on this target}
spell.targets_absorbs = hash table containing {["targetname"] = total absorbs by shields (damage prevented) done by this spell on this target}
Getting Hps:
For activity time: HPS = actor.total / actor:Tempo()
For effective time: HPS = actor.total / combat:GetCombatTime()
Keys for Energy Actors:
=======================================
actor.total = total of energy generated.
actor.received = total of energy received.
actor.resource = total of resource generated.
actor.resource_type = type of the resource used by the actor.
actor.pets = numeric table of GUIDs of pets summoned by this actor.
actor.targets = hash table of targets: {[targetName] = amount}.
actor.spells = spell container.
spell:
total = total energy restored by this spell.
counter = how many times this spell restored energy.
id = spellid
targets = hash table containing {["targetname"] = total energy produced towards this target}
Keys for Misc Actors:
=======================================
these members and tables may not be present on all actors, depends what the actor performs during the combat, these tables are created on the fly by the parser.
- Crowd Control Done:
actor.cc_done = amount of crowd control done.
actor.cc_done_targets = hash table with target names and amount {[targetName] = amount}.
actor.cc_done_spells = spell container.
spell:
spell.counter = amount of times this spell has been used to perform a crowd control.
spell.targets = hash table containing {["targetname"] = total of times this spell made a CC on this target}
- Interrupts:
actor.interrupt = total amount of interrupts.
actor.interrupt_targets = hash table with target names and amount {[targetName] = amount}.
actor.interrupt_spells = spell container.
actor.interrompeu_oque = hash table which tells what this actor interrupted {[spell interrupted spellid] = amount}
spell:
spell.counter = amount of interrupts performed by this spell.
spell.interrompeu_oque = hash table talling what this spell interrupted {[spell interrupted spellid] = amount}
spell.targets = hash table containing {["castername"] = total of times this spell interrupted something from this caster}
- Aura Uptime:
actor.buff_uptime = seconds of all buffs uptime.
actor.buff_uptime_spells = spell container.
actor.debuff_uptime = seconds of all debuffs uptime.
actor.debuff_uptime_spells = spell container.
spell:
spell.id = spellid
spell.uptime = uptime amount in seconds.
- Cooldowns:
actor.cooldowns_defensive = amount of defensive cooldowns used by this actor.
actor.cooldowns_defensive_targets = in which player the cooldown was been used {[targetName] = amount}.
actor.cooldowns_defensive_spells = spell container.
spell:
spell.id = spellid
spell.counter = how many times the player used this cooldown.
spell.targets = hash table with {["targetname"] = amount}
- Ress
actor.ress = amount of ress performed by this actor.
actor.ress_targets = which actors got ressed by this actor {["targetname"] = amount}
actor.ress_spells = spell container.
spell:
spell.ress = amount of resses made by this spell.
spell.targets = hash table containing player names resurrected by this spell {["playername"] = amount}
- Dispel (members has 2 "L" instead of 1)
actor.dispell = amount of dispels done.
actor.dispell_targets = hash table telling who got dispel from this actor {[targetName] = amount}.
actor.dispell_spells = spell container.
actor.dispell_oque = hash table with the ids of the spells dispelled by this actor {[spellid of the spell dispelled] = amount}
spell:
spell.dispell = amount of dispels by this spell.
spell.dispell_oque = hash table with {[spellid of the spell dispelled]} = amount
spell.targets = hash table with target names dispelled {["targetname"] = amount}
- CC Break
actor.cc_break = amount of times the actor broke a crowd control.
actor.cc_break_targets = hash table containing who this actor broke the CC {[targetName] = amount}.
actor.cc_break_spells = spell container.
actor.cc_break_oque = hash table with spells broken {[CC spell id] = amount}
spell:
spell.cc_break = amount of CC broken by this spell.
spell.cc_break_oque = hash table with {[CC spellid] = amount}
spell.targets = hash table with {["targetname"] = amount}.
Other API Calls:
=======================================
Details:GetSourceFromNpcId (npcId)
return the npc name for the specific npcId.
this is a expensive function, once you get a valid result, store the npc name somewhere.
bestResult, encounterTable = Details.storage:GetBestFromPlayer (encounterDiff, encounterId, playerRole, playerName)
query the storage for the best result of the player on the encounter.
encounterDiff = raid difficult ID (15 for heroic, 16 for mythic).
encounterId = may be found on "id" member getting combat:GetBossInfo().
playerRole = "DAMAGER" or "HEALER", tanks are considered "DAMAGER".
playerName = name of the player to query (with server name if the player is from another realm).
bestResult = integer, best damage or healing done on the boss made by the player.
encounterTable = {["date"] = formated time() ["time"] = time() ["elapsed"] = combat time ["guild"] = guild name ["damage"] = all damage players ["healing"] = all healers}
heal_or_damage_done = Details.storage:GetPlayerData (encounterDiff, encounterId, playerName)
query the storage for previous ecounter data for the player.
returns a numeric table with the damage or healing done by the player on all encounters found.
encounterDiff = raid difficult ID (15 for heroic, 16 for mythic).
encounterId = may be found on "id" member getting combat:GetBossInfo().
playerName = name of the player to query (with server name if the player is from another realm).
itemLevel = Details.ilevel:GetIlvl (guid)
returns a table with {name = "actor name", ilvl = itemLevel, time = time() when the item level was gotten}.
return NIL if no data for the player is avaliable yet.
talentsTable = Details:GetTalents (guid)
if available, returns a table with 7 indexes with the talentId selected for each tree {talentId, talentId, talentId, talentId, talentId, talentId, talentId}.
use with GetTalentInfoByID()
spec = Details:GetSpec (guid)
if available, return the spec id of the actor, use with GetSpecializationInfoByID()
Details:SetDeathLogLimit (limit)
Set the amount of lines to store on death log.
npcId = Details:GetNpcIdFromGuid (guid)
Extract the npcId from the actor guid.
Examples:
======================================= ---
1) Get the player damage, heal, dps and hps:
local combat = Details:GetCurrentCombat()
local damageActor = combat:GetActor (DETAILS_ATTRIBUTE_DAMAGE, UnitName ("player"))
local healingActor = combat:GetActor (DETAILS_ATTRIBUTE_HEAL, UnitName ("player"))
or
local damageActor = Details:GetActor ("current", DETAILS_ATTRIBUTE_DAMAGE, Details.playername)
local healingActor = Details:GetActor ("current", DETAILS_ATTRIBUTE_HEAL, Details.playername)
local totalDamage, totalHeal = damageActor.total, healingActor.total
local effectiveDps, effectiveHps = totalDamage / combat:GetCombatTime(), totalHeal / combat:GetCombatTime()
local activeDps, activeHps = totalDamage / damageActor:Tempo(), totalHeal / healingActor:Tempo()
2) Get a list of all overhealing:
-- get the combat, here we want the current combat:
local combat = Details:GetCurrentCombat()
-- as we want all players, we get here the container which stores all healing actors:
local healingContainer = combat:GetContainer (DETAILS_ATTRIBUTE_HEAL)
-- sort the container with the key "totalover" - we got this key from "Keys for Healing Actors":
healingContainer:SortByKey ("totalover")
-- now just iterate among the actors:
local actorsFound = 0
for i, actor in healingContainer:ListActors() do
-- inside the container has all entities which made any heal during the combat, here we check if the actor is a player for our group.
if (actor:IsGroupPlayer()) then
actorsFound = actorsFound + 1
end
end
3) Damage done to an add called "Grand Corruptor U'rogg":
local combat = Details:GetCurrentCombat()
local damageContainer = combat:GetContainer (DETAILS_ATTRIBUTE_DAMAGE)
local targetName = "Grand Corruptor U'rogg"
there is two ways for do this:
1 - with an external table:
local actorsAmount = {}
for i, actor in damageContainer:ListActors() do
local amount = actor.targets [targetName]
if (amount and amount >= 1) then
tinsert (actorsAmount, {name = actor:name(), total = amount})
end
end
table.sort (actorsAmount, function (a,b) return a.total > b.total end)
2 - replacing the member "custom" on the actor:
for i, actor in damageContainer:ListActors() do
if (actor:IsGroupPlayer()) then
local amount = actor.targets [targetName]
if (amount and amount >= 1) then
actor.custom = amount
else
actor.custom = 0
end
else
actor.custom = 0
end
end
damageContainer:SortByKey ("custom")
local actorsDamagedTheTarget = 0
for i, actor in damageContainer:ListActors() do
actorsDamagedTheTarget = actorsDamagedTheTarget + 1
end
4) Get everyone who took damage from an ability:
local combat = Details:GetCurrentCombat()
local damageContainer = combat:GetContainer (DETAILS_ATTRIBUTE_DAMAGE)
local targetSpell = 183449 --Felfire Volley from hellfire assault encounter
local sourceNpc = "Gorebound Felcaster"
--in cases of multi-language auras or displays, we doesn't want to hardcode the npc name.
sourceNpc = damageContainer:GetSpellSource (targetSpell)
--reset the custom member on all actors:
for i, actor in damageContainer:ListActors() do
actor.custom = 0
end
local source = damageContainer:GetActor (sourceNpc)
local felfireVolleySpell = source:GetSpell (targetSpell)
if (felfireVolleySpell) then
for playerName, amount in pairs (felfireVolleySpell.targets) do
--players who took damage from this ability
--now this result may be placed on a external table or .custom may also be used
local targetActor = damageContainer:GetActor (playerName)
targetActor.custom = amount
end
end
damageContainer:SortByKey ("custom")
5) Get damage taken by an enemy
local combat = Details:GetCurrentCombat()
local damageContainer = combat:GetContainer (DETAILS_ATTRIBUTE_DAMAGE)
--get the npc name for multi-language auras or displays.
local npcName = Details:GetSourceFromNpcId (90409) -- "Gorebound Felcaster"
if (not npcName) then
npcName = Details:GetSourceFromNpcId (93931) -- "Gorebound Felcaster"
end
--once we get a valid npcName, we need to cache the name since GetSourceFromNpcId is an expensive call.
aura_env.npcName = npcName -- for weakauras
Details.cache_npc_ids [93931] = npcName --for details!
Details.cache_npc_ids [90409] = npcName --for details!
-- here, there is two ways:
1 - iterage among all actor and get their .targets [npcName].
for i, actor in damageContainer:ListActors() do
local amount = actor.targets [npcName]
if (amount and amount >= 1) then
player.custom = amount
else
player.custom = 0
end
end
damageContainer:SortByKey ("custom")
2 - get the npc actor and its damage_from table.
local actor = damageContainer:GetActor (npcName)
if (actor) then
--reset the custom member on all actors:
for i, actor in damageContainer:ListActors() do
actor.custom = 0
end
for playerName, _ in pairs (actor.damage_from) do
local player = damageContainer:GetActor (playerName)
if (player:IsPlayer()) then --we only want players. pets always has their damage merged on its owner damage.
player.custom = actor.targets [npcName]
end
end
damageContainer:SortByKey ("custom")
end