Код
case SA_DISPELL:
if (flag&1 || (i = skill_get_splash(skillid, skilllv)) < 1)
{
clif_skill_nodamage(src,bl,skillid,skilllv,1);
i = tstatus->mdef;
if (i >= 100 ||
(dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER) ||
tsc == NULL || (tsc->data[SC_SPIRIT].timer != -1 && tsc->data[SC_SPIRIT].val2 == SL_ROGUE) || //Rogue's spirit defends againt dispel.
//Fixed & changed to use a proportionnal reduction (no info, but seems far more logical) [DracoRPG]
rand()%100 >= (100-i)*(50+10*skilllv)/100)
{
if (sd)
clif_skill_fail(sd,skillid,0,0);
break;
}
if(status_isimmune(bl) || !tsc->count)
break;
for(i=0;i<SC_MAX;i++){
if (tsc->data[i].timer == -1)
continue;
switch (i) {
case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION:
case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR:
case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD:
case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO:
case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
case SC_GUILDAURA: case SC_EDP: case SC_AUTOBERSERK:
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
continue;
}
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);
}
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;
Тем самым шанс диспелла равен (100-mdef)*(50+10*skilllvl)/100.
Ни шанс (любого лвл сифона), ни дамаг 5-го Soul Siphon не зависит от mdef.