summaryrefslogtreecommitdiff
path: root/src/map/clif.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/clif.c')
-rw-r--r--src/map/clif.c276
1 files changed, 161 insertions, 115 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index 259bc7253..f73553b72 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
+ * Copyright (C) 2012-2016 Hercules Dev Team
* Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
@@ -190,7 +190,7 @@ static inline void RFIFOPOS2(int fd, unsigned short pos, short* x0, short* y0, s
#endif // 0
//To identify disguised characters.
-static inline bool disguised(struct block_list* bl)
+bool clif_isdisguised(struct block_list* bl)
{
struct map_session_data *sd = BL_CAST(BL_PC, bl);
if (sd == NULL || sd->disguise == -1)
@@ -265,24 +265,50 @@ uint32 clif_refresh_ip(void)
return 0;
}
+unsigned char clif_bl_type(struct block_list *bl)
+{
#if PACKETVER >= 20071106
-static inline unsigned char clif_bl_type(struct block_list *bl) {
- nullpo_retr(0x1, bl);
+ struct view_data *vd;
+ nullpo_retr(CLUT_NPC, bl);
+
switch (bl->type) {
- case BL_PC: return (disguised(bl) && !pc->db_checkid(status->get_viewdata(bl)->class_))? 0x1:0x0; //PC_TYPE
- case BL_ITEM: return 0x2; //ITEM_TYPE
- case BL_SKILL: return 0x3; //SKILL_TYPE
- case BL_CHAT: return 0x4; //UNKNOWN_TYPE
- case BL_MOB: return pc->db_checkid(status->get_viewdata(bl)->class_)?0x0:0x5; //NPC_MOB_TYPE
- case BL_NPC: return pc->db_checkid(status->get_viewdata(bl)->class_)?0x0:0x6; //NPC_EVT_TYPE
- case BL_PET: return pc->db_checkid(status->get_viewdata(bl)->class_)?0x0:0x7; //NPC_PET_TYPE
- case BL_HOM: return 0x8; //NPC_HOM_TYPE
- case BL_MER: return 0x9; //NPC_MERSOL_TYPE
- case BL_ELEM: return 0xa; //NPC_ELEMENTAL_TYPE
- default: return 0x1; //NPC_TYPE
+ case BL_PC:
+ vd = status->get_viewdata(bl);
+ nullpo_retr(CLUT_NPC, vd);
+
+ if (clif->isdisguised(bl) && !pc->db_checkid(vd->class_))
+ return CLUT_NPC;
+ return CLUT_PC;
+ case BL_ITEM:
+ return CLUT_ITEM;
+ case BL_SKILL:
+ return CLUT_SKILL;
+ case BL_CHAT:
+ return CLUT_UNKNOWN;
+ case BL_MOB:
+ vd = status->get_viewdata(bl);
+ nullpo_retr(CLUT_NPC, vd);
+ return pc->db_checkid(vd->class_) ? CLUT_PC : CLUT_MOB;
+ case BL_NPC:
+ vd = status->get_viewdata(bl);
+ nullpo_retr(CLUT_NPC, vd);
+ return pc->db_checkid(vd->class_) ? CLUT_PC : CLUT_EVENT;
+ case BL_PET:
+ vd = status->get_viewdata(bl);
+ nullpo_retr(CLUT_NPC, vd);
+ return pc->db_checkid(vd->class_) ? CLUT_PC : CLUT_PET;
+ case BL_HOM:
+ return CLUT_HOMNUCLUS;
+ case BL_MER:
+ return CLUT_MERCNARY;
+ case BL_ELEM:
+ return CLUT_ELEMENTAL;
+ default:
+ return CLUT_NPC;
}
-}
#endif
+ return CLUT_UNKNOWN;
+}
/*==========================================
* sub process of clif_send
@@ -823,7 +849,7 @@ void clif_clearunit_area(struct block_list* bl, clr_type type)
clif->send(buf, packet_len(0x80), bl, type == CLR_DEAD ? AREA : AREA_WOS);
- if(disguised(bl)) {
+ if (clif->isdisguised(bl)) {
WBUFL(buf,2) = -bl->id;
clif->send(buf, packet_len(0x80), bl, SELF);
}
@@ -928,7 +954,7 @@ void clif_set_unit_idle2(struct block_list* bl, struct map_session_data *tsd, en
p.PacketType = idle_unit2Type;
#if PACKETVER >= 20071106
- p.objecttype = clif_bl_type(bl);
+ p.objecttype = clif->bl_type(bl);
#endif
p.GID = bl->id;
p.speed = status->get_speed(bl);
@@ -990,7 +1016,7 @@ void clif_set_unit_idle(struct block_list* bl, struct map_session_data *tsd, enu
p.PacketType = idle_unitType;
#if PACKETVER >= 20091103
p.PacketLength = sizeof(p);
- p.objecttype = clif_bl_type(bl);
+ p.objecttype = clif->bl_type(bl);
#endif
#if PACKETVER >= 20131223
p.AID = bl->id;
@@ -1054,7 +1080,7 @@ void clif_set_unit_idle(struct block_list* bl, struct map_session_data *tsd, enu
clif->send(&p,sizeof(p),tsd?&tsd->bl:bl,target);
- if( disguised(bl) ) {
+ if (clif->isdisguised(bl)) {
#if PACKETVER >= 20091103
p.objecttype = pc->db_checkid(status->get_viewdata(bl)->class_) ? 0x0 : 0x5; //PC_TYPE : NPC_MOB_TYPE
p.GID = -bl->id;
@@ -1079,7 +1105,7 @@ void clif_spawn_unit2(struct block_list* bl, enum send_target target) {
p.PacketType = spawn_unit2Type;
#if PACKETVER >= 20071106
- p.objecttype = clif_bl_type(bl);
+ p.objecttype = clif->bl_type(bl);
#endif
p.GID = bl->id;
p.speed = status->get_speed(bl);
@@ -1132,7 +1158,7 @@ void clif_spawn_unit(struct block_list* bl, enum send_target target) {
p.PacketType = spawn_unitType;
#if PACKETVER >= 20091103
p.PacketLength = sizeof(p);
- p.objecttype = clif_bl_type(bl);
+ p.objecttype = clif->bl_type(bl);
#endif
#if PACKETVER >= 20131223
p.AID = bl->id;
@@ -1192,7 +1218,7 @@ void clif_spawn_unit(struct block_list* bl, enum send_target target) {
p.body = vd->body_style;
safestrncpy(p.name, clif->get_bl_name(bl), NAME_LENGTH);
#endif
- if( disguised(bl) ) {
+ if (clif->isdisguised(bl)) {
nullpo_retv(sd);
if( sd->status.class_ != sd->disguise )
clif->send(&p,sizeof(p),bl,target);
@@ -1228,7 +1254,7 @@ void clif_set_unit_walking(struct block_list* bl, struct map_session_data *tsd,
p.PacketLength = sizeof(p);
#endif
#if PACKETVER >= 20071106
- p.objecttype = clif_bl_type(bl);
+ p.objecttype = clif->bl_type(bl);
#endif
#if PACKETVER >= 20131223
p.AID = bl->id;
@@ -1287,7 +1313,7 @@ void clif_set_unit_walking(struct block_list* bl, struct map_session_data *tsd,
clif->send(&p,sizeof(p),tsd?&tsd->bl:bl,target);
- if( disguised(bl) ) {
+ if (clif->isdisguised(bl)) {
#if PACKETVER >= 20091103
p.objecttype = pc->db_checkid(status->get_viewdata(bl)->class_) ? 0x0 : 0x5; //PC_TYPE : NPC_MOB_TYPE
p.GID = -bl->id;
@@ -1429,7 +1455,7 @@ bool clif_spawn(struct block_list *bl)
if (sd->bg_id != 0 && map->list[sd->bl.m].flag.battleground)
clif->sendbgemblem_area(sd);
for (i = 0; i < sd->sc_display_count; i++) {
- clif->sc_load(&sd->bl, sd->bl.id,AREA,status->dbs->IconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3);
+ clif->sc_continue(&sd->bl, sd->bl.id,AREA,status->dbs->IconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3);
}
if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count > 0)
clif->spiritcharm(sd);
@@ -1756,7 +1782,7 @@ void clif_move(struct unit_data *ud)
clif->send(buf, packet_len(0x86), bl, AREA_WOS);
- if (disguised(bl)) {
+ if (clif->isdisguised(bl)) {
WBUFL(buf,2)=-bl->id;
clif->send(buf, packet_len(0x86), bl, SELF);
}
@@ -1849,7 +1875,7 @@ void clif_fixpos(struct block_list *bl) {
WBUFW(buf,8) = bl->y;
clif->send(buf, packet_len(0x88), bl, AREA);
- if( disguised(bl) ) {
+ if (clif->isdisguised(bl)) {
WBUFL(buf,2) = -bl->id;
clif->send(buf, packet_len(0x88), bl, SELF);
}
@@ -1960,6 +1986,10 @@ void clif_selllist(struct map_session_data *sd)
void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes)
{
int fd, slen;
+#ifdef SCRIPT_MES_STRIP_LINEBREAK
+ char *stripmes = NULL;
+ int i;
+#endif
nullpo_retv(sd);
nullpo_retv(mes);
@@ -1974,7 +2004,17 @@ void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes)
WFIFOW(fd,0) = 0xb4;
WFIFOW(fd,2) = slen;
WFIFOL(fd,4) = npcid;
+#ifdef SCRIPT_MES_STRIP_LINEBREAK
+ stripmes = aStrdup(mes);
+ for (i = 0; stripmes[i] != '\0'; ++i) {
+ if (stripmes[i] == '\r')
+ stripmes[i] = ' ';
+ }
+ memcpy(WFIFOP(fd,8), stripmes, slen-8);
+ aFree(stripmes);
+#else // ! SCRIPT_MES_STRIP_LINEBREAK
memcpy(WFIFOP(fd,8), mes, slen-8);
+#endif // SCRIPT_MES_STRIP_LINEBREAK
WFIFOSET(fd,WFIFOW(fd,2));
}
@@ -2365,7 +2405,7 @@ void clif_additem(struct map_session_data *sd, int n, int amount, int fail) {
p.nameid = sd->status.inventory[n].nameid;
p.IsIdentified = sd->status.inventory[n].identify ? 1 : 0;
- p.IsDamaged = sd->status.inventory[n].attribute ? 1 : 0;
+ p.IsDamaged = (sd->status.inventory[n].attribute & ATTR_BROKEN) != 0 ? 1 : 0;
p.refiningLevel =sd->status.inventory[n].refine;
clif->addcards2(&p.slot.card[0], &sd->status.inventory[n]);
p.location = pc->equippoint(sd,n);
@@ -2480,7 +2520,7 @@ void clif_item_equip(short idx, struct EQUIPITEM_INFO *p, struct item *i, struct
p->location = eqp_pos;
p->WearState = i->equip;
#if PACKETVER < 20120925
- p->IsDamaged = i->attribute ? 1 : 0;
+ p->IsDamaged = (i->attribute & ATTR_BROKEN) != 0 ? 1 : 0;
#endif
p->RefiningLevel = i->refine;
@@ -2500,7 +2540,7 @@ void clif_item_equip(short idx, struct EQUIPITEM_INFO *p, struct item *i, struct
#if PACKETVER >= 20120925
p->Flag.IsIdentified = i->identify ? 1 : 0;
- p->Flag.IsDamaged = i->attribute ? 1 : 0;
+ p->Flag.IsDamaged = (i->attribute & ATTR_BROKEN) != 0 ? 1 : 0;
p->Flag.PlaceETCTab = i->favorite ? 1 : 0;
p->Flag.SpareBits = 0;
#endif
@@ -3198,7 +3238,7 @@ void clif_changelook(struct block_list *bl,int type,int val)
}
// prevent leaking the presence of GM-hidden objects
- if( sc && sc->option&OPTION_INVISIBLE && !disguised(bl) )
+ if (sc && sc->option&OPTION_INVISIBLE && !clif->isdisguised(bl))
target = SELF;
#if PACKETVER < 4
clif->sendlook(bl, bl->id, type, val, 0, target);
@@ -3209,11 +3249,12 @@ void clif_changelook(struct block_list *bl,int type,int val)
val = vd->weapon;
val2 = vd->shield;
}
- if( disguised(bl) ) {
+ if (clif->isdisguised(bl)) {
clif->sendlook(bl, bl->id, type, val, val2, AREA_WOS);
clif->sendlook(bl, -bl->id, type, val, val2, SELF);
- } else
+ } else {
clif->sendlook(bl, bl->id, type, val, val2, target);
+ }
#endif
}
@@ -3494,15 +3535,16 @@ void clif_changeoption(struct block_list* bl)
WBUFW(buf,8) = (sc) ? sc->opt2 : 0;
WBUFL(buf,10) = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
WBUFB(buf,14) = (sd)? sd->status.karma : 0;
- if(disguised(bl)) {
+ if (clif->isdisguised(bl)) {
clif->send(buf,packet_len(0x229),bl,AREA_WOS);
WBUFL(buf,2) = -bl->id;
clif->send(buf,packet_len(0x229),bl,SELF);
WBUFL(buf,2) = bl->id;
WBUFL(buf,10) = OPTION_INVISIBLE;
clif->send(buf,packet_len(0x229),bl,SELF);
- } else
+ } else {
clif->send(buf,packet_len(0x229),bl,AREA);
+ }
#else
WBUFW(buf,0) = 0x119;
WBUFL(buf,2) = bl->id;
@@ -3510,15 +3552,16 @@ void clif_changeoption(struct block_list* bl)
WBUFW(buf,8) = (sc) ? sc->opt2 : 0;
WBUFL(buf,10) = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
WBUFB(buf,12) = (sd)? sd->status.karma : 0;
- if(disguised(bl)) {
+ if (clif->isdisguised(bl)) {
clif->send(buf,packet_len(0x119),bl,AREA_WOS);
WBUFL(buf,2) = -bl->id;
clif->send(buf,packet_len(0x119),bl,SELF);
WBUFL(buf,2) = bl->id;
WBUFW(buf,10) = OPTION_INVISIBLE;
clif->send(buf,packet_len(0x119),bl,SELF);
- } else
+ } else {
clif->send(buf,packet_len(0x119),bl,AREA);
+ }
#endif
}
@@ -3536,15 +3579,16 @@ void clif_changeoption2(struct block_list* bl) {
WBUFL(buf,6) = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
WBUFL(buf,10) = clif_setlevel(bl);
WBUFL(buf,14) = (sc) ? sc->opt3 : 0;
- if(disguised(bl)) {
+ if (clif->isdisguised(bl)) {
clif->send(buf,packet_len(0x28a),bl,AREA_WOS);
WBUFL(buf,2) = -bl->id;
clif->send(buf,packet_len(0x28a),bl,SELF);
WBUFL(buf,2) = bl->id;
WBUFL(buf,6) = OPTION_INVISIBLE;
clif->send(buf,packet_len(0x28a),bl,SELF);
- } else
+ } else {
clif->send(buf,packet_len(0x28a),bl,AREA);
+ }
}
/// Notifies the client about the result of an item use request.
@@ -4142,7 +4186,7 @@ void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* ds
clif->charm_single(sd->fd, dstsd);
for( i = 0; i < dstsd->sc_display_count; i++ ) {
- clif->sc_load(&sd->bl,dstsd->bl.id,SELF,status->dbs->IconChangeTable[dstsd->sc_display[i]->type],dstsd->sc_display[i]->val1,dstsd->sc_display[i]->val2,dstsd->sc_display[i]->val3);
+ clif->sc_continue(&sd->bl,dstsd->bl.id,SELF,status->dbs->IconChangeTable[dstsd->sc_display[i]->type],dstsd->sc_display[i]->val1,dstsd->sc_display[i]->val2,dstsd->sc_display[i]->val3);
}
if( (sd->status.party_id && dstsd->status.party_id == sd->status.party_id) || //Party-mate, or hpdisp setting.
(sd->bg_id && sd->bg_id == dstsd->bg_id) || //BattleGround
@@ -4332,16 +4376,17 @@ int clif_damage(struct block_list* src, struct block_list* dst, int sdelay, int
p.is_sp_damaged = 0; // TODO: IsSPDamage - Displays blue digits.
#endif
- if(disguised(dst)) {
+ if (clif->isdisguised(dst)) {
clif->send(&p,sizeof(p),dst,AREA_WOS);
p.targetGID = -dst->id;
clif->send(&p,sizeof(p),dst,SELF);
- } else
+ } else {
clif->send(&p,sizeof(p),dst,AREA);
+ }
- if(disguised(src)) {
+ if (clif->isdisguised(src)) {
p.GID = -src->id;
- if (disguised(dst))
+ if (clif->isdisguised(dst))
p.targetGID = dst->id;
if(damage > 0) p.damage = -1;
@@ -4390,7 +4435,7 @@ void clif_sitting(struct block_list* bl)
WBUFB(buf,26) = 2;
clif->send(buf, packet_len(0x8a), bl, AREA);
- if(disguised(bl)) {
+ if (clif->isdisguised(bl)) {
WBUFL(buf, 2) = - bl->id;
clif->send(buf, packet_len(0x8a), bl, SELF);
}
@@ -4409,7 +4454,7 @@ void clif_standing(struct block_list* bl)
WBUFB(buf,26) = 3;
clif->send(buf, packet_len(0x8a), bl, AREA);
- if(disguised(bl)) {
+ if (clif->isdisguised(bl)) {
WBUFL(buf, 2) = - bl->id;
clif->send(buf, packet_len(0x8a), bl, SELF);
}
@@ -4886,7 +4931,7 @@ void clif_skillinfo(struct map_session_data *sd,int skill_id, int inf)
/// is disposable:
/// 0 = yellow chat text "[src name] will use skill [skill name]."
/// 1 = no text
-void clif_skillcasting(struct block_list* bl, int src_id, int dst_id, int dst_x, int dst_y, uint16 skill_id, int property, int casttime)
+void clif_useskill(struct block_list* bl, int src_id, int dst_id, int dst_x, int dst_y, uint16 skill_id, uint16 skill_lv, int casttime)
{
#if PACKETVER < 20091124
const int cmd = 0x13e;
@@ -4894,6 +4939,7 @@ void clif_skillcasting(struct block_list* bl, int src_id, int dst_id, int dst_x,
const int cmd = 0x7fb;
#endif
unsigned char buf[32];
+ int property = skill->get_ele(skill_id, skill_lv);
WBUFW(buf,0) = cmd;
WBUFL(buf,2) = src_id;
@@ -4907,12 +4953,13 @@ void clif_skillcasting(struct block_list* bl, int src_id, int dst_id, int dst_x,
WBUFB(buf,24) = 0; // isDisposable
#endif
- if (disguised(bl)) {
+ if (clif->isdisguised(bl)) {
clif->send(buf,packet_len(cmd), bl, AREA_WOS);
WBUFL(buf,2) = -src_id;
clif->send(buf,packet_len(cmd), bl, SELF);
- } else
+ } else {
clif->send(buf,packet_len(cmd), bl, AREA);
+ }
}
/// Notifies clients in area, that an object canceled casting (ZC_DISPEL).
@@ -5042,16 +5089,17 @@ int clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick
WBUFW(buf, 26) = skill_lv;
WBUFW(buf, 28) = div;
WBUFB(buf, 30) = type;
- if (disguised(dst)) {
+ if (clif->isdisguised(dst)) {
clif->send(buf, packet_len(0x114), dst, AREA_WOS);
WBUFL(buf, 8) = -dst->id;
clif->send(buf, packet_len(0x114), dst, SELF);
- } else
+ } else {
clif->send(buf, packet_len(0x114), dst, AREA);
+ }
- if (disguised(src)) {
+ if (clif->isdisguised(src)) {
WBUFL(buf, 4) = -src->id;
- if (disguised(dst))
+ if (clif->isdisguised(dst))
WBUFL(buf, 8) = dst->id;
if (damage > 0)
WBUFW(buf, 24) = -1;
@@ -5081,16 +5129,17 @@ int clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick
#else
WBUFB(buf, 32) = (type == BDT_SKILL) ? BDT_MULTIHIT : type;
#endif
- if (disguised(dst)) {
+ if (clif->isdisguised(dst)) {
clif->send(buf, packet_len(0x1de), dst, AREA_WOS);
WBUFL(buf,8)=-dst->id;
clif->send(buf, packet_len(0x1de), dst, SELF);
- } else
+ } else {
clif->send(buf, packet_len(0x1de), dst, AREA);
+ }
- if (disguised(src)) {
+ if (clif->isdisguised(src)) {
WBUFL(buf, 4) = -src->id;
- if (disguised(dst))
+ if (clif->isdisguised(dst))
WBUFL(buf, 8) = dst->id;
if (damage > 0)
WBUFL(buf, 24) = -1;
@@ -5139,15 +5188,15 @@ int clif_skill_damage2(struct block_list *src, struct block_list *dst, int64 tic
WBUFW(buf,32)=div;
WBUFB(buf,34)=type;
clif->send(buf,packet_len(0x115),src,AREA);
- if(disguised(src)) {
+ if (clif->isdisguised(src)) {
WBUFL(buf,4)=-src->id;
if(damage > 0)
WBUFW(buf,28)=-1;
clif->send(buf,packet_len(0x115),src,SELF);
}
- if (disguised(dst)) {
+ if (clif->isdisguised(dst)) {
WBUFL(buf,8)=-dst->id;
- if (disguised(src))
+ if (clif->isdisguised(src))
WBUFL(buf,4)=src->id;
else if(damage > 0)
WBUFW(buf,28)=-1;
@@ -5174,16 +5223,16 @@ int clif_skill_nodamage(struct block_list *src,struct block_list *dst,uint16 ski
WBUFL(buf,10)=src?src->id:0;
WBUFB(buf,14)=fail;
- if (disguised(dst)) {
+ if (clif->isdisguised(dst)) {
clif->send(buf,packet_len(0x11a),dst,AREA_WOS);
WBUFL(buf,6)=-dst->id;
clif->send(buf,packet_len(0x11a),dst,SELF);
} else
clif->send(buf,packet_len(0x11a),dst,AREA);
- if(src && disguised(src)) {
+ if (src && clif->isdisguised(src)) {
WBUFL(buf,10)=-src->id;
- if (disguised(dst))
+ if (clif->isdisguised(dst))
WBUFL(buf,6)=dst->id;
clif->send(buf,packet_len(0x11a),src,SELF);
}
@@ -5205,12 +5254,13 @@ void clif_skill_poseffect(struct block_list *src, uint16 skill_id, int val, int
WBUFW(buf,10)=x;
WBUFW(buf,12)=y;
WBUFL(buf,14)=(uint32)tick;
- if(disguised(src)) {
+ if (clif->isdisguised(src)) {
clif->send(buf,packet_len(0x117),src,AREA_WOS);
WBUFL(buf,4)=-src->id;
clif->send(buf,packet_len(0x117),src,SELF);
- } else
+ } else {
clif->send(buf,packet_len(0x117),src,AREA);
+ }
}
/// Presents a list of available warp destinations (ZC_WARPLIST).
@@ -5682,7 +5732,7 @@ void clif_resurrection(struct block_list *bl,int type)
WBUFW(buf,6)=0;
clif->send(buf,packet_len(0x148),bl, type == 1 ? AREA : AREA_WOS);
- if (disguised(bl)) {
+ if (clif->isdisguised(bl)) {
struct map_session_data *sd = BL_UCAST(BL_PC, bl);
if (sd->fontcolor) {
WBUFL(buf,2)=-bl->id;
@@ -5979,7 +6029,7 @@ void clif_item_repair_list(struct map_session_data *sd,struct map_session_data *
WFIFOW(fd,0)=0x1fc;
for (i = c = 0; i < MAX_INVENTORY; i++) {
int nameid = dstsd->status.inventory[i].nameid;
- if (nameid > 0 && dstsd->status.inventory[i].attribute != 0) { // && skill_can_repair(sd,nameid)) {
+ if (nameid > 0 && (dstsd->status.inventory[i].attribute & ATTR_BROKEN) != 0) { // && skill_can_repair(sd,nameid)) {
WFIFOW(fd,c*13+4) = i;
WFIFOW(fd,c*13+6) = nameid;
WFIFOB(fd,c*13+8) = dstsd->status.inventory[i].refine;
@@ -6517,7 +6567,7 @@ void clif_party_inviteack(struct map_session_data* sd, const char* nick, int res
#if PACKETVER < 20070904
if( result == 7 ) {
- clif->message(fd, msg_sd(sd,3));
+ clif->message(fd, msg_sd(sd,3)); // Character not found.
return;
}
#endif
@@ -8171,7 +8221,7 @@ void clif_specialeffect(struct block_list* bl, int type, enum send_target target
clif->send(buf, packet_len(0x1f3), bl, target);
- if (disguised(bl)) {
+ if (clif->isdisguised(bl)) {
WBUFL(buf,2) = -bl->id;
clif->send(buf, packet_len(0x1f3), bl, SELF);
}
@@ -8203,8 +8253,7 @@ void clif_specialeffect_value(struct block_list* bl, int effect_id, int num, sen
clif->send(buf, packet_len(0x284), bl, target);
- if( disguised(bl) )
- {
+ if (clif->isdisguised(bl)) {
WBUFL(buf,2) = -bl->id;
clif->send(buf, packet_len(0x284), bl, SELF);
}
@@ -8352,7 +8401,7 @@ void clif_refresh(struct map_session_data *sd)
mail->clear(sd);
- if( disguised(&sd->bl) ) {/* refresh-da */
+ if (clif->isdisguised(&sd->bl)) {/* refresh-da */
short disguise = sd->disguise;
pc->disguise(sd, -1);
pc->disguise(sd, disguise);
@@ -8567,8 +8616,7 @@ void clif_slide(struct block_list *bl, int x, int y)
WBUFW(buf, 8) = y;
clif->send(buf, packet_len(0x1ff), bl, AREA);
- if( disguised(bl) )
- {
+ if (clif->isdisguised(bl)) {
WBUFL(buf,2) = -bl->id;
clif->send(buf, packet_len(0x1ff), bl, SELF);
}
@@ -9500,7 +9548,8 @@ void clif_parse_LoadEndAck(int fd, struct map_session_data *sd) {
clif->clearunit_area(&sd->bl, CLR_DEAD);
else {
skill->usave_trigger(sd);
- sd->ud.dir = 0;/* enforce north-facing (not visually, virtually) */
+ if (battle_config.player_warp_keep_direction == 1)
+ clif->changed_dir(&sd->bl, SELF); // Visually updates player facing direction
}
// Trigger skill effects if you appear standing on them
@@ -9740,7 +9789,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) {
// 'see people in GM hide' cheat detection
#if 0 /* disabled due to false positives (network lag + request name of char that's about to hide = race condition) */
sc = status->get_sc(bl);
- if (sc && sc->option&OPTION_INVISIBLE && !disguised(bl) &&
+ if (sc && sc->option&OPTION_INVISIBLE && !clif->isdisguised(bl) &&
bl->type != BL_NPC && //Skip hidden NPCs which can be seen using Maya Purple
pc_get_group_level(sd) < battle_config.hack_info_GM_level
) {
@@ -9910,7 +9959,7 @@ void clif_changed_dir(struct block_list *bl, enum send_target target)
clif->send(buf, packet_len(0x9c), bl, target);
- if (disguised(bl)) {
+ if (clif->isdisguised(bl)) {
WBUFL(buf,2) = -bl->id;
WBUFW(buf,6) = 0;
clif->send(buf, packet_len(0x9c), bl, SELF);
@@ -10029,7 +10078,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type,
if( sd->sc.option&OPTION_COSTUME )
return;
- if (!battle_config.sdelay_attack_enable && pc->checkskill(sd, SA_FREECAST) <= 0) {
+ if (!battle_config.sdelay_attack_enable && pc->checkskill(sd, SA_FREECAST) <= 0 && (skill->get_inf2(sd->ud.skill_id) & (INF2_FREE_CAST_REDUCED | INF2_FREE_CAST_NORMAL)) == 0) {
if (DIFF_TICK(tick, sd->ud.canact_tick) < 0) {
clif->skill_fail(sd, 1, USESKILL_FAIL_SKILLINTERVAL, 0);
return;
@@ -10212,7 +10261,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd)
if (k < sd->channel_count || channel->join(chan, sd, "", true) == HCS_STATUS_OK) {
channel->send(chan,sd,message);
} else {
- clif->message(fd, msg_fd(fd,1402));
+ clif->message(fd, msg_fd(fd,1402)); //You're not in that channel, type '@join <#channel_name>'
}
return;
} else if (strcmpi(&chname[1], channel->config->ally_name) == 0) {
@@ -11153,7 +11202,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd)
sd->skillitem = sd->skillitemlv = 0;
- if( skill_id >= GD_SKILLBASE ) {
+ if (skill_id >= GD_SKILLBASE && skill_id < GD_MAX) {
if( sd->state.gmaster_flag )
skill_lv = guild->checkskill(sd->guild, skill_id);
else
@@ -11527,10 +11576,10 @@ void clif_parse_OneClick_ItemIdentify(int fd, struct map_session_data *sd)
int cmd = RFIFOW(fd,0);
short idx = RFIFOW(fd, packet_db[cmd].pos[0]) - 2;
int n;
-
+
if (idx < 0 || idx >= MAX_INVENTORY || sd->inventory_data[idx] == NULL || sd->status.inventory[idx].nameid <= 0)
return;
-
+
if ((n = pc->have_magnifier(sd) ) != INDEX_NOT_FOUND &&
pc->delitem(sd, n, 1, 0, DELITEM_NORMAL, LOG_TYPE_CONSUME) == 0)
skill->identify(sd, idx);
@@ -11807,7 +11856,7 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd)
if( map->list[sd->bl.m].flag.partylock ) {
// Party locked.
- clif->message(fd, msg_fd(fd,227));
+ clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map.
return;
}
if( battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 7 ) {
@@ -11829,7 +11878,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd)
if( map->list[sd->bl.m].flag.partylock ) {
// Party locked.
- clif->message(fd, msg_fd(fd,227));
+ clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map.
return;
}
if( battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 7 ) {
@@ -11849,7 +11898,7 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) {
if(map->list[sd->bl.m].flag.partylock) {
// Party locked.
- clif->message(fd, msg_fd(fd,227));
+ clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map.
return;
}
@@ -11873,7 +11922,7 @@ void clif_parse_PartyInvite2(int fd, struct map_session_data *sd)
if(map->list[sd->bl.m].flag.partylock) {
// Party locked.
- clif->message(fd, msg_fd(fd,227));
+ clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map.
return;
}
@@ -11911,7 +11960,7 @@ void clif_parse_LeaveParty(int fd, struct map_session_data *sd) __attribute__((n
void clif_parse_LeaveParty(int fd, struct map_session_data *sd) {
if(map->list[sd->bl.m].flag.partylock) {
// Party locked.
- clif->message(fd, msg_fd(fd,227));
+ clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map.
return;
}
party->leave(sd);
@@ -11923,7 +11972,7 @@ void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd) __attribu
void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd) {
if(map->list[sd->bl.m].flag.partylock) {
// Party locked.
- clif->message(fd, msg_fd(fd,227));
+ clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map.
return;
}
party->removemember(sd, RFIFOL(fd,2), RFIFOP(fd,6));
@@ -12704,8 +12753,7 @@ void clif_parse_CreateGuild(int fd,struct map_session_data *sd)
safestrncpy(name, RFIFOP(fd,6), NAME_LENGTH);
if(map->list[sd->bl.m].flag.guildlock) {
- //Guild locked.
- clif->message(fd, msg_fd(fd,228));
+ clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
@@ -12831,7 +12879,8 @@ bool clif_validate_emblem(const uint8 *emblem, unsigned long emblem_len) {
int header = 0, bitmap = 0, offbits = 0, palettesize = 0;
nullpo_retr(false, emblem);
- if( decode_zip(buf, &buf_len, emblem, emblem_len) != 0 || buf_len < BITMAPFILEHEADER_SIZE + BITMAPINFOHEADER_SIZE
+ if (grfio->decode_zip(buf, &buf_len, emblem, emblem_len) != 0
+ || buf_len < BITMAPFILEHEADER_SIZE + BITMAPINFOHEADER_SIZE
|| RBUFW(buf,0) != 0x4d42 // BITMAPFILEHEADER.bfType (signature)
|| RBUFL(buf,2) != buf_len // BITMAPFILEHEADER.bfSize (file size)
|| RBUFL(buf,14) != BITMAPINFOHEADER_SIZE // BITMAPINFOHEADER.biSize (other headers are not supported)
@@ -12980,8 +13029,7 @@ bool clif_sub_guild_invite(int fd, struct map_session_data *sd, struct map_sessi
nullpo_retr(false, sd);
nullpo_retr(false, t_sd);
if ( map->list[sd->bl.m].flag.guildlock ) {
- //Guild locked.
- clif->message(fd, msg_fd(fd,228));
+ clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return false;
}
@@ -13034,8 +13082,7 @@ void clif_parse_GuildLeave(int fd,struct map_session_data *sd) __attribute__((no
/// 0159 <guild id>.L <account id>.L <char id>.L <reason>.40B
void clif_parse_GuildLeave(int fd,struct map_session_data *sd) {
if(map->list[sd->bl.m].flag.guildlock) {
- //Guild locked.
- clif->message(fd, msg_fd(fd,228));
+ clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
if( sd->bg_id ) {
@@ -13051,8 +13098,7 @@ void clif_parse_GuildExpulsion(int fd,struct map_session_data *sd) __attribute__
/// 015b <guild id>.L <account id>.L <char id>.L <reason>.40B
void clif_parse_GuildExpulsion(int fd,struct map_session_data *sd) {
if( map->list[sd->bl.m].flag.guildlock || sd->bg_id ) {
- // Guild locked.
- clif->message(fd, msg_fd(fd,228));
+ clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
guild->expulsion(sd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOP(fd,14));
@@ -13093,8 +13139,7 @@ void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd) {
return;
if(map->list[sd->bl.m].flag.guildlock) {
- //Guild locked.
- clif->message(fd, msg_fd(fd,228));
+ clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
@@ -13131,8 +13176,7 @@ void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd) {
return;
if(map->list[sd->bl.m].flag.guildlock) {
- //Guild locked.
- clif->message(fd, msg_fd(fd,228));
+ clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
guild->delalliance(sd,RFIFOL(fd,2),RFIFOL(fd,6));
@@ -13148,8 +13192,7 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) {
return;
if(map->list[sd->bl.m].flag.guildlock) {
- //Guild locked.
- clif->message(fd, msg_fd(fd,228));
+ clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
@@ -13172,8 +13215,7 @@ void clif_parse_GuildBreak(int fd, struct map_session_data *sd) __attribute__((n
/// field name and size is same as the one in CH_DELETE_CHAR.
void clif_parse_GuildBreak(int fd, struct map_session_data *sd) {
if( map->list[sd->bl.m].flag.guildlock ) {
- //Guild locked.
- clif->message(fd, msg_fd(fd,228));
+ clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
guild->dobreak(sd, RFIFOP(fd,2));
@@ -13887,7 +13929,7 @@ void clif_parse_FriendsListAdd(int fd, struct map_session_data *sd)
// Friend doesn't exist (no player with this name)
if (f_sd == NULL) {
- clif->message(fd, msg_fd(fd,3));
+ clif->message(fd, msg_fd(fd,3)); // "Character not found."
return;
}
@@ -15232,7 +15274,7 @@ void clif_parse_Auction_register(int fd, struct map_session_data *sd)
// Auction checks...
if( sd->status.inventory[sd->auction.index].bound && !pc_can_give_bound_items(sd) ) {
- clif->message(sd->fd, msg_sd(sd,293));
+ clif->message(sd->fd, msg_sd(sd,293)); // This bound item cannot be traded to that character.
clif->auction_message(fd, 2); // The auction has been canceled
return;
}
@@ -15285,7 +15327,7 @@ void clif_parse_Auction_bid(int fd, struct map_session_data *sd)
int bid = RFIFOL(fd,6);
if( !pc_can_give_items(sd) ) { //They aren't supposed to give zeny [Inkfish]
- clif->message(sd->fd, msg_sd(sd,246));
+ clif->message(sd->fd, msg_sd(sd,246)); // Your GM level doesn't authorize you to perform this action.
return;
}
@@ -18297,7 +18339,7 @@ void clif_parse_RouletteOpen(int fd, struct map_session_data* sd) {
struct packet_roulette_open_ack p;
if( !battle_config.feature_roulette ) {
- clif->message(fd,"Roulette is disabled");
+ clif->message(fd, msg_fd(fd,82)); // Roulette is disabled
return;
}
@@ -18320,7 +18362,7 @@ void clif_parse_RouletteInfo(int fd, struct map_session_data* sd) {
unsigned short i, j, count = 0;
if( !battle_config.feature_roulette ) {
- clif->message(fd,"Roulette is disabled");
+ clif->message(fd, msg_fd(fd,82)); // Roulette is disabled
return;
}
@@ -18344,7 +18386,7 @@ void clif_parse_RouletteInfo(int fd, struct map_session_data* sd) {
void clif_parse_RouletteClose(int fd, struct map_session_data* sd) __attribute__((nonnull (2)));
void clif_parse_RouletteClose(int fd, struct map_session_data* sd) {
if( !battle_config.feature_roulette ) {
- clif->message(fd,"Roulette is disabled");
+ clif->message(fd, msg_fd(fd,82)); // Roulette is disabled
return;
}
@@ -18360,7 +18402,7 @@ void clif_parse_RouletteGenerate(int fd, struct map_session_data* sd) {
short stage = sd->roulette.stage;
if( !battle_config.feature_roulette ) {
- clif->message(fd,"Roulette is disabled");
+ clif->message(fd, msg_fd(fd,82)); // Roulette is disabled
return;
}
@@ -18416,7 +18458,7 @@ void clif_parse_RouletteRecvItem(int fd, struct map_session_data* sd) {
struct packet_roulette_itemrecv_ack p;
if( !battle_config.feature_roulette ) {
- clif->message(fd,"Roulette is disabled");
+ clif->message(fd, msg_fd(fd,82)); // Roulette is disabled
return;
}
@@ -19272,6 +19314,7 @@ void clif_defaults(void) {
clif->autoshadowspell_list = clif_autoshadowspell_list;
clif->skill_itemlistwindow = clif_skill_itemlistwindow;
clif->sc_load = clif_status_change2;
+ clif->sc_continue = clif_status_change2;
clif->sc_end = clif_status_change_end;
clif->initialstatus = clif_initialstatus;
clif->cooldown_list = clif_skill_cooldown_list;
@@ -19305,7 +19348,7 @@ void clif_defaults(void) {
clif->skill_poseffect = clif_skill_poseffect;
clif->skill_estimation = clif_skill_estimation;
clif->skill_warppoint = clif_skill_warppoint;
- clif->skillcasting = clif_skillcasting;
+ clif->useskill = clif_useskill;
clif->produce_effect = clif_produceeffect;
clif->devotion = clif_devotion;
clif->spiritball = clif_spiritball;
@@ -19591,6 +19634,9 @@ void clif_defaults(void) {
clif->ackmergeitems = clif_ackmergeitems;
/* Cart Deco */
clif->selectcart = clif_selectcart;
+ /* */
+ clif->isdisguised = clif_isdisguised;
+ clif->bl_type = clif_bl_type;
/*------------------------
*- Parse Incoming Packet