Untitled
unknown
plain_text
7 months ago
2.2 kB
7
Indexable
bool clif_skill_nodamage(struct block_list *src, struct block_list *dst, uint16 skill_id, int heal, t_tick tick)
{
unsigned char buf[17];
#if PACKETVER < 20130731
const int cmd = 0x11a;
#else
const int cmd = 0x9cb;
#endif
int offset = 0;
bool success = (tick != 0);
nullpo_ret(dst);
// Detectar si la habilidad proviene de un ítem
bool from_item = (src == dst);
// Evitar la animación si es un item skill
if (!from_item) {
switch (skill_id) {
case BS_ADRENALINE:
clif_specialeffect(dst, 98, AREA); break;
case BS_OVERTHRUST:
clif_specialeffect(dst, 128, AREA); break;
case BS_WEAPONPERFECT:
clif_specialeffect(dst, 103, AREA); break;
case SN_WINDWALK:
clif_specialeffect(dst, 389, AREA); break;
case PR_KYRIE:
clif_specialeffect(dst, 112, AREA); break;
case TF_HIDING:
clif_specialeffect(dst, 16, AREA); break;
case PR_GLORIA:
clif_specialeffect(dst, 75, AREA); break;
case AL_ANGELUS:
clif_specialeffect(dst, 41, AREA); break;
default:
break;
}
}
// Construcción del paquete
WBUFW(buf, 0) = cmd;
WBUFW(buf, 2) = skill_id;
#if PACKETVER < 20130731
WBUFW(buf, 4) = min(heal, INT16_MAX);
#else
WBUFL(buf, 4) = min(heal, INT32_MAX);
offset += 2;
#endif
WBUFL(buf, 6 + offset) = dst->id;
WBUFL(buf, 10 + offset) = from_item ? 0 : (src ? src->id : 0);
WBUFB(buf, 14 + offset) = success;
if (disguised(dst)) {
clif_send(buf, packet_len(cmd), dst, AREA_WOS);
WBUFL(buf, 6 + offset) = disguised_bl_id(dst->id);
clif_send(buf, packet_len(cmd), dst, SELF);
} else {
clif_send(buf, packet_len(cmd), dst, AREA);
}
if (src && disguised(src)) {
WBUFL(buf, 10 + offset) = disguised_bl_id(src->id);
if (disguised(dst))
WBUFL(buf, 6 + offset) = dst->id;
clif_send(buf, packet_len(cmd), src, SELF);
}
return success;
}
Editor is loading...
Leave a Comment