actually normal hit a monster send multiple packets
let's put a ShowDebug on clif->send function
src/map/clif.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/map/clif.c b/src/map/clif.c
index 54c9869c3..38ac2ea1e 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -449,7 +449,7 @@ static bool clif_send(const void *buf, int len, struct block_list *bl, enum send
else if (type == AREA_WOS || type == BG_WOS || type == BG_AREA_WOS)
return true;
}
-
+ShowDebug("source:%s buf:%d send_target:%d\n", (sd != NULL)? sd->status.name : "NULL", RBUFW(buf, 0), type);
switch(type) {
case ALL_CLIENT: //All player clients.
iter = mapit_getallusers();
`@monster poporing` and hit it once, and here is what I get
[Debug]: source:NULL buf:2248 send_target:2
[Debug]: source:AnnieRuru buf:156 send_target:2
[Debug]: source:NULL buf:2557 send_target:2
[Debug]: source:AnnieRuru buf:2248 send_target:2
[Debug]: source:NULL buf:156 send_target:2
[Debug]: source:AnnieRuru buf:2248 send_target:2
[Debug]: source:NULL buf:156 send_target:2
[Debug]: source:AnnieRuru buf:2248 send_target:2
analyze the packet
2248 hex 0x8C8 is ZC_NOTIFY_ACT2 came from clif_damage function
/// Sends a 'damage' packet (src performs action on dst)
/// 008a <src ID>.L <dst ID>.L <server tick>.L <src speed>.L <dst speed>.L <damage>.W <div>.W <type>.B <damage2>.W (ZC_NOTIFY_ACT)
/// 02e1 <src ID>.L <dst ID>.L <server tick>.L <src speed>.L <dst speed>.L <damage>.L <div>.W <type>.B <damage2>.L (ZC_NOTIFY_ACT2)
/// 08c8 <src ID>.L <dst ID>.L <server tick>.L <src speed>.L <dst speed>.L <damage>.L <IsSPDamage>.B <div>.W <type>.B <damage2>.L (ZC_NOTIFY_ACT2)
/// type: @see enum battle_dmg_type
/// for BDT_NORMAL: [ damage: total damage, div: amount of hits, damage2: assassin dual-wield damage ]
static int clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type, int64 in_damage2)
156 hex 0x9c is ZC_CHANGE_DIRECTION came from clif_changed_dir function
/// Updates body and head direction of an object (ZC_CHANGE_DIRECTION).
/// 009c <id>.L <head dir>.W <dir>.B
/// head dir:
/// 0 = straight
/// 1 = turned CW
/// 2 = turned CCW
/// dir: @see enum unit_dir
static void clif_changed_dir(struct block_list *bl, enum send_target target)
2557 hex 0x9fd is unit_walkingType (src\map\packet_struct.h) ... couldn't find where this came from ... I rather don't touch this at the moment
this means, whenever I attack something, it sends an attack animation and also updates the client to face the attacking source enemy
so if we block ZC_CHANGE_DIRECTION for the monster, this will cause rogue's backstab to not function properly
the answer is YES, block ZC_NOTIFY_ACT2
here's the plugin `@filterattack`
https://github.com/AnnieRuru/Release/blob/master/plugins/packetfilter/filterattack.c
after tested it, `@filterattack 63` looks like everyone is standing still facing each other (remember ZC_CHANGE_DIRECTION packet is still sent)