diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-07-30 20:43:57 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-07-30 20:43:57 +0000 |
commit | 8500597883d7ff7ace2a7d9c661c5c468c8d8ce3 (patch) | |
tree | be81be6a49f90fa2021fca7c9d8f95542f4bb9a2 /src/map/status.c | |
parent | 4362a0c677113465c450da34148e10676c32298f (diff) | |
download | hercules-8500597883d7ff7ace2a7d9c661c5c468c8d8ce3.tar.gz hercules-8500597883d7ff7ace2a7d9c661c5c468c8d8ce3.tar.bz2 hercules-8500597883d7ff7ace2a7d9c661c5c468c8d8ce3.tar.xz hercules-8500597883d7ff7ace2a7d9c661c5c468c8d8ce3.zip |
- Mob casted Sanctuary will no longer always heal it's targets regardless of element/race
- Status change packets will now use as criteria for sending the actual view_class instead of player/not-player. This will fix status-changes displaying improperly on clones, and also possible crashes with disguised players.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@7984 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/status.c')
-rw-r--r-- | src/map/status.c | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/src/map/status.c b/src/map/status.c index f572b6fe8..58aae14ac 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -4307,6 +4307,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val struct homun_data *hd = NULL; struct status_change* sc; struct status_data *status; + struct view_data *vd; int opt_flag , calc_flag, undead_flag; nullpo_retr(0, bl); @@ -4656,6 +4657,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val sc->data[type].timer = -1; } + vd = status_get_viewdata(bl); calc_flag = StatusChangeFlagTable[type]; if(!(flag&4)) //Do not parse val settings when loading SCs switch(type){ @@ -4832,8 +4834,6 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val case SC_WEDDING: case SC_XMAS: - { - struct view_data *vd = status_get_viewdata(bl); if (!vd) return 0; //Store previous values as they could be removed. val1 = vd->class_; @@ -4845,7 +4845,6 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val clif_changelook(bl,LOOK_WEAPON,0); clif_changelook(bl,LOOK_SHIELD,0); clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color); - } break; case SC_NOCHAT: if(!battle_config.muting_players) { @@ -5301,13 +5300,9 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val else val2 = 0; //0 -> Half stat. break; - case SC_TRICKDEAD: /* 死んだふり */ - { - struct view_data *vd = status_get_viewdata(bl); + case SC_TRICKDEAD: if (vd) vd->dead_sit = 1; break; - } - case SC_CONCENTRATE: val2 = 2 + val1; if (sd) { //Store the card-bonus data that should not count in the % @@ -5446,7 +5441,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val break; } - if (sd) //Only for players, client crashes if they receive this for a mob o.O [Skotlex] + if (vd && pcdb_checkid(vd->class_)) //Only for players sprites, client crashes if they receive this for a mob o.O [Skotlex] clif_status_change(bl,StatusIconChangeTable[type],1); // Set option as needed. @@ -5662,6 +5657,7 @@ int status_change_end( struct block_list* bl , int type,int tid ) struct map_session_data *sd; struct status_change *sc; struct status_data *status; + struct view_data *vd; int opt_flag=0, calc_flag; nullpo_retr(0, bl); @@ -5690,8 +5686,6 @@ int status_change_end( struct block_list* bl , int type,int tid ) switch(type){ case SC_WEDDING: case SC_XMAS: - { - struct view_data *vd = status_get_viewdata(bl); if (!vd) return 0; if (sd) //Load data from sd->status.* as the stored values could have changed. status_set_viewdata(bl, sd->status.class_); @@ -5705,7 +5699,6 @@ int status_change_end( struct block_list* bl , int type,int tid ) clif_changelook(bl,LOOK_WEAPON,vd->weapon); clif_changelook(bl,LOOK_SHIELD,vd->shield); clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color); - } break; case SC_RUN: { @@ -5895,12 +5888,9 @@ int status_change_end( struct block_list* bl , int type,int tid ) case SC_MOONLIT: //Clear the unit effect. [Skotlex] skill_setmapcell(bl,CG_MOONLIT, sc->data[SC_MOONLIT].val1, CELL_CLRMOONLIT); break; - case SC_TRICKDEAD: /* 死んだふり */ - { - struct view_data *vd = status_get_viewdata(bl); + case SC_TRICKDEAD: if (vd) vd->dead_sit = 0; break; - } case SC_WARM: if (sc->data[type].val4) { //Clear the group. struct skill_unit_group *group = (struct skill_unit_group *)sc->data[type].val4; @@ -5927,7 +5917,7 @@ int status_change_end( struct block_list* bl , int type,int tid ) break; //guess hes not in jail :P } - if (sd) + if (vd && pcdb_checkid(vd->class_)) clif_status_change(bl,StatusIconChangeTable[type],0); opt_flag = 1; |