Issue information

Issue ID
#6469
Status
Fixed
Severity
Low
Started
Hercules Elf Bot
Aug 13, 2012 21:25
Last Post
Hercules Elf Bot
Nov 11, 2012 5:29
Confirmation
Yes (1)
No (0)

Hercules Elf Bot - Aug 13, 2012 21:25

Originally posted by [b]Yuasa[/b]
Note that you have dispell outdated. Here I bring to dispell the updated

rAthena rev 16631


src/map/skill.c
[spoiler]
[code]

case SA_DISPELL:
if (flag&1 || (i = skill_get_splash(skillid, skilllv)) < 1)
{
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER)
|| (tsc && tsc->data[SC_SPIRIT] && tsc->data[SC_SPIRIT]->val2 == SL_ROGUE) //Rogue's spirit defends againt dispel.
|| rnd()%100 >= 50+10*skilllv
|| ( tsc && tsc->option&OPTION_MADOGEAR ) )//Mado Gear is immune to dispell according to bug report 49 [Ind]
{
if (sd)
clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
break;
}
if(status_isimmune(bl) || !tsc || !tsc->count)
break;
for(i=0;i<SC_MAX;i++)
{
if (!tsc->data[i])
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_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:
case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE:
case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL:
case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN:
case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
case SC_READYCOUNTER: case SC_DODGE: case SC_WARM:
case SC_SPEEDUP1: case SC_AUTOTRADE: case SC_CRITICALWOUND:
case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF:
case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF:
case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS:
case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
case SC_INTOABYSS: case SC_SIEGFRIED: case SC_FOOD_STR_CASH:
case SC_FOOD_AGI_CASH: case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH:
case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_SEVENWIND:
case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION:
case SC_INCHEALRATE: case SC_ELECTRICSHOCKER: case SC__STRIPACCESSORY:
//case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ:
//case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER:
case SC_STEALTHFIELD: case SC_GIANTGROWTH: case SC_MILLENNIUMSHIELD:
case SC_REFRESH: case SC_STONEHARDSKIN: case SC_VITALITYACTIVATION:
case SC_FIGHTINGSPIRIT: case SC_ABUNDANCE: case SC__SHADOWFORM:
case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD:
case SC_HAWKEYES: case SC_GUILDAURA: case SC_PUSH_CART:
continue;
/**
* bugreport:4888 these songs may only be dispelled if you're not in their song area anymore
**/
case SC_WHISTLE:
case SC_ASSNCROS:
case SC_POEMBRAGI:
case SC_APPLEIDUN:
case SC_HUMMING:
case SC_DONTFORGETME:
case SC_FORTUNE:
case SC_SERVICE4U:
if( tsc->data[i]->val4 ) //val4 = out-of-song-area
continue;
break;
case SC_ASSUMPTIO:
if( bl->type == BL_MOB )
continue;
break;
}
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, (sc_type)i, INVALID_TIMER);
}
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;

[/code]
[/spoiler]


Updated Version. By: Yuasa

[spoiler]
[code]

case SA_DISPELL:
if (flag&1 || (i = skill_get_splash(skillid, skilllv)) < 1)
{
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER)
|| (tsc && tsc->data[SC_SPIRIT] && tsc->data[SC_SPIRIT]->val2 == SL_ROGUE) //Rogue's spirit defends againt dispel.
|| rnd()%100 >= 50+10*skilllv
|| ( tsc && tsc->option&OPTION_MADOGEAR ) )//Mado Gear is immune to dispell according to bug report 49 [Ind]
{
if (sd)
clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
break;
}
if(status_isimmune(bl) || !tsc || !tsc->count)
break;
for(i=0;i<SC_MAX;i++)
{
if (!tsc->data[i])
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_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:
case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE:
case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL:
case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN:
case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
case SC_READYCOUNTER: case SC_DODGE: case SC_WARM:
case SC_SPEEDUP1: case SC_AUTOTRADE: case SC_CRITICALWOUND:
case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF:
case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF:
case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS:
case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
case SC_INTOABYSS: case SC_SIEGFRIED: case SC_FOOD_STR_CASH:
case SC_FOOD_AGI_CASH: case SC_GT_REVITALIZE: case SC__SHADOWFORM:
case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH:
case SC_FOOD_LUK_CASH: case SC_ELECTRICSHOCKER: case SC__STRIPACCESSORY:
case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ:
case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER:
case SC_STEALTHFIELD: case SC_GIANTGROWTH: case SC_MILLENNIUMSHIELD:
case SC_REFRESH: case SC_STONEHARDSKIN: case SC_VITALITYACTIVATION:
case SC_FIGHTINGSPIRIT: case SC_ABUNDANCE: case SC_READING_SB:
case SC_EDP: case SC_SEVENWIND: case SC_MADNESSCANCEL:
case SC_ADJUSTMENT: case SC_GATLINGFEVER: case SC_INCREASING:
case SC_DUPLELIGHT: case SC_EXPIATIO: case SC_LAUDAAGNUS:
case SC_LAUDARAMUS: case SC_REFLECTDAMAGE: case SC_INSPIRATION:
case SC_EXEEDBREAK: case SC_FORCEOFVANGUARD: case SC_BANDING:
case SC_RAISINGDRAGON: case SC_GT_ENERGYGAIN: case SC_GT_CHANGE:
case SC_PUSH_CART:
continue;
/**
* bugreport:4888 these songs may only be dispelled if you're not in their song area anymore
**/
case SC_WHISTLE:
case SC_ASSNCROS:
case SC_POEMBRAGI:
case SC_APPLEIDUN:
case SC_HUMMING:
case SC_DONTFORGETME:
case SC_FORTUNE:
case SC_SERVICE4U:
if( tsc->data[i]->val4 ) //val4 = out-of-song-area
continue;
break;
case SC_ASSUMPTIO:
if( bl->type == BL_MOB )
continue;
break;
}
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, (sc_type)i, INVALID_TIMER);
}
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;
[/code]
[/spoiler]

I emphasis that only edit the skills that can not be dispell.

Regards.

This post has been edited by Yuasa on Aug 14, 2012 0:15

Hercules Elf Bot - Aug 13, 2012 21:32

Originally posted by [b]EvilPuncker[/b]
any special reason for taking out SC_PUSH_CART?

Hercules Elf Bot - Aug 14, 2012 0:14

Originally posted by [b]Yuasa[/b]
You can add SC_PUSH_CART. xD

Hercules Elf Bot - Nov 11, 2012 5:27

Originally posted by [b]mkbu95[/b]
I guess I've updated everything on [rev=16910]. If I missed any skill, let me know.