Merge pull request #376 from RyujinZX/master

hotfix bug
This commit is contained in:
Taiga 2022-07-27 19:50:32 -07:00 committed by GitHub
commit 1eea293f80
4 changed files with 19 additions and 8 deletions

View File

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

View File

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

View File

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

View File

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