diff --git a/app/src/main/java/cc/ioctl/hook/chat/DisableEnterEffect.java b/app/src/main/java/cc/ioctl/hook/chat/DisableEnterEffect.java index 5ef40cd495..832c6bf751 100644 --- a/app/src/main/java/cc/ioctl/hook/chat/DisableEnterEffect.java +++ b/app/src/main/java/cc/ioctl/hook/chat/DisableEnterEffect.java @@ -29,6 +29,10 @@ import io.github.qauxv.dsl.FunctionEntryRouter.Locations.Simplify; import io.github.qauxv.hook.CommonSwitchFunctionHook; import io.github.qauxv.util.Initiator; +import io.github.qauxv.util.QQVersion; +import io.github.qauxv.util.dexkit.DexKit; +import io.github.qauxv.util.dexkit.DexKitTarget; +import io.github.qauxv.util.dexkit.TroopEnterEffect_QQNT; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -40,7 +44,7 @@ public class DisableEnterEffect extends CommonSwitchFunctionHook { public static final DisableEnterEffect INSTANCE = new DisableEnterEffect(); protected DisableEnterEffect() { - super("rq_disable_enter_effect"); + super("rq_disable_enter_effect", new DexKitTarget[]{TroopEnterEffect_QQNT.INSTANCE}); } @NonNull @@ -62,6 +66,11 @@ public boolean isAvailable() { @Override public boolean initOnce() { + if (HostInfo.requireMinQQVersion(QQVersion.QQ_8_9_63)) { + Method m = DexKit.requireMethodFromCache(TroopEnterEffect_QQNT.INSTANCE); + HookUtils.hookBeforeIfEnabled(this, m, param -> param.setResult(null)); + return true; + } for (Method m : Initiator._TroopEnterEffectController().getDeclaredMethods()) { if ((m.getName().equals("a") || m.getName().equals("l")) && !Modifier.isStatic(m.getModifiers()) && m.getParameterTypes().length == 0 && m.getReturnType() == void.class) { diff --git a/app/src/main/java/io/github/qauxv/util/dexkit/DexKitTarget.kt b/app/src/main/java/io/github/qauxv/util/dexkit/DexKitTarget.kt index ed53f49871..c212ff6242 100644 --- a/app/src/main/java/io/github/qauxv/util/dexkit/DexKitTarget.kt +++ b/app/src/main/java/io/github/qauxv/util/dexkit/DexKitTarget.kt @@ -712,3 +712,11 @@ object TroopSendFile_QQNT : DexKitTarget.UsingStr() { override val declaringClass = "" override val filter = DexKitFilter.allowAll } + +object TroopEnterEffect_QQNT : DexKitTarget.UsingStr() { + override val findMethod: Boolean = true + override val traitString = arrayOf("playAnimaions: isSimpleUISwitch = true") + override val declaringClass = "" + override val filter = DexKitFilter.allowAll + // 理论上非NT也能用,但祖法不可变 +}