No more hardcoding Animations

This commit is contained in:
Joaquin 2022-09-14 07:42:28 -06:00
parent d5cb6f3be5
commit ae7e8ca414
3 changed files with 371 additions and 282 deletions

View File

@ -141,6 +141,7 @@ DO_APP_FUNC(0x01CA4DB0, void, MoleMole_FishingModule_onFishChosenNotify, (void*
// Visuals // Visuals
DO_APP_FUNC(0x02F624E0, void, MoleMole_SCameraModuleInitialize_SetWarningLocateRatio, (SCameraModuleInitialize* __this, double deltaTime, CameraShareData* data, MethodInfo* method)); 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(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 // Chest Indicator | RyujinZX#6666
DO_APP_FUNC(0x03620070, bool, MoleMole_LCIndicatorPlugin_DoCheck, (LCIndicatorPlugin* __this, MethodInfo* method)); DO_APP_FUNC(0x03620070, bool, MoleMole_LCIndicatorPlugin_DoCheck, (LCIndicatorPlugin* __this, MethodInfo* method));

View File

@ -9251,6 +9251,25 @@ namespace app {
struct Canvas__Fields fields; 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 __declspec(align(8)) UIManager__Fields {
struct LinkedList_1_MoleMole_BaseContext_* _inputContextList; struct LinkedList_1_MoleMole_BaseContext_* _inputContextList;
struct HashSet_1_MoleMole_BaseContext_* _inputContextSet; struct HashSet_1_MoleMole_BaseContext_* _inputContextSet;
@ -9260,6 +9279,50 @@ namespace app {
uint32_t _curProfileHandle; uint32_t _curProfileHandle;
struct Canvas* _sceneCanvas; struct Canvas* _sceneCanvas;
struct Camera* _uiCamera; 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 { struct MoleMole_UIManager {
@ -9815,51 +9878,51 @@ namespace app {
struct List_1_System_String_* FDFHCABDDFE; struct List_1_System_String_* FDFHCABDDFE;
bool NMJJKJPPIGC; bool NMJJKJPPIGC;
}; };
struct __declspec(align(8)) MoleMole_MapManager__Fields struct __declspec(align(8)) MoleMole_MapManager__Fields
{ {
bool GCNMOPKPIMF; bool GCNMOPKPIMF;
struct GameObject* mapObj; struct GameObject* mapObj;
struct MonoLevelMapUI* monoLevelMapUI; struct MonoLevelMapUI* monoLevelMapUI;
uint32_t _mapContainerHandle; uint32_t _mapContainerHandle;
uint32_t playerSceneID; uint32_t playerSceneID;
uint32_t mapSceneID; uint32_t mapSceneID;
struct SceneScriptData* _sceneDataInMap; struct SceneScriptData* _sceneDataInMap;
struct MapScriptData* mapData; struct MapScriptData* mapData;
struct String* _currMapPrefabPath; struct String* _currMapPrefabPath;
struct Nullable_1_MoleMole_AsyncJob_ BKMDLHJBOMF; struct Nullable_1_MoleMole_AsyncJob_ BKMDLHJBOMF;
bool _forceCurrentScene; bool _forceCurrentScene;
uint32_t _mapSceneIDSelected; uint32_t _mapSceneIDSelected;
bool DebugNewmap; bool DebugNewmap;
struct String* currMapString; struct String* currMapString;
struct RectTransform* currParent; struct RectTransform* currParent;
struct GameObject* mapGameObjectInst; struct GameObject* mapGameObjectInst;
uint32_t _mapImageHandle; uint32_t _mapImageHandle;
struct MonoLevelMap* levelMap; struct MonoLevelMap* levelMap;
float mainPageCheckDistance; float mainPageCheckDistance;
int32_t _currState; int32_t _currState;
bool _hasSignalv; bool _hasSignalv;
struct Vector3 _signalPos; struct Vector3 _signalPos;
float _distanceThreshold; float _distanceThreshold;
uint32_t _id; uint32_t _id;
bool FLDAFADKOJI; bool FLDAFADKOJI;
struct GameObject* FPKDGCJHAGM; struct GameObject* FPKDGCJHAGM;
uint32_t LPOBPKLKGGK; uint32_t LPOBPKLKGGK;
struct List_1_OOMOGPMHEAO_* HAEOLGFHPEN; struct List_1_OOMOGPMHEAO_* HAEOLGFHPEN;
struct List_1_System_String_* EIJHGKFFDHO; struct List_1_System_String_* EIJHGKFFDHO;
struct Dictionary_2_System_String_PILLJDIDHIJ_* _polygonLimitRegions; struct Dictionary_2_System_String_PILLJDIDHIJ_* _polygonLimitRegions;
bool _isCurActivityLimitRegion; bool _isCurActivityLimitRegion;
bool _isCurHomeworldLimitRegion; bool _isCurHomeworldLimitRegion;
struct Coroutine* _curDestroyLimitRegionCoroutine; struct Coroutine* _curDestroyLimitRegionCoroutine;
float KJLNBKEIFCJ; float KJLNBKEIFCJ;
struct Vector3 CIPDJNHBFPB; struct Vector3 CIPDJNHBFPB;
struct List_1_System_UInt32_* OBMINJCEAJL; struct List_1_System_UInt32_* OBMINJCEAJL;
struct Dictionary_2_System_UInt32_List_1_LPKPLIFIBGA_* JAKFLGOOBMP; struct Dictionary_2_System_UInt32_List_1_LPKPLIFIBGA_* JAKFLGOOBMP;
bool OJNGNBKMMFI; bool OJNGNBKMMFI;
struct List_1_System_String_* OJBKAGDIEIK; struct List_1_System_String_* OJBKAGDIEIK;
struct List_1_System_String_* NFGGLJBPIBO; struct List_1_System_String_* NFGGLJBPIBO;
struct Dictionary_2_System_String_System_UInt32_* AIMGKHPHKMP; struct Dictionary_2_System_String_System_UInt32_* AIMGKHPHKMP;
struct Dictionary_2_System_UInt32_System_UInt32_* NCOMNKCALBL; struct Dictionary_2_System_UInt32_System_UInt32_* NCOMNKCALBL;
}; };
struct MoleMole_MapManager { struct MoleMole_MapManager {
struct MapManager__Class* klass; struct MapManager__Class* klass;
@ -10544,19 +10607,19 @@ namespace app {
struct IGKEDHHIDMA__Fields fields; struct IGKEDHHIDMA__Fields fields;
}; };
struct __declspec(align(8)) InLevelMainPageContext_DoTeamCountDown_Iterator__Fields struct __declspec(align(8)) InLevelMainPageContext_DoTeamCountDown_Iterator__Fields
{ {
int32_t HGCHJINEMCM; int32_t HGCHJINEMCM;
struct Object* KOBKOALABHL; struct Object* KOBKOALABHL;
struct InLevelMainPageContext* _levelMainPageContext; struct InLevelMainPageContext* _levelMainPageContext;
}; };
struct InLevelMainPageContext_DoTeamCountDown_Iterator struct InLevelMainPageContext_DoTeamCountDown_Iterator
{ {
struct InLevelMainPageContext_DoTeamCountDown_Iterator__Class* klass; struct InLevelMainPageContext_DoTeamCountDown_Iterator__Class* klass;
MonitorData* monitor; MonitorData* monitor;
struct InLevelMainPageContext_DoTeamCountDown_Iterator__Fields fields; struct InLevelMainPageContext_DoTeamCountDown_Iterator__Fields fields;
}; };
struct MonoMiniMap__Fields { struct MonoMiniMap__Fields {
struct MonoBehaviour__Fields _; struct MonoBehaviour__Fields _;
@ -12120,7 +12183,7 @@ namespace app {
int32_t m_Tag; int32_t m_Tag;
int32_t m_Loop; int32_t m_Loop;
}; };
struct __declspec(align(8)) MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_AnimatorEventPatternProcessItem__Fields { struct __declspec(align(8)) MoleMole_VCAnimatorEvent_MoleMole_VCAnimatorEvent_AnimatorEventPatternProcessItem__Fields {
struct List_1_System_Int32_* patterns; struct List_1_System_Int32_* patterns;
struct AnimatorStateInfo stateInfo; struct AnimatorStateInfo stateInfo;
@ -12141,6 +12204,207 @@ namespace app {
ForceTriggerOnExitTransitionFinish = 0x00000004, 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_) #if !defined(_GHIDRA_) && !defined(_IDA_)
} }
#endif #endif

View File

@ -8,236 +8,18 @@
namespace cheat::feature namespace cheat::feature
{ {
static std::string animations[] = { static bool onEntityAppear = false;
// All characters static void MoleMole_PlayerModule_EntityAppear_Hook(app::MoleMole_PlayerModule* __this, app::Proto_SceneEntityInfo* entity, app::VisionType__Enum type, uint32_t infoParam, MethodInfo* method);
"SlipFaceWall", std::vector<std::string> animations;
"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"
};
AnimationChanger::AnimationChanger() : Feature(), AnimationChanger::AnimationChanger() : Feature(),
NF(f_Enabled, "Animation Changer", "Visuals::AnimationChanger", false), 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_ApplyKey, "Apply Animation", "Visuals::AnimationChanger", Hotkey('Y')),
NF(f_ResetKey, "Reset Animation", "Visuals::AnimationChanger", Hotkey('R')), NF(f_ResetKey, "Reset Animation", "Visuals::AnimationChanger", Hotkey('R')),
NF(f_Delay, "Repeat Delay", "Visuals::AnimationChanger", 400) 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); events::GameUpdateEvent += MY_METHOD_HANDLER(AnimationChanger::OnGameUpdate);
} }
@ -292,6 +74,14 @@ namespace cheat::feature
return instance; 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() void AnimationChanger::OnGameUpdate()
{ {
if (!f_Enabled) if (!f_Enabled)
@ -304,6 +94,40 @@ namespace cheat::feature
if (avatar->animator() == nullptr) if (avatar->animator() == nullptr)
return; return;
auto avatarName = avatar->name();
std::string objectName = il2cppi_to_string(app::Object_1_get_name(reinterpret_cast<app::Object_1*>(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<app::AnimatorController*>(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()) if (f_ApplyKey.value().IsPressed())
app::Animator_Play(avatar->animator(), string_to_il2cppi(f_Animation.value().c_str()), 0, 0, nullptr); app::Animator_Play(avatar->animator(), string_to_il2cppi(f_Animation.value().c_str()), 0, 0, nullptr);