I managed to fix most of it.
To block all skills other than Shadow Form, in status.c find[code=auto:0] //Skill blocking.
if (
(sc->data[SC_VOLCANO] && skill_id == WZ_ICEWALL) ||
(sc->data[SC_ROKISWEIL] && skill_id != BD_ADAPTATION) ||
(sc->data[SC_HERMODE] && skill->get_inf(skill_id) & INF_SUPPORT_SKILL) ||
(sc->data[SC_NOCHAT] && sc->data[SC_NOCHAT]->val1&MANNER_NOSKILL)
)
return 0;
if( sc->data[SC__MANHOLE] || ((tsc = status->get_sc(target)) && tsc->data[SC__MANHOLE]) ) {
switch(skill_id) {//##TODO## make this a flag in skill_db?
// Skills that can be used even under Man Hole effects.
case SC_SHADOWFORM:
break;
default:
return 0;
}
}
}
}
[/code]replace with:[code=auto:0] //Skill blocking.
if (
(sc->data[SC_VOLCANO] && skill_id == WZ_ICEWALL) ||
(sc->data[SC_ROKISWEIL] && skill_id != BD_ADAPTATION) ||
(sc->data[SC_HERMODE] && skill->get_inf(skill_id) & INF_SUPPORT_SKILL) ||
(sc->data[SC_NOCHAT] && sc->data[SC_NOCHAT]->val1&MANNER_NOSKILL) ||
(sc->data[SC__MANHOLE] || ((tsc = status->get_sc(target)) && tsc->data[SC__MANHOLE]) && skill_id != SC_SHADOWFORM)
)
return 0;
}
}
[/code]To imitate the "miss" attacks, find:[code=auto:0] if(tsc && tsc->count) {
/* attacks in invincible are capped to 1 damage and handled in batte.c; allow spell break and eske for sealed shrine GDB when in INVINCIBLE state. */
if( tsc->data[SC_INVINCIBLE] && !tsc->data[SC_INVINCIBLEOFF] && skill_id && !(skill_id&(SA_SPELLBREAKER|SL_SKE)) )
return 0;
if(!skill_id && tsc->data[SC_TRICKDEAD])
return 0;
if((skill_id == WZ_STORMGUST || skill_id == WZ_FROSTNOVA || skill_id == NJ_HYOUSYOURAKU)
&& tsc->data[SC_FREEZE])
return 0;
if(skill_id == PR_LEXAETERNA && (tsc->data[SC_FREEZE] || (tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE)))
return 0;
if( ( tsc->data[SC_STEALTHFIELD] || tsc->data[SC_CAMOUFLAGE] ) && !(st->mode&(MD_BOSS|MD_DETECTOR)) && flag == 4 )
return 0;
}
[/code]replace with[code=auto:0] if(tsc && tsc->count) {
/* attacks in invincible are capped to 1 damage and handled in batte.c; allow spell break and eske for sealed shrine GDB when in INVINCIBLE state. */
if( tsc->data[SC_INVINCIBLE] && !tsc->data[SC_INVINCIBLEOFF] && skill_id && !(skill_id&(SA_SPELLBREAKER|SL_SKE)) )
return 0;
if(!skill_id && tsc->data[SC_TRICKDEAD])
return 0;
if((skill_id == WZ_STORMGUST || skill_id == WZ_FROSTNOVA || skill_id == NJ_HYOUSYOURAKU)
&& tsc->data[SC_FREEZE])
return 0;
if(skill_id == PR_LEXAETERNA && (tsc->data[SC_FREEZE] || (tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE)))
return 0;
if( ( tsc->data[SC_STEALTHFIELD] || tsc->data[SC_CAMOUFLAGE] ) && !(st->mode&(MD_BOSS|MD_DETECTOR)) && flag == 4 )
return 0;
if (skill_id == SC__MANHOLE && tsc->data[SC_MANHOLE])
return 0;
}
[/code]To stop it from affecting barricades, guardian stones and guardians, find:[code=auto:0] // Other Effects
case SC_VACUUM_EXTREME:
case SC_NETHERWORLD:
return 0;
}
}
[/code]replace with:[code=auto:0] // Other Effects
case SC_VACUUM_EXTREME:
case SC_NETHERWORLD:
case SC__MANHOLE:
case SC__BLOODYLUST:
case SC__CHAOS:
return 0;
}
}
[/code]This includes some other statuses bosses are supposed to be immune to, this is a general clause but Manhole is disabled outside of PvP maps anyway.
I have no idea about making it not chainable though, can anyone help?
This post has been edited by
Anisotropic Defixation
on May 7, 2015 12:10