Merge pull request #676 from Taiga74164/changes-6

Improved Animation Changer
This commit is contained in:
Joaquin 2022-09-14 12:27:01 -06:00 committed by GitHub
commit abc4dc6e07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 372 additions and 283 deletions

View File

@ -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));

View File

@ -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

View File

@ -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<std::string> 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<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())
app::Animator_Play(avatar->animator(), string_to_il2cppi(f_Animation.value().c_str()), 0, 0, nullptr);