summaryrefslogtreecommitdiff
path: root/src/map/status.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/status.c')
-rw-r--r--src/map/status.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/map/status.c b/src/map/status.c
index b69417757..dee934c8f 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -4631,12 +4631,15 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
int mode;
struct status_data *bstatus = status_get_base_status(bl);
if (!bstatus) return 0;
+ if (sc->data[type].timer != -1)
+ { //Pile up with previous values.
+ if(!val2) val2 = sc->data[type].val2;
+ val3 |= sc->data[type].val3;
+ val4 |= sc->data[type].val4;
+ }
mode = val2?val2:bstatus->mode; //Base mode
- //Mode added AND removed? Added has priority.
- if ((val3&val4))
- val4&= ~(val3&val4);
- if (val3) mode|= val3; //Add mode
if (val4) mode&=~val4; //Del mode
+ if (val3) mode|= val3; //Add mode
if (mode == bstatus->mode) { //No change.
if (sc->data[type].timer != -1) //Abort previous status
return status_change_end(bl, type, -1);