Fixed SC_BURNING icon not going off after it was over;

Fixed SC_BURNING from making character unable to move/cast skills/use items/etc, bugreport:5174

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15328 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
shennetsind 2011-12-29 22:51:31 +00:00
parent a2705ca177
commit bccb331fb5
8 changed files with 15 additions and 13 deletions

View File

@ -428,7 +428,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
return 0;
}
if(sc->data[SC_DODGE] && !sc->opt1 &&
if(sc->data[SC_DODGE] && ( !sc->opt1 || sc->opt1 == OPT1_BURNING ) &&
(flag&BF_LONG || sc->data[SC_SPURT])
&& rand()%100 < 20) {
if (sd && pc_issit(sd)) pc_setstand(sd); //Stand it to dodge.
@ -1302,7 +1302,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
flag.hit = 1;
break;
}
if (tsc && !flag.hit && tsc->opt1 && tsc->opt1 != OPT1_STONEWAIT)
if (tsc && !flag.hit && tsc->opt1 && tsc->opt1 != OPT1_STONEWAIT && tsc->opt1 != OPT1_BURNING)
flag.hit = 1;
}
@ -3366,7 +3366,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
{
struct status_change *sc = status_get_sc(target);
i = 0; //Temp for "hit or no hit"
if(sc && sc->opt1 && sc->opt1 != OPT1_STONEWAIT)
if(sc && sc->opt1 && sc->opt1 != OPT1_STONEWAIT && sc->opt1 != OPT1_BURNING)
i = 1;
else {
short

View File

@ -9013,7 +9013,7 @@ void clif_parse_WalkToXY(int fd, struct map_session_data *sd)
return;
}
if (sd->sc.opt1 && sd->sc.opt1 == OPT1_STONEWAIT)
if (sd->sc.opt1 && ( sd->sc.opt1 == OPT1_STONEWAIT || sd->sc.opt1 == OPT1_BURNING ))
; //You CAN walk on this OPT1 value.
else if( sd->progressbar.npc_id )
clif_progressbar_abort(sd);
@ -9320,7 +9320,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type,
return;
}
if (sd->ud.skilltimer != INVALID_TIMER || sd->sc.opt1)
if (sd->ud.skilltimer != INVALID_TIMER || (sd->sc.opt1 && sd->sc.opt1 != OPT1_BURNING ))
break;
if (sd->sc.count && (
@ -9640,7 +9640,7 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd)
return;
}
if (sd->sc.opt1 > 0 && sd->sc.opt1 != OPT1_STONEWAIT)
if (sd->sc.opt1 > 0 && sd->sc.opt1 != OPT1_STONEWAIT && sd->sc.opt1 != OPT1_BURNING)
return;
//This flag enables you to use items while in an NPC. [Skotlex]

View File

@ -1311,7 +1311,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, unsigned int tick)
return false;
// Abnormalities
if((md->sc.opt1 > 0 && md->sc.opt1 != OPT1_STONEWAIT) || md->sc.data[SC_BLADESTOP])
if(( md->sc.opt1 > 0 && md->sc.opt1 != OPT1_STONEWAIT && md->sc.opt1 != OPT1_BURNING ) || md->sc.data[SC_BLADESTOP])
{ //Should reset targets.
md->target_id = md->attacked_id = 0;
return false;

View File

@ -4042,7 +4042,7 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
md = (TBL_MOB *)bl;
if(md->state.steal_flag == UCHAR_MAX || md->sc.opt1) //already stolen from / status change check
if(md->state.steal_flag == UCHAR_MAX || ( md->sc.opt1 && md->sc.opt1 != OPT1_BURNING ) ) //already stolen from / status change check
return 0;
sd_status= status_get_status_data(&sd->bl);

View File

@ -571,7 +571,7 @@ enum equip_index {
#define pc_issit(sd) ( (sd)->vd.dead_sit == 2 )
#define pc_isidle(sd) ( (sd)->chatID || (sd)->state.vending || (sd)->state.buyingstore || DIFF_TICK(last_tick, (sd)->idletime) >= battle_config.idle_no_share )
#define pc_istrading(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->state.trading )
#define pc_cant_act(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->chatID || (sd)->sc.opt1 || (sd)->state.trading || (sd)->state.storage_flag )
#define pc_cant_act(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->chatID || ((sd)->sc.opt1 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading || (sd)->state.storage_flag )
#define pc_setdir(sd,b,h) ( (sd)->ud.dir = (b) ,(sd)->head_dir = (h) )
#define pc_setchatid(sd,n) ( (sd)->chatID = n )
#define pc_ishiding(sd) ( (sd)->sc.option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) )

View File

@ -8249,7 +8249,7 @@ int skill_castend_map (struct map_session_data *sd, short skill_num, const char
return 0;
}
if(sd->sc.opt1 || sd->sc.option&OPTION_HIDE ) {
if( ( sd->sc.opt1 && sd->sc.opt1 != OPT1_BURNING ) || sd->sc.option&OPTION_HIDE ) {
skill_failed(sd);
return 0;
}
@ -9809,7 +9809,7 @@ static int skill_check_condition_char_sub (struct block_list *bl, va_list ap)
if(pc_isdead(tsd))
return 0;
if (tsd->sc.data[SC_SILENCE] || tsd->sc.opt1)
if (tsd->sc.data[SC_SILENCE] || ( tsd->sc.opt1 && tsd->sc.opt1 != OPT1_BURNING ))
return 0;
switch(skillid)

View File

@ -1328,7 +1328,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int
if(sc && sc->count)
{
if(sc->opt1 >0)
if(sc->opt1 >0 && sc->opt1 != OPT1_BURNING)
{ //Stuned/Frozen/etc
if (flag != 1) //Can't cast, casted stuff can't damage.
return 0;
@ -7645,6 +7645,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_FREEZE:
case SC_STUN:
case SC_SLEEP:
case SC_BURNING:
if (sce->val1) {
//Removing the 'level' shouldn't affect anything in the code
//since these SC are not affected by it, and it lets us know
@ -8051,6 +8052,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_FREEZE:
case SC_STUN:
case SC_SLEEP:
case SC_BURNING:
sc->opt1 = 0;
break;

View File

@ -899,7 +899,7 @@ int unit_can_move(struct block_list *bl)
return 0; //Can't move
if (sc) {
if (sc->opt1 > 0 && sc->opt1 != OPT1_STONEWAIT)
if (sc->opt1 > 0 && sc->opt1 != OPT1_STONEWAIT && sc->opt1 != OPT1_BURNING)
return 0;
if ((sc->option & OPTION_HIDE) && (!sd || pc_checkskill(sd, RG_TUNNELDRIVE) <= 0))