Jump to content

  •  

Bug Tracker Migration

June 3rd
Good news everyone! The staff has decided that it is time to slowly kill off this Bug Tracker. We will begin the process of slowly migrating from this Bug Tracker over to our Github Issues which can be found here: https://github.com/HerculesWS/Hercules/issues

Over the next couple of days, I will be closing off any opportunity to create new reports. However, I still will keep the opportunity to reply to existing Bug Reports. Doing this will allow us to slowly fix any bug reports we have listed here so that we can easily migrate over to our Issue Tracker.

Update - June 7th 2015: Creating new bug posts has been disabled. Please use our https://github.com/HerculesWS/Hercules/issues tracker to post bugs. Users are still able to reply to existing bug posts.

- Administration

Issue Information

  • #008655

  • 0 - None Assigned

  • New

Issue Confirmations

  • Yes (0)No (0)
Photo

Manhole

Posted by xathenx on 27 April 2015 - 06:59 AM

Manhole is bug.
in iRO you can't use Fullstrip and any masquerade skill except shadow form when enemy is in manhole status.
but in Hercules you can use Ful strip and any skill when the enemy is in manhole status.

Last time I checked, you could also manhole barricades and guardian stones.

So another bug in manhole found.

Also, you still can chain manhole targets (spamming it on the cell near the trapped target). Is this also broken on rA? I compared code and there's nothing different.

You can use any debuff on the target even though the code is supposed to only allow Shadow Form.
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;

Edited by Anisotropic Defixation, 07 May 2015 - 08:22 AM.


I managed to fix most of it.

To block all skills other than Shadow Form, in status.c find
//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;
					}
				}

		}
	}

replace with:
//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;
					}
		}
To imitate the "miss" attacks, find:
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;
	}
replace with
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;
	}

To stop it from affecting barricades, guardian stones and guardians, find:
// Other Effects
			case SC_VACUUM_EXTREME:
			case SC_NETHERWORLD:

				return 0;
		}
	}
replace with:
// Other Effects
			case SC_VACUUM_EXTREME:
			case SC_NETHERWORLD:
			case SC__MANHOLE:
			case SC__BLOODYLUST:
			case SC__CHAOS:

				return 0;
		}
	}
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?

Edited by Anisotropic Defixation, 07 May 2015 - 12:10 PM.