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;
Это по поводу диспела, надеюсь Fat ты хоть в школе учился, а то вдруг даже так не разберешься.
|