Issue information

Issue ID
#4833
Status
Fixed
Severity
None
Started
Hercules Elf Bot
Mar 23, 2011 17:38
Last Post
Hercules Elf Bot
Apr 4, 2012 7:17
Confirmation
N/A

Hercules Elf Bot - Mar 23, 2011 17:38

Originally posted by [b]Wildcard[/b]
[url="http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=4833"]http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=4833[/url]

edit:
I have summed up the essence in the second post, and the abundance of original information can be found on the eA forums.

This post has been edited by Wildcard on Feb 18, 2012 10:58

Hercules Elf Bot - Feb 9, 2012 14:17

Originally posted by [b]Wildcard[/b]
[u][b]Preface[/b][/u]

Let me quickly re-iterate what this bug report is about so you don't need to suffer through the eAthena report and IRC logs. In revision to an earlier statement of mine, this probably does belong in the Skill section of the bug tracker.

[u][b]Issue Summary[/b][/u]

On *Athena, SC_MAGICPOWER uses a rather broken memory swapping technique to make sustained AoE spells (Storm Gust, Meteor Storm, LoV) benefit from a previous instance of said status. Sadly, skill_attack() can trigger autospells, and those in turn a status_calc(). If the status calc modifies the swapped values, as is the case with Isilla Cards, the preserved amplification effect is gone. Furthermore, the stored MATK becomes stale, i.e. is no longer affected by equipment/status changes after the status has been consumed.

Further investigation on official behavior (thanks to ultramage) revealed that the current skill implementation differs greatly from the official one. The sad reality appears to be that official servers use a much simpler two-state mechanic that exhibits a variety of flaws when greatly reducing aftercast delays (for instance with Poem of Bragi).

[u][b]Proposed Solution[/b][/u]
A point could be made to provide a middle ground implementation that exhibits none of the flaws and all the benefits of both systems (I have a solution in mind, but will not bother with it unless I get the go ahead). My major concern about my (much revised) solution is the local #define introduced, but given the fact that this change basically introduces no less than 3 new possible code branches in status_change_end(), it's the best I could come up with. Feedback is of course appreciated, and I am willing to continue working on this should you feel it is worth pursuing.
[attachment=853:isilla_v6.patch]

edit: discovered a quirk with SA_DISPELL I'm not entirely happy with *delays some more*

Thank you for your time, kindest regards,
Wildcard

This post has been edited by Wildcard on Feb 18, 2012 10:53

Hercules Elf Bot - Mar 17, 2012 18:14

Originally posted by [b]Wildcard[/b]
Fixed when rewriting the status in [url="http://sourceforge.net/apps/trac/rathena/changeset/15694"]r15694[/url].
A notable difference from the thread on eA is that there is [i]no fake status change packet being sent[/i]. I have confirmed this to be correct on a renewal zone.