Ver código fonte

- Re-committed r16969/trunk/src/ (tid:74924).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16993 54d463be-8e91-2dee-dedb-b68131a5f0ec
glighta 12 anos atrás
pai
commit
8486d7a5cd
3 arquivos alterados com 12 adições e 25 exclusões
  1. 1 1
      src/map/clif.c
  2. 9 22
      src/map/pc.c
  3. 2 2
      src/map/status.c

+ 1 - 1
src/map/clif.c

@@ -10791,7 +10791,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;

+ 9 - 22
src/map/pc.c

@@ -4187,23 +4187,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] ||
@@ -4212,9 +4196,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 ||
@@ -6517,14 +6500,18 @@ 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);

+ 2 - 2
src/map/status.c

@@ -1584,7 +1584,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))
@@ -8552,7 +8552,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 		case SC_FREEZE: sc->opt1 = OPT1_FREEZE;    break;
 		case SC_STUN:   sc->opt1 = OPT1_STUN;      break;
 		case SC_SLEEP:
-		case SC_DEEPSLEEP:		sc->opt1 = OPT1_SLEEP;		break;
+		case SC_DEEPSLEEP:    opt_flag = 0;   sc->opt1 = OPT1_SLEEP;		break;
 		case SC_BURNING:		sc->opt1 = OPT1_BURNING;	break; // Burning need this to be showed correctly. [pakpil]
 		case SC_WHITEIMPRISON:  sc->opt1 = OPT1_IMPRISON;	break;
 		case SC_CRYSTALIZE:		sc->opt1 = OPT1_CRYSTALIZE;	break;