hotfix bug
issues: 243 issues: 281
This commit is contained in:
parent
f0ae3753f9
commit
eb88186865
@ -51,9 +51,8 @@ DO_APP_FUNC(0x026F0820, bool, MoleMole_LCAvatarCombat_IsEnergyMax, (void* __this
|
|||||||
DO_APP_FUNC(0x026F0500, void, MoleMole_LCAvatarCombat_ChangeEnergy_1, (LCAvatarCombat* __this, ElementType__Enum type, float value, DataPropOp__Enum state, MethodInfo* method));
|
DO_APP_FUNC(0x026F0500, void, MoleMole_LCAvatarCombat_ChangeEnergy_1, (LCAvatarCombat* __this, ElementType__Enum type, float value, DataPropOp__Enum state, MethodInfo* method));
|
||||||
DO_APP_FUNC(0x026F13C0, bool, MoleMole_LCAvatarCombat_OnSkillStart, (LCAvatarCombat* __this, uint32_t skillID, float cdMultipler, MethodInfo* method));
|
DO_APP_FUNC(0x026F13C0, bool, MoleMole_LCAvatarCombat_OnSkillStart, (LCAvatarCombat* __this, uint32_t skillID, float cdMultipler, MethodInfo* method));
|
||||||
DO_APP_FUNC(0x026F54A0, bool, MoleMole_LCAvatarCombat_IsSkillInCD_1, (LCAvatarCombat* __this, LCAvatarCombat_LCAvatarCombat_SkillInfo* skillInfo, MethodInfo* method));
|
DO_APP_FUNC(0x026F54A0, bool, MoleMole_LCAvatarCombat_IsSkillInCD_1, (LCAvatarCombat* __this, LCAvatarCombat_LCAvatarCombat_SkillInfo* skillInfo, MethodInfo* method));
|
||||||
|
DO_APP_FUNC(0x02DB4680, void, MoleMole_ActorAbilityPlugin_AddDynamicFloatWithRange, (MoleMole_ActorAbilityPlugin* __this, String* key, float value, float min, float max, bool forceDoAtRemote, MethodInfo* method));
|
||||||
DO_APP_FUNC(0x02DB4680, void, MoleMole_ActorAbilityPlugin_AddDynamicFloatWithRange, (void* __this, String* key, float value, float min, float max, bool forceDoAtRemote, MethodInfo* method));
|
|
||||||
|
|
||||||
// Rapid fire
|
// Rapid fire
|
||||||
DO_APP_FUNC(0x017B1D50, void, MoleMole_LCBaseCombat_DoHitEntity, (LCBaseCombat* __this, uint32_t targetID, AttackResult* attackResult, bool ignoreCheckCanBeHitInMP, MethodInfo* method));
|
DO_APP_FUNC(0x017B1D50, void, MoleMole_LCBaseCombat_DoHitEntity, (LCBaseCombat* __this, uint32_t targetID, AttackResult* attackResult, bool ignoreCheckCanBeHitInMP, MethodInfo* method));
|
||||||
DO_APP_FUNC(0x019DDF40, void, MoleMole_Formula_CalcAttackResult, (CombatProperty* attackCombatProperty, CombatProperty* defenseCombatProperty, AttackResult* attackResult, BaseEntity* attackerEntity, BaseEntity* attackeeEntity, MethodInfo* method));
|
DO_APP_FUNC(0x019DDF40, void, MoleMole_Formula_CalcAttackResult, (CombatProperty* attackCombatProperty, CombatProperty* defenseCombatProperty, AttackResult* attackResult, BaseEntity* attackerEntity, BaseEntity* attackeeEntity, MethodInfo* method));
|
||||||
@ -250,6 +249,7 @@ DO_APP_FUNC(0x0596AFF0, LCBaseCombat*, MoleMole_BaseEntity_GetLogicCombatCompone
|
|||||||
DO_APP_FUNC_METHODINFO(0x099D4410, MoleMole_BaseEntity_GetLogicCombatComponent_1__MethodInfo);
|
DO_APP_FUNC_METHODINFO(0x099D4410, MoleMole_BaseEntity_GetLogicCombatComponent_1__MethodInfo);
|
||||||
|
|
||||||
DO_APP_FUNC(0x031ACE30, String*, MoleMole_BaseEntity_ToStringRelease, (BaseEntity* __this, MethodInfo* method));
|
DO_APP_FUNC(0x031ACE30, String*, MoleMole_BaseEntity_ToStringRelease, (BaseEntity* __this, MethodInfo* method));
|
||||||
|
|
||||||
DO_APP_FUNC(0x03180C10, void, MoleMole_BaseEntity_SetRelativePosition, (BaseEntity* __this, Vector3 position, bool forceSyncToRigidbody, MethodInfo* method));
|
DO_APP_FUNC(0x03180C10, void, MoleMole_BaseEntity_SetRelativePosition, (BaseEntity* __this, Vector3 position, bool forceSyncToRigidbody, MethodInfo* method));
|
||||||
DO_APP_FUNC(0x0319D8B0, void, MoleMole_BaseEntity_SetAbsolutePosition, (BaseEntity* __this, Vector3 abpos, bool forceSyncToRigidbody, MethodInfo* method));
|
DO_APP_FUNC(0x0319D8B0, void, MoleMole_BaseEntity_SetAbsolutePosition, (BaseEntity* __this, Vector3 abpos, bool forceSyncToRigidbody, MethodInfo* method));
|
||||||
DO_APP_FUNC(0x031AA160, Vector3, MoleMole_BaseEntity_GetAbsolutePosition, (BaseEntity* __this, MethodInfo* method));
|
DO_APP_FUNC(0x031AA160, Vector3, MoleMole_BaseEntity_GetAbsolutePosition, (BaseEntity* __this, MethodInfo* method));
|
||||||
|
@ -11975,6 +11975,29 @@ namespace app {
|
|||||||
struct Avatar__Fields fields;
|
struct Avatar__Fields fields;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct MoleMole_ActorAbilityPlugin__Fields {
|
||||||
|
struct BaseComponentPlugin__Fields _;
|
||||||
|
struct Action_3_MoleMole_BaseEntity_MoleMole_Config_AddGlobalValue_MoleMole_ActorAbility_* _addGlobalValueHandlerClosureDelegate;
|
||||||
|
struct Action_3_MoleMole_BaseEntity_MoleMole_Config_SetGlobalValue_MoleMole_ActorAbility_* _setGlobalValueHandlerClosureDelegate;
|
||||||
|
struct Action_3_MoleMole_BaseEntity_MoleMole_Config_MultiplyGlobalValue_MoleMole_ActorAbility_* _multiplyGlobalValueHandlerClosureDelegate;
|
||||||
|
struct Action_4_MoleMole_BaseEntity_MoleMole_Config_MultiplyGlobalValue_MoleMole_ActorAbility_Single_* MEEAPCINNBE;
|
||||||
|
struct Action_4_MoleMole_BaseEntity_String_Single_CPKJHKOJDIF_* LLAIOCNHNPM;
|
||||||
|
struct List_1_MoleMole_MonoEffectProxyHandle_* _effectProxyListCache;
|
||||||
|
struct List_1_MoleMole_MonoEffectProxyHandle_* _effectProxyListCacheForChangFollowDampTime;
|
||||||
|
struct List_1_UnityEngine_Vector3_* _pushedPosList;
|
||||||
|
struct MoleMole_LCAbility* _owner;
|
||||||
|
struct List_1_MoleMole_ActorAbility_* _appliedAbilities;
|
||||||
|
struct Dictionary_2_System_UInt32_System_Int32_* _appliedAbilitiesIndex;
|
||||||
|
struct Dictionary_2_System_String_MoleMole_ActorAbility_* CKDBIBGCPOB;
|
||||||
|
uint32_t nextValidAbilityID;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MoleMole_ActorAbilityPlugin {
|
||||||
|
struct MoleMole_ActorAbilityPlugin__Class* klass;
|
||||||
|
MonitorData* monitor;
|
||||||
|
struct MoleMole_ActorAbilityPlugin__Fields fields;
|
||||||
|
};
|
||||||
|
|
||||||
#if !defined(_GHIDRA_) && !defined(_IDA_)
|
#if !defined(_GHIDRA_) && !defined(_IDA_)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -221,7 +221,8 @@ namespace cheat::game::filters
|
|||||||
SimpleFilter JadeplumeTerrorshroom = { EntityType__Enum_1::Monster, "Fungus_Raptor" };
|
SimpleFilter JadeplumeTerrorshroom = { EntityType__Enum_1::Monster, "Fungus_Raptor" };
|
||||||
SimpleFilter RishbolandTiger = { EntityType__Enum_1::Monster, "_Megamoth_" };
|
SimpleFilter RishbolandTiger = { EntityType__Enum_1::Monster, "_Megamoth_" };
|
||||||
SimpleFilter ShaggySumpterBeast = { EntityType__Enum_1::Monster, "_Panther" };
|
SimpleFilter ShaggySumpterBeast = { EntityType__Enum_1::Monster, "_Panther" };
|
||||||
SimpleFilter Spincrocodile = { EntityType__Enum_1::Monster, "_Gator" };
|
SimpleFilter Spincrocodile = { EntityType__Enum_1::Monster, "_Gator" };
|
||||||
|
SimpleFilter SentryTurrets = { EntityType__Enum_1::Field, "SentryTurrets_" };
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace plant
|
namespace plant
|
||||||
|
@ -220,7 +220,8 @@ namespace cheat::game::filters
|
|||||||
extern SimpleFilter Beisht;
|
extern SimpleFilter Beisht;
|
||||||
extern SimpleFilter RishbolandTiger;
|
extern SimpleFilter RishbolandTiger;
|
||||||
extern SimpleFilter ShaggySumpterBeast;
|
extern SimpleFilter ShaggySumpterBeast;
|
||||||
extern SimpleFilter Spincrocodile;
|
extern SimpleFilter Spincrocodile;
|
||||||
|
extern SimpleFilter SentryTurrets;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace plant
|
namespace plant
|
||||||
|
@ -11,14 +11,14 @@ namespace cheat::feature
|
|||||||
static bool LCAvatarCombat_OnSkillStart(app::LCAvatarCombat* __this, uint32_t skillID, float cdMultipler, 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_LCAvatarCombat_SkillInfo* skillInfo, MethodInfo* method);
|
static bool LCAvatarCombat_IsSkillInCD_1(app::LCAvatarCombat* __this, app::LCAvatarCombat_LCAvatarCombat_SkillInfo* skillInfo, MethodInfo* method);
|
||||||
|
|
||||||
static void ActorAbilityPlugin_AddDynamicFloatWithRange_Hook(void* __this, app::String* key, float value, float minValue, float maxValue,
|
static void ActorAbilityPlugin_AddDynamicFloatWithRange_Hook(app::MoleMole_ActorAbilityPlugin* __this, app::String* key, float value, float minValue, float maxValue,
|
||||||
bool forceDoAtRemote, MethodInfo* method);
|
bool forceDoAtRemote, MethodInfo* method);
|
||||||
|
|
||||||
static std::list<std::string> abilityLog;
|
static std::list<std::string> abilityLog;
|
||||||
|
|
||||||
NoCD::NoCD() : Feature(),
|
NoCD::NoCD() : Feature(),
|
||||||
NF(f_AbilityReduce, "Reduce Skill/Burst Cooldown", "NoCD", false),
|
NF(f_AbilityReduce, "Reduce Skill/Burst Cooldown", "NoCD", false),
|
||||||
NF(f_TimerReduce, "Reduce Timer", "NoCD", 1.f),
|
NF(f_TimerReduce, "Reduce Timer", "NoCD", 1.f),
|
||||||
NF(f_UtimateMaxEnergy, "Burst max energy", "NoCD", false),
|
NF(f_UtimateMaxEnergy, "Burst max energy", "NoCD", false),
|
||||||
NF(f_Sprint, "No Sprint Cooldown", "NoCD", false),
|
NF(f_Sprint, "No Sprint Cooldown", "NoCD", false),
|
||||||
NF(f_InstantBow, "Instant bow", "NoCD", false)
|
NF(f_InstantBow, "Instant bow", "NoCD", false)
|
||||||
@ -28,6 +28,7 @@ namespace cheat::feature
|
|||||||
|
|
||||||
HookManager::install(app::MoleMole_HumanoidMoveFSM_CheckSprintCooldown, HumanoidMoveFSM_CheckSprintCooldown_Hook);
|
HookManager::install(app::MoleMole_HumanoidMoveFSM_CheckSprintCooldown, HumanoidMoveFSM_CheckSprintCooldown_Hook);
|
||||||
HookManager::install(app::MoleMole_ActorAbilityPlugin_AddDynamicFloatWithRange, ActorAbilityPlugin_AddDynamicFloatWithRange_Hook);
|
HookManager::install(app::MoleMole_ActorAbilityPlugin_AddDynamicFloatWithRange, ActorAbilityPlugin_AddDynamicFloatWithRange_Hook);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const FeatureGUIInfo& NoCD::GetGUIInfo() const
|
const FeatureGUIInfo& NoCD::GetGUIInfo() const
|
||||||
@ -153,21 +154,26 @@ namespace cheat::feature
|
|||||||
// value - increase value
|
// value - increase value
|
||||||
// min and max - bounds of charge.
|
// min and max - bounds of charge.
|
||||||
// So, to charge make full charge m_Instantly, just replace value to maxValue.
|
// So, to charge make full charge m_Instantly, just replace value to maxValue.
|
||||||
static void ActorAbilityPlugin_AddDynamicFloatWithRange_Hook(void* __this, app::String* key, float value, float minValue, float maxValue,
|
static void ActorAbilityPlugin_AddDynamicFloatWithRange_Hook(app::MoleMole_ActorAbilityPlugin* __this, app::String* key, float value, float minValue, float maxValue,
|
||||||
bool forceDoAtRemote, MethodInfo* method)
|
bool forceDoAtRemote, MethodInfo* method)
|
||||||
{
|
{
|
||||||
std::time_t t = std::time(nullptr);
|
std::time_t t = std::time(nullptr);
|
||||||
auto logEntry = fmt::format("{:%H:%M:%S} | Key: {} value {}.", fmt::localtime(t), il2cppi_to_string(key), value);
|
auto logEntry = fmt::format("{:%H:%M:%S} | Key: {} value: {} | min: {} | max: {}.", fmt::localtime(t), il2cppi_to_string(key), value, minValue, maxValue);
|
||||||
abilityLog.push_front(logEntry);
|
abilityLog.push_front(logEntry);
|
||||||
if (abilityLog.size() > 50)
|
if (abilityLog.size() > 50)
|
||||||
abilityLog.pop_back();
|
abilityLog.pop_back();
|
||||||
|
|
||||||
NoCD& noCD = NoCD::GetInstance();
|
NoCD& noCD = NoCD::GetInstance();
|
||||||
// This function is calling not only for bows, so if don't put key filter it cause various game mechanic bugs.
|
// This function is calling not only for bows, so if don't put key filter it cause various game mechanic bugs.
|
||||||
// For now only "_Enchanted_Time" found for bow charging, maybe there are more. Need to continue research.
|
// For now only "_Enchanted_Time" found for bow charging, maybe there are more. Need to continue research.
|
||||||
if (noCD.f_InstantBow && il2cppi_to_string(key) == "_Enchanted_Time")
|
if (noCD.f_InstantBow && il2cppi_to_string(key) == "_Enchanted_Time")
|
||||||
|
{
|
||||||
value = maxValue;
|
value = maxValue;
|
||||||
|
__this->fields.nextValidAbilityID = 36; // HotFix Yelan, Fishl | It's essentially a game bug. | RyujinZX#7832
|
||||||
|
}
|
||||||
|
|
||||||
CALL_ORIGIN(ActorAbilityPlugin_AddDynamicFloatWithRange_Hook, __this, key, value, minValue, maxValue, forceDoAtRemote, method);
|
CALL_ORIGIN(ActorAbilityPlugin_AddDynamicFloatWithRange_Hook, __this, key, value, minValue, maxValue, forceDoAtRemote, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,12 +186,13 @@ namespace cheat::feature
|
|||||||
bool IsValidByFilter(game::Entity* entity)
|
bool IsValidByFilter(game::Entity* entity)
|
||||||
{
|
{
|
||||||
if (game::filters::combined::OrganicTargets.IsValid(entity) ||
|
if (game::filters::combined::OrganicTargets.IsValid(entity) ||
|
||||||
|
game::filters::monster::SentryTurrets.IsValid(entity) ||
|
||||||
game::filters::combined::Ores.IsValid(entity) ||
|
game::filters::combined::Ores.IsValid(entity) ||
|
||||||
game::filters::puzzle::Geogranum.IsValid(entity) ||
|
game::filters::puzzle::Geogranum.IsValid(entity) ||
|
||||||
game::filters::puzzle::LargeRockPile.IsValid(entity) ||
|
game::filters::puzzle::LargeRockPile.IsValid(entity) ||
|
||||||
game::filters::puzzle::SmallRockPile.IsValid(entity))
|
game::filters::puzzle::SmallRockPile.IsValid(entity))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Raises when any entity do hit event.
|
// Raises when any entity do hit event.
|
||||||
@ -207,6 +208,7 @@ namespace cheat::feature
|
|||||||
|
|
||||||
auto& manager = game::EntityManager::instance();
|
auto& manager = game::EntityManager::instance();
|
||||||
auto originalTarget = manager.entity(targetID);
|
auto originalTarget = manager.entity(targetID);
|
||||||
|
|
||||||
if (!IsValidByFilter(originalTarget))
|
if (!IsValidByFilter(originalTarget))
|
||||||
return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
|
return CALL_ORIGIN(LCBaseCombat_DoHitEntity_Hook, __this, targetID, attackResult, ignoreCheckCanBeHitInMP, method);
|
||||||
|
|
||||||
@ -236,6 +238,7 @@ namespace cheat::feature
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& entity : validEntities) {
|
for (const auto& entity : validEntities) {
|
||||||
|
|
||||||
if (rapidFire.f_MultiHit) {
|
if (rapidFire.f_MultiHit) {
|
||||||
int attackCount = rapidFire.GetAttackCount(__this, entity->runtimeID(), attackResult);
|
int attackCount = rapidFire.GetAttackCount(__this, entity->runtimeID(), attackResult);
|
||||||
for (int i = 0; i < attackCount; i++)
|
for (int i = 0; i < attackCount; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user