Issue Information
-
#006523
-
4 - High
-
Fixed
Issue Confirmations
-
Yes (5)No (0)
Originally posted by Lunar
How to reproduce:
Using the @duel, will ignore the other character in the area of effect when you will break the song. (battle_check_target function return false)
Af if the other character don't left the area (the server doesn't use skill_unit_onleft function)
It causes the song will stay 3 minutes instead of 20 seconds.
Here is my (very bad) way to fix it, I think there is a better way:
How to reproduce:
- Take a Bard/Danser/Gypsy/Clown/whatever
- Use a Song Bragi/Service/whatever
- Take the buff effect with another character like Sniper
- Use the command @duel with no target player name, juste type @duel nothing else with the singer. The other character must be in the area of effect of the song before you do that.
- Stop the song, with weapon switch or adaptation
Using the @duel, will ignore the other character in the area of effect when you will break the song. (battle_check_target function return false)
Af if the other character don't left the area (the server doesn't use skill_unit_onleft function)
It causes the song will stay 3 minutes instead of 20 seconds.
Here is my (very bad) way to fix it, I think there is a better way:
static int skill_unit_effect (struct block_list* bl, va_list ap) { struct skill_unit* unit = va_arg(ap,struct skill_unit*); struct skill_unit_group* group = unit->group; unsigned int tick = va_arg(ap,unsigned int); unsigned int flag = va_arg(ap,unsigned int); int skill_id; bool dissonance; if( (!unit->alive && !(flag&4)) || bl->prev == NULL ) return 0; nullpo_ret(group); dissonance = skill_dance_switch(unit, 0); //Necessary in case the group is deleted after calling on_place/on_out [Skotlex] skill_id = group->skill_id; //Target-type check. if( !(group->bl_flag&bl->type && battle_check_target(&unit->bl,bl,group->target_flag)>0) ) { if( flag&4 && group->src_id == bl->id && group->state.song_dance&0x2 ) skill_unit_onleft(skill_id, bl, tick);//Ensemble check to terminate it. else if ( flag&4 && skill_get_inf2(skillid)&INF2_SONG_DANCE) // Make a exception for song/dance skill skill_unit_onleft(skill_id, bl, tick); //Bye bye glitch duel <img src='http://rathena.org/board/public/style_emoticons/default/smile.png' class='bbc_emoticon' alt=':)' /> } else { if( flag&1 ) skill_unit_onplace(unit,bl,tick); else skill_unit_onout(unit,bl,tick); if( flag&4 ) skill_unit_onleft(skill_id, bl, tick); } if( dissonance ) skill_dance_switch(unit, 1); return 0; }
Originally posted by mkbu95
I'd rather do this (tested and works ):
Anyway, both fix this bug, I never noticed it, nice eye xP
I'd rather do this (tested and works ):
if( !(group->bl_flag&bl->type && battle_check_target(&unit->bl,bl,group->target_flag)>0) && (flag&4) ) { if( group->state.song_dance&0x1 || (group->src_id == bl->id && group->state.song_dance&0x2) ) skill_unit_onleft(skill_id, bl, tick);//Ensemble check to terminate it. }since:
unsigned song_dance : 2; //0x1 Song/Dance, 0x2 Ensemble
Anyway, both fix this bug, I never noticed it, nice eye xP
Originally posted by Lunar
Need more info ?
Need more info ?
Originally posted by Ind
Fixed in [rev=16753]. Thanks to you and mkbu95!
Fixed in [rev=16753]. Thanks to you and mkbu95!
Originally posted by malufett
sir Ind how did you reproduce this..I reverted back the fixed for this but I can't reproduce..anyway the fixed created another bug..
http://rathena.org/b...4348#entry14348
sir Ind how did you reproduce this..I reverted back the fixed for this but I can't reproduce..anyway the fixed created another bug..
http://rathena.org/b...4348#entry14348
Originally posted by mkbu95
Blame me =/
Can you try with Lunar fix?
Blame me =/
Can you try with Lunar fix?
Originally posted by malufett
@mkbu
not yet since I can't reproduce it..anyway if you can tell me how to produce it properly..hmm..I follow the procedure but I can't duplicate..
@mkbu
not yet since I can't reproduce it..anyway if you can tell me how to produce it properly..hmm..I follow the procedure but I can't duplicate..
Originally posted by mkbu95
To reproduce this bug or from issue:6673 ?
Lunar explains how to reproduce this bug
tl;dr: take a bard, use apple of idun, take another char, go into the effect area, type @duel with the bard, stop the song, and wait 'til the hp goes back to normal on the other char. You'll notice that the duration is wrong.
To reproduce this bug or from issue:6673 ?
Lunar explains how to reproduce this bug
tl;dr: take a bard, use apple of idun, take another char, go into the effect area, type @duel with the bard, stop the song, and wait 'til the hp goes back to normal on the other char. You'll notice that the duration is wrong.
Originally posted by Lunar
Don't have the gravitation field bug with my fix,
but also there is a link with this issue.
Don't have the gravitation field bug with my fix,
but also there is a link with this issue.
Originally posted by Jelly
Bump.
Any link to stable fix this?
Bump.
Any link to stable fix this?
Originally posted by mkbu95
I think my poor fix should be reverted and Lunar's implemented. It broke Gravitational Field.
I think my poor fix should be reverted and Lunar's implemented. It broke Gravitational Field.
Originally posted by mkbu95
Fixed in [rev=16881].
Fixed in [rev=16881].