diff options
-rw-r--r-- | src/map/script.c | 45 | ||||
-rw-r--r-- | src/map/status.c | 13 |
2 files changed, 45 insertions, 13 deletions
diff --git a/src/map/script.c b/src/map/script.c index db2c2832e..53dbfae98 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -9661,8 +9661,10 @@ BUILDIN_FUNC(getusersname) if (pc_has_permission(pl_sd, PC_PERM_HIDE_SESSION) && pc_get_group_level(pl_sd) > group_level) continue; // skip hidden sessions + /* Temporary fix for bugreport:1023. + * Do not uncomment unless you want thousands of 'next' buttons. if((disp_num++)%10==0) - clif_scriptnext(sd,st->oid); + clif_scriptnext(sd,st->oid);*/ clif_scriptmes(sd,st->oid,pl_sd->status.name); } mapit_free(iter); @@ -9946,29 +9948,46 @@ BUILDIN_FUNC(sc_end) struct block_list* bl; int type; - type = script_getnum(st,2); - if( script_hasdata(st,3) ) - bl = map_id2bl(script_getnum(st,3)); + type = script_getnum(st, 2); + if (script_hasdata(st, 3)) + bl = map_id2bl(script_getnum(st, 3)); else bl = map_id2bl(st->rid); - if( potion_flag==1 && potion_target ) - {//##TODO how does this work [FlavioJS] + if (potion_flag == 1 && potion_target) //##TODO how does this work [FlavioJS] bl = map_id2bl(potion_target); - } - if( !bl ) return 0; + if (!bl) + return 0; - if( type >= 0 && type < SC_MAX ) + if (type >= 0 && type < SC_MAX) { struct status_change *sc = status_get_sc(bl); - struct status_change_entry *sce = sc?sc->data[type]:NULL; - if (!sce) return 0; + struct status_change_entry *sce = sc ? sc->data[type] : NULL; + + if (!sce) + return 0; + + + switch (type) + { + case SC_WEIGHT50: + case SC_WEIGHT90: + case SC_NOCHAT: + case SC_PUSH_CART: + return 0; + + default: + break; + } + //This should help status_change_end force disabling the SC in case it has no limit. sce->val1 = sce->val2 = sce->val3 = sce->val4 = 0; status_change_end(bl, (sc_type)type, INVALID_TIMER); - } else - status_change_clear(bl, 2);// remove all effects + } + else + status_change_clear(bl, 3); // remove all effects + return 0; } diff --git a/src/map/status.c b/src/map/status.c index 9e3b642d6..10431bace 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -8841,6 +8841,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val * 0 - PC killed -> Place here statuses that do not dispel on death. * 1 - If for some reason status_change_end decides to still keep the status when quitting. * 2 - Do clif + * 3 - Do not remove some permanent/time-independent effects *------------------------------------------*/ int status_change_clear(struct block_list* bl, int type) { @@ -8910,6 +8911,18 @@ int status_change_clear(struct block_list* bl, int type) continue; } + + if( type == 3 ) + { + switch (i) + {// TODO: This list may be incomplete + case SC_WEIGHT50: + case SC_WEIGHT90: + case SC_NOCHAT: + case SC_PUSH_CART: + continue; + } + } status_change_end(bl, (sc_type)i, INVALID_TIMER); |