diff --git a/cheat-library/cheat-library.vcxproj b/cheat-library/cheat-library.vcxproj index 938c611..51a0a01 100644 --- a/cheat-library/cheat-library.vcxproj +++ b/cheat-library/cheat-library.vcxproj @@ -48,6 +48,8 @@ + + @@ -151,6 +153,8 @@ + + diff --git a/cheat-library/cheat-library.vcxproj.filters b/cheat-library/cheat-library.vcxproj.filters index 3403490..2520e7f 100644 --- a/cheat-library/cheat-library.vcxproj.filters +++ b/cheat-library/cheat-library.vcxproj.filters @@ -216,6 +216,12 @@ Header Files + + Header Files + + + Header Files + @@ -390,6 +396,12 @@ Source Files + + Source Files + + + Source Files + diff --git a/cheat-library/src/appdata/il2cpp-functions.h b/cheat-library/src/appdata/il2cpp-functions.h index 9be9d3a..5e20a3b 100644 --- a/cheat-library/src/appdata/il2cpp-functions.h +++ b/cheat-library/src/appdata/il2cpp-functions.h @@ -12,7 +12,7 @@ DO_APP_FUNC(0x013815E0, void, InLevelMapPageContext_OnMarkClicked, (InLevelMapPa DO_APP_FUNC(0x01390800, void, InLevelMapPageContext_OnMapClicked, (InLevelMapPageContext* __this, Vector2 screenPos, MethodInfo* method)); DO_APP_FUNC(0x0158AD40, bool, MapModule_IsAreaUnlock, (MBHLOBDPKEC* __this, uint32_t sceneID, uint32_t areaID, MethodInfo* method)); DO_APP_FUNC(0x05036C50, uint16_t, SimpleSafeUInt16_get_Value, (void* __this, LAFKDOLNGNA rawValue, MethodInfo* method)); - +DO_APP_FUNC(0x03427B90, uint32_t, SimpleSafeUInt32_get_Value, (void* __this, app::SimpleSafeUInt32 rawValue, MethodInfo* method)); // Map utility DO_APP_FUNC(0x04339D30, Rect, MonoInLevelMapPage_get_mapRect, (MonoInLevelMapPage* __this, MethodInfo* method)); @@ -42,9 +42,10 @@ DO_APP_FUNC(0x015E1C90, bool, Miscs_CheckTargetAttackable, (void* __this, BaseEn // Cooldown cheats DO_APP_FUNC(0x024D5450, bool, HumanoidMoveFSM_CheckSprintCooldown, (/* HumanoidMoveFSM */void* __this, MethodInfo* method)); DO_APP_FUNC(0x02548810, bool, LCAvatarCombat_IsEnergyMax, (void* __this, MethodInfo* method)); -DO_APP_FUNC(0x02546C10, bool, LCAvatarCombat_IsSkillInCD_1, (void* __this, void* skillInfo, MethodInfo* method)); DO_APP_FUNC(0x0254A170, void, LCAvatarCombat_ChangeEnergy_1, (LCAvatarCombat* __this, ElementType__Enum type, float value, DataPropOp__Enum state, MethodInfo* method)); DO_APP_FUNC(0x0254D660, bool, LCAvatarCombat_OnSkillStart, (LCAvatarCombat* __this, uint32_t skillID, float cdMultipler, MethodInfo* method)); +DO_APP_FUNC(0x02546C10, bool, LCAvatarCombat_IsSkillInCD_1, (LCAvatarCombat* __this, LCAvatarCombat_OMIIMOJOHIP* skillInfo, MethodInfo* method)); + DO_APP_FUNC(0x0112A110, void, ActorAbilityPlugin_AddDynamicFloatWithRange, (void* __this, String* key, float value, float min, float max, bool forceDoAtRemote, MethodInfo* method)); // Rapid fire @@ -123,9 +124,20 @@ DO_APP_FUNC(0x036B8AA0, void, FishingModule_OnExitFishingRsp, (void* __this, voi DO_APP_FUNC(0x036BB0B0, void, FishingModule_onFishChosenNotify, (void* __this, void* notify, MethodInfo* method)); -// Camera +// Visuals DO_APP_FUNC(0x0289DE30, void, SCameraModuleInitialize_SetWarningLocateRatio, (SCameraModuleInitialize* __this, double deltaTime, CameraShareData* data, MethodInfo* method)); +// Chest Indicator | RyujinZX#6666 +DO_APP_FUNC(0x0487E1D0, bool, LCIndicatorPlugin_DoCheck, (LCIndicatorPlugin* __this, MethodInfo* method)); +DO_APP_FUNC(0x0487F680, void, LCIndicatorPlugin_ShowIcon, (LCIndicatorPlugin* __this, MethodInfo* method)); +DO_APP_FUNC(0x0487CBF0, void, LCIndicatorPlugin_HideIcon, (LCIndicatorPlugin* __this, MethodInfo* method)); + +// Auto Cooking | RyujinZX#6666 +DO_APP_FUNC(0x01B91500, void, PlayerModule_RequestPlayerCook, (PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method)); +DO_APP_FUNC(0x01B9E8F0, void, PlayerModule_OnPlayerCookRsp, (PlayerModule* __this, PlayerCookRsp* rsp, MethodInfo* method)); +DO_APP_FUNC(0x030E1000, void, CookingQtePageContext_UpdateProficiency, (CookingQtePageContext* __this, MethodInfo* method)); +DO_APP_FUNC(0x03AA2920, uint32_t, CookRecipeExcelConfig_get_maxProficiency, (CookRecipeExcelConfig* __this, MethodInfo* method)); + // Utility DO_APP_FUNC(0x015DD910, float, Miscs_CalcCurrentGroundWaterHeight, (void* __this, float x, float z, MethodInfo* method)); @@ -146,6 +158,7 @@ DO_APP_FUNC(0x014C88B0, void, ActorUtils_SyncAvatarMotion, (void* __this, int DO_APP_FUNC(0x02ECCFE0, Notify, Notify_CreateNotify_1, (void* __this, AJAPIFPNFKP__Enum type, Object* body, MethodInfo* method)); DO_APP_FUNC(0x04D3A960, float, SafeFloat_GetValue, (void* __this, SafeFloat safeFloat, MethodInfo* method)); +DO_APP_FUNC(0x04D3A770, SafeFloat, SafeFloat_SetValue, (void* __this, float value, MethodInfo* method)); DO_APP_FUNC(0x01645B20, void, Entity_SetPosition, (BaseEntity* __this, Vector3 position, bool someBool, MethodInfo* method)); DO_APP_FUNC(0x05102970, LCBaseCombat*, BaseEntity_GetBaseCombat, (BaseEntity* __this, MethodInfo* method)); @@ -176,7 +189,9 @@ DO_APP_FUNC(0x01560F70, List_1_MoleMole_BaseEntity_*, EntityManager_GetEntities, DO_APP_FUNC(0x05D07B50, Bounds, Utils_1_GetBounds, (void* __this, GameObject* go, MethodInfo* method)); -DO_APP_FUNC(0x024E0BA0, void, HumanoidMoveFSM_LateTick, (void* __this, float deltaTime, MethodInfo* method)); +// Modify | RyujinZX#6666 +DO_APP_FUNC(0x024E0BA0, void, HumanoidMoveFSM_LateTick, (app::HumanoidMoveFSM* __this, float deltaTime, MethodInfo* method)); + DO_APP_FUNC(0x03511760, bool, ScenePropManager_GetTreeTypeByPattern, (ScenePropManager* __this, String* pattern, ECGLPBEEEAA__Enum* treeType, MethodInfo* method)); DO_APP_FUNC(0x01997D90, void, NetworkManager_1_RequestHitTreeDropNotify, (NetworkManager_1* __this, Vector3 position, Vector3 hitPostion, ECGLPBEEEAA__Enum treeType, MethodInfo* method)); @@ -184,7 +199,7 @@ DO_APP_FUNC(0x0332CD30, uint64_t, GetTimestamp, (void* __this, MethodInfo* metho DO_APP_FUNC(0x017F43F0, bool, LoadingManager_IsLoaded, (LoadingManager* __this, MethodInfo* method)); -// Thanks to @RyujinZX +// Thanks to | RyujinZX DO_APP_FUNC(0x019C5D50, void, LCAbilityElement_ReduceModifierDurability, (LCAbilityElement* __this, int32_t modifierDurabilityIndex, float reduceDurability, Nullable_1_Single_ deltaTime, MethodInfo* method)); DO_APP_FUNC(0x035D8B70, BaseEntity*, GadgetEntity_GetOwnerEntity, (GadgetEntity* __this, MethodInfo* method)); diff --git a/cheat-library/src/appdata/il2cpp-types.h b/cheat-library/src/appdata/il2cpp-types.h index 38023b8..fbcceae 100644 --- a/cheat-library/src/appdata/il2cpp-types.h +++ b/cheat-library/src/appdata/il2cpp-types.h @@ -10435,6 +10435,37 @@ namespace app { struct LCCharacterCombat__Fields fields; }; + struct __declspec(align(8)) LCAvatarCombat_OMIIMOJOHIP__Fields { + uint32_t skillID; + struct AvatarSkillExcelConfig* config; + struct SafeFloat cdTimer; + struct SafeFloat currChargeCount; + struct SafeFloat costStamina; + bool canHold; + bool canTrigger; + bool useInAir; + struct HashSet_1_System_Int32_* canUseSkillStateWhiteList; + int32_t needMonitor; + bool isLocked; + bool ignoreCDMinusRatio; + bool forceCanDoSkill; + struct SafeFloat NFNMNLKPNHD; + struct SafeFloat EBIABBHAFFD; + struct SafeFloat HPDKMHFJFMI; + struct SafeFloat IBKPGNDMDBJ; + struct SafeFloat GBGBNALDDFM; + int32_t skillIndex; + int32_t prority; + float _costElem_k__BackingField; + int32_t _maxChargeCount_k__BackingField; + }; + + struct LCAvatarCombat_OMIIMOJOHIP { + struct LCAvatarCombat_OMIIMOJOHIP__Class* klass; + MonitorData* monitor; + struct LCAvatarCombat_OMIIMOJOHIP__Fields fields; + }; + struct LCAvatarCombat__Fields { struct LCCharacterCombat__Fields _; struct EntityTimer* _targetAtteTimer; @@ -10517,6 +10548,76 @@ namespace app { }; #endif + + struct HumanoidMoveFSM__Fields { + struct BaseComponentPlugin__Fields _; + struct HumanoidMoveFSMBaseMoveState* _curState; + int32_t fallOnGroundFirstFrame; + struct Dictionary_2_MoleMole_HumanoidMoveFSM_JJLCCKKCHPD_MoleMole_HumanoidMoveFSMBaseMoveState_* stateMapInfo; + struct VCHumanoidMoveData* _moveData; + struct VCHumanoidMoveConfig* _moveConfig; + struct VCHumanoidMove* _ownerMove; + struct Animator* _animator; + struct Rigidbody* _rigidbody; + struct AnimatorController* _animatorController; + void* OnMoveUpdateCallback; + void* OnAirUpdateCallback; + bool _initSyncWithCurrentTask; + bool _behaviourSet; + float _sendCombatNotifyTime; + bool enterSprintBS; + bool _positionRotationChanged_k__BackingField; + struct Transform* _transform; + struct Vector3 lateTickStartPosition; + struct Quaternion lateTickStartRotation; + int32_t _layerMaskScene; + int32_t _layerMaskDynamicBarrier; + int32_t layerMaskDynamicBarrierCheckAuthority; + bool ignoreOverallMoveWallProtectionCurrentFrame; + bool stopMoveWhenGoupstairs; + bool lastStopMoveWhenGoupstairs; + float climbGlobalRecovery; + bool autoGoUpstair; + bool forceDoNotSyncWhenReset; + float inSprintTime; + int32_t _lastCurrentStateHash; + int32_t _lastNextStateHash; + bool _firstLatetick; + bool _lastInForbiddenToggleMoveState; + bool _disableMotion4hiUpdateCurrentFrame; + int32_t _flyStateHash; + struct VCMoveIKController* _ikComp; + struct Transform* _lCalf; + struct Transform* _rCalf; + void* _weaponStandbyIKParams; + void* _normalStandbyIKParams; + void* _params; + float _lastSkirtBlendParam; + float _idealSkirtBlendParam; + float _lastIdealSkirtBlendParam; + float _lastSkirtWeight; + float _idealSkirtWeight; + float _lastSkirtPos; + float _idealSkirtPos; + void* _lastFrameAnimSpeedInfo; + void* _currentFrameAnimSpeedInfo; + bool _isInSprintCheckInterval; + bool _isInMuteSprintInterval; + float _timeAfterLastSprint; + uint32_t _lastFrameVelocityCheckBits; + bool _lastFrameVelocityCheckResult; + bool _remoteCheckLightCoreMove; + struct Vector3 _remoteCheckLightCoreMoveTarget; + }; + + struct HumanoidMoveFSM { + struct HumanoidMoveFSM__Class* klass; + MonitorData* monitor; + struct HumanoidMoveFSM__Fields fields; + }; + + + struct SCameraModuleInitialize__VTable { VirtualInvokeData Equals; VirtualInvokeData Finalize; @@ -10829,6 +10930,161 @@ namespace app { struct Nullable_1_Double_ _overrideMinElevation; }; + struct LCIndicatorPlugin__Fields { + struct BaseComponentPlugin__Fields _; + void* _timeCheckConditionKeys; + void* allConditions; + void* _owner; + bool unknow; + void* _levelGadget; + struct GadgetDataItem* _dataItem; + void* _tempLateData; + void* _configIndicator; + void* indicatorDominators; + bool _isIndicatorShow; + void* _checkTimer; + }; + + struct LCIndicatorPlugin { + struct LCIndicatorPlugin__Class* klass; + MonitorData* monitor; + struct LCIndicatorPlugin__Fields fields; + }; + + struct PlayerCookRsp__Fields { + struct MessageBase_1__Fields _; + int32_t retcode_; + struct CookRecipeData_1* recipeData_; + void* itemList_; + uint32_t qteQuality_; + uint32_t cookCount_; + void* extralItemList_; + }; + + struct PlayerCookRsp { + struct PlayerCookRsp__Class* klass; + MonitorData* monitor; + struct PlayerCookRsp__Fields fields; + }; + + struct MonoCookingQTEPage__Fields { + struct MonoUIProxy__Fields _; + struct MonoElementSwitch* _elementSwitch; + struct Transform* _cookNeedRoot; + struct GameObject* _addInfo; + struct Text* _addDescText; + struct GameObject* _iconState; + struct Transform__Array* _foodPanel; + struct MonoUIContainer* _makeBtn; + struct MonoUIContainer* _autoMakeBtn; + struct MonoUIContainer* _returnBtn; + struct GameObject* _qtePanel; + struct GameObject* _manualQteRoot; + struct GameObject* _autoQteRoot; + struct MonoCookGotPanel* _cookGotPanel; + struct Button* _endBtn; + struct RectTransform* _goodAreaTrans; + struct SmoothMask* _goodAreaFill; + struct RectTransform* _perfectAreaTrans; + struct SmoothMask* _perfectAreaFill; + struct RectTransform* _pointerTrans; + float _qteTime; + float _autoQteTime; + float _starQteDelay; + struct GameObject* _selectNumberRoot; + struct GameObject* _grpProficiency; + struct Text* _proficiencyText; + struct MonoUIContainer* _replaceBtn; + struct MonoBagProxySlot* _curRecipeItemSlot; + struct Text* _curRecipeFoodNum; + struct GameObject* _grpResult; + struct GameObject* _bonusAdditionalInfoIcon; + struct Text* _additionalInfoText; + struct GameObject* _grpJoypadButtons; + struct GameObject* _bagSlotPrefab; + struct List_1_MoleMole_MonoItemSlot_* _cookNeedList; + struct MonoCookAvatarSelect* _avatarPanel; + struct MonoAvatarIcon* _avatarIcon; + struct Transform* _avatarIconRoot; + }; + + struct MonoCookingQTEPage { + struct MonoCookingQTEPage__Class* klass; + MonitorData* monitor; + struct MonoCookingQTEPage__Fields fields; + }; + + struct CookingQtePageContext__Fields { + struct BasePageContext__Fields _; + struct MonoCookingQTEPage* _pageMono; + uint32_t _recipeId; + uint32_t _avatarId; + float _goodRangeStart; + float _goodRangeEnd; + float _perfectRangeStart; + float _perfectRangeEnd; + bool _qteStart; + float _qteTime; + float _qteBonusRange; + bool _isAuto; + int32_t _foodKind; + uint32_t _oldProficiency; + uint32_t _newProficiency; + uint32_t _maxProficiency; + uint32_t _curProficiency; + bool _upProficiencyStart; + float _upProficiencyTime; + bool _focusOnNeedItem; + int32_t _needItemIndex; + bool canAutoCook; + struct List_1_MoleMole_SimpleItemStruct_* _itemGotList; + bool _isAvatarPanelOpen; + uint32_t _toSelectAvatarId; + int32_t _toSelectAvatarIndex; + struct List_1_System_UInt32_* _avatarList; + }; + + struct CookingQtePageContext { + struct CookingQtePageContext__Class* klass; + MonitorData* monitor; + struct CookingQtePageContext__Fields fields; + }; + + struct CookRecipeData_1__Fields { + struct MessageBase_1__Fields _; + uint32_t recipeId_; + uint32_t proficiency_; + }; + + struct CookRecipeData_1 { + struct CookRecipeData_1__Class* klass; + MonitorData* monitor; + struct CookRecipeData_1__Fields fields; + }; + + struct __declspec(align(8)) CookRecipeExcelConfig__Fields { + struct SimpleSafeUInt32 idRawNum; + uint32_t _nameTextMapHash; + struct SimpleSafeUInt32 rankLevelRawNum; + struct String* _icon; + uint32_t _descTextMapHash; + struct UInt32__Array* _effectDesc; + int32_t _foodType; + int32_t _cookMethod; + bool _isDefaultUnlocked; + SimpleSafeUInt32 maxProficiencyRawNum; + struct IdCountConfig__Array* _qualityOutputVec; + struct IdCountConfig__Array* _inputVec; + struct String* _qteParam; + struct SimpleSafeUInt32__Array* _qteQualityWeightVec; + }; + + struct CookRecipeExcelConfig { + struct CookRecipeExcelConfig__Class* klass; + MonitorData* monitor; + struct CookRecipeExcelConfig__Fields fields; + }; + #if !defined(_GHIDRA_) && !defined(_IDA_) } #endif diff --git a/cheat-library/src/user/cheat/cheat.cpp b/cheat-library/src/user/cheat/cheat.cpp index 3b27994..4feb490 100644 --- a/cheat-library/src/user/cheat/cheat.cpp +++ b/cheat-library/src/user/cheat/cheat.cpp @@ -36,10 +36,12 @@ #include #include +#include #include #include #include +#include #include "GenshinCM.h" @@ -88,10 +90,12 @@ namespace cheat FEAT_INST(InteractiveMap), FEAT_INST(AutoFish), + FEAT_INST(AutoCook), FEAT_INST(NoFog), FEAT_INST(FPSUnlock), - FEAT_INST(CameraZoom) + FEAT_INST(CameraZoom), + FEAT_INST(ChestIndicator) }); #undef FEAT_INST diff --git a/cheat-library/src/user/cheat/player/NoCD.cpp b/cheat-library/src/user/cheat/player/NoCD.cpp index 2a09635..448e1a1 100644 --- a/cheat-library/src/user/cheat/player/NoCD.cpp +++ b/cheat-library/src/user/cheat/player/NoCD.cpp @@ -9,6 +9,8 @@ namespace cheat::feature static bool HumanoidMoveFSM_CheckSprintCooldown_Hook(void* __this, MethodInfo* method); static bool LCAvatarCombat_IsEnergyMax_Hook(void* __this, MethodInfo* method); static bool LCAvatarCombat_OnSkillStart(app::LCAvatarCombat* __this, uint32_t skillID, float cdMultipler, MethodInfo* method); + static bool LCAvatarCombat_IsSkillInCD_1(app::LCAvatarCombat* __this, app::LCAvatarCombat_OMIIMOJOHIP* skillInfo, MethodInfo* method); + static void ActorAbilityPlugin_AddDynamicFloatWithRange_Hook(void* __this, app::String* key, float value, float minValue, float maxValue, bool forceDoAtRemote, MethodInfo* method); @@ -16,15 +18,13 @@ namespace cheat::feature NoCD::NoCD() : Feature(), NF(f_AbilityReduce, "Reduce Skill/Burst Cooldown", "NoCD", false), - NF(f_AbilityReduceValue, "Reduce skill CD value", "NoCD", 0.1f), - + NF(f_TimerReduce, "Reduce Timer", "NoCD", 1.f), NF(f_UtimateMaxEnergy, "Burst max energy", "NoCD", false), NF(f_Sprint, "No Sprint Cooldown", "NoCD", false), NF(f_InstantBow, "Instant bow", "NoCD", false) - { HookManager::install(app::LCAvatarCombat_IsEnergyMax, LCAvatarCombat_IsEnergyMax_Hook); - HookManager::install(app::LCAvatarCombat_OnSkillStart, LCAvatarCombat_OnSkillStart); + HookManager::install(app::LCAvatarCombat_IsSkillInCD_1, LCAvatarCombat_IsSkillInCD_1); HookManager::install(app::HumanoidMoveFSM_CheckSprintCooldown, HumanoidMoveFSM_CheckSprintCooldown_Hook); HookManager::install(app::ActorAbilityPlugin_AddDynamicFloatWithRange, ActorAbilityPlugin_AddDynamicFloatWithRange_Hook); @@ -44,9 +44,9 @@ namespace cheat::feature "(Energy bubble may appear incomplete but still usable.)"); ConfigWidget("## AbilityReduce", f_AbilityReduce); ImGui::SameLine(); - ConfigWidget("Reduce Skill/Burst Cooldown", f_AbilityReduceValue, 0.1f, 0.2f, 1.0f, + ConfigWidget("Reduce Skill/Burst Cooldown", f_TimerReduce, 1.f, 1.f, 6.0f, "Reduce cooldowns of elemental skills and bursts.\n"\ - "The greater the value, the greater the cooldown."); + "The current value is the maximum value of the cooldown."); ConfigWidget(f_Sprint, "Removes delay in-between sprints."); @@ -86,7 +86,7 @@ namespace cheat::feature void NoCD::DrawStatus() { ImGui::Text("Cooldown\n[%s%s%s%s%s]", - f_AbilityReduce ? fmt::format("Reduce {:.1f}", f_AbilityReduceValue.value()).c_str() : "", + f_AbilityReduce ? fmt::format("Reduce {:.1f}", f_TimerReduce.value()).c_str() : "", f_AbilityReduce && (f_InstantBow || f_Sprint) ? "|" : "", f_InstantBow ? "Bow" : "", f_InstantBow && f_Sprint ? "|" : "", @@ -108,21 +108,37 @@ namespace cheat::feature return CALL_ORIGIN(LCAvatarCombat_IsEnergyMax_Hook, __this, method); } - // Multipler CoolDown Timer | RyujinZX#6666 + // Multipler CoolDown Timer Old | RyujinZX#6666 static bool LCAvatarCombat_OnSkillStart(app::LCAvatarCombat* __this, uint32_t skillID, float cdMultipler, MethodInfo* method) { NoCD& noCD = NoCD::GetInstance(); if (noCD.f_AbilityReduce) { if (__this->fields._targetFixTimer->fields._._timer_k__BackingField > 0) { - cdMultipler = noCD.f_AbilityReduceValue / 3; + cdMultipler = noCD.f_TimerReduce / 3; } else { - cdMultipler = noCD.f_AbilityReduceValue / 1; + cdMultipler = noCD.f_TimerReduce / 1; } } return CALL_ORIGIN(LCAvatarCombat_OnSkillStart, __this, skillID, cdMultipler, method); } + // Timer Speed Up / CoolDown Reduce New | RyujinZX#6666 + static bool LCAvatarCombat_IsSkillInCD_1(app::LCAvatarCombat* __this, app::LCAvatarCombat_OMIIMOJOHIP* skillInfo, MethodInfo* method) { + NoCD& noCD = NoCD::GetInstance(); + if (noCD.f_AbilityReduce) + { + auto cdTimer = app::SafeFloat_GetValue(nullptr, skillInfo->fields.cdTimer, nullptr); + + if (cdTimer > noCD.f_TimerReduce) + { + struct app::SafeFloat MyValueProtect = app::SafeFloat_SetValue(nullptr, noCD.f_TimerReduce - 1, nullptr); + skillInfo->fields.cdTimer = MyValueProtect; + } + } + return CALL_ORIGIN(LCAvatarCombat_IsSkillInCD_1, __this, skillInfo, method); + } + // Check sprint cooldown, we just return true if sprint no cooldown enabled. static bool HumanoidMoveFSM_CheckSprintCooldown_Hook(void* __this, MethodInfo* method) { diff --git a/cheat-library/src/user/cheat/player/NoCD.h b/cheat-library/src/user/cheat/player/NoCD.h index 0565056..d296da9 100644 --- a/cheat-library/src/user/cheat/player/NoCD.h +++ b/cheat-library/src/user/cheat/player/NoCD.h @@ -8,7 +8,7 @@ namespace cheat::feature { public: config::Field> f_AbilityReduce; - config::Field f_AbilityReduceValue; + config::Field f_TimerReduce; config::Field> f_UtimateMaxEnergy; config::Field> f_Sprint; diff --git a/cheat-library/src/user/cheat/player/NoClip.cpp b/cheat-library/src/user/cheat/player/NoClip.cpp index b2eb1ea..cb41200 100644 --- a/cheat-library/src/user/cheat/player/NoClip.cpp +++ b/cheat-library/src/user/cheat/player/NoClip.cpp @@ -9,11 +9,12 @@ namespace cheat::feature { - static void HumanoidMoveFSM_LateTick_Hook(void* __this, float deltaTime, MethodInfo* method); + static void HumanoidMoveFSM_LateTick_Hook(app::HumanoidMoveFSM* __this, float deltaTime, MethodInfo* method); app::Vector3 zero; NoClip::NoClip() : Feature(), NF(f_Enabled, "No clip", "NoClip", false), + NF(f_NoAnimation, "No Animation", "NoClip", false), NF(f_Speed, "Speed", "NoClip", 5.5f), NF(f_CameraRelative, "Relative to camera", "NoClip", true), NF(f_VelocityMode, "Velocity mode", "NoClip", false), @@ -38,6 +39,8 @@ namespace cheat::feature ConfigWidget("Enabled", f_Enabled, "Enables no-clip (fast speed + no collision).\n" \ "To move, use WASD, Space (go up), and Shift (go down)."); + ConfigWidget("No Animation", f_NoAnimation, "Disables player animations."); + ConfigWidget("Speed", f_Speed, 0.1f, 2.0f, 100.0f, "No-clip move speed.\n" \ "Not recommended setting above 5.0."); @@ -210,11 +213,18 @@ namespace cheat::feature // Disabling standard motion performing. // This disabling any animations, climb, jump, swim and so on. // But when it disabled, MoveSync sending our last position, so needs to update position in packet. - static void HumanoidMoveFSM_LateTick_Hook(void* __this, float deltaTime, MethodInfo* method) + static void HumanoidMoveFSM_LateTick_Hook(app::HumanoidMoveFSM* __this, float deltaTime, MethodInfo* method) { NoClip& noClip = NoClip::GetInstance(); - if (noClip.f_Enabled) - return; + + if (noClip.f_Enabled) { + if (!noClip.f_NoAnimation) { + __this->fields._layerMaskScene = 2; + } + else { + return; + } + } CALL_ORIGIN(HumanoidMoveFSM_LateTick_Hook, __this, deltaTime, method); } diff --git a/cheat-library/src/user/cheat/player/NoClip.h b/cheat-library/src/user/cheat/player/NoClip.h index 250872a..ecfc01d 100644 --- a/cheat-library/src/user/cheat/player/NoClip.h +++ b/cheat-library/src/user/cheat/player/NoClip.h @@ -11,6 +11,8 @@ namespace cheat::feature { public: config::Field> f_Enabled; + config::Field> f_NoAnimation; + config::Field f_Speed; config::Field f_CameraRelative; config::Field> f_VelocityMode; diff --git a/cheat-library/src/user/cheat/visuals/ShowChestIndicator.cpp b/cheat-library/src/user/cheat/visuals/ShowChestIndicator.cpp new file mode 100644 index 0000000..45e1bcd --- /dev/null +++ b/cheat-library/src/user/cheat/visuals/ShowChestIndicator.cpp @@ -0,0 +1,56 @@ +#include "pch-il2cpp.h" +#include "ShowChestIndicator.h" + +#include +#include + +namespace cheat::feature +{ + static bool IndicatorPlugin_DoCheck(app::LCIndicatorPlugin* __this, MethodInfo* method); + + ChestIndicator::ChestIndicator() : Feature(), + NF(f_Enabled, "Show Chest Indicator", "ShowChest", false) + { + HookManager::install(app::LCIndicatorPlugin_DoCheck, IndicatorPlugin_DoCheck); + } + + const FeatureGUIInfo& ChestIndicator::GetGUIInfo() const + { + static const FeatureGUIInfo info{ "ShowChest", "Visuals", false }; + return info; + } + + void ChestIndicator::DrawMain() + { + ConfigWidget(f_Enabled, "Show chests, game mechanics."); + } + + bool ChestIndicator::NeedStatusDraw() const + { + return f_Enabled; + } + + void ChestIndicator::DrawStatus() + { + ImGui::Text("Chest Indicator"); + } + + ChestIndicator& ChestIndicator::GetInstance() + { + static ChestIndicator instance; + return instance; + } + + static bool IndicatorPlugin_DoCheck(app::LCIndicatorPlugin* __this, MethodInfo* method) { + ChestIndicator& chestIndicator = ChestIndicator::GetInstance(); + if (chestIndicator.f_Enabled) + { + if (__this->fields._dataItem != nullptr) + { + // Base Chest not found, try improve + app::LCIndicatorPlugin_ShowIcon(__this, nullptr); + } + } + return CALL_ORIGIN(IndicatorPlugin_DoCheck, __this, method); + } +} \ No newline at end of file diff --git a/cheat-library/src/user/cheat/visuals/ShowChestIndicator.h b/cheat-library/src/user/cheat/visuals/ShowChestIndicator.h new file mode 100644 index 0000000..389706f --- /dev/null +++ b/cheat-library/src/user/cheat/visuals/ShowChestIndicator.h @@ -0,0 +1,25 @@ +#pragma once +#include +#include + +namespace cheat::feature +{ + + class ChestIndicator : public Feature + { + public: + config::Field> f_Enabled; + + static ChestIndicator& GetInstance(); + + const FeatureGUIInfo& GetGUIInfo() const override; + void DrawMain() override; + + virtual bool NeedStatusDraw() const override; + void DrawStatus() override; + + private: + ChestIndicator(); + }; +} + diff --git a/cheat-library/src/user/cheat/world/AutoCook.cpp b/cheat-library/src/user/cheat/world/AutoCook.cpp new file mode 100644 index 0000000..e61864e --- /dev/null +++ b/cheat-library/src/user/cheat/world/AutoCook.cpp @@ -0,0 +1,107 @@ +#include "pch-il2cpp.h" +#include "AutoCook.h" + +#include +#include + +namespace cheat::feature +{ + static void PlayerModule_RequestPlayerCook(app::PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method); + static void PlayerModule_OnPlayerCookRsp(app::PlayerModule* __this, app::PlayerCookRsp* rsp, MethodInfo* method); + + static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method); + static void CookingQtePageContext_SetProficiencyInfo(app::CookingQtePageContext* __this, MethodInfo* method); + static uint32_t CookRecipeExcelConfig_get_maxProficiency(app::CookRecipeExcelConfig* __this, MethodInfo* method); + + AutoCook::AutoCook() : Feature(), + NF(f_Enabled, "Auto Cooking", "AutoCook", false), + NF(f_Count, "Count Item", "AutoCook", 1), + NF(f_Quality, "Quality", "AutoCook", 1) + { + HookManager::install(app::PlayerModule_RequestPlayerCook, PlayerModule_RequestPlayerCook); + HookManager::install(app::PlayerModule_OnPlayerCookRsp, PlayerModule_OnPlayerCookRsp); + HookManager::install(app::CookingQtePageContext_UpdateProficiency, CookingQtePageContext_UpdateProficiency); + HookManager::install(app::CookRecipeExcelConfig_get_maxProficiency, CookRecipeExcelConfig_get_maxProficiency); + } + + const FeatureGUIInfo& AutoCook::GetGUIInfo() const + { + static const FeatureGUIInfo info{ "AutoCook", "World", true }; + return info; + } + + void AutoCook::DrawMain() + { + ConfigWidget(f_Enabled, "Automatic cooking."); + ConfigWidget("Count Item", f_Count, 1, 1, 100, + "How much to cook at a time.\n" \ + "(If the recipe is not fully explored, set it to 1.)"); + ConfigWidget("Quality Cooking", f_Quality, 1, 1, 3, "Quality of the cook."); + } + + bool AutoCook::NeedStatusDraw() const + { + return f_Enabled; + } + + void AutoCook::DrawStatus() + { + ImGui::Text("Auto Cook"); + } + + AutoCook& AutoCook::GetInstance() + { + static AutoCook instance; + return instance; + } + + // Auto Cooking | RyujinZX#6666 + + static void PlayerModule_RequestPlayerCook(app::PlayerModule* __this, uint32_t recipeId, uint32_t avatarId, uint32_t qteQuality, uint32_t count, MethodInfo* method) + { + AutoCook& autoCook = AutoCook::GetInstance(); + if (autoCook.f_Enabled) + { + qteQuality = autoCook.f_Quality; + count = autoCook.f_Count; + } + + return CALL_ORIGIN(PlayerModule_RequestPlayerCook, __this, recipeId, avatarId, qteQuality, count, method); + } + + static void PlayerModule_OnPlayerCookRsp(app::PlayerModule* __this, app::PlayerCookRsp* rsp, MethodInfo* method) { + AutoCook& autoCook = AutoCook::GetInstance(); + if (autoCook.f_Enabled) + { + rsp->fields.qteQuality_ = autoCook.f_Quality; + rsp->fields.cookCount_ = autoCook.f_Count; + + // Unlock Quick Cooking, It will reset after a restart, so it is better to study the recipe in full at once. + if (rsp->fields.recipeData_ != nullptr) + rsp->fields.recipeData_->fields.proficiency_ = autoCook.CookCount; + } + + return CALL_ORIGIN(PlayerModule_OnPlayerCookRsp, __this, rsp, method); + } + + static void CookingQtePageContext_UpdateProficiency(app::CookingQtePageContext* __this, MethodInfo* method) { + AutoCook& autoCook = AutoCook::GetInstance(); + if (autoCook.f_Enabled) + { + __this->fields._pageMono->fields._qteTime = 0; + __this->fields._pageMono->fields._autoQteTime = 0; + } + + return CALL_ORIGIN(CookingQtePageContext_UpdateProficiency, __this, method); + } + + static uint32_t CookRecipeExcelConfig_get_maxProficiency(app::CookRecipeExcelConfig* __this, MethodInfo* method) { + AutoCook& autoCook = AutoCook::GetInstance(); + if (autoCook.f_Enabled) + { + uint32_t maxCount = app::SimpleSafeUInt32_get_Value(nullptr, __this->fields.maxProficiencyRawNum, nullptr); + autoCook.CookCount = maxCount; + } + return CALL_ORIGIN(CookRecipeExcelConfig_get_maxProficiency, __this, method); + } +} \ No newline at end of file diff --git a/cheat-library/src/user/cheat/world/AutoCook.h b/cheat-library/src/user/cheat/world/AutoCook.h new file mode 100644 index 0000000..737e3c2 --- /dev/null +++ b/cheat-library/src/user/cheat/world/AutoCook.h @@ -0,0 +1,30 @@ +#pragma once +#include +#include + +namespace cheat::feature +{ + + class AutoCook : public Feature + { + public: + config::Field> f_Enabled; + config::Field f_Count; + config::Field f_Quality; + + uint32_t CookCount; + + static AutoCook& GetInstance(); + + const FeatureGUIInfo& GetGUIInfo() const override; + void DrawMain() override; + + virtual bool NeedStatusDraw() const override; + void DrawStatus() override; + + private: + + AutoCook(); + }; +} +