diff --git a/cheat-library/src/appdata/il2cpp-functions.h b/cheat-library/src/appdata/il2cpp-functions.h index d45c91c..9b527ab 100644 --- a/cheat-library/src/appdata/il2cpp-functions.h +++ b/cheat-library/src/appdata/il2cpp-functions.h @@ -141,6 +141,7 @@ DO_APP_FUNC(0x01CA4DB0, void, MoleMole_FishingModule_onFishChosenNotify, (void* // Visuals DO_APP_FUNC(0x02F624E0, void, MoleMole_SCameraModuleInitialize_SetWarningLocateRatio, (SCameraModuleInitialize* __this, double deltaTime, CameraShareData* data, MethodInfo* method)); DO_APP_FUNC(0x0260AB80, void, MoleMole_VCBaseSetDitherValue_set_ManagerDitherAlphaValue, (MoleMole_VCBaseSetDitherValue* __this, float value, MethodInfo* method)); +DO_APP_FUNC(0x014CE8F0, void, MoleMole_PlayerModule_EntityAppear, (MoleMole_PlayerModule* __this, Proto_SceneEntityInfo* entity, VisionType__Enum type, uint32_t infoParam, MethodInfo* method)); // Chest Indicator | RyujinZX#6666 DO_APP_FUNC(0x03620070, bool, MoleMole_LCIndicatorPlugin_DoCheck, (LCIndicatorPlugin* __this, MethodInfo* method)); diff --git a/cheat-library/src/appdata/il2cpp-types.h b/cheat-library/src/appdata/il2cpp-types.h index 2cb7dc2..4e0b5a7 100644 --- a/cheat-library/src/appdata/il2cpp-types.h +++ b/cheat-library/src/appdata/il2cpp-types.h @@ -9251,6 +9251,25 @@ namespace app { struct Canvas__Fields fields; }; + + struct MoleMole_InfoTextDialogContext__Fields { + struct BaseDialogContext__Fields _; + struct MonoInfoTextDialog* _dialogMono; + struct List_1_System_String_* _contents; + bool _needFreeClickButton; + bool _interactable; + struct Nullable_1_Boolean_ _customEnableInputPenetrate; + /*MoleMole_InfoTextDialogContext_MoleMole_InfoTextDialogContext_InfoState__Enum _infoState; + float _nextTimeStamp; + bool _needFadeIn;*/ + }; + + struct MoleMole_InfoTextDialogContext { + struct MoleMole_InfoTextDialogContext__Class* klass; + MonitorData* monitor; + struct MoleMole_InfoTextDialogContext__Fields fields; + }; + struct __declspec(align(8)) UIManager__Fields { struct LinkedList_1_MoleMole_BaseContext_* _inputContextList; struct HashSet_1_MoleMole_BaseContext_* _inputContextSet; @@ -9260,6 +9279,50 @@ namespace app { uint32_t _curProfileHandle; struct Canvas* _sceneCanvas; struct Camera* _uiCamera; + struct Stack_1_MoleMole_BasePageContext_* _pageContextStack; + struct List_1_MoleMole_BaseDialogContext_* _rootDialogContextList; + struct List_1_MoleMole_BaseWidgetContext_* _widgetContextList; + struct List_1_MoleMole_BaseContext_* _tickContextList; + struct List_1_MoleMole_BaseContext_* _lateTickContextList; + struct List_1_MoleMole_BaseContext_* _toBeDestroyedContextList; + struct List_1_MoleMole_BaseDialogContext_* _cacheDialogContextList; + struct Dictionary_2_System_Int32_MoleMole_DoublyList_1_* _cachedLockingContexts; + struct Dictionary_2_System_Int32_System_Int32_* _lockPriorityCounts; + int32_t _curLockPriority; + struct Dictionary_2_System_Type_MoleMole_BaseContextData_* _contextDatas; + struct Dictionary_2_System_UInt32_Proto_AnnounceData_* _announceDatas; + struct MoleMole_ViewCache* _pageViewCache; + struct MoleMole_ViewCache* _dialogViewCache; + struct MoleMole_ViewCache* _widgetViewCache; + int32_t _showingContext; + bool BOJECMDPLDJ; + struct Dictionary_2_System_String_MoleMole_UIManager_MoleMole_UIManager_HandleItem_* _pathHandleDic; + struct CanvasScaler* _canvasScaler_k__BackingField; + struct MonoBaseCanvas* _levelCanvas; + /*CameraClearFlags__Enum*/ void* _curClearFlag; + struct MoleMole_FixedStack_1_System_Boolean_* _isUICameraEnableStack; + bool _needRefreshUICameraEnable; + bool _enableJoypadVirtualCursor; + bool _isWindowsPotrait; + struct List_1_System_String_* _uiResolitions; + int32_t _canvasSizeLevel; + struct Vector2 _currReferenceResolution; + struct List_1_UnityEngine_Resolution_* _windowResolutions; + int32_t _currWindowResIndex; + struct UnityAction* OnResolutionChanged; + /*MoleMole_LayoutVersion__Enum*/ void* _layoutVersion_k__BackingField; + bool _hideUI; + struct MoleMole_UIManager_SaveData* _saveData; + uint32_t _rootCanvasPrefabHandle; + struct GameObject* _rootCanvasPrefab; + struct MonoBaseCanvas* _rootCanvasInstance; + bool _isMobilePlatform; + struct List_1_MoleMole_BaseGroupContext_* _groupContextList; + struct MoleMole_BaseGroupContext* _curGroupContext; + struct MoleMole_TipsDialogContext* _normalMessageDialog; + struct MoleMole_InfoTextDialogContext* _infoDialogContext; + struct MoleMole_InfoTextDialogContext* _rootInfoDialogContext; + struct MoleMole_InfoTextDialogContext* _infoDialogContextWithoutBlockInput; }; struct MoleMole_UIManager { @@ -9815,51 +9878,51 @@ namespace app { struct List_1_System_String_* FDFHCABDDFE; bool NMJJKJPPIGC; }; - struct __declspec(align(8)) MoleMole_MapManager__Fields - { - bool GCNMOPKPIMF; - struct GameObject* mapObj; - struct MonoLevelMapUI* monoLevelMapUI; - uint32_t _mapContainerHandle; - uint32_t playerSceneID; - uint32_t mapSceneID; - struct SceneScriptData* _sceneDataInMap; - struct MapScriptData* mapData; - struct String* _currMapPrefabPath; - struct Nullable_1_MoleMole_AsyncJob_ BKMDLHJBOMF; - bool _forceCurrentScene; - uint32_t _mapSceneIDSelected; - bool DebugNewmap; - struct String* currMapString; - struct RectTransform* currParent; - struct GameObject* mapGameObjectInst; - uint32_t _mapImageHandle; - struct MonoLevelMap* levelMap; - float mainPageCheckDistance; - int32_t _currState; - bool _hasSignalv; - struct Vector3 _signalPos; - float _distanceThreshold; - uint32_t _id; - bool FLDAFADKOJI; - struct GameObject* FPKDGCJHAGM; - uint32_t LPOBPKLKGGK; - struct List_1_OOMOGPMHEAO_* HAEOLGFHPEN; - struct List_1_System_String_* EIJHGKFFDHO; - struct Dictionary_2_System_String_PILLJDIDHIJ_* _polygonLimitRegions; - bool _isCurActivityLimitRegion; - bool _isCurHomeworldLimitRegion; - struct Coroutine* _curDestroyLimitRegionCoroutine; - float KJLNBKEIFCJ; - struct Vector3 CIPDJNHBFPB; - struct List_1_System_UInt32_* OBMINJCEAJL; - struct Dictionary_2_System_UInt32_List_1_LPKPLIFIBGA_* JAKFLGOOBMP; - bool OJNGNBKMMFI; - struct List_1_System_String_* OJBKAGDIEIK; - struct List_1_System_String_* NFGGLJBPIBO; - struct Dictionary_2_System_String_System_UInt32_* AIMGKHPHKMP; - struct Dictionary_2_System_UInt32_System_UInt32_* NCOMNKCALBL; - }; + struct __declspec(align(8)) MoleMole_MapManager__Fields + { + bool GCNMOPKPIMF; + struct GameObject* mapObj; + struct MonoLevelMapUI* monoLevelMapUI; + uint32_t _mapContainerHandle; + uint32_t playerSceneID; + uint32_t mapSceneID; + struct SceneScriptData* _sceneDataInMap; + struct MapScriptData* mapData; + struct String* _currMapPrefabPath; + struct Nullable_1_MoleMole_AsyncJob_ BKMDLHJBOMF; + bool _forceCurrentScene; + uint32_t _mapSceneIDSelected; + bool DebugNewmap; + struct String* currMapString; + struct RectTransform* currParent; + struct GameObject* mapGameObjectInst; + uint32_t _mapImageHandle; + struct MonoLevelMap* levelMap; + float mainPageCheckDistance; + int32_t _currState; + bool _hasSignalv; + struct Vector3 _signalPos; + float _distanceThreshold; + uint32_t _id; + bool FLDAFADKOJI; + struct GameObject* FPKDGCJHAGM; + uint32_t LPOBPKLKGGK; + struct List_1_OOMOGPMHEAO_* HAEOLGFHPEN; + struct List_1_System_String_* EIJHGKFFDHO; + struct Dictionary_2_System_String_PILLJDIDHIJ_* _polygonLimitRegions; + bool _isCurActivityLimitRegion; + bool _isCurHomeworldLimitRegion; + struct Coroutine* _curDestroyLimitRegionCoroutine; + float KJLNBKEIFCJ; + struct Vector3 CIPDJNHBFPB; + struct List_1_System_UInt32_* OBMINJCEAJL; + struct Dictionary_2_System_UInt32_List_1_LPKPLIFIBGA_* JAKFLGOOBMP; + bool OJNGNBKMMFI; + struct List_1_System_String_* OJBKAGDIEIK; + struct List_1_System_String_* NFGGLJBPIBO; + struct Dictionary_2_System_String_System_UInt32_* AIMGKHPHKMP; + struct Dictionary_2_System_UInt32_System_UInt32_* NCOMNKCALBL; + }; struct MoleMole_MapManager { struct MapManager__Class* klass; @@ -10544,19 +10607,19 @@ namespace app { struct IGKEDHHIDMA__Fields fields; }; - struct __declspec(align(8)) InLevelMainPageContext_DoTeamCountDown_Iterator__Fields - { - int32_t HGCHJINEMCM; - struct Object* KOBKOALABHL; - struct InLevelMainPageContext* _levelMainPageContext; - }; + struct __declspec(align(8)) InLevelMainPageContext_DoTeamCountDown_Iterator__Fields + { + int32_t HGCHJINEMCM; + struct Object* KOBKOALABHL; + struct InLevelMainPageContext* _levelMainPageContext; + }; - struct InLevelMainPageContext_DoTeamCountDown_Iterator - { - struct InLevelMainPageContext_DoTeamCountDown_Iterator__Class* klass; - MonitorData* monitor; - struct InLevelMainPageContext_DoTeamCountDown_Iterator__Fields fields; - }; + struct InLevelMainPageContext_DoTeamCountDown_Iterator + { + struct InLevelMainPageContext_DoTeamCountDown_Iterator__Class* klass; + MonitorData* monitor; + struct InLevelMainPageContext_DoTeamCountDown_Iterator__Fields fields; + }; struct MonoMiniMap__Fields { struct MonoBehaviour__Fields _; @@ -12120,7 +12183,7 @@ namespace app { int32_t m_Tag; int32_t m_Loop; }; - + struct __declspec(align(8)) MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_AnimatorEventPatternProcessItem__Fields { struct List_1_System_Int32_* patterns; struct AnimatorStateInfo stateInfo; @@ -12141,6 +12204,207 @@ namespace app { ForceTriggerOnExitTransitionFinish = 0x00000004, }; + struct __declspec(align(8)) MoleMole_ElementDurability__Fields { + float value; + }; + + struct MoleMole_ElementDurability { + struct MoleMole_ElementDurability__Class* klass; + MonitorData* monitor; + struct MoleMole_ElementDurability__Fields fields; + }; + + struct ScriptableObject__Fields { + struct Object_1__Fields _; + }; + + struct __declspec(align(8)) ParameterOverride__Fields { + bool overrideState; + }; + + struct ParameterOverride { + struct ParameterOverride__Class* klass; + MonitorData* monitor; + struct ParameterOverride__Fields fields; + }; + + struct ParameterOverride_1_System_Boolean___Fields { + struct ParameterOverride__Fields _; + bool value; + }; + + struct BoolParameter__Fields { + struct ParameterOverride_1_System_Boolean___Fields _; + }; + + struct BoolParameter { + struct BoolParameter__Class* klass; + MonitorData* monitor; + struct BoolParameter__Fields fields; + }; + + struct ParameterOverride_1_System_Single___Fields { + struct ParameterOverride__Fields _; + float value; + }; + + struct FloatParameter__Fields { + struct ParameterOverride_1_System_Single___Fields _; + }; + + struct FloatParameter { + struct FloatParameter__Class* klass; + MonitorData* monitor; + struct FloatParameter__Fields fields; + }; + + struct PostProcessEffectSettings__Fields { + struct ScriptableObject__Fields _; + bool active; + struct BoolParameter* enabled; + struct ReadOnlyCollection_1_UnityEngine_Rendering_PostProcessing_ParameterOverride_* parameters; + }; + + struct MHYDepthOfField__Fields { + struct PostProcessEffectSettings__Fields _; + struct MHYDepthOfFieldQualityParameter* quality; + struct FloatParameter* focusDistance; + struct FloatParameter* fStop; + struct FloatParameter* maxForegroundRadius; + struct FloatParameter* maxBackgroundRadius; + struct BoolParameter* debugTestSomething; + struct BoolParameter* useMotionBlurParameters; + struct FloatParameter* mbFocusRange; + struct FloatParameter* mbDofBlurAmount; + struct FloatParameter* mbNearFocalDistance; + struct FloatParameter* mbNearFocalTransitionDistance; + }; + + struct MHYDepthOfField { + struct MHYDepthOfField__Class* klass; + MonitorData* monitor; + struct MHYDepthOfField__Fields fields; + }; + + struct Int3 { + int32_t x; + int32_t y; + int32_t z; + }; + + enum class PropSpace__Enum : int32_t { + None = 0x00000000, + World = 0x00000001, + Body = 0x00000002, + RightHand = 0x00000003, + LeftHand = 0x00000004, + }; + + struct AnimatorController__Fields { + struct MonoBehaviour__Fields _; + struct Action_1_motion4hi_AnimatorController_CrossFadeInfo_* onCrossFadeTransition; + struct Int3__Array* _transitionProirities; + struct Dictionary_2_System_Int32_List_1_Int3_* _transitionProiritiesDict; + struct Dictionary_2_System_String_System_Boolean_* _stateLoop; + float _random; + bool _disableNoFadeZone; + struct Dictionary_2_UnityEngine_StateMachineBehaviour_motion4hi_AnimatorController_StateMachineBehaviourInfo_* _currentBehaviour; + struct List_1_motion4hi_CrossFadeByParameterConfig_* _crossfadeConfigs; + struct Dictionary_2_System_Int32_motion4hi_CrossFadeByParameterConfig_* _configsDictionary; + struct String__Array* _curveExtractionKeywords; + struct String__Array* _stateNames; //all animations + struct Boolean__Array* _stateLoops; + struct Int32__Array* _stateHashes; + struct Boolean__Array* _stateMirros; + struct Boolean__Array* _stateHasMirrors; + struct String__Array* _stateMirrorParams; + struct String__Array* _statePhaseJsonPathes; + struct AnimationPhaseArray__Array* _statePhaseArrays; + struct Single__Array* _stateDefaultDurations; + struct List_1_System_String_* _serializedParamConstraints; + struct List_1_motion4hi_ParamConstraint_* _paramConstraints; + struct Boolean__Array* _stateTransitionedArray; + struct Int3 _cfTransition; + struct Vector3 _cfParams; + struct Animator* _animator; + int32_t _frame; + struct AnimatorControllerParameter__Array* _allParams; + struct Dictionary_2_System_Int32_UnityEngine_AnimatorControllerParameterType_* _allParamsTypeDictionary; + PropSpace__Enum _prop1Space; + struct Vector3 _crossOverStepBorderNear0; + struct Vector3 _crossOverStepBorderNear1; + struct Vector3 _crossOverStepBorderFar0; + struct Vector3 _crossOverStepBorderFar1; + struct Vector3 _crossOverJumpBorder0; + struct Vector3 _crossOverJumpBorder1; + struct Vector3 _crossOverPredictJumpPos; + struct Vector3 _crossOverPredictStepInPos; + struct Vector3 _crossOverDecisionJumpPos; + int32_t _currentstateHash; + int32_t _nextstateHash; + float _currentstateTime; + float _nextstateTime; + }; + + struct AnimatorController { + struct AnimatorController__Class* klass; + MonitorData* monitor; + struct AnimatorController__Fields fields; + }; + + enum class Proto_ProtEntityType__Enum : int32_t { + ProtEntityNone = 0x00000000, + ProtEntityAvatar = 0x00000001, + ProtEntityMonster = 0x00000002, + ProtEntityNpc = 0x00000003, + ProtEntityGadget = 0x00000004, + ProtEntityRegion = 0x00000005, + ProtEntityWeapon = 0x00000006, + ProtEntityWeather = 0x00000007, + ProtEntityScene = 0x00000008, + ProtEntityTeam = 0x00000009, + ProtEntityMassiveEntity = 0x0000000a, + ProtEntityMpLevel = 0x0000000b, + ProtEntityPlayTeamEntity = 0x0000000c, + ProtEntityEyePoint = 0x0000000d, + ProtEntityMax = 0x0000000e, + }; + + enum class Proto_SceneEntityInfo_Proto_SceneEntityInfo_EntityOneofCase__Enum : int32_t { + None = 0x00000000, + Avatar = 0x0000000a, + Monster = 0x0000000b, + Npc = 0x0000000c, + Gadget = 0x0000000d, + }; + + struct Proto_SceneEntityInfo__Fields { + struct MessageBase_1__Fields _; + Proto_ProtEntityType__Enum entityType_; + uint32_t entityId_; + struct String* name_; + struct Proto_MotionInfo* motionInfo_; + struct Google_Protobuf_Collections_RepeatedMessageField_1_Proto_PropPair_* propList_; + struct Google_Protobuf_Collections_RepeatedMessageField_1_Proto_FightPropPair_* fightPropList_; + uint32_t lifeState_; + struct Google_Protobuf_Collections_RepeatedMessageField_1_Proto_AnimatorParameterValueInfoPair_* animatorParaList_; + uint32_t lastMoveSceneTimeMs_; + uint32_t lastMoveReliableSeq_; + struct Proto_EntityClientData* entityClientData_; + struct Google_Protobuf_Collections_RepeatedMessageField_1_Proto_EntityEnvironmentInfo_* entityEnvironmentInfoList_; + struct Proto_EntityAuthorityInfo* entityAuthorityInfo_; + struct Google_Protobuf_Collections_RepeatedPrimitiveField_1_System_String_* tagList_; + struct Google_Protobuf_Collections_RepeatedMessageField_1_Proto_ServerBuff_* serverBuffList_; + struct Object* entity_; + Proto_SceneEntityInfo_Proto_SceneEntityInfo_EntityOneofCase__Enum entityCase_; + }; + + struct Proto_SceneEntityInfo { + struct Proto_SceneEntityInfo__Class* klass; + MonitorData* monitor; + struct Proto_SceneEntityInfo__Fields fields; + }; + #if !defined(_GHIDRA_) && !defined(_IDA_) } #endif diff --git a/cheat-library/src/user/cheat/visuals/AnimationChanger.cpp b/cheat-library/src/user/cheat/visuals/AnimationChanger.cpp index 28f0ea3..d6c292d 100644 --- a/cheat-library/src/user/cheat/visuals/AnimationChanger.cpp +++ b/cheat-library/src/user/cheat/visuals/AnimationChanger.cpp @@ -8,236 +8,18 @@ namespace cheat::feature { - static std::string animations[] = { - // All characters - "SlipFaceWall", - "SlipBackWall", - "DropDown", - "JumpOffWall", - "Jump", - "JumpForRun", - "JumpForWalk", - "Fly", - "FlyStart", - "JumpForSprint", - "SwimIdle", - "SwimMove", - "SwimDash", - "ClimbMove1", - "ClimbIdle", - "ClimbJump", - "ClimbMove0", - "FallToGroundRun", - "FallOnGroundLit", - "FallOnGround", - "FallToGroundRunHard", - "FallToGroundSprint", - "Walk", - "Run", - "Standby", - "RunToIdle", - "RunToWalk", - "WalkToIdle", - "WalkToRun", - "Sprint", - "SprintToIdle", - "SprintToRun", - "ClimbDownToGround", - "SprintBS", - "ShowUp", - "CrouchToStandby", - "CrouchIdle", - "CrouchRoll", - "CrouchMove", - "SkiffNormal", - "Upstairs", - "JumpUpWallForStandby", - "JumpUpWallReady", - "Standby2ClimbA", - "SwimJump", - "SwimJumpDrop", - "SwimJumpToWater", - "Standby2ClimbB", - "CrouchDrop", - "TurnDir", - "StandbyWeapon", - "StandbyPutaway", - "StandbyPutawayOver", - "Icespine_Out", - "Icespine", - "LiquidStrike_MoveStandby", - "LiquidStrike_AS", - "LiquidStrike_BS", - "LiquidStrike_BS1", - "LiquidStrike_Move", - "LiquidStrike_Strike", - "LiquidStrike_FatalStandby", - "LiquidStrike_FatalMove", - "LiquidStrike_AS_OnWater", - "LiquidStrike_BS_0", - "FrozenWindmill", - "FrozenWindmill_AS", - "Attack03", - "Attack04", - "Attack05", - "Attack06", - "Attack01", - "Attack02", - "ExtraAttack", - "ExtraAttack_AS", - "ExtraAttack_BS", - "Katana_Attack03", - "Katana_Attack04", - "Katana_Attack02", - "Katana_Attack01", - "Katana_Attack05", - "FallingAnthem_Loop", - "FallingAnthem_AS_2", - "FallingAnthem_BS_1", - "FallingAnthem_BS_2", - "FallingAnthem_AS_1", - "FallingAnthem_Loop_Low", - "SitBDown", - "SitBLoop", - "SitBUp", - "SitDown", - "SitLoop", - "SitUp", - "StandbyShow_01", - "StandbyShow_02", - "StandbyVoice", - "Think01BS", - "Think01Loop", - "Think01AS", - "Akimbo02BS", - "Akimbo02Loop", - "Akimbo02AS", - "ChannelBS", - "ChannelLoop", - "ChannelAS", - "PlayMusic_Lyre_AS", - "PlayMusic_Lyre_BS", - "PlayMusic_Lyre_Loop", - "PlayMusic_Qin_BS", - "PlayMusic_Qin_AS", - "PlayMusic_Qin_Loop", - "PlayMusic_Drum_BS", - "PlayMusic_Drum_AS", - "PlayMusic_Drum_Loop", - "ActivitySkill_ElectricCoreFly", - "ActivitySkill_GrapplingHook", - "Hit_H", - "Hit_L", - "Hit_Throw", - "Hit_Throw_Ground", - "Hit_ThrowAir", - "Struggle", - "NormalDie", - "SwimDie", - "HitGroundDie", - "FallDie_AS", - "FallDie", - // Main Character only - "UziExplode_AS", - "UziExplode_BS", - "UziExplode_Charge_01", - "UziExplode_Strike_02", - "UziExplode_Charge_02", - "UziExplode_Strike_01", - "UziExplode_BS_1", - "WindBreathe_AS", - "WindBreathe", - "Hogyoku_AS", - "Hogyoku_BS", - "Hogyoku", - "Hogyoku_Charge", - "Hogyoku_Charge_AS", - "Hogyoku_Charge_2", - "RockTide_AS", - "RockTide", - "CrouchThrowBS", - "CrouchThrowLoop", - "CrouchThrowAS", - "FindCatThrowBS", - "FindCatThrowLoop", - "FindCatThrowAS", - "Player_Electric_ElementalArt", - "Player_Electric_ElementalArt_AS", - "Player_Electric_ElementalBurst", - "Player_Electric_ElementalBurst_AS", - "PutHand01BS", - "PutHand01Loop", - "PutHand01AS", - "Akimbo01BS", - "Backrake01BS", - "Forerake01BS", - "StrikeChest01BS", - "Akimbo01Loop", - "Akimbo01AS", - "Backrake01Loop", - "Backrake01AS", - "Forerake01Loop", - "Forerake01AS", - "StrikeChest01Loop", - "StrikeChest01AS", - "HoldHead01BS", - "HoldHead01Loop", - "HoldHead01AS", - "Clap01", - "Turn01_90LBS", - "Turn01_90RBS", - "Turn01_90LAS", - "Turn01_90RAS", - "Alert01BS", - "Alert01Loop", - "Alert01AS", - "Fishing01_BS", - "Fishing01Loop", - "Fishing01AS", - "Think01_BS", - "Think01_Loop", - "Think01_AS", - "Channel01BS", - "Channel01Loop", - "Channel01AS", - "Fishing_Battle_BS", - "Fishing_Cast_AS", - "Fishing_Cast_BS", - "Fishing_Cast_Loop", - "Fishing_Choose", - "Fishing_Choose_Loop", - "Fishing_End", - "Fishing_Pull_01", - "Fishing_Pull_02", - "Fishing_Wait", - "Fishing_Pull_Fail", - "Bartender_MixingStandby", - "Bartender_MixingStart", - "Bartender_MixingToPour", - "Bartender_Pour", - "Bartender_PourFinish", - "Bartender_PourStandby", - "Bartender_AddLoop", - "Bartender_PrepareStart", - "Bartender_Standby", - "Bartender_AddStandby", - "Bartender_PrepareToStandby", - "Bartender_StandbyFinish", - "Blocking_BS", - "Blocking_Loop", - "Blocking_Back", - "Blocking_Bounce", - "Blocking_Hit", - "Blocking_AS" - }; - + static bool onEntityAppear = false; + static void MoleMole_PlayerModule_EntityAppear_Hook(app::MoleMole_PlayerModule* __this, app::Proto_SceneEntityInfo* entity, app::VisionType__Enum type, uint32_t infoParam, MethodInfo* method); + std::vector animations; + AnimationChanger::AnimationChanger() : Feature(), NF(f_Enabled, "Animation Changer", "Visuals::AnimationChanger", false), - NF(f_Animation, "Animation", "Visuals::AnimationChanger", "ExtraAttack"), + NF(f_Animation, "Animation", "Visuals::AnimationChanger", "Attack01"), NF(f_ApplyKey, "Apply Animation", "Visuals::AnimationChanger", Hotkey('Y')), NF(f_ResetKey, "Reset Animation", "Visuals::AnimationChanger", Hotkey('R')), NF(f_Delay, "Repeat Delay", "Visuals::AnimationChanger", 400) { + HookManager::install(app::MoleMole_PlayerModule_EntityAppear, MoleMole_PlayerModule_EntityAppear_Hook); events::GameUpdateEvent += MY_METHOD_HANDLER(AnimationChanger::OnGameUpdate); } @@ -251,7 +33,7 @@ namespace cheat::feature { ImGui::BeginGroupPanel("Animation Changer"); { - ConfigWidget(f_Enabled, "Changes active character's animation.\nNot all animations work for every character except Main Character."); + ConfigWidget(f_Enabled, "Changes active character's animation."); if (f_Enabled) { if (ImGui::BeginCombo("Animations", f_Animation.value().c_str())) @@ -292,6 +74,14 @@ namespace cheat::feature return instance; } + // Taiga#5555: Called when you switch characters. Feel free to get rid of this hook if you find a better function. + static void MoleMole_PlayerModule_EntityAppear_Hook(app::MoleMole_PlayerModule* __this, app::Proto_SceneEntityInfo* entity, app::VisionType__Enum type, uint32_t infoParam, MethodInfo* method) + { + CALL_ORIGIN(MoleMole_PlayerModule_EntityAppear_Hook, __this, entity, type, infoParam, method); + onEntityAppear = false; + } + + // Feel free to refactor. void AnimationChanger::OnGameUpdate() { if (!f_Enabled) @@ -304,6 +94,40 @@ namespace cheat::feature if (avatar->animator() == nullptr) return; + auto avatarName = avatar->name(); + std::string objectName = il2cppi_to_string(app::Object_1_get_name(reinterpret_cast(avatar->gameObject()), nullptr)).c_str(); + + auto gameObj = app::GameObject_Find(string_to_il2cppi("EntityRoot/AvatarRoot/" + avatarName.substr(0, avatarName.find_first_of(" ")) + "/OffsetDummy/" + objectName.c_str()), nullptr); + if (gameObj == nullptr) + return; + + auto acComponent = app::GameObject_GetComponentByName(gameObj, string_to_il2cppi("AnimatorController"), nullptr); + if (acComponent == nullptr) + return; + + auto stateNamesArray = reinterpret_cast(acComponent)->fields._stateNames; + + static bool isFull = false; + for (int i = 0; i < stateNamesArray->max_length && !isFull; i++) + { + if (animations.size() == stateNamesArray->max_length) + { + std::sort(animations.begin(), animations.end()); + animations.erase(unique(animations.begin(), animations.end()), animations.end()); + isFull = true; + continue; + } + + animations.push_back(il2cppi_to_string(stateNamesArray->vector[i]).c_str()); + } + + if (!onEntityAppear && isFull) + { + animations.clear(); + isFull = false; + onEntityAppear = true; + } + if (f_ApplyKey.value().IsPressed()) app::Animator_Play(avatar->animator(), string_to_il2cppi(f_Animation.value().c_str()), 0, 0, nullptr);