|
@@ -2761,12 +2761,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
|
|
case NPC_COMBOATTACK:
|
|
case NPC_COMBOATTACK:
|
|
case NPC_GUIDEDATTACK:
|
|
case NPC_GUIDEDATTACK:
|
|
case NPC_POISON:
|
|
case NPC_POISON:
|
|
- case NPC_BLINDATTACK:
|
|
|
|
- case NPC_SILENCEATTACK:
|
|
|
|
- case NPC_STUNATTACK:
|
|
|
|
- case NPC_PETRIFYATTACK:
|
|
|
|
- case NPC_CURSEATTACK:
|
|
|
|
- case NPC_SLEEPATTACK:
|
|
|
|
case NPC_RANDOMATTACK:
|
|
case NPC_RANDOMATTACK:
|
|
case NPC_WATERATTACK:
|
|
case NPC_WATERATTACK:
|
|
case NPC_GROUNDATTACK:
|
|
case NPC_GROUNDATTACK:
|
|
@@ -2814,6 +2808,20 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
|
|
case HFLI_SBR44: //[orn]
|
|
case HFLI_SBR44: //[orn]
|
|
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
|
|
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
|
|
break;
|
|
break;
|
|
|
|
+ case NPC_BLINDATTACK:
|
|
|
|
+ case NPC_SILENCEATTACK:
|
|
|
|
+ case NPC_STUNATTACK:
|
|
|
|
+ case NPC_PETRIFYATTACK:
|
|
|
|
+ case NPC_CURSEATTACK:
|
|
|
|
+ case NPC_SLEEPATTACK:
|
|
|
|
+ if (flag&1 || skill_get_splash(skillid, skilllv) < 1)
|
|
|
|
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
|
|
|
|
+ else
|
|
|
|
+ map_foreachinrange(skill_area_sub, bl,
|
|
|
|
+ skill_get_splash(skillid, skilllv),BL_CHAR,
|
|
|
|
+ src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
|
|
|
|
+ skill_castend_damage_id);
|
|
|
|
+ break;
|
|
|
|
|
|
case LK_JOINTBEAT: // decide the ailment first (affects attack damage and effect)
|
|
case LK_JOINTBEAT: // decide the ailment first (affects attack damage and effect)
|
|
switch( rand()%6 ){
|
|
switch( rand()%6 ){
|
|
@@ -3502,14 +3510,21 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|
break;
|
|
break;
|
|
|
|
|
|
case PR_LEXDIVINA:
|
|
case PR_LEXDIVINA:
|
|
- if (tsc && tsc->count && tsc->data[type].timer != -1) {
|
|
|
|
- status_change_end(bl,type, -1);
|
|
|
|
- clif_skill_nodamage (src, bl, skillid, skilllv, 1);
|
|
|
|
- } else
|
|
|
|
- clif_skill_nodamage (src, bl, skillid, skilllv,
|
|
|
|
- sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
|
|
|
|
|
|
+ if (flag&1 || (i = skill_get_splash(skillid, skilllv)) < 1)
|
|
|
|
+ {
|
|
|
|
+ if (tsc && tsc->count && tsc->data[type].timer != -1) {
|
|
|
|
+ status_change_end(bl,type, -1);
|
|
|
|
+ clif_skill_nodamage (src, bl, skillid, skilllv, 1);
|
|
|
|
+ } else
|
|
|
|
+ clif_skill_nodamage (src, bl, skillid, skilllv,
|
|
|
|
+ sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ //Affect all targets on splash area.
|
|
|
|
+ map_foreachinrange(skill_area_sub, bl, i, BL_CHAR,
|
|
|
|
+ src, skillid, skilllv, tick, flag|1,
|
|
|
|
+ skill_castend_damage_id);
|
|
break;
|
|
break;
|
|
-
|
|
|
|
case SA_ABRACADABRA:
|
|
case SA_ABRACADABRA:
|
|
{
|
|
{
|
|
int abra_skillid = 0, abra_skilllv;
|
|
int abra_skillid = 0, abra_skilllv;
|
|
@@ -4069,8 +4084,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|
case GS_SPREADATTACK:
|
|
case GS_SPREADATTACK:
|
|
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
|
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
|
skill_area_temp[1] = bl->id;
|
|
skill_area_temp[1] = bl->id;
|
|
|
|
+ //Mob casted skills should also hit skills.
|
|
map_foreachinrange(skill_area_sub, bl,
|
|
map_foreachinrange(skill_area_sub, bl,
|
|
- skill_get_splash(skillid, skilllv), BL_CHAR,
|
|
|
|
|
|
+ skill_get_splash(skillid, skilllv), md?BL_CHAR|BL_SKILL:BL_CHAR,
|
|
src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
|
|
src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
|
|
skill_castend_damage_id);
|
|
skill_castend_damage_id);
|
|
break;
|
|
break;
|
|
@@ -4661,8 +4677,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case SA_DISPELL:
|
|
case SA_DISPELL:
|
|
|
|
+ if (flag&1 || (i = skill_get_splash(skillid, skilllv)) < 1)
|
|
{
|
|
{
|
|
- int i;
|
|
|
|
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
|
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
|
i = tstatus->mdef;
|
|
i = tstatus->mdef;
|
|
if (i >= 100 ||
|
|
if (i >= 100 ||
|
|
@@ -4698,7 +4714,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|
if(i==SC_BERSERK) tsc->data[i].val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0.
|
|
if(i==SC_BERSERK) tsc->data[i].val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0.
|
|
status_change_end(bl,i,-1);
|
|
status_change_end(bl,i,-1);
|
|
}
|
|
}
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
+ //Affect all targets on splash area.
|
|
|
|
+ map_foreachinrange(skill_area_sub, bl, i, BL_CHAR,
|
|
|
|
+ src, skillid, skilllv, tick, flag|1,
|
|
|
|
+ skill_castend_damage_id);
|
|
break;
|
|
break;
|
|
|
|
|
|
case TF_BACKSLIDING: //This is the correct implementation as per packet logging information. [Skotlex]
|
|
case TF_BACKSLIDING: //This is the correct implementation as per packet logging information. [Skotlex]
|