Issue information

Issue ID
#1116
Status
Fixed
Severity
Critical
Started
Hercules Elf Bot
Mar 6, 2008 15:57
Last Post
Hercules Elf Bot
Mar 6, 2008 15:57
Confirmation
N/A

Hercules Elf Bot - Mar 6, 2008 15:57

Originally posted by [b]theultramage[/b]
http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=1116

(originally reported in the Damage Timing Problems topic)

The problem described is, that eathena does not communicate damage timing information to the client properly, resulting in various gameplay issues like damage effect desynchronization (your hp bar doesn't change when the damage numbers are displayed), mob attack timing (mobs attack faster/slower than they should) and flywing exploits (easy to avoid damage).

I finally got around to experimenting with this. The following are observations and measurements from several tests on Aegis.
First, some neccessary background info.

Every mob entry in the database has several relevant columns.
* Agi and Dex - ?
* rechargeTime - ?
* attackMT - ?

eAthena has big problems displaying mob attacks correctly. The animation does not match the server-side timer.

--------------------------------
Tests
--------------------------------

G_RANDGRIS, 0 dex, 0 agi, rechargetime 5000, attackmt 5000 -> sdelay = 5000
The sequence of packets looks like this:
CODE
FixPos
attack
[1000ms]
update hp
[4000ms]
Overall effect is that the mob attacks every 5 seconds, and damage/death happens 1 second after the attack starts.
There is a problem that the 'attack' normally comes 200ms after the fixpos packet, not immediately, due to weirdo aegis network layer.

G_RANDGRIS, 0 dex, 250 agi, rechargetime 5000, attackmt 5000 -> sdelay = 5000, attacks every 5 seconds, can't act/move in the meantime
G_RANDGRIS, 0 dex, 250 agi, rechargetime 0, attackmt 0 -> sdelay = 0, nonstop very fast attacks, multiple at once
G_RANDGRIS, 0 dex, 0 agi, rechargetime 0, attackmt 0 -> sdelay = 0, same deal, murders you on the spot
G_RANDGRIS, 0 dex, 100 agi, rechargetime 5000, attackmt 0 -> sdelay = 0, hp updates come immediately/with the damage packet, I die even before the numbers appear.
G_RANDGRIS, 0 dex, 0 agi, rechargetime 5000, attackmt 0 -> sdelay = 0, same deal
Conclusion: AGI doesn't affect the attack rate of mobs at all, nor does it affect how fast damage gets applied.

G_RANDGRIS, 0 dex, 0 agi, rechargetime 0, attackmt 5000 -> sdelay = 5000, attacks every 5 seconds, can't act/move in the meantime.
G_RANDGRIS, 0 dex, 0 agi, rechargetime 5000, attackmt 0 -> sdelay = 0, attacks every 5 seconds, chases me nonstop, causes massive fixpos spam every time she catches up to me, making my char freeze in place.

G_RANDGRIS, 0 dex, 0 agi, rechargetime 5000, attackmt 0 -> sdelay = 0, death happens immediately with damage packet.
G_RANDGRIS, 0 dex, 0 agi, rechargetime 0, attackmt 5000 -> sdelay = 5000, death happens 1 second after attack packet.
G_RANDGRIS, 500 dex, 500 agi, rechargetime 500, attackmt 500 -> sdelay = 500, death happens 500ms after the attack packet.
G_RANDGRIS, 500 dex, 500 agi, rechargetime 1000, attackmt 500 -> sdelay = 500, attack packet comes immediately, death happens 500ms after the attack packet.
G_RANDGRIS, 500 dex, 500 agi, rechargetime 500, attackmt 1000 -> sdelay = 1000, attack packet comes immediately, death happens 1000ms after the attack packet.
G_RANDGRIS, 500 dex, 500 agi, rechargetime 1000, attackmt 5000 -> sdelay = 5000, attack packet comes delayed 200ms, death happens 200+800ms after the attack packet.

Same deal for skill usage - after using a skill, the mob gets an act/walk penalty. The 'delay' of the skill just tells how often it can be re-used. I had a mob with rechargetime=1000,attackmt=1000, Firebolt 100% @ 5000ms delay, Cold Bolt 100% @ 5000ms delay -> I was getting bombarded by both normal and skill attacks pretty quickly, and the bolts always overlapped.

--------------------------------
Conclusion
--------------------------------
  • agi and dex don't seem to influence _anything_ related to damage timing.
  • attackMT = sdelay when it comes to putting the value into the packet.
  • attackMT defines when exactly to apply the damage. But whatever the value is, the timer gets an upper cap of 1000ms.
  • attackMT also defines the can't-act period that the mob gets after initiating an attack / using a skill (walk delay and attack/skill delay).
  • rechargeTime defines the can't-attack period that the mob gets after initiating an attack / using a skill (just attack/skill delay).
    Seems useful if you want to make your mob always walk a bit before blasting skills around.
  • rechargeTime = aDelay /\ attackMT = aMotion in the eathena database.


This post has been edited by theultramage: Mar 6 2008, 05:28 PM