From 8ea7fcb1f388e9049029d2c8c77b5894f95d7b3c Mon Sep 17 00:00:00 2001 From: zephyrus Date: Mon, 21 Jan 2008 07:41:52 +0000 Subject: - Optimized some code about @size changes in chars. - Fixed #jailtime (Bug Report 853) crash. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12117 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/charcommand.c | 7 ++++++- src/map/clif.c | 25 ++++++++++++++++++++----- src/map/skill.c | 5 +++-- 3 files changed, 29 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/map/charcommand.c b/src/map/charcommand.c index 5f6fb839e..893dd1425 100644 --- a/src/map/charcommand.c +++ b/src/map/charcommand.c @@ -2830,8 +2830,13 @@ int charcommand_jailtime(const int fd, struct map_session_data* sd, const char* return -1; } + if (!pl_sd->sc.data[SC_JAILED]) { + clif_displaymessage(fd, "This player is not in jail."); + return -1; + } + if (pl_sd->sc.data[SC_JAILED]->val1 == INT_MAX) { - clif_displaymessage(fd, "You have been jailed indefinitely."); + clif_displaymessage(fd, "This player have been jailed indefinitely."); return 0; } diff --git a/src/map/clif.c b/src/map/clif.c index 3b15f3e1a..ffbc78cb1 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -98,6 +98,21 @@ static int max_char_id = DEFAULT_MAX_CHAR_ID; int clif_parse (int fd); +/*========================================== + * Send specials effect to tarjet + *------------------------------------------*/ +int clif_specialeffecttoone(struct block_list *bl, struct block_list *dst, int type) +{ + struct map_session_data *sd = (struct map_session_data *)dst; + + WFIFOW(sd->fd,0) = 0x1f3; + WFIFOL(sd->fd,2) = bl->id; + WFIFOL(sd->fd,6) = type; + WFIFOSET(sd->fd, packet_len(0x1f3)); + + return 0; +} + /*========================================== * mapŽI‚ĢipŻ’č *------------------------------------------*/ @@ -3428,15 +3443,15 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) clif_refreshlook(&sd->bl,bl->id,LOOK_CLOTHES_COLOR,vd->cloth_color,SELF); switch (bl->type) - { // FIXME: 'AREA' causes unneccessary spam since this should be 1:1 communication [ultramage] + { case BL_PC: { TBL_PC* tsd = (TBL_PC*)bl; clif_getareachar_pc(sd, tsd); if(tsd->state.size==2) // tiny/big players [Valaris] - clif_specialeffect(bl,423,AREA); + clif_specialeffecttoone(bl, &sd->bl, 423); else if(tsd->state.size==1) - clif_specialeffect(bl,421,AREA); + clif_specialeffecttoone(bl, &sd->bl, 421); } break; case BL_NPC: @@ -3450,9 +3465,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) { TBL_MOB* md = (TBL_MOB*)bl; if(md->special_state.size==2) // tiny/big mobs [Valaris] - clif_specialeffect(bl,423,AREA); + clif_specialeffecttoone(bl, &sd->bl, 423); else if(md->special_state.size==1) - clif_specialeffect(bl,421,AREA); + clif_specialeffecttoone(bl, &sd->bl, 421); } break; case BL_PET: diff --git a/src/map/skill.c b/src/map/skill.c index e40658d85..b8107ffaa 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3094,8 +3094,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in int class_ = skillid==SA_MONOCELL?1002:mob_get_random_id(2, 1, 0); clif_skill_nodamage(src,bl,skillid,skilllv,1); mob_class_change(dstmd,class_); - if (tsc) { - const int scs[] = { SC_QUAGMIRE, SC_PROVOKE, SC_ROKISWEIL, SC_GRAVITATION, SC_SUITON, SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, SC_STRIPHELM, SC_BLADESTOP }; + if( tsc && dstmd->status.mode&MD_BOSS ) + { + const int scs[] = { SC_QUAGMIRE, SC_PROVOKE, SC_ROKISWEIL, SC_GRAVITATION, SC_SUITON, SC_STRIPWEAPON, SC_STRIPSHIELD, SC_STRIPARMOR, SC_STRIPHELM, SC_BLADESTOP }; for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++) if (tsc->data[i]) status_change_end(bl, i, -1); for (i = 0; i < ARRAYLENGTH(scs); i++) -- cgit v1.2.3-60-g2f50