diff options
author | glighta <glighta@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-11-26 00:52:01 +0000 |
---|---|---|
committer | glighta <glighta@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-11-26 00:52:01 +0000 |
commit | a337cab31a823d52f405462beb54e0135260b9ba (patch) | |
tree | c14b455011c820a5eaa8ae68a8f113227e731c91 | |
parent | b11bf6e1604097711291265f927e79e8f2af5c54 (diff) | |
download | hercules-a337cab31a823d52f405462beb54e0135260b9ba.tar.gz hercules-a337cab31a823d52f405462beb54e0135260b9ba.tar.bz2 hercules-a337cab31a823d52f405462beb54e0135260b9ba.tar.xz hercules-a337cab31a823d52f405462beb54e0135260b9ba.zip |
-Fix bugreport:6930 heal -Hp,0; percentheal -100,0; causing crashmap
-Upd bugreport:6751 with MarkZD followup patch
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16969 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | src/map/clif.c | 2 | ||||
-rw-r--r-- | src/map/pc.c | 30 | ||||
-rw-r--r-- | src/map/status.c | 3 |
3 files changed, 11 insertions, 24 deletions
diff --git a/src/map/clif.c b/src/map/clif.c index cf5df7f58..a51163827 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -10671,7 +10671,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd) // Whether skill fails or not is irrelevant, the char ain't idle. [Skotlex] sd->idletime = last_tick; - if (pc_cant_act(sd) && !(skillnum == SR_GENTLETOUCH_CURE && (sd->sc.opt1 == OPT1_STONE || sd->sc.opt1 == OPT1_FREEZE || sd->sc.opt1 == OPT1_STUN))) + if( pc_cant_act(sd) && skillnum != RK_REFRESH && !(skillnum == SR_GENTLETOUCH_CURE && (sd->sc.opt1 == OPT1_STONE || sd->sc.opt1 == OPT1_FREEZE || sd->sc.opt1 == OPT1_STUN)) ) return; if (pc_issit(sd)) return; diff --git a/src/map/pc.c b/src/map/pc.c index 0e0a4a1b2..9f39b2747 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4076,23 +4076,7 @@ int pc_useitem(struct map_session_data *sd,int n) if (nameid != ITEMID_NAUTHIZ && sd->sc.opt1 > 0 && sd->sc.opt1 != OPT1_STONEWAIT && sd->sc.opt1 != OPT1_BURNING) return 0; - if (sd->sc.count) { - if ((nameid == ITEMID_NAUTHIZ) && (//bugreport 6751 - sd->sc.data[SC_FREEZE] || - sd->sc.data[SC_STUN] || - sd->sc.data[SC_DEEPSLEEP] || - sd->sc.data[SC_STONE] || - sd->sc.data[SC_CRYSTALIZE] - ) - ) { - sd->sc.opt1 = 0; //remove option and status to allow skill - status_change_end(&sd->bl,SC_FREEZE,INVALID_TIMER); - status_change_end(&sd->bl,SC_STUN,INVALID_TIMER); - status_change_end(&sd->bl,SC_DEEPSLEEP,INVALID_TIMER); - status_change_end(&sd->bl,SC_STONE,INVALID_TIMER); - status_change_end(&sd->bl,SC_CRYSTALIZE,INVALID_TIMER); - } //let us continue - else if ( + if (sd->sc.count && ( sd->sc.data[SC_BERSERK] || sd->sc.data[SC__BLOODYLUST] || (sd->sc.data[SC_GRAVITATION] && sd->sc.data[SC_GRAVITATION]->val3 == BCT_SELF) || sd->sc.data[SC_TRICKDEAD] || @@ -4101,9 +4085,8 @@ int pc_useitem(struct map_session_data *sd,int n) sd->sc.data[SC__MANHOLE] || sd->sc.data[SC_KAGEHUMI] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOITEM) - ) + )) return 0; - } //Prevent mass item usage. [Skotlex] if (DIFF_TICK(sd->canuseitem_tick, tick) > 0 || @@ -6620,14 +6603,17 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) // Clear anything NPC-related when you die and was interacting with one. if (sd->npc_id) { - if (sd->state.using_fake_npc) + if (sd->state.using_fake_npc){ + clif_clearunit_single(sd->npc_id, CLR_OUTSIGHT, sd->fd); sd->state.using_fake_npc = 0; + } if (sd->state.menu_or_input) sd->state.menu_or_input = 0; if (sd->npc_menu) sd->npc_menu = 0; - - npc_event_dequeue(sd); + sd->npc_id = 0; + if(sd->st && sd->st->state != END) + sd->st->state = END; } npc_script_event(sd,NPCE_DIE); diff --git a/src/map/status.c b/src/map/status.c index af0b7e148..a239be0a1 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1619,7 +1619,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int if (sc && sc->count) { - if (sc->opt1 >0 && (sc->opt1 != OPT1_CRYSTALIZE && src->type != BL_MOB) && sc->opt1 != OPT1_BURNING && skill_num != SR_GENTLETOUCH_CURE) { //Stuned/Frozen/etc + if (skill_num != RK_REFRESH && sc->opt1 >0 && (sc->opt1 != OPT1_CRYSTALIZE && src->type != BL_MOB) && sc->opt1 != OPT1_BURNING && skill_num != SR_GENTLETOUCH_CURE) { //Stuned/Frozen/etc if (flag != 1) //Can't cast, casted stuff can't damage. return 0; if (!(skill_get_inf(skill_num)&INF_GROUND_SKILL)) @@ -8599,6 +8599,7 @@ int status_change_start(struct block_list *bl,enum sc_type type,int rate,int val break; case SC_SLEEP: case SC_DEEPSLEEP: + opt_flag = 0; sc->opt1 = OPT1_SLEEP; break; case SC_BURNING: |