If anyone has been following the Healing forums recently they will have noticed that Ghostcrawler replied to a thread complaining about tracking absorbs (generally attributed to the last cast absorb player rather than the actual player) saying that this was relatively difficult to actually do. He did however give us a call for armchair programmers to try and solve it, so I thought I should look at the problem. The thread is here for anyone interested.

The Problem

Firstly we need to clarify our problem, "absorbs aren't reported" is a very large issue with little breakdown. We can break this down into:

  • Absorbs aren't reported accurately
  • Absorbs aren't attributed to a specific player

Secondly, lets see what Ghostcrawler actually said.
Quote From: Ghostcrawler (source)
"We're still working on showing absorbs. It's technically very challenging. It's not information we currently pass down to the client, and while passing that information down isn't too tricky itself, making sure we can share it without affecting your performance is less trivial."

Tracking Healing

Tracking healing is easy as each heal event is discrete, even residual heal type effects like Prayer of Mending generate discrete healing events. We can break these events down as:

Player casts heal
Server compares current health, heal value, crit, then returns response
Player sees awesome heal, logs show healer is awesome

Tracking Absorbs

In contrast absorbs are only resolved on damage, the cast itself is an independent event. This means we have to track a group of absorbs on the target:

Absorb 1
Absorb 2
Absorb 3
Player Health

Firstly we need to worry about ordering the absorbs, first come first served, first in last out, shortest duration first? Then we need to consider usage, if a PW:S has already lost 50% of its strength, should it be displaced by a new absorb making it more likely the disc priest won't get the bonus mana for the shield consumption before it lapses?

Ok, so we need a working assumption for this. I would say sensibly it should go in shortest duration first (giving us the maximum absorption over time). This means when an absorb is applied we need to store:

Absorb ID - Strength - PlayerID

Each time a hit is resolved, we then have to resolve each of these effects in turn as a discrete, but simultaneous event:

{Damage -> Absorb 1 -> Response / Effects
Apply Effects}

{Damage -> Absorb 2 -> Response / Effects
Apply Effects}

{Damage -> Absorb 3 -> Response / Effects
Apply Effects}

{Damage -> Health -> Response / Effects
Apply Effects}

This makes an absorb far more costly in terms of processing to deal with as a single hit can trigger multiple player's effects on the target as well as multiple absorption calculations, and we need to create multiple responses (though these could be aggregated).

So what does this look like?

Each player / enemy / object now maintains an absorb list sorted in the order we wish to have them handled(95% chance this exists currently, or is handled by buff code)

Each player / enemy / object must now maintain a list of who applied the buff (90% chance this already exists, addons can typically see "playerid"s associated with buffs)

Each hit must now trigger multiple responses (100% chance this doesn't exist or this problem wouldn't exist).

So it should be relatively simple to implement tracking these. The combat log would look like:


20/09 12:00:00 SPELL_ABSORB, 0x00, "Alice", 0x00, 0x01, "Bob", 0x00, 00001, "Power Word: Shield", 0x01, 1000
20/09 12:00:00 SPELL_ABSORB, 0x00, "Alice", 0x00, 0x02, "Clarisa", 0x00, 00001, "Power Word: Shield", 0x01, 10000
20/09 12:00:00 SPELL_ABSORB, 0x00, "Alice", 0x00, 0x03, "Dave", 0x00, 00001, "Power Word: Shield", 0x01, 200
20/09 12:00:00 SPELL_DAMAGE, 0x00, "Alice", 0x00, 0x05, "Evil Dude", 0x00, 00002, "Hitty Spell", 0x01, 0

4 Events each considered concurrent with 3 absorbs and the final player takes 0 damage.

My Conclusions

As an armchair programmer (actually a really nice comfortable leather office chair but ignore that) I don't see why this should be problematic. Absorbs already cannot be simply treated as an additive absorption source (since they are removed over time) meaning the system must track individual absorbs. Each absorb effect should track its owner (to allow for one absorb per caster functionality) meaning our attribution system is present. This means that all the system currently lacks is the reporting mechanism, which is in place but not utilised.

Assuming everything is in place, a few hours coding to get the message responses in place and tested (since something always goes wrong) along the lines of:

@absorb_code / buff_handler
report(..., absorb strength, absorb remaining)

Assuming we lack attribution of identifiers, a few days coding to get it in place since the framework already exists for other buffs so it is a design, port, test scenario.


Larísa said...

Hi there and greetings!

It's been ages since you last posted. Hope you'll get back into it again!


Chris said...

Problem is finding content that interests me :).

Thanks for the read though Larisa, thought you had forgotten me :).

Larísa said...

Hm...I'd say the same... You've forgotten me? You used to write text wall comments, remember?

Don't worry so much abut what to write... just... write!

You don't have to be so damned informative all the time.

What have you been up to in game?
You used to be a bit miserable and desillusioned towards the end of your blogging. Have you settled somewhere and got a renewed interest?

Chris said...

Alas not really, I suddenly developed Altitis... 3 Tanks, 2 Healers, 1 DPS (and possibly a third healer coming up), all in ICC.

Its still ridiculously dull pugging ICC, the expansion as a whole has lacked the feeling of older ones, thought thats perhaps because I have been more at the cutting edge (lol) so have spent far more time farming than otherwise.

I still occasionally write long posts, just I tend to delete them because I feel they don't say enough :).

Unknown said...

Juvamine Minceur Cure Express Bạn có thể dễ dàng tìm kiếm
nucos white viên uống trắng da trị nám đáp án cho các câu hỏi
Mặt nạ dưỡng da ban đêm Tonymoly Banana Sleeping Pack trên ngay tại MegaVita.
Vedette Strawberry Yoghurt Mask Thật vậy, tất cả các loại
clean clear essentials oil control toner kem trị mụn hiệu quả nhất,
Sữa rửa mặt tạo bọt chống nhờn - CLEAN & CLEAR điều trị cả 3 tình trạng mụn nhẹ,
DABO Rice Nature Collection mụn trung bình lẫn mụn nặng,
Hanamai Gold Premium Collagen vừa điều trị mụn vừa làm trắng da,...

Unknown said...

phim xac song phan 6Chuyện gì đã, đang và sắp xảy ra nối tiếp tập cuối phim hoang de luu manhLưu Mạnh Hoàng đế TVB phim là một bộ phim hài nhẹ nhàng phim dao ha luu tinh tvb tron bobằng cách nào một nhóm chuyên điều tra các vụ án nếu chính phủ sẽ không bao giờ làm phim ngọa hổ tàng long 2 2015Ngô Thanh Vân chờ đợi tin từ dự án bom tấn rất lâu xem phim cong cong xuat cungnhững vị công công này cam chịu kiếp sống nô tài chỉ để được yên bình phim bí quyết luyện rồng 3và khâu thực hiện đang được rục rịch tiến hành và sẽ ra mắt sớm hơn nhự kiến nếu mọi chuyện đều đạt thuận lợi phim Naruto Shippuuden tron bo Người đứng đầu ngôi làng, Hokage đệ Tứ, đã hi sinh chính bản thân mình để phong ấn Cửu Vĩ vào cơ thể một đứa bé sơ sinh tên là Uzumaki Naruto. phim One Piece tập cuối để trở thành vua hải tặc cậu phải đến được tận cùng của vùng biển nguy hiểm xem phim running man Nhóm nhạc thần tượng tiếp theo là Beast, với mong chúng tôi Ji Hyo xem phim cám dỗ nghiệt ngã trọn bộ Phim miêu tả quá trình người phụ nữ đó vươn lên top 1% những người quyền lực nhất của xã hội thượng lưu xem phim dac vu S.h.i.e.l.d phan 3

ntin index said...

Tiếng kêu của con quạ như thế nào, báo điềm gì
Mèo vào nhà là có điềm gì, có tốt không
Ong vào nhà làm tổ là điềm gì
Ngứa tai phải, tai trái là điềm báo gì
Giải mã thịt giựt liên tục là điềm báo gì

Unknown said...

cheap ray ban sunglasses
ralph lauren outlet online
michael kors outlet store
cheap oakley sunglasses
kate spade uk
adidas superstars
gucci bags
nike free run flyknit
true religion outlet online
phillies jerseys

Unknown said...

cheap ray ban sunglasses
ralph lauren outlet online
michael kors outlet store
cheap oakley sunglasses
kate spade uk
adidas superstars
gucci bags
nike free run flyknit
true religion outlet online
phillies jerseys

Unknown said...

2018111 leilei3915
adidas superstar
michael kors outlet clearance
oakley sunglasses
canada goose jackets
coach outlet online
uggs outlet online
oakley sunglasses
canada goose outlet store
coach factory outlet
nike outlet

raybanoutlet001 said...

jacksonville jaguars jersey
jordan shoes
skechers shoes
coach outlet
uggs outlet
falcons jersey
seattle seahawks jerseys
ugg outlet
kate spade sale
adidas yeezy

Unknown said...

adidas tubular
air max 270
vans shoes
air max
lebron 14
yeezy boost 350
jordan shoes
adidas eqt
nike free run

yanmaneee said...

supreme clothing
longchamp bags
calvin klein underwear
adidas yeezy
ferragamo belts
nike huarache
jordan shoes
adidas tubular shadow

Unknown said...

replica bags 168 mall pop over to these guys j6g65i6v07 replica bags online uae their website v3g51u2g94 louis vuitton fake replica bags turkey replica bags in delhi hermes replica t6h16k4l34 replica bags chicago