|
@@ -11638,7 +11638,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
|
clif_skill_poseffect(src,skill_id,skill_lv,x,y,tick);
|
|
|
break;
|
|
|
case RG_GRAFFITI: /* Graffiti [Valaris] */
|
|
|
- skill_clear_unitgroup(src);
|
|
|
skill_unitsetting(src,skill_id,skill_lv,x,y,0);
|
|
|
flag|=1;
|
|
|
break;
|
|
@@ -11665,7 +11664,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|
|
break;
|
|
|
case RG_CLEANER: // [Valaris]
|
|
|
i = skill_get_splash(skill_id, skill_lv);
|
|
|
- map_foreachinarea(skill_graffitiremover,src->m,x-i,y-i,x+i,y+i,BL_SKILL);
|
|
|
+ map_foreachinarea(skill_graffitiremover,src->m,x-i,y-i,x+i,y+i,BL_SKILL,1);
|
|
|
break;
|
|
|
|
|
|
case SO_WARMER:
|
|
@@ -14785,6 +14784,12 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
|
|
|
}
|
|
|
// perform skill-specific checks (and actions)
|
|
|
switch( skill_id ) {
|
|
|
+ case RG_GRAFFITI:
|
|
|
+ if (map_foreachinmap(skill_graffitiremover,sd->bl.m,BL_SKILL,0)) { // If a previous Graffiti exists skill fails to cast.
|
|
|
+ clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ break;
|
|
|
case SO_SPELLFIST:
|
|
|
if(sd->skill_id_old != MG_FIREBOLT && sd->skill_id_old != MG_COLDBOLT && sd->skill_id_old != MG_LIGHTNINGBOLT) {
|
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
@@ -16931,15 +16936,19 @@ struct skill_unit_group *skill_locate_element_field(struct block_list *bl)
|
|
|
int skill_graffitiremover(struct block_list *bl, va_list ap)
|
|
|
{
|
|
|
struct skill_unit *unit = NULL;
|
|
|
+ int remove = va_arg(ap, int);
|
|
|
|
|
|
- nullpo_ret(bl);
|
|
|
- nullpo_ret(ap);
|
|
|
+ nullpo_retr(0, bl);
|
|
|
+ nullpo_retr(0, ap);
|
|
|
|
|
|
if (bl->type != BL_SKILL || (unit = (struct skill_unit *)bl) == NULL)
|
|
|
return 0;
|
|
|
|
|
|
- if ((unit->group) && (unit->group->unit_id == UNT_GRAFFITI))
|
|
|
- skill_delunit(unit);
|
|
|
+ if ((unit->group) && (unit->group->unit_id == UNT_GRAFFITI)) {
|
|
|
+ if (remove == 1)
|
|
|
+ skill_delunit(unit);
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|